././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.364188 fdroidserver-2.4.0/0000755000175000017500000000000014770510164012724 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742812298.0 fdroidserver-2.4.0/.bandit0000644000175000017500000000006414770232212014161 0ustar00hanshans[bandit] skips: B110,B404,B408,B603,B607 targets: . ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368093.0 fdroidserver-2.4.0/.editorconfig0000644000175000017500000000032314743421035015375 0ustar00hanshansroot = true [*] charset = utf-8 end_of_line = lf insert_final_newline = true trim_trailing_whitespace = true [**.py] indent_style = space indent_size = 4 [.gitlab-ci.yml] indent_style = space indent_size = 2 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901189.0 fdroidserver-2.4.0/.gitignore0000644000175000017500000000352114770507705014724 0ustar00hanshans*~ *.pyc *.class *.box TAGS .idea .ropeproject/ # files generated by build /build/ /dist/ env/ ENV/ /fdroidserver.egg-info/ pylint.parseable /.testfiles/ README.rst /.eggs/ # editor tmp files .*.swp .ropeproject/ # files generated by tests tmp/ /tests/repo/icons* /tests/repo/status # files used in manual testing /config.yml /tmp/ /logs/ /metadata/ /makebs.config.py makebuildserver.config.py /tests/.fdroid.keypass.txt /tests/.fdroid.keystorepass.txt /tests/.java.security /tests/fdroid-icon.png /tests/OBBMainOldVersion.apk /tests/OBBMainPatchCurrent.apk /tests/OBBMainTwoVersions.apk /tests/archive/categories.txt /tests/archive/diff/[1-9]*.json /tests/archive/entry.jar /tests/archive/entry.json /tests/archive/icons* /tests/archive/index-v1.jar /tests/archive/index-v1.json /tests/archive/index-v2.json /tests/archive/index.css /tests/archive/index.html /tests/archive/index.jar /tests/archive/index.png /tests/archive/index.xml /tests/archive/index_unsigned.jar /tests/metadata/org.videolan.vlc/en-US/icon*.png /tests/repo/diff/[1-9]*.json /tests/repo/index.css /tests/repo/index.html /tests/repo/index.jar /tests/repo/index.png /tests/repo/index_unsigned.jar /tests/repo/index-v1.jar /tests/repo/info.guardianproject.urzip/ /tests/repo/info.guardianproject.checkey/en-US/phoneScreenshots/checkey-phone.png /tests/repo/info.guardianproject.checkey/en-US/phoneScreenshots/checkey.png /tests/repo/obb.mainpatch.current/en-US/featureGraphic_ffhLaojxbGAfu9ROe1MJgK5ux8d0OVc6b65nmvOBaTk=.png /tests/repo/obb.mainpatch.current/en-US/icon_WI0pkO3LsklrsTAnRr-OQSxkkoMY41lYe2-fAvXLiLg=.png /tests/repo/org.videolan.vlc/en-US/icon_yAfSvPRJukZzMMfUzvbYqwaD1XmHXNtiPBtuPVHW-6s=.png /tests/urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234.apk /tests/virustotal/ /unsigned/ # generated by gettext locale/*/LC_MESSAGES/fdroidserver.mo # sphinx public/ ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898792.0 fdroidserver-2.4.0/.gitlab-ci.yml0000644000175000017500000006245114770503150015365 0ustar00hanshans--- variables: pip: pip3 --timeout 100 --retries 10 # speed up git checkout phase GIT_DEPTH: 1 # Run the whole test suite in an environment that is like the # buildserver guest VM. This installs python3-babel because that is # only used by the test suite, and not needed in the buildserver. # # Some extra packages are required for this test run that are not # provided by the buildserver since they are not needed there: # * python3-babel for compiling localization files # * gnupg-agent for the full signing setup # * python3-clint for fancy progress bars for users # * python3-pycountry for linting config/mirrors.yml buildserver run-tests: image: registry.gitlab.com/fdroid/fdroidserver:buildserver script: - apt-get update - apt-get install gnupg-agent python3-babel python3-biplist python3-clint python3-pycountry - ./tests/run-tests # make sure that translations do not cause stacktraces - cd $CI_PROJECT_DIR/locale - for locale in *; do test -d $locale || continue; for cmd in `sed -n 's/.*("\(.*\)", *_.*/\1/p' $CI_PROJECT_DIR/fdroid`; do LANGUAGE=$locale $CI_PROJECT_DIR/fdroid $cmd --help > /dev/null; done done # Test that the parsing of the .yml metadata format didn't change from last # released version. This uses the commit ID of the release tags, # rather than the release tag itself so that contributor forks do not # need to include the tags in them for this test to work. # # The COMMIT_ID should be bumped after each release, so that the list # of sed hacks needed does not continuously grow. metadata_v0: image: registry.gitlab.com/fdroid/fdroidserver:buildserver variables: GIT_DEPTH: 1000 RELEASE_COMMIT_ID: 50aa35772b058e76b950c01e16019c072c191b73 # after switching to `git rev-parse` script: - git fetch https://gitlab.com/fdroid/fdroidserver.git $RELEASE_COMMIT_ID - cd tests - export GITCOMMIT=$(git rev-parse HEAD) - git checkout $RELEASE_COMMIT_ID - cd .. - git clone --depth 1 https://gitlab.com/fdroid/fdroiddata.git - cd fdroiddata - ../tests/dump_internal_metadata_format.py - cd .. - git reset --hard - git checkout $GITCOMMIT - cd fdroiddata - ../tests/dump_internal_metadata_format.py - sed -i -e '/ArchivePolicy:/d' -e '/FlattrID:/d' -e '/RequiresRoot:/d' metadata/dump_*/*.yaml - diff -uw metadata/dump_* .apt-template: &apt-template variables: DEBIAN_FRONTEND: noninteractive LANG: C.UTF-8 before_script: - echo Etc/UTC > /etc/timezone - echo 'APT::Install-Recommends "0";' 'APT::Install-Suggests "0";' 'APT::Get::Assume-Yes "true";' 'Acquire::Retries "20";' 'Dpkg::Use-Pty "0";' 'quiet "1";' >> /etc/apt/apt.conf.d/99gitlab # Ubuntu and other distros often lack https:// support - grep Debian /etc/issue.net && { find /etc/apt/sources.list* -type f | xargs sed -i s,http:,https:, ; } - echo 'Acquire::https::Verify-Peer "false";' > /etc/apt/apt.conf.d/99nocacertificates - apt-get update - apt-get install ca-certificates - rm /etc/apt/apt.conf.d/99nocacertificates - apt-get dist-upgrade # Since F-Droid uses Debian as its default platform, from production # servers to CI to contributor machines, it is important to know when # changes in Debian break our stuff. This tests against the latest # dependencies as they are included in Debian. debian_testing: image: debian:testing <<: *apt-template only: - master@fdroid/fdroidserver script: - apt-get install aapt androguard apksigner dexdump fdroidserver git gnupg ipfs-cid python3-biplist python3-defusedxml python3-libcloud python3-pycountry python3-setuptools sdkmanager - python3 -c 'import fdroidserver' - python3 -c 'import androguard' - python3 -c 'import sdkmanager' - cd tests - ./run-tests # Test using latest LTS set up with the PPA, including Recommends. ubuntu_lts_ppa: image: ubuntu:latest <<: *apt-template only: - master@fdroid/fdroidserver script: - export ANDROID_HOME=/usr/lib/android-sdk - apt-get install gnupg - while ! apt-key adv --keyserver keyserver.ubuntu.com --recv-key 9AAC253193B65D4DF1D0A13EEC4632C79C5E0151; do sleep 15; done - export RELEASE=$(sed -n 's,^Suites\x3a \([a-z]*\).*,\1,p' /etc/apt/sources.list.d/*.sources | head -1) - echo "deb http://ppa.launchpad.net/fdroid/fdroidserver/ubuntu $RELEASE main" >> /etc/apt/sources.list - apt-get update - apt-get dist-upgrade - apt-get install --install-recommends dexdump fdroidserver git python3-biplist python3-pycountry python3-setuptools sdkmanager # Test things work with a default branch other than 'master' - git config --global init.defaultBranch thisisnotmasterormain - cd tests - ./run-tests # Test using Ubuntu/jammy LTS (supported til April, 2027) with depends # from pypi and sdkmanager. The venv is used to isolate the dist # tarball generation environment from the clean install environment. ubuntu_jammy_pip: image: ubuntu:jammy <<: *apt-template script: - apt-get install git default-jdk-headless python3-pip python3-venv rsync # setup venv to act as release build machine - python3 -m venv sdist-env - . sdist-env/bin/activate - ./setup.py sdist - deactivate - tar tzf dist/fdroidserver-*.tar.gz # back to bare machine to act as user's install machine - export ANDROID_HOME=/opt/android-sdk - $pip install sdkmanager - sdkmanager 'build-tools;35.0.0' # Install extras_require.optional from setup.py - $pip install biplist pycountry - $pip install dist/fdroidserver-*.tar.gz - tar xzf dist/fdroidserver-*.tar.gz - cd fdroidserver-* - export PATH=$PATH:$ANDROID_HOME/build-tools/35.0.0 - fdroid=`which fdroid` ./tests/run-tests # check localization was properly installed - LANGUAGE='de' fdroid --help | grep 'Gültige Befehle sind' # The gradlew-fdroid tests are isolated from the rest of the test # suite, so they run as their own job. gradlew-fdroid: image: debian:bookworm-slim <<: *apt-template only: changes: - .gitlab-ci.yml - gradlew-fdroid - tests/test_gradlew-fdroid script: - apt-get install ca-certificates curl default-jdk-headless shellcheck unzip - shellcheck --severity=error --color gradlew-fdroid tests/test_gradlew-fdroid - ./tests/test_gradlew-fdroid # Run all the various linters and static analysis tools. lint_format_bandit_checks: image: debian:bookworm-slim variables: LANG: C.UTF-8 script: - apt-get update - apt-get -y install --no-install-recommends bash ca-certificates dash gcc git make pycodestyle pyflakes3 pylint python3-dev python3-git python3-nose python3-pip python3-yaml shellcheck - $pip install --break-system-packages bandit - export EXITVALUE=0 - function set_error() { export EXITVALUE=1; printf "\x1b[31mERROR `history|tail -2|head -1|cut -b 6-500`\x1b[0m\n"; } - ./hooks/pre-commit || set_error - bandit -r -ii --ini .bandit || set_error - pylint --output-format=colorized --reports=n fdroid makebuildserver setup.py fdroidserver/*.py tests/*.py || set_error - shellcheck --exclude SC2046,SC2090 --severity=warning --color tests/run-tests || set_error - exit $EXITVALUE # Check all the dependencies in Debian to mirror production. CVEs are # generally fixed in the latest versions in pip/pypi.org, so it isn't # so important to scan that kind of install in CI. # https://docs.safetycli.com/safety-docs/installation/gitlab safety: image: debian:bookworm-slim rules: # once only:/changes: are ported to rules:, this could be removed: - if: $CI_PIPELINE_SOURCE == "merge_request_event" when: never - if: $CI_PIPELINE_SOURCE == "push" && $SAFETY_API_KEY changes: - .gitlab-ci.yml - .safety-policy.yml - pyproject.toml - setup.py <<: *apt-template variables: LANG: C.UTF-8 script: - apt-get install fdroidserver python3-biplist python3-pip python3-pycountry - $pip install --break-system-packages . - $pip install --break-system-packages safety - python3 -m safety --key "$SAFETY_API_KEY" --stage cicd scan # TODO tests/*/*/*.yaml are not covered yamllint: image: debian:bookworm-slim rules: # once only:/changes: are ported to rules:, this could be removed: - if: $CI_PIPELINE_SOURCE == "merge_request_event" when: never - if: $CI_PIPELINE_SOURCE == "push" changes: - .gitlab-ci.yml - .safety-policy.yml - .yamllint - tests/*.yml - tests/*/*.yml - tests/*/*/.*.yml <<: *apt-template variables: LANG: C.UTF-8 script: - apt-get install yamllint - yamllint .gitlab-ci.yml .safety-policy.yml .yamllint tests/*.yml tests/*/*.yml tests/*/*/.*.yml # Run all the various linters and static analysis tools. locales: image: debian:bookworm-slim variables: LANG: C.UTF-8 script: - apt-get update - apt-get -y install --no-install-recommends gettext make python3-babel - export EXITVALUE=0 - function set_error() { export EXITVALUE=1; printf "\x1b[31mERROR `history|tail -2|head -1|cut -b 6-500`\x1b[0m\n"; } - make -C locale compile || set_error - rm -f locale/*/*/*.mo - pybabel compile --domain=fdroidserver --directory locale 2>&1 | { grep -F "error:" && exit 1; } || true - exit $EXITVALUE black: image: debian:bookworm-slim <<: *apt-template script: - apt-get install black - black --check --diff --color $CI_PROJECT_DIR fedora_latest: image: fedora:39 # support ends on 2024-11-12 script: # tricks to hopefully make runs more reliable - echo "timeout=600" >> /etc/dnf/dnf.conf - echo "retries=50" >> /etc/dnf/dnf.conf - echo "keepcache=True" >> /etc/dnf/dnf.conf - dnf -y update || dnf -y update - dnf -y install @development-tools diffutils findutils git gnupg java-17-openjdk-devel openssl python3 python3-babel python3-matplotlib python3-pip python3-pycountry rsync which - $pip install sdkmanager - ./setup.py sdist - useradd -m -c "test account" --password "fakepassword" testuser - su testuser --login --command "cd `pwd`; $pip install --user dist/fdroidserver-*.tar.gz" - test -e ~testuser/.local/share/locale/de/LC_MESSAGES/fdroidserver.mo - export BUILD_TOOLS_VERSION=`sed -n "s,^MINIMUM_APKSIGNER_BUILD_TOOLS_VERSION\s*=\s*['\"]\(.*\)[['\"],\1,p" fdroidserver/common.py` - export ANDROID_HOME=`pwd`/android-sdk - mkdir -p $ANDROID_HOME/licenses/ - printf "\n8933bad161af4178b1185d1a37fbf41ea5269c55\nd56f5187479451eabf01fb78af6dfcb131a6481e\n24333f8a63b6825ea9c5514f83c2829b004d1fee" > $ANDROID_HOME/licenses/android-sdk-license - printf "\n84831b9409646a918e30573bab4c9c91346d8abd" > $ANDROID_HOME/licenses/android-sdk-preview-license - printf "\n79120722343a6f314e0719f863036c702b0e6b2a\n84831b9409646a918e30573bab4c9c91346d8abd" > $ANDROID_HOME/licenses/android-sdk-preview-license-old - mkdir ~/.android - touch ~/.android/repositories.cfg - sdkmanager "platform-tools" "build-tools;$BUILD_TOOLS_VERSION" - chown -R testuser . - cd tests - su testuser --login --command "cd `pwd`; export CI=$CI ANDROID_HOME=$ANDROID_HOME; fdroid=~testuser/.local/bin/fdroid ./run-tests" macOS: tags: - saas-macos-medium-m1 only: - master@fdroid/fdroidserver script: - export HOMEBREW_CURL_RETRIES=10 - brew update > /dev/null - brew upgrade - brew install fdroidserver # Android SDK and Java JDK - brew install --cask android-commandlinetools temurin # temurin is a JDK # test suite dependencies - brew install dash bash coreutils gnu-sed # TODO port tests/run-tests to POSIX and gsed, it has a couple GNU-isms like du --bytes - export PATH="$(brew --prefix fdroidserver)/libexec/bin:$(brew --prefix coreutils)/libexec/gnubin:$PATH" - brew autoremove - brew info fdroidserver - export BUILD_TOOLS_VERSION=`gsed -n "s,^MINIMUM_APKSIGNER_BUILD_TOOLS_VERSION\s*=\s*['\"]\(.*\)[['\"],\1,p" fdroidserver/common.py` - export ANDROID_HOME="$(brew --prefix)/share/android-commandlinetools" - mkdir -p "$ANDROID_HOME/licenses" - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license" - echo -e "\nd56f5187479451eabf01fb78af6dfcb131a6481e" >> "$ANDROID_HOME/licenses/android-sdk-license" - echo -e "\n24333f8a63b6825ea9c5514f83c2829b004d1fee" >> "$ANDROID_HOME/licenses/android-sdk-license" - $(brew --prefix)/bin/sdkmanager "build-tools;$BUILD_TOOLS_VERSION" - echo "macOS sticks with bash 3.x because of licenses, so avoid new bash syntax" - /bin/bash --version - /bin/bash -n gradlew-fdroid tests/run-tests # test fdroidserver from git with current package's dependencies - fdroid="$(brew --prefix fdroidserver)/libexec/bin/python3 $PWD/fdroid" ./tests/run-tests gradle: image: debian:bookworm-slim <<: *apt-template variables: GIT_DEPTH: 1000 script: - apt-get install ca-certificates git openssh-client python3-bs4 python3-colorama python3-git python3-gitlab python3-packaging python3-requests # if this is a merge request fork, then only check if relevant files changed - if [ "$CI_PROJECT_NAMESPACE" != "fdroid" ]; then git fetch https://gitlab.com/fdroid/fdroidserver.git; for f in `git diff --name-only --diff-filter=d FETCH_HEAD...HEAD`; do test "$f" == "makebuildserver" && export CHANGED="yes"; test "$f" == "gradlew-fdroid" && export CHANGED="yes"; done; test -z "$CHANGED" && exit; fi - ./tests/gradle-release-checksums.py # Run an actual build in a simple, faked version of the buildserver guest VM. fdroid build: image: registry.gitlab.com/fdroid/fdroidserver:buildserver only: changes: - .gitlab-ci.yml - fdroidserver/build.py - fdroidserver/common.py - fdroidserver/exception.py - fdroidserver/metadata.py - fdroidserver/net.py - fdroidserver/scanner.py - fdroidserver/vmtools.py cache: key: "$CI_JOB_NAME" paths: - .gradle script: - apt-get update - apt-get dist-upgrade - apt-get clean - test -n "$fdroidserver" || source /etc/profile.d/bsenv.sh - ln -fsv "$CI_PROJECT_DIR" "$fdroidserver" # TODO remove sdkmanager install once it is included in the buildserver image - apt-get install sdkmanager - rm -rf "$ANDROID_HOME/tools" # TODO remove once sdkmanager can upgrade installed packages - sdkmanager "tools" "platform-tools" "build-tools;31.0.0" - git ls-remote https://gitlab.com/fdroid/fdroiddata.git master - git clone --depth 1 https://gitlab.com/fdroid/fdroiddata.git - cd fdroiddata - for d in build logs repo tmp unsigned $home_vagrant/.android; do test -d $d || mkdir $d; chown -R vagrant $d; done - export GRADLE_USER_HOME=$home_vagrant/.gradle - export fdroid="sudo --preserve-env --user vagrant env PATH=$fdroidserver:$PATH env PYTHONPATH=$fdroidserver:$fdroidserver/examples env PYTHONUNBUFFERED=true env TERM=$TERM env HOME=$home_vagrant fdroid" - chown -R vagrant $home_vagrant - chown -R vagrant $fdroidserver/.git - chown vagrant $fdroidserver/ - chown -R vagrant .git - chown vagrant . # try user build - $fdroid build --verbose --latest org.fdroid.fdroid.privileged # try on-server build - $fdroid build --verbose --on-server --no-tarball --latest org.fdroid.fdroid # each `fdroid build --on-server` run expects sudo, then uninstalls it - if dpkg --list sudo; then echo "sudo should not be still there"; exit 1; fi - 'if [ ! -f repo/status/running.json ]; then echo "ERROR: running.json does not exist!"; exit 1; fi' - 'if [ ! -f repo/status/build.json ]; then echo "ERROR: build.json does not exist!"; exit 1; fi' # test the plugin API and specifically the fetchsrclibs plugin, which # is used by the `fdroid build` job. This uses a fixed commit from # fdroiddata because that one is known to work, and this is a CI job, # so it should be isolated from the normal churn of fdroiddata. plugin_fetchsrclibs: image: debian:bookworm-slim <<: *apt-template only: changes: - .gitlab-ci.yml - examples/fdroid_fetchsrclibs.py - fdroidserver/__main__.py script: - apt-get install curl git python3-cffi python3-matplotlib python3-nacl python3-paramiko python3-pil python3-pip python3-pycparser python3-venv - python3 -m venv --system-site-packages env - . env/bin/activate - export PATH="$CI_PROJECT_DIR:$PATH" - export PYTHONPATH="$CI_PROJECT_DIR/examples" # workaround https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1003252 - export SETUPTOOLS_USE_DISTUTILS=stdlib - $pip install -e . - fdroid | grep fetchsrclibs - mkdir fdroiddata - commitid=b9e9a077d720c86ff6fff4dbb341254cc4370b1a - curl https://gitlab.com/fdroid/fdroiddata/-/archive/${commitid}/fdroiddata-${commitid}.tar.gz | tar -xz --directory=fdroiddata --strip-components=1 - cd fdroiddata - fdroid fetchsrclibs freemap.opentrail:4 --verbose - test -d build/freemap.opentrail/.git - test -d build/srclib/andromaps/.git - test -d build/srclib/freemaplib/.git - test -d build/srclib/freemaplibProj/.git - test -d build/srclib/JCoord/.git - test -d build/srclib/javaproj/.git # test a full update and deploy cycle to gitlab.com servergitmirrors: image: debian:bookworm-slim <<: *apt-template only: - master@fdroid/fdroidserver script: - apt-get install default-jdk-headless git openssh-client openssl python3-cffi python3-cryptography python3-matplotlib python3-nacl python3-pil python3-pip python3-pycparser python3-setuptools python3-venv rsync wget - apt-get install apksigner - python3 -m venv --system-site-packages env - . env/bin/activate - export PYTHONPATH=`pwd` - export SETUPTOOLS_USE_DISTUTILS=stdlib # https://github.com/pypa/setuptools/issues/2956 - $pip install -e . - mkdir /root/.ssh/ - ./tests/key-tricks.py - ssh-keyscan gitlab.com >> /root/.ssh/known_hosts - test -d /tmp/fdroid/repo || mkdir -p /tmp/fdroid/repo - cp tests/config.yml tests/keystore.jks /tmp/fdroid/ - cp tests/repo/com.politedroid_6.apk /tmp/fdroid/repo/ - cd /tmp/fdroid - touch fdroid-icon.png - printf "\nservergitmirrors\x3a 'git@gitlab.com:fdroid/ci-test-servergitmirrors-repo.git'\n" >> config.yml - $PYTHONPATH/fdroid update --verbose --create-metadata - $PYTHONPATH/fdroid deploy --verbose - export DLURL=`grep -Eo 'https://gitlab.com/fdroid/ci-test-servergitmirrors-repo[^"]+' repo/index-v1.json` - echo $DLURL - wget $DLURL/index-v1.jar - diff repo/index-v1.jar index-v1.jar Build documentation: image: debian:bookworm-slim <<: *apt-template script: - apt-get install make python3-sphinx python3-numpydoc python3-pydata-sphinx-theme pydocstyle fdroidserver - apt purge fdroidserver # ignore vendored files - pydocstyle --verbose --match='(?!apksigcopier|looseversion|setup|test_).*\.py' fdroidserver - cd docs - sphinx-apidoc -o ./source ../fdroidserver -M -e - PYTHONPATH=.. sphinx-autogen -o generated source/*.rst - PYTHONPATH=.. make html artifacts: paths: - docs/build/html/ # this job will only run in branches called "windows" until the Windows port is complete Windows: tags: - windows only: - windows script: - Import-Module "$env:ChocolateyInstall\helpers\chocolateyProfile.psm1" - choco install --no-progress -y git --force --params "/GitAndUnixToolsOnPath" - choco install --no-progress -y python3 --version=3.10 - choco install --no-progress -y jdk8 - choco install --no-progress -y rsync - refreshenv - python -m pip install --upgrade babel pip setuptools - python -m pip install -e . - $files = @(Get-ChildItem tests\test_*.py) - foreach ($f in $files) { write-output $f; python -m unittest $f; if( $LASTEXITCODE -eq 0 ) { write-output "SUCCESS $f"; } else { write-output "ERROR $f failed"; } } # these are the tests that must pass - python -m unittest -k checkupdates exception import_subcommand test_lint test_metadata test_rewritemeta test_vcs tests.test_init tests.test_main after_script: - Copy-Item C:\ProgramData\chocolatey\logs\chocolatey.log artifacts: when: always paths: - "*.log" allow_failure: exit_codes: 1 pages: image: alpine:latest stage: deploy script: - cp docs/build/html public -r # GL Pages needs the files in a directory named "public" artifacts: paths: - public needs: ["Build documentation"] rules: - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' # only publish pages on default (master) branch # This job pushes the official CI docker image based on the master # branch, so in fdroid/fdroidserver, it should only run on the master # branch. Otherwise, tags or other branches will overwrite the docker # image which is supposed to be what is in master. docker: dependencies: - fdroid build only: changes: - .gitlab-ci.yml - makebuildserver - buildserver/* variables: - $CI_COMMIT_BRANCH == "master" || $CI_PROJECT_NAMESPACE != "fdroid" image: docker:dind services: - docker:dind variables: RELEASE_IMAGE: $CI_REGISTRY_IMAGE:buildserver script: # git ref names can contain many chars that are not allowed in docker tags - export TEST_IMAGE=$CI_REGISTRY_IMAGE:$(printf $CI_COMMIT_REF_NAME | sed 's,[^a-zA-Z0-9_.-],_,g') - cd buildserver - docker build -t $TEST_IMAGE --build-arg GIT_REV_PARSE_HEAD=$(git rev-parse HEAD) . - docker tag $TEST_IMAGE $RELEASE_IMAGE - docker tag $TEST_IMAGE ${RELEASE_IMAGE}-bookworm - echo $CI_JOB_TOKEN | docker login -u gitlab-ci-token --password-stdin registry.gitlab.com # This avoids filling up gitlab.com free tier accounts with unused docker images. - if test -z "$FDROID_PUSH_DOCKER_IMAGE"; then echo "Skipping docker push to save quota on your gitlab namespace."; echo "If you want to enable the push, set FDROID_PUSH_DOCKER_IMAGE in"; echo "https://gitlab.com/$CI_PROJECT_NAMESPACE/fdroidserver/-/settings/ci_cd#js-cicd-variables-settings"; exit 0; fi - docker push $RELEASE_IMAGE - docker push $RELEASE_IMAGE-bookworm # PUBLISH is the signing server. It has a very minimal manual setup. PUBLISH: image: debian:bullseye-backports script: - apt-get update - apt-get -qy upgrade - apt-get -qy install --no-install-recommends -t bullseye-backports androguard apksigner curl default-jdk-headless git gpg gpg-agent python3-asn1crypto python3-defusedxml python3-git python3-ruamel.yaml python3-yaml rsync # Run only relevant parts of the test suite, other parts will fail # because of this minimal base setup. - python3 -m unittest tests/test_gpgsign.py tests/test_metadata.py tests/test_publish.py tests/test_signatures.py tests/test_signindex.py - cd tests - mkdir archive - mkdir unsigned - cp urzip-release-unsigned.apk unsigned/info.guardianproject.urzip_100.apk - grep '^key.*pass' config.yml | sed 's,\x3a ,=,' > $CI_PROJECT_DIR/variables - sed -Ei 's,^(key.*pass|keystore)\x3a.*,\1\x3a {env\x3a \1},' config.yml - printf '\ngpghome\x3a {env\x3a gpghome}\n' >> config.yml - | tee --append $CI_PROJECT_DIR/variables < FestplattenSchnitzel Hans-Christoph Steiner ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/.safety-policy.yml0000644000175000017500000000355414766514130016326 0ustar00hanshans--- version: '3.0' scanning-settings: max-depth: 6 exclude: report: dependency-vulnerabilities: enabled: true auto-ignore-in-report: vulnerabilities: 52495: reason: setuptools comes from Debian expires: '2025-01-31' 60350: reason: GitPython comes from Debian https://security-tracker.debian.org/tracker/CVE-2023-40267 expires: '2025-01-31' 60789: reason: GitPython comes from Debian https://security-tracker.debian.org/tracker/CVE-2023-40590 expires: '2025-01-31' 60841: reason: GitPython comes from Debian https://security-tracker.debian.org/tracker/CVE-2023-41040 expires: '2025-01-31' 62044: reason: "F-Droid doesn't fetch pip dependencies directly from hg/mercurial repositories: https://data.safetycli.com/v/62044/f17/" expires: '2025-01-31' 63687: reason: Only affects Windows https://security-tracker.debian.org/tracker/CVE-2024-22190 expires: '2026-01-31' 67599: reason: Only affects pip when using --extra-index-url, which is never the case in fdroidserver CI. expires: '2026-05-31' 70612: reason: jinja2 is not used by fdroidserver, nor any dependencies I could find via debtree and pipdeptree. expires: '2026-05-31' 72132: reason: We get these packages from Debian, zipp is not used in production, and its only a DoS. expires: '2026-08-31' 72236: reason: setuptools is not used in production to download or install packages, they come from Debian. expires: '2026-08-31' fail-scan-with-exit-code: dependency-vulnerabilities: enabled: true fail-on-any-of: cvss-severity: - critical - high - medium security-updates: dependency-vulnerabilities: ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2241864 fdroidserver-2.4.0/.vscode/0000755000175000017500000000000014770510164014265 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368093.0 fdroidserver-2.4.0/.vscode/extensions.json0000644000175000017500000000007714743421035017361 0ustar00hanshans{ "recommendations": [ "ms-python.python", ] } ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368093.0 fdroidserver-2.4.0/.vscode/settings.json0000644000175000017500000000105614743421035017020 0ustar00hanshans{ "python.formatting.blackArgs": [ "--config=pyproject.toml" ], "python.formatting.provider": "black", "python.linting.banditEnabled": true, "python.linting.banditArgs": [ "-ii", "--ini=.bandit", ], "python.linting.enabled": true, "python.linting.mypyArgs": [ "--config-file=mypy.ini" ], "python.linting.mypyEnabled": true, "python.linting.flake8Enabled": true, "python.linting.pylintArgs": [ "--rcfile=.pylint-rcfile" ], "python.linting.pylintEnabled": true, } ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1726932086.0 fdroidserver-2.4.0/.weblate0000644000175000017500000000012314673562166014357 0ustar00hanshans[weblate] url = https://hosted.weblate.org/api/ translation = f-droid/fdroidserver ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/.yamllint0000644000175000017500000000014014766514130014553 0ustar00hanshans--- extends: default rules: document-start: disable line-length: disable truthy: disable ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901234.0 fdroidserver-2.4.0/CHANGELOG.md0000644000175000017500000004135314770507762014555 0ustar00hanshans# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) ## [2.4.0] - 2025-03-25 ### Added * lint: support the base _config.yml_. https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1606 ### Fixed * Expand {env: foo} config syntax to be allowed any place a string is. https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1610 * Only show "unsafe permissions on config.yml" when secrets are present. * Standardized config files on ruamel.yaml with a YAML 1.2 data format. https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1611 * Brought back error when a package has multiple package types (e.g. xapk and apk). https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1602 * Reworked test suite to be entirely based on Python unittest (thanks @mindston). https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1587 * publish/signindex/gpgsign no longer load the _qrcode_ and _requests_ modules, and can operate without them installed. * scanner: add bun.lock as lock file of package.json https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1615 * index: fail if user sets mirrors:isPrimary wrong https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1617 https://gitlab.com/fdroid/fdroidserver/-/issues/1125 * Sync translations for all supported languages: bo ca cs de es fr ga hu it ja ko nb_NO pl pt pt_BR pt_PT ro ru sq sr sw tr uk zh_Hans zh_Hant ### Removed * checkupdates: remove auto_author: config, it is no longer used. * Purge support for the long-deprecated _config.py_ config file. https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1607 ## [2.3.5] - 2025-01-20 ### Fixed * Fix issue where APKs with v1-only signatures and targetSdkVersion < 30 could be maliciously crafted to bypass AllowedAPKSigningKeys https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1588 * Ignore apksigner v33.x, it has bugs verifying APKs with v3/v3.1 sigs. https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1593 * Sync translations for: ca cs de es fr ga ja pt_BR pt_PT ru sq sr uk zh_Hans ## [2.3.4] - 2024-12-12 ### Fixed * Fix localhost network tests on systems with IPv6. * lint: only error out on missing extlib on versions not archived. ## [2.3.3] - 2024-12-11 ### Added * verify: `--clean-up-verified` to delete files used when verifying an APK if the verification was successful. ### Fixed * Support Python 3.13 in the full test suite. * Sync translations for: ca de fr ja pl ro ru sr ta * update: only generate _index.png_ when making _index.html_, allowing the repo operator to set a different repo icon, e.g. not the QR Code. ## [2.3.2] - 2024-11-26 ### Fixed * install: fix downloading from GitHub Releases and Maven Central. * Sync translations for: ca fa fr pt ru sr ta zh_Hant ## [2.3.1] - 2024-11-25 ### Fixed * Sync all translations for: cs de es fr ga pt_BR ru sq zh_Hans. * Drop use of deprecated imghdr library to support Python 3.13. * Install biplist and pycountry by default on macOS. * Fixed running test suite out of dist tarball. ## [2.3.0] - 2024-11-21 ### Added * YAML 1.2 as native format for all _.yml_ files, including metadata and config. * install: will now fetch _F-Droid.apk_ and install it via `adb`. https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1546 * scanner: scan APK Signing Block for known block types like Google Play Signature aka "Frosting". https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1555 * Support Rclone for deploying to many different cloud services. * deploy: support deploying to GitHub Releases. https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1471 * scanner: support libs.versions.toml https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1526 * Consider subdir for triple-t metadata discovery in Flutter apps. https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1541 * deploy: added `index_only:` mode for mirroring the index to small hosting locations. https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1420 * Support publishing repos in AltStore format. https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1465 * Support indexing iOS IPA app files. https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1413 * deploy: _config/mirrors.yml_ file with support for adding per-mirror metadata, like `countryCode:`. * Repo's categories are now set in the config files. * lint: check syntax of config files. * publish: `--error-on-failed` to exit when signing/verifying fails. * scanner: `--refresh` and `refresh_config:` to control triggering a refresh of the rule sets. * Terminal output colorization and `--color` argument to control it. * New languages: Catalan (ca), Irish (ga), Japanese (ja), Serbian (sr), and Swahili (sw). * Support donation links from `community_bridge`, `buy_me_a_coffee`. ### Fixed * Use last modified time and file size for caching data about scanned APKs instead of SHA-256 checksum. https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1542 * `repo_web_base_url:` config for generating per-app URLs for viewing in browsers. https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1178 * `fdroid scanner` flags WebAssembly binary _.wasm_ files. https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1562 * Test suite as standard Python `unittest` setup (thanks @ghost.adh). * scanner: error on dependency files without lock file. https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1504 * nightly: finding APKs in the wrong directory. (thanks @WrenIX) https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1512 * `AllowedAPKSigningKeys` works with all single-signer APK signatures. https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1466 * Sync all translations for: cs de it ko pl pt pt_BR pt_PT ro ru sq tr uk zh_Hans zh_Hant. * Support Androguard 4.x. * Support Python 3.12. ### Removed * Drop all uses of _stats/known_apks.txt_ and the `update_stats:` config key. https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1547 * The `maven:` field is now always a string, with `yes` as a legacy special value. It is no longer treated like a boolean in any case. * scanner: jcenter is no longer an allowed Maven repo. * build: `--reset-server` removed (thanks @gotmi1k). ## [2.2.2] - 2024-04-24 ### Added * Include sdkmanager as dep in setup.py for Homebrew package. https://github.com/Homebrew/homebrew-core/pull/164510 ## [2.2.1] - 2023-03-09 ### Added * `download_repo_index_v2()` and `download_repo_index_v2()` API functions https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1323 ### Fixed * Fix OpenJDK detection on different CPU architectures https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1315 ### Removed * Purge all references to `zipalign`, that is delegated to other things https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1316 * Remove obsolete, unused `buildozer` build type https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1322 ## [2.2.0] - 2023-02-20 ### Added * Support index-v2 format, localizable Anti-Features, Categories * New entry point for repos, entry.jar, signed with modern algorithms * New config/ subdirectory for localizable configuration * Script entries in metadata files (init, prebuild, build, etc) now handled as lists so they now support using && or ; in the script, and behave like .gitlab-ci.yml and other CI YAML. * GPG signatures for index-v1.json and index-v2.json * Use default.txt as fallback changelog when inserting fastlane metadata * scanner: F-Droid signatures now maintained in fdroid/suss * scanner: maintain signature sources in config.yml, including Exodus Privacy * scanner: use dexdump for class names * scanner: directly scan APK files when given a path * scanner: recursively scan APKs for DEX and ZIP using file magic * signindex: validate index files before signing * update: set ArchivePolicy based on VercodeOperation/signature * Include IPFS CIDv1 in index-v2.json for hosting repos on IPFS * Per-repo beta channel configuration * Add Czech translation ### Fixed * apksigner v30 or higher now required for verifying and signing APKs * 3.9 as minimum supported Python version * Lots of translation updates * Better pip packaging * nightly: big overhaul for reliable operation on all Debian/Ubuntu versions * Improved logging, fewer confusing verbose messages * scanner: fix detection of binary files without extension * import: more reliable operation, including Flutter apps * Support Java 20 and up ### Removed * Remove obsolete `fdroid stats` command ## [2.1.1] - 2022-09-06 * gradlew-fdroid: Include latest versions and checksums * nightly: update Raw URLs to fix breakage and avoid redirects * signindex: gpg-sign index-v1.json and deploy it * update: fix --use-date-from-apk when used with files (#1012) ## [2.1] - 2022-02-22 For a more complete overview, see the [2.1 milestone](https://gitlab.com/fdroid/fdroidserver/-/milestones/11) ## [2.0.5] - 2022-09-06 ### Fixed * gradlew-fdroid: Include latest versions and checksums * nightly: add support for GitHub Actions * nightly: update Raw URLs to fix breakage and avoid redirects * update: fix --use-date-from-apk when used with files (#1012) * Fix GitLab CI ## [2.0.4] - 2022-06-29 ### Fixed * deploy: ensure progress is instantiated before trying to use it * signindex: gpg-sign index-v1.json and deploy it [1080](https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1080) [1124](https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1124) ## [2.0.3] - 2021-07-01 ### Fixed * Support AutoUpdateMode: Version without pattern [931](https://gitlab.com/fdroid/fdroidserver/-/merge_requests/931) ## [2.0.2] - 2021-06-01 ### Fixed * fix "ruamel round_trip_dump will be removed" [932](https://gitlab.com/fdroid/fdroidserver/-/merge_requests/932) ## [2.0.1] - 2021-03-09 ### Fixed * metadata: stop setting up source repo when running lint/rewritemeta * scanner: show error if scan_binary fails to run apkanalyzer * common: properly parse version from NDK's source.properties * update: stop extracting and storing XML icons, they're useless * index: raise error rather than crash on bad repo file * update: handle large, corrupt, or inaccessible fastlane/triple-t files * Update SPDX License List * checkupdates: set User-Agent to make gitlab.com happy * Run push_binary_transparency only once ## [2.0] - 2021-01-31 For a more complete overview, see the [2.0 milestone](https://gitlab.com/fdroid/fdroidserver/-/milestones/10) ### Added * `fdroid update` inserts donation links based on upstream's _FUNDING.yml_ ([!754](https://gitlab.com/fdroid/fdroidserver/merge_requests/754)) * Stable, public API for most useful functions ([!798](https://gitlab.com/fdroid/fdroidserver/merge_requests/798)) * Load with any YAML lib and use with the API, no more custom parser needed ([!826](https://gitlab.com/fdroid/fdroidserver/merge_requests/826)) ([!838](https://gitlab.com/fdroid/fdroidserver/merge_requests/838)) * _config.yml_ for a safe, easy, standard configuration format ([!663](https://gitlab.com/fdroid/fdroidserver/merge_requests/663)) * Config options can be set from environment variables using this syntax: `keystorepass: {env: keystorepass}` ([!669](https://gitlab.com/fdroid/fdroidserver/merge_requests/669)) * Add SHA256 to filename of repo graphics ([!669](https://gitlab.com/fdroid/fdroidserver/merge_requests/669)) * Support for srclibs metadata in YAML format ([!700](https://gitlab.com/fdroid/fdroidserver/merge_requests/700)) * Check srclibs and app-metadata files with yamllint ([!721](https://gitlab.com/fdroid/fdroidserver/merge_requests/721)) * Added plugin system for adding subcommands to `fdroid` ([!709](https://gitlab.com/fdroid/fdroidserver/merge_requests/709)) * `fdroid update`, `fdroid publish`, and `fdroid signindex` now work with SmartCard HSMs, specifically the NitroKey HSM ([!779](https://gitlab.com/fdroid/fdroidserver/merge_requests/779)) ([!782](https://gitlab.com/fdroid/fdroidserver/merge_requests/782)) * `fdroid update` support for Triple-T Gradle Play Publisher v2.x ([!683](https://gitlab.com/fdroid/fdroidserver/merge_requests/683)) * Translated into: bo de es fr hu it ko nb_NO pl pt pt_BR pt_PT ru sq tr uk zh_Hans zh_Hant ### Fixed * Smoother process for signing APKs with `apksigner` ([!736](https://gitlab.com/fdroid/fdroidserver/merge_requests/736)) ([!821](https://gitlab.com/fdroid/fdroidserver/merge_requests/821)) * `apksigner` is used by default on new repos * All parts except _build_ and _publish_ work without the Android SDK ([!821](https://gitlab.com/fdroid/fdroidserver/merge_requests/821)) * Description: is now passed to clients unchanged, no HTML conversion ([!828](https://gitlab.com/fdroid/fdroidserver/merge_requests/828)) * Lots of improvements for scanning for proprietary code and trackers ([!748](https://gitlab.com/fdroid/fdroidserver/merge_requests/748)) ([!REPLACE](https://gitlab.com/fdroid/fdroidserver/merge_requests/REPLACE)) ([!844](https://gitlab.com/fdroid/fdroidserver/merge_requests/844)) * `fdroid mirror` now generates complete, working local mirror repos * fix build-logs dissapearing when deploying ([!685](https://gitlab.com/fdroid/fdroidserver/merge_requests/685)) * do not crash when system encoding can not be retrieved ([!671](https://gitlab.com/fdroid/fdroidserver/merge_requests/671)) * checkupdates: UpdateCheckIngore gets properly observed now ([!659](https://gitlab.com/fdroid/fdroidserver/merge_requests/659), [!660](https://gitlab.com/fdroid/fdroidserver/merge_requests/660)) * keep yaml metadata when rewrite failed ([!658](https://gitlab.com/fdroid/fdroidserver/merge_requests/658)) * import: `template.yml` now supports omitting values ([!657](https://gitlab.com/fdroid/fdroidserver/merge_requests/657)) * build: deploying buildlogs with rsync ([!651](https://gitlab.com/fdroid/fdroidserver/merge_requests/651)) * `fdroid init` generates PKCS12 keystores, drop Java < 8 support ([!801](https://gitlab.com/fdroid/fdroidserver/-/merge_requests/801)) * Parse Version Codes specified in hex ([!692](https://gitlab.com/fdroid/fdroidserver/-/merge_requests/692)) * Major refactoring on core parts of code to be more Pythonic ([!756](https://gitlab.com/fdroid/fdroidserver/-/merge_requests/756)) * `fdroid init` now works when installed with pip ### Removed * Removed all support for _.txt_ and _.json_ metadata ([!772](https://gitlab.com/fdroid/fdroidserver/-/merge_requests/772)) * dropped support for Debian 8 _jessie_ and 9 _stretch_ * dropped support for Ubuntu releases older than bionic 18.04 * dropped `fdroid server update` and `fdroid server init`, use `fdroid deploy` * `fdroid dscanner` was removed. ([!711](https://gitlab.com/fdroid/fdroidserver/-/merge_requests/711)) * `make_current_version_link` is now off by default * Dropped `force_build_tools` config option ([!797](https://gitlab.com/fdroid/fdroidserver/-/merge_requests/797)) * Dropped `accepted_formats` config option, there is only _.yml_ now ([!818](https://gitlab.com/fdroid/fdroidserver/-/merge_requests/818)) * `Provides:` was removed as a metadata field ([!654](https://gitlab.com/fdroid/fdroidserver/-/merge_requests/654)) * Remove unused `latestapps.dat` ([!794](https://gitlab.com/fdroid/fdroidserver/-/merge_requests/794)) ## [1.1.4] - 2019-08-15 ### Fixed * include bitcoin validation regex required by fdroiddata * merged Debian patches to fix test suite there ## [1.1.3] - 2019-07-03 ### Fixed * fixed test suite when run from source tarball * fixed test runs in Debian ## [1.1.2] - 2019-03-29 ### Fixed * fix bug while downloading repo index ([!636](https://gitlab.com/fdroid/fdroidserver/merge_requests/636)) ## [1.1.1] - 2019-02-03 ### Fixed * support APK Signature v2 and v3 * all SDK Version values are output as integers in the index JSON * take graphics from Fastlane dirs using any valid RFC5646 locale * print warning if not running in UTF-8 encoding * fdroid build: hide --on-server cli flag ## [1.1] - 2019-01-28 ### Fixed * a huge update with many fixes and new features: https://gitlab.com/fdroid/fdroidserver/milestones/7 * can run without and Android SDK installed * much more reliable operation with large binary APK collections * sync all translations, including newly added languages: hu it ko pl pt_PT ru * many security fixes, based on the security audit * NoSourceSince automatically adds SourceGone Anti-Feature * aapt scraping works with all known aapt versions * smoother mirror setups * much faster `fdroid update` when using androguard [Unreleased]: https://gitlab.com/fdroid/fdroidserver/compare/1.1.4...master [1.1.4]: https://gitlab.com/fdroid/fdroidserver/compare/1.1.3...1.1.4 [1.1.3]: https://gitlab.com/fdroid/fdroidserver/compare/1.1.2...1.1.3 [1.1.2]: https://gitlab.com/fdroid/fdroidserver/compare/1.1.1...1.1.2 [1.1.1]: https://gitlab.com/fdroid/fdroidserver/compare/1.1...1.1.1 [1.1]: https://gitlab.com/fdroid/fdroidserver/tags/1.1 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/CONTRIBUTING.md0000644000175000017500000000703314766514130015162 0ustar00hanshansThere are many ways to contribute, you can find out all the ways on our [Contribute](https://f-droid.org/contribute/) page. Find out how to get involved, including as a translator, data analyst, tester, helping others, and much more! ## Contributing Code We want more contributors and want different points of view represented. Some parts of the code make contributing quick and easy. Other parts make it difficult and slow, so we ask that contributors have patience. To submit a patch, please open a merge request on GitLab. If you are thinking of making a large contribution, open an issue or merge request before starting work, to get comments from the community. Someone may be already working on the same thing, or there may be reasons why that feature isn't implemented. Once there is agreement, then the work might need to proceed asynchronously with the core team towards the solution. To make it easier to review and accept your merge request, please follow these guidelines: * When at all possible, include tests. These can either be added to an existing test, or completely new. Practicing test-driven development will make it easiest to get merged. That usually means starting your work by writing tests. * See [help-wanted](https://gitlab.com/fdroid/fdroidserver/-/issues/?sort=updated_desc&state=opened&label_name%5B%5D=help-wanted) tags for things that maintainers have marked as things they want to see merged. * The amount of technical debt varies widely in this code base. There are some parts where the code is nicely isolated with good test coverage. There are other parts that are tangled and complicated, full of technical debt, and difficult to test. * The general approach is to treat the tangled and complicated parts as an external API (albeit a bad one). That means it needs to stay unchanged as much as possible. Changes to those parts of the code will trigger a migration, which can require a lot of time and coordination. When there is time for large development efforts, we refactor the code to get rid of those areas of technical debt. * We use [_black_](https://black.readthedocs.io/) code format, run `black .` to format the code. Whenever editing code in any file, the new code should be formatted as _black_. Some files are not yet fully in _black_ format (see _pyproject.toml_), our goal is to opportunistically convert the code whenever possible. As of the time of this writing, forcing the code format on all files would be too disruptive. The officially supported _black_ version is the one in Debian/stable. * Many of the tests run very fast and can be run interactively in isolation. Some of the essential test cases run slowly because they do things like signing files and generating signing keys. * Some parts of the code are difficult to test, and currently require a relatively complete production setup in order to effectively test them. That is mostly the code around building packages, managing the disposable VM, and scheduling build jobs to run. * For user visible changes (API changes, behaviour changes, etc.), consider adding a note in _CHANGELOG.md_. This could be a summarizing description of the change, and could explain the grander details. Have a look through existing entries for inspiration. Please note that this is NOT simply a copy of git-log one-liners. Also note that security fixes get an entry in _CHANGELOG.md_. This file helps users get more in-depth information of what comes with a specific release without having to sift through the higher noise ratio in git-log. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/LICENSE0000644000175000017500000010333014717152067013736 0ustar00hanshans GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 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 Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are 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. 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. Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software. A secondary benefit of defending all users' freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public. The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version. An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license. 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 Affero 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. Remote Network Interaction; Use with the GNU General Public License. Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph. 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 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 work with which it is combined will remain governed by version 3 of the GNU General Public License. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU Affero 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 Affero 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 Affero 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 Affero 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 Affero 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 Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If your software can interact with users remotely through a computer network, you should also make sure that it provides a way for users to get its source. For example, if your program is a web application, its interface could display a "Source" link that leads users to an archive of the code. There are many ways you could offer source, and different solutions will be better for different programs; see section 13 for the specific requirements. 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 AGPL, see . ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742900599.0 fdroidserver-2.4.0/MANIFEST.in0000644000175000017500000017600214770506567014504 0ustar00hanshansinclude buildserver/config.buildserver.yml include buildserver/provision-android-ndk include buildserver/provision-android-sdk include buildserver/provision-apt-get-install include buildserver/provision-apt-proxy include buildserver/provision-gradle include buildserver/setup-env-vars include buildserver/Vagrantfile include CHANGELOG.md include completion/bash-completion include examples/config.yml include examples/fdroid_exportkeystore.py include examples/fdroid_export_keystore_to_nitrokey.py include examples/fdroid_extract_repo_pubkey.py include examples/fdroid_fetchsrclibs.py include examples/fdroid_nitrokeyimport.py include examples/opensc-fdroid.cfg include examples/public-read-only-s3-bucket-policy.json include examples/template.yml include examples/Vagrantfile.yaml include gradlew-fdroid include LICENSE include locale/bo/LC_MESSAGES/fdroidserver.po include locale/ca/LC_MESSAGES/fdroidserver.po include locale/cs/LC_MESSAGES/fdroidserver.po include locale/de/LC_MESSAGES/fdroidserver.po include locale/es/LC_MESSAGES/fdroidserver.po include locale/fr/LC_MESSAGES/fdroidserver.po include locale/ga/LC_MESSAGES/fdroidserver.po include locale/hu/LC_MESSAGES/fdroidserver.po include locale/it/LC_MESSAGES/fdroidserver.po include locale/ja/LC_MESSAGES/fdroidserver.po include locale/ko/LC_MESSAGES/fdroidserver.po include locale/nb_NO/LC_MESSAGES/fdroidserver.po include locale/pl/LC_MESSAGES/fdroidserver.po include locale/pt/LC_MESSAGES/fdroidserver.po include locale/pt_BR/LC_MESSAGES/fdroidserver.po include locale/pt_PT/LC_MESSAGES/fdroidserver.po include locale/ro/LC_MESSAGES/fdroidserver.po include locale/ru/LC_MESSAGES/fdroidserver.po include locale/sq/LC_MESSAGES/fdroidserver.po include locale/sr/LC_MESSAGES/fdroidserver.po include locale/sw/LC_MESSAGES/fdroidserver.po include locale/tr/LC_MESSAGES/fdroidserver.po include locale/uk/LC_MESSAGES/fdroidserver.po include locale/zh_Hans/LC_MESSAGES/fdroidserver.po include locale/zh_Hant/LC_MESSAGES/fdroidserver.po include makebuildserver include README.md include tests/aosp_testkey_debug.keystore include tests/apk.embedded_1.apk include tests/bad-unicode-*.apk include tests/build-tools/17.0.0/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/17.0.0/aapt-output-com.politedroid_3.txt include tests/build-tools/17.0.0/aapt-output-com.politedroid_4.txt include tests/build-tools/17.0.0/aapt-output-com.politedroid_5.txt include tests/build-tools/17.0.0/aapt-output-com.politedroid_6.txt include tests/build-tools/17.0.0/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/17.0.0/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/17.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/17.0.0/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/17.0.0/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/17.0.0/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/17.0.0/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/17.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/17.0.0/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/17.0.0/aapt-output-souch.smsbypass_9.txt include tests/build-tools/18.1.1/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/18.1.1/aapt-output-com.politedroid_3.txt include tests/build-tools/18.1.1/aapt-output-com.politedroid_4.txt include tests/build-tools/18.1.1/aapt-output-com.politedroid_5.txt include tests/build-tools/18.1.1/aapt-output-com.politedroid_6.txt include tests/build-tools/18.1.1/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/18.1.1/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/18.1.1/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/18.1.1/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/18.1.1/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/18.1.1/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/18.1.1/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/18.1.1/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/18.1.1/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/18.1.1/aapt-output-souch.smsbypass_9.txt include tests/build-tools/19.0.0/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/19.0.0/aapt-output-com.politedroid_3.txt include tests/build-tools/19.0.0/aapt-output-com.politedroid_4.txt include tests/build-tools/19.0.0/aapt-output-com.politedroid_5.txt include tests/build-tools/19.0.0/aapt-output-com.politedroid_6.txt include tests/build-tools/19.0.0/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/19.0.0/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/19.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/19.0.0/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/19.0.0/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/19.0.0/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/19.0.0/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/19.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/19.0.0/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/19.0.0/aapt-output-souch.smsbypass_9.txt include tests/build-tools/19.1.0/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/19.1.0/aapt-output-com.politedroid_3.txt include tests/build-tools/19.1.0/aapt-output-com.politedroid_4.txt include tests/build-tools/19.1.0/aapt-output-com.politedroid_5.txt include tests/build-tools/19.1.0/aapt-output-com.politedroid_6.txt include tests/build-tools/19.1.0/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/19.1.0/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/19.1.0/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/19.1.0/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/19.1.0/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/19.1.0/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/19.1.0/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/19.1.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/19.1.0/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/19.1.0/aapt-output-souch.smsbypass_9.txt include tests/build-tools/20.0.0/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/20.0.0/aapt-output-com.politedroid_3.txt include tests/build-tools/20.0.0/aapt-output-com.politedroid_4.txt include tests/build-tools/20.0.0/aapt-output-com.politedroid_5.txt include tests/build-tools/20.0.0/aapt-output-com.politedroid_6.txt include tests/build-tools/20.0.0/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/20.0.0/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/20.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/20.0.0/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/20.0.0/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/20.0.0/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/20.0.0/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/20.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/20.0.0/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/20.0.0/aapt-output-souch.smsbypass_9.txt include tests/build-tools/21.1.1/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/21.1.1/aapt-output-com.politedroid_3.txt include tests/build-tools/21.1.1/aapt-output-com.politedroid_4.txt include tests/build-tools/21.1.1/aapt-output-com.politedroid_5.txt include tests/build-tools/21.1.1/aapt-output-com.politedroid_6.txt include tests/build-tools/21.1.1/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/21.1.1/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/21.1.1/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/21.1.1/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/21.1.1/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/21.1.1/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/21.1.1/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/21.1.1/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/21.1.1/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/21.1.1/aapt-output-souch.smsbypass_9.txt include tests/build-tools/21.1.2/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/21.1.2/aapt-output-com.politedroid_3.txt include tests/build-tools/21.1.2/aapt-output-com.politedroid_4.txt include tests/build-tools/21.1.2/aapt-output-com.politedroid_5.txt include tests/build-tools/21.1.2/aapt-output-com.politedroid_6.txt include tests/build-tools/21.1.2/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/21.1.2/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/21.1.2/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/21.1.2/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/21.1.2/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/21.1.2/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/21.1.2/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/21.1.2/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/21.1.2/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/21.1.2/aapt-output-souch.smsbypass_9.txt include tests/build-tools/22.0.0/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/22.0.0/aapt-output-com.politedroid_3.txt include tests/build-tools/22.0.0/aapt-output-com.politedroid_4.txt include tests/build-tools/22.0.0/aapt-output-com.politedroid_5.txt include tests/build-tools/22.0.0/aapt-output-com.politedroid_6.txt include tests/build-tools/22.0.0/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/22.0.0/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/22.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/22.0.0/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/22.0.0/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/22.0.0/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/22.0.0/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/22.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/22.0.0/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/22.0.0/aapt-output-souch.smsbypass_9.txt include tests/build-tools/22.0.1/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/22.0.1/aapt-output-com.politedroid_3.txt include tests/build-tools/22.0.1/aapt-output-com.politedroid_4.txt include tests/build-tools/22.0.1/aapt-output-com.politedroid_5.txt include tests/build-tools/22.0.1/aapt-output-com.politedroid_6.txt include tests/build-tools/22.0.1/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/22.0.1/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/22.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/22.0.1/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/22.0.1/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/22.0.1/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/22.0.1/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/22.0.1/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/22.0.1/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/22.0.1/aapt-output-souch.smsbypass_9.txt include tests/build-tools/23.0.0/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/23.0.0/aapt-output-com.politedroid_3.txt include tests/build-tools/23.0.0/aapt-output-com.politedroid_4.txt include tests/build-tools/23.0.0/aapt-output-com.politedroid_5.txt include tests/build-tools/23.0.0/aapt-output-com.politedroid_6.txt include tests/build-tools/23.0.0/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/23.0.0/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/23.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/23.0.0/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/23.0.0/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/23.0.0/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/23.0.0/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/23.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/23.0.0/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/23.0.0/aapt-output-souch.smsbypass_9.txt include tests/build-tools/23.0.1/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/23.0.1/aapt-output-com.politedroid_3.txt include tests/build-tools/23.0.1/aapt-output-com.politedroid_4.txt include tests/build-tools/23.0.1/aapt-output-com.politedroid_5.txt include tests/build-tools/23.0.1/aapt-output-com.politedroid_6.txt include tests/build-tools/23.0.1/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/23.0.1/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/23.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/23.0.1/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/23.0.1/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/23.0.1/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/23.0.1/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/23.0.1/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/23.0.1/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/23.0.1/aapt-output-souch.smsbypass_9.txt include tests/build-tools/23.0.2/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/23.0.2/aapt-output-com.politedroid_3.txt include tests/build-tools/23.0.2/aapt-output-com.politedroid_4.txt include tests/build-tools/23.0.2/aapt-output-com.politedroid_5.txt include tests/build-tools/23.0.2/aapt-output-com.politedroid_6.txt include tests/build-tools/23.0.2/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/23.0.2/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/23.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/23.0.2/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/23.0.2/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/23.0.2/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/23.0.2/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/23.0.2/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/23.0.2/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/23.0.2/aapt-output-souch.smsbypass_9.txt include tests/build-tools/23.0.3/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/23.0.3/aapt-output-com.politedroid_3.txt include tests/build-tools/23.0.3/aapt-output-com.politedroid_4.txt include tests/build-tools/23.0.3/aapt-output-com.politedroid_5.txt include tests/build-tools/23.0.3/aapt-output-com.politedroid_6.txt include tests/build-tools/23.0.3/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/23.0.3/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/23.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/23.0.3/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/23.0.3/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/23.0.3/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/23.0.3/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/23.0.3/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/23.0.3/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/23.0.3/aapt-output-souch.smsbypass_9.txt include tests/build-tools/24.0.0/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/24.0.0/aapt-output-com.politedroid_3.txt include tests/build-tools/24.0.0/aapt-output-com.politedroid_4.txt include tests/build-tools/24.0.0/aapt-output-com.politedroid_5.txt include tests/build-tools/24.0.0/aapt-output-com.politedroid_6.txt include tests/build-tools/24.0.0/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/24.0.0/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/24.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/24.0.0/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/24.0.0/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/24.0.0/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/24.0.0/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/24.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/24.0.0/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/24.0.0/aapt-output-souch.smsbypass_9.txt include tests/build-tools/24.0.1/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/24.0.1/aapt-output-com.politedroid_3.txt include tests/build-tools/24.0.1/aapt-output-com.politedroid_4.txt include tests/build-tools/24.0.1/aapt-output-com.politedroid_5.txt include tests/build-tools/24.0.1/aapt-output-com.politedroid_6.txt include tests/build-tools/24.0.1/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/24.0.1/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/24.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/24.0.1/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/24.0.1/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/24.0.1/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/24.0.1/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/24.0.1/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/24.0.1/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/24.0.1/aapt-output-souch.smsbypass_9.txt include tests/build-tools/24.0.2/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/24.0.2/aapt-output-com.politedroid_3.txt include tests/build-tools/24.0.2/aapt-output-com.politedroid_4.txt include tests/build-tools/24.0.2/aapt-output-com.politedroid_5.txt include tests/build-tools/24.0.2/aapt-output-com.politedroid_6.txt include tests/build-tools/24.0.2/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/24.0.2/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/24.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/24.0.2/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/24.0.2/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/24.0.2/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/24.0.2/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/24.0.2/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/24.0.2/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/24.0.2/aapt-output-souch.smsbypass_9.txt include tests/build-tools/24.0.3/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/24.0.3/aapt-output-com.politedroid_3.txt include tests/build-tools/24.0.3/aapt-output-com.politedroid_4.txt include tests/build-tools/24.0.3/aapt-output-com.politedroid_5.txt include tests/build-tools/24.0.3/aapt-output-com.politedroid_6.txt include tests/build-tools/24.0.3/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/24.0.3/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/24.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/24.0.3/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/24.0.3/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/24.0.3/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/24.0.3/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/24.0.3/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/24.0.3/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/24.0.3/aapt-output-souch.smsbypass_9.txt include tests/build-tools/25.0.0/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/25.0.0/aapt-output-com.politedroid_3.txt include tests/build-tools/25.0.0/aapt-output-com.politedroid_4.txt include tests/build-tools/25.0.0/aapt-output-com.politedroid_5.txt include tests/build-tools/25.0.0/aapt-output-com.politedroid_6.txt include tests/build-tools/25.0.0/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/25.0.0/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/25.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/25.0.0/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/25.0.0/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/25.0.0/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/25.0.0/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/25.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/25.0.0/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/25.0.0/aapt-output-souch.smsbypass_9.txt include tests/build-tools/25.0.1/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/25.0.1/aapt-output-com.politedroid_3.txt include tests/build-tools/25.0.1/aapt-output-com.politedroid_4.txt include tests/build-tools/25.0.1/aapt-output-com.politedroid_5.txt include tests/build-tools/25.0.1/aapt-output-com.politedroid_6.txt include tests/build-tools/25.0.1/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/25.0.1/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/25.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/25.0.1/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/25.0.1/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/25.0.1/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/25.0.1/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/25.0.1/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/25.0.1/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/25.0.1/aapt-output-souch.smsbypass_9.txt include tests/build-tools/25.0.2/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/25.0.2/aapt-output-com.politedroid_3.txt include tests/build-tools/25.0.2/aapt-output-com.politedroid_4.txt include tests/build-tools/25.0.2/aapt-output-com.politedroid_5.txt include tests/build-tools/25.0.2/aapt-output-com.politedroid_6.txt include tests/build-tools/25.0.2/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/25.0.2/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/25.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/25.0.2/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/25.0.2/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/25.0.2/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/25.0.2/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/25.0.2/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/25.0.2/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/25.0.2/aapt-output-souch.smsbypass_9.txt include tests/build-tools/25.0.3/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/25.0.3/aapt-output-com.politedroid_3.txt include tests/build-tools/25.0.3/aapt-output-com.politedroid_4.txt include tests/build-tools/25.0.3/aapt-output-com.politedroid_5.txt include tests/build-tools/25.0.3/aapt-output-com.politedroid_6.txt include tests/build-tools/25.0.3/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/25.0.3/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/25.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/25.0.3/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/25.0.3/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/25.0.3/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/25.0.3/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/25.0.3/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/25.0.3/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/25.0.3/aapt-output-souch.smsbypass_9.txt include tests/build-tools/26.0.0/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/26.0.0/aapt-output-com.politedroid_3.txt include tests/build-tools/26.0.0/aapt-output-com.politedroid_4.txt include tests/build-tools/26.0.0/aapt-output-com.politedroid_5.txt include tests/build-tools/26.0.0/aapt-output-com.politedroid_6.txt include tests/build-tools/26.0.0/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/26.0.0/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/26.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/26.0.0/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/26.0.0/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/26.0.0/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/26.0.0/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/26.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/26.0.0/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/26.0.0/aapt-output-souch.smsbypass_9.txt include tests/build-tools/26.0.1/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/26.0.1/aapt-output-com.politedroid_3.txt include tests/build-tools/26.0.1/aapt-output-com.politedroid_4.txt include tests/build-tools/26.0.1/aapt-output-com.politedroid_5.txt include tests/build-tools/26.0.1/aapt-output-com.politedroid_6.txt include tests/build-tools/26.0.1/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/26.0.1/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/26.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/26.0.1/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/26.0.1/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/26.0.1/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/26.0.1/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/26.0.1/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/26.0.1/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/26.0.1/aapt-output-souch.smsbypass_9.txt include tests/build-tools/26.0.2/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/26.0.2/aapt-output-com.politedroid_3.txt include tests/build-tools/26.0.2/aapt-output-com.politedroid_4.txt include tests/build-tools/26.0.2/aapt-output-com.politedroid_5.txt include tests/build-tools/26.0.2/aapt-output-com.politedroid_6.txt include tests/build-tools/26.0.2/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/26.0.2/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/26.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/26.0.2/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/26.0.2/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/26.0.2/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/26.0.2/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/26.0.2/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/26.0.2/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/26.0.2/aapt-output-souch.smsbypass_9.txt include tests/build-tools/26.0.3/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/26.0.3/aapt-output-com.politedroid_3.txt include tests/build-tools/26.0.3/aapt-output-com.politedroid_4.txt include tests/build-tools/26.0.3/aapt-output-com.politedroid_5.txt include tests/build-tools/26.0.3/aapt-output-com.politedroid_6.txt include tests/build-tools/26.0.3/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/26.0.3/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/26.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/26.0.3/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/26.0.3/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/26.0.3/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/26.0.3/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/26.0.3/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/26.0.3/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/26.0.3/aapt-output-souch.smsbypass_9.txt include tests/build-tools/27.0.0/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/27.0.0/aapt-output-com.politedroid_3.txt include tests/build-tools/27.0.0/aapt-output-com.politedroid_4.txt include tests/build-tools/27.0.0/aapt-output-com.politedroid_5.txt include tests/build-tools/27.0.0/aapt-output-com.politedroid_6.txt include tests/build-tools/27.0.0/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/27.0.0/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/27.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/27.0.0/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/27.0.0/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/27.0.0/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/27.0.0/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/27.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/27.0.0/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/27.0.0/aapt-output-souch.smsbypass_9.txt include tests/build-tools/27.0.1/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/27.0.1/aapt-output-com.politedroid_3.txt include tests/build-tools/27.0.1/aapt-output-com.politedroid_4.txt include tests/build-tools/27.0.1/aapt-output-com.politedroid_5.txt include tests/build-tools/27.0.1/aapt-output-com.politedroid_6.txt include tests/build-tools/27.0.1/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/27.0.1/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/27.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/27.0.1/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/27.0.1/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/27.0.1/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/27.0.1/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/27.0.1/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/27.0.1/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/27.0.1/aapt-output-souch.smsbypass_9.txt include tests/build-tools/27.0.2/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/27.0.2/aapt-output-com.politedroid_3.txt include tests/build-tools/27.0.2/aapt-output-com.politedroid_4.txt include tests/build-tools/27.0.2/aapt-output-com.politedroid_5.txt include tests/build-tools/27.0.2/aapt-output-com.politedroid_6.txt include tests/build-tools/27.0.2/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/27.0.2/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/27.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/27.0.2/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/27.0.2/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/27.0.2/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/27.0.2/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/27.0.2/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/27.0.2/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/27.0.2/aapt-output-souch.smsbypass_9.txt include tests/build-tools/27.0.3/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/27.0.3/aapt-output-com.politedroid_3.txt include tests/build-tools/27.0.3/aapt-output-com.politedroid_4.txt include tests/build-tools/27.0.3/aapt-output-com.politedroid_5.txt include tests/build-tools/27.0.3/aapt-output-com.politedroid_6.txt include tests/build-tools/27.0.3/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/27.0.3/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/27.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/27.0.3/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/27.0.3/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/27.0.3/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/27.0.3/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/27.0.3/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/27.0.3/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/27.0.3/aapt-output-souch.smsbypass_9.txt include tests/build-tools/28.0.0/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/28.0.0/aapt-output-com.politedroid_3.txt include tests/build-tools/28.0.0/aapt-output-com.politedroid_4.txt include tests/build-tools/28.0.0/aapt-output-com.politedroid_5.txt include tests/build-tools/28.0.0/aapt-output-com.politedroid_6.txt include tests/build-tools/28.0.0/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/28.0.0/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/28.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/28.0.0/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/28.0.0/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/28.0.0/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/28.0.0/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/28.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/28.0.0/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/28.0.0/aapt-output-souch.smsbypass_9.txt include tests/build-tools/28.0.1/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/28.0.1/aapt-output-com.politedroid_3.txt include tests/build-tools/28.0.1/aapt-output-com.politedroid_4.txt include tests/build-tools/28.0.1/aapt-output-com.politedroid_5.txt include tests/build-tools/28.0.1/aapt-output-com.politedroid_6.txt include tests/build-tools/28.0.1/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/28.0.1/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/28.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/28.0.1/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/28.0.1/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/28.0.1/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/28.0.1/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/28.0.1/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/28.0.1/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/28.0.1/aapt-output-souch.smsbypass_9.txt include tests/build-tools/28.0.2/aapt-output-com.politedroid_3.txt include tests/build-tools/28.0.2/aapt-output-com.politedroid_4.txt include tests/build-tools/28.0.2/aapt-output-com.politedroid_5.txt include tests/build-tools/28.0.2/aapt-output-com.politedroid_6.txt include tests/build-tools/28.0.2/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/28.0.2/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/28.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/28.0.2/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/28.0.2/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/28.0.2/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/28.0.2/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/28.0.2/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/28.0.2/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/28.0.2/aapt-output-souch.smsbypass_9.txt include tests/build-tools/28.0.3/aapt-output-com.example.test.helloworld_1.txt include tests/build-tools/28.0.3/aapt-output-com.politedroid_3.txt include tests/build-tools/28.0.3/aapt-output-com.politedroid_4.txt include tests/build-tools/28.0.3/aapt-output-com.politedroid_5.txt include tests/build-tools/28.0.3/aapt-output-com.politedroid_6.txt include tests/build-tools/28.0.3/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/28.0.3/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/28.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/28.0.3/aapt-output-no.min.target.sdk_987.txt include tests/build-tools/28.0.3/aapt-output-obb.main.oldversion_1444412523.txt include tests/build-tools/28.0.3/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/28.0.3/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/28.0.3/aapt-output-obb.main.twoversions_1101617.txt include tests/build-tools/28.0.3/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/28.0.3/aapt-output-souch.smsbypass_9.txt include tests/build-tools/generate.sh include tests/check-fdroid-apk include tests/com.fake.IpaApp_1000000000001.ipa include tests/config.yml include tests/config/antiFeatures.yml include tests/config/categories.yml include tests/config/de/antiFeatures.yml include tests/config/fa/antiFeatures.yml include tests/config/ic_antifeature_ads.xml include tests/config/ic_antifeature_disabledalgorithm.xml include tests/config/ic_antifeature_knownvuln.xml include tests/config/ic_antifeature_nonfreeadd.xml include tests/config/ic_antifeature_nonfreeassets.xml include tests/config/ic_antifeature_nonfreedep.xml include tests/config/ic_antifeature_nonfreenet.xml include tests/config/ic_antifeature_nosourcesince.xml include tests/config/ic_antifeature_nsfw.xml include tests/config/ic_antifeature_tracking.xml include tests/config/ic_antifeature_upstreamnonfree.xml include tests/config/ro/antiFeatures.yml include tests/config/zh-rCN/antiFeatures.yml include tests/corrupt-featureGraphic.png include tests/dummy-keystore.jks include tests/dump_internal_metadata_format.py include tests/extra/manual-vmtools-test.py include tests/funding-usernames.yaml include tests/get_android_tools_versions/android-ndk-r10e/RELEASE.TXT include tests/get_android_tools_versions/android-sdk/ndk-bundle/package.xml include tests/get_android_tools_versions/android-sdk/ndk-bundle/source.properties include tests/get_android_tools_versions/android-sdk/ndk/11.2.2725575/source.properties include tests/get_android_tools_versions/android-sdk/ndk/17.2.4988734/source.properties include tests/get_android_tools_versions/android-sdk/ndk/21.3.6528147/source.properties include tests/get_android_tools_versions/android-sdk/patcher/v4/source.properties include tests/get_android_tools_versions/android-sdk/platforms/android-30/source.properties include tests/get_android_tools_versions/android-sdk/skiaparser/1/source.properties include tests/get_android_tools_versions/android-sdk/tools/source.properties include tests/gnupghome/pubring.gpg include tests/gnupghome/random_seed include tests/gnupghome/secring.gpg include tests/gnupghome/trustdb.gpg include tests/gradle-maven-blocks.yaml include tests/gradle-release-checksums.py include tests/IsMD5Disabled.java include tests/issue-1128-min-sdk-30-poc.apk include tests/issue-1128-poc1.apk include tests/issue-1128-poc2.apk include tests/issue-1128-poc3a.apk include tests/issue-1128-poc3b.apk include tests/janus.apk include tests/key-tricks.py include tests/keystore.jks include tests/metadata-rewrite-yml/app.with.special.build.params.yml include tests/metadata-rewrite-yml/fake.ota.update.yml include tests/metadata-rewrite-yml/org.fdroid.fdroid.yml include tests/metadata/apk/info.guardianproject.urzip.yaml include tests/metadata/apk/org.dyndns.fules.ck.yaml include tests/metadata/app.with.special.build.params.yml include tests/metadata/app.with.special.build.params/en-US/antifeatures/50_Ads.txt include tests/metadata/app.with.special.build.params/en-US/antifeatures/50_Tracking.txt include tests/metadata/app.with.special.build.params/en-US/antifeatures/Ads.txt include tests/metadata/app.with.special.build.params/en-US/antifeatures/NoSourceSince.txt include tests/metadata/app.with.special.build.params/zh-CN/antifeatures/49_Tracking.txt include tests/metadata/app.with.special.build.params/zh-CN/antifeatures/50_Ads.txt include tests/metadata/com.politedroid.yml include tests/metadata/dump/app.with.special.build.params.yaml include tests/metadata/dump/com.politedroid.yaml include tests/metadata/dump/org.adaway.yaml include tests/metadata/dump/org.smssecure.smssecure.yaml include tests/metadata/dump/org.videolan.vlc.yaml include tests/metadata/duplicate.permisssions.yml include tests/metadata/fake.ota.update.yml include tests/metadata/info.guardianproject.checkey.yml include tests/metadata/info.guardianproject.checkey/en-US/description.txt include tests/metadata/info.guardianproject.checkey/en-US/name.txt include tests/metadata/info.guardianproject.checkey/en-US/phoneScreenshots/checkey-phone.png include tests/metadata/info.guardianproject.checkey/en-US/phoneScreenshots/checkey.png include tests/metadata/info.guardianproject.checkey/en-US/summary.txt include tests/metadata/info.guardianproject.checkey/ja-JP/name.txt include tests/metadata/info.guardianproject.urzip.yml include tests/metadata/info.guardianproject.urzip/en-US/changelogs/100.txt include tests/metadata/info.guardianproject.urzip/en-US/changelogs/default.txt include tests/metadata/info.guardianproject.urzip/en-US/full_description.txt include tests/metadata/info.guardianproject.urzip/en-US/images/featureGraphic.png include tests/metadata/info.guardianproject.urzip/en-US/images/icon.png include tests/metadata/info.guardianproject.urzip/en-US/short_description.txt include tests/metadata/info.guardianproject.urzip/en-US/title.txt include tests/metadata/info.guardianproject.urzip/en-US/video.txt include tests/metadata/info.zwanenburg.caffeinetile.yml include tests/metadata/no.min.target.sdk.yml include tests/metadata/obb.main.oldversion.yml include tests/metadata/obb.main.twoversions.yml include tests/metadata/obb.mainpatch.current.yml include tests/metadata/org.adaway.yml include tests/metadata/org.fdroid.ci.test.app.yml include tests/metadata/org.fdroid.fdroid.yml include tests/metadata/org.maxsdkversion.yml include tests/metadata/org.smssecure.smssecure.yml include tests/metadata/org.smssecure.smssecure/signatures/134/28969C09.RSA include tests/metadata/org.smssecure.smssecure/signatures/134/28969C09.SF include tests/metadata/org.smssecure.smssecure/signatures/134/MANIFEST.MF include tests/metadata/org.smssecure.smssecure/signatures/135/28969C09.RSA include tests/metadata/org.smssecure.smssecure/signatures/135/28969C09.SF include tests/metadata/org.smssecure.smssecure/signatures/135/MANIFEST.MF include tests/metadata/org.videolan.vlc.yml include tests/metadata/raw.template.yml include tests/metadata/souch.smsbypass.yml include tests/minimal_targetsdk_30_unsigned.apk include tests/Norway_bouvet_europe_2.obf.zip include tests/no_targetsdk_minsdk1_unsigned.apk include tests/no_targetsdk_minsdk30_unsigned.apk include tests/openssl-version-check-test.py include tests/org.bitbucket.tickytacky.mirrormirror_1.apk include tests/org.bitbucket.tickytacky.mirrormirror_2.apk include tests/org.bitbucket.tickytacky.mirrormirror_3.apk include tests/org.bitbucket.tickytacky.mirrormirror_4.apk include tests/org.dyndns.fules.ck_20.apk include tests/org.sajeg.fallingblocks_3.apk include tests/repo/com.example.test.helloworld_1.apk include tests/repo/com.politedroid_3.apk include tests/repo/com.politedroid_4.apk include tests/repo/com.politedroid_5.apk include tests/repo/com.politedroid_6.apk include tests/repo/duplicate.permisssions_9999999.apk include tests/repo/entry.json include tests/repo/fake.ota.update_1234.zip include tests/repo/index-v1.json include tests/repo/index-v2.json include tests/repo/index.xml include tests/repo/info.zwanenburg.caffeinetile_4.apk include tests/repo/main.1101613.obb.main.twoversions.obb include tests/repo/main.1101615.obb.main.twoversions.obb include tests/repo/main.1434483388.obb.main.oldversion.obb include tests/repo/main.1619.obb.mainpatch.current.obb include tests/repo/no.min.target.sdk_987.apk include tests/repo/obb.main.oldversion_1444412523.apk include tests/repo/obb.main.twoversions_1101613.apk include tests/repo/obb.main.twoversions_1101615.apk include tests/repo/obb.main.twoversions_1101617.apk include tests/repo/obb.main.twoversions_1101617_src.tar.gz include tests/repo/obb.mainpatch.current/en-US/featureGraphic.png include tests/repo/obb.mainpatch.current/en-US/icon.png include tests/repo/obb.mainpatch.current/en-US/phoneScreenshots/screenshot-main.png include tests/repo/obb.mainpatch.current/en-US/sevenInchScreenshots/screenshot-tablet-main.png include tests/repo/obb.mainpatch.current_1619.apk include tests/repo/obb.mainpatch.current_1619_another-release-key.apk include tests/repo/org.maxsdkversion_4.apk include tests/repo/org.videolan.vlc/en-US/icon.png include tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot10.png include tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot12.png include tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot15.png include tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot18.png include tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot20.png include tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot22.png include tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot4.png include tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot7.png include tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot9.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot0.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot1.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot11.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot13.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot14.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot16.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot17.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot19.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot2.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot21.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot23.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot3.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot5.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot6.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot8.png include tests/repo/patch.1619.obb.mainpatch.current.obb include tests/repo/souch.smsbypass_9.apk include tests/repo/urzip-*.apk include tests/repo/v1.v2.sig_1020.apk include tests/run-tests include tests/SANAPPSI.RSA include tests/SANAPPSI.SF include tests/shared_test_code.py include tests/signindex/guardianproject-v1.jar include tests/signindex/guardianproject.jar include tests/signindex/testy.jar include tests/signindex/unsigned.jar include tests/source-files/at.bitfire.davdroid/build.gradle include tests/source-files/catalog.test/app/build.gradle include tests/source-files/catalog.test/build.gradle.kts include tests/source-files/catalog.test/buildSrc/build.gradle.kts include tests/source-files/catalog.test/buildSrc/settings.gradle.kts include tests/source-files/catalog.test/buildSrc2/build.gradle.kts include tests/source-files/catalog.test/buildSrc2/settings.gradle.kts include tests/source-files/catalog.test/core/build.gradle include tests/source-files/catalog.test/gradle/libs.versions.toml include tests/source-files/catalog.test/libs.versions.toml include tests/source-files/catalog.test/settings.gradle.kts include tests/source-files/cn.wildfirechat.chat/avenginekit/build.gradle include tests/source-files/cn.wildfirechat.chat/build.gradle include tests/source-files/cn.wildfirechat.chat/chat/build.gradle include tests/source-files/cn.wildfirechat.chat/client/build.gradle include tests/source-files/cn.wildfirechat.chat/client/src/main/AndroidManifest.xml include tests/source-files/cn.wildfirechat.chat/emojilibrary/build.gradle include tests/source-files/cn.wildfirechat.chat/gradle/build_libraries.gradle include tests/source-files/cn.wildfirechat.chat/imagepicker/build.gradle include tests/source-files/cn.wildfirechat.chat/mars-core-release/build.gradle include tests/source-files/cn.wildfirechat.chat/push/build.gradle include tests/source-files/cn.wildfirechat.chat/settings.gradle include tests/source-files/com.anpmech.launcher/app/build.gradle include tests/source-files/com.anpmech.launcher/app/src/main/AndroidManifest.xml include tests/source-files/com.anpmech.launcher/build.gradle include tests/source-files/com.anpmech.launcher/settings.gradle include tests/source-files/com.github.jameshnsears.quoteunquote/build.gradle include tests/source-files/com.github.shadowsocks/core/build.gradle.kts include tests/source-files/com.github.shadowsocks/mobile/build.gradle.kts include tests/source-files/com.integreight.onesheeld/build.gradle include tests/source-files/com.integreight.onesheeld/gradle/wrapper/gradle-wrapper.properties include tests/source-files/com.integreight.onesheeld/localeapi/build.gradle include tests/source-files/com.integreight.onesheeld/localeapi/src/main/AndroidManifest.xml include tests/source-files/com.integreight.onesheeld/oneSheeld/build.gradle include tests/source-files/com.integreight.onesheeld/oneSheeld/src/main/AndroidManifest.xml include tests/source-files/com.integreight.onesheeld/pagerIndicator/build.gradle include tests/source-files/com.integreight.onesheeld/pagerIndicator/src/main/AndroidManifest.xml include tests/source-files/com.integreight.onesheeld/pullToRefreshlibrary/build.gradle include tests/source-files/com.integreight.onesheeld/pullToRefreshlibrary/src/main/AndroidManifest.xml include tests/source-files/com.integreight.onesheeld/quickReturnHeader/build.gradle include tests/source-files/com.integreight.onesheeld/quickReturnHeader/src/main/AndroidManifest.xml include tests/source-files/com.integreight.onesheeld/settings.gradle include tests/source-files/com.jens.automation2/app/build.gradle include tests/source-files/com.jens.automation2/build.gradle include tests/source-files/com.kunzisoft.testcase/build.gradle include tests/source-files/com.lolo.io.onelist/app/build.gradle.kts include tests/source-files/com.lolo.io.onelist/build.gradle.kts include tests/source-files/com.lolo.io.onelist/gradle/libs.versions.toml include tests/source-files/com.lolo.io.onelist/gradle/wrapper/gradle-wrapper.properties include tests/source-files/com.lolo.io.onelist/settings.gradle include tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android/en-US/full_description.txt include tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android/en-US/short_description.txt include tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android/en-US/title.txt include tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/android/en-US/full_description.txt include tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/android/en-US/short_description.txt include tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/android/en-US/title.txt include tests/source-files/com.nextcloud.client/build.gradle include tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/android/en-US/full_description.txt include tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/android/en-US/short_description.txt include tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/android/en-US/title.txt include tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata/android/en-US/full_description.txt include tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata/android/en-US/short_description.txt include tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata/android/en-US/title.txt include tests/source-files/com.seafile.seadroid2/app/build.gradle include tests/source-files/com.ubergeek42.WeechatAndroid/app/build.gradle.kts include tests/source-files/com.ubergeek42.WeechatAndroid/app/src/main/res/values/strings.xml include tests/source-files/de.varengold.activeTAN/build.gradle include tests/source-files/dev.patrickgold.florisboard/app/build.gradle.kts include tests/source-files/eu.siacs.conversations/build.gradle include tests/source-files/eu.siacs.conversations/metadata/en-US/name.txt include tests/source-files/fdroid/fdroidclient/AndroidManifest.xml include tests/source-files/fdroid/fdroidclient/build.gradle include tests/source-files/firebase-allowlisted/app/build.gradle include tests/source-files/firebase-allowlisted/build.gradle include tests/source-files/firebase-suspect/app/build.gradle include tests/source-files/firebase-suspect/build.gradle include tests/source-files/info.guardianproject.ripple/build.gradle include tests/source-files/lockfile.test/flutter/.dart_tool/flutter_gen/pubspec.yaml include tests/source-files/lockfile.test/flutter/pubspec.lock include tests/source-files/lockfile.test/flutter/pubspec.yaml include tests/source-files/lockfile.test/javascript/package.json include tests/source-files/lockfile.test/javascript/yarn.lock include tests/source-files/lockfile.test/rust/subdir/Cargo.lock include tests/source-files/lockfile.test/rust/subdir/Cargo.toml include tests/source-files/lockfile.test/rust/subdir/subdir/subdir/Cargo.toml include tests/source-files/lockfile.test/rust/subdir2/Cargo.toml include tests/source-files/open-keychain/open-keychain/build.gradle include tests/source-files/open-keychain/open-keychain/OpenKeychain/build.gradle include tests/source-files/org.mozilla.rocket/app/build.gradle include tests/source-files/org.noise_planet.noisecapture/app/build.gradle include tests/source-files/org.noise_planet.noisecapture/settings.gradle include tests/source-files/org.noise_planet.noisecapture/sosfilter/build.gradle include tests/source-files/org.piepmeyer.gauguin/build.gradle.kts include tests/source-files/org.piepmeyer.gauguin/libs.versions.toml include tests/source-files/org.piepmeyer.gauguin/settings.gradle.kts include tests/source-files/org.tasks/app/build.gradle.kts include tests/source-files/org.tasks/build.gradle include tests/source-files/org.tasks/build.gradle.kts include tests/source-files/org.tasks/buildSrc/build.gradle.kts include tests/source-files/org.tasks/settings.gradle.kts include tests/source-files/osmandapp/osmand/build.gradle include tests/source-files/osmandapp/osmand/gradle/wrapper/gradle-wrapper.properties include tests/source-files/OtakuWorld/build.gradle include tests/source-files/realm/react-native/android/build.gradle include tests/source-files/se.manyver/android/app/build.gradle include tests/source-files/se.manyver/android/build.gradle include tests/source-files/se.manyver/android/gradle.properties include tests/source-files/se.manyver/android/gradle/wrapper/gradle-wrapper.properties include tests/source-files/se.manyver/android/settings.gradle include tests/source-files/se.manyver/app.json include tests/source-files/se.manyver/index.android.js include tests/source-files/se.manyver/package.json include tests/source-files/se.manyver/react-native.config.js include tests/source-files/ut.ewh.audiometrytest/app/build.gradle include tests/source-files/ut.ewh.audiometrytest/app/src/main/AndroidManifest.xml include tests/source-files/ut.ewh.audiometrytest/build.gradle include tests/source-files/ut.ewh.audiometrytest/settings.gradle include tests/source-files/yuriykulikov/AlarmClock/gradle/wrapper/gradle-wrapper.properties include tests/source-files/Zillode/syncthing-silk/build.gradle include tests/SpeedoMeterApp.main_1.apk include tests/test_build.py include tests/test_checkupdates.py include tests/test_common.py include tests/test_deploy.py include tests/test_exception.py include tests/test_gradlew-fdroid include tests/test_import_subcommand.py include tests/test_index.py include tests/test_init.py include tests/test_install.py include tests/test_lint.py include tests/test_main.py include tests/test_metadata.py include tests/test_nightly.py include tests/test_publish.py include tests/test_rewritemeta.py include tests/test_scanner.py include tests/test_signatures.py include tests/test_signindex.py include tests/test_update.py include tests/test_vcs.py include tests/triple-t-2/build/org.piwigo.android/app/.gitignore include tests/triple-t-2/build/org.piwigo.android/app/build.gradle include tests/triple-t-2/build/org.piwigo.android/app/src/debug/res/values/constants.xml include tests/triple-t-2/build/org.piwigo.android/app/src/debug/res/values/strings.xml include tests/triple-t-2/build/org.piwigo.android/app/src/main/java/org/piwigo/PiwigoApplication.java include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/contact-email.txt include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/contact-website.txt include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/default-language.txt include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/de-DE/full-description.txt include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/de-DE/short-description.txt include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/de-DE/title.txt include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/full-description.txt include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphics/feature-graphic/piwigo-full.png include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphics/icon/piwigo-icon.png include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphics/phone-screenshots/01_Login.jpg include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphics/phone-screenshots/02_Albums.jpg include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphics/phone-screenshots/03_Photos.jpg include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphics/phone-screenshots/04_Albums_horizontal.jpg include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphics/phone-screenshots/05_Menu.jpg include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphics/tablet-screenshots/01_Login.png include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/short-description.txt include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/title.txt include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/fr-FR/full-description.txt include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/fr-FR/short-description.txt include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/fr-FR/title.txt include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/kn-IN/full-description.txt include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/kn-IN/short-description.txt include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/kn-IN/title.txt include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/release-notes/de-DE/default.txt include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/release-notes/en-US/default.txt include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/release-notes/fr-FR/default.txt include tests/triple-t-2/build/org.piwigo.android/app/src/main/play/release-notes/kn-IN/default.txt include tests/triple-t-2/build/org.piwigo.android/build.gradle include tests/triple-t-2/build/org.piwigo.android/settings.gradle include tests/triple-t-2/metadata/org.piwigo.android.yml include tests/triple-t-anysoftkeyboard/build/com.anysoftkeyboard.languagepack.dutch/addons/languages/dutch/apk/src/main/play/listings/en-US/title.txt include tests/triple-t-anysoftkeyboard/build/com.anysoftkeyboard.languagepack.dutch/ime/app/src/main/play/listings/en-US/title.txt include tests/triple-t-anysoftkeyboard/build/com.anysoftkeyboard.languagepack.dutch/settings.gradle include tests/triple-t-anysoftkeyboard/build/com.menny.android.anysoftkeyboard/addons/languages/dutch/apk/src/main/play/listings/en-US/title.txt include tests/triple-t-anysoftkeyboard/build/com.menny.android.anysoftkeyboard/ime/app/src/main/play/listings/en-US/title.txt include tests/triple-t-anysoftkeyboard/build/com.menny.android.anysoftkeyboard/settings.gradle include tests/triple-t-anysoftkeyboard/metadata/com.anysoftkeyboard.languagepack.dutch.yml include tests/triple-t-anysoftkeyboard/metadata/com.menny.android.anysoftkeyboard.yml include tests/triple-t-flutter/build/fr.emersion.goguma/android/app/src/main/play/contact-website.txt include tests/triple-t-flutter/build/fr.emersion.goguma/android/app/src/main/play/listings/en-US/full-description.txt include tests/triple-t-flutter/build/fr.emersion.goguma/android/app/src/main/play/listings/en-US/short-description.txt include tests/triple-t-flutter/build/fr.emersion.goguma/android/app/src/main/play/listings/en-US/title.txt include tests/triple-t-flutter/metadata/fr.emersion.goguma.yml include tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/settings.gradle include tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/verifier/src/main/play/listings/en-US/title.txt include tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/wallet/src/main/play/listings/en-US/title.txt include tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/settings.gradle include tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/verifier/src/main/play/listings/en-US/title.txt include tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/wallet/src/main/play/listings/en-US/title.txt include tests/triple-t-multiple/metadata/ch.admin.bag.covidcertificate.verifier.yml include tests/triple-t-multiple/metadata/ch.admin.bag.covidcertificate.wallet.yml include tests/urzip-badcert.apk include tests/urzip-badsig.apk include tests/urzip-release-unsigned.apk include tests/urzip-release.apk include tests/urzip.apk include tests/v2.only.sig_2.apk include tests/valid-package-names/random-package-names include tests/valid-package-names/RandomPackageNames.java include tests/valid-package-names/test.py include tests/__init__.py ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.364188 fdroidserver-2.4.0/PKG-INFO0000644000175000017500000001371414770510164014027 0ustar00hanshansMetadata-Version: 2.1 Name: fdroidserver Version: 2.4.0 Summary: F-Droid Server Tools Home-page: https://f-droid.org Author: The F-Droid Project Author-email: team@f-droid.org License: AGPL-3.0 Classifier: Development Status :: 5 - Production/Stable Classifier: Intended Audience :: Developers Classifier: Intended Audience :: Information Technology Classifier: Intended Audience :: System Administrators Classifier: Intended Audience :: Telecommunications Industry Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+) Classifier: Operating System :: POSIX Classifier: Operating System :: MacOS :: MacOS X Classifier: Operating System :: Unix Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 Classifier: Programming Language :: Python :: 3 :: Only Classifier: Topic :: Utilities Requires-Python: >=3.9 Description-Content-Type: text/markdown Provides-Extra: docs Provides-Extra: optional Provides-Extra: test License-File: LICENSE

# F-Droid Server ### Tools for maintaining an F-Droid repository system.
--- ## What is F-Droid Server? _fdroidserver_ is a suite of tools to publish and work with collections of Android apps (APK files) and other kinds of packages. It is used to maintain the [f-droid.org application repository](https://f-droid.org/packages). These same tools can be used to create additional or alternative repositories for publishing, or to assist in creating, testing and submitting metadata to the f-droid.org repository, also known as [_fdroiddata_](https://gitlab.com/fdroid/fdroiddata). For documentation, please see . In the beginning, _fdroidserver_ was the complete server-side setup that ran f-droid.org. Since then, the website and other parts have been split out into their own projects. The name for this suite of tooling has stayed _fdroidserver_ even though it no longer contains any proper server component. ## Installing There are many ways to install _fdroidserver_, including using a range of package managers. All of the options are documented on the website: https://f-droid.org/docs/Installing_the_Server_and_Repo_Tools ## Releases The production setup of _fdroidserver_ for f-droid.org is run directly from the _master_ branch. This is put into production on an schedule (currently weekly). So development and testing happens in the branches. We track branches using merge requests. Therefore, there are many WIP and long-lived merge requests. There are also stable releases of _fdroidserver_. This is mostly intended for running custom repositories, where the build process is separate. It can also be useful as a simple way to get started contributing packages to _fdroiddata_, since the stable releases are available in package managers. ## Tests To run the full test suite: tests/run-tests To run the tests for individual Python modules, see the `tests/test_*.py` files, e.g.: python -m unittest tests/test_metadata.py It is also possible to run individual tests: python -m unittest tests.test_metadata.MetadataTest.test_rewrite_yaml_special_build_params There is a growing test suite that has good coverage on a number of key parts of this code base. It does not yet cover all the code, and there are some parts where the technical debt makes it difficult to write unit tests. New tests should be standard Python _unittest_ test cases. Whenever possible, the old tests written in _bash_ in _tests/run-tests_ should be ported to Python. This test suite has built over time a bit haphazardly, so it is not as clean, organized, or complete as it could be. We welcome contributions. The goal is to move towards standard Python testing patterns and to expand the unit test coverage. Before rearchitecting any parts of it, be sure to [contact us](https://f-droid.org/about) to discuss the changes beforehand. ### Additional tests for different linux distributions These tests are also run on various configurations through GitLab CI. This is only enabled for `master@fdroid/fdroidserver` because it takes longer to complete than the regular CI tests. Most of the time you won't need to worry about them, but sometimes it might make sense to also run them for your merge request. In that case you need to remove [these lines from .gitlab-ci.yml](https://gitlab.com/fdroid/fdroidserver/-/blob/0124b9dde99f9cab19c034cbc7d8cc6005a99b48/.gitlab-ci.yml#L90-91) and push this to a new branch of your fork. Alternatively [run them locally](https://docs.gitlab.com/runner/commands/README.html#gitlab-runner-exec) like this: `gitlab-runner exec docker ubuntu_lts` ## Documentation The API documentation based on the docstrings gets automatically published [here](https://fdroid.gitlab.io/fdroidserver) on every commit on the `master` branch. It can be built locally via ```bash pip install -e .[docs] cd docs sphinx-apidoc -o ./source ../fdroidserver -M -e sphinx-autogen -o generated source/*.rst make html ``` To additionally lint the code call ```bash pydocstyle fdroidserver --count ``` When writing docstrings you should follow the [numpy style guide](https://numpydoc.readthedocs.io/en/latest/format.html). ## Translation Everything can be translated. See [Translation and Localization](https://f-droid.org/docs/Translation_and_Localization) for more info.
[![](https://hosted.weblate.org/widgets/f-droid/-/287x66-white.png)](https://hosted.weblate.org/engage/f-droid)
View translation status for all languages. [![](https://hosted.weblate.org/widgets/f-droid/-/fdroidserver/multi-auto.svg)](https://hosted.weblate.org/engage/f-droid/?utm_source=widget)
././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742812298.0 fdroidserver-2.4.0/README.md0000644000175000017500000001140114770232212014173 0ustar00hanshans

# F-Droid Server ### Tools for maintaining an F-Droid repository system.
--- ## What is F-Droid Server? _fdroidserver_ is a suite of tools to publish and work with collections of Android apps (APK files) and other kinds of packages. It is used to maintain the [f-droid.org application repository](https://f-droid.org/packages). These same tools can be used to create additional or alternative repositories for publishing, or to assist in creating, testing and submitting metadata to the f-droid.org repository, also known as [_fdroiddata_](https://gitlab.com/fdroid/fdroiddata). For documentation, please see . In the beginning, _fdroidserver_ was the complete server-side setup that ran f-droid.org. Since then, the website and other parts have been split out into their own projects. The name for this suite of tooling has stayed _fdroidserver_ even though it no longer contains any proper server component. ## Installing There are many ways to install _fdroidserver_, including using a range of package managers. All of the options are documented on the website: https://f-droid.org/docs/Installing_the_Server_and_Repo_Tools ## Releases The production setup of _fdroidserver_ for f-droid.org is run directly from the _master_ branch. This is put into production on an schedule (currently weekly). So development and testing happens in the branches. We track branches using merge requests. Therefore, there are many WIP and long-lived merge requests. There are also stable releases of _fdroidserver_. This is mostly intended for running custom repositories, where the build process is separate. It can also be useful as a simple way to get started contributing packages to _fdroiddata_, since the stable releases are available in package managers. ## Tests To run the full test suite: tests/run-tests To run the tests for individual Python modules, see the `tests/test_*.py` files, e.g.: python -m unittest tests/test_metadata.py It is also possible to run individual tests: python -m unittest tests.test_metadata.MetadataTest.test_rewrite_yaml_special_build_params There is a growing test suite that has good coverage on a number of key parts of this code base. It does not yet cover all the code, and there are some parts where the technical debt makes it difficult to write unit tests. New tests should be standard Python _unittest_ test cases. Whenever possible, the old tests written in _bash_ in _tests/run-tests_ should be ported to Python. This test suite has built over time a bit haphazardly, so it is not as clean, organized, or complete as it could be. We welcome contributions. The goal is to move towards standard Python testing patterns and to expand the unit test coverage. Before rearchitecting any parts of it, be sure to [contact us](https://f-droid.org/about) to discuss the changes beforehand. ### Additional tests for different linux distributions These tests are also run on various configurations through GitLab CI. This is only enabled for `master@fdroid/fdroidserver` because it takes longer to complete than the regular CI tests. Most of the time you won't need to worry about them, but sometimes it might make sense to also run them for your merge request. In that case you need to remove [these lines from .gitlab-ci.yml](https://gitlab.com/fdroid/fdroidserver/-/blob/0124b9dde99f9cab19c034cbc7d8cc6005a99b48/.gitlab-ci.yml#L90-91) and push this to a new branch of your fork. Alternatively [run them locally](https://docs.gitlab.com/runner/commands/README.html#gitlab-runner-exec) like this: `gitlab-runner exec docker ubuntu_lts` ## Documentation The API documentation based on the docstrings gets automatically published [here](https://fdroid.gitlab.io/fdroidserver) on every commit on the `master` branch. It can be built locally via ```bash pip install -e .[docs] cd docs sphinx-apidoc -o ./source ../fdroidserver -M -e sphinx-autogen -o generated source/*.rst make html ``` To additionally lint the code call ```bash pydocstyle fdroidserver --count ``` When writing docstrings you should follow the [numpy style guide](https://numpydoc.readthedocs.io/en/latest/format.html). ## Translation Everything can be translated. See [Translation and Localization](https://f-droid.org/docs/Translation_and_Localization) for more info.
[![](https://hosted.weblate.org/widgets/f-droid/-/287x66-white.png)](https://hosted.weblate.org/engage/f-droid)
View translation status for all languages. [![](https://hosted.weblate.org/widgets/f-droid/-/fdroidserver/multi-auto.svg)](https://hosted.weblate.org/engage/f-droid/?utm_source=widget)
././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2241864 fdroidserver-2.4.0/buildserver/0000755000175000017500000000000014770510164015252 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/buildserver/.gitignore0000664000175000017500000000005014717152067017244 0ustar00hanshans.vagrant up.log cache/ Vagrantfile.yaml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898787.0 fdroidserver-2.4.0/buildserver/Dockerfile0000644000175000017500000000463614770503143017254 0ustar00hanshans FROM debian:bookworm ENV LANG=C.UTF-8 \ DEBIAN_FRONTEND=noninteractive RUN echo Etc/UTC > /etc/timezone \ && echo 'Acquire::Retries "20";' \ 'APT::Get::Assume-Yes "true";' \ 'APT::Install-Recommends "0";' \ 'APT::Install-Suggests "0";' \ 'Dpkg::Use-Pty "0";' \ 'quiet "1";' \ >> /etc/apt/apt.conf.d/99gitlab # provision-apt-proxy was deliberately omitted, its not relevant in Docker COPY provision-android-ndk \ provision-android-sdk \ provision-apt-get-install \ provision-buildserverid \ provision-gradle \ setup-env-vars \ /opt/buildserver/ ARG GIT_REV_PARSE_HEAD=unspecified LABEL org.opencontainers.image.revision=$GIT_REV_PARSE_HEAD # setup 'vagrant' user for compatibility RUN useradd --create-home -s /bin/bash vagrant && echo -n 'vagrant:vagrant' | chpasswd # The provision scripts must be run in the same order as in Vagrantfile # - vagrant needs openssh-client iproute2 ssh sudo # - ansible needs python3 # # Debian Docker images will soon default to HTTPS for apt sources, so force it. # https://github.com/debuerreotype/docker-debian-artifacts/issues/15 # # Ensure fdroidserver's dependencies are marked manual before purging # unneeded packages, otherwise, all its dependencies get purged. RUN printf "path-exclude=/usr/share/locale/*\npath-exclude=/usr/share/man/*\npath-exclude=/usr/share/doc/*\npath-include=/usr/share/doc/*/copyright\n" >/etc/dpkg/dpkg.cfg.d/01_nodoc \ && mkdir -p /usr/share/man/man1 \ && apt-get update \ && apt-get install ca-certificates \ && sed -i 's,http:,https:,' /etc/apt/sources.list.d/debian.sources \ && apt-get upgrade \ && apt-get dist-upgrade \ && apt-get install openssh-client iproute2 python3 openssh-server sudo \ && bash /opt/buildserver/setup-env-vars /opt/android-sdk \ && . /etc/profile.d/bsenv.sh \ && bash /opt/buildserver/provision-apt-get-install https://deb.debian.org/debian \ && bash /opt/buildserver/provision-android-sdk "tools;25.2.5" \ && bash /opt/buildserver/provision-android-ndk /opt/android-sdk/ndk \ && bash /opt/buildserver/provision-gradle \ && bash /opt/buildserver/provision-buildserverid $GIT_REV_PARSE_HEAD \ && rm -rf /vagrant/cache \ && apt-get autoremove --purge \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* # Vagrant sudo setup for compatibility RUN echo 'vagrant ALL = NOPASSWD: ALL' > /etc/sudoers.d/vagrant \ && chmod 440 /etc/sudoers.d/vagrant \ && sed -i -e 's/Defaults.*requiretty/#&/' /etc/sudoers ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742812298.0 fdroidserver-2.4.0/buildserver/Vagrantfile0000644000175000017500000000753414770232212017443 0ustar00hanshansrequire 'yaml' require 'pathname' require 'fileutils' configfile = { 'boot_timeout' => 600, 'cachedir' => File.join(ENV['HOME'], '.cache', 'fdroidserver'), 'cpus' => 1, 'debian_mirror' => 'https://deb.debian.org/debian/', 'hwvirtex' => 'on', 'memory' => 2048, 'vm_provider' => 'virtualbox', } srvpath = Pathname.new(File.dirname(__FILE__)).realpath configpath = File.join(srvpath, "/Vagrantfile.yaml") if File.exist? configpath c = YAML.load_file(configpath) if c and not c.empty? c.each do |k,v| configfile[k] = v end end else puts "Copying example file to #{configpath}" FileUtils.cp('../examples/Vagrantfile.yaml', configpath) end Vagrant.configure("2") do |config| if Vagrant.has_plugin?("vagrant-cachier") config.cache.scope = :box config.cache.auto_detect = false config.cache.enable :apt config.cache.enable :chef end config.vm.box = "debian/bookworm64" if not configfile.has_key? "vm_provider" or configfile["vm_provider"] == "virtualbox" # default to VirtualBox if not set config.vm.provider "virtualbox" do |v| v.customize ["modifyvm", :id, "--memory", configfile['memory']] v.customize ["modifyvm", :id, "--cpus", configfile['cpus']] v.customize ["modifyvm", :id, "--hwvirtex", configfile['hwvirtex']] end synced_folder_type = 'virtualbox' elsif configfile["vm_provider"] == "libvirt" # use KVM/QEMU if this is running in KVM/QEMU config.vm.provider :libvirt do |libvirt| libvirt.driver = configfile["hwvirtex"] == "on" ? "kvm" : "qemu" libvirt.host = "localhost" libvirt.uri = "qemu:///system" libvirt.cpus = configfile["cpus"] libvirt.memory = configfile["memory"] # Debian Vagrant image is only 20G, so allocate more libvirt.machine_virtual_size = 1024 if configfile.has_key? "libvirt_disk_bus" libvirt.disk_bus = configfile["libvirt_disk_bus"] end if configfile.has_key? "libvirt_nic_model_type" libvirt.nic_model_type = configfile["libvirt_nic_model_type"] end end if configfile.has_key? "synced_folder_type" synced_folder_type = configfile["synced_folder_type"] else synced_folder_type = '9p' end config.vm.synced_folder './', '/vagrant', type: synced_folder_type, SharedFoldersEnableSymlinksCreate: false else abort("No supported VM Provider found, set vm_provider in Vagrantfile.yaml!") end config.vm.boot_timeout = configfile['boot_timeout'] if configfile.has_key? "aptproxy" config.vm.provision :shell, path: "provision-apt-proxy", args: [configfile["aptproxy"]] end config.vm.synced_folder configfile["cachedir"], '/vagrant/cache', create: true, type: synced_folder_type # Make sure dir exists to mount to, since buildserver/ is # automatically mounted as /vagrant in the guest VM. This is more # necessary with 9p synced folders Dir.mkdir('cache') unless File.exist?('cache') # Root partition needs to be resized to the new allocated space config.vm.provision "shell", inline: <<-SHELL growpart -v -u auto /dev/vda 1 resize2fs /dev/vda1 SHELL config.vm.provision "shell", name: "setup-env-vars", path: "setup-env-vars", args: ["/opt/android-sdk"] config.vm.provision "shell", name: "apt-get-install", path: "provision-apt-get-install", args: [configfile['debian_mirror']] config.vm.provision "shell", name: "android-sdk", path: "provision-android-sdk" config.vm.provision "shell", name: "android-ndk", path: "provision-android-ndk", args: ["/opt/android-sdk/ndk"] config.vm.provision "shell", name: "gradle", path: "provision-gradle" config.vm.provision "shell", name: "disable-analytics", path: "provision-disable-analytics" config.vm.provision "shell", name: "buildserverid", path: "provision-buildserverid", args: [`git rev-parse HEAD`] end ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368093.0 fdroidserver-2.4.0/buildserver/config.buildserver.yml0000644000175000017500000000010414743421035021560 0ustar00hanshanssdk_path: /opt/android-sdk gradle_version_dir: /opt/gradle/versions ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368093.0 fdroidserver-2.4.0/buildserver/provision-android-ndk0000644000175000017500000000130714743421035021414 0ustar00hanshans#!/bin/bash # # $1 is the root dir to install the NDKs into # $2 and after are the NDK releases to install echo $0 set -e set -x NDK_BASE=$1 shift test -e $NDK_BASE || mkdir -p $NDK_BASE cd $NDK_BASE for version in $@; do if [ ! -e ${NDK_BASE}/${version} ]; then unzip /vagrant/cache/android-ndk-${version}-linux*.zip > /dev/null mv android-ndk-${version} \ `sed -En 's,^Pkg.Revision *= *(.+),\1,p' android-ndk-${version}/source.properties` fi done # allow gradle/etc to install missing NDK versions chgrp vagrant $NDK_BASE chmod g+w $NDK_BASE # ensure all users can read and execute the NDK chmod -R a+rX $NDK_BASE/ find $NDK_BASE/ -type f -executable -exec chmod a+x -- {} + ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/buildserver/provision-android-sdk0000644000175000017500000001070314766514130021425 0ustar00hanshans#!/bin/bash echo $0 set -e set -x if [ -z $ANDROID_HOME ]; then echo "ANDROID_HOME env var must be set!" exit 1 fi # disable the repositories of proprietary stuff disabled=" @version@=1 @disabled@https\://dl.google.com/android/repository/extras/intel/addon.xml=disabled @disabled@https\://dl.google.com/android/repository/glass/addon.xml=disabled @disabled@https\://dl.google.com/android/repository/sys-img/android/sys-img.xml=disabled @disabled@https\://dl.google.com/android/repository/sys-img/android-tv/sys-img.xml=disabled @disabled@https\://dl.google.com/android/repository/sys-img/android-wear/sys-img.xml=disabled @disabled@https\://dl.google.com/android/repository/sys-img/google_apis/sys-img.xml=disabled " test -d ${HOME}/.android || mkdir ${HOME}/.android # there are currently zero user repos echo 'count=0' > ${HOME}/.android/repositories.cfg for line in $disabled; do echo $line >> ${HOME}/.android/sites-settings.cfg done # Include old makebuildserver cache that is a Vagrant synced_folder # for sdkmanager to use. cachedir=$HOME/.cache/sdkmanager mkdir -p $cachedir pushd $cachedir for f in /vagrant/cache/*.zip; do test -e $f && ln -s $f done popd # TODO do not preinstall 'tools' or 'platform-tools' at all, app builds don't need them packages=" tools;25.2.5 platform-tools build-tools;19.1.0 build-tools;20.0.0 build-tools;21.1.2 build-tools;22.0.1 build-tools;23.0.1 build-tools;23.0.2 build-tools;23.0.3 build-tools;24.0.0 build-tools;24.0.1 build-tools;24.0.2 build-tools;24.0.3 build-tools;25.0.0 build-tools;25.0.1 build-tools;25.0.2 build-tools;25.0.3 build-tools;26.0.0 build-tools;26.0.1 build-tools;26.0.2 build-tools;26.0.3 build-tools;27.0.0 build-tools;27.0.1 build-tools;27.0.2 build-tools;27.0.3 build-tools;28.0.0 build-tools;28.0.1 build-tools;28.0.2 build-tools;28.0.3 build-tools;29.0.2 build-tools;29.0.3 build-tools;30.0.0 build-tools;30.0.1 build-tools;30.0.2 build-tools;30.0.3 build-tools;31.0.0 build-tools;32.0.0 build-tools;33.0.0 platforms;android-10 platforms;android-11 platforms;android-12 platforms;android-13 platforms;android-14 platforms;android-15 platforms;android-16 platforms;android-17 platforms;android-18 platforms;android-19 platforms;android-20 platforms;android-21 platforms;android-22 platforms;android-23 platforms;android-24 platforms;android-25 platforms;android-26 platforms;android-27 platforms;android-28 platforms;android-29 platforms;android-30 platforms;android-31 platforms;android-32 platforms;android-33 " if [ $# -gt 0 ]; then echo found args packages=$@ fi # temporary test of whether this script ran. It will change once # 'tools' is no longer installed by default. if [ ! -x $ANDROID_HOME/tools/bin/sdkmanager ]; then mkdir -p ${ANDROID_HOME}/ sdkmanager $packages fi # this hacked cache should not end up in the Vagrant box or Docker image rm -rf $cachedir mkdir -p $ANDROID_HOME/licenses/ cat << EOF > $ANDROID_HOME/licenses/android-sdk-license 8933bad161af4178b1185d1a37fbf41ea5269c55 d56f5187479451eabf01fb78af6dfcb131a6481e 24333f8a63b6825ea9c5514f83c2829b004d1fee EOF cat < $ANDROID_HOME/licenses/android-sdk-preview-license 84831b9409646a918e30573bab4c9c91346d8abd EOF cat < $ANDROID_HOME/licenses/android-sdk-preview-license-old 79120722343a6f314e0719f863036c702b0e6b2a 84831b9409646a918e30573bab4c9c91346d8abd EOF cat < $ANDROID_HOME/licenses/intel-android-extra-license d975f751698a77b662f1254ddbeed3901e976f5a EOF chmod a+X $(dirname $ANDROID_HOME/) chmod -R a+rX $ANDROID_HOME/ chgrp vagrant $ANDROID_HOME chmod g+w $ANDROID_HOME find $ANDROID_HOME/ -type f -executable -print0 | xargs -0 chmod a+x # allow gradle to install newer build-tools and platforms mkdir -p $ANDROID_HOME/{build-tools,platforms} chgrp vagrant $ANDROID_HOME/{build-tools,platforms} chmod g+w $ANDROID_HOME/{build-tools,platforms} # allow gradle/sdkmanager to install into the new m2repository test -d $ANDROID_HOME/extras/m2repository || mkdir -p $ANDROID_HOME/extras/m2repository find $ANDROID_HOME/extras/m2repository -type d | xargs chgrp vagrant find $ANDROID_HOME/extras/m2repository -type d | xargs chmod g+w # allow gradle/sdkmanager to install extras;android;m2repository test -d $ANDROID_HOME/extras/android || mkdir -p $ANDROID_HOME/extras/android find $ANDROID_HOME/extras/android -type d | xargs chgrp vagrant find $ANDROID_HOME/extras/android -type d | xargs chmod g+w ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742812298.0 fdroidserver-2.4.0/buildserver/provision-apt-get-install0000644000175000017500000000555114770232212022231 0ustar00hanshans#!/bin/bash echo $0 set -e set -x debian_mirror=$1 export DEBIAN_FRONTEND=noninteractive printf 'APT::Install-Recommends "0";\nAPT::Install-Suggests "0";\n' \ > /etc/apt/apt.conf.d/99no-install-recommends printf 'Acquire::Retries "20";\n' \ > /etc/apt/apt.conf.d/99acquire-retries cat < /etc/apt/apt.conf.d/99no-auto-updates APT::Periodic::Enable "0"; APT::Periodic::Update-Package-Lists "0"; APT::Periodic::Unattended-Upgrade "0"; EOF printf 'APT::Get::Assume-Yes "true";\n' \ > /etc/apt/apt.conf.d/99assumeyes cat < /etc/apt/apt.conf.d/99quiet Dpkg::Use-Pty "0"; quiet "1"; EOF cat < /etc/apt/apt.conf.d/99confdef Dpkg::Options { "--force-confdef"; }; EOF echo "man-db man-db/auto-update boolean false" | debconf-set-selections if echo $debian_mirror | grep '^https' 2>&1 > /dev/null; then apt-get update || apt-get update apt-get install ca-certificates fi cat << EOF > /etc/apt/sources.list deb ${debian_mirror} bookworm main deb https://security.debian.org/debian-security bookworm-security main deb ${debian_mirror} bookworm-updates main EOF echo "deb ${debian_mirror} bookworm-backports main" > /etc/apt/sources.list.d/backports.list apt-get update || apt-get update # purge things that might come from the base box, but we don't want # https://salsa.debian.org/cloud-team/debian-vagrant-images/-/tree/master/config_space/package_config # cat config_space/package_config/* | sort -u | grep -v '[A-Z#]' purge=" apt-listchanges apt-utils bash-completion bind9-* bsdextrautils bzip2 chrony cloud-utils cron cron-daemon-common dbus debconf-i18n debian-faq dmidecode doc-debian fdisk file groff-base inetutils-telnet krb5-locales less locales logrotate lsof manpages nano ncurses-term netcat-traditional pciutils reportbug rsyslog tasksel traceroute unattended-upgrades usrmerge vim-* wamerican wget whiptail xz-utils " # clean up files packages to be purged, then purge the packages rm -rf /var/run/dbus /var/log/unattended-upgrades apt-get purge $purge apt-get upgrade --download-only apt-get upgrade # again after upgrade in case of keyring changes apt-get update || apt-get update packages=" apksigner default-jdk-headless default-jre-headless curl dexdump fdroidserver git-svn gnupg mercurial patch python3-magic python3-packaging rsync sdkmanager/bookworm-backports sudo unzip " apt-get install $packages --download-only apt-get install $packages # fdroidserver comes from git, it was installed just for dependencies apt-mark manual `apt-cache depends fdroidserver | sed -nE 's,^[| ]*Depends: ([a-z0-9 -]+),\1,p'` apt-get purge fdroidserver # clean up things that will become outdated anyway apt-get autoremove --purge apt-get clean rm -rf /var/lib/apt/lists/* highestjava=`update-java-alternatives --list | sort -n | tail -1 | cut -d ' ' -f 1` update-java-alternatives --set $highestjava ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/buildserver/provision-apt-proxy0000644000175000017500000000045214717152067021174 0ustar00hanshans#!/bin/bash echo $0 set -e rm -f /etc/apt/apt.conf.d/02proxy echo "Acquire::ftp::Proxy \"$1\";" >> /etc/apt/apt.conf.d/02proxy echo "Acquire::http::Proxy \"$1\";" >> /etc/apt/apt.conf.d/02proxy echo "Acquire::https::Proxy \"$1\";" >> /etc/apt/apt.conf.d/02proxy apt-get update || apt-get update ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368093.0 fdroidserver-2.4.0/buildserver/provision-buildserverid0000644000175000017500000000031614743421035022064 0ustar00hanshans#!/bin/bash -e test -n "$1" echo "Writing buildserver ID ...ID is $1" set -x echo "$1" > /home/vagrant/buildserverid # sync data before we halt() the machine, we had an empty buildserverid otherwise sync ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742812298.0 fdroidserver-2.4.0/buildserver/provision-disable-analytics0000644000175000017500000000035714770232212022613 0ustar00hanshans#!/bin/bash set -ex # Flutter # https://github.com/flutter/flutter/issues/73657 flutter_conf=/home/vagrant/.flutter cat < $flutter_conf { "enabled": false } EOF chown -R vagrant:vagrant $flutter_conf chmod -R 0644 $flutter_conf ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742814793.0 fdroidserver-2.4.0/buildserver/provision-gradle0000644000175000017500000000266714770237111020472 0ustar00hanshans#!/bin/bash set -ex # version compare magic vergte() { printf '%s\n%s' "$1" "$2" | sort -C -V -r } test -e /opt/gradle/versions || mkdir -p /opt/gradle/versions cd /opt/gradle/versions glob="/vagrant/cache/gradle-*.zip" if compgen -G $glob; then # test if glob matches anything f=$(ls -1 --sort=version --group-directories-first $glob | tail -1) ver=`echo $f | sed 's,.*gradle-\([0-9][0-9.]*\).*\.zip,\1,'` # only use versions greater or equal 2.2.1 if vergte $ver 2.2.1 && [ ! -d /opt/gradle/versions/${ver} ]; then unzip -qq $f mv gradle-${ver} /opt/gradle/versions/${ver} fi fi chmod -R a+rX /opt/gradle test -e /opt/gradle/bin || mkdir -p /opt/gradle/bin ln -fs /home/vagrant/fdroidserver/gradlew-fdroid /opt/gradle/bin/gradle chown -h vagrant:vagrant /opt/gradle/bin/gradle chown vagrant:vagrant /opt/gradle/versions chmod 0755 /opt/gradle/versions GRADLE_HOME=/home/vagrant/.gradle test -d $GRADLE_HOME/ || mkdir $GRADLE_HOME/ cat < $GRADLE_HOME/gradle.properties # builds are not reused, so the daemon is a waste of time org.gradle.daemon=false # set network timeouts to 10 minutes # https://github.com/gradle/gradle/pull/3371/files systemProp.http.connectionTimeout=600000 systemProp.http.socketTimeout=600000 systemProp.org.gradle.internal.http.connectionTimeout=600000 systemProp.org.gradle.internal.http.socketTimeout=600000 EOF chown -R vagrant:vagrant $GRADLE_HOME/ chmod -R a+rX $GRADLE_HOME/ ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368093.0 fdroidserver-2.4.0/buildserver/setup-env-vars0000644000175000017500000000132314743421035020071 0ustar00hanshans#!/bin/sh # # sets up the environment vars needed by the build process set -e set -x bsenv=/etc/profile.d/bsenv.sh echo "# generated on "`date` > $bsenv echo export ANDROID_HOME=$1 >> $bsenv echo 'export PATH=$PATH:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools:/opt/gradle/bin' >> $bsenv echo "export DEBIAN_FRONTEND=noninteractive" >> $bsenv echo 'export home_vagrant=/home/vagrant' >> $bsenv echo 'export fdroidserver=$home_vagrant/fdroidserver' >> $bsenv echo 'export LC_ALL=C.UTF-8' >> $bsenv chmod 0644 $bsenv # make sure that SSH never hangs at a password or key prompt mkdir -p /etc/ssh/ssh_config.d/ cat << EOF >> /etc/ssh/ssh_config.d/fdroid Host * StrictHostKeyChecking yes BatchMode yes EOF ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2241864 fdroidserver-2.4.0/completion/0000755000175000017500000000000014770510164015075 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742812298.0 fdroidserver-2.4.0/completion/bash-completion0000644000175000017500000001430214770232212020077 0ustar00hanshans# fdroid(1) completion -*- shell-script -*- # # bash-completion - part of the FDroid server tools # # Copyright (C) 2013-2017 Hans-Christoph Steiner # Copyright (C) 2013, 2014 Daniel Martí # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . __fdroid_init() { COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" (( $# >= 1 )) && __complete_${1} } __get_appid() { files=( metadata/*.yml ) files=( ${files[@]#metadata/} ) files=${files[@]%.yml} echo "$files" } __package() { files="$(__get_appid)" COMPREPLY=( $( compgen -W "$files" -- $cur ) ) } __apk_package() { files=( ${1}/*.apk ) [ -f "${files[0]}" ] || return files=( ${files[@]#*/} ) files=${files[@]%_*} COMPREPLY=( $( compgen -W "$files" -- $cur ) ) } __apk_vercode() { local p=${cur:0:-1} files=( ${1}/${p}_*.apk ) [ -f "${files[0]}" ] || return files=( ${files[@]#*_} ) files=${files[@]%.apk} COMPREPLY=( $( compgen -P "${p}:" -W "$files" -- $cur ) ) } __vercode() { if [ $prev = ":" ]; then appid="${COMP_WORDS[COMP_CWORD-2]}" elif [ $cur = ":" ]; then appid=$prev cur="" fi versionCodes=`sed -En 's,^ +versionCode: +([0-9]+) *$,\1,p' metadata/${appid}.yml` COMPREPLY=( $( compgen -W "$versionCodes" -- $cur ) ) } __complete_options() { case "${cur}" in --*) COMPREPLY=( $( compgen -W "--help --version ${lopts}" -- $cur ) ) return 0;; *) COMPREPLY=( $( compgen -W "-h ${opts} --help --version ${lopts}" -- $cur ) ) return 0;; esac } __complete_build() { opts="-v -q -l -s -t -f -a" lopts="--verbose --quiet --latest --stop --test --server --skip-scan --scan-binary --no-tarball --force --all --no-refresh" case "${prev}" in :) __vercode return 0;; esac case "${cur}" in -*) __complete_options return 0;; :) __vercode return 0;; *) __package return 0;; esac } __complete_gpgsign() { opts="-v -q" lopts="--verbose --quiet" __complete_options } __complete_install() { opts="-v -q -a -p -n -y" lopts="--verbose --quiet --all --color --no-color --privacy-mode --no-privacy-mode --no --yes" case "${cur}" in -*) __complete_options return 0;; *:) __apk_vercode repo return 0;; *) __apk_package repo return 0;; esac } __complete_update() { opts="-c -v -q -i -I -e" lopts="--create-metadata --verbose --quiet --icons --pretty --clean --delete-unknown --nosign --rename-apks --use-date-from-apk" case "${prev}" in -e|--editor) _filedir return 0;; esac __complete_options } __complete_publish() { opts="-v -q" lopts="--verbose --quiet" case "${cur}" in -*) __complete_options return 0;; *:) __apk_vercode unsigned return 0;; *) __apk_package unsigned return 0;; esac } __complete_checkupdates() { opts="-v -q" lopts="--verbose --quiet --auto --autoonly --commit --allow-dirty" case "${cur}" in -*) __complete_options return 0;; *) __package return 0;; esac } __complete_import() { opts="-c -h -l -q -s -u -v -W" lopts="--categories --license --quiet --rev --subdir --url" case "${prev}" in -c|-l|-s|-u|--categories|--license|--quiet|--rev|--subdir|--url) return 0;; -W) COMPREPLY=( $( compgen -W "error warn ignore" -- $cur ) ) return 0;; esac __complete_options } __complete_readmeta() { opts="-v -q" lopts="--verbose --quiet" __complete_options } __complete_rewritemeta() { opts="-v -q -l" lopts="--verbose --quiet --list" case "${cur}" in -*) __complete_options return 0;; *) __package return 0;; esac } __complete_lint() { opts="-v -q -f" lopts="--verbose --quiet --force-yamllint --format" case "${cur}" in -*) __complete_options return 0;; *) __package return 0;; esac } __complete_scanner() { opts="-v -q" lopts="--verbose --quiet" case "${cur}" in -*) __complete_options return 0;; *:) __vercode return 0;; *) __package return 0;; esac } __complete_verify() { opts="-v -q -p" lopts="--verbose --quiet" case "${cur}" in -*) __complete_options return 0;; *:) __vercode return 0;; *) __package return 0;; esac } __complete_btlog() { opts="-u" lopts="--git-remote --git-repo --url" __complete_options } __complete_mirror() { opts="-v" lopts="--all --archive --build-logs --color --no-color --pgp-signatures --src-tarballs --output-dir" __complete_options } __complete_nightly() { opts="-v -q" lopts="--show-secret-var --archive-older" __complete_options } __complete_deploy() { opts="-i -v -q" lopts="--identity-file --local-copy-dir --sync-from-local-copy-dir --verbose --quiet --no-checksum --no-keep-git-mirror-archive" __complete_options } __complete_signatures() { opts="-v -q" lopts="--verbose --color --no-color --no-check-https" case "${cur}" in -*) __complete_options return 0;; esac _filedir 'apk' return 0 } __complete_signindex() { opts="-v -q" lopts="--verbose" __complete_options } __complete_init() { opts="-v -q -d" lopts="--verbose --quiet --distinguished-name --keystore --repo-keyalias --android-home --no-prompt --color --no-color" __complete_options } __cmds=" \ btlog \ build \ checkupdates \ deploy \ gpgsign \ import \ init \ install \ lint \ mirror \ nightly \ publish \ readmeta \ rewritemeta \ scanner \ signatures \ signindex \ update \ verify \ " for c in $__cmds; do eval "_fdroid_${c} () { local cur prev opts lopts __fdroid_init ${c} }" done _fdroid() { local cmd cmd=${COMP_WORDS[1]} [[ $__cmds == *\ $cmd\ * ]] && _fdroid_${cmd} || { (($COMP_CWORD == 1)) && COMPREPLY=( $( compgen -W "${__cmds}" -- $cmd ) ) } } complete -F _fdroid fdroid return 0 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2281864 fdroidserver-2.4.0/dev/0000755000175000017500000000000014770510164013502 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742812298.0 fdroidserver-2.4.0/dev/fdroid_scan-binary.py0000644000175000017500000000167714770232212017617 0ustar00hanshans#!/usr/bin/env python3 # # an fdroid plugin for setting up srclibs # # The 'fdroid build' gitlab-ci job uses --on-server, which does not # set up the srclibs. This plugin does the missing setup. import glob import os from argparse import ArgumentParser from fdroidserver import _, common, scanner fdroid_summary = 'Run scanner.scan_binary on APKs' def main(): parser = ArgumentParser() common.setup_global_opts(parser) parser.add_argument("APK", nargs='*', help=_("Path to a signed or unsigned APK.")) options = common.parse_args(parser) common.read_config() if options.APK: apks = options.APK else: apks = glob.glob(os.path.join('unsigned', '*.apk')) errors = 0 for apk in apks: print('Scanning', apk, '...') if scanner.scan_binary(apk): print("ERROR: Found blocklisted packages in:", apk) errors += 1 exit(errors) if __name__ == "__main__": main() ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2281864 fdroidserver-2.4.0/docs/0000755000175000017500000000000014770510164013654 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368093.0 fdroidserver-2.4.0/docs/Makefile0000644000175000017500000000117614743421035015317 0ustar00hanshans# Minimal makefile for Sphinx documentation # # You can set these variables from the command line, and also # from the environment for the first two. SPHINXOPTS ?= SPHINXBUILD ?= sphinx-build SOURCEDIR = source BUILDDIR = build # Put it first so that "make" without argument is like "make help". help: @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) .PHONY: help Makefile # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368093.0 fdroidserver-2.4.0/docs/make.bat0000644000175000017500000000143714743421035015264 0ustar00hanshans@ECHO OFF pushd %~dp0 REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set SOURCEDIR=source set BUILDDIR=build if "%1" == "" goto help %SPHINXBUILD% >NUL 2>NUL if errorlevel 9009 ( echo. echo.The 'sphinx-build' command was not found. Make sure you have Sphinx echo.installed, then set the SPHINXBUILD environment variable to point echo.to the full path of the 'sphinx-build' executable. Alternatively you echo.may add the Sphinx directory to PATH. echo. echo.If you don't have Sphinx installed, grab it from echo.http://sphinx-doc.org/ exit /b 1 ) %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% goto end :help %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% :end popd ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2281864 fdroidserver-2.4.0/docs/source/0000755000175000017500000000000014770510164015154 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/docs/source/conf.py0000644000175000017500000000465514766514130016467 0ustar00hanshans# Configuration file for the Sphinx documentation builder. # # This file only contains a selection of the most common options. For a full # list see the documentation: # https://www.sphinx-doc.org/en/master/usage/configuration.html # -- Path setup -------------------------------------------------------------- # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # import os import sys sys.path.insert(0, os.path.abspath('../../fdroidserver')) # -- Project information ----------------------------------------------------- project = 'fdroidserver' copyright = '2021, The F-Droid Project' author = 'The F-Droid Project' # -- General configuration --------------------------------------------------- # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ 'numpydoc', 'sphinx.ext.autodoc', 'sphinx.ext.autosummary', "sphinx.ext.intersphinx", ] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. exclude_patterns = [] # -- Options for HTML output ------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # html_theme = "pydata_sphinx_theme" html_theme_options = { "gitlab_url": "https://gitlab.com/fdroid/fdroidserver", "show_prev_next": False, "navbar_end": ["search-field.html", "navbar-icon-links.html"], } # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] html_sidebars = { "**": [], } #html_sidebars = { # '**': ['globaltoc.html', 'sourcelink.html', 'searchbox.html'], # 'using/windows': ['windowssidebar.html', 'searchbox.html'], #} html_split_index = True #numpydoc_validation_checks = {"all"} intersphinx_mapping = { "python": ("https://docs.python.org/3/", None), } ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368093.0 fdroidserver-2.4.0/docs/source/index.rst0000644000175000017500000000126414743421035017016 0ustar00hanshans.. fdroidserver documentation master file, created by sphinx-quickstart on Mon May 3 10:06:52 2021. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. Welcome to fdroidserver's documentation! ======================================== .. toctree:: :maxdepth: 2 :caption: Contents: These pages contain the autogenerated module docu based on the current `sources `_. Indices and tables ================== * Under :ref:`modindex` the different fdroidserver modules are listed. * In :ref:`genindex` you'll find all methods sorted alphabetically. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2281864 fdroidserver-2.4.0/examples/0000755000175000017500000000000014770510164014542 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/examples/Vagrantfile.yaml0000644000175000017500000000354414766514130017700 0ustar00hanshans--- # You may want to alter these before running ./makebuildserver # In the process of setting up the build server, many gigs of files # are downloaded (Android SDK components, gradle, etc). These are # cached so that they are not redownloaded each time. By default, # these are stored in ~/.cache/fdroidserver # # cachedir: buildserver/cache # To specify which Debian mirror the build server VM should use, by # default it uses http.debian.net, which auto-detects which is the # best mirror to use. # # debian_mirror: https://debian.osuosl.org/debian/ # The amount of RAM the build server will have (default: 2048) # memory: 3584 # The number of CPUs the build server will have # cpus: 1 # Debian package proxy server - if you have one # aptproxy: http://192.168.0.19:8000 # If this is running on an older machine or on a virtualized system, # it can run a lot slower. If the provisioning fails with a warning # about the timeout, extend the timeout here. (default: 600 seconds) # # boot_timeout: 1200 # By default, this whole process uses VirtualBox as the provider, but # QEMU+KVM is also supported via the libvirt plugin to vagrant. If # this is run within a KVM guest, then libvirt's QEMU+KVM will be used # automatically. It can also be manually enabled by uncommenting # below: # # vm_provider: libvirt # By default libvirt uses 'virtio' for both network and disk drivers. # Some systems (eg. nesting VMware ESXi) do not support virtio. As a # workaround for such rare cases, this setting allows to configure # KVM/libvirt to emulate hardware rather than using virtio. # # libvirt_disk_bus: sata # libvirt_nic_model_type: rtl8139 # Sometimes, it is not possible to use the 9p synced folder type with # libvirt, like if running a KVM buildserver instance inside of a # VMware ESXi guest. In that case, using NFS or another method is # required. # # synced_folder_type: nfs ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742400600.0 fdroidserver-2.4.0/examples/config.yml0000644000175000017500000004401514766566130016547 0ustar00hanshans--- # Copy this file to config.yml, then amend the settings below according to # your system configuration. # Custom path to the Android SDK, defaults to $ANDROID_HOME # sdk_path: $ANDROID_HOME # Paths to installed versions of the Android NDK. This will be # automatically filled out from well known sources like # $ANDROID_HOME/ndk-bundle and $ANDROID_HOME/ndk/*. If a required # version is missing in the buildserver VM, it will be automatically # downloaded and installed into the standard $ANDROID_HOME/ndk/ # directory. Manually setting it here will override the auto-detected # values. The keys can either be the "release" (e.g. r21e) or the # "revision" (e.g. 21.4.7075529). # # ndk_paths: # r10e: $ANDROID_HOME/android-ndk-r10e # r17: "" # 21.4.7075529: ~/Android/Ndk # r22b: null # Directory to store downloaded tools in (i.e. gradle versions) # By default, these are stored in ~/.cache/fdroidserver # cachedir: cache # Specify paths to each major Java release that you want to support # java_paths: # 8: /usr/lib/jvm/java-8-openjdk # Command or path to binary for running Ant # ant: ant # Command or path to binary for running maven 3 # mvn3: mvn # Command or path to binary for running Gradle # Defaults to using an internal gradle wrapper (gradlew-fdroid). # gradle: gradle # Always scan the APKs produced by `fdroid build` for known non-free classes # scan_binary: true # Set the maximum age (in days) of an index that a client should accept from # this repo. Setting it to 0 or not setting it at all disables this # functionality. If you do set this to a non-zero value, you need to ensure # that your index is updated much more frequently than the specified interval. # The same policy is applied to the archive repo, if there is one. # repo_maxage: 0 # Canonical URL of the repositoy, needs to end in /repo. Is is used to identity # the repo in the client, as well. # repo_url: https://MyFirstFDroidRepo.org/fdroid/repo # # Base URL for per-package pages on the website of this repo, # i.e. https://f-droid.org/packages// This should be accessible # with a browser. Setting it to null or not setting this disables the # feature. # repo_web_base_url: https://MyFirstFDroidRepo.org/packages/ # # repo_name: My First F-Droid Repo Demo # repo_description: >- # This is a repository of apps to be used with F-Droid. Applications # in this repository are either official binaries built by the # original application developers, or are binaries built from source # by the admin of f-droid.org using the tools on # https://gitlab.com/fdroid. # As above, but for the archive repo. # # archive_url: https://f-droid.org/archive # archive_web_base_url: # archive_name: My First F-Droid Archive Demo # archive_description: >- # The repository of older versions of packages from the main demo repository. # archive_older sets the number of versions kept in the main repo, with all # older ones going to the archive. Set it to 0, and there will be no archive # repository, and no need to define the other archive_ values. # # archive_older: 3 # The repo's icon defaults to a file called 'icon.png' in the 'icons' # folder for each section, e.g. repo/icons/icon.png and # archive/icons/icon.png. To use a different filename for the icons, # set the filename here. You must still copy it into place in # repo/icons/ and/or archive/icons/. # # repo_icon: myicon.png # archive_icon: myicon.png # This allows a specific kind of insecure APK to be included in the # 'repo' section. Since April 2017, APK signatures that use MD5 are # no longer considered valid, jarsigner and apksigner will return an # error when verifying. `fdroid update` will move APKs with these # disabled signatures to the archive. This option stops that # behavior, and lets those APKs stay part of 'repo'. # # allow_disabled_algorithms: true # Normally, all apps are collected into a single app repository, like on # https://f-droid.org. For certain situations, it is better to make a repo # that is made up of APKs only from a single app. For example, an automated # build server that publishes nightly builds. # per_app_repos: true # `fdroid update` will create a link to the current version of a given app. # This provides a static path to the current APK. To disable the creation of # this link, uncomment this: # make_current_version_link: false # By default, the "current version" link will be based on the "Name" of the # app from the metadata. You can change it to use a different field from the # metadata here: # current_version_name_source: packageName # Optionally, override home directory for gpg # gpghome: /home/fdroid/somewhere/else/.gnupg # The ID of a GPG key for making detached signatures for APKs. Optional. # gpgkey: 1DBA2E89 # The key (from the keystore defined below) to be used for signing the # repository itself. This is the same name you would give to keytool or # jarsigner using -alias. (Not needed in an unsigned repository). # repo_keyalias: fdroidrepo # Optionally, the public key for the key defined by repo_keyalias above can # be specified here. There is no need to do this, as the public key can and # will be retrieved from the keystore when needed. However, specifying it # manually can allow some processing to take place without access to the # keystore. # repo_pubkey: ... # The keystore to use for release keys when building. This needs to be # somewhere safe and secure, and backed up! The best way to manage these # sensitive keys is to use a "smartcard" (aka Hardware Security Module). To # configure F-Droid to use a smartcard, set the keystore file using the keyword # "NONE" (i.e. keystore: "NONE"). That makes Java find the keystore on the # smartcard based on 'smartcardoptions' below. # keystore: ~/.local/share/fdroidserver/keystore.jks # You should not need to change these at all, unless you have a very # customized setup for using smartcards in Java with keytool/jarsigner # smartcardoptions: | # -storetype PKCS11 -providerName SunPKCS11-OpenSC # -providerClass sun.security.pkcs11.SunPKCS11 # -providerArg opensc-fdroid.cfg # The password for the keystore (at least 6 characters). If this password is # different than the keypass below, it can be OK to store the password in this # file for real use. But in general, sensitive passwords should not be stored # in text files! # keystorepass: password1 # The password for keys - the same is used for each auto-generated key as well # as for the repository key. You should not normally store this password in a # file since it is a sensitive password. # keypass: password2 # The distinguished name used for all keys. # keydname: CN=Birdman, OU=Cell, O=Alcatraz, L=Alcatraz, S=California, C=US # Use this to override the auto-generated key aliases with specific ones # for particular applications. Normally, just leave it empty. # # keyaliases: # com.example.app: example # # You can also force an app to use the same key alias as another one, using # the @ prefix. # # keyaliases: # com.example.another.plugin: "@com.example.another" # The full path to the root of the repository. It must be specified in # rsync/ssh format for a remote host/path. This is used for syncing a locally # generated repo to the server that is it hosted on. It must end in the # standard public repo name of "/fdroid", but can be in up to three levels of # sub-directories (i.e. /var/www/packagerepos/fdroid). You can include # multiple servers to sync to by wrapping the whole thing in {} or [], and # including the serverwebroot strings in a comma-separated list. # # serverwebroot: user@example:/var/www/fdroid # serverwebroot: # - foo.com:/usr/share/nginx/www/fdroid # - bar.info:/var/www/fdroid # # There is a special mode to only deploy the index file: # # serverwebroot: # - url: 'me@b.az:/srv/fdroid' # index_only: true # When running fdroid processes on a remote server, it is possible to # publish extra information about the status. Each fdroid sub-command # can create repo/status/running.json when it starts, then a # repo/status/.json when it completes. The builds logs # and other processes will also get published, if they are running in # a buildserver VM. The build logs name scheme is: # .../repo/$APPID_$VERCODE.log.gz. These files are also pushed to all # servers configured in 'serverwebroot'. # # deploy_process_logs: true # The full URL to a git remote repository. You can include # multiple servers to mirror to by adding strings to a YAML list or map. # Servers listed here will also be automatically inserted in the mirrors list. # # servergitmirrors: https://github.com/user/repo # servergitmirrors: # - https://github.com/user/repo # - https://gitlab.com/user/repo # # servergitmirrors: # - url: https://github.com/user/repo # - url: https://gitlab.com/user/repo # index_only: true # These settings allow using `fdroid deploy` for publishing APK files from # your repository to GitHub Releases. (You should also run `fdroid update` # every time before deploying to GitHub releases to update index files.) Here's # an example for this deployment automation: # https://github.com/f-droid/fdroidclient/releases/ # # Currently, versions which are assigned to a release channel (e.g. alpha or # beta releases) are ignored. # # In the example below, tokens are read from environment variables. Putting # tokens directly into the config file is also supported but discouraged. It is # highly recommended to use a "Fine-grained personal access token", which is # restricted to the minimum required permissions, which are: # * Metadata - read # * Contents - read/write # (https://github.com/settings/personal-access-tokens/new) # # github_token: {env: GITHUB_TOKEN} # github_releases: # - projectUrl: https://github.com/f-droid/fdroidclient # packageNames: # - org.fdroid.basic # - org.fdroid.fdroid # release_notes_prepend: | # Re-post of official F-Droid App release from https://f-droid.org # - projectUrl: https://github.com/example/app # packageNames: com.example.app # token: {env: GITHUB_TOKEN_EXAMPLE} # Most git hosting services have hard size limits for each git repo. # `fdroid deploy` will delete the git history when the git mirror repo # approaches this limit to ensure that the repo will still fit when # pushed. GitHub recommends 1GB, gitlab.com recommends 10GB. # # git_mirror_size_limit: 10GB # Any mirrors of this repo, for example all of the servers declared in # serverwebroot and all the servers declared in servergitmirrors, # will automatically be used by the client. If one # mirror is not working, then the client will try another. If the # client has Tor enabled, then the client will prefer mirrors with # .onion addresses. This base URL will be used for both the main repo # and the archive, if it is enabled. So these URLs should end in the # 'fdroid' base of the F-Droid part of the web server like serverwebroot. # # mirrors: # - https://foo.bar/fdroid # - http://foobarfoobarfoobar.onion/fdroid # # Or additional metadata can also be included by adding key/value pairs: # # mirrors: # - url: https://foo.bar/fdroid # countryCode: BA # - url: http://foobarfoobarfoobar.onion/fdroid # # The list of mirrors can also be maintained in config/mirrors.yml, a # standalone YAML file in the optional configuration directory. In # that case, mirrors: should be removed from this file (config.yml). # optionally specify which identity file to use when using rsync or git over SSH # # identity_file: ~/.ssh/fdroid_id_rsa # If you are running the repo signing process on a completely offline machine, # which provides the best security, then you can specify a folder to sync the # repo to when running `fdroid deploy`. This is most likely going to # be a USB thumb drive, SD Card, or some other kind of removable media. Make # sure it is mounted before running `fdroid deploy`. Using the # standard folder called 'fdroid' as the specified folder is recommended, like # with serverwebroot. # # local_copy_dir: /media/MyUSBThumbDrive/fdroid # If you are using local_copy_dir on an offline build/signing server, once the # thumb drive has been plugged into the online machine, it will need to be # synced to the copy on the online machine. To make that happen # automatically, set sync_from_local_copy_dir to True: # # sync_from_local_copy_dir: true # To upload the repo to an Amazon S3 bucket using `fdroid deploy' # . rclone, s3cmd and apache libcloud are the available options. # If rclone and s3cmd are not installed, apache libcloud is used. # To use apache libcloud, add the following options to this file # (config.yml) # # awsbucket: myawsfdroid # awsaccesskeyid: SEE0CHAITHEIMAUR2USA # awssecretkey: {env: awssecretkey} # # In case s3cmd is installed and rclone is not installed, # s3cmd will be the preferred sync option. # It will delete and recreate the whole fdroid directory each time. # To customize how s3cmd interacts with the cloud # provider, create a 's3cfg' file next to this file (config.yml), and # those settings will be used instead of any 'aws' variable below. # Secrets can be fetched from environment variables to ensure that # they are not leaked as part of this file. # # awsbucket: myawsfdroid # awsaccesskeyid: SEE0CHAITHEIMAUR2USA # awssecretkey: {env: awssecretkey} # # In case rclone is installed and s3cmd is not installed, # rclone will be the preferred sync option. # It will sync the local folders with remote folders without # deleting anything in one go. # To ensure success, install rclone as per # the instructions at https://rclone.org/install/ and also configure for # object storage services as detailed at https://rclone.org/s3/#configuration # By default rclone uses the configuration file at ~/.config/rclone/rclone.conf # To specify a custom configuration file, please add the full path to the # configuration file as below # # path_to_custom_rclone_config: /home/mycomputer/somedir/example.conf # # This setting will ignore the default rclone config found at # ~/.config/rclone/rclone.conf # # Please note that rclone_config can be assigned a string or list # # awsbucket: myawsfdroid # rclone_config: aws-sample-config # # or # # awsbucket: myawsfdroid # rclone_config: [aws-sample-config, rclone-supported-service-config] # # In case both rclone and s3cmd are installed, the preferred sync # tool can be specified in this file (config.yml) # if s3cmd is preferred, set it as below # # s3cmd: true # # if rclone is preferred, set it as below # # rclone: true # # Please note that only one can be set to true at any time # Also, in the event that both s3cmd and rclone are installed # and both are missing from the config.yml file, the preferred # tool will be s3cmd. # If you want to force 'fdroid server' to use a non-standard serverwebroot. # This will allow you to have 'serverwebroot' entries which do not end in # '/fdroid'. (Please note that some client features expect repository URLs # to end in '/fdroid/repo'.) # # nonstandardwebroot: false # If you want to upload the release APK file to androidobservatory.org # # androidobservatory: false # If you want to upload the release APK file to virustotal.com # You have to enter your profile apikey to enable the upload. # # virustotal_apikey: 9872987234982734 # # Or get it from an environment variable: # # virustotal_apikey: {env: virustotal_apikey} # Keep a log of all generated index files in a git repo to provide a # "binary transparency" log for anyone to check the history of the # binaries that are published. This is in the form of a "git remote", # which this machine where `fdroid update` is run has already been # configured to allow push access (e.g. ssh key, username/password, etc) # binary_transparency_remote: git@gitlab.com:fdroid/binary-transparency-log.git # Set this to true to always use a build server. This saves specifying the # --server option on dedicated secure build server hosts. # build_server_always: true # Limit in number of characters that fields can take up # Only the fields listed here are supported, defaults shown # char_limits: # author: 256 # name: 50 # summary: 80 # description: 4000 # video: 256 # whatsNew: 500 # It is possible for the server operator to specify lists of apps that # must be installed or uninstalled on the client (aka "push installs). # If the user has opted in, or the device is already setup to respond # to these requests, then F-Droid will automatically install/uninstall # the packageNames listed. This is protected by the same signing key # as the app index metadata. # # install_list: # - at.bitfire.davdroid # - com.fsck.k9 # - us.replicant # # uninstall_list: # - com.facebook.orca # - com.android.vending # `fdroid lint` checks licenses in metadata against a built white list. By # default we will require license metadata to be present and only allow # licenses approved either by FSF or OSI. We're using the standardized SPDX # license IDs. (https://spdx.org/licenses/) # # We use `python3 -m spdx-license-list print --filter-fsf-or-osi` for # generating our default list. (https://pypi.org/project/spdx-license-list) # # You can override our default list of allowed licenes by setting this option. # Just supply a custom list of licene names you would like to allow. To disable # checking licenses by the linter, assign an empty value to lint_licenses. # # lint_licenses: # - Custom-License-A # - Another-License # `fdroid scanner` can scan for signatures from various sources. By default # it's configured to only use F-Droids official SUSS collection. We have # support for these special collections: # * 'exodus' - official exodus-privacy.org signatures # * 'etip' - exodus privacy investigation platfrom community contributed # signatures # * 'suss' - official F-Droid: Suspicious or Unwanted Software Signatures # You can also configure scanner to use custom collections of signatures here. # They have to follow the format specified in the SUSS readme. # (https://gitlab.com/fdroid/fdroid-suss/#cache-file-data-format) # # scanner_signature_sources: # - suss # - exodus # - https://example.com/signatures.json # The scanner can use signature sources from the internet. These are # cached locally. To force them to be refreshed from the network on # every run, set this to true: # # refresh_scanner: true ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742486863.0 fdroidserver-2.4.0/examples/fdroid_clean_repos.py0000644000175000017500000000246414767036517020756 0ustar00hanshans#!/usr/bin/env python3 # # an fdroid plugin for resetting app VCSs to the latest version for the metadata import argparse import logging from fdroidserver import _, common, metadata from fdroidserver.exception import VCSException fdroid_summary = 'reset app VCSs to the latest version' def main(): parser = argparse.ArgumentParser( usage="%(prog)s [options] [APPID[:VERCODE] [APPID[:VERCODE] ...]]" ) common.setup_global_opts(parser) parser.add_argument( "appid", nargs='*', help=_("applicationId with optional versionCode in the form APPID[:VERCODE]"), ) metadata.add_metadata_arguments(parser) options = common.parse_args(parser) apps = common.read_app_args( options.appid, allow_version_codes=True, sort_by_time=True ) common.read_config() for appid, app in apps.items(): if "Builds" in app and len(app["Builds"]) > 0: build = app.get('Builds')[-1] logging.info(_("Cleaning up '{appid}' VCS").format(appid=appid)) try: vcs, build_dir = common.setup_vcs(app) vcs.gotorevision(build.commit) if build.submodules: vcs.initsubmodules() except VCSException: pass if __name__ == "__main__": main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742486863.0 fdroidserver-2.4.0/examples/fdroid_export_keystore_to_nitrokey.py0000644000175000017500000000433114767036517024353 0ustar00hanshans#!/usr/bin/env python3 # # an fdroid plugin for exporting a repo's keystore in standard PEM format import os from argparse import ArgumentParser from fdroidserver import common from fdroidserver.common import FDroidPopen from fdroidserver.exception import BuildException fdroid_summary = "export the repo's keystore file to a NitroKey HSM" def run(cmd, error): envs = {'LC_ALL': 'C.UTF-8', 'PIN': config['smartcard_pin'], 'FDROID_KEY_STORE_PASS': config['keystorepass'], 'FDROID_KEY_PASS': config['keypass']} p = FDroidPopen(cmd, envs=envs) if p.returncode != 0: raise BuildException(error, p.output) def main(): global config parser = ArgumentParser() common.setup_global_opts(parser) common.parse_args(parser) config = common.read_config() destkeystore = config['keystore'].replace('.jks', '.p12').replace('/', '_') exportkeystore = config['keystore'].replace('.jks', '.pem').replace('/', '_') if os.path.exists(destkeystore) or os.path.exists(exportkeystore): raise BuildException('%s exists!' % exportkeystore) run([config['keytool'], '-importkeystore', '-srckeystore', config['keystore'], '-srcalias', config['repo_keyalias'], '-srcstorepass:env', 'FDROID_KEY_STORE_PASS', '-srckeypass:env', 'FDROID_KEY_PASS', '-destkeystore', destkeystore, '-deststorepass:env', 'FDROID_KEY_STORE_PASS', '-deststoretype', 'PKCS12'], 'Failed to convert to PKCS12!') # run(['openssl', 'pkcs12', '-in', destkeystore, # '-passin', 'env:FDROID_KEY_STORE_PASS', '-nokeys', # '-out', exportkeystore, # '-passout', 'env:FDROID_KEY_STORE_PASS'], # 'Failed to convert to PEM!') run(['pkcs15-init', '--delete-objects', 'privkey,pubkey', '--id', '3', '--store-private-key', destkeystore, '--format', 'pkcs12', '--auth-id', '3', '--verify-pin', '--pin', 'env:PIN'], '') run(['pkcs15-init', '--delete-objects', 'privkey,pubkey', '--id', '2', '--store-private-key', destkeystore, '--format', 'pkcs12', '--auth-id', '3', '--verify-pin', '--pin', 'env:PIN'], '') if __name__ == "__main__": main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742486863.0 fdroidserver-2.4.0/examples/fdroid_exportkeystore.py0000644000175000017500000000372414767036517021573 0ustar00hanshans#!/usr/bin/env python3 # # an fdroid plugin for exporting a repo's keystore in standard PEM format import os from argparse import ArgumentParser from fdroidserver import common from fdroidserver.common import FDroidPopen from fdroidserver.exception import BuildException fdroid_summary = 'export the keystore in standard PEM format' def main(): parser = ArgumentParser() common.setup_global_opts(parser) common.parse_args(parser) config = common.read_config() env_vars = {'LC_ALL': 'C.UTF-8', 'FDROID_KEY_STORE_PASS': config['keystorepass'], 'FDROID_KEY_PASS': config['keypass']} destkeystore = config['keystore'].replace('.jks', '.p12').replace('/', '_') exportkeystore = config['keystore'].replace('.jks', '.pem').replace('/', '_') if os.path.exists(destkeystore) or os.path.exists(exportkeystore): raise BuildException('%s exists!' % exportkeystore) p = FDroidPopen([config['keytool'], '-importkeystore', '-srckeystore', config['keystore'], '-srcalias', config['repo_keyalias'], '-srcstorepass:env', 'FDROID_KEY_STORE_PASS', '-srckeypass:env', 'FDROID_KEY_PASS', '-destkeystore', destkeystore, '-deststoretype', 'PKCS12', '-deststorepass:env', 'FDROID_KEY_STORE_PASS', '-destkeypass:env', 'FDROID_KEY_PASS'], envs=env_vars) if p.returncode != 0: raise BuildException("Failed to convert to PKCS12!", p.output) p = FDroidPopen(['openssl', 'pkcs12', '-in', destkeystore, '-passin', 'env:FDROID_KEY_STORE_PASS', '-nokeys', '-out', exportkeystore, '-passout', 'env:FDROID_KEY_STORE_PASS'], envs=env_vars) if p.returncode != 0: raise BuildException("Failed to convert to PEM!", p.output) if __name__ == "__main__": main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742486863.0 fdroidserver-2.4.0/examples/fdroid_extract_repo_pubkey.py0000644000175000017500000000100514767036517022530 0ustar00hanshans#!/usr/bin/env python3 # # an fdroid plugin print the repo_pubkey from a repo's keystore # from argparse import ArgumentParser from fdroidserver import common, index fdroid_summary = 'export the keystore in standard PEM format' def main(): parser = ArgumentParser() common.setup_global_opts(parser) common.parse_args(parser) common.read_config() pubkey, repo_pubkey_fingerprint = index.extract_pubkey() print('repo_pubkey = "%s"' % pubkey.decode()) if __name__ == "__main__": main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742486863.0 fdroidserver-2.4.0/examples/fdroid_fetchsrclibs.py0000644000175000017500000000272514767036517021137 0ustar00hanshans#!/usr/bin/env python3 # # an fdroid plugin for setting up srclibs # # The 'fdroid build' gitlab-ci job uses --on-server, which does not # set up the srclibs. This plugin does the missing setup. import argparse import os import pprint from fdroidserver import _, common, metadata fdroid_summary = 'prepare the srclibs for `fdroid build --on-server`' def main(): parser = argparse.ArgumentParser(usage="%(prog)s [options] [APPID[:VERCODE] [APPID[:VERCODE] ...]]") common.setup_global_opts(parser) parser.add_argument("appid", nargs='*', help=_("applicationId with optional versionCode in the form APPID[:VERCODE]")) metadata.add_metadata_arguments(parser) options = common.parse_args(parser) apps = common.read_app_args(options.appid, allow_version_codes=True, sort_by_time=True) common.read_config() srclib_dir = os.path.join('build', 'srclib') os.makedirs(srclib_dir, exist_ok=True) srclibpaths = [] for appid, app in apps.items(): vcs, _ignored = common.setup_vcs(app) for build in app.get('Builds', []): vcs.gotorevision(build.commit, refresh=False) if build.submodules: vcs.initsubmodules() else: vcs.deinitsubmodules() for lib in build.srclibs: srclibpaths.append(common.getsrclib(lib, srclib_dir, prepare=False, build=build)) print('Set up srclibs:') pprint.pprint(srclibpaths) if __name__ == "__main__": main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742486863.0 fdroidserver-2.4.0/examples/fdroid_nitrokeyimport.py0000644000175000017500000000300514767036517021553 0ustar00hanshans#!/usr/bin/env python3 from argparse import ArgumentParser from fdroidserver import common from fdroidserver.common import FDroidPopen from fdroidserver.exception import BuildException fdroid_summary = 'import the local keystore into a SmartCard HSM' def main(): parser = ArgumentParser() common.setup_global_opts(parser) common.parse_args(parser) config = common.read_config() env_vars = { 'LC_ALL': 'C.UTF-8', 'FDROID_KEY_STORE_PASS': config['keystorepass'], 'FDROID_KEY_PASS': config['keypass'], 'SMARTCARD_PIN': str(config['smartcard_pin']), } p = FDroidPopen([config['keytool'], '-importkeystore', '-srcalias', config['repo_keyalias'], '-srckeystore', config['keystore'], '-srcstorepass:env', 'FDROID_KEY_STORE_PASS', '-srckeypass:env', 'FDROID_KEY_PASS', '-destalias', config['repo_keyalias'], '-destkeystore', 'NONE', '-deststoretype', 'PKCS11', '-providerName', 'SunPKCS11-OpenSC', '-providerClass', 'sun.security.pkcs11.SunPKCS11', '-providerArg', 'opensc-fdroid.cfg', '-deststorepass:env', 'SMARTCARD_PIN', '-J-Djava.security.debug=sunpkcs11'], envs=env_vars) if p.returncode != 0: raise BuildException("Failed to import into HSM!", p.output) if __name__ == "__main__": main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/examples/opensc-fdroid.cfg0000664000175000017500000000017314717152067017767 0ustar00hanshansname = OpenSC description = SunPKCS11 w/ OpenSC Smart card Framework library = /usr/lib/opensc-pkcs11.so slotListIndex = 1 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/examples/public-read-only-s3-bucket-policy.json0000664000175000017500000000035514717152067023710 0ustar00hanshans{ "Version":"2012-10-17", "Statement":[ {"Sid":"AddPerm", "Effect":"Allow", "Principal":"*", "Action":"s3:GetObject", "Resource":"arn:aws:s3:::examplebucket/fdroid/*" } ] } ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/examples/template.yml0000644000175000017500000000036414717152067017110 0ustar00hanshansAuthorName: . WebSite: '' Bitcoin: null Litecoin: null Donate: null License: Unknown Categories: - Internet IssueTracker: '' SourceCode: '' Changelog: '' Name: . Summary: . Description: | . ArchivePolicy: 2 versions RequiresRoot: false ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/fdroid0000755000175000017500000000152114717152067014125 0ustar00hanshans#!/usr/bin/env python3 # # fdroid.py - part of the FDroid server tools # Copyright (C) 2020 Michael Pöhn # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import fdroidserver.__main__ fdroidserver.__main__.main() ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2281864 fdroidserver-2.4.0/fdroidserver/0000755000175000017500000000000014770510164015422 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742486863.0 fdroidserver-2.4.0/fdroidserver/__init__.py0000644000175000017500000000435414767036517017554 0ustar00hanshansimport gettext import glob import os import sys # support running straight from git and standard installs rootpaths = [ os.path.realpath(os.path.join(os.path.dirname(__file__), '..')), os.path.realpath( os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', 'share') ), os.path.join(sys.prefix, 'share'), ] localedir = None for rootpath in rootpaths: if len(glob.glob(os.path.join(rootpath, 'locale', '*', 'LC_MESSAGES', 'fdroidserver.mo'))) > 0: localedir = os.path.join(rootpath, 'locale') break gettext.bindtextdomain('fdroidserver', localedir) gettext.textdomain('fdroidserver') _ = gettext.gettext from fdroidserver.exception import (FDroidException, MetaDataException, VerificationException) # NOQA: E402 FDroidException # NOQA: B101 MetaDataException # NOQA: B101 VerificationException # NOQA: B101 from fdroidserver.common import (verify_apk_signature, genkeystore as generate_keystore) # NOQA: E402 verify_apk_signature # NOQA: B101 generate_keystore # NOQA: B101 from fdroidserver.index import (download_repo_index, download_repo_index_v1, download_repo_index_v2, get_mirror_service_urls, make as make_index) # NOQA: E402 download_repo_index # NOQA: B101 download_repo_index_v1 # NOQA: B101 download_repo_index_v2 # NOQA: B101 get_mirror_service_urls # NOQA: B101 make_index # NOQA: B101 from fdroidserver.update import (process_apk, process_apks, scan_apk, scan_repo_files) # NOQA: E402 process_apk # NOQA: B101 process_apks # NOQA: B101 scan_apk # NOQA: B101 scan_repo_files # NOQA: B101 from fdroidserver.deploy import (update_awsbucket, update_servergitmirrors, update_serverwebroots, update_serverwebroot) # NOQA: E402 update_awsbucket # NOQA: B101 update_servergitmirrors # NOQA: B101 update_serverwebroots # NOQA: B101 update_serverwebroot # NOQA: B101 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742486863.0 fdroidserver-2.4.0/fdroidserver/__main__.py0000755000175000017500000002135514767036517017540 0ustar00hanshans#!/usr/bin/env python3 # # fdroidserver/__main__.py - part of the FDroid server tools # Copyright (C) 2020 Michael Pöhn # Copyright (C) 2010-2015, Ciaran Gultnieks, ciaran@ciarang.com # Copyright (C) 2013-2014 Daniel Marti # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import re import sys import os import pkgutil import logging import importlib.metadata import git import fdroidserver.common import fdroidserver.metadata from fdroidserver import _ from argparse import ArgumentError from collections import OrderedDict COMMANDS = OrderedDict([ ("build", _("Build a package from source")), ("init", _("Quickly start a new repository")), ("publish", _("Sign and place packages in the repo")), ("gpgsign", _("Add PGP signatures using GnuPG for packages in repo")), ("update", _("Update repo information for new packages")), ("deploy", _("Interact with the repo HTTP server")), ("verify", _("Verify the integrity of downloaded packages")), ("checkupdates", _("Check for updates to applications")), ("import", _("Extract application metadata from a source repository")), ("install", _("Install built packages on devices")), ("readmeta", _("Read all the metadata files and exit")), ("rewritemeta", _("Rewrite all the metadata files")), ("lint", _("Warn about possible metadata errors")), ("scanner", _("Scan the source code of a package")), ("signindex", _("Sign indexes created using update --nosign")), ("btlog", _("Update the binary transparency log for a URL")), ("signatures", _("Extract signatures from APKs")), ("nightly", _("Set up an app build for a nightly build repo")), ("mirror", _("Download complete mirrors of small repos")), ]) def print_help(available_plugins=None): print(_("usage: ") + _("fdroid [] [-h|--help|--version|]")) print("") print(_("Valid commands are:")) for cmd, summary in COMMANDS.items(): print(" " + cmd + ' ' * (15 - len(cmd)) + summary) if available_plugins: print(_('commands from plugin modules:')) for command in sorted(available_plugins.keys()): print(' {:15}{}'.format(command, available_plugins[command]['summary'])) print("") def preparse_plugin(module_name, module_dir): """No summary. Simple regex based parsing for plugin scripts. So we don't have to import them when we just need the summary, but not plan on executing this particular plugin. """ if '.' in module_name: raise ValueError("No '.' allowed in fdroid plugin modules: '{}'" .format(module_name)) path = os.path.join(module_dir, module_name + '.py') if not os.path.isfile(path): path = os.path.join(module_dir, module_name, '__main__.py') if not os.path.isfile(path): raise ValueError("unable to find main plugin script " "for module '{n}' ('{d}')" .format(n=module_name, d=module_dir)) summary = None main = None with open(path, 'r', encoding='utf-8') as f: re_main = re.compile(r'^(\s*def\s+main\s*\(.*\)\s*:' r'|\s*main\s*=\s*lambda\s*:.+)$') re_summary = re.compile(r'^\s*fdroid_summary\s*=\s["\'](?P.+)["\']$') for line in f: m_summary = re_summary.match(line) if m_summary: summary = m_summary.group('text') if re_main.match(line): main = True if summary is None: raise NameError("could not find 'fdroid_summary' in: '{}' plugin" .format(module_name)) if main is None: raise NameError("could not find 'main' function in: '{}' plugin" .format(module_name)) return {'name': module_name, 'summary': summary} def find_plugins(): found_plugins = [{'name': x[1], 'dir': x[0].path} for x in pkgutil.iter_modules() if x[1].startswith('fdroid_')] plugin_infos = {} for plugin_def in found_plugins: command_name = plugin_def['name'][7:] try: plugin_infos[command_name] = preparse_plugin(plugin_def['name'], plugin_def['dir']) except Exception as e: # We need to keep module lookup fault tolerant because buggy # modules must not prevent fdroidserver from functioning if len(sys.argv) > 1 and sys.argv[1] == command_name: # only raise exeption when a user specifies the broken # plugin in explicitly in command line raise e return plugin_infos def main(): available_plugins = find_plugins() if len(sys.argv) <= 1: print_help(available_plugins=available_plugins) sys.exit(0) command = sys.argv[1] if command not in COMMANDS and command not in available_plugins: if command in ('-h', '--help'): print_help(available_plugins=available_plugins) sys.exit(0) elif command == 'server': print(_("""ERROR: The "server" subcommand has been removed, use "deploy"!""")) sys.exit(1) elif command == '--version': try: print(importlib.metadata.version("fdroidserver")) sys.exit(0) except importlib.metadata.PackageNotFoundError: pass try: print( git.repo.Repo( os.path.dirname(os.path.dirname(__file__)) ).git.describe(always=True, tags=True) ) sys.exit(0) except git.exc.InvalidGitRepositoryError: print(_('No version information could be found.')) sys.exit(1) else: print(_("Command '%s' not recognised.\n" % command)) print_help(available_plugins=available_plugins) sys.exit(1) verbose = any(s in sys.argv for s in ['-v', '--verbose']) quiet = any(s in sys.argv for s in ['-q', '--quiet']) # Helpful to differentiate warnings from errors even when on quiet logformat = '%(asctime)s %(levelname)s: %(message)s' loglevel = logging.INFO if verbose: loglevel = logging.DEBUG elif quiet: loglevel = logging.WARN logging.basicConfig(format=logformat, level=loglevel) if verbose and quiet: logging.critical(_("Conflicting arguments: '--verbose' and '--quiet' " "can not be specified at the same time.")) sys.exit(1) # Trick argparse into displaying the right usage when --help is used. sys.argv[0] += ' ' + command del sys.argv[1] if command in COMMANDS.keys(): # import is named import_subcommand internally b/c import is reserved by Python command = 'import_subcommand' if command == 'import' else command mod = __import__('fdroidserver.' + command, None, None, [command]) else: mod = __import__(available_plugins[command]['name'], None, None, [command]) system_encoding = sys.getdefaultencoding() if system_encoding is None or system_encoding.lower() not in ('utf-8', 'utf8'): logging.warning(_("Encoding is set to '{enc}' fdroid might run " "into encoding issues. Please set it to 'UTF-8' " "for best results.".format(enc=system_encoding))) try: mod.main() # These are ours, contain a proper message and are "expected" except (fdroidserver.common.FDroidException, fdroidserver.metadata.MetaDataException) as e: if verbose: raise else: logging.critical(str(e)) sys.exit(1) except ArgumentError as e: logging.critical(str(e)) sys.exit(1) except KeyboardInterrupt: print('') fdroidserver.common.force_exit(1) # These should only be unexpected crashes due to bugs in the code # str(e) often doesn't contain a reason, so just show the backtrace except Exception as e: logging.critical(_("Unknown exception found!")) raise e sys.exit(0) if __name__ == "__main__": main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/fdroidserver/_yaml.py0000644000175000017500000000462214770502071017077 0ustar00hanshans# Copyright (C) 2025, Hans-Christoph Steiner # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . """Standard YAML parsing and dumping. YAML 1.2 is the preferred format for all data files. When loading F-Droid formats like config.yml and .yml, YAML 1.2 is forced, and older YAML constructs should be considered an error. It is OK to load and dump files in other YAML versions if they are externally defined formats, like FUNDING.yml. In those cases, these common instances might not be appropriate to use. There is a separate instance for dumping based on the "round trip" aka "rt" mode. The "rt" mode maintains order while the "safe" mode sorts the output. Also, yaml.version is not forced in the dumper because that makes it write out a "%YAML 1.2" header. F-Droid's formats are explicitly defined as YAML 1.2 and meant to be human-editable. So that header gets in the way. """ import ruamel.yaml yaml = ruamel.yaml.YAML(typ='safe') yaml.version = (1, 2) yaml_dumper = ruamel.yaml.YAML(typ='rt') def config_dump(config, fp=None): """Dump config data in YAML 1.2 format without headers. This outputs YAML in a string that is suitable for use in regexps and string replacements, as well as complete files. It is therefore explicitly set up to avoid writing out headers and footers. This is modeled after PyYAML's yaml.dump(), which can dump to a file or return a string. https://yaml.dev/doc/ruamel.yaml/example/#Output_of_%60dump()%60_as_a_string """ dumper = ruamel.yaml.YAML(typ='rt') dumper.default_flow_style = False dumper.explicit_start = False dumper.explicit_end = False if fp is None: with ruamel.yaml.compat.StringIO() as fp: dumper.dump(config, fp) return fp.getvalue() dumper.dump(config, fp) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742486863.0 fdroidserver-2.4.0/fdroidserver/apksigcopier.py0000644000175000017500000011215114767036517020470 0ustar00hanshans#!/usr/bin/python3 # encoding: utf-8 # SPDX-FileCopyrightText: 2023 FC Stegerman # SPDX-License-Identifier: GPL-3.0-or-later # -- ; {{{1 # # File : apksigcopier # Maintainer : FC Stegerman # Date : 2023-02-08 # # Copyright : Copyright (C) 2023 FC Stegerman # Version : v1.1.1 # License : GPLv3+ # # -- ; }}}1 """ Copy/extract/patch android apk signatures & compare apks. apksigcopier is a tool for copying android APK signatures from a signed APK to an unsigned one (in order to verify reproducible builds). It can also be used to compare two APKs with different signatures; this requires apksigner. CLI === $ apksigcopier extract [OPTIONS] SIGNED_APK OUTPUT_DIR $ apksigcopier patch [OPTIONS] METADATA_DIR UNSIGNED_APK OUTPUT_APK $ apksigcopier copy [OPTIONS] SIGNED_APK UNSIGNED_APK OUTPUT_APK $ apksigcopier compare [OPTIONS] FIRST_APK SECOND_APK The following environment variables can be set to 1, yes, or true to override the default behaviour: * set APKSIGCOPIER_EXCLUDE_ALL_META=1 to exclude all metadata files * set APKSIGCOPIER_COPY_EXTRA_BYTES=1 to copy extra bytes after data (e.g. a v2 sig) * set APKSIGCOPIER_SKIP_REALIGNMENT=1 to skip realignment of ZIP entries API === >> from apksigcopier import do_extract, do_patch, do_copy, do_compare >> do_extract(signed_apk, output_dir, v1_only=NO) >> do_patch(metadata_dir, unsigned_apk, output_apk, v1_only=NO) >> do_copy(signed_apk, unsigned_apk, output_apk, v1_only=NO) >> do_compare(first_apk, second_apk, unsigned=False) You can use False, None, and True instead of NO, AUTO, and YES respectively. The following global variables (which default to False), can be set to override the default behaviour: * set exclude_all_meta=True to exclude all metadata files * set copy_extra_bytes=True to copy extra bytes after data (e.g. a v2 sig) * set skip_realignment=True to skip realignment of ZIP entries """ import glob import json import os import re import struct import sys import zipfile import zlib from collections import namedtuple from typing import Any, BinaryIO, Callable, Dict, Iterable, Iterator, Optional, Tuple, Union __version__ = "1.1.1" NAME = "apksigcopier" if sys.version_info >= (3, 8): from typing import Literal NoAutoYes = Literal["no", "auto", "yes"] else: NoAutoYes = str DateTime = Tuple[int, int, int, int, int, int] NoAutoYesBoolNone = Union[NoAutoYes, bool, None] ZipInfoDataPairs = Iterable[Tuple[zipfile.ZipInfo, bytes]] SIGBLOCK, SIGOFFSET = "APKSigningBlock", "APKSigningBlockOffset" NOAUTOYES: Tuple[NoAutoYes, NoAutoYes, NoAutoYes] = ("no", "auto", "yes") NO, AUTO, YES = NOAUTOYES APK_META = re.compile(r"^META-INF/([0-9A-Za-z_-]+\.(SF|RSA|DSA|EC)|MANIFEST\.MF)$") META_EXT: Tuple[str, ...] = ("SF", "RSA|DSA|EC", "MF") COPY_EXCLUDE: Tuple[str, ...] = ("META-INF/MANIFEST.MF",) DATETIMEZERO: DateTime = (1980, 0, 0, 0, 0, 0) ################################################################################ # # NB: these values are all from apksigner (the first element of each tuple, same # as APKZipInfo) or signflinger/zipflinger, except for external_attr w/ 0664 # permissions and flag_bits 0x08, added for completeness. # # NB: zipflinger changed from 0666 to 0644 in commit 895ba5fba6ab84617dd67e38f456a8f96aa37ff0 # # https://android.googlesource.com/platform/tools/apksig # src/main/java/com/android/apksig/internal/zip/{CentralDirectoryRecord,LocalFileRecord,ZipUtils}.java # https://android.googlesource.com/platform/tools/base # signflinger/src/com/android/signflinger/SignedApk.java # zipflinger/src/com/android/zipflinger/{CentralDirectoryRecord,LocalFileHeader,Source}.java # ################################################################################ VALID_ZIP_META = dict( compresslevel=(9, 1), # best compression, best speed create_system=(0, 3), # fat, unx create_version=(20, 0), # 2.0, 0.0 external_attr=(0, # N/A 0o100644 << 16, # regular file rw-r--r-- 0o100664 << 16, # regular file rw-rw-r-- 0o100666 << 16), # regular file rw-rw-rw- extract_version=(20, 0), # 2.0, 0.0 flag_bits=(0x800, 0, 0x08, 0x808), # 0x800 = utf8, 0x08 = data_descriptor ) ZipData = namedtuple("ZipData", ("cd_offset", "eocd_offset", "cd_and_eocd")) exclude_all_meta = False # exclude all metadata files in copy_apk() copy_extra_bytes = False # copy extra bytes after data in copy_apk() skip_realignment = False # skip realignment of ZIP entries in copy_apk() class APKSigCopierError(Exception): """Base class for errors.""" class APKSigningBlockError(APKSigCopierError): """Something wrong with the APK Signing Block.""" class NoAPKSigningBlock(APKSigningBlockError): """APK Signing Block Missing.""" class ZipError(APKSigCopierError): """Something wrong with ZIP file.""" # FIXME: is there a better alternative? class ReproducibleZipInfo(zipfile.ZipInfo): """Reproducible ZipInfo hack.""" _override: Dict[str, Any] = {} def __init__(self, zinfo: zipfile.ZipInfo, **override: Any) -> None: # pylint: disable=W0231 if override: self._override = {**self._override, **override} for k in self.__slots__: if hasattr(zinfo, k): setattr(self, k, getattr(zinfo, k)) def __getattribute__(self, name: str) -> Any: if name != "_override": try: return self._override[name] except KeyError: pass return object.__getattribute__(self, name) # See VALID_ZIP_META class APKZipInfo(ReproducibleZipInfo): """Reproducible ZipInfo for APK files.""" COMPRESSLEVEL = 9 _override = dict( compress_type=8, create_system=0, create_version=20, date_time=DATETIMEZERO, external_attr=0, extract_version=20, flag_bits=0x800, ) def noautoyes(value: NoAutoYesBoolNone) -> NoAutoYes: """ Turn False into NO, None into AUTO, and True into YES. >>> from apksigcopier import noautoyes, NO, AUTO, YES >>> noautoyes(False) == NO == noautoyes(NO) True >>> noautoyes(None) == AUTO == noautoyes(AUTO) True >>> noautoyes(True) == YES == noautoyes(YES) True """ if isinstance(value, str): if value not in NOAUTOYES: raise ValueError("expected NO, AUTO, or YES") return value try: return {False: NO, None: AUTO, True: YES}[value] except KeyError: raise ValueError("expected False, None, or True") # pylint: disable=W0707 def is_meta(filename: str) -> bool: """ Check whether filename is a JAR metadata file. Returns whether filename is a v1 (JAR) signature file (.SF), signature block file (.RSA, .DSA, or .EC), or manifest (MANIFEST.MF). See https://docs.oracle.com/javase/tutorial/deployment/jar/intro.html >>> from apksigcopier import is_meta >>> is_meta("classes.dex") False >>> is_meta("META-INF/CERT.SF") True >>> is_meta("META-INF/CERT.RSA") True >>> is_meta("META-INF/MANIFEST.MF") True >>> is_meta("META-INF/OOPS") False """ return APK_META.fullmatch(filename) is not None def exclude_from_copying(filename: str) -> bool: """ Check whether to exclude a file during copy_apk(). Excludes filenames in COPY_EXCLUDE (i.e. MANIFEST.MF) by default; when exclude_all_meta is set to True instead, excludes all metadata files as matched by is_meta(). Directories are always excluded. >>> import apksigcopier >>> from apksigcopier import exclude_from_copying >>> exclude_from_copying("classes.dex") False >>> exclude_from_copying("foo/") True >>> exclude_from_copying("META-INF/") True >>> exclude_from_copying("META-INF/MANIFEST.MF") True >>> exclude_from_copying("META-INF/CERT.SF") False >>> exclude_from_copying("META-INF/OOPS") False >>> apksigcopier.exclude_all_meta = True >>> exclude_from_copying("classes.dex") False >>> exclude_from_copying("META-INF/") True >>> exclude_from_copying("META-INF/MANIFEST.MF") True >>> exclude_from_copying("META-INF/CERT.SF") True >>> exclude_from_copying("META-INF/OOPS") False """ return exclude_meta(filename) if exclude_all_meta else exclude_default(filename) def exclude_default(filename: str) -> bool: """ Like exclude_from_copying(). Excludes directories and filenames in COPY_EXCLUDE (i.e. MANIFEST.MF). """ return is_directory(filename) or filename in COPY_EXCLUDE def exclude_meta(filename: str) -> bool: """Like exclude_from_copying(); excludes directories and all metadata files.""" return is_directory(filename) or is_meta(filename) def is_directory(filename: str) -> bool: """ZIP entries with filenames that end with a '/' are directories.""" return filename.endswith("/") ################################################################################ # # There is usually a 132-byte virtual entry at the start of an APK signed with a # v1 signature by signflinger/zipflinger; almost certainly this is a default # manifest ZIP entry created at initialisation, deleted (from the CD but not # from the file) during v1 signing, and eventually replaced by a virtual entry. # # >>> (30 + len("META-INF/MANIFEST.MF") + # ... len("Manifest-Version: 1.0\r\n" # ... "Created-By: Android Gradle 7.1.3\r\n" # ... "Built-By: Signflinger\r\n\r\n")) # 132 # # NB: they could be a different size, depending on Created-By and Built-By. # # FIXME: could virtual entries occur elsewhere as well? # # https://android.googlesource.com/platform/tools/base # signflinger/src/com/android/signflinger/SignedApk.java # zipflinger/src/com/android/zipflinger/{LocalFileHeader,ZipArchive}.java # ################################################################################ def zipflinger_virtual_entry(size: int) -> bytes: """Create zipflinger virtual entry.""" if size < 30: raise ValueError("Minimum size for virtual entries is 30 bytes") return ( # header extract_version flag_bits b"\x50\x4b\x03\x04" b"\x00\x00" b"\x00\x00" # compress_type (1981,1,1,1,1,2) crc32 b"\x00\x00" b"\x21\x08\x21\x02" b"\x00\x00\x00\x00" # compress_size file_size filename length b"\x00\x00\x00\x00" b"\x00\x00\x00\x00" b"\x00\x00" ) + int.to_bytes(size - 30, 2, "little") + b"\x00" * (size - 30) def detect_zfe(apkfile: str) -> Optional[int]: """ Detect zipflinger virtual entry. Returns the size of the virtual entry if found, None otherwise. Raises ZipError if the size is less than 30 or greater than 4096, or the data isn't all zeroes. """ with open(apkfile, "rb") as fh: zfe_start = zipflinger_virtual_entry(30)[:28] # w/o len(extra) if fh.read(28) == zfe_start: zfe_size = 30 + int.from_bytes(fh.read(2), "little") if not (30 <= zfe_size <= 4096): raise ZipError("Unsupported virtual entry size") if not fh.read(zfe_size - 30) == b"\x00" * (zfe_size - 30): raise ZipError("Unsupported virtual entry data") return zfe_size return None ################################################################################ # # https://en.wikipedia.org/wiki/ZIP_(file_format) # https://source.android.com/docs/security/features/apksigning/v2#apk-signing-block-format # # ================================= # | Contents of ZIP entries | # ================================= # | APK Signing Block | # | ----------------------------- | # | | size (w/o this) uint64 LE | | # | | ... | | # | | size (again) uint64 LE | | # | | "APK Sig Block 42" (16B) | | # | ----------------------------- | # ================================= # | ZIP Central Directory | # ================================= # | ZIP End of Central Directory | # | ----------------------------- | # | | 0x06054b50 ( 4B) | | # | | ... (12B) | | # | | CD Offset ( 4B) | | # | | ... | | # | ----------------------------- | # ================================= # ################################################################################ # FIXME: makes certain assumptions and doesn't handle all valid ZIP files! # FIXME: support zip64? # FIXME: handle utf8 filenames w/o utf8 flag (as produced by zipflinger)? # https://android.googlesource.com/platform/tools/apksig # src/main/java/com/android/apksig/ApkSigner.java def copy_apk(unsigned_apk: str, output_apk: str, *, copy_extra: Optional[bool] = None, exclude: Optional[Callable[[str], bool]] = None, realign: Optional[bool] = None, zfe_size: Optional[int] = None) -> DateTime: """ Copy APK like apksigner would, excluding files matched by exclude_from_copying(). Adds a zipflinger virtual entry of zfe_size bytes if one is not already present and zfe_size is not None. Returns max date_time. The following global variables (which default to False), can be set to override the default behaviour: * set exclude_all_meta=True to exclude all metadata files * set copy_extra_bytes=True to copy extra bytes after data (e.g. a v2 sig) * set skip_realignment=True to skip realignment of ZIP entries The default behaviour can also be changed using the keyword-only arguments exclude, copy_extra, and realign; these take precedence over the global variables when not None. NB: exclude is a callable, not a bool; realign is the inverse of skip_realignment. >>> import apksigcopier, os, zipfile >>> apk = "test/apks/apks/golden-aligned-in.apk" >>> with zipfile.ZipFile(apk, "r") as zf: ... infos_in = zf.infolist() >>> with tempfile.TemporaryDirectory() as tmpdir: ... out = os.path.join(tmpdir, "out.apk") ... apksigcopier.copy_apk(apk, out) ... with zipfile.ZipFile(out, "r") as zf: ... infos_out = zf.infolist() (2017, 5, 15, 11, 28, 40) >>> for i in infos_in: ... print(i.filename) META-INF/ META-INF/MANIFEST.MF AndroidManifest.xml classes.dex temp.txt lib/armeabi/fake.so resources.arsc temp2.txt >>> for i in infos_out: ... print(i.filename) AndroidManifest.xml classes.dex temp.txt lib/armeabi/fake.so resources.arsc temp2.txt >>> infos_in[2] >>> infos_out[0] >>> repr(infos_in[2:]) == repr(infos_out) True """ if copy_extra is None: copy_extra = copy_extra_bytes if exclude is None: exclude = exclude_from_copying if realign is None: realign = not skip_realignment with zipfile.ZipFile(unsigned_apk, "r") as zf: infos = zf.infolist() zdata = zip_data(unsigned_apk) offsets = {} with open(unsigned_apk, "rb") as fhi, open(output_apk, "w+b") as fho: if zfe_size: zfe = zipflinger_virtual_entry(zfe_size) if fhi.read(zfe_size) != zfe: fho.write(zfe) fhi.seek(0) for info in sorted(infos, key=lambda info: info.header_offset): off_i = fhi.tell() if info.header_offset > off_i: # copy extra bytes fho.write(fhi.read(info.header_offset - off_i)) hdr = fhi.read(30) if hdr[:4] != b"\x50\x4b\x03\x04": raise ZipError("Expected local file header signature") n, m = struct.unpack(" bytes: align = 4096 if info.filename.endswith(".so") else 4 old_off = 30 + n + m + info.header_offset new_off = 30 + n + m + off_o old_xtr = hdr[30 + n:30 + n + m] new_xtr = b"" while len(old_xtr) >= 4: hdr_id, size = struct.unpack(" len(old_xtr) - 4: break if not (hdr_id == 0 and size == 0): if hdr_id == 0xd935: if size >= 2: align = int.from_bytes(old_xtr[4:6], "little") else: new_xtr += old_xtr[:size + 4] old_xtr = old_xtr[size + 4:] if old_off % align == 0 and new_off % align != 0: if pad_like_apksigner: pad = (align - (new_off - m + len(new_xtr) + 6) % align) % align xtr = new_xtr + struct.pack(" None: while size > 0: data = fhi.read(min(size, blocksize)) if not data: break size -= len(data) fho.write(data) if size != 0: raise ZipError("Unexpected EOF") def extract_meta(signed_apk: str) -> Iterator[Tuple[zipfile.ZipInfo, bytes]]: """ Extract v1 signature metadata files from signed APK. Yields (ZipInfo, data) pairs. >>> from apksigcopier import extract_meta >>> apk = "test/apks/apks/golden-aligned-v1v2v3-out.apk" >>> meta = tuple(extract_meta(apk)) >>> [ x.filename for x, _ in meta ] ['META-INF/RSA-2048.SF', 'META-INF/RSA-2048.RSA', 'META-INF/MANIFEST.MF'] >>> for line in meta[0][1].splitlines()[:4]: ... print(line.decode()) Signature-Version: 1.0 Created-By: 1.0 (Android) SHA-256-Digest-Manifest: hz7AxDJU9Namxoou/kc4Z2GVRS9anCGI+M52tbCsXT0= X-Android-APK-Signed: 2, 3 >>> for line in meta[2][1].splitlines()[:2]: ... print(line.decode()) Manifest-Version: 1.0 Created-By: 1.8.0_45-internal (Oracle Corporation) """ with zipfile.ZipFile(signed_apk, "r") as zf_sig: for info in zf_sig.infolist(): if is_meta(info.filename): yield info, zf_sig.read(info.filename) def extract_differences(signed_apk: str, extracted_meta: ZipInfoDataPairs) \ -> Optional[Dict[str, Any]]: """ Extract ZIP metadata differences from signed APK. >>> import apksigcopier as asc, pprint >>> apk = "test/apks/apks/debuggable-boolean.apk" >>> meta = tuple(asc.extract_meta(apk)) >>> [ x.filename for x, _ in meta ] ['META-INF/CERT.SF', 'META-INF/CERT.RSA', 'META-INF/MANIFEST.MF'] >>> diff = asc.extract_differences(apk, meta) >>> pprint.pprint(diff) {'files': {'META-INF/CERT.RSA': {'flag_bits': 2056}, 'META-INF/CERT.SF': {'flag_bits': 2056}, 'META-INF/MANIFEST.MF': {'flag_bits': 2056}}} >>> meta[2][0].extract_version = 42 >>> try: ... asc.extract_differences(apk, meta) ... except asc.ZipError as e: ... print(e) Unsupported extract_version >>> asc.validate_differences(diff) is None True >>> diff["files"]["META-INF/OOPS"] = {} >>> asc.validate_differences(diff) ".files key 'META-INF/OOPS' is not a metadata file" >>> del diff["files"]["META-INF/OOPS"] >>> diff["files"]["META-INF/CERT.RSA"]["compresslevel"] = 42 >>> asc.validate_differences(diff) ".files['META-INF/CERT.RSA'].compresslevel has an unexpected value" >>> diff["oops"] = 42 >>> asc.validate_differences(diff) 'contains unknown key(s)' """ differences: Dict[str, Any] = {} files = {} for info, data in extracted_meta: diffs = {} for k in VALID_ZIP_META: if k != "compresslevel": v = getattr(info, k) if v != APKZipInfo._override[k]: if v not in VALID_ZIP_META[k]: raise ZipError(f"Unsupported {k}") diffs[k] = v level = _get_compresslevel(signed_apk, info, data) if level != APKZipInfo.COMPRESSLEVEL: diffs["compresslevel"] = level if diffs: files[info.filename] = diffs if files: differences["files"] = files zfe_size = detect_zfe(signed_apk) if zfe_size: differences["zipflinger_virtual_entry"] = zfe_size return differences or None def validate_differences(differences: Dict[str, Any]) -> Optional[str]: """ Validate differences dict. Returns None if valid, error otherwise. """ if set(differences) - {"files", "zipflinger_virtual_entry"}: return "contains unknown key(s)" if "zipflinger_virtual_entry" in differences: if type(differences["zipflinger_virtual_entry"]) is not int: return ".zipflinger_virtual_entry is not an int" if not (30 <= differences["zipflinger_virtual_entry"] <= 4096): return ".zipflinger_virtual_entry is < 30 or > 4096" if "files" in differences: if not isinstance(differences["files"], dict): return ".files is not a dict" for name, info in differences["files"].items(): if not is_meta(name): return f".files key {name!r} is not a metadata file" if not isinstance(info, dict): return f".files[{name!r}] is not a dict" if set(info) - set(VALID_ZIP_META): return f".files[{name!r}] contains unknown key(s)" for k, v in info.items(): if v not in VALID_ZIP_META[k]: return f".files[{name!r}].{k} has an unexpected value" return None def _get_compresslevel(apkfile: str, info: zipfile.ZipInfo, data: bytes) -> int: if info.compress_type != 8: raise ZipError("Unsupported compress_type") crc = _get_compressed_crc(apkfile, info) for level in VALID_ZIP_META["compresslevel"]: comp = zlib.compressobj(level, 8, -15) if zlib.crc32(comp.compress(data) + comp.flush()) == crc: return level raise ZipError("Unsupported compresslevel") def _get_compressed_crc(apkfile: str, info: zipfile.ZipInfo) -> int: with open(apkfile, "rb") as fh: fh.seek(info.header_offset) hdr = fh.read(30) if hdr[:4] != b"\x50\x4b\x03\x04": raise ZipError("Expected local file header signature") n, m = struct.unpack(" None: """ Add v1 signature metadata to APK (removes v2 sig block, if any). >>> import apksigcopier as asc >>> unsigned_apk = "test/apks/apks/golden-aligned-in.apk" >>> signed_apk = "test/apks/apks/golden-aligned-v1v2v3-out.apk" >>> meta = tuple(asc.extract_meta(signed_apk)) >>> [ x.filename for x, _ in meta ] ['META-INF/RSA-2048.SF', 'META-INF/RSA-2048.RSA', 'META-INF/MANIFEST.MF'] >>> with zipfile.ZipFile(unsigned_apk, "r") as zf: ... infos_in = zf.infolist() >>> with tempfile.TemporaryDirectory() as tmpdir: ... out = os.path.join(tmpdir, "out.apk") ... asc.copy_apk(unsigned_apk, out) ... asc.patch_meta(meta, out) ... with zipfile.ZipFile(out, "r") as zf: ... infos_out = zf.infolist() (2017, 5, 15, 11, 28, 40) >>> for i in infos_in: ... print(i.filename) META-INF/ META-INF/MANIFEST.MF AndroidManifest.xml classes.dex temp.txt lib/armeabi/fake.so resources.arsc temp2.txt >>> for i in infos_out: ... print(i.filename) AndroidManifest.xml classes.dex temp.txt lib/armeabi/fake.so resources.arsc temp2.txt META-INF/RSA-2048.SF META-INF/RSA-2048.RSA META-INF/MANIFEST.MF """ with zipfile.ZipFile(output_apk, "r") as zf_out: for info in zf_out.infolist(): if is_meta(info.filename): raise ZipError("Unexpected metadata") with zipfile.ZipFile(output_apk, "a") as zf_out: for info, data in extracted_meta: if differences and "files" in differences: more = differences["files"].get(info.filename, {}).copy() else: more = {} level = more.pop("compresslevel", APKZipInfo.COMPRESSLEVEL) zinfo = APKZipInfo(info, date_time=date_time, **more) zf_out.writestr(zinfo, data, compresslevel=level) def extract_v2_sig(apkfile: str, expected: bool = True) -> Optional[Tuple[int, bytes]]: """ Extract APK Signing Block and offset from APK. When successful, returns (sb_offset, sig_block); otherwise raises NoAPKSigningBlock when expected is True, else returns None. >>> import apksigcopier as asc >>> apk = "test/apks/apks/golden-aligned-v1v2v3-out.apk" >>> sb_offset, sig_block = asc.extract_v2_sig(apk) >>> sb_offset 8192 >>> len(sig_block) 4096 >>> apk = "test/apks/apks/golden-aligned-in.apk" >>> try: ... asc.extract_v2_sig(apk) ... except asc.NoAPKSigningBlock as e: ... print(e) No APK Signing Block """ cd_offset = zip_data(apkfile).cd_offset with open(apkfile, "rb") as fh: fh.seek(cd_offset - 16) if fh.read(16) != b"APK Sig Block 42": if expected: raise NoAPKSigningBlock("No APK Signing Block") return None fh.seek(-24, os.SEEK_CUR) sb_size2 = int.from_bytes(fh.read(8), "little") fh.seek(-sb_size2 + 8, os.SEEK_CUR) sb_size1 = int.from_bytes(fh.read(8), "little") if sb_size1 != sb_size2: raise APKSigningBlockError("APK Signing Block sizes not equal") fh.seek(-8, os.SEEK_CUR) sb_offset = fh.tell() sig_block = fh.read(sb_size2 + 8) return sb_offset, sig_block # FIXME: OSError for APKs < 1024 bytes [wontfix] def zip_data(apkfile: str, count: int = 1024) -> ZipData: """ Extract central directory, EOCD, and offsets from ZIP. Returns ZipData. >>> import apksigcopier >>> apk = "test/apks/apks/golden-aligned-v1v2v3-out.apk" >>> data = apksigcopier.zip_data(apk) >>> data.cd_offset, data.eocd_offset (12288, 12843) >>> len(data.cd_and_eocd) 577 """ with open(apkfile, "rb") as fh: fh.seek(-count, os.SEEK_END) data = fh.read() pos = data.rfind(b"\x50\x4b\x05\x06") if pos == -1: raise ZipError("Expected end of central directory record (EOCD)") fh.seek(pos - len(data), os.SEEK_CUR) eocd_offset = fh.tell() fh.seek(16, os.SEEK_CUR) cd_offset = int.from_bytes(fh.read(4), "little") fh.seek(cd_offset) cd_and_eocd = fh.read() return ZipData(cd_offset, eocd_offset, cd_and_eocd) # FIXME: can we determine signed_sb_offset? def patch_v2_sig(extracted_v2_sig: Tuple[int, bytes], output_apk: str) -> None: """ Implant extracted v2/v3 signature into APK. >>> import apksigcopier as asc >>> unsigned_apk = "test/apks/apks/golden-aligned-in.apk" >>> signed_apk = "test/apks/apks/golden-aligned-v1v2v3-out.apk" >>> meta = tuple(asc.extract_meta(signed_apk)) >>> v2_sig = asc.extract_v2_sig(signed_apk) >>> with tempfile.TemporaryDirectory() as tmpdir: ... out = os.path.join(tmpdir, "out.apk") ... date_time = asc.copy_apk(unsigned_apk, out) ... asc.patch_meta(meta, out, date_time=date_time) ... asc.extract_v2_sig(out, expected=False) is None ... asc.patch_v2_sig(v2_sig, out) ... asc.extract_v2_sig(out) == v2_sig ... with open(signed_apk, "rb") as a, open(out, "rb") as b: ... a.read() == b.read() True True True """ signed_sb_offset, signed_sb = extracted_v2_sig data_out = zip_data(output_apk) if signed_sb_offset < data_out.cd_offset: raise APKSigningBlockError("APK Signing Block offset < central directory offset") padding = b"\x00" * (signed_sb_offset - data_out.cd_offset) offset = len(signed_sb) + len(padding) with open(output_apk, "r+b") as fh: fh.seek(data_out.cd_offset) fh.write(padding) fh.write(signed_sb) fh.write(data_out.cd_and_eocd) fh.seek(data_out.eocd_offset + offset + 16) fh.write(int.to_bytes(data_out.cd_offset + offset, 4, "little")) def patch_apk(extracted_meta: ZipInfoDataPairs, extracted_v2_sig: Optional[Tuple[int, bytes]], unsigned_apk: str, output_apk: str, *, differences: Optional[Dict[str, Any]] = None, exclude: Optional[Callable[[str], bool]] = None) -> None: """Patch extracted_meta + extracted_v2_sig (if not None) onto unsigned_apk and save as output_apk.""" if differences and "zipflinger_virtual_entry" in differences: zfe_size = differences["zipflinger_virtual_entry"] else: zfe_size = None date_time = copy_apk(unsigned_apk, output_apk, exclude=exclude, zfe_size=zfe_size) patch_meta(extracted_meta, output_apk, date_time=date_time, differences=differences) if extracted_v2_sig is not None: patch_v2_sig(extracted_v2_sig, output_apk) # FIXME: support multiple signers? def do_extract(signed_apk: str, output_dir: str, v1_only: NoAutoYesBoolNone = NO, *, ignore_differences: bool = False) -> None: """ Extract signatures from signed_apk and save in output_dir. The v1_only parameter controls whether the absence of a v1 signature is considered an error or not: * use v1_only=NO (or v1_only=False) to only accept (v1+)v2/v3 signatures; * use v1_only=AUTO (or v1_only=None) to automatically detect v2/v3 signatures; * use v1_only=YES (or v1_only=True) to ignore any v2/v3 signatures. """ v1_only = noautoyes(v1_only) extracted_meta = tuple(extract_meta(signed_apk)) if len(extracted_meta) not in (len(META_EXT), 0): raise APKSigCopierError("Unexpected or missing metadata files in signed_apk") for info, data in extracted_meta: name = os.path.basename(info.filename) with open(os.path.join(output_dir, name), "wb") as fh: fh.write(data) if v1_only == YES: if not extracted_meta: raise APKSigCopierError("Expected v1 signature") return expected = v1_only == NO extracted_v2_sig = extract_v2_sig(signed_apk, expected=expected) if extracted_v2_sig is None: if not extracted_meta: raise APKSigCopierError("Expected v1 and/or v2/v3 signature, found neither") return signed_sb_offset, signed_sb = extracted_v2_sig with open(os.path.join(output_dir, SIGOFFSET), "w") as fh: fh.write(str(signed_sb_offset) + "\n") with open(os.path.join(output_dir, SIGBLOCK), "wb") as fh: fh.write(signed_sb) if not ignore_differences: differences = extract_differences(signed_apk, extracted_meta) if differences: with open(os.path.join(output_dir, "differences.json"), "w") as fh: json.dump(differences, fh, sort_keys=True, indent=2) fh.write("\n") # FIXME: support multiple signers? def do_patch(metadata_dir: str, unsigned_apk: str, output_apk: str, v1_only: NoAutoYesBoolNone = NO, *, exclude: Optional[Callable[[str], bool]] = None, ignore_differences: bool = False) -> None: """ Patch signatures from metadata_dir onto unsigned_apk and save as output_apk. The v1_only parameter controls whether the absence of a v1 signature is considered an error or not: * use v1_only=NO (or v1_only=False) to only accept (v1+)v2/v3 signatures; * use v1_only=AUTO (or v1_only=None) to automatically detect v2/v3 signatures; * use v1_only=YES (or v1_only=True) to ignore any v2/v3 signatures. """ v1_only = noautoyes(v1_only) extracted_meta = [] differences = None for pat in META_EXT: files = [fn for ext in pat.split("|") for fn in glob.glob(os.path.join(metadata_dir, "*." + ext))] if len(files) != 1: continue info = zipfile.ZipInfo("META-INF/" + os.path.basename(files[0])) with open(files[0], "rb") as fh: extracted_meta.append((info, fh.read())) if len(extracted_meta) not in (len(META_EXT), 0): raise APKSigCopierError("Unexpected or missing files in metadata_dir") if v1_only == YES: extracted_v2_sig = None else: sigoffset_file = os.path.join(metadata_dir, SIGOFFSET) sigblock_file = os.path.join(metadata_dir, SIGBLOCK) if v1_only == AUTO and not os.path.exists(sigblock_file): extracted_v2_sig = None else: with open(sigoffset_file, "r") as fh: signed_sb_offset = int(fh.read()) with open(sigblock_file, "rb") as fh: signed_sb = fh.read() extracted_v2_sig = signed_sb_offset, signed_sb differences_file = os.path.join(metadata_dir, "differences.json") if not ignore_differences and os.path.exists(differences_file): with open(differences_file, "r") as fh: try: differences = json.load(fh) except json.JSONDecodeError as e: raise APKSigCopierError(f"Invalid differences.json: {e}") # pylint: disable=W0707 error = validate_differences(differences) if error: raise APKSigCopierError(f"Invalid differences.json: {error}") if not extracted_meta and extracted_v2_sig is None: raise APKSigCopierError("Expected v1 and/or v2/v3 signature, found neither") patch_apk(extracted_meta, extracted_v2_sig, unsigned_apk, output_apk, differences=differences, exclude=exclude) def do_copy(signed_apk: str, unsigned_apk: str, output_apk: str, v1_only: NoAutoYesBoolNone = NO, *, exclude: Optional[Callable[[str], bool]] = None, ignore_differences: bool = False) -> None: """ Copy signatures from signed_apk onto unsigned_apk and save as output_apk. The v1_only parameter controls whether the absence of a v1 signature is considered an error or not: * use v1_only=NO (or v1_only=False) to only accept (v1+)v2/v3 signatures; * use v1_only=AUTO (or v1_only=None) to automatically detect v2/v3 signatures; * use v1_only=YES (or v1_only=True) to ignore any v2/v3 signatures. """ v1_only = noautoyes(v1_only) extracted_meta = tuple(extract_meta(signed_apk)) differences = None if v1_only == YES: extracted_v2_sig = None else: extracted_v2_sig = extract_v2_sig(signed_apk, expected=v1_only == NO) if extracted_v2_sig is not None and not ignore_differences: differences = extract_differences(signed_apk, extracted_meta) patch_apk(extracted_meta, extracted_v2_sig, unsigned_apk, output_apk, differences=differences, exclude=exclude) # vim: set tw=80 sw=4 sts=4 et fdm=marker : ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2281864 fdroidserver-2.4.0/fdroidserver/asynchronousfilereader/0000755000175000017500000000000014770510164022200 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/fdroidserver/asynchronousfilereader/__init__.py0000644000175000017500000000250614766514130024316 0ustar00hanshans"""Simple thread based asynchronous file reader for Python. AsynchronousFileReader ====================== see https://github.com/soxofaan/asynchronousfilereader MIT License Copyright (c) 2014 Stefaan Lippens """ __version__ = '0.2.1' import threading try: # Python 2 from Queue import Queue except ImportError: # Python 3 from queue import Queue class AsynchronousFileReader(threading.Thread): """Helper class to implement asynchronous reading of a file in a separate thread. Pushes read lines on a queue to be consumed in another thread. """ def __init__(self, fd, queue=None, autostart=True): self._fd = fd if queue is None: queue = Queue() self.queue = queue threading.Thread.__init__(self) if autostart: self.start() def run(self): """Read lines and put them on the queue (the body of the tread).""" while True: line = self._fd.readline() if not line: break self.queue.put(line) def eof(self): """Check whether there is no more content to expect.""" return not self.is_alive() and self.queue.empty() def readlines(self): """Get currently available lines.""" while not self.queue.empty(): yield self.queue.get() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742486863.0 fdroidserver-2.4.0/fdroidserver/btlog.py0000755000175000017500000002314714767036517017130 0ustar00hanshans#!/usr/bin/env python3 """Update the binary transparency log for a URL.""" # # btlog.py - part of the FDroid server tools # Copyright (C) 2017, Hans-Christoph Steiner # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # This is for creating a binary transparency log in a git repo for any # F-Droid repo accessible via HTTP. It is meant to run very often, # even once a minute in a cronjob, so it uses HEAD requests and the # HTTP ETag to check if the file has changed. HEAD requests should # not count against the download counts. This pattern of a HEAD then # a GET is what fdroidclient uses to avoid ETags being abused as # cookies. This also uses the same HTTP User Agent as the F-Droid # client app so its not easy for the server to distinguish this from # the F-Droid client. import collections import defusedxml.minidom import git import glob import os import json import logging import requests import shutil import tempfile import zipfile from argparse import ArgumentParser from typing import Optional from . import _ from . import common from . import deploy from .exception import FDroidException def make_binary_transparency_log( repodirs: collections.abc.Iterable, btrepo: str = 'binary_transparency', url: Optional[str] = None, commit_title: str = 'fdroid update', ): """Log the indexes in a standalone git repo to serve as a "binary transparency" log. Parameters ---------- repodirs The directories of the F-Droid repository to generate the binary transparency log for. btrepo The path to the Git repository of the binary transparency log. url The URL of the F-Droid repository to generate the binary transparency log for. commit_title The commit title for commits in the binary transparency log Git repository. Notes ----- Also see https://www.eff.org/deeplinks/2014/02/open-letter-to-tech-companies . """ logging.info('Committing indexes to ' + btrepo) if os.path.exists(os.path.join(btrepo, '.git')): gitrepo = git.Repo(btrepo) else: if not os.path.exists(btrepo): os.mkdir(btrepo) gitrepo = git.Repo.init(btrepo, initial_branch=deploy.GIT_BRANCH) if not url: url = common.config['repo_url'].rstrip('/') with open(os.path.join(btrepo, 'README.md'), 'w') as fp: fp.write( """ # Binary Transparency Log for %s This is a log of the signed app index metadata. This is stored in a git repo, which serves as an imperfect append-only storage mechanism. People can then check that any file that they received from that F-Droid repository was a publicly released file. For more info on this idea: * https://wiki.mozilla.org/Security/Binary_Transparency """ % url[: url.rindex('/')] # strip '/repo' ) gitrepo.index.add(['README.md']) gitrepo.index.commit('add README') for repodir in repodirs: cpdir = os.path.join(btrepo, repodir) if not os.path.exists(cpdir): os.mkdir(cpdir) for f in ('index.xml', 'index-v1.json', 'index-v2.json', 'entry.json'): repof = os.path.join(repodir, f) if not os.path.exists(repof): continue dest = os.path.join(cpdir, f) if f.endswith('.xml'): doc = defusedxml.minidom.parse(repof) output = doc.toprettyxml(encoding='utf-8') with open(dest, 'wb') as f: f.write(output) elif f.endswith('.json'): with open(repof) as fp: output = json.load(fp, object_pairs_hook=collections.OrderedDict) with open(dest, 'w') as fp: json.dump(output, fp, indent=2) gitrepo.index.add([repof]) for f in ('index.jar', 'index-v1.jar', 'entry.jar'): repof = os.path.join(repodir, f) if not os.path.exists(repof): continue dest = os.path.join(cpdir, f) jarin = zipfile.ZipFile(repof, 'r') jarout = zipfile.ZipFile(dest, 'w') for info in jarin.infolist(): if info.filename.startswith('META-INF/'): jarout.writestr(info, jarin.read(info.filename)) jarout.close() jarin.close() gitrepo.index.add([repof]) output_files = [] for root, dirs, files in os.walk(repodir): for f in files: output_files.append(os.path.relpath(os.path.join(root, f), repodir)) output = collections.OrderedDict() for f in sorted(output_files): repofile = os.path.join(repodir, f) stat = os.stat(repofile) output[f] = ( stat.st_size, stat.st_ctime_ns, stat.st_mtime_ns, stat.st_mode, stat.st_uid, stat.st_gid, ) fslogfile = os.path.join(cpdir, 'filesystemlog.json') with open(fslogfile, 'w') as fp: json.dump(output, fp, indent=2) gitrepo.index.add([os.path.join(repodir, 'filesystemlog.json')]) for f in glob.glob(os.path.join(cpdir, '*.HTTP-headers.json')): gitrepo.index.add([os.path.join(repodir, os.path.basename(f))]) gitrepo.index.commit(commit_title) def main(): """Generate or update a binary transparency log for a F-Droid repository. The behaviour of this function is influenced by the configuration file as well as command line parameters. Raises ------ :exc:`~fdroidserver.exception.FDroidException` If the specified or default Git repository does not exist. """ parser = ArgumentParser() common.setup_global_opts(parser) parser.add_argument( "--git-repo", default=os.path.join(os.getcwd(), 'binary_transparency'), help=_("Path to the git repo to use as the log"), ) parser.add_argument( "-u", "--url", default='https://f-droid.org', help=_("The base URL for the repo to log (default: https://f-droid.org)"), ) parser.add_argument( "--git-remote", default=None, help=_("Push the log to this git remote repository"), ) options = common.parse_args(parser) if options.verbose: logging.getLogger("requests").setLevel(logging.INFO) logging.getLogger("urllib3").setLevel(logging.INFO) else: logging.getLogger("requests").setLevel(logging.WARNING) logging.getLogger("urllib3").setLevel(logging.WARNING) if not os.path.exists(options.git_repo): raise FDroidException( '"%s" does not exist! Create it, or use --git-repo' % options.git_repo ) session = requests.Session() new_files = False repodirs = ('repo', 'archive') tempdirbase = tempfile.mkdtemp(prefix='.fdroid-btlog-') for repodir in repodirs: # TODO read HTTP headers for etag from git repo tempdir = os.path.join(tempdirbase, repodir) os.makedirs(tempdir, exist_ok=True) gitrepodir = os.path.join(options.git_repo, repodir) os.makedirs(gitrepodir, exist_ok=True) for f in ( 'entry.jar', 'entry.json', 'index-v1.jar', 'index-v1.json', 'index-v2.json', 'index.jar', 'index.xml', ): dlfile = os.path.join(tempdir, f) dlurl = options.url + '/' + repodir + '/' + f http_headers_file = os.path.join(gitrepodir, f + '.HTTP-headers.json') headers = {'User-Agent': 'F-Droid 0.102.3'} etag = None if os.path.exists(http_headers_file): with open(http_headers_file) as fp: etag = json.load(fp)['ETag'] r = session.head(dlurl, headers=headers, allow_redirects=False) if r.status_code != 200: logging.debug( 'HTTP Response (%d), did not download %s' % (r.status_code, dlurl) ) continue if etag and etag == r.headers.get('ETag'): logging.debug('ETag matches, did not download ' + dlurl) continue r = session.get(dlurl, headers=headers, allow_redirects=False) if r.status_code == 200: with open(dlfile, 'wb') as f: for chunk in r: f.write(chunk) dump = dict() for k, v in r.headers.items(): dump[k] = v with open(http_headers_file, 'w') as fp: json.dump(dump, fp, indent=2, sort_keys=True) new_files = True if new_files: os.chdir(tempdirbase) make_binary_transparency_log( repodirs, options.git_repo, options.url, 'fdroid btlog' ) if options.git_remote: deploy.push_binary_transparency(options.git_repo, options.git_remote) shutil.rmtree(tempdirbase, ignore_errors=True) if __name__ == "__main__": main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742812298.0 fdroidserver-2.4.0/fdroidserver/build.py0000644000175000017500000016613514770232212017102 0ustar00hanshans#!/usr/bin/env python3 """Build a package from source.""" # # build.py - part of the FDroid server tools # Copyright (C) 2010-2014, Ciaran Gultnieks, ciaran@ciarang.com # Copyright (C) 2013-2014 Daniel Martí # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import os import shutil import glob import subprocess import posixpath import re import tarfile import threading import traceback import time import requests import tempfile import argparse import logging from gettext import ngettext from pathlib import Path from . import _ from . import common from . import net from . import metadata from . import scanner from . import vmtools from .common import FDroidPopen from .exception import FDroidException, BuildException, VCSException try: import paramiko except ImportError: pass buildserverid = None ssh_channel = None # Note that 'force' here also implies test mode. def build_server(app, build, vcs, build_dir, output_dir, log_dir, force): """Do a build on the builder vm. Parameters ---------- app The metadata of the app to build. build The build of the app to build. vcs The version control system controller object of the app. build_dir The local source-code checkout directory of the app. output_dir The target folder for the build result. log_dir The directory in the VM where the build logs are getting stored. force Don't refresh the already cloned repository and make the build stop on exceptions. Raises ------ :exc:`~fdroidserver.exception.BuildException` If Paramiko is not installed, a srclib directory or srclib metadata file is unexpectedly missing, the build process in the VM failed or output files of the build process are missing. :exc:`~fdroidserver.exception.FDroidException` If the Buildserver ID could not be obtained or copying a directory to the server failed. """ global buildserverid, ssh_channel try: paramiko except NameError as e: raise BuildException("Paramiko is required to use the buildserver") from e if options.verbose: logging.getLogger("paramiko").setLevel(logging.INFO) else: logging.getLogger("paramiko").setLevel(logging.WARN) sshinfo = vmtools.get_clean_builder('builder') output = None try: if not buildserverid: try: buildserverid = subprocess.check_output(['vagrant', 'ssh', '-c', 'cat /home/vagrant/buildserverid'], cwd='builder').strip().decode() logging.debug(_('Fetched buildserverid from VM: {buildserverid}') .format(buildserverid=buildserverid)) except Exception as e: if type(buildserverid) is not str or not re.match('^[0-9a-f]{40}$', buildserverid): logging.info(subprocess.check_output(['vagrant', 'status'], cwd="builder")) raise FDroidException("Could not obtain buildserverid from buldserver VM. " "(stored inside the buildserver VM at '/home/vagrant/buildserverid') " "Please reset your buildserver, the setup VM is broken.") from e # Open SSH connection... logging.info("Connecting to virtual machine...") sshs = paramiko.SSHClient() sshs.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # nosec B507 only connects to local VM sshs.connect(sshinfo['hostname'], username=sshinfo['user'], port=sshinfo['port'], timeout=300, look_for_keys=False, key_filename=sshinfo['idfile']) homedir = posixpath.join('/home', sshinfo['user']) # Get an SFTP connection... ftp = sshs.open_sftp() ftp.get_channel().settimeout(60) # Put all the necessary files in place... ftp.chdir(homedir) def send_dir(path): """Copy the contents of a directory to the server.""" logging.debug("rsyncing %s to %s" % (path, ftp.getcwd())) # TODO this should move to `vagrant rsync` from >= v1.5 try: subprocess.check_output(['rsync', '--recursive', '--perms', '--links', '--quiet', '--rsh=' + 'ssh -o StrictHostKeyChecking=no' + ' -o UserKnownHostsFile=/dev/null' + ' -o LogLevel=FATAL' + ' -o IdentitiesOnly=yes' + ' -o PasswordAuthentication=no' + ' -p ' + str(sshinfo['port']) + ' -i ' + sshinfo['idfile'], path, sshinfo['user'] + "@" + sshinfo['hostname'] + ":" + ftp.getcwd()], stderr=subprocess.STDOUT) except subprocess.CalledProcessError as e: raise FDroidException(str(e), e.output.decode()) from e logging.info("Preparing server for build...") serverpath = os.path.abspath(os.path.dirname(__file__)) ftp.mkdir('fdroidserver') ftp.chdir('fdroidserver') ftp.put(os.path.join(serverpath, '..', 'fdroid'), 'fdroid') ftp.put(os.path.join(serverpath, '..', 'gradlew-fdroid'), 'gradlew-fdroid') ftp.chmod('fdroid', 0o755) # nosec B103 permissions are appropriate ftp.chmod('gradlew-fdroid', 0o755) # nosec B103 permissions are appropriate send_dir(os.path.join(serverpath)) ftp.chdir(homedir) ftp.put(os.path.join(serverpath, '..', 'buildserver', 'config.buildserver.yml'), 'config.yml') ftp.chmod('config.yml', 0o600) # Copy over the ID (head commit hash) of the fdroidserver in use... with open(os.path.join(os.getcwd(), 'tmp', 'fdroidserverid'), 'wb') as fp: fp.write(subprocess.check_output(['git', 'rev-parse', 'HEAD'], cwd=serverpath)) ftp.put('tmp/fdroidserverid', 'fdroidserverid') # Copy the metadata - just the file for this app... ftp.mkdir('metadata') ftp.mkdir('srclibs') ftp.chdir('metadata') ftp.put(app.metadatapath, os.path.basename(app.metadatapath)) # And patches if there are any... if os.path.exists(os.path.join('metadata', app.id)): send_dir(os.path.join('metadata', app.id)) ftp.chdir(homedir) # Create the build directory... ftp.mkdir('build') ftp.chdir('build') ftp.mkdir('extlib') ftp.mkdir('srclib') # Copy any extlibs that are required... if build.extlibs: ftp.chdir(posixpath.join(homedir, 'build', 'extlib')) for lib in build.extlibs: lib = lib.strip() libsrc = os.path.join('build/extlib', lib) if not os.path.exists(libsrc): raise BuildException("Missing extlib {0}".format(libsrc)) lp = lib.split('/') for d in lp[:-1]: if d not in ftp.listdir(): ftp.mkdir(d) ftp.chdir(d) ftp.put(libsrc, lp[-1]) for _ignored in lp[:-1]: ftp.chdir('..') # Copy any srclibs that are required... srclibpaths = [] if build.srclibs: for lib in build.srclibs: srclibpaths.append( common.getsrclib(lib, 'build/srclib', basepath=True, prepare=False)) # If one was used for the main source, add that too. basesrclib = vcs.getsrclib() if basesrclib: srclibpaths.append(basesrclib) for name, number, lib in srclibpaths: logging.info("Sending srclib '%s'" % lib) ftp.chdir(posixpath.join(homedir, 'build', 'srclib')) if not os.path.exists(lib): raise BuildException("Missing srclib directory '" + lib + "'") fv = '.fdroidvcs-' + name ftp.put(os.path.join('build/srclib', fv), fv) send_dir(lib) # Copy the metadata file too... ftp.chdir(posixpath.join(homedir, 'srclibs')) srclibsfile = os.path.join('srclibs', name + '.yml') if os.path.isfile(srclibsfile): ftp.put(srclibsfile, os.path.basename(srclibsfile)) else: raise BuildException(_('cannot find required srclibs: "{path}"') .format(path=srclibsfile)) # Copy the main app source code # (no need if it's a srclib) if (not basesrclib) and os.path.exists(build_dir): ftp.chdir(posixpath.join(homedir, 'build')) fv = '.fdroidvcs-' + app.id ftp.put(os.path.join('build', fv), fv) send_dir(build_dir) # Execute the build script... logging.info("Starting build...") ssh_channel = sshs.get_transport().open_session() ssh_channel.get_pty() cmdline = posixpath.join(homedir, 'fdroidserver', 'fdroid') cmdline += ' build --on-server' if force: cmdline += ' --force --test' if options.verbose: cmdline += ' --verbose' if options.refresh_scanner or config.get('refresh_scanner'): cmdline += ' --refresh-scanner' if options.skipscan: cmdline += ' --skip-scan' if options.notarball: cmdline += ' --no-tarball' if (options.scan_binary or config.get('scan_binary')) and not options.skipscan: cmdline += ' --scan-binary' cmdline += " %s:%s" % (app.id, build.versionCode) ssh_channel.exec_command('bash --login -c "' + cmdline + '"') # nosec B601 inputs are sanitized # Fetch build process output ... try: cmd_stdout = ssh_channel.makefile('rb', 1024) output = bytes() output += common.get_android_tools_version_log().encode() while not ssh_channel.exit_status_ready(): line = cmd_stdout.readline() if line: if options.verbose: logging.debug("buildserver > " + str(line, 'utf-8', 'replace').rstrip()) output += line else: time.sleep(0.05) for line in cmd_stdout.readlines(): if options.verbose: logging.debug("buildserver > " + str(line, 'utf-8', 'replace').rstrip()) output += line finally: cmd_stdout.close() # Check build process exit status ... logging.info("...getting exit status") returncode = ssh_channel.recv_exit_status() if returncode != 0: if timeout_event.is_set(): message = "Timeout exceeded! Build VM force-stopped for {0}:{1}" else: message = "Build.py failed on server for {0}:{1}" raise BuildException(message.format(app.id, build.versionName), str(output, 'utf-8', 'replace')) # Retreive logs... toolsversion_log = common.get_toolsversion_logname(app, build) try: ftp.chdir(posixpath.join(homedir, log_dir)) ftp.get(toolsversion_log, os.path.join(log_dir, toolsversion_log)) logging.debug('retrieved %s', toolsversion_log) except Exception as e: logging.warning('could not get %s from builder vm: %s' % (toolsversion_log, e)) # Retrieve the built files... logging.info("Retrieving build output...") if force: ftp.chdir(posixpath.join(homedir, 'tmp')) else: ftp.chdir(posixpath.join(homedir, 'unsigned')) apkfile = common.get_release_filename(app, build) tarball = common.get_src_tarball_name(app.id, build.versionCode) try: ftp.get(apkfile, os.path.join(output_dir, apkfile)) if not options.notarball: ftp.get(tarball, os.path.join(output_dir, tarball)) except Exception as exc: raise BuildException( "Build failed for {0}:{1} - missing output files".format( app.id, build.versionName), str(output, 'utf-8', 'replace')) from exc ftp.close() finally: # Suspend the build server. vm = vmtools.get_build_vm('builder') logging.info('destroying buildserver after build') vm.destroy() # deploy logfile to repository web server if output: common.deploy_build_log_with_rsync(app.id, build.versionCode, output) else: logging.debug('skip publishing full build logs: ' 'no output present') def force_gradle_build_tools(build_dir, build_tools): """Manipulate build tools version used in top level gradle file. Parameters ---------- build_dir The directory to start looking for gradle files. build_tools The build tools version that should be forced to use. """ for root, dirs, files in os.walk(build_dir): for filename in files: if not filename.endswith('.gradle'): continue path = os.path.join(root, filename) if not os.path.isfile(path): continue logging.debug("Forcing build-tools %s in %s" % (build_tools, path)) common.regsub_file(r"""(\s*)buildToolsVersion([\s=]+).*""", r"""\1buildToolsVersion\2'%s'""" % build_tools, path) def transform_first_char(string, method): """Use method() on the first character of string.""" if len(string) == 0: return string if len(string) == 1: return method(string) return method(string[0]) + string[1:] def get_metadata_from_apk(app, build, apkfile): """Get the required metadata from the built APK. VersionName is allowed to be a blank string, i.e. '' Parameters ---------- app The app metadata used to build the APK. build The build that resulted in the APK. apkfile The path of the APK file. Returns ------- versionCode The versionCode from the APK or from the metadata is build.novcheck is set. versionName The versionName from the APK or from the metadata is build.novcheck is set. Raises ------ :exc:`~fdroidserver.exception.BuildException` If native code should have been built but was not packaged, no version information or no package ID could be found or there is a mismatch between the package ID in the metadata and the one found in the APK. """ appid, versionCode, versionName = common.get_apk_id(apkfile) native_code = common.get_native_code(apkfile) if build.buildjni and build.buildjni != ['no'] and not native_code: raise BuildException("Native code should have been built but none was packaged") if build.novcheck: versionCode = build.versionCode versionName = build.versionName if not versionCode or versionName is None: raise BuildException("Could not find version information in build in output") if not appid: raise BuildException("Could not find package ID in output") if appid != app.id: raise BuildException("Wrong package ID - build " + appid + " but expected " + app.id) return versionCode, versionName def build_local(app, build, vcs, build_dir, output_dir, log_dir, srclib_dir, extlib_dir, tmp_dir, force, onserver, refresh): """Do a build locally. Parameters ---------- app The metadata of the app to build. build The build of the app to build. vcs The version control system controller object of the app. build_dir The local source-code checkout directory of the app. output_dir The target folder for the build result. log_dir The directory in the VM where the build logs are getting stored. srclib_dir The path to the srclibs directory, usually 'build/srclib'. extlib_dir The path to the extlibs directory, usually 'build/extlib'. tmp_dir The temporary directory for building the source tarball. force Don't refresh the already cloned repository and make the build stop on exceptions. onserver Assume the build is happening inside the VM. refresh Enable fetching the latest refs from the VCS remote. Raises ------ :exc:`~fdroidserver.exception.BuildException` If running a `sudo` command failed, locking the root account failed, `sudo` couldn't be removed, cleaning the build environment failed, skipping the scanning has been requested but `scandelete` is present, errors occurred during scanning, running the `build` commands from the metadata failed, building native code failed, building with the specified build method failed, no output could be found with build method `maven`, more or less than one APK were found with build method `gradle`, less or more than one APKs match the `output` glob specified in the metadata, running a `postbuild` command specified in the metadata failed, the built APK is debuggable, the unsigned APK is not at the expected location, the APK does not contain the expected `versionName` and `versionCode` or undesired package names have been found in the APK. :exc:`~fdroidserver.exception.FDroidException` If no Android NDK version could be found and the build isn't run in a builder VM, the selected Android NDK is not a directory. """ ndk_path = build.ndk_path() if build.ndk or (build.buildjni and build.buildjni != ['no']): if not ndk_path: logging.warning("Android NDK version '%s' could not be found!" % build.ndk) logging.warning("Configured versions:") for k, v in config['ndk_paths'].items(): if k.endswith("_orig"): continue logging.warning(" %s: %s" % (k, v)) if onserver: common.auto_install_ndk(build) else: raise FDroidException() elif not os.path.isdir(ndk_path): logging.critical("Android NDK '%s' is not a directory!" % ndk_path) raise FDroidException() common.set_FDroidPopen_env(build) # create ..._toolsversion.log when running in builder vm if onserver: # before doing anything, run the sudo commands to setup the VM if build.sudo: logging.info("Running 'sudo' commands in %s" % os.getcwd()) p = FDroidPopen(['sudo', 'DEBIAN_FRONTEND=noninteractive', 'bash', '-e', '-u', '-o', 'pipefail', '-x', '-c', '; '.join(build.sudo)]) if p.returncode != 0: raise BuildException("Error running sudo command for %s:%s" % (app.id, build.versionName), p.output) p = FDroidPopen(['sudo', 'passwd', '--lock', 'root']) if p.returncode != 0: raise BuildException("Error locking root account for %s:%s" % (app.id, build.versionName), p.output) p = FDroidPopen(['sudo', 'SUDO_FORCE_REMOVE=yes', 'dpkg', '--purge', 'sudo']) if p.returncode != 0: raise BuildException("Error removing sudo for %s:%s" % (app.id, build.versionName), p.output) log_path = os.path.join(log_dir, common.get_toolsversion_logname(app, build)) with open(log_path, 'w') as f: f.write(common.get_android_tools_version_log()) else: if build.sudo: logging.warning('%s:%s runs this on the buildserver with sudo:\n\t%s\nThese commands were skipped because fdroid build is not running on a dedicated build server.' % (app.id, build.versionName, build.sudo)) # Prepare the source code... root_dir, srclibpaths = common.prepare_source(vcs, app, build, build_dir, srclib_dir, extlib_dir, onserver, refresh) # We need to clean via the build tool in case the binary dirs are # different from the default ones p = None gradletasks = [] bmethod = build.build_method() if bmethod == 'maven': logging.info("Cleaning Maven project...") cmd = [config['mvn3'], 'clean', '-Dandroid.sdk.path=' + config['sdk_path']] if '@' in build.maven: maven_dir = os.path.join(root_dir, build.maven.split('@', 1)[1]) maven_dir = os.path.normpath(maven_dir) else: maven_dir = root_dir p = FDroidPopen(cmd, cwd=maven_dir) elif bmethod == 'gradle': logging.info("Cleaning Gradle project...") if build.preassemble: gradletasks += build.preassemble flavours = build.gradle if flavours == ['yes']: flavours = [] flavours_cmd = ''.join([transform_first_char(flav, str.upper) for flav in flavours]) gradletasks += ['assemble' + flavours_cmd + 'Release'] cmd = [config['gradle']] if build.gradleprops: cmd += ['-P' + kv for kv in build.gradleprops] cmd += ['clean'] p = FDroidPopen(cmd, cwd=root_dir, envs={"GRADLE_VERSION_DIR": config['gradle_version_dir'], "CACHEDIR": config['cachedir']}) elif bmethod == 'ant': logging.info("Cleaning Ant project...") p = FDroidPopen(['ant', 'clean'], cwd=root_dir) if p is not None and p.returncode != 0: raise BuildException("Error cleaning %s:%s" % (app.id, build.versionName), p.output) for root, dirs, files in os.walk(build_dir): def del_dirs(dl): for d in dl: shutil.rmtree(os.path.join(root, d), ignore_errors=True) def del_files(fl): for f in fl: if f in files: os.remove(os.path.join(root, f)) if any(f in files for f in ['build.gradle', 'build.gradle.kts', 'settings.gradle', 'settings.gradle.kts']): # Even when running clean, gradle stores task/artifact caches in # .gradle/ as binary files. To avoid overcomplicating the scanner, # manually delete them, just like `gradle clean` should have removed # the build/* dirs. del_dirs([os.path.join('build', 'android-profile'), os.path.join('build', 'generated'), os.path.join('build', 'intermediates'), os.path.join('build', 'outputs'), os.path.join('build', 'reports'), os.path.join('build', 'tmp'), os.path.join('buildSrc', 'build'), '.gradle']) del_files(['gradlew', 'gradlew.bat']) if 'pom.xml' in files: del_dirs(['target']) if any(f in files for f in ['ant.properties', 'project.properties', 'build.xml']): del_dirs(['bin', 'gen']) if 'jni' in dirs: del_dirs(['obj']) if options.skipscan: if build.scandelete: raise BuildException("Refusing to skip source scan since scandelete is present") else: # Scan before building... logging.info("Scanning source for common problems...") scanner.options = options # pass verbose through count = scanner.scan_source(build_dir, build) if count > 0: if force: logging.warning(ngettext('Scanner found {} problem', 'Scanner found {} problems', count).format(count)) else: raise BuildException(ngettext( "Can't build due to {} error while scanning", "Can't build due to {} errors while scanning", count).format(count)) if not options.notarball: # Build the source tarball right before we build the release... logging.info("Creating source tarball...") tarname = common.get_src_tarball_name(app.id, build.versionCode) tarball = tarfile.open(os.path.join(tmp_dir, tarname), "w:gz") def tarexc(t): return None if any(t.name.endswith(s) for s in ['.svn', '.git', '.hg', '.bzr']) else t tarball.add(build_dir, tarname, filter=tarexc) tarball.close() # Run a build command if one is required... if build.build: logging.info("Running 'build' commands in %s" % root_dir) cmd = common.replace_config_vars("; ".join(build.build), build) # Substitute source library paths into commands... for name, number, libpath in srclibpaths: cmd = cmd.replace('$$' + name + '$$', os.path.join(os.getcwd(), libpath)) p = FDroidPopen(['bash', '-e', '-u', '-o', 'pipefail', '-x', '-c', cmd], cwd=root_dir) if p.returncode != 0: raise BuildException("Error running build command for %s:%s" % (app.id, build.versionName), p.output) # Build native stuff if required... if build.buildjni and build.buildjni != ['no']: logging.info("Building the native code") jni_components = build.buildjni if jni_components == ['yes']: jni_components = [''] cmd = [os.path.join(ndk_path, "ndk-build"), "-j1"] for d in jni_components: if d: logging.info("Building native code in '%s'" % d) else: logging.info("Building native code in the main project") manifest = os.path.join(root_dir, d, 'AndroidManifest.xml') if os.path.exists(manifest): # Read and write the whole AM.xml to fix newlines and avoid # the ndk r8c or later 'wordlist' errors. The outcome of this # under gnu/linux is the same as when using tools like # dos2unix, but the native python way is faster and will # work in non-unix systems. manifest_text = open(manifest, 'U').read() open(manifest, 'w').write(manifest_text) # In case the AM.xml read was big, free the memory del manifest_text p = FDroidPopen(cmd, cwd=os.path.join(root_dir, d)) if p.returncode != 0: raise BuildException("NDK build failed for %s:%s" % (app.id, build.versionName), p.output) p = None # Build the release... if bmethod == 'maven': logging.info("Building Maven project...") if '@' in build.maven: maven_dir = os.path.join(root_dir, build.maven.split('@', 1)[1]) else: maven_dir = root_dir mvncmd = [config['mvn3'], '-Dandroid.sdk.path=' + config['sdk_path'], '-Dmaven.jar.sign.skip=true', '-Dmaven.test.skip=true', '-Dandroid.sign.debug=false', '-Dandroid.release=true', 'package'] if build.target: target = build.target.split('-')[1] common.regsub_file(r'[0-9]*', r'%s' % target, os.path.join(root_dir, 'pom.xml')) if '@' in build.maven: common.regsub_file(r'[0-9]*', r'%s' % target, os.path.join(maven_dir, 'pom.xml')) p = FDroidPopen(mvncmd, cwd=maven_dir) bindir = os.path.join(root_dir, 'target') elif bmethod == 'gradle': logging.info("Building Gradle project...") cmd = [config['gradle']] if build.gradleprops: cmd += ['-P' + kv for kv in build.gradleprops] cmd += gradletasks p = FDroidPopen(cmd, cwd=root_dir, envs={"GRADLE_VERSION_DIR": config['gradle_version_dir'], "CACHEDIR": config['cachedir']}) elif bmethod == 'ant': logging.info("Building Ant project...") cmd = ['ant'] if build.antcommands: cmd += build.antcommands else: cmd += ['release'] p = FDroidPopen(cmd, cwd=root_dir) bindir = os.path.join(root_dir, 'bin') if os.path.isdir(os.path.join(build_dir, '.git')): import git commit_id = common.get_head_commit_id(git.repo.Repo(build_dir)) else: commit_id = build.commit if p is not None and p.returncode != 0: raise BuildException("Build failed for %s:%s@%s" % (app.id, build.versionName, commit_id), p.output) logging.info("Successfully built version {versionName} of {appid} from {commit_id}" .format(versionName=build.versionName, appid=app.id, commit_id=commit_id)) omethod = build.output_method() if omethod == 'maven': stdout_apk = '\n'.join([ line for line in p.output.splitlines() if any( a in line for a in ('.apk', '.ap_', '.jar'))]) m = re.match(r".*^\[INFO\] .*apkbuilder.*/([^/]*)\.apk", stdout_apk, re.S | re.M) if not m: m = re.match(r".*^\[INFO\] Creating additional unsigned apk file .*/([^/]+)\.apk[^l]", stdout_apk, re.S | re.M) if not m: m = re.match(r'.*^\[INFO\] [^$]*aapt \[package,[^$]*' + bindir + r'/([^/]+)\.ap[_k][,\]]', stdout_apk, re.S | re.M) if not m: m = re.match(r".*^\[INFO\] Building jar: .*/" + bindir + r"/(.+)\.jar", stdout_apk, re.S | re.M) if not m: raise BuildException('Failed to find output') src = m.group(1) src = os.path.join(bindir, src) + '.apk' elif omethod == 'gradle': src = None apk_dirs = [ # gradle plugin >= 3.0 os.path.join(root_dir, 'build', 'outputs', 'apk', 'release'), # gradle plugin < 3.0 and >= 0.11 os.path.join(root_dir, 'build', 'outputs', 'apk'), # really old path os.path.join(root_dir, 'build', 'apk'), ] # If we build with gradle flavours with gradle plugin >= 3.0 the APK will be in # a subdirectory corresponding to the flavour command used, but with different # capitalization. if flavours_cmd: apk_dirs.append(os.path.join(root_dir, 'build', 'outputs', 'apk', transform_first_char(flavours_cmd, str.lower), 'release')) for apks_dir in apk_dirs: for apkglob in ['*-release-unsigned.apk', '*-unsigned.apk', '*.apk']: apks = glob.glob(os.path.join(apks_dir, apkglob)) if len(apks) > 1: raise BuildException('More than one resulting apks found in %s' % apks_dir, '\n'.join(apks)) if len(apks) == 1: src = apks[0] break if src is not None: break if src is None: raise BuildException('Failed to find any output apks') elif omethod == 'ant': stdout_apk = '\n'.join([ line for line in p.output.splitlines() if '.apk' in line]) src = re.match(r".*^.*Creating (.+) for release.*$.*", stdout_apk, re.S | re.M).group(1) src = os.path.join(bindir, src) elif omethod == 'raw': output_path = common.replace_build_vars(build.output, build) globpath = os.path.join(root_dir, output_path) apks = glob.glob(globpath) if len(apks) > 1: raise BuildException('Multiple apks match %s' % globpath, '\n'.join(apks)) if len(apks) < 1: raise BuildException('No apks match %s' % globpath) src = os.path.normpath(apks[0]) # Run a postbuild command if one is required... if build.postbuild: logging.info(f"Running 'postbuild' commands in {root_dir}") cmd = common.replace_config_vars("; ".join(build.postbuild), build) # Substitute source library paths into commands... for name, number, libpath in srclibpaths: cmd = cmd.replace(f"$${name}$$", str(Path.cwd() / libpath)) cmd = cmd.replace('$$OUT$$', str(Path(src).resolve())) p = FDroidPopen(['bash', '-e', '-u', '-o', 'pipefail', '-x', '-c', cmd], cwd=root_dir) if p.returncode != 0: raise BuildException("Error running postbuild command for " f"{app.id}:{build.versionName}", p.output) # Make sure it's not debuggable... if common.is_debuggable_or_testOnly(src): raise BuildException( "%s: debuggable or testOnly set in AndroidManifest.xml" % src ) # By way of a sanity check, make sure the version and version # code in our new APK match what we expect... logging.debug("Checking " + src) if not os.path.exists(src): raise BuildException("Unsigned APK is not at expected location of " + src) if common.get_file_extension(src) == 'apk': vercode, version = get_metadata_from_apk(app, build, src) if version != build.versionName or vercode != build.versionCode: raise BuildException(("Unexpected version/version code in output;" " APK: '%s' / '%d', " " Expected: '%s' / '%d'") % (version, vercode, build.versionName, build.versionCode)) if (options.scan_binary or config.get('scan_binary')) and not options.skipscan: if scanner.scan_binary(src): raise BuildException("Found blocklisted packages in final apk!") # Copy the unsigned APK to our destination directory for further # processing (by publish.py)... dest = os.path.join( output_dir, common.get_release_filename( app, build, common.get_file_extension(src) ) ) shutil.copyfile(src, dest) # Move the source tarball into the output directory... if output_dir != tmp_dir and not options.notarball: shutil.move(os.path.join(tmp_dir, tarname), os.path.join(output_dir, tarname)) def trybuild(app, build, build_dir, output_dir, log_dir, also_check_dir, srclib_dir, extlib_dir, tmp_dir, repo_dir, vcs, test, server, force, onserver, refresh): """Build a particular version of an application, if it needs building. Parameters ---------- app The metadata of the app to build. build The build of the app to build. build_dir The local source-code checkout directory of the app. output_dir The directory where the build output will go. Usually this is the 'unsigned' directory. log_dir The directory in the VM where the build logs are getting stored. also_check_dir An additional location for checking if the build is necessary (usually the archive repo). srclib_dir The path to the srclibs directory, usually 'build/srclib'. extlib_dir The path to the extlibs directory, usually 'build/extlib'. tmp_dir The temporary directory for building the source tarball of the app to build. repo_dir The repo directory - used for checking if the build is necessary. vcs The version control system controller object of the app to build. test True if building in test mode, in which case the build will always happen, even if the output already exists. In test mode, the output directory should be a temporary location, not any of the real ones. server Use buildserver VM for building. force Build app regardless of disabled state or scanner errors. onserver Assume the build is happening inside the VM. refresh Enable fetching the latest refs from the VCS remote. Returns ------- status True if the build was done, False if it wasn't necessary. """ dest_file = common.get_release_filename(app, build) dest = os.path.join(output_dir, dest_file) dest_repo = os.path.join(repo_dir, dest_file) if not test: if os.path.exists(dest) or os.path.exists(dest_repo): return False if also_check_dir: dest_also = os.path.join(also_check_dir, dest_file) if os.path.exists(dest_also): return False if build.disable and not options.force: return False logging.info("Building version %s (%s) of %s" % ( build.versionName, build.versionCode, app.id)) if server: # When using server mode, still keep a local cache of the repo, by # grabbing the source now. vcs.gotorevision(build.commit, refresh) # Initialise submodules if required if build.submodules: vcs.initsubmodules() build_server(app, build, vcs, build_dir, output_dir, log_dir, force) else: build_local(app, build, vcs, build_dir, output_dir, log_dir, srclib_dir, extlib_dir, tmp_dir, force, onserver, refresh) return True def force_halt_build(timeout): """Halt the currently running Vagrant VM, to be called from a Timer. Parameters ---------- timeout The timeout in seconds. """ logging.error(_('Force halting build after {0} sec timeout!').format(timeout)) timeout_event.set() if ssh_channel: ssh_channel.close() vm = vmtools.get_build_vm('builder') vm.destroy() def keep_when_not_allowed(): """Control if APKs signed by keys not in AllowedAPKSigningKeys are removed.""" return ( (options is not None and options.keep_when_not_allowed) or (config is not None and config.get('keep_when_not_allowed')) or common.default_config['keep_when_not_allowed'] ) def parse_commandline(): """Parse the command line. Returns ------- options The resulting options parsed from the command line arguments. parser The argument parser. """ parser = argparse.ArgumentParser(usage="%(prog)s [options] [APPID[:VERCODE] [APPID[:VERCODE] ...]]") common.setup_global_opts(parser) parser.add_argument("appid", nargs='*', help=_("application ID with optional versionCode in the form APPID[:VERCODE]")) parser.add_argument("-l", "--latest", action="store_true", default=False, help=_("Build only the latest version of each package")) parser.add_argument("-s", "--stop", action="store_true", default=False, help=_("Make the build stop on exceptions")) parser.add_argument("-t", "--test", action="store_true", default=False, help=_("Test mode - put output in the tmp directory only, and always build, even if the output already exists.")) parser.add_argument("--server", action="store_true", default=False, help=_("Use build server")) # this option is internal API for telling fdroid that # it's running inside a buildserver vm. parser.add_argument("--on-server", dest="onserver", action="store_true", default=False, help=argparse.SUPPRESS) parser.add_argument("--skip-scan", dest="skipscan", action="store_true", default=False, help=_("Skip scanning the source code for binaries and other problems")) parser.add_argument("--scan-binary", action="store_true", default=False, help=_("Scan the resulting APK(s) for known non-free classes.")) parser.add_argument("--no-tarball", dest="notarball", action="store_true", default=False, help=_("Don't create a source tarball, useful when testing a build")) parser.add_argument("--no-refresh", dest="refresh", action="store_false", default=True, help=_("Don't refresh the repository, useful when testing a build with no internet connection")) parser.add_argument("-r", "--refresh-scanner", dest="refresh_scanner", action="store_true", default=False, help=_("Refresh and cache scanner rules and signatures from the network")) parser.add_argument("-f", "--force", action="store_true", default=False, help=_("Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode.")) parser.add_argument("-a", "--all", action="store_true", default=False, help=_("Build all applications available")) parser.add_argument("--keep-when-not-allowed", default=False, action="store_true", help=argparse.SUPPRESS) parser.add_argument("-w", "--wiki", default=False, action="store_true", help=argparse.SUPPRESS) metadata.add_metadata_arguments(parser) options = common.parse_args(parser) metadata.warnings_action = options.W # Force --stop with --on-server to get correct exit code if options.onserver: options.stop = True if options.force and not options.test: parser.error("option %s: Force is only allowed in test mode" % "force") return options, parser options = None config = None fdroidserverid = None start_timestamp = time.gmtime() status_output = None timeout_event = threading.Event() def main(): """Build a package from source. The behaviour of this function is influenced by the configuration file as well as command line parameters. Raises ------ :exc:`~fdroidserver.exception.FDroidException` If more than one local metadata file has been found, no app metadata has been found, there are no apps to process, downloading binaries for checking the reproducibility of a built binary failed, the built binary is different from supplied reference binary, the reference binary is signed with a different signing key than expected, a VCS error occured while building an app or a different error occured while building an app. """ global options, config, buildserverid, fdroidserverid options, parser = parse_commandline() # The defaults for .fdroid.* metadata that is included in a git repo are # different than for the standard metadata/ layout because expectations # are different. In this case, the most common user will be the app # developer working on the latest update of the app on their own machine. local_metadata_files = common.get_local_metadata_files() if len(local_metadata_files) == 1: # there is local metadata in an app's source config = dict(common.default_config) # `fdroid build` should build only the latest version by default since # most of the time the user will be building the most recent update if not options.all: options.latest = True elif len(local_metadata_files) > 1: raise FDroidException("Only one local metadata file allowed! Found: " + " ".join(local_metadata_files)) else: if not os.path.isdir('metadata') and len(local_metadata_files) == 0: raise FDroidException("No app metadata found, nothing to process!") if not options.appid and not options.all: parser.error("option %s: If you really want to build all the apps, use --all" % "all") config = common.read_config() if config['build_server_always']: options.server = True log_dir = 'logs' if not os.path.isdir(log_dir): logging.info("Creating log directory") os.makedirs(log_dir) tmp_dir = 'tmp' if not os.path.isdir(tmp_dir): logging.info("Creating temporary directory") os.makedirs(tmp_dir) if options.test: output_dir = tmp_dir else: output_dir = 'unsigned' if not os.path.isdir(output_dir): logging.info("Creating output directory") os.makedirs(output_dir) binaries_dir = os.path.join(output_dir, 'binaries') if config['archive_older'] != 0: also_check_dir = 'archive' else: also_check_dir = None if options.onserver: status_output = dict() # HACK dummy placeholder else: status_output = common.setup_status_output(start_timestamp) repo_dir = 'repo' build_dir = 'build' if not os.path.isdir(build_dir): logging.info("Creating build directory") os.makedirs(build_dir) srclib_dir = os.path.join(build_dir, 'srclib') extlib_dir = os.path.join(build_dir, 'extlib') apps = common.read_app_args(options.appid, allow_version_codes=True, sort_by_time=True) for appid, app in list(apps.items()): if (app.get('Disabled') and not options.force) or not app.get('RepoType') or not app.get('Builds', []): del apps[appid] if not apps: raise FDroidException("No apps to process.") # make sure enough open files are allowed to process everything try: import resource # not available on Windows soft, hard = resource.getrlimit(resource.RLIMIT_NOFILE) if len(apps) > soft: try: soft = len(apps) * 2 if soft > hard: soft = hard resource.setrlimit(resource.RLIMIT_NOFILE, (soft, hard)) logging.debug(_('Set open file limit to {integer}') .format(integer=soft)) except (OSError, ValueError) as e: logging.warning(_('Setting open file limit failed: ') + str(e)) except ImportError: pass if options.latest: for app in apps.values(): for build in reversed(app.get('Builds', [])): if build.disable and not options.force: continue app['Builds'] = [build] break if not options.onserver: common.write_running_status_json(status_output) # Build applications... failed_builds = [] build_succeeded_ids = [] status_output['failedBuilds'] = failed_builds status_output['successfulBuildIds'] = build_succeeded_ids # Only build for 72 hours, then stop gracefully. endtime = time.time() + 72 * 60 * 60 max_build_time_reached = False for appid, app in apps.items(): first = True for build in app.get('Builds', []): if time.time() > endtime: max_build_time_reached = True break # Enable watchdog timer (2 hours by default). if build.timeout is None: timeout = 7200 else: timeout = build.timeout if options.server and timeout > 0: logging.debug(_('Setting {0} sec timeout for this build').format(timeout)) timer = threading.Timer(timeout, force_halt_build, [timeout]) timeout_event.clear() timer.start() else: timer = None tools_version_log = '' try: # For the first build of a particular app, we need to set up # the source repo. We can reuse it on subsequent builds, if # there are any. if first: vcs, build_dir = common.setup_vcs(app) first = False logging.debug("Checking %s:%s" % (appid, build.versionCode)) if trybuild(app, build, build_dir, output_dir, log_dir, also_check_dir, srclib_dir, extlib_dir, tmp_dir, repo_dir, vcs, options.test, options.server, options.force, options.onserver, options.refresh): toolslog = os.path.join(log_dir, common.get_toolsversion_logname(app, build)) if not options.onserver and os.path.exists(toolslog): with open(toolslog, 'r') as f: tools_version_log = ''.join(f.readlines()) os.remove(toolslog) if url := build.binary or app.Binaries: # This is an app where we build from source, and # verify the APK contents against a developer's # binary. We get that binary now, and save it # alongside our built one in the 'unsigend' # directory. if not os.path.isdir(binaries_dir): os.makedirs(binaries_dir) logging.info("Created directory for storing " "developer supplied reference " "binaries: '{path}'" .format(path=binaries_dir)) url = url.replace('%v', build.versionName) url = url.replace('%c', str(build.versionCode)) logging.info("...retrieving " + url) of = re.sub(r'\.apk$', '.binary.apk', common.get_release_filename(app, build)) of = os.path.join(binaries_dir, of) try: net.download_file(url, local_filename=of) except requests.exceptions.HTTPError as e: raise FDroidException( 'Downloading Binaries from %s failed.' % url) from e # Now we check whether the build can be verified to # match the supplied binary or not. Should the # comparison fail, we mark this build as a failure # and remove everything from the unsigend folder. with tempfile.TemporaryDirectory() as tmpdir: unsigned_apk = \ common.get_release_filename(app, build) unsigned_apk = \ os.path.join(output_dir, unsigned_apk) compare_result = \ common.verify_apks(of, unsigned_apk, tmpdir) if compare_result: if options.test: logging.warning(_('Keeping failed build "{apkfilename}"') .format(apkfilename=unsigned_apk)) else: logging.debug('removing %s', unsigned_apk) os.remove(unsigned_apk) logging.debug('removing %s', of) os.remove(of) compare_result = compare_result.split('\n') line_count = len(compare_result) compare_result = compare_result[:299] if line_count > len(compare_result): line_difference = \ line_count - len(compare_result) compare_result.append('%d more lines ...' % line_difference) compare_result = '\n'.join(compare_result) raise FDroidException('compared built binary ' 'to supplied reference ' 'binary but failed', compare_result) else: logging.info('compared built binary to ' 'supplied reference binary ' 'successfully') used_key = common.apk_signer_fingerprint(of) expected_keys = app['AllowedAPKSigningKeys'] if used_key is None: logging.warn(_('reference binary missing ' 'signature')) elif len(expected_keys) == 0: logging.warn(_('AllowedAPKSigningKeys missing ' 'but reference binary supplied')) elif used_key not in expected_keys: if options.test or keep_when_not_allowed(): logging.warning(_('Keeping failed build "{apkfilename}"') .format(apkfilename=unsigned_apk)) else: logging.debug('removing %s', unsigned_apk) os.remove(unsigned_apk) logging.debug('removing %s', of) os.remove(of) raise FDroidException('supplied reference ' 'binary signed with ' '{signer} instead of ' 'with {expected}'. format(signer=used_key, expected=expected_keys)) else: logging.info(_('supplied reference binary has ' 'allowed signer {signer}'). format(signer=used_key)) build_succeeded_ids.append([app['id'], build.versionCode]) if not options.onserver: common.write_running_status_json(status_output) except VCSException as vcse: reason = str(vcse).split('\n', 1)[0] if options.verbose else str(vcse) logging.error("VCS error while building app %s: %s" % ( appid, reason)) if options.stop: logging.debug("Error encountered, stopping by user request.") common.force_exit(1) failed_builds.append((appid, build.versionCode)) common.deploy_build_log_with_rsync( appid, build.versionCode, "".join(traceback.format_exc()) ) if not options.onserver: common.write_running_status_json(status_output) except FDroidException as e: tstamp = time.strftime("%Y-%m-%d %H:%M:%SZ", time.gmtime()) with open(os.path.join(log_dir, appid + '.log'), 'a+') as f: f.write('\n\n============================================================\n') f.write('versionCode: %s\nversionName: %s\ncommit: %s\n' % (build.versionCode, build.versionName, build.commit)) f.write('Build completed at ' + tstamp + '\n') f.write('\n' + tools_version_log + '\n') f.write(str(e)) logging.error("Could not build app %s: %s" % (appid, e)) if options.stop: logging.debug("Error encountered, stopping by user request.") common.force_exit(1) failed_builds.append((appid, build.versionCode)) common.deploy_build_log_with_rsync( appid, build.versionCode, "".join(traceback.format_exc()) ) if not options.onserver: common.write_running_status_json(status_output) except Exception: logging.error("Could not build app %s due to unknown error: %s" % ( appid, traceback.format_exc())) if options.stop: logging.debug("Error encountered, stopping by user request.") common.force_exit(1) failed_builds.append((appid, build.versionCode)) common.deploy_build_log_with_rsync( appid, build.versionCode, "".join(traceback.format_exc()) ) if not options.onserver: common.write_running_status_json(status_output) if timer: timer.cancel() # kill the watchdog timer if max_build_time_reached: status_output['maxBuildTimeReached'] = True logging.info("Stopping after global build timeout...") break for app in build_succeeded_ids: logging.info("success: %s" % app[0]) if not options.verbose: for fb in failed_builds: logging.info('Build for app {}:{} failed'.format(*fb)) logging.info(_("Finished")) if len(build_succeeded_ids) > 0: logging.info(ngettext("{} build succeeded", "{} builds succeeded", len(build_succeeded_ids)).format(len(build_succeeded_ids))) if len(failed_builds) > 0: logging.info(ngettext("{} build failed", "{} builds failed", len(failed_builds)).format(len(failed_builds))) if options.server: if os.cpu_count(): status_output['hostOsCpuCount'] = os.cpu_count() if os.path.isfile('/proc/meminfo') and os.access('/proc/meminfo', os.R_OK): with open('/proc/meminfo') as fp: for line in fp: m = re.search(r'MemTotal:\s*([0-9].*)', line) if m: status_output['hostProcMeminfoMemTotal'] = m.group(1) break buildserver_config = 'builder/Vagrantfile' if os.path.isfile(buildserver_config) and os.access(buildserver_config, os.R_OK): with open(buildserver_config) as configfile: for line in configfile: m = re.search(r'cpus\s*=\s*([0-9].*)', line) if m: status_output['guestVagrantVmCpus'] = m.group(1) m = re.search(r'memory\s*=\s*([0-9].*)', line) if m: status_output['guestVagrantVmMemory'] = m.group(1) if buildserverid: status_output['buildserver'] = {'commitId': buildserverid} if not options.onserver: common.write_status_json(status_output) # hack to ensure this exits, even is some threads are still running common.force_exit() if __name__ == "__main__": main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/fdroidserver/checkupdates.py0000644000175000017500000010310514770502071020435 0ustar00hanshans#!/usr/bin/env python3 """Check for updates to applications.""" # # checkupdates.py - part of the FDroid server tools # Copyright (C) 2010-2015, Ciaran Gultnieks, ciaran@ciarang.com # Copyright (C) 2013-2014 Daniel Martí # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import configparser import git import os import re import urllib.request import urllib.error import time import subprocess import sys from argparse import ArgumentParser import traceback import logging import copy import urllib.parse from pathlib import Path from typing import Optional from . import _ from . import common from . import metadata from . import net from .exception import VCSException, NoSubmodulesException, FDroidException, MetaDataException # https://gitlab.com/fdroid/checkupdates-runner/-/blob/1861899262a62a4ed08fa24e5449c0368dfb7617/.gitlab-ci.yml#L36 BOT_EMAIL = 'fdroidci@bubu1.eu' def check_http(app: metadata.App) -> tuple[Optional[str], Optional[int]]: """Check for a new version by looking at a document retrieved via HTTP. The app's UpdateCheckData field is used to provide the information required. Parameters ---------- app The App instance to check for updates for. Returns ------- version The found versionName or None if the versionName should be ignored according to UpdateCheckIgnore. vercode The found versionCode or None if the versionCode should be ignored according to UpdateCheckIgnore. Raises ------ :exc:`~fdroidserver.exception.FDroidException` If UpdateCheckData is missing or is an invalid URL or if there is no match for the provided versionName or versionCode regex. """ if not app.UpdateCheckData: raise FDroidException('Missing Update Check Data') urlcode, codeex, urlver, verex = app.UpdateCheckData.split('|') parsed = urllib.parse.urlparse(urlcode) if not parsed.netloc or not parsed.scheme or parsed.scheme != 'https': raise FDroidException(_('UpdateCheckData has invalid URL: {url}').format(url=urlcode)) if urlver != '.': parsed = urllib.parse.urlparse(urlver) if not parsed.netloc or not parsed.scheme or parsed.scheme != 'https': raise FDroidException(_('UpdateCheckData has invalid URL: {url}').format(url=urlver)) logging.debug("...requesting {0}".format(urlcode)) req = urllib.request.Request(urlcode, None, headers=net.HEADERS) resp = urllib.request.urlopen(req, None, 20) # nosec B310 scheme is filtered above page = resp.read().decode('utf-8') m = re.search(codeex, page) if not m: raise FDroidException("No RE match for version code") vercode = common.version_code_string_to_int(m.group(1).strip()) if urlver != '.': logging.debug("...requesting {0}".format(urlver)) req = urllib.request.Request(urlver, None) resp = urllib.request.urlopen(req, None, 20) # nosec B310 scheme is filtered above page = resp.read().decode('utf-8') m = re.search(verex, page) if not m: raise FDroidException("No RE match for version") version = m.group(1) if app.UpdateCheckIgnore and re.search(app.UpdateCheckIgnore, version): logging.info("Version {version} for {appid} is ignored".format(version=version, appid=app.id)) return (None, None) return (version, vercode) def check_tags(app: metadata.App, pattern: str) -> tuple[str, int, str]: """Check for a new version by looking at the tags in the source repo. Whether this can be used reliably or not depends on the development procedures used by the project's developers. Use it with caution, because it's inappropriate for many projects. Parameters ---------- app The App instance to check for updates for. pattern The pattern a tag needs to match to be considered. Returns ------- versionName The highest found versionName. versionCode The highest found versionCode. ref The Git reference, commit hash or tag name, of the highest found versionName, versionCode. Raises ------ :exc:`~fdroidserver.exception.MetaDataException` If this function is not suitable for the RepoType of the app or information is missing to perform this type of check. :exc:`~fdroidserver.exception.FDroidException` If no matching tags or no information whatsoever could be found. """ if app.RepoType == 'srclib': build_dir = Path('build/srclib') / app.Repo repotype = common.getsrclibvcs(app.Repo) else: build_dir = Path('build') / app.id repotype = app.RepoType if repotype not in ('git', 'git-svn', 'hg', 'bzr'): raise MetaDataException(_('Tags update mode only works for git, hg, bzr and git-svn repositories currently')) if repotype == 'git-svn' and ';' not in app.Repo: raise MetaDataException(_('Tags update mode used in git-svn, but the repo was not set up with tags')) # Set up vcs interface and make sure we have the latest code... vcs = common.getvcs(app.RepoType, app.Repo, build_dir) vcs.gotorevision(None) last_build = get_last_build_from_app(app) try_init_submodules(app, last_build, vcs) htag = None hver = None hcode = 0 tags = [] if repotype == 'git': tags = vcs.latesttags() else: tags = vcs.gettags() if not tags: raise FDroidException(_('No tags found')) logging.debug("All tags: " + ','.join(tags)) if pattern: pat = re.compile(pattern) tags = [tag for tag in tags if pat.match(tag)] if not tags: raise FDroidException(_('No matching tags found')) logging.debug("Matching tags: " + ','.join(tags)) if len(tags) > 5 and repotype == 'git': tags = tags[:5] logging.debug("Latest tags: " + ','.join(tags)) for tag in tags: logging.debug("Check tag: '{0}'".format(tag)) vcs.gotorevision(tag) try_init_submodules(app, last_build, vcs) if app.UpdateCheckData: filecode, codeex, filever, verex = app.UpdateCheckData.split('|') if filecode: filecode = build_dir / filecode if not filecode.is_file(): logging.debug("UpdateCheckData file {0} not found in tag {1}".format(filecode, tag)) continue filecontent = filecode.read_text() else: filecontent = tag vercode = tag if codeex: m = re.search(codeex, filecontent) if not m: logging.debug(f"UpdateCheckData regex {codeex} for version code" f" has no match in tag {tag}") continue vercode = m.group(1).strip() if filever: if filever != '.': filever = build_dir / filever if filever.is_file(): filecontent = filever.read_text() else: logging.debug("UpdateCheckData file {0} not found in tag {1}".format(filever, tag)) else: filecontent = tag version = tag if verex: m = re.search(verex, filecontent) if not m: logging.debug(f"UpdateCheckData regex {verex} for version name" f" has no match in tag {tag}") continue version = m.group(1) logging.debug("UpdateCheckData found version {0} ({1})" .format(version, vercode)) vercode = common.version_code_string_to_int(vercode) if vercode > hcode: htag = tag hcode = vercode hver = version else: for subdir in possible_subdirs(app): root_dir = build_dir / subdir paths = common.manifest_paths(root_dir, last_build.gradle) version, vercode, _package = common.parse_androidmanifests(paths, app) if version in ('Unknown', 'Ignore'): version = tag if vercode: logging.debug("Manifest exists in subdir '{0}'. Found version {1} ({2})" .format(subdir, version, vercode)) if vercode > hcode: htag = tag hcode = vercode hver = version if hver: if htag != tags[0]: logging.warning( "{appid}: latest tag {tag} does not contain highest version {version}".format( appid=app.id, tag=tags[0], version=hver ) ) try: commit = vcs.getref(htag) if commit: return (hver, hcode, commit) except VCSException: pass return (hver, hcode, htag) raise FDroidException(_("Couldn't find any version information")) def check_repomanifest(app: metadata.App, branch: Optional[str] = None) -> tuple[str, int]: """Check for a new version by looking at the AndroidManifest.xml at the HEAD of the source repo. Whether this can be used reliably or not depends on the development procedures used by the project's developers. Use it with caution, because it's inappropriate for many projects. Parameters ---------- app The App instance to check for updates for. branch The VCS branch where to search for versionCode, versionName. Returns ------- versionName The highest found versionName. versionCode The highest found versionCode. Raises ------ :exc:`~fdroidserver.exception.FDroidException` If no package id or no version information could be found. """ if app.RepoType == 'srclib': build_dir = Path('build/srclib') / app.Repo repotype = common.getsrclibvcs(app.Repo) else: build_dir = Path('build') / app.id repotype = app.RepoType # Set up vcs interface and make sure we have the latest code... vcs = common.getvcs(app.RepoType, app.Repo, build_dir) if repotype == 'git': if branch: branch = 'origin/' + branch vcs.gotorevision(branch) elif repotype == 'git-svn': vcs.gotorevision(branch) elif repotype == 'hg': vcs.gotorevision(branch) elif repotype == 'bzr': vcs.gotorevision(None) last_build = get_last_build_from_app(app) try_init_submodules(app, last_build, vcs) hpak = None hver = None hcode = 0 for subdir in possible_subdirs(app): root_dir = build_dir / subdir paths = common.manifest_paths(root_dir, last_build.gradle) version, vercode, package = common.parse_androidmanifests(paths, app) if vercode: logging.debug("Manifest exists in subdir '{0}'. Found version {1} ({2})" .format(subdir, version, vercode)) if vercode > hcode: hpak = package hcode = vercode hver = version if not hpak: raise FDroidException(_("Couldn't find package ID")) if hver: return (hver, hcode) raise FDroidException(_("Couldn't find any version information")) def try_init_submodules(app: metadata.App, last_build: metadata.Build, vcs: common.vcs): """Try to init submodules if the last build entry uses them. They might have been removed from the app's repo in the meantime, so if we can't find any submodules we continue with the updates check. If there is any other error in initializing them then we stop the check. """ if last_build.submodules: try: vcs.initsubmodules() except NoSubmodulesException: logging.info("No submodules present for {}".format(_getappname(app))) except VCSException: logging.info("submodule broken for {}".format(_getappname(app))) def dirs_with_manifest(startdir: str): """Find directories containing a manifest file. Yield all directories under startdir that contain any of the manifest files, and thus are probably an Android project. Parameters ---------- startdir Directory to be walked down for search Yields ------ path : :class:`pathlib.Path` or None A directory that contains a manifest file of an Android project, None if no directory could be found """ for root, dirs, files in os.walk(startdir): dirs.sort() if any(m in files for m in [ 'AndroidManifest.xml', 'pom.xml', 'build.gradle', 'build.gradle.kts']): yield Path(root) def possible_subdirs(app: metadata.App): """Try to find a new subdir starting from the root build_dir. Yields said subdir relative to the build dir if found, None otherwise. Parameters ---------- app The app to check for subdirs Yields ------ subdir : :class:`pathlib.Path` or None A possible subdir, None if no subdir could be found """ if app.RepoType == 'srclib': build_dir = Path('build/srclib') / app.Repo else: build_dir = Path('build') / app.id last_build = get_last_build_from_app(app) for d in dirs_with_manifest(build_dir): m_paths = common.manifest_paths(d, last_build.gradle) package = common.parse_androidmanifests(m_paths, app)[2] if package is not None or app.UpdateCheckName == "Ignore": subdir = d.relative_to(build_dir) logging.debug("Adding possible subdir %s" % subdir) yield subdir def _getappname(app: metadata.App) -> str: return common.get_app_display_name(app) def _getcvname(app: metadata.App) -> str: return '%s (%s)' % (app.CurrentVersion, app.CurrentVersionCode) def fetch_autoname(app: metadata.App, tag: str) -> Optional[str]: """Fetch AutoName. Get the to be displayed name of an app from the source code and adjust the App instance in case it is different name has been found. Parameters ---------- app The App instance to get the AutoName for. tag Tag to fetch AutoName at. Returns ------- commitmsg Commit message about the name change. None in case checking for the name is disabled, a VCSException occured or no name could be found. """ if not app.RepoType or app.UpdateCheckMode in ('None', 'Static') \ or app.UpdateCheckName == "Ignore": return None if app.RepoType == 'srclib': build_dir = Path('build/srclib') / app.Repo else: build_dir = Path('build') / app.id try: vcs = common.getvcs(app.RepoType, app.Repo, build_dir) vcs.gotorevision(tag) except VCSException: return None last_build = get_last_build_from_app(app) logging.debug("...fetch auto name from " + str(build_dir)) new_name = None for subdir in possible_subdirs(app): root_dir = build_dir / subdir new_name = common.fetch_real_name(root_dir, last_build.gradle) if new_name is not None: break commitmsg = None if new_name: logging.debug("...got autoname '" + new_name + "'") if new_name != app.AutoName: app.AutoName = new_name if not commitmsg: commitmsg = "Set autoname of {0}".format(_getappname(app)) else: logging.debug("...couldn't get autoname") return commitmsg def operate_vercode(operation: str, vercode: int) -> int: """Calculate a new versionCode from a mathematical operation. Parameters ---------- operation The operation to execute to get the new versionCode. vercode The versionCode for replacing "%c" in the operation. Returns ------- vercode The new versionCode obtained by executing the operation. Raises ------ :exc:`~fdroidserver.exception.MetaDataException` If the operation is invalid. """ if not common.VERCODE_OPERATION_RE.match(operation): raise MetaDataException(_('Invalid VercodeOperation: {field}') .format(field=operation)) oldvercode = vercode op = operation.replace("%c", str(oldvercode)) vercode = common.calculate_math_string(op) logging.debug("Applied vercode operation: %d -> %d" % (oldvercode, vercode)) return vercode def checkupdates_app(app: metadata.App, auto: bool, commit: bool = False) -> None: """Check for new versions and updated name of a single app. Also write back changes to the metadata file and create a Git commit if requested. Parameters ---------- app The app to check for updates for. Raises ------ :exc:`~fdroidserver.exception.MetaDataException` If the app has an invalid UpdateCheckMode or AutoUpdateMode. :exc:`~fdroidserver.exception.FDroidException` If no version information could be found, the current version is newer than the found version, auto-update was requested but an app has no CurrentVersionCode or (Git) commiting the changes failed. """ # If a change is made, commitmsg should be set to a description of it. # Only if this is set, changes will be written back to the metadata. commitmsg = None tag = None mode = app.UpdateCheckMode if mode.startswith('Tags'): pattern = mode[5:] if len(mode) > 4 else None (version, vercode, tag) = check_tags(app, pattern) elif mode == 'RepoManifest': (version, vercode) = check_repomanifest(app) elif mode.startswith('RepoManifest/'): tag = mode[13:] (version, vercode) = check_repomanifest(app, tag) elif mode == 'HTTP': (version, vercode) = check_http(app) elif mode in ('None', 'Static'): logging.debug('Checking disabled') return else: raise MetaDataException(_('Invalid UpdateCheckMode: {mode}').format(mode=mode)) if not version or not vercode: raise FDroidException(_('no version information found')) if app.VercodeOperation: vercodes = sorted([ operate_vercode(operation, vercode) for operation in app.VercodeOperation ]) else: vercodes = [vercode] updating = False if vercodes[-1] == app.CurrentVersionCode: logging.debug("...up to date") elif vercodes[-1] > app.CurrentVersionCode: logging.debug("...updating - old vercode={0}, new vercode={1}".format( app.CurrentVersionCode, vercodes[-1])) app.CurrentVersion = version app.CurrentVersionCode = vercodes[-1] updating = True else: raise FDroidException( _('current version is newer: old vercode={old}, new vercode={new}').format( old=app.CurrentVersionCode, new=vercodes[-1] ) ) commitmsg = fetch_autoname(app, tag) if updating: name = _getappname(app) ver = _getcvname(app) logging.info('...updating to version %s' % ver) commitmsg = 'Update CurrentVersion of %s to %s' % (name, ver) if auto: mode = app.AutoUpdateMode if not app.CurrentVersionCode: raise MetaDataException( _("Can't auto-update app with no CurrentVersionCode") ) elif mode in ('None', 'Static'): pass elif mode.startswith('Version'): pattern = mode[8:] suffix = '' if pattern.startswith('+'): try: suffix, pattern = pattern[1:].split(' ', 1) except ValueError as exc: raise MetaDataException("Invalid AutoUpdateMode: " + mode) from exc gotcur = False latest = None builds = app.get('Builds', []) if builds: latest = builds[-1] if latest.versionCode == app.CurrentVersionCode: gotcur = True elif latest.versionCode > app.CurrentVersionCode: raise FDroidException( _( 'latest build recipe is newer: ' 'old vercode={old}, new vercode={new}' ).format(old=latest.versionCode, new=app.CurrentVersionCode) ) if not gotcur: newbuilds = copy.deepcopy(builds[-len(vercodes):]) # These are either built-in or invalid in newer system versions bookworm_blocklist = [ 'apt-get install -y openjdk-11-jdk', 'apt-get install openjdk-11-jdk-headless', 'apt-get install -y openjdk-11-jdk-headless', 'apt-get install -t stretch-backports openjdk-11-jdk-headless openjdk-11-jre-headless', 'apt-get install -y -t stretch-backports openjdk-11-jdk-headless openjdk-11-jre-headless', 'apt-get install -y openjdk-17-jdk', 'apt-get install openjdk-17-jdk-headless', 'apt-get install -y openjdk-17-jdk-headless', 'update-alternatives --auto java', 'update-java-alternatives -a', ] for build in newbuilds: if "sudo" in build: if any("openjdk-11" in line for line in build["sudo"]) or any("openjdk-17" in line for line in build["sudo"]): build["sudo"] = [line for line in build["sudo"] if line not in bookworm_blocklist] if build["sudo"] == ['apt-get update']: build["sudo"] = '' for b, v in zip(newbuilds, vercodes): b.disable = False b.versionCode = v b.versionName = app.CurrentVersion + suffix.replace( '%c', str(v) ) logging.info("...auto-generating build for " + b.versionName) if tag: b.commit = tag else: commit = pattern.replace('%v', app.CurrentVersion) commit = commit.replace('%c', str(v)) b.commit = commit app['Builds'].extend(newbuilds) name = _getappname(app) ver = _getcvname(app) commitmsg = "Update %s to %s" % (name, ver) else: raise MetaDataException( _('Invalid AutoUpdateMode: {mode}').format(mode=mode) ) if commitmsg: metadata.write_metadata(app.metadatapath, app) if commit: logging.info("Commiting update for " + app.metadatapath) gitcmd = ["git", "commit", "-m", commitmsg] gitcmd.extend(["--", app.metadatapath]) if subprocess.call(gitcmd) != 0: raise FDroidException("Git commit failed") def get_last_build_from_app(app: metadata.App) -> metadata.Build: """Get the last build entry of an app.""" if app.get('Builds'): return app['Builds'][-1] else: return metadata.Build() def get_upstream_main_branch(git_repo): if len(git_repo.remotes.upstream.refs) == 1: return git_repo.remotes.upstream.refs[0].name for name in ('main', 'master'): if name in git_repo.remotes.upstream.refs: return f'upstream/{name}' try: with git_repo.config_reader() as reader: return 'upstream/%s' % reader.get_value('init', 'defaultBranch') except configparser.NoSectionError: return 'upstream/main' def checkout_appid_branch(appid): """Prepare the working branch named after the appid. This sets up everything for checkupdates_app() to run and add commits. If there is an existing branch named after the appid, and it has commits from users other than the checkupdates-bot, then this will return False. Otherwise, it returns True. The checkupdates-runner must set the committer email address in the git config. Then any commit with a committer or author that does not match that will be considered to have human edits. That email address is currently set in: https://gitlab.com/fdroid/checkupdates-runner/-/blob/1861899262a62a4ed08fa24e5449c0368dfb7617/.gitlab-ci.yml#L36 """ logging.debug(f'Creating merge request branch for {appid}') git_repo = git.Repo.init('.') upstream_main = get_upstream_main_branch(git_repo) for remote in git_repo.remotes: remote.fetch() try: git_repo.remotes.origin.fetch(f'{appid}:refs/remotes/origin/{appid}') except Exception as e: logging.warning('"%s" branch not found on origin remote:\n\t%s', appid, e) if appid in git_repo.remotes.origin.refs: start_point = f"origin/{appid}" for commit in git_repo.iter_commits( f'{upstream_main}...{start_point}', right_only=True ): if commit.committer.email != BOT_EMAIL or commit.author.email != BOT_EMAIL: return False else: start_point = upstream_main git_repo.git.checkout('-B', appid, start_point) git_repo.git.rebase(upstream_main, strategy_option='ours', kill_after_timeout=120) return True def get_changes_versus_ref(git_repo, ref, f): changes = [] for m in re.findall( r"^[+-].*", git_repo.git.diff(f"{ref}", '--', f), flags=re.MULTILINE ): if not re.match(r"^(\+\+\+|---) ", m): changes.append(m) return changes def push_commits(branch_name='checkupdates', verbose=False): """Make git branch then push commits as merge request. The appid is parsed from the actual file that was changed so that only the right branch is ever updated. This uses the appid as the standard branch name so that there is only ever one open merge request per-app. If multiple apps are included in the branch, then 'checkupdates' is used as branch name. This is to support the old way operating, e.g. in batches. This uses GitLab "Push Options" to create a merge request. Git Push Options are config data that can be sent via `git push --push-option=... origin foo`. References ---------- * https://docs.gitlab.com/ee/user/project/push_options.html """ git_repo = git.Repo.init('.') upstream_main = get_upstream_main_branch(git_repo) files = set() for commit in git_repo.iter_commits(f'{upstream_main}...HEAD', right_only=True): files.update(commit.stats.files.keys()) files = list(files) if len(files) == 1: m = re.match(r'metadata/(\S+)\.yml', files[0]) if m: branch_name = m.group(1) # appid if not files: return remote = git_repo.remotes.origin if branch_name in remote.refs: if not get_changes_versus_ref(git_repo, f'origin/{branch_name}', files[0]): return git_repo.create_head(branch_name, force=True) push_options = [ 'merge_request.create', 'merge_request.remove_source_branch', 'merge_request.title=bot: ' + git_repo.branches[branch_name].commit.summary, 'merge_request.description=' + '~%s checkupdates-bot run %s' % (branch_name, os.getenv('CI_JOB_URL')), ] # mark as draft if there are only changes to CurrentVersion: current_version_only = True for m in get_changes_versus_ref(git_repo, upstream_main, files[0]): if not re.match(r"^[-+]CurrentVersion", m): current_version_only = False break if current_version_only: push_options.append('merge_request.draft') progress = None if verbose: import clint.textui progress_bar = clint.textui.progress.Bar() class MyProgressPrinter(git.RemoteProgress): def update(self, op_code, current, maximum=None, message=None): if isinstance(maximum, float): progress_bar.show(current, maximum) progress = MyProgressPrinter() pushinfos = remote.push( branch_name, progress=progress, force=True, set_upstream=True, push_option=push_options, ) for pushinfo in pushinfos: if pushinfo.flags & ( git.remote.PushInfo.ERROR | git.remote.PushInfo.REJECTED | git.remote.PushInfo.REMOTE_FAILURE | git.remote.PushInfo.REMOTE_REJECTED ): # Show potentially useful messages from git remote if progress: for line in progress.other_lines: if line.startswith('remote:'): logging.debug(line) raise FDroidException( f'{remote.url} push failed: {pushinfo.flags} {pushinfo.summary}' ) else: logging.debug(remote.url + ': ' + pushinfo.summary) def prune_empty_appid_branches(git_repo=None, main_branch='main'): """Remove empty branches from checkupdates-bot git remote.""" if git_repo is None: git_repo = git.Repo.init('.') upstream_main = get_upstream_main_branch(git_repo) main_branch = upstream_main.split('/')[1] remote = git_repo.remotes.origin remote.update(prune=True) merged_branches = git_repo.git().branch(remotes=True, merged=upstream_main).split() for remote_branch in merged_branches: if not remote_branch or '/' not in remote_branch: continue if remote_branch.split('/')[1] not in (main_branch, 'HEAD'): for ref in git_repo.remotes.origin.refs: if remote_branch == ref.name: remote.push(':%s' % ref.remote_head, force=True) # rm remote branch def status_update_json(processed: list, failed: dict) -> None: """Output a JSON file with metadata about this run.""" logging.debug(_('Outputting JSON')) output = common.setup_status_output(start_timestamp) if processed: output['processed'] = processed if failed: output['failed'] = failed common.write_status_json(output) config = None start_timestamp = time.gmtime() def main(): """Check for updates for one or more apps. The behaviour of this function is influenced by the configuration file as well as command line parameters. """ global config # Parse command line... parser = ArgumentParser() common.setup_global_opts(parser) parser.add_argument("appid", nargs='*', help=_("application ID of file to operate on")) parser.add_argument("--auto", action="store_true", default=False, help=_("Process auto-updates")) parser.add_argument("--autoonly", action="store_true", default=False, help=_("Only process apps with auto-updates")) parser.add_argument("--commit", action="store_true", default=False, help=_("Commit changes")) parser.add_argument("--merge-request", action="store_true", default=False, help=_("Commit changes, push, then make a merge request")) parser.add_argument("--allow-dirty", action="store_true", default=False, help=_("Run on git repo that has uncommitted changes")) metadata.add_metadata_arguments(parser) options = common.parse_args(parser) metadata.warnings_action = options.W config = common.read_config() if not options.allow_dirty: status = subprocess.check_output(['git', 'status', '--porcelain']) if status: logging.error(_('Build metadata git repo has uncommited changes!')) sys.exit(1) if options.merge_request and not (options.appid and len(options.appid) == 1): logging.error(_('--merge-request only runs on a single appid!')) sys.exit(1) apps = common.read_app_args(options.appid) processed = [] failed = dict() exit_code = 0 for appid, app in apps.items(): if options.autoonly and app.AutoUpdateMode in ('None', 'Static'): logging.debug(_("Nothing to do for {appid}.").format(appid=appid)) continue msg = _("Processing {appid}").format(appid=appid) logging.info(msg) try: if options.merge_request: if not checkout_appid_branch(appid): msg = _("...checkupdate failed for {appid} : {error}").format( appid=appid, error='Open merge request with human edits, skipped.', ) logging.warning(msg) failed[appid] = msg continue checkupdates_app(app, options.auto, options.commit or options.merge_request) processed.append(appid) except Exception as e: msg = _("...checkupdate failed for {appid} : {error}").format(appid=appid, error=e) logging.error(msg) logging.debug(traceback.format_exc()) failed[appid] = str(e) exit_code = 1 if options.appid and options.merge_request: push_commits(verbose=options.verbose) prune_empty_appid_branches() status_update_json(processed, failed) sys.exit(exit_code) if __name__ == "__main__": main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898792.0 fdroidserver-2.4.0/fdroidserver/common.py0000644000175000017500000053637014770503150017277 0ustar00hanshans#!/usr/bin/env python3 # # common.py - part of the FDroid server tools # # Copyright (C) 2010-2016, Ciaran Gultnieks, ciaran@ciarang.com # Copyright (C) 2013-2017, Daniel Martí # Copyright (C) 2013-2021, Hans-Christoph Steiner # Copyright (C) 2017-2018, Torsten Grote # Copyright (C) 2017, tobiasKaminsky # Copyright (C) 2017-2021, Michael Pöhn # Copyright (C) 2017,2021, mimi89999 # Copyright (C) 2019-2021, Jochen Sprickerhof # Copyright (C) 2021, Felix C. Stegerman # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . """Collection of functions shared by subcommands. This is basically the "shared library" for all the fdroid subcommands. The contains core functionality and a number of utility functions. This is imported by all modules, so do not import third-party libraries here as they will become a requirement for all commands. Config ------ Parsing and using the configuration settings from config.yml is handled here. The data format is YAML 1.2. The config has its own supported data types: * Boolean (e.g. deploy_process_logs:) * Integer (e.g. archive_older:, repo_maxage:) * String-only (e.g. repo_name:, sdk_path:) * Multi-String (string, list of strings, or list of dicts with strings, e.g. serverwebroot:, mirrors:) String-only fields can also use a special value {env: varname}, which is a dict with a single key 'env' and a value that is the name of the environment variable to include. """ import copy import difflib from typing import List import git import glob import io import os import sys import re import ast import gzip import shutil import stat import subprocess import time import operator import logging import hashlib import socket import base64 import zipfile import tempfile import json from pathlib import Path import defusedxml.ElementTree as XMLElementTree from argparse import BooleanOptionalAction from asn1crypto import cms from base64 import urlsafe_b64encode from binascii import hexlify from datetime import datetime, timedelta, timezone from queue import Queue from urllib.parse import urlparse, urlsplit, urlunparse from zipfile import ZipFile import fdroidserver.metadata from fdroidserver import _ from fdroidserver._yaml import yaml, config_dump from fdroidserver.exception import FDroidException, VCSException, NoSubmodulesException, \ BuildException, VerificationException, MetaDataException from .asynchronousfilereader import AsynchronousFileReader from .looseversion import LooseVersion from . import apksigcopier, common # The path to this fdroidserver distribution FDROID_PATH = os.path.realpath(os.path.join(os.path.dirname(__file__), '..')) # There needs to be a default, and this is the most common for software. DEFAULT_LOCALE = 'en-US' # this is the build-tools version, aapt has a separate version that # has to be manually set in test_aapt_version() MINIMUM_AAPT_BUILD_TOOLS_VERSION = '26.0.0' # 33.0.x has a bug that verifies APKs it shouldn't https://gitlab.com/fdroid/fdroidserver/-/issues/1253 # 31.0.0 is the first version to support --v4-signing-enabled. # we only require 30.0.0 for now as that's the version in buster-backports, see also signindex.py # 26.0.2 is the first version recognizing md5 based signatures as valid again # (as does android, so we want that) MINIMUM_APKSIGNER_BUILD_TOOLS_VERSION = '30.0.0' VERCODE_OPERATION_RE = re.compile(r'^([ 0-9/*+-]|%c)+$') # A signature block file with a .DSA, .RSA, or .EC extension SIGNATURE_BLOCK_FILE_REGEX = re.compile(r'\AMETA-INF/.*\.(DSA|EC|RSA)\Z', re.DOTALL) APK_NAME_REGEX = re.compile(r'^([a-zA-Z][\w.]*)_(-?[0-9]+)_?([0-9a-f]{7})?\.apk') APK_ID_TRIPLET_REGEX = re.compile(r"^package: name='(\w[^']*)' versionCode='([^']+)' versionName='([^']*)'") STANDARD_FILE_NAME_REGEX = re.compile(r'^(\w[\w.]*)_(-?[0-9]+)\.\w+') FDROID_PACKAGE_NAME_REGEX = re.compile(r'''^[a-f0-9]+$''', re.IGNORECASE) STRICT_APPLICATION_ID_REGEX = re.compile(r'''(?:^[a-zA-Z]+(?:\d*[a-zA-Z_]*)*)(?:\.[a-zA-Z]+(?:\d*[a-zA-Z_]*)*)+$''') VALID_APPLICATION_ID_REGEX = re.compile(r'''(?:^[a-z_]+(?:\d*[a-zA-Z_]*)*)(?:\.[a-z_]+(?:\d*[a-zA-Z_]*)*)*$''', re.IGNORECASE) ANDROID_PLUGIN_REGEX = re.compile(r'''\s*(:?apply plugin:|id)\(?\s*['"](android|com\.android\.application)['"]\s*\)?''') MAX_VERSION_CODE = 0x7fffffff # Java's Integer.MAX_VALUE (2147483647) XMLNS_ANDROID = '{http://schemas.android.com/apk/res/android}' # https://docs.gitlab.com/ee/user/gitlab_com/#gitlab-pages GITLAB_COM_PAGES_MAX_SIZE = 1000000000 # the names used for things that are configured per-repo ANTIFEATURES_CONFIG_NAME = 'antiFeatures' CATEGORIES_CONFIG_NAME = 'categories' CONFIG_CONFIG_NAME = 'config' MIRRORS_CONFIG_NAME = 'mirrors' RELEASECHANNELS_CONFIG_NAME = "releaseChannels" CONFIG_NAMES = ( ANTIFEATURES_CONFIG_NAME, CATEGORIES_CONFIG_NAME, CONFIG_CONFIG_NAME, MIRRORS_CONFIG_NAME, RELEASECHANNELS_CONFIG_NAME, ) CONFIG_FILE = 'config.yml' config = None options = None env = None orig_path = None def get_default_cachedir(): """Get a cachedir, using platformdirs for cross-platform, but works without. Once platformdirs is installed everywhere, this function can be removed. """ appname = __name__.split('.')[0] try: import platformdirs return platformdirs.user_cache_dir(appname, 'F-Droid') except ImportError: return str(Path.home() / '.cache' / appname) # All paths in the config must be strings, never pathlib.Path instances default_config = { 'sdk_path': "$ANDROID_HOME", 'ndk_paths': {}, 'cachedir': get_default_cachedir(), 'java_paths': None, 'scan_binary': False, 'ant': "ant", 'mvn3': "mvn", 'gradle': os.path.join(FDROID_PATH, 'gradlew-fdroid'), 'sync_from_local_copy_dir': False, 'allow_disabled_algorithms': False, 'keep_when_not_allowed': False, 'per_app_repos': False, 'make_current_version_link': False, 'current_version_name_source': 'Name', 'deploy_process_logs': False, 'repo_maxage': 0, 'build_server_always': False, 'keystore': 'keystore.p12', 'smartcardoptions': [], 'char_limits': { 'author': 256, 'name': 50, 'summary': 80, 'description': 4000, 'video': 256, 'whatsNew': 500, }, 'keyaliases': {}, 'repo_url': "https://MyFirstFDroidRepo.org/fdroid/repo", 'repo_name': "My First F-Droid Repo Demo", 'repo_icon': "icon.png", 'repo_description': _("""This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid."""), # type: ignore 'archive_name': 'My First F-Droid Archive Demo', 'archive_description': _('These are the apps that have been archived from the main repo.'), # type: ignore 'archive_older': 0, 'git_mirror_size_limit': 10000000000, 'scanner_signature_sources': ['suss'], } def get_options(): """Return options as set up by parse_args(). This provides an easy way to get the global instance without having to think about very confusing import and submodule visibility. The code should be probably refactored so it does not need this. If each individual option value was always passed to functions as args, for example. https://docs.python.org/3/reference/import.html#submodules """ return fdroidserver.common.options def parse_args(parser): """Call parser.parse_args(), store result in module-level variable and return it. This is needed to set up the copy of the options instance in the fdroidserver.common module. A subcommand only needs to call this if it uses functions from fdroidserver.common that expect the "options" variable to be initialized. """ fdroidserver.common.options = parser.parse_args() return fdroidserver.common.options def setup_global_opts(parser): try: # the buildserver VM might not have PIL installed from PIL import PngImagePlugin logger = logging.getLogger(PngImagePlugin.__name__) logger.setLevel(logging.INFO) # tame the "STREAM" debug messages except ImportError: pass parser.add_argument( "-v", "--verbose", action="store_true", default=False, help=_("Spew out even more information than normal"), ) parser.add_argument( "-q", "--quiet", action="store_true", default=False, help=_("Restrict output to warnings and errors"), ) parser.add_argument( "--color", action=BooleanOptionalAction, default=None, help=_("Color the log output"), ) class ColorFormatter(logging.Formatter): def __init__(self, msg): logging.Formatter.__init__(self, msg) bright_black = "\x1b[90;20m" yellow = "\x1b[33;20m" red = "\x1b[31;20m" bold_red = "\x1b[31;1m" reset = "\x1b[0m" self.FORMATS = { logging.DEBUG: bright_black + msg + reset, logging.INFO: reset + msg + reset, # use default color logging.WARNING: yellow + msg + reset, logging.ERROR: red + msg + reset, logging.CRITICAL: bold_red + msg + reset } def format(self, record): log_fmt = self.FORMATS.get(record.levelno) formatter = logging.Formatter(log_fmt) return formatter.format(record) def set_console_logging(verbose=False, color=False): """Globally set logging to output nicely to the console.""" class _StdOutFilter(logging.Filter): def filter(self, record): return record.levelno < logging.ERROR if verbose: level = logging.DEBUG else: level = logging.ERROR if color or (color is None and sys.stdout.isatty()): formatter = ColorFormatter else: formatter = logging.Formatter stdout_handler = logging.StreamHandler(sys.stdout) stdout_handler.addFilter(_StdOutFilter()) stdout_handler.setFormatter(formatter('%(message)s')) stderr_handler = logging.StreamHandler(sys.stderr) stderr_handler.setLevel(logging.ERROR) stderr_handler.setFormatter(formatter(_('ERROR: %(message)s'))) logging.basicConfig( force=True, level=level, handlers=[stdout_handler, stderr_handler] ) def _add_java_paths_to_config(pathlist, thisconfig): def path_version_key(s): versionlist = [] for u in re.split('[^0-9]+', s): try: versionlist.append(int(u)) except ValueError: pass return versionlist for d in sorted(pathlist, key=path_version_key): if os.path.islink(d): continue j = os.path.basename(d) # the last one found will be the canonical one, so order appropriately for regex in [ r'^1\.([126-9][0-9]?)\.0\.jdk$', # OSX r'^jdk1\.([126-9][0-9]?)\.0_[0-9]+.jdk$', # OSX and Oracle tarball r'^jdk1\.([126-9][0-9]?)\.0_[0-9]+$', # Oracle Windows r'^jdk([126-9][0-9]?)-openjdk$', # Arch r'^java-([126-9][0-9]?)-openjdk$', # Arch r'^java-([126-9][0-9]?)-jdk$', # Arch (oracle) r'^java-1\.([126-9][0-9]?)\.0-.*$', # RedHat r'^java-([126-9][0-9]?)-oracle$', # Debian WebUpd8 r'^jdk-([126-9][0-9]?)-oracle-.*$', # Debian make-jpkg r'^java-([126-9][0-9]?)-openjdk-.*$', # Debian r'^oracle-jdk-bin-1\.([126-9][0-9]?).*$', # Gentoo (oracle) r'^icedtea-bin-([126-9][0-9]?).*$', # Gentoo (openjdk) ]: m = re.match(regex, j) if not m: continue for p in [d, os.path.join(d, 'Contents', 'Home')]: if os.path.exists(os.path.join(p, 'bin', 'javac')): thisconfig['java_paths'][m.group(1)] = p def fill_config_defaults(thisconfig): """Fill in the global config dict with relevant defaults. For config values that have a path that can be expanded, e.g. an env var or a ~/, this will store the original value using "_orig" appended to the key name so that if the config gets written out, it will preserve the original, unexpanded string. """ for k, v in default_config.items(): if k not in thisconfig: if isinstance(v, dict) or isinstance(v, list): thisconfig[k] = v.copy() else: thisconfig[k] = v # Expand paths (~users and $vars) def expand_path(path): if not path or not isinstance(path, str): return None orig = path path = os.path.expanduser(path) path = os.path.expandvars(path) if orig == path: return None return path for k in ['sdk_path', 'ant', 'mvn3', 'gradle', 'keystore']: v = thisconfig[k] exp = expand_path(v) if exp is not None: thisconfig[k] = exp thisconfig[k + '_orig'] = v # find all installed JDKs for keytool, jarsigner, and JAVA[6-9]_HOME env vars if thisconfig['java_paths'] is None: thisconfig['java_paths'] = dict() pathlist = [] pathlist += glob.glob('/usr/lib/jvm/j*[126-9]*') pathlist += glob.glob('/usr/java/jdk1.[126-9]*') pathlist += glob.glob('/System/Library/Java/JavaVirtualMachines/1.[126-9][0-9]?.0.jdk') pathlist += glob.glob('/Library/Java/JavaVirtualMachines/*jdk*[0-9]*') pathlist += glob.glob('/opt/oracle-jdk-*1.[0-9]*') pathlist += glob.glob('/opt/icedtea-*[0-9]*') if os.getenv('JAVA_HOME') is not None: pathlist.append(os.getenv('JAVA_HOME')) if os.getenv('PROGRAMFILES') is not None: pathlist += glob.glob(os.path.join(os.getenv('PROGRAMFILES'), 'Java', 'jdk1.[126-9][0-9]?.*')) _add_java_paths_to_config(pathlist, thisconfig) for java_version in range(29, 6, -1): java_version = str(java_version) if java_version not in thisconfig['java_paths']: continue java_home = thisconfig['java_paths'][java_version] jarsigner = os.path.join(java_home, 'bin', 'jarsigner') if os.path.exists(jarsigner): thisconfig['jarsigner'] = jarsigner thisconfig['keytool'] = os.path.join(java_home, 'bin', 'keytool') break if 'jarsigner' not in thisconfig and shutil.which('jarsigner'): thisconfig['jarsigner'] = shutil.which('jarsigner') if 'keytool' not in thisconfig and shutil.which('keytool'): thisconfig['keytool'] = shutil.which('keytool') # enable apksigner by default so v2/v3 APK signatures validate find_apksigner(thisconfig) if not thisconfig.get('apksigner'): logging.warning(_('apksigner not found! Cannot sign or verify modern APKs')) if 'ipfs_cid' not in thisconfig and shutil.which('ipfs_cid'): thisconfig['ipfs_cid'] = shutil.which('ipfs_cid') cmd = sys.argv[1] if len(sys.argv) >= 2 else '' if cmd == 'update' and not thisconfig.get('ipfs_cid'): logging.debug(_("ipfs_cid not found, skipping CIDv1 generation")) for k in ['ndk_paths', 'java_paths']: d = thisconfig[k] for k2 in d.copy(): v = d[k2] exp = expand_path(v) if exp is not None: thisconfig[k][k2] = exp thisconfig[k][k2 + '_orig'] = v ndk_paths = thisconfig.get('ndk_paths', {}) ndk_bundle = os.path.join(thisconfig['sdk_path'], 'ndk-bundle') if os.path.exists(ndk_bundle): version = get_ndk_version(ndk_bundle) if version not in ndk_paths: ndk_paths[version] = ndk_bundle ndk_dir = os.path.join(thisconfig['sdk_path'], 'ndk') if os.path.exists(ndk_dir): for ndk in glob.glob(os.path.join(ndk_dir, '*')): version = get_ndk_version(ndk) if version not in ndk_paths: ndk_paths[version] = ndk if 'cachedir_scanner' not in thisconfig: thisconfig['cachedir_scanner'] = str(Path(thisconfig['cachedir']) / 'scanner') if 'gradle_version_dir' not in thisconfig: thisconfig['gradle_version_dir'] = str(Path(thisconfig['cachedir']) / 'gradle') def get_config(): """Get the initalized, singleton config instance. config and options are intertwined in read_config(), so they have to be here too. In the current ugly state of things, there are multiple potential instances of config and options in use: * global * module-level in the subcommand module (e.g. fdroidserver/build.py) * module-level in fdroidserver.common There are some insane parts of the code that are probably referring to multiple instances of these at different points. This can be super confusing and maddening. The current intermediate refactoring step is to move all subcommands to always get/set config and options via this function so that there is no longer a distinction between the global and module-level instances. Then there can be only one module-level instance in fdroidserver.common. """ global config if config is not None: return config read_config() # make sure these values are available in common.py even if they didn't # declare global in a scope common.config = config return config def get_cachedir(): cachedir = config and config.get('cachedir') if cachedir and os.path.exists(cachedir): return Path(cachedir) else: return Path(tempfile.mkdtemp()) def regsub_file(pattern, repl, path): with open(path, 'rb') as f: text = f.read() text = re.sub(bytes(pattern, 'utf8'), bytes(repl, 'utf8'), text) with open(path, 'wb') as f: f.write(text) def config_type_check(path, data): if Path(path).name == 'mirrors.yml': expected_type = list else: expected_type = dict if expected_type == dict: if not isinstance(data, dict): msg = _('{path} is not "key: value" dict, but a {datatype}!') raise TypeError(msg.format(path=path, datatype=type(data).__name__)) elif not isinstance(data, expected_type): msg = _('{path} is not {expected_type}, but a {datatype}!') raise TypeError( msg.format( path=path, expected_type=expected_type.__name__, datatype=type(data).__name__, ) ) def read_config(): """Read the repository config. The config is read from config.yml, which is in the current directory when any of the repo management commands are used. If there is a local metadata file in the git repo, then the config is not required, just use defaults. config.yml is the preferred form because no code is executed when reading it. config.py is deprecated and no longer supported. config.yml requires ASCII or UTF-8 encoding because this code does not auto-detect the file's encoding. That is left up to the YAML library. YAML allows ASCII, UTF-8, UTF-16, and UTF-32 encodings. Since it is a good idea to manage config.yml (WITHOUT PASSWORDS!) in git, it makes sense to use a globally standard encoding. """ global config if config is not None: return config config = {} if os.path.exists(CONFIG_FILE): logging.debug(_("Reading '{config_file}'").format(config_file=CONFIG_FILE)) with open(CONFIG_FILE, encoding='utf-8') as fp: config = yaml.load(fp) if not config: config = {} config_type_check(CONFIG_FILE, config) old_config_file = 'config.py' if os.path.exists(old_config_file): logging.warning( _("""Ignoring deprecated {oldfile}, use {newfile}!""").format( oldfile=old_config_file, newfile=CONFIG_FILE ) ) # smartcardoptions must be a list since its command line args for Popen smartcardoptions = config.get('smartcardoptions') if isinstance(smartcardoptions, str): sco_items = re.sub(r'\s+', r' ', config['smartcardoptions']).split(' ') config['smartcardoptions'] = [i.strip() for i in sco_items if i] elif not smartcardoptions and 'keystore' in config and config['keystore'] == 'NONE': # keystore='NONE' means use smartcard, these are required defaults config['smartcardoptions'] = ['-storetype', 'PKCS11', '-providerName', 'SunPKCS11-OpenSC', '-providerClass', 'sun.security.pkcs11.SunPKCS11', '-providerArg', 'opensc-fdroid.cfg'] fill_config_defaults(config) if 'serverwebroot' in config: roots = parse_list_of_dicts(config['serverwebroot']) rootlist = [] for d in roots: # since this is used with rsync, where trailing slashes have # meaning, ensure there is always a trailing slash rootstr = d.get('url') if not rootstr: logging.error('serverwebroot: has blank value!') continue if rootstr[-1] != '/': rootstr += '/' d['url'] = rootstr.replace('//', '/') rootlist.append(d) config['serverwebroot'] = rootlist if 'servergitmirrors' in config: config['servergitmirrors'] = parse_list_of_dicts(config['servergitmirrors']) limit = config['git_mirror_size_limit'] config['git_mirror_size_limit'] = parse_human_readable_size(limit) if 'repo_url' in config: if not config['repo_url'].endswith('/repo'): raise FDroidException(_('repo_url needs to end with /repo')) if 'archive_url' in config: if not config['archive_url'].endswith('/archive'): raise FDroidException(_('archive_url needs to end with /archive')) confignames_to_delete = set() for configname, dictvalue in config.items(): if configname == 'java_paths': new = dict() for k, v in dictvalue.items(): new[str(k)] = v config[configname] = new elif configname in ('ndk_paths', 'java_paths', 'char_limits', 'keyaliases'): continue elif isinstance(dictvalue, dict): for k, v in dictvalue.items(): if k == 'env': env = os.getenv(v) if env: config[configname] = env else: confignames_to_delete.add(configname) logging.error(_('Environment variable {var} from {configname} is not set!') .format(var=k, configname=configname)) else: confignames_to_delete.add(configname) logging.error(_('Unknown entry {key} in {configname}') .format(key=k, configname=configname)) for configname in confignames_to_delete: del config[configname] if any( k in config and config.get(k) for k in ["awssecretkey", "keystorepass", "keypass"] ): st = os.stat(CONFIG_FILE) if st.st_mode & stat.S_IRWXG or st.st_mode & stat.S_IRWXO: logging.warning( _("unsafe permissions on '{config_file}' (should be 0600)!").format( config_file=CONFIG_FILE ) ) return config def expand_env_dict(s): """Expand env var dict to a string value. {env: varName} syntax can be used to replace any string value in the config with the value of an environment variable "varName". This allows for secrets management when commiting the config file to a public git repo. """ if not s or type(s) not in (str, dict): return if isinstance(s, dict): if 'env' not in s or len(s) > 1: raise TypeError(_('Only accepts a single key "env"')) var = s['env'] s = os.getenv(var) if not s: logging.error( _('Environment variable {{env: {var}}} is not set!').format(var=var) ) return return os.path.expanduser(s) def parse_list_of_dicts(l_of_d): """Parse config data structure that is a list of dicts of strings. The value can be specified as a string, list of strings, or list of dictionary maps where the values are strings. """ if isinstance(l_of_d, str): return [{"url": expand_env_dict(l_of_d)}] if isinstance(l_of_d, dict): return [{"url": expand_env_dict(l_of_d)}] if all(isinstance(item, str) for item in l_of_d): return [{'url': expand_env_dict(i)} for i in l_of_d] if all(isinstance(item, dict) for item in l_of_d): for item in l_of_d: item['url'] = expand_env_dict(item['url']) return l_of_d raise TypeError(_('only accepts strings, lists, and tuples')) def get_mirrors(url, filename=None): """Get list of dict entries for mirrors, appending filename if provided.""" # TODO use cached index if it exists if isinstance(url, str): url = urlsplit(url) if url.netloc == 'f-droid.org': mirrors = FDROIDORG_MIRRORS else: mirrors = parse_list_of_dicts(url.geturl()) if filename: return append_filename_to_mirrors(filename, mirrors) else: return mirrors def append_filename_to_mirrors(filename, mirrors): """Append the filename to all "url" entries in the mirrors dict.""" appended = copy.deepcopy(mirrors) for mirror in appended: parsed = urlparse(mirror['url']) mirror['url'] = urlunparse( parsed._replace(path=os.path.join(parsed.path, filename)) ) return appended def file_entry(filename, hash_value=None): meta = {} meta["name"] = "/" + Path(filename).as_posix().split("/", 1)[1] meta["sha256"] = hash_value or sha256sum(filename) meta["size"] = os.stat(filename).st_size return meta def load_localized_config(name, repodir): """Load localized config files and put them into internal dict format. This will maintain the order as came from the data files, e.g YAML. The locale comes from unsorted paths on the filesystem, so that is separately sorted. """ ret = dict() found_config_file = False for f in Path().glob("config/**/{name}.yml".format(name=name)): found_config_file = True locale = f.parts[1] if len(f.parts) == 2: locale = DEFAULT_LOCALE with open(f, encoding="utf-8") as fp: elem = yaml.load(fp) if not isinstance(elem, dict): msg = _('{path} is not "key: value" dict, but a {datatype}!') raise TypeError(msg.format(path=f, datatype=type(elem).__name__)) for afname, field_dict in elem.items(): if afname not in ret: ret[afname] = dict() for key, value in field_dict.items(): if key not in ret[afname]: ret[afname][key] = dict() if key == "icon": icons_dir = os.path.join(repodir, 'icons') if not os.path.exists(icons_dir): os.makedirs(icons_dir, exist_ok=True) shutil.copy(os.path.join("config", value), icons_dir) ret[afname][key][locale] = file_entry( os.path.join(icons_dir, value) ) else: ret[afname][key][locale] = value if not found_config_file: for f in Path().glob("config/*.yml"): if f.stem not in CONFIG_NAMES: msg = _('{path} is not a standard config file!').format(path=f) m = difflib.get_close_matches(f.stem, CONFIG_NAMES, 1) if m: msg += ' ' msg += _('Did you mean config/{name}.yml?').format(name=m[0]) logging.error(msg) for elem in ret.values(): for afname in elem: elem[afname] = {locale: v for locale, v in sorted(elem[afname].items())} return ret def parse_human_readable_size(size): units = { 'b': 1, 'kb': 1000, 'mb': 1000**2, 'gb': 1000**3, 'tb': 1000**4, 'kib': 1024, 'mib': 1024**2, 'gib': 1024**3, 'tib': 1024**4, } try: return int(float(size)) except (ValueError, TypeError) as exc: if type(size) != str: raise ValueError(_('Could not parse size "{size}", wrong type "{type}"') .format(size=size, type=type(size))) from exc s = size.lower().replace(' ', '') m = re.match(r'^(?P[0-9][0-9.]*) *(?P' + r'|'.join(units.keys()) + r')$', s) if not m: raise ValueError(_('Not a valid size definition: "{}"').format(size)) from exc return int(float(m.group("value")) * units[m.group("unit")]) def get_dir_size(path_or_str): """Get the total size of all files in the given directory.""" if isinstance(path_or_str, str): path_or_str = Path(path_or_str) return sum(f.stat().st_size for f in path_or_str.glob('**/*') if f.is_file()) def assert_config_keystore(config): """Check weather keystore is configured correctly and raise exception if not.""" nosigningkey = False if 'repo_keyalias' not in config: nosigningkey = True logging.critical(_("'repo_keyalias' not found in config.yml!")) if 'keystore' not in config: nosigningkey = True logging.critical(_("'keystore' not found in config.yml!")) elif config['keystore'] == 'NONE': if not config.get('smartcardoptions'): nosigningkey = True logging.critical(_("'keystore' is NONE and 'smartcardoptions' is blank!")) elif not os.path.exists(config['keystore']): nosigningkey = True logging.critical("'" + config['keystore'] + "' does not exist!") if 'keystorepass' not in config: nosigningkey = True logging.critical(_("'keystorepass' not found in config.yml!")) if 'keypass' not in config and config.get('keystore') != 'NONE': nosigningkey = True logging.critical(_("'keypass' not found in config.yml!")) if nosigningkey: raise FDroidException("This command requires a signing key, " + "you can create one using: fdroid update --create-key") def find_apksigner(config): """Search for the best version apksigner and adds it to the config. Returns the best version of apksigner following this algorithm: * use config['apksigner'] if set * try to find apksigner in path * find apksigner in build-tools starting from newest installed going down to MINIMUM_APKSIGNER_BUILD_TOOLS_VERSION Returns ------- str path to apksigner or None if no version is found """ command = 'apksigner' if command in config: return tmp = find_command(command) if tmp is not None: config[command] = tmp return build_tools_path = os.path.join(config.get('sdk_path', ''), 'build-tools') if not os.path.isdir(build_tools_path): return for f in sorted(os.listdir(build_tools_path), reverse=True): if not os.path.isdir(os.path.join(build_tools_path, f)): continue try: version = LooseVersion(f) if version >= LooseVersion('33') and version < LooseVersion('34'): logging.warning( _('apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring.').format( version=version ) ) continue if version < LooseVersion(MINIMUM_APKSIGNER_BUILD_TOOLS_VERSION): logging.debug("Local Android SDK only has outdated apksigner versions") return except TypeError: continue if os.path.exists(os.path.join(build_tools_path, f, 'apksigner')): apksigner = os.path.join(build_tools_path, f, 'apksigner') logging.info("Using %s " % apksigner) config['apksigner'] = apksigner return def find_sdk_tools_cmd(cmd): """Find a working path to a tool from the Android SDK.""" tooldirs = [] if config is not None and 'sdk_path' in config and os.path.exists(config['sdk_path']): # try to find a working path to this command, in all the recent possible paths build_tools = os.path.join(config['sdk_path'], 'build-tools') if os.path.isdir(build_tools): for f in sorted(os.listdir(build_tools), reverse=True): if os.path.isdir(os.path.join(build_tools, f)): tooldirs.append(os.path.join(build_tools, f)) sdk_tools = os.path.join(config['sdk_path'], 'tools') if os.path.exists(sdk_tools): tooldirs.append(sdk_tools) tooldirs.append(os.path.join(sdk_tools, 'bin')) sdk_platform_tools = os.path.join(config['sdk_path'], 'platform-tools') if os.path.exists(sdk_platform_tools): tooldirs.append(sdk_platform_tools) sdk_build_tools = glob.glob(os.path.join(config['sdk_path'], 'build-tools', '*.*')) if sdk_build_tools: tooldirs.append(sorted(sdk_build_tools)[-1]) # use most recent version if os.path.exists('/usr/bin'): tooldirs.append('/usr/bin') for d in tooldirs: path = os.path.join(d, cmd) if not os.path.isfile(path): path += '.exe' if os.path.isfile(path): if cmd == 'aapt': test_aapt_version(path) return path # did not find the command, exit with error message test_sdk_exists(config) # ignore result so None is never returned raise FDroidException(_("Android SDK tool {cmd} not found!").format(cmd=cmd)) def test_aapt_version(aapt): """Check whether the version of aapt is new enough.""" output = subprocess.check_output([aapt, 'version'], universal_newlines=True) if output is None or output == '': logging.error(_("'{path}' failed to execute!").format(path=aapt)) else: m = re.match(r'.*v([0-9]+)\.([0-9]+)[.-]?([0-9.-]*)', output) if m: major = m.group(1) minor = m.group(2) bugfix = m.group(3) # the Debian package has the version string like "v0.2-23.0.2" too_old = False if '.' in bugfix: if LooseVersion(bugfix) < LooseVersion(MINIMUM_AAPT_BUILD_TOOLS_VERSION): too_old = True elif LooseVersion('.'.join((major, minor, bugfix))) < LooseVersion('0.2.4062713'): too_old = True if too_old: logging.warning(_("'{aapt}' is too old, fdroid requires build-tools-{version} or newer!") .format(aapt=aapt, version=MINIMUM_AAPT_BUILD_TOOLS_VERSION)) else: logging.warning(_('Unknown version of aapt, might cause problems: ') + output) def test_sdk_exists(thisconfig): if 'sdk_path' not in thisconfig: # check the 'apksigner' value in the config to see if its new enough f = thisconfig.get('apksigner', '') if os.path.isfile(f): sdk_path = os.path.dirname(os.path.dirname(os.path.dirname(f))) tmpconfig = {'sdk_path': sdk_path} find_apksigner(tmpconfig) if os.path.exists(tmpconfig.get('apksigner', '')): return True logging.error(_("'sdk_path' not set in config.yml!")) return False if thisconfig['sdk_path'] == default_config['sdk_path']: logging.error(_('No Android SDK found!')) logging.error(_('You can use ANDROID_HOME to set the path to your SDK, i.e.:')) logging.error('\texport ANDROID_HOME=/opt/android-sdk') return False if not os.path.exists(thisconfig['sdk_path']): logging.critical(_("Android SDK path '{path}' does not exist!") .format(path=thisconfig['sdk_path'])) return False if not os.path.isdir(thisconfig['sdk_path']): logging.critical(_("Android SDK path '{path}' is not a directory!") .format(path=thisconfig['sdk_path'])) return False find_apksigner(thisconfig) if not os.path.exists(thisconfig.get('apksigner', '')): return False return True def get_local_metadata_files(): """Get any metadata files local to an app's source repo. This tries to ignore anything that does not count as app metdata, including emacs cruft ending in ~ """ return glob.glob('.fdroid.[a-jl-z]*[a-rt-z]') def read_pkg_args(appid_versionCode_pairs, allow_version_codes=False): """No summary. Parameters ---------- appids arguments in the form of multiple appid:[versionCode] strings Returns ------- a dictionary with the set of vercodes specified for each package """ vercodes = {} if not appid_versionCode_pairs: return vercodes error = False apk_regex = re.compile(r'_(\d+)\.apk$') for p in appid_versionCode_pairs: # Convert the apk name to a appid:versioncode pair p = apk_regex.sub(r':\1', p) if allow_version_codes and ':' in p: package, vercode = p.split(':') try: vercode = version_code_string_to_int(vercode) except ValueError as e: logging.error('"%s": %s' % (p, str(e))) error = True else: package, vercode = p, None if package not in vercodes: vercodes[package] = [vercode] if vercode else [] continue elif vercode and vercode not in vercodes[package]: vercodes[package] += [vercode] if vercode else [] if error: raise FDroidException(_("Found invalid versionCodes for some apps")) return vercodes def get_metadata_files(vercodes): """ Build a list of metadata files and raise an exception for invalid appids. Parameters ---------- vercodes version codes as returned by read_pkg_args() Returns ------- List a list of corresponding metadata/*.yml files """ found_invalid = False metadatafiles = [] for appid in vercodes.keys(): f = Path('metadata') / ('%s.yml' % appid) if f.exists(): metadatafiles.append(f) else: found_invalid = True logging.critical(_("No such package: %s") % appid) if found_invalid: raise FDroidException(_("Found invalid appids in arguments")) return metadatafiles def read_app_args(appid_versionCode_pairs, allow_version_codes=False, sort_by_time=False): """Build a list of App instances for processing. On top of what read_pkg_args does, this returns the whole app metadata, but limiting the builds list to the builds matching the appid_versionCode_pairs and vercodes specified. If no appid_versionCode_pairs are specified, then all App and Build instances are returned. """ vercodes = read_pkg_args(appid_versionCode_pairs, allow_version_codes) allapps = fdroidserver.metadata.read_metadata(vercodes, sort_by_time) if not vercodes: return allapps apps = {} for appid, app in allapps.items(): if appid in vercodes: apps[appid] = app if not apps: raise FDroidException(_("No packages specified")) error = False for appid, app in apps.items(): vc = vercodes[appid] if not vc: continue app['Builds'] = [b for b in app.get('Builds', []) if b.versionCode in vc] if len(app.get('Builds', [])) != len(vercodes[appid]): error = True allvcs = [b.versionCode for b in app.get('Builds', [])] for v in vercodes[appid]: if v not in allvcs: logging.critical(_("No such versionCode {versionCode} for app {appid}") .format(versionCode=v, appid=appid)) if error: raise FDroidException(_("Found invalid versionCodes for some apps")) return apps def get_extension(filename): """Get name and extension of filename, with extension always lower case.""" base, ext = os.path.splitext(filename) if not ext: return base, '' return base, ext.lower()[1:] publish_name_regex = re.compile(r"^(.+)_([0-9]+)\.(apk|zip)$") def publishednameinfo(filename): filename = os.path.basename(filename) m = publish_name_regex.match(filename) try: result = (m.group(1), int(m.group(2))) except AttributeError as exc: raise FDroidException(_("Invalid name for published file: %s") % filename) from exc return result apk_release_filename = re.compile(r'(?P[a-zA-Z0-9_\.]+)_(?P[0-9]+)\.apk') apk_release_filename_with_sigfp = re.compile(r'(?P[a-zA-Z0-9_\.]+)_(?P[0-9]+)_(?P[0-9a-f]{7})\.apk') def apk_parse_release_filename(apkname): """Parse the name of an APK file according the F-Droids APK naming scheme. WARNING: Returned values don't necessarily represent the APKs actual properties, the are just paresed from the file name. Returns ------- Tuple A triplet containing (appid, versionCode, signer), where appid should be the package name, versionCode should be the integer represion of the APKs version and signer should be the first 7 hex digists of the sha256 signing key fingerprint which was used to sign this APK. """ m = apk_release_filename_with_sigfp.match(apkname) if m: return m.group('appid'), int(m.group('vercode')), m.group('sigfp') m = apk_release_filename.match(apkname) if m: return m.group('appid'), int(m.group('vercode')), None return None, None, None def get_output_extension(build): if build.output: return get_file_extension(replace_build_vars(build.output, build)) return 'apk' def get_release_apk_filename(appid, versionCode): return f"{appid}_{versionCode}.apk" def get_release_filename(app, build, extension=None): if extension: return "%s_%s.%s" % (app.id, build.versionCode, extension) if build.output and get_file_extension(build.output): return "%s_%s.%s" % (app.id, build.versionCode, get_file_extension(build.output)) else: return get_release_apk_filename(app.id, build.versionCode) def get_toolsversion_logname(app, build): return "%s_%s_toolsversion.log" % (app.id, build.versionCode) def get_src_tarball_name(appid, versionCode): return f"{appid}_{versionCode}_src.tar.gz" def get_build_dir(app): """Get the dir that this app will be built in.""" if app.RepoType == 'srclib': return Path('build/srclib') / app.Repo return Path('build') / app.id class Encoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, set): return sorted(obj) return super().default(obj) def epoch_millis_now(): """Get the current time in epoch milliseconds. This is the format returned by Java's System.currentTimeMillis(). Parameters ---------- millis Java-style integer time since UNIX epoch in milliseconds """ return int(datetime.now(timezone.utc).timestamp() * 1000) def setup_status_output(start_timestamp): """Create the common output dictionary for public status updates.""" output = { 'commandLine': sys.argv, 'startTimestamp': int(time.mktime(start_timestamp) * 1000), 'subcommand': sys.argv[0].split()[1], } if os.path.isdir('.git'): git_repo = git.repo.Repo(os.getcwd()) output['fdroiddata'] = { 'commitId': get_head_commit_id(git_repo), 'isDirty': git_repo.is_dirty(), 'modifiedFiles': git_repo.git().ls_files(modified=True).split(), 'untrackedFiles': git_repo.untracked_files, } fdroidserver_dir = os.path.dirname(sys.argv[0]) if os.path.isdir(os.path.join(fdroidserver_dir, '.git')): git_repo = git.repo.Repo(fdroidserver_dir) output['fdroidserver'] = { 'commitId': get_head_commit_id(git_repo), 'isDirty': git_repo.is_dirty(), 'modifiedFiles': git_repo.git().ls_files(modified=True).split(), 'untrackedFiles': git_repo.untracked_files, } etc_issue_net = '/etc/issue.net' if os.path.exists(etc_issue_net): with open(etc_issue_net) as fp: output[etc_issue_net] = fp.read(100).strip() write_running_status_json(output) return output def write_running_status_json(output): write_status_json(output, pretty=True, name='running') def write_status_json(output, pretty=False, name=None): """Write status out as JSON, and rsync it to the repo server.""" status_dir = os.path.join('repo', 'status') if not os.path.exists(status_dir): os.makedirs(status_dir) if not name: output['endTimestamp'] = epoch_millis_now() names = ['running', sys.argv[0].split()[1]] # fdroid subcommand else: names = [name] for fname in names: path = os.path.join(status_dir, fname + '.json') with open(path, "w", encoding="utf-8") as fp: if pretty: json.dump(output, fp, sort_keys=True, cls=Encoder, indent=2) else: json.dump(output, fp, sort_keys=True, cls=Encoder, separators=(',', ':')) rsync_status_file_to_repo(path, repo_subdir='status') def get_head_commit_id(git_repo): """Get git commit ID for HEAD as a str.""" try: return git_repo.head.commit.hexsha except ValueError: return "None" def setup_vcs(app): """Checkout code from VCS and return instance of vcs and the build dir.""" build_dir = get_build_dir(app) # Set up vcs interface and make sure we have the latest code... logging.debug("Getting {0} vcs interface for {1}" .format(app.RepoType, app.Repo)) if app.RepoType == 'git' and os.path.exists('.fdroid.yml'): remote = os.getcwd() else: remote = app.Repo vcs = getvcs(app.RepoType, remote, build_dir) return vcs, build_dir def getvcs(vcstype, remote, local): """Return a vcs instance based on the arguments. remote and local can be either a string or a pathlib.Path """ if vcstype == 'git': return vcs_git(remote, local) if vcstype == 'git-svn': return vcs_gitsvn(remote, local) if vcstype == 'hg': return vcs_hg(remote, local) if vcstype == 'bzr': return vcs_bzr(remote, local) if vcstype == 'srclib': if str(local) != os.path.join('build', 'srclib', str(remote)): raise VCSException("Error: srclib paths are hard-coded!") return getsrclib(remote, os.path.join('build', 'srclib'), raw=True) if vcstype == 'svn': raise VCSException("Deprecated vcs type 'svn' - please use 'git-svn' instead") raise VCSException("Invalid vcs type " + vcstype) def getsrclibvcs(name): if name not in fdroidserver.metadata.srclibs: raise VCSException("Missing srclib " + name) return fdroidserver.metadata.srclibs[name]['RepoType'] class vcs: def __init__(self, remote, local): # svn, git-svn and bzr may require auth self.username = None if self.repotype() in ('git-svn', 'bzr'): if '@' in remote: if self.repotype == 'git-svn': raise VCSException("Authentication is not supported for git-svn") self.username, remote = remote.split('@') if ':' not in self.username: raise VCSException(_("Password required with username")) self.username, self.password = self.username.split(':') self.remote = remote self.local = local self.clone_failed = False self.refreshed = False self.srclib = None def _gettags(self): raise NotImplementedError def repotype(self): return None def clientversion(self): versionstr = FDroidPopen(self.clientversioncmd()).output return versionstr[0:versionstr.find('\n')] def clientversioncmd(self): return None def gotorevision(self, rev, refresh=True): """Take the local repository to a clean version of the given revision. Take the local repository to a clean version of the given revision, which is specificed in the VCS's native format. Beforehand, the repository can be dirty, or even non-existent. If the repository does already exist locally, it will be updated from the origin, but only once in the lifetime of the vcs object. None is acceptable for 'rev' if you know you are cloning a clean copy of the repo - otherwise it must specify a valid revision. """ if self.clone_failed: raise VCSException(_("Downloading the repository already failed once, not trying again.")) # The .fdroidvcs-id file for a repo tells us what VCS type # and remote that directory was created from, allowing us to drop it # automatically if either of those things changes. fdpath = os.path.join(self.local, '..', '.fdroidvcs-' + os.path.basename(self.local)) fdpath = os.path.normpath(fdpath) cdata = self.repotype() + ' ' + self.remote writeback = True deleterepo = False if os.path.exists(self.local): if os.path.exists(fdpath): with open(fdpath, 'r') as f: fsdata = f.read().strip() if fsdata == cdata: writeback = False else: deleterepo = True logging.info("Repository details for %s changed - deleting" % ( self.local)) else: deleterepo = True logging.info("Repository details for %s missing - deleting" % ( self.local)) if deleterepo: shutil.rmtree(self.local) exc = None if not refresh: self.refreshed = True try: self.gotorevisionx(rev) except FDroidException as e: exc = e # If necessary, write the .fdroidvcs file. if writeback and not self.clone_failed: os.makedirs(os.path.dirname(fdpath), exist_ok=True) with open(fdpath, 'w+') as f: f.write(cdata) if exc is not None: raise exc def gotorevisionx(self, rev): # pylint: disable=unused-argument """No summary. Derived classes need to implement this. It's called once basic checking has been performed. """ raise VCSException("This VCS type doesn't define gotorevisionx") # Initialise and update submodules def initsubmodules(self): raise VCSException('Submodules not supported for this vcs type') # Deinitialise and update submodules def deinitsubmodules(self): pass # Get a list of all known tags def gettags(self): if not self._gettags: raise VCSException('gettags not supported for this vcs type') rtags = [] for tag in self._gettags(): if re.match('[-A-Za-z0-9_. /]+$', tag): rtags.append(tag) return rtags def latesttags(self): """Get a list of all the known tags, sorted from newest to oldest.""" raise VCSException('latesttags not supported for this vcs type') def getref(self, revname=None): """Get current commit reference (hash, revision, etc).""" raise VCSException('getref not supported for this vcs type') def getsrclib(self): """Return the srclib (name, path) used in setting up the current revision, or None.""" return self.srclib class vcs_git(vcs): def repotype(self): return 'git' def clientversioncmd(self): return ['git', '--version'] def git(self, args, envs=dict(), cwd=None, output=True): """Prevent git fetch/clone/submodule from hanging at the username/password prompt. While fetch/pull/clone respect the command line option flags, it seems that submodule commands do not. They do seem to follow whatever is in env vars, if the version of git is new enough. So we just throw the kitchen sink at it to see what sticks. Also, because of CVE-2017-1000117, block all SSH URLs. """ # # supported in git >= 2.3 git_config = [ '-c', 'core.askpass=/bin/true', '-c', 'core.sshCommand=/bin/false', '-c', 'url.https://.insteadOf=ssh://', ] for domain in ('bitbucket.org', 'github.com', 'gitlab.com', 'codeberg.org'): git_config.append('-c') git_config.append('url.https://u:p@' + domain + '/.insteadOf=git@' + domain + ':') git_config.append('-c') git_config.append('url.https://u:p@' + domain + '.insteadOf=git://' + domain) git_config.append('-c') git_config.append('url.https://u:p@' + domain + '.insteadOf=https://' + domain) envs.update({ 'GIT_TERMINAL_PROMPT': '0', 'GIT_ASKPASS': '/bin/true', 'SSH_ASKPASS': '/bin/true', 'GIT_SSH': '/bin/false', # for git < 2.3 }) return FDroidPopen(['git', ] + git_config + args, envs=envs, cwd=cwd, output=output) def checkrepo(self): """No summary. If the local directory exists, but is somehow not a git repository, git will traverse up the directory tree until it finds one that is (i.e. fdroidserver) and then we'll proceed to destroy it! This is called as a safety check. """ p = FDroidPopen(['git', 'rev-parse', '--show-toplevel'], cwd=self.local, output=False) result = p.output.rstrip() if Path(result) != Path(self.local).resolve(): raise VCSException('Repository mismatch') def gotorevisionx(self, rev): if not os.path.exists(self.local): # Brand new checkout p = self.git(['clone', '--', self.remote, str(self.local)]) if p.returncode != 0: self.clone_failed = True raise VCSException("Git clone failed", p.output) self.checkrepo() else: self.checkrepo() # Discard any working tree changes p = FDroidPopen(['git', 'submodule', 'foreach', '--recursive', 'git', 'reset', '--hard'], cwd=self.local, output=False) if p.returncode != 0: logging.debug("Git submodule reset failed (ignored) {output}".format(output=p.output)) p = FDroidPopen(['git', 'reset', '--hard'], cwd=self.local, output=False) if p.returncode != 0: raise VCSException(_("Git reset failed"), p.output) # Remove untracked files now, in case they're tracked in the target # revision (it happens!) p = FDroidPopen(['git', 'submodule', 'foreach', '--recursive', 'git', 'clean', '-dffx'], cwd=self.local, output=False) if p.returncode != 0: logging.debug("Git submodule cleanup failed (ignored) {output}".format(output=p.output)) p = FDroidPopen(['git', 'clean', '-dffx'], cwd=self.local, output=False) if p.returncode != 0: raise VCSException(_("Git clean failed"), p.output) if not self.refreshed: # Get latest commits and tags from remote p = self.git(['fetch', '--prune', '--prune-tags', '--force', 'origin'], cwd=self.local) if p.returncode != 0: raise VCSException(_("Git fetch failed"), p.output) p = self.git(['fetch', '--prune', '--tags', '--force', 'origin'], output=False, cwd=self.local) if p.returncode != 0: raise VCSException(_("Git fetch failed"), p.output) # Recreate origin/HEAD as git clone would do it, in case it disappeared p = FDroidPopen(['git', 'remote', 'set-head', 'origin', '--auto'], cwd=self.local, output=False) if p.returncode != 0: lines = p.output.splitlines() if 'Multiple remote HEAD branches' not in lines[0]: logging.warning(_("Git remote set-head failed: \"%s\"") % p.output.strip()) else: branch = lines[1].split(' ')[-1] p2 = FDroidPopen(['git', 'remote', 'set-head', 'origin', '--', branch], cwd=self.local, output=False) if p2.returncode != 0: logging.warning(_("Git remote set-head failed: \"%s\"") % p.output.strip() + '\n' + p2.output.strip()) self.refreshed = True # origin/HEAD is the HEAD of the remote, e.g. the "default branch" on # a github repo. Most of the time this is the same as origin/master. rev = rev or 'origin/HEAD' p = FDroidPopen(['git', 'checkout', '-f', rev], cwd=self.local, output=False) if p.returncode != 0: raise VCSException(_("Git checkout of '%s' failed") % rev, p.output) # Get rid of any uncontrolled files left behind p = FDroidPopen(['git', 'clean', '-dffx'], cwd=self.local, output=False) if p.returncode != 0: raise VCSException(_("Git clean failed"), p.output) def initsubmodules(self): self.checkrepo() submfile = os.path.join(self.local, '.gitmodules') if not os.path.isfile(submfile): raise NoSubmodulesException(_("No git submodules available")) # fix submodules not accessible without an account and public key auth with open(submfile, 'r') as f: lines = f.readlines() with open(submfile, 'w') as f: for line in lines: for domain in ('bitbucket.org', 'github.com', 'gitlab.com'): line = re.sub('git@' + domain + ':', 'https://u:p@' + domain + '/', line) f.write(line) p = FDroidPopen(['git', 'submodule', 'sync'], cwd=self.local, output=False) if p.returncode != 0: raise VCSException(_("Git submodule sync failed"), p.output) p = self.git(['submodule', 'update', '--init', '--force', '--recursive'], cwd=self.local) if p.returncode != 0: raise VCSException(_("Git submodule update failed"), p.output) def deinitsubmodules(self): self.checkrepo() p = FDroidPopen(['git', 'submodule', 'deinit', '--all', '--force'], cwd=self.local, output=False) if p.returncode != 0: raise VCSException(_("Git submodule deinit failed"), p.output) def _gettags(self): self.checkrepo() p = FDroidPopen(['git', 'tag'], cwd=self.local, output=False) return p.output.splitlines() def latesttags(self): """Return a list of latest tags.""" self.checkrepo() return [tag.name for tag in sorted( git.Repo(self.local).tags, key=lambda t: t.commit.committed_date, reverse=True )] def getref(self, revname='HEAD'): self.checkrepo() repo = git.Repo(self.local) try: return repo.commit(revname).hexsha except git.BadName: return None class vcs_gitsvn(vcs): def repotype(self): return 'git-svn' def clientversioncmd(self): return ['git', 'svn', '--version'] def checkrepo(self): """No summary. If the local directory exists, but is somehow not a git repository, git will traverse up the directory tree until it finds one that is (i.e. fdroidserver) and then we'll proceed to destory it! This is called as a safety check. """ p = FDroidPopen(['git', 'rev-parse', '--show-toplevel'], cwd=self.local, output=False) result = p.output.rstrip() if Path(result) != Path(self.local).resolve(): raise VCSException('Repository mismatch') def git(self, args, envs=dict(), cwd=None, output=True): """Prevent git fetch/clone/submodule from hanging at the username/password prompt. AskPass is set to /bin/true to let the process try to connect without a username/password. The SSH command is set to /bin/false to block all SSH URLs (supported in git >= 2.3). This protects against CVE-2017-1000117. """ git_config = [ '-c', 'core.askpass=/bin/true', '-c', 'core.sshCommand=/bin/false', ] envs.update({ 'GIT_TERMINAL_PROMPT': '0', 'GIT_ASKPASS': '/bin/true', 'SSH_ASKPASS': '/bin/true', 'GIT_SSH': '/bin/false', # for git < 2.3 'SVN_SSH': '/bin/false', }) return FDroidPopen(['git', ] + git_config + args, envs=envs, cwd=cwd, output=output) def gotorevisionx(self, rev): if not os.path.exists(self.local): # Brand new checkout gitsvn_args = ['svn', 'clone'] remote = None if ';' in self.remote: remote_split = self.remote.split(';') for i in remote_split[1:]: if i.startswith('trunk='): gitsvn_args.extend(['-T', i[6:]]) elif i.startswith('tags='): gitsvn_args.extend(['-t', i[5:]]) elif i.startswith('branches='): gitsvn_args.extend(['-b', i[9:]]) remote = remote_split[0] else: remote = self.remote if not remote.startswith('https://'): raise VCSException(_('HTTPS must be used with Subversion URLs!')) # git-svn sucks at certificate validation, this throws useful errors: try: import requests r = requests.head(remote, timeout=300) r.raise_for_status() except Exception as e: raise VCSException('SVN certificate pre-validation failed: ' + str(e)) from e location = r.headers.get('location') if location and not location.startswith('https://'): raise VCSException(_('Invalid redirect to non-HTTPS: {before} -> {after} ') .format(before=remote, after=location)) gitsvn_args.extend(['--', remote, str(self.local)]) p = self.git(gitsvn_args) if p.returncode != 0: self.clone_failed = True raise VCSException(_('git svn clone failed'), p.output) self.checkrepo() else: self.checkrepo() # Discard any working tree changes p = self.git(['reset', '--hard'], cwd=self.local, output=False) if p.returncode != 0: raise VCSException("Git reset failed", p.output) # Remove untracked files now, in case they're tracked in the target # revision (it happens!) p = self.git(['clean', '-dffx'], cwd=self.local, output=False) if p.returncode != 0: raise VCSException("Git clean failed", p.output) if not self.refreshed: # Get new commits, branches and tags from repo p = self.git(['svn', 'fetch'], cwd=self.local, output=False) if p.returncode != 0: raise VCSException("Git svn fetch failed") p = self.git(['svn', 'rebase'], cwd=self.local, output=False) if p.returncode != 0: raise VCSException("Git svn rebase failed", p.output) self.refreshed = True rev = rev or 'master' if rev: nospaces_rev = rev.replace(' ', '%20') # Try finding a svn tag for treeish in ['origin/', '']: p = self.git(['checkout', treeish + 'tags/' + nospaces_rev], cwd=self.local, output=False) if p.returncode == 0: break if p.returncode != 0: # No tag found, normal svn rev translation # Translate svn rev into git format rev_split = rev.split('/') p = None for treeish in ['origin/', '']: if len(rev_split) > 1: treeish += rev_split[0] svn_rev = rev_split[1] else: # if no branch is specified, then assume trunk (i.e. 'master' branch): treeish += 'master' svn_rev = rev svn_rev = svn_rev if svn_rev[0] == 'r' else 'r' + svn_rev p = self.git(['svn', 'find-rev', '--before', svn_rev, treeish], cwd=self.local, output=False) git_rev = p.output.rstrip() if p.returncode == 0 and git_rev: break if p.returncode != 0 or not git_rev: # Try a plain git checkout as a last resort p = self.git(['checkout', rev], cwd=self.local, output=False) if p.returncode != 0: raise VCSException("No git treeish found and direct git checkout of '%s' failed" % rev, p.output) else: # Check out the git rev equivalent to the svn rev p = self.git(['checkout', git_rev], cwd=self.local, output=False) if p.returncode != 0: raise VCSException(_("Git checkout of '%s' failed") % rev, p.output) # Get rid of any uncontrolled files left behind p = self.git(['clean', '-dffx'], cwd=self.local, output=False) if p.returncode != 0: raise VCSException(_("Git clean failed"), p.output) def _gettags(self): self.checkrepo() for treeish in ['origin/', '']: d = os.path.join(self.local, '.git', 'svn', 'refs', 'remotes', treeish, 'tags') if os.path.isdir(d): return os.listdir(d) def getref(self, revname='HEAD'): self.checkrepo() p = FDroidPopen(['git', 'svn', 'find-rev', revname], cwd=self.local, output=False) if p.returncode != 0: return None return p.output.strip() class vcs_hg(vcs): def repotype(self): return 'hg' def clientversioncmd(self): return ['hg', '--version'] def gotorevisionx(self, rev): if not os.path.exists(self.local): p = FDroidPopen(['hg', 'clone', '--ssh', '/bin/false', '--', self.remote, str(self.local)], output=False) if p.returncode != 0: self.clone_failed = True raise VCSException("Hg clone failed", p.output) else: p = FDroidPopen(['hg', 'status', '-uiS'], cwd=self.local, output=False) if p.returncode != 0: raise VCSException("Hg status failed", p.output) for line in p.output.splitlines(): if not line.startswith('? ') and not line.startswith('I '): raise VCSException("Unexpected output from hg status -uS: " + line) FDroidPopen(['rm', '-rf', '--', line[2:]], cwd=self.local, output=False) if not self.refreshed: p = FDroidPopen(['hg', 'pull', '--ssh', '/bin/false'], cwd=self.local, output=False) if p.returncode != 0: raise VCSException("Hg pull failed", p.output) self.refreshed = True rev = rev or 'default' if not rev: return p = FDroidPopen(['hg', 'update', '-C', '--', rev], cwd=self.local, output=False) if p.returncode != 0: raise VCSException("Hg checkout of '%s' failed" % rev, p.output) def _gettags(self): p = FDroidPopen(['hg', 'tags', '-q'], cwd=self.local, output=False) return p.output.splitlines()[1:] class vcs_bzr(vcs): def repotype(self): return 'bzr' def clientversioncmd(self): return ['bzr', '--version'] def bzr(self, args, envs=dict(), cwd=None, output=True): """Prevent bzr from ever using SSH to avoid security vulns.""" envs.update({ 'BZR_SSH': 'false', }) return FDroidPopen(['bzr', ] + args, envs=envs, cwd=cwd, output=output) def gotorevisionx(self, rev): if not os.path.exists(self.local): p = self.bzr(['branch', self.remote, str(self.local)], output=False) if p.returncode != 0: self.clone_failed = True raise VCSException("Bzr branch failed", p.output) else: p = self.bzr(['clean-tree', '--force', '--unknown', '--ignored'], cwd=self.local, output=False) if p.returncode != 0: raise VCSException("Bzr revert failed", p.output) if not self.refreshed: p = self.bzr(['pull'], cwd=self.local, output=False) if p.returncode != 0: raise VCSException("Bzr update failed", p.output) self.refreshed = True revargs = list(['-r', rev] if rev else []) p = self.bzr(['revert'] + revargs, cwd=self.local, output=False) if p.returncode != 0: raise VCSException("Bzr revert of '%s' failed" % rev, p.output) def _gettags(self): p = self.bzr(['tags'], cwd=self.local, output=False) return [tag.split(' ')[0].strip() for tag in p.output.splitlines()] def unescape_string(string): if len(string) < 2: return string if string[0] == '"' and string[-1] == '"': return string[1:-1] return string.replace("\\'", "'") def retrieve_string(app_dir, string, xmlfiles=None): if string.startswith('@string/'): name = string[len('@string/'):] elif string.startswith('${'): return '' # Gradle variable else: return unescape_string(string) if xmlfiles is None: xmlfiles = [] for res_dir in [ os.path.join(app_dir, 'res'), os.path.join(app_dir, 'src', 'main', 'res'), ]: for root, dirs, files in os.walk(res_dir): if os.path.basename(root) == 'values': xmlfiles += [os.path.join(root, x) for x in files if x.endswith('.xml')] def element_content(element): if element.text is None: return "" s = XMLElementTree.tostring(element, encoding='utf-8', method='text') return s.decode('utf-8').strip() for path in sorted(xmlfiles): if not os.path.isfile(path): continue try: xml = parse_xml(path) except (XMLElementTree.ParseError, ValueError): logging.warning(_("Problem with xml at '{path}'").format(path=path)) continue element = xml.find('string[@name="' + name + '"]') if element is not None: content = element_content(element) return retrieve_string(app_dir, content, xmlfiles) return '' def retrieve_string_singleline(app_dir, string, xmlfiles=None): return retrieve_string(app_dir, string, xmlfiles).replace('\n', ' ').strip() def manifest_paths(app_dir, flavours): """Return list of existing files that will be used to find the highest vercode.""" possible_manifests = \ [Path(app_dir) / 'AndroidManifest.xml', Path(app_dir) / 'src/main/AndroidManifest.xml', Path(app_dir) / 'src/AndroidManifest.xml', Path(app_dir) / 'build.gradle', Path(app_dir) / 'build-extras.gradle', Path(app_dir) / 'build.gradle.kts'] for flavour in flavours: if flavour == 'yes': continue possible_manifests.append( Path(app_dir) / 'src' / flavour / 'AndroidManifest.xml') return [path for path in possible_manifests if path.is_file()] def fetch_real_name(app_dir, flavours): """Retrieve the package name. Returns the name, or None if not found.""" for path in manifest_paths(app_dir, flavours): if not path.suffix == '.xml' or not path.is_file(): continue logging.debug("fetch_real_name: Checking manifest at %s" % path) try: xml = parse_xml(path) except (XMLElementTree.ParseError, ValueError): logging.warning(_("Problem with xml at '{path}'").format(path=path)) continue app = xml.find('application') if app is None: continue if XMLNS_ANDROID + "label" not in app.attrib: continue label = app.attrib[XMLNS_ANDROID + "label"] result = retrieve_string_singleline(app_dir, label) if result: result = result.strip() return result return None def get_library_references(root_dir): libraries = [] proppath = os.path.join(root_dir, 'project.properties') if not os.path.isfile(proppath): return libraries with open(proppath, 'r', encoding='iso-8859-1') as f: for line in f: if not line.startswith('android.library.reference.'): continue path = line.split('=')[1].strip() relpath = os.path.join(root_dir, path) if not os.path.isdir(relpath): continue logging.debug("Found subproject at %s" % path) libraries.append(path) return libraries def ant_subprojects(root_dir): subprojects = get_library_references(root_dir) for subpath in subprojects: subrelpath = os.path.join(root_dir, subpath) for p in get_library_references(subrelpath): relp = os.path.normpath(os.path.join(subpath, p)) if relp not in subprojects: subprojects.insert(0, relp) return subprojects def remove_debuggable_flags(root_dir): # Remove forced debuggable flags logging.debug("Removing debuggable flags from %s" % root_dir) for root, dirs, files in os.walk(root_dir): if 'AndroidManifest.xml' in files and os.path.isfile(os.path.join(root, 'AndroidManifest.xml')): regsub_file(r'android:debuggable="[^"]*"', '', os.path.join(root, 'AndroidManifest.xml')) vcsearch_g = re.compile(r'''\b[Vv]ersionCode\s*=?\s*["'(]*([0-9][0-9_]*)["')]*''').search vnsearch_g = re.compile(r'''\b[Vv]ersionName\s*=?\s*\(?(["'])((?:(?=(\\?))\3.)*?)\1''').search vnssearch_g = re.compile(r'''\b[Vv]ersionNameSuffix\s*=?\s*(["'])((?:(?=(\\?))\3.)*?)\1''').search psearch_g = re.compile(r'''\b(packageName|applicationId|namespace)\s*=*\s*["']([^"']+)["']''').search fsearch_g = re.compile(r'''\b(applicationIdSuffix)\s*=*\s*["']([^"']+)["']''').search def app_matches_packagename(app, package): if not package: return False appid = app.UpdateCheckName or app.id if appid is None or appid == "Ignore": return True return appid == package def parse_androidmanifests(paths, app): """Extract some information from the AndroidManifest.xml at the given path. Returns (version, vercode, package), any or all of which might be None. All values returned are strings. Android Studio recommends "you use UTF-8 encoding whenever possible", so this code assumes the files use UTF-8. https://sites.google.com/a/android.com/tools/knownissues/encoding """ ignoreversions = app.UpdateCheckIgnore ignoresearch = re.compile(ignoreversions).search if ignoreversions else None if not paths: return (None, None, None) max_version = None max_vercode = None max_package = None def vnsearch(line): matches = vnsearch_g(line) if matches and not any( matches.group(2).startswith(s) for s in [ '${', # Gradle variable names '@string/', # Strings we could not resolve ] ): return matches.group(2) return None for path in paths: if not path.is_file(): continue logging.debug(_("Parsing manifest at '{path}'").format(path=path)) version = None vercode = None package = None flavours = None temp_app_id = None temp_version_name = None if len(app.get('Builds', [])) > 0 and 'gradle' in app['Builds'][-1] and app['Builds'][-1].gradle: flavours = app['Builds'][-1].gradle if path.suffix == '.gradle' or path.name.endswith('.gradle.kts'): with open(path, 'r', encoding='utf-8') as f: android_plugin_file = False inside_flavour_group = 0 inside_required_flavour = 0 for line in f: if gradle_comment.match(line): continue if "applicationId" in line and not temp_app_id: matches = psearch_g(line) if matches: temp_app_id = matches.group(2) if "versionName" in line and not temp_version_name: matches = vnsearch(line) if matches: temp_version_name = matches if inside_flavour_group > 0: if inside_required_flavour > 1: matches = psearch_g(line) if matches: s = matches.group(2) if app_matches_packagename(app, s): package = s else: # If build.gradle contains applicationIdSuffix add it to the end of package name matches = fsearch_g(line) if matches and temp_app_id: suffix = matches.group(2) temp_app_id = temp_app_id + suffix if app_matches_packagename(app, temp_app_id): package = temp_app_id matches = vnsearch(line) if matches: version = matches else: # If build.gradle contains applicationNameSuffix add it to the end of version name matches = vnssearch_g(line) if matches and temp_version_name: name_suffix = matches.group(2) version = temp_version_name + name_suffix matches = vcsearch_g(line) if matches: vercode = version_code_string_to_int(matches.group(1)) if inside_required_flavour > 0: if '{' in line: inside_required_flavour += 1 if '}' in line: inside_required_flavour -= 1 if inside_required_flavour == 1: inside_required_flavour -= 1 elif flavours: for flavour in flavours: if re.match(r'.*[\'"\s]{flavour}[\'"\s].*\{{.*'.format(flavour=flavour), line): inside_required_flavour = 2 break if re.match(r'.*[\'"\s]{flavour}[\'"\s].*'.format(flavour=flavour), line): inside_required_flavour = 1 break if '{' in line: inside_flavour_group += 1 if '}' in line: inside_flavour_group -= 1 else: if "productFlavors" in line: inside_flavour_group = 1 if not package: matches = psearch_g(line) if matches: s = matches.group(2) if app_matches_packagename(app, s): package = s if not version: matches = vnsearch(line) if matches: version = matches if not vercode: matches = vcsearch_g(line) if matches: vercode = version_code_string_to_int(matches.group(1)) if not android_plugin_file and ANDROID_PLUGIN_REGEX.match(line): android_plugin_file = True if android_plugin_file: if package: max_package = package if version: max_version = version if vercode: max_vercode = vercode if max_package and max_version and max_vercode: break else: try: xml = parse_xml(path) except (XMLElementTree.ParseError, ValueError): logging.warning(_("Problem with xml at '{path}'").format(path=path)) continue if "package" in xml.attrib: s = xml.attrib["package"] if app_matches_packagename(app, s): package = s if XMLNS_ANDROID + "versionName" in xml.attrib: version = xml.attrib[XMLNS_ANDROID + "versionName"] base_dir = os.path.dirname(path) version = retrieve_string_singleline(base_dir, version) if XMLNS_ANDROID + "versionCode" in xml.attrib: vercode = version_code_string_to_int( xml.attrib[XMLNS_ANDROID + "versionCode"]) # Remember package name, may be defined separately from version+vercode if package is None: package = max_package logging.debug("..got package={0}, version={1}, vercode={2}" .format(package, version, vercode)) # Always grab the package name and version name in case they are not # together with the highest version code if max_package is None and package is not None: max_package = package if max_version is None and version is not None: max_version = version if vercode is not None \ and (max_vercode is None or vercode > max_vercode): if version and (not ignoresearch or not ignoresearch(version)): if version is not None: max_version = version if vercode is not None: max_vercode = vercode if package is not None: max_package = package else: max_version = "Ignore" if max_version is None: max_version = "Unknown" if max_package: msg = _("Invalid application ID {appid}").format(appid=max_package) if not is_valid_package_name(max_package): raise FDroidException(msg) elif not is_strict_application_id(max_package): logging.warning(msg) return (max_version, max_vercode, max_package) def is_valid_package_name(name): """Check whether name is a valid fdroid package name. APKs and manually defined package names must use a valid Java Package Name. Automatically generated package names for non-APK files use the SHA-256 sum. """ return VALID_APPLICATION_ID_REGEX.match(name) is not None \ or FDROID_PACKAGE_NAME_REGEX.match(name) is not None def is_strict_application_id(name): """Check whether name is a valid Android Application ID. The Android ApplicationID is basically a Java Package Name, but with more restrictive naming rules: * It must have at least two segments (one or more dots). * Each segment must start with a letter. * All characters must be alphanumeric or an underscore [a-zA-Z0-9_]. References ---------- https://developer.android.com/studio/build/application-id """ return STRICT_APPLICATION_ID_REGEX.match(name) is not None \ and '.' in name def parse_srclib_spec(spec): if type(spec) != str: raise MetaDataException(_("can not parse scrlib spec " "(not a string): '{}'") .format(spec)) tokens = spec.split('@', 1) if not tokens[0]: raise MetaDataException( _("could not parse srclib spec (no name specified): '{}'").format(spec) ) if len(tokens) < 2 or not tokens[1]: raise MetaDataException( _("could not parse srclib spec (no ref specified): '{}'").format(spec) ) name = tokens[0] ref = tokens[1] number = None subdir = None if ':' in name: number, name = name.split(':', 1) if '/' in name: name, subdir = name.split('/', 1) return (name, ref, number, subdir) def getsrclib(spec, srclib_dir, basepath=False, raw=False, prepare=True, preponly=False, refresh=True, build=None): """Get the specified source library. Return the path to it. Normally this is the path to be used when referencing it, which may be a subdirectory of the actual project. If you want the base directory of the project, pass 'basepath=True'. spec and srclib_dir are both strings, not pathlib.Path. """ number = None subdir = None if not isinstance(spec, str): spec = str(spec) if not isinstance(srclib_dir, str): spec = str(srclib_dir) if raw: name = spec ref = None else: name, ref, number, subdir = parse_srclib_spec(spec) if name not in fdroidserver.metadata.srclibs: raise VCSException('srclib ' + name + ' not found.') srclib = fdroidserver.metadata.srclibs[name] sdir = os.path.join(srclib_dir, name) if not preponly: vcs = getvcs(srclib["RepoType"], srclib["Repo"], sdir) vcs.srclib = (name, number, sdir) if ref: vcs.gotorevision(ref, refresh) if raw: return vcs libdir = None if subdir: libdir = os.path.join(sdir, subdir) elif srclib["Subdir"]: for subdir in srclib["Subdir"]: libdir_candidate = os.path.join(sdir, subdir) if os.path.exists(libdir_candidate): libdir = libdir_candidate break if libdir is None: libdir = sdir remove_signing_keys(sdir) remove_debuggable_flags(sdir) if prepare: if srclib["Prepare"]: cmd = replace_config_vars("; ".join(srclib["Prepare"]), build) p = FDroidPopen(['bash', '-e', '-u', '-o', 'pipefail', '-x', '-c', '--', cmd], cwd=libdir) if p.returncode != 0: raise BuildException("Error running prepare command for srclib %s" % name, p.output) if basepath: libdir = sdir return (name, number, libdir) gradle_version_regex = re.compile(r"[^/]*'com\.android\.tools\.build:gradle:([^\.]+\.[^\.]+).*'.*") def prepare_source(vcs, app, build, build_dir, srclib_dir, extlib_dir, onserver=False, refresh=True): """Prepare the source code for a particular build. Parameters ---------- vcs the appropriate vcs object for the application app the application details from the metadata build the build details from the metadata build_dir the path to the build directory, usually 'build/app.id' srclib_dir the path to the source libraries directory, usually 'build/srclib' extlib_dir the path to the external libraries directory, usually 'build/extlib' Returns ------- root is the root directory, which may be the same as 'build_dir' or may be a subdirectory of it. srclibpaths is information on the srclibs being used """ # Optionally, the actual app source can be in a subdirectory if build.subdir: root_dir = os.path.join(build_dir, build.subdir) else: root_dir = build_dir # Get a working copy of the right revision logging.info("Getting source for revision " + build.commit) vcs.gotorevision(build.commit, refresh) # Initialise submodules if required if build.submodules: logging.info(_("Initialising submodules")) vcs.initsubmodules() else: vcs.deinitsubmodules() # Check that a subdir (if we're using one) exists. This has to happen # after the checkout, since it might not exist elsewhere if not os.path.exists(root_dir): raise BuildException('Missing subdir ' + root_dir) # Run an init command if one is required if build.init: cmd = replace_config_vars("; ".join(build.init), build) logging.info("Running 'init' commands in %s" % root_dir) p = FDroidPopen(['bash', '-e', '-u', '-o', 'pipefail', '-x', '-c', '--', cmd], cwd=root_dir) if p.returncode != 0: raise BuildException("Error running init command for %s:%s" % (app.id, build.versionName), p.output) # Apply patches if any if build.patch: logging.info("Applying patches") for patch in build.patch: patch = patch.strip() logging.info("Applying " + patch) patch_path = os.path.join('metadata', app.id, patch) p = FDroidPopen(['patch', '-p1', '-i', os.path.abspath(patch_path)], cwd=build_dir) if p.returncode != 0: raise BuildException("Failed to apply patch %s" % patch_path) # Get required source libraries srclibpaths = [] if build.srclibs: logging.info("Collecting source libraries") for lib in build.srclibs: srclibpaths.append(getsrclib(lib, srclib_dir, preponly=onserver, refresh=refresh, build=build)) for name, number, libpath in srclibpaths: place_srclib(root_dir, int(number) if number else None, libpath) basesrclib = vcs.getsrclib() # If one was used for the main source, add that too. if basesrclib: srclibpaths.append(basesrclib) # Update the local.properties file localprops = [os.path.join(build_dir, 'local.properties')] if build.subdir: parts = build.subdir.split(os.sep) cur = build_dir for d in parts: cur = os.path.join(cur, d) localprops += [os.path.join(cur, 'local.properties')] for path in localprops: props = "" if os.path.isfile(path): logging.info("Updating local.properties file at %s" % path) with open(path, 'r', encoding='iso-8859-1') as f: props += f.read() props += '\n' else: logging.info("Creating local.properties file at %s" % path) # Fix old-fashioned 'sdk-location' by copying # from sdk.dir, if necessary if build.oldsdkloc: sdkloc = re.match(r".*^sdk.dir=(\S+)$.*", props, re.S | re.M).group(1) props += "sdk-location=%s\n" % sdkloc else: props += "sdk.dir=%s\n" % config['sdk_path'] props += "sdk-location=%s\n" % config['sdk_path'] ndk_path = build.ndk_path() # if for any reason the path isn't valid or the directory # doesn't exist, some versions of Gradle will error with a # cryptic message (even if the NDK is not even necessary). # https://gitlab.com/fdroid/fdroidserver/issues/171 if ndk_path and os.path.exists(ndk_path): # Add ndk location props += "ndk.dir=%s\n" % ndk_path props += "ndk-location=%s\n" % ndk_path # Add java.encoding if necessary if build.encoding: props += "java.encoding=%s\n" % build.encoding with open(path, 'w', encoding='iso-8859-1') as f: f.write(props) flavours = [] if build.build_method() == 'gradle': flavours = build.gradle if build.target: n = build.target.split('-')[1] build_gradle = os.path.join(root_dir, "build.gradle") build_gradle_kts = build_gradle + ".kts" if os.path.exists(build_gradle): gradlefile = build_gradle elif os.path.exists(build_gradle_kts): gradlefile = build_gradle_kts else: raise BuildException("No gradle file found") regsub_file(r'compileSdkVersion[ =]+[0-9]+', r'compileSdkVersion %s' % n, gradlefile) # Remove forced debuggable flags remove_debuggable_flags(root_dir) # Insert version code and number into the manifest if necessary if build.forceversion: logging.info("Changing the version name") for path in manifest_paths(root_dir, flavours): if not os.path.isfile(path): continue if path.suffix == '.xml': regsub_file(r'android:versionName="[^"]*"', r'android:versionName="%s"' % build.versionName, path) elif path.suffix == '.gradle': regsub_file(r"""(\s*)versionName[\s'"=]+.*""", r"""\1versionName '%s'""" % build.versionName, path) if build.forcevercode: logging.info("Changing the version code") for path in manifest_paths(root_dir, flavours): if not path.is_file(): continue if path.suffix == '.xml': regsub_file(r'android:versionCode="[^"]*"', r'android:versionCode="%s"' % build.versionCode, path) elif path.suffix == '.gradle': regsub_file(r'versionCode[ =]+[0-9]+', r'versionCode %s' % build.versionCode, path) # Delete unwanted files if build.rm: logging.info(_("Removing specified files")) for part in getpaths(build_dir, build.rm): dest = os.path.join(build_dir, part) logging.info("Removing {0}".format(part)) if os.path.lexists(dest): # rmtree can only handle directories that are not symlinks, so catch anything else if not os.path.isdir(dest) or os.path.islink(dest): os.remove(dest) else: shutil.rmtree(dest) else: logging.info("...but it didn't exist") remove_signing_keys(build_dir) # Add required external libraries if build.extlibs: logging.info("Collecting prebuilt libraries") libsdir = os.path.join(root_dir, 'libs') if not os.path.exists(libsdir): os.mkdir(libsdir) for lib in build.extlibs: lib = lib.strip() logging.info("...installing extlib {0}".format(lib)) libf = os.path.basename(lib) libsrc = os.path.join(extlib_dir, lib) if not os.path.exists(libsrc): raise BuildException("Missing extlib file {0}".format(libsrc)) shutil.copyfile(libsrc, os.path.join(libsdir, libf)) # Add extlibs to scanignore (this is relative to the build dir root, *sigh*) if build.subdir: scanignorepath = os.path.join(build.subdir, 'libs', libf) else: scanignorepath = os.path.join('libs', libf) if scanignorepath not in build.scanignore: build.scanignore.append(scanignorepath) # Run a pre-build command if one is required if build.prebuild: logging.info("Running 'prebuild' commands in %s" % root_dir) cmd = replace_config_vars("; ".join(build.prebuild), build) # Substitute source library paths into prebuild commands for name, number, libpath in srclibpaths: cmd = cmd.replace('$$' + name + '$$', os.path.join(os.getcwd(), libpath)) p = FDroidPopen(['bash', '-e', '-u', '-o', 'pipefail', '-x', '-c', '--', cmd], cwd=root_dir) if p.returncode != 0: raise BuildException("Error running prebuild command for %s:%s" % (app.id, build.versionName), p.output) # Generate (or update) the ant build file, build.xml... if build.build_method() == 'ant' and build.androidupdate != ['no']: parms = ['android', 'update', 'lib-project'] lparms = ['android', 'update', 'project'] if build.target: parms += ['-t', build.target] lparms += ['-t', build.target] if build.androidupdate: update_dirs = build.androidupdate else: update_dirs = ant_subprojects(root_dir) + ['.'] for d in update_dirs: subdir = os.path.join(root_dir, d) if d == '.': logging.debug("Updating main project") cmd = parms + ['-p', d] else: logging.debug("Updating subproject %s" % d) cmd = lparms + ['-p', d] p = SdkToolsPopen(cmd, cwd=root_dir) # Check to see whether an error was returned without a proper exit # code (this is the case for the 'no target set or target invalid' # error) if p.returncode != 0 or p.output.startswith("Error: "): raise BuildException("Failed to update project at %s" % d, p.output) # Clean update dirs via ant if d != '.': logging.info("Cleaning subproject %s" % d) p = FDroidPopen(['ant', 'clean'], cwd=subdir) return (root_dir, srclibpaths) def getpaths_map(build_dir, globpaths): """Extend via globbing the paths from a field and return them as a map from original path to resulting paths.""" paths = dict() not_found_paths = [] for p in globpaths: p = p.strip() full_path = os.path.join(build_dir, p) full_path = os.path.normpath(full_path) paths[p] = [r[len(str(build_dir)) + 1:] for r in glob.glob(full_path)] if not paths[p]: not_found_paths.append(p) if not_found_paths: raise FDroidException( "Some glob paths did not match any files/dirs:\n" + "\n".join(not_found_paths) ) return paths def getpaths(build_dir, globpaths): """Extend via globbing the paths from a field and return them as a set.""" paths_map = getpaths_map(build_dir, globpaths) paths = set() for k, v in paths_map.items(): for p in v: paths.add(p) return paths def natural_key(s): return [int(sp) if sp.isdigit() else sp for sp in re.split(r'(\d+)', s)] def check_system_clock(dt_obj, path): """Check if system clock is updated based on provided date. If an APK has files newer than the system time, suggest updating the system clock. This is useful for offline systems, used for signing, which do not have another source of clock sync info. It has to be more than 24 hours newer because ZIP/APK files do not store timezone info """ checkdt = dt_obj - timedelta(1) if datetime.today() < checkdt: logging.warning(_('System clock is older than date in {path}!').format(path=path) + '\n' + _('Set clock to that time using:') + '\n' + 'sudo date -s "' + str(dt_obj) + '"') class KnownApks: """Permanent store of existing APKs with the date they were added. This is currently the only way to permanently store the "updated" date of APKs. """ def __init__(self): """Load filename/date info about previously seen APKs. Since the appid and date strings both will never have spaces, this is parsed as a list from the end to allow the filename to have any combo of spaces. """ self.apks = {} for part in ('repo', 'archive'): path = os.path.join(part, 'index-v2.json') if os.path.isfile(path): with open(path, 'r', encoding='utf-8') as f: index = json.load(f) for appid, data in index["packages"].items(): for version in data["versions"].values(): filename = version["file"]["name"][1:] date = datetime.fromtimestamp(version["added"] // 1000, tz=timezone.utc) self.apks[filename] = date def recordapk(self, apkName, default_date=None): """ Record an APK (if it's new, otherwise does nothing). Returns ------- datetime the date it was added as a datetime instance. """ if apkName not in self.apks: if default_date is None: default_date = datetime.now(timezone.utc) self.apks[apkName] = default_date return self.apks[apkName] def get_file_extension(filename): """Get the normalized file extension, can be blank string but never None.""" if isinstance(filename, bytes): filename = filename.decode('utf-8') return os.path.splitext(filename)[1].lower()[1:] def _androguard_logging_level(level=logging.ERROR): """Tames androguard's default debug output. There should be no debug output when the functions are being used via the API. Otherwise, the output is controlled by the --verbose flag. To get coverage across the full range of androguard >= 3.3.5, this includes all known logger names that are relevant. So some of these names might not be present in the version of androguard currently in use. """ if options and options.verbose: level = logging.WARNING for name in ( 'androguard.apk', 'androguard.axml', 'androguard.core.api_specific_resources', 'androguard.core.apk', 'androguard.core.axml', ): logging.getLogger(name).setLevel(level) # some parts of androguard 4.x use loguru instead of logging try: from loguru import logger logger.remove() except ImportError: pass def get_androguard_APK(apkfile, skip_analysis=False): try: # these were moved in androguard 4.0 from androguard.core.apk import APK except ImportError: from androguard.core.bytecodes.apk import APK _androguard_logging_level() return APK(apkfile, skip_analysis=skip_analysis) def ensure_final_value(packageName, arsc, value): """Ensure incoming value is always the value, not the resid. androguard will sometimes return the Android "resId" aka Resource ID instead of the actual value. This checks whether the value is actually a resId, then performs the Android Resource lookup as needed. """ if value: returnValue = value if value[0] == '@': try: # can be a literal value or a resId res_id = int('0x' + value[1:], 16) res_id = arsc.get_id(packageName, res_id)[1] returnValue = arsc.get_string(packageName, res_id)[1] except (ValueError, TypeError): pass return returnValue return '' def is_debuggable_or_testOnly(apkfile): """Return True if the given file is an APK and is debuggable or testOnly. These two settings should never be enabled in release builds. This parses from the APK and nothing else to run fast, since it is run on every APK as part of update. Parameters ---------- apkfile full path to the APK to check """ if get_file_extension(apkfile) != 'apk': return False try: # these were moved in androguard 4.0 from androguard.core.axml import AXMLParser, format_value, START_TAG except ImportError: from androguard.core.bytecodes.axml import AXMLParser, format_value, START_TAG _androguard_logging_level() with ZipFile(apkfile) as apk: with apk.open('AndroidManifest.xml') as manifest: axml = AXMLParser(manifest.read()) while axml.is_valid(): _type = next(axml) if _type == START_TAG and axml.getName() == 'application': for i in range(0, axml.getAttributeCount()): name = axml.getAttributeName(i) if name in ('debuggable', 'testOnly'): _type = axml.getAttributeValueType(i) _data = axml.getAttributeValueData(i) value = format_value(_type, _data, lambda _: axml.getAttributeValue(i)) if value == 'true': return True else: return False break return False def get_apk_id(apkfile): """Extract identification information from APK. Androguard is preferred since it is more reliable and a lot faster. Occasionally, when androguard can't get the info from the APK, aapt still can. So aapt is also used as the final fallback method. Parameters ---------- apkfile path to an APK file. Returns ------- appid version code version name """ try: return get_apk_id_androguard(apkfile) except zipfile.BadZipFile as e: if config and 'aapt' in config: logging.error(apkfile + ': ' + str(e)) return get_apk_id_aapt(apkfile) else: raise e def get_apk_id_androguard(apkfile): """Read (appid, versionCode, versionName) from an APK. This first tries to do quick binary XML parsing to just get the values that are needed. It will fallback to full androguard parsing, which is slow, if it can't find the versionName value or versionName is set to a Android String Resource (e.g. an integer hex value that starts with @). This function is part of androguard as get_apkid(), so this vendored and modified to return versionCode as an integer. """ if not os.path.exists(apkfile): raise FDroidException(_("Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'") .format(apkfilename=apkfile)) try: # these were moved in androguard 4.0 from androguard.core.axml import AXMLParser, format_value, START_TAG, END_TAG, TEXT, END_DOCUMENT except ImportError: from androguard.core.bytecodes.axml import AXMLParser, format_value, START_TAG, END_TAG, TEXT, END_DOCUMENT _androguard_logging_level() appid = None versionCode = None versionName = None with zipfile.ZipFile(apkfile) as apk: with apk.open('AndroidManifest.xml') as manifest: axml = AXMLParser(manifest.read()) count = 0 while axml.is_valid(): _type = next(axml) count += 1 if _type == START_TAG: for i in range(0, axml.getAttributeCount()): name = axml.getAttributeName(i) _type = axml.getAttributeValueType(i) _data = axml.getAttributeValueData(i) value = format_value(_type, _data, lambda _: axml.getAttributeValue(i)) if appid is None and name == 'package': appid = value elif versionCode is None and name == 'versionCode': if value.startswith('0x'): versionCode = int(value, 16) else: versionCode = int(value) elif versionName is None and name == 'versionName': versionName = value if axml.getName() == 'manifest': break elif _type in (END_TAG, TEXT, END_DOCUMENT): raise RuntimeError('{path}: must be the first element in AndroidManifest.xml' .format(path=apkfile)) if not versionName or versionName[0] == '@': a = get_androguard_APK(apkfile) versionName = ensure_final_value(a.package, a.get_android_resources(), a.get_androidversion_name()) if not versionName: versionName = '' # versionName is expected to always be a str return appid, versionCode, versionName.strip('\0') def get_apk_id_aapt(apkfile): """Read (appid, versionCode, versionName) from an APK.""" p = SdkToolsPopen(['aapt', 'dump', 'badging', apkfile], output=False) m = APK_ID_TRIPLET_REGEX.match(p.output[0:p.output.index('\n')]) if m: return m.group(1), int(m.group(2)), m.group(3) raise FDroidException(_( "Reading packageName/versionCode/versionName failed," "APK invalid: '{apkfilename}'" ).format(apkfilename=apkfile)) def get_native_code(apkfile): """Aapt checks if there are architecture folders under the lib/ folder. We are simulating the same behaviour. """ arch_re = re.compile("^lib/(.*)/.*$") archset = set() with ZipFile(apkfile) as apk: for filename in apk.namelist(): m = arch_re.match(filename) if m: archset.add(m.group(1)) return sorted(list(archset)) class PopenResult: def __init__(self, returncode=None, output=None): self.returncode = returncode self.output = output def SdkToolsPopen(commands, cwd=None, output=True): cmd = commands[0] if cmd not in config: config[cmd] = find_sdk_tools_cmd(commands[0]) abscmd = config[cmd] if abscmd is None: raise FDroidException(_("Could not find '{command}' on your system").format(command=cmd)) if cmd == 'aapt': test_aapt_version(config['aapt']) return FDroidPopen([abscmd] + commands[1:], cwd=cwd, output=output) def FDroidPopenBytes(commands, cwd=None, envs=None, output=True, stderr_to_stdout=True): """ Run a command and capture the possibly huge output as bytes. Parameters ---------- commands command and argument list like in subprocess.Popen cwd optionally specifies a working directory envs a optional dictionary of environment variables and their values Returns ------- A PopenResult. """ global env if env is None: set_FDroidPopen_env() process_env = env.copy() if envs is not None and len(envs) > 0: process_env.update(envs) if cwd: cwd = os.path.normpath(cwd) logging.debug("Directory: %s" % cwd) logging.debug("> %s" % ' '.join(commands)) stderr_param = subprocess.STDOUT if stderr_to_stdout else subprocess.PIPE result = PopenResult() p = None try: p = subprocess.Popen(commands, cwd=cwd, shell=False, env=process_env, stdin=subprocess.DEVNULL, stdout=subprocess.PIPE, stderr=stderr_param) except OSError as e: raise BuildException("OSError while trying to execute " + ' '.join(commands) + ': ' + str(e)) from e # TODO are these AsynchronousFileReader threads always exiting? if not stderr_to_stdout and options.verbose: stderr_queue = Queue() stderr_reader = AsynchronousFileReader(p.stderr, stderr_queue) while not stderr_reader.eof(): while not stderr_queue.empty(): line = stderr_queue.get() sys.stderr.buffer.write(line) sys.stderr.flush() time.sleep(0.1) stdout_queue = Queue() stdout_reader = AsynchronousFileReader(p.stdout, stdout_queue) buf = io.BytesIO() # Check the queue for output (until there is no more to get) while not stdout_reader.eof(): while not stdout_queue.empty(): line = stdout_queue.get() if output and options and options.verbose: # Output directly to console sys.stderr.buffer.write(line) sys.stderr.flush() buf.write(line) time.sleep(0.1) result.returncode = p.wait() result.output = buf.getvalue() buf.close() # make sure all filestreams of the subprocess are closed for streamvar in ['stdin', 'stdout', 'stderr']: if hasattr(p, streamvar): stream = getattr(p, streamvar) if stream: stream.close() return result def FDroidPopen(commands, cwd=None, envs=None, output=True, stderr_to_stdout=True): """ Run a command and capture the possibly huge output as a str. Parameters ---------- commands command and argument list like in subprocess.Popen cwd optionally specifies a working directory envs a optional dictionary of environment variables and their values Returns ------- A PopenResult. """ result = FDroidPopenBytes(commands, cwd, envs, output, stderr_to_stdout) result.output = result.output.decode('utf-8', 'ignore') return result gradle_comment = re.compile(r'[ ]*//') gradle_signing_configs = re.compile(r'^[\t ]*signingConfigs[ \t]*{[ \t]*$') gradle_line_matches = [ re.compile(r'^[\t ]*signingConfig\s*[= ]\s*[^ ]*$'), re.compile(r'.*android\.signingConfigs\.[^{]*$'), re.compile(r'.*release\.signingConfig *= *'), ] def remove_signing_keys(build_dir): for root, dirs, files in os.walk(build_dir): gradlefile = None if 'build.gradle' in files: gradlefile = "build.gradle" elif 'build.gradle.kts' in files: gradlefile = "build.gradle.kts" if gradlefile: path = os.path.join(root, gradlefile) with open(path, "r") as o: lines = o.readlines() changed = False opened = 0 i = 0 with open(path, "w") as o: while i < len(lines): line = lines[i] i += 1 while line.endswith('\\\n'): line = line.rstrip('\\\n') + lines[i] i += 1 if gradle_comment.match(line): o.write(line) continue if opened > 0: opened += line.count('{') opened -= line.count('}') continue if gradle_signing_configs.match(line): changed = True opened += 1 continue if any(s.match(line) for s in gradle_line_matches): changed = True continue if opened == 0: o.write(line) if changed: logging.info("Cleaned %s of keysigning configs at %s" % (gradlefile, path)) for propfile in [ 'project.properties', 'build.properties', 'default.properties', 'ant.properties', ]: if propfile in files: path = os.path.join(root, propfile) with open(path, "r", encoding='iso-8859-1') as o: lines = o.readlines() changed = False with open(path, "w", encoding='iso-8859-1') as o: for line in lines: if any(line.startswith(s) for s in ('key.store', 'key.alias')): changed = True continue o.write(line) if changed: logging.info("Cleaned %s of keysigning configs at %s" % (propfile, path)) def set_FDroidPopen_env(build=None): """Set up the environment variables for the build environment. There is only a weak standard, the variables used by gradle, so also set up the most commonly used environment variables for SDK and NDK. Also, if there is no locale set, this will set the locale (e.g. LANG) to en_US.UTF-8. """ global env, orig_path if env is None: env = os.environ orig_path = env['PATH'] if config: if config.get('sdk_path'): for n in ['ANDROID_HOME', 'ANDROID_SDK', 'ANDROID_SDK_ROOT']: env[n] = config['sdk_path'] for k, v in config.get('java_paths', {}).items(): env['JAVA%s_HOME' % k] = v missinglocale = True for k, v in env.items(): if k == 'LANG' and v != 'C': missinglocale = False elif k == 'LC_ALL': missinglocale = False if missinglocale: env['LANG'] = 'en_US.UTF-8' if build is not None: path = build.ndk_path() paths = orig_path.split(os.pathsep) if path and path not in paths: paths = [path] + paths env['PATH'] = os.pathsep.join(paths) for n in ['ANDROID_NDK', 'NDK', 'ANDROID_NDK_HOME']: env[n] = build.ndk_path() def replace_build_vars(cmd, build): cmd = cmd.replace('$$COMMIT$$', build.commit) cmd = cmd.replace('$$VERSION$$', build.versionName) cmd = cmd.replace('$$VERCODE$$', str(build.versionCode)) return cmd def replace_config_vars(cmd, build): cmd = cmd.replace('$$SDK$$', config['sdk_path']) cmd = cmd.replace('$$NDK$$', build.ndk_path()) if build is not None: cmd = replace_build_vars(cmd, build) return cmd def place_srclib(root_dir, number, libpath): if not number: return relpath = os.path.relpath(libpath, root_dir) proppath = os.path.join(root_dir, 'project.properties') lines = [] if os.path.isfile(proppath): with open(proppath, "r", encoding='iso-8859-1') as o: lines = o.readlines() with open(proppath, "w", encoding='iso-8859-1') as o: placed = False for line in lines: if line.startswith('android.library.reference.%d=' % number): o.write('android.library.reference.%d=%s\n' % (number, relpath)) placed = True else: o.write(line) if not placed: o.write('android.library.reference.%d=%s\n' % (number, relpath)) APK_SIGNATURE_FILES = re.compile(r'META-INF/[0-9A-Za-z_\-]+\.(SF|RSA|DSA|EC)') def signer_fingerprint_short(cert_encoded): """Obtain shortened sha256 signing-key fingerprint for pkcs7 DER certficate. Extracts the first 7 hexadecimal digits of sha256 signing-key fingerprint for a given pkcs7 signature. Parameters ---------- cert_encoded Contents of an APK signing certificate. Returns ------- shortened signing-key fingerprint. """ return signer_fingerprint(cert_encoded)[:7] def signer_fingerprint(cert_encoded): """Return SHA-256 signer fingerprint for PKCS#7 DER-encoded signature. Parameters ---------- Contents of an APK signature. Returns ------- Standard SHA-256 signer fingerprint. """ return hashlib.sha256(cert_encoded).hexdigest() def get_first_signer_certificate(apkpath): """Get the first signing certificate from the APK, DER-encoded. JAR and APK Signatures allow for multiple signers, though it is rarely used, and this is poorly documented. So this method only fetches the first certificate, and errors out if there are more. Starting with targetSdkVersion 30, APK v2 Signatures are required. https://developer.android.com/about/versions/11/behavior-changes-11#minimum-signature-scheme When a APK v2+ signature is present, the JAR signature is not verified. The verifier parses the signers from the v2+ signature and does not seem to look at the JAR signature. https://source.android.com/docs/security/features/apksigning/v2#apk-signature-scheme-v2-block https://android.googlesource.com/platform/tools/apksig/+/refs/tags/android-13.0.0_r3/src/main/java/com/android/apksig/ApkVerifier.java#270 apksigner checks that the signers from all the APK signatures match: https://android.googlesource.com/platform/tools/apksig/+/refs/tags/android-13.0.0_r3/src/main/java/com/android/apksig/ApkVerifier.java#383 apksigner verifies each signer's signature block file .(RSA|DSA|EC) against the corresponding signature file .SF https://android.googlesource.com/platform/tools/apksig/+/refs/tags/android-13.0.0_r3/src/main/java/com/android/apksig/internal/apk/v1/V1SchemeVerifier.java#280 NoOverwriteDict is a workaround for: https://github.com/androguard/androguard/issues/1030 Lots more discusion here: https://gitlab.com/fdroid/fdroidserver/-/issues/1128 """ class NoOverwriteDict(dict): def __setitem__(self, k, v): if k not in self: super().__setitem__(k, v) cert_encoded = None found_certs = [] apkobject = get_androguard_APK(apkpath) apkobject._v2_blocks = NoOverwriteDict() certs_v3 = apkobject.get_certificates_der_v3() if certs_v3: cert_v3 = certs_v3[0] found_certs.append(cert_v3) if not cert_encoded: logging.debug(_('Using APK Signature v3')) cert_encoded = cert_v3 certs_v2 = apkobject.get_certificates_der_v2() if certs_v2: cert_v2 = certs_v2[0] found_certs.append(cert_v2) if not cert_encoded: logging.debug(_('Using APK Signature v2')) cert_encoded = cert_v2 if get_min_sdk_version(apkobject) < 24 or ( not (certs_v3 or certs_v2) and get_effective_target_sdk_version(apkobject) < 30 ): with zipfile.ZipFile(apkpath, 'r') as apk: cert_files = [ n for n in apk.namelist() if SIGNATURE_BLOCK_FILE_REGEX.match(n) ] if len(cert_files) > 1: logging.error( _("Found multiple JAR Signature Block Files in {path}").format( path=apkpath ) ) return elif len(cert_files) == 1: signature_block_file = cert_files[0] signature_file = ( cert_files[0][: signature_block_file.rindex('.')] + '.SF' ) cert_v1 = get_certificate( apk.read(signature_block_file), apk.read(signature_file), ) found_certs.append(cert_v1) if not cert_encoded: logging.debug(_('Using JAR Signature')) cert_encoded = cert_v1 if not cert_encoded: logging.error(_("No signing certificates found in {path}").format(path=apkpath)) return if not all(cert == found_certs[0] for cert in found_certs): logging.error( _("APK signatures have different certificates in {path}:").format( path=apkpath ) ) return return cert_encoded def apk_signer_fingerprint(apk_path): """Get SHA-256 fingerprint string for the first signer from given APK. Parameters ---------- apk_path path to APK Returns ------- Standard SHA-256 signer fingerprint """ cert_encoded = get_first_signer_certificate(apk_path) if not cert_encoded: return None return signer_fingerprint(cert_encoded) def apk_signer_fingerprint_short(apk_path): """Get 7 hex digit SHA-256 fingerprint string for the first signer from given APK. Parameters ---------- apk_path path to APK Returns ------- first 7 chars of the standard SHA-256 signer fingerprint """ return apk_signer_fingerprint(apk_path)[:7] def metadata_get_sigdir(appid, vercode=None): """Get signature directory for app.""" if vercode: return os.path.join('metadata', appid, 'signatures', str(vercode)) else: return os.path.join('metadata', appid, 'signatures') def metadata_find_developer_signature(appid, vercode=None): """Try to find the developer signature for given appid. This picks the first signature file found in metadata an returns its signature. Returns ------- sha256 signing key fingerprint of the developer signing key. None in case no signature can not be found. """ # fetch list of dirs for all versions of signatures appversigdirs = [] if vercode: appversigdirs.append(metadata_get_sigdir(appid, vercode)) else: appsigdir = metadata_get_sigdir(appid) if os.path.isdir(appsigdir): numre = re.compile('[0-9]+') for ver in os.listdir(appsigdir): if numre.match(ver): appversigdir = os.path.join(appsigdir, ver) appversigdirs.append(appversigdir) for sigdir in appversigdirs: signature_block_files = ( glob.glob(os.path.join(sigdir, '*.DSA')) + glob.glob(os.path.join(sigdir, '*.EC')) + glob.glob(os.path.join(sigdir, '*.RSA')) ) if len(signature_block_files) > 1: raise FDroidException('ambiguous signatures, please make sure there is only one signature in \'{}\'. (The signature has to be the App maintainers signature for version of the APK.)'.format(sigdir)) for signature_block_file in signature_block_files: with open(signature_block_file, 'rb') as f: return signer_fingerprint(get_certificate(f.read())) return None def metadata_find_signing_files(appid, vercode): """Get a list of signed manifests and signatures. Parameters ---------- appid app id string vercode app version code Returns ------- List of 4-tuples for each signing key with following paths: (signature_file, signature_block_file, manifest, v2_files), where v2_files is either a (apk_signing_block_offset_file, apk_signing_block_file) pair or None References ---------- * https://docs.oracle.com/javase/tutorial/deployment/jar/intro.html * https://source.android.com/security/apksigning/v2 * https://source.android.com/security/apksigning/v3 """ ret = [] sigdir = metadata_get_sigdir(appid, vercode) signature_block_files = ( glob.glob(os.path.join(sigdir, '*.DSA')) + glob.glob(os.path.join(sigdir, '*.EC')) + glob.glob(os.path.join(sigdir, '*.RSA')) ) signature_block_pat = re.compile(r'(\.DSA|\.EC|\.RSA)$') apk_signing_block = os.path.join(sigdir, "APKSigningBlock") apk_signing_block_offset = os.path.join(sigdir, "APKSigningBlockOffset") if os.path.isfile(apk_signing_block) and os.path.isfile(apk_signing_block_offset): v2_files = apk_signing_block, apk_signing_block_offset else: v2_files = None for signature_block_file in signature_block_files: signature_file = signature_block_pat.sub('.SF', signature_block_file) if os.path.isfile(signature_file): manifest = os.path.join(sigdir, 'MANIFEST.MF') if os.path.isfile(manifest): ret.append((signature_block_file, signature_file, manifest, v2_files)) return ret def metadata_find_developer_signing_files(appid, vercode): """Get developer signature files for specified app from metadata. Returns ------- List of 4-tuples for each signing key with following paths: (signature_file, signature_block_file, manifest, v2_files), where v2_files is either a (apk_signing_block_offset_file, apk_signing_block_file) pair or None """ allsigningfiles = metadata_find_signing_files(appid, vercode) if allsigningfiles and len(allsigningfiles) == 1: return allsigningfiles[0] else: return None class ClonedZipInfo(zipfile.ZipInfo): """Hack to allow fully cloning ZipInfo instances. The zipfile library has some bugs that prevent it from fully cloning ZipInfo entries. https://bugs.python.org/issue43547 """ def __init__(self, zinfo): super().__init__() self.original = zinfo for k in self.__slots__: try: setattr(self, k, getattr(zinfo, k)) except AttributeError: pass def __getattribute__(self, name): if name in ("date_time", "external_attr", "flag_bits"): return getattr(self.original, name) return object.__getattribute__(self, name) def apk_has_v1_signatures(apkfile): """Test whether an APK has v1 signature files.""" with ZipFile(apkfile, 'r') as apk: for info in apk.infolist(): if APK_SIGNATURE_FILES.match(info.filename): return True return False def apk_strip_v1_signatures(signed_apk, strip_manifest=False): """Remove signatures from APK. Parameters ---------- signed_apk path to APK file. strip_manifest when set to True also the manifest file will be removed from the APK. """ with tempfile.TemporaryDirectory() as tmpdir: tmp_apk = os.path.join(tmpdir, 'tmp.apk') shutil.move(signed_apk, tmp_apk) with ZipFile(tmp_apk, 'r') as in_apk: with ZipFile(signed_apk, 'w') as out_apk: for info in in_apk.infolist(): if not APK_SIGNATURE_FILES.match(info.filename): if strip_manifest: if info.filename != 'META-INF/MANIFEST.MF': buf = in_apk.read(info.filename) out_apk.writestr(ClonedZipInfo(info), buf) else: buf = in_apk.read(info.filename) out_apk.writestr(ClonedZipInfo(info), buf) def apk_implant_signatures(apkpath, outpath, manifest): """Implant a signature from metadata into an APK. Note: this changes there supplied APK in place. So copy it if you need the original to be preserved. Parameters ---------- apkpath location of the unsigned apk outpath location of the output apk References ---------- * https://docs.oracle.com/javase/tutorial/deployment/jar/intro.html * https://source.android.com/security/apksigning/v2 * https://source.android.com/security/apksigning/v3 """ sigdir = os.path.dirname(manifest) # FIXME apksigcopier.do_patch(sigdir, apkpath, outpath, v1_only=None, exclude=apksigcopier.exclude_meta) def apk_extract_signatures(apkpath, outdir): """Extract a signature files from APK and puts them into target directory. Parameters ---------- apkpath location of the apk outdir older where the extracted signature files will be stored References ---------- * https://docs.oracle.com/javase/tutorial/deployment/jar/intro.html * https://source.android.com/security/apksigning/v2 * https://source.android.com/security/apksigning/v3 """ apksigcopier.do_extract(apkpath, outdir, v1_only=None) def get_min_sdk_version(apk): """Wrap the androguard function to always return an integer. Fall back to 1 if we can't get a valid minsdk version. Parameters ---------- apk androguard APK object Returns ------- minSdkVersion: int """ try: return int(apk.get_min_sdk_version()) except TypeError: return 1 def get_effective_target_sdk_version(apk): """Wrap the androguard function to always return an integer. Parameters ---------- apk androguard APK object Returns ------- targetSdkVersion: int """ try: return int(apk.get_effective_target_sdk_version()) except TypeError: return get_min_sdk_version(apk) def get_apksigner_smartcardoptions(smartcardoptions): if '-providerName' in smartcardoptions.copy(): pos = smartcardoptions.index('-providerName') # remove -providerName and it's argument del smartcardoptions[pos] del smartcardoptions[pos] replacements = {'-storetype': '--ks-type', '-providerClass': '--provider-class', '-providerArg': '--provider-arg'} return [replacements.get(n, n) for n in smartcardoptions] def sign_apk(unsigned_path, signed_path, keyalias): """Sign an unsigned APK, then save to a new file, deleting the unsigned. NONE is a Java keyword used to configure smartcards as the keystore. Otherwise, the keystore is a local file. https://docs.oracle.com/javase/7/docs/technotes/guides/security/p11guide.html#KeyToolJarSigner When using smartcards, apksigner does not use the same options has Java/keytool/jarsigner (-providerName, -providerClass, -providerArg, -storetype). apksigner documents the options as --ks-provider-class and --ks-provider-arg. Those seem to be accepted but fail when actually making a signature with weird internal exceptions. We use the options that actually work. From: https://geoffreymetais.github.io/code/key-signing/#scripting """ if config['keystore'] == 'NONE': signing_args = get_apksigner_smartcardoptions(config['smartcardoptions']) else: signing_args = ['--key-pass', 'env:FDROID_KEY_PASS'] apksigner = config.get('apksigner', '') if not shutil.which(apksigner): raise BuildException(_("apksigner not found, it's required for signing!")) cmd = [apksigner, 'sign', '--ks', config['keystore'], '--ks-pass', 'env:FDROID_KEY_STORE_PASS'] cmd += signing_args cmd += ['--ks-key-alias', keyalias, '--in', unsigned_path, '--out', signed_path] p = FDroidPopen(cmd, envs={ 'FDROID_KEY_STORE_PASS': config['keystorepass'], 'FDROID_KEY_PASS': config.get('keypass', "")}) if p.returncode != 0: if os.path.exists(signed_path): os.remove(signed_path) raise BuildException(_("Failed to sign application"), p.output) os.remove(unsigned_path) def verify_apks( signed_apk, unsigned_apk, tmp_dir, v1_only=None, clean_up_verified=False ): """Verify that two apks are the same. One of the inputs is signed, the other is unsigned. The signature metadata is transferred from the signed to the unsigned apk, and then apksigner is used to verify that the signature from the signed APK is also valid for the unsigned one. If the APK given as unsigned actually does have a signature, it will be stripped out and ignored. Parameters ---------- signed_apk Path to a signed APK file unsigned_apk Path to an unsigned APK file expected to match it tmp_dir Path to directory for temporary files v1_only True for v1-only signatures, False for v1 and v2 signatures, or None for autodetection clean_up_verified Remove any files created here if the verification succeeded. Returns ------- None if the verification is successful, otherwise a string describing what went wrong. """ if not verify_apk_signature(signed_apk): logging.info('...NOT verified - {0}'.format(signed_apk)) return 'verification of signed APK failed' if not os.path.isfile(signed_apk): return 'can not verify: file does not exists: {}'.format(signed_apk) if not os.path.isfile(unsigned_apk): return 'can not verify: file does not exists: {}'.format(unsigned_apk) tmp_apk = os.path.join(tmp_dir, 'sigcp_' + os.path.basename(unsigned_apk)) try: apksigcopier.do_copy(signed_apk, unsigned_apk, tmp_apk, v1_only=v1_only, exclude=apksigcopier.exclude_meta) except apksigcopier.APKSigCopierError as e: logging.info('...NOT verified - {0}'.format(tmp_apk)) error = 'signature copying failed: {}'.format(str(e)) result = compare_apks(signed_apk, unsigned_apk, tmp_dir, os.path.dirname(unsigned_apk)) if result is not None: error += '\nComparing reference APK to unsigned APK...\n' + result return error if not verify_apk_signature(tmp_apk): logging.info('...NOT verified - {0}'.format(tmp_apk)) error = 'verification of APK with copied signature failed' result = compare_apks(signed_apk, tmp_apk, tmp_dir, os.path.dirname(unsigned_apk)) if result is not None: error += '\nComparing reference APK to APK with copied signature...\n' + result return error if clean_up_verified and os.path.exists(tmp_apk): logging.info(f"...cleaned up {tmp_apk} after successful verification") os.remove(tmp_apk) logging.info('...successfully verified') return None def verify_jar_signature(jar): """Verify the signature of a given JAR file. jarsigner is very shitty: unsigned JARs pass as "verified"! So this has to turn on -strict then check for result 4, since this does not expect the signature to be from a CA-signed certificate. Raises ------ VerificationException If the JAR's signature could not be verified. """ error = _('JAR signature failed to verify: {path}').format(path=jar) try: output = subprocess.check_output( [config['jarsigner'], '-strict', '-verify', jar], stderr=subprocess.STDOUT ) raise VerificationException(error + '\n' + output.decode('utf-8')) except subprocess.CalledProcessError as e: if e.returncode == 4: logging.debug(_('JAR signature verified: {path}').format(path=jar)) else: raise VerificationException(error + '\n' + e.output.decode('utf-8')) from e def verify_deprecated_jar_signature(jar): """Verify the signature of a given JAR file, allowing deprecated algorithms. index.jar (v0) and index-v1.jar are both signed by MD5/SHA1 by definition, so this method provides a way to verify those. Also, apksigner has different deprecation rules than jarsigner, so this is our current hack to try to represent the apksigner rules when executing jarsigner. jarsigner is very shitty: unsigned JARs pass as "verified"! So this has to turn on -strict then check for result 4, since this does not expect the signature to be from a CA-signed certificate. Also used to verify the signature on an archived APK, supporting deprecated algorithms. F-Droid aims to keep every single binary that it ever published. Therefore, it needs to be able to verify APK signatures that include deprecated/removed algorithms. For example, jarsigner treats an MD5 signature as unsigned. jarsigner passes unsigned APKs as "verified"! So this has to turn on -strict then check for result 4. Just to be safe, this never reuses the file, and locks down the file permissions while in use. That should prevent a bad actor from changing the settings during operation. Raises ------ VerificationException If the JAR's signature could not be verified. """ error = _('JAR signature failed to verify: {path}').format(path=jar) with tempfile.TemporaryDirectory() as tmpdir: java_security = os.path.join(tmpdir, 'java.security') with open(java_security, 'w') as fp: fp.write('jdk.jar.disabledAlgorithms=MD2, RSA keySize < 1024') os.chmod(java_security, 0o400) try: cmd = [ config['jarsigner'], '-J-Djava.security.properties=' + java_security, '-strict', '-verify', jar ] output = subprocess.check_output(cmd, stderr=subprocess.STDOUT) raise VerificationException(error + '\n' + output.decode('utf-8')) except subprocess.CalledProcessError as e: if e.returncode == 4: logging.debug(_('JAR signature verified: {path}').format(path=jar)) else: raise VerificationException(error + '\n' + e.output.decode('utf-8')) from e def verify_apk_signature(apk, min_sdk_version=None): """Verify the signature on an APK. Try to use apksigner whenever possible since jarsigner is very shitty: unsigned APKs pass as "verified"! Warning, this does not work on JARs with apksigner >= 0.7 (build-tools 26.0.1) Returns ------- Boolean whether the APK was verified """ if set_command_in_config('apksigner'): args = [config['apksigner'], 'verify'] if min_sdk_version: args += ['--min-sdk-version=' + min_sdk_version] if options and options.verbose: args += ['--verbose'] try: output = subprocess.check_output(args + [apk]) if options and options.verbose: logging.debug(apk + ': ' + output.decode('utf-8')) return True except subprocess.CalledProcessError as e: logging.error('\n' + apk + ': ' + e.output.decode('utf-8')) else: if not config.get('jarsigner_warning_displayed'): config['jarsigner_warning_displayed'] = True logging.warning(_("Using Java's jarsigner, not recommended for verifying APKs! Use apksigner")) try: verify_deprecated_jar_signature(apk) return True except Exception as e: logging.error(e) return False apk_badchars = re.compile('''[/ :;'"]''') def compare_apks(apk1, apk2, tmp_dir, log_dir=None): """Compare two apks. Returns ------- None if the APK content is the same (apart from the signing key), otherwise a string describing what's different, or what went wrong when trying to do the comparison. """ if not log_dir: log_dir = tmp_dir absapk1 = os.path.abspath(apk1) absapk2 = os.path.abspath(apk2) if set_command_in_config('diffoscope'): logfilename = os.path.join(log_dir, os.path.basename(absapk1)) htmlfile = logfilename + '.diffoscope.html' textfile = logfilename + '.diffoscope.txt' if subprocess.call([config['diffoscope'], '--max-report-size', '12345678', '--max-diff-block-lines', '128', '--html', htmlfile, '--text', textfile, absapk1, absapk2]) != 0: return "Failed to run diffoscope " + apk1 apk1dir = os.path.join(tmp_dir, apk_badchars.sub('_', apk1[0:-4])) # trim .apk apk2dir = os.path.join(tmp_dir, apk_badchars.sub('_', apk2[0:-4])) # trim .apk for d in [apk1dir, apk2dir]: if os.path.exists(d): shutil.rmtree(d) os.mkdir(d) os.mkdir(os.path.join(d, 'content')) # extract APK contents for comparision with ZipFile(absapk1, 'r') as f: f.extractall(path=os.path.join(apk1dir, 'content')) with ZipFile(absapk2, 'r') as f: f.extractall(path=os.path.join(apk2dir, 'content')) if set_command_in_config('apktool'): if subprocess.call([config['apktool'], 'd', absapk1, '--output', 'apktool'], cwd=apk1dir) != 0: return "Failed to run apktool " + apk1 if subprocess.call([config['apktool'], 'd', absapk2, '--output', 'apktool'], cwd=apk2dir) != 0: return "Failed to run apktool " + apk2 p = FDroidPopen(['diff', '-r', apk1dir, apk2dir], output=False) lines = p.output.splitlines() if len(lines) != 1 or 'META-INF' not in lines[0]: if set_command_in_config('meld'): p = FDroidPopen([config['meld'], apk1dir, apk2dir], output=False) return "Unexpected diff output:\n" + p.output.replace("\r", "^M") # since everything verifies, delete the comparison to keep cruft down shutil.rmtree(apk1dir) shutil.rmtree(apk2dir) # If we get here, it seems like they're the same! return None def set_command_in_config(command): """Try to find specified command in the path, if it hasn't been manually set in config.yml. If found, it is added to the config dict. The return value says whether the command is available. """ if command in config: return True else: tmp = find_command(command) if tmp is not None: config[command] = tmp return True return False def find_command(command): """Find the full path of a command, or None if it can't be found in the PATH.""" def is_exe(fpath): return os.path.isfile(fpath) and os.access(fpath, os.X_OK) fpath, fname = os.path.split(command) if fpath: if is_exe(command): return command else: for path in os.environ["PATH"].split(os.pathsep): path = path.strip('"') exe_file = os.path.join(path, command) if is_exe(exe_file): return exe_file return None def genpassword(): """Generate a random password for when generating keys.""" h = hashlib.sha256() h.update(os.urandom(16)) # salt h.update(socket.getfqdn().encode('utf-8')) passwd = base64.b64encode(h.digest()).strip() return passwd.decode('utf-8') def genkeystore(localconfig): """Generate a new key with password provided in localconfig and add it to new keystore. Parameters ---------- localconfig Returns ------- hexed public key, public key fingerprint """ logging.info('Generating a new key in "' + localconfig['keystore'] + '"...') keystoredir = os.path.dirname(localconfig['keystore']) if keystoredir is None or keystoredir == '': keystoredir = os.path.join(os.getcwd(), keystoredir) if not os.path.exists(keystoredir): os.makedirs(keystoredir, mode=0o700) env_vars = {'LC_ALL': 'C.UTF-8', 'FDROID_KEY_STORE_PASS': localconfig['keystorepass'], 'FDROID_KEY_PASS': localconfig.get('keypass', "")} cmd = [config['keytool'], '-genkey', '-keystore', localconfig['keystore'], '-alias', localconfig['repo_keyalias'], '-keyalg', 'RSA', '-keysize', '4096', '-sigalg', 'SHA256withRSA', '-validity', '10000', '-storetype', 'pkcs12', '-storepass:env', 'FDROID_KEY_STORE_PASS', '-dname', localconfig['keydname'], '-J-Duser.language=en'] if localconfig['keystore'] == "NONE": cmd += localconfig['smartcardoptions'] else: cmd += '-keypass:env', 'FDROID_KEY_PASS' p = FDroidPopen(cmd, envs=env_vars) if p.returncode != 0: raise BuildException("Failed to generate key", p.output) if localconfig['keystore'] != "NONE": os.chmod(localconfig['keystore'], 0o0600) if not options.quiet: # now show the lovely key that was just generated p = FDroidPopen([config['keytool'], '-list', '-v', '-keystore', localconfig['keystore'], '-alias', localconfig['repo_keyalias'], '-storepass:env', 'FDROID_KEY_STORE_PASS', '-J-Duser.language=en'] + config['smartcardoptions'], envs=env_vars) logging.info(p.output.strip() + '\n\n') # get the public key p = FDroidPopenBytes([config['keytool'], '-exportcert', '-keystore', localconfig['keystore'], '-alias', localconfig['repo_keyalias'], '-storepass:env', 'FDROID_KEY_STORE_PASS'] + config['smartcardoptions'], envs=env_vars, output=False, stderr_to_stdout=False) if p.returncode != 0 or len(p.output) < 20: raise BuildException("Failed to get public key", p.output) pubkey = p.output fingerprint = get_cert_fingerprint(pubkey) return hexlify(pubkey), fingerprint def get_cert_fingerprint(pubkey): """Generate a certificate fingerprint the same way keytool does it (but with slightly different formatting).""" digest = hashlib.sha256(pubkey).digest() ret = [' '.join("%02X" % b for b in bytearray(digest))] return " ".join(ret) def get_certificate(signature_block_file, signature_file=None): """Extract a single DER certificate from JAR Signature's "Signature Block File". If there is more than one signer certificate, this exits with an error, unless the signature_file is provided. If that is set, it will return the certificate that matches the Signature File, for example, if there is a certificate chain, like TLS does. In the fdroidserver use cases, there should always be a single signer. But rarely, some APKs include certificate chains. This could be replaced by androguard's APK.get_certificate_der() provided the cert chain fix was merged there. Maybe in 4.1.2? https://github.com/androguard/androguard/pull/1038 https://docs.oracle.com/en/java/javase/21/docs/specs/man/jarsigner.html#the-signed-jar-file Parameters ---------- signature_block_file Bytes representing the PKCS#7 signer certificate and signature, as read directly out of the JAR/APK, e.g. CERT.RSA. signature_file Bytes representing the manifest signed by the Signature Block File, e.g. CERT.SF. If this is not given, the assumption is there will be only a single certificate in signature_block_file, otherwise it is an error. Returns ------- A binary representation of the certificate's public key, or None in case of error """ pkcs7obj = cms.ContentInfo.load(signature_block_file) certificates = pkcs7obj['content']['certificates'] if len(certificates) == 1: return certificates[0].chosen.dump() elif not signature_file: logging.error(_('Found multiple Signer Certificates!')) return certificate = get_jar_signer_certificate(pkcs7obj, signature_file) if certificate: return certificate.chosen.dump() def _find_matching_certificate(signer_info, certificate): """Find the certificates that matches signer_info using issuer and serial number. https://android.googlesource.com/platform/tools/apksig/+/refs/tags/android-13.0.0_r3/src/main/java/com/android/apksig/internal/apk/v1/V1SchemeVerifier.java#590 https://android.googlesource.com/platform/tools/apksig/+/refs/tags/android-13.0.0_r3/src/main/java/com/android/apksig/internal/x509/Certificate.java#55 """ certificate_serial = certificate.chosen['tbs_certificate']['serial_number'] expected_issuer_serial = signer_info['sid'].chosen return ( expected_issuer_serial['issuer'] == certificate.chosen.issuer and expected_issuer_serial['serial_number'] == certificate_serial ) def get_jar_signer_certificate(pkcs7obj: cms.ContentInfo, signature_file: bytes): """Return the one certificate in a chain that actually signed the manifest. PKCS#7-signed data can include certificate chains for use cases where an Certificate Authority (CA) is used. Android does not validate the certificate chain on APK signatures, so neither does this. https://android.googlesource.com/platform/tools/apksig/+/refs/tags/android-13.0.0_r3/src/main/java/com/android/apksig/internal/apk/v1/V1SchemeVerifier.java#512 Some useful fodder for understanding all this: https://docs.oracle.com/javase/tutorial/deployment/jar/intro.html https://technotes.shemyak.com/posts/jar-signature-block-file-format/ https://docs.oracle.com/en/java/javase/21/docs/specs/man/jarsigner.html#the-signed-jar-file https://qistoph.blogspot.com/2012/01/manual-verify-pkcs7-signed-data-with.html """ import oscrypto.asymmetric import oscrypto.errors # Android attempts to verify all SignerInfos and then picks the first verified SignerInfo. first_verified_signer_info = None first_verified_signer_info_signing_certificate = None for signer_info in pkcs7obj['content']['signer_infos']: signature = signer_info['signature'].contents digest_algorithm = signer_info["digest_algorithm"]["algorithm"].native public_key = None for certificate in pkcs7obj['content']['certificates']: if _find_matching_certificate(signer_info, certificate): public_key = oscrypto.asymmetric.load_public_key(certificate.chosen.public_key) break if public_key is None: logging.info('No certificate found that matches signer info!') continue signature_algo = signer_info['signature_algorithm'].signature_algo if signature_algo == 'rsassa_pkcs1v15': # ASN.1 - 1.2.840.113549.1.1.1 verify_func = oscrypto.asymmetric.rsa_pkcs1v15_verify elif signature_algo == 'rsassa_pss': # ASN.1 - 1.2.840.113549.1.1.10 verify_func = oscrypto.asymmetric.rsa_pss_verify elif signature_algo == 'dsa': # ASN.1 - 1.2.840.10040.4.1 verify_func = oscrypto.asymmetric.dsa_verify elif signature_algo == 'ecdsa': # ASN.1 - 1.2.840.10045.4 verify_func = oscrypto.asymmetric.ecdsa_verify else: logging.error( 'Unknown signature algorithm %s:\n %s\n %s' % ( signature_algo, hexlify(certificate.chosen.sha256).decode(), certificate.chosen.subject.human_friendly, ), ) return try: verify_func(public_key, signature, signature_file, digest_algorithm) if not first_verified_signer_info: first_verified_signer_info = signer_info first_verified_signer_info_signing_certificate = certificate except oscrypto.errors.SignatureError as e: logging.error( '"%s", skipping:\n %s\n %s' % ( e, hexlify(certificate.chosen.sha256).decode(), certificate.chosen.subject.human_friendly), ) if first_verified_signer_info_signing_certificate: return first_verified_signer_info_signing_certificate def load_publish_signer_fingerprints(): """Load signing-key fingerprints stored in file generated by fdroid publish. Returns ------- dict containing the signing-key fingerprints. """ jar_file = os.path.join('repo', 'signer-index.jar') if not os.path.isfile(jar_file): return {} try: verify_deprecated_jar_signature(jar_file) except VerificationException as e: raise FDroidException("Signature validation of '{}' failed! " "Please run publish again to rebuild this file.".format(jar_file)) from e jar_sigkey = apk_signer_fingerprint(jar_file) repo_key_sig = config.get('repo_key_sha256') if repo_key_sig: if jar_sigkey != repo_key_sig: raise FDroidException("Signature key fingerprint of file '{}' does not match repo_key_sha256 in config.yml (found fingerprint: '{}')".format(jar_file, jar_sigkey)) else: logging.warning("repo_key_sha256 not in config.yml, setting it to the signature key fingerprint of '{}'".format(jar_file)) config['repo_key_sha256'] = jar_sigkey write_to_config(config, 'repo_key_sha256') with zipfile.ZipFile(jar_file, 'r') as f: return json.loads(str(f.read('signer-index.json'), 'utf-8')) def write_config_file(config): """Write the provided string to config.yml with the right path and encoding.""" Path(CONFIG_FILE).write_text(config, encoding='utf-8') def write_to_config(thisconfig, key, value=None): """Write a key/value to the local config.yml. The config.yml is defined as YAML 1.2 in UTF-8 encoding on all platforms. NOTE: only supports writing string variables. Parameters ---------- thisconfig config dictionary key variable name in config to be overwritten/added value optional value to be written, instead of fetched from 'thisconfig' dictionary. """ if value is None: origkey = key + '_orig' value = thisconfig[origkey] if origkey in thisconfig else thisconfig[key] # load config file, create one if it doesn't exist if not os.path.exists(CONFIG_FILE): write_config_file('') logging.info(_("Creating empty {config_file}").format(config_file=CONFIG_FILE)) with open(CONFIG_FILE) as fp: lines = fp.readlines() # make sure the file ends with a carraige return if len(lines) > 0: if not lines[-1].endswith('\n'): lines[-1] += '\n' pattern = re.compile(r'^[\s#]*' + key + r':.*\n') repl = config_dump({key: value}) # If we replaced this line once, we make sure won't be a # second instance of this line for this key in the document. didRepl = False # edit config file with open(CONFIG_FILE, 'w', encoding='utf-8') as f: for line in lines: if pattern.match(line): if not didRepl: line = pattern.sub(repl, line) f.write(line) didRepl = True else: f.write(line) if not didRepl: f.write(repl) def parse_xml(path): return XMLElementTree.parse(path).getroot() def string_is_integer(string): try: int(string, 0) return True except ValueError: try: int(string) return True except ValueError: return False def version_code_string_to_int(vercode): """Convert an version code string of any base into an int.""" # TODO: Python 3.6 allows underscores in numeric literals vercode = vercode.replace('_', '') try: return int(vercode, 0) except ValueError: return int(vercode) def get_app_display_name(app): """Get a human readable name for the app for logging and sorting. When trying to find a localized name, this first tries en-US since that his the historical language used for sorting. """ if app.get('Name'): return app['Name'] if app.get('localized'): localized = app['localized'].get(DEFAULT_LOCALE) if not localized: for v in app['localized'].values(): localized = v break if localized.get('name'): return localized['name'] return app.get('AutoName') or app['id'] def local_rsync(options, from_paths: List[str], todir: str): """Rsync method for local to local copying of things. This is an rsync wrapper with all the settings for safe use within the various fdroidserver use cases. This uses stricter rsync checking on all files since people using offline mode are already prioritizing security above ease and speed. """ rsyncargs = ['rsync', '--recursive', '--safe-links', '--times', '--perms', '--one-file-system', '--delete', '--chmod=Da+rx,Fa-x,a+r,u+w'] if not options.no_checksum: rsyncargs.append('--checksum') if options.verbose: rsyncargs += ['--verbose'] if options.quiet: rsyncargs += ['--quiet'] logging.debug(' '.join(rsyncargs + from_paths + [todir])) if subprocess.call(rsyncargs + from_paths + [todir]) != 0: raise FDroidException() def deploy_build_log_with_rsync(appid, vercode, log_content): """Upload build log of one individual app build to an fdroid repository. Parameters ---------- appid package name for dientifying to which app this log belongs. vercode version of the app to which this build belongs. log_content Content of the log which is about to be posted. Should be either a string or bytes. (bytes will be decoded as 'utf-8') """ if not log_content: logging.warning(_('skip deploying full build logs: log content is empty')) return if not os.path.exists('repo'): os.mkdir('repo') # gzip compress log file log_gz_path = os.path.join('repo', '{appid}_{versionCode}.log.gz'.format(appid=appid, versionCode=vercode)) with gzip.open(log_gz_path, 'wb') as f: if isinstance(log_content, str): f.write(bytes(log_content, 'utf-8')) else: f.write(log_content) rsync_status_file_to_repo(log_gz_path) def rsync_status_file_to_repo(path, repo_subdir=None): """Copy a build log or status JSON to the repo using rsync.""" if not config.get('deploy_process_logs', False): logging.debug(_('skip deploying full build logs: not enabled in config')) return for d in config.get('serverwebroot', []): webroot = d['url'] cmd = ['rsync', '--archive', '--delete-after', '--safe-links'] if options.verbose: cmd += ['--verbose'] if options.quiet: cmd += ['--quiet'] if 'identity_file' in config: cmd += ['-e', 'ssh -oBatchMode=yes -oIdentitiesOnly=yes -i ' + config['identity_file']] dest_path = os.path.join(webroot, "repo") if repo_subdir is not None: dest_path = os.path.join(dest_path, repo_subdir) if not dest_path.endswith('/'): dest_path += '/' # make sure rsync knows this is a directory cmd += [path, dest_path] retcode = subprocess.call(cmd) if retcode: logging.error(_('process log deploy {path} to {dest} failed!') .format(path=path, dest=webroot)) else: logging.debug(_('deployed process log {path} to {dest}') .format(path=path, dest=webroot)) def get_per_app_repos(): """Per-app repos are dirs named with the packageName of a single app.""" # Android packageNames are Java packages, they may contain uppercase or # lowercase letters ('A' through 'Z'), numbers, and underscores # ('_'). However, individual package name parts may only start with # letters. https://developer.android.com/guide/topics/manifest/manifest-element.html#package p = re.compile('^([a-zA-Z][a-zA-Z0-9_]*(\\.[a-zA-Z][a-zA-Z0-9_]*)*)?$') repos = [] for root, dirs, files in os.walk(os.getcwd()): for d in dirs: print('checking', root, 'for', d) if d in ('archive', 'metadata', 'repo', 'srclibs', 'tmp'): # standard parts of an fdroid repo, so never packageNames continue elif p.match(d) \ and os.path.exists(os.path.join(d, 'fdroid', 'repo', 'index.jar')): repos.append(d) break return repos # list of index files that are never gpg-signed NO_GPG_INDEX_FILES = [ "entry.jar", "index-v1.jar", "index.css", "index.html", "index.jar", "index.png", "index.xml", "signer-index.jar", ] # list of index files that are signed by gpgsign.py to make a .asc file GPG_INDEX_FILES = [ "altstore-index.json", "entry.json", "index-v1.json", "index-v2.json", "signer-index.json", ] INDEX_FILES = sorted( NO_GPG_INDEX_FILES + GPG_INDEX_FILES + [i + '.asc' for i in GPG_INDEX_FILES] ) def is_repo_file(filename, for_gpg_signing=False): """Whether the file in a repo is a build product to be delivered to users.""" if isinstance(filename, str): filename = filename.encode('utf-8', errors="surrogateescape") ignore_files = [i.encode() for i in NO_GPG_INDEX_FILES] ignore_files.append(b'index_unsigned.jar') if not for_gpg_signing: ignore_files += [i.encode() for i in GPG_INDEX_FILES] return ( os.path.isfile(filename) and not filename.endswith(b'.asc') and not filename.endswith(b'.sig') and not filename.endswith(b'.idsig') and not filename.endswith(b'.log.gz') and os.path.basename(filename) not in ignore_files ) def get_examples_dir(): """Return the dir where the fdroidserver example files are available.""" examplesdir = None tmp = os.path.dirname(sys.argv[0]) if os.path.basename(tmp) == 'bin': egg_links = glob.glob(os.path.join(tmp, '..', 'local/lib/python3.*/site-packages/fdroidserver.egg-link')) if egg_links: # installed from local git repo examplesdir = os.path.join(open(egg_links[0]).readline().rstrip(), 'examples') else: # try .egg layout examplesdir = os.path.dirname(os.path.dirname(__file__)) + '/share/doc/fdroidserver/examples' if not os.path.exists(examplesdir): # use UNIX layout examplesdir = os.path.dirname(tmp) + '/share/doc/fdroidserver/examples' else: # we're running straight out of the git repo prefix = os.path.normpath(os.path.join(os.path.dirname(__file__), '..')) examplesdir = prefix + '/examples' return examplesdir def get_android_tools_versions(): """Get a list of the versions of all installed Android SDK/NDK components.""" global config sdk_path = config['sdk_path'] if sdk_path[-1] != '/': sdk_path += '/' components = set() for ndk_path in config.get('ndk_paths', {}).values(): version = get_ndk_version(ndk_path) components.add((os.path.relpath(ndk_path, sdk_path), str(version))) pattern = re.compile(r'^Pkg.Revision *= *(.+)', re.MULTILINE) for root, dirs, files in os.walk(sdk_path): if 'source.properties' in files: source_properties = os.path.join(root, 'source.properties') with open(source_properties, 'r') as fp: m = pattern.search(fp.read()) if m: components.add((os.path.relpath(root, sdk_path), m.group(1))) return sorted(components) def get_android_tools_version_log(): """Get a list of the versions of all installed Android SDK/NDK components.""" log = '== Installed Android Tools ==\n\n' components = get_android_tools_versions() for name, version in sorted(components): log += '* ' + name + ' (' + version + ')\n' return log def calculate_math_string(expr): ops = { ast.Add: operator.add, ast.Mult: operator.mul, ast.Sub: operator.sub, ast.USub: operator.neg, ast.Pow: operator.pow, } def execute_ast(node): if isinstance(node, ast.Num): # return node.n elif isinstance(node, ast.BinOp): # return ops[type(node.op)](execute_ast(node.left), execute_ast(node.right)) elif isinstance(node, ast.UnaryOp): # e.g., -1 return ops[type(node.op)](ast.literal_eval(node.operand)) else: raise SyntaxError(node) try: if '#' in expr: raise SyntaxError('no comments allowed') return execute_ast(ast.parse(expr, mode='eval').body) except SyntaxError as exc: raise SyntaxError("could not parse expression '{expr}', " "only basic math operations are allowed (+, -, *)" .format(expr=expr)) from exc def force_exit(exitvalue=0): """Force exit when thread operations could block the exit. The build command has to use some threading stuff to handle the timeout and locks. This seems to prevent the command from exiting, unless this hack is used. """ sys.stdout.flush() sys.stderr.flush() os._exit(exitvalue) YAML_LINT_CONFIG = {'extends': 'default', 'rules': {'document-start': 'disable', 'line-length': 'disable', 'truthy': 'disable'}} def run_yamllint(path, indent=0): path = Path(path) try: import yamllint.config import yamllint.linter except ImportError: return '' result = [] with path.open('r', encoding='utf-8') as f: problems = yamllint.linter.run(f, yamllint.config.YamlLintConfig(json.dumps(YAML_LINT_CONFIG))) for problem in problems: result.append(' ' * indent + str(path) + ':' + str(problem.line) + ': ' + problem.message) return '\n'.join(result) def calculate_IPFS_cid(filename): """Calculate the IPFS CID of a file and add it to the index. uses ipfs_cid package at https://packages.debian.org/sid/ipfs-cid Returns CIDv1 of a file as per IPFS recommendation """ cmd = config and config.get('ipfs_cid') if not cmd: return file_cid = subprocess.run([cmd, filename], capture_output=True) if file_cid.returncode == 0: cid_output = file_cid.stdout.decode() cid_output_dict = json.loads(cid_output) return cid_output_dict['CIDv1'] def sha256sum(filename): """Calculate the sha256 of the given file.""" sha = hashlib.sha256() with open(filename, 'rb') as f: while True: t = f.read(16384) if len(t) == 0: break sha.update(t) return sha.hexdigest() def sha256base64(filename): """Calculate the sha256 of the given file as URL-safe base64.""" hasher = hashlib.sha256() with open(filename, 'rb') as f: while True: t = f.read(16384) if len(t) == 0: break hasher.update(t) return urlsafe_b64encode(hasher.digest()).decode() def get_ndk_version(ndk_path): """Get the version info from the metadata in the NDK package. Since r11, the info is nice and easy to find in sources.properties. Before, there was a kludgey format in RELEASE.txt. This is only needed for r10e. """ source_properties = os.path.join(ndk_path, 'source.properties') release_txt = os.path.join(ndk_path, 'RELEASE.TXT') if os.path.exists(source_properties): with open(source_properties) as fp: m = re.search(r'^Pkg.Revision *= *(.+)', fp.read(), flags=re.MULTILINE) if m: return m.group(1) elif os.path.exists(release_txt): with open(release_txt) as fp: return fp.read().split('-')[0] def auto_install_ndk(build): """Auto-install the NDK in the build, this assumes its in a buildserver guest VM. Download, verify, and install the NDK version as specified via the "ndk:" field in the build entry. As it uncompresses the zipball, this forces the permissions to work for all users, since this might uncompress as root and then be used from a different user. This needs to be able to install multiple versions of the NDK, since this is also used in CI builds, where multiple `fdroid build --onserver` calls can run in a single session. The production buildserver is reset between every build. The default ANDROID_SDK_ROOT base dir of /opt/android-sdk is hard-coded in buildserver/Vagrantfile. The $ANDROID_HOME/ndk subdir is where Android Studio will install the NDK into versioned subdirs. https://developer.android.com/studio/projects/configure-agp-ndk#agp_version_41 Also, r10e and older cannot be handled via this mechanism because they are packaged differently. """ import sdkmanager global config if build.get('disable'): return ndk = build.get('ndk') if not ndk: return if isinstance(ndk, str): sdkmanager.build_package_list(use_net=True) _install_ndk(ndk) elif isinstance(ndk, list): sdkmanager.build_package_list(use_net=True) for n in ndk: _install_ndk(n) else: raise BuildException(_('Invalid ndk: entry in build: "{ndk}"') .format(ndk=str(ndk))) def _install_ndk(ndk): """Install specified NDK if it is not already installed. Parameters ---------- ndk The NDK version to install, either in "release" form (r21e) or "revision" form (21.4.7075529). """ import sdkmanager sdk_path = config['sdk_path'] sdkmanager.install(f'ndk;{ndk}', sdk_path) for found in glob.glob(f'{sdk_path}/ndk/*'): version = get_ndk_version(found) if 'ndk_paths' not in config: config['ndk_paths'] = dict() config['ndk_paths'][ndk] = found config['ndk_paths'][version] = found logging.info( _('Set NDK {release} ({version}) up').format(release=ndk, version=version) ) def calculate_archive_policy(app, default): """Calculate the archive policy from the metadata and default config.""" if app.get('ArchivePolicy') is not None: archive_policy = app['ArchivePolicy'] else: archive_policy = default if app.get('VercodeOperation'): archive_policy *= len(app['VercodeOperation']) builds = [build for build in app.Builds if not build.disable] if app.Builds and archive_policy > len(builds): archive_policy = len(builds) return archive_policy FDROIDORG_MIRRORS = [ { 'isPrimary': True, 'url': 'https://f-droid.org/repo', 'dnsA': ['65.21.79.229', '136.243.44.143'], 'dnsAAAA': ['2a01:4f8:212:c98::2', '2a01:4f9:3b:546d::2'], 'worksWithoutSNI': True, }, { 'url': 'http://fdroidorg6cooksyluodepej4erfctzk7rrjpjbbr6wx24jh3lqyfwyd.onion/fdroid/repo' }, { 'url': 'http://dotsrccccbidkzg7oc7oj4ugxrlfbt64qebyunxbrgqhxiwj3nl6vcad.onion/fdroid/repo' }, { 'url': 'http://ftpfaudev4triw2vxiwzf4334e3mynz7osqgtozhbc77fixncqzbyoyd.onion/fdroid/repo' }, { 'url': 'http://lysator7eknrfl47rlyxvgeamrv7ucefgrrlhk7rouv3sna25asetwid.onion/pub/fdroid/repo' }, { 'url': 'http://mirror.ossplanetnyou5xifr6liw5vhzwc2g2fmmlohza25wwgnnaw65ytfsad.onion/fdroid/repo' }, {'url': 'https://fdroid.tetaneutral.net/fdroid/repo', 'countryCode': 'FR'}, { 'url': 'https://ftp.agdsn.de/fdroid/repo', 'countryCode': 'DE', "dnsA": ["141.30.235.39"], "dnsAAAA": ["2a13:dd85:b00:12::1"], "worksWithoutSNI": True, }, { 'url': 'https://ftp.fau.de/fdroid/repo', 'countryCode': 'DE', "dnsA": ["131.188.12.211"], "dnsAAAA": ["2001:638:a000:1021:21::1"], "worksWithoutSNI": True, }, {'url': 'https://ftp.gwdg.de/pub/android/fdroid/repo', 'countryCode': 'DE'}, { 'url': 'https://ftp.lysator.liu.se/pub/fdroid/repo', 'countryCode': 'SE', "dnsA": ["130.236.254.251", "130.236.254.253"], "dnsAAAA": ["2001:6b0:17:f0a0::fb", "2001:6b0:17:f0a0::fd"], "worksWithoutSNI": True, }, {'url': 'https://mirror.cyberbits.eu/fdroid/repo', 'countryCode': 'FR'}, { 'url': 'https://mirror.fcix.net/fdroid/repo', 'countryCode': 'US', "dnsA": ["23.152.160.16"], "dnsAAAA": ["2620:13b:0:1000::16"], "worksWithoutSNI": True, }, {'url': 'https://mirror.kumi.systems/fdroid/repo', 'countryCode': 'AT'}, {'url': 'https://mirror.level66.network/fdroid/repo', 'countryCode': 'DE'}, {'url': 'https://mirror.ossplanet.net/fdroid/repo', 'countryCode': 'TW'}, {'url': 'https://mirrors.dotsrc.org/fdroid/repo', 'countryCode': 'DK'}, {'url': 'https://opencolo.mm.fcix.net/fdroid/repo', 'countryCode': 'US'}, { 'url': 'https://plug-mirror.rcac.purdue.edu/fdroid/repo', 'countryCode': 'US', "dnsA": ["128.211.151.252"], "dnsAAAA": ["2001:18e8:804:35::1337"], "worksWithoutSNI": True, }, ] FDROIDORG_FINGERPRINT = ( '43238D512C1E5EB2D6569F4A3AFBF5523418B82E0A3ED1552770ABB9A9C9CCAB' ) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/fdroidserver/deploy.py0000644000175000017500000014461714770502071017303 0ustar00hanshans#!/usr/bin/env python3 # # deploy.py - part of the FDroid server tools # Copyright (C) 2010-15, Ciaran Gultnieks, ciaran@ciarang.com # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import sys import glob import hashlib import json import os import re import subprocess import time import urllib from typing import Dict, List from git import Repo import yaml from argparse import ArgumentParser import logging import pathlib import shutil import git import fdroidserver.github from . import _ from . import common from . import index from .exception import FDroidException config = None start_timestamp = time.gmtime() GIT_BRANCH = 'master' BINARY_TRANSPARENCY_DIR = 'binary_transparency' AUTO_S3CFG = '.fdroid-deploy-s3cfg' USER_S3CFG = 's3cfg' USER_RCLONE_CONF = None REMOTE_HOSTNAME_REGEX = re.compile(r'\W*\w+\W+(\w+).*') def _get_index_file_paths(base_dir): """Return the list of files to be synced last, since they finalize the deploy. The process of pushing all the new packages to the various services can take a while. So the index files should be updated last. That ensures that the package files are available when the client learns about them from the new index files. signer-index.* are only published in the repo/ section. """ return [ os.path.join(base_dir, filename) for filename in common.INDEX_FILES if not (filename.startswith('signer-index.') and base_dir.endswith('archive')) ] def _get_index_excludes(base_dir): indexes = _get_index_file_paths(base_dir) index_excludes = [] for f in indexes: index_excludes.append('--exclude') index_excludes.append(f) return index_excludes def _get_index_includes(base_dir): indexes = _get_index_file_paths(base_dir) index_includes = [] for f in indexes: index_includes.append('--include') index_includes.append(f) return index_includes def _remove_missing_files(files: List[str]) -> List[str]: """Remove files that are missing from the file system.""" existing = [] for f in files: if os.path.exists(f): existing.append(f) return existing def update_awsbucket(repo_section, is_index_only=False, verbose=False, quiet=False): """Upload the contents of the directory `repo_section` (including subdirectories) to the AWS S3 "bucket". The contents of that subdir of the bucket will first be deleted. Requires AWS credentials set in config.yml: awsaccesskeyid, awssecretkey """ logging.debug( f'''Syncing "{repo_section}" to Amazon S3 bucket "{config['awsbucket']}"''' ) if common.set_command_in_config('s3cmd') and common.set_command_in_config('rclone'): logging.info( 'Both rclone and s3cmd are installed. Checking config.yml for preference.' ) if config['s3cmd'] is not True and config['rclone'] is not True: logging.warning( 'No syncing tool set in config.yml!. Defaulting to using s3cmd' ) update_awsbucket_s3cmd(repo_section, is_index_only) if config['s3cmd'] is True and config['rclone'] is True: logging.warning( 'Both syncing tools set in config.yml!. Defaulting to using s3cmd' ) update_awsbucket_s3cmd(repo_section, is_index_only) if config['s3cmd'] is True and config['rclone'] is not True: update_awsbucket_s3cmd(repo_section, is_index_only) if config['rclone'] is True and config['s3cmd'] is not True: update_remote_storage_with_rclone( repo_section, is_index_only, verbose, quiet ) elif common.set_command_in_config('s3cmd'): update_awsbucket_s3cmd(repo_section, is_index_only) elif common.set_command_in_config('rclone'): update_remote_storage_with_rclone(repo_section, is_index_only, verbose, quiet) else: update_awsbucket_libcloud(repo_section, is_index_only) def update_awsbucket_s3cmd(repo_section, is_index_only=False): """Upload using the CLI tool s3cmd, which provides rsync-like sync. The upload is done in multiple passes to reduce the chance of interfering with an existing client-server interaction. In the first pass, only new files are uploaded. In the second pass, changed files are uploaded, overwriting what is on the server. On the third/last pass, the indexes are uploaded, and any removed files are deleted from the server. The last pass is the only pass to use a full MD5 checksum of all files to detect changes. """ logging.debug(_('Using s3cmd to sync with: {url}').format(url=config['awsbucket'])) if os.path.exists(USER_S3CFG): logging.info(_('Using "{path}" for configuring s3cmd.').format(path=USER_S3CFG)) configfilename = USER_S3CFG else: fd = os.open(AUTO_S3CFG, os.O_CREAT | os.O_TRUNC | os.O_WRONLY, 0o600) logging.debug( _('Creating "{path}" for configuring s3cmd.').format(path=AUTO_S3CFG) ) os.write(fd, '[default]\n'.encode('utf-8')) os.write( fd, ('access_key = ' + config['awsaccesskeyid'] + '\n').encode('utf-8') ) os.write(fd, ('secret_key = ' + config['awssecretkey'] + '\n').encode('utf-8')) os.close(fd) configfilename = AUTO_S3CFG s3bucketurl = 's3://' + config['awsbucket'] s3cmd = [config['s3cmd'], '--config=' + configfilename] if subprocess.call(s3cmd + ['info', s3bucketurl]) != 0: logging.warning(_('Creating new S3 bucket: {url}').format(url=s3bucketurl)) if subprocess.call(s3cmd + ['mb', s3bucketurl]) != 0: logging.error( _('Failed to create S3 bucket: {url}').format(url=s3bucketurl) ) raise FDroidException() s3cmd_sync = s3cmd + ['sync', '--acl-public'] options = common.get_options() if options and options.verbose: s3cmd_sync += ['--verbose'] if options and options.quiet: s3cmd_sync += ['--quiet'] s3url = s3bucketurl + '/fdroid/' logging.debug( _('s3cmd sync indexes {path} to {url} and delete').format( path=repo_section, url=s3url ) ) if is_index_only: logging.debug( _('s3cmd syncs indexes from {path} to {url} and deletes removed').format( path=repo_section, url=s3url ) ) sync_indexes_flags = [] sync_indexes_flags.extend(_get_index_includes(repo_section)) sync_indexes_flags.append('--delete-removed') sync_indexes_flags.append('--delete-after') if options.no_checksum: sync_indexes_flags.append('--no-check-md5') else: sync_indexes_flags.append('--check-md5') returncode = subprocess.call( s3cmd_sync + sync_indexes_flags + [repo_section, s3url] ) if returncode != 0: raise FDroidException() else: logging.debug('s3cmd sync new files in ' + repo_section + ' to ' + s3url) logging.debug(_('Running first pass with MD5 checking disabled')) excludes = _get_index_excludes(repo_section) returncode = subprocess.call( s3cmd_sync + excludes + ['--no-check-md5', '--skip-existing', repo_section, s3url] ) if returncode != 0: raise FDroidException() logging.debug('s3cmd sync all files in ' + repo_section + ' to ' + s3url) returncode = subprocess.call( s3cmd_sync + excludes + ['--no-check-md5', repo_section, s3url] ) if returncode != 0: raise FDroidException() logging.debug( _('s3cmd sync indexes {path} to {url} and delete').format( path=repo_section, url=s3url ) ) s3cmd_sync.append('--delete-removed') s3cmd_sync.append('--delete-after') if options.no_checksum: s3cmd_sync.append('--no-check-md5') else: s3cmd_sync.append('--check-md5') if subprocess.call(s3cmd_sync + [repo_section, s3url]) != 0: raise FDroidException() def update_remote_storage_with_rclone( repo_section, is_index_only=False, verbose=False, quiet=False ): """ Upload fdroid repo folder to remote storage using rclone sync. Rclone sync can send the files to any supported remote storage service once without numerous polling. If remote storage is s3 e.g aws s3, wasabi, filebase then path will be bucket_name/fdroid/repo where bucket_name will be an s3 bucket If remote storage is storage drive/sftp e.g google drive, rsync.net the new path will be bucket_name/fdroid/repo where bucket_name will be a folder Better than the s3cmd command as it does the syncing in one command Check https://rclone.org/docs/#config-config-file (optional config file) """ logging.debug(_('Using rclone to sync with: {url}').format(url=config['awsbucket'])) if config.get('path_to_custom_rclone_config') is not None: USER_RCLONE_CONF = config['path_to_custom_rclone_config'] if os.path.exists(USER_RCLONE_CONF): logging.info("'path_to_custom_rclone_config' found in config.yml") logging.info( _('Using "{path}" for syncing with remote storage.').format( path=USER_RCLONE_CONF ) ) configfilename = USER_RCLONE_CONF else: logging.info('Custom configuration not found.') logging.info( 'Using default configuration at {}'.format( subprocess.check_output(['rclone', 'config', 'file'], text=True) ) ) configfilename = None else: logging.warning("'path_to_custom_rclone_config' not found in config.yml") logging.info('Custom configuration not found.') logging.info( 'Using default configuration at {}'.format( subprocess.check_output(['rclone', 'config', 'file'], text=True) ) ) configfilename = None upload_dir = 'fdroid/' + repo_section if not config.get('rclone_config') or not config.get('awsbucket'): raise FDroidException( _('To use rclone, rclone_config and awsbucket must be set in config.yml!') ) if is_index_only: sources = _get_index_file_paths(repo_section) sources = _remove_missing_files(sources) else: sources = [repo_section] if isinstance(config['rclone_config'], str): rclone_config = [config['rclone_config']] else: rclone_config = config['rclone_config'] for source in sources: for remote_config in rclone_config: complete_remote_path = f'{remote_config}:{config["awsbucket"]}/{upload_dir}' rclone_sync_command = ['rclone', 'sync', source, complete_remote_path] if verbose: rclone_sync_command += ['--verbose'] elif quiet: rclone_sync_command += ['--quiet'] if configfilename: rclone_sync_command += ['--config=' + configfilename] logging.debug( "rclone sync all files in " + source + ' to ' + complete_remote_path ) if subprocess.call(rclone_sync_command) != 0: raise FDroidException() def update_awsbucket_libcloud(repo_section, is_index_only=False): """No summary. Upload the contents of the directory `repo_section` (including subdirectories) to the AWS S3 "bucket". The contents of that subdir of the bucket will first be deleted. Requires AWS credentials set in config.yml: awsaccesskeyid, awssecretkey """ logging.debug( _('using Apache libcloud to sync with {url}').format(url=config['awsbucket']) ) import libcloud.security libcloud.security.VERIFY_SSL_CERT = True from libcloud.storage.types import Provider, ContainerDoesNotExistError from libcloud.storage.providers import get_driver if not config.get('awsaccesskeyid') or not config.get('awssecretkey'): raise FDroidException( _( 'To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!' ) ) awsbucket = config['awsbucket'] if os.path.exists(USER_S3CFG): raise FDroidException( _('"{path}" exists but s3cmd is not installed!').format(path=USER_S3CFG) ) cls = get_driver(Provider.S3) driver = cls(config['awsaccesskeyid'], config['awssecretkey']) try: container = driver.get_container(container_name=awsbucket) except ContainerDoesNotExistError: container = driver.create_container(container_name=awsbucket) logging.info(_('Created new container "{name}"').format(name=container.name)) upload_dir = 'fdroid/' + repo_section objs = dict() for obj in container.list_objects(): if obj.name.startswith(upload_dir + '/'): objs[obj.name] = obj if is_index_only: index_files = [ f"{os.getcwd()}/{name}" for name in _get_index_file_paths(repo_section) ] files_to_upload = [ os.path.join(root, name) for root, dirs, files in os.walk(os.path.join(os.getcwd(), repo_section)) for name in files ] files_to_upload = list(set(files_to_upload) & set(index_files)) files_to_upload = _remove_missing_files(files_to_upload) else: files_to_upload = [ os.path.join(root, name) for root, dirs, files in os.walk(os.path.join(os.getcwd(), repo_section)) for name in files ] for file_to_upload in files_to_upload: upload = False object_name = 'fdroid/' + os.path.relpath(file_to_upload, os.getcwd()) if object_name not in objs: upload = True else: obj = objs.pop(object_name) if obj.size != os.path.getsize(file_to_upload): upload = True else: # if the sizes match, then compare by MD5 md5 = hashlib.md5() # nosec AWS uses MD5 with open(file_to_upload, 'rb') as f: while True: data = f.read(8192) if not data: break md5.update(data) if obj.hash != md5.hexdigest(): s3url = 's3://' + awsbucket + '/' + obj.name logging.info(' deleting ' + s3url) if not driver.delete_object(obj): logging.warning('Could not delete ' + s3url) upload = True if upload: logging.debug(' uploading "' + file_to_upload + '"...') extra = {'acl': 'public-read'} if file_to_upload.endswith('.sig'): extra['content_type'] = 'application/pgp-signature' elif file_to_upload.endswith('.asc'): extra['content_type'] = 'application/pgp-signature' path = os.path.relpath(file_to_upload) logging.info(f' uploading {path} to s3://{awsbucket}/{object_name}') with open(file_to_upload, 'rb') as iterator: obj = driver.upload_object_via_stream( iterator=iterator, container=container, object_name=object_name, extra=extra, ) # delete the remnants in the bucket, they do not exist locally while objs: object_name, obj = objs.popitem() s3url = 's3://' + awsbucket + '/' + object_name if object_name.startswith(upload_dir): logging.warning(' deleting ' + s3url) driver.delete_object(obj) else: logging.info(' skipping ' + s3url) def update_serverwebroot(serverwebroot, repo_section): """Deploy the index files to the serverwebroot using rsync. Upload the first time without the index files and delay the deletion as much as possible. That keeps the repo functional while this update is running. Then once it is complete, rerun the command again to upload the index files. Always using the same target with rsync allows for very strict settings on the receiving server, you can literally specify the one rsync command that is allowed to run in ~/.ssh/authorized_keys. (serverwebroot is guaranteed to have a trailing slash in common.py) It is possible to optionally use a checksum comparison for accurate comparisons on different filesystems, for example, FAT has a low resolution timestamp """ try: subprocess.run(['rsync', '--version'], capture_output=True, check=True) except Exception as e: raise FDroidException( _('rsync is missing or broken: {error}').format(error=e) ) from e rsyncargs = ['rsync', '--archive', '--delete-after', '--safe-links'] options = common.get_options() if not options or not options.no_checksum: rsyncargs.append('--checksum') if options and options.verbose: rsyncargs += ['--verbose'] if options and options.quiet: rsyncargs += ['--quiet'] if options and options.identity_file: rsyncargs += [ '-e', 'ssh -oBatchMode=yes -oIdentitiesOnly=yes -i ' + options.identity_file, ] elif config and config.get('identity_file'): rsyncargs += [ '-e', 'ssh -oBatchMode=yes -oIdentitiesOnly=yes -i ' + config['identity_file'], ] url = serverwebroot['url'] is_index_only = serverwebroot.get('index_only', False) logging.info('rsyncing ' + repo_section + ' to ' + url) if is_index_only: files_to_upload = _get_index_file_paths(repo_section) files_to_upload = _remove_missing_files(files_to_upload) rsyncargs += files_to_upload rsyncargs += [f'{url}/{repo_section}/'] logging.info(rsyncargs) if subprocess.call(rsyncargs) != 0: raise FDroidException() else: excludes = _get_index_excludes(repo_section) if subprocess.call(rsyncargs + excludes + [repo_section, url]) != 0: raise FDroidException() if subprocess.call(rsyncargs + [repo_section, url]) != 0: raise FDroidException() # upload "current version" symlinks if requested if ( config and config.get('make_current_version_link') and repo_section == 'repo' ): links_to_upload = [] for f in ( glob.glob('*.apk') + glob.glob('*.apk.asc') + glob.glob('*.apk.sig') ): if os.path.islink(f): links_to_upload.append(f) if len(links_to_upload) > 0: if subprocess.call(rsyncargs + links_to_upload + [url]) != 0: raise FDroidException() def update_serverwebroots(serverwebroots, repo_section, standardwebroot=True): for d in serverwebroots: # this supports both an ssh host:path and just a path serverwebroot = d['url'] s = serverwebroot.rstrip('/').split(':') if len(s) == 1: fdroiddir = s[0] elif len(s) == 2: host, fdroiddir = s else: logging.error(_('Malformed serverwebroot line:') + ' ' + serverwebroot) sys.exit(1) repobase = os.path.basename(fdroiddir) if standardwebroot and repobase != 'fdroid': logging.error( _( 'serverwebroot: path does not end with "fdroid", perhaps you meant one of these:' ) + '\n\t' + serverwebroot.rstrip('/') + '/fdroid\n\t' + serverwebroot.rstrip('/').rstrip(repobase) + 'fdroid' ) sys.exit(1) update_serverwebroot(d, repo_section) def sync_from_localcopy(repo_section, local_copy_dir): """Sync the repo from "local copy dir" filesystem to this box. In setups that use offline signing, this is the last step that syncs the repo from the "local copy dir" e.g. a thumb drive to the repo on the local filesystem. That local repo is then used to push to all the servers that are configured. """ logging.info('Syncing from local_copy_dir to this repo.') # trailing slashes have a meaning in rsync which is not needed here, so # make sure both paths have exactly one trailing slash common.local_rsync( common.get_options(), [os.path.join(local_copy_dir, repo_section).rstrip('/') + '/'], repo_section.rstrip('/') + '/', ) offline_copy = os.path.join(local_copy_dir, BINARY_TRANSPARENCY_DIR) if os.path.exists(os.path.join(offline_copy, '.git')): online_copy = os.path.join(os.getcwd(), BINARY_TRANSPARENCY_DIR) push_binary_transparency(offline_copy, online_copy) def update_localcopy(repo_section, local_copy_dir): """Copy data from offline to the "local copy dir" filesystem. This updates the copy of this repo used to shuttle data from an offline signing machine to the online machine, e.g. on a thumb drive. """ # local_copy_dir is guaranteed to have a trailing slash in main() below common.local_rsync(common.get_options(), [repo_section], local_copy_dir) offline_copy = os.path.join(os.getcwd(), BINARY_TRANSPARENCY_DIR) if os.path.isdir(os.path.join(offline_copy, '.git')): online_copy = os.path.join(local_copy_dir, BINARY_TRANSPARENCY_DIR) push_binary_transparency(offline_copy, online_copy) def _get_size(start_path='.'): """Get size of all files in a dir https://stackoverflow.com/a/1392549.""" total_size = 0 for root, dirs, files in os.walk(start_path): for f in files: fp = os.path.join(root, f) total_size += os.path.getsize(fp) return total_size def update_servergitmirrors(servergitmirrors, repo_section): """Update repo mirrors stored in git repos. This is a hack to use public git repos as F-Droid repos. It recreates the git repo from scratch each time, so that there is no history. That keeps the size of the git repo small. Services like GitHub or GitLab have a size limit of something like 1 gig. This git repo is only a git repo for the purpose of being hosted. For history, there is the archive section, and there is the binary transparency log. """ from clint.textui import progress if config.get('local_copy_dir') and not config.get('sync_from_local_copy_dir'): logging.debug( _('Offline machine, skipping git mirror generation until `fdroid deploy`') ) return options = common.get_options() workspace_dir = pathlib.Path(os.getcwd()) # right now we support only 'repo' git-mirroring if repo_section == 'repo': git_mirror_path = workspace_dir / 'git-mirror' dotgit = os.path.join(git_mirror_path, '.git') git_fdroiddir = os.path.join(git_mirror_path, 'fdroid') git_repodir = os.path.join(git_fdroiddir, repo_section) if not os.path.isdir(git_repodir): os.makedirs(git_repodir) # github/gitlab use bare git repos, so only count the .git folder # test: generate giant APKs by including AndroidManifest.xml and and large # file from /dev/urandom, then sign it. Then add those to the git repo. dotgit_size = _get_size(dotgit) dotgit_over_limit = dotgit_size > config['git_mirror_size_limit'] if os.path.isdir(dotgit) and dotgit_over_limit: logging.warning( _( 'Deleting git-mirror history, repo is too big ({size} max {limit})' ).format(size=dotgit_size, limit=config['git_mirror_size_limit']) ) shutil.rmtree(dotgit) if options.no_keep_git_mirror_archive and dotgit_over_limit: logging.warning( _('Deleting archive, repo is too big ({size} max {limit})').format( size=dotgit_size, limit=config['git_mirror_size_limit'] ) ) archive_path = os.path.join(git_mirror_path, 'fdroid', 'archive') shutil.rmtree(archive_path, ignore_errors=True) # use custom SSH command if identity_file specified ssh_cmd = 'ssh -oBatchMode=yes' if options.identity_file is not None: ssh_cmd += ' -oIdentitiesOnly=yes -i "%s"' % options.identity_file elif 'identity_file' in config: ssh_cmd += ' -oIdentitiesOnly=yes -i "%s"' % config['identity_file'] if options.verbose: progressbar = progress.Bar() class MyProgressPrinter(git.RemoteProgress): def update(self, op_code, current, maximum=None, message=None): if isinstance(maximum, float): progressbar.show(current, maximum) progress = MyProgressPrinter() else: progress = None repo = git.Repo.init(git_mirror_path, initial_branch=GIT_BRANCH) enabled_remotes = [] for d in servergitmirrors: is_index_only = d.get('index_only', False) # Use a separate branch for the index only mode as it needs a different set of files to commit if is_index_only: local_branch_name = 'index_only' else: local_branch_name = 'full' if local_branch_name in repo.heads: repo.git.switch(local_branch_name) else: repo.git.switch('--orphan', local_branch_name) # trailing slashes have a meaning in rsync which is not needed here, so # make sure both paths have exactly one trailing slash if is_index_only: files_to_sync = _get_index_file_paths(str(workspace_dir / repo_section)) files_to_sync = _remove_missing_files(files_to_sync) else: files_to_sync = [str(workspace_dir / repo_section).rstrip('/') + '/'] common.local_rsync( common.get_options(), files_to_sync, git_repodir.rstrip('/') + '/' ) upload_to_servergitmirror( mirror_config=d, local_repo=repo, enabled_remotes=enabled_remotes, repo_section=repo_section, is_index_only=is_index_only, fdroid_dir=git_fdroiddir, git_mirror_path=str(git_mirror_path), ssh_cmd=ssh_cmd, progress=progress, ) if progress: progressbar.done() def upload_to_servergitmirror( mirror_config: Dict[str, str], local_repo: Repo, enabled_remotes: List[str], repo_section: str, is_index_only: bool, fdroid_dir: str, git_mirror_path: str, ssh_cmd: str, progress: git.RemoteProgress, ) -> None: remote_branch_name = GIT_BRANCH local_branch_name = local_repo.active_branch.name remote_url = mirror_config['url'] name = REMOTE_HOSTNAME_REGEX.sub(r'\1', remote_url) enabled_remotes.append(name) r = git.remote.Remote(local_repo, name) if r in local_repo.remotes: r = local_repo.remote(name) if 'set_url' in dir(r): # force remote URL if using GitPython 2.x r.set_url(remote_url) else: local_repo.create_remote(name, remote_url) logging.info('Mirroring to: ' + remote_url) if is_index_only: files_to_upload = _get_index_file_paths( os.path.join(local_repo.working_tree_dir, 'fdroid', repo_section) ) files_to_upload = _remove_missing_files(files_to_upload) local_repo.index.add(files_to_upload) else: # sadly index.add don't allow the --all parameter logging.debug('Adding all files to git mirror') local_repo.git.add(all=True) logging.debug('Committing files into git mirror') local_repo.index.commit("fdroidserver git-mirror") # only deploy to GitLab Artifacts if too big for GitLab Pages if ( is_index_only or common.get_dir_size(fdroid_dir) <= common.GITLAB_COM_PAGES_MAX_SIZE ): gitlab_ci_job_name = 'pages' else: gitlab_ci_job_name = 'GitLab Artifacts' logging.warning( _('Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!') % (common.GITLAB_COM_PAGES_MAX_SIZE / 1000000000) ) # push. This will overwrite the git history remote = local_repo.remote(name) if remote.name == 'gitlab': logging.debug('Writing .gitlab-ci.yml to deploy to GitLab Pages') with open(os.path.join(git_mirror_path, ".gitlab-ci.yml"), "wt") as fp: yaml.dump( { gitlab_ci_job_name: { 'script': [ 'mkdir .public', 'cp -r * .public/', 'mv .public public', ], 'artifacts': {'paths': ['public']}, 'variables': {'GIT_DEPTH': 1}, } }, fp, default_flow_style=False, ) local_repo.index.add(['.gitlab-ci.yml']) local_repo.index.commit("fdroidserver git-mirror: Deploy to GitLab Pages") logging.debug(_('Pushing to {url}').format(url=remote.url)) with local_repo.git.custom_environment(GIT_SSH_COMMAND=ssh_cmd): pushinfos = remote.push( f"{local_branch_name}:{remote_branch_name}", force=True, set_upstream=True, progress=progress, ) for pushinfo in pushinfos: if pushinfo.flags & ( git.remote.PushInfo.ERROR | git.remote.PushInfo.REJECTED | git.remote.PushInfo.REMOTE_FAILURE | git.remote.PushInfo.REMOTE_REJECTED ): # Show potentially useful messages from git remote if progress: for line in progress.other_lines: if line.startswith('remote:'): logging.debug(line) raise FDroidException( remote.url + ' push failed: ' + str(pushinfo.flags) + ' ' + pushinfo.summary ) else: logging.debug(remote.url + ': ' + pushinfo.summary) def upload_to_android_observatory(repo_section): import requests requests # stop unused import warning if common.get_options().verbose: logging.getLogger("requests").setLevel(logging.INFO) logging.getLogger("urllib3").setLevel(logging.INFO) else: logging.getLogger("requests").setLevel(logging.WARNING) logging.getLogger("urllib3").setLevel(logging.WARNING) if repo_section == 'repo': for f in sorted(glob.glob(os.path.join(repo_section, '*.apk'))): upload_apk_to_android_observatory(f) def upload_apk_to_android_observatory(path): # depend on requests and lxml only if users enable AO import requests from . import net from lxml.html import fromstring apkfilename = os.path.basename(path) r = requests.post( 'https://androidobservatory.org/', data={'q': common.sha256sum(path), 'searchby': 'hash'}, headers=net.HEADERS, timeout=300, ) if r.status_code == 200: # from now on XPath will be used to retrieve the message in the HTML # androidobservatory doesn't have a nice API to talk with # so we must scrape the page content tree = fromstring(r.text) href = None for element in tree.xpath("//html/body/div/div/table/tbody/tr/td/a"): a = element.attrib.get('href') if a: m = re.match(r'^/app/[0-9A-F]{40}$', a) if m: href = m.group() page = 'https://androidobservatory.org' if href: message = _('Found {apkfilename} at {url}').format( apkfilename=apkfilename, url=(page + href) ) logging.debug(message) return # upload the file with a post request logging.info( _('Uploading {apkfilename} to androidobservatory.org').format( apkfilename=apkfilename ) ) r = requests.post( 'https://androidobservatory.org/upload', files={'apk': (apkfilename, open(path, 'rb'))}, headers=net.HEADERS, allow_redirects=False, timeout=300, ) def upload_to_virustotal(repo_section, virustotal_apikey): import requests requests # stop unused import warning if repo_section == 'repo': if not os.path.exists('virustotal'): os.mkdir('virustotal') if os.path.exists(os.path.join(repo_section, 'index-v1.json')): with open(os.path.join(repo_section, 'index-v1.json')) as fp: data = json.load(fp) else: local_jar = os.path.join(repo_section, 'index-v1.jar') data, _ignored, _ignored = index.get_index_from_jar(local_jar) for packageName, packages in data['packages'].items(): for package in packages: upload_apk_to_virustotal(virustotal_apikey, **package) def upload_apk_to_virustotal( virustotal_apikey, packageName, apkName, hash, versionCode, **kwargs ): import requests logging.getLogger("urllib3").setLevel(logging.WARNING) logging.getLogger("requests").setLevel(logging.WARNING) outputfilename = os.path.join( 'virustotal', packageName + '_' + str(versionCode) + '_' + hash + '.json' ) if os.path.exists(outputfilename): logging.debug(apkName + ' results are in ' + outputfilename) return outputfilename repofilename = os.path.join('repo', apkName) logging.info('Checking if ' + repofilename + ' is on virustotal') headers = {"User-Agent": "F-Droid"} if 'headers' in kwargs: for k, v in kwargs['headers'].items(): headers[k] = v apikey = { 'apikey': virustotal_apikey, 'resource': hash, } needs_file_upload = False while True: report_url = ( 'https://www.virustotal.com/vtapi/v2/file/report?' + urllib.parse.urlencode(apikey) ) r = requests.get(report_url, headers=headers, timeout=300) if r.status_code == 200: response = r.json() if response['response_code'] == 0: needs_file_upload = True else: response['filename'] = apkName response['packageName'] = packageName response['versionCode'] = versionCode if kwargs.get('versionName'): response['versionName'] = kwargs.get('versionName') with open(outputfilename, 'w') as fp: json.dump(response, fp, indent=2, sort_keys=True) if response.get('positives', 0) > 0: logging.warning( _('{path} has been flagged by virustotal {count} times:').format( path=repofilename, count=response['positives'] ), +'\n\t' + response['permalink'], ) break if r.status_code == 204: logging.warning(_('virustotal.com is rate limiting, waiting to retry...')) time.sleep(30) # wait for public API rate limiting upload_url = None if needs_file_upload: manual_url = 'https://www.virustotal.com/' size = os.path.getsize(repofilename) if size > 200000000: # VirusTotal API 200MB hard limit logging.error( _('{path} more than 200MB, manually upload: {url}').format( path=repofilename, url=manual_url ) ) elif size > 32000000: # VirusTotal API requires fetching a URL to upload bigger files query_url = ( 'https://www.virustotal.com/vtapi/v2/file/scan/upload_url?' + urllib.parse.urlencode(apikey) ) r = requests.get(query_url, headers=headers, timeout=300) if r.status_code == 200: upload_url = r.json().get('upload_url') elif r.status_code == 403: logging.error( _( 'VirusTotal API key cannot upload files larger than 32MB, ' + 'use {url} to upload {path}.' ).format(path=repofilename, url=manual_url) ) else: r.raise_for_status() else: upload_url = 'https://www.virustotal.com/vtapi/v2/file/scan' if upload_url: logging.info( _('Uploading {apkfilename} to virustotal').format(apkfilename=repofilename) ) r = requests.post( upload_url, data=apikey, headers=headers, files={'file': (apkName, open(repofilename, 'rb'))}, timeout=300, ) logging.debug( _('If this upload fails, try manually uploading to {url}').format( url=manual_url ) ) r.raise_for_status() response = r.json() logging.info(response['verbose_msg'] + " " + response['permalink']) return outputfilename def push_binary_transparency(git_repo_path, git_remote): """Push the binary transparency git repo to the specifed remote. If the remote is a local directory, make sure it exists, and is a git repo. This is used to move this git repo from an offline machine onto a flash drive, then onto the online machine. Also, this pulls because pushing to a non-bare git repo is error prone. This is also used in offline signing setups, where it then also creates a "local copy dir" git repo that serves to shuttle the git data from the offline machine to the online machine. In that case, git_remote is a dir on the local file system, e.g. a thumb drive. """ logging.info(_('Pushing binary transparency log to {url}').format(url=git_remote)) if os.path.isdir(os.path.dirname(git_remote)): # from offline machine to thumbdrive remote_path = os.path.abspath(git_repo_path) if not os.path.isdir(os.path.join(git_remote, '.git')): os.makedirs(git_remote, exist_ok=True) thumbdriverepo = git.Repo.init(git_remote, initial_branch=GIT_BRANCH) local = thumbdriverepo.create_remote('local', remote_path) else: thumbdriverepo = git.Repo(git_remote) local = git.remote.Remote(thumbdriverepo, 'local') if local in thumbdriverepo.remotes: local = thumbdriverepo.remote('local') if 'set_url' in dir(local): # force remote URL if using GitPython 2.x local.set_url(remote_path) else: local = thumbdriverepo.create_remote('local', remote_path) local.pull(GIT_BRANCH) else: # from online machine to remote on a server on the internet gitrepo = git.Repo(git_repo_path) origin = git.remote.Remote(gitrepo, 'origin') if origin in gitrepo.remotes: origin = gitrepo.remote('origin') if 'set_url' in dir(origin): # added in GitPython 2.x origin.set_url(git_remote) else: origin = gitrepo.create_remote('origin', git_remote) for _i in range(3): try: origin.push(GIT_BRANCH) except git.GitCommandError as e: logging.error(e) continue break else: raise FDroidException(_("Pushing to remote server failed!")) def find_release_infos(index_v2_path, repo_dir, package_names): """Find files, texts, etc. for uploading to a release page in index-v2.json. This function parses index-v2.json for file-paths elegible for deployment to release pages. (e.g. GitHub releases) It also groups these files by packageName and versionName. e.g. to get a list of files for all specific release of fdroid client you may call: find_binary_release_infos()['org.fdroid.fdroid']['0.19.2'] All paths in the returned data-structure are of type pathlib.Path. """ release_infos = {} with open(index_v2_path, 'r') as f: idx = json.load(f) for package_name in package_names: package = idx.get('packages', {}).get(package_name, {}) for version in package.get('versions', {}).values(): if package_name not in release_infos: release_infos[package_name] = {} version_name = version['manifest']['versionName'] version_path = repo_dir / version['file']['name'].lstrip("/") files = [version_path] asc_path = pathlib.Path(str(version_path) + '.asc') if asc_path.is_file(): files.append(asc_path) sig_path = pathlib.Path(str(version_path) + '.sig') if sig_path.is_file(): files.append(sig_path) release_infos[package_name][version_name] = { 'files': files, 'whatsNew': version.get('whatsNew', {}).get("en-US"), 'hasReleaseChannels': len(version.get('releaseChannels', [])) > 0, } return release_infos def upload_to_github_releases(repo_section, gh_config, global_gh_token): repo_dir = pathlib.Path(repo_section) index_v2_path = repo_dir / 'index-v2.json' if not index_v2_path.is_file(): logging.warning( _( "Error deploying 'github_releases', {} not present. (You might " "need to run `fdroid update` first.)" ).format(index_v2_path) ) return package_names = [] for repo_conf in gh_config: for package_name in repo_conf.get('packageNames', []): package_names.append(package_name) release_infos = fdroidserver.deploy.find_release_infos( index_v2_path, repo_dir, package_names ) for repo_conf in gh_config: upload_to_github_releases_repo(repo_conf, release_infos, global_gh_token) def upload_to_github_releases_repo(repo_conf, release_infos, global_gh_token): projectUrl = repo_conf.get("projectUrl") if not projectUrl: logging.warning( _( "One of the 'github_releases' config items is missing the " "'projectUrl' value. skipping ..." ) ) return token = repo_conf.get("token") or global_gh_token if not token: logging.warning( _( "One of the 'github_releases' config items is missing the " "'token' value. skipping ..." ) ) return conf_package_names = repo_conf.get("packageNames", []) if type(conf_package_names) == str: conf_package_names = [conf_package_names] if not conf_package_names: logging.warning( _( "One of the 'github_releases' config items is missing the " "'packageNames' value. skipping ..." ) ) return # lookup all versionNames (git tags) for all packages available in the # local fdroid repo all_local_versions = set() for package_name in conf_package_names: for version in release_infos.get(package_name, {}).keys(): all_local_versions.add(version) gh = fdroidserver.github.GithubApi(token, projectUrl) unreleased_tags = gh.list_unreleased_tags() for version in all_local_versions: if version in unreleased_tags: # Making sure we're not uploading this version when releaseChannels # is set. (releaseChannels usually mean it's e.g. an alpha or beta # version) if ( not release_infos.get(conf_package_names[0], {}) .get(version, {}) .get('hasReleaseChannels') ): # collect files associated with this github release files = [] for package in conf_package_names: files.extend( release_infos.get(package, {}).get(version, {}).get('files', []) ) # always use the whatsNew text from the first app listed in # config.yml github_releases.packageNames text = ( release_infos.get(conf_package_names[0], {}) .get(version, {}) .get('whatsNew') or '' ) if 'release_notes_prepend' in repo_conf: text = repo_conf['release_notes_prepend'] + "\n\n" + text # create new release on github and upload all associated files gh.create_release(version, files, text) def main(): global config parser = ArgumentParser() common.setup_global_opts(parser) parser.add_argument( "-i", "--identity-file", default=None, help=_("Specify an identity file to provide to SSH for rsyncing"), ) parser.add_argument( "--local-copy-dir", default=None, help=_("Specify a local folder to sync the repo to"), ) parser.add_argument( "--no-checksum", action="store_true", default=False, help=_("Don't use rsync checksums"), ) parser.add_argument( "--no-keep-git-mirror-archive", action="store_true", default=False, help=_("If a git mirror gets to big, allow the archive to be deleted"), ) options = common.parse_args(parser) config = common.read_config() if config.get('nonstandardwebroot') is True: standardwebroot = False else: standardwebroot = True if options.local_copy_dir is not None: local_copy_dir = options.local_copy_dir elif config.get('local_copy_dir'): local_copy_dir = config['local_copy_dir'] else: local_copy_dir = None if local_copy_dir is not None: fdroiddir = local_copy_dir.rstrip('/') if os.path.exists(fdroiddir) and not os.path.isdir(fdroiddir): logging.error(_('local_copy_dir must be directory, not a file!')) sys.exit(1) if not os.path.exists(os.path.dirname(fdroiddir)): logging.error( _('The root dir for local_copy_dir "{path}" does not exist!').format( path=os.path.dirname(fdroiddir) ) ) sys.exit(1) if not os.path.isabs(fdroiddir): logging.error(_('local_copy_dir must be an absolute path!')) sys.exit(1) repobase = os.path.basename(fdroiddir) if standardwebroot and repobase != 'fdroid': logging.error( _( 'local_copy_dir does not end with "fdroid", ' + 'perhaps you meant: "{path}"' ).format(path=fdroiddir + '/fdroid') ) sys.exit(1) if local_copy_dir[-1] != '/': local_copy_dir += '/' local_copy_dir = local_copy_dir.replace('//', '/') if not os.path.exists(fdroiddir): os.mkdir(fdroiddir) if ( not config.get('awsbucket') and not config.get('serverwebroot') and not config.get('servergitmirrors') and not config.get('androidobservatory') and not config.get('binary_transparency_remote') and not config.get('virustotal_apikey') and not config.get('github_releases') and local_copy_dir is None ): logging.warning( _('No option set! Edit your config.yml to set at least one of these:') + '\nserverwebroot, servergitmirrors, local_copy_dir, awsbucket, ' + 'virustotal_apikey, androidobservatory, github_releases ' + 'or binary_transparency_remote' ) sys.exit(1) repo_sections = ['repo'] if config['archive_older'] != 0: repo_sections.append('archive') if not os.path.exists('archive'): os.mkdir('archive') if config['per_app_repos']: repo_sections += common.get_per_app_repos() if os.path.isdir('unsigned') or ( local_copy_dir is not None and os.path.isdir(os.path.join(local_copy_dir, 'unsigned')) ): repo_sections.append('unsigned') for repo_section in repo_sections: if local_copy_dir is not None: if config['sync_from_local_copy_dir']: sync_from_localcopy(repo_section, local_copy_dir) else: update_localcopy(repo_section, local_copy_dir) if config.get('serverwebroot'): update_serverwebroots( config['serverwebroot'], repo_section, standardwebroot ) if config.get('servergitmirrors'): # update_servergitmirrors will take care of multiple mirrors so don't need a foreach update_servergitmirrors(config['servergitmirrors'], repo_section) if config.get('awsbucket'): index_only = config.get('awsbucket_index_only') update_awsbucket(repo_section, index_only, options.verbose, options.quiet) if config.get('androidobservatory'): upload_to_android_observatory(repo_section) if config.get('virustotal_apikey'): upload_to_virustotal(repo_section, config.get('virustotal_apikey')) if config.get('github_releases'): upload_to_github_releases( repo_section, config.get('github_releases'), config.get('github_token') ) binary_transparency_remote = config.get('binary_transparency_remote') if binary_transparency_remote: push_binary_transparency(BINARY_TRANSPARENCY_DIR, binary_transparency_remote) common.write_status_json(common.setup_status_output(start_timestamp)) sys.exit(0) if __name__ == "__main__": main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742486863.0 fdroidserver-2.4.0/fdroidserver/exception.py0000644000175000017500000000226214767036517020007 0ustar00hanshansclass FDroidException(Exception): def __init__(self, value=None, detail=None): super().__init__() self.value = value self.detail = detail def shortened_detail(self): if len(self.detail) < 16000: return self.detail return '[...]\n' + self.detail[-16000:] def __str__(self): if self.value is None: ret = __name__ else: ret = str(self.value) if self.detail: ret += ( "\n==== detail begin ====\n%s\n==== detail end ====" % ''.join(self.detail).strip() ) return ret class MetaDataException(Exception): def __init__(self, value): super().__init__() self.value = value def __str__(self): return self.value class VCSException(FDroidException): pass class NoSubmodulesException(VCSException): pass class BuildException(FDroidException): pass class VerificationException(FDroidException): pass class ConfigurationException(FDroidException): def __init__(self, value=None, detail=None): super().__init__() self.value = value self.detail = detail ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742486863.0 fdroidserver-2.4.0/fdroidserver/github.py0000644000175000017500000001526014767036517017275 0ustar00hanshans#!/usr/bin/env python3 # # github.py - part of the FDroid server tools # Copyright (C) 2024, Michael Pöhn, michael@poehn.at # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import json import pathlib import urllib.request import urllib.parse class GithubApi: """Wrapper for some select calls to GitHub Json/REST API. This class wraps some calls to api.github.com. This is not intended to be a general API wrapper. Instead it's purpose is to return pre-filtered and transformed data that's playing well with other fdroidserver functions. With the GitHub API, the token is optional, but it has pretty severe rate limiting. """ def __init__(self, api_token, repo_path): self._api_token = api_token if repo_path.startswith("https://github.com/"): self._repo_path = repo_path[19:] else: self._repo_path = repo_path def _req(self, url, data=None): h = { "Accept": "application/vnd.github+json", "X-GitHub-Api-Version": "2022-11-28", } if self._api_token: h["Authorization"] = f"Bearer {self._api_token}" return urllib.request.Request( url, headers=h, data=data, ) def list_released_tags(self): """List of all tags that are associated with a release for this repo on GitHub.""" names = [] req = self._req(f"https://api.github.com/repos/{self._repo_path}/releases") with urllib.request.urlopen(req) as resp: # nosec CWE-22 disable bandit warning releases = json.load(resp) for release in releases: names.append(release['tag_name']) return names def list_unreleased_tags(self): all_tags = self.list_all_tags() released_tags = self.list_released_tags() return [x for x in all_tags if x not in released_tags] def get_latest_apk(self): req = self._req( f"https://api.github.com/repos/{self._repo_path}/releases/latest" ) with urllib.request.urlopen(req) as resp: # nosec CWE-22 disable bandit warning assets = json.load(resp)['assets'] for asset in assets: url = asset.get('browser_download_url') if url and url.endswith('.apk'): return url def tag_exists(self, tag): """ Check if git tag is present on github. https://docs.github.com/en/rest/git/refs?apiVersion=2022-11-28#list-matching-references--fine-grained-access-tokens """ req = self._req( f"https://api.github.com/repos/{self._repo_path}/git/matching-refs/tags/{tag}" ) with urllib.request.urlopen(req) as resp: # nosec CWE-22 disable bandit warning rd = json.load(resp) return len(rd) == 1 and rd[0].get("ref", False) == f"refs/tags/{tag}" return False def list_all_tags(self): """Get list of all tags for this repo on GitHub.""" tags = [] req = self._req( f"https://api.github.com/repos/{self._repo_path}/git/matching-refs/tags/" ) with urllib.request.urlopen(req) as resp: # nosec CWE-22 disable bandit warning refs = json.load(resp) for ref in refs: r = ref.get('ref', '') if r.startswith('refs/tags/'): tags.append(r[10:]) return tags def create_release(self, tag, files, body=''): """ Create a new release on github. also see: https://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28#create-a-release :returns: True if release was created, False if release already exists :raises: urllib exceptions in case of network or api errors, also raises an exception when the tag doesn't exists. """ # Querying github to create a new release for a non-existent tag, will # also create that tag on github. So we need an additional check to # prevent this behavior. if not self.tag_exists(tag): raise Exception( f"can't create github release for {self._repo_path} {tag}, tag doesn't exists" ) # create the relase on github req = self._req( f"https://api.github.com/repos/{self._repo_path}/releases", data=json.dumps( { "tag_name": tag, "body": body, } ).encode("utf-8"), ) try: with urllib.request.urlopen( # nosec CWE-22 disable bandit warning req ) as resp: release_id = json.load(resp)['id'] except urllib.error.HTTPError as e: if e.status == 422: codes = [x['code'] for x in json.load(e).get('errors', [])] if "already_exists" in codes: return False raise e # attach / upload all files for the relase for file in files: self._create_release_asset(release_id, file) return True def _create_release_asset(self, release_id, file): """ Attach a file to a release on GitHub. This uploads a file to github relases, it will be attached to the supplied release also see: https://docs.github.com/en/rest/releases/assets?apiVersion=2022-11-28#upload-a-release-asset """ file = pathlib.Path(file) with open(file, 'rb') as f: req = urllib.request.Request( f"https://uploads.github.com/repos/{self._repo_path}/releases/{release_id}/assets?name={file.name}", headers={ "Accept": "application/vnd.github+json", "Authorization": f"Bearer {self._api_token}", "X-GitHub-Api-Version": "2022-11-28", "Content-Type": "application/octet-stream", }, data=f.read(), ) with urllib.request.urlopen(req): # nosec CWE-22 disable bandit warning return True return False ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742486863.0 fdroidserver-2.4.0/fdroidserver/gpgsign.py0000644000175000017500000000550614767036517017453 0ustar00hanshans#!/usr/bin/env python3 # # gpgsign.py - part of the FDroid server tools # Copyright (C) 2014, Ciaran Gultnieks, ciaran@ciarang.com # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import os import glob from argparse import ArgumentParser import logging import time from . import _ from . import common from .common import FDroidPopen from .exception import FDroidException config = None start_timestamp = time.gmtime() def status_update_json(signed): """Output a JSON file with metadata about this run.""" logging.debug(_('Outputting JSON')) output = common.setup_status_output(start_timestamp) if signed: output['signed'] = signed common.write_status_json(output) def main(): global config # Parse command line... parser = ArgumentParser() common.setup_global_opts(parser) common.parse_args(parser) config = common.read_config() repodirs = ['repo'] if config['archive_older'] != 0: repodirs.append('archive') signed = [] for output_dir in repodirs: if not os.path.isdir(output_dir): raise FDroidException( _("Missing output directory") + " '" + output_dir + "'" ) # Process any apks that are waiting to be signed... for f in sorted(glob.glob(os.path.join(output_dir, '*.*'))): if not common.is_repo_file(f, for_gpg_signing=True): continue filename = os.path.basename(f) sigfilename = filename + ".asc" sigpath = os.path.join(output_dir, sigfilename) if not os.path.exists(sigpath): gpgargs = ['gpg', '-a', '--output', sigpath, '--detach-sig'] if 'gpghome' in config: gpgargs.extend(['--homedir', config['gpghome']]) if 'gpgkey' in config: gpgargs.extend(['--local-user', config['gpgkey']]) gpgargs.append(os.path.join(output_dir, filename)) p = FDroidPopen(gpgargs) if p.returncode != 0: raise FDroidException("Signing failed.") signed.append(filename) logging.info('Signed ' + filename) status_update_json(signed) if __name__ == "__main__": main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742486863.0 fdroidserver-2.4.0/fdroidserver/import_subcommand.py0000644000175000017500000003707014767036517021540 0ustar00hanshans#!/usr/bin/env python3 """Extract application metadata from a source repository.""" # # import_subcommand.py - part of the FDroid server tools # Copyright (C) 2010-13, Ciaran Gultnieks, ciaran@ciarang.com # Copyright (C) 2013-2014 Daniel Martí # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import json import logging import os import re import shutil import stat import sys import urllib from argparse import ArgumentParser from pathlib import Path from typing import Optional import git import yaml try: from yaml import CSafeLoader as SafeLoader except ImportError: from yaml import SafeLoader from . import _, common, metadata from .exception import FDroidException config = None SETTINGS_GRADLE_REGEX = re.compile(r'settings\.gradle(?:\.kts)?') GRADLE_SUBPROJECT_REGEX = re.compile(r'''['"]:?([^'"]+)['"]''') APPLICATION_ID_REGEX = re.compile(r'''\s*applicationId\s=?\s?['"].*['"]''') def get_all_gradle_and_manifests(build_dir): paths = [] for root, dirs, files in os.walk(build_dir): for f in sorted(files): if f == 'AndroidManifest.xml' or f.endswith(('.gradle', '.gradle.kts')): full = Path(root) / f paths.append(full) return paths def get_gradle_subdir(build_dir, paths): """Get the subdir where the gradle build is based.""" first_gradle_dir = None for path in paths: if not first_gradle_dir: first_gradle_dir = path.parent.relative_to(build_dir) if path.exists() and SETTINGS_GRADLE_REGEX.match(path.name): for m in GRADLE_SUBPROJECT_REGEX.finditer(path.read_text(encoding='utf-8')): for f in (path.parent / m.group(1)).glob('build.gradle*'): with f.open(encoding='utf-8') as fp: for line in fp: if common.ANDROID_PLUGIN_REGEX.match( line ) or APPLICATION_ID_REGEX.match(line): return f.parent.relative_to(build_dir) if first_gradle_dir and first_gradle_dir != Path('.'): return first_gradle_dir def handle_retree_error_on_windows(function, path, excinfo): """Python can't remove a readonly file on Windows so chmod first.""" if function in (os.unlink, os.rmdir, os.remove) and excinfo[0] == PermissionError: os.chmod(path, stat.S_IWRITE) function(path) def clone_to_tmp_dir(app: metadata.App, rev=None) -> Path: """Clone the source repository of an app to a temporary directory for further processing. Parameters ---------- app The App instance to clone the source of. Returns ------- tmp_dir The (temporary) directory the apps source has been cloned into. """ tmp_dir = Path('tmp') tmp_dir.mkdir(exist_ok=True) tmp_dir = tmp_dir / 'importer' if tmp_dir.exists(): shutil.rmtree(str(tmp_dir), onerror=handle_retree_error_on_windows) vcs = common.getvcs(app.RepoType, app.Repo, tmp_dir) vcs.gotorevision(rev) return tmp_dir def getrepofrompage(url: str) -> tuple[Optional[str], str]: """Get the repo type and address from the given web page. The page is scanned in a rather naive manner for 'git clone xxxx', 'hg clone xxxx', etc, and when one of these is found it's assumed that's the information we want. Returns repotype, address, or None, reason Parameters ---------- url The url to look for repository information at. Returns ------- repotype_or_none The found repository type or None if an error occured. address_or_reason The address to the found repository or the reason if an error occured. """ if not url.startswith('http'): return (None, _('{url} does not start with "http"!'.format(url=url))) req = urllib.request.urlopen(url) # nosec B310 non-http URLs are filtered out if req.getcode() != 200: return (None, 'Unable to get ' + url + ' - return code ' + str(req.getcode())) page = req.read().decode(req.headers.get_content_charset()) # Works for BitBucket m = re.search('data-fetch-url="(.*)"', page) if m is not None: repo = m.group(1) if repo.endswith('.git'): return ('git', repo) return ('hg', repo) # Works for BitBucket (obsolete) index = page.find('hg clone') if index != -1: repotype = 'hg' repo = page[index + 9 :] index = repo.find('<') if index == -1: return (None, _("Error while getting repo address")) repo = repo[:index] repo = repo.split('"')[0] return (repotype, repo) # Works for BitBucket (obsolete) index = page.find('git clone') if index != -1: repotype = 'git' repo = page[index + 10 :] index = repo.find('<') if index == -1: return (None, _("Error while getting repo address")) repo = repo[:index] repo = repo.split('"')[0] return (repotype, repo) return (None, _("No information found.") + page) def get_app_from_url(url: str) -> metadata.App: """Guess basic app metadata from the URL. The URL must include a network hostname, unless it is an lp:, file:, or git/ssh URL. This throws ValueError on bad URLs to match urlparse(). Parameters ---------- url The URL to look to look for app metadata at. Returns ------- app App instance with the found metadata. Raises ------ :exc:`~fdroidserver.exception.FDroidException` If the VCS type could not be determined. :exc:`ValueError` If the URL is invalid. """ parsed = urllib.parse.urlparse(url) invalid_url = False if not parsed.scheme or not parsed.path: invalid_url = True app = metadata.App() app.Repo = url if url.startswith('git://') or url.startswith('git@'): app.RepoType = 'git' elif parsed.netloc == 'github.com': app.RepoType = 'git' app.SourceCode = url app.IssueTracker = url + '/issues' elif parsed.netloc in ('gitlab.com', 'framagit.org'): # git can be fussy with gitlab URLs unless they end in .git if url.endswith('.git'): url = url[:-4] app.Repo = url + '.git' app.RepoType = 'git' app.SourceCode = url app.IssueTracker = url + '/issues' elif parsed.netloc == 'notabug.org': if url.endswith('.git'): url = url[:-4] app.Repo = url + '.git' app.RepoType = 'git' app.SourceCode = url app.IssueTracker = url + '/issues' elif parsed.netloc == 'bitbucket.org': if url.endswith('/'): url = url[:-1] app.SourceCode = url + '/src' app.IssueTracker = url + '/issues' # Figure out the repo type and adddress... app.RepoType, app.Repo = getrepofrompage(url) elif parsed.netloc == 'codeberg.org': app.RepoType = 'git' app.SourceCode = url app.IssueTracker = url + '/issues' elif url.startswith('https://') and url.endswith('.git'): app.RepoType = 'git' if not parsed.netloc and parsed.scheme in ('git', 'http', 'https', 'ssh'): invalid_url = True if invalid_url: raise ValueError(_('"{url}" is not a valid URL!'.format(url=url))) if not app.RepoType: raise FDroidException("Unable to determine vcs type. " + app.Repo) return app def main(): """Extract app metadata and write it to a file. The behaviour of this function is influenced by the configuration file as well as command line parameters. Raises ------ :exc:`~fdroidserver.exception.FDroidException` If the repository already has local metadata, no URL is specified and the current directory is not a Git repository, no application ID could be found, no Gradle project could be found or there is already metadata for the found application ID. """ global config # Parse command line... parser = ArgumentParser() common.setup_global_opts(parser) parser.add_argument("-u", "--url", help=_("Project URL to import from.")) parser.add_argument( "-s", "--subdir", help=_("Path to main Android project subdirectory, if not in root."), ) parser.add_argument( "-c", "--categories", help=_("Comma separated list of categories."), ) parser.add_argument("-l", "--license", help=_("Overall license of the project.")) parser.add_argument( "--omit-disable", action="store_true", help=_("Do not add 'disable:' to the generated build entries"), ) parser.add_argument( "--rev", help=_( "Allows a different revision (or git branch) to be specified for the initial import" ), ) metadata.add_metadata_arguments(parser) options = common.parse_args(parser) metadata.warnings_action = options.W config = common.read_config() apps = metadata.read_metadata() app = None tmp_importer_dir = None local_metadata_files = common.get_local_metadata_files() if local_metadata_files: raise FDroidException( _("This repo already has local metadata: %s") % local_metadata_files[0] ) build = metadata.Build() app = metadata.App() if options.url is None and Path('.git').is_dir(): app.RepoType = 'git' tmp_importer_dir = Path.cwd() git_repo = git.Repo(tmp_importer_dir) for remote in git.Remote.iter_items(git_repo): if remote.name == 'origin': url = git_repo.remotes.origin.url app = get_app_from_url(url) break write_local_file = True elif options.url: app = get_app_from_url(options.url) tmp_importer_dir = clone_to_tmp_dir(app, options.rev) git_repo = git.Repo(tmp_importer_dir) if not options.omit_disable: build.disable = ( 'Generated by `fdroid import` - check version fields and commitid' ) write_local_file = False else: raise FDroidException("Specify project url.") app.AutoUpdateMode = 'Version' app.UpdateCheckMode = 'Tags' build.commit = common.get_head_commit_id(git_repo) # Extract some information... paths = get_all_gradle_and_manifests(tmp_importer_dir) gradle_subdir = get_gradle_subdir(tmp_importer_dir, paths) if paths: versionName, versionCode, appid = common.parse_androidmanifests(paths, app) if not appid: raise FDroidException(_("Couldn't find Application ID")) if not versionName: logging.warning(_('Could not find latest version name')) if not versionCode: logging.warning(_('Could not find latest version code')) else: raise FDroidException(_("No gradle project could be found. Specify --subdir?")) # Make sure it's actually new... if appid in apps: raise FDroidException(_('Package "{appid}" already exists').format(appid=appid)) # Create a build line... build.versionName = versionName or 'Unknown' app.CurrentVersion = build.versionName build.versionCode = versionCode or 0 app.CurrentVersionCode = build.versionCode if options.subdir: build.subdir = options.subdir elif gradle_subdir: build.subdir = gradle_subdir.as_posix() # subdir might be None subdir = Path(tmp_importer_dir / build.subdir) if build.subdir else tmp_importer_dir if options.license: app.License = options.license if options.categories: app.Categories = options.categories.split(',') if (subdir / 'jni').exists(): build.buildjni = ['yes'] if (subdir / 'build.gradle').exists() or (subdir / 'build.gradle.kts').exists(): build.gradle = ['yes'] app.AutoName = common.fetch_real_name(subdir, build.gradle) package_json = tmp_importer_dir / 'package.json' # react-native pubspec_yaml = tmp_importer_dir / 'pubspec.yaml' # flutter if package_json.exists(): build.sudo = [ 'sysctl fs.inotify.max_user_watches=524288 || true', 'apt-get update', 'apt-get install -y npm', ] build.init = ['npm install --build-from-source'] with package_json.open() as fp: data = json.load(fp) app.AutoName = app.AutoName or data.get('name') app.License = data.get('license', app.License) app.Description = data.get('description', app.Description) app.WebSite = data.get('homepage', app.WebSite) app_json = tmp_importer_dir / 'app.json' build.scanignore = ['android/build.gradle'] build.scandelete = ['node_modules'] if app_json.exists(): with app_json.open() as fp: data = json.load(fp) app.AutoName = app.AutoName or data.get('name') if pubspec_yaml.exists(): with pubspec_yaml.open() as fp: data = yaml.load(fp, Loader=SafeLoader) app.AutoName = app.AutoName or data.get('name') app.License = data.get('license', app.License) app.Description = data.get('description', app.Description) app.UpdateCheckData = 'pubspec.yaml|version:\\s.+\\+(\\d+)|.|version:\\s(.+)\\+' build.srclibs = ['flutter@stable'] build.output = 'build/app/outputs/flutter-apk/app-release.apk' build.subdir = None build.gradle = None build.prebuild = [ 'export PUB_CACHE=$(pwd)/.pub-cache', '$$flutter$$/bin/flutter config --no-analytics', '$$flutter$$/bin/flutter packages pub get', ] build.scandelete = [ '.pub-cache', ] build.build = [ 'export PUB_CACHE=$(pwd)/.pub-cache', '$$flutter$$/bin/flutter build apk', ] git_modules = tmp_importer_dir / '.gitmodules' if git_modules.exists(): build.submodules = True metadata.post_parse_yaml_metadata(app) app['Builds'].append(build) if write_local_file: metadata.write_metadata(Path('.fdroid.yml'), app) else: # Keep the repo directory to save bandwidth... Path('build').mkdir(exist_ok=True) build_dir = Path('build') / appid if build_dir.exists(): logging.warning( _('{path} already exists, ignoring import results!').format( path=build_dir ) ) sys.exit(1) elif tmp_importer_dir: # For Windows: Close the repo or a git.exe instance holds handles to repo try: git_repo.close() except AttributeError: # Debian/stretch's version does not have close() pass shutil.move(tmp_importer_dir, build_dir) Path('build/.fdroidvcs-' + appid).write_text(app.RepoType + ' ' + app.Repo) metadatapath = Path('metadata') / (appid + '.yml') metadata.write_metadata(metadatapath, app) logging.info("Wrote " + str(metadatapath)) if __name__ == "__main__": main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/fdroidserver/index.py0000644000175000017500000021357514770502071017116 0ustar00hanshans#!/usr/bin/env python3 # # update.py - part of the FDroid server tools # Copyright (C) 2017, Torsten Grote # Copyright (C) 2016, Blue Jay Wireless # Copyright (C) 2014-2016, Hans-Christoph Steiner # Copyright (C) 2010-2015, Ciaran Gultnieks # Copyright (C) 2013-2014, Daniel Martí # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . """Process the index files. This module is loaded by all fdroid subcommands since it is loaded in fdroidserver/__init__.py. Any narrowly used dependencies should be imported where they are used to limit dependencies for subcommands like publish/signindex/gpgsign. This eliminates the need to have these installed on the signing server. """ import collections import hashlib import json import logging import os import re import shutil import sys import tempfile import urllib.parse import zipfile import calendar from binascii import hexlify, unhexlify from datetime import datetime, timezone from pathlib import Path from xml.dom.minidom import Document from . import _ from . import common from . import metadata from . import signindex from fdroidserver.common import ANTIFEATURES_CONFIG_NAME, CATEGORIES_CONFIG_NAME, CONFIG_CONFIG_NAME, MIRRORS_CONFIG_NAME, RELEASECHANNELS_CONFIG_NAME, DEFAULT_LOCALE, FDroidPopen, FDroidPopenBytes, load_publish_signer_fingerprints from fdroidserver._yaml import yaml from fdroidserver.exception import FDroidException, VerificationException def make(apps, apks, repodir, archive): """Generate the repo index files. This requires properly initialized options and config objects. Parameters ---------- apps OrderedDict of apps to go into the index, each app should have at least one associated apk apks list of apks to go into the index repodir the repo directory archive True if this is the archive repo, False if it's the main one. """ from fdroidserver.update import METADATA_VERSION if not hasattr(common.options, 'nosign') or not common.options.nosign: common.assert_config_keystore(common.config) # Historically the index has been sorted by App Name, so we enforce this ordering here sortedids = sorted(apps, key=lambda appid: common.get_app_display_name(apps[appid]).upper()) sortedapps = collections.OrderedDict() for appid in sortedids: sortedapps[appid] = apps[appid] repodict = collections.OrderedDict() repodict['timestamp'] = datetime.now(timezone.utc) repodict['version'] = METADATA_VERSION if common.config['repo_maxage'] != 0: repodict['maxage'] = common.config['repo_maxage'] if archive: repodict['name'] = common.config['archive_name'] repodict['icon'] = common.config.get('archive_icon', common.default_config['repo_icon']) repodict['description'] = common.config['archive_description'] archive_url = common.config.get('archive_url', common.config['repo_url'][:-4] + 'archive') repodict['address'] = archive_url if 'archive_web_base_url' in common.config: repodict["webBaseUrl"] = common.config['archive_web_base_url'] repo_section = os.path.basename(urllib.parse.urlparse(archive_url).path) else: repodict['name'] = common.config['repo_name'] repodict['icon'] = common.config.get('repo_icon', common.default_config['repo_icon']) repodict['address'] = common.config['repo_url'] if 'repo_web_base_url' in common.config: repodict["webBaseUrl"] = common.config['repo_web_base_url'] repodict['description'] = common.config['repo_description'] repo_section = os.path.basename(urllib.parse.urlparse(common.config['repo_url']).path) add_mirrors_to_repodict(repo_section, repodict) requestsdict = collections.OrderedDict() for command in ('install', 'uninstall'): packageNames = [] key = command + '_list' if key in common.config: if isinstance(common.config[key], str): packageNames = [common.config[key]] elif all(isinstance(item, str) for item in common.config[key]): packageNames = common.config[key] else: raise TypeError(_('only accepts strings, lists, and tuples')) requestsdict[command] = packageNames signer_fingerprints = load_publish_signer_fingerprints() make_v0(sortedapps, apks, repodir, repodict, requestsdict, signer_fingerprints) make_v1(sortedapps, apks, repodir, repodict, requestsdict, signer_fingerprints) make_v2( sortedapps, apks, repodir, repodict, requestsdict, signer_fingerprints, archive ) make_website(sortedapps, repodir, repodict) make_altstore( sortedapps, apks, common.config, repodir, pretty=common.options.pretty, ) def _should_file_be_generated(path, magic_string): if os.path.exists(path): with open(path) as f: # if the magic_string is not in the first line the file should be overwritten if magic_string not in f.readline(): return False return True def make_website(apps, repodir, repodict): _ignored, repo_pubkey_fingerprint = extract_pubkey() repo_pubkey_fingerprint_stripped = repo_pubkey_fingerprint.replace(" ", "") link = repodict["address"] link_fingerprinted = ('{link}?fingerprint={fingerprint}' .format(link=link, fingerprint=repo_pubkey_fingerprint_stripped)) # do not change this string, as it will break updates for files with older versions of this string autogenerate_comment = "auto-generated - fdroid index updates will overwrite this file" if not os.path.exists(repodir): os.makedirs(repodir) html_name = 'index.html' html_file = os.path.join(repodir, html_name) if _should_file_be_generated(html_file, autogenerate_comment): import qrcode qrcode.make(link_fingerprinted).save(os.path.join(repodir, "index.png")) with open(html_file, 'w') as f: name = repodict["name"] description = repodict["description"] icon = repodict["icon"] f.write(""" {name}

{name}

QR: test {description}

Currently it serves {number_of_apps} apps. To add it to your F-Droid app, scan the QR code (click it to enlarge) or use this link:

{link}

If you would like to manually verify the fingerprint (SHA-256) of the repository signing key, here it is:
{fingerprint}

""".format(autogenerate_comment=autogenerate_comment, description=description, fingerprint=repo_pubkey_fingerprint, icon=icon, link=link, link_fingerprinted=link_fingerprinted, name=name, number_of_apps=str(len(apps)))) css_file = os.path.join(repodir, "index.css") if _should_file_be_generated(css_file, autogenerate_comment): with open(css_file, "w") as f: # this auto generated comment was not included via .format(), as python seems to have problems with css files in combination with .format() f.write("""/* auto-generated - fdroid index updates will overwrite this file */ BODY { font-family : Arial, Helvetica, Sans-Serif; color : #0000ee; background-color : #ffffff; } p { text-align : justify; } p.center { text-align : center; } TD { font-family : Arial, Helvetica, Sans-Serif; color : #0000ee; } body,td { font-size : 14px; } TH { font-family : Arial, Helvetica, Sans-Serif; color : #0000ee; background-color : #F5EAD4; } a:link { color : #bb0000; } a:visited { color : #ff0000; } .zitat { margin-left : 1cm; margin-right : 1cm; font-style : italic; } #intro { border-spacing : 1em; border : 1px solid gray; border-radius : 0.5em; box-shadow : 10px 10px 5px #888; margin : 1.5em; font-size : .9em; width : 600px; max-width : 90%; display : table; margin-left : auto; margin-right : auto; font-size : .8em; color : #555555; } #intro > p { margin-top : 0; } #intro p:last-child { margin-bottom : 0; } .last { border-bottom : 1px solid black; padding-bottom : .5em; text-align : center; } table { border-collapse : collapse; } h2 { text-align : center; } .perms { font-family : monospace; font-size : .8em; } .repoapplist { display : table; border-collapse : collapse; margin-left : auto; margin-right : auto; width : 600px; max-width : 90%; } .approw, appdetailrow { display : table-row; } .appdetailrow { display : flex; padding : .5em; } .appiconbig, .appdetailblock, .appdetailcell { display : table-cell } .appiconbig { vertical-align : middle; text-align : center; } .appdetailinner { width : 100%; } .applinkcell { text-align : center; float : right; width : 100%; margin-bottom : .1em; } .paddedlink { margin : 1em; } .approw { border-spacing : 1em; border : 1px solid gray; border-radius : 0.5em; padding : 0.5em; margin : 1.5em; } .appdetailinner .appdetailrow:first-child { background-color : #d5d5d5; } .appdetailinner .appdetailrow:first-child .appdetailcell { min-width : 33%; flex : 1 33%; text-align : center; } .appdetailinner .appdetailrow:first-child .appdetailcell:first-child { text-align : left; } .appdetailinner .appdetailrow:first-child .appdetailcell:last-child { float : none; text-align : right; } .minor-details { font-size : .8em; color : #555555; } .boldname { font-weight : bold; } #appcount { text-align : center; margin-bottom : .5em; } kbd { padding : 0.1em 0.6em; border : 1px solid #CCC; background-color : #F7F7F7; color : #333; box-shadow : 0px 1px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 2px #FFF inset; border-radius : 3px; display : inline-block; margin : 0px 0.1em; text-shadow : 0px 1px 0px #FFF; white-space : nowrap; } div.filterline, div.repoline { display : table; margin-left : auto; margin-right : auto; margin-bottom : 1em; vertical-align : middle; display : table; font-size : .8em; } .filterline form { display : table-row; } .filterline .filtercell { display : table-cell; vertical-align : middle; } fieldset { float : left; } fieldset select, fieldset input, #reposelect select, #reposelect input { font-size : .9em; } .pager { display : table; margin-left : auto; margin-right : auto; width : 600px; max-width : 90%; padding-top : .6em; } /* should correspond to .repoapplist */ .pagerrow { display : table-row; } .pagercell { display : table-cell; } .pagercell.left { text-align : left; padding-right : 1em; } .pagercell.middle { text-align : center; font-size : .9em; color : #555; } .pagercell.right { text-align : right; padding-left : 1em; } .anti { color : peru; } .antibold { color : crimson; } #footer { text-align : center; margin-top : 1em; font-size : 11px; color : #555; } #footer img { vertical-align : middle; } @media (max-width: 600px) { .repoapplist { display : block; } .appdetailinner, .appdetailrow { display : block; } .appdetailcell { display : block; float : left; line-height : 1.5em; } }""") def dict_diff(source, target): if not isinstance(target, dict) or not isinstance(source, dict): return target result = {key: None for key in source if key not in target} for key, value in target.items(): if key not in source: result[key] = value elif value != source[key]: result[key] = dict_diff(source[key], value) return result def convert_datetime(obj): if isinstance(obj, datetime): # Java prefers milliseconds # we also need to account for time zone/daylight saving time return int(calendar.timegm(obj.timetuple()) * 1000) return obj def package_metadata(app, repodir): meta = {} for element in ( "added", # "binaries", "Categories", "Changelog", "IssueTracker", "lastUpdated", "License", "SourceCode", "Translation", "WebSite", "featureGraphic", "promoGraphic", "tvBanner", "screenshots", "AuthorEmail", "AuthorName", "AuthorPhone", "AuthorWebSite", "Bitcoin", "Liberapay", "Litecoin", "OpenCollective", ): if element in app and app[element]: element_new = element[:1].lower() + element[1:] meta[element_new] = convert_datetime(app[element]) for element in ( "Name", "Summary", "Description", "video", ): element_new = element[:1].lower() + element[1:] if element in app and app[element]: meta[element_new] = {DEFAULT_LOCALE: convert_datetime(app[element])} elif "localized" in app: localized = {k: v[element_new] for k, v in app["localized"].items() if element_new in v} if localized: meta[element_new] = localized if "name" not in meta and app["AutoName"]: meta["name"] = {DEFAULT_LOCALE: app["AutoName"]} # fdroidserver/metadata.py App default if meta["license"] == "Unknown": del meta["license"] if app["Donate"]: meta["donate"] = [app["Donate"]] # TODO handle different resolutions if app.get("icon"): icon_path = os.path.join(repodir, "icons", app["icon"]) meta["icon"] = {DEFAULT_LOCALE: common.file_entry(icon_path)} if "iconv2" in app: meta["icon"] = app["iconv2"] return meta def convert_version(version, app, repodir): """Convert the internal representation of Builds: into index-v2 versions. The diff algorithm of index-v2 uses null/None to mean a field to be removed, so this function handles any Nones that are in the metadata file. """ ver = {} if "added" in version: ver["added"] = convert_datetime(version["added"]) else: ver["added"] = 0 ver["file"] = { "name": "/{}".format(version["apkName"]), version["hashType"]: version["hash"], "size": version["size"], } ipfsCIDv1 = version.get("ipfsCIDv1") if ipfsCIDv1: ver["file"]["ipfsCIDv1"] = ipfsCIDv1 if "srcname" in version: ver["src"] = common.file_entry(os.path.join(repodir, version["srcname"])) if "obbMainFile" in version: ver["obbMainFile"] = common.file_entry( os.path.join(repodir, version["obbMainFile"]), version["obbMainFileSha256"], ) if "obbPatchFile" in version: ver["obbPatchFile"] = common.file_entry( os.path.join(repodir, version["obbPatchFile"]), version["obbPatchFileSha256"], ) ver["manifest"] = manifest = {} for element in ( "nativecode", "versionName", "maxSdkVersion", ): if element in version: manifest[element] = version[element] if "versionCode" in version: manifest["versionCode"] = version["versionCode"] if "features" in version and version["features"]: manifest["features"] = features = [] for feature in version["features"]: # TODO get version from manifest, default (0) is omitted # features.append({"name": feature, "version": 1}) features.append({"name": feature}) if "minSdkVersion" in version: manifest["usesSdk"] = {} manifest["usesSdk"]["minSdkVersion"] = version["minSdkVersion"] if "targetSdkVersion" in version: manifest["usesSdk"]["targetSdkVersion"] = version["targetSdkVersion"] else: # https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#target manifest["usesSdk"]["targetSdkVersion"] = manifest["usesSdk"]["minSdkVersion"] if "signer" in version: manifest["signer"] = {"sha256": [version["signer"]]} for element in ("uses-permission", "uses-permission-sdk-23"): en = element.replace("uses-permission", "usesPermission").replace("-sdk-23", "Sdk23") if element in version and version[element]: manifest[en] = [] for perm in version[element]: if perm[1]: manifest[en].append({"name": perm[0], "maxSdkVersion": perm[1]}) else: manifest[en].append({"name": perm[0]}) # index-v2 has only per-version antifeatures, not per package. antiFeatures = app.get('AntiFeatures', {}).copy() for name, descdict in version.get('antiFeatures', dict()).items(): antiFeatures[name] = descdict if antiFeatures: ver['antiFeatures'] = { k: dict(sorted(antiFeatures[k].items())) for k in sorted(antiFeatures) } if "versionCode" in version: if version["versionCode"] > app["CurrentVersionCode"]: ver[RELEASECHANNELS_CONFIG_NAME] = ["Beta"] builds = app.get("Builds", []) if len(builds) > 0 and version["versionCode"] == builds[-1]["versionCode"]: if "localized" in app: localized = {k: v["whatsNew"] for k, v in app["localized"].items() if "whatsNew" in v} if localized: ver["whatsNew"] = localized for build in builds: if build['versionCode'] == version['versionCode'] and "whatsNew" in build: ver["whatsNew"] = build["whatsNew"] break return ver def v2_repo(repodict, repodir, archive): repo = {} repo["name"] = {DEFAULT_LOCALE: repodict["name"]} repo["description"] = {DEFAULT_LOCALE: repodict["description"]} repo["icon"] = { DEFAULT_LOCALE: common.file_entry("%s/icons/%s" % (repodir, repodict["icon"])) } config = common.load_localized_config(CONFIG_CONFIG_NAME, repodir) if config: repo["name"] = config["archive" if archive else "repo"]["name"] repo["description"] = config["archive" if archive else "repo"]["description"] repo["icon"] = config["archive" if archive else "repo"]["icon"] repo["address"] = repodict["address"] if "mirrors" in repodict: repo["mirrors"] = repodict["mirrors"] if "webBaseUrl" in repodict: repo["webBaseUrl"] = repodict["webBaseUrl"] repo["timestamp"] = repodict["timestamp"] antiFeatures = common.load_localized_config(ANTIFEATURES_CONFIG_NAME, repodir) if antiFeatures: repo[ANTIFEATURES_CONFIG_NAME] = antiFeatures categories = common.load_localized_config(CATEGORIES_CONFIG_NAME, repodir) if categories: repo[CATEGORIES_CONFIG_NAME] = categories releaseChannels = common.load_localized_config(RELEASECHANNELS_CONFIG_NAME, repodir) if releaseChannels: repo[RELEASECHANNELS_CONFIG_NAME] = releaseChannels return repo def make_v2(apps, packages, repodir, repodict, requestsdict, signer_fingerprints, archive): def _index_encoder_default(obj): if isinstance(obj, set): return sorted(list(obj)) if isinstance(obj, datetime): # Java prefers milliseconds # we also need to account for time zone/daylight saving time return int(calendar.timegm(obj.timetuple()) * 1000) if isinstance(obj, dict): d = collections.OrderedDict() for key in sorted(obj.keys()): d[key] = obj[key] return d raise TypeError(repr(obj) + " is not JSON serializable") output = collections.OrderedDict() output["repo"] = v2_repo(repodict, repodir, archive) if requestsdict and (requestsdict["install"] or requestsdict["uninstall"]): output["repo"]["requests"] = requestsdict # establish sort order of the index sort_package_versions(packages, signer_fingerprints) output_packages = collections.OrderedDict() output['packages'] = output_packages categories_used_by_apps = set() for package in packages: packageName = package['packageName'] if packageName not in apps: logging.info(_('Ignoring package without metadata: ') + package['apkName']) continue if not package.get('versionName'): app = apps[packageName] for build in app.get('Builds', []): if build['versionCode'] == package['versionCode']: versionName = build.get('versionName') logging.info(_('Overriding blank versionName in {apkfilename} from metadata: {version}') .format(apkfilename=package['apkName'], version=versionName)) package['versionName'] = versionName break if packageName in output_packages: packagelist = output_packages[packageName] else: packagelist = {} output_packages[packageName] = packagelist app = apps[packageName] categories_used_by_apps.update(app.get('Categories', [])) packagelist["metadata"] = package_metadata(app, repodir) if "signer" in package: packagelist["metadata"]["preferredSigner"] = package["signer"] packagelist["versions"] = {} packagelist["versions"][package["hash"]] = convert_version(package, apps[packageName], repodir) if categories_used_by_apps and not output['repo'].get(CATEGORIES_CONFIG_NAME): output['repo'][CATEGORIES_CONFIG_NAME] = dict() # include definitions for "auto-defined" categories, e.g. just used in app metadata for category in sorted(categories_used_by_apps): if category not in output['repo'][CATEGORIES_CONFIG_NAME]: output['repo'][CATEGORIES_CONFIG_NAME][category] = {"name": {DEFAULT_LOCALE: category}} # do not include defined categories if no apps use them for category in list(output['repo'].get(CATEGORIES_CONFIG_NAME, list())): if category not in categories_used_by_apps: del output['repo'][CATEGORIES_CONFIG_NAME][category] msg = _('Category "{category}" defined but not used for any apps!') logging.warning(msg.format(category=category)) entry = {} entry["timestamp"] = repodict["timestamp"] entry["version"] = repodict["version"] if "maxage" in repodict: entry["maxAge"] = repodict["maxage"] json_name = 'index-v2.json' index_file = os.path.join(repodir, json_name) with open(index_file, "w", encoding="utf-8") as fp: if common.options.pretty: json.dump(output, fp, default=_index_encoder_default, indent=2, ensure_ascii=False) else: json.dump(output, fp, default=_index_encoder_default, ensure_ascii=False) json_name = "tmp/{}_{}.json".format(repodir, convert_datetime(repodict["timestamp"])) with open(json_name, "w", encoding="utf-8") as fp: if common.options.pretty: json.dump(output, fp, default=_index_encoder_default, indent=2, ensure_ascii=False) else: json.dump(output, fp, default=_index_encoder_default, ensure_ascii=False) entry["index"] = common.file_entry(index_file) entry["index"]["numPackages"] = len(output.get("packages", [])) indexes = sorted(Path().glob("tmp/{}*.json".format(repodir)), key=lambda x: x.name) indexes.pop() # remove current index # remove older indexes while len(indexes) > 10: indexes.pop(0).unlink() indexes = [json.loads(Path(fn).read_text(encoding="utf-8")) for fn in indexes] for diff in Path().glob("{}/diff/*.json".format(repodir)): diff.unlink() entry["diffs"] = {} for old in indexes: diff_name = str(old["repo"]["timestamp"]) + ".json" diff_file = os.path.join(repodir, "diff", diff_name) diff = dict_diff(old, output) if not os.path.exists(os.path.join(repodir, "diff")): os.makedirs(os.path.join(repodir, "diff")) with open(diff_file, "w", encoding="utf-8") as fp: if common.options.pretty: json.dump(diff, fp, default=_index_encoder_default, indent=2, ensure_ascii=False) else: json.dump(diff, fp, default=_index_encoder_default, ensure_ascii=False) entry["diffs"][old["repo"]["timestamp"]] = common.file_entry(diff_file) entry["diffs"][old["repo"]["timestamp"]]["numPackages"] = len(diff.get("packages", [])) json_name = "entry.json" index_file = os.path.join(repodir, json_name) with open(index_file, "w", encoding="utf-8") as fp: if common.options.pretty: json.dump(entry, fp, default=_index_encoder_default, indent=2, ensure_ascii=False) else: json.dump(entry, fp, default=_index_encoder_default, ensure_ascii=False) if common.options.nosign: _copy_to_local_copy_dir(repodir, index_file) logging.debug(_('index-v2 must have a signature, use `fdroid signindex` to create it!')) else: signindex.config = common.config signindex.sign_index(repodir, json_name) def make_v1(apps, packages, repodir, repodict, requestsdict, signer_fingerprints): def _index_encoder_default(obj): if isinstance(obj, set): return sorted(list(obj)) if isinstance(obj, datetime): # Java prefers milliseconds # we also need to account for time zone/daylight saving time return int(calendar.timegm(obj.timetuple()) * 1000) if isinstance(obj, dict): d = collections.OrderedDict() for key in sorted(obj.keys()): d[key] = obj[key] return d raise TypeError(repr(obj) + " is not JSON serializable") output = collections.OrderedDict() output['repo'] = repodict.copy() output['requests'] = requestsdict # index-v1 only supports a list of URL strings for additional mirrors mirrors = [] for mirror in repodict.get('mirrors', []): url = mirror['url'] if url != repodict['address']: mirrors.append(mirror['url']) if mirrors: output['repo']['mirrors'] = mirrors # establish sort order of the index sort_package_versions(packages, signer_fingerprints) appslist = [] output['apps'] = appslist for packageName, app_dict in apps.items(): d = collections.OrderedDict() appslist.append(d) for k, v in sorted(app_dict.items()): if not v: continue if k in ('Builds', 'metadatapath', 'ArchivePolicy', 'AutoName', 'AutoUpdateMode', 'MaintainerNotes', 'Provides', 'Repo', 'RepoType', 'RequiresRoot', 'UpdateCheckData', 'UpdateCheckIgnore', 'UpdateCheckMode', 'UpdateCheckName', 'NoSourceSince', 'VercodeOperation', 'summary', 'description', 'promoGraphic', 'screenshots', 'whatsNew', 'featureGraphic', 'iconv2', 'tvBanner', ): continue # name things after the App class fields in fdroidclient if k == 'id': k = 'packageName' elif k == 'CurrentVersionCode': # TODO make SuggestedVersionCode the canonical name k = 'suggestedVersionCode' v = str(v) elif k == 'CurrentVersion': # TODO make SuggestedVersionName the canonical name k = 'suggestedVersionName' else: k = k[:1].lower() + k[1:] d[k] = v # establish sort order in lists, sets, and localized dicts for app_dict in output['apps']: localized = app_dict.get('localized') if localized: lordered = collections.OrderedDict() for lkey, lvalue in sorted(localized.items()): lordered[lkey] = collections.OrderedDict() for ikey, iname in sorted(lvalue.items()): lordered[lkey][ikey] = iname app_dict['localized'] = lordered # v1 uses a list of keys for Anti-Features antiFeatures = app_dict.get('antiFeatures', dict()).keys() if antiFeatures: app_dict['antiFeatures'] = sorted(set(antiFeatures)) output_packages = collections.OrderedDict() output['packages'] = output_packages for package in packages: packageName = package['packageName'] if packageName not in apps: logging.info(_('Ignoring package without metadata: ') + package['apkName']) continue if not package.get('versionName'): app = apps[packageName] for build in app.get('Builds', []): if build['versionCode'] == package['versionCode']: versionName = build.get('versionName') logging.info(_('Overriding blank versionName in {apkfilename} from metadata: {version}') .format(apkfilename=package['apkName'], version=versionName)) package['versionName'] = versionName break if packageName in output_packages: packagelist = output_packages[packageName] else: packagelist = [] output_packages[packageName] = packagelist d = collections.OrderedDict() packagelist.append(d) for k, v in sorted(package.items()): if not v: continue if k in ('icon', 'icons', 'icons_src', 'ipfsCIDv1', 'name'): continue if k == 'antiFeatures': d[k] = sorted(v.keys()) continue d[k] = v json_name = 'index-v1.json' index_file = os.path.join(repodir, json_name) with open(index_file, 'w') as fp: if common.options.pretty: json.dump(output, fp, default=_index_encoder_default, indent=2) else: json.dump(output, fp, default=_index_encoder_default) if common.options.nosign: _copy_to_local_copy_dir(repodir, index_file) logging.debug(_('index-v1 must have a signature, use `fdroid signindex` to create it!')) else: signindex.config = common.config signindex.sign_index(repodir, json_name) def _copy_to_local_copy_dir(repodir, f): local_copy_dir = common.config.get('local_copy_dir', '') if os.path.exists(local_copy_dir): destdir = os.path.join(local_copy_dir, repodir) if not os.path.exists(destdir): os.mkdir(destdir) shutil.copy2(f, destdir, follow_symlinks=False) elif local_copy_dir: raise FDroidException(_('"local_copy_dir" {path} does not exist!') .format(path=local_copy_dir)) def sort_package_versions(packages, signer_fingerprints): """Sort to ensure a deterministic order for package versions in the index file. This sort-order also expresses installation preference to the clients. (First in this list = first to install) Parameters ---------- packages list of packages which need to be sorted before but into index file. """ GROUP_DEV_SIGNED = 1 GROUP_FDROID_SIGNED = 2 GROUP_OTHER_SIGNED = 3 def v1_sort_keys(package): packageName = package.get('packageName', None) signer = package.get('signer', None) dev_signer = common.metadata_find_developer_signature(packageName) group = GROUP_OTHER_SIGNED if dev_signer and dev_signer == signer: group = GROUP_DEV_SIGNED else: fdroid_signer = signer_fingerprints.get(packageName, {}).get('signer') if fdroid_signer and fdroid_signer == signer: group = GROUP_FDROID_SIGNED versionCode = None if package.get('versionCode', None): versionCode = -package['versionCode'] return packageName, group, signer, versionCode packages.sort(key=v1_sort_keys) def make_v0(apps, apks, repodir, repodict, requestsdict, signer_fingerprints): """Aka index.jar aka index.xml.""" doc = Document() def addElement(name, value, doc, parent): el = doc.createElement(name) el.appendChild(doc.createTextNode(value)) parent.appendChild(el) def addElementNonEmpty(name, value, doc, parent): if not value: return addElement(name, value, doc, parent) def addElementIfInApk(name, apk, key, doc, parent): if key not in apk: return value = str(apk[key]) addElement(name, value, doc, parent) def addElementCheckLocalized(name, app, key, doc, parent, default=''): """Fill in field from metadata or localized block. For name/summary/description, they can come only from the app source, or from a dir in fdroiddata. They can be entirely missing from the metadata file if there is localized versions. This will fetch those from the localized version if its not available in the metadata file. Attributes should be alpha-sorted, so they must be added in alpha- sort order. """ el = doc.createElement(name) value = app.get(key) lkey = key[:1].lower() + key[1:] localized = app.get('localized') if not value and localized: for lang in [DEFAULT_LOCALE] + [x for x in localized.keys()]: if not lang.startswith('en'): continue if lang in localized: value = localized[lang].get(lkey) if value: break if not value and localized and len(localized) > 1: lang = list(localized.keys())[0] value = localized[lang].get(lkey) if not value: value = default if not value and name == 'name' and app.get('AutoName'): value = app['AutoName'] el.appendChild(doc.createTextNode(value)) parent.appendChild(el) root = doc.createElement("fdroid") doc.appendChild(root) repoel = doc.createElement("repo") repoel.setAttribute("icon", repodict['icon']) if 'maxage' in repodict: repoel.setAttribute("maxage", str(repodict['maxage'])) repoel.setAttribute("name", repodict['name']) pubkey, repo_pubkey_fingerprint = extract_pubkey() repoel.setAttribute("pubkey", pubkey.decode('utf-8')) repoel.setAttribute("timestamp", '%d' % repodict['timestamp'].timestamp()) repoel.setAttribute("url", repodict['address']) repoel.setAttribute("version", str(repodict['version'])) addElement('description', repodict['description'], doc, repoel) # index v0 only supports a list of URL strings for additional mirrors for mirror in repodict.get('mirrors', []): url = mirror['url'] if url != repodict['address']: addElement('mirror', url, doc, repoel) root.appendChild(repoel) for command in ('install', 'uninstall'): for packageName in requestsdict[command]: element = doc.createElement(command) root.appendChild(element) element.setAttribute('packageName', packageName) for appid, app_dict in apps.items(): app = metadata.App(app_dict) if app.get('Disabled') is not None: continue # Get a list of the apks for this app... apklist = [] name_from_apk = None apksbyversion = collections.defaultdict(lambda: []) for apk in apks: if apk.get('versionCode') and apk.get('packageName') == appid: apksbyversion[apk['versionCode']].append(apk) if name_from_apk is None: name_from_apk = apk.get('name') for versionCode, apksforver in apksbyversion.items(): fdroid_signer = signer_fingerprints.get(appid, {}).get('signer') fdroid_signed_apk = None name_match_apk = None for x in apksforver: if fdroid_signer and x.get('signer', None) == fdroid_signer: fdroid_signed_apk = x if common.apk_release_filename.match(x.get('apkName', '')): name_match_apk = x # choose which of the available versions is most # suiteable for index v0 if fdroid_signed_apk: apklist.append(fdroid_signed_apk) elif name_match_apk: apklist.append(name_match_apk) else: apklist.append(apksforver[0]) if len(apklist) == 0: continue apel = doc.createElement("application") apel.setAttribute("id", app.id) root.appendChild(apel) addElement('id', app.id, doc, apel) if app.added: addElement('added', app.added.strftime('%Y-%m-%d'), doc, apel) if app.lastUpdated: addElement('lastupdated', app.lastUpdated.strftime('%Y-%m-%d'), doc, apel) addElementCheckLocalized('name', app, 'Name', doc, apel, name_from_apk) addElementCheckLocalized('summary', app, 'Summary', doc, apel) if app.icon: addElement('icon', app.icon, doc, apel) addElementCheckLocalized('desc', app, 'Description', doc, apel, 'No description available') addElement('license', app.License, doc, apel) if app.Categories: addElement('categories', ','.join(app.Categories), doc, apel) # We put the first (primary) category in LAST, which will have # the desired effect of making clients that only understand one # category see that one. addElement('category', app.Categories[0], doc, apel) addElement('web', app.WebSite, doc, apel) addElement('source', app.SourceCode, doc, apel) addElement('tracker', app.IssueTracker, doc, apel) addElementNonEmpty('changelog', app.Changelog, doc, apel) addElementNonEmpty('author', app.AuthorName, doc, apel) addElementNonEmpty('email', app.AuthorEmail, doc, apel) addElementNonEmpty('donate', app.Donate, doc, apel) addElementNonEmpty('bitcoin', app.Bitcoin, doc, apel) addElementNonEmpty('litecoin', app.Litecoin, doc, apel) addElementNonEmpty('openCollective', app.OpenCollective, doc, apel) # These elements actually refer to the current version (i.e. which # one is recommended. They are historically mis-named, and need # changing, but stay like this for now to support existing clients. addElement('marketversion', app.CurrentVersion, doc, apel) addElement('marketvercode', str(app.CurrentVersionCode), doc, apel) if app.Provides: pv = app.Provides.split(',') addElementNonEmpty('provides', ','.join(pv), doc, apel) if app.RequiresRoot: addElement('requirements', 'root', doc, apel) # Sort the APK list into version order, just so the web site # doesn't have to do any work by default... apklist = sorted(apklist, key=lambda apk: apk['versionCode'], reverse=True) antiFeatures = list(app.AntiFeatures) if 'antiFeatures' in apklist[0]: antiFeatures.extend(apklist[0]['antiFeatures']) if antiFeatures: afout = sorted(set(antiFeatures)) addElementNonEmpty('antifeatures', ','.join(afout), doc, apel) # Check for duplicates - they will make the client unhappy... for i in range(len(apklist) - 1): first = apklist[i] second = apklist[i + 1] if first['versionCode'] == second['versionCode'] \ and first['sig'] == second['sig']: if first['hash'] == second['hash']: raise FDroidException('"{0}/{1}" and "{0}/{2}" are exact duplicates!'.format( repodir, first['apkName'], second['apkName'])) else: raise FDroidException('duplicates: "{0}/{1}" - "{0}/{2}"'.format( repodir, first['apkName'], second['apkName'])) current_version_code = 0 current_version_file = None for apk in apklist: file_extension = common.get_file_extension(apk['apkName']) # find the APK for the "Current Version" if current_version_code < app.CurrentVersionCode: current_version_file = apk['apkName'] if current_version_code < apk['versionCode']: current_version_code = apk['versionCode'] apkel = doc.createElement("package") apel.appendChild(apkel) versionName = apk.get('versionName') if not versionName: for build in app.get('Builds', []): if ( build['versionCode'] == apk['versionCode'] and 'versionName' in build ): versionName = build['versionName'] break if versionName: addElement('version', versionName, doc, apkel) addElement('versioncode', str(apk['versionCode']), doc, apkel) addElement('apkname', apk['apkName'], doc, apkel) addElementIfInApk('srcname', apk, 'srcname', doc, apkel) hashel = doc.createElement("hash") hashel.setAttribute('type', 'sha256') hashel.appendChild(doc.createTextNode(apk['hash'])) apkel.appendChild(hashel) addElement('size', str(apk['size']), doc, apkel) addElementIfInApk('sdkver', apk, 'minSdkVersion', doc, apkel) addElementIfInApk('targetSdkVersion', apk, 'targetSdkVersion', doc, apkel) addElementIfInApk('maxsdkver', apk, 'maxSdkVersion', doc, apkel) addElementIfInApk('obbMainFile', apk, 'obbMainFile', doc, apkel) addElementIfInApk('obbMainFileSha256', apk, 'obbMainFileSha256', doc, apkel) addElementIfInApk('obbPatchFile', apk, 'obbPatchFile', doc, apkel) addElementIfInApk('obbPatchFileSha256', apk, 'obbPatchFileSha256', doc, apkel) if 'added' in apk: addElement('added', apk['added'].strftime('%Y-%m-%d'), doc, apkel) if file_extension == 'apk': # sig is required for APKs, but only APKs addElement('sig', apk['sig'], doc, apkel) old_permissions = set() sorted_permissions = sorted(apk['uses-permission']) for perm in sorted_permissions: perm_name = perm[0] if perm_name.startswith("android.permission."): perm_name = perm_name[19:] old_permissions.add(perm_name) addElementNonEmpty('permissions', ','.join(sorted(old_permissions)), doc, apkel) for permission in sorted_permissions: permel = doc.createElement('uses-permission') if permission[1] is not None: permel.setAttribute('maxSdkVersion', '%d' % permission[1]) apkel.appendChild(permel) permel.setAttribute('name', permission[0]) for permission_sdk_23 in sorted(apk['uses-permission-sdk-23']): permel = doc.createElement('uses-permission-sdk-23') if permission_sdk_23[1] is not None: permel.setAttribute('maxSdkVersion', '%d' % permission_sdk_23[1]) apkel.appendChild(permel) permel.setAttribute('name', permission_sdk_23[0]) if 'nativecode' in apk: addElement('nativecode', ','.join(sorted(apk['nativecode'])), doc, apkel) addElementNonEmpty('features', ','.join(sorted(apk['features'])), doc, apkel) if current_version_file is not None \ and common.config['make_current_version_link'] \ and repodir == 'repo': # only create these namefield = common.config['current_version_name_source'] name = app.get(namefield) if not name and namefield == 'Name': name = app.get('localized', {}).get(DEFAULT_LOCALE, {}).get('name') if not name: name = app.id sanitized_name = re.sub(b'''[ '"&%?+=/]''', b'', str(name).encode('utf-8')) apklinkname = sanitized_name + os.path.splitext(current_version_file)[1].encode('utf-8') current_version_path = os.path.join(repodir, current_version_file).encode('utf-8', 'surrogateescape') if os.path.islink(apklinkname): os.remove(apklinkname) os.symlink(current_version_path, apklinkname) # also symlink gpg signature, if it exists for extension in (b'.asc', b'.sig'): sigfile_path = current_version_path + extension if os.path.exists(sigfile_path): siglinkname = apklinkname + extension if os.path.islink(siglinkname): os.remove(siglinkname) os.symlink(sigfile_path, siglinkname) if sys.version_info.minor >= 13: # Python 3.13 changed minidom so it no longer converts " to an XML entity. # https://github.com/python/cpython/commit/154477be722ae5c4e18d22d0860e284006b09c4f # This just puts back the previous implementation, with black code format. import inspect import xml.dom.minidom def _write_data(writer, text, attr): # pylint: disable=unused-argument if text: text = ( text.replace('&', '&') .replace('<', '<') .replace('"', '"') .replace('>', '>') ) writer.write(text) argnames = tuple(inspect.signature(xml.dom.minidom._write_data).parameters) if argnames == ('writer', 'text', 'attr'): xml.dom.minidom._write_data = _write_data else: logging.warning('Failed to monkey patch minidom for index.xml support!') if common.options.pretty: output = doc.toprettyxml(encoding='utf-8') else: output = doc.toxml(encoding='utf-8') with open(os.path.join(repodir, 'index.xml'), 'wb') as f: f.write(output) if 'repo_keyalias' in common.config \ or (common.options.nosign and 'repo_pubkey' in common.config): if common.options.nosign: logging.info(_("Creating unsigned index in preparation for signing")) else: logging.info(_("Creating signed index with this key (SHA256):")) logging.info("%s" % repo_pubkey_fingerprint) # Create a jar of the index... jar_output = 'index_unsigned.jar' if common.options.nosign else 'index.jar' p = FDroidPopen(['jar', 'cf', jar_output, 'index.xml'], cwd=repodir) if p.returncode != 0: raise FDroidException("Failed to create {0}".format(jar_output)) # Sign the index... signed = os.path.join(repodir, 'index.jar') if common.options.nosign: _copy_to_local_copy_dir(repodir, os.path.join(repodir, jar_output)) # Remove old signed index if not signing if os.path.exists(signed): os.remove(signed) else: signindex.config = common.config signindex.sign_jar(signed, use_old_algs=True) # Copy the repo icon into the repo directory... icon_dir = os.path.join(repodir, 'icons') repo_icon = common.config.get('repo_icon', common.default_config['repo_icon']) iconfilename = os.path.join(icon_dir, os.path.basename(repo_icon)) if os.path.exists(repo_icon): shutil.copyfile(common.config['repo_icon'], iconfilename) else: logging.warning(_('repo_icon "repo/icons/%s" does not exist, generating placeholder.') % repo_icon) os.makedirs(os.path.dirname(iconfilename), exist_ok=True) try: import qrcode qrcode.make(common.config['repo_url']).save(iconfilename) except ModuleNotFoundError as e: raise ModuleNotFoundError( _( 'The "qrcode" Python package is not installed (e.g. apt-get install python3-qrcode)!' ) ) from e except Exception: exampleicon = os.path.join(common.get_examples_dir(), common.default_config['repo_icon']) shutil.copy(exampleicon, iconfilename) def extract_pubkey(): """Extract and return the repository's public key from the keystore. Returns ------- public key in hex repository fingerprint """ if 'repo_pubkey' in common.config: pubkey = unhexlify(common.config['repo_pubkey']) elif 'keystorepass' in common.config: env_vars = {'LC_ALL': 'C.UTF-8', 'FDROID_KEY_STORE_PASS': common.config['keystorepass']} p = FDroidPopenBytes([common.config['keytool'], '-exportcert', '-alias', common.config['repo_keyalias'], '-keystore', common.config['keystore'], '-storepass:env', 'FDROID_KEY_STORE_PASS'] + list(common.config['smartcardoptions']), envs=env_vars, output=False, stderr_to_stdout=False) if p.returncode != 0 or len(p.output) < 20: msg = "Failed to get repo pubkey!" if common.config['keystore'] == 'NONE': msg += ' Is your crypto smartcard plugged in?' raise FDroidException(msg) pubkey = p.output else: raise FDroidException(_('Neither "repo_pubkey" nor "keystorepass" set in config.yml')) repo_pubkey_fingerprint = common.get_cert_fingerprint(pubkey) return hexlify(pubkey), repo_pubkey_fingerprint def add_mirrors_to_repodict(repo_section, repodict): """Convert config into final dict of mirror metadata for the repo. Internally and in index-v2, mirrors is a list of dicts, but it can be specified in the config as a string or list of strings. Also, index v0 and v1 use a list of URL strings as the data structure. The first entry is traditionally the primary mirror and canonical URL. 'mirrors' should not be present in the index if there is only the canonical URL, and no other mirrors. The metadata items for each mirror entry are sorted by key to ensure minimum diffs in the index files. """ mirrors_config = common.config.get('mirrors', []) if type(mirrors_config) not in (list, tuple): mirrors_config = [mirrors_config] mirrors_yml = Path(f'config/{MIRRORS_CONFIG_NAME}.yml') if mirrors_yml.exists(): if mirrors_config: raise FDroidException( _('mirrors set twice, in config.yml and {path}!').format( path=mirrors_yml ) ) with mirrors_yml.open() as fp: mirrors_config = yaml.load(fp) if not isinstance(mirrors_config, list): msg = _('{path} is not list, but a {datatype}!') raise TypeError( msg.format(path=mirrors_yml, datatype=type(mirrors_config).__name__) ) if type(mirrors_config) not in (list, tuple, set): msg = 'In config.yml, mirrors: is not list, but a {datatype}!' raise TypeError(msg.format(datatype=type(mirrors_config).__name__)) mirrorcheckfailed = False mirrors = [] urls = set() for mirror in mirrors_config: if isinstance(mirror, str): mirror = {'url': mirror} elif not isinstance(mirror, dict): logging.error( _('Bad entry type "{mirrortype}" in mirrors config: {mirror}').format( mirrortype=type(mirror), mirror=mirror ) ) mirrorcheckfailed = True continue config_url = mirror['url'] base = os.path.basename(urllib.parse.urlparse(config_url).path.rstrip('/')) if common.config.get('nonstandardwebroot') is not True and base != 'fdroid': logging.error(_("mirror '%s' does not end with 'fdroid'!") % config_url) mirrorcheckfailed = True # must end with / or urljoin strips a whole path segment if config_url.endswith('/'): mirror['url'] = urllib.parse.urljoin(config_url, repo_section) else: mirror['url'] = urllib.parse.urljoin(config_url + '/', repo_section) mirrors.append(mirror) if mirror['url'] in urls: mirrorcheckfailed = True logging.error( _('Duplicate entry "%s" in mirrors config!') % mirror['url'] ) urls.add(mirror['url']) for mirror in common.config.get('servergitmirrors', []): for url in get_mirror_service_urls(mirror): mirrors.append({'url': url + '/' + repo_section}) if mirrorcheckfailed: raise FDroidException(_("Malformed repository mirrors.")) if not mirrors: return repodict['mirrors'] = [] canonical_url = repodict['address'] found_primary = False errors = 0 for mirror in mirrors: if canonical_url == mirror['url']: found_primary = True mirror['isPrimary'] = True sortedmirror = dict() for k in sorted(mirror.keys()): sortedmirror[k] = mirror[k] repodict['mirrors'].insert(0, sortedmirror) elif mirror.get('isPrimary'): errors += 1 logging.error( _('Mirror config for {url} contains "isPrimary" key!').format( url=mirror['url'] ) ) else: repodict['mirrors'].append(mirror) if errors: raise FDroidException(_('"isPrimary" key should not be added to mirrors!')) if repodict['mirrors'] and not found_primary: repodict['mirrors'].insert(0, {'isPrimary': True, 'url': repodict['address']}) def get_mirror_service_urls(mirror): """Get direct URLs from git service for use by fdroidclient. Via 'servergitmirrors', fdroidserver can create and push a mirror to certain well known git services like GitLab or GitHub. This will always use the 'master' branch since that is the default branch in git. The files are then accessible via alternate URLs, where they are served in their raw format via a CDN rather than from git. Both of the GitLab URLs will work with F-Droid, but only the GitLab Pages will work in the browser This is because the "raw" URLs are not served with the correct mime types, so any index.html which is put in the repo will not be rendered. Putting an index.html file in the repo root is a common way for to make information about the repo available to end user. """ url = mirror['url'] if url.startswith('git@'): url = re.sub(r'^git@([^:]+):(.+)', r'https://\1/\2', url) segments = url.split("/") if segments[4].endswith('.git'): segments[4] = segments[4][:-4] hostname = segments[2] user = segments[3] repo = segments[4] branch = "master" folder = "fdroid" urls = [] if hostname == "github.com": # Github-like RAW segments "https://raw.githubusercontent.com/user/repo/branch/folder" segments[2] = "raw.githubusercontent.com" segments.extend([branch, folder]) urls.append('/'.join(segments)) elif hostname == "gitlab.com": git_mirror_path = os.path.join('git-mirror', folder) if ( mirror.get('index_only') or common.get_dir_size(git_mirror_path) <= common.GITLAB_COM_PAGES_MAX_SIZE ): # Gitlab-like Pages segments "https://user.gitlab.io/repo/folder" gitlab_pages = ["https:", "", user + ".gitlab.io", repo, folder] urls.append('/'.join(gitlab_pages)) else: logging.warning( _( 'Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!' ) % (common.GITLAB_COM_PAGES_MAX_SIZE / 1000000000) ) # GitLab Raw "https://gitlab.com/user/repo/-/raw/branch/folder" gitlab_raw = segments + ['-', 'raw', branch, folder] urls.append('/'.join(gitlab_raw)) # GitLab Artifacts "https://user.gitlab.io/-/repo/-/jobs/job_id/artifacts/public/folder" job_id = os.getenv('CI_JOB_ID') try: int(job_id) gitlab_artifacts = [ "https:", "", user + ".gitlab.io", '-', repo, '-', 'jobs', job_id, 'artifacts', 'public', folder, ] urls.append('/'.join(gitlab_artifacts)) except (TypeError, ValueError): pass # no Job ID to use, ignore return urls def download_repo_index(url_str, etag=None, verify_fingerprint=True, timeout=600): """Download and verifies index v1 file, then returns its data. Use the versioned functions to be sure you are getting the expected data format. """ return download_repo_index_v1(url_str, etag, verify_fingerprint, timeout) def download_repo_index_v1(url_str, etag=None, verify_fingerprint=True, timeout=600): """Download and verifies index v1 file, then returns its data. Downloads the repository index from the given :param url_str and verifies the repository's fingerprint if :param verify_fingerprint is not False. Raises ------ VerificationException() if the repository could not be verified Returns ------- A tuple consisting of: - The index in JSON v1 format or None if the index did not change - The new eTag as returned by the HTTP request """ from . import net url = urllib.parse.urlsplit(url_str) fingerprint = None if verify_fingerprint: query = urllib.parse.parse_qs(url.query) if 'fingerprint' not in query: raise VerificationException(_("No fingerprint in URL.")) fingerprint = query['fingerprint'][0] if url.path.endswith('/index-v1.jar'): path = url.path[:-13].rstrip('/') else: path = url.path.rstrip('/') url = urllib.parse.SplitResult(url.scheme, url.netloc, path + '/index-v1.jar', '', '') download, new_etag = net.http_get(url.geturl(), etag, timeout) if download is None: return None, new_etag with tempfile.NamedTemporaryFile() as fp: fp.write(download) fp.flush() index, public_key, public_key_fingerprint = get_index_from_jar( fp.name, fingerprint, allow_deprecated=True ) index["repo"]["pubkey"] = hexlify(public_key).decode() index["repo"]["fingerprint"] = public_key_fingerprint index["apps"] = [metadata.App(app) for app in index["apps"]] return index, new_etag def download_repo_index_v2(url_str, etag=None, verify_fingerprint=True, timeout=None): """Download and verifies index v2 file, then returns its data. Downloads the repository index from the given :param url_str and verifies the repository's fingerprint if :param verify_fingerprint is not False. In order to verify the data, the fingerprint must be provided as part of the URL. Raises ------ VerificationException() if the repository could not be verified Returns ------- A tuple consisting of: - The index in JSON v2 format or None if the index did not change - The new eTag as returned by the HTTP request """ from . import net etag # etag is unused but needs to be there to keep the same API as the earlier functions. url = urllib.parse.urlsplit(url_str) if timeout is not None: logging.warning('"timeout" argument of download_repo_index_v2() is deprecated!') fingerprint = None if verify_fingerprint: query = urllib.parse.parse_qs(url.query) if 'fingerprint' not in query: raise VerificationException(_("No fingerprint in URL.")) fingerprint = query['fingerprint'][0] if url.path.endswith('/entry.jar') or url.path.endswith('/index-v2.json'): path = url.path.rsplit('/', 1)[0] else: path = url.path.rstrip('/') url = urllib.parse.SplitResult(url.scheme, url.netloc, path, '', '') mirrors = common.get_mirrors(url, 'entry.jar') f = net.download_using_mirrors(mirrors) entry, public_key, fingerprint = get_index_from_jar(f, fingerprint) sha256 = entry['index']['sha256'] mirrors = common.get_mirrors(url, entry['index']['name'][1:]) f = net.download_using_mirrors(mirrors) with open(f, 'rb') as fp: index = fp.read() if sha256 != hashlib.sha256(index).hexdigest(): raise VerificationException( _("SHA-256 of {url} does not match entry!").format(url=url) ) return json.loads(index), None def get_index_from_jar(jarfile, fingerprint=None, allow_deprecated=False): """Return the data, public key and fingerprint from an index JAR with one JSON file. The F-Droid index files always contain a single data file and a JAR Signature. Since index-v1, the data file is always JSON. That single data file is named the same as the JAR file. Parameters ---------- fingerprint is the SHA-256 fingerprint of signing key. Only hex digits count, all other chars will can be discarded. Raises ------ VerificationException() if the repository could not be verified """ logging.debug(_('Verifying index signature:')) if allow_deprecated: common.verify_deprecated_jar_signature(jarfile) else: common.verify_jar_signature(jarfile) with zipfile.ZipFile(jarfile) as jar: public_key, public_key_fingerprint = get_public_key_from_jar(jar) if fingerprint is not None: fingerprint = re.sub(r'[^0-9A-F]', r'', fingerprint.upper()) if fingerprint != public_key_fingerprint: raise VerificationException( _("The repository's fingerprint does not match.") ) for f in jar.namelist(): if not f.startswith('META-INF/'): jsonfile = f break data = json.loads(jar.read(jsonfile)) return data, public_key, public_key_fingerprint def get_public_key_from_jar(jar): """Get the public key and its fingerprint from a JAR file. Raises ------ VerificationException() if the JAR was not signed exactly once Parameters ---------- jar a zipfile.ZipFile object Returns ------- the public key from the jar and its fingerprint """ # extract certificate from jar certs = [n for n in jar.namelist() if common.SIGNATURE_BLOCK_FILE_REGEX.match(n)] if len(certs) < 1: raise VerificationException(_("Found no signing certificates for repository.")) if len(certs) > 1: raise VerificationException(_("Found multiple signing certificates for repository.")) # extract public key from certificate public_key = common.get_certificate(jar.read(certs[0])) public_key_fingerprint = common.get_cert_fingerprint(public_key).replace(' ', '') return public_key, public_key_fingerprint def make_altstore(apps, apks, config, repodir, pretty=False): """Assemble altstore-index.json for iOS (.ipa) apps. builds index files based on: https://faq.altstore.io/distribute-your-apps/make-a-source https://faq.altstore.io/distribute-your-apps/updating-apps """ if not any(Path(repodir).glob('*.ipa')): # no IPA files present in repo, nothing to do here, exiting early return indent = 2 if pretty else None # for now alt-store support is english only for lang in ['en']: # prepare minimal altstore index idx = { 'name': config['repo_name'], "apps": [], "news": [], } # add optional values if available # idx["subtitle"] F-Droid doesn't have a corresponding value if config.get("repo_description"): idx['description'] = config['repo_description'] if (Path(repodir) / 'icons' / config['repo_icon']).exists(): idx['iconURL'] = f"{config['repo_url']}/icons/{config['repo_icon']}" # idx["headerURL"] F-Droid doesn't have a corresponding value # idx["website"] F-Droid doesn't have a corresponding value # idx["patreonURL"] F-Droid doesn't have a corresponding value # idx["tintColor"] F-Droid doesn't have a corresponding value # idx["featuredApps"] = [] maybe mappable to F-Droids what's new? # assemble "apps" for packageName, app in apps.items(): app_name = app.get("Name") or app.get("AutoName") icon_url = "{}{}".format( config['repo_url'], app.get('iconv2', {}).get(DEFAULT_LOCALE, {}).get('name', ''), ) screenshot_urls = [ "{}{}".format(config["repo_url"], s["name"]) for s in app.get("screenshots", {}) .get("phone", {}) .get(DEFAULT_LOCALE, {}) ] a = { "name": app_name, 'bundleIdentifier': packageName, 'developerName': app.get("AuthorName") or f"{app_name} team", 'iconURL': icon_url, "localizedDescription": "", 'appPermissions': { "entitlements": set(), "privacy": {}, }, 'versions': [], } if app.get('summary'): a['subtitle'] = app['summary'] # a["tintColor"] F-Droid doesn't have a corresponding value # a["category"] F-Droid doesn't have a corresponding value # a['patreon'] F-Droid doesn't have a corresponding value a["screenshots"] = screenshot_urls # populate 'versions' for apk in apks: last4 = apk.get('apkName', '').lower()[-4:] if apk['packageName'] == packageName and last4 == '.ipa': v = { "version": apk["versionName"], "date": apk["added"].isoformat(), "downloadURL": f"{config['repo_url']}/{apk['apkName']}", "size": apk['size'], } # v['localizedDescription'] maybe what's new text? v["minOSVersion"] = apk["ipa_MinimumOSVersion"] v["maxOSVersion"] = apk["ipa_DTPlatformVersion"] # writing this spot here has the effect that always the # permissions of the latest processed permissions list used a['appPermissions']['privacy'] = apk['ipa_permissions'] a['appPermissions']['entitlements'] = list(apk['ipa_entitlements']) a['versions'].append(v) if len(a['versions']) > 0: idx['apps'].append(a) with open(Path(repodir) / 'altstore-index.json', "w", encoding="utf-8") as f: json.dump(idx, f, indent=indent) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/fdroidserver/init.py0000644000175000017500000002673714770502071016754 0ustar00hanshans#!/usr/bin/env python3 # # init.py - part of the FDroid server tools # Copyright (C) 2010-2013, Ciaran Gultnieks, ciaran@ciarang.com # Copyright (C) 2013-2014 Daniel Martí # Copyright (C) 2013 Hans-Christoph Steiner # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import glob import os import re import shutil import socket import sys from argparse import ArgumentParser import logging from . import _ from . import common from .exception import FDroidException config = {} def disable_in_config(key, value): """Write a key/value to the local config.yml, then comment it out.""" import yaml with open(common.CONFIG_FILE) as fp: data = fp.read() pattern = r'\n[\s#]*' + key + r':.*' repl = '\n#' + yaml.dump({key: value}, default_flow_style=False) data = re.sub(pattern, repl, data) with open(common.CONFIG_FILE, 'w') as fp: fp.writelines(data) def main(): global config # Parse command line... parser = ArgumentParser() common.setup_global_opts(parser) parser.add_argument( "-d", "--distinguished-name", default=None, help=_("X.509 'Distinguished Name' used when generating keys"), ) parser.add_argument( "--keystore", default=None, help=_("Path to the keystore for the repo signing key"), ) parser.add_argument( "--repo-keyalias", default=None, help=_("Alias of the repo signing key in the keystore"), ) parser.add_argument( "--android-home", default=None, help=_("Path to the Android SDK (sometimes set in ANDROID_HOME)"), ) parser.add_argument( "--no-prompt", action="store_true", default=False, help=_("Do not prompt for Android SDK path, just fail"), ) options = common.parse_args(parser) common.set_console_logging(options.verbose, options.color) fdroiddir = os.getcwd() test_config = dict() examplesdir = common.get_examples_dir() common.fill_config_defaults(test_config) # track down where the Android SDK is, the default is to use the path set # in ANDROID_HOME if that exists, otherwise None if options.android_home is not None: test_config['sdk_path'] = options.android_home elif not common.test_sdk_exists(test_config): # if neither --android-home nor the default sdk_path # exist, prompt the user using platform-specific default # and if the user leaves it blank, ignore and move on. default_sdk_path = '' if sys.platform in ('win32', 'cygwin'): p = os.path.join( os.getenv('USERPROFILE'), 'AppData', 'Local', 'Android', 'android-sdk' ) elif sys.platform == 'darwin': # on OSX, Homebrew is common and has an easy path to detect p = '/usr/local/opt/android-sdk' elif os.path.isdir('/usr/lib/android-sdk'): # if the Debian packages are installed, suggest them p = '/usr/lib/android-sdk' else: p = '/opt/android-sdk' if os.path.exists(p): default_sdk_path = p test_config['sdk_path'] = default_sdk_path if not common.test_sdk_exists(test_config): del test_config['sdk_path'] while not options.no_prompt: try: s = input( _('Enter the path to the Android SDK (%s) here:\n> ') % default_sdk_path ) except KeyboardInterrupt: print('') sys.exit(1) if re.match(r'^\s*$', s) is not None: test_config['sdk_path'] = default_sdk_path else: test_config['sdk_path'] = s if common.test_sdk_exists(test_config): break default_sdk_path = '' if test_config.get('sdk_path') and not common.test_sdk_exists(test_config): raise FDroidException( _("Android SDK not found at {path}!").format(path=test_config['sdk_path']) ) if not os.path.exists(common.CONFIG_FILE): # 'metadata' and 'tmp' are created in fdroid if not os.path.exists('repo'): os.mkdir('repo') example_config_yml = os.path.join(examplesdir, common.CONFIG_FILE) if os.path.exists(example_config_yml): shutil.copyfile(example_config_yml, common.CONFIG_FILE) else: from pkg_resources import get_distribution versionstr = get_distribution('fdroidserver').version if not versionstr: versionstr = 'master' with open(common.CONFIG_FILE, 'w') as fp: fp.write('# see https://gitlab.com/fdroid/fdroidserver/blob/') fp.write(versionstr) fp.write(f'/examples/{common.CONFIG_FILE}\n') os.chmod(common.CONFIG_FILE, 0o0600) # If android_home is None, test_config['sdk_path'] will be used and # "$ANDROID_HOME" may be used if the env var is set up correctly. # If android_home is not None, the path given from the command line # will be directly written in the config. if 'sdk_path' in test_config: common.write_to_config(test_config, 'sdk_path', options.android_home) else: logging.warning( 'Looks like this is already an F-Droid repo, cowardly refusing to overwrite it...' ) logging.info('Try running `fdroid init` in an empty directory.') raise FDroidException('Repository already exists.') # now that we have a local config.yml, read configuration... config = common.read_config() # the NDK is optional and there may be multiple versions of it, so it's # left for the user to configure # find or generate the keystore for the repo signing key. First try the # path written in the default config.yml. Then check if the user has # specified a path from the command line, which will trump all others. # Otherwise, create ~/.local/share/fdroidserver and stick it in there. If # keystore is set to NONE, that means that Java will look for keys in a # Hardware Security Module aka Smartcard. keystore = config['keystore'] if options.keystore: keystore = os.path.abspath(options.keystore) if options.keystore == 'NONE': keystore = options.keystore else: keystore = os.path.abspath(options.keystore) if not os.path.exists(keystore): logging.info( '"' + keystore + '" does not exist, creating a new keystore there.' ) common.write_to_config(test_config, 'keystore', keystore) repo_keyalias = None keydname = None if options.repo_keyalias: repo_keyalias = options.repo_keyalias common.write_to_config(test_config, 'repo_keyalias', repo_keyalias) if options.distinguished_name: keydname = options.distinguished_name common.write_to_config(test_config, 'keydname', keydname) if keystore == 'NONE': # we're using a smartcard common.write_to_config( test_config, 'repo_keyalias', '1' ) # seems to be the default disable_in_config('keypass', 'never used with smartcard') common.write_to_config( test_config, 'smartcardoptions', ( '-storetype PKCS11 ' + '-providerClass sun.security.pkcs11.SunPKCS11 ' + '-providerArg opensc-fdroid.cfg' ), ) # find opensc-pkcs11.so if not os.path.exists('opensc-fdroid.cfg'): if os.path.exists('/usr/lib/opensc-pkcs11.so'): opensc_so = '/usr/lib/opensc-pkcs11.so' elif os.path.exists('/usr/lib64/opensc-pkcs11.so'): opensc_so = '/usr/lib64/opensc-pkcs11.so' else: files = glob.glob( '/usr/lib/' + os.uname()[4] + '-*-gnu/opensc-pkcs11.so' ) if len(files) > 0: opensc_so = files[0] else: opensc_so = '/usr/lib/opensc-pkcs11.so' logging.warning( 'No OpenSC PKCS#11 module found, ' + 'install OpenSC then edit "opensc-fdroid.cfg"!' ) with open('opensc-fdroid.cfg', 'w') as f: f.write('name = OpenSC\nlibrary = ') f.write(opensc_so) f.write('\n') logging.info( "Repo setup using a smartcard HSM. Please edit keystorepass and repo_keyalias in config.yml." ) logging.info( "If you want to generate a new repo signing key in the HSM you can do that with 'fdroid update " "--create-key'." ) elif os.path.exists(keystore): to_set = ['keystorepass', 'keypass', 'repo_keyalias', 'keydname'] if repo_keyalias: to_set.remove('repo_keyalias') if keydname: to_set.remove('keydname') logging.warning( '\n' + _('Using existing keystore "{path}"').format(path=keystore) + '\n' + _('Now set these in config.yml:') + ' ' + ', '.join(to_set) + '\n' ) else: password = common.genpassword() c = dict(test_config) c['keystorepass'] = password c['keypass'] = password c['repo_keyalias'] = repo_keyalias or socket.getfqdn() c['keydname'] = 'CN=' + c['repo_keyalias'] + ', OU=F-Droid' common.write_to_config(test_config, 'keystorepass', password) common.write_to_config(test_config, 'keypass', password) common.write_to_config(test_config, 'repo_keyalias', c['repo_keyalias']) common.write_to_config(test_config, 'keydname', c['keydname']) common.genkeystore(c) msg = '\n' msg += _('Built repo based in "%s" with this config:') % fdroiddir msg += '\n\n Android SDK:\t\t\t' + config['sdk_path'] msg += '\n ' + _('Keystore for signing key:\t') + keystore if repo_keyalias is not None: msg += '\n Alias for key in store:\t' + repo_keyalias msg += '\n\n' msg += ( _( """To complete the setup, add your APKs to "%s" then run "fdroid update -c; fdroid update". You might also want to edit "config.yml" to set the URL, repo name, and more. You should also set up a signing key (a temporary one might have been automatically generated). For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo and https://f-droid.org/docs/Signing_Process""" ) % os.path.join(fdroiddir, 'repo') ) if not options.quiet: # normally, INFO is only shown with --verbose, but show this unless --quiet logger = logging.getLogger() logger.setLevel(logging.INFO) logger.info(msg) logging.shutdown() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742814246.0 fdroidserver-2.4.0/fdroidserver/install.py0000644000175000017500000003366314770236046017461 0ustar00hanshans#!/usr/bin/env python3 # # install.py - part of the FDroid server tools # Copyright (C) 2013, Ciaran Gultnieks, ciaran@ciarang.com # Copyright (C) 2013-2014 Daniel Martí # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import sys import os import glob import locale import logging import termios import tty import defusedxml.ElementTree as XMLElementTree from argparse import ArgumentParser, BooleanOptionalAction from pathlib import Path from urllib.parse import urlencode, urlparse, urlunparse from . import _ from . import common, github, index, net from .exception import FDroidException DEFAULT_IPFS_GATEWAYS = ("https://gateway.ipfs.io/ipfs/",) MAVEN_CENTRAL_MIRRORS = [ { "url": "https://repo1.maven.org/maven2/", "dnsA": ["199.232.16.209"], "worksWithoutSNI": True, }, { "url": "https://repo.maven.apache.org/maven2/", "dnsA": ["199.232.16.215"], "worksWithoutSNI": True, }, { "url": "https://maven-central-asia.storage-download.googleapis.com/maven2/", }, { "url": "https://maven-central-eu.storage-download.googleapis.com/maven2/", }, { "url": "https://maven-central.storage-download.googleapis.com/maven2/", }, ] # pylint: disable=unused-argument def download_apk(appid='org.fdroid.fdroid', privacy_mode=False): """Download an APK from F-Droid via the first mirror that works.""" url = urlunparse( urlparse(common.FDROIDORG_MIRRORS[0]['url'])._replace( query=urlencode({'fingerprint': common.FDROIDORG_FINGERPRINT}) ) ) data, _ignored = index.download_repo_index_v2(url) app = data.get('packages', dict()).get(appid) preferred_version = None for version in app['versions'].values(): if not preferred_version: # if all else fails, use the first one preferred_version = version if not version.get('releaseChannels'): # prefer APK in default release channel preferred_version = version break mirrors = common.append_filename_to_mirrors( preferred_version['file']['name'][1:], common.FDROIDORG_MIRRORS ) ipfsCIDv1 = preferred_version['file'].get('ipfsCIDv1') if ipfsCIDv1: for gateway in DEFAULT_IPFS_GATEWAYS: mirrors.append({'url': os.path.join(gateway, ipfsCIDv1)}) f = net.download_using_mirrors(mirrors) if f and os.path.exists(f): versionCode = preferred_version['manifest']['versionCode'] f = Path(f) return str(f.rename(f.with_stem(f'{appid}_{versionCode}')).resolve()) def download_fdroid_apk(privacy_mode=False): # pylint: disable=unused-argument """Directly download the current F-Droid APK and verify it. This downloads the "download button" link, which is the version that is best tested for new installs. """ mirror = common.FDROIDORG_MIRRORS[0] mirror['url'] = urlunparse(urlparse(mirror['url'])._replace(path='F-Droid.apk')) return net.download_using_mirrors([mirror]) def download_fdroid_apk_from_github(privacy_mode=False): """Download F-Droid.apk from F-Droid's GitHub Releases.""" if common.config and not privacy_mode: token = common.config.get('github_token') else: token = None gh = github.GithubApi(token, 'https://github.com/f-droid/fdroidclient') latest_apk = gh.get_latest_apk() filename = os.path.basename(latest_apk) return net.download_file(latest_apk, os.path.join(common.get_cachedir(), filename)) def download_fdroid_apk_from_ipns(privacy_mode=False): """Download the F-Droid APK from an IPNS repo.""" cid = 'k51qzi5uqu5dl4hbcksbdmplanu9n4hivnqsupqe6vzve1pdbeh418ssptldd3' mirrors = [ {"url": f"https://ipfs.io/ipns/{cid}/F-Droid.apk"}, ] if not privacy_mode: mirrors.append({"url": f"https://{cid}.ipns.dweb.link/F-Droid.apk"}) return net.download_using_mirrors(mirrors) def download_fdroid_apk_from_maven(privacy_mode=False): """Download F-Droid.apk from Maven Central and official mirrors.""" path = 'org/fdroid/fdroid/F-Droid' if privacy_mode: mirrors = MAVEN_CENTRAL_MIRRORS[:2] # skip the Google servers else: mirrors = MAVEN_CENTRAL_MIRRORS metadata = net.download_using_mirrors( common.append_filename_to_mirrors( os.path.join(path, 'maven-metadata.xml'), mirrors ) ) version = XMLElementTree.parse(metadata).getroot().findall('*.//latest')[0].text mirrors = common.append_filename_to_mirrors( os.path.join(path, version, f'F-Droid-{version}.apk'), mirrors ) return net.download_using_mirrors(mirrors) def install_fdroid_apk(privacy_mode=False): """Download and install F-Droid.apk using all tricks we can muster. By default, this first tries to fetch the official install APK which is offered when someone clicks the "download" button on https://f-droid.org/. Then it will try all the mirrors and methods until it gets something successful, or runs out of options. There is privacy_mode which tries to download from mirrors first, so that this downloads from a mirror that has many different kinds of files available, thereby breaking the clear link to F-Droid. Returns ------- None for success or the error message. """ country_code = locale.getlocale()[0].split('_')[-1] if privacy_mode is None and country_code in ('CN', 'HK', 'IR', 'TM'): logging.warning( _('Privacy mode was enabled based on your locale ({country_code}).').format( country_code=country_code ) ) privacy_mode = True if privacy_mode or not (common.config and common.config.get('jarsigner')): download_methods = [ download_fdroid_apk_from_maven, download_fdroid_apk_from_ipns, download_fdroid_apk_from_github, ] else: download_methods = [ download_apk, download_fdroid_apk_from_maven, download_fdroid_apk_from_github, download_fdroid_apk_from_ipns, download_fdroid_apk, ] for method in download_methods: try: f = method(privacy_mode=privacy_mode) break except Exception as e: logging.info(e) else: return _('F-Droid.apk could not be downloaded from any known source!') fingerprint = common.apk_signer_fingerprint(f) if fingerprint.upper() != common.FDROIDORG_FINGERPRINT: return _('{path} has the wrong fingerprint ({fingerprint})!').format( path=f, fingerprint=fingerprint ) install_apk(f) def install_apk(f): if common.config and common.config.get('apksigner'): # TODO this should always verify, but that requires APK sig verification in Python #94 logging.info(_('Verifying package {path} with apksigner.').format(path=f)) common.verify_apk_signature(f) if common.config and common.config.get('adb'): if devices(): install_apks_to_devices([f]) os.remove(f) else: os.remove(f) return _('No devices found for `adb install`! Please plug one in.') def devices(): """Get the list of device serials for use with adb commands.""" p = common.SdkToolsPopen(['adb', "devices"]) if p.returncode != 0: raise FDroidException("An error occured when finding devices: %s" % p.output) serials = list() for line in p.output.splitlines(): columns = line.strip().split("\t", maxsplit=1) if len(columns) == 2: serial, status = columns if status == 'device': serials.append(serial) else: d = {'serial': serial, 'status': status} logging.warning(_('adb reports {serial} is "{status}"!'.format(**d))) return serials def install_apks_to_devices(apks): """Install the list of APKs to all Android devices reported by `adb devices`.""" for apk in apks: # Get device list each time to avoid device not found errors devs = devices() if not devs: raise FDroidException(_("No attached devices found")) logging.info(_("Installing %s...") % apk) for dev in devs: logging.info( _("Installing '{apkfilename}' on {dev}...").format( apkfilename=apk, dev=dev ) ) p = common.SdkToolsPopen(['adb', "-s", dev, "install", apk]) fail = "" for line in p.output.splitlines(): if line.startswith("Failure"): fail = line[9:-1] if not fail: continue if fail == "INSTALL_FAILED_ALREADY_EXISTS": logging.warning( _('"{apkfilename}" is already installed on {dev}.').format( apkfilename=apk, dev=dev ) ) else: raise FDroidException( _("Failed to install '{apkfilename}' on {dev}: {error}").format( apkfilename=apk, dev=dev, error=fail ) ) def read_char(): """Read input from the terminal prompt one char at a time.""" fd = sys.stdin.fileno() old_settings = termios.tcgetattr(fd) try: tty.setraw(fd) ch = sys.stdin.read(1) finally: termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) return ch def strtobool(val): """Convert a localized string representation of truth to True or False.""" return val.lower() in ('', 'y', 'yes', _('yes'), _('true')) # '' is pressing Enter def prompt_user(yes, msg): """Prompt user for yes/no, supporting Enter and Esc as accepted answers.""" run_install = yes if yes is None and sys.stdout.isatty(): print(msg, end=' ', flush=True) answer = '' while True: in_char = read_char() if in_char == '\r': # Enter key break if not in_char.isprintable(): sys.exit(1) print(in_char, end='', flush=True) answer += in_char run_install = strtobool(answer) print() return run_install def main(): parser = ArgumentParser( usage="%(prog)s [options] [APPID[:VERCODE] [APPID[:VERCODE] ...]]" ) common.setup_global_opts(parser) parser.add_argument( "appid", nargs='*', help=_("application ID with optional versionCode in the form APPID[:VERCODE]"), ) parser.add_argument( "-a", "--all", action="store_true", default=False, help=_("Install all signed applications available"), ) parser.add_argument( "-p", "--privacy-mode", action=BooleanOptionalAction, default=None, help=_("Download F-Droid.apk using mirrors that leak less to the network"), ) parser.add_argument( "-y", "--yes", action="store_true", default=None, help=_("Automatic yes to all prompts."), ) parser.add_argument( "-n", "--no", action="store_false", dest='yes', help=_("Automatic no to all prompts."), ) options = common.parse_args(parser) common.set_console_logging(options.verbose, options.color) logging.captureWarnings(True) # for SNIMissingWarning common.get_config() if not options.appid and not options.all: run_install = prompt_user( options.yes, _('Would you like to download and install F-Droid.apk via adb? (YES/no)'), ) if run_install: sys.exit(install_fdroid_apk(options.privacy_mode)) sys.exit(1) output_dir = 'repo' if (options.appid or options.all) and not os.path.isdir(output_dir): logging.error(_("No signed output directory - nothing to do")) run_install = prompt_user( options.yes, _('Would you like to download the app(s) from f-droid.org? (YES/no)'), ) if run_install: for appid in options.appid: f = download_apk(appid) install_apk(f) sys.exit(install_fdroid_apk(options.privacy_mode)) sys.exit(1) if options.appid: vercodes = common.read_pkg_args(options.appid, True) common.get_metadata_files(vercodes) # only check appids apks = {appid: None for appid in vercodes} # Get the signed APK with the highest vercode for apkfile in sorted(glob.glob(os.path.join(output_dir, '*.apk'))): try: appid, vercode = common.publishednameinfo(apkfile) except FDroidException: continue if appid not in apks: continue if vercodes[appid] and vercode not in vercodes[appid]: continue apks[appid] = apkfile for appid, apk in apks.items(): if not apk: raise FDroidException(_("No signed APK available for %s") % appid) install_apks_to_devices(apks.values()) elif options.all: apks = { common.publishednameinfo(apkfile)[0]: apkfile for apkfile in sorted(glob.glob(os.path.join(output_dir, '*.apk'))) } install_apks_to_devices(apks.values()) logging.info('\n' + _('Finished')) if __name__ == "__main__": main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/fdroidserver/lint.py0000644000175000017500000011443614770502071016751 0ustar00hanshans#!/usr/bin/env python3 # # lint.py - part of the FDroid server tool # Copyright (C) 2013-2014 Daniel Martí # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 th # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public Licen # along with this program. If not, see . import difflib import platform import re import sys import urllib.parse from argparse import ArgumentParser from pathlib import Path from . import _, common, metadata, rewritemeta from fdroidserver._yaml import yaml config = None def enforce_https(domain): return ( re.compile( r'^http://([^/]*\.)?' + re.escape(domain) + r'(/.*)?', re.IGNORECASE ), domain + " URLs should always use https://", ) https_enforcings = [ enforce_https('github.com'), enforce_https('gitlab.com'), enforce_https('bitbucket.org'), enforce_https('apache.org'), enforce_https('google.com'), enforce_https('git.code.sf.net'), enforce_https('svn.code.sf.net'), enforce_https('anongit.kde.org'), enforce_https('savannah.nongnu.org'), enforce_https('git.savannah.nongnu.org'), enforce_https('download.savannah.nongnu.org'), enforce_https('savannah.gnu.org'), enforce_https('git.savannah.gnu.org'), enforce_https('download.savannah.gnu.org'), enforce_https('github.io'), enforce_https('gitlab.io'), enforce_https('githubusercontent.com'), ] def forbid_shortener(domain): return ( re.compile(r'https?://[^/]*' + re.escape(domain) + r'/.*'), _("URL shorteners should not be used"), ) http_url_shorteners = [ forbid_shortener('1url.com'), forbid_shortener('adf.ly'), forbid_shortener('bc.vc'), forbid_shortener('bit.do'), forbid_shortener('bit.ly'), forbid_shortener('bitly.com'), forbid_shortener('budurl.com'), forbid_shortener('buzurl.com'), forbid_shortener('cli.gs'), forbid_shortener('cur.lv'), forbid_shortener('cutt.us'), forbid_shortener('db.tt'), forbid_shortener('filoops.info'), forbid_shortener('goo.gl'), forbid_shortener('is.gd'), forbid_shortener('ity.im'), forbid_shortener('j.mp'), forbid_shortener('l.gg'), forbid_shortener('lnkd.in'), forbid_shortener('moourl.com'), forbid_shortener('ow.ly'), forbid_shortener('para.pt'), forbid_shortener('po.st'), forbid_shortener('q.gs'), forbid_shortener('qr.ae'), forbid_shortener('qr.net'), forbid_shortener('rdlnk.com'), forbid_shortener('scrnch.me'), forbid_shortener('short.nr'), forbid_shortener('sn.im'), forbid_shortener('snipurl.com'), forbid_shortener('su.pr'), forbid_shortener('t.co'), forbid_shortener('tiny.cc'), forbid_shortener('tinyarrows.com'), forbid_shortener('tinyurl.com'), forbid_shortener('tr.im'), forbid_shortener('tweez.me'), forbid_shortener('twitthis.com'), forbid_shortener('twurl.nl'), forbid_shortener('tyn.ee'), forbid_shortener('u.bb'), forbid_shortener('u.to'), forbid_shortener('ur1.ca'), forbid_shortener('urlof.site'), forbid_shortener('v.gd'), forbid_shortener('vzturl.com'), forbid_shortener('x.co'), forbid_shortener('xrl.us'), forbid_shortener('yourls.org'), forbid_shortener('zip.net'), forbid_shortener('✩.ws'), forbid_shortener('➡.ws'), ] http_checks = ( https_enforcings + http_url_shorteners + [ ( re.compile(r'^(?!https?://)[^/]+'), _("URL must start with https:// or http://"), ), ( re.compile(r'^https://(github|gitlab)\.com(/[^/]+){2,3}\.git'), _("Appending .git is not necessary"), ), ( re.compile( r'^https://[^/]*(github|gitlab|bitbucket|rawgit|githubusercontent)\.[a-zA-Z]+/([^/]+/){2,3}(master|main)/' ), _( "Use /HEAD instead of /master or /main to point at a file in the default branch" ), ), ] ) regex_checks = { 'WebSite': http_checks, 'SourceCode': http_checks, 'Repo': https_enforcings, 'UpdateCheckMode': https_enforcings, 'IssueTracker': http_checks + [ (re.compile(r'.*github\.com/[^/]+/[^/]+/*$'), _("/issues is missing")), (re.compile(r'.*gitlab\.com/[^/]+/[^/]+/*$'), _("/issues is missing")), ], 'Donate': http_checks + [ ( re.compile(r'.*liberapay\.com'), _("Liberapay donation methods belong in the Liberapay: field"), ), ( re.compile(r'.*opencollective\.com'), _("OpenCollective donation methods belong in the OpenCollective: field"), ), ], 'Changelog': http_checks, 'Author Name': [ (re.compile(r'^\s'), _("Unnecessary leading space")), (re.compile(r'.*\s$'), _("Unnecessary trailing space")), ], 'Summary': [ ( re.compile(r'.*\b(free software|open source)\b.*', re.IGNORECASE), _("No need to specify that the app is Free Software"), ), ( re.compile( r'.*((your|for).*android|android.*(app|device|client|port|version))', re.IGNORECASE, ), _("No need to specify that the app is for Android"), ), (re.compile(r'.*[a-z0-9][.!?]( |$)'), _("Punctuation should be avoided")), (re.compile(r'^\s'), _("Unnecessary leading space")), (re.compile(r'.*\s$'), _("Unnecessary trailing space")), ], 'Description': https_enforcings + http_url_shorteners + [ (re.compile(r'\s*[*#][^ .]'), _("Invalid bulleted list")), ( re.compile(r'https://f-droid.org/[a-z][a-z](_[A-Za-z]{2,4})?/'), _("Locale included in f-droid.org URL"), ), (re.compile(r'^\s'), _("Unnecessary leading space")), (re.compile(r'.*\s$'), _("Unnecessary trailing space")), ( re.compile( r'.*<(applet|base|body|button|embed|form|head|html|iframe|img|input|link|object|picture|script|source|style|svg|video).*', re.IGNORECASE, ), _("Forbidden HTML tags"), ), ( re.compile(r""".*\s+src=["']javascript:.*"""), _("Javascript in HTML src attributes"), ), ], } # config keys that are currently ignored by lint, but could be supported. ignore_config_keys = ( 'github_releases', 'java_paths', ) bool_keys = ( 'allow_disabled_algorithms', 'androidobservatory', 'build_server_always', 'deploy_process_logs', 'keep_when_not_allowed', 'make_current_version_link', 'nonstandardwebroot', 'per_app_repos', 'rclone', 'refresh_scanner', 's3cmd', 'scan_binary', 'sync_from_local_copy_dir', ) check_config_keys = ( 'ant', 'apk_signing_key_block_list', 'archive', 'archive_description', 'archive_icon', 'archive_name', 'archive_older', 'archive_url', 'archive_web_base_url', 'awsaccesskeyid', 'awsbucket', 'awssecretkey', 'binary_transparency_remote', 'cachedir', 'char_limits', 'current_version_name_source', 'git_mirror_size_limit', 'github_token', 'gpghome', 'gpgkey', 'gradle', 'identity_file', 'install_list', 'java_paths', 'keyaliases', 'keydname', 'keypass', 'keystore', 'keystorepass', 'lint_licenses', 'local_copy_dir', 'mirrors', 'mvn3', 'ndk_paths', 'path_to_custom_rclone_config', 'rclone_config', 'repo', 'repo_description', 'repo_icon', 'repo_keyalias', 'repo_maxage', 'repo_name', 'repo_pubkey', 'repo_url', 'repo_web_base_url', 'scanner_signature_sources', 'sdk_path', 'servergitmirrors', 'serverwebroot', 'smartcardoptions', 'sync_from_local_copy_dir', 'uninstall_list', 'virustotal_apikey', ) locale_pattern = re.compile(r"[a-z]{2,3}(-([A-Z][a-zA-Z]+|\d+|[a-z]+))*") versioncode_check_pattern = re.compile(r"(\\d|\[(0-9|\\d)_?(a-fA-F)?])[+]") ANTIFEATURES_KEYS = None ANTIFEATURES_PATTERN = None CATEGORIES_KEYS = list() def load_antiFeatures_config(): """Lazy loading, since it might read a lot of files.""" global ANTIFEATURES_KEYS, ANTIFEATURES_PATTERN k = common.ANTIFEATURES_CONFIG_NAME if not ANTIFEATURES_KEYS or k not in common.config: common.config[k] = common.load_localized_config(k, 'repo') ANTIFEATURES_KEYS = sorted(common.config[k].keys()) ANTIFEATURES_PATTERN = ','.join(ANTIFEATURES_KEYS) def load_categories_config(): """Lazy loading, since it might read a lot of files.""" global CATEGORIES_KEYS k = common.CATEGORIES_CONFIG_NAME if not CATEGORIES_KEYS: if config and k in config: CATEGORIES_KEYS = config[k] else: config[k] = common.load_localized_config(k, 'repo') CATEGORIES_KEYS = list(config[k].keys()) def check_regexes(app): for f, checks in regex_checks.items(): for m, r in checks: v = app.get(f) t = metadata.fieldtype(f) if t == metadata.TYPE_MULTILINE: for line in v.splitlines(): if m.match(line): yield "%s at line '%s': %s" % (f, line, r) else: if v is None: continue if m.match(v): yield "%s '%s': %s" % (f, v, r) def get_lastbuild(builds): lowest_vercode = -1 lastbuild = None for build in builds: if not build.disable: vercode = build.versionCode if lowest_vercode == -1 or vercode < lowest_vercode: lowest_vercode = vercode if not lastbuild or build.versionCode > lastbuild.versionCode: lastbuild = build return lastbuild def check_update_check_data_url(app): # noqa: D403 """UpdateCheckData must have a valid HTTPS URL to protect checkupdates runs.""" if app.UpdateCheckData and app.UpdateCheckMode == 'HTTP': urlcode, codeex, urlver, verex = app.UpdateCheckData.split('|') for url in (urlcode, urlver): if url != '.': parsed = urllib.parse.urlparse(url) if not parsed.scheme or not parsed.netloc: yield _('UpdateCheckData not a valid URL: {url}').format(url=url) if parsed.scheme != 'https': yield _('UpdateCheckData must use HTTPS URL: {url}').format(url=url) def check_update_check_data_int(app): # noqa: D403 """UpdateCheckData regex must match integers.""" if app.UpdateCheckData: urlcode, codeex, urlver, verex = app.UpdateCheckData.split('|') # codeex can be empty as well if codeex and not versioncode_check_pattern.search(codeex): yield _( f'UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}' ) def check_vercode_operation(app): if not app.VercodeOperation: return invalid_ops = [] for op in app.VercodeOperation: if not common.VERCODE_OPERATION_RE.match(op): invalid_ops += op if invalid_ops: yield _('Invalid VercodeOperation: {invalid_ops}').format( invalid_ops=invalid_ops ) def check_ucm_tags(app): lastbuild = get_lastbuild(app.get('Builds', [])) if ( lastbuild is not None and lastbuild.commit and app.UpdateCheckMode == 'RepoManifest' and not lastbuild.commit.startswith('unknown') and lastbuild.versionCode == app.CurrentVersionCode and not lastbuild.forcevercode and any(s in lastbuild.commit for s in '.,_-/') ): yield _( "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" ).format(commit=lastbuild.commit, ucm=app.UpdateCheckMode) def check_char_limits(app): limits = config['char_limits'] if len(app.Summary) > limits['summary']: yield _("Summary of length {length} is over the {limit} char limit").format( length=len(app.Summary), limit=limits['summary'] ) if len(app.Description) > limits['description']: yield _("Description of length {length} is over the {limit} char limit").format( length=len(app.Description), limit=limits['description'] ) def check_old_links(app): usual_sites = [ 'github.com', 'gitlab.com', 'bitbucket.org', ] old_sites = [ 'gitorious.org', 'code.google.com', ] if any(s in app.Repo for s in usual_sites): for f in ['WebSite', 'SourceCode', 'IssueTracker', 'Changelog']: v = app.get(f) if any(s in v for s in old_sites): yield _("App is in '{repo}' but has a link to {url}").format( repo=app.Repo, url=v ) def check_useless_fields(app): if app.UpdateCheckName == app.id: yield _("UpdateCheckName is set to the known application ID, it can be removed") filling_ucms = re.compile(r'^(Tags.*|RepoManifest.*)') def check_checkupdates_ran(app): if filling_ucms.match(app.UpdateCheckMode): if not app.AutoName and not app.CurrentVersion and app.CurrentVersionCode == 0: yield _( "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." ) def check_empty_fields(app): if not app.Categories: yield _("Categories are not set") def check_categories(app): """App uses 'Categories' key and parsed config uses 'categories' key.""" for categ in app.Categories: if categ not in CATEGORIES_KEYS: yield _("Categories '%s' is not valid" % categ) def check_duplicates(app): links_seen = set() for f in ['Source Code', 'Web Site', 'Issue Tracker', 'Changelog']: v = app.get(f) if not v: continue v = v.lower() if v in links_seen: yield _("Duplicate link in '{field}': {url}").format(field=f, url=v) else: links_seen.add(v) name = common.get_app_display_name(app) if app.Summary and name: if app.Summary.lower() == name.lower(): yield _("Summary '%s' is just the app's name") % app.Summary if app.Summary and app.Description and len(app.Description) == 1: if app.Summary.lower() == app.Description[0].lower(): yield _("Description '%s' is just the app's summary") % app.Summary seenlines = set() for line in app.Description.splitlines(): if len(line) < 1: continue if line in seenlines: yield _("Description has a duplicate line") seenlines.add(line) desc_url = re.compile(r'(^|[^[])\[([^ ]+)( |\]|$)') def check_mediawiki_links(app): wholedesc = ' '.join(app.Description) for um in desc_url.finditer(wholedesc): url = um.group(1) for m, r in http_checks: if m.match(url): yield _("URL {url} in Description: {error}").format(url=url, error=r) def check_builds(app): supported_flags = set(metadata.build_flags) # needed for YAML and JSON for build in app.get('Builds', []): if build.disable: if build.disable.startswith('Generated by import.py'): yield _( "Build generated by `fdroid import` - remove disable line once ready" ) continue for s in ['master', 'main', 'origin', 'HEAD', 'default', 'trunk']: if build.commit and build.commit.startswith(s): yield _( "Branch '{branch}' used as commit in build '{versionName}'" ).format(branch=s, versionName=build.versionName) for srclib in build.srclibs: if '@' in srclib: ref = srclib.split('@')[1].split('/')[0] if ref.startswith(s): yield _( "Branch '{branch}' used as commit in srclib '{srclib}'" ).format(branch=s, srclib=srclib) else: yield ( _('srclibs missing name and/or @') + ' (srclibs: ' + srclib + ')' ) for key in build.keys(): if key not in supported_flags: yield _('%s is not an accepted build field') % key def check_files_dir(app): dir_path = Path('metadata') / app.id if not dir_path.is_dir(): return files = set() for path in dir_path.iterdir(): name = path.name if not ( path.is_file() or name == 'signatures' or locale_pattern.fullmatch(name) ): yield _("Found non-file at %s") % path continue files.add(name) used = { 'signatures', } for build in app.get('Builds', []): for fname in build.patch: if fname not in files: yield _("Unknown file '{filename}' in build '{versionName}'").format( filename=fname, versionName=build.versionName ) else: used.add(fname) for name in files.difference(used): if locale_pattern.fullmatch(name): continue yield _("Unused file at %s") % (dir_path / name) def check_format(app): if common.options.format and not rewritemeta.proper_format(app): yield _("Run rewritemeta to fix formatting") def check_license_tag(app): """Ensure all license tags contain only valid/approved values. It is possible to disable license checking by setting a null or empty value, e.g. `lint_licenses: ` or `lint_licenses: []` """ if 'lint_licenses' in config: lint_licenses = config['lint_licenses'] if lint_licenses is None: return else: lint_licenses = APPROVED_LICENSES if app.License not in lint_licenses: if lint_licenses == APPROVED_LICENSES: yield _( 'Unexpected license tag "{}"! Only use FSF or OSI ' 'approved tags from https://spdx.org/license-list' ).format(app.License) else: yield _( 'Unexpected license tag "{}"! Only use license tags ' 'configured in your config file' ).format(app.License) def check_extlib_dir(apps): dir_path = Path('build/extlib') extlib_files = set() for path in dir_path.glob('**/*'): if path.is_file(): extlib_files.add(path.relative_to(dir_path)) used = set() for app in apps: if app.Disabled: continue archive_policy = common.calculate_archive_policy( app, common.config['archive_older'] ) builds = [build for build in app.Builds if not build.disable] for i in range(len(builds)): build = builds[i] for path in build.extlibs: path = Path(path) if path not in extlib_files: # Don't show error on archived versions if i >= len(builds) - archive_policy: yield _( "{appid}: Unknown extlib {path} in build '{versionName}'" ).format(appid=app.id, path=path, versionName=build.versionName) else: used.add(path) for path in extlib_files.difference(used): if path.name not in [ '.gitignore', 'source.txt', 'origin.txt', 'md5.txt', 'LICENSE', 'LICENSE.txt', 'COPYING', 'COPYING.txt', 'NOTICE', 'NOTICE.txt', ]: yield _("Unused extlib at %s") % (dir_path / path) def check_app_field_types(app): """Check the fields have valid data types.""" for field in app.keys(): v = app.get(field) t = metadata.fieldtype(field) if v is None: continue elif field == 'Builds': if not isinstance(v, list): yield ( _( "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" ).format( appid=app.id, field=field, type='list', fieldtype=v.__class__.__name__, ) ) elif t == metadata.TYPE_LIST and not isinstance(v, list): yield ( _( "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" ).format( appid=app.id, field=field, type='list', fieldtype=v.__class__.__name__, ) ) elif t == metadata.TYPE_STRING and type(v) not in (str, bool, dict): yield ( _( "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" ).format( appid=app.id, field=field, type='str', fieldtype=v.__class__.__name__, ) ) elif t == metadata.TYPE_STRINGMAP and not isinstance(v, dict): yield ( _( "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" ).format( appid=app.id, field=field, type='dict', fieldtype=v.__class__.__name__, ) ) elif t == metadata.TYPE_INT and not isinstance(v, int): yield ( _( "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" ).format( appid=app.id, field=field, type='int', fieldtype=v.__class__.__name__, ) ) def check_antiFeatures(app): """Check the Anti-Features keys match those declared in the config.""" pattern = ANTIFEATURES_PATTERN msg = _("'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}") field = 'AntiFeatures' # App entries use capitalized CamelCase for value in app.get(field, []): if value not in ANTIFEATURES_KEYS: yield msg.format(value=value, field=field, appid=app.id, pattern=pattern) field = 'antifeatures' # Build entries use all lowercase for build in app.get('Builds', []): build_antiFeatures = build.get(field, []) for value in build_antiFeatures: if value not in ANTIFEATURES_KEYS: yield msg.format( value=value, field=field, appid=app.id, pattern=pattern ) def check_for_unsupported_metadata_files(basedir=""): """Check whether any non-metadata files are in metadata/.""" basedir = Path(basedir) global config if not (basedir / 'metadata').exists(): return False return_value = False for f in (basedir / 'metadata').iterdir(): if f.is_dir(): if not Path(str(f) + '.yml').exists(): print(_('"%s/" has no matching metadata file!') % f) return_value = True elif f.suffix == '.yml': packageName = f.stem if not common.is_valid_package_name(packageName): print( '"' + packageName + '" is an invalid package name!\n' + 'https://developer.android.com/studio/build/application-id' ) return_value = True else: print( _( '"{path}" is not a supported file format (use: metadata/*.yml)' ).format(path=f.relative_to(basedir)) ) return_value = True return return_value def check_current_version_code(app): """Check that the CurrentVersionCode is currently available.""" if app.get('ArchivePolicy') == 0: return cv = app.get('CurrentVersionCode') if cv is not None and cv == 0: return builds = app.get('Builds') active_builds = 0 min_versionCode = None if builds: for build in builds: vc = build['versionCode'] if min_versionCode is None or min_versionCode > vc: min_versionCode = vc if not build.get('disable'): active_builds += 1 if cv == build['versionCode']: break if active_builds == 0: return # all builds are disabled if cv is not None and cv < min_versionCode: yield ( _( 'CurrentVersionCode {cv} is less than oldest build entry {versionCode}' ).format(cv=cv, versionCode=min_versionCode) ) def check_updates_expected(app): """Check if update checking makes sense.""" if (app.get('NoSourceSince') or app.get('ArchivePolicy') == 0) and not all( app.get(key, 'None') == 'None' for key in ('AutoUpdateMode', 'UpdateCheckMode') ): yield _( 'App has NoSourceSince or ArchivePolicy "0 versions" or 0 but AutoUpdateMode or UpdateCheckMode are not None' ) def check_updates_ucm_http_aum_pattern(app): # noqa: D403 """AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern.""" if app.UpdateCheckMode == "HTTP" and app.AutoUpdateMode == "Version": yield _("AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern.") def check_certificate_pinned_binaries(app): keys = app.get('AllowedAPKSigningKeys') known_keys = common.config.get('apk_signing_key_block_list', []) if keys: if known_keys: for key in keys: if key in known_keys: yield _('Known debug key is used in AllowedAPKSigningKeys: ') + key return if app.get('Binaries') is not None: yield _( 'App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate.' ) return builds = app.get('Builds') if builds is None: return for build in builds: if build.get('binary') is not None: yield _( 'App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate.' ) return def lint_config(arg): path = Path(arg) passed = True mirrors_name = f'{common.MIRRORS_CONFIG_NAME}.yml' config_name = f'{common.CONFIG_CONFIG_NAME}.yml' categories_name = f'{common.CATEGORIES_CONFIG_NAME}.yml' antifeatures_name = f'{common.ANTIFEATURES_CONFIG_NAME}.yml' yamllintresult = common.run_yamllint(path) if yamllintresult: print(yamllintresult) passed = False with path.open() as fp: data = yaml.load(fp) common.config_type_check(arg, data) if path.name == mirrors_name: import pycountry valid_country_codes = [c.alpha_2 for c in pycountry.countries] for mirror in data: code = mirror.get('countryCode') if code and code not in valid_country_codes: passed = False msg = _( '{path}: "{code}" is not a valid ISO_3166-1 alpha-2 country code!' ).format(path=str(path), code=code) if code.upper() in valid_country_codes: m = [code.upper()] else: m = difflib.get_close_matches( code.upper(), valid_country_codes, 2, 0.5 ) if m: msg += ' ' msg += _('Did you mean {code}?').format(code=', '.join(sorted(m))) print(msg) elif path.name == config_name and path.parent.name != 'config': valid_keys = set(tuple(common.default_config) + bool_keys + check_config_keys) for key in ignore_config_keys: if key in valid_keys: valid_keys.remove(key) for key in data: if key not in valid_keys: passed = False msg = _("ERROR: {key} not a valid key!").format(key=key) m = difflib.get_close_matches(key.lower(), valid_keys, 2, 0.5) if m: msg += ' ' msg += _('Did you mean {code}?').format(code=', '.join(sorted(m))) print(msg) continue if key in bool_keys: t = bool else: t = type(common.default_config.get(key, "")) show_error = False if t is str: if type(data[key]) not in (str, list, dict): passed = False show_error = True elif type(data[key]) != t: passed = False show_error = True if show_error: print( _("ERROR: {key}'s value should be of type {t}!").format( key=key, t=t.__name__ ) ) elif path.name in (config_name, categories_name, antifeatures_name): for key in data: if path.name == config_name and key not in ('archive', 'repo'): passed = False print( _('ERROR: {key} in {path} is not "archive" or "repo"!').format( key=key, path=path ) ) allowed_keys = ['name'] if path.name in [config_name, antifeatures_name]: allowed_keys.append('description') # only for source strings currently if path.parent.name == 'config': allowed_keys.append('icon') for subkey in data[key]: if subkey not in allowed_keys: passed = False print( _( 'ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!' ).format( key=key, subkey=subkey, path=path, allowed_keys=', '.join(allowed_keys), ) ) return passed def main(): global config # Parse command line... parser = ArgumentParser() common.setup_global_opts(parser) parser.add_argument( "-f", "--format", action="store_true", default=False, help=_("Also warn about formatting issues, like rewritemeta -l"), ) parser.add_argument( '--force-yamllint', action="store_true", default=False, help=_( "When linting the entire repository yamllint is disabled by default. " "This option forces yamllint regardless." ), ) parser.add_argument( "appid", nargs='*', help=_("application ID of file to operate on") ) metadata.add_metadata_arguments(parser) options = common.parse_args(parser) metadata.warnings_action = options.W config = common.read_config() load_antiFeatures_config() load_categories_config() if options.force_yamllint: import yamllint # throw error if it is not installed yamllint # make pyflakes ignore this paths = list() for arg in options.appid: if ( arg == common.CONFIG_FILE or Path(arg).parent.name == 'config' or Path(arg).parent.parent.name == 'config' # localized ): paths.append(arg) failed = 0 if paths: for path in paths: options.appid.remove(path) if not lint_config(path): failed += 1 # an empty list of appids means check all apps, avoid that if files were given if not options.appid: sys.exit(failed) if not lint_metadata(options): failed += 1 if failed: sys.exit(failed) def lint_metadata(options): apps = common.read_app_args(options.appid) anywarns = check_for_unsupported_metadata_files() apps_check_funcs = [] if not options.appid: # otherwise it finds tons of unused extlibs apps_check_funcs.append(check_extlib_dir) for check_func in apps_check_funcs: for warn in check_func(apps.values()): anywarns = True print(warn) for appid, app in apps.items(): if app.Disabled: continue # only run yamllint when linting individual apps. if options.appid or options.force_yamllint: # run yamllint on app metadata ymlpath = Path('metadata') / (appid + '.yml') if ymlpath.is_file(): yamllintresult = common.run_yamllint(ymlpath) if yamllintresult: print(yamllintresult) # run yamllint on srclib metadata srclibs = set() for build in app.get('Builds', []): for srclib in build.srclibs: name, _ref, _number, _subdir = common.parse_srclib_spec(srclib) srclibs.add(name + '.yml') for srclib in srclibs: srclibpath = Path('srclibs') / srclib if srclibpath.is_file(): if platform.system() == 'Windows': # Handle symlink on Windows symlink = srclibpath.read_text() if symlink in srclibs: continue elif (srclibpath.parent / symlink).is_file(): srclibpath = srclibpath.parent / symlink yamllintresult = common.run_yamllint(srclibpath) if yamllintresult: print(yamllintresult) app_check_funcs = [ check_app_field_types, check_antiFeatures, check_regexes, check_update_check_data_url, check_update_check_data_int, check_vercode_operation, check_ucm_tags, check_char_limits, check_old_links, check_checkupdates_ran, check_useless_fields, check_empty_fields, check_categories, check_duplicates, check_mediawiki_links, check_builds, check_files_dir, check_format, check_license_tag, check_current_version_code, check_updates_expected, check_updates_ucm_http_aum_pattern, check_certificate_pinned_binaries, ] for check_func in app_check_funcs: for warn in check_func(app): anywarns = True print("%s: %s" % (appid, warn)) return not anywarns # A compiled, public domain list of official SPDX license tags. generated # using: `python3 -m spdx_license_list print --filter-fsf-or-osi` Only contains # licenes approved by either FSF to be free/libre software or OSI to be open # source APPROVED_LICENSES = [ '0BSD', 'AAL', 'AFL-1.1', 'AFL-1.2', 'AFL-2.0', 'AFL-2.1', 'AFL-3.0', 'AGPL-3.0-only', 'AGPL-3.0-or-later', 'APL-1.0', 'APSL-1.0', 'APSL-1.1', 'APSL-1.2', 'APSL-2.0', 'Apache-1.0', 'Apache-1.1', 'Apache-2.0', 'Artistic-1.0', 'Artistic-1.0-Perl', 'Artistic-1.0-cl8', 'Artistic-2.0', 'BSD-1-Clause', 'BSD-2-Clause', 'BSD-2-Clause-Patent', 'BSD-3-Clause', 'BSD-3-Clause-Clear', 'BSD-3-Clause-LBNL', 'BSD-4-Clause', 'BSL-1.0', 'BitTorrent-1.1', 'CAL-1.0', 'CAL-1.0-Combined-Work-Exception', 'CATOSL-1.1', 'CC-BY-4.0', 'CC-BY-SA-4.0', 'CC0-1.0', 'CDDL-1.0', 'CECILL-2.0', 'CECILL-2.1', 'CECILL-B', 'CECILL-C', 'CNRI-Python', 'CPAL-1.0', 'CPL-1.0', 'CUA-OPL-1.0', 'ClArtistic', 'Condor-1.1', 'ECL-1.0', 'ECL-2.0', 'EFL-1.0', 'EFL-2.0', 'EPL-1.0', 'EPL-2.0', 'EUDatagrid', 'EUPL-1.1', 'EUPL-1.2', 'Entessa', 'FSFAP', 'FTL', 'Fair', 'Frameworx-1.0', 'GFDL-1.1-only', 'GFDL-1.1-or-later', 'GFDL-1.2-only', 'GFDL-1.2-or-later', 'GFDL-1.3-only', 'GFDL-1.3-or-later', 'GPL-2.0-only', 'GPL-2.0-or-later', 'GPL-3.0-only', 'GPL-3.0-or-later', 'HPND', 'IJG', 'IPA', 'IPL-1.0', 'ISC', 'Imlib2', 'Intel', 'LGPL-2.0-only', 'LGPL-2.0-or-later', 'LGPL-2.1-only', 'LGPL-2.1-or-later', 'LGPL-3.0-only', 'LGPL-3.0-or-later', 'LPL-1.0', 'LPL-1.02', 'LPPL-1.2', 'LPPL-1.3a', 'LPPL-1.3c', 'LiLiQ-P-1.1', 'LiLiQ-R-1.1', 'LiLiQ-Rplus-1.1', 'MIT', 'MIT-0', 'MPL-1.0', 'MPL-1.1', 'MPL-2.0', 'MPL-2.0-no-copyleft-exception', 'MS-PL', 'MS-RL', 'MirOS', 'Motosoto', 'MulanPSL-2.0', 'Multics', 'NASA-1.3', 'NCSA', 'NGPL', 'NOSL', 'NPL-1.0', 'NPL-1.1', 'NPOSL-3.0', 'NTP', 'Naumen', 'Nokia', 'OCLC-2.0', 'ODbL-1.0', 'OFL-1.0', 'OFL-1.1', 'OFL-1.1-RFN', 'OFL-1.1-no-RFN', 'OGTSL', 'OLDAP-2.3', 'OLDAP-2.7', 'OLDAP-2.8', 'OSET-PL-2.1', 'OSL-1.0', 'OSL-1.1', 'OSL-2.0', 'OSL-2.1', 'OSL-3.0', 'OpenSSL', 'PHP-3.0', 'PHP-3.01', 'PostgreSQL', 'Python-2.0', 'QPL-1.0', 'RPL-1.1', 'RPL-1.5', 'RPSL-1.0', 'RSCPL', 'Ruby', 'SGI-B-2.0', 'SISSL', 'SMLNJ', 'SPL-1.0', 'SimPL-2.0', 'Sleepycat', 'UCL-1.0', 'UPL-1.0', 'Unicode-DFS-2016', 'Unlicense', 'VSL-1.0', 'Vim', 'W3C', 'WTFPL', 'Watcom-1.0', 'X11', 'XFree86-1.1', 'Xnet', 'YPL-1.1', 'ZPL-2.0', 'ZPL-2.1', 'Zend-2.0', 'Zimbra-1.3', 'Zlib', 'gnuplot', 'iMatix', 'xinetd', ] # an F-Droid addition, until we can enforce a better option APPROVED_LICENSES.append("PublicDomain") if __name__ == "__main__": main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742486863.0 fdroidserver-2.4.0/fdroidserver/looseversion.py0000644000175000017500000002753314767036517020550 0ustar00hanshans# PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 # -------------------------------------------- # # 1. This LICENSE AGREEMENT is between the Python Software Foundation # ("PSF"), and the Individual or Organization ("Licensee") accessing and # otherwise using this software ("Python") in source or binary form and # its associated documentation. # # 2. Subject to the terms and conditions of this License Agreement, PSF hereby # grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, # analyze, test, perform and/or display publicly, prepare derivative works, # distribute, and otherwise use Python alone or in any derivative version, # provided, however, that PSF's License Agreement and PSF's notice of copyright, # i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Python Software Foundation; # All Rights Reserved" are retained in Python alone or in any derivative version # prepared by Licensee. # # 3. In the event Licensee prepares a derivative work that is based on # or incorporates Python or any part thereof, and wants to make # the derivative work available to others as provided herein, then # Licensee hereby agrees to include in any such work a brief summary of # the changes made to Python. # # 4. PSF is making Python available to Licensee on an "AS IS" # basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR # IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND # DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS # FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT # INFRINGE ANY THIRD PARTY RIGHTS. # # 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON # FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS # A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, # OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. # # 6. This License Agreement will automatically terminate upon a material # breach of its terms and conditions. # # 7. Nothing in this License Agreement shall be deemed to create any # relationship of agency, partnership, or joint venture between PSF and # Licensee. This License Agreement does not grant permission to use PSF # trademarks or trade name in a trademark sense to endorse or promote # products or services of Licensee, or any third party. # # 8. By copying, installing or otherwise using Python, Licensee # agrees to be bound by the terms and conditions of this License # Agreement. # # SPDX-License-Identifier: Python-2.0 # # downloaded from: # https://github.com/effigies/looseversion/blob/e1a5a176a92dc6825deda4205c1be6d05e9ed352/src/looseversion/__init__.py """Provides classes to represent module version numbers (one class for each style of version numbering). There are currently two such classes implemented: StrictVersion and LooseVersion. Every version number class implements the following interface: * the 'parse' method takes a string and parses it to some internal representation; if the string is an invalid version number, 'parse' raises a ValueError exception * the class constructor takes an optional string argument which, if supplied, is passed to 'parse' * __str__ reconstructs the string that was passed to 'parse' (or an equivalent string -- ie. one that will generate an equivalent version number instance) * __repr__ generates Python code to recreate the version number instance * _cmp compares the current instance with either another instance of the same class or a string (which will be parsed to an instance of the same class, thus must follow the same rules) """ import re import sys __license__ = "Python License 2.0" # The rules according to Greg Stein: # 1) a version number has 1 or more numbers separated by a period or by # sequences of letters. If only periods, then these are compared # left-to-right to determine an ordering. # 2) sequences of letters are part of the tuple for comparison and are # compared lexicographically # 3) recognize the numeric components may have leading zeroes # # The LooseVersion class below implements these rules: a version number # string is split up into a tuple of integer and string components, and # comparison is a simple tuple comparison. This means that version # numbers behave in a predictable and obvious way, but a way that might # not necessarily be how people *want* version numbers to behave. There # wouldn't be a problem if people could stick to purely numeric version # numbers: just split on period and compare the numbers as tuples. # However, people insist on putting letters into their version numbers; # the most common purpose seems to be: # - indicating a "pre-release" version # ('alpha', 'beta', 'a', 'b', 'pre', 'p') # - indicating a post-release patch ('p', 'pl', 'patch') # but of course this can't cover all version number schemes, and there's # no way to know what a programmer means without asking him. # # The problem is what to do with letters (and other non-numeric # characters) in a version number. The current implementation does the # obvious and predictable thing: keep them as strings and compare # lexically within a tuple comparison. This has the desired effect if # an appended letter sequence implies something "post-release": # eg. "0.99" < "0.99pl14" < "1.0", and "5.001" < "5.001m" < "5.002". # # However, if letters in a version number imply a pre-release version, # the "obvious" thing isn't correct. Eg. you would expect that # "1.5.1" < "1.5.2a2" < "1.5.2", but under the tuple/lexical comparison # implemented here, this just isn't so. # # Two possible solutions come to mind. The first is to tie the # comparison algorithm to a particular set of semantic rules, as has # been done in the StrictVersion class above. This works great as long # as everyone can go along with bondage and discipline. Hopefully a # (large) subset of Python module programmers will agree that the # particular flavour of bondage and discipline provided by StrictVersion # provides enough benefit to be worth using, and will submit their # version numbering scheme to its domination. The free-thinking # anarchists in the lot will never give in, though, and something needs # to be done to accommodate them. # # Perhaps a "moderately strict" version class could be implemented that # lets almost anything slide (syntactically), and makes some heuristic # assumptions about non-digits in version number strings. This could # sink into special-case-hell, though; if I was as talented and # idiosyncratic as Larry Wall, I'd go ahead and implement a class that # somehow knows that "1.2.1" < "1.2.2a2" < "1.2.2" < "1.2.2pl3", and is # just as happy dealing with things like "2g6" and "1.13++". I don't # think I'm smart enough to do it right though. # # In any case, I've coded the test suite for this module (see # ../test/test_version.py) specifically to fail on things like comparing # "1.2a2" and "1.2". That's not because the *code* is doing anything # wrong, it's because the simple, obvious design doesn't match my # complicated, hairy expectations for real-world version numbers. It # would be a snap to fix the test suite to say, "Yep, LooseVersion does # the Right Thing" (ie. the code matches the conception). But I'd rather # have a conception that matches common notions about version numbers. if sys.version_info >= (3,): class _Py2Int(int): """Integer object that compares < any string""" def __gt__(self, other): if isinstance(other, str): return False return super().__gt__(other) def __lt__(self, other): if isinstance(other, str): return True return super().__lt__(other) else: _Py2Int = int class LooseVersion(object): """Version numbering for anarchists and software realists. Implements the standard interface for version number classes as described above. A version number consists of a series of numbers, separated by either periods or strings of letters. When comparing version numbers, the numeric components will be compared numerically, and the alphabetic components lexically. The following are all valid version numbers, in no particular order: 1.5.1 1.5.2b2 161 3.10a 8.02 3.4j 1996.07.12 3.2.pl0 3.1.1.6 2g6 11g 0.960923 2.2beta29 1.13++ 5.5.kw 2.0b1pl0 In fact, there is no such thing as an invalid version number under this scheme; the rules for comparison are simple and predictable, but may not always give the results you want (for some definition of "want"). """ component_re = re.compile(r"(\d+ | [a-z]+ | \.)", re.VERBOSE) def __init__(self, vstring=None): if vstring: self.parse(vstring) def __eq__(self, other): c = self._cmp(other) if c is NotImplemented: return NotImplemented return c == 0 def __lt__(self, other): c = self._cmp(other) if c is NotImplemented: return NotImplemented return c < 0 def __le__(self, other): c = self._cmp(other) if c is NotImplemented: return NotImplemented return c <= 0 def __gt__(self, other): c = self._cmp(other) if c is NotImplemented: return NotImplemented return c > 0 def __ge__(self, other): c = self._cmp(other) if c is NotImplemented: return NotImplemented return c >= 0 def parse(self, vstring): # I've given up on thinking I can reconstruct the version string # from the parsed tuple -- so I just store the string here for # use by __str__ self.vstring = vstring components = [x for x in self.component_re.split(vstring) if x and x != "."] for i, obj in enumerate(components): try: components[i] = int(obj) except ValueError: pass self.version = components def __str__(self): return self.vstring def __repr__(self): return "LooseVersion ('%s')" % str(self) def _cmp(self, other): other = self._coerce(other) if other is NotImplemented: return NotImplemented if self.version == other.version: return 0 if self.version < other.version: return -1 if self.version > other.version: return 1 return NotImplemented @classmethod def _coerce(cls, other): if isinstance(other, cls): return other elif isinstance(other, str): return cls(other) elif "distutils" in sys.modules: # Using this check to avoid importing distutils and suppressing the warning try: from distutils.version import LooseVersion as deprecated except ImportError: return NotImplemented if isinstance(other, deprecated): return cls(str(other)) return NotImplemented class LooseVersion2(LooseVersion): """LooseVersion variant that restores Python 2 semantics In Python 2, comparing LooseVersions where paired components could be string and int always resulted in the string being "greater". In Python 3, this produced a TypeError. """ def parse(self, vstring): # I've given up on thinking I can reconstruct the version string # from the parsed tuple -- so I just store the string here for # use by __str__ self.vstring = vstring components = [x for x in self.component_re.split(vstring) if x and x != "."] for i, obj in enumerate(components): try: components[i] = _Py2Int(obj) except ValueError: pass self.version = components ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/fdroidserver/metadata.py0000644000175000017500000012137614770502071017564 0ustar00hanshans#!/usr/bin/env python3 # # metadata.py - part of the FDroid server tools # Copyright (C) 2013, Ciaran Gultnieks, ciaran@ciarang.com # Copyright (C) 2013-2014 Daniel Martí # Copyright (C) 2017-2018 Michael Pöhn # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import git from pathlib import Path import math import platform import os import re import logging import ruamel.yaml from collections import OrderedDict from . import common from . import _ from .exception import MetaDataException from ._yaml import yaml srclibs = None warnings_action = None # validates usernames based on a loose collection of rules from GitHub, GitLab, # Liberapay and issuehunt. This is mostly to block abuse. VALID_USERNAME_REGEX = re.compile(r'^[a-z\d](?:[a-z\d/._-]){0,38}$', re.IGNORECASE) def _warn_or_exception(value, cause=None): """Output warning or Exception depending on -W.""" if warnings_action == 'ignore': pass elif warnings_action == 'error': if cause: raise MetaDataException(value) from cause else: raise MetaDataException(value) else: logging.warning(value) yaml_app_field_order = [ 'Disabled', 'AntiFeatures', 'Categories', 'License', 'AuthorName', 'AuthorEmail', 'AuthorWebSite', 'WebSite', 'SourceCode', 'IssueTracker', 'Translation', 'Changelog', 'Donate', 'Liberapay', 'OpenCollective', 'Bitcoin', 'Litecoin', '\n', 'Name', 'AutoName', 'Summary', 'Description', '\n', 'RequiresRoot', '\n', 'RepoType', 'Repo', 'Binaries', '\n', 'Builds', '\n', 'AllowedAPKSigningKeys', '\n', 'MaintainerNotes', '\n', 'ArchivePolicy', 'AutoUpdateMode', 'UpdateCheckMode', 'UpdateCheckIgnore', 'VercodeOperation', 'UpdateCheckName', 'UpdateCheckData', 'CurrentVersion', 'CurrentVersionCode', '\n', 'NoSourceSince', ] yaml_app_fields = [x for x in yaml_app_field_order if x != '\n'] class App(dict): def __init__(self, copydict=None): if copydict: super().__init__(copydict) return super().__init__() self.Disabled = None self.AntiFeatures = dict() self.Provides = None self.Categories = [] self.License = 'Unknown' self.AuthorName = None self.AuthorEmail = None self.AuthorWebSite = None self.WebSite = '' self.SourceCode = '' self.IssueTracker = '' self.Translation = '' self.Changelog = '' self.Donate = None self.Liberapay = None self.OpenCollective = None self.Bitcoin = None self.Litecoin = None self.Name = None self.AutoName = '' self.Summary = '' self.Description = '' self.RequiresRoot = False self.RepoType = '' self.Repo = '' self.Binaries = None self.AllowedAPKSigningKeys = [] self.MaintainerNotes = '' self.ArchivePolicy = None self.AutoUpdateMode = 'None' self.UpdateCheckMode = 'None' self.UpdateCheckIgnore = None self.VercodeOperation = [] self.UpdateCheckName = None self.UpdateCheckData = None self.CurrentVersion = '' self.CurrentVersionCode = None self.NoSourceSince = '' self.id = None self.metadatapath = None self.Builds = [] self.added = None self.lastUpdated = None def __getattr__(self, name): if name in self: return self[name] else: raise AttributeError("No such attribute: " + name) def __setattr__(self, name, value): self[name] = value def __delattr__(self, name): if name in self: del self[name] else: raise AttributeError("No such attribute: " + name) TYPE_STRING = 2 TYPE_BOOL = 3 TYPE_LIST = 4 TYPE_SCRIPT = 5 TYPE_MULTILINE = 6 TYPE_BUILD = 7 TYPE_INT = 8 TYPE_STRINGMAP = 9 fieldtypes = { 'Description': TYPE_MULTILINE, 'MaintainerNotes': TYPE_MULTILINE, 'Categories': TYPE_LIST, 'AntiFeatures': TYPE_STRINGMAP, 'RequiresRoot': TYPE_BOOL, 'AllowedAPKSigningKeys': TYPE_LIST, 'Builds': TYPE_BUILD, 'VercodeOperation': TYPE_LIST, 'CurrentVersionCode': TYPE_INT, 'ArchivePolicy': TYPE_INT, } def fieldtype(name): name = name.replace(' ', '') if name in fieldtypes: return fieldtypes[name] return TYPE_STRING # In the order in which they are laid out on files build_flags = [ 'versionName', 'versionCode', 'disable', 'commit', 'timeout', 'subdir', 'submodules', 'sudo', 'init', 'patch', 'gradle', 'maven', 'output', 'binary', 'srclibs', 'oldsdkloc', 'encoding', 'forceversion', 'forcevercode', 'rm', 'extlibs', 'prebuild', 'androidupdate', 'target', 'scanignore', 'scandelete', 'build', 'buildjni', 'ndk', 'preassemble', 'gradleprops', 'antcommands', 'postbuild', 'novcheck', 'antifeatures', ] class Build(dict): def __init__(self, copydict=None): super().__init__() self.disable = '' self.commit = None self.timeout = None self.subdir = None self.submodules = False self.sudo = '' self.init = '' self.patch = [] self.gradle = [] self.maven = None self.output = None self.binary = None self.srclibs = [] self.oldsdkloc = False self.encoding = None self.forceversion = False self.forcevercode = False self.rm = [] self.extlibs = [] self.prebuild = '' self.androidupdate = [] self.target = None self.scanignore = [] self.scandelete = [] self.build = '' self.buildjni = [] self.ndk = None self.preassemble = [] self.gradleprops = [] self.antcommands = [] self.postbuild = '' self.novcheck = False self.antifeatures = dict() if copydict: super().__init__(copydict) return def __getattr__(self, name): if name in self: return self[name] else: raise AttributeError("No such attribute: " + name) def __setattr__(self, name, value): self[name] = value def __delattr__(self, name): if name in self: del self[name] else: raise AttributeError("No such attribute: " + name) @classmethod def to_yaml(cls, representer, node): return representer.represent_dict(node) def build_method(self): for f in ['maven', 'gradle']: if self.get(f): return f if self.output: return 'raw' return 'ant' # like build_method, but prioritize output= def output_method(self): if self.output: return 'raw' for f in ['maven', 'gradle']: if self.get(f): return f return 'ant' def ndk_path(self) -> str: """Return the path string of the first configured NDK or an empty string.""" ndk = self.ndk if isinstance(ndk, list): ndk = self.ndk[0] path = common.config['ndk_paths'].get(ndk) if path and not isinstance(path, str): raise TypeError('NDK path is not string') if path: return path for vsn, path in common.config['ndk_paths'].items(): if not vsn.endswith("_orig") and path and os.path.basename(path) == ndk: return path return '' flagtypes = { 'versionCode': TYPE_INT, 'extlibs': TYPE_LIST, 'srclibs': TYPE_LIST, 'patch': TYPE_LIST, 'rm': TYPE_LIST, 'buildjni': TYPE_LIST, 'preassemble': TYPE_LIST, 'androidupdate': TYPE_LIST, 'scanignore': TYPE_LIST, 'scandelete': TYPE_LIST, 'gradle': TYPE_LIST, 'antcommands': TYPE_LIST, 'gradleprops': TYPE_LIST, 'sudo': TYPE_SCRIPT, 'init': TYPE_SCRIPT, 'prebuild': TYPE_SCRIPT, 'build': TYPE_SCRIPT, 'postbuild': TYPE_SCRIPT, 'submodules': TYPE_BOOL, 'oldsdkloc': TYPE_BOOL, 'forceversion': TYPE_BOOL, 'forcevercode': TYPE_BOOL, 'novcheck': TYPE_BOOL, 'antifeatures': TYPE_STRINGMAP, 'timeout': TYPE_INT, } def flagtype(name): if name in flagtypes: return flagtypes[name] return TYPE_STRING class FieldValidator: """Designate App metadata field types and checks that it matches. 'name' - The long name of the field type 'matching' - List of possible values or regex expression 'sep' - Separator to use if value may be a list 'fields' - Metadata fields (Field:Value) of this type """ def __init__(self, name, matching, fields): self.name = name self.matching = matching self.compiled = re.compile(matching) self.fields = fields def check(self, v, appid): if not v: return if type(v) == list: values = v else: values = [v] for v in values: if not self.compiled.match(v): _warn_or_exception( _( "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" ).format( value=v, field=self.name, appid=appid, pattern=self.matching ) ) # Generic value types valuetypes = { FieldValidator("Liberapay", VALID_USERNAME_REGEX, ['Liberapay']), FieldValidator("Open Collective", VALID_USERNAME_REGEX, ['OpenCollective']), FieldValidator("HTTP link", r'^http[s]?://', ["WebSite", "SourceCode", "IssueTracker", "Translation", "Changelog", "Donate"]), FieldValidator("Email", r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$', ["AuthorEmail"]), FieldValidator("Bitcoin address", r'^(bc1|[13])[a-zA-HJ-NP-Z0-9]{25,39}$', ["Bitcoin"]), FieldValidator("Litecoin address", r'^([LM3][a-km-zA-HJ-NP-Z1-9]{26,33}|ltc1[a-z0-9]{39})$', ["Litecoin"]), FieldValidator("Repo Type", r'^(git|git-svn|svn|hg|bzr|srclib)$', ["RepoType"]), FieldValidator("Binaries", r'^http[s]?://', ["Binaries"]), FieldValidator("AllowedAPKSigningKeys", r'^[a-fA-F0-9]{64}$', ["AllowedAPKSigningKeys"]), FieldValidator("Auto Update Mode", r"^(Version.*|None)$", ["AutoUpdateMode"]), FieldValidator("Update Check Mode", r"^(Tags|Tags .+|RepoManifest|RepoManifest/.+|HTTP|Static|None)$", ["UpdateCheckMode"]) } # Check an app's metadata information for integrity errors def check_metadata(app): for v in valuetypes: for k in v.fields: v.check(app[k], app.id) def parse_yaml_srclib(metadatapath): thisinfo = {'RepoType': '', 'Repo': '', 'Subdir': None, 'Prepare': None} if not metadatapath.exists(): _warn_or_exception( _("Invalid scrlib metadata: '{file}' does not exist").format( file=metadatapath ) ) return thisinfo with metadatapath.open("r", encoding="utf-8") as f: try: data = yaml.load(f) if type(data) is not dict: if platform.system() == 'Windows': # Handle symlink on Windows symlink = metadatapath.parent / metadatapath.read_text(encoding='utf-8') if symlink.is_file(): with symlink.open("r", encoding="utf-8") as s: data = yaml.load(s) if type(data) is not dict: raise ruamel.yaml.YAMLError( _('{file} is blank or corrupt!').format(file=metadatapath) ) except ruamel.yaml.YAMLError as e: _warn_or_exception(_("Invalid srclib metadata: could not " "parse '{file}'") .format(file=metadatapath) + '\n' + common.run_yamllint(metadatapath, indent=4), cause=e) return thisinfo for key in data: if key not in thisinfo: _warn_or_exception( _("Invalid srclib metadata: unknown key '{key}' in '{file}'").format( key=key, file=metadatapath ) ) return thisinfo else: if key == 'Subdir': if isinstance(data[key], str): thisinfo[key] = data[key].split(',') elif isinstance(data[key], list): thisinfo[key] = data[key] elif data[key] is None: thisinfo[key] = [''] elif key == 'Prepare' or flagtype(key) == TYPE_SCRIPT: if isinstance(data[key], list): thisinfo[key] = data[key] else: thisinfo[key] = [data[key]] if data[key] else [] else: thisinfo[key] = str(data[key] or '') return thisinfo def read_srclibs(): """Read all srclib metadata. The information read will be accessible as metadata.srclibs, which is a dictionary, keyed on srclib name, with the values each being a dictionary in the same format as that returned by the parse_yaml_srclib function. A MetaDataException is raised if there are any problems with the srclib metadata. """ global srclibs # They were already loaded if srclibs is not None: return srclibs = {} srcdir = Path('srclibs') srcdir.mkdir(exist_ok=True) for metadatapath in sorted(srcdir.glob('*.yml')): srclibs[metadatapath.stem] = parse_yaml_srclib(metadatapath) def read_metadata(appid_to_vercode={}, sort_by_time=False): """Return a list of App instances sorted newest first. This reads all of the metadata files in a 'data' repository, then builds a list of App instances from those files. The list is sorted based on creation time, newest first. Most of the time, the newer files are the most interesting. appid_to_vercode is a dict with appids a keys and versionCodes as values. """ # Always read the srclibs before the apps, since they can use a srlib as # their source repository. read_srclibs() apps = OrderedDict() for basedir in ('metadata', 'tmp'): Path(basedir).mkdir(exist_ok=True) if appid_to_vercode: metadatafiles = common.get_metadata_files(appid_to_vercode) else: metadatafiles = list(Path('metadata').glob('*.yml')) + list( Path('.').glob('.fdroid.yml') ) if sort_by_time: entries = ((path.stat().st_mtime, path) for path in metadatafiles) metadatafiles = [] for _ignored, path in sorted(entries, reverse=True): metadatafiles.append(path) else: # most things want the index alpha sorted for stability metadatafiles = sorted(metadatafiles) for metadatapath in metadatafiles: appid = metadatapath.stem if appid != '.fdroid' and not common.is_valid_package_name(appid): _warn_or_exception( _("{appid} from {path} is not a valid Java Package Name!").format( appid=appid, path=metadatapath ) ) if appid in apps: _warn_or_exception( _("Found multiple metadata files for {appid}").format(appid=appid) ) app = parse_metadata(metadatapath) check_metadata(app) apps[app.id] = app return apps def parse_metadata(metadatapath): """Parse metadata file, also checking the source repo for .fdroid.yml. This function finds the relevant files, gets them parsed, converts dicts into App and Build instances, and combines the results into a single App instance. If this is a metadata file from fdroiddata, it will first load the source repo type and URL from fdroiddata, then read .fdroid.yml if it exists, then include the rest of the metadata as specified in fdroiddata, so that fdroiddata has precedence over the metadata in the source code. .fdroid.yml is embedded in the app's source repo, so it is "user-generated". That means that it can have weird things in it that need to be removed so they don't break the overall process, e.g. if the upstream developer includes some broken field, it can be overridden in the metadata file. Parameters ---------- metadatapath The file path to read. The "Application ID" aka "Package Name" for the application comes from this filename. Raises ------ FDroidException when there are syntax errors. Returns ------- Returns a dictionary containing all the details of the application. There are two major kinds of information in the dictionary. Keys beginning with capital letters correspond directory to identically named keys in the metadata file. Keys beginning with lower case letters are generated in one way or another, and are not found verbatim in the metadata. """ metadatapath = Path(metadatapath) app = App() app.metadatapath = metadatapath.as_posix() if metadatapath.suffix == '.yml': with metadatapath.open('r', encoding='utf-8') as mf: app.update(parse_yaml_metadata(mf)) else: _warn_or_exception( _('Unknown metadata format: {path} (use: *.yml)').format(path=metadatapath) ) if metadatapath.stem != '.fdroid': app.id = metadatapath.stem parse_localized_antifeatures(app) if metadatapath.name != '.fdroid.yml' and app.Repo: build_dir = common.get_build_dir(app) metadata_in_repo = build_dir / '.fdroid.yml' if metadata_in_repo.is_file(): try: commit_id = common.get_head_commit_id(git.Repo(build_dir)) logging.debug( _('Including metadata from %s@%s') % (metadata_in_repo, commit_id) ) # See https://github.com/PyCQA/pylint/issues/2856 . # pylint: disable-next=no-member except git.exc.InvalidGitRepositoryError: logging.debug( _('Including metadata from {path}').format(path=metadata_in_repo) ) app_in_repo = parse_metadata(metadata_in_repo) for k, v in app_in_repo.items(): if k not in app: app[k] = v builds = [] for build in app.get('Builds', []): builds.append(Build(build)) if builds: app['Builds'] = builds # if only .fdroid.yml was found, then this finds the appid if not app.id: if app.get('Builds'): build = app['Builds'][-1] if build.subdir: root_dir = Path(build.subdir) else: root_dir = Path('.') paths = common.manifest_paths(root_dir, build.gradle) _ignored, _ignored, app.id = common.parse_androidmanifests(paths, app) return app def parse_yaml_metadata(mf): """Parse the .yml file and post-process it. This function handles parsing a metadata YAML file and converting all the various data types into a consistent internal representation. The results are meant to update an existing App instance or used as a plain dict. Clean metadata .yml files can be used directly, but in order to make a better user experience for people editing .yml files, there is post processing. That makes the parsing perform something like Strict YAML. """ try: yamldata = common.yaml.load(mf) except ruamel.yaml.YAMLError as e: _warn_or_exception( _("could not parse '{path}'").format(path=mf.name) + '\n' + common.run_yamllint(mf.name, indent=4), cause=e, ) if yamldata is None or yamldata == '': yamldata = dict() if not isinstance(yamldata, dict): _warn_or_exception( _("'{path}' has invalid format, it should be a dictionary!").format( path=mf.name ) ) logging.error(_('Using blank dictionary instead of contents of {path}!').format( path=mf.name) ) yamldata = dict() deprecated_in_yaml = ['Provides'] for field in tuple(yamldata.keys()): if field not in yaml_app_fields + deprecated_in_yaml: msg = _("Unrecognised app field '{fieldname}' in '{path}'").format( fieldname=field, path=mf.name ) if Path(mf.name).name == '.fdroid.yml': logging.error(msg) del yamldata[field] else: _warn_or_exception(msg) for deprecated_field in deprecated_in_yaml: if deprecated_field in yamldata: del yamldata[deprecated_field] logging.warning( _( "Ignoring '{field}' in '{metapath}' " "metadata because it is deprecated." ).format(field=deprecated_field, metapath=mf.name) ) msg = _("Unrecognised build flag '{build_flag}' in '{path}'") for build in yamldata.get('Builds', []): for build_flag in build: if build_flag not in build_flags: _warn_or_exception(msg.format(build_flag=build_flag, path=mf.name)) post_parse_yaml_metadata(yamldata) return yamldata def parse_localized_antifeatures(app): """Read in localized Anti-Features files from the filesystem. To support easy integration with Weblate and other translation systems, there is a special type of metadata that can be maintained in a Fastlane-style directory layout, where each field is represented by a text file on directories that specified which app it belongs to, which locale, etc. This function reads those in and puts them into the internal dict, to be merged with any related data that came from the metadata.yml file. This needs to be run after parse_yaml_metadata() since that normalizes the data structure. Also, these values are lower priority than what comes from the metadata file. So this should not overwrite anything parse_yaml_metadata() puts into the App instance. metadata///antifeatures/_.txt metadata///antifeatures/.txt └── metadata/ └── / ├── en-US/ │ └── antifeatures/ │ ├── 123_Ads.txt -> "includes ad lib" │ ├── 123_Tracking.txt -> "standard suspects" │ └── NoSourceSince.txt -> "it vanished" │ └── zh-CN/ └── antifeatures/ └── 123_Ads.txt -> "包括广告库" Gets parsed into the metadata data structure: AntiFeatures: NoSourceSince: en-US: it vanished Builds: - versionCode: 123 antifeatures: Ads: en-US: includes ad lib zh-CN: 包括广告库 Tracking: en-US: standard suspects """ app_dir = Path('metadata', app['id']) if not app_dir.is_dir(): return af_dup_msg = _('Duplicate Anti-Feature declaration at {path} was ignored!') if app.get('AntiFeatures'): app_has_AntiFeatures = True else: app_has_AntiFeatures = False has_versionCode = re.compile(r'^-?[0-9]+_.*') has_antifeatures_from_app = set() for build in app.get('Builds', []): antifeatures = build.get('antifeatures') if antifeatures: has_antifeatures_from_app.add(build['versionCode']) for f in sorted(app_dir.glob('*/antifeatures/*.txt')): path = f.as_posix() left = path.index('/', 9) # 9 is length of "metadata/" right = path.index('/', left + 1) locale = path[left + 1 : right] description = f.read_text() if has_versionCode.match(f.stem): i = f.stem.index('_') versionCode = int(f.stem[:i]) antifeature = f.stem[i + 1 :] if versionCode in has_antifeatures_from_app: logging.error(af_dup_msg.format(path=f)) continue if 'Builds' not in app: app['Builds'] = [] found = False for build in app['Builds']: # loop though builds again, there might be duplicate versionCodes if versionCode == build['versionCode']: found = True if 'antifeatures' not in build: build['antifeatures'] = dict() if antifeature not in build['antifeatures']: build['antifeatures'][antifeature] = dict() build['antifeatures'][antifeature][locale] = description if not found: app['Builds'].append( { 'versionCode': versionCode, 'antifeatures': { antifeature: {locale: description}, }, } ) elif app_has_AntiFeatures: logging.error(af_dup_msg.format(path=f)) continue else: if 'AntiFeatures' not in app: app['AntiFeatures'] = dict() if f.stem not in app['AntiFeatures']: app['AntiFeatures'][f.stem] = dict() app['AntiFeatures'][f.stem][locale] = f.read_text() def _normalize_type_int(k, v): """Normalize anything that can be reliably converted to an integer.""" if isinstance(v, int) and not isinstance(v, bool): return v if v is None: return None if isinstance(v, str): try: return int(v) except ValueError: pass msg = _('{build_flag} must be an integer, found: {value}') _warn_or_exception(msg.format(build_flag=k, value=v)) def _normalize_type_string(v): """Normalize any data to TYPE_STRING. YAML 1.2's booleans are all lowercase. Things like versionName are strings, but without quotes can be numbers. Like "versionName: 1.0" would be a YAML float, but should be a string. SHA-256 values are string values, but YAML 1.2 can interpret some unquoted values as decimal ints. This converts those to a string if they are over 50 digits. In the wild, the longest 0 padding on a SHA-256 key fingerprint I found was 8 zeros. """ if isinstance(v, bool): if v: return 'true' return 'false' if isinstance(v, float): # YAML 1.2 values for NaN, Inf, and -Inf if math.isnan(v): return '.nan' if math.isinf(v): if v > 0: return '.inf' return '-.inf' if v and isinstance(v, int): if math.log10(v) > 50: # only if the int has this many digits return '%064d' % v return str(v) def _normalize_type_stringmap(k, v): """Normalize any data to TYPE_STRINGMAP. The internal representation of this format is a dict of dicts, where the outer dict's keys are things like tag names of Anti-Features, the inner dict's keys are locales, and the ultimate values are human readable text. Metadata entries like AntiFeatures: can be written in many forms, including a simple one-entry string, a list of strings, a dict with keys and descriptions as values, or a dict with localization. Returns ------- A dictionary with string keys, where each value is either a string message or a dict with locale keys and string message values. """ if v is None: return dict() if isinstance(v, str) or isinstance(v, int) or isinstance(v, float): return {_normalize_type_string(v): dict()} if isinstance(v, list) or isinstance(v, tuple) or isinstance(v, set): retdict = dict() for i in v: if isinstance(i, dict): # transitional format if len(i) != 1: _warn_or_exception( _( "'{value}' is not a valid {field}, should be {pattern}" ).format(field=k, value=v, pattern='key: value') ) afname = _normalize_type_string(next(iter(i))) desc = _normalize_type_string(next(iter(i.values()))) retdict[afname] = {common.DEFAULT_LOCALE: desc} else: retdict[_normalize_type_string(i)] = {} return retdict retdict = dict() for af, afdict in v.items(): key = _normalize_type_string(af) if afdict: if isinstance(afdict, dict): retdict[key] = afdict else: retdict[key] = {common.DEFAULT_LOCALE: _normalize_type_string(afdict)} else: retdict[key] = dict() return retdict def _normalize_type_list(k, v): """Normalize any data to TYPE_LIST, which is always a list of strings.""" if isinstance(v, dict): msg = _('{build_flag} must be list or string, found: {value}') _warn_or_exception(msg.format(build_flag=k, value=v)) elif type(v) not in (list, tuple, set): v = [v] return [_normalize_type_string(i) for i in v] def post_parse_yaml_metadata(yamldata): """Convert human-readable metadata data structures into consistent data structures. "Be conservative in what is written out, be liberal in what is parsed." https://en.wikipedia.org/wiki/Robustness_principle This also handles conversions that make metadata YAML behave something like StrictYAML. Specifically, a field should have a fixed value type, regardless of YAML 1.2's type auto-detection. TODO: None values should probably be treated as the string 'null', since YAML 1.2 uses that for nulls """ for k, v in yamldata.items(): _fieldtype = fieldtype(k) if _fieldtype == TYPE_LIST: if v or v == 0: yamldata[k] = _normalize_type_list(k, v) elif _fieldtype == TYPE_INT: # ArchivePolicy used to require " versions" in the value. if k == 'ArchivePolicy' and isinstance(v, str): v = v.split(' ', maxsplit=1)[0] v = _normalize_type_int(k, v) if v or v == 0: yamldata[k] = v elif _fieldtype == TYPE_STRING: if v or v == 0: yamldata[k] = _normalize_type_string(v) elif _fieldtype == TYPE_STRINGMAP: if v or v == 0: # TODO probably want just `if v:` yamldata[k] = _normalize_type_stringmap(k, v) elif _fieldtype == TYPE_BOOL: yamldata[k] = bool(v) else: if type(v) in (float, int): yamldata[k] = str(v) builds = [] for build in yamldata.get('Builds', []): for k, v in build.items(): if v is None: continue _flagtype = flagtype(k) if _flagtype == TYPE_STRING: if v or v == 0: build[k] = _normalize_type_string(v) elif _flagtype == TYPE_INT: v = _normalize_type_int(k, v) if v or v == 0: build[k] = v elif _flagtype in (TYPE_LIST, TYPE_SCRIPT): if v or v == 0: build[k] = _normalize_type_list(k, v) elif _flagtype == TYPE_STRINGMAP: if v or v == 0: build[k] = _normalize_type_stringmap(k, v) elif _flagtype == TYPE_BOOL: build[k] = bool(v) builds.append(build) if builds: yamldata['Builds'] = sorted(builds, key=lambda build: build['versionCode']) no_source_since = yamldata.get("NoSourceSince") # do not overwrite the description if it is there if no_source_since and not yamldata.get('AntiFeatures', {}).get('NoSourceSince'): if 'AntiFeatures' not in yamldata: yamldata['AntiFeatures'] = dict() yamldata['AntiFeatures']['NoSourceSince'] = { common.DEFAULT_LOCALE: no_source_since } def _format_multiline(value): """TYPE_MULTILINE with newlines in them are saved as YAML literal strings.""" if '\n' in value: return ruamel.yaml.scalarstring.preserve_literal(str(value)) return str(value) def _format_list(value): """TYPE_LIST should not contain null values.""" return [v for v in value if v] def _format_script(value): """TYPE_SCRIPT with one value are converted to YAML string values.""" value = [v for v in value if v] if len(value) == 1: return value[0] return value def _format_stringmap(appid, field, stringmap, versionCode=None): """Format TYPE_STRINGMAP taking into account localized files in the metadata dir. If there are any localized versions on the filesystem already, then move them all there. Otherwise, keep them in the .yml file. The directory for the localized files that is named after the field is all lower case, following the convention set by Fastlane metadata, and used by fdroidserver. """ app_dir = Path('metadata', appid) try: next(app_dir.glob('*/%s/*.txt' % field.lower())) files = [] overwrites = [] for name, descdict in stringmap.items(): for locale, desc in descdict.items(): outdir = app_dir / locale / field.lower() if versionCode: filename = '%d_%s.txt' % (versionCode, name) else: filename = '%s.txt' % name outfile = outdir / filename files.append(str(outfile)) if outfile.exists(): if desc != outfile.read_text(): overwrites.append(str(outfile)) else: if not outfile.parent.exists(): outfile.parent.mkdir(parents=True) outfile.write_text(desc) if overwrites: _warn_or_exception( _( 'Conflicting "{field}" definitions between .yml and localized files:' ).format(field=field) + '\n' + '\n'.join(sorted(overwrites)) ) logging.warning( _('Moving Anti-Features declarations to localized files:') + '\n' + '\n'.join(sorted(files)) ) return except StopIteration: pass make_list = True outlist = [] for name in sorted(stringmap): outlist.append(name) descdict = stringmap.get(name) if descdict and any(descdict.values()): make_list = False break if make_list: return sorted(outlist, key=str.lower) return stringmap def _del_duplicated_NoSourceSince(app): # noqa: D403 NoSourceSince is the word. """NoSourceSince gets auto-added to AntiFeatures, but can also be manually added.""" key = 'NoSourceSince' if key in app: no_source_since = app.get(key) af_no_source_since = app.get('AntiFeatures', dict()).get(key) if af_no_source_since == {common.DEFAULT_LOCALE: no_source_since}: del app['AntiFeatures'][key] def _builds_to_yaml(app): """Reformat Builds: flags for output to YAML 1.2. This will strip any flag/value that is not set or is empty. TYPE_BOOL fields are removed when they are false. 0 is valid value, it should not be stripped, so there are special cases to handle that. """ builds = ruamel.yaml.comments.CommentedSeq() for build in app.get('Builds', []): b = ruamel.yaml.comments.CommentedMap() for field in build_flags: v = build.get(field) if v is None or v is False or v == '' or v == dict() or v == list(): continue _flagtype = flagtype(field) if _flagtype == TYPE_MULTILINE: v = _format_multiline(v) elif _flagtype == TYPE_LIST: v = _format_list(v) elif _flagtype == TYPE_SCRIPT: v = _format_script(v) elif _flagtype == TYPE_STRINGMAP: v = _format_stringmap(app['id'], field, v, build['versionCode']) if v or v == 0: b[field] = v builds.append(b) # insert extra empty lines between build entries for i in range(1, len(builds)): builds.yaml_set_comment_before_after_key(i, 'bogus') builds.ca.items[i][1][-1].value = '\n' return builds def _app_to_yaml(app): cm = ruamel.yaml.comments.CommentedMap() insert_newline = False for field in yaml_app_field_order: if field == '\n': # next iteration will need to insert a newline insert_newline = True else: value = app.get(field) if value or field in ('Builds', 'ArchivePolicy'): _fieldtype = fieldtype(field) if field == 'Builds': if app.get('Builds'): cm.update({field: _builds_to_yaml(app)}) elif field == 'Categories': cm[field] = sorted(value, key=str.lower) elif field == 'AntiFeatures': v = _format_stringmap(app['id'], field, value) if v: cm[field] = v elif field == 'AllowedAPKSigningKeys': value = [str(i).lower() for i in value] if len(value) == 1: cm[field] = value[0] else: cm[field] = value elif field == 'ArchivePolicy': if value is None: continue cm[field] = value elif _fieldtype == TYPE_MULTILINE: v = _format_multiline(value) if v: cm[field] = v elif _fieldtype == TYPE_SCRIPT: v = _format_script(value) if v: cm[field] = v else: if value: cm[field] = value if insert_newline: # we need to prepend a newline in front of this field insert_newline = False # inserting empty lines is not supported so we add a # bogus comment and over-write its value cm.yaml_set_comment_before_after_key(field, 'bogus') cm.ca.items[field][1][-1].value = '\n' return cm def write_yaml(mf, app): """Write metadata in yaml format. This requires the 'rt' round trip dumper to maintain order and needs custom indent settings, so it needs to instantiate its own YAML instance. Therefore, this function deliberately avoids using any of the common YAML parser setups. Parameters ---------- mf active file discriptor for writing app app metadata to written to the YAML file """ _del_duplicated_NoSourceSince(app) yaml_app = _app_to_yaml(app) yamlmf = ruamel.yaml.YAML(typ='rt') yamlmf.indent(mapping=2, sequence=4, offset=2) yamlmf.dump(yaml_app, stream=mf) def write_metadata(metadatapath, app): metadatapath = Path(metadatapath) if metadatapath.suffix == '.yml': with metadatapath.open('w') as mf: return write_yaml(mf, app) _warn_or_exception(_('Unknown metadata format: %s') % metadatapath) def add_metadata_arguments(parser): """Add common command line flags related to metadata processing.""" parser.add_argument( "-W", choices=['error', 'warn', 'ignore'], default='error', help=_("force metadata errors (default) to be warnings, or to be ignored."), ) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742814793.0 fdroidserver-2.4.0/fdroidserver/mirror.py0000644000175000017500000002201014770237111017277 0ustar00hanshans#!/usr/bin/env python3 import ipaddress import logging import os import posixpath import socket import subprocess import sys from argparse import ArgumentParser import urllib.parse from . import _ from . import common from . import index from . import update def _run_wget(path, urls, verbose=False): if verbose: verbose = '--verbose' else: verbose = '--no-verbose' if not urls: return logging.debug(_('Running wget in {path}').format(path=path)) cwd = os.getcwd() os.makedirs(path, exist_ok=True) os.chdir(path) urls_file = '.fdroid-mirror-wget-input-file' with open(urls_file, 'w') as fp: for url in urls: fp.write(url.split('?')[0] + '\n') # wget puts query string in the filename subprocess.call( [ 'wget', verbose, '--continue', '--user-agent="fdroid mirror"', '--input-file=' + urls_file, ] ) os.remove(urls_file) os.chdir(cwd) # leave the working env the way we found it def main(): parser = ArgumentParser() common.setup_global_opts(parser) parser.add_argument( "url", nargs='?', help=_( 'Base URL to mirror, can include the index signing key ' + 'using the query string: ?fingerprint=' ), ) parser.add_argument( "--all", action='store_true', default=False, help=_("Mirror the full repo and archive, all file types."), ) parser.add_argument( "--archive", action='store_true', default=False, help=_("Also mirror the full archive section"), ) parser.add_argument( "--build-logs", action='store_true', default=False, help=_("Include the build logs in the mirror"), ) parser.add_argument( "--pgp-signatures", action='store_true', default=False, help=_("Include the PGP signature .asc files in the mirror"), ) parser.add_argument( "--src-tarballs", action='store_true', default=False, help=_("Include the source tarballs in the mirror"), ) parser.add_argument( "--output-dir", default=None, help=_("The directory to write the mirror to") ) options = common.parse_args(parser) common.set_console_logging(options.verbose, options.color) if options.all: options.archive = True options.build_logs = True options.pgp_signatures = True options.src_tarballs = True if options.url is None: logging.error(_('A URL is required as an argument!') + '\n') parser.print_help() sys.exit(1) scheme, hostname, path, params, query, fragment = urllib.parse.urlparse(options.url) fingerprint = urllib.parse.parse_qs(query).get('fingerprint') def _append_to_url_path(*args): """Append the list of path components to URL, keeping the rest the same.""" newpath = posixpath.join(path, *args) return urllib.parse.urlunparse( (scheme, hostname, newpath, params, query, fragment) ) if fingerprint: config = common.read_config() if not ('jarsigner' in config or 'apksigner' in config): logging.error( _('Java JDK not found! Install in standard location or set java_paths!') ) sys.exit(1) def _get_index(section, etag=None): url = _append_to_url_path(section) data, etag = index.download_repo_index(url, etag=etag) return data, etag, _append_to_url_path(section, 'index-v1.jar') else: def _get_index(section, etag=None): import io import json import zipfile from . import net url = _append_to_url_path(section, 'index-v1.jar') content, etag = net.http_get(url) with zipfile.ZipFile(io.BytesIO(content)) as zip: jsoncontents = zip.open('index-v1.json').read() data = json.loads(jsoncontents.decode('utf-8')) return data, etag, None # no verified index file to return ip = None try: ip = ipaddress.ip_address(hostname) except ValueError: pass if hostname == 'f-droid.org' or ( ip is not None and hostname in socket.gethostbyname_ex('f-droid.org')[2] ): logging.error( _( 'This command should never be used to mirror f-droid.org! ' 'A full copy requires more than 600GB.' ) ) sys.exit(1) path = path.rstrip('/') if path.endswith('repo') or path.endswith('archive'): logging.warning( _('Do not include "{path}" in URL!').format(path=path.split('/')[-1]) ) elif not path.endswith('fdroid'): logging.warning( _('{url} does not end with "fdroid", check the URL path!').format( url=options.url ) ) icondirs = ['icons'] for density in update.screen_densities: icondirs.append('icons-' + density) if options.output_dir: basedir = options.output_dir else: basedir = os.path.join(os.getcwd(), hostname, path.strip('/')) os.makedirs(basedir, exist_ok=True) if options.archive: sections = ('repo', 'archive') else: sections = ('repo',) for section in sections: sectiondir = os.path.join(basedir, section) urls = [] data, etag, index_url = _get_index(section) if index_url: urls.append(index_url) os.makedirs(sectiondir, exist_ok=True) os.chdir(sectiondir) for icondir in icondirs: os.makedirs(os.path.join(sectiondir, icondir), exist_ok=True) for packageName, packageList in data['packages'].items(): for package in packageList: to_fetch = [] keys = ['apkName'] if options.src_tarballs: keys.append('srcname') for k in keys: if k in package: to_fetch.append(package[k]) elif k == 'apkName': logging.error( _('{appid} is missing {name}').format( appid=package['packageName'], name=k ) ) for f in to_fetch: if not os.path.exists(f) or ( f.endswith('.apk') and os.path.getsize(f) != package['size'] ): urls.append(_append_to_url_path(section, f)) if options.pgp_signatures: urls.append(_append_to_url_path(section, f + '.asc')) if options.build_logs and f.endswith('.apk'): urls.append( _append_to_url_path(section, f[:-4] + '.log.gz') ) _run_wget(sectiondir, urls, options.verbose) for app in data['apps']: localized = app.get('localized') if localized: for locale, d in localized.items(): urls = [] components = (section, app['packageName'], locale) for k in update.GRAPHIC_NAMES: f = d.get(k) if f: filepath_tuple = components + (f,) urls.append(_append_to_url_path(*filepath_tuple)) _run_wget(os.path.join(basedir, *components), urls, options.verbose) for k in update.SCREENSHOT_DIRS: urls = [] filelist = d.get(k) if filelist: components = (section, app['packageName'], locale, k) for f in filelist: filepath_tuple = components + (f,) urls.append(_append_to_url_path(*filepath_tuple)) _run_wget( os.path.join(basedir, *components), urls, options.verbose, ) urls = dict() for app in data['apps']: if 'icon' not in app: logging.error( _('no "icon" in {appid}').format(appid=app['packageName']) ) continue icon = app['icon'] for icondir in icondirs: url = _append_to_url_path(section, icondir, icon) if icondir not in urls: urls[icondir] = [] urls[icondir].append(url) for icondir in icondirs: if icondir in urls: _run_wget( os.path.join(basedir, section, icondir), urls[icondir], options.verbose, ) if __name__ == "__main__": main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/fdroidserver/net.py0000644000175000017500000001603614770502071016566 0ustar00hanshans#!/usr/bin/env python3 # # net.py - part of the FDroid server tools # Copyright (C) 2015 Hans-Christoph Steiner # Copyright (C) 2022 FC Stegerman # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import copy import logging import os import random import requests import tempfile import time import urllib import urllib3 from requests.adapters import HTTPAdapter, Retry from . import _, common logger = logging.getLogger(__name__) HEADERS = {'User-Agent': 'F-Droid'} def download_file(url, local_filename=None, dldir='tmp', retries=3, backoff_factor=0.1): """Try hard to download the file, including retrying on failures. This has two retry cycles, one inside of the requests session, the other provided by this function. The requests retry logic applies to failed DNS lookups, socket connections and connection timeouts, never to requests where data has made it to the server. This handles ChunkedEncodingError during transfer in its own retry loop. This can result in more retries than are specified in the retries parameter. """ filename = urllib.parse.urlparse(url).path.split('/')[-1] if local_filename is None: local_filename = os.path.join(dldir, filename) for i in range(retries + 1): if retries: max_retries = Retry(total=retries - i, backoff_factor=backoff_factor) adapter = HTTPAdapter(max_retries=max_retries) session = requests.Session() session.mount('http://', adapter) session.mount('https://', adapter) else: session = requests # the stream=True parameter keeps memory usage low r = session.get( url, stream=True, allow_redirects=True, headers=HEADERS, timeout=300 ) r.raise_for_status() try: with open(local_filename, 'wb') as f: for chunk in r.iter_content(chunk_size=1024): if chunk: # filter out keep-alive new chunks f.write(chunk) f.flush() return local_filename except requests.exceptions.ChunkedEncodingError as err: if i == retries: raise err logger.warning('Download interrupted, retrying...') time.sleep(backoff_factor * 2**i) raise ValueError("retries must be >= 0") def download_using_mirrors(mirrors, local_filename=None): """Try to download the file from any working mirror. Download the file that all URLs in the mirrors list point to, trying all the tricks, starting with the most private methods first. The list of mirrors is converted into a list of mirror configurations to try, in order that the should be attempted. This builds mirror_configs_to_try using all possible combos to try. If a mirror is marked with worksWithoutSNI: True, then this logic will try it twice: first without SNI, then again with SNI. """ mirrors = common.parse_list_of_dicts(mirrors) mirror_configs_to_try = [] for mirror in mirrors: mirror_configs_to_try.append(mirror) if mirror.get('worksWithoutSNI'): m = copy.deepcopy(mirror) del m['worksWithoutSNI'] mirror_configs_to_try.append(m) if not local_filename: for mirror in mirrors: filename = urllib.parse.urlparse(mirror['url']).path.split('/')[-1] if filename: break if filename: local_filename = os.path.join(common.get_cachedir(), filename) else: local_filename = tempfile.mkstemp(prefix='fdroid-') timeouts = (2, 10, 100) last_exception = None for timeout in timeouts: for mirror in mirror_configs_to_try: last_exception = None urllib3.util.ssl_.HAS_SNI = not mirror.get('worksWithoutSNI') try: # the stream=True parameter keeps memory usage low r = requests.get( mirror['url'], stream=True, allow_redirects=False, headers=HEADERS, # add jitter to the timeout to be less predictable timeout=timeout + random.randint(0, timeout), # nosec B311 ) if r.status_code != 200: raise requests.exceptions.HTTPError(r.status_code, response=r) with open(local_filename, 'wb') as f: for chunk in r.iter_content(chunk_size=1024): if chunk: # filter out keep-alive new chunks f.write(chunk) f.flush() return local_filename except ( ConnectionError, requests.exceptions.ChunkedEncodingError, requests.exceptions.ConnectionError, requests.exceptions.ContentDecodingError, requests.exceptions.HTTPError, requests.exceptions.SSLError, requests.exceptions.StreamConsumedError, requests.exceptions.Timeout, requests.exceptions.UnrewindableBodyError, ) as e: last_exception = e logger.debug(_('Retrying failed download: %s') % str(e)) # if it hasn't succeeded by now, then give up and raise last exception if last_exception: raise last_exception def http_get(url, etag=None, timeout=600): """Download the content from the given URL by making a GET request. If an ETag is given, it will do a HEAD request first, to see if the content changed. Parameters ---------- url The URL to download from. etag The last ETag to be used for the request (optional). Returns ------- A tuple consisting of: - The raw content that was downloaded or None if it did not change - The new eTag as returned by the HTTP request """ # TODO disable TLS Session IDs and TLS Session Tickets # (plain text cookie visible to anyone who can see the network traffic) if etag: r = requests.head(url, headers=HEADERS, timeout=timeout) r.raise_for_status() if 'ETag' in r.headers and etag == r.headers['ETag']: return None, etag r = requests.get(url, headers=HEADERS, timeout=timeout) r.raise_for_status() new_etag = None if 'ETag' in r.headers: new_etag = r.headers['ETag'] return r.content, new_etag ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/fdroidserver/nightly.py0000644000175000017500000005127114770502071017456 0ustar00hanshans#!/usr/bin/env python3 """Set up an app build for a nightly build repo.""" # # nightly.py - part of the FDroid server tools # Copyright (C) 2017 Hans-Christoph Steiner # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import base64 import datetime import git import hashlib import logging import os import paramiko import platform import shutil import ssl import subprocess import sys import tempfile import yaml from urllib.parse import urlparse from argparse import ArgumentParser from typing import Optional from . import _ from . import common from .exception import VCSException # hard coded defaults for Android ~/.android/debug.keystore files # https://developers.google.com/android/guides/client-auth KEYSTORE_FILE = os.path.join(os.getenv('HOME'), '.android', 'debug.keystore') PASSWORD = 'android' # nosec B105 standard hardcoded password for debug keystores KEY_ALIAS = 'androiddebugkey' DISTINGUISHED_NAME = 'CN=Android Debug,O=Android,C=US' # standard suffix for naming fdroid git repos NIGHTLY = '-nightly' def _get_keystore_secret_var(keystore: str) -> str: """Get keystore secret as base64. Parameters ---------- keystore The path of the keystore. Returns ------- base64_secret The keystore secret as base64 string. """ with open(keystore, 'rb') as fp: return base64.standard_b64encode(fp.read()).decode('ascii') def _ssh_key_from_debug_keystore(keystore: Optional[str] = None) -> str: """Convert a debug keystore to an SSH private key. This leaves the original keystore file in place. Parameters ---------- keystore The keystore to convert to a SSH private key. Returns ------- key_path The SSH private key file path in the temporary directory. """ if keystore is None: # set this here so it can be overridden in the tests # TODO convert this to a class to get rid of this nonsense keystore = KEYSTORE_FILE tmp_dir = tempfile.mkdtemp(prefix='.') privkey = os.path.join(tmp_dir, '.privkey') key_pem = os.path.join(tmp_dir, '.key.pem') p12 = os.path.join(tmp_dir, '.keystore.p12') _config = dict() common.fill_config_defaults(_config) subprocess.check_call( [ _config['keytool'], '-importkeystore', '-srckeystore', keystore, '-srcalias', KEY_ALIAS, '-srcstorepass', PASSWORD, '-srckeypass', PASSWORD, '-destkeystore', p12, '-destalias', KEY_ALIAS, '-deststorepass', PASSWORD, '-destkeypass', PASSWORD, '-deststoretype', 'PKCS12', ], env={'LC_ALL': 'C.UTF-8'}, ) subprocess.check_call( [ 'openssl', 'pkcs12', '-in', p12, '-out', key_pem, '-passin', 'pass:' + PASSWORD, '-passout', 'pass:' + PASSWORD, ], env={'LC_ALL': 'C.UTF-8'}, ) # OpenSSL 3.0 changed the default output format from PKCS#1 to # PKCS#8, which paramiko does not support. # https://www.openssl.org/docs/man3.0/man1/openssl-rsa.html#traditional # https://github.com/paramiko/paramiko/issues/1015 openssl_rsa_cmd = ['openssl', 'rsa'] if ssl.OPENSSL_VERSION_INFO[0] >= 3: openssl_rsa_cmd += ['-traditional'] subprocess.check_call( openssl_rsa_cmd + [ '-in', key_pem, '-out', privkey, '-passin', 'pass:' + PASSWORD, ], env={'LC_ALL': 'C.UTF-8'}, ) os.remove(key_pem) os.remove(p12) os.chmod(privkey, 0o600) # os.umask() should cover this, but just in case rsakey = paramiko.RSAKey.from_private_key_file(privkey) fingerprint = ( base64.b64encode(hashlib.sha256(rsakey.asbytes()).digest()) .decode('ascii') .rstrip('=') ) ssh_private_key_file = os.path.join( tmp_dir, 'debug_keystore_' + fingerprint.replace('/', '_') + '_id_rsa' ) shutil.move(privkey, ssh_private_key_file) pub = rsakey.get_name() + ' ' + rsakey.get_base64() + ' ' + ssh_private_key_file with open(ssh_private_key_file + '.pub', 'w') as fp: fp.write(pub) logging.info(_('\nSSH public key to be used as deploy key:') + '\n' + pub) return ssh_private_key_file def get_repo_base_url(clone_url: str, repo_git_base: str, force_type: Optional[str] = None) -> str: """Generate the base URL for the F-Droid repository. Parameters ---------- clone_url The URL to clone the Git repository. repo_git_base The project path of the Git repository at the Git forge. force_type The Git forge of the project. Returns ------- repo_base_url The base URL of the F-Droid repository. """ if force_type is None: force_type = urlparse(clone_url).netloc if force_type == 'gitlab.com': return clone_url + '/-/raw/master/fdroid' if force_type == 'github.com': return 'https://raw.githubusercontent.com/%s/master/fdroid' % repo_git_base print(_('ERROR: unsupported git host "%s", patches welcome!') % force_type) sys.exit(1) def main(): """Deploy to F-Droid repository or generate SSH private key from keystore. The behaviour of this function is influenced by the configuration file as well as command line parameters. Raises ------ :exc:`~fdroidserver.exception.VCSException` If the nightly Git repository could not be cloned during an attempt to deploy. """ parser = ArgumentParser() common.setup_global_opts(parser) parser.add_argument( "--keystore", default=KEYSTORE_FILE, help=_("Specify which debug keystore file to use."), ) parser.add_argument( "--show-secret-var", action="store_true", default=False, help=_("Print the secret variable to the terminal for easy copy/paste"), ) parser.add_argument( "--keep-private-keys", action="store_true", default=False, help=_("Do not remove the private keys generated from the keystore"), ) parser.add_argument( "--no-deploy", action="store_true", default=False, help=_("Do not deploy the new files to the repo"), ) parser.add_argument( "--file", default='app/build/outputs/apk/*.apk', help=_('The file to be included in the repo (path or glob)'), ) parser.add_argument( "--no-checksum", action="store_true", default=False, help=_("Don't use rsync checksums"), ) archive_older_unset = -1 parser.add_argument( "--archive-older", type=int, default=archive_older_unset, help=_("Set maximum releases in repo before older ones are archived"), ) # TODO add --with-btlog options = common.parse_args(parser) # force a tighter umask since this writes private key material umask = os.umask(0o077) if 'CI' in os.environ: v = os.getenv('DEBUG_KEYSTORE') debug_keystore = None if v: debug_keystore = base64.b64decode(v) if not debug_keystore: logging.error(_('DEBUG_KEYSTORE is not set or the value is incomplete')) sys.exit(1) os.makedirs(os.path.dirname(KEYSTORE_FILE), exist_ok=True) if os.path.exists(KEYSTORE_FILE): logging.warning(_('overwriting existing {path}').format(path=KEYSTORE_FILE)) with open(KEYSTORE_FILE, 'wb') as fp: fp.write(debug_keystore) repo_basedir = os.path.join(os.getcwd(), 'fdroid') repodir = os.path.join(repo_basedir, 'repo') cibase = os.getcwd() os.makedirs(repodir, exist_ok=True) # the 'master' branch is hardcoded in fdroidserver/deploy.py if 'CI_PROJECT_PATH' in os.environ and 'CI_PROJECT_URL' in os.environ: # we are in GitLab CI repo_git_base = os.getenv('CI_PROJECT_PATH') + NIGHTLY clone_url = os.getenv('CI_PROJECT_URL') + NIGHTLY repo_base = get_repo_base_url(clone_url, repo_git_base, force_type='gitlab.com') servergitmirror = 'git@' + urlparse(clone_url).netloc + ':' + repo_git_base deploy_key_url = clone_url + '/-/settings/repository#js-deploy-keys-settings' git_user_name = os.getenv('GITLAB_USER_NAME') git_user_email = os.getenv('GITLAB_USER_EMAIL') elif 'TRAVIS_REPO_SLUG' in os.environ: # we are in Travis CI repo_git_base = os.getenv('TRAVIS_REPO_SLUG') + NIGHTLY clone_url = 'https://github.com/' + repo_git_base repo_base = get_repo_base_url(clone_url, repo_git_base, force_type='github.com') servergitmirror = 'git@github.com:' + repo_git_base deploy_key_url = ('https://github.com/' + repo_git_base + '/settings/keys' + '\nhttps://developer.github.com/v3/guides/managing-deploy-keys/#deploy-keys') git_user_name = repo_git_base git_user_email = os.getenv('USER') + '@' + platform.node() elif ( 'CIRCLE_REPOSITORY_URL' in os.environ and 'CIRCLE_PROJECT_USERNAME' in os.environ and 'CIRCLE_PROJECT_REPONAME' in os.environ ): # we are in Circle CI repo_git_base = (os.getenv('CIRCLE_PROJECT_USERNAME') + '/' + os.getenv('CIRCLE_PROJECT_REPONAME') + NIGHTLY) clone_url = os.getenv('CIRCLE_REPOSITORY_URL') + NIGHTLY repo_base = get_repo_base_url(clone_url, repo_git_base, force_type='github.com') servergitmirror = 'git@' + urlparse(clone_url).netloc + ':' + repo_git_base deploy_key_url = ('https://github.com/' + repo_git_base + '/settings/keys' + '\nhttps://developer.github.com/v3/guides/managing-deploy-keys/#deploy-keys') git_user_name = os.getenv('CIRCLE_USERNAME') git_user_email = git_user_name + '@' + platform.node() elif 'GITHUB_ACTIONS' in os.environ: # we are in Github actions repo_git_base = (os.getenv('GITHUB_REPOSITORY') + NIGHTLY) clone_url = (os.getenv('GITHUB_SERVER_URL') + '/' + repo_git_base) repo_base = get_repo_base_url(clone_url, repo_git_base, force_type='github.com') servergitmirror = 'git@' + urlparse(clone_url).netloc + ':' + repo_git_base deploy_key_url = ('https://github.com/' + repo_git_base + '/settings/keys' + '\nhttps://developer.github.com/v3/guides/managing-deploy-keys/#deploy-keys') git_user_name = os.getenv('GITHUB_ACTOR') git_user_email = git_user_name + '@' + platform.node() else: print(_('ERROR: unsupported CI type, patches welcome!')) sys.exit(1) repo_url = repo_base + '/repo' git_mirror_path = os.path.join(repo_basedir, 'git-mirror') git_mirror_fdroiddir = os.path.join(git_mirror_path, 'fdroid') git_mirror_repodir = os.path.join(git_mirror_fdroiddir, 'repo') git_mirror_metadatadir = os.path.join(git_mirror_fdroiddir, 'metadata') if not os.path.isdir(git_mirror_repodir): logging.debug(_('cloning {url}').format(url=clone_url)) vcs = common.getvcs('git', clone_url, git_mirror_path) p = vcs.git(['clone', '--', vcs.remote, str(vcs.local)]) if p.returncode != 0: print('WARNING: only public git repos are supported!') raise VCSException('git clone %s failed:' % clone_url, p.output) if not os.path.isdir(git_mirror_repodir): os.makedirs(git_mirror_repodir, mode=0o755) mirror_git_repo = git.Repo.init(git_mirror_path) writer = mirror_git_repo.config_writer() writer.set_value('user', 'name', git_user_name) writer.set_value('user', 'email', git_user_email) writer.release() for remote in mirror_git_repo.remotes: mirror_git_repo.delete_remote(remote) readme_path = os.path.join(git_mirror_path, 'README.md') readme = ''' # {repo_git_base} This is an app repository for nightly versions. You can use it with the [F-Droid](https://f-droid.org/) Android app. [![{repo_url}]({repo_url}/icons/icon.png)](https://fdroid.link/#{repo_url}) Last updated: {date}'''.format(repo_git_base=repo_git_base, repo_url=repo_url, date=datetime.datetime.now(datetime.timezone.utc).strftime('%Y-%m-%d %H:%M:%S UTC')) with open(readme_path, 'w') as fp: fp.write(readme) mirror_git_repo.git.add(all=True) mirror_git_repo.index.commit("update README") mirror_git_repo.git.add(all=True) mirror_git_repo.index.commit("update repo/website icon") os.chdir(repo_basedir) if os.path.isdir(git_mirror_repodir): common.local_rsync(options, [git_mirror_repodir + '/'], 'repo/') if os.path.isdir(git_mirror_metadatadir): common.local_rsync(options, [git_mirror_metadatadir + '/'], 'metadata/') ssh_private_key_file = _ssh_key_from_debug_keystore() # this is needed for GitPython to find the SSH key ssh_dir = os.path.join(os.getenv('HOME'), '.ssh') os.makedirs(ssh_dir, exist_ok=True) ssh_config = os.path.join(ssh_dir, 'config') logging.debug(_('adding IdentityFile to {path}').format(path=ssh_config)) with open(ssh_config, 'a') as fp: fp.write('\n\nHost *\n\tIdentityFile %s\n' % ssh_private_key_file) if options.archive_older == archive_older_unset: fdroid_size = common.get_dir_size(git_mirror_fdroiddir) max_size = common.GITLAB_COM_PAGES_MAX_SIZE if fdroid_size < max_size: options.archive_older = 20 else: options.archive_older = 3 print( 'WARNING: repo is %s over the GitLab Pages limit (%s)' % (fdroid_size - max_size, max_size) ) print('Setting --archive-older to 3') config = { 'identity_file': ssh_private_key_file, 'repo_name': repo_git_base, 'repo_url': repo_url, 'repo_description': 'Nightly builds from %s' % git_user_email, 'archive_name': repo_git_base + ' archive', 'archive_url': repo_base + '/archive', 'archive_description': 'Old nightly builds that have been archived.', 'archive_older': options.archive_older, 'servergitmirrors': [{"url": servergitmirror}], 'keystore': KEYSTORE_FILE, 'repo_keyalias': KEY_ALIAS, 'keystorepass': PASSWORD, 'keypass': PASSWORD, 'keydname': DISTINGUISHED_NAME, 'make_current_version_link': False, } with open(common.CONFIG_FILE, 'w', encoding='utf-8') as fp: yaml.dump(config, fp, default_flow_style=False) os.chmod(common.CONFIG_FILE, 0o600) config = common.read_config() common.assert_config_keystore(config) logging.debug( _('Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}').format( cibase=cibase, repo_basedir=repo_basedir ) ) for root, dirs, files in os.walk(cibase): for d in ('.git', '.gradle'): if d in dirs: dirs.remove(d) if root == cibase and 'fdroid' in dirs: dirs.remove('fdroid') for f in files: if f.endswith('-debug.apk'): apkfilename = os.path.join(root, f) logging.debug( _('Stripping mystery signature from {apkfilename}').format( apkfilename=apkfilename ) ) destapk = os.path.join(repodir, os.path.basename(f)) os.chmod(apkfilename, 0o644) logging.debug( _( 'Resigning {apkfilename} with provided debug.keystore' ).format(apkfilename=os.path.basename(apkfilename)) ) common.sign_apk(apkfilename, destapk, KEY_ALIAS) if options.verbose: logging.debug(_('attempting bare SSH connection to test deploy key:')) try: subprocess.check_call( [ 'ssh', '-Tvi', ssh_private_key_file, '-oIdentitiesOnly=yes', '-oStrictHostKeyChecking=no', servergitmirror.split(':')[0], ] ) except subprocess.CalledProcessError: pass app_url = clone_url[: -len(NIGHTLY)] template = dict() template['AuthorName'] = clone_url.split('/')[4] template['AuthorWebSite'] = '/'.join(clone_url.split('/')[:4]) template['Categories'] = ['nightly'] template['SourceCode'] = app_url template['IssueTracker'] = app_url + '/issues' template['Summary'] = 'Nightly build of ' + urlparse(app_url).path[1:] template['Description'] = template['Summary'] with open('template.yml', 'w') as fp: yaml.dump(template, fp) subprocess.check_call( ['fdroid', 'update', '--rename-apks', '--create-metadata', '--verbose'], cwd=repo_basedir, ) common.local_rsync( options, [repo_basedir + '/metadata/'], git_mirror_metadatadir + '/' ) mirror_git_repo.git.add(all=True) mirror_git_repo.index.commit("update app metadata") if not options.no_deploy: try: cmd = ['fdroid', 'deploy', '--verbose', '--no-keep-git-mirror-archive'] subprocess.check_call(cmd, cwd=repo_basedir) except subprocess.CalledProcessError: logging.error( _('cannot publish update, did you set the deploy key?') + '\n' + deploy_key_url ) sys.exit(1) if not options.keep_private_keys: os.remove(KEYSTORE_FILE) if shutil.rmtree.avoids_symlink_attacks: shutil.rmtree(os.path.dirname(ssh_private_key_file)) else: if not os.path.isfile(options.keystore): androiddir = os.path.dirname(options.keystore) if not os.path.exists(androiddir): os.mkdir(androiddir) logging.info(_('created {path}').format(path=androiddir)) logging.error(_('{path} does not exist! Create it by running:').format(path=options.keystore) + '\n keytool -genkey -v -keystore ' + options.keystore + ' -storepass android \\' + '\n -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000 \\' + '\n -dname "CN=Android Debug,O=Android,C=US"') sys.exit(1) ssh_dir = os.path.join(os.getenv('HOME'), '.ssh') privkey = _ssh_key_from_debug_keystore(options.keystore) if os.path.exists(ssh_dir): ssh_private_key_file = os.path.join(ssh_dir, os.path.basename(privkey)) shutil.move(privkey, ssh_private_key_file) shutil.move(privkey + '.pub', ssh_private_key_file + '.pub') if shutil.rmtree.avoids_symlink_attacks: shutil.rmtree(os.path.dirname(privkey)) if options.show_secret_var: debug_keystore = _get_keystore_secret_var(options.keystore) print( _('\n{path} encoded for the DEBUG_KEYSTORE secret variable:').format( path=options.keystore ) ) print(debug_keystore) os.umask(umask) if __name__ == "__main__": main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901202.0 fdroidserver-2.4.0/fdroidserver/publish.py0000644000175000017500000004217414770507722017460 0ustar00hanshans#!/usr/bin/env python3 # # publish.py - part of the FDroid server tools # Copyright (C) 2010-13, Ciaran Gultnieks, ciaran@ciarang.com # Copyright (C) 2013-2014 Daniel Martí # Copyright (C) 2021 Felix C. Stegerman # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . """Sign APKs using keys or via reproducible builds signature copying. This command takes unsigned APKs and signs them. It looks for unsigned APKs in the unsigned/ directory and puts successfully signed APKs into the repo/ directory. The default is to run in a kind of batch mode, where it will only quit on certain kinds of errors. It mostly reports success by moving an APK from unsigned/ to repo/ """ import sys import os import re import shutil import glob import hashlib from argparse import ArgumentParser from collections import OrderedDict import logging from gettext import ngettext import json import time import zipfile from . import _ from . import common from . import metadata from .common import FDroidPopen from .exception import BuildException, FDroidException config = None start_timestamp = time.gmtime() def publish_source_tarball(apkfilename, unsigned_dir, output_dir): """Move the source tarball into the output directory...""" tarfilename = apkfilename[:-4] + '_src.tar.gz' tarfile = os.path.join(unsigned_dir, tarfilename) if os.path.exists(tarfile): shutil.move(tarfile, os.path.join(output_dir, tarfilename)) logging.debug('...published %s', tarfilename) else: logging.debug('...no source tarball for %s', apkfilename) def key_alias(appid): """No summary. Get the alias which F-Droid uses to indentify the singing key for this App in F-Droids keystore. """ if config and 'keyaliases' in config and appid in config['keyaliases']: # For this particular app, the key alias is overridden... keyalias = config['keyaliases'][appid] if keyalias.startswith('@'): m = hashlib.md5() # nosec just used to generate a keyalias m.update(keyalias[1:].encode('utf-8')) keyalias = m.hexdigest()[:8] return keyalias else: m = hashlib.md5() # nosec just used to generate a keyalias m.update(appid.encode('utf-8')) return m.hexdigest()[:8] def read_fingerprints_from_keystore(): """Obtain a dictionary containing all singning-key fingerprints which are managed by F-Droid, grouped by appid.""" env_vars = {'LC_ALL': 'C.UTF-8', 'FDROID_KEY_STORE_PASS': config['keystorepass']} cmd = [ config['keytool'], '-list', '-v', '-keystore', config['keystore'], '-storepass:env', 'FDROID_KEY_STORE_PASS', ] if config['keystore'] == 'NONE': cmd += config['smartcardoptions'] p = FDroidPopen(cmd, envs=env_vars, output=False) if p.returncode != 0: raise FDroidException('could not read keystore {}'.format(config['keystore'])) realias = re.compile('Alias name: (?P.+)' + os.linesep) resha256 = re.compile(r'\s+SHA256: (?P[:0-9A-F]{95})' + os.linesep) fps = {} for block in p.output.split(('*' * 43) + os.linesep + '*' * 43): s_alias = realias.search(block) s_sha256 = resha256.search(block) if s_alias and s_sha256: sigfp = s_sha256.group('sha256').replace(':', '').lower() fps[s_alias.group('alias')] = sigfp return fps def sign_sig_key_fingerprint_list(jar_file): """Sign the list of app-signing key fingerprints. This is used primaryily by fdroid update to determine which APKs where built and signed by F-Droid and which ones were manually added by users. """ cmd = [config['jarsigner']] cmd += '-keystore', config['keystore'] cmd += '-storepass:env', 'FDROID_KEY_STORE_PASS' cmd += '-digestalg', 'SHA1' cmd += '-sigalg', 'SHA1withRSA' cmd += jar_file, config['repo_keyalias'] if config['keystore'] == 'NONE': cmd += config['smartcardoptions'] else: # smardcards never use -keypass cmd += '-keypass:env', 'FDROID_KEY_PASS' env_vars = { 'FDROID_KEY_STORE_PASS': config['keystorepass'], 'FDROID_KEY_PASS': config.get('keypass', ""), } p = common.FDroidPopen(cmd, envs=env_vars) if p.returncode != 0: raise FDroidException("Failed to sign '{}'!".format(jar_file)) def store_publish_signer_fingerprints(appids, indent=None): """Store list of all signing-key fingerprints for given appids to HD. This list will later on be needed by fdroid update. """ if not os.path.exists('repo'): os.makedirs('repo') data = OrderedDict() fps = read_fingerprints_from_keystore() for appid in sorted(appids): alias = key_alias(appid) if alias in fps: data[appid] = {'signer': fps[key_alias(appid)]} jar_file = os.path.join('repo', 'signer-index.jar') output = json.dumps(data, indent=indent) with zipfile.ZipFile(jar_file, 'w', zipfile.ZIP_DEFLATED) as jar: jar.writestr('signer-index.json', output) with open(os.path.join('repo', 'signer-index.json'), 'w') as fp: fp.write(output) sign_sig_key_fingerprint_list(jar_file) def status_update_json(generatedKeys, signedApks): """Output a JSON file with metadata about this run.""" logging.debug(_('Outputting JSON')) output = common.setup_status_output(start_timestamp) output['apksigner'] = shutil.which(config.get('apksigner', '')) output['jarsigner'] = shutil.which(config.get('jarsigner', '')) output['keytool'] = shutil.which(config.get('keytool', '')) if generatedKeys: output['generatedKeys'] = generatedKeys if signedApks: output['signedApks'] = signedApks common.write_status_json(output) def check_for_key_collisions(allapps): """Make sure there's no collision in keyaliases from apps. It was suggested at https://dev.guardianproject.info/projects/bazaar/wiki/FDroid_Audit that a package could be crafted, such that it would use the same signing key as an existing app. While it may be theoretically possible for such a colliding package ID to be generated, it seems virtually impossible that the colliding ID would be something that would be a) a valid package ID, and b) a sane-looking ID that would make its way into the repo. Nonetheless, to be sure, before publishing we check that there are no collisions, and refuse to do any publishing if that's the case. Parameters ---------- allapps a dict of all apps to process Returns ------- a list of all aliases corresponding to allapps """ allaliases = [] for appid in allapps: m = hashlib.md5() # nosec just used to generate a keyalias m.update(appid.encode('utf-8')) keyalias = m.hexdigest()[:8] if keyalias in allaliases: logging.error(_("There is a keyalias collision - publishing halted")) sys.exit(1) allaliases.append(keyalias) return allaliases def create_key_if_not_existing(keyalias): """Ensure a signing key with the given keyalias exists. Returns ------- boolean True if a new key was created, False otherwise """ # See if we already have a key for this application, and # if not generate one... env_vars = { 'LC_ALL': 'C.UTF-8', 'FDROID_KEY_STORE_PASS': config['keystorepass'], 'FDROID_KEY_PASS': config.get('keypass', ""), } cmd = [ config['keytool'], '-list', '-alias', keyalias, '-keystore', config['keystore'], '-storepass:env', 'FDROID_KEY_STORE_PASS', ] if config['keystore'] == 'NONE': cmd += config['smartcardoptions'] p = FDroidPopen(cmd, envs=env_vars) if p.returncode != 0: logging.info("Key does not exist - generating...") cmd = [ config['keytool'], '-genkey', '-keystore', config['keystore'], '-alias', keyalias, '-keyalg', 'RSA', '-keysize', '2048', '-validity', '10000', '-storepass:env', 'FDROID_KEY_STORE_PASS', '-dname', config['keydname'], ] if config['keystore'] == 'NONE': cmd += config['smartcardoptions'] else: cmd += '-keypass:env', 'FDROID_KEY_PASS' p = FDroidPopen(cmd, envs=env_vars) if p.returncode != 0: raise BuildException("Failed to generate key", p.output) return True else: return False def main(): global config # Parse command line... parser = ArgumentParser( usage="%(prog)s [options] " "[APPID[:VERCODE] [APPID[:VERCODE] ...]]" ) common.setup_global_opts(parser) parser.add_argument( "-e", "--error-on-failed", action="store_true", default=False, help=_("When signing or verifying fails, exit with an error code."), ) parser.add_argument( "appid", nargs='*', help=_("application ID with optional versionCode in the form APPID[:VERCODE]"), ) metadata.add_metadata_arguments(parser) options = common.parse_args(parser) metadata.warnings_action = options.W config = common.read_config() if not ('jarsigner' in config and 'keytool' in config): logging.critical( _('Java JDK not found! Install in standard location or set java_paths!') ) sys.exit(1) common.assert_config_keystore(config) log_dir = 'logs' if not os.path.isdir(log_dir): logging.info(_("Creating log directory")) os.makedirs(log_dir) tmp_dir = 'tmp' if not os.path.isdir(tmp_dir): logging.info(_("Creating temporary directory")) os.makedirs(tmp_dir) output_dir = 'repo' if not os.path.isdir(output_dir): logging.info(_("Creating output directory")) os.makedirs(output_dir) unsigned_dir = 'unsigned' if not os.path.isdir(unsigned_dir): logging.warning(_("No unsigned directory - nothing to do")) sys.exit(1) binaries_dir = os.path.join(unsigned_dir, 'binaries') if not config['keystore'] == "NONE" and not os.path.exists(config['keystore']): logging.error("Config error - missing '{0}'".format(config['keystore'])) sys.exit(1) allapps = metadata.read_metadata() vercodes = common.read_pkg_args(options.appid, True) common.get_metadata_files(vercodes) # only check appids signed_apks = dict() generated_keys = dict() allaliases = check_for_key_collisions(allapps) logging.info( ngettext( '{0} app, {1} key aliases', '{0} apps, {1} key aliases', len(allapps) ).format(len(allapps), len(allaliases)) ) failed = 0 # Process any APKs or ZIPs that are waiting to be signed... for apkfile in sorted( glob.glob(os.path.join(unsigned_dir, '*.apk')) + glob.glob(os.path.join(unsigned_dir, '*.zip')) ): appid, vercode = common.publishednameinfo(apkfile) apkfilename = os.path.basename(apkfile) if vercodes and appid not in vercodes: continue if appid in vercodes and vercodes[appid]: if vercode not in vercodes[appid]: continue logging.info(_("Processing {apkfilename}").format(apkfilename=apkfile)) # There ought to be valid metadata for this app, otherwise why are we # trying to publish it? if appid not in allapps: logging.error( "Unexpected {0} found in unsigned directory".format(apkfilename) ) sys.exit(1) app = allapps[appid] build = None for b in app.get("Builds", ()): if b.get("versionCode") == vercode: build = b if app.Binaries or (build and build.binary): # It's an app where we build from source, and verify the apk # contents against a developer's binary, and then publish their # version if everything checks out. # The binary should already have been retrieved during the build # process. srcapk = re.sub(r'\.apk$', '.binary.apk', apkfile) srcapk = srcapk.replace(unsigned_dir, binaries_dir) if not os.path.isfile(srcapk): logging.error( "...reference binary missing - publish skipped: '{refpath}'".format( refpath=srcapk ) ) failed += 1 else: # Compare our unsigned one with the downloaded one... compare_result = common.verify_apks(srcapk, apkfile, tmp_dir) if compare_result: logging.error( "...verification failed - publish skipped : {result}".format( result=compare_result ) ) failed += 1 else: # Success! So move the downloaded file to the repo, and remove # our built version. shutil.move(srcapk, os.path.join(output_dir, apkfilename)) os.remove(apkfile) publish_source_tarball(apkfilename, unsigned_dir, output_dir) logging.info('Published ' + apkfilename) elif apkfile.endswith('.zip'): # OTA ZIPs built by fdroid do not need to be signed by jarsigner, # just to be moved into place in the repo shutil.move(apkfile, os.path.join(output_dir, apkfilename)) publish_source_tarball(apkfilename, unsigned_dir, output_dir) logging.info('Published ' + apkfilename) else: # It's a 'normal' app, i.e. we sign and publish it... skipsigning = False # First we handle signatures for this app from local metadata signingfiles = common.metadata_find_developer_signing_files(appid, vercode) if signingfiles: # There's a signature of the app developer present in our # metadata. This means we're going to prepare both a locally # signed APK and a version signed with the developers key. signature_file, _ignored, manifest, v2_files = signingfiles with open(signature_file, 'rb') as f: devfp = common.signer_fingerprint_short( common.get_certificate(f.read()) ) devsigned = '{}_{}_{}.apk'.format(appid, vercode, devfp) devsignedtmp = os.path.join(tmp_dir, devsigned) common.apk_implant_signatures(apkfile, devsignedtmp, manifest=manifest) if common.verify_apk_signature(devsignedtmp): shutil.move(devsignedtmp, os.path.join(output_dir, devsigned)) else: os.remove(devsignedtmp) logging.error('...verification failed - skipping: %s', devsigned) skipsigning = True failed += 1 # Now we sign with the F-Droid key. if not skipsigning: keyalias = key_alias(appid) logging.info("Key alias: " + keyalias) if create_key_if_not_existing(keyalias): generated_keys[appid] = keyalias signed_apk_path = os.path.join(output_dir, apkfilename) if os.path.exists(signed_apk_path): raise BuildException( _( "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." ).format(path=apkfilename, dir1=unsigned_dir, dir2=output_dir) ) # Sign the application... common.sign_apk(apkfile, signed_apk_path, keyalias) if appid not in signed_apks: signed_apks[appid] = [] signed_apks[appid].append({"keyalias": keyalias, "filename": apkfile}) publish_source_tarball(apkfilename, unsigned_dir, output_dir) logging.info('Published ' + apkfilename) store_publish_signer_fingerprints(allapps.keys()) status_update_json(generated_keys, signed_apks) logging.info('published list signing-key fingerprints') if failed: logging.error(_('%d APKs failed to be signed or verified!') % failed) if options.error_on_failed: sys.exit(failed) if __name__ == "__main__": main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742486863.0 fdroidserver-2.4.0/fdroidserver/readmeta.py0000644000175000017500000000220614767036517017571 0ustar00hanshans#!/usr/bin/env python3 # # readmeta.py - part of the FDroid server tools # Copyright (C) 2014 Daniel Martí # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . from argparse import ArgumentParser from . import common from . import metadata def main(): parser = ArgumentParser() common.setup_global_opts(parser) metadata.add_metadata_arguments(parser) options = parser.parse_args() metadata.warnings_action = options.W common.read_config() metadata.read_metadata() if __name__ == "__main__": main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742486863.0 fdroidserver-2.4.0/fdroidserver/rewritemeta.py0000644000175000017500000000670014767036517020342 0ustar00hanshans#!/usr/bin/env python3 # # rewritemeta.py - part of the FDroid server tools # This cleans up the original .yml metadata file format. # Copyright (C) 2010-12, Ciaran Gultnieks, ciaran@ciarang.com # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . from argparse import ArgumentParser import logging import io import tempfile import shutil from pathlib import Path from . import _ from . import common from . import metadata config = None def proper_format(app): s = io.StringIO() # TODO: currently reading entire file again, should reuse first # read in metadata.py cur_content = Path(app.metadatapath).read_text(encoding='utf-8') if Path(app.metadatapath).suffix == '.yml': metadata.write_yaml(s, app) content = s.getvalue() s.close() return content == cur_content def remove_blank_flags_from_builds(builds): """Remove unset entries from Builds so they are not written out.""" if not builds: return list() newbuilds = list() for build in builds: new = dict() for k in metadata.build_flags: v = build.get(k) # 0 is valid value, it should not be stripped if v is None or v is False or v == '' or v == dict() or v == list(): continue new[k] = v newbuilds.append(new) return newbuilds def main(): global config parser = ArgumentParser() common.setup_global_opts(parser) parser.add_argument( "-l", "--list", action="store_true", default=False, help=_("List files that would be reformatted (dry run)"), ) parser.add_argument( "appid", nargs='*', help=_("application ID of file to operate on") ) metadata.add_metadata_arguments(parser) options = common.parse_args(parser) metadata.warnings_action = options.W config = common.read_config() apps = common.read_app_args(options.appid) for appid, app in apps.items(): path = Path(app.metadatapath) if path.suffix == '.yml': logging.info(_("Rewriting '{appid}'").format(appid=appid)) else: logging.warning(_('Cannot rewrite "{path}"').format(path=path)) continue if options.list: if not proper_format(app): print(path) continue # TODO these should be moved to metadata.write_yaml() builds = remove_blank_flags_from_builds(app.get('Builds')) if builds: app['Builds'] = builds # rewrite to temporary file before overwriting existing # file in case there's a bug in write_metadata with tempfile.TemporaryDirectory() as tmpdir: tmp_path = Path(tmpdir) / path.name metadata.write_metadata(tmp_path, app) shutil.move(tmp_path, path) logging.debug(_("Finished")) if __name__ == "__main__": main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742899194.0 fdroidserver-2.4.0/fdroidserver/scanner.py0000644000175000017500000032533014770503772017442 0ustar00hanshans#!/usr/bin/env python3 # # scanner.py - part of the FDroid server tools # Copyright (C) 2010-13, Ciaran Gultnieks, ciaran@ciarang.com # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import itertools import json import logging import os import re import sys import traceback import urllib.parse import urllib.request import zipfile from argparse import ArgumentParser from dataclasses import dataclass, field, fields from datetime import datetime, timedelta, timezone from enum import IntEnum from pathlib import Path from tempfile import TemporaryDirectory from typing import Union try: import magic except ImportError: import puremagic as magic if sys.version_info >= (3, 11): import tomllib else: import tomli as tomllib from . import _, common, metadata, scanner from .exception import BuildException, ConfigurationException, VCSException @dataclass class MessageStore: infos: list = field(default_factory=list) warnings: list = field(default_factory=list) errors: list = field(default_factory=list) MAVEN_URL_REGEX = re.compile( r"""\smaven\s*(?:{.*?(?:setUrl|url)|\(\s*(?:url)?)\s*=?\s*(?:uri|URI|Uri\.create)?\(?\s*["']?([^\s"']+)["']?[^})]*[)}]""", re.DOTALL, ) DEPFILE = { "Cargo.toml": ["Cargo.lock"], "pubspec.yaml": ["pubspec.lock"], "package.json": ["package-lock.json", "yarn.lock", "pnpm-lock.yaml", "bun.lock"], } SCANNER_CACHE_VERSION = 1 DEFAULT_CATALOG_PREFIX_REGEX = re.compile( r'''defaultLibrariesExtensionName\s*=\s*['"](\w+)['"]''' ) GRADLE_KTS_CATALOG_FILE_REGEX = re.compile( r'''create\("(\w+)"\)\s*\{[^}]*from\(files\(['"]([^"]+)['"]\)\)''' ) GRADLE_CATALOG_FILE_REGEX = re.compile( r'''(\w+)\s*\{[^}]*from\(files\(['"]([^"]+)['"]\)\)''' ) VERSION_CATALOG_REGEX = re.compile(r'versionCatalogs\s*\{') APK_SIGNING_BLOCK_IDS = { # https://source.android.com/docs/security/features/apksigning/v2#apk-signing-block # 0x7109871a: 'APK signature scheme v2', # https://source.android.com/docs/security/features/apksigning/v3#apk-signing-block # 0xf05368c0: 'APK signature scheme v3', # See "Security metadata in early 2018" # https://android-developers.googleblog.com/2017/12/improving-app-security-and-performance.html 0x2146444E: 'Google Play Signature aka "Frosting"', # 0x42726577: 'Verity padding', # 0x6DFF800D: 'Source stamp V2 X509 cert', # JSON with some metadata, used by Chinese company Meituan 0x71777777: 'Meituan payload', # Dependencies metadata generated by Gradle and encrypted by Google Play. # '...The data is compressed, encrypted by a Google Play signing key...' # https://developer.android.com/studio/releases/gradle-plugin#dependency-metadata 0x504B4453: 'Dependency metadata', } class ExitCode(IntEnum): NONFREE_CODE = 1 class GradleVersionCatalog: """Parse catalog from libs.versions.toml. https://docs.gradle.org/current/userguide/platforms.html """ def __init__(self, catalog): self.version = { alias: self.get_version(version) for alias, version in catalog.get("versions", {}).items() } self.libraries = { self.alias_to_accessor(alias): self.library_to_coordinate(library) for alias, library in catalog.get("libraries", {}).items() } self.plugins = { self.alias_to_accessor(alias): self.plugin_to_coordinate(plugin) for alias, plugin in catalog.get("plugins", {}).items() } self.bundles = { self.alias_to_accessor(alias): self.bundle_to_coordinates(bundle) for alias, bundle in catalog.get("bundles", {}).items() } @staticmethod def alias_to_accessor(alias: str) -> str: """Covert alias to accessor. https://docs.gradle.org/current/userguide/platforms.html#sub:mapping-aliases-to-accessors Alias is used to define a lib in catalog. Accessor is used to access it. """ return alias.replace("-", ".").replace("_", ".") def get_version(self, version: Union[dict, str]) -> str: if isinstance(version, str): return version ref = version.get("ref") if ref: return self.version.get(ref, "") return ( version.get("prefer", "") or version.get("require", "") or version.get("strictly", "") ) def library_to_coordinate(self, library: Union[dict, str]) -> str: """Generate the Gradle dependency coordinate from catalog.""" if isinstance(library, str): return library module = library.get("module") if not module: group = library.get("group") name = library.get("name") if group and name: module = f"{group}:{name}" else: return "" version = library.get("version") if version: return f"{module}:{self.get_version(version)}" else: return module def plugin_to_coordinate(self, plugin: Union[dict, str]) -> str: """Generate the Gradle plugin coordinate from catalog.""" if isinstance(plugin, str): return plugin id = plugin.get("id") if not id: return "" version = plugin.get("version") if version: return f"{id}:{self.get_version(version)}" else: return id def bundle_to_coordinates(self, bundle: list[str]) -> list[str]: """Generate the Gradle dependency bundle coordinate from catalog.""" coordinates = [] for alias in bundle: library = self.libraries.get(self.alias_to_accessor(alias)) if library: coordinates.append(library) return coordinates def get_coordinate(self, accessor: str) -> list[str]: """Get the Gradle coordinate from the catalog with an accessor.""" if accessor.startswith("plugins."): return [self.plugins.get(accessor[8:], "")] if accessor.startswith("bundles."): return self.bundles.get(accessor[8:], []) return [self.libraries.get(accessor, "")] def get_catalogs(root: str) -> dict[str, GradleVersionCatalog]: """Get all Gradle dependency catalogs from settings.gradle[.kts]. Returns a dict with the extension and the corresponding catalog. The extension is used as the prefix of the accessor to access libs in the catalog. """ root = Path(root) catalogs = {} default_prefix = "libs" catalog_files_m = [] def find_block_end(s, start): pat = re.compile("[{}]") depth = 1 for m in pat.finditer(s, pos=start): if m.group() == "{": depth += 1 else: depth -= 1 if depth == 0: return m.start() else: return -1 groovy_file = root / "settings.gradle" kotlin_file = root / "settings.gradle.kts" if groovy_file.is_file(): s = groovy_file.read_text(encoding="utf-8") version_catalogs_m = VERSION_CATALOG_REGEX.search(s) if version_catalogs_m: start = version_catalogs_m.end() end = find_block_end(s, start) catalog_files_m = GRADLE_CATALOG_FILE_REGEX.finditer(s, start, end) elif kotlin_file.is_file(): s = kotlin_file.read_text(encoding="utf-8") version_catalogs_m = VERSION_CATALOG_REGEX.search(s) if version_catalogs_m: start = version_catalogs_m.end() end = find_block_end(s, start) catalog_files_m = GRADLE_KTS_CATALOG_FILE_REGEX.finditer(s, start, end) else: return {} m_default = DEFAULT_CATALOG_PREFIX_REGEX.search(s) if m_default: default_prefix = m_default.group(1) default_catalog_file = Path(root) / "gradle/libs.versions.toml" if default_catalog_file.is_file(): with default_catalog_file.open("rb") as f: catalogs[default_prefix] = GradleVersionCatalog(tomllib.load(f)) for m in catalog_files_m: catalog_file = Path(root) / m.group(2).replace("$rootDir/", "") if catalog_file.is_file(): with catalog_file.open("rb") as f: catalogs[m.group(1)] = GradleVersionCatalog(tomllib.load(f)) return catalogs def get_gradle_compile_commands(build): compileCommands = [ 'alias', 'api', 'apk', 'classpath', 'compile', 'compileOnly', 'id', 'implementation', 'provided', 'runtimeOnly', ] buildTypes = ['', 'release'] flavors = [''] if build.gradle and build.gradle != ['yes']: flavors += build.gradle return [''.join(c) for c in itertools.product(flavors, buildTypes, compileCommands)] def get_gradle_compile_commands_without_catalog(build): return [ re.compile(rf'''\s*{c}.*\s*\(?['"].*['"]''', re.IGNORECASE) for c in get_gradle_compile_commands(build) ] def get_gradle_compile_commands_with_catalog(build, prefix): return [ re.compile(rf'\s*{c}.*\s*\(?{prefix}\.([a-z0-9.]+)', re.IGNORECASE) for c in get_gradle_compile_commands(build) ] def get_embedded_classes(apkfile, depth=0): """Get the list of Java classes embedded into all DEX files. :return: set of Java classes names as string """ if depth > 10: # zipbomb protection return {_('Max recursion depth in ZIP file reached: %s') % apkfile} archive_regex = re.compile(r'.*\.(aab|aar|apk|apks|jar|war|xapk|zip)$') class_regex = re.compile(r'classes.*\.dex') classes = set() try: with TemporaryDirectory() as tmp_dir, zipfile.ZipFile(apkfile, 'r') as apk_zip: for info in apk_zip.infolist(): # apk files can contain apk files, again with apk_zip.open(info) as apk_fp: if zipfile.is_zipfile(apk_fp): classes = classes.union(get_embedded_classes(apk_fp, depth + 1)) if not archive_regex.search(info.filename): classes.add( 'ZIP file without proper file extension: %s' % info.filename ) continue with apk_zip.open(info.filename) as fp: file_magic = fp.read(3) if file_magic == b'dex': if not class_regex.search(info.filename): classes.add('DEX file with fake name: %s' % info.filename) apk_zip.extract(info, tmp_dir) run = common.SdkToolsPopen( ["dexdump", '{}/{}'.format(tmp_dir, info.filename)], output=False, ) classes = classes.union( set(re.findall(r'[A-Z]+((?:\w+\/)+\w+)', run.output)) ) except zipfile.BadZipFile as ex: return {_('Problem with ZIP file: %s, error %s') % (apkfile, ex)} return classes def _datetime_now(): """Get datetime.now(), using this funciton allows mocking it for testing.""" return datetime.now(timezone.utc) def _scanner_cachedir(): """Get `Path` to fdroidserver cache dir.""" cfg = common.get_config() if not cfg: raise ConfigurationException('config not initialized') if "cachedir_scanner" not in cfg: raise ConfigurationException("could not load 'cachedir_scanner' from config") cachedir = Path(cfg["cachedir_scanner"]) cachedir.mkdir(exist_ok=True, parents=True) return cachedir class SignatureDataMalformedException(Exception): pass class SignatureDataOutdatedException(Exception): pass class SignatureDataCacheMissException(Exception): pass class SignatureDataNoDefaultsException(Exception): pass class SignatureDataVersionMismatchException(Exception): pass class SignatureDataController: def __init__(self, name, filename, url): self.name = name self.filename = filename self.url = url # by default we assume cache is valid indefinitely self.cache_duration = timedelta(days=999999) self.data = {} def check_data_version(self): if self.data.get("version") != SCANNER_CACHE_VERSION: raise SignatureDataVersionMismatchException() def check_last_updated(self): """Check if the last_updated value is ok and raise an exception if expired or inaccessible. :raises SignatureDataMalformedException: when timestamp value is inaccessible or not parse-able :raises SignatureDataOutdatedException: when timestamp is older then `self.cache_duration` """ last_updated = self.data.get("last_updated", None) if last_updated: try: last_updated = datetime.fromtimestamp(last_updated, timezone.utc) except ValueError as e: raise SignatureDataMalformedException() from e except TypeError as e: raise SignatureDataMalformedException() from e delta = (last_updated + self.cache_duration) - scanner._datetime_now() if delta > timedelta(seconds=0): logging.debug( _('next {name} cache update due in {time}').format( name=self.filename, time=delta ) ) else: raise SignatureDataOutdatedException() def fetch(self): try: self.fetch_signatures_from_web() self.write_to_cache() except Exception as e: raise Exception( _("downloading scanner signatures from '{}' failed").format(self.url) ) from e def load(self): try: try: self.load_from_cache() self.verify_data() self.check_last_updated() except SignatureDataCacheMissException: self.load_from_defaults() except (SignatureDataOutdatedException, SignatureDataNoDefaultsException): self.fetch_signatures_from_web() self.write_to_cache() except ( SignatureDataMalformedException, SignatureDataVersionMismatchException, ) as e: logging.critical( _( "scanner cache is malformed! You can clear it with: '{clear}'" ).format( clear='rm -r {}'.format(common.get_config()['cachedir_scanner']) ) ) raise e def load_from_defaults(self): raise SignatureDataNoDefaultsException() def load_from_cache(self): sig_file = scanner._scanner_cachedir() / self.filename if not sig_file.exists(): raise SignatureDataCacheMissException() with open(sig_file) as f: self.set_data(json.load(f)) def write_to_cache(self): sig_file = scanner._scanner_cachedir() / self.filename with open(sig_file, "w", encoding="utf-8") as f: json.dump(self.data, f, indent=2) logging.debug("write '{}' to cache".format(self.filename)) def verify_data(self): """Clean and validate `self.data`. Right now this function does just a basic key sanitation. """ self.check_data_version() valid_keys = [ 'timestamp', 'last_updated', 'version', 'signatures', 'cache_duration', ] for k in list(self.data.keys()): if k not in valid_keys: del self.data[k] def set_data(self, new_data): self.data = new_data if 'cache_duration' in new_data: self.cache_duration = timedelta(seconds=new_data['cache_duration']) def fetch_signatures_from_web(self): if not self.url.startswith("https://"): raise Exception(_("can't open non-https url: '{};".format(self.url))) logging.debug(_("downloading '{}'").format(self.url)) with urllib.request.urlopen(self.url) as f: # nosec B310 scheme filtered above self.set_data(json.load(f)) self.data['last_updated'] = scanner._datetime_now().timestamp() class ExodusSignatureDataController(SignatureDataController): def __init__(self): super().__init__( 'Exodus signatures', 'exodus.json', 'https://reports.exodus-privacy.eu.org/api/trackers', ) self.cache_duration = timedelta(days=1) # refresh exodus cache after one day self.has_trackers_json_key = True def fetch_signatures_from_web(self): logging.debug(_("downloading '{}'").format(self.url)) data = { "signatures": {}, "timestamp": scanner._datetime_now().timestamp(), "last_updated": scanner._datetime_now().timestamp(), "version": SCANNER_CACHE_VERSION, } if not self.url.startswith("https://"): raise Exception(_("can't open non-https url: '{};".format(self.url))) with urllib.request.urlopen(self.url) as f: # nosec B310 scheme filtered above trackerlist = json.load(f) if self.has_trackers_json_key: trackerlist = trackerlist["trackers"].values() for tracker in trackerlist: if tracker.get('code_signature'): data["signatures"][tracker["name"]] = { "name": tracker["name"], "warn_code_signatures": [tracker["code_signature"]], # exodus also provides network signatures, unused atm. # "network_signatures": [tracker["network_signature"]], "AntiFeatures": ["Tracking"], # TODO "license": "NonFree", # We assume all trackers in exodus # are non-free, although free # trackers like piwik, acra, # etc. might be listed by exodus # too. } self.set_data(data) class EtipSignatureDataController(ExodusSignatureDataController): def __init__(self): super().__init__() self.name = 'ETIP signatures' self.filename = 'etip.json' self.url = 'https://etip.exodus-privacy.eu.org/api/trackers/?format=json' self.has_trackers_json_key = False class SUSSDataController(SignatureDataController): def __init__(self): super().__init__( 'SUSS', 'suss.json', 'https://fdroid.gitlab.io/fdroid-suss/suss.json' ) def load_from_defaults(self): self.set_data(json.loads(SUSS_DEFAULT)) class ScannerTool: refresh_allowed = True def __init__(self): # we could add support for loading additional signature source # definitions from config.yml here self.scanner_data_lookup() options = common.get_options() options_refresh_scanner = ( hasattr(options, "refresh_scanner") and options.refresh_scanner and ScannerTool.refresh_allowed ) if options_refresh_scanner or common.get_config().get('refresh_scanner'): self.refresh() self.load() self.compile_regexes() def scanner_data_lookup(self): sigsources = common.get_config().get('scanner_signature_sources', []) logging.debug( "scanner is configured to use signature data from: '{}'".format( "', '".join(sigsources) ) ) self.sdcs = [] for i, source_url in enumerate(sigsources): if source_url.lower() == 'suss': self.sdcs.append(SUSSDataController()) elif source_url.lower() == 'exodus': self.sdcs.append(ExodusSignatureDataController()) elif source_url.lower() == 'etip': self.sdcs.append(EtipSignatureDataController()) else: u = urllib.parse.urlparse(source_url) if u.scheme != 'https' or u.path == "": raise ConfigurationException( "Invalid 'scanner_signature_sources' configuration: '{}'. " "Has to be a valid HTTPS-URL or match a predefined " "constants: 'suss', 'exodus'".format(source_url) ) self.sdcs.append( SignatureDataController( source_url, '{}_{}'.format(i, os.path.basename(u.path)), source_url, ) ) def load(self): for sdc in self.sdcs: sdc.load() def compile_regexes(self): self.regexs = { 'err_code_signatures': {}, 'err_gradle_signatures': {}, 'warn_code_signatures': {}, 'warn_gradle_signatures': {}, } for sdc in self.sdcs: for signame, sigdef in sdc.data.get('signatures', {}).items(): for sig in sigdef.get('code_signatures', []): self.regexs['err_code_signatures'][sig] = re.compile( '.*' + sig, re.IGNORECASE ) for sig in sigdef.get('gradle_signatures', []): self.regexs['err_gradle_signatures'][sig] = re.compile( '.*' + sig, re.IGNORECASE ) for sig in sigdef.get('warn_code_signatures', []): self.regexs['warn_code_signatures'][sig] = re.compile( '.*' + sig, re.IGNORECASE ) for sig in sigdef.get('warn_gradle_signatures', []): self.regexs['warn_gradle_signatures'][sig] = re.compile( '.*' + sig, re.IGNORECASE ) def refresh(self): for sdc in self.sdcs: sdc.fetch_signatures_from_web() sdc.write_to_cache() def add(self, new_controller: SignatureDataController): self.sdcs.append(new_controller) self.compile_regexes() # TODO: change this from singleton instance to dependency injection # use `_get_tool()` instead of accessing this directly _SCANNER_TOOL = None def _get_tool(): """Lazy loading function for getting a ScannerTool instance. ScannerTool initialization need to access `common.config` values. Those are only available after initialization through `common.read_config()`. So this factory assumes config was called at an erlier point in time. """ if not scanner._SCANNER_TOOL: scanner._SCANNER_TOOL = ScannerTool() return scanner._SCANNER_TOOL def scan_binary(apkfile): """Scan output of dexdump for known non-free classes.""" logging.info(_('Scanning APK with dexdump for known non-free classes.')) result = get_embedded_classes(apkfile) problems, warnings = 0, 0 for classname in result: for suspect, regexp in _get_tool().regexs['warn_code_signatures'].items(): if regexp.match(classname): logging.debug("Warning: found class '%s'" % classname) warnings += 1 for suspect, regexp in _get_tool().regexs['err_code_signatures'].items(): if regexp.match(classname): logging.debug("Problem: found class '%s'" % classname) problems += 1 logging.info(_('Scanning APK for extra signing blocks.')) a = common.get_androguard_APK(str(apkfile)) a.parse_v2_v3_signature() for b in a._v2_blocks: if b in APK_SIGNING_BLOCK_IDS: logging.debug( f"Problem: found extra signing block '{APK_SIGNING_BLOCK_IDS[b]}'" ) problems += 1 if warnings: logging.warning( _("Found {count} warnings in {filename}").format( count=warnings, filename=apkfile ) ) if problems: logging.critical( _("Found {count} problems in {filename}").format( count=problems, filename=apkfile ) ) return problems def scan_source(build_dir, build=metadata.Build(), json_per_build=None): """Scan the source code in the given directory (and all subdirectories). Returns ------- the number of fatal problems encountered. """ count = 0 if not json_per_build: json_per_build = MessageStore() def suspects_found(s): for n, r in _get_tool().regexs['err_gradle_signatures'].items(): if r.match(s): yield n allowed_repos = [ re.compile(r'^https://' + re.escape(repo) + r'/*') for repo in [ 'repo1.maven.org/maven2', # mavenCentral() 'jitpack.io', 'www.jitpack.io', 'repo.maven.apache.org/maven2', 'oss.jfrog.org/artifactory/oss-snapshot-local', 'oss.sonatype.org/content/repositories/snapshots', 'oss.sonatype.org/content/repositories/releases', 'oss.sonatype.org/content/groups/public', 'oss.sonatype.org/service/local/staging/deploy/maven2', 's01.oss.sonatype.org/content/repositories/snapshots', 's01.oss.sonatype.org/content/repositories/releases', 's01.oss.sonatype.org/content/groups/public', 's01.oss.sonatype.org/service/local/staging/deploy/maven2', 'clojars.org/repo', # Clojure free software libs 'repo.clojars.org', # Clojure free software libs 's3.amazonaws.com/repo.commonsware.com', # CommonsWare 'plugins.gradle.org/m2', # Gradle plugin repo 'maven.google.com', # google() ] ] + [ re.compile(r'^file://' + re.escape(repo) + r'/*') for repo in [ '/usr/share/maven-repo', # local repo on Debian installs ] ] scanignore = common.getpaths_map(build_dir, build.scanignore) scandelete = common.getpaths_map(build_dir, build.scandelete) scanignore_worked = set() scandelete_worked = set() def toignore(path_in_build_dir): for k, paths in scanignore.items(): for p in paths: if path_in_build_dir.startswith(p): scanignore_worked.add(k) return True return False def todelete(path_in_build_dir): for k, paths in scandelete.items(): for p in paths: if path_in_build_dir.startswith(p): scandelete_worked.add(k) return True return False def ignoreproblem(what, path_in_build_dir, json_per_build): """No summary. Parameters ---------- what: string describing the problem, will be printed in log messages path_in_build_dir path to the file relative to `build`-dir Returns ------- 0 as we explicitly ignore the file, so don't count an error """ msg = 'Ignoring %s at %s' % (what, path_in_build_dir) logging.info(msg) if json_per_build is not None: json_per_build.infos.append([msg, path_in_build_dir]) return 0 def removeproblem(what, path_in_build_dir, filepath, json_per_build): """No summary. Parameters ---------- what: string describing the problem, will be printed in log messages path_in_build_dir path to the file relative to `build`-dir filepath Path (relative to our current path) to the file Returns ------- 0 as we deleted the offending file """ msg = 'Removing %s at %s' % (what, path_in_build_dir) logging.info(msg) if json_per_build is not None: json_per_build.infos.append([msg, path_in_build_dir]) try: os.remove(filepath) except FileNotFoundError: # File is already gone, nothing to do. # This can happen if we find multiple problems in one file that is setup for scandelete # I.e. build.gradle files containig multiple unknown maven repos. pass return 0 def warnproblem(what, path_in_build_dir, json_per_build): """No summary. Parameters ---------- what: string describing the problem, will be printed in log messages path_in_build_dir path to the file relative to `build`-dir Returns ------- 0, as warnings don't count as errors """ if toignore(path_in_build_dir): return 0 logging.warning('Found %s at %s' % (what, path_in_build_dir)) if json_per_build is not None: json_per_build.warnings.append([what, path_in_build_dir]) return 0 def handleproblem(what, path_in_build_dir, filepath, json_per_build): """Dispatches to problem handlers (ignore, delete, warn). Or returns 1 for increasing the error count. Parameters ---------- what: string describing the problem, will be printed in log messages path_in_build_dir path to the file relative to `build`-dir filepath Path (relative to our current path) to the file Returns ------- 0 if the problem was ignored/deleted/is only a warning, 1 otherwise """ options = common.get_options() if toignore(path_in_build_dir): return ignoreproblem(what, path_in_build_dir, json_per_build) if todelete(path_in_build_dir): return removeproblem(what, path_in_build_dir, filepath, json_per_build) if 'src/test' in path_in_build_dir or '/test/' in path_in_build_dir: return warnproblem(what, path_in_build_dir, json_per_build) if options and 'json' in vars(options) and options.json: json_per_build.errors.append([what, path_in_build_dir]) if options and ( options.verbose or not ('json' in vars(options) and options.json) ): logging.error('Found %s at %s' % (what, path_in_build_dir)) return 1 def is_executable(path): return os.path.exists(path) and os.access(path, os.X_OK) textchars = bytearray({7, 8, 9, 10, 12, 13, 27} | set(range(0x20, 0x100)) - {0x7f}) # fmt: skip def is_binary(path): d = None with open(path, 'rb') as f: d = f.read(1024) return bool(d.translate(None, textchars)) # False positives patterns for files that are binary and executable. safe_paths = [ re.compile(r) for r in [ r".*/drawable[^/]*/.*\.png$", # png drawables r".*/mipmap[^/]*/.*\.png$", # png mipmaps ] ] def is_image_file(path): try: mimetype = magic.from_file(path, mime=True) if mimetype and mimetype.startswith('image/'): return True except Exception as e: logging.info(e) def safe_path(path_in_build_dir): for sp in safe_paths: if sp.match(path_in_build_dir): return True return False def is_used_by_gradle_without_catalog(line): return any( command.match(line) for command in get_gradle_compile_commands_without_catalog(build) ) def is_used_by_gradle_with_catalog(line, prefix): for m in ( command.match(line) for command in get_gradle_compile_commands_with_catalog(build, prefix) ): if m: return m all_catalogs = {} # Iterate through all files in the source code for root, dirs, files in os.walk(build_dir, topdown=True): # It's topdown, so checking the basename is enough for ignoredir in ('.hg', '.git', '.svn', '.bzr'): if ignoredir in dirs: dirs.remove(ignoredir) if "settings.gradle" in files or "settings.gradle.kts" in files: all_catalogs[str(root)] = get_catalogs(root) for curfile in files: if curfile in ['.DS_Store']: continue # Path (relative) to the file filepath = os.path.join(root, curfile) if os.path.islink(filepath): continue path_in_build_dir = os.path.relpath(filepath, build_dir) if curfile in ('gradle-wrapper.jar', 'gradlew', 'gradlew.bat'): removeproblem(curfile, path_in_build_dir, filepath, json_per_build) elif curfile.endswith('.apk'): removeproblem( _('Android APK file'), path_in_build_dir, filepath, json_per_build ) elif curfile.endswith('.a'): count += handleproblem( _('static library'), path_in_build_dir, filepath, json_per_build ) elif curfile.endswith('.aar'): count += handleproblem( _('Android AAR library'), path_in_build_dir, filepath, json_per_build, ) elif curfile.endswith('.class'): count += handleproblem( _('Java compiled class'), path_in_build_dir, filepath, json_per_build, ) elif curfile.endswith('.dex'): count += handleproblem( _('Android DEX code'), path_in_build_dir, filepath, json_per_build ) elif curfile.endswith('.gz') or curfile.endswith('.tgz'): count += handleproblem( _('gzip file archive'), path_in_build_dir, filepath, json_per_build ) # We use a regular expression here to also match versioned shared objects like .so.0.0.0 elif re.match(r'.*\.so(\..+)*$', curfile): count += handleproblem( _('shared library'), path_in_build_dir, filepath, json_per_build ) elif curfile.endswith('.zip'): count += handleproblem( _('ZIP file archive'), path_in_build_dir, filepath, json_per_build ) elif curfile.endswith('.jar'): for name in suspects_found(curfile): count += handleproblem( 'usual suspect \'%s\'' % name, path_in_build_dir, filepath, json_per_build, ) count += handleproblem( _('Java JAR file'), path_in_build_dir, filepath, json_per_build ) elif curfile.endswith('.wasm'): count += handleproblem( _('WebAssembly binary file'), path_in_build_dir, filepath, json_per_build, ) elif curfile.endswith('.java'): if not os.path.isfile(filepath): continue with open(filepath, 'r', errors='replace') as f: for line in f: if 'DexClassLoader' in line: count += handleproblem( 'DexClassLoader', path_in_build_dir, filepath, json_per_build, ) break elif curfile.endswith('.gradle') or curfile.endswith('.gradle.kts'): catalog_path = str(build_dir) # Find the longest path of dir that the curfile is in for p in all_catalogs: if os.path.commonpath([root, p]) == p: catalog_path = p catalogs = all_catalogs.get(catalog_path, {}) if not os.path.isfile(filepath): continue with open(filepath, 'r', errors='replace') as f: lines = f.readlines() for i, line in enumerate(lines): if is_used_by_gradle_without_catalog(line): for name in suspects_found(line): count += handleproblem( f"usual suspect '{name}'", path_in_build_dir, filepath, json_per_build, ) for prefix, catalog in catalogs.items(): m = is_used_by_gradle_with_catalog(line, prefix) if not m: continue accessor = m[1] coordinates = catalog.get_coordinate(accessor) for coordinate in coordinates: for name in suspects_found(coordinate): count += handleproblem( f"usual suspect '{prefix}.{accessor}: {name}'", path_in_build_dir, filepath, json_per_build, ) noncomment_lines = [ line for line in lines if not common.gradle_comment.match(line) ] no_comments = re.sub( r'/\*.*?\*/', '', ''.join(noncomment_lines), flags=re.DOTALL ) for url in MAVEN_URL_REGEX.findall(no_comments): if not any(r.match(url) for r in allowed_repos): count += handleproblem( 'unknown maven repo \'%s\'' % url, path_in_build_dir, filepath, json_per_build, ) elif os.path.splitext(path_in_build_dir)[1] in ['', '.bin', '.out', '.exe']: if is_binary(filepath): count += handleproblem( 'binary', path_in_build_dir, filepath, json_per_build ) elif curfile in DEPFILE: d = root while d.startswith(str(build_dir)): for lockfile in DEPFILE[curfile]: if os.path.isfile(os.path.join(d, lockfile)): break else: d = os.path.dirname(d) continue break else: count += handleproblem( _('dependency file without lock'), path_in_build_dir, filepath, json_per_build, ) elif is_executable(filepath): if is_binary(filepath) and not ( safe_path(path_in_build_dir) or is_image_file(filepath) ): warnproblem( _('executable binary, possibly code'), path_in_build_dir, json_per_build, ) for p in scanignore: if p not in scanignore_worked: logging.error(_('Unused scanignore path: %s') % p) count += 1 for p in scandelete: if p not in scandelete_worked: logging.error(_('Unused scandelete path: %s') % p) count += 1 return count def main(): parser = ArgumentParser( usage="%(prog)s [options] [(APPID[:VERCODE] | path/to.apk) ...]" ) common.setup_global_opts(parser) parser.add_argument( "appid", nargs='*', help=_("application ID with optional versionCode in the form APPID[:VERCODE]"), ) parser.add_argument( "-f", "--force", action="store_true", default=False, help=_("Force scan of disabled apps and builds."), ) parser.add_argument( "--json", action="store_true", default=False, help=_("Output JSON to stdout.") ) parser.add_argument( "-r", "--refresh", dest="refresh_scanner", action="store_true", default=False, help=_("fetch the latest version of signatures from the web"), ) parser.add_argument( "-e", "--exit-code", action="store_true", default=False, help=_("Exit with a non-zero code if problems were found"), ) metadata.add_metadata_arguments(parser) options = common.parse_args(parser) metadata.warnings_action = options.W json_output = dict() if options.json: if options.verbose: logging.basicConfig(stream=sys.stderr, level=logging.DEBUG) else: logging.getLogger().setLevel(logging.ERROR) # initialize/load configuration values common.get_config() probcount = 0 appids = [] for apk in options.appid: if os.path.isfile(apk): count = scanner.scan_binary(apk) if count > 0: logging.warning( _('Scanner found {count} problems in {apk}').format( count=count, apk=apk ) ) probcount += count else: appids.append(apk) if not appids: if options.exit_code and probcount > 0: sys.exit(ExitCode.NONFREE_CODE) if options.refresh_scanner: _get_tool() return apps = common.read_app_args(appids, allow_version_codes=True) build_dir = 'build' if not os.path.isdir(build_dir): logging.info("Creating build directory") os.makedirs(build_dir) srclib_dir = os.path.join(build_dir, 'srclib') extlib_dir = os.path.join(build_dir, 'extlib') for appid, app in apps.items(): json_per_appid = dict() if app.Disabled and not options.force: logging.info(_("Skipping {appid}: disabled").format(appid=appid)) json_per_appid['disabled'] = MessageStore().infos.append( 'Skipping: disabled' ) continue try: if app.RepoType == 'srclib': build_dir = os.path.join('build', 'srclib', app.Repo) else: build_dir = os.path.join('build', appid) if app.get('Builds'): logging.info(_("Processing {appid}").format(appid=appid)) # Set up vcs interface and make sure we have the latest code... vcs = common.getvcs(app.RepoType, app.Repo, build_dir) else: logging.info( _( "{appid}: no builds specified, running on current source state" ).format(appid=appid) ) json_per_build = MessageStore() json_per_appid['current-source-state'] = json_per_build count = scan_source(build_dir, json_per_build=json_per_build) if count > 0: logging.warning( _('Scanner found {count} problems in {appid}:').format( count=count, appid=appid ) ) probcount += count app['Builds'] = [] for build in app.get('Builds', []): json_per_build = MessageStore() json_per_appid[build.versionCode] = json_per_build if build.disable and not options.force: logging.info( "...skipping version %s - %s" % (build.versionName, build.get('disable', build.commit[1:])) ) continue logging.info("...scanning version " + build.versionName) # Prepare the source code... common.prepare_source( vcs, app, build, build_dir, srclib_dir, extlib_dir, False ) count = scan_source(build_dir, build, json_per_build=json_per_build) if count > 0: logging.warning( _( 'Scanner found {count} problems in {appid}:{versionCode}:' ).format( count=count, appid=appid, versionCode=build.versionCode ) ) probcount += count except BuildException as be: logging.warning( 'Could not scan app %s due to BuildException: %s' % (appid, be) ) probcount += 1 except VCSException as vcse: logging.warning('VCS error while scanning app %s: %s' % (appid, vcse)) probcount += 1 except Exception: logging.warning( 'Could not scan app %s due to unknown error: %s' % (appid, traceback.format_exc()) ) probcount += 1 for k, v in json_per_appid.items(): if len(v.errors) or len(v.warnings) or len(v.infos): json_output[appid] = { k: dict((field.name, getattr(v, field.name)) for field in fields(v)) for k, v in json_per_appid.items() } break logging.info(_("Finished")) if options.json: print(json.dumps(json_output)) elif probcount or options.verbose: print(_("%d problems found") % probcount) if __name__ == "__main__": main() SUSS_DEFAULT = r'''{ "cache_duration": 86400, "signatures": { "com.amazon.device.ads": { "anti_features": [ "Ads", "NonFreeComp" ], "code_signatures": [ "com/amazon/device/ads" ], "description": "an interface for views used to retrieve and display Amazon ads.", "license": "NonFree" }, "com.amazon.device.associates": { "anti_features": [ "Ads", "NonFreeComp" ], "code_signatures": [ "com/amazon/device/associates" ], "description": "library for Amazon\u2019s affiliate marketing program.", "license": "NonFree" }, "com.amazon.device.iap": { "anti_features": [ "NonFreeComp", "NonFreeNet" ], "code_signatures": [ "com/amazon/device/iap" ], "description": "allows an app to present, process, and fulfill purchases of digital content and subscriptions within your app.", "license": "NonFree" }, "com.amazonaws": { "code_signatures": [ "com/amazonaws/AbortedException", "com/amazonaws/AmazonClientException", "com/amazonaws/AmazonServiceException$ErrorType", "com/amazonaws/AmazonServiceException", "com/amazonaws/AmazonWebServiceClient", "com/amazonaws/AmazonWebServiceRequest", "com/amazonaws/AmazonWebServiceResponse", "com/amazonaws/async", "com/amazonaws/auth", "com/amazonaws/ClientConfiguration", "com/amazonaws/cognito", "com/amazonaws/DefaultRequest", "com/amazonaws/event", "com/amazonaws/handlers", "com/amazonaws/http", "com/amazonaws/HttpMethod", "com/amazonaws/internal", "com/amazonaws/logging", "com/amazonaws/metrics", "com/amazonaws/mobile", "com/amazonaws/mobileconnectors", "com/amazonaws/Protocol", "com/amazonaws/regions", "com/amazonaws/RequestClientOptions$Marker", "com/amazonaws/RequestClientOptions", "com/amazonaws/Request", "com/amazonaws/ResponseMetadata", "com/amazonaws/Response", "com/amazonaws/retry", "com/amazonaws/SDKGlobalConfiguration", "com/amazonaws/ServiceNameFactory", "com/amazonaws/services", "com/amazonaws/transform", "com/amazonaws/util" ], "gradle_signatures": [ "com.amazonaws:amazon-kinesis-aggregator", "com.amazonaws:amazon-kinesis-connectors", "com.amazonaws:amazon-kinesis-deaggregator", "com.amazonaws:aws-android-sdk-apigateway-core", "com.amazonaws:aws-android-sdk-auth-core", "com.amazonaws:aws-android-sdk-auth-facebook", "com.amazonaws:aws-android-sdk-auth-google", "com.amazonaws:aws-android-sdk-auth-ui", "com.amazonaws:aws-android-sdk-auth-userpools", "com.amazonaws:aws-android-sdk-cognito", "com.amazonaws:aws-android-sdk-cognitoauth", "com.amazonaws:aws-android-sdk-cognitoidentityprovider-asf", "com.amazonaws:aws-android-sdk-comprehend", "com.amazonaws:aws-android-sdk-core", "com.amazonaws:aws-android-sdk-ddb", "com.amazonaws:aws-android-sdk-ddb-document", "com.amazonaws:aws-android-sdk-iot", "com.amazonaws:aws-android-sdk-kinesis", "com.amazonaws:aws-android-sdk-kinesisvideo", "com.amazonaws:aws-android-sdk-kinesisvideo-archivedmedia", "com.amazonaws:aws-android-sdk-kms", "com.amazonaws:aws-android-sdk-lambda", "com.amazonaws:aws-android-sdk-lex", "com.amazonaws:aws-android-sdk-location", "com.amazonaws:aws-android-sdk-logs", "com.amazonaws:aws-android-sdk-mobileanalytics", "com.amazonaws:aws-android-sdk-mobile-client", "com.amazonaws:aws-android-sdk-pinpoint", "com.amazonaws:aws-android-sdk-polly", "com.amazonaws:aws-android-sdk-rekognition", "com.amazonaws:aws-android-sdk-s3", "com.amazonaws:aws-android-sdk-ses", "com.amazonaws:aws-android-sdk-sns", "com.amazonaws:aws-android-sdk-sqs", "com.amazonaws:aws-android-sdk-textract", "com.amazonaws:aws-android-sdk-transcribe", "com.amazonaws:aws-android-sdk-translate", "com.amazonaws:dynamodb-key-diagnostics-library", "com.amazonaws:DynamoDBLocal", "com.amazonaws:dynamodb-lock-client", "com.amazonaws:ivs-broadcast", "com.amazonaws:ivs-player", "com.amazonaws:kinesis-storm-spout" ], "license": "NonFree", "name": "AmazonAWS" }, "com.android.billingclient": { "code_signatures": [ "com/android/billingclient" ], "documentation": [ "https://developer.android.com/google/play/billing/integrate" ], "gradle_signatures": [ "com.android.billingclient", "com.google.androidbrowserhelper:billing", "com.anjlab.android.iab.v3:library", "com.github.penn5:donations", "me.proton.core:payment-iap" ], "license": "NonFree", "name": "BillingClient" }, "com.android.installreferrer": { "anti_features": [ "NonFreeDep", "NonFreeNet" ], "code_signatures": [ "com/android/installreferrer" ], "documentation": [ "https://developer.android.com/google/play/installreferrer/library" ], "gradle_signatures": [ "com.android.installreferrer" ], "license": "NonFree", "name": "Play Install Referrer Library" }, "com.anychart": { "anti_features": [ "NonFreeComp" ], "code_signatures": [ "com/anychart" ], "description": "a data visualization library for easily creating interactive charts in Android apps.", "license": "NonFree" }, "com.appboy": { "anti_features": [ "NonFreeComp", "Tracking" ], "code_signatures": [ "com/appboy" ], "description": "Targets customers based on personal interests, location, past purchases, and more; profiles users, segments audiences, and utilizes analytics for targeted advertisements.", "license": "NonFree" }, "com.appbrain": { "anti_features": [ "Ads", "NonFreeComp" ], "code_signatures": [ "com/appbrain" ], "description": "See Exodus Privacy.", "license": "NonFree" }, "com.applause.android": { "anti_features": [ "NonFreeComp", "Tracking" ], "code_signatures": [ "com/applause/android" ], "description": "crowd-sourced testing. See Crunchbase and Exodus Privacy.", "license": "NonFree" }, "com.applovin": { "anti_features": [ "Ads" ], "code_signatures": [ "com/applovin" ], "description": "a mobile advertising technology company that enables brands to create mobile marketing campaigns that are fueled by data. Primary targets games.", "license": "NonFree" }, "com.appsflyer": { "anti_features": [ "NonFreeComp", "Tracking" ], "code_signatures": [ "com/appsflyer" ], "description": "a mobile & attribution analytics platform.", "license": "NonFree" }, "com.apptentive": { "anti_features": [ "NonFreeComp", "Tracking" ], "code_signatures": [ "com/apptentive" ], "description": "See Exodus Privacy.", "license": "NonFree" }, "com.apptimize": { "anti_features": [ "NonFreeComp", "Tracking" ], "code_signatures": [ "com/apptimize" ], "description": "See Exodus Privacy and Crunchbase.", "license": "NonFree" }, "com.askingpoint": { "anti_features": [ "NonFreeComp", "Tracking" ], "code_signatures": [ "com/askingpoint" ], "description": "complete mobile user engagement solution (power local, In-application evaluations and audits, input, user support, mobile reviews and informing).", "license": "NonFree" }, "com.baidu.mobstat": { "code_signatures": [ "com/baidu/mobstat" ], "documentation": [ "https://mtj.baidu.com/web/sdk/index" ], "gradle_signatures": [ "com.baidu.mobstat" ], "license": "NonFree", "name": "\u767e\u5ea6\u79fb\u52a8\u7edf\u8ba1SDK" }, "com.batch": { "anti_features": [ "Ads", "NonFreeComp", "Tracking" ], "code_signatures": [ "com/batch" ], "description": "mobile engagement platform to execute CRM tactics over iOS, Android & mobile websites.", "license": "NonFree" }, "com.bosch.mtprotocol": { "anti_features": [ "NonFreeComp" ], "code_signatures": [ "com/bosch/mtprotocol" ], "description": "simplify and manage use of Bosch GLM and PLR laser rangefinders with Bluetooth connectivity.", "license": "NonFree" }, "com.bugsee.library.Bugsee": { "anti_features": [ "NonFreeComp", "Tracking" ], "code_signatures": [ "com/bugsee/library/Bugsee" ], "description": "see video, network and logs that led to bugs and crashes in live apps. No need to reproduce intermittent bugs. With Bugsee, all the crucial data is always there.", "license": "NonFree" }, "com.bugsense": { "code_signatures": [ "com/bugsense" ], "documentation": [ "https://github.com/bugsense/docs/blob/master/android.md" ], "gradle_signatures": [ "com.bugsense" ], "license": "NonFree", "name": "BugSense" }, "com.chartboost.sdk": { "anti_features": [ "Ads", "NonFreeComp" ], "code_signatures": [ "com/chartboost/sdk" ], "description": "create customized interstitial and video ads, promote new games, and swap traffic with one another. For more details, see Wikipedia.", "license": "NonFree" }, "com.cloudrail": { "code_signature": [ "com/cloudrail" ], "documentation": [ "https://cloudrail.com/" ], "gradle_signatures": [ "com.cloudrail" ], "license": "NonFree", "name": "CloudRail" }, "com.comscore.analytics": { "anti_features": [ "NonFreeComp", "Tracking" ], "code_signatures": [ "com/comscore" ], "description": "See Wikipedia for details.", "license": "NonFree" }, "com.crashlytics.sdk.android": { "code_signatures": [ "com/crashlytics" ], "documentation": [ "https://firebase.google.com/docs/crashlytics" ], "gradle_signatures": [ "crashlytics" ], "license": "NonFree", "name": "Firebase Crashlytics" }, "com.crittercism": { "code_signatures": [ "com/crittercism" ], "documentation": [ "https://github.com/crittercism/crittercism-unity-android" ], "gradle_signatures": [ "com.crittercism" ], "license": "NonFree", "name": "Crittercism Plugin for Unity Crash Reporting" }, "com.criware": { "anti_features": [ "NonFreeComp", "NonFreeAssets" ], "code_signatures": [ "com/criware" ], "description": "audio and video solutions that can be integrated with popular game engines.", "license": "NonFree" }, "com.deezer.sdk": { "anti_features": [ "NonFreeComp", "NonFreeNet" ], "code_signatures": [ "com/deezer/sdk" ], "description": "a closed-source API for the Deezer music streaming service.", "license": "NonFree" }, "com.dynamicyield": { "anti_features": [ "Ads", "NonFreeComp", "Tracking" ], "code_signatures": [ "com/dynamicyield" ], "description": "targeted advertising. Tracks user via location (GPS, WiFi, location data). Collects PII, profiling. See Exodus Privacy for more details.", "license": "NonFree" }, "com.dynatrace.android.app": { "anti_features": [ "NonFreeComp", "Tracking" ], "code_signatures": [ "com/dynatrace/android/app" ], "description": "See Crunchbase and Exodus Privacy.", "license": "NonFree" }, "com.ensighten": { "anti_features": [ "NonFreeComp", "Tracking" ], "code_signatures": [ "com/ensighten" ], "description": "organizations can leverage first-party customer data and profiles to fuel omni-channel action and insight using their existing technology investments. See Crunchbase and Exodus Privacy.", "license": "NonFree" }, "com.epicgames.mobile.eossdk": { "anti_features": [ "NonFreeComp", "NonFreeNet" ], "code_signatures": [ "com/epicgames/mobile/eossdk" ], "description": "integrate games with Epic Account Services and Epic Games Store", "license": "NonFree" }, "com.facebook.android": { "code_signatures": [ "com/facebook/AccessToken", "com/facebook/AccessTokenCache", "com/facebook/AccessTokenManager", "com/facebook/AccessTokenSource", "com/facebook/AccessTokenTracker", "com/facebook/all/All", "com/facebook/appevents/aam/MetadataIndexer", "com/facebook/appevents/aam/MetadataMatcher", "com/facebook/appevents/aam/MetadataRule", "com/facebook/appevents/aam/MetadataViewObserver", "com/facebook/appevents/AccessTokenAppIdPair", "com/facebook/appevents/AnalyticsUserIDStore", "com/facebook/appevents/AppEvent", "com/facebook/appevents/AppEventCollection", "com/facebook/appevents/AppEventDiskStore", "com/facebook/appevents/AppEventQueue", "com/facebook/appevents/AppEventsConstants", "com/facebook/appevents/AppEventsLogger", "com/facebook/appevents/AppEventsLoggerImpl", "com/facebook/appevents/AppEventsManager", "com/facebook/appevents/AppEventStore", "com/facebook/appevents/cloudbridge/AppEventsCAPIManager", "com/facebook/appevents/cloudbridge/AppEventsConversionsAPITransformer", "com/facebook/appevents/cloudbridge/AppEventsConversionsAPITransformerWebRequests", "com/facebook/appevents/codeless/CodelessLoggingEventListener", "com/facebook/appevents/codeless/CodelessManager", "com/facebook/appevents/codeless/CodelessMatcher", "com/facebook/appevents/codeless/internal/Constants", "com/facebook/appevents/codeless/internal/EventBinding", "com/facebook/appevents/codeless/internal/ParameterComponent", "com/facebook/appevents/codeless/internal/PathComponent", "com/facebook/appevents/codeless/internal/SensitiveUserDataUtils", "com/facebook/appevents/codeless/internal/UnityReflection", "com/facebook/appevents/codeless/internal/ViewHierarchy", "com/facebook/appevents/codeless/RCTCodelessLoggingEventListener", "com/facebook/appevents/codeless/ViewIndexer", "com/facebook/appevents/codeless/ViewIndexingTrigger", "com/facebook/appevents/eventdeactivation/EventDeactivationManager", "com/facebook/appevents/FacebookSDKJSInterface", "com/facebook/appevents/FlushReason", "com/facebook/appevents/FlushResult", "com/facebook/appevents/FlushStatistics", "com/facebook/appevents/iap/InAppPurchaseActivityLifecycleTracker", "com/facebook/appevents/iap/InAppPurchaseAutoLogger", "com/facebook/appevents/iap/InAppPurchaseBillingClientWrapper", "com/facebook/appevents/iap/InAppPurchaseEventManager", "com/facebook/appevents/iap/InAppPurchaseLoggerManager", "com/facebook/appevents/iap/InAppPurchaseManager", "com/facebook/appevents/iap/InAppPurchaseSkuDetailsWrapper", "com/facebook/appevents/iap/InAppPurchaseUtils", "com/facebook/appevents/integrity/BlocklistEventsManager", "com/facebook/appevents/integrity/IntegrityManager", "com/facebook/appevents/integrity/MACARuleMatchingManager", "com/facebook/appevents/integrity/ProtectedModeManager", "com/facebook/appevents/integrity/RedactedEventsManager", "com/facebook/appevents/internal/ActivityLifecycleTracker", "com/facebook/appevents/InternalAppEventsLogger", "com/facebook/appevents/internal/AppEventsLoggerUtility", "com/facebook/appevents/internal/AppEventUtility", "com/facebook/appevents/internal/AutomaticAnalyticsLogger", "com/facebook/appevents/internal/Constants", "com/facebook/appevents/internal/FileDownloadTask", "com/facebook/appevents/internal/HashUtils", "com/facebook/appevents/internal/SessionInfo", "com/facebook/appevents/internal/SessionLogger", "com/facebook/appevents/internal/SourceApplicationInfo", "com/facebook/appevents/internal/ViewHierarchyConstants", "com/facebook/appevents/ml/Model", "com/facebook/appevents/ml/ModelManager", "com/facebook/appevents/ml/MTensor", "com/facebook/appevents/ml/Operator", "com/facebook/appevents/ml/Utils", "com/facebook/appevents/ondeviceprocessing/OnDeviceProcessingManager", "com/facebook/appevents/ondeviceprocessing/RemoteServiceParametersHelper", "com/facebook/appevents/ondeviceprocessing/RemoteServiceWrapper", "com/facebook/appevents/PersistedEvents", "com/facebook/appevents/restrictivedatafilter/RestrictiveDataManager", "com/facebook/appevents/SessionEventsState", "com/facebook/appevents/suggestedevents/FeatureExtractor", "com/facebook/appevents/suggestedevents/PredictionHistoryManager", "com/facebook/appevents/suggestedevents/SuggestedEventsManager", "com/facebook/appevents/suggestedevents/SuggestedEventViewHierarchy", "com/facebook/appevents/suggestedevents/ViewObserver", "com/facebook/appevents/suggestedevents/ViewOnClickListener", "com/facebook/appevents/UserDataStore", "com/facebook/applinks/AppLinkData", "com/facebook/applinks/AppLinks", "com/facebook/applinks/FacebookAppLinkResolver", "com/facebook/AuthenticationToken", "com/facebook/AuthenticationTokenCache", "com/facebook/AuthenticationTokenClaims", "com/facebook/AuthenticationTokenHeader", "com/facebook/AuthenticationTokenManager", "com/facebook/AuthenticationTokenTracker", "com/facebook/bolts/AggregateException", "com/facebook/bolts/AndroidExecutors", "com/facebook/bolts/AppLink", "com/facebook/bolts/AppLinkResolver", "com/facebook/bolts/AppLinks", "com/facebook/bolts/BoltsExecutors", "com/facebook/bolts/CancellationToken", "com/facebook/bolts/CancellationTokenRegistration", "com/facebook/bolts/CancellationTokenSource", "com/facebook/bolts/Continuation", "com/facebook/bolts/ExecutorException", "com/facebook/bolts/Task", "com/facebook/bolts/TaskCompletionSource", "com/facebook/bolts/UnobservedErrorNotifier", "com/facebook/bolts/UnobservedTaskException", "com/facebook/CallbackManager", "com/facebook/common/Common", "com/facebook/core/Core", "com/facebook/CurrentAccessTokenExpirationBroadcastReceiver", "com/facebook/CustomTabActivity", "com/facebook/CustomTabMainActivity", "com/facebook/devicerequests/internal/DeviceRequestsHelper", "com/facebook/FacebookActivity", "com/facebook/FacebookAuthorizationException", "com/facebook/FacebookBroadcastReceiver", "com/facebook/FacebookButtonBase", "com/facebook/FacebookCallback", "com/facebook/FacebookContentProvider", "com/facebook/FacebookDialog", "com/facebook/FacebookDialogException", "com/facebook/FacebookException", "com/facebook/FacebookGraphResponseException", "com/facebook/FacebookOperationCanceledException", "com/facebook/FacebookRequestError", "com/facebook/FacebookSdk", "com/facebook/FacebookSdkNotInitializedException", "com/facebook/FacebookSdkVersion", "com/facebook/FacebookServiceException", "com/facebook/gamingservices/cloudgaming/AppToUserNotificationSender", "com/facebook/gamingservices/cloudgaming/CloudGameLoginHandler", "com/facebook/gamingservices/cloudgaming/DaemonReceiver", "com/facebook/gamingservices/cloudgaming/DaemonRequest", "com/facebook/gamingservices/cloudgaming/GameFeaturesLibrary", "com/facebook/gamingservices/cloudgaming/InAppAdLibrary", "com/facebook/gamingservices/cloudgaming/InAppPurchaseLibrary", "com/facebook/gamingservices/cloudgaming/internal/SDKAnalyticsEvents", "com/facebook/gamingservices/cloudgaming/internal/SDKConstants", "com/facebook/gamingservices/cloudgaming/internal/SDKLogger", "com/facebook/gamingservices/cloudgaming/internal/SDKMessageEnum", "com/facebook/gamingservices/cloudgaming/internal/SDKShareIntentEnum", "com/facebook/gamingservices/cloudgaming/PlayableAdsLibrary", "com/facebook/gamingservices/ContextChooseDialog", "com/facebook/gamingservices/ContextCreateDialog", "com/facebook/gamingservices/ContextSwitchDialog", "com/facebook/gamingservices/CustomUpdate", "com/facebook/gamingservices/FriendFinderDialog", "com/facebook/gamingservices/GameRequestDialog", "com/facebook/gamingservices/GamingContext", "com/facebook/gamingservices/GamingGroupIntegration", "com/facebook/gamingservices/GamingImageUploader", "com/facebook/gamingservices/GamingPayload", "com/facebook/gamingservices/GamingServices", "com/facebook/gamingservices/GamingVideoUploader", "com/facebook/gamingservices/internal/DateFormatter", "com/facebook/gamingservices/internal/GamingMediaUploader", "com/facebook/gamingservices/internal/TournamentJoinDialogURIBuilder", "com/facebook/gamingservices/internal/TournamentScoreType", "com/facebook/gamingservices/internal/TournamentShareDialogURIBuilder", "com/facebook/gamingservices/internal/TournamentSortOrder", "com/facebook/gamingservices/model/ContextChooseContent", "com/facebook/gamingservices/model/ContextCreateContent", "com/facebook/gamingservices/model/ContextSwitchContent", "com/facebook/gamingservices/model/CustomUpdateContent", "com/facebook/gamingservices/OpenGamingMediaDialog", "com/facebook/gamingservices/Tournament", "com/facebook/gamingservices/TournamentConfig", "com/facebook/gamingservices/TournamentFetcher", "com/facebook/gamingservices/TournamentJoinDialog", "com/facebook/gamingservices/TournamentShareDialog", "com/facebook/gamingservices/TournamentUpdater", "com/facebook/GraphRequest", "com/facebook/GraphRequestAsyncTask", "com/facebook/GraphRequestBatch", "com/facebook/GraphResponse", "com/facebook/HttpMethod", "com/facebook/internal/AnalyticsEvents", "com/facebook/internal/AppCall", "com/facebook/internal/AttributionIdentifiers", "com/facebook/internal/BoltsMeasurementEventListener", "com/facebook/internal/BundleJSONConverter", "com/facebook/internal/CallbackManagerImpl", "com/facebook/internal/CollectionMapper", "com/facebook/internal/CustomTab", "com/facebook/internal/CustomTabUtils", "com/facebook/internal/DialogFeature", "com/facebook/internal/DialogPresenter", "com/facebook/internal/FacebookDialogBase", "com/facebook/internal/FacebookDialogFragment", "com/facebook/internal/FacebookGamingAction", "com/facebook/internal/FacebookInitProvider", "com/facebook/internal/FacebookRequestErrorClassification", "com/facebook/internal/FacebookSignatureValidator", "com/facebook/internal/FacebookWebFallbackDialog", "com/facebook/internal/FeatureManager", "com/facebook/internal/FetchedAppGateKeepersManager", "com/facebook/internal/FetchedAppSettings", "com/facebook/internal/FetchedAppSettingsManager", "com/facebook/internal/FileLruCache", "com/facebook/internal/FragmentWrapper", "com/facebook/internal/gatekeeper/GateKeeper", "com/facebook/internal/gatekeeper/GateKeeperRuntimeCache", "com/facebook/internal/ImageDownloader", "com/facebook/internal/ImageRequest", "com/facebook/internal/ImageResponse", "com/facebook/internal/ImageResponseCache", "com/facebook/internal/InstagramCustomTab", "com/facebook/internal/InstallReferrerUtil", "com/facebook/internal/instrument/anrreport/ANRDetector", "com/facebook/internal/instrument/anrreport/ANRHandler", "com/facebook/internal/instrument/crashreport/CrashHandler", "com/facebook/internal/instrument/crashshield/AutoHandleExceptions", "com/facebook/internal/instrument/crashshield/CrashShieldHandler", "com/facebook/internal/instrument/crashshield/NoAutoExceptionHandling", "com/facebook/internal/instrument/errorreport/ErrorReportData", "com/facebook/internal/instrument/errorreport/ErrorReportHandler", "com/facebook/internal/instrument/ExceptionAnalyzer", "com/facebook/internal/instrument/InstrumentData", "com/facebook/internal/instrument/InstrumentManager", "com/facebook/internal/instrument/InstrumentUtility", "com/facebook/internal/instrument/threadcheck/ThreadCheckHandler", "com/facebook/internal/InternalSettings", "com/facebook/internal/LockOnGetVariable", "com/facebook/internal/Logger", "com/facebook/internal/logging/dumpsys/EndToEndDumper", "com/facebook/internal/Mutable", "com/facebook/internal/NativeAppCallAttachmentStore", "com/facebook/internal/NativeProtocol", "com/facebook/internal/PlatformServiceClient", "com/facebook/internal/ProfileInformationCache", "com/facebook/internal/qualityvalidation/Excuse", "com/facebook/internal/qualityvalidation/ExcusesForDesignViolations", "com/facebook/internal/security/CertificateUtil", "com/facebook/internal/security/OidcSecurityUtil", "com/facebook/internal/ServerProtocol", "com/facebook/internal/SmartLoginOption", "com/facebook/internal/UrlRedirectCache", "com/facebook/internal/Utility", "com/facebook/internal/Validate", "com/facebook/internal/WebDialog", "com/facebook/internal/WorkQueue", "com/facebook/LegacyTokenHelper", "com/facebook/LoggingBehavior", "com/facebook/login/CodeChallengeMethod", "com/facebook/login/CustomTabLoginMethodHandler", "com/facebook/login/CustomTabPrefetchHelper", "com/facebook/login/DefaultAudience", "com/facebook/login/DeviceAuthDialog", "com/facebook/login/DeviceAuthMethodHandler", "com/facebook/login/DeviceLoginManager", "com/facebook/login/GetTokenClient", "com/facebook/login/GetTokenLoginMethodHandler", "com/facebook/login/InstagramAppLoginMethodHandler", "com/facebook/login/KatanaProxyLoginMethodHandler", "com/facebook/login/Login", "com/facebook/login/LoginBehavior", "com/facebook/login/LoginClient", "com/facebook/login/LoginConfiguration", "com/facebook/login/LoginFragment", "com/facebook/login/LoginLogger", "com/facebook/login/LoginManager", "com/facebook/login/LoginMethodHandler", "com/facebook/login/LoginResult", "com/facebook/login/LoginStatusClient", "com/facebook/login/LoginTargetApp", "com/facebook/login/NativeAppLoginMethodHandler", "com/facebook/login/NonceUtil", "com/facebook/login/PKCEUtil", "com/facebook/login/StartActivityDelegate", "com/facebook/LoginStatusCallback", "com/facebook/login/WebLoginMethodHandler", "com/facebook/login/WebViewLoginMethodHandler", "com/facebook/login/widget/DeviceLoginButton", "com/facebook/login/widget/LoginButton", "com/facebook/login/widget/ProfilePictureView", "com/facebook/login/widget/ToolTipPopup", "com/facebook/messenger/Messenger", "com/facebook/messenger/MessengerThreadParams", "com/facebook/messenger/MessengerUtils", "com/facebook/messenger/ShareToMessengerParams", "com/facebook/messenger/ShareToMessengerParamsBuilder", "com/facebook/Profile", "com/facebook/ProfileCache", "com/facebook/ProfileManager", "com/facebook/ProfileTracker", "com/facebook/ProgressNoopOutputStream", "com/facebook/ProgressOutputStream", "com/facebook/RequestOutputStream", "com/facebook/RequestProgress", "com/facebook/share/internal/CameraEffectFeature", "com/facebook/share/internal/CameraEffectJSONUtility", "com/facebook/share/internal/GameRequestValidation", "com/facebook/share/internal/LegacyNativeDialogParameters", "com/facebook/share/internal/MessageDialogFeature", "com/facebook/share/internal/NativeDialogParameters", "com/facebook/share/internal/ResultProcessor", "com/facebook/share/internal/ShareConstants", "com/facebook/share/internal/ShareContentValidation", "com/facebook/share/internal/ShareDialogFeature", "com/facebook/share/internal/ShareFeedContent", "com/facebook/share/internal/ShareInternalUtility", "com/facebook/share/internal/ShareStoryFeature", "com/facebook/share/internal/VideoUploader", "com/facebook/share/internal/WebDialogParameters", "com/facebook/share/model/AppGroupCreationContent", "com/facebook/share/model/CameraEffectArguments", "com/facebook/share/model/CameraEffectTextures", "com/facebook/share/model/GameRequestContent", "com/facebook/share/model/ShareCameraEffectContent", "com/facebook/share/model/ShareContent", "com/facebook/share/model/ShareHashtag", "com/facebook/share/model/ShareLinkContent", "com/facebook/share/model/ShareMedia", "com/facebook/share/model/ShareMediaContent", "com/facebook/share/model/ShareMessengerActionButton", "com/facebook/share/model/ShareMessengerURLActionButton", "com/facebook/share/model/ShareModel", "com/facebook/share/model/ShareModelBuilder", "com/facebook/share/model/SharePhoto", "com/facebook/share/model/SharePhotoContent", "com/facebook/share/model/ShareStoryContent", "com/facebook/share/model/ShareVideo", "com/facebook/share/model/ShareVideoContent", "com/facebook/share/Share", "com/facebook/share/ShareApi", "com/facebook/share/ShareBuilder", "com/facebook/share/Sharer", "com/facebook/share/widget/GameRequestDialog", "com/facebook/share/widget/MessageDialog", "com/facebook/share/widget/SendButton", "com/facebook/share/widget/ShareButton", "com/facebook/share/widget/ShareButtonBase", "com/facebook/share/widget/ShareDialog", "com/facebook/UserSettingsManager", "com/facebook/WebDialog" ], "documentation": [ "https://developers.facebook.com/docs/android" ], "gradle_signatures": [ "com.facebook.android" ], "license": "NonFree", "name": "Facebook Android SDK" }, "com.flurry.android": { "code_signature": [ "com/flurry" ], "documentation": [ "https://www.flurry.com/" ], "gradle_signatures": [ "com.flurry.android" ], "license": "NonFree", "name": "Flurry Android SDK" }, "com.garmin.android.connectiq": { "anti_features": [ "NonFreeComp" ], "code_signatures": [ "com/garmin/android/apps/connectmobile/connectiq" ], "description": "SDK to build unique wearable experiences leveraging Garmin device sensors and features.", "license": "NonFree" }, "com.garmin.connectiq": { "code_signatures": [ "com/garmin/android/connectiq" ], "documentation": [ "https://developer.garmin.com/connect-iq/core-topics/mobile-sdk-for-android/" ], "gradle_signatures": [ "com.garmin.connectiq:ciq-companion-app-sdk" ], "license": "NonFree", "name": "Connect IQ Mobile SDK for Android" }, "com.garmin.fit": { "anti_features": [ "NonFreeComp" ], "code_signatures": [ "com/garmin/fit" ], "description": "SDK to access the Garmin Fit.", "license": "NonFree" }, "com.geetest": { "code_signatures": [ "com/geetest" ], "documentation": [ "https://docs.geetest.com/" ], "gradle_signatures": [ "com.geetest" ], "license": "NonFree", "name": "GeeTest" }, "com.github.junrar": { "code_signatures": [ "com/github/junrar" ], "documentation": [ "https://github.com/junrar/junrar" ], "gradle_signatures": [ "com.github.junrar:junrar" ], "license": "NonFree", "name": "Junrar" }, "com.github.omicronapps.7-Zip-JBinding-4Android": { "documentation": [ "https://github.com/omicronapps/7-Zip-JBinding-4Android" ], "gradle_signatures": [ "com.github.omicronapps:7-Zip-JBinding-4Android" ], "license": "NonFree", "name": "7-Zip-JBinding-4Android" }, "com.google.ads": { "code_signatures": [ "com/google/ads" ], "documentation": [ "https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side" ], "gradle_signatures": [ "com.google.ads", "com.google.android.exoplayer:extension-ima", "androidx.media3:media3-exoplayer-ima" ], "license": "NonFree", "name": "IMA SDK for Android" }, "com.google.android.apps.auto.sdk": { "anti_features": [ "NonFreeComp" ], "code_signatures": [ "com/google/android/apps/auto/sdk" ], "description": "Framework to develop apps for Android Auto", "license": "NonFree" }, "com.google.android.gcm": { "anti_features": [ "NonFreeComp", "NonFreeNet" ], "code_signatures": [ "com/google/android/gcm" ], "description": "Google Cloud Messaging is a mobile notification service developed by Google that enables third-party application developers to send notification data or information from developer-run servers to app.", "license": "NonFree" }, "com.google.android.gms": { "code_signatures": [ "com/google/android/gms" ], "documentation": [ "https://www.android.com/gms/" ], "gradle_signatures": [ "com.google.gms(?!.google-services)", "com.google.android.gms(?!.oss-licenses-plugin)", "com.google.android.ump", "androidx.core:core-google-shortcuts", "androidx.credentials:credentials-play-services-auth", "androidx.media3:media3-cast", "androidx.media3:media3-datasource-cronet", "androidx.wear:wear-remote-interactions", "androidx.work:work-gcm", "com.google.android.exoplayer:extension-cast", "com.google.android.exoplayer:extension-cronet", "com.evernote:android-job", "com.cloudinary:cloudinary-android.*:2\\.[12]\\.", "com.pierfrancescosoffritti.androidyoutubeplayer:chromecast-sender", "com.yayandroid:locationmanager", "(?Home channels for mobile apps.", "license": "NonFree" }, "com.google.android.play": { "anti_features": [ "NonFreeDep", "NonFreeNet" ], "code_signatures": [ "com/google/android/play/core" ], "documentation": [ "https://developer.android.com/guide/playcore" ], "gradle_signatures": [ "com.google.android.play:app-update", "com.google.android.play:asset-delivery", "com.google.android.play:core.*", "com.google.android.play:feature-delivery", "com.google.android.play:review", "androidx.navigation:navigation-dynamic-features", "com.github.SanojPunchihewa:InAppUpdater", "com.suddenh4x.ratingdialog:awesome-app-rating" ], "license": "NonFree", "name": "Google Play Core" }, "com.google.android.play.appupdate": { "anti_features": [ "NonFreeComp" ], "code_signatures": [ "com/google/android/play/appupdate" ], "description": "manages operations that allow an app to initiate its own updates.", "license": "NonFree" }, "com.google.android.play.integrity": { "anti_features": [ "NonFreeComp", "NonFreeNet" ], "code_signatures": [ "com/google/android/play/integrity" ], "description": "helps you check that interactions and server requests are coming from your genuine app binary running on a genuine Android device.", "license": "NonFree" }, "com.google.android.play.review": { "anti_features": [ "NonFreeComp" ], "code_signatures": [ "com/google/android/play/review" ], "description": "lets you prompt users to submit Play Store ratings and reviews without the inconvenience of leaving your app or game.", "license": "NonFree" }, "com.google.android.vending": { "anti_features": [ "NonFreeComp" ], "code_signatures": [ "com/google/android/vending/(?!licensing|expansion)" ], "description": "the Google Play Store app and its libaries, parts are FOSS and get vendored in libs as they are", "documentation": [ "https://github.com/google/play-licensing/tree/master/lvl_library/src/main", "https://github.com/googlearchive/play-apk-expansion/tree/master/zip_file/src/com/google/android/vending/expansion/zipfile", "https://github.com/googlearchive/play-apk-expansion/tree/master/apkx_library/src/com/google/android/vending/expansion/downloader" ], "license": "NonFree" }, "com.google.android.wearable": { "code_signatures": [ "com/google/android/wearable/(?!compat/WearableActivityController)" ], "description": "an API for the Android Wear platform, note that androidx.wear:wear has a stub https://android.googlesource.com/platform/frameworks/support/+/refs/heads/androidx-master-release/wear/wear/src/androidTest/java/com/google/android/wearable/compat/WearableActivityController.java#26", "gradle_signatures": [ "com.google.android.support:wearable", "com.google.android.wearable:wearable" ], "license": "NonFree" }, "com.google.android.youtube.player": { "anti_features": [ "NonFreeComp", "NonFreeNet" ], "code_signatures": [ "com/google/android/youtube/player" ], "description": "enables you to easily play YouTube videos and display thumbnails of YouTube videos in your Android application.", "license": "NonFree" }, "com.google.mlkit": { "code_signatures": [ "com/google/mlkit" ], "documentation": [ "https://developers.google.com/ml-kit" ], "gradle_signatures": [ "com.google.mlkit", "io.github.g00fy2.quickie" ], "license": "NonFree", "name": "ML Kit" }, "com.google.vr": { "anti_features": [ "NonFreeComp" ], "code_signatures": [ "com/google/vr" ], "description": "enables Daydream and Cardboard app development on Android.", "license": "NonFree" }, "com.heapanalytics": { "anti_features": [ "NonFreeComp", "Tracking" ], "code_signatures": [ "com/heapanalytics" ], "description": "automatically captures every web, mobile, and cloud interaction: clicks, submits, transactions, emails, and more. Retroactively analyze your data without writing code.", "license": "NonFree" }, "com.heyzap": { "code_signatures": [ "com/heyzap" ], "documentation": [ "https://www.digitalturbine.com/" ], "license": "NonFree", "name": "Heyzap" }, "com.huawei.hms": { "anti_features": [ "NonFreeComp" ], "code_signatures": [ "com/huawei/hms" ], "description": "Huawei's pendant to GMS (Google Mobile Services)", "license": "NonFree" }, "com.hypertrack": { "code_signatures": [ "com/hypertrack/(?!hyperlog)" ], "documentation": [ "https://github.com/hypertrack/sdk-android" ], "gradle_signatures": [ "com.hypertrack(?!:hyperlog)" ], "gradle_signatures_negative_examples": [ "com.hypertrack:hyperlog" ], "license": "NonFree", "name": "HyperTrack SDK for Android" }, "com.instabug": { "anti_features": [ "NonFreeComp", "Tracking" ], "code_signatures": [ "com/instabug" ], "description": "In-App Feedback and Bug Reporting for Mobile Apps.", "license": "NonFree" }, "com.kiddoware.kidsplace.sdk": { "anti_features": [ "NonFreeComp" ], "code_signatures": [ "com/kiddoware/kidsplace/sdk" ], "description": "parental control", "license": "NonFree" }, "com.kochava.android.tracker": { "anti_features": [ "NonFreeComp", "Tracking" ], "code_signatures": [ "com/kochava/android/tracker" ], "description": "provides holistic, unbiased measurement for precise, real-time visualization of app performance through the funnel. See Crunchbase and Exodus Privacy.", "license": "NonFree" }, "com.mapbox": { "MaintainerNotes": "It seems that all libs in https://github.com/mapbox/mapbox-java is fully FOSS\nsince 3.0.0.\n", "documentation": [ "https://docs.mapbox.com/android/java/overview/", "https://github.com/mapbox/mapbox-java" ], "gradle_signatures": [ "com\\.mapbox(?!\\.mapboxsdk:mapbox-sdk-(services|geojson|turf):([3-5]))" ], "gradle_signatures_negative_examples": [ "com.mapbox.mapboxsdk:mapbox-sdk-services:5.0.0", "com.github.johan12345:mapbox-events-android:a21c324501", "implementation(\"com.github.johan12345.AnyMaps:anymaps-mapbox:$anyMapsVersion\")" ], "gradle_signatures_positive_examples": [ "com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v7:0.6.0", "com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v8:0.7.0", "com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v7:0.7.0", "com.mapbox.mapboxsdk:mapbox-android-plugin-locationlayer:0.4.0", "com.mapbox.mapboxsdk:mapbox-android-plugin-markerview-v8:0.3.0", "com.mapbox.mapboxsdk:mapbox-android-plugin-places-v8:0.9.0", "com.mapbox.mapboxsdk:mapbox-android-plugin-scalebar-v8:0.2.0", "com.mapbox.mapboxsdk:mapbox-android-sdk:7.3.0" ], "license": "NonFree", "name": "Mapbox Java SDK" }, "com.microblink": { "anti_features": [ "NonFreeComp", "NonFreeNet", "Tracking" ], "code_signatures": [ "com/microblink" ], "description": "verify users at scale and automate your document-based workflow with computer vision tech built for a remote world.", "license": "NonFree" }, "com.microsoft.band": { "anti_features": [ "NonFreeComp" ], "code_signatures": [ "com/microsoft/band" ], "description": "library to access the Microsoft Band smartwatch.", "license": "NonFree" }, "com.mopub.mobileads": { "anti_features": [ "Ads", "NonFreeComp" ], "code_signatures": [ "com/mopub/mobileads" ], "description": "ad framework run by Twitter until 1/2022, then sold to AppLovin.", "license": "NonFree" }, "com.newrelic.agent": { "anti_features": [ "NonFreeComp", "Tracking" ], "code_signatures": [ "com/newrelic/agent" ], "description": "delivering full-stack visibility and analytics to enterprises around the world. See Crunchbase and Exodus Privacy.", "license": "NonFree" }, "com.onesignal": { "code_signatures": [ "com/onesignal" ], "documentation": [ "https://github.com/OneSignal/OneSignal-Android-SDK" ], "gradle_signatures": [ "com.onesignal:OneSignal" ], "license": "NonFree", "name": "OneSignal Android Push Notification Plugin" }, "com.optimizely": { "anti_features": [ "NonFreeComp", "Tracking" ], "code_signatures": [ "com/optimizely" ], "description": "part of the comScore, Inc. market research community, a leading global market research effort that studies and reports on Internet trends and behavior.", "license": "NonFree" }, "com.paypal.sdk": { "code_signatures": [ "com/paypal" ], "documentation": [ "https://github.com/paypal/PayPal-Android-SDK", "https://github.com/paypal/android-checkout-sdk" ], "gradle_signatures": [ "com.paypal" ], "license": "NonFree", "name": "PayPal Android SDK" }, "com.pushwoosh": { "anti_features": [ "NonFreeComp", "Tracking" ], "code_signatures": [ "com/pushwoosh" ], "description": "mobile analytics under the cover of push messaging.", "license": "NonFree" }, "com.quantcast.measurement.service": { "anti_features": [ "NonFreeComp", "Tracking" ], "code_signatures": [ "com/quantcast/measurement/service" ], "description": "processes real-time data at the intersection of commerce and culture, providing useful, actionable insights for brands and publishers. See Crunchbase and Exodus Privacy.", "license": "NonFree" }, "com.revenuecat.purchases": { "code_signatures": [ "com/revenuecat/purchases" ], "documentation": [ "https://www.revenuecat.com/" ], "gradle_signatures": [ "com.revenuecat.purchases" ], "license": "NonFree", "name": "RevenueCat Purchases" }, "com.samsung.accessory": { "anti_features": [ "NonFreeComp" ], "code_signatures": [ "com/samsung/accessory" ], "description": "provides a stable environment in which you can use a variety features by connecting accessories to your mobile device.", "license": "NonFree" }, "com.samsung.android.sdk.look": { "anti_features": [ "NonFreeComp" ], "code_signatures": [ "com/samsung/android/sdk/look" ], "description": "offers specialized widgets and service components for extended functions of the Samsung Android devices.", "license": "NonFree" }, "com.sendbird.android": { "anti_features": [ "NonFreeComp", "NonFreeNet", "Tracking" ], "code_signatures": [ "com/sendbird/android" ], "description": "an easy-to-use Chat API, native Chat SDKs, and a fully-managed chat platform on the backend means faster time-to-market.", "license": "NonFree" }, "com.smaato.soma": { "anti_features": [ "Ads", "NonFreeComp" ], "code_signatures": [ "com/smaato/soma" ], "description": "a mobile ad platform that includes video ads.", "license": "NonFree" }, "com.spotify.sdk": { "anti_features": [ "NonFreeComp", "NonFreeNet" ], "code_signatures": [ "com/spotify/sdk" ], "description": "allows your application to interact with the Spotify app service. (Note that while the SDK repo claims Apache license, the code is not available there)", "license": "NonFree" }, "com.startapp.android": { "anti_features": [ "Ads", "Tracking", "NonFreeComp" ], "code_signatures": [ "com/startapp" ], "description": "partly quite intrusive ad network.", "license": "NonFree" }, "com.telerik.android": { "anti_features": [ "NonFreeComp" ], "code_signatures": [ "com/telerik/android" ], "description": "offers high quality Xamarin Forms UI components and Visual Studio item templates to enable every developer.", "license": "NonFree" }, "com.tencent.bugly": { "code_signatures": [ "com/tencent/bugly" ], "documentation": [ "https://bugly.qq.com/" ], "gradle_signatures": [ "com.tencent.bugly" ], "license": "NonFree", "name": "Bugly Android SDK" }, "com.tencent.mapsdk": { "anti_features": [ "NonFreeNet" ], "code_signatures": [ "com/tencent/tencentmap" ], "description": "giving access to Tencent Maps.", "license": "NonFree" }, "com.tenjin.android.TenjinSDK": { "anti_features": [ "Tracking" ], "code_signatures": [ "com/tenjin/android/TenjinSDK" ], "description": "a marketing platform designed for mobile that features analytics, automated aggregation, and direct data visualization with direct SQL access.", "license": "NonFree" }, "com.umeng.umsdk": { "code_signatures": [ "com/umeng" ], "documentation": [ "https://developer.umeng.com/docs/119267/detail/118584" ], "gradle_signatures": [ "com.umeng" ], "license": "NonFree", "name": "Umeng SDK" }, "com.wei.android.lib": { "code_signatures": [ "com/wei/android/lib/fingerprintidentify" ], "documentation": [ "https://github.com/uccmawei/FingerprintIdentify" ], "gradle_signatures": [ "com.wei.android.lib:fingerprintidentify", "com.github.uccmawei:FingerprintIdentify" ], "gradle_signatures_positive_examples": [ "implementation \"com.github.uccmawei:fingerprintidentify:${safeExtGet(\"fingerprintidentify\", \"1.2.6\")}\"" ], "license": "NonFree", "name": "FingerprintIdentify" }, "com.yandex.android": { "code_signatures": [ "com/yandex/android/(?!:authsdk)" ], "gradle_signatures": [ "com\\.yandex\\.android(?!:authsdk)" ], "gradle_signatures_negative_examples": [ "com.yandex.android:authsdk" ], "license": "NonFree", "name": "Yandex SDK" }, "com.yandex.metrica": { "anti_features": [ "NonFreeComp", "Tracking" ], "code_signatures": [ "com/yandex/metrica" ], "description": "a mobile attribution and analytics platform developed by Yandex. It is free, real-time and has no data limits restriction. See Crunchbase and Exodus Privacy.", "license": "NonFree" }, "com.yandex.mobile.ads": { "anti_features": [ "Ads", "NonFreeComp" ], "code_signatures": [ "com/yandex/mobile/ads" ], "description": "See Exodus Privacy.", "license": "NonFree" }, "de.epgpaid": { "anti_features": [ "NonFreeComp" ], "code_signatures": [ "de/epgpaid" ], "description": "access paid EPG (Electronic Program Guide, for TV) data (after payment, of course). Part of TVBrowser.", "license": "NonFree" }, "de.innosystec.unrar": { "code_signatures": [ "de/innosystec/unrar" ], "description": "java unrar util", "license": "NonFree" }, "firebase": { "code_signatures": [ "com/google/firebase" ], "documentation": [ "https://www.firebase.com" ], "gradle_signatures": [ "com(\\.google)?\\.firebase[.:](?!firebase-jobdispatcher|geofire-java)", "com.microsoft.appcenter:appcenter-push" ], "gradle_signatures_negative_examples": [ " compile 'com.firebase:firebase-jobdispatcher:0.8.4'", "implementation 'com.firebase:geofire-java:3.0.0'", " compile 'com.firebaseui:firebase-ui-auth:3.1.3'", "com.firebaseui:firebase-ui-database", "com.firebaseui:firebase-ui-storage", "com.github.axet:android-firebase-fake", "com.github.b3er.rxfirebase:firebase-database", "com.github.b3er.rxfirebase:firebase-database-kotlin", "com.segment.analytics.android.integrations:firebase" ], "gradle_signatures_positive_examples": [ "\tcompile 'com.google.firebase:firebase-crash:11.0.8'", "\tcompile 'com.google.firebase:firebase-core:11.0.8'", "com.firebase:firebase-client-android:2.5.2", "com.google.firebase.crashlytics", "com.google.firebase.firebase-perf", "com.google.firebase:firebase-ads", "com.google.firebase:firebase-analytics", "com.google.firebase:firebase-appindexing", "com.google.firebase:firebase-auth", "com.google.firebase:firebase-config", "com.google.firebase:firebase-core", "com.google.firebase:firebase-crash", "com.google.firebase:firebase-crashlytics", "com.google.firebase:firebase-database", "com.google.firebase:firebase-dynamic-links", "com.google.firebase:firebase-firestore", "com.google.firebase:firebase-inappmessaging", "com.google.firebase:firebase-inappmessaging-display", "com.google.firebase:firebase-messaging", "com.google.firebase:firebase-ml-natural-language", "com.google.firebase:firebase-ml-natural-language-smart-reply-model", "com.google.firebase:firebase-ml-vision", "com.google.firebase:firebase-perf", "com.google.firebase:firebase-plugins", "com.google.firebase:firebase-storage" ], "license": "NonFree", "name": "Firebase" }, "google-maps": { "anti_features": [ "NonFreeDep", "NonFreeNet" ], "api_key_ids": [ "com\\.google\\.android\\.geo\\.API_KEY", "com\\.google\\.android\\.maps\\.v2\\.API_KEY" ], "documentation": [ "https://developers.google.com/maps/documentation/android-sdk/overview" ], "license": "NonFree", "name": "Google Maps" }, "io.fabric.sdk.android": { "anti_features": [ "NonFreeComp", "Tracking" ], "code_signatures": [ "io/fabric/sdk/android" ], "description": "Framework to integrate services. Provides e.g. crash reports and analytics. Aquired by Google in 2017.", "license": "NonFree" }, "io.github.sinaweibosdk": { "code_signatures": [ "com/sina" ], "documentation": [ "https://github.com/sinaweibosdk/weibo_android_sdk" ], "gradle_signatures": [ "io.github.sinaweibosdk" ], "license": "NonFree", "name": "SinaWeiboSDK" }, "io.intercom": { "anti_features": [ "NonFreeComp", "NonFreeNet" ], "code_signatures": [ "io/intercom" ], "description": "engage customers with email, push, and in\u2011app messages and support them with an integrated knowledge base and help desk.", "license": "NonFree" }, "io.objectbox": { "code_signatures": [ "io/objectbox" ], "documentation": [ "https://objectbox.io/faq/#license-pricing" ], "gradle_signatures": [ "io.objectbox:objectbox-gradle-plugin" ], "license": "NonFree", "name": "ObjectBox Database" }, "me.pushy": { "code_signatures": [ "me/pushy" ], "documentation": [ "https://pushy.me/" ], "gradle_signatures": [ "me.pushy" ], "license": "NonFree", "name": "Pushy" }, "org.mariuszgromada.math": { "code_signatures": [ "org/mariuszgromada/math/mxparser/parsertokens/SyntaxStringBuilder", "org/mariuszgromada/math/mxparser/CalcStepRecord", "org/mariuszgromada/math/mxparser/CalcStepsRegister", "org/mariuszgromada/math/mxparser/License", "org/mariuszgromada/math/mxparser/CloneCache", "org/mariuszgromada/math/mxparser/ElementAtTheEnd", "org/mariuszgromada/math/mxparser/CompilationDetails", "org/mariuszgromada/math/mxparser/CompiledElement" ], "documentation": [ "https://mathparser.org", "https://mathparser.org/mxparser-license/" ], "gradle_signatures": [ "org.mariuszgromada.math:MathParser.org-mXparser:[5-9]" ], "license": "NonFree", "name": "mXparser" }, "tornaco.android.sec": { "anti_features": [ "NonFreeComp" ], "code_signatures": [ "tornaco/android/sec" ], "description": "proprietary part of the Thanox application", "license": "NonFree" } }, "timestamp": 1733823271.362948, "version": 1, "last_updated": 1742401014.503398 }''' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/fdroidserver/signatures.py0000644000175000017500000000757214770502071020171 0ustar00hanshans#!/usr/bin/env python3 # # Copyright (C) 2017, Michael Poehn # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . from argparse import ArgumentParser import re import os import sys import logging from . import _ from . import common from .exception import FDroidException def extract_signature(apkpath): if not os.path.exists(apkpath): raise FDroidException("file APK does not exists '{}'".format(apkpath)) if not common.verify_apk_signature(apkpath): raise FDroidException("no valid signature in '{}'".format(apkpath)) logging.debug('signature okay: %s', apkpath) appid, vercode, _ignored = common.get_apk_id(apkpath) sigdir = common.metadata_get_sigdir(appid, vercode) if not os.path.exists(sigdir): os.makedirs(sigdir) common.apk_extract_signatures(apkpath, sigdir) return sigdir def extract(options): # Create tmp dir if missing… tmp_dir = 'tmp' if not os.path.exists(tmp_dir): os.mkdir(tmp_dir) if not options.APK or len(options.APK) <= 0: logging.critical(_('no APK supplied')) sys.exit(1) # iterate over supplied APKs downlaod and extract them… httpre = re.compile(r'https?:\/\/') for apk in options.APK: try: if os.path.isfile(apk): sigdir = extract_signature(apk) logging.info( _("Fetched signatures for '{apkfilename}' -> '{sigdir}'").format( apkfilename=apk, sigdir=sigdir ) ) elif httpre.match(apk): if apk.startswith('https') or options.no_check_https: try: from . import net tmp_apk = os.path.join(tmp_dir, 'signed.apk') net.download_file(apk, tmp_apk) sigdir = extract_signature(tmp_apk) logging.info( _( "Fetched signatures for '{apkfilename}' -> '{sigdir}'" ).format(apkfilename=apk, sigdir=sigdir) ) finally: if tmp_apk and os.path.exists(tmp_apk): os.remove(tmp_apk) else: logging.warning( _( 'refuse downloading via insecure HTTP connection ' '(use HTTPS or specify --no-https-check): {apkfilename}' ).format(apkfilename=apk) ) except FDroidException as e: logging.warning( _("Failed fetching signatures for '{apkfilename}': {error}").format( apkfilename=apk, error=e ) ) if e.detail: logging.debug(e.detail) def main(): parser = ArgumentParser() common.setup_global_opts(parser) parser.add_argument( "APK", nargs='*', help=_("signed APK, either a file-path or HTTPS URL.") ) parser.add_argument("--no-check-https", action="store_true", default=False) options = common.parse_args(parser) common.set_console_logging(options.verbose, options.color) common.read_config() extract(options) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742486863.0 fdroidserver-2.4.0/fdroidserver/signindex.py0000644000175000017500000001776314767036517020015 0ustar00hanshans#!/usr/bin/env python3 # # gpgsign.py - part of the FDroid server tools # Copyright (C) 2015, Ciaran Gultnieks, ciaran@ciarang.com # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import json import os import time import zipfile from argparse import ArgumentParser import logging from . import _ from . import common from . import metadata from .exception import FDroidException config = None start_timestamp = time.gmtime() def sign_jar(jar, use_old_algs=False): """Sign a JAR file with the best available algorithm. The current signing method uses apksigner to sign the JAR so that it will automatically select algorithms that are compatible with Android SDK 23, which added the most recent algorithms: https://developer.android.com/reference/java/security/Signature This signing method uses then inherits the default signing algothim settings, since Java and Android both maintain those. That helps avoid a repeat of being stuck on an old signing algorithm. That means specifically that this call to apksigner does not specify any of the algorithms. The old indexes must be signed by SHA1withRSA otherwise they will no longer be compatible with old Androids. This method requires a properly initialized config object. """ if use_old_algs: # This does use old hashing algorithms, i.e. SHA1, but that's not # broken yet for file verification. This could be set to SHA256, # but then Android < 4.3 would not be able to verify it. # https://code.google.com/p/android/issues/detail?id=38321 args = [ config['jarsigner'], '-keystore', config['keystore'], '-storepass:env', 'FDROID_KEY_STORE_PASS', '-digestalg', 'SHA1', '-sigalg', 'SHA1withRSA', jar, config['repo_keyalias'], ] if config['keystore'] == 'NONE': args += config['smartcardoptions'] else: # smardcards never use -keypass args += ['-keypass:env', 'FDROID_KEY_PASS'] else: # https://developer.android.com/studio/command-line/apksigner args = [ config['apksigner'], 'sign', '--min-sdk-version', '23', # enable all current algorithms '--max-sdk-version', '24', # avoid future incompatible algorithms # disable all APK signature types, only use JAR sigs aka v1 '--v1-signing-enabled', 'true', '--v2-signing-enabled', 'false', '--v3-signing-enabled', 'false', '--v4-signing-enabled', 'false', '--ks', config['keystore'], '--ks-pass', 'env:FDROID_KEY_STORE_PASS', '--ks-key-alias', config['repo_keyalias'], ] if config['keystore'] == 'NONE': args += common.get_apksigner_smartcardoptions(config['smartcardoptions']) else: # smardcards never use --key-pass args += ['--key-pass', 'env:FDROID_KEY_PASS'] args += [jar] env_vars = { 'FDROID_KEY_STORE_PASS': config['keystorepass'], 'FDROID_KEY_PASS': config.get('keypass', ""), } p = common.FDroidPopen(args, envs=env_vars) if not use_old_algs and p.returncode != 0: # workaround for apksigner v30 on f-droid.org publish server v4 = args.index("--v4-signing-enabled") del args[v4 + 1] del args[v4] p = common.FDroidPopen(args, envs=env_vars) if p.returncode != 0: raise FDroidException("Failed to sign %s: %s" % (jar, p.output)) def sign_index(repodir, json_name): """Sign data file like entry.json to make a signed JAR like entry.jar. The data file like index-v1.json means that there is unsigned data. That file is then stuck into a jar and signed by the signing process. This is a bit different than sign_jar, which is used for index.jar: that creates index.xml then puts that in a index_unsigned.jar, then that file is signed. This also checks to make sure that the JSON files are intact before signing them. Broken JSON files should never be signed, so taking some extra time and failing hard is the preferred option. This signing process can happen on an entirely separate machine and file tree, so this ensures that nothing got broken during transfer. """ json_file = os.path.join(repodir, json_name) with open(json_file, encoding="utf-8") as fp: data = json.load(fp) if json_name == 'entry.json': index_file = os.path.join(repodir, data['index']['name'].lstrip('/')) sha256 = common.sha256sum(index_file) if sha256 != data['index']['sha256']: raise FDroidException( _('%s has bad SHA-256: %s') % (index_file, sha256) ) with open(index_file) as fp: index = json.load(fp) if not isinstance(index, dict): raise FDroidException(_('%s did not produce a dict!') % index_file) elif json_name == 'index-v1.json': [metadata.App(app) for app in data["apps"]] name, ext = common.get_extension(json_name) jar_file = os.path.join(repodir, name + '.jar') with zipfile.ZipFile(jar_file, 'w', zipfile.ZIP_DEFLATED) as jar: jar.write(json_file, json_name) if json_name in ('index.xml', 'index-v1.json'): sign_jar(jar_file, use_old_algs=True) else: sign_jar(jar_file) def status_update_json(signed): """Output a JSON file with metadata about this run.""" logging.debug(_('Outputting JSON')) output = common.setup_status_output(start_timestamp) if signed: output['signed'] = signed common.write_status_json(output) def main(): global config parser = ArgumentParser() common.setup_global_opts(parser) common.parse_args(parser) config = common.read_config() if 'jarsigner' not in config: raise FDroidException( _( 'Java jarsigner not found! Install in standard location or set java_paths!' ) ) repodirs = ['repo'] if config['archive_older'] != 0: repodirs.append('archive') signed = [] for output_dir in repodirs: if not os.path.isdir(output_dir): raise FDroidException("Missing output directory '" + output_dir + "'") unsigned = os.path.join(output_dir, 'index_unsigned.jar') if os.path.exists(unsigned): sign_jar(unsigned) index_jar = os.path.join(output_dir, 'index.jar') os.rename(unsigned, index_jar) logging.info('Signed index in ' + output_dir) signed.append(index_jar) json_name = 'index-v1.json' index_file = os.path.join(output_dir, json_name) if os.path.exists(index_file): sign_index(output_dir, json_name) logging.info('Signed ' + index_file) signed.append(index_file) json_name = 'entry.json' index_file = os.path.join(output_dir, json_name) if os.path.exists(index_file): sign_index(output_dir, json_name) logging.info('Signed ' + index_file) signed.append(index_file) if not signed: logging.info(_("Nothing to do")) status_update_json(signed) if __name__ == "__main__": main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742486863.0 fdroidserver-2.4.0/fdroidserver/tail.py0000644000175000017500000000634314767036517016746 0ustar00hanshans#!/usr/bin/env python """Python-Tail - Unix tail follow implementation in Python. python-tail can be used to monitor changes to a file. Example ------- >>> import tail >>> >>> # Create a tail instance >>> t = tail.Tail('file-to-be-followed') >>> >>> # Register a callback function to be called when a new line is found in the followed file. >>> # If no callback function is registerd, new lines would be printed to standard out. >>> t.register_callback(callback_function) >>> >>> # Follow the file with 5 seconds as sleep time between iterations. >>> # If sleep time is not provided 1 second is used as the default time. >>> t.follow(s=5) """ # Author - Kasun Herath # Source - https://github.com/kasun/python-tail # modified by Hans-Christoph Steiner to add the # background thread and support reading multiple lines per read cycle import os import sys import time import threading class Tail(object): """Represents a tail command.""" def __init__(self, tailed_file): """Initialize a Tail instance. Check for file validity, assigns callback function to standard out. Parameters ---------- tailed_file File to be followed. """ self.check_file_validity(tailed_file) self.tailed_file = tailed_file self.callback = sys.stdout.write self.t_stop = threading.Event() def start(self, s=1): """Start tailing a file in a background thread. Parameters ---------- s Number of seconds to wait between each iteration; Defaults to 3. """ t = threading.Thread(target=self.follow, args=(s,)) t.start() def stop(self): """Stop a background tail.""" self.t_stop.set() def follow(self, s=1): """Do a tail follow. If a callback function is registered it is called with every new line. Else printed to standard out. Parameters ---------- s Number of seconds to wait between each iteration; Defaults to 1. """ with open(self.tailed_file) as file_: # Go to the end of file file_.seek(0, 2) while not self.t_stop.is_set(): curr_position = file_.tell() lines = file_.readlines() if len(lines) == 0: file_.seek(curr_position) else: for line in lines: self.callback(line) time.sleep(s) def register_callback(self, func): """Override default callback function to provided function.""" self.callback = func def check_file_validity(self, file_): """Check whether the a given file exists, readable and is a file.""" if not os.access(file_, os.F_OK): raise TailError("File '%s' does not exist" % (file_)) if not os.access(file_, os.R_OK): raise TailError("File '%s' not readable" % (file_)) if os.path.isdir(file_): raise TailError("File '%s' is a directory" % (file_)) class TailError(Exception): def __init__(self, msg): super().__init__() self.message = msg def __str__(self): return self.message ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/fdroidserver/update.py0000644000175000017500000033700014770502071017257 0ustar00hanshans#!/usr/bin/env python3 # # update.py - part of the FDroid server tools # Copyright (C) 2016, Blue Jay Wireless # Copyright (C) 2014-2016, Hans-Christoph Steiner # Copyright (C) 2010-2015, Ciaran Gultnieks # Copyright (C) 2013-2014, Daniel Martí # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import argparse import sys import os import shutil import glob import logging import re import socket import warnings import zipfile import hashlib import json import time import yaml import copy import asn1crypto.cms import defusedxml.ElementTree as ElementTree from datetime import datetime, timezone from argparse import ArgumentParser from pathlib import Path try: from yaml import CSafeLoader as SafeLoader except ImportError: from yaml import SafeLoader import collections from binascii import hexlify from . import _ from . import common from . import metadata from .common import DEFAULT_LOCALE from .exception import BuildException, FDroidException, VerificationException import fdroidserver.index from PIL import Image, PngImagePlugin if hasattr(Image, 'DecompressionBombWarning'): warnings.simplefilter('error', Image.DecompressionBombWarning) Image.MAX_IMAGE_PIXELS = 0xffffff # 4096x4096 METADATA_VERSION = 20002 # less than the valid range of versionCode, i.e. Java's Integer.MIN_VALUE UNSET_VERSION_CODE = -0x100000000 APK_NAME_PAT = re.compile(r".*\Wname='([a-zA-Z0-9._]*)'.*") APK_VERCODE_PAT = re.compile(".*versionCode='([0-9]*)'.*") APK_VERNAME_PAT = re.compile(".*versionName='([^']*)'.*") APK_LABEL_ICON_PAT = re.compile(r".*\s+label='(.*)'\s+icon='(.*?)'") APK_SDK_VERSION_PAT = re.compile(".*'([0-9]*)'.*") APK_PERMISSION_PAT = re.compile(r".*name='([^']*)'(?:.*maxSdkVersion='([^']*)')?.*") APK_FEATURE_PAT = re.compile(".*name='([^']*)'.*") screen_densities = ['65534', '640', '480', '320', '240', '160', '120'] # resolutions must end with 'dpi' screen_resolutions = { "xxxhdpi": '640', "xxhdpi": '480', "xhdpi": '320', "hdpi": '240', "mdpi": '160', "ldpi": '120', "tvdpi": '213', "undefineddpi": '-1', "anydpi": '65534', "nodpi": '65535' } all_screen_densities = ['0'] + screen_densities UsesPermission = collections.namedtuple('UsesPermission', ['name', 'maxSdkVersion']) UsesPermissionSdk23 = collections.namedtuple('UsesPermissionSdk23', ['name', 'maxSdkVersion']) ALLOWED_EXTENSIONS = ('png', 'jpg', 'jpeg') GRAPHIC_NAMES = ('featureGraphic', 'icon', 'promoGraphic', 'tvBanner') SCREENSHOT_DIRS = ('phoneScreenshots', 'sevenInchScreenshots', 'tenInchScreenshots', 'tvScreenshots', 'wearScreenshots') BLANK_PNG_INFO = PngImagePlugin.PngInfo() def dpi_to_px(density): return (int(density) * 48) / 160 def px_to_dpi(px): return (int(px) * 160) / 48 def get_icon_dir(repodir, density): if density in ('0', '65534'): return os.path.join(repodir, "icons") else: return os.path.join(repodir, "icons-%s" % density) def get_icon_dirs(repodir): for density in screen_densities: yield get_icon_dir(repodir, density) def get_all_icon_dirs(repodir): for density in all_screen_densities: yield get_icon_dir(repodir, density) def disabled_algorithms_allowed(): return ((options is not None and options.allow_disabled_algorithms) or (config is not None and config['allow_disabled_algorithms']) or common.default_config['allow_disabled_algorithms']) def status_update_json(apps, apks): """Output a JSON file with metadata about this `fdroid update` run. Parameters ---------- apps fully populated list of all applications apks all to be published apks """ logging.debug(_('Outputting JSON')) output = common.setup_status_output(start_timestamp) output['antiFeatures'] = dict() output['disabled'] = [] output['archivePolicy0'] = [] output['failedBuilds'] = dict() output['noPackages'] = [] output['needsUpdate'] = [] output['noUpdateCheck'] = [] output['apksigner'] = shutil.which(config.get('apksigner', '')) output['jarsigner'] = shutil.which(config.get('jarsigner', '')) output['keytool'] = shutil.which(config.get('keytool', '')) for appid in apps: app = apps[appid] for af in app.get('AntiFeatures', dict()): antiFeatures = output['antiFeatures'] # JSON camelCase if af not in antiFeatures: antiFeatures[af] = dict() if 'apps' not in antiFeatures[af]: antiFeatures[af]['apps'] = set() antiFeatures[af]['apps'].add(appid) apklist = [] gotcurrentver = False for apk in apks: if apk['packageName'] == appid: if apk['versionCode'] == app.get('CurrentVersionCode'): gotcurrentver = True apklist.append(apk) validapks = 0 if app.get('Disabled'): output['disabled'].append(appid) elif app.get("ArchivePolicy") == 0: output['archivePolicy0'].append(appid) else: for build in app.get('Builds', []): if not build.get('disable'): builtit = False for apk in apklist: if apk['versionCode'] == build.versionCode: builtit = True validapks += 1 break if not builtit: failedBuilds = output['failedBuilds'] if appid not in failedBuilds: failedBuilds[appid] = [] failedBuilds[appid].append(build.versionCode) if validapks == 0: output['noPackages'].append(appid) if not gotcurrentver: output['needsUpdate'].append(appid) if app.get('UpdateCheckMode') == 'None': output['noUpdateCheck'].append(appid) common.write_status_json(output, options.pretty) def output_status_stage(output, stage): if 'stages' not in output: output['stages'] = dict() output['stages'][stage] = common.epoch_millis_now() common.write_running_status_json(output) def delete_disabled_builds(apps, apkcache, repodirs): """Delete disabled build outputs. Parameters ---------- apps list of all applications, as per metadata.read_metadata apkcache current apk cache information repodirs the repo directories to process """ for appid, app in apps.items(): for build in app.get('Builds', []): if not build.disable: continue apkfilename = common.get_release_filename(app, build) iconfilename = "%s.%s.png" % ( appid, build.versionCode) for repodir in repodirs: files = [ os.path.join(repodir, apkfilename), os.path.join(repodir, apkfilename + '.asc'), os.path.join(repodir, apkfilename[:-4] + "_src.tar.gz"), ] for density in all_screen_densities: repo_dir = get_icon_dir(repodir, density) files.append(os.path.join(repo_dir, iconfilename)) for f in files: if os.path.exists(f): logging.info("Deleting disabled build output " + f) os.remove(f) if apkfilename in apkcache: del apkcache[apkfilename] def resize_icon(iconpath, density): if not os.path.isfile(iconpath): return fp = None try: fp = open(iconpath, 'rb') im = Image.open(fp) size = dpi_to_px(density) if any(length > size for length in im.size): oldsize = im.size im.thumbnail((size, size), Image.LANCZOS) logging.debug("%s was too large at %s - new size is %s" % ( iconpath, oldsize, im.size)) im.save(iconpath, "PNG", optimize=True, pnginfo=BLANK_PNG_INFO, icc_profile=None) except Exception as e: logging.error(_("Failed resizing {path}: {error}".format(path=iconpath, error=e))) finally: if fp: fp.close() def resize_all_icons(repodirs): """Resize all icons that exceed the max size. Parameters ---------- repodirs the repo directories to process """ for repodir in repodirs: for density in screen_densities: icon_dir = get_icon_dir(repodir, density) icon_glob = os.path.join(icon_dir, '*.png') for iconpath in glob.glob(icon_glob): resize_icon(iconpath, density) def getsig(apkpath): """Get the unique ID for the signing certificate of an APK. This uses a strange algorithm that was devised at the very beginning of F-Droid. Since it is only used for checking signature compatibility, it does not matter much that it uses MD5. To get the same MD5 has that fdroidclient gets, we encode the .RSA certificate in a specific format and pass it hex-encoded to the md5 digest algorithm. This is not the same as the standard X.509 certificate fingerprint. Parameters ---------- apkpath path to the apk Returns ------- A string containing the md5 of the signature of the apk or None if an error occurred. """ cert_encoded = common.get_first_signer_certificate(apkpath) if not cert_encoded: return None return hashlib.md5(hexlify(cert_encoded)).hexdigest() # nosec just used as ID for signing key def get_cache_file(): return os.path.join('tmp', 'apkcache.json') def get_cache_mtime(): apkcachefile = get_cache_file() if os.path.exists(apkcachefile): return os.stat(apkcachefile).st_mtime return 0 def get_cache(): """Get the cached dict of the APK index. Gather information about all the apk files in the repo directory, using cached data if possible. Some of the index operations take a long time, like calculating the SHA-256 and verifying the APK signature. The cache is invalidated if the metadata version is different, or the 'allow_disabled_algorithms' config/option is different. In those cases, there is no easy way to know what has changed from the cache, so just rerun the whole thing. Returns ------- apkcache """ apkcachefile = get_cache_file() ada = disabled_algorithms_allowed() if options is not None and not options.clean and os.path.exists(apkcachefile): with open(apkcachefile) as fp: apkcache = json.load(fp, object_pairs_hook=collections.OrderedDict) if apkcache.get("METADATA_VERSION") != METADATA_VERSION \ or apkcache.get('allow_disabled_algorithms') != ada: apkcache = collections.OrderedDict() else: apkcache = collections.OrderedDict() apkcache["METADATA_VERSION"] = METADATA_VERSION apkcache['allow_disabled_algorithms'] = ada for k, v in apkcache.items(): if not isinstance(v, dict): continue if 'antiFeatures' in v: if not isinstance(v['antiFeatures'], dict): v['antiFeatures'] = {k: {} for k in sorted(v['antiFeatures'])} if 'added' in v: v['added'] = datetime.fromtimestamp(v['added'], tz=timezone.utc) return apkcache def write_cache(apkcache): class Encoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, set): return list(obj) elif isinstance(obj, datetime): return obj.timestamp() return super().default(obj) apkcachefile = get_cache_file() cache_path = os.path.dirname(apkcachefile) if not os.path.exists(cache_path): os.makedirs(cache_path) for k, v in apkcache.items(): if isinstance(k, bytes): print('BYTES: ' + str(k) + ' ' + str(v)) with open(apkcachefile, 'w') as fp: json.dump(apkcache, fp, cls=Encoder, indent=2) def get_icon_bytes(apkzip, iconsrc): """ZIP has no official encoding, UTF-* and CP437 are defacto.""" try: return apkzip.read(iconsrc) except KeyError: return apkzip.read(iconsrc.encode('utf-8').decode('cp437')) def has_known_vulnerability(filename): """Check for known vulnerabilities in the APK. Checks OpenSSL .so files in the APK to see if they are a known vulnerable version. Google also enforces this: https://support.google.com/faqs/answer/6376725?hl=en Checks whether there are more than one classes.dex or AndroidManifest.xml files, which is invalid and an essential part of the "Master Key" attack. http://www.saurik.com/id/17 Janus is similar to Master Key but is perhaps easier to scan for. https://www.guardsquare.com/en/blog/new-android-vulnerability-allows-attackers-modify-apps-without-affecting-their-signatures """ found_vuln = '' # statically load this pattern if not hasattr(has_known_vulnerability, "pattern"): has_known_vulnerability.pattern = re.compile(b'.*OpenSSL ([01][0-9a-z.-]+)') with open(filename.encode(), 'rb') as fp: first4 = fp.read(4) if first4 != b'\x50\x4b\x03\x04': raise FDroidException(_('{path} has bad file signature "{pattern}", possible Janus exploit!') .format(path=filename, pattern=first4.decode().replace('\n', ' ')) + '\n' + 'https://www.guardsquare.com/en/blog/new-android-vulnerability-allows-attackers-modify-apps-without-affecting-their-signatures') files_in_apk = set() with zipfile.ZipFile(filename) as zf: for name in zf.namelist(): if name.endswith('.so') and ('libcrypto' in name or 'libssl' in name): lib = zf.open(name) while True: chunk = lib.read(4096) if chunk == b'': break m = has_known_vulnerability.pattern.search(chunk) if m: version = m.group(1).decode('ascii') if (version.startswith('1.0.1') and len(version) > 5 and version[5] >= 'r') \ or (version.startswith('1.0.2') and len(version) > 5 and version[5] >= 'f') \ or re.match(r'[1-9]\.[1-9]\.[0-9].*', version): logging.debug(_('"{path}" contains recent {name} ({version})') .format(path=filename, name=name, version=version)) else: msg = '"{path}" contains outdated {name} ({version})' logging.warning( _(msg).format(path=filename, name=name, version=version) ) found_vuln += msg.format( path=filename, name=name, version=version ) found_vuln += '\n' break elif name == 'AndroidManifest.xml' or name == 'classes.dex' or name.endswith('.so'): if name in files_in_apk: msg = '{apkfilename} has multiple {name} files, looks like Master Key exploit!' logging.warning( _(msg).format(apkfilename=filename, name=name) ) found_vuln += msg.format(apkfilename=filename, name=name) found_vuln += '\n' files_in_apk.add(name) return found_vuln def insert_obbs(repodir, apps, apks): """Scan the .obb files in a given repo directory and adds them to the relevant APK instances. OBB files have versionCodes like APK files, and they are loosely associated. If there is an OBB file present, then any APK with the same or higher versionCode will use that OBB file. There are two OBB types: main and patch, each APK can only have only have one of each. https://developer.android.com/google/play/expansion-files.html Parameters ---------- repodir repo directory to scan apps list of current, valid apps apks current information on all APKs """ def obbWarnDelete(f, msg): logging.warning(msg + ' ' + f) if options.delete_unknown: logging.error(_("Deleting unknown file: {path}").format(path=f)) os.remove(f) obbs = [] java_Integer_MIN_VALUE = -pow(2, 31) currentPackageNames = apps.keys() for f in glob.glob(os.path.join(repodir, '*.obb')): obbfile = os.path.basename(f) # obbfile looks like: [main|patch]...obb chunks = obbfile.split('.') if chunks[0] != 'main' and chunks[0] != 'patch': obbWarnDelete(f, _('OBB filename must start with "main." or "patch.":')) continue if not re.match(r'^-?[0-9]+$', chunks[1]): obbWarnDelete(f, _('The OBB version code must come after "{name}.":') .format(name=chunks[0])) continue versionCode = int(chunks[1]) packagename = ".".join(chunks[2:-1]) highestVersionCode = java_Integer_MIN_VALUE if packagename not in currentPackageNames: obbWarnDelete(f, _("OBB's packagename does not match a supported APK:")) continue for apk in apks: if packagename == apk['packageName'] and apk['versionCode'] > highestVersionCode: highestVersionCode = apk['versionCode'] if versionCode > highestVersionCode: obbWarnDelete(f, _( 'OBB file has newer versionCode({integer}) than any APK:' ).format(integer=versionCode)) continue obbsha256 = common.sha256sum(f) obbs.append((packagename, versionCode, obbfile, obbsha256)) for apk in apks: for (packagename, versionCode, obbfile, obbsha256) in sorted(obbs, reverse=True): if versionCode <= apk['versionCode'] and packagename == apk['packageName']: if obbfile.startswith('main.') and 'obbMainFile' not in apk: apk['obbMainFile'] = obbfile apk['obbMainFileSha256'] = obbsha256 elif obbfile.startswith('patch.') and 'obbPatchFile' not in apk: apk['obbPatchFile'] = obbfile apk['obbPatchFileSha256'] = obbsha256 if 'obbMainFile' in apk and 'obbPatchFile' in apk: break VERSION_STRING_RE = re.compile(r'^([0-9]+)\.([0-9]+)\.([0-9]+)$') def version_string_to_int(version): """ Convert sermver version designation to version code. Approximately convert a [Major].[Minor].[Patch] version string consisting of numeric characters (0-9) and periods to a number. The exponents are chosen such that it still fits in the 64bit JSON/Android range. """ m = VERSION_STRING_RE.match(version) if not m: raise ValueError(f"invalid version string '{version}'") major = int(m.group(1)) minor = int(m.group(2)) patch = int(m.group(3)) return major * 10**12 + minor * 10**6 + patch # iOS app permissions, source: # https://developer.apple.com/documentation/bundleresources/information_property_list/protected_resources IPA_PERMISSIONS = [ "NSBluetoothAlwaysUsageDescription", "NSBluetoothPeripheralUsageDescription", "NSCalendarsFullAccessUsageDescription", "NSCalendarsWriteOnlyAccessUsageDescription", "NSRemindersFullAccessUsageDescription", "NSCameraUsageDescription", "NSMicrophoneUsageDescription", "NSContactsUsageDescription", "NSFaceIDUsageDescription", "NSDesktopFolderUsageDescription", "NSDocumentsFolderUsageDescription", "NSDownloadsFolderUsageDescription", "NSNetworkVolumesUsageDescription", "NSNetworkVolumesUsageDescription", "NSRemovableVolumesUsageDescription", "NSRemovableVolumesUsageDescription", "NSFileProviderDomainUsageDescription", "NSGKFriendListUsageDescription", "NSHealthClinicalHealthRecordsShareUsageDescription", "NSHealthShareUsageDescription", "NSHealthUpdateUsageDescription", "NSHomeKitUsageDescription", "NSLocationAlwaysAndWhenInUseUsageDescription", "NSLocationUsageDescription", "NSLocationWhenInUseUsageDescription", "NSLocationAlwaysUsageDescription", "NSAppleMusicUsageDescription", "NSMotionUsageDescription", "NSFallDetectionUsageDescription", "NSLocalNetworkUsageDescription", "NSNearbyInteractionUsageDescription", "NSNearbyInteractionAllowOnceUsageDescription", "NFCReaderUsageDescription", "NSPhotoLibraryAddUsageDescription", "NSPhotoLibraryUsageDescription", "NSAppDataUsageDescription", "NSUserTrackingUsageDescription", "NSAppleEventsUsageDescription", "NSSystemAdministrationUsageDescription", "NSSensorKitUsageDescription", "NSSiriUsageDescription", "NSSpeechRecognitionUsageDescription", "NSVideoSubscriberAccountUsageDescription", "NSWorldSensingUsageDescription", "NSHandsTrackingUsageDescription", "NSIdentityUsageDescription", "NSCalendarsUsageDescription", "NSRemindersUsageDescription", ] def parse_ipa(ipa_path, file_size, sha256): import biplist ipa = { "apkName": os.path.basename(ipa_path), "hash": sha256, "hashType": "sha256", "size": file_size, "ipa_entitlements": set(), "ipa_permissions": {}, } with zipfile.ZipFile(ipa_path) as ipa_zip: for info in ipa_zip.infolist(): if re.match("Payload/[^/]*.app/Info.plist", info.filename): with ipa_zip.open(info) as plist_file: plist = biplist.readPlist(plist_file) ipa["name"] = plist['CFBundleName'] ipa["packageName"] = plist["CFBundleIdentifier"] # https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleshortversionstring ipa["versionCode"] = version_string_to_int(plist["CFBundleShortVersionString"]) ipa["versionName"] = plist["CFBundleShortVersionString"] ipa["ipa_MinimumOSVersion"] = plist['MinimumOSVersion'] ipa["ipa_DTPlatformVersion"] = plist['DTPlatformVersion'] for ipap in IPA_PERMISSIONS: if ipap in plist: ipa["ipa_permissions"][ipap] = str(plist[ipap]) if info.filename.endswith("/embedded.mobileprovision"): print("parsing", info.filename) with ipa_zip.open(info) as mopro_file: mopro_content_info = asn1crypto.cms.ContentInfo.load( mopro_file.read() ) mopro_payload_info = mopro_content_info['content'] mopro_payload = mopro_payload_info['encap_content_info'][ 'content' ].native mopro = biplist.readPlistFromString(mopro_payload) # https://faq.altstore.io/distribute-your-apps/make-a-source#entitlements-array-of-strings for entitlement in mopro.get('Entitlements', {}).keys(): if entitlement not in [ "com.app.developer.team-identifier", 'application-identifier' ]: ipa["ipa_entitlements"].add(entitlement) return ipa def scan_repo_for_ipas(apkcache, repodir, knownapks): """Scan for IPA files in a given repo directory. Parameters ---------- apkcache cache dictionary containting cached file infos from previous runs repodir repo directory to scan knownapks list of all known files, as per metadata.read_metadata Returns ------- ipas list of file infos for ipa files in ./repo folder cachechanged ture if new ipa files were found and added to `apkcache` """ cachechanged = False ipas = [] for ipa_path in glob.glob(os.path.join(repodir, '*.ipa')): ipa_name = os.path.basename(ipa_path) file_size = os.stat(ipa_path).st_size if file_size == 0: raise FDroidException(_('{path} is zero size!').format(path=ipa_path)) sha256 = common.sha256sum(ipa_path) ipa = apkcache.get(ipa_name, {}) if ipa.get('hash') != sha256: ipa = fdroidserver.update.parse_ipa(ipa_path, file_size, sha256) apkcache[ipa_name] = ipa cachechanged = True added = knownapks.recordapk(ipa_name) if added: ipa['added'] = added ipas.append(ipa) return ipas, cachechanged def translate_per_build_anti_features(apps, apks): """Grab the anti-features list from the build metadata. For most Anti-Features, they are really most applicable per-APK, not for an app. An app can fix a vulnerability, add/remove tracking, etc. This reads the 'antifeatures' list from the Build entries in the fdroiddata metadata file, then transforms it into the 'antiFeatures' list of unique items for the index. The field key is all lower case in the metadata file to match the rest of the Build fields. It is 'antiFeatures' camel case in the implementation, index, and fdroidclient since it is translated from the build 'antifeatures' field, not directly included. """ antiFeatures = dict() for packageName, app in apps.items(): d = dict() for build in app.get('Builds', []): afl = build.get('antifeatures') if afl: d[build.versionCode] = afl if len(d) > 0: antiFeatures[packageName] = d for apk in apks: d = antiFeatures.get(apk['packageName']) if d: afl = d.get(apk['versionCode']) if afl: apk['antiFeatures'].update(afl) # TODO def _get_localized_dict(app, locale): """Get the dict to add localized store metadata to.""" if 'localized' not in app: app['localized'] = collections.OrderedDict() if locale not in app['localized']: app['localized'][locale] = collections.OrderedDict() return app['localized'][locale] def _set_localized_text_entry(app, locale, key, f, versionCode=None): """Read a fastlane/triple-t metadata file and add an entry to the app. This reads more than the limit, in case there is leading or trailing whitespace to be stripped """ try: limit = config['char_limits'][key] if not versionCode: localized = _get_localized_dict(app, locale) with open(f, errors='replace') as fp: text = fp.read(limit * 2) if versionCode: for build in app["Builds"]: if build["versionCode"] == versionCode: if "whatsNew" not in build: build["whatsNew"] = collections.OrderedDict() build["whatsNew"][locale] = text[:limit] return if len(text) > 0: if key in ('name', 'summary', 'video'): # hardcoded as a single line localized[key] = text.strip('\n')[:limit] else: localized[key] = text[:limit] except Exception as e: logging.error(_('{path}: {error}').format(path=f, error=str(e))) def _set_author_entry(app, key, f): """Read a fastlane/triple-t author file and add the entry to the app. This reads more than the limit, in case there is leading or trailing whitespace to be stripped """ try: limit = config['char_limits']['author'] with open(f, errors='replace') as fp: text = fp.read(limit * 2) if len(text) > 0: app[key] = text.strip()[:limit] except Exception as e: logging.error(_('{path}: {error}').format(path=f, error=str(e))) def _strip_and_copy_image(in_file, outpath): """Remove any metadata from image and copy it to new path. Sadly, image metadata like EXIF can be used to exploit devices. It is not used at all in the F-Droid ecosystem, so its much safer just to remove it entirely. This uses size+mtime to check for a new file since this process actually modifies the resulting file to strip out the EXIF. outpath can be path to either a file or dir. The dir that outpath refers to must exist before calling this. Potential source of Python code to strip JPEGs without dependencies: http://www.fetidcascade.com/public/minimal_exif_writer.py """ logging.debug('copying %s %s', in_file, outpath) if not os.path.exists(in_file): if os.path.islink(in_file): logging.warning(_("Broken symlink: {path}").format(path=in_file)) else: logging.warning(_("File disappeared while processing it: {path}").format(path=in_file)) return if os.path.isdir(outpath): out_file = os.path.join(outpath, os.path.basename(in_file)) else: out_file = outpath if os.path.exists(out_file): in_stat = os.stat(in_file) out_stat = os.stat(out_file) if in_stat.st_size == out_stat.st_size \ and in_stat.st_mtime == out_stat.st_mtime: return extension = common.get_extension(in_file)[1] if extension == 'png': try: with open(in_file, 'rb') as fp: in_image = Image.open(fp) in_image.save(out_file, "PNG", optimize=True, pnginfo=BLANK_PNG_INFO, icc_profile=None) except Exception as e: logging.error(_("Failed copying {path}: {error}".format(path=in_file, error=e))) return elif extension in ('jpg', 'jpeg'): try: with open(in_file, 'rb') as fp: in_image = Image.open(fp) data = list(in_image.getdata()) out_image = Image.new(in_image.mode, in_image.size) out_image.putdata(data) out_image.save(out_file, "JPEG", optimize=True) except Exception as e: logging.error(_("Failed copying {path}: {error}".format(path=in_file, error=e))) return else: raise FDroidException(_('Unsupported file type "{extension}" for repo graphic') .format(extension=extension)) stat_result = os.stat(in_file) os.utime(out_file, times=(stat_result.st_atime, stat_result.st_mtime)) def _get_base_hash_extension(f): """Split a graphic/screenshot filename into base, sha256, and extension.""" base, extension = common.get_extension(f) sha256_index = base.find('_') if sha256_index > 0: return base[:sha256_index], base[sha256_index + 1:], extension return base, None, extension def sanitize_funding_yml_entry(entry): """FUNDING.yml comes from upstream repos, entries must be sanitized.""" if type(entry) not in (bytes, int, float, list, str): return if isinstance(entry, bytes): entry = entry.decode() elif isinstance(entry, list): if entry: entry = entry[0] else: return try: entry = str(entry) except (TypeError, ValueError): return if len(entry) > 2048: logging.warning(_('Ignoring FUNDING.yml entry longer than 2048: %s') % entry[:2048]) return if '\n' in entry: return return entry.strip() def sanitize_funding_yml_name(name): """Sanitize usernames that come from FUNDING.yml.""" entry = sanitize_funding_yml_entry(name) if entry: m = metadata.VALID_USERNAME_REGEX.match(entry) if m: return m.group() return def insert_funding_yml_donation_links(apps): """Include donation links from FUNDING.yml in app's source repo. GitHub made a standard file format for declaring donation links. This parses that format from upstream repos to include in metadata here. GitHub supports mostly proprietary services, so this logic adds proprietary services only as Donate: links. FUNDING.yml can be either in the root of the project, or in the ".github" subdir. https://help.github.com/en/articles/displaying-a-sponsor-button-in-your-repository#about-funding-files """ if not os.path.isdir('build'): return # nothing to do for packageName, app in apps.items(): sourcedir = os.path.join('build', packageName) if not os.path.isdir(sourcedir): continue for f in ([os.path.join(sourcedir, 'FUNDING.yml'), ] + glob.glob(os.path.join(sourcedir, '.github', 'FUNDING.yml'))): if not os.path.isfile(f): continue data = None try: with open(f) as fp: data = yaml.load(fp, Loader=SafeLoader) except yaml.YAMLError as e: logging.error(_('Found bad funding file "{path}" for "{name}":') .format(path=f, name=packageName)) logging.error(e) if not data or type(data) != dict: continue if not app.get('Liberapay') and 'liberapay' in data: s = sanitize_funding_yml_name(data['liberapay']) if s: app['Liberapay'] = s if not app.get('OpenCollective') and 'open_collective' in data: s = sanitize_funding_yml_name(data['open_collective']) if s: app['OpenCollective'] = s if not app.get('Donate'): if 'liberapay' in data: del data['liberapay'] if 'open_collective' in data: del data['open_collective'] # this tuple provides a preference ordering for k in ( 'custom', 'github', 'patreon', 'community_bridge', 'ko_fi', 'issuehunt', 'buy_me_a_coffee' ): v = data.get(k) if not v: continue if k == 'custom': s = sanitize_funding_yml_entry(v) if s: app['Donate'] = s break elif k in ('community_bridge', 'lfx_crowdfunding'): s = sanitize_funding_yml_name(v) if s: app['Donate'] = 'https://crowdfunding.lfx.linuxfoundation.org/projects/' + s break elif k == 'github': s = sanitize_funding_yml_name(v) if s: app['Donate'] = 'https://github.com/sponsors/' + s break elif k == 'issuehunt': s = sanitize_funding_yml_name(v) if s: app['Donate'] = 'https://issuehunt.io/r/' + s break elif k == 'ko_fi': s = sanitize_funding_yml_name(v) if s: app['Donate'] = 'https://ko-fi.com/' + s break elif k == 'patreon': s = sanitize_funding_yml_name(v) if s: app['Donate'] = 'https://patreon.com/' + s break elif k == 'buy_me_a_coffee': s = sanitize_funding_yml_name(v) if s: app['Donate'] = 'https://www.buymeacoffee.com/' + s break elif k == 'polar': s = sanitize_funding_yml_name(v) if s: app['Donate'] = 'https://polar.sh/' + s break def copy_triple_t_store_metadata(apps): """Include store metadata from the app's source repo. The Triple-T Gradle Play Publisher is a plugin that has a standard file layout for all of the metadata and graphics that the Google Play Store accepts. Since F-Droid has the git repo, it can just pluck those files directly. This method reads any text files into the app dict, then copies any graphics into the fdroid repo directory structure. This needs to be run before insert_localized_app_metadata() so that the graphics files that are copied into the fdroid repo get properly indexed. https://github.com/Triple-T/gradle-play-publisher/blob/1.2.2/README.md#uploading-images https://github.com/Triple-T/gradle-play-publisher/blob/1.2.2/README.md#play-store-metadata https://github.com/Triple-T/gradle-play-publisher/blob/2.1.0/README.md#publishing-listings """ if not os.path.isdir('build'): return # nothing to do tt_graphic_names = ('feature-graphic', 'icon', 'promo-graphic', 'tv-banner') tt_screenshot_dirs = ('phone-screenshots', 'tablet-screenshots', 'large-tablet-screenshots', 'tv-screenshots', 'wear-screenshots') setting_gradle_pattern = re.compile(r"""\s*include\s+["']:([^"']+)["'](?:,[\n\s]*["']:([^"']+)["'])*""") for packageName, app in apps.items(): builds = app.get('Builds', []) gradle_subdirs = set() if builds: subdir = builds[-1].subdir or '' for flavor in builds[-1].gradle: if flavor not in ('yes', 'no', True, False): p = os.path.join('build', packageName, subdir, 'src', flavor, 'play') if os.path.exists(p): gradle_subdirs.add(p) if not gradle_subdirs: gradle_subdirs.update(glob.glob(os.path.join('build', packageName, subdir, 'src', '*', 'play'))) if not gradle_subdirs: gradle_subdirs.update(glob.glob(os.path.join('build', packageName, subdir, '*', 'src', '*', 'play'))) if not gradle_subdirs: # Flutter-style android subdir gradle_subdirs.update(glob.glob(os.path.join('build', packageName, subdir, 'android', 'app', 'src', '*', 'play'))) if not gradle_subdirs: sg_list = sorted(glob.glob(os.path.join('build', packageName, 'settings.gradle*'))) if sg_list: settings_gradle = sg_list[0] with open(settings_gradle, encoding='utf-8') as fp: data = fp.read() for matches in setting_gradle_pattern.findall(data): for m in matches: if m: gradle_path = m.replace(':', '/') p = os.path.join('build', packageName, gradle_path, 'src', 'main', 'play') if os.path.exists(p): gradle_subdirs.add(p) flavors = builds[-1].gradle if builds else [] for flavor in flavors: if flavor not in ('yes', 'no', True, False): p = os.path.join('build', packageName, gradle_path, 'src', flavor, 'play') if os.path.exists(p): gradle_subdirs.add(p) if not gradle_subdirs: gradle_subdirs.update(glob.glob(os.path.join('build', packageName, '*', 'src', '*', 'play'))) if not gradle_subdirs: # Flutter-style android subdir gradle_subdirs.update(glob.glob(os.path.join('build', packageName, 'android', 'app', 'src', '*', 'play'))) for d in sorted(gradle_subdirs): logging.debug('Triple-T Gradle Play Publisher: ' + d) for root, dirs, files in os.walk(d): segments = root.split('/') if segments[-2] == 'listings' or segments[-2] == 'release-notes': locale = segments[-1] else: locale = segments[-2] for f in files: if f in ('fulldescription', 'full-description.txt'): _set_localized_text_entry(app, locale, 'description', os.path.join(root, f)) elif f in ('shortdescription', 'short-description.txt'): _set_localized_text_entry(app, locale, 'summary', os.path.join(root, f)) elif f in ('title', 'title.txt'): _set_localized_text_entry(app, locale, 'name', os.path.join(root, f)) elif f in ('video', 'video-url.txt'): _set_localized_text_entry(app, locale, 'video', os.path.join(root, f)) elif f == 'whatsnew': _set_localized_text_entry(app, segments[-1], 'whatsNew', os.path.join(root, f)) elif f == 'default.txt' and segments[-2] == 'release-notes': _set_localized_text_entry(app, locale, 'whatsNew', os.path.join(root, f)) elif f in ('contactEmail', 'contact-email.txt'): _set_author_entry(app, 'authorEmail', os.path.join(root, f)) elif f in ('contactPhone', 'contact-phone.txt'): _set_author_entry(app, 'authorPhone', os.path.join(root, f)) elif f in ('contactWebsite', 'contact-website.txt'): _set_author_entry(app, 'authorWebSite', os.path.join(root, f)) else: base, extension = common.get_extension(f) dirname = os.path.basename(root) if extension in ALLOWED_EXTENSIONS \ and (dirname in GRAPHIC_NAMES or dirname in tt_graphic_names or dirname in SCREENSHOT_DIRS or dirname in tt_screenshot_dirs): repofilename = os.path.basename(f) if segments[-2] == 'listing': locale = segments[-3] elif segments[-4] == 'listings': # v2.x locale = segments[-3] if dirname in tt_graphic_names: repofilename = GRAPHIC_NAMES[tt_graphic_names.index(dirname)] repofilename += '.' + extension dirname = '' else: dirname = SCREENSHOT_DIRS[tt_screenshot_dirs.index(dirname)] else: locale = segments[-2] destdir = os.path.join('repo', packageName, locale, dirname) os.makedirs(destdir, mode=0o755, exist_ok=True) sourcefile = os.path.join(root, f) destfile = os.path.join(destdir, repofilename) _strip_and_copy_image(sourcefile, destfile) def insert_localized_app_metadata(apps): """Scan standard locations for graphics and localized text. Scans for localized description files, changelogs, store graphics, and screenshots and adds them to the app metadata. Each app's source repo root checked out at /build/ is scanned at the following standard locations for these files... metadata// fastlane/metadata/android// src//fastlane/metadata/android// ...as well as the /metadata// directory. If it finds them, they will be added to the dict of all packages, with the versions in the /metadata/ folder taking precedence over the what is in the app's source repo. The is the locale of the files supplied in that directory, using the IETF RFC5646 format (e.g. en, en-US, ast, etc). For each directory, this script searches for the following files in the directory structure as supplied by fastlane. See https://github.com/fastlane/fastlane/blob/2.28.7/supply/README.md#images-and-screenshots See also our documentation page: https://f-droid.org/en/docs/All_About_Descriptions_Graphics_and_Screenshots/#in-the-apps-build-metadata-in-an-fdroiddata-collection """ sourcedirs = glob.glob(os.path.join('build', '[A-Za-z]*', 'src', '[A-Za-z]*', 'fastlane', 'metadata', 'android', '[a-z][a-z]*')) sourcedirs += glob.glob(os.path.join('build', '[A-Za-z]*', 'fastlane', 'metadata', 'android', '[a-z][a-z]*')) sourcedirs += glob.glob(os.path.join('build', '[A-Za-z]*', 'metadata', '[a-z][a-z]*')) sourcedirs += glob.glob(os.path.join('metadata', '[A-Za-z]*', '[a-z][a-z]*')) for srcd in sorted(sourcedirs): if not os.path.isdir(srcd): continue for root, dirs, files in os.walk(srcd): segments = root.split('/') packageName = segments[1] if packageName not in apps: logging.debug(packageName + ' does not have app metadata, skipping l18n scan.') continue locale = segments[-1] destdir = os.path.join('repo', packageName, locale) # flavours specified in build receipt build_flavours = "" if ( apps[packageName] and len(apps[packageName].get('Builds', [])) > 0 and 'gradle' in apps[packageName]['Builds'][-1] ): build_flavours = apps[packageName]['Builds'][-1]['gradle'] if len(segments) >= 5 and segments[4] == "fastlane" and segments[3] not in build_flavours: logging.debug("ignoring due to wrong flavour") continue for f in files: if f in ('description.txt', 'full_description.txt'): _set_localized_text_entry(apps[packageName], locale, 'description', os.path.join(root, f)) continue elif f in ('summary.txt', 'short_description.txt'): _set_localized_text_entry(apps[packageName], locale, 'summary', os.path.join(root, f)) continue elif f in ('name.txt', 'title.txt'): _set_localized_text_entry(apps[packageName], locale, 'name', os.path.join(root, f)) continue elif f == 'video.txt': _set_localized_text_entry(apps[packageName], locale, 'video', os.path.join(root, f)) continue elif f == str(apps[packageName]['CurrentVersionCode']) + '.txt': locale = segments[-2] _set_localized_text_entry(apps[packageName], locale, 'whatsNew', os.path.join(root, f)) elif f == 'default.txt': # use "default.txt" changelog entry as fallback. locale = segments[-2] localized = _get_localized_dict(apps[packageName], locale) if not localized.get('whatsNew', ''): _set_localized_text_entry(apps[packageName], locale, 'whatsNew', os.path.join(root, f)) base, extension = common.get_extension(f) if extension == 'txt': try: versionCode = int(base) locale = segments[-2] if versionCode in [ a["versionCode"] for a in apps[packageName]["Builds"] ]: _set_localized_text_entry( apps[packageName], locale, 'whatsNew', os.path.join(root, f), versionCode, ) continue except ValueError: pass if locale == 'images': locale = segments[-2] destdir = os.path.join('repo', packageName, locale) if base in GRAPHIC_NAMES and extension in ALLOWED_EXTENSIONS: os.makedirs(destdir, mode=0o755, exist_ok=True) _strip_and_copy_image(os.path.join(root, f), destdir) dst = os.path.join(destdir, f) if os.path.isfile(dst): if base == "icon": base = "iconv2" if base not in apps[packageName] or not isinstance(apps[packageName][base], collections.OrderedDict): apps[packageName][base] = collections.OrderedDict() apps[packageName][base][locale] = common.file_entry(dst) # copy screenshots from local source code checkout into wellknown # location in repo directory for d in dirs: if d in SCREENSHOT_DIRS: if locale == 'images': locale = segments[-2] destdir = os.path.join('repo', packageName, locale) for f in glob.glob(os.path.join(root, d, '*.*')): _ignored, extension = common.get_extension(f) if extension in ALLOWED_EXTENSIONS: screenshotdestdir = os.path.join(destdir, d) os.makedirs(screenshotdestdir, mode=0o755, exist_ok=True) _strip_and_copy_image(f, screenshotdestdir) def ingest_screenshots_from_repo_dir(apps): repodirs = sorted(glob.glob(os.path.join('repo', '[A-Za-z]*', '[a-z][a-z]*'))) for d in repodirs: if not os.path.isdir(d): continue for f in sorted(glob.glob(os.path.join(d, '*.*')) + glob.glob(os.path.join(d, '*Screenshots', '*.*'))): if not os.path.isfile(f): continue segments = f.split('/') packageName = segments[1] locale = segments[2] screenshotdir = segments[3] filename = os.path.basename(f) base, sha256, extension = _get_base_hash_extension(filename) if packageName not in apps: logging.warning(_('Found "{path}" graphic without metadata for app "{name}"!') .format(path=filename, name=packageName)) continue graphics = _get_localized_dict(apps[packageName], locale) if extension not in ALLOWED_EXTENSIONS: logging.warning(_('Only PNG and JPEG are supported for graphics, found: {path}').format(path=f)) elif base in GRAPHIC_NAMES: # there can only be zero or one of these per locale basename = base + '.' + extension basepath = os.path.join(os.path.dirname(f), basename) if sha256: if not os.path.samefile(f, basepath): os.unlink(f) else: sha256 = common.sha256base64(f) filename = base + '_' + sha256 + '.' + extension index_file = os.path.join(os.path.dirname(f), filename) if not os.path.exists(index_file): os.link(f, index_file, follow_symlinks=False) graphics[base] = filename if base == "icon": base = "iconv2" if base not in apps[packageName] or not isinstance(apps[packageName][base], collections.OrderedDict): apps[packageName][base] = collections.OrderedDict() apps[packageName][base][locale] = common.file_entry(index_file) elif screenshotdir in SCREENSHOT_DIRS: # there can any number of these per locale logging.debug(_('adding to {name}: {path}').format(name=screenshotdir, path=f)) if screenshotdir not in graphics: graphics[screenshotdir] = [] graphics[screenshotdir].append(filename) newKey = screenshotdir.replace("Screenshots", "") if "screenshots" not in apps[packageName]: apps[packageName]["screenshots"] = collections.OrderedDict() if newKey not in apps[packageName]["screenshots"]: apps[packageName]["screenshots"][newKey] = collections.OrderedDict() if locale not in apps[packageName]["screenshots"][newKey]: apps[packageName]["screenshots"][newKey][locale] = [] apps[packageName]["screenshots"][newKey][locale].append(common.file_entry(f)) else: logging.warning(_('Unsupported graphics file found: {path}').format(path=f)) LANG_CODE = re.compile(r'^[a-z]{2}([-_][A-Z][a-zA-Z]{1,3})?$') FASTLANE_IOS_MAP = { "name.txt": 'name', "subtitle.txt": 'summary', "description.txt": 'description', } def parse_ios_screenshot_name(path): """ Infer type and categorization info from screenshot file name. This is not really an exact algorithm, it's based on filenames observed in the wild. """ s = path.stem.split('@') if len(s) >= 2: if "iphone" in s[0].lower(): return ("phoneScreenshots", s[0].strip(), ('@'.join(s[1:])).split('-')[0].strip()) elif "ipad" in s[0].lower(): return ("tenInchScreenshots", s[0].strip(), ('@'.join(s[1:])).split('-')[0].strip()) else: fragments = path.stem.lower().split("_") device = "unknown" os = "unknown" screenshot_type = "phoneScreenshots" for f in fragments: if "iphone" in f: device = f continue if "ipad" in f: screenshot_type = "tenInchScreenshots" device = f if "ios" in f: os = f return (screenshot_type, device, os) return ("phoneScreenshots", 'unknown', 'unknown') def discover_ios_screenshots(fastlane_dir): """Traverse git checkouts in build dir, search for fastlane-screenshots and put findings into a dict.""" fastlane_screenshot_dir = fastlane_dir / 'screenshots' screenshots = {} if fastlane_screenshot_dir.is_dir(): for lang_sdir in fastlane_screenshot_dir.iterdir(): locale = lang_sdir.name m = LANG_CODE.match(locale) if m: screenshots[locale] = {} fifo_idevice = {} fifo_ios = {} for screenshot in lang_sdir.iterdir(): if screenshot.suffix[1:] in ALLOWED_EXTENSIONS: screenshot_type, idevice_name, ios_name = parse_ios_screenshot_name(screenshot) # since there is no easy mapping here, we're just # resorting to fifo here, so ieg. if there's 2 # screenshots categorized for more than one # iPhone/iOS combinations we just remember the # first combination, use them as screenshots in # F-Droid and ignore all other screenshots, for # this screenshot type if not fifo_idevice.get(screenshot_type): fifo_idevice[screenshot_type] = idevice_name fifo_ios[screenshot_type] = ios_name if fifo_idevice[screenshot_type] == idevice_name and fifo_ios[screenshot_type] == ios_name: if screenshot_type not in screenshots[locale]: screenshots[locale][screenshot_type] = [] screenshots[locale][screenshot_type].append(screenshot) # sort all found screenshots alphanumerically for locale, translated_screenshots in screenshots.items(): for device in translated_screenshots.keys(): translated_screenshots[device].sort() return screenshots def copy_ios_screenshots_to_repo(screenshots, package_name): for locale, translated_screenshots in screenshots.items(): for device, translated_device_screenshots in translated_screenshots.items(): dest_dir = Path('repo') / package_name / locale / device dest_dir.mkdir(mode=0o755, parents=True, exist_ok=True) for path in translated_device_screenshots: dest = dest_dir / (path.name.replace(" ", "_").replace("\t", "_")) fdroidserver.update._strip_and_copy_image(str(path), str(dest)) def insert_localized_ios_app_metadata(apps_with_packages): if not any(Path('repo').glob('*.ipa')): # no IPA files present in repo, nothing to do here, exiting early return for package_name, app in apps_with_packages.items(): if not any(Path('repo').glob(f'{package_name}*.ipa')): # couldn't find any IPA files for this package_name # so we don't have to look for fastlane data continue fastlane_dir = Path('build', package_name, 'fastlane') fastlane_meta_dir = (fastlane_dir / "metadata") if fastlane_meta_dir.is_dir(): for lang_dir in fastlane_meta_dir.iterdir(): locale = lang_dir.name m = LANG_CODE.match(locale) if m: for metadata_file in (lang_dir).iterdir(): key = FASTLANE_IOS_MAP.get(metadata_file.name) if key: fdroidserver.update._set_localized_text_entry( app, locale, key, metadata_file ) screenshots = fdroidserver.update.discover_ios_screenshots(fastlane_dir) fdroidserver.update.copy_ios_screenshots_to_repo(screenshots, package_name) # lookup icons, copy them and put them into app icon_path = _get_ipa_icon(Path('build') / package_name) icon_dest = Path('repo') / package_name / 'icon.png' # for now just assume png icon_stat = os.stat(icon_path) app['iconv2'] = { DEFAULT_LOCALE: { 'name': str(icon_dest).lstrip('repo'), 'sha256': common.sha256sum(icon_dest), 'size': icon_stat.st_size, } } if not icon_dest.exists(): icon_dest.parent.mkdir(parents=True, exist_ok=True) shutil.copy(icon_path, icon_dest) def scan_repo_files(apkcache, repodir, knownapks, use_date_from_file=False): """Scan a repo for all files with an extension except APK/OBB/IPA. This allows putting all kinds of files into repostories. E.g. Media Files, Zip archives, ... Parameters ---------- apkcache current cached info about all repo files repodir repo directory to scan knownapks list of all known files, as per metadata.read_metadata use_date_from_file use date from file (instead of current date) for newly added files """ cachechanged = False repo_files = [] repodir = repodir.encode() for name in os.listdir(repodir): # skip files based on file extensions, that are handled elsewhere file_extension = common.get_file_extension(name) if file_extension in ('apk', 'obb', 'ipa'): continue # skip source tarballs generated by fdroidserver filename = os.path.join(repodir, name) name_utf8 = name.decode() if filename.endswith(b'_src.tar.gz'): logging.debug(_('skipping source tarball: {path}') .format(path=filename.decode())) continue # skip all other files generated by fdroidserver if not common.is_repo_file(filename): continue stat = os.stat(filename) if stat.st_size == 0: raise FDroidException(_('{path} is zero size!') .format(path=filename)) # load file infos from cache if not stale shasum = common.sha256sum(filename) usecache = False if name_utf8 in apkcache: repo_file = apkcache[name_utf8] if repo_file.get('hash') == shasum: logging.debug(_("Reading {apkfilename} from cache") .format(apkfilename=name_utf8)) usecache = True else: logging.debug(_("Ignoring stale cache data for {apkfilename}") .format(apkfilename=name_utf8)) # scan file if info wasn't in cache if not usecache: logging.debug(_("Processing {apkfilename}").format(apkfilename=name_utf8)) repo_file = collections.OrderedDict() repo_file['name'] = os.path.splitext(name_utf8)[0] # TODO rename apkname globally to something more generic repo_file['apkName'] = name_utf8 repo_file['hash'] = shasum repo_file['hashType'] = 'sha256' repo_file['ipfsCIDv1'] = common.calculate_IPFS_cid(name_utf8) repo_file['versionCode'] = 0 repo_file['versionName'] = shasum[0:7] # the static ID is the SHA256 unless it is set in the metadata repo_file['packageName'] = shasum m = common.STANDARD_FILE_NAME_REGEX.match(name_utf8) if m: repo_file['packageName'] = m.group(1) repo_file['versionCode'] = int(m.group(2)) srcfilename = name + b'_src.tar.gz' if os.path.exists(os.path.join(repodir, srcfilename)): repo_file['srcname'] = srcfilename.decode() repo_file['size'] = stat.st_size apkcache[name_utf8] = repo_file cachechanged = True if use_date_from_file: timestamp = stat.st_ctime default_date_param = datetime.fromtimestamp(timestamp, tz=timezone.utc) else: default_date_param = None # Record in knownapks, getting the added date at the same time.. added = knownapks.recordapk( repo_file['apkName'], default_date=default_date_param ) if added: repo_file['added'] = added repo_files.append(repo_file) return repo_files, cachechanged def scan_apk(apk_file, require_signature=True): """Scan an APK file and returns dictionary with metadata of the APK. Attention: This does *not* verify that the APK signature is correct. Parameters ---------- apk_file The (ideally absolute) path to the APK file require_signature Raise an exception is there is no valid signature. Default to True. Raises ------ BuildException Returns ------- A dict containing APK metadata """ apk = { 'hash': common.sha256sum(apk_file), 'hashType': 'sha256', 'uses-permission': [], 'uses-permission-sdk-23': [], 'features': [], 'icons_src': {}, 'icons': {}, 'antiFeatures': {}, } ipfsCIDv1 = common.calculate_IPFS_cid(apk_file) if ipfsCIDv1: apk['ipfsCIDv1'] = ipfsCIDv1 scan_apk_androguard(apk, apk_file) if not common.is_valid_package_name(apk['packageName']): raise BuildException(_("{appid} from {path} is not a valid Java Package Name!") .format(appid=apk['packageName'], path=apk_file)) elif not common.is_strict_application_id(apk['packageName']): logging.warning(_("{appid} from {path} is not a valid Android application ID!") .format(appid=apk['packageName'], path=apk_file)) # Get the signature, or rather the signing key fingerprints logging.debug('Getting signature of {0}'.format(os.path.basename(apk_file))) apk['sig'] = getsig(apk_file) if require_signature: if not apk['sig']: raise BuildException(_("Failed to get APK signing key fingerprint")) apk['signer'] = common.apk_signer_fingerprint( os.path.join(os.getcwd(), apk_file) ) if not apk.get('signer'): raise BuildException(_("Failed to get APK signing key fingerprint")) # Get size of the APK apk['size'] = os.path.getsize(apk_file) if 'minSdkVersion' not in apk: logging.warning(_("No minimum SDK version found in {0}, using default (3).").format(apk_file)) apk['minSdkVersion'] = 3 # aapt defaults to 3 as the min # Check for known vulnerabilities hkv = has_known_vulnerability(apk_file) if hkv: apk['antiFeatures']['KnownVuln'] = {DEFAULT_LOCALE: hkv} return apk def _get_apk_icons_src(apkfile, icon_name): """Extract the paths to the app icon in all available densities. The folder name is normally generated by the Android Tools, but there is nothing that prevents people from using whatever DPI names they make up. Android will just ignore them, so we should too. """ icons_src = dict() density_re = re.compile(r'^res/(.*)/{}\.png$'.format(icon_name)) with zipfile.ZipFile(apkfile) as zf: for filename in zf.namelist(): m = density_re.match(filename) if m: folder = m.group(1).split('-') try: density = screen_resolutions[folder[1]] except Exception: density = '160' icons_src[density] = m.group(0) if icons_src.get('-1') is None and '160' in icons_src: icons_src['-1'] = icons_src['160'] return icons_src def _get_ipa_icon(src_dir): """Search source directory of an IPA project for the app icon.""" # parse app icon name from project config file src_dir = Path(src_dir) prj = next(src_dir.glob("**/project.pbxproj"), None) if not prj or not prj.exists(): return icon_name = _parse_from_pbxproj(prj, 'ASSETCATALOG_COMPILER_APPICON_NAME') if not icon_name: return icon_dir = next(src_dir.glob(f'**/{icon_name}.appiconset'), None) if not icon_dir: return with open(icon_dir / "Contents.json") as f: cntnt = json.load(f) fname = None fsize = 0 for image in cntnt['images']: s = float(image.get("size", "0x0").split("x")[0]) if image.get('scale') == "1x" and s > fsize and s <= 128: fname = image['filename'] fsize = s return str(icon_dir / fname) def _parse_from_pbxproj(pbxproj_path, key): """Parse values from apple project files. This is a naive regex based parser. Should this proofe to unreliable we might want to consider using a dedicated pbxproj parser: https://pypi.org/project/pbxproj/ e.g. when looking for key 'ASSETCATALOG_COMPILER_APPICON_NAME' This function will extract 'MyIcon' from if the provided file contains this line: ASSETCATALOG_COMPILER_APPICON_NAME = MyIcon; returns None if parsing for that value didn't yield anything """ r = re.compile(f"\\s*{key}\\s*=\\s*(?P[a-zA-Z0-9-_]+)\\s*;\\s*") with open(pbxproj_path, 'r', encoding='utf-8') as f: for line in f.readlines(): m = r.match(line) if m: return m.group("value") return None def _sanitize_sdk_version(value): """Sanitize the raw values from androguard to handle bad values. minSdkVersion/targetSdkVersion/maxSdkVersion must be integers, but that doesn't stop devs from doing strange things like setting them using Android XML strings. This method makes the Androguard output match the output from `aapt dump badging`: bad values are ignored. https://gitlab.com/souch/SMSbypass/blob/v0.9/app/src/main/AndroidManifest.xml#L29 https://gitlab.com/souch/SMSbypass/blob/v0.9/app/src/main/res/values/strings.xml#L27 """ try: sdk_version = int(value) if sdk_version > 0: return sdk_version except (TypeError, ValueError): pass return None def scan_apk_androguard(apk, apkfile): try: apkobject = common.get_androguard_APK(apkfile) if apkobject.is_valid_APK(): arsc = apkobject.get_android_resources() else: if options.delete_unknown: if os.path.exists(apkfile): logging.error(_("Failed to get APK information, deleting {path}") .format(path=apkfile)) os.remove(apkfile) else: logging.error(_("Could not find {path} to remove it") .format(path=apkfile)) else: logging.error(_("Failed to get APK information, skipping {path}") .format(path=apkfile)) raise BuildException(_("Invalid APK")) except (FileNotFoundError, ValueError, zipfile.BadZipFile) as e: logging.error(_("Could not open APK {path} for analysis: ").format(path=apkfile) + str(e)) raise BuildException(_("Invalid APK")) from e apk['packageName'] = apkobject.get_package() xml = apkobject.get_android_manifest_xml() androidmanifest_xml = apkobject.xml['AndroidManifest.xml'] if len(xml.nsmap) > 0: # one of them surely will be the Android one, or its corrupt xmlns = common.XMLNS_ANDROID else: # strange but sometimes the namespace is blank. This seems to # only happen with the Bromite/Chromium APKs xmlns = '{}' vcstr = androidmanifest_xml.get(xmlns + 'versionCode') if vcstr.startswith('0x'): apk['versionCode'] = int(vcstr, 16) else: apk['versionCode'] = int(vcstr) apk['name'] = apkobject.get_app_name() apk['versionName'] = common.ensure_final_value(apk['packageName'], arsc, androidmanifest_xml.get(xmlns + 'versionName')) minSdkVersion = _sanitize_sdk_version(apkobject.get_min_sdk_version()) if minSdkVersion is not None: apk['minSdkVersion'] = minSdkVersion targetSdkVersion = _sanitize_sdk_version(apkobject.get_target_sdk_version()) if targetSdkVersion is not None: apk['targetSdkVersion'] = targetSdkVersion maxSdkVersion = _sanitize_sdk_version(apkobject.get_max_sdk_version()) if maxSdkVersion is not None: apk['maxSdkVersion'] = maxSdkVersion icon_id_str = apkobject.get_attribute_value("application", "icon") if icon_id_str: try: icon_id = int(icon_id_str.replace("@", "0x"), 16) resource_id = arsc.get_id(apk['packageName'], icon_id) if resource_id: icon_name = arsc.get_id(apk['packageName'], icon_id)[1] else: # don't use 'anydpi' aka 0xFFFE aka 65534 since it is XML icon_name = os.path.splitext(os.path.basename(apkobject.get_app_icon(max_dpi=65534 - 1)))[0] apk['icons_src'] = _get_apk_icons_src(apkfile, icon_name) except Exception as e: logging.error("Cannot fetch icon from %s: %s" % (apkfile, str(e))) arch_re = re.compile("^lib/(.*)/.*$") arch = set([arch_re.match(file).group(1) for file in apkobject.get_files() if arch_re.match(file)]) if len(arch) >= 1: apk['nativecode'] = [] apk['nativecode'].extend(sorted(list(arch))) for item in xml.findall('uses-permission'): name = item.attrib.get(xmlns + 'name') if not name: logging.debug( _('Ignoring bad element in manifest: %s') % ElementTree.tostring(item).decode() ) continue maxSdkVersion = item.attrib.get(xmlns + 'maxSdkVersion') maxSdkVersion = int(maxSdkVersion) if maxSdkVersion else None permission = UsesPermission(str(name), maxSdkVersion) apk['uses-permission'].append(permission) for name, maxSdkVersion in apkobject.get_uses_implied_permission_list(): permission = UsesPermission( name, maxSdkVersion ) apk['uses-permission'].append(permission) for item in xml.findall('uses-permission-sdk-23'): name = item.attrib.get(xmlns + 'name') if not name: logging.debug( _('Ignoring bad element in manifest: %s') % ElementTree.tostring(item).decode() ) continue maxSdkVersion = item.attrib.get(xmlns + 'maxSdkVersion') maxSdkVersion = int(maxSdkVersion) if maxSdkVersion else None permission_sdk_23 = UsesPermissionSdk23(str(name), maxSdkVersion) apk['uses-permission-sdk-23'].append(permission_sdk_23) for item in xml.findall('uses-feature'): feature = str(item.attrib.get(xmlns + 'name', '')) if not feature: logging.debug( _('Ignoring bad element in manifest: %s') % ElementTree.tostring(item).decode() ) continue if feature not in ( 'android.hardware.screen.portrait', 'android.hardware.screen.landscape', ): if feature.startswith("android.feature."): feature = feature[16:] required = item.attrib.get(xmlns + 'required') if required is None or required == 'true': apk['features'].append(feature) def process_apk(apkcache, apkfilename, repodir, knownapks, use_date_from_apk=False, allow_disabled_algorithms=False, archive_bad_sig=False, apps=None, cache_timestamp=0): """Process the apk with the given filename in the given repo directory. This also extracts the icons. Parameters ---------- apkcache current apk cache information apkfilename the filename of the apk to scan repodir repo directory to scan knownapks known apks info use_date_from_apk use date from APK (instead of current date) for newly added APKs allow_disabled_algorithms allow APKs with valid signatures that include disabled algorithms in the signature (e.g. MD5) archive_bad_sig move APKs with a bad signature to the archive cache_timestamp the timestamp of the cache file Returns ------- (skip, apk, cachechanged) where skip is a boolean indicating whether to skip this apk, apk is the scanned apk information, and cachechanged is True if the apkcache got changed. """ apk = {} apkfile = os.path.join(repodir, apkfilename) cachechanged = False usecache = False if apkfilename in apkcache: apk = apkcache[apkfilename] stat = os.stat(apkfile) if apk.get('size') == stat.st_size and stat.st_mtime < cache_timestamp: logging.debug(_("Reading {apkfilename} from cache") .format(apkfilename=apkfilename)) usecache = True else: logging.debug(_("Ignoring stale cache data for {apkfilename}") .format(apkfilename=apkfilename)) if not usecache: logging.debug(_("Processing {apkfilename}").format(apkfilename=apkfilename)) try: apk = scan_apk(apkfile) except BuildException: logging.warning(_("Skipping '{apkfilename}' with invalid signature!") .format(apkfilename=apkfilename)) return True, None, False if apps: if apk['packageName'] in apps: for build in apps[apk['packageName']].get('Builds', []): if build['versionCode'] == apk['versionCode'] and build['disable']: return True, None, False # Check for debuggable apks... if common.is_debuggable_or_testOnly(apkfile): logging.warning( "%s: debuggable or testOnly set in AndroidManifest.xml" % apkfile ) if options.rename_apks: n = apk['packageName'] + '_' + str(apk['versionCode']) + '.apk' std_short_name = os.path.join(repodir, n) if apkfile != std_short_name: if os.path.exists(std_short_name): std_long_name = std_short_name.replace('.apk', '_' + apk['sig'][:7] + '.apk') if apkfile != std_long_name: if os.path.exists(std_long_name): dupdir = os.path.join('duplicates', repodir) if not os.path.isdir(dupdir): os.makedirs(dupdir, exist_ok=True) dupfile = os.path.join('duplicates', std_long_name) logging.warning('Moving duplicate ' + std_long_name + ' to ' + dupfile) os.rename(apkfile, dupfile) return True, None, False else: os.rename(apkfile, std_long_name) apkfile = std_long_name else: os.rename(apkfile, std_short_name) apkfile = std_short_name apkfilename = apkfile[len(repodir) + 1:] apk['apkName'] = apkfilename srcfilename = apkfilename[:-4] + "_src.tar.gz" if os.path.exists(os.path.join(repodir, srcfilename)): apk['srcname'] = srcfilename # verify the jar signature is correct, allow deprecated # algorithms only if the APK is in the archive. skipapk = False if not common.verify_apk_signature(apkfile): if repodir == 'archive' or allow_disabled_algorithms: try: common.verify_deprecated_jar_signature(apkfile) apk['antiFeatures'].update(['KnownVuln', 'DisabledAlgorithm']) # TODO except VerificationException: skipapk = True else: skipapk = True if skipapk: if archive_bad_sig: logging.warning(_('Archiving {apkfilename} with invalid signature!') .format(apkfilename=apkfilename)) move_apk_between_sections(repodir, 'archive', apk) else: logging.warning(_('Skipping {apkfilename} with invalid signature!') .format(apkfilename=apkfilename)) return True, None, False apkzip = zipfile.ZipFile(apkfile, 'r') manifest = apkzip.getinfo('AndroidManifest.xml') # 1980-0-0 means zeroed out, any other invalid date should trigger a warning if (1980, 0, 0) != manifest.date_time[0:3]: try: common.check_system_clock(datetime(*manifest.date_time), apkfilename) except ValueError as e: logging.warning(_("{apkfilename}'s AndroidManifest.xml has a bad date: ") .format(apkfilename=apkfile) + str(e)) # extract icons from APK zip file iconfilename = "%s.%s.png" % (apk['packageName'], apk['versionCode']) try: empty_densities = extract_apk_icons(iconfilename, apk, apkzip, repodir) finally: apkzip.close() # ensure that APK zip file gets closed # resize existing icons for densities missing in the APK fill_missing_icon_densities(empty_densities, iconfilename, apk, repodir) if use_date_from_apk: default_date_param = datetime.fromtimestamp(os.stat(apkfile).st_mtime, tz=timezone.utc) else: default_date_param = None # Record in known apks, getting the added date at the same time.. added = knownapks.recordapk(apk['apkName'], default_date=default_date_param) if added: apk['added'] = added apkcache[apkfilename] = apk cachechanged = True return False, apk, cachechanged def process_apks(apkcache, repodir, knownapks, use_date_from_apk=False, apps=None, cache_timestamp=0): """Process the apks in the given repo directory. This also extracts the icons. Parameters ---------- apkcache current apk cache information repodir repo directory to scan knownapks b known apks info use_date_from_apk use date from APK (instead of current date) for newly added APKs cache_timestamp the timestamp of the cache file Returns ------- (apks, cachechanged) where apks is a list of apk information, and cachechanged is True if the apkcache got changed. """ cachechanged = False for icon_dir in get_all_icon_dirs(repodir): if os.path.exists(icon_dir): if options is not None and options.clean: shutil.rmtree(icon_dir) os.makedirs(icon_dir) else: os.makedirs(icon_dir) apks = [] for apkfile in sorted(glob.glob(os.path.join(repodir, '*.apk'))): apkfilename = apkfile[len(repodir) + 1:] ada = disabled_algorithms_allowed() (skip, apk, cachethis) = process_apk(apkcache, apkfilename, repodir, knownapks, use_date_from_apk, ada, True, apps, cache_timestamp) if skip: continue apks.append(apk) cachechanged = cachechanged or cachethis return apks, cachechanged def extract_apk_icons(icon_filename, apk, apkzip, repo_dir): """Extract PNG icons from an APK with the supported pixel densities. Extracts icons from the given APK zip in various densities, saves them into given repo directory and stores their names in the APK metadata dictionary. If the icon is an XML icon, then this tries to find PNG icon that can replace it. Parameters ---------- icon_filename A string representing the icon's file name apk A populated dictionary containing APK metadata. Needs to have 'icons_src' key apkzip An opened zipfile.ZipFile of the APK file repo_dir The directory of the APK's repository Returns ------- A list of icon densities that are missing """ res_name_re = re.compile(r'res/(drawable|mipmap)-(x*[hlm]dpi|anydpi).*/(.*)_[0-9]+dp.(png|xml)') pngs = dict() for f in apkzip.namelist(): m = res_name_re.match(f) if m and m.group(4) == 'png': density = screen_resolutions[m.group(2)] pngs[m.group(3) + '/' + density] = m.group(0) empty_densities = [] for density in screen_densities: if density not in apk['icons_src']: empty_densities.append(density) continue icon_src = apk['icons_src'][density] icon_dir = get_icon_dir(repo_dir, density) icon_dest = os.path.join(icon_dir, icon_filename) # Extract the icon files per density if icon_src.endswith('.xml'): m = res_name_re.match(icon_src) if m: name = pngs.get(m.group(3) + '/' + str(density)) if name: icon_src = name if icon_src.endswith('.xml'): empty_densities.append(density) continue try: with open(icon_dest, 'wb') as f: f.write(get_icon_bytes(apkzip, icon_src)) apk['icons'][density] = icon_filename except (zipfile.BadZipFile, ValueError, KeyError) as e: logging.warning("Error retrieving icon file: %s %s", icon_dest, e) del apk['icons_src'][density] empty_densities.append(density) # '-1' here is a remnant of the parsing of aapt output, meaning "no DPI specified" if '-1' in apk['icons_src'] and not apk['icons_src']['-1'].endswith('.xml'): icon_src = apk['icons_src']['-1'] icon_path = os.path.join(get_icon_dir(repo_dir, '0'), icon_filename) with open(icon_path, 'wb') as f: f.write(get_icon_bytes(apkzip, icon_src)) im = None try: im = Image.open(icon_path) dpi = px_to_dpi(im.size[0]) for density in screen_densities: if density in apk['icons']: break if density == screen_densities[-1] or dpi >= int(density): apk['icons'][density] = icon_filename shutil.move(icon_path, os.path.join(get_icon_dir(repo_dir, density), icon_filename)) empty_densities.remove(density) break except Exception as e: logging.warning(_("Failed reading {path}: {error}") .format(path=icon_path, error=e)) finally: if im and hasattr(im, 'close'): im.close() if apk['icons']: apk['icon'] = icon_filename return empty_densities def fill_missing_icon_densities(empty_densities, icon_filename, apk, repo_dir): """Resize existing PNG icons for densities missing in the APK to ensure all densities are available. Parameters ---------- empty_densities: A list of icon densities that are missing icon_filename: A string representing the icon's file name apk: A populated dictionary containing APK metadata. Needs to have 'icons' key repo_dir: The directory of the APK's repository """ # First try resizing down to not lose quality last_density = None for density in screen_densities: if density == '65534': # not possible to generate 'anydpi' from other densities continue if density not in empty_densities: last_density = density continue if last_density is None: continue logging.debug("Density %s not available, resizing down from %s", density, last_density) last_icon_path = os.path.join(get_icon_dir(repo_dir, last_density), icon_filename) icon_path = os.path.join(get_icon_dir(repo_dir, density), icon_filename) fp = None try: fp = open(last_icon_path, 'rb') im = Image.open(fp) size = dpi_to_px(density) im.thumbnail((size, size), Image.LANCZOS) im.save(icon_path, "PNG", optimize=True, pnginfo=BLANK_PNG_INFO, icc_profile=None) empty_densities.remove(density) except Exception as e: logging.warning("Invalid image file at %s: %s", last_icon_path, e) finally: if fp: fp.close() # Then just copy from the highest resolution available last_density = None for density in reversed(screen_densities): if density not in empty_densities: last_density = density continue if last_density is None: continue shutil.copyfile( os.path.join(get_icon_dir(repo_dir, last_density), icon_filename), os.path.join(get_icon_dir(repo_dir, density), icon_filename) ) empty_densities.remove(density) for density in screen_densities: icon_dir = get_icon_dir(repo_dir, density) icon_dest = os.path.join(icon_dir, icon_filename) resize_icon(icon_dest, density) # Copy from icons-mdpi to icons since mdpi is the baseline density baseline = os.path.join(get_icon_dir(repo_dir, '160'), icon_filename) if os.path.isfile(baseline): apk['icons']['0'] = icon_filename shutil.copyfile(baseline, os.path.join(get_icon_dir(repo_dir, '0'), icon_filename)) def apply_info_from_latest_apk(apps, apks): """No summary. Some information from the apks needs to be applied up to the application level. When doing this, we use the info from the most recent version's apk. We deal with figuring out when the app was added and last updated at the same time. """ for appid, app in apps.items(): bestver = UNSET_VERSION_CODE for apk in apks: if apk['packageName'] == appid: if apk['versionCode'] > bestver: bestver = apk['versionCode'] bestapk = apk if not app['added']: logging.debug("Don't know when " + appid + " was added") if not app['lastUpdated']: logging.debug("Don't know when " + appid + " was last updated") if bestver == UNSET_VERSION_CODE: app['icon'] = None logging.debug("Application " + appid + " has no packages") else: app.icon = bestapk['icon'] if 'icon' in bestapk else None if app.get('CurrentVersionCode') is None: app['CurrentVersionCode'] = bestver def archive_old_apks(apps, apks, archapks, repodir, archivedir, defaultkeepversions): def filter_apk_list_sorted(apk_list): apkList = [] currentVersionApk = None for apk in apk_list: if apk['packageName'] == appid: if app.get('CurrentVersionCode') is not None: if apk['versionCode'] == app['CurrentVersionCode']: currentVersionApk = apk continue apkList.append(apk) # Sort the apk list by version code. First is highest/newest. sorted_list = sorted(apkList, key=lambda apk: apk['versionCode'], reverse=True) if currentVersionApk: # Insert apk which corresponds to currentVersion at the front sorted_list.insert(0, currentVersionApk) return sorted_list for appid, app in apps.items(): keepversions = common.calculate_archive_policy(app, defaultkeepversions) if common.metadata_find_developer_signing_files(appid, app['CurrentVersionCode']): keepversions *= 2 logging.debug(_("Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}") .format(appid=appid, integer=len(apks), keep=keepversions, arch=len(archapks))) all_app_apks = filter_apk_list_sorted(apks + archapks) # determine which apks to keep in repo keep = [] for apk in all_app_apks: if len(keep) == keepversions: break if 'antiFeatures' not in apk: # TODO keep.append(apk) elif 'DisabledAlgorithm' not in apk['antiFeatures'] or disabled_algorithms_allowed(): keep.append(apk) # actually move apks to the target section for apk in all_app_apks: if apk in apks and apk not in keep: apks.remove(apk) archapks.append(apk) move_apk_between_sections(repodir, archivedir, apk) elif apk in archapks and apk in keep: archapks.remove(apk) apks.append(apk) move_apk_between_sections(archivedir, repodir, apk) def move_apk_between_sections(from_dir, to_dir, apk): """Move an APK from repo to archive or vice versa.""" def _move_file(from_dir, to_dir, filename, ignore_missing): from_path = os.path.join(from_dir, filename) if ignore_missing and not os.path.exists(from_path): return to_path = os.path.join(to_dir, filename) if not os.path.exists(to_dir): os.mkdir(to_dir) shutil.move(from_path, to_path) if from_dir == to_dir: return logging.info("Moving %s from %s to %s" % (apk['apkName'], from_dir, to_dir)) _move_file(from_dir, to_dir, apk['apkName'], False) _move_file(from_dir, to_dir, apk['apkName'] + '.asc', True) _move_file(from_dir, to_dir, apk['apkName'] + '.idsig', True) _move_file(from_dir, to_dir, apk['apkName'][:-4] + '.log.gz', True) for density in all_screen_densities: from_icon_dir = get_icon_dir(from_dir, density) to_icon_dir = get_icon_dir(to_dir, density) if density not in apk.get('icons', []): continue _move_file(from_icon_dir, to_icon_dir, apk['icons'][density], True) if 'srcname' in apk: _move_file(from_dir, to_dir, apk['srcname'], False) _move_file(from_dir, to_dir, apk['srcname'] + '.asc', True) def add_apks_to_per_app_repos(repodir, apks): apks_per_app = dict() for apk in apks: apk['per_app_dir'] = os.path.join(apk['packageName'], 'fdroid') apk['per_app_repo'] = os.path.join(apk['per_app_dir'], 'repo') apk['per_app_icons'] = os.path.join(apk['per_app_repo'], 'icons') apks_per_app[apk['packageName']] = apk if not os.path.exists(apk['per_app_icons']): logging.info(_('Adding new repo for only {name}').format(name=apk['packageName'])) os.makedirs(apk['per_app_icons']) apkpath = os.path.join(repodir, apk['apkName']) shutil.copy(apkpath, apk['per_app_repo']) apksigpath = apkpath + '.sig' if os.path.exists(apksigpath): shutil.copy(apksigpath, apk['per_app_repo']) apkascpath = apkpath + '.asc' if os.path.exists(apkascpath): shutil.copy(apkascpath, apk['per_app_repo']) def create_metadata_from_template(apk): """Create a new metadata file using internal or external template. Generate warnings for apk's with no metadata (or create skeleton metadata files, if requested on the command line). Though the template file is YAML, this uses neither pyyaml nor ruamel.yaml since those impose things on the metadata file made from the template: field sort order, empty field value, formatting, etc. """ if os.path.exists('template.yml'): with open('template.yml') as f: metatxt = f.read() if 'name' in apk and apk['name'] != '': metatxt = re.sub(r'''^(((Auto)?Name|Summary):)[ '"\.]*$''', r'\1 ' + apk['name'], metatxt, flags=re.IGNORECASE | re.MULTILINE) else: logging.warning(_('{appid} does not have a name! Using application ID instead.') .format(appid=apk['packageName'])) metatxt = re.sub(r'^(((Auto)?Name|Summary):).*$', r'\1 ' + apk['packageName'], metatxt, flags=re.IGNORECASE | re.MULTILINE) # make sure unset string values will be interpreted as blank strings str_fields = [x for x in metadata.yaml_app_fields if metadata.fieldtype(x) == metadata.TYPE_STRING] metatxt = re.sub(r'^(' + '|'.join(str_fields) + '):\\s*$', r"\1: ''", metatxt, flags=re.MULTILINE) with open(os.path.join('metadata', apk['packageName'] + '.yml'), 'w') as f: f.write(metatxt) else: app = dict() app['Categories'] = [os.path.basename(os.getcwd())] # include some blanks as part of the template app['AuthorName'] = '' app['Summary'] = '' app['WebSite'] = '' app['IssueTracker'] = '' app['SourceCode'] = '' app['CurrentVersionCode'] = 2147483647 # Java's Integer.MAX_VALUE if 'name' in apk and apk['name'] != '': app['Name'] = apk['name'] else: logging.warning(_('{appid} does not have a name! Using application ID instead.') .format(appid=apk['packageName'])) app['Name'] = apk['packageName'] with open(os.path.join('metadata', apk['packageName'] + '.yml'), 'w') as f: yaml.dump(app, f, default_flow_style=False) logging.info(_("Generated skeleton metadata for {appid}").format(appid=apk['packageName'])) def read_added_date_from_all_apks(apps, apks): """No summary. Added dates come from the repo/index-v2.json file but are read when scanning apks and thus need to be applied form apk level to app level for _all_ apps and not only from non-archived ones TODO: read the added dates directly from index-v2.json instead of going through apks that way it also works for for repos that don't keep an archive of apks. """ for appid, app in apps.items(): for apk in apks: if apk['packageName'] == appid: if 'added' in apk: if not app.get('added') or apk['added'] < app['added']: app['added'] = apk['added'] if not app.get('lastUpdated') or apk['added'] > app['lastUpdated']: app['lastUpdated'] = apk['added'] def insert_missing_app_names_from_apks(apps, apks): """Use app name from APK if it is not set in the metadata. Name -> localized -> from APK The name from the APK is set as the default name for the app if there is no other default set, e.g. app['Name'] or app['localized'][DEFAULT_LOCALE]['name']. The default is defined in the F-Droid ecosystem as the locale of last resort, as in the one that should always be present. en-US is used since it is the locale of the source strings. This should only be used for index v0 and v1. Later versions of the index should be sorted by Application ID, since it is guaranteed to always be there. Before, the index was stored by the app name (aka ) to save the website from having to sort the entries. That is no longer relevant since the website switched from Wordpress to Jekyll. """ for appid, app in apps.items(): if app.get('Name') is not None: continue if app.get('localized', {}).get(DEFAULT_LOCALE, {}).get('name') is not None: continue bestver = UNSET_VERSION_CODE for apk in apks: if apk['packageName'] == appid: if apk.get('name') and apk['versionCode'] > bestver: bestver = apk['versionCode'] bestapk = apk if bestver != UNSET_VERSION_CODE: if 'localized' not in app: app['localized'] = {} if DEFAULT_LOCALE not in app['localized']: app['localized'][DEFAULT_LOCALE] = {} app['localized'][DEFAULT_LOCALE]['name'] = bestapk.get('name') def get_apps_with_packages(apps, apks): """Return a deepcopy of that subset apps that actually has any associated packages. Skips disabled apps.""" appsWithPackages = collections.OrderedDict() for packageName in apps: app = apps[packageName] if app['Disabled']: continue # only include apps with packages for apk in apks: if apk['packageName'] == packageName: newapp = copy.copy(app) appsWithPackages[packageName] = newapp break return appsWithPackages def get_apks_without_allowed_signatures(app, apk): """Check the APK or package has been signed by one of the allowed signing certificates. The fingerprint of the signing certificate is the standard X.509 SHA-256 fingerprint as a hex string. It can be fetched from an APK using: apksigner verify --print-certs my.apk | grep SHA-256 Parameters ---------- app The app which declares the AllowedSigningKey apk The APK to check """ if not app or not apk: return allowed_signer_keys = app.get('AllowedAPKSigningKeys', []) if not allowed_signer_keys: return if apk['signer'] not in allowed_signer_keys: return apk['apkName'] def prepare_apps(apps, apks, repodir): """Encapsulate all necessary preparation steps before we can build an index out of apps and apks. Parameters ---------- apps All apps as read from metadata apks list of apks that belong into repo, this gets modified in place repodir the target repository directory, metadata files will be copied here Returns ------- the relevant subset of apps (as a deepcopy) """ apps_with_packages = get_apps_with_packages(apps, apks) apply_info_from_latest_apk(apps_with_packages, apks) insert_funding_yml_donation_links(apps) # This is only currently done for /repo because doing it for the archive # will take a lot of time and bloat the archive mirrors and index if repodir == 'repo': copy_triple_t_store_metadata(apps_with_packages) insert_obbs(repodir, apps_with_packages, apks) translate_per_build_anti_features(apps_with_packages, apks) if repodir == 'repo': insert_localized_app_metadata(apps_with_packages) insert_localized_ios_app_metadata(apps_with_packages) ingest_screenshots_from_repo_dir(apps_with_packages) insert_missing_app_names_from_apks(apps_with_packages, apks) return apps_with_packages config = None options = None start_timestamp = time.gmtime() def main(): global config, options # Parse command line... parser = ArgumentParser() common.setup_global_opts(parser) parser.add_argument("--create-key", action="store_true", default=False, help=_("Add a repo signing key to an unsigned repo")) parser.add_argument("-c", "--create-metadata", action="store_true", default=False, help=_("Add skeleton metadata files for APKs that are missing them")) parser.add_argument("--delete-unknown", action="store_true", default=False, help=_("Delete APKs and/or OBBs without metadata from the repo")) parser.add_argument("-I", "--icons", action="store_true", default=False, help=_("Resize all the icons exceeding the max pixel size and exit")) parser.add_argument("-w", "--wiki", default=False, action="store_true", help=argparse.SUPPRESS) parser.add_argument("--pretty", action="store_true", default=False, help=_("Produce human-readable XML/JSON for index files")) parser.add_argument("--clean", action="store_true", default=False, help=_("Clean update - don't uses caches, reprocess all APKs")) parser.add_argument("--nosign", action="store_true", default=False, help=_("When configured for signed indexes, create only unsigned indexes at this stage")) parser.add_argument("--use-date-from-apk", action="store_true", default=False, help=_("Use date from APK instead of current time for newly added APKs")) parser.add_argument("--rename-apks", action="store_true", default=False, help=_("Rename APK files that do not match package.name_123.apk")) parser.add_argument("--allow-disabled-algorithms", action="store_true", default=False, help=_("Include APKs that are signed with disabled algorithms like MD5")) metadata.add_metadata_arguments(parser) options = common.parse_args(parser) metadata.warnings_action = options.W config = common.read_config() status_output = common.setup_status_output(start_timestamp) if not (('jarsigner' in config or 'apksigner' in config) and 'keytool' in config): raise FDroidException(_('Java JDK not found! Install in standard location or set java_paths!')) repodirs = ['repo'] if config['archive_older'] != 0: repodirs.append('archive') if not os.path.exists('archive'): os.mkdir('archive') if options.icons: resize_all_icons(repodirs) sys.exit(0) if options.rename_apks: options.clean = True # check that icons exist now, rather than fail at the end of `fdroid update` for k in ['repo_icon', 'archive_icon']: if k in config: if not os.path.exists(config[k]): logging.warning(_('{name} "{section}/icons/{path}" does not exist! Check "config.yml".') .format(name=k, section=k.split('_')[0], path=config[k])) # if the user asks to create a keystore, do it now, reusing whatever it can if options.create_key: if os.path.exists(config['keystore']): logging.critical(_("Cowardily refusing to overwrite existing signing key setup!")) logging.critical("\t'" + config['keystore'] + "'") sys.exit(1) if 'repo_keyalias' not in config: config['repo_keyalias'] = socket.getfqdn() common.write_to_config(config, 'repo_keyalias', config['repo_keyalias']) if 'keydname' not in config: config['keydname'] = 'CN=' + config['repo_keyalias'] + ', OU=F-Droid' common.write_to_config(config, 'keydname', config['keydname']) if 'keystore' not in config: config['keystore'] = common.default_config['keystore'] common.write_to_config(config, 'keystore', config['keystore']) password = common.genpassword() if 'keystorepass' not in config: config['keystorepass'] = password common.write_to_config(config, 'keystorepass', config['keystorepass']) if 'keypass' not in config and not config['keystore'] == "NONE": config['keypass'] = password common.write_to_config(config, 'keypass', config['keypass']) common.genkeystore(config) # Get all apps... apps = metadata.read_metadata() # Read known apks data (will be updated and written back when we've finished) knownapks = common.KnownApks() # Get APK cache apkcache = get_cache() cache_timestamp = get_cache_mtime() # Delete builds for disabled apps output_status_stage(status_output, 'delete_disabled_builds') delete_disabled_builds(apps, apkcache, repodirs) # Scan all apks in the main repo output_status_stage(status_output, 'process_apks') apks, cachechanged = process_apks(apkcache, repodirs[0], knownapks, options.use_date_from_apk, apps, cache_timestamp) output_status_stage(status_output, 'scan_repo_files') files, fcachechanged = scan_repo_files(apkcache, repodirs[0], knownapks, options.use_date_from_apk) cachechanged = cachechanged or fcachechanged apks += files ipas, icachechanged = scan_repo_for_ipas(apkcache, repodirs[0], knownapks) cachechanged = cachechanged or icachechanged apks += ipas output_status_stage(status_output, 'remove_apks') appid_has_apks = set() appid_has_repo_files = set() sha256_has_files = collections.defaultdict(list) errors = 0 remove_apks = [] for apk in apks: sha256 = apk['hash'] if sha256 in sha256_has_files: errors += 1 for path2 in sha256_has_files[sha256]: logging.error( _('{path1} is a duplicate of {path2}, remove one!').format( path1=apk["apkName"], path2=path2 ) ) sha256_has_files[sha256].append(apk['apkName']) to_remove = get_apks_without_allowed_signatures(apps.get(apk['packageName']), apk) if to_remove: remove_apks.append(apk) logging.warning( _('"{path}" is signed by a key that is not allowed:').format( path=to_remove ) + '\n' + apk['signer'] ) if options.delete_unknown: for d in repodirs: path = Path(d) / to_remove if path.exists(): logging.warning(_('Removing {path}"').format(path=path)) path.unlink() if apk['apkName'].endswith('.apk'): appid_has_apks.add(apk['packageName']) else: appid_has_repo_files.add(apk['packageName']) if apk['packageName'] not in apps: if options.create_metadata: create_metadata_from_template(apk) apps = metadata.read_metadata() else: msg = _("{apkfilename} ({appid}) has no metadata!") \ .format(apkfilename=apk['apkName'], appid=apk['packageName']) if options.delete_unknown: logging.warning(msg + '\n\t' + _("deleting: repo/{apkfilename}") .format(apkfilename=apk['apkName'])) rmf = os.path.join(repodirs[0], apk['apkName']) if not os.path.exists(rmf): logging.error(_("Could not find {path} to remove it").format(path=rmf)) else: os.remove(rmf) else: logging.warning(msg + '\n\t' + _('Use `fdroid update -c` to create it.')) for apk in remove_apks: apks.remove(apk) for appid in appid_has_apks: if appid in appid_has_repo_files: appid_files = ', '.join(glob.glob(os.path.join('repo', appid + '_[0-9]*.*'))) errors += 1 logging.error( _('{appid} has both APKs and files: {files}').format( appid=appid, files=appid_files ) ) if errors: sys.exit(errors) # Scan the archive repo for apks as well if len(repodirs) > 1: archapks, cc = process_apks(apkcache, repodirs[1], knownapks, options.use_date_from_apk, apps, cache_timestamp) if cc: cachechanged = True else: archapks = [] if cachechanged: write_cache(apkcache) output_status_stage(status_output, 'read_added_date_from_all_apks') # The added date currently comes from the oldest apk which might be in the archive. # So we need this populated at app level before continuing with only processing /repo # or /archive read_added_date_from_all_apks(apps, apks + archapks) if len(repodirs) > 1: output_status_stage(status_output, 'archive_old_apks archive') archive_old_apks(apps, apks, archapks, repodirs[0], repodirs[1], config['archive_older']) output_status_stage(status_output, 'prepare_apps archive') archived_apps = prepare_apps(apps, archapks, repodirs[1]) output_status_stage(status_output, 'index.make archive') fdroidserver.index.make(archived_apps, archapks, repodirs[1], True) output_status_stage(status_output, 'prepare_apps repo') repoapps = prepare_apps(apps, apks, repodirs[0]) output_status_stage(status_output, 'index.make repo') # APKs are placed into multiple repos based on the app package, providing # per-app subscription feeds for nightly builds and things like it if config['per_app_repos']: add_apks_to_per_app_repos(repodirs[0], apks) for appid, app in apps.items(): repodir = os.path.join(appid, 'fdroid', 'repo') app_dict = dict() app_dict[appid] = app if os.path.isdir(repodir): fdroidserver.index.make(app_dict, apks, repodir, False) else: logging.info(_('Skipping index generation for {appid}').format(appid=appid)) return # Make the index for the main repo... fdroidserver.index.make(repoapps, apks, repodirs[0], False) git_remote = config.get('binary_transparency_remote') if git_remote or os.path.isdir(os.path.join('binary_transparency', '.git')): from . import btlog output_status_stage(status_output, 'make_binary_transparency_log') btlog.make_binary_transparency_log(repodirs) status_update_json(apps, apks + archapks) logging.info(_("Finished")) if __name__ == "__main__": main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742812298.0 fdroidserver-2.4.0/fdroidserver/verify.py0000644000175000017500000002315114770232212017275 0ustar00hanshans#!/usr/bin/env python3 # # verify.py - part of the FDroid server tools # Copyright (C) 2013, Ciaran Gultnieks, ciaran@ciarang.com # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import sys import os import glob import json import logging import requests from argparse import ArgumentParser from collections import OrderedDict from . import _ from . import common from . import net from .exception import FDroidException config = None def _add_diffoscope_info(d): """Add diffoscope setup metadata to provided dict under 'diffoscope' key. The imports are broken out at stages since various versions of diffoscope support various parts of these. """ try: import diffoscope d['diffoscope'] = dict() d['diffoscope']['VERSION'] = diffoscope.VERSION from diffoscope.comparators import ComparatorManager ComparatorManager().reload() from diffoscope.tools import tool_check_installed, tool_required external_tools = sorted(tool_required.all) external_tools = [ tool for tool in external_tools if not tool_check_installed(tool) ] d['diffoscope']['External-Tools-Required'] = external_tools from diffoscope.tools import OS_NAMES, get_current_os from diffoscope.external_tools import EXTERNAL_TOOLS current_os = get_current_os() os_list = [current_os] if (current_os in OS_NAMES) else iter(OS_NAMES) for os_ in os_list: tools = set() for x in external_tools: try: tools.add(EXTERNAL_TOOLS[x][os_]) except KeyError: pass tools = sorted(tools) d['diffoscope']['Available-in-{}-packages'.format(OS_NAMES[os_])] = tools from diffoscope.tools import python_module_missing as pmm d['diffoscope']['Missing-Python-Modules'] = sorted(pmm.modules) except ImportError: pass def get_verified_json(path): """Get the full collection of reports that is written out to verified.json.""" if os.path.exists(path): try: with open(path) as fp: return json.load(fp) except Exception as e: logging.info(f'{path}: {e}') data = OrderedDict() data['packages'] = OrderedDict() for f in glob.glob(os.path.join(os.path.dirname(path), '*.apk.json')): with open(f) as fp: reports = json.load(fp) for report in reports.values(): packageName = report['local']['packageName'] if packageName not in data['packages']: data['packages'][packageName] = [] data['packages'][packageName].append(report) return data def write_json_report(url, remote_apk, unsigned_apk, compare_result): """Write out the results of the verify run to JSON. This builds up reports on the repeated runs of `fdroid verify` on a set of apps. It uses the timestamps on the compared files to ensure that there is only one report per file, even when run repeatedly. The output is run through JSON to normalize things like tuples vs lists. """ jsonfile = unsigned_apk + '.json' if os.path.exists(jsonfile): with open(jsonfile) as fp: data = json.load(fp, object_pairs_hook=OrderedDict) else: data = OrderedDict() output = dict() _add_diffoscope_info(output) output['url'] = url for key, filename in (('local', unsigned_apk), ('remote', remote_apk)): d = dict() output[key] = d d['file'] = filename d['sha256'] = common.sha256sum(filename) d['timestamp'] = os.stat(filename).st_ctime d['packageName'], d['versionCode'], d['versionName'] = common.get_apk_id( filename ) if compare_result: output['verified'] = False output['result'] = compare_result else: output['verified'] = True # str makes better dict keys than float data[str(output['local']['timestamp'])] = output with open(jsonfile, 'w') as fp: json.dump(data, fp, sort_keys=True) if output['verified']: jsonfile = 'unsigned/verified.json' data = get_verified_json(jsonfile) packageName = output['local']['packageName'] if packageName not in data['packages']: data['packages'][packageName] = [] found = False output_dump = json.dumps(output, sort_keys=True) for p in data['packages'][packageName]: if output_dump == json.dumps(p, sort_keys=True): found = True break if not found: data['packages'][packageName].insert(0, json.loads(output_dump)) with open(jsonfile, 'w') as fp: json.dump(data, fp, cls=common.Encoder, sort_keys=True) def main(): global config # Parse command line... parser = ArgumentParser( usage="%(prog)s [options] [APPID[:VERCODE] [APPID[:VERCODE] ...]]" ) common.setup_global_opts(parser) parser.add_argument( "appid", nargs='*', help=_("application ID with optional versionCode in the form APPID[:VERCODE]"), ) parser.add_argument( "--clean-up-verified", action="store_true", default=False, help=_("Remove source tarball and any APKs if successfully verified."), ) parser.add_argument( "--reuse-remote-apk", action="store_true", default=False, help=_("Verify against locally cached copy rather than redownloading."), ) parser.add_argument( "--output-json", action="store_true", default=False, help=_("Output JSON report to file named after APK."), ) options = common.parse_args(parser) config = common.read_config() tmp_dir = 'tmp' if not os.path.isdir(tmp_dir): logging.info(_("Creating temporary directory")) os.makedirs(tmp_dir) unsigned_dir = 'unsigned' if not os.path.isdir(unsigned_dir): logging.error(_("No unsigned directory - nothing to do")) sys.exit(0) processed = set() verified = 0 notverified = 0 vercodes = common.read_pkg_args(options.appid, True) for apkfile in sorted(glob.glob(os.path.join(unsigned_dir, '*.apk'))): apkfilename = os.path.basename(apkfile) url = 'https://f-droid.org/repo/' + apkfilename appid, vercode = common.publishednameinfo(apkfile) if vercodes and appid not in vercodes: continue if vercodes[appid] and vercode not in vercodes[appid]: continue processed.add(appid) try: logging.info("Processing {apkfilename}".format(apkfilename=apkfilename)) remote_apk = os.path.join(tmp_dir, apkfilename) if not options.reuse_remote_apk or not os.path.exists(remote_apk): if os.path.exists(remote_apk): os.remove(remote_apk) logging.info("...retrieving " + url) try: net.download_file(url, dldir=tmp_dir) except requests.exceptions.HTTPError: try: net.download_file( url.replace('/repo', '/archive'), dldir=tmp_dir ) except requests.exceptions.HTTPError as e: raise FDroidException( _('Downloading {url} failed. {error}').format( url=url, error=e ) ) from e unsigned_apk = os.path.join(unsigned_dir, apkfilename) compare_result = common.verify_apks( remote_apk, unsigned_apk, tmp_dir, clean_up_verified=options.clean_up_verified, ) if options.output_json: write_json_report(url, remote_apk, unsigned_apk, compare_result) if compare_result: raise FDroidException(compare_result) if options.clean_up_verified: src_tarball = os.path.join( unsigned_dir, common.get_src_tarball_name(appid, vercode) ) for f in (remote_apk, unsigned_apk, src_tarball): if os.path.exists(f): logging.info(f"...cleaned up {f} after successful verification") os.remove(f) logging.info("...successfully verified") verified += 1 except FDroidException as e: logging.info("...NOT verified - {0}".format(e)) notverified += 1 for appid in options.appid: package = appid.split(":")[0] if package not in processed: logging.critical(_("No APK for package: %s") % package) notverified += 1 if verified > 0: logging.info("{0} successfully verified".format(verified)) if notverified > 0: logging.info("{0} NOT verified".format(notverified)) sys.exit(notverified) if __name__ == "__main__": main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742486863.0 fdroidserver-2.4.0/fdroidserver/vmtools.py0000644000175000017500000003741414767036517017523 0ustar00hanshans#!/usr/bin/env python3 # # vmtools.py - part of the FDroid server tools # Copyright (C) 2017 Michael Poehn # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . from os.path import isdir, isfile, basename, abspath, expanduser import os import json import shutil import subprocess import textwrap import logging from .common import FDroidException import threading lock = threading.Lock() def get_clean_builder(serverdir): if not os.path.isdir(serverdir): if os.path.islink(serverdir): os.unlink(serverdir) logging.info("buildserver path does not exists, creating %s", serverdir) os.makedirs(serverdir) vagrantfile = os.path.join(serverdir, 'Vagrantfile') if not os.path.isfile(vagrantfile): with open(vagrantfile, 'w') as f: f.write( textwrap.dedent( """\ # generated file, do not change. Vagrant.configure("2") do |config| config.vm.box = "buildserver" config.vm.synced_folder ".", "/vagrant", disabled: true end """ ) ) vm = get_build_vm(serverdir) logging.info('destroying buildserver before build') vm.destroy() logging.info('starting buildserver') vm.up() try: sshinfo = vm.sshinfo() except FDroidBuildVmException: # workaround because libvirt sometimes likes to forget # about ssh connection info even thou the vm is running vm.halt() vm.up() sshinfo = vm.sshinfo() return sshinfo def _check_call(cmd, cwd=None): logging.debug(' '.join(cmd)) return subprocess.check_call(cmd, shell=False, cwd=cwd) def _check_output(cmd, cwd=None): logging.debug(' '.join(cmd)) return subprocess.check_output(cmd, shell=False, cwd=cwd) def get_build_vm(srvdir, provider=None): """No summary. Factory function for getting FDroidBuildVm instances. This function tries to figure out what hypervisor should be used and creates an object for controlling a build VM. Parameters ---------- srvdir path to a directory which contains a Vagrantfile provider optionally this parameter allows specifiying an specific vagrant provider. Returns ------- FDroidBuildVm instance. """ abssrvdir = abspath(srvdir) # use supplied provider if provider: if provider == 'libvirt': logging.debug('build vm provider \'libvirt\' selected') return LibvirtBuildVm(abssrvdir) elif provider == 'virtualbox': logging.debug('build vm provider \'virtualbox\' selected') return VirtualboxBuildVm(abssrvdir) else: logging.warning('build vm provider not supported: \'%s\'', provider) # try guessing provider from installed software kvm_installed = shutil.which('kvm') is not None kvm_installed |= shutil.which('qemu') is not None kvm_installed |= shutil.which('qemu-kvm') is not None vbox_installed = shutil.which('VBoxHeadless') is not None if kvm_installed and vbox_installed: logging.debug('both kvm and vbox are installed.') elif kvm_installed: logging.debug( 'libvirt is the sole installed and supported vagrant provider, selecting \'libvirt\'' ) return LibvirtBuildVm(abssrvdir) elif vbox_installed: logging.debug( 'virtualbox is the sole installed and supported vagrant provider, selecting \'virtualbox\'' ) return VirtualboxBuildVm(abssrvdir) else: logging.debug( 'could not confirm that either virtualbox or kvm/libvirt are installed' ) # try guessing provider from .../srvdir/.vagrant internals vagrant_libvirt_path = os.path.join( abssrvdir, '.vagrant', 'machines', 'default', 'libvirt' ) has_libvirt_machine = ( isdir(vagrant_libvirt_path) and len(os.listdir(vagrant_libvirt_path)) > 0 ) vagrant_virtualbox_path = os.path.join( abssrvdir, '.vagrant', 'machines', 'default', 'virtualbox' ) has_vbox_machine = ( isdir(vagrant_virtualbox_path) and len(os.listdir(vagrant_virtualbox_path)) > 0 ) if has_libvirt_machine and has_vbox_machine: logging.info( 'build vm provider lookup found virtualbox and libvirt, defaulting to \'virtualbox\'' ) return VirtualboxBuildVm(abssrvdir) elif has_libvirt_machine: logging.debug('build vm provider lookup found \'libvirt\'') return LibvirtBuildVm(abssrvdir) elif has_vbox_machine: logging.debug('build vm provider lookup found \'virtualbox\'') return VirtualboxBuildVm(abssrvdir) # try guessing provider from available buildserver boxes available_boxes = [] import vagrant boxes = vagrant.Vagrant().box_list() for box in boxes: if box.name == "buildserver": available_boxes.append(box.provider) if "libvirt" in available_boxes and "virtualbox" in available_boxes: logging.info( 'basebox lookup found virtualbox and libvirt boxes, defaulting to \'virtualbox\'' ) return VirtualboxBuildVm(abssrvdir) elif "libvirt" in available_boxes: logging.info('\'libvirt\' buildserver box available, using that') return LibvirtBuildVm(abssrvdir) elif "virtualbox" in available_boxes: logging.info('\'virtualbox\' buildserver box available, using that') return VirtualboxBuildVm(abssrvdir) else: logging.error('No available \'buildserver\' box. Cannot proceed') os._exit(1) class FDroidBuildVmException(FDroidException): pass class FDroidBuildVm: """Abstract base class for working with FDroids build-servers. Use the factory method `fdroidserver.vmtools.get_build_vm()` for getting correct instances of this class. This is intended to be a hypervisor independent, fault tolerant wrapper around the vagrant functions we use. """ def __init__(self, srvdir, provider=None): """Create new server class.""" self.provider = provider self.srvdir = srvdir self.srvname = basename(srvdir) + '_default' self.vgrntfile = os.path.join(srvdir, 'Vagrantfile') self.srvuuid = self._vagrant_fetch_uuid() if not isdir(srvdir): raise FDroidBuildVmException( "Can not init vagrant, directory %s not present" % (srvdir) ) if not isfile(self.vgrntfile): raise FDroidBuildVmException( "Can not init vagrant, '%s' not present" % (self.vgrntfile) ) import vagrant self.vgrnt = vagrant.Vagrant( root=srvdir, out_cm=vagrant.stdout_cm, err_cm=vagrant.stdout_cm ) def up(self, provision=True): global lock with lock: try: self.vgrnt.up(provision=provision, provider=self.provider) self.srvuuid = self._vagrant_fetch_uuid() except subprocess.CalledProcessError as e: statusline = "" try: # try to get some additional info about the vagrant vm status = self.vgrnt.status() if len(status) > 0: statusline = "VM status: name={n}, state={s}, provider={p}"\ .format(n=status[0].name, s=status[0].state, p=status[0].provider) except subprocess.CalledProcessError: pass raise FDroidBuildVmException(value="could not bring up vm '{vmname}'" .format(vmname=self.srvname), detail="{err}\n{statline}" .format(err=str(e), statline=statusline) ) from e def suspend(self): global lock with lock: logging.info('suspending buildserver') try: self.vgrnt.suspend() except subprocess.CalledProcessError as e: raise FDroidBuildVmException("could not suspend vm '%s'" % self.srvname) from e def halt(self): global lock with lock: self.vgrnt.halt(force=True) def destroy(self): """Remove every trace of this VM from the system. This includes deleting: * hypervisor specific definitions * vagrant state informations (eg. `.vagrant` folder) * images related to this vm """ logging.info("destroying vm '%s'", self.srvname) try: self.vgrnt.destroy() logging.debug('vagrant destroy completed') except subprocess.CalledProcessError as e: logging.exception('vagrant destroy failed: %s', e) vgrntdir = os.path.join(self.srvdir, '.vagrant') try: shutil.rmtree(vgrntdir) logging.debug('deleted vagrant dir: %s', vgrntdir) except Exception as e: logging.debug("could not delete vagrant dir: %s, %s", vgrntdir, e) try: _check_call(['vagrant', 'global-status', '--prune']) except subprocess.CalledProcessError as e: logging.debug('pruning global vagrant status failed: %s', e) def vagrant_uuid_okay(self): """Having an uuid means that vagrant up has run successfully.""" if self.srvuuid is None: return False return True def _vagrant_file_name(self, name): return name.replace('/', '-VAGRANTSLASH-') def _vagrant_fetch_uuid(self): if isfile(os.path.join(self.srvdir, '.vagrant')): # Vagrant 1.0 - it's a json file... with open(os.path.join(self.srvdir, '.vagrant')) as f: id = json.load(f)['active']['default'] logging.debug('vm uuid: %s', id) return id elif isfile(os.path.join(self.srvdir, '.vagrant', 'machines', 'default', self.provider, 'id')): # Vagrant 1.2 (and maybe 1.1?) it's a directory tree... with open(os.path.join(self.srvdir, '.vagrant', 'machines', 'default', self.provider, 'id')) as f: id = f.read() logging.debug('vm uuid: %s', id) return id else: logging.debug('vm uuid is None') return None def box_add(self, boxname, boxfile, force=True): """Add vagrant box to vagrant. Parameters ---------- boxname name assigned to local deployment of box boxfile path to box file force overwrite existing box image (default: True) """ boxfile = abspath(boxfile) if not isfile(boxfile): raise FDroidBuildVmException( 'supplied boxfile \'%s\' does not exist' % boxfile ) self.vgrnt.box_add(boxname, abspath(boxfile), force=force) def box_remove(self, boxname): try: _check_call(['vagrant', 'box', 'remove', '--all', '--force', boxname]) except subprocess.CalledProcessError as e: logging.debug('tried removing box %s, but is did not exist: %s', boxname, e) boxpath = os.path.join( expanduser('~'), '.vagrant', self._vagrant_file_name(boxname) ) if isdir(boxpath): logging.info( "attempting to remove box '%s' by deleting: %s", boxname, boxpath ) shutil.rmtree(boxpath) def sshinfo(self): """Get ssh connection info for a vagrant VM. Returns ------- A dictionary containing 'hostname', 'port', 'user' and 'idfile' """ import paramiko try: sshconfig_path = os.path.join(self.srvdir, 'sshconfig') with open(sshconfig_path, 'wb') as fp: fp.write(_check_output(['vagrant', 'ssh-config'], cwd=self.srvdir)) vagranthost = 'default' # Host in ssh config file sshconfig = paramiko.SSHConfig() with open(sshconfig_path, 'r') as f: sshconfig.parse(f) sshconfig = sshconfig.lookup(vagranthost) idfile = sshconfig['identityfile'] if isinstance(idfile, list): idfile = idfile[0] elif idfile.startswith('"') and idfile.endswith('"'): idfile = idfile[1:-1] return { 'hostname': sshconfig['hostname'], 'port': int(sshconfig['port']), 'user': sshconfig['user'], 'idfile': idfile, } except subprocess.CalledProcessError as e: raise FDroidBuildVmException("Error getting ssh config") from e class LibvirtBuildVm(FDroidBuildVm): def __init__(self, srvdir): super().__init__(srvdir, 'libvirt') import libvirt try: self.conn = libvirt.open('qemu:///system') except libvirt.libvirtError as e: raise FDroidBuildVmException('could not connect to libvirtd: %s' % (e)) from e def destroy(self): super().destroy() # resorting to virsh instead of libvirt python bindings, because # this is way more easy and therefore fault tolerant. # (eg. lookupByName only works on running VMs) try: _check_call(('virsh', '-c', 'qemu:///system', 'destroy', self.srvname)) except subprocess.CalledProcessError as e: logging.info("could not force libvirt domain '%s' off: %s", self.srvname, e) try: # libvirt python bindings do not support all flags required # for undefining domains correctly. _check_call(('virsh', '-c', 'qemu:///system', 'undefine', self.srvname, '--nvram', '--managed-save', '--remove-all-storage', '--snapshots-metadata')) except subprocess.CalledProcessError as e: logging.info("could not undefine libvirt domain '%s': %s", self.srvname, e) def box_add(self, boxname, boxfile, force=True): boximg = '%s_vagrant_box_image_0.img' % (boxname) if force: try: _check_call(['virsh', '-c', 'qemu:///system', 'vol-delete', '--pool', 'default', boximg]) logging.debug("removed old box image '%s'" "from libvirt storeage pool", boximg) except subprocess.CalledProcessError as e: logging.debug("tried removing old box image '%s'," "file was not present in first place", boximg, exc_info=e) super().box_add(boxname, boxfile, force) def box_remove(self, boxname): super().box_remove(boxname) try: _check_call(['virsh', '-c', 'qemu:///system', 'vol-delete', '--pool', 'default', '%s_vagrant_box_image_0.img' % (boxname)]) except subprocess.CalledProcessError as e: logging.debug("tried removing '%s', file was not present in first place", boxname, exc_info=e) class VirtualboxBuildVm(FDroidBuildVm): def __init__(self, srvdir): super().__init__(srvdir, 'virtualbox') ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2281864 fdroidserver-2.4.0/fdroidserver.egg-info/0000755000175000017500000000000014770510164017114 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901363.0 fdroidserver-2.4.0/fdroidserver.egg-info/PKG-INFO0000644000175000017500000001371414770510163020216 0ustar00hanshansMetadata-Version: 2.1 Name: fdroidserver Version: 2.4.0 Summary: F-Droid Server Tools Home-page: https://f-droid.org Author: The F-Droid Project Author-email: team@f-droid.org License: AGPL-3.0 Classifier: Development Status :: 5 - Production/Stable Classifier: Intended Audience :: Developers Classifier: Intended Audience :: Information Technology Classifier: Intended Audience :: System Administrators Classifier: Intended Audience :: Telecommunications Industry Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+) Classifier: Operating System :: POSIX Classifier: Operating System :: MacOS :: MacOS X Classifier: Operating System :: Unix Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 Classifier: Programming Language :: Python :: 3 :: Only Classifier: Topic :: Utilities Requires-Python: >=3.9 Description-Content-Type: text/markdown Provides-Extra: docs Provides-Extra: optional Provides-Extra: test License-File: LICENSE

# F-Droid Server ### Tools for maintaining an F-Droid repository system.
--- ## What is F-Droid Server? _fdroidserver_ is a suite of tools to publish and work with collections of Android apps (APK files) and other kinds of packages. It is used to maintain the [f-droid.org application repository](https://f-droid.org/packages). These same tools can be used to create additional or alternative repositories for publishing, or to assist in creating, testing and submitting metadata to the f-droid.org repository, also known as [_fdroiddata_](https://gitlab.com/fdroid/fdroiddata). For documentation, please see . In the beginning, _fdroidserver_ was the complete server-side setup that ran f-droid.org. Since then, the website and other parts have been split out into their own projects. The name for this suite of tooling has stayed _fdroidserver_ even though it no longer contains any proper server component. ## Installing There are many ways to install _fdroidserver_, including using a range of package managers. All of the options are documented on the website: https://f-droid.org/docs/Installing_the_Server_and_Repo_Tools ## Releases The production setup of _fdroidserver_ for f-droid.org is run directly from the _master_ branch. This is put into production on an schedule (currently weekly). So development and testing happens in the branches. We track branches using merge requests. Therefore, there are many WIP and long-lived merge requests. There are also stable releases of _fdroidserver_. This is mostly intended for running custom repositories, where the build process is separate. It can also be useful as a simple way to get started contributing packages to _fdroiddata_, since the stable releases are available in package managers. ## Tests To run the full test suite: tests/run-tests To run the tests for individual Python modules, see the `tests/test_*.py` files, e.g.: python -m unittest tests/test_metadata.py It is also possible to run individual tests: python -m unittest tests.test_metadata.MetadataTest.test_rewrite_yaml_special_build_params There is a growing test suite that has good coverage on a number of key parts of this code base. It does not yet cover all the code, and there are some parts where the technical debt makes it difficult to write unit tests. New tests should be standard Python _unittest_ test cases. Whenever possible, the old tests written in _bash_ in _tests/run-tests_ should be ported to Python. This test suite has built over time a bit haphazardly, so it is not as clean, organized, or complete as it could be. We welcome contributions. The goal is to move towards standard Python testing patterns and to expand the unit test coverage. Before rearchitecting any parts of it, be sure to [contact us](https://f-droid.org/about) to discuss the changes beforehand. ### Additional tests for different linux distributions These tests are also run on various configurations through GitLab CI. This is only enabled for `master@fdroid/fdroidserver` because it takes longer to complete than the regular CI tests. Most of the time you won't need to worry about them, but sometimes it might make sense to also run them for your merge request. In that case you need to remove [these lines from .gitlab-ci.yml](https://gitlab.com/fdroid/fdroidserver/-/blob/0124b9dde99f9cab19c034cbc7d8cc6005a99b48/.gitlab-ci.yml#L90-91) and push this to a new branch of your fork. Alternatively [run them locally](https://docs.gitlab.com/runner/commands/README.html#gitlab-runner-exec) like this: `gitlab-runner exec docker ubuntu_lts` ## Documentation The API documentation based on the docstrings gets automatically published [here](https://fdroid.gitlab.io/fdroidserver) on every commit on the `master` branch. It can be built locally via ```bash pip install -e .[docs] cd docs sphinx-apidoc -o ./source ../fdroidserver -M -e sphinx-autogen -o generated source/*.rst make html ``` To additionally lint the code call ```bash pydocstyle fdroidserver --count ``` When writing docstrings you should follow the [numpy style guide](https://numpydoc.readthedocs.io/en/latest/format.html). ## Translation Everything can be translated. See [Translation and Localization](https://f-droid.org/docs/Translation_and_Localization) for more info.
[![](https://hosted.weblate.org/widgets/f-droid/-/287x66-white.png)](https://hosted.weblate.org/engage/f-droid)
View translation status for all languages. [![](https://hosted.weblate.org/widgets/f-droid/-/fdroidserver/multi-auto.svg)](https://hosted.weblate.org/engage/f-droid/?utm_source=widget)
././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901364.0 fdroidserver-2.4.0/fdroidserver.egg-info/SOURCES.txt0000644000175000017500000016556714770510164021024 0ustar00hanshans.bandit .editorconfig .gitignore .gitlab-ci.yml .mailmap .safety-policy.yml .weblate .yamllint CHANGELOG.md CONTRIBUTING.md LICENSE MANIFEST.in README.md fdroid gradlew-fdroid jenkins-build-all jenkins-setup-build-environment jenkins-test makebuildserver pyproject.toml setup.cfg setup.py .vscode/extensions.json .vscode/settings.json buildserver/.gitignore buildserver/Dockerfile buildserver/Vagrantfile buildserver/config.buildserver.yml buildserver/provision-android-ndk buildserver/provision-android-sdk buildserver/provision-apt-get-install buildserver/provision-apt-proxy buildserver/provision-buildserverid buildserver/provision-disable-analytics buildserver/provision-gradle buildserver/setup-env-vars completion/bash-completion dev/fdroid_scan-binary.py docs/Makefile docs/make.bat docs/source/conf.py docs/source/index.rst examples/Vagrantfile.yaml examples/config.yml examples/fdroid_clean_repos.py examples/fdroid_export_keystore_to_nitrokey.py examples/fdroid_exportkeystore.py examples/fdroid_extract_repo_pubkey.py examples/fdroid_fetchsrclibs.py examples/fdroid_nitrokeyimport.py examples/opensc-fdroid.cfg examples/public-read-only-s3-bucket-policy.json examples/template.yml fdroidserver/__init__.py fdroidserver/__main__.py fdroidserver/_yaml.py fdroidserver/apksigcopier.py fdroidserver/btlog.py fdroidserver/build.py fdroidserver/checkupdates.py fdroidserver/common.py fdroidserver/deploy.py fdroidserver/exception.py fdroidserver/github.py fdroidserver/gpgsign.py fdroidserver/import_subcommand.py fdroidserver/index.py fdroidserver/init.py fdroidserver/install.py fdroidserver/lint.py fdroidserver/looseversion.py fdroidserver/metadata.py fdroidserver/mirror.py fdroidserver/net.py fdroidserver/nightly.py fdroidserver/publish.py fdroidserver/readmeta.py fdroidserver/rewritemeta.py fdroidserver/scanner.py fdroidserver/signatures.py fdroidserver/signindex.py fdroidserver/tail.py fdroidserver/update.py fdroidserver/verify.py fdroidserver/vmtools.py fdroidserver.egg-info/PKG-INFO fdroidserver.egg-info/SOURCES.txt fdroidserver.egg-info/dependency_links.txt fdroidserver.egg-info/entry_points.txt fdroidserver.egg-info/requires.txt fdroidserver.egg-info/top_level.txt fdroidserver/asynchronousfilereader/__init__.py hooks/install-hooks.sh hooks/pre-commit locale/Makefile locale/fdroidserver.pot locale/pick-complete-translations.py locale/ar/LC_MESSAGES/fdroidserver.po locale/az/LC_MESSAGES/fdroidserver.po locale/be/LC_MESSAGES/fdroidserver.po locale/bg/LC_MESSAGES/fdroidserver.po locale/bn/LC_MESSAGES/fdroidserver.po locale/bo/LC_MESSAGES/fdroidserver.po locale/ca/LC_MESSAGES/fdroidserver.po locale/cs/LC_MESSAGES/fdroidserver.po locale/cy/LC_MESSAGES/fdroidserver.po locale/de/LC_MESSAGES/fdroidserver.po locale/el/LC_MESSAGES/fdroidserver.po locale/es/LC_MESSAGES/fdroidserver.po locale/es_AR/LC_MESSAGES/fdroidserver.po locale/es_MX/LC_MESSAGES/fdroidserver.po locale/eu/LC_MESSAGES/fdroidserver.po locale/fa/LC_MESSAGES/fdroidserver.po locale/fi/LC_MESSAGES/fdroidserver.po locale/fr/LC_MESSAGES/fdroidserver.po locale/fy/LC_MESSAGES/fdroidserver.po locale/ga/LC_MESSAGES/fdroidserver.po locale/he/LC_MESSAGES/fdroidserver.po locale/hi/LC_MESSAGES/fdroidserver.po locale/hu/LC_MESSAGES/fdroidserver.po locale/id/LC_MESSAGES/fdroidserver.po locale/it/LC_MESSAGES/fdroidserver.po locale/ja/LC_MESSAGES/fdroidserver.po locale/kab/LC_MESSAGES/fdroidserver.po locale/ko/LC_MESSAGES/fdroidserver.po locale/lv/LC_MESSAGES/fdroidserver.po locale/ml/LC_MESSAGES/fdroidserver.po locale/nb_NO/LC_MESSAGES/fdroidserver.po locale/nl/LC_MESSAGES/fdroidserver.po locale/nn/LC_MESSAGES/fdroidserver.po locale/pa/LC_MESSAGES/fdroidserver.po locale/pl/LC_MESSAGES/fdroidserver.po locale/pt/LC_MESSAGES/fdroidserver.po locale/pt_BR/LC_MESSAGES/fdroidserver.po locale/pt_PT/LC_MESSAGES/fdroidserver.po locale/ro/LC_MESSAGES/fdroidserver.po locale/ru/LC_MESSAGES/fdroidserver.po locale/sk/LC_MESSAGES/fdroidserver.po locale/sq/LC_MESSAGES/fdroidserver.po locale/sr/LC_MESSAGES/fdroidserver.po locale/sv/LC_MESSAGES/fdroidserver.po locale/sw/LC_MESSAGES/fdroidserver.po locale/ta/LC_MESSAGES/fdroidserver.po locale/tr/LC_MESSAGES/fdroidserver.po locale/tzm/LC_MESSAGES/fdroidserver.po locale/ug/LC_MESSAGES/fdroidserver.po locale/uk/LC_MESSAGES/fdroidserver.po locale/zh_Hans/LC_MESSAGES/fdroidserver.po locale/zh_Hant/LC_MESSAGES/fdroidserver.po tests/IsMD5Disabled.java tests/Norway_bouvet_europe_2.obf.zip tests/SANAPPSI.RSA tests/SANAPPSI.SF tests/SpeedoMeterApp.main_1.apk tests/SystemWebView-repack.apk tests/__init__.py tests/aosp_testkey_debug.keystore tests/apk.embedded_1.apk tests/bad-unicode-πÇÇ现代通用字-български-عربي1.apk tests/check-fdroid-apk tests/com.fake.IpaApp_1000000000001.ipa tests/config.yml tests/corrupt-featureGraphic.png tests/dummy-keystore.jks tests/dump_internal_metadata_format.py tests/funding-usernames.yaml tests/get-country-region-data.py tests/gradle-maven-blocks.yaml tests/gradle-release-checksums.py tests/issue-1128-min-sdk-30-poc.apk tests/issue-1128-poc1.apk tests/issue-1128-poc2.apk tests/issue-1128-poc3a.apk tests/issue-1128-poc3b.apk tests/janus.apk tests/key-tricks.py tests/keystore.jks tests/minimal_targetsdk_30_unsigned.apk tests/no_targetsdk_minsdk1_unsigned.apk tests/no_targetsdk_minsdk30_unsigned.apk tests/openssl-version-check-test.py tests/org.bitbucket.tickytacky.mirrormirror_1.apk tests/org.bitbucket.tickytacky.mirrormirror_2.apk tests/org.bitbucket.tickytacky.mirrormirror_3.apk tests/org.bitbucket.tickytacky.mirrormirror_4.apk tests/org.dyndns.fules.ck_20.apk tests/org.fdroid.fdroid_1019051.apk.json tests/org.sajeg.fallingblocks_3.apk tests/refresh-SUSS_DEFAULT.py tests/run-tests tests/shared_test_code.py tests/test_api.py tests/test_build.py tests/test_checkupdates.py tests/test_common.py tests/test_deploy.py tests/test_exception.py tests/test_github.py tests/test_gpgsign.py tests/test_gradlew-fdroid tests/test_import_subcommand.py tests/test_index.py tests/test_init.py tests/test_install.py tests/test_integration.py tests/test_lint.py tests/test_main.py tests/test_metadata.py tests/test_net.py tests/test_nightly.py tests/test_publish.py tests/test_rewritemeta.py tests/test_scanner.py tests/test_signatures.py tests/test_signindex.py tests/test_update.py tests/test_vcs.py tests/test_verify.py tests/urzip-badcert.apk tests/urzip-badsig.apk tests/urzip-release-unsigned.apk tests/urzip-release.apk tests/urzip.apk tests/v2.only.sig_2.apk tests/build-tools/generate.sh tests/build-tools/17.0.0/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/17.0.0/aapt-output-com.politedroid_3.txt tests/build-tools/17.0.0/aapt-output-com.politedroid_4.txt tests/build-tools/17.0.0/aapt-output-com.politedroid_5.txt tests/build-tools/17.0.0/aapt-output-com.politedroid_6.txt tests/build-tools/17.0.0/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/17.0.0/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/17.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/17.0.0/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/17.0.0/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/17.0.0/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/17.0.0/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/17.0.0/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/17.0.0/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/17.0.0/aapt-output-souch.smsbypass_9.txt tests/build-tools/18.1.1/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/18.1.1/aapt-output-com.politedroid_3.txt tests/build-tools/18.1.1/aapt-output-com.politedroid_4.txt tests/build-tools/18.1.1/aapt-output-com.politedroid_5.txt tests/build-tools/18.1.1/aapt-output-com.politedroid_6.txt tests/build-tools/18.1.1/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/18.1.1/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/18.1.1/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/18.1.1/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/18.1.1/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/18.1.1/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/18.1.1/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/18.1.1/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/18.1.1/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/18.1.1/aapt-output-souch.smsbypass_9.txt tests/build-tools/19.0.0/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/19.0.0/aapt-output-com.politedroid_3.txt tests/build-tools/19.0.0/aapt-output-com.politedroid_4.txt tests/build-tools/19.0.0/aapt-output-com.politedroid_5.txt tests/build-tools/19.0.0/aapt-output-com.politedroid_6.txt tests/build-tools/19.0.0/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/19.0.0/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/19.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/19.0.0/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/19.0.0/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/19.0.0/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/19.0.0/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/19.0.0/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/19.0.0/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/19.0.0/aapt-output-souch.smsbypass_9.txt tests/build-tools/19.1.0/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/19.1.0/aapt-output-com.politedroid_3.txt tests/build-tools/19.1.0/aapt-output-com.politedroid_4.txt tests/build-tools/19.1.0/aapt-output-com.politedroid_5.txt tests/build-tools/19.1.0/aapt-output-com.politedroid_6.txt tests/build-tools/19.1.0/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/19.1.0/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/19.1.0/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/19.1.0/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/19.1.0/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/19.1.0/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/19.1.0/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/19.1.0/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/19.1.0/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/19.1.0/aapt-output-souch.smsbypass_9.txt tests/build-tools/20.0.0/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/20.0.0/aapt-output-com.politedroid_3.txt tests/build-tools/20.0.0/aapt-output-com.politedroid_4.txt tests/build-tools/20.0.0/aapt-output-com.politedroid_5.txt tests/build-tools/20.0.0/aapt-output-com.politedroid_6.txt tests/build-tools/20.0.0/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/20.0.0/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/20.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/20.0.0/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/20.0.0/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/20.0.0/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/20.0.0/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/20.0.0/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/20.0.0/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/20.0.0/aapt-output-souch.smsbypass_9.txt tests/build-tools/21.1.1/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/21.1.1/aapt-output-com.politedroid_3.txt tests/build-tools/21.1.1/aapt-output-com.politedroid_4.txt tests/build-tools/21.1.1/aapt-output-com.politedroid_5.txt tests/build-tools/21.1.1/aapt-output-com.politedroid_6.txt tests/build-tools/21.1.1/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/21.1.1/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/21.1.1/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/21.1.1/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/21.1.1/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/21.1.1/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/21.1.1/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/21.1.1/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/21.1.1/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/21.1.1/aapt-output-souch.smsbypass_9.txt tests/build-tools/21.1.2/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/21.1.2/aapt-output-com.politedroid_3.txt tests/build-tools/21.1.2/aapt-output-com.politedroid_4.txt tests/build-tools/21.1.2/aapt-output-com.politedroid_5.txt tests/build-tools/21.1.2/aapt-output-com.politedroid_6.txt tests/build-tools/21.1.2/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/21.1.2/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/21.1.2/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/21.1.2/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/21.1.2/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/21.1.2/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/21.1.2/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/21.1.2/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/21.1.2/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/21.1.2/aapt-output-souch.smsbypass_9.txt tests/build-tools/22.0.0/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/22.0.0/aapt-output-com.politedroid_3.txt tests/build-tools/22.0.0/aapt-output-com.politedroid_4.txt tests/build-tools/22.0.0/aapt-output-com.politedroid_5.txt tests/build-tools/22.0.0/aapt-output-com.politedroid_6.txt tests/build-tools/22.0.0/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/22.0.0/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/22.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/22.0.0/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/22.0.0/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/22.0.0/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/22.0.0/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/22.0.0/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/22.0.0/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/22.0.0/aapt-output-souch.smsbypass_9.txt tests/build-tools/22.0.1/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/22.0.1/aapt-output-com.politedroid_3.txt tests/build-tools/22.0.1/aapt-output-com.politedroid_4.txt tests/build-tools/22.0.1/aapt-output-com.politedroid_5.txt tests/build-tools/22.0.1/aapt-output-com.politedroid_6.txt tests/build-tools/22.0.1/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/22.0.1/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/22.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/22.0.1/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/22.0.1/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/22.0.1/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/22.0.1/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/22.0.1/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/22.0.1/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/22.0.1/aapt-output-souch.smsbypass_9.txt tests/build-tools/23.0.0/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/23.0.0/aapt-output-com.politedroid_3.txt tests/build-tools/23.0.0/aapt-output-com.politedroid_4.txt tests/build-tools/23.0.0/aapt-output-com.politedroid_5.txt tests/build-tools/23.0.0/aapt-output-com.politedroid_6.txt tests/build-tools/23.0.0/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/23.0.0/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/23.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/23.0.0/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/23.0.0/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/23.0.0/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/23.0.0/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/23.0.0/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/23.0.0/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/23.0.0/aapt-output-souch.smsbypass_9.txt tests/build-tools/23.0.1/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/23.0.1/aapt-output-com.politedroid_3.txt tests/build-tools/23.0.1/aapt-output-com.politedroid_4.txt tests/build-tools/23.0.1/aapt-output-com.politedroid_5.txt tests/build-tools/23.0.1/aapt-output-com.politedroid_6.txt tests/build-tools/23.0.1/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/23.0.1/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/23.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/23.0.1/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/23.0.1/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/23.0.1/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/23.0.1/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/23.0.1/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/23.0.1/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/23.0.1/aapt-output-souch.smsbypass_9.txt tests/build-tools/23.0.2/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/23.0.2/aapt-output-com.politedroid_3.txt tests/build-tools/23.0.2/aapt-output-com.politedroid_4.txt tests/build-tools/23.0.2/aapt-output-com.politedroid_5.txt tests/build-tools/23.0.2/aapt-output-com.politedroid_6.txt tests/build-tools/23.0.2/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/23.0.2/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/23.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/23.0.2/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/23.0.2/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/23.0.2/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/23.0.2/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/23.0.2/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/23.0.2/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/23.0.2/aapt-output-souch.smsbypass_9.txt tests/build-tools/23.0.3/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/23.0.3/aapt-output-com.politedroid_3.txt tests/build-tools/23.0.3/aapt-output-com.politedroid_4.txt tests/build-tools/23.0.3/aapt-output-com.politedroid_5.txt tests/build-tools/23.0.3/aapt-output-com.politedroid_6.txt tests/build-tools/23.0.3/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/23.0.3/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/23.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/23.0.3/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/23.0.3/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/23.0.3/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/23.0.3/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/23.0.3/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/23.0.3/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/23.0.3/aapt-output-souch.smsbypass_9.txt tests/build-tools/24.0.0/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/24.0.0/aapt-output-com.politedroid_3.txt tests/build-tools/24.0.0/aapt-output-com.politedroid_4.txt tests/build-tools/24.0.0/aapt-output-com.politedroid_5.txt tests/build-tools/24.0.0/aapt-output-com.politedroid_6.txt tests/build-tools/24.0.0/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/24.0.0/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/24.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/24.0.0/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/24.0.0/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/24.0.0/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/24.0.0/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/24.0.0/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/24.0.0/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/24.0.0/aapt-output-souch.smsbypass_9.txt tests/build-tools/24.0.1/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/24.0.1/aapt-output-com.politedroid_3.txt tests/build-tools/24.0.1/aapt-output-com.politedroid_4.txt tests/build-tools/24.0.1/aapt-output-com.politedroid_5.txt tests/build-tools/24.0.1/aapt-output-com.politedroid_6.txt tests/build-tools/24.0.1/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/24.0.1/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/24.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/24.0.1/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/24.0.1/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/24.0.1/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/24.0.1/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/24.0.1/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/24.0.1/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/24.0.1/aapt-output-souch.smsbypass_9.txt tests/build-tools/24.0.2/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/24.0.2/aapt-output-com.politedroid_3.txt tests/build-tools/24.0.2/aapt-output-com.politedroid_4.txt tests/build-tools/24.0.2/aapt-output-com.politedroid_5.txt tests/build-tools/24.0.2/aapt-output-com.politedroid_6.txt tests/build-tools/24.0.2/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/24.0.2/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/24.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/24.0.2/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/24.0.2/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/24.0.2/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/24.0.2/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/24.0.2/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/24.0.2/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/24.0.2/aapt-output-souch.smsbypass_9.txt tests/build-tools/24.0.3/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/24.0.3/aapt-output-com.politedroid_3.txt tests/build-tools/24.0.3/aapt-output-com.politedroid_4.txt tests/build-tools/24.0.3/aapt-output-com.politedroid_5.txt tests/build-tools/24.0.3/aapt-output-com.politedroid_6.txt tests/build-tools/24.0.3/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/24.0.3/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/24.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/24.0.3/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/24.0.3/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/24.0.3/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/24.0.3/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/24.0.3/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/24.0.3/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/24.0.3/aapt-output-souch.smsbypass_9.txt tests/build-tools/25.0.0/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/25.0.0/aapt-output-com.politedroid_3.txt tests/build-tools/25.0.0/aapt-output-com.politedroid_4.txt tests/build-tools/25.0.0/aapt-output-com.politedroid_5.txt tests/build-tools/25.0.0/aapt-output-com.politedroid_6.txt tests/build-tools/25.0.0/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/25.0.0/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/25.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/25.0.0/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/25.0.0/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/25.0.0/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/25.0.0/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/25.0.0/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/25.0.0/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/25.0.0/aapt-output-souch.smsbypass_9.txt tests/build-tools/25.0.1/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/25.0.1/aapt-output-com.politedroid_3.txt tests/build-tools/25.0.1/aapt-output-com.politedroid_4.txt tests/build-tools/25.0.1/aapt-output-com.politedroid_5.txt tests/build-tools/25.0.1/aapt-output-com.politedroid_6.txt tests/build-tools/25.0.1/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/25.0.1/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/25.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/25.0.1/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/25.0.1/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/25.0.1/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/25.0.1/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/25.0.1/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/25.0.1/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/25.0.1/aapt-output-souch.smsbypass_9.txt tests/build-tools/25.0.2/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/25.0.2/aapt-output-com.politedroid_3.txt tests/build-tools/25.0.2/aapt-output-com.politedroid_4.txt tests/build-tools/25.0.2/aapt-output-com.politedroid_5.txt tests/build-tools/25.0.2/aapt-output-com.politedroid_6.txt tests/build-tools/25.0.2/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/25.0.2/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/25.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/25.0.2/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/25.0.2/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/25.0.2/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/25.0.2/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/25.0.2/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/25.0.2/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/25.0.2/aapt-output-souch.smsbypass_9.txt tests/build-tools/25.0.3/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/25.0.3/aapt-output-com.politedroid_3.txt tests/build-tools/25.0.3/aapt-output-com.politedroid_4.txt tests/build-tools/25.0.3/aapt-output-com.politedroid_5.txt tests/build-tools/25.0.3/aapt-output-com.politedroid_6.txt tests/build-tools/25.0.3/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/25.0.3/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/25.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/25.0.3/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/25.0.3/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/25.0.3/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/25.0.3/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/25.0.3/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/25.0.3/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/25.0.3/aapt-output-souch.smsbypass_9.txt tests/build-tools/26.0.0/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/26.0.0/aapt-output-com.politedroid_3.txt tests/build-tools/26.0.0/aapt-output-com.politedroid_4.txt tests/build-tools/26.0.0/aapt-output-com.politedroid_5.txt tests/build-tools/26.0.0/aapt-output-com.politedroid_6.txt tests/build-tools/26.0.0/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/26.0.0/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/26.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/26.0.0/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/26.0.0/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/26.0.0/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/26.0.0/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/26.0.0/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/26.0.0/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/26.0.0/aapt-output-souch.smsbypass_9.txt tests/build-tools/26.0.1/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/26.0.1/aapt-output-com.politedroid_3.txt tests/build-tools/26.0.1/aapt-output-com.politedroid_4.txt tests/build-tools/26.0.1/aapt-output-com.politedroid_5.txt tests/build-tools/26.0.1/aapt-output-com.politedroid_6.txt tests/build-tools/26.0.1/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/26.0.1/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/26.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/26.0.1/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/26.0.1/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/26.0.1/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/26.0.1/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/26.0.1/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/26.0.1/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/26.0.1/aapt-output-souch.smsbypass_9.txt tests/build-tools/26.0.2/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/26.0.2/aapt-output-com.politedroid_3.txt tests/build-tools/26.0.2/aapt-output-com.politedroid_4.txt tests/build-tools/26.0.2/aapt-output-com.politedroid_5.txt tests/build-tools/26.0.2/aapt-output-com.politedroid_6.txt tests/build-tools/26.0.2/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/26.0.2/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/26.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/26.0.2/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/26.0.2/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/26.0.2/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/26.0.2/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/26.0.2/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/26.0.2/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/26.0.2/aapt-output-souch.smsbypass_9.txt tests/build-tools/26.0.3/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/26.0.3/aapt-output-com.politedroid_3.txt tests/build-tools/26.0.3/aapt-output-com.politedroid_4.txt tests/build-tools/26.0.3/aapt-output-com.politedroid_5.txt tests/build-tools/26.0.3/aapt-output-com.politedroid_6.txt tests/build-tools/26.0.3/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/26.0.3/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/26.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/26.0.3/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/26.0.3/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/26.0.3/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/26.0.3/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/26.0.3/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/26.0.3/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/26.0.3/aapt-output-souch.smsbypass_9.txt tests/build-tools/27.0.0/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/27.0.0/aapt-output-com.politedroid_3.txt tests/build-tools/27.0.0/aapt-output-com.politedroid_4.txt tests/build-tools/27.0.0/aapt-output-com.politedroid_5.txt tests/build-tools/27.0.0/aapt-output-com.politedroid_6.txt tests/build-tools/27.0.0/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/27.0.0/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/27.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/27.0.0/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/27.0.0/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/27.0.0/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/27.0.0/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/27.0.0/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/27.0.0/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/27.0.0/aapt-output-souch.smsbypass_9.txt tests/build-tools/27.0.1/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/27.0.1/aapt-output-com.politedroid_3.txt tests/build-tools/27.0.1/aapt-output-com.politedroid_4.txt tests/build-tools/27.0.1/aapt-output-com.politedroid_5.txt tests/build-tools/27.0.1/aapt-output-com.politedroid_6.txt tests/build-tools/27.0.1/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/27.0.1/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/27.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/27.0.1/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/27.0.1/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/27.0.1/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/27.0.1/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/27.0.1/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/27.0.1/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/27.0.1/aapt-output-souch.smsbypass_9.txt tests/build-tools/27.0.2/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/27.0.2/aapt-output-com.politedroid_3.txt tests/build-tools/27.0.2/aapt-output-com.politedroid_4.txt tests/build-tools/27.0.2/aapt-output-com.politedroid_5.txt tests/build-tools/27.0.2/aapt-output-com.politedroid_6.txt tests/build-tools/27.0.2/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/27.0.2/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/27.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/27.0.2/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/27.0.2/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/27.0.2/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/27.0.2/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/27.0.2/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/27.0.2/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/27.0.2/aapt-output-souch.smsbypass_9.txt tests/build-tools/27.0.3/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/27.0.3/aapt-output-com.politedroid_3.txt tests/build-tools/27.0.3/aapt-output-com.politedroid_4.txt tests/build-tools/27.0.3/aapt-output-com.politedroid_5.txt tests/build-tools/27.0.3/aapt-output-com.politedroid_6.txt tests/build-tools/27.0.3/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/27.0.3/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/27.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/27.0.3/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/27.0.3/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/27.0.3/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/27.0.3/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/27.0.3/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/27.0.3/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/27.0.3/aapt-output-souch.smsbypass_9.txt tests/build-tools/28.0.0/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/28.0.0/aapt-output-com.politedroid_3.txt tests/build-tools/28.0.0/aapt-output-com.politedroid_4.txt tests/build-tools/28.0.0/aapt-output-com.politedroid_5.txt tests/build-tools/28.0.0/aapt-output-com.politedroid_6.txt tests/build-tools/28.0.0/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/28.0.0/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/28.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/28.0.0/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/28.0.0/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/28.0.0/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/28.0.0/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/28.0.0/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/28.0.0/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/28.0.0/aapt-output-souch.smsbypass_9.txt tests/build-tools/28.0.1/aapt-output-com.moez.QKSMS_182.txt tests/build-tools/28.0.1/aapt-output-com.politedroid_3.txt tests/build-tools/28.0.1/aapt-output-com.politedroid_4.txt tests/build-tools/28.0.1/aapt-output-com.politedroid_5.txt tests/build-tools/28.0.1/aapt-output-com.politedroid_6.txt tests/build-tools/28.0.1/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/28.0.1/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/28.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/28.0.1/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/28.0.1/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/28.0.1/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/28.0.1/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/28.0.1/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/28.0.1/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/28.0.1/aapt-output-souch.smsbypass_9.txt tests/build-tools/28.0.2/aapt-output-com.politedroid_3.txt tests/build-tools/28.0.2/aapt-output-com.politedroid_4.txt tests/build-tools/28.0.2/aapt-output-com.politedroid_5.txt tests/build-tools/28.0.2/aapt-output-com.politedroid_6.txt tests/build-tools/28.0.2/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/28.0.2/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/28.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/28.0.2/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/28.0.2/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/28.0.2/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/28.0.2/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/28.0.2/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/28.0.2/aapt-output-org.droidtr.keyboard_34.txt tests/build-tools/28.0.2/aapt-output-souch.smsbypass_9.txt tests/build-tools/28.0.3/aapt-output-com.example.test.helloworld_1.txt tests/build-tools/28.0.3/aapt-output-com.politedroid_3.txt tests/build-tools/28.0.3/aapt-output-com.politedroid_4.txt tests/build-tools/28.0.3/aapt-output-com.politedroid_5.txt tests/build-tools/28.0.3/aapt-output-com.politedroid_6.txt tests/build-tools/28.0.3/aapt-output-duplicate.permisssions_9999999.txt tests/build-tools/28.0.3/aapt-output-info.guardianproject.urzip_100.txt tests/build-tools/28.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt tests/build-tools/28.0.3/aapt-output-no.min.target.sdk_987.txt tests/build-tools/28.0.3/aapt-output-obb.main.oldversion_1444412523.txt tests/build-tools/28.0.3/aapt-output-obb.main.twoversions_1101613.txt tests/build-tools/28.0.3/aapt-output-obb.main.twoversions_1101615.txt tests/build-tools/28.0.3/aapt-output-obb.main.twoversions_1101617.txt tests/build-tools/28.0.3/aapt-output-obb.mainpatch.current_1619.txt tests/build-tools/28.0.3/aapt-output-souch.smsbypass_9.txt tests/build/info.guardianproject.urzip/.fdroid.yml tests/builder/Vagrantfile tests/config/antiFeatures.yml tests/config/categories.yml tests/config/ic_antifeature_ads.xml tests/config/ic_antifeature_disabledalgorithm.xml tests/config/ic_antifeature_knownvuln.xml tests/config/ic_antifeature_nonfreeadd.xml tests/config/ic_antifeature_nonfreeassets.xml tests/config/ic_antifeature_nonfreedep.xml tests/config/ic_antifeature_nonfreenet.xml tests/config/ic_antifeature_nosourcesince.xml tests/config/ic_antifeature_nsfw.xml tests/config/ic_antifeature_tracking.xml tests/config/ic_antifeature_upstreamnonfree.xml tests/config/de/antiFeatures.yml tests/config/fa/antiFeatures.yml tests/config/ro/antiFeatures.yml tests/config/zh-rCN/antiFeatures.yml tests/extra/manual-vmtools-test.py tests/get_android_tools_versions/android-ndk-r10e/RELEASE.TXT tests/get_android_tools_versions/android-sdk/ndk-bundle/package.xml tests/get_android_tools_versions/android-sdk/ndk-bundle/source.properties tests/get_android_tools_versions/android-sdk/ndk/11.2.2725575/source.properties tests/get_android_tools_versions/android-sdk/ndk/17.2.4988734/source.properties tests/get_android_tools_versions/android-sdk/ndk/21.3.6528147/source.properties tests/get_android_tools_versions/android-sdk/patcher/v4/source.properties tests/get_android_tools_versions/android-sdk/platforms/android-30/source.properties tests/get_android_tools_versions/android-sdk/skiaparser/1/source.properties tests/get_android_tools_versions/android-sdk/tools/source.properties tests/gnupghome/pubring.gpg tests/gnupghome/random_seed tests/gnupghome/secring.gpg tests/gnupghome/trustdb.gpg tests/metadata/app.with.special.build.params.yml tests/metadata/com.politedroid.yml tests/metadata/duplicate.permisssions.yml tests/metadata/fake.ota.update.yml tests/metadata/info.guardianproject.checkey.yml tests/metadata/info.guardianproject.urzip.yml tests/metadata/info.zwanenburg.caffeinetile.yml tests/metadata/no.min.target.sdk.yml tests/metadata/obb.main.oldversion.yml tests/metadata/obb.main.twoversions.yml tests/metadata/obb.mainpatch.current.yml tests/metadata/org.adaway.yml tests/metadata/org.fdroid.ci.test.app.yml tests/metadata/org.fdroid.fdroid.yml tests/metadata/org.maxsdkversion.yml tests/metadata/org.smssecure.smssecure.yml tests/metadata/org.videolan.vlc.yml tests/metadata/raw.template.yml tests/metadata/souch.smsbypass.yml tests/metadata-rewrite-yml/app.with.special.build.params.yml tests/metadata-rewrite-yml/fake.ota.update.yml tests/metadata-rewrite-yml/org.fdroid.fdroid.yml tests/metadata/apk/info.guardianproject.urzip.yaml tests/metadata/apk/org.dyndns.fules.ck.yaml tests/metadata/app.with.special.build.params/en-US/antifeatures/50_Ads.txt tests/metadata/app.with.special.build.params/en-US/antifeatures/50_Tracking.txt tests/metadata/app.with.special.build.params/en-US/antifeatures/Ads.txt tests/metadata/app.with.special.build.params/en-US/antifeatures/NoSourceSince.txt tests/metadata/app.with.special.build.params/zh-CN/antifeatures/49_Tracking.txt tests/metadata/app.with.special.build.params/zh-CN/antifeatures/50_Ads.txt tests/metadata/dump/app.with.special.build.params.yaml tests/metadata/dump/com.politedroid.yaml tests/metadata/dump/org.adaway.yaml tests/metadata/dump/org.smssecure.smssecure.yaml tests/metadata/dump/org.videolan.vlc.yaml tests/metadata/info.guardianproject.checkey/en-US/description.txt tests/metadata/info.guardianproject.checkey/en-US/name.txt tests/metadata/info.guardianproject.checkey/en-US/summary.txt tests/metadata/info.guardianproject.checkey/en-US/phoneScreenshots/checkey-phone.png tests/metadata/info.guardianproject.checkey/en-US/phoneScreenshots/checkey.png tests/metadata/info.guardianproject.checkey/ja-JP/name.txt tests/metadata/info.guardianproject.urzip/en-US/full_description.txt tests/metadata/info.guardianproject.urzip/en-US/short_description.txt tests/metadata/info.guardianproject.urzip/en-US/title.txt tests/metadata/info.guardianproject.urzip/en-US/video.txt tests/metadata/info.guardianproject.urzip/en-US/changelogs/100.txt tests/metadata/info.guardianproject.urzip/en-US/changelogs/default.txt tests/metadata/info.guardianproject.urzip/en-US/images/featureGraphic.png tests/metadata/info.guardianproject.urzip/en-US/images/icon.png tests/metadata/org.smssecure.smssecure/signatures/134/28969C09.RSA tests/metadata/org.smssecure.smssecure/signatures/134/28969C09.SF tests/metadata/org.smssecure.smssecure/signatures/134/MANIFEST.MF tests/metadata/org.smssecure.smssecure/signatures/135/28969C09.RSA tests/metadata/org.smssecure.smssecure/signatures/135/28969C09.SF tests/metadata/org.smssecure.smssecure/signatures/135/MANIFEST.MF tests/repo/com.example.test.helloworld_1.apk tests/repo/com.politedroid_3.apk tests/repo/com.politedroid_4.apk tests/repo/com.politedroid_5.apk tests/repo/com.politedroid_6.apk tests/repo/duplicate.permisssions_9999999.apk tests/repo/entry.json tests/repo/fake.ota.update_1234.zip tests/repo/index-v1.json tests/repo/index-v2.json tests/repo/index.xml tests/repo/info.zwanenburg.caffeinetile_4.apk tests/repo/main.1101613.obb.main.twoversions.obb tests/repo/main.1101615.obb.main.twoversions.obb tests/repo/main.1434483388.obb.main.oldversion.obb tests/repo/main.1619.obb.mainpatch.current.obb tests/repo/no.min.target.sdk_987.apk tests/repo/obb.main.oldversion_1444412523.apk tests/repo/obb.main.twoversions_1101613.apk tests/repo/obb.main.twoversions_1101615.apk tests/repo/obb.main.twoversions_1101617.apk tests/repo/obb.main.twoversions_1101617_src.tar.gz tests/repo/obb.mainpatch.current_1619.apk tests/repo/obb.mainpatch.current_1619_another-release-key.apk tests/repo/org.maxsdkversion_4.apk tests/repo/patch.1619.obb.mainpatch.current.obb tests/repo/souch.smsbypass_9.apk tests/repo/urzip-; Рахма́, [rɐxˈmanʲɪnəf] سيرجي_رخمانينوف 谢·.apk tests/repo/v1.v2.sig_1020.apk tests/repo/obb.mainpatch.current/en-US/featureGraphic.png tests/repo/obb.mainpatch.current/en-US/icon.png tests/repo/obb.mainpatch.current/en-US/phoneScreenshots/screenshot-main.png tests/repo/obb.mainpatch.current/en-US/sevenInchScreenshots/screenshot-tablet-main.png tests/repo/org.videolan.vlc/en-US/icon.png tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot10.png tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot12.png tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot15.png tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot18.png tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot20.png tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot22.png tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot4.png tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot7.png tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot9.png tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot0.png tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot1.png tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot11.png tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot13.png tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot14.png tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot16.png tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot17.png tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot19.png tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot2.png tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot21.png tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot23.png tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot3.png tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot5.png tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot6.png tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot8.png tests/signindex/guardianproject-v1.jar tests/signindex/guardianproject.jar tests/signindex/testy.jar tests/signindex/unsigned.jar tests/source-files/OtakuWorld/build.gradle tests/source-files/Zillode/syncthing-silk/build.gradle tests/source-files/at.bitfire.davdroid/build.gradle tests/source-files/catalog.test/build.gradle.kts tests/source-files/catalog.test/libs.versions.toml tests/source-files/catalog.test/settings.gradle.kts tests/source-files/catalog.test/app/build.gradle tests/source-files/catalog.test/buildSrc/build.gradle.kts tests/source-files/catalog.test/buildSrc/settings.gradle.kts tests/source-files/catalog.test/buildSrc2/build.gradle.kts tests/source-files/catalog.test/buildSrc2/settings.gradle.kts tests/source-files/catalog.test/core/build.gradle tests/source-files/catalog.test/gradle/libs.versions.toml tests/source-files/cn.wildfirechat.chat/build.gradle tests/source-files/cn.wildfirechat.chat/settings.gradle tests/source-files/cn.wildfirechat.chat/avenginekit/build.gradle tests/source-files/cn.wildfirechat.chat/chat/build.gradle tests/source-files/cn.wildfirechat.chat/client/build.gradle tests/source-files/cn.wildfirechat.chat/client/src/main/AndroidManifest.xml tests/source-files/cn.wildfirechat.chat/emojilibrary/build.gradle tests/source-files/cn.wildfirechat.chat/gradle/build_libraries.gradle tests/source-files/cn.wildfirechat.chat/imagepicker/build.gradle tests/source-files/cn.wildfirechat.chat/mars-core-release/build.gradle tests/source-files/cn.wildfirechat.chat/push/build.gradle tests/source-files/com.anpmech.launcher/build.gradle tests/source-files/com.anpmech.launcher/settings.gradle tests/source-files/com.anpmech.launcher/app/build.gradle tests/source-files/com.anpmech.launcher/app/src/main/AndroidManifest.xml tests/source-files/com.github.jameshnsears.quoteunquote/build.gradle tests/source-files/com.github.shadowsocks/core/build.gradle.kts tests/source-files/com.github.shadowsocks/mobile/build.gradle.kts tests/source-files/com.integreight.onesheeld/build.gradle tests/source-files/com.integreight.onesheeld/settings.gradle tests/source-files/com.integreight.onesheeld/gradle/wrapper/gradle-wrapper.properties tests/source-files/com.integreight.onesheeld/localeapi/build.gradle tests/source-files/com.integreight.onesheeld/localeapi/src/main/AndroidManifest.xml tests/source-files/com.integreight.onesheeld/oneSheeld/build.gradle tests/source-files/com.integreight.onesheeld/oneSheeld/src/main/AndroidManifest.xml tests/source-files/com.integreight.onesheeld/pagerIndicator/build.gradle tests/source-files/com.integreight.onesheeld/pagerIndicator/src/main/AndroidManifest.xml tests/source-files/com.integreight.onesheeld/pullToRefreshlibrary/build.gradle tests/source-files/com.integreight.onesheeld/pullToRefreshlibrary/src/main/AndroidManifest.xml tests/source-files/com.integreight.onesheeld/quickReturnHeader/build.gradle tests/source-files/com.integreight.onesheeld/quickReturnHeader/src/main/AndroidManifest.xml tests/source-files/com.jens.automation2/build.gradle tests/source-files/com.jens.automation2/app/build.gradle tests/source-files/com.kunzisoft.testcase/build.gradle tests/source-files/com.lolo.io.onelist/build.gradle.kts tests/source-files/com.lolo.io.onelist/settings.gradle tests/source-files/com.lolo.io.onelist/app/build.gradle.kts tests/source-files/com.lolo.io.onelist/gradle/libs.versions.toml tests/source-files/com.lolo.io.onelist/gradle/wrapper/gradle-wrapper.properties tests/source-files/com.nextcloud.client/build.gradle tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android/en-US/full_description.txt tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android/en-US/short_description.txt tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android/en-US/title.txt tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/android/en-US/full_description.txt tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/android/en-US/short_description.txt tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/android/en-US/title.txt tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/android/en-US/full_description.txt tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/android/en-US/short_description.txt tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/android/en-US/title.txt tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata/android/en-US/full_description.txt tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata/android/en-US/short_description.txt tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata/android/en-US/title.txt tests/source-files/com.seafile.seadroid2/app/build.gradle tests/source-files/com.ubergeek42.WeechatAndroid/app/build.gradle.kts tests/source-files/com.ubergeek42.WeechatAndroid/app/src/main/res/values/strings.xml tests/source-files/de.varengold.activeTAN/build.gradle tests/source-files/dev.patrickgold.florisboard/app/build.gradle.kts tests/source-files/eu.siacs.conversations/build.gradle tests/source-files/eu.siacs.conversations/metadata/en-US/name.txt tests/source-files/fdroid/fdroidclient/AndroidManifest.xml tests/source-files/fdroid/fdroidclient/build.gradle tests/source-files/firebase-allowlisted/build.gradle tests/source-files/firebase-allowlisted/app/build.gradle tests/source-files/firebase-suspect/build.gradle tests/source-files/firebase-suspect/app/build.gradle tests/source-files/info.guardianproject.ripple/build.gradle tests/source-files/lockfile.test/flutter/pubspec.lock tests/source-files/lockfile.test/flutter/pubspec.yaml tests/source-files/lockfile.test/flutter/.dart_tool/flutter_gen/pubspec.yaml tests/source-files/lockfile.test/javascript/package.json tests/source-files/lockfile.test/javascript/yarn.lock tests/source-files/lockfile.test/rust/subdir/Cargo.lock tests/source-files/lockfile.test/rust/subdir/Cargo.toml tests/source-files/lockfile.test/rust/subdir/subdir/subdir/Cargo.toml tests/source-files/lockfile.test/rust/subdir2/Cargo.toml tests/source-files/open-keychain/open-keychain/build.gradle tests/source-files/open-keychain/open-keychain/OpenKeychain/build.gradle tests/source-files/org.mozilla.rocket/app/build.gradle tests/source-files/org.noise_planet.noisecapture/settings.gradle tests/source-files/org.noise_planet.noisecapture/app/build.gradle tests/source-files/org.noise_planet.noisecapture/sosfilter/build.gradle tests/source-files/org.piepmeyer.gauguin/build.gradle.kts tests/source-files/org.piepmeyer.gauguin/libs.versions.toml tests/source-files/org.piepmeyer.gauguin/settings.gradle.kts tests/source-files/org.tasks/build.gradle tests/source-files/org.tasks/build.gradle.kts tests/source-files/org.tasks/settings.gradle.kts tests/source-files/org.tasks/app/build.gradle.kts tests/source-files/org.tasks/buildSrc/build.gradle.kts tests/source-files/osmandapp/osmand/build.gradle tests/source-files/osmandapp/osmand/gradle/wrapper/gradle-wrapper.properties tests/source-files/realm/react-native/android/build.gradle tests/source-files/se.manyver/app.json tests/source-files/se.manyver/index.android.js tests/source-files/se.manyver/package.json tests/source-files/se.manyver/react-native.config.js tests/source-files/se.manyver/android/build.gradle tests/source-files/se.manyver/android/gradle.properties tests/source-files/se.manyver/android/settings.gradle tests/source-files/se.manyver/android/app/build.gradle tests/source-files/se.manyver/android/gradle/wrapper/gradle-wrapper.properties tests/source-files/ut.ewh.audiometrytest/build.gradle tests/source-files/ut.ewh.audiometrytest/settings.gradle tests/source-files/ut.ewh.audiometrytest/app/build.gradle tests/source-files/ut.ewh.audiometrytest/app/src/main/AndroidManifest.xml tests/source-files/yuriykulikov/AlarmClock/gradle/wrapper/gradle-wrapper.properties tests/triple-t-2/build/org.piwigo.android/build.gradle tests/triple-t-2/build/org.piwigo.android/settings.gradle tests/triple-t-2/build/org.piwigo.android/app/.gitignore tests/triple-t-2/build/org.piwigo.android/app/build.gradle tests/triple-t-2/build/org.piwigo.android/app/src/debug/res/values/constants.xml tests/triple-t-2/build/org.piwigo.android/app/src/debug/res/values/strings.xml tests/triple-t-2/build/org.piwigo.android/app/src/main/java/org/piwigo/PiwigoApplication.java tests/triple-t-2/build/org.piwigo.android/app/src/main/play/contact-email.txt tests/triple-t-2/build/org.piwigo.android/app/src/main/play/contact-website.txt tests/triple-t-2/build/org.piwigo.android/app/src/main/play/default-language.txt tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/de-DE/full-description.txt tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/de-DE/short-description.txt tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/de-DE/title.txt tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/full-description.txt tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/short-description.txt tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/title.txt tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphics/feature-graphic/piwigo-full.png tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphics/icon/piwigo-icon.png tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphics/phone-screenshots/01_Login.jpg tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphics/phone-screenshots/02_Albums.jpg tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphics/phone-screenshots/03_Photos.jpg tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphics/phone-screenshots/04_Albums_horizontal.jpg tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphics/phone-screenshots/05_Menu.jpg tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphics/tablet-screenshots/01_Login.png tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/fr-FR/full-description.txt tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/fr-FR/short-description.txt tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/fr-FR/title.txt tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/kn-IN/full-description.txt tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/kn-IN/short-description.txt tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/kn-IN/title.txt tests/triple-t-2/build/org.piwigo.android/app/src/main/play/release-notes/de-DE/default.txt tests/triple-t-2/build/org.piwigo.android/app/src/main/play/release-notes/en-US/default.txt tests/triple-t-2/build/org.piwigo.android/app/src/main/play/release-notes/fr-FR/default.txt tests/triple-t-2/build/org.piwigo.android/app/src/main/play/release-notes/kn-IN/default.txt tests/triple-t-2/metadata/org.piwigo.android.yml tests/triple-t-anysoftkeyboard/.gitignore tests/triple-t-anysoftkeyboard/build/com.anysoftkeyboard.languagepack.dutch/settings.gradle tests/triple-t-anysoftkeyboard/build/com.anysoftkeyboard.languagepack.dutch/addons/languages/dutch/apk/src/main/play/listings/en-US/title.txt tests/triple-t-anysoftkeyboard/build/com.anysoftkeyboard.languagepack.dutch/ime/app/src/main/play/listings/en-US/title.txt tests/triple-t-anysoftkeyboard/build/com.menny.android.anysoftkeyboard/settings.gradle tests/triple-t-anysoftkeyboard/build/com.menny.android.anysoftkeyboard/addons/languages/dutch/apk/src/main/play/listings/en-US/title.txt tests/triple-t-anysoftkeyboard/build/com.menny.android.anysoftkeyboard/ime/app/src/main/play/listings/en-US/title.txt tests/triple-t-anysoftkeyboard/metadata/com.anysoftkeyboard.languagepack.dutch.yml tests/triple-t-anysoftkeyboard/metadata/com.menny.android.anysoftkeyboard.yml tests/triple-t-flutter/build/fr.emersion.goguma/android/app/src/main/play/contact-website.txt tests/triple-t-flutter/build/fr.emersion.goguma/android/app/src/main/play/listings/en-US/full-description.txt tests/triple-t-flutter/build/fr.emersion.goguma/android/app/src/main/play/listings/en-US/short-description.txt tests/triple-t-flutter/build/fr.emersion.goguma/android/app/src/main/play/listings/en-US/title.txt tests/triple-t-flutter/metadata/fr.emersion.goguma.yml tests/triple-t-multiple/.gitignore tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/settings.gradle tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/verifier/src/main/play/listings/en-US/title.txt tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/wallet/src/main/play/listings/en-US/title.txt tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/settings.gradle tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/verifier/src/main/play/listings/en-US/title.txt tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/wallet/src/main/play/listings/en-US/title.txt tests/triple-t-multiple/metadata/ch.admin.bag.covidcertificate.verifier.yml tests/triple-t-multiple/metadata/ch.admin.bag.covidcertificate.wallet.yml tests/valid-package-names/RandomPackageNames.java tests/valid-package-names/random-package-names tests/valid-package-names/test.py././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901363.0 fdroidserver-2.4.0/fdroidserver.egg-info/dependency_links.txt0000644000175000017500000000000114770510163023161 0ustar00hanshans ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901363.0 fdroidserver-2.4.0/fdroidserver.egg-info/entry_points.txt0000644000175000017500000000006614770510163022413 0ustar00hanshans[console_scripts] fdroid = fdroidserver.__main__:main ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901363.0 fdroidserver-2.4.0/fdroidserver.egg-info/requires.txt0000644000175000017500000000072114770510163021513 0ustar00hanshansGitPython Pillow PyYAML androguard>=3.3.5 apache-libcloud>=0.14.1 asn1crypto clint defusedxml oscrypto paramiko platformdirs puremagic python-vagrant qrcode requests!=2.11.0,!=2.12.2,!=2.18.0,>=2.5.2 ruamel.yaml<0.17.22,>=0.15 sdkmanager>=0.6.4 yamllint [:python_version < "3.11"] tomli>=1.1.0 [:sys_platform == "darwin"] biplist pycountry [docs] numpydoc pydata_sphinx_theme pydocstyle sphinx [optional] biplist pycountry python-magic [test] html5print pyjks ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901363.0 fdroidserver-2.4.0/fdroidserver.egg-info/top_level.txt0000644000175000017500000000001514770510163021641 0ustar00hanshansfdroidserver ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/gradlew-fdroid0000755000175000017500000004604014770502071015546 0ustar00hanshans#!/bin/bash bindir="$(dirname $0)" basedir="$(dirname $bindir)" # Check if GRADLE_VERSION_DIR/CACHEDIR is set from environment if [ -z "$GRADLE_VERSION_DIR" ]; then gradle_version_dir="${basedir}/versions" else gradle_version_dir="$GRADLE_VERSION_DIR" fi BUILDSERVER_CACHEDIR=/vagrant/cache if [ -n "$CACHEDIR" ]; then cachedir="$CACHEDIR" elif [ -d $BUILDSERVER_CACHEDIR ]; then cachedir=$BUILDSERVER_CACHEDIR fi args=("$@") run_gradle() { if [ ! -d "${gradle_version_dir}/${v_found}" ]; then download_gradle ${v_found} fi # shellcheck disable=SC2145 echo "Running ${gradle_version_dir}/${v_found}/bin/gradle ${args[@]}" "${gradle_version_dir}/${v_found}/bin/gradle" "${args[@]}" exit $? } download_gradle() { URL="https://downloads.gradle.org/distributions/gradle-${1}-bin.zip" shasum=$(get_sha $1) if [ $? != 0 ]; then echo "No hash for gradle version $1! Exiting..." exit 1 fi if [ -n "${cachedir}" ] && [ -e "${cachedir}/gradle-$1-bin.zip" ]; then echo "Using cached ${cachedir}/gradle-$1-bin.zip ..." gradle_zip="${cachedir}/gradle-$1-bin.zip" else echo "Downloading missing gradle version $1" echo cachedir $cachedir if [[ -n "${cachedir}" && ! -d "${cachedir}" ]]; then mkdir -p "${cachedir}" fi if [[ -n "${cachedir}" && -d "${cachedir}" && -w "${cachedir}" ]]; then tmpdir="${cachedir}" else tmpdir=$(mktemp -d) fi curl -o "${tmpdir}/gradle-$1-bin.zip" --silent --fail --show-error --location --retry 3 --retry-all-errors "${URL}" gradle_zip="${tmpdir}/gradle-$1-bin.zip" fi echo "${shasum} ${gradle_zip}" | sha256sum -c - if [ $? != 0 ]; then echo "gradle download checksum mismatch! Exiting..." exit 1 fi mkdir -p "${gradle_version_dir}/" unzip -q -d "${gradle_version_dir}" "${gradle_zip}" mv "${gradle_version_dir}/gradle-$1" "${gradle_version_dir}/${v_found}" } get_sha() { case $1 in '0.7') echo '4e354fcb0d5c0b0e7789cd6ee900456edaf993f6dd890c4a1c217d90d2a6a6ad' ;; '0.8') echo '940e623ea98e40ea9ad398770a6ebb91a61c0869d394dda81aa86b0f4f0025e7' ;; '0.9') echo '994e46d4b467254a0f25ce92b602618331b9b3ac8b32a094fd84ff0e0ceec135' ;; '0.9.1') echo '5d48cba95db031ec109ae9ab60561e960b6507046036e8191aa78572ec27e2a5' ;; '0.9.2') echo 'f94d7642348c558fc05ab5fd6fb947fb1ed8fed5931ddb73dd04fb0de22d669b' ;; '1.0') echo '894bca0360a7e2040815096788f118a2dd106ff6694221b274efb9c32bce0384' ;; '1.1') echo '552c1fc9f3a1b9668b79cc447370f0263e664ffb6d5c6e1c21e77ce0c8a20d4c' ;; '1.2') echo 'eb53da3704d24cabb7565f34a3bf16bcd863c4b0c139917606fb15d4f27c7bdf' ;; '1.3') echo 'ada68561efbb9f1cae0f9063974cbde15c180351a2f92bc2f1106e39ddcae5ba' ;; '1.4') echo 'cd99e85fbcd0ae8b99e81c9992a2f10cceb7b5f009c3720ef3a0078f4f92e94e' ;; '1.5') echo 'a5511a0659caa47d9d74fd2844c9da43157d2f78e63a0223c6289d88f5aaecbe' ;; '1.6') echo 'de3e89d2113923dcc2e0def62d69be0947ceac910abd38b75ec333230183fac4' ;; '1.7') echo '360c97d51621b5a1ecf66748c718594e5f790ae4fbc1499543e0c006033c9d30' ;; '1.8') echo 'a342bbfa15fd18e2482287da4959588f45a41b60910970a16e6d97959aea5703' ;; '1.9') echo '097ddc2bcbc9da2bb08cbf6bf8079585e35ad088bafd42e8716bc96405db98e9' ;; '1.10') echo '6e6db4fc595f27ceda059d23693b6f6848583950606112b37dfd0e97a0a0a4fe' ;; '1.11') echo '07e235df824964f0e19e73ea2327ce345c44bcd06d44a0123d29ab287fc34091' ;; '1.12') echo '8734b13a401f4311ee418173ed6ca8662d2b0a535be8ff2a43ecb1c13cd406ea' ;; '2.0') echo 'a1eb880c8755333c4d33c4351b269bebe517002532d3142c0b6164c9e8c081c3' ;; '2.1') echo '3eee4f9ea2ab0221b89f8e4747a96d4554d00ae46d8d633f11cfda60988bf878' ;; '2.2') echo '91e5655fe11ef414449f218c4fa2985b3a49b7903c57556da109c84fa26e1dfb' ;; '2.2.1') echo '420aa50738299327b611c10b8304b749e8d3a579407ee9e755b15921d95ff418' ;; '2.3') echo '010dd9f31849abc3d5644e282943b1c1c355f8e2635c5789833979ce590a3774' ;; '2.4') echo 'c4eaecc621a81f567ded1aede4a5ddb281cc02a03a6a87c4f5502add8fc2f16f' ;; '2.5') echo '3f953e0cb14bb3f9ebbe11946e84071547bf5dfd575d90cfe9cc4e788da38555' ;; '2.6') echo '18a98c560af231dfa0d3f8e0802c20103ae986f12428bb0a6f5396e8f14e9c83' ;; '2.7') echo 'cde43b90945b5304c43ee36e58aab4cc6fb3a3d5f9bd9449bb1709a68371cb06' ;; '2.8') echo 'a88db9c2f104defdaa8011c58cf6cda6c114298ae3695ecfb8beb30da3a903cb' ;; '2.9') echo 'c9159ec4362284c0a38d73237e224deae6139cbde0db4f0f44e1c7691dd3de2f' ;; '2.10') echo '66406247f745fc6f05ab382d3f8d3e120c339f34ef54b86f6dc5f6efc18fbb13' ;; '2.11') echo '8d7437082356c9fd6309a4479c8db307673965546daea445c6c72759cd6b1ed6' ;; '2.12') echo 'e77064981906cd0476ff1e0de3e6fef747bd18e140960f1915cca8ff6c33ab5c' ;; '2.13') echo '0f665ec6a5a67865faf7ba0d825afb19c26705ea0597cec80dd191b0f2cbb664' ;; '2.14') echo '993b4f33b652c689e9721917d8e021cab6bbd3eae81b39ab2fd46fdb19a928d5' ;; '2.14.1') echo 'cfc61eda71f2d12a572822644ce13d2919407595c2aec3e3566d2aab6f97ef39' ;; '3.0') echo '39c906941a474444afbddc38144ed44166825acb0a57b0551dddb04bbf157f80' ;; '3.1') echo 'c7de3442432253525902f7e8d7eac8b5fd6ce1623f96d76916af6d0e383010fc' ;; '3.2') echo '5321b36837226dc0377047a328f12010f42c7bf88ee4a3b1cee0c11040082935' ;; '3.2.1') echo '9843a3654d3e57dce54db06d05f18b664b95c22bf90c6becccb61fc63ce60689' ;; '3.3') echo 'c58650c278d8cf0696cab65108ae3c8d95eea9c1938e0eb8b997095d5ca9a292' ;; '3.4') echo '72d0cd4dcdd5e3be165eb7cd7bbd25cf8968baf400323d9ab1bba622c3f72205' ;; '3.4.1') echo 'db1db193d479cc1202be843f17e4526660cfb0b21b57d62f3a87f88c878af9b2' ;; '3.5') echo '0b7450798c190ff76b9f9a3d02e18b33d94553f708ebc08ebe09bdf99111d110' ;; '3.5.1') echo '8dce35f52d4c7b4a4946df73aa2830e76ba7148850753d8b5e94c5dc325ceef8' ;; '4.0') echo '56bd2dde29ba2a93903c557da1745cafd72cdd8b6b0b83c05a40ed7896b79dfe' ;; '4.0.1') echo 'd717e46200d1359893f891dab047fdab98784143ac76861b53c50dbd03b44fd4' ;; '4.0.2') echo '79ac421342bd11f6a4f404e0988baa9c1f5fabf07e3c6fa65b0c15c1c31dda22' ;; '4.1') echo 'd55dfa9cfb5a3da86a1c9e75bb0b9507f9a8c8c100793ccec7beb6e259f9ed43' ;; '4.2') echo '515dd63d32e55a9c05667809c5e40a947529de3054444ad274b3b75af5582eae' ;; '4.2.1') echo 'b551cc04f2ca51c78dd14edb060621f0e5439bdfafa6fd167032a09ac708fbc0' ;; '4.3') echo '8dcbf44eef92575b475dcb1ce12b5f19d38dc79e84c662670248dc8b8247654c' ;; '4.3.1') echo '15ebe098ce0392a2d06d252bff24143cc88c4e963346582c8d88814758d93ac7' ;; '4.4') echo 'fa4873ae2c7f5e8c02ec6948ba95848cedced6134772a0169718eadcb39e0a2f' ;; '4.4.1') echo 'e7cf7d1853dfc30c1c44f571d3919eeeedef002823b66b6a988d27e919686389' ;; '4.5') echo '03f2a43a314ff0fb843a85ef68078e06d181c4549c1e5fb983f289382b59b5e3' ;; '4.5.1') echo '3e2ea0d8b96605b7c528768f646e0975bd9822f06df1f04a64fd279b1a17805e' ;; '4.6') echo '98bd5fd2b30e070517e03c51cbb32beee3e2ee1a84003a5a5d748996d4b1b915' ;; '4.7') echo 'fca5087dc8b50c64655c000989635664a73b11b9bd3703c7d6cabd31b7dcdb04' ;; '4.8') echo 'f3e29692a8faa94eb0b02ebf36fa263a642b3ae8694ef806c45c345b8683f1ba' ;; '4.8.1') echo 'af334d994b5e69e439ab55b5d2b7d086da5ea6763d78054f49f147b06370ed71' ;; '4.9') echo 'e66e69dce8173dd2004b39ba93586a184628bc6c28461bc771d6835f7f9b0d28' ;; '4.10') echo '248cfd92104ce12c5431ddb8309cf713fe58de8e330c63176543320022f59f18' ;; '4.10.1') echo 'e53ce3a01cf016b5d294eef20977ad4e3c13e761ac1e475f1ffad4c6141a92bd' ;; '4.10.2') echo 'b49c6da1b2cb67a0caf6c7480630b51c70a11ca2016ff2f555eaeda863143a29' ;; '4.10.3') echo '8626cbf206b4e201ade7b87779090690447054bc93f052954c78480fa6ed186e' ;; '5.0') echo '6157ac9f3410bc63644625b3b3e9e96c963afd7910ae0697792db57813ee79a6' ;; '5.1') echo '7506638a380092a0406364c79d6c87d03d23017fc25a5770379d1ce23c3fcd4d' ;; '5.1.1') echo '4953323605c5d7b89e97d0dc7779e275bccedefcdac090aec123375eae0cc798' ;; '5.2') echo 'ff322863250159595e93b5a4d17a6f0d21c59a1a0497c1e1cf1d53826485503f' ;; '5.2.1') echo '748c33ff8d216736723be4037085b8dc342c6a0f309081acf682c9803e407357' ;; '5.3') echo 'bed2bdd3955be5a09ca7e0201e9d131f194f7f6c466e1795a733733ccfb09f25' ;; '5.3.1') echo '1c59a17a054e9c82f0dd881871c9646e943ec4c71dd52ebc6137d17f82337436' ;; '5.4') echo 'c8c17574245ecee9ed7fe4f6b593b696d1692d1adbfef425bef9b333e3a0e8de' ;; '5.4.1') echo '7bdbad1e4f54f13c8a78abc00c26d44dd8709d4aedb704d913fb1bb78ac025dc' ;; '5.5') echo '8d78b2ed63e7f07ad169c1186d119761c4773e681f332cfe1901045b1b0141bc' ;; '5.5.1') echo '222a03fcf2fcaf3691767ce9549f78ebd4a77e73f9e23a396899fb70b420cd00' ;; '5.6') echo '15c02ef5dd3631ec02ac52e8725703e0285d9a7eecbf4e5939aa9e924604d01d' ;; '5.6.1') echo '0986244820e4a35d32d91df2ec4b768b5ba5d6c8246753794f85159f9963ec12' ;; '5.6.2') echo '32fce6628848f799b0ad3205ae8db67d0d828c10ffe62b748a7c0d9f4a5d9ee0' ;; '5.6.3') echo '60a6d8f687e3e7a4bc901cc6bc3db190efae0f02f0cc697e323e0f9336f224a3' ;; '5.6.4') echo '1f3067073041bc44554d0efe5d402a33bc3d3c93cc39ab684f308586d732a80d' ;; '6.0') echo '5a3578b9f0bb162f5e08cf119f447dfb8fa950cedebb4d2a977e912a11a74b91' ;; '6.0.1') echo 'd364b7098b9f2e58579a3603dc0a12a1991353ac58ed339316e6762b21efba44' ;; '6.1') echo 'd0c43d14e1c70a48b82442f435d06186351a2d290d72afd5b8866f15e6d7038a' ;; '6.1.1') echo '9d94e6e4a28ad328072ef6e56bce79a810494ae756751fdcedffdeaf27c093b1' ;; '6.2') echo 'b93a5f30d01195ec201e240f029c8b42d59c24086b8d1864112c83558e23cf8a' ;; '6.2.1') echo 'a68ca7ba57f3404c3f6fc1f70a02d3a7d78652e6b46bbfaff83fc9a17168c279' ;; '6.2.2') echo '0f6ba231b986276d8221d7a870b4d98e0df76e6daf1f42e7c0baec5032fb7d17' ;; '6.3') echo '038794feef1f4745c6347107b6726279d1c824f3fc634b60f86ace1e9fbd1768' ;; '6.4') echo 'b888659f637887e759749f6226ddfcb1cb04f828c58c41279de73c463fdbacc9' ;; '6.4.1') echo 'e58cdff0cee6d9b422dcd08ebeb3177bc44eaa09bd9a2e838ff74c408fe1cbcd' ;; '6.5') echo '23e7d37e9bb4f8dabb8a3ea7fdee9dd0428b9b1a71d298aefd65b11dccea220f' ;; '6.5.1') echo '50a7d30529fa939721fe9268a0205142f3f2302bcac5fb45b27a3902e58db54a' ;; '6.6') echo 'e6f83508f0970452f56197f610d13c5f593baaf43c0e3c6a571e5967be754025' ;; '6.6.1') echo '7873ed5287f47ca03549ab8dcb6dc877ac7f0e3d7b1eb12685161d10080910ac' ;; '6.7') echo '8ad57759019a9233dc7dc4d1a530cefe109dc122000d57f7e623f8cf4ba9dfc4' ;; '6.7.1') echo '3239b5ed86c3838a37d983ac100573f64c1f3fd8e1eb6c89fa5f9529b5ec091d' ;; '6.8') echo 'e2774e6fb77c43657decde25542dea710aafd78c4022d19b196e7e78d79d8c6c' ;; '6.8.1') echo 'fd591a34af7385730970399f473afabdb8b28d57fd97d6625c388d090039d6fd' ;; '6.8.2') echo '8de6efc274ab52332a9c820366dd5cf5fc9d35ec7078fd70c8ec6913431ee610' ;; '6.8.3') echo '7faa7198769f872826c8ef4f1450f839ec27f0b4d5d1e51bade63667cbccd205' ;; '6.9') echo '765442b8069c6bee2ea70713861c027587591c6b1df2c857a23361512560894e' ;; '6.9.1') echo '8c12154228a502b784f451179846e518733cf856efc7d45b2e6691012977b2fe' ;; '6.9.2') echo '8b356fd8702d5ffa2e066ed0be45a023a779bba4dd1a68fd11bc2a6bdc981e8f' ;; '6.9.3') echo 'dcf350b8ae1aa192fc299aed6efc77b43825d4fedb224c94118ae7faf5fb035d' ;; '6.9.4') echo '3e240228538de9f18772a574e99a0ba959e83d6ef351014381acd9631781389a' ;; '7.0') echo 'eb8b89184261025b0430f5b2233701ff1377f96da1ef5e278af6ae8bac5cc305' ;; '7.0.1') echo 'dccda8aa069563c8ba2f6cdfd0777df0e34a5b4d15138ca8b9757e94f4e8a8cb' ;; '7.0.2') echo '0e46229820205440b48a5501122002842b82886e76af35f0f3a069243dca4b3c' ;; '7.1') echo '2debee19271e1b82c6e41137d78e44e6e841035230a1a169ca47fd3fb09ed87b' ;; '7.1.1') echo 'bf8b869948901d422e9bb7d1fa61da6a6e19411baa7ad6ee929073df85d6365d' ;; '7.2') echo 'f581709a9c35e9cb92e16f585d2c4bc99b2b1a5f85d2badbd3dc6bff59e1e6dd' ;; '7.3') echo 'de8f52ad49bdc759164f72439a3bf56ddb1589c4cde802d3cec7d6ad0e0ee410' ;; '7.3.1') echo '9afb3ca688fc12c761a0e9e4321e4d24e977a4a8916c8a768b1fe05ddb4d6b66' ;; '7.3.2') echo '23b89f8eac363f5f4b8336e0530c7295c55b728a9caa5268fdd4a532610d5392' ;; '7.3.3') echo 'b586e04868a22fd817c8971330fec37e298f3242eb85c374181b12d637f80302' ;; '7.4') echo '8cc27038d5dbd815759851ba53e70cf62e481b87494cc97cfd97982ada5ba634' ;; '7.4.1') echo 'e5444a57cda4a95f90b0c9446a9e1b47d3d7f69057765bfb54bd4f482542d548' ;; '7.4.2') echo '29e49b10984e585d8118b7d0bc452f944e386458df27371b49b4ac1dec4b7fda' ;; '7.5') echo 'cb87f222c5585bd46838ad4db78463a5c5f3d336e5e2b98dc7c0c586527351c2' ;; '7.5.1') echo 'f6b8596b10cce501591e92f229816aa4046424f3b24d771751b06779d58c8ec4' ;; '7.6') echo '7ba68c54029790ab444b39d7e293d3236b2632631fb5f2e012bb28b4ff669e4b' ;; '7.6.1') echo '6147605a23b4eff6c334927a86ff3508cb5d6722cd624c97ded4c2e8640f1f87' ;; '7.6.2') echo 'a01b6587e15fe7ed120a0ee299c25982a1eee045abd6a9dd5e216b2f628ef9ac' ;; '7.6.3') echo '740c2e472ee4326c33bf75a5c9f5cd1e69ecf3f9b580f6e236c86d1f3d98cfac' ;; '7.6.4') echo 'bed1da33cca0f557ab13691c77f38bb67388119e4794d113e051039b80af9bb1' ;; '8.0') echo '4159b938ec734a8388ce03f52aa8f3c7ed0d31f5438622545de4f83a89b79788' ;; '8.0.1') echo '1b6b558be93f29438d3df94b7dfee02e794b94d9aca4611a92cdb79b6b88e909' ;; '8.0.2') echo 'ff7bf6a86f09b9b2c40bb8f48b25fc19cf2b2664fd1d220cd7ab833ec758d0d7' ;; '8.1') echo 'a62c5f99585dd9e1f95dab7b9415a0e698fa9dd1e6c38537faa81ac078f4d23e' ;; '8.1.1') echo 'e111cb9948407e26351227dabce49822fb88c37ee72f1d1582a69c68af2e702f' ;; '8.2') echo '38f66cd6eef217b4c35855bb11ea4e9fbc53594ccccb5fb82dfd317ef8c2c5a3' ;; '8.2.1') echo '03ec176d388f2aa99defcadc3ac6adf8dd2bce5145a129659537c0874dea5ad1' ;; '8.3') echo '591855b517fc635b9e04de1d05d5e76ada3f89f5fc76f87978d1b245b4f69225' ;; '8.4') echo '3e1af3ae886920c3ac87f7a91f816c0c7c436f276a6eefdb3da152100fef72ae' ;; '8.5') echo '9d926787066a081739e8200858338b4a69e837c3a821a33aca9db09dd4a41026' ;; '8.6') echo '9631d53cf3e74bfa726893aee1f8994fee4e060c401335946dba2156f440f24c' ;; '8.7') echo '544c35d6bd849ae8a5ed0bcea39ba677dc40f49df7d1835561582da2009b961d' ;; '8.8') echo 'a4b4158601f8636cdeeab09bd76afb640030bb5b144aafe261a5e8af027dc612' ;; '8.9') echo 'd725d707bfabd4dfdc958c624003b3c80accc03f7037b5122c4b1d0ef15cecab' ;; '8.10') echo '5b9c5eb3f9fc2c94abaea57d90bd78747ca117ddbbf96c859d3741181a12bf2a' ;; '8.10.1') echo '1541fa36599e12857140465f3c91a97409b4512501c26f9631fb113e392c5bd1' ;; '8.10.2') echo '31c55713e40233a8303827ceb42ca48a47267a0ad4bab9177123121e71524c26' ;; '8.11') echo '57dafb5c2622c6cc08b993c85b7c06956a2f53536432a30ead46166dbca0f1e9' ;; '8.11.1') echo 'f397b287023acdba1e9f6fc5ea72d22dd63669d59ed4a289a29b1a76eee151c6' ;; '8.12') echo '7a00d51fb93147819aab76024feece20b6b84e420694101f276be952e08bef03' ;; '8.12.1') echo '8d97a97984f6cbd2b85fe4c60a743440a347544bf18818048e611f5288d46c94' ;; '8.13') echo '20f1b1176237254a6fc204d8434196fa11a4cfb387567519c61556e8710aed78' ;; *) exit 1 esac } contains() { local e for e in $2; do [[ $e == $1 ]] && return 0; done return 1 } # key-value pairs of what gradle version (value) each gradle plugin version # (key) should accept. plugin versions are actually prefixes and catch sub- # versions as well. Pairs are taken from: # https://developer.android.com/studio/releases/gradle-plugin#updating-gradle d_gradle_plugin_ver_k=(8.4 8.3 8.2 8.1 8.0 7.4 7.3 7.2 7.1 7.0 4.2 4.1 4.0 3.6 3.5 3.4 3.3 3.2 3.1 3.0 2.3 2.2 2.1.3 2.1 2.0) d_plugin_min_gradle_v=(8.6 8.4 8.2 8.0 8.0 7.5 7.4 7.3.3 7.2 7.0.2 6.7.1 6.5 6.1.1 5.6.4 5.4.1 5.1.1 4.10.1 4.6 4.4 4.1 3.3 2.14.1 2.14.1 2.12 2.12 2.4 2.4 2.3 2.2.1 2.2.1 2.1 2.1 1.12 1.12 1.12 1.11 1.10 1.9 1.8 1.6 1.6 1.4 1.4) # All gradle versions we know about plugin_v=(8.13 8.12.1 8.12 8.11.1 8.11 8.10.2 8.10.1 8.10 8.9 8.8 8.7 8.6 8.5 8.4 8.3 8.2.1 8.2 8.1.1 8.1 8.0.2 8.0.1 8.0 7.6.4 7.6.3 7.6.2 7.6.1 7.6 7.5.1 7.5 7.4.2 7.4.1 7.4 7.3.3 7.3.2 7.3.1 7.3 7.2 7.1.1 7.1 7.0.2 7.0.1 7.0 6.9.4 6.9.3 6.9.2 6.9.1 6.9 6.8.3 6.8.2 6.8.1 6.8 6.7.1 6.7 6.6.1 6.6 6.5.1 6.5 6.4.1 6.4 6.3 6.2.2 6.2.1 6.2 6.1.1 6.1 6.0.1 6.0 5.6.4 5.6.3 5.6.2 5.6.1 5.6 5.5.1 5.5 5.4.1 5.4 5.3.1 5.3 5.2.1 5.2 5.1.1 5.1 5.0 4.10.3 4.10.2 4.10.1 4.10 4.9 4.8.1 4.8 4.7 4.6 4.5.1 4.5 4.4.1 4.4 4.3.1 4.3 4.2.1 4.2 4.1 4.0.2 4.0.1 4.0 3.5.1 3.5 3.4.1 3.4 3.3 3.2.1 3.2 3.1 3.0 2.14.1 2.14 2.13 2.12 2.11 2.10 2.9 2.8 2.7 2.6 2.5 2.4 2.3 2.2.1 2.2 2.1 2.0 1.12 1.11 1.10 1.9 1.8 1.7 1.6 1.5 1.4 1.3 1.2 1.1 1.0 0.9.2 0.9.1 0.9 0.8 0.7) v_all=${plugin_v[@]} # Earliest file takes priority # Last key takes priority if there are duplicates (matching java.util.Properties) for f in {.,..}/gradle/wrapper/gradle-wrapper.properties; do [[ -f $f ]] || continue while IFS='' read -r line || [ -n "$line" ]; do line=$(printf "$line" | tr -d '\r') # strip Windows linefeeds if [[ $line == 'distributionUrl='* ]]; then wrapper_ver=${line#*/gradle-} wrapper_ver=${wrapper_ver%-*.zip} fi done < $f [[ -n $wrapper_ver ]] && break done if [[ -n $wrapper_ver ]]; then v_found=$wrapper_ver echo "Found $v_found via distributionUrl" run_gradle fi # Earliest takes priority for f in {.,..}/build.gradle{,.kts}; do [[ -f $f ]] || continue while IFS='' read -r line || [ -n "$line" ]; do line=$(printf "$line" | tr -d '\r') # strip Windows linefeeds if [[ -z "$plugin_pver" && $line == *'com.android.tools.build:gradle:'* ]]; then plugin_pver=${line#*[\'\"]com.android.tools.build:gradle:} plugin_pver=${plugin_pver%[\'\"]*} elif [[ -z "$wrapper_ver" && $line == *'gradleVersion = '* ]]; then wrapper_ver=${line#*gradleVersion*=*[\'\"]} wrapper_ver=${wrapper_ver%[\'\"]*} fi done < $f done if [[ -n $wrapper_ver ]]; then v_found=$wrapper_ver echo "Found $v_found via gradleVersion" run_gradle fi if [[ -n $plugin_pver ]]; then i=0 match=false for k in "${d_gradle_plugin_ver_k[@]}"; do if [[ $plugin_pver == ${k}* ]]; then plugin_ver=${d_plugin_min_gradle_v[$i]} match=true break fi let i++ done if $match; then v_found=$plugin_ver echo "Found $v_found via gradle plugin version $k" fi fi # Find the highest version available for v in ${plugin_v[*]}; do if contains $v "${v_all[*]}"; then v_def=$v break fi done if [[ -z $v_found ]]; then echo "No suitable gradle version found - defaulting to $v_def" v_found=$v_def fi run_gradle ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2281864 fdroidserver-2.4.0/hooks/0000755000175000017500000000000014770510164014047 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/hooks/install-hooks.sh0000775000175000017500000000151114717152067017202 0ustar00hanshans#!/bin/sh # # Install all the client hooks BASE_DIR="$(cd $(dirname $0); pwd -P)" HOOK_NAMES="applypatch-msg pre-applypatch post-applypatch pre-commit prepare-commit-msg commit-msg post-commit pre-rebase post-checkout post-merge pre-receive update post-receive post-update pre-auto-gc" HOOK_DIR="$(git rev-parse --show-toplevel)/.git/hooks" for hook in $HOOK_NAMES; do shipped_hook="$BASE_DIR/$hook" installed_hook="$HOOK_DIR/$hook" # If we don't distribute it, continue if [ ! -f "$shipped_hook" ]; then continue fi if [ -h "$installed_hook" ]; then echo "$installed_hook is a symlink - replacing." elif [ -e "$installed_hook" ]; then echo "$installed_hook hook already exists." continue fi # Create the symlink echo "ln -s -f \"$shipped_hook\" \"$installed_hook\"" ln -s -f "$shipped_hook" "$installed_hook" done ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/hooks/pre-commit0000755000175000017500000000632514770502071016055 0ustar00hanshans#!/bin/bash # # Simple pre-commit hook to check that there are no errors in the fdroidserver # source files. # Redirect output to stderr. exec 1>&2 files=`git diff-index --cached HEAD 2>&1 | sed 's/^:.* //' | uniq | cut -b100-500` if [ -z "$files" ]; then PY_FILES="fdroid makebuildserver setup.py fdroidserver/*.py examples/*.py tests/*-release-checksums.py" PY_TEST_FILES="tests/test_*.py" SH_FILES="hooks/pre-commit" BASH_FILES="gradlew-fdroid jenkins-build-all jenkins-setup-build-environment jenkins-test completion/bash-completion buildserver/provision-*" RB_FILES="buildserver/Vagrantfile" YML_FILES=".*.yml .yamllint */*.yml */*.yaml" else # if actually committing right now, then only run on the files # that are going to be committed at this moment PY_FILES= PY_TEST_FILES= SH_FILES= BASH_FILES= RB_FILES= YML_FILES= for f in $files; do test -e $f || continue case $f in test_*.py) PY_TEST_FILES+=" $f" ;; *.py) PY_FILES+=" $f" ;; *.rb) RB_FILES+=" $f" ;; *.yml|.*.yml|.yamllint) YML_FILES+=" $f" ;; *) if head -1 $f | grep '^#!/bin/sh' > /dev/null 2>&1; then SH_FILES+=" $f" elif head -1 $f | grep '^#!/bin/bash' > /dev/null 2>&1; then BASH_FILES+=" $f" elif head -1 $f | grep '^#!.*python' > /dev/null 2>&1; then PY_FILES+=" $f" fi ;; esac done fi err() { echo >&2 ERROR: "$@" exit 1 } warn() { echo >&2 WARNING: "$@" } cmd_exists() { command -v $1 1>/dev/null } find_command() { for name in $@; do for suff in "3" "-3" "-python3" ""; do cmd=${name}${suff} if cmd_exists $cmd; then echo $cmd return 0 fi done done warn "$1 is not installed, using dummy placeholder!" echo : } DASH=$(find_command dash) PYDOCSTYLE=$(find_command pydocstyle) PYFLAKES=$(find_command pyflakes) PYCODESTYLE=$(find_command pycodestyle pep8) RUBY=$(find_command ruby) YAMLLINT=$(find_command yamllint) if [ "$PY_FILES $PY_TEST_FILES" != " " ]; then if ! $PYFLAKES $PY_FILES $PY_TEST_FILES; then err "pyflakes tests failed!" fi # ignore vendored files if ! $PYDOCSTYLE --match='(?!apksigcopier|looseversion|setup|test_).*\.py' $PY_FILES $PY_TEST_FILES; then err "pydocstyle tests failed!" fi fi if [ "$PY_FILES" != "" ]; then if ! $PYCODESTYLE $PY_FILES; then err "pep8 tests failed!" fi fi if [ "$PY_TEST_FILES" != "" ]; then if ! $PYCODESTYLE $PY_TEST_FILES; then err "pep8 tests failed!" fi fi for f in $SH_FILES; do if ! $DASH -n $f; then err "dash tests failed!" fi done for f in $BASH_FILES; do if ! bash -n $f; then err "bash tests failed!" fi done for f in $RB_FILES; do if ! $RUBY -c $f 1>/dev/null; then err "ruby tests failed!" fi done for f in $YML_FILES; do if ! $YAMLLINT $f; then err ".yml tests failed on $f!" fi done if grep -C 3 'shell=True' fdroidserver/[a-ce-z]*.py; then err "shell=True is too dangerous, there are unfiltered user inputs!" fi exit 0 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368093.0 fdroidserver-2.4.0/jenkins-build-all0000755000175000017500000000732314743421035016161 0ustar00hanshans#!/bin/bash # # this is the script run by the Jenkins server to run the build tests. Be # sure to always run it in its dir, i.e. ./jenkins-build, otherwise it might # remove things that you don't want it to. # # runs here: # https://jenkins.debian.net/job/reproducible_fdroid_build_apps if [ `dirname $0` != "." ]; then echo "only run this script like ./`basename $0`" exit fi # jenkins.debian.net slaves do not export WORKSPACE if [ -z $WORKSPACE ]; then export WORKSPACE=`pwd` fi if [ -z $LC_ALL ] || [ $LC_ALL == "C.UTF-8" ] || [[ $LC_ALL != *.UTF-8 ]]; then for var in `set | grep -Eo '^(LANG|LC_[A-Z]+)' | sort -u`; do unset $var done export LC_ALL=en_US.UTF-8 echo "Forced locale to ${LC_ALL}:" set | grep -E '^(LANG|LC_[A-Z]+)' fi set -e set -x # report info about virtualization (dmesg | grep -i -e hypervisor -e qemu -e kvm) || true (lspci | grep -i -e virtio -e virtualbox -e qemu -e kvm) || true lsmod if systemd-detect-virt -q ; then echo "Virtualization is used:" `systemd-detect-virt` else echo "No virtualization is used." fi echo 'maximum allowed number of open file descriptors: ' `ulimit -n` ls -lR ~/.vagrant.d/ || echo no access cat /etc/issue /sbin/ifconfig || true hostname || true # point to the Vagrant/VirtualBox configs created by reproducible_setup_fdroid_build_environment.sh # these variables are actually set in fdroidserver/jenkins-build-makebuildserver export SETUP_WORKSPACE=$(dirname $WORKSPACE)/reproducible_setup_fdroid_build_environment export XDG_CONFIG_HOME=$SETUP_WORKSPACE export VBOX_USER_HOME=$SETUP_WORKSPACE/VirtualBox export VAGRANT_HOME=$SETUP_WORKSPACE/vagrant.d # make sure we have the right buildserver paths and its ready for use vagrant global-status \ | grep -F -e reproducible_setup_fdroid_build_environment -o -e fdroiddata/builder \ || (echo ERROR no buildserver VM found, exiting; exit 1) # the way we handle jenkins slaves doesn't copy the workspace to the slaves # so we need to "manually" clone the git repo here… cd $WORKSPACE # set up Android SDK to use the Debian packages export ANDROID_HOME=/usr/lib/android-sdk # now build the whole archive cd $WORKSPACE # this can be handled in the jenkins job, or here: if [ -e fdroiddata ]; then cd fdroiddata while ! git fetch origin --tags --prune; do sleep 10; done git checkout master git reset --hard origin/master # keep all the cloned source repos git clean -fdx --exclude build --exclude repo --exclude unsigned else git clone https://gitlab.com/fdroid/fdroiddata.git fdroiddata cd fdroiddata fi echo "build_server_always: true" > config.yml echo "deploy_process_logs: true" >> config.yml printf '\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\nbuild all with reproducible signatures\n' for f in metadata/*/signatures/*; do appid=$(basename $(dirname $(dirname $f))) versionCode=$(basename $f) rm -f repo/${appid}_${versionCode}*.* archive/${appid}_${versionCode}*.* unsigned/${appid}_${versionCode}*.* $WORKSPACE/fdroid build --verbose --latest --no-tarball ${appid}:$versionCode done printf '\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\nbuild all with Binaries:\n' for appid in `grep '^Binaries: ' metadata/*.yml --files-with-match | sed 's,^metadata/\(.*\)\.yml$,\1,'`; do rm -f repo/${appid}_*.* archive/${appid}_*.* unsigned/${appid}_*.* $WORKSPACE/fdroid build --verbose --latest --no-tarball ${appid} done # force global timeout to 6 hours sed -Ei 's,^(\s+endtime\s*=\s*time\.time\(\))\s*.*,\1 + 6 * 60 * 60 # 6 hours,' \ $WORKSPACE/fdroidserver/build.py printf '\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\nbuild all\n' $WORKSPACE/fdroid build --verbose --latest --no-tarball --all vagrant global-status if [ -d builder ]; then cd builder vagrant status fi ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368093.0 fdroidserver-2.4.0/jenkins-setup-build-environment0000755000175000017500000000557414743421035021121 0ustar00hanshans#!/bin/bash # # runs here: # https://jenkins.debian.net/job/reproducible_setup_fdroid_build_environment if [ `dirname $0` != "." ]; then echo "only run this script like ./`basename $0`" exit fi if [ -z $WORKSPACE ]; then WORKSPACE=`pwd` fi if [ -z $LC_ALL ] || [ $LC_ALL == "C.UTF-8" ] || [[ $LC_ALL != *.UTF-8 ]]; then for var in `set | grep -Eo '^(LANG|LC_[A-Z]+)' | sort -u`; do unset $var done export LC_ALL=en_US.UTF-8 echo "Forced locale to ${LC_ALL}:" set | grep -E '^(LANG|LC_[A-Z]+)' fi # make sure that no VirtualBox processes are left running cleanup_all() { set +e echo "$(date -u) - cleanup in progress..." ps auxww | grep -e VBox -e qemu ls -hl /var/lib/libvirt/images cd $WORKSPACE/buildserver vagrant halt sleep 5 killall VBoxHeadless sleep 5 killall -9 VBoxHeadless echo "$(date -u) - cleanup done." } trap cleanup_all INT TERM EXIT set -e set -x test -e ~/.cache/fdroidserver || mkdir -p ~/.cache/fdroidserver # redirect homes to be in the git repo, so they'll get cleaned and reset export XDG_CONFIG_HOME=$WORKSPACE export VBOX_USER_HOME=$WORKSPACE/VirtualBox mkdir $VBOX_USER_HOME if which VBoxManage; then VBoxManage setproperty machinefolder $WORKSPACE/virtualbox.d VBoxManage setproperty logginglevel debug fi export VAGRANT_HOME=$WORKSPACE/vagrant.d mkdir $VAGRANT_HOME rm -rf "$WORKSPACE"/../*/.testfiles memtotal=$(grep ^MemTotal: /proc/meminfo | awk '{print $2}') if [ $memtotal -gt 9437184 ]; then memory=8192 else memory=$(((memtotal / 1024) - 1024)) fi if [ `nproc` -le 6 ]; then cpus=$((`nproc` - 1)) else cpus=6 fi cat < $WORKSPACE/buildserver/Vagrantfile.yaml debian_mirror: https://deb.debian.org/debian/ boot_timeout: 1200 memory: $memory cpus: $cpus EOF cd $WORKSPACE ./makebuildserver -vv --clean if [ -z "`vagrant box list | egrep '^buildserver\s+\((libvirt|virtualbox), [0-9]+\)$'`" ]; then vagrant box list echo "ERROR: buildserver box does not exist!" exit 1 fi # this can be handled in the jenkins job, or here: if [ -e fdroiddata ]; then cd fdroiddata while ! git fetch origin --tags --prune; do sleep 10; done git remote update -p git checkout master git reset --hard origin/master git clean -fdx cd .. else git clone --depth 1 https://gitlab.com/fdroid/fdroiddata.git fdroiddata fi cd fdroiddata echo "build_server_always: true" > config.yml if [ -z $ANDROID_HOME ]; then if [ -e ~/.android/bashrc ]; then . ~/.android/bashrc else echo "ANDROID_HOME must be set!" exit 1 fi fi # if it can't build fdroid, then its really broken ../fdroid build --verbose --stop --latest org.fdroid.fdroid # Gradle, JNI, preassemble ../fdroid build --verbose --stop --skip-scan org.adaway:55 # building old versions should still work ../fdroid build --verbose --stop --skip-scan org.fdroid.fdroid:102350 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368093.0 fdroidserver-2.4.0/jenkins-test0000755000175000017500000001143114743421035015266 0ustar00hanshans#!/bin/bash # # this is the script run by the Jenkins server to run the tools tests. Be # sure to always run it in its dir, i.e. ./jenkins-test, otherwise it might # remove things that you don't want it to. # # runs here: # https://jenkins.debian.net/job/reproducible_fdroid_test if [ `dirname $0` != "." ]; then echo "only run this script like ./`basename $0`" exit fi # jenkins.debian.net slaves do not export WORKSPACE if [ -z $WORKSPACE ]; then export WORKSPACE=`pwd` fi if [ -z $LC_ALL ] || [ $LC_ALL == "C.UTF-8" ] || [[ $LC_ALL != *.UTF-8 ]]; then for var in `set | grep -Eo '^(LANG|LC_[A-Z]+)' | sort -u`; do unset $var done export LC_ALL=en_US.UTF-8 echo "Forced locale to ${LC_ALL}:" set | grep -E '^(LANG|LC_[A-Z]+)' fi set -e set -x # set up Android SDK to use the Debian packages export ANDROID_HOME=/usr/lib/android-sdk rm -rf "$WORKSPACE/.testfiles" cd tests if [ ! -e $WORKSPACE/fdroiddata/repo ]; then echo "WARNING: $WORKSPACE/fdroiddata/repo does not exist, making placeholder!" mkdir $WORKSPACE/fdroiddata/repo cp $WORKSPACE/tests/repo/*obb.*.apk $WORKSPACE/fdroiddata/repo/ fi ./run-tests $WORKSPACE/fdroiddata/repo # this is set up and managed by jenkins-build-all cd $WORKSPACE/fdroiddata rm -f config.py config.yml keystore.jks keystore.p12 ../fdroid init --verbose export GNUPGHOME=$WORKSPACE/tests/gnupghome if [ ! -e $GNUPGHOME/private-keys-v1.d ]; then mkdir -p $GNUPGHOME/private-keys-v1.d chmod 0700 $GNUPGHOME/private-keys-v1.d fi gpg --import $GNUPGHOME/secring.gpg echo "build_server_always: true" >> config.yml echo "deploy_process_logs: true" >> config.yml echo "make_current_version_link: false" >> config.yml echo "gpghome: $GNUPGHOME" >> config.yml echo "gpgkey: CE71F7FB" >> config.yml chmod 0600 config.yml sed -i '/\s*repo_key_sha256:.*/d' config.yml # publish process when building and signing are on separate machines test -d repo || mkdir repo test -d archive || mkdir archive # when everything is copied over to run on SIGN machine ../fdroid publish ../fdroid gpgsign # when everything is copied over to run on BUILD machine, # which does not have a keyring, only a cached pubkey echo "repo_pubkey: 308204e1308202c9a003020102020434597643300d06092a864886f70d01010b050030213110300e060355040b1307462d44726f6964310d300b06035504031304736f7661301e170d3136303931333230313930395a170d3434303133303230313930395a30213110300e060355040b1307462d44726f6964310d300b06035504031304736f766130820222300d06092a864886f70d01010105000382020f003082020a028202010086ef94b5aacf2ba4f38c875f4194b44f5644392e3715575d7c92828577e692c352b567172823851c8c72347fbc9d99684cd7ca3e1db3e4cca126382c53f2a5869fb4c19bdec989b2930501af3e758ff40588915fe96b10076ce3346a193a0277d79e83e30fd8657c20e35260dd085aa32eac7c4b85786ffefbf1555cafe2bc928443430cdbba48cfbe701e12ae86e676477932730d4fc7c00af820aef85038a5b4df084cf6470d110dc4c49ea1b749b80b34709d199b3db516b223625c5de4501e861f7d261b3838f8f616aa78831d618d41d25872dc810c9b2087b5a9e146ca95be740316dcdbcb77314e23ab87d4487913b800b1113c0603ea2294188b71d3e49875df097b56f9151211fc6832f9790c5c83d17481f14ad37915fd164f4fd713f6732a15f4245714b84cd665bdbd085660ea33ad7d7095dcc414f09e3903604a40facc2314a115c0045bb50e9df38efb57e1b8e7cc105f340a26eeb46aba0fa6672953eee7f1f92dcb408e561909bbd4bdf4a4948c4d57c467d21aa238c34ba43be050398be963191fa2b49828bc1e4eeed224b40dbe9dc3e570890a71a974a2f4527edb1b07105071755105edcb2af2f269facfb89180903a572a99b46456e80d4a01685a80b233278805f2c876678e731f4ec4f52075aeef6b2b023efbb8a3637ef507c4c37c27e428152ec1817fcba640ad601cb09f72f0fbe2d274a2410203010001a321301f301d0603551d0e04160414c28bf33dd5a9a17338e5b1d1a6edd8c7d141ed0b300d06092a864886f70d01010b0500038202010084e20458b2aafd7fc27146b0986f9324f4260f244920417a77c9bf15e2e2d22d2725bdd8093ec261c3779c3ca03312516506f9410075b90595b41345956d8eb2786fb5994f195611382c2b99dba13381b0100a30bc9e6e47248bf4325e2f6eec9d789216dc7536e753bf1f4be603d9fa2e6f5e192b4eb988b8cdb0bb1e8668a9225426f7d4636479f73ed24ad1d2657c31e63c93d9679b9080171b3bd1bf10a3b92b80bd790fbf62d3644900cd08eae8b9bf9c2567be98dc8cdd2ae19a8d57a3e3e2de899f81f1279f578989e6af906f80c8c2b67651730ee7e568c1af5bcb845b6d685dc55332a9984aeceaea3b7e883447edf1c76b155d95253e39b9710eaa22efa6c81468829702b5dce7126538f3ca70c2f0ad9a5795435fdb1f715f20d60359ef9a9926c7050116e802df651727447848827815f70bd82af3cedd08783156102d2d8ce995c4c43b8e47e91a3e6927f3505a5d395e6bebb84542c570903eeab4382a1c2151f1471c7a06a34dc4d268d8fa72e93bdcd2dccc4302ecac47b9e7e3d8bc9b46d21cd097874a24d529548018dc190ff568c6aa428f0a5eedff1a347730931c74f19277538e49647a4ad7254f4c1ec7d4da12cce9e1fad9607534e66ab40a56b473d9d7e3d563fd03cad2052bad365c5a29f8ae54f09b60dbca3ea768d7767cbe1c133ca08ce725c1c1370f4aab8e5b6e286f52dc0be8d0982b5a" >> config.yml ../fdroid update --nosign sed -i '/^repo_pubkey: /d' config.yml # when everything is copied over to run on SIGN machine ../fdroid signindex --verbose ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/0000755000175000017500000000000014770510164014163 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/locale/Makefile0000644000175000017500000000315114770502071015621 0ustar00hanshans FILES = $(wildcard ../fdroidserver/*.py) \ $(wildcard /usr/lib/python3.*/argparse.py) \ ../fdroid # these are the supported languages ALL_LINGUAS = $(shell sed -En 's,include locale/([^/]+)/.*,\1,p' ../MANIFEST.in) POFILES = $(wildcard */LC_MESSAGES/fdroidserver.po) MOFILES = $(ALL_LINGUAS:=/LC_MESSAGES/fdroidserver.mo) TEMPLATE = fdroidserver.pot VERSION = $(shell git describe) OPTS = --no-wrap --sort-output --add-location=file default: @printf "Build the translation files using: ./setup.py compile_catalog\n\n" message: @printf "\nYou probably want to use this instead: ./setup.py compile_catalog\n\n" # refresh everything from the source code update: $(POFILES) # generate .mo files from the .po files compile: message $(MOFILES) clean: -rm -f -- $(MOFILES) -rm -f -- $(POFILES:=~) # to remove obsolete source strings, run xgettext without --join-existing $(TEMPLATE): $(FILES) xgettext --join-existing --from-code=UTF-8 \ --language=Python --keyword=_ \ $(OPTS) --output=$(TEMPLATE) \ --package-name="fdroidserver" --package-version=$(VERSION) \ --foreign-user \ --msgid-bugs-address=https://gitlab.com/fdroid/fdroidserver/issues \ $(FILES) msguniq $(OPTS) --use-first \ --output-file=$(TEMPLATE) $(TEMPLATE) sed -i 's,CHARSET,UTF-8,' $(TEMPLATE) %.po: $(TEMPLATE) msgattrib --set-obsolete --ignore-file=$(TEMPLATE) -o $@ $@ msgattrib $(OPTS) --no-obsolete --output-file=$@ $@ msguniq $(OPTS) --use-first --output-file=$@ $@ msgmerge $(OPTS) --update $@ $(TEMPLATE) %/LC_MESSAGES/fdroidserver.mo: %/LC_MESSAGES/fdroidserver.po msgfmt --check -o $@ $(@:mo=po) .PHONY = compile clean update ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2041862 fdroidserver-2.4.0/locale/ar/0000755000175000017500000000000014770510164014565 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/ar/LC_MESSAGES/0000755000175000017500000000000014770510164016352 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/ar/LC_MESSAGES/fdroidserver.po0000644000175000017500000017734114770507747021442 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Ahmad0a , 2023. # Rex_sa , 2023. # PD , 2023. # Laachir , 2024. # Cool Man , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.1-273-g54e84d87\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2024-09-21 19:31+0000\n" "Last-Translator: Cool Man \n" "Language-Team: Arabic \n" "Language: ar\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" "X-Generator: Weblate 5.8-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: خطأ: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%r غير قابل للإستدعاء" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() غير محدد" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "بناء الحزمة من المصدر" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "تحقق من وجود تحديثات للتطبيقات" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "اﻷمر '%s' لم يتم التعرف عليه.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "التزم بالتغييرات" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "تم الانتهاء" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "تثبيت الحزم المدمجة على الأجهزة" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "التفاعل مع خادم HTTP للمستودع" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py #, fuzzy msgid "No version information could be found." msgstr "لم يتم العثور على معلومات النسخة" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "تم العثور على استثناء غير معروف!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "الأوامر الصالحة هي:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py #, fuzzy msgid "downloading '{}'" msgstr "جاري التحميل %s" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "لا يوجد \"أيقونة\" في {appid}" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "لم يتم توفير ملف APK" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "لم يتم العثور على معلومات النسخة" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "غير مسموح به مع الوسيط %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "أحد الوسائط %s مطلوب" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "يقبل فقط السلاسل والقوائم والأنساق" #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" msgstr "خيارات" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "اظهر رسالة المساعدة واخرج" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "الإستخدام: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "" msgstr[1] "" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2041862 fdroidserver-2.4.0/locale/az/0000755000175000017500000000000014770510164014575 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/az/LC_MESSAGES/0000755000175000017500000000000014770510164016362 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/az/LC_MESSAGES/fdroidserver.po0000644000175000017500000017514614770507747021453 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Mehrab Poladov , 2023. msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.2.1-143-g1a5ee449\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2023-05-26 19:39+0000\n" "Last-Translator: Mehrab Poladov \n" "Language-Team: Azerbaijani \n" "Language: az\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.18-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: xəta: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "" msgstr[1] "" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2041862 fdroidserver-2.4.0/locale/be/0000755000175000017500000000000014770510164014551 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/be/LC_MESSAGES/0000755000175000017500000000000014770510164016336 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/be/LC_MESSAGES/fdroidserver.po0000644000175000017500000020155314770507747021417 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Макар Разин , 2023. # flac , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.2.1-143-g1a5ee449\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2024-01-21 00:08+0000\n" "Last-Translator: flac \n" "Language-Team: Belarusian \n" "Language: be\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 5.4-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "публічны ключ SSH будзе ключом разгортвання:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "файл {path} зашыфраваны для сакрэтнай зменнай DEBUG_KEYSTORE:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" не супадае з файлам метаданных!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: памылка: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%r нельга выклікаць" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() не вызначана" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "Сабраць пакет з зыходнага кода" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Праверце наяўнасць абнаўленняў праграм" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "Каманда '%s' не распазнана.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "Выдаліце APK і/або OBB без метададзеных з рэпазітара" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "Усталюйце ўбудаваныя пакеты на прылады" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "Узаемадзейнічайце з HTTP-серверам рэпазітара" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "Хутка запусціце новы рэпазітар" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "Прачытайце ўсе файлы метададзеных і выйдзіце" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "Перайменуйце файлы APK, якія не адпавядаюць package.name_123.apk" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Перапішыце ўсе файлы метададзеных" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "Сканіруйце зыходны код пакета" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "Падпішыце і зафіксуйце пакеты ў рэпазітары" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "Падпісвайце індэксы, створаныя з дапамогай update --nosign" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "Знойдзена невядомае выключэнне!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Абнаўленне інфармацыі рэпазітара для новых пакетаў" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "Абнавіць бінарны журнал празрыстасці для URL" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Дапушчальныя каманды:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "Праверце цэласнасць спампаваных пакетаў" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Папярэджваць аб магчымых памылках метададзеных" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "неадназначны варыянт: %(option)s можа адпавядаць %(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "пазіцыйныя аргументы" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "паказаць гэта паведамленне дапамогі і выйсці" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "патрабуюцца наступныя аргументы: %s" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "нечаканы параметр: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "незнаёмыя аргументы: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "небяспечныя дазволы доступу для '{config_file}' (патрэбна быць 0600)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "выкарыстанне: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "" msgstr[1] "" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2041862 fdroidserver-2.4.0/locale/bg/0000755000175000017500000000000014770510164014553 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/bg/LC_MESSAGES/0000755000175000017500000000000014770510164016340 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/bg/LC_MESSAGES/fdroidserver.po0000644000175000017500000017513114770507747021423 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Aleksandar Hadzhivelichkov , 2022. # 109247019824 , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.1b0\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2024-07-19 10:21+0000\n" "Last-Translator: 109247019824 \n" "Language-Team: Bulgarian \n" "Language: bg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.7-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "" msgstr[1] "" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2041862 fdroidserver-2.4.0/locale/bn/0000755000175000017500000000000014770510164014562 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/bn/LC_MESSAGES/0000755000175000017500000000000014770510164016347 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/bn/LC_MESSAGES/fdroidserver.po0000644000175000017500000017632514770507747021440 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Oymate , 2021. msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.6-70-g54bc858\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2021-02-12 09:48+0000\n" "Last-Translator: Oymate \n" "Language-Team: Bengali \n" "Language: bn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.5-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: ত্রুটি: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "'%s' কমান্ড চিনা যায়নি।\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "পরিবর্তন জমা দাও" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "সম্পূর্ণ" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "উপমডিউল শুরু করা হচ্ছে" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "অবৈধ এপিকে" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, fuzzy, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "{apkfilename} প্রক্রিয়ারত" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "স্বয়ংক্রিয়-হালনাগাদ প্রক্রিয়া করো" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "{apkfilename} প্রক্রিয়ারত" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "{appid} প্রক্রিয়ারত" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "অজানা ব্যতিক্রম পাওয়া গেছে!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "বৈধ কমান্ড হলো:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" msgstr "বিকল্পসমূহ" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "ব্যবহার: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "" msgstr[1] "" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2041862 fdroidserver-2.4.0/locale/bo/0000755000175000017500000000000014770510164014563 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/bo/LC_MESSAGES/0000755000175000017500000000000014770510164016350 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/bo/LC_MESSAGES/fdroidserver.po0000644000175000017500000032113614770507747021431 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # Hans-Christoph Steiner , 2020, 2021, 2022, 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2024-04-10 13:33+0000\n" "Last-Translator: Hans-Christoph Steiner \n" "Language-Team: Tibetan \n" "Language: bo\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 5.5-dev\n" #: ../fdroidserver/nightly.py #, fuzzy msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "SSHདམངས་ཀྱི་ལྡེ་མིག་དེ་ཕྱོགས་སྐྱོད་ལྡ་ེམིག་ལ་བེད་སྤྱོད་བྱེད།:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "{path} DEBUG_KEYSTOREགསང་རྟགས་ཀྱི་ཆེད་དུ་ཨང་སྒྲིག:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" འདི་དང་མཐུན་པའི་རྒྱབ་ལྗོངས་ཡིག་ཆ་མིན་འདུག!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, fuzzy, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "dir གྱི་རྩ་བ་ for local_copy_dir \"{path}\" མིན་འདུག!" #: ../fdroidserver/install.py #, fuzzy, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "'{apkfilename}' འདི་{dev}.ནང་སྔོན་ཚོད་ནས་སྒྲིག་བཅུག་བྱས་ཟིན།." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "\"{path}\" ཉེ་ཆར་{name} ({version})རྣམས་ཚུད་ཡོད།" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: ནོར་སྐྱོན: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d དཀའ་རྙོག་ཐོན་སོང་།" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%r 1 བྱེད་ལས་མིན་འདུག" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s 1འདི་ཁས་ལེན་ཐུབ་པའི་བཟོ་སྐྲུན་རྭ་བ་མ་རེད།" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' འདི་config.yml ནང་རྙེད་མ་སོང་།!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "'keystore' འདི་ config.yml ནང་རྙེད་མ་སོང་།!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "'keystorepass' འདི་ config.yml ནང་རྙེད་མ་སོང་།!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' འདི་ config.yml ནང་རྙེད་མ་སོང་།!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'དགསོ་མཁོ།' ནི་གནས་སྟངས་འདི་ལ་ཁུངས་ལྡན་གྱི་རྩོད་པ་རེད་མིན་འདུག" #: ../fdroidserver/common.py #, fuzzy msgid "'sdk_path' not set in config.yml!" msgstr "'sdk_path' འདི་ 'config.yml' ནང་སྒྲིག་ཐུབ་མ་སོང་།!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "'{path}1' ལག་བསྟར་ཐུབ་མ་སོང་།!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' ཁུངས་ལྡན་རེད་མིན་འདུག{field} འདི་ནང་ {appid}. Regex འགྲོ་ལུགས་: {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...{appid} གྱི་ཆེད་དུ་གསར་བསྒྱུར་འཚོལ་མི་ཐུབ།་: {error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() ངོས་འཛིན་ཐུབ་མེད།" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "/གནས་དོན་བོར་བརླག་སོང་འདུག" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "{path}མིང་རྟགས་བཀོད་པའི་ཆོག་མཆན་ལག་ཁྱེར་འདིའི་ནང་རྙེད་མ་སོང་།" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "PGP གྱི་མིང་རྟགས་དེ་རེ་པོ་ཐུམ་སྒྲིལ་ནང་GnuPG ཁ་སྣོན་བྱས་ནས་རེ་པོ་ནང་ལ་བཅུག" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "མིང་རྟགས་མི་བཀོད་པའི་རེ་པོ་ནང་ལ་རེ་པོ་མིང་རྟགས་ལྡེ་མིག་འདི་ཁ་སྣོན་བྱེད།" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "APKsནང་ལ་ཡིག་ཚགས་ཀྱི་རྒྱབ་ལྗོངས་ལོ་རྒྱུས་ཁ་སྣོན་བྱེད།" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "{name}ཁོ་ནའི་ཆེད་དུ་རེ་པོ་གསར་པ་ཁ་སྣོན།" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "ལྡེ་མིག་གསོག་ཉར་ཁང་ནང་རེ་པོ་མིང་རྟགས་ལྡེ་མིག་བཀོད་པའི་གསང་མིང་།" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "ཐོག་མའི་ནང་འདྲེན་བྱེད་པའི་སྐབས་གསལ་པོའི་ཐོག་ནས་སྐྱར་སྦྱོང་(ཡང་ན་གིཊ་ཡན་ལག་)མི་འདྲ་བ་རྣམས་ལ་ཆོག་མཆན་སྤྲོད།" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "མ་ཟད་བཀོད་སྒྲིག་བྱས་པའི་གནད་དོན་རྣམས་ལ་ཉེན་བརྡ་སྟོན། དཔེར་ན་rewritemeta -l" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "ཨེན་ཀྲོཌ་SDK ཐབས་ལམ་ '{path}'མིན་འདུག!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "ཨེན་ཀྲོཌSDKཐབས་ལམ་ '{path}1' ཡིག་ཆ་གསོག་ཉར་རེད་མིན་འདུག!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "མཉེན་ཆས་འདི་'{repo}1ནང་འདུག འོན་ཀྱང་སྦྲེལ་མཐུད་དེ་ {url}2ཡོད།" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "Appending .git ངེས་པར་དགོས་ཀྱི་མེད།" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "མཛོད་ཁང་{apkfilename} ལ་ཁུངས་ལྡན་མིན་པའི་མིང་རྟགས་!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "ཡན་ལག '{branch}1' བཟོ་སྐྲུན་ནང་བེད་སྤྱོད་བྱས་རྒྱུ་ཁས་ལེན་ཡོད།'{versionName}2'" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "ཡན་ལག '{branch}1'' srclib ནང་བེད་སྤྱོད་བྱེད་རྒྱུ་ཁས་ལེན་ཡོད་།'{srclib}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "འབྱུང་ཁུངས་ནས་ཐུམ་སྒྲིལ་བཟོས་འདུག" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "མཉེན་ཆས་ཡོད་བཞིན་པ་ཆ་ཚང་ལ་ཐོན་སྐྱེད་བཟོས།" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "བཟོ་སྐྲུན་འདི་ཐོན་སྐྱེད་བྱེད་མཁན་ 'ཨེཕ་རོཌ་ནང་འདྲེན།' -གལ་སྲིད་གྲ་སྒྲིག་ཟིན་ན་ནུས་མེད་ཀྱི་རིམ་པ་དེ་མེད་པ་བཟོས།" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "ཐུམ་སྒྲིལ་རེ་རེ་ལ་ཁོ་ནར་བཟོས་པའི་ཐོན་རིམ་གསར་ཤོས།" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "རེ་པོ་བཟོ་སྐྲུན་གཞི་རྩ་ \"%s\" སྒྲིག་བཀོད་འདི་དང་མཉམ་དུ་ཡོད།:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "ཚགས་རྒྱབ་པའི་སྐབས་སུ་ནོར་སྐྱོན་ {} ཤོར་བས་བཟོ་སྐྲུན་བྱེད་ཐུབ་མེད།" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, fuzzy, python-format msgid "Categories '%s' is not valid" msgstr "སྡེ་ཚན་'%s' ཁུངས་ལྡན་མ་རེད།" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "སྡེ་ཚན་རྣམས་སྒྲིག་མེད།" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "མཉེན་ཆས་རྣམས་གསར་བསྒྱུར་བྱས་མིན་གཟིགས་ཞིབ་གནང་དང་།" #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "མཛོད་ཁང་ཚོད་ལྟའི་ཆེད་དུ།{appid} - APKs:{integer},ཐོན་རིམ་ཉར་ཚགས།:{keep},archapks:{arch}" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "གསར་བསྒྱུར་གཙང་བཟོ།-ཡིག་ཆ་གསོག་ཉར་བེད་སྤྱོ་མ་བྱེད། APKs ཚང་མ་སྐྱར་སྤྱོད་བྱེད།" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "སྡེ་ཚན་སོ་སོའི་ཐོ་གཞུང་ལ་བར་མཚམས་རེ་འཇོག།." #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "བཀའ་ཁྱབ་ '%s 1'ངོས་འཛིན་ཐུབ་མ་སོང་།\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "བསྒྱུར་བ་གཏོང་བར་མོས་མཐུན་ཡོད།" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "ཁྱེད་རང་གི་མ་ལག་སྒང་ལ་'{command}1' རྙེད་མ་སོང་།" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "Could not find latest version code" msgstr "ཐོན་རིམ་གསར་གསར་ཤོས་ཀྱི་ཨང་རྟགས་འདི་འདི་རྙེད་མ་སོང་།" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "Could not find latest version name" msgstr "ཐོན་རིམ་གསར་ཤོས་འདིའི་མིང་རྙེད་མ་སོང་།" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "{path}མེད་པ་བཟོས་པ་ལ་རྙེད་མ་སོང་།" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "Couldn't find Application ID" msgstr "ཐུམ་སྒྲིལ་ངོས་འཛིན་རྙེད་སོན་བྱུང་མ་སོང་།" #: ../fdroidserver/checkupdates.py #, fuzzy msgid "Couldn't find any version information" msgstr "ཐོན་རིམ་གསར་ཤོས་འདིའི་མིང་རྙེད་མ་སོང་།" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "ཐུམ་སྒྲིལ་ངོས་འཛིན་རྙེད་སོན་བྱུང་མ་སོང་།" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "མིང་རྟགས་ལྡེ་མིག་སྒྲིག་བཀོད་ལ་སྐྱར་བྲིས་བྱེད་མི་བདེ་བ།!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "དྲྭ་སྣོད་གསར་པ་བཟོས་\"{name}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Creating empty {config_file}" msgstr "ཀློག་བཞིན་པ་། '{config_file}'" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "ཉིན་ཐོ་ཕྱོགས་དེབ་བཟོ་བཞིན་པ།" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "S3 སྣོད་གསར་པ་བཟོ་བཞིན་པ།:{url}" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "ཐོན་སྐྱེད་ཕྱོགས་དེབ་བཟོ་བཞིན་པ།" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "ལྡེ་མིག་འདི་(SHA256)དང་མཉམ་དུ་མིང་རྟགས་ཕྱོགས་སྟོན་བཟོ་བཞིན་པ།:" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "གནས་སྐབས་ཕྱོགས་དེབ་བཟོ་བཞིན་པ།" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "མིང་རྟགས་གྲ་སྒྲིག་གི་ཆེད་དུ་མིང་རྟགས་མ་བཀོད་པའི་ཕྱོགས་སྟོན་བཟོ་བཞིན་པ།" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "DEBUG_KEYSTORE སྒྲིག་བཀོད་བྱེད་མིན་འདུག ཡང་ན་ཚད་ལོངས་མིན་འདུག" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "APKs དང/ཡང་ནOBBs གཉིས་ལ་རེ་པོ་ནས་འགྲེལ་ཡིག་ཚགས་ཀྱི་རྒྱབ་ལྗོངས་ལོ་རྒྱུས་མེད་པ་རྣམས་སུབས།" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "ངོས་འཛིན་མི་ཐུབ་པའི་ཡིག་ཆ་རྣམས་སུབས་བཞིན་པ།: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "འགྲེལ་བཤད་'%s 1' ནི་མཉེན་ཆས་མདོར་བསྡུས་ཤིག་རེད།" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "འགྲེལ་བཤད་འདི་ལ་རིམ་པ་རྫུན་མ་ཡོད།" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "རིང་ཐུང་གི་འགྲེལ་བཤད་ {length} {limit} ལས་བརྒལ་འདུག char limit" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "དེ་མ་ཐག་ཏུ་ཨེན་ཀྲོཌ་SDK གྱི་ལམ་མ་སྟོན། ད་ལྟ་བྱེད་ཐུབ་མ་སོང་།" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "ཊར་བོལ་གྱི་འབྱུང་ཁུངས་མ་བཟོས། འདིས་ཐོན་སྐྱེད་ཚོད་ལྟ་བྱེད་པ་ལ་ཕན་ཐོགས།" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "མཛོད་ཁང་སྐྱར་སོས་མ་བྱེད། དྲྭ་རྒྱ་མེད་པའི་སྐབས་ལ་ཐོན་སྐྱེད་ཚོད་ལྟ་བྱེད་པར་ཕན་ཐོགས་ཡོང་།" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "rsync ཡིག་ཚགས་བརྟག་དཔྱད་ཀྱི་གསོག་ཉར་ཁང་འདི་བེད་སྤྱོད་མ་བྱེད།" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "མཛོད་ཁང་ཕབ་ལེན་ཐེངས་གཅིག་བྱས་པ་འདི་ཐུབ་མ་སོང་། ཡང་སྐྱར་ཐབས་ཤེས་བྱེད་ཀྱི་མིན་།." #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "{url} ཕབ་ལེན་ཐུབ་མ་སོང་།{error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "'{field}'ནང་གི་ངོ་བཤུས་སྦྲེལ་མཐུད།: {url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "ནོར་འཁྲུལ།: རྒྱབ་སྐྱོར་མེད་པའི་CI རྣམ་གྲངས་དང་ལྷན་པ་རྒྱབ་ནའང་འགྲིག་གི་ཡོད།!" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" "ཨེན་ཀྲོཌ་SDKགྱི་ལམ་འདིར་ཡོད་པས་ནང་འཛུལ་བྱེད། (%s) :\n" "> " #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "རེ་པོ་ཁ་བྱང་ལེན་སྐབས་ནོར་སྐྱོན།" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "APKs ནས་མིང་རྟགས་ཕྱིར་སྟོན་བྱེད།" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "Failed copying {path}: {error}" msgstr "ཀློག་མི་ཐུབ།{path}: {error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "'{apkfilename}'གྱི་ཆེད་དུ་འཚོལ་བཞིན་པའི་མིང་རྟགས་རྙེད་མ་སོང་།: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "ཀློག་མི་ཐུབ།{path}: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "ཆེ་ཆུང་སྐྱར་སྒྲིག་ཐུབ་མ་སོང་། {path}: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "S3 དྲྭ་སྣོད་བཟོས་ཐུབ་མ་སོང་། :{url}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "APK གནས་ཚུལ་རག་གི་མིན་འདུག {path}སུབ་བཞིན་པ།" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "APK གནས་ཚུལ་རག་གི་མིན་འདུག {path}མཆོང་།" #: ../fdroidserver/update.py #, fuzzy msgid "Failed to get APK signing key fingerprint" msgstr "APKནང་གསལ་བའི་གནས་ཚུལ་རྣམས་ལེན་ཐུབ་མ་སོང་།" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "སྒྲིག་བཅུག་བྱེད་མ་སོང་། '{apkfilename}' སྒང་ལ་ {dev}: {error}" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "མཉེན་ཆས་མིང་རྟགས་བཀོད་མིན་འདུག" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "'{apkfilename}' ཆེད་དུ་མིང་རྟགས་འཚོལ་བཞིན་པ།་> '{sigdir}'" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "ཚར་སོང་།" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "ནུས་མེད་མཉེན་ཆས་ལ་ཐོན་སྐྱེད་ཆེད་དུ་མངགས་ཏེ་བཟོས། འདི་འཚག་རྒྱབ་ཀྱི་དཀའ་ངལ་ཡོད་མིན་ལ་མ་ལྟོས་པར་མུ་མཐུད་དུ་འགྲོ་ཐུབ། འདི་ཚོད་ལྟའི་ཚུལ་ཁ་ོནར་ཆོག་མཆན་སྤྲད།." #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "\"{name}\" བརྐོད་རིས་མེད་པའི་མཉེས་ཆས་ཀྱི་རྒྱབ་ལྗོངས་ཡིག་ཆ་\"{path}\"རྙེད་སོང་།!" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "རྩོད་པའི་ནང་ཁུངས་ལྡན་མིན་པའི་appids རྙེད་འདུག" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "མཉེན་ཆས་ཁ་ཤས་ཀྱི་ཁུངས་ལྡན་མིན་པའི་ཐོན་རིམ་ཨང་རྟགས་རྙེད་འདུག" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "{path}ནང་ལ་སྣ་མང་མིང་རྟགས་ཆོག་མཆན་ལག་ཁྱེར་རྙེད་སོང་།" #: ../fdroidserver/common.py #, fuzzy msgid "Found multiple Signer Certificates!" msgstr "མཛོད་ཁང་ཆེད་དུ་་མིང་རྟགས་བཀོད་པའི་ལག་ཁྱེར་མང་པོ་རྙེད་འདུག." #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "རྒྱབ་ལྗོངས་ཡིག་ཚགས་སྣ་མང་{appid}ནང་ཐོན།" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "མཛོད་ཁང་ཆེད་དུ་་མིང་རྟགས་བཀོད་པའི་ལག་ཁྱེར་མང་པོ་རྙེད་འདུག." #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "མཛོད་ཁང་ཆེད་དུ་མིང་རྟགས་བཀོད་པའི་ལག་ཁྱེར་རྙེད་མ་སོང་།." #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "འདི་ལ་%s 1 ཡིག་ཆ་མིན་པ་རྙེད་སོང་།" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "{url} ནང་ལ་ {apkfilename}ཤུས་བཞིན་པ།" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "{appid}ཆེད་དུ་རྒྱབ་ལྗོངས་ཡིག་ཚགས་བཟོས།" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "གིཊ་ཕྱིར་འཐེན་'%s 1' ཐུབ་མ་སོང་།" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "གིཊ་གཙང་བཟོ་ཐུབ་མ་སོང་།" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "གིཊ་འཚོལ་ཐུབ་མ་སོང་།" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "གིཊ་སྐྱར་སྒྲིག་ཐུབ་མ་སོང་།" #: ../fdroidserver/common.py #, fuzzy msgid "Git submodule deinit failed" msgstr "གིཊ་ཡན་ལག་རྒྱ་ཁྱོན་གསར་བསྒྱུར་ཐུབ་མ་སོང་།" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "གིཊ་རྒྱ་ཁྱོན་མཉམ་བསྲེ་ཐུབ་མ་སོང་།" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "གིཊ་ཡན་ལག་རྒྱ་ཁྱོན་གསར་བསྒྱུར་ཐུབ་མ་སོང་།" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "རྒྱབ་ལྗོངས་ཡིག་ཆ་མེད་པའི་ཐུམ་སྒྲིལ་ཡ་ལན་མ་བྱས། " #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "{apkfilename}ཡིག་ཆ་སྦས་ཁུང་རྙིང་པ་ལ་ཡ་ལན་མ་བྱས་" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "MD5ལྟ་བུའི་མཚན་རྟགས་ཡོད་པའི་APKs ནང་ཚུད།" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "ཐོག་མིའི་ཡན་ལག་རྒྱ་ཁྱོན།" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "ཡོད་བཞིན་པའི་མིང་རྟགས་བཀོད་པའི་མཉེན་ཆས་ཆ་ཚང་འགྲིག་བཅུག་བྱེད།" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "ཡོ་བྱད་སྒང་གི་ཐུམ་སྒྲིལ་བཟོས་པ་རྣམས་འགྲིག་བཅུག་བྱེད།" #: ../fdroidserver/install.py #, fuzzy, python-format msgid "Installing %s..." msgstr "སྒྲིག་བཅུག་བྱེད་བཞིན་པ།%s 1…" #: ../fdroidserver/install.py #, fuzzy, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "'{apkfilename}' སྒྲིག་བཅུག་བྱེད་བཞིན་པ{dev}གྱི་སྒང་ལ་…" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "རེ་པོ་HTTP ཞབས་ཞུ་འཕྲུལ་ཆས་དང་ཐུགས་ཕྲད།" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "ཁུངས་ལྡན་མིན་པའི་APK" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Invalid application ID {appid}" msgstr "ལས་ཀ་བྱེད་བཞིན་པ།{appid}" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "ཚད་ལྡན་མིན་པའི་ཚགས་ཀྱི་ཐོ་གཞུང་།" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "པར་སྐྲུན་ཡིག་ཆའི་ཆེད་དུ་ཁུངས་ལྡན་མིན་པའིན་མིང་།: %s 1" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "Java JDK རྙེད་མ་སོང་།! ཚད་ལྡན་གྱི་ས་གནས་ནང་སྒྲིག་བཅུག་བྱེད་པའམ་ཡང་ན་java_paths སྒྲིག!" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "Java jarsigner རྙེད་མ་སོང་། !ཚད་ལྡན་གྱི་ས་གནས་ནང་སྒྲིག་བཅུག་བྱེད་པའམ་ཡང་ན་java_paths སྒྲིག!" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, fuzzy, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "ཐུམ་སྒྲིལ་གྱི་མིང་ཀློག་བཞིནཔ།/ཐོན་རིམ་ཨང་རྟགས་/ཐོན་རིམ་གྱི་མིང་བདེ་སྤྱོད་མེད། APK ཁུངས་ལྡན་མིན།: '{apkfilename}'" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "མིང་རྟགས་བཀོད་པའི་ལྡེ་མིག་ཆེད་དུ་སྟོན་པའི་ལྡེ་མིག་གསོག་ཉར་ཁང་གི་ལམ།\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, fuzzy, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "ཁས་ལེན་བྱས་པའི་བེད་སྤྱོད་ཐ་མ་ '{commit}' སྦྱར་བ་འདྲ་པོ་འདུག, འོན་ཀྱང་གསར་བསྒྱུར་ཡོད་མེད་འཚོལ་བྱེད་ནི།'{ucm}'" #: ../fdroidserver/lint.py #, fuzzy msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "Flattr ཞལ་འདེབས་ཐབས་ལམ་འདི་བཞིན་FlattrID flag ལ་ཐོབ་ཀྱི་ཡོད་།" #: ../fdroidserver/rewritemeta.py #, fuzzy msgid "List files that would be reformatted (dry run)" msgstr "སྐྱར་དུ་བཀོད་སྒྲིག་བྱེད་དགོས་པའི་ཡག་ཆ་རྣམས་ཀྱི་ཐོ་གཞུང་།" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "དམིགས་བསལ་གྱི་གནས་སྐབས་ལ་ཐོན་སྐྱེད་དེ་བཀག་ཆོག" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "བཟོ་ལྟ་མེད་པའི་མཛོད་ཁང་ཤེལ་སྒོ་རྣམས།." #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "བཟོ་ལྟ་ཤོར་བའི་ serverwebroot line:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "ཕྱོགས་དེབ་ཐོན་སྐྱེད་བོར་བརླག" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, fuzzy, python-format msgid "No APK for package: %s" msgstr "ཐུམ་སྒྲིལ་དེ་འདྲ་མིན་འདུག: %s 1" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "ཨེན་ཀྲོཌ་ SDK རྙེད་མ་སོང་།!" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "ཟུར་སྣོན་ཡོ་བྱད་རྙེད་མ་སོང་།" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "URL ནང་ལག་མཐིལ་པར་ཤུས་རྙེད་མ་སོང་།." #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "གིཊ་ཡན་ལག་རྒྱ་ཁྱོན་མིན་འདུག" #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "No gradle project could be found. Specify --subdir?" msgstr "ཨེན་ཀྲོཌ་དང་ཡང་ན་ཀི་བི་ལས་འཆར་གང་ཡང་རྙེད་ས་མ་རེད། དམིགས་སྟོན་བྱེད་--subdir?" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "གནས་ཚུལ་རྙེད་མ་སོང་།." #: ../fdroidserver/checkupdates.py #, fuzzy msgid "No matching tags found" msgstr "གནས་ཚུལ་རྙེད་མ་སོང་།" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "མཉེས་ཆས་འདི་རིན་མེད་མཉེན་ཆས་ཡིན་པ་དམིགས་སྟོན་བྱེད་དགོས་དོན་མེད་།" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "མཉེན་ཆས་འདི་ཨེན་ཀྲོཌ་ཆེད་དུ་ཡིན་པ་དམིགས་སྟོན་བྱེད་དགོས་དོན་མེད།" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "གདམ་ཀ་མེད་པ་སྒྲིག།! ཁྱེད་རང་གི་config.yml འདིའི་ནང་ནས་མ་མཐའ་ཡིན་ཡང་གང་རུང་ཞིག་རྩོམ་སྒྲིག་བྱེད་:" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "ཐུམ་སྒྲིལ་དམིགས་སྟོན་བྱེད་མེད།" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "%s 1ཆེད་དུ་མིང་རྟགས་བཀོད་པའི་ APK མེད།" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "མིང་རྟགས་མ་བཀོད་པའི་ཕྱོགས་དེབ་ཐོན་སྐྱེད། -བྱ་རྒྱུ་གང་ཡང་མེད།" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "{path}མིང་རྟགས་བཀོད་པའི་ཆོག་མཆན་ལག་ཁྱེར་འདིའི་ནང་རྙེད་མ་སོང་།" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "ཐུམ་སྒྲིལ་དེ་འདྲ་མིན་འདུག: %s 1" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "ཐོན་རིམ་ཨང་རྟགས་དེ་འདྲ་མིན་འདུག {versionCode} མཉེན་ཆས་ཆེད་དུ།{appid}" #: ../fdroidserver/checkupdates.py #, fuzzy msgid "No tags found" msgstr "ཟུར་སྣོན་ཡོ་བྱད་རྙེད་མ་སོང་།" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "མིང་རྟགས་མ་བཀོད་པའི་ཕྱོགས་དེབ་མིན་འདུག-བྱ་རྒྱུ་གང་ཡང་མེད།" #: ../fdroidserver/__main__.py #, fuzzy msgid "No version information could be found." msgstr "ཆ་རྒྱུས་མེད་པའི་དམིགས་བསལ་ཞིག་རྙེད་སོང་།" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "བྱ་རྒྱུ་གང་ཡང་མེད་།" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "{appid} ཆེད་དུ་བྱ་རྒྱུ་གང་ཡང་མེད་།." #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "OBB ཡིག་ཆ་ལ་ཐོན་རིམ་ཨང་རྟགས་གསར་པ་ཡོད་རེད་། ({integer}) APK གཞན།:" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "OBB ཡིག་ཆའི་མིང་ངེས་པར་དུ་\"གཙོ་བོ་\" ཡང་ན \"ལྷན་པ་.\"མཉམ་དུ་འགོ་བཙུགས:" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "OBB's ཐུམ་སྒྲིལ་མིང་འདིས་APK རྒྱབ་སྐྱོར་ཡོད་པ་དང་མཐུན་གྱི་མིན་འདུག:" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "PNG དང་ JPEG ཁོ་ན་བརྐོས་རིས་རྒྱབ་སྐྱོར་རྙེད་སོང་། :{path}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "མཉེན་ཆས་ཁོ་ནར་རང་འགུལ་གསར་བསྒྱུར་བྱེད།" #: ../fdroidserver/lint.py #, fuzzy msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Flattr ཞལ་འདེབས་ཐབས་ལམ་འདི་བཞིན་FlattrID flag ལ་ཐོབ་ཀྱི་ཡོད་།" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "ལས་འཆར་འདིའི་ཁྱོན་ཡོངས་ཀྱི་ཆོག་མཆན་ལག་ཁྱེར།." #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "'{path}'འདིའི་ནང་དབྱེ་མཚམས་མངོན་གྱི་འདུག" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "སྤྱོད་མིང་དང་མཉམ་དུ་གསང་ཨང་དགོས།" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "གལ་སྲིད་ཆོག་མཆན་ཨ་མའི་ནང་ལ་མེད་ན། ལམ་གྱི་གཙོ་བོ་འདི་ཨེན་ཀྲོཌ་ལས་འཆར་གྱི་ཕྱོགས་དེབ་ཡན་ལག་སྟོན་ཡོད།." #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "ཨེན་ཀྲོཌ་SDK ཀྱི་ལམ། (སྐབས་རེ་ཨེན་ཀྲོཌ_ཁྱིམ་དུ་སྒྲིག་ཡོད།)" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "གིཊ་རེ་པོའི་ཆེད་དུ་བདེ་སྤྱོད་བྱས་པའི་ཐོ་གཞུང་གི་ལམ།" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "རེ་པོ་མིང་རྟགས་བཀོད་པའི་ལྡེ་མིག་ཆེད་དུ་སྟོན་པའི་ལྡེ་མིག་གསོག་ཉར་ཁང་གི་ལམ།" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "ས་ཚིགས་ཀྱི་གསང་ཁྱབ་ངོ་བཤུས་དང་/སྦྱར་བ་སྟབས་བདེ་ཡོང་བའི་ཆེད་དུ་འདྲ་བཤུས་" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "'{path}'ལ་xml མཉམ་དུ་སྐྱོན་འདུག" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "རང་འགུལ་གྱི་གསར་བསྒྱུར་རྣམས་བྱེད།" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "ལས་ཀ་བྱེད་བཞིན་པ་{apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "ལས་ཀ་བྱེད་བཞིན་པ།{appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "མིས་ཀློག་ཐུབ་པའི་XML/JSON ཕྱོགས་སྟོན་གྱི་ཡིག་ཆ་བཟོས།" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "URL ལས་འཆར་ནང་འདྲེན།." #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "ཡི་གེའི་བར་རྟགས་རིགས་ངེས་པར་མེད་པ་དགོས་།" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "ཐོ་གཞུད་འདི་གིཊ་ཐག་རིང་གི་མཛོད་ཁང་ནང་འབུད་རྒྱག་གཏོང་།" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "{url}ཆེད་དུ་ཨང་གྲངས་ཀྱི་ཐོ་གཞུང་གསར་བསྒྱུར།" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "{url}ཕྱོགས་ལ་འབུད་རྒྱབ་རྒྱོབ།" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "མཛོད་ཁང་གསར་པ་ཞིག་མྱུར་དུ་འགོ་བཙུགས།" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "ཡིག་ཚགས་ཀྱི་རྒྱབ་ལྗོངས་ལོ་རྒྱུས་ཀློག་ནས་ཕྱིར་ཐོན།" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "ཀློག་བཞིན་པ་། '{config_file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "ཐུམ་སྒྲིལ་གྱི་མིང་ཀློག་བཞིནཔ།/ཐོན་རིམ་ཨང་རྟགས་/ཐོན་རིམ་གྱི་མིང་བདེ་སྤྱོད་མེད། APK ཁུངས་ལྡན་མིན།: '{apkfilename}'" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "ཐུམ་སྒྲིལ་གྱི་མིང་ཀློག་བཞིནཔ།/ཐོན་རིམ་ཨང་རྟགས་/ཐོན་རིམ་གྱི་མིང་བདེ་སྤྱོད་མེད། APK ཁུངས་ལྡན་མིན།: '{apkfilename}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "སྦས་ཁུང་ནས་ {apkfilename}ཀློག་བཞིན་པ།" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "དམིགས་སྟོན་བྱས་པའི་ཡིག་ཆ་རྣམས་མེད་པ་བཟོ་བཞིན་པ།" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "package.name_123.apk དང་མི་འདྲ་བའི་APK ཡིག་ཆ་དེ་ཚོར་མིང་སྐྱར་ཏུ་བཏགས།" #: ../fdroidserver/nightly.py #, fuzzy, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "{apkfilename} མཆོང་རྒྱབ་མཉམ་དུ་ཁུངས་ལྡན་མིན་པའི་མིང་རྟགས།" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "པར་གྱི་རྒྱུ་ཆེ་ཆུང་ཚད་ལས་བརྒལ་ན་ཚད་གཞི་ཡང་སྐྱར་འགྱུར་བ་བཏང་ནས་ཕྱིར་ཐོན།" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "ཡིག་ཚགས་ལ་ཉེན་བརྡ་དང་སྐྱོན་ཅན་རྣམས་དམ་བསྒྲགས་བྱེད།" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "ཡིག་ཚགས་ཀྱི་རྒྱབ་ལྗོངས་ལོ་རྒྱུས་ཚང་མ་སྐྱར་ཟིན།" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "སྐྱར་བྲིས། '{appid}'" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "བཀོད་སྒྲིག་འདི་ག་རང་ལ་སྐྱར་བྲིས་བྱེད།" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "MD5 ཚོད་ལྟ་བེད་སྤྱོད་མེད་པ་དང་མཉམ་དུ་ཐེངས་དང་པོ་འཁོར་སྐྱོད་བྱེད་བཞིན་པ།" #: ../fdroidserver/mirror.py #, fuzzy, python-brace-format msgid "Running wget in {path}" msgstr "སྐྱར་བྲིས་ཡོད་།{path}" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "ཐུམ་སྒྲིལ་བྱས་པའི་འབྱུང་ཁུངས་ཨང་རྟགས་འཚག་རྒྱབ" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "འཚག་རྒྱབ་ལ་སྐྱོན་རྙེད་པ།" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "མཚན་མོའི་རེ་པོ་བཟོ་སྐྲུན་ཆེད་དུ་སྒྲིག་བཀོད་བྱས་པའི་མཉེན་ཆས་བཟོ་སྐྲུན།" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "མིང་རྟགས་བཀོད་ནས་ཐུམ་སྒྲིལ་རྣམས་རེ་པོ་ནང་བཞག" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "གསར་བསྒྱུར་བེད་སྤྱོད་བྱས་ཏེ་བཟོས་པའི་མིང་རྟགས་བརྡ་སྟོན། --མིང་རྟགས་མེད།" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "འབྱུང་ཁུངས་ཨ་རྟགས་དང་དཀའ་ངལ་གཞན་རྣམས་འཚག་རྒྱབ་མ་དགོས་པར་མཆོང་།" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "'{apkfilename}'མཆོང་ནས་ཁུངས་ལྡན་མ་ཡིན་པའི་མིང་རྟགས་དང་མཉམ་དུ།!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "{appid}གྱི་ཆེད་དུ་མཆོང་བའི་མི་རབས་ཀྱི་ཕྱོགས་སྟོན།" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "{apkfilename} མཆོང་རྒྱབ་མཉམ་དུ་ཁུངས་ལྡན་མིན་པའི་མིང་རྟགས།!" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "མཆོང་བཞིན་པ་ {appid}: བེད་མེད།" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "བསྟི་གནས་ཀྱི་ཡིག་ཁུག་གཅིག་ཁ་ཕྱེས་ནས་རེ་པོ་འདི་ལ་མཉམ་བསྲེས།" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "rsync གྱི་ཆེད་དུ་SSH འདི་ངོ་ཐག་ཆོད་པའི་ཡིག་ཆ་ཞིག་དམིགས་སུ་བཀར་ནས་སྟེར།" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "ནམ་རྒྱུན་ལས་ཀྱང་མང་བའི་གནས་ཚུལ་ཕྱིར་སྟོན།" #: ../fdroidserver/nightly.py #, fuzzy, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "{apkfilename}ཡིག་ཆ་སྦས་ཁུང་རྙིང་པ་ལ་ཡ་ལན་མ་བྱས་" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "སྙིང་བསྔུས་ '%s 1' ནི་མཉེན་ཆས་ཀྱི་མིང་ཞིག་རེད་།" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "སྙིང་བསྔུས་ཀྱི་རིང་ཐུང་། {length} charཚད་{limit} ལས་བརྒལ་འདུག" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "ཚོད་ལྟའི་ཚུལ་-གལ་སྲིད་ཡིག་ཚགས་འདི་སྔོན་ཚོད་ནས་ཡོད་ནའང་། ཡིག་ཚགས་འདི་སྐབས་ཕྲལ་གྱི་ཕྱོགས་དེབ་ཁོ་ནའི་ནང་ལ་བླུགས་པ་དང་རྟག་ཏུ་ཐོན་སྐྱེད་བཟོས།." #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "OBB ཐོན་རིམ་ཨང་རྟགས་འདི་ངེས་པར་དུ་ \"{name}\"གྱི་རྗེས་སུ་་བྱུང་བ་རེད་།:" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "གཞི་རྩའི་URL དེ་རེ་པོ་ཡི་ཐོ་གཞུང་བཀོད་པའི་ཆེད་དུ་(སོར་བཞག: https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "(path or glob)རེ་པོ་ནང་ཚུད་པའི་ཡིག་ཆ།" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "མཛོད་ཁང་གི་མཛུབ་མཐིལ་དང་མཐུན་གྱི་མིན་འདུག." #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "dir གྱི་རྩ་བ་ for local_copy_dir \"{path}\" མིན་འདུག!" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "ལྡེ་མིག་གཞན་ལ་སྐྱོན་ཆ་འདུག། -པར་སྐྲུན་བཀག" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "རེ་པོ་འདི་ལ་སྔོན་ཚོད་ནས་ས་གནས་ཀྱི་རྒྱབ་ལྗོངས་ཡིག་ཆ་འདུག: %s 1" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "awsbucket, awssecretkey དང་། awsaccesskeyid བེད་སྤྱོད་བྱེད་པའི་ཆེད་དུ་ config.yml ནང་དུ་ངེས་པར་དུ་སྒྲིག་དགོས།!" #: ../fdroidserver/deploy.py #, fuzzy msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "awsbucket, awssecretkey དང་། awsaccesskeyid བེད་སྤྱོད་བྱེད་པའི་ཆེད་དུ་ config.yml ནང་དུ་ངེས་པར་དུ་སྒྲིག་དགོས།!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "URL ཐུང་དུ་གཏོང་མཁན་ངེས་པར་དུ་བེད་སྤྱོད་བྱེད།" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "URL {url} ནང་འགྲེལ་བཤད་རྒྱབ་པ་: {error}" #: ../fdroidserver/lint.py #, fuzzy msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "ཁུངས་ལྡན་མིན་པའི་ཆོག་མཆན་ལག་ཁྱེར་སྦྱར་ \"%s 1\"! https://spdx.org/license-list ཁོ་ན་ནས་ཡིན་པ་སྦྱར་ཏེ་བེད་སྤྱོད་བྱེད་།" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "ཆ་རྒྱུས་མེད་པའི་དམིགས་བསལ་ཞིག་རྙེད་སོང་།!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "ངོས་འཛིན་མི་ཐུབ་པའི་ཡིག་ཆ། '{filename}' བཟོ་སྐྲུན་གྱི་ནང་། '{versionName}'" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "ངོས་འཛིན་མ་བྱས་པའི་རྒྱབ་ལྗོངས་ཡིག་ཆའི་སྒྲིག་བཀོད།:%s 1" #: ../fdroidserver/metadata.py #, fuzzy, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "ངོས་འཛིན་མི་ཐུབ་པའི་རྒྱབ་ལྗོངས་ཡིག་ཆའི་སྒྲིག་བཀོད། : {path}" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "aapt གྱི་ངོས་འཛིན་མ་ཐུབ་པའི་ཐོན་རིམ། དཀའ་ངལ་ཕྲད་སྲིད་པ།: " #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "དགོས་མེད་ཀྱི་སྣེ་ཁྲིད་བར་མཚམས།" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "དགོས་མེད་ཀྱི་རྫེས་ཤུལ་བར་མཚམས།" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "རྒྱབ་སྐྱོར་མེད་པའི་བརྐོས་རིས་ཡིག་ཆ་རྙེད་སོང་།: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "བེད་སྤྱོད་མེད་པའི་ extlib at %s 1" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "%s 1 དེ་ལ་བེད་སྤྱོད་མེད་པའི་ཡིག་ཆ།" #: ../fdroidserver/scanner.py #, fuzzy, python-format msgid "Unused scandelete path: %s" msgstr "%s 1 དེ་ལ་བེད་སྤྱོད་མེད་པའི་ཡིག་ཆ།" #: ../fdroidserver/scanner.py #, fuzzy, python-format msgid "Unused scanignore path: %s" msgstr "%s 1 དེ་ལ་བེད་སྤྱོད་མེད་པའི་ཡིག་ཆ།" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "ཐུམ་སྒྲིལ་གསར་པའི་ཆེད་དུ་རེ་པོ་གནས་ཚུལ་གསར་བསྒྱུར་བྱེད།" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "URLཆེད་དུ་ཨང་གྲངས་ཀྱི་ཐོ་གཞུང་གསར་བསྒྱུར།" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py #, fuzzy msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "མཉེན་ཆས་ཁ་བྱང་ནང་ལ་གསར་བསྒྱུར་འཚོལ་བའི་མིང་སྒྲིག་ཚར་འདུག -འདི་སུབས་ཆོག་གི་རེད།" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "སྦས་ཁུང་ནས་ {apkfilename}ཀློག་བཞིན་པ།" #: ../fdroidserver/lint.py #, fuzzy msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "བེད་སྤྱོད།/HEAD གྱི་ཚབ་ཏུ།/ སོར་བཞག་ཡན་ལག་ནང་དུ་ཡོད་པའི་དོན་ཚན་ཨ་མ།" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "`fdroid update -c`བེད་སྤྱོད་བྱས་ནས་འདི་བཟོས།." #: ../fdroidserver/build.py msgid "Use build server" msgstr "ཐོན་སྐྱེད་ཞབས་ཞུ་འཕྲུལ་ཆས་བེད་སྤྱོད་བྱེད།" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "APK རང་གི་ཚེས་གྲངས་དེ་བེད་སྤྱོད་བྱས་པ་ལས་ཁ་སྣོན་བྱས་པའི་ APKs གསར་པའི་དུས་ཚོས་བེད་སྤྱོད་མ་བྱེད།" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, fuzzy, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "སྐྱར་བྲིས་ཡོད་།{path}" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "s3cmd བེད་སྤྱོད་བྱས་ནས་: {url}1དང་མཉམ་དུ་sync" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "s3cmd བེད་སྤྱོད་བྱས་ནས་: {url}1དང་མཉམ་དུ་sync" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "ཁུངས་ལྡན་གྱི་བཀའ་ཁྱབ་ནི།:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "ཕབ་ལེན་བྱས་པའི་ཐུམ་སྒྲིལ་གྱི་སྤུས་ཚད་ར་སྤྲོད།" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "ཡིག་ཚགས་ཀྱི་རྒྱབ་ལྗོངས་ལོ་རྒྱུས་སྐྱོན་སྲིད་པ་རྣམས་པ་ཉེན་བརྡ་གཏོང་།" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "བརྡ་སྟོན་པའི་མིང་རྟགས་དེ་སྒྲིག་བཀོད་བྱས་ཚར་ན། གནས་སྐབས་མིང་རྟགས་མ་བཀོད་པའི་བརྡ་སྟོན་རྣམས་བཟོས།" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'ཁྱད་པར་ཅན་གྱི་མིང་' ལྡེ་མིག་བཟོས་པའི་སྐབས་ལ་བེད་སྤྱོད་བྱེད།" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "ཁྱེད་རང་གིས་ཨེན་ཀྲོཌ་མདུན་ངོས་བེད་སྤྱོད་བྱས་ནས་ཁྱེད་རང་གི་SDKའགྲོ་ལམ་སྒྲིག་བཀོད་བྱེད། དེ་ནི།:" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "{path}ལ་ངོས་འཛིན་ཡིག་ཆ་ཁ་སྣོན་བྱེད་བཞིན་པ།" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "{name}ལ་ཁ་སྣོན་བྱེད།: {path}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "གསལ་ཁ་མེད་པའི་གདམ་ཀ: %(option)s མཐུན་མི་སོང་།%(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py #, fuzzy msgid "application ID of file to operate on" msgstr "མཉེས་ཆས་ཁ་བྱང་རྒྱུད་གསར་བསྒྱར་ཡོད་མིན་ལྟོས།" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py #, fuzzy msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "མཉེན་ཆས་ཀྱི་ངོ་བོ་དང་མཉམ་དུ་གདམ་ཀ་ཅན་གྱི་ཐོན་རིམ་ཨང་རྟགས་APPID[:VERCODE]" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "རྩོད་པ།\"-\" འགྲོ་ལུགས་འདི་དང་མཉམ་དུ། %r 1" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py #, fuzzy msgid "attempting bare SSH connection to test deploy key:" msgstr "ཕྱོགས་སྐྱོད་ལྡེ་མིག་ཚོད་ལྟ་ལ་bare ssh མཐུད་ཀ་་རྒྱབ་བཞིན་པ།:" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "ཁ་ཕྱེས་ཐུབ་མ་སོང་།'%(filename)s': %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, fuzzy, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "{path}!གྱི་ཆེད་དུ་ཐུམ་སྒྲིལ་གྱི་མིང་རྙེད་མ་སོང་།" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "subparser རྩོད་པ་དུ་མ་ཡོད་ཐབས་མེད།" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "བྱ་བ་ཟླ་སྒྲིལ་བཏང་ཐུབ་མ་སོང་། - སྡེ་ཚན་གཉིས་ཀྱི་མིང་ལ་%r 1" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "པར་སྐྲུན་གསར་བསྒྱུར་བྱེད་མི་ཐུབ། ཁྱེད་ཀྱིས་ཕྱོགས་སྐྱོད་ལྡེ་མིག་སྒྲིག་བཀོད་བྱེད་ཡོད་དམ།?" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "འདྲ་བཟོས་{url}" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "ཚིག་སྒྲུབ་ཀྱི་གདམ་ཀའི་རྙོག་ཕྲ།: %s 1" #: /usr/lib/python3.11/argparse.py #, fuzzy, python-format msgid "conflicting subparser alias: %s" msgstr "ཚིག་སྒྲུབ་ཀྱི་གདམ་ཀའི་རྙོག་ཕྲ།: %s 1" #: /usr/lib/python3.11/argparse.py #, fuzzy, python-format msgid "conflicting subparser: %s" msgstr "ཚིག་སྒྲུབ་ཀྱི་གདམ་ཀའི་རྙོག་ཕྲ།: %s 1" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "སུབ་བཞིན་པ།:རེ་པོ་/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "dest= ནི་གདམ་ཀ་འདི་འདྲ་ལ་%r 1དགོས་པ་ཡོད།" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "" #: ../fdroidserver/scanner.py #, fuzzy msgid "downloading scanner signatures from '{}' failed" msgstr "{apkfilename}ཡིག་ཆ་སྦས་ཁུང་རྙིང་པ་ལ་ཡ་ལན་མ་བྱས་" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "ཚོད་དཔག་བྱེད་པའི་%s 1 རྩོད་པ་" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "མ་མཐའ་ཡིན་ནའང་རེ་བ་བྱེད་པའི་རྩོད་པ།" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "རེ་བ་བྱས་པའི་རྩོད་པ་ཆེ་ཤེོས་གཅིག" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "རེ་བ་བྱས་པའི་རྩོད་པ་གཅིག" #: ../fdroidserver/__main__.py #, fuzzy msgid "fdroid [] [-h|--help|--version|]" msgstr "བེད་སྤྱོད་: ཨེཕ་རོཌ་ [-h|-རོགས་པ་|--ཐོན་རིམ་] []" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py #, fuzzy msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "སྐྱོན་ཤོར་བ་ལ་ཉེན་བརྡ་ངེས་པར་དུ་གཏོང་དགོས་པ་དང་། ཡང་ན་ཡ་མ་བྱེད།." #: ../fdroidserver/common.py #, fuzzy msgid "git svn clone failed" msgstr "གིཊ་གཙང་བཟོ་ཐུབ་མ་སོང་།" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "དངོས་སུ་རྩོད་པ་པ་ལ་ཡ་ལན་མེད། %r 1" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1 ངེས་པར་དུ་མིང་རྟགས་དགོས། བེད་སྤྱོད་`fdroid signindex`འདི་བཟོས་པ་རེད།!" #: ../fdroidserver/index.py #, fuzzy msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1 ངེས་པར་དུ་མིང་རྟགས་དགོས། བེད་སྤྱོད་`fdroid signindex`འདི་བཟོས་པ་རེད།!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "ཁུངས་ལྡན་མིན་པ་ %(type)s value: %(value)r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "ཁུངས་ལྡན་མིན་པའི་གདམ་ཀ: %(value)r (དེ་ནས་གདམ་ཀ་%(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "ཁུངས་ལྡན་མིན་པའི་རྙོག་ཕྲ།_resolution value: %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "ཁུངས་ལྡན་མིན་པའི་ཚིག་སྒྲུབ་གདམ་ཀ། %(option)r: ཁྱད་ཆོས་དང་མཉམ་དུ་འགོ་བཙུགས། %(prefix_chars)r" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "local_copy_dir \"fdroid\"གིས་མཇུག་སྐྱོང་མིན་འདུག་ : \"{path}1\"" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "local_copy_dir ནི་ངེས་པར་དུ་མཐའ་མའི་འགྲོ་ལམ་དེ་ཆགས་ཡོད།!" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "local_copy_dir ངེས་པར་ཕྱོགས་དེབ་ཡིན་དགོས། ཡིག་ཆ་མ་རེད།!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "མེ་ལོང་། '%s 1' 'fdroid'དང་མཉམ་དུ་མཇུག་སྐྱོང་མི་ཐུབ།!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "ནང་ཕན་ཚུན་རྩོད་པ་དེ་གདམ་ཀ་ཅན་ངེས་པར་དུ་བཞག་དགོས་།" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, fuzzy, python-brace-format msgid "no \"icon\" in {appid}" msgstr "ལས་ཀ་བྱེད་བཞིན་པ།{appid}" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "APK མཁོ་སྤྲོད་མིན་འདུག" #: ../fdroidserver/checkupdates.py #, fuzzy msgid "no version information found" msgstr "ཆ་རྒྱུས་མེད་པའི་དམིགས་བསལ་ཞིག་རྙེད་སོང་།" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "རྩོད་པ་དང་མཉམ་དུ་ཆོག་མཆན་མེད། %s 1" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "རྩོད་པ་གཅིག་དགོས་ཀྱི་ཡོད། %s 1" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "ཚིག་སྒྲུབ་དང་ཐོ་གཞུང་། ཡིག་ཚགས་ཁོ་ན་ངོས་ལེན་བྱེད།" #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" msgstr "གདམ་ཀ།" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "སྐྱར་བྲིས་ཡོད་།{path}" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "གནས་སྟངས་ལ་གཞིགས་པའི་རྩོད་པ།" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "བདེ་ཆགས་མེད་པའི་HTTPMམཐུད་ཀ་རྒྱུད་དེ་ཕབ་བཤུས་ངོས་ལེན་མེད། (HTTPS བེད་སྤྱོད་དང་ཡང་ན་དམིགས་སྟོན་། --no-https-check){apkfilename}" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd sync ཕྱོགས་སྟོན།{path}1 དེ་ནས {url} དང་སུབས།" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "s3cmd sync ཕྱོགས་སྟོན།{path}1 དེ་ནས {url} དང་སུབས།" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py #, fuzzy msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "local_copy_dir \"fdroid\"གིས་མཇུག་སྐྱོང་མིན་འདུག་ : \"{path}1\"" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "རོགས་པ་བྱེད་པའི་འཕྲིན་ཐུང་སྟོན་ནས་ཕྱིར་ཐོན།" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "APK མིང་རྟགས་, ཡིག་ཆའི་འགྲོ་ལམ་མམ་ཡང་ན། HTTPS URL." #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "tarballའབྱུང་ཁུངས་མཆོང་རྒྱག་རྒྱབ་བཞིན་པ།:{path}" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "གཤམ་གྱི་རྩོད་པ་དེ་དག་དགོས།:%s" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "རེ་བ་མེད་པའི་གདམ་ཀ་ཅན་གྱི་ཚིག་སྒྲུབ།:%s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "ངོས་འཛིན་མི་ཐུབ་པའི་ parser %(parser_name)r (གདམ་ཀ།: %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "ངོས་འཛིན་མི་ཐུབ་པའི་རྩོད་པ།: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "'{config_file}' སྒང་གི་བདེ་ཆགས་མེད་པའི་ཆོག་མཆན་ (ངེས་པར་དུ། 0600)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "བེད་སྤྱོད།: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "Apache libcloud བེད་སྤྱོད་བྱས་པའི་ཐོག་ {url}1དང་མཉམ་དུ་ཟླ་སྒྲིལ་གཏོང་།" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "{0} མཉེས་ཆས་, {1} key aliases" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) ལ་རྒྱབ་ལྗོངས་ཡིག་ཆ་མིན་འདུག!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} ལ་མིང་ཡོད་མ་རེད། !དེའི་ཚབ་ལ་ཐུམ་སྒྲིལ་མིང་བེད་སྤྱོད་བྱེད།." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "{appid}1: ངོས་འཛིན་མི་ཐུབ་པའི་ extlib {path}2 བཟོ་སྐྲུན་ནང་ལ '{versionName}3'" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "{path} is not a standard config file!" msgstr "'sdk_path' འདི་ 'config.yml' ནང་སྒྲིག་ཐུབ་མ་སོང་།!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "{path} ལ་ཆེ་ཆུང་མེད།!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "{path}: {error}" msgstr "ཀློག་མི་ཐུབ།{path}: {error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "{} བཟོ་སྐྲུན་བྱེད་མི་ཐུབ།" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "{} བཟོ་སྐྲུན་ལེགས་སྒྲུབ།" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2041862 fdroidserver-2.4.0/locale/ca/0000755000175000017500000000000014770510164014546 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/ca/LC_MESSAGES/0000755000175000017500000000000014770510164016333 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/ca/LC_MESSAGES/fdroidserver.po0000644000175000017500000027275114770507747021424 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Rubén , 2023. # pitroig , 2024, 2025. # raulmagdalena <4omoald1a@mozmail.com>, 2024. # Adrià Martín , 2024. # unmes , 2024. # Joan Pujolar , 2024. # Ecron , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.1-273-g54e84d87\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2025-01-30 12:31+0000\n" "Last-Translator: pitroig \n" "Language-Team: Catalan \n" "Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.10-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "Clau pública SSH que s'utilitzarà com a clau de desplegament:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "{path} codificat per a la variable secreta DEBUG_KEYSTORE:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" no té cap fitxer de metadades coincidents!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "\"local_copy_dir\" {path} no existeix!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" ja està instal·lat en {dev}." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "\"{path}\" conté {name} ({version}) recent" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "\"{path}\" existeix, però s3cmd no està instal·lada!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "\"{path}\" no és un format de fitxer compatible (utilitza: metadata/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "\"{path}\" està signat per una clau que no està permesa:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" no és un URL vàlid!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: errada: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "%d APKs no han pogut ser signats o verificats." #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d problemes trobats" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "no es pot cridar a %r" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "%s no ha produït cap dictat!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "%s té un SHA-256 dolent: %s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s no és un camp de compilació acceptat" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' no s'ha trobat a config.yml!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "'keystore' és NONE i 'smartcardoptions' està en blanc!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "'keystore' no s'ha trobat a config.yml!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "'keystorepass' no s'ha trobat a config.yml!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' no s'ha trobat a config.yml!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "\"obligatori\" és un argument no vàlid per a posicionals" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "'sdk_path' no establert a config.yml!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' és massa antic, fdroid requereix build-tools-{version} o superior." #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "Error en l'execució de '{path}'." #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' té un format invàlid; hauria de ser un diccionari!" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' no és un {field} vàlid a {appid}. Expressió regular: {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' no és un {field} vàlid; hauria de ser {pattern}" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "--merge-request només funciona amb un sol ID d'aplicació!" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...ha fallat la comprovació de {appid} : {error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() no definida" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "Falta /issues" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "Cal que l'argument sigui un URL!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "Les signatures APK tenen certificats diferents a {path}:" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "Afegiu signatures PGP mitjançant GnuPG per a paquets en un dipòsit" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "Afegiu una clau de firma a un dipòsit sense signar" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "Afegiu els fitxers d'esquelet per a APKs que no en tinguin" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "S'està afegint un dipòsit nou només per a {name}" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "Àlies de la clau de signatura del dipòsit al magatzem de claus" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "Manca AllowedAPKSigningKeys però s'ha subministrat el binari de referència" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "Permet especificar una revisió diferent (o branca git) per a la importació inicial" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "Replica també la secció completa de l'arxiu" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "També avisa sobre els problemes de formatació, com ara rewritemeta -l" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "Biblioteca Android AAR" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "Fitxer APK de l'Android" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "Codi DEX Android" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "No s'ha trobat l'SDK d'Android a {path}!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "El camí SDK d'Android '{path}' no existeix!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "El camí SDK d'Android '{path}' no és un directori!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "No s'ha trobat l'eina Android SDK {cmd}!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "L'aplicació té binaris però no té el corresponent certificat AllowedAPKSigningKeys per fixar." #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "L'aplicació té NoSourceSince o ArchivePolicy \"0 versions\" o 0 però AutoUpdateMode o UpdateCheckMode no són None" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "L'aplicació és a '{repo}', però té un enllaç a {url}" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "La versió de l'aplicació té binari, però no té el corresponent certificat AllowedAPKSigningKeys per fixar." #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "No és necessari afegir .git" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "S'està arxivant {apkfilename} amb una signatura no vàlida!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode amb UpdateCheckMode: HTTP ha de tenir un patró." #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "No automàtic a totes les demandes." #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "Sí automàtic a totes les demandes." #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "Tipus d'entrada incorrecta \"{mirrortype}\" a la configuració de miralls: {mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "URL base a la rèplica, podeu incloure la clau de signatura de l'índex utilitzant la cadena de consulta: ?fingerprint=" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "La branca '{branch}' utilitzada com a publicació en la construcció '{versionName}'" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "La branca '{branch}' s'utilitza com a entrega al srclib '{srclib}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "Enllaç simbòlic trencat: {path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "Construeix un paquet des de l'origen" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "Construeix totes les aplicacions disponibles" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "Construcció generada per `fdroid import` -elimina la línia de desactivació una vegada llesta" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "El dipòsit git de metadades de construcció té canvis sense publicar!" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "Construeix només la versió més recent de cada paquet" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "S'ha construït el dipòsit basat en \"%s\" amb aquesta configuració:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "No es pot actualitzar automàticament l'aplicació sense el CurrentVersionCode" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "No es pot construir a causa d'un error {} en escanejar" msgstr[1] "No es pot construir a causa d'errors {} en escanejar" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "No es pot reescriure \"{path}\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "Les categories '%s' no són vàlides" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "No s'han definit categories" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "Categoria \"{category}\" definida però no utilitzada per a cap aplicació!" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Cerca actualitzacions a les aplicacions" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "S'està comprovant l'arxivat per a {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Actualització neta - no utilitza la memòria cau, reprocessa tots els APK" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "Color de l'egressió del registre" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Llista de categories separades per comes." #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "Ordre '%s' no reconeguda.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "Publicar els canvis" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "Sancioneu els canvis, publiqueu-los i després feu una sol·licitud de fusió" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "Definicions conflictives de \"{field}\" entre .yml i fitxers localitzats:" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Arguments conflictius: no es poden especificar al mateix temps '--verbose' i '--quiet'." #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "No s'ha pogut trobar '{command}' al vostre sistema" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "No s'ha pogut trobar el codi de versió més recent" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "No s'ha pogut trobar el codi de versió més recent" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "No s'ha pogut trobar {path} per eliminar-lo" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "No s'ha pogut obrir APK {path} per a l'anàlisi: " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "No s'ha pogut analitzar la mida \"{size}\", tipus incorrecte \"{type}\"" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "No s'ha pogut trobar l'identificador de l'aplicació" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "No s'ha pogut trobar cap informació de versió" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "No s'ha pogut trobar l'identificador del paquet" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "Rebutjant covardament sobreescriure la configuració de la clau de signatura existent!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "S'ha creat el contenidor nou \"{name}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "S'està creant \"{path}\" per configurar s3cmd." #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Creating empty {config_file}" msgstr "S'està llegint '{config_file}'" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "S'està creant el directori de registre" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "S'està creant un contenidor S3 nou: {url}" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "S'està creant el directori de sortida" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "S'està creant l'índex signat amb aquesta clau (SHA256):" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "S'està creant el directori temporal" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "S'està creant un índex sense signar en preparació per a la signatura" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "CurrentVersionCode {cv} és menys que l'entrada de construcció més antiga {versionCode}" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "DEBUG theKEYSTORE no està definit o el valor és incomplet" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "Esborra els APK o els OBB sense metadades del dipòsit" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "S'està suprimint l'arxiu, el dipòsit és massa gran ({size} màxim {limit})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "S'està suprimint l'historial del mirall de git, el dipòsit és massa gran ({size} màxim {limit})" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "S'està suprimint el fitxer desconegut: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "La descripció '%s' és només el resum de l'aplicació" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "La descripció té una línia duplicada" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "La descripció de la longitud {length} és superior al límit de {limit} caràcters" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "Volíeu dir config/{name}.yml?" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "Volíeu dir {code}?" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "No afegeixis 'disable:' a les entrades generades de construcció" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "No despleguis els fitxers nous al dipòsit" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "No incloeu \"{path}\" a l'URL!" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "No preguntis pel camí de l'SDK de l'Android, simplement falla" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "No eliminis les claus privades generades de l'espai de claus" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "No crea un arxiu tar d'origen, útil quan es prova una construcció" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "No actualitzar el dipòsit, útil quan es prova una construcció sense connexió a Internet" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "No usis les sumes de verificació \"rsync\"" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "Baixeu l'F-Droid.apk amb els miralls que filtren menys dades a la xarxa" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Baixa les rèpliques completes dels petits dipòsits" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "La baixada del repositori ja ha fallat una vegada, no s'ha tornat a provar." #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "Ha fallat la baixada de {url}. {error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "S'ha ignorat la declaració de característiques no adients per duplicada a {path}!" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "Entrada duplicada \"%s\" a la configuració de les rèpliques!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "Enllaç duplicat a '{field}': {url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "ERROR: %(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "ERROR: S'ha eliminat la subordre \"servidor\", useu \"deploy\"!" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "ERROR: tipus CI no suportat, pedaços benvinguts!" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "ERROR: no s'admet l'amfitrió git \"%s\", els pedaços són benvinguts!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "ERROR: {key} a {path} no és \"arxiu\" o \"dipòsit\"!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "ERROR: {key}:{subkey} a {path} no està a les claus permeses: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "La codificació està establerta a '{enc}' fdroid podria tenir problemes de codificació. Si us plau, establiu-lo a 'UTF-8' per obtenir els millors resultats." #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" "Introduïu aquí el camí cap a l'SDK d'Android (%s):\n" "> " #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "La variable d'entorn {var} de {configname} no està establerta!" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "La variable d'entorn {var} de {configname} no està establerta!" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "S'ha produït un error en desplegar 'github_releases', no hi ha {}. (Pot ser necessari executar `fdroid update` primer.)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "S'ha produït un error en obtenir l'adreça del dipòsit" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "Sortiu amb un codi non-zero si s'han trobat problemes" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "Extreu les metadades de l'aplicació des d'un dipòsit de codi font" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "Extreu les signatures dels APKs" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "No s'ha pogut baixar l'F-Droid.apk des de cap font coneguda!" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "No s'ha pogut copiar {path}: {error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "No s'han pogut recuperar les signatures per a '{apkfilename}': {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "No s'ha pogut llegir {path}: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "No s'ha pogut canviar la mida de {path}: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "No s'ha pogut crear el contenidor S3: {url}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "No s'ha pogut obtenir la informació APK, s'està suprimint {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "No s'ha pogut obtenir la informació de l'APK, s'ometrà {path}" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "No s'ha pogut obtenir l'empremta digital de la clau de signatura APK" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "No s'ha pogut instal·lar '{apkfilename}' a {dev}: {error}" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "No s'ha pogut signar l'aplicació" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "S'ha establert buildserverid des de la MV: {buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "Signatures fixades per a '{apkfilename}' -> '{sigdir}'" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "El fitxer ha desaparegut en processar-lo: {path}" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "Finalitzat" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Etiquetes HTML prohibida" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "Força la construcció d'aplicacions desactivades i continua sense tenir en compte els problemes d'escaneig. Només es permet en mode de prova." #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "Força aturar la construcció després de {0} segons de temps d'espera!" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "Força l'escaneig de les aplicacions i construccions desactivades." #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "S'ha trobat el gràfic \"{path}\" sense metadades per a l'aplicació «{name}»!" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "S'ha trobat un fitxer de finançament incorrecte \"{path}\" per a \"{name}\":" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "S'han trobat aplicacions no vàlides als arguments" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "S'han trobat versionsCodes no vàlides per a algunes aplicacions" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "S'han trobat múltiples fitxers de bloc de signatura JAR a {path}" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "S'han trobat múltiples certificats de signatura!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "S'han trobat múltiples fitxers de metadades per a {appid}" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "S'han trobat múltiples certificats de signatura per al dipòsit." #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "No s'ha trobat cap certificat de signatura per al dipòsit." #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "S'ha trobat un no-fitxer a %s" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "S'ha trobat {apkfilename} al {url}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "S'han trobat {count} problemes al {filename}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "S'han trobat {count} avisos al {filename}" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "S'han generat metadades d'esquelet per a {appid}" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "Ha fallat la comprovació del Git de «%s»" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "Ha fallat la neteja del Git" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "Ha fallat l'obtenció del Git" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Ha fallat el set-head remot del Git: «%s»" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Ha fallat el restabliment del Git" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "Ha fallat l'inici del submòdul Git" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "Ha fallat la sincronització del submòdul Git" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "Ha fallat l'actualització del submòdul del Git" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "HTTPS s'ha d'utilitzar amb URL de Subversion!" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "Si una rèplica de git es fa gran, permet que l'arxiu se suprimeixi" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "Si aquesta pujada falla, proveu de pujar manualment a {url}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "S'ignorarà '{field}' a les metadades '{metapath}' perquè està obsolet." #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "S'ignorarà l'entrada FUNDING.yml més llarga de 2048: %s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "S'ignorarà l'element incorrecte al manifest: %s" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "{oldfile} és obsolet, utilitzeu {newfile}" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "S'ignorarà el paquet sense metadades: " #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "S'estan ignorant les dades de la memòria cau obsoleta per a {apkfilename}" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "Inclou els APK que estan signats amb algorismes desactivats com MD5" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "Inclou els fitxers .asc de signatura PGP a la rèplica" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "Inclou els registres de construcció al mirall" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "Inclou els arxius tar d'origen al mirall" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "S'inclouen les metadades de %s@%s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "S'inclouen les metadades de {path}" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "S'estan inicialitzant els submòduls" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "Instal·la totes les aplicacions signades disponibles" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "Instal·la els paquets integrats en dispositius" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "S'està instal·lant %s..." #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "S'està instal·lant '{apkfilename}' a {dev}..." #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "Interactua amb el servidor HTTP del dipòsit" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "APK no vàlid" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "AutoUpdateMode no vàlid: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "UpdateCheckMode no vàlid: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "VercodeOperation no vàlid: {field}" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "VercodeOperation no vàlid: {invalid_ops}" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "ID d'aplicació {appid} invàlid" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Llista de pics no vàlida" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "Nom no vàlid per al fitxer publicat: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "ndk no vàlid: entrada a la construcció: \"{ndk}\"" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "Redireccions no vàlides a no HTTPS: {before} -> {after} " #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "Metadades scrlib no vàlides: '{file}' no existeix" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "Metadades srclib no vàlides: no s'ha pogut analitzar '{file}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "Metadades srclib no vàlides: clau desconeguda '{key}' a '{file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "No s'ha pogut verificar la signatura JAR: {path}" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "S'ha verificat la signatura JAR: {path}" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "Fitxer JAR del Java" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "No s'ha trobat el Java JDK! Instal·leu-lo en una ubicació estàndard o establiu java_paths!" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "Classe compilada de Java" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "No s'ha trobat el jarsigner de Java! Instal·leu-lo en una ubicació estàndard o establiu java_paths!" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "Javascript en els atributs HTML src" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "Ha fallat el manteniment de la construcció \"{apkfilename}\"" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "Keystore per a la clau de signatura:\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "La clau de depuració coneguda s'utilitza a AllowedAPKSigningKeys: " #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "L'última publicació utilitzada '{commit}' sembla una etiqueta, però UpdateCheckMode és '{ucm}'" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "Els mètodes de donació de Liberapay pertanyen al camp Liberapay: field" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "Llista els fitxers que es reformatitzaran (execució seca)" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "Configuració regional inclosa a l'URL de f-droid.org" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "Fes que la construcció s'aturi amb excepcions" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "Espills de dipòsit mal formats." #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "Línia mal formada de serverwebroot:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "S'ha arribat a la profunditat màxima de recursivitat en el fitxer ZIP: %s" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Reflecteix el dipòsit complet i l'arxiu, tots els tipus de fitxers." #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "Falta el directori de sortida" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "S'estan movent les declaracions de característiques no adients als fitxers localitzats:" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "Ni \"repo_pubkey\" ni \"keystorepass\" estan establerts a config.yml" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "No hi ha APK per al paquet: %s" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "No s'ha trobat cap SDK d'Android!" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "No s'ha trobat cap dispositiu adjunt" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "No s'han trobat dispositius per a `adb install`! Connecteu-ne algun." #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "No hi ha cap empremta digital a l'URL." #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "No hi ha submòduls git disponibles" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "No s'ha pogut trobar cap projecte de gradle. Voleu especificar --subdir?" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "No s'ha trobat informació." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "No s'ha trobat cap etiqueta coincident" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "No s'ha trobat cap versió SDK mínima a {0}, s'usarà el valor per defecte (3)." #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "No cal especificar que l'aplicació és programari lliure" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "No cal especificar que l'aplicació és per a Android" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "No s'ha establert cap opció! Editeu el vostre config.yml per establir almenys un d'aquests:" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "No s'ha especificat cap paquet" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "No hi ha disponible APK signat per a %s" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "No hi ha cap directori de sortida signat - res a fer" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "No s'ha trobat cap certificat de signatura a {path}" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "No existeix el paquet: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "No existeix el codi de versió {versionCode} per a l'aplicació {appid}" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "No s'ha trobat cap etiqueta" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "No hi ha cap directori sense signar - res a fer" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "No s'ha pogut trobar cap informació de versió." #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "Definició de mida no vàlida: \"{}\"" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "No hi ha res a fer" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "No hi ha res a fer per {appid}." #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "Ara establiu-los a config.yml:" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "El fitxer OBB té una versionCode({integer}) més nova que qualsevol APK:" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "El nom de fitxer OBB ha de començar amb \"main.\" o \"patch.\":" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "El nom del paquet de l'OBB no coincideix amb un APK compatible:" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Màquina fora de línia, s'ometrà la generació del mirall git fins al `fdroid deploy`" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "Un dels elements de configuració 'github_releases' manca el valor 'packageNames'. s'està ometent..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "Un dels elements de configuració 'github_releases' manca el valor 'projectUrl'. s'està ometent..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "Un dels elements de configuració 'github_releases' manca el valor 'token'. s'està ometent..." #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Només s'admeten PNG i JPEG per als gràfics, s'ha trobat: {path}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "Només processa aplicacions amb actualitzacions automàtiques" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Els mètodes de donació OpenCollective pertanyen al camp OpenCollective: field" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Informe de sortida JSON a un fitxer anomenat segons l'APK." #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "Sortida JSON a stdout." #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "JSON de sortida" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "Llicència general del projecte." #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "S'està reemplaçant el versionName en blanc a {apkfilename} des de les metadades: {version}" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "El paquet \"{appid}\" ja existeix" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "S'està analitzant el manifest a '{path}'" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "Cal una contrasenya amb el nom d'usuari" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "Camí al subdirectori principal del projecte Android, si no és a l'arrel." #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "Camí al SDK d'Android (de vegades establert a ANDROID_HOME)" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "Camí al dipòsit git a usar com a registre" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "Camí al magatzem de claus per a la clau de signatura del dipòsit" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Imprimeix la variable secreta al terminal per a copiar/enganxar fàcilment" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "El mode privat s'ha habilitat d'acord amb el vostre codi regional ({country_code})." #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "Problema amb el fitxer ZIP: %s, error %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "Problema amb xml a '{path}'" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "Processa les actualitzacions automàtiques" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "S'està processant {apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "S'està processant {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "Produeix XML/JSON llegible per humans per a fitxers d'índex" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "URL del projecte des del qual importar." #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "S'ha d'evitar la puntuació" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "Empeny el registre a aquest repositori remot git" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "S'està enviant el registre de transparència binària a {url}" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "Ha fallat l'enviament al servidor remot!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "S'està pujant a {url}" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "Crea ràpidament un dipòsit nou" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "Llegeix tots els fitxers de metadades i surt" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "S'està llegint '{config_file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "Ha fallat la lectura del nompaquet/versioCodi/versioNom, l'APK no és vàlid: '{apkfilename}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "Ha fallat la lectura del nompaquet/versioCodi/versioNom, l'APK no és vàlid: '{apkfilename}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "S'està llegint {apkfilename} des de la memòria cau" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Actualitza i cau les regles de l'escàner i les signatures de la xarxa" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "Elimina el fitxer tar d'origen i qualsevol APKs si s'ha verificat correctament." #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "S'estan suprimint els fitxers especificats" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "S'està suprimint {path}\"" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "Canvia el nom dels fitxers APK que no coincideixin amb package.name_123.apk" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "S'està resignant {apkfilename} amb la depuració proporcionada per debug.keystore" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "Canvia la mida de totes les icones que excedeixen la mida màxima del píxel i surt" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "Restringeix la sortida a avisos i errors" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "S'està tornant a baixar: %s" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Reescriu tots els fitxers de metadades" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "S'està reescrivint '{appid}'" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "Executa en el diposit git que té canvis no publicats" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "Executeu {cibase} per trobar -debug.apk. i omet repo_basedir {repo_basedir}" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "Executa rewritemeta per esmenar el format" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "S'està executant la primera passada amb la comprovació MD5 desactivada" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "S'està executant wget a {path}" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "El SHA-256 de {url} no coincideix amb l'entrada!" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "Escaneja els APK(s) resultants per a les classes conegudes no lliures." #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "Escaneja el codi font d'un paquet" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "L'escàner ha trobat {count} problemes a {apk}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "L'escàner ha trobat {count} problemes a {appid}:" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "S'han trobat {count} problemes a {appid}:{versionCode}:" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "L'escàner ha trobat {} problema" msgstr[1] "L'escàner ha trobat {} problemes" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "S'està escanejant l'APK en cerca de blocs signants addicionals." #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "S'està escanejant l'APK amb dexdump per a les classes no lliures conegudes." #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "Estableix NDK {release} ({version}) cap amunt" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "Estableix el rellotge a aquest temps utilitzant:" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "Estableix el nombre màxim de llançaments al dipòsit abans que s'arxivin els més antics" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "Estableix el límit de fitxer obert a {integer}" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "Configura una construcció d'aplicació per a un dipòsit de construcció nocturn" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "Ha fallat l'establiment del límit de fitxer obert: " #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "S'està establint el temps d'espera de {0} segons per a aquesta construcció" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "Signa i publica els paquets al dipòsit" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "Signa els índexs creats amb update --nosign" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "Omet l'escaneig del codi font pels binaris i altres problemes" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "S'està saltant \"{apkfilename}\" amb una signatura no vàlida!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "S'ometrà la rèplica de les pàgines del GitLab perquè el dipòsit és massa gran (>%.2fGB)!" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "S'està ometent la generació de l'índex per a {appid}" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "S'està ometent {apkfilename} amb una signatura no vàlida!" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "Omet {appid}: desactivat" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "Especifiqueu una carpeta local a la qual sincronitzar el dipòsit" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "Especifiqueu un fitxer d'identitat que s'ha de proporcionar a SSH per a la sincronització" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "Especifiqueu quin fitxer de depuració del magatzem de claus s'ha d'utilitzar." #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "Escampa encara més informació de la normal" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "S'està suprimint la signatura de misteri de {apkfilename}" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "El resum '%s' només és el nom de l'aplicació" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "El resum de la longitud {length} és superior al límit de {limit} caràcters" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "El rellotge del sistema és més antic que la data a {path}!" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "El mode d'actualització de les etiquetes només funciona per als dipòsits git, hg, bzr i git-svn actualment" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "Mode d'actualització de les etiquetes utilitzat a git-svn, però el repositori no s'ha configurat amb etiquetes" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Mode de prova: posa la sortida només al directori tmp, i sempre construeix, fins i tot si la sortida ja existeix." #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "El codi de la versió de l'OBB ha de venir després de \"{name}.\":" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "L'URL base pel registre del dipòsit (predeterminat: https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "El directori on escriure la rèplica" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "El fitxer que s'inclourà al dipòsit (camí o glob)" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "L'empremta digital del repositori no coincideix." #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "El directori arrel per a local_copy_dir \"{path}\" no existeix!" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "Hi ha una col·lisió de keyalias - s'ha aturat la publicació" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "Aquestes són les aplicacions que s'han arxivat del dipòsit principal." #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "Aquesta ordre no s'ha d'utilitzar mai per a reflectir f-droid.org! Una còpia completa requereix més de 600 GB." #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "Aquest és un dipòsit d'aplicacions que s'utilitzaran amb l'F-Droid. Les aplicacions d'aquest dipòsit són o bé binaris oficials construïts pels desenvolupadors originals de l'aplicació, o bé binaris construïts a partir del codi font per l'administrador de f-droid.org utilitzant les eines a https://gitlab.com/fdroid." #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "Aquest dipòsit ja té metadades locals: %s" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" "Per completar la configuració, afegiu els APKs a \"%s\"\n" "i executeu \"fdroid update -c; fdroid update\". Potser també voleu editar\n" "\"config.yml\" per a definir l'URL, el nom del dipòsit i més. També hauries de configurar\n" "una clau de signatura (pot ser que s'hagi generat automàticament una clau temporal).\n" "\n" "Per a més informació: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "i https://f-droid.org/docs/Signing_Process" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "Per utilitzar awsbucket, awssecretkey i awsaccesskeyid també s'han d'establir a config.yml!" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "Per utilitzar rclone, rclone_config i awsbucket s'han d'establir a config.yml!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "L'URL ha de començar per https:// o http://" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "No s'han d'utilitzar els escurçadors d'URL" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "URL {url} a la descripció: {error}" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "Etiqueta de llicència inesperada \"{}\"! Utilitza només les etiquetes aprovades per FSF o OSI de https://spdx.org/license-list" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Etiqueta de llicència inesperada \"{}\"! Utilitza només les etiquetes de llicència configurades al fitxer de configuració" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "Entrada desconeguda {key} a {configname}" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "S'ha trobat una excepció desconeguda!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "Fitxer desconegut '{filename}' a la construcció '{versionName}'" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "Format de metadades desconegut: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "Format de metadades desconegut: {path} (utilitzeu: *.yml)" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "Versió desconeguda de l'aapt, pot causar problemes: " #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "Espai inicial innecessari" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "Espai final innecessari" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "Camp d'aplicació no reconegut '{fieldname}' a '{path}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Indicador de construcció no reconegut '{build_flag}' a '{path}'" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "Tipus de fitxer \"{extension}\" no admès per al gràfic del dipòsit" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "S'ha trobat un fitxer de gràfics no admès: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "Extlib no utilitzada a %s" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "Fitxer no utilitzat a %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "Camí de l'escandelete no utilitzat: %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "Camí de scanignore no utilitzat: %s" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Actualitza la informació del dipòsit amb paquets nous" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "Actualitza l'informe de transparència binari amb un nou URL" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData té un URL no vàlid: {url}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "UpdateCheckData ha de coincidir amb el codi de versió com a enter (\\d o [0-9]): {codeex}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "UpdateCheckData ha d'utilitzar l'URL HTTPS: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "UpdateCheckData no és un URL vàlid: {url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode està establert però sembla que encara no s'han executat les revisions." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName està establert a l'identificador d'aplicació conegut, es pot eliminar" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "S'està pujant {apkfilename} a androidobservatory.org" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "S'està pujant {apkfilename} a virustotal" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Usa /HEAD en lloc de /master o /main per apuntar a un fitxer a la branca predeterminada" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Utilitzeu `fdroid update -c`per a crear-lo." #: ../fdroidserver/build.py msgid "Use build server" msgstr "Utilitza el servidor de construcció" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "Usa la data de l'APK en lloc de l'hora actual per als APKs nous afegits" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "S'està utilitzant \"{path}\" per configurar s3cmd." #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "S'està utilitzant \"{path}\" per a sincronitzar amb l'emmagatzematge remot." #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "Ús de la signatura APK v2" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "Ús de la signatura APK v3" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "Ús de la signatura JAR" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Utilitzant el jarsigner de Java, no es recomana verificar APKs! Useu l'apksigner" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "S'està utilitzant un diccionari en blanc en lloc del contingut de {path}!" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "S'està utilitzant l'espai de claus existent \"{path}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "S'està utilitzant el rclone per a sincronitzar-lo: {url}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "S'està utilitzant s3cmd per sincronitzar amb: {url}" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Les ordres vàlides són:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "Verifiqueu contra la còpia local a la memòria cau en lloc de tornar a baixar." #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "Verifica la integritat dels paquets descarregats" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "Verificació de la signatura de l'índex:" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "S'està verificant el paquet {path} l'apksigner." #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "La clau de l'API VirusTotal no pot pujar fitxers més grans de 32 MB, utilitzeu {url} per pujar {path}." #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Avisa de possibles errors a les metadades" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "Fitxer binari WebAssembly" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Quan es configura per als índexs signats, només es creen els índexs no signats en aquesta fase" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "Quan es mostra tot el «yamllint» del repositori està desactivat de manera predeterminada. Aquesta opció força la «yamllint» independentment." #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "Quan signar o verificar falla, sortiu amb un codi d'error." #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "Voleu baixar i instal·lar l'F-Droid.apk mitjançant adb? (SÍ/no)" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "Voleu baixar les aplicacions des de f-droid.org? (SÍ/no)" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'Nom distint' utilitzat en generar claus" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "Podeu utilitzar ANDROID_HOME per establir el camí al vostre SDK, és a dir:" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "arxiu de fitxers ZIP" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "adb informa que {serial} és: «{status}»!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "s'està afegint el fitxer d'identitat a {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "s'està afegint a {name}: {path}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "opció ambigua: %(option)s podria correspondre amb %(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "apksigner en build-tools;{version} passa APKs sense sigantures v3 vàlides, ingnorant." #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "No s'ha trobat l'apksigner! No es poden signar o verificar els APK moderns" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "No s'ha trobat l'apksigner, és necessari per signar!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "ID de l'aplicació del fitxer en què s'ha d'operar" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "ID de l'aplicació amb versió opcionalCode en el formulari APPID[:VERCODE]" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "archive_url necessita acabar amb /archive" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "argument \"-\" amb mode %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "argument %(argument_name)s: %(message)s" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "s'està provant la connexió SSH per comprovar la clau de desplegament:" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "no es pot analitzar l'especificació de la «scrlib» (no és una cadena): '{}'" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "no es pot obrir '%(filename)s': %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "no es pot obrir l'URL no-https: '{};" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "no s'han pogut trobar els srclibs requerits: \"{path}\"" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "no es poden tenir múltiples arguments de subanalitzador" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "no es poden fusionar les accions - dos grups s'anomenen %r" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "no es pot publicar l'actualització. Heu establert la clau de desplegament?" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "s'està clonant {url}" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "ordres dels mòduls del connector:" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "cadena d'opció conflictiva: %s" msgstr[1] "cadenes d'opció conflictiva: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "àlies de subanalitzador conflictiu: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "subanalitzador conflictiu: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "no s'ha pogut analitzar '{path}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "no s'ha pogut analitzar l'especificació «srclib» (no s'ha especificat cap nom): '{}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "no s'ha pogut analitzar l'especificació «srclib» (no s'ha especificat cap referència): '{}'" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "s'ha creat {path}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "la versió actual és més nova: antic vercode={old}, nou vercode={new}" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "s'està suprimint: dipòsit/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "fitxer de dependència sense blocatge" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "s'ha desplegat el registre de procés {path} a {dest}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "dest= és obligatori per opcions com %r" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "s'està baixant '{}'" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "ha fallat la baixada de signatures de l'escàner des de '{}'" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "binari executable, possiblement codi" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "s'esperava l'argument %s" msgstr[1] "s'esperaven els arguments %s" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "s'esperava almenys un argument" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "s'esperava com a màxim un argument" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "s'esperava un argument" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "fdroid [] [-h|--help|--version|]" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "recupera l'última versió de les signatures del web" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "força que els errors de metadades (predeterminat) siguin avisos o s'ignorin." #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "Ha fallat el clon de «git svn»" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "arxiu de fitxers gzip" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "s'ha ignorat l'argument explícit %r" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1 ha de tenir una signatura, utilitzeu `fdroid signindex` per a crear-la!" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 ha de tenir una signatura, utilitzeu `fdroid signindex`per a crear-la!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "valor %(type)s no vàlid: %(value)r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "elecció no vàlida: %(value)r (trieu de %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "el valor conflict_resolution no és vàlid: %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "cadena d'opció no vàlida %(option)r: ha de començar amb un caràcter %(prefix_chars)r" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "no s'ha trobat l'ipfs_cid, s'ometrà la generació CIDv1" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "la darrera recepta de construcció és més nova: antic vercode={old}, nou vercode={new}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "local_copy_dir no acaba amb \"fdroid\", potser voldríeu dir: \"{path}\"" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "local_copy_dir ha de ser un camí absolut!" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "local_copy_dir ha de ser directori, no un fitxer!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "el mirall '%s' no acaba amb 'fdroid'!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "miralls establerts dues vegades, a config.yml i {path}!" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "els arguments mútuament excloents han de ser opcionals" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "la propera actualització de la memòria cau de {name} vencerà a {time}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "no hi ha cap \"icona\" a {appid}" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "no s'ha subministrat cap APK" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "no s'ha trobat cap informació de versió" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "no està permès amb l'argument %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "es requereix un dels arguments %s" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "només accepta cadenes, llistes i tuples" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "opcions" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "s'està sobreescrivint {path}" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "arguments posicionals" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "ha fallat el desplegament del registre de processos {path} a {dest}!" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "falta la signatura al binari de referència" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "rebutja la baixada via connexió HTTP insegura (utilitzeu HTTPS o especifiqueu --no-https-check): {apkfilename}" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "repo_icon \"repo/icons/%s\" no existeix, generant marcador de posició." #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "repo_url ha d'acabar amb /repo" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "falta el rsync o està trencat: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd sincronitza els índexs {path} a {url} i suprimeix" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "s3cmd sincronitza els índexs de {path} a {url} i esborra els suprimits" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "la memòria cau de l'escàner està mal formada! Podeu netejar-la amb: '{clear}'" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "serverwebroot: el camí no acaba amb \"fdroid\", potser volíeu dir una d'aquestes:" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "biblioteca compartida" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "mostra aquest missatge d'ajuda i surt" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "APK signat, ja sigui un camí de fitxer o un URL HTTPS." #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "s'omet el desplegament de registres de construcció complets: el contingut del registre està buit" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "s'omet el desplegament de registres de construcció complets: no està habilitat a la configuració" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "s'està ometent l'arxiu tar d'origen: {path}" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "manca el nom i/o @ de srclibs" #: ../fdroidserver/scanner.py msgid "static library" msgstr "biblioteca estàtica" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "el binari de referència proporcionat ha permès el signant {signer}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "els arguments següents són obligatoris: %s" #: ../fdroidserver/install.py msgid "true" msgstr "vertader" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "cadena d'opcions inesperada: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "analitzador desconegut %(parser_name)r (opcions: %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "arguments desconeguts: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "permisos a «{config_file}» insegurs (hauria de ser 0600)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "us: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "s'està utilitzant libcloud d'Apache per sincronitzar amb {url}" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com és limitant de velocitat, esperant tornar-ho a provar..." #: ../fdroidserver/install.py msgid "yes" msgstr "sí" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "{0} aplicació, {1} àlies de claus" msgstr[1] "{0} aplicacions, {1} àlies de claus" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) no té metadades!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "L'AndroidManifest.xml de {apkfilename} té una data incorrecta: " #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} no té nom! S'està utilitzant l'identificador de l'aplicació." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "{appid} de {path} no és un ID d'aplicació Android vàlid!" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "{appid} de {path} no és un nom de paquet Java vàlid!" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "{appid} té tant APK com fitxers: {files}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "{appid} no té {name}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "{appid}: Extlib {path} desconegut a la construcció '{versionName}'" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "{appid}: no s'ha especificat cap construcció, s'està executant en l'estat font actual" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "{appid}: {field} ha de ser un '{type}', però és un '{fieldtype}!'" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "{appid}: {field} ha de ser un '{type}', però és un '{fieldtype}'!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "{build_flag} ha de ser un enter, s'ha trobat: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "{build_flag} ha de ser llista o cadena, s'ha trobat: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "{file} està en blanc o corromput!" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" no existeix! Comproveu \"config.yml\"." #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "{path} ja existeix, s'ignoraran els resultats d'importació!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "{path} no existeix! Crea-ho executant:" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "{path} té una signatura de fitxer incorrecta \"{pattern}\", possible Janus exploit!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} ha estat marcat pel virustotal {count} vegades:" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "{path} no té l'emprempta correcta ({fingerprint})!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "{path} no és \"clau: valor\" dict, sinó un {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "{path} no és un fitxer de configuració estàndard!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "{path} no és una llista, sinó {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "{path} no és {expected_type}, sinó {datatype}!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "{path} és de mida zero!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "{path} més de 200MB, puja manualment: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "{path}: \"{code}\" no és un codi de país ISO313166-1 alfa-2 vàlid!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "{path}: {error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "{url} no acaba amb \"fdroid\", comproveu el camí de l'URL!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "{url} no comença amb «http»!" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "Ha fallat la construcció {}" msgstr[1] "Han fallat les construccions {}" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "{} construcció correcta" msgstr[1] "{} construccions correctes" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2041862 fdroidserver-2.4.0/locale/cs/0000755000175000017500000000000014770510164014570 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/cs/LC_MESSAGES/0000755000175000017500000000000014770510164016355 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/cs/LC_MESSAGES/fdroidserver.po0000644000175000017500000027220114770507747021434 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # mondstern , 2021. # Petr Novák , 2021. # Fjuro , 2022. # Filip Klopec , 2022. # Fjuro , 2022, 2023. # Daniel Hejduk , 2023. # Fjuro , 2024. # Jakub Boukal , 2024. # Fjuro , 2025. msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.0-95-gd7af22b\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2025-03-20 16:21+0000\n" "Last-Translator: Fjuro \n" "Language-Team: Czech \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n" "X-Generator: Weblate 5.11-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "Veřejný klíč SSH, který se použijte jako klíč pro nasazení:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "{path} zakódováno pro tajnou proměnnou DEBUG_KEYSTORE:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "„%s/“ nemá žádný odpovídající soubor metadat!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "Klíč „isPrimary“ by neměl být přidán k zrcadlům!" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "„local_copy_dir“ {path} neexistuje!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "Aplikace „{apkfilename}“ je již nainstalována na {dev}." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "„{path}“ obsahuje nedávné {name} ({version})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "„{path}“ existuje, ale s3cmd není nainstalován!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "„{path}“ není podporovaný formát souboru (použijte: metadata/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "„{path}“ je podepsáno klíčem, který není povolen:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "„{url}“ není platná adresa URL!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: chyba: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "Nepodařilo se podepsat nebo ověřit %d souborů APK!" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "nalezeno %d problémů" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%r není možné volat" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "%s nevytvořil dict!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "%s má špatný kód SHA-256: %s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s není akceptované pole sestavení" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "„keypass“ nebyl nalezen v souboru config.yml!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "„keystore“ je NONE a „smartcardoptions“ je prázdný!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "„keystore“ nebyl nalezen v souboru config.yml!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "„keystorepass“ nebyl nalezen v souboru config.yml!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "„repo_keyalias“ nebyl nalezen v souboru config.yml!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "„required je neplatný argument pro positionals" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "„sdk_path“ není nastavena v souboru config.yml!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "„{aapt}“ je příliš starý, fdroid vyžaduje build-tools-{version} nebo novější!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "„{path}“ se nepodařilo spustit!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "„{path}“ má neplatný formát, měl by to být slovník!" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "„{value}“ není platný {field} v {appid}. Vzor regex: {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "„{value}“ není platný {field}, měl by to být {pattern}" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "--merge-request beží pouze u jednoho appid!" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...checkupdate selhal pro {appid} : {error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() není definováno" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "/issues chybí" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "Jako argument je vyžadována adresa URL!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "Podpisy souborů APK mají rozdílné certifikáty v {path}:" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "Přidat podpisy PGP pomocí GnuPG pro balíčky v repozitáři" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "Přidat podpisový klíč repozitáře k nepodepsanému repozitáři" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "Přidat souborů metadat kostry pro soubory APK, u kterých chybí" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "Přidávám nový repozitář pouze pro {name}" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "Alias podepisovacího klíče repozitáře v keystore" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "Chybí AllowedAPKSigningKeys, ale byl dodán referenční binární soubor" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "Umožňuje zadat jinou revizi (nebo větev gitu) pro počáteční import" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "Také zrcadlit celou sekci archivu" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "Také varovat před problémy s formátováním, jako rewritemeta -l" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "Knihovna AAR pro Android" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "Soubor APK pro Android" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "Kód Android DEX" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "Android SDK nebylo nalezeno v {path}!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "Android SDK s cestou „{path}“ neexistuje!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "Cesta Android SDK „{path}“ není adresář!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "Nástroj Android SDK {cmd} nenalezen!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Aplikace má binární soubory, ale nemá odpovídající AllowedAPKSigningKeys pro připnutí certifikátu." #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "Aplikace má NoSourceSince nebo ArchivePolicy „0 versions“ nebo 0, ale AutoUpdateMode nebo UpdateCheckMode nejsou None" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "Aplikace je v repozitáři „{repo}“ ale má odkaz na {url}" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Verze aplikace má binární soubor, ale nemá odpovídající AllowedAPKSigningKeys pro připnutí certifikátu." #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "Přidání .git není nutné" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "Archivuji {apkfilename} s neplatným podpisem!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode s UpdateCheckMode: HTTP musí mít vzor." #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "Automatické ne na všechny výzvy." #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "Automatické ano na všechny výzvy." #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "Nesprávný typ záznamu „{mirrortype}“ v konfiguraci zrcadel: {mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "Základní adresa URL pro zrcadlení, může obsahovat klíč pro podepisování indexu pomocí řetězce dotazu: ?fingerprint=" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "Větev „{branch}“ použitá jako revize v sestavení „{versionName}“" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "Větev „{branch}“ použitá jako revize v srclib „{srclib}“" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "Rozbitý symlink: {path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "Sestavit balíček ze zdroje" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "Sestavit všechny dostupné aplikace" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "Sestavení vygenerováno pomocí `fdroid import` - odeberte řádek se zákazem, jakmile budete připraveni" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "Git repozitář s metadaty sestavení má neodeslané změny!" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "Sestavit pouze nejnovější verzi každého balíčku" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "Sestaven repozitář založený v „%s“ s touto konfigurací:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "Nelze automaticky aktualizovat aplikaci bez CurrentVersionCode" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Nelze sestavit kvůli {} chybě při skenování" msgstr[1] "Nelze sestavit kvůli {} chybám při skenování" msgstr[2] "Nelze sestavit kvůli {} chybám při skenování" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Nelze přepsat „{path}“" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "Kategorie „%s“ není platná" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "Kategorie nejsou nastavené" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "Kategorie „{category}“ je definována, ale není používána u žádných aplikací!" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Zkontrolovat aktualizace aplikací" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "Kontrola archivace u {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Čistá aktualizace - nepoužívat mezipaměti, znovu zpracovat všechny soubory APK" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "Obarvit výstup protokolu" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Seznam kategorií oddělený čárkami." #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "Příkaz „%s“ nebyl rozpoznán.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "Odeslat změny" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "Commitněte změny, proveďte a push a poté vytvořte žádost o sloučení" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "Konfliktní definice „{field}“ mezi soubory .yml a lokalizovanými soubory:" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Konfliktní argumenty: „--verbose“ a „--quiet“ nelze zadat současně." #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "Ve vašem systému se nepodařilo najít příkaz „{command}“" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Nepodařilo se najít kód poslední verze" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Nepodařilo se najít název poslední verze" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "Nepodařilo se nalézt {path} k odstranění" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "Nepodařilo se otevřít APK {path} pro analýzu: " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Nepodařilo se parsovat velikost „{size}“, nesprávný typ „{type}“" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Nepodařilo se nalézt ID aplikace" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "Nepodařilo se najít žádné informace o verzi" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "Nepodařilo se nalézt ID balíčku" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "Zbaběle odmítám přepsat existující nastavení podpisového klíče!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "Vytvořen nový kontejner „{name}“" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Vytváření „{path}“ pro konfiguraci s3cmd." #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "Vytvářím prázdný {config_file}" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Vytváření adresáře protokolů" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "Vytváření nového bucketu S3: {url}" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "Vytváření výstupního adresáře" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "Vytváření podepsaného indexu s tímto klíčem (SHA256):" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "Vytváření dočasné složky" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "Vytváření nepodepsaného indexu v rámci přípravy na podpis" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "CurrentVersionCode {cv} je menší než nejstarší položka sestavení {versionCode}" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "DEBUG_KEYSTORE není nastaven nebo je hodnota neúplná" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "Odstranit soubory APK a/nebo OBB bez metadat z úložiště" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "Mazání archivu, repozitář je příliš velký ({size} max {limit})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "Mazání historie git-mirroru, repozitář je příliš velký ({size} max {limit})" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "Mazání neznámého souboru: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "Popis „%s“ je pouze souhrn aplikace" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "Popis má duplicitní řádek" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "Popis délky {length} přesahuje limit {limit} znaků" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "Mysleli jste config/{name}.yml?" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "Mysleli jste {code}?" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "Nepřidávat „disable:“ k vygenerovaným položkám sestavení" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "Nevydávat nové soubory do repozitáře" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "V URL neuvádějte „{path}“!" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "Nevyžadovat cestu Android SDK, prostě selhat" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "Nemazat soukromé klíče vygenerované z keystore" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "Nevytvářet zdrojový tarball, užitečné při testování sestavení" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "Neobnovovat repozitář, užitečné při testování sestavení bez připojení k internetu" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "Nepoužívat kontrolní součty rsync" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "Stáhnout F-Droid.apk pomocí zrcadel, která do sítě vypouštějí méně informací" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Stáhnout kompletní mirrory malých repozitářů" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Stahování repozitáře již jednou selhalo, nezkouším to znovu." #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "Stahování {url} selhalo. {error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "Duplicitní prohlášení anti-funkcí v {path} bylo ignorováno!" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "Duplicitní záznam „%s“ v konfiguraci zrcadel!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "Duplicitní odkaz v „{field}“: {url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "CHYBA: %(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "CHYBA: Podpříkaz „server“ byl odebrán, použijte „deploy“!" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "CHYBA: nepodporovaný typ CI, opravy vítány!" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "CHYBA: nepodporovaný git host „%s“, opravy vítány!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "CHYBA: {key} v {path} není „archive“ nebo „repo“!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "CHYBA: {key} není platný klíč!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "CHYBA: hodnota klíče {key} by měla být typu {t}!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "CHYBA: {key}:{subkey} v {path} není v povolených klíčích: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "Kódování je nastaveno na „{enc}“, fdroid může mít problémy s kódováním. Pro dosažení nejlepších výsledků jej prosím nastavte na „UTF-8“." #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" "Zadejte cestu k Android SDK (%s) zde:\n" "> " #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "Proměnná prostředí {var} z {configname} není nastavena!" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "Proměnná prostředí {{env: {var}}} není nastavena!" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "Chyba při nasazení „github_releases“, {} není k dispozici. (Možná budete muset nejprve spustit `fdroid update`.)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "Chyba při získávání adresy repozitáře" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "Ukončit s nenulovým kódem při nalezení problémů" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "Extrahovat metadata aplikace ze zdrojového repozitáře" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "Extrahovat podpisy ze souborů APK" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "F-Droid.apk se nepodařilo stáhnout z žádného známého zdroje!" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "Chyba při kopírování {path}: {error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "Chyba při načítání podpisů pro „{apkfilename}“: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "Chyba při čtení {path}: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "Chyba při změně velikosti {path}: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "Chyba při vytváření bucketu S3: {url}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "Nepodařilo se získat informace o APK, mazání {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "Nepodařilo se získat informace o APK, přeskakování {path}" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "Nepodařilo se získat otisk podpisového klíče APK" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "Nepodařilo se nainstalovat „{apkfilename}“ na {dev}: {error}" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "Nepodařilo se podepsat aplikaci" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "Načteno buildserverid z VM: {buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "Načteny podpisy pro „{apkfilename}“ -> „{sigdir}“" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "Soubor zmizel při jeho zpracování: {path}" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "Dokončeno" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Zakázané značky HTML" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "Vynutí sestavení zakázaných aplikací a pokračuje bez ohledu na problémy se skenováním. Povoleno pouze v testovacím režimu." #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "Vynutit zastavení sestavování po uplynutí časového limitu {0} sekund!" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "Vynutit kontrolu zakázaných aplikací a sestavení." #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "Nalezena grafika „{path}“ bez metadat u aplikace „{name}“!" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "Nalezeno špatné financování souboru „{path}“ pro „{name}“:" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "V argumentech nalezena neplatná id aplikací" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "U některých aplikací nalezeny neplatné versionCodes" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "V {path} nalezeno několik souborů podpisových bloků JAR" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "Nalezeno více podpisových certifikátů!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "Nalezeno několik souborů metadat pro {appid}" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "Nalezeno více podpisových certifikátů pro repozitář." #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "Pro repozitář nenalezen žádný podpisový certifikát." #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "Nalezen ne-soubor v %s" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "Nalezen {apkfilename} na {url}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "Skener našel {count} problémů v {filename}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "Nalezeno {count} varování v {filename}" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "Vygenerována kostra metadat pro {appid}" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "Git checkout „%s“ se nezdařil" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "Git clean se nezdařil" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "Git fetch se nezdařil" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Git remote set-head se nezdařil: „%s“" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Git reset se nezdařil" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "Git submodule deinit se nezdařil" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "Git submodule sync se nezdařil" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "Git submodule update se nezdařil" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "U URL adres Subversion musí být použito HTTPS!" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "Pokud se git mirror stane příliš velkým, umožnit smazání archivu" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "Pokud toto nahrání selže, zkuste manuálně nahrát na {url}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "Ignorování pole „{field}“ v metadatech „{metapath}“, protože je zastaralé." #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "Ignorování vstupu FUNDING.yml delšího než 2048: %s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "Ignorování nesprávného prvku v manifestu: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "Ignoruji zastaralý {oldfile}, použijte {newfile}!" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Ignorování balíčku bez metadat: " #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "Ignorování zastaralých dat mezipaměti {apkfilename}" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "Zahrnout soubory APK, které jsou podepsané vypnutými algoritmy jako MD5" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "Zahrnout .asc soubory podpisu PGP do mirroru" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "Zahrnout protokoly sestavení do mirroru" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "Zahrnout zdrojové tarbally do mirroru" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "Včetně metadat z %s@%s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "Včetně metadat z {path}" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "Inicializace submodulů" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "Instalace všech dostupných podepsaných aplikací" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "Nainstalovat vestavěné balíčky na zařízení" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "Instalace %s..." #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "Instalace „{apkfilename}“ na {dev}..." #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "Interakce se serverem HTTP repozitáře" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "Neplatné APK" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "Neplatný AutoUpdateMode: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "Neplatný UpdateCheckMode: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "Neplatný VercodeOperation: {field}" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "Neplatný VercodeOperation: {invalid_ops}" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "Neplatné ID aplikace {appid}" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Neplatný seznam s odrážkami" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "Neplatný název pro publikovaný soubor: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "Neplatné ndk: záznam v sestavení: „{ndk}“" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "Neplatné přesměrování na jiný než HTTPS: {before} -> {after} " #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "Neplatná metadata scrlib: „{file}“ neexistuje" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "Neplatná srclib metadata: nelze parsovat „{file}“" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "Neplatná srclib metadata: neznámý klíč „{key}“ v „{file}“" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "Podpis JAR se nepodařilo ověřit: {path}" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "Ověření podpisu JAR: {path}" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "Soubor Java JAR" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "Java JDK nenalezeno! Nainstalujte jej do standardního umístění nebo nastavte java_paths!" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "Zkompilovaná třída Java" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "Java jarsigner nebyl nalezen! Nainstalujte jej do standardního umístění nebo nastavte java_paths!" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "Javascript v atributech HTML src" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "Uchovávání neúspěšného sestavení „{apkfilename}“" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "Úložiště klíčů pro podpisový klíč:\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "V AllowedAPKSigningKeys je použit známý ladicí klíč: " #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "Poslední použitá revize „{commit}“ vypadá jako značka, ale UpdateCheckMode je „{ucm}“" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "Darovací metody Liberapay patří do pole „Liberapay:“" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "Seznam souborů, které budou přeformátovány (zkušební spuštění)" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "Překlad obsažený v URL f-droid.org" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "Zastavení sestavování při výjimkách" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "Poškozené mirrory repozitáře." #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "Poškozený řádek serverwebroot:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "Dosažena maximální hloubka rekurze v souboru ZIP: %s" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "Konfigurace zrcadla {url} obsahuje klíč „isPrimary“!" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Zrcadlení celého repozitáře a archivu, všechny typy souborů." #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "Chybějící výstupní adresář" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "Přesun deklarací anti-funkcí do lokalizovaných souborů:" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "V souboru config.yml není nastaven „repo_pubkey“ ani „keystorepass“" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "Žádné APK pro balíček: %s" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "Nebylo nalezeno Android SDK!" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "Nebyla nalezena žádná připojená zařízení" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "Nenalezena žádná zařízení pro `adb install`! Zapojte prosím alespoň jedno." #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "V adrese URL není otisk." #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "Nejsou k dispozici žádné submoduly git" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "Nebyl nalezen žádný projekt gradle. Specifikujte --subdir?" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "Nebyly nalezeny žádné informace." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "Nebyly nalezeny žádné odpovídající štítky" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "V {0} nebyla nalezena minimální verze SDK, použita výchozí (3)." #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "Není třeba uvádět, že aplikace je svobodný software" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "Není třeba uvádět, že je aplikace určena pro Android" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "Není nastavena žádná možnost! Upravte svůj config.yml a nastavte alespoň jedno z těchto:" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "Nebyly upřesněny žádné balíčky" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "Žádné podepsané APK k dispozici pro %s" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "Žádný podepsaný výstupní adresář - není co dělat" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "Nenalezeny žádné podpisové certifikáty v {path}" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "Žádný takový balíček: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "Žádný takový versionCode {versionCode} pro aplikaci {appid}" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "Nebyly nalezeny žádné značky" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "Žádný nepodepsaný adresář - není co dělat" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "Nenalezeny žádné informace o verzi." #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "Neplatná definice velikosti: „{}“" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "Není co dělat" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "Pro {appid} není co dělat." #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "Nyní nastavte následující v config.yml:" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "Soubor OBB má novější versionCode({integer}) než jakýkoli APK:" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "Název souboru OBB musí začínat s „main.“ nebo „patch.“:" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "Packagename souboru OBB neodpovídá podporovanému souboru APK:" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Offline počítač, přeskakuji generování mirroru gitu až do `fdroid deploy`" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "Jedné z položek konfigurace „github_releases“ chybí hodnota „packageNames“. Přeskakuji ..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "Jedné z položek konfigurace „github_releases“ chybí hodnota „projectUrl“. Přeskakuji ..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "Jedné z položek konfigurace „github_releases“ chybí hodnota „token“. Přeskakuji ..." #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Pro grafiku jsou podporovány pouze formáty PNG a JPEG, nalezeno: {path}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "Přijímá pouze jediný klíč „env“" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "Zpracovat pouze aplikace s automatickými aktualizacemi" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Darovací metody OpenCollective patří do pole „OpenCollective:“" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Uložit hlášení JSON do souboru pojmenovaného podle APK." #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "Uložit JSON do stdout." #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "Ukládání výstupu JSON" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "Celková licence projektu." #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "Přepisování prázdného versionName v {apkfilename} z metadat: {version}" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "Balíček „{appid}“ již existuje" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "Parsování manifestu v „{path}“" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "Vyžadováno heslo s uživatelským jménem" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "Cesta k hlavnímu podadresáři projektu Android, pokud není v kořenovém adresáři." #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "Cesta k Android SDK (někdy nastavena v ANDROID_HOME)" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "Cesta ke git repozitáři k použití jako protokol" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "Cesta k úložišti klíčů pro podpisový klíč repozitáře" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Zobrazit tajnou proměnnou v terminálu pro jednoduché kopírování/vložení" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "Režim ochrany osobních údajů byl povolen na základě vaší lokality ({country_code})." #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "Problém se souborem ZIP: %s, chyba %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "Problém s xml v „{path}“" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "Zpracovávat auto-aktualizace" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "Zpracovávání {apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "Zpracovávání {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "Vytváření lidsky čitelných souborů XML/JSON pro indexové soubory" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "Adresa URL projektu, ze které se má importovat." #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "Mělo by být vyvarováno interpunkce" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "Odeslat protokol do tohoto vzdáleného git repozitáře" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "Odeslání protokolu binární průhlednosti do {url}" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "Odeslání na vzdálený server se nezdařilo!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "Odesílání do {url}" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "Rychle vytvořit nový repozitář" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "Přečíst všechny soubory metadat a ukončit program" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "Čtení „{config_file}“" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "Čtení packageName/versionCode/versionName se nezdařilo, APK neplatné: „{apkfilename}“" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "Čtení packageName/versionCode/versionName se nezdařilo, APK neplatné: „{apkfilename}“" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "Čtení {apkfilename} z mezipaměti" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Obnovit a uložit pravidla a podpisy skeneru ze sítě do mezipaměti" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "Odstranit zdrojový tarball a všechny soubory APK při úspěšném ověření." #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Odebírání určených souborů" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "Odebírání {path}\"" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "Přejmenovat soubory APK, které se neshodují s package.name_123.apk" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "Opětovné podepisování {apkfilename} s poskytnutým debug.keystore" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "Změnit velikost všech ikon přesahujících maximální velikost pixelů a ukončit aplikaci" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "Omezit výstup na varování a chyby" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "Opakování nezdařeného stahování: %s" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Přepsat všechny soubory metadat" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "Přepisování „{appid}“" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "Spustit v repozitáři git s nezveřejněnými změnami" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "Spustit přes {cibase} pro nalezení -debug.apk. a přeskočit repo_basedir {repo_basedir}" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "Spustit rewritemeta pro opravu formátování" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "Spuštění prvního průchodu s vypnutou kontrolou MD5" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "Spouštění wget v {path}" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "SHA-256 z {url} neodpovídá zadání!" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "Oskenovat výsledná APK, zda neobsahují známé nesvobodné třídy." #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "Skenovat zdrojový kód balíčku" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "Skener našel {count} problémů v {apk}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "Skener našel {count} problémů v {appid}:" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "Skener našel {count} problémů v {appid}:{versionCode}:" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "Skener našel {} problém" msgstr[1] "Skener našel {} problémy" msgstr[2] "Skener našel {} problémů" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "Skenování APK na další podpisové bloky." #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "Skenování APK pomocí dexdump na známé nesvobodné třídy." #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "Nastavit NDK {release} ({version})" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "Nastavit hodiny na daný čas pomocí:" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "Nastavit maximální počet vydání před archivací starších" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "Nastavit limit otevřených souborů na {integer}" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "Nastavit sestavení aplikace pro nightly sestavení repozitáře" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "Nastavení limitu otevřených souborů se nezdařilo: " #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "Nastavení časového limitu {0} sekund pro toto sestavení" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "Podepsat a umístit balíčky do repozitáře" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "Podepsat indexy vytvořené pomocí update --nosign" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "Přeskočení kontroly zdrojového kódu binárních souborů a dalších problémů" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "Přeskakování „{apkfilename}“ s neplatným podpisem!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "Přeskakování mirroru GitLab Pages, protože je repozitář příliš velký (>%.2fGB)!" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "Přeskakování generování indexu pro {appid}" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "Přeskakování {apkfilename} s neplatným podpisem!" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "Přeskakování {appid}: zakázáno" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "Určete místní složku, do které chcete synchronizovat repozitář" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "Určete soubor identity k poskytnutí pro SSH pro rsyncing" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "Určete, který ladicí soubor úložiště klíčů se má použít." #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "Zobrazovat ještě více informací než normálně" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "Odstraňování tajemného podpisu z {apkfilename}" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "Shrnutí „%s“ je pouze název aplikace" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "Souhrn délky {length} je nad limitem {limit} znaků" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "Systémové hodiny jsou starší než datum v {path}!" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "Režim aktualizace štítků v současné době funguje pouze pro repozitáře git, hg, bzr a git-svn" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "Režim aktualizace pomocí značek se používá v git-svn, ale repozitář nebyl nastaven se značkami" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Testovací režim - výstup se ukládá pouze do adresáře tmp a vždy se sestavuje, i když výstup již existuje." #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "Python balíček „qrcode“ není nainstalován (např. apt-get install python3-qrcode)!" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "Kód verze OBB musí být uveden za „{name}.“:" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "Základní URL repozitáře k logování (výchozí: https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "Adresář, do kterého se má zapsat mirror" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "Soubor, který má být zahrnut do repozitáře (cesta nebo glob)" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "Otisk repozitáře se neshoduje." #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "Kořenový adresář pro local_copy_dir „{path}“ neexistuje!" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "Došlo ke kolizi keyalias – publikování zastaveno" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "Aplikace, které byly archivovány z hlavního repozitáře." #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "Tento příkaz by nikdy neměl být použit k zrcadlení f-droid.org! Celá kopie vyžaduje více než 600GB." #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "Toto je repozitář aplikací, který lze používat s aplikací F-Droid. Aplikace v tomto repozitáři jsou buď oficiální binární soubory sestavené původními vývojáři aplikací, nebo binární soubory sestavené ze zdrojových kódů správcem f-droid.org pomocí nástrojů na adrese https://gitlab.com/fdroid." #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "Tento repozitář již má místní metadata: %s" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" "Chcete-li dokončit nastavení, přidejte soubory APK na adresu „%s“.\n" "poté spusťte příkaz „fdroid update -c; fdroid update“. Možná budete chtít také upravit\n" "„config.yml“, abyste nastavili adresu URL, název repozitáře a další údaje. Měli byste také\n" "nastavit podpisový klíč (dočasný klíč již mohl být vygenerován automaticky).\n" "\n" "Další informace: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "a https://f-droid.org/docs/Signing_Process" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "Chcete-li používat awsbucket, musí být v souboru config.yml nastaven také awssecretkey a awsaccesskeyid!" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "Chcete-li používat rclone, musí být v souboru config.yml nastaven rclone_config a awsbucket!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "URL musí začínat s https:// nebo http://" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "Zkracovače URL by neměly být používány" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "URL {url} v popisu: {error}" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "Neočekávaná licenční značka „{}“! Používejte pouze značky schválené FSF nebo OSI z https://spdx.org/license-list" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Neočekávaná licenční značka „{}“! Používejte pouze licenční značky nakonfigurované v konfiguračním souboru" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "Neznámá položka {key} in {configname}" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "Došlo k neznámé chybě!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "Neznámý soubor „{filename}“ v sestavení „{versionName}“" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "Neznámý formát metadat: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "Neznámý formát metadat: {path} (použijte: *.yml)" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "Neznámá verze aapt, může způsobit problémy: " #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "Zbytečná úvodní mezera" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "Zbytečná mezera na konci" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "Nerozpoznané pole aplikace „{fieldname}“ v „{path}“" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Nerozpoznaný příznak sestavení „{build_flag}“ v „{path}“" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "Nepodporovaný typ souboru „{extension}“ pro grafiku repozitáře" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "Nalezen nepodporovaný soubor grafiky: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "Nepoužitý extlib na %s" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "Nepoužitý soubor na %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "Nepoužitá cesta scandelete: %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "Nepoužitá cesta scanignore: %s" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Aktualizovat informace o repozitáři pro nové balíčky" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "Aktualizovat protokol binární transparentnosti pro URL" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData má neplatnou URL: {url}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "UpdateCheckData musí odpovídat kódu verze jako celému číslu (\\d nebo [0-9]): {codeex}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "UpdateCheckData musí používat HTTPS URL: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "UpdateCheckData není platná URL: {url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode je nastaven, ale vypadá to, že akce checkupdates ještě nebyla spuštěna." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName je nastaveno na známé ID aplikace, lze jej odstranit" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "Nahrávání {apkfilename} na androidobservatory.org" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "Nahrávání {apkfilename} na VirusTotal" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Použijte /HEAD namísto /master nebo /main k ukázání na soubor ve výchozí větvi" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "K vytvoření použijte `fdroid update -c`." #: ../fdroidserver/build.py msgid "Use build server" msgstr "Použít server pro sestavení" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "Pro nově přidaná APK použít datum z APK místo aktuálního času" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "Používám „{path}“ pro konfiguraci s3cmd." #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "Používám „{path}“ pro synchronizaci se vzdáleným úložištěm." #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "Používám APK Signature v2" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "Používám APK Signature v3" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "Používám JAR Signature" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Používám jarsigner Javy, není doporučeno pro ověřování APK! Použijte apksigner" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "Použití prázdného slovníku místo obsahu {path}!" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "Používám existující keystore „{path}“" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "Používám rclone pro synchronizaci s: {url}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "Používám s3cmd pro synchronizaci s: {url}" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Platné příkazy jsou:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "Ověřit proti lokálně uložené kopii místo opětovného stahování." #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "Ověřit integritu stažených balíčků" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "Ověřování podpisu indexu:" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "Ověřování balíčku {path} pomocí apksigner." #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "Klíč API VirusTotal neumožňuje nahrávání souborů větších než 32 MB, k nahrání {path} použijte {url}." #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Varovat ohledně možných chyb metadat" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "Binární soubor WebAssembly" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Pokud jsou nakonfigurovány podepsané indexy, vytvořit v této fázi pouze nepodepsané indexy" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "Při lintingu celého úložiště je yamllint ve výchozím nastavení zakázán. Tato volba vynucuje yamllint bez ohledu na to." #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "Pokud podpis nebo ověření selže, ukončit proces s chybovým kódem." #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "Chcete stáhnout a nainstalovat F-Droid.apk skrze adb? (ANO/ne)" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "Chcete stáhnout aplikace z f-droid.org? (ANO/ne)" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 „Distinguished Name“ používané při generování klíčů" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "Pro nastavení cesty k vašemu SDK můžete použít ANDROID_HOME, např.:" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "Archiv souborů ZIP" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "adb hlásí, že {serial} je „{status}“!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "přidávám IdentityFile do {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "přidávání do {name}: {path}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "nejednoznačná možnost: %(option)s by mohlo odpovídat %(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "apksigner v build-tools;{version} předává soubory APK s neplatnými v3 podpisy, ignoruji." #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "apksigner nenalezen! Nelze podepsat nebo ověřit moderní APK" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "apksigner nenalezen, je vyžadován k podepisování!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "ID aplikace nebo soubor, se kterým se má pracovat" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "ID aplikace s nepovinným kódem verze ve tvaru APPID[:VERCODE]" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "archive_url musí končit na /archive" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "argument „-“ s režimem %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "argument %(argument_name)s: %(message)s" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "pokus o holé připojení SSH k testování klíče pro nasazení:" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "nelze zpracovat specifikaci scrlib (není to řetězec): „{}“" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "nelze otevřít „%(filename)s“: %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "nelze otevřít non-https url: '{};" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "nelze najít požadované srclibs: „{path}“" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "nelze mít více argumentů subparseru" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "nelze sloučit akce - dvě skupiny jsou pojmenovány %r" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "nelze publikovat aktualizaci, nastavili jste klíč pro nasazení?" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "klonování {url}" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "příkazy z modulů pluginů:" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "konfliktní řetězec možnosti: %s" msgstr[1] "konfliktní řetězce možnosti: %s" msgstr[2] "konfliktní řetězce možnosti: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "konfliktní alias subparseru: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "konfliktní subparser: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "nepodařilo se parsovat „{path}“" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "nepodařilo se parsovat srclib spec (není určen název): „{}“" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "nepodařilo se parsovat srclib spec (není určen ref): „{}“" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "vytvořeno {path}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "současná verze je novější: starý vercode={old}, nový vercode={new}" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "mazání: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "soubor závislostí bez zámku" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "protokol procesu {path} nasazen do {dest}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "dest= je vyžadován pro možnosti jako %r" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "stahování „{}“" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "stahování podpisů skeneru z „{}“ se nezdařilo" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "spustitelná binárka, případně kód" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "očekáván %s argument" msgstr[1] "očekávány %s argumenty" msgstr[2] "očekáváno %s argumentů" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "očekáván alespoň jeden argument" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "očekáván maximálně jeden argument" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "očekáván jeden argument" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "fdroid [] [-h|--help|--version|]" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "stáhnout nejnovější verzi podpisů z webu" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "vynutit, aby chyby metadat (výchozí) byly varování nebo byly ignorovány." #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "git svn clone selhalo" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "archiv souborů gzip" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "ignorován explicitní argument %r" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1 musí mít podpis, použijte `fdroid signindex` pro jeho vytvoření!" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 musí mít podpis, použijte `fdroid signindex` pro jeho vytvoření!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "neplatná hodnota %(type)s: %(value)r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "neplatná volba: %(value)r (vyberte si z %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "neplatná hodnota conflict_resolution: %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "neplatný řetězec možnosti %(option)r: musí začínat znakem %(prefix_chars)r" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "ipfs_cid nenalezeno, přeskakování generování CIDv1" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "poslední recept sestavení je novější: starý vercode={old}, nový vercode={new}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "local_copy_dir nekončí s „fdroid“, možná jste měli na mysli: „{path}“" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "local_copy_dir musí být absolutní cesta!" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "local_copy_dir musí být adresář, ne soubor!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "mirror „%s“ nekončí s „fdroid“!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "zrcadla nastavena dvakrát, v config.yml a {path}!" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "společně exkluzivní argumenty musí být volitelné" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "příští aktualizace mezipaměti {name} proběhne za {time}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "žádná „icon“ v {appid}" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "neposkytnuto APK" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "nenalezeny informace o verzi" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "není povoleno s argumentem %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "jeden z argumentů %s je vyžadován" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "přijímá pouze řetězce, seznamy a tuply" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "možnosti" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "přepisování existující {path}" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "poziční argumenty" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "proces nasazení protokolu {path} do {dest} selhal!" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "chybějící podpis v referenčním binárním souboru" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "odmítnout stahování přes nezabezpečené spojení HTTP (použijte HTTPS nebo upřesněte --no-https-check): {apkfilename}" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "repo_icon „repo/icons/%s“ neexistuje, generování placeholderu." #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "repo_url musí končit na /repo" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "rsync chybí nebo je rozbitý: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd sync indexes {path} do {url} a odstranit" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "s3cmd synchronizuje indexy z {path} do {url} a odstraní smazané" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "mezipaměť skeneru je poškozena! Můžete ji vymazat pomocí: „{clear}“" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "serverwebroot: cesta nekončí s „fdroid“, možná jste mysleli jednu z následujících:" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "sdílená knihovna" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "zobrazí tuto nápovědu a ukončí program" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "podepsané APK, buď file-path nebo HTTPS URL." #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "přeskočit nasazení plných protokolů sestavení: obsah protokolu je prázdný" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "přeskočit nasazení plných protokolů sestavení: není povoleno v configu" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "přeskakování zdrojového tarballu: {path}" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "scribls chybí název a/nebo @" #: ../fdroidserver/scanner.py msgid "static library" msgstr "statická knihovna" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "dodaný referenční binární soubor umožnil podepisujícího {signer}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "jsou vyžadovány následující argumenty: %s" #: ../fdroidserver/install.py msgid "true" msgstr "pravda" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "neočekávaný řetězec možností: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "neznámý parser %(parser_name)r (volby: %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "nerozpoznané argumenty: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "nebezpečné oprávnění u „{config_file}“ (má být 0600)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "použití: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "používám Apache libcloud pro synchronizaci s {url}" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com omezuje rychlost, čekám na opětovný pokus..." #: ../fdroidserver/install.py msgid "yes" msgstr "ano" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "{0} aplikace, {1} aliasů klíčů" msgstr[1] "{0} aplikace, {1} aliasů klíčů" msgstr[2] "{0} aplikací, {1} aliasů klíčů" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) nemá žádná metadata!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "AndroidManifest.xml aplikace {apkfilename} má špatné datum: " #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} nemá název! Používám ID aplikace." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "{appid} z {path} není platné ID Android aplikace!" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "{appid} z {path} není platný název balíčku Java!" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "{appid} má APK i soubory: {files}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "{appid} chybí {name}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "{appid}: Neznámá extlib {path} v sestavení „{versionName}“" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "{appid}: žádná určená sestavení, běžím na současném stavu zdroje" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "{appid}: {field} musí být „{type}“, ale je „{fieldtype}!“" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "{appid}: {field} musí být „{type}“, ale je „{fieldtype}“!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "{build_flag} musí být celé číslo, nalezeno: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "{build_flag} musí být seznam nebo řetězec, nalezeno: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "{file} je prázdný nebo poškozený!" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} „{section}/icons/{path}“ neexistuje! Zkontrolujte „config.yml“." #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "{path1} je kopií {path2}, jednu odstraňte!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "{path} již existuje, ignorování importování výsledků!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "{path} neexistuje! Vytvořte ji spuštěním:" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "{path} má nesprávný podpis balíčku „{pattern}“, možný exploit Janus!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} byl označen službou VirusTotal {count}krát:" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "{path} má nesprávný otisk ({fingerprint})!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "{path} není „key: value“ dict, ale {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "{path} není standardní konfigurační soubor!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "{path} není list, ale {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "{path} není {expected_type}, ale {datatype}!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "{path} má nulovou velikost!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "{path} více než 200 MB, ruční nahrání: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "{path}: „{code}“ není platný kód země ve formátu ISO_3166-1 alpha-2!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "{path}: {error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "{url} nekončí s „fdroid“, zkontrolujte cestu URL!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "{url} nezačíná s „http“!" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "{} sestavení selhalo" msgstr[1] "{} sestavení selhala" msgstr[2] "{} sestavení selhalo" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "{} sestavení úspěšné" msgstr[1] "{} sestavení úspěšná" msgstr[2] "{} sestavení úspěšných" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2041862 fdroidserver-2.4.0/locale/cy/0000755000175000017500000000000014770510164014576 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/cy/LC_MESSAGES/0000755000175000017500000000000014770510164016363 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/cy/LC_MESSAGES/fdroidserver.po0000644000175000017500000020010214770507747021431 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Aled Powell , 2021. msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.0a5-27-gf24eae0f\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2021-01-16 21:23+0000\n" "Last-Translator: Aled Powell \n" "Language-Team: Welsh \n" "Language: cy\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=(n==0) ? 0 : (n==1) ? 1 : (n==2) ? 2 : (n==3) ? 3 :(n==6) ? 4 : 5;\n" "X-Generator: Weblate 4.5-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "canfuwyd %d problem" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "Adeiladu pecyn o'r ffynhonnell" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Gwirio am ddiweddariadau i apiau" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "Dileu ffeiliau APK a/neu OBB heb fetaddata o'r ystorfa" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "Gosod ar ddyfeisiau'r pecynnau a adeiladir" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "Rhyngweithio â gweinydd HTTP yr ystorfa" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "Dechrau ystorfa newydd yn gyflym" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "Darllen yr holl ffeiliau metaddata a gadael" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "Ailenwi ffeiliau APK na sy'n dilyn y ffurf package.name_123.apk" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Ailysgrifennu'r holl ffeiliau metaddata" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "Sganio cod ffynhonnell pecyn" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "Llofnodi a gosod pecynnau yn yr ystorfa" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "Llofnodi mynegai gan ddefnyddio update --nosign" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py #, fuzzy msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" "\n" " Mae hon yn ystorfa o apiau i'w defnyddio gydag F-Droid. Mae apiau yn\n" " yr ystorfa hon naill ai wedi eu hadeiladu gan ddatblygwyr yr ap\n" " gwreiddiol, neu wedi eu hadeiladu o'u ffynonellau gan f-droid.org\n" " wrth ddefnyddio'r offer ar https://gitlab.com/F-Droid.\n" " " #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Diweddaru gwybodaeth ystorfa am becynnau newydd" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Gorchmynion dilys yw:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "Gwirio dilysrwydd pecynnau a lawrlwythir" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Rhybuddio am wallau metaddata posib" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "dewis amwys: gall %(option)s gydweddu â %(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "methu agor '%(filename)s': %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" msgstr "Dewisiadau" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "dangos y neges cymorth hon a gadael" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "defnydd: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/de/0000755000175000017500000000000014770510164014553 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/de/LC_MESSAGES/0000755000175000017500000000000014770510164016340 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/de/LC_MESSAGES/fdroidserver.po0000644000175000017500000027444014770507747021426 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # Oliver , 2020. # Fynn Godau , 2020. # melusine , 2020. # marzzzello , 2020, 2022. # Hans-Christoph Steiner , 2020, 2021. # Predatorix Phoenix , 2021. # cheese1 , 2021. # Aleph Null , 2021. # nautilusx , 2021, 2022. # forght , 2021. # TobiGr , 2021. # FW , 2021. # fossdd , 2021. # Ceeee , 2021. # C. Rüdinger , 2021, 2022. # VfBFan , 2021, 2023, 2024, 2025. # Roman Leo , 2021. # Follpvosten , 2021. # ssantos , 2022, 2023, 2024. # "C. Rüdinger" , 2023. # VfBFan , 2024. # Maxi , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2025-03-21 08:45+0000\n" "Last-Translator: VfBFan \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.11-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "Öffentlicher SSH-Schlüssel, der als Bereitstellungsschlüssel verwendet werden soll:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "{path} kodiert für die geheime Variable DEBUG_KEYSTORE:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" besitzt keine zugehörige Metadaten-Datei!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "\"isPrimary\"-Schlüssel sollte nicht zu den Spiegelservern hinzugefügt werden!" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "\"local_copy_dir\" {path}\" existiert nicht!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" ist bereits auf {dev} installiert." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "{name} ({version}) in \"{path}\" ist aktuell" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "\"{path}” vorhanden, aber S3cmd ist nicht installiert!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "\"{path}\" ist ein nicht unterstütztes Dateiformat (Verwendung: metadata/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "\"{path}” ist mit einem nicht zulässigen Schlüssel signiert:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" ist keine gültige URL!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: Fehler: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "%d APKs konnten nicht signiert oder verifiziert werden!" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d Probleme gefunden" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%r ist nicht abrufbar" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "%s hat kein dict hervorgebracht!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "%s hat schlechtes SHA-256: %s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s ist kein zulässiges Build-Feld" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' nicht in config.yml vorhanden!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "'keystore' ist NONE und 'smartcardoptions' ist leer!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "'keystore' nicht in config.yml vorhanden!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "'keystorepass' nicht in config.yml vorhanden!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' nicht in config.yml vorhanden!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required' ist ein ungültiges Argument für Positionsangaben" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "Kein 'sdk_path' in 'config.yml' festgelegt!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' ist veraltet, fdroid benötigt build-tools-{version} oder neuer!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "'{path}' konnte nicht ausgeführt werden!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' in ungültigem Format, sollte ein Wörterbuch sein!" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' ist kein gültiges {field} in {appid}. Regex-Muster: {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' ist kein gültiges {field}, sollte {pattern} sein" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "--merge-request läuft nur auf einer einzigen App-ID!" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "… checkupdate für {appid} fehlgeschlagen: {error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() nicht festgelegt" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "/issues fehlt" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "Als Argument wird eine URL benötigt!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "APK-Signaturen haben verschiedene Zertifikate in {path}:" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "GnuPG PGP-Signaturen für Programmpakete in der Paketquelle hinzufügen" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "Füge einen Repository-Signierschlüssel zu einem unsignierten Repository hinzu" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "Füge eine Metadaten-Vorlage für APKs hinzu, die keine haben" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "Nur für {name} eine neues Repo hinzufügen" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "Pseudonym des Repository-Signierchlüssels im Schlüsselspeicher" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "AllowedAPKSigningKeys fehlen aber Referenz-Binärdatei geliefert" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "Ermöglicht die Bestimmung unterschiedlicher Überarbeitungen (oder Git-Zweige) für den Erstimport" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "Auch den gesamten Archivbereich spiegeln" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "Auch vor Formatierungsfehler warnen, wie etwa \"rewritemeta -l\"" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "Android-AAR-Bibliothek" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "Android-APK-Datei" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "Android-DEX-Code" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "Android-SDK nicht unter {path} gefunden!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "Android-SDK-Pfad '{path}' nicht vorhanden!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "Android-SDK-Pfad '{path}' ist kein Verzeichnis!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "Android-SDK-Tool {cmd} nicht gefunden!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "App besitzt Binärdateien aber keine entsprechenden AllowedAPKSigningKeys, um Zertifikat zu verankern." #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "App hat NoSourceSince oder ArchivePolicy \"0 versions\" oder 0, aber AutoUpdateMode oder UpdateCheckMode sind nicht None" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "App befindet sich in '{repo}', enthält aber einen Verweis auf {url}" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "App-Version besitzt Binärdateien aber keine entsprechenden AllowedAPKSigningKeys, um Zertifikat zu verankern." #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "Das Anhängen von .git ist nicht notwendig" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "Archivierung von {apkfilename} mit ungültiger Signatur!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode mit UpdateCheckMode: HTTP muss ein Muster haben." #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "Automatisches Nein zu allen Aufforderungen." #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "Automatisches Ja zu allen Aufforderungen." #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "Falscher Typeneintrag \"{mirrortype}\" in Spiegelserver-Konfiguration von: {mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "Basis-URL zum Spiegeln, kann den Index-Signierungsschlüssel mit Hilfe des Abfrage-Strings enthalten: ?fingerprint=" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "Branch '{branch}', der als Bestätigung im Build verwendet wird '{versionName}'" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "Branch '{branch}' wird als Bestätigung in srclib verwendet '{srclib}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "Kaputter Symlink: {path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "Programmpaket aus Quellcode erstellen" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "Alle verfügbaren Anwendungen erstellen" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "Build durch „fdroid import” erstellt - Entfernen Sie die Zeile „Deaktiviert”, sobald sie fertig ist" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "Build-Metadaten-Git-Repo hat nicht committete Änderungen!" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "Nur die neueste Version jedes Programmpakets erstellen" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "Built-Repo basiert in \"%s\" auf der Konfiguration von:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "Auto-Update der App ohne CurrentVersionCode nicht möglich" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Kann nicht erstellt werden, da {} Fehler beim Prüfen aufgetreten ist" msgstr[1] "Kann nicht erstellt werden, da {} Fehler beim Prüfen aufgetreten sind" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "\"{path}\" konnte nicht überschrieben werden" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "Kategorie '%s' ist nicht gültig" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "Keine Kategorien festgelegt" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "Kategorie \"{category}\" definiert, aber für keine Apps verwendet!" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Auf Aktualisierungen für Anwendungen prüfen" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "Archivierung auf {appid} überprüfen - apks:{integer}, keepversions:{keep}, archapks:{arch}" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Sauber aktualisieren - ohne Verwendung der Zwischenspeicher, alle APKs wiederaufbereiten" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "Einfärben der Protokollausgabe" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Liste der Kategorien durch Kommata getrennt." #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "Befehl '%s' nicht erkannt.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "Änderungen committen" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "Änderungen committen, pushen und dann eine Merge-Anfrage stellen" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "Widersprüchliche \"{field}\"-Definitionen in .yml- bzw. übersetzten Dateien:" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Widersprüchliche Argumente: '--verbose' und '--quiet' können nicht gleichzeitig angegeben werden." #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "'{command}' konnte auf Ihrem System nicht gefunden werden" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Neuester Versionscode konnte nicht gefunden werden" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Neuester Versionsname konnte nicht gefunden werden" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "{path} konnte nicht gefunden werden, um ihn zu entfernen" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "Konnte APK-Datei {path} nicht für Analyse öffnen " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Konnte Größe \"{size}\" nicht parsen, falscher Typ \"{type}\"" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Konnte Anwendungs-ID nicht finden" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "Versionsinformationen konnten nicht gefunden werden" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "Konnte Paket-ID nicht finden" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "Es ist ungehörig, bestehende Signaturschlüssel-Einstellungen zu überschreiben!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "Neuer Container \"{name}\" wurde erstellt" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "\"{path}\" für die Konfiguration von S3cmd wird erstellt." #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "Erstelle leere {config_file}" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Erstelle Logverzeichnis" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "Neuer S3-Bucket wird erstellt: {url}" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "Erstelle Ausgabeverzeichnis" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "Signierter Index mit diesem Schlüssel (SHA256) wird erstellt:" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "Erstelle temporäres Verzeichnis" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "Unsignierter Index zur Vorbereitung der Signierung wird erstellt" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "CurrentVersionCode {cv} ist kleiner als der älteste Build-Eintrag {versionCode}" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "DEBUG_KEYSTORE ist nicht festgelegt oder der Wert ist unvollständig" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "APKs und/oder OBBs ohne Metadaten aus dem Repository löschen" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "Lösche Archiv, Repository ist zu groß ({size} max {limit})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "Git-Mirror-Verlauf löschen, Repository ist zu groß ({size} max {limit})" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "Lösche unbekannte Datei: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "Die Beschreibung '%s' ist nur die Zusammenfassung der App" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "Beschreibung enthält eine doppelte Zeile" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "Länge der Beschreibung {length} übersteigt die zulässige Zeichenzahl {limit}" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "Meinten Sie config/{name}.yml?" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "Meinten Sie {code}?" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "Nicht 'disable:' zu den erzeugten Erstellungseinträgen hinzufügen" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "Verteilen Sie die neuen Dateien nicht in das Repo" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "\"{path}\" nicht in die URL einfügen!" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "Android-SDK-Pfad nicht abfragen, einfach überspringen" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "Entfernen Sie die vom Schlüsselspeicher erzeugten privaten Schlüssel nicht" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "Keinen Tarball vom Quellcode erstellen, nützlich bei Test eines Builds" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "Keine Aktualisierung des Repositorys. Nützlich, wenn ein Build ohne Internetverbindung getestet wird" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "Keine rsync-Prüfsummen verwenden" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "F-Droid.apk über Spiegelserver herunterladen, die weniger Datenlecks ins Netzwerk haben" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Komplette Spiegel von kleinen Paketquellen herunterladen" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Herunterladen des Repositorys bereits einmal fehlgeschlagen, versuche es nicht nochmal." #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "Herunterladen von {url} fehlgeschlagen. {error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "Doppelte Anti-Feature-Deklaration in {path} wurde ignoriert!" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "Doppelter Eintrag \"%s\" in Spiegelserver-Konfiguration!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "Link in '{field}' duplizieren: {url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "FEHLER: %(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "FEHLER: Der \"server\"-Unterbefehl wurde entfernt, verwende \"deploy\"!" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "FEHLER: nicht unterstützter CI-Typ, Patches willkommen!" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "FEHLER: nicht unterstützter Git-Host \"%s\", Patches willkommen!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "FEHLER: {key} in {path} ist nicht \"archive\" oder \"repo\"!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "FEHLER: {key} ist kein gültiger Schlüssel!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "FEHLER: {key}s Wert sollte vom Typ {t} sein!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "FEHLER: {key}:{subkey} in {path} ist keiner der erlaubten Schlüssel: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "Die Kodierung ist auf '{enc}' gesetzt. Dies könnte zu Kodierungsproblemen führen. Bitte setze sie auf ''UTF-8'' für beste Ergebnisse." #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" "Geben Sie hier den Pfad zum Android-SDK (%s) ein:\n" "> " #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "Umgebungsvariable {var} von {configname} ist nicht gesetzt!" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "Umgebungsvariable {{env: {var}}} ist nicht gesetzt!" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "Fehler beim Bereitstellen von 'github_releases', {} nicht vorhanden. (Sie müssen zuerst `fdroid update` ausführen.)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "Fehler bei der Ermittlung der Repro-Adresse" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "Mit einem von Null verschiedenen Code beenden, falls Probleme auftreten" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "Extrahieren von Anwendungsmetadaten aus einem Quell-Repository" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "Signaturen aus APKs extrahieren" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "F-Droid.apk konnte von keiner bekannten Quelle heruntergeladen werden!" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "Kopieren von {path} fehlgeschlagen: {error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "Abrufen von Signaturen für '{apkfilename}' fehlgeschlagen: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "Lesen von {path} fehlgeschlagen: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "Größenanpassung von {path} fehlgeschlagen: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "S3-Bucket konnte nicht erstellt werden: {url}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "Abrufen der APK-Informationen fehlgeschlagen, {path} wird gelöscht" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "Abrufen der APK-Informationen fehlgeschlagen, {path} wird übersprungen" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "Abrufen des APK-Signierschlüssel-Fingerabdrucks fehlgeschlagen" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "Installation von '{apkfilename}' auf {dev} fehlgeschlagen: {error}" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "Signieren der Anwendung fehlgeschlagen" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "BuildServerID von VM abgerufen: {buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "Signaturen für '{apkfilename} '-> '{sigdir}' abgerufen" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "Datei verschwand während der Verarbeitung: {path}" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "Fertiggestellt" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Verbotene HTML-Befehle" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "Erstellung deaktivierter Apps erzwingen und ungeachtet von Scan-Problemen ausüben. Nur im Testmodus erlaubt." #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "Erzwingt das Anhalten des Builds nach {0} Sek. Zeitüberschreitung!" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "Scannen von deaktivierten Anwendungen und Builds erzwingen." #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "Grafik \"{path}\" ohne Metadaten für App \"{name}\" gefunden!" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "Schlechte Finanzierungsdatei \"{path}\" für \"{name}\" gefunden:" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "Ungültige App-IDs in Argumenten gefunden" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "Ungültige versionCodes für einige Apps gefunden" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "Mehrere JAR-Signaturzertifikate in {path} gefunden" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "Mehrere Signaturzertifikate für das Repository gefunden!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "Mehrere Metadaten-Dateien für {appid} gefunden" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "Mehrere Signaturzertifikate für das Repository gefunden." #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "Es wurden keine Signaturzertifikate für das Repository gefunden." #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "Ungültige Datei bei %s gefunden" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "{apkfilename} unter {url} gefunden" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "{count} Probleme in {filename} gefunden" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "{count} Warnungen in {filename} gefunden" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "Generierte Metadaten aus Vorlage für {appid}" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "Git checkout von '%s' fehlgeschlagen" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "Git clean fehlgeschlagen" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "Git fetch fehlgeschlagen" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Git remote set-head fehlgeschlagen: \"%s\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Git reset fehlgeschlagen" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "Git-Submodul deinit fehlgeschlagen" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "Git-Submodul sync fehlgeschlagen" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "Git-Submodul update fehlgeschlagen" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "HTTPS muss bei Subversion-URLs verwendet werden!" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "Wenn ein Git-Mirror zu groß wird, erlaube dem Archiv gelöscht zu werden" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "Wenn das Hochladen fehlschlägt, versuchen Sie es händisch auf {url} hochzuladen" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "'{field}' in '{metapath}' Metadaten wird ignoriert, da es veraltet ist." #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "Ignoriere FUNDING.yml-Einträge länger als 2048: %s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "Ignoriere schlechtes Element im Manifest: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "Ignoriere veraltete {oldfile}, benutze {newfile}!" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Ignoriere Paket ohne Metadaten: " #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "Ignoriere veraltete Cachedaten für {apkfilename}" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "APKs einschließen, die mit untauglichen Algorithmen wie MD5 signiert sind" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "Einbinden der .asc-PGP-Signaturdateien in den Spiegelserver" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "Einbinden der Build-Protokolle in den Spiegelserver" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "Einbinden der Quellen-Tarballs in den Spiegelserver" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "Einschließlich der Metadaten von %s@%s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "Einschließlich der Metadaten von {path}" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "Initialisiere Submodule" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "Alle verfügbaren, signierten Anwendungen installieren" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "Erstellte Programmpakete auf Geräten installieren" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "Installiere %s …" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "Installiere '{apkfilename}' auf {dev} …" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "Mit dem HTTP-Server des Repository kommunizieren" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "Ungültige APK" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "Ungültiger AutoUpdateMode: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "Ungültiger UpdateCheckMode: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "Ungültige VercodeOperation: {field}" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "Ungültige VercodeOperation: {invalid_ops}" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "Ungültige Anwendungs-ID {appid}" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Ungültige Aufzählung" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "Ungültiger Name für die veröffentlichte Datei: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "Ungültiger ndk: Eintrag in Build: \"{ndk}\"" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "Ungültige Umleitung auf Nicht-HTTPS: {before} -> {after} " #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "Ungültige scrlib-Metadaten: '{file}' ist nicht vorhanden" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "Ungültige srclib-Metadaten: '{file}' konnte nicht analysiert werden" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "Ungültige srclib-Metadaten: unbekannter Schlüssel '{key}' in '{file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "JAR-Signatur konnte nicht überprüft werden: {path}" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "JAR-Signatur verifiziert: {path}" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "Java JAR-Datei" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "Java JDK nicht gefunden! Installieren Sie es in einem Standardordner oder setzen Sie java_paths!" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "Java-kompilierte Klasse" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "Java jarsigner nicht gefunden! Installieren Sie es in einem Standardordner oder setzen Sie java_paths!" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "Javascript in HTML src-Attributen" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "Fehlgeschlagener Build \"{apkfilename}\" behalten" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "Schlüsselspeicher für den Signierschlüssel:\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "Bekannte Debug-Schlüssel werden in AllowedAPKSigningKeys verwendet: " #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "Der zuletzt verwendete Commit '{commit}' sieht aus wie ein Tag, aber der Aktualisierung-Überprüfungs-Modus ist '{ucm}'" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "Liberapay-Spendenmethoden gehören in das Liberapay: Feld" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "Dateien listen, die reformatiert würden (Probelauf)" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "Gebietsschema in der f-droid.org URL enthalten" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "Erstellung bei Fehlern anhalten" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "Fehlerhafte Paketquellen-Spiegelserver." #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "Fehlerhafte serverwebroot-Zeile:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "Maximale Rekursionstiefe in ZIP-Datei erreicht: %s" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "Spiegelserver-Konfiguration für {url} enthält \"isPrimary\"-Schlüssel!" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Spiegeln Sie die komplette Paketquelle und das Archiv, inklusive aller Dateitypen." #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "Fehlendes Ausgabeverzeichnis" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "Verschiebe Anti-Feature-Deklarationen in lokalisierte Dateien:" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "Weder \"repo_pubkey\" noch \"keystorepass\" in config.yml gesetzt" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "Kein APK für das Paket: %s" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "Kein Android-SDK gefunden!" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "Keine angeschlossenen Geräte gefunden" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "Keine Geräte für `adb install` gefunden! Bitte schließen Sie eines an." #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "Kein Fingerabdruck in der URL." #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "Keine Git-Submodule verfügbar" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "Es konnte kein Gradle-Projekt gefunden werden. \"--subdir\" angeben?" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "Keine Informationen gefunden." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "Keine passenden Tags gefunden" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "Keine Mindest-SDK-Version in {0} gefunden, Standard (3) verwendet." #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "Sie müssen nicht angeben, dass die App Freie Software ist" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "Sie müssen nicht angeben, dass die App für Android ist" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "Keine Option gesetzt! Bearbeiten Sie Ihre config.yml, um mindestens eine davon zu setzen:" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "Keine Pakete angegeben" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "Keine signierte Apk für %s verfügbar" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "Kein signiertes Ausgabeverzeichnis – nichts zu tun" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "Keine Signaturzertifikate in {path} gefunden" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "Kein solches Paket: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "Kein Versionscode {versionCode} für App {appid}" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "Keine Tags gefunden" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "Kein unsigniertes Verzeichnis – nichts zu tun" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "Es konnten keine Versionsinformation gefunden werden." #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "Keine gültige Größendefinition: \"{}\"" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "Keine zu erledigenden Aufgaben" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "Keine zu erledigenden Aufgaben für {appid}." #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "Legen Sie diese nun in der config.yml fest:" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "Die OBB-Datei hat eine neuere VersionCode ({integer}) als jedes APK:" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "Der OBB Dateiname muss mit \"main.\" oder \"patch.\" beginnen:" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "Der OBB-Packetname stimmt mit keinem unterstützten APK überein:" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Maschine offline, überspringe git-Spiegelgeneration bis `fdroid deploy`" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "Einem der Konfigurationselemente von 'github_releases' fehlt der Wert 'packageNames'. Überspringe …" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "Einem der Konfigurationselemente von 'github_releases' fehlt der Wert 'projectUrl'. Überspringe …" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "Einem der Konfigurationselemente von 'github_releases' fehlt der Wert 'token'. Überspringe …" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Nur PNG und JPEG werden für Grafiken unterstützt, gefunden wurde: {path}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "Nur ein einziger Schlüssel \"env\" wird akzeptiert" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "Nur Apps mit automatischen Aktualisierungen verarbeiten" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "OpenCollective-Spendenmethoden gehören in das OpenCollective: Feld" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "JSON-Bericht in eine nach der APK benannte Datei ausgeben." #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "JSON an stdout ausgeben." #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "JSON ausgeben" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "Gesamt-Lizenz des Projekts." #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "Überschreiben von leeren Versionsnamen in {apkfilename} aus Metadaten: {version}" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "Paket \"{appid}\" existiert bereits" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "Analysiere Manifest bei '{path}'" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "Passwort mit Benutzername benötigt" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "Pfad zum Unterverzeichnis des Android-Hauptprojekts, wenn es nicht im Stammverzeichnis ist." #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "Pfad zum Android-SDK (Softwareentwicklungsbaukasten) (mitunter in ANDROID_HOME festgelegt)" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "Pfad zum Git-Repository, der zur Anmeldung verwendet werden soll" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "Pfad zum Schlüsselspeicher für den Repository-Signierschlüssel" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Drucken der geheimen Variable in das Terminal zum einfachen Kopieren/Einfügen" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "Der Datenschutzmodus wurde auf der Grundlage Ihres Gebietsschemas ({country_code}) aktiviert." #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "Problem mit der ZIP-Datei: %s, Fehler %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "Problem mit xml bei '{path}'" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "Aktualisierungen automatisch ausführen" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "Verarbeite {apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "Verarbeite {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "Erstelle menschenlesbares XML/JSON für Indexdateien" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "Projekt-Adresse, von der importiert werden soll." #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "Interpunktion sollte vermieden werden" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "Anmeldung an diesem Git-Repository durchführen" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "Binäres Transparenz-Log nach {url} pushen" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "Pushen zum Remote-Server fehlgeschlagen!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "Pushen auf {url}" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "Schnellstart eines neuen Repositorys" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "Alle Metadaten-Dateien betrachten und beenden" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "Lese '{config_file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "Lesen von packageName/versionCode/versionName fehlgeschlagen, APK ungültig: '{apkfilename}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "Lesen von packageName/versionCode/versionName fehlgeschlagen,APK ungültig: '{apkfilename}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "Lese {apkfilename} aus dem Cache" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Aktualisieren und Zwischenspeichern von Scannerregeln und Signaturen aus dem Netzwerk" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "Den Quell-Tarball und alle APKs entfernen, wenn sie erfolgreich verifiziert wurden." #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Entferne angegebene Dateien" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "Entferne {path}\"" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "APK-Dateien umbenennen, die nicht dem Muster „package.name_123.apk“ entsprechen" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "{apkfilename} erneut mit dem mitgelieferten debug.keystore signieren" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "Größe aller Symbole ändern, welche die maximale Pixelgröße überschreiten, und beenden" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "Ausgabe auf Warnungen und Fehler beschränken" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "Wiederholung des fehlgeschlagenen Downloads: %s" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Alle Metadaten-Dateien neu schreiben" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "Schreibe '{appid}' neu" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "Auf Git Repo, das nicht committete Änderungen hat, laufen lassen" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "{cibase} ausführen, um -debug.apk zu finden. und repo_basedir {repo_basedir} überspringen" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "Metadaten neu schreiben, um Formatierungen zu korrigieren" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "Erster Durchlauf mit MD5-Prüfung abgeschaltet" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "Ausführen von wget in {path}" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "SHA-256 von {url} stimmt nicht mit Eintrag überein!" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "Die resultierende(n) APK(s) auf bekannte nicht-quelloffene Klassen scannen." #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "Quellcode eines Programmpakets durchsuchen" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "Scanner fand {count} Probleme in {apk}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "Scanner fand {count} Probleme in {appid}:" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "Scanner fand {count} Probleme in {appid}:{versionCode}:" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "Scanner fand {count} Problem" msgstr[1] "Scanner fand {count} Probleme" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "APK auf zusätzliche Signierblöcke scannen." #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "APK mit dexdump auf bekannte nicht-quelloffene Klassen scannen." #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "NDK {release} ({version}) einrichten" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "Einstellen der Uhr auf diese Zeit mit:" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "Setze maximale Veröffentlichungen im Repo bevor ältere archiviert werden" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "Setzen des Limits für geöffnete Dateien auf {integer}" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "Ein App-Build für einen nightly Build-Repo einrichten" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "Das Setzen des Limits für geöffnete Dateien ist fehlgeschlagen: " #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "Stelle einen {0} Sek timeout für diesen Build ein" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "Programmpakete in Paketquelle signieren und einstellen" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "Erstellte Indizes durch Verwendung von „update --nosign“ signieren" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "Durchsuchen des Quellcodes nach Binärdateien und anderen Problemen überspringen" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "Überspringen von '{apkfilename}' mit ungültiger Signatur!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "Überspringe GitLab-Pages-Spiegelserver, da das Repo zu groß ist (>%.2f GB)!" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "Überspringe Indexerzeugung für {appid}" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "Überspringe '{apkfilename}' mit ungültiger Signatur!" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "Überspringen von {appid}: deaktiviert" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "Einen lokalen Ordner bestimmen, in dem das Repository synchronisiert wird" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "Eine Identitätsdatei bestimmen, die bei Re-Synchronisation an SSH übergeben wird" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "Geben Sie an, welche Debug Keystore-Datei verwendet werden soll." #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "Mehr Informationen als gewöhnlich ausspucken" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "Entferne mysteriöse Signatur aus {apkfilename}" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "Zusammenfassung '%s' ist nur der Name der App" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "Zusammenfassung mit der Länge {length} liegt über der {limit} Zeichengrenze" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "Die System-Uhr ist älter als das Datum in {path}!" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "Der Aktualisierungsmodus funktioniert derzeit nur für Git-, Hg-, Bzr- und Git-SVN-Paketquellen" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "Aktualisierungsmodus mit Tags in git-svn verwendet, aber das Repo wurde nicht mit Tags eingerichtet" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Testmodus – Ausgabe nur ins tmp-Verzeichnis einfügen, immer erstellen, selbst wenn die Ausgabe bereits vorhanden ist." #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "Das Python-Paket \"qrcode\" ist nicht installiert (z. B. apt-get install python3-qrcode)!" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "Der OBB-Versionscode muss nach \"{name}.\" stehen:" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "Basis-Adresse zur Anmeldung am Repository (Standard: https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "Das Verzeichnis in das der Spiegelserver geschrieben werden soll" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "Die in das Repo aufzunehmende Datei (Pfad oder Glob)" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "Der Fingerabdruck des Repositorys stimmt nicht." #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "Das Wurzelverzeichnis für local_copy_dir \"{path}\" existiert nicht!" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "Es gibt eine Keyalias-Kollision – Veröffentlichung gestoppt" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "Dies sind die Apps, die aus dem Hauptrepository archiviert wurden." #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "Dieser Befehl sollte niemals verwendet werden, um f-droid.org zu spiegeln! Eine vollständige Kopie benötigt mehr als 600 GB." #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "Dies ist eine Paketquelle für Anwendungen, die für die Benutzung zusammen mit F-Droid gedacht ist. Die darin enthaltenen Anwendungen sind entweder offizielle von den Entwicklern erstellte Binärdateien oder werden von f-droid.org mithilfe des Werkzeugs auf https://gitlab.com/fdroid aus dem Quellcode erstellt." #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "Dieses Repo hat bereits lokale Metadaten: %s" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" "Um die Einrichtung abzuschließen, fügen Sie Ihre APKs zu \"%s\"\n" "und führen Sie dann \"fdroid update -c; fdroid update\" aus. Vielleicht möchten Sie auch\n" "\"config.yml\" bearbeiten, um die URL, den Repo-Namen und mehr festzulegen. Sie sollten auch\n" "einen Signierschlüssel einrichten (ein temporärer Schlüssel könnte automatisch generiert worden sein).\n" "\n" "Für weitere Informationen: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "und https://f-droid.org/docs/Signing_Process" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "Um awsbucket zu benutzen, müssen awssecretkey und awsaccesskeyid auch in der config.yml gesetzt sein!" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "Um rclone zu benutzen, müssen rclone_config und awsbucket auch in der config.yml gesetzt sein!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "URL muss mit https:// oder http:// beginnen" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "Kurz-URL-Dienste sollten nicht verwendet werden" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "URL {url} in der Beschreibung: {error}" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "Ungültiges Lizenz-Tag \"{}\"! Verwenden Sie nur Kennzeichen von https://spdx.org/license-list, die von FSF oder OSI anerkannt sind" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Unerwartetes Lizenz-Tag \"{}\"! Nur Lizenz-Tags verwenden, die in deiner config-Datei eingerichtet sind" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "Unbekannter Eintrag {key} in {configname}" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "Unbekannter Fehler aufgetreten!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "Unbekannte Datei '{filename}' im Build '{versionName}'" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "Unbekanntes Metadatenformat: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "Unbekanntes Metadaten-Format: {path} (benutze: *.yml)" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "Unbekannte Version von aapt, könnte Probleme verursachen: " #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "Unnötige führende Leerzeichen" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "Unnötige Leerzeichen an Ende" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "Nicht erkanntes App-Feld '{fieldname}' in '{path}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Nicht erkanntes Build-Flag '{build_flag}' in '{path}'" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "Nicht unterstützter Dateityp \"{extension}\" für Repo-Grafik" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "Nicht unterstützte Grafikdatei gefunden: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "Nicht verwendete extlib bei %s" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "Nicht verwendete Datei bei %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "Nicht verwendeter „scandelete“-Pfad: %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "Nicht verwendeter „scanignore“-Pfad: %s" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Paketquelleninformationen zu neuen Programmpaketen aktualisieren" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "Binäres Transparency-Log einer URL aktualisieren" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData hat eine ungültige URL: {url}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "UpdateCheckData muss mit dem Versionscode als Ganzzahl (\\d oder [0-9]) übereinstimmen: {codeex}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "UpdateCheckData muss HTTPS-URL verwenden: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "UpdateCheckData hat eine ungültige URL: {url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode ist gesetzt, aber likecheckupdates wurde vermutlich noch nicht ausgeführt." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName ist auf eine bekannte App-ID gesetzt, sie kann entfernt werden" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "Lade {apkfilename} auf androidobservatory.org hoch" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "Lade {apkfilename} auf VirusTotal hoch" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Verwende /HEAD anstelle von /master oder /main, um auf eine Datei im Hauptzweig zu verweisen" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Verwende `fdroid update -c` zum Erstellen." #: ../fdroidserver/build.py msgid "Use build server" msgstr "Verwende Buildserver" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "Verwende APK-Datum statt der aktuellen Zeit für neu hinzugefügte APKs" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "Verwende \"{path}\" zur Konfiguration von s3cmd." #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "Verwende „{path}“ zur Synchronisation mit Remote-Speicher." #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "Verwende APK-Signatur v2" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "Verwende APK-Signatur v3" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "Verwende JAR Signatur" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Von Java jarsigner zur Verifikation von APKs wird abgeraten! Verwenden Sie apksigner" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "Verwende leeres Verzeichnis statt der Inhalte von {path}!" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "Verwende vorhandenen Schlüsselspeicher \"{path}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "Verwende rclone zum Synchronisieren mit: {url}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "Verwende s3cmd zum Synchronisieren mit: {url}" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Gültige Befehle sind:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "Lokal zwischengespeicherte Kopie vergleichen, anstatt erneut herunterzuladen." #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "Integrität der heruntergeladenen Programmpakete überprüfen" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "Überprüfen der Index-Signatur:" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "Überprüfen des Pakets {path} mit apksigner." #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "VirusTotal-API-Schlüssel kann nicht Dateien größer 32MB hochladen, verwende {url} um {path} hochzuladen." #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Vor möglichen Metadaten-Fehlern warnen" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "WebAssembly-Binärdatei" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Bei einer Konfiguration mit signierten Indizes, in dieser Phase nur unsignierte Indizes erstellen" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "Beim Linting des gesamten Repositoriums wird yamllint standardmäßig deaktiviert. Diese Option erzwingt yamllint ungeachtet dessen." #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "Wenn das Signieren oder Verifizieren fehlschlägt, wird der Vorgang mit einem Fehlercode beendet." #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "Möchten Sie F-Droid.apk über adb herunterladen und installieren? (JA/nein)" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "Möchten Sie die App(s) von f-droid.org herunterladen? (JA/nein)" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'Distinguished Name' zum Erzeugen von Schlüsseln" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "Sie können ANDROID_HOME verwenden, um den Pfad zu Ihrem SDK zu setzen, z. B.:" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "ZIP-Dateiarchiv" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "adb meldet {serial} ist „{status}“!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "IdentityFile zu {path} hinzufügen" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "Hinzufügen zu {name}: {path}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "Mehrdeutige Option: %(option)s könnte übereinstimmen mit %(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "apksigner in build-tools;{version} übergibt APKs mit ungültigen v3-Signaturen und ignoriert sie." #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "apksigner nicht gefunden! Moderne APKs können nicht signiert oder verifiziert werden" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "apksigner nicht gefunden, er wird zum Signieren benötigt!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "App-ID der Datei, die bearbeitet werden soll" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "App-ID mit fakultativem Versionscode in der Form APPID[:VERCODE]" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "archive_url muss mit /archive enden" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "Argument \"-\" mit Modus %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "Argument %(argument_name)s: %(message)s" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "Versuch einer reinen SSH-Verbindung, um den Deployment-Key zu testen:" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "kann scrlib-Spezifikation nicht parsen (keine Zeichenkette): '{}'" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "'%(filename)s' kann nicht geöffnet werden: %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "Nicht-HTTPS-URL kann nicht geöffnet werden: '{};" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "Konnte die benötigten srclibs nicht finden: \"{path}\"" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "Mehrere Subparser-Argumente sind unzulässig" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "kann keine Aktionen zusammenführen - zwei Gruppen heißen %r" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "Kann das Update nicht veröffentlichen. Ist der Deploy-Schlüssel gesetzt?" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "Klone {url}" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "Befehle aus den PlugIn-Modulen:" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "widersprüchliche Optionsangabe: %s" msgstr[1] "widersprüchliche Optionsangaben: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "widersprüchlicher Subparser-Alias: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "widersprüchlicher Subparser: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "konnte '{path}' nicht parsen" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "konnte srclib-Spezifikation nicht parsen (kein Name angegeben): '{}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "konnte srclib-Spezifikation nicht parsen (keine ref angegeben): '{}'" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "{path} erzeugt" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "die aktuelle Version ist neuer: alter vercode={old}, neuer vercode={new}" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "Lösche: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "Abhängigkeitsdatei ohne Sperre" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "Verarbeitungsprotokoll {path} unter {dest} bereitgestellt" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "dest= wird benötigt für Optionen wie %r" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "Herunterladen von '{}'" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "Herunterladen der Scanner-Signaturen von '{}' fehlgeschlagen" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "ausführbare Binärdatei, vermutlich Code" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "%s Argument erwartet" msgstr[1] "%s Argumente erwartet" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "mindestens ein Argument erwartet" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "höchstens ein Argument erwartet" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "ein Argument erwartet" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "fdroid [] [-h|--help|--version|]" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "Abrufen der neuesten Version von Signaturen aus dem Web" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "Erzwingen, dass Metadatenfehler (Standard) als Warnung ausgegeben oder ignoriert werden." #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "git svn Klonen fehlgeschlagen" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "gzip Dateiarchiv" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "Ausdrückliches Argument %r ignoriert" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1 muß eine Signatur haben, verwenden Sie `fdroid signindex` um sie zu erzeugen!" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 muss eine Signatur haben, verwenden Sie `fdroid signindex`, um sie zu erstellen!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "Ungültige(r) %(type)s mit Wert: %(value)r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "Ungültige Auswahl: %(value)r (Wählen Sie aus %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "Ungültiger conflict_resolution-Wert: %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "Ungültige Optionszeichenfolge %(option)r: muss mit einem Zeichen %(prefix_chars)r beginnen" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "ipfs_cid nicht gefunden, CIDv1-Generierung wird übersprungen" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "Neuestes Build-Rezept ist neuer: alter Vercode={old}, neuer Vercode={new}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "local_copy_dir endet nicht auf \"fdroid\", meinten Sie stattdessen: \"{path}\"" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "local_copy_dir muß eine absolute Pfadangabe sein!" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "local_copy_dir muß ein Verzeichnis sein, keine Datei!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "Spiegelserver '%s' ended nicht mit 'fdroid'!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "Spiegelserver zweimal gesetzt, in config.yml und {path}!" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "sich gegenseitig ausschließende Argumente müssen optional sein" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "nächstes {name} Cache-Update fällig in {time}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "kein \"icon\" in {appid}" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "kein APK bereitgestellt" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "keine Versionsinformation gefunden" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "unzulässig mit Argument %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "eines der Argumente %s ist erforderlich" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "akzeptiert nur Zeichenketten, Listen und Tupel" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "Optionen" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "überschreiben des vorhandenen {path}" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "Positionsparameter" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "Bereitstellen des Verarbeitungsprotokolls {path} auf {dest} ist fehlgeschlagen!" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "Referenz-Binärdatei fehlt Signatur" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "Download über ungesicherte HTTP-Verbindung verweigert (verwenden Sie HTTPS oder geben Sie --no-https-check an): {apkfilename}" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "repo_icon \"repo/icons/%s\" existiert nicht, erzeuge Platzhalter." #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "repo_url muss mit /repo enden" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "rsync fehlt oder ist kaputt: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd synchronisiert Indizes von {path} nach {url} und löscht diese" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "s3cmd synchronisiert Indizes von {path} nach {url} und löscht entfernte" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "Der Scanner-Cache ist fehlerhaft! Sie können ihn löschen mit: '{clear}'" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "serverwebroot: Der Pfad endet nicht mit \"fdroid\", vielleicht meinten Sie einen dieser Pfade:" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "dynamische Bibliothek" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "diese Hilfemeldung anzeigen und beenden" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "signiertes APK, entweder ein Dateipfad oder eine HTTPS-URL." #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "Überspringen des Deployens von vollständigen Build-Logs: der Log-Inhalt ist leer" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "Überspringen des Deployens von vollständigen Build-Logs: nicht in der Konfiguration aktiviert" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "Überspringe Quell-Tarball: {path}" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "Srclibs-Name fehlt und/oder @" #: ../fdroidserver/scanner.py msgid "static library" msgstr "statische Bibliothek" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "Angewandte Referenz-Binary erlaubt Signer {signer}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "die folgenden Argumente sind erforderlich: %s" #: ../fdroidserver/install.py msgid "true" msgstr "wahr" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "Unerwartete Optionsverkettung: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "Unbekannter Parser %(parser_name)r (Auswahl: %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "nicht erkannte Argumente: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "Unsichere Berechtigungen in „{config_file}” (sollte 0600 sein)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "Syntax: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "Verwende Apache libcloud zur Synchronisation mit {url}" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com limitiert die Zugriffe, warte auf Wiederholung …" #: ../fdroidserver/install.py msgid "yes" msgstr "ja" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "{0} app, {1} Schlüsselaliase" msgstr[1] "{0} apps, {1} Schlüsselaliase" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) besitzt keine Metadaten!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "Die AndroidManifest.xml der App „{apkfilename}” hat ein ungültiges Datum: " #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} besitzt keinen Namen! Die Anwendungs-ID wird stattdessen verwendet." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "{appid} von {path} ist keine gültige Android-Anwendungs-ID!" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "{appid} von {path} ist kein gültiger Java-Paketname!" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "{appid} hat sowohl APKs als auch Dateien: {files}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "{appid} fehlt {name}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "{appid}: unbekannte Extlib {path} im Build '{versionName}'" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "{appid}: keine builds angegeben, läuft auf dem aktuellen source-Stand" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "{appid}: {field} muss ein '{type}' sein, ist aber ein '{fieldtype}!'" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "{appid}: {field} muss ein '{type}' sein, ist aber ein '{fieldtype}'!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "{build_flag} muss ein Integer sein, gefunden: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "{build_flag} muss eine Liste oder Zeichenkette sein, gefunden: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "{file} ist leer oder beschädigt!" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" existiert nicht! Überprüfe \"config.yml\"." #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "{path1} ist ein Duplikat von {path2}, entfernen Sie eines!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "{path} existiert schon, importierte Ergebnisse werden nicht berücksichtigt!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "{path} existiert nicht! Erstellen Sie es durch Ausführen von:" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "{path} hat die schlechte Dateisignatur \"{pattern}\", möglicher Janus-Exploit!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} wurde von virustotal {count} Mal markiert:" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "{path} hat den falschen Fingerabdruck {fingerprint}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "{path} ist kein \"Schlüssel: Wert\"-Diktat, sondern ein {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "{path} ist keine Standard Config Datei!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "{path} ist keine Liste, sondern ein {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "{path} ist kein {expected_type}, sondern ein {datatype}!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "{path} hat Dateigröße Null!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "{path} ist größer als 200MB und muss manuell auf {url} hochgeladen werden" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "{path}: \"{code}\" ist kein gültiger ISO_3166-1 alpha-2 country code!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "{path}: {error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "{url} endet nicht mit \"fdroid\", überprüfen Sie den URL-Pfad!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "{url} beginnt nicht mit \"http\"!" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "{} Build fehlgeschlagen" msgstr[1] "{} Builds fehlgeschlagen" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "{} Build erfolgreich" msgstr[1] "{} Builds erfolgreich" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/el/0000755000175000017500000000000014770510164014563 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/el/LC_MESSAGES/0000755000175000017500000000000014770510164016350 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/el/LC_MESSAGES/fdroidserver.po0000644000175000017500000020510314770507747021424 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # THANOS SIOURDAKIS , 2020. # fresh , 2020, 2021. # Michalis , 2021. # ΣΤΑΥΡΟΣ ΔΑΛΙΑΚΟΠΟΥΛΟΣ , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.0a0-62-gc63c4b3d\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2024-05-10 13:24+0000\n" "Last-Translator: ΣΤΑΥΡΟΣ ΔΑΛΙΑΚΟΠΟΥΛΟΣ \n" "Language-Team: Greek \n" "Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.5.4\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "Δημόσιο κλειδί SSH που θα χρησιμοποιηθεί ως κλειδί ανάπτυξης:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "{path} κωδικοποιημένη για τη μυστική μεταβλητή DEBUG_KEYSTORE:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" δεν έχει αρχείο μετα-δεδομένων που να ταιριάζει!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "Το \"{apkfilename}\" είναι ήδη εγκατεστημένο στο {dev}." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "Το \"{path}\" περιέχει ένα πρόσφατο {name} ({version})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "Το \"{path}\" υπάρχει, αλλά το s3cmd δεν έχει εγκατασταθεί!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "Το \"{path}\" δεν είναι υποστηριζόμενη μορφή αρχείου (χρήση: μεταδεδομένα/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "Το \"{path}\" έχει υπογραφή από ένα κλειδί που δεν επιτρέπεται:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "Το \"{url}\" δεν είναι έγκυρο URL!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: σφάλμα: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d προβλήματα εντοπίστηκαν" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "Δεν είναι δυνατή η κλήση του %r" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "Το %s δεν είναι αποδεκτό πεδίο δόμησης" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "Το «keypass» δεν βρέθηκε στο config.yml!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "Το \"keystore\" είναι NONE και το \"smartcardoptions\" είναι κενό!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "Το 'keystore' δεν βρέθηκε στο config.yml!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "Το 'keystorepass' δεν βρέθηκε στο config.yml!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ". __call__ () δεν έχει οριστεί" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "Δημιουργήστε ένα πακέτο από τον πηγαίο κώδικα" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Έλεγχος για ενημερώσεις εφαρμογών" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "Η εντολή «%s» δεν αναγνωρίζεται.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "Διαγραφή APKs και/ή OBBs χωρίς μεταδεδομένα από το αποθετήριο" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "Εγκατάσταση έτοιμων πακέτων σε συσκευές" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "Αλληλεπίδραση με το διακομιστή HTTP του αποθετηρίου" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "Γρήγορη εκκίνηση νέου αποθετηρίου" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "Ανάγνωση όλων των αρχείων μεταδεδομένων κι έξοδος" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "Μετονομασία αρχείων APK που δεν αντιστοιχούν με «όνομα.πακέτου_123.apk»" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Επανεγγραφή όλων των αρχείων μετα-δεδομένων" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "Έλεγχος του πηγαίου κώδικα ενός πακέτου" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "Υπογράψτε και τοποθετήστε τα πακέτα στο αποθετήριο" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "Υπογραφή ευρετηρίων που δημιουργήθηκαν με τη χρήση update --nosign" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "Βρέθηκε άγνωστη εξαίρεση!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "Μη υποστηριζόμενος τύπος αρχείου «{extension}» για αποθήκευση γραφικών" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "Βρέθηκε μη υποστηριζόμενο γραφικό αρχείο: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Ενημέρωση πληροφοριών αποθετηρίου για νέα πακέτα" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "χρήση Apache libcloud για συγχρονισμό με {url}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Οι έγκυρες εντολές είναι οι εξής:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "Επαλήθευση της ακεραιότητας των πακέτων που έχουν ληφθεί" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Προειδοποίηση για πιθανά σφάλματα μετα-δεδομένων" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "Ασαφής επιλογή: %(option)s θα μπορούσε να ταιριάζει με %(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "δεν είναι δυνατό το άνοιγμα του '%(filename)s': %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" msgstr "Επιλογές" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "εμφάνιση αυτού του βοηθητικού μηνύματος κι έξοδος" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "στατική βιβλιοθήκη" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "Απαιτούνται τα ακόλουθα ορίσματα: %s" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "άγνωστος συντακτικός αναλυτής %(parser_name)r (επιλογές: %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "μη αναγνωρίσιμα ορίσματα: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "μη ασφαλή δικαιώματα στο '{config_file}' (πρέπει να είναι 0600)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "χρήση: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "χρήση Apache libcloud για συγχρονισμό με {url}" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "" msgstr[1] "" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/es/0000755000175000017500000000000014770510164014572 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/es/LC_MESSAGES/0000755000175000017500000000000014770510164016357 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/es/LC_MESSAGES/fdroidserver.po0000644000175000017500000027337714770507747021455 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Maximiliano Castañón , 2020. # Jo , 2020. # Hans-Christoph Steiner , 2020, 2021, 2022. # Alvaro , 2020. # Fioddor Superconcentrado , 2021. # Adolfo Jayme Barrientos , 2021. # mondstern , 2021. # Germe the fur star , 2021. # Iago , 2022. # Iago , 2022. # Jaime Marquínez Ferrándiz , 2022. # gallegonovato , 2022, 2023, 2024. # Nicolás Pérez , 2025. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2025-03-16 22:47+0000\n" "Last-Translator: Nicolás Pérez \n" "Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.11-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "Clave pública SSH que se usará como clave de despliegue:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "{path} codificada para la variable secreta DEBUG_KEYSTORE:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "¡\"%s/\" no tiene su correspondiente fichero de metadatos!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "¡El directorio raíz para local_copy_dir \"{path}\" no existe!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" ya está instalado en {dev}." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "\"{path}\" contiene {name} ({version}) reciente" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "\"{path}\" existe pero ¡s3cmd no está instalado!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "\"{path}\" no es un formato reconocido, convertir a metadata/*.yml" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "\"{path}\" está firmado por una clave no permitida:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" no es una URL válida!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: error: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "¡%d APKs fallaron al ser firmados o verificados!" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d problemas encontrados" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "no se puede llamar a %r" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "¡%s no ha producido un dict!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "%s tienes mal un SHA-256: %s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s no es un campo de construcción aceptado" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "¡'keypass' no encontrado en config.yml!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "¡\"keystore\" es NONE y \"smartcardoptions\" está vacío!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "¡'keystore' no encontrado en config.yml!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "¡'keystorepass' no encontrado en config.yml!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "¡'repo_keyalias' no encontrado en config.yml!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required' es un argumento inválido para posicionales" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "¡'sdk_path' no establecido en 'config.yml'!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "¡'{aapt}' es demasiado antiguo, fdroid requiere build-tools-{version} o posterior!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "¡Falló la ejecución de '{path}'!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' tiene un formato inválido, ¡debería ser un diccionario!" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' no es un {field} válido en {appid}. Patrón de expresión regular: {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' no es un {field} válido, debería ser {pattern}" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "¡--merge-request solo se ejecuta en un único ID de aplicación!" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...falló la comprobación de actualizaciones para {appid} : {error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() no definida" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "no se encuentra /issues" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "¡Se requiere una URL como argumento!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "Las firmas APK tienen diferentes certificados en {path}:" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "Añadir las firmas PGP para los paquetes en el repositorio usando GnuPG" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "Cree una clave de firmado para un repositorio sin firmar" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "Agregar archivos con esqueleto de metadats para las aplicaciones que no los tienen" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "Agregando nuevo repo solamente para {name}" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "Alias de la clave de firma de repositorio en el depósitio de claves" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "Falta la AllowedAPKSigningKeys, pero se proporcionó un binario de referencia" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "Permite especificar una revisión diferente (o git sector) para la importación inicial" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "También replicar la sección completa del archivo" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "También advierta sobre problemas de formato, como r rewritemeta-l" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "Biblioteca AAR para Android" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "Fichero APK de Android" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "Código DEX en Android" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "¡No se encontró el SDK de Android en {path}!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "¡No existe la ruta '{path}' al SDK de Android!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "¡La ruta al SDK de Android '{path}' no es un directorio!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "¡No se encontró la herramienta {cmd} del SDK de Android!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "La aplicación tiene archivos binarios, pero no las AllowedAPKSigningKeys correspondientes para fijat el certificado." #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "La aplicación tiene NoSourceSince o ArchivePolicy \"versiones 0\" o 0, pero AutoUpdateMode o UpdateCheckMode no son Ninguna" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "La aplicación está en '{repo}' pero tiene un enlace a {url}" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "La versión de la aplicación es binaria pero no tiene las correspondientes AllowedAPKSigningKeys para fijar el certificado." #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "No es necesario agregar .git" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "¡Archivando {apkfilename} con una firma inválida!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode con UpdateCheckMode: el HTTP debe tener un patrón." #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "No automático a todos las solicitudes." #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "No automático a todos los avisos." #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "Tipo de entrada incorrecto \"{mirrortype}\" en la configuración de los espejos: {mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "URL base para replicar, puede incluir la clave de firma del índice usando la cadena de consulta: ?fingerprint=" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "Rama '{branch}' usada como \"commit\" en el build '{versionName}'" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "Rama '{branch}' usada como \"commit\" en srclib '{srclib}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "Enlace simbólico roto: {path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "Crear un paquete desde la fuente" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "Compilar todas las aplicaciones disponibles" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "Build generada por `fdroid import` - Eliminar \"disable line\" cuando esté lista" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "¡El repositorio git de la compilación de metadatos tiene cambios pendientes!" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "Construir sólo la última versión de cada paquete" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "Repositorio creado en \"%s\" con esta configuración:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "No se puede actualizar automáticamente, app sin CurrentVersionCode" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "No se puede construir debido al error {} mientras se comprobaba" msgstr[1] "No se puede construir debido a los errores {} mientras se comprobaba" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "No se puede reescribir \"{path}\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "La categoría '%s' no es válida" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "No se han establecido categorías" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "¡Categoría \"{category}\" definida pero no utilizada para ninguna aplicación!" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Buscar actualizaciones de aplicaciones" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "Comprobando la operación de archivo para {appid} - APKs:{integer}, versiones mantenidas:{keep}, arquitecturas de apk:{arch}" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Actualización limpia, no usa la caché, procesa todas las APKs" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "Colorear el registro de salida" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Lista de categorías separadas por comas." #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "No se reconoció la orden «%s».\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "Aplicar cambios" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "Confirmar los cambios, empujar, a continuación, hacer una solicitud de fusión" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "Definiciones \"{field}\" contradictorias entre los archivos .yml y los archivos localizados:" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Argumentos incompatibles: No se puede especificar \"--verbose\" y \"--quiet\" a la vez." #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "No se pudo encontrar '{command}' en el sistema" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "No se pudo encontrar el último código de versión" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "No se pudo encontrar el último nombre de versión" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "No se pudo encontrar {path} para eliminarlo" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "No se pudo abrir el archivo APK {path} para analizarlo: " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "No se puede procesar el tamaño \"{size}\", tipo erróneo \"{type}\"" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "No se pudo encontrar el identificador de aplicación" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "No se pudo encontrar ninguna información sobre la versión" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "No se ha podido encontrar el identificador de paquete" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "¡Se ha rechazado (cobardemente) sobrescribir la configuración existente de clave de firma!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "Se ha creado el contenedor nuevo \"{name}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Creando \"{path}\" para configurar s3cmd." #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Creating empty {config_file}" msgstr "Leyendo '{config_file}'" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Creando el directorio de registro (\"log\")" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "Creando nuevo cubo S3: {url} 1" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "Creando el directorio de salida" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "Creando índice firmado con esta clave (SHA256):" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "Creando directorio temporal" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "Creando índice no firmado, en preparación de la firma" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "CurrentVersionCode {cv} es menor que la compilación más antigua registrada {versionCode}" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "DEBUG_KEYSTORE no está establecida o su valor es incompleto" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "Borrar del repositorio archivos APK y/o OBB sin metadatos" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "Borrando archivo, el repositorio es demasiado grande ({size} vs. {limit} máximo)" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "Borrando la historia del repositorio git espejo, el repositorio es demasiado grande({size} vs. {limit} máximo)" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "Borrando fichero desconocido: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "La descripción '%s' es simplemente el resumen de la aplicación" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "La descripción contiene una línea duplicada" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "La descripción de longitud {length} supera el límite de caracteres, {limit}" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "¿Quiere decir config/{name}.yml?" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "¿Querías decir {code}?" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "No agregar 'disable:' a las entradas de compilaciones generadas" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "No desplegar los ficheros nuevos en el repositorio" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "¡No incluir \"{path}\" en la URL!" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "No solicitar la ruta al Android SDK, si falla" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "No elimine las claves privadas generadas del almacén de claves" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "No cree un tarball de origen, útil al probar una compilación" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "No actualizar el repositorio, útil al probar una compilación sin conexión a Internet" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "No use rsync checksums" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "Descarga F-Droid.apk usando espejos que filtren menos a la red" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Descargar réplicas completas de repositorios pequeños" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "La descarga del repositorio ya falló una vez, no se intentará de nuevo." #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "La descarga de {url} falló. {error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "¡Se ignoró la declaración duplicada de Anti-Feature en la {path}!" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "¡Entrada duplicada \"%s\"en la configuración de los espejos!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "Enlace duplicado en '{field}': {url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "ERROR: %(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "ERROR: ¡El subcomando \"server\" se ha eliminado. Use \"deploy\"!" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "ERROR: tipo de CI no soportado, ¡se aceptan parches!" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "ERROR: host git no soportado \"%s\", ¡parches bienvenidos!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "ERROR: ¡{key} en {path} no es un \"archivo\" o un \"repositorio\"!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "ERROR: ¡{key}:{subkey} en {path} no está en las claves permitidas: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "La codificación establecida es '{enc}'. fdroid podría sufrir problemas de codificación. Por favor establecerla a 'UTF-8' para resultados óptimos." #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" "Introduzca la ruta a Android SDK (%s) aquí:\n" "> " #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "¡La variable de entorno {var} de {configname} no tiene valor asignado!" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "¡La variable de entorno {var} de {configname} no tiene valor asignado!" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "Error desplegando 'github_releases', {} no está presente. (Puede que necesites ejecutar `fdroid update` primero)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "Error al obtener la dirección del repositorio" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "Salir con un código distinto de cero si se encontraron problemas" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "Extraer los metadatos de la aplicación de un repositorio de origen" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "Extraer firmas de APKs" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "¡F-Droid.apk no pudo ser descargado de ninguna fuente conocida!" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "Fallo copiando {path}: {error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "Fallo al obtener firmas para '{apkfilename}': {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "Fallo al leer {path}: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "Fallo al cambiar de tamaño {path}: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "Fallo al crear bucket S3 : {url}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "Fallo al obtener la información de APK, borrando {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "Fallo al obtener la información de APK, omitiendo {path}" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "Fallo al obtener la información de manifiesto APK" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "Fallo al instalar '{apkfilename}' en {dev}: {error}" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "Fallo al firmar la aplicación" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "Buildserverid obtenido de la VM: {buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "Firmas obtenidas para '{apkfilename}'-> '{sigdir}'" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "El archivo desapareció al procesarlo: {path}" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "Terminado" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Etiquetas HTML prohibidas" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "Forzar la creación de compilaciones deshabilitadas, independientemente de los problemas de escaneo. Sólo se permite en modo de prueba." #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "¡Forzar la suspensión de la compilación tras {0} segundos!" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "Forzar el escaneo de aplicaciones y compilaciones deshabilitadas." #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "¡Se encontró la gráfica \"{path}\" sin metadatos para la aplicación \"{name}\"!" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "Se encontró archivo de financiación \"{path}\" para \"{name}\":" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "Se encontraron identificadores de aplicaciones inválidos en los argumentos" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "Se encontraron códigos de versión (versionCodes) inválidos para algunas aplicaciones" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "Encontrados varios ficheros de bloque de firma JAR en {path}" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "¡Se han encontrado varios certificados de firmante!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "Se encontraron multiples ficheros de metadatos para {appid}" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "Encontrados varios certificados de firma para el repositorio." #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "Ningún certificado de firma encontrado para el repositorio." #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "Se encontró algo que no es un fichero en %s" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "Se encontró {apkfilename} en {url}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "Encontró {count} problemas en {filename}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "Se encontraron {count} advertencias en {filename}" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "Creada la estructura de metadatos para {appid}" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "Falló el checkout Git de '%s'" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "Git clean falló" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "Git fetch falló" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Git remote set-head falló: \"%s\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Git reset falló" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "Fallo en la desinstalación del submódulo Git" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "La sincronización del submodulo de Git falló" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "La actualización del submodulo de Git falló" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "¡Se debe usar HTTPS con URLs de Subversion!" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "Si un repositorio espejo git crece mucho, permitir borrar el archivo" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "Si esta carga falla, prueba cargarlo manualmente a {url}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "Ignorando '{field}' en medatos '{metapath}' por obsoleto." #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "Ignorando entrada en FUNDING.yml mayor de 2048: %s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "Ignorar el elemento incorrecto en el manifiesto: %s" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "{oldfile} está obsoleto, use {newfile}" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Ignorando paquete sin metadatos: " #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "Ignorando datos de cache atascada para {apkfilename}" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "Incluir APKs que están firmados con algoritmos deshabilitados como MD5" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "Incluir los archivos .asc de firma PGP en el espejo" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "Incluir las bitácoras de compilación en el repositorio espejo" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "Incluir en el espejo los archivos tarball de código fuente" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "Incluyendo metadatos de %s@%s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "Incluyendo metadatos de {path}" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "Inicializando submodules" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "Instalar todas las aplicaciones firmadas disponibles" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "Instalar paquetes constuídos en el dispositivo" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "Instalando %s…" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "Instalando '{apkfilename}' en {dev}…" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "Interactuar con el servidor HTTP del repositorio" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "APK no válido" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "ModoActualizaciónAutomática Inválido: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "UpdateCheckMode no válido {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "VercodeOperation no válida: {field}" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "VercodeOperation no válido: {invalid_ops}" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "ID de aplicación inválido {appid}" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Lista no numerada no válida" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "Nombre no válido para archivo publicado: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "Ndk no válido: entrada en paquete: \"{ndk}\"" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "Redirección no válida a no HTTPS: {before} -> {after} " #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "Metadato scrlib inválido: '{file}' no existe" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "Metadato scrlib no válido: no se pudo procesar '{file}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "Metadato scrlib no válido: clave desconocida '{key}' en el archivo '{file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "No se pudo comprobar la firma JAR: {path}" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "Firma JAR verificada: {path}" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "Archivo java JAR" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "¡No se encontró Java JDK! ¡Instale en una ubicación estándar o establezca java_paths!" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "Clase compilada java" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "Java jarsigner no encontrado! Instalar en una ubicación estándar o establecer java_paths!" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "Javascript en atributos src de HTML src" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "Mantener la compilación fallida \"{apkfilename}\"" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "Depósito de claves para la clave de firma de repositorio:\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "La clave de depuración conocida se utiliza en AllowedAPKSigningKeys: " #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "La última confirmación utilizada '{commit}' parece una etiqueta, pero Update Check Mode es '{ucm}'" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "Los métodos de donación de Liberapay pertenecen al Liberapay: field" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "Lista de archivos que se reformatearán (ejecución en seco)" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "Locale incluída en la URL de f-droid.org" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "Hacer que la construcción se detenga en las excepciones" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "Réplicas de repositorio mal formadas." #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "Línea serverwebroot mal formada:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "Se alcanzó el máximo en el archivo ZIP: %s" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Crea un espejo completo del repositorio y del archivo, todos los tipos de fichero." #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "Falta el directorio de salida" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "Moviendo las declaraciones de Anti-Features a los archivos localizados:" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "Ni \"repo_pubkey\" ni \"keystorepass\" establecidos en config.yml" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "No existe APK para tal paquete: %s" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "¡No se encontró Android SDK!" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "No se han encontrado dispositivos asociados" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "¡No se han encontrado dispositivos para `adb install`! Por favor, conecte uno." #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "No hay huella digital en la URL." #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "No hay git submodules disponibles" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "No se encontró ningún proyecto gradle. ¿Quizá quiera especificar --subdir?" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "No se encontró información." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "No se encontraron etiquetas coincidentes" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "No se encontró una versión de SDK mínima en {0}, utilizando el valor por defecto (3)." #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "No hay necesidad de especificar que la aplicación es software libre" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "No hay necesidad de especificar que la aplicación es para Android" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "No hay opción establecida! Edita tu config.yml para establecer al menos una de estas opciones:" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "No se han especificado paquetes" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "No hay APK firmado disponible para %s" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "Sin directorio de salida firmado - nada que hacer" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "No se ha encontrado ningún certificado de firma en {path}" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "No existe tal paquete: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "No existe tal versiónCode {versionCode} para app {appid}" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "No se encontró ninguna etiqueta" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "No hay directorio sin firma - nada que hacer" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "No se ha podido encontrar información sobre la versión." #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "No es una definición válida del tamaño: \"{}\"" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "Nada que hacer" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "Nada que hacer para {appid}." #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "Ahora establezca lo siguiente en config.yml:" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "OBB tiene una versiónCode({integer}) más nueva que cualquier APK:" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "El nombre del archivo OBB debe comenzar con \"main.\" o \"patch.\":" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "El nombre de paquete de OBB no coincide con un APK soportado:" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Maquina desconectada. Saltando la generación del repositorio espejo git hasta`fdroid deploy`" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "A uno de los elementos de configuración de 'github_releases' le falta el valor 'packageNames'. omitiendo ..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "A uno de los elementos de configuración 'github_releases' le falta el valor 'projectUrl'. omitiendo ..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "A uno de los elementos de configuración 'github_releases' le falta el valor 'token'. Omitiendo ..." #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Sólo PNG y JPEG son compatibles con los gráficos, encontrados: {path}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "Solo procesar aplicaciones con actualizaciones automáticas" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Los métodos de donación de OpenCollective pertenecen al OpenCollective: field" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Sacar el informe JSON a un fichero nombrado según el APK." #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "Sacar JSON a stdout." #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "Sacando JSON" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "Licencia general del proyecto." #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "Sobrescribir versionName vacío en {apkfilename} con el de los metadatos: {version}" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "El paquete \"{appid}\" ya existe" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "Procesando el manifiesto en '{path}'" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "Se requiere contraseña con el nombre de usuario" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "Ruta al subdirectorio principal del proyecto Android, si no está en la raíz." #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "Ruta al Android SDK (a veces ubicado en ANDROID_HOME)" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "Ruta de acceso al reporte git para usarlo como registro" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "Ruta al depósito de claves para la clave de firma de repositorio" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Mostrar la variable secreta en el terminal para copiar/pegar fácilmente" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "Se ha activado el modo de privacidad en función de su configuración regional ({country_code})." #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "Problema con el archivo ZIP: %s, error %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "Problema con xml en '{path}'" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "Actualizaciones automáticas de procesos" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "Procesando {apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "Procesando {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "Para los ficheros de índice, produce un documento XML/JSON legible por humanos" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "importar desde.URL del proyecto." #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "Se debe evitar la puntuación" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "Pulse el registro a este repositorio remoto Git" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "Publicar el registro de transparencia binario en {url}" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "¡Error al enviar al servidor remoto!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "Empujando a {url}" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "Iniciar rápidamente un nuevo repositorio" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "Leer todos los archivos de metadatos y salir" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "Leyendo '{config_file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "Falló lectura de packageName/versionCode/versionName, APK inválida: '{apkfilename}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "Error al leer packageName/versionCode/versionName,APK inválido: '{apkfilename}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "Leyendo {apkfilename} desde caché" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Actualización y almacenamiento en caché de las reglas y firmas del escáner desde la red" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "Elimine el archivo tar de origen y todos los APK si se verifican correctamente." #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Removiendo archivos especificados" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "Eliminando {path}\"" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "Cambiar el nombre de archivos APK que no coinciden con el formato package.name_123.apk" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "Firmando de nuevo {apkfilename} con el depósito de claves de depuración proporcionado" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "Cambiar el tamaño de todos los iconos que exceden el tamaño máximo del pixeles y salir" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "Restringir los resultados a advertencias y errores" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "Reintentando descarga fallida: %s" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Reescribir todos los archivos de metadatos" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "Reescribiendo '{appid}'" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "Ejecutar en repositorio git con cambios pendientes" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "Ejecutar sobre {cibase} para encontrar -debug.apk. y omitir repo_basedir {repo_basedir}" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "Ejecutar rewritemeta para arreglar el formato" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "Ejecutando la primera iteración con la comprobación de MD5 deshabilitada" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "Ejecutando wget en {path}" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "¡El SHA-256 de {url} no coincide con la entrada!" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "Escaneando los APK(s) resultantes en busca de clases no libres conocidas." #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "Escanear el código fuente de un paquete" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "El escáner encontró {count} problemas en {apk}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "El escáner encontró {count} problemas en {appid}:" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "El escáner encontró {count} problemas en {appid}:{versionCode}:" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "El escáner encontró {} problema" msgstr[1] "El escáner encontró {} problemas" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "Escaneando el APK en busca de bloques de firma adicionales." #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "Escaneo del APK con dexdump para clases no gratuitas conocidas." #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "Configurar el NDK de {release} ({version}) arriba" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "Ajustar el reloj a esa hora usando:" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "Establecer la cantidad máxima de lanzamientos antes de que los anteriores sean archivados" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "Establecer el límite de ficheros abiertos a {integer}" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "Configurar una compilación de app para un repositorio de compilación nocturna" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "Configuración fallida de límite de apertura de archivo: " #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "Estableciendo un máximo de {0} segundos para esta compilación" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "Firmar y colocar paquetes en el repositorio" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "Firmar los índices creados usando update --nosign" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "Omitir el escaneo del código fuente por problemas binarios u otros problemas" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "¡Ignorando '{apkfilename}' por firma no válida!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "¡Saltando el mirror de GitLab Pages porque el repositorio es demasiado grande (>%.2fGB)!" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "Saltando la generación de índices para {appid}" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "¡Ignorando {apkfilename} por firma no válida!" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "Saltando {appid}: desactivado" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "Especifique una carpeta local para sincronizar el" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "Especifique un fichero de identidad que ofrezca SSH para rsync" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "Especifique qué fichero de almacenamiento de claves usar para depuración." #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "Diseminar más información de lo normal" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "Quitando firma misteriosa de {apkfilename}" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "Resúmen '%s' es sólo el nombre de la app" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "El resumen de longitud {length} supera el límite de {limit} caracteres" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "¡El fecha del sistema es anterior a la de {path}!" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "El modo de actualización de etiquetas actualmente solo funciona para repositorios de git, hg, bzr y git-svn" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "El modo de actualización de etiquetas se utilizó en git-svn, pero el repositorio no se configuró con etiquetas" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Modo de prueba: ponga la salida solo en el directorio tmp y siga desarrollando, incluso si la salida ya existe." #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "El código de versión OBB tiene que venir tras \"{name}.\":" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "El URL base para el registro del repositorio (por defecto: https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "El directorio al que escribir el espejo" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "El fichero a incluír en el repositorio (ruta o glob)" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "La huella digital del repositorio no coincide." #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "¡El directorio raíz para local_copy_dir \"{path}\" no existe!" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "Hay una colisión de keyalias - publicación detenida" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "Estas son aplicaciones del repositorio principal que se han archivado." #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "¡Este comando no debe usarse nunca para replicar f-droid.org!. Una copia completa requiere más de 600 GB." #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "Este es un repositorio de aplicaciones para usar con F-Droid. Las aplicaciones en este repositorio son binarios oficiales construidos por los desarrolladores originales de la aplicación, o son binarios creados a partir de su código fuente por f-droid.org utilizando las herramientas de https://gitlab.com/fdroid." #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "Este repo ya tiene metadatos locales: %s" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" "Para completar la configuración, añade tus APKs a \"%s\"\n" "después ejecuta \"fdroid update -c; fdroid update\". Puede que también quieras editar \"config.yml\" \n" "para especificar la URL, el nombre del repositorio, y más. También debes de configurar una \n" "llave de firmado (puede que se haya generrado automáticamente una temporal).\n" "\n" "ara más información: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "y https://f-droid.org/docs/Signing_Process" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "¡Para usar awsbucket hay que configurar también awssecretkey y awsaccesskeyid en config.yml!" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "¡Para utilizar rclone, rclone_config y awsbucket deben estar configurados en config.yml!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "La URL debe comenzar con https:// o http://" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "Acortadores de URL no deben ser utilizados" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "URL {url} en Descripción: {error}" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "¡Etiqueta de licencia inesperada \"{}\"! Use solo etiquetas aprobadas por FSF u OSI de https://spdx.org/license-list" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "¡Etiqueta de licencia inesperada \"{}\"! Use solo etiquetas de licencia configuradas en su archivo de configuración" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "Entrada desconocida {key} en {configname}" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "¡Se encontró una excepción desconocida!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "Fichero '{filename}' desconocido en compilación '{versionName}'" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "Formato de metadatos desconocido: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "Formato de metadatos desconocido: {path} (use: *.yml)" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "Versión desconocida de aapt, podría causar problemas: " #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "Espacio innecesario al principio" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "Espacio innecesario al final" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "Campo de app '{fieldname}' desconocido en '{path}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Flag de compilación '{build_flag}' desconocido en '{path}'" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "Tipo de fichero \"{extension}\" no soportado para gráfico de repositorio" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "Fichero de gráficos no soportado: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "Extlib no utilizada en %s" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "Fichero no utilizado en %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "Ruta scandelete sin uso: %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "Ruta scanignore sin uso: %s" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Actualizar la información del repositorio para nuevos paquetes" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "Actualizar el registro de transparencia binario para una URL" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData tiene una URL no válida: {url}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "UpdateCheckData debe coincidir con el código de la versión como entero (\\d o [0-9]): {codeex}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "UpdateCheckData tiene que usar una URL HTTPS: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "UpdateCheckData tiene una URL no válida: {url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode está configurado pero parece que aún no se han ejecutado las actualizaciones." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName está configurado con el ID de la aplicación conocida, se puede eliminar" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "Subiendo {apkfilename} a androidobservatory.org" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "Subiendo {apkfilename} a virustotal" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Utiliza /HEAD en lugar de /master o /main para apuntar a un archivo de la rama por defecto" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Use `fdroid update -c` para crearlo." #: ../fdroidserver/build.py msgid "Use build server" msgstr "Use un servidor de compilación" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "Use la fecha del APK en vez de la fecha actual para los nuevos APK añadidos" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "Usando \"{path}\" para configurar s3cmd." #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "Usando \"{path}\" para sincronizar con almacenamiento remoto." #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "Utilizando Firma APK v2" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "Utilizando firma APK v3" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "Utilizar la firma JAR" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "¡Usando jarsigner de Java. No recomendado para verificar APKs! Use apksigner" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "¡Usando un diccionario en blanco en lugar del contenido de la {path}!" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "Usando almacén de claves existente \"{path}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "Usando rclone para sincronizar con: {url}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "Usando s3cmd para sincronizar con: {url}" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Los comandos válidos son:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "Verificar una copia en caché local en vez de volver a descargar." #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "Verificar la integridad de los paquetes descargados" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "Verificar el índice de la firma:" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "Verificando el paquete {path} con apksigner." #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "La clave de API de VirusTotal no puede subir archivos mayores de 32MB. Use {url} para subir {path}." #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Alertar sobre posibles errores de metadatos" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "Archivo binario WebAssembly" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Cuando está configurado para índices firmados, crear solo índices sin signo en esta etapa" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "Cuando se limpia el repositorio completo yamllint está deshabilitado por defecto. Esta opción fuerza yamllint a pesar de todo." #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "Cuando falla la firma o la verificación, sale con un código de error." #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "¿Desea descargar e instalar F-Droid.apk mediante adb? (SÍ/no)" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "¿Desea descargar la(s) aplicación(es) de f-droid.org? (SÍ/no)" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'Nombre Distintivo' (DN) usado al generar claves" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "Puede usar ANDROID_HOME para definir la ruta a su SDK, p.ej.:" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "Archivo de ficheros ZIP" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "¡adb informa que {serial} es \"{status}\"!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "añadiendo IdentityFile a {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "añadiendo a {name}: {path}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "opción ambigua: %(option)s podría corresponderse con %(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "apksigner en build-tools;{version} pasa APK con firmas v3 no válidas, ignorándolos." #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "¡No se encontró apksigner! No se pueden firmar o verificar los APKs modernos" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "¡Se requiere apksigner para firmar pero no se encontró!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "identificador de aplicación del fichero en el que operar" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "identificador de aplicación con código de versión opcional en la forma APPID[: VERCODE]" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "El archive_url debe terminar con /archive" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "argumento \"-\" con modo %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "argumento %(argument_name)s: %(message)s" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "intentando conexión SSH pura para probar la llave de despliegue:" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "no se puede procesar (no es una cadena) la especificación scrlib: '{}'" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "no se puede abrir '%(filename)s': %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "no se puede abrir una url que no sea https: '{};" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "no se encuentran las srclibs requeridas: \"{path}\"" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "no se puede tener varios argumentos de subparser" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "no se pueden fundir acciones - 2 grupos se llaman %r" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "no se puede publicar actualización. ¿Estableció Ud. la clave de despliegue?" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "clonando {url}" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "órdenes de módulos de extensión (plugins):" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "cadena de opción conflictiva: %s" msgstr[1] "cadenas de opción conflictivas: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "Alias de los subanalizadores en el conflicto:%s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "subanalizador del conflictivo:%s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "no se pudo procesar '{path}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "no se ha podido analizar la especificación srclib (no se ha especificado el nombre): '{}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "no se pudo procesar especificación srclib (sin especificar ref): '{}'" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "{path} creado" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "la versión actual es más nueva: código de versión viejo={old}, código de versión nuevo={new}" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "eliminando: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "archivo de dependencia sin bloqueo" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "registro de proceso {path} desplegado en '{dest}'" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "las opciones como %r requieren dest =" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "Descargando '{}'" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "la descarga del escaneo de la firma para '{}' falló" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "binario ejecutable, posiblemente código" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "argumento inesperado %s" msgstr[1] "argumentos inesperados %s" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "se esperaba al menos 1 argumento" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "no se esperaba más de 1 argumento" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "se esperaba 1 argumento" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "fdroid [] [-h|--help|--version|]" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "obtener la última versión de las firmas de la web" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "forzar que los errores en metadatos sean avisos, o que se ignoren (valor predeterminado: errores)." #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "falló git svn clone" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "archivo de ficheros gzip" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "argumento explícito %r ignorado" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "¡index-v1 tiene que tener una firma, use `fdroid signindex` para crearla!" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 debe tener una firma, ¡ use `f droid signindex` para crearla!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "valor inválido de tipo %(type)s: %(value)r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "opción no válida: %(value)r (escoja de entre %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "valor para conflict_resolution no válido: %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "cadena de opciones %(option)r no válida: tiene que comenzar por un carácter %(prefix_chars)r" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "ipfs_cid no encontrado, omitiendo la generación de CIDv1" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "la última receta de empaquetado es más nueva: vercode={old}, nuevo vercode={new}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "local_copy_dir no termina en \"fdroid\", tal vez quisiste decir: \"{path}\"" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "¡local_copy_dir tiene que ser una ruta absoluta!" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "¡local_copy_dir tiene que ser un directorio, no un fichero!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "¡el espejo '%s' no termina en 'fdroid'!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "¡espejos establecidos dos veces, en config.yml y {path}!" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "los argumentos mutuamente exclusivos tienen que ser opcionales" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "la próxima actualización de la caché de {name} tendrá lugar después de {time}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "{appid} sin \"icono\"" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "no se ha indicado APK" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "no se encontró información de la versión" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "no permitido con el argumento %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "se necesita 1 de los argumentos %s" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "solo acepta cadenas, listas, y tuplas" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "opciones" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "sobrescribiendo {path} existente" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "argumentos posicionales" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "¡Falló el despliegue del registro de proceso {path} en {dest}!" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "falta la firma del archivo binario de referencia" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "rechazar descarga por conexión HTTP insegura (use HTTPS o especifique --no-https-check): {apkfilename}" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "repo_icon \"repo/icons/%s\" no existe, generando placeholder." #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "repo_url debe terminar con /repo" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "rsync no existe o no funciona: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd sync indexa {path} a {url} y elimina" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "s3cmd sincroniza los índices de {path} a {url} y borra los eliminados" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "¡El escaner de la cache está mal realizado! Puedes borrarlo con: '{clear}'" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "serverwebroot: la ruta no termina con \"fdroid\", tal vez se refería a uno de estos:" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "biblioteca compartida" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "mostrar este mensaje de ayuda y salir" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "APK firmado, o una ruta a fichero o una URL HTTPS." #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "saltar el despliegue de registros de compilación completos: el registro está vacío" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "saltar el despliegue de registros de compilación completos: no está activado en la configuración" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "ignorando tarball de fuentes: {path}" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "a scrlibs le falta el nombre y/o @" #: ../fdroidserver/scanner.py msgid "static library" msgstr "biblioteca estática" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "el archivo binario de referencia ha proporcionado autorización al firmante {signer}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "se requieren los siguientes argumentos: %s" #: ../fdroidserver/install.py msgid "true" msgstr "verdadero" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "cadena de opción inesperada: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "parser '%(parser_name)r' desconocido. (Opciones válidas: %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "argumentos no reconocidos: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "permisos inseguros en '{config_file}' (¡debería ser 0600)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "uso: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "usando Apache libcloud para sincronizar con {url}" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com está limitando el consumo, esperando para reintentar..." #: ../fdroidserver/install.py msgid "yes" msgstr "sí" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "{0} aplicación, {1} alias de clave" msgstr[1] "{0} aplicaciones, {1} alias de clave" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "¡{apkfilename} ({appid}) no tiene metadatos!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "El AndroidManifest.xml de {apkfilename} tiene la fecha mal: " #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "¡{appid} no tiene nombre! Usando su identificador." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "¡{appid} de {path} no es un identificador (ID) de aplicación Android válido!" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "¡{appid} de {path} no es un nombre de paquete Java válido!" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "{appid} tiene tanto APKs como archivos: {files}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "{appid} no tiene {name}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "{appid}: extlib {path} desconocido en la compilación '{versionName}'" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "{appid}: no se ha especificado compilación, ejecutando sobre el estado actual del código fuente" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "¡{appid}: {field} tiene que ser un '{type}' pero es un '{fieldtype}!'" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "¡{appid}: {field} tiene que ser un '{type}' pero es un '{fieldtype}'!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "{build_flag} tiene que ser un entero pero se ha encontrado: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "{build_flag} debe ser una lista o una cadena, encontrada: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "¡{file} está vacío o corrupto!" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "¡{name} \"{section}/icons/{path}\" no existe! Corrijalo en config.yml." #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "¡{path} ya existe, ignorando resultados de importaciones!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "¡{path} no existe! Créela ejecutando:" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "¡{path} tiene una firma de fichero \"{pattern}\" mala, posible exploit Janus!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} ha sido marcado por virustotal {count} veces:" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "¡{path} tiene la huella incorrecta ({fingerprint})!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "¡{path} no es un dict \"clave: valor\", sino un {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "¡{path} no es un archivo de configuración estándar!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "¡{path} no es una lista, sino un {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "¡{path} no es {expected_type}, sino un {datatype}!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "¡{path} está vacío!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "{path} mayor de 200MB, subir manualmente: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "¡{path}: \"{code}\" no es un código de país ISO_3166-1 alpha-2 válido!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "{path}: {error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "¡{url} no termina en \"fdroid\", verifique la URL!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "¡{url} no empieza por \"http\"!" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "compilación fallida {}" msgstr[1] "compilaciones fallidas {}" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "compilación con éxito {}" msgstr[1] "compilaciones con éxito {}" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/es_AR/0000755000175000017500000000000014770510164015154 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/es_AR/LC_MESSAGES/0000755000175000017500000000000014770510164016741 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/es_AR/LC_MESSAGES/fdroidserver.po0000644000175000017500000021036214770507747022020 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Hans-Christoph Steiner , 2020. # riveravaldez , 2020. # Eduardo Rodrigues , 2020. # Lilian Sosa , 2021. # Germe the fur star , 2021. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2021-04-10 21:26+0000\n" "Last-Translator: Germe the fur star \n" "Language-Team: Spanish (Argentina) \n" "Language: es_AR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.6-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, fuzzy, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "directorio_copia_local ¡tiene que ser una ruta absoluta!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: error: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "no se puede llamar a %r" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() no definida" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py #, fuzzy msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "Agregar firmas GPG a paquetes en el repositorio" #: ../fdroidserver/update.py #, fuzzy msgid "Add a repo signing key to an unsigned repo" msgstr "Crear una llave de firmado en un almacén de llaves para el repositorio" #: ../fdroidserver/update.py #, fuzzy msgid "Add skeleton metadata files for APKs that are missing them" msgstr "Crear plantilla de metadatos de los archivos faltantes" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "Alias de la llave de firmado del repositorio en el almacén de llaves" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "Permitir que una revision diferente (o rama de git) sea especificada en la importación inicial" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "También advertir sobre problemas de formateo, como ser rewritemeta -l" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "No existe ruta '{path}' Android SDK!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "No se encontró Android SDK!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "La aplicación está en '{repo}' pero no tiene enlace a {url}" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "Archivando {apkfilename} con una firma invalida!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "Rama {branch} fue publicada en la versión {versionName}" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "Compilar una paquete desde su código" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "Construir todas las aplicaciones disponibles" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "Empaquetado con la ultima versión de cada paquete" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "Empaquetar repositorio basado en %s con esta configuración:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "No se pudo empaquetar debido al {} error mientras se escaneaba" msgstr[1] "No se pudo empaquetar debido a los {} errores mientras se escaneaba" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "No se puede reescribir \"{path}\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Buscar actualizaciones de las aplicaciones" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Limpiar actualización - no utiliza cachés, reprocesa todos los APK's" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Lista de categorías separadas por coma." #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "No se reconoce el comando \"%s\".\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "Cometer cambios" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "Could not find latest version code" msgstr "Empaquetado con la ultima versión de cada paquete" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "Could not find latest version name" msgstr "Empaquetado con la ultima versión de cada paquete" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "Couldn't find Application ID" msgstr "Construir todas las aplicaciones disponibles" #: ../fdroidserver/checkupdates.py #, fuzzy msgid "Couldn't find any version information" msgstr "Empaquetado con la ultima versión de cada paquete" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "Borrar archivos APK y/o OBBs sin metadatos del repositorio" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "No preguntar por la ruta al SDK de Android, solo fallar" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "No crear el tarbal de codigo fuente, útil cuando se esta probando la construcción" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "No refrescar el repositorio, útil cuando se esta probando la construcción y no se tiene conexión a Internet" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "No usar sumas de validación de rsync" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "Forzar la construcción de aplicaciones deshabilitadas y continuar independientemente de los problemas en el escaneo. Solo disponible en modo de pruebas." #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "Crear plantilla de metadatos de {appid}" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "Instalar todas las aplicaciones firmadas disponibles" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "Instalar paquetes compilados en dispositivos" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "Interactuar con el servidor HTTP del repositorio" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "" #: ../fdroidserver/init.py #, fuzzy msgid "Keystore for signing key:\t" msgstr "Ruta al almacén de claves para la llave de firmado del repositorio" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py #, fuzzy msgid "List files that would be reformatted (dry run)" msgstr "Listar archivos que serán reformateados" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "Parar esta construccion cuando haya excepciones" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py #, fuzzy msgid "No version information could be found." msgstr "¡Se encontró una excepción desconocida!" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "Solo procesar las aplicaciones que cuenten con actualizaciones automaticas" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "Licencia general del proyecto." #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "Path to main Android project subdirectory, if not in root." msgstr "Ruta al subdirectorio del proyecto principal de android, si no es la raíz." #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "Ruta al SDK de Android ( a veces cargada en ANDROID_HOME)" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "Ruta de acceso al repositorio git para usar como registro" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "Ruta al almacén de claves para la llave de firmado del repositorio" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "Procesar actualizaciones automaticas" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "" #: ../fdroidserver/update.py #, fuzzy msgid "Produce human-readable XML/JSON for index files" msgstr "Producir index.xml legible" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "URL del proyecto a importar." #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "Subir el registro al repositorio remoto de git" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "Actualizar el registro de transparencia binario de {url}" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "Empezar rápidamente un repositorio nuevo" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "Leer todos los archivos de metadatos y salir" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "Renombrar archivos APK que no corresponden a package.name_123.apk" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "Restringir la salida solo para advertencias y errores" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Rescribir todos los archivos de metadatos" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "Escanear en código fuente de un paquete" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "Firmar y ubicar paquetes en el repositorio" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "Firmar índicescreados con \"update --nosign\"" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "Saltear el escaneo de binarios y otros problemas en el código fuente" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "Especificar un directorio local donde sincronizar el repositorio" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "Especifique un fichero de identidad que ofrezca SSH para rsync" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "Mostrar más información que de costumbre" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Modo prueba - pone la salida solo en el directorio temporal, y siempre construye, incluso cuando la salida ya exista." #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "La URL base del repositorio para el registro (predefinido: https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "¡Se encontró una excepción desconocida!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Actualizar información del repositorio para paquetes nuevos" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "Actualizar el registro de transparencia binario de un URL" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "Usar servidor de construccion" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "Utilizar la fecha del APK en vez de la actual para los APKs nuevos que se agreguen" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "usando libcloud de Apache para sincronizar con {url}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Los comandos válidos son:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "Verificar la integridad de los paquetes descargados" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Advertir sobre posibles errores en los metadatos" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Si está configurado para índices firmados, crear sólo índices sin firma en este punto" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py #, fuzzy msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'Nombre Distinguido' usado cuando se generaron las llaves" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "opción ambigua: %(option)s podría corresponderse con %(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py #, fuzzy msgid "application ID of file to operate on" msgstr "app-id para verificar actualizaciones" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py #, fuzzy msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "app-id con VersionCode opcional con el formato APPID[:VERCODE]" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "no se puede abrir '%(filename)s': %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" #: ../fdroidserver/__main__.py #, fuzzy msgid "fdroid [] [-h|--help|--version|]" msgstr "uso: fdroid [-h|--help|--version] []" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "forzar errores al ser advertencias, o ignorar." #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "local_copy_dir no termina en \"fdroid\", quizá quiso escribir: \"{path}\"" #: ../fdroidserver/deploy.py #, fuzzy msgid "local_copy_dir must be an absolute path!" msgstr "directorio_copia_local ¡tiene que ser una ruta absoluta!" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "directorio_copia_local tiene que ser un directorio, ¡no un archivo!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "" #: ../fdroidserver/checkupdates.py #, fuzzy msgid "no version information found" msgstr "¡Se encontró una excepción desconocida!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" msgstr "Opciones" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "argumentos posicionales" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py #, fuzzy msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "local_copy_dir no termina en \"fdroid\", quizá quiso escribir: \"{path}\"" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "librería compartida" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "mostrar este mensaje de ayuda y salir" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "librería estática" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "se requieren los siguientes argumentos: %s" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "Cadena de opción inesperada: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "argumentos no reconocidos: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "uso: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "usando libcloud de Apache para sincronizar con {url}" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "el AndroidManifest.xml del {apkfilename} tiene una mala fecha: " #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "" msgstr[1] "" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/es_MX/0000755000175000017500000000000014770510164015176 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/es_MX/LC_MESSAGES/0000755000175000017500000000000014770510164016763 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/es_MX/LC_MESSAGES/fdroidserver.po0000644000175000017500000017767514770507747022065 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Leviatansan21 , 2020. # Hans-Christoph Steiner , 2020. msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.6-349-g907c04ea\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2020-04-29 12:49+0000\n" "Last-Translator: Hans-Christoph Steiner \n" "Language-Team: Spanish (Mexico) \n" "Language: es_MX\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.0.2\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: error: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Actualización limpia: no usar cachés, reprocese todos los APK" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Lista de categorías separadas por comas." #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "El comando '%s' no fue reconocido\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "Hacer Cambios" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "No se pudo encontrar '{command}' en su sistema" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "Could not find latest version code" msgstr "No se pudo encontrar el código de la última versión" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "Could not find latest version name" msgstr "No se pudo encontrar el nombre de la última versión" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "No se pudo encontrar {path} para eliminarlo" #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "No se pudo abrir el archivo APK para su análisis" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "Couldn't find Application ID" msgstr "No se pudo encontrar la ID del paquete" #: ../fdroidserver/checkupdates.py #, fuzzy msgid "Couldn't find any version information" msgstr "No se pudo encontrar el nombre de la última versión" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "No se pudo encontrar la ID del paquete" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "¡Negarse cobardemente a sobrescribir la configuración de clave de firma existente!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "Se creó un nuevo contenedor \"{name}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Creando \"{path}\" para configurar s3cmd." #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Creando directorio de registro" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "Crear un nuevo depósito de S3: {url}" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "Creando directorio de salida" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "Creando índice firmado con esta clave (SHA256):" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "Creando Directorio Temporal" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "Creando índice sin firmar en preparación para la firma" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "El código de versión actual {cv} es menor que la entrada de compilación más antigua {versionCode}" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "DEBUG_KEYSTORE no está establecido o el valor está incompleto" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "Eliminando archivo desconocido: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "Descripción '%s' es solo el resumen de la aplicación" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "La descripción tiene una línea duplicada" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" msgstr "%prog [opciones]" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "" msgstr[1] "" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/eu/0000755000175000017500000000000014770510164014574 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/eu/LC_MESSAGES/0000755000175000017500000000000014770510164016361 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/eu/LC_MESSAGES/fdroidserver.po0000644000175000017500000017473114770507747021451 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Gontzal Manuel Pujana Onaindia , 2020. msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.0a0-62-gc63c4b3d\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: eu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "" msgstr[1] "" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/fa/0000755000175000017500000000000014770510164014551 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/fa/LC_MESSAGES/0000755000175000017500000000000014770510164016336 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/fa/LC_MESSAGES/fdroidserver.po0000644000175000017500000020472614770507747021424 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Mostafa Ahangarha , 2020. # Danial Behzadi , 2021, 2024. # HM , 2023. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2024-11-26 15:16+0000\n" "Last-Translator: Danial Behzadi \n" "Language-Team: Persian \n" "Language: fa\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 5.9-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "{path} ‏local_copy_dir وجود ندارد!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "{apkfilename} از پیش روی {dev} نصب شده." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "\"{path}\" وجود دارد ولی s3cmd نصب نیست!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "{path} قالب پروندهٔ پشتیبانی شده‌ای نیست (استفاده: ‪metadata/*.yml‬)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "{path} به دست کلیدی که مجاز نیست امضا شده:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "{url} نشانی معتبری نیست!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: خطا: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d مشکل پیدا شد" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "‏%r قابل فراخوانی نیست" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "keypass در config.yml پیدا نشد!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "keystore در config.yml پیدا نشد!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "keystorepass در config.yml پیدا نشد!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "repo_keyalias در config.yml پیدا نشد!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "required آرگومانی نامعتبر برای موقعیتی‌هاست" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "sdk_path در config.yml تنظیم نشده!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' بیش از حد قدیمی است. اف‌دروید به build- tools-{version} یا جدیدتر نیاز دارد!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "اجرای {path} شکست خورد!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "‪.__call__()‬ تعریف نشده است" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "‪/issues‬ موجود نیست" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "کتابخانهٔ AAR اندروید" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "پروندهٔ APK اندروید" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "کد DEX اندروید" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "پیوند نمادین خراب: {path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "ساخت بسته از کد مبدأ" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "نمی‌توان {path} را بازنویسی کرد" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "بررسی برای به‌روز رسانی‌های برنامه‌ها" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "فرمان «%s» شناسایی نشد.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "ثبت دگرگونی‌ها" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Creating empty {config_file}" msgstr "خواندن {config_file}" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "ایجاد کردن شاخهٔ log" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "ایجاد کردن شاخهٔ output" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "ایجاد کردن شاخهٔ temporary" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "حذف APKها و یا OBBهای بدون فراداده از مخزن" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "خطا: %(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "پایان یافته" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "برچسب‌های HTML ممنوعه" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "پاک سازی گیت شکست خورد" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "واکشی گیت شکست خورد" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "بازنشانی گیت شکست خورد" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "مقداردهی نخستین زیرپیمانه‌ها" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "نصب بسته های ساخته روی افزاره‌ها" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "نصب کردن %s…" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "تعامل با کارساز HTTP مخزن" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "APK نامعتبر" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "VercodeOperation نامعتبر: {field}" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "سیاههٔ گلوله‌ای نامعتبر" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "پروندهٔ JAR جاوا" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "کلاس ترجمه شدهٔ جاوا" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "آینه‌های مخزن بدریخت." #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "خط ریشهٔ وب کارساز بدریخت:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "شاخهٔ output نیست" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "هیچ طّلاعاتی وجود ندارد." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "هیچ بسته‌ای مشخّص نشده" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "کاری برای انجام نیست" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "خروجی دادن JSON" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "پردازش به‌روز رسانی‌های خودکار" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "پردازش {apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "پردازش {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "فرستادن به {url}" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "آغاز سریع مخزنی جدید" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "خواندن {config_file}" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "برداشتن پرونده‌های مشخّص" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "برداشتن {path}" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "بازنویسی {appid}" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "پرش از {appid}: از کار افتاده" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "استثنایی ناشناخته پیدا شد!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "فضای پیشین نالازم" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "فضای پسین نالازم" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "استفاده از کارساز ساخت" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "فرمان‌های معتبر عبارت‌اند از:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "تأیید کردن امضای نمایه:" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "بایگانی پروندهٔ ZIP" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "شبیه‌سازی {url}" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "{path} را ایجاد کرد" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "حذف کردن: ‪repo/{apkfilename}‬" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "بار گرفتن «{}»" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "انتظار %s آرگومان می‌رفت" msgstr[1] "انتظار %s آرگومان می‌رفت" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "انتظار آرگومان می‌رفت" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "fdroid [] [-h|--help|--version|]" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "بایگانی پروندهٔ gzip" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "هیج APKای داده نشده" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "گزینه‌ها" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "پایمالی {path} موجود" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "آرگومان‌های موقعیتی" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "کتابخانهٔ اشتراکی" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "نمایش این پیام راهنما و خروج" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "کتابخانهٔ ایستا" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" #: ../fdroidserver/install.py msgid "true" msgstr "درست" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "آرگومان‌های ناشناخته: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "استفاده: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "بله" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "{path} پروندهٔ پیکربندی استانداردی نیست!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "{path}: {error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "{} ساخت شکست خورد" msgstr[1] "{} ساخت شکست خوردند" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "{} ساخت موفّق شد" msgstr[1] "{} ساخت موفّق شدند" ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/fdroidserver.pot0000644000175000017500000017472614770507747017443 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.4.0\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "" msgstr[1] "" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/fi/0000755000175000017500000000000014770510164014561 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/fi/LC_MESSAGES/0000755000175000017500000000000014770510164016346 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/fi/LC_MESSAGES/fdroidserver.po0000644000175000017500000020052514770507747021425 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # A , 2020. # Kaantaja , 2021. # Ricky Tigg , 2025. msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.0a0-62-gc63c4b3d\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2025-01-31 14:19+0000\n" "Last-Translator: Ricky Tigg \n" "Language-Team: Finnish \n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.10-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" on jo asennettu kohteeseen {dev}." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "Arkistoidaan {apkfilename} virheellisellä allekirjoituksella!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "Allekirjoitusten nouto '{apkfilename}':lle epäonnistui: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "'{apkfilename}':n asentaminen kohteelle {dev} epäonnistui: {error}" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "Haetut allekirjoitukset kohteelle '{apkfilename}' -> '{sigdir}'" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "{apkfilename} löytyi {url}:lla" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "Löytyi {count} ongelmaa {filename}:ssa" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "Löytyi {count} varoitusta {filename}:ssa" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "Ohitetaan vanhentuneet välimuistitiedot kohteelle {apkfilename}" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "Asennetaan '{apkfilename}' kohteelle {dev}..." #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "Säilytetään epäonnistunut koonti \"{apkfilename}\"" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "OBB-tiedoston nimen alussa on oltava \"main\". tai \"patch\".:" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "Tyhjän versionName:n ohittaminen kohteessa {apkfilename} metatiedoista: {version}" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "Käsitellään {apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "Kohteen packageName/versionCode/versionName lukeminen epäonnistui, APK virheellinen: '{apkfilename}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "Kohteen packageName/versionCode/versionName lukeminen epäonnistui, APK virheellinen: '{apkfilename}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "Luetaan {apkfilename} välimuistista" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "Allekirjoitetaan {apkfilename} uudelleen toimitetulla debug.keystore:lla" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "Ohitetaan '{apkfilename}' virheellisellä allekirjoituksella!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "Ohitetaan {apkfilename} virheellisellä allekirjoituksella!" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "Salaperäisen allekirjoituksen poistaminen kohteesta {apkfilename}" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "Tuntematon tiedosto '{filename}' koonnissa '{versionName}'" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "Ulosladataan {apkfilename}:a osoitteeseen androidobservatory.org" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "Ulosladataan {apkfilename} virustotaliin" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "%(filename)s:a ei voi avata: %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "Poistetaan: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "kieltäydy lataamisesta suojaamattoman HTTP-yhteyden kautta; käytä HTTPS:a tai määritä '--no-https-check': {apkfilename}" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename}:lla ({appid}) ei ole metatietoja!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "{apkfilename}:n AndroidManifest.xml:ssa on väärä päivämäärä: " #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "" msgstr[1] "" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/fr/0000755000175000017500000000000014770510164014572 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/fr/LC_MESSAGES/0000755000175000017500000000000014770510164016357 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/fr/LC_MESSAGES/fdroidserver.po0000644000175000017500000030137714770507747021445 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # Julien Gontier , 2020. # anonymous , 2020. # Hans-Christoph Steiner , 2020, 2021, 2024. # Jeannette L , 2020. # Nathan , 2020. # Virgile L. , 2020. # Lucas Brizzi , 2020. # Jose , 2020. # DGO , 2020, 2021. # Yannick A. , 2020. # Renaud Perrai , 2020. # rational , 2020. # Coucouf , 2020. # Alexandre Hô , 2020. # Yldun , 2020. # Renaud Perrai , 2020. # Éfrit , 2021. # hilariousperson , 2021. # Madeorsk , 2021. # Adrien le Maire , 2021. # gub , 2021, 2023. # ButterflyOfFire , 2021, 2022, 2023. # Vincent Finance , 2021. # Gavy , 2021. # lilim , 2021. # Jaxom , 2021. # booteille , 2021, 2022. # translator , 2021. # translator , 2022. # Julien Maulny , 2022. # Translator , 2022, 2023. # Ldm Public , 2022, 2023, 2024. # TopFox , 2022. # John Donne , 2022, 2023. # Deleted User , 2023. # Christopher Forzy , 2024. # Phantomwise , 2024. # Sylvain Pichon , 2024. # Sylvain Pichon , 2024. # Lzebulon , 2024. # Armand Camponovo , 2024. # Lula Bye , 2025. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2025-03-02 16:42+0000\n" "Last-Translator: Lula Bye \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 5.10.3-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "Clé SSH publique à utiliser comme clé de déploiement :" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "{path} encodé pour la variable secrète DEBUG_KEYSTORE :" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" n'a pas de fichier de métadonnées correspondant !" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "Le dossier racine pour « local_copy_dir » {path} n’existe pas !" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "«{apkfilename}» est déjà installé sur {dev}." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "\"{path}\" contient le récent {name} ({version})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "\"{path}\" existe mais s3cmd n'est pas installé !" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "Le format du ficher \"{path}\" n'est pas supporté (utiliser : metadata/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "\"{path}\" est signé par une clé qui n'est pas autorisée :" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" n'est pas une URL valide !" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s : erreur : %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "Les APK %d n'ont pas pu être signés ou vérifiés !" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d problèmes trouvés" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%r n’est pas appelable" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "%s ne produit pas de dict !" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "%s a un mauvais SHA-256 : %s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s n'est pas un champ de construction acceptable" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' non trouvé dans config.yml !" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "'keystore' n'est pas utilisé et 'smartcardoptions' est vide !" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "'keystore' non trouvé dans config.yml !" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "'keystorepass' non trouvé dans config.yml !" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' non trouvé dans config.yml !" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required' est invalide comme argument positionnel" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "'sdk_path' n'est pas configuré dans 'config.yml' !" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' est obsolète, fdroid requiert build-tools-{version} ou plus !" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "'{path}' n'a pas pu être exécuté !" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "Le format de '{path}' est incorrect, il devrait s'agir d’un dictionnaire !" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' n'est pas un(e) {field} valide dans {appid}. Motif regex : {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' n'est pas un(e) {field} valide et devrait être {pattern}" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "--merge-request fonctionne seulement sur un unique appid !" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...checkupdate a échoué pour {appid} : {error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() n'est pas défini" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "/issues est manquant" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "Une URL est requise en argument !" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "Les signatures des APK ont des certificats différents dans {path} :" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "Ajouter des signatures PGP avec GnuPG pour les paquets dans le dépôt" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "Ajout d'une clé de signature de dépôt à un dépôt non signé" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "Créer les métadonnées de base manquantes pour les APKs qui n'en sont pas pourvus" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "Ajout d'un nouveau dépôt pour seulement {name}" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "Alias de la clé de signature du dépôt dans le trousseau" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "AllowedAPKSigningKeys est manquante mais des références binaires sont indiquées" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "Autoriser une version différente (ou branche git) a être spécifiée pour l'import initial" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "Faire aussi un miroir de la section d'archive complète" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "Alerter aussi à propos des problèmes de formatage, comme rewritemeta -l" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "Bibliothèque Android AAR" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "Fichier Android APK" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "Code Android DEX" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "SDK Android introuvable dans {path} !" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "Le SDK Android '{path}' n’existe pas !" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "Le chemin du SDK Android '{path}' n'est pas un dossier !" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "L'outil SDK Android {cmd} n'a pas été trouvé !" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "L’application possède des fichiers binaires mais n'a pas les AllowedAPKSigningKeys correspondantes pour épingler le certificat." #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "L'application a NoSourceSince ou ArchivePolicy à « 0 version » mais AutoUpdateMode ou UpdateCheckMode ne valent pas None" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "L'application est dans '{repo}' mais a un lien vers {url}" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Des versions de l’application possède des fichiers binaires mais n'ont pas les AllowedAPKSigningKeys correspondantes pour épingler le certificat." #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "Il n'est pas nécessaire d'ajouter .git" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "Archivage de {apkfilename} avec une signature invalide !" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode avec UpdateCheckMode : HTTP doit avoir un modèle." #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "Répondre automatiquement Non à toutes les demandes." #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "Répondre automatiquement Oui à toutes les demandes." #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "Mauvais type d'entrée \"{mirrortype}\" dans le paramétrage des miroirs : {mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "URL de base à mirorer, peut inclure la clef de signature d'index à l'aide de la chaîne de requête : ?fingerprint=" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "Branche « {branch} » utilisée comme commit dans le build « {versionName} »" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "Branche '{branch}' utilisée comme commit dans srclib '{srclib}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "Lien symbolique cassé : {path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "Construire un paquet depuis les sources" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "Compiler toutes les applications disponibles" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "Build généré par `fdroid import` — supprimer la ligne désactivée une fois prêt" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "Le dépôt git des métadonnées de build a des changements non sauvegardés !" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "Compiler uniquement la dernière version de chaque paquet" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "Dépôt du build basé sur \"%s\" avec cette config :" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "Impossible de mettre à jour l'application automatiquement sans \"CurrentVersionCode\"" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Build impossible à cause de l'erreur lors de l'analyse" msgstr[1] "Build impossible à cause des {} erreurs lors de l'analyse" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Impossible d'écrire sur \"{path}\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "Catégories « %s » invalides" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "Catégories non définies" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "La catégorie « {category} » est définie mais n'est utilisée par aucune application !" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Vérifier les mises à jour pour les applications" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "Vérification de l'archivage pour {appid} — apks : {integer}, keepversions : {keep}, archapks : {arch}" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Mise à jour propre — n'utilise pas les caches, traite à nouveau tous les APKs" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "Colorer l'affichage des journaux" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Liste de catégories séparées par des virgules." #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "La commande '%s' n'est pas reconnue.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "Sauvegarder les changements (commit)" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "Sauvegarder les changements, les pousser sur le dépôt et faire une demande d'intégration" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "Conflit des définitions « {field} » entre les fichiers .yml et ceux traduits :" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Conflit d'arguments : '--verbose' et '--quiet' ne peuvent être choisis en même temps." #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "Impossible de trouver '{command}' sur votre système" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Impossible de trouver la dernière version du code" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Impossible de trouver le nom de la dernière version" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "Chemin {path} introuvable pour sa suppression" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "Impossible d'ouvrir le fichier APK {path} pour analyse : " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Impossible de récupérer la taille \"{size}\", mauvais type \"{type}\"" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Impossible de trouver l'ID de l'application" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "Impossible de trouver des informations sur la version" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "Impossible de trouver l'ID du paquet" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "Je refuse de remplacer la configuration existante des clés de signature !" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "Nouveau container « {name} » créé" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Création de « {path} » pour configurer s3cmd." #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Creating empty {config_file}" msgstr "Lecture de '{config_file}'" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Création du répertoire des logs" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "Création d'un nouveau bucket S3 : {url}" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "Création du répertoire de sortie" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "Création d'un index signé avec la clé (SHA256) :" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "Création du répertoire temporaire" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "Création d'un index non signé pour préparer la signature" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "Le code de la version actuel {cv} est moins récent que la dernier build {versionCode}" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "DEBUG_KEYSTORE n'est pas définie ou sa valeur est incomplète" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "Supprimer les APK et/ou OBB sans métadonnées dans le dépôt" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "Suppression de l'archive en cours, le dépôt occupe trop de place ({size} max {limit})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "Suppression de l'historique de git-mirror, car le dépôt occupe trop de place ({size} max {limit})" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "Suppression d'un fichier inconnu : {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "Description de '%s' n'est qu'un résumé de l'application" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "Ligne dupliquée dans la description" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "La longueur de la description {length} dépasser la limite du nombre de caractères autorisés {limit}" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "Vouliez-vous dire config/{name}.yml ?" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "Vouliez-vous dire {code} ?" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "Ne pas ajouter \"disable:\" aux entrées générées" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "Ne pas déployer les nouveaux fichiers dans le dépôt" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "Ne pas inclure « {path} » dans l'URL !" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "Ne pas demander le chemin vers le SDK Android, juste abandonner (fail)" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "Ne pas supprimer les clés privées générées par le keystore" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "Ne pas créer un tarball avec les sources, utile pour tester un build" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "Ne pas rafraîchir le dépôt, utile pour tester un build sans connexion internet" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "Ne pas utiliser les sommes de contrôle rsync" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "Téléchager F-Droid.apk en utilisant des miroirs avec moins de fuites réseaux" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Télécharger une image complète des petits dépôts" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Le téléchargement du référentiel a déjà échoué une fois, ne pas réessayer." #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "Échec lors du téléchargement de {url}. {error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "La double déclaration d'une antifonction dans {path} a été ignorée !" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "Entrée doublon \"%s\" dans le paramétrage des miroirs !" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "Lien dupliqué dans « {field} » : {url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "ERREUR : %(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "ERREUR : La sous-commande \"server\" a été supprimée, utilisez plutôt \"deploy\" !" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "ERREUR : type de CI non supporté, les corrections sont bienvenues !" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "ERREUR : hébergeur git « %s » non supporté, les corrections sont les bienvenues !" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "ERREUR : {key} dans {path} n'est pas \"archive\" ou \"repo\"." #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "ERREUR : {key} :{subkey} dans {path} n'est pas une clé valide parmi : {allowed_keys}." #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "L'encodage est mis sur '{enc}', FDroid peut rencontrer des problèmes d'encodage. Merci de le mettre sur 'UTF-8' pour de meilleurs résultats." #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" "Entrez le chemin du SDK Android (%s1) :\n" "> " #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "La variable d'environnent {var} de {configname} n'est pas configurée !" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "La variable d'environnent {var} de {configname} n'est pas configurée !" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "Erreur lors du déploiement 'github_releases' : {} est absent (vous devriez peut-être d'abord lancer `fdroid update`)." #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "Erreur lors de l'obtention de l'adresse du dépôt" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "Quitter avec un code différent de zéro si des problèmes ont été détectés" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "Extraire les métadonnées de l'application depuis un dépôt source" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "Extraction des signatures à partir des APKs" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "F-Droid.apk ne peut pas être téléchargé depuis les source connues !" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "Erreur durant la copie de {path} : {error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "Erreur lors de l'extraction des signatures pour '{apkfilename}' : {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "Erreur de lecture {path} : {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "Impossible de redimensionner {path} : {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "La création du S3 Bucket a échoué : {url}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "Impossible d'obtenir les informations de l'APK, suppression {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "Échoument lors de la récupération des informations de l'APK, saut de {path}" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "Échec de l’obtention de l’empreinte de la clé de signature de l’APK" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "Impossible d'installer « {apkfilename} » sur {dev} : {error}" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "Erreur lors de la signature de l'application" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "Récupération de l'ID du serveur de construction depuis la VM : {buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "Récupération de la signature pour '{apkfilename}' -> '{sigdir}'" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "Le fichier a été supprimé au cours du traitement : {path}" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "Terminé" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Balises HTML interdites" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "Forcer la construction des application désactiver, et opérateur indépendament au scan des problèmes. Seulement autoriser en mode de test." #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "Arrêt forcer de la construction après {0} secondes de délai d'attente !" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "Forcer le scan d'applications et versions désactivées." #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "« {path} » graphique trouvée sans métadonnées pour l'application « {name} » !" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "Mauvais fichier de financement « {path} » trouvé pour « {name} » :" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "Appids invalide trouvée dans l'argument" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "Code de version invalide trouvée pour certaines application" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "Plusieurs fichiers de bloc de signature JAR trouvé à {path}" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "Plusieurs certificats de signatures ont été trouvés !" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "De multiples fichiers de métadonnées ont été trouvés pour {appid}" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "Plusieurs certificats de signature ont étés trouvés pour le référentiel." #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "Aucun certificat signée trouvée dans le dépot." #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "Aucun fichier trouvée a %s" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "{apkfilename} trouvé à {url}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "{count} problèmes détectés dans {filename}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "{count} avertissements détectés dans {filename}" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "Créer les métadonnées de base manquantes pour {appid}" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "Vérification échouée du Git a '%s'" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "Nettoyage du Git échoué" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "Recherche du Git échouée" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Impossible de définir la branche par défaut du Git distant : \"%s\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Reset de Git échouée" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "Échec du sous-module Git deinit" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "Synchronisation du submodule Git échoué" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "Échec de la mise à jour du sous-module Git" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "HTTPS doit être utilisé avec les URL de Subversion !" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "Si un miroir git prend trop de place, permet à l'archive d'être supprimé" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "Si ce téléversement échoue, tente de le téléverser manuellement vers {url}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "Ignore '{field}' dans les métadonnées '{metapath}' parce que c'est déprécié." #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "Ignorer l'entrée FUNDING.yml supérieure à 2048 : %s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "Un mauvais élément du manifest est ignoré : %s" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "{oldfile} est obsolète, utilisez {newfile}" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Paquet sans métadonnées ignoré : " #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "Ignorer les données de cache périmées pour {apkfilename}" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "Inclure des fichiers APK signés avec algorithmes désactivés comme MD5" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "Inclure au miroir les fichiers .asc de signature PGP" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "Inclure les journaux de construction dans le miroir" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "Inclure au miroir les tarballs de source" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "Inclure les métadonnées de %s@%s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "Inclure les métadonnées de {path}" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "Initialisation des sous-modules" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "Installer toutes les applications signées disponibles" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "Installer les paquets compilés sur le(s) périphérique(s)" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "Installation de %s …" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "Installation de '{apkfilename}' sur {dev}…" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "Interagir avec le serveur HTTP du dépôt" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "APK invalide" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "AutoUpdateMode non valide : {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "UpdateCheckMode non valide : {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "VercodeOperation non valide : {field}" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "VercodeOperation non valide : {invalid_ops}" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "ID de l'application invalide {appid}" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Liste à puces non valide" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "Nom non valide pour le fichier publié :%s" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "Ndk non valide : entrée dans le build : « {ndk} »" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "Redirection non valide vers non-HTTPS : {before} -> {after} " #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "Métadonnée de scrlib invalide : '{file}' n'existe pas" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "Métadonnée de scrlib invalide : '{file}' ne peut être analysé" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "Métadonnée de scrlib invalide : la clé '{key}' est inconnue dans '{file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "La signature JAR n'a pas pu vérifier :{path}" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "Signature JAR vérifiée : {path}" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "Fichier Java JAR" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "Java JDK introuvable ! Installez dans un emplacement standard ou définissez java_paths !" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "Classe Java compilée" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "Java jarsigner introuvable ! Installez dans un emplacement standard ou définissez java_paths !" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "Attributs Javascript trouvée dans HTML src" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "Conserver la version ayant échoué « {apkfilename} »" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "Stockage des clés signée :\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "La clé de débogage connue est utilisé dans AllowedAPKSigningKeys : " #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "Le dernier commit utilisé '{commit}' ressemble a une balise, mais le UpdateCheckMode est '{ucm}'" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "Les méthodes de don via Liberapay font partie de Liberapay : field" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "Lister les fichiers qui seront reformater (test à blanc)" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "Les paramètres de localisation sont inclus dans l'URL f-droid.org" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "Faire la construction s'arrèter si exceptions" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "Mirroirs de dépot malformée." #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "serverwebroot malformer en ligne :" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "Profondeur maximale de récursivité dans le fichier ZIP atteinte : %s" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Cloner entièrement le repo et les archives, tous les fichiers." #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "Répertoire de destination manquant" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "Déplacement des déclarations des antifonctions vers les fichiers de traduction :" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "Ni « repo_pubkey », ni « keystorepass » ne sont définis dans config.yml" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "Aucun APK pour le paquet : %s" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "Aucun SDK Android trouvée !" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "Aucun périphérique connecté trouvé" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "Aucun appareil trouvé pour `adb install` ! Veuillez en branchez un." #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "Aucune empreinte dans l'URL." #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "Aucun sous-module git disponible" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "Aucun projet gradle n'a pu être trouvé. Spécifier --subdir ?" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "Aucune information trouvée." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "Aucune étiquette correspondante n’a été trouvée" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "Aucune version minimale du SDK trouvée dans {0}, utilisation de la valeur par défaut (3)." #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "Pas besoin de spécifier que l'application est un logiciel libre" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "Pas besoin de spécifier que l'application est pour Android" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "Aucune option configurée ! Éditez votre config.yml pour définir au moins l'une d'entre elles :" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "Aucun paquet spécifié" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "Aucun APK signé disponible pour %s" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "Aucun répertoire de sortie signé — il n'y a rien à faire" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "Aucun certificat signé trouvé dans {path}" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "Ce paquet n'existe pas : %s" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "Aucun code de version {versionCode} pour l'application {appid}" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "Aucune étiquette trouvée" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "Aucun dossier non signé — il n'y a rien à faire" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "Aucune information sur la version n’a été trouvée." #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "Définition de la taille invalide : \"{}\"" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "Rien à faire" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "Rien à faire pour {appid}." #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "Maintenant, définissez-les dans config.yml :" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "Le fichier OBB a un code de version plus récent ({integer}) que n'importe quel APK :" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "Le nom de fichier OBB doit commencer par «principal». ou \"patch\" :" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "Le nom de paquet d'OBB ne correspond pas à un fichier APK pris en charge :" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Machine hors-ligne, la génération du miroir git est sautée jusqu'à `fdroid deploy`" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "L'un des éléments de configuration 'github_releases' ne contient pas la valeur 'packageNames'. ignoré..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "L'un des éléments de configuration 'github_releases' ne contient pas la valeur 'projectUrl'. ignoré..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "L'un des éléments de configuration 'github_releases' ne contient pas la valeur 'token'. suivant ..." #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Seuls les formats PNG et JPEG sont pris en charge pour les graphiques, trouvés : {path}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "Traiter uniquement les applications ayant des mises à jour automatiques" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Les méthodes de donation OpenCollective vont dans le champ OpenCollective:" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Générez un rapport JSON dans un fichier nommé d'après l'APK." #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "Sortie JSON vers stdout." #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "Sortie vers JSON" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "Licence globale du projet." #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "Substitution du nom de version vide dans {apkfilename} des métadonnées : {version}" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "Le paquet \"{appid}\" existe déjà" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "Analyse du fichier manifeste sur « {path} »" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "Mot de passe requis avec le nom d'utilisateur" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "Chemin d'accès au sous-répertoire principal du projet Android, si ce n'est pas dans le répertoire racine." #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "Chemin vers le SDK Android (parfois défini dans ANDROID_HOME)" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "Chemin vers un dépôt git à utiliser comme journal" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "Chemin vers le keystore pour la clé de signature du dépôt" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Afficher la variable secrète dans le terminal pour un copier/coller facilité" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "Le mode de confidentialité a été activé, dû à votre localisation ({country_code})." #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "Problème avec le fichier ZIP : %s, erreur %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "Problème avec xml sur '{path}'" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "Réaliser les mises à jour automatiques" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "Traitement de {apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "Traitement de {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "Produire des fichiers d'index XML ou JSON lisibles par un humain" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "URL du projet à importer" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "La ponctuation doit être évitée" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "Envoyer les logs dans ce dépôt git distant" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "Envoyer les logs de transparence de la compilation vers {url}" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "L'envoie au serveur distant a échoué !" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "Envoyer vers {url}" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "Démarrer un nouveau dépôt rapidement" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "Lire toutes les métadonnées et quitter" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "Lecture de '{config_file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "La lecture de packageName/versionCode/versionName a échoué, APK invalide : '{apkfilename}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "La lecture de packageName/versionCode/versionName a échoué, APK invalide : '{apkfilename}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "Lecture de {apkfilename} à partir du cache" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Actualisation et mise en cache des règles et signature à partir du réseau." #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "Supprimer l'archive d'origine et les APKs si la vérification est effectuée avec succès." #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Suppression des fichiers spécifiés" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "Suppression de {path}\"" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "Renomme les fichiers APK dont le nom ne ressemble pas à nom.paquet_123.apk" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "Re-signature de {apkfilename} avec le debug.keystore fournit" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "Redimensionner toutes les icônes excédant la taille maximale en pixels et quitter" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "Limiter la sortie aux avertissements et aux erreurs" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "Nouvel essai de téléchargement suite à échec : %s" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Réécrire toutes les métadonnées" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "Réécriture de « {appid} »" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "Exécuter sur le dépôt git qui a des modifications non validées" #: ../fdroidserver/nightly.py #, fuzzy, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "Lancer sur {cibase} pour trouver -debug.apk et passer repo_basedir {repo_basedir}" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "Exécuter rewritemeta pour corriger le formatage" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "Exécution de la première passe avec la vérification MD5 désactivée" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "Exécution de wget dans {path}" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "Le SHA-256 de {url} ne correspond pas à l'entrée !" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "Analyse le(s) APK(s) généré(s) afin de trouver les classes connues comme non libres." #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "Scanner le code source d'un paquet" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "Le scan a détecté {count} problèmes dans {apk}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "Le scan a détecté {count} problèmes dans {appid} :" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "Le scanner a trouvé {count} problèmes dans {appid} :{versionCode} :" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "Le scanneur a trouvé {} problème" msgstr[1] "Le scanneur a trouvé {} problèmes" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "Analyse de l'APK à la recherche de signature de blocs supplémentaires." #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "Analyse de l’APK avec dexdump pour les classes non libres connues." #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "Installer NDK {release} ({version})" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "Réglez l'horloge à cette heure à l'aide de :" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "Régler le maximum de versions dans le dépôt avant que les plus anciennes soient archivées" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "Définition de la limite de fichiers ouverts à {integer}" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "Programmer une compilation de l'application pour le dépôt des versions de test" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "Définir la limite d'échec du nombre de fichiers ouvert : " #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "Définir une timeout de {0} secondes pour cette construction" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "Signer et déplacer les paquets dans le dépôt" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "Signer les indexes créés avec update --nosign" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "Sauter le scan du code source pour des fichiers binaires et d'autres problèmes" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "Omission de '{apkfilename}' qui a une signature non valide !" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "Ignorer le miroir GitLab Pages car le dépôt est trop volumineux (>%.2fGB) !" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "Omission de la génération de l'index pour {appid}" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "Omission de {apkfilename} qui a une signature non valide !" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "Omission de {appid} : désactivé" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "Spécifier un dossier local à synchroniser avec le dépôt" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "Spécifier un fichier d'identité à fournir à SSH pour utiliser rsync" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "Spécifier le fichier de magasin de clés de débogage à utiliser." #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "Fournir encore plus d'information que d'habitude" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "Ignorer la signature mystère de {apkfilename}" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "Le résumé '%s' est juste le nom de l'application" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "Le résumé de taille {length} est au-dessus de la limite de {limit} caractères" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "L'horloge système est plus âgée que la date dans {path} !" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "Le mode de mise à jour par étiquettes fonctionne seulement pour les dépôts git, hg, bzr et git-svn pour le moment" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "Le mode de mise à jour par étiquettes est utilisé dans git-svn, mais le dépôt n'était pas paramétré avec des étiquettes" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Mode test — mettre la sortie dans le dossier tmp uniquement et toujours compiler, même si la sortie existe déjà." #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "Le code de version OBB doit venir après \"{name}. :" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "URL de base du dépôt à journaliser (par défaut : https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "Le répertoire dans lequel écrire le miroir" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "Le fichier à inclure dans le dépôt (chemin ou glob)" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "L'empreinte du dépôt ne correspond pas." #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "Le dossier racine pour local_copy_dir \"{path}\" n'existe pas !" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "Il y a une collision de keyalias — publication interrompue" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "Voici les applications qui ont été archivées à partir du dépôt principal." #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "Cette commande ne devrait jamais être utilisée pour copier f-droid.org ! Une copie occupe plus de 600GB." #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "Ceci est un dépôt d’applications à utiliser avec FDroid. Les applications publiées dans ce dépôt sont soit les binaires officiels compilés par les développeurs de ces applications, soit celles compilées par f-droid.org à partir des sources en utilisant les outils disponibles sur https://gitlab.com/fdroid." #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "Ce dépôt a déjà des méta-données locales : %s" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" "Pour terminer la configuration, ajoutez vos APK dans « %s ».\n" "Ensuite lancez « fdroid update -c ; fdroid update ».\n" "Pensez à modifier le fichier « config.yml »\n" "pour indiquer l'URL, le nom du dépôt et d'autres éléments.\n" "Vous devriez aussi paramétrer une clé de signature\n" "(une clé temporaire peut avoir été générée automatiquement).\n" "\n" "Plus d'informations sur : https://f-droid.org/fr/docs/Setup_an_F-Droid_App_Repo\n" "et https://f-droid.org/fr/docs/Signing_Process." #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "Pour utiliser awsbucket, awssecretkey et awsaccesskeyid doivent aussi être configurées dans config.yml !" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "Pour utiliser rclone, rclone_config et awsbucket doivent être configurés dans config.yml." #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "L'URL doit commencer par https:// ou http://" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "Les raccourcisseurs d'URL ne doivent pas être utilisés" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "URL {url} en Description : {error}" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "Balise de licence non valide \"{}\" ! Utilisez uniquement des balises approuvées par la FSF ou l'OSI de https://spdx.org/license-list" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Balise de licence non valide \"{}\" ! Utilisez uniquement des balises de licence configurées dans votre fichier de configuration" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "Entrée {key} inconnue dans {configname}" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "Exception inconnue détectée !" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "Fichier '{filename}' inconnu dans la construction '{versionName}'" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "Format de méta-données inconnu : %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "Format de méta-données inconnu : {path} (utilisez : *.yml)" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "Version inconnue de aapt, peut causer des problèmes : " #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "Espace inutile au début" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "Espace inutile à la fin" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "Champ application non reconnu '{fieldname}' dans '{path}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Option de compilation '{build_flag}' non reconnue dans '{path}'" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "Type de fichier non pris en charge \"{extension}\" pour graphique de dépôt" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "Fichier graphique non pris en charge trouvé : {path}" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "Extlib non utilisée à %s" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "Fichier non utilisé à %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "Chemin scandelete inutilisé : %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "Chemin scanignore inutilisé : %s" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Mettre à jour les données des dépôts pour les nouveaux paquets" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "Mettre à jour le rapport de transparence des fichiers binaires pour une URL" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData a une URL invalide : {url}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "UpdateCheckData doit correspondre au code de la version en nombre entier (\\d ou [0-9]) : {codeex}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "UpdateCheckData doit utiliser une URL HTTPS : {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "UpdateCheckData URL non valide : {url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode est configuré mais on dirait que checkupdates n'a pas encore été lancé." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName est défini sur l’ID d’application connu, il peut être supprimé" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "Téléversement de {apkfilename} vers androidobservatory.org" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "Téléversement de {apkfilename} vers virustotal" #: ../fdroidserver/lint.py #, fuzzy msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Utiliser /HEAD plutôt que /master pour pointer un fichier dans la branche par défaut" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Utiliser 'fdroid update -c' pour le créer." #: ../fdroidserver/build.py msgid "Use build server" msgstr "Utiliser le serveur de build" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "Utiliser la date de l'APK plutôt que la date courante pour les APKs nouvellement ajoutés" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "Utiliser \"{path}\" pour configurer s3cmd." #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "Utiliser \"{path}\" pour configurer un stockage distant." #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "Utilisation de la signature d'APK v2" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "Utilisation de la signature d'APK v3" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "Utilisation de la signature JAR" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "L'utilisation de l'utilitaire jarsigner de Java n'est pas recommandé pour vérifier les APKs ! Utiliser apksigner" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "Utilisation d'un dictionnaire vide plutôt que du contenu de {path} !" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "Utilise le trousseau existant \"{path}\"" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "Utiliser rclone pour synchroniser avec : {url}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "Utiliser s3cmd pour synchroniser avec : {url}" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Les commandes valides sont les suivantes :" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "Vérifier dans le cache plutôt que de télécharger à nouveau." #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "Vérifier l'intégrité des paquets téléchargés" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "Vérification de la signature d'index :" #: ../fdroidserver/install.py #, fuzzy, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "Vérifier le paquet {path} avec apksigner." #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "L’API de VirusTotal ne permet pas d’envoyer des fichiers plus grands que 32Mo, utilisez {url} pour envoyer {path}." #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Avertir de possibles erreurs dans les métadonnées" #: ../fdroidserver/scanner.py #, fuzzy msgid "WebAssembly binary file" msgstr "Fichier binaire WebAssembly" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Lorsqu'il est configuré pour les index signés, ne créez que des index non signés à ce stade" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "Lors du linting, tout le dépôt yamllint est désactivé par défaut. Cette option force yamllint malgré tout." #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "En cas d'échec de la signature ou de la vérification, fermer en indiquant un code d'erreur." #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "Souhaitez-vous télécharger et installer F-Droid.apk via adb ? (OUI/non)" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "Souhaitez-vous télécharger le(s) application(s) depuis f-droid.org ? (OUI/non)" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'Nom distingué' utilisé lors de la génération des clés" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "Vous pouvez utiliser ANDROID_HOME pour définir le chemin de votre SDK, ex. :" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "Archive ZIP" #: ../fdroidserver/install.py #, fuzzy, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "adb reporte que {serial} est \"{status}\" !" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "ajoute IdentityFile à {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "ajoute à {name} : {path}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "option ambiguë : %(option)s peut correspondre à %(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "apksigner introuvable ! Impossible de signer ou de vérifier les APK modernes" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "apksigner est introuvable, il est requis pour la signature !" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "applicationId du fichier à traiter" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "ID d'application avec le versionCode optionnel sous la forme APPID[:VERCODE]" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "archive_url doit se terminer par /archive" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "argument \"-\" avec le mode %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "argument %(argument_name)s : %(message)s" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "tentative de connexion SSH simple pour tester la clé de déploiement :" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "impossible d'analyser la spécification de scrlib (not a string) : '{}'" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "impossible d'ouvrir « %(filename)s » : %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "impossible d'ouvrir les url sans https : '{};" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "Impossible de trouver srclibs : \"{path}\"" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "Impossible d'avoir plusieurs arguments du sous-parseur" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "impossible de fusionner les actions — deux groupes sont nommés %r" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "impossible de publier la mise à jour, avez-vous affecté la clé de déploiement ?" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "clonage de {url}" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "commandes des modules d'extension :" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "option en conflit : %s" msgstr[1] "options en conflit : %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "conflit de l'alias subparser : %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "conflit de subparser : %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "impossible de lire '{path}'" #: ../fdroidserver/common.py #, fuzzy msgid "could not parse srclib spec (no name specified): '{}'" msgstr "impossible d'analyser la spécification srclib (pas de référence spécifiée) : '{}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "impossible d'analyser la spécification srclib (pas de référence spécifiée) : '{}'" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "{path} a été créé" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "la version actuelle est plus récente : ancien vercode={old}, nouveau vercode={new}" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "suppression : repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "ficher de dépendance sans verrouillage" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "journal du processus déployé de {path} vers {dest}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "dest= est obligatoire pour les options comme %r" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "téléchargement de '{}'" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "le téléchargement de l'analyse des signatures de '{}' a échoué" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "binaire exécutable, possiblement du code" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "%s argument attendu" msgstr[1] "%s arguments attendus" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "au moins un argument est attendu" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "un seul argument au plus est attendu" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "un seul argument est attendu" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "fdroid [] [-h|--help|--version|]" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "recupération de la dernière version des signatures depuis le web" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "forcer les erreurs (par défaut) sur les métadonnées à être des avertissements, ou les ignorer." #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "git svn clone a échoué" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "archive GZIP" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "argument explicite %r ignoré" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1 doit avoir une signature, utilisez `fdroid signindex` pour la créer !" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 doit avoir une signature, utilisez `fdroid signindex` pour la créer !" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "valeur %(type)s non valide : %(value)r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "choix non valide : %(value)r (choisissez parmi %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "valeur de conflict_resolution invalide : %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "chaîne d’option non valide %(option)r : doit commencer par un caractère %(prefix_chars)r" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "ipfs_cid introuvable, omission de la génération de CIDv1" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "la recette de la dernière version est plus récente : ancien vercode={old}, nouveau vercode={new}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "local_copy_dir ne semble pas se terminer avec \"fdroid\", peut être voulez-vous dire : \"{path}\"" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "local_copy_dir doit être un chemin absolu !" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "local_copy_dir doit être un dossier et non un fichier !" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "le miroir «%s» ne se termine pas par «fdroid» !" #: ../fdroidserver/index.py #, fuzzy, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "miroir configuré deux fois, dans config.yml et {path} !" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "les arguments qui s'excluent mutuellement doivent être optionnels" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "prochaine mise à jour du cache de {name} attendu dans {time}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "aucune \"icon\" dans {appid}" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "aucun APK n’est fourni" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "aucune information sur la version n’a été trouvée" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "non permis avec les arguments %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "un des arguments %s est requis" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "accepte uniquement les chaînes de caractères, listes et tuples" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "options" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "écrasement de {path} en cours" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "arguments de position" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "le déploiement du journal du processus {path} vers {dest} a echoué !" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "signature manquante du fichier binaire de référence" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "refuser le téléchargement via une connexion HTTP non sécurisée (utilisez HTTPS ou précisez --no-https-check) : {apkfilename}" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "repo_icon \"repo/icons/%s\" n'existe pas, génération d'une icône de substitution." #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "repo_url doit se terminer par /repo" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "rsync n'est pas présent ou ne fonctionne pas : {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd synchroniser les index de {path} vers {url} et les supprimer" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "s3cmd synchroniser les index de {path} vers {url} et les supprimer" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "l'analyse du cache est mal formée ! Vous pouvez le nettoyer avec : '{clear}'" #: ../fdroidserver/deploy.py #, fuzzy msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "serverwebroot: le chemin ne se terminer pas avec \"fdroid\", peut être voulez-vous dire :" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "bibliothèque partagée" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "afficher ce message d'aide et quitter" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "APK signé, soit un chemin de fichier ou une URL HTTPS." #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "passer le déploiement des journaux de compilation complets : le contenu du journal est vide" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "passer le déploiement des journaux de compilation complets : non activé dans la configuration" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "omission de la tarball de sources : {path}" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "les srclibs manquent un nom ou un @" #: ../fdroidserver/scanner.py msgid "static library" msgstr "librairie statique" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "le fichier binaire de référence fourni a autorisé le signataire {signer}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "les arguments suivants sont requis %s" #: ../fdroidserver/install.py #, fuzzy msgid "true" msgstr "vrai" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "chaîne d'option inattendue : %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "parser inconnu %(parser_name)r (choix : %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "arguments non reconnu : %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "permissions dangereuses sur '{config_file}' (doit être 0600) !" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "usage : " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "utilisation de Apache libcloud pour syncronizer avec {url}" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com limite le nombre de requêtes, en attente avant de réessayer..." #: ../fdroidserver/install.py #, fuzzy msgid "yes" msgstr "oui" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "{0} appli, {1} alias de clé" msgstr[1] "{0} applis, {1} alias de clé" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) ne contient pas de métadonnées !" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "Le fichier AndroidManifest.xml de {apkfilename} possède une date incorrecte : " #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} n’a pas de nom ! Utilisation de l’ID d’application à la place." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "{appid} de {path} n’est pas un ID d’application Android valide !" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "{appid} de {path} n’est pas un nom de paquet Java valide !" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "{appid} possède à la fois des APK et des fichiers : {files}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "{appid} n'a pas de {name}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "{appid} : Bibliothèque externe (extlib) {path} inconnue dans la version '{versionName}'" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "{appid} : pas de versions spécifiées, s'exécute à partir de l'état présent du code source" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "{appid} : {field} doit être de '{type}', mais est un '{fieldtype} !'" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "{appid} : {field} doit être un '{type}', mais est un '{fieldtype}' !" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "{build_flag} doit être un entier, valeur trouvée : {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "{build_flag} doit être une liste ou une chaîne de caractères, valeur trouvée : {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "{file} est vide ou corrompu !" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" n'existe pas ! Vérifiez \"config.yml\"." #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "{path} existe déjà, ignorance des résultats de l'importation !" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "{path} n’existe pas ! Créez-le en exécutant :" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "{path} a une mauvaise signature de fichier \"{pattern}\", possibilité d'une faille Janus !" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} a été signalé par virustotal {count} fois :" #: ../fdroidserver/install.py #, fuzzy, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "{path} a la mauvaise empreinte ({fingerprint}) !" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "{path} n'est pas un dictionnaire \"key: value\" mais un {datatype}." #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "{path} n'est pas un fichier de configuration standard !" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "{path} n'est pas une liste mais un {datatype}." #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "{path} n'est pas un {expected_type}, mais un {datatype} !" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "{path} a une taille nulle !" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "{path} supérieur à 200MB, envoi manuel : {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "{path} : \"{code}\" n'est pas un code de pays ISO_3166-1 alpha-2 valide !" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "{path} : {error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "{url} ne fini pas par \"fdroid\", vérifiez l'URL !" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "{url} ne commence pas par \"http\" !" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "{} compilation échouée" msgstr[1] "{} compilations échouées" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "{} compilation réussie" msgstr[1] "{} compilations réussies" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/fy/0000755000175000017500000000000014770510164014601 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/fy/LC_MESSAGES/0000755000175000017500000000000014770510164016366 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/fy/LC_MESSAGES/fdroidserver.po0000644000175000017500000017552114770507747021454 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Vancha March , 2021. msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.0\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2021-07-01 15:29+0000\n" "Last-Translator: Vancha March \n" "Language-Team: Frisian \n" "Language: fy\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.8-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: flater: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%r is net opropber" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() net definiearre" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "In pakket fan út de boarne opbouwe" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Kontrolearje op fernijingen fan applikaasjes" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "Kommando '%s' net werkend.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "Ûnbekende útsûndering fûn!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Jildige kommando's binne:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" msgstr "Opsjes" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "dit help berjocht sjen litte en ôfslute" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "gebrûk: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "" msgstr[1] "" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/ga/0000755000175000017500000000000014770510164014552 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/ga/LC_MESSAGES/0000755000175000017500000000000014770510164016337 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/ga/LC_MESSAGES/fdroidserver.po0000644000175000017500000027453314770507747021430 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Aindriú Mac Giolla Eoin , 2024, 2025. msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.3a1-162-gfbb3cc59\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2025-03-23 10:56+0000\n" "Last-Translator: Aindriú Mac Giolla Eoin \n" "Language-Team: Irish \n" "Language: ga\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : (n>2 && n<7) ? 2 :(n>6 && n<11) ? 3 : 4;\n" "X-Generator: Weblate 5.11-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "Eochair phoiblí SSH le húsáid mar eochair imlonnaithe:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "{path} ionchódaithe don athróg rúnda DEBUG_KEYSTORE:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "Níl aon chomhad meiteashonraí meaitseála ag \"%s/\"!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "Níor cheart eochair \"isPrimary\" a chur le scátháin!" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "Níl \"local_copy_dir\" {path} ann!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "Tá \"{apkfilename}\" suiteáilte cheana féin ar {dev}." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "Tá \"{path}\" le déanaí {name} ({version})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "Tá \"{path}\" ann ach níl s3cmd suiteáilte!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "Ní formáid comhaid tacaithe é \"{path}\" (úsáid: meiteashonraí/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "Tá \"{path}\" sínithe ag eochair nach bhfuil ceadaithe:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "Ní URL bailí é \"{url}\"!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: earráid: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "Theip ar %d APKs a shíniú nó a fhíorú!" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "Aimsíodh %d fadhbanna" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "Níl %r inghlaoite" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "Níor tháirg %s deachtú!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "Tá droch-SHA-256 ag %s: %s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "Ní réimse tógála inghlactha é %s" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "Níl 'Keypass' le fáil i config.yml!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "Is é 'keystore' NONE agus tá 'smartcardoptions' bán!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "Níl 'keystore' le fáil i config.yml!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "Níl 'keystorepass' le fáil i config.yml!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "Níl 'repo_keyalias' le fáil sa config.yml!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "Is argóint neamhbhailí é 'riachtanach' do shuíomhanna" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "Níl 'sdk_path' socraithe sa config.yml!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "Tá '{aapt}' ró-shean, éilíonn fdroid build-tools-{version} nó níos nuaí!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "Theip ar '{path}' a rith!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "Tá formáid neamhbhailí ag '{path}', ba chóir gur foclóir é!" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "Ní '{value}' bailí {field} in {appid}. Patrún Regex: {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "Ní '{field} bailí é '{value}', ba chóir go mbeadh {pattern}" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "Ní ritheann --merge-request ach ar aip amháin!" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "... theip ar checkupdate le haghaidh {appid} : {error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() gan sainmhíniú" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "/tá saincheisteanna ar iarraidh" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "Tá URL ag teastáil mar argóint!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "Tá teastais éagsúla ag sínithe APK i {path}:" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "Cuir sínithe PGP leis ag baint úsáide as GnuPG le haghaidh pacáistí i repo" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "Cuir eochair sínithe repo le repo gan síniú" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "Cuir comhaid mheiteashonraí cnámharlaigh le haghaidh APKs atá in easnamh orthu" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "Ag cur repo nua le haghaidh {name} amháin" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "Ailias an eochair sínithe repo sa siopa eochrach" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "AllowedAPKSigningKeys ar iarraidh ach tagairt dénártha soláthraithe" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "Ceadaíonn sé seo athbhreithniú difriúil (nó brainse git) a shonrú le haghaidh na hiompórtála tosaigh" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "Chomh maith leis sin scáthánaigh rannóg iomlán na cartlainne" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "Chomh maith leis sin rabhadh faoi shaincheisteanna formáidithe, cosúil le rewritemeta -l" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "Leabharlann Android AAR" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "Comhad Android APK" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "Cód Android DEX" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "Android SDK gan fáil ag {path}!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "Níl cosán SDK Android '{path}' ann!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "Ní eolaire é cosán SDK Android '{path}'!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "Android SDK uirlis {cmd} gan aimsiú!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Tá Binaries ag app ach níl AllowedAPKSigningKeys comhfhreagrach aige chun deimhniú a phionnáil." #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "Tá NoSourceSince nó ArchivePolicy \"leaganacha 0\" nó 0 ag an bhfeidhmchlár ach níl aon cheann ag AutoUpdateMode nó UpdateCheckMode" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "Tá an feidhmchlár in '{repo}' ach tá nasc aige le {url}" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Tá dénártha ag leagan app ach níl AllowedAPKSigningKeys comhfhreagrach aige chun deimhniú a phionnáil." #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "Ní gá .git a iarcheangal" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "Cartlannú {apkfilename} le síniú neamhbhailí!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode le UpdateCheckMode: Caithfidh patrún a bheith ag HTTP." #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "Uimh uathoibríoch do gach leideanna." #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "Tá go huathoibríoch le gach leideanna." #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "Drochchineál iontrála \"{mirrortype}\" i gcumraíocht scátháin: {mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "Bun-URL le scáthán, is féidir an eochair sínithe innéacs a áireamh ag baint úsáide as teaghrán an iarratais: ?fingerprint=" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "Brainse '{branch}' a úsáidtear mar gheall ar thógáil '{versionName}'" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "Brainse '{branch}' a úsáidtear mar chimire sa srclib '{srclib}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "Nasc siombalach briste: {path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "Tóg pacáiste ón bhfoinse" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "Tóg gach iarratas atá ar fáil" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "Tóg ginte ag 'iompórtáil fdroid' - bain líne dhíchumasaigh nuair atá sé réidh" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "Tóg meiteashonraí git repo Tá athruithe neamhchoitianta!" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "Ná tóg ach an leagan is déanaí de gach pacáiste" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "Repo tógtha bunaithe i \"%s\" leis an gcumraíocht seo:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "Ní féidir feidhmchlár a nuashonrú go huathoibríoch gan aon CurrentVersionCode" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Ní féidir tógáil de bharr earráid {} agus scanadh" msgstr[1] "Ní féidir tógáil de bharr {} earráidí agus an scanadh" msgstr[2] "Ní féidir tógáil de bharr {} earráidí agus an scanadh" msgstr[3] "Ní féidir tógáil de bharr {} earráidí agus an scanadh" msgstr[4] "Ní féidir tógáil de bharr {} earráidí agus an scanadh" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Ní féidir \"{path}\" a athscríobh" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "Níl catagóirí '%s' bailí" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "Níl catagóirí socraithe" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "Catagóir \"{category}\" sainithe ach nach n-úsáidtear le haghaidh aon apps!" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Seiceáil le haghaidh nuashonruithe ar fheidhmchláir" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "Ag seiceáil cartlannú le haghaidh {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Nuashonrú glan - ná húsáid taisce, athphróiseáil gach APKs" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "Dathaigh an t-aschur loga" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Camóga scartha liosta de chatagóirí." #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "Níor aithníodh ordú '%s'.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "Cuir athruithe i bhfeidhm" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "Déan athruithe, brúigh, ansin déan iarratas cumaisc" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "Sainmhínithe contrártha \"{field}\" idir comhaid .yml agus logánaithe:" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Argóintí contrártha: ní féidir '--verbose' agus '--quiet' a shonrú ag an am céanna." #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "Níorbh fhéidir '{command}' a aimsiú ar do chóras" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Níorbh fhéidir an cód leagain is déanaí a aimsiú" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Níorbh fhéidir ainm an leagain is déanaí a aimsiú" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "Níorbh fhéidir {path} a aimsiú chun é a bhaint" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "Níorbh fhéidir APK {path} a oscailt le haghaidh anailíse: " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Níorbh fhéidir méid \"{size}\" a pharsáil, cineál mícheart \"{type}\"" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Níorbh fhéidir aitheantas feidhmchláir a aimsiú" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "Níorbh fhéidir aon eolas faoin leagan a aimsiú" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "Níorbh fhéidir aitheantas an phacáiste a aimsiú" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "Cowardily diúltú a overwrite thus eochair síniú atá ann cheana féin!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "Cruthaíodh coimeádán nua \"{name}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Ag cruthú \"{path}\" chun s3cmd a chumrú." #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "{config_file} folamh á chruthú" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Comhadlann logála á cruthú" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "Buicéad nua S3 á chruthú: {url}" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "Comhadlann aschurtha á cruthú" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "Innéacs sínithe a chruthú leis an eochair seo (SHA256):" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "Comhadlann shealadach á cruthú" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "Innéacs gan síniú a chruthú mar ullmhúchán do shíniú" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "Tá CurrentVersionCode {cv} níos lú ná an iontráil tógála is sine {versionCode}" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "nach bhfuil DEBUG_KEYSTORE socraithe nó go bhfuil an luach neamhiomlán" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "Scrios APKs agus/nó OBBanna gan meiteashonraí ón repo" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "Cartlann á scriosadh, tá repo rómhór ({size} max {limit})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "Ag scriosadh stair git-scáthán, tá repo rómhór ({size} max {limit})" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "Comhad anaithnid á scriosadh: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "Níl sa chur síos ar '%s' ach achoimre an fheidhmchláir" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "Tá líne dhúbailte ag cur síos" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "Tá cur síos ar fhad {length} os cionn na teorann char {limit}" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "An raibh cumraíocht/{name}i gceist agat.yml?" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "An raibh {code}i gceist agat?" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "Ná cuir 'díchumasaigh:' leis na hiontrálacha tógála ginte" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "Ná húsáid na comhaid nua chuig an repo" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "Ná cuir \"{path}\" san URL!" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "Ná pras le haghaidh cosán SDK Android, ach teip" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "Ná bain na heochracha príobháideacha a ghintear ón siopa eochrach" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "Ná chruthú tarball foinse, úsáideach nuair a thástáil a thógáil" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "Ná athnuaigh an stór, úsáideach agus tú ag tástáil tógála gan aon nasc idirlín" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "Ná húsáid seiceálacha rsync" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "Íoslódáil F-Droid.apk ag baint úsáide as scátháin a sceitheann níos lú don líonra" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Íoslódáil scátháin iomlána de repos beag" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Theip ar an stór a íoslódáil cheana féin uair amháin, gan iarracht a dhéanamh arís." #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "Níorbh fhéidir {url} a íosluchtú. {error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "Rinneadh neamhaird ar dhearbhú Dúblach Frith-Ghné ag {path}!" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "Dúblach iontráil \"%s\" i gcumraíocht scátháin!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "Nasc dúblach i '{field}': {url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "EARRÁID: %(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "EARRÁID: Baineadh an fo-ordú \"freastalaí\", bain úsáid as \"imscaradh\"!" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "EARRÁID: cineál CI gan tacaíocht, fáilte roimh phaistí!" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "EARRÁID: Óstríomhaire git gan tacaíocht \"%s\", fáilte roimh phaistí!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "EARRÁID: Níl {key} i {path} \"archive\" nó \"repo\"!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "EARRÁID: Ní eochair bhailí í {key}!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "EARRÁID: Ba cheart gur de chineál {t} luach {key}!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "EARRÁID: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "Tá ionchódú socraithe chun '{enc}' d'fhéadfadh fdroid rith i saincheisteanna ionchódú. Socraigh é chuig 'UTF-8' chun na torthaí is fearr a fháil." #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" "Cuir isteach an chonair go dtí an SDK Android (%s) anseo:\n" "> " #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "Níl athróg timpeallachta {var} ó {configname} socraithe!" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "Níl athróg timpeallachta {{env: {var}}} socraithe!" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "Earráid agus 'github_releases' á úsáid, {} gan a bheith i láthair. (B'fhéidir go mbeidh ort 'nuashonrú fdroid' a rith ar dtús.)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "Earráid agus seoladh repo á fháil" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "Scoir le cód neamh-nialasach má aimsíodh fadhbanna" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "Bain meiteashonraí feidhmchláir as stór foinseach" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "Sleachta sínithe ó APKs" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "Níorbh fhéidir F-Droid.apk a íoslódáil ó fhoinse aitheanta ar bith!" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "Theip ar chóipeáil {path}: {error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "Theip ar shínithe a fháil le haghaidh '{apkfilename}': {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "Theip ar léamh {path}: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "Theip ar athrú {path}: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "Theip ar bhuicéad S3 a chruthú: {url}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "Theip ar fhaisnéis APK a fháil, ag scriosadh {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "Theip ar fhaisnéis APK a fháil, gan bacadh le {path}" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "Níorbh fhéidir méarlorg eochracha sínithe APK a fháil" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "Theip ar shuiteáil '{apkfilename}' ar {dev}: {error}" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "Theip ar an bhfeidhmchlár a shíniú" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "Fetched buildserverid ó VM: {buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "Sínithe faighte le haghaidh '{apkfilename}' -> '{sigdir}'" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "D'imigh an comhad agus é á phróiseáil: {path}" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "Críochnaithe" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Clibeanna HTML toirmiscthe" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "Fórsa tógáil apps faoi mhíchumas, agus déanann sé beag beann ar fhadhbanna scanadh. Ní cheadaítear ach amháin i mód tástála." #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "Fórsa stopadh a thógáil tar éis {0} timeout sec!" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "Fórsa scanadh apps faoi mhíchumas agus tógann." #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "Aimsíodh grafach \"{path}\" gan meiteashonraí don fheidhmchlár \"{name}\"!" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "Aimsíodh drochchomhad maoinithe \"{path}\" in ionad \"{name}\":" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "Aimsíodh appids neamhbhailí in argóintí" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "Aimsíodh leagan neamhbhailíCodes for some apps" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "Aimsíodh ilchomhaid Bloc Sínithe JAR i {path}" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "Aimsíodh il-Theastais Signer!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "Aimsíodh ilchomhaid mheiteashonraí le haghaidh {appid}" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "Aimsíodh ildeimhnithe sínithe don stór." #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "Níor aimsíodh aon deimhnithe sínithe don stór." #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "Aimsíodh neamhchomhad ag %s" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "Aimsíodh {apkfilename} ag {url}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "Aimsíodh fadhbanna {count} i {filename}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "Aimsíodh rabhaidh {count} in {filename}" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "Meiteashonraí cnámharlaigh ginte le haghaidh {appid}" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "Theip ar sheiceáil Git de '%s'" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "Theip ar Git glan" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "Theip ar ghabháil Git" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Theip ar cheann socraithe cianda Git: \"%s\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Theip ar athshocrú Git" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "Theip ar Git submodule deinit" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "Theip ar shioncronú submodule Git" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "Theip ar nuashonrú submodule Git" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "Ní mór HTTPS a úsáid le URLanna Subversion!" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "Má éiríonn scáthán git mór, lig don chartlann a scriosadh" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "Má theipeann ar an uaslódáil seo, déan iarracht uaslódáil de láimh chuig {url}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "Neamhaird a dhéanamh ar mheiteashonraí '{field}' i meiteashonraí '{metapath}' toisc go bhfuil sé dímheasta." #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "Gan neamhaird a dhéanamh FUNDING.yml iontráil níos faide ná 2048: %s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "Neamhaird á déanamh ar dhrocheilimint sa léiriú: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "Má dhéantar neamhaird de {oldfile}, úsáid {newfile}!" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Neamhaird a dhéanamh ar phacáiste gan mheiteashonraí: " #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "Neamhaird a dhéanamh ar shonraí taisce stale le haghaidh {apkfilename}" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "Cuir APKs san áireamh atá sínithe le halgartaim faoi mhíchumas cosúil le MD5" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "Cuir na comhaid sínithe PGP .asc san áireamh sa scáthán" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "Cuir na logaí tógála sa scáthán san áireamh" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "Cuir na tarballs foinse sa scáthán" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "Meiteashonraí ó %s@%s san áireamh" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "Meiteashonraí ó {path} san áireamh" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "Fo-mhodúil a thúsú" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "Suiteáil gach feidhmchlár sínithe atá ar fáil" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "Suiteáil pacáistí tógtha ar ghléasanna" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "%s á shuiteáil..." #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "Ag suiteáil '{apkfilename}' ar {dev}..." #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "Idirghníomhú leis an bhfreastalaí repo HTTP" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "APK neamhbhailí" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "AutoUpdateMode neamhbhailí: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "Nuashonrú NeamhbhailíCheckMode: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "VercodeOperation neamhbhailí: {field}" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "VercodeOperation neamhbhailí: {invalid_ops}" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "Aitheantas neamhbhailí feidhmchláir {appid}" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Liosta neamhbhailí le hurchair" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "Ainm neamhbhailí ar chomhad foilsithe: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "Invalid ndk: iontráil sa tógáil: \"{ndk}\"" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "Atreorú neamhbhailí chuig neamh-HTTPS: {before} -> {after} " #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "Meiteashonraí scrlib neamhbhailí: níl '{file}' ann" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "Meiteashonraí neamhbhailí srclib: níorbh fhéidir '{file}' a pharsáil" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "Meiteashonraí neamhbhailí srclic: eochair anaithnid '{key}' in '{file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "Theip ar shíniú JAR a fhíorú: {path}" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "Síniú JAR fíoraithe: {path}" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "Comhad Java JAR" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "Níor aimsíodh Java JDK! Suiteáil i suíomh caighdeánach nó socraigh java_paths!" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "Rang tiomsaithe Java" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "Níor aimsíodh jarsigner Java! Suiteáil i suíomh caighdeánach nó socraigh java_paths!" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "Javascript i html src tréithe" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "Theip ar an tógáil \"{apkfilename}\" a choinneáil" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "Keystore le haghaidh eochair sínithe:\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "Úsáidtear eochair dífhabhtaithe aitheanta i AllowedAPKSigningKeys: " #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "Breathnaíonn an tiomantas is déanaí a úsáidtear '{commit}' cosúil le clib, ach updateCheckMode is '{ucm}'" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "Baineann modhanna síntiús Liberapay sa Liberapay: réimse" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "Liostaigh comhaid a leasófaí (rith tirim)" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "Logchaighdeán san áireamh sa URL f-droid.org" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "Déan an stad tógála ar eisceachtaí" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "Scátháin stór míchumtha." #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "Líne freastalaí míchumthawebroot:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "Sroicheadh uasdoimhneacht athchúrsaithe sa chomhad ZIP: %s" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "Tá eochair \"isPrimary\" i gcumraíocht scátháin do {url}!" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Scáthánaigh an repo iomlán agus cartlann, gach cineál comhaid." #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "Comhadlann aschurtha ar iarraidh" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "Dearbhuithe Frith-Gnéithe a bhogadh chuig comhaid logánaithe:" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "Níl \"repo_pubkey\" ná \"keystorepass\" leagtha síos i config.yml" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "Gan APK don phacáiste: %s" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "Níor aimsíodh SDK Android!" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "Níor aimsíodh aon ghléas ceangailte" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "Níor aimsíodh aon ghléas le haghaidh `adb install`! Cuir ceann isteach le do thoil." #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "Gan méarlorg in URL." #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "Níl aon submodules git ar fáil" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "Ní raibh aon tionscadal grádaithe le fáil. Sonraigh --subdir?" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "Níor aimsíodh aon eolas." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "Níor aimsíodh clibeanna meaitseála" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "Níor aimsíodh aon leagan SDK íosta i {0}, ag baint úsáide as réamhshocrú (3)." #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "Ní gá a shonrú go bhfuil an app Bogearraí Saor in Aisce" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "Ní gá a shonrú go bhfuil an aip le haghaidh Android" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "Níl aon rogha socraithe! Cuir do config.yml in eagar chun ceann amháin díobh seo ar a laghad a shocrú:" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "Níor sonraíodh aon phacáistí" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "Níl APK sínithe ar fáil le haghaidh %s" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "Gan chomhadlann aschurtha sínithe - níl aon rud le déanamh" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "Níor aimsíodh aon deimhnithe sínithe i {path}" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "Gan a leithéid de phacáiste: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "Níl a leithéid de versionCode {versionCode} for app {appid}" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "Níor aimsíodh clibeanna ar bith" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "Gan chomhadlann gan síniú - níl aon rud le déanamh" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "Níorbh fhéidir aon eolas faoin leagan a aimsiú." #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "Ní sainmhíniú bailí méide é: \"{}\"" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "Faic le déanamh" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "Níl aon rud le déanamh le haghaidh {appid}." #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "Anois leagtar iad seo i config.yml:" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "Tá leagan níos nuaíCode({integer}) ag comhad OBB ná aon APK:" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "Ní mór ainm comhaid OBB tosú le \"príomh.\" nó \"paiste.\":" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "Ní mheaitseálann ainm pacáiste OBB APK tacaithe:" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Meaisín as líne, gan bacadh le giniúint scáthán git go dtí 'imscaradh fdroid'" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "Tá luach 'packageNames' in easnamh ar cheann de na míreanna cumraíochta 'github_releases'. gan bacadh ..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "Tá luach 'projectUrl' in easnamh ar cheann de na míreanna cumraíochta 'github_releases'. gan bacadh ..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "Tá an luach 'comhartha' in easnamh ar cheann de na míreanna cumraíochta 'github_releases'. gan bacadh ..." #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Ní thacaítear ach le PNG agus JPEG le haghaidh grafaicí, le fáil: {path}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "Ní ghlacann ach le \"env\" eochair amháin" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "Ná próiseáil ach feidhmchláir le nuashonruithe uathoibríocha" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Baineann modhanna síntiús OpenCollective sa OpenCollective: réimse" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Aschuir tuarascáil JSON le comhad ainmnithe i ndiaidh APK." #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "Aschur JSON go dtí an gnáth-roinn." #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "Aschur JSON" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "Ceadúnas foriomlán an tionscadail." #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "Leagan bán sáraitheachName in {apkfilename} ó mheiteashonraí: {version}" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "Tá pacáiste \"{appid}\" ann cheana" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "Léiriú parsála ag '{path}'" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "Pasfhocal de dhíth le hainm úsáideora" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "Conair chuig príomhchomhadlann tionscadail Android, más rud é nach bhfuil sé i bhfréamh." #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "Conair chuig an SDK Android (uaireanta a leagtar i ANDROID_HOME)" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "Conair chuig an repo git le húsáid mar an logáil isteach" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "Conair chuig an siopa eochrach don eochair sínithe repo" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Priontáil an athróg rúnda chuig an teirminéal le haghaidh cóip / greamaigh éasca" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "Cumasaíodh mód príobháideachta bunaithe ar do logán ({country_code})." #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "Fadhb le comhad ZIP: %s, earráid %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "Fadhb le xml ag '{path}'" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "Próiseas uath-nuashonruithe" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "Próiseáil {apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "Próiseáil {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "XML / JSON atá inléite ag an duine a tháirgeadh le haghaidh comhaid innéacs" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "URL an tionscadail le hiompórtáil uaidh." #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "Ba cheart poncaíocht a sheachaint" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "Brúigh an logáil isteach sa stór cianda git seo" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "Ag brú loga trédhearcachta dénártha chuig {url}" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "Theip ar bhrú chuig freastalaí cianda!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "Ag brú go {url}" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "Tosaigh stór nua go tapa" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "Léigh na comhaid mheiteashonraí go léir agus scoir" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "Ag léamh '{config_file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "Pacáiste á léamhName/versionCode/versionName failed, APK invalid: '{apkfilename}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "Pacáiste á léamhName/versionCode/versionName failed,APK invalid: '{apkfilename}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "{apkfilename} á léamh ón taisce" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Athnuaigh agus cuir rialacha agus sínithe scanóirí taisce ón líonra" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "Bain tarball foinse agus aon APKanna má fhíoraítear go rathúil é." #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Comhaid shonraithe á mbaint" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "Ag baint {path}\"" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "Athainmnigh comhaid APK nach bhfuil comhoiriúnach package.name_123.apk" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "Ag éirí as {apkfilename} le debug.keystore ar fáil" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "Athraigh méid na ndeilbhíní go léir a sháraíonn an t-uasmhéid picteilín agus scoir" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "Cuir srian le haschur le rabhaidh agus earráidí" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "Theip ar íosluchtú arís: %s" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Athscríobh na comhaid mheiteashonraí go léir" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "Athscríobh '{appid}'" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "Rith ar repo git go bhfuil athruithe uncommitted" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "Rith thar {cibase} chun -debug.apk a aimsiú. agus scipeáil repo_basedir {repo_basedir}" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "Rith rewritemeta chun formáidiú a shocrú" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "Ag rith an chéad phas le MD5 seiceáil faoi mhíchumas" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "Ag rith wget in {path}" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "Ní mheaitseálann SHA-256 de {url} iontráil!" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "Scan an APK (í) mar thoradh air sin le haghaidh ranganna neamh-saor in aisce ar a dtugtar." #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "Scan cód foinse pacáiste" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "Fuair scanóir fadhbanna {count} i {apk}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "D'aimsigh scanóir fadhbanna {count} i {appid}:" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "Fuair scanóir fadhbanna {count} in {appid}:{versionCode}:" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "Aimsíodh {} fadhb leis an scanóir" msgstr[1] "Fuair an scanóir {} fadhbanna" msgstr[2] "Fuair an scanóir {} fadhbanna" msgstr[3] "Fuair an scanóir {} fadhbanna" msgstr[4] "Fuair an scanóir {} fadhbanna" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "Scanadh APK le haghaidh bloic sínithe breise." #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "Scanadh APK le dexdump do ranganna neamh-saor in aisce ar a dtugtar." #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "Socraigh NDK {release} ({version}) suas" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "Socraigh clog go dtí an t-am sin ag baint úsáide as:" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "Socraigh na heisiúintí uasta in repo sula gcuirtear na cinn níos sine i gcartlann" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "Socraigh teorainn oscailte comhaid go {integer}" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "Socraigh tógáil app le haghaidh repo tógála oíche" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "Níorbh fhéidir teorainn oscailte comhaid a shocrú: " #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "Am istigh soic {0} leagan síos don tógáil seo" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "Sínigh agus cuir pacáistí sa repo" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "Sínigh innéacsanna a cruthaíodh le nuashonrú --nosign" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "Scipeáil scanadh an cód foinse do binaries agus fadhbanna eile" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "Scipeáil '{apkfilename}' le síniú neamhbhailí!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "Scáthán Leathanaigh GitLab á scipeáil toisc go bhfuil an repo ró-mhór (>%.2fGB)!" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "Gan bacadh le giniúint innéacs le haghaidh {appid}" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "Scipeáil {apkfilename} le síniú neamhbhailí!" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "Scipeáil {appid}: disabled" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "Sonraigh fillteán logánta chun an t-athshealbhú a shioncronú" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "Sonraigh comhad aitheantais le soláthar do SSH le haghaidh rsyncing" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "Sonraigh an comhad siopa eochrach dífhabhtaithe atá le húsáid." #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "Spew amach níos mó eolais ná mar is gnách" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "Síniú rúndiamhrach á stialladh ó {apkfilename}" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "Achoimre níl i '%s' ach ainm an fheidhmchláir" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "Tá achoimre ar fhad {length} os cionn na teorann char {limit}" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "Tá clog an chórais níos sine ná an dáta i {path}!" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "Ní oibríonn mód nuashonraithe clibeanna ach amháin le haghaidh stórtha git, hg, bzr agus git-svn faoi láthair" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "Clibeanna cothrom le dáta modh a úsáidtear i git-svn, ach ní raibh an repo ar bun le clibeanna" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Modh tástála - aschur a chur san eolaire tmp amháin, agus a thógáil i gcónaí, fiú má tá an t-aschur ann cheana féin." #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "Níl an pacáiste Python \"qrcode\" suiteáilte (m.sh. apt-get install python3-qrcode)!" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "Ní mór don chód leagan OBB teacht i ndiaidh \"{name}.\":" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "An URL bonn le haghaidh an repo a logáil (réamhshocrú: https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "An chomhadlann chun an scáthán a scríobh chuig" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "An comhad atá le cur san áireamh sa repo (cosán nó glob)" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "Ní mheaitseálann méarlorg an stóir." #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "Níl an dir fréimhe do local_copy_dir \"{path}\" ann!" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "Tá imbhualadh keyalias ann - cuireadh stop leis an bhfoilsitheoireacht" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "Is iad seo na feidhmchláir atá curtha i gcartlann ón bpríomh-repo." #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "Níor chóir an t-ordú seo a úsáid riamh chun scáthán a dhéanamh ar f-droid.org! Éilíonn cóip iomlán níos mó ná 600GB." #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "Is stór feidhmchlár é seo atá le húsáid le F-Droid. Tá iarratais sa stór ceachtar binaries oifigiúla tógtha ag na forbróirí iarratas bunaidh, nó tá binaries tógtha ó fhoinse ag an admin f-droid.org ag baint úsáide as na huirlisí ar https://gitlab.com/fdroid." #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "Tá meiteashonraí logánta ag an athiarratas seo cheana: %s" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" "Chun an socrú a chríochnú, cuir do APKs le \"%s\"\n" "Ansin rith \"Nuashonrú FDROID -C; nuashonrú fdroid\". B'fhéidir gur mhaith leat eagarthóireacht a dhéanamh freisin\n" "\"config.yml\" a shocrú ar an URL, ainm repo, agus níos mó. Chomh maith leis sin, ba cheart duit\n" "eochair shínithe (d'fhéadfadh ceann sealadach a bheith ginte go huathoibríoch).\n" "\n" "Tuilleadh eolais: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "agus https://f-droid.org/docs/Signing_Process" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "Chun awsbucket a úsáid, ní mór awssecretkey agus awsaccesskeyid a shocrú i config.yml freisin!" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "Chun rclone a úsáid, ní mór rclone_config agus awsbucket a shocrú i config.yml!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "Ní mór URL tosú le https:// nó http://" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "Níor chóir giorraithe URL a úsáid" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "URL {url} in Description: {error}" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "Clib cheadúnais gan choinne \"{}\"! Ná húsáid ach clibeanna faofa FSF nó OSI ó https://spdx.org/license-list" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Clib cheadúnais gan choinne \"{}\"! Ná húsáid ach clibeanna ceadúnais atá cumraithe i do chomhad cumraíochta" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "Iontráil anaithnid {key} in {configname}" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "Aimsíodh eisceacht anaithnid!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "Comhad anaithnid '{filename}' in build '{versionName}'" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "Formáid anaithnid mheiteashonraí: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "Formáid mheiteashonraí anaithnid: {path} (úsáid: *.yml)" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "Leagan anaithnid de aapt, d'fhéadfadh fadhbanna a chruthú: " #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "Spás tosaigh gan ghá" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "Spás rianaithe gan ghá" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "Réimse app neamhaitheanta '{fieldname}' in '{path}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Bratach tógála neamhaitheanta '{build_flag}' in '{path}'" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "Cineál comhaid gan tacaíocht \"{extension}\" le haghaidh grafach repo" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "Aimsíodh comhad grafaicí gan tacaíocht: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "Extlib neamhúsáidte ag %s" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "Comhad neamhúsáidte ag %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "Conair scanta neamhúsáidte: %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "Conair scanignore neamhúsáidte: %s" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Nuashonraigh faisnéis maidir le pacáistí nua" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "Nuashonraigh an logchomhad trédhearcachta dénártha le haghaidh URL" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "Tá URL neamhbhailí ag UpdateCheckData: {url}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "Ní mór do UpdateCheckData an cód leagain a mheaitseáil mar slánuimhir (\\d nó [0-9]): {codeex}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "Ní mór do UpdateCheckData URL HTTPS a úsáid: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "UpdateCheckData ní URL bailí é: {url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "Tá UpdateCheckMode socraithe ach tá an chuma air nach bhfuil checkupdates rite fós." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName is set to the known application ID, is féidir é a bhaint" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "{apkfilename} á uaslódáil chuig androidobservatory.org" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "{apkfilename} á uaslódáil chuig virustotal" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Úsáid / HEAD in ionad / máistir nó / príomh go pointe ag comhad sa bhrainse réamhshocraithe" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Bain úsáid as 'nuashonrú fdroid -c' chun é a chruthú." #: ../fdroidserver/build.py msgid "Use build server" msgstr "Úsáid freastalaí tógála" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "Dáta úsáide ó APK in ionad an ama reatha le haghaidh APKs nua-bhreise" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "Ag baint úsáide as \"{path}\" chun s3cmd a chumrú." #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "Ag baint úsáide as \"{path}\" chun sioncronú le cianstóráil." #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "Ag baint úsáide as Síniú APK v2" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "Ag baint úsáide as Síniú APK v3" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "Ag baint úsáide as Síniú JAR" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Ag baint úsáide as jarsigner Java, ní mholtar chun APKs a fhíorú! Úsáid apksigner" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "Ag baint úsáide as foclóir bán in ionad ábhar {path}!" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "Ag baint úsáide as keystore atá ann cheana \"{path}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "Ag baint úsáide as rclone chun sioncronú le: {url}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "Ag baint úsáide as s3cmd chun sioncronú le: {url}" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Is iad na horduithe bailí ná:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "Fíoraigh i gcoinne cóip atá i dtaisce go háitiúil seachas athluchtú." #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "Fíoraigh sláine na bpacáistí íoslódáilte" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "Síniú an innéacs á fhíorú:" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "Pacáiste {path} á fhíorú le apksigner." #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "Ní féidir le heochair API VirusTotal comhaid níos mó ná 32MB a uaslódáil, úsáid {url} chun {path} a uaslódáil." #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Tabhair rabhadh faoi earráidí meiteashonraí a d'fhéadfadh a bheith ann" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "Comhad dénártha WebAssembly" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Nuair atá sé cumraithe le haghaidh innéacsanna sínithe, ná cruthaigh ach innéacsanna gan síniú ag an gcéim seo" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "Nuair a linting an yamllint stór ar fad faoi mhíchumas de réir réamhshocraithe. Cuireann an rogha seo iallach ar yamllint beag beann." #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "Nuair a theipeann ar shíniú nó ar fhíorú, scoir le cód earráide." #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "Ar mhaith leat F-Droid.apk a íoslódáil agus a shuiteáil trí adb? (TÁ/Níl)" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "Ar mhaith leat na haipeanna/na haipeanna a íoslódáil ó f-droid.org? (TÁ/Níl)" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'Ainm Oirirce' a úsáidtear agus eochracha á nginiúint" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "Is féidir leat ANDROID_HOME a úsáid chun an cosán a shocrú chuig do SDK, i.e.:" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "Cartlann comhad ZIP" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "tuarascálacha adb {serial} is \"{status}\"!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "IdentityFile á chur le {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "ag cur le {name}: {path}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "Rogha dhébhríoch: D'fhéadfadh %(option)s %(matches)s a mheaitseáil" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "apksigner in uirlisí tógála; Gabhann {version} APKanna le sínithe v3 neamhbhailí, gan aird a thabhairt." #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "apksigner gan aimsiú! Ní féidir APKs nua-aimseartha a shíniú nó a fhíorú" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "apksigner gan aimsiú, tá sé ag teastáil le síniú!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "aitheantas feidhmchláir an chomhaid le hoibriú air" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "ID iarratais le leagan roghnachCode san fhoirm APPID[:VERCODE]" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "Caithfidh archive_url deireadh a chur le /cartlann" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "argóint \"-\" le mód %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "argóint %(argument_name)s: %(message)s" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "ag iarraidh nasc SSH lom chun eochair imscaradh tástála:" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "ní féidir spec scrlib a pharsáil (ní teaghrán): '{}'" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "ní féidir '%(filename)s' a oscailt: %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "ní féidir url neamh-https a oscailt: '{};" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "ní féidir srclibs riachtanacha a aimsiú: \"{path}\"" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "ní féidir argóintí éagsúla subparser a bheith acu" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "ní féidir gníomhartha a chumasc - ainmnítear %r ar dhá ghrúpa" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "Ní féidir nuashonrú a fhoilsiú, ar shocraigh tú an eochair imlonnaithe?" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "clónáil {url}" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "orduithe ó mhodúil bhreiseáin:" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "teaghrán rogha contrártha: %s" msgstr[1] "teaghráin roghanna contrártha: %s" msgstr[2] "teaghráin roghanna contrártha: %s" msgstr[3] "teaghráin roghanna contrártha: %s" msgstr[4] "teaghráin roghanna contrártha: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "ailias fo-pharsála contrártha: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "fopharsálaí contrártha: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "níorbh fhéidir '{path}' a pharsáil" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "Níorbh fhéidir srclib spec a pharsáil (níor sonraíodh ainm ar bith): '{}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "Níorbh fhéidir srclib spec a pharsáil (níor sonraíodh tag): '{}'" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "cruthaíodh {path}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "Tá an leagan reatha níos nuaí: sean-vercode={old}, vercode nua={new}" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "scriosadh: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "comhad spleáchais gan ghlas" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "loga próiseas imlonnaithe {path} go {dest}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "dest= ag teastáil le haghaidh roghanna cosúil le %r" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "'{}' á íosluchtú" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "Theip ar shínithe scanóirí a íosluchtú ó '{}'" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "dénártha inrite, cód b'fhéidir" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "bhíothas ag súil le argóint %s" msgstr[1] "bhíothas ag súil le %s argóint" msgstr[2] "bhíothas ag súil le %s argóint" msgstr[3] "bhíothas ag súil le %s argóint" msgstr[4] "bhíothas ag súil le %s argóint" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "bhíothas ag súil le hargóint amháin ar a laghad" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "bhíothas ag súil le hargóint amháin ar a mhéad" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "bhíothas ag súil le hargóint amháin" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "fdroid [] [-h|--help|--leagan|]" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "Faigh an leagan is déanaí de shínithe ón ngréasán" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "bhfeidhm earráidí meiteashonraí (réamhshocrú) a bheith ina rabhaidh, nó le neamhaird a dhéanamh orthu." #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "theip ar chlón git svn" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "Cartlann Comhad Gzip" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "neamhaird ar argóint fhollasach %r" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "Ní mór síniú a bheith ag Innéacs-V1, bain úsáid as 'FDROID Signindex' chun é a chruthú!" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "Ní mór síniú a bheith ag Innéacs-V2, bain úsáid as 'FDROID Signindex' chun é a chruthú!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "luach neamhbhailí %(type)s: %(value)r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "rogha neamhbhailí: %(value)r (roghnaigh ó %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "Luach conflict_resolution neamhbhailí:%r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "teaghrán neamhbhailí roghanna %(option)r: ní mór tosú le carachtar %(prefix_chars)r" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "ipfs_cid gan aimsiú, gan bacadh le giniúint CIDv1" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "Tá an t-oideas tógála is déanaí níos nuaí: sean-vercode={old}, vercode nua={new}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "Ní chríochnaíonn local_copy_dir le \"fdroid\", b'fhéidir gur chiallaigh tú: \"{path}\"" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "Caithfidh local_copy_dir a bheith ina cosán iomlán!" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "Ní mór local_copy_dir a bheith eolaire, ní comhad!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "ní chríochnaíonn scáthán '%s' le 'fdroid'!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "scátháin leagtha faoi dhó, i config.yml agus {path}!" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "ní mór argóintí comheisiacha a bheith roghnach" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "an chéad nuashonrú taisce {name} eile dlite i {time}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "níl \"icon\" in {appid}" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "níor soláthraíodh aon APK" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "Níor aimsíodh aon eolas leagain" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "ní cheadaítear le hargóint %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "tá ceann de na hargóintí %s ag teastáil" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "ní ghlacann ach teaghráin, liostaí, agus tuples" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "roghanna" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "overwriting atá ann cheana {path}" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "argóintí suímh" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "Theip ar logchomhad an phróisis {path} go {dest}!" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "tagairt dénártha síniú ar iarraidh" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "diúltú íoslódáil trí nasc HTTP neamhchinnte (úsáid HTTPS nó sonraigh --no-https-check): {apkfilename}" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "repo_icon níl \"repo/icons/%s\" ann, rud a ghineann sealbhóir áite." #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "Caithfidh repo_url deireadh a chur le / repo" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "rsync ar iarraidh nó briste: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "innéacsanna sioncronaithe s3cmd {path} go {url} agus scrios" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "sioncrónaíonn s3cmd innéacsanna ó {path} go {url} agus scriosann sé bainte" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "tá taisce scanóir míchumtha! Is féidir leat é a ghlanadh le: '{clear}'" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "serverwebroot: ní chríochnaíonn cosán le \"fdroid\", b'fhéidir gur chiallaigh tú ceann acu seo:" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "leabharlann chomhroinnte" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "Taispeáin an teachtaireacht chabhrach seo agus scoir" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "APK sínithe, cosán comhaid nó URL HTTPS." #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "Ná bac le logaí tógála iomlána a úsáid: tá an t-ábhar logála folamh" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "Ná bac le logaí iomlána tógála a úsáid: níl sé cumasaithe sa chumraíocht" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "tarball foinse scipeála: {path}" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "srclibs ainm ar iarraidh agus / nó @" #: ../fdroidserver/scanner.py msgid "static library" msgstr "Leabharlann statach" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "tá dénártha tagartha soláthraithe ceadaithe signer {signer}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "Tá na hargóintí seo a leanas ag teastáil: %s" #: ../fdroidserver/install.py msgid "true" msgstr "fíor" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "teaghrán rogha gan choinne: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "parsálaí anaithnid %(parser_name)r (roghanna: %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "argóintí neamhaitheanta: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "ceadanna neamhshábháilte ar '{config_file}' (ba chóir go mbeadh 0600)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "úsáid: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "ag baint úsáide as Apache libcloud chun sioncronú le {url}" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "Tá virustotal.com ag teorannú ráta, ag fanacht le triail a bhaint as ..." #: ../fdroidserver/install.py msgid "yes" msgstr "tá" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "{0} aip, {1} ailiasanna eochrach" msgstr[1] "{0} aippeanna, {1} ailiasanna eochrach" msgstr[2] "{0} aippeanna, {1} ailiasanna eochrach" msgstr[3] "{0} aippeanna, {1} ailiasanna eochrach" msgstr[4] "{0} aippeanna, {1} ailiasanna eochrach" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) níl aon mheiteashonraí aige!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "Tá drochdháta ag AndroidManifest.xml {apkfilename}: " #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "Níl ainm ar {appid}! Ag baint úsáide as ID iarratais ina ionad." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "Ní ID feidhmchlár Android bailí é {appid} ó {path}!" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "Ní Ainm Pacáiste Java bailí é {appid} ó {path}!" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "Tá APKs agus comhaid araon ag {appid}: {files}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "Tá {appid} ar iarraidh {name}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "{appid}: Extlib {path} anaithnid i dtógáil '{versionName}'" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "{appid}: níl aon tógáil sonraithe, ag rith ar staid na foinse reatha" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "{appid}: Caithfidh {field} a bheith ina '{type}', ach is '{fieldtype}' é!'" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "{appid}: Caithfidh {field} a bheith ina '{type}', ach is '{fieldtype}' é!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "Ní mór {build_flag} a bheith ina slánuimhir, le fáil: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "Ní mór {build_flag} a bheith liosta nó teaghrán, le fáil: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "Tá {file} bán nó truaillithe!" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} Níl \"{section}/icons/{path}\" ann! Seiceáil \"config.yml\"." #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "Is dúblach é {path1} de {path2}, bain ceann amháin!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "Tá {path} ann cheana féin, gan aird ar thorthaí iompórtála!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "Níl {path} ann! Cruthaigh é trí rith:" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "{path} Tá síniú comhad dona \"{pattern}\", is féidir Janus leas a bhaint as!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} curtha faoi bhratach ag virustotal {count} times:" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "Tá an méarloirg mícheart ag {path} ({fingerprint})!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "Níl {path} \"eochair: luach\" dict, ach {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "Ní comhad cumraíochta caighdeánach é {path}!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "Níl {path} liosta, ach {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "Níl {path} {expected_type}, ach {datatype}!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "Is é {path} méid nialasach!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "{path} níos mó ná 200MB, uaslódáil de láimh: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "{path}: Ní cód tíre bailí ISO_3166-1 alfa-2 é \"{code}\"!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "{path}: {error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "Ní chríochnaíonn {url} le \"fdroid\", seiceáil an cosán URL!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "Ní thosaíonn {url} le \"http\"!" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "Theip ar {} tógáil" msgstr[1] "Theip ar {} tógálacha" msgstr[2] "Theip ar {} tógálacha" msgstr[3] "Theip ar {} tógálacha" msgstr[4] "Theip ar {} tógálacha" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "D'éirigh le {} tógáil" msgstr[1] "D'éirigh le {} tógálacha" msgstr[2] "D'éirigh le {} tógálacha" msgstr[3] "D'éirigh le {} tógálacha" msgstr[4] "D'éirigh le {} tógálacha" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/he/0000755000175000017500000000000014770510164014557 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/he/LC_MESSAGES/0000755000175000017500000000000014770510164016344 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/he/LC_MESSAGES/fdroidserver.po0000644000175000017500000017664214770507747021437 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # bobwww , 2022. # Yaron Shahrabani , 2022, 2023, 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.1b0\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2024-08-18 06:27+0000\n" "Last-Translator: Yaron Shahrabani \n" "Language-Team: Hebrew \n" "Language: he\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && n % 10 == 0) ? 2 : 3));\n" "X-Generator: Weblate 5.7\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: שגיאה: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "אי אפשר לקרוא ל־%r" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "‎.__call__()‎ לא מוגדר" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "בניית חבילה מקוד מקור" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "איתור עדכונים ליישומונים" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "הפקודה ‚%s’ אינה מוכרת.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "מחיקת קובצי APK ו/או OBB ללא נתוני העל מהמאגר" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "התקנת חבילות שנבנו על מכשירים" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "תפעול שרת ה־HTTP של המאגר" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "פתיחת מאגר חדש במהירות" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "לקרוא את כל קובצי נתוני העל ולצאת" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "לשנות שמות של קובצי APK שאינם בתבנית package.name_123.apk" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "לשכתב את כל קובצי נתוני העל" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "אירעה חריגה לא מוכרת!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "פקודות תקינות:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "אפשרויות" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "להציג את הודעת העזרה הזאת ולצאת" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "שימוש: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "" msgstr[1] "" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/hi/0000755000175000017500000000000014770510164014563 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/hi/LC_MESSAGES/0000755000175000017500000000000014770510164016350 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/hi/LC_MESSAGES/fdroidserver.po0000644000175000017500000017622414770507747021437 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Isrg Rajan , 2021. # Saurmandal , 2023. msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.0a5-27-gf24eae0f\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2023-02-22 11:24+0000\n" "Last-Translator: Saurmandal \n" "Language-Team: Hindi \n" "Language: hi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.16-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%r कॉल करने योग्य नहीं है" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() परिभाषित नहीं" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "स्रोत से एक पैकेज बनाएँ" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "अनुप्रयोगों के अपडेट के लिए जाँच करें" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "कमांड '%s' पहचाना नहीं।\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "अज्ञात अपवाद मिला!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "मान्य कमांड्स हैं:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" msgstr "विकल्प" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "यह मदद संदेश दिखाएं और बाहर निकलें" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "प्रयोग: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "" msgstr[1] "" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/hu/0000755000175000017500000000000014770510164014577 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/hu/LC_MESSAGES/0000755000175000017500000000000014770510164016364 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/hu/LC_MESSAGES/fdroidserver.po0000644000175000017500000024025514770507747021447 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Balázs Meskó , 2020, 2021. # Hans-Christoph Steiner , 2020, 2021, 2022, 2024. # KissPandur , 2022. msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.6-70-g54bc858\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2024-04-10 13:33+0000\n" "Last-Translator: Hans-Christoph Steiner \n" "Language-Team: Hungarian \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.5-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "A telepítési kulcsként használandó nyilvános SSH-kulcs:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "A(z) „{path}” kódolva a DEBUG_KEYSTORE titkos változóhoz:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "A(z) „%s/” nem rendelkezik megfelelő metaadatfájllal." #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "\"local_copy_dir\" {path} nem létezik!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "A(z) „{apkfilename}” már telepítve van ezen: {dev}." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "A(z) „{path}” friss {name} csomagot tartalmaz ({version})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "A(z) „{path}” létezik, de az s3cmd nincs telepítve." #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "A(z) „{path}” nem egy elfogadott formátum, alakítsa át erre: metadata/*.yml" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "\"{path}\" kulccsal aláírt és így nem engedélyezett:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "A(z) „{url}” nem érvényes URL!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: hiba: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d probléma található" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "A(z) %r nem hívható" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "A(z) %s nem elfogadott összeállítási mező" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "A „keypass” nem található a config.yml fájlban." #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "A „keystore” értéke NONE és a „smartcardoptions” üres." #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "A „keystore” nem található a config.yml fájlban." #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "A „keystorepass” nem található a config.yml fájlban." #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "A „repo_keyalias” nem található a config.yml fájlban." #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "A „required” argumentum érvénytelen argumentum pozicionális paraméterek esetén" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "Az „sdk_path” nincs megadva a „config.yml” fájlban." #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "Az „{aapt}” túl régi, az fdroidhoz build-tools-{version} vagy újabb szükséges." #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "A(z) „{path}” végrehajtása sikertelen." #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "A(z) „{value}” nem érvényes {field} érték itt: {appid}. Regex minta: {pattern}" #: ../fdroidserver/metadata.py #, fuzzy, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "A(z) „{value}” nem érvényes {field} érték itt: minta: {pattern}" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "…checkupdate sikertelen ennél: {appid} : {error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() nincs definiálva" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "a /issues hiányzik" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "Az URL argumentumként megadása szükséges." #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "Nem található aláíró-tanúsítvány itt: {path}" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "PGP aláírások hozzáadása GnuPG segítségével a tároló csomagjaihoz" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "Tároló aláírási kulcs hozzáadása a nem aláírt tárolóhoz" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "Metaadatfájl-vázak hozzáadása azon APK-khoz, melyeknél hiányoznak" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "Új tároló hozzáadása csak a következő miatt: {name}" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "A tároló aláírókulcsának álneve a kulcstárolóban" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "Lehetővé teszi, hogy különböző verziót (vagy git ágat) adjon meg a kezdeti importáláshoz" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "Letükrözi a teljes archívum szakaszt is" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "Figyelmeztet a formázási problémákra is, mint a „rewritemeta -l”" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "Android AAR programkönyvtár" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "Android APK-fájl" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "Android DEX kód" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "Az Android SDK nem található itt: {path}!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "A(z) „{path}” Android SDK elérési út nem található!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "A(z) „{path}” Android SDK elérési út nem könyvtár!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "A(z) „{cmd}” Android SDK eszköz megtalálva!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "Az alkalmazás a(z) „{repo}” tárolóban található, de erre hivatkozik: {url}" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "A .git hozzáfűzése nem szükséges" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "Az érvénytelen aláírású {apkfilename} archiválása!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "A tükrözendő alap URL, tartalmazhatja az index aláírókulcsát a lekérdezésben: ?fingerprint=" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "A(z) „{branch}” ág véglegesítésként használva a(z) „{versionName}” összeállításnál" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "A(z) „{branch}” ág véglegesítésként használva a(z) „{srclib}” srclibnél" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "Törött szimbolikus link: {path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "Csomag összeállítása forrásból" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "Az összes elérhető alkalmazás összeállítása" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "Az összeállítást az „fdroid import” állította elő – törölje a letiltási sort, ha végzett" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "A metaadatok git tárolójában nem véglegesített változások találhatók!" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "Csak a csomagok legújabb verziójának összeállítása" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "A tároló összeállítva itt: „%s”, ezzel a konfigurációval:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Nem lehet összeállítani, mert {} hiba történt az átvizsgáláskor" msgstr[1] "Nem lehet összeállítani, mert {} hiba történt az átvizsgáláskor" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "A(z) „{path}” nem írható újra" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "A(z) „%s” kategória érvénytelen" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "A kategóriák nincsenek megadva" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Alkalmazásfrissítések keresése" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "Archiválás ellenőrzése ennél: {appid} – apks:{integer}, keepversions:{keep}, archapks:{arch}" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Tiszta frissítés – nem használ gyorsítótárat, minden APK-k újra feldolgoz" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Kategóriák vesszőkkel elválasztott listája." #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "A(z) „%s” nem ismerhető fel.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "Változások véglegesítése" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Ütköző argumentumok: a „--verbose” és a „--quite” kapcsolók együtt nem adhatók meg." #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "A(z) „{command}” nem található a rendszeren" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "A legfrissebb verzió kódja nem található" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "A legfrissebb verzió neve nem található" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "A(z) {path} eltávolítandó fájl nem található" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "A(z) {path} APK nem nyitható meg az elemzéshez: " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "A(z) „{size}” méret nem dolgozható fel, hibás „{type}” típus" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Az alkalmazásazonosító nem található" #: ../fdroidserver/checkupdates.py #, fuzzy msgid "Couldn't find any version information" msgstr "A legfrissebb verzió neve nem található" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "A csomagazonosító nem található" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "A meglévő aláírókulcs-beállítás felülírása megtagadva!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "Új „{name}” konténer létrehozva" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "„{path}” létrehozása a s3cmd beállításához." #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Creating empty {config_file}" msgstr "„{config_file}” olvasása" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Naplókönyvtár létrehozása" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "Új S3 vödör létrehozása: {url}" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "Kimeneti könyvtár létrehozása" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "Aláírt index létrehozása ezzel a kulccsal (SHA256):" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "Ideiglenes könyvtár létrehozása" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "Nem aláírt index létrehozása az aláírás előkészítéséhez" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "A CurrentVersionCode ({cv}) kisebb, mint a legrégebbi összeállítási bejegyzés: {versionCode}" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "A DEBUG_KEYSTORE nincs beállítva, vagy az értéke nem teljes" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "Minden metaadat nélküli APK- és OBB-fájl törlése a tárolóból" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "Archívum törlése, a tároló túl nagy ({size}, korlát: {limit})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "A git-mirror előzményeinek törlése, a tároló túl nagy ({size}, korlát: {limit})" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "Ismeretlen fájl törlése: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "A(z) „%s” leírás csak az alkalmazás összegzése" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "A leírás ismételt sorokat tartalmaz" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "A leírás {length} karakteres hossza több, mint a {limit} karakteres korlát" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "Ne adja a hozzá a „disable:” szöveget az előállított összeállítási elemekhez" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "Ne telepítse az új fájlokat a tárolóba" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "Ne adja hozzá a(z) „{path}” elérési utat az URL-hez!" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "Ne kérdezze meg az Android SDK elérési utat, csak álljon le sikertelenül" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "Ne távolítsa el a kulcstárolóból előállított privát kulcsokat" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "Ne hozzon létre forráscsomagot, ez egy összeállítás tesztelésekor hasznos" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "Ne frissítse a tárolót, hasznos ha internetkapcsolat nélkül tesztel egy összeállítást" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "Ne használja az rsync ellenőrzőösszegeit" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Kis tárolók teljes tükrének letöltése" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "A tároló letöltése már egyszer sikertelen volt, nem próbálja meg újra." #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "A(z) {url} letöltése sikertelen. {error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "Ismételt hivatkozás a(z) „{field}” mezőben: {url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "HIBA: A „server” alparancs eltávolításra került, használja ezt: „deploy”!" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "HIBA: nem támogatott CI típus, foltokat szívesen fogadunk!" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "A karakterkódolás beállítása „{enc}”, az fdroid kódolási problémákba futhat. A legjobb eredmény érdekében használjon „UTF-8” kódolást." #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" "Adja meg az Android SDK (%s) elérési útját itt:\n" "> " #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "A(z) {configname} konfigurációból származó {var} környezeti változó nincs beállítva!" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "A(z) {configname} konfigurációból származó {var} környezeti változó nincs beállítva!" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "Hiba történt a tároló címének lekérésekor" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "Aláírások kinyerése az APK-kból" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "A(z) {path} másolása sikertelen: {error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "A(z) „{apkfilename}” aláírásainak összegyűjtése sikertelen: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "A(z) {path} olvasása sikertelen: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "A(z) {path} átméretezése sikertelen: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "Az S3 vödör létrehozása sikertelen: {url}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "Az APK információk lekérése sikertelen, a(z) {path} törlése" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "Az APK információk lekérése sikertelen, a(z) {path} kihagyása" #: ../fdroidserver/update.py #, fuzzy msgid "Failed to get APK signing key fingerprint" msgstr "Az APK leíró információk lekérése sikertelen" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "A(z) „{apkfilename}” telepítése a(z) {dev} eszközön sikertelen: {error}" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "Az alkalmazás aláírása sikertelen" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "A virtuális géptől lekért buildserverid: {buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "A(z) „{apkfilename}” APK aláírásai lekérve -> „{sigdir}”" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "A fájl feldolgozás közben eltűnt: {path}" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "Befejezve" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Tiltott HTML címkék" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "Letiltott alkalmazások összeállításának kényszerítése, és folytatás az átvizsgálási problémáktól függetlenül. Csak teszt módban engedélyezett." #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "Összeállítás kényszerített leállítása {0} másodperces időtúllépés után." #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "Letiltott alkalmazások és összeállítások átvizsgálásának kényszerítése." #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "Metaadatok nélküli „{path}” grafika található a(z) „{name}” alkalmazásnál." #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "Hibás „{path}” finanszírozási fájl található a(z) „{name}” alkalmazásnál:" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "Érvénytelen alkalmazásazonosítók találhatók az argumentumokban" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "Egyes alkalmazásoknál érvénytelen versionCode paraméterek találhatók" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "Több JAR aláírásblokkfájl található itt: {path}" #: ../fdroidserver/common.py #, fuzzy msgid "Found multiple Signer Certificates!" msgstr "Több aláíró-tanúsítvány található a tárolóhoz." #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "Több metaadatfájl található ennél: {appid}" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "Több aláíró-tanúsítvány található a tárolóhoz." #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "Nem található aláíró-tanúsítvány a tárolóhoz." #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "Nem fájl található itt: %s" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "{apkfilename} található itt: {url}" #: ../fdroidserver/scanner.py #, fuzzy, python-brace-format msgid "Found {count} problems in {filename}" msgstr "Az átvizsgáló {count} problémát talált a(z) „{filename}” alkalmazásban" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "Metaadatváz előállítva ehhez: {appid}" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "A(z) „%s” git ágra váltás sikertelen" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "A git tisztítás sikertelen" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "A git lekérés sikertelen" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "A git távoli fej beállítás sikertelen: „%s”" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "A git helyreállítás sikertelen" #: ../fdroidserver/common.py #, fuzzy msgid "Git submodule deinit failed" msgstr "A git almodul frissítése sikertelen" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "A git almodul szinkronizációs sikertelen" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "A git almodul frissítése sikertelen" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "HTTPS-t kell használni a Subversion URL-ekhez!" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "Ha egy tükör túl naggyá válik, akkor engedélyezze az archívum törlését" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "Ha a feltöltés sikertelen, próbálja meg kézzel feltölteni ide: {url}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "A(z) „{field}” mellőzése a(z) „{metapath}” metaadatokban, mert elavult." #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "A 2048-nál hosszabb FUNDING.yml bejegyzés figyelmen kívül hagyása: %s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "A metaadatok nélküli csomag figyelmen kívül hagyása: " #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "A(z) {apkfilename} elévült gyorsítótáradatainak figyelmen kívül hagyása" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "A letiltott algoritmusokkal (például MD5) aláírt APK-k belevétele" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "A PGP-aláírást tartalmazó .asc fájlok belevétele a tükörbe" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "Az összeállítási napló belevétele a tükörbe" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "A forráscsomagok belevétele a tükörbe" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "Almodulok előkészítése" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "Összes aláírt alkalmazás telepítése" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "Összeállított csomagok telepítése az eszközökre" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "%s telepítése…" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "A(z) „{apkfilename}” telepítése ezen: {dev}…" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "Interakció a tároló HTTP kiszolgálójával" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "Érvénytelen APK" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "Érvénytelen VercodeOperation: {field}" #: ../fdroidserver/lint.py #, fuzzy, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "Érvénytelen VercodeOperation: {invalid_ops}" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "Érvénytelen alkalmazásazonosító: {appid}" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Érvénytelen felsorolás" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "Érvénytelen név a közzétett fájlnak: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "Érvénytelen átirányítás nem HTTPS oldalra: {before} -> {after} " #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "Érvénytelen srclib metaadatok: a(z) „{file}” nem létezik" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "Érvénytelen srclib metaadatok: a(z) „{file}” nem dolgozható fel" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "Érvénytelen srclib metaadatok: ismeretlen „{key}” kulcs itt: „{file}”" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "A JAR aláírásának ellenőrzése sikertelen: {path}" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "A JAR aláírása ellenőrizve: {path}" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "Java JAR-fájl" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "A Java JDK nem található. Telepítse szabványos helyre, vagy adja meg a java_paths változókat!" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "Legfordított Java osztály" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "A Java „jarsigner” nem található. Telepítse szabványos helyre, vagy adja meg a java_paths változókat!" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "JavaScript a HTML src attribútumokban" #: ../fdroidserver/build.py #, fuzzy, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "A minSdkVersion olvasása sikertelen: „{apkfilename}”" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "Kulcstároló az aláírókulcshoz:\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "A legutóbb használt „{commit}” véglegesítés címkének tűnik, de az UpdateCheckMode „{ucm}”" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "A Liberapay adományozási módok a Liberapay: mezőbe tartoznak" #: ../fdroidserver/rewritemeta.py #, fuzzy msgid "List files that would be reformatted (dry run)" msgstr "Az újra formázásra kerülendő fájlok felsorolása" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "A területi beállítás szerepel az f-droid.org URL-ben" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "Az összeállítás álljon meg a kivételeknél" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "Rosszul formázott tárolótükrök." #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "Rosszul formázott serverwebroot sor:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "A teljes tároló és archívum tükrözés, minden fájltípussal." #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "Hiányzó kimeneti könyvtár" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, fuzzy, python-format msgid "No APK for package: %s" msgstr "Nincs ilyen csomag: %s" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "Nem található Android SDK!" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "Nem található csatolt eszköz" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "Nincs ujjlenyomat az URL-ben." #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "Nem érhetők el git almodulok" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "Nem található gradle projekt. Megad --subdir argumentumot?" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "Nem található információ." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "Nem kell megadnia, hogy az alkalmazás szabad szoftver" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "Nem kell megadnia, hogy az alkalmazás androidos" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "Nincs beállítás megadva. Szerkessze a config.yml fájlt, hogy ezek közül legalább egyet megadjon:" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "Nincs csomag megadva" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "Nem érhetők el aláírt APK-k ehhez: %s" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "Nincs aláírt kimeneti könyvtár – nincs teendő" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "Nem található aláíró-tanúsítvány itt: {path}" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "Nincs ilyen csomag: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "Nincs {versionCode} versionCode a(z) {appid} alkalmazáshoz" #: ../fdroidserver/checkupdates.py #, fuzzy msgid "No tags found" msgstr "Nem található csatolt eszköz" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "Nincs aláíratlan könyvtár – nincs teendő" #: ../fdroidserver/__main__.py #, fuzzy msgid "No version information could be found." msgstr "Nem található információ." #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "Nem érvényes méretmegadás: „{}”" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "Nincs teendő" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "Nincs teendő a(z) {appid} alkalmazásnál." #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "Most adja meg ezeket a config.yml fájlban:" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "Az OBB-fájlnak újabb versionCode értéke ({integer}) van, mint bármelyik APK-nak:" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "Az OBB-fájl nevének „main.” vagy „patch.” szöveggel kell kezdődnie:" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "Az OBB csomagneve nem egyezik egyik támogatott APK-val sem:" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Offline gép, git tükör előállításának kihagyása az „fdroid deploy” kiadásáig" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "A grafikáknál csak PNG és JPEG formátum támogatott, ez található: {path}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "Csak az automatikus frissítésekkel rendelkező alkalmazások feldolgozása" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Az OpenCollective adományozási módok a OpenCollective: mezőbe tartoznak" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "A JSON jelentés kiírása egy APK után elnevezett fájlba." #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "A JSON kiírása a szabványos kimenetre." #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "JSON kiírása" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "Az egész projekt átfogó licence." #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "Az üres versionName felülírása a(z) {apkfilename} fájlban a metaadatokból: {version}" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "A(z) „{appid}” csomag már létezik" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "A(z) „{path}” helyen lévő leírófájl feldolgozása" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "Jelszó szükséges a felhasználónévvel" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "A fő androidos projekt alkönyvtár elérési útja, ha nem a gyökér." #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "Az Android SDK elérési útja (néha az ANDROID_HOME-ban van megadva)" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "A naplóként használandó git tároló elérési útja" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "A tároló aláírókulcsához használt kulcstároló elérési útja" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "A titkos változó kiírása a terminálba a könnyű másolás és beillesztés érdekében" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "Probléma az itt lévő XML-lel: „{path}”" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "Automatikus frissítések feldolgozása" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "{apkfilename} feldolgozása" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "{appid} feldolgozása" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "Ember számára olvasható XML/JSON fájlok készítése indexfájlként" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "Importálási forrásként használandó projekt URL." #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "A központozást kerülni kell" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "A napló beküldése ebbe a távoli git tárolóba" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "A bináris átláthatósági napló beküldése ide: {url}" #: ../fdroidserver/deploy.py #, fuzzy msgid "Pushing to remote server failed!" msgstr "A git távoli fej beállítás sikertelen: „%s”" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "Beküldés ide: {url}" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "Új tároló gyors elindítása" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "Összes metaadatfájl felolvasása és kilépés" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "„{config_file}” olvasása" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "A packageName/versionCode/versionName olvasása sikertelen, az APK érvénytelen: „{apkfilename}”" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "A packageName/versionCode/versionName olvasása sikertelen, az APK érvénytelen: „{apkfilename}”" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "A(z) {apkfilename} olvasása gyorsítótárból" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Megadott fájlok eltávolítása" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "Azon APK fájlok átnevezése, melyek nem illeszkednek a csomag.név_123.apk mintára" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "A(z) {apkfilename} újra aláírása a megadott debug.keystore segítségével" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "A legnagyobb képpontméretet meghaladó összes ikon átméretezése, és kilépés" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "A kimenet figyelmeztetésekre és hibákra korlátozása" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Összes metaadatfájl újraírása" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "„{appid}” újraírása" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "Futtatás azon a git tárolón, amelyben nem véglegesített változtatások vannak" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "A rewritemeta futtatása a formázás javításához" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "Az MD5 ellenőrzés első menetének futtatása letiltva" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "A wget futtatása itt: {path}" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "Az elkészült APK-k átvizsgálása ismert nem szabad osztályokat keresve." #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "A csomag forráskódjának átvizsgálása" #: ../fdroidserver/scanner.py #, fuzzy, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "Az átvizsgáló {count} problémát talált a(z) „{apk}” alkalmazásban" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "Az átvizsgáló {count} problémát talált a(z) „{appid}” alkalmazásban:" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "Az átvizsgáló {count} problémát talált a(z) „{appid}:{versionCode}” alkalmazásban:" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "Az átvizsgáló {count} problémát talált" msgstr[1] "Az átvizsgáló {count} problémát talált" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py #, fuzzy msgid "Scanning APK with dexdump for known non-free classes." msgstr "Az elkészült APK-k átvizsgálása ismert nem szabad osztályokat keresve." #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "Óra beállítása ara az időre a következővel:" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "A tárolókban szereplő kiadások számának legnagyobb száma, mielőtt a régebbieket archiválni kezdi" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "A nyitott fájlok korlátjának beállítása erre: {integer}" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "A nyitott fájlok korlátjának beállítása sikertelen: " #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "{0} másodperces időtúllépés beállítása ehhez az összeállításhoz" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "Aláírás és csomagok tárolóba helyezése" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "Az update --nosign paranccsal készült indexek aláírása" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "A forráskód binárisok és egyéb problémák miatti átvizsgálásának kihagyása" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "Az érvénytelen aláírású „{apkfilename}” kihagyása!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "A(z) „{appid}” indexelőállításának kihagyása" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "Az érvénytelen aláírású {apkfilename} kihagyása!" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "{appid} kihagyása: letiltott" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py #, fuzzy msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" "HIBA: a parancsot sose használja az f-droid.org tükrözéséhez.\n" "Az f-droid.org teljes tükrözéséhez több mint 200 GB tárhely szükséges." #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "Ismeretlen kivétel észlelve!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Tárolóinformációk frissítése az új csomagoknál" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "A bináris átláthatósági napló frissítése az URL-nél" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Az érvényes parancsok:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "Ellenőrizze a letöltött csomagok érintetlenségét" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Figyelmeztetés a lehetséges metaadat-hibákról" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "nem egyértelmű kapcsoló: %(option)s, ezekre illeszkedhet: %(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "„%(filename)s” nem nyitható meg: %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "fdroid [] [-h|--help|--version|]" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "git svn klónozás meghiúsult" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "a(z) %r. explicit argumentum mellőzése" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "az index-v1-nek kell legyen aláírása, használja az „fdroid signindex” parancsot a létrehozásához." #: ../fdroidserver/index.py #, fuzzy msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "az index-v1-nek kell legyen aláírása, használja az `fdroid signindex` parancsot a létrehozásához!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, fuzzy, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "Most adja meg ezeket a config.yml fájlban:" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" msgstr "Beállítások" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "pozicionális argumentumok" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "ezen üzenet kiírása és kilépés" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "a következő argumentumok szükségesek: %s" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "váratlan kapcsoló karakterlánc: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "nem felismert argumentumok: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "nem biztonságos jogosultságok ennél: „{config_file}” (0600-nak kellene lennie)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "használat: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "{path} is not a standard config file!" msgstr "Az „sdk_path” nincs megadva a „config.yml” fájlban." #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "{path}: {error}" msgstr "A(z) {path} másolása sikertelen: {error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "" msgstr[1] "" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/id/0000755000175000017500000000000014770510164014557 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/id/LC_MESSAGES/0000755000175000017500000000000014770510164016344 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/id/LC_MESSAGES/fdroidserver.po0000644000175000017500000020426414770507747021427 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # signz signotorez , 2020, 2021. # Reza Almanda , 2021. # whenwesober , 2021. # Doctorredits_here , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.1-680-ge1d3de71\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2024-10-04 04:26+0000\n" "Last-Translator: Doctorredits_here \n" "Language-Team: Indonesian \n" "Language: id\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 5.8-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "Kunci Publik SSH yang akan digunakan sebagai Kunci Deploy:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "{path} dienkode untuk variabel rahasia DEBUG_KEYSTORE:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" tidak ada kesesuaian pada berkas metadata!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "\"local_copy_dir\" {path} tidak ada!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" sudah terpasang pada {dev}." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "\"{path}\" berisi {name}({version}) sekarang" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "\"{path}\" ada tetapi s3cmd tidak terpasang!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "\"{path}\" format berkas tidak didukung (gunakan: metadata/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "\"{path}\" ditandatangani oleh kunci yang tidak diperbolehkan:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" URL tudak valid!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: galat: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "%d APK gagal ditandatangani atau diverifikasi!" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d terdapat masalah" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%r tidak bisa dipanggil" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "%s terdapat sebuah kesalahan!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "%s checksum yg dihitung untuk file tersebut tidak cocok dengan yang diharapkan %s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s bukan bidang build yang diterima" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' tidak ditemukan dalam config.yml!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "'keystore' adalah NONE dan 'smartcardoptions' kosong!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "'keystore' tidak ditemukan dalam config.yml!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "'keystorepass' tidak ditemukan dalam config.yml!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' tidak ditemukan dalam config.yml!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'diperlukan' adalah argumen yang tidak valid untuk posisi" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "'sdk_path' belum diatur di config.yml!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' terlalu usang, fdroid memerlukan build-tools-{version} atau yang lebih baru!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "'{path}' gagal dieksekusi!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' memiliki format yang tidak valid, seharusnya kamus!" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' tidak valid pada {field} dalam {appid}. Pakem regex: {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' bukan {field} yang valid, seharusnya {pattern}" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...checkupdate gagal untuk {appid} : {error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() tidak didefinisikan" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "/issues tidak ada" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "URL diperlukan sebagai argumen!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "Tanda tangan APK memiliki sertifikat berbeda di {path}:" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "Tambah tanda tangan PGP menggunakan GnuPG untuk paket di repo" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "Tambahkan sebuah kunci penandatangan repo ke repo yang tidak ditandatangani" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "Tambahkan file metadata kerangka untuk APK yang tidak memilikinya" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "Menambahkan repo baru hanya untuk {name}" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "Alias kunci penandatanganan repo di keystore" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "AllowedAPKSigningKeys hilang tetapi biner referensi disediakan" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "Mengizinkan revisi berbeda (atau cabang git) ditentukan untuk impor awal" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "Juga cerminkan bagian arsip lengkap" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "Juga peringatkan tentang masalah pemformatan, seperti rewritemeta -l" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "Perpustakaan AAR Android" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "Android APK file" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "format file Android DEX" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "Android SDK tidak ditemukan di {path}!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "Jalur Android SDK '{path}' tidak ada!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "Jalur Android SDK '{path}' bukan direktori!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "Alat Android SDK {cmd} tidak ditemukan!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Aplikasi memiliki Biner tetapi tidak memiliki AllowedAPKSigningKeys yang sesuai untuk menyematkan sertifikat." #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "Aplikasi memiliki NoSource Since atau ArchivePolicy \"0 versi\" atau 0 tetapi AutoUpdateMode atau UpdateCheckMode bukan Tidak Ada" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "Bangun paket dari sumber" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Periksa pembaruan pada aplikasi" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "Perintah '%s' tidak dikenal.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "Hapus APK dan/atau OBB tanpa metada dari repo" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "Instal paket bawaan di perangkat" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "Interaksi dengan server repo HTTP" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "Mulai repositori baru secepatnya" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "Baca semuanberkas metadata dan keluar" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "Ubah nama berkas APK yang tidak sesuai dengan package.nama_123.apk" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Tulis ulang semua berkas metadata" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "Pindai sumber berkas paket" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "Tandai dan tempatkan paket ke dalam repo" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "Tanda tangani indeks yang dibuat menggunakan update --nosign" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "Eksepsi tidak ditemukan!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Perbarui informasi repo untuk paket yang baru" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "Perbarui log transparansi biner untuk URL" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Perintah yang benar adalah:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "Verifikasi integritas paket yang didownload" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Peringatkan mengenai kemungkinan error pada metadata" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "opsi ambigu: %(option)s bisa sesuai dengan %(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "tidak bisa dibuka '%(filename)s': %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" msgstr "Opsi" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "argumen posisi" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "menampilkan bantuan ini dan keluar" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "argumen berikut ini diperlukan: %s" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "string opsi tak terduga: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "argumen tidak dikenal: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "izin tidak aman pada '{config_file}' (seharusnya 0600)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "penggunaan: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "{path} is not a standard config file!" msgstr "'sdk_path' belum diatur di config.yml!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/it/0000755000175000017500000000000014770510164014577 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/it/LC_MESSAGES/0000755000175000017500000000000014770510164016364 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/it/LC_MESSAGES/fdroidserver.po0000644000175000017500000026424314770507747021452 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # random r , 2020, 2022, 2023. # Luca Zambarda , 2020. # IvanDan , 2020, 2021. # Massimiliano Caniparoli , 2020. # x , 2020, 2021. # Hans-Christoph Steiner , 2020, 2024. # Francesco Saltori , 2020. # Francesco Esposito , 2021. # mondstern , 2021. # Frankie McEyes , 2022. # Antonello Pirina , 2022. # Pixel-Tux , 2023. # Davide Neri , 2023. # Mirko Di , 2023. # coronabond , 2023. # Random , 2023, 2024. # Champ0999 , 2025. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2025-03-20 16:21+0000\n" "Last-Translator: Champ0999 \n" "Language-Team: Italian \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.11-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "Chiave pubblica SSH da usare come chiave di deploy:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "{path} codificato per la variabile segreta DEBUG_KEYSTORE:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" non ha un file di metadati corrispondente!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "La directory principale per \"local_copy_dir\" {path} non esiste!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" è già installato su {dev}." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "\"{path}\" contiene {name} recente ({version})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "\"{path}\" esiste ma s3cmd non è installato!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "\"{path}\" non è un formato accettato (usa: metadata/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "\"{path}\" è firmato da una chiave non autorizzata:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" non è un URL valido!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: errore: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "trovati %d problemi" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%r non è richiamabile" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "%s non ha prodotto un dict!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "%s ha un SHA-256 errato: %s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s non è un campo di build accettato" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "\"keypass\" non trovato in config.yml!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "'keystore' è NONE e 'smartcardoptions' è vuoto!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "\"keystore\" non trovato in config.yml!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "\"keystorepass\" non trovato in config.yml!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "\"repo_keyalias\" non trovato in config.yml!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "\"required\" è un argomento invalido per i posizionali" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "\"sdk_path\" non impostato in config.yml!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' è troppo vecchio, fdroid richiede build-tools-{version} o più recente!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "Esecuzione di \"{path}\" fallita!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' ha un formato non valido, dovrebbe essere un dizionario!" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "\"{value}\" non è un {field} valido in {appid}. Espressione regolare: {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "\"{value}\" non è un {field} valido, dovrebbe essere {pattern}" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...checkupdate fallito per {appid}:{error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() non definita" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "/issues è mancante" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "È richiesto un URL come argomento!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "Aggiungi firme PGP con GnuPG per i pacchetti in un repository" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "Aggiungi una chiave di firma ad un repository non firmato" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "Aggiungi i file scheletro di metadata agli APK che sono senza" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "Aggiungendo un repository solo per {name}" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "Alias della chiave di firma del repository nel keystore" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "AllowedAPKSigningKeys mancante ma il riferimento binario è stato fornito" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "Permetti di specificare una revisione (o branch git) diversa per l'importazione iniziale" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "Esegui il mirroring anche per l'intera sezione archivi" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "Avvisa anche dei problemi di formattazione, come rewritemeta -l" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "Libreria Android AAR" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "File APK per Android" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "Codice DEX Android" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "Android SDK non trovato in {path}!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "Il path di Android SDK \"{path}\" non esiste!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "Il path di Android SDK \"{path}\" non è una directory!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "Strumento Android SDK {cmd} non trovato!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "L'app ha Binaries ma non ha AllowedAPKSigningKeys corrispondente per fissare il certificato." #: ../fdroidserver/lint.py #, fuzzy msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "L'app ha NoSourceSince o ArchivePolicy \"0 versioni\" ma AutoUpdateMode o UpdateCheckMode non sono None" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "L'app è in \"{repo}\" ma ha un collegamento a {url}" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "La versione dell'app ha il file binario ma non ha un AllowedAPKSigningKeys corrispondente per fissare il certificato." #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "Non è necessario aggiungere \".git\"" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "Archiviando {apkfilename} con una firma invalida!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode con UpdateCheckMode: HTTP deve avere uno schema." #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "Tipo di voce \"{mirrortype}\" errato nella configurazione dei mirror: {mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "Indirizzo URL base per il mirror, può includere la chiave di firma dell'indice utilizzando la query string: ?fingerprint=" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "Branch \"{branch}\"usata come commit nella build \"{versionName}\"" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "Branch \"{branch}\" usata come commit in srclib \"{srclib}\"" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "Collegamento simbolico orfano: {path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "Costruisci un pacchetto dai sorgenti" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "Costruisci tutte le applicazioni disponibili" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "Build generata da \"froid import\" - rimuovi disable line quando ha finito" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "Il repository git dei metadati di compilazione ha modifiche non autorizzate!" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "Costruisci solo l'ultima versione di ciascun pacchetto" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "Costruito il repository in \"%s\" con questa configurazione:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "Impossibile aggiornare automaticamente app prive del CurrentVersionCode" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Impossibile costruire a causa di un errore con {} durante la scansione" msgstr[1] "Impossibile costruire a causa di errori con {} durante la scansione" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Impossibile riscrivere \"{path}\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "La categoria \"%s\" non è valida" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "Le categorie non sono impostate" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Cerca gli aggiornamenti delle applicazioni" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "Controllo dell'archiviazione per {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Aggiornamento pulito - non usa cache, riprocessa tutti gli APK" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Lista di categorie separate da una virgola." #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "Comando \"%s\" non riconosciuto.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "Cambiamenti del commit" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "Definizioni \"{field}\" in conflitto tra .yml e file localizzati:" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Argomenti in conflitto: '--verbose' e '--quiet' non possono essere specificati contemporaneamente." #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "Impossibile trovare \"{command}\" sul tuo sistema" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Impossibile trovare il codice della versione più recente" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Impossibile trovare il nome della versione più recente" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "Impossibile trovare {path} da rimuovere" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "Impossibile aprire il file APK {path} per l'analisi: " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Impossibile analizzare la dimensione \"{size}\", tipo sbagliato \"{type}\"" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Impossibile trovare l'ID dell'applicazione" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "Impossibile trovare informazioni sulla versione" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "Impossibile trovare l'ID del pacchetto" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "Mi rifiuto di sovrascrivere il setup della chiave di firma già esistente!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "Nuovo container \"{name}\" creato" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Creazione \"{path}\" per configurazione s3cmd." #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Creating empty {config_file}" msgstr "Lettura di '{config_file}'" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Creazione della directory dei log" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "Creazione di un nuovo bucket S3: {url}" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "Creazione della directory di output" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "Creazione di un indice firmato con questa chiave (SHA256):" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "Creazione della directory temporanea" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "Creazione dell'indice non firmato in preparazione della firma" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "CurrentVersionCode {cv} è inferiore alla voce di build più vecchia {versionCode}" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "DEBUG_KEYSTORE non impostato o il valore è incompleto" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "Cancella gli APK e/o OBB senza metadati dal repository" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "Eliminazione dell'archivio, il repository è troppo grande ({size} max {limit})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "Eliminazione della cronologia git-mirror, il repository è troppo grande ({size} max {limit})" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "Cancellazione del file sconosciuto: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "La descrizione \"%s\" è solo il riassunto dell'app" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "La descrizione ha una riga duplicata" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "La descrizione di lunghezza {length} supera il limite di {limit} caratteri" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "Non aggiungere 'disable:' alle voci di compilazione generate" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "Non distribuire i nuovi file nel repository" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "Non includere \"{path}\" nell'URL!" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "Non chiedere il path di Android SDK, esci subito con un errore" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "Non rimuovere le chiavi private generate dal keystore" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "Non creare un tarball sorgente, utile per testare una build" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "Non aggiornare il repository, utile per testare una build offline" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "Non usare checksum rsync" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Scarica mirror completi di piccoli repository" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Lo scaricamento del repository è gia fallito una volta, non verrà riprovato." #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "Scaricamento di {url} fallito. {error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "La dichiarazione di Anti-Feature duplicata in {path} è stata ignorata!" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "Voce \"%s\" duplicata nella configurazione dei mirror!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "Link duplicato in '{field}': {url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "ERRORE: %(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "ERRORE: il sottocomando \"server\" è stato rimosso, usa \"deploy\"!" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "ERRORE: tipo di CI non supportato, le patch sono benvenute!" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "ERRORE: host git \"%s\" non supportato, le patch sono benvenute!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "La codifica è impostata su \"{enc}\" fdroid potrebbe incorrere in problemi di codifica. Impostalo su \"UTF-8\" per ottenere i migliori risultati." #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" "Inserisci qui il percorso dell'Android SDK (%s):\n" "> " #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "La variabile d'ambiente {var} da {configname} non è impostata!" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "La variabile d'ambiente {var} da {configname} non è impostata!" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "Errore nell'ottenere l'indirizzo del repo" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "Esci con un codice diverso da zero se sono stati rilevati problemi" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "Estrarre i metadati dell'applicazione da una repository di origine" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "Estrai le firme dagli APK" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "Copia non riuscita {path}: {error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "Impossibile recuperare le firme per '{apkfilename}': {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "Impossibile leggere {path}: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "Impossibile ridimensionare {path}: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "Impossibile creare il bucket S3: {url}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "Impossibile ottenere informazioni dell’APK, eliminando {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "Impossibile ottenere informazioni dell’APK, saltando {path}" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "Impossibile ottenere l'impronta digitale della chiave di firma del pacchetto APK" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "Impossibile installare '{apkfilename}' su {dev}: {error}" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "Impossibile firmare l'applicazione" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "Buildserverid recuperato dalla VM: {buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "Firme recuperate per \"{apkfilename}\" -> \"{sigdir}\"" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "Il file è scomparso durante l'elaborazione: {path}" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "Finito" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Tag HTML vietati" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "Forza la compilazione delle app disabilitate e prosegui indipendentemente dai problemi di scansione. Consentito solo in modalità test." #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "Forza l'arresto della compilazione dopo il timeout di {0} sec!" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "Forza la scansione di app e build disabilitate." #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "Trovato l'elemento grafico \"{path}\" senza metadati per l'app \"{name}\"!" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "Trovato file di finanziamento non valido \"{path}\" per \"{name}\":" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "Trovati appid non validi negli argomenti" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "Trovati codici di versione non validi per alcune app" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "Trovati più file di blocco della firma JAR in {path}" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "Trovati più certificati di firma per il repository!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "Trovati più file di metadati per {appid}" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "Trovati più certificati di firma per il repository." #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "Nessun certificato di firma trovato per il repository." #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "Trovato non-file in %s" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "Trovato {apkfilename} in {url}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "Trovati {count} problemi in {filename}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "Trovati {count} avvisi in {filename}" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "Metadati dello scheletro generati per {appid}" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "Checkout Git di \"%s\" non riuscito" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "Git clean non riuscito" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "Recupero Git non riuscito" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Set-head remoto Git non riuscito: \"%s\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Ripristino Git non riuscito" #: ../fdroidserver/common.py #, fuzzy msgid "Git submodule deinit failed" msgstr "Aggiornamento del sottomodulo Git non riuscito" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "Sincronizzazione del sottomodulo Git non riuscita" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "Aggiornamento del sottomodulo Git non riuscito" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "HTTPS deve essere utilizzato con gli URL Subversion!" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "Se un mirror git diventa troppo grande, consenti l'eliminazione dell'archivio" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "Se il caricamento non riesce, prova a caricare manualmente su {url}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "Ignorando i metadati '{field}' in '{metapath}' perché obsoleti." #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "Ignorando la voce FUNDING.yml più lunga di 2048: %s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "Ignorato elemento errato nel manifest: %s" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "{oldfile} è deprecato, usa {newfile}" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Ignorare il pacchetto senza metadati: " #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "Ignorare i dati della cache obsoleti per {apkfilename}" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "Includere gli APK firmati con algoritmi disabilitati come MD5" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "Includere i file .asc della firma PGP nel mirror" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "Includere i log di build nel mirror" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "Includere i tarball dei sorgenti nel mirror" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "Includo metadati da %s@%s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "Includo metadati da {path}" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "Inizializzazione dei sottomoduli" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "Installa tutte le applicazioni firmate disponibili" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "Installa i pacchetti costruiti su dispositivi" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "Installando %s..." #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "Installazione di '{apkfilename}' su {dev}..." #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "Interagisci col server HTTP del repository" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "APK non valido" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "Modalità di aggiornamento automatico non valida: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "Modalità di controllo aggiornamento non valida: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "VercodeOperation non valido: {field}" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "VercodeOperation non valido: {invalid_ops}" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "ID applicazione non valida {appid}" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Elenco puntato non valido" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "Nome non valido per il file pubblicato: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "nkd non valido: entry nella compilazione: \"{ndk}\"" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "Reindirizzamento non valido a non HTTPS: {before} -> {after} " #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "Metadati scrlib non validi: '{file}' non esiste" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "Metadati srclib non validi: impossibile analizzare '{file}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "Metadati srclib non validi: chiave sconosciuta '{key}' in '{file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "Impossibile verificare la firma JAR: {path}" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "Firma JAR verificata: {path}" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "File JAR Java" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "Java JDK non trovato! Installa nella posizione standard o imposta java_paths!" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "Classe compilata in Java" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "Java jarsigner non trovato! Installa nella posizione standard o imposta java_paths!" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "Javascript negli attributi HTML src" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "Mantenimento della build fallita \"{apkfilename}\"" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "Keystore per la firma della chiave:\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "L'ultimo commit utilizzato '{commit}' sembra un tag, ma UpdateCheckMode è '{ucm}'" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "I metodi di donazione di Liberapay appartengono al campo Liberapay" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "Elenca i file che verrebbero riformattati (simulazione)" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "Locale incluso in f-droid.org URL" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "Interrompere la compilazione sulle eccezioni" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "Mirror del repository malformati." #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "Riga del serverwebroot malformata:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "Raggiunta la massima profondità di ricorsione nel file ZIP: %s" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Rispecchiare il repository completo e l'archivio, tutti i tipi di file." #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "Directory di output mancante" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "Spostamento delle dichiarazioni di Anti-Features nei file localizzati:" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "Né \"repo_pubkey\" o \"keystorepass\" sono stati impostati in config.yml" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "Nessun APK per il pacchetto: %s" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "Android SDK non trovato!" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "Nessun dispositivo collegato trovato" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "Nessuna impronta digitale nell'URL." #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "Nessun sottomodulo git disponibile" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "Nessun progetto gradle è stato trovato. Specificare --subdir?" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "Nessun informazione trovata." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "Nessuna etichetta corrispondente trovata" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "Nessuna versione minima dell'SDK trovata in {0}, viene usata la predefinita (3)." #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "Non è necessario specificare che l'app è un Software Libero" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "Non c'è bisogno di specificare che l'applicazione è per Android" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "Nessuna opzione impostata! Modifica il tuo config.yml per impostare almeno uno di questi:" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "Nessun pacchetto specificato" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "Nessun APK firmato disponibile per %s" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "Nessuna directory di output firmata - niente da fare" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "Nessun certificato di firma trovato in {path}" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "Nessun pacchetto di questo tipo: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "Nessun versionCode di questo tipo {versionCode} per l'app {appid}" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "Nessuna etichetta trovata" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "Nessuna directory non firmata - niente da fare" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "Nessuna informazione sulla versione trovata." #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "Definizione di dimensione non valida: \"{}\"" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "Niente da fare" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "Niente da fare per {appid}." #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "Ora imposta i seguenti campi in config.yml:" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "Il file OBB ha un versionCode più recente ({integer}) di qualsiasi APK:" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "Il nome del file OBB deve iniziare con \"main.\" o \"patch.\":" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "Il nome del pacchetto di OBB non corrisponde a un APK supportato:" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Macchina offline, saltando la generazione del mirror git fino a quando `fdroid deploy`" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Solo PNG e JPEG sono supportati per la grafica, trovati: {path}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "Elabora solo app con aggiornamenti automatici" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "I metodi di donazione di OpenCollective appartengono al campo OpenCollective" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Rapporto di uscita JSON al file chiamato dopo APK." #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "Invia l'output del JSON allo stdout." #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "Output di JSON" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "Licenza generale del progetto." #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "Sostituzione di versionName vuoto in {apkfilename} dai metadati: {version}" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "Pacchetto \"{appid}\" già esistente" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "Analisi del manifesto in '{path}'" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "Password richiesta con nome utente" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "Percorso alla sottodirectory principale del progetto Android, se non in root." #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "Percorso per l'SDK Android (a volte impostato in ANDROID_HOME)" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "Percorso del repository git da utilizzare come registro" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "Percorso del keystore per la chiave di firma del repository" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Stampa la variabile segreta sul terminale per un facile copia/incolla" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "Problema con il file ZIP: %s, errore %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "Problema con xml in '{path}'" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "Elabora gli aggiornamenti automatici" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "Elaborazione di {apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "Elaborazione di {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "Produci XML/JSON leggibili dagli utenti per i file di indice" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "URL del progetto da cui importare." #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "La punteggiatura dovrebbe essere evitata" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "Esegui il push del log in questo repository git remoto" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "Invio del log di trasparenza binaria su {url}" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "Spingere a {url}" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "Crea velocemente un nuovo repository" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "Leggi tutti i file di metadati ed esci" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "Lettura di '{config_file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "Lettura di packageName/versionCode/ ersionName non riuscita, APK non valido: '{apkfilename}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "Lettura di packageName/versionCode/versionName non riuscita, APK non valido: '{apkfilename}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "Lettura di {apkfilename} dalla cache" #: ../fdroidserver/build.py #, fuzzy msgid "Refresh and cache scanner rules and signatures from the network" msgstr "recupera l'ultima versione delle firme dal web" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Rimozione dei file specificati" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "Rimozione di {path}\"" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "Rinomina i file APK che non corrispondono a package.name_123.apk" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "Firmando di nuovo {apkfilename} con il debug.keystore fornito" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "Ridimensiona tutte le icone che superano la dimensione massima dei pixel ed esci" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "Limita l'output ad avvisi ed errori" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Riscrivi tutti i file di metadati" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "Riscrittura di \"{appid}\"" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "Esegui su repository git con modifiche non salvate" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "Esegui rewritemeta per correggere la formattazione" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "Esecuzione del primo passaggio con controllo MD5 disabilitato" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "Esecuzione di wget in {path}" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "Lo SHA-256 di {url} non corrisponde alla voce!" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "Scansiona gli APK risultanti per le classi non libere note." #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "Scansiona il codice sorgente di un pacchetto" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "Lo scanner ha trovato {count} problemi in {apk}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "Scanner trovato {count} problemi in {appid}:" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "Scanner trovato {count} problemi in {appid}: {versionCode}:" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "Scanner trovato {} problema" msgstr[1] "Scanner trovato {} problemi" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "Scansiona gli APK con apkanalyzer per le classi note non libere." #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "Impostare NDK {release} ({version})" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "Imposta l'orologio a quell'ora usando:" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "Imposta le versioni massime in repo prima che quelle più vecchie vengano archiviate" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "Imposta il limite di file aperto su {integer}" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "Impostare una build di app per un repository di build notturno" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "Impostazione del limite di file aperto non riuscita: " #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "Impostazione del timeout {0} sec per questa build" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "Firma e metti i pacchetti nel repository" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "Firma gli indici creati con update --nosign" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "Salta la scansione del codice sorgente per i binari e altri problemi" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "Saltare '{apkfilename} con firma non valida!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "Saltando il mirror di GitLab Pages perché la repo è troppo grande (>%.2fGB)!" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "Saltare la generazione dell'indice per {appid}" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "Saltare {apkfilename} con firma non valida!" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "Saltare {appid}: disabilitato" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "Specificare una cartella locale in cui sincronizzare il repository" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "Specificare un file di identità da fornire a SSH per rsyncing" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "Specificare quale file keystore di debug utilizzare." #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "Vomitare ancora più informazioni del normale" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "Riduzione della firma misteriosa da {apkfilename}" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "Riepilogo \"%s\" è solo il nome dell'app" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "Riepilogo di length {length} supera il limite di caratteri {limit}" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "L'orologio di sistema è più vecchio della data in {path}!" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "La modalità di aggiornamento dei tag attualmente funziona solo per i repository git, hg, bzr e git-svn" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "Modalità di aggiornamento dei tag utilizzata in git-svn, ma il repo non è stato configurato con i tag" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Modalità test - mette l'output solo nella directory tmp, e costruisce sempre, anche se l'output esiste già." #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "Il codice della versione OBB deve venire dopo \"{name}\":" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "L'URL di base per il repo da registrare (predefinito: https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "La directory in cui scrivere il mirror" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "Il file da includere nel repo (percorso o glob)" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "L'impronta digitale del repository non corrisponde." #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "La directory principale per local_copy_dir \"{path}\" non esiste!" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "C'è una collisione keyalias - pubblicazione interrotta" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "Queste sono le applicazioni che sono state archiviate dal repo principale." #: ../fdroidserver/mirror.py #, fuzzy msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "Questo comando non deve mai essere utilizzato per il mirror f-droid.org! L’intero mirror richiede più di 600GB." #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "Questo è un repository di applicazioni da utilizzare con F-Droid. Le applicazioni in questo repository sono o binari ufficiali compilati dagli sviluppatori dell'applicazione originale, o sono binari compilati dai sorgenti dall'amministratore di f-droid.org usando gli strumenti su https://gitlab.com/fdroid." #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "Questo repo ha già metadati locali: %s" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" "Per completare la configurazione, aggiungi i tuoi APKs a \"%s\",\n" "poi esegui \"fdroid update -c; fdroid update\". Puoi anche modificare\n" "\"config.yml\" per impostare URL, nome del repo e altro. Dovresti anche creare\n" "una chiave di firma (ne può essere stata generata una temporanea in automatico).\n" "\n" "Per altre info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "e https://f-droid.org/docs/Signing_Process" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "Per usare awsbucket, awssecretkey e awsaccesskeyid devono essere impostati anche in config.yml!" #: ../fdroidserver/deploy.py #, fuzzy msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "Per usare awsbucket, awssecretkey e awsaccesskeyid devono essere impostati anche in config.yml!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "L'URL deve iniziare con https:// o http://" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "Gli accorciatori di URL non dovrebbero essere usati" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "URL {url} in Descrizione: {error}" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "Tag di licenza inaspettato \"{}\"! Usare solo tag approvati da FSF o OSI da https://spdx.org/license-list" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Tag di licenza inaspettato \"{}\"! Usa solo i tag di licenza configurati nel tuo file di configurazione" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "Voce sconosciuta {key} in {configname}" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "Eccezione sconosciuta trovata!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "File sconosciuto '{filename}' nella build '{versionName}'" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "Formato di metadati sconosciuto: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "Formato dei metadati sconosciuto: {path} (usa: *.yml)" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "Versione sconosciuta di aapt, potrebbe causare problemi: " #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "Spazio iniziale non necessario" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "Spazio finale non necessario" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "Campo dell'app non riconosciuto '{fieldname}' in '{path}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Flag di costruzione non riconosciuto '{build_flag}' in '{path}'" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "Tipo di file non supportato \"{extension}\" per la grafica del repo" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "Trovato un file grafico non supportato: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "Extlib inutilizzata a %s" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "File inutilizzato a %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "Percorso scandelete non utilizzato: %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "Percorso scanignore non utilizzato: %s" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Aggiorna le informazioni del repository coi nuovi pacchetti" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "Aggiorna il log di trasparenza binario con un nuovo URL" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData ha un URL non valido: {url}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "UpdateCheckData deve corrispondere al codice di versione come intero (\\d o [0-9]): {codeex}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "UpdateCheckData deve usare l'URL HTTPS: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "UpdateCheckData non è un URL valido: {url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode impostato ma sembra che checkupdates non sia ancora stato eseguito." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName è impostato sull'ID dell'applicazione nota, può essere rimosso" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "Caricamento di {apkfilename} su androidobservatory.org" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "Caricamento di {apkfilename} su virustotal" #: ../fdroidserver/lint.py #, fuzzy msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Usare /HEAD invece di /master per puntare a un file nel ramo predefinito" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Usa `fdroid update -c` per crearlo." #: ../fdroidserver/build.py msgid "Use build server" msgstr "Utilizzare il build server" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "Usa la data dell'APK invece dell'ora corrente per gli APK aggiunti di recente" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "Usare \"{path}\" per configurare s3cmd." #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "Usare \"{path}\" per configurare s3cmd." #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "Usare la firma APK v2" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "Usare la firma APK v3" #: ../fdroidserver/common.py #, fuzzy msgid "Using JAR Signature" msgstr "Usare la firma APK v2" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Utilizzando jarsigner di Java, non raccomandato per verificare APK! Utilizzare apksigner" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "Utilizzo di un dizionario vuoto al posto del contenuto di {path}!" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "Utilizzando il keystore esistente \"{path}\"" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "Utilizzando s3cmd per sincronizzare con: {url}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "Utilizzando s3cmd per sincronizzare con: {url}" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "I comandi validi sono:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "Anziché scaricare di nuovo, verifica con la copia memorizata nella cache locale." #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "Verifica l'integrità dei pacchetti scaricati" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "Verifica della firma dell'indice:" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "La chiave API di VirusTotal non può caricare file più grandi di 32MB, usa {url} per caricare {path}." #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Avvisa riguardo possibili errori nei metadati" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Se configurato per indici firmati, crea solo indici senza segno in questa fase" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "Quando linting l'intero repository yamllint è disabilitato per impostazione predefinita. Questa opzione costringe yamllint a prescindere." #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "Vuoi scaricare e installare F-Droid.apk tramite adb? (SÌ/no)" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'Distinguished Name' usato quando si generano le chiavi" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "Potete usare ANDROID_HOME per impostare il percorso del vostro SDK, cioè:" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "Archivio di file ZIP" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "aggiungendo IdentityFile a {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "aggiungendo a {name}: {path}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "opzione ambigua: %(option)s potrebbe corrispondere a %(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "apksigner non trovato! Impossibile firmare o verificare gli APK moderni" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "apksigner non trovato, è necessario per la firma!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "ID dell'applicazione del file su cui operare" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "ID dell'applicazione con versionCode opzionale nella forma APPID[:VERCODE]" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "archive_url deve terminare con /archive" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "argomento \" -\" con la modalità %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "argomento %(argument_name)s: %(message)s" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "tentativo di connessione SSH nuda per testare la chiave di distribuzione:" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "impossibile analizzare le specifiche scrlib (non una stringa): '{}'" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "impossibile aprire '%(filename)s': %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "impossibile aprire l'url non-https: '{};" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "impossibile trovare srclibs richiesto: \"{path}\"" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "impossibile avere più argomenti subparser" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "impossibile unire le azioni : due gruppi sono denominati %r" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "non può pubblicare l'aggiornamento, avete impostato la chiave di distribuzione?" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "clonazione {url}" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "dai moduli dei plugin:" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "stringa di opzioni in conflitto: %s" msgstr[1] "stringhe di opzioni in conflitto: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "alias subparser in conflitto: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "subparser in conflitto: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "non ha potuto analizzare '{path}'" #: ../fdroidserver/common.py #, fuzzy msgid "could not parse srclib spec (no name specified): '{}'" msgstr "non ha potuto analizzare la specifica srclib (nessun riferimento specificato): '{}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "non ha potuto analizzare la specifica srclib (nessun riferimento specificato): '{}'" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "creato {path}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "la versione attuale è più recente: old vercode={old}, new vercode={new}" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "cancellazione: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "log di processo distribuito {path} a {dest}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "dest= è richiesto per opzioni come %r" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "scaricando '{}'" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "scaricamento delle firme dello scanner da '{}' fallito" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "binario eseguibile, eventualmente codice" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "atteso %s argomento" msgstr[1] "atteso %s argomenti" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "si aspettava almeno un argomento" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "atteso al massimo un argomento" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "atteso un argomento" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "fdroid [] [-h|--help|--version|]" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "recupera l'ultima versione delle firme dal web" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "forza gli errori di metadati (predefinito) come avvisi, o da ignorare." #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "git svn clone fallito" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "archivio file gzip" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "ignorava l'argomento esplicito %r" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1 deve avere una firma, usa `fdroid signindex` per crearla!" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 deve avere una firma, usa `fdroid signindex` per crearla!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "valore %(type)s non valido: %(value)r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "scelta non valida: %(value)r (scegliere tra %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "valore di risoluzione dei conflitti non valido: %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "stringa di opzioni non valida %(option)r: deve iniziare con un carattere %(prefix_chars)r" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "ipfs_cid non trovato, salto la generazione di CIDv1" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "l'ultima ricetta di compilazione è più recente: vecchio vercode={old}, nuovo vercode={new}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "local_copy_dir not finisce con \"fdroid\", forse intendevi: \"{path}\"" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "local_copy_dir deve essere un percorso assoluto!" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "local_copy_dir deve essere una cartella, non un file!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "il mirror '%s' non finisce con 'fdroid'!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "gli argomenti che si escludono a vicenda devono essere opzionali" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "prossimo aggiornamento cache {name} tra {time}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "nessuna \"icona\" in {appid}" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "nessun APK fornito" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "nessuna informazione sulla versione trovata" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "non consentito con argomento %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "uno degli argomenti %s è richiesto" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "accetta solo stringhe, liste e tuple" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "opzioni" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "sovrascrivendo il {path} esistente" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "argomenti posizionali" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "processo log deploy {path} a {dest} fallito!" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "binario di riferimento senza firma" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "rifiuta il download tramite connessione HTTP insicura (usa HTTPS o specifica --no-https-check): {apkfilename}" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "repo_icon \"repo/icons/%s\" non esiste, genera un segnaposto." #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "Il repo_url deve terminare con /repo" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "rsync è assente o non funziona: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd sincronizza gli indici {path} con {url} e cancella" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "s3cmd sincronizza gli indici {path} con {url} e cancella" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "la cache dello scanner è malformata! Puoi svuotarla con: '{clear}'" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "libreria condivisa" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "mostra questo messaggio di aiuto ed esci" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "APK firmato, un percorso di file o un URL HTTPS." #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "saltare la distribuzione dei log di compilazione completi: il contenuto del log è vuoto" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "saltare la distribuzione dei log di compilazione completi: non abilitato nella configurazione" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "saltare il tarball di origine: {path}" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "srclibs manca il nome e/o @" #: ../fdroidserver/scanner.py msgid "static library" msgstr "libreria statica" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "il binario di riferimento fornito ha il firmatario autorizzato {signer}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "i seguenti argomenti sono obbligatori: %s" #: ../fdroidserver/install.py msgid "true" msgstr "vero" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "stringa di opzioni inaspettata: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "parser sconosciuto %(parser_name)r (scelte: %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "argomenti sconosciuti: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "permessi su \"{config_file}\" insicuri (dovrebbero essere 0600)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "utilizzo: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "utilizzando Apache libcloud per sincronizzare con {url}" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com sta limitando il tasso, in attesa di riprovare..." #: ../fdroidserver/install.py msgid "yes" msgstr "sì" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "{0} app, {1} alias chiave" msgstr[1] "{0} applicazioni, {1} alias chiave" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) non ha metadati!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "L'AndroidManifest.xml di {apkfilename} ha una data non corretta: " #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} non ha un nome! Usa invece l'ID dell'applicazione." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "{appid} da {path} non è un ID di applicazione Android valido!" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "{appid} da {path} non è un nome di pacchetto Java valido!" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "{appid} ha sia APK che file: {files}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "{appid} manca {name}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "{appid}: extlib sconosciuto {path} nella build '{versionName}'" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "{appid}: nessuna build specificata, in esecuzione sullo stato sorgente corrente" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "{appid}:{field} deve essere un '{type}', ma è un '{fieldtype}!'" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "{appid}: {field} deve essere un '{type}', ma è un '{fieldtype}'!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "{build_flag} deve essere un intero, trovato: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "{build_flag} deve essere una lista o una stringa, trovato: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "{file} è vuoto o corrotto!" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" non esiste! Controlla \"config.yml\"." #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "{path} esiste già, ignorando i risultati dell'importazione!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "{path} non esiste! Crealo eseguendo:" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "{path} ha una cattiva firma di file \"{pattern}\", possibile exploit di Janus!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "{path} è di dimensioni zero!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "{path} più di 200MB, caricare manualmente: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "{path}: {error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "{url} non finisce con \"fdroid\", controlla il percorso dell'URL!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "{url} non inizia con \"http\"!" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "{} costruzione fallita" msgstr[1] "{} le costruzioni sono fallite" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "{} costruzione riuscita" msgstr[1] "{} costruisce con successo" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/ja/0000755000175000017500000000000014770510164014555 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/ja/LC_MESSAGES/0000755000175000017500000000000014770510164016342 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/ja/LC_MESSAGES/fdroidserver.po0000644000175000017500000031272214770507747021424 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Hinaloe , 2020. # Suguru Hirahara , 2024. # "Shuuji TAKAHASHI (shuuji3)" , 2024. # Liner Seven , 2024, 2025. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.8-224-g4b0ade7\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2025-02-08 06:22+0000\n" "Last-Translator: Liner Seven \n" "Language-Team: Japanese \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 5.10-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "設定用の鍵として使用されるSSHの公開鍵:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "DEBUG_KEYSTOREの秘密の変数にエンコードされる{path}:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "「\"%s/」に合致するメタデータのファイルはありません!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "\"local_copy_dir\" {path} は存在しません!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "「{apkfilename}」はすでに{dev}にインストールされています。" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "「{path}」には最近の{name}({version})が含まれています" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "「{path}」は存在しますがs3cmdがインストールされていません!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "「{path}」はサポートされているファイルフォーマットではありません(metadata/*.ymlを使用してください)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "「{path}」は許可されていない鍵で署名されています:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "「{url}」は正しいURLではありません!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: エラー: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "%d個のAPKが署名されておらず検証できませんでした!" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d個の問題が見つかりました" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%rは呼び出せません" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "%sは辞書を生成しませんでした!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "%sのSHA-256は誤っています:%s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%sは承認されたビルドフィールドではありません" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "「keypass」がconfig.ymlにありません!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "「keystore」がありません。また「smartcardoptions」が空です!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "「keystore」がconfig.ymlにありません!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "「keystorepass」がconfig.ymlにありません!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "「repo_keyalias」がconfig.ymlにありません!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "「required」は位置についての引数としては正しくありません" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "「sdk_path」がconfig.ymlで設定されていません!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "「{aapt}」は古すぎます。fdroidはbuild-tools-{version}またはそれ以降が必要です!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "「{path}」を実行できませんでした!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "「{path}」は正しいフォーマットではありません。辞書を指定してください!" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "「{value}」は {appid}の正しい{field}ではありません。正規表現のパターンは {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "「{value}」は正しい{field}ではありません。{pattern}としてください" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "--merge-requestは単一のappidでのみ実行されます!" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "…{appid}についてcheckupdateを実行できませんでした:{error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() は定義されていません" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "/issuesがありません" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "URLを引数として指定してください!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "APKの署名には{path}で異なる証明書があります:" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "リポジトリのパッケージにGnuPGを使用してPGP署名を追加" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "署名されていないリポジトリに、リポジトリの署名鍵を追加" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "メタデータが存在しないAPKにテンプレートのメタデータを追加" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "{name}にのみ新しいリポジトリを追加" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "キーストアのリポジトリの署名鍵のエイリアス" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "AllowedAPKSigningKeysが指定されていませんが、参照用バイナリーは指定されています" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "最初のインポートの際に異なるリビジョン(またはgitのブランチ)を指定することを許可" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "完全なアーカイブのセクションもミラーリング" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "フォーマット上の問題についてもrewritemeta -lのように警告" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "AndroidのAARライブラリー" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "AndroidのAPKファイル" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "AndroidのDEXコード" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "AndroidのSDKが{path}で見つかりません!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "AndroidのSDKのパス「{path}」がありません!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "Android SDK パス '{path}' はディレクトリではありません!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "AndroidのSDKツール {cmd} が見つかりません!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "アプリにはバイナリーがありますが、それに対応する、証明書の固定用のAllowedAPKSigningKeysがありません。" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "アプリにNoSourceSinceまたは、\"0 versions\"か0のArchivePolicyが設定されていますが、AutoUpdateModeまたはUpdateCheckModeはNoneに設定されていません" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "アプリは「{repo}」にありますが{url}へのリンクが指定されています" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "アプリのバージョンにはバイナリーがありますが、それに対応する、証明書の固定用のAllowedAPKSigningKeysがありません。" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr ".gitを最初に置く必要はありません" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "{apkfilename}のアーカイブの署名が正しくありません!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "UpdateCheckModeが有効になっているAutoUpdateMode:HTTPにパターンを設定してください。" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "すべてのプロンプトに対して自動的にnoを選択します。" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "すべてのプロンプトに対して自動的にyesを選択します。" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "正しくないエントリーの種類「{mirrortype}」がミラーの設定ファイルの中にあります:{mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "ミラーのベースURLにはクエリーの文字列 ?fingerprint= を使ってインデックスの署名鍵を含めることができます。" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "ブランチ「{branch}」が「{versionName}」のビルドのcommitとして使用されました" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "ブランチ「{branch}」がsrclib「{srclib}」のcommitとして使用されました" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "symlinkが壊れています:{path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "パッケージをソースコードからビルド" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "利用できる全てのアプリケーションをビルド" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "ビルドが`fdroid import`により生成されました - 準備ができたら無効にする行を削除してください" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "ビルドのメタデータのgitリポジトリにcommitされていない変更があります!" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "各パッケージの最新バージョンのみをビルド" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "「%s」に基づきこの設定でリポジトリをビルドしました:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "CurrentVersionCodeが指定されていないアプリを自動更新することはできません" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "スキャン時に{}個のエラーが発生したためビルドできません" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "「{path}」を書き換えられません" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "「%s」のカテゴリーは正しくありません" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "カテゴリーが設定されていません" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "カテゴリーの「{category}」が規定されていますが、どのアプリによっても使用されていません!" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "アプリケーションの更新を確認" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "{appid}のアーカイブをチェックしています - apks:{integer}, keepversions:{keep}, archapks:{arch}" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "クリーンアップデート - キャッシュを使用せず、全てのAPKの再処理を行います" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "ログ出力に色を付ける" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "コンマで区切られたカテゴリーの一覧。" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "コマンド '%s' は認識されません。\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "変更をcommit" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "変更をコミット、プッシュしてから、マージリクエストを作成してください" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "「{field}」の定義が.ymlと翻訳済の間で矛盾しています:" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "引数が矛盾しています:「--verbose」と「--quiet」を同時に設定することはできません。" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "システム上で「{command}」が見つかりませんでした" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "最新のバージョンコードが見つかりませんでした" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "最新のバージョン名が見つかりませんでした" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "削除するパス {path} が見つかりませんでした" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "分析用にAPK {path} を開くことができませんでした: " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "サイズ「{size}」をパースできませんでした。種類「{type}」が正しくありません" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "アプリケーションIDが見つかりませんでした" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "バージョン情報が見つかりませんでした" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "パッケージIDが見つかりませんでした" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "既存の署名鍵の設定の上書きは行いません!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "新しいコンテナー「{name}」を作成しました" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "s3cmdの設定用に「{path}」を作成します。" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Creating empty {config_file}" msgstr "「{config_file}」を読み込みます" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "ログ用のディレクトリーを作成します" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "新しいS3のバケットを作成しています:{url}" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "出力用のディレクトリを作成します" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "この鍵(SHA256)で署名済のインデックスを作成します:" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "一時ファイル用ディレクトリーを作成します" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "署名されていないインデックスを署名用に準備します" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "CurrentVersionCode {cv} が最も古いビルドのエントリーの{versionCode}よりも小さいです" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "DEBUG_KEYSTOREが設定されていないか値が不完全です" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "メタデータの無いAPKとOBBをリポジトリから削除" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "アーカイブを削除しています。リポジトリが大きすぎます({size} 最大{limit})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "git-mirrorの履歴を削除しています。リポジトリが大きすぎます({size} 最大{limit})" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "不明なファイルを削除します:{path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "説明文「%s」がアプリの要約と同一です" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "説明文に重複する行があります" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "説明文の長さは{length}ですが、最大の文字数は{limit}です" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "config/{name}.ymlではないでしょうか?" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "{code}ではないでしょうか?" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "生成したビルドのエントリーに「disable:」を追加しない" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "新しいファイルをリポジトリに設定しない" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "「{path}」をURLに含めないでください!" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "AndroidのSDKのパスを確認せず、単に終了" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "キーストアから生成した秘密鍵を削除しない" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "ソースのtarballを作成しない。ビルドのテスト時に便利です" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "リポジトリを更新しない。インターネットに接続していないときにビルドをテストする際に便利です" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "rsyncのチェックサムを使用しない" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "ネットワークへの情報漏洩が少ないミラーを使用してF-Droid.apkをダウンロードする" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "小さいリポジトリのミラーを完全にダウンロード" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "リポジトリのダウンロードは既に一度失敗しているので、再試行は行いません。" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "{url}をダウンロードできませんでした。{error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "{path}での好ましくない機能に関する重複した宣言は無視されました!" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "ミラーの設定に重複するエントリー「%s」があります!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "「{field}」のリンクが重複しています:{url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "エラー:%(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "エラー:「server」のサブコマンドは削除されました。「deploy」を使用してください!" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "エラー:サポートされていない種類のCIです。パッチを歓迎します!" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "エラー:サポートされていないgitのホスト「%s」です。パッチを歓迎します!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "エラー:{path}の{key}は「archive」でも「repo」でもありません!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "エラー: {path}の{key}:{subkey}は許可されている鍵 {allowed_keys} の中にありません!" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "エンコーディングは「{enc}」に設定されています。fdroidでエンコードに関する問題が生じる可能性があります。最良の結果のために「UTF-8」に設定してください。" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" "ここにAndroidのSDK(%s)のパスを入力してください:\n" "> " #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "{configname}の環境変数 {var} が設定されていません!" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "{configname}の環境変数 {var} が設定されていません!" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "「github_releases」を設定する際にエラーが発生しました。{}がありません(まず`fdroid update`を実行する必要があるかもしれません)。" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "リポジトリのアドレスを取得する際にエラーが発生しました" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "問題が発生した場合に0以外のコードを出力して終了" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "ソースリポジトリからアプリケーションのメタデータを抽出" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "APKから署名を抽出" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "既知のソースからF-Droid.apkをダウンロードできませんでした!" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "{path}をコピーできませんでした:{error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "「{apkfilename}」の署名を取得できませんでした:{error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "{path}を読み込めませんでした:{error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "{path}のサイズを変更できませんでした:{error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "S3のバケットを作成できませんでした:{url}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "APKの情報を取得できませんでした。{path}を削除します" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "APKの情報を取得できませんでした。{path}をスキップします" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "APKの署名鍵のフィンガープリントを取得できませんでした" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "「{apkfilename}」を{dev}にインストールできませんでした:{error}" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "アプリケーションに署名できませんでした" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "buildserveridをVMから取得しました:{buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "「{apkfilename}」→「{sigdir}」の署名鍵を取得しました" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "ファイルが処理中に消去されました:{path}" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "終了" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "禁止されているHTMLのタグ" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "無効に設定されているアプリのビルドを強制し、スキャンの問題にかかわらず実行。テストモードでのみ許可。" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "{0}秒のタイムアウトの後でビルドを強制的に停止します!" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "無効に設定されているアプリとビルドを強制的にスキャン。" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "アプリ「{name}」のメタデータなしに「{path}\"」のグラフィックを発見しました!" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "「{name}」の不正な調達用ファイル「{path}」が見つかりました:" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "引数に不正なappidがあります" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "いくつかのアプリのバージョンコードが正しくありません" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "複数のJAR署名ブロックファイルが{path}で見つかりました" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "署名者の複数の証明書が見つかりました!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "{appid}に複数のメタデータのファイルが見つかりました" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "リポジトリの署名用の証明書が複数見つかりました。" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "リポジトリの署名用の証明書が見つかりませんでした。" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "%sで不正なファイルが見つかりました" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "{apkfilename}が{url}で見つかりました" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "{filename}で{count}個の問題が見つかりました" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "{filename}で{count}個の警告が見つかりました" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "{appid}用に空のメタデータを生成しました" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "Gitで「%s」のcheckoutを実行できませんでした" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "Git cleanを実行できませんでした" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "Git fetchを実行できませんでした" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Git remoteでset-headを実行できませんでした:\"%s\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Git resetを実行できませんでした" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "Git submodule deinitを実行できませんでした" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "Git submodule syncを実行できませんでした" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "Git submodule updateを実行できませんでした" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "SubversionのURLにはHTTPSを使用してください!" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "gitのミラーが大きくなった場合に、アーカイブの削除を許可" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "このアップロードを行えなかった場合は、手動で{url}にアップロードしてみてください" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "「{metapath}」の「{field}」のメタデータは非推奨となったため、無視します。" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "2024より長いFUNDING.ymlは無視します:%s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "manifestの正しくない要素を無視します:%s" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "{oldfile}は非推奨です。{newfile}を使用してください" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "メタデータのないパッケージは無視します: " #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "{apkfilename}の古いキャッシュデータを無視" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "MD5などの無効に設定されているアルゴリズムで署名されているAPKを含める" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "ミラーのPGP署名の .ascファイルを含める" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "ミラーのビルド時のログを含める" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "ミラーのソースコードのtarballを含める" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "%s@%sのメタデータを含める" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "{path}のメタデータを含める" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "submoduleを初期化しています" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "署名済で利用できる全てのアプリケーションをインストール" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "ビルドしたパッケージを端末にインストール" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "%sをインストールしています…" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "{dev}に「{apkfilename}」をインストールしています…" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "リポジトリのHTTPサーバーと通信" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "不正なAPKです" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "不正なAutoUpdateModeです:{mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "不正なUpdateCheckModeです:{mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "不正なVercodeOperationです:{field}" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "不正なVercodeOperationです:{invalid_ops}" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "不正なアプリケーションIDです {appid}" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "不正な箇条書きリストです" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "公開済のファイルの不正な名前です:%s" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "不正なndkです:ビルドのエントリー:「{ndk}」" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "非HTTPSへの不正なリダイレクトです:{before} → {after} " #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "不正なscrlibのメタデータです:「{file}」はありません" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "不正なscrlibのメタデータです:「{file}」をパースできませんでした" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "不正なscrlibのメタデータです:「{file}」の「{key}」は不明な鍵です" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "JAR署名を検証できませんでした:{path}" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "JAR署名を検証しました:{path}" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "JavaのJARファイル" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "JavaのJDKが見つかりませんでした!標準的な場所にインストールするかjava_pathsを指定してください!" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "Javaのコンパイル済のクラス" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "Javaのjarsignerが見つかりませんでした!標準的な場所にインストールするかjava_pathsを指定してください!" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "HTMLのsrc属性におけるJavaScript" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "「{apkfilename}」の失敗したビルドを保存" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "署名鍵用のキーストア:\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "既知のデバッグ鍵がAllowedAPKSigningKeysで使われています: " #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "最後に使用されたcommit「{commit}」はタグのようですが、UpdateCheckModeは「{ucm}」です" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "Liberapayによる寄付の方法は、Liberapay: フィールドに属します" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "再フォーマットされるファイルのリスト(テスト)" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "ロケールはf-droid.orgのURLに含まれます" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "例外発生時にビルドを停止" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "リポジトリのミラーの形式が不正です。" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "serverwebrootの行の形式が不正です:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "ZIPファイルの最大の再帰階層に到達しました:%s" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "完全なリポジトリとアーカイブ、全てのファイルの種類のミラーリング。" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "出力用ディレクトリーがありません" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "好ましくない機能の宣言を翻訳済のファイルに移動します:" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "「repo_pubkey」と「keystorepass」のいずれもconfig.ymlで設定されていません" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "パッケージのAPKがありません:%s" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "AndroidのSDKが見つかりません!" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "接続している端末が見つかりません" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "`adb install`を実行するデバイスが見つかりません!デバイスを接続してください。" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "URLにフィンガープリントがありません。" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "利用できるgitのサブモジュールがありません" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "gradleプロジェクトが見つかりませんでした。--subdirを指定しますか?" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "情報が見つかりません。" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "一致するタグが見つかりません" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "SDKの最小バージョンが{0}で見つかりません。既定 (3) を使用します。" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "アプリが自由ソフトウェアであることを指定する必要はありません" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "アプリがAndroid向けであることを指定する必要はありません" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "オプションが設定されていません!config.ymlを編集して、以下の少なくとも1つを設定してください。" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "パッケージが指定されていません" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "利用できる%sの署名済のAPKがありません" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "署名済の出力用ディレクトリーがありません - 何も実行しません" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "{path}で署名用の証明書が見つかりません" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "そのようなパッケージはありません:%s" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "アプリ {appid} にそのようなバージョンコード {versionCode} はありません" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "タグが見つかりません" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "署名されていないディレクトリーがありません - 何も実行しません" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "バージョンの情報が見つかりませんでした。" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "正しいサイズの定義ではありません:「{}」" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "何も実行しません" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "{appid}について実行することは何もありません。" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "これらをconfig.ymlに設定してください:" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "OBBのファイルはどのAPKよりも新しいバージョンコード({integer})を備えています:" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "OBBのファイル名は「main.」または「patch.」から始まる必要があります:" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "OBBのパッケージ名はサポートしているAPKと一致しません:" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "オフラインのマシンです。`fdroid deploy` を実行するまでgitのミラーの生成はスキップします" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "「github_releases」の設定項目の1つに「packageNames」の値が設定されていません。スキップします…" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "「github_releases」の設定項目の1つに「projectUrl」の値が設定されていません。スキップします…" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "「github_releases」の設定項目の1つに「token」の値が設定されていません。スキップします…" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "画像にはPNGとJPEGのみをサポートします。これが見つかりました:{path}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "自動アップデートのアプリのみを処理" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "OpenCollectiveの寄付の方法はOpenCollective: フィールドに属します" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "APKに従った名前のファイルでJSONのレポートを出力。" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "標準出力にJSONを出力。" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "JSONを出力" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "プロジェクト全体のライセンス。" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "{apkfilename}の空のバージョン名をメタデータで指定:{version}" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "パッケージ「{appid}」は既に存在します" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "「{path}」のmanifestをパースしています" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "パスワードはユーザー名が必要です" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "主なAndroidのプロジェクトのサブディレクトリーへのパス(ルートにない場合)。" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "AndroidのSDKへのパス(ANDROID_HOMEで設定されている場合があります)" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "ログとして使用するgitのリポジトリへのパス" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "リポジトリの署名鍵のキーストアへのパス" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "簡単にコピー、ペーストできるように秘密の変数をターミナルに出力" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "ロケール({country_code})に基づいてプライバシー モードが有効になりました。" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "ZIPファイルに問題が見つかりました:%s、エラー %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "「{path}」のxmlに問題が見つかりました" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "自動更新を実行" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "{apkfilename}を処理" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "{appid}を処理" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "インデックスファイルに可読性があるXMLまたはJSONを出力" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "プロジェクトのインポート元のURL。" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "句読点は使うべきではありません" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "ログをこのgit remoteリポジトリに送信" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "バイナリーの透明性のログを{url}に送信" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "遠隔サーバーに送信できませんでした!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "{url}に送信" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "新しいリポジトリをすぐに開始" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "メタデータの全てのファイルを読み込んで終了" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "「{config_file}」を読み込みます" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "packageName/versionCode/versionNameを読み込めませんでした。不正なAPKです:「{apkfilename}」" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "packageName/versionCode/versionNameを読み込めませんでした。不正なAPKです:「{apkfilename}」" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "{apkfilename}をキャッシュから読み込みます" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "スキャナーのルールと署名をネットワークから取得して更新し、キャッシュ" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "検証成功時にソースのTAR・APKを削除する。" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "指定されたファイルを削除" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "{path} を削除" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "package.name_123.apkに合致しないAPKファイルの名前を変更" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "指定したdebug.keystoreで{apkfilename}を再度署名" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "最大のピクセルの大きさを超えている全てのアイコンのサイズを変更して終了" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "警告とエラーのみを出力" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "失敗したダウンロードを再試行しています: %s" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "メタデータの全てのファイルを書き換える" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "「{appid}」を書き換えています" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "commitされていない変更があるgitのリポジトリで実行" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "{cibase}で-debug.apkを検索し、repo_basedir {repo_basedir} をスキップ" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "rewritemetaを実行してフォーマットを修正" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "MD5のチェックを無効にして最初のチェックを実行しています" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "{path}でwgetを実行しています" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "{url}のSHA-256がエントリーと合致しません!" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "既知の不自由なクラスが無いかどうか、残っているAPKをスキャンして確認。" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "パッケージのソースコードを読み込む" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "スキャナーは{apk}に{count}個の問題を発見しました" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "スキャナーは{appid}に{count}個の問題を発見しました:" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "スキャナーは{appid}:{versionCode}に{count}個の問題を発見しました:" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "スキャナーは{}個の問題を発見しました" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "追加の署名ブロックがないかAPKをスキャンしています。" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "既知の不自由なクラスが無いかどうか、APKをdexdumpでスキャンして確認。" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "NDK {release}({version})を設定" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "以下を実行して時計の時間を合わせてください。" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "アーカイブを開始するまでのリポジトリ内でのリリースの最大数を設定" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "開くファイルの制限を{integer}に設定" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "ナイトリービルドのリポジトリ向けにアプリのビルドを設定" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "開くファイルの制限を設定できませんでした: " #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "このビルドがタイムアウトになるまでの時間を{0}秒に設定しています" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "パッケージに署名してリポジトリに設置" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "「update --nosign」で作成したインデックスに署名" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "バイナリーやその他の問題が無いかどうかに関するソースコードのスキャンをスキップ" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "正しくない署名がある「{apkfilename}」をスキップします!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "リポジトリが大きすぎるため(>%.2fGB)GitLab Pagesのミラーリングをスキップします!" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "{appid}のインデックスの作成をスキップします" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "正しくない署名がある{apkfilename}をスキップします!" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "{appid}をスキップ:無効に設定されています" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "リポジトリを同期するローカルのフォルダーを指定" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "rsyncを行う際にSSHに指定するIDファイルを指定" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "使用するデバッグ用キーストアファイルを指定。" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "通常より多くの情報を出力" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "{apkfilename}から不明な署名を削除します" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "要約文「%s」 がアプリの名前と同一です" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "要約の長さは{length}ですが、最大の文字数は{limit}です" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "システムの時刻が{path}の日付よりも古いです!" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "現在、タグのアップデートはgit、hg、bzr、git-svnのリポジトリでのみ機能します" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "タグのアップデートモードがgit-svnで使用されましたが、リポジトリはタグを使用するように設定されていませんでした" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "テストモード - 既に出力が存在する場合でも、一時ディレクトリーに出力し、常にビルドを行います。" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "OBBのバージョンコードは「{name}」の後に設定してください:" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "ログを記録するリポジトリのベースとなるURL(既定:https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "ミラーを書き込むディレクトリー" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "リポジトリに含めるファイル(パスまたはglob)" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "リポジトリのフィンガープリントが合致しません。" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "Local_copy_dir \"{path}\" のルートディレクトリーは存在しません!" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "キーエイリアスが衝突しています - 公開作業は中止しました" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "これらは、メインリポジトリからアーカイブされたアプリです。" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "このコマンドで f-droid.org のミラーリングを行わないでください!完全なコピーには600GB以上が必要となります。" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "これは、F-Droidで使用できるアプリのリポジトリです。 このリポジトリのアプリケーションは、元のアプリケーション開発者によってビルドされた公式のバイナリーか、またはf-droid.orgの管理者によってソースコードからhttps://gitlab.com/fdroidのツールを使ってビルドされたバイナリーのどちらかです。" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "このリポジトリにはローカルのメタデータがあります:%s" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" "設定を完了するには、APKを「%s」に追加してから\n" "「fdroid update -c; fdroid update」を実行してください。その際には、\n" "「config.yml」を編集して、URL、リポジトリの名前などを設定してください。\n" "また、署名用の鍵も併せて設定することを推奨します(一時的な署名鍵が自動的に生成されている可能性があります)。\n" "\n" "詳細については、https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "または https://f-droid.org/docs/Signing_Process をご覧ください。" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "awsbucketwを使うには、awssecretkeyとawsaccesskeyidをconfig.ymlに設定する必要があります!" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "rcloneを使用するには、rclone_configとawsbucketをconfig.ymlに設定する必要があります!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "URLは https:// または http:// から始まる必要があります" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "URL短縮ソフトウェアは使用しないでください" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "説明文にあるURL {url}:{error}" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "予期されていないライセンスタグ「{}」です!https://spdx.org/license-list から、FSFまたはOSIにより認証されたタグのみを使用してください" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "予期しないライセンスタグ「{}」です!設定ファイルで設定されたライセンスタグのみを使用してください" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "{configname}の不明なエントリー {key} です" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "不明な例外が発生しました!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "ビルド「{versionName}」の不明なファイル「{filename}」" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "メタデータのフォーマットが不明です:%s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "メタデータのフォーマットが不明です:{path}(*.ymlを使ってください)" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "aaptのバージョンが不明です。問題が生じる可能性があります: " #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "不要なスペースが先頭にあります" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "不要なスペースが末尾にあります" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "「{path}」に未認識のアプリのフィールド「{fieldname}」があります" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "認識されないビルド用のオプション「{build_flag}」が「{path}」にあります" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "リポジトリの画像にサポートされていないファイルの種類「{extension}」が使用されています" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "サポートされていない画像ファイルが見つかりました:{path}" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "使われていないextlibが%sにあります" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "使われていないファイルが%sにあります" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "使われていないscandeleteのパス:%s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "使われていないscanignoreのパス:%s" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "新しいパッケージに関するリポジトリの情報を更新" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "URLに関するバイナリーの透明性のログを更新" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckDataのURLが正しくありません:{url}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "UpdateCheckDataは整数(\\d または [0-9])のバージョンコードに合致する必要があります:{codeex}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "UpdateCheckDataにはHTTPSのURLを指定してください:{url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "UpdateCheckDataは正しいURLではありません:{url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckModeが設定されていますがcheckupdatesがまだ実行されていないようです。" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckNameが既知のアプリケーションIDに設定されています。これは削除できます" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "{apkfilename}をandroidobservatory.orgにアップロードしています" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "{apkfilename}をvirustotalにアップロードしています" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "既定のブランチでファイルを指定する際に /master または /main の代わりに /HEADを使用" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "`fdroid update -c`で作成。" #: ../fdroidserver/build.py msgid "Use build server" msgstr "ビルド用サーバーを使用" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "現在の時間の代わりにAPKの時間を、新しく追加されたAPKに使用" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "「{path}」をs3cmdの設定に使用。" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "「{path}」を遠隔ストレージとの同期に使用。" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "APK署名バージョン2を使用" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "APK署名バージョン3を使用" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "JAR署名を使用" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "JavaのjarsignerでAPKを検証することは推奨されません!apksignerを使ってください" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "{path}の内容の代わりに空の辞書を使用します!" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "\"{path}\"にある既存のキーストアを使用" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "Rcloneを使って {url} と同期" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "s3cmdを使って {url} と同期" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "正しいコマンドは以下の通りです。" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "再ダウンロードする代わりにローカルにキャッシュ済のコピーで検証。" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "ダウンロードしたパッケージの一貫性を検証" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "インデックスの署名を検証:" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "apksignerを使用してパッケージ{path}を検証しています。" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "VirusTotalのAPI鍵は32メガバイトより大きいファイルをアップロードできません。{url}から{path}をアップロードしてください。" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "潜在的なメタデータのエラーに関して警告" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "WebAssemblyバイナリ ファイル" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "署名済のインデックスに関して設定されている場合、この段階では署名されていないインデックスのみを作成します" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "リポジトリ全体をチェックする際、yamllintは既定で無効に設定されます。このオプションを使うと、yamllintを強制的に実行します。" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "署名または検証ができなかった場合、エラーコードを出力して終了します。" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "adb経由でF-Droid.apkをダウンロードしてインストールしますか?(YES/no)" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "f-droid.orgからアプリをダウンロードしますか?(YES/no)" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "鍵の生成時に使用する X.509 'Distinguished Name'" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "以下のようにANDROID_HOMEでSDKへのパスを設定できます。" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "ZIPファイルアーカイブ" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "adbは、{serial}が「{status}」であると報告しています!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "IdentityFileを{path}に追加" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "{name}: {path} に追加" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "オプションが曖昧です。%(option)sは%(matches)sに一致しませんでした" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "ビルドツール群のapkサイナー;{version}は、無効なv3署名がなされたAPKを無視します。" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "apksignerが見つかりません!最近のAPKに署名を行ったり検証したりすることはできません" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "apksignerが見つかりません。署名を行うには必要です!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "実行用のファイルのアプリケーションID" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "APPID[:VERCODE] 形式でversionCodeを指定した(オプション)アプリケーションID" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "archive_url は /archive で終了する必要があります" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "モード %r の引数 \"-\"" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "引数 %(argument_name)s:%(message)s" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "SSH接続でデプロイ用の鍵をテストします。" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "srclibの規定をパースできません(文字列ではありません):'{}'" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "「%(filename)s」を開けません:%(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "HTTPSでないURLは開けません:'{};" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "必要なsrclibsが見つかりません:「{path}」" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "サブパーサーの複数の引数を指定することはできません" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "アクションをマージできません - 2つのグループが%rと名付けられています" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "更新を公開できません。デプロイ用の鍵を設定しましたか?" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "{url}のcloneを行います" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "プラグインモジュールのコマンド:" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "オプションの文字列が矛盾しています:%s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "矛盾するサブパーサーのエイリアス:%s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "サブパーサーが矛盾しています:%s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "「{path}」をパースできませんでした" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "srclibの規定をパースできませんでした(名前が指定されていません):'{}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "srclibの規定をパースできませんでした(refが指定されていません):'{}'" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "{path}を作成しました" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "現在のバージョンの方が新しいです:以前のvercode={old}、新しいvercode={new}" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "削除しています:repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "ロックの存在しない依存ファイル" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "{path}の処理ログを{dest}に設定しました" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "%rなどのオプションにはdest= が必要です" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "'{}'をダウンロードしています" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "スキャナーの署名を'{}'からダウンロードできませんでした" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "実行可能なバイナリー、おそらくコードです" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "%s個の引数が必要" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "1つ以上の引数が必要です" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "多くても1つの引数が必要です" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "1つの引数が必要です" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "fdroid [] [-h|--help|--version|]" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "ウェブから署名の最新のバージョンを取得" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "メタデータのエラー(既定)を警告として扱うよう強制するか、無視するよう強制。" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "git svn clone を実行できませんでした" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "gzipファイルアーカイブ" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "明示的な引数 %r を無視しました" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1には署名が必要です。`fdroid signindex`で署名を作成してください!" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2には署名が必要です。`fdroid signindex`で署名を作成してください!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "%(type)sの値が不正です:%(value)r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "不正な選択です:%(value)r(%(choices)sから選択してください)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "conflict_resolutionの値が不正です:%r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "%(option)rは不正なオプションの文字列です:%(prefix_chars)rで始まる必要があります" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "ipfs_cid が見つかりません。CIDv1の生成をスキップします" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "直近のビルドの仕様書の方が新しいです:以前のvercode={old}、新しいvercode={new}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "local_copy_dir は「froid」で終わっていません、もしかして: 「{path}」" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "local_copy_dir には絶対パスを指定してください!" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "local_copy_dir にはファイルではなくディレクトリーを指定してください!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "ミラー「%s」は「fdroid」で終わっていません!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "config.ymlと{path}で2回ミラーが設定されています!" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "相互に排他的な引数はオプションとしてください" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "次の{name}キャッシュの更新まで{time}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "{appid}に「アイコン」がありません" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "APKが指定されていません" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "バージョンの情報が見つかりません" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "引数 %s は許可されていません" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "引数 %s の1つが必要です" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "文字列、リスト、タプルのみが許可" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "オプション" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "既存の{path}を上書きします" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "位置に関する引数" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "{path}の処理ログを{dest}に設定できませんでした!" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "参照バイナリーに署名がありません" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "安全でないHTTP接続によるダウンロードを拒否(HTTPSを使うか--no-https-checkを指定してください):{apkfilename}" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "repo_icon \"repo/icons/%s\"が存在しません。プレースホルダーを生成します。" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "repo_urlは/repoで終わる必要があります" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "rsyncが無いか壊れています:{error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmdは{path}のインデックスを{url}に同期して削除" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "s3cmdは{path}から{url}へインデックスを同期し、消去されたインデックスを削除します" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "スキャナーのキャッシュの形式が正しくありません!「{clear}」で消去してください" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "serverwebroot: パスが「fdroid」で終わっていません。もしかして:" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "共有ライブラリー" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "このヘルプメッセージを表示して終了" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "サイン済みのAPK。ファイルのパスかHTTPSのURL。" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "完全なビルドログの設置をスキップ:ログの中身はありません" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "完全なビルドログの設置をスキップ:設定で有効にされていません" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "ソースコードのtarballをスキップします:{path}" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "srclibsに名前と「@」がありません" #: ../fdroidserver/scanner.py msgid "static library" msgstr "静的ライブラリー" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "指定された参照バイナリーには許可された署名者 {signer} がいます" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "次の引数が必要です:%s" #: ../fdroidserver/install.py msgid "true" msgstr "true" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "予期しないオプションの文字列です:%s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "不明なパーサー %(parser_name)r(選択肢:%(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "認識されない引数です:%s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "「{config_file}」のパーミッションが安全ではありません(0600に設定すべきです)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "使い方: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "Apache libcloudを使って{url}と同期" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.comはレート制限を行っています。再試行を待機しています…" #: ../fdroidserver/install.py msgid "yes" msgstr "yes" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "{0}個のアプリ、{1}個の鍵のエイリアス" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename}({appid})にメタデータがありません!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "{apkfilename}のAndroidManifest.xmlの日付が正しくありません: " #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid}には名前が設定されていません!アプリケーションIDを代わりに使用します。" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "{path}の{appid}は正しいAndroidのアプリケーションIDではありません!" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "{path}の{appid}は正しいJavaパッケージの名前ではありません!" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "{appid}にはAPKとファイルの両方があります:{files}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "{appid}には{name}がありません" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "{appid}:ビルド「{versionName}」のextlib {path}は不明です" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "{appid}:ビルドが指定されていません。現在のソースコードに基づき実行します" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "{appid}:{field}には「{fieldtype}」ではなく「{type}」を指定してください!" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "{appid}:{field}には「{fieldtype}」ではなく「{type}」を指定してください!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "{build_flag}には整数を指定してください。{value}が見つかりました" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "{build_flag}にはリストまたは文字列を指定してください。指定された値:{value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "{file}は空か壊れています!" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name}「{section}/icons/{path}」がありません!「config.yml」を確認してください。" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "{path}は既に存在します。インポートの結果は無視します!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "{path}がありません!以下を実行して作成してください。" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "{path}のファイル署名「{pattern}」は正しくありません。Janusの脆弱性による可能性があります!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path}はvirustotalにより{count}回マークされました。" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "{path}のフィンガープリント({fingerprint})が間違っています!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "{path}は{datatype}です。「キー:値」の辞書ではありません!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "{path}は標準の設定ファイルではありません!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "{path}は{datatype}です。リストではありません!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "{path}は{datatype}です。{expected_type}ではありません!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "{path}の大きさは0です!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "{path}は200MB以上です。手動で{url}にアップロードしてください" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "{path}:「{code}」は有効なISO_3166-1 alpha-2の国コードではありません!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "{path}:{error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "{url}が「fdroid」で終わっていません。URLパスを確認してください!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "{url}は「http」で始まっていません!" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "{}個のビルドを行えませんでした" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "{}個のビルドを行いました" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/kab/0000755000175000017500000000000014770510164014720 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/kab/LC_MESSAGES/0000755000175000017500000000000014770510164016505 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/kab/LC_MESSAGES/fdroidserver.po0000644000175000017500000020044214770507747021562 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # Hans-Christoph Steiner , 2020, 2021. # Kahina Messaoudi , 2020. # R_SACI , 2021. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2021-01-15 13:25+0000\n" "Last-Translator: R_SACI \n" "Language-Team: Kabyle \n" "Language: kab\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.5-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" yebded yakan ɣef {dev}." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" mačči d aseɣwen URL ameɣtu!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: tuccḍa: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d n wuguren ttwafen" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' ulac-it di config.yml!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "'keystore' ulac-it di config.yml!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "'keystorepass' ulac-it di config.yml!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' ulac-it deg config.yml!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required' d taɣiret ur iṣeḥḥan ara i usideg" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "'sdk_path' ur yettwasbadu ara 'config.yml'!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' d aqbuṛ, fdroid yesra build-tools-{version} neɣ amaynut!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "'{path}' ur izmir ara ad yettwaselkem!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...anadi n ileqman ur yeddi ara i {appid} : {error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() ur yettwasbadu ara" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Tabdart n taggayin i yebḍan s ticcert." #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "Taladna '%s' ur tettwassen ara.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "Azen ibeddilen" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "D awezɣi tifin n '{command}' deg unagraw-ik.im" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Ur izmir ara ad d-yaf isem n lqem aneggaru" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "Ur yezmir ara ad d-yeldi afaylu APK {path} i tesleḍt: " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" #: ../fdroidserver/checkupdates.py #, fuzzy msgid "Couldn't find any version information" msgstr "Ur izmir ara ad d-yaf isem n lqem aneggaru" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "Anagbar amaynut yettwarnan \"{name}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "Izmal-nniḍen sɣur APKs" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "Azmal n usnas ur yeddi ara" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "Immed" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Ticraḍ HTML yettwagedlen" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "Asfaḍ Git yecceḍ" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" #: ../fdroidserver/common.py #, fuzzy msgid "Git submodule deinit failed" msgstr "Asfaḍ Git yecceḍ" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, fuzzy, python-brace-format msgid "Including metadata from {path}" msgstr "Amasal n yidfersefka d arussim: {path}" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "Asbeddi n %s…" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "Asulay n usnas d arameɣtu {appid}" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Tabdart s tneqqiḍin tarameɣtut" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "Afaylu Java JAR" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "Asesfer n {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "Adegger ɣer {url}" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "Sbadu talast n ufaylu yeldin ɣer {integer}" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "Tettwaf tsureft d tarussint!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "Afaylu ur nettwaseqdec ara deg %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "Aseqdec n tqeffalt n uḥraz \"{path}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Tiludna timeɣta d ti:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "Senqed timmad n yikemmusen yettwasadren" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "timerniwt n ufaylu n tmagit ɣer {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "timerniwt ɣer {name}: {path}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "fdroid [] [-h|--tallelt|--lqem|]" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "ulac \"tignit\" deg {appid}" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" msgstr "Tixtiṛiyin" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "tamkerḍit n tdaddanin" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "aqseqdac: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "{path} ur yelli ara! Rnu-t s uselkem:" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "{path} is not a standard config file!" msgstr "'sdk_path' ur yettwasbadu ara 'config.yml'!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "" msgstr[1] "" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/ko/0000755000175000017500000000000014770510164014574 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/ko/LC_MESSAGES/0000755000175000017500000000000014770510164016361 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/ko/LC_MESSAGES/fdroidserver.po0000644000175000017500000021652014770507747021442 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Hans-Christoph Steiner , 2020, 2021, 2022, 2024. # Myeongjin Lee , 2021. # Cxnfl1ct , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.8-135-g16dd6d28\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2024-09-06 14:57+0000\n" "Last-Translator: Cxnfl1ct \n" "Language-Team: Korean \n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 5.8-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "배포 키로 사용될 SSH 공개 키:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "{path}는 DEBUG_KEYSTORE 비밀 변수를 위해 인코딩됩니다:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\"에 일치하는 메타데이터 파일이 없습니다!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, fuzzy, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "Android SDK 경로 '{path}'는 존재하지 않습니다!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\"는 이미 {dev}에 설치되어 있습니다." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "\"{path}\"는 최근 {name} ({version})를 포함합니다" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "\"{path}\"는 존재하지만 s3cmd는 설치되어 있지 않습니다!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\"은 올바른 URL이 아닙니다!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: 오류: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "문제 %d개를 찾음" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%r는 호출할 수 없습니다" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s는 빌드 필드 값으로 허용되지 않습니다" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass'를 config.yml에서 찾을 수 없습니다!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "'keystore'이 없고 'smartcardoptions'가 비어 있습니다!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "'keystore'를 config.yml에서 찾을 수 없습니다!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "'keystorepass'를 config.yml에서 찾을 수 없습니다!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias'를 config.yml에서 찾을 수 없습니다!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required'는 고정적을 위한 잘못된 인수입니다" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "'sdk_path'가 config.yml에서 설정되어 있지 않습니다!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}'는 너무 오래되었습니다, fdroid는 build-tools-{version} 이후가 필요합니다!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "'{path}'를 실행하는 데 실패했습니다!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}'는 {appid}에서 올바른 {field}가 아닙니다. 정규식 패턴: {pattern}" #: ../fdroidserver/metadata.py #, fuzzy, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}'에서 올바른 {field}가 아닙니다. 정규식 패턴: {pattern}" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...{appid}를 위한 checkupdate가 실패됨 : {error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__()이 정의되지 않음" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "/이슈가 없습니다" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "URL은 인수로서 필요합니다!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "저장소의 패키지를 위해 GnuPG를 사용하여 PGP 서명을 추가합니다" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "서명되지 않은 저장소에 저장소 서명 키를 추가합니다" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "{name}를 위해서만 새 저장소를 추가하기" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "키스토어에서 저장소 서명 키의 별칭" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "또한 전체 보존 절을 미러합니다" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "또한 rewritemeta -l와 같이, 포맷팅 이슈에 대해 경고합니다" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "{path}에서 Android SDK를 찾을 수 없습니다!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "Android SDK 경로 '{path}'는 존재하지 않습니다!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "Android SDK 경로 '{path}'는 디렉터리가 아닙니다!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "앱은 '{repo}'에 있지만 {url}로의 연결이 있습니다" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr ".git 추가가 필요하지 않습니다" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "올바르지 않은 서명으로 {apkfilename}를 보존 중입니다!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "브랜치 '{branch}'는 빌드 '{versionName}'에서 커밋으로 사용됩니다" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "브랜치 '{branch}'는 srclib '{srclib}'에서 커밋으로 사용됩니다" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "소스로부터 패키지를 빌드합니다" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "사용 가능한 모든 애플리케이션을 빌드합니다" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "카테고리 '%s'는 올바르지 않습니다" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "카테고리가 설정되어 있지 않습니다" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "애플리케이션으로의 업데이트를 확인합니다" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "명령 '%s'은 인식되지 않습니다.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "번경사항 커밋" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "기록 디렉터리 만들기" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "출력 디렉터리 만들기" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "임시 디렉터리 만들기" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "저장소에서 메타데이터 없이 APK 및/또는 OBB를 삭제합니다" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "알 수 없는 파일 삭제하기: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "마침" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "앱 \"{name}\"를 위한 메타데이터가 없이 \"{path}\" 그래픽을 찾았습니다!" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" #: ../fdroidserver/common.py #, fuzzy msgid "Git submodule deinit failed" msgstr "git svn 복제에 실패됨" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "하위 모듈을 초기 설정 중" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "사용 가능한 모든 서명된 애플리케이션 설치" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "기기에 내장된 패키지 설치" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "%s 설치 중…" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "{dev}에서 '{apkfilename}' 설치 중..." #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "저장소 HTTP 서버와의 상호 작용" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "올바르지 않은 APK" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "잘못된 Vercode연산: {field}" #: ../fdroidserver/lint.py #, fuzzy, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "잘못된 VercodeOperation연산: {invalid_ops}" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "잘못된 글머리 기호 목록" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "게시된 파일을 위한 잘못된 이름: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "HTTPS가 아닌 곳으로의 잘못된 리다이렉트: {before} -> {after} " #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, fuzzy, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "삭제 중: repo/{apkfilename}" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "서명 키를 위한 키저장소:\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py #, fuzzy msgid "No version information could be found." msgstr "버전 정보를 찾지 못했습니다" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "PNG와 JPEG만 그래픽을 위해 지원됩니다, 찾았습니다: {path}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "사람이 읽을 수 있는 색인 파일을 위한 XML/JSON을 생산합니다" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "새 저장소를 빠르게 시작합니다" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "모든 메타데이터 파일을 읽고 종료합니다" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "package.name_123.apk와 일치하지 않는 APK 파일의 이름을 바꿉니다" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "모든 메타데이터 파일을 다시 씁니다" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "패키지의 소스 코드를 스캔합니다" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "저장소에서 패키지를 서명하고 배치합니다" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "update --nosign을 사용하여 만들어진 색인을 서명합니다" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "잘못된 라이선스 태그 \"{}\"! https://spdx.org/license-list 에서 FSF 또는 OSI에서 승인된 태그만을 사용하세요" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "알 수 없는 예외가 찾아졌습니다!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "빌드 '{versionName}'에서 알 수 없는 파일 '{filename}'" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "알 수 없는 메타데이터 형식: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "알 수 없는 메타데이터 형식: {path} (사용: *.yml)" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "저장소 그래픽을 위한 파일 형식 \"{extension}\"가 지원되지 않습니다" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "지원되지 않는 그래픽 파일을 찾았습니다: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "%s에서 사용되지 않은 extlib" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "%s에서 사용되지 않은 파일" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "사용되지 않은 스캔삭제 경로: %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "사용되지 않은 스캔삭제 경로: %s" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "새 패키지를 위한 저장소 정보를 업데이트합니다" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "URL을 위한 바이너리 투명성 기록을 업데이트합니다" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData에 올바르지 않은 URL이 있습니다: {url}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "UpdateCheckData는 HTTPS URL을 사용해야 합니다: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "UpdateCheckData는 올바른 URL이 아닙니다: {url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "그것을 만드려면 `fdroid update -c`를 사용하세요." #: ../fdroidserver/build.py msgid "Use build server" msgstr "빌드 서버를 사용합니다" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "새로 추가된 APK를 위해 현재 시간 대신에 APK에서의 날짜를 사용합니다" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "s3cmd를 구성하기 위해 \"{path}\" 사용." #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "s3cmd를 구성하기 위해 \"{path}\" 사용." #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Java의 jarsigner를 사용하여, APK를 검증하는 것은 권장되지 않습니다! apksigner를 사용하세요" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "기존 키스토어 \"{path}\"를 사용 중" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "다음과 동기화하는 데 s3cmd 사용: {url}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "다음과 동기화하는 데 s3cmd 사용: {url}" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "올바른 명령은:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "로컬에 캐시된 복사본을 다시 다운로드하는 대신에 검증합니다." #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "다운로드된 패키지의 무결성 확인" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "색인 서명을 검증 중:" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "가능한 메타데이터 오류에 대해 경고합니다" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "당신은 당신의 SDK에 경로를 설정하기 위해 ANDROID_HOME을 사용할 수 있습니다, 즉:" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "{path}에 IdentityFile을 추가 중" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "{name}에 추가 중: {path}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "모호한 옵션: %(option)s은 %(matches)s와 일치했을 수 있습니다" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "작업할 파일의 애플리케이션 ID" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "양식 APPID[:VERCODE]에서 선택적인 versionCode로 된 애플리케이션 ID" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "'%(filename)s'를 열 수 없습니다: %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "작동을 병합할 수 없습니다 - 두 그룹은 %r로 이름지어져 있습니다" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "{url}를 복제 중" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "충돌하는 옵션 문자열: %s" #: /usr/lib/python3.11/argparse.py #, fuzzy, python-format msgid "conflicting subparser alias: %s" msgstr "충돌하는 옵션 문자열: %s" #: /usr/lib/python3.11/argparse.py #, fuzzy, python-format msgid "conflicting subparser: %s" msgstr "충돌하는 옵션 문자열: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "{path}가 만들어짐" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "삭제 중: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "dest=는 %r과 같은 옵션을 위해 필요합니다" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "fdroid [<명령>] [-h|--help|--version|<인수>]" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "경고하거나 무시되는 강제 메타데이터 오류 (기본값)." #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "git svn 복제에 실패됨" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1은 서명이 있어야 합니다, 그것을 만드려면 `fdroid signindex`를 사용하세요!" #: ../fdroidserver/index.py #, fuzzy msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1은 서명이 있어야 합니다, 그것을 만드려면 `fdroid signindex`를 사용하세요!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "올바르지 않은 %(type)s 값: %(value)r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "올바르지 않은 선택: %(value)r (%(choices)s에서 선택하세요)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "올바르지 않은 conflict_resolution 값: %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "올바르지 않은 옵션 문자열 %(option)r: 문자 %(prefix_chars)r로 시작해야 합니다" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "local_copy_dir는 파일이 아니라, 디렉터리여야 합니다!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "미러 '%s'는 'fdroid'로 끝나지 않습니다!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "{appid}에 \"icon\"이 없습니다" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "제공된 APK가 없습니다" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "버전 정보를 찾지 못했습니다" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" msgstr "옵션" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "기존 {path}를 덮어쓰는 중" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "고정적 인수" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd 동기화는 {url}로 {path}를 색인하고 삭제합나다" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "s3cmd 동기화는 {url}로 {path}를 색인하고 삭제합나다" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "이 도움말 메시지를 보여주고 종료합니다" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "서명된 APK, 파일 경로 또는 HTTPS URL 중 하나." #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "소스 타르볼을 건너뛰는 중: {path}" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "srclibs 없는 이름 및/또는 @" #: ../fdroidserver/scanner.py msgid "static library" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "다음 인수들이 필요합니다: %s" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "예기치 않은 옵션 문자열: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "알 수 없는 파서 %(parser_name)r (선택: %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "인식할 수 없는 인수: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "'{config_file}'에 안전하지 않은 권한 (0600이어야 합니다)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "사용법: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "앱 {0}개, 키 별칭 {1}개" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid})에 메타데이터가 없습니다!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "{apkfilename}의 AndroidManifest.xml에 잘못된 날짜가 있습니다: " #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid}는 이름을 가지지 않습니다! 대신 애플리케이션 ID를 사용." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "{appid}는 없는 {name}입니다" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "{appid}: 빌드 '{versionName}'에서 알 수 없는 extlib {path}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\"는 존재하지 않습니다! \"config.yml\"을 확인하세요." #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "{path}는 존재하지 않습니다! 실행하여 그것을 만드세요:" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "{path} is not a standard config file!" msgstr "'sdk_path'가 config.yml에서 설정되어 있지 않습니다!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "{path}는 영 크기입니다!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "{url}는 \"fdroid\"로 끝나지 않습니다, URL 경로를 확인하세요!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "{url}는 \"http\"로 시작하지 않습니다!" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "{} 빌드 실패됨" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "{} 빌드 성공됨" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/lv/0000755000175000017500000000000014770510164014604 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/lv/LC_MESSAGES/0000755000175000017500000000000014770510164016371 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/lv/LC_MESSAGES/fdroidserver.po0000644000175000017500000020421014770507747021443 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # "Coool (github.com/Coool)" , 2024. # Edgars Andersons , 2024, 2025. msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.3a1\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2025-03-21 08:46+0000\n" "Last-Translator: Edgars Andersons \n" "Language-Team: Latvian \n" "Language: lv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100 <= 19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n" "X-Generator: Weblate 5.11-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "Atslēgu \"isPrimary\" nevajadzētu pievienot spoguļglabātavām." #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: kļūda: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "--merge-request darbojas tikai ar vienu appid." #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "Visām uzvednēm automātiski atbildēt ar \"Nē\"." #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "Visām uzvednēm automātiski atbildēt ar \"Jā\"." #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "Iekrāsot žurnāla izvadi" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Ar komatu atdalītu kategoriju saraksts." #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "Iesūtīt izmaiņas" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "Jāiesūta izmaiņas, jāaizgādā tās, tad jāizveido izmaiņu pieprasījums" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "Izveido tukšu {config_file}" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Izveido žurnālu mapi" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "Izveido jaunu S3 kŗājumu: {url}" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "Izveido izvades mapi" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "Izveido parakstītu indeksu ar šo atslēgu (SHA256):" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "Izveido pagaidu mapi" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "Izveido neparakstītu indeksu, lai sagatavotos parakstīšanai" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "CurrentVersionCode {cv} ir mazāks par vecāko būvējuma ierakstu {versionCode}" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "DEBUG_KEYSTORE nav iestatīts vai vērtība ir nepilnīga" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "Izdzēš arhīvu, glabātava ir pārāk liela ({size}; pieļaujamais izmērs ir {limit})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "Izdzēš git-mirror vēsturi, glabātava ir pārāk liela ({size}; pieļaujamais izmērs ir {limit})" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "Izdzēš nezināmu datni: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "Lejupielādēt F-Droid.apk no spoguļserveriem, kas tīklā nopludina mazāk" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Lejupielādēt pilnīgu mazu glabātavu spoguļojumu" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Glabātavas lejupielāde jau vienreiz neizdevās, tas atkārtoti netiks mēģināts." #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "{url} lejupielāde neizdevās. {error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "KĻŪDA: {key} nav derīga atslēga." #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "KĻŪDA: {key} vērtībai vajadzētu būt ar veidu \"{t}\"." #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "Vides mainīgais {{env: {var}}} nav iestatīts." #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "F-Droid.apk nevarēja lejupielādēt ne no viena zināmā avota." #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "Neņem vērā novecojušo {oldfile}, jāizmanto {newfile}." #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "Spoguļglabātavas konfigurācija {url} satur \"isPrimary\" key." #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "Netika atrasta neviena ierīce, kurā izpildīt `adb install`. Lūgums piespraust kādu." #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "URL nesatur pirkstu nospiedumu." #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "Nav pieejams neviens git apakšmodulis" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "Nevarēja atrast nevienu gradle projektu. Norādīt --subdir?" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "Informācija netika atrasta." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "Netika atrastas atbilstošas birkas" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "{0} netika atrasta zemākā pieļaujamā SDK versija, izmanto noklusējumu (3)." #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "Nav nepieciešams norādīt, ka lietotne ir brīva programmatūra" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "Nav nepieciešams norādīt, ka lietotne ir paredzēta Android" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "Nav iestatīta neviena iespēja. Jālabo config.yml, lai iestatītu vismaz vienu no šiem:" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "Nav norādīta neviena pakotne" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "%s nav pieejams neviens parakstīts APK" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "Pieņem tikai vienas atslēgas \"env\"" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "Apstrādāt tikai lietotnes ar automātiskajiem atjauninājumiem" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "Noņemt avota arhīvu un jebkādus APK, ja sekmīgi apliecināta." #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "Atkārtoti mēģina neizdevušos lejupielādi: %s" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "Pārraksta \"{appid}\"" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "Caurskata APK, vai ir papildu paraksta bloki." #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "Python pakotne \"qrcode\" nav uzstādīta (piemēram, `apt-get install python3-qrcode`)." #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "Pārbauda pakotni {path} ar apksigner." #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "VirusTotal API atslēga nevar augšupielādēt datnes, kas ir lielākas par 32 MB. Jāizmanto {url}, lai augšupielādētu {path}." #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "WebAssebly binārā datne" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "Vai lejupielādēt un uzstādīt F-Droid.apk ar adb? (YES/no)" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "Vai lejupielādēt lietotni(es) no f-drodi.org? (YES/no)" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "adb ziņo, ka {serial} ir \"{status}\"." #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "apksigner būvēšanas rīkos {version} izlaiž APK ar nederīgiem v3 parakstiem, neņem vērā." #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "apksigner nav atrasts. Nevar parakstīt vai apliecināt mūsdienīgus APK" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "apksigner nav atrasts, tas ir nepieciešams parakstīšanai." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" #: ../fdroidserver/install.py msgid "true" msgstr "patiess" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "nezināms parsētājs %(parser_name)r (izvēles: %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com ierobežo pieprasījumus, gaida, lai mēģinātu atkārtoti..." #: ../fdroidserver/install.py msgid "yes" msgstr "jā" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "{path1} ir tāds pats kā {path2}, viens no tiem ir jānoņem." #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "{path} ir nepareizs pirkstu nospiedums ({fingerprint})." #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "{path} nav \"atslēga: vērtība\" vārdnīca, bet gan {datatype}." #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "" msgstr[1] "" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/ml/0000755000175000017500000000000014770510164014573 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/ml/LC_MESSAGES/0000755000175000017500000000000014770510164016360 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/ml/LC_MESSAGES/fdroidserver.po0000644000175000017500000017745014770507747021451 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Coding Otaku , 2021. # Abhiram , 2022. # abe1242 , 2023. msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.6-70-g54bc858\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2023-06-23 14:52+0000\n" "Last-Translator: abe1242 \n" "Language-Team: Malayalam \n" "Language: ml\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.18.1\n" #: ../fdroidserver/nightly.py #, fuzzy msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "വിന്യാസ കീയായി ഉപയോഗിക്കുന്നതിനുള്ള SSH പബ്ലിക് കീ:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" ന് ചേരുന്ന മെറ്റാഡേറ്റ ഫയൽ ലഭ്യമല്ല!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d പ്രശ്നങ്ങൾ കണ്ടുപിടിച്ചു" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "config.yml ൽ 'keystore' കാണപ്പെടുന്നില്ല!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "config.yml ൽ 'keystorepass' കാണപ്പെടുന്നില്ല!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" "F-Droid നൊപ്പം ഉപയോഗിക്കേണ്ട അപ്ലിക്കേഷനുകളുടെ ഒരു ശേഖരമാണ്. ഇതിലെ അപ്ലിക്കേഷനുകൾ ഒന്നുകിൽ ആപ്ലിക്കേഷൻ നിർമാതാക്കൾ നിർമ്മിച്ച ഔദ്യോഗിക ബൈനറികളുടെ ശേഖരമോ,\n" "അല്ലെങ്കിൽ f-droid.org ന്റെ അഡ്മിൻ\n" "https://gitlab.com/fdroid- ലെ ഉപകരണങ്ങൾ ഉപയോഗിച്ച് ഉറവിടത്തിൽ നിന്ന് നിർമ്മിച്ച ബൈനറികളോ ആണ് ." #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "" msgstr[1] "" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/nb_NO/0000755000175000017500000000000014770510164015156 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/nb_NO/LC_MESSAGES/0000755000175000017500000000000014770510164016743 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/nb_NO/LC_MESSAGES/fdroidserver.po0000644000175000017500000025076714770507747022037 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # Allan Nordhøy , 2020, 2021, 2022. # Hans-Christoph Steiner , 2020, 2022. # mondstern , 2021. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.8-74-ga380b9f\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2022-09-06 14:30+0000\n" "Last-Translator: Hans-Christoph Steiner \n" "Language-Team: Norwegian Bokmål \n" "Language: nb_NO\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.14.1-dev\n" #: ../fdroidserver/nightly.py #, fuzzy msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "Offentlig SSH-nøkkel å bruke som utrullingsnøkkel:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "{path} kodet for hemmelig DEBUG_KEYSTORE-variabel:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" har ingen samsvarende metadatafil!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, fuzzy, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "Rotmappen for local_copy_dir \"{path}\" finnes ikke." #: ../fdroidserver/install.py #, fuzzy, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "'{apkfilename}' er allerede installert på {dev}." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "\"{path}\" inneholder nylig {name} ({version})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "\"{path}\" finnes, men s3cmd er ikke installert!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "\"{path}\" er ikke et støttet filformat. (bruk: metadata/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" er ikke en gyldig nettadresse." #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: feil: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d problemer funnet" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%r kan ikke kalles" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s er ikke et godtatt bygge-felt" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' ble ikke funnet i config.yml!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "«keystore» er NONE og «smartcardoptions» er tom!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "'keystore' ble ikke funnet i config.yml!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "'keystorepass' ble ikke funnet i config.yml!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' ble ikke funnet i config.yml!" #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "'required' is an invalid argument for positionals" msgstr "'required' er et ugyldig argument for posisjonsinfo" #: ../fdroidserver/common.py #, fuzzy msgid "'sdk_path' not set in config.yml!" msgstr "'sdk_path' ble ikke funnet i config.yml!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' er for gammel, fdroid krever build-tools-{version} eller nyere." #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "\"{path}\" klarte ikke å kjøre." #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "\"{value}\" er ikke et gyldig {field} i {appid}. Mønster for regulært uttrykk: {pattern}" #: ../fdroidserver/metadata.py #, fuzzy, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "\"{value}\" er ikke et gyldig {field} i {appid}. Mønster for regulært uttrykk: {pattern}" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, fuzzy, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "…oppdateringssjekk mislyktes for {appid}: {error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() udefinert" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "/issues mangler" #: ../fdroidserver/mirror.py #, fuzzy msgid "A URL is required as an argument!" msgstr "valg -%s krever et argument" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "Ingen signeringssertifikater funnet i {path}" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "Legg til PGP-signaturer for pakker i pakkebrønnen ved bruk av GnuPG" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "Legg til pakkebrønnssigneringsnøkkel for usignert repo" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "Legg til skjelettmetadatafiler for APK-er som ikke har dem" #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "Adding new repo for only {name}" msgstr "Legger til ny pakkebrønn kun for {name}" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "Alias for pakkebrønnssigneringsnøkkel i nøkkellageret" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "Tillater en annen revisjon (eller git-avgreining) å angis for igangsettende import" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "Speil også hele arkivdelen" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "Advar også om formateringsproblemer, som rewritemeta -l" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "AAR-bibliotek for Android" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "APK-fil for Android" #: ../fdroidserver/scanner.py #, fuzzy msgid "Android DEX code" msgstr "Fant ingen Android-SDK." #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "Fant ikke Android-SDK i {path}!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "Sti for Android-SDK \"{path}\" finnes ikke." #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "Android SDK-stien '{path}' er ikke ei mappe." #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "Fant ikke Android-SDK-verktøyet {cmd}!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "Program finnes i '{repo}', men har en lenke til {url}" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "Å legge til .git er ikke nødvendig" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "Pakker {apkfilename} med ugyldig signatur." #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "Grunnettadresse å speile, kan inkludere indekssigneringsnøkkelen ved bruk av spørreingsstrengen: ?fingerpring=" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "Forgrening '{branch}' brukt som innsendelse i bygg '{versionName}'" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "Forgrening '{branch}' brukt som innsendelse i srclib '{srclib}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "Brutt symbolsk lenke: {path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "Bygg en pakke fra kildekode" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "Bygg alle tilgjengelige versjoner" #: ../fdroidserver/lint.py #, fuzzy msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "Bygg generert av `fdroid import`- fjern linje for avskruing når det er klart" #: ../fdroidserver/checkupdates.py #, fuzzy msgid "Build metadata git repo has uncommited changes!" msgstr "Git-pakkebrønn for byggmetadata har uinnsendte endringer." #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "Bygg kun seneste versjon av hver pakke" #: ../fdroidserver/init.py #, fuzzy, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "Bygde pakkebrønn med base i \"%s\" med dette oppsettet:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "Kan ikke auto-uppgradere program som mangler «CurrentVersionCode»" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Kan ikke bygge som følge av {} feil under skanning" msgstr[1] "Kan ikke bygge som følge av {} feiler under skanning" #: ../fdroidserver/rewritemeta.py #, fuzzy, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Kan ikke lese \"{path}\"." #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "Kategorien '%s' er ikke gyldig" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "Kategoreier ikke satt" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Se etter programoppdateringer" #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "Sjekker arkivering for {appid} - APK-er:{integer}, keepversions:{keep}, archapks:{arch}" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Ren oppdatering, ikke bruk hurtiglager, behandle alle APK-er på ny" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Kommainndelt liste over kategorier." #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "Kommandoen \"%s\" gjenkjennes ikke.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "Send inn endringer" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Argumenter i konflikt: '--verbose' og '--quiet' kan ikke angis samtidig." #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "Fant ikke \"{command}\" på ditt system" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "Could not find latest version code" msgstr "Fant ikke seneste versjonskode" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "Could not find latest version name" msgstr "Fant ikke seneste versjonsnavn" #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "Could not find {path} to remove it" msgstr "Fant ikke \"{path}\" for fjerning derav" #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "Kunne ikke åpne APK {path} for analyse: " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Kunne ikke fortolke størrelse \"{size}\", feil type \"{type}\"" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "Couldn't find Application ID" msgstr "Fant ikke pakke-ID" #: ../fdroidserver/checkupdates.py #, fuzzy msgid "Couldn't find any version information" msgstr "Fant ikke seneste versjonsnavn" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "Fant ikke pakke-ID" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "Nekter feigt å overskrive eksisterende nøkkelsigneringsoppsett." #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "Opprettet ny beholder \"{name}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Oppretter \"{path}\" for oppsett av s3cmd." #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Creating empty {config_file}" msgstr "Leser '{config_file}'" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Oppretter loggingsmappe" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "Oppretter ny S3-spann: {url}" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "Oppretter utdatamappe" #: ../fdroidserver/index.py #, fuzzy msgid "Creating signed index with this key (SHA256):" msgstr "Oppretter signert indeks med denne nøkkelen (SHA-256):" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "Oppretter midlertidig mappe" #: ../fdroidserver/index.py #, fuzzy msgid "Creating unsigned index in preparation for signing" msgstr "Oppretter usignert indeks i påvente av signering" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "CurrentVersionCode {cv} er mindre enn eldste byggoppføring {versionCode}" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "DEBUG_KEYSTORE er ikke satt, eller så er verdien ufullstendig" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "Slett APK-er og/eller OBB-er uten metadata fra pakkebrønnen" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "Sletter arkiv, pakkebrønnen er for stor ({size} maks. {limit})" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "Sletter historikk for git-mirror, pakkebrønnen er for stor ({size} maks. {limit})" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "Sletter ukjent fil: {path}" #: ../fdroidserver/lint.py #, fuzzy, python-format msgid "Description '%s' is just the app's summary" msgstr "Beskrivelsen \"%s\" er bare programsammendraget" #: ../fdroidserver/lint.py #, fuzzy msgid "Description has a duplicate line" msgstr "Beskrivelsen har repetert linje" #: ../fdroidserver/lint.py #, fuzzy, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "Beskrivelse av lengde {length} overstiger {limit} tegngrensen" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "Ikke legg til «deaktivert:» blant genererte bygg" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "Ikke send de nye filene til pakkebrønnen" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "Ikke inkluder \"{path}\" i nettadresse." #: ../fdroidserver/init.py #, fuzzy msgid "Do not prompt for Android SDK path, just fail" msgstr "Ikke spør om Android-SDK-sti, bare spill fallitt" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "Ikke fjern de private nøklene generert fra nøkkellageret" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "Ikke opprett en kildetjæreball, nyttig når et bygg skal testes" #: ../fdroidserver/build.py #, fuzzy msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "Ikke gjenoppfrisk pakkebrønnen, nyttig under testing av et bygg uten å ha internettilkobling" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "Ikke bruk rsync-sjekksummer" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Last ned fullstendige speilinger av små pakkebrønner" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Nedlasting av pakkebrønn mislyktes én gang, prøver ikke igjen." #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "Nedlasting av {url} mislyktes. {error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "Dobbeltlenke i \"{field}\": {url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py #, fuzzy msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "Feil: «server»-underkommandoen har blitt fjernet. Bruk «depoloy»." #: ../fdroidserver/nightly.py #, fuzzy msgid "ERROR: unsupported CI type, patches welcome!" msgstr "Feil: Ustøttet CI-type, feilrettinger er velkomne." #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" "Skriv inn stien til Android SDK (%s) her:\n" "> " #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "Miljøvariabelen {var} fra {configname} er ikke satt!" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "Miljøvariabelen {var} fra {configname} er ikke satt!" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "Error while getting repo address" msgstr "Kunne ikke hente pakkebrønnsadresse" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "Hent ut signaturer fra APK-er" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "Failed copying {path}: {error}" msgstr "Klarte ikke å lese {path}: {error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "Klarte ikke å hente signaturer for '{apkfilename}': {error}" #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "Failed reading {path}: {error}" msgstr "Klarte ikke å lese {path}: {error}" #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "Klarte ikke å endre størrelse på {path}: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "Klarte ikke å opprette S3-spann: {url}" #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "Klarte ikke å hente APK-info, sletter {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "Klarte ikke å hente APK-info, hopper over {path}" #: ../fdroidserver/update.py #, fuzzy msgid "Failed to get APK signing key fingerprint" msgstr "Klarte ikke å hente APK-manifestinfo" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "Klarte ikke å installere '{apkfilename}' på {dev}: {error}" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "Klarte ikke å singere program" #: ../fdroidserver/build.py #, fuzzy, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "Hentet BuildServerID fra VM: {buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "Hentet signaturer for '{apkfilename}' → '{sigdir}'" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "En fil ble borte mens den ble behandlet: {path}" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "Fullført" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Forbudte HTML-tagger" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "Tvinger bygging av avskrudde programmer, og fortsetter uavhengig av skanningsproblemer. Tillates kun i testmodus." #: ../fdroidserver/build.py #, fuzzy, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "Tving gjennom byggstans etter {0} sek. tidsavbrudd." #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "Påtving skanning av avskrudde programmer og bygg." #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "Fant \"{path}\"-grafikk uten metadata for programmet \"{name}\"." #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "Fant feilaktig kronerullingsfil «{path}» for «{name}»:" #: ../fdroidserver/common.py #, fuzzy msgid "Found invalid appids in arguments" msgstr "Fant ugyldige App-ID-er i argumenter" #: ../fdroidserver/common.py #, fuzzy msgid "Found invalid versionCodes for some apps" msgstr "Noen programmer ble funnet å ha ugldige versionCodes" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "Fant flere signeringssertifikater i {path}." #: ../fdroidserver/common.py #, fuzzy msgid "Found multiple Signer Certificates!" msgstr "Fant flere signeringssertifikater for pakkebrønn." #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "Fant flere metadatafiler for {appid}" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "Fant flere signeringssertifikater for pakkebrønn." #: ../fdroidserver/index.py #, fuzzy msgid "Found no signing certificates for repository." msgstr "Fant ikke noe signeringssertifikat for pakkebrønn." #: ../fdroidserver/lint.py #, fuzzy, python-format msgid "Found non-file at %s" msgstr "Fant ikke-fil i %s" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "Fant {apkfilename} i {url}" #: ../fdroidserver/scanner.py #, fuzzy, python-brace-format msgid "Found {count} problems in {filename}" msgstr "Skanner fant {count} problemer i {appid}:" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "Genererte skjelettmetadata for {appid}." #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "Git-utsjekking av \"%s\" mislyktes" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "Git-tømming mislyktes" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "Git-innhenting mislyktes" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, fuzzy, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Git set-head annensteds hen mislyktes: «%s»" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Git-tilbakestilling mislyktes" #: ../fdroidserver/common.py #, fuzzy msgid "Git submodule deinit failed" msgstr "Git-oppdatering av undermodul mislyktes" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "Git-synkronisering av undermodul mislyktes" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "Git-oppdatering av undermodul mislyktes" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "HTTPS må brukes sammen med Subversjon-nettadresser." #: ../fdroidserver/deploy.py #, fuzzy msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "Hvis en Git-avspeiling blir for stor, tillat sletting av arkivet" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "Hvis opplasting mislykkes kan du prøve å laste opp manuelt til {url}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "Ser bort fra «{field}» i «{metapath}» fordi det er er foreldet." #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "Ser bort fra FUNDING.yml-oppføring som er lengre enn 2048: %s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "{oldfile} er avleggs, bruk {newfile}" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Ignorerte pakke uten metadata: " #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "Ignorerer brakk hurtiglagringsdata for {apkfilename}." #: ../fdroidserver/update.py #, fuzzy msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "Inkluder APK-er som er signert med svartelistede algoritmer, som MD5" #: ../fdroidserver/mirror.py #, fuzzy msgid "Include the PGP signature .asc files in the mirror" msgstr "Inkluder .asc-filer for PGP-signaturen i avspeilingen" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "Inkluder byggloggene i avspeilingen" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "Inkluder kildetjæreballene i avspeilingen" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "Igangsetter undermoduler" #: ../fdroidserver/install.py #, fuzzy msgid "Install all signed applications available" msgstr "Installer alle tilgjengelige signerte programmer" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "Installer bygde pakker på enheter" #: ../fdroidserver/install.py #, fuzzy, python-format msgid "Installing %s..." msgstr "Installerer %s…" #: ../fdroidserver/install.py #, fuzzy, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "Installerer '{apkfilename}' på {dev}…" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "Interagere med repo HTTP-serveren" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "Ugyldig APK" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "Ugyldig AutoUpdateMode: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "Ugyldig VercodeOperation: {field}" #: ../fdroidserver/lint.py #, fuzzy, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "Ugyldig VercodeOperation: {field}" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "Ugyldig program-ID {appid}" #: ../fdroidserver/lint.py #, fuzzy msgid "Invalid bulleted list" msgstr "Ugyldig punktvis liste" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "Ugyldig navn for publisert fil: %s" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "Ugyldig NDK: oppføring i bygg: «{ndk}»" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "Ugyldig videresending til ikke-HTTPS: {before} → {after} " #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "Ugyldig scrlib-metadata: «{file}» finnes ikke" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "Ugyldig srclib-metadata: kunne ikke tolke «{file}»" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "Ugyldig srclib-metadata: ukjent nøkkel «{key}» i «{file}»" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "Klarte ikke å bekrefte JAR-signatur: {path}" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "JAR signature verified: {path}" msgstr "JAR-signatur bekreftet: {path}" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "JAR-fil for Java" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py #, fuzzy msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "Fant ingen Java JDK. Installer på vanlig plass, eller sett java_paths." #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "Java-kompilert klasse" #: ../fdroidserver/signindex.py #, fuzzy msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "Fant ikke Java-jarsigner. Installer på vanlig plass, eller sett java_paths." #: ../fdroidserver/lint.py #, fuzzy msgid "Javascript in HTML src attributes" msgstr "JavaScript i HTML -src-attributter" #: ../fdroidserver/build.py #, fuzzy, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "Kunne ikke lese minSdkVersion: \"{apkfilename}\"" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "Nøkkellager for signeringsnøkkel:\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, fuzzy, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "Sist brukte innsendelse \"{commit}\" ser ut som en tagg, men oppdateringssjekkingsmodus er på \"{ucm}\"." #: ../fdroidserver/lint.py #, fuzzy msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "Flatter-donasjonsmetoder hører hjemme i FlattrID-flagget" #: ../fdroidserver/rewritemeta.py #, fuzzy msgid "List files that would be reformatted (dry run)" msgstr "Liste over filer som ville blitt formatert" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "Lokalitet inkludert i f-droid.org -nettadresse" #: ../fdroidserver/build.py #, fuzzy msgid "Make the build stop on exceptions" msgstr "Stopp bygging ved unntak" #: ../fdroidserver/index.py #, fuzzy msgid "Malformed repository mirrors." msgstr "Feilaktig innskrevne pakkebrønnsspeil." #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "Feilaktig innskrevet serverwebroot-linje:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Avspeil hele pakkebrønnen og arkivet, alle filtyper." #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "Manglende utdatamappe" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, fuzzy, python-format msgid "No APK for package: %s" msgstr "Ingen slik pakke: %s" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "Fant ingen Android-SDK." #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "Fant ingen tilknyttede enheter" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "Inget fingeravtrykk i nettadresse." #: ../fdroidserver/common.py #, fuzzy msgid "No git submodules available" msgstr "Ingen Git-undermoduler tilgjengelige" #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "No gradle project could be found. Specify --subdir?" msgstr "Fant inget Android- eller Kivy-prosjekt. Angi --subdir?" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "Ingen informasjon funnet." #: ../fdroidserver/checkupdates.py #, fuzzy msgid "No matching tags found" msgstr "Ingen informasjon funnet." #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "Inget behov for å spesifisere at programmet er fri programvare" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "Inget behov for å spesifisere at programmet er for Android" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "Inget valg satt. Rediger din config.yml og sett minst én av disse:" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "Ingen pakker angitt" #: ../fdroidserver/install.py #, fuzzy, python-format msgid "No signed APK available for %s" msgstr "Ingen signert APK tilgjengelig for %s" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "Ingen signert utdatamappe - ingenting å gjøre" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "Ingen signeringssertifikater funnet i {path}" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "Ingen slik pakke: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "Ingen slik versionCode {versionCode} for programmet {appid}" #: ../fdroidserver/checkupdates.py #, fuzzy msgid "No tags found" msgstr "Fant ingen tilknyttede enheter" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "Ingen usignert mappe - ingenting å gjøre" #: ../fdroidserver/__main__.py #, fuzzy msgid "No version information could be found." msgstr "ingen versjonsinfo funnet!" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "Ikke en gyldig størrelsesdefinisjon: «{}»" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "Ingenting å gjøre" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "Ingenting å gjøre for {appid}." #: ../fdroidserver/init.py #, fuzzy msgid "Now set these in config.yml:" msgstr "Nå må du sette disse i config.yml:" #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "OBB-fil har nyere versionCode({integer}) enn noen APK:" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "OBB-filnavn må starte med \"main.\" eller \"patch.\":" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "OBB-pakkenavn samsvarer ikke med noen støttet APK:" #: ../fdroidserver/deploy.py #, fuzzy msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Frakoblet maskin. Hopper over Git-avspeilingsgenerering til «fdroid deploy»" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Kun PNG og JPEG støttes for grafikk, fant: {path}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py #, fuzzy msgid "Only process apps with auto-updates" msgstr "Behandle kun programmer som har auto-oppdateringer" #: ../fdroidserver/lint.py #, fuzzy msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Flatter-donasjonsmetoder hører hjemme i FlattrID-flagget" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Skriv ut JSON-rapport til fil navngitt etter APK-en." #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "Send utdata-JSON til stdout." #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py #, fuzzy msgid "Outputting JSON" msgstr "Produserer JSON" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "Overnevnt lisens for prosjektet." #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "Overskriver blank versionName i {apkfilename} fra metadata: {version}." #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "Pakken «{appid}» finnes allerede" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "Tolker manifest i \"{path}\"." #: ../fdroidserver/common.py msgid "Password required with username" msgstr "Passord påkrevd med brukernavn" #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "Path to main Android project subdirectory, if not in root." msgstr "Sti til hovedundermappe for Androidprosjekt, hvis ikke i rot." #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "Sti til Android-SDK-en (noen ganger satt i ANDROID_HOME)" #: ../fdroidserver/btlog.py #, fuzzy msgid "Path to the git repo to use as the log" msgstr "Sti til Git-pakkebrønn å bruke som logg" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "Sti til nøkkellager for pakkebrønnssigneringsnøkkel" #: ../fdroidserver/nightly.py #, fuzzy msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Skriv den hemmelige variabelen til terminalen for enkel kopiering/innliming." #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Problem with xml at '{path}'" msgstr "Problem med XML i '{path}'" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "Behandle auto-oppdateringer" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "Behandler {apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "Behandler {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "Produser menneskelig lesbar XML/JSON for indeksfiler" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "Prosjektnettadresse å importere fra." #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "Tegnsetting bør unngås" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "Dytt loggen til denne Git-pakkebrønnen annensteds hen" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "Dytter binærgjennomsiktighetslogg til {url}." #: ../fdroidserver/deploy.py #, fuzzy msgid "Pushing to remote server failed!" msgstr "Git set-head annensteds hen mislyktes: «%s»" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "Dytter til {url}." #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "Raskt starte et nytt lager" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "Les alle metadatafilene og avslutt" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "Leser '{config_file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "Kunne ikke lese packageName/versionCode/versionName, APK ugyldig: \"{apkfilename}\"" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "Kunne ikke lese packageName/versionCode/versionName, APK ugyldig: \"{apkfilename}\"" #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "Behandler {apkfilename}" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Fjerner angitte filer" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "Fjerner {path}\"" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "Gi nytt navn til APK-filer som ikke samsvarer med package.name_123.apk" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "Signerer {apkfilename} på ny med angitt debug.keystore" #: ../fdroidserver/update.py #, fuzzy msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "Endre størrelse på alle ikoner som overstiger maksimal pikselantall og avslutt" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "Begrens utdata til advarsler og feil" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Skriv om alle metadatafilene" #: ../fdroidserver/rewritemeta.py #, fuzzy, python-brace-format msgid "Rewriting '{appid}'" msgstr "Skriver om \"{appid}\"" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "Kjør på Git-pakkebrønn som har uinnsendte endringer" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "Kjør rewritemetadata for å fikse formatering" #: ../fdroidserver/deploy.py #, fuzzy msgid "Running first pass with MD5 checking disabled" msgstr "Kjører første passering med MD5-sjekking avskrudd" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "Kjører wget i {path}." #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "Skann resulterende APK(er) for kjente ufrie klasser." #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "Skann kildekoden til en pakke" #: ../fdroidserver/scanner.py #, fuzzy, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "Skanner fant {count} problemer i {appid}:" #: ../fdroidserver/scanner.py #, fuzzy, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "Skanner fant {count} problemer i {appid}:" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "Skanner fant {count} problemer i {appid}:{versionCode}:" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "Skanner fant {} problem" msgstr[1] "Skanner fant {} problemer" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py #, fuzzy msgid "Scanning APK with dexdump for known non-free classes." msgstr "Skanner APK med APK Analyzer for kjente ikke-frie klasser." #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "Sett klokke til sådan tid ved bruk av:" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, fuzzy, python-brace-format msgid "Set open file limit to {integer}" msgstr "Sett åpen filgrense til {integer}" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "Sett opp programbygging for nattlig byggingspakkebrønn." #: ../fdroidserver/build.py #, fuzzy msgid "Setting open file limit failed: " msgstr "Kunne ikke sette åpen filgrense: " #: ../fdroidserver/build.py #, fuzzy, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "Setter {0} sek. tidsavbrudd for dette bygget" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "Logg inn og legg til pakker i pakkebrønnen" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "Signer indekser ved bruk av update --nosign" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "Hopp over skanning av kildekoden for binærfiler og andre problemer" #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "Hopper over '{apkfilename}' med ugyldig signatur." #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, fuzzy, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "Hopper over GitLab Pages-avspeiling fordi kodelageret er for stort (>%.2f GB)!" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "Hopper over generering av indeks for {appid}." #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "Hopper over {apkfilename} med ugyldig signatur." #: ../fdroidserver/scanner.py #, fuzzy, python-brace-format msgid "Skipping {appid}: disabled" msgstr "Hopper over {appid}: Avskrudd" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "Angi ei lokal mappe å synkronisere pakkebrønnen til" #: ../fdroidserver/deploy.py #, fuzzy msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "Angi ei identitetsfil å tilby til SSH for rsync-ing" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "Angi hvilken feilrettingsnøkkellagersfil som skal brukes." #: ../fdroidserver/common.py #, fuzzy msgid "Spew out even more information than normal" msgstr "Gulp opp enda mer info enn normalt" #: ../fdroidserver/nightly.py #, fuzzy, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "Stripper mystisk signatur fra {apkfilename}" #: ../fdroidserver/lint.py #, fuzzy, python-format msgid "Summary '%s' is just the app's name" msgstr "Sammendraget \"%s\" er bare pakkenavnet" #: ../fdroidserver/lint.py #, fuzzy, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "Sammendrag av lengde {length} overstiger {limit} tegngrensen" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "Systemklokka er eldre enn datoen i {path}." #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Testmodus - putt utdata kun i tmp-mappe, og alltid bygg, selv når utdataen finnes allerede." #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "OBB-versjonskoden må komme etter \"{name}.\":" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "Grunnettadressen for pakkebrønnen å loggføre til (forvalg: https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "Mappen å skrive speilet til" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "Filen å inkludere i pakkebrønnen (sti eller glob)." #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "Pakkebrønnens fingeravtrykk samsvarer ikke." #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "Rotmappen for local_copy_dir \"{path}\" finnes ikke." #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "Nøkkelaliaskollisjon - offentliggjøring stanset" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py #, fuzzy msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" "Feil: Denne kommandoen bør aldri brukes til å speile f-droid.org.\n" "Et helt speil av f-droid.org krever mer enn 200GB." #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "Denne pakkebrønnen har allerede lokal metadata: %s" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py #, fuzzy msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "For å bruke AWS-spann, må \"awssecretkey\" og \"awsaccesskeyid\" også være satt i config.yml." #: ../fdroidserver/deploy.py #, fuzzy msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "For å bruke AWS-spann, må \"awssecretkey\" og \"awsaccesskeyid\" også være satt i config.yml." #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "Nettadressen må starte med https:// eller http://" #: ../fdroidserver/lint.py #, fuzzy msgid "URL shorteners should not be used" msgstr "Nettadresseforkortere skal ikke brukes" #: ../fdroidserver/lint.py #, fuzzy, python-brace-format msgid "URL {url} in Description: {error}" msgstr "Nettadresse {url} i beskrivelse: {error}" #: ../fdroidserver/lint.py #, fuzzy msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "Ugyldig lisenstagg \"%s\". Kun bruk de som er å finne på https://spdx.org/license-list" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "Ukjent unntak møtt!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "Ukjent fil \"{filename}\" i bygg \"{versionName}\"." #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "Ukjent metadataformat: %s" #: ../fdroidserver/metadata.py #, fuzzy, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "Ukjent metadataformat: {path}" #: ../fdroidserver/common.py #, fuzzy msgid "Unknown version of aapt, might cause problems: " msgstr "Ukjent versjon av aapt, kan forårsake problemer: " #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "Unødvendig innledende mellomrom" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "Unødvendig etterfølgende mellomrom" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "Ugjenkjent felt «{fieldname}» i «{path}»" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Ugjenkjent felt «{build_flag}» i «{path}»" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "Ustøttet filtype \"{extension}\" for pakkebrønnsgrafikk" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "Ustøttet grafikkfil funnet: {path}." #: ../fdroidserver/lint.py #, fuzzy, python-format msgid "Unused extlib at %s" msgstr "Ubrukt extlib i %s" #: ../fdroidserver/lint.py #, fuzzy, python-format msgid "Unused file at %s" msgstr "Ubrukt fil i %s" #: ../fdroidserver/scanner.py #, fuzzy, python-format msgid "Unused scandelete path: %s" msgstr "Ubrukt fil i %s" #: ../fdroidserver/scanner.py #, fuzzy, python-format msgid "Unused scanignore path: %s" msgstr "Ubrukt fil i %s" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Oppdater repo informasjon for nye pakker" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "Oppdater binær gjennomsiktighetslogg for en URL" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData har ugyldig nettadresse: {url}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "UpdateCheckData må bruke HTTPS-nettadresse: {url}" #: ../fdroidserver/lint.py #, fuzzy, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "UpdateCheckData er ikke en gyldig nettadresse: {url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py #, fuzzy msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "\"Update Check Name\" er satt til den kjente App-ID-en - den kan fjernes." #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "Laster opp {apkfilename} to androidobservatory.org" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "Behandler {apkfilename}" #: ../fdroidserver/lint.py #, fuzzy msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Bruk /HEAD istedenfor /master for å peke til en fil i forvalgt forgrening" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Bruk `fdroid update -c` for å opprette den." #: ../fdroidserver/build.py msgid "Use build server" msgstr "Bruk byggtjener" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "Bruk dato fra APK istedenfor nåværende tid for nylig tillagte APK-er" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "Bruker \"{path}\" for oppsett av s3cmd." #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "Bruker \"{path}\" for oppsett av s3cmd." #: ../fdroidserver/common.py #, fuzzy msgid "Using APK Signature v2" msgstr "Bruker APK Signature v2" #: ../fdroidserver/common.py #, fuzzy msgid "Using APK Signature v3" msgstr "Bruker APK Signature v3" #: ../fdroidserver/common.py #, fuzzy msgid "Using JAR Signature" msgstr "Bruker APK Signature v2" #: ../fdroidserver/common.py #, fuzzy msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Bruker Java sin jarsigner, ikke anbefalt for bekreftelse av APK-er. Bruk apksigner." #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, fuzzy, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "Bruker eksisterende nøkkellager \"{path}\"." #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "Bruk s3cmd til å synkronisere med: {url}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "Bruk s3cmd til å synkronisere med: {url}" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Gyldige kommandoer er:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "Bekreft mot lokalt hurtiglagret kopi snarere enn å laste ned på ny." #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "Bekreft integriteten til nedlastede pakker" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "Bekrefter indekssignatur:" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "VirusTotal API-nøkkel kan ikke laste opp filer større enn 32 MB, bruk {url} for å laste opp {path}." #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Advar om mulige metadata-feil" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py #, fuzzy msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Når oppsatt for signerte indekser, vil kun usignerte indekser bli opprettet i dette stadiet" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 \"Entydig navn\" (DN) brukt ved generering av nøkler." #: ../fdroidserver/common.py #, fuzzy msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "Du kan bruke ANDROID_HOME til å sette stien til din SDK, f.eks:" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "ZIP-filarkiv" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, fuzzy, python-brace-format msgid "adding IdentityFile to {path}" msgstr "legger til IdentityFile i {path}" #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "adding to {name}: {path}" msgstr "legger til i {name}: {path}" #: /usr/lib/python3.11/argparse.py #, fuzzy, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "tvetydig valg: %(option)s kan passe overens med %(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py #, fuzzy msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "fant ikke apksigner (som kreves for signering)." #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "fant ikke apksigner (som kreves for signering)." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py #, fuzzy msgid "application ID of file to operate on" msgstr "App-ID å sjekke for oppdateringer" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py #, fuzzy msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "App-ID med valgfri versionCode, i formen APPID[:VERCODE]" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "argument \"-\" med modus %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py #, fuzzy msgid "attempting bare SSH connection to test deploy key:" msgstr "forsøker naken SSH-tilkobling for å teste utrullingsnøkkel:" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "kan ikke åpne '%(filename)s': %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, fuzzy, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "Finner ikke AppID for {path}." #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "kan ikke ha flere underfortolkningsargumenter" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "kan ikke flette handlinger - to grupper heter %r" #: ../fdroidserver/nightly.py #, fuzzy msgid "cannot publish update, did you set the deploy key?" msgstr "kan ikke offentliggjøre oppdatering, har du satt utrullingsnøkkelen?" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "kloner {url}" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "kommandoer fra programtilleggsmodulene:" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "konflikterende valgstreng: %s" msgstr[1] "konflikterende valgstrenger: %s" #: /usr/lib/python3.11/argparse.py #, fuzzy, python-format msgid "conflicting subparser alias: %s" msgstr "konflikterende valgstreng: %s" #: /usr/lib/python3.11/argparse.py #, fuzzy, python-format msgid "conflicting subparser: %s" msgstr "konflikterende valgstreng: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "kunne ikke tolke'{path}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "opprettet {path}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "Behandler {apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "dest= er påkrevd for valg som %r" #: ../fdroidserver/scanner.py #, fuzzy msgid "downloading '{}'" msgstr "Laster ned %s" #: ../fdroidserver/scanner.py #, fuzzy msgid "downloading scanner signatures from '{}' failed" msgstr "Stripper mystisk signatur fra {apkfilename}" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "kjørbar binærfil, muligens kode" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "forventet %s argument" msgstr[1] "forventet %s argumenter" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "forventet minst ett argument" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "forventet på det meste ett argument" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "forventet ett argument" #: ../fdroidserver/__main__.py #, fuzzy msgid "fdroid [] [-h|--help|--version|]" msgstr "bruk: fdroid [-h|--help|--version] []" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py #, fuzzy msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "tving feil til å bli advarsler, eller ignorer" #: ../fdroidserver/common.py #, fuzzy msgid "git svn clone failed" msgstr "\"git svn clone\" mislyktes" #: ../fdroidserver/scanner.py #, fuzzy msgid "gzip file archive" msgstr ".gzip-filarkiv" #: /usr/lib/python3.11/argparse.py #, fuzzy, python-format msgid "ignored explicit argument %r" msgstr "ignorerte eksplisitt argument %r" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1 må ha en signatur, bruk `fdroid signindex` for å opprette den." #: ../fdroidserver/index.py #, fuzzy msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1 må ha en signatur, bruk `fdroid signindex` for å opprette den." #: /usr/lib/python3.11/argparse.py #, fuzzy, python-format msgid "invalid %(type)s value: %(value)r" msgstr "ugydlig %(type)s verdi: %(value)r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "ugyldig valg: %(value)r (velg fra %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "ugyldig conflict_resolution-verdi: %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "Ugyldig valgstreng %(option)r: Må starte med et tegn %(prefix_chars)r" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "local_copy_dir slutter ikke med \"fdroid\", kanskje du mente: \"{path}\"" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "local_copy_dir må være en absolutt sti!" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "local_copy_dir må være ei mappe, ikke ei fil!" #: ../fdroidserver/index.py #, fuzzy, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "speilet \"%s\" slutter ikke med \"fdroid\"." #: ../fdroidserver/index.py #, fuzzy, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "Nå må du sette disse i config.yml:" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "gjensidig utelukkende argumenter må være valgfrie" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, fuzzy, python-brace-format msgid "no \"icon\" in {appid}" msgstr "Behandler {appid}" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "ingen APK angitt" #: ../fdroidserver/checkupdates.py #, fuzzy msgid "no version information found" msgstr "ingen versjonsinfo funnet!" #: /usr/lib/python3.11/argparse.py #, fuzzy, python-format msgid "not allowed with argument %s" msgstr "ikke tillatt med argument %s" #: /usr/lib/python3.11/argparse.py #, fuzzy, python-format msgid "one of the arguments %s is required" msgstr "ett av argumentene %s kreves" #: ../fdroidserver/common.py ../fdroidserver/index.py #, fuzzy msgid "only accepts strings, lists, and tuples" msgstr "kun godta strenger, lister, og forekomster" #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" msgstr "Valg" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "overskriver eksisterende {path}" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "Posisjonelle argumenter" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, fuzzy, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "nekt nedlasting via usikker HTTP-tilkobling (bruk HTTPS eller angi --no-https-check): {apkfilename}" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd synkroniserer indekser {path} til {url} og sletter" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "s3cmd synkroniserer indekser {path} til {url} og sletter" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py #, fuzzy msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "local_copy_dir slutter ikke med \"fdroid\", kanskje du mente: \"{path}\"" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "delt bibliotek" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "vis denne hjelpemeldingen og avslutt" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "signert APK, enten en filsti, eller HTTPS-nettadresse." #: ../fdroidserver/common.py #, fuzzy msgid "skip deploying full build logs: log content is empty" msgstr "hopp over innsendelse av fullstendige bygglogger: Logginhold er tomt" #: ../fdroidserver/common.py #, fuzzy msgid "skip deploying full build logs: not enabled in config" msgstr "hopp over innsendelse av fullstendige byggingslogger: Ikke påslått i oppsett" #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "skipping source tarball: {path}" msgstr "hopper over kildetjæreball: {path}" #: ../fdroidserver/lint.py #, fuzzy msgid "srclibs missing name and/or @" msgstr "srclibs mangler navn og/eller @" #: ../fdroidserver/scanner.py msgid "static library" msgstr "statisk bibliotek" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "følgende argumenter kreves: %s" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "uventet valgstreng: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "ukjent fortolker %(parser_name)r (valg: %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "ugjengkjente argumenter: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "utrygge tilganger for '{config_file}' (skal være 0600)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "bruk: " #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "bruker Apache-libcloud for å synkronisere med {url}" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "{0} program, {1} nøkkelalias" msgstr[1] "{0} programmer, {1} nøkkelalias" #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) mangler metadata." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "{apkfilename} sin AndroidManifest.xml har en feilaktig dato: " #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} mangler navn. Bruker pakkenavn istedenfor." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "{appid} fra {path} er ikke et gyldig Android-pakkenavn!" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "{appid} fra {path} er ikke et gyldig Java-pakkenavn!" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "{appid} har både APK-er og filer: {files}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "{appid} mangler {name}." #: ../fdroidserver/lint.py #, fuzzy, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "{appid}: Ukjent extlib {path} i bygg \"{versionName}\"" #: ../fdroidserver/scanner.py #, fuzzy, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "{appid}: Ingen bygg angitt, kjører på nåværende kildetilstand." #: ../fdroidserver/lint.py #, fuzzy, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "{appid}: {field} må være en '{type}', men er ikke et '{fieldtype}!'" #: ../fdroidserver/lint.py #, fuzzy, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "{appid}: {field} må være en '{type}', men er ikke et '{fieldtype}'!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "{build_flag} må være et heltall, fant: {value}" #: ../fdroidserver/metadata.py #, fuzzy, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "{build_flag} må være et heltall, fant: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "{file} er tom eller skadet!" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} «{section}/icons/{path}» finnes ikke. Rett det i config.yml." #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "{path} finnes allerede, ignorerer importeringsresultater." #: ../fdroidserver/nightly.py #, fuzzy, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "{path} finnes ikke. Opprett den ved å kjøre:" #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "{path} har feilaktig filsignatur \"{pattern}\", mulig Janus-utnyttelse." #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "{path} is not a standard config file!" msgstr "'sdk_path' ble ikke funnet i config.yml!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "{path} er null størrelse." #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "{path} er mer enn 200MB, last opp manuelt: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "{path}: {error}" msgstr "Klarte ikke å lese {path}: {error}" #: ../fdroidserver/mirror.py #, fuzzy, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "{url} slutter ikke med \"fdroid\", sjekk nettadressestien." #: ../fdroidserver/import_subcommand.py #, fuzzy, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "{url} slutter ikke med \"fdroid\", sjekk nettadressestien." #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "{} bygg mislyktes" msgstr[1] "{} bygg mislyktes" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "{} bygg fullført" msgstr[1] "{} bygg fullført" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/nl/0000755000175000017500000000000014770510164014574 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/nl/LC_MESSAGES/0000755000175000017500000000000014770510164016361 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/nl/LC_MESSAGES/fdroidserver.po0000644000175000017500000020505614770507747021444 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Bart Groeneveld , 2020. # privacysimp , 2021. # Stephan Paternotte , 2023. # Issa1553 , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.1-680-ge1d3de71\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2024-01-03 09:07+0000\n" "Last-Translator: Issa1553 \n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.4-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "SSH openbare sleutel die gebruikt moet worden als inzetsleutel:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "{path} gecodeerd voor de DEBUG_KEYSTORE geheime variabele:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" heeft geen overeenkomend metadatabestand!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "\"local_copy_dir\" {path} bestaat niet!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" is al geïnstalleerd op {dev}." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "\"{path}\" bevat recente {name} ({version})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "\"{path}\" bestaat maar s3cmd is niet geïnstalleerd!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "\"{path}\" is geen ondersteund bestandsformaat (gebruik: metadata/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "\"{path}\" is ondertekend door een sleutel die niet is toegestaan:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" is geen geldige URL!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: fout: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d problemen gevonden" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%r kan niet aangeroepen worden" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "%s heeft geen dictaat opgeleverd!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "%s heeft slechte SHA-256: %s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s is geen geaccepteerd build-veld" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' niet gevonden in config.yml!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "'keystore' is GEEN en 'smartcardoptions' is leeg!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "'keystore' niet gevonden in config.yml!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "'keystorepass' niet gevonden in config.yml!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' niet gevonden in config.yml!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required' is een ongeldig argument voor positionelen" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "'sdk_path' niet ingesteld in config.yml!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "{aapt}' is te oud, fdroid vereist build-tools-{version} of nieuwer!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "{path}' is niet uitgevoerd!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' heeft ongeldig formaat, het zou een woordenboek moeten zijn!" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "{value}' is geen geldig {field} in {appid}. Regex patroon: {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "{value}' is geen geldig {field}, moet {pattern} zijn" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...checkupdate mislukt voor {appid} : {error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() niet gedefinieerd" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "/problemen ontbreekt" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "Een URL is vereist als argument!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "PGP-handtekeningen toevoegen met GnuPG voor pakketten in repo" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "Een repo-sleutel toevoegen aan een ongetekende repo" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "Skelet-metagegevensbestanden toevoegen voor APK's die deze missen" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "Nieuwe repo toevoegen voor alleen {name}" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "Alias van de repo-sleutel in de sleutelbewaarplaats" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "ToegestaneAPKOndertekenSleutels ontbreekt, maar referentiebinary is geleverd" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "Staat toe dat een andere revisie (of git tak) wordt opgegeven voor de initiële import" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "Mirror ook het volledige archiefgedeelte" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "Waarschuw ook voor opmaakproblemen, zoals herschrijfmeta -l" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "Android AAR-bibliotheek" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "Android APK-bestand" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "Android DEX-code" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "Android SDK niet gevonden op {path}!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "Android SDK-pad '{path}' bestaat niet!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "Android SDK-pad '{path}' is geen map!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "Android SDK-tool {cmd} niet gevonden!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "App heeft binaries maar heeft geen overeenkomstige ToegestaneAPKOndertekenSleutels om certificaat te pinnen." #: ../fdroidserver/lint.py #, fuzzy msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "App heeft GeenBronSinds of Archiefbeleid \"0 versies\" maar AutoUpdateModus of UpdateCheckModus zijn niet Geen" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "App staat in '{repo}' maar heeft een link naar {url}" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "App-versie heeft een binaire versie maar heeft geen overeenkomstige ToegestaneAPKOndertekenSleutels om een certificaat vast te pinnen." #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "Het toevoegen van .git is niet nodig" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "Archivering {apkfilename} met ongeldige handtekening!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateModus met UpdateCheckModus: HTTP moet een patroon hebben." #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "Slecht entry type \"{mirrortype}\" in spiegels configuratie: {mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "Pakket van broncode bouwen" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Controleren op updates voor applicaties" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "Opdracht '%s' wordt niet herkend.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "APK's en/of OBB's zonder metadata uit de repo verwijderen" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "Gebouwde pakketten installeren op apparaten" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "Communiceren met de repo HTTP-server" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "Snel een nieuw databank starten" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "Lees alle metagegevensbestanden en sluit af" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "Hernoem APK-bestanden die niet overeenkomen met pakket.naam_123.apk" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Herschrijf alle metadatabestanden" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "De broncode van een pakket scannen" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "Pakketten ondertekenen en in de repo plaatsen" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "Onderteken indexen die zijn aangemaakt met update --nosign" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "Onbekende uitzondering gevonden!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Repo informatie bijwerken voor nieuwe pakketten" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "Het binaire transparantielogboek bijwerken voor een URL" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Geldige opdrachten zijn:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "De integriteit van gedownloade pakketten controleren" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Waarschuwen voor mogelijke metadata fouten" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "dubbelzinnige optie: %(option)s kan overeenkomen met %(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" msgstr "Opties" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "positionele argumenten" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "toon dit hulpbericht en sluit af" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "de volgende argumenten zijn vereist: %s" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "onverwachte optiestring: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "onherkende argumenten: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "Onveilige rechten op '{config_file}' (zou 0600 moeten zijn)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "gebruik: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "{path} is not a standard config file!" msgstr "'sdk_path' niet ingesteld in config.yml!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "" msgstr[1] "" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/nn/0000755000175000017500000000000014770510164014576 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/nn/LC_MESSAGES/0000755000175000017500000000000014770510164016363 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/nn/LC_MESSAGES/fdroidserver.po0000644000175000017500000017520414770507747021447 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Bård Sigurd Møller , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.3.0-3-g4ba7b5c9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2024-11-26 10:54+0000\n" "Last-Translator: Bård Sigurd Møller \n" "Language-Team: Norwegian Nynorsk \n" "Language: nn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.9-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: feil: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "Kommandoen '%s' er ikkje gjenkjent\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "" msgstr[1] "" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/pa/0000755000175000017500000000000014770510164014563 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/pa/LC_MESSAGES/0000755000175000017500000000000014770510164016350 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/pa/LC_MESSAGES/fdroidserver.po0000644000175000017500000017470114770507747021435 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Kuldeep Singh , 2025. msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.3.3\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: pa\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "" msgstr[1] "" ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901231.0 fdroidserver-2.4.0/locale/pick-complete-translations.py0000755000175000017500000000571514770507757022041 0ustar00hanshans#!/usr/bin/python3 # # add completed translations from weblate to MANIFEST.in import git import json import os import re import requests import subprocess projectbasedir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) localedir = os.path.join(projectbasedir, 'locale') print(projectbasedir) cached_file = os.path.join(localedir, 'fdroidserver.json') if os.path.exists(cached_file): with open(cached_file) as fp: data = json.load(fp) else: url = 'https://hosted.weblate.org/api/components/f-droid/fdroidserver/statistics/?format=json' r = requests.get(url) r.raise_for_status() data = r.json()['results'] active = set() print('name locale translated approved error-free') for locale in sorted(data, key=lambda locale: locale['code']): print( '%26s' % locale['name'], '%8s' % locale['code'], '%0.1f%%' % locale['translated_percent'], '%0.1f%%' % locale['approved_percent'], '%0.1f%%' % (100 - locale['failing_percent']), sep='\t', ) if locale['translated_percent'] >= 90 and locale['failing'] < 5: active.add(locale['code']) manifest_file = os.path.join(projectbasedir, 'MANIFEST.in') with open(manifest_file) as fp: manifest_in = fp.read() for m in re.findall(r'include locale/([^/]+)/LC_MESSAGES/fdroidserver.po', manifest_in): active.add(m) repo = git.Repo(projectbasedir) weblate = repo.remotes.weblate weblate.fetch() upstream = repo.remotes.upstream upstream.fetch() if 'merge_weblate' in repo.heads: merge_weblate = repo.heads['merge_weblate'] repo.create_tag( 'previous_merge_weblate', ref=merge_weblate, message=('Automatically created by %s' % __file__), ) else: merge_weblate = repo.create_head('merge_weblate') merge_weblate.set_commit(upstream.refs.master) merge_weblate.checkout() active = sorted(active) manifest_lines = set() for locale in active: po_file = f'locale/{locale}/LC_MESSAGES/fdroidserver.po' manifest_lines.add(f'include {po_file}\n') for commit in repo.iter_commits( str(weblate.refs.master) + '...' + str(upstream.refs.master), paths=[po_file], max_count=10, reverse=True, ): print(f'{locale}: git cherry-pick', commit) repo.git.cherry_pick(commit) with open(manifest_file, 'a') as fp: for line in manifest_lines: if line: fp.write(line) # first filter duplicates subprocess.run(['sort', '-u', '-o', manifest_file, manifest_file]) # then use a stable sort order subprocess.run( ['sort', '--ignore-case', '--stable', '-o', manifest_file, manifest_file], env={'LC_ALL': 'C'}, ) print('\tIf all else fails, try:') print('\tgit checkout -B merge_weblate weblate/master') print('\tgit rebase -i upstream/master') print('\t# select all in editor and cut all commit lines') print('\twl-paste | grep -Eo ".* \((%s)\) .*" | wl-copy' % '|'.join(active)) print('\t# paste into editor, and make rebase\n') ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/pl/0000755000175000017500000000000014770510164014576 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/pl/LC_MESSAGES/0000755000175000017500000000000014770510164016363 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/pl/LC_MESSAGES/fdroidserver.po0000644000175000017500000027230214770507747021444 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # WaldiS , 2020, 2021, 2024, 2025. # Michal L , 2020, 2021. # mondstern , 2021. # Hans-Christoph Steiner , 2021, 2024. # Agnieszka C , 2021, 2022, 2023, 2024. # Eryk Michalak , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.0-95-gd7af22b\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2025-03-13 20:43+0000\n" "Last-Translator: WaldiS \n" "Language-Team: Polish \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Weblate 5.11-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "Klucz publiczny SSH, który ma być używany jako klucz wdrażania:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "{path} kodowane dla zmiennej tajnej DEBUG_KEYSTORE:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" nie ma pasującego pliku metadanych!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "„local_copy_dir” {path} nie istnieje!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" jest już zainstalowany na {dev}." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "\"{path}\" zawiera najnowsze {name} ({version})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "\"{path}\" istnieje, ale s3cmd nie jest zainstalowany!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "„{path}” nie jest obsługiwanym formatem pliku (użyj: metadata/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "„{path}” jest podpisany kluczem, który jest niedozwolony:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" nie jest prawidłowym adresem URL!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: błąd: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "Nie udało się podpisać lub zweryfikować %d plików APK!" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d problemy odnalezione" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%r nie można wywołać" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "%s nie wytworzyło dict!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "%s ma zły SHA-256: %s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s nie jest akceptowanym polem kompilacji" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' nie znaleziono w config.yml!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "\"keystore\" nie ma, a \"smartcardoptions\" jest puste!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "'Plik kluczy' nie został znaleziony w pliku config.yml!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "'keystorepass' nie znaleziono w config.yml!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' nie znaleziono w config.yml!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'wymagane' jest nieprawidłowym argumentem dla pozycji" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "'sdk_path' nie jest ustawiony w config.yml!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' jest zbyt stary, fdroid wymaga narzędzi-kompilacji-{version} lub nowsze!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "'{path}' nie udało się wykonać!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' ma nieprawidłowy format, powinien być słownikiem!" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' nie jest prawidłowy {field} w {appid}. Wzór Regex: {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' nie jest prawidłowym {field}, powinno być {pattern}" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "--merge-request działa tylko na pojedynczym appid!" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...sprawdzenie aktualizacji nie powiodło się {appid} : {error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() nie określono" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "/nie ma problemów" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "Adres URL jest wymagany jako argument!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "Podpisy plików APK mają różne certyfikaty w {path}:" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "Dodaj podpisy PGP za pomocą GnuPG dla pakietów w repozytorium" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "Dodaj klucz podpisu repozytorium do niepodpisanego repozytorium" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "Dodaj pliki metadanych szkieletu dla pakietów APK, które ich nie zawierają" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "Dodaje tylko nowe repozytorium {name}" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "Alias klucza podpisu repozytorium w magazynie kluczy" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "Brak AllowedAPKSigningKeys, ale dostarczono referencyjny plik binarny" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "Umożliwia określenie innej wersji (lub gałęzi git) dla początkowego importu" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "Również odzwierciedla całą sekcję archiwów" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "Ostrzeż także o problemach z formatowaniem, takich jak rewritemeta -l" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "Biblioteka AAR systemu Android" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "Plik APK systemu Android" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "Kod DEX Android" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "Nie znaleziono zestawu SDK systemu Android pod adresem {path}!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "Android SDK ścieżka '{path}' nie istnieje!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "Android SDK ścieżka '{path}' nie jest katalogiem!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "Nie znaleziono narzędzia Android SDK {cmd}!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Aplikacja ma Binaries, ale nie ma odpowiednich kluczy AllowedAPKSingKeys do przypięcia certyfikatu." #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "Aplikacja ma NoSourceSince lub ArchivePolicy „0 versions”, ale AutoUpdateMode lub UpdateCheckMode nie są None" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "Aplikacja jest w '{repo}' ale ma link do {url}" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Wersja aplikacji ma plik binarny, ale nie ma odpowiednich kluczy AllowedAPKSigningKeys do przypięcia certyfikatu." #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "Dołączanie .git nie jest konieczne" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "Archiwizacja {apkfilename} z nieprawidłowym podpisem!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode z UpdateCheckMode: HTTP musi mieć wzorzec." #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "Automatyczna odmowa na wszystkie monity." #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "Automatyczna odpowiedź twierdząca na wszystkie monity." #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "Błędny typ wpisu „{mirrortype}” w konfiguracji serwerów lustrzanych: {mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "Bazowy adres URL do serwera lustrzanego, może zawierać klucz do podpisywania indeksu za pomocą łańcucha zapytania: ?fingerprint=" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "Oddział '{branch}' używany jako commit w kompilacji '{versionName}'" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "Gałąź '{branch}' używana jako commit w srclib '{srclib}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "Uszkodzone dowiązanie symboliczne: {path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "Zbuduj pakiet ze źródła" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "Zbuduj wszystkie dostępne aplikacje" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "Kompilacja generowana przez `fdroid import` - usuń wyłączenie linii po przygotowaniu" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "Repozytorium git metadanych kompilacji zawiera niescommitowane zmiany!" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "Twórz tylko najnowszą wersję każdego pakietu" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "Zbudowane repo w oparciu o \"%s\" z tą konfiguracją:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "Nie można automatycznie zaktualizować aplikacji bez CurrentVersionCode" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Nie można zbudować z powodu błędu {} podczas skanowania" msgstr[1] "Nie można zbudować z powodu błędów {} podczas skanowania" msgstr[2] "Nie można zbudować z powodu błędów {} podczas skanowania" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Nie można odczytać \"{path}\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "Kategorie '%s' są nieprawidłowe" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "Kategorie nie są ustawione" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "Kategoria „{category}” zdefiniowana, ale nieużywana dla żadnej aplikacji!" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Sprawdź aktualizacje aplikacji" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "Sprawdzanie archiwizacji dla {appid} - apks: {integer}, keepversions: {keep}, archapks: {arch}" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Czysta aktualizacja - nie używa pamięci podręcznych, przetwarzaj ponownie wszystkie pakiety APK" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "Koloruj wpisy w dzienniku zdarzeń" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Rozdzielana przecinkami lista kategorii." #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "Polecenie '%s' nie rozpoznane.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "Scommituj zmiany" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "Zatwierdź zmiany, wypchnij, a następnie utwórz żądanie scalenia" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "Sprzeczne definicje „{field}” między plikami .yml a przetłumaczonymi:" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Sprzeczne argumenty: '--verbose' i '--quiet' nie mogą być podane w tym samym czasie." #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "Nie można znaleźć '{command}' w twoim systemie" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Nie można znaleźć najnowszej wersji kodu" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Nie można odnaleźć nazwy najnowszej wersji" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "Nie można znaleźć pliku {path}, aby go usunąć" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "Nie można otworzyć pliku APK {path} do analizy: " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Nie można przeanalizować rozmiaru \"{size}\", nieprawidłowy typ \"{type}\"" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Nie można odnaleźć identyfikatora aplikacji" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "Nie udało się znaleźć żadnych informacji o wersji" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "Nie można znaleźć identyfikatora pakietu" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "Tchórzliwa odmowa nadpisania istniejącej konfiguracji klucza podpisu!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "Utworzono nowy kontener \"{name}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Tworzenie \"{path}\" do konfiguracji s3cmd." #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Creating empty {config_file}" msgstr "Czytaj '{config_file}'" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Tworzenie katalogu dzienników" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "Tworzenie nowego zasobnika S3: {url}" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "Tworzenie katalogu wyjściowego" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "Tworzenie podpisanego indeksu za pomocą tego klucza (SHA256):" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "Tworzenie katalogu tymczasowego" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "Tworzenie niepodpisanego indeksu w ramach przygotowań do podpisania" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "CurrentVersionCode {cv} jest mniejszy niż najstarszy wpis kompilacji {versionCode}" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "DEBUG_KEYSTORE nie jest ustawione lub wartość jest niepełna" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "Usuń pliki APK i/lub OBB bez metadanych z repozytorium" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "Usuwanie archiwum, repozytorium jest zbyt duże ({size} maks {limit})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "Usuwanie historii git-mirror, repozytorium jest zbyt duże ({size} max {limit})" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "Usuwanie nieznanego pliku: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "Opis \"%s\" to tylko podsumowanie aplikacji" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "Opis ma zduplikowaną linię" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "Opis długości {length} przekracza limit {limit} char" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "Czy miałeś na myśli config/{name}.yml?" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "Czy miałeś na myśli {code}?" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "Nie dodawaj „wyłącz:” do wygenerowanych wpisów kompilacji" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "Nie wdrażaj nowych plików w repozytorium" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "Nie podawaj \"{path}\" w adresie URL!" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "Nie pytaj o ścieżkę SDK systemu Android, po prostu nie" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "Nie usuwaj kluczy prywatnych wygenerowanych z magazynu kluczy" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "Nie twórz archiwum źródłowego, przydatnego podczas testowania kompilacji" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "Nie odświeżaj repozytorium, przydatne podczas testowania kompilacji bez połączenia z Internetem" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "Nie używaj sum kontrolnych rsync" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "Pobierz F-Droid.apk za pomocą serwerów lustrzanych, które wyciekają mniej do sieci" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Pobierz pełne mirrors małych repozytoriów" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Pobieranie repozytorium już raz się nie powiodło, nie próbuje ponownie." #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "Pobieranie {url} nie powiodło się. {error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "Zduplikowana deklaracja niepożądanej funkcji w {path} została zignorowana!" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "Zduplikowany wpis „%s” w konfiguracji serwerów lustrzanych!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "Zduplikowany link w '{field}': {url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "BŁĄD: %(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "BŁĄD: podkomenda „serwer” została usunięta, użyj polecenia „deploy”!" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "BŁĄD: nieobsługiwany typ CI, mile widziane poprawki!" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "BŁĄD: nieobsługiwany host git „%s”, łatki mile widziane!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "BŁĄD: {key} w {path} nie jest \"archive\" lub \"repo\"!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "BŁĄD: {key}:{subkey} w {path} nie jest jednym z dozwolonych kluczy: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "Kodowanie jest ustawione na '{enc}'. Fdroid może napotkać problemy z kodowaniem. Aby uzyskać najlepsze wyniki, ustaw go na 'UTF-8'." #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" "Podaj ścieżkę do zestawu SDK systemu Android (%s) tutaj:\n" " > " #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "Zmienna środowiskowa {var} z {configname} nie jest ustawiona!" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "Zmienna środowiskowa {var} z {configname} nie jest ustawiona!" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "Błąd wdrożenia 'github_releases', {} nie występuje. (Może być konieczne wcześniejsze uruchomienie `fdroid update`)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "Błąd podczas uzyskiwania adresu repo" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "Zakończ z niezerowym kodem, jeśli znaleziono problemy" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "Wyodrębnij metadane aplikacji z repozytorium źródłowego" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "Wyciągnij podpisy z plików APK" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "F-Droid.apk nie może być pobrany z żadnego znanego źródła!" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "Nieudane kopiowanie {path}: {error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "Nie powiodło się pobieranie podpisów dla '{apkfilename}': {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "Błąd odczytu {path}: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "Nie udało się zmienić rozmiaru {path}: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "Nie można utworzyć zasobnika S3: {url}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "Nie udało się uzyskać informacji o APK, usunięcie {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "Nie udało się uzyskać informacji o APK, pomijając {path}" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "Nie udało się uzyskać odcisku palca klucza podpisywania APK" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "Instalacja nie powiodła się '{apkfilename}' na {dev}: {error}" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "Nie udało się podpisać aplikacji" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "Pobrano buildserverid z VM: {buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "Pobrane podpisy dla '{apkfilename}' -> '{sigdir}'" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "Plik zniknął podczas przetwarzania go: {path}" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "Skończone" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Zakazane tagi HTML" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "Wymuszaj budowanie wyłączonych aplikacji i działa niezależnie od problemów ze skanowaniem. Dopuszczalne tylko w trybie testowym." #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "Wymuś zatrzymanie kompilacji po {0} upływie limitu czasu!" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "Wymuś skanowanie wyłączonych aplikacji i kompilacji." #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "Znaleziono \"{path}\" grafiki bez metadanych dla aplikacji \"{name}\"!" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "Znaleziono zły plik finansowania \"{path}\" dla \"{name}\":" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "Znaleziono nieprawidłowe pliki w argumentach" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "Znaleziono nieprawidłowe kody wersji dla niektórych aplikacji" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "Znaleziono wiele plików bloków podpisów JAR w {path}" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "Znaleziono wiele certyfikatów do podpisywania!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "Znaleziono wiele plików metadanych dla {appid}" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "Znaleziono wiele certyfikatów do podpisywania dla repozytorium." #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "Nie znaleziono certyfikatów do podpisywania dla repozytorium." #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "Znaleziono plik nieprzechowy na %s" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "Znaleziono {apkfilename} na {url}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "Znaleziono {count} problemy(-ów) w {filename}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "Znaleziono {count} ostrzeżeń(-nia) w {filename}" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "Wygenerowano metadane szkieletu dla {appid}" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "Git checkout z '%s' nie powiodło się" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "Git clean nie powiódł się" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "Pobranie Git nie powiodło się" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Błąd zdalnego ustawiania Git: \"%s\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Resetowanie Git nie powiodło się" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "Deinit podmodułu Git nie powiódł się" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "Nie udało się zsynchronizować modułu submodule Git" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "Aktualizacja submodułu Git nie powiodła się" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "HTTPS musi być używany z adresami URL Subversion!" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "Jeśli serwer lustrzany git stanie się Duży, Zezwól na usunięcie archiwum" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "Jeśli przesyłanie się nie uda, spróbuj przesłać ręcznie do {url}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "Ignorowanie metadanych '{field}' w '{metapath}' ponieważ są one przestarzałe." #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "Ignorowanie wpisu FUNDING.yml dłuższego niż 2048: %s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "Ignorowanie błędnego elementu w manifeście: %s" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "{oldfile} jest przestarzałe, użyj {newfile}" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Ignorowanie pakietu bez metadanych: " #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "Ignorowanie starych danych pamięci podręcznej dla {apkfilename}" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "Dołącz pliki APK, które są podpisane przy użyciu wyłączonych algorytmów, takich jak MD5" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "Dołącz podpis PGP .pliki asc w lustrze" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "Dołącz dzienniki budowy do lustra" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "Dołącz źródło tarballs w lustrze" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "Włączenie metadanych z %s@%s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "Włączenie metadanych z {path}" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "Inicjowanie submodułów" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "Zainstaluj wszystkie dostępne podpisane aplikacje" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "Zainstaluj wbudowane pakiety na urządzeniach" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "Instalowanie %s…" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "Instalowanie '{apkfilename}' na {dev}…" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "Wejdź w interakcje z repozytorium serwera HTTP" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "Nieprawidłowy plik APK" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "Nieprawidłowy AutoUpdateMode: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "Nieprawidłowy UpdateCheckMode: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "Nieprawidłowa VercodeOperation: {field}" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "Nieprawidłowa VercodeOperation: {invalid_ops}" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "Nieprawidłowy ID aplikacji {appid}" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Nieprawidłowa lista wypunktowana" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "Niepoprawna nazwa opublikowanego pliku: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "Nieprawidłowy ndk: wpis w kompilacji: „{ndk}”" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "Nieprawidłowe przekierowanie do nie-HTTPS: {before} -> {after} " #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "Nieprawidłowe metadane scrlib: '{file}' nie istnieje" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "Nieprawidłowe metadane srclib: nie można przeanalizować '{file}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "Nieprawidłowe metadane srclib: nieznany klucz '{key}' w '{file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "Podpis JAR nie mógł zweryfikować: {path}" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "Podpis JAR potwierdzony: {path}" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "Plik Java JAR" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "Nie znaleziono Java JDK! Zainstaluj w standardowej lokalizacji lub ustaw ścieżki java!" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "Klasa skompilowana Java" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "Jarsigner Java nie został znaleziony! Zainstaluj w standardowej lokalizacji lub ustaw ścieżki java (java_paths)!" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "JavaScript w atrybutach src HTML" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "Utrzymywanie nieudanej kompilacji „{apkfilename}”" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "Magazyn kluczy do podpisywania klucza:\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "Znany klucz debugowania jest używany w AllowedAPKSigningKeys: " #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "Ostatnio używany commit '{commit}' wygląda jak tag, ale UpdateCheckMode to '{ucm}'" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "Metody darowizny Liberapay należą do Liberapay: field" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "Lista plików, które mają zostać ponownie sformatowane (przebieg próbny)" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "Ustawienia regionalne zawarte w adresie URL f-droid.org" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "Wykonaj zatrzymanie kompilacji z wyjątkami" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "Nieprawidłowo repozytorium mirrors." #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "Nieprawidłowy wiersz serverwebroot:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "Osiągnięto maksymalną głębokość rekurencji w pliku ZIP: %s" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Mirror pełnego repo i archiwum, wszystkie typy plików." #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "Brakujący katalog wyjściowy" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "Przenoszenie deklaracji niepożądanych funkcji do przetłumaczonych plików:" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "Ani „repo_pubkey”, ani „keystorepass” nie są ustawione w config.yml" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "Brak APK dla pakietu: %s" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "Nie znaleziono pakietu SDK Androida!" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "Nie znaleziono podłączonych urządzeń" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "Nie znaleziono urządzeń dla `adb install`! Podłącz jedno urządzenie." #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "Brak odcisku palca w adresie URL." #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "Brak dostępnych submodułów git" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "Nie można znaleźć żadnego projektu gradle. Podaj --subdir?" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "Nie znaleziono informacji." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "Nie znaleziono pasujących tagów" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "Nie znaleziono minimalnej wersji SDK w {0}, użyto domyślnej (3)." #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "Nie musisz określać, że aplikacja jest wolnym oprogramowaniem" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "Nie musisz określać, że aplikacja jest przeznaczona dla Androida" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "Brak opcji! Edytuj plik config.yml, aby ustawić co najmniej jedno z poniższych:" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "Nie określono pakietów" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "Żaden podpisany APK nie jest dostępny dla %s" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "Brak podpisanego katalogu wyjściowego - nic nie można zrobić" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "Nie znaleziono certyfikatów do podpisu w {path}" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "Brak takiego pakietu: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "Brak takiego kodu wersji {versionCode} dla aplikacji {appid}" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "Nie znaleziono tagów" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "Brak katalogu bez podpisu - nic nie można zrobić" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "Nie udało się znaleźć informacji o wersji." #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "Nieprawidłowa definicja rozmiaru: \"{}\"" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "Nie ma nic do roboty" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "Nic nie robić w {appid}." #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "Teraz ustaw je w config.yml:" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "Plik OBB ma nowszą wersjęCode ({integer}) niż jakikolwiek pakiet APK:" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "Nazwa pliku OBB musi zaczynać się od \"main\". lub \"patch.\":" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "Nazwa pakietu OBB nie jest zgodna z obsługiwanym pakietem APK:" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Maszyna Offline, pomijając generowanie git mirror aż do ' fdroid deploy`" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "Jeden z elementów 'github_releases' nie posiada wartości 'packageNames'. pomijanie..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "Jeden z elementów 'github_releases' nie posiada wartości 'projectUrl'. pomijanie..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "Jeden z elementów 'github_releases' nie posiada wartości 'token'. pomijanie..." #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Tylko PNG i JPEG są obsługiwane dla grafiki, znaleziono: {path}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "Przetwarzaj tylko aplikacje z automatycznymi aktualizacjami" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Metody darowizn OpenCollective należą do OpenCollective: field" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Wyjście raportu JSON do pliku o nazwie po APK." #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "Wyjście JSON na stdout." #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "Wyprowadzanie JSON" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "Całkowita licencja na projekt." #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "Przesłaniam pustą versionName w {apkfilename} z metadanych: {version}" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "Pakiet \"{appid}\" już istnieje" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "Analizowanie manifestu w{path}" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "Hasło wymagane przy użyciu nazwy użytkownika" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "Ścieżka do głównego podkatalogu projektu Android, jeśli nie w katalogu głównym." #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "Ścieżka do zestawu SDK systemu Android (czasami jest ustawiona w ANDROID_HOME)" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "Ścieżka do repozytorium git do użycia jako dziennik" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "Ścieżka do magazynu kluczy dla klucza podpisywania repo" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Wydrukuj tajną zmienną do terminala, aby ułatwić kopiowanie/wklejanie" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "Tryb prywatności został włączony w oparciu o ustawienia regionalne ({country_code})." #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "Problem z plikiem ZIP: %s, błąd %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "Problem z xml na {path}" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "Proces auto aktualizacji" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "Przetwarzanie {apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "Przetwarzanie {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "Przygotuj czytelny dla człowieka XML/JSON dla plików index" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "Adres URL projektu do zaimportowania z." #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "Należy unikać interpunkcji" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "Przepchnij dziennik do tego zdalnego repozytorium git" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "Przesyłanie dziennika przejrzystości plików binarnych do {url}" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "Przesyłanie na serwer zdalny nie powiodło się!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "Wyślij do {url}" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "Szybko uruchom nowe repozytorium" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "Przeczytaj wszystkie pliki metadanych i zakończ" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "Czytaj '{config_file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "Nie można odczytać packageName/versionCode/versionName, niepoprawny pakiet APK: '{apkfilename}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "Nie udało się odczytać packageName/versionCode/versionName, nieprawidłowy plik APK: „{apkfilename}”" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "Czytanie {apkfilename} z pamięci podręcznej" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Odświeżanie i buforowanie reguł skanera i sygnatur z sieci" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "Usuń źródłowy plik tarball i wszystkie pliki APK, jeśli pomyślnie zweryfikowano." #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Usuwanie określonych plików" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "Usuwanie „{path}”" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "Zmień nazwy plików APK, które nie pasują do pliku package.name_123.apk" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "Rezygnacja z pliku {apkfilename} za pomocą dostarczonego pliku debug.keystore" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "Zmień rozmiar wszystkich ikon przekraczających maksymalny rozmiar pikseli i zakończ" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "Ogranicz wyjście do ostrzeżeń i błędów" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "Ponowna próba pobrania nie powiodła się: %s" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Przepisz wszystkie pliki metadanych" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "Przepisywanie '{appid}'" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "Uruchom ponownie repozytorium git z niescommitowanymi zmianami" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "Uruchom {cibase}, aby znaleźć -debug.apk. i pomiń repo_basedir {repo_basedir}" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "Uruchom rewritemeta, aby naprawić formatowanie" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "Uruchomienie pierwszego przejścia z wyłączonym sprawdzaniem MD5" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "Uruchomienie wget w {path}" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "SHA-256 z {url} nie pasuje do wpisu!" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "Przeskanuj otrzymany plik APK w poszukiwaniu znanych niewolnych klas." #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "Zeskanuj kod źródłowy pakietu" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "Skaner znalazł {count} problemy(-ów) w {apk}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "Skaner znalazł {count} problem w {appid}:" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "Skaner znalazł {count} problem w {appid}:{versionCode}:" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "Skaner znalazł {} problem" msgstr[1] "Skaner znalazł {} problemów" msgstr[2] "Skaner znalazł {} problemy" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "Skanowanie APK w poszukiwaniu dodatkowych bloków podpisywania." #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "Skanowanie pakietu APK za pomocą dexdump w poszukiwaniu znanych niewolnych klas." #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "Ustaw NDK {release} ({version})" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "Ustaw zegar na ten czas, używając:" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "Ustaw maksymalne wydania w repo przed archiwizacją starszych" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "Ustaw limit otwartych plików na {integer}" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "Skonfiguruj aplikację na nocne repozytorium" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "Ustawienie limitu otwartych plików nie powiodło się: " #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "Ustawienie limitu czasu {0} w sek dla tej kompilacji" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "Podpisz i umieść paczki w repozytorium" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "Zarejestruj indeksy utworzone przy użyciu update --nosign" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "Pomiń skanowanie kodu źródłowego dla plików binarnych i innych problemów" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "Pomijaj '{apkfilename}' z nieprawidłowym podpisem!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "Pomijanie serwera lustrzanego GitLab Pages, ponieważ repozytorium jest zbyt duże (>%.2fGB)!" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "Pomijaj generowanie indeksu dla {appid}" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "Pomijaj pliki {apkfilename} z nieprawidłowym podpisem!" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "Pomiń {appid}: wyłączone" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "Określ folder lokalny do synchronizacji repo do" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "Podaj plik tożsamości, który ma dostarczyć SSH dla rsyncing" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "Określ, który plik pliku kluczy debugowania ma zostać użyty." #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "Wypluwaj jeszcze więcej informacji niż zwykle" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "Usuwanie tajemniczego podpisu z {apkfilename}" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "Podsumowanie '%s' to tylko nazwa aplikacji" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "Podsumowanie długości {length} przekracza limit {limit} char" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "Zegar systemowy jest starszy niż data w {path}!" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "Tryb aktualizacji tagów działa obecnie tylko dla repozytoriów git, hg, bzr i git-svn" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "Tryb aktualizacji tagów użyty w git-svn, ale repozytorium nie zostało skonfigurowane z tagami" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Tryb testowy - umieszczaj dane wyjściowe tylko w katalogu tmp i zawsze buduj, nawet jeśli dane wyjściowe już istnieją." #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "Kod wersji OBB musi nadejść później \"{name}.\":" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "Podstawowy adres URL repo do logowania (default: https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "Katalog do zapisania kopii lustrzanej" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "Plik do uwzględnienia w repozytorium (ścieżka lub glob)" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "Odcisk palca repozytorium nie pasuje." #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "Katalog główny katalogu local_copy_dir \"{path}\" nie istnieje!" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "Istnieje kolizja keyalias - wstrzymano publikowanie" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "To są aplikacje, które zostały zarchiwizowane w głównym repozytorium." #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "To polecenie nigdy nie powinno być używane do tworzenia kopii lustrzanej f-droid.org! Pełna kopia wymaga więcej niż 600 GB." #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "To jest repozytorium aplikacji używanych z F-Droid. Aplikacje w tym repozytorium są albo oficjalnymi plikami binarnymi utworzonymi przez oryginalnych programistów aplikacji, albo plikami binarnymi utworzonymi ze źródła przez administratora f-droid.org przy użyciu narzędzi na https://gitlab.com/fdroid." #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "To repo ma już lokalne metadane: %s" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" "Aby zakończyć konfigurację, dodaj swoje pliki APK do „%s”\n" "następnie uruchom „fdroid update -c; fdroid update”. Możesz też chcieć zedytować\n" "„config.yml”, aby ustawić adres URL, nazwę repozytorium i inne. Powinieneś również skonfigurować\n" "klucz podpisu (tymczasowy mógł zostać wygenerowany automatycznie).\n" "\n" "Więcej informacji: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "i https://f-droid.org/docs/Signing_Process" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "Aby użyć awsbucket, awssecretkey i awsaccesskeyid muszą być również ustawione w config.yml!" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "Aby używać rclone, rclone_config i awsbucket muszą być one również ustawione w config.yml!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "Adres URL musi rozpoczynać się od https:// lub http://" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "Skróty adresów URL nie powinny być używane" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "Adres URL {url} w opisie {error}" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "Nieprawidłowy tag licencji \"{}\"! Używaj tylko tagów zgodnych z FSF lub OSI ze strony https://spdx.org/license-list" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Nieprawidłowy tag licencji \"{}\"! Używaj tylko tagów licencji skonfigurowanych w twoim pliku konfiguracji" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "Nieznany wpis {key} w {configname}" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "Znaleziono nieznany wyjątek!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "Nieznany plik '{filename}' w kompilacji '{versionName}'" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "Nieznany format metadanych: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "Nieznany format metadanych: {path} (użyj: *.yml)" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "Nieznana wersja programu aapt może powodować problemy: " #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "Niepotrzebna przestrzeń wiodąca" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "Niepotrzebne spacje końcowe" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "Nierozpoznane pole aplikacji '{fieldname}' w '{path}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Nierozpoznana flaga kompilacji '{build_flag}' w '{path}'" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "Nieobsługiwany typ pliku \"{extension}\" dla grafiki repo" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "Znaleziono nieobsługiwany plik graficzny: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "Niewykorzystane extlib o %s" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "Plik UNUSED, o %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "Nieużywana ścieżka scandelete: %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "Nieużywana ścieżka scanignore: %s" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Zaktualizuj informacje o repozytorium dla nowych pakietów" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "Zaktualizuj dziennik przejrzystości plików binarnych dla adresu URL" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData ma nieprawidłowy adres URL: {url}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "UpdateCheckData musi odpowiadać kodowi wersji jako liczba całkowita (\\d lub [0-9]): {codeex}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "UpdateCheckData musi używać adresu URL HTTPS: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "UpdateCheckData nie jest prawidłowym adresem URL: {url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode jest ustawiony, ale wygląda na to, że checkupdates nie został jeszcze uruchomiony" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName jest ustawiony na znany identyfikator aplikacji, można go usunąć" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "Przesyłanie {apkfilename} do androidobservatory.org" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "Przesyłanie {apkfilename} do virustotal" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Użyj /HEAD zamiast /master czy /main, aby wskazać plik w domyślnej gałęzi" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Użyj `fdroid update -c`, aby go utworzyć." #: ../fdroidserver/build.py msgid "Use build server" msgstr "Użyj serwera kompilacji" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "Użyj daty z pliku APK zamiast aktualnego dla nowo dodanych pakietów APK" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "Użyj \"{path}\" do konfiguracji s3cmd." #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "Używanie \"{path}\" do synchronizacji ze zdalnym dyskiem." #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "Używając APK Signature v2" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "Używając APK Signature v3" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "Używanie podpisu JAR" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Korzystanie z jarsignera Java nie jest zalecane do weryfikacji plików APK! Użyj apksigner" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "Używanie pustego słownika zamiast zawartości {path}!" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "Korzystanie z istniejącego magazynu kluczy \"{path}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "Używanie rsync do synchronizacji z: {url}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "Użyj s3cmd do synchronizacji z: {url}" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Prawidłowe polecenia to:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "Zweryfikuj lokalnie kopiowaną pamięć podręczną zamiast pobierać ponownie." #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "Sprawdź integralność pobranych pakietów" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "Weryfikowanie podpisu indeksu:" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "Weryfikacja pakietu {path} za pomocą apksigner." #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "Klucz VirusTotal API nie może przesyłać plików większych niż 32 MB, użyj {url}, aby przesłać {path}." #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Ostrzegaj o możliwych błędach metadanych" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "Plik binarny WebAssembly" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Po skonfigurowaniu dla indeksów podpisanych utwórz na tym etapie tylko niepodpisane indeksy" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "Podczas linkowania całego repozytorium yamllint jest domyślnie wyłączony. Ta opcja wymusza yamllint niezależnie od tego." #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "Jeśli podpisanie lub weryfikacja nie powiedzie się, zakończ z kodem błędu." #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "Czy chcesz pobrać i zainstalować F-Droid.apk przez adb? (TAK/NIE)" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "Czy chcesz pobrać aplikacje ze strony f-droid.org? (TAK/NIE)" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'Distinguished Name' używana podczas generowania kluczy" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "Możesz użyć ANDROID_HOME, aby ustawić ścieżkę do SDK, tj .:" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "Plik archiwum ZIP" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "adb zgłasza, że {serial} to \"{status}\"!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "dodawanie pliku IdentityFile do {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "dodaj do {name}: {path}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "niejednoznaczna opcja: %(option)s może dopasować %(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "apksigner w build-tools;{version} przekazuje pliki APK z nieprawidłowymi podpisami v3, ignorując je." #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "Nie znaleziono apksignera! Nie można podpisać ani zweryfikować nowoczesnych pakietów APK" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "apksigner nie znaleziono, jest wymagane do podpisania!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "Identyfikator aplikacji, na której ma działać" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "identyfikator aplikacji z opcjonalnym kodem wersji w postaci APPID [: VERCODE]" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "archive_url musi kończyć się na /archive" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "argument \"-\" w trybie %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "argument %(argument_name)s: %(message)s" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "próba połączenia odsłoniętego SSH w celu przetestowania klucza wdrożenia:" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "can not parse scrlib spec (not a string):' {}'" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "nie można otworzyć „%(filename)s”: %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "nie można otworzyć adresu URL innego niż https: „{}”" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "Nie można znaleźć wymaganych srclibs: \"{path}\"" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "nie może mieć wielu argumentów o różnych argumentach" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "nie można scalać działania - dwie grupy są nazywane %r" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "nie mogę opublikować aktualizacji, czy ustawiłeś klucz wdrożenia?" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "klonowanie {url}" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "polecenia z modułów plugin:" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "sprzeczny ciąg opcji: %s" msgstr[1] "sprzecznych ciągów opcji: %s" msgstr[2] "sprzeczne ciągi opcji: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "kolidujący alias subparsera: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "kolidujący subparser: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "nie można przeanalizować '{path}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "nie można przeanalizować specyfikacji srclib (nie podano nazwy): '{}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "could not parse srclib spec (no ref specified):' {}'" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "tworzony {path}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "aktualna wersja jest nowsza: stary vercode={old}, nowy vercode={new}" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "usuwanie: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "plik zależności bez blokady" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "wdrożony dziennik procesów {path} do {dest}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "dest = jest wymagany dla opcji takich jak %r" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "pobieranie „{}”" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "nie udało się pobrać sygnatur skanera z „{}”" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "wykonywalny binarny, ewentualnie kod" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "oczekiwany argument %s" msgstr[1] "oczekiwanych argumentów %s" msgstr[2] "oczekiwane argumenty %s" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "spodziewano się co najmniej jednego argumentu" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "spodziewano się co najwyżej jednego argumentu" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "oczekiwano jednego argumentu" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "fdroid [] [-h|--help|--version|]" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "pobierz najnowszą wersję sygnatur z sieci" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "wymuszaj błędy metadanych (domyślnie), aby były ostrzeżeniami lub aby zostały zignorowane." #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "klon git svn nie powiódł się" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "plik archiwum gzip" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "zignorował wyraźny argument %r" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1 musi mieć podpis, użyj `fdroid signindex` aby go utworzyć!" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 musi mieć podpis, użyj `fdroid signindex`, aby go utworzyć!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "nieprawidłowe %(type)s wartość: %(value)r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "nieprawidłowy wybór: %(value)r (wybierz z %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "niepoprawna wartość parametru conflict_resolution: %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "niepoprawny ciąg opcji %(option)r: musi zaczynać się od postaci %(prefix_chars)r" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "nie znaleziono ipfs_cid, pomijanie generowania CIDv1" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "najnowsza instrukcja kompilacji jest nowsza: stary vercode={old}, nowy vercode={new}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "local_copy_dir nie kończy się na \"fdroid\", może masz na myśli: \"{path}\"" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "local_copy_dir musi być ścieżką bezwzględną!" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "local_copy_dir musi być katalogiem, a nie plikiem!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "mirror '%s'nie kończy się na 'fdroid'!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "serwery lustrzane zostały ustawione dwukrotnie w config.yml i {path}!" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "wykluczające się wzajemnie argumenty muszą być opcjonalne" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "następna aktualizacja pamięci podręcznej {name} zaplanowana na {time}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "brak \"ikony\" w {appid}" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "nie dostarczono pakietu APK" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "nie znaleziono informacji o wersji" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "niedozwolone z argumentem %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "jeden z argumentów %s jest wymagany" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "akceptuje tylko łańcuchy, listy i krotki" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "opcje" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "nadpisanie istniejącego {path}" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "argumenty pozycyjne" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "proces wdrażania dziennika {path} do {dest} nie powiódł się!" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "brakujący podpis binarnego pliku odniesienia" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "odmów pobierania przez niezabezpieczone połączenie HTTP (użyj HTTPS lub określ --no-https-check): {apkfilename}" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "repo_icon \"repo / icons / %s\" nie istnieje, generuje symbol zastępczy." #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "repo_url musi kończyć się na /repo" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "rsync nie działa lub działa nieprawidłowo: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd zsynchronizuj indeksy {path} do {url} i usuń" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "s3cmd synchronizuje indeksy z {path} do {url} i usuwa usunięte" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "pamięć podręczna skanera jest zniszczona! Możesz to wyczyścić poleceniem: „{clear}”" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "serverwebroot: ścieżka nie kończy się na \"fdroid\", być może miałeś na myśli jedno z tych:" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "biblioteka współdzielona" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "pokaż ten komunikat pomocy i zakończ" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "podpisany plik APK - ścieżka do pliku lub URL HTTPS." #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "pomiń wdrażanie dzienników pełnej kompilacji: zawartość dziennika jest pusta" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "pomiń wdrażanie pełnych dzienników kompilacji: nie włączone w konfiguracji" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "pomijanie archiwum źródłowego: {path}" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "brak nazwy srclibs i/lub @" #: ../fdroidserver/scanner.py msgid "static library" msgstr "biblioteka statyczna" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "dostarczony referencyjny plik binarny umożliwił podpis {signer}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "wymagane są następujące argumenty: %s" #: ../fdroidserver/install.py msgid "true" msgstr "prawda" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "nieoczekiwany ciąg opcji: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "nieznana składnia (parser) %(parser_name)r (wybierz: %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "nierozpoznane argumenty: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "niebezpieczne uprawnienia na '{config_file}' (powinno być 0600)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "stosowanie: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "używając Apache libcloud do zsynchronizowania z {url}" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com jest ograniczenie stawki, czeka na ponowną próbę..." #: ../fdroidserver/install.py msgid "yes" msgstr "tak" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "{0} app, {1} kluczowy alias" msgstr[1] "{0} app, {1} kluczowe aliasy" msgstr[2] "{0} apps, {1} kluczowych aliasów" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) nie ma metadanych!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "{apkfilename} AndroidManifest.xml ma złą datę: " #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} nie ma nazwy! Zamiast tego używam identyfikatora aplikacji." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "{appid} z {path} nie jest prawidłowym identyfikatorem aplikacji na system Android!" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "{appid} z {path} nie jest prawidłową nazwą pakietu Java!" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "{appid} zawiera zarówno pliki APK, jak i pliki: {files}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "{appid} brakuje {name}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "{appid}: Nieznany extlib {path} w kompilacji '{versionName}'" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "{appid}: nie określono żadnych kompilacji, działa na bieżącym stanie źródła" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "{appid}: {field} musi być '{type}', ale to jest '{fieldtype}!'" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "{appid}: {field} musi być '{type}', ale to jest '{fieldtype}'!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "{build_flag} musi być liczbą całkowitą, znaleziono: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "{build_flag} musi być listą lub ciągiem, znaleziono: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "{file} jest pusty lub uszkodzony!" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" nie istnieje! Sprawdź \"config.yml\"." #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "{path} już istnieje, ignorowanie rezultatów importowania!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "{path} nie istnieje! Utwórz go, uruchamiając:" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "{path} ma zły podpis pliku \"{pattern}\", możliwe wykorzystanie Janusa!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} została oznaczona przez virustotal {count} razy:" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "{path} ma niewłaściwy odcisk palca {fingerprint}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "{path} nie jest słownikiem \"klucz: wartość\", lecz {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "{path} nie jest standardowym plikiem konfiguracyjnym!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "{path} inie jest listą, lecz {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "{path} nie jest {expected_type}, lecz {datatype}!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "{path} ma zerowy rozmiar!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "{path} więcej niż 200MB, przesłane ręcznie: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "{path}: \"{code}\" nie jest prawidłowym kodem ISO_3166-1 alpha-2 country!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "{path}: {error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "{url} nie kończy się na 'fdroid', sprawdź ścieżkę URL!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "{url} nie zaczyna się od \"http\"!" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "{} kompilacja nie powiodła się" msgstr[1] "{} kompilacji nie powiodło się" msgstr[2] "{} kompilacje nie powiodły się" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "{} kompilacja powiodła się" msgstr[1] "{} kompilacji powiodło się" msgstr[2] "{} kompilacje powiodły się" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/pt/0000755000175000017500000000000014770510164014606 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/pt/LC_MESSAGES/0000755000175000017500000000000014770510164016373 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/pt/LC_MESSAGES/fdroidserver.po0000644000175000017500000027124314770507747021457 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # ssantos , 2020, 2021, 2022, 2023, 2024, 2025. # Peter J. Mello , 2021. # Eduardo Rodrigues , 2021. # SC , 2022. # Hugo Carvalho , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.1-680-ge1d3de71\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2025-03-02 21:32+0000\n" "Last-Translator: ssantos \n" "Language-Team: Portuguese \n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 5.10.3-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "Chave pública SSH a ser usada como chave de implantação:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "{path} codificado para a variável secreta DEBUG_KEYSTORE:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" não tem ficheiro de metadados correspondente!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "\"local_copy_dir\" {path} não existe!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "'{apkfilename}' já está instalado no {dev}." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "\"{path}\" contém {name} ({version}) recente" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "\"{path}\" existe, mas s3cmd não está instalado!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "\"{path}\" não é um formato de ficheiro aceito (use: metadata/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "\"{path}\" está acessado por uma chave que não é permitida:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" não é uma URL válida!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: erro: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "%d APKs falharam a serem assinados ou verificados!" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d problemas encontrados" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%r não pode ser invocado" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "%s não produziu um dict!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "%s tem um SHA-256 ruim: %s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s não é um campo criado aceito" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' não foi encontrada em config.yml!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "\"keystore\" é NONE e \"smartcardoptions\" está vazio!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "'keystore' não encontrada em config.yml!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "'keystorepass' não encontrada em config.yml!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' não encontrada em config.yml!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required' é um argumento inválido para posicionadores" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "'sdk_path' não definido em 'config.yml'!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' é muito antigo, fdroid requer build-tools-{version} ou mais recente!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "'{path}' falhou ao executar!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' tem um formato inválido, deveria ser um dicionário!" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' não é um {field} válido em {appid}. Modelo regex: {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' não é um {field} válido, deve ser {pattern}" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "--merge-request só é executado num único appid!" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...checkupdate falhou para {appid} : {error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() não definida" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "/issues está em falta" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "Uma URL é necessária como um argumento!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "As assinaturas do APK têm certificados diferentes em {path}:" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "Adicione assinaturas PGP usando GnuPG para os pacotes no repositório" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "Adicionar uma chave de assinatura para um repositório não assinado" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "Adicionar ficheiros de metadados de esqueleto para APKs que estão faltando-lhes" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "Adicionando novo repositório para apenas {name}" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "Alias (apelido) da chave de assinatura do repositório na keystore" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "AllowedAPKSigningKeys está ausente, mas o binário de referência foi fornecido" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "Permite que uma revisão diferente (ou árvore do git) seja especificada para a importação inicial" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "Também espelhar o ficheiro completo da secção" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "Também avisar sobre problemas de formatação, como rewritemeta -l" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "Biblioteca AAR do Android" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "Ficheiro APK do Android" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "Código DEX do Android" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "SDK do Android não foi encontrado em {path}!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "O caminho do SDK Android '{path}' não existe!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "O caminho do SDK Android '{path}' não é um diretório!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "Ferramenta {cmd} do Android SDK não foi encontrada!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "A app tem binários, mas não tem AllowedAPKSigningKeys correspondentes para fixar o certificado." #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "A app tem NoSourceSince ou ArchivePolicy \"0 versions\" ou 0, mas AutoUpdateMode ou UpdateCheckMode não são None" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "A App está em '{repo}' mas tem uma hiperligação para {url}" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "A versão da app tem um binário, mas não tem as AllowedAPKSigningKeys correspondentes para fixar o certificado." #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "Acrescentar .git não é necessário" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "Arquivamento {apkfilename} com assinatura inválida!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode com UpdateCheckMode: HTTP deve ter um modelo." #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "Não automático a todos os avisos." #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "Sim automático a todos os avisos." #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "Tipo de entrada \"{mirrortype}\" incorreto na configuração de espelhos: {mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "URL base para espelhar, pode incluir a chave de assinatura de índice usando a cadeia de consulta: ?fingerprint =" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "Filial '{branch} 1' usada como commit no build '{versionName} 2'" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "Ramificação '{branch}' usado como commit em srclib '{srclib}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "Ligação simbólica quebrada: {path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "Construir pacote através da fonte" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "Compilar todos as aplicações disponíveis" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "Compilação gerada por `fdroid import` - remove a linha de desativação quando estiver pronto" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "Construir metadados git repo não tem mudanças comprometidas!" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "Compilar apenas a última versão de cada pacote" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "Repo construído baseado em \"%s\" com esta configuração:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "Aplicação não pode ser auto-atualizada sem CurrentVersionCode" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Não é possível construir devido a erro {} durante a digitalização" msgstr[1] "Não é possível construir devido a erros {} durante a digitalização" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Não é possível reescrever \"{path}\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "As categorias '%s' não são válidas" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "As categorias não são definidas" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "Categoria \"{category}\" definida, mas não usada para nenhuma app!" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Verificação de actualizações das aplicações" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "Verificando o arquivamento para {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Atualização limpa - não usa cache, reprocessa todos os APKs" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "Colorir o registo de saída" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Lista de categorias separadas por vírgula." #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "Comando '%s' não reconhecido.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "Enviar alterações" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "Confirme as alterações, envie e faça um pedido de fusão" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "Definições contraditórias de \"{field}\" entre ficheiros .yml e ficheiros localizados:" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Argumentos conflitantes: \"--verbose\" e \"--quiet\" não podem ser especificados ao mesmo tempo." #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "Não foi possível encontrar '{command}' no seu sistema" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Não foi possível encontrar o código de versão mais recente" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Não foi possível encontrar o nome da versão mais recente" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "Não foi possível localizar {path} para removê-lo" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "Não foi possível abrir o APK {path} para análise: " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Não foi possível analisar o tamanho \"{size}\", tipo \"{type}\" incorreto" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Não foi possível encontrar o ID da aplicação" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "Não foi encontrada qualquer informação da versão" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "Não foi possível encontrar o ID do pacote" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "Cobardemente recusando substituir a configuração da chave de assinatura existente!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "Novo contentor criado: \"{name}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Criando \"{path}\" para configurar s3cmd." #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Creating empty {config_file}" msgstr "A ler '{config_file}'" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Criando o diretório de log" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "Criando novo bucket S3: {url}" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "Criando diretório de output" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "Criando índice assinado com esta chave (SHA256):" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "Criando diretório temporário" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "Criação de índice não assinado em preparação para assinatura" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "CurrentVersionCode {cv} é menor que a entrada mais antiga de build {versionCode}" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "DEBUG_KEYSTORE não está definido ou o valor está incompleto" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "Eliminação de APK'S e/ou OBBs que não contêm metadados do repositório" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "Apagar ficheiro, o reporte é muito grande ({size} max {limit})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "Apagar o histórico do git-mirror, o repo é muito grande ({size} max {limit})" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "Apagando o ficheiro desconhecido: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "Descrição '%s' é apenas o resumo da app" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "A descrição tem uma linha duplicada" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "A descrição de comprimento {length} é sobre o limite de char {limit}" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "Quis dizer config/{name}.yml?" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "Quis dizer {code}?" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "Não adicionar 'disable:' às entradas de compilação geradas" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "Não implante os novos ficheiros no repositório" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "Não incluir \"{path}\" no URL!" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "Não solicitar o caminho do Android SDK, apenas falhe" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "Não remover as chaves privadas geradas do keystore" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "Não criar um tarball da fonte; útil quando testando uma compilação" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "Não atualizar o repositório; útil quando testando uma compilação sem conexão com a internet" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "Não usar as somas de verificação (checksums) do rsync" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "Descarregue o F-Droid.apk utilizando espelhos que vazam menos para a rede" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Descarregar espelhos completos de repos pequenos" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "O descarregamento do repositório já falhou uma vez, não tento novamente." #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "Descarregar {url} falhou. {error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "A declaração duplicada da característica indesejada em {path} foi ignorada!" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "Entrada \"%s\" duplicada na configuração de espelhos!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "Ligação duplicada em '{field}': {url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "ERRO: %(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "ERRO: o subcomando \"server\" foi removido, use \"deploy\"!" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "ERRO: tipo de CI sem suporte, patches são bem-vindos!" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "ERRO: host de git \"%s\" não suportado, patches são bem-vindos!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "ERRO: {key} em {path} não é \"arquivo\" ou \"repositório\"!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "ERRO: {key}:{subkey} em {path} não está nas chaves permitidas: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "A codificação está definida como '{enc}' fdroid pode ter problemas de codificação. Por favor, configure-o para 'UTF-8' para obter melhores resultados." #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" "Digite o caminho para o SDK do Android (%s) aqui:\n" "> " #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "A variável de ambiente {var} de {configname} não está definida!" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "A variável de ambiente {var} de {configname} não está definida!" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "Erro ao implementar 'github_releases', {} não está presente. (Pode ser necessário executar `fdroid update` primeiro.)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "Erro ao obter o endereço do repo" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "Sair com um código diferente de zero se problemas forem encontrados" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "Extrair metadados de aplicações de um repositório de origem" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "Extrato de assinaturas de APKs" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "Não foi possível descarregar o F-Droid.apk de nenhuma fonte conhecida!" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "Falha ao copiar {path}: {error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "Falha ao buscar assinaturas para '{apkfilename}': {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "Falha de leitura {path}: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "Falha ao redimensionar {path}: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "Falha ao criar o bucket S3: {url}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "Falha ao obter informações do APK, apagando {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "Falha ao obter informações do APK, ignorando {path}" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "Falha ao obter a impressão digital da chave de assinatura do APK" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "Falha ao instalar '{apkfilename}' em {dev}: {error}" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "Falha ao assinar a app" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "Buildserverid obtido da VM: {buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "Assinaturas obtidas para '{apkfilename}'-> '{sigdir}'" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "O ficheiro desapareceu enquanto era processado: {path}" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "Terminado" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Tags HTML proibidos" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "Forçar a compilação de apps desativados e continuar independentemente de problemas de escaneamento. Apenas permitido no modo de teste." #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "Forçar suspender a construção depois de esperar {0} segundos!" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "Forçar a análise de apps e construções desativados." #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "\"{path}\" gráfico encontrado sem metadados para o app \"{name}\"!" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "Ficheiro de financiamento ruim \"{path}\" encontrado para \"{name}\":" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "appids inválidos encontrados em argumentos" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "versionCodes inválidos encontrados para algumas apps" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "Vários ficheiros de blocos de assinaturas JAR foram encontrados em {path}" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "Vários certificados de assinante foram encontrados!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "Encontrados vários ficheiros de metadados para {appid}" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "Vários certificados de assinatura encontrados para o repositório." #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "Nenhum certificado de assinatura para repositório encontrado." #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "Não-ficheiro encontrado em %s" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "{apkfilename} encontrado em {url}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "{count} problemas encontrados em {filename}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "{count} avisos encontrados em {filename}" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "Gerado esqueleto de metadados para {appid}" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "Git checkout de '%s' falhou" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "Git clean falhou" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "Git fetch falhou" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Git remote set-head falhou: \"%s\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Git reset falhou" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "Falha no submódulo deinit do Git" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "Git submodule sync falhou" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "Git submodule update falhou" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "HTTPS deve ser usado nos URLs do Subversion!" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "Se um espelho git ficar muito grande, permite que o arquivo seja apagado" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "Se esse envio falhar, tente enviar manualmente para {url}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "A ignorar '{field}' em metadados '{metapath}' porque é depreciado." #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "A ignorar a entrada FUNDING.yml por mais que 2048: %s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "A ignorar o elemento mau no manifesto: %s" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "{oldfile} está obsoleto, use {newfile}" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Ignorando o pacote sem metadados: " #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "Ignorando dados de cache obsoletos para {apkfilename}" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "Incluir APKs assinados com algoritmos desativados como MD5" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "Incluir os ficheiros .asc da assinatura PGP no espelho" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "Incluir os registos de construção no espelho" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "Incluir os tarballs de fontes no espelho" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "Incluindo metadados de %s@%s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "Incluindo metadados de {path}" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "Inicializando submódulos" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "Instalar todas as aplicações assinadas disponíveis" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "Instalação dos pacotes compilados no aparelho" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "A instalar %s…" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "A instalar '{apkfilename}' em {dev}…" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "Interacção com o repositório do servidor HTTP" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "APK inválido" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "AutoUpdateMode inválido: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "UpdateCheckMode inválido: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "VercodeOperation inválido: {field}" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "VercodeOperation inválido: {invalid_ops}" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "ID da aplicação {appid} inválido" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Lista com marcadores inválida" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "Nome inválido para o ficheiro publicado: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "Ndk inválido: entrada na compilação: \"{ndk}\"" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "Redirecionamento inválido para não-HTTPS: {before} -> {after} " #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "Metadados de scrlib inválidos: '{file}' não existe" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "Metadados de srclib inválidos: não foi possível analisar \"{file}\"" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "Metadados de srclib inválidos: chave \"{key}\" desconhecida no \"{file}\"" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "A assinatura JAR falhou a verificação: {path}" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "Assinatura JAR verificada: {path}" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "Ficheiro Java JAR" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "O Java JDK não foi encontrado! Instalar no local predefinido ou definir java_paths!" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "Classe Java compilada" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "Java jarsigner não encontrado! Instale no local predefinido ou define java_paths!" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "JavaScript em atributos HTML src" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "Mantendo a compilação com falha \"{apkfilename}\"" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "Armazenamento de chaves de assinatura:\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "A chave de depuração conhecida é usada em AllowedAPKSigningKeys: " #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "O último commit usado '{commit}' parece-se com uma tag, mas o UpdateCheckMode (modo de verificação de atualização) é '{ucm}'" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "Os métodos de doação de Liberapay pertencem no campo Liberapay:" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "Listar ficheiros que devem ser reformatados (execução a seco)" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "Locale incluído no URL do f-droid.org" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "Fazer a compilação parar se encontrar exceções" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "Espelhos de repositório malformados." #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "Linha de serverwebroot malformada:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "Profundidade máxima de recursão no ficheiro ZIP atingida: %s" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Espelha todo o repositório e pacotes, todos os tipos de ficheiros." #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "Falta diretório de saída" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "A mover as declarações de características indesejadas para ficheiros localizados:" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "Nem \"repo_pubkey\" nem \"keystorepass\" definidos em config.yml" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "Nenhum APK para o pacote: %s" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "Android SDK não encontrado!" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "Nenhum aparelho anexado encontrado" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "Nenhum dispositivo encontrado para `adb install`! Ligue um." #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "Nenhuma impressão digital no URL." #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "Não há submódulos git disponíveis" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "Não foi possível encontrar nenhum projeto de gradle. Especificar --subdir?" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "Nenhuma informação encontrada." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "Não foram encontradas marcações correspondentes" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "Nenhuma versão mínima do SDK encontrada em {0}, a usar a predefinição (3)." #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "Não há necessidade de especificar que o app é software livre" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "Não há necessidade de especificar que o app é para Android" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "Sem opção definida! Edite seu config.yml para definir pelo menos um destes:" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "Nenhum pacote especificado" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "Nenhum APK assinado disponível para %s" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "Nenhum diretório de saída assinado - nada a fazer" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "Nenhum certificado de assinatura encontrado em {path}" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "Nenhum pacote desses: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "Nenhum versionCode {versionCode} para o app {appid}" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "Nenhuma etiqueta encontrada" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "Nenhum diretório não assinado - nada a fazer" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "Não foi possível encontrar informações de versão." #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "Não é uma definição de tamanho válida: \"{}\"" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "Nada para fazer" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "Nada a fazer para {appid}." #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "Agora configure estes em config.yml:" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "OBB tem versionCode ({integer}) mais recente que qualquer APK:" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "O nome do ficheiro OBB deve começar com \"main.\" ou \"patch.\":" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "O packagename do OBB não corresponde a um APK suportado:" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "A máquina está offline, a saltar a geração de espelhos de git até o `fdroid deploy'" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "Um dos itens de configuração 'github_releases' está a faltar o valor 'packageNames'. A ignorar ..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "Um dos itens de configuração 'github_releases' não tem o valor 'projectUrl'. A ignorar ..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "Um dos itens de configuração 'github_releases' não tem o valor 'token'. A ignorar ..." #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Somente PNG e JPEG são suportados para gráficos, encontrado: {path}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "Processar apenas apps com atualizações automáticas" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Os métodos de doação OpenCollective pertencem no campo OpenCollective:" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Saída de relatório JSON para ficheiro nomeado após APK." #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "Saída de JSON para stdout." #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "Saída do JSON" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "Licença geral do projeto." #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "Substituindo versionName em branco em {apkfilename} dos metadados: {version}" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "O pacote \"{appid}\" já existe" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "Analisando o manifesto em '{path}'" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "Palavra-passe necessária com o nome de utilizador" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "Caminho para o subdiretório principal do projeto Android, se não estiver na raiz." #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "Caminho até o Android SDK (algumas vezes definido em ANDROID_HOME)" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "Caminho para o repositório git para usar como log" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "Caminho até a keystore para a chave de assinatura do repositório" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Imprimir a variável secreta para o terminal para copiar/colar fácilmente" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "O modo de privacidade foi ativado com base na sua localização ({country_code})." #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "Problema com o ficheiro ZIP: %s, erro %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "Problema com xml em '{path}'" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "Processar atualizações automáticas" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "A processar {apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "A processar {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "Produzir XML/JSON legível por humanos para ficheiros de índice" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "URL do projeto para importar." #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "A pontuação deve ser evitada" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "Submeter o registo de eventos para este repositório git remoto" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "A submeter o registo de transparência de binário para {url}" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "Falha ao submeter para o servidor remoto!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "A submeter para {url}" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "Criar rapidamente um novo repositório" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "Ler todos os ficheiros de metadados e sair" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "A ler '{config_file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "A leitura de packageName/versionCode/versionName falhou, APK inválido: '{apkfilename}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "Falha ao ler packageName/versionCode/versionName, APK inválido: '{apkfilename}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "Lendo {apkfilename} do cache" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Atualizar e armazenar as regras e assinaturas do scanner da rede no cache" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "Remover tarball de código-fonte e todos APKs se for verificado com sucesso." #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Apagando ficheiros especificados" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "A remover {path}\"" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "Renomear todos os ficheiros APKs que não correspondem com package.name_123.apk" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "Renunciando {apkfilename} com debug.keystore fornecido" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "Redimensionar todos os ícones que excedam o tamanho máximo de pixels e sair" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "Restringir a saída a erros e avisos" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "Nova tentativa de descarga com falha: %s" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Regravar todos os ficheiros de metadados" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "Reescrevendo '{appid}'" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "Executar no repo git que tem alterações não confirmadas" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "Passar por cima de {cibase} para encontrar -debug.apk. e ignorar repo_basedir {repo_basedir}" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "Executar rewritemeta para corrigir a formatação" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "Executando a primeira passagem com a verificação de MD5 desativada" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "Executando o wget em {path}" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "O SHA-256 de {url} não corresponde à entrada!" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "Procure no(s) APK(s) resultante(s) por classes conhecidas não livres." #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "Analisar o código fonte de um pacote" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "O scanner encontrou {count} problemas em {apk}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "O scanner encontrou {count} problemas em {appid}:" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "O scanner encontrou {count} problemas em {appid}:{versionCode}:" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "Scanner encontrou {} problema" msgstr[1] "Scanner encontrou {} problemas" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "A verificar a APK em busca de blocos de assinatura extra." #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "A verificar o APK com dexdump por classes não-livres conhecidas." #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "Definir NDK {release} ({version}) para cima" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "Configurar o relógio para esse tempo usando:" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "Definir o máximo de lançamentos no repo antes que os mais antigos sejam arquivados" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "Definir o limite de ficheiros abertos para {integer}" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "Configurar uma compilação de app para um repositório de compilação noturno" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "Falha ao definir o limite de ficheiros abertos: " #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "Definindo o tempo limite de {0} seg para esta compilação" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "Assinar e pôr os pacotes no repositório" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "Assinar os índices criados com o uso de update --nosign" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "Pular o escaneamento do código-fonte atrás de binários e outros problemas" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "Ignorando '{apkfilename}' com uma assinatura inválida!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "A ignorar o espelho do GitLab Pages porque o repositório é muito grande (>%.2fGB)!" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "Ignorando a geração de índices para {appid}" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "Ignorando '{apkfilename}' com uma assinatura inválida!" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "Ignorando {appid}: desativado" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "Especifique uma pasta local para ser sincronizada com o repositório" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "Especifique um ficheiro identidade para fornecer ao SSH para usar o rsync" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "Especifique o ficheiro de armazenamento de chaves de depuração." #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "Mostrar ainda mais informações que o normal" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "Esvaziar a assinatura misteriosa de {apkfilename}" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "O resumo '%s' é apenas o nome do app" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "A descrição de comprimento {length} é sobre o limite de charácteres {limit}" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "O relógio do sistema é mais antigo que a data em {path}!" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "O modo de atualização de marcações só funciona atualmente para repositórios git, hg, bzr e git-svn" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "Modo de atualização de marcações usado no git-svn, mas a repo não foi configurada com marcações" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Modo de teste - ponha a saída apenas no diretório tmp e sempre compile, mesmo que a saída já exista." #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "O código de versão OBB deve estar após \"{name}.\":" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "O URL base para o registo de mudanças do repositório (predefinição: https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "O diretório para onde escrever o espelho" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "O ficherio a ser incluído no repo (caminho ou glob)" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "A impressão digital do repositório não corresponde." #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "O diretório raiz para local_copy_dir \"{path}\" não existe!" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "Há uma colisão do keyalias - publicação parada" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "Estas são as aplicações que foram arquivadas do repositório principal." #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "Este comando nunca deve ser usado para espelhar o f-droid.org! Uma cópia completa requer mais que 600GB." #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "Este é um repositório de apps a serem usados com o F-Droid. Aplicações neste repositório são binários oficiais compilados pelos programadores da aplicação original ou são binários compilados da fonte por f-droid.org a usar as ferramentas em https://gitlab.com/fdroid." #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "Este repositório já tem metadados locais: %s" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" "Para completar a configuração, adicione os seus APKs ao \"%s\",\n" "depois execute \"fdroid update -c; fdroid update\". Também pode editar\n" "\"config.yml\" para definir a URL, nome do repo, e muito mais. Também deve configurar\n" "uma chave de assinatura (uma chave temporária pode ter sido gerada automaticamente).\n" "\n" "Para mais informações: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "e https://f-droid.org/docs/Signing_Process" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "Para usar awsbucket, os awssecretkey e awsaccesskeyid também devem ser definidos no config.yml!" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "Para usar rclone, rclone_config e awsbucket também devem ser definidos no config.yml!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "A URL deve começar com https:// ou http://" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "Encurtadores de URL não devem ser usados" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "Há o URL {url} na descrição: {error}" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "Etiqueta de licença \"{}\" inesperada! Use somente as etiquetas aprovadas pela FSF ou OSI de https://spdx.org/license-list" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Etiqueta de licença \"{}\" inesperada! Use somente as etiquetas de licença configuradas no seu ficheiro de configuração" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "Entrada {key} desconhecida em {configname}" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "Exceção desconhecida!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "Ficheiro desconhecido '{filename}' na compilação '{versionName}'" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "Formato de metadados desconhecido: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "O formato de metadados é desconhecido: {path} (use: *.yml)" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "Versão desconhecida do aapt, pode causar problemas: " #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "Espaço desnecessário à frente" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "Espaço desnecessário ao fim" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "Campo de aplicação '{fieldname}' não reconhecido em '{path}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Bandeira de compilação '{build_flag}' não reconhecida em '{path}'" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "Tipo de ficheiro \"{extension}\" não suportado para o gráfico de repo" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "Ficheiro gráfico não suportado encontrado: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "Extlib não utilizado em %s" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "Ficheiro não utilizado em %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "O caminho de scandelete não é usado: %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "O caminho de scanignore não é usado: %s" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Atualizar a informação do repositório para novos pacotes" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "Atualizar o registo de transparência de binário para um URL" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData tem URL inválido: {url}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "UpdateCheckData deve corresponder ao código da versão como inteiro (\\d ou [0-9]): {codeex}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "UpdateCheckData deve usar um URL HTTPS: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "UpdateCheckData não é uma URL válida: {url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode é definido, mas parece que likecheckupdates ainda não foi executado." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName (o nome da verificação de atualização) é definido como o ID comun da aplicação - pode ser removido" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "A enviar {apkfilename} ao androidobservatory.org" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "A enviar {apkfilename} ao virustotal" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Use /HEAD em vez de /master ou /main para apontar a um ficheiro no ramo predefinido" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Use ' fdroid update -c ' para criá-lo." #: ../fdroidserver/build.py msgid "Use build server" msgstr "Usar servidor de compilação" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "Use da data do APK em vez do tempo atual para APKs recém-adicionados" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "Usando \"{path}\" para configurar s3cmd." #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "A usar \"{path}\" para sincronizar com o armazenamento remoto." #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "A usar a assinatura APK v2" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "A usar a assinatura APK v3" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "A usar a assinatura JAR" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Usando o jarsigner de Java, não recomendado para verificar APKs! Use apksigner" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "A utilizar um dicionário em branco em vez do conteúdo de {path}!" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "Utilizando armazenamento de chave existente \"{path}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "A usar rclone para sincronizar com: {url}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "Usando s3cmd para sincronizar com: {url}" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Comandos válidos:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "Verifique a cópia em cache local em vez de redescarregando." #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "Verifique a integridade dos pacotes descarregados" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "Verificar o índice de assinatura:" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "A verificar o pacote {path} com apksigner." #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "A chave VirusTotal API não pode enviar ficheiros maiores que 32MB, use {url} para enviar {path}." #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Avisar sobre possíveis erros de metadados" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "Ficheiro binário WebAssembly" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Quando configurado para índices assinados, crie apenas índices não assinados nesta etapa" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "Ao cotar todo o repositório o yamllint é desativado por predefinição. Esta opção força o yamllint independentemente." #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "Se assinar ou verificar falhar, sair com um código de erro." #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "Gostaria de descarregar e instalar o F-Droid.apk via adb? (SIM/não)" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "Gostaria de descarregar a(s) aplicação(ões) do f-droid.org? (SIM/não)" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'Distiguished Name' usado na geração de chaves" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "Pode usar ANDROID_HOME para definir o caminho para o seu SDK, ou seja:" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "Arquivo de ficheiros ZIP" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "adb reporta {serial} é \"{status}\"!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "adicionando IdentityFile a {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "adicionando a {name}: {path}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "opção ambígua: %(option)s poderia corresponder %(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "apksigner nos build-tools;{version} passa APKs com assinaturas v3 inválidas, ignorando." #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "apksigner não encontrado! Não é possível assinar ou verificar APKs modernos" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "Nenhum apksigner encontrado, é necessário para assinar!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "ID de aplicação do ficheiro para operar" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "applicationID com versionCode opcional na forma APPID[:VERCODE]" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "archive_url precisa de terminar com /archive" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "argumento \"-\" com o modo %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "argumento %(argument_name)s: %(message)s" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "tentar a conexão nua por SSH para testar a implantação da chave:" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "não é possível analisar as especificações do scrlib (não é uma cadeia): '{}'" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "não é possível abrir '%(filename)s': %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "não é possível abrir o url não-https: '{};" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "não é possível encontrar os srclibs necessários: \"{path}\"" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "não é possível ter vários argumentos de subparser" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "não é possível unir ações - dois grupos são denominados %r" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "não é possível publicar a atualização, definiu a chave de implantação?" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "clonagem {url}" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "comandos dos módulos de plugin:" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "cadeia de opções conflitante: %s" msgstr[1] "cadeias de opções conflitantes: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "alias de subanalisador conflitante: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "subanalisador conflitante: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "não foi possível analisar '{path}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "não foi possível analisar a especificação srclib (nenhum nome especificado): '{}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "não foi possível analisar a especificação srclib (referência não especificada): '{}'" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "{path} criado" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "a versão atual é mais nova: velho vercódigo={old}, novo vercódigo={new}" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "apagando: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "ficheiro de dependência sem bloqueio" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "registo de processo implantado {path} a {dest}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "dest = é necessário para opções como %r" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "a descarregar '{}'" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "a descarga de assinaturas de scanner de '{}' falhou" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "binário executável, possivelmente código" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "%s argumento esperado" msgstr[1] "%s argumentos esperados" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "esperado pelo menos um argumento" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "esperado um argumento no máximo" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "esperado um argumento" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "fdroid [] [-h|--help|--version|]" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "buscar a versão de assinaturas mais recente da Web" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "Forçar os erros de metadados (padrão) para serem avisos, ou para serem ignorados." #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "git svn clone falhou" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "arquivo de ficheiros gzip" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "argumento explícito %r ignorado" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1 deve ter uma assinatura, use ' fdroid signindex ' para criá-lo!" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 deve ter uma assinatura, use droid signindex` para o criar!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "valor inválido do tipo %(type)s: %(value)r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "opção inválida: %(value)r (escolha de %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "valor conflict_resolution inválido: %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "Opção cadeia %(option)r inválida: deve começar com o caractere %(prefix_chars)r" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "ipfs_cid não encontrado, a ignorar a geração de CIDv1" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "a última receita de construção é mais recente: velho vercódigo={old}, novo vercódigo={new}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "local_copy_dir não termina com \"fdroid\", talvez quis: \"{path}\"" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "local_copy_dir deve ser um caminho absoluto!" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "local_copy_dir deve ser directory, não um ficheiro!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "espelho '%s' não termina com 'fdroid'!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "espelhos (mirrors) definidos duas vezes, em config.yml e em {path}!" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "argumentos mutuamente exclusivos devem ser opcional" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "próxima atualização do cache {name} prevista para {time}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "nenhum \"ícone\" em {appid}" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "nenhum APK fornecido" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "nenhuma informação de versão encontrada" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "não é permitido com o argumento %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "um dos argumentos %s é necessário" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "apenas aceita cadeias, listas e tuplos" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "opções" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "sobrescrevendo {path} existente" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "argumentos posicionais" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "a implementação do registo de processo {path} a {dest} falhou!" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "binária de referência sem assinatura" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "Recusado a descarrega via conexão HTTP insegura (use HTTPS ou especifique --no-https-check): {apkfilename}" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "repo_icon \"repo/icons/%s\" não existe, a gerar um espaço reservado." #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "repo_url precisa de terminar com /repo" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "rsync está ausente ou quebrado: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd sincroniza índices {path} para {url} e apaga" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "s3cmd sincroniza os índices de {path} para {url} e elimina os removidos" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "o cache do scanner está malformado! Pode limpá-lo com: '{clear}'" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "serverwebroot: o caminho não termina com \"fdroid\", talvez queria usar um destes:" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "biblioteca partilhada" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "mostrar esta ajuda e sair" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "APK assinado, seja um caminho de ficheiro ou um URL HTTPS." #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "pular a implantação de logs completos de compilação: o conteúdo do log está vazio" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "pular a implantação de logs de criação completos: não ativado na configuração" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "ignorando o tarball de origem: {path}" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "Nome 'srclibs' ausente e/ou '@'" #: ../fdroidserver/scanner.py msgid "static library" msgstr "biblioteca estática" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "o binário de referência fornecido tem o assinante permitido {signer}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "os seguintes argumentos são necessários: %s" #: ../fdroidserver/install.py msgid "true" msgstr "verdadeiro" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "opção de cadeia de texto inesperada: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "O formato '%(parser_name)r' é desconhecido. (Opções Válidas: %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "argumentos não reconhecidos: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "permissões inseguras em '{config_file}' (deveria ser 0600)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "utilização: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "usando o Apache libcloud para sincronizar com {url}" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "o virustotal.com está a limitar a taxa, à espera para voltar a tentar..." #: ../fdroidserver/install.py msgid "yes" msgstr "sim" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "{0} app, {1} aliases chave" msgstr[1] "{0} apps, {1} aliases chave" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) não tem metadados!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "AndroidManifest.xml do {apkfilename} tem uma data má: " #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} não tem um nome! A usar o ID da aplicação em vez disso." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "{appid} de {path} não é um ID de aplicação Android válido!" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "{appid} do {path} não é um Nome de Pacote Java válido!" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "{appid} tem APKs e ficheiros: {files}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "{appid} tem falta de {name}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "{appid}: extlib {path} desconhecido na compilação '{versionName}'" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "{appid}: nehnuma compilação especificada, em execução no estado de origem atual" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "{appid}: {field} deve ser um '{type}', mas é um '{fieldtype}!'" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "{appid}: {field} deve ser um '{type}', mas é um '{fieldtype}'!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "{build_flag} deve ser um inteiro, encontrado: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "{build_flag} deve ser uma lista ou uma cadeia de caracteres, encontrado: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "{file} está em branco ou corrompido!" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" não existe! Corrija-o no \"config.yml\"." #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "{path} já existe, a ignorar os resultados das importações!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "{path} não existe! Crie-o executando:" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "{path} tem uma má assinatura de ficheiro \"{pattern}\", um exploração Janus é possível!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} foi marcado por virustotal {count} vezes:" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "{path} tem a impressão digital errada ({fingerprint})!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "{path} não é um dicionário \"key: value\", mas um {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "{path} não é um ficheiro de configuração padrão!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "{path} não é uma lista, mas um {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "{path} não é um {expected_type}, mas um {datatype}!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "{path} tem um tamanho de zero!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "{path} mais que 200MB, enviar manualmente: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "{path}: \"{code}\" não é um código de país ISO_3166-1 alfa-2 válido!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "{path}: {error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "{url} não termina com \"fdroid\", verifique o caminho na URL!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "{url} não começa com \"http\"!" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "{} compilação falhada" msgstr[1] "{} compilações falhadas" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "{} compilação com sucesso" msgstr[1] "{} compilações com sucesso" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/pt_BR/0000755000175000017500000000000014770510164015171 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/pt_BR/LC_MESSAGES/0000755000175000017500000000000014770510164016756 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/pt_BR/LC_MESSAGES/fdroidserver.po0000644000175000017500000027367314770507747022053 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # Wellington Terumi Uemura , 2020. # André Marcelo Alvarenga , 2020. # Hans-Christoph Steiner , 2020, 2024. # Rafael Fontenelle , 2020, 2021. # ssantos , 2020. # The Cats , 2020. # Eduardo Rodrigues , 2021. # Flavio F. M. , 2022. # The Cats , 2023. # lucasmz-dev , 2024. # Jose Delvani , 2024. # Jose Delvani , 2024. # LucasMZ , 2024, 2025. # dedakir923 , 2024. # Igor Rückert , 2025. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2025-03-21 18:43+0000\n" "Last-Translator: LucasMZ \n" "Language-Team: Portuguese (Brazil) \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 5.11-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "Chave pública SSH para ser usada como chave de implantação:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "{path} codificado para a variável secreta DEBUG_KEYSTORE:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" não tem arquivo de metadados correspondente!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "A chave \"isPrimary\" não deve ser adicionada em espelhos!" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "O diretório raiz para \"local_copy_dir\" {path} não existe!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" já está instalado em {dev}." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "\"{path}\" contém {name} ({version}) recente" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "\"{path}\" existe, mas s3cmd não está instalado!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "\"{path}\" não é um formato aceito (use: metadata/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "\"{path}\" é assinado por uma chave que não é permitida:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" não é uma URL válida!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: erro: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "%d APKs falharam em serem assinados ou verificados!" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d problemas encontrados" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%r não é chamável" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "%s não produziu um dict!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "%s tem SHA-256 ruim: %s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s não é um campo criado aceito" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' não foi encontrada em config.yml!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "\"keystore\" é NONE e \"smartcardoptions\" está vazia!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "'keystore' não encontrada em config.yml!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "'keystorepass' não encontrada em config.yml!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' não encontrada em config.yml!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required' é um argumento inválido para posicionadores" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "\"sdk_path\" não definido em config.yml!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' é muito antigo, fdroid requer build-tools-{version} ou mais recente!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "'{path}' falhou ao executar!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' tem um formato inválido, deveria ser um dicionário!" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' não é um{field} válido em {appid}. Regex padrão: {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' não é um {field} válido, deveria ser {pattern}" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "--merge-request roda somente com um único appid!" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...checkupdate falhou para {appid} : {error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() não definida" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "está faltando o /issues" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "Uma URL é necessária como um argumento!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "As assinaturas do APK têm certificados diferentes em {path}:" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "Adicione assinaturas PGP usando GnuPG para os pacotes no repositório" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "Adicionar uma chave de assinatura para um repositório não assinado" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "Adicionar arquivos de metadados de esqueleto para APKs que estão faltando-lhes" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "Adicionando novo repositório para apenas {name}" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "Alias (apelido) da chave de assinatura do repositório na keystore" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "AllowedAPKSigningKeys ausente, mas binário de referência fornecido" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "Permite que uma revisão diferente (ou árvore do git) seja especificada para a importação inicial" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "Também espelhar o arquivo completo da seção" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "Também avisar sobre problemas de formatação, como rewritemeta -l" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "Biblioteca AAR do Android" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "Arquivo APK do Android" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "Código DEX do Android" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "Android SDK não encontrado em {path}!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "O caminho do SDK Android '{path}' não existe!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "O caminho do SDK Android '{path}' não é um diretório!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "A ferramenta SDK do Android {cmd} não foi encontrada!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "O aplicativo tem binários, mas não tem AllowedAPKSigningKeys correspondentes para fixar o certificado." #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "O aplicativo tem NoSourceSince ou ArchivePolicy \"0 versões\" ou 0, mas AutoUpdateMode ou UpdateCheckMode não são None" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "O App está em '{repo}' mas tem um link para {url}" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "A versão do aplicativo tem binário, mas não tem as correspondentes AllowedAPKSigningKeys para fixar o certificado." #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "Acrescentar .git não é necessário" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "Arquivamento {apkfilename} com assinatura inválida!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode com atualização CheckMode: HTTP deve ter um padrão." #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "Não automático à todas as perguntas." #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "Sim automático à todas as perguntas." #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "Tipo de entrada incorreto \"{mirrortype}\" na configuração de espelhos: {mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "URL base para espelhar, pode incluir a chave de assinatura de índice usando a string de consulta:? Fingerprint =" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "Filial '{branch} 1' usada como commit no build '{versionName} 2'" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "Ramificação '{branch}' usada como commit em srclib '{srclib}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "Link simbólico quebrado: {path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "Compila um pacote a partir do código-fonte" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "Compilar todos aplicativos disponíveis" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "Compilação gerada por `fdroid import` - remove a linha de desativação quando estiver pronto" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "Construir metadados git repo não tem mudanças comprometidas!" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "Compilar apenas a última versão de cada pacote" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "Repo construído baseado em \"%s\" com esta configuração:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "Não pode atualizar automaticamente o aplicativo sem CurrentVersionCode" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Não é possível criar devido a {} erro durante a digitalização" msgstr[1] "Não é possível criar devido a {} erros durante a digitalização" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Não é possível reescrever \"{path}\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "Categorias '%s' não são válidas" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "As categorias não estão definidas" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "Categoria \"{category}\" definida, mas não usada para nenhum aplicativo!" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Verifica se existem atualizações para os aplicativos" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "Verificar o arquivamento de {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Atualização limpa - não utiliza o cache, reprocessa todos os APKs" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "Colorir a saída de registros" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Lista de categorias separadas por vírgula." #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "Comando \"%s\" não reconhecido.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "Enviar mudanças" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "Fazer commit das mudanças, push, e então faça uma merge request" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "Definições conflitantes de \"{field}\" entre arquivos .yml e localizados:" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Argumentos conflitantes: \"--verbose\" e \"--quiet\" não podem ser especificados ao mesmo tempo." #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "Impossível encontrar '{command}' em seu sistema" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Não foi possível encontrar o código da versão mais recente" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Não foi possível encontrar o nome da versão mais recente" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "Impossível encontrar {path} para removê-lo" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "Impossível abrir o APK {path} para análise: " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Não foi possível analisar o tamanho \"{size}\", tipo incorreto \"{type}\"" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Não foi possível encontrar o ID do aplicativo" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "Não foi possível encontrar nenhuma informação de versão" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "Impossível encontrar o ID do pacote" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "Recusando-se covardemente de sobrescrever a configuração de chave de assinatura existente!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "Novo container criado \"{name}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Criando \"{path}\" para configurar s3cmd." #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "Criando '{config_file}' vazio" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Criando diretório de registro" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "Criando o novo Balde de S3: {url}" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "Criando diretório de saída" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "Criando índice assinado com esta chave (SHA256):" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "Criando diretório temporário" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "Criando índice não assinado em preparação para assinatura" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "O CurrentVersionCode {cv} é menor que a entrada da versão mais antiga {versionCode}" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "DEBUG_KEYSTORE não está definido ou o valor está incompleto" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "Apaga os APKs e/ou OBBs sem metadados do repositório" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "Excluindo o pacote, o repositório está grande demais ({size} máx {limit})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "Excluindo histórico de git-mirror, o repositório está grande demais ({size} máx {limit})" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "Excluindo arquivo desconhecido: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "Descrição '%s' é apenas o resumo do app" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "Descrição tem uma linha duplicada" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "A descrição de tamanho {length} está acima do limite de {limit} caracteres" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "Você quis dizer config/{name}.yml?" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "Você quis dizer {code}?" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "Não adicione \"disable:\" para as entradas de compilação geradas" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "Não implemente os novos arquivos no repositório" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "Não inclua \"{path}\" no URL!" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "Não solicitar o caminho do Android SDK, apenas falhe" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "Não remova as chaves privadas geradas do keystore" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "Não criar um tarball da fonte; útil quando testando uma compilação" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "Não atualizar o repositório; útil quando testando uma compilação sem conexão com a internet" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "Não usar as somas de verificação (checksums) do rsync" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "Faça o download do F-Droid.apk usando mirrors (sites espelhos) que vazam menos privacidade na rede" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Faça o download de espelhos completos de pequenos repositórios" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "O download do repositório já falhou uma vez, não tente novamente." #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "Falha ao baixar '{url}'. {error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "A declaração duplicada do Anti-Recurso em {path} foi ignorada!" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "Entrada \"%s\" duplicada na configuração de espelhos!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "Link duplicado em '{field}': {url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "ERRO: %(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "ERRO: o subcomando \"server\" foi removido, use \"deploy\"!" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "ERRO: tipo de IC não suportado, correções bem-vindas!" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "ERRO: host de git \"%s\" não suportado, patches são bem-vindos!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "ERRO: {key} em {path} não é um \"arquivamento\" ou \"repositório\"!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "ERRO: {key} não é uma chave válida!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "ERRO: o valor de {key} deve ser do tipo {t}!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "ERRO: {key}:{subkey} em {path} não está nas chaves permitidas: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "A codificação está definida para \"{enc}\", fdroid pode ter problemas de codificação. Defina-a para \"UTF-8\" para melhores resultados." #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" "Digite o caminho para o Android SDK (%s) aqui:\n" "> " #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "A variável de ambiente {var} de {configname} não está definida!" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "A variável de ambiente {{env: {var} não está definida!" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "Erro ao implementar 'github_releases', {} não está presente. (Talvez seja necessário executar `fdroid update` primeiro)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "Erro ao obter o endereço do repositório" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "Sair com um código diferente de zero se problemas forem encontrados" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "Extrair metadados de aplicativos de um repositório de origem" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "Extrair assinaturas de APKs" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "F-Droid.apk não pode ser baixado de nenhuma fonte conhecida!" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "Falha ao copiar {path}: {error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "Falha ao buscar assinaturas para '{apkfilename}': {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "Falha ao ler {path}: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "Falha ao redimensionar {path}: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "Falha ao criar o Balde do S3: {url}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "Falha ao obter informações do APK, excluindo {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "Falha ao obter informações do APK, ignorando {path}" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "Falha ao obter a impressão digital da chave de assinatura do APK" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "Falha ao instalar '{apkfilename}' em {dev}: {error}" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "Falha ao assinar inscrição" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "ID do servidor de compilação buscado na Máquina Virtual: {buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "As assinaturas buscadas para '{apkfilename}' -> '{sigdir}'" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "O arquivo desapareceu enquanto era processado: {path}" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "Acabado" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Tags HTML proibidas" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "Forçar a compilação de apps desativados e continuar independentemente de problemas de escaneamento. Apenas permitido no modo de teste." #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "Forçar a parada da compilação após tempo limite de {0} segundos!" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "Força varredura de aplicativos e compilações desativadas." #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "Foi encontrado o gráfico \"{path}\" sem metadados para o app \"{name}\"!" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "Encontrado arquivo inválido \"{path}\" de financiamento para \"{name}\":" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "Encontrou apps inválidos em argumentos" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "Encontrado versões de códigos inválidas para alguns apps" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "Encontrados vários arquivos de bloqueio de assinatura JAR em {path}" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "Foram encontrados vários certificados de assinantes!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "Encontrados vários arquivos de metadados para {appid}" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "Encontrado vários certificados de assinatura para o repositório." #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "Não encontrado os certificados de assinatura para o repositório." #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "Arquivo não encontrado em %s" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "Encontrado {apkfilename} em {url}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "{count} problemas encontrados em {filename}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "{count} advertências encontradas em {filename}" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "Gerado esqueleto de metadados para {appid}" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "Checkout de Git '%s' falhou" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "Falha ao limpar o Git" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "Falha no 'fetch' do Git" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Git remote set-head falhou: \"%s\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Falha no 'reset' do Git" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "Falha no submódulo Git deinit" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "Falha na sincronização do submódulo Git" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "Falha na atualização do submódulo Git" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "HTTPS deve ser usado com URLs do Subversion(SVN)!" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "Se um espelho git ficar muito grande, permite que o arquivo seja excluído" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "Se o upload falhar, tente fazer o upload manualmente para {url}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "Ignorando \"{field}\" em metadados \"{metapath}\" porque foi descontinuado." #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "Ignorando entrada de FUNDING.yml maior que 2048: %s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "Ignorando o elemento mau no manifesto: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "Ignorando {oldfile} obsoleto, use {newfile}!" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Ignorando o pacote sem metadados: " #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "Ignorando dados de 'cache' antigos de {apkfilename}" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "Inclua APKs assinados com algoritmos desativados, como o MD5" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "Inclui os arquivos de assinatura PGP (.asc) no espelho" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "Inclui os logs de compilação no espelho" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "Inclui os tarballs fonte no espelho" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "Incluindo metadados de %s@%s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "Incluindo metadados de {path}" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "Inicializando submódulos" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "Instalar todos os aplicativos assinados disponíveis" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "Instala pacotes compilados nos dispositivos" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "Instalando %s…" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "Instalando \"{apkfilename}\" em {dev}…" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "Interage com o servidor HTTP do repositório" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "APK inválido" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "Modo de Atualização Automática inválido: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "UpdateCheckMode inválido: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "Versão de Operação de Código inválido: {field}" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "Versão de Operação de Código inválido: {invalid_ops}" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "ID do aplicativo {appid} inválido" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Lista com marcadores inválida" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "Nome inválido para o arquivo publicado: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "ndk inválido: entrada na compilação: \"{ndk}\"" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "Redirecionamento inválido para não HTTPS: {before} -> {after} " #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "Metadados de scrlib inválidos: \"{file}\" não existe" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "Metadados de srclib inválidos: não foi possível analisar \"{file}\"" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "Metadados de srclib inválidos: chave desconhecida \"{key}\" em \"{file}\"" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "A assinatura JAR falhou ao verificar: {path}" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "Assinatura do JAR verificada: {path}" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "Arquivo JAR de Java" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "Java JDK não encontrado! Instale no local padrão ou defina java_paths!" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "Classe Java compilada" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "Java jarsigner não encontrado! Instale no local padrão ou defina java_paths!" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "Javascript em atributo 'src' de HTML" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "Mantendo a compilação com falha \"{apkfilename}\"" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "Armazenamento de chaves de assinatura:\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "A chave de depuração conhecida é usada em AllowedAPKSigningKeys: " #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "O último commit usado '{commit}' parece com uma tag, mas o UpdateCheckMode (modo de verificação de atualização) é '{ucm}'" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "Métodos de doação do Liberapay pertencem ao campo LiberapayID" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "Listar arquivos que seriam reformatados (execução a seco)" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "A localização foi incluída na URL f-droid.org" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "Fazer a compilação parar se encontrar exceções" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "Espelhos de repositórios malformados." #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "Linha mal-formada do 'serverwebroot':" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "Profundidade máxima de recursão no arquivo ZIP atingida: %s" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "A configuração de espelho de {url} contém a chave \"isPrimary\"!" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Espelha todo o repositório e pacotes, todos os tipos de arquivos." #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "Diretório de saída ausente" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "Movendo declarações de Anti-Recursos para arquivos localizados:" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "Nem \"repo_pubkey\" nem \"keystorepass\" definidos em config.yml" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "Nenhum APK para o pacote: %s" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "Nenhum 'Android SDK' foi encontrado!" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "Nenhum dispositivo conectado encontrado" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "Nenhum dispositivo foi encontrado usando o comando `adb install`! Por favor, conecte um." #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "Nenhuma impressão digital (fingerprint) no URL." #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "Nenhum Submódulo Git disponível" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "Nenhum projeto gradle foi encontrado. Especifique --subdir?" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "Nenhuma informação encontrada." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "Nenhuma tag correspondente encontrada" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "Nenhuma versão mínima do SDK encontrada em {0}, usando o padrão (3)." #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "Não há necessidade de especificar que o app é Software Livre" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "Não há necessidade de especificar que é um app para Android" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "Nenhuma opção definida! Edite seu 'config.yml' para definir pelo menos um destes:" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "Nenhum pacote especificado" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "Não há APK assinado disponível para %s" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "Nenhum diretório de saída assinado - nada a fazer" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "Nenhum certificado de assinatura encontrado em {path}" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "Nenhum pacote desse tipo: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "Nenhum tal versionCode {versionCode} para o app {appid}" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "Nenhuma etiqueta encontrada" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "Nenhum diretório não assinado - nada a fazer" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "Não foi possível encontrar informações sobre a versão." #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "Não é uma definição de tamanho válida: \"{}\"" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "Nada para fazer" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "Nada a fazer para {appid}." #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "Agora defina estes em config.yml:" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "O arquivo OBB tem um novo versionCode ({integer}) que qualquer outro APK:" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "O nome do arquivo OBB deve começar com \"main.\" ou \"patch.\":" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "O nome do pacote do OBB não corresponde a um APK suportado:" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "A máquina está desconectada, pulando geração de espelhos de git até o `fdroid deploy'" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "Um dos itens de configuração 'github_releases' está faltando o valor 'packageNames'. ignorando ..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "Um dos itens de configuração 'github_releases' está faltando o valor 'projectUrl'. ignorando ..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "Um dos itens de configuração 'github_releases' está faltando o valor 'token'. ignorando ..." #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Apenas PNG e JPEG são suportados para gráficos, encontrados: {path}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "Aceita apenas uma única chave \"env\"" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "Processar apenas apps com atualizações automáticas" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Os métodos de doação opencollective pertencem ao campo OpenCollective" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Exporte a saída do relatório JSON para um nome de arquivo após APK." #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "Emite JSON para stdout (saída padrão)." #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "Emitindo JSON" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "Licença geral do projeto." #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "Substituindo versionName em branco em {apkfilename} dos metadados: {version}" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "O pacote \"{appid}\" já existe" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "Manifesto de análise no '{path}'" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "Senha requerida com nome de usuário" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "Caminho para os principais subdiretórios do projeto android, se não estiver na raiz (root)." #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "Caminho até o Android SDK (algumas vezes definido em ANDROID_HOME)" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "Caminho para o repositório git para usar como log" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "Caminho até a keystore para a chave de assinatura do repositório" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Imprima a variável secreta no terminal para facilitar a cópia/colagem" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "O modo de privacidade foi ativado com base em sua localidade ({country_code})." #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "Problema com o arquivo ZIP: %s, erro %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "Problema com XML em '{path}'" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "Processar atualizações automáticas" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "Processando {apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "Processando {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "Produzir XML/JSON legível por humanos para arquivos de índice" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "URL do projeto para importar." #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "Pontuação deve ser evitada" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "Mandar o registro de mudanças para este repositório git remoto" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "Atualizar o log de transparência de um binário para {url}" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "Falha ao enviar para o servidor remoto!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "Empurrando para {url}" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "Cria rapidamente um novo repositório" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "Lê todos os arquivos de metadados e sai" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "Lendo '{config_file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "A leitura de packageName/versionCode/versionName falhou, o APK inválido: '{apkfilename}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "Falha ao ler packageName/versionCode/versionName, APK inválido: '{apkfilename}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "Lendo {apkfilename} do cache" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Atualizar e armazenar em cache regras e assinaturas do scanner da rede" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "Remover pacote de código-fonte e qualquer APK se verificado com sucesso." #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Removendo arquivos especificados" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "Removendo {path}\"" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "Renomeia arquivos APK que não correspondem a pacote.nome_123.apk" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "Resignando {apkfilename} como o fornecido debug.keystore" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "Redimensionar todos os ícones que excedam o tamanho máximo de pixels e sair" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "Restringir a saída a erros e avisos" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "Nova tentativa de download com falha: %s" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Reescreve todos os arquivos de metadados" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "Reescrevendo '{appid}'" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "Executar no repositório do Git que tenha alterações não confirmadas" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "Execute {cibase} para encontrar -debug.apk. e ignore repo_basedir {repo_basedir}" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "Executar rewritemeta para corrigir a formatação" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "Execução da primeira passagem com a verificação do MD5 desativada" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "Executando o 'wget' em {path}" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "O SHA-256 de {url} não corresponde à entrada!" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "Verifique os APKs resultantes na busca das classes não gratuitas já conhecidas." #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "Percorre o código-fonte de um pacote" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "O scanner encontrou {count} problemas em {apk}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "O scanner encontrou {count} problemas em {appid}:" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "O scanner encontrou {count} problemas em {appid}: {versionCode}:" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "O Scanner encontrou {} problema" msgstr[1] "O Scanner encontrou {} problemas" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "Verificando o APK em busca de blocos de assinatura adicionais." #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "Verificando o APK com dexdump por classes não-livres conhecidas." #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "Defina NDK {release} ({version}) para cima" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "Ajuste o relógio para esse horário usando:" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "Defina as liberações máximas no repo antes que as mais antigas sejam arquivadas" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "Defina o limite de arquivos abertos para {integer}" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "Configurar uma compilação de app para um repositório de compilação todas-as-noites" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "A configuração do limite de arquivos abertos falhou: " #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "Definindo {0} segundos como tempo limite de para esta compilação" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "Assina e coloca pacotes no repositório" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "Assina os índices criados usando update --nosign" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "Pular o escaneamento do código fonte atrás de binários e outros problemas" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "Ignorando '{apkfilename}' com assinatura inválida!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "Ignorando o espelho do GitLab Pages porque o repositório é muito grande (>%.2fGB)!" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "Ignorando a geração de índice para {appid}" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "Ignorando {apkfilename} com assinatura inválida!" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "Ignorando {appid}: desativado" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "Especifique uma pasta local para ser sincronizada com o repositório" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "Especifique um arquivo identidade para fornecer ao SSH para usar o rsync" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "Especifique qual arquivo keystore de depuração deve ser usado." #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "Mostrar ainda mais informações que o normal" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "Descarnar a assinatura misteriosa a partir do {apkfilename}" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "Resumo '%s' é apenas o nome do app" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "O resumo do tamanho {length} está acima do limite de caracteres {limit}" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "O relógio/calendário do sistema é mais atrasado que em '{path}'!" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "O modo de atualização de tags só funciona para repositórios git, hg, bzr e git-svn atualmente" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "Modo de atualização de tags usado no git-svn, mas o repositório não foi configurado com tags" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Modo de teste - coloque a saída apenas no diretório tmp e sempre compile, mesmo que a saída já exista." #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "O pacote Python \"qrcode\" não está instalado (por exemplo, apt-get install python3-qrcode)!" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "O código da versão do OBB deve vir depois de \"{name}.\":" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "O URL base para o registro de mudanças do repositório (padrão: https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "O diretório para escrever o espelho para" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "O arquivo a ser incluído no repositório (caminho ou glob)" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "A impressão digital do repositório não corresponde." #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "O diretório raiz para local_copy_dir \"{path}\" não existe!" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "Há uma colisão do keyalias - publicação parada" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "Estas são as aplicações que foram arquivadas a partir do repositório principal." #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "Esse comando nunca deve ser usado para espelhar o f-droid.org! Uma cópia completa requer mais de 600 GB." #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "Este é um repositório de aplicativos a serem usados com o F-Droid. Os aplicativos neste repositório são binários oficiais compilados pelos desenvolvedores do aplicativo original ou são binários compilados a partir da fonte por f-droid.org usando as ferramentas em https://gitlab.com/fdroid." #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "Este repositório já tem metadados locais: %s" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" "Para concluir a configuração, adicione seus APKs a \"%s\"\n" "em seguida, execute \"fdroid update -c; atualização do fdroid\". Você também pode querer editar\n" "\"config.yml\" para definir o URL, o nome do repositório e muito mais. Você também deve configurar\n" "uma chave de assinatura (uma temporária pode ter sido gerada automaticamente).\n" "\n" "Para mais informações: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "e https://f-droid.org/docs/Signing_Process" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "Para usar awsbucket, os awssecretkey e awsaccesskeyid também devem ser definidos no config.yml!" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "Para usar rclone, rclone_config e awsbucket devem ser configurados em config.yml!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "A URL deve começar com https:// ou http://" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "Encurtadores de URL não devem ser usados" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "Há o URL {url} na descrição: {error}" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "A etiqueta da licença foi inesperada \"{}\"! Use apenas etiquetas FSF ou OSI a partir do https://spdx.org/license-list" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "A etiqueta da licença foi inesperada \"{}\"! Use apenas as etiquetas configuradas no seu arquivo de configuração" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "Entrada desconhecida {key} em {configname}" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "Exceção desconhecida encontrada!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "Arquivo desconhecido '{filename}' na compilação '{versionName}'" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "Formato de metadados desconhecido: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "O formato dos metadados é desconhecido: {path} (use: *.yml)" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "Versão desconhecida do aapt, pode causar problemas: " #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "Espaço desnecessário à frente" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "Espaço desnecessário ao fim" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "O campo '{fieldname}' não foi reconhecido em '{path}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "O sinalizador de construção '{build_flag}' desconhecido em '{path}'" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "Tipo de arquivo \"{extension}\" não suportado para o gráfico de repo" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "Arquivo gráfico não suportado encontrado: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "Extlib não utilizado em %s" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "Arquivo não utilizado em %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "Caminho scandelete não usado: %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "Caminho scanignore não usado: %s" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Atualiza as informações do repositório para novos pacotes" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "Atualiza o log de transparência de um binário para um URL" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData tem URL inválido: {url}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "UpdateCheckData deve corresponder ao código da versão como número inteiro (\\d ou [0-9]): {codeex}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "UpdateCheckData deve usar um URL HTTPS: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "UpdateCheckData não é uma URL válida: {url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode é definido, mas parece que likecheckupdates ainda não foi executado." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName (atualização da verificação do nome) é definido como o ID comun do aplicativo - pode ser removido" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "Enviando o {apkfilename} para o androidobservatory.org" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "Enviando o {apkfilename} para o virustotal" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Use /HEAD em vez de /master ou /main para apontar para um arquivo na ramificação padrão" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Use ' fdroid update -c ' para criá-lo." #: ../fdroidserver/build.py msgid "Use build server" msgstr "Usar servidor de compilação" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "Usar a data do APK ao invés do horário atual para APKs recentemente adicionados" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "Usando \"{path}\" para configurar s3cmd." #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "Usando \"{path}\" para sincronização com armazenamento remoto." #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "Usando a Assinatura APK v2" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "Usando a Assinatura APK v3" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "Usando assinatura JAR" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Usando o jarsigner de Java, não recomendado para verificar APKs! Use apksigner" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "Usando um dicionário em branco em vez do conteúdo de {path}!" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "Utilizando armazenamento de chave existente \"{path}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "Usando rclone para sincronizar com: {url}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "Usando s3cmd para sincronizar com: {url}" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Os comandos válidos são:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "Verifique a cópia em cache local em vez de redescarregando." #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "Verifica a integridade dos pacotes baixados" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "Verificar o índice de assinatura:" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "Verificando o pacote {path} com apksigner." #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "A chave API do VirusTotal não pode carregar arquivos maiores que 32MB, utilize {url} para enviar para {path}." #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Avisa sobre possíveis erros de metadados" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "Arquivo binário WebAssembly" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Quando configurado para índices assinados, crie apenas índices não assinados nesta etapa" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "Ao cotar todo o repositório, o yamllint é desativado por padrão. Independente de qualquer coisa esta opção impõem o uso do yamllint." #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "Ao assinar ou verificar falhar, um código de erro será lançado." #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "Gostaria de baixar e instalar F-Droid.apk via adb? (SIM/NÃO)" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "Gostaria de baixar aplicativo(s) de f-droid.org? (SIM/NÃO)" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'Distiguished Name' usado na geração de chaves" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "Você pode usar ANDROID_HOME para definir o caminho para o seu SDK, ou seja:" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "Arquivo ZIP" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "O adb informa que {serial} é \"{status}\"!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "adicionando IdentityFile a {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "adicionando a {name}: {path}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "opção ambígua: %(option)s pode corresponder a %(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "apksigner no builds-tools;{version} passa APKs com assinaturas v3 inválidas, ignorando." #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "apksigner não encontrado! Não é possível assinar ou verificar APKs modernos" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "o apksigner não foi encontrado, ele é necessário para assinar!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "ID de aplicação do arquivo para operar" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "applicationId com versionCode opcional na forma APPID[:VERCODE]" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "archive_url precisa terminar com /archive" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "argumento \"-\" com o modo %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "argumento %(argument_name)s: %(message)s" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "tentando uma conexão SSH vazia para testar a chave de implantação:" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "não é possível analisar a especificação scrlib (não uma string): '{}'" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "não é possível abrir '%(filename)s': %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "não é possível abrir a url não-https: '{};" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "não é possível encontrar os srclibs necessários: \"{path}\"" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "não é possível ter vários argumentos de subparser" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "não é possível unir ações - dois grupos são denominados %r" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "não é possível publicar a atualização, você definiu a chave de implantação?" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "clonagem {url}" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "comandos a partir dos módulos de plugin:" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "opção conflitante na string: %s" msgstr[1] "opções conflitantes nas strings: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "alias de subanalizador conflitante: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "subanalizador conflitante: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "não foi possível analisar '{path}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "não foi possível analisar a especificação srclib (nenhum nome especificado): '{}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "não foi possível analisar a especificação srclib (referência sem especificação): '{}'" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "{path} criado" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "versão atual é mais recente: old vercode={old}, new vercode={new}" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "apagando: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "arquivo de dependência sem bloqueio" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "registro de processo implantado {path} para {dest}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "dest = é necessário para opções como %r" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "baixando '{}'" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "o download de assinaturas de scanner de '{}' falhou" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "binário executável, possivelmente código" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "foi previsto %s argumento" msgstr[1] "foi previsto %s argumentos" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "esperado pelo menos um argumento" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "esperado um argumento no máximo" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "esperado um argumento" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "fdroid [] [-h|--help|--version|]" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "obter a versão de assinaturas mais recente da Web" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "Forçar os erros de metadados (padrão) para serem avisos, ou para serem ignorados." #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "git svn clone falhou" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "arquivo gzip" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "argumento explícito %r ignorado" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1 deve ter uma assinatura, use ' fdroid signindex ' para criá-lo!" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 deve ter uma assinatura, use droid signindex` para criá-la!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "valor inválido do tipo %(type)s: %(value)r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "opção inválida: %(value)r (escolha de %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "valor conflict_resolution inválido: %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "Opção cadeia %(option)r inválida: deve começar com o caractere %(prefix_chars)r" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "ipfs_cid não encontrado, omitindo a geração de CIDv1" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "receita de compilação mais recente é: old vercode={old}, new vercode={new}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "local_copy_dir não termina com \"fdroid\", talvez você quis: \"{path}\"" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "local_copy_dir deve ser um caminho absoluto!" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "local_copy_dir deve ser um diretório, não um arquivo!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "espelho '%s' não termina com 'fdroid'!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "espelhos (mirrors) definidos duas vezes, em config.yml e {path}!" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "argumentos mutuamente exclusivos devem ser opcional" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "próxima atualização do cache {name} prevista para {time}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "nenhum \"ícone\" em {appid}" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "nenhum APK fornecido" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "nenhuma informação de versão encontrada" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "não é permitido com o argumento %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "um dos argumentos %s é necessário" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "apenas aceita cadeias, listas e tuplos" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "opções" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "sobrescrevendo {path} existente" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "argumentos posicionais" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "houve uma falha no registro de processo implantação {path} para {dest}!" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "falta assinatura no binário de referência" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "Recuse o download inseguro via conexão HTTP (use HTTPS ou especifique --no-https-check): {apkfilename}" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "repo_icon \"repo/icons/%s\" não existe, gerando um espaço reservado." #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "repo_url precisa terminar com /repo" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "rsync está ausente ou quebrado: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd sincroniza índices {path} para {url} e exclui" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "s3cmd sincroniza os índices de {path} para {url} e exclui os índices removidos" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "o cache do scanner está malformado! Você pode limpá-lo com: '{clear}'" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "serverwebroot: o caminho não termina com \"fdroid\", talvez você tenha se referido a um destes:" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "biblioteca compartilhada" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "mostra esta mensagem de ajuda e sai" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "APK assinado, seja um caminho de arquivo ou um URL HTTPS." #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "ignorar a implantação de logs de compilação completos: o conteúdo do log está vazio" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "ignorar a implantação de logs de compilação completos: não habilitado na configuração" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "ignorando o tarball de origem: {path}" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "Nome 'srclibs' ausente e/ou '@'" #: ../fdroidserver/scanner.py msgid "static library" msgstr "biblioteca estática" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "o binário de referência fornecido autorizou o signatário {signer}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "os seguintes argumentos são necessários: %s" #: ../fdroidserver/install.py msgid "true" msgstr "verdadeiro" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "opção de cadeia de texto inesperada: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "O formato '%(parser_name)r' é desconhecido. (Opções Válidas: %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "argumentos não reconhecidos: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "permissões inseguras em '{config_file}' (deveria ser 0600)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "uso: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "usando o Apache libcloud para sincronizar com {url}" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "o virustotal.com está limitando a taxa, esperando para tentar novamente ..." #: ../fdroidserver/install.py msgid "yes" msgstr "sim" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "{0} apl, {1} codinome de chave" msgstr[1] "{0} apls, {1} codinome de chaves" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) não tem metadados!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "AndroidManifest.xml do {apkfilename} tem uma data má: " #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} não tem um nome! Usando o ID do applicativo em vez disso." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "O {appid} do {path} não é um ID de aplicativo Android válido!" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "O {appid} do {path} não é um Nome de Pacote Java válido!" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "{appid} tem APKs e arquivos: {files}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "{appid} tem falta de {name}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "{appid}: extlib {path} desconhecido na compilação '{versionName}'" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "{appid}: nenhuma compilação especificada, em execução no estado de origem atual" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "O {appid}: {field} deve ser um '{type}', porém é um '{fieldtype}!'" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "O {appid}: {field} deve ser um '{type}', porém é um '{fieldtype}'!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "{build_flag} deve ser um número inteiro, encontrado: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "{build_flag} deve ser uma lista ou uma cadeia de caracteres, encontrado: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "o {file} está vazio ou está corrompido!" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" não existe! Corrija-o no \"config.yml\"." #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "{path1} é uma duplicata de {path2}, remova uma!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "o {path} já existe, ignorando os resultados de importação!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "{path} não existe! Crie-o executando:" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "{path} tem uma má assinatura de arquivo \"{pattern}\", um exploração Janus é possível!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} foi sinalizado pelo virustotal {count} vezes:" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "{path} tem a impressão digital errada ({fingerprint})!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "{path} não é um ditado \"key: value\", mas um {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "{path} não é um arquivo de configuração padrão!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "{path} não é uma lista, mas um {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "{path} não é {expected_type}, mas um {datatype}!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "{path} tem um tamanho de zero!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "o {path} tem mais de 200MB, upload manual: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "{path}: \"{code}\" não é um código de país ISO_3166-1 alfa-2 válido!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "Falha ao copiar {path}: {error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "{url} não termina com \"fdroid\", verifique o caminho na URL!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "a {url} não começa com \"http\"!" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "{} compilação falhou" msgstr[1] "{} compilações falharam" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "{} compilação foi bem sucedida" msgstr[1] "{} compilações foram bem sucedidas" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/pt_PT/0000755000175000017500000000000014770510164015211 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/pt_PT/LC_MESSAGES/0000755000175000017500000000000014770510164016776 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/pt_PT/LC_MESSAGES/fdroidserver.po0000644000175000017500000027146514770507747022070 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Manuela Silva , 2020. # ssantos , 2020, 2021, 2022, 2023, 2024, 2025. # Hans-Christoph Steiner , 2020, 2022, 2024. # Peter J. Mello , 2021. # Fat Potato , 2024. # Hugo Carvalho , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2025-03-02 21:32+0000\n" "Last-Translator: ssantos \n" "Language-Team: Portuguese (Portugal) \n" "Language: pt_PT\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 5.10.3-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "Chave pública SSH a ser usada como chave de implantação:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "{path} codificado para a variável secreta DEBUG_KEYSTORE:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" não tem ficheiro de metadados correspondente!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "\"local_copy_dir\" {path} não existe!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "'{apkfilename}' já está instalado no {dev}." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "\"{path}\" contém {name} ({version}) recente" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "\"{path}\" existe, mas s3cmd não está instalado!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "\"{path}\" não é um formato de ficheiro aceito (use: metadata/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "\"{path}\" está acessado por uma chave que não é permitida:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" não é uma URL válida!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: erro: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "%d APKs falharam a serem assinados ou verificados!" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d problemas encontrados" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%r não pode ser invocado" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "%s não produziu um dict!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "%s tem um SHA-256 ruim: %s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s não é um campo criado aceito" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' não foi encontrada em config.yml!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "\"keystore\" é NONE e \"smartcardoptions\" está vazio!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "'keystore' não encontrada em config.yml!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "'keystorepass' não encontrada em config.yml!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' não encontrada em config.yml!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required' é um argumento inválido para posicionadores" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "'sdk_path' não definido em 'config.yml'!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' é muito antigo, fdroid requer build-tools-{version} ou mais recente!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "'{path}' falhou ao executar!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' tem um formato inválido, deveria ser um dicionário!" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' não é um {field} válido em {appid}. Modelo regex: {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' não é um {field} válido, deve ser {pattern}" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "--merge-request só é executado num único appid!" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...checkupdate falhou para {appid} : {error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() não definida" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "/issues está em falta" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "Uma URL é necessária como um argumento!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "As assinaturas do APK têm certificados diferentes em {path}:" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "Adicione assinaturas PGP usando GnuPG para os pacotes no repositório" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "Adicionar uma chave de assinatura para um repositório não assinado" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "Adicionar ficheiros de metadados de esqueleto para APKs que estão faltando-lhes" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "Adicionando novo repositório para apenas {name}" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "Alias (apelido) da chave de assinatura do repositório na keystore" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "AllowedAPKSigningKeys está ausente, mas o binário de referência foi fornecido" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "Permite que uma revisão diferente (ou árvore do git) seja especificada para a importação inicial" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "Também espelhar o ficheiro completo da secção" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "Também avisar sobre problemas de formatação, como rewritemeta -l" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "Biblioteca AAR do Android" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "Ficheiro APK do Android" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "Código DEX do Android" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "SDK do Android não foi encontrado em {path}!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "O caminho do SDK Android '{path}' não existe!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "O caminho do SDK Android '{path}' não é um diretório!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "Ferramenta {cmd} do Android SDK não foi encontrada!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "A app tem binários, mas não tem AllowedAPKSigningKeys correspondentes para fixar o certificado." #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "A app tem NoSourceSince ou ArchivePolicy \"0 versions\" ou 0, mas AutoUpdateMode ou UpdateCheckMode não são None" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "A App está em '{repo}' mas tem uma hiperligação para {url}" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "A versão da app tem um binário, mas não tem as AllowedAPKSigningKeys correspondentes para fixar o certificado." #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "Acrescentar .git não é necessário" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "Arquivamento {apkfilename} com assinatura inválida!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode com UpdateCheckMode: HTTP deve ter um modelo." #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "Não automático a todos os avisos." #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "Sim automático a todos os avisos." #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "Tipo de entrada \"{mirrortype}\" incorreto na configuração de espelhos: {mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "URL base para espelhar, pode incluir a chave de assinatura de índice usando a cadeia de consulta: ?fingerprint =" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "Filial '{branch} 1' usada como commit no build '{versionName} 2'" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "Ramificação '{branch}' usado como commit em srclib '{srclib}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "Ligação simbólica quebrada: {path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "Construir pacote através da fonte" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "Compilar todos as aplicações disponíveis" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "Compilação gerada por `fdroid import` - remove a linha de desativação quando estiver pronto" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "Construir metadados git repo não tem mudanças comprometidas!" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "Compilar apenas a última versão de cada pacote" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "Repo construído baseado em \"%s\" com esta configuração:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "Aplicação não pode ser auto-atualizada sem CurrentVersionCode" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Não é possível construir devido a erro {} durante a digitalização" msgstr[1] "Não é possível construir devido a erros {} durante a digitalização" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Não é possível reescrever \"{path}\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "As categorias '%s' não são válidas" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "As categorias não são definidas" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "Categoria \"{category}\" definida, mas não usada para nenhuma app!" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Verificação de actualizações das aplicações" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "Verificando o arquivamento para {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Atualização limpa - não usa cache, reprocessa todos os APKs" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "Colorir o registo de saída" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Lista de categorias separadas por vírgula." #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "Comando '%s' não reconhecido.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "Enviar alterações" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "Confirme as alterações, envie e faça um pedido de fusão" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "Definições contraditórias de \"{field}\" entre ficheiros .yml e ficheiros localizados:" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Argumentos conflitantes: \"--verbose\" e \"--quiet\" não podem ser especificados ao mesmo tempo." #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "Não foi possível encontrar '{command}' no seu sistema" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Não foi possível encontrar o código de versão mais recente" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Não foi possível encontrar o nome da versão mais recente" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "Não foi possível localizar {path} para removê-lo" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "Não foi possível abrir o APK {path} para análise: " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Não foi possível analisar o tamanho \"{size}\", tipo \"{type}\" incorreto" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Não foi possível encontrar o ID da aplicação" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "Não foi encontrada qualquer informação da versão" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "Não foi possível encontrar o ID do pacote" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "Cobardemente recusando substituir a configuração da chave de assinatura existente!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "Novo contentor criado: \"{name}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Criando \"{path}\" para configurar s3cmd." #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Creating empty {config_file}" msgstr "A ler '{config_file}'" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Criando o diretório de log" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "Criando novo bucket S3: {url}" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "Criando diretório de output" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "Criando índice assinado com esta chave (SHA256):" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "Criando diretório temporário" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "Criação de índice não assinado em preparação para assinatura" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "CurrentVersionCode {cv} é menor que a entrada mais antiga de build {versionCode}" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "DEBUG_KEYSTORE não está definido ou o valor está incompleto" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "Eliminação de APK'S e/ou OBBs que não contêm metadados do repositório" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "Apagar ficheiro, o reporte é muito grande ({size} max {limit})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "Apagar o histórico do git-mirror, o repo é muito grande ({size} max {limit})" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "Apagando o ficheiro desconhecido: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "Descrição '%s' é apenas o resumo da app" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "A descrição tem uma linha duplicada" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "A descrição de comprimento {length} é sobre o limite de char {limit}" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "Quis dizer config/{name}.yml?" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "Quis dizer {code}?" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "Não adicionar 'disable:' às entradas de compilação geradas" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "Não implante os novos ficheiros no repositório" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "Não incluir \"{path}\" no URL!" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "Não solicitar o caminho do Android SDK, apenas falhe" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "Não remover as chaves privadas geradas do keystore" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "Não criar um tarball da fonte; útil quando testando uma compilação" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "Não atualizar o repositório; útil quando testando uma compilação sem conexão com a internet" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "Não usar as somas de verificação (checksums) do rsync" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "Descarregue o F-Droid.apk utilizando espelhos que vazam menos para a rede" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Descarregar espelhos completos de repos pequenos" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "O descarregamento do repositório já falhou uma vez, não tento novamente." #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "Descarregar {url} falhou. {error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "A declaração duplicada da característica indesejada em {path} foi ignorada!" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "Entrada \"%s\" duplicada na configuração de espelhos!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "Ligação duplicada em '{field}': {url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "ERRO: %(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "ERRO: o subcomando \"server\" foi removido, use \"deploy\"!" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "ERRO: tipo de CI sem suporte, patches são bem-vindos!" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "ERRO: host de git \"%s\" não suportado, patches são bem-vindos!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "ERRO: {key} em {path} não é \"arquivo\" ou \"repositório\"!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "ERRO: {key}:{subkey} em {path} não está nas chaves permitidas: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "A codificação está definida como '{enc}' fdroid pode ter problemas de codificação. Por favor, configure-o para 'UTF-8' para obter melhores resultados." #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" "Digite o caminho para o SDK do Android (%s) aqui:\n" "> " #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "A variável de ambiente {var} de {configname} não está definida!" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "A variável de ambiente {var} de {configname} não está definida!" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "Erro ao implementar 'github_releases', {} não está presente. (Pode ser necessário executar `fdroid update` primeiro.)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "Erro ao obter o endereço do repo" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "Sair com um código diferente de zero se problemas forem encontrados" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "Extrair metadados de aplicações de um repositório de origem" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "Extrato de assinaturas de APKs" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "Não foi possível descarregar o F-Droid.apk de nenhuma fonte conhecida!" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "Falha ao copiar {path}: {error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "Falha ao buscar assinaturas para '{apkfilename}': {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "Falha de leitura {path}: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "Falha ao redimensionar {path}: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "Falha ao criar o bucket S3: {url}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "Falha ao obter informações do APK, apagando {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "Falha ao obter informações do APK, ignorando {path}" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "Falha ao obter a impressão digital da chave de assinatura do APK" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "Falha ao instalar '{apkfilename}' em {dev}: {error}" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "Falha ao assinar a app" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "Buildserverid obtido da VM: {buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "Assinaturas obtidas para '{apkfilename}'-> '{sigdir}'" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "O ficheiro desapareceu enquanto era processado: {path}" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "Terminado" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Tags HTML proibidos" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "Forçar a compilação de apps desativados e continuar independentemente de problemas de escaneamento. Apenas permitido no modo de teste." #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "Forçar suspender a construção depois de esperar {0} segundos!" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "Forçar a análise de apps e construções desativados." #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "\"{path}\" gráfico encontrado sem metadados para o app \"{name}\"!" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "Ficheiro de financiamento ruim \"{path}\" encontrado para \"{name}\":" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "appids inválidos encontrados em argumentos" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "versionCodes inválidos encontrados para algumas apps" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "Vários ficheiros de blocos de assinaturas JAR foram encontrados em {path}" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "Vários certificados de assinante foram encontrados!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "Encontrados vários ficheiros de metadados para {appid}" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "Vários certificados de assinatura encontrados para o repositório." #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "Nenhum certificado de assinatura para repositório encontrado." #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "Não-ficheiro encontrado em %s" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "{apkfilename} encontrado em {url}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "{count} problemas encontrados em {filename}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "{count} avisos encontrados em {filename}" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "Gerado esqueleto de metadados para {appid}" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "Git checkout de '%s' falhou" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "Git clean falhou" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "Git fetch falhou" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Git remote set-head falhou: \"%s\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Git reset falhou" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "Falha no submódulo deinit do Git" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "Git submodule sync falhou" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "Git submodule update falhou" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "HTTPS deve ser usado nos URLs do Subversion!" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "Se um espelho git ficar muito grande, permite que o arquivo seja apagado" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "Se esse envio falhar, tente enviar manualmente para {url}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "A ignorar '{field}' em metadados '{metapath}' porque é depreciado." #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "A ignorar a entrada FUNDING.yml por mais que 2048: %s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "A ignorar o elemento mau no manifesto: %s" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "{oldfile} está obsoleto, use {newfile}" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Ignorando o pacote sem metadados: " #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "Ignorando dados de cache obsoletos para {apkfilename}" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "Incluir APKs assinados com algoritmos desativados como MD5" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "Incluir os ficheiros .asc da assinatura PGP no espelho" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "Incluir os registos de construção no espelho" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "Incluir os tarballs de fontes no espelho" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "Incluindo metadados de %s@%s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "Incluindo metadados de {path}" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "Inicializando submódulos" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "Instalar todas as aplicações assinadas disponíveis" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "Instalação dos pacotes compilados no aparelho" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "A instalar %s…" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "A instalar '{apkfilename}' em {dev}…" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "Interacção com o repositório do servidor HTTP" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "APK inválido" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "AutoUpdateMode inválido: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "UpdateCheckMode inválido: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "VercodeOperation inválido: {field}" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "VercodeOperation inválido: {invalid_ops}" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "ID da aplicação {appid} inválido" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Lista com marcadores inválida" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "Nome inválido para o ficheiro publicado: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "Ndk inválido: entrada na compilação: \"{ndk}\"" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "Redirecionamento inválido para não-HTTPS: {before} -> {after} " #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "Metadados de scrlib inválidos: '{file}' não existe" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "Metadados de srclib inválidos: não foi possível analisar \"{file}\"" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "Metadados de srclib inválidos: chave \"{key}\" desconhecida no \"{file}\"" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "A assinatura JAR falhou a verificação: {path}" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "Assinatura JAR verificada: {path}" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "Ficheiro Java JAR" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "O Java JDK não foi encontrado! Instalar no local predefinido ou definir java_paths!" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "Classe Java compilada" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "Java jarsigner não encontrado! Instale no local predefinido ou define java_paths!" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "JavaScript em atributos HTML src" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "Mantendo a compilação com falha \"{apkfilename}\"" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "Armazenamento de chaves de assinatura:\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "A chave de depuração conhecida é usada em AllowedAPKSigningKeys: " #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "O último commit usado '{commit}' parece-se com uma tag, mas o UpdateCheckMode (modo de verificação de atualização) é '{ucm}'" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "Os métodos de doação de Liberapay pertencem no campo Liberapay:" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "Listar ficheiros que devem ser reformatados (execução a seco)" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "Locale incluído no URL do f-droid.org" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "Fazer a compilação parar se encontrar exceções" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "Espelhos de repositório malformados." #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "Linha de serverwebroot malformada:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "Profundidade máxima de recursão no ficheiro ZIP atingida: %s" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Espelha todo o repositório e pacotes, todos os tipos de ficheiros." #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "Falta diretório de saída" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "A mover as declarações de características indesejadas para ficheiros localizados:" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "Nem \"repo_pubkey\" nem \"keystorepass\" definidos em config.yml" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "Nenhum APK para o pacote: %s" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "Android SDK não encontrado!" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "Nenhum aparelho anexado encontrado" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "Nenhum dispositivo encontrado para `adb install`! Ligue um." #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "Nenhuma impressão digital no URL." #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "Não há submódulos git disponíveis" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "Não foi possível encontrar nenhum projeto de gradle. Especificar --subdir?" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "Nenhuma informação encontrada." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "Não foram encontradas marcações correspondentes" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "Nenhuma versão mínima do SDK encontrada em {0}, a usar a predefinição (3)." #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "Não há necessidade de especificar que o app é software livre" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "Não há necessidade de especificar que o app é para Android" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "Sem opção definida! Edite seu config.yml para definir pelo menos um destes:" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "Nenhum pacote especificado" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "Nenhum APK assinado disponível para %s" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "Nenhum diretório de saída assinado - nada a fazer" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "Nenhum certificado de assinatura encontrado em {path}" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "Nenhum pacote desses: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "Nenhum versionCode {versionCode} para o app {appid}" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "Nenhuma etiqueta encontrada" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "Nenhum diretório não assinado - nada a fazer" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "Não foi possível encontrar informações de versão." #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "Não é uma definição de tamanho válida: \"{}\"" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "Nada para fazer" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "Nada a fazer para {appid}." #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "Agora configure estes em config.yml:" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "OBB tem versionCode ({integer}) mais recente que qualquer APK:" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "O nome do ficheiro OBB deve começar com \"main.\" ou \"patch.\":" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "O packagename do OBB não corresponde a um APK suportado:" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "A máquina está offline, a saltar a geração de espelhos de git até o `fdroid deploy'" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "Um dos itens de configuração 'github_releases' está a faltar o valor 'packageNames'. A ignorar ..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "Um dos itens de configuração 'github_releases' não tem o valor 'projectUrl'. A ignorar ..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "Um dos itens de configuração 'github_releases' não tem o valor 'token'. A ignorar ..." #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Somente PNG e JPEG são suportados para gráficos, encontrado: {path}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "Processar apenas apps com atualizações automáticas" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Os métodos de doação OpenCollective pertencem no campo OpenCollective:" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Saída de relatório JSON para ficheiro nomeado após APK." #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "Saída de JSON para stdout." #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "Saída do JSON" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "Licença geral do projeto." #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "Substituindo versionName em branco em {apkfilename} dos metadados: {version}" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "O pacote \"{appid}\" já existe" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "Analisando o manifesto em '{path}'" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "Palavra-passe necessária com o nome de utilizador" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "Caminho para o subdiretório principal do projeto Android, se não estiver na raiz." #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "Caminho até o Android SDK (algumas vezes definido em ANDROID_HOME)" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "Caminho para o repositório git para usar como log" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "Caminho até a keystore para a chave de assinatura do repositório" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Imprimir a variável secreta para o terminal para copiar/colar fácilmente" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "O modo de privacidade foi ativado com base na sua localização ({country_code})." #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "Problema com o ficheiro ZIP: %s, erro %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "Problema com xml em '{path}'" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "Processar atualizações automáticas" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "A processar {apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "A processar {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "Produzir XML/JSON legível por humanos para ficheiros de índice" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "URL do projeto para importar." #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "A pontuação deve ser evitada" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "Submeter o registo de eventos para este repositório git remoto" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "A submeter o registo de transparência de binário para {url}" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "Falha ao submeter para o servidor remoto!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "A submeter para {url}" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "Criar rapidamente um novo repositório" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "Ler todos os ficheiros de metadados e sair" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "A ler '{config_file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "A leitura de packageName/versionCode/versionName falhou, APK inválido: '{apkfilename}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "Falha ao ler packageName/versionCode/versionName, APK inválido: '{apkfilename}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "Lendo {apkfilename} do cache" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Atualizar e armazenar as regras e assinaturas do scanner da rede no cache" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "Remover tarball de código-fonte e todos APKs se for verificado com sucesso." #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Apagando ficheiros especificados" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "A remover {path}\"" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "Renomear todos os ficheiros APKs que não correspondem com package.name_123.apk" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "Renunciando {apkfilename} com debug.keystore fornecido" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "Redimensionar todos os ícones que excedam o tamanho máximo de pixels e sair" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "Restringir a saída a erros e avisos" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "Nova tentativa de descarga com falha: %s" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Regravar todos os ficheiros de metadados" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "Reescrevendo '{appid}'" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "Executar no repo git que tem alterações não confirmadas" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "Passar por cima de {cibase} para encontrar -debug.apk. e ignorar repo_basedir {repo_basedir}" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "Executar rewritemeta para corrigir a formatação" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "Executando a primeira passagem com a verificação de MD5 desativada" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "Executando o wget em {path}" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "O SHA-256 de {url} não corresponde à entrada!" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "Procure no(s) APK(s) resultante(s) por classes conhecidas não livres." #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "Analisar o código fonte de um pacote" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "O scanner encontrou {count} problemas em {apk}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "O scanner encontrou {count} problemas em {appid}:" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "O scanner encontrou {count} problemas em {appid}:{versionCode}:" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "Scanner encontrou {} problema" msgstr[1] "Scanner encontrou {} problemas" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "A verificar a APK em busca de blocos de assinatura extra." #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "A verificar o APK com dexdump por classes não-livres conhecidas." #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "Definir NDK {release} ({version}) para cima" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "Configurar o relógio para esse tempo usando:" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "Definir o máximo de lançamentos no repo antes que os mais antigos sejam arquivados" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "Definir o limite de ficheiros abertos para {integer}" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "Configurar uma compilação de app para um repositório de compilação noturno" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "Falha ao definir o limite de ficheiros abertos: " #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "Definindo o tempo limite de {0} seg para esta compilação" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "Assinar e pôr os pacotes no repositório" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "Assinar os índices criados com o uso de update --nosign" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "Pular o escaneamento do código-fonte atrás de binários e outros problemas" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "Ignorando '{apkfilename}' com uma assinatura inválida!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "A ignorar o espelho do GitLab Pages porque o repositório é muito grande (>%.2fGB)!" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "Ignorando a geração de índices para {appid}" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "Ignorando '{apkfilename}' com uma assinatura inválida!" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "Ignorando {appid}: desativado" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "Especifique uma pasta local para ser sincronizada com o repositório" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "Especifique um ficheiro identidade para fornecer ao SSH para usar o rsync" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "Especifique o ficheiro de armazenamento de chaves de depuração." #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "Mostrar ainda mais informações que o normal" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "Esvaziar a assinatura misteriosa de {apkfilename}" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "O resumo '%s' é apenas o nome do app" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "A descrição de comprimento {length} é sobre o limite de charácteres {limit}" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "O relógio do sistema é mais antigo que a data em {path}!" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "O modo de atualização de marcações só funciona atualmente para repositórios git, hg, bzr e git-svn" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "Modo de atualização de marcações usado no git-svn, mas a repo não foi configurada com marcações" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Modo de teste - ponha a saída apenas no diretório tmp e sempre compile, mesmo que a saída já exista." #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "O código de versão OBB deve estar após \"{name}.\":" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "O URL base para o registo de mudanças do repositório (predefinição: https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "O diretório para onde escrever o espelho" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "O ficherio a ser incluído no repo (caminho ou glob)" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "A impressão digital do repositório não corresponde." #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "O diretório raiz para local_copy_dir \"{path}\" não existe!" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "Há uma colisão do keyalias - publicação parada" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "Estas são as aplicações que foram arquivadas do repositório principal." #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "Este comando nunca deve ser usado para espelhar o f-droid.org! Uma cópia completa requer mais que 600GB." #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "Este é um repositório de apps a serem usados com o F-Droid. Aplicações neste repositório são binários oficiais compilados pelos programadores da aplicação original ou são binários compilados da fonte por f-droid.org a usar as ferramentas em https://gitlab.com/fdroid." #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "Este repositório já tem metadados locais: %s" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" "Para completar a configuração, adicione os seus APKs ao \"%s\",\n" "depois execute \"fdroid update -c; fdroid update\". Também pode editar\n" "\"config.yml\" para definir a URL, nome do repo, e muito mais. Também deve configurar\n" "uma chave de assinatura (uma chave temporária pode ter sido gerada automaticamente).\n" "\n" "Para mais informações: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "e https://f-droid.org/docs/Signing_Process" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "Para usar awsbucket, os awssecretkey e awsaccesskeyid também devem ser definidos no config.yml!" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "Para usar rclone, rclone_config e awsbucket também devem ser definidos no config.yml!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "A URL deve começar com https:// ou http://" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "Encurtadores de URL não devem ser usados" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "Há o URL {url} na descrição: {error}" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "Etiqueta de licença \"{}\" inesperada! Use somente as etiquetas aprovadas pela FSF ou OSI de https://spdx.org/license-list" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Etiqueta de licença \"{}\" inesperada! Use somente as etiquetas de licença configuradas no seu ficheiro de configuração" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "Entrada {key} desconhecida em {configname}" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "Exceção desconhecida!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "Ficheiro desconhecido '{filename}' na compilação '{versionName}'" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "Formato de metadados desconhecido: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "O formato de metadados é desconhecido: {path} (use: *.yml)" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "Versão desconhecida do aapt, pode causar problemas: " #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "Espaço desnecessário à frente" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "Espaço desnecessário ao fim" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "Campo de aplicação '{fieldname}' não reconhecido em '{path}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Bandeira de compilação '{build_flag}' não reconhecida em '{path}'" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "Tipo de ficheiro \"{extension}\" não suportado para o gráfico de repo" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "Ficheiro gráfico não suportado encontrado: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "Extlib não utilizado em %s" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "Ficheiro não utilizado em %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "O caminho de scandelete não é usado: %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "O caminho de scanignore não é usado: %s" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Atualizar a informação do repositório para novos pacotes" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "Atualizar o registo de transparência de binário para um URL" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData tem URL inválido: {url}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "UpdateCheckData deve corresponder ao código da versão como inteiro (\\d ou [0-9]): {codeex}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "UpdateCheckData deve usar um URL HTTPS: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "UpdateCheckData não é uma URL válida: {url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode é definido, mas parece que likecheckupdates ainda não foi executado." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName (o nome da verificação de atualização) é definido como o ID comun da aplicação - pode ser removido" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "A enviar {apkfilename} ao androidobservatory.org" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "A enviar {apkfilename} ao virustotal" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Use /HEAD em vez de /master ou /main para apontar a um ficheiro no ramo predefinido" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Use ' fdroid update -c ' para criá-lo." #: ../fdroidserver/build.py msgid "Use build server" msgstr "Usar servidor de compilação" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "Use da data do APK em vez do tempo atual para APKs recém-adicionados" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "Usando \"{path}\" para configurar s3cmd." #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "A usar \"{path}\" para sincronizar com o armazenamento remoto." #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "A usar a assinatura APK v2" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "A usar a assinatura APK v3" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "A usar a assinatura JAR" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Usando o jarsigner de Java, não recomendado para verificar APKs! Use apksigner" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "A utilizar um dicionário em branco em vez do conteúdo de {path}!" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "Utilizando armazenamento de chave existente \"{path}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "A usar rclone para sincronizar com: {url}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "Usando s3cmd para sincronizar com: {url}" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Comandos válidos:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "Verifique a cópia em cache local em vez de redescarregando." #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "Verifique a integridade dos pacotes descarregados" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "Verificar o índice de assinatura:" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "A verificar o pacote {path} com apksigner." #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "A chave VirusTotal API não pode enviar ficheiros maiores que 32MB, use {url} para enviar {path}." #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Avisar sobre possíveis erros de metadados" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "Ficheiro binário WebAssembly" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Quando configurado para índices assinados, crie apenas índices não assinados nesta etapa" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "Ao cotar todo o repositório o yamllint é desativado por predefinição. Esta opção força o yamllint independentemente." #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "Se assinar ou verificar falhar, sair com um código de erro." #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "Gostaria de descarregar e instalar o F-Droid.apk via adb? (SIM/não)" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "Gostaria de descarregar a(s) aplicação(ões) do f-droid.org? (SIM/não)" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'Distiguished Name' usado na geração de chaves" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "Pode usar ANDROID_HOME para definir o caminho para o seu SDK, ou seja:" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "Arquivo de ficheiros ZIP" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "adb reporta {serial} é \"{status}\"!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "adicionando IdentityFile a {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "adicionando a {name}: {path}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "opção ambígua: %(option)s poderia corresponder %(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "apksigner nos build-tools;{version} passa APKs com assinaturas v3 inválidas, ignorando." #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "apksigner não encontrado! Não é possível assinar ou verificar APKs modernos" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "Nenhum apksigner encontrado, é necessário para assinar!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "ID de aplicação do ficheiro para operar" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "applicationID com versionCode opcional na forma APPID[:VERCODE]" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "archive_url precisa de terminar com /archive" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "argumento \"-\" com o modo %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "argumento %(argument_name)s: %(message)s" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "tentar a conexão nua por SSH para testar a implantação da chave:" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "não é possível analisar as especificações do scrlib (não é uma cadeia): '{}'" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "não é possível abrir '%(filename)s': %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "não é possível abrir o url não-https: '{};" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "não é possível encontrar os srclibs necessários: \"{path}\"" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "não é possível ter vários argumentos de subparser" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "não é possível unir ações - dois grupos são denominados %r" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "não é possível publicar a atualização, definiu a chave de implantação?" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "clonagem {url}" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "comandos dos módulos de plugin:" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "cadeia de opções conflitante: %s" msgstr[1] "cadeias de opções conflitantes: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "alias de subanalisador conflitante: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "subanalisador conflitante: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "não foi possível analisar '{path}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "não foi possível analisar a especificação srclib (nenhum nome especificado): '{}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "não foi possível analisar a especificação srclib (referência não especificada): '{}'" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "{path} criado" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "a versão atual é mais nova: velho vercódigo={old}, novo vercódigo={new}" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "apagando: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "ficheiro de dependência sem bloqueio" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "registo de processo implantado {path} a {dest}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "dest = é necessário para opções como %r" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "a descarregar '{}'" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "a descarga de assinaturas de scanner de '{}' falhou" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "binário executável, possivelmente código" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "%s argumento esperado" msgstr[1] "%s argumentos esperados" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "esperado pelo menos um argumento" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "esperado um argumento no máximo" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "esperado um argumento" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "fdroid [] [-h|--help|--version|]" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "buscar a versão de assinaturas mais recente da Web" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "Forçar os erros de metadados (padrão) para serem avisos, ou para serem ignorados." #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "git svn clone falhou" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "arquivo de ficheiros gzip" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "argumento explícito %r ignorado" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1 deve ter uma assinatura, use ' fdroid signindex ' para criá-lo!" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 deve ter uma assinatura, use droid signindex` para o criar!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "valor inválido do tipo %(type)s: %(value)r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "opção inválida: %(value)r (escolha de %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "valor conflict_resolution inválido: %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "Opção cadeia %(option)r inválida: deve começar com o caractere %(prefix_chars)r" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "ipfs_cid não encontrado, a ignorar a geração de CIDv1" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "a última receita de construção é mais recente: velho vercódigo={old}, novo vercódigo={new}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "local_copy_dir não termina com \"fdroid\", talvez quis: \"{path}\"" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "local_copy_dir deve ser um caminho absoluto!" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "local_copy_dir deve ser directory, não um ficheiro!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "espelho '%s' não termina com 'fdroid'!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "espelhos (mirrors) definidos duas vezes, em config.yml e em {path}!" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "argumentos mutuamente exclusivos devem ser opcional" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "próxima atualização do cache {name} prevista para {time}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "nenhum \"ícone\" em {appid}" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "nenhum APK fornecido" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "nenhuma informação de versão encontrada" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "não é permitido com o argumento %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "um dos argumentos %s é necessário" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "apenas aceita cadeias, listas e tuplos" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "opções" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "sobrescrevendo {path} existente" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "argumentos posicionais" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "a implementação do registo de processo {path} a {dest} falhou!" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "binária de referência sem assinatura" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "Recusado a descarrega via conexão HTTP insegura (use HTTPS ou especifique --no-https-check): {apkfilename}" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "repo_icon \"repo/icons/%s\" não existe, a gerar um espaço reservado." #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "repo_url precisa de terminar com /repo" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "rsync está ausente ou quebrado: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd sincroniza índices {path} para {url} e apaga" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "s3cmd sincroniza os índices de {path} para {url} e elimina os removidos" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "o cache do scanner está malformado! Pode limpá-lo com: '{clear}'" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "serverwebroot: o caminho não termina com \"fdroid\", talvez queria usar um destes:" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "biblioteca partilhada" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "mostrar esta ajuda e sair" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "APK assinado, seja um caminho de ficheiro ou um URL HTTPS." #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "pular a implantação de logs completos de compilação: o conteúdo do log está vazio" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "pular a implantação de logs de criação completos: não ativado na configuração" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "ignorando o tarball de origem: {path}" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "Nome 'srclibs' ausente e/ou '@'" #: ../fdroidserver/scanner.py msgid "static library" msgstr "biblioteca estática" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "o binário de referência fornecido tem o assinante permitido {signer}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "os seguintes argumentos são necessários: %s" #: ../fdroidserver/install.py msgid "true" msgstr "verdadeiro" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "opção de cadeia de texto inesperada: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "O formato '%(parser_name)r' é desconhecido. (Opções Válidas: %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "argumentos não reconhecidos: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "permissões inseguras em '{config_file}' (deveria ser 0600)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "utilização: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "usando o Apache libcloud para sincronizar com {url}" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "o virustotal.com está a limitar a taxa, à espera para voltar a tentar..." #: ../fdroidserver/install.py msgid "yes" msgstr "sim" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "{0} app, {1} aliases chave" msgstr[1] "{0} apps, {1} aliases chave" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) não tem metadados!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "AndroidManifest.xml do {apkfilename} tem uma data má: " #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} não tem um nome! A usar o ID da aplicação em vez disso." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "{appid} de {path} não é um ID de aplicação Android válido!" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "{appid} do {path} não é um Nome de Pacote Java válido!" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "{appid} tem APKs e ficheiros: {files}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "{appid} tem falta de {name}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "{appid}: extlib {path} desconhecido na compilação '{versionName}'" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "{appid}: nehnuma compilação especificada, em execução no estado de origem atual" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "{appid}: {field} deve ser um '{type}', mas é um '{fieldtype}!'" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "{appid}: {field} deve ser um '{type}', mas é um '{fieldtype}'!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "{build_flag} deve ser um inteiro, encontrado: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "{build_flag} deve ser uma lista ou uma cadeia de caracteres, encontrado: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "{file} está em branco ou corrompido!" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" não existe! Corrija-o no \"config.yml\"." #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "{path} já existe, a ignorar os resultados das importações!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "{path} não existe! Crie-o executando:" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "{path} tem uma má assinatura de ficheiro \"{pattern}\", um exploração Janus é possível!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} foi marcado por virustotal {count} vezes:" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "{path} tem a impressão digital errada ({fingerprint})!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "{path} não é um dicionário \"key: value\", mas um {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "{path} não é um ficheiro de configuração padrão!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "{path} não é uma lista, mas um {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "{path} não é um {expected_type}, mas um {datatype}!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "{path} tem um tamanho de zero!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "{path} mais que 200MB, enviar manualmente: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "{path}: \"{code}\" não é um código de país ISO_3166-1 alfa-2 válido!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "{path}: {error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "{url} não termina com \"fdroid\", verifique o caminho na URL!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "{url} não começa com \"http\"!" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "{} compilação falhada" msgstr[1] "{} compilações falhadas" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "{} compilação com sucesso" msgstr[1] "{} compilações com sucesso" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/ro/0000755000175000017500000000000014770510164014603 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/ro/LC_MESSAGES/0000755000175000017500000000000014770510164016370 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/ro/LC_MESSAGES/fdroidserver.po0000644000175000017500000026763514770507747021466 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Daniel Șerbănescu , 2021. # Christian Eichert , 2021. # Simona Iacob , 2021, 2022, 2023, 2024. # Licaon Kter , 2021, 2022, 2023, 2024. # Hans-Christoph Steiner , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.0a5-27-gf24eae0f\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2024-12-02 17:00+0000\n" "Last-Translator: Licaon Kter \n" "Language-Team: Romanian \n" "Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2;\n" "X-Generator: Weblate 5.9-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "Cheia publică SSH care urmează să fie utilizată ca cheie de implementare:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "{path} codificată pentru variabila secretă DEBUG_KEYSTORE:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" nu are un fișier de metadate corespunzător!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "\"local_copy_dir\" {path} nu există!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" este deja instalat pe {dev}." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "\"{path}\" conține {name} recente ({version})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "\"{path}\" există, dar s3cmd nu este instalat!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "\"{path}\" nu este un format de fișier acceptat (utilizați: metadata/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "\"{path}\" este semnat de o cheie care nu este permisă:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" nu este un URL valid!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: eroare: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "%d fișiere APK nu au putut fi semnate sau verificate!" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d probleme găsite" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%r nu este apelabil" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "%s nu a produs un text!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "%s are un SHA-256 greșit: %s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s nu este un câmp de construcție acceptat" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' nu a fost găsit în config.yml!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "'keystore' este NONE și 'smartcardoptions' este gol!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "'keystore' nu a fost găsit în config.yml!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "'keystorepass' nu se găsește în config.yml!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' nu se găsește în config.yml!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required' este un argument invalid pentru poziționale" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "'sdk_path' nu este setat în 'config.yml'!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' este prea vechi, fdroid necesită build-tools-{version} sau mai nou!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "'{path}' nu a reușit să se execute!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' are un format invalid, ar trebui să fie un dicționar!" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' nu este valid {field} în {appid}. Regex model: {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' nu este un {field} valid, ar trebui să fie {pattern}" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...checkupdate a eșuat pentru {appid} : {error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() nu este definit" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "/problemele lipsesc" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "Un URL este necesar ca argument!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "Semnăturile APK au certificate diferite în {path}:" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "Adăugați semnături PGP folosind GnuPG pentru pachetele din depozit" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "Adăugați o cheie de semnare repo la un depozit nesemnat" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "Adăugați fișiere de metadate schelet pentru APK-urile care le lipsesc" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "Adăugarea unui nou depozit doar pentru {name}" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "Alias al cheii de semnare repo din magazinul de chei" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "AllowedAPKSigningKeys lipsește, dar este furnizat un binar de referință" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "Permite specificarea unei revizuiri diferite (sau a unei ramuri git) pentru importul inițial" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "De asemenea, oglindește secțiunea arhivă completă" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "De asemenea, avertizează asupra problemelor de formatare, cum ar fi rewritemeta -l" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "Biblioteca Android AAR" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "Android APK fișier" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "Android DEX cod" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "Android SDK nu a fost găsit la {path}!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "Calea Android SDK '{path}' nu există!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "Calea Android SDK '{path}' nu este un director!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "Instrumentul Android SDK {cmd} nu a fost găsit!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Aplicația are binare, dar nu are AllowedAPKSigningKeys corespunzătoare pentru a fixa certificatul." #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "Aplicatia are NoSourceSince sau ArchivePolicy \"0 versions\" dar AutoUpdateMode sau UpdateCheckMode nu sunt None" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "Aplicația se află în '{repo}', dar are un link către {url}" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Versiunea aplicației are o versiune binară, dar nu are AllowedAPKSigningKeys corespunzătoare pentru a fixa certificatul." #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "Adăugarea .git nu este necesară" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "Arhivare {apkfilename} cu semnătură invalidă!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode cu UpdateCheckMode: HTTP trebuie să aivă un format." #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "Intrare de tip \"{mirrortype}\" greșită în configurația oglinzilor: {mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "URL de bază pentru oglindire, poate include cheia de semnare a indexului folosind șirul de interogare: ?fingerprint=" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "Ramificația '{branch}' utilizată ca și confirmare în construcția '{versionName}'" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "Ramificația '{branch}' utilizată ca și commit în srclib '{srclib}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "Legătură sym ruptă: {path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "Construiți un pachet din sursă" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "Construiți toate aplicațiile disponibile" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "Construire generată de `fdroid import` - eliminați linia de dezactivare odată ce este gata" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "Depozitul git al metadatelor de construire are modificări necomandate!" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "Construiți doar cea mai recentă versiune a fiecărui pachet" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "Construit depozit bazat în \"%s\" cu această configurație:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "Nu se poate actualiza automat aplicația fără CurrentVersionCode" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Nu se poate construi din cauza unei erori {} în timpul scanării" msgstr[1] "Nu se poate construi din cauza erorilor {} în timpul scanării" msgstr[2] "Nu se poate construi din cauza erorilor {} în timpul scanării" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Nu se poate rescrie \"{path}\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "Categoriile \"%s\" nu sunt valabile" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "Categoriile nu sunt setate" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "Categoria \"{category}\" este definită dar nu este folosită de nici o aplicație!" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Verificați dacă există actualizări ale aplicațiilor" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "Verificarea arhivării pentru {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Actualizare curată - nu folosește memoria cache, reprocesează toate APK-urile" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Lista de categorii separate prin virgulă." #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "Comanda '%s' nerecunoscută.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "Efectuați modificări" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "Definiții \"{field}\" contradictorii între fișierele .yml și cele localizate:" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Argumente contradictorii: '--verbose' și '--quiet' nu pot fi specificate în același timp." #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "Nu a putut găsi '{command}' pe sistemul dvs" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Nu a putut găsi codul ultimei versiuni" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Nu a putut găsi numele celei mai recente versiuni" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "Nu a putut găsi {path} pentru a-l elimina" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "Nu s-a putut deschide APK {path} pentru analiză: " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Nu a putut analiza dimensiunea \"{size}\", tip greșit \"{type}\"" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Nu s-a putut găsi ID-ul aplicației" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "Nu am putut găsi nicio informație despre versiune" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "Nu a putut găsi ID-ul pachetului" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "Refuzând cu lașitate să suprascrieți configurarea cheilor de semnare existente!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "Creat un nou container \"{name}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Crearea \"{path}\" pentru configurarea s3cmd." #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Creating empty {config_file}" msgstr "Citirea '{config_file}'" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Crearea directorului de jurnal" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "Crearea unui nou recipient S3: {url}" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "Crearea directorului de ieșire" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "Crearea unui index semnat cu această cheie (SHA256):" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "Crearea unui director temporar" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "Crearea unui index nesemnat în vederea pregătirii pentru semnare" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "CurrentVersionCode {cv} este mai mic decât cea mai veche intrare de construcție {versionCode}" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "DEBUG_KEYSTORE nu este setat sau valoarea este incompletă" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "Ștergeți APK-urile și/sau OBB-urile fără metadate din repo" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "Ștergerea arhivei, repo este prea mare ({size} max {limit})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "Ștergerea istoricului git-mirror, repo este prea mare ({size} max {limit})" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "Ștergerea unui fișier necunoscut: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "Descrierea \"%s\" este doar un rezumat al aplicației" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "Descrierea are o linie duplicată" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "Descrierea lungimii {length} este peste limita {limit} limitei de caractere" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "Ați vrut de fapt config/{name}.yml?" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "Ați vrut de fapt {code}?" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "Nu adăugați \"disable:\" la intrările de construcție generate" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "Nu distribuiți noile fișiere în repo" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "Nu includeți \"{path}\" în URL!" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "Nu solicitați calea Android SDK, doar eșuați" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "Nu eliminați cheile private generate din keystore" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "Nu creați un tarball sursă, util atunci când testați o construcție" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "Nu reîmprospătați depozitul, util atunci când testați o construcție fără conexiune la internet" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "Nu folosiți sumele de verificare rsync" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Descărcați oglinzi complete ale depozitelor mici" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Descărcarea depozitului a eșuat deja o dată, nu mai încerc din nou." #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "Descărcarea {url} a eșuat. {error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "Declarația duplicată Anti-Feature la {path} a fost ignorată!" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "Intrare duplicată \"%s\" în oglinzile config!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "Legătură duplicată în \"{field}\": {url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "EROARE: %(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "ERROR: Subcomanda \"server\" a fost eliminată, utilizați \"deploy\"!" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "ERROR: tip CI neacceptat, patch-uri binevenite!" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "EROARE: gazdă git neacceptată „%s”, corecții binevenite!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "Encoding este setat la '{enc}' fdroid ar putea întâmpina probleme de codificare. Vă rugăm să o setați la 'UTF-8' pentru cele mai bune rezultate." #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" "Introduceți aici calea către Android SDK (%s):\n" "> " #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "Variabila de mediu {var} din {configname} nu este setată!" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "Variabila de mediu {var} din {configname} nu este setată!" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "Eroare la obținerea adresei repo" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "Ieșiți cu un cod diferit de zero dacă au fost găsite probleme" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "Extrageți metadatele aplicației dintr-un depozit sursă" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "Extrageți semnăturile din APK-uri" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "A eșuat copierea {path}: {error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "A eșuat preluarea semnăturilor pentru '{apkfilename}': {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "A eșuat citirea {path}: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "A eșuat redimensionarea {path}: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "Nu s-a reușit crearea unui recipient S3: {url}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "Nu a reușit să obțină informații despre APK, ștergând {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "Nu a reușit să obțină informații despre APK, sărind peste {path}" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "Nu a reușit să obțină amprenta digitală a cheii de semnare APK" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "Nu s-a reușit instalarea '{apkfilename}' pe {dev}: {error}" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "Nu a reușit să semneze aplicația" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "A preluat buildserverid de la VM: {buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "A preluat semnăturile pentru '{apkfilename}' -> '{sigdir}'" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "Fișierul a dispărut în timpul procesării acestuia: {path}" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "Finalizat" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Etichete HTML interzise" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "Forțează compilarea forțată a aplicațiilor dezactivate și continuă indiferent de problemele de scanare. Este permisă numai în modul de testare." #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "Forțați oprirea construcției după {0} sec timeout!" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "Forțați scanarea aplicațiilor și construcțiilor dezactivate." #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "Am găsit graficul \"{path}\" fără metadate pentru aplicația \"{name}\"!" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "Am găsit un fișier de finanțare necorespunzător \"{path}\" pentru \"{name}\":" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "Găsit appids invalid în argumente" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "Am găsit coduri de versiune invalide pentru unele aplicații" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "Am găsit mai multe fișiere JAR Signature Block în {path}" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "S-au găsit mai multe certificate de semnare!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "Am găsit mai multe fișiere de metadate pentru {appid}" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "S-au găsit mai multe certificate de semnare pentru depozit." #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "Nu s-au găsit certificate de semnare pentru depozit." #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "Găsit non-file la %s" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "Am găsit {apkfilename} la {url}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "Am găsit {count} probleme în {filename}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "Am găsit {count} avertismente în {filename}" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "Generarea metadatelor schelet pentru {appid}" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "Verificarea Git a '%s' a eșuat" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "Curățarea Git a eșuat" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "Git fetch a eșuat" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Git remote set-head a eșuat: \"%s\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Resetarea Git a eșuat" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "Eliminarea submodulelor Git a eșuat" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "Sincronizarea submodulelor Git a eșuat" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "Actualizarea submodulelor Git a eșuat" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "HTTPS trebuie folosit cu URL-urile Subversion!" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "Dacă o oglindă git devine prea mare, permite ca arhiva să fie ștearsă" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "Dacă această încărcare eșuează, încercați să încărcați manual la {url}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "Ignorarea lui '{field}' în metadatele '{metapath}', deoarece este depășită." #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "Ignorarea intrării FUNDING.yml mai lungă de 2048: %s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "Ignorarea elementului greșit din manifest: %s" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "{oldfile} este depreciat, folosiți {newfile}" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Ignorarea pachetului fără metadate: " #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "Ignorarea datelor vechi din memoria cache pentru {apkfilename}" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "Includeți APK-uri care sunt semnate cu algoritmi dezactivați, cum ar fi MD5" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "Includeți fișierele .asc cu semnătura PGP în oglindă" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "Includeți jurnalele de construcție în oglindă" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "Includeți tarball-urile sursă în oglindă" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "Includerea metadatelor din %s@%s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "Includerea metadatelor din {path}" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "Inițializarea submodulelor" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "Instalați toate aplicațiile semnate disponibile" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "Instalarea pachetelor construite pe dispozitive" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "Se instalează %s..." #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "Instalarea '{apkfilename}' pe {dev}..." #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "Interacționați cu serverul HTTP repo" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "APK invalid" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "AutoUpdateMode invalid: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "UpdateCheckMode invalid: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "VercodeOperation invalid: {field}" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "VercodeOperation invalidă: {invalid_ops}" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "ID-ul aplicației nevalabil {appid}" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Listă cu puncte invalidă" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "Nume nevalabil pentru fișierul publicat: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "Ndk invalid: intrare în build: \"{ndk}\"" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "Redirecționare nevalabilă către non-HTTPS: {before} -> {after} " #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "Metadate scrlib nevalabile: '{file}' nu există" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "Metadate srclib nevalabile: nu s-a putut analiza '{file}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "Metadate srclib invalide: cheie necunoscută '{key}' în '{file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "Nu s-a reușit verificarea semnăturii JAR: {path}" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "Semnătura JAR verificată: {path}" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "Fișier Java JAR" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "Java JDK nu a fost găsit! Instalați în locația standard sau setați java_paths!" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "Clasa compilată Java" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "Java jarsigner nu a fost găsit! Instalați în locația standard sau setați java_paths!" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "Javascript în atributele src HTML" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "Nu a reușit să construiască \"{apkfilename}\"" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "Keystore pentru cheia de semnare:\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "Cheie de depanare cunoscută este utilizată în AllowedAPKSigningKeys: " #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "Ultima confirmare utilizată '{commit}' arată ca o etichetă, dar UpdateCheckMode este '{ucm}'" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "Metodele de donație Liberapay se află în Liberapay: câmp" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "Lista fișierelor care ar urma să fie reformatate (execuție în regim de probă)" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "Locale incluse în URL-ul f-droid.org" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "Opriți construcția la excepții" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "Oglinzi de depozit malformate." #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "Linie de root a serverului web deformată:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "A fost atinsă adâncimea maximă de recursivitate în fișierul ZIP: %s" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Oglindește întregul repo și arhiva, toate tipurile de fișiere." #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "Lipsește directorul de ieșire" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "Mutarea declarațiilor Anti-Features în fișierele localizate:" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "Nici \"repo_pubkey\" și nici \"keystorepass\" nu sunt setate în config.yml" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "Nu există APK pentru pachetul: %s" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "Nu s-a găsit niciun SDK Android!" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "Nu s-au găsit dispozitive atașate" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "Nu există amprente în URL." #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "Nu există submodule git disponibile" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "Nu a putut fi găsit niciun proiect gradle. Specificați --subdir?" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "Nu s-au găsit informații." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "Nu s-au găsit etichete corespunzătoare" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "Nu a fost găsită nicio versiune minimă a SDK în {0}, se utilizează versiunea implicită (3)." #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "Nu este nevoie să specificați că aplicația este Free Software" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "Nu este nevoie să specificați că aplicația este pentru Android" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "Nu există set de opțiuni! Modificați fișierul config.yml pentru a seta cel puțin una dintre acestea:" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "Nu sunt specificate pachete" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "Nu există niciun APK semnat disponibil pentru %s" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "Nici un director de ieșire semnat - nimic de făcut" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "Nu s-au găsit certificate de semnare în {path}" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "Nu există un astfel de pachet: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "Nu există un astfel de versionCode {versionCode} pentru aplicația {appid}" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "Nu s-au găsit etichete" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "Niciun director nesemnat - nimic de făcut" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "Nu s-au găsit informații despre versiune." #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "Nu este o definiție valabilă a dimensiunii: \"{}\"" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "Nimic de făcut" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "Nimic de făcut pentru {appid}." #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "Acum setați-le în config.yml:" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "Fișierul OBB are un versionCode({integer}) mai nou decât orice APK:" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "Numele fișierului OBB trebuie să înceapă cu \"main.\" sau \"patch.\":" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "OBB's packagename nu se potrivește cu un APK acceptat:" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Mașină offline, sărind peste generarea oglinzii git până la `fdroid deploy`" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Doar PNG și JPEG sunt acceptate pentru grafică, găsite: {path}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "Procesați numai aplicațiile cu actualizări automate" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Metodele de donație OpenCollective aparțin OpenCollective: câmp" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Emite raportul JSON în fișierul numit după APK." #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "Emite JSON către stdout." #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "Ieșirea JSON" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "Licența generală a proiectului." #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "Suprascrierea versiunii goale VersionName în {apkfilename} din metadate: {version}" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "Pachetul \"{appid}\" există deja" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "Analiza manifestului la '{path}'" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "Parola este necesară cu numele de utilizator" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "Calea de acces la subdirectorul principal al proiectului Android, dacă nu se află în root." #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "Calea către Android SDK (uneori setată în ANDROID_HOME)" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "Calea către repo-ul git care urmează să fie utilizat ca jurnal" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "Calea către depozitul de chei pentru cheia de semnare a repo-ului" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Tipărește variabila secretă în terminal pentru un ușor copy/paste" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "Problema cu fișierul ZIP: %s, eroare %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "Problemă cu xml la '{path}'" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "Procesul de autoactualizare" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "Procesarea {apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "Prelucrare {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "Producerea de fișiere XML/JSON lizibile de către om pentru fișierele de indexare" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "URL-ul proiectului din care se importă." #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "Punctuația trebuie evitată" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "Împingeți jurnalul în acest depozit de la distanță git" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "Trimiterea jurnalului de transparență binară la {url}" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "Încărcarea la serverul de la distanță a eșuat!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "Împingerea către {url}" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "Începeți rapid un nou depozit" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "Citiți toate fișierele de metadate și ieșiți" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "Citirea '{config_file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "Citirea packageName/versionCode/versionName a eșuat, APK invalid: '{apkfilename}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "Citirea packageName/versionCode/versionName a eșuat, APK invalid: '{apkfilename}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "Citirea {apkfilename} din memoria cache" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Actualizează și stochează în memorie regulile și semnăturilor de scanare din rețea" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Eliminarea fișierelor specificate" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "Eliminarea lui {path}\"" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "Redenumiți fișierele APK care nu se potrivesc cu package.name_123.apk" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "Renunțarea la {apkfilename} cu debug.keystore furnizat" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "Redimensionați toate pictogramele care depășesc dimensiunea maximă a pixelilor și ieșiți" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "Limitarea ieșirii la avertismente și erori" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Rescrieți toate fișierele de metadate" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "Rescrierea '{appid}'" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "Rulați pe un depozit git care are modificări necomandate" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "Rulați rewritemeta pentru a repara formatarea" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "Rularea primei treceri cu verificarea MD5 dezactivată" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "Rularea wget în {path}" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "SHA-256 din {url} nu se potrivește cu intrarea!" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "Scanați APK-ul (APK-urile) rezultat(e) pentru clasele cunoscute care nu sunt libere." #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "Scanarea codului sursă al unui pachet" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "Scanerul a găsit {count} probleme în {apk}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "Scanerul a găsit {count} probleme în {appid}:" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "Scanerul a găsit {count} probleme în {appid}:{versionCode}:" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "Scannerul a găsit o problemă {}" msgstr[1] "Scannerul a găsit {} probleme" msgstr[2] "Scannerul a găsit {} probleme" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "Scanarea APK cu dexdump pentru clasele cunoscute ca fiind non-libere." #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "Setați NDK {release} ({version}) sus" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "Setați ceasul la ora respectivă folosind:" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "Setați numărul maxim de versiuni în depozit înainte ca cele mai vechi să fie arhivate" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "Setați limita fișierelor deschise la {integer}" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "Configurați o compilare de aplicații pentru un depozit de compilare nocturnă" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "Setarea limitei fișierelor deschise a eșuat: " #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "Setarea {0} sec timeout pentru această construcție" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "Semnați și plasați pachetele în repo" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "Semnează indexurile create folosind update --nosign" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "Treceți peste scanarea codului sursă pentru binare și alte probleme" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "Ignorarea '{apkfilename}' cu semnătură invalidă!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "Omiterea oglinzii GitLab Pages pentru că repo-ul este prea mare (>%.2fGB)!" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "Ignorarea generării indexului pentru {appid}" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "Săritură {apkfilename} cu semnătură invalidă!" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "Salt peste {appid}: dezactivat" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "Specificați un dosar local în care să sincronizați depozitul" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "Specificați un fișier de identitate pe care să îl furnizați la SSH pentru rsyncing" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "Specificați fișierul keystore de depanare care trebuie utilizat." #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "Aruncă și mai multe informații decât în mod normal" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "Eliminarea semnăturii misterioase din {apkfilename}" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "Rezumat \"%s\" este doar numele aplicației" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "Rezumat al lungimii {length} depășește limita de caractere {limit} char limit" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "Ceasul sistemului este mai vechi decât data din {path}!" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "Modul de actualizare a etichetelor funcționează doar pentru depozitele git, hg, bzr și git-svn în prezent" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "Modul de actualizare a etichetelor folosit în git-svn, dar repo-ul nu a fost configurat cu etichete" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Modul test - puneți ieșirea numai în directorul tmp și construiți întotdeauna, chiar dacă ieșirea există deja." #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "Codul versiunii OBB trebuie să apară după \"{name}.\":" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "URL-ul de bază pentru repo-ul de logat (implicit: https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "Directorul în care se va scrie oglinda" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "Fișierul care urmează să fie inclus în repo (cale sau glob)" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "Amprenta digitală a depozitului nu se potrivește." #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "Directorul root pentru local_copy_dir \"{path}\" nu există!" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "Există o coliziune keyalias - publicarea a fost oprită" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "Acestea sunt aplicațiile care au fost arhivate din depozitul principal." #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "Această comandă nu trebuie folosită niciodată pentru a seta un server de rezervă f-droid.org! O copie completă necesită mai mult de 600GB." #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "Acesta este un depozit de aplicații care pot fi utilizate cu F-Droid. Aplicațiile din acest depozit sunt fie binare oficiale construite de către dezvoltatorii aplicațiilor originale, fie binare construite din sursă de către administratorul f-droid.org folosind instrumentele de pe https://gitlab.com/fdroid." #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "Acest depozit are deja metadate locale: %s" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" "Pentru a finaliza configurarea, adăugați APK-urile la \"%s\"\n" "apoi rulați \"fdroid update -c; fdroid update\". De asemenea, este posibil să doriți să editați\n" "\"config.yml\" pentru a seta URL-ul, numele repo și altele. De asemenea, ar trebui să configurați\n" "o cheie de semnare (este posibil ca una temporară să fi fost generată automat).\n" "\n" "Pentru mai multe informații: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "și https://f-droid.org/docs/Signing_Process" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "Pentru a utiliza awsbucket, awssecretkey și awsaccesskeyid trebuie să fie de asemenea setate în config.yml!" #: ../fdroidserver/deploy.py #, fuzzy msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "Pentru a utiliza awsbucket, awssecretkey și awsaccesskeyid trebuie să fie de asemenea setate în config.yml!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "URL-ul trebuie să înceapă cu https:// sau http://" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "Scurtătoarele de URL-uri nu trebuie utilizate" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "URL {url} în Descriere: {error}" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "Etichetă de licență neașteptată \"{}\"! Folosiți numai etichete aprobate de FSF sau OSI de pe https://spdx.org/license-list" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Etichetă de licență neașteptată \"{}\"! Utilizați numai etichetele de licență configurate în fișierul de configurare" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "Intrare necunoscută {key} în {configname}" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "S-a găsit o excepție necunoscută!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "Fișier necunoscut '{filename}' în build '{versionName}'" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "Format de metadate necunoscut: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "Format de metadate necunoscut: {path} (use: *.yml)" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "Versiune necunoscută de aapt, ar putea cauza probleme: " #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "Spațiu de conducere inutil" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "Spațiu de urmărire nejustificat" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "Câmp de aplicație nerecunoscut '{fieldname}' în '{path}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Indicator de construcție nerecunoscut '{build_flag}' în '{path}'" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "Tip de fișier \"{extension}\" neacceptat pentru graficul repo" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "A fost găsit un fișier grafic neacceptat: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "Extlib nefolosit la %s" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "Fișier nefolosit la %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "Calea de scanare a ștergerii neutilizată: %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "Cale de scanare neutilizată: %s" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Actualizarea informațiilor repo pentru noile pachete" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "Actualizarea jurnalului de transparență binară pentru o adresă URL" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData are un URL invalid: {url}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "UpdateCheckData trebuie să corespundă codului versiunii ca număr întreg (\\d sau [0-9]): {codeex}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "UpdateCheckData trebuie să utilizeze un URL HTTPS: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "UpdateCheckData nu este un URL valid: {url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode este setat, dar se pare că checkupdates nu a fost încă rulat." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName este setat la ID-ul cunoscut al aplicației, acesta poate fi eliminat" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "Încărcarea {apkfilename} pe androidobservatory.org" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "Încărcarea {apkfilename} la virustotal" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Folosiți /HEAD în loc de /master sau /main pentru a indica un fișier din ramura implicită" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Utilizați `fdroid update -c` pentru a-l crea." #: ../fdroidserver/build.py msgid "Use build server" msgstr "Utilizați serverul de construcție" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "Utilizați data din APK în loc de ora curentă pentru APK-urile nou adăugate" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "Utilizarea \"{path}\" pentru configurarea s3cmd." #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "Utilizarea \"{path}\" pentru configurarea s3cmd." #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "Folosind APK Signature v2" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "Folosind APK Signature v3" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "Folosind JAR Signature" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Folosind jarsigner de la Java, nu este recomandat pentru verificarea APK-urilor! Utilizați apksigner" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "Utilizarea dicționarului gol în loc de conținutul lui {path}!" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "Utilizarea keystore-ului existent \"{path}\"" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "Folosind s3cmd pentru a sincroniza cu: {url}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "Folosind s3cmd pentru a sincroniza cu: {url}" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Comenzile valide sunt:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "Verificați în funcție de copia memorată în memoria cache locală, mai degrabă decât să reîncărcați." #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "Verificarea integrității pachetelor descărcate" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "Verificarea semnăturii indexului:" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "VirusTotal API key nu poate încărca fișiere mai mari de 32MB, utilizați {url} pentru a încărca {path}." #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Avertizează cu privire la posibile erori de metadate" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Atunci când este configurat pentru indici cu semnătură, creați numai indici fără semnătură în această etapă" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "Atunci când se face linting pentru întregul depozit, yamllint este dezactivat în mod implicit. Această opțiune forțează yamllint indiferent de aceasta." #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "În cazul în care semnarea sau verificarea eșuează, ieșiți cu un cod de eroare." #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 \"Distinguished Name\" utilizat la generarea cheilor" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "Puteți utiliza ANDROID_HOME pentru a seta calea către SDK-ul dvs., adică:" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "Arhiva de fișiere ZIP" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "adăugând IdentityFile la {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "adăugând la {name}: {path}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "opțiune ambiguă: %(option)s ar putea corespunde cu %(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "apksigner nu a fost găsit! Nu se poate semna sau verifica APK-urile moderne" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "apksigner nu a fost găsit, este necesar pentru a semna!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "ID-ul de aplicație al fișierului pe care se operează" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "ID-ul aplicației cu versionCode opțional sub forma APPID[:VERCODE]" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "archive_url trebuie să se termine cu /archive" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "argumentul \"-\" cu modul %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "argument %(argument_name)s: %(message)s" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "încercând o conexiune SSH goală pentru a testa cheia de implementare:" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "nu poate analiza specificația scrlib (not a string): '{}'" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "nu se poate deschide '%(filename)s': %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "nu se poate deschide un URL non-https: '{};" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "nu poate găsi srclibs necesare: \"{path}\"" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "nu poate avea mai multe argumente subparser" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "nu poate fuziona acțiuni - două grupuri se numesc %r" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "nu poate publica actualizarea, ați setat cheia de implementare?" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "clonarea {url}" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "comenzi din modulele plugin:" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "șir de opțiuni conflictuale: %s" msgstr[1] "șiruri de opțiuni conflictuale: %s" msgstr[2] "șiruri de opțiuni conflictuale: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "șir de alias conflictual: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "șir de opțiuni conflictuale: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "nu s-a putut analiza '{path}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "nu a putut analiza specificația srclib (nu a fost specificat niciun nume): '{}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "nu a putut analiza specificația srclib (nu a fost specificat niciun ref): '{}'" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "a creat {path}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "versiunea curentă este mai nouă: old vercode={old}, new vercode={new}" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "ștergere: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "a implementat jurnalul de proces {path} la {dest}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "dest= este necesar pentru opțiuni precum %r" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "descărcare '{}'" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "descărcarea semnăturilor de scaner de la '{}' a eșuat" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "binar executabil, eventual cod" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "argument %s așteptat" msgstr[1] "argumente %s așteptate" msgstr[2] "argumente %s așteptate" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "se așteaptă cel puțin un argument" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "se așteaptă cel mult un argument" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "se așteaptă un singur argument" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "fdroid [] [-h|--help|--version|]" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "extrage cea mai recentă versiune de semnături de pe web" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "forțează erorile de metadate (implicit) să fie avertismente sau să fie ignorate." #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "git svn clone a eșuat" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "Arhiva de fișiere gzip" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "a ignorat argumentul explicit %r" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1 trebuie să aibă o semnătură, folosiți `fdroid signindex` pentru a o crea!" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 trebuie să aibă o semnătură, folosiți `fdroid signindex` pentru a o crea!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "invalid %(type)s valoare: %(value)r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "alegere invalidă: %(value)r (alege din %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "valoare invalidă a rezoluției_conflictului: %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "șir de opțiuni invalid %(option)r: trebuie să înceapă cu un caracter %(prefix_chars)r" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "ipfs_cid nu a fost găsit, sărind peste generarea CIDv1" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "ultima rețetă de construcție este mai nouă: old vercode={old}, new vercode={new}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "local_copy_dir nu se termină cu \"fdroid\", poate ai vrut să spui: \"{path}\"" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "local_copy_dir trebuie să fie o rută de acces absolută!" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "local_copy_dir trebuie să fie un director, nu un fișier!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "oglinda '%s' nu se termină cu 'fdroid'!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "servere de rezervă duplicat, în config.yml și {path}!" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "argumentele care se exclud reciproc trebuie să fie opționale" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "următoarea actualizare a memoriei cache {name} va fi efectuată în {time}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "nu există \" pictogramă \" în {appid}" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "nici un APK furnizat" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "nu s-au găsit informații despre versiune" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "nu este permis cu argumentul %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "unul dintre argumentele %s este necesar" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "acceptă doar șiruri de caractere, liste și tupluri" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "opțiuni" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "suprascriere {path} existent" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "argumente poziționale" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "jurnalul procesului deploy {path} la {dest} a eșuat!" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "referință binară semnătură lipsă" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "refuză descărcarea prin conexiune HTTP nesigură (utilizați HTTPS sau specificați --no-https-check): {apkfilename}" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "repo_icon \"repo/icons/%s\" nu există, se generează un înlocuitor." #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "repo_url trebuie să se termine cu /repo" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "rsync lipsește sau este nefuncțional: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd sincronizează indexurile {path} cu {url} și șterge" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "s3cmd sincronizează indexurile {path} cu {url} și le șterge pe cele eliminate" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "cache-ul scanerului este deformat! Puteți să o ștergeți cu: '{clear}'" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "serverwebroot: calea nu se termină cu \"fdroid\", poate că v-ați referit la una dintre acestea:" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "bibliotecă partajată" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "arată acest mesaj de ajutor și iese" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "APK semnat, fie un file-path, fie un URL HTTPS." #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "săriți distribuirea jurnalelor complete de construcție: conținutul jurnalului este gol" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "săriți distribuirea jurnalelor complete de construcție: nu este activată în configurare" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "săriți de la pachetul sursă: {path}" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "srclibs lipsește numele și/sau @" #: ../fdroidserver/scanner.py msgid "static library" msgstr "bibliotecă statică" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "binare de referință furnizate au permis semnatarului {signer}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "sunt necesare următoarele argumente: %s" #: ../fdroidserver/install.py msgid "true" msgstr "adevărat" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "șir de opțiuni neașteptate: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "parser necunoscut %(parser_name)r (choices: %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "argumente nerecunoscute: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "permisiuni nesigure pe '{config_file}' (ar trebui să fie 0600)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "utilizare: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "folosind Apache libcloud pentru a se sincroniza cu {url}" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com limitează rata, așteptând o nouă încercare..." #: ../fdroidserver/install.py msgid "yes" msgstr "da" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "{0} aplicație, {1} aliasuri de chei" msgstr[1] "{0} aplicații, {1} aliasuri de chei" msgstr[2] "{0} aplicații, {1} aliasuri de chei" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) nu are metadate!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "AndroidManifest.xml al lui {apkfilename} are o dată greșită: " #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} nu are un nume! În schimb, utilizați ID-ul aplicației." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "{appid} din {path} nu este un ID de aplicație Android valid!" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "{appid} din {path} nu este un nume de pachet Java valid!" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "{appid} are atât APK-uri, cât și fișiere: {files}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "{appid} lipsește {name}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "{appid}: Extlib necunoscut {path} în build '{versionName}'" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "{appid}: nu este specificată nicio construcție, rulează pe starea curentă a sursei" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "{appid}: {field} trebuie să fie un \"{type}\", dar este un \"{fieldtype}!\"" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "{appid}: {field} trebuie să fie un '{type}', dar este un '{fieldtype}'!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "{build_flag} trebuie să fie un număr întreg, găsit: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "{build_flag} trebuie să fie un număr întreg, găsit: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "{file} este gol sau corupt!" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" nu există! Verificați \"config.yml\"." #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "{path} există deja, ignorând rezultatele importului!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "{path} nu există! Creați-l prin rularea:" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "{path} are o semnătură proastă a fișierului \"{pattern}\", posibil exploit Janus!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} a fost marcat de virustotal de {count} ori:" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "{path} nu este de tip \"key: value\", ci {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "{path} nu este un fișier de configurare standard!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "{path} nu este o listă, ci {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "{path} nu este {expected_type}, ci {datatype}!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "{path} este de dimensiune zero!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "{path} mai mult de 200MB, încărcați manual: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "{path}: \"{code}\" nu este un cod de țară valid conform ISO_3166-1 alpha-2!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "{path}: {error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "{url} nu se termină cu \"fdroid\", verificați calea URL!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "{url} nu începe cu \"http\"!" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "{} construcția a eșuat" msgstr[1] "{} a eșuat" msgstr[2] "{} a eșuat" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "{} a reușit să construiască" msgstr[1] "{} construite cu succes" msgstr[2] "{} construite cu succes" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/ru/0000755000175000017500000000000014770510164014611 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/ru/LC_MESSAGES/0000755000175000017500000000000014770510164016376 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/ru/LC_MESSAGES/fdroidserver.po0000644000175000017500000034256214770507747021465 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Golubev Alexander , 2020, 2021, 2024, 2025. # Mingun , 2020. # anonymous , 2020. # Andrey , 2020, 2021, 2022, 2023, 2025. # gardenapple , 2020. # Boris Timofeev , 2020. # Hans-Christoph Steiner , 2020. # Roman , 2020. # S3aBreeze , 2021. # Чтабс , 2021. # Andrei Stepanov , 2022. # Макар Разин , 2023. # Alexander Ivanov , 2024. # gfbdrgng , 2024. # neverender , 2024. # Dmitry , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.0-95-gd7af22b\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2025-01-25 15:42+0000\n" "Last-Translator: Golubev Alexander \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Weblate 5.10-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "Открытый SSH-ключ, который будет использоваться в качестве ключа развертывания (Deploy Key):" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "{path} закодирован в скрытую переменную DEBUG_KEYSTORE:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "У \"%s/\" нет соответствующего файла метаданных!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "\"local_copy_dir\" {path} не существует!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "'{apkfilename}' уже установлен на {dev}." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "в пути \"{path}\" последние имя {name} и версия {version} пакета" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "путь \"{path}\" существует, но s3cmd клиент не установлен!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "\"{path}\" не поддерживаемый формат файла (используйте: metadata/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "\"{path}\" подписан ключом, который не разрешен:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" — не корректный URL!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: ошибка: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "%d APK не удалось подписать или проверить!" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d ошибок найдено" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "к %r нельзя обратиться" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "%s не создает dict!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "%s имеет неверный SHA-256: %s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s не является допустимым полем" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "В config.yml нет переменной 'keypass'!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "Значение 'keystore` — NONE, но 'smartcardoptions' не задан!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "'keystore' не найден в config.yml!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "'keystorepass' не найден в config.yml!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' не найден в config.yml!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required' не годится в качестве позиционного аргумента" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "'sdk_path' не найден в config.yml!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "{aapt} — устаревшая версия, F-droid нужна версия build-tools-{version} или более поздняя!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "{path} не удалось исполнить!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' имеет недопустимый формат, это должен быть словарь!" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' не подходит в качестве {field} в {appid}. Образец регулярного выражения: {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' не является допустимым {field}, должно быть {pattern}" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "--merge-request работает только с одним appid!" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...checkupdate для {appid} завершился ошибкой: {error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() не определен" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "Не хватает /issues" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "В качестве аргумента нужен URL-адрес!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "Подписи APK имеют различные сертификаты в {path}:" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "Добавить PGP подписи для пакетов в репозитории с помощью GnuPG" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "Добавлять ключ для подписи в неподписанный репозиторий" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "Добавлять основные файлы метаданных в APK, если они там отсутствуют" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "Добавление нового репозитория только для {name}" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "Алиас для ключа для подписи репозитория в хранилище ключей" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "AllowedAPKSigningKeys отсутствует, но предоставлен эталонный двоичный файл" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "Позволяет выбрать разные ревизии или ветки для первичного импорта" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "Дополнительно создавать полную копию раздела архива" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "Дополнительно предупреждать о нарушениях форматирования (вроде rewritemeta -l)" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "AAR-библиотека Android" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "APK-файл Android" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "DEX-код Android" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "Android SDK не обнаружен в {path}!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "Android SDK '{path}' нет в переменных окружения!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "Путь Android SDK '{path}' указывает не на директорию!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "Инструмент Android SDK {cmd} не найден!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "У приложения задано поле Binaries, но не указано AllowedAPKSigningKeys, что необходимо, чтобы ограничить ключи подписи." #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "У приложения задано поле NoSourceSince, или поле ArchivePolicy равно \"0 versions\" или \"0\", но AutoUpdateMode или UpdateCheckMode не равны None" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "Приложение находится в репозитории '{repo}', но ссылка указывает на {url}" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Версия приложения имеет двоичный код, но не имеет соответствующего сертификата AllowedAPKSigningKeys для закрепления." #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "Добавлять .git необязательно" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "Вы пытаетесь поместить в архив {apkfilename} с недопустимой подписью!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode с UpdateCheckMode: HTTP должен иметь шаблон." #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "Автоматически отвечать \"нет\" на все запросы." #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "Автоматически отвечать \"да\" на все запросы." #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "Неверный тип записи \"{mirrortype}\" в конфигурации зеркал: {mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "Основной URL-адрес зеркала может содержать ключ для подписывания индекса (добавьте запрос \"?fingerprint=\")" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "Ветка '{branch}' вошла в билд '{versionName}' как коммит" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "Ветка '{branch}' вошла в библиотеку '{srclib}' как коммит" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "Неработающая символическая ссылка: {path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "Собрать пакет из исходников" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "Запустить сборку всех доступных приложений" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "Билд подготовлен командой `fdroid import`, перед сборкой удалите строку \"disable\"" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "В репозитории с метаданными билдов есть незакоммиченные изменения!" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "Запустить сборку только последней версии для каждого пакета" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "Репозиторий создан в \"%s\", основываясь на конфигурации:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "Невозможно автоматически обновить приложение без CurrentVersionCode" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Запустить сборку невозможно из-за {} ошибки во время сканирования данных" msgstr[1] "Запустить сборку невозможно из-за {} ошибок во время сканирования данных" msgstr[2] "Запустить сборку невозможно из-за {} ошибок во время сканирования данных" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Невозможно переписать \"{path}\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "Неправильные категории: '%s'" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "Категории не выбраны" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "Категория \"{category}\" определена, но не используется ни для одного приложения!" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Проверить обновления для приложений" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "Проверка перед помещением в архив для {appid}. apks:{integer}, keepversions:{keep}, archapks:{arch}" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Очистка с обновлением: не использовать кэш, повторно сгенерировать все APK" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "Раскрашивать сообщения журнала при выводе" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Категории перечислены через запятую." #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "Команда '%s' не распознана.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "Зафиксировать изменения (commit)" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "Зафиксировать изменения (commit), отправить (push) их в удаленный репозиторий, и затем создать запрос на слияние" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "Конфликтующие определения \"{field}\" между .yml и локализованными файлами:" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Несовместимые аргументы: '--verbose' и '--quiet' нельзя указывать одновременно." #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "В вашей системе недоступна команда '{command}'" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Не удалось найти последнюю версию приложения (versionCode)" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Не удалось найти название последней версии" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "Указанный для удаления {path} не найден" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "Не удалось открыть и проанализировать файл APK {path}: " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Не удалось разобрать размер «{size}», неверный тип «{type}»" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Не удалось найти Application ID" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "Не удалось найти никакой информации о версии" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "Не удалось найти package ID" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "Менять текущий ключ для подписывания как-то боязно. Пожалуй, не станем!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "Новый контейнер \"{name}\" создан" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Создание \"{path}\" для конфигурации s3cmd." #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Creating empty {config_file}" msgstr "Чтение '{config_file}'" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Создание директории для хранения логов" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "Создание нового S3 bucket: {url}" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "Создание директории для выходных данных" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "Подписывание индекса ключом (SHA256):" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "Создание директории для хранения временных файлов" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "Создание неподписанного индекса (подготовка к подписыванию)" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "CurrentVersionCode {cv} меньше значения старейшей сборки {versionCode}" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "Переменная DEBUG_KEYSTORE пустая или заполнена неправильно" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "Удалить APK и/или OBB без метаданных из репозитория" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "Удаление архива, репозиторий слишком большой ({size}, максиммум {limit})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "Удаление истории git-зеркала, репозиторий слишком большой ({size}, максиммум {limit})" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "Удаление неизвестного файла: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "Описание '%s' копирует краткий обзор приложения (app's summary)" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "В описании встречаются одинаковые строки" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "Описание {length} превышает лимит по количеству знаков {limit}" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "Вы имели в виду config/{name}.yml?" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "Вы имели в виду {code}?" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "Не добавлять 'disable:' к сгенерированным данным сборки" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "Не помещать новые файлы сразу в репозиторий" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "Не включайте \"{path}\" в URL-адрес!" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "Не спрашивать путь к Android SDK, а просто выйти с ошибкой" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "Не удалять сгенерированные приватные ключи из хранилища" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "Не создавать архив с исходниками. Ускоряет тестовые сборки" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "Не обновлять репозиторий. Упрощает тестовые сборки при отсутствии интернета" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "Не использовать контрольные суммы rsync" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "Загружать F-Droid.apk с помощью тех зеркал, из которые в сеть утекает меньше данных" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Полностью загружать зеркала для небольших репозиториев" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Репозиторий не удалось склонировать с первой попытки." #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "Загрузить {url} не получилось. {error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "Повторяющееся объявление Anti-Feature в {path} было проигнорировано!" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "Дублирующаяся запись \"%s\" в конфигурации зеркал!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "Точная копия ссылки в '{field}': {url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "ОШИБКА: %(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "ОШИБКА: подкоманда \"server\" была удалена, используйте \"deploy\"!" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "ОШИБКА: этот тип CI не поддерживается, налаживайте и присылайте патчи!" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "ОШИБКА: неподдерживаемый хост git «%s», патчи приветствуются!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "ОШИБКА: {key} в {path} должен быть или \"archive\", или \"repo\"!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "ОШИБКА: {key}:{subkey} в {path} не входит в список допустимых значений: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "Задана кодировка '{enc}'. F-droid может испытывать сложности с кодировками. Пожалуйста, используйте 'UTF-8' во избежании ошибок." #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" "Укажите путь к Android SDK (%s): \n" "> " #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "Переменная среды {var} из {configname} не установлена!" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "Переменная среды {var} из {configname} не установлена!" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "Ошибка развертывания 'github_releases', {} отсутствует. (Возможно, сначала вам нужно запустить `fdroid update`.)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "Ошибка при получении адреса репозитория" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "Выход с ненулевым кодом, если обнаружены проблемы" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "Извлекать метаданные приложения из исходного репозитория" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "Извлечь подписи из APK файлов" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "F-Droid.apk не может быть загружен ни из одного известного источника!" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "Не удалось скопировать {path}: {error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "Не удалось получить подпись для '{apkfilename}: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "Не удалось распознать {path}: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "Не удалось изменить размер {path}: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "Создать S3 объект (S3 bucket) не получилось: {url}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "Не удалось получить информацию об APK файле, {path} будет удален" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "Не удалось получить информацию об APK файле, {path} будет пропущен" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "Не удалось получить отпечаток ключа подписи APK" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "Установить {apkfilename} на {dev} не получилось: {error}" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "Подписать приложение не удалось" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "Сервер для сборки скопирован с ВМ {buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "Получены подписи для '{apkfilename}' -> '{sigdir}'" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "Файл исчез во время обработки: {path}" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "Готово" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Запрещенные теги HTML" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "Принудительно собирать заблокированные приложения, игнорируя ошибки при сканировании. Доступно только в тестовом режиме." #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "Принудительно останавливать сборку, если тайм-аут больше {0} секунд!" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "Принудительно сканировать отключенные приложения и сборки." #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "В \"{path}\" обнаружены изображения без метаданных для приложения \"{name}\"!" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "Обнаружен неверный файл финансирования \"{path}\" для \"{name}\":" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "В аргументах обнаружены неправильные appid" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "Для некоторых приложений обнаружены неправильные номера внутренней версии (versionCode)" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "В {path} обнаружено несколько сертификатов (JAR Signature Block File)" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "Найдено несколько сертификатов подписи!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "Для {appid} обнаружено несколько файлов метаданных" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "Для этого репозитория обнаружено несколько ключей для подписывания." #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "Сертификат для подписывания для этого репозитория не обнаружен." #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "Это не похоже на файл: %s" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "Найдено {apkfilename} в {url}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "Найдено {count} проблем(ы) в {filename}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "Найдено {count} предупреждений в {filename}" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "Первоначальная заготовка метаданных для {appid} завершена" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "Не удалось получить данные репозитория (git checkout) из '%s'" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "Очистка репозитория (git clean) не удалась" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "Не удалось получить данные из репозитория (git fetch)" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Не удалось настроить HEAD для удаленного репозитория (git remote set-head): \"%s\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Не удалось отменить изменения (git reset)" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "Деинициализация подмодуля Git не удалась" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "Не удалось синхронизировать модули Git (git submodules sync)" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "Не удалось обновить модули Git (git submodules update)" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "URL-адреса для Subversion должны начинаться с HTTPS!" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "Разрешить удаление архива, когда git-зеркало становится слишком большим" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "Если эта загрузка не удалась, попробуйте вручную загрузить на {url}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "Проигнорировано: поле '{field}' в метаданных '{metapath}' т.к. оно признано нежелательным (deprecated)." #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "Проигнорировано: запись в FUNDING.yml длиннее 2048 символов: %s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "Проигнорировано: плохой элемент в манифесте: %s" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "{oldfile} признан устаревшим; используйте {newfile}" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Проигнорировано: пакеты без метаданных: " #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "Проигнорировано: устаревший кеш для {apkfilename}" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "Включать APK, подписанные отключенными алгоритмами, например MD5" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "Включать PGP-подпись («*.asc» файлы) в зеркало" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "Включать логи сборки в зеркало" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "Включать архивы с исходным кодом в зеркало" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "Включение метаданных из %s@%s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "Включение метаданных из {path}" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "Подключение модулей" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "Установить все доступные подписанные приложения" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "Установить собранные пакеты на устройства" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "Установка %s..." #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "Установка '{apkfilename}' на устройство {dev}..." #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "Взаимодействовать с HTTP сервером репозитория" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "Непригодный файл APK" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "Неверный режим автообновления: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "Недопустимый UpdateCheckMode: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "Расхождение версий приложения в метаданных: {field}" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "Недействительная VercodeOperation: {invalid_ops}" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "Неверный ID приложения: {appid}" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Неверно размеченный список" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "Неверное имя для опубликованного файла: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "Недопустимый ndk: запись в сборке: \"{ndk}\"" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "Неверное перенаправление (не HTTPS): {before} -> {after} " #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "Некорректные метаданные scrlib: '{file}' не существует" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "Некорректные метаданные scrlib: не удалось разобрать содержимое '{file}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "Некорректные метаданные scrlib: не известный ключ '{key}' в '{file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "Не удается проверить подпись JAR: {path}" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "Подпись JAR прошла проверку: {path}" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "JAR-файл Java" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "Не обнаружена Java JDK! Установите ее по стандартному пути или настройте переменную java_paths!" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "Скомпилированный класс Java" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "Java jarsigner не обнаружен! Установите по стандартному пути или настройте переменную java_paths!" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "В атрибутах исходного HTML кода содержится Javascript" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "Сохранение неудачной сборки \"{apkfilename}\"" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "Хранилище ключа для подписывания:→\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "Известный отладочный ключ используется в AllowedAPKSigningKeys: " #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "Последний наложенный коммит '{commit}' похож на метку (tag), но режим проверки обновлений (UpdateCheckMode) — '{ucm}'" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "Cсылка на пожертвования через Liberapay должна быть в поле «Liberapay:»" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "Список файлов, которые будут переформатированы (сухой прогон)" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "В URL f-droid.org включена локаль" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "Останавливать сборку при появлении исключений (exception)" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "Неверные адреса зеркал для репозитория." #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "Неверный путь serverwebroot:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "Достигнута максимальная глубина рекурсии в ZIP-файле: %s" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Создать зеркало всего репозитория и архива, включая все типы файлов." #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "Директории для хранения выводных данных не существует" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "Перемещение объявлений Anti-Features в локализованные файлы:" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "Ни «repo_pubkey», ни «keystorepass» не указаны в config.yml" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "Нет APK для пакета: %s" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "Android SDK не обнаружена!" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "Подключенных устройств не найдено" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "Для `adb install` не найдено ни одного устройства! Пожалуйста, подключите какое-нибудь." #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "URL-адрес не содержит идентификационной метки (fingerprint)." #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "Модулей Git не обнаружено" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "Проект gradle не найден. Возможно, нужно указать его в параметре --subdir?" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "Информация о репозитории неверна." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "Соответствующие теги не найдены" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "Не найдена минимальная версия SDK в {0}, используется версия по умолчанию (3)." #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "Указывать в описании, что приложение свободное, необязательно. Других здесь не держат" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "Указывать в описании, что приложение для Android, не обязательно. Других здесь не держат" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "Недостаточно опций сборки! Настройте как минимум вот эти (в config.yml):" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "Не выбраны пакеты" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "Для %s нет подписанного APK" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "Директории с данными для подписывания не найдено. До новых встреч" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "В {path} не обнаружены сертификаты для подписывания" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "Такого пакета не существует: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "Внутренней версии (versionCode) с номером {versionCode} для приложения {appid} не существует" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "Теги не найдены" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "Директории с неподписанными данными не существует. До новых встреч" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "Информацию о версии найти не удалось." #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "Неверное определение размера: \"{}\"" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "До новых встреч" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "Автоматические обновления для {appid} недоступны." #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "Определите эти переменные в config.yml:" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "В OBB файле обнаружена более свежая внутренняя версия приложения (versionCode: {integer}), чем в APK:" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "Имя файла OBB должно начинаться с \"main.\" или \"patch.\":" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "Указанный в OBB файле packagename не соответствует указанному в APK:" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Автономная система, пропуск генерации git-зеркала до `fdroid deploy`" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "В одном из 'github_releases' отсутствует значение 'packageNames'; пропускаем ..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "В одном из 'github_releases' отсутствует значение 'projectUrl'; пропускаем ..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "В одном из 'github_releases' отсутствует значение 'token'; пропускаем ..." #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Допускаются изображения только в форматах PNG и JPEG: {path}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "Запустить проверку только для приложений с автоматическим обновлением" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Cсылка на пожертвования через OpenCollective должна быть в поле «OpenCollective:»" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Вывод отчета в формате JSON под именем файла APK." #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "Вывести JSON в stdout." #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "Выводится JSON" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "Основная лицензия проекта." #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "Заменить пустое значение versionName в {apkfilename} значением из метаданных: {version}" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "Пакет {appid}\" уже существует" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "Чтение манифеста: '{path}'" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "Необходимо указать не только имя пользователя, но и пароль" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "Путь к рабочей директории проекта Android (если она не в его корне)." #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "Путь к Android SDK (можно настроить в переменной ANDROID_HOME)" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "Путь к репозиторию git, который будет отображться в логах" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "Путь к хранилищу с ключом для подписывания" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Отобразить секретную переменную в терминале (чтобы ее было легче скопировать и вставить)" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "Режим конфиденциальности был включен в соответствии с вашей локалью ({country_code})." #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "Проблема с файлом ZIP: %s, ошибка %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "Ошибка в xml '{path}'" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "Запустить автоматическое обновление" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "Подписывание {apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "Обработка данных {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "Отобразить XML/JSON для индекс файлов в удобном для чтения виде" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "URL-адрес проекта для импорта." #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "Знаки препинания недопустимы" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "Отправить лог в удаленный репозиторий git" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "Публикация лога прозрачности кода в {url}" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "Передача данных на удаленный сервер не удалась!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "Публикация в {url}" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "Быстро создать новый репозиторий" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "Прочесть все метаданные и выйти" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "Чтение '{config_file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "Не удалось извлечь packageName, внутреннюю или внешнюю версию приложения, поэтому APK считается непригодным: '{apkfilename}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "Не удалось прочитать packageName/versionCode/versionName failed, APK недействителен: '{apkfilename}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "Чтение {apkfilename} из кеша" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Обновление и кэширование правил и сигнатур сканера из сети" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "Удалить tar-архив с исходным кодом и все APK-файлы, если проверка для них прошла успешно." #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Удаление выбранных файлов" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "Удаление {path}\"" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "Переименовать все APK файлы, не соответствующие шаблону \"название.пакета_123.apk\"" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "Подпись {apkfilename} предоставленным отладочным ключом (debug.keystore)" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "Изменить размер всех иконок, превышающих допустимое значение в пикселях, и выйти" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "Показывать в выводе только предупреждения и ошибки" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "Повторная попытка неудачной загрузки: %s" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Перезаписать все метаданные" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "Перезапись '{appid}'" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "Запустить для репозитория git с несохраненными изменениями" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "Просматриваем {cibase} в поиске -debug.apk (пропуская repo_basedir: {repo_basedir})" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "Запустить rewritemeta для исправления ошибок форматирования" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "Первая попытка загрузить данные (выполняется с отключенной проверкой MD5)" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "Выполняется wget в {path}" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "SHA-256 {url} не соответствует записи!" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "Проскандировать получившиеся APK на известные несвободные классы." #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "Сканировать исходный код пакета" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "Сканирование обнаружило {count} проблем(ы) в {apk}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "Сканирование обнаружило {count} ошибок в {appid}:" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "Сканирование обнаружило {count} ошибок в {appid}:{versionCode}:" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "Сканирование обнаружило {} ошибку" msgstr[1] "Сканирование обнаружило {} ошибки" msgstr[2] "Сканирование обнаружило {} ошибок" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "Проверка APK на наличие дополнительных блоков подписи." #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "Сканирование APK с помощью dexdump на наличие известных несвободных классов." #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "Настройка NDK {release} ({version})" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "Настроить системное время с помощью:" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "Установить максимальный номер версии релиза в репозитории прежде чем более старые версии будут заархивированы" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "Настроить ограничение для количества одновременно открытых файлов: {integer}" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "Настроить ежедневную сборку приложения (nightly build)" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "Не удалось настроить ограничение для количества одновременно открытых файлов: " #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "Время ожидания для этой сборки выставляется в {0} секунд" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "Подписать пакеты и поместить в репозиторий" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "Подписать индексы созданные с \"update --nosign\"" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "Пропустить сканирование исходного кода" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "Неверная подпись '{apkfilename}', пропустить!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "Пропуск зеркала GitLab Pages из-за слишком большого размера репозитория (>%.2fGB)!" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "Пропустить генерацию индекса для {appid}" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "Неверная подпись {apkfilename}, пропустить!" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "Пропустить {appid}: отключено" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "Выбрать локальную директорию, с которой будет синхронизирован репозиторий" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "Выбрать идентификационный файл (нужен SSH для rsync)" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "Выбрать отладочный ключ." #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "Писать очень подробные логи" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "Удаление неизвестной подписи из {apkfilename}" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "Короткое описание %s состоит из одного имени приложения" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "Короткое описание приложения ({length} знаков) превышает допустимый лимит в {limit} знаков" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "Системное время отстает от date в {path}!" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "Режим обновления тегов в настоящее время работает только для репозиториев git, hg, bzr и git-svn" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "Режим обновления тегов используется в git-svn, но репозиторий не был настроен с тегами" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Тестовый режим. Все собранное попадает во временную директорию; сборка запускается снова в любом случае." #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "Внутрення версия приложения из OBB файла должна следовать после \"{name}.\":" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "Основной URL-адрес репозитория для отображения в логах (по умолчанию: https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "Директория для сохранения зеркала" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "Файл для включения в репозиторий (путь или шаблон пути)" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "Идентификационная метка (fingerprint) репозитория не совпадает с исходной." #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "Корневой директории для local_copy_dir \"{path}\" нет!" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "Есть расхождения в алиасах ключей для подписывания. Публикация остановлена" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "Это те приложения, которые были заархивированы из основного репозитория." #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "Эта команда никогда не должна использоваться для зеркалирования f-droid.org! Полная копия требует более 600 ГБ." #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "Это репозиторий приложений, предназначенных для использования в FDroid. Приложения в этом репозитории являются либо официальными бинарными файлами, созданными разработчиками оригинального приложения, либо бинарными файлами, созданными f-droid.org из исходного кода с помощью инструментов на https://gitlab.com/fdroid." #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "Локальная копия метаданных репозитория уже существует: %s" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" "Для завершения настройки добавьте свои APK в \"%s\"\n" "затем запустите \"fdroid update -c; fdroid update\". Возможно, вы также захотите отредактировать\n" "\"config.yml\", чтобы задать URL, имя репозитория и многое другое. Вам также следует установить\n" "ключ подписи (временный ключ может быть сгенерирован автоматически).\n" "\n" "Дополнительная информация: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "и https://f-droid.org/docs/Signing_Process" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "Необходимо определить переменные awsbucket, awssecretkey и awsaccesskeyid в config.yml!" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "Чтобы использовать rclone, в config.yml должны быть заданы rclone_config и awsbucket!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "URL должна начинаться с https:// или http://" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "URL-адреса сокращать нельзя" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "URL-адрес {url} в описании приложения: {error}" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "Неожиданная метка лицензии: \"{}\"! Используйте только метки, одобренные FSF или OSI из https://spdx.org/license-list" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Неожиданная метка лицензии: \"{}\"! Используйте только метки, указанные в вашем файле настроек" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "Неизвестная запись {key} в {configname}" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "Произошла неизвестная ошибка!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "Неизвестный файл '{filename}' в сборке '{versionName}'" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "Неизвестный формат метаданных: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "Неизвестный формат метаданных: {path} (используйте *.yml)" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "Неизвестная версия AAPT. Это может сломать сборку: " #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "Лишний пробел в начале строки" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "Лишний пробел в конце строки" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "Неизвестное поле приложения '{fieldname}' в '{path}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Неизвестный флаг сборки '{build_flag}' в '{path}'" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "Формат изображений \"{extension}\" не поддерживается" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "Обнаружены изображения в неверном формате: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "Внешняя библиотека не используется %s" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "Файл не ипользуется %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "Неиспользованный scandelete-путь: %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "Неиспользованный scanignore-путь: %s" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Обновить информацию о репозитории для новых пакетов" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "Обновить лог степени прозрачности (binary transparency log) для URL-адреса" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData содержит некорректный URL-адрес: {url}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "UpdateCheckData должен соответствовать коду версии как целое число (\\d или [0-9]): {codeex}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "URL-адрес в UpdateCheckData должен начинаться с HTTPS: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "UpdateCheckData содержит некорректный URL-адрес: {url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode установлен, но похоже, что checkupdates еще не запущен." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "Имя приложения для проверки обновлений (UpdateCheckName) соответствует ID приложения — это поле можно удалить" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "Загрузка {apkfilename} на androidobservatory.org" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "Загрузка {apkfilename} на virustotal" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Используйте /HEAD вместо /master или /main, чтобы указать на файл в ветке по умолчанию" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Чтобы создать необходимые файлы метаданных, выполните `fdroid update -c`." #: ../fdroidserver/build.py msgid "Use build server" msgstr "Использовать сервер сборки" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "Использовать время date из APK вместо текущего при добавлении новых APK" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "Для конфигурации s3cmd используется \"{path}\"." #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "Для синхронизации с удаленным хранилищем используется путь \"{path}\"." #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "Используется схема подписи APK v2" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "Используется схема подписи APK v3" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "Использование подписи JAR" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Проверка APK с помощью Java jarsigner. Так делать не следует! Пользуйтесь для этого apksigner" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "Использование пустого словаря вместо содержимого {path}!" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "Используются ключи из \"{path}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "Используется rclone для синхронизации с: {url}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "Используется s3cmd для синхронизации с: {url}" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Допустимые команды:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "Сверяться с закешированной копией вместо того, чтобы загружать еще раз." #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "Проверить целостность загруженных пакетов" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "Проверка подписи индекса:" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "Проверка пакета {path} с помощью apksigner." #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "Через API VirusTotal нельзя загрузить файлы больше 32MB, загрузите {path} на {url} самостоятельно." #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Предупреждать о возможных ошибках в метаданных" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "Двоичный файл WebAssembly" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Даже если в конфигурации сборки задано подписывать индексы, то все равно cоздавать неподписанные индексы (только на данном этапе)" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "При проверке целого репозитория, yamllint по умолчанию отключен. Этот параметр принудительно включает yamllint." #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "При неудачном подписании или проверке выйдите с кодом ошибки." #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "Вы хотите скачать и установить F-Droid.apk через adb? (ДА/нет)" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "Хотите ли вы загрузить приложение(я) с сайта f-droid.org? (ДА/нет)" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "При генерации ключей использовалось различимое имя (Distinguished Name) стандарта X.509" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "Путь к SDK можно указать в переменной ANDROID_HOME:" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "Архив ZIP" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "adb сообщает, что устройство «{serial}» находится в состоянии «{status}»!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "добавление IdentiyFile в {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "добавление в {name}:{path}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "неоднозначный выбор: %(option)s совпадает с %(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "apksigner из build-tools;{version} пропускает APK-пакеты с некорректными подписями v3; проигнорировано." #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "apksigner не найден! Невозможно подписать или проверить актуальные APK-файлы" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "apksigner не найден, он необходим для создания подписи!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "ID приложения того файла, с которым будут производится операции" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "ID приложения и внутренняя версия приложения (versionCode) в виде APPID[:VERCODE]" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "archive_url должен оканчиваться «/archive»" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "аргумент \"-\" c режимом %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "аргумент %(argument_name)s: %(message)s" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "попытка установить голое SSH-соединение для проверки ключа развертывания:" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "не удалось разобрать спецификацию scrlib (не является строкой): '{}'" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "не удается открыть '%(filename)s': %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "не удалось открыть не-https url: '{};" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "не удалось найти необходимые srclibs: {path}" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "у субпарсера должен быть только один аргумент" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "не получается объединить действия: указаны две группы %r" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "не получается опубликовать обновление. Ключ для развертывания (deploy key) существует?" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "клонирование {url}" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "Команды из подключаемых модулей:" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "конфликтующая строка: %s" msgstr[1] "кофликтующие строки: %s" msgstr[2] "конфликтующих строк: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "конфликтный псевдоним субпарсера: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "конфликтный субпарсер:%s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "не удалось разобрать '{path}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "не удалось разобрать srclib spec (не указано имя): '{}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "не удалось разобрать спецификацию scrlib (не задана ссылка): '{}'" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "создан {path}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "текущая версия новее: old vercode={old}, new vercode={new}" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "удаление: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "файл зависимостей без блокировки" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "лог {path} загружен на {dest}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "для параметра %r необходимо указать dest=" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "загрузка '{}'" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "не удалось загрузить подписи сканера с '{}'" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "исполняемый бинарный файл, возможно код" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "необходимо указать %s аргумент" msgstr[1] "необходимо указать %s аргумента" msgstr[2] "необходимо указать %s аргументов" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "необходимо указать хотя бы один аргумент" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "можно указать только один аргумент" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "можно указать только один аргумент" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "fdroid [<команда>] [-h|--help|--version|<аргументы>]" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "получить последнюю версию подписей из интернета" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "принудительно обрабатывать ошибки как предупреждения или игнорировать их." #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "команда git svn clone не выполнена" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "архив gzip" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "указанный аргумент %r проигнорирован" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1 должен быть подписан, сделайте это с помощью `fdroid signindex`!" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 должен быть подписан, сделайте это с помощью `fdroid signindex`!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "неверное %(type)s значение: %(value)r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "неверный выбор: %(value)r (следует выбрать из %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "неверное значение conflict_resolution: %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "неверный синтаксис в строке параметра %(option)r: она должна начинаться с символа %(prefix_chars)r" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "ipfs_cid не найдено, пропускаем генерацию CIDv1" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "рецепт последней сборки более новый: old vercode={old}, new vercode={new}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "local_copy_dir должна заканчиваться на \"fdroid\". Возможно, имелось в виду \"{path}\"" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "Путь к local_copy_dir должен быть абсолютным!" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "local_copy_dir должна быть директорией, а не файлом!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "адрес зеркала '%s' должен заканчиваться 'fdroid'!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "Зеркала установлены дважды, в config.yml и {path}!" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "взаимоисключающие аргументы не должны быть обязательными" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "следующее обновление кэша {name} должно произойти {time}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "{appid} не содержит поля \"icon\"" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "APK файл не указан" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "информация о версии не найдена" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "недопустимо с аргументом %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "необходимо указать хотя бы один аргумент из списка %s" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "принимает строки, списки и туплы" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "параметры" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "перезапись существующего пути {path}" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "позиционные аргументы" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "Не удалось загрузить лог {path} на {dest}!" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "эталонный двоичный файл с отсутствующей подписью" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "использовать для загрузки небезопасное HTTP-соединение не стоит (пользуйтесь HTTPS или укажите --no-https-check): {apkfilename}" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "значок репозитория (repo_icon) 'repo/icons/%s' не существует, генерируется суррогат." #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "repo_url должен оканчиваться «/repo»" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "rsync отсутствует или сломан: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd синхронизировать индексы из {path} в {url} и удалить их" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "s3cmd синхронизирует индексы из {path} в {url} и удаляет стертые" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "кэш сканера поврежден! Вы можете очистить его с помощью: '{clear}'" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "serverwebroot: путь не заканчивается на \"fdroid\", возможно, вы имели в виду что-то из этого:" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "разделяемая библиотека" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "показать это справочное сообщение и выйти" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "подписанный APK файл (путь к файлу или URL-адрес, начинающийся с HTTPS)." #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "пропустить загрузку подробного лога сборки: лог пустой" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "пропустить загрузку подробного лога сборки: логи отключены при конфигурации" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "пропустить для архива с исходниками: {path}" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "библиотеки srclib: имя отсутствует или не содержит символа @" #: ../fdroidserver/scanner.py msgid "static library" msgstr "статическая библиотека" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "предоставленный эталонный двоичный файл разрешил подписанту {signer}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "требуются аргументы: %s" #: ../fdroidserver/install.py msgid "true" msgstr "истина" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "неизвестная строка параметра: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "неизвестный парсер %(parser_name)r (следует выбрать из %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "неизвестные аргументы: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "небезопасные права доступа к файлу '{config_file}' (должны быть 0600)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "использование: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "Аpache libcloud: синхронизация с {url}" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com ограничивает траффик, ждем повторной попытки..." #: ../fdroidserver/install.py msgid "yes" msgstr "да" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "{0} приложение, {1} алиасов ключей для подписывания" msgstr[1] "{0} приложения, {1} алиасов ключей для подписывания" msgstr[2] "{0} приложений, {1} алиасов ключей для подписывания" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "Не обнаружено метаданных для {apkfilename} ({appid})!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "AndroidManifest.xml приложения {apkfilename} содержит неверную дату: " #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "У {appid} нет имени! Будет использовано ID приложения." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "{appid} из {path} не годится в качестве ID приложения Android!" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "{appid} из {path} не годится в качестве имени пакета Java!" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "{appid} содержит как APK, так и файлы: {files}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "В {appid} нет {name}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "{appid}: неизвестная внешняя библиотека {path} в сборке '{versionName}'" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "{appid}: ревизия сборки не указана, сборка будет запущена для кода в текущем состоянии" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "{appid}: {field} должно быть '{type}', а не '{fieldtype}!'" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "{appid}: {field} должно быть '{type}', а не '{fieldtype}'!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "{build_flag} должен быть целым числом, но найдено значение: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "{build_flag} должен быть списком или строкой, найдено: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "{file} пустой или поврежденный!" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name}: \"{section}/icons/{path}\" не существует! Поправьте свой \"config.yml\"." #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "{path} уже существует, результаты импорта игнорируются!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "{path} не существует! Создайте, выполнив команду:" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "{path}: неверная подпись \"{pattern}\". Выглядит подозрительно и похоже на попытку нарушения безопасности (Janus exploit)!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} был отмечен virustotal {count} раз:" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "У {path} неправильный отпечаток ({fingerprint})!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "{path} - это не диктант \"ключ: значение\", а {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "{path} не является стандартным файлом конфигурации!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "{path} - это не список, а {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "{path} - это не {expected_type}, а {datatype}!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "размер {path} равен нулю!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "Размер {path} больше 200MB, загрузите его вручную на {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "{path}: \"{code}\" не является действительным кодом страны ISO_3166-1 alpha-2!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "{path}: {error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "Адрес {url} должен заканчиваться на \"fdroid\". Проверьте URL-адрес!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "Адрес {url} должен начинаться с \"http\"!" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "{} сломанная сборка" msgstr[1] "{} сломанных сборки" msgstr[2] "{} сломанных сборок" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "{} успешная сборка" msgstr[1] "{} успешные сборки" msgstr[2] "{} успешных сборок" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/sk/0000755000175000017500000000000014770510164014600 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/sk/LC_MESSAGES/0000755000175000017500000000000014770510164016365 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/sk/LC_MESSAGES/fdroidserver.po0000644000175000017500000017507314770507747021455 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Juraj Liso , 2020. msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.6-349-g907c04ea\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "" msgstr[1] "" msgstr[2] "" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/sq/0000755000175000017500000000000014770510164014606 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/sq/LC_MESSAGES/0000755000175000017500000000000014770510164016373 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/sq/LC_MESSAGES/fdroidserver.po0000644000175000017500000027150614770507747021461 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Besnik Bleta , 2020, 2021, 2022, 2023, 2024, 2025. # Hans-Christoph Steiner , 2020, 2021, 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.6-349-g907c04ea\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2025-03-21 08:45+0000\n" "Last-Translator: Besnik Bleta \n" "Language-Team: Albanian \n" "Language: sq\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.11-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "Kyç SSH Publik për t’u përdorur si kyç sendërtimesh:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "{path} i koduar për ndryshoren e fshehtë DEBUG_KEYSTORE:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "“%s/”\" s’ka kartelë tejtëdhënash me përputhje!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "Kyçi “isPrimary” s’duhet shtuar te pasqyra!" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "“local_copy_dir” {path} s’ekziston!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "'{apkfilename}' është tashmë e instaluar në {dev}." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "“{path}” përmban {name} të freskët ({version})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "“{path}” ekziston, por s3cmd s’është e instaluar!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "“{path}” s’është format kartelash i mbuluar (përdorni: metadata/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "“{path}” është nënshkruar me një kyç që s’lejohet:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "“{url}” s’është URL e vlefshme!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: gabim: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "S’u arrit të nënshkruhen ose verifikohen %d APK!" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "U gjetën %d probleme" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%r s’mund të thirret" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "%s s’prodhoi një “dict”!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "%s ka SHA-256 të gabuar: %s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s s’është fushë e pranuar montimi" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "S’u gjet 'keypass' në config.yml!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "'keystore' është NONE dhe 'smartcardoptions' është e zbrazët!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "S’u gjet 'keystore' në config.yml!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "S’u gjet 'keystorepass' te config.yml!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "S’u gjet 'repo_keyalias' te config.yml!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required' është argument i pavlefshëm për pozicionalë" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "'sdk_path' te 'config.yml' s’është ujdisur!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' është shumë i vjetër, fdroid lyp build-tools-{version} ose më të ri!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "S’u arrit të përmbushet '{path}'!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' ka format të pavlefshëm, duhet të jetë një fjalor!" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' s’është një {field} e vlefshme te {appid}. Rregullsi shprehjeje të rregullt: {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' s’është një {field} e vlefshme, duhet të jetë {pattern}" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "--merge-request xhiron vetëm me një appid!" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "…checkupdate dështoi për {appid} : {error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() e pacaktuar" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "/issues mungon" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "Lypset një URL si argument!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "Nënshkrimet APK kanë dëshmi të ndryshme te {path}:" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "Shtoni për paketa në depo nënshkrime PGP duke përdorur GnuPG-në" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "Shtoni te një depo e panënshkruar një kyç nënshkrimi depoje" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "Shtoni kartela tejtëdhënash skeleton për APK ku mungojnë të tilla" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "Po shtohet depo e re për vetëm {name}" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "Alias i kyçit të nënshkrimeve të depos te depo kyçesh" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "Mungon AllowedAPKSigningKeys, por u dha dyor reference" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "Lejon të specifikohet një rishikim tjetër (ose kryeni “git branch”) për importimin fillestar" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "Pasqyro gjithashtu pjesën e arkivit të plotë" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "Sinjalizo gjithashtu mbi probleme formatimi, bie fjala, rewritemeta -l" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "Librari Android AAR" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "Kartelë APK Android" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "Kod DEX Android" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "S’u gjet SDK Android-i në {path}!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "Shtegu Android SDK '{path}' s’ekziston!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "Shtegu Android SDK '{path}' s’është drejtori!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "S’u gjet {cmd} mjeti SDK-je Android!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Aplikacioni ka Dyorë, por s’ka AllowedAPKSigningKeys përkatës për të fiksuar dëshmi." #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "Aplikacioni ka NoSourceSince ose ArchivePolicy “0 versione”, ose 0, por AutoUpdateMode ose UpdateCheckMode janë vënë si “Asnjë”" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "Aplikacioni gjendet në '{repo}' por ka një lidhje te {url}" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Aplikacioni ka dyor, por s’ka AllowedAPKSigningKeys përkatës për të fiksuar dëshmi." #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "S’është i nevojshëm shtimi i .git nga pas" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "Po arkivohet {apkfilename} me nënshkrim të pavlefshëm!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode me UpdateCheckMode: HTTP duhet të ketë një rregullsi." #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "“Jo” e automatizuar për krejt hapat." #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "“Po” e automatizuar për krejt hapat." #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "Lloj i gabuar zëri “{mirrortype}” në formësim pasqyrash: {mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "URL bazë për t’u pasqyruar, mund të përfshijë kyçin e nënshkrimit të treguesit që përdor vargun e kërkimi: ?fingerprint=" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "Dega '{branch}' u përdor si “commit” në montimin '{versionName}'" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "Dega '{branch}' u përdorur si “commit” në srclib '{srclib}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "Simlidhje e dëmtuar: {path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "Montoni një paketë nga burimi" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "Monto krejt aplikacionet e mundshme" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "Montim i prodhuar nga `fdroid import` - hiqni rreshtin e çaktivizimit, pasi të jetë gati" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "Depoja git e tejtëdhënave të montimit ka ndryshime të paparashtruara!" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "Monto vetëm versionin më të ri të çdo pakete" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "Depo montimesh e bazua në “%s” me këtë formësim:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "S’kryhet dot “auto-update app” pa CurrentVersionCode" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "S’montohet dot, për shkak të {} gabimi teksa skanohej" msgstr[1] "S’montohet dot, për shkak të {} gabimeve teksa skanohej" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "S’rishkruhet dot “{path}”" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "Kategoritë '%s' s’janë të vlefshme" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "S’janë ujdisur kategori" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "Kategori “{category}” e përkufizuar, por jo e përdorur për ndonjë aplikacion!" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Kontrollo për përditësime aplikacionesh" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "Po kontrollohet arkivimi për {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Përditësim nha e para - mos përdor fshehtina, ripërpuno krejt APK-të" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "Ngjyros ç’jep regjistri" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Listë kategorish ndarë me presje." #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "Urdhër '%s' jo i pranuar.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "Depozito ndryshimet" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "Parashtro ndryshimet, depozitoji, mandej bëj një kërkesë për përzierje" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "Përkufizime “{field}” me përplasje, mes kartelash .yml dhe të përkthyerash:" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Argumente që përplasen: '--verbose' dhe '--quiet' s’mund të përdoren në të njëjtën kohë." #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "Në sistemin tuaj s’u gjet '{command}'" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "S’u gjet dot kod i versionit më të ri" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "S’u gjet dot emër i versionit më të ri" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "S’u gjet dot {path} për ta hequr" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "S’u hap dot kartela APK {path} për analizim : " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "S’u përtyp dot madhësia “{size}”, lloj i gabuar “{type}”" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "S’u gjet dot ID Aplikacione" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "S’u gjet dot ndonjë hollësi versioni" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "S’u gjet dot ID pakete" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "Po refuzohet me burracakëri të mbishkruhet ujdisje ekzistuese kyçesh nënshkrimi!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "U krijua kontejner i ri “{name}”" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Po krijohet “{path}” për formësim të s3cmd." #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "Po krijohet '{config_file}' e zbrazët" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Po krijohet drejtori regjistrash" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "Po krijohet S3 bucket i ri: {url}" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "Po krijohet drejtori përfundimesh" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "Po krijohet tregues i nënshkruar me këtë kyç (SHA256):" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "Po krijohet drejtori e përkohshme" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "Po krijohet tregues i panënshkruar, si përgatitje për nënshkrim" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "CurrentVersionCode {cv} është më i vogël sesa zëri {versionCode} i montimit më të vjetër" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "DEBUG_KEYSTORE s’është ujdisur ose vlera është e paplotë" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "Fshi APK-ra dhe/ose OBB-ra pa tejtëdhëna prej depos" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "Po fshihet arkivi, depoja është shumë e madhe ({size} maks. {limit})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "Po fshihet historik git-mirror, depoja është shumë e madhe ({size} maks. {limit})" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "Po fshihet kartelë e panjohur: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "Përmbledhja '%s' është thjesht përmbledhja e aplikacionit" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "Përshkrimi ka një rresht të përsëdytur" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "Përshkrimi me gjatësi {length} është mbi kufirin prej {limit} shenjash" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "Mos kishit në mendje config/{name}.yml?" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "Mos kishit në mendje {code}?" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "Mos shtoni 'disable:' te zëra të prodhuar të montimit" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "Mos i vendos kartelat e reja te depoja" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "Mos përfshi “{path}” në URL!" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "Mos kërko shteg SDK-je Android, thjesht dështo" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "Mos i hiq kyçet private të prodhuar nga depo kyçesh" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "Mos krijo një paketë tar burimi, e dobishme kur testohet një montim" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "Mos rifresko depon, e dobishme kur testohet një montim pa lidhje internet" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "Mos përdorni checksum-e rsync-u" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "Shkarkojeni F-Droid.apk duke përdorur pasqyra që kanë më pak rrjedhje te rrjeti" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Shkarko pasqyra të plota deposh të vogla" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Shkarkimi i depos dështoi një herë, s’po riprovohet." #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "Shkarkimi i {url} dështoi. {error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "U shpërfill deklarim i përsëdytur Anti-Veçorie te {path}!" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "Zë i përsëdytur “%s” në formësim pasqyrash!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "Lidhje e përsëdytur te '{field}': {url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "GABIM: %(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "GABIM: Nënurdhri “server” është hequr, përdorni “deploy”!" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "GABIM: lloj CI i pambuluar, arnimet janë të mirëpritura!" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "GABIM: strehë git “%s” që nuk mbulohet, arnimet janë të mirëpritura!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "GABIM: {key} te {path} s’është “archive” apo “repo”!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "GABIM: {key} s’është kyç i vlefshëm!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "GABIM: Vlera e {key} duhet të jetë e llojit {t}!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "GABIM: {key}:{subkey} te {path} s’është te kyçet e lejuar: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "Si kodim është caktuar '{enc}'. Fdroid mund të hasë probleme kodimi. Për përfundimet më të mira, caktojeni si 'UTF-8'." #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" "Jepni shtegun për te Android SDK (%s) këtu:\n" "> " #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "S’është ujdisur ndryshore {var} nga {configname}!" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "S’është ujdisur ndryshore {{env: {var}}}!" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "Gabim në sendërtim të 'github_releases', {} s’është e pranishme. (Mund t’ju duhet të xhironi `fdroid update` së pari.)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "Gabim teksa merrej adresë depoje" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "Dil me një kod jozero, nëse gjenden probleme" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "Përftoji tejtëdhënat e aplikacionit prej një depoje burim" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "Përfto nënshkrime prej APK-sh" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "F-Droid.apk s’u shkarkua dot nga ndonjë burim i njohur!" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "S’u arrit të kopjohej {path}: {error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "S’u arrit të sillen nënshkrime për '{apkfilename}': {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "S’u arrit të lexohej {path}: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "S’u arrit të ripërmasohej {path}: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "S’u arrit të krijohej bucket S3: {url}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "S’u arrit të merren të dhëna APK-je, po fshihet {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "S’u arrit të merren të dhëna APK-je, po anashkalohet {path}" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "S’u arrit të merren shenja gishtash kyçi nënshkrimi APK-je" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "S’u arrit të instalohej '{apkfilename}' në {dev}: {error}" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "S’u arrit të nënshkruhej aplikacioni" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "U soll buildserverid prej VM-je: {buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "U sollën nënshkrime për '{apkfilename}' -> '{sigdir}'" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "Kartela u zhduk teksa përpunohej: {path}" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "Përfundoi" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Etiketa HTML të ndaluara" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "Detyro montim aplikacionesh të çaktivizuara, dhe vazhdon pavarësisht problemesh skanimi. E lejuar vetëm nën mënyrën testim." #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "Detyro ndaljen e montimit pas {0} sek. mbarimi kohe!" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "Detyro skanim aplikacionesh dhe montimesh të çaktivizuara." #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "U gjet grafik “{path}” pa tejtëdhëna për aplikacionin “{name}”!" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "U gjet kartelë e dëmtuar themeli “{path}” për “{name}”:" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "U gjetën appid-e të pavlefshëm te argumente" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "U gjetën versionCodes të pavlefshëm për disa aplikacione" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "Te {path} u gjetën Kartela të shumta JAR Blloqesh Nënshkrimi" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "U gjetën Dëshmi të shumta Nënshkruesi!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "U gjetën kartela të shumta tejtëdhënash për {appid}" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "U gjetën dëshmi të shumta nënshkrimi për depon." #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "S’u gjetën dëshmi nënshkrimi për depon." #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "U gjet jo-kartelë te %s" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "U gjet {apkfilename} te {url}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "U gjetën {count} probleme te {filename}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "U gjetën {count} sinjalizime te {filename}" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "U prodhuan tejtëdhëna skeleton për {appid}" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "Veprimi “git checkout” për '%s' dështoi" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "Veprimi “git clean” dështoi" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "Veprimi “git fetch” dështoi" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Veprimi “git remote set-head” dështoi: “%s”" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Veprimi “git reset” dështoi" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "Veprimi “git submodule deinit” dështoi" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "Veprimi “git submodule sync” dështoi" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "Veprimi “git submodule update” dështoi" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "Me URL Subversion duhet përdorur HTTPS!" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "Nëse një pasqyrë git bëhet shumë e madhe, lejoje arkivin të fshihet" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "Nëse ky ngarkim dështon, provoni ta ngarkoni dorazi te {url}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "Po shpërfillet '{field}' te tejtëdhëna '{metapath}', ngaqë është nxjerrë nga përdorimi." #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "Po shpërfillen zëra FUNDING.yml më të gjatë se 2048: %s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "Po shpërfillet element i gabuar në manifest: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "Po shpërfillet {oldfile} e nxjerrë nga përdorimi, përdorni {newfile}!" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Po shpërfillet paketë pa tejtëdhëna: " #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "Po shpërfillen të dhëna të ndenjura fshehtine për {apkfilename}" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "Përfshi APKra që janë nënshkruar me algoritme të çaktivizuar, bie fjala, me MD5" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "Përfshi te pasqyra kartela .asc nënshkrimi PGP" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "Përfshi te pasqyra regjistrat e montimeve" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "Përfshi te pasqyra paketa tarball" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "Me përfshirje tejtëdhënash nga %s@%s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "Me përfshirje tejtëdhënash nga {path}" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "Po gatiten nënmodule" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "Instalo krejt aplikacionet e nënshkruara që mundet" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "Instalo në pajisje paketat montuara" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "Po instalohet %s…" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "Po instalohet '{apkfilename}' në {dev}…" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "Ndërveproni me shërbyesin HTTP të depos" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "APK e pavlefshme" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "AutoUpdateMode e Pavlefshme: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "UpdateCheckMode i pavlefshëm: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "VercodeOperationi pavlefshëm: {field}" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "VercodeOperation i pavlefshëm: {invalid_ops}" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "ID e pavlefshme aplikacioni {appid}" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Listë me toptha e pavlefshme" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "Emër i pavlefshëm për kartelë të botuar: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "Zë ndk: i pavlefshëm në montim: \"{ndk}\"" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "Ridrejtim i pavlefshëm te non-HTTPS: {before} -> {after} " #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "Tejtëdhëna scrlib të pavlefshme: '{file}' s’ekziston" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "Tejtëdhëna srclib të pavlefshme: s’u përtyp dot '{file}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "Tejtëdhëna srclib të pavlefshme: kyçi panjohur '{key}' te kartela '{file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "Dështoi verifikimi i nënshkrimit JAR: {path}" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "Nënshkrimi JAR u verifikua: {path}" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "Kartelë JAR Java" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "S’u gjet Java JDK! Instalojeni në vendndodhje standarde ose caktoni java_paths!" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "Klasë Java e përpiluar" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "S’u gjet Java jarsigner! Instalojeni në vendndodhje standarde ose caktoni java_paths!" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "Javascript në atribute src HTML" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "Po mbahet montim i dështuar “{apkfilename}”" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "Depo kyçesh për kyç nënshkrimi:\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "Te AllowedAPKSigningKeys është përdorur kyç i ditur diagnostikimi: " #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "Parashtrimi '{commit}' i përdorur së fundi duket si etiketë, por si UpdateCheckMode është '{ucm}'" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "Metodat e dhurimit përmes Liberapay i takojnë fushës Liberapay:" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "Paraqit kartela që do të duhej të riformatoheshin (dry run)" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "Vendore e përfshirë te URL f-droid.org" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "Bëje montimin të ndalet kur has përjashtime" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "Pasqyra depoje të keqformuara." #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "Rresht serverwebroot i keqformuar:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "U mbërrit në thellësi maksimum rekursive te kartelë ZIP: %s" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "Formësimi i pasqyrës për {url} përmban kyç “isPrimary”!" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Pasqyro depon e plotë dhe arkivin, krejt llojet e kartelave." #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "Mungon drejtori përfundimesh" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "Po kalohen pohime Anti-Features te kartela të përkthyera:" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "Te config.yml s’është ujdisur as “repo_pubkey”, as “keystorepass”" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "S’ka APK për paketën: %s" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "S’u gjet SDK Android!" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "S’u gjetën pajisje të bashkëngjitura" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "S’u gjetën pajisje për `adb install`! Ju lutemi, vendosni një të tillë." #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "S’ka shenja gishtash te URL-ja." #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "S’ka “git submodules”" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "S’u gjet dot projekt gradle. Të specifikohet --subdir?" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "S’u gjetën të dhëna." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "S’u gjetën etiketa me përputhje" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "Te {0} s’u gjet version minimum SDK-je, po përdoret parazgjedhja (3)." #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "S’ka nevojë të specifikohet që aplikacioni është Software i Lirë" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "S’ka nevojë të specifikohet që aplikacioni është për Android" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "S’ka mundësi të ujdisur! Përpunoni config.yml tuaj që të ujdisni të paktën një prej:" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "S’u specifikuan paketa" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "S’ka të gatshme APK të nënshkruara për %s" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "S’ka drejtori output-i të nënshkruar - s’ka ç’bëhet" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "S’u gjetën dëshmi nënshkrimi te {path}" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "S’ka paketë të tillë: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "S’ka versionCode {versionCode} për aplikacionin {appid}" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "S’u gjetën etiketa" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "S’ka drejtori të panënshkruar - s’ka ç’bëhet" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "S’u gjetën hollësi versioni." #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "Përkufizim jo i vlefshëm për madhësinë: “{}”" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "S’ka ç’bëhet" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "S’ka ç’bëhet për {appid}." #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "Tani, ujdisini këto te config.yml:" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "Kartela OBB ka versionCode({integer}) më të ri se sa cilado APK:" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "Emri i kartelës OBB duhet të fillojë me “main.” ose “patch.”:" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "packagename i OBB-së nuk përputhet me ndonjë APK të mbuluar:" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Makinë jo në linjë, po anashkalohet prodhim pasqyre git, deri sa `fdroid deploy`" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "Një nga zërat e formësimit të 'github_releases'mungon te vlera 'packageNames' value. Po anashkalohet…" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "Njërit prej zërave të formësimit të 'github_releases' i mungon vlera 'projectUrl'. Po anashkalohet…" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "Një nga zërat e formësimit të 'github_releases' mungon te vlera 'token' value. Po anashkalohet…" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Si formate grafike mbulohen vetëm PNG dhe JPEG, u gjet: {path}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "Pranon vetëm një “env” të vetëm kyçi" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "Kryeje vetëm për aplikacione me vetëpërditësime" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Metodat e dhurimit përmes OpenCollective i takojnë fushës OpenCollective:" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Hidhe raportin JSON te kartelë e emërtuar sipas APK-sh." #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "Licenca e përgjithshme e projektit." #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "Po anashkalohet versionName i zbrazët te {apkfilename} prej tejtëdhënash: {version}" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "Paketa “{appid}” ekziston tashmë" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "Po përtypet manifest te '{path}'" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "Me emrin e përdoruesit lypset fjalëkalim" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "Shteg për te nëndrejtoria e projektit kryesor Android, në mos qoftë rrënja." #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "Shteg për te SDK Android-i (ndonjëherë caktuar te ANDROID_HOME)" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "Shteg për te depo git për t’u përdorur si regjistri" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "Shteg për te depo kyçesh për kyçin e nënshkrimit të depos" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Shtype ndryshoren e fshehtë te terminali, për kopjim/ngjitje të kollajtë" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "Mënyra “Privatësi” qe aktivizuar bazuar në vendoren tuaj ({country_code})." #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "Problem me kartelën ZIP: %s, gabim %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "Problem me xml-në te '{path}'" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "Kryeji vetëpërditësimet" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "Po përpunohet {apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "Po përpunohet {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "Për kartela treguesish, prodho XML/JSON të lexueshëm nga syri njerëzor" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "URL prej nga të importohet projekt." #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "Pikësimi duhet shmangur" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "Kryej push të regjistrit te kjo depo e largët git" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "Depozitimi te shërbyesi i largët dështoi!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "Filloni shpejt e shpejt një depo të re" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "Lexo krejt kartelat e tejtëdhënave dhe dil" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "Po lexohet '{config_file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "Leximi i packageName/versionCode/versionName dështoi, APK e pavlefshme: '{apkfilename}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "Leximi i packageName/versionCode/versionName dështoi, APK e pavlefshme: '{apkfilename}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "Po lexohet {apkfilename} prej fshehtine" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Rifresko dhe ruaj në fshehtinë rregulla skaneri nga rrjeti" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "Hiqni paketimin e burimit dhe çfarëdo APK-sh, nëse verifikimi është i suksesshëm." #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Po hiqen kartelat e treguara" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "Po hiqet {path}\"" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "Riemërtoni kartelat APK që nuk përputhen me package.name_123.apk" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "Po rinënshkruhet {apkfilename} me debug.keystore e furnizuar" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "Ripërmaso krejt ikonat që tejkalojnë madhësinë maksimum në piksel dhe dil" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "Kufizoje output-in në sinjalizime dhe gabime" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "Po riprovohet shkarkim i dështuar: %s" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Rishkruaj krejt kartelat e tejtëdhënave" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "Po rishkruhet '{appid}'" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "Xhirojeni në depo git që ka ndryshime të padepozituara te dega vendore" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "Kalo nëpër {cibase} për të gjetur -debug.apk. dhe anashkalo repo_basedir {repo_basedir}" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "Që të ndreqet formatimi, xhironi rewritemeta" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "Po xhirohet kalimi i parë me kontrollin MD5 të çaktivizuar" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "Po xhirohet wget te {path}" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "SHA-256 e {url} nuk përkon me zërin!" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "Kontrollo për klasa jo të lira të ditura APK-në(të) e prodhuara." #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "Skanoni kodin burim të një pakete" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "Kontrolli gjeti {count} probleme te {apk}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "Kontrolli gjeti {count} probleme te {appid}:" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "Kontrolli gjeti {count} probleme te {appid}:{versionCode}:" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "Kontrolli gjeti {} problem" msgstr[1] "Kontrolli gjeti {} probleme" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "Po kontrollohet te APK për blloqe ekstra nënshkrimi." #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "Po kontrollohet APK me “dexdump” për klasa të ditura jo të lira." #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "Vëre sahatin në atë kohë duke përdorur:" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "Caktoni numër maksimum hedhjesh në qarkullim, përpara se të arkivohen të vjetrat" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "Si kufi hapjeje kartele cakto {integer}" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "Ujdisni një montim aplikacioni për një depo montimesh të përnatshme" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "Dështoi ujdisje kufiri hapjesh kartelash: " #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "Po ujdiset mbarim kohe {0} sekonda për këtë montim" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "Nënshkruani dhe vendosni paketa te depoja" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "Tregues nënshkrimi të krijuar duke përdorur “update --nosign”" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "Anashkalo skanimin e kodit burim për dyorë dhe probleme të tjera" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "Po anashkalohet '{apkfilename}' me nënshkrim i pavlefshëm!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "Po anashkalohet pasqyrë GitLab Pages, ngaqë depoja është shumë e madhe (>%.2fGB)!" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "Po anashkalohet prodhim treguesi për {appid}" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "Po anashkalohet {apkfilename} me nënshkrim të pavlefshëm!" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "Po anashkalohet {appid}: e çaktivizuar" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "Specifikoni një dosje vendore te e cila të njëkohësohet depoja" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "Specifikoni një kartelë identiteti për t’ia furnizuar SSH-s për njëkohësim me rsync-un" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "Specifikoni cila kartelë depoje kyçesh diagnostikimesh të përdoret." #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "U la të rrjedhë edhe më tepër informacion se sa normalisht" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "Po hiqet nënshkrim i mistershëm prej {apkfilename}" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "Përmbledhja '%s' është thjesht emri i aplikacionit" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "Përmbledhja me gjatësi {length} është mbi kufirin prej {limit} shenjash" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "Ora e sistemit është më herët se sa data në {path}!" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "Aktualisht, mënyra “tags update” funksionon vetëm për depo git, hg, bzr dhe git-svn" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "U përdor mënyra “tags update” në git-svn, por depoja s’qe ujdisur me etiketa" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Mënyra testim - hidhe output-in vetëm te drejtoria tmp, dhe monto përherë, edhe nëse output-i ekziston tashmë." #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "Paketa Python “qrcode” s’është e instaluar (p.sh., apt-get install python3-qrcode)!" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "Kodi për versionin OBB duhet të vijë pas “{name}.”:" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "URL bazë për depon për regjistrim (parazgjedhje: https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "Drejtoria ku të shkruhet pasqyra" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "Kartela që duhet përfshirë te depoja (shteg ose shenjë e gjithëpushtetshme)" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "Shenjat e gishtave të depos nuk përputhen." #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "Drejtoria rrënjë për local_copy_dir “{path}” s’ekziston!" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "Ka një përplasje keyalias-i - botimi u ndal" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "Këto janë aplikacionet që janë arkivuar nga depoja kryesore." #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "Ky urdhër s’duhet përdorur kurrë për krijimin e një pasqyre të f-droid.org! Një kopje e plotë lyp më tepër se 600GB." #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "Kjo është një depo aplikacionesh për t’u përdorur me F-Droid. Aplikacionet në këtë depo ose janë dyorë zyrtarë të montuar nga zhvilluesit e aplikacionit origjinal, ose janë dyorë të montuar nga burimi prej f-droid.org duke përdorur mjetet në https://gitlab.com/fdroid." #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "Kjo depo ka tashmë tejtëdhëna vendore: %s" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" "Që të plotësoni ujdisjen, shtojini APK-të tuaja te “%s”,\n" "mandej kryeni “fdroid update -c; fdroid update”. Mund të doni edhe\n" "të përpunoni “config.yml”, për të caktuar URL-në, emrin e depos, etj.\n" "Duhet të ujdisni edhe një kyç nënshkrimesh (një i tillë i përkohshëm\n" "mund të jetë prodhuar automatikisht).\n" "\n" "Për më tepër hollësi: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "dhe https://f-droid.org/docs/Signing_Process" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "Për të përdorur awsbucket, te config.yml duhen ujdisur edhe awssecretkey dhe awsaccesskey!" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "Që të përdorni rclone, rclone_config dhe awsbucket duhen ujdisur te config.yml!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "URL-ja duhet të fillojë me https:// ose http://" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "S’duhen përdorur shkurtues URL-sh" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "URL {url} te Përshkrim: {error}" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "Etiketë licence “{}” e papritur! Përdorni vetëm etiketa të miratuara nga FSF ose OSI, prej https://spdx.org/license-list" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Etiketë e papritur licence “{}”! Përdorni vetëm etiketa licencash të formësuara te kartela e formësimit tuaj" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "Zë i panjohur {key} në {configname}" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "U gjet përjashtim i panjohur!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "Kartelë e panjohur '{filename}' te montimi '{versionName}'" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "Format i panjohur tejtëdhënash: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "Format i panjohur tejtëdhënash: {path} (përdorni: *.yml)" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "Version i panjohur i aapt-së, mund të sjellë probleme: " #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "Hapësirë e panevojshme në fillim" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "Hapësirë e panevojshme në fund" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "Fushë aplikacioni jo e pranuar '{fieldname}' te '{path}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Flamurkë e jo e pranuar montimi '{build_flag}' te '{path}'" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "Lloj i pambuluar kartele “{extension}” për grafik depoje" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "U gjet kartelë e pambuluar grafike: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "extlib i papërdorur te %s" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "Kartelë e papërdorur te %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "Shteg scandelete i papërdorur: %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "Shteg scanignore i papërdorur: %s" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Përditësoni të dhëna depoje për paketa të reja" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "Përditësoni regjistrin e transparencës së dyorit për një URL" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData ka URL të pavlefshme: {url}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "UpdateCheckData duhet të përputhet me kodin e versionit si numër i plotë (\\d, ose [0-9]): {codeex}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "UpdateCheckData duhet të përdorë URL HTTPS: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "UpdateCheckData s’është URL e vlefshme: {url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode është ujdisur, por duket sikur checkupdates s’është xhiruar ende." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "Si UpdateCheckName është caktuar ID aplikacioni të njohur - s’mund të hiqet" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "Po ngarkohet {apkfilename} te androidobservatory.org" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "Po ngarkohet {apkfilename} to virustotal" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Për të treguar një kartelë te dega parazgjedhje, përdorni /HEAD, në vend se /master apo /main" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Përdor `fdroid update -c` për ta krijuar." #: ../fdroidserver/build.py msgid "Use build server" msgstr "Përdor shërbyes montimesh" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "Për APK-ra të shtuara rishtazi, përdor datë prej APK-je, në vend se kohën e tanishme" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "Po përdoret “{path}” për formësim të s3cmd." #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "Po përdoret “{path}” për njëkohësim me depozitë të largët." #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "Po përdoret Nënshkrimi APK-je v2" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "Po përdoret Nënshkrimi APK-je v3" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "Po përdoret Nënshkrim JAR" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Po përdoret jarsigner Java, s’rekomandohet për verifikim APK-sh! Përdorni apksigner" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "Po përdoret fjalor i zbrazët, në vend se lënda e {path}!" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "Po përdoret depo ekzistuese kyçesh “{path}”" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "Po përdoret rclone për njëkohësim me: {url}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "Po përdoret s3cmd për njëkohësim me: {url}" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Urdhrat e vlefshëm janë:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "Verifikoje ndaj një kopjeje të ruajtur lokalisht në fshehtinë, në vend se ta rishkarkosh." #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "Verifikoni integritetin e paketave të shkarkuara" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "Po verifikohet nënshkrim treguesi:" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "Po verifikohet paketë {path} me apksigner." #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "Kyçi API VirusTotal s’mund të ngarkojë kartela më të mëdha se 2MB, përdorni {url} që të ngarkoni {path}." #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Sinjalizo rreth gabimesh të mundshëm tejtëdhënash" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "Kartelë dyore WebAssembly" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Kur është formësuar për tregues të nënshkruar, në këtë fazë krijo vetëm tregues të panënshkruar" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "Kur nënshkrimi, ose verifikimi dështon, dil me një kod gabimi." #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "Doni të shkarkohet dhe instalohet F-Droid.apk përmes adb-je? (PO/jo)" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "Doni të shkarkohet aplikacioni(et) që nga f-droid.org? (PO/jo)" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'Distinguished Name' i përdorur teksa prodhoheshin kyçe" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "Mund të përdorni ANDROID_HOME që të caktoni shtegun për te SDK-ja juaj, domethënë:" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "Arkiv kartelash ZIP" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "adb-ja njofton se {serial} është “{status}”!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "po shtohet IdentityFile te {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "po shtohet te {name}: {path}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "mundësi e dykuptimtë: %(option)s mund të përputhej me %(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "apksigner te build-tools;{version} përcjell APK-ra ne nënshkrime v3 të pavlefshme, po shpërfillet." #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "S’u gjet apksigner! S’nënshkruhen ose verifikohen dot APK-ra moderne" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "S’u gjet apksigner, është i domosdoshëm për nënshkrim!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "ID aplikacioni e kartelës mbi të cilën të veprohet" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "ID aplikacioni me versionCode opsional në formën APPID[:VERCODE]" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "archive_url lypset të përfundojë me /archive" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "argument “-” me mënyrën %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "argument %(argument_name)s: %(message)s" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "po tentohet lidhje SSH e zhveshur, për të testuar kyç sendërtimesh:" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "s’përtyp dot specifikim scrlib (s’është një varg): '{}'" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "s’hapet dot '%(filename)s': %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "s’mund të hapet url jo https: '{};" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "s’gjenden dot srclibs të domosdoshme: “{path}”" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "s’mund të kihen argumente të shumtë për subparser" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "s’mund të përzihen veprimet - ka dy grupe të quajtur %r" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "s’mund të botohet përditësim, e ujdisët kyçin e sendërtimit?" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "po klonohet {url}" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "urdhra prej modulesh shtojce:" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "varg mundësie me përplasje: %s" msgstr[1] "vargje mundësish me përplasje: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "s’u përtyp dot '{path}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "s’u përtyp dot specifikim scrlib (s’u dha emër): '{}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "s’u përtyp dot specifikim scrlib (s’u dha referencë): '{}'" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "u krijua {path}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "versioni i tanishëm është më i ri: kod versioni të vjetër={old}, kod versioni të ri={new}" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "po fshihet: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "kartelë varësie pa kyç" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "dest= është e domosdoshme për mundësi si %r" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "po shkarkohet “{}”" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "dështoi shkarkimi i nënshkrimeve të kontrollorit prej “{}”" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "dyor i ekzekutueshëm, ka gjasa të jetë kod" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "pritej %s argument" msgstr[1] "priteshin %s argumente" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "pritej e pakta një argument" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "pritej e shumta një argument" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "pritej një argument" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "fdroid [] [-h|--help|--version|]" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "sill nga interneti versionin më të ri të nënshkrimeve" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "bëji gabimet e tejtëdhënave (parazgjedhje) të jenë sinjalizime, ose të shpërfillen." #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "veprimi “git svn clone” dështoi" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "Arkiv gzip kartelash" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "u shpërfill argumenti eksplicit %r" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1 duhet të ketë një nënshkrim, përdorni `fdroid signindex` për ta krijuar!" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 duhet të ketë një nënshkrim, përdorni `fdroid signindex` për ta krijuar!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "vlerë %(type)s e pavlefshme: %(value)r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "zgjedhje e pavlefshme: %(value)r (zgjidhni nga %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "vlerë e pavlefshme conflict_resolution: %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "varg i pavlefshëm mundësie %(option)r: duhet të fillojë me një shenjë %(prefix_chars)r" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "S’u gjet ipfs_cid, po anashkalohet prodhimi i CIDv1" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "udhëzimet e fundit për montimin janë më të reja: kod versioni të vjetër={old}, kod versioni të ri={new}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "local_copy_dir does s’mbaron me “fdroid”, ndoshta kishit në mendje: “{path}”" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "local_copy_dir duhet të jetë një shteg absolut!" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "local_copy_dir duhet të jetë një drejtori, jo një kartelë!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "pasqyra '%s' s’përfundon me 'fdroid'!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "pasqyra të ujdisura dy herë, te config.yml dhe {path}!" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "argumentet që përjashtojnë njëri-tjetrin duhet të jenë opsionalë" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "përditësim pasues i fshehtinës {name} për {time}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "s’ka “icon” te {appid}" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "s’u dha APK" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "s’u gjetën hollësi versioni" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "e palejuar me argumentin %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "një nga argumentet %s është i domosdoshëm" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "prano vetëm vargje, lista dhe dyshe" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "mundësi" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "po mbishkruhet {path} ekzistues" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "argumente pozicionalë" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "dyorit të refrencës i mungon nënshkrimi" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "refuzo shkarkim përmes lidhjeje HTTP të pasigurt (përdorni HTTPS ose specifikoni --no-https-check): {apkfilename}" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "repo_icon “repo/icons/%s” s’ekziston, po prodhohet vendmbajtëse." #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "repo_url lypset të përfundojë me /repo" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "rsync-u mungon, ose është i dëmtuar: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "s3cmd njëkohëson tregues nga {path} te {url} dhe fshin të hequrit" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "fshehtina e kontrollorit është e keqformuar! Mund ta spastroni me: “{clear}”" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "serverwebroot: shtegu nuk mbaron me “fdroid”, ndoshta kishit në mendje një nga këto:" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "librari e përbashkët" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "shfaq këtë mesazh ndihme dhe dil" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "APK e nënshkruar, ose një shteg-kartele, ose URL HTTPS." #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "anashkalo sendërtim regjistrash të plotë montimesh: lëndë e regjistrit është e zbrazët" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "anashkalo krijim regjistrash të plotë montimi: e paaktivizuar te formësimi" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "po anashkalohet paketë tar burimi: {path}" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "srclibs-it i mungon emër dhe/ose @" #: ../fdroidserver/scanner.py msgid "static library" msgstr "librari statike" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "argumentet vijuese janë të domosdoshëm: %s" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "varg i papritur mundësie: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "përtypës i panjohur %(parser_name)r (choices: %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "argumente të papranuar: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "leje jo të parrezikshme mbi '{config_file}' (duhet të ishin 0600)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "përdorimi: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "po përdoret Apache libcloud për njëkohësim me {url}" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com i kufizon shpejtësitë, po pritet për riprovim…" #: ../fdroidserver/install.py msgid "yes" msgstr "po" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "{0} aplikacion, {1} aliase kyçi" msgstr[1] "{0} aplikacione, {1} aliase kyçi" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) s’ka tejtëdhëna!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "AndroidManifest.xml e {apkfilename} ka një datë të gabuar: " #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} s’ka emër! Në vend të tij po përdoret ID aplikacioni." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "{appid} prej {path} s’është ID e vlefshme aplikacioni Android!" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "{appid} prej {path} s;është Emër i vlefshëm Pakete Java!" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "{appid} ka nga të dyja, APK-ra dhe kartela: {files}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "{appid} i mungon {name}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "{appid}: extlib i panjohur {path} te montimi '{versionName}'" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "{appid}: s’u specifikuan montime, po xhirohet me gjendjen e tanishme të burimit" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "{appid}: {field} duhet të jetë një '{type}', por është një '{fieldtype}!'" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "{appid}: {field} duhet të jetë një '{type}', por është një '{fieldtype}'!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "{build_flag} duhet të jetë numër i plotë, u gjet: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "{build_flag} duhet të jetë listë, ose varg, u gjet: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "{file} është e zbrazët ose e dëmtuar!" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} “{section}/icons/{path}” s’ekziston! Kontrolloni “config.yml”." #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "{path1} është përsëdytje e {path2}, hiqeni njërin!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "{path} ekziston tashmë, po shpërfillen përfundimet e importimit!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "{path} s’ekziston! Krijojeni duke xhiruar:" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "{path} ka “{pattern}” të gabuar nënshkrimi kartele, ka gjasa të jetë rreng Janus!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "për {path} ka {count} herë sinjalizime nga virustotal:" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "{path} ka shenja gishtash të gabuara ({fingerprint})!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "{path} s’është “key: value”, por një {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "{path} s’është kartelë standarde formësimi!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "{path} s’është listë, por një {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "{path} s’është {expected_type}, por një {datatype}!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "{path} është me madhësi zero!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "{path} më tepër se 200MB, ngarkojeni dorazi: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "{path}: “{code}” s’është kod i vlefshëm vendi ISO_3166-1 alpha-2!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "{path}: {error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "{url} s’përfundon me “fdroid”, kontrolloni shtegun e URL-së!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "{url} s’fillon me “http”!" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "Dështoi {} montim" msgstr[1] "Dështuan {} montime" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "{} doli me sukses" msgstr[1] "{} dolën me sukses" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/sr/0000755000175000017500000000000014770510164014607 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/sr/LC_MESSAGES/0000755000175000017500000000000014770510164016374 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/sr/LC_MESSAGES/fdroidserver.po0000644000175000017500000032754614770507747021470 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Саша Петровић , 2022. # Đorđe Vasiljević , 2022. # Reno Tx , 2024. # Hans-Christoph Steiner , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.1b0\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2024-12-30 22:00+0000\n" "Last-Translator: Reno Tx \n" "Language-Team: Serbian \n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Weblate 5.10-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "SSH јавни кључ који ће се користити као кључ за распоређивање:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "{path} енкодовано за DEBUG_KEYSTORE тајну променљиву:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "Датотека метаподатака за „%s/“ не постоји!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "\"local_copy_dir\" {path} не постоји!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" је већ инсталиран на {dev}." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "\"{path}\" садржи недавни {name} ({version})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "\"{path}\" постоји, али s3cmd није инсталиран!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "„{path}“ није подржани формат фајла (користи: metadata/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "„{path}” је потписан кључем који није дозвољен:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" није валидан URL!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: грешка: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "%d АПК-ова није успело да се потпише или верификује!" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d проблема пронађено" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%r није могуће позвати" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "%s није произвео речник!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "%s има лош SHA-256: %s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s није прихваћено поље за градњу" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' није пронађен у config.yml!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "'keystore' је НИШТА и 'smartcardoptions' је празно!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "'keystore' није пронађен у config.yml!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "'keystorepass' није пронађен у config.yml!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' није пронађен у config.yml!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'захтевано' је неважећи аргумент за позиционе параметре" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "'путања_до_сдк' није постављена у config.yml!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' је превише стар, fdroid захтева build-tools-{version} или новији!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "'{path}' није успео да се изврши!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' има неважећи формат, треба да буде речник!" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' није валидан {field} у {appid}. Регекспатерн: {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' није важећи {field}, треба да буде {pattern}" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "--merge-request се извршава само на једној апликацији!" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...провера ажурирања није успела за {appid} : {error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() није дефинисано" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "/issues недостаје" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "Потребан је URL као аргумент!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "Потписи АПК-ова имају различите сертификате у {path}:" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "Додај PGP потписе користећи GnuPG за пакете у репоу" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "Додајте кључ за потписивање репо-а у непотписани репо" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "Додај метафајлове скелета за APK-ове који их немају" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "Додавање новог репозиторијума само за {name}" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "Алијас репо кључа за потписивање у кејстору" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "AllowedAPKSigningKeys недостаје али је референтни бинарни фајл обезбеђен" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "Омогућава да се друга ревизија (или git грана) одреди за почетни увоз" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "Такође огледало целог архива секције" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "Такође упозори на проблеме са форматирањем, на пример rewritemeta -l" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "Андроид AAR библиотека" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "Андроид АПК фајл" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "Андроид DEX код" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "Андроид SDK није пронађен на {path}!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "Андроид СДК пут '{path}' не постоји!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "Путања Android SDK-а '{path}' није директоријум!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "Андроид СДК алат {cmd} није пронађен!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Апликација има бинарне фајлове али нема одговарајуће AllowedAPKSigningKeys за пиновање сертификата." #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "Апликација има NoSourceSince или ArchivePolicy \"0 верзија\" или 0, али AutoUpdateMode или UpdateCheckMode нису None" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "Апликација је у '{repo}' али има линк ка {url}" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Апликација има бинарни фајл, али нема одговарајуће AllowedAPKSigningKeys за пин сертификат." #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "Додавање .git није потребно" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "Архивирање {apkfilename} са неважећим потписом!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode са UpdateCheckMode: HTTP мора имати образац." #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "Аутоматски одговори \"не\" на све упите." #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "Аутоматски одговори \"да\" на све упите." #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "Лош тип уноса \"{mirrortype}\" у конфигурацији огледала: {mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "Основни URL за огледало, може укључивати кључ за потписивање индекса користећи упит низ: ?fingerprint=" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "Грана '⸮ {branch}⸮' коришћена као commit у изради '⸮ {versionName}⸮'" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "Грана '{branch}' коришћена као commit у srclib '{srclib}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "Прекинута симболичка веза: {path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "Изградите пакет из извора" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "Израдите све доступне апликације" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "Градња генерисана помоћу `fdroid import` - уклоните линију за онемогућавање када буде спремно" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "Мета подаци грађења git репозиторијума имају непослате промене!" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "Градите само најновију верзију сваког пакета" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "Изграђен репозиторијум заснован на \"%s\" са овом конфигурацијом:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "Не могу да аутоматски ажурирам апликацију без тренутног кода верзије" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Не може се изградити због {} грешке приликом скенирања" msgstr[1] "Не може се изградити због {} грешке приликом скенирања" msgstr[2] "Не може се изградити због {} грешака приликом скенирања" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Не могу да препишем \"{path}\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "Категорије '%s' нису важеће" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "Категорије нису подешене" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "Категорија \"{category}\" је дефинисана, али није коришћена за ниједну апликацију!" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Проверите да ли постоје ажурирања за апликације" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "Провера архивирања за {appid} - апк-и:{integer}, чувајверзије:{keep}, архапк-и:{arch}" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Чисто ажурирање – не користите кешеве, поново обрађујте све АПК-ове" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "Бојење излазних логова" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Запета раздвојена листа категорија." #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "Наредба „%s” није препозната.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "Потврди измене" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "Уређивање промена, пуш, затим направите захтев за спајање" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "Конфликтне дефиниције \"{field}\" између .yml и локализованих фајлова:" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Контрадикторни аргументи: '--verbose' и '--quiet' не могу бити наведени у исто време." #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "Није могуће пронаћи '{command}' на вашем систему" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Није могуће пронаћи најновији верзијски код" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Није могуће пронаћи назив најновије верзије" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "Није могуће пронаћи {path} да би се уклонио" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "Није могуће отворити APK {path} за анализу: " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Није могуће парсовање величине \"{size}\", погрешан тип \"{type}\"" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Није пронађен ИД апликације" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "Није могуће пронаћи информације о верзији" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "Није могуће пронаћи ID пакета" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "Кукавички одбија да препише постојећу конфигурацију кључа за потписивање!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "Креиран нови контејнер \"{name}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Креирање \"{path}\" за конфигурацију s3cmd." #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Creating empty {config_file}" msgstr "Читање '{config_file}'" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Креирање директоријума за записе" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "Прављење новог S3 кофера: {url}" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "Креирање директоријума за излаз" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "Креирање потписаног индекса са овим кључем (SHA256):" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "Прављење привременог директоријума" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "Креирање непотписаног индекса у припреми за потписивање" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "ТренутниКодВерзије {cv} је мањи од најстарије верзије {versionCode}" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "DEBUG_KEYSTORE није подешен или је вредност непотпуна" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "Обришите APKs и/или OBBs без метаподатака из репозиторијума" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "Брисање архива, репозиторијум је превелик ({size} макс {limit})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "Брисање историје git-mirror, репозиторијум је превелик ({size} максимално {limit})" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "Брисање непознате датотеке: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "Опис '%s' је само сажетак апликације" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "Опис има дупликатну линију" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "Опис дужине {length} је преко ограничења од {limit} карактера" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "Да ли сте мислили config/{name}.yml?" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "Да ли сте мислили {code}?" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "Не додавај 'disable:' у генерисане уносе за изградњу" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "Не постављајте нове фајлове у репозиторијум" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "Не укључуј \"{path}\" у URL!" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "Не тражите путању за Android SDK, само неуспешно наставите" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "Не уклањајте приватне кључеве генерисане из кејстора" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "Не правите изворну tar.gz архиву, корисно када тестирате изградњу" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "Не освежавајте репозиторијум, корисно када тестирате билд без интернет конекције" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "Не користите rsync чексуме" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "Преузмите F-Droid.apk користећи огледала која мање цуре у мрежу" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Преузмите комплетне огледале малих репоа" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Преузимање складишта је већ једном неуспело, не покушавам поново." #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "Преузимање {url} није успело. {error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "Дуплирана декларација Анти-Функције на {path} је игнорисана!" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "Дуплирани унос \"%s\" у конфигурацији огледала!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "Дуплирани линк у '{field}': {url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "ГРЕШКА: %(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "ГРЕШКА: Подкоманда „server“ је уклоњена, користите „deploy“!" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "ГРЕШКА: неподржани тип CI, закрпе добродошле!" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "ГРЕШКА: неподржан git домаћин \"%s\", закрпе су добродошле!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "ERROR: {key} у {path} није \"archive\" или \"repo\"!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "ERROR: {key}:{subkey} у {path} није у дозвољеним кључевима: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "Кодирање је подешено на „{enc}“ fdroid може наићи на проблеме са кодирањем. Молимо вас да га подесите на „UTF-8“ за најбоље резултате." #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" "Унесите путању до Android SDK (%s) овде:\n" "> " #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "Еколошка променљива {var} из {configname} није подешена!" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "Еколошка променљива {var} из {configname} није подешена!" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "Error deploying 'github_releases', {} није присутан. (Можда треба прво да покренете `fdroid update`.)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "Грешка при добијању адресе репозиторијума" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "Излаз са ненултим кодом ако су пронађени проблеми" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "Извлачење метаподатака апликације из изворног репозиторијума" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "Извуците потписе из АПК-ова" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "F-Droid.apk није могао да се преузме са било ког познатог извора!" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "Неуспело копирање {path}: {error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "Неуспешно преузимање потписа за '{apkfilename}': {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "Није успело читање {path}: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "Неуспешно мењање величине {path}: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "Неуспело креирање S3 кофера: {url}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "Неуспешно добијање информација о APK, брисање {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "Није успело преузимање информација о APK, прескакање {path}" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "Није успело добијање отиска кључа за потписивање APK" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "Инсталација '{apkfilename}' на {dev} није успела: {error}" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "Неуспешно потписивање апликације" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "Пронађен id сервера за изградњу из VM-а: {buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "Преузети потписи за '{apkfilename}' -> '{sigdir}'" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "Фајл је нестао током обраде: {path}" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "Завршено" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Забрањене HTML ознаке" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "Присилна изградња онемогућених апликација и наставак без обзира на проблеме са скенирањем. Дозвољено само у тест режиму." #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "Прекид изградње након {0} сек временског ограничења!" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "Присилно скенирање онемогућених апликација и градњи." #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "Пронађена је \"{path}\" графика без метаподатака за апликацију \"{name}\"!" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "Пронађена лоша датотека за финансирање \"{path}\" за \"{name}\":" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "Пронађени неважећи ID-еви апликација у аргументима" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "Пронађени неважећи верзијски кодови за неке апликације" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "Пронађено више JAR датотека са блоковима потписа у {path}" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "Пронађено више потписних сертификата!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "Пронађено више метаподатотека за {appid}" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "Пронађено је више сертификата за потписивање за репозиторијум." #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "Нису пронађени сертификати за потписивање за депо." #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "Није пронађена датотека на %s" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "Пронађен {apkfilename} на {url}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "Пронађено {count} проблема у {filename}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "Пронађено {count} упозорења у {filename}" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "Генерисани метаподаци скелета за {appid}" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "Провера стања Git-а за '%s' није успела" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "Гит чишћење није успело" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "Преузимање из Гит-а није успело" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Git remote set-head неуспешан: \"%s\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Гит ресет није успео" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "Git submodule deinit није успео" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "Гит подмодул синхронизовање није успело" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "Ажурирање гит подмодула није успело" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "HTTPS мора да се користи са Subversion URL-овима!" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "Ако git огледало постане превелико, дозволите да архиву обришемо" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "Ако овај пренос не успе, покушајте ручно да отпремите на {url}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "Игнорисање '{field}' у '{metapath}' метаподацима јер је застарело." #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "Игнорисање FUNDING.yml уноса дужег од 2048: %s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "Игнорисање лошег елемента у манифесту: %s" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "{oldfile} је застарео, користите {newfile}" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Игнорисање пакета без метаподатака: " #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "Игнорисање застарелих кеш података за {apkfilename}" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "Укључи АПК-ове који су потписани алгоритмима који су искључени, као што је MD5" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "Укључите ПГП серификат .асц фајлове у огледало" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "Укључи логове грађења у огледало" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "Укључите изворне тарболове у огледало" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "Укључујући метаподатке из %s@%s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "Укључујући метаподатке из {path}" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "Иницијализација подмодула" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "Инсталирајте све доступне потписане апликације" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "Инсталирајте изграђене пакете на уређајима" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "Инсталирање %s..." #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "Инсталирање '{apkfilename}' на {dev}..." #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "Интеракција са HTTP сервером репозиторијума" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "Неважећи APK" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "Неважећи AutoUpdateMode: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "Неважећи UpdateCheckMode: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "Неважећа VercodeOperation: {field}" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "Неважећа VercodeOperation: {invalid_ops}" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "Неважећи идентификациони број апликације {appid}" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Неисправна наменска листа" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "Неважеће име за објављени фајл: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "Невалидан ndk: унос у изградњи: \"{ndk}\"" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "Неважећи преусмеравање на не-HTTPS: {before} -> {after} " #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "Неважећи scrlib метаподаци: '{file}' не постоји" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "Неправилна srclib мета подаци: није могуће анализирати '{file}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "Неправилна srclib мета подаци: непознати кључ '{key}' у '{file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "Потпис JAR-а није успео да се верификује: {path}" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "Потпис JAR-а верификован: {path}" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "Java JAR файл" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "Java JDK није пронађен! Инсталирајте у стандардној локацији или поставите java_paths!" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "Java компилирана класа" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "Java jarsigner није пронађен! Инсталирајте на стандардној локацији или поставите java_paths!" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "Javascript у HTML src атрибутима" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "Чување неуспеле градње \"{apkfilename}\"" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "Кејстр за потписивање кључа:\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "Познати дебаг кључ се користи у AllowedAPKSigningKeys: " #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "Последњи коришћени комит '{commit}' изгледа као ознака, али је UpdateCheckMode '{ucm}'" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "Методе донација на Liberapay спадају у поље: Liberapay" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "Наведите датотеке које ће бити реформиране (суви тренутак)" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "Локација укључена у f-droid.org УРЛ" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "Зауставите изградњу на изузетцима" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "Неправилно обликовани огледи репозиторијума." #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "Неисправна линија серверског корена веба:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "Достигнута максимална дубина рекурзије у ZIP датотеци: %s" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Зерклите потпуну репозиторyју и архиву, све типове фајлова." #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "Недостаје директоријум за излаз" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "Премештање декларација Анти-Функција у локализоване фајлове:" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "Ни \"repo_pubkey\" ни \"keystorepass\" нису постављени у config.yml" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "Нема APK-а за пакет: %s" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "Нема пронађеног Android SDK!" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "Није пронађен ниједан прикључени уређај" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "Нема пронађених уређаја за `adb install`! Молимо вас, уметните један." #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "Нема отиска прста у УРЛ-у." #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "Нема git подмодула доступних" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "Није могуће пронаћи gradle пројекат. Укажите --subdir?" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "Нема информација." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "Нема одговарајућих ознака" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "Није пронађена минимална верзија SDK у {0}, користи се подразумевана (3)." #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "Нема потребе да се наводи да је апликација Слободан Софтвер" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "Нема потребе да се наводи да је апликација за Андроид" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "Нема подешавања! Измените ваш config.yml да поставите барем једну од ових:" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "Нема наведених пакета" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "Нема потписаног APK-а доступног за %s" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "Нема потписаног излазаног директоријума - ништа за рад" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "Нема сертификата за потпис у {path}" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "Нема пакета: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "Нема таквог versionCode {versionCode} за апликацију {appid}" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "Није пронађена ниједна ознака" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "Нема непотписаног каталога - ништа не треба да се ради" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "Није пронађена информација о верзији." #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "Није важећа дефиниција величине: \"{}\"" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "Ништа за raditi" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "Ништа за радити за {appid}." #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "Сада поставите ове у config.yml:" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "OBB фајл има новији versionCode({integer}) од било ког APK:" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "ОББ име фајла мора почети са \"main.\" или \"patch.\":" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "Име пакета OBB не одговара подржаном APK-у:" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Оффлайн машина, прескочено генерисање git огледала до `fdroid deploy`" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "Једна од 'github_releases' конфигурационих ставки нема 'packageNames' вредност. прескакање ..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "Једна од 'github_releases' конфигурационих ставки недостаје 'projectUrl' вредност. прескакање ..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "Једна од 'github_releases' конфигурационих ставки нема 'token' вредност. прескакање ..." #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Само PNG и JPEG су подржани за графику, нађено: {path}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "Само процесирај апликације са автоматским ажурирањима" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Методе донација OpenCollective припадају OpenCollective: пољу" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Извештај у JSON формату сачувај у датотеку именовану по APK." #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "Излаз JSON на стандардни излаз." #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "Излаз у JSON" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "Општа Lizenzа пројекта." #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "Превазилажење пусте верзије име у {apkfilename} из метаподатака: {version}" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "Пакет \"{appid}\" већ постоји" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "Парсирање манифеста на '{path}'" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "Потребна лозинка са корисничким именом" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "Пут до главне подкатегорије Android пројекта, ако није у корену." #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "Пут до Android SDK (понекад подешен у ANDROID_HOME)" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "Пут до git репозиторијума који ће се користити као лог" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "Путања до хранионице за кључ потписивања репозиторијума" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Штампај тајну променљиву на терминал за лако копирање/налепљивање" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "Режим приватности је омогућен на основу ваше локације ({country_code})." #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "Проблем са ZIP датотеком: %s, грешка %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "Проблем са xml на '{path}'" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "Процес аутоматских ажурирања" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "Обрада {apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "Обрада {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "Произвести људски читљив XML/JSON за индексе датотека" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "Пројектна УРЛ адреса за импортовање." #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "Знакови интерпункције треба да се избегавају" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "Пошаљи лог у ову гит даљинску репозиторијум" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "Притискање логова бинарне транспарентности на {url}" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "Слање на удаљени сервер није успело!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "Турење на {url}" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "Брзо покрените нови репозиторијум" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "Прочитајте све метаподаатке и изађите" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "Читање '{config_file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "Читање packageName/versionCode/versionName није успело, APK неважећи: '{apkfilename}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "Читање packageName/versionCode/versionName није успело, APK је неважећи: '{apkfilename}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "Читање {apkfilename} из кеша→" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Освежите и кеширајте правила и потписе скенера са мреже" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "Уклони изворни tarball и све APK-ове ако су успешно проверени." #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Уклањање наведених датотека" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "Уклањање {path}" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "Преименујте APK фајлове који не одговарају package.name_123.apk" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "Резање {apkfilename} са обезбеђеним debug.keystore" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "Промени величину свих икона које прелазе максималну величину у пикселима и изађи" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "Ограничите излаз на упозорења и грешке" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "Поновно покушавање неуспелог преузимања: %s" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Преупишите све метаподатке" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "Преиспитивање '{appid}'" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "Покрени на git репозиторијуму који има неконтролисане промене" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "Покрените преко {cibase} да пронађете -debug.apk. и прескочите repo_basedir {repo_basedir}" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "Покрените rewritemeta да исправите форматирање" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "Ручно извршавање првог пролаза са MD5 проверама онемогућеним" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "Покретање wget у {path}" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "SHA-256 од {url} не одговара уносу!" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "Скенирајте добијене APK-ове за познате небесплатне класe." #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "Скенирајте изворни код пакета" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "Скенирање је пронашло {count} проблема у {apk}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "Скенер је пронашао {count} проблема у {appid}:" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "Скенирање је пронашло {count} проблема у {appid}:{versionCode}:" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "Скенирање је пронашло {} проблем" msgstr[1] "Скенирање је пронашло {} проблема" msgstr[2] "Скенирање је пронашло {} проблема" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "Сkeniranje АПК-а за додатне блокове потписивања." #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "Скенирање APK са dexdump за познате неслободне класе." #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "Поставите NDK {release} ({version}) нагоре" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "Поставите сат на то време користећи:" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "Поставите максимални број издања у репозиторијуму пре него што старија буду архивирана" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "Поставите лимит за отворене фајлове на {integer}" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "Подесите апликацију за изградњу за репозиториј ноћних изградњи" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "Постављање лимита за отворене фајлове је неуспело: " #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "Постављање таймаута од {0} секунди за овај билд" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "Потпишите и положите пакете у репо" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "Индекс потписа креиран користећи update --nosign" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "Прескочи скенирање изворног кода за бинарне датотеке и друге проблеме" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "Пропуштање '{apkfilename}' са неважећим потписом!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "Прескакање GitLab Pages огледала јер је репозиторијум превелики (>%.2fGB)!" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "Пређите преко генерисања индекса за {appid}" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "Прескакам {apkfilename} са неважећим потписом!" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "Прескочи {appid}: онемогућено" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "Одредите локалну фасциклу за синхронизацију репозиторијума" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "Наведите датотеку идентитета коју ћете употредити за SSH приликом rsync-а" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "Наведи који debug keystore фајл да се користи." #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "Испљунути још више информација него обично" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "Скидање мистериозног потписа са {apkfilename}" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "Сажетак '%s' је само име апликације" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "Резиме дужине {length} премашује {limit} знакова" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "Системски сат је старији од датума у {path}!" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "Режим ажурирања етикета тренутно ради само за git, hg, bzr и git-svn репозиторијуме" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "Режим ажурирања ознака коришћен у git-svn, али репо није подешен са ознакама" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Тест режим - стави излаз у tmp директоријум само, и увек компајлирај, чак и ако излаз већ постоји." #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "Код верзије OBB мора бити након \"{name}.\":" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "Основни URL за репо за логовање (подразумевано: https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "Директоријум у који ће се написати огледало" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "Фајл који треба да буде укључен у репо (путања или глоб)" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "Отисак репозиторијума се не поклапа." #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "Коренски директоријум за local_copy_dir \"{path}\" не постоји!" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "Дошло је до колизије кључа - објављивање је обустављено" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "Ово су апликације које су архивиране из главног репозиторијума." #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "Ова команда никада не би требало да се користи за огледало f-droid.org! Пуна копија захтева више од 600GB." #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "Ово је репозиторијум апликација које се користе са F-Droid. Апликације у овом репозиторијуму су или званичне бинарне верзије које су развили оригинални програмери апликација, или су бинарне верзије састављене из извора од стране администратора f-droid.org коришћењем алата на https://gitlab.com/fdroid." #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "Овај репо већ има локалне метаподатке: %s" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" "Да бисте завршили подешавање, додајте своје АПК-ове у \"%s\" \n" "затим покрените \"fdroid update -c; fdroid update\". Такође можете желети да измените \n" "\"config.yml\" да поставите УРЛ, име репозиторију и још много тога. Такође бисте требали \n" "наподесити кључ за потписивање (можда је привремени већ аутоматски генерисан). \n" " \n" "За више информација: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo \n" "и https://f-droid.org/docs/Signing_Process" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "Да бисте користили awsbucket, awssecretkey и awsaccesskeyid морају бити подешени у config.yml!" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "Да бисте користили rclone, rclone_config и awsbucket морају бити подешени у config.yml!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "URL мора почети са https:// или http://" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "URL скраћивачи не би требало да се користе" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "URL {url} у Опису: {error}" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "Неочекивана ознака лиценце \"{}\"! Користите само ознаке одобрене од стране FSF или OSI са https://spdx.org/license-list" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Неочекивана ознака лиценце \"{}\"! Користите само ознаке лиценце конфигурисане у вашем конфигурационом фајлу" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "Непознати унос {key} у {configname}" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "Непозната изузетна ситуација пронађена!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "Непозната датотека '{filename}' у изградњи '{versionName}'" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "Непознати формат метаподатака: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "Непознат формат метаподатака: {path} (користи: *.yml)" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "Непозната верзија aapt, може изазвати проблеме: " #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "Непотребан водећи размак" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "Непотребан завршни размак" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "Непознато поље апликације '{fieldname}' у '{path}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Непозната застава изградње '{build_flag}' у '{path}'" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "Неподржани тип датотеке \"{extension}\" за графику репозиторијума" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "Пронађена неподржана графичка датотека: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "Некоришћена екстерна библиотека на %s" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "Некоришћена датотека на %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "Некоришћена путања за брисање скенирања: %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "Некоришћена путања за игнорисање скенирања: %s" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Ажурирање информација о репозиторијуму за нове пакете" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "Ажурирање дневника транспарентности бинарних датотека за URL" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData има неважећи URL: {url}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "UpdateCheckData мора одговарати верзионом коду као цео број (\\d или [0-9]): {codeex}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "UpdateCheckData мора користити HTTPS URL: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "UpdateCheckData није важећи URL: {url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode је подешен, али изгледа да checkupdates још није покренут." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName је постављен на познати ID апликације, може се уклонити" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "Отпремање {apkfilename} на androidobservatory.org" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "Отпремање {apkfilename} на virustotal" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Користите /HEAD уместо /master или /main да покажете на фајл у подразумеваној грани" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Користи `fdroid update -c` да је креираш." #: ../fdroidserver/build.py msgid "Use build server" msgstr "Користи сервер за изградњу" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "Користи датум из APK уместо тренутног времена за ново додате APK-ове" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "Користим \"{path}\" за конфигурисање s3cmd." #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "Користим \"{path}\" за синхронизацију са удаљеним складиштем." #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "Користим APK Signature v2" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "Користим APK Signature v3" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "Коришћење JAR потписа" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Користим Java's jarsigner, не препоручује се за верификацију APK-ова! Користи apksigner" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "Коришћење празног речника уместо садржаја {path}!" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "Користим постојећи keystore \"{path}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "Користим rclone за синхронизацију са: {url}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "Користим s3cmd за синхронизацију са: {url}" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Важеће команде су:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "Верификуј против локално кеширане копије уместо поновног преузимања." #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "Верификуј интегритет преузетих пакета" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "Верификација потписа индекса:" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "Провера пакета {path} са apksigner." #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "VirusTotal API кључ не може отпремити датотеке веће од 32MB, користи {url} за отпремање {path}." #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Упозорење о могућим грешкама у метаподацима" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "ВебАсембли бинарни фајл" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Када је конфигурисано за потписане индексе, креирај само непотписане индексе у овој фази" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "Када се врши провера целог репозиторијума, yamllint је подразумевано онемогућен. Ова опција приморава yamllint без обзира на то." #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "Када потписивање или верификација не успеју, излазите са кодом грешке." #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "Да ли желите да преузмете и инсталирате F-Droid.apk преко adb? (ДА/не)" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "Да ли желите да преузмете апликацију(е) са f-droid.org? (ДА/не)" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'Distinguished Name' коришћен приликом генерисања кључева" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "Можеш користити ANDROID_HOME да подесиш путању до свог SDK, тј.:" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "ZIP архивска датотека" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "adb пријављује {serial} је \"{status}\"!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "додавање IdentityFile у {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "додавање у {name}: {path}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "нејасна опција: %(option)s може одговарати %(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "apksigner није пронађен! Не могу да потпишем или проверим модерне APK-ове" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "apksigner није пронађен, потребан је за потписивање!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "ID апликације датотеке за рад" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "ID апликације са опционим versionCode у облику APPID[:VERCODE]" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "archive_url мора да се завршава са /archive" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "аргумент \"-\" са модом %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "аргумент %(argument_name)s: %(message)s" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "покушавам SSH везу без кључа да тестирам deploy кључ:" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "не могу да парсирам scrlib спецификацију (није стринг): '{}'" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "не могу да отворим '%(filename)s': %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "не могу да отворим non-https url: '{};" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "не могу да пронађем потребне srclibs: \"{path}\"" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "не могу имати више аргумената подпарсера" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "не могу спојити акције - две групе се зову %r" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "не могу објавити ажурирање, да ли сте поставили deploy кључ?" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "клонирам {url}" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "команде из plugin модула:" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "конфликтна опција стринг: %s" msgstr[1] "конфликтна опција стринга: %s" msgstr[2] "конфликтна опција стрингова: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "конфликтни алиас подпарсера: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "конфликтни подпарсер: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "не могу да парсирам '{path}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "није могуће парсирати srclib спецификацију (није наведено име): '{}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "не могу да парсирам srclib спецификацију (није наведена референца): '{}'" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "креирано {path}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "тренутна верзија је новија: стара верзија={old}, нова верзија={new}" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "бришем: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "фајл зависности без закључавања" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "постављен лог процеса {path} на {dest}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "dest= је потребан за опције као што је %r" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "преузимање '{}'" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "преузимање потписа скенера са '{}' није успело" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "извршни бинарни фајл, могуће код" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "очекиван %s аргумент" msgstr[1] "очекивана %s аргумента" msgstr[2] "очекивано %s аргумената" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "очекиван бар један аргумент" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "очекиван највише један аргумент" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "очекиван један аргумент" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "fdroid [<команда>] [-h|--help|--version|]" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "преузмите најновију верзију потписа са веба" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "форсирај грешке метаподатака (подразумевано) да буду упозорења, или да буду игнорисане." #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "git svn clone није успео" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "gzip архива датотека" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "игнорисан експлицитан аргумент %r" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1 мора имати потпис, користите `fdroid signindex` да га креирате!" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 мора имати потпис, користите `fdroid signindex` да га направите!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "неважећа %(type)s вредност: %(value)r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "неважећи избор: %(value)r (изаберите из %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "неважећа conflict_resolution вредност: %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "неважећа опција стринг %(option)r: мора почети са карактером %(prefix_chars)r" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "ipfs_cid није пронађен, прескачем генерисање CIDv1" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "најновији рецепт за изградњу је новији: стара верзија={old}, нова верзија={new}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "local_copy_dir не завршава се са \"fdroid\", можда сте мислили: \"{path}\"" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "local_copy_dir мора бити апсолутна путања!" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "local_copy_dir мора бити директоријум, а не датотека!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "огледало '%s' се не завршава са 'fdroid'!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "огледала су постављена два пута, у config.yml и {path}!" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "међусобно искључиви аргументи морају бити опционални" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "следеће ажурирање кеша {name} је за {time}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "нема \"иконе\" у {appid}" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "нема достављеног APK-а" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "није пронађена информација о верзијама" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "није дозвољено са аргументом %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "један од аргумената %s је обавезан" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "прихвата само стрингове, листе и тапл" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "опције" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "преписивање постојећег {path}" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "позициони аргументи" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "процес лог распоређивање {path} у {dest} није успело!" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "референтни бинарни фајл недостаје потпис" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "одбијам преузимање преко несигурне HTTP везе (користите HTTPS или наведите --no-https-check): {apkfilename}" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "repo_icon \"repo/icons/%s\" не постоји, генерише се привремена икона." #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "repo_url мора да се завршава са /repo" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "rsync недостаје или је покварен: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd синхронизује индексе {path} са {url} и брише" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "s3cmd синхронизује индексе из {path} у {url} и брише уклоњене" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "кеш скенера је неисправан! Можете га обрисати са: '{clear}'" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "serverwebroot: путања се не завршава са \"fdroid\", можда сте мислили на једну од ових:" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "дељена библиотека" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "прикажи ову поруку помоћи и изађи" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "потписан APK, или путања до фајла или HTTPS URL." #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "прескакање распоређивања комплетних логова изградње: садржај лога је празан" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "прескакање распоређивања комплетних логова изградње: није омогућено у конфигурацији" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "прескакање изворног тарбала: {path}" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "srclibs недостаје име и/или @" #: ../fdroidserver/scanner.py msgid "static library" msgstr "статичка библиотека" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "достављени референтни бинарни фајл има дозвољеног потписника {signer}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "следећи аргументи су обавезни: %s" #: ../fdroidserver/install.py msgid "true" msgstr "истина" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "неочекивана опција стринг: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "непознат парсер %(parser_name)r (избори: %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "непрепознати аргументи: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "небезбедне дозволе на '{config_file}' (требало би да буду 0600)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "употреба: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "користећи Apache libcloud за синхронизацију са {url}" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com ограничава брзину, чекање на поновни покушај..." #: ../fdroidserver/install.py msgid "yes" msgstr "да" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "{0} апликација, {1} кључних алијаса" msgstr[1] "{0} апликације, {1} кључних алијаса" msgstr[2] "{0} апликација, {1} кључних алијаса" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) нема метаподатке!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "{apkfilename}'s AndroidManifest.xml има лош датум: " #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} нема име! Користи се ID апликације уместо тога." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "{appid} из {path} није важећи Android ID апликације!" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "{appid} из {path} није важеће име Java пакета!" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "{appid} има и APK-ове и фајлове: {files}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "{appid} недостаје {name}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "{appid}: Непознати extlib {path} у изградњи '{versionName}'" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "{appid}: нису наведене изградње, ради се на тренутном изворном стању" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "{appid}: {field} мора бити '{type}', али је '{fieldtype}!'" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "{appid}: {field} мора бити '{type}', али је '{fieldtype}'!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "{build_flag} мора бити цео број, пронађено: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "{build_flag} мора бити листа или стринг, пронађено: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "{file} је празан или оштећен!" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" не постоји! Проверите \"config.yml\"." #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "{path} већ постоји, игноришем резултате увоза!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "{path} не постоји! Направите га покретањем:" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "{path} има лош потпис датотеке \"{pattern}\", могући Janus експлоат!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} је означен од стране virustotal {count} пута:" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "{path} има погрешан отисак прста ({fingerprint})!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "{path} није \"кључ: вредност\" речник, већ {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "{path} није стандардни конфигурациони фајл!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "{path} није листа, већ {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "{path} није {expected_type}, већ {datatype}!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "{path} је нулте величине!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "{path} је већи од 200MB, ручно отпремите: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "{path}: \"{code}\" није важећи ISO_3166-1 alpha-2 код државе!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "{path}: {error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "{url} се не завршава са \"fdroid\", проверите URL путању!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "{url} не почиње са \"http\"!" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "{} изградња није успела" msgstr[1] "{} изградње нису успеле" msgstr[2] "{} изградњи није успело" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "{} изградња је успела" msgstr[1] "{} изградње су успеле" msgstr[2] "{} изградњи је успело" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/sv/0000755000175000017500000000000014770510164014613 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/sv/LC_MESSAGES/0000755000175000017500000000000014770510164016400 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/sv/LC_MESSAGES/fdroidserver.po0000644000175000017500000020413114770507747021454 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Hans-Christoph Steiner , 2020. # Elias Mårtenson , 2021. # Joel A , 2021. # Kristoffer Grundström , 2021, 2024, 2025. # "P.O" , 2023. # Marcus skoding , 2025. msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.0-95-gd7af22b\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2025-03-17 21:44+0000\n" "Last-Translator: Kristoffer Grundström \n" "Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.11-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "Offentlig SSH-nyckel som ska användas som distributionsnyckel:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "{path} kodad för den hemliga variabeln DEBUG_KEYSTORE:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" har ingen matchande meta-datafil!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "\"local_copy_dir\" {path} finns inte!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "'{apkfilename}' är redan installerad i {dev}." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "\"{path}\" innehåller senaste {name} ({version})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "\"{path}\" existerar, men s3cmd är inte installerat!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "\"{path}\" är inte ett filformat som stöds (använd: metadata/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "\"{path}\" är signerad av en nyckel som inte är tillåten:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" är inte en giltig URL!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: fel: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "%d APK:er kunde inte signeras eller verifieras!" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d problem hittades" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%r kan inte kallas" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "%s producerade inte en dict!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "%s har felaktig SHA-256: %s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s är inte ett acceptabelt byggnationsfält" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' hittades inte i config.yml!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "'keystore' är NONE och 'smartcardoptions' är tomt!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "'keystore' hittades inte i config.yml!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "'keystorepass' hittades inte i config.yml!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' hittades inte i config.yml!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "'sdk_path' är inte inställt i config.yml!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "{aapt} är för gammal, fdroid kräver build-tools-{version} eller nyare!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "Misslyckades med att köra '{path}'!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' är inte ett giltigt {field} i {appid}. Regex-mönster: {pattern}" #: ../fdroidserver/metadata.py #, fuzzy, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' är inte ett giltigt {field} i {appid}. Regex-mönster: {pattern}" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() angavs inte" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "/issues saknas" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "En URL krävs som ett argument!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "AAR-bibliotek för Android" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "Android APK-fil" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "DEX-kod för Android" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "Trasig symlink: {path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "Bygg ett paket från källa" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Kan inte skriva om \"{path}\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Kontrollera efter uppdateringar av appar" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "Kommandot '%s' känns inte igen.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "Skicka in ändringar" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "Kunde inte hitta paketets ID" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Creating empty {config_file}" msgstr "Läser '{config_file}'" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "Ta bort APKs och/eller OBBs utan metadata från förråd" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "Tar bort okänd fil: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "FEL: %(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "Extrahera signaturer från APK:er" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Förbjudna HTML-taggar" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "Installera byggda paket på enheter" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "Installerar %s..." #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "Interagera med förrådets HTTP-servern" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "Ogiltig APK" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "JAR-file för Java" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "Ingen information hittades." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "Inga paket angavs" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "Inga taggar hittades" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "Inget att göra" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "Behandlar {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "Starta snabbt ett nytt förråd" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "Läs alla metadatafiler och avsluta" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "Läser '{config_file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Tar bort angivna filer" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "Tar bort {path}''" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "Byt namn på APK-filer som inte matchar paket.namn_123.apk" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Skriv om alla metadatafiler" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "Skriver om '{appid}'" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "Skanna källkoden för ett paket" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "Signera och placera paket i förrådet" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "Signera index som har skapats med att använda update --nosign" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "Hoppar över {appid}: avstängd" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "Okänt undantag hittades!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Uppdatera förrådinformation för nya paket" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "Uppdatera binärens genomskinliga logg för en URL" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "Använder JAR-signatur" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Giltiga kommandon är:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "Verifiera integriteten hos de nedladdade paketen" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Visa varningar vid möjliga metadatafel" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "ZIP-filarkiv" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "tvetydigt alternativ: %(option)s kunde motsvara %(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "kan inte öppna '%(filename)s': %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "klonar {url}" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "skapade {path}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "tar bort: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "hämtar '{}'" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "ett argument förväntades" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "gzip-filarkiv" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "ingen APK tillhandahölls" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" msgstr "Alternativ" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "skriver över befintlig {path}" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "positionella argument" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "delat bibliotek" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "visa det här hjälpmeddelandet och avsluta" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "statiskt bibliotek" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "följande argument krävs: %s" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "oväntad alternativ-sträng: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "argumenten känns inte igen: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "o-säkra behörigheter på '{config_file}' (borde vara 0600)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "användning: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "ja" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename}{appid} har ingen metadata!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "{appid}saknas {name}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "{path} is not a standard config file!" msgstr "'sdk_path' är inte inställt i config.yml!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "{path}: {error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "" msgstr[1] "" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/sw/0000755000175000017500000000000014770510164014614 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/sw/LC_MESSAGES/0000755000175000017500000000000014770510164016401 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/sw/LC_MESSAGES/fdroidserver.po0000644000175000017500000026114014770507747021460 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Test Account , 2024. # abelbiwott-dev , 2024. # paul mayero , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.3a1\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2024-09-08 11:09+0000\n" "Last-Translator: abelbiwott-dev \n" "Language-Team: Swahili \n" "Language: sw\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.8-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "Kitufe cha umma cha SSH kitatumika kama ufunguo wa kupeleka:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "{path} iliyosimbwa kwa utofauti wa siri wa DEBUG_KEYSTORE:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" haina faili ya metadata inayolingana!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "\"local_copy_dir\" {path} haipo!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "Tayari \"{apkfilename}\" imesakinishwa kwenye {dev}." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "\"{path}\" ina {name} ({version}) ya hivi majuzi" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "\"{path}\" ipo lakini s3cmd haijasakinishwa!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "\"{path}\" si muundo wa faili inayokubalika (tumia: metadata/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "\"{path}\" imetiwa saini na ufunguo ambao hauruhusiwi:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" si URL halali!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: kasoro: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "APK %d hazijatiwa saini au kuthibitishwa!" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d matatizo yamepatikana" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%r haiwezi kuitwa" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "%s haikutoa \"dict\"!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "%s ina SHA-256 mbaya: %s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s sio sehemu ya kujenga inayokubalika" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' haipatikani kwenye config.yml!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "'keystore' HAKUNA na 'smartcardoptions' ni tupu!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "'keystore' haipatikani kwenye config.yml!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "'keystorepass' haipatikani kwenye config.yml!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' haipatikani kwenye config.yml!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "\"required\" ni hoja batili kwa vipengee vya nafasi" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "'sdk_path' haijawekwa kwenye config.yml!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' ni ya zamani sana, fdroid inahitaji zana za kujenga-{version} au mpya!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "{path} imeshindwa kutekeleza!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' ina muundo batili, inapaswa kuwa kamusi!" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' si {field} halali katika {appid}. Muundo wa regex: {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' si {field} halali, inapaswa kuwa {pattern}" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...sasisho la ukaguzi limeshindwa la{appid} : {error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() haijafafanuliwa" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "/issues haipo" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "URL inahitajika kama hoja!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "Sahihi za APK zina vyeti tofauti katika {path}:" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "Ongeza saini za PGP kwa kutumia GnuPG kwa vifurushi kwenye ghala" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "Ongeza kitufe cha kusaini ghala kwenye ghala ambayo haijatiwa saini" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "Ongeza faili za metadata za kiunzi za APK ambazo hazina" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "Kuongeza ghala mpya kwa {name} pekee" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "Lakabu la ufunguo wa kusaini ghala kwenye duka la vitufe" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "AllowedAPKSigningKeys haipo lakini binari ya marejeleo imewasilishwa" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "Inaruhusu marekebisho tofauti (au tawi la git) litajwe kwa uagizaji wa awali" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "Pia onyesha sehemu kamili ya kumbukumbu" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "Pia onya kuhusu masuala ya uumbizaji, kama rewritemeta -l" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "Maktaba ya Android AAR" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "faili ya APK ya Android" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "Msimbo wa DEX ya Android" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "SDK ya Android haipatikani katika {path}!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "Njia ya SDK ya android {path} haipo!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "Njia ya SDK ya Android {path} sio saraka!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "Zana ya SDK ya Android {cmd} haijapatikana!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Apu ina Binari lakini haina AllowedAPKSigningKeys zinazolingana ili kubandika cheti." #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "Apu ina NoSourceSince au ArchivePolicy \"matoleo 0\" au 0 lakini AutoUpdateMode au UpdateCheckMode sio Hakuna" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "Apu iko katika {repo} lakini ina kiungo cha {url}" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Toleo la Apu ina binari lakini haina AllowedAPKSigningKeys inayolingana ili kubandika cheti." #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "Kuambata .git sio lazima" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "Kuhifadhi {apkfilename} yenye saini batili!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode na UpdateCheckMode: HTTP lazima iwe na mpangilio." #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "Aina mbaya ya ingizo \"{mirrortype}\" katika usanidi wa vioo: {mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "URL ya msingi ya kioo, inaweza kujumuisha ufunguo wa saini ya faharasa kwa kutumia mfuatano wa saili: ?fingerprint=" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "Tawi '{branch}' limetumika kupeleka katika ujenzi wa '{versionName}'" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "Tawi {branch} linalotumika kama commit katika srclib '{srclib}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "symlink iliyovunjika: {path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "Unda kifurushi kutoka kwa chanzo" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "Jenga apu zote zinazopatikana" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "Jenga linalotokana na `fdroid import` - ondoa laini ya kulemaza mara tu ikiwa tayari" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "Jenga ghala ya metadata ya git ina mabadiliko ambayo hayajahifadhiwa!" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "Jenga toleo la karibuni pekee la kila kifurishi" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "Imejenga ghala yenye msingi katika \"%s\" na usanidi huu:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "Haiwezi kusasisha apu kiotomatiki ikiwa haina CurrentVersionCode" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Haiwezi kujenga kutokana na kosa la {} wakati wa uchanganuzi" msgstr[1] "Haiwezi kujenga kutokana na makosa ya {} wakati wa uchanganuzi" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Haiwezi kuandika upya \"{path}\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "Makundi ‘%s’ sio halali" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "Makundi hayajawekwa" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "Makundi \"{category}\" yamefafanuliwa lakini haitumiki kwa apu yoyote!" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Angalia masasisho ya programu" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "Kuangalia uhifadhi kwa {appid} - apks:{integer}, keepversions: {keep}, archapks: {arch}" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Sasisho safi - usitumie cache, chakata tena APK zote" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Orodha ya makundi iliyotenganishwa kwa koma." #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "Amri '%s' haitambuliki.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "Fanya mabadiliko" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "Ukinzani kati ya ufafanuzi wa \"{field}\" kati ya .yml na faili zilizojanibishwa:" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Hoja zinazokinzana: '--verbose' na '--quiet' haiwezi kubainishwa kwa wakati mmoja." #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "Haikuweza kupata '{command}' kwenya mfumo wako" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Haikuweza kupata msimbo wa toleo wa hivi karibuni" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Haikuweza kupata jina la toleo la hivi karibuni" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "Haikuweza kupata {path} ili kuiondoa" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "Haikuweza kufungua APK {path} kwa uchambuzi: " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Haikuweza kuchanganua ukubwa \"{size}\", aina isiyo sahihi \"{type}\"" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Haikuweza kupata Kitambulisho cha apu" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "Haikuweza kupata habari yoyote ya toleo" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "Haikuweza kupata kitambulisho cha kifurushi" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "Kwa uoga inakataa kuandika upya usanidi wa ufunguo wa saini uliopo!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "Imeunda kontena mpya \"{name}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Kuunda \"{path}\" kwa ajili ya kusanidi s3cmd." #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Creating empty {config_file}" msgstr "Kusoma '{config_file}'" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Inaunda saraka ya kumbukumbu" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "Inaunda ndoo mpya ya S3: {url}" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "Inaunda saraka ya pato" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "Inaunda kielezo kilichotiwa sahihi na ufunguo huu (SHA256):" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "Inaunda saraka ya muda mfupi" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "Inaunda kielezo isiyotiwa sahihi kwa maandalizi ya kutiwa sahihi" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "CurrentVersionCode {cv} ni chini kuliko kuingia ya ujenzi wa zamani {versionCode}" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "DEBUG_KEYSTORE haijawekwa au thamani yake haijakamilika" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "Futa APK na/au OBB bila metadata kutoka kwa ghala" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "Kufuta kumbukumbu, ghala ni kubwa mno ({size} upeo {limit})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "Kufuta historia ya git-mirror, ghala ni kubwa mno ({size} upeo {limit})" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "Kufuta faili isiyojulikana: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "Maelezo %s ni muhtasari ya apu tu" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "Maelezo ina mstari wa nakala" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "Maelezo ya urefu {length} iko juu ya {limit} kikomo cha char" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "Je, ulimaanisha config/{name}.yml?" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "Je, ulimaanisha {code}?" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "Usiongeze 'disable:' kwa maingizo ya kujenga yaliyotokana nayo" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "Usipeleke faili mpya kwenye ghala" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "Usijumuishe \"{path}\" katika URL!" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "Usiulize kuhusu njia ya SDK ya Android, feli tu" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "Usiondoe funguo za kibinafsi zilizotokana na keystore" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "Usiunde tarball ya chanzo, muhimu wakati wa kujaribu jengo" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "Usionyeshe upya ghala hio, muhimu wakati wa kujaribu jengo isiyo na muunganisho wa mtandao" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "Usitumie rsync checksums" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Pakua vioo kamili vya maghala madogo" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Kupakua ghala hio tayari imefeli mara moja, haijaribu tena." #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "Kupakua {url} kulifeli. {error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "Nakala ingine ya tamko la kipengele kisichopendelewa katika {path} ilipuuzwa!" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "Nakala ingine ya kuingia \"%s\" katika vioo vya usanidi!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "Nakala ingine ya kiungo katika '{field}': {url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "HITILAFU: %(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "HITILAFU: Amri ndogo ya \"server\" imetolewa, tumia \"deploy\"!" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "HITILAFU: aina ya CI isiyoungwa mkono, marekebisho yanakaribishwa!" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "HITILAFU: mwenyeji wa git isiyoungwa mkono \"%s\", marekebisho yanakaribishwa!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "Usimbaji umewekwa kwa '{enc}' fdroid yaweza kupata matatizo ya usimbaji. Tafadhali iweke kwenye 'UTF-8' kwa matokeo bora." #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" "Ingiza njia ya SDK ya Android (%s) hapa:\n" "> " #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "Vigezo vya mazingira {var} kutoka {configname} haijawekwa!" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "Vigezo vya mazingira {var} kutoka {configname} haijawekwa!" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "Kuna hitilafu wakati wa kupata anwani ya ghala" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "Ondoka na msimbo usio wa sufuri ikiwa matatizo yalipatikana" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "Pata metadata ya apu kutoka kwa ghala ya chanzo" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "Pata sahihi kutoka kwa APKs" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "Imeshindwa kunakili {path}:{error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "Imeshindwa kupakua sahihi za '{apkfilename}':{error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "Imeshindwa kusoma {path}: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "Imeshindwa kubadilisha ukubwa {path}: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "Imeshindwa kuunda ndoo ya S3: {url}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "Imeshindwa kupata maelezo ya APK, kufuta {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "Imeshindwa kupata maelezo ya APK. inaruka {path}" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "Imeshindwa kupata alama ya kidole ya ufunguo wa kusaini APK" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "Imeshindwa kusimika '{apkfilename}' kwenye {dev}: {error}" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "Imeshindwa kusaini apu" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "buildserverid imepakiwa kutoka kwa VM: {buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "Saini zimepakiwa kwa '{apkfilename}' -> '{sigdir}'" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "Faili ilipotea wakati wa kuichakata: {path}" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "Imekamilika" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Tagi za HTML zilizokatazwa" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "Kulazimisha ujenzi wa apu zilizozimwa, na kuendelea bila kujali matatizo ya uchanganuzi. Inaruhusiwa tu katika hali ya majaribio." #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "Kulazimisha kusitisha ujenzi baada ya muda wa sekunde {0} kumalizika!" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "Kulazimisha kuchanganua kwa apu zilizozimwa na kujenga." #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "Imepata mchoro wa \"{path}\" bila metadata kwa apu \"{name}\"!" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "Imepata faili ya fedha mbaya \"{path}\" ya \"{name}\":" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "Imepata appids batili katika hoja" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "Ilipata versionCodes batili katika baadhi ya apu" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "Imepata faili nyingi za JAR Signature Block katika {path}" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "Imepata Vyeti vingi vya Signer!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "Imepata faili nyingi za metadata kwa {appid}" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "Imepata vyeti vingi vya kusaini ya ghala." #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "Haikupata vyeti vyovyote vya kusaini ya ghala." #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "Imepata kitu kisicho faili katika %s" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "Imepata {apkfilename} katika {url}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "Imepata matatizo ya {count} katika {filename}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "Imepata onyo {count} katika {filename}" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "Imeunda metadata ya kiunzi kwa {appid}" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "Git toa ya '%s' ilishindwa" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "Git clean imeshindwa" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "Git fetch imeshindwa" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Git remote set-head imeshindwa: \"%s\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Git reset imeshindwa" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "Git submodule deinit imefeli" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "Git Submodule sync imefeli" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "Git submodule update imefeli" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "HTTPS lazima zitumike na URL za Subversion!" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "Ikiwa kioo cha git kinakua kikubwa, ruhusu kumbukumbu ifutwe" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "Ikiwa kupakia hii inafeli, jaribu kupakia mwenyewe kwa {url}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "Inapuuza '{field}' katika metadata ya '{metapath}' kwa sababu imepitwa na wakati." #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "Inapuuza ingizo la FUNDING.yml iliyo ndefu kuliko 2048: %s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "Inapuuza kipengele kibaya katika manifest: %s" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "{oldfile} imewacha kutumika, tumia {newfile}" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Inapuuza kifurushi kisicho na metadata: " #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "Inapuuza data ya cache isiyo na maana kwa {apkfilename}" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "Jumuisha APK ambazo zimesainiwa na algoriti zilizozimwa kama MD5" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "Jumuisha faili za sahihi za PGP .asc kwenye kioo" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "Jumuisha logi za ujenzi kwenye kioo" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "Jumuisha tarballs za chanzo kwenye kioo" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "Inajumuisha metadata kutoka %s@%s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "Inajumuisha metadata kutoka {path}" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "Kuanzisha submodules" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "Simika apu zote zilizosainiwa zinazopatikana" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "Sakinisha vifurushi kwenye vifaa" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "Inasimika %s..." #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "Inasimika '{apkfilename}' kwenye {dev}..." #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "Wasiliana na seva ya ghala ya HTTP" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "APK batili" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "AutoUpdateMode batili: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "UpdateCheckMode batili: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "VercodeOperation batili: {field}" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "VercodeOperation batili: {invalid_ops}" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "Kitambulisho batili cha apu {appid}" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Orodha ya vitone batili" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "Jina batili kwa faili zilizochapishwa: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "ndk batili: ingizo la jenga: \"{ndk}\"" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "Elekezo mpya batili kwa non-HTTPS:{before} -> {after} " #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "metadata ya scrlib batili: '{file}' haipo" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "Metadata ya srclib batili: haikuweza kuchambua '{file}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "Metadata batili ya srclib: ufunguo usiojulikana '{key}' katika '{file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "Uthibitisho wa sahihi wa JAR ulishindwa: {path}" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "Sahihi ya JAR imethibitishwa: {path}" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "Faili ya JAR ya Java" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "JDK ya Java haijapatikana! Simika katika sehemu ya kiwango au seti java_paths!" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "Darasa lililokusanywa la Java" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "jarsigner ya Java haijapatikana! Simika katika sehemu ya kawaida au seti java_paths!" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "Javascript katika sifa za HTML src" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "Kuweka jenga zilizofeli \"{apkfilename}\"" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "Hifadhi ya ufunguo ya kusaini ufunguo:\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "Ufunguo wa utatuzi unaojulikana inatumika kwa AllowedAPKSigningKeys: " #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "Mabadiliko ya mwisho yaliyotumika ya '{commit}' yanafanana na tagi, lakini UpdateCheckMode ni '{ucm}'" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "Njia za mchango ya Liberapay ipo ndani ya Liberapay: field" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "Orodhesha faili ambazo zitarekebishwa muundo (dry run)" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "Eneo limejumuishwa katika URL ya f-droid.org" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "Fanya ujenzi kuacha kwa ubaguzi" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "Vioo vya ghala yenye umbo mbovu." #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "Laini ya serverwebroot yenye umbo bovu:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "Upeo wa kina cha urejeshaji katika faili ya ZIP umefikiwa: %s" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Akisi ghala mzima na uhifadhi, aina zote za faili." #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "Saraka ya pato haipo" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "Inasongesha tamko la Anti-Features hadi kwa faili zilizolocaliziwa:" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "Si \"repo_pubkey\" wala \"keystorepass\" iliyowekwa kwenye config.yml" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "Hakuna APK ya kifurushi: %s" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "Hakuna SDK ya Android Iliyopatikana!" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "Hakuna vifaa vilivyoambatanishwa vimepatikana" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "Hakuna alama ya kidole kwenye URL." #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "Hakuna submodule za git inayopatikana" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "Hakuna mradi wa gradle imeweza kupatikana. Bainisha --subdir?" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "Hakuna taarifa imepatikana." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "Hakuna tagi zimepatikana zinazolingana" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "Hakuna toleo la chini zaidi la SDK limepatikana katika {0}, kutumia chaguo-msingi (3)." #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "Hakuna haja ya kubainisha kuwa apu ni apu Huru" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "Hiana haja ya kubainisha kuwa apu hio ni ya Android" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "Hakuna chaguo lililowekwa! Hariri config.yml iweke angalau moja ya hizi:" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "Hakuna vifurishi vilivyobainishwa" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "Hakuna APK iliyosainiwa inayopatikana ya %s" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "Hakuna saraka la pato lililosainiwa - hakuna cha kufanya" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "Hakuna vyeti vya kusaini vimepatikana katika {path}" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "Hakuna kifurushi kama vile: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "Hakuna versionCode kama hio {versionCode} kwa apu {appid}" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "Hakuna vishikozo vilivyopatikana" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "Hakuna saraka isiyotiwa saini - hakuna la kufanya" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "Hakuna taarifa ya toleo iliyoweza kupatikana." #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "Sio ufafanuzi halali wa ukubwa: \"{}\"" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "Hakuna la kufanya" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "Hakuna la kufanya kwa {appid}." #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "Sasa seti hizi katika config.yml:" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "Faili ya OBB ina versionCode mpya ({integer}) kuliko APK yoyote:" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "Jina la faili ya OBB lazima ianze na \"main.\" au \"patch.\":" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "Jina la kifurushi cha OBB hailingani na APK inayoungwa mkono:" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Machini iliyo nje ya mtandao, inapuuza uundaji wa kioo cha git mpaka 'fdroid deploy'" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "PNG na JPEG pekee zinakubalika katika mchoro, zimepata: {path}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "Chakata apu zilizo na masasisho ya kiotomatiki pekee" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Njia za Mchango wa OpenCollective inapatikana kwenye OpenCollective: uwanja" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Toa ripoti ya JSON kwa faili iliyopewa jina la APK." #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "Toa JSON kwa stdout." #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "Kuzalisha JSON" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "Leseni ya jumla ya mradi ." #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "Kubatilisha toleo la jina tupu katika {apkfilename} kutoka kwa metadata: {version}" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "Kifurushi \"{appid}\" tayari kipo" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "Kuchambua manifest katika '{path}'" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "Nenosiri linahitajika pamoja na jina la mtumiaji" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "Ielekeze kwenye saraka ndogo ya mradi kuu wa Android, ikiwa haipo kwenye mzizi." #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "Ielekeze kwa SDK ya Android (mara nyingine husetiwa katika ANDROID_HOME)" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "Ielekeze kwa ghala ya git ili kutumia kama logi" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "Ielekeze kwa keystore kwa ufunguo wa kusaini ghala" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Chapisha kigezo hicho cha siri kwa kidirisha cha amri kwa urahisi wa kunakili/kubandika" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "Tatizo na faili ya ZIP:%s, hitilafu %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "Tatiza na xml katika '{path}'" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "Chakata masasisho ya kiotomatiki" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "Kuchakata {apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "Kuchakata {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "Chakata XML/JSON inayosomeka na binadamu kwa faili za index" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "URL ya Mradi wa kuagiza kutoka." #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "Uakifishaji unapaswa kuepukwa" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "Sukuma logi hio kwa ghala hili la mbali la git" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "Kusukuma logi ya uwazi ya binari kwa {url}" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "Kusukuma kwa seva ya mbali imefeli!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "Kusukuma kwa {url}" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "Anzisha ghala mpya kwa haraka" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "Soma faili zote za metadata na uondoke" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "Kusoma '{config_file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "Kusoma packageName/versionCode/versionName ilifeli, APK batili: '{apkfilename}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "Kusoma packageName/versionCode/versionName ilifeli,APK batili: '{apkfilename}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "Kusoma {apkfilename} kutoka kwa hifadhi ya muda" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Onyesha upya na uweke kwenye hifadhi ya muda kanuni za skana na sahihi kutoka kwenye mtandao" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Kuondoa faili zilizobainishwa" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "Kuondoa {path}\"" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "Badilisha jina la faili za APK ambazo hazilingani na package.name_123.apk" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "Saini upya {apkfilename} kwa debug.keystore ulizopewa" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "Badilisha ukubwa wa ikoni zote zinazopita saizi kubwa ya pixel kisha uondoke" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "Zuia pato iwe onyo na hitilafu" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Andika upya faili zote za metadata" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "Kuandika upya '{appid}'" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "Endesha kwenye ghala la git ambalo lina mabadiliko yasiyohifadhiwa" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "Tekeleza rewritemeta ili kurekebisha uumbizaji" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "Kutekeleza pasi ya kwanza na kuangalia kwa MD5 ikiwa imezimwa" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "Kuendesha wget katika {path}" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "SHA-256 ya {url} hailingani ingizo!" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "Changanua APK zilizotokana na mchakato kwa madarasa yasiyo huru yanayojulikana." #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "Changanua msimbo chanzo cha kifurushi" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "Skena imepata matatizo {count} katika {apk}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "Skena imepata matatizo {count} katika {appid}:" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "Skena imepata matatizo {count} katika {appid}:{versionCode}:" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "Skena imepata tatizo {}" msgstr[1] "Skena zimepata matatizo {}" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "Kuchanganua APK kwa kutumia dexdump kwa madarasa yanayojulikana kuwa si huru." #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "Seti {release} ya NDK ( {version}) iwe juu" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "Weka saa kwa wakati huo ukitumia:" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "Weka idadi ya juu ya matoleo katika ghala kabla zile mzee zimehifadhiwa kwenye kumbukumbu" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "Weka kikomo cha faili iliyo wazi kwa {integer}" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "Sanidisha ujenzi wa apu kwa ajili ya ghala la ujenzi wa usiku" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "Weka kikomo cha faili iliyo wazi imefeli: " #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "Kuweka muda wa sekunde {0} kwa ajili ya ujenzi huu" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "Saini na uweke vifurushi kwenye ghala" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "Saini faharasa zilizoundwa kwa kutumia sasisho --nosign" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "Ruka kuchanganua msimbo wa chanzo kwa binari na tatizo zingine" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "Kuruka '{apkfilename}' iliyo na saini batili!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "Kuruka kioo cha GitLab Pages kwa sababu ghala ni kubwa mno (>%.2fGB)!" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "Inaruka uzalishaji wa faharasa kwa {appid}" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "Inaruka {apkfilename} yenye saini batili!" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "Inaruka {appid}: Imezimwa" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "Bainisha folda ya ndani ya kusawazisha hio ghala kwa" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "Bainisha faili ya kutambuliwa ili kutoa kwa SSH kwa ajili ya kusawazisha tena" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "Bainisha ni faili ya ufunguo wa debug wa kijaribio kutumia." #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "Toa habari hata zaidi ya kawaida" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "Kuondoa saini ya siri kutoka {apkfilename}" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "Muhtasari '%s' ni jina tu ya apu hio" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "Muhtasari wa urefu {length} ni juu ya {limit} kikomo cha char" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "Saa ya mfumo ni mzee kuliko tarehe katika {path}!" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "Modi ya sasisho la tagi inafanya kazi tu kwa ghala za git,hg, bzr na git-svn kwa sasa" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "Hali ya usasisho ya tagi imetumika katika git-svn, lakini ghala haikusetiwa kwa kutumia tagi" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Hali ya majaribio - weka pato kwenye saraka ya tmp pekee, na uunde kila mara, hata kama pato tayari ipo." #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "Msimbo wa toleo la OBB lazima ije baada ya \"{name}.\":" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "URL ya msingi kwa ghala hio kuweka kwenye logi (default: https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "Saraka ya kuandika kioo hicho kwa" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "Faili hio ya kujumuishwa kwenye ghala (path or glob)" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "Alama ya kidole ya ghala hailingani." #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "Saraka ya mzizi ya local_copy_dir \"{path}\" haipo!" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "Kuna mgongano wa keyalias - uchapishaji umesitishwa" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "Hizi ndizo apu zilizohifadhiwa kwenye kumbukumbu kutoka kwa ghala kuu." #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "Amri hii haipaswi kamwe kutumika kuakisa f-droid.org! Nakala mzima inahitaji juu ya 600GB." #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "Hii ni ghala ya apu ya kutumika na F-Droid. Apu katika ghala hii ni binaries rasmi zilizojengwa na wasanidi wa asili wa apu, au binaires zilizoundwa kutoka kwa chanzo na admin ya f-droid.org kutumia vifaa kwenye https://gitlab.com/fdroid." #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "Ghala hii tayari in metadata ya ndani: %s" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" "Ili kumaliza unsanidi huo, ongeza APK zako kwa \"%s\"\n" "kisha kimbiza \"fdroid update -c; fdroid update\". Unawezataka pia kuhariri\n" "\"config.yml\" ili kuseti URL, jina ya ghala, na zaidi. Unapaswa pia kusanidi\n" "ufunguo wa kusaini (ya muda unawezakua umezalishwa kiotomatiki).\n" "\n" "Kwa maelezo zaidi: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "na https://f-droid.org/docs/Signing_Process" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "Ili kutumia awsbucket, awssecretkey na awsaccesskeiid lazima pia iwekwe katika config.yml!" #: ../fdroidserver/deploy.py #, fuzzy msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "Ili kutumia awsbucket, awssecretkey na awsaccesskeiid lazima pia iwekwe katika config.yml!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "URL lazima ianze na https:// or http://" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "Vifupishaji vya URL havipaswi kutumika" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "URL {url} katika Maelezo:{error}" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "tagi ya leseni lisilotarajiwa \"{}\"! Tumia pekee tagi zilizoidhinishwa na FSF au OSI kutoka https://spdx.org/license-list" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "tagi ya leseni isiyotarajiwa \"{}\"! Tumia pekee tagi za leseni zilizosanidiwa katika faili yako ya usanidi" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "ingilio lisilojulikana {key} katika {configname}" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "Kighairi kisichojulikana kimepatikana!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "Faili isiyojulikana '{filename}' katika jenga '{versionName}'" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "Muundo wa metadata usiojulikana: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "Muundo wa metadata usiojulikana: {path} (tumia: *.yml)" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "Toleo lisilojulikana la aapt, linaweza kuleta matatizo: " #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "Nafasi ya mwanzo isiyo ya lazima" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "Nafasi ya mwisho isiyo ya lazima" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "Nafasi ya apu isiyotambulika '{fieldname}' katika '{path}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Bendera ya kujenga isiyotambulika '{build_flag}' katika '{path}'" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "Aina ya faili isiyoungwa mkono \"{extension}\" kwa ghala la mchoro" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "Faili ya michoro isiyoungwa mkono imepatikana: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "extlib isiyotumika katika %s" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "Faili lisilotumika katika %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "Njia ya scandelete isiyotumika: %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "Njia ya scanignore isiyotumika: %s" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Sasisha maelezo ya repo kwa vifurushi vipya" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "Sasisha logi ya uwazi ya binary kwa URL" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData ina URL batili: {url}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "UpdateCheckData lazima ilingane na msimbo wa toleo kama nambari kamili (\\d or [0-9]): {codeex}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "UpdateCheckData lazima itumie URL ya HTTPS: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "UpdateCheckData si URL iliyo halali: {url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode imewekwa lakini inaonekana kama checkupdates haijaendeshwa bado." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName imewekwa katika kitambulisho cha apu kinachojulikana, inaweza kutolewa" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "Kupakia {apkfilename} kwa androidobservatory.org" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "Kupakia {apkfilename} kwa virustotal" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Tumia /HEAD badala ya /master au /main kuashiria faili kwenye tawi la msingi" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Tumia `fdroid update -C` kuiunda." #: ../fdroidserver/build.py msgid "Use build server" msgstr "Tumia seva ya ujenzi" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "Tumia tarehe kutoka APK badala ya wakati uliopo kwa APK mpya zilizoongezwa" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "Kutumia \"{path}\" kusanidi s3cmd." #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "Kutumia \"{path}\" kusanidi s3cmd." #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "Kutumia Sahihi ya APK toleo la 2" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "Kutumia Sahihi ya APK toleo la 3" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "Kutumia saini ya JAR" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Kutumia jarsigner ya Java, haipendekezwi kwa kuthibitisha APK! Tumia apksigner" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "Kutumia kamusi tupu badala ya maudhui ya {path}!" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "Kutumia keystore iliyopo \"{path}\"" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "Kutumia s3cmd kusawazisha na: {url}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "Kutumia s3cmd kusawazisha na: {url}" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Amri halali ni:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "Thibitisha dhidi ya nakala iliyoakibishwa ndani afadhali kuliko kupakua upya." #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "Thibitisha uadilifu wa furushi zilizopakuliwa" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "Kuthibitisha saini ya faharasa:" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "Ufunguo wa API ya VirusTotal haiwezi kupakia faili zaidi ya 32MB, tumia {url} kupakia {path}." #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Onya kuhusu hitilafu ya metadata yanayoweza kutokea" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Ikiwa imesanidiwa kwa faharasa zilizosainiwa, unda pekee faharasa zisizosainiwa katika hatua hii" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "Wakati unapochambua msimbo wa ghala mzima yamllint inalemazwa kwa chaguo msingi. Chaguo hili linalazimisha yamllint bila kujali." #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "Wakati kusaini au kuthibitisha umefeli, toka na msimbo wa hitilafu." #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'Distinguished Name' inayotumika wakati wa kuzalisha funguo" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "Unaweza kutumia ANDROID_HOME kuseti njia ya SDK yako, kwa mfano:" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "kumbukumbu ya faili ya ZIP" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "Inaongeza IdentityFile kwa {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "Inaongeza kwa {name}: {path}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "chaguo lisiloeleweka: %(option)s linaweza kulingana na %(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "apksigner haijapatikana! Haiwezi kusaini au kutibitisha APK ya kisasa" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "apksigner haikupatikana, inahitajika kwa ajili ya kusaini!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "Kitambulisho cha apu cha faili kufanyia kazi" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "Kitambulisho cha apu yenye versionCode iliyo ya hiari katika fomu APPID[:VERCODE]" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "archive_url inahitaji kumalizia na /archive" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "hoja \"-\" na modi %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "hoja %(argument_name)s: %(message)s" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "inajaribu uhusiano wa SSH ulio tupu ili kujaribu ufunguo wa kupeleka:" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "Haiwezi kuchanganua speci ya scrlib (sio kamba): '{}'" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "Haiwezi kufungua '%(filename)s':%(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "Haiwezi kufungua URL isiyo ya https: '{};" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "Haiwezi kupata srclibs inayohitajika: \"{path}\"" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "Haiwezi kuwa na hoja za subparser nyingi" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "Haiwezi kuunganisha vitendo - vikundi viwili vimepewa jina %r" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "Haiwezi kuchapisha sasisho, je, uliseti ufunguo wa kupeleka?" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "kukaririsha {url}" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "amri kutoka kwa kiunzi huru cha programu-jalizi:" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "kamba ya chaguo inayokinzana: %s" msgstr[1] "kamba za chaguo zinazokinzana: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "lakabu la subparser inayokinzana: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "subparser inayokinzana: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "haikuweza kuchanganua '{path}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "haikuweza kuchanganua specifisheni ya srclib (hakuna jina limebainishwa): '{}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "haikuweza kuchanganua specifisheni ya srclib (hakuna rejeleo limebainishwa): '{}'" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "iliunda {path}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "toleo la sasa ni jipya: old vercode={old}, new vercode={new}" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "kufuta: ghala/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "logi ya mchakato uliosambazwa {path} hadi {dest}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "dest= inahitajika kwa chaguo kama %r" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "Inapakua '{}'" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "Inapakua sahihi za skena kutoka '{}' imefeli" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "binari inayoweza kutekelezwa, ikiwezekana msimbo" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "hoja %s iliyotarajiwa" msgstr[1] "hoja %s zilizotarajiwa" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "ilitarajia angalau hoja moja" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "Imetarajiwa isiwe zaidi ya hoja moja" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "Ilitarajia hoja moja" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "fdroid [] [-h|--msaada|--toleo|]" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "Pakua toleo jipya zaidi za saini kutoka kwenye mtandao" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "lazimisha hitilafu za metadata (chaguo msingi) ziwe maonyo, au ziwe za kupuuzwa." #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "svn clone ya git ilifeli" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "kumbukumbu ya faili ya gzip" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "Ilipuuza hoja ya dhahiri %r" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1 lazima iwe na saini, tumia `fdroid signindex` kuiunda!" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 lazima iwe na saini, tumia `fdroid signindex` kuiunda!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "Thamani batili ya %(type)s: %(value)r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "chaguo iliyo batili: %(value)r (chagua kutoka %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "thamani ya conflict_resolution iliyo batili: %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "kamba ya chaguo iliyo batili %(option)r: lazima ianze na char %(prefix_chars)r" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "ipfs haikupatikana, inaruka kuzalisha CIDcv1" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "mbinu ya jenga ya hivi karibuni ni mpya zaidi: old vercode={old}, new vercode={new}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "local_copy_dir haikiwishi na \"fdroid\", labda ulimanisha: {path}" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "local_copy_dir lazima iwe njia kamili!" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "local_copy_dir lazima iwe saraka, si faili!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "kioo %s haikwishia na 'fdroid'!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "vioo vimesetiwa mara mbili, katika config.yml na {path}!" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "Hoja zinazokinzana lazima ziwe za hiari" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "sasisho ya cache Ijayo {name} inatakiwa katika {time}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "hakuna \"icon\" katika {appid}" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "hakuna APK iliyowasilishwa" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "hakuna maelezo ya toleo zimepatikana" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "haikubaliki na hoja %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "moja ya hoja %s inahitajika" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "inakubali pekee kamba, orodha, na jozi" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "uchaguzi" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "inaandika upya {path} iliyopo" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "hoja ya msimamo" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "Mchakato wa kupeleka kwa logi {path} kwa {dest} imefeli!" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "binari ya rejeleo inakosa saini" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "kataa kupakua kupitia muunganisho wa HTTP isiyo salama (tumia HTTPS au bainisha --no-https-check):{apkfilename}" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "repo_icon \"repo/icons/%s\" haipo, inazalisha kishika nafasi." #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "repo_url ina haja ya kuisha na /ghala" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "rsync inakosa au imevunjika: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd kusawazisha indexes {path} hadi {url} na kufuta" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "s3cmd kusawazisha indexes {path} hadi {url} na kufuta" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "cache ya skana in umbo bovu! Unaweza kufuta kwa: '{clear}'" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "serverwebroot: njia haikamiliki na \"fdroid\", labda ulimaanisha moja kati ya hizi:" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "maktaba inayoshirikishwa" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "onyesha ujumbe huu wa usaidizi na uondoke" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "APK iliyosainiwa, aidha file-path au HTTPS URL." #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "ruka kupeleka logi kamili za jenga: maudhui ya logi ni tupu" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "ruka kupeleka logi kamili za jenga: haijawezeshwa kwa config" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "inaruka tarball ya chanzo: {path}" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "srclibs inakosa jina na/au @" #: ../fdroidserver/scanner.py msgid "static library" msgstr "maktaba tuli" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "binari ya rejeleo lililowasilishwa imeruhusu signer {signer}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "hoja zifuatazo zinahitajika: %s" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "Chaguo lisilotarajiwa: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "kichanganuzi isiyojulikana %(parser_name)r (chaguo: %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "hoja zisizotambulika: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "ruhusa zisizo salama kwenye '{config_file}' (inapaswa kuwa 0600)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "matumizi: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "kutumia Apache libcloud kulandanisha na {url}" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com inapunguza kiwango, inangojea kujaribu tena..." #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "apu {0}, lakabu muhimu{1}" msgstr[1] "apu {0}, lakabu muhimu{1}" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) haina metadata!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "AndroidManifest.xml ya {apkfilename} ina tarehe mbaya: " #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} haina jina! Inatumia kitambulisho cha apu badala yake." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "{appid} kutoka {path} si kitambulisho halali cha apu ya Android!" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "{appid} kutoka {path} sio Jina halali la kifurushi cha Java!" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "{appid} ina vyote viwili APK pamoja na faili: {files}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "{appid} inakosa {name}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "{appid}: extlib isiyojulikana {path} katika jenga '{versionName}'" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "{appid}: hakuna jenga zilizobainishwa, inaendeshwa kwa hali ya sasa ya chanzo" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "{appid}: {field} lazima iwe '{type}', bali ni '{fieldtype}!'" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "{appid}: {field} lazima iwe '{type}', bali ni '{fieldtype}'!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "{build_flag} lazima iwe nambari kamili, imepatikana: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "{build_flag} lazima iwe orodha au kamba, imepatikana: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "{file} ni tupu au fisadi!" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" haipo! Angalia \"config.yml\"." #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "{path} tayari ipo, inapuuza matokeo ya uingizaji!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "{path} haipo! Iunde kwa kuendesha:" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "{path} ina saini mbaya ya faili \"{pattern}\", Uwezekano wa kunyonywa la Janus!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} imealamishwa na virustotal mara {count}:" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "{path} sio \"key: value\" dict, lakini ni {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "{path} sio faili ya usanidi ulio na kiwango!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "{path} sio orodha, lakini ni {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "{path} sio {expected_type}, lakini ni {datatype}!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "{path} ni saizi ya sifuri!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "{path} zaidi ya 200MB , pakia kwa mkono: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "{path}: \"{code}\" msimbo wa nchi ya ISO_3166-1 alpha-2 ni batili!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "{path}: {error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "{url} haimaliziki na \"fdroid\", angalia njia ya URL!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "{url} haianzi na \"http\"!" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "{} jenga imefeli" msgstr[1] "{} jenga zimefeli" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "{} jenga imefaulu" msgstr[1] "{} jenga zimefaulu" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/ta/0000755000175000017500000000000014770510164014567 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/ta/LC_MESSAGES/0000755000175000017500000000000014770510164016354 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/ta/LC_MESSAGES/fdroidserver.po0000644000175000017500000042347214770507747021443 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # K.B.Dharun Krishna , 2022. # Naveen , 2024. # தமிழ்நேரம் , 2024. # Hans-Christoph Steiner , 2025. msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.1-273-g54e84d87\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2025-01-20 14:04+0000\n" "Last-Translator: Hans-Christoph Steiner \n" "Language-Team: Tamil \n" "Language: ta\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.10-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "பாஓடு பொது விசை வரிசைப்படுத்தல் விசையாகப் பயன்படுத்தப்பட வேண்டும்:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "{path} பிழைத்திருத்த_கிச்டோர் ரகசிய மாறிக்குக் குறியாக்கம் செய்யப்பட்டுள்ளது:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" க்கு பொருந்தக்கூடிய மேனிலை தரவு கோப்பு இல்லை!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "\"local_copy_dir\" {path} இல்லை!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" ஏற்கனவே {dev} இல் நிறுவப்பட்டுள்ளது." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "\"{path}\" அண்மைக் கால {name} ({version})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "\"{path}\" உள்ளது, ஆனால் S3CMD நிறுவப்படவில்லை!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "\"{path}\" என்பது ஒரு உதவி கோப்பு வடிவம் அல்ல (பயன்பாடு: மெட்டாடேட்டா/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "\"{path}\" அனுமதிக்கப்படாத ஒரு விசையால் கையொப்பமிடப்பட்டுள்ளது:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" சரியான முகவரி அல்ல!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: பிழை: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "%d apks கையொப்பமிடவோ சரிபார்க்கவோ தோல்வியுற்றது!" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d சிக்கல்கள் காணப்படுகின்றன" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%r அழைக்க முடியாது" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "%s ஒரு கட்டளையை உருவாக்கவில்லை!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "%s மோசமான SHA-256: %s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s ஏற்றுக்கொள்ளப்பட்ட கட்டட புலம் அல்ல" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "config.yml இல் 'கீபாச்' காணப்படவில்லை!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "'கீச்டோர்' எதுவுமில்லை, 'அறிவுள்ள கார்டோப்சன்ச்' காலியாக உள்ளது!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "'கீச்டோர்' config.yml இல் காணப்படவில்லை!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "'கீச்டோர்பாச்' config.yml இல் காணப்படவில்லை!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "config.yml இல் 'ரெப்போ_காலியாச்' காணப்படவில்லை!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'தேவை' என்பது நிலைப்பாடுகளுக்கு தவறான வாதமாகும்" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "'sdk_path' config.yml இல் அமைக்கப்படவில்லை!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' மிகவும் பழையது, fdroid க்கு கட்டிய-கருவிகள்-{version} அல்லது புதியவை தேவை!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "'{path}' செயல்படுத்தத் தவறிவிட்டது!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' தவறான வடிவத்தைக் கொண்டுள்ளது, அது ஒரு அகராதியாக இருக்க வேண்டும்!" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' என்பது {appid} இல் செல்லுபடியாகும் {field} அல்ல. ரீசெக்ச் முறை: {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' என்பது செல்லுபடியாகும் {field} அல்ல, {pattern} ஆக இருக்க வேண்டும்" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "-மெர்ச்-கோருதல் ஒரு பயன்பாட்டில் மட்டுமே இயங்குகிறது!" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "... {appid}: {error} க்கு செக்அப்டேட் தோல்வியுற்றது" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__ அழைப்பு __ () வரையறுக்கப்படவில்லை" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "/சிக்கல்கள் இல்லை" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "ஒரு வாதமாக ஒரு முகவரி தேவை!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "APK கையொப்பங்கள் {path} இல் வெவ்வேறு சான்றிதழ்களைக் கொண்டுள்ளன:" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "ரெப்போவில் உள்ள தொகுப்புகளுக்கு GNUPG ஐப் பயன்படுத்தி PGP கையொப்பங்களைச் சேர்க்கவும்" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "கையொப்பமிடாத ரெப்போவுக்கு ரெப்போ கையொப்பமிடும் விசையைச் சேர்க்கவும்" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "காணாமல் போன APK களுக்கு எலும்புக்கூடு மேனிலை தரவு கோப்புகளைச் சேர்க்கவும்" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "புதிய ரெப்போவை {name} க்கு மட்டுமே சேர்ப்பது" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "கீச்டோரில் ரெப்போ கையொப்பமிடும் விசையின் மாற்றுப்பெயர்" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "Lentapcigningkeys காணவில்லை, ஆனால் குறிப்பு பைனரி வழங்கப்பட்டது" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "ஆரம்ப இறக்குமதிக்கு வேறு திருத்தம் (அல்லது அறிவிலி கிளை) குறிப்பிட அனுமதிக்கிறது" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "முழு காப்பக பகுதியையும் பிரதிபலிக்கிறது" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "மறுபயன்பாடு -எல் போன்ற சிக்கல்களை வடிவமைத்தல் பற்றியும் எச்சரிக்கவும்" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "ஆண்ட்ராய்டு AAR நூலகம்" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "ஆண்ட்ராய்டு APK கோப்பு" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "ஆண்ட்ராய்டு DEX குறியீடு" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "ஆண்ட்ராய்டு SDK {path} இல் காணப்படவில்லை!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "ஆண்ட்ராய்டு SDK பாதை '{path}' இல்லை!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "ஆண்ட்ராய்டு SDK பாதை '{path}' ஒரு அடைவு அல்ல!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "ஆண்ட்ராய்டு SDK கருவிகள் {cmd} கிடைக்கவில்லை!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "பயன்பாட்டில் பைனரிகள் உள்ளன, ஆனால் சான்றிதழுடன் தொடர்புடைய AllowedAPKSigningKeys இல்லை." #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "பயன்பாட்டில் Nosourcencence அல்லது காப்பகப் போலிசி \"0 பதிப்புகள்\" அல்லது 0 உள்ளது, ஆனால் ஆட்டோப்டேட்மோட் அல்லது புதுப்பிப்பு தொழில்நுட்பம் எதுவும் இல்லை" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "பயன்பாடு '{repo}' இல் உள்ளது, ஆனால் {url} க்கான இணைப்பைக் கொண்டுள்ளது" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "பயன்பாட்டு பதிப்பில் பைனரி உள்ளது, ஆனால் பின் சான்றிதழுடன் தொடர்புடைய AllowedAPKSigningKeys இல்லை." #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "சேர்ப்பது .git தேவையில்லை" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "தவறான கையொப்பத்துடன் காப்பக {apkfilename}!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "புதுப்பிப்பு தொழில்நுட்பம் கொண்ட ஆட்டோப்டேட்மோட்: HTTP ஒரு வடிவத்தைக் கொண்டிருக்க வேண்டும்." #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "எல்லா தூண்டுதல்களுக்கும் தானியங்கி இல்லை." #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "எல்லா தூண்டுதல்களுக்கும் தானியங்கி ஆம்." #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "கண்ணாடியில் \"{mirrortype}\" மோசமான நுழைவு வகை: {mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "அடிப்படை முகவரி கண்ணாடிக்கு, வினவல் சரம் பயன்படுத்தி குறியீட்டு கையொப்பமிடும் விசையை சேர்க்கலாம்:? கைரேகை =" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "கிளை '{branch}' '{versionName}'கட்டமைப்பில் உறுதிமொழியாக பயன்படுத்தப்படுகிறது" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "கிளை '{branch}' '{srclib}'இல் உறுதிமொழியாக பயன்படுத்தப்படுகிறது" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "உடைந்த சிம்லிங்க்: {path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "மூலத்திலிருந்து ஒரு தொகுப்பை உருவாக்குங்கள்" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "கிடைக்கக்கூடிய அனைத்து பயன்பாடுகளையும் உருவாக்குங்கள்" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "`Fdroid இறக்குமதி` மூலம் உருவாக்கப்பட்ட உருவாக்கு - ஆயத்தம் செய்தவுடன் முடக்கு வரியை அகற்றவும்" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "மேனிலை தரவு அறிவிலி ரெப்போ உருவாக்கப்படாத மாற்றங்களைக் கொண்டுள்ளது!" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "ஒவ்வொரு தொகுப்பின் அண்மைக் கால பதிப்பை மட்டுமே உருவாக்குங்கள்" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "இந்த உள்ளமைவுடன் \"%s\" அடிப்படையில் ரெப்போ கட்டப்பட்டது:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "CurrentVersionCode இல்லாமல் பயன்பாட்டை தானாக புதுப்பிக்க முடியாது" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "ச்கேன் செய்யும் போது {} பிழை காரணமாக உருவாக்க முடியாது" msgstr[1] "ச்கேன் செய்யும் போது {} பிழைகள் காரணமாக உருவாக்க முடியாது" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "\"{path}\" ஐ மீண்டும் எழுத முடியாது" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "வகைகள் '%s' செல்லுபடியாகாது" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "வகைகள் அமைக்கப்படவில்லை" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "வகை \"{category}\" வரையறுக்கப்பட்டுள்ளது, ஆனால் எந்த பயன்பாடுகளுக்கும் பயன்படுத்தப்படவில்லை!" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "பயன்பாடுகளுக்கான புதுப்பிப்புகளைச் சரிபார்க்கவும்" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "{appid} க்கான காப்பகத்தை சரிபார்க்கிறது- பயன்பாடுகள்: {integer}, காப்புபதிப்புகள்: {keep}, காப்பகங்கள்: {arch}" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "தூய்மையான புதுப்பிப்பு - தற்காலிக சேமிப்பைப் பயன்படுத்த வேண்டாம், அனைத்து APK ஐ மீண்டும் செயலாக்குங்கள்" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "பதிவு வெளியீட்டை வண்ணமயமாக்கவும்" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "கமா பிரிக்கப்பட்ட வகைகளின் பட்டியல்." #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "'%s' கட்டளை அங்கீகரிக்கப்படவில்லை.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "மாற்றங்களைச் செய்யுங்கள்" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "மாற்றங்களைச் செய்யுங்கள், தள்ளுங்கள், பின்னர் ஒன்றிணைக்கும் கோரிக்கையை உருவாக்குங்கள்" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr ".Yml மற்றும் உள்ளூர்மயமாக்கப்பட்ட கோப்புகளுக்கு இடையில் முரண்பட்ட \"{field}\" வரையறைகள்:" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "முரண்பட்ட வாதங்கள்: '--verbose' மற்றும் '--quiet' ஒரே நேரத்தில் குறிப்பிட முடியாது." #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "உங்கள் கணினியில் '{command}' கண்டுபிடிக்க முடியவில்லை" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "அண்மைக் கால பதிப்பு குறியீட்டைக் கண்டுபிடிக்க முடியவில்லை" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "அண்மைக் கால பதிப்பு பெயரைக் கண்டுபிடிக்க முடியவில்லை" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "அதை அகற்ற {path} கண்டுபிடிக்க முடியவில்லை" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "பகுப்பாய்விற்கு பயன்பாடு {path}ஐ திறக்க முடியவில்லை: " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "அளவை \"{size}\", தவறான வகை \"{type}\"" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "பயன்பாட்டு ஐடியைக் கண்டுபிடிக்க முடியவில்லை" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "எந்த பதிப்பு தகவலையும் கண்டுபிடிக்க முடியவில்லை" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "தொகுப்பு ஐடியைக் கண்டுபிடிக்க முடியவில்லை" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "ஏற்கனவே கையொப்பமிடும் விசை அமைப்பை மேலெழுத மறுக்கிறது!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "புதிய கொள்கலனை உருவாக்கியது \"{name}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "S3CMD ஐ கட்டமைக்க \"{path}\" ஐ உருவாக்குதல்." #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Creating empty {config_file}" msgstr "'{config_file}'" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "பதிவு கோப்பகத்தை உருவாக்குதல்" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "புதிய எச் 3 வாளியை உருவாக்குதல்: {url}" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "வெளியீட்டு கோப்பகத்தை உருவாக்குதல்" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "இந்த விசையுடன் கையொப்பமிடப்பட்ட குறியீட்டை உருவாக்குதல் (SHA256):" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "தற்காலிக கோப்பகத்தை உருவாக்குதல்" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "கையொப்பமிடுவதற்கான தயாரிப்பில் கையொப்பமிடாத குறியீட்டை உருவாக்குதல்" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "CurrentVersionCode {cv} மிகப் பழமையான உருவாக்க நுழைவு {versionCode} ஐ விட குறைவாக உள்ளது" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "Debug_keystore அமைக்கப்படவில்லை அல்லது மதிப்பு முழுமையடையாது" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "ரெப்போவிலிருந்து மேனிலை தரவு இல்லாமல் APKS மற்றும்/அல்லது OBB களை நீக்கு" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "காப்பகத்தை நீக்குதல், ரெப்போ மிகப் பெரியது ({size} அதிகபட்சம் {limit})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "கிட்-மிரர் வரலாற்றை நீக்குதல், ரெப்போ மிகப் பெரியது ({size} அதிகபட்சம் {limit})" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "அறியப்படாத கோப்பை நீக்குதல்: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "விளக்கம் '%s' என்பது பயன்பாட்டின் சுருக்கம்" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "விளக்கம் ஒரு நகல் கோடு உள்ளது" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "நீளம் {length} இன் விளக்கம் {limit} கரி வரம்புக்கு மேல் உள்ளது" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "நீங்கள் கட்டமைப்பு/{name}.yml?" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "நீங்கள் {code} என்று சொன்னீர்களா?" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "உருவாக்கப்பட்ட உருவாக்க உள்ளீடுகளுக்கு 'முடக்கு:' ஐ முடக்க வேண்டாம்" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "புதிய கோப்புகளை ரெப்போவுக்கு பயன்படுத்த வேண்டாம்" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "முகவரி இல் \"{path}\" சேர்க்க வேண்டாம்!" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "ஆண்ட்ராய்டு SDK பாதைக்கு கேட்க வேண்டாம், தோல்வியடைகிறது" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "கீச்டோரிலிருந்து உருவாக்கப்பட்ட தனிப்பட்ட விசைகளை அகற்ற வேண்டாம்" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "ஒரு மூலத்தை உருவாக்க வேண்டாம், ஒரு கட்டமைப்பைச் சோதிக்கும்போது பயனுள்ளதாக இருக்கும்" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "இணைய இணைப்பு இல்லாத கட்டமைப்பைச் சோதிக்கும்போது பயனுள்ளதாக இருக்கும் களஞ்சியத்தை புதுப்பிக்க வேண்டாம்" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "RSYNC CHECKSUMS ஐப் பயன்படுத்த வேண்டாம்" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "நெட்வொர்க்கில் குறைவாக கசியும் கண்ணாடியைப் பயன்படுத்தி f-droid.apk ஐப் பதிவிறக்கவும்" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "சிறிய களஞ்சியங்களின் முழுமையான கண்ணாடியைப் பதிவிறக்கவும்" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "களஞ்சியத்தை பதிவிறக்குவது ஏற்கனவே ஒரு முறை தோல்வியடைந்தது, மீண்டும் முயற்சிக்கவில்லை." #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "பதிவிறக்கம் {url} தோல்வியுற்றது. {error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "{path} இல் நகல்-அம்ச எதிர்ப்பு அறிவிப்பு புறக்கணிக்கப்பட்டது!" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "கண்ணாடிகள் கட்டமைப்பில் நகல் நுழைவு \"%s\"!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "'{field}' இல் நகல் இணைப்பு: {url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "பிழை: %(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "பிழை: \"சேவையகம்\" துணைக்குழு அகற்றப்பட்டது, \"வரிசைப்படுத்தல்\" ஐப் பயன்படுத்தவும்!" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "பிழை: ஆதரிக்கப்படாத தொஒ வகை, திட்டுகள் வரவேற்கப்படுகின்றன!" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "பிழை: ஆதரிக்கப்படாத அறிவிலி புரவலன் \"%s\", திட்டுகள் வரவேற்கப்படுகின்றன!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "பிழை: {path} இல் {key} என்பது \"காப்பகம்\" அல்லது \"ரெப்போ\" அல்ல!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "பிழை: {key}: {path} இல் {subkey} அனுமதிக்கப்பட்ட விசைகளில் இல்லை: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "குறியாக்கம் '{enc}' fdroid என அமைக்கப்பட்டுள்ளது. சிறந்த முடிவுகளுக்கு அதை 'UTF-8' என அமைக்கவும்." #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" "ஆண்ட்ராய்டு SDK (%s) க்கு பாதையை இங்கே உள்ளிடவும்:\n" " > " #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "{configname} இருந்து இலிருந்து சுற்றுச்சூழல் மாறி {var} அமைக்கப்படவில்லை!" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "{configname} இருந்து இலிருந்து சுற்றுச்சூழல் மாறி {var} அமைக்கப்படவில்லை!" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "'Github_Releases' ஐ வரிசைப்படுத்துவதில் பிழை, {} இல்லை. (நீங்கள் முதலில் `fdroid புதுப்பிப்பை இயக்க வேண்டியிருக்கலாம்.)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "ரெப்போ முகவரியைப் பெறும்போது பிழை" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "சிக்கல்கள் கண்டுபிடிக்கப்பட்டால் பூச்சியமற்ற குறியீட்டைக் கொண்டு வெளியேறவும்" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "மூல களஞ்சியத்திலிருந்து பயன்பாட்டு மெட்டாடேட்டாவை பிரித்தெடுக்கவும்" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "APK இலிருந்து கையொப்பத்தை பிரித்தெடுக்கவும்" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "அறியப்பட்ட எந்த மூலத்திலிருந்தும் f-droid.apk ஐ பதிவிறக்கம் செய்ய முடியவில்லை!" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "தோல்வியுற்ற நகலெடுப்பதில் {path}: {error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "'{apkfilename}' க்கான கையொப்பங்களைப் பெறுவதில் தோல்வி: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "தோல்வியுற்ற வாசிப்பு {path}: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "மறுஅளவு தோல்வியுற்றது {path}: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "S3 வாளியை உருவாக்குவதில் தோல்வி: {url}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "APK தகவல்களைப் பெறுவதில் தோல்வி, {path} நீக்குதல்" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "APK தகவல்களைப் பெறுவதில் தோல்வி, {path}யைத் தவிர்ப்பது" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "முக்கிய கைரேகை கையொப்பமிடுவதில் தோல்வி" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "{dev} இல் '{apkfilename}' ஐ நிறுவுவதில் தோல்வி: {error}" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "விண்ணப்பத்தில் கையெழுத்திடுவதில் தோல்வி" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "VM இலிருந்து சேவையக ஐடியை உருவாக்குதல்: {buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "'{apkfilename}' -> '{sigdir}' க்கான கையொப்பங்களைப் பெற்றது" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "அதை செயலாக்கும்போது கோப்பு மறைந்தது: {path}" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "முடிந்தது" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "தடைசெய்யப்பட்ட உஉகுமொ குறிச்சொற்கள்" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "ஊனமுற்ற பயன்பாடுகளை கட்டாயப்படுத்துகிறது, மேலும் ச்கேன் சிக்கல்களைப் பொருட்படுத்தாமல். சோதனை பயன்முறையில் மட்டுமே அனுமதிக்கப்படுகிறது." #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "{0} நொடி காலக்கெடுவுக்குப் பிறகு கட்டமைப்பை கட்டாயப்படுத்துதல்!" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "ஊனமுற்ற பயன்பாடுகள் மற்றும் கட்டமைப்புகளை ச்கேன் செய்யுங்கள்." #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "பயன்பாட்டிற்கான மேனிலை தரவு இல்லாமல் \"{path}\" கிராஃபிக் கிடைத்தது \"{name}\"!" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "\"{name}\" க்கு \"{path}\" மோசமான பொருள் கோப்பு கிடைத்தது:" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "வாதங்களில் தவறான பயன்பாடுகளைக் கண்டறிந்தது" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "சில பயன்பாடுகளுக்கான தவறான பதிப்புக் குறியீடுகளைக் கண்டறிந்தது" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "{path} இல் பல குடுவை கையொப்பம் தொகுதி கோப்புகள் கிடைத்தன" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "பல கையொப்ப சான்றிதழ்கள் கிடைத்தன!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "{appid} க்கான பல மேனிலை தரவு கோப்புகள் கிடைத்தன" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "களஞ்சியத்திற்கான பல கையொப்பமிடும் சான்றிதழ்கள் கண்டறியப்பட்டன." #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "களஞ்சியத்திற்கான கையொப்பமிடும் சான்றிதழ்கள் எதுவும் கிடைக்கவில்லை." #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "%s இல் கோப்பு அல்லாதது" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "{url} இல் {apkfilename} காணப்பட்டது" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "{filename} இல் {count} சிக்கல்கள் காணப்பட்டன" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "{filename} இல் {count} எச்சரிக்கைகள் கிடைத்தன" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "{appid} க்காக உருவாக்கப்பட்ட எலும்புக்கூடு மேனிலை தரவு" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "'%s' இன் அறிவிலி புதுப்பிப்பு தோல்வியடைந்தது" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "அறிவிலி தூய்மையான தோல்வியுற்றது" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "Git fetch தோல்வியுற்றது" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "அறிவிலி ரிமோட் செட்-எட் தோல்வியடைந்தது: \"%s\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "அறிவிலி மீட்டமைப்பு தோல்வியடைந்தது" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "Git சப்மோடூல் டீனிட் தோல்வியடைந்தது" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "Git சப்மோடூல் ஒத்திசைவு தோல்வியடைந்தது" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "Git சப்மோடூல் புதுப்பிப்பு தோல்வியடைந்தது" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "HTTP கள் சப்வர்சன் முகவரி களுடன் பயன்படுத்தப்பட வேண்டும்!" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "ஒரு அறிவிலி கண்ணாடி பெரியதாகிவிட்டால், காப்பகத்தை நீக்க அனுமதிக்கவும்" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "இந்த பதிவேற்றம் தோல்வியுற்றால், {url} பெறுநர் க்கு கைமுறையாக பதிவேற்ற முயற்சிக்கவும்" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "'{field}' இல் '{metapath}' மெட்டாடேட்டாவில் புறக்கணிக்கப்படுவதால் அது நீக்கப்பட்டது." #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "நிதியுதவியை புறக்கணித்தல். 2048 ஐ விட நீண்ட காலமாக நுழைவு: %s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "வெளிப்படையான மோசமான உறுப்பை புறக்கணித்தல்: %s" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "{oldfile} நீக்கப்பட்டது, {newfile} ஐப் பயன்படுத்தவும்" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "மேனிலை தரவு இல்லாமல் தொகுப்பைப் புறக்கணித்தல்: " #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "{apkfilename}க்கான பழைய கேச் தரவைப் புறக்கணித்தல்" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "MD5 போன்ற ஊனமுற்ற வழிமுறைகளுடன் கையொப்பமிடப்பட்ட APK கள் சேர்க்கவும்" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "கண்ணாடியில் பிசிபி கையொப்பம் .ஆச்க் கோப்புகளைச் சேர்க்கவும்" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "கண்ணாடியில் உருவாக்க பதிவுகளைச் சேர்க்கவும்" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "கண்ணாடியில் மூல டார்பால்சைச் சேர்க்கவும்" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "%s@ %s இலிருந்து மேனிலை தரவு உட்பட" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "{path} இருந்து இலிருந்து மேனிலை தரவு உட்பட" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "துணைமோடல்களைத் தொடங்குதல்" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "கிடைக்கக்கூடிய அனைத்து கையொப்பமிடப்பட்ட பயன்பாடுகளையும் நிறுவவும்" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "சாதனங்களில் கட்டப்பட்ட தொகுப்புகளை நிறுவவும்" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "%s நிறுவுதல் ..." #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "{dev} இல் '{apkfilename}' ஐ நிறுவுதல் ..." #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "ரெப்போ HTTP சேவையகத்துடன் தொடர்பு கொள்ளுங்கள்" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "தவறான APK" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "தவறான AutoupDateMode: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "தவறான புதுப்பிப்பு சோதனை: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "தவறான VERCODEOPERATION: {field}" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "தவறான VERCODEOPERATION: {invalid_ops}" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "தவறான பயன்பாட்டு ஐடி {appid}" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "தவறான புல்லட் பட்டியல்" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "வெளியிடப்பட்ட கோப்பிற்கான தவறான பெயர்: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "தவறான NDK: கட்டமைப்பில் நுழைவு: \"{ndk}\"" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "Https அல்லாதவர்களுக்கு தவறான திருப்பி விடுங்கள்: {before} -> {after} " #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "தவறான ச்க்ர்லிப் மெட்டாடேட்டா: '{file}' இல்லை" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "தவறான SRCLIB மெட்டாடேட்டா: '{file}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "தவறான SRCLIB மெட்டாடேட்டா: அறியப்படாத விசை '{key}' இல் '{file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "சார் கையொப்பம் சரிபார்க்கத் தவறிவிட்டது: {path}" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "சார் கையொப்பம் சரிபார்க்கப்பட்டது: {path}" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "சாவா குடுவை கோப்பு" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "சாவா சே.டி.கே கண்டுபிடிக்கப்படவில்லை! நிலையான இடத்தில் நிறுவவும் அல்லது சாவா_பாத்களை அமைக்கவும்!" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "சாவா தொகுக்கப்பட்ட வகுப்பு" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "சாவா சார்சிக்னர் கண்டுபிடிக்கப்படவில்லை! நிலையான இடத்தில் நிறுவவும் அல்லது சாவா_பாத்களை அமைக்கவும்!" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "உஉகுமொ SRC பண்புகளில் சாவாச்கிரிப்ட்" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "தோல்வியுற்ற கட்டமைப்பை வைத்திருத்தல் \"{apkfilename}\"" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "விசையை கையொப்பமிடுவதற்கான கீச்டோர்:\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "அறியப்பட்ட பிழைத்திருத்த விசை Lentappasigningkeys இல் பயன்படுத்தப்படுகிறது: " #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "கடைசியாக பயன்படுத்தப்பட்ட கமிட் '{commit}' ஒரு குறிச்சொல்லாகத் தெரிகிறது, ஆனால் புதுப்பிப்பு தொழில்நுட்பம் '{ucm}'" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "லிபராபே நன்கொடை முறைகள் லைபர்பே: புலம்" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "மறுவடிவமைக்கப்படும் கோப்புகளை பட்டியலிடுங்கள் (உலர் ரன்)" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "F-droid.org முகவரி இல் சேர்க்கப்பட்டுள்ளது" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "விதிவிலக்குகளில் கட்டமைப்பை நிறுத்துங்கள்" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "தவறாக களஞ்சிய கண்ணாடிகள்." #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "தவறாக சேவையகமானது:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "சிப் கோப்பில் அதிகபட்ச மறுசீரமைப்பு ஆழம் எட்டப்பட்டது: %s" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "முழு ரெப்போ மற்றும் காப்பகத்தை பிரதிபலிக்கவும், அனைத்து கோப்பு வகைகளிலும்." #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "வெளியீட்டு அடைவு இல்லை" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "நற்பொருத்தம் எதிர்ப்பு அறிவிப்புகளை உள்ளூர்மயமாக்கப்பட்ட கோப்புகளுக்கு நகர்த்துவது:" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "Config.yml இல் \"REPO_PUBKEY\" அல்லது \"கீச்டோர்பாச்\" எதுவும் அமைக்கப்படவில்லை" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "தொகுப்புக்கு APK இல்லை: %s" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "ஆண்ட்ராய்டு SDK எதுவும் கிடைக்கவில்லை!" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "இணைக்கப்பட்ட சாதனங்கள் எதுவும் கிடைக்கவில்லை" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "`ADB Install` க்காக எந்த சாதனங்களும் கிடைக்கவில்லை! ஒன்றை செருகவும்." #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "முகவரி இல் கைரேகை இல்லை." #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "அறிவிலி சப்மோடூல்கள் எதுவும் கிடைக்கவில்லை" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "கிரேடில் திட்டத்தைக் காண முடியவில்லை. -சப்பரைக் குறிப்பிடவா?" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "எந்த தகவலும் கிடைக்கவில்லை." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "பொருந்தக்கூடிய குறிச்சொற்கள் எதுவும் கிடைக்கவில்லை" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "இயல்புநிலை (3) ஐப் பயன்படுத்தி குறைந்தபட்ச SDK பதிப்பு {0} at இல் காணப்படவில்லை." #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "பயன்பாடு இலவச மென்பொருள் என்பதை குறிப்பிட தேவையில்லை" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "பயன்பாடு ஆண்ட்ராய்டு க்கானது என்பதை குறிப்பிட தேவையில்லை" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "விருப்பத்தேர்வு தொகுப்பு இல்லை! இவற்றில் குறைந்தபட்சம் ஒன்றை அமைக்க உங்கள் config.yml ஐத் திருத்தவும்:" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "தொகுப்புகள் எதுவும் குறிப்பிடப்படவில்லை" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "%s க்கு கையொப்பமிடப்பட்ட APK கிடைக்கவில்லை" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "கையொப்பமிடப்பட்ட வெளியீட்டு அடைவு இல்லை - எதுவும் செய்ய எதுவும் இல்லை" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "{path} இல் கையொப்பமிடும் சான்றிதழ்கள் இல்லை" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "அத்தகைய தொகுப்பு இல்லை: %s" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "பயன்பாட்டிற்கு அத்தகைய பதிப்பு குறியீடு பதிப்பு குறியீடு {versionCode}" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "குறிச்சொற்கள் எதுவும் கிடைக்கவில்லை" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "கையொப்பமிடாத அடைவு இல்லை - எதுவும் செய்ய முடியாது" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "பதிப்பு தகவல்களைக் காண முடியவில்லை." #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "சரியான அளவு வரையறை அல்ல: \"{}\"" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "செய்ய எதுவும் இல்லை" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "{appid}க்கு எதுவும் செய்ய முடியாது." #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "இப்போது இவற்றை config.yml இல் அமைக்கவும்:" #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "OBB கோப்பில் எந்த APK ஐ விட புதிய பதிப்பு குறியீடு ({முழு எண்) உள்ளது:" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "OBB கோப்பு பெயர் \"முதன்மையான\" உடன் தொடங்க வேண்டும். அல்லது \"இணைப்பு.\":" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "OBB இன் பேக்கசெனேம் ஆதரிக்கப்பட்ட APK உடன் பொருந்தவில்லை:" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "இணைப்பில்லாத இயந்திரம், அறிவிலி மிரர் தலைமுறையை `fdroid வரிசைப்படுத்தல்` வரை தவிர்க்கவும்" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "'Github_releases' கட்டமைப்பு உருப்படிகளில் ஒன்று 'பேக்கசெனேம்ச்' மதிப்பைக் காணவில்லை. ச்கிப்பிங் ..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "'Github_releases' கட்டமைப்பு உருப்படிகளில் ஒன்று 'ProjectURL' மதிப்பைக் காணவில்லை. ச்கிப்பிங் ..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "'Github_releases' கட்டமைப்பு உருப்படிகளில் ஒன்று 'கிள்ளாக்கு' மதிப்பைக் காணவில்லை. ச்கிப்பிங் ..." #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "கிராபிக்ச் மற்றும் காணப்படும் பி.என்.சி மற்றும் சே.பி.சி மட்டுமே ஆதரிக்கப்படுகின்றன: {path}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "தானியங்கு புதுப்பிப்புகளுடன் பயன்பாடுகளை மட்டுமே செயலாக்கவும்" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "OpenCollective நன்கொடை முறைகள் OpenCollective: புலம்" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "APK இன் பெயரிடப்பட்ட தாக்கல் சாதொபொகு அறிக்கை." #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "சாதொபொகு க்கு நிலைவெளிக்கு வெளியீடு." #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "சாதொபொகு ஐ வெளியிடுகிறது" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "திட்டத்தின் ஒட்டுமொத்த உரிமம்." #: ../fdroidserver/index.py #, fuzzy, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "மெட்டாடேட்டாவிலிருந்து {apkfilename} இல் வெற்று பதிப்பு பெயர்:{version}" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "தொகுப்பு \"{appid}\" ஏற்கனவே உள்ளது" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "'{path}' இல் மேனிஃபெச்டை பாகுபடுத்துதல்" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "பயனர்பெயருடன் கடவுச்சொல் தேவை" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "முதன்மையான ஆண்ட்ராய்டு திட்ட துணை அடைவுக்கான பாதை, வேரில் இல்லையென்றால்." #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "ஆண்ட்ராய்டு SDK க்கான பாதை (சில நேரங்களில் Android_home இல் அமைக்கப்படுகிறது)" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "பதிவாக பயன்படுத்த அறிவிலி ரெப்போவுக்கான பாதை" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "ரெப்போ கையொப்பமிடும் விசைக்கான கீச்டோருக்கு பாதை" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "எளிதான நகல்/பேச்டுக்காக ரகசிய மாறியை முனையத்திற்கு அச்சிடுக" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "உங்கள் இருப்பிடத்தின் அடிப்படையில் தனியுரிமை பயன்முறை இயக்கப்பட்டது ({country_code})." #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "சிப் கோப்பில் சிக்கல்: %s, பிழை %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "'{path}' இல் எக்ச்எம்எல் சிக்கல்" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "தானாக புதுப்பிப்புகளை செயலாக்கவும்" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "செயலாக்கம் {apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "செயலாக்கம் {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "குறியீட்டு கோப்புகளுக்கு மனிதனால் படிக்கக்கூடிய XML/JSON ஐ உருவாக்குங்கள்" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "இறக்குமதி செய்ய திட்ட முகவரி." #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "நிறுத்தற்குறி தவிர்க்கப்பட வேண்டும்" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "இந்த அறிவிலி ரிமோட் களஞ்சியத்திற்கு பதிவை அழுத்தவும்" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "பைனரி வெளிப்படைத்தன்மை பதிவை {url}க்கு தள்ளுகிறது" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "தொலை சேவையகத்திற்கு தள்ளுவது தோல்வியடைந்தது!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "{url}க்கு தள்ளுதல்" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "விரைவாக ஒரு புதிய களஞ்சியத்தைத் தொடங்கவும்" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "அனைத்து மேனிலை தரவு கோப்புகளையும் படித்து வெளியேறவும்" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "'{config_file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "பேக்கசெனேம்/பதிப்பு குறியீடு/பதிப்பு பெயர் தோல்வியுற்றது, APK தவறானது: '{apkfilename}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "பேக்கசெனேம்/பதிப்பு குறியீடு/பதிப்பு பெயர் தோல்வியுற்றது, APK தவறானது: '{apkfilename}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "தற்காலிக சேமிப்பிலிருந்து {apkfilename} படித்தல்" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "நெட்வொர்க்கிலிருந்து ச்கேனர் விதிகள் மற்றும் கையொப்பங்களை புதுப்பித்து கேச்" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "வெற்றிகரமாக சரிபார்க்கப்பட்டால் மூல நாடாகாப்பகபந்து மற்றும் ஏதேனும் APK களை அகற்றவும்." #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "குறிப்பிட்ட கோப்புகளை நீக்குதல்" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "{path} \"ஐ நீக்குதல்" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "தொகுப்புடன் பொருந்தாத APK கோப்புகளை மறுபெயரிடுங்கள். NAME_123.APK" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "வழங்கப்பட்ட பிழைத்திருத்தத்துடன் {apkfilename} இருந்து ராசினாமா" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "அதிகபட்ச படப்புள்ளி அளவைத் தாண்டி அனைத்து ஐகான்களையும் மறுஅளவிடுங்கள்" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "எச்சரிக்கைகள் மற்றும் பிழைகளுக்கு வெளியீட்டை கட்டுப்படுத்துங்கள்" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "திரும்பப்பெறுவது தோல்வியுற்ற பதிவிறக்க: %s" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "அனைத்து மேனிலை தரவு கோப்புகளையும் மீண்டும் எழுதவும்" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "'{appid}' ஐ மீண்டும் எழுதுதல்" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "மாற்றப்படாத மாற்றங்களைக் கொண்ட அறிவிலி ரெப்போவில் இயக்கவும்" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "-Debug.apk ஐக் கண்டுபிடிக்க {cibase}க்கு மேல் இயக்கவும். மற்றும் Repo_basedir {repo_basedir} ஐத் தவிர்" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "வடிவமைப்பை சரிசெய்ய மீண்டும் எழுதுங்கள்" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "MD5 உடன் முதல் மொழி இயக்குகிறது" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "{path} இல் wget ஐ இயக்குகிறது" #: ../fdroidserver/index.py #, fuzzy, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "{url} of இன் SHA-256 நுழைவு பொருந்தவில்லை!" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "அறியப்படாத இலவச வகுப்புகளுக்கு இதன் விளைவாக வரும் APK (களை) ச்கேன் செய்யுங்கள்." #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "ஒரு தொகுப்பின் மூலக் குறியீட்டை ச்கேன் செய்யுங்கள்" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "ச்கேனர் {apk} இல் {count} சிக்கல்கள் காணப்பட்டது" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "ச்கேனர் {count} சிக்கல்கள் {appid}:" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "ச்கேனர் {count} சிக்கல்கள் {appid}: {versionCode}:" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "ச்கேனர் கண்டறிந்தது {} சிக்கல்" msgstr[1] "ச்கேனர் கண்டறிந்தது {} சிக்கல்கள்" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "கூடுதல் கையொப்பமிடும் தொகுதிகளுக்கு APK ஐ ச்கேன் செய்கிறது." #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "அறியப்படாத இல்லாத வகுப்புகளுக்கு டெக்ச்டம்புடன் APK ஐ ச்கேன் செய்கிறது." #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "NDK {release} ({version}) மேலே அமைக்கவும்" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "அந்த நேரத்தில் கடிகாரத்தை அமைக்கவும்:" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "பழையவை காப்பகப்படுத்தப்படுவதற்கு முன்பு ரெப்போவில் அதிகபட்ச வெளியீடுகளை அமைக்கவும்" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "திறந்த கோப்பு வரம்பை {integer} என அமைக்கவும்" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "ஒரு இரவு உருவாக்க ரெப்போவுக்கு ஒரு பயன்பாட்டு உருவாக்கத்தை அமைக்கவும்" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "திறந்த கோப்பு வரம்பை அமைப்பது தோல்வியடைந்தது: " #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "இந்த கட்டமைப்பிற்கான {0} நொடி நேரத்தை அமைத்தல்" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "ரெப்போவில் கையொப்பமிட்டு தொகுப்புகளை வைக்கவும்" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "புதுப்பிப்பு --nosign ஐப் பயன்படுத்தி உருவாக்கப்பட்ட குறியீடுகள்" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "பைனரிகள் மற்றும் பிற சிக்கல்களுக்கான மூலக் குறியீட்டை ச்கேன் செய்வதைத் தவிர்க்கவும்" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "தவறான கையொப்பத்துடன் '{apkfilename}' ஐத் தவிர்ப்பது!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "ரெப்போ மிகப் பெரியதாக இருப்பதால் அறிவிலிஆய்வு பக்கங்களைத் தவிர்ப்பது (>%.2fgb)!" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "{appid}க்கான குறியீட்டு தலைமுறையைத் தவிர்க்கிறது" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "தவறான கையொப்பத்துடன் {apkfilename} ஐத் தவிர்ப்பது!" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "{appid}: முடக்கப்பட்டது" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "ரெப்போவை ஒத்திசைக்க உள்ளக கோப்புறையைக் குறிப்பிடவும்" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "RSyncing க்கு பாஓடு க்கு வழங்க அடையாளக் கோப்பைக் குறிப்பிடவும்" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "எந்த பிழைத்திருத்த கீச்டோர் கோப்பைப் பயன்படுத்த வேண்டும் என்பதைக் குறிப்பிடவும்." #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "இயல்பை விட அதிகமான தகவல்களைத் தூண்டவும்" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "{apkfilename} இருந்து இலிருந்து மர்ம கையொப்பத்தை அகற்றுதல்" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "சுருக்கம் '%s' என்பது பயன்பாட்டின் பெயர்" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "நீளத்தின் சுருக்கம் {length} {limit} எழுத்து வரம்புக்கு மேல் உள்ளது" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "கணினி கடிகாரம் {path} இல் தேதியை விட பழையது!" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "குறிச்சொற்கள் புதுப்பிப்பு பயன்முறை தற்போது git, Hg, BZR மற்றும் GIT-SVN களஞ்சியங்களுக்கு மட்டுமே வேலை செய்கிறது" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "குறிச்சொற்கள் git-svn இல் பயன்படுத்தப்படும் புதுப்பிப்பு பயன்முறை, ஆனால் ரெப்போ குறிச்சொற்களுடன் அமைக்கப்படவில்லை" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "சோதனை பயன்முறை - வெளியீடு ஏற்கனவே இருந்தாலும், வெளியீட்டை மட்டும் வைக்கவும், எப்போதும் உருவாக்குங்கள்." #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "OBB பதிப்பு குறியீடு \"{name}\" க்குப் பிறகு வர வேண்டும்.::::" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "ரெப்போவுக்கான அடிப்படை முகவரி (இயல்புநிலை: https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "கண்ணாடியை எழுதும் அடைவு" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "ரெப்போவில் சேர்க்கப்பட வேண்டிய கோப்பு (பாதை அல்லது குளோப்)" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "களஞ்சியத்தின் கைரேகை பொருந்தவில்லை." #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "லோக்கல்_கோபி_டிர் \"{path}\" க்கான ரூட் டிர் இல்லை!" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "ஒரு கீயாலியாச் மோதல் உள்ளது - வெளியீடு நிறுத்தப்பட்டது" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "முதன்மையான ரெப்போவிலிருந்து காப்பகப்படுத்தப்பட்ட பயன்பாடுகள் இவை." #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "F-droid.org ஐ பிரதிபலிக்க இந்த கட்டளை ஒருபோதும் பயன்படுத்தப்படக்கூடாது! ஒரு முழு நகலுக்கு 600 சிபிக்கு மேல் தேவைப்படுகிறது." #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "இது எஃப்-டிராய்டுடன் பயன்படுத்தப்பட வேண்டிய பயன்பாடுகளின் களஞ்சியமாகும். இந்த களஞ்சியத்தில் உள்ள பயன்பாடுகள் அசல் பயன்பாட்டு உருவாக்குநர்களால் கட்டப்பட்ட உத்தியோகபூர்வ பைனரிகள், அல்லது https://gitlab.com/fdroid இல் உள்ள கருவிகளைப் பயன்படுத்தி f-droid.org இன் நிர்வாகியால் மூலத்திலிருந்து கட்டப்பட்ட பைனரிகள்." #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "இந்த ரெப்போவில் ஏற்கனவே உள்ளக மேனிலை தரவு உள்ளது: %s" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" "அமைப்பை முடிக்க, உங்கள் APKS ஐ \"%s\" இல் சேர்க்கவும்\n" " பின்னர் \"fdroid புதுப்பிப்பு -c; fdroid Update\" ஐ இயக்கவும். நீங்கள் திருத்தவும் விரும்பலாம்\n" " முகவரி, களஞ்சி பெயர் மற்றும் பலவற்றை அமைக்க \"config.yml\". நீங்கள் அமைக்க வேண்டும்\n" " கையொப்பமிடும் விசை (தற்காலிகமானது தானாகவே உருவாக்கப்பட்டிருக்கலாம்).\n" "\n" " மேலும் தகவலுக்கு: https://f-droid.org/docs/setup_an_f-droid_app_repo\n" " மற்றும் https://f-droid.org/docs/signing_process" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "AWSBUCKET, AWSSECRETKEY மற்றும் AWSACCESSKEYID ஐப் பயன்படுத்தவும் config.yml இல் அமைக்கப்பட வேண்டும்!" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "RCLONE ஐப் பயன்படுத்த, RCLONE_CONFIG மற்றும் AWSBUCKET ஆகியவை config.yml இல் அமைக்கப்பட வேண்டும்!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "முகவரி https: // அல்லது http: // உடன் தொடங்க வேண்டும்" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "முகவரி சுருக்கங்கள் பயன்படுத்தப்படக்கூடாது" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "விளக்கத்தில் முகவரி {url}: {error}" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "எதிர்பாராத உரிமக் குறிச்சொல் \"{}\"! Https://spdx.org/license-list இலிருந்து FSF அல்லது OSI அங்கீகரிக்கப்பட்ட குறிச்சொற்களை மட்டுமே பயன்படுத்தவும்" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "எதிர்பாராத உரிமக் குறிச்சொல் \"{}\"! உங்கள் கட்டமைப்பு கோப்பில் கட்டமைக்கப்பட்ட உரிமக் குறிச்சொற்களை மட்டுமே பயன்படுத்தவும்" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "{configname} இல் அறியப்படாத நுழைவு {key}" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "அறியப்படாத விதிவிலக்கு கண்டறியப்பட்டது!" #: ../fdroidserver/lint.py #, fuzzy, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "அறியப்படாத கோப்பு '{filename}'" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "அறியப்படாத மேனிலை தரவு வடிவம்: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "அறியப்படாத மேனிலை தரவு வடிவம்: {path} (பயன்பாடு: *.yml)" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "AAPT இன் அறியப்படாத பதிப்பு, சிக்கல்களை ஏற்படுத்தக்கூடும்: " #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "தேவையற்ற முன்னணி இடம்" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "தேவையற்ற பின்தங்கிய இடம்" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "அங்கீகரிக்கப்படாத பயன்பாட்டு புலம் '{fieldname}' '{path}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "அங்கீகரிக்கப்படாத கட்டமைப்புக் கொடி '{build_flag}' '{path}'" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "ரெப்போ கிராஃபிக் நிறுவனத்திற்கு ஆதரிக்கப்படாத கோப்பு வகை \"{extension}\"" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "ஆதரிக்கப்படாத கிராபிக்ச் கோப்பு காணப்படுகிறது: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "பயன்படுத்தப்படாத எக்ச்ட்லிப் %s" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "%s இல் பயன்படுத்தப்படாத கோப்பு" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "பயன்படுத்தப்படாத ச்கேண்டிலெட் பாதை: %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "பயன்படுத்தப்படாத ச்கேனிக்னர் பாதை: %s" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "புதிய தொகுப்புகளுக்கான ரெப்போ தகவல்களைப் புதுப்பிக்கவும்" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "முகவரி க்கான பைனரி வெளிப்படைத்தன்மை பதிவைப் புதுப்பிக்கவும்" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData இல் தவறான முகவரி உள்ளது: {url}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "UpdateCheckData பதிப்பு குறியீட்டை முழு எண் (\\ டி அல்லது [0-9]) உடன் பொருத்த வேண்டும்: {codeex}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "UpdateCheckData https முகவரி ஐப் பயன்படுத்த வேண்டும்: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "புதுப்பிப்பு தொழில்நுட்பம் செல்லுபடியாகும் முகவரி அல்ல: {url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode அமைக்கப்பட்டுள்ளது, ஆனால் சரிபார்ப்புகள் இன்னும் இயக்கப்படவில்லை என்று தெரிகிறது." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "புதுப்பிப்பு சோதனை பெயர் அறியப்பட்ட பயன்பாட்டு ஐடிக்கு அமைக்கப்பட்டுள்ளது, அதை அகற்றலாம்" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "Uploading {apkfilename} பெறுநர் androidobservatory.org" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "Uploading {apkfilename} பெறுநர் virustotal" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Use /HEAD instead of /master or /main பெறுநர் புள்ளியம் at a கோப்பு in the இயல்புநிலை branch" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Use `fdroid புதுப்பிப்பு -c` பெறுநர் create it." #: ../fdroidserver/build.py msgid "Use build server" msgstr "Use உருவாக்கு சேவையகம்" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "Use திகதி இருந்து APK instead of மின்னோட்ட்ம், ஓட்டம் time க்கு newly added APKs" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "Using \"{path}\" க்கு configuring s3cmd." #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "Using \"{path}\" க்கு syncing with remote storage." #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "APK கையொப்பம் V2 ஐப் பயன்படுத்துதல்" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "சாப்பிங் ஏபிசி கையொப்பம்" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "குடுவை கையொப்பத்தைப் பயன்படுத்துதல்" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "சாவாவின் சார்சிக்னரைப் பயன்படுத்துதல், APKS ஐ சரிபார்க்க பரிந்துரைக்கப்படவில்லை! Apksigner ஐப் பயன்படுத்தவும்" #: ../fdroidserver/metadata.py #, fuzzy, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "{பாதை of இன் உள்ளடக்கங்களுக்கு பதிலாக வெற்று அகராதியைப் பயன்படுத்துதல்!" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "இருக்கும் கீச்டோர் \"{path}\" ஐப் பயன்படுத்துதல்" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "Using rclone பெறுநர் sync with: {url}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "Using s3cmd பெறுநர் sync with: {url}" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "செல்லுபடியாகும் கட்டளைகள் பின்வருமாறு:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "Verify against locally cached நகலெடு rather than redownloading." #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "பதிவிறக்கம் செய்யப்பட்ட தொகுப்புகளின் ஒருமைப்பாட்டை சரிபார்க்கவும்" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "குறியீட்டு கையொப்பத்தை சரிபார்க்கிறது:" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "Apksigner உடன் தொகுப்பு {path} ஐ சரிபார்க்கிறது." #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "வைரச்டோட்டல் பநிஇ விசையை 32MB ஐ விட பெரிய கோப்புகளை பதிவேற்ற முடியாது, {path} பதிவேற்ற {url} ஐப் பயன்படுத்தவும்." #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "சாத்தியமான மேனிலை தரவு பிழைகள் குறித்து எச்சரிக்கவும்" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "வெபாசெம்பிளி பைனரி கோப்பு" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "கையொப்பமிடப்பட்ட குறியீடுகளுக்கு கட்டமைக்கப்படும்போது, இந்த கட்டத்தில் கையொப்பமிடப்படாத குறியீடுகளை மட்டுமே உருவாக்கவும்" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "முழு களஞ்சியத்தையும் யம்லின்ட் இயல்புநிலையாக முடக்கும்போது முடக்கப்படுகிறது. இந்த விருப்பம் யம்லின்ட்டைப் பொருட்படுத்தாமல் கட்டாயப்படுத்துகிறது." #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "கையொப்பமிடும்போது அல்லது சரிபார்க்கும்போது தோல்வியுற்றால், பிழைக் குறியீட்டைக் கொண்டு வெளியேறவும்." #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "ADB வழியாக f-droid.apk ஐ பதிவிறக்கம் செய்து நிறுவ விரும்புகிறீர்களா? (ஆம்/இல்லை)" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "F-droid.org இலிருந்து பயன்பாட்டை (களை) பதிவிறக்கம் செய்ய விரும்புகிறீர்களா? (ஆம்/இல்லை)" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'விசித்திரமான பெயர்' விசைகளை உருவாக்கும் போது பயன்படுத்தப்படுகிறது" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "உங்கள் SDK க்கான பாதையை அமைக்க நீங்கள் Android_home ஐப் பயன்படுத்தலாம், அதாவது:" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "சிப் கோப்பு காப்பகம்" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "ADB அறிக்கைகள் {serial} என்பது \"{status}\"!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "{path} க்கு அடையாள கோப்பைச் சேர்ப்பது" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "{name}: {path} உடன் சேர்க்கிறது" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "தெளிவற்ற விருப்பம்: %(option)s %(matches)s உடன் பொருந்தக்கூடும்" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "apksigner கண்டுபிடிக்கப்படவில்லை! நவீன APK களை கையொப்பமிடவோ சரிபார்க்கவோ முடியாது" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "apksigner கண்டுபிடிக்கப்படவில்லை, கையெழுத்திட இது தேவை!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "இயக்க வேண்டிய கோப்பின் பயன்பாட்டு ஐடி" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "Appid [: VERCODE] படிவத்தில் விருப்ப பதிப்பு குறியீட்டைக் கொண்ட பயன்பாட்டு ஐடி" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "காப்பகம்_ஆர்ல் /காப்பகத்துடன் முடிவடைய வேண்டும்" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "உரையாடல் \"-\" பயன்முறையுடன் %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "உரையாடல் %(argument_name)s: %(message)s" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "சோதனை வரிசைப்படுத்துவதற்கு வெற்று பாஓடு இணைப்பை முயற்சிக்கிறது:" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "ச்க்ர்லிப் ச்பெக்கை அலச முடியாது (ஒரு சரம் அல்ல): '{}'" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "' %(error)s கள்' ஐ திறக்க முடியாது: %(filename)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "HTTPS அல்லாத முகவரி ஐ திறக்க முடியாது: '{};" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "தேவையான SRCLIBS ஐக் கண்டுபிடிக்க முடியவில்லை: \"{path}\"" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "பல சப் பார்சர் வாதங்கள் இருக்க முடியாது" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "செயல்களை ஒன்றிணைக்க முடியாது - இரண்டு குழுக்களுக்கு %r என்று பெயரிடப்பட்டுள்ளது" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "புதுப்பிப்பை வெளியிட முடியாது, நீங்கள் வரிசைப்படுத்தல் விசையை அமைத்தீர்களா?" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "குளோனிங் {url}" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "சொருகி தொகுதிகளிலிருந்து கட்டளைகள்:" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "முரண்பட்ட விருப்ப சரம்: %s" msgstr[1] "முரண்பட்ட விருப்ப சரங்கள்: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "முரண்பட்ட சப் பார்சர் மாற்றுப்பெயர்: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "முரண்பட்ட சப்சர்: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "'{path}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "SRCLIB ச்பெக்கை அலச முடியவில்லை (பெயர் குறிப்பிடப்படவில்லை): '{}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "SRCLIB ச்பெக்கை அலச முடியவில்லை (குறிப்பு எதுவும் குறிப்பிடப்படவில்லை): '{}'" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "உருவாக்கப்பட்டது {path}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "தற்போதைய பதிப்பு புதியது: பழைய வெர்கோட் = {old}, புதிய வெர்கோட் = {new}" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "நீக்குதல்: ரெப்போ/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "பூட்டு இல்லாமல் சார்பு கோப்பு" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "பயன்படுத்தப்பட்ட செயல்முறை பதிவு {path} முதல் {dest} வரை" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "%r போன்ற விருப்பங்களுக்கு DEST = தேவை" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "'{}' பதிவிறக்குகிறது" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "'{}' இலிருந்து ச்கேனர் கையொப்பங்களைப் பதிவிறக்குவது தோல்வியடைந்தது" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "இயங்கக்கூடிய பைனரி, ஒருவேளை குறியீடு" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "எதிர்பார்க்கப்படும் %s உரையாடல்" msgstr[1] "எதிர்பார்க்கப்படும் %s வாதங்கள்" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "குறைந்தது ஒரு வாதத்தை எதிர்பார்க்கலாம்" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "பெரும்பாலான ஒரு வாதத்தில் எதிர்பார்க்கப்படுகிறது" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "ஒரு வாதத்தை எதிர்பார்க்கலாம்" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "fdroid [<கட்டளை>] [-h |--help | --version | ]]" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "வலையிலிருந்து கையொப்பங்களின் அண்மைக் கால பதிப்பைப் பெறுங்கள்" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "மேனிலை தரவு பிழைகள் (இயல்புநிலை) எச்சரிக்கைகள் அல்லது புறக்கணிக்கப்பட வேண்டும்." #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "அறிவிலி எச்.வி.என் நகலி தோல்வியடைந்தது" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "GZIP கோப்பு காப்பகம்" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "புறக்கணிக்கப்பட்ட வெளிப்படையான உரையாடல் %r" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "Index-V1 ஒரு கையொப்பத்தைக் கொண்டிருக்க வேண்டும், அதை உருவாக்க `fdroid சிக்னின்டெக்ச்` ஐப் பயன்படுத்தவும்!" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "Index-V2 ஒரு கையொப்பத்தைக் கொண்டிருக்க வேண்டும், அதை உருவாக்க `fdroid சிக்னின்டெக்ச்` ஐப் பயன்படுத்தவும்!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "தவறான %(type)s மதிப்பு: %(value)r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "தவறான தேர்வு: %(value)r ஆர் ( %(choices)s இலிருந்து தேர்வு செய்யவும்)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "தவறான மோதல்_ -ரசல் மதிப்பு: %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "தவறான விருப்பத்தேர்வு சரம் %(option)r ஆர்: ஒரு எழுத்துக்குறி %(prefix_chars)r ஆர் உடன் தொடங்க வேண்டும்" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "IPFS_CID கண்டுபிடிக்கப்படவில்லை, CIDV1 தலைமுறையைத் தவிர்க்கிறது" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "அண்மைக் கால உருவாக்க செய்முறை ஒருபோதும் இல்லை: பழைய வெராகோட் = {old}, புதிய வெராக்கோட் = {new}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "Local_copy_dir \"fdroid\" உடன் முடிவடையாது, ஒருவேளை நீங்கள் அர்த்தம்: \"{path}\"" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "local_copy_dir ஒரு முழுமையான பாதையாக இருக்க வேண்டும்!" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "local_copy_dir கோப்பகமாக இருக்க வேண்டும், ஒரு கோப்பு அல்ல!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "கண்ணாடியின் '%s' 'fdroid' உடன் முடிவடையாது!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "கண்ணாடிகள் இரண்டு முறை அமைக்கப்பட்டன, config.yml மற்றும் {path}!" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "பரச்பர வாதங்கள் விருப்பமாக இருக்க வேண்டும்" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "அடுத்து {name} கேச் புதுப்பிப்பு {time}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "{appid} in இல் \"படவுரு\" இல்லை" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "APK வழங்கப்படவில்லை" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "பதிப்பு தகவல்கள் எதுவும் கிடைக்கவில்லை" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "உரையாடல் %s உடன் அனுமதிக்கப்படவில்லை" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "%s வாதங்களில் ஒன்று தேவை" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "சரங்கள், பட்டியல்கள் மற்றும் டூப்பிள்களை மட்டுமே ஏற்றுக்கொள்கிறது" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "விருப்பங்கள்" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "இருக்கும் {path} ஐ மேலெழுதும்" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "நிலை வாதங்கள்" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "செயல்முறை பதிவு {path} முதல் {dest} தோல்வியுற்றது!" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "குறிப்பு பைனரி காணாமல் போன கையொப்பம்" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "பாதுகாப்பற்ற HTTP இணைப்பு வழியாக பதிவிறக்குவதை மறுக்கவும் (https ஐப் பயன்படுத்தவும் அல்லது-no-https-check ஐக் குறிப்பிடவும்): {apkfilename}" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "ரெப்போ_கான் \"ரெப்போ/ஐகான்கள்/%s\" இல்லை, ஒதுக்கீட்டு ஒதுக்கிடத்தை உருவாக்குகிறது." #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "ரெப்போ_ஆர்ல் /ரெப்போவுடன் முடிவடைய வேண்டும்" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "RSYNC காணவில்லை அல்லது உடைந்தது: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "S3CMD ஒத்திசைவு குறியீடுகள் {path} முதல் {url} மற்றும் நீக்கு" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "S3CMD ஒத்திசைவு குறியீடுகளை {path} முதல் {url} வரை ஒத்திசைத்து நீக்கப்பட்டது" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "ச்கேனர் கேச் தவறாக உள்ளது! நீங்கள் அதை அழிக்கலாம்: '{clear}'" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "ServerWebroot: பாதை \"fdroid\" உடன் முடிவடையாது, ஒருவேளை நீங்கள் இவற்றில் ஒன்றைக் குறிக்கிறீர்கள்:" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "பகிரப்பட்ட நூலகம்" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "இந்த உதவி செய்தியை காட்டிவிட்டு வெளியேறு" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "கையொப்பமிடப்பட்ட APK, ஒரு கோப்பு-பாதை அல்லது HTTPS முகவரி." #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "முழு உருவாக்க பதிவுகளை வரிசைப்படுத்துவதைத் தவிர்க்கவும்: பதிவு உள்ளடக்கம் காலியாக உள்ளது" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "முழு உருவாக்க பதிவுகளை வரிசைப்படுத்துவதைத் தவிர்க்கவும்: கட்டமைப்பில் இயக்கப்படவில்லை" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "மூல நாடாகாப்பகபந்து தவிர்த்து: {path}" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "Srclibs பெயர் காணவில்லை மற்றும்/அல்லது @" #: ../fdroidserver/scanner.py msgid "static library" msgstr "நிலையான நூலகம்" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "வழங்கப்பட்ட குறிப்பு பைனரி கையொப்பத்தை அனுமதித்துள்ளது {signer}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "பின்வரும் வாதங்கள் தேவை: %s" #: ../fdroidserver/install.py msgid "true" msgstr "உண்மை" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "எதிர்பாராத விருப்ப சரம்: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "அறியப்படாத பாகுபடுத்தி %(parser_name)r (தேர்வுகள்: %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "அங்கீகரிக்கப்படாத வாதங்கள்: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "'{config_file}' இல் பாதுகாப்பற்ற அனுமதிகள் (0600 ஆக இருக்க வேண்டும்)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "பயன்பாடு: " #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "{url} both உடன் ஒத்திசைக்க அப்பாச்சி லிப்குட்டைப் பயன்படுத்துதல்" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "wirustotal.com என்பது விகிதத்தைக் கட்டுப்படுத்துகிறது, மீண்டும் முயற்சிக்க காத்திருக்கிறது ..." #: ../fdroidserver/install.py msgid "yes" msgstr "ஆம்" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "{0} பயன்பாடு, {1} முக்கிய மாற்றுப்பெயர்கள்" msgstr[1] "{0} பயன்பாடுகள், {1} முக்கிய மாற்றுப்பெயர்கள்" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) மேனிலை தரவு இல்லை!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "{apkfilename} இன் androidmanifest.xml க்கு மோசமான தேதி உள்ளது: " #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} ஒரு பெயர் இல்லை! அதற்கு பதிலாக பயன்பாட்டு ஐடியைப் பயன்படுத்துதல்." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "{path} இல் இருந்து {appid} என்பது செல்லுபடியாகும் ஆண்ட்ராய்டு பயன்பாட்டு ஐடி அல்ல!" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "{path} இல் இருந்து {appid} என்பது செல்லுபடியாகும் சாவா தொகுப்பு பெயர் அல்ல!" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "{appid} பயன்பாடுகள் மற்றும் கோப்புகள் இரண்டையும் கொண்டுள்ளது: {files}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "{appid} காணவில்லை {name}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "{appid}: அறியப்படாத எக்ச்ட்லிப் {path} உருவாக்க '{versionName}'" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "{appid}: தற்போதைய மூல நிலையில் இயங்காத கட்டமைப்புகள் எதுவும் குறிப்பிடப்படவில்லை" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "{appid}: {field} ஒரு '{type}' ஆக இருக்க வேண்டும், ஆனால் அது ஒரு '{fieldtype}!'" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "{appid}: {field} ஒரு '{type}' ஆக இருக்க வேண்டும், ஆனால் அது ஒரு '{fieldtype}'!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "{build_flag} ஒரு முழு எண்ணாக இருக்க வேண்டும், காணப்படுகிறது: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "{build_flag} பட்டியல் அல்லது சரம் இருக்க வேண்டும், காணப்படுகிறது: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "{file} வெற்று அல்லது ஊழல் நிறைந்தது!" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/ஐகான்கள்/{path}\" இல்லை! \"Config.yml\" ஐ சரிபார்க்கவும்." #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "{path} ஏற்கனவே உள்ளது, இறக்குமதி முடிவுகளை புறக்கணிக்கிறது!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "{path} இல்லை! இயங்குவதன் மூலம் அதை உருவாக்கவும்:" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "{path} மோசமான கோப்பு கையொப்பம் \"{pattern}\", சாத்தியமான சானச் சுரண்டல்!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} வைரச்டோட்டல் {count} முறை கொடியிடப்பட்டுள்ளது:" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "{path} தவறான கைரேகை ({fingerprint}) உள்ளது!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "{path} என்பது \"விசை: மதிப்பு\" கட்டளை அல்ல, ஆனால் ஒரு {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "{path} என்பது ஒரு நிலையான கட்டமைப்பு கோப்பு அல்ல!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "{path} என்பது பட்டியல் அல்ல, ஆனால் ஒரு {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "{path} என்பது {expected_type} அல்ல, ஆனால் ஒரு {datatype}!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "{path} என்பது சுழிய அளவு!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "{path} 200MB க்கும் அதிகமான, கைமுறையாக பதிவேற்றுதல்: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "{path}: \"{code}\" என்பது செல்லுபடியாகும் ஐஎச்ஓ_3166-1 ஆல்பா -2 நாட்டு குறியீடு அல்ல!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "{path}: {error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "{url} \"fdroid\" உடன் முடிவடையாது, முகவரி பாதையை சரிபார்க்கவும்!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "{url} \"http\" உடன் தொடங்காது!" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "{} கட்டிடம் தோல்வியடைந்தது" msgstr[1] "{} கட்டமைப்புகள் தோல்வியுற்றன" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "{} உருவாக்கம் செய் பெற்றது" msgstr[1] "{} கட்டடங்கள் செய் பெற்றன" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/tr/0000755000175000017500000000000014770510164014610 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/tr/LC_MESSAGES/0000755000175000017500000000000014770510164016375 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/tr/LC_MESSAGES/fdroidserver.po0000644000175000017500000026512614770507747021464 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # Oğuz Ersen , 2020, 2021, 2022. # Orhan , 2021. # Oğuz Ersen , 2022, 2023, 2024. # Bai , 2023. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2024-09-10 23:49+0000\n" "Last-Translator: Oğuz Ersen \n" "Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.8-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "Dağıtım anahtarı olarak kullanılacak SSH ortak anahtarı:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "DEBUG_KEYSTORE gizli değişkeni için kodlanmış {path}:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" eşleşen üst veri dosyasına sahip değil!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "\"local_copy_dir\" {path} mevcut değil!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" zaten {dev} üzerinde kurulu." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "\"{path}\" en son {name} ({version}) içeriyor" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "\"{path}\" var ancak s3cmd kurulu değil!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "\"{path}\" desteklenen bir dosya biçimi değil (şunu kullanın: metadata/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "\"{path}\", izin verilmeyen bir anahtarla imzalandı:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" geçerli bir URL değil!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: hata: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "%d APK imzalanamadı veya doğrulanamadı!" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d sorun bulundu" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%r çağrılabilir değil" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "%s bir sözlük üretmedi!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "%s bozuk SHA-256'ya sahip: %s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s kabul edilen bir inşa alanı değil" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' config.yml içinde bulunamadı!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "'keystore' seçeneği NONE ve 'smartcardoptions' seçeneği boş!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "'keystore' config.yml içinde bulunamadı!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "'keystorepass' config.yml içinde bulunamadı!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' config.yml içinde bulunamadı!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required' positionals için geçersiz bir argüman" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "'sdk_path' config.yml içinde ayarlı değil!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' çok eski, fdroid build-tools-{version} veya daha yenisini gerektirir!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "'{path}' yürütülemedi!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' geçersiz biçime sahip, bir sözlük olmalı!" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' {appid} içinde geçerli {field} değil. Regex ifadesi: {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' geçerli bir {field} değil, {pattern} olmalı" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr ".. .checkupdate {appid} için başarısız oldu: {error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() tanımlı değil" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "/issues eksik" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "Bir URL, argüman olarak gereklidir!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "APK imzalarının {path} içinde farklı sertifikaları var:" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "Depodaki paketler için GnuPG ile PGP imzaları ekle" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "İmzalanmamış bir depoya, depo imzalama anahtarı ekleyin" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "İskelet üst veri dosyaları olmayan APK'lar için onları ekle" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "Yalnızca {name} için yeni depo ekleniyor" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "Depo imzalama anahtarının anahtar deposundaki takma adı" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "AllowedAPKSigningKeys eksik ancak referans ikili dosyası sağlandı" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "İlk içe aktarım için farklı bir revizyonun (veya git dalının) belirtilmesine izin verir" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "Tam arşiv bölümünü de yansıt" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "Ayrıca biçimlendirme sorunları hakkında uyar, rewritemeta -l gibi" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "Android AAR kütüphanesi" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "Android APK dosyası" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "Android DEX kodu" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "Android SDK {path} konumunda bulunamadı!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "Android SDK konumu '{path}' yok!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "Android SDK yolu '{path}' bir dizin değil!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "Android SDK aracı {cmd} bulunamadı!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Uygulama İkili Dosyalara sahip ancak sertifikayı sabitlemek için karşılık gelen AllowedAPKSigningKeys'e sahip değil." #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "Uygulamanın NoSourceSince veya ArchivePolicy \"0 sürümü\" var ya da 0 var ama AutoUpdateMode veya UpdateCheckMode Yok değil" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "Uygulama '{repo}' içinde ancak {url} adresine bir bağlantısı var" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Uygulama sürümü ikili dosyaya sahip ancak sertifikayı sabitlemek için karşılık gelen AllowedAPKSigningKeys'e sahip değil." #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "Ekleme .gıt gerekli değildir" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "Geçersiz imza ile {apkfilename} arşivleme!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "UpdateCheckMode ile AutoUpdateMode: HTTP bir desene sahip olmalıdır." #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "Aynalar yapılandırmasında hatalı giriş türü \"{mirrortype}\": {mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "Yansının temel URL'si, 'şu sorgu dizgisini kullanarak indeks imzalama anahtarını içerebilir: ?fingerprint=" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "Dal '{branch}' inşa '{versionName}' içinde işleme olarak kullanıldı" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "Srclib '{srclib}' içine işleme için dal '{branch}' kullanıldı" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "Bozuk sembolik bağlantı: {path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "Kaynaktan bir paket oluştur" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "Kullanılabilir tüm uygulamaları inşa et" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "İnşa `fdroid import` ile üretildi - hazır olunca devre dışı satırını kaldırın" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "Yapı metadata git repo, değişiklik yapılmadı!" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "Her paketin sadece son sürümünü inşa et" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "Depo \"%s\" tabanında bu yapılandırma ile inşa edildi:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "CurrentVersionCode olmadan uygulama otomatik olarak güncellenemiyor" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Tarama sırasında {} hata nedeniyle inşa edilemiyor" msgstr[1] "Tarama sırasında {} hata nedeniyle inşa edilemiyor" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "\"{path}\" yeniden yazılamıyor" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "'%s' kategorileri geçersiz" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "Kategoriler ayarlı değil" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "\"{category}\" kategorisi tanımlanmış ancak herhangi bir uygulama için kullanılmıyor!" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Uygulama güncellemelerini denetle" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "{appid} için arşivleme denetleniyor - apks:{integer}, keepversions:{keep}, archapks:{arch}" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Temiz güncelleme - önbellekleri kullanmaz, tüm APKları yeniden işler" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Kategorilerin virgülle ayrılmış listesi." #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "'%s' komutu tanınmıyor.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "Değişiklikleri işle" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr ".yml ve yerelleştirilmiş dosyalar arasında çakışan \"{field}\" tanımları:" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Çakışan argümanlar: '--verbose' ve '--quiet' aynı anda belirtilemez." #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "'{command}' sisteminizde bulunamadı" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Son sürüm kodu bulunamadı" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Son sürüm adı bulunamadı" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "Kaldırmak için {path} bulunamadı" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "İnceleme için APK {path} açılamadı: " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "\"{size}\" boyutu ayrıştırılamadı, yanlış tür \"{type}\"" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Uygulama kimliği bulunamadı" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "Herhangi bir sürüm bilgisi bulunamadı" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "Paket ID bulunamadı" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "Var olan imza anahtarı kurulumunun üzerine yazma korkakça reddediliyor!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "Yeni kapsayıcı \"{name}\" oluşturuldu" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "s3cmd yapılandırması için \"{path}\" oluşturuluyor." #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Creating empty {config_file}" msgstr "'{config_file}' okunuyor" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Günlük dizini oluşturuluyor" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "Yeni S3 kovası oluşturuluyor: {url}" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "Çıktı dizini oluşturuluyor" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "Bu anahtarla (SHA256) imzalı indeks oluşturuluyor:" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "Geçici dizin oluşturuluyor" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "İmzalama hazırlığı için imzalanmamış indeks oluşturuluyor" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "CurrentVersionCode {cv}, en eski derleme girişinden daha az {versionCode}" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "DEBUG_KEYSTORE ayarlı değil veya değer eksik" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "Depoda üst verisi olmayan APK ve/veya OBB dosyalarını sil" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "Arşiv siliniyor, depo çok büyük ({size}, en fazla {limit})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "git-mirror geçmişi siliniyor, depo çok büyük ({size}, en fazla {limit})" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "Bilinmeyen dosya siliniyor: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "Açıklama '%s' yalnızca uygulamanın özeti" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "Açıklamanın yinelenen satırı var" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "{length} uzunluğundaki açıklama, {limit} karakter sınırının üstünde" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "config/{name}.yml mı demek istediniz?" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "{code} mi demek istediniz?" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "Oluşturulan derleme girdilerine 'disable:' ekleme" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "Yeni dosyaları repo'ya dağıtmayın" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "URL'ye \"{path}\" ekleme!" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "Android SDK konumunu sorma, sadece başarısız ol" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "Anahtar deposundan oluşturulan özel anahtarları kaldırmayın" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "Bir kaynak tar dosyası yaratma, bir inşa sınanırken yararlıdır" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "Depoyu yenileme, bir inşa internet bağlantısı olmadan sınanırken yararlıdır" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "Rsync sağlama toplamlarını kullanma" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Küçük depoların tam yansımasını indir" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Depoyu indirmek zaten bir kez başarısız oldu, tekrar denenmiyor." #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "{url} indirme başarısız. {error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "{path} adresindeki yinelenen Anti-Özellik bildirimi göz ardı edildi!" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "Aynalar yapılandırmasında yinelenen \"%s\" girişi!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "'{field}' içinde yinelenen bağlantı: {url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "HATA: %(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "HATA: \"server\" alt komutu kaldırıldı, \"deploy\" kullanın!" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "HATA: desteklenmeyen CI türü, yama gönderebilirsiniz!" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "HATA: desteklenmeyen git ana makinesi \"%s\", yama gönderebilirsiniz!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "HATA: {path} içindeki {key} \"archive\" veya \"repo\" değil!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "HATA: {path} içindeki {key}:{subkey} izin verilen anahtarlar içinde değil: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "Kodlama '{enc}' olarak ayarlandı, fdroid kodlama sorunlarıyla karşılaşabilir. En iyi sonuçlar için lütfen 'UTF-8' olarak ayarlayın." #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" "Android SDK (%s) konumunu buraya girin:\n" "> " #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "{configname} içinden {var} ortam değişkeni ayarlı değil!" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "{configname} içinden {var} ortam değişkeni ayarlı değil!" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "'github_releases' dağıtılırken hata oluştu, {} yok. (Önce `fdroid update` komutunu çalıştırmanız gerekebilir.)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "Depo adresi alınırken hata" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "Sorun bulunursa sıfır olmayan bir kodla çıkın" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "Bir kaynak depodan uygulama üst verilerini ayıkla" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "APK'lardan imzaları ayıkla" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "{path} kopyalanamadı: {error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "'{apkfilename}' için imza alınamadı: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "{path} okunamadı: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "{path} yeniden boyutlandırılamadı: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "S3 kovası oluşturulamadı: {url}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "APK bilgisi alınamadı, {path} siliniyor" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "APK bilgisi alınamadı, {path} atlanıyor" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "APK imzalama anahtarı parmak izi alınamadı" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "'{apkfilename}' {dev} üstüne kurulamadı: {error}" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "Uygulama imzalanamadı" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "VM'den buildserverid alındı: {buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "'{apkfilename}' için imzalar alındı -> '{sigdir}'" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "Dosya işlenirken kayboldu: {path}" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "Tamamlandı" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Yasaklı HTML etiketleri" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "Devre dışı uygulamaların inşasını zorunlu kıl, ve tarama problemi olsa bile devam et. Sadece sınama kipinde izin verilir." #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "İnşa, {0} saniye zaman aşımından sonra zorla durduruluyor!" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "Devre dışı bırakılan uygulamaların ve derlemelerin taranmasını zorla." #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "\"{name}\" uygulaması için üst verisi olmayan \"{path}\" grafiği bulundu!" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "\"{name}\" için hatalı ödeme dosyası \"{path}\" bulundu:" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "Argümanda geçersiz appid'ler bulundu" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "Bazı uygulamalar için geçersiz versionCodes bulundu" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "{path} içinde birden fazla JAR İmza Blok Dosyası bulundu" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "Birden çok imzalama sertifikası bulundu!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "{appid} için birden çok üst veri dosyası bulundu" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "Depo için birden çok imzalama sertifikası bulundu." #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "Depo için imzalama sertifikaları bulunmadı." #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "%s konumunda dosya olmayan bulundu" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "{url} adresinde {apkfilename} bulundu" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "{filename} içinde {count} sorun bulundu" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "{filename} içinde {count} uyarı bulundu" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "{appid} için iskelet üst veri oluşturuldu" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "'%s' için git checkout başarısız" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "Git clean başarısız" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "Git fetch başarısız" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Git remote set-head başarısız: \"%s\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Git reset başarısız" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "Git alt modülü iptali başarısız oldu" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "Git alt modülü eşzamanlaması başarısız oldu" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "Git alt modülü güncellemesi başarısız oldu" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "Subversion URL'leriyle HTTPS kullanılmalı!" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "Git yansısı çok büyük olursa, arşivin silinmesine izin ver" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "Bu yükleme başarısız olursa, {url} adresine elle yüklemeyi deneyin" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "Kullanımdan kaldırıldığı için '{metapath}' üst verilerindeki '{field}' yok sayılıyor." #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "2048'den uzun FUNDING.yml girdisi yok sayılıyor: %s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "Manifestteki hatalı öğe yok sayılıyor: %s" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "{oldfile} kullanımdan kaldırıldı, {newfile} kullanın" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Üst verisiz paket yok sayılıyor: " #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "{apkfilename} için eskimiş önbellek verisi yok sayılıyor" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "MD5 gibi devre dışı algoritmalarla imzalanmış APK'ları dahil et" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "PGP imzası .asc dosyalarını yansıya dahil et" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "Derleme günlüklerini yansıya dahil et" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "Kaynak tar arşivlerini yansıya dahil et" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "%s@%s üst verileri dahil ediliyor" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "{path} üst verileri dahil ediliyor" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "Alt modüller başlatılıyor" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "Kullanılabilir tüm imzalı uygulamaları kur" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "Oluşturulan paketleri aygıtlara kur" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "%s kuruluyor..." #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "{dev} üzerinde '{apkfilename}' kuruluyor..." #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "Depo HTTP sunucusu ile etkileşim kur" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "Geçersiz APK" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "Geçersiz AutoUpdateMode: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "Geçersiz UpdateCheckMode: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "Geçersiz Vercode İşlemi: {field}" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "Geçersiz VercodeOperation: {invalid_ops}" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "Geçersiz uygulama kimliği {appid}" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Geçersiz madde imli liste" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "Yayımlanmış dosya için geçersiz ad: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "Geçersiz ndk: yapıdaki değer: \"{ndk}\"" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "HTTPS olmayanlara geçersiz yönlendirme: {before} -> {after} " #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "Geçersiz scrlib üst verisi: '{file}' dosyası yok" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "Geçersiz srclib üst verisi: '{file}' ayrıştırılamadı" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "Geçersiz srclib üst verisi: '{file}' içinde bilinmeyen anahtar '{key}'" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "JAR imzası doğrulanamadı: {path}" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "JAR imzası doğrulandı: {path}" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "Java JAR dosyası" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "Java JDK bulunmadı! Standart konumda kurun veya java_paths'i ayarlayın!" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "Java derlenmiş sınıf" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "Java jarsigner bulunamadı! Standart konuma kurun veya java_path ayarlayın!" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "HTML src özniteliklerinde javascript" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "Başarısız yapı \"{apkfilename}\" tutuluyor" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "İmzalama için anahtar deposu:\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "AllowedAPKSigningKeys içinde bilinen hata ayıklama anahtarı kullanılıyor: " #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "Son kullanılan işleme '{commit}' bir etiket gibi görünüyor, ama UpdateCheckMode '{ucm}'" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "Liberapay bağış yöntemleri Liberapay: alanında olmalı" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "Yeniden biçimlendirilecek olan dosyaları listele (deneme çalışması)" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "f-droid.org URL'sine dahil yerel ayar" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "Özel durumlarda inşayı durdur" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "Bozuk depo yansımaları." #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "Bozuk serverwebroot satırı:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "ZIP dosyasında azami özyineleme derinliğine ulaşıldı: %s" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Tüm dosya türlerini, tam depoyu ve arşivi yansıla." #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "Eksik çıktı dizini" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "Anti-Özellik bildirimlerinin yerelleştirilmiş dosyalara taşınıyor:" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "config.yml dosyasında ne \"repo_pubkey\" ne de \"keystorepass\" ayarlandı" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "Paket için APK yok: %s" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "Android SDK bulunamadı!" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "Bağlı aygıt bulunamadı" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "URL'de parmak izi yok." #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "Kullanılabilir git alt modülü yok" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "Gradle projesi bulunamadı. --subdir belirtin?" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "Bilgi bulunamadı." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "Eşleşen etiket bulunamadı" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "{0} içinde en düşük SDK sürümü bulunamadı, öntanımlı değer kullanılıyor (3)." #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "Uygulamanın Özgür Yazılım olduğunu belirtmeye gerek yok" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "Uygulamanın Android için olduğunu belirtmeye gerek yok" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "Ayarlı seçenek yok! Sunlardan en az birini ayarlamak için config.yml dosyanızı düzenleyin:" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "Belirtilen paket yok" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "%s için kullanılabilir imzalanmış APK yok" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "İmzalanmış çıktı dizini yok - yapılacak işlem yok" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "{path} içinde imzalama sertifikaları bulunamadı" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "Böyle bir paket yok: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "Uygulama {appid} için böyle bir versionCode {versionCode} yok" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "Etiket bulunamadı" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "İmzalanmamış dizin yok - yapılacak işlem yok" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "Sürüm bilgisi bulunamadı." #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "Geçerli bir boyut tanımı değil: \"{}\"" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "Yapılacak işlem yok" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "{appid} için yapılacak işlem yok." #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "Şimdi bunları config.yml içinde ayarlayın:" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "OBB dosyasının her APK'dan daha yeni versionCode'u({integer}) var:" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "OBB dosya adı \"main.\" veya \"patch.\" ile başlamalıdır:" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "OBB'ın packagename değeri desteklenen APK ile eşleşmiyor:" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Çevrim dışı makine, `fdroid deploy` komutuna kadar git yansı oluşturma atlanıyor" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "'github_releases' yapılandırma ögelerinden birinde 'packageNames' değeri eksik. atlanıyor..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "'github_releases' yapılandırma ögelerinden birinde 'projectUrl' değeri eksik. atlanıyor..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "'github_releases' yapılandırma ögelerinden birinde 'token' değeri eksik. atlanıyor..." #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Grafikler için yalnızca PNG ve JPEG desteklenir, bulunan: {path}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "Yalnızca kendiliğinden güncellemesi olan uygulamaları işle" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "OpenCollective bağış yöntemleri OpenCollective: alanında olmalı" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "APK'den sonra adlandırılmış dosyaya JSON raporu yazdırın." #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "Standart çıkışa JSON yazdır." #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "JSON yazdırılıyor" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "Projenin genel lisansı." #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "{apkfilename} içindeki boş versionName değerine üst verideki yazılıyor: {version}" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "\"{appid}\" paketi zaten var" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "'{path}' konumundaki bildirim ayrıştırılıyor" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "Kullanıcı adıyla parola gerekli" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "Kökte değilse, ana Android proje alt dizininin konumu." #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "Android SDK konumu (bazen ANDROID_HOME'da ayarlıdır)" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "Günlük olarak kullanılacak git deposunun konumu" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "Depo imzalama anahtarı için anahtar deposunun konumu" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Kolay kopyala yapıştır için gizli değişkeni terminale yaz" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "ZIP dosyası ile ilgili sorun: %s, hata %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "'{path}' konumundaki xml ile ilgili sorun" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "Kendiliğinden güncellemeleri işle" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "{apkfilename} işleniyor" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "{appid} işleniyor" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "İndeks dosyaları için okunabilir XML/JSON üret" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "İçe aktarma için proje URL'si." #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "Noktalama işaretlerinden kaçınılmalı" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "Günlüğü bu git uzak deposuna it" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "İkili şeffaflık günlüğü {url} konumuna gönderiliyor" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "Uzak sunucuya gönderme başarısız oldu!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "{url} adresine itiliyor" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "Hızlıca yeni bir depo başlat" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "Tüm üst veri dosyalarını oku ve çık" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "'{config_file}' okunuyor" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "packageName/versionCode/versionName okuma başarısız, APK geçersiz: '{apkfilename}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "packageName/versionCode/versionName okuma başarısız, APK geçersiz: '{apkfilename}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "{apkfilename} önbellekten okunuyor" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Tarayıcı kurallarını ve imzalarını ağdan yenile ve önbelleğe al" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Belirtilen dosyalar kaldırılıyor" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "\"{path}\" kaldırılıyor" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "paket.adı_123.apk örüntüsüyle eşleşmeyen tüm APK dosyalarını yeniden adlandır" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "{apkfilename} sağlanan debug.keystore ile yeniden imzalanıyor" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "Piksel boyut sınırını aşan tüm simgeleri yeniden boyutlandır ve çık" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "Çıkışı uyarılara ve hatalara kısıtla" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Tüm üst veri dosyalarını yeniden yaz" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "'{appid}' yeniden yazılıyor" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "Değişiklikleri olmayan git repo üzerinde çalış" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "-debug.apk'yı bulmak için {cibase} üzerinden çalıştırın ve {repo_basedir} repo_basedir'i atlayın" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "Biçimlemeyi düzeltmek için rewritemeta çalıştır" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "İlk geçiş MD5 doğrulama olmadan çalıştırılıyor" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "{path} konumunda wget çalıştırılıyor" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "{url}'nin SHA-256'sı girişle eşleşmiyor!" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "Bilinen özgür olmayan sınıflar için ortaya çıkan APK'leri tara." #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "Bir paketin kaynak kodunu tara" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "Tarayıcı {apk} içinde {count} sorun buldu" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "Tarayıcı {appid} içinde {count} sorun buldu:" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "Tarayıcı {appid}:{versionCode} içinde {count} sorun buldu:" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "Tarayıcı {} sorun buldu" msgstr[1] "Tarayıcı {} sorun buldu" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "Bilinen özgür olmayan sınıflar için dexdump ile APK taranıyor." #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "NDK {release} ({version}) kuruldu" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "Saati o zamana şunu kullanarak ayarla:" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "Eskileri arşivlenmeden önce depodaki en yüksek sürümleri ayarla" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "Açık dosya sınırını {integer} olarak ayarla" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "Gecelik bir inşa deposu için bir uygulama inşası kurun" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "Açık dosya sınırı ayarı başarısız: " #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "Bu inşa için {0} sn zaman aşımı ayarlanıyor" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "Paketleri imzala ve depoya yerleştir" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "update --nosign ile yaratılan indeksleri imzala" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "Kaynak kodu, çalıştırılabilir dosyalar ve diğer sorunlar için taramayı atla" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "Geçersiz imzalı '{apkfilename}' atlanıyor!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "Depo çok büyük olduğundan (>%.2fGB) GitLab Sayfaları yansısı atlanıyor!" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "{appid} için indeks üretimi atlanıyor" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "Geçersiz imzalı {apkfilename} atlanıyor!" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "{appid} atlanıyor: devre dışı" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "Deponun eşleneceği yerel bir klasör belirtin" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "Rsync için SSH'a sağlanacak bir kimlik dosyası belirtin" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "Kullanılacak hata ayıklama anahtar deposu dosyasını belirtin." #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "Olağandan daha da çok bilgi çıkart" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "Gizemli imza {apkfilename} dosyasından kaldırılıyor" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "Özet '%s' yalnızca uygulamanın adı" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "{length} uzunluğundaki özet, {limit} karakter sınırının üstünde" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "Sistem saati {path} konumundaki tarihten daha eski!" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "Etiket güncelleme modu şu anda yalnızca git, hg, bzr ve git-svn depoları için çalışıyor" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "git-svn'de etiket güncelleme modu kullanıldı, ancak depo etiketlerle ayarlanmadı" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Sınama kipi - çıkışı sadece tmp dizinine koy, ve her zaman inşa et, çıkış zaten var olsa bile." #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "OBB sürüm kodu \"{name}.\" adından sonra gelmelidir:" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "Günlüğe kaydedilecek depo için temel URL (öntanımlı olarak: https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "Yansımanın yazılacağı dizin" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "Repo'ya dahil edilecek dosya (yol veya glob)" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "Deponun parmak izi eşleşmiyor." #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "local_copy_dir \"{path}\" için kök dizini yok!" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "Bir keyalias çakışması var - yayımlama durdu" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "Bunlar ana depodan arşivlenmiş uygulamalardır." #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "Bu komut asla f-droid.org'u yansıtmak için kullanılmamalıdır! Tam bir kopya 600GB'tan çok yer gerektirir." #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "Bu, F-Droid ile kullanılacak uygulamaların bir deposudur. Bu depodaki uygulamalar ya gerçek uygulama geliştiricileri tarafından oluşturulan resmi ikili dosyalardır ya da https://gitlab.com/fdroid adresindeki araçlar kullanılarak f-droid.org yöneticisi tarafından kaynaktan oluşturulan ikili dosyalardır." #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "Bu deponun zaten yerel üst verisi var: %s" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" "Kurulumu tamamlamak için APK'larınızı \"%s\" içine\n" "ekleyin ve ardından \"fdroid update -c; fdroid update\" komutunu çalıştırın. URL'yi, depo\n" "adını ve daha fazlasını ayarlamak için \"config.yml\" dosyasını da düzenlemek isteyebilirsiniz.\n" "Ayrıca bir imzalama anahtarı da ayarlamalısınız (geçici bir anahtar otomatik olarak oluşturulmuş olabilir).\n" "\n" "Daha fazla bilgi için: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "ve https://f-droid.org/docs/Signing_Process" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "Awsbucket kullanmak için, awssecretkey ve awsaccesskeyid de config.yml içinde ayarlanmalı!" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "rclone kullanmak için, rclone_config ve awsbucket config.yml içinde ayarlanmalı!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "URL https:// veya http:// ile başlamalı" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "URL kısaltıcılar kullanılmamalı" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "Açıklamada URL {url}: {error}" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "Beklenmeyen lisans etiketi \"{}\"! Yalnızca https://spdx.org/license-list adresindeki FSF veya OSI onaylı etiketleri kullanın" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Beklenmeyen lisans etiketi \"{}\"! Yalnızca yapılandırma dosyanızda yapılandırılan lisans etiketlerini kullanın" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "{configname} içinde bilinmeyen girdi {key}" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "Bilinmeyen istisna bulundu!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "İnşa '{versionName}' içinde bilinmeyen dosya '{filename}'" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "Bilinmeyen üst veri biçimi: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "Bilinmeyen üst veri biçimi: {path} (şunu kullanın: *.yml)" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "aapt'nin bilinmeyen sürümü, soruna neden olabilir: " #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "Gereksiz ön boşluk" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "Gereksiz son boşluk" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "'{path}'deki tanınmayan uygulama alanı '{fieldname}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "'{path}'de tanınmayan yapı bayrağı '{build_flag}'" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "Depo grafiği için desteklenmeyen dosya türü \"{extension}\"" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "Desteklenmeyen grafik dosyası bulundu: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "%s konumunda kullanılmayan extlib" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "%s konumunda kullanılmayan dosya" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "Kullanılmayan scandelete yolu: %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "Kullanılmayan scanignore yolu: %s" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Yeni paketler için depo bilgisini güncelle" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "Bir URL için çalıştırılabilir şeffaflık günlüğünü güncelle" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData geçersiz URL'ye sahip: {url}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "UpdateCheckData tam sayı olarak sürüm koduyla eşleşmelidir (\\d veya [0-9]): {codeex}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "UpdateCheckData, HTTPS URL'sini kullanmalıdır: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "UpdateCheckData geçerli bir URL değil: {url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode ayarlı ancak checkupdates henüz çalıştırılmamış gibi görünüyor." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName bilinen uygulama kimliğine ayarlı - kaldırılabilir" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "{apkfilename}, androidobservatory.org'a yükleniyor" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "{apkfilename} virustotal'e yükleniyor" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Öntanımlı daldaki bir dosyaya işaret etmek için /master veya /main yerine /HEAD kullanın" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Onu oluşturmak için `fdroid update -c` kullanın." #: ../fdroidserver/build.py msgid "Use build server" msgstr "İnşa sunucusu kullan" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "Yeni eklenen APKlar için o anki zaman yerine APK'daki tarihi kullan" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "s3cmd yapılandırması için \"{path}\" kullanılıyor." #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "Uzak depolama ile eşitlemek için \"{path}\" kullanılıyor." #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "APK İmza v2 kullanılıyor" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "APK İmza v3 kullanılıyor" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "JAR İmza kullanılıyor" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Java'nın jarsigner'ı kullanılıyor, APK'ları doğrulamak için önerilmez! apksigner'ı kullanın" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "{path} içeriği yerine boş sözlük kullanılıyor!" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "Var olan anahtar deposu \"{path}\" kullanılıyor" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "{url} ile eşitleme için rclone kullanılıyor" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "{url} ile eşitleme için s3cmd kullanılıyor" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Geçerli komutlar:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "Yeniden yükleme yerine yerel olarak önbelleğe alınmış kopyaya karşı doğrulayın." #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "İndirilen paketlerin bütünlüğünü doğrula" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "İndeks imzası doğrulanıyor:" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "VirusTotal API anahtarı 32MB'den büyük dosyaları yükleyemiyor, {path} yüklemek için {url} kullanın." #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Olası üst veri hataları hakkında uyar" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "İmzalı indeksler için yapılandırıldığında, bu aşamada sadece imzasız indeksleri yarat" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "Tüm depo denetlenirken yamllint öntanımlı olarak devre dışı bırakılır. Bu seçenek, yamllint kullanımını ne olursa olsun zorlar." #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "İmzalama veya doğrulama başarısız olduğunda, bir hata koduyla çık." #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "Anahtarlar üretilirken X.509 'Distinguished Name' kullanılır" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "SDK'nızın konumunu ayarlamak için ANDROID_HOME'u kullanabilirsiniz:" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "ZIP dosya arşivi" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "IdentityFile {path} konumuna ekleniyor" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "{name} adına ekleniyor: {path}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "belirsiz şeçenek: %(option)s ile %(matches)s eşleşebilir" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "apksigner bulunamadı! Modern APK'lar imzalanamıyor veya doğrulanamıyor" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "apksigner bulunamadı, imzalamak için gereklidir!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "üzerinde işlem yapılacak dosyanın uygulama kimliği" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "UYGULAMA_KİMLİĞİ[:SÜRÜM_KODU] biçiminde isteğe bağlı versionCode ile uygulama kimliği" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "archive_url'nin /archive ile bitmesi gerekiyor" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "%r kipiyle \"-\" argümanı" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "argüman %(argument_name)s: %(message)s" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "Dağıtım anahtarını sınamak için çıplak SSH bağlantısı deneniyor:" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "scrlib belirtimi ayrıştırılamıyor (bir dizge değil): '{}'" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "'%(filename)s' açılamıyor: %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "https olmayan url açılamıyor: '{};" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "gerekli srclibs bulunamıyor: \"{path}\"" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "birden çok alt-ayrıştırıcı argümanı verilemez" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "eylemler birleştirilemiyor - %r adlı iki grup" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "güncelleme yayımlanamıyor, dağıtım anahtarını ayarladınız mı?" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "{url} klonlanıyor" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "eklenti modüllerinden komutlar:" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "çakışan seçenek satırı: %s" msgstr[1] "çakışan seçenek satırları: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "çakışan alt ayrıştırıcı takma adı: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "çakışan alt ayrıştırıcı: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "'{path}' ayrıştırılamadı" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "srclib belirtimi ayrıştırılamadı (ad belirtilmedi): '{}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "srclib belirtimi ayrıştırılamadı (referans belirtilmedi): '{}'" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "{path} oluşturuldu" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "şu anki sürüm daha yeni: eski sürüm kodu={old}, yeni sürüm kodu={new}" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "siliniyor: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "kilitsiz bağımlılık dosyası" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "{path} işlem günlüğü {dest}'e dağıtıldı" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "dest= %r gibi seçenekler için gerekli" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "'{}' indiriliyor" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "'{}' tarayıcı imzalarının indirilmesi başarısız oldu" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "çalıştırılabilir ikili dosya, muhtemelen kod" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "beklenen %s argümandı" msgstr[1] "beklenen %s argümandı" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "beklenen en az bir argümandı" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "beklenen en çok bir argümandı" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "beklenen bir argümandı" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "fdroid [] [-h|--help|--version|]" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "imzaların en son sürümünü internetten al" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "üst veri hatalarının (öntanımlı) uyarı olmasını veya yok sayılmasını zorunlu kıl." #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "git svn clone başarısız" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "gzip dosya arşivi" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "açık argüman %r yok sayıldı" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1 bir imzaya sahip olmalı, oluşturmak için `fdroid signindex` kullanın!" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 bir imzaya sahip olmalı, oluşturmak için `fdroid signindex` kullanın!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "geçersiz %(type)s değeri: %(value)r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "geçersiz seçim: %(value)r (%(choices)s içinden seçin)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "geçersiz conflict_resolution değeri: %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "geçersiz seçenek satırı %(option)r: %(prefix_chars)r karakteri ile başlamalı" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "ipfs_cid bulunamadı, CIDv1 oluşturma atlanıyor" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "en son yapı tarifi daha yeni: eski sürüm kodu={old}, yeni sürüm kodu={new}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "local_copy_dir \"fdroid\" ile sonlanmıyor, belki de \"{path}\" demek istediniz" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "local_copy_dir mutlak bir yol olmalı!" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "local_copy_dir bir dizin olmalı, dosya değil!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "Yansıma '%s' 'fdroid' ile bitmiyor!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "yansı iki defa ayarlandı, config.yml ve {path} içinde!" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "birbirinden bağımsız argümanlar isteğe bağlı olmalıdır" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "sonraki {name} önbellek güncellemesi {time} içinde" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "{appid} içinde simge yok" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "APK sağlanmadı" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "sürüm bilgisi bulunamadı" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "argüman %s ile izin verilmez" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "%s argümanlarından biri gerekli" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "yalnızca dizgileri, listeleri ve demetleri (tuple) kabul eder" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "seçenekler" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "var olan {path} üzerine yazılıyor" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "konumsal argümanlar" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "{path} işlem günlüğünü {dest}'e dağıtma başarısız oldu!" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "referans ikili eksik imza" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "güvensiz HTTP bağlantısı ile indirmeyi reddet (HTTPS kullanın veya --no-https-check belirtin): {apkfilename}" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "repo_icon \"repo/icons/%s\" yok, yer tutucu oluşturuyor." #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "repo_url'nin /repo ile bitmesi gerekiyor" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "rsync eksik veya bozuk: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd sync {path} konumunu {url} adresine indeksler ve siler" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "s3cmd {path} ile {url} arasındaki dizinleri indeksler ve kaldırılanları siler" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "tarayıcı önbelleği bozuk! Şu şekilde temizleyebilirsiniz: '{clear}'" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "serverwebroot: yol \"fdroid\" ile sonlanmıyor, belki de bunlardan birini demek istediniz:" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "paylaşımlı kütüphane" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "bu yardım yazısını göster ve çık" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "imzalanmış APK ya bir dosya konumu ya da bir HTTPS URL." #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "tam yapı günlüklerini dağıtmayı atla: günlük içeriği boş" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "tam yapı günlüklerini dağıtmayı atla: yapılandırmada etkin değil" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "kaynak tarball'ı atlanıyor: {path}" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "srclibs'de ad ve/veya @ eksik" #: ../fdroidserver/scanner.py msgid "static library" msgstr "statik kütüphane" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "sağlanan referans ikilisi {signer} imzalayana izin verdi" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "şu argümanlar gerekli: %s" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "beklenmeyen seçenek satırı: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "bilinmeyen ayrıştırıcı %(parser_name)r (seçenekler: %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "tanınmayan argümanlar: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "'{config_file}' üzerinde güvenli olmayan izinler (0600 olmalı)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "kullanım: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "{url} ile eşitleme için Apache libcloud kullanılıyor" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com hızı sınırlıyor, yeniden deneme bekleniyor..." #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "{0} uygulama, {1} anahtar adı" msgstr[1] "{0} uygulama, {1} anahtar adı" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename}{appid} üst verisi yok!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "{apkfilename} içindeki AndroidManifest.xml tarihi bozuk: " #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} bir ada sahip değil! Bunun yerine uygulama kimliği kullanılıyor." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "{path}'den {appid} geçerli bir Android uygulama kimliği değil!" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "{path}'den {appid} geçerli bir Java Paket Adı değil!" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "{appid} hem APK hem de dosyalara sahip: {files}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "{appid} içinde {name} eksik" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "{appid}: İnşa '{versionName}' içinde bilinmeyen extlib {path}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "{appid}: belirtilen inşa yok, şu anki kaynak durumu üstünden çalıştırılıyor" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "{appid}: {field} bir '{type}' olmalı, fakat o bir '{fieldtype}!'" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "{appid}: {field} bir '{type}' olmalı, fakat o bir '{fieldtype}'!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "{build_flag} bir tam sayı olmalıdır, bulunan: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "{build_flag} liste veya dize olmalıdır, bulunan: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "{file} boş veya bozuk!" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" yok! config.yml içinde düzeltin." #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "{path} zaten var, içe aktarma sonuçları yok sayılıyor!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "{path} yok! Şunu çalıştırarak oluşturun:" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "{path} konumunun bozuk imzası \"{pattern}\" var, olası Janus istismarı!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} virustotal tarafından {count} defa işaretlendi:" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "{path} \"anahtar: değer\" sözlüğü değil, ancak {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "{path} standart bir yapılandırma dosyası değil!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "{path} liste değil, ancak {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "{path} {expected_type} değil, ancak {datatype}!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "{path} boyutu sıfır!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "{path} 200MB'den fazla, elle yükleyin: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "{path}: \"{code}\" geçerli bir ISO_3166-1 alpha-2 ülke kodu değil!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "{path}: {error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "{url} \"fdroid\" ile bitmiyor, URL konumunu doğrulayın!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "{url} \"http\" ile başlamıyor!" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "{} inşa başarısız" msgstr[1] "{} inşa başarısız" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "{} inşa başarılı" msgstr[1] "{} inşa başarılı" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/tzm/0000755000175000017500000000000014770510164014775 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/tzm/LC_MESSAGES/0000755000175000017500000000000014770510164016562 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/tzm/LC_MESSAGES/fdroidserver.po0000644000175000017500000017524214770507747021650 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Hakim Oubouali , 2020. msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.1-681-gc19e8952\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2020-10-29 08:32+0000\n" "Last-Translator: Hakim Oubouali \n" "Language-Team: Central Atlas Tamazight \n" "Language: tzm\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n >= 2 && (n < 11 || n > 99);\n" "X-Generator: Weblate 4.3.2-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: tazgalt: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" msgstr "Tidɣrin" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "" msgstr[1] "" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/ug/0000755000175000017500000000000014770510164014576 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/ug/LC_MESSAGES/0000755000175000017500000000000014770510164016363 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/ug/LC_MESSAGES/fdroidserver.po0000644000175000017500000017567514770507747021463 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.0-95-gd7af22b\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2018-06-08 03:44+0000\n" "Last-Translator: ۋولقان \n" "Language-Team: Uyghur \n" "Language: ug\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 3.0\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "مەنبەدىن بىر بوغچا قۇرۇش" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, fuzzy, python-format msgid "Categories '%s' is not valid" msgstr "تۈرلەر قۇرۇلمىغان '%s'" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "تۈرلەر قۇرۇلمىغان" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Invalid application ID {appid}" msgstr "{appid} ئىچىدە \"سىنبەلگە\" تېپىلمىدى" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "" #: ../fdroidserver/__main__.py #, fuzzy msgid "No version information could be found." msgstr "نەشىر ئۇچۇرى تېپىلمىدى!" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" msgstr "" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "{appid} ئىچىدە \"سىنبەلگە\" تېپىلمىدى" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "ھېچقانداق APK تەمىنلەنمىگەن" #: ../fdroidserver/checkupdates.py #, fuzzy msgid "no version information found" msgstr "نەشىر ئۇچۇرى تېپىلمىدى!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "" #: ../fdroidserver/scanner.py msgid "static library" msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" #: ../fdroidserver/install.py msgid "yes" msgstr "" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "" msgstr[1] "" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "" msgstr[1] "" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/uk/0000755000175000017500000000000014770510164014602 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/uk/LC_MESSAGES/0000755000175000017500000000000014770510164016367 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/uk/LC_MESSAGES/fdroidserver.po0000644000175000017500000033334614770507747021456 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # Hans-Christoph Steiner , 2020. # ihor_ck , 2020. # Ihor Hordiichuk , 2020, 2021, 2022, 2023, 2024, 2025. # Tymofij Lytvynenko , 2021. # DankXylese , 2021. # Dan , 2022. # Sergii Horichenko , 2023. # Макар Разин , 2023. # Tymofii Lytvynenko , 2024. # Fqwe1 , 2024. # Nazar , 2024. # Максим Горпиніч , 2024. # Максим Горпиніч , 2025. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2025-03-24 14:02+0000\n" "Last-Translator: Ihor Hordiichuk \n" "Language-Team: Ukrainian \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Weblate 5.11-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "Загальнодоступний ключ SSH буде використано як ключ розгортання:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "{path} закодовано для таємної змінної DEBUG_KEYSTORE:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" не має відповідного файлу метаданих!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "Ключ \"isPrimary\" не слід додавати до дзеркал!" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "\"local_copy_dir\" {path} не існує!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" вже встановлено на {dev}." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "\"{path}\" містить найновішу {name}{version}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "\"{path}\" існує, але s3cmd не встановлений!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "\"{path}\" має непідтримуваний формат (скористайтеся: metadata/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "«{path}» підписано не дозволеним ключем:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" є недійсною URL-адресою!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s: помилка: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "%d APK не вдалося підписати або перевірити!" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d знайдено проблем" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%r не можна викликати" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "%s не створює dict!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "%s має неправильний SHA-256: %s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s не є прийнятним полем для створення" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' не знайдено в config.yml!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "'keystore' — NONE і 'smartcardoptions' порожній!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "'keystore' не знайдено в config.yml!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "'keystorepass' не знайдено в config.yml!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' не знайдено в config.yml!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required' недійсний аргумент для позицій" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "'sdk_path' не встановлено в config.yml!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' занадто старий, fdroid вимагає build-tools-{version} або новіший!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "'{path}' не вдалося виконати!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' має недійсний формат, це має бути словник!" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' не є правильним {field} у {appid}. Правильний приклад: {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' не є дійсним {field}, має бути {pattern}" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "--merge-request працює лише в одній програмі!" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "... checkupdate не вдалося для {appid} : {error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() не визначено" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "/issues відсутній" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "URL потребується як аргумент!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "APK-підписи мають різні сертифікати у {path}:" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "Додати підписи GnuPG для пакунків у репозиторії" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "Створіть ключ підписування репозиторіїв до непідписаного репозиторію" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "Додати тулуб файлових метаданих файлів для пакунків APK, яких бракує" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "Додати новий репозиторій лише для {name}" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "Псевдонім підписного ключа репозиторію у сховищі ключів" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "AllowedAPKSigningKeys відсутні, але надається посилання на двійковий файл" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "Дозволяє вказати іншу версію (або git гілку) для початкового імпорту" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "Також відзеркалити всю секцію архіву" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "Також попередити про проблеми форматування, наприклад rewritemeta -l" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "Бібліотека Android AAR" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "Файл Android APK" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "Код Android DEX" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "Android SDK не знайдено в {path}!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "Android SDK шлях '{path}' не існує!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "Android SDK шлях '{path}' це не каталог!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "Інструмент Android SDK {cmd} не знайдено!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Програма має двійкові файли, але не має відповідних AllowedAPKSigningKeys для закріплення сертифіката." #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "Застосунок має NoSourceSince або ArchivePolicy «0 версій», але AutoUpdateMode або UpdateCheckMode не дорівнюють None" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "Застосунок '{repo}' але має ланку до {url}" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Версія програми має двійковий код, але не має відповідних AllowedAPKSigningKeys для закріплення сертифіката." #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "Додавання .git не потрібно" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "Архівую {apkfilename} з неправильним підписом!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode з UpdateCheckMode: HTTP повинен мати шаблон." #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "Автоматичне ні для всіх підказок." #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "Автоматичне «так» на всі підказки." #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "Неправильний тип запису \"{mirrortype}\" у конфігурації дзеркал: {mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "Базова URL-адреса для дзеркала може містити ключ підпису індексу за допомогою рядка запиту: ?fingerprint=" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "Гілка \"{branch}\" використовується як подання до збірки '{versionName}'" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "Гілка '{branch}' використовується як подання в бібліотеку srclib '{srclib}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "Недійсне посилання: {path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "Зібрати пакунок з джерела" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "Створіть всі доступні застосунки" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "Збірку, створено за допомогою `fdroid import` - видаліть рядок вимикання після готовності" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "У git-репозиторії з метаданими збірки є незбережені зміни!" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "Побудуйте лише найновішу версію кожного пакунка" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "Вбудований репозиторій створено у \"%s\" на основі конфігурації:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "Автооновлення застосунку без CurrentVersionCode неможливе" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Неможливо створити через {} помилку під час сканування" msgstr[1] "Неможливо створити через {} помилки під час сканування" msgstr[2] "Неможливо створити через {} помилок під час сканування" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Не вдалося перезаписати шлях \"{path}\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "Категорія '%s' неприпустима" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "Категорії не встановлено" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "Категорія «{category}» визначена, але не використовується для жодного застосунку!" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "Перевірте наявність оновлень для застосунків" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "Перевірка архівації на {appid} — apks:{integer}, keepversions:{keep}, archapks:{arch}" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Очистити оновлення - не використовує кеш, повторно обробляє всі APK" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "Розфарбуйте результат журналу" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Список категорій, розділених комами." #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "Команда '%s' не визнана.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "Прийняти зміни" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "Зафіксуйте зміни, натисніть, а потім зробіть запит на злиття" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr "Конфлікт визначень \"{field}\" між .yml і локалізованими файлами:" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Конфліктні аргументи: \"---verbose\" і \"--quiet\" не можна вказати одночасно." #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "Не вдалося знайти '{command}' у вашій системі" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Не вдалося знайти останню версію коду" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Не вдалося знайти найновішу назву версії" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "Не вдалося знайти шлях {path}, щоб вилучити його" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "Не вдалося відкрити файл APK {path} для аналізу: " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Не вдалося проаналізувати розмір \"{size}\", неправильний тип \"{type}\"" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Не вдалося знайти ID застосунку" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "Не вдалося знайти відомості про версію" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "Не вдається знайти ідентифікатор пакунка" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "Боязно трохи, ми відмовляємося перезаписувати наявний ключ підписування!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "Створено новий контейнер \"{name}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Створення \"{path}\" для налаштування s3cmd." #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "Створення порожнього {config_file}" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Створення каталогу журналу" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "Створення нового блоку S3: {url}" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "Створення вихідного каталогу" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "Створення підписаного індексу за допомогою цієї клавіші (SHA256):" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "Створення тимчасового каталогу" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "Створення непідписаного індексу під час підготовки до підписання" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "CurrentVersionCode {cv} менше, ніж найстаріший запис збірки {versionCode}" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "DEBUG_KEYSTORE не встановлено або значення є неповним" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "Видалити APK та/або OBB без метаданих з репозиторію" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "Видалення архіву, репозиторій завеликий ({size} макс. {limit})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "Видалення історії git-mirror, репозиторій завеликий ({size} макс {limit})" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "Видалення невідомого файлу: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "Опис '%s' є лише резюме застосунку" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "Опис містить дублікат рядка" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "Довжина опису {length} перевищує ліміт {limit}" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "Ви мали на увазі config/{name}.yml?" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "Ви мали на увазі {code}?" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "Не додавайте 'disable:' до створених записів збірки" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "Не розміщувати нові файли до репозиторію одразу" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "Не включайте \"{path}\" до URL-адреси!" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "Не точний шлях Android SDK, просто збій" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "Не вилучайте приватні ключі, утворені у сховищі ключів" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "Не створюйте вихідний код, корисно під час тестування створення" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "Не оновлюйте репозиторій, корисно під час тестування створення без з'єднання з Інтернетом" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "Не використовуйте контрольні суми rsync" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "Завантажуйте F-Droid.apk за допомогою дзеркал, які менше витікають у мережу" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Завантажувати повноцінні дзеркала невеликих репозиторіїв" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Завантаження репозиторію вже не вдалося, не намагайтеся знову." #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "Завантаження {url} не вдалося. {error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "Дубльована декларація небажаних функцій у {path} була проігнорована!" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "Дубльований запис \"%s\" у конфігурації дзеркал!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "Дублікат посилання в '{field}': {url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "ПОМИЛКА: %(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "ПОМИЛКА: Підкоманду \"server\" вилучено, використовуйте \"deploy\"!" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "ПОМИЛКА: непідтримуваний вид CI, виправлення вітається!" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "ПОМИЛКА: непідтримуваний git-хост «%s», виправлення вітаються!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "Помилка: {key} в {path} це не «архів» чи «репозиторій»!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "ПОМИЛКА: {key} недійсний ключ!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "ПОМИЛКА: значення {key} має бути типу {t}!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "Помилка: {key}:{subkey} в {path} немає серед дозволених ключів: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "Кодування встановлено на '{enc}' fdroid може отримати проблеми з кодуванням. Встановіть його на 'UTF-8' для найкращих результатів." #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" "Введіть шлях до Android SDK (%s) тут:\n" "> " #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "Змінну середовища {var} від {configname} не налаштованоно!" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "Змінна середовища {{env: {var}}} не встановлена!" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "Помилка розгортання 'github_releases', {} відсутній. (Можливо вам потрібно спочатку виконати `fdroid update`.)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "Помилка отримання адреси репозиторію" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "Вихід із ненульовим кодом, якщо виявлено проблеми" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "Витяг метаданих застосунку з вихідного репозиторію" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "Експортування підписів з APK" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "F-Droid.apk не вдалося завантажити з жодного відомого джерела!" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "Не вдалося копіювати {path}: {error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "Не вдалося завантажити підписи для '{apkfilename}': {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "Не вдалося розпізнати {path}: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "Не вдалося змінити розмір {path}: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "Не вдалося створити сигмент S3: {url}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "Не вдалося отримати подробиці про APK, {path} буде видалено" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "Не вдалося отримати подробиці про APK, {path} буде пропущено" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "Не вдалося отримати відбиток ключа підпису APK" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "Не вдалося встановити '{apkfilename}' в {dev}: {error}" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "Не вдалося підписати застосунок" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "Сервер для збірки скопійовано з ВМ {buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "Отримані підписи для '{apkfilename}' -> '{sigdir}'" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "Файл зник під час його обробки: {path}" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "Готово" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Заборонені мітки HTML" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "Збирати заблоковані застосунки попри проблеми сканування. Дозволено лише в тестовому режимі." #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "Примусово зупиняти збірку після {0} сек. затримки!" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "Примусово сканувати вимкнені застосунки та збірки." #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "У \"{path}\" виявлено зображення без метаданих для застосунку \"{name}\"!" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "Знайдено пошкоджений файл фінансування \"{path}\" для \"{name}\":" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "Знайдено недійсні прикладні програми в аргументах" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "Знайдено недійсні версії коду для деяких застосунків" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "Знайдено кілька файлів блоку підписів JAR у {path}" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "Знайдено декілька сертифікатів підписувача!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "Знайдено кілька файлів метаданих для {appid}" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "Знайдено кілька сертифікатів підписування для репозиторію." #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "Не знайдено сертифікатів підписування для репозиторію." #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "Знайдено не файл у %s" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "Знайдено {apkfilename} у {url}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "Виявлено {count} проблем у {filename}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "Знайдено {count} попередження в {filename}" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "Створено основні метадані для {appid}" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "Помилка перевірки Git '%s'" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "Очистити Git невдалося" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "Git вибірка не вдалася" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Помилка налаштування remote set-head для Git: «%s»" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Скидання Git не вдалося" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "Не вдалося деініціалізувати підмодуль Git" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "Не вдалося синхронізувати підмодуль Git" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "Не вдалося оновити підмодуль Git" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "HTTPS потрібно використовувати з URL-адресами Subversion!" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "Якщо git mirror стає великим, дозволити видалити архів" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "Якщо це завантаження не вдалося, спробуйте завантажити власноруч на {url}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "Нехтування метаданими '{field}' у метаданих '{metapath}', оскільки їх вилучено." #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "Нехтування записом FUNDING.yml з датою після 2048 року: %s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "Ігнорування поганого елемента в маніфесті: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "Ігноруючи застарілий {oldfile}, використовуйте {newfile}!" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Нехтування пакунком без метаданих: " #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "Нехтування застарілим кешем для {apkfilename}" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "Включити APK, які підписані без алгоритмів, таких як MD5" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "Включити у дзеркало файли .asc підпису PGP" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "Включити журнали збірки в дзеркало" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "Включити джерело tarballs в дзеркало" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "Включно з метаданими від %s@%s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "Включно з метаданими з {path}" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "Під'єднання підмодулів" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "Встановити всі доступні підписані застосунки" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "Встановити побудовані пакунки на пристрої" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "Встановлення %s..." #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "Встановлення '{apkfilename}' на {dev}..." #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "Взаємодія з HTTP-сервером репозиторію" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "Недійсний APK" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "Неприпустимий AutoUpdateMode: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "Неприпустимий UpdateCheckMode: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "Недійсна VercodeOperation: {field}" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "Недійсна VercodeOperation: {invalid_ops}" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "Недійсний ID застосунку {appid}" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Недійсний розмічений список" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "Неправильне ім'я для оприлюдненого файлу: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "Неприпустимий ndk: запис у збірці: \"{ndk}\"" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "Недійсне переспрямування на не-HTTPS: {before} -> {after} " #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "Недійсні метадані scrlib: '{file}' не існує" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "Неправильні метадані srclib: не вдалося зчитати «{file}»" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "Неприпустимі метадані srclib: невідомий ключ '{key}' у '{file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "Підпис JAR не вдалося перевірити: {path}" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "Підтверджено підпис JAR: {path}" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "Файл Java JAR" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "Java JDK не знайдено! Встановіть в усталеному розташуванні або встановіть java_paths!" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "Java складений клас" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "Jarsigner Java не знайдено! Встановіть в усталеному розташуванні або встановіть java_paths!" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "В атрибутах джерельного HTML коду міститься Javascript" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "Зберігання невдалої збірки \"{apkfilename}\"" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "Шлях до сховища ключів для ключа підпису сховища\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "Відомий ключ налагодження використовується в AllowedAPKSigningKeys: " #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "Останнє подання '{commit}' виглядає як мітка, але в режимі перевірки оновлення '{ucm}'" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "Належний до Liberapay метод допомоги Liberapay: не вдалося" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "Список файлів, які будуть переформатовані (пробний запуск)" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "Переклад включено до URL-адреси f-droid.org" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "Зробити зупинку створення за винятками" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "Несправні дзеркала репозиторію." #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "Несправний шлях serverwebroot:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "Досягнуто максимальної глибини рекурсії у ZIP-файлі: %s" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "Конфігурація дзеркала для {url} містить ключ \"isPrimary\"!" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Дзеркало всього репозиторію та архіву всіх типів файлів." #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "Відсутній вихідний шлях" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "Переміщення декларацій небажаних функцій до локалізованих файлів:" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "Ні \"repo_pubkey\", ні \"keystorepass\" не встановлені в config.yml" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "Немає APK для пакунка: %s" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "Не знайдено Android SDK!" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "Не знайдено приєднаних пристроїв" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "Не знайдено пристроїв для `adb install`! Будь ласка, підключіть один." #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "Немає власного цифрового відбитка в URL-адресі." #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "Немає доступних підмодулів git" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "Не знайдено жодного проєкту gradle. Вказати його у --subdir?" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "Подробиць не знайдено." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "Не знайдено відповідних тегів" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "У {0} не знайдено мінімальної версії SDK, усталено (3)." #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "Не має потреби вказувати, що застосунок є вільним ПЗ" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "Не має потреби вказувати, що застосунок призначено для Android" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "Недостатньо параметрів! Змініть свій config.yml, щоб встановити принаймні один з цих:" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "Пакунків не вказано" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "Немає підписаних APK для %s" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "Немає підписаного вихідного шляху — нічого виконувати" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "У {path} не знайдено сертифікатів для підписання" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "Такого пакунка немає: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "Немає такого versionCode {versionCode} для застосунку {appid}" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "Теги не знайдено" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "Немає непідписаної теки — нічого виконувати" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "Не вдалося знайти відомості про версію." #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "Недійсне визначення розміру: \"{}\"" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "Нічого виконувати" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "Для {appid} нічого виконувати." #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "Тепер встановіть їх у config.yml:" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "OBB-файл має новішу версію коду ({integer}), ніж будь-який APK:" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "Назва файлу OBB повинна починатися з \"main.\" або \"patch.\":" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "Назва пакунка OBB не відповідає підтримуваному APK:" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Автономна машина, пропускання генерування дзеркал git до `fdroid deploy`" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "В одному з елементів конфігурації 'github_releases' відсутнє значення 'packageNames'. пропущено ..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "В одному з елементів конфігурації 'github_releases' відсутнє значення 'projectUrl'. пропущено ..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "В одному з елементів конфігурації 'github_releases' відсутнє значення 'token'. пропущено ..." #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Підтримуються лише PNG та JPEG зображення, знайдено: {path}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "Приймає лише один ключ \"env\"" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "Обробляти застосунки лише за допомогою автоматичних оновлень" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Належний до OpenCollective метод допомоги OpenCollective: не вдалося" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Виведіть JSON-звіт у назві файлу APK." #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "Вивід JSON на stdout." #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "Вивід JSON" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "Загальна ліцензія проєкту." #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "Перезапис порожнього versionName у {apkfilename} з метаданих: {version}" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "Пакунок \"{appid}\" вже існує" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "Читання маніфесту у '{path}'" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "Потрібен пароль з іменем користувача" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "Шлях до основного підкаталогу проєкту Android, якщо не в кореневому каталозі." #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "Шлях до Android SDK (іноді встановлено в ANDROID_HOME)" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "Шлях до git-репозиторію, який використовується для журналювання" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "Шлях до сховища ключів для підписного ключа репозиторію" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Вивести таємну змінну до термінала для легкого копіювання/вставлення" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "Режим конфіденційності було ввімкнено на основі вашої мови ({country_code})." #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "Проблема з ZIP файлом: %s, помилка %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "Проблема з xml у '{path}'" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "Процес автоматичних оновлень" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "Обробка {apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "Обробка {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "Створити доступний для читання людиною XML/JSON для індексування файлів" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "URL-адреса проєкту для імпорту." #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "Слід уникати пунктуації" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "Надіслати журнал цього віддаленого репозиторію git" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "Оновити двійковий журнал прозорості для {url}" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "Не вдалося передати на віддалений сервер!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "Передано до {url}" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "Швидкий запуск нового репозиторія" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "Прочитайте всі файли метаданих і вийдіть" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "Читання '{config_file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "Помилка packageName/versionCode/versionName, APK недійсне: '{apkfilename}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "Не вдалося прочитати packageName/versionCode/versionName failed, APK недійсний: '{apkfilename}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "Читання {apkfilename} з кешу" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Оновлення та кешування правил і сигнатур сканера з мережі" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "Видаліть вихідний архів та будь-які файли APK, якщо успішно перевірено." #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Вилучення вказаних файлів" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "Вилучення {path}\"" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "Перейменування файлів APK, які не відповідають package.name_123.apk" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "Повторне підписання {apkfilename} з наданим debug.keystore" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "Змінити розмір усіх піктограм, що перевищують максимальний розмір у пікселях та вийти" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "Обмеження виводу на попередження і помилки" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "Повторна спроба невдалого завантаження: %s" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Перепишіть усі файли метаданих" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "Перезапис '{appid}'" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "Запустити для git-репозиторію з неподаними змінами" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "Виконайте команду {cibase}, щоб знайти -debug.apk. і пропустіть repo_basedir {repo_basedir}" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "Запустити rewritemeta, щоб виправити форматування" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "Запуск першого проходу з вимкненою перевіркою MD5" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "Запуск wget у {path}" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "SHA-256 {url} не відповідає запису!" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "Перевірити отриманий файл APK на наявність відомих невільних класів." #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "Сканування початкового коду пакунка" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "Зчитувач знайшов {count} проблеми в {apk}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "Зчитувач знайшов {count} проблеми в {appid}:" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "Зчитувач знайшов {count} проблеми в {appid}: {versionCode}:" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "Знайдено {} проблему" msgstr[1] "Знайдено {} проблеми" msgstr[2] "Знайдено {} проблем" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "Сканування APK на наявність додаткових блоків підпису." #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "Сканування APK за допомогою dexdump на наявність відомих невільних класів." #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "Установити NDK {release} ({version})" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "Встановіть годинник на цей час, використовуючи:" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "Встановити найбільшу кількість випусків у репозиторії перед архівуванням старих" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "Встановити обмеження відкритого файлу на {integer}" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "Налаштувати застосунок для збірки репозиторію в нічний час" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "Не вдалося встановити обмеження кількості одночасно відкритих файлів: " #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "Час очікування для цієї збірки становить {0}" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "Записати та розмістити пакунки в репозиторії" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "Запис індексів, створених за допомогою update --nosign" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "Пропустити сканування початкового коду на наявність двійкових файлів та інших проблем" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "Недійсний підпис '{apkfilename}', пропускаємо!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "Пропуск дзеркала GitLab Pages через завеликий розмір репозиторію (>%.2fГБ)!" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "Пропуск створення індексу для {appid}" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "Недійсний підпис {apkfilename}, пропускаємо!" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "Пропуск {appid}: вимкнено" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "Вкажіть локальну теку, щоб синхронізувати репозиторій у" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "Вкажіть файл ідентифікатора для надання SSH для rsyncing" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "Вкажіть, який файл зневадження сховища ключів застосовувати." #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "Випишіть ще більше даних, ніж звичайно" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "Видалення невідомого підпису для {apkfilename}" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "Опис '%s' — це лише назва застосунку" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "Довжина опису {length} перевищує обмеження {limit} знаків" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "Системний годинник відстає від date в {path}!" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "Режим оновлення тегів наразі працює лише для репозиторіїв git, hg, bzr та git-svn" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "Режим оновлення тегів, який використовується в git-svn, але репозиторій не було налаштовано за допомогою тегів" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Тестовий режим - надсилайте випуск лише в каталозі tmp і завжди створюйте його, навіть якщо випуск вже існує." #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "Пакет Python \"qrcode\" не встановлено (наприклад, apt-get install python3-qrcode)!" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "Код версії OBB повинен надходити після \"{name}.\":" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "Базова URL-адреса для входу до репозиторію (типово: https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "Каталог для запису дзеркала" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "Файл, який слід включити до репозиторію (шлях чи шаблон шляху)" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "Цифровий відбиток репозиторію не збігається." #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "Кореневої теки local_copy_dir \"{path}\" не існує!" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "Відбулося зіткнення keyalias ключів - припинення оприлюднення" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "Ці застосунки, заархівовано з основного репозиторію." #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "Цю команду ніколи не слід використовувати для віддзеркалення f-droid.org! Для повної копії потрібно понад 600 ГБ." #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "Цей репозиторій застосунків для використання з FDroid. Застосунки в цьому репозиторії — це або офіційні двійкові файли, побудовані розробниками оригінального застосунку, або двійкові файли, побудовані з джерела f-droid.org за допомогою інструментів з https://gitlab.com/fdroid." #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "Репозиторій вже має локальні метадані: %s" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" "Щоб завершити налаштування, додайте свої файли .apk до «%s»\n" "потім запустіть \"fdroid update -c; fdroid update\". Ви також можете відредагувати\n" "\"config.yml\", щоб установити URL-адресу, назву репозиторію тощо. Ви також повинні\n" "налаштувати ключ підпису (тимчасовий ключ може бути створено автоматично).\n" "\n" "Докладніше: : https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "Для використання awsbucket, awssecretkey та awsaccesskeyid також слід налаштувати config.yml!" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "Для використання rclone у файлі config.yml мають бути встановлені параметри rclone_config та awsbucket!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "URL-адреса має починатися з https:// або http://" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "Вкорочувачі URL-адрес не варто використовувати" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "URL {url} в описі: {error}" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "Недійсна мітка ліцензії \"{}\"! Використовуйте лише затверджені FSF чи OSI мітки з https://spdx.org/license-list" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Неочікувана мітка ліцензії \"{}\"! Використовуйте лише мітки ліцензій, налаштовані у файлі налаштувань" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "Невідомий запис {key} у {configname}" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "Виявлено невідому виняткову ситуацію!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "Невідомий файл '{filename}' в збірці '{versionName}'" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "Невідомий формат метаданих: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "Невідомий формат метаданих: {path} (використовуйте: *.yml)" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "Невідома версія aapt, може спричинити складнощі: " #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "Непотрібна прогалина на початку рядка" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "Зайва прогалина в кінці" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "Нерозпізнане поле застосунку '{fieldname}' в '{path}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Нерозпізнаний прапорець збірки '{build_flag}' у '{path}'" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "Тип файлу не підтримується \"{extension}\" для репозиторію графіки" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "Знайдено непідтримуване зображення: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "Невикористаний extlib у %s" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "Невикористаний файл у %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "Невикористаний шлях scandelete: %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "Невикористаний шлях scanignore: %s" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Оновіть дані репозиторію для нових пакунків" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "Оновити бінарний журнал прозорості для URL-адреси" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData має недійсну URL-адресу: {url}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "UpdateCheckData повинен відповідати коду версії як ціле число (\\d або [0-9]): {codeex}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "UpdateCheckData має використовувати URL-адресу HTTPS: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "UpdateCheckData не є дійсною URL-адресою: {url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode налаштовано, але схоже, що команду checkupdates ще не запущено." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "Назву застосунку для перевірки оновлень встановлено на відомий ID застосунку — його можна буде вилучити" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "Завантаження {apkfilename} на androidobservatory.org" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "Завантаження {apkfilename} до virustotal" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Використовуйте /HEAD замість /master або /main, щоб вказати на файл у типовій гілці" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Використовуйте `fdroid update -c`, щоб створити файли метаданих." #: ../fdroidserver/build.py msgid "Use build server" msgstr "Використовуйте сервер створення" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "Використовуйте дату з APK замість поточного часу для нових доданих APK" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "Використання \"{path}\" для налаштування s3cmd." #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "\"{path}\" використовується для синхронізації з віддаленим сховищем." #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "Використання підпису APK v2" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "Використання підпису APK v3" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "Використання JAR-підпису" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Не варто перевіряти APK за допомогою jarsigner Java! Користуйтеся apksigner" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "Використання порожнього словника замість вмісту {path}!" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "Застосування наявного сховища ключів \"{path}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "Використовується rsync для синхронізації з: {url}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "Використовувати s3cmd для синхронізації з: {url}" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "Дійсні команди:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "Перевіряти, за допомогою локальної кешованої копії замість повторного завантаження." #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "Перевірте цілісність завантажених пакунків" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "Перевірка підпису індексу:" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "Перевірка пакета {path} за допомогою apksigner." #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "Ключ API VirusTotal не може завантажити файли, розмір яких понад 32 МБ, використовуйте {url} для завантаження {path}." #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Попереджати про можливі помилки метаданих" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "Бінарний файл WebAssembly" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Коли налаштовано для підписаних індексів, на цьому етапі створюйте лише непідписані індекси" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "Під час перевірки всього репозиторію, yamllint типово вимкнено. Цей параметр змушує нехтувати yamllint." #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "Якщо підписати або перевірити не вдається, виходить з кодом помилки." #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "Бажаєте завантажити та встановити F-Droid.apk через adb? (ТАК/Ні)" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "Бажаєте завантажити програму(и) з f-droid.org? (ТАК/Ні)" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'Distiguished Name' використовується під час створення ключів" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "За допомогою ANDROID_HOME можна встановити шлях до SDK, тобто:" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "ZIP-архів" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "adb звітує {serial} як \"{status}\"!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "додавання IdentityFile до {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "додавання до {name}: {path}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "неоднозначний параметр: %(option)s може відповідати %(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "apksigner в інструментах побудови; {version} передає APK із недійсними підписами v3, ігноруючи." #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "apksigner не знайдено! Не вдалося підписати або перевірити актуальні файли APK" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "apksigner не знайдено, це потрібно для підписання!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "application ID файлу застосунку для роботи на" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "ID застосунку з необов'язковим versionCode у формі APPID[:VERCODE]" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "archive_url має закінчуватися на /archive" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "аргумент \"-\" в режимі %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "аргумент %(argument_name)s: %(message)s" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "спроба відкритого з'єднання ssh для перевірки ключа розгортання:" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "не вдається проаналізувати специфікацію scrlib (не рядок): '{}'" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "не вдалося відкрити «%(filename)s»: %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "не вдалося відкрити не-https url: '{};" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "не вдалося знайти потрібні srclibs: \"{path}\"" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "не може мати кілька аргументів підпарсера" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "не може об'єднати дії - дві групи мають ім'я %r" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "не вдалося оприлюднити оновлення. Ви встановили ключ розгортання?" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "клонування {url}" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "команди з модулів плагіна:" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "суперечний рядок параметра: %s" msgstr[1] "суперечних рядка параметра: %s" msgstr[2] "суперечних рядків параметра: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "конфліктний псевдонім субпарсера: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "конфліктний субпарсер: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "не вдалося проаналізувати '{path}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "не вдалося розібрати специфікацію srclib (не вказано назву): '{}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "не вдалося проаналізувати специфікацію srclib (посилання не вказано): '{}'" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "створено {path}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "поточна версія новіша: застаріла vercode={old}, нова vercode={new}" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "видалення: репозиторій/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "файл залежності без блокування" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "розгорнуто журнал процесів {path} до {dest}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "dest= потрібен для таких варіантів, як %r" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "завантаження '{}'" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "не вдалося завантажити підписи сканера з '{}'" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "виконуваний двійковий файл, можливо, код" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "очікується %s аргумент" msgstr[1] "очікується %s аргументи" msgstr[2] "очікується %s аргументів" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "очікується хоча б один аргумент" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "очікується не більше одного аргументу" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "очікується один аргумент" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "fdroid [<команда>] [-h|--help|--version|<аргументи>]" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "отримати останню версію підписів з інтернету" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "показувати помилки метаданих (типово), як попередження, або нехтувати ними." #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "Не вдалося клонувати git svn" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "gzip-архів" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "нехтується явний аргумент %r" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1 повинен мати підпис, використовуйте `fdroid signindex`, щоб створити його!" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 повинен мати підпис, використовуйте `fdroid signindex`, щоб створити його!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "недійсне %(type)s значення: %(value)r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "неправильний вибір: %(value)r (варто обрати з %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "недійсне значення conflict_resolution: %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "неправильний рядок параметра %(option)r: повинен починатися зі знаку %(prefix_chars)r" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "ipfs_cid не знайдено, пропускаємо генерацію CIDv1" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "остання подана збірка новіша: застаріла vercode={old}, нова vercode={new}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "local_copy_dir мусить закінчуватися на \"fdroid\", ймовірно, малося на увазі: \"{path}\"" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "local_copy_dir мусить бути абсолютним шляхом!" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "local_copy_dir мусить бути текою, не файлом!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "дзеркало '%s' не закінчується на 'fdroid'!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "дзеркала задано двічі, в config.yml та {path}!" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "взаємозаперечні аргументи повинні бути необов'язковими" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "наступне оновлення кешу {name} відбудеться {time}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "не має \"icon\" у {appid}" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "APK не надано" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "не знайдено відомостей про версію" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "не дозволено з аргументом %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "потрібен один з аргументів %s" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "приймає лише рядки, списки та кортежі" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "параметри" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "перезаписування наявного шляху {path}" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "позиційні аргументи" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "не вдалося розгорнути журнал процесів {path} до {dest}!" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "еталонний двійковий файл з відсутнім підписом" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "відмовитись від завантаження через небезпечне з'єднання HTTP (користати HTTPS чи вказати --no-https-check): {apkfilename}" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "repo_icon \"repo/icons/%s\" не існує, створення заповнювача." #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "repo_url повинен закінчуватися на /repo" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "rsync відсутній або несправний: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd синхронізувати індекси з {path} до {url} та видалити" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "s3cmd синхронізує індекси з {path} до {url} і видаляє вилучені" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "кеш сканера пошкоджено! Ви можете очистити його за допомогою: '{clear}'" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "serverwebroot: шлях не закінчується на «fdroid», можливо, ви мали на увазі один з цих:" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "спільна бібліотека" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "показати довідку та вийти" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "підписаний APK файл, шлях до файлу або URL-адреса HTTPS." #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "пропустити розгортання всіх журналів збірки: журнал порожній" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "пропустити розгортання усіх журналів збірки: не увімкнено під час налаштування" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "пропустити для архіву з джерелом: {path}" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "srclibs відсутнє ім’я та/чи @" #: ../fdroidserver/scanner.py msgid "static library" msgstr "статична бібліотека" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "наданий еталонний двійковий файл дозволив підписувачу {signer}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "такі аргументи зобов'язані: %s" #: ../fdroidserver/install.py msgid "true" msgstr "правда" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "неочікуваний рядок параметрів: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "невідомий парсер %(parser_name)r (варто вибрати: %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "нерозпізнані аргументи: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "небезпечні дозволи на '{config_file}' (should be 0600)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "використання: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "Apache libcloud: синхронізація з {url}" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com обмежує швидкість, очікування повторної спроби..." #: ../fdroidserver/install.py msgid "yes" msgstr "так" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "{0} застосунок, {1} alias ключів" msgstr[1] "{0} застосунки, {1} alias ключів" msgstr[2] "{0} застосунків, {1} alias ключів" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) не має метаданих!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "AndroidManifest.xml застосунка {apkfilename} має неправильну дату: " #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} не має назви! Застосовуватиметься ID застосунку." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "{appid} з {path} є недійсним ID застосунку Android!" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "{appid} з {path} є недійсною назвою пакунка Java!" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "{appid} має APK і файли: {files}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "У {appid} немає {name}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "{appid}: Невідомий extlib {path} у збірці '{versionName}'" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "{appid}: жодних збірок не вказано, працює у поточному стані джерела" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "{appid}: {field} повинен бути '{type}', а не '{fieldtype}!'" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "{appid}: {field} повинно бути '{type}', а не '{fieldtype}'!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "{build_flag} має бути цілим числом, знайдено: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "{build_flag} має бути списком або рядком, знайдено: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "{file} порожній або пошкоджений!" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" не існує! Виправте його в \"config.yml\"." #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "{path1} є дублікатом {path2}, видаліть один з них!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "{path} вже існує, нехтування результатами імпорту!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "{path} не існує! Створіть його, запустивши:" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "{path}: недійсний підпис \"{pattern}\". Виглядає підозріло і схоже на спробу порушення безпеки Janus exploit!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} було позначено virustotal {count} разів:" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "{path} має неправильний відбиток пальця ({fingerprint})!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "{path} - це не словник «ключ: значення», а {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "{path} не є стандартним конфігураційним файлом!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "{path} - це не список, а {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "{path} - це не {expected_type}, а {datatype}!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "{path} не має розміру!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "{path} понад 200 МБ, вивантажити власноруч: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "{path}: «{code}» не є дійсним кодом країни за стандартом ISO_3166-1 alpha-2!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "{path}: {error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "{url} не закінчується на \"fdroid\", перевірте шлях URL!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "{url} не починається на \"http\"!" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "{} не вдалося зібрати" msgstr[1] "{} не вдалося зібрати" msgstr[2] "{} не вдалося зібрати" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "{} зібрано успішно" msgstr[1] "{} зібрано успішно" msgstr[2] "{} зібрано успішно" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/zh_Hans/0000755000175000017500000000000014770510164015555 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/zh_Hans/LC_MESSAGES/0000755000175000017500000000000014770510164017342 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/zh_Hans/LC_MESSAGES/fdroidserver.po0000644000175000017500000026157014770507747022430 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # ERDwaYbR , 2020. # Trey Yang , 2020, 2022. # taiyuan <1006333969@qq.com>, 2020. # Eric , 2020, 2021. # Carlos , 2021. # Hans-Christoph Steiner , 2021. # Liu Tao , 2021. # 世界 , 2021. # ZZY2357 , 2021. # yahoo~~ , 2021. # Liu Wenyuan <15816141883@163.com>, 2021. # JY3 , 2021, 2022. # Eric , 2022. # shenzhui007 <12231252@bjtu.edu.cn>, 2022. # linsui , 2022, 2024. # YangYulin , 2022. # Yang Yulin , 2022. # yangyangdaji <1504305527@qq.com>, 2022. # Yang Yulin , 2022. # Eric , 2022. # Xu ZhuoHan , 2022. # Xiang Heng Wei , 2022, 2023, 2024. # RainSlide , 2023. # Eric , 2023. # Max Xie , 2023. # Kingo Bingo , 2023. # zhiqi , 2023. # David Jiang , 2023. # ALoLo_527 , 2024. # 大王叫我来巡山 , 2024, 2025. # chumoer , 2024. # Wang , 2024. # Lily Chou , 2024. # ygsk10 , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2025-03-21 03:03+0000\n" "Last-Translator: 大王叫我来巡山 \n" "Language-Team: Chinese (Simplified Han script) \n" "Language: zh_Hans\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 5.11-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "用作布署密钥的 SSH 公钥:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "编码的 DEBUG_KEYSTORE {path} 秘密变量:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" 没有与之匹配的元数据文件!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "\"isPrimary\" 密钥不应被添加到镜像!" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "\"local_copy_dir\" {path} 不存在!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "'{apkfilename}' 已安装在 {dev} 上." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "\"{path}\" 包含近期的 {name} ({version})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "\"{path}\" 存在, 但 s3cmd 未安装!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "\"{path}\" 不是受支持的文件格式(请用:metadata/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "\"{path}\" 由不允许的密钥所签署:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" 不是有效的链接!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s:错误:%(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "%d 个 APK 无法签名或验证!" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "发现 %d 个问题" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%r 不可调用" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "%s 未能产生字典!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "%s 的 SHA-256 值不正确:%s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s 不是一个被接受的构建字段" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "config.yml 中找不到 'keypass'!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "'keystore' 没有赋值, 'smartcardoptions' 为空 !" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "config.yml 中找不到 'keystore'!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "config.yml 中找不到 'keystorepass'!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "config.yml 中找不到 'repo_keyalias'!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required' 是位置的无效参数" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "未在 config.yml 中设置 'sdk_path'!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' 太旧, F-Droid 需要 build-tools-{version} 或更新的版本!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "'{path}' 执行失败!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' 是无效格式, 它应该是字典!" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' 不是 {appid} 之有效 {field}. 正则表达式: {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' 不是有效 {field},应为 {pattern}" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "--merge-request 只运行在单个 appid 上!" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "…为 {appid} 检查更新失败: {error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() 未定义" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "路径缺少 /issues ( 译者注: 此处仅支持 github 或 gitlab 之 issues 链接 )" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "需要有一个链接作为参数!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "APK 签名在 {path} 中有不同的证书:" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "使用 GnuPG 为存储库之软件包添加 PGP 签名" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "添加存储库签名密钥到未签名的存储库" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "为缺少主干元数据文件的 APK 添加这些文件" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "仅为 {name} 添加新存储库" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "密钥库中存储库签名密钥的别名" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "缺少 AllowedAPKSigningKeys,但提供了参考二进制文件" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "可让运行初始导入时指定不同修订 ( 或 git 分支 )" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "同时对存档部分完整镜像" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "同时警告格式问题, 如同 rewritemeta -l" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "Android AAR 库" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "Android APK 文件" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "Android DEX 代码" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "未在 {path} 中找到 Android SDK!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "Android SDK 路径 {path} 不存在!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "Android SDK 路径 '{path}' 不是目录!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "没找到 Android SDK 工具 {cmd}!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "应用具有二进制文件,但没有相应的AllowedAPKSigningKeys 来固定证书。" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "APK 有 NoSourceSince 或 ArchivePolicy \"0 versions\" 或 0 但 AutoUpdateMode 或 UpdateCheckMode 不是 None" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "应用 在 '{repo}' 中, 但有一个链接到 {url}" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "应用版本具有二进制文件,但没有相应的 AllowedAPKSigningKeys 来固定证书。" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "不需要附加 .git" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "正使用无效签名归档 {apkfilename}!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode 和 UpdateCheckMode:HTTP 必须有一个模式。" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "对所有提示自动回复 no。" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "对所有提示自动回复 yes。" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "镜像配置中的错误条目类型“{mirrortype}”:{mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "镜像的基本链接可以使用此请求参数包含索引签名键: ?fingerprint=" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "分支 '{branch}' 在构建 '{versionName}' 时被用作相应的提交" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "分支 '{branch}' 在源码库 '{srclib}' 里被用作相应的提交" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "断开的符号链接: {path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "从源代码构建安装包" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "构建全部可用应用" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "由 'fdroid import' 生成的构建 - 一旦准备就绪将删除禁用行" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "构建元数据 git 存储库包含未提交的更改!" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "仅编译每个应用的最新版本" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "使用此配置并基于 \"%s\" 的构建存储库:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "在没有CurrentVersionCode的情况下不能自动更新应用" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "因扫描时的{}错误而无法构建" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "无法重写 {path}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "类别 '%s' 无效" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "没有设置类别" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "类别“{category}”已定义,但未被用于任何应用!" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "检查应用的更新" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "正为 {appid} 检查存档: 安装包: {integer}, 保留版本数: {keep}, 架构安装包: {arch}" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "干净的更新 - 不使用缓存,重新处理全部 APK 文件" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "给日志输出添加颜色" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "逗号分割的目录列表。" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "无法识别命令 '%s'。\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "提交更改" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "提交改动、推动,然后提出合并请求" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr ".yml 和本地化文件之间的“{field}”定义冲突:" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "冲突的参数: '--verbose' 和 '--quiet' 不能被同时使用." #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "在您的系统中无法找到 '{command}'" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "找不到最新版本代码" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "找不到最新的版本名" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "找不到 {path} 以移除" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "无法打开 apk 文件 {path} 用于分析: " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "无法解析大小 \"{size}\", 错误类型 \"{type}\"" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "找不到应用ID" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "无法找到任何的版本信息" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "找不到安装包 ID" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "拒绝覆盖现有的签署密钥设置!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "创建新容器 \"{name}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "创建用于配置 s3cmd 的 \"{path}\"。" #: ../fdroidserver/common.py #, python-brace-format msgid "Creating empty {config_file}" msgstr "正在创建空的 {config_file} 文件" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "创建日志目录" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "创建新的 S3 存储桶:{url}" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "创建输出目录" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "使用此密钥 (SHA256) 创建签名索引:" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "创建临时目录" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "创建未签名的索引以准备签名" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "当前版本代码 {cv} 小于最旧的构建 {versionCode}" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "DEBUG_KEYSTORE 未被设置或不完整" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "从存储库中删除没有元数据的 APK 和 OBB" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "存储库过大,将删除存档(大小 {size},限制 {limit})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "存储库过大,将删除镜像历史(大小 {size},限制 {limit})" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "删除未知文件: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "简介“%s”与应用的概括文字相同" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "简介有重复行" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "简介长度 {length} 超过 {limit} 字限制" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "您是指 config/{name}.yml 吗?" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "您是指 {code} 吗?" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "不要给生成的构建项添加 'disable:'" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "不要给这个仓库部署新文件" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "不要在链接中包含“{path}”!" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "不提示输入 Android SDK 路径,仅显示失败" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "不要从密钥库删除已生成的私钥" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "不创建源码 tarball 文件,便于内部版本测试" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "不刷新资源库,便于没有互联网时的内部版本测试" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "请勿使用 rsync 校验和" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "使用向网络泄露较少信息的镜像下载 F-Droid apk" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "下载小型仓库的完整镜像" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "下载仓库已经失败了一次,不再尝试。" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "{url} 下载失败。{error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "{path} 处的重复负面特征声明被忽略!" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "镜像配置中的重复条目“%s”!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "“{field}”中有重复的链接:{url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "错误:%(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "错误:\"server\" 子命令已被删除,请使用 \"deploy\"!" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "错误:不支持的 CI 类型,欢迎提交补丁添加支持!" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "错误:不支持的 git 主机类型 \"%s\",欢迎提交补丁添加支持!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "错误: {path}中的{key}不是“archive”或“repo”!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "错误:{key} 不是有效的密钥!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "错误:{key} 的值的类型应为 {t}!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "错误: {path}中的{key}:{subkey}不再被允许的值的范围内: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "编码被设置为“{enc}”,可能会导致 fdroid 出现编码问题。为了最佳效果,请将其更改为“UTF-8”。" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" "请在此处输入 Android SDK(%s)的路径:\n" "> " #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "没有设置 {configname} 中的环境变量 {var}!" #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "没有设置环境变量 {{env: {var}}} !" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "部署'github_releases'错误,{}没有出现。(你可能需要先运行`fdroid update`)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "获取存储库地址时出错" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "如果发现问题,则以非零代码退出" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "从源存储库中提取应用元数据" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "从 APK 中提取签名" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "无法从任何已知的来源下载 F-Droid apk!" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "复制 {path} 失败:{error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "获取 '{apkfilename}' 的签名时出错:{error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "读取 {path} 失败:{error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "缩放 {path} 失败:{error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "创建亚马逊简易储存服务失败:{url}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "获取 APK 信息失败,正在删除 {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "获取APK信息失败,跳过{path}" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "未能获取APK签名密钥指纹" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "无法在 {dev} 上安装 '{apkfilename}':{error}" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "未能对应用进行签名" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "从虚拟机获取了buildserverid:{buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "获取了'{apkfilename}'的签名-> '{sigdir}'" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "文件在处理时消失: {path}" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "已完成" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "禁止的HTML标签" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "强制编译已禁用应用,忽略扫描出错。仅用于测试模式。" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "在{0}秒超时后强制停止构建!" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "强制扫描已禁用的应用和内部版本。" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "为应用“{name}”找到了没有元数据的“{path}”图形!" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "为“{name}”找到了错误的资金文件“{path}”:" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "在参数中发现无效的appids" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "发现某些应用的版本代码无效" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "在{path}中发现多个JAR签名块文件" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "找到了多个签署者证书!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "找到多个 {appid} 的元数据文件" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "发现存储库的多个签名证书。" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "未找到存储库的签名证书。" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "在%s处发现非文件" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "在{url}发现{apkfilename}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "发现了 {count} 个问题,扫描对象 {filename}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "发现了 {count} 个警告,扫描对象 {filename}" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "已生成 {appid} 的主干元数据" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "'%s' 的 Git 签出失败" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "Git clean 失败" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "Git fetch 失败" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Git remote set-head 失败:\"%s\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Git reset 失败" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "Git 子模块去初始化失败" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "Git 子模块同步失败" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "Git 子模块更新失败" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "HTTPS 必须与 Subversion URL 一起使用!" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "如果 git 镜像变大,允许删除存档" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "如果此上传失败,请尝试手动上传到 {url}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "忽略“{metapath}”元数据中的“{field}”,因为它已被弃用。" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "忽略超过 2048 的 FUNDING.yml 条目:%s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "忽略清单中的错误元素: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "正在忽略已弃用的 {oldfile} 文件,请使用 {newfile}!" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "忽略没有元数据的包: " #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "忽略 {apkfilename} 的过时缓存数据" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "包括使用已禁用的算法(如 MD5)签名的 APK" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" msgstr "在镜像中包含 PGP 签名 .asc 文件" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" msgstr "在镜像中包含构建日志" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" msgstr "在镜像中包含源 tarball" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "包括来自 %s@%s 的元数据" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "包含来自 {path} 的元数据" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "初始化子模块" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "安装全部可用的已签名应用" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "在设备上安装生成的安装包" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." msgstr "正在安装 %s..." #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "在 {dev} 上安装“{apkfilename}”..." #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "与存储库 HTTP 服务器互动" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "无效的 APK" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "无效的 AutoUpdateMode: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "无效的 UpdateCheckMode:{mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "无效的 VercodeOperation:{field}" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "无效的 VercodeOperation:{invalid_ops}" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "无效的应用 ID {appid}" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "无效的项目符号列表" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "已发布文件的名称无效: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "ndk 无效:构建中的条目:“{ndk}”" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "无效的重定向至非 HTTPS: {before} -> {after} " #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "无效的scrlib元数据:'{file}'不存在" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "无效的 srclib 元数据:无法解析“{file}”" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "无效的 srclib 元数据:“{file}”中的未知键“{key}”" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "无法验证 JAR 签名:{path}" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "已验证的 JAR 签名:{path}" #: ../fdroidserver/scanner.py msgid "Java JAR file" msgstr "Java JAR 文件" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "未找到 Java JDK!安装在标准位置或设置java_paths!" #: ../fdroidserver/scanner.py msgid "Java compiled class" msgstr "Java 编译类" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "未找到 Java jarsigner!安装在标准位置或设置java_paths!" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "HTML src 属性中的 Javascript" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "保持失败的生成“{apkfilename}”" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "签名密钥的密钥库:\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "AllowedAPKSigningKeys 中使用的已知调试密钥: " #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "最后使用的提交 '{commit}' 看起来像一个标签,但 UpdateCheckMode 是 '{ucm}'" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "Liberapay 捐赠方式属于 Liberapay: 字段" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" msgstr "列出将被重新设定格式的文件 (dry run)" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "包含在 f-droid.org URL 中的区域设置" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "异常时中止编译" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "格式错误的存储库镜像。" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "格式错误的服务器网络根行:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "达到 ZIP 文件中的最大递归深度:%s" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "{url} 的镜像配置包含 \"isPrimary\" 密钥!" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "镜像完整存储库和存档,所有文件类型。" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "缺少输出目录" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "将负面特征声明移动到本地化文件:" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "config.yml 中既没有设置“repo_pubkey”也没有设置“keystorepass”" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" msgstr "没有 APK 安装包: %s" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "未找到 Android SDK!" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "未找到连接的设备" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "没有找到 `adb install` 设备!请插入一台设备。" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "URL 中没有指纹。" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "没有可用的 git 子模块" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" msgstr "找不到任何 gradle 项目。指定 --subdir?" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "未找到任何信息。" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" msgstr "未找到匹配的标签" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "在 {0} 中找不到最低 SDK 版本,使用默认值 (3)。" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "不需要说明该应用是自由软件" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "不需要说明该应用是用于安卓的" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "未设置选项!编辑您的 config.yml 以设置以下至少一个:" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "未指定包" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "%s 没有可用的签名 APK" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "无签名输出目录 - 无任何操作" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "在 {path} 中找不到签名证书" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "没有这样的包:%s" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "应用 {appid} 没有此类版本代码 {versionCode}" #: ../fdroidserver/checkupdates.py msgid "No tags found" msgstr "未找到标签" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "没有未签名的目录 - 无操作" #: ../fdroidserver/__main__.py msgid "No version information could be found." msgstr "找不到版本信息。" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" msgstr "不是有效的大小定义:“{}”" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "无操作" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "对 {appid} 无任何可操作。" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "现在在 config.yml 中设置这些:" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "OBB 文件的版本代码({integer})比任何 APK 都要新:" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "OBB 文件名必须以“main.”或“patch.”开头:" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "OBB 的软件包名称与受支持的 APK 不匹配:" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "脱机计算机,跳过 git 镜像生成直到 `fdroid deploy`" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "其中一个 'github_releases'配置项缺失'packageNames'值。跳过..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "其中一个 'github_releases'配置项缺失'projectUrl'值。跳过..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "其中一个 'github_releases'配置项缺失'token'值。跳过..." #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "图形仅支持 PNG 和 JPEG,发现:{path}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "只接受单一密钥 “env\"" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "仅处理使用自动更新的应用" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "OpenCollective 捐赠方法属于 OpenCollective: 字段" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "将 JSON 报告输出到以 APK 命名的文件。" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." msgstr "将 JSON 输出到标准输出。" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" msgstr "输出 JSON" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "项目总体许可证。" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "从元数据覆盖 {apkfilename} 中的空白版本名称:{version}" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "包“{appid}”已经存在" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "在“{path}”处解析清单" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "需要密码和用户名" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "主Android项目子目录的路径(如果不是根目录)." #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "Android SDK 路径(有时在 ANDROID_HOME 中设置)" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "使用的 git 资源库路径在日志上" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "资源库签名密钥的密钥存储(keystore)路径" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "将秘密变量打印到终端以便于复制/粘贴" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "根据你的语言环境({country_code})启用了隐私模式。" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "ZIP 文件问题:%s,错误 %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "'{path}' 处的 xml 问题" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "处理自动更新" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "处理 {apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "处理 {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "为索引文件生成人类可读的XML/JSON" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "项目 URL 导入位置。" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "应避免使用标点符号" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "拖送日志至 git 远程资源库" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "正推送二进制文件透明日志到{url}" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" msgstr "推送到远程服务器失败了!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "正在推送至 {url}" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "快速新建存储库" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "读取全部元数据文件并退出" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "读取 '{config_file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "读取 packageName/versionCode/versionName 失败,APK 无效:'{apkfilename}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "读取 packageName/versionCode/versionName 失败,APK 无效:'{apkfilename}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "从缓存读取 {apkfilename}" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "刷新和缓存来自网络的扫描程序规则和签名" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "若验证成功删除源 tarball 和任何 APK 文件。" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "删除指定文件" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "删除 {path}\"" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "重命名文件名不符合 package.name_123.apk 的 APK 文件" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "使用提供的 debug.keystore 重签名 {apkfilename}" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "对超过像素大小上限的全部图标进行尺寸调整,然后退出" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "仅输出警告和出错信息" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "正在重试失败的下载:%s" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "重写所有元数据文件" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "重写 '{appid}'" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "在具有未提交更改的 git 存储库上运行" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "在{cibase}中挨个寻找 -debug.apk,并跳过了仓库目录{repo_basedir}" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "运行“重写元数据”(rewritemeta)修复格式" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "禁用 MD5 检查并运行第一遍" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "在 {path} 中运行 wget" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "{url} 的 SHA-256 与条目不匹配!" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." msgstr "扫描产生的 APK(s) 是否有已知的非自由类。" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "扫描一个应用的源代码" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "扫描仪发现了 {count} 个问题,扫描对象 {apk}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "扫描仪在 {appid} 中发现 {count} 个问题:" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "扫描仪在 {appid}:{versionCode} 中发现 {count} 个问题:" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "扫描仪发现 {} 个问题" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "正在扫描 APK 是否有额外的签名块。" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "使用 dexdump 扫描 APK 以查找已知的非自由类。" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "设置 NDK {release} ({version})" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "使用以下方法将时钟设置为该时间:" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" msgstr "在存档旧版本之前,在存储库中设置最大版本数" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "将打开文件限制设置为 {integer}" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "为每日构建存储库设置应用构建" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "设置打开文件限制失败: " #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "为此构建设置 {0} 秒超时" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "对包进行签名并将其加入存储库" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "签名使用 update --nosign 创建的索引" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "跳过二进制源码扫描和其他问题" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "跳过签名无效的“{apkfilename}”!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "跳过 GitLab 页面镜像,因为存储库太大(> %.2fGB)!" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "跳过 {appid} 的索引生成" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "跳过 {apkfilename} ,签名无效!" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "正在跳过 {appid}:已禁用" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "指定资源库同步的本地文件夹" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "指定 rsync 同步时 SSH 所用的标识文件" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "指定要使用的调试密钥库文件。" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "比一般情况输出更多的信息" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "从 {apkfilename} 中剥离神秘签名" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "摘要“%s”只是应用的名称" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "长度摘要 {length} 超过 {limit} 字符限制" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "系统时钟早于 {path} 中的日期!" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "标签更新模式目前仅适用于 git、hg、bzr 和 git-svn 存储库" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "git-svn 中使用的标记更新模式,但未使用标记设置存储库" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "测试模式:仅将输出保存至 tmp 目录,即使输出已存在,仍然编译。" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "\"qrcode\" Python 包未安装 (如 apt-get install python3-qrcode)!" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "OBB 版本号必须位于“{name}”之后:" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "资源库基 URL的日志(默认为 https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "写入镜像的目录" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "要包含在存储库中的文件(path 或 glob)" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "存储库的指纹不匹配。" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "local_copy_dir“{path}”的根目录不存在!" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "存在密钥别名冲突 - 发布已停止" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." msgstr "这些是已从主存储库存档的应用。" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "此命令永远不应该被用来镜像 f-droid.org!完整的拷贝需要至少 600GB。" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "这是一个与F-Droid一起使用的应用的存储库。这个存储库中的应用要么是原应用开发者构建的官方二进制文件,要么是 f-droid.org 的管理员使用 https://gitlab.com/fdroid 上的工具从源代码构建而来的二进制文件。" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "此存储库已具有本地元数据:%s" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" "要完成设置,请将您的 APK 添加到“%s”\n" "然后运行“FDrod 更新 -C;FDroid更新”。 您可能还想编辑\n" "“config.yml”来设置 URL、存储库名称等。 您还应该设置\n" "签名密钥(可能已自动生成临时密钥)。\n" "\n" "更多信息: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "和 https://f-droid.org/docs/Signing_Process" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "要使用 awsbucket,还必须在 config.yml 中设置 awssecretkey 和 awsaccesskeyid!" #: ../fdroidserver/deploy.py msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "要使用 rclone,必须在 config.yml 中设置 rclone_config 和 awsbucket!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "网址必须以 https:// 或 http:// 开头" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "不应使用 URL 缩短器" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "描述中的网址 {url}:{error}" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "意外的许可证标签“{}”!仅使用来自 https://spdx.org/license-list 的 FSF 或 OSI 批准的标签" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "意外的许可证标签“{}”!仅使用配置文件中配置的许可证标记" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "{configname} 中的未知条目 {key}" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "发生未知异常!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "在构建版本 '{versionName}' 中出现了未知文件 '{filename}'" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "未知元数据格式:%s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "未知元数据格式:{path} (使用:*.yml)" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "未知版本的 aapt,可能会导致问题: " #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "不必要的前置空格" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "不必要的尾随空格" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "'{path}' 中存在无法识别的应用栏目 '{fieldname}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "'{path}' 中有无法识别的构建 flag '{build_flag}'" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "存储库图形不支持的文件类型“{extension}”" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "发现不支持的图形文件:{path}" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "%s 处未使用的扩展库" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "%s 处未使用的文件" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" msgstr "未使用的扫描删除路径: %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" msgstr "未使用的扫描忽略路径: %s" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "更新新包的存储库信息" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "更新 URL 的二进制透明度日志" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData 具有无效的 URL:{url}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "UpdateCheckData 必须以整数(\\d 或 [0-9])的形式匹配版本代码:{codeex}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "UpdateCheckData必须使用HTTPS URL:{url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "UpdateCheckData 不是有效的网址:{url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode 已设置,但看起来尚未运行检查更新。" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName 已设置为已知的应用 ID,可以将其删除" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "上传 {apkfilename} 到 androidobservatory.org" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "上传 {apkfilename} 到 virustotal" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "使用 /HEAD 而不是 /master 或 /main 来指向默认分支中的文件" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "使用 `fdroid update -c` 命令以创建它。" #: ../fdroidserver/build.py msgid "Use build server" msgstr "使用编译服务器" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "对于新添加的 APK 文件,使用来自 APK 文件的时间,而非当前时间" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "使用“{path}”配置 s3cmd。" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "使用 \"{path}\" 用于和远程存储同步。" #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "使用 APK 签名 v2" #: ../fdroidserver/common.py msgid "Using APK Signature v3" msgstr "使用 APK 签名 v3" #: ../fdroidserver/common.py msgid "Using JAR Signature" msgstr "使用 JAR 签名" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "不建议使用 Java 的 jar 签名器来验证 APK!使用 apk 签名器" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "使用空白字典而不是 {path} 的内容!" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "使用现有密钥库“{path}”" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "使用 rclone 进行同步:{url}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "正使用 s3cmd 与 {url} 同步" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "有效的命令为:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "和本地缓存的副本进行验证,而不是重新下载。" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "验证已下载包的完整性" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "验证目录签名中:" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "使用 apksigner 验证包 {path}。" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "VirusTotal 的 API 密钥无法用于上传大于 32MB 的文件,请使用 {url} 上传 {path}。" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "警告元数据中可能存在的错误" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "WebAssembly 二进制文件" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "如果已配置为使用签名索引,该阶段仅创建未签名索引" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "对整个版本库进行 lint 时,默认禁用 yamllint。 无论如何,该选项都会强制 yamllint。" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "签名或验证失败时,退出并显示错误代码。" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "你要通过 adb 下载并安装 F-Droid apk 吗?(YES/no)" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "你要从 f-droid 下载应用吗?(YES/no)" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "生成密钥时使用了X.509 ‘可识别名’" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "您可以使用 ANDROID_HOME 设置 SDK 的路径,也就是说:" #: ../fdroidserver/scanner.py msgid "ZIP file archive" msgstr "ZIP 压缩包" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "adb 报告 {serial} 为 \"{status}\"状态!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "将 IdentityFile 添加到 {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "添加到 {name}: {path}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "模糊的选项:%(option)s 可以相配 %(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "{version} 版本 build-tools 中的 apksigner 不处理带无效 v3 签名的 APK 文件,忽略中。" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "找不到 APK 签名器!无法对新式 APK 进行签名或验证" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" msgstr "找不到 APK 签名器,这是签名所必需的!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "要操作的文件的应用ID" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "带APPID[:VERCODE]格式可选的versionCode的应用 ID" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "archive_url 需要以 /archive 结尾" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "参数 “-” 带有模式 %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "参数 %(argument_name)s:%(message)s" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" msgstr "尝试使用裸 SSH 连接测试部署密钥:" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" msgstr "无法解析 scrlib 规范(不是字符串):“{}”" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "无法打开 '%(filename)s':%(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "无法打开非 HTTPS URL: '{};" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "找不到所需的源库:“{path}”" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "不能有多个子解析器参数" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "无法合并操作 - 两个组被命名为 %r" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "无法发布更新,是否设置了部署密钥?" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "正在克隆 {url}" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "来自插件模块的命令:" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "有冲突的选项字串:%s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" msgstr "有冲突的子解析器别名:%s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" msgstr "有冲突的子解析器:%s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" msgstr "无法解析 '{path}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" msgstr "无法解析 srclib 规范 (未指定名称): '{}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "无法解析 srclib 规范 (未指定 ref): '{}'" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "已创建 {path}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "当前版本较新:旧的 vercode={old},新的 vercode={new}" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "正在删除:repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "没有锁的依赖文件" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "已部署进程日志 {path} 到 {dest}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "对于像 %r 这样的选项,dest= 是必需的" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "正在下载 '{}'" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" msgstr "从 '{}' 下载扫描仪特征失败了" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "可执行二进制文件,可能是代码" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "预期的 %s 个参数" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "预期至少有一个参数" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "预期最多有一个参数" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "预期的一个参数" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "用法:fdroid [-h|--help|--version] []" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "从网络获取最新版本的签名" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "将元数据错误(默认)强制设为警告,或忽略。" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "git svn 克隆失败" #: ../fdroidserver/scanner.py msgid "gzip file archive" msgstr "gzip 压缩包" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "被忽略的显式参数 %r" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1 必须有签名,使用 `fdroid signindex` 命令创建它!" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 必须有签名,使用 `fdroid signindex` 命令创建它!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "无效 %(type)s 值: %(value)r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "无效选项:%(value)r (选取自 %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "冲突解决值无效: %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "无效选项字符串 %(option)r: 必须以字符 %(prefix_chars)r 开头" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "未找到 ipfs_cid,跳过 CIDv1 生成" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "最新的构建配方较新:旧的验证码={old},新的验证码={new}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "local_copy_dir未以“ fdroid”结尾,也许你指的是:“ {path}”" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "local_copy_dir必须为绝对路径!" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "local_copy_dir必须是目录,不能是文件!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "镜像 '%s' 不以 'fdroid'结尾!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "设置了两次镜像,分别在 config.xml 和 {path} 中!" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "相互排斥的参数必须是可选的" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "下次 {name} 缓存更新将在 {time} 内完成" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "{appid} 中没有 \"图标\"" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "未提供 APK" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "没有找到版本信息" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "不允许使用参数 %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "其中一个参数 %s 是必需的" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "只接受字符串、列表和元组" #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "选项" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "正在覆盖现有{path}" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "位置参数" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "进程日志将 {path} 部署到 {dest} 失败!" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "参考二进制缺少签名" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "拒绝通过不安全的 HTTP 连接下载(使用 HTTPS 或指定 --no-https-check): {apkfilename}" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "repo_icon \"repo/icons/%s\" 不存在,正在生成占位符。" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "repo_url 需以 /repo 结尾" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "rsync 丢失或损坏: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd 同步索引 {path} 至 {url} 并删除" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "s3cmd 将索引从 {path} 同步至 {url} 并删除已下架的" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "扫描仪缓存畸形! 您可以使用他: '{clear}'" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "serverwebroot:路径没有以 \"fdroid\"结尾,可能你想表达的是这些当中的一个:" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "共享库" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "显示本帮助信息并退出" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "签名的 APK、文件路径或 HTTPS URL。" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "跳过部署完整的构建日志:日志内容为空" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "跳过部署完整的构建日志:配置中未启用" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "跳过源代码压缩包:{path}" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "srclibs 缺少名称和/或 @" #: ../fdroidserver/scanner.py msgid "static library" msgstr "静态库" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "所提供的参考二进制已允许签名者 {signer}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "需要此下参数:%s" #: ../fdroidserver/install.py msgid "true" msgstr "true" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "未预期的选项字符串:%s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "未知解析器 %(parser_name)r (选择: %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "未识别的参数:%s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "{config_file} 的文件权限不安全 ( 应该设为0600 ) !" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "用法: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "正在用Apache libcloud同步{url}" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com正在限制速率,等待重试..." #: ../fdroidserver/install.py msgid "yes" msgstr "yes" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "{0} 应用, {1} 主要别名" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid})没有元数据!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "{apkfilename}的 AndroidManifest.xml 有一个无效的日期: " #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} 没有名字! 使用 application ID 代替." #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "{appid}来自{path}不是一个有效的Android应用ID!" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "{appid}来自{path}不是一个有效的Java安装包名称!" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "{appid}有两个apk文件:{files}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "{appid}缺失了{name}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "{appid}:在构建版本‘{versionName}’时在{path}中遇到了未知的extlib" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "{appid}: 没有指定构建,在当前源码状态下运行" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "{appid}:{field}必须为‘{type}’,但它是‘{fieldtype}!’" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "{appid}:{field}必须为‘{type}’,但它是‘{fieldtype}’!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "{build_flag}变量必须为整型,但是找到了{value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "{build_flag}变量必须为列表或字符串,但是找到了{value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" msgstr "{file} 是空的或已损坏!" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name}的“{section}/icons/{path}”不存在!请检查配置文件“config.yml”。" #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "{path1} 与 {path2} 重复,请删除一个!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "{path} 已经存在,忽略导入的结果!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "{path} 不存在!通过运行以下命令创建它:" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "{path}有损坏的签名“{pattern}”,也许是Janus的漏洞!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path}被virustotal标记了{count}次:" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "{path} 有错误的指纹 ({fingerprint})!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "{path}不是“键:值”模式,而是一个{datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" msgstr "{path} 不是标准的配置文件!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "{path} 不是list,而是 {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "{path} 不是 {expected_type} 而是 {datatype}!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "{path}的大小为零!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "{path}的大小超过200MB,请手动上传:{url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "{path}: \"{code}\" 不是有效的ISO_3166-1 alpha-2国家代码!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" msgstr "{path}:{error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "{url}不是以“fdroid”结尾的,请检查链接路径!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "{url}不是以“http”为开头!" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "{} 构建失败" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "{} 构建成功" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/locale/zh_Hant/0000755000175000017500000000000014770510164015556 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2321866 fdroidserver-2.4.0/locale/zh_Hant/LC_MESSAGES/0000755000175000017500000000000014770510164017343 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901223.0 fdroidserver-2.4.0/locale/zh_Hant/LC_MESSAGES/fdroidserver.po0000644000175000017500000026117114770507747022426 0ustar00hanshans# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # Jeff Huang , 2020. # Hans-Christoph Steiner , 2020, 2021, 2022, 2024. # NightFeather , 2020. # ifurther , 2021. # Stiffen , 2021. # hugoalh , 2024. # Peter Dave Hello , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" "POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2024-11-26 15:16+0000\n" "Last-Translator: Peter Dave Hello \n" "Language-Team: Chinese (Traditional Han script) \n" "Language: zh_Hant\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 5.9-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" "\n" "SSH 公鑰被用來作為部署密鑰:" #: ../fdroidserver/nightly.py #, python-brace-format msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" "\n" "{path} DEBUG_KEYSTORE 祕密變數的編碼為:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s 1/\" 沒有符合的中介資料檔案!" #: ../fdroidserver/index.py msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" msgstr "「local_copy_dir」{path} 不存在!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" 已經安裝在 {dev} 上了。" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" msgstr "\"{path}\" 包含近期的 {name} ({version})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" msgstr "有 \"{path}\" 存在,但是沒有安裝 s3cmd!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" msgstr "\"{path}\" 不是可接受的格式,轉換成: metadata/*.yml" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" msgstr "「{path}」由不允許的金鑰簽署:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" 不是一個有效的網址!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s:錯誤:%(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" msgstr "%d 個 APK 無法簽署或驗證!" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "發現 %d 個問題" #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" msgstr "%r 不可呼叫" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" msgstr "%s 沒有產生字典!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" msgstr "%s 的 SHA-256 值不正確:%s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s 為不可編譯欄位" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "config.yml 找不到 'keypass'!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" msgstr "沒有'keystore', 而且'smartcardoptions'是空的!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" msgstr "config.yml 找不到 'keystore'!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" msgstr "config.yml 找不到 'keystorepass'!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" msgstr "config.yml 找不到 'repo_keyalias'!" #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "這些地方的 '必填' 為無效引數" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" msgstr "未在 config.yml 中設定「sdk_path」!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' 太過老舊,fdroid 需要 build-tools-{version} 或以上版本!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" msgstr "'{path}' 無法執行!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "「{path}」的格式無效,它應該是一個字典!" #: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "{appid} 的 {value}' 為無效 {field}。正規表遠格式:{pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "「{value}」不是有效的 {field},應該為 {pattern}" #: ../fdroidserver/checkupdates.py msgid "--merge-request only runs on a single appid!" msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "{appid} 檢查更新失敗:{error}" #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() 未定義" #: ../fdroidserver/lint.py msgid "/issues is missing" msgstr "/issues 有遺漏" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" msgstr "需要 URL 作為參數!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" msgstr "APK 簽章在 {path} 中有不同的憑證:" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" msgstr "在軟體庫中加入使用 GnuPG 套件包的 gpg 簽署" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" msgstr "增加一個軟體庫的簽署金鑰到未簽署的金鑰庫中" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" msgstr "為 APK 建立缺少的骨幹中介資料檔案" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" msgstr "只為 {name} 新增軟體庫" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" msgstr "在金鑰庫裡軟體庫簽署金鑰的別名" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" msgstr "缺少 AllowedAPKSigningKeys,但是提供了參考二進位文件" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" msgstr "允許為初始匯入指定不同的校訂(或 git 分支)" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" msgstr "另外鏡像完整的檔案區段" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" msgstr "還要提醒格式化問題,如 rewritemeta -l" #: ../fdroidserver/scanner.py msgid "Android AAR library" msgstr "Android AAR 程式庫" #: ../fdroidserver/scanner.py msgid "Android APK file" msgstr "Android APK 檔案" #: ../fdroidserver/scanner.py msgid "Android DEX code" msgstr "Android DEX 程式碼" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" msgstr "在{path}找不到Android SDK!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" msgstr "Android SDK 路徑 '{path}' 不存在!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" msgstr "Android SDK 路徑 '{path}' 不是目錄資料夾!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" msgstr "找不到 Android SDK 工具 {cmd}!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "應用程式具有二進位文件,但是沒有相應的 AllowedAPKSigningKeys 來固定憑證。" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "應用程式有 NoSourceSince 或 ArchivePolicy「0 versions」或「0」,但是 AutoUpdateMode 或 UpdateCheckMode 不是「None」" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" msgstr "應用軟體在 '{repo}' 倉庫,但有一個 {url} 連結" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "應用程式版本具有二進位文件,但是沒有相應的 AllowedAPKSigningKeys 來固定憑證。" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" msgstr "不必附加上 .git" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" msgstr "以無效的簽名歸檔 {apkfilename}!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode 與 UpdateCheckMode:HTTP 必須有一個模式。" #: ../fdroidserver/install.py msgid "Automatic no to all prompts." msgstr "自動拒絕所有提示。" #: ../fdroidserver/install.py msgid "Automatic yes to all prompts." msgstr "自動同意所有提示。" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" msgstr "鏡像配置中的錯誤條目類型「{mirrortype}」:{mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "基本的 URL 到鏡像,可以包含索引簽署金鑰使用查詢字串:?fingerprint=" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" msgstr "分支 '{branch}' 被用於建立 '{versionName}'的提交" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" msgstr "分支 '{branch}' 用於 srclib '{srclib}' 的提交" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" msgstr "損壞的符號連結:{path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" msgstr "從原始程式碼編譯成套裝軟體" #: ../fdroidserver/build.py msgid "Build all applications available" msgstr "構建所有可用的應用程式" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" msgstr "由`fdroid import` 產生編譯 - 已移除取消線" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" msgstr "構建詮釋資料 git 倉庫有未遞交的變更!" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" msgstr "只構建每個套件包的最後版本" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" msgstr "軟體庫的編譯依照 \"%s\" 與此設定:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" msgstr "無法自動更新沒有 CurrentVersionCode 的應用程式" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "掃描時由於 {} 出錯,無法進行編譯" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "無法重寫到 \"{path}\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "'%s' 類別無效" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "類別未設定" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" msgstr "已定義類別「{category}」,但是未用於任何應用程式!" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" msgstr "檢查應用程式更新" #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" msgstr "檢查 {appid} 的歸檔 - APKs:{integer},keepversions:{keep},archapks:{arch}" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "清除更新 - 不使用快取,重新處理全部的 APK" #: ../fdroidserver/common.py msgid "Color the log output" msgstr "" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "以逗號分隔類別清單。" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" msgstr "無法識別指令「%s」。\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "提交變更" #: ../fdroidserver/checkupdates.py msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" msgstr ".yml 與本地化檔案之間的「{field}」定義衝突:" #: ../fdroidserver/__main__.py #, fuzzy msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "衝突的參數:無法同時使用 '--verbose' 和 '--quiet' 參數。" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "在您的系統上找不到 '{command}'" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "找不到最新版本程式碼" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "找不到最新版本名稱" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" msgstr "無法找到 {path} 來移除" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " msgstr "無法開啟 APK 檔{path}案作分析 : " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "無法解析大小「{size}」,錯誤類型「{type}」" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "找不到應用程式 ID" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" msgstr "找不到任何版本資訊" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" msgstr "找不到包 ID" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" msgstr "拒絕覆寫現有的簽署金鑰設定!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" msgstr "建立新容器 \"{name}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." msgstr "正在建立組態 s3cmd 的 \"{path}\"。" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Creating empty {config_file}" msgstr "讀取 '{config_file}' 中" #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "建立日誌目錄" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" msgstr "建立新的 S3 bucket:{url}" #: ../fdroidserver/publish.py msgid "Creating output directory" msgstr "建立輸出目錄" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" msgstr "用此密鑰 (SHA256) 來建立簽署的索引:" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" msgstr "建立臨時目錄" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" msgstr "建立未簽署的索引以準備予以簽署" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" msgstr "目前版本碼 {cv} 小於最早構建的登錄項目 {versionCode}" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" msgstr "DEBUG_KEYSTORE 未作設定或是不完整" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" msgstr "從軟體庫刪除缺少中介資料的 APK 和/或 OBB" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" msgstr "正在刪除存檔,軟體庫太大({size},最大 {limit})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" msgstr "正在刪除 git-mirror 歷史記錄,軟體庫太大({size},最大 {limit})" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" msgstr "刪除未知的檔案:{path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" msgstr "描述 '%s' 僅為此應用的摘要" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "描述中出現重覆行" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" msgstr "描述的長度 {length} 已超過 {limit} 個字符限制" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" msgstr "你是指 config/{name}.yml 嗎?" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" msgstr "你是指 {code} 嗎?" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" msgstr "不要將「disable:」加入到產生的建置條目中" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" msgstr "不要部署新檔案到倉庫中" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" msgstr "不要在 URL 中包含 \"{path}\"!" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" msgstr "不要為 Android SDK 的路徑提示,只提示失敗的" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" msgstr "不要移除從金鑰儲存生成的私密金鑰" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" msgstr "不要建立 tarball,在測試一個構建時很有用處" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" msgstr "不要更新軟體庫,在沒有網路連線時測試構建很有用" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "不使用 rsync 檢驗和" #: ../fdroidserver/install.py msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "下載小型軟體庫完整的鏡像" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "下載軟體庫已失敗過一次,尚未重試。" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" msgstr "{url} 下載失敗,錯誤訊息 {error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" msgstr "{path} 中的重複反特徵宣告已被忽略!" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" msgstr "鏡像配置中存在重複條目「%s」!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" msgstr "'{field}' 有重複的連結:{url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" msgstr "錯誤:%(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "錯誤:「server」子指令已經刪除,請使用「deploy」!" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "出錯:未支援 CI 類型,歡迎補強!" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "錯誤:不支援的 git 主機「%s」,歡迎提交修補!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "錯誤:{path} 中的 {key} 不是「archive」或「repo」!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} not a valid key!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" msgstr "錯誤:{path} 中的 {key}:{subkey} 不在允許的鍵值清單中:{allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." msgstr "編碼被設定為「{enc}」fdroid 可能會遇到編碼問題。請將其設定為「UTF-8」以獲得最佳結果。" #: ../fdroidserver/init.py #, python-format msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" "請在此輸入 Android SDK (%s) 的路徑:\n" "> " #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" msgstr "設定檔 {configname} 的環境變數 {var} 尚未設定!" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Environment variable {{env: {var}}} is not set!" msgstr "設定檔 {configname} 的環境變數 {var} 尚未設定!" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "部署「github_releases」時發生錯誤,找不到 {}。(您可能需要先執行 `fdroid update`。)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "在接取軟體庫的地址時出錯" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" msgstr "如果發現問題,則以非零代碼退出" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" msgstr "從來源儲存庫中提取應用程式元數據" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" msgstr "自 APKs 捽取出簽名" #: ../fdroidserver/install.py msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "無法從任何已知來源下載 F-Droid.apk!" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" msgstr "無法複製 {path}:{error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" msgstr "'{apkfilename}' 無法抓取簽名:錯誤訊息{error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" msgstr "讀取 {path} 失敗:錯誤訊息{error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" msgstr "{path} 無法調整大小:錯誤訊息 {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" msgstr "無法建立 S3 bucket : {url}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" msgstr "無法取得 APK 資訊,刪除 {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" msgstr "無法取得 APK 資訊,略過 {path}" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" msgstr "無法取得 APK 簽章金鑰指紋" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" msgstr "無法在 {dev} 安裝 '{apkfilename}':{error}" #: ../fdroidserver/common.py msgid "Failed to sign application" msgstr "無法簽署應用程式" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" msgstr "從 VM 提取 buildserverid:{buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" msgstr "抓取 '{apkfilename}' 的簽署資料 -> '{sigdir}'" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" msgstr "檔案在處理時消失:{path}" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" msgstr "已完成" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "禁用 HTML 標籤" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." msgstr "強制停用應用程式的構建,並且忽視掃描問題而繼續。只允許在測試模式下。" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" msgstr "在 {0} 秒超時後強制停止構建!" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." msgstr "強制掃描已停用的應用程式和建構。" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" msgstr "找到 \"{path}\" 圖像不包含 \"{name}\" 應用的中介資料!" #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" msgstr "找到了 \"{name}\" 的錯誤的籌款檔案 \"{path}\":" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" msgstr "引數中找到無效的 appids" #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "有些應用的版本代號無效" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" msgstr "在 {path} 中找到多個 JAR 簽署區塊檔案" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" msgstr "找到多個簽署者憑證!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" msgstr "{appid} 找到多件中介資料檔案" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." msgstr "軟體庫找到多份簽署證書。" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." msgstr "軟體庫查無簽名證書。" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" msgstr "%s 中找到 non-file" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" msgstr "在 {url} 中找到 {apkfilename}" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" msgstr "在 {filename} 中發現 {count} 個問題" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" msgstr "在 {filename} 中找到 {count} 個警告" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" msgstr "為 {appid} 建立缺少的骨幹中介資料檔案" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" msgstr "Git '%s' 還原失敗" #: ../fdroidserver/common.py msgid "Git clean failed" msgstr "Git 清理失敗" #: ../fdroidserver/common.py msgid "Git fetch failed" msgstr "Git 抓取失敗" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Git 遠端 set-head 失敗: \"%s\"" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Git 重置失敗" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" msgstr "Git 子模組去初始化失敗" #: ../fdroidserver/common.py msgid "Git submodule sync failed" msgstr "Git 子模組同步失敗" #: ../fdroidserver/common.py msgid "Git submodule update failed" msgstr "Git 子模組更新失敗" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" msgstr "HTTPS 必須與 Subversion 網址一起使用!" #: ../fdroidserver/deploy.py #, fuzzy msgid "If a git mirror gets to big, allow the archive to be deleted" msgstr "如果一個 git mirror 變得太大, 允許刪除該 git mirror 的檔案" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "If this upload fails, try manually uploading to {url}" msgstr "如果本次上傳失敗, 嘗試手動上傳至 {url}" #: ../fdroidserver/metadata.py #, fuzzy, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." msgstr "忽略 '{metapath}' 中的 '{field}' , 因為它已經過時了。" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" msgstr "忽略文檔 FUNDING.yml , 文檔大小超過 2048: %s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "忽略資訊清單中的無效元素:%s" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Ignoring deprecated {oldfile}, use {newfile}!" msgstr "檔案 {oldfile} 已經過時了, 請使用檔案 {newfile}" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "忽略無中介資料的套件包: " #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" msgstr "忽略 {apkfilename} 陳舊的緩存資料" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" msgstr "包含 APKs 其簽名為有弱點的演算法,如 MD5" #: ../fdroidserver/mirror.py #, fuzzy msgid "Include the PGP signature .asc files in the mirror" msgstr "在鏡像中加入 PGP 簽名和 .asc 文檔" #: ../fdroidserver/mirror.py #, fuzzy msgid "Include the build logs in the mirror" msgstr "在鏡像中加入編譯紀錄" #: ../fdroidserver/mirror.py #, fuzzy msgid "Include the source tarballs in the mirror" msgstr "在鏡像中加入軟體的源代碼包" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" msgstr "正在匯入來自 %s@%s 的中繼資料" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" msgstr "正在匯入來自 {path} 的中繼資料" #: ../fdroidserver/common.py msgid "Initialising submodules" msgstr "初始化子模組" #: ../fdroidserver/install.py msgid "Install all signed applications available" msgstr "安裝所有已簽署可用的應用程式" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" msgstr "在裝置上安裝構建套件包" #: ../fdroidserver/install.py #, fuzzy, python-format msgid "Installing %s..." msgstr "正在安裝中 %s…" #: ../fdroidserver/install.py #, fuzzy, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." msgstr "正在將軟體 '{apkfilename}' 安裝到設備 {dev} 上 ..." #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" msgstr "與軟體庫 HTTP 伺服器互動" #: ../fdroidserver/update.py msgid "Invalid APK" msgstr "無效的 APK" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" msgstr "無效的自動更新模式:{mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" msgstr "無效的更新檢查模式:{mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" msgstr "無效的 VercodeOperation:{field}" #: ../fdroidserver/lint.py #, fuzzy, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "無效的 VercodeOperation:{invalid_ops}" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Invalid application ID {appid}" msgstr "無效的 application ID {appid}" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "無效的排序列表" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" msgstr "無效的已發佈檔案名稱:%s" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" msgstr "建置設定中的 NDK 項目無效:「{ndk}」" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " msgstr "無效的重新導向到非 HTTPS:{before}->{after}。 " #: ../fdroidserver/metadata.py #, fuzzy, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" msgstr "無效的 scrlib metadata: 檔案 '{file}' 不存在" #: ../fdroidserver/metadata.py #, fuzzy, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" msgstr "無效的 scrlib metadata: 無法解析檔案 '{file}'" #: ../fdroidserver/metadata.py #, fuzzy, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" msgstr "無效的 scrlib metadata: 檔案 '{file}' 裡有未知的密鑰 '{key}'" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" msgstr "JAR 簽名驗證失敗:{path}" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" msgstr "JAR 簽名已驗證:{path}" #: ../fdroidserver/scanner.py #, fuzzy msgid "Java JAR file" msgstr "Java JAR 檔案" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" msgstr "找不到 Java JDK!請安裝在標準的位置或是設定 java_paths!" #: ../fdroidserver/scanner.py #, fuzzy msgid "Java compiled class" msgstr "Java .class 檔案" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" msgstr "找不到 Java jarsigner!請安裝在標準的位置或是設定 java_paths!" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" msgstr "JavaScript 在 HTML src 的屬性" #: ../fdroidserver/build.py #, fuzzy, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" msgstr "讀取 minSdkVersion 失敗:\"{apkfilename}\"" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" msgstr "金鑰庫的簽署金鑰:\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "在 AllowedAPKSigningKeys 中使用了已知的除錯金鑰: " #: ../fdroidserver/lint.py #, fuzzy, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" msgstr "最近採用的提交 '{commit}' 似乎是一個標籤,但是更新的檢查模式為 '{ucm}'" #: ../fdroidserver/lint.py #, fuzzy msgid "Liberapay donation methods belong in the Liberapay: field" msgstr "Liberapay 捐款方式在 LiberapayID 標誌下" #: ../fdroidserver/rewritemeta.py #, fuzzy msgid "List files that would be reformatted (dry run)" msgstr "列出將重新格式化的檔案" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" msgstr "在 f-droid.org 網址中已含括區域" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" msgstr "異常時停止做構建" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." msgstr "軟體庫鏡像異常。" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" msgstr "異常的 serverwebroot 行:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "已達到 ZIP 檔案中的最大遞迴深度:%s" #: ../fdroidserver/index.py #, python-brace-format msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py #, fuzzy msgid "Mirror the full repo and archive, all file types." msgstr "保存整個軟體庫和檔案的副本, 所有的檔案格式 。" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" msgstr "輸出目錄消失" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" msgstr "正在將反功能宣告移至本地化檔案:" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" msgstr "在 config.yml 中未設定「repo_pubkey」或「keystorepass」" #: ../fdroidserver/verify.py #, fuzzy, python-format msgid "No APK for package: %s" msgstr "無此套件包:%s" #: ../fdroidserver/common.py msgid "No Android SDK found!" msgstr "未找到 Android SDK!" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "查無附加的設備" #: ../fdroidserver/install.py msgid "No devices found for `adb install`! Please plug one in." msgstr "未找到可用於執行 `adb install` 的裝置!請連接一台裝置。" #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "在 URL 無指紋。" #: ../fdroidserver/common.py msgid "No git submodules available" msgstr "無可用的 git 子模組" #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "No gradle project could be found. Specify --subdir?" msgstr "找不到任何 gradle 專案。 需要用參數 '--subdir' 指定子目錄嗎?" #: ../fdroidserver/import_subcommand.py msgid "No information found." msgstr "查無資訊。" #: ../fdroidserver/checkupdates.py #, fuzzy msgid "No matching tags found" msgstr "查無資訊" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." msgstr "在 {0} 中找不到最低 SDK 版本,使用預設值 (3)。" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" msgstr "不必要指明的應用程式為自由軟體" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" msgstr "不必指明該應用為 Android 版本" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" msgstr "未設定選項!編輯 config.yml 檔,其中至少要設定一個:" #: ../fdroidserver/common.py msgid "No packages specified" msgstr "未指定套件" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" msgstr "%s 沒有已簽署的 APK" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" msgstr "輸出目錄無簽署 - 無須採取動作" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" msgstr "{path} 找不到簽署證書" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" msgstr "無此套件包:%s" #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" msgstr "應用 {appid} 無版本代號 {versionCode}" #: ../fdroidserver/checkupdates.py #, fuzzy msgid "No tags found" msgstr "查無附加的設備" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" msgstr "無未簽署目錄 - 無須採取行動" #: ../fdroidserver/__main__.py #, fuzzy msgid "No version information could be found." msgstr "未發現版本資訊" #: ../fdroidserver/common.py #, fuzzy msgid "Not a valid size definition: \"{}\"" msgstr "檔案大小的定義是無效的: \"{}\"" #: ../fdroidserver/signindex.py msgid "Nothing to do" msgstr "無須採取動作" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." msgstr "{appid} 無須採取行動." #: ../fdroidserver/init.py msgid "Now set these in config.yml:" msgstr "現在設定這些在 config.yml 中:" #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" msgstr "比起任何 APK,OBB 檔案有較新的版本代號 ({integer}):" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" msgstr "OBB 檔名的前綴須為 \"main.\" 或 \"patch.\":" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" msgstr "OBB 的套件包名稱與支援的 APK 並不相符:" #: ../fdroidserver/deploy.py #, fuzzy msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "因為機器是離線的, 跳過 git mirror 的生成直到 `fdroid deploy`" #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." msgstr "其中一個「github_releases」設定項目缺少「packageNames」值。略過..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "其中一個「github_releases」設定項目缺少「projectUrl」值。略過..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "其中一個「github_releases」設定項目缺少「token」值。略過..." #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "圖像僅支援 PNG 和 JPEG,可在下方找到:{path}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" msgstr "只處理具有自動更新的應用程式" #: ../fdroidserver/lint.py #, fuzzy msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "OpenCollective 的捐款方式在 OpenCollective: 的標誌下面" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "將 json 報告輸出到以 APK 命名的檔案。" #: ../fdroidserver/scanner.py #, fuzzy msgid "Output JSON to stdout." msgstr "輸出 JSON 到 stdout 。" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py #, fuzzy msgid "Outputting JSON" msgstr "正在導出 JSON 中" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." msgstr "該專案的整體授權。" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" msgstr "覆蓋在 {apkfilename} 中的空白 versionName 從詮釋資料:{version}" #: ../fdroidserver/import_subcommand.py #, fuzzy, python-brace-format msgid "Package \"{appid}\" already exists" msgstr "軟體 \"{appid}\" 已經存在了" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" msgstr "解析 '{path}' 的單號" #: ../fdroidserver/common.py msgid "Password required with username" msgstr "用戶名稱須有密碼" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." msgstr "如果不在根目錄下,路徑為 android 主要專案的子目錄。" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" msgstr "Android SDK 的路徑(有時在 ANDROID_HOME 中設定)" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" msgstr "到 git 軟體庫的路徑用在日誌" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" msgstr "給軟體庫簽署金鑰的金鑰庫路徑" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "在終端機顥示祕密變數以便於複製/貼上" #: ../fdroidserver/install.py #, python-brace-format msgid "Privacy mode was enabled based on your locale ({country_code})." msgstr "已根據您的地區({country_code})啟用了隱私模式。" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" msgstr "ZIP 檔案出現問題:%s,錯誤 %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" msgstr "'{path}' 的 xml 有問題" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" msgstr "處理自動更新" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" msgstr "處理 {apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" msgstr "處理 {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" msgstr "產生可讀懂的 XML/JSON 格式以進行檔案索引" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." msgstr "要導入的專案網址。" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" msgstr "標點應予避免" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" msgstr "將日誌推送到 git 遠端軟體庫" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" msgstr "推二進制的透明日誌到{url}" #: ../fdroidserver/deploy.py #, fuzzy msgid "Pushing to remote server failed!" msgstr "Git 遠端 set-head 失敗: \"%s\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" msgstr "發佈到 {url}" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" msgstr "快速啟動新的儲存庫" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" msgstr "讀取所有的中介資料檔案並退出" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" msgstr "讀取 '{config_file}' 中" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" msgstr "讀取套件名稱/版本代碼/版本名稱 失敗,APK 無效:'{apkfilename}'" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" msgstr "讀取套件名稱/版本代碼/版本名稱 失敗,APK 無效:'{apkfilename}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" msgstr "從緩存讀取 {apkfilename}" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "從網路重新整理並快取掃描器規則與簽章" #: ../fdroidserver/publish.py #, python-brace-format msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" #: ../fdroidserver/verify.py msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "移除指定檔案" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" msgstr "正在移除 {path}\"" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "為不符合 package.name_123.apk 格式的 APK 檔案更名" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" msgstr "用提供的 debug.keystore 放棄 {apkfilename}" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" msgstr "重設超過最大像素的所有圖示之尺寸並且退出" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" msgstr "將輸出限定為警告和錯誤" #: ../fdroidserver/net.py #, python-format msgid "Retrying failed download: %s" msgstr "" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "重寫所有的中介資料檔案" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" msgstr "重覆寫入 '{appid}'" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "在有未遞交變更的 git 倉庫上執行" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" msgstr "在 {cibase} 中尋找 -debug.apk,並略過 repo_basedir {repo_basedir}" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "執行 rewritemeta 到固定格式" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" msgstr "關閉 MD5 檢查以執行首次通過" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" msgstr "在 {path} 裡執行 wget" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" msgstr "{url} 的 SHA-256 與項目不符!" #: ../fdroidserver/build.py #, fuzzy msgid "Scan the resulting APK(s) for known non-free classes." msgstr "在生成的 APK 檔案中掃描已知的閉源軟體 。" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" msgstr "掃描套件包的原始碼" #: ../fdroidserver/scanner.py #, fuzzy, python-brace-format msgid "Scanner found {count} problems in {apk}" msgstr "掃瞄器在 {apk} 發現{count} 個問題" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" msgstr "掃瞄器在 {appid} 發現{count} 個問題:" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" msgstr "掃瞄器在 {appid} 發現 {count} 個問題:{versionCode}:" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "掃瞄器發現 {} 問題" #: ../fdroidserver/scanner.py msgid "Scanning APK for extra signing blocks." msgstr "正在掃描 APK 以檢查額外的簽章區塊。" #: ../fdroidserver/scanner.py #, fuzzy msgid "Scanning APK with dexdump for known non-free classes." msgstr "在生成的 APK 檔案中掃描已知的閉源軟體 。" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" msgstr "正在設定 NDK {release}({version})" #: ../fdroidserver/common.py msgid "Set clock to that time using:" msgstr "設定時鐘到那時使用:" #: ../fdroidserver/nightly.py #, fuzzy msgid "Set maximum releases in repo before older ones are archived" msgstr "先設置軟體庫的軟體最大釋出數, 再將舊軟體歸檔" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" msgstr "設定開啟的檔案限制為 {integer}" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" msgstr "為非正式編譯庫建立一個應用編譯" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " msgstr "設定開啟檔案的限制失敗: " #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" msgstr "為此構建設定 {0} 秒後超時" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" msgstr "簽署並放置套件包在軟體庫中" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" msgstr "簽署使用更新建立的索引 --nosign" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" msgstr "跳過掃描二進制碼和其它問題的原始碼" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" msgstr "略過帶無效簽署的 '{apkfilename}'!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" msgstr "因儲存庫過大(>%.2fGB),略過 GitLab Pages 鏡像!" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" msgstr "略過 {appid} 的索引產生" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" msgstr "略過無效簽名的 {apkfilename}!" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" msgstr "略過 {appid}:關閉" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" msgstr "指定要將軟體庫同步到本地的資料夾" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" msgstr "指定一個身份檔案以提供給 SSH 進行 rsync" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." msgstr "指定要使用哪個除錯金鑰庫檔。" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" msgstr "傾湧出比正常情況下更多的資訊" #: ../fdroidserver/nightly.py #, fuzzy, python-brace-format msgid "Stripping mystery signature from {apkfilename}" msgstr "正從軟體 {apkfilename} 除去未知的簽名" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" msgstr "摘要 '%s' 僅是應用程式的名稱" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" msgstr "摘要的長度 {length} 超過了字符 {limit} 限制" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" msgstr "在 {path} 中的系統時鐘比日期早!" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" msgstr "標籤更新模式目前僅適用於 git、hg、bzr 與 git-svn 儲存庫" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" msgstr "在 git-svn 中使用了標籤更新模式,但儲存庫未設定標籤" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "測試模式 - 將輸出只放在 tmp 目錄中,即使輸出已經存在,仍然構建。" #: ../fdroidserver/index.py msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" msgstr "OBB 版本程式碼須在 \"{name}\" 之後:" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" msgstr "軟體庫日誌的總部網址(預設:https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" msgstr "寫入目錄的鏡像到" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" msgstr "包含在此軟體庫的檔案 (path 或 glob)" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." msgstr "軟體庫的指紋並不相符。" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" msgstr "local_copy_dir \"{path}\" 根目錄不存在!" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" msgstr "發生主要別名衝突 - 發佈中止" #: ../fdroidserver/common.py #, fuzzy msgid "These are the apps that have been archived from the main repo." msgstr "這些是從主軟體庫中歸檔的軟體。" #: ../fdroidserver/mirror.py #, fuzzy msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." msgstr "" "錯誤:此命令絕不該用於鏡像 f-droid.org!\n" "完整的 f-droid.org 鏡像需要超過 200GB。" #: ../fdroidserver/common.py #, fuzzy msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." msgstr "這是一個和 F-Droid 配套使用的軟體庫。此軟體庫中包含由程式原開發者編譯製作而成的二進制包和由 fdroid.org 的管理員使用 https://gitlab.com/fdroid 上的開發者工具編譯製作而成的二進制包。" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" msgstr "這個軟體庫已有本地的中介資料:%s" #: ../fdroidserver/init.py #, python-format msgid "" "To complete the setup, add your APKs to \"%s\"\n" "then run \"fdroid update -c; fdroid update\". You might also want to edit\n" "\"config.yml\" to set the URL, repo name, and more. You should also set up\n" "a signing key (a temporary one might have been automatically generated).\n" "\n" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" "要完成設定,請將您的 APK 新增至「%s」\n" "然後執行「fdroid update -c; fdroid update」。您可能也想要編輯\n" "「config.yml」以設定網址、儲存庫名稱等。您還應該設定\n" "簽署金鑰(可能已自動產生一個暫時性的金鑰)。\n" "\n" "更多資訊請參考:https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "與 https://f-droid.org/docs/Signing_Process" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "要使用 awsbucket, awssecretkey 與 awsaccesskeyid 必須在 config.yml 進行設定!" #: ../fdroidserver/deploy.py #, fuzzy msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" msgstr "要使用 awsbucket, awssecretkey 與 awsaccesskeyid 必須在 config.yml 進行設定!" #: ../fdroidserver/lint.py #, fuzzy msgid "URL must start with https:// or http://" msgstr "URL 必須由 https:// 和 http:// 起頭" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" msgstr "不應使用 URL 縮短網址" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" msgstr "描述中的 URL {url} : {error}" #: ../fdroidserver/lint.py #, fuzzy msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" msgstr "這個許可證標籤不符合預期 \"{}\"! 只能使用 https://spdx.org/license-list 上的,經過 FSF 或 OSI 驗證的許可證標籤啦。" #: ../fdroidserver/lint.py #, fuzzy msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "這個許可證標籤不符合預期 \"{}\"! 只能使用你的配置文檔裡面配置好的許可證標籤啦" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Unknown entry {key} in {configname}" msgstr "配置文檔 {configname} 裡面登記的密鑰 {key} 是未知的" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "發現未知的異常!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" msgstr "在 '{versionName}' 編譯出現不明的檔案 '{filename}'" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" msgstr "未知的中介資料格式:%s" #: ../fdroidserver/metadata.py #, fuzzy, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" msgstr "Metadata 的格式是未知的: 路徑: {path} (使用: *.yml)" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " msgstr "不明的 aapt 版本,可能會出問題: " #: ../fdroidserver/lint.py msgid "Unnecessary leading space" msgstr "不必要的前導空間" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" msgstr "不必要的尾隨空間" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" msgstr "在 '{path}' 中無法辨識的 app 欄位 '{fieldname}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "在 '{path}' 中無法辨識的構建旗標 '{build_flag}'" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" msgstr "用於軟體庫的圖片,不支援的檔案類型 \"{extension}\"" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" msgstr "找到不支援的圖形檔案:{path}" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" msgstr "在 %s 未使用的 extlib" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" msgstr "在 %s 未使用的檔案" #: ../fdroidserver/scanner.py #, fuzzy, python-format msgid "Unused scandelete path: %s" msgstr "路徑: %s 被標記為掃描並刪除,但並未執行" #: ../fdroidserver/scanner.py #, fuzzy, python-format msgid "Unused scanignore path: %s" msgstr "檔案路徑: %s 被標記為不掃描,但並未出現" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "為新的套件包更新軟體庫資訊" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" msgstr "為網址更新二進制的透明日誌" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData 有無效的 URL:{url}" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" msgstr "UpdateCheckData 必須符合整數版本代碼(\\d 或 [0-9]):{codeex}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" msgstr "UpdateCheckData 必須使用 HTTPS URL:{url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" msgstr "UpdateCheckData 不是有效的 URL:{url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "已設定 UpdateCheckMode,但似乎尚未執行 checkupdates。" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py #, fuzzy msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName 已經被設定成已知的 application id - 它可以被移除" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" msgstr "正在將軟體檔案 {apkfilename} 上傳到 androidobservatory.org" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "Uploading {apkfilename} to virustotal" msgstr "正在將軟體檔案 {apkfilename} 上傳到 virustotal" #: ../fdroidserver/lint.py #, fuzzy msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "使用 /HEAD 取代 /master 來指向默認分支的一個檔案" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "利用`fdroid update -c` 指令來建立。" #: ../fdroidserver/build.py msgid "Use build server" msgstr "使用構建伺服器" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" msgstr "使用來自 APK 的日期,而不是新增之 APK 目前的時間" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." msgstr "使用 \"{path}\" 對 s3cmd 組態。" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." msgstr "使用 \"{path}\" 對 s3cmd 組態。" #: ../fdroidserver/common.py #, fuzzy msgid "Using APK Signature v2" msgstr "使用 APK Signature v2" #: ../fdroidserver/common.py #, fuzzy msgid "Using APK Signature v3" msgstr "使用 APK Signature v3" #: ../fdroidserver/common.py #, fuzzy msgid "Using JAR Signature" msgstr "使用 APK Signature v2" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "使用 Java 的 jarsigner,這並不建議用於驗證 APK!使用 apksigner" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" msgstr "使用空白字典而非 {path} 的內容!" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" msgstr "使用現有的金鑰庫 \"{path}\"" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "Using rclone to sync with: {url}" msgstr "使用 s3cmd 來同步:{url}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" msgstr "使用 s3cmd 來同步:{url}" #: ../fdroidserver/__main__.py msgid "Valid commands are:" msgstr "有效的指令是:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." msgstr "使用本機快取複本來驗證而非重新下載。" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" msgstr "驗證下載套裝軟體的完整性" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "正在驗證索引簽名:" #: ../fdroidserver/install.py #, python-brace-format msgid "Verifying package {path} with apksigner." msgstr "正在使用 apksigner 驗證套件 {path}。" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "VirusTotal API key 無法上傳大於 32MB 的檔案, 選擇使用 {url} 來上傳檔案 {path} 。" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "關於中介資料可能錯誤的警告" #: ../fdroidserver/scanner.py msgid "WebAssembly binary file" msgstr "WebAssembly 二進位檔案" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "當已組態為簽名的索引時,只能在此階段建立無簽名的索引" #: ../fdroidserver/lint.py #, fuzzy msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." msgstr "在默認情況下, 檢查整個軟體庫中的可疑代碼時不會檢查 yaml 檔案 (yamllint) 。 使用本選項將會忽略默認選項,在檢查整個軟體庫中的可疑代碼時強制檢查 yaml 檔案 (yamllint) 。" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "當簽署或驗證失敗時,以錯誤碼結束。" #: ../fdroidserver/install.py msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" msgstr "您是否想透過 adb 下載並安裝 F-Droid.apk?(是/否)" #: ../fdroidserver/install.py msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" msgstr "您是否想從 f-droid.org 下載應用程式?(是/否)" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "產生金鑰時使用 X.509 的'專有名稱'" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" msgstr "可以使用 ANDROID_HOME 來設定 SDK 的路徑,i.e.:" #: ../fdroidserver/scanner.py #, fuzzy msgid "ZIP file archive" msgstr "ZIP 壓縮檔案" #: ../fdroidserver/install.py #, python-brace-format msgid "adb reports {serial} is \"{status}\"!" msgstr "adb 回報 {serial} 為「{status}」!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" msgstr "添增 IdentityFile 到 {path}" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "添加到 {name}:{path}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "模糊選項:%(option)s 可以相配 %(matches)s" #: ../fdroidserver/common.py #, python-brace-format msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py #, fuzzy msgid "apksigner not found! Cannot sign or verify modern APKs" msgstr "apksigner 不見了 , 我們需要用它來生成數字簽名 !" #: ../fdroidserver/common.py #, fuzzy msgid "apksigner not found, it's required for signing!" msgstr "apksigner 不見了 , 我們需要用它來生成數字簽名 !" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py #, fuzzy msgid "application ID of file to operate on" msgstr "從檔案的 application ID 著手" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py #, fuzzy msgid "application ID with optional versionCode in the form APPID[:VERCODE]" msgstr "application ID 具有任選的 versionCode 在此的格式為 APPID [:VERCODE]" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" msgstr "archive_url 必須以 /archive 結尾" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" msgstr "引數 \"-\" 為帶 %r 模式" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" msgstr "引數 %(argument_name)s:%(message)s" #: ../fdroidserver/nightly.py #, fuzzy msgid "attempting bare SSH connection to test deploy key:" msgstr "試圖用裸的 ssh 連線來測試佈署金鑰:" #: ../fdroidserver/common.py #, fuzzy msgid "can not parse scrlib spec (not a string): '{}'" msgstr "無法解析 scrlib spec (不是字符): '{}'" #: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "無法打開 '%(filename)s':%(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" msgstr "無法開啟非 HTTPS 網址:'{};" #: ../fdroidserver/build.py #, fuzzy, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "找不到必須的 scrlibs: \"{path}\"" #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "無法有多個子解析器引數" #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" msgstr "無法合併動作 - 二個群體被命名為 %r" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" msgstr "無法發佈更新,是否正確地設定了佈署金鑰?" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" msgstr "複製 {url}" #: ../fdroidserver/__main__.py #, fuzzy msgid "commands from plugin modules:" msgstr "來自插換式模塊的命令:" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" msgstr[0] "相衝突的選項字串:%s" #: /usr/lib/python3.11/argparse.py #, fuzzy, python-format msgid "conflicting subparser alias: %s" msgstr "相衝突的選項字串:%s" #: /usr/lib/python3.11/argparse.py #, fuzzy, python-format msgid "conflicting subparser: %s" msgstr "相衝突的選項字串:%s" #: ../fdroidserver/metadata.py #, fuzzy, python-brace-format msgid "could not parse '{path}'" msgstr "無法解析 '{path}'" #: ../fdroidserver/common.py #, fuzzy msgid "could not parse srclib spec (no name specified): '{}'" msgstr "無法解析 scrlib spec (沒有指定參考文獻): '{}'" #: ../fdroidserver/common.py #, fuzzy msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "無法解析 scrlib spec (沒有指定參考文獻): '{}'" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" msgstr "已建立 {path}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" msgstr "目前版本較新:舊版本代碼={old},新版本代碼={new}" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" msgstr "刪除:repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" msgstr "依存檔案未上鎖" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "將進程日誌 {path} 部署到 {dest}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" msgstr "dest= 如 %r 選項為必須" #: ../fdroidserver/scanner.py msgid "downloading '{}'" msgstr "正在下載「{}」" #: ../fdroidserver/scanner.py #, fuzzy msgid "downloading scanner signatures from '{}' failed" msgstr "正從軟體 {apkfilename} 除去未知的簽名" #: ../fdroidserver/scanner.py #, fuzzy msgid "executable binary, possibly code" msgstr "可執行二進制檔案, 估計是代碼" #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "預期的 %s 引數" #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "預期至少有一個引數" #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "最多一個引數" #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "預期有一個引數" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" msgstr "用法:fdroid [-h|--help|--version] <命令> []" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "從網路擷取最新版本的簽章" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "強制中介資料錯誤(預設值)作警告或忽略。" #: ../fdroidserver/common.py msgid "git svn clone failed" msgstr "Git svn 複製失敗" #: ../fdroidserver/scanner.py #, fuzzy msgid "gzip file archive" msgstr "gzip 壓縮檔案" #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" msgstr "被忽略的明確引數 %r" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1 必須要有簽名, 使用 `fdroid signindex`來建立一組簽名!" #: ../fdroidserver/index.py #, fuzzy msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1 必須要有簽名, 使用 `fdroid signindex`來建立一組簽名!" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "無效 %(type)s 值:%(value)r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "無效選項:%(value)r (選取自 %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "無效 conflict_resolution 值:%r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" msgstr "無效的選項字串 %(option)r:必須以字符 %(prefix_chars)r為起頭" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" msgstr "找不到 ipfs_cid,略過 CIDv1 產生" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" msgstr "最新的建置配方較新:舊版本代碼={old},新版本代碼={new}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgstr "local_copy_dir 未以 \"fdroid\"結尾,也許你指示的是: \"{path}\"" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" msgstr "local_copy_dir 必須為絕對路徑!" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" msgstr "local_copy_dir 為目錄,不是檔案!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" msgstr "鏡像 '%s' 並不是以 'fdroid' 作結尾!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "設定了兩次鏡像,分別在 config.xml 和 {path} 中!" #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "相互獨佔的引數必須為可選的" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" msgstr "下次 {name} 快取更新將於 {time} 進行" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" msgstr "在 {appid} 中沒有 \"icon\"" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "無 APK 被供應" #: ../fdroidserver/checkupdates.py #, fuzzy msgid "no version information found" msgstr "未發現版本資訊" #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "不許可帶引數 %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" msgstr "引數 %s 必須要有一個" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" msgstr "只接受字串,列表和元組" #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" msgstr "選項" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" msgstr "覆寫現有的 {path}" #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "位置參數" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "process log deploy {path} to {dest} failed!" msgstr "將進程日誌 {path} 部署到 {dest} 但失敗了!" #: ../fdroidserver/build.py msgid "reference binary missing signature" msgstr "參考二進位檔缺少簽章" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" msgstr "拒絕透過不安全的 HTTP 連線下載 (使用 HTTPS 或指明 --no-https-check): {apkfilename}" #: ../fdroidserver/index.py #, fuzzy, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." msgstr "軟體庫圖標 (repo_icon)\"repo/icons/%s\" 不存在, 正在生成佔位用的圖標。" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" msgstr "repo_url 必須以 /repo 結尾" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" msgstr "rsync 遺失或損壞:{error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd 同步索引 {path} 到 {url} 並刪除" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "s3cmd 同步索引 {path} 到 {url} 並刪除" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "掃描器快取格式錯誤!您可以使用以下指令清除它:'{clear}'" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" msgstr "serverwebroot: 路徑沒有以「fdroid」結尾,也許你想表達的是這些之一:" #: ../fdroidserver/scanner.py #, fuzzy msgid "shared library" msgstr "共享庫 (shared library)" #: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "顯示此說明訊息並離開" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." msgstr "簽署 APK, 可由檔案路徑或是 HTTPS 網址." #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" msgstr "跳過部署完整構建紀錄:紀錄內容為空" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" msgstr "跳過部署完整構建紀錄:未在設定中啟用" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" msgstr "略過來源 tarball: {path}" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" msgstr "srclibs 缺失名稱或 @" #: ../fdroidserver/scanner.py #, fuzzy msgid "static library" msgstr "靜態庫 (static library)" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "提供的參考二進位檔具有允許的簽署者 {signer}" #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "需要下列參數:%s" #: ../fdroidserver/install.py msgid "true" msgstr "" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "非預期選項字串: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "不明解析器 %(parser_name)r (選項: %(choices)s)" #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" msgstr "無法辨識的引數:%s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "'{config_file}' 檔案不安全的權限(應為 0600)!" #: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "使用方法: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" msgstr "使用 Apache libcloud 來同步 {url}" #: ../fdroidserver/deploy.py #, fuzzy msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "因為 virustotal.com 正在限制收到請求的頻率, 這邊正在等待中, 過一會再試 ..." #: ../fdroidserver/install.py msgid "yes" msgstr "是" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" msgstr[0] "{0} 應用, {1} 主要別名" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) 沒有中介資料!" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "{apkfilename} AndroidManifest.xml 有一個無效的日期: " #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "軟體 {appid} 沒有名字! 使用 application ID 代替。" #. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" msgstr "來自路徑 {path} 的 {appid} 並不是一個有效的 android application ID!" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" msgstr "來自 {path} 的 {appid} 並不是一個有效的 Java 套件名稱!" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" msgstr "{appid} 同時具有 APK 和檔案:{files}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "{appid} 缺少 {name}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" msgstr "{appid}: 不明的 extlib {path} 編譯在 '{versionName}'" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" msgstr "{appid}:沒有指定構建,在目前的原始碼狀態執行" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" msgstr "{appid}:{field} 必須是一個 '{type}',但它是一個 '{fieldtype}!'" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" msgstr "{appid}:{field} 必須是一個 '{type}',但它是一個 '{fieldtype}'!" #: ../fdroidserver/metadata.py #, fuzzy, python-brace-format msgid "{build_flag} must be an integer, found: {value}" msgstr "{build_flag} 必須是整數, 找到: {value}" #: ../fdroidserver/metadata.py #, fuzzy, python-brace-format msgid "{build_flag} must be list or string, found: {value}" msgstr "{build_flag} 必須是整數, 找到: {value}" #: ../fdroidserver/metadata.py #, fuzzy, python-brace-format msgid "{file} is blank or corrupt!" msgstr "檔案 {file} 是空的或損壞的 !" #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" 不存在! 請檢查 \"config.yml\"." #: ../fdroidserver/update.py #, python-brace-format msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, fuzzy, python-brace-format msgid "{path} already exists, ignoring import results!" msgstr "路徑 {path} 已存在, 忽略導入的結果!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" msgstr "\"{path}\" 不存在!經由執行建立它:" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "{path} 有不正確的檔案簽章「{pattern}」,可能是 Janus 漏洞!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} 已被 VirusTotal 標記 {count} 次:" #: ../fdroidserver/install.py #, python-brace-format msgid "{path} has the wrong fingerprint ({fingerprint})!" msgstr "{path} 的指紋({fingerprint})不正確!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "{path} 不是「鍵:值」字典,而是一個 {datatype}!" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "{path} is not a standard config file!" msgstr "'config.yml' 未設定 'sdk_path'!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" msgstr "{path} 不是清單,而是一個 {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" msgstr "{path} 不是 {expected_type},而是一個 {datatype}!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" msgstr "{path} 為零尺寸!" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" msgstr "檔案 {path} 大於 200MB , 手動上傳: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" msgstr "{path}:「{code}」不是有效的 ISO 3166-1 alpha-2 國家代碼!" #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "{path}: {error}" msgstr "讀取路徑 {path} 失敗:錯誤訊息{error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" msgstr "{url} 未以 \"fdroid\" 結尾,檢查 URL 路徑!" #: ../fdroidserver/import_subcommand.py #, fuzzy, python-brace-format msgid "{url} does not start with \"http\"!" msgstr "{url} 未以 \"http\" 起頭 !" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" msgstr[0] "{} 編譯失敗" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" msgstr[0] "{} 編譯成功" ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742812298.0 fdroidserver-2.4.0/makebuildserver0000755000175000017500000004446214770232212016043 0ustar00hanshans#!/usr/bin/env python3 import os import re import requests import stat import sys import shutil import subprocess import vagrant import hashlib import yaml import json import logging from clint.textui import progress from optparse import OptionParser import fdroidserver.tail import fdroidserver.vmtools parser = OptionParser() parser.add_option('-v', '--verbose', action="count", dest='verbosity', default=1, help="Spew out even more information than normal") parser.add_option('-q', action='store_const', const=0, dest='verbosity') parser.add_option("-c", "--clean", action="store_true", default=False, help="Build from scratch, rather than attempting to update the existing server") parser.add_option('--skip-box-verification', action="store_true", default=False, help="""Skip verifying the downloaded base box.""") parser.add_option('--skip-cache-update', action="store_true", default=False, help="""Skip downloading and checking cache.""" """This assumes that the cache is already downloaded completely.""") parser.add_option('--copy-caches-from-host', action="store_true", default=False, help="""Copy gradle and pip caches into the buildserver VM""") parser.add_option('--keep-box-file', action="store_true", default=False, help="""Box file will not be deleted after adding it to box storage""" """ (KVM-only).""") options, args = parser.parse_args() logformat = '%(levelname)s: %(message)s' loglevel = logging.DEBUG if options.verbosity == 1: loglevel = logging.INFO elif options.verbosity <= 0: loglevel = logging.WARNING logging.basicConfig(format=logformat, level=loglevel) tail = None BASEBOX_DEFAULT = 'debian/bookworm64' BASEBOX_VERSION_DEFAULT = "12.20241217.1" BASEBOX_CHECKSUMS = { "12.20241217.1": { "libvirt": { "box.img": "7cda96dd706fe5c4eba8210abc944b047842ee6655167933cb7d5ea99cb962bb", "Vagrantfile": "f9c6fcbb47a4d0d33eb066859c8e87efd642287a638bd7da69a9e7a6f25fec47", "metadata.json": "20dc0268a79410dbf01c7e544ba5138f6f695a298b53c56c87a25f68c5031173", }, "virtualbox": { "box.ovf": "abc34993d37a85a9f89506621bdb3e2cb11eda7c7f6b2d19de9e866264031532", "box.vmdk": "62a2991aa9543b64cc273c545dc2403adf844644253c9fe162632030c4dd21c4", "Vagrantfile": "0bbc2ae97668d8da27ab97b766752dcd0bf9e41900e21057de15a58ee7fae47d", "metadata.json": "ffdaa989f2f6932cd8042e1102371f405cc7ad38e324210a1326192e4689e83a", } }, } configfile = 'buildserver/Vagrantfile.yaml' if not os.path.exists(configfile): logging.warning('%s does not exist, copying template file.' % configfile) shutil.copy('examples/Vagrantfile.yaml', configfile) with open(configfile) as fp: config = yaml.safe_load(fp) if not isinstance(config, dict): logging.info("config is empty or not a dict, using default.") config = {} with open('buildserver/Vagrantfile') as fp: m = re.search(r"""\.vm\.box\s*=\s*["'](.*)["']""", fp.read()) if not m: logging.error('Cannot find box name in buildserver/Vagrantfile!') sys.exit(1) config['basebox'] = m.group(1) config['basebox_version'] = BASEBOX_VERSION_DEFAULT config['cachedir'] = os.path.join(os.getenv('HOME'), '.cache', 'fdroidserver') show_config_deprecation = False if os.path.exists('makebuildserver.config.py'): show_config_deprecation = True logging.error('makebuildserver.config.py exists!') elif os.path.exists('makebs.config.py'): show_config_deprecation = True # this is the old name for the config file logging.error('makebs.config.py exists!') if show_config_deprecation: logging.error('Config is via %s and command line flags.' % configfile) parser.print_help() sys.exit(1) logging.debug("Vagrantfile.yaml parsed -> %s", json.dumps(config, indent=4, sort_keys=True)) # Update cached files. if not os.path.exists(config['cachedir']): os.makedirs(config['cachedir'], 0o755) logging.debug('created cachedir {} because it did not exists.'.format(config['cachedir'])) if config['vm_provider'] == 'libvirt': tmp = config['cachedir'] while tmp != '/': mode = os.stat(tmp).st_mode if not (stat.S_IXUSR & mode and stat.S_IXGRP & mode and stat.S_IXOTH & mode): logging.critical('ERROR: %s will not be accessible to the VM! To fix, run:', tmp) logging.critical(' chmod a+X %s', tmp) sys.exit(1) tmp = os.path.dirname(tmp) logging.debug('cache dir %s is accessible for libvirt vm.', config['cachedir']) CACHE_FILES = [ ('https://services.gradle.org/distributions/gradle-6.8.3-bin.zip', '7faa7198769f872826c8ef4f1450f839ec27f0b4d5d1e51bade63667cbccd205'), ('https://services.gradle.org/distributions/gradle-7.0.2-bin.zip', '0e46229820205440b48a5501122002842b82886e76af35f0f3a069243dca4b3c'), ] def sha256_for_file(path): with open(path, 'rb') as f: s = hashlib.sha256() while True: data = f.read(4096) if not data: break s.update(data) return s.hexdigest() def verify_file_sha256(path, sha256): if sha256_for_file(path) != sha256: logging.critical("File verification for '{path}' failed! " "expected sha256 checksum: {checksum}" .format(path=path, checksum=sha256)) sys.exit(1) else: logging.debug("sucessfully verifyed file '{path}' " "('{checksum}')".format(path=path, checksum=sha256)) def get_vagrant_home(): return os.environ.get('VAGRANT_HOME', os.path.join(os.path.expanduser('~'), '.vagrant.d')) def run_via_vagrant_ssh(v, cmdlist): if (isinstance(cmdlist, str) or isinstance(cmdlist, bytes)): cmd = cmdlist else: cmd = ' '.join(cmdlist) v._run_vagrant_command(['ssh', '-c', cmd]) def update_cache(cachedir): count_files = 0 for srcurl, shasum in CACHE_FILES: filename = os.path.basename(srcurl) local_filename = os.path.join(cachedir, filename) count_files = count_files + 1 if os.path.exists(local_filename): if sha256_for_file(local_filename) == shasum: logging.info("\t...shasum verified for '{filename}'\t({filecounter} of {filesum} files)".format(filename=local_filename, filecounter=count_files, filesum=len(CACHE_FILES))) continue local_length = os.path.getsize(local_filename) else: local_length = -1 resume_header = {} download = True try: r = requests.head(srcurl, allow_redirects=True, timeout=60) if r.status_code == 200: content_length = int(r.headers.get('content-length')) else: content_length = local_length # skip the download except requests.exceptions.RequestException as e: content_length = local_length # skip the download logging.warn('%s', e) if local_length == content_length: download = False elif local_length > content_length: logging.info('deleting corrupt file from cache: %s', local_filename) os.remove(local_filename) logging.info("Downloading %s to cache", filename) elif local_length > -1 and local_length < content_length: logging.info("Resuming download of %s", local_filename) resume_header = {'Range': 'bytes=%d-%d' % (local_length, content_length)} else: logging.info("Downloading %s to cache", filename) if download: r = requests.get(srcurl, headers=resume_header, stream=True, allow_redirects=True, timeout=60) content_length = int(r.headers.get('content-length')) with open(local_filename, 'ab') as f: for chunk in progress.bar(r.iter_content(chunk_size=65536), expected_size=(content_length / 65536) + 1): if chunk: # filter out keep-alive new chunks f.write(chunk) v = sha256_for_file(local_filename) if v == shasum: logging.info("\t...shasum verified for '{filename}'\t({filecounter} of {filesum} files)".format(filename=local_filename, filecounter=count_files, filesum=len(CACHE_FILES))) else: logging.critical("Invalid shasum of '%s' detected for %s", v, local_filename) os.remove(local_filename) sys.exit(1) def debug_log_vagrant_vm(vm_dir, config): if options.verbosity >= 3: _vagrant_dir = os.path.join(vm_dir, '.vagrant') logging.debug('check %s dir exists? -> %r', _vagrant_dir, os.path.isdir(_vagrant_dir)) logging.debug('> vagrant status') subprocess.call(['vagrant', 'status'], cwd=vm_dir) logging.debug('> vagrant box list') subprocess.call(['vagrant', 'box', 'list']) if config['vm_provider'] == 'libvirt': logging.debug('> virsh -c qmeu:///system list --all') subprocess.call(['virsh', '-c', 'qemu:///system', 'list', '--all']) domain = 'buildserver_default' logging.debug('> virsh -c qemu:///system snapshot-list %s', domain) subprocess.call(['virsh', '-c', 'qemu:///system', 'snapshot-list', domain]) def main(): global config, tail if options.skip_cache_update: logging.info('skipping cache update and verification...') else: update_cache(config['cachedir']) # use VirtualBox software virtualization if hardware is not available, # like if this is being run in kvm or some other VM platform, like # http://jenkins.debian.net, the values are 'on' or 'off' if config.get('hwvirtex') != 'off' and os.path.exists('/proc/cpuinfo'): with open('/proc/cpuinfo') as f: contents = f.read() if 'vmx' in contents or 'svm' in contents: logging.debug('found \'vmx\' or \'svm\' in /proc/cpuinfo -> hwvirtex = \'on\'') else: logging.error('hwvirtex = \'on\' and no \'vmx\' or \'svm\' found in /proc/cpuinfo!') sys.exit(1) serverdir = os.path.join(os.getcwd(), 'buildserver') logfilename = os.path.join(serverdir, 'up.log') if not os.path.exists(logfilename): open(logfilename, 'a').close() # create blank file log_cm = vagrant.make_file_cm(logfilename) v = vagrant.Vagrant(root=serverdir, out_cm=log_cm, err_cm=log_cm) # https://phoenhex.re/2018-03-25/not-a-vagrant-bug os_env = os.environ.copy() os_env['VAGRANT_DISABLE_VBOXSYMLINKCREATE'] = '1' os_env['VAGRANT_SERVER_URL'] = 'https://vagrantcloud.com/api/v2/vagrant' v.env = os_env if options.verbosity >= 2: tail = fdroidserver.tail.Tail(logfilename) tail.start() vm = fdroidserver.vmtools.get_build_vm(serverdir, provider=config['vm_provider']) if options.clean: vm.destroy() # Check if selected provider is supported if config['vm_provider'] not in ['libvirt', 'virtualbox']: logging.critical("Currently selected VM provider '{vm_provider}' " "is not supported. (please choose from: " "virtualbox, libvirt)" .format(vm_provider=config['cm_provider'])) sys.exit(1) # Download and verify pre-built Vagrant boxes if not options.skip_box_verification: buildserver_not_created = any([True for x in v.status() if x.state == 'not_created' and x.name == 'default']) if buildserver_not_created or options.clean: # make vagrant download and add basebox target_basebox_installed = any([x for x in v.box_list() if x.name == config['basebox'] and x.provider == config['vm_provider'] and x.version == config['basebox_version']]) if not target_basebox_installed: cmd = [shutil.which('vagrant'), 'box', 'add', config['basebox'], '--box-version=' + config['basebox_version'], '--provider=' + config['vm_provider']] ret_val = subprocess.call(cmd) if ret_val != 0: logging.critical("downloading basebox '{box}' " "({provider}, version {version}) failed." .format(box=config['basebox'], provider=config['vm_provider'], version=config['basebox_version'])) sys.exit(1) # verify box if config['basebox_version'] not in BASEBOX_CHECKSUMS: logging.critical("can not verify '{box}', " "unknown basebox version '{version}'" .format(box=config['basebox'], version=config['basebox_version'])) sys.exit(1) for filename, sha256 in BASEBOX_CHECKSUMS[config['basebox_version']][config['vm_provider']].items(): verify_file_sha256(os.path.join(get_vagrant_home(), 'boxes', config['basebox'].replace('/', '-VAGRANTSLASH-'), config['basebox_version'], config['vm_provider'], filename), sha256) logging.info("successfully verified: '{box}' " "({provider}, version {version})" .format(box=config['basebox'], provider=config['vm_provider'], version=config['basebox_version'])) else: logging.debug('using unverified basebox ...') logging.info("Configuring build server VM") debug_log_vagrant_vm(serverdir, config) try: v.up(provision=True) except subprocess.CalledProcessError: debug_log_vagrant_vm(serverdir, config) logging.error("'vagrant up' failed. Consult %s", logfilename) sys.exit(1) if options.copy_caches_from_host: ssh_config = v.ssh_config() user = re.search(r'User ([^ \n]+)', ssh_config).group(1) hostname = re.search(r'HostName ([^ \n]+)', ssh_config).group(1) port = re.search(r'Port ([0-9]+)', ssh_config).group(1) key = re.search(r'IdentityFile ([^ \n]+)', ssh_config).group(1) for d in ('.m2', '.gradle/caches', '.gradle/wrapper', '.pip_download_cache'): fullpath = os.path.join(os.getenv('HOME'), d) os.system('date') print('rsyncing', fullpath, 'into VM') if os.path.isdir(fullpath): ssh_command = ' '.join(('ssh -i {0} -p {1}'.format(key, port), '-o StrictHostKeyChecking=no', '-o UserKnownHostsFile=/dev/null', '-o LogLevel=FATAL', '-o IdentitiesOnly=yes', '-o PasswordAuthentication=no')) # TODO vagrant 1.5+ provides `vagrant rsync` run_via_vagrant_ssh(v, ['cd ~ && test -d', d, '|| mkdir -p', d]) subprocess.call(['rsync', '-ax', '--delete', '-e', ssh_command, fullpath + '/', user + '@' + hostname + ':~/' + d + '/']) # this file changes every time but should not be cached run_via_vagrant_ssh(v, ['rm', '-f', '~/.gradle/caches/modules-2/modules-2.lock']) run_via_vagrant_ssh(v, ['rm', '-fr', '~/.gradle/caches/*/plugin-resolution/']) logging.info("Stopping build server VM") v.halt() logging.info("Packaging") boxfile = os.path.join(os.getcwd(), 'buildserver.box') if os.path.exists(boxfile): os.remove(boxfile) v.package(output=boxfile) logging.info("Adding box") vm.box_add('buildserver', boxfile, force=True) if 'buildserver' not in subprocess.check_output(['vagrant', 'box', 'list']).decode('utf-8'): logging.critical('could not add box \'%s\' as \'buildserver\', terminating', boxfile) sys.exit(1) # Boxes are stored in two places when using vagrant-libvirt: # # 1. `vagrant box add` -> ~/.vagrant.d/boxes/buildserver/0/libvirt/ # 2. `vagrant up` -> /var/lib/libvirt/images/buildserver_vagrant_box_image_0_box.img # # If the second box is not cleaned up, then `fdroid build` will # continue to use that one from the second location, thereby # ignoring the updated one at the first location. This process # keeps the second one around until the new box is ready in case # `fdroid build` is using it while this script is running. img = 'buildserver_vagrant_box_image_0_box.img' if os.path.exists(os.path.join('/var/lib/libvirt/images', img)): subprocess.call( ['virsh', '-c', 'qemu:///system', 'vol-delete', '--pool', 'default', '--vol', img] ) if not options.keep_box_file: logging.debug("""box added to vagrant, removing generated box file '%s'""", boxfile) os.remove(boxfile) # This was needed just to create the box, after that, it is unused. vm.destroy() if __name__ == '__main__': if not os.path.exists('makebuildserver') and not os.path.exists('buildserver'): logging.critical('This must be run as ./makebuildserver in fdroidserver.git!') sys.exit(1) if os.path.isfile('/usr/bin/systemd-detect-virt'): try: virt = subprocess.check_output('/usr/bin/systemd-detect-virt').strip().decode('utf-8') except subprocess.CalledProcessError: virt = 'none' if virt in ('qemu', 'kvm', 'bochs'): logging.info('Running in a VM guest, defaulting to QEMU/KVM via libvirt') config['vm_provider'] = 'libvirt' elif virt != 'none': logging.info('Running in an unsupported VM guest (%s)!', virt) logging.debug('detected virt: %s', virt) try: main() finally: if tail is not None: tail.stop() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901231.0 fdroidserver-2.4.0/pyproject.toml0000644000175000017500000001172214770507757015661 0ustar00hanshans# We ignore the following PEP8 warnings # * E123: closing bracket does not match indentation of opening bracket's line # - Broken if multiple indentation levels start on a single line # * E203: whitespace before ':' # - E203 is not PEP 8 compliant and conflict with black # * E402: module level import not at top of file # - The tests use a little hack in order to cleanly import the # fdroidserver package locally like a regular package. pep8 doesn't # see that, so this makes pep8 skip E402 on the test files that need # that hack. # * E501: line too long (82 > 79 characters) # - Recommended for readability but not enforced # - Some lines are awkward to wrap around a char limit # * W503: line break before binary operator # - Quite pedantic [tool.autopep8] ignore = "E123,E203,E402,E501,W503" [tool.black] skip-string-normalization = true target-version = ["py38"] include = '(^fdroid|\.pyi?)$' # These files will never be included in black runs. To run black on # one of thes files, remove it from this list. force-exclude = '''( \.direnv|\.eggs|\.git|\.hg|\.mypy_cache|\.nox|\.svn|\.tox|\.venv|venv|_build|buck-out|build|dist|__pypackages__ | docs/source/conf\.py | examples/fdroid_export_keystore_to_nitrokey\.py | examples/fdroid_exportkeystore\.py | examples/fdroid_fetchsrclibs\.py | examples/fdroid_nitrokeyimport\.py | fdroidserver/__init__\.py | fdroidserver/__main__\.py | fdroidserver/apksigcopier\.py | fdroidserver/looseversion\.py | fdroidserver/build\.py | fdroidserver/checkupdates\.py | fdroidserver/common\.py | fdroidserver/index\.py | fdroidserver/metadata\.py | fdroidserver/nightly\.py | fdroidserver/update\.py | fdroidserver/vmtools\.py | tests/config\.py | tests/extra/manual-vmtools-test\.py | tests/gradle-release-checksums\.py | tests/openssl-version-check-test\.py | tests/valid-package-names/test\.py | tests/test_common\.py | tests/test_update\.py )$''' [tool.mypy] python_version = "3.9" files = "fdroidserver" # exclude vendored files exclude = "fdroidserver/(apksigcopier|looseversion).py" # this is de-facto the linter setting for this file warn_unused_configs = true # TODO: we should either upgrade the used packages to a version which includes type hints OR install/write stub packages for these libraries. # Further details here: https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-type-hints-for-third-party-library ignore_missing_imports = true # ignore the [no-redef] errors, as they collide with the bandit "# nosec" exclusion (common.py) # unfortunately both tools expect their ignore flag as a comment in the same line # [misc] is ignored for the "incompatible import" # [arg-type] is ignored because when there are missing envs, everything will crash, not just the types disable_error_code = "no-redef, misc, arg-type" [tool.pylint.main] # Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the # number of processors available to use, and will cap the count on Windows to # avoid hangs. jobs = 4 # Minimum Python version to use for version dependent checks. Will default to the # version used to run pylint. py-version = "3.9" # Files or directories to be skipped. They should be base names, not paths. ignore = ["apksigcopier.py", "looseversion.py"] [tool.pylint.basic] # Good variable names which should always be accepted, separated by a comma. good-names = ["i", "j", "k", "ex", "Run", "f", "fp"] [tool.pylint."messages control"] # Only show warnings with the listed confidence levels. Leave empty to show all. # Valid levels: HIGH, CONTROL_FLOW, INFERENCE, INFERENCE_FAILURE, UNDEFINED. confidence = ["HIGH", "INFERENCE"] # Disable the message, report, category or checker with the given id(s). You can # either give multiple identifiers separated by comma (,) or put this option # multiple times (only on the command line, not in the configuration file where # it should appear only once). You can also use "--disable=all" to disable # everything first and then re-enable specific checks. For example, if you want # to run only the similarities checker, you can use "--disable=all # --enable=similarities". If you want to run only the classes checker, but have # no Warning level messages displayed, use "--disable=all --enable=classes # --disable=W". # TODO many of these could be fixed if someone wants to spend the time disable = [ "broad-exception-caught", "broad-exception-raised", "invalid-name", "missing-class-docstring", "missing-function-docstring", "missing-module-docstring", "no-else-continue", "no-else-raise", "no-else-return", "subprocess-run-check", "use-dict-literal", ] [tool.pylint.miscellaneous] # List of note tags to take in consideration, separated by a comma. notes = ["FIXME", "XXX", "TODO"] [tool.pylint.refactoring] # Maximum number of nested blocks for function / method body max-nested-blocks = 5 [tool.pylint.format] # Maximum number of characters on a single line. max-line-length = 88 [tool.ruff.format] quote-style = "preserve" ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.364188 fdroidserver-2.4.0/setup.cfg0000644000175000017500000000140314770510164014543 0ustar00hanshans[metadata] license_file = LICENSE [aliases] release = versioncheck sdist [extract_messages] keywords = _ charset = UTF-8 sort_output = true no_location = true add-comments = true output_file = locale/fdroidserver.pot msgid-bugs-address = https://gitlab.com/fdroid/fdroidserver/issues [update_catalog] output_dir = locale input_file = locale/fdroidserver.pot [init_catalog] input_file = locale/fdroidserver.pot output_dir = locale [compile_catalog] domain = fdroidserver directory = locale [pycodestyle] ignore = E123,E203,E402,E501,W503 max-line-length = 88 [flake8] ignore = E123,E203,E402,E501,W503 max-line-length = 88 [pydocstyle] ignore = D100,D101,D102,D103,D104,D105,D106,D107,D203,D212,D213,D402,D413,D415,D416,D417 [egg_info] tag_build = tag_date = 0 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742901237.0 fdroidserver-2.4.0/setup.py0000755000175000017500000001134514770507765014462 0ustar00hanshans#!/usr/bin/env python3 import re import subprocess import sys from setuptools import Command, setup from setuptools.command.install import install class VersionCheckCommand(Command): """Make sure git tag and version match before uploading.""" user_options = [] def initialize_options(self): """Abstract method that is required to be overwritten.""" def finalize_options(self): """Abstract method that is required to be overwritten.""" def run(self): version = self.distribution.get_version() version_git = ( subprocess.check_output(['git', 'describe', '--tags', '--always']) .rstrip() .decode('utf-8') ) if version != version_git: print( 'ERROR: Release version mismatch! setup.py (%s) does not match git (%s)' % (version, version_git) ) sys.exit(1) print('Upload using: twine upload --sign dist/fdroidserver-%s.tar.gz' % version) class InstallWithCompile(install): def run(self): from babel.messages.frontend import compile_catalog compiler = compile_catalog(self.distribution) option_dict = self.distribution.get_option_dict('compile_catalog') compiler.domain = [option_dict['domain'][1]] compiler.directory = option_dict['directory'][1] compiler.run() super().run() def get_data_files(): data_files = [] with open('MANIFEST.in') as fp: data = fp.read() data_files.append( ('share/doc/fdroidserver/examples', re.findall(r'include (examples/.*)', data)) ) data_files.append( ('share/doc/fdroidserver/examples', ['buildserver/config.buildserver.yml']) ) for d in re.findall(r'include (locale/.*)/fdroidserver\.po', data): data_files.append(('share/' + d, [d + '/fdroidserver.mo'])) return data_files with open("README.md", "r") as fh: long_description = fh.read() setup( name='fdroidserver', version='2.4.0', description='F-Droid Server Tools', long_description=long_description, long_description_content_type='text/markdown', author='The F-Droid Project', author_email='team@f-droid.org', url='https://f-droid.org', license='AGPL-3.0', packages=['fdroidserver', 'fdroidserver.asynchronousfilereader'], entry_points={'console_scripts': ['fdroid=fdroidserver.__main__:main']}, data_files=get_data_files(), python_requires='>=3.9', cmdclass={ 'versioncheck': VersionCheckCommand, 'install': InstallWithCompile, }, setup_requires=[ 'babel', ], install_requires=[ 'platformdirs', 'androguard >= 3.3.5', 'asn1crypto', # TODO use biplist on all platforms once IPA support is stable 'biplist ; sys_platform=="darwin"', 'clint', 'defusedxml', 'GitPython', 'oscrypto', 'paramiko', 'Pillow', 'apache-libcloud >= 0.14.1', 'puremagic', 'pycountry ; sys_platform=="darwin"', 'python-vagrant', 'PyYAML', 'qrcode', 'ruamel.yaml >= 0.15, < 0.17.22', 'requests >= 2.5.2, != 2.11.0, != 2.12.2, != 2.18.0', 'sdkmanager >= 0.6.4', 'yamllint', 'tomli >= 1.1.0; python_version < "3.11"', ], # Some requires are only needed for very limited cases: # * biplist is only used for parsing Apple .ipa files # * pycountry is only for linting config/mirrors.yml # * python-magic is preferred when libmagic is available, but its not in pypi.org extras_require={ 'optional': [ 'biplist', 'pycountry', 'python-magic', ], 'test': ['pyjks', 'html5print'], 'docs': [ 'sphinx', 'numpydoc', 'pydata_sphinx_theme', 'pydocstyle', ], }, classifiers=[ 'Development Status :: 5 - Production/Stable', 'Intended Audience :: Developers', 'Intended Audience :: Information Technology', 'Intended Audience :: System Administrators', 'Intended Audience :: Telecommunications Industry', 'License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)', 'Operating System :: POSIX', 'Operating System :: MacOS :: MacOS X', 'Operating System :: Unix', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.9', "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", 'Programming Language :: Python :: 3 :: Only', 'Topic :: Utilities', ], ) ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2441866 fdroidserver-2.4.0/tests/0000755000175000017500000000000014770510164014066 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/IsMD5Disabled.java0000644000175000017500000000135614717152070017246 0ustar00hanshans import java.security.Security; import java.util.Locale; public class IsMD5Disabled { public static void main(String[] args) throws Exception { String daString = Security.getProperty("jdk.jar.disabledAlgorithms"); String[] algorithms = daString.trim().split(","); boolean isMD5Disabled = true; for (String alg : algorithms) { if (alg.trim().toLowerCase(Locale.US).startsWith("md5")) { isMD5Disabled = false; } } if (isMD5Disabled) { System.out.println("MD5 in jdk.jar.disabledAlgorithms: " + daString); } else { System.out.println("MD5 allowed for JAR signatures: " + daString); System.exit(1); } } } ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/Norway_bouvet_europe_2.obf.zip0000644000175000017500000002770314717152070022032 0ustar00hanshansPKaQNorway_bouvet_europe_2.obf} XG6|k7 @H 5L8I$DAQ{26YqW( n+ F#;U̝;}t8uSUN};&P}y66_W|4k|B& qT(gH0*5g$$\EyMqg&yɻ٪)A6oUqth/CfyS|L)vsPq>~>|gc~F7Ƕܤ?_@047fxM0ڸdm o9#U}FriҔoOTXbØ O l= XOnBzm=ZZ?d8hU1xh[f*Y _ V;3!(`斛:+μ4YD/Ɇf"3|'s#!%?+h;;+7ėQ^}gO?Ҷ:ʤʸzY[Wk~`ccc:l46Dww_}ϳ;K`([iT UC={a ? WD?W" \q D*H_81\a{z1ѕ(E# ^ E)P=X8ĪK("RzE).gb^#XxTx畢X|sXFx^+Kdz^6V)Jx^oTl"n">^/KQsJTWWK+zxae4]E> =*J6X/QsH.JGQ͊HjS$Uwv|Iźl2Zc.QGPO߈]#s)AGA_ GP*U>eAEP%h2\49/q#ˊh6_.()8SlsHUS̗)b嘧HRs.H#ɧDG2N%!K"|Oh%mqs6Sh5uStb5gcha:F}V(ZU|0Wn\^#q(LuS'1]7Ps2kL[5O}-5gQ|rM\dLR7I ݤ||V*Ie1y}A[ )s/k4]my䱢AX'sjNL[ [I>fns#1[ ji\E3С^rʮ{lt'k$lT%%NGFIC|Q#7iFviQʮ^a,ϑ6*lfFl|4"?D\|'"6fPELm8Μh}uyg^Ǚq_g8m&'՜^(P+fΠ縆lC5LtKu9ӳ)I? bqzùOnq|&>V|޶.lz(u%nح]GT^oD(CKt<7tlwLmdF{<5tK;#K$&=ri\-Zf nF m׎֣CGUWgWN m@gP"bF_׿*;?|G%o?3]4q' |톣(8f !$Skj'a"M& oGPb`7XGEKA`琀k}cR#΂)`"I\p_/c\xp8u@G<©k3'0ҥ 6wv޽ ]?=8}|;[dߍ7r|2?tXVwuy@^f3#1Ral8M \Fx=m`P32Pq t`VG`=܋V(` A6֠3@AFpmWj ~ `-] BN2;It ̧Q* -) -^'a&ŗ3D{@}>?MMPՁS4y9q`RX~LX{?T1-@M!}SK87&Dq۹Kl x8x394sg2*: ΃&Xp|m|B5LKp%pf2Fn#7>p 8 3`zWKp:īO4{C{'پ?Y~Cd_@vH\pH|;x P >C ^[1v~:h!0s%"GRNe"@*4&l=y{:jگ?yS&?Yk*22|-lA kpN췻E%;rKa;Z<trX~vsQlv"VMWY#Oa_c]&v/ɻ#O?? 24W[5Hi&fW}{?|6++%f5zJ. N".GK|5DQ.+A9\ g|SP9QlI)&ҡt(9I  ,~b݂[?.fkNpCt ;a7شL*قd̡՛ &VQjFvr.q fq2cQӽ+Bt>ɰBCM Jҹ|TBL)p4ʔ5l"-A <'zP-rogNz!Nsrq(MH`(Wt4y=sQ%l (t.[OZDfʹ"\jJ>*˩P.ej"K$TDz+er;EKP1tLJ$zLbUʨP&(d Q1<it4@52SS8%XOTiYF.tm(]B *0(փ^r߃;&Xp7مϬ5`!6ba,A9NtG-h]ӨbXG<l !p<| (݇L - KC% x}z?}v9AL 7̀L}I!JϹT2UtdPG8~QOqq̐YK?utS`p3=;+@oWnn<9 br@D'^{h8cwodJlōzDmR_3'tJe`9獰`%FC$0ڤ{>ZN+wR= r/V`h@a^&M 45%k> #3#fG]2S " ܿ@?}4mCo. <eLN{M,]r"sa ֠7GwbTA |{ F n9$Y".{!89i0D:Nu*qF;r& Ѥ*y|LUx ie!J w3W5dfj+gG 1j&m p8U->1gc8$IvQ'ZG}P tqFw %EXOUt* }Fa)9RT'4[gQk|@r=8 :HE=$CZSQo@,c)z$st_ X~<߆xFʚ͡''eF?b>4X[`#ICrg/75{_FfO6I{>`n8w <yD {aoL,-o܂\.NC=n$<?tQ1.3\QF,A pCYF﮼SlHe9Eyܘ`p*o0KiƭKëaQ;U5': ܤ21Y\T]i܆NܲD7rF[ z ='+groO&i&I)A34^>7/N "iBkBL {M?P (9!}4 _)د dgӅ|yjҴk|yl?h[ḱ9“]zO7o[|"OC~MfrK/F;דE'ƋIk"=L&>mhnECaOnє.8Qt;ϙLϳ "5?@3WӪ('Oo?r:43՗ڇ^}ڊd֔o\"SՓH>L~,h?nOPHf@__p9|ƺ zQig0鏾A&}( {NH@` $tyi| ԏgGy|@$Hf "hx޸ٹtYiPҁa--<>gt0,i_,34p V^!L73CZRs4 ^Zy2u ftݥdH4hp?&|7wY>!VFA'8AN@PWV" b& Gڥts#Np`̈́Qk8V{2fXm%33_osx̶>-vXEuKv:EuqD]W63 -YԅÚxisVҕIcJCIv_=A-A"#eⷰ~e~+{W:,mz>!Yۙc<_tVf3F㒬Ev3ƩCǺY%opͳʟG+\׸>O󸻙vGn7χ·%Cl7#;-8 &,#~8@&8 L|  fIKvU|afk /1<>Ap1k"&GZ0fhElg6_a_r;ȗkx- B& xȺ܇߈.qg5r&%/p,9A_ɯ,er:8 <Z*0I0*[`)kq Bs_B܀qAU|,Z"n^ADĚTe# &"[A牗Ίndx̋L?¯ߵͰLHS _I~؊_=΃ݸ=6?;z3r׾?*uu,| _ױO,M;_/ثT'8kx?x"*)t)sfZ2K)* Sm:w7ůϣss Wze1N.|.w[$ҿۮviA%uA L̫iڑWp3HƠ?3 mͻ1}[},6RqÔ_3a(%e ȥ^ RY+6v&ͅmTrVG`4 m}2&v[ XǠE ?|?s]·{5upk4qeR),m?>bu zڈμX](Ȫ #ɝwe;5Zѧnr}g1IK)T6gIX;ySb7Ϋq18I|͚fM_Y2kjߋDs5nɚ6u6OD+S2T`QD$?"Y<:>}I;go5y`[C7~:` I險M޻Jmܷny[ӕWIT͕s#c"]02H<) c8JV?噬ﳴ>˴'{,Ӧt]]uYomii\JMk?vHNteRfYYET7Mz1(Ixhć׃n]Ɋo~ !%!=v]5n7+談>X%K{"id.uHOׯCOkkkmNO D:^ "G%ss7qzHn"K`MCwF%V3my&,9a|,g s dmp Ot$u`'4sDE`я_o,p|4ûE-]9lG}: 1 :uluʄYfZ 2^Lx^G1F'x@Gme؞zx09WEej W2hV 2f3s3Cme⇴̖\R*?n]:]D]КW7@k{hT<E0_b ;]3hzQNc(+C;@ ]\@+ vݘXK-lk@'K >t6v(~Dqx,=dMAO7;22dB3[-x^ UȤMU=E-G(SgۀP.@L)$\+tlzԁdƜsڊ6K=` om%XL]x|4_Kڌ8 RETi50Jľd=E8)Nh'ݺ' -p҃empқp 8iNy 'o^^F #v.8`P&F'] !t%%,*9<`4L8h>gĖ,` PF]`]+@ވro}}t>rn\.;2= =0zpl?p*>)'=.=6»Dxy瀓Acn|p`ĭO6U=?Y3iAǧh r=gd~4yY.u/ʵ]/vꭟv Hx|!<U pw<@.cKڣv;nۥ|-M-`E.loQ~E(E:ɣ6U jWt:FK;7N˓\V-rݦJ >6tCC V;'Y:,-mf5kzRgd[@XB9N;TbڸJҎ"Mi\x\^Lw0':1?yĜ+[GD)͉1-1XEXEɦ˲9 \2ƤpuCh!.rxTDu}m-WF7w`4g**~)ΣO=.>%TfI) Yj2%%e6ɑC$'DGr)&b-`9,/O:WZ-hN1v$qL?_esbT~ u‹l)O3wk{+eŢS0I|RTjݔ\i"_a(OQ$N)xTH.H:Y%t 2RuM{PtOsf̷vj˷z1FJהo3kuFuٔ yXgTELzO%Ψn3`ΨיLLc[8|~+~f yʀ2B?T7/66Wdw7g`Yӣ1X0n'Y}'rͿ~g\eiqU+W+[[ZO]zfI4|TV\7, - >A/B,f:R`xW؉򆟋'gB&J#X7ceMY[x-3? OM |h4'[LE$˾I3\M%Wə&e Aþ RQwEACD@ĕd*[Y@x bD A< -/W!X¾$r bg"+wO'3Tx:9f@ #1, bG"!*8L(#PL)Ub"J s`K ](0+X(^P{L(VL(6۩2,j]3mlT[U+M**5= DApAq(7ʉyd Duܠr 6UA4w-ʠ:ӺfKu|H' wEM8ʏ^huި2,3.ʹiZr^*ّvTW[U+`;nIiLjv,7ˤѺê}wv>V;۶x+QvNJe5ʒn e8T"-i REsV@fnҶֺP7Pgn]R6%lD"b~iW| 24]Limf Vq%t$ -y%'ScV*mZѺ+iZwm/mm?vv`U6j*9mj0ִM2YWаzZ :ErF[U7Mj?w[OHxlIvHb[K{F pS(C2N o;..OݦXM;r̀W>jWvi.Lv軴S}ԥtMs'mL\a_nӼMښ;ZbW:p@~e;%& F nVcafW:&3|nۯUNi];M&6z!2=Ʒ!LB٭bݤEye +tl]`NW tg]UdAbe2r*%>CLP0,4pR@>t t/br:kdOgGÅpcdQ…v˽CuᇺvƏ Q\&;oZd@Y@E%1Ʒh*׹ŧ}RطΈ0tuؼԳ~uZz2hBuA}I6$J)@8խ$m,adKб p:E:'/=JYWpJ7 @ů,?3Ȭc>Aozg5Mሼ-ϒUC ]o5t_'ÿ~KͅsMII^'BbD~+ V|ڳL1]+OeL_5D?5hB[5,M[I،dU o.Pdqu ֵB5%C&.h?͏Kb0-ZgZɶژü{ ݫi%K#N1EHRbp0{݋dG!i~4w"ej65I3M@^}e$;H%m %̴_i/ s&YGߒ۾0F#_^>:"C|,0%C& tZERґ2i|M{`"rajRV:+MOJgh^nѐt=tė #0* {mt^: NL}A'utZ|g<|2<ӛqH &[C%r PK*;.C.4xPKaQ*;.C.4xANorway_bouvet_europe_2.obfMap, Roads, POI, Transport, Address data for Norway bouvet europePK$/././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/SANAPPSI.RSA0000644000175000017500000000773414766514130015670 0ustar00hanshans0 *H 01 0 +0  *H 00j 0  *H 0c10U SanDisk Corporation10U SanDisk Mobile Signing1"0 USanDisk Mobile Signing CA0 110921092417Z 360921092417Z0t10U SanDisk Corporation10U SanDisk AndroidApp1705U.SanDisk AndroidApp PROD Signer 001 Certificate00  *H 0̧&_n氢7H bXﷃw7ZЅ|hw}j/)EWSTm%.c9P?$K!L P#=9~-׭Q @(00 U0Um‘FG}(џ7M-80LgɄGy C3~>}-TPu:d)bA7o'+з(s9"ii7\qgl{관V!P:[JcP%'4MM#pCfiB~rcb]0ԅ)$$)<צ^M!^gf\cFW- U߼}RewJtc}.&PxljTdS" it-LiXIwؕTZBsUq[ 9_'c{elb3 2Ma b|ծ[ehd{pBVBDŽx]`+ G}P:$_Ʒs~kz]KJIQumYWG 8y"xϖV/3ij?YXRDt6:Gڥfb/v:3zK0Y00 ޮE<E0  *H  0Y10U  SanDisk MNO1#0!U SanDisk MNO Trust Platform10USanDisk MNO Root CA0 100907064954Z 300906064954Z0Y10U  SanDisk MNO1#0!U SanDisk MNO Trust Platform10USanDisk MNO Root CA0"0  *H 0 s^vRg9Ƚy\vBՌCT=@-? x87vf藦"#Զ.ڔu MͶK%ci#@yܜ\\^mϚ DnH"h54>#&k#IQux 䇹O pR<0϶l0ðEBY! tFрf ɁHAüLf }1.^֐;Ls n3. C]E;Ycvb⪞)ǤBڿ=fuioLCRN:6;y6K0h.6+<Y\z8y'3ݻ6J洪ȄAWd GhZώa7ѧM_t~b/ڟ ?9 <qͻ6wpmF/\!tPڗ)&̣1(֡5c1)l`~L$Ls޻"2w00Ugy8^v r^E0U#0gy8^v r^E][0Y10U  SanDisk MNO1#0!U SanDisk MNO Trust Platform10USanDisk MNO Root CA ޮE<E0 U00 U0  *H  h#mrTځ̠s0 O4U6g͚^,] ${M^>ߪ`eRBKM!W2 i:]0i[ٳGb,?e/IwƬ.p﯒2fsd3X&v[:u Ö5%5`VA/߄ PKdz(PKexKQ *)META-INF/buildserverid 8`tOy;8[t82PKQ *)PKexKZF[))META-INF/fdroidserverid Hu`³Fnsg$:0[~PKZF[))PKexK(QncAndroidManifest.xmlSnAn v51AHـE +P0R[0cK$.!B>#|xCĎ]3]3!<- qωow(`x@;L|%%>_1y.zhbmTCft:Oh~AE/G.#xXaLuQj}-5.? mfc;T7h1:Ot br3ؤRcrutlID1An_U{ZqIkI6Mz6HNU5洉-Zl^NJ1ӒuT26F1OP: Iwm>3onw{Sg-'cWHnt4;UtS??PUq]w xÀ  J)/ObWͅ&9O9-pG䡜<$왺qV/w +9z88f{['7͘_lne[pj3Zy==kgqVoyG/gT /d0w˗0|oUPK(QncPKexKG*B_res/layout/main.xmlNBAz @cie t>&+%B@EioK>&&p/r7'3sf U $ =iY9`1 x/ | jIHuІ]K]hLג}}>עs삫0ꮉGTK)lS7*' z^ci׮*ܡkTUNԗUx^WU.u2؏t5?ݑ.=MM워}cV&ۉ:mbo"~Bom?oP#mRHIj6Z UU_J+>TM+EJT U}}HZCTk7ަؿ{=;q\;e-?@h?+=Wb/4hyQԳG@Ҿ5"| 2c=D[]' BzlZ! `Up 7kMuq-p N9!7u ΃/o_@8L0& Hd%_Wx@ha0&X_]Oacj:C`/x SH QaH.}E*& 6 @;=[6A'RCa<A?8Br<)=c~EN@W\wDU?>tq.tAOB?s~9]5j Ō<C@q!M*Y%jRsBd*Rҕ+٠d=J{c5֕*Sүd@hXH/ YKSBдutZ! !tV5E|O!H4&dN@6I9s"<9 ٪ڷa#b~2oZ>hJR}D^39$hp4߀] zPyM )?1KÿU ~*FOL|Jw_=ױt5+>Zc̋ârXO<"^roTIKTyZNz%J6+ɿ/!BD M"]Ț~Lz͈ eo?zyFQv[YеViա^h 0.zZ d݋0v߂{M% _T96ߐpXkUTZ*Tue!HC3X>l "t^?<ؐZ]vm"Z7AgאmơA;N}\_3\=]7ZѝSL.4ل;b;{Cv&5s|Es$p|pjj'NMM'NOO$;:}(yGbbcNc N8`|nf0168Gnr`>ߛ5meÐu Vkik_\-E`;xUF-mYn!*T89t"U,mG~i0oyx`ҵlwW;*~Er:9c"1"6Ierm=;ZW) wZv323K39LΘ"_nj9o?ne/ !-qә^0 S֥EIbeLtLckeƉ 6Rb{l<*!wz%aE7I wˮOe$c8FM`bz,A<|&}zv2FY)l838yg'GPXZZ3F3|H9Zu}+}(q)ϬҹBt)Pk+UXyx,F3yɃ'?|@:?̤ @#:ٹE@.XPKuti` %;eFy![-HSCΙ¦-K <{n?&V$h.Y1n̢Sӂ QrA!2H^ȑ.j`Ak33RٓEBL-=;:^yEr<20M[YǑ7nޤ,أ.h+3gElch,Ҁߗ^ Z䤇δypG0%5iz桒2VRN&fm[-o:nmyCBAC-j0_&J,׿XQ~zE͊PK PKjd{K;META-INF/MANIFEST.MFPKjd{K΄h}META-INF/E63748F8.SFPKjd{Kdz(CMETA-INF/E63748F8.RSAPKexKQ *)META-INF/buildserveridPKexKZF[))META-INF/fdroidserveridPKexK(QncAndroidManifest.xmlPKexKG*B_Y res/layout/main.xmlPK !92 resources.arscPKexK  classes.dexPK K"././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368094.0 fdroidserver-2.4.0/tests/SystemWebView-repack.apk0000644000175000017500001267011114743421036020613 0ustar00hanshansPK!*AndroidManifest.xmlYlT`3o!3^@BvBvodҴM*(Sէ(UTOC793 w?sY.dQsLE+"1# mJ(ABel>: ]~b/v@GЇ7e(?:h!~hz 8SV, 7Hd :rQ($%(7GJz -%/(o~z} } ]Bsʿ 1?BWB B硋Uh1_",=_3DD1L-Fů/>ٰSAl’۲; K~h c~E%웃=(cHk @ }-ib;HQhk; ,)ڇ|eIyXIIuOz2iSS;zXF yIl rO܍ڒm}3?-Z8˺Oƨ}e;4QդTfԒm=A&^qxLU~cWbz1ZaԢ {)^h(-Bҷ2/k!'{u"DVb=Yan8M]H/2,2,r$noЁoRe|;-w[ap=p`=p=p=p-tA=tAG=tA=tA=t%ƞ2cƞƞj^:0N:$u_L;/ƙ[fq#Ǚ *3_\^L|OЊ@ctZ߉YnmI"pvK^Pi Ga(VЪ7VuXjDCt`NWz!G{DiU#=U{4e)%fE6` ͢U6 A0bVoMc؏8U:aH #G؋Zz$U;W)%c/?ڢuj݅m"L_'F\cJn'ZfW=VY/Bzoۂc}x[`ko؛l54ʐ|Q}()[BN|w 6L#$k(kd:R'GW~2DQe˝׭ôY?Zvz&zˬ(y&-Я:5YgaM -JzLB,,3,͵ɣOޝsV ydgu5^MODS\ td/t -ۏmT:0B&tRΚBWJ^0N PZk (_UC#NYȫB|VҹY^[o#ccn4frƗ3P (,:}m-Yo%(F5[K-{!uv@artK)Ct/r{zflX> yjwO{N#4$CtX!1FKQFò5wI뜈1*ۧf<1=uRz]Q~U&;mHc*g*g;֝3ne}zZǴe5$uIS&nEdd)(W x'Qẓ<=SQ OfoGNY'Yy3"MľFX-V@+7 ZmF Ч]rg|bb3eyhQ&|@cIz{j! Pas^>@og"s-Ozw#QVGˮ໛mlT++?pȴw\ Kr--OR9fZMCk:4mM%K2qsɡǒ9e'_pstXTYZ9^%^Nśm[dB O}\4>1$?ຝnp]ϩ:HW9,%K=g[Fbld9Hq/~D걻8mfSvmPG8z` KX2,9f[rK]2N~αߦMFoDj췗q϶~I |-KӞ-m/?)x'sii_bcx-O/z]Gq?'({#矩ClS꣹iWo{ŧs(U|Ücxt'E //ҷ`n{0j1k i':ǩ^N:9mHi9aK>Scbc-ʹMyml=Ρm> _zĵCm5໗s{|}l9$1!L|}>|*_isqmlkKâNŢTmPd8ީh=jb6xcm`ǢTm0h3u㫼Ag9ȫWm_bp{1T,,cpX̀eM.zNu+ا:}9>)y-ck4r9j[~ -Ic]t6| s>Ĭ)O2˓6[oK:bi2l\~e.1ly sB.1ly{ sUĬ)=36WΦC065WΦ ?dmkٯ%fM1W0,0ױ_K:b1`~Ya^~k\bsC Z[Φ fmױ:u6ż׀fyĆy=wYgS 19 %fM10?,0od.1lyyf9oü6Ĭ)̏1c6̛oK:bn0`~YanuYgS̍O06WΦ blVu6l4lf\~.1lNיuJtYgSG /2E6u6| Φ0,o0d.1lˀ-fyˆyrYgS fmwnu66`~Yޱa~{\b3}gH})T=k#9©9gʡR-vN9HCL{KֺUݎ[쿞nG9Qz,Dq]69X*Iwqlr豔]V}]GPKÇD`PK!*assets/resources.pak3@̿FTTzTwTT#TTT7T9U@UUUUUUUxUUUUUUU U!UUUUSU[_x_Ur`#s`l4t`N5u`7v`9w`9y`9z`<{`=|`=}`BM~`P`Q`R`xS`U`V`X`X`Y`HY`yY`9[`b`c`fgshsssssȫsv)vMvvv;s;ifhfWh3v@[T}PAb)=kxBZۖŸ k;Wu ʎ!&5Ie 4{ZDPE!o^v dHdac"⌨Y$G,DN=c80Q/܍Rxp/nVܧ`/ϕz6O{5 DW9ω'Ҩ2/7$Ẑ 'ZÄa/D8^o8*'4Y_6(toUFe&b=6ߢ];"LJRj HA%SKM Se8ԋR˃Z  U -]5{Յx.Q)7m+  2vfmVxW>Q1agO.?xˀwmj!"QXbWƮR$Fă(s$OTl:+zkEŕWn}C62˛}H?MU(e\*;72fӱQ.gnX= me B#&u 25%o"B5|b&ʾ?_䤢4LJhۛzMst96@{vI- vgo9SS\N$hI08Eo'O!7?D1/,P6ڪ_f=/7QMfElC 67]Q#qS)s$* R x4cBD2IQ{_)T=Ƒ`&Dm!H'[t]ew]NLM&֑-=̲UMJQ $+5aAPETrT@N0QPoAC7/ Qh^XWZce,049׹Qd=/W,12Rgف\~naJSF-UV U+}Tk;?,_u5aEI4<0o/]C! , ѤFjiu%o_O8B~cm뷪<7ƴ^kថunp㉮誮(i<#%%);HJ*/n5UՁtn[oTjVYWSZ`)hQ?КB*gl;{O%w9V Y?uܻEֳexT;ZqA&Ѡ8BǠ3VHDmz;z2<|N ,5: "rг/+sn4IJ !?(P#-ְw󄼕3Z/R񔓙e7ۇc <=M~EhۋrzYߴO|΀ACz[׮C 4dMWu )B47Ӧ'Zm 1Ap 猛iEOE՛$2f ".Xlr|07L!cMI6ӔGG'lCƉS !m[^PR3֨T[X& KT׈2U2)ecUǤ< s+x qM^Edn$B15f9mDxfNXF;a!b,j,hN CZәr!@ NoK̼?G #=? kon,uTIu"6IF1{i"I~=0kϘ_1{qwDTl;Hr&J.^an{T`i5KMv)6 M vV}ޞ,0)}K5M\vp.?#?y [$c*sq淲_pɩުw2 */2tw+o#RVƆA8R:Ɂ3.j|_H$ԼGf!3Sy8 YIB{>Qm./^y+GSp%𹩂3SQ64:OU|WT"/>>f!^S;zLSFyMMnkbe)d Ñ's303 ږ'cbT}#DǤ!T9ER#us{Ju *\5Mt:oE owt=| S5>OHS_:he&giT! ISE2Xq69 \߳]KWzvX?9WAlospfg 1J+%N'ڤ(Ò_Uf\rBxzĈ $S`7ҚVr6uݩu2Wcr)#WrdUҫ$Oi'Ϳ>ig2o(cN58pq۩#(lfsZ:s+q?SEFv ۅ|dVa`ǰVuAeno)AHr:q^ +* ظde8# *gɛ[<<50?YY3'?-AQ)U\ H8$6k(Cp1af"_UO @Èm>&?7o^f{HD#֕`*h ԦRM`( Aa!ZHѲG@i'/D1Awث8_& @e)d4LR{?*9>]NlXtE)Os^lTEi/,# )aPɖ$'(]K+8ʏ\v^sUk쀾\߿ꗹq S:_8H0h^ry : O`hH%L|Qz(l8iЁ$YQ\J@Vضn{&5Q7I!Xj$%N(RCpV;4 \Xzj'@x{n3~ךf1JlAV"fC}G職'OI3!&f$Y䌖hass_)NfӬygx7%%(0peM4&ZW#/CV hֈ: Jwn!*YxBИREFx 2|rId>'_n:JP.XKqb3(͸d;yE.(+8#X뢵 VA̕?Ò+d0cqj`5HJ\ߍ(7ZbDxySGdVWVvFX 94;f9}V/ǁ3Gg_-*]хI*u=Q%}0zvej4ȮBuٚ7Ⱦ$ل/RQNةuC0NkSwvRϡntdܠ3lrT>eQR7K8Ny-*:κm@鍔,A/J/Ɉ?‚+fhXȣ6nZ[pi!tOw0=Q8Dɥܢv1z`uaCBJ0G%lcEJݜFU$ZI Sr:s 0NkMDؙX) d:m,*|kS-ϬxYg`8s(}6liib+d\ʦ 4*iXb$OK(ŵgPrS 3UyURW$uE5)(7 ,\3@ze{•XpYH״rдU6ETЛ28Xz9=&|l&0c:E0T5V";H".\BT{ yC g0ٓd.˷6**G&d}ϳU J A7Ktz@8WO4[i9jMqllf\UDMꢌ%۱`oMn$z$=^xI"sV{#N@G H P| +y %3Hjy9`'j+6囱T&F19@xzr•+2h$ άm@[oy|e XJo8#vbJTȒ`nf0,"nqB)*QFǴ/C*}Щ)e3u r'C+C}\žs 3#qDh qg'oL  BPdOf0A>= cӞzY&wX\@vblW# ^;6w$Lr}yo2~9}+,\☕J3)󍦆7<ّOS"WWl-(Q xSkw'6Y fA1g͇BPٷc;Hsg|Y8P0Z0CKuyN׊+W>Xa GTFU0kQ;u@;e}&##-*u;w˃1E?9aȡqDA^."@} r=kt $w)}>:]d4e%M$܌,{ ]йz[jqDLRoh|/ EvnL`W cۖ58<3!h!X\NȕHw]X6Ըե)kꚬ5T)~d4K7XH9ýHRooFeguF~*W֟\cD6I9vnhF$K W?VVXd)A8W sx@'ש%XznT毉HSw/ ,<Ć*j/~o0MF~=xU=)Z.?4GێYnsd|oSc#vL x~މg%xu̫zb^? =YvSL ?.=U2* p<dџb\Q+*rf>~kGjΟ?x]}=74@lMԳ:p|se'~2/q\Hz#T`J4^"g]_$)h A'*c;iӋτ@%\g<:^9I;ۧ̅| \O|21}a̯Smg_A?8SvVv5fKz`Pm(L1L%pl*m󯪝E@2=up96Śoo>G^Jo|2 %H}>[H{ e['#ne_b$ľD#ߤߩ qm¦t"#טzceIٖa%V',kcuz>g~PcOB(QZ,EhGV8U u0>y_'"e k(Dx)rc¡1SxG=nz9ŵҦjҟw_*|SmsX~zI) /:!͵r/ \qYNsբ 9_*xi5p|i\4PI!~a_8%MF."ߧ~ԳGjf V䬀 .lF[ Mc븅~ %F"Jqx(w$a'ZX j UU^H`Q`,ya{fN:*_i;W:'VhW ǹ (:Mz2.?zZގe{E_\LOrR6WQß:\ c x &B*ejJ,"[>eJGCKum H4kҪU 6߱Hpxf\Y4-43ȭW檣]z=1v~"= QVA8BȾ8hɶ!Q1C)Qd,wg" =WSB~Ʉ}BNkDȐTT6^~-X)@nrKϻ:NGYN #1I@4D CvD{\^yۣ>{W'..uO :a((_.t!B:@m'z/qݖmCs3t G{`g|"rr 4\TӾvs_Cxӛ=o}ɷ9d< 2Yv;bڣ+Mϔ뿏Bq.)O_Xdh-a`:$%-<. 8r>_QșBZK_k)B4I7~($iM{#־(ݽÎ̺¸U(s׃"G|۝cq0biGܑ3ON l*h]5RvEE*:/h9d͙=9AqqJSm6!Iwm!cpXCp[DilHr-NyA!֑ne(/3WuVjWt3ObBk[}xlRH.:!Nxo5qj5թxy-}hlXeaH`HBC)8ڻS.2SAc7HS? bgp}iנt$30V|dL" / ]u0{+y **T=\G'E<؇>7Sm]y6oX9gSΔE j%Yb\qгlP[7C &ZexjZ$7@7> Z:[/{ճy$l!q偐t<}O\݇mh3@nXJ n4o¹n:%j;(PSxІn@?S+L:fЀ{z-C|K ) )Z[P3q$,sd`lc8L6b",$Ԑ:YFhzzfLN&<tl QY_5jYr>' I k6-oLev%ԐRTخ ;FI',F{EQ"=uCFK}@/ZХ&Q5lli _~lޫmڕ (UYsqlT {NTZ3m{k`yWFbT9)ްvXg<>Hm:ɰcܡ+XtnCۢh|7a2lھe[e[[#ҙJLD$gIGzz2([wМҙx>nDQgs%&%E!NS00OPgwVzE8XF_YdO_PlXT;Lpv9g |#F82E'ߡFz( 4ogs'Uo,{e;9sJ[ժ˘HgbG(]PX`YwA:>Pd$2(2<ӫ>^oէw*HOͼgeXс(F0B"@7|UĜVVVd@pOg#,K 6Pgo˱{ p>&Y|+Bk5h: &&*Ie{CgTد߳@Ye%ڐc[BdXfޕ 334 @P?: K?< @aWma 5]vT gB- 邋"O>oqLx 0GkfzǐƁA m Ke kyE ΝHo9v::iM Mص+٧>o͊hɮny=fwL/,L70  N]αç3tL{L k qϊV1HfϛT^FȬ߽T$Hzzu}ל{>v|$Zo1lze݂[vEgCҫ'1XQ,8m2C)bY;/VSĤҚ&[ #6\ϣ5S2\Q]]z-51J>v< &-EB=t񧮵nV+UÀ{{6&ߎX _3kV!-C) ơt^7:RYY.6Hy|=qU 369_cE.f&/W]o"kR/ j vfqVF[5ȦṀ9+htІ&]C_ݴH{z- h]tDz.[iux<=a}$ǧ(l-R0R}wr;"p=q댭 ҒE<>Ґ|!]F}cE1g2ԅ>B9yEved74sGL#tE縯Rm!&Q=q!7 ~P~3PN<44ksX&BNErΒm1qD[wG$i7B=j?@O 9&5\`fU!V85uqbSK{pG^=;:%8~U1 RrIk0v7Q Ԟ9;sFm ;$&|5~pR7%.M %#=Ha)=W}R4-LS**=g(/ppcC",ԑ8|؀;l6homuY#0ڈ1i_Io?M9Ϫa&Y8m{T92m_]Gy&h/_U+xy6mmM*Yb_WϿornh>M\ܪZ<1:b< #f1rtl'as0yyWto%嘛7_RB}Ҳwb֓eUXFA,dOuv9ZB3XF{~mec.ܛo6o⋩ eIE~zڢ4<.â<,C&ML,E^Ő+ŗ^esU 2~o"k`d%]KqLtʹ5Iêc(K:LBl&fBQ{nb9ƫٗ۝aܙƓL?F":8pvĜFN%[vMSΡ'xrfv8z@2V$zkoc3.5 DZ**!єSTr8yPޥD0pJtn dup5*I$c/+;HA6P2ƕ/i^._D|]A?%uE L;9,ffvAW5ﺆ p{nFAA^nNj\e5^;(.[}0MUSnښIf[r`ãQ קgڿ(R$pE-H,hL?M@bY`hjY@w7GO/}{z,+GhМUZdA ~b`*@h=C/WПͺj `8iS ŭ6CL+Z`HjYѭ!CeImrXwAhJkЪn^,=09`m1ˆp$ey"c[i2| c%dV3\|@5nU>^)lK/DҪ.Iⳇrj0̏msnyY Uv&<[|k&A$^q(qV/̜d쒭zشDi`SԬ4.TM8jSlQV)XVnHosdɎ,hƭx,>e劅ZK0-">Fu;dlET'ڗxp<:xi?~/)<_(AF_=VdG@CS0K&xͳ†1AY;=_UZ7 ˟.Tc>9ѳWB^=oz_oZUГG㟉Lx{ލɟ:`kR`\F?AElCmIcS|D tŭΜx.zn' cI:Et pHF$r 7]_F肏m+5l?U7  8{᤺q Ǻ]DS^4hY D+qNm^8}$س8[Km̨gɽF#.kO9Da{`/xZb z{V.G:޽KLwkLufyV$ $Z4àJn3L߷{*Zu7m h;=nj}1-!BH0 ^O @1S G9r,LR eJkl#߈x_L_!2% Y2 2E7&n,)y~P Esvt,vXI9bѶ 8}!/%~\x ^2!v-C47a$ Dc-!]a%[M2  ?b:<@ @K;W"`+B: L_KUiAnЩ(X Db( jkIs\"- n̷}EBnnPysƔ:Rٹ:f@22ltVę+FkhtڇUMaK.N*4:PkT20qs]Z~"nk? 7qh 9K{̂i;rX0_\=$RhBѠ!Ω:G#R`x[!zڣ.L+<_&+ENPK/ ~2<2HCzH:rɟ)>Z/_nVQ}׸FcVT+TVjj:V@N /efZraz<)Dƈ2{`r\vS4>ؼ)v)դL9bEPe+Y`H> BOȑ?) ȵƲ 0ǔghz@}Jav}Tf6Fa?!ԀdteIӒdPC $Ǻa4Y%߉K /\a*XN8X] 7.^hscRU{v^{IO?Jwqໂa+eGKn+%tZ[>w)Ee*)[9M`Pgl-E^K-[!zm6klZKҗHhV4ʉ?h -:}i<3&gzU*gZN6=wa 6BO7Q![OzqlYjk>U~)|#<~o=i+VH4-G{ CK)f\#\W?c_< ek[י&Q)/Qg^lOyB zK81×E%/ض=zZ> TbJq8(d9'ds/ELz )Iqti1`M*%JUї/Ԁ͕ݤMSF5ں:M*w잒@[> *|x]J^@( eJ ;AWD$[Ӊ1\cR%VmEU)Ihb{[>U묦$tXJhm@Kb[@顝$Q@V$iy_$ @q[S ? JCa٢mۦ(I}e2_ѻ,4xTMeQ3QVt mXkgS$&-lgvRLfZM7tMVs #7AIp<%3ɘ$uMS/% @Ip%3xY )-$-Um^1 |}߻+f,,i LJ_mrJ*Y鍗U=;g"8@vPo̾-p/>~uV^z &%}PTê͇;ǒ>#P(mO8,: ΜN(CјC8E;ה%SP{i)[k d}R/`r(´sFN4h‘H嬥Sbkeӧ")̅2:b>X0(JxVNG)鹪zJjx'5hsRvЎt]hM酬G/iYtT'HftU՚2̕NKQظ @KYntD<ݽxOO.HWX-p/Se?:KHK?.~JSɭφCԵxuonZqkTa+rv'NrN```,X${@,@^d(y-_R|y+ nH?;,f9LFXh{GbQ2DAW.KQI)EY QkPw[M"ML+2yl 3)o|T6χDS<7P̿2I͒ 5ȟK hFFo3lT/'8g&;@Ŀ=p岴ئg`D >cݤI[E +4P~>Lh p#l-gPɏ)A]< [kȟP",BP2NUz4.:UU0>NUS#@8qI[SƐMQ1e2"Pg>>\2i!ao>ig W5K.p7ԍ18Y= ׸89]r1zK:5, cYrWJ*Q)f-)5u{3T1r̀ TcrA$9Mz!@>US:VN D^'g')]n Ea5G3b- qJn-RGr> y(qW6(wjKi{ V'aj8B}p?"-pA_]GU-,1$@,^φIIyցȜ FlƜR OR-u̯eԘXc%kjEǔ߹Q9n(Avebba Ko#SFki|Ty7vxu5̕gjz8~w&C;7vm탤xXN)Lo n-.b% Dvw WyҌ{|,4ї2t꾕7t6!R9f!f^nW"ˊ;J qz$1*0ch\`,3fnk=w&n2Z#`lS|]gJ-ܜ<Նx[GVymmLsE!Waw6le=0ץ}U34a@z}! -vP1AJ HSum [/h\/RhycyO` A4fd-QJ<.f\*5B,J=Vp~r ʪTWᚍ-jW$wBpmE'uI}d_R8O[unL^!^ Nj>qyxYvKx-e[' mdsZȆC >n@@ywң2wC#$_5E\>quHfY~Sק2褶N+rIkN<.|#EkodrF Ը@)KsH{I>9ʢ*+NQQV;d8<[X:r>8.^AiUvDdjf+[7|\=5EÄfR_}a!JLM!;E>_ᾪ%/ &QN?kIH$iͧ:OVo]D*L '39qٯsq'rÇྦej-_+}fߵD_ѺCP m˓Frg9wE}Cv-FlxsK>hD+SՌ}#R">8D1;B2#ۤLH]zy'I-t~kTz[M}=~E76^l!#1s0+эܦN$Y,_j_^q|p⮒JgO :' ;T?UqeWEP{3=b' Lvlr'f l34ϗa3!a@n>" {*i `|@[*f-q80Хd;(Y>~+`UK}5 Dyh)@YخwZKvaWOT 4q@^7$yS1$2;鞉i (:2 p'뢟I7/ !iO`zv >@,2仲g}& aa\li塚KNF7*:+ T-}CEgM"J (s߉ЗW$ 5`^ v8hCQw|ZYj"%\-%!O(Yz$z/+((q٦Z+{=uױeE!g>F [!2G0!-,~NGn1ρwd) #UG p(-Zf›&gD%Il}=a5Mݣ-) 1eP8F :FܝM5UVLU0(>*cL,[Ǥ=Kb%2UT8/BG RUU@)Kd K/ ԡԋCwkXi'1~UBrf{nrsC=5 l!L)ZdۘKL|_'JɿS>[&w˩t.9x5ci`oBJ,X_iWؚz|T {MGU(!3]jǐyyAn;y<J^vGTr1fJ 5}wGabMJ6FZyNPT 'o$eY:?aI&A"ѣs* 3ADmC<1gp=-/~gUӰSUUI+RxE+^) K*¢s7kAw4Vu`k8_R JVoXEQC&` ؅V SNj ojM-v}0?L[r,WLPyJ~X2PN"Z]nBs% x}w Fkz˚Cq^~BاQBPrX)}Xւ?m[l7Wlz pAuhC&o/9%75,'a1$NK֭oB9Qq #`{W]ciO([[=NR< !Jkd?-^Uk) ڗRIPli:wyw_oec?di-j}LҒ&"ᩬlw?WOQ b -*:zk|Xl?KYD'Ŏ&ΏJ" ab$Q@oFx黔[k4xGƶVT́i6 1DI +9$'VPUetG&c.xy} }J\80P1c.\4/V@MP6"J@nȊeߏ ۰5ò#kABk&/7 eDž e '9wH}ZU}<܋X/l' |n$Y(cẚwTД[εs4n0$<|Ҧ RHF!^"y #֏wmTw󘘝 1ݰumiURBԏGPՒ3=d@6/y/}X-BCIwJ|XǤC`kH,9a`Ұ1@`ߏY;},s#u#UJ&ɫފ.0e&#ͻ/B]oRCdrdFȹN|dP7P'=LBfal-Ɗ?Y!fo|Z͠˯*k]AMeU{[l IqRzރNjDѩBb=k2hL!\u٧0tT/@$Dt ķ6M-x'1#MӲR 50?H \9GUyZ~S+~dGV!U,7sH+PIx~26vlkPG8YʷȽ:j0u^O6仹=?** 3BQK1* }fMZ}a^CM<5ܲS> ,/iKniK҅}44!9Ǥ㪳Go#"#@FYRxJIg¢\q> ;0 '<(gisd4@;I4QF-0ʁÃ^)IC}`1rl&od[HuCu"9t./2'5"ZCzD%k{l\zF>ʙ"Vb'Z'R; s;)b^nHkowE J$Yݡִl~ПI 7VЋ̦RY6Sƕ>=?|A=#h~<[Raj/?>(7Gf+{t覚ɳw4J_}fNDa˓v$ )|yBF΀9J[<Kb`y)9Ig/;$ %IpU >)Buk xL:oy1 [J>'q ?^rҦfvabRݿ5 B1=V~݌uVSa ݼG.n s*QIpEVݵ1B,үO^\*˿FޥSS5ݩ"$+K02v ?GX&]zB̫_H?X>m$ky!wgRZkW=YQ5u@:u2l3a̶*g|ǁ^LN V*ŖR= |`&Ձ[ 6ks$#BHV"`Ltc.n(D\ K$eJtޕq!::CcN_WL(X5e:Ox 9C{,.IY@I)COSXoJd'NߐdyTkBHm} +3Yids}>"Y^ذ]`h]a`IEJ -Y`ȒHHRf5^nv=QmVΟ\ L?.9.}5nz^WayBP 0kʉSXŭF􀦆9\Ep4zU!\WopJiAL=+.VtuH5MsJQJ pprX]-[ h yL)&ex0}15Is)Eu#17 0H+C|C8 R"&Aa6\P'a)6ٸgNbX|7tW+ʞkUJTJ !<}`U]Qm6Cp};)Ô(}" Ʃ̽g^ cP?-is^3d%"XI'|b &6e)krAIW E٭.!e Cmn= Eq P]cX؟]`&,X'b@׿a/]45Mp/%VR8캬H lj] L]3 ZY Q8]]c$SXX;uO}G#[OO(jM "9{1eRxX@4ZN]hjC`3`(ȠɊ1EJ@#4wRfk1A=#Y):VAAU`uT?Ah;$6LɟKf!~c'+Cj^6o h@e,eG}z{ (Ss#Hm^҄|_V3qLn \+u̦a?I. qQ=a~=qx=$"H6r{ dΡYVR#f>8 s[ց,>;1T2'ǒ, /y89..Lg.cBsNAiZ>2n"XySUqP$޷XiQՈd'8sGH{G5 m5HӓbcMq!E\bSM+Ooc򗂷݇h9U&A1NXFnԳo]lBXK OR>DQus%t|{l<"^ʱܛesM38*y2Wcpi&c2`@:aUUݥjrk\HBSV'D; 9\ů)мUVzY+KZ|4{R"DvYT[Cu RZ6LJeʾ/:Su |-g~?׹m&jĘ^BCrrf!i;I@2̰aT3q m'(hOZk9PS)WS9l'qr|ax!RᨧqI1[ !s<(!b˙*:ĞkLAؗe zv2A&c*j* -»K#{kEh5ƎE@۷~MiBh>F6] w׸mLt:qYB&Qǿ{Byd5`D;}\Ap0+#*DIު3WW߰'gepjp.m\aӴ fx<tTti?2w70@ХKID)0n"GPYky-5ɻGH1"${\r}&7TL3=MڙUb[Eq:Eeb)qFR4V {+[qĽX82 XI͌3p9K=nӑo'g!RG)FKNUǔ)yQv.=K2|ĮS֧*ݟ~2# "jQݶ&#`[Ar\o&KųvV&ezBLy(aq\È)F حۯ7e0þ6VRƷ4NXŜO > fIhKWtc]dDZ {y[l[4#yC&[iUٽcd2n˾s&x\_|]HY : ڛy2fnՋ|~ZPí oy}^4uRuwŁ4L}ϻ !?Dt{::i*lJ<ث=/a0/i:"|@LMV" _+׉p~6޸Dh[wYa<C=.ABSL iGe'L] JE9~;$A3?2!]'yJm.8 E)IٜJISDvHE; u҈웖? ͇_>?[z 7hg7$@W>n;~[FzM66P SFz [۶.% @+_XhX='(I"^"[/K)I<ʕ`<&qH/fbfTBz 0gT݋g 1eCec(Iȸ c*yt&e6C ظ W'jcP[%ݺҁJ>. yj3sR,h;~/8)%Ͷ9)' @0*Yw6\|OˇN;8Iߎo;;ZVG2Ip,>!^k Nz%ymXWzy y mzlɆxm]v:(' @,B_yKJfu9E;I` g9$ɻ3)7]AJd5G_:a1&wpNWRXrVz%1JJJ馋TOdmL詤$Y:H+mt AJ@d$fK)RBP+Yfm;)O\$EW0 ݹ$ťd=lT#RܝKh,V饤$UbKPvz)) @X, TU^JJPI R%ʸc! o $K6c۹"~%7HI\lT[t2Mp+wyN+Vp;() @-,/ %%Z6Lo;*) @,YBVR.yzچ=dÀ `w^lզ'HI(TOdH6@J@d!6I,e6}I@X<N N#I0HAe3nIjtsYmR.&FJhמvb =_  z:7o8S/P3)jIwty:ASW_y8{F?/fphj\U_ik!v?Qjlo'Yyoڼx%99{6"p`\yO'F\7^Rq|mɅ/i(-<ubq<1o JPeMg:4uH]mzy7D c`BBtQoIJ}s2ڧ[q Tο gӕ i׳c:tbyzI#ཎGݩ#}k2^Iʞ{)gţr]B\ !֟J?1eѸ׏GVx5ZsJ>$Y# {6k/bdM"~i6`(7ԒЕ{jB6yE\G:`S3j Wc9-{AHJb!ȫ׆xs׊j.{)T7ߓmS &VkI5\%3\G88 b7~ҞLHw\e򩼴zŽA#=LQAzAdGn]yh0F`u is0; Jv< K'oc$+! "ǡ΂ ^5 J6R]&5!3Y"Ii$mZkIlۅ/yͲ^Q%D?oLrKvv[f[?q Tlݓ8Va#8 :amn%yPb; @i_^Ǒ;oj0;enyCoəYÃN%=31Vփ$z>8+&w5i3c0Dw]V#mi ՞lKޞj7?=`Jj /7ՔFK6oq:wD*K1+j6جl_gkB4]藑kuMrLC#.<\-^ֆR F2+ql4Kds۵:Aיcn˥USTs/0ÂR` wQd`.߫lno&dK89x- UX=o(#Ǽ$%[@;u2@,g#{æφLVc$SRNi5rV=kf\7*[u3cyj7F1o͠gB8 _/Ŗc%Y T9*-ETLkcyrҎjxm<8ըc) dXY "@嚩wA]bJ EkT-OͰq/za]-S3roX'>UyshӒQ#YgT1myo hlv EѾ6? cE;@YKƼ6ׇ!)*87W?Pj1Bl4,} n:vrh ][UpîJP gb'P-I Yu mD)\Jh&+Ht䁣YK7)038S'/mv6\OhI9m@o# 2$z-$p`9jhRUCTj\6s>$ " CK[JN6 FN! rnV(=H4cMmi3ЧU[E%F)ԙ%?GG~@ĵ'@ؿMfw{*"Cg/eKmn(\ܹKeEAa+G' vM p!3+R8mkS_1 [ {fۖj9[MD E]~"=f cuXkʰ}{~BAF 5 Evf;=!Qmq!)S k2J4=Ҙ<7zpկPs7Zl$zw)\wRmҾ)@F kG*&PsCr2峊tUa"4Thݙ۞tp|ACΔxQvɸ^$Yק pCۮZ^Gir@%lXUX7=(0X+TX:.]ӨDz#7lڨ{*iNX Ne2Ϥ\v3Nb;uM=ZD}^EM8%ӳbmSeF g P^ӦQF4F+8#XG" X{Þ~$}hS4 ݰܬ>X8gոeiTuзp $u@04N#{RooHAQQ&6\mq!< 9ʛ a5{(eXq{^[^0s(;\yUlP0;ޚ䉰Ž?Y-M3ܹ\͓sunߍھ]JVX[>F|]Rc]ljOn@fe W>ro[ W qR|szۗX! NRKmd`ˮFc ۽ d"L^z A_w'fN.7[DN}*[^lGP=]WxTyh朡޿!ՙM}DjVSRF E}q.͡*޿fr1K }E}-f_pxІS)PՁc5XZ- 9Vr| )@HIl(Sg,psv:Q!2:XYkƭ…5ꢠubs.h\3eͷX#mfOzmq:{kb)+(rbNz0}jBV~;0<|y:֣+5}@5{ѨBI3+z4ao\.1Zn2WM~dc10>ז\} ꫧ,sދIL]P[WtRKwP/]|.x}gzw;Y: l[[~ek#7 >|&m_@@=̣%zlqɅg0Ojpӏ :LB7X7*uTEoTNKx?=nO'|#=O.k~Y%Ӊ'YȌ+3.}drkG֬Z'>+Q\sZ ~]ا O6cKc^DGcҁu}9^IBn43ژ9fXܝcA)-I(3 \ZhOX]LySmr{8PL2<@m?Sz?hN}J.[:fRE[`ycRÙ7"p1Ҽ&Xֲ_6<[_ݵ9uNҸdj^6gSk*{#ךtǐcPm3VӬkBetp 5jL⛼qzN4,6CާZߜ\8r;vh`+ r14蓯RzT^Sk{P9ݪmg^AvsEebsCvknO9Ϭם[5Hx/1D?t ".mY/-mk5btMxlt02VKkެU)8Jk/Q'G)If-FylG'I|<$Cߢ#~1lA $ۉ+mx|?osnCpм@h:(ߟ=>?f-kg{_Ft71 sXq1SnrW %/jvIvt  wqb*,TQSkҜݾ. Zg\L bÝv~r)~O-½WqKw{R7ɟ#&`d "FࣺѥFk|ѝ.@6Gn`w^wD y"yh6J^EFDŊ*":/-{13ޒۦgyyG' iwyyy+y9m+yySӵb<+_Exa?'+y`G]K㳷P m_A5IbKCzTCӔ/5D~^Ll T!"H!I<*ڞ("`P-N%kzLW$dh0L Ӷh[ F&-*ۻ!g%wrc;ᛸc R? Vz'@xѡs=4eK͚ %2p02 y@&ƺƤX Hu 3($6G70NL7'0Q[pdo h،F#)pv!myz@8Z@8-p@ 8 8?Mh7HAh{Sz-sd 8U-p8j @8Z !0N:í#d'[p,o @'.tB; N=E`z|̂NnYb[~Nap\c`gpZdth~pҩpA8z`!z7N]hT9c聏pZH)pprᄓpbK G`#U-%y!]T.E3tϙF@ΪNNX=4.aD1pڢp." Q8]1M| ]T8ħY:VV8b 9pX5&ЅZN{' gu"pcc(3N5 8j 83#]sPE3A9"2p*o77 jrco*00.nnn w7!ifHw3Ènf G͑$T (vs=579XfUUDګ*Re ]uCg@Mj#+KwY]cnxE0sGdZxe grnN> /:{nx5TJ jC7)2 _F7G7{ %ano9UI,0E7:!jLbA;M@ 5zA( ##{2?.)rV\ͲH>W>?eN&Xm!{ؼתΥU.Ri} MȄn`3*ɔŁe %8iK3<1~(kOV LBXa|iЦm~*ocn]3D$:B; 5!dt8t,VUǀ#nk Kt1x1Mњk>^rQۻ&dݦ1U s!b!n~SpG@a.o~^vCN rn)g/ 﫚$fM09yM1He s Z{ Ij{yWuJQLݛIvǹCKZrU3u35/)u3"7O4LJ&nSϲ?nSf}ǽnEZ"ـ0:Gشy!rxnkCϵZv7d{Q,e~ /aa[Cf-R &=$+MP t w DcZǿx0t+ẓ랗6N[YB$/ސ=O}) ,Z;RߠYWή̼V+:0dΖ}*/ysH"`h9@wMDF_ƫ͡.Ji_҅?Дd{85Ƌ/mKQjɾu:frd暄Zjah+<4eܕv:$"jby{w7^3gd4ib=)ga։H;Fg%D "aћY:47,BDxt= vaOl%#u젚Uaf=!j\p)&|04Ӆz!7F,Ps~. IA q}i3HXߠxPz>i+5_M"z s=7jQ>s͋yS1_b_CZtxlwxG. >WPjmͷⶂ\dS\Ynlt>tF.d,5{+_4ffx ?yM 1D֘u!n8xPpeM@vE;%24[PPaCi>ǭ#c a!0ЗFs7`> ^WHθH{"'G}CAV6xÝsq|Uth{%uG [HT* !v iWv iWR>8TW]2L%" ʺ>/eWA3qW30 Lwú }%GTȾ6?ݞ}\S꓎^nNk!.MQgTU!p묡5:;E`ŗPrr5՟mtӽH wAGt82=Je,{HY+FU_?R/mFSdH]ju0CN~w~9Z)Ie :mBn]5u3̾T!MtLgE.9_Ml{,́c/t[f-2=x^8ݮJ~dC.@k%Bwϋ;487R|.x!xFh2aT9ĂPK{$:6$*A:cCn,塋J v?můk>o|xyzպ!":.W{hz'h W>13Ʀ܇;< t~*@`䱡iEy05+Ǡ]mёƯ0w{vA᯾(76N ~MeHݩTZ~0MV*|!+ےbtWQ^A8+%NZ_O&ߕYIJ,$bEֵSu x^f̮& (X ZL>"xiswPYSRFcHHa1":u(F ]4㌣ٯT\0##RF†i_\ryrL*A?vP֟A%NwHs락lڇYs|n()퟼Ĭݒlmo@-!od.@u=ıp-6]Kpz]){3daqNmŤe,JUn?q;{6M I8SeJF#:8;qAf 4 lo ͓_dW C₠)7\޶b aZoy%nE]̟&N{gtxHXrP#.Vz]DqAN0(}78$A 3ד<4Nr9$X D4J dBcǽHx#,l]J#4PO.:u)R_ +$;9֯j9YxᩐsAR4Y$sꄿSEB8͹[^i%H&գ.F9_!8_ZtRS& _/]F 3A^^&oD NO3~DZ:eNM',b{ \G K4drq\1#`Ha/{uO=n9G6NUHs ڮM+A6D !(unNږ81,Ny_5?m_F8XMp\LsڳY@B{yL`{˝rB:m-L~iX'!g(,׮ӆG4AvYfpK3  ~Oṇ fe4DՍR7ZDg>efDs6\;tVY6! `O8Q[Oƴţ3 .)$Bޭl1Q9<|ح/^@$v J,ށk~Q@{Z|K`R(# Sqk/K%F("CbC{|2Zy7`My ce (Wi-O]b)&vPr1y5h<Y\3s),c1s3 9#oQ>GњlR/cvֵbEGh ~eaLCGn/<3;m̩PJEXO߼3 ],?A& b>-F5ZE&A1wGUk0u#\[#u w('E3#!۵^b/ѥ TQ)~Q`wt=Db=İ.*0^({UK $9}\9&Ě#U+!A >Ge8i]L4|\yߛ Smv0#{CY#E9 Gxy4D ,x!fNٺŁwL諡oXa|u \Rz[RA)KZ W k[aase ’#P@)1Iga5`zH &әLx;FIN& A3Iⵎ[cϕz웮&C'6(ne3 ֨+Xi!=TaE /e;2P-m!'0aMÄvn NSݽBNp̰pj 5tㆬU8pU ^}6&\x>fcff3h,SQmTDm*0ibفr 94 9B aH+\*fy 4L3LJ;0C 5 f{ [J+s"<.&B*7g-@mͯ?eT"#:}'MJd17f5/N[cйe<I=<}heXX7ͣc7#\`~ #2< ӎgA Y SFU=R+2Бü}bx*]ח={EJįHrzR&!n^Ɩ=gU:9t~G^ANe' - yEr`va0@+ৌW\!^)Ӕ0;f,IYb4鉴XMgBS lhI"'$εy^'|ȁ4ੀ t|=dCOހ ू&1'>eF7:G}"שqq?ɪ)\Di/[9}jSv5)of )_cjA$EjПzG}wz8gxjڠӣ# {I&y_Zp8, uGj Jg奤rt/dL9 F*vlX"P xKƼYaȶR($Ϻ$;P|1SIɡ^0͖ Q>{^LSu۰՗Kw%O a'|ȝpfKH~U(/J+?.^e-Ynͧ_>AR: n1C24G, g%u%I}J/7#5xZ;Ta& X@tS\˛kS4}!Py48ٺX %0i,FQ ^M h|,:)g>:I>ӹ5h;`n\V6@AYignMu: Pny،vm v0BK`/ˣI7\Y6KA>̞TJFp8:K|p( 2pŽGEN %CLm2X Os>%;嫎vg!@0Dᙸ幣sR*wVwD Y’#uueu `U8 I{5[E6ǯ;/^䶌86fM@Y ¢x05/N;Qu~`6^W;]A3{'fl"}U'T̄7 ;Hz##;gY^_Xkc0'^eF ɋ8JJE&r'T nxt)F?oVے;!4Sj,H1i:2OdfGP~Oo- ޚ/ܖ3b$IY+CY'MJyv)z)Gj] Qc5)4HXgF}{Em6S`1*3WBa؇AR5s}%0 ]ն9~L @cY sY W<ɫ ќ>,%%=p5| ;:ưNQ} G|ԦkP #a 8+A.a#&aa/dW9:-8j!G>ϣqY' ŷ䨖8>6u0B!>9 7sQ<"Qdç* 2 s Tpxgg^^ha0t 2Fv$Cc|!%G>VJ陖>,Oc0v1[FrO2a/'7frV@2V4EL'}h japÞ.;1#J;Xp3Eza8Zq@344"F ځ& .a"'\Ћ#(۝whtUyJ2U[7a|\${#$vU1h &COK^"@eyS1Bz0ng=x6@]DhFMO,2ܢ+lPv|B903XZX S]Yk!խ,&Vb(CLjݩ%IB-*wWw:ΈK

-IFdz[ҾץKmҠ>uPfIIe\ZifT:N%9 ,Ju4&tE۷rќt.P[4CLV-8D@\VKiHS,^4YԺo&YuqOb$˃97nclZ2w_N}0DIPw ָ 2`H5ΪŒa0vY$f[AdDwπ j:7LQ4F?T;r} TՏG4TEЭ13 C3&[62񌤳ѭq>c˰{Op036p9'`yIt8h fA38e :'A)4F0׭V#$ªɹxW~152-okk@QBa-I-FK&L:DPjɣ3=P'gP܆|1Ož 5qf ڰzǶ8:ip̔@0QD(״4]:*2/Ċ64Ɩa h|)=Ü1(|=HB҂qF%n{H RY~UTᦝKKV|ѿ"4)[r)nٙM'r4D?"ksVWy64Dtg *+ *"E8ܷ$~Ƿgb)7:` [Ap&\Pө1֊,ARA[JG=ȍŎ$>HZ )ȍS/x=,rmDrZ~ F웳~G&{$Mj!'$V 4:/1(PQoKIkPؠH1%S 07evpM*p^>S`EHu?da3 $Bfj"^J4#a 9@:;Ey~'M ۀK~/ɿlJ-_5(%Ǒ+P]bWdvHЈ3=*,Zlw5}$x.WYeFݍfJ R`EUxp8iP l*l-[s<jz3M7ƋYK.L˯?6e:8 kNDR> UJxIu,6QcCW"Jf@A Oe";Hd Rࡏ8d H OA8{IWDJTnEl`b/j4S$4\t ˲h{/$ƒaYV⒲m_6?M~q UqN`g4nµaĨyd[ߜ)bj||Qӂ}%rAI{ 4ttQ/%OhDGO\vImêDF:S7 CzR~$}roG m1FbC07Z֧Q؏MJeElka/5LNFюF]*.5Plrj"1xY8񥠞1fU7)j `3&/I3 ET UHE{}ޮ=;Y;5V.}%m|j8WQC f.ܛ=9-gg[/c ѹD6DMZiN|v]*P3^Y9X߫uf'f!rC~sJB5iQk<]?.wPNp~?=@%\%/"еl2?tGЖ%߮ `ch$].K&`U$5%hr_LH؃pqHpڎj5\1()5QwI@زs|^\OwòW7ZT)㓐:78N4IgJ8xV#=a"f4(qٞwKљ劥 ]Ћq2䵖Bu2k:f#97'b3౷pp@+Չ*5p/jHL^*z1TW6Gm.a,F5;mT@*J*J~Z}PLX0cFNH2$܇GW kL,jK B? I╨8)!RpPaOˠ>9#0'T2B*tbҎl"7ޟ ?Hp](`;(8"r_/=hC/Ym8O+ހF <"P @I8nW£U=,cNzؔJ77m5RmXul2FDyuy7|p%6 .#FURDh6@Hzbnq &-d8O.lӌN"6} /`OM\ΓU1PK3O9,)&lʽkKq( 5n,ឫFA3  \r V/{6`4IX2-D`("QD(\siD8ġ`HHxD"#h40tDy 0F#"sG3 2i$d"gw00^˞Q@|Cfoh-ZI5695fV<# Z$W Fݽd 0n>yT|\úIc55ϷZ>zrҋrSii?Ol:6 ?_z~=w9]J*<8r^AS$%خoJ[@J8qpB&xtAyF^alOϹR,{r`*O83Y~ |C~j:qy]NXO KJ?=43.4Ll4Ӳ0[ M@7[EGn&]{ W.io 3f(z  څ0 QUE!z31ź 88:1;s<%egn\&N9qQA‡b":]bhrҗ-<{`=Y}CA89µl!_ zЯ)t`#I'+}폄l[(N@b n :\:c0Zp&uf89!5 z|Q,|ʄ_+14d<sH@>ʳD7]uf1~2gq${E`_FthԈcb/ꑛD'kOND#FH14ȶ xG Jؐ^\=kdQyu)a}Y$j;>ZWMQHjι7*fLܬ!> 29@"r,:-WQ(_r2":-X{G Ğڋxz8Ҩ7FD TTQx[BPHd\;z-"m7 8^$U2Ϟ:$yAw.:) .)4v#䘭9x2/w, 7XTy{SON=vTOU5Mb.r+ /O`=I'ڇT|nώ]Sqm5g WYo!TmO6{{+ )Ef0DC*MgǙEi$e"x\6q8u{.i1v/7e`^Dsv)z?Q5Pw&OS\j ݉'BpkW\s=ԗwgAO?bc<C+\Ez6[Fr;^-SwΘ*嘜NJz"\$yԟbX+b։gaJ? |gx2yob?xֿ0h֨t),Nk\1׋7NhIGHvVEejtLEN $8k1;h?2ոp Q*A苢)<9[L3q#{D/cN2hTb 8e~Z9AJ/kLZp{63h1.YnMXD|T?b%RKݦ Ti Y9r腥˽8U Ċp na2V@snSdƍ2kq2/E@-ɸkt3xhCS.͚ zQq 0ˏ9r<(|sڮq9za],SY x'(2ڻH*^>\(X5s#90[ai <|1)VHݠn$gG:=V  X|\ iVg p/^$x6OR{N%Du>yoDBPź$\&qIEu')1)(W}}˺9]6TeZ%?yg2CEiFcD9Zxf|ȜJhkX, jp&@PEȯ?k.THڍ_ϋq-]ƔF9Nܩ8FmAVc[[c v`q'+PURjofXTĵZ!;jqx`ݽ 11N,R!5 bPyV `Ee΅! ~p١hgǙԐqf n4+z xlil߱)zfsjȴ߂, dH&9Xk{-gNtK`<{']qa 2߀h$,,JF?xuИ욱` <-"H޷ 8"?Q*?~Kth mk~RQ`?x"8i DaC4OKO#MZQE~('.4`lϡaymZ_rddR llgc7eXJ0=_MpksqQA|t{v^Y7 @qR PgB>=(sUǍ[pF:АNvOINFڬL[HZ;ۆ0:z;bjlDVǍEL;ӎ#Sj5+TX,b#Ƃ$GbMn@>XsT+|@b[t?RNJa'`h)VZ|Z-Դ見ŸƥV3$6hhMP#0jϊ& ^d:,n7iZ&o!-Bv_YաVV`H&T/S9Cx)v>j.^0G`L ;t\+C:+r٣J?GaF'(Բg5~ \`_ ٢FUT.gb  =a16iTp!olG=ԉBFLYAZH-WM9Ĥ>g2Z ZqmnovC"Gk0X7aIy݆Iv!=eݖS-(#?o[@8F+dDB""g7hޞ-;ͯ6OjtִDL;CW"-Irl M7ڭs>Ԟ7GVQk\ үĵhujۀ qO|.ֵ46MG,3c͏QD)GnU\4\R8%l^j9vkIjGCa+{q_ @z|w Xb5Fą~ G8@6$()hÈȄ~*#cNic͹l\ǝaFca"E_A}]Z ׬/HJ#Aj?^+ؕKUπXr J@r=]($mEfDRLj y+ZߖJHIrli][Cd(fN9SM Tpxf2^^COv*0^\ SuzKy{19ʀ»1k2bvt JWO"PHZNt^g|G:Qɧv//=&#@cX#7Q7-sY %!\O5H&s 761`mش&^zr.3.!\r qF)^?|ʫa ۜ4V@481 Ga:3'F>QU\FbnF4 AMH8GҼ7_?A@Ϣ.82(F1̸Шx)bzl[m: rh 4]_6GB).["Ƕ'=?yz(MAH'a{ b Jr!=<:3·cHӃY [.IfL.e M~'P{؛v#ѹҽupTCL':s(fͯ憜F݇ER5b}<)km箨SL̨`UUHUW0&k(3RacM*acضK o##o$x^BaJoG޷5Rl3}Vyڛ;</+yp7<}t:p mTP9DVE{H =u;_4y!~zhߔ@{$|+-ڲ,Co>#P#9)kaN),K9-f,MnE>k$/[ÅaKOO0oZXlz U܋kUi2~/g||O\nM^O$k<]gs%x7)ūӔ[Oppxm+x݄w8;rR_1wNGz(uW/~u՛BoQ'Y[~o\>9a m0spz>.p+ћ2#.j]>|(uDH[ird,2c#4{hΛ-X>u!_wLJgF/{0m~ϛ|riz={/ɉ(ٷ^5'Yy=8$LkIN6nsfAtٓnAZz+,]_ϣb>X8#giUٚi<&`&%ؽS+K+~D'%]??ԟy>]7 fj)%wzq˟*[.©KY`e16gRDE)&i7۳ $W ^-*{l[`'ϜJRIoc`"°VxjD𹟾z?D^_wQ`!-=ɂeyh-VǢCYVjxwnRa)v0!z 9=dg.+9{VfFR,s5^m-]ɫ+4]n|zTz8 ae5`{%wYhK|Rmg#O˫H4o5/RZs&RӆN!hDu8+E'g ]vg:M71i H.5og"H3@"T)dd^Gm"&u>Ѳ"G6օ %5|P-|tؖ]oEӸ sG @] ӥ K;@'we8J!gseeUWB@B ¯V='rCɺQ%T}iVVB40jPu>! b9ڝ"h\vu$<{^ *RR>C؀0p?]$*`*1/KvS_SY;'e><,s>/-zfI&|ӵN:U6?caTdh[#+~,n:Xo^\*-iD^@$QH"l ;~&,&rRtHpL6*V- UHL^ 1-77nߍoj:jRVpeNcpT*Ng#p,zJW-.<9p\VKڞFJ&qiu*$\T݅C E48Bm_jlc*EVA._UC ˧CstQpWZv8e 3D"I&Ld_54%{"~Md* w_˞'^ Eg)6eX*e8^s^w1MP i?1o(}Cö/jnJn!j"v3]`=@m0+;F^O_\{6^P_GT]_h`3ǮЯcCLZ-YChl9;I]Vv;x1@8?%=KkyY@t01>Mbkz]\w:_uW|ZvZۛq(l qRjQu!і/y% zZ?/YT?i k`)%Xpj;>9`M@QS ھ}Ȁ3l4bYɚ:rL-nFe쾕?NnO7owzeQW[o?+lM#d*f}E}sol.' U@_+:DC4$688Bw7 <_{l^L)AR @Lmu>ok*J&0x9)pYW;Ro`/ƑƟrzY<`^/pUϕ2+CEM\s;$, +@HEB[ j{|މos [ wyG"Z D~^iw>]E'>o߾;$&ԓN~OmϜj!'M# ipREGNDYR7 )Y[ 3gJOSrW)t[ -%̂&ݲ{‡嵘 cr5?V[jӳJArs[y`ʣؠ(J{bguTV cݧg8}:G( Y;ko{s|.{j"YܻNy8pC&o(r-æ2|EzVab8z>.d)!f&1S"P 鎮R0}n?;{690wA/G7, Z޶tn/h@&9ՁKcÞ`zu$SQmp 6?q:*'1~(DIs++vm鐍Y}^0Ky,ږU3m)W$x<"R>i.8O=`jWn *5@ՕbqI`DNᘭ^pDZ|kWN䊩~#\%s-B"lY;!SkG9o8_f{*#K,(QcOӭ5{1Zq]qp6}쨛W >h?<xLMMo7%vyTo:o1 ni[tn7[sXB7^>yK.;%?N6ޥI( v68\a+?n_.VFlǬR_ ?n]F?Ry|&bq;Ϯ +ł{ o i75`Mcť*0Gv7Q ?A $3sFB=#~a'aY}7V ǻsXs[]|$ڞRnc9-*蚤-3`m ]Fn [fgU+9`R\6OЍ򲹠uKgo`# d+:R-0[Ey7 c6'=Z9]C*\#tc 3oQ^G@".$8/+B{MYS``+ ٞ,T̻>ZN\1+6o|(Gz!o76FWOłqi{3 fE*tu^! WSRb0ؒ(K@*dR_`g/Wde՗1Imyi -F[Iѣ]iiˉᄴB&֦ü!fR=bȱܢj[ y$jR#T狿7HkM3Itf<(_`TȀAXxwj%UKπ}>E @ UT>\34Ǿbd&'q| P6Cᔑ'V K%) CM8= !}txF P"{Xg,(5-{tT)4"W,8d! /K#Je(z`?r~_mp ?zz-z$$l}x:oΥj]YZ_KXEO߹'s6eA (o@P |%*dmJqn]i `fښcP7$$d(!4>F+?#S:cbAv 40gɩRu wͩy;' >%YU5_}/Cb+undݪ#KRT0W^bHMd7bAX;I$f=N~C ɒ M- fqP&\UY2BF00lM( DȖ+m9Gߤ1v$M~[-wHSL4490NQ:<`'W`5;;#lU8u]E1; ̓;,Fg _? sgȬsy˕`Ncy#NjBF}: ʱsu7ï*a.tm߄˛VW~DjsARBuN*m%Qדm:I*-jn4suGKS #.U-GuUy*G4\GMφ"UxnNXLDrwe` %V<:n7aZ%:.ôA9w/ ?W'~$QD_ܛHZm[&"Kfh3sc'T7\_] |gW#?VѸd61 (7Yߔe%7&~Ƶ4Jsh1o'͋ṄNiR;G%g𺱿)#O/kLn\Iv٢ nFN `&;̘fSۨ$! Yrc}Ix4r#}$ 3" KvjrTGVc9{GcvcPzuA1XoVavYRB |(Ey,ݦ;dAUd_檮߬E,?+]G-C҈@kSPZؕ%@ɩN|3#ԍ"NG(Պ`Z}r Lzom93ŒJR``j:>vogy}˹21j(pŮutSPVm[Q<6x3K*7WT'r5M|fj˒ 6yű$ |AAt=JG0'p*f7~chUYJfqs3}χypƸK`W^C!nti\4n;y羒9zhA᢯zH*aW UR}ܒDW>DjEQP_NPk^Rcw aoD˕8f8㦧ۛy5lɧA8\ʅ8}J,a8 XgnW~?|OJܻ5쵍m+}$#!un x t󍛵VWwP ~L.yއyT'ɞ{ $H;<0-sJJt^iFQ@Aw7׵u#e4_nB%ťpIER9T;vs$p3'<diLy1Ad3!pa̴Y#9E9X*>V6f}vwN9ōm_jdy5e9 ]Wθɦ\Z}5Rh 曐s i A(nnqűg3Ij 5O0¯;K:l':N](ZY]`g_3V 䎥R3C"l$T3cpk_=hkN5[4MP4Q~D^ch'% lMr@j"iRVޘ W~dYn|PܴGcvqEf(mLYi5Pi{`I_o$f =T8ЦP F|32Svh [y'B;%*]5օ듏#%B>@ik_~jhcyAh ܀)* gpf{L#[2:]൤Z+-q e7g3Z1K EPcjZ%/lb4lq7έ/?[3^׫F#:n}sVfr2έc.Nbe-}?mHk Nr6 >ٷgVQ:|. #RU2r&R5gbKl[fB=,eo̡j %X|L4A6gϳ3̲Or@oq:bYL!oVBS-ˀUeޚ\ɒ B jx@xBHLb`quB6y"6ߴ9wxU}-+\\; _ŗ,~$w}&t]Z4FpK͘G ]+r"S׼QEc.xGU7k nW;gn1_c|X#PX81o"+S8Ț7gwy٣F,IoN,4X_܎jg!iRsk|ne&v~KⱚQ}t3$@;nSCrԄ@zEh9aV[uQlb;S;:N8!pA8[Vwٳ-T.*,p%Ϲ%:B `}nBHFn;ىD w Nvy+r2G6Pdj=MVPk961XC#'>D]|T2fz eƊ} 5n jA3Y~y (kEd3*kSx-RL\)2yNwosV@5NPݙsA>ycLS]-–]33Ԛ-kݺ>Rr"ѥuǬXE؀V8\~(c~]&[ 7badVu[YqSPZI]YjbxO_N快/8N08b /TR*2Qyʤ^T~vzBQ\oUSG[[9{&SJջ?PѢ%Ra\֥OoZM5PXkd*ި[-(ؼ";h!Zw8;FhfM=K>e0t n:չuJaҕa3Jbka aS\{/c~5֕*`bk_P4 j&pLJ#̤w ̹$C[[1Z#6I ^VmY$`Ed$.u0݉d.))JvS`]dDj ~LgW* =_j] 傃Xm|'5G7U[,PDedp_,,Jpu8+Rdsa%UȓeYT"G$:t،_ ł=kPT07FxYo5P+UkGaa*.wСrߚu0uYM ]g~9$sbhsS)?0AcP u&jƤ}77u"I%SFP'P+K ʉ59E\9qqFҔނyt1yYܵT? N1 0}a0NzYcYd^Jڙ*qաv K*,CH9a}J*nU쾿I?@A MvC?=zuL=9XQ|/r LJ1JP s a8fm-/Xv /{KYB jj}u)]>[\@%!P .T/[ʪްHY[)uJeB{Z&F,cL4D{ ]8Eko=,59bX+Qpqh9o}@a:5cH):9VSdeF;e SʍM{.m*K3I6XTw8ѷ%P:Դ/=JVw24@T4&߰J`5ё9_Ɉfdy,왟sO '`Ŝxa%rU#3UgE7n*(@,};GΖ`/v|f`!Ccs>9BϬ`)Z j :)1RvvMڲ|*,r/QAL#6 ܄#2yI~O#@P+SPl,VtxmGP*#+|z;Z )_ `i'oKwxz5Vj!=&Q*D͹QլTR2P(7>Ŏe0ʦ-%Rue75M Ke잧 P86 'KS^|ԟGDUp r#^͠mpnD4zP229і5k6~E1K,e`[Xef-R*QЩŞҹ(eؓXWkf)0_نbյ<.xZ" r``2+Sj#H+ TTD3ni͌ŎE,Yn;1_ | ni}5+UWh*+ ;5usk4a2?OyOY6Q.A6;!يzvh&,I;R%+Bm=SUdrJ^->7TJ}CvCbcdƑڕm5}/jKZ>@kr+7C/~LO#d"2Gr-QLl`M2 2J0Xg"/.ɢ1䡃jǽ.z_˿d"+Q82XqdACqcM%QЁŨ*;E#*n(֍~cfdraJ[wA(tRUI; mn[s?۵oy*=lew\f!aF=zY@";+q#p^"T@(-<[߅Jgch0i/5SKP5Eg%{"LJW|t,aWrURl8MQ_<3 ChQ>[\i)^h)u^ۣs4Hm1#81O8 x\s_|j|6Oo^ʏTn'!;1: IeY8TrA[Ɵ ӊ1V>y”G}!=_G!ˆ APignN0 TAK EA9yPk;>EPtM$WHwyG:ۄ9 sA`rr˒;q?z74HH}t:yl BfTl#M0i}Jk±pXȌ%뎧N kklvtjpҟMK(^т5^ oq:=u%;[AiMMOY״lƞ2Sޯ֏ о{S=;=C3-Ç74ډv1l ͜D7s[ ;:%?w[~dW/^&qʹ㜳)Γ72˾q@<)O%yvO&9??"%:uTHdF|eD'ާ# !ӹh1Y=Պ Iڥ )T\w*vm{X + +c|'ae;|w;|s/bJ ioY uG]6^Wev9S}fɾ yAe;ޅnA{G(XaKZsٽmcb m9m/~d%y[%EĆ֢[XD"+ZՑX,Cۛˇu֤ eJG6JpgmHf_vFU@Hfda/:2EpjųmbB1Z؀v`לB.+ﺆ-qd61ty&0Z| CܤȓKpѲ,K|G8ɑp ha'>e]NԿy.5ᮩSm^? y&84!َ܂oa2̞ 3[2kt}ؑ9jWɆ[Ṃ_\637DNVa SbT䴘6P<ӂtIBBBbZ ",fx$n{6K;=0c/9,pAR?J.ᅀy|NΊE.?Ukbr|N qWH/yc.ǡzZ"a"ƳS_;:q-vW`뷛Q9Sz;6˹rj1?5(r<;Kj=Mqz =UJ8[`vǧ->BGb<_×RO&6aKl 6v4Ǧ*jJټ$CIrS~"d%ߙ@ȄXWPF]NG&VST{!MR;S2(."u4m@X@M&j>Llciky35wW4^7@2+o$KzٗD&א8WO7{dE/*h6l]/7 cIt\_{UX\c=5eqgaq[_SE b7Ēg@E&QOmqH8 cj 'L&H5o$8%2=55S-o$`)%RA: \mSf[_x{kjWVEvN, P%RNJ qmOGIB,Sx{TF+\@tNA:2G_Y!q 9N㗹сrY\\[˷xeTٟD;FzClqi%I/*S":\.? Kzk)R9"3Ա _=r(9CX-I{g/.j.JS Y&Tr Y$AKZя:*-$Yp- 'ۡ*}s#u%T|y_aeɮ9sZm૽Ue˷=GEӿfx׼)kS4&>=]Vى0N% nŇ|{JW [ A֒MݲNCKǨϴ|󁮽z" Dw tuHq5(2>Mw|>*A."۸ ?HMoS!\,>.©p? &?o %t%fs$Hn$5=7%_9TƔXThc9?(psšP[K忨i(} ba$?Leqa×>9_/P=͔4DDƒ x"ȋ)8ЮGT NwB{p$T?Ĕ;7{+nz'|0߈R],5 Tלa_T$ϳ2d2&.{Çq@BObO oA5E+1wm$/QtǛ V!g-Tg$%B^f/3 ]  ٨4u.'{>.mY#D~UY6p :RuiH p.jXME.-nI.+aJ7}sLȼ, -3ޖ廂*JSJj%ڒKl Ow&瀊žD9L>kKr Sr?;H ߳nD5%^Ѝx*$6@8? KGz0c ptx~GVOGȒJ[\Vn)s&TBłf >6N6DsO &)J3jͦJB.N˼ڳ)rFǍ( ĉ\gh.:K@i#5Wn8`)f|@ C2O5'f}g"̛¸'(qp jݓin('')D&&\q%*IuB-]߈F\EAֻ bi&Q.`'f N }j"?<(g۹򢸨C/@؍p\S€Ԯ^vh3y9 <\m06=*hov@DJܓ\tp/tbAliiݎVbh_ZQ6HME9n~lT%z'G3iLZX?@tڍT,kSZ 8'alcCRx"@`b1z.T YN׽??ijU޵BTӍKN@jozjƍ/ o\vKPP< k0ԇ]HwxWː=|./1:FV5lD.EBY|ӱxqHf'!eq[XvYXhNJM݀jMeKN}cyCf~Rt4C1UXE/&:B쟔b1U* ؘ0p3Li}jZttl]*)ƦM1T,WhBwED#Y,XGbXGgRpb极2=}2.722%q O}Jm]r]G*[*O9a[T"^>e30% M9@Vac<ӧz~".#=_n_$k:6^?0dŢIU"]yXذ c#kMd)[3Erd}+l*eϵsË-^Sm~@*P J*."DjN=׎8m4cPw {in[ȧCIʌxn8.۽}M܄RjⳅqbwB_y3>Ц/ӳFs )O3F= g2 н !pm Rr<Y]n{ct:zc0'B247%B3WȽahz.݄϶|ۓPYL*x$ͭRVf>3IԹe媪)QK_Y6%H%]I#-aqj>c7-"Bv#|_YnOD_9'" \oϯFI?9?ҕkvxrJ8UVBkwGVu@_xEMuM0*U=/7GM?ِV?ץQpNy/{ۨƹ;نZșG@c !<$#,<@X tNb3}⪁Kqj }ԭK}CMYwahBf" BҶ`@nZT`]zɞs'>JKM!3yf|&@f3PXoqB"s6r\ǎBlǡ.I9J]R i3nݼ>nDjҲxNS/$j [#2@C͙1҃kzW >J_]݁ >\M~i047 Ĉņm6 _bc (i_6|p_Wbt3[9# Cf~t`;>_'q6] éVH(p;*{᭫N7`g9kv֢n+:;xj-Н<>Yœ y㡥܀)G>$&U"dn͙]۪~إAN:hc{K bkՄk fva/?bɂ8$x!(öJ.lC| Lpǥ Dk3ԉN%&z=@ ^4ό>ב2>Vim'xQeG]uAaѝ2WxUjZ֑z,%9 2 !:ټ/)zwͬyQŖVï;Pҫ4VEv. %%IT$.܄&kMV>{`PVr=#]7BmyJƚS%f/윪h-*?xP`Rs1bfUH8 P4i55Ez 9ʀ5)zy -t3-Ɍo1(k>6L>xC:jJa=<ڂ {X\ҝ FZN sO:8]9@_?S;"$< b #+˨6c7:VۇmF4߽deNZm'}Cg#Mx"F8 m760I7Ɠ;ǥR7m XEWPTfs UIòIrNda_! BNVz ^MO K ""b&z#!R/ȋ,ԫpN|SW {$9k48Qc׬Һ& *Mo"F58H}p+khNSDZ uy  DURqxRI0C w%׭6ޝ~[>u.fZt+XDfפ2CJͻS s]| 8~sr=yEBaE UȢq }Ǩ.ԋJC]ML -PjßXgmJq ?mZgDFMxԭzRKTō[i!+%vR;*FM,LEfPNeEȡ6:} 3ee6K;b !=' I2`*ӊ:^)WfE!^LWe Af *ӓ7Ӽxɣ^O g4X̔>Bt7.= &#4@[*g(!Wt] QG6sCKK6׭A `q-[9@L #`Y ^ mvTTGՊ/*&۶ѲFem[zlO8~4*20(sg.}SV:<~fb""SduZI*nF 4zH*i lNO&ub~#~h7%`9Ƚ^.m@ У'o8FJƃ Fh2HeG^nB;)3<'3"I9̔Bzc;^Uy{sra),qE+q HWXx-> edA_ nk GnbwAcsƾX޷5J>2LTdn4ʱVSd 0KNa˷M[&T(WFZYvg R),Q1PlFJ&Ϲ_ΘbH0&iBJGDUDCt2; {Irޥ2t55բ.$C_yA-O@#<)jI4$Llfʨ$. IFI\VdQC)b45RYdNqO.|+kM׏6ɯ;6vxu@ Ac.B?֓)@PK9w&5Hp.UVn} gɨE(rBd껂X̀RLBL> 4k;=DK@ =Cԣ*ɍsyUJLzMaB&V50 `;_60j:!==M+XbMqKpBz\hC15l"YDC*`3%0Kvq}rЌjW ^Vt}O˳YwŜ{ݶ&ŀghU(:\M_󼮀}G Gzsq`4oaH1,7a1)wV<\"xQ#{< FS3Q-+b3)QQ=E떐͏ez!;B@p;~-w.5(İS|)n`+5_yùcÙa)̷ZP~ AbYyqʦ4 )XF4Y?f7G̬FyUg%7rG޵@;I$k>>*vx)?v"9sL]-V3?%Մ|Mf {.RCRGhu#3;,:`Bhqӻ7*)*)t<&c=ҷZv'g~ܓbŠDxlcS UsQ#묏ޖh7nC{%Q@F '2CȾԀw="T m,/sx;9sD5W-E$[Fױu% MJ~1yjc$ O fi*\Xxhڲ]tn([/+q tp ÉgDjYUy6S$%wTP#b׏g:n$hW㮟Fi&1BfwxZd>?'&JT~{?΍54*.w~H=`p9Qeƌ1H=` F8@JxT|xI,10ԁvZ:&o\Kpc^jfԬR/R)wicB( ǹ HLu:5dƜ11Dy13 QvQR{v:w?z:-Nf̯}˞MV (a`ᴞOs"2򭧊 /=sB8G猴;TGQ]07bb@\haH6<.v6\{[Zl!UxCQ}"۸ N=$Pv n@Dx#B0̹gXMqtIa^ c`+j<>c)F*[Cf;*퀍 ŝAaؖȟK^m]Q<zM=rhM*K3IѯZ%;"6S-1ORqb9MtA`K6q`[drncJ 2A@՟- 0EzG̟ɿ 0ZQW|[T&?sk2=P~ 3q1I#r{f`\mq^y;iswJztIj)o>4'ΪHHGC1`=PM2, s1OI0, ɵ.jDKr8g9ytT-yI}+83IoUW n2+Q5=uF{xܔn,vN÷u Zɿ4h&f}gPk$Z.J՜5$%/&,S SdO (Z03/yB6Π3%XNzM$hz2t,ZpNdh3ë-> $A9Ycĝ(uP.W&ud H~y RC bVA[Q-ΡC e_:/d3a+Kqz?(O %L=ȖHXT`l=)lǖfCW]%_vTV! k0J^2\qC%0 sVDpu Ǭ js5) p#N$l j=&֬Jœ%Yg*sk"38cPqR6y-XK8=/L@1j1(Z*;TCH,ȑ74VN}Cly[*Ѭ}mL*IШp[9ԑqo, r-5jx\\2xv1{LdrCXvG2Ҩ|I#pKO&i;!ʟt,qfx,z?j\LHso 6wb%~čY'g?j~rND&1'۸G)K?.18?Fsxe`];jլIq]jS;4KH7yFϊkYx:8D4*D`&P*qh;l!aL/#;cIGuey[q_69\Dd9gI9Af "L3у|Xdʑa{݌Ւ-Q J/aI2q1Ux`>Btfl Џ)`PL.}*,bKf'[TIH h K0t$씡@`֘A߽Q'sp ! OW*V/sjk|(-gu~N.v\=B:Qq-ǂ||UaW` :HcKC'X%T%.!Y<%x=@p(h.K8o8=H^&)_2pZħG_q?ɚ'>|.˜pgS pCfBr&XxHq]h MI C8QKENY>>;<Ћ;?kx HybkaJO"k~(7X˷1&Wgj34=Gzns)2S\f󙂒ldÖ~>϶?J3 u]cSwc/JX%D!Y"NgJG%o@ ѝ+O8 &[+{`[٥0᤿5(ҡbCPgxlg*9WȻܢ 3&]#j) EcFVճa}J b+΋/M3EE o" nbb SV[7VF=a8{I6ݙs81#33 1+s.M4nf%dzA" 9ٽR緜:P9P`oz׷@kڝ3)Z{s5/3 `BqG*(DOYxJXUen. ^­ЭO|Ȗe` 2pe|WᩁN0t&Fq4Ϫmp {m{= ߌ&Mƿ]?:jD Q Poa}V_l$g $xsȯOL>9#u0?Uz\ΈrJGN( ZoXC+VSw3V ܢIʼJàU-w>@uQCY#7nG#5zY*ۍfXBaB|0zk&o mBnńz>GG4Gc 1yZ4Ecra᳕!UH_gM=BCb5/r1Gԁ[1eO/uЇ`]|(8K.G07yfVpah9I5VʑK dGa9Bq}sʙyP笫! ɓC+cIz75"YɃԦ=keêshc)4[\z4ƨe +q,b@9x@8XfJ3R2¥QLH1ECWE~аͷ]heY8W;x6uh96܊Ӡ*R&UVޏ֦Y*h50L2 qQVcT$g45 T҆oSho_O8Шد >њ_qaDj3! |z.j%}fWf-jg;EX-Y%88ciB b2h۬%^k8^LT/%:?0[J?)[ |&?f'?Q_ֽ&:սŊ8{J3in}ꫜCT~x8jRꡣwh 63~% T!\!fL'ʃV)?RHR8T{_:jeȡK"|>÷?2.|4)J}gh:TVB*vw?½G 2Q~G2JBRҐ>Y7<bɔc6 8E h -y*3-"_?'vy$t F̵T0TaZEn[/kgIo&S꣸1FEqkՑ\<S' Z8.XQ psVqN4:8C<"LtG$gbB GbM8_.Cꡏ-y+=ZcWAZ.lI_g1HCZzN {hjZ#2U;a-z<+G+t>6rd6X^<# `UAWɪ.|uqɖB`AEmQ acd7mkM3tԚI =+: by!؄Y*K'O%1HΦ0"uG#4>$o%] D{kq V'eb̔q²5w=@NKy:g %p}ۭCR@ֳoĪn;bΠ~X}pҘ",Oә)zwG9(Vi~'4z yFQfyo]5dU|zb[@)Hp-?攂{Cꞩkihy;e>N1Hd8ח?l7lcAdDmx+q:D/}Uo>8yŻgUh>Pp 9&6r2t)\eF\bEbեγJfIB͔A64\]j<ݳD(ˈŅQV-U\TpbgPߋ(1&Oi BϾ* 23^)f6O`E@aL`AyVEx NLu9İ ߍ `eU-V4Ey5MB5֖+әS]íڏxMLSctEY섑NN22ie\` H!8ƴt#:^9]]IQwy^zBBEr^."'G! Ta\"E+.`e"E?}S=g@-^%Cڇw:ψm􀉨 4$ҫߓ:R<8VvȉSIroY׳ÄtٯvKVZ幬\pKV]/|pf#p|CWȟ:[{]( Ns X..><&l'Ŧ%o 9U b.B]v]NSsQ2#\o"4V* {XTL໕?kOk7/AspWZ;Y2 ɯe"ZkRR g,rgF"@z:+xŊHTOߨGE;GPGCal]DsiO|D8WVizav2'|wZLɪ_mu8pgX6Q.1q~ckv^5gB˓][H$T񬢻jg*?,ITWkbI(15Ѥ!I/SG77$g `HTy6,$™YTHutxĹ|8/Hz˻gBV楿p0$|u#;ZX45 B4~6&7/! 8ѽSk$Gh U5"Ǵ.ٝ[49G\S8\-ɽh1ZH#G!.? 5 R>lR:9 !~tI, \t7"zPe$EY, mc1IMoX!(r~k,t,?֭э-xXR<,0هn[=Z\!6=9U j(hw ' 6aSY'+-hBpSd 56\"U(  ~w@!ueHO3a-Po9|pnM owz P'3ؕLN8HK]ŋk9q8ZKPDZ!:e' Z栂ss iPu|_T3#Qm̾=n8,gTdq̘YJ]g ;`̪202DIȠ +@,=ybheLlz8H#= 9Sˣܻ_hU^á>ÈVPu7Sw[ݛ):!C6DBϞ7T"0!AW>CG5^EK.(VLK&eszcs4pplbT--tW ԟ.*H']H R@-A=es%-O5Qgߣ3A;M}Vt?l )[=|mQ\8R;T0p64Ȗ|A+@k]g1RrtzY?Y0jPQE`E@8&H/4*z)L /}%,"V 7 +LV( !i>ĐTiOJ{*4 NyNΣKVRB-XE rhtڀu4<^%qW\!lK`#3Q@^?M`u kCJ,Gm". ދWX.ۖ4b9^1pJΜx%o:reKnckv6ۆ88qODCNP>"^u^+0eb0#0T AdJ\,^D\˻r>RI,T9`oftҥR]lޥ*|FpꦰeP|nc 6DjRS;('ٺޙfw|?8N Pu4B:=G`2C&~m2XvkaP|<-nBE*I&O#86@15nW9ƱD#>q:,lo#H@4 bҖˇ-%Qܸs`ZԢ7YPKOxQqej7OMB+E0daS+@?QxzM[Yf~F]̇+ƗQ2MОh*ȡ@p6s+)8&N 1Ӥ?1/z&B_?7c+2/";aJb?o'Ԁ : ÕPt ;ZixRZzѐ_tɒvnJg.XlLo`uHT:!l۶غ-@ Ѫ <ϼ"]x:Y@A3^2J`@rn{0M&鍞Yu]@xͥq8 Lc;y_TIǖ 4#8! i^zّK2y> L7[/z:AU\ ]^O)^G2ܓaã+; tx}l1\!i1K<Ox 82E}tn6=6mi.ڭ4=^8<Jh$<@O+J$8r3Y"RorKCOww4{T^s@ I:j1-ftgeEjiWgՌю2qe!2-ݶǤ)FI5ׄf[aPDX9C CztDpT;F9u-+a;eWGH/^%#)魊*(qhQg'uέ>7L%X 5vANO&2 CoS@L/D%?4I6qچIn4X-\ǝ-0֯}8c)`W!+%8JE=F=i[!a6)gc<\ 쓩&IGUcFO)j0oa+b$A;Oj7CMQ딋jZ!v#{jdU<+`S}=%I#"3 -dWH:"|ذZ` P4DZù5'2S}Tl7rc"܍-]H&S,U>[ţ 2CDO?KAf[ǚ2_;`zVbp;. (Ҳ&ԼJO%$HT=f_zpF`vb<*伤O!sH]j.pL+"q\Zb&oql"z B׶jԾTc\,ĒU,(E *raN "&s2Q1GsBo)v(:otWuYךjKɓtX&'41FiI0 Th[<{`%E\PDzܴ#8 !^z8bˌjXe$!:/J'*YbKzK)"ʎ%.U?,9fkUf*L ~qzG"\IM31 «ͅX0Q@O0`-v~txH` b<`y!1E$Ҏ:UN6B։\KYIZ $+9'8~@;f<gM2,[ə9.A>ElxbTf&)spD6 ġhųѪj@,ǘD|-O#q<]c'lERO,.<@X4_ .Q,e)S4uÚG ń!"4cYD"dcX*Gh(ӸP-Pf1QxVn}"Xovvl07t2ˌL.eԔQIx2o2&3g`ti;KxEN)~D@;~J7H …&.n<;4:iU<ݚo0|8~prmMrdb\j?[|E_? `H`Z?gEJᜧS%3*2>^!6^,θZrE76!y1ur_9byG62&#BuRiT9 ѽQ_wZ>PkC9&9~]<#+Wel\1冥=H~ȡ8˥F>ȩ%J 1W['W2=YV?ex *a.]-wH|0tyi霠aq.FXե׆VJ&' WUl^.eq=8>^gVŁbhNN6OCF)hfE\f}LzbۤˊjL >s ;br=aҝcH 'Jz+0\ K>Sm`5~D[eBNe G˷A,` Jd8'72%[ae%lgaS͝Li$~6ވ)ДmiOF+ŨBPyS Fڰ|X^<ҥ2kM>;[nN{H4&ђԛ".\Ȥ&DMb\-~Fj?xEt2錘؈toCGj?M1yI]MNoW20(fPMU)y?fY5Ji~$F8B~! A#}Kf SDz3g`| >=eoB3߃3[UVD=2`ㄲ!U؜teZ$p az D; $LJJ]Ahr % yo_l#[vIۭRgiͤZe & s:#X2:|TX $̕IlWc O?t5 IqB%$87Nb>ZjOD~DӊSL+wc 1u-* I:TÒ6i7N#PG7JuzUZGጴ!Yc'CYU0- hް]^ 72ڙ݈{R60u$K6mޞC$I8?EQKGq 9F}C2햹fZ:qȺA'N/5 BS *6Ś8&>n>S)޶"R Z|ea]@;ZȦ'>#K3$ks^_[>4zaF 3r֔Nj-Ml;vc]Sb!OWן 2L6; aOwj$|&a-غX؇HwdlZ"35qvf>3B'UnYspo=ġ]&yK\0yO E-ȕ{1~]`mUq=6x;ltY qF&NmLeyR0o~goD@]L "-ݥɊ>aΗ4m'!*I4J[Up& +}TzBvhKQ\ǚRhUqM1Hx Lz(@} ?cIɻBǁ[3d$ '48=pj;q[U~@8;e9Aad6,ʬ")'~@.纠/ ըfF'&6{ cst1 4VfVUm}KU3a ] TVcS5 װ+ S,lFӱ%C|[Y'eq) TPlF KZE'2eJX1G ||s\!C zW8 f\֥)ݎ]/TgZRAР+̅}v5YM# -ЬQ~?Y~G} /AMqX`UҚM|7ԝ#2|Fj O>*CQ> ɷ<=$nJ3*XQT 1:TVPote [2S fsr?cdڢa1O=+(Ad?RAFdce GoZ[(ۙyt-'Ir?NzA''-UOAsՃ zPSF%[S/8qnO҅qJщnvW硪&mQ#tYόC!V$1J@D߬HR鯴0h,+*ט?,P߬,Xw7^rRctmk'yDpFvz߇e0ʋAhEH FȲ*lw*cYm6T-+ZE;p^|^V)襀Rٙ #~<&Bb ZhhꉼXnhju#?}luUZ3q 1X|tUG_/&f+ S`׻2H> ź4_ Y儴䦌m|ƹo&F -@ Pd2kC$aff/J Qh|@5KE*P%<3/fF;!vGQ}tUcC)ɭ3n%sƏ"v:؊o2in%uD<4y>hEھ^%;},^5Ϣ9W]n{=2`*}y}eVXVF_x<-Ǎ4|V|5*˷qň.fY:b)>-֪Q܏ QrQ-r?e?Rآ@fܛyXb:vq1(u,8* X64ck2 %Ҕ&b05;ɛ8"鹁~>d"`ث:zMuA'v~?'MP`* Q;~h?%xZDYװ/y3}L -RY"j߾~ի2/@d;ttC4\.{shVN 쎣!%mEo}oM][o^!c!ѐ"$9SK~!ԯ:TآV_h|P1!x,!&wE+,!]~CK]dPfVN>PwHx6< {;8&{="{=" lϔv{מ9_[/@ybƼrFmp%aޚorx0# m{_,A֬Qq7\LY1`M`;\Žcm~XrgLy֛B²' )ʬ5 }ܹ'ps Bz2Ҹ_L^J"H<@uNG{bxdTfYVhK+͛GA`-#fw%bK )%K bbvF떧)Ο7wsLt{ph9+Mt0PNt4ێ/|x_Gd%]!W2 M$?1YiE?ejRh:1βg8^ڝ)DAUEbVm®H^PSჍP7|?-. q{f&*18. pTK0e=+\?m5 FlxIfSOU]q4"&ͻ(PROZNw(U2#e.RP D[~OKbHgU!ry_v j6\|VnM?!⺜7V"LQ6's3־2>N:O.A a0j:Ua)lYa:>e(m&א_r0p+{,v=Ɣg ө >ݙdC߹+URB|ܔ/"Œ"=W&y. A(sԏ0)a*@Ꮿ}jt1hrf'ט^MEyBם: =nX/c{P~K>rTI6Q0ʋ.<9t_^|ƶޯ6hfa僿-Olqs}x0]5 Ű6բH>3:@GگL)ڮd|;"SE4q@~4"pvC O(k nk`âog رwzV(0؝EeE4)jz(hc ֊ÚT}$uiiVAsSv1mSWޫIԼW/2M0S-:> =芈=H<5/dڷ&,uT0!zGGK75ᖆ`~2*Fo6 ȀPs )9A~ClqGQM\Rk;T?ft~ l߬낮,Y:ә2ڠcHgNMK]JXw>*,)k[!Ez$6[!}y/&ocpJ=# Dʸp2V_$#AT .fgZI>nS?5\)| hi18<1g:%sHJ%-ؼ*~gc:N8ekULKrh^|tQ.5> kc&œtHQDO'N~48WOeڸZIUԽ;ǍT(n`M_C.۵h܇BI.u9$,,c>g  zZHP2MKDAb@"6 t0k4` E45,Zp YKPjD Zm>!7Ƀ!=>:40@mE"-S-c+mwg'E JuPZt`/ -R ||Z=s;OKO'YuJsljNa;e^f6ޱ lW$ qnbNzn"n;m''WK O<xg")}QdC P ,0a6JEp`SFsGE2 Cΐ.}sM_!UxTq /۵V&ۥ+;pЗ@-(LVM.ED4$5G "鶥t.76 d؁!!]N&d:MZu)#;@,Ok˗$jYF$k isۃ^3!D UUŦkl t>eE'81ԑw]Q#G|Dޅp&! D8|HW* =E04y}E{ $AKُH[}LI8 R/!hx8QN(y|ADkd k;DmO@<\(CVmu,PUz5@9 =?]5-qЌ:d;/ٓTنbrWHT|ԚU  =ng5dOφ:l7=u"{dv}<@B9UdVeS卂mpVt0%Gwfp++bs _ڪb!|&zHmP2ik665>1? XF9{E(2C"#dL! ]ۏo6 )ZTCCLfVl܊ǩ"/KwܕZ"J*X뀠<\z 7i 7,Rdpl %fZS{9_X!e\ߔSNv%'y~2wrQ*IEe5!pROU;cP%,\UM]ɲ@LZcz;r^<Y+Ļ|OVMRb~O;U3cp&XRz8jӣsNM@+f}p[P$W 0&SwX.mW{8ejR }0wY4˒_8!΀ޑsFFbgz/Fyvz뫋vVV1y\q?xc:ICl??4i ATO{;qW3#G]^ǬL?| ^,>&} Ј_kՎg6Vz;Gx;k*=g\z?fR|d>{-X}^kGN !f\)=9 ?k)nx@jS9NBC7M'XT3o >4Sgj]lꋲ>TaSüT[VI`_\13UZt:@ zc5̺9QCrD7*z[ &q(7 -4u6BanW b@U08fBx[bYk7JϱVgXV _cYKr7җV㾕N7b &@;Ϙ^cVڍ8Q78ZsXMmҸ$7"Mx8Y؀8.4{e)OG!zxf8jBBΉ3+Qd&b.MF;x="ɓpԩc<;°]Mxw1)hȯa=CJ;F)s`rY^oFkRIEN9 TxKVcgoS2gIv=w Mi'Y8Gf4`5;p:'N.k9}lݫS [4\s)G&x ʌ6bOu`lRxR.>k6>hп?wid!c 7~x7Dꄕ+&}@ vYJ_."{oʶev~P*o@ʶk?ĥWT*vp{*3H6+TLO"]ہw(/ԡlI—׹y? r/]N VثאÄ.R`HXPqPчmѹpU[8G0r6 Alir./Ԇqm󪕚ʞ5*GWf_|yf3:|F1F/ęV]HH]52ʮJ6z"n#(GT{ar8b:`cPU<{\Уnj\+-GcEl} Ui L[:'۔4_.{Tx+%wXRo % oe8Y]xh'TiA1'bm%ի$ZL b@]9%+R4wѷyG?Tnj40SsXtyb4kQ>&G36R,`ۜmyz0egLF콏:l^NMZ "0%~2vobX^WBDks#hd^];+l_"${#[׭mjh|QB0[E4 K W] ;jg8rAƓ9kuW&7 Z.Cz jW]8b7Ӡf]Ł Mؖ_E"磼3ip85X Iutu"S"bD_'>~rLJR-@XwۄB^ |җ>Åɬ$-"y2{iIm/!3͈^Sڡ;j|ҾOSע5a%Z9[`iGz} guk9^G%NL#e۵9DX .n@!%4Y*iIn݊EJ m˶'=SAM.vzXNv%vJBn[s}1 Y=gA]D+|YjU%N3kZ+H)F>+?j0Kfm9H2"Fhj=]EC^[=T*5ftBV qc o(շ*YܜT=˪TMxJec|<谽&* 9lx@!Fr +>6r}7÷kci]x43۝T!(L1$>=V<_}'ʯAT N&ߦ0nN0qX'R0~CE呅xpUm쯵vvjQO2_6"L*P?>igGi6dú%ra7d-80}U%:~Ͱ #>{C΂by⪂=Xt9VT_)Ŏ z6UN0gmToVSŻn[xkj+B  g *Ń/@[ +z,vUef|jBeSX2JSÍ0R*46|uƚxs-f:{yh¦]j6&ř]6{\fB(՞ڙ;m;A#zd 𘌥q?E]慛6N^dA?++RyC/mSs 9)g1adK5۱  #*8Z882qD]M=z|C@qbpuפRVCRszdH&-?s-Չ}efLIW){`Ln^=g.qdc+W(Q=d FAFep(5n#jt|SAZ. Fy#?cpDrp_!Fy}U LJ ӣaW"ʪqeu1rxxna 3j[$ %rn??9kUc܋ 8 B?կ6u%T: e7{oQHnbk6Ԍy{lY=)Xs(R*:eMic%ijLihpXZ[izȰ}Ya9ͻ|-M\P[Tߣ")}$ND !G38@{fx+#gaid f'#]Dk $Ӏ!btSGL ;q:ǽV0X1y9o/sF~!J߫m-+'hbL;R&T!-k;[p5~ɋJE!Pq0%k;x|I8&dqǦPQ32uID!$(诉fe&5-D7@:WqWAXxo)_r&6x/6pn ,#'J Nxjxmt|j&<:ˉ:$A(<,^0n @#}4{,&KARY'yVUGb]ʨnJ|wGT~RXL*ӆbz2xIetlb@SoH=z UkЀZ}>"a6βq/ގ? @!qg4-]q z\9H05nIG9u J}Uvք>Y@ uaP5;+FM\1ESXVUNȽU4X7ätGV8:Gۜtt̄XlOoz}z͙ b ̘P^3[i2w~][~%tKUz==?ө `~r)j \ePjbPZVz %g@# 㙲uarڔ|YK.Jˆz_r\X&, ˅eB1cOjiy4+5(9W )#eԔͿyjihpOs$*>+-tasK2.ؖ%7G$$ ]kZǖ ]]pӼ؜ Z )(lpYpTp&lƜ$iPm3дW ? - Fmi޲vOUt2"J}T#oA!:\ij׹x5e>0*+P)}HNau݇bNe}h%44(3Tc^U)NPЁ17sf՘)1,k0ҽkj޶*<ξޫgqemKEJ&0z\T9hؚaZ q}`Dd#/lOi%hA1owEN\5g%ZRR20*`2Bz(YyBϿݵf.KiC'=ݸhaP۞P}@]+T#լ+/a-v4e_&աb{Xc<44`V>J?txUզyOն&FX/]Mۘv1, kFi†:"]_&^,EbDz B1AkhS]jVR^~h S%oZ7[q%Ze.Rb3"-@~E ^d OfŸzHK$R}q9lKڰ6Ӊ_́B 슽bDǻKʤ cN¹c1Doݶ4tꕽ4!H+STy/r#$M D-N^YZ T4;Tqa>5wr:!Pӓ# ʟP-G|4ۈ}R;aBMMшoj-.Ok!<zN`zȝMH=kmyd㙄+ rmKRdM;|N|t[LXuID-i+e6Enؓ *$\noeyRZR ٶN,r* -8QC~hFצM#ˇ3|Nf3kz--J{9ePcVD[̯}OZt͛UQNGEc`Uu:1q)0P۸Wh K XslAc6Мu`:4ys_LܠfϨdr~-<ǔf';d:6%g_ (N0)1,RѹZa$W%\DìḺJh}͎,!wUȠLsqf/ZnBqQ Vϫ7dX^W10xS `#<=Nuu~KNpNJ7H@Z=N Y $T߻sDVVY5tA`Y篻wʹbiIۨ=9b̮IY@{#:ypƝ՛ &bb{1Z {q^J&0C+Qb}R#v ? ĉıGT㲆NwCKwwiaK0$Bb`3XM1@ҷeq(Jo'IțN+zrNijAomaRa'=(3&{b<ҿ# :G?Z. @srA/$:r(PG9|Tr3 }]%:fd X.` X&` 0.`WEzBwk%u]>Wuw'/o$ipħ D&>]L9l>R|S`mC\0|p[Q&r;iEDJxaʏ¯LXsܯ?&z,Kyq^t}L`J֋7T_PPke_u!\a}k,4 6Pň@f,ٶŦo`}<}Yz!V.@Y4rzWkֆ…OW鍊J!y:-^F~d50c|ەctuT3dIBG cHB^/W'\9+g 7wnZԉ0 $Y f%УMx0i^zc?u1IľsޛcyR9ָ4MDqt6^`ŃfM<=Aر{1>u_&$yq]lɲ/m˩Z?lVu{AB gZF9@^vGsE-<G=-+svRK{#Y>fu[qvTNuuҿ]< ௎DO!/p\2lpnimvGvVЛP!iP}4Ojg Tԉe,q~f4(猖4ٺiHHo3L,C8C. 6K3T WXKYYf>?R AX*xT34agy`PREXbcop+űz>-iOiSA8tbqQ6Q) 1};`G]%2:Ky?@#7H: o ;tuIM _6vڴaբ E9 :RpxѡJY AK-woof*|;7iH/&{lC?A70]~ᚵUjjZnr֕ 2Dj&@/xCB@srٲ`}`VqwaKOoF껊Z$oBV81K$2lրCa#RLYm AMF?S(y.%z{2~BKt/jcA.cUFa*<'HS*;M푶hĶS6=Ԉ9Kw.,ƂE@ ۼ4o6Ǟ\?1iH2ivU8RQ/ FfD+=v` frр:ŐVsBEVj#wiN?1?Ƨy7?qnN &[qn >.gGp hH:8#^yc$[ߡRh}f#[PYD[ mCI0%Ц8~X߫)lZm|1Qzw'0mcFh#4D;`0[nbuAÓA80pKuomuq8Xjw"@Ӿ6֖I;!@uDh8}%XEupfhʵ\\ Z LPڿl/m*EnӰ|w*R;EM.(' (.&}L06 6 , <'Y.$:;C-]xR4bz$lԱbSUSwiͣO.bMF:A4UgCyΪZ>q3]( Qe)Gȭpnzsc6c(ژLYe&68@Wj)%Kmy7`&/#%:"ؒU²}fɭHò(W6z 7e4EK~o{x@2QqzXvdc'aX=N:D3 CG>R'&1ID `HڮQlfck@NRIՊY/rj.1l,m yfjĞ g_<0Vm[u^dPUsTs%RFCf?6߂ q]_*cgJyi1;b]__Q9_poX^|h1 /65"Sҧiw|ѶFcˆ{H"dچ 3Tzy |Ag[+3X>_&: +5Κ] _sRȈ)ȢSb§Oir?j->/`J#Y6=4#*lቷ mkM|'lc]ozQ~yX@}߬^gB0[/"X>o6OO򰬿=c6oi~#\J &NSD~>6ɩ& d]IpuoR5#lә C [ U Jm*փr'.>D>*}!9y }/'cV#iO<S+r*/7;UŦ4a ZGwuqTDMЯTwPLB52?:WM> x [FlaggOF!6R1eqfq>srsIs&CbnUKp{Nm05!%1|rsOkF >=w,)8joXd%`uRG кUB IO1Oۖc-SqtaMz=c\Bw56^ +e @%9'[?åеB34CŇįT bove?fCtX%ߵ'ec_ ȤkXv *ƃG ft΂ ԏ>S6>D˘ngL(R=aiV/5v;,D-Wn/+%;Mr=o1%sԧ7zOm7b* sؠuuj  T  (*6}uIG@cNy< L Crm#o"PG[_7e*jSUy# @q;Qp؉Gp".&?+ ևʙHXpf]{i4D3#1mߓ*?&Z(e81m7%"YE_bv\acp[H((H:m']FyHHPNԃ1YK3rzoYay g"(M'j[_1/[B5o$(R' jڞ %L?rmFܞSQX]Y>7 ~a)2VzUK:rF^JpC7֣;hU?3p7֨́ ΊӚ7Sn~N딵.ko7pֆM!tJ67$w6,{ mXC/|YV\]` \[KX{se-lZOz̩/&~>?s Z'#~tMVML܂7Fc>q-W˞Ε R")~tڇjYa0_!t`)5Jnwc@>pY@axTaC00ƐlSVn~C.34n6K +A3ɴN 6 F9w͏d*;`H'x>MzGOKGwnSkYa]#PCK_#]7`ׅ?x^FT?%ق~5@Tz$de}&#P>̳u$CS? fQFFw7`CA}ͻeu8{i'*QhHxNjJLMLimhZ46Dv(=mۑv hƬ&MYm$1oN{Wճ5#;W( C  y# mcaR1T8,g=.U$ETSUMNKc8$ؤv7Jt] 9o/̮ly6y>KU4~zsHJى48^bO!2%o&y&+jKc_Jq={\as5*zOr=}YiO a&peɫ`ǵpqHd*4rkr ǺjrFZ{FݡJmg;E ;fbYCI zKX2m7Y!%aW̰Eq8W*p pWhc#< 1 %)xKi]3~w\,^8_s&[hSgw b{֞6_LA3/,iKkcQC4-*_Lw@PKl~o܌ zi9NT̒ ^6XœTuRE[1-pN0V;~PXG!"|CĚ+|*1!"$39ygĻt C)6遟:3崄\~݂)bwJIfF5lE"s$@}?ƅ Er'nx5Ztb/\v}\Z0 Q񍗽v7 4 ?tSp7#"^Z4tU_uDw3gC* |bp_ z_e&YĞd:θʮұ* D5iJ/LJg=PF->i 5Ksf,tUd?3j=d+n\I΃+\+;@s 6?+Q}eajSh08߃}읟8u`;sC)fIzP=|I4Ku2<%x&|18uz-7.:5C@CϤ[p'ARcOF%9%Fv/!v)v eOam˦"{2ms:l+؛VmQFO rLWb#<2۱F4ECQEʖ#ELL8\KSш`ރQ,Dc[ؕ=P)FsNg-"G9m ֒$A01{>;y`m9ScA0ό2BOg%i#oYH Gs;~d 5;ԋbeHg=2ߝΣ+dq^s:GT VUF4ױ#!yyXJ;R@Xw1t“;{Q' OC e}Tjb{6l#.y զuM='z g&OWqF r!nDJ;ܛ`#qo<75gstj o]M^]*NJcu=OXZfN${И!?? F2]j~x38od'>, Yf\f0 Pӡ 9wEucb\؄=cOX}e= dT:\F~&u/k_3NP$镡AyuN˵LT?:y(CmOi|/˸seίwQ9mt鿻Ub'9/ zV 2;Fx8{oIda` ͖.k1#> +r`:`IknD~J?:.ӄTTh[+}җLaY,Z=#cxOS֍Xpw %nddc=۰ȯ"a}>"'*DQ7_)bpYb[Hjm,*sijhXE|][L9iFz*C̞˰i#C`(oXdx&D膑|*FyDe+zgU;y[4 qcO %z)ѻo_۱;J2UX{lHkza> tchi\Ɏ1LV @+#*O-/fDEm,5IHӓadŸ́K. v=+(l~,'uq5dJX>`g2[E_ذGŜY,\Hr.aN rpfv@5?.:jM=NVIf)K焎ugrAN: 79YJΎ._AR]i*\ ޓ<"}c#!XMv$d٘&5RE뫯y&\EЈ;Q֎ UYF4V wps}wJҟ/fr+*%{Qg0[k_C8LJ̌UEF.. :&:_`WSlv^1}2eUHQ,3"ŷ_ DɯrڸJ'!0y%dͷ4Rk3bm(/QZ!Hv[I<=iĸK,P(b _re$I/T*Άҽ}9N%savT`dtQ@o 7O ᅩ4xdr} ./}\O+J0X.vȑ˄v.VtcG6b_W^@7ؙ (o?7;yFR>~1ƻ.}?˚Bji`מz{=?zVt8V{%/\&?|\ Wm$l>EKDȏm_ao0.fvg-i}&TfVgKk6:m 3K /hޛ+aa奪lO;I#'Bi[U3j`a]xHDaM6_ 50K{y)2zS.39dz0P^Gxb#q of  C-/ pjhO`4Hvy8 &Se?L%N ͢ fjiEyx p1B$oQ:W ܝ?t@~]<8̀ky}NNYջs7yb-٤33]*B% ב+U]DY rOE7?:eR-=P3#:̍m!D{|_O㵹mOb|YܳpzO#⻳a{yJt:a-1鳝(ר,<} t䇰"X!& m1wŞƗ[=%8TuΨ<Jd#d7]"hXfܠtoAkTJm mE4[Wx*Hl1Z4 mRx٣L3؁t横 P⑹ZQ''rq޹xXIߕECUEo#_#TV'1V "-YJtn6[r(:}nbG=1EVQ$ GDF! u~;9Îx!p`7pQTfubo&]z[;i. S RXeėr&rdJXjV欎XMwXJ"oJh~FBTTEpw|r4}`aЭsAtTftnCЕpAjNsz9HO]qnyUMnVX\W$!( 8OfEgvmc QPE:^zoЖ3HZ ?<Ꮫ]yHUw2b!A 3>O8Pǘ ,`}:d`>e} :()f2R!iy-,W,̝XI3"ưh3WgpdݹQ}կ_!I\f [$cFa]*/e27H ;a'֌y5o\ڦOfnlti(q?[-Lg8`|~4/O^w݊z$q/(;K^R 4ʨP\/(Fz2ƨ L!xE̘fl͚G^rZև֕QWƀʲϦ,z֧  7p\U ws*uCp#(eFpZJaG@ecٷN!g 5d]+ •#Ֆ,$Նݞqm"Vd)0-PjMN9'H w@pypj `*R9[BNBcWZһ VN!Ҕl$p56(P+E qq3_c`\|iA%21\ɏ)c1aO eT]\Ou!Kfg"8 l:X44h# X4BtWy:dB1 H6GUԶm$dWHd DsN>ծʽYNd͗):ZqGБ!WK~tswlNqKj`F:-()!Uo*\ҙ b=*[m5wƚeWdY,C|I&)cvh! ӭ.".#_ӗZܩWժl&nkBan³wޡ ߔ..2Ynӱ?M#"=%Uڼ'NF SrD1MeAP/Cg9Xl{-}[H n!X 6ʵAIn` K!C6%f Z%\0>XruZ྄)&vkiݷ{Y7 6rz7M 0/HkV?f*_jtoce+њaMvAo;jXiaZ;a[霈,D$WpYΉ I܁kI46ؖ ;}*=ڬw ]PryYO|V>)&KmPaPU'HTf.Ws~7i#өmaAa C+6YN6Up 7\NL]@psw+حu\QZK90P oOx=Mꖂ,Q8!a4aVbG)ZQy 0Y \DZ}T`>  Z0}P*RELϏ5hM}C!T)1 pYv49D]I %/3t!"Hʠ (JHbae% <`-jˣBGXP! Q0sBP4'$ $Nؐ>7Sq4jz!:pvrvLSmf)Y6q~N=}=!x_/,WLy.; 6yky!2e&%FP_SE< .^3P|1P\1EE4&b'l{)x"@o|N.IujU^! 'SBWS5ĐD~4N_:~%k`H?|v~Z}G @Y곃so Mh@既4|2WmZV K <.%qof3X %z6^acШH9@m__r@ 7 ,Gn:Zi``B#u/վp@x ?'$.*&FK(8Od͎Af =MKo`8 gl}*(Wx@GI '. smkfg߆;ֆ]l\^ e|pHm~#¤!pS@h. =6̺OԨ%cdHڈ\$j ʷyNG^D*xVn Ɉ9 1j,β: Brm[OB|QoFCpt ȵb'p,nS8NqltJY?ZMl"bǞgski; \u9Y{IGV! :C$dx'tzY՞)UqC3 8`̀%O^|w0Yhit)"9+8JZ!PKjIgB5VPژWX,toE}8&ga(am>*kߟE/H" +%8{k@Pͽ;m*Au#'_d>oG'S0xX?:Ǵ/jOL>fp:o "/5JbX[lM}^h9} 1qosF &$ U SEgn:S; o/,x?s`UަNg?)Q؍9;U6A;n'=b4lhCxQPT׼ Hؘ;$Hn[(!!jȭaD޴&A Dy_!*/"?aÿՆ^j$0nM;gn/qAkYl1Sl7p з#UF'E=Ui$Dn$25$6w|jZ:[2&f/u{Z\FX~Jv"z#fP j U\l[ל@'m"o`Tڭr_>>}kf%vj^5(aSy!IxM=xSIJG%OS>.;@*MJ{h UZ6X8@/,/L5&qͻr"IY M7𖖥Q\Cx̤DHrje&k`Z؂|22%o> Ԁۢw^XQ`W=fƘJ̠/ @~A*ѝ` R_x("$wc[s@zWTCmV:V[:GX-uKJx kfY]&%f~I'9؊4,WC:k>{[]8CێfCUf'̽9Kf uxR,wYɌg͆da.0.9 x*g[]% &5/X^.٭?I俄ǭAxK챑y[wKC[FBU/к1bQ\O]vԓ's]0_jD3}gܐ.jP;XFS'Į~r:[]+o @U W:#r\rU  83Z__NjK?DWM[~o5J=\T(?k:8du\H-<V~jŴhxFOnrk~< Wv^S -yLpx ք3(hmHMJd% G;R7ș#'@);Z{M\ HcM=I D]'Y+6ܵ#,3%4k6_:vsSm{K;ݖ_{ۄj8&ǭHmB>6Fd 7[,&k*KC:Gsb3ydִuenuo9kd@}v^?]Ԗ+Jl $p\n1p@( %ì z5C@>~1!& ]w†-]v:@ 0=D`.ۑ@P3YB- 0U(rcAazʆz!jw:/aot)onC= saaXD[G 9V75Ѭ濄dژNi-d.=nk &螥Ŝ=_wQe 87"pmJ" ^g9Kg^C}{@+Hk 1"~ɠ ^ONu&@в(.D]uyƧeGuo@{enI3SfkX[A-_SzƍAi" oU9mx|@3MR4ҏ: =3!%{oRjKB"\ 6 [8Ph>rnE.\hc'sq^Cq3DoiͷGL w^:$2p08&H@mel9l6(2K61s39IljV =gRG}}nw];s}8ϻS'"в£1rs3 ֆO3G1@I8$Y7#&2/N&`=r4ũ,(}6{@>' Q@qa|{G0grˠwm%~.7oՄ#z^dC Y\HS3g z 3pPTfJ A$RU ZD)8D5ϝzVh^%Tshɧú -VPPvh;du=lY2"*fbsmku[.ѥ^GWE_zD8UF*R6XHXN:O=!)YbvIT6,MM$:0Q\g[R?%IV҅kyjNѲfn}ۄ:@ }S+,2+KؖڛQ<=a'8%8dG[^8aDԆkFɢQv&eGb LYN8B|^+VLBi6lA,61/.T7 }>k\tk [fL"K\]tT"=߻tK|v f˭/kl9T+\lՂ.9kŽjS o% /CaJ͐К0x'x&?|I`f[]Ю3 Lsfdv FT'Τ1佅vX%'}Elc|sE:έq:%N҅Ƭr󈘄 zrcdWE;(k7$bو{QUOu'nw)lz)DLw*S8@?ϫ[_lSt8beڑg0O;o[ƕKRFISU{P !uL==LEi;yJé xUr`wYE2+;+vMoOpt$𐸍3 GwIRG+5nK!= ':yTD61ɤSCXAiA7h~ꛧZh)s!g:8pʡ9_)UCrmm`r"0Vb88SE\~Nc&50=!saF SAT򠦪`u!CٽU!$o1ܩRz_wz7 w.t]T"΍4kB'9ņşx]}VXlgP析/WIcm@+¸[.?&~"Zݛ&սIka-єJ]`(Q5S"?*'d Yu1QE;,QhCN9j2ћ& Ǚ̺Lˮ<7X3aE1ϚM2&$6<+rD9o7h2 'z#o$=F!0׷'[㈞=t_vν X|FHS;dpO+ K_ s@&<8KA1ڀ? ŗI+j4cv{mmLSJZa(7.Іsq05KoDDPģ إmFTh0oY)߭:l_@DF{VC`"hȫ+R3_͐:Yg3ʒ=_])  $YW` |P2z#B&`8d6>%< )n|Y}ZEV Ylށ 2:RV7| L15 i h kwf+)9螁݁a[=9>ʃ@Mt2~zH hzD!-::^  f0$8u 54~p:}ͽV5qiGJaގ_#+s/Z TT{':GqO44A/̌S T:IMrU# .{/F;ŗi8A$1p56nzv&9χ6YX{B|!KmX [/ݰXi'1`3￰W=3r#_@<櫯c3V= B;"+0PLZU)B/&zucENqۯ# љ)xA<=^D^ѮEih/mSb ;Q* ?h/mu_}4gvD 2ދ p|M1O{͆rKAD▢.8_n#~3By!_Id1hӔ/F#BNi_B1}R`o`TBypU'HlLҏe>*DiAIgj=?Wۆ2ajSn u+s.`'RCA DhzAȫI:\2ʼn AEV >>=va6x]Q7P o+ NCvΧ:ˎ@.Gn‚D֏*mPLUꓼo֫+琉"zkeJźshP &Ȏ!l7[4 D`;c4HS.Vl_@Ѝ~*X^\_̃je[ä{T(/:2=wylֳq ;(Yy_ױUIHVCӗrz{lKB,EP*mV`ʙe))_=c(q&:֖Tȕ(Я%IF#`)A))W-;Ntx֋UՒjj>lN6 Bt:>I%l?"o"-88}T0=8~NNR)= =%~N=J~N=~N=3~NTRPNw$)M#!3j>il`bP6t# kί/6jᤈ 0BAEF;z#cjxqwD a9+y15-!|2=hw8B+ki|4n*}+/'B $:yجAgXp\ড,oWXOxũ0=@¿ڣ=:k0<7zHPXj3["L|tˤGNQx\.ߏ񗚽>=ŏ:~͏J"%&{؉ OqS[|uKzLxNTR*T>#7!K~?cq]ܥۂMpsnI>>mM6g'~=7~&ʉ3W "u.KX~^K"K\^J!X>v´^hRZq9hjr/%0L뫌j㹪x~\{ReU|U>Ċ,8l{~wq*yJHP98iN#o$qpo`FAC,#ʶy# HG+%=+)͆54Qc&-L{woIPi̥9#!k)~8t4{* 7(wnhTM0;. caZ!}3[-n+5?dZ-Haf;8;CW<B|3(}e(}謱<={fal^\P_/Y1Z %*̈>+iRz^rNda 2X{Nhf"=3ZT@Fq8Pm|&Kh$<_uυKh x!^ۛ*߀h ?FIpp[;ͼX(q"35^G>b4^q)&jky6$gt[׷jӯQDM Ӌ .'iR˝MOrK/ᄑ;cvYf0a&yRj 5/鱳>K#Kym]=+kX:4c,@oCg?ŕŀmlʉHF/xc_{ N-[qCȆ!VHSE[j{uUǛ0À,fK)+k9A0RcT]r땷~]PӒ8>mF9xRrGt+pJOߚay-u|ۨor~ ɏ;W0Ʒ. ?"͎u*<2DcHh,z~.ؓ'ol<;4{J>t(,`qaӋ,i3]eK*+5}҇R"y9gA$G< ~B4vkh˰;"lqoo(I2ť 5֟|#;NJ5(hkh-=|/) ǧ. qqrT Bo5Uȩ0s활Q51Gg)ERM ^4tӋ2DoU pxJ؀$`Z]~#9kQ]bЂdAq@{Y9&^sM7J^GEł22; c&ъNv*e 2QK =P\zP K0~rh_ıDWZJ M6n{R+y}Yd %ct_~XIдF-JL,/p6id0j֓=48(9rVe{d"\`ob<,o6( ^yӘ=E#hq8QԜH᝞.x^QUcLnZ}є.F^tqAESWL5ȄWpŝeS/utrm_ueE)}Gq<:E,γb"tܰ\: Fc#Kw@E{5'hA3LeN#TQZxއIRЈ>t?r$rZ-3{ΗRJg^v_|p!^J PQl4"ѧm5d JM>5 I)䂧i󩋲x&g.~*NJ] K0FGVH761B[! z21x'¤(e[%QFSqA4Rb_55 +q h/M,x&K|걬y$>M}1(0?;6lj&̵ܲOd0l哐'.o4X=>sgP֌I3EvMC#V+rmiɖ[$a12p%>0wA"n'=C rdZky]gmo)^{}f&{ !*%u%N>y VIO0O{bσ@x^R(qSf+j2F!|!σ,Q7J{|7šMQ*x_׌\})H96͞5%!7K+UA(~:+t%͐3&׬3oxYo.xs{WkŔb h;j-yomjLy7!(С&~֥DƯ!y܂|ȿrUINDm =]U92G%[v0p<@coP %⃡UtOuwpdT۠^f'@̿I׽=􆿉*̅m0϶bcpu*' 5 _/:l9lΓStKZէm;2*9(/Gz/th9Ȯ dSke(bS!$K BԨZ7Mf%rƠ\oV"OK/ϭG9>Wo"p~{|-eL&+"MhgW}]bbˋĄ{ǻ#owog_#;ۢlR}8QV4'Ev.V14V/kWokXo~7Q7jhbqmho#d#*U6݌[6c(+3k 0e?HWFknIqZTgR֥៶V.arm6"sH<="'םOvqS'#V|ɖ. uL6iOzToXK6 W9x}mSw'3=e( PJR)R/[#= @V?}s|~[Y7r`H3D"d~`{ |ּv|#ga+t/zXB1W*k’68Tʋ:+Yj8Yx[ROX>㻲bޯ9?Fp{+??0Gڦ+mз /㎦m ރ Vu EWZQ#H VVt.$w#c;iը=KU8L:-k 1Dit9q\4U?8 д{,N~f(25I,[e2UڷYQtx7zm@ (/JȨ%X4;7A)(=0eID<8-~1ecgB[=+ݓܖPL>Mi"8QW2DDto)S )/G-ak WA.$uh$RN I3mmq>ɍ.Qu-# 뤮IY9ee@5X&lp\:gF-`Z Lyig⍒\cDŽ}MvJjeׇ+jRw)yO6vCAҦg2sa3 ܄`ؗi3biCkqÏ}qW7(v5crFA}ŞN !S?$eV>(cqLb?GԮ  ŧ/YD/Z[o6~_ yK,ЗqI6Cjlّ%rI$EIb_2;i,%+LP/lsM-htShQ?iJmXZ 9)vW< 䞚CBÙb=q_\H{Ց`q Hpʤ:]DRtġH¦Ҭ QCz!f]A EmŢGWh5Ԩ"$2$~9) R^Sre:-GRS s`O5+0Ve'i oGh:]%MIo,!I3p`Qv(6Uu@vagD)\v"׾1o%Io5˽P1WsBc$NxcŕPC1p+>2y|1 r&~s!$?Ek5bopK )ַ*7y,<"0$8DU#N~I@6#Gm=ʊ4 "_AE/rNkō@5{)8DJ\ń+cMʹ!XE*y ]̥- ʕ@m rN =-b2N4^ #lfFb7Ju5r=gpMIZVp𾇼' Hm!C2E9ˢ4+rSDsڧSAb$'6 wlq}<^̭q EfLYL}Ƃ9z?KP`ߧؿ\6},H_ !YŽ"i)@9*mg(;dhJ"QfagY757|eV[4AEQiZ^q~t騞jz vui񮩻E lnV F@CUHO$__u0p}wUqOY?9 TnoE"3R[׈O[LZe5{Hw=?1zfw^+_A”-0ӭ4V9$xl.#je[pǗz&U9oǧ[:l:Swn8 M&Gq EߌSg؃ O k1Sn,Ҷc;ns';[:oڴ!sL¿o@ o xdp Z[5m: jʰ xzom^yo߹OGdgzw1G}s#-6Wr!7-H='Tj4FO|@<9xLh~$+W0[†^>hˏbxR>)}.E̞tHz{|D]Es:oVqn Dw}ge =iO`p7(ԼvJ&?B5}*Afeƾ$$ AԩyqRRRĽ=q }GX\GOiw-OzOagwԁQeU~*2y}v$?+F^ozzkyOA5m}A]9itTe@Ȓ{ FwW?qAuȢϠvVf]_ J{]0 /ѭφ{n}u*`eso/]ӷ]~Ou%n&ӻg˺"%|?~.+ yzn!N'.mk_KC}j6j(yr詊4kڪoFOcR QSF??yOytZzSO~to)2|JP=i ',)ΊӿO Xߞ˗/EV^O~/_|/$ͽ//U dziܭ򮹤"4e }~)>"oOMC=a OWEwmD"P5TPz>n!+'<"m($Sמ |f!}n{oc^1qf v7QO֯Z8'L :;des_X |(U_{ʨ A5/Rk&zﻮ*/x5^=jVY;L+{aˏF >|Ӭ_5a|ro|v -aw~s?3V Gګ:xAc~_WW-?`޾W7wr/xOy8_,ŏe '.,YqXr\T^SY#$+{Bj/ߞh`Jh, aY[Z<}pGd#u}_0"/<E_ς3ȗ+ƣYFa=n8j/o o^aGC#FwO}5d~}<|@<';|;i?_!\`ksgI!kt>L_W ?ٟSZ?EiQڧߣo {o{"u/ P(7]2_4o1?WzEF?O 6x=za5>$rmA~|% _I\ .0ܫIo,򟛮f^ .{FW{ˋ5;P|gq^< 'PEU]"D_/qrBࡠ¿>+K8}/}pŠɦ;z`S\{}ſ=X},EwQ<OaIr7]hʻ֣`IߞW[//ywGcO&]_륬OO }m{7WkVkUVmяQ+ΔGWcǏǗUEPcya4ʪoqִݗ*~d}S nō1ͺ^<6݈;7'mz|5`0WaL˧7a?$[`Ի='E|fm:6/rm dmYO1`䑑C` X N>Nƞ 4QT>/j=$CX #kWN9}yv?UGto=w?˓WZ >y:ߦIr<G߆xFq?iЏ'_An9X`]?syoQǁs[!ᝤb"> 9_|{ ɯeɀ/6wk{뚿p⾱QèGݹY٭Q^79*}k&S|/98ӯY~ZH[m`/[!;^Wu?zT! eJ^~8,#/˃F~oܯWW*i|_,~iBq_1ä<|[?8g:Gz_t_ӿ=$@%^v~Zo?_{XK"c'p&|gC7d}#:|%^ClaV~A`ޏ%mf_?aީ~vm#3ܟ&E~PGyOwwb;ol׺ԧKJHگOZ}ofg~{ן+~q_·<~XBݗoߔӐ,p?}>?Tz֊~[cg,b# P:u<)O쇝sݹc_o沫ylϾ)z \}(oفݛ#v NV]VN7bq0c(ѲGy#4:٭@.*vA6fأfA;uIJU8Nn#4=R k0(>vL/0ӀQkٙgz 5gMUws׈*,2 &^rY\03H%2M2dqLf6Za7 !7Ԥ#6Y2y:[S)Оٴ9x%msy5z7Hs΂ :CDt`] y!qyԯ;E$l5`ӑ^KN[VHNj[۔Tzf[pL85B8ayz^kJHmcB`(ܴ`۠p,\ ɜ8ڑ&J }#eX⎡K_+0|3r yk\*] mߪL7}ܵ6ě-6Nے`r: e}//a 9sgn&˂`̵IlTMwԻ$LU- 3(<PX4r 3Ɋu3פ&&ѡ#xDcEe[@ ʘM]ECX!kvW{ʒkvOd,8Νu˸y2u>)AKS:(uvӵP)Dwf͸}^ f >SC+ٍ*0ȯ‚/%<+qk'{3UoH9;vu[ETJTUÚobllW8r$'jNiKXBR;IjNInq̋>M'td?٣2fܨם.K5äRNGq?L%i!SΘm@;|e'~m&wBn %S!mF(DbƕN#gpH޸ͽ`(Apep<_qٗ|jIz-As vvxlh1Կoʧ]ȋ\ތh{٫^^:<جKO/@º3:0@+_q@r@@@ kE E % % e q9-u@up{@ - <_}HHH5]= ={[> L$Æg>ρ}iy p__YYZ_@22bhlSـܷ=k<>.}~_ ȻOwIELB_:vRÁ@@@@S@̯OUݳ{hZvrbH<qt d0xyfo{>Y67t2e BRdjvU7o 4ڕWjl5a]Hg;XXzXIU/P<@rr)UMAt"Fn@9L&)"#oTcS(6ͦ^Y.gP_Z~^H!{a %P gڹ hIT6Hak@ P4ڋ׃.Mmڒ;1g{_sGD,wcgӣEqt{ڋƒ\47 N)VkKz Zv^[iۀtUj+$C='1Vף1d{ܶm)_Q@K^!,G}@כD cXcNf7 p<T(_{Q߰ k,DŽ IF8Fs;8۲<)t;kX+Xþ61Ō|'`1n8rqe"fo{@GO( 9nVi6 a+Q'B aY|Hɖ b㪎YA@Bb< dl5Wz(U6\K\juɭ_#ɞwA"ZߐSyT8U5>לPhM!PvU8Gͷ~`ϋ5ܐ`Dtڞ1,<7/빏Aj Z:2s)mPN9 ;ޖYiu]x&~ڑC3&eb<_SlSIqߤ^ɻchԪRږS4;6Р%Ph ktD#:l<3$ǰ9\[L#l9 {'WoZ:ٛkCyL ocvyxAIK^^+O c\Tn&IcrgZ8pæ>fβI0$f8?k$jcun9y6dUaY `n.U7qQŲ!43T9z |,lB0qX& 8aR),Irq * +Obm1ejq'S4–3:"vse[).s*lEy)iӫ3(nXk?3LMeM/-en8-V'CtcmY)De! {yxڮ-6MD{ 竏-F,*^ ZM}[ppgi3hZG;1͜% oP`ؓ>3Vt2L^ۦ3(q8l;N;8mҊBm وAf3W&NMFE/7& U]]L8y wQ?xa"7sp&j%MV(-gΡCuM;iՎ#(!B7)O:Zx CJUma"M+q׌(K XvU2km=F\Hj'@IHXvoLH.'5mmLʔFjFlP3O@0TD<Ɖެ+?Be[#wv3Nq>Q(¯H)ka "LdgQ [FNHcsiC 2e2BJ):X9[6 קkqۉN nDOn`l(l4tJISsvѪ/>,"f ́u>V&qᎫ^6oG6["6 ;AGè!#^`9Q>fRLXyi`U*4}EL d, >oL63qfeR^+ ABb nc-D؃?(+3"LwBE鈰3!1* D#uNv @ضmsb[m;m۶mcLli}wg}׳ŤdB;|蔘Э8,igmJqi>#3 X`EH(N%G駟e*_MH4qBղ?Th|5B}IѴ`mIUJkh:sUU^x:=K^%u\g-dn۾"!6 c勭Y&y5FQ]۬@h7A&F.~^![= Stǖ.ꤹIbu&2t*/_Es>kYi&kyiP: 8ʗT~wefd6{Gh?{ABy5mr C{m7vP(w m$>} gB ?.ڣ5$p%BS `ﮄjabY"?w#9`廊?DS s'iěHؚq05*#{06㥰٥ӲΜLxH|N(n~/$xmi$/b>XǻJt)Us?O|i~WN7$< ~<ڂHiEc i'n).[?8y66ODcdDIzb V!X+v}L_6c3WiL>rmi<\-tW­;Ezd M-OR5l5 R|p%{%h  ֽ1*(`|ZѫK cׂ u(ӇhY*Qrus}`$ .L%#f>?FOe57S\ӴWApln ]ƈ]#siOájٲ- v⬘g:B)>ӤӉ-Ē wtVJgO#e;"IU;7>W˅xu͔ڜ1cXJ~1+3 xcPޏ2ుU-- B \BنYP},$|fDǩ<o E?ViҕRb<%mM%)64z5\95?Ia~dI@K%Z@kfN Qh{ 4@"~e-hps-IhǏK - uuN 3P9=_@(zK+@X8Zg)?R-Z9Kcԕor!qFDXT%UTU.3zVL0 Ğ T934!i7w C >*͍J.7XҖTZ mg ivp&f{vƩ{)쑛Fv{nɽr@̡wUl/aU'c9p,I75UHr< ͬq,yҔpcSuz^ͪX^<\CLtsyQw%2A?SOJ_z)gę<OhLvQQW.F~M"Yu0'F*CPeѭ`#ϋl:uX=]czb/᜷:#(@\;Fh2c @$C-v"-\3S DX$AsjGsv|Ϻ8Ci7Gd1ZanˍvfF9h?ҧ lYtҧ4 UgH1AV7\VN a5⯌&5=꧅W8̇Ml:R)';mf ;ە-if~XM-"Ye\j<ùd*jxu&4gpʧc-t+]gүks0ŪW4*] ?qz;͓dֳH!1n4{E%>I[>.+l)j;AſDY,t<'1OtG=?Q>͑wYT3yA% ?O^wx7Kn n` wuYYNľqQ3tX!-E7v,gz(H4 es6sQìȉ[phB"tyV9Ø9?C|azVWQ7ɜBɾTs [mƳ:5]s\'-cp$G)PRƺ;̌+lm.xz*M`lIN*T+oT4pI weP s-JKGݦ肻, _} vgMGrD#ASŘ4u_>Aq:1E^J@;VDCd:#B4 6.0Ew&%!wռi$6g1* <$S5YGjBf cx#D<-Y0|ɰ$U}voX݉]$b='Y_ymF`eִ9<5,x>-]Jmg#U mͼVp>˨} 9am5^ٽ]И5ꞣOADVʂxpا;b,;@e>JF2*R"d90$|.BBn,7emG!їy&Aa~ boE>P@ni!bm>,n8{cЊ iCZ8NOD}t&l/A 1hޠV.'w7m*lѨm:v դioaB#;)ȎnDfd;Իp?Q@wA]-\|#IU$ꝕ vcrB758'a$'!|r߭.՗XZj2å8 v)o7 e7SR~xd<~ϳTN ~č8x7.6 :6 zKa-{6NGE Y[6a!j+ȭ >vnA{$`NE.Y!/CA+ס$IYV!i< GlQZI{?~4>L.:PT(\"Om u0Ͻ>'al1hYjgFْ?0MVթLCQĄNm:0W^?2m*^ާA󌁮ccMLi3:r&)?&S泃UA]nܶ|\/N!JgΕy8UhŹN] :ؼ݃q!mM ]A ƖH?~ '|U[KK:HZBOWB =Nm:(09A@+I켦ES(<8cǍ6ʉGy] 楁tR%ȃsv XNHw=Q|ukiֲEͮnxܻ* ?|RFGMɌPkF*[ڧN]4|fS~/۞Zęi88q:uvncLO,l#\ihc9{$ ߕNofۉ^;Aw߃r^7d0ۧK@N0#[hk" {rYlVr+G+,_j+RLP<ߛۤJ~RHURPQ_\s^s"`mՐZ P|8۟Q)"G~3[.𡅚3# )fq[Ĕci5zFqs-;aO1w<#8 V Zx9vcYo6L}6m-eYnb+ՇTBY 4ʕۛ_U(.059!3W-ޏ}I/b wR􀤗KHע|'iIvȥ* )ouUr*OȎgsش.9qO+.K9v=s/ި"ׯLCz)Fެ|kyO@Nzfҵ1m rxM]8T3BEkfc[d3Ho>TR6'Ҕk,{x?U.dr+p юy ߊУ [,v4DŽK𸰻PZ>a;~mNmwlr:7s^)4%q>2'71EJqnv29BQe0D.`Om>9iu뭽-.[ Tϙnn\6Em,3ZYOeƼB?65<|X?ۺgp32$6h<%RJ,&Zkj@:%Dmގ!r A *y+lۄ^!6g)ez¿Pw_ S@aU7?HRl] zms?+V­[)z3Xes_W2&lk ͨ Z`}X"5:s_P5娹d=Gwa"ښ*|9O'˄cTpl^J )NB*w?²QLHmv|EHWaby~: |SzYWo6{y$[|@{8 qZlC\6Ωd?C~D?>Azu1'H0k/M_AA?kMݻm`V9[J,`Z❰caij[pIF1O=pACqc9"ԤlsUJ."-+sco`2Zs\IWyXGn.:\o>*J"srX)rL=Zi6B}#u,8bIb/HoG6}]B,fwU)y`Ɯr)br2E4ЀuP!{o$܀;>TZu(.OgMQ%jUO/!|m6`cxz>`;}2G(7W1Im499}>0Rq)CL6cOڳ|W+Q0% T}WKW)y}ϳhwmf;" mu1 s,=l \uLܹvid A)xЀ+G$,~T u޲tŗq5 6SU1 +mS8,H?kuf;?xJjf-sSlE',`nYY]LsY\c̋\!3ڇ\}V%W~q74zƒa9}]ʎ@gײqbլ8SQ'T~}* ڑ'%X3>N?;py0 AVWyOp}܋hnodzi]*wZ(% ܲ.!'uNjr3i qIpi4,< yGƬˑ"3xE>aT\JEi$5:Upt/1X01%WLc?1!FLȽ̺, cyJҋh=)=MVV#g bZ!c`=~ĎR5 za'wlJ%r5Q- xD%RU;r6zbLfE b0#?<˧qQ}Jw^kfv *p:_}⹉#Dz{2 O]WU6wFv J.5k͘` ņ~xì[ 餋$+FjYt;ݖRf,$7'v2; ()˥种ev+-]cDja35``pѰTM$a$[j1}P[oY#b!ׂy&QN1$ی"t^ hDZ~Ps>}vԬ04k輊ܖMw0J,xlzYxJt>AZiLH_Ȏ_0yDxuy|-|yf{Kb, {v{n{Q(VA0[?{Rw PiPEF_iy;1Ow=ܲ %KrG\7mH&/ jg~%^DD r]y]h7;`lmq,R0-wb}DgɁ>Q79+$'kQ&daGl]r 3HҕBY.h"F/##Gop,S%foB WW|[Ɖ~-1pJ3t\T,7+HkZAl6!ȱئE&/їxH  Z!2 Y%. /Cґ֟[O~x232W{b+w$ʾI`2y7V߮0?JωP_n=4$l~P+3)2XӚhvSy؛2-͕l$g?1(VFᤵz2R<%e-vI&+Z>zuZd)~ iT "DUhK/ިpDr8M;Vw$%u<.dU'ȫ5]Bc"V=0`YN3+I6<Іx=#C5S/n^R.B-xh#=9 aטsXV͆*LFg5 ťe1cP[Nwj7vҴLn&Ko*4xg5'T-VQzLڰ{7`W) Hw"fD\blGǰPgw]<8PO}^xI]lE ts9$UG*c[NTح<~!XM6uDx/XkÀq8ȸ!!a^vIB]rYNj!v1;lw}1Hin4rgfo&k{Bj![.rGCv[ꫛD#~IQʖ\=Bu^. /6옝*XobElKV$,hxf&[kZ{E\fE/|pn$ ,sȖۦèMhrc˔s, o͉?%'3!fG @S>?_ܰl<܇\Tg<gN>t:%w 0>_8y'Յ[1|q,8G:G8xwe(*gs2>dQ٢1#maW_-inm0DQwUVp*x4|_7,-lϡCiok%iGQjhլC#[=0TgSD 5[+jXDW #悡@4x ",Cok&A]kL$`TX帲@1`l\]q$a/_!toD1ߌ/+-AY7*+V ;|2w eX.U*jw;T:E2Q䢮Lz:tRi[rS\GMx޼يN )ݮ_[w| lE̙nPttHm1, xVc?hpcl޽OLH&|%~72 r:nb1Ҥ!H{~\%:%voқsdć;Nt(;t $5DR,_-4d|8,nhtsW5B)jnXPtxmM.zǬ:K. ]ݱنy5u!$4j{(]qIR1]WOPѦO(76@Sﮪ. &$ꉉGԭ㶜o+Ҍ-8ZQcq9V_b)$tWqVM{-RL3٥Wx6x*ս%]0 oT\ce$@vl~r-)؏.Т%{*Q+SG3{+ڹ^nnV`dޥu'wo<嬮2aKqx6x;T)pvJW-|gCV4`keh[7ꪉߕE{ZtO-˨$7?vC qu]':g3g[fyWfא)e|DmGrBWjX2 swn a֎ggXQDU)/~veXog1wu۠TIg\G\Fltv(b/|dTf`OKBLWm)קSaZ!+E!j/`" &`ua͈Hlٛ(r_߀zE]ɌKOaݰE \ms K 1,{[宅e}y4?붳˔VE]-@}:>ch`VRz2ݮ1|T5SDYԋ Xq ?lo5fS=S 3oYFRWf@y`=] n3( X (M4ӽ!]>޶]Ec;շ#o<I"pymEx׎WU_ \v(,+eʉrZz4w#nⱵ*<ԖR" dКn'a?B/ŖUz9= %|ɋ/hq8fh$ hc'ya= 8r%!{k&FaVqK},p1 sŜ(K@&5ȌHc8 d'/,M I߽]|ʥ.h5PdBkܞ1S &ϱS H rqUӣEϊPDw}<FI8XC\f6;ʄ̲?g'C.,ԇPbӉ8߉5]3XU(:[Z2Lr` =뀲"Vg@L69"-wCAs;n@ܞ1ۓ }\<q#(,@1p*C5NPe/,Ђl٭@jY!?U'b0 UGY@N!`6; DG6v $1QdRHqZI}[GdDvPmt%5č0- )AL3h4'o2ͿN ; ++:,"t޵niXqlrKo(,ncGu›&Zh:q}Ֆ'PDˤrȿ/C6fCDRI|^U~1^aA hQk=g`]%dGqS2:RIw\c)\B ;n=~-ĝ&ئ-<sjwu~فuPp܀lKPh!I PvDl9{#+uf'5wUk -sx^U܁b*uRU4f/'?6ޭ?~8ӿJU#J4 ɋD2MpZqjӀ?.w2U OzD)a'G\>?VŞgކTWYTZHK魦Mzgfvަ?0n;hYU לB +b!b՝Ϗ/X)YmhrO*hS \Gͻ` s͔}Rq7*d h;ߍ P-M!E߮F-D U*JVI~'SVB[cA˱§f7íz3Yċ.ٲns fQr(9 l3hӸDUVPniи^sGH-6MUGm7'VumMG  ʌ?@utItp-1;yw(| N$׎:BqC \c/4Dv3ٮAuZ>lRnYٖ>٭ PkgaS;G[ > $lrFz;LfOPIKfO :=]lNg3  ?K:Lvvh t3qj@/+d"&-[5GzV_5[rWr`F^Qt~-ýE:O|Mh~gu47d(}fogk(NRSܝ.Žw]\,.̜sd;y2bk,G 䥫؃8&ڮͰu,c۔/QX6Wk:Hqt7ȵ6UL572z\-L&:qH\Zw=ӣU: W2#BxϒV܍;h6|l)О`=92wijqmG[R.^d1jha@Мp~+Ԍ֫}S ;!`8.M꧀m.ܤMtNjf2ʢA*n{46mxtN|SqYAS`~jt[6#6f}C[1! @Lougж߹h)'HtuS*; uT< DgXI)J鳃iW_W|ytgu/+sRP~𖵰4~?!B!"aITFfbJQ0X/ĩqFV.YgJ;g ? }@yJu*)ϓE"FX[a Pgbqnva5u݊ ͎`2Kd&{au>+ G5ޗMUHlYߖC6,DV*DOYoM}Ph#: !4zL7k;qr܀O{ /L4:OR(]Imc`fSo]I23k,zZ8;*eo8$-6vC3,+Sl4LPEqkBHEqt4:#&X!p  ک/F[01~4, IG?&XhBO׿%OIp/cfPz9SdG#> &`zK?w*e=GV;7/y|=s6vB b~Tp`S3W hG]] վk|O|qw}p:ۯĄ ieZ\yFw1hʈaރZңx 6=~G̴)&t^/:$8{P%|Z d޵X)Bؚ%p.+6*w\*LCf 7߼Fk_j:5L]mc 3ӆZ}P$כr2ugX 1W1 +*rk{\;AFS[BgSOf;6[p JFӁ`f!ގJ֦-p;[ʧ?uAe`IkBl4V@UrmBEM0-sܟ=w]҉7eӋ;.*ǗzD/ iVt *j8 <?pLնIۅGV=҈4SN="_iݶY7sp?Q X/ssl>p[cW3M)U3q0bSՑ]BB!hca|q(,."BU~}fΘ,}_sEI\^]q|gI?o z]:WsVw[`z噑tVJFz#3/}/'Gw'D@yiP{9R·S<5. ύ#Pơ btqmxzÇ?fv AL( 1 ƕ:BÙ@.D-w ;~V>:E<1^q5#xirRv; /!&|cSP!A eFJHoy&Jq"a$b0m?lJZZ$[禖lYKr 1Z@US#`Q@.ju4|: *K0" @ɱ2]]]9u74wGn0%XS tVV}'l4Hv#(^E`ş5ilsZ*5s NSQ ې6-/WYs2S%}IO| -/΍UMQ;Zõ?Ճa[$ٗE Y.kEb4fB276lpH5*^Hq~o}h5:$D,IoL(߷|*˙~::`rD~*| ,'ߋ$&FsxO7]<9q+4bDD`9]F"@Lu4ћD+"/C$٥ݾȦ=sM:p3J#O pˆ7Ieɏ'yv.6N+l>(nFmv/X>Gk=\!E-Erm2w$Fҏ [VwZ( ([MݛT $ |~X~#ӟӟ/wF뻍i-n+6 x?^IBθJGx̴Bi /}X|iqH?-[ BO0 xv|~p(v(pqc2 ăgDzY$8;ܨ4FLp\|At^ 6{{E8N ʑE~ᡩBG3ܒ>s~\n7jѕ-E0m4,d%s Kr6Q cEzٮTREupڂ=Z͘8%Y2C]Oo- 7nln'E/{Ag.[pAd0&Ag:6-(v375[62x8RB T|hn!E9{0+vBS>-khd:ܞȹ.A t7l0'+u1&'KK!ͮH",]!D{i^afQ/&E BѮ9,qS4fKRu EAiݼ9ZϹ6y cݸh~L!g6Ov]lN{~UW^-N@ۛ_IogmE|e/CSA$3MtqU/ .=f+CC/v~Nmً[$6Ƞ:'Ba_ kF7o:e3}pxLpJ0 jg+6a&`rs3 ZoE9Eyܻg^O=<\ϖu\%c^nC@VO؏NW#ӭ95kB%e_H`:!SC+ @GbTtv 82if.E9-HAƺhkmwY Cw˛qc:dO tO67TcVw)ܳ*n" v__{⟌{<ke 2E_ _R$nA Ⱥ1ekLzy[{I;6i:th1F( G,|nz6Փx?7Mq PuswD-qԈx\D| Jcga TGpQ g@S',n71͡&8gqvCKn*TX,=O~6$6r0~0*G_S)>)~Npu\&`Ox>ul A1* -p3=C2r =.{ZAcNQ(uO #ȣ'ٳ? JF~]ـ1P2}a Rk*]ɷM|'Qn[?UZ3A4 'j#uŸ$nk!`G[ڙGJ@N(|Ŀ Ǝ/jfW ,M@ΜwBw/2I89i2&hkgp9X͛)Po/_R0 JW#$r+ϟp s6ȥm&, r)GILv ^]Tsu.ԳQ͌5|P%!>i/6$po?arz}˦6[{ag%hy|{$CX W9fGJ[{;RƲU3|+ѪrRTE h3eo64Iǡ}%>9I{׻D{ !MXُPG6x3aۉy{wۣu=Qj74{(u y濜\:bU2G" -xTF֡Y G8+1*8>QKqGL_p4 pȣN>ht)O|ABɇ 7{nl%=ns^x]2M IO0 WO$*b/ 进&Efon[^%~*"ݏfB/ ne;[rHv&qm߹<"Ӯ|id\Gr f(ᙅ:e?7ګEA) 桒uЗ3V-36٩F2M&CdGI& [xW~߲VJ?]|hk #p@::!抧ZrtP.Tx$$ Bpk&syR2*%h⦀&:|c po񒱦[y~:b%|8TAJ$wξ( p@߂Hܩa׮@@QF sJu4&c BCBg+3vjWiil쒷 RB @2Dέ5ֲjIP 7Ymwc x!F{IzIfyQ!%m_{ȍ6h]~(@:'3W$k*fwo~*)T%usW~*?>Կm݂\>oi$uVR]^}nij$Ʊ%-m\iMdӏC(;"`%l0:z#Vz.nB"^%qJԭ`/]U!8""J0xWLcUq7ުCMܽђ.m]4+d'd= (dcwxdlTvnolr|poS1;b4CT77kꯟߡ1kHO:JLpjfkbN0-7.Oj&н[ݣ 8)#BoSOoԁʑ ޛ-ͭAȇ!:컗o4A'xo)Pg>ż*Z~m8?]MPdB~|*0.ɰH@f\b|ț;nj}ei9=X lUטFCwϮ5nUyb?~3`ܭuɨCqʺzj.›룽QˉҠ+o-NBJ;o+=6nMc/Gki,l_|q4{1Vkjqz L//BeoU;JRü G'#HƇ@M~ӚF#38{Þ}C 8(%U]1 51A"܌b8~[ɭ#%) _# o>)UWzk<<7!w}*ϊrp{ <%Jp[M{gV+g3 PY&g@fgV[+db?#0J_tw,?v+jX-@ũ'ؗ2ՈTpccß_|D H=r hQr&f8lѩ.uK2's 6~궊BsU$!4|<&`<5ѕPQ*<ފ 5|IYqT5\l,Ajd|˶vDdgG !;M[H|ߺy")nI12לX(L}S|926od_mhW#0F{ӡjvCh^o]PcS"vER1s*G*8zzVsP!оW70d{zh^- NICȱ9¦ʒ6Եd'Ώԃ tj!ߒ%6D3 ;:%-9 O75;zl Ϡx4#Du#KZ,>5T%+͘E?3N/~DAb>PW=Ϧ6 [:Nov% }~@u0KWPfk30MD*(8cu&z!!`{. ~Z.z}FO5*UZIʘglS01{;xI/,O,tBžV]P =r@,2ij"bFo,k+񩏩䎑ʝ[ȊlJO1)zi0Xb6ǡX-xh׎X c7)-P[Xq,[։^?qc.wv~?'r Z? [61Ք-Z?7[>:%ʎ=( b5/ 6m,mw6$j.7| b)@h!#ZƳiɫEB<ߧZx}| EK*W&K;wXيmb9cp s,8ъ^'7or%ȯ \An3uj1zn:a9Xzxb:í=ڗT9lǟ?Ǩ\ u^F\cEϵ]k9{mxKAh^$nF*mCk?>=smq<wEΰ~n)>>uz-W-6+ bq/HnMLRӲE#ǬK%iR7BIuFT9奡l .҄4s e{,yC_s@jhB3'߼78ݥaڕ64';*s<?u5@^cWMSySb4do[oęA ?jhnb3"8(w?"Sg$]m&9@ Q5-4(?ǖpy F vor,aH䦛>9au\ \m{lS{ |]`w DExsu/ v`*Hf? b]>@7y aS=64e/O^IH_wfu]K*~aY- .:aJ@]^_5iFCJZ_ LiL#Y5R#dziH8$ (fB^ag~]Fq點2 xN޿[ WjB X-^⾗ނ̼C1-brZM@nYkRۋMؒ$<‰Bj]8<nuX@1-fyQzt`H&G~8L \Vvs:7W=qsbkE@Il*j—9O!pu,ʤg͜ܕ^m[KMvjylH'jF␆]!4QqNWO2XMm=N:\3SoJJ8` c?f֌]/J31VfnG8|R/x͑<cWzc˻2%X IfԒ]F}=iK×>}JLRiaqmsm3^E(pU Yd' S)5y?T7Fj\Y赻~}3V4 o&}aCP 8S3^#ো?ҵPĂJS9;'@L/Ťwz'Yycꮱ > `v߻~1=7Ybpۖ%Rvmhr&9)a? f0b^9[NU_3MrEan>1# E|U?R It'k.V#6Tͨke ϳp6f^_haȵנxZ6:Xn'c*ʜ +xyN4PV# ʰ*.5iN )Vɹ\kuBA/F5abmcpŤI})z8M6D hA᪈ *5AFuu , J+59WqD$IgWi6g.?LN~2?,%mAGѥW\[W k/m3sΏgɅZo]Zr픚 5, nwz 5d#/4(ĢR}Z2x;Ff^9hVaFTݗcIHܰ<b-ϑS8*E'R!UpiR)p#,y q\G"KjpB72j$R01`w,,|<<C~*#w8Zwc3%V!`@h;+KP1ҵ|A|N#/OSY=x.+W%w7~y[Ep/Debdz _8OC}oX>YnM^֭2:i_W|X5,Ѥi&u!D۸y!6k8kRFM0y %V4 -̮R3=TSmҨu+nA< kSR5w;cZ}K?[ݕD,ԹO'MF ZB]"/ A>껳Gl"Sle+mRKBO[p06qy >U<{x( LJ_#8 c} FIW}k>s}$'V\]kb8xvw ʏ>#!y.g`߈\}"/R;h}j!6bDTǰ2v0gHؓZȬEgGvfDl1:#ZܨhzX;mz 5R#oG'Q8ύ/d} 8\TJ^2c%pSGjч%Ѝ،Pwf[6W 뵰:d1׋ GSUʨ8'j+bSz TT?lFg𡂙-F<=H=5MܻYm7[NPHZ^q[㸕Fua脕g X1;sa"~ =,U}d Qn.4>!Ob`}q{`\K?[`ZJڮw7d.X?|@Tᬽ`"D0)F.CeƒAVLԆ#ٛ~~WOX>[4خ"vkWe,rTѼf+v7c{:bBu ݱuVV: X& X)zy4ѫ~w٦uz5R5:\t.8_g"-Aً Y"2b>R}uƑjek{տe`4g^Z2K_)D#S1m⏱||sĘ80կ t+Iyi«B#1>TՊ$_omY\}'/W@GCxo9{ilGPv TDg{?ܶ6ķ ){t[R_PVo`Zqط~r[#ր6U\?H_z4۹H'H M i9{|QK5V(P lkk3 þH sH$\6n7稬J$EbK3T6σJTR3>N)P%͙*P XhDk$Ѐu1jS0څUzq)_O/2)8M;,Es >\ZԻCjB\+[^˜AᏡ{wg->ӟؚ8V:(0 eHof5CIWI@Ď6pؚ¾n!Ƚy0-hnS+m8"^}2 hZ:_ebTǃbP܈+eXpS/u}CTg-ǿʋJ fSN]1lDQ洘޽@_ٲ ӄIN`KcbkN.,夿)?5sO@p !aEAFҕɛ|(-${ WY1 Ygf?!tm/gA$!QkV ȫL9k#MZ*HQZpko[DmLq围ړ;eZ%O)q0oNSah}AJmrBu{\Vs=yhքUt/A4J>/ݥxcsJ5*Ld i!~­hV$C}e+ i$cN/Wأ/R#]Dԫ$hw> 5U9U/(yYY{@ۅM)ujԘ^{":#!IG\}<!b{ vR7u ?݌5]Yo Ob5Z,ǼN}L|V!MY[m/|4MH'rD:"=q>iN_|!+moR*Bxs{z9J(}?]s*RN72duUm jS$[p+'m@>'~#ݒCCn҇" ,pW5Z0D=0C [2'E4kFZs-u1 kcIs9#p6~mȋ]~?d&K~ `{zƏL"X\nnSbmN AU: e<8RNO~ ۔$4<{M e,^IRs`sPg,[&X?~^Лvi63]xrjY- O:L'F(l UJQE9LfXræA)Wli?' f+wy&nBVwngqFlvPvgo9AuプC2_AM0?i#i &ޕy8c Iso{< ~S/5US06D?bhzچ5sIa.Ԉ.Jߗi!۶FdZd}ѷ|֨"EK/]up:ńE,TQIX28P[dBv*}E.P%wɴe_CgbKWLӑv82f%}>NX?\s|s^K8~^ϳɷ:x 8>BPnXfLZV@Oe I;[{'k&F=7f7.#.+|L[>I1f KhIlwߏ0){|7QK4.f6xd<7,_֒IԸpiX Oz36"_Kp^E/D;eAO@{E2OhB7132BwF+H(A=1%{eC!_w?m*R,ȩU|?ת?|'g(T"zP2"Xu@Ww&;n"`8z^+8{(Ͼoӝ4C_ gVfBNT5-P(X(6`U]{9lM!ʗ@jiR \/zu@Y^FS"m +‰ƳZ/`^d#{nDD9R}_pHhT%9CHGs]~_7DUYI>Omߠ,=C#*Hx"4'G4%!WDtޥ/R9? /u1Y03/0DԵݛa30&}9dfıvk@WZ%oa|4 /jKkOO꬏Fƪjj@4j$J5΁{)駧OqױRvLZ?RkUߦVjpq uQ5/c? ws h^8YW>sZ)3g\_+s?}OgxҜwa!7z~|H[}YBt.$Jٯ~2@l,&ڗjG"v)ƣwIvABE W.A栾)V3;W3!y V7SԾu0?ܝ뼶3MAi/ɳjW_Mfle) >}&f4jT3Mo`Sւ$'b`!&rקN7fkM΄\/O錐us32WO?D)+J"#GTiqcyݧAUF\D˰DM'7?;10Kc۶m۶=gl۶m۶m&&IuשsUS}Ey΂u  BK6FfE}GE CXt-Y{w{>)7}b>Mk]JA:lr#0Cbc Dn00ãqv-.®fǨ76ƽ[ Z:RɅD6ͪ/G;`OrH2;cC"zxJ*m%"Լ;SҰpVom`uamҿ1;`+i-fZm@Q@5$VhM,NtzզN`ޭ`ԡ\HR7!^Fwk+(01ؑXfi(328 < Ns.K $mE- ʹ^:ILِ%3 >іM BIFp$8CVg y^lOL#jV~=-Frwm0-Uomv\*ypƃǰn3#ƊaoBc3L!}W7 WJI2 "&L[4:7<ɧҚ;h{sǭ7lI 3W3뷀 {LZ]ܙKD2!2l 3]m'-NA8́%54ëP+^-R65)41 W _k;aE6t>\X()\2o+)Q8$LΠb)H.<)]. .4maA +[n.OSP?5IʹL4x ua]݇^~j *t2l=VjYvJY69l6SXC>`Jd3#3XF0灰A^EkA3`1刔/+VJs^Z?dYǫ)ADa~&Љ?ģ΋7a!A-PKt8IgcPvYr=wG j[`FRG䱧L#sv,>2߈4Fb_If:v;RjV*b@|@!JvC[M3ri.&!H}4cl3J%ӦN{Tu:)* )b7`G0۬ki!Y1edKER 5dVZǒ Tei p9K# eP [=Ű=\z3SwyBfcكbdf[4T0f|KmBTu|}lqGiP&c^w*RZe_<([1tR ʶJ)v=)>uޟ& AGhש 虒%oc\nl\MAUpn*/>*^*osi`N*P05U|Q!"*SEIc%JMe=OHlqT]ؿO+9,40w^_Ila|t(b.Х`sZ^ӈM?;y z$`߅mEF?/g:jbw'{SzBiKnvۼn)ک+ }w` W5ʔ0PψJ/xN1z/:d[uEaIl!Jj 8ܴ L('G>Ar:5s?{G(Xy &ɧ!79" }X2aAreBćuz*NmJ)WؓzVC&3NZgG?n a]?3[ %Pd"Z: YiC3 aUE;dNSuρ~ d.eHA& t-cfbO6rÿEW1^9౓H#>%+ nXUv2}k#4/xtEAzȄl AV|@{mhXp%(q?V(bX!JKAFjicbS4-ijԣF!-4(͂Yo27 °$vB@3>F@k2'8nFGB[Bf;%kPM#\UIm^a(10ۑÒu-@ a?~Z7Zgx0c _6PHeDhVlvlQMkA{y9q:6|c(\:̽HdP pvr>ȯ;;xb0AQ8!^xEeXD*ژ[jU w4nj:[8+|{%5 7 ^RwhzpRsEgԧs}~rߓ[,k~j~=n &-37 r>a; 7 va-zCGNnײހiS>I+|tz-NxfHj"Qk%Tڪ:h#F_s&.Όヹ]ʕ;S:ØHmܖfa~~WX{z@vOk^m!ӂiS(;ỪS~`htW5/qh_„I'TdOV`O|VWWZ6YUf3޿߳U~Bdi4d'dXK+D͞Uf%0?g].%=ox2u+DLTJ@Дz']mΔ:[-Za~5 [PP^-)wڤQoL=}RZV0A~}hR6>=aOe-;څ/}T!iŽlФ!8Ox%&Tp?@3 ϶xR=y``|s@*xW9v|dBZW $dx:]I*fq}IW71U6D*rq$: >W>c Ɩ>apR8r8Xo_VNG>QO1v.`0l܈p }P)L)Dѱl0M{)f(bCnG2aJ_0 J m GD(,npota\h.unjfbǝl (nR_uh jΡ 5PߝERMEBMICdpHYʧ{( +8z,/`L=_cA385`AGT#v uP+oaӨBЮݥP{Ezȵޜ}GʑjR?Uo a 횭-n՚.U;vbXzOnΕr% wgG5Ôj/b{h8V^G0OPнVW^s}$_/b? Kb~ZhWxt )˝ӬP+F.sУJP(v'HH8Y"y/jܘf%*XW/w#'idMSZWTx~پzuQ"H`S@w7" KLnʱѪe;#\85(;DC=j5stfPjA*DQ/Pm=YMS gsDdDuٸa}p垷"H"G nD|42UΟYOLf*sl/Q.*864ॐ!nȦ?#QX+\?f dVr}ߦe {r< bRf.Iv u6{X:p6B`Ysh=USj 3(Ѩ\ZegYk(t5M:.Jӻ "Z&jUlx|oܝR=:3 NvtHY^>WG1g*pp+C7w6\"ZAa A:S"iH٬iE?PB05}$nkIrdi^2ۢ|۹yWs"af n@/r-Ggxmd~i5m4iWl=,>I}b2JnCB$.~!8S{&lՍ`҅L1&yh9-?JV?ٛ nF,JP B;+nCqo4Kr#V\+=YZ+@ˑrw|=OgqwOn3HIf@u@cc82˼#n}3ž5۠]f92y."ByJ[Ky>Sb.x 8 73>::m&xwlmW"‹Y{cU[NCgT%ڌM4RMWcߜ'";1;<({lV{IPET*G1v j8Py{jy\5aqE'(@"]Z"!PJL&B+uմ:b4TM/ #[D-.a[Ϋ4sD7l I"y4BLzSW͆pt%OLXPb]]0|X-g^NO׼]{i{b_1jE}[RU<ųu{\FL:)bWhR=JkygMԼ@3<"Eu`"xtK+ s9EJ*а)RօbThϼ\p}&1Ϸ%)%W Xn$ׄove3V!N W2P*d.SRsmHÝ{VhD V#v4[~c߹Uvk.A" VO}գA&M9nLWC_ %Gav_oFGî3DU;6+:ЁMa[z_ap S/߾e1Y$!KaKR=.i׼mddOp&_S^Ј[wAǗ`nN2I ]AO8z-:=$tLbe;߿:d͗8l  `b:C5bH"~:b]upVј4Z!;SUISC?ɉa R][:ew*Tuo}oSW1=0GN ׈g\$@6l롍ו,'pBh/)ٹ AG_in$BFe#N[}e%G֛ lO_߭IO| mOdJ꾦bL dɤ=g"G2 2E5F nw2WjL[@9;-7Ȁtov Ax:.u {5q/ҡGd[SNRNϣZɔ$W;fB,@ʧ?3ɑj"\]l馗_ cچDqJ!)KI\NqBT%Κ7t-ʝH/S:;@~ 2X)V\b8ju%nxޑ/TTi,sd믈>Bfy1#o Q>+UQd-f5F[%]Hjgf=fa0@knknHyJu*V]J Y6-yh2t2:(\?!z}r#khEw$F7TnLg{n 󈇈afg 4<`W#6͓>_Ą,J+dQkn߫uQYV>2e)nqgū7} ҉+sY؎Wk#Fb?$<2)cMpN{LJ6]+̯2q7~ELN2l;ol&sxg >ul69~|zB8l#}H ,]P5T~}E‹CYࠝ{T҈'H:El8-ʭj4|{y#C{` B,mԮqG@Щex}E9aD唍X\e|/}| 펔_-=}>|:e֐9)]-*]Nߍ_ym=}TG-? y ) IĔbcqL8ݕ4S$ kJ Ds5#?/ @Z03*$}4t ${y3. ;F8s}XLK4k {ڂ}ڋ$]iY }~F yr3@ =B,+6 oC?$eq~MNk\acY^xNIPN{6uO,mOwѰXEGُQ1m 8Ge<19:)j~QAZwnRv xqR#y*4Ԝ[OO j TR=bm(@{/BK~s 5I ^{#j-WCt@KF2?˧8 9/‚کdg쇖Vs!SP77BPKNtY@d2b LiJpH43jTӞ)nK㷡na&uEh(1=(9` ՄrL뵋ɧ8+#0J~umlH K|*+9?딄?V vyi7i_4Ò;< "A:&7Kenu)̠ pA&_IB4SF>B7_H50p;@ _ Y1+;ϯ4<̻sIBNsޢGHVVlEM%5Wq #Rx'h{&#HH Sz,MY3GDwUveuhw WGL.F(!VֲCֳ-3eރk6suPS7`y8} ֲ)yPnV ;CF9v{o` |G\݇gއsMl]l. d7${ lgV`rsO]'QDQicd+#|+B˞{ BQet$deaz]A;N}lt(- /LAqwer\1lw`5OtTD35;jdNZ) E#»X†Ja=~2+-%#>/LȌTNWՋsh_ 勄_1k+eZu;*ǷQV6P2ֵ LnǖZY{.8\˭u8aa &,,8u6D-ʳa7h˚|Bo̥֨h͉p̌-Q'UKh'lZ㞞@D,1VXA I,ϊAr~6_=:V+7; [d%8q4_{qaT]wRVj,屢"e*;f+*9as$9ՉJOe;Ý:32e}/Z38UhGOXt&ؤ_jha ۳H/" O^DQ}[yƖГARVzrbĸ5C9޷}e^=9qat4D/39J&3BיPi-sLmGmP=k-5ٌ ͤd8׍s-|p yAO 2kǣ'FH l?h}N|BW0WpdWtTw$&GGNR i SGMD@LY VPk7값hW1(>XAiP} pGLB%%ȔND@d. ݤE8}5q<}/]ACQfbcTjfe~_cv#YKYۘ3Q38oTbqk@ɪ371:;9+SN{?hr'P %G>^ `R{-ʳ qb<SդI:ɘSY !ld\ 18W|ԅCS}}M`dP>n{K  9)x7xM (XяBG0( \QJ >0H` *E@|5%p|!w͑T}RQ4[d eqj{Mű+ ֗eb2RaFB&;Il"HNlCu?9BEu0O}'ӌ~ـϽߣ֧>/Xry6İ y2"jh$*U$`1G}YgbvWۅË ȒR׭*v 5$UdՑIЯI>i5J Bn)…6H|6yvԼ6U16Îzλ kRH86e \(h5NpqכFV}kS[ Byn|4Wk(հ{[[jm^,AJ/G'/OJ"ں{iApKkLĘ$oƆIÇ [9`eZH%^n iGrP9X;#CߝyqHWV˙+΂ko|.wWQИiv3Gn=9=fQ7Ϯ'[Vw: mRYmx%]}$[Egs 7jz# u;lau7yg}g^2bN@s6V"k+ ]8`Rx^p@9#yP Dl{%,t#d 0B%p.3Q%;oO [ư 3A?FlTt77nE33S_^Zsy^(8pHvh=2Yt^0;Fً C8UJ>/ジR?k N P@ĤhBnE;icYfVniDue#v7TwJgc:HȵʳmSIsH쇂kf'!ꧮ¾8܁I\9zO I''bƦFmqH4KH<h=Őb*@HNkv#=sN@ t5ڂfk;r4̎-ux/ p_ˆ #FX1唈ڣ=B"#7af݅MA}K^1.HV8pD-uX7Zn M0DKU!#k8^e?P#ѯ6ϖ2HMi%c_NV~榘]-l]>0ao#Ś87Qա_]Yh'!v{\7 XdcA 심 gaCwMEoRu!g3Խ ?FrU3ei=%aj3<{Vf>tTi`Ho9ygڴW\oOX;N&rڱpmA( I} '@+ @;ѻUљI)ȸR<"LKຕvҘpIL_2ݩO>BkYNuJ2C,jheMXߙ]޳k-\|2?]t,N\bϭKw_ޭ)JxZP]K#7nauݤòg f{&~T(f華tSw48iF^iSdXP*iV߱;lG7E@,N;XkWeߘ+WI7}}QіL'\{UH9P@ү>V۱!b-=-F$ڈwe`I}ȊJ?hk`\ {ƕ$ۡ"6-Tq#Wk A˟I4Ԛ_mgy7߾2zy ({cJÀ=pz2Pe)!`IK ( *Fy7${y Fj=3! {x[Sl·)-$lٯLG!Bz= Kaֺ]\y7!(%_Y`XJnhS?|5W$aQ.p [z5}OO8g~6H ; JQ~p-,("G3[ZlgrԎ6D-4K&]F+Œe ;J4n3'C{0G}?q]-0-)*JV{@S1}/pY6Xl]Y-"?@q/z1[#m>"Lj QYĜsX3Ph1Q,'lNpNȑ?|w^ Aw68arA?_Zh '(`Y6ᡘ$03RUƨ E2zDπ$9 8Q&dBL~&G`Q=/ݢ@~ӓaSR*~ې_ }LM֞n~zпdkǺ x= =xF䗨>:p5rˍ[kU$tQr1~AtGH`]]?gФty镋?|^p` &B ٔν 4"x1lnd j4A7[i^&;i*h qBzNWQ!!'F7X7tG1dс Y5=hdk!#7j>x4BUY_'Rj" @* L%oNtܥlAke'&] gQ׵jێj>=!GEj*E@DVNHe/Z֋$hsI"$Xa=TT\pKh6:Y(bi2XK9ѓo?s^Rꊿki!CljiƧZS-{Y俜Q\<Q$@ PlDPN׃uͼ\p9\hf7xb4c= o4g]8K^,9A lય-=SȮѻXGK,x|o:*nď%ɫ%jQ6& ~"r"fv'8C@ba"r| N̩J_RAa5"oKļAzb%++D0<* ;4LYM~JƘ6F|/}FR,.ʳ)aqo]Aƫf +zKJѽL,A}ml ls:B)l?~Tc%$j q" <@i{Yp mҤlDj^%㊝gf~pzڅn=+FҜ50hQ?CS&\C(&%RG7wjk3KYĦn7'J,Nzg<莕&{]İ?p<)axn۶mm۶m۶m۶m۶;Qd']Zٗ_H5Qx~آzNN)0}m*0R=mfkqà JU+qހzEvM+],&Y#!U۵r9tw.U[`Px=HֆR§j3|ܲ h7zD0{oOjq/7GB-HW@L49QUOcdGM?8ܔ%cK]BgX@Ar"8oa$9ڈDq5k1#"n.ǯݧ~X 11}G/'Ê'EͿY[; K 8B-/y5̦vb#5{?./EN9ct۫|| 1򸮼 {lĀmK6|$;0kkE6q!UOC-Ҫ?mNƎPovՊ/p2lT膁qalm~Pk*1_/(Gq?CgWI1l2.=(X(i]So/qIxR"YzՅZ"qR7m#5Qh7nCJ\)BUftϱD0d [ü46XX%G~ۆPaPzqW\jpV 8mQ_iw}ܘuiYK:2xr()ixI$徏zX 3nu6&'Ϯo˳*l@Lo'7·}G PXLYtԽiQξ%Yf|5w 7 Y[, ߫ h+5x ̙4Jz/W]`/h'l,hH;ٞgN ~` ӑd Λ4J@-eȁ3ޕY^4)x7pnQբ) i[h C_ov/޵HgKM Ҡ BHPǟ*"^yՊ'1v >ܘn位rEb C65j˨Gjv,|/:led&]M[ :2l]H)n}/1J%?.۲C:ry=-w>\QvHzP0{3gZ:gldbR '3k },/SA uQQ~<>O*6Re3P_u/ Ew%P %fT9 Z\F!`e*7n=zV!3%6M$d@*PY5!yWH",҉-G3Dћ8y7Ia/L /$8C>)EUG2=//D-['aY)(_J.ʡÜu%3:BFblX7;\ ۲z"ydJuzKSI=0a (2zˀw{H|DFcmA7.7~ݭ=n}hvoR1LfS0ϖA8vf5!7Wn\j4< &F"c ?n=[ﰏ> 6~^/včJCq1Sq.wh+^Ůܣ+3"Ys#q׈e+یeTp-oWO $s2E~X䄩Kikb^x.VއL?dsTO<ԇD%aqGd%1ɱ7jr9fB궋q [ǯ/YUW^3J2S>7㪝OAXiOV9kW08a^O|=)R'̋?•%8!-^)Y[K-҆EuM,OKA>yu0 o3UsN@HBYlx[+pq`PqEaq(6plk&s"ER[j' %KW㺭dY\2q$q|18] V.[w?x f@\7J{ʆ1so. I&& )Fʽ.3XԞ<~{ -2!4G434%Z,9 F,jD82uiamhj Sz y[>N>zw\QW{b F?[ TKp5u51y6'.rk b5D?y ͬ u ZU9p:w xfvaOJ;[+êCn$; G|:Yo_[ԁ:DUS*9z: m/>}y'*&Hʹ>;UF58A(4:$mtdW0p9% y-ٌSRoރDw^ċz!Sfz%3eûj% =7qO(ǘ% Ń<{_ a#gq(Ih 6Р`)&=h~/:k^wYjZOyҝQ6B$xő,鋄7@L y7..jh4ԣfxk%8?[>h0"xLhA9(g)d${v-oCF6b\wtY P]2ݱ}"`p\3q= t8#ϳpg,LvM|" 2cr_:o{WגkrE'2}I՟uhU@s cn}PCOi6 f!X3tJw6Wˏj{Ә%5V!yraÀXpy9Z FuS@{wB3;G@& cJܒ9B?)4B(q=@lH$N|nOYEBGx_Ag]ْ Zz٘,')l'"9/7W^7bInj;0O}Ds |gK2Ҡp8+O/wnk#8r^nUIPGYi7? {-{/a`=`W<] jUq[7yZ<)P7b1n!;?4쾬ƒCŠR]IгXǸ 1,2\Izx9 FPB<+ jUKIqR~Uזh&am,UŁFRiІ 8_K!OVEl~BN'u`}nҷMYYP}17&Ԟ[DWU.j!.42uZ%haǸJ!$ܣէ7_\OMܐs7O3{/^K 2כ "axQmu9l.n|+Hco[ 'V>Y1o4@@$bO2.fJDy4%DY .PefXOxT1ak+ԝrR9A&,h׋!'ڴ\9CB?t*UT4?A1ܰED „oidu=1p!>{4ǺΫt.ai5?(C9Hg<@!rr@ C?q Je8"=EH}C/9%lgD ?o|REQN1C_xtPm ~Z8l]GH?z-Pe۲AH1:(1鎀'"xӒHO,/ԍLa~\^2=%Jw?AHY ImA%Vf{M_0/OMe?$4Jd.Cs O">vT Wk~na<^s/Aw&̀.#UHŪ䐵o';;0렾 枼{ymcgn{[vT!&<གྷ;O^UF&a*}|AQ[|Gp#YhqR-/"= ZƏ&q01#_"Uk" =- Ku@9ӈ c-5 i3%P"jD'X_L#:̸>?"~WInA1l2+VF5b6kֱCӚ%=kS;T{fpexSWPor:'řEd"G5yyO(rrt2F^_C4j h--Du^.tSw& (Ǽ=\i% =f՝U`1O נaD! Nֹc$+IchJP2g -p%dŽi!\j9* ǚh0E5Lk~ɢ@ LMs;sqQd^TMgas.ũۀ.fCtCtc@ F/h$6Qqta0 ahʐk@RؿlneןjVU3bʟG `KQf7r%ԑB^QWڗ8Psy$t-غiƹs=i1a,%k,ӀB~MagpLo= RKFôWَ|Iz/msNRl\j#WbHιO'!X \%Mj\GC'}+uXS}2*[^ C9W(IhEȨǞCG) lQtV%S0dCy+UQsh e0`rQ.L(3*gSa;E?$Gj]vmD&&ނJ&[ =bvK% 6PC@|`&&h6F!{h0ƀ`=tĮjD$ y%xhW2R:,KEuW:KAˋNh3DP{c) 1mzx {6o8&40$6NP+ESAWVrƦk2P'[Id1&GEb lBqR҈\U#WEV):m5f~,|M}BQQ6Gy9 1kF;EȦb-[Zߗ ƉcP"TbfxWck*,'%cc(Bg(4 [[ #=K:o/jOCqOґR!ܖB ]ǟWBͪ˖}ӢxW D5lM"ƞg JpO *Y bѽ Zg򷶍g6>3VU x5V\mcJ{[5*P'`y;K)&]tӔT%>Y9 #˟~|}hWf 4I:M1,(mKSev[! ]Oz.OzGR+^ۋTv(VQQ-*2t3ҕ*GmQc#yk;@"3(ZC9Q#9Q_ 6ЃPџ:ͷ)WցmH42S+ /w2V26P4uug$Np4mȟ2o4y^|HbN/}naH(A/`C{ )kS1#s, + eNǕXlx^c!յ6.ۘ641͈t<(.[x<yzͩtqfEdR`e0kW]0B;/{`- 4nhOg zyĆ ֘\ww YQTjfN}i x?z1x?%Ȉ"d1xaH5C#8?;,2{L|.-8 ̋ؗ7] RBvƁKd q+fh߃K<t`%O5[CkȠbGZS `*N[ ܺ"xETE؃!o 6肑~_6NFȪ̪[OE>t)17+XdWbI9^QdP>J>&-.qrDDBmVJ?h" ؟x xP@]f<59 b|+9B!ٺO4hz6:遗<V ;?K"P+2~MVq[;xt|ыHɢ^#SwȂ$6IK}gz rrG@ &5R2 `%/΍T DF0{s[P<. #U[ fϞT:O,bλ$2V\ V1k/' -xў,saA #1DY6Jszj>W=|?G:l*Dǐ :xXDsڙLP=y6*?9R3e|c12+֌ _')5r/N܋ZCQ2hmNo Q $[b-1g_̟uD_nn Å-\*J xW)L}A^OBm\KH~o|%'7R weRݶ8=R|ޭٓd9E# 0L(KfDӐP2H _C0=Wi}_W>I6Z[|DaΒx2K>tJ), BG1QKgSr#?]s }^IP*$P+ )d bl< p3A> f[8Ze+/>88-G^v$;77!]TxòcnN9Ə%՛Om6m0ϣF9$.D(qt^h#/ hPaӓM{͂G31.TA|=&ycAwLP=PF <7}EX LݚZak Nr~]~^bhcwLϒ~b)V=aBJtv$7g;8,- c)PV1Kԉ{7Mڟ"v ~Kf<}߳HB5;2pLջ"~i?&:Ӹ&,Gʹa2_{GM\ Ðد U B0f` }uΫ|7B}FRdeEȯ;mx4tq׆PeFv1eխ//, Зkmo0q&aޡm@^JDPx6i@fuY][׬yfO-5ܘoV8o-%l9X]gFZNl6.#ZظMWVIӃ|(vDŮ 곁wVI=V(]8B ם-Bݦa6V)1kU SfמVUC>9թ(:N#)y)Zi)-FD+'q׌ Jo QSc I^tptpUv̗ k4lYL/ |7XǪǞٚU|oDzaRǙkt龵x(5~+V4T^gPrڹ{I N3yBx/w̾9 ]7p;$ N *|,}>6^V'K]y+"eڸ~]$J*}-Y7̄F{%CqP9$3ϼJ))ʩDfP`t˰TKOͯokɭ.[L@*p*ÅKul2W]{U#20:M bey1oܖORCr2Iss{"fUb'ut~MDsD~ %GEra;SabT%EbPr}w#E8 vY)X ]$ d${ۅ.^F%C.6z=1ǯh_7l@.#ޒ$T1`p1(@=$0bl/#Ɓ|fzv5e nJ_csM"Ǜ(p/}r<; _^HJaplBц1wCW-{d@JCYP F͸zƃLixTSީ{}*\\yysJ\?oh w*(ó,U^yxZ:M?*W 6>.G5G(n ;n[GHPoKEPAHV+А9a;^P f| F-f K+O2/ _?dzs)J; Q}&ms$;}ҭm_Z yT9/!jZ4LfL\_`Rv[G6 01:RU%1vA1)Y$.G=kʳ ilLp$Ys#H5N&ڡCb@-bX-ĝ8nɮU,; ׈Y^IGe1"ߑEòl@QkJn8~=3Cdsmtzώr gT-}ec-pBT#x[Q_uvs}֟*8?W(:MKkaYA?AYfU/$ipw[ vFi"i&v\Tp! N5ץ ^N+Qj^j6% ܨVѥPeP #h0IB9B'K6% 5W#|DoWHc(_'@w 77֣ԧEp;@d0 r|=G]\IQ [XلAdh ْ!]Ϸ6 274݆^ȁ \z5΋]M-Hܧ< ͒k̍ͥ״ hj٠YO~,:X1Ǘygk3g8 g$H/Neh>*/_e ^jزB0]d:|~v.=aOgd@y4`EF|ojPy^#LH%gњf f}MFfkI]wޖl]`K p{sS(Uo.Kް91)Ôy<Pkg4io̔( cAzQtӓ^ȍ6m}  ,,JAx4?{Y;'zz &BtKO8NRyC4fO SIxt sG&vm;։J\ZRZ\\ZbbZM\@@g es?~9䡱C1 n LA;qXバH,@{wv ШU,O|ruaQ`E6cpHKLeKi!{~ r+ܐZbc|DrleۭptD '涪t$ gUu괦F %affRfFsnWޯ[Ǣ6q+f[ϯﶩj} ֑≶;~-?zѱLJ=wكSf-=a̵;t&*fg_L]G.<&;:=@}zgtQbHLi hͶmm.dk +XK_ _r*}Qm 6cQ軗r@bB!C,80ՄX.pP ~Ɩ#kU<h\V8![IEFg[-ֻ,GMSTRj#*/rq$[-~ܸaüj.7ŤO߯ȧ'F1vSl_z~Z:׊\{iiړ=ˀO6| ˇ#s҈uKU#;z9!Vk$ < XA+?w\ )|)z%S'TuՖF邴m|LJK+QݸޭU%&o 0m&U&V$!~p }GunP< [9H-|N YT =̋h+ =:jXiHz 2nTbsĶyez oUDQ((zh.bY6QjGhk XbYu4 o4כVa^?#cT#\IKOc"bz}|Zprg.e2M2>"t_~:W9B k`gJds0sdY9~8VI3lBtްru0>Bþ"F+!JF?Q0N'y̳ij&б!'{Y_xg.F`4z+!; }`= BŃkЃk$-!j`Fi4NQUND{$z{m6w۶mvm۶{m۶}wsS5Ws1UJ.Kr˪j?Ͷ hSd j{zUAq* 4kRr <_:$+EMc5˯ dХ;>;ai:*DX:$̊A[Q{Lǯ:\':!a KniCaV޴mc_V8#щr~IHSwm5r݀,-+ufUeG@ ӐtLo +b%t^VP]Eދ:£~(TX&C /FIx#+ y# O (xb1\!~W{o%,#\4ԙr0;;.nb]?{8 :ЎzI@e3I#s:`$ʱ]2=>S-zf+7uekufUL&y]-LwdNcRr]3WKj&6# Xw<+/g46Rt@jbv FW605jWSU{%sZ[<9ד~h<|wY҄ +ʭ>I <+!rIl7Gq&qYl2bl{\Ad>eBj[# ՘KU}ŃEKi浇^D\d4 k9W \vWsV{l /m1'̝MiYR<ܦC1 b2VMnvW8, r볱)l3mfA_= ;- ]HIΙ07:I+p$+1f%7 gӤ;kJ8CcfMvW>R>,nǿ۾1gsoMhHapx#,]ef?$Ȩ?uȯIE,v1=KinDlّT7p.$il|dDG XőeۍQcVƒ ֭dr=RHyVlaǡj'{*,!_'G(IƓv߄:&ڡD.zU]wflOy~^ERJ]9I۝y]ںlot+\tZP⚢RWgr6^$o޵*Uu,~9/zuf~R ꀭŖZߣ*~߻g~?)/ow}& 羪ypo:/>=r|_kH~钩&e/Syɕr9z+[]ئ 5~ŝ. `6IVzR(Q}!K8l0'ʥČX|Qr|^}3ۚEXݺV_c8b -c)XZ>6 1i_I1V:UwC,BZ-px k}cI'[zЏzOTvH3  y4^~b6#Lu. EiZ8 ͼSEb4\{?DOu0HBi/7w\xg0́s@TE Dځii Hp3 #~AN\=31puۈ )>tl#o3S(2&(淚Tq7</{>iX*QCJ9j- |$5Aj;f߱&1 V}sQ gý5[!m^4kSL\7+lf؝Cau'(k]0+PY2Y.#2*GgHUZ\]꣗JaLEɕtq^9?mY%7hJ>_DpqR֡ˌ)qTN=5VbX!6"@V30NC ^J*uϞNQqr-sS;DW[ISCSW7 9H=qfgŭkQFV,g\)+6ƛn4΍zeML8l.0%FH*+73nd4Sۿa \ܺ/F-Qkf2PvJ)dK_0lFOƲ^&->Idͤ`޸'2_B!9ok. /WD+dǀ@ ۟~u 'XI1g":p1V˨'Uh? KWMh6!CH `Ϸ2/attDmBYCg3%[͐Mg.r{JcsU-{X %I0V0< LЪ4'V}(TIYB}ZdǞs=KkU$OBPs꿲0gP KI`DI#1S4wr"yuC1 1QXU{1\e=]$]jqxs Io;a?6|L4-іN⪅jdb^w)1Z4݈$~/y!F0iLc"ϷI0|, ̥wb;@mZI;=hcVhNvq  ?^_ y`W^F-ͦ1HQ׺kIisƋxh"NkB$0.3J`p \1q~]7r2gVW[9;qjjҋܵ-RtI|fV4Vhj 4RaQi( 鰩!{kJ`2oUYW ϊU-@&0C}nQ@}DYPQM5ƗJms $jv =F¤S櫫CKF/ezSwv |uoaD^rxf4%JړOBoU;W:vYj%HY`\ #ϸZi d) ZKֆ7]so|"yNod陋|9[ML z4Tq>y/`4\C~BZxg!A:_|`}˖i{GGwzXd=zNIŸ!/uvsAe9D48<2E˶{Y0sHHJEf݌RLBƥ"^cQC'THGf_^6ϰfbh2-gKd?q*Jdd ?Qy="tPbN# &ɇ%' 5uc#,pG4ט|[`eK.bqT&T:4Sw,96ڵ(R"^G|{-(&iGf)ihZUG&gffee:Z L3.R@QVv⒉>> SsTF| S0FWe9+^]o+;=h=_t;l|5HFo,HIQoҚN.[iaٰ?$.e"JVIzHJŢGM9riEG5фyC=Ys 㲺h#rNzJn$+Ib&:z(ؒejSO,%EA UBdfx˪@eģT6S I_1h嫴O Vfk4v@RE%)_ 7@`|&֌#ZO&#g")i16=xSf?L?hssAj/ชZ"W^뜘\^p}na.2sNj W>5.E͘k ְݣooWߐ(B8E*ЩZa>D> 3#X ޽6S_tu7y !zE)%'9#Yv\6@ږkHbdi TKT7N?woܭ5whmmJJ{NZz;@ tdX-\zpŷ ),nI_?J O{v]N\c-M)tV?u}T kTz&y6ᘴbbj)~B$CD -y_C.E'O-gV)gI\G6IQx wi;8 Mnktd'ʦT^`H 'm&e4ZB y>qk~ypdDTQGapFq,oc= 1.m1L98ٰ߾KbvR*S#Z ג^[i`* kzcm:[p7%"^ -^ـ[c녨Lm5| Ũ8pޅj%TȏFQv+OsW ~h4аL!&0) KVG[ƴ̛h/>U>K4` ^Ԝ Ut2Z頖$1缲l$kYEi A J-LR&p!3 N޹d"\CO29cmC*J^%eӹ>M|,ZL t"$$eoA[[1楷}4fdJ?"nkT 6p5eecbc'x@8/~/_/_/_/_%Nef `M>p 8wM?L-vP#(f p]N%vޕ ; P07 Žʦy;2d" *o3,SdJ > 0MFz#ˌuUxaUv,pd7ޥå6 σȼPha`j飩"JVO>u2>AenKGjj2RR;-Ufh!Gj >?) H s]05?~Sg=wni?dwhuq$ԓc%IpbV9Bu6LwQwu$>z D-v&ǖJ#)AWX$O6IBMϖV_%:õd痫"Y4X lVM8 6T :S Rj-(,ݟOW,d(Ph`P+2Kkz3vaz? o!+QzCL_ڨ.J Q.!nPCҝ>U%o[=D㨖 }]b,OV~b%|0 zs񂗰B,{1~xNRAInKD Ž4ٯM"iCakN*<.qZǬva:!e*F;KF6)X)|̤L0ⴱJ v&'  A+نya| PFg_{ 2zNDM7̔ͭE^㈸ eM- h*Sj]µ;e?CfяW[$Qe{Aܔe"g:^Vǫ3'9{Q|f!>4U2Yb i8P3E~_tf6W2!Ccf,QP]8,qu9Y@_ogRo-S)~io/$tGm8~fwl"0#&G1d\pbTq0\.{D:%dÕn4lbɠUAoJ^S b9(f)i? =SDk24BM[j˒9Ũ/zZcBs|#a؅yYwMLEaVHc?ݥppD1tvQ:r qۮh) (&ʸ$,C_s@Mp쳕}umanc9!LQkEccYqŒC2@в-)iB$Lo]s18<ZGw\ dL# IKGI&r4؊I՛odllýNGQx-c"65R%c?؂<˲M- r@tE\|D?$H#lR2+8DY z..k!lO '-1T$Jd^D )lN-9E+_EHU0fx |c/ay`(~"бǢjғ hdĕ5ԩ{FQ rQrA}lYgOK$;Lt&ߊĊ3Ŝ,\We#>D٫;/ [ D2U$2^C' OUT"t[ ~Uep;uIhܑ;əP${\m64mwy8ig&W;K[*OUoc>(:1jO?J ۳a 3ϭ3?J7#:JUoP&H3F;wn#MCg C)|* mq؟8_^xRʿ"fF< ˥vwsيʽa7j]-L0$5cx9BcBS}e"`j̖DPK.wB1~R39?ƳQ@ª䄎n[ ZuƝ4- ;ݖDz\ͽюqP?U-*7 PF(-}A@%jƝ3S{/l^_2LQňAsIV_BCHk$]ueL(%' J 1sjE!*0zjfn%u0布 >W ]ÍNlِ>AEA)8%3a LRD~E nL4,$Cш} é$}9\ n >{.(9YrZH6ѕ"\(:WkH@R+Z_Ao^}%sg2U.\.j=K# ˡj^i\d˴ET-|7޳ %$lVǒl,™hPށABSV':2c(+nLN^/Pu3Q}cdˁ;1PUBSiyvԷfj=@/TQQ9ɤ 1w|J yCr2<@c)/="gdQn,U)b=#;[XMKw5|4 oĶ 2=-=lT"sֲ9lEfR[m kC҈DfqlaaLw-Gf8U6"x tWD>h9?e(5FI/tƻEa&,8#`P"jʣ@HaHSpX(drS":3&-Xx+G!Gk ӊf#E.J-GwYD⽺9d\FV P;jl2?jG|fЏ-TT 'L DžͫV5W-L$Q+ޒT0^]v^1?7x<-O6t3.4}!8nؑӣ%o-0F`)zA9lY{pdWSӕy LIs,rY.˧e{ w pqE2lZ?kxl~^/|ڸ\ H)&= ͚5[]hUDM`5lZ#5bV7D @S$ُG[W2fЕ~8H _PnkeJf{}_髆F{Zt0@&&I.3-)&z~T®"\VY֫FsOBhϱG",2ǨZ 'y|K`E-cG3)rWFgLjY:~SkzdbLvx6"gkW5y %O$1U^3nٰwv3A~_ɀNv0IJfŇ]w{[c*-,.cPn8j! x4oE?b{vlb{wUwj+j|\^ۅwGz-LoXf^ʶlB 4+ڷڼNȀj?(C"l%ϟj:s _-2l .5aL>G*]'2ep[Y3:ئ6L B]~ o3 J LÉMҽy ~Xt|#c{^6?7?B:+;gvhhn2vy-l_ "l29.C S,p L߄\HZR.cZ;_&K|=q)zD2O$d{Bݫ) Y>NFK!/S!,`/UX_gH8 ǐIމ5ԈPYnrFlZz;z;݇ŷTh!KR:B#̚il%l'  Xosg}0>oHh,&ơJKϸ֖&/qq칔 bosjb^UpxHΏװgYG˩ ́nQbFq*d 4~[QCc**V{a *xS1H\hnG,2L ;+9!< *mOntgWXPIkcQ2_^_/8s93I&$C0\R} Npj\#" +hX LU?&/dz.w(+8hqAH)Rcrv݆>*a/vIER^͒ezA$~8or3w+#փnqIFkE_c7Jÿ>Urh: 4d$]O?Fgm 4n;B]w;SsNT}Snum"唓5v*W;Ca0%շ`}r' Ή  πh}kQ^pF@iӽZߣT#1W$z\/a-av] s564 lO}E2p4u< eӒ)$Φ`os-<8mA!2q1TCmj󖟶uPuKF` b(HS>S|v[h?f(9:/fHibŲ^,(K;|QeSbwp"KF)RDžrn|Y{wِ0 .ƅ6`kF *UM;p-pEq,\$LvN/{*8eW2sJv2"ת%TUڬ  twR:fW`y?Жx?0 !Q}X\GQ?x= G5vw"T/6"5N2K<*U2.jM浑SScpW92ʓ;vU;X?3ZKM.g,L_ xt`eFq7z I &6l 9Q>U|)~ xluJ8ċf" .4Ybh=s`F~Sw!Ы6u|d(YSV^GLoHTtO`7˵|"1SN/٨Y0tYuP"QPv,V{o< IRGye6 !|vx-7)!fDz AY.N']|JC9K9ЉK~?`^Gќ-ɄIN}5ߓR1)[_?Ӗ3/-;|F{W]u&OH;`EJk&.醴8fƪ{akV,VUVM3YP3ύ TZ3%-1682-4MD1O]䴬!oE Uƺ1mEN%Ei7;&0Ă{VJժ޷{if)-u "?V5&?y*>{/zi|dKjRȳbfNY%G2sSz/ Ͷ뭂W ՞l?usmpHAA ֆx.LOTN.J 7-WԚ]dR9=Kպڋ|_fh 1~/[iIn#6uwô^'9p_9x^af+Se!ϱge%@ԹI_1I$4sel)/9! F>_j16+||F12:̔t;{Q%!،峨()7ʻt,Ce7{_ +00W}y1?kF e!9zKvE18!5 Nas=M2%{l8vsmGxTN\8rnspVY_M%b:1ul{}^keܻVx.HeuqE+]."('l&z# |5Ooڜz@N!S% 䛶4c4]Sq'3mK>V RA0[)/Q!Yq5r߫4P=a@ɁNhR/- Tl"j~20Ua^ #.ug%w򥿯NH:"a :j9rIm6>u#E׎IO(˓m.IZy#xi$"K) !e!nlj7 #cCe)au\Yƙ{) ( Qϴ~- iqߑ#j7ogU?֘*qB^ |e ̃ E^h.XjW5ٯ2&U˩1͙z:OqӟD.$W=ohD"LQh¿A̬5]|xw|+Do&oFFo\+3AUk(#~|R(ٷ[oXX(BuJϸpԖ D9- s9 a36 D cJz=5t *j #ϑ0 Ϋ@םWhp662\pWlUS8pmU'[+ eO;;m#Z߮NlK e`gztujQW/\2?6mO6l{vA`ڮ-^~l1jIxC$_* ߟKA*C;Qloe-d_}( )PL84!.*eg&Vm= 7񰭂G]򚕖X&J+G< NjS)kan Mg{Wz_bɖC{yf(ΒI"_]"?g#)1 3SU=6+1Q!Nr,u L6H Ng-{mՙoL> NUg9g =i~@JK߫>q*O"rSբT F>ȀNN6Cdž:rU]Z 9fI}'||8HbOgG/BRiSalgؿ[]7^cUv.q͹EsNMU)BHYI|g #K_5b$ E1?,H;7 %(9[Pjn*;)07_~U(Yi(kne sL. )lxZ\ Y>L cUþWϒBꩩ`Y&_AԖfEuLūE*@-38X9%Ĩ-tz)yoςs fGT5{kRȫt^RӇ8)'j{-'n[[n#۔bB:-tAlr `+Cprrϑ5Oh;Opo!,sm(+kJU98-AB+>w%EuO* C6P%*25̼l:ѦHz?iD5ʇ;wXԵ֥?+f\.Z}qbela jɉo _f1SfE-7*z;M-M@#"u Ve.'YM}Gڱ^ Bb7AQU~=a#Eg^wZ-[mAwkݶl F. vo5uz4q2grt׈B|DԒ3c>sIэ&fº}?2ʮHf.Z|ʆ Z%B6SqW'+e0FS?S &.@/ >(o4ӕ3qԼGn9(BIbV zBͧgFuF9I@' YA ݒ3$7tXL zOHV1]MMh BeLy5Iaeړ!.Bv}f7G'h{`ꛪz2S{W@PyXgѰJ쫔&⩖6#YP6veYբl ~n7cOFꩣ":R yVaf{vֱ։^(,*=4[ ' J*iBe׃Ҟ7vY٣zڜc);hmn_Ϯr_<" eY§Y=^ړ߬qS|{+xu+ʼn (4x%JijbU9>/1h"/LQ%f`Yr(дC> [+F[)q[gu@#x;MC| oi'z8Ym-s]2,Uo63Tm82v@U<82Ժ"-Z{l}S᤼MоxghadYAꄦ܋Cq v}|QҨWF\EJʪ93ߡ߭F& s];ϒY9 tR2/8;}F6deccu]CGÇ #*akRF)QY'5~NN`ԇiurةxc3=VU|M^hr\wc0:=.U "X w^@3kƱ>JY6O~h#7%Kڏbr4CcG=S70%xj+Cv]HnaE]OF}›Kw(bg(DxX!|Px0eR۽f3ēY 0=eU2j(( a 5(2+r d$Ǻ p/= 1H3[%D^H +1gH8 @I-`&3}Δ%_~&Q6G"2uG\>O L+&=t&(,*YsrypzCG.LgV1eZx4}$X7]lͧK#)%|2'_gOK͒Y<7/ȣT~t}H8R1ʦvXOݚ'| mMW`:<1d< 8LPzwQSCNr`Lz>alO(=HQm^~d/ntha)ꨄicJh[Aى쓪2>VVӳxU)|־(;=W *=2YϰD״17C>/};À54a+P.[mS(Bgpic%.T{%{'rEn6|LW*8$Wq2NJ=wmUH[YF#C7xww̤rdY?.vC:kG`+{vkmA|Z3a˨TkBUMƥcaJDl"8PZmuœQZGjYԼ4=1."R _i/[ (j15n.#Wվzw3VGIf*6J gNX]zH,2(a GUm"9j!V~lW 0,k"c#8l?"sb_V.g@ouԓ(i㪤Go霞@l=G&Bfay؝u;9s"jGiXJt GxFwU elᙑ"s*ϒw$$W\ dԃč'.x3QFNqñ痆-q{ C"Ÿ +3ڨ$8 ZjnIBTxDhyi\i}K y_M&&IqfKh)'HN)Ln#跊k/v;TViP{4P6sSH^k"=*f u ދ7!)̘_ɢ :a[ǡ^^e t*Qeڅ;U0bv3{(+Jl QUG*v]\Ҕ Ƚ3V΅I(NfѧSVJ>~c-T*rs׏dLcLyi<ᡖElEq$%} 5p}ݧr9B;A{K8SW;ES>R3u8h嵟U'8PL3*zsxrY=z0in9.񕍱o^e'd%0N>·~ p^DzLǤ[PJ t,7YK1Ne<6YT/`SR`)zs$l_lv3쵽gB! Tv%$$$$0e\(&ReːaؘB yz>ޫ&%G*;grdс dA"Ʌ\aņx>k B,mwV KHSU!@K ϑgQHr~(K@\pM)k=N>SZf`>nZ$nP+~ZiF{R.ѯ-޷zxWq}K+S5\J?dB,lA(FeΑ_B97y D^8d)Q]+ɟgh/ nI _Qmt +i gIxdmf.[r.!<@:r4zoxx?_S,PB`tCz>#)/OW"DRakD # .:fV Z-r\t*ԫnv|EW|'O (awk  X #_碏oZV8tY|W;@ ]k,eœY\^:<'A乺=u۷xBlyBc/^Y(RXxLjV>{S]EpjYPUp4X,SvJa # upθʩ*ҽV{?v%/Vu@GN&T`B-PL/ m"'[ٟ4 P&Ӱ|:d4AkU}m5(7ێ"nzZlg,EdC8V n>s~vW hc؜2aL*"1ۃ)i64SK~ŀsV]zEcA,=9)ж3֮̓J P|D3pɲ@4C4`kF Z4o{H0+x|fښl]!,/#AK-ϱNQn%xZ#Y]7dLיijqhT~+O$Z)JSLjk3Qݑ`/_ϜYstٞu_yUGTwDMĖPz=Vo\W%S[Kqa C]AwonRx[$Rw2wY#C,[tqYh~رFv%r՚ 9OeMm]Kb 5О}VCKc̅$oa)n!رQH tWR+ X,1J,Պ!O*{, YvIe$1\gUX4ў]ڪҷǵ *X^fgt DJ9V~ sN)/j| Uamރ_ 9WrVr|,UiK.I3C& LG ΣM5q,$ z9.:T_G(M!we"bo22 1j$ ռ75oD%ó@Jq>-$(oj~9{*gڛĊnaم﫛ekrY輽`'NdZb|_5 e9[Oz)yt'ڶ(y™#pGkWo:Wˇu)R$LXеBж !I!;vaKU uZuHފW7ı(O"K<'\w׸ϑGvdc V 5D+4A.11 G}5l:CTLNG4v_FnWq*rkE1[)ߑ9F2xB^ ska{d{ʣ3QrTM!['M4lZp+YGjs 8B?~`= _d+Η2a^tfF*oio*eiPONJ`>JY|N )z5լ&.KkXoMO[cOpp)iab ~|,Xi%X~9;w$4x8C1 d$/ erkTqpkZsz Eg|nuDLLc*)OԊ)!CfNI6θ! +Ԓ}U"%ຄb|\e7CZ5ģy׿-O$.+-L8H4 5l*Jru4I{L&ڌݿT.b"?0 Ynei%3w~wG4偌d$u]?VLg$Y,~Diy^nȝMsCL66Z6B!eҖVe\&&%p1S=R.%EnUvǭ!!u,3G,qHAe"|Ʈ'Km%4rfqkdSЍ0l{ 5HXst/[ `K?NʹZ4YdK7Kŭ:ƹNh(c9tŰ5dzgJwC'(ПLM#)#W3n!.&l_ \ `ƀ*w>Ȟ#cZ6D]?85Ge)8bIR Bm>d%~v\T,`[s[qQC}&pJ\(svٯ&r);߃\ Sk>uxƤwus D3wɲ&(R?^&BC]ۙ#NcΪX3QE૦ frXD.RJ܊-[@kV!=ӿGcV$I1q)x{=Ӹ?=-|ꭢٗR;,Ĭ#2)"k|qۃDT#oTtՒ$R5_?^ʲM=,ӸdtBD77!c\aDž3-wcd#6vV+%xVBN6"!+ ܹaU)ǻ9gJKӽki3WZ.Tޜ:# XPv1 941[dsEfT0c}Qybb;$wr M:5|ھlnSKQ uEYۮPe'c u{p|V`yj+Ä=Iv1:݋3T2. (ufSZWcHlml_ΩIͯN.pV%7$ W.@I6<@&e5\1f|}U',Զ<osC?a.tYq~#'(i0LlOI)V~{' dsr+/l;Jtܜ'2nY)V&Q}P;3>zD>7!FvR@fċJ-[+p0ԮrIyV 5뫛;";Δ`y&wV7_4l+oFLمۢK{$>Y"|C#%BR6Z2;3W-rE`LeeLZxۤ]m&ۡ8̺ 5w4$dbXk8@pOC.uC;1 MNtTYEskJaZ\xў.ѥ@ qRYcd|ZP!3u/цϴ3ԙ_?>BuFi[Բ$RwDq`pa"lieU/u4$"/:ktK-7cD q?m"҆xe)f`g Tۺ:-FiFwzyf/І5QUmq 9ur'm)mWF WМ vFcȬ8׭-+"H-.!%dZQ6g8Po mB`+?eNK"҉ofN=uJa(c+юɛ'O -"mlBwf g@{g/D&I³Bf }UdٻXǐyY*h:.althMEGgrGӵSc uNL_<؉=FNV( ѝSEot`E)fac \8ԨezA'GjLk=[^QNk)$l %x I*B@'0NW|m:V>QJ  B~0dio(?dj3&&|H+gDw{B1tj* 1 ?<6@zwv?hSTmCLgԖq>.@NnÍ?o_i[MNJE5%wcW %v,GN~#7(DbFJ!žDԃ15?ju>u&n]0|vTdzMgLj=Vîe*ݪVSP2/}Rǁsk !Q^Z1*Q0C΁> 4ӹ sMSMAt%"kMf+@3Ё]BVnE㬠1#_ybYDv,`Z~N ^4GW^J !(_)l ]' JHVUiLaP[8J۾Β&ڢ˵ \n7RCU@TdYc&͊:v4?5J]V %"t/z H'䋉Kñc{a WU-Mo疒Zހ'[9n,J]Yz}F)n{Ǫ?,ӆs!ٳ5 ARFvx]\ؑ0Tќ~ӜTI߸AZ;kNEe+0D So5^70ڦB$9?-.  6x-ܲ@)d4gF#V04̽OT*:Iv~~ pEKA Pԟb0p]1FJz.+ 5? 52jh>RXLI %L1j=ߵI ~Mz۲lJ8rSa ,y]m(Rzmqj3O"T b5A8v_艌Ws\snhObMx*o1" KqܙT"F[,dWbxVKl;戳 htiA8k`8(UɻLTrnbAby!\E.e+G[*dA4lUE| -qR;eHT-AP뇍?ʇ*)}ketA(NˢdD۫. `}"*L Rdy橨,+ʎEf!Zes(|q,c4Vr\Eh($Dv>[QЗ^ӹC')(ЩjM5aAL_dGD #ۛ:ܠ HS Y^$CQ-abX1B<[%V+<.TvDV8 x pf2 c?fwpi )nJ*z&jpdk$j'UIT[{TϜ 9:ɦpj$WM0ĥIwuxi˭앹;p;zŰ)ꦋݧ[Pe+m-=72h%}=1wF^zx WȚbh Uu.\.Kn6/ųhYq+ g Mum.Rށ,z9枷Y/TQ26"2 H/crJ}QsU&\;?׮z)"=fD-G0ĶY.9k_M |Vȡm+KF6Md_G<{9a`E(I~}|{#7@S-$^G*'XEb DLfl^[/_aCz"w3PQ2s|@ʨ?{yXHHZ`1a)FƮ%H8CS݇ExBR:*눘p/\s}0f"B(S/xV祲Vȩexs&J!kzc@&"hhliP*봙53s?Wݳ`i,v XT$S""½Nͺˡ8IU\n6WEYZ[X 5L@7-ʀ- =$+[vޅ8w~%7@:SޗsZ&2B53^|'CAʀ)gKOMܲv7#jӗYȔSgL[QdQh+sCcñxJnEo "b VW5J~^p֝7s@*R!t 8B ^=]2ۍHf\5,N2Tg\ގ>?ٔ۬- 5e>$5cm n޶֘c\[uSe v M;yw'wEN"NrX"!] $Q,f4wV!"]y\d; #@Ίeѭ"mhLJϊ 5\ds^UKrLYVH' #kM .ե7Bu_mUTA[1f;xgeکضm۶m۶b7mf>vƚxsθЬr+#-v]QX'E7;7p;lo`Uŵ!{>H#R@M?j0AB: X[soɆHf^}ӷ7O`*.[ Ĭ&*`%hw< tX9xC8}HB”C$}QUf*~+- OfK p,P2u0)q&`6AРN(L,]JVM3&SoV#HJK5+옟ȞcK?"e*s!F1ǰnA!p֓Te]RCl.jf%{NߑRIzj=Iz֋&:L)Cmvnm}BSXܠV3\n ( \:Alvj9Xji457ϑ[*@cbɯἀǝ5uEG~.b~6?P;m hݼFBfg0WMacF<]Trl W b$t^$!Ȧֶ)~A^J{@{4VWh]ʇhʓշD[Ӗm2~)a;aZpTCҪBqe;dwGl^쵾Itqsmp&zu!Udxt^h zZ܆ICXŌrӘ6m/2+7[Ip[[i4;䨠O:ЧwZ֣ӻ}> X37V'6sН5Ւqc!z5B߃]$q%@y`>k*I=g˒H,_Y92q )tGo ,"W|u'ukiV3*fQ3"Hi݁?zp`f*!A1 +Z_u`Xn]TTso -3S{) h o';F>R`@F-a>.׊z68LYN,Ț`L. sVK}hfoWʳ*޺d`y FkvXzm5&'m^K\(c,ET,b"o -nZZ)8WK0XҲZr(ָUm|,:'؟$}-IvCPe\P"Htvg+ sWGUK>xzg| EFeѰua%fw3$p6:_ U謀o3p'U_ ]Ųv|_؁H'w#OuK' {6Ű̙̞͟n6TVWVOE&hapXtz_Wavq{sH,dlWMj(7.Ҩ(` Yv2Ig?4&p}Ɉx,bG>!N;M0wmg'h 08XDHXl)M> \N$foVL& 2XT|5#FKTic%-uтΐyg3iY":Yh2ֲيyM1)t]$7ϳ3M17RgqKWtT};\5G0, [jϼNtfUmІSE49N>n"h7V(vf~Noת$Dv:9&!K{w@P-hܺ=FI~ilRo,&z]Q ْZREltElL]viWno9(NO {3|4{af9=v4>{VEp ,=\T0(5b{dKX&ϕ,d0"tzS Kw5&'ҟ*JlC)pڸ"$ngVrE?^MѤƒ 9yrԵ -ޑyt½ј58ݭY/[Ǩb_PVGעU u,x.-M/xN V|._HH"M/{53# ,Bȕ1'HO4_y*kgբB?P0m []皠>̡{cH"}}*mK\5z!dO;&Mjqjv_k͟wx_Mi$Uђ*#edZ:Udve:!W8 ׁJ`aҋbHXVyhT ۥT "o^C7g/Wn-]ռHitԋLR#q@y3ӧK%bRkl"GoA-V-[ŮEΦ2>VݷY>V7$CҠN/ÃI`_xCxsc*ǫˇn u)&)j+MΙ)_}xg<6 + ?'E۽u-$-=kcUTADv^G (5inc .f@^l,WNjF't->|mB煕*2[h2X<㰞!Nm14h*`Qԍh>̀ȅ=gY;v>ܞFAt7~Ivӛ]_RNm,5%ksF!jRfgЬzIeۨr'96<*cRozQ MT wW{-fUϚq4^S<yj}B0+Zz$ba7qLLj~;YXD0=`]UP}T Zް(X$ (^=UT9<̆3 6ZSOڿdIm3᩠.3P R׋h#*מv'I42"rl9h9{ijځ.9}CoO5V>jB"r$*Ar+>'j/_q2]+e$|<-s4x}1rE:u\;.R-hr´b銵Ukuc"Mzj%ݜ$ѿPߤW& 9$UwG{')}Py$?V(@Ț( Mϛ:Lv]Ok]-nײhUF& 2%^WAbSJ'{hCg|"u!e.+KԶI hPF+n],7XCD]O[w!̍l٪mN k_(o4'> 6u9p4^dyWg Mgwϣ7o¡6+3F1ЂD':[(fk܌Ciڔr>p΂3G i1`)BնZ) mfa}ތBqO7jbYyeIxl+Zu湡fٽ ./c1ρ'eyc_4lHk0)дl_Zeq\~%/9^nu()( SL@!gVv@6dA8I43(fHW0._RKHߦC7 f,n-\Q Oe拃!F1VBylX͊{I=a:egHV^K/`MXht>v[n`O|y/meU&m}dyZv-Y_!].رꗰjQpwCLoa_*콾׋V}y4%Պ8W3M)N颠/D+i4b4U]lоufIȋcQyO0|r 3ޗik;’'ZaHHpLlhKf Á2Ӵ(-Noi'^N27 D6 R$P_P"Ym̙c?<]Үa4؜W|sh+q g% L pP(~%vOMNQo:>|WwO W :nx]bfP%ǯD_oŗirek%ձkUHjc><0@¾Jґ{JtAА5m#Ұp]6}''Azߐ7Þ+L: s9#n[XS^,W.9vD:ʝwdz ?ۛrd,P6T)k:YtDD!p%N<3C Xx:5 _4#1=<@rC30>SB3n}ui>cK9։R>BSbuWOˤ~LsC̊ @ SJE$;W e0kAһBq)Q,'2h,U_x?6W W _fY. Rfsyg| oL~Q8ԏ=L(B7pfZQų~_^hs^GتbI+<9B-, &^;\u nIz 1oT] ]ϑ`>zW~\0= o 7 h.٪(ݤQko9UhpnT0K@_"c' ۑؖE긷) \ϸ)4+Iaem0! ѕUҷDPSxex'+MAbUt(QN R$ƘiHfd'ޙ9I5C{,km6sH`2\0IU:vФ} y!7&Zퟪ^sޞkU&Nt\ [u称szVIz@5R#c<%=$S$O>:?6,e)7F1T<\6{*E/m bG@P?i|Vrp)>e`ߪJcQvUEY8M_eE\07رS^֦:Iԝz_scDRQci!b!ZLZƘ{iErf;y|\7u' E;5~N.dV~<`Mkt#Dў%8SkH[} [Sz)vj MEIאL1>X~b_R\D1Ah\hBBq20l_2'`TRra8Ǝ{Y05l>D3t5>% C֓5$m+!k=hO@o,eDZv_UC^Wf7?^iĀ&zis5ܿHjO'/*z:-1k,nO;rOv;υ2QLod.I P=Bz %\m$hKE.lCE42l9;VlQ\SЙ.Ю;ځVHfLF R.kƛp [Z6z: ȁ/˓,ཨ!{ M ;k(q)4]Ұ'сRFEY_h*_`wہoi[95!_^_ > #*C#@ݧuő x\0qP^M7D(MژM:A, U+E_K0gb!9<⫐Mu;?\A/ǘpf^ St# }\Ɉk6zٹM} HOQ:cn4zV/x3300=ku洲[aK O[ ny@f1\6л{~&Xm]3r~ƮH8%_B0;Mv3:,\Thp*d|n/* Hspo9.TQM -M 5x&Cc#!*#=q9yX94ĂG^cZpXS┬֟:AB|ķ JJ:(Fq4_YAGO;&Yx5`*l\;$(V ?_81& u?e?8]OR42xTĔCix_|_2@3࡟MAAUs[}uav|.|&焩j\~%< g("+^p^j .ɧ<sF <ԖK|Cyt'1v]7O3?bp8:6,蓮Zz TF.br RO! 5_@!RCU;'&[L&1ht.kRR L-DzR_Spp:a'÷Iܰق!#'ٛ`5x-dݘ0}NR =|+𽮂 Ђ}ȅf;s9s6\4ɏnrk&i cMYn ҋc{=c^cxFB-8c ݱ2q< "JMԫ`7&1xBo'RcxmN] .Ztn,@6KZ!a|-qcX$i)9e-ČJr! e\ÉFd"ѠZOxc55(SWH>hqswz畖fErѕzK#9UIAdZ_/~)l;k1`ܩPWÀW)]FՋY}р"B~s5!.0/UdY*JFavKp$X [^wͶC:*,=, ¬!tĂ q RL{|[ [`5si* ?6VQAONw3U;sA gx_û^w3`|H*j.gJONeS3PzM᧔ځHr#wm_Oc@Wk 9+tw|6_;8,TGqYS&vROxz /4Y^>0 +_Xb$oYH8r `:LR`uY 6\G(FRe2ZgJUCc#ƫ_-ON- _x ȡӾgT2⊱~$$DWnZ+6 !bUKLq폞c922B[OX9I]:>pڄ ^ E5EIăϥB\-f O8s)u.ʢρ@ 92Jy]Nu[qtĤV> &|/T@YYF*}C8 Umӣ]%b@ S^3O%o9*= LdaLM,26I4`C"O@}Uc,CEgo(z"a~ݽ_xBg62IL\;. L.L!ОZԱI2Keg: >yyJ%p]uvT葉`(٪sӤEfAHRLһTm@^mÈ7@U :&U#FLfF?M$(|d9/ 3֓%.yt=i\3.Xx _˦ƵRI`hCgH%n 桿`l0c[)E"y/gt/o]Чt}^_Z}!O0C- ,89$}"Ʌ<JzUt'G??3ktbg7k C9 Q.2qJ&A xX` bR20}r3@Q2`Y G5@TRyϖz+!ޛ}ZXDl YXYx1y}^01%sz4Hi9{ǻKZbǽZo~%h4Y x67RǛԐo,&!h ORז`@=jTyL NiSl^~{{%UkeVlN !!xv 5ĭeS p# %:6}NƗ:rm#,qu[GÚ\:]Y%PI >;LlNM8IגD K# X@hܶ H{/ƏϑKY|0NcLw[u-{kێ0,{(PBXZH { e۝ ;Zce#h\f˶۰}mK2Z'6VVwZFW+PZf.j[@.\ä*C\ fWl>L eUxH YbY,\UUNͨ",DR8;C/[t DM5aCk "D׵3hqG<"wuj +DzՐlFPZqu)̩ cU_Ÿ8Y&gIa>d?0^ULq,s G)FC7+'8-CqӜ-eiNN.?4T1S5z2QWKPZ5ŔYP=e*XHBg/Qpi;YJ#XyEkf)kl:7n m.2G9{/(OzB_|%WL ʈKSx3|5wU&V rADLqѕgU 73\*Cʹg`ҡa#t"]"%aV!yD޸OUvA5>[A5A7a0"{{͔:D,Z{Hm r>ܓ^DFP0sUnTp.C !mB`#WK:RȄe$N`nْWb) {# Pf0H&" p,O>>(B&F_Φ XAIyF! ]xN3?W}uT>vp}+=H1-H 8Rƾ'C!21LVytsIWxkųO{EL@i|(6^dH ԰07 nfU,pPr+Lf, ݿĉv̭!!'m y*xKMEm+nGR9x]Cd Q1 ]}1ȷu\QO*nUrd:yf@—KEMyN%jqex(di Bx˪oN=AYe0|XmP j:M|WLK)O3Tt[G@FsmA7X * HE0BzyvzB兗MVH.N2Dw<_e3G@á#~600p LPu*Ce0sȑߕ]`  x5R-P[Z(2GŊ";4}L2$MkY3g+B{Tt41}q-v`X9UeEI!J_S}Da4/H#N 1_u8G5wQzUs|][ZYTfP#3[{㼉QW$ЂR8 Cx۶Q-2:Nʊ=RVBO:%DMsd4H^6x-kA(n-Dh,+}l zn7(' detf9JZgNBĨëuOXx߾m*Ld=Y~j0.wj ]30Uj@257hfٽT~E8:ltSf1WU*m9`0\ ,V@rݜ8qIuBl6$,K!;kۙZ<>i{9ړ ~)7_CgQ$nABu*R}~7'_-;,Gjćt}z(9,jq#(B%v2J)F8?0@ZiYͿ.P'1 g=f|UYa1Ob`ND؞SpZu&b(c|-cqV@D+a&.{S [.^dÓi|V剔 @%v1nyw^ -dcғ75}lm,m2"ש`*.3ۧORfZc](;f{+ԤEd+_xgaY}HA6~VOMS>=e~+U%v% (YȮ9c6օzD!*rÕ8sX?uR1.I'ݿ*qrvQn\m앞g7\!$ 1/ix*%:1o>K txh\77 "p$5[Le˖LV`?gcDU+/c:T?Tua[}4' ƾX9s?/>[:~rqFdz6˂sjj++9QVJ49xо&qu {[ۻ!!bt-);"c +K8^T_UJsz(;O[~fǴ ߓG3 v;ڀҞpdV}caybsz/cي=JYKԺ?xRx!:dY D)p!`[]coh740CSO|oh>y0?`!j8s@<,;M ͚J߿iuXohE׵63)#  ȃhCpB FkL\XVnIyE|y*oJ3}x۪}o?t7<n{ J4m){@(_Eצ]>6pɪ |m&M>İK~>btod#Zھ_ZL3cn?ԣwsQWMygے_%산ِȐ#}CG!~^O jfFۃx!#\orYDP$G9pZ5޹/'NiM/<۪su,ʉXhбLh_QT-+%2s W[ Zk+`lWSeԜdr\Y0󋮲yyy)iɃ6 *$:M p2ِuٜZ? T@43,V=ڟSSYr |Ђ{81"`$9w.?Q^LÙ޷ѽ*D']SHr:+7إJ!yj4_F+&'@ mV #Te;>6^@=Qq]e]t R6 ~S e_:%3IFC5|it houAa>M q)K@pR kiFgsO#qG3w!sU85z%/aLe_;Ճ~-^a4/&[BCF.L3?)| }-'tr"AiySAKFz;pXn3e턊ljI)ނ# ^Bc0j˼ZZ`?A#C5ohC󛎯F.D )$p߂F%du{a8|RFw`VC?%Yij-ʜΠ`~`qK}~w;c2(\i3-4N֌ri`"z[& T)(R,/9@gK;; $$FJn+n %'͙-zZ-wW*@1HɄi άh0CqǼ.(PJL*3H\[| 5 ±7N ;::y{{JpIy$u ;Zf25PO3d3̴?y?!>:A?r{*`ƀe2\RdÒPvrNtwoe0Fvp$@ j',カfdyOeiz$ԛՖ>F^N7MǘDdʰav)5lg[6-ӻ} 5l]? vdF ++9kVwZM zk A/04Lߥ4'8lhrOmNf6#)*Qޮ)>;RhQhR8OkOc` Łb*[#{:ٗIB:ALn NJoWZ?_nwmrzc{{liJw?l݃w%atwұm1:NvlIǶmޱm֝933}UkUz̚F/rn$ʃ~)T颏+{.]њE$l/ 9x!Cѓ)˪L :'nӵ$Z/JK s$S2&IaH.4ՌDulӖJZ!㋑*j &˷9QdnWZ'լIj5]R.B̐⡤Ŏr{8i+֯[eu4~mZ|Afgc'`pTRѤL퇲ˮw=*}RU9[Gṃ/u/5 Ca4:+7?cO%cGJ R/ƴc Rge.,/l01<#lh8uy &ڝgѢQBB[ӌWQjhad}/ЍnZU u.K5T*4xhc[1w];q9 &IJT $JEkH5QZ N: C#)"w{8[g7PĐ:,0Y[ػD#иdX5"_Sh ?&KLv=0t+f5jQ*֊",%Q/A}FKF~j=%uFEѠ k4aA~fw:i;ӑ4>4Ccg=jP 7moajԮo`_.3xʖ_:h5)mC ,w Q0;[քIi֮ƿP&v~]q2 F&CF2纂b=xB0VQ L_KnIvƐPoSgU~~eqba b2> _5Pf+UUxՙF&2ĆHT߿tnߍ{&0ӛ%9$ii􃆢!VY~&yER|b=2No0?MJWߗlwZic<7-rO_ b\n׆2O '\aNWf]-JB*8ӗ`Q,+$t}#Gca'˙ד)>nBDs~3+b%nčSqT*Tl:dD$D(3&s>=4CQT>z&K ϪتSW.M20"UuqH ; U"ʷ2Ct* :li<3m'@,PN Jߡ<ؙ[%ΌI`_u6adI+oz<ߖKai[sRN#QVg qqt_eĬa% ufРUb&NUd0drѧTS22غ^t8jJA-+9yFdJZaؤwy5p:"bRM;:èӔr%̓ksfaasqdxg,-ʈ,2Ls54Zh]7Yu ܍wcLz}LhXhr6Q_ eV0{ˆ~.өPW{VΔ%ɷ{{F8 ' S/D!cO(lq?H}4%}=x#g;gMJ~НvⰓB"@-;w t VW^nk5md-  ~N[o^W(>P0\/)fsKoy.r?+"j_pR =%/?= B@22Z^7FEۚ<_/'&{\7wz6 Wy}u6n,^P?a.v,MćAuT@C9]#?>mov9-xgjQ;U-8^JyjL:;ԨH%дb@Sm26OHà_ GP1Te͹iGī\[բusw||ChУ)ʷ?U͕!?[RJѺ;zl6w ^_&xγfVrqyO ݏdr W@ּ懁X=jj͌b_ZW&Sm1o+%,a s`ֹlZ`#[V{CJ"Rv%U{ڕM2LB5ך?W9)Cvc^sc+uM\f ݫ&)7"ljq%vK`pB{}W7אv2o![]2\qbYeJu| ,h}b' ?)>i\7<#띮FMJlIGtCr<*Ct<0@|% B %?pRl C݌&j*Y;9Goz_-gX*N-pq$}'\/WYN@b⭠ D&aܧ|AHtAeQuȄK5@e"bDJ%7`.]#oGJa_.=fsqV,?g A(p14&~ܯfkڈc}OH(փVD&Q)1|O [1q/8#6xX$_`.fhH\| ̊rM# ?"g8~gTQ%)б-5yg:z;na茵9dEYZ:ذ|?S$1CrM:EϿ$.&%߻Sϫiz} qUXkUUouﴧ}IEͻ_v?Lzes@uXE\Nk8Í7Ԫ#'e\w|fap23-axI,vRM'1(J~&YIˋxy Y>[NaL%;EIP0vwd ڲW;Okׄ:fyvi-dn<˧\N$rX۝huۉ0]/DgUZlJOW|_oin()5NӚ[xMÅ*>yV{.TQ۪`һ/Um.jknUؼ?ĠF8ӍDU |tn))jF:\1?5Lv#ULZXa93A[e Y29 ^&e̗EMX9pT%hnr]вVT+& /8Þ [)| 9þ@jƫԍFm1Z̭t=,v#z=νHQR=4ڝ˜JsC˙~&& rvV'ÅfBf;Qij64hr צZxLdGꥦɅUOiS;ptDn&{sL}lT@LE-.fA,s%xJ|/!,#a/W @ ^:n!͈wcpM^ǹ۫$OV*kBaM[U)Z`xKt:-lRqJ ._\z4'P_53cHTi,uzuEJ[ީ]c\pUBwx8R6a_Vf<'Su~vPi3S;~[ 0„ZtI (G{Z7)<-p@ HaɄu6ԿXR2$r$ӎr_O&(qcFq7-4z:Joõ5qv! !4I6wD_aa."8/0pŴ9`!v$DBs" Dž?K5y Zߴ QRq"v8r;A7}U]…5ӓW}o7,JPW-9lwɥ~ߋ>@{ [o4ơp~c-2X}źc!FĠڧ}- %4n'v7AUlSByg%,}Ɂ7hs4ChVmeߍP"x7Z,W-72qK RJG }k>޶DLts$p3ڣ [=C'q3^Լ)f|{j=r {7ӎA(66ɺzw~&MJ7[5*tޖl@'%`kC-cqN퐍a3V];ׁ l14x5 bQ- +֗Ь䗍(ֺ95ՁQgsAqLۄ댵kDS:x9{ 5Tol\5f |_onF_Co TXƚhE(aM| OYF-U;mXfkgaF\UDj`twMU#ȘKڤU-x&}9u>GEm+Z`Jef{f Eɶ_gɡaYۮ~|'2]eMBM?M+s-2i0Yyx&0l72$qz܁WTᓍfRCTtlKAMazGV}BG 2U%A`>L|v̙ɖG@+ږ墳,yA]ƿO;1Yl89TaWt+"2_%s6q/(4  - 2Jk զKLbQPt?v2,;yq{?F^~NvYs%Qה5dK cߦp?3GRE>Ų(~ AY!*/q_W '@Z̼r?+姚PÃ4U'+8m=UϘddœk0!?F2HO7~iQ,?Slc |#\Y%2 \q *k|bA&iBRrT|*sid Z$f1c}JtҷR d= -|b*IdanAnl0: jNE,"k^h䭏f6iEy"h]| [eI$OiAv.T R%q$L<2Wb{?JsiKU {BɼQu&&q_|x?,Rq^^ejEtŎgDw?0d6(e]V Lm 7 ԌQ1ܷFUG [.ֺyu]>X"ŵX^&̥3%g}2Ș C%RU'~XygwU9tR^>vJ \~ v#j?^-6ط/U` szRyu]+NE|޴rAk8нMZWR }g.ۉId6HxfpKI,-! 5=$~hZ "Zhmځ BGpc1K KW?nh(򓍃kOz6l(,:e^೘;ss:67A4HAPݳe e/: u:VR6p0BJ jR eSbETK)' %6#`㝈jījm[7 #->:}UAuX #"oi#Z[&c*tpe?q! `p< ̓Y޶k}1m߹jP#C@w .Oz@*:>5jqj 阭joX/ɤWJ# ]S|mYa w Ik?P2"8 c}0X9 FY^-%/rL:W r+ͧkeBUK.';94f}Zil8 d 2k$B%nH ڐ7ݰd":&TG=9jsI2RmY2V`gX2_#v`H-ZVO.,+{gGJW)bbf;5)gT~ ϧ 8׈RKaT1 mI*(q1#s*4[V- LL3YY:3рi3?ZFr熟rC}5!iͮ=$δnϏbS~#N8PL!K89Qka"A$B`K#+FqDh֨ń[ + vgĚg[v %#Qր dx*SASc2ep&/'m*9?~^i$֭Mtᢋ>;)QI|l W:#[JHAj^Q>Tԣt$&+=+~Fy>y0X\]~|͸XwRfK=fkw2l|{%\ l\jjCc2cS hXH*4Є9Zy^PT,N#~1dYA3}X>l*R( +*ǚ&0PÖRwQ[0[IUP;|UoL˯y(/7mfgS0O\>z2 څbc:Dq TxurǭXhJ@9`^B'+P~呲Qz5jW)}{>iɏCc#-A.qlb y'T4K>+ftpnL )ݖ̌!͂?}Bft=M:O95e&5S 1hڂ inI5-(pyd8l-K|4ڭN6%VdkaY/A}MƪPA~+&ΊMC̗LalQb6D?¨磇EبQ$vw‘uyHs!xP^j<% 3ns{k[N51ҥrx%g7V饣a71d91V5F r)DWP(b礴̱٦'UFCէʀ )mp6왬L ګWOcJHew极oQڵeU))3n ݑ:ùǡ3ś60c  >oԋؚ Ou lHb ;rjfa 07']XIeaDB0z >F͒LoYh]M\vr&:uP*d]VLJ1+.lLlwDN0 b>VB?_xޓu` +djm ?$̎]D: s=Tq U-tRρ 3MpZt]"]?mؙ-v!HdlEt% ɛ,p'kT7AkHAnhOdUcPSwI()Q^Ao:MӴ7PIP*W3 iZc̐^B=0K@jw.70QwGYe"X]\ui:UD1B]ōCrdXr5 Ygƕ<Β$. l09`F!Ht1S_*؃YzM p1(S0 L*MJTIq7WkV%K3(qqac +.ldK&inC#23pDZtu67LȶNG=$7櫒11^M7^=:#21/b3TK+oOճ);Uog'(xlU?hg4T Hɇ}D3js+OgQi,1,Lƣgj#."+!7oRqG E>WDA5P~JZThRΠĵ .Òe]s6Z͞+j/ޫ_x_l:77YOf_z|(hA_KzoUqPGς@wzu 6(X@GDTFZAZl. f Zc>E2Ϛu;/WF?0hPuq\t޷1WmP$r`aEEO/g֝i{er:qOSeN+J릜#֮s4"dSA\KPOx%ęמpD8hDFQ🨱I \.n#NC˩o/[O،XMoxf`M>ol* >rOl^?#J*0_HW҇p |1dEʖ]`kzO~x*Bc3XP^"G1k4+Hm܆pfGn Ꝭ6rR^07%LNƎke lo_rqmbm"MP}@ !+WAP͈g@m":!FF1:pp\f7ng|^-Xr8N~,n48?tv80I68}%n8Wq14JRщ|gVE7&ؤZPֶ`S6,2W //:ฉewɠGc/|`HuV(ٸDv,'?NA/VJ0_ݛ[{ W쐋$*SyF&0!%EƥUۥwѸJʙz?|X@G\LwHy#!qʶR>sF+Cڨ>W>z7 oN+b~ Fx<h#g G#ZT*3mǁQ㼒ߚץqyj YlC_ k.EؔPa{EҒ[ucjB*>MLa?"QG Nr8J*+W 0Ež+za$@bp!kzȨ1yDR1/+܃ LX.5afRx UtSd\ CP6d^eɗly[SM򜹓Om*_|He7өƭ5':LSA{_Wz>|ECK/||wx<ЬN!^\UXfҜc큑,(V7 6C# ,הo"rJ"q77EIV-ħX%I`(DX_pZ:2G l08o@hŖx{'ΔtS'ؒpdkLz๵*n8wz,vM\z;I ?LPv*pC|Q{9&o?.1 ۜ=UnqG\GM*ylenzL{_Tr(:=)TKx8cluRK7 90?zyS |z=ٰP1hO|N SCJ79u͑n9/@Z2xP-DO!6za:BeiYݑĀS\됺0 1F>a-υouɦ\uab՝_+jSV̇C/@Xˊ!\TgB]V{^f+ermKG qj_Kz]R2AVze՘±jR *r JQD>7+?"&?7/ T 3J7Q6~є~4H:!MO'5`nNCR7 B>ФS۶{d?ck1`6pn5_:49LN p: E=}R0>Ӯ@&9l_dIÒvfPg)UO*CL%κAig똥 ;B7UCQCK,}ٜEûX4IV\<)tcIVYMwЭv<@hN0̅Q0v3Mdc<' y+$@$Uyjq4j'\ͬ¤S52rHXo}~~+PVZm4yUMC*רv?rFQ4JxjCi <1#&d+ᷠFIדM\tri%RSf3;UZiOx{W'Zq5eyŜ7WgDiU1 lJ'hVn >.įBsW/r:s; )R$ʱ_Z]v eOt ی67b|SPG+ >'dAIV|ux ty*ъ)?ť/L|b7j2 NJR~zt7:dԾĺt@ ,@`dr/}b LjYB!P)pba"b/hc?ڏe\{M2gfc 5OlɡZ/@A̓ToBxWJ FwAzVWr| }]eJ4nqD`rzѝZJi{҂&ljZָT0IAO]>YJ쪘0O:2щB:_]+:gSopF/^Km! 0o|;AF1CJ/[F/;ZXA& "ȫ1cy=N󵀂xJaE^k(ӿC{:]?HO&__|rǺDWo3R%m19Z?S 69ٹѰp>έnn%Ƅm`֠(ѝעINE]}J"̓M(вtECftM $.o!#*Dsg`?0^ܬwD,n"L禋b%0(>\ C)XR"W]p_&WJ pSy1e@rMXSC-ҥ%:͔!B~o@AN,cC;6z,ǜJd#*wfDBͥjsuKKcWVyMDf^S3%Z|=<PW{PB݂nyzCR5KX˝je_QDZGOrدX/Ӳ.d6rޘ[+X俘T͗RTc Ug0_\6Jd|^/Px~cuqdysMт((tCdĬi.h0ŕ΢d9YTv% Dƛ$l_ۆvEz^IoL|ja _&Z'-+ gDmEg?qo{]kXLh=0-y0yd4frKc;4d-nzx;t> 5|(4\P>~H>*jlwqԛ@-Kl*x2Mem9ZH7Oc Njr %c!C$Dg~dC~/N ]`!6 Vǿ}LjñSك5L u N;)_ *T̐`![bkc*+wa}>#Y0(AwΉ[rmNX}$b/Q!sCN 3Q)a'B٥@#2Aε05#<:,D8M(mNcl!J~88H*^ SM |EtJIur|YDL/IVMqicn6>ؓl?<xm\n3cL_z(+wJ߉{g{7h(|9g oRmhE$0d~7FN /IBL󔣪z!fM]㬻>Mq'Xk[_LCA Bgbf1bn)0&tE;cR8dBء \U8q(r=!Ymýh1?d&̴S<=b6א'걌8sK $N*_4_bnRU}#((1}N ,KCP=uU?bV㯷rjdI(_(d[k"nTu]O@2!i4mh c_|]><Tj[rr*מHVs^Wft"^t#̄T 8#VWd!w$)Tl ߹%7Bheo1m9߲Q4vf0FTEi,$.dZoqf3@̻|mj`Pu߲+Ue5&JŊSJ\T=.GUoloAkUcIyok.oPa 6YҍOI-Fv0dVt'oFL8MLr!^߶3]^ M1V;AtEiz#+_l utD{#vmA)v.}u_Gf_wwTG$hp %7wݸ7.w̹snUzZիydtT X/:a= O*v&@( 7{c*=831 sv'1P_*V8 6 n&䓆`} +JMn:qhIU绘_]z&h8=igtjՏA¿ j ewe?]ʿ/1e@ sG ܂I4e""< "W~ H)>836HHo:^z4g8VyPpb*8o\eվE?%_:e|jUY[nCvղmE)IQ$7ILahmRZ:TĒ]͒g8S|.n|ɏ-(zŸ͚΃^M'$"CQdBҴg/N4Q3%^p$Z2:$ t$S||xp #I@&%+%!7sP$nJƑPr1L~pfe= J2c*jm=\-0 ?P /W8Y\X((:7l/Y%S^aZ,ͤ[1&3"L!q-I~"|ha3%¾_Nqr+WEb(1T(Tؘj@ȳTeyU뺈|(cRG3(P:M \ʕ=y.O U/,A%J#M-.cTSJ=U&.5?Onhce!eY{nYU}%]i=(C 膽.kH1_t53`5{ghw`"Pu2… e\ TţF^[.q:gQWC":"c1V:n@K|+F&`F螔R1%Ȅeq$G–숍9Z6Tm[~V)u 3}בK5}bd[Xj7  |GaZ} k˂Ri(~[n%xXߺ؅c)ULF1r$(PzO눉2knAwZ@@z":]E$D EӋk^>5be 奃?Rsz]TU߆tv-w`L;ȼ^Ud4. jPnڧ|.?"&dMȞrhֻ'42-*4*݊a С楛ck~.km_ryrS!LPpJtxoYOe"$&sмZw&nASIGnƉIS2l'@ %{U4Y~-6r\uf$a0jOw>av#6)B>Q'<Ȥ]wI >z>BD#;u|xxVZ끊=D6y!ܖsGpG<+uz/SBZӭ m!)f!!?˲(CFc$,)M[1gcA$UQ*fljY2;~cANo٩sb*4C2Qǥb&7$݀Ҷw%ӸdϬXٮD>,3HsK?*_WAwء0s0v+6q@õb߿FsZyQ`DF^PH% `S_qo٬jҗNzqġ.=*,!]x1:[p:z=(S3x$Zޞ6(56γ]brT_מepYܛ6GE.Y M}b)UeI<3+!cn^_n~zgl;)Ohf_k C6: Oox\i2xb`3UH5["Î0We|;e[Av}TqM |极Aѽe~%kl)m-Mw-֭>8PDq XU E)_EM=J>v6+Jۓ@z0P('d֍e^(u6+PЪo%Q;O$P5yPoZ1S Zh'g5!.)λ~✢ٓSw$,($+x6s c8͇;"Ʀz[fkQS+bj;-u)74۬e=:T#v3|7-8aNOxszKxIXRP2bWի4HnSL8Ilo2:=۠(prY0YL kG 펋f"º2THv4 G60Ӛ С/CD\w"uvcK8̐llydk65~ܯ(~ DSŲ0ʴ?"͕aDBمE!FXHrQ 3P2xeء}| iPsAMMx'[ΠnOtãan~Ѳ8-qjZ`0A>_N3n I=ٴ`I,/Md|%4 ;U /lIGl b#H(xME/.puR)K(י &f$Θw7YZZ_b}_XYS&qXLd RGOΪ0|5ذH^-(3f`ZeQNKȪj<*4mU~^PcvizZŋ&%Sm v4~YSƹsrV9<^Dn4Wcؐ}KJzX^@J^rZW3%kfKSb As?*EcVt,|Ytep9ZF~enL;Դ)'!P0 έSFDQGoKcu;3B#Cab9:}_gi$"]zZeZ\¤o\ig%V(RPE_#>sNB9nK#VbTm,DjAN>r@xPvhgdJ5#R[`'l.oqW[nX=wٮW{צlя tHh1HIA E&!:r Fx8L]jyPU;gc]* <^3\R<:&x DS·J3< L/LSβ'1 7W~}?tTHOXQ+6;WJ+w '!8MðWy~(![r/MUOopH;S?0Mj'fTMMĒZ볥bQ#睸:])(K&h "$H! ʲ廾+Ê:,ag+ꌊE@T89e ]lCr+FUT CzP6WKJGOT{_򗬕n{:#z G W=8q3}E R~cv~o.lDcyؖOq૥=D˪% 7ežBҫcR&e-rSG)L>gq:ژ5nJ sZxIiғls҂DR+Ϙap$s{SI%tx "Lj4N)oyT )#!KOh&bSR'AM-7u[%Į7( Jcq v GkYylhVkNM4EZΝOH+ p&ƹ|NTuZ<@E"/IzkMϴ/>NӫKNo}C .\>=I3!>D4hw4@ZB9:(zqK aE2WؠB_b UAp1v<[Wѓ g1l'oCAz:C_l,e Ja3kGGx`dU`G85}̴XGXT ۸140Z(q5Ee Z_mJOxݬaj8TV֭jNcD;jt:.:3ib$dr~H3QL%ŠQ۪.MКu8[qv`mcja"-gDZ{0h8(9mTԥ.VLgI$mW!>sD/4M }kBږ7/1 )Ru=Aou˂&%Kov~\{}wV䐵(kܮ^~[˹(lStےsS4lw]7-Ť$,.N*ȯl//_&|M{@?튈9T"gLZae߰Ԗ9 )$;,Hd)cxyq윏!FgJ  j{l!'VV7ҵ> S62r]VagoUJE9o:_B, _J\  vjAKpzY B}NTj,.m_uқ~NV< \mi~]%AКƵ5BW4Mf-tu?8|RTuQG׺ŬEP Us@P{"q3 r$ɫ$%]Ι>S6XlfG̉}thYmL)T>X_4_Hhe$/w'g5Ngg*>6@\^SZ%ur?O* '\ -ܤb .c QR;ʵE;պůVG~m*Ә(3:t:3>f |e\ɨȁʼnѳb7XF~iSZq yn娀Ssm!,,V zWigKA gd 7k[m/C"Koao"3U NRNk7H,nb<@Vo?l>aFس>aXi/}uGįZl{6΄uDR )PcsDe\oEX.#Ʉ݀ O<892n^FQg2ԋI9޷[ܤ?{׍ӝ/~1`-P˒}a&ACwõ.r>>- 򭎐s!|GQ29Qnl֐]+$d2.nAUm5@liCOq]"(`r Y)3ZP?xGucM*ƟZD~c KML9\hs%?ӻg'qKE@3߅UOOU zx80\Qݓ7#d iS㒚[+Yb͵ |T\! bl-{|z1a>yoVhVKu~͜;-`Jj d - 6NɌe-U7X|eNq}^Ҥ+hsbmu6'4_[d$lE߈{!2RGIK%H|ESȥM_㦠<9&9Ê&l@·~@6|v̟%hf-s$t 76=l[ђ+^7f"4AS9_q#: ިWWh:t*ѣ cX+];jw u4G -1Ωwm|/7fU_6pzSlsmdi}{C/\jƄz_g3u£O(ڎ^@<^v5e}y.ImoӼݍeޤR֜|sK_&| _П&+^5%?0%Z7^Ŀ?"Q)2٦Ov8V9  rMX@cT+=RDXdyHvKmNr@4"̡)hdіV<9k E7sJ ,/JbjG6We?qDM%vi?4B6id*0t˽K#Σ\c_Vl$ޫVVa?=TVs2n }TYj`Uo>o9xȮQǿǃ_7OPxg9|}aޣ^/$^Beb)H!}ss͝a-- [JW%f 'ĠǥP.ްȇ/zݗFLNBg6@:)]Խ,wP$"+ow_nԆywxReZcjqoϋAb!#QD_tHjjOl2wnZLyĮMitO5y2ߛ/@~3@YքיHu2dd])*e~{Fex0mKR 6Ȟʍ, g?gd:T>$]4 c{ʰYɵp9*n'W\tpr7Ѭ\wKLh9Ev`jb`m̓*E]T^&ОI-P Gc#}K'8Nrٹ ۾Y)Ԇ@weVռ"BB K 7P۶ X;<5پ34^ƝT4TLBe9t{+h?^P@7iak"8 YHY|Ոp-XGvWnLG23oUJh1*OLDDn/z T i~ί4Fp%;R͑ϿcEOT1NƜ[0IHKOYd$ŘZkj"4*43TmKo4I׳(V{1{comfOX{Ne8_n矏ݫOJnƱ%)' ߝ+COLt qRoi MA[9x7;tS&̅ktnԜͩr7]u=|j>r!G -+O$_X:lD=/(ʩ5V7ʒO9G.Cŷ/sG.O.D]Z*R?wuܰC0PJV \9-]!>'AUĴ a~ 16r5! `2]ooj r'7Hë6-nI55w[N 8vD ;U歳DgEilB]9 xq[ 3nB.5u.܅¹to_7.|BqhÀr]IUo9< V'"zNEG*Kfx䧞 [ C$31p>آF1_9 0[Ίv wZ8x75)R̕3tPkݼxl;D~qW[?ކw-#;";7_Ȥ/WW7?XM2]?X"ѓ9EN(^BEe6v!*w &~lnZ`ȕy(FSa i&f3MoQViNbJ'SE8pIIcf'̴{;%ũ{9{Ҥis }1Lt'\kUf9x#>-_AuO3=#ynꌺI#u'@7ˊY`&[kD4߲=@;zd[dVyN_ݿȬe< ڄk?ndg9R{tRdP Erč3i,Tt?Sҡ)"DF\Z? ~IcqFVcG ߺNP!B.0Ys7UIbk :e5KRτs?O G#8B+Us֟I7T:+nuKqMN3hZztͿ밤R'F6}΢gF?/nys,-7P%!ajeO«.VFj@"7]܋syq[.Cg໦7ŇY%i!|JOmEf\ 70Q d]o8DwLN|F@# hWޓ8'$1a:jN%9ecb E?-J~QNP!ޫ `NQ\v>%KzwxW]\^,oFR\J(ޑ P+4R&Ƴ@Iyg{Ӱ_63֬@W?&>_WA )daD:Ifm`_r)?axy- VoԷ V+mu1x}V_\ Y0TNEjEժt6[.vg,tEFVcZПR@{HCMʴ"(JCl+ɼL`ͮF4*vV05GS_\{1)dnVE=e83}@ϻٚӾc. Ff @yC%mҮȲ[!7=œ! VDFI/X3x%fT}K# gzzyⷛ-[y[D:6(ŒAcOR饧&;=H) ɧslHTyDk g 7sNR5]jn1:]|m3JSXC~4aN2/#2r,#UY؛v ~J8GKxO̍ Xjo=QpPvP4ŜҖIM$)M{1Ug8 kFSU[ ۢvrXWj$} ub>bpX7pr fH1/)E]Z $Qa!FL.M\TVv&a>iUp<7]vQԖR}y-48$6$HU~̙KT@sԦ$̟>6mR{a:"O5G7G w'>xy_W:qԒYf:A"Wi)HwvIaq+Z =EMmp[AI,T9%Xmn{br0ϷM!Ibv ? Q8fЎ9$ܜ5Ë[/Ӈ'D'-'uЁz-M%x$#|9P\KQN9Y~OO6Mo292\u)Rh:EZX!ck{՝t*OcFOofXwJj-OmS4GvK`xt5NçQSMr==ĕ"Wȏ6sci/q@}q{٢sA׏!2")최  $Ƒ3U{ǞD s(6 qE[*lIo%+ Nev F#u04"Ŝذb/7-}u]Z0MUK[xJh -aQeR, Yn<.:E(y+ݚ ^n;)&gO.9Uxm;1[j&{7=h`^* 6g󽫏2u`9 x _~Ѩ F E@n!^%sNݷtLs)2?Xi=UʡUɤVae YΆBqy^aT'L2H1Y,IԢbK3+ÓO =ˤhG#mΐa+L{T7{ l}AxChėm;f-hZx*LQ MOJ+?c;T}ue'ї u~eG8D>nIKЕcµ Zs-5%ˀ@[)A6!k/UD&[&bD*Bj$# -%`ߐy雯pn:U'/Y=&rul4+L&w^3ӻ`R.@R,MK6֡?u%J@|@eS͐)t^3sV~ !ù9LDٯ~zcYyi;ޡIC|D{&ܯϛ*-_aw-Y TY̫{hMqFr*NT/Fh,QX d*+ֻS5~!<& J{H]*^Z2W{ QD&ȧrHX}J)tk^5?I  ߲< F6I O|F {͡5pP-OwZf.]\P̟Lf(p#~AG>VsQ#IeĨd9%6ãI Smi]+ zj&~B<h&6%3*'g^ܢs>Mz@ iUѷ)) pcvg~<ޔ`R0+5|%2;=DT<ƚڥ8=iû9ׂG`E^Єw-m?|E6l9,DËg: 'w  ]1wsU": f5&;* 3EsŊ&Fgͬj`O#<-<,jMǯ22d\'._(S@ʌƕ*<"(Q>뮮 >~p.5>cPk3SѪ :};W#Ζ_YŗG46.F>4X.٘ i}&}nT8$cHa?M& GEQkj 2Ńg_6KU_q0&UvXngWܚT 4}OgC3\Aխvm3X†}5\KRg˥ :'PGv5$srfccb x% k1lCL' ƻogR=M{m i>U^*'($>א,.D4eBI*sӺf&~^cbjbΓjU]0ؤg i.E^7s/vDkIq^t;tSH@LT6͙ }SǢ+Ã7J&Cf@Q콪Q )qa&ys> r92ǵk cJ u?O&*F7^ZV ZrZDH-^_&/WtOj~鋭11>D9j/8i{;:!%A(_aOxqv("<9W,r+=Ayo irMWX7ѥc3 (W"  s4dX:vT~1=-IPcfM3cn?(u6Ĉ_2, kȍ?$u!GOEW;FQdRبGJSIk2[{J-Paq,4xҨ gV6k/~>^B"' Ɇ5&_3='QO"("P Cxm#,a6;#T5@,~PI?W>ħ0:R,}H.k6VAPM^:%E\[5s>λR!MӢLl)u-eRqi[D%B[跳5fB4Wʋg6no޻|ZC{[TZtʞZJC#aL̐J9f"Z* oawM*U\eCG 0V]0l?X.N+=G'Bb@ EdyaGdW<;-8KSK\>FxvG A/JHͧ)fwLtMc M'Eu+Q;xEZۤ¨U3##@KT]q) ǻ`_:L8(O:N/ȶQYEY{^6Q_Ijs<-]! !G\Jjy찈]a΀o"!uh־ZyTaW=>.O$ l;P-ϵ(.vV1ϐ>;K)JԆd6F{e>Fu?5ƍ9p#N]e\X(p>TQ|>?|K]([; [ {AL 쎸͘eK z,ߞK=53UПл oGjVkP>])ZgֳJm2;w*3j9:Zci+鲄Z$N71{wU3^j#H%j=3xYg 6b2DOJ;DS*~Oμfmail5ι{C/UTjǽRlIOk!.+@\7bTye nAc 3HF[x%-$fV 8$s"d|fm$8Y8Ïx4?CMiCy$HuP+XJ*5o?64r*ϥj\idǤC>k=KcdX,,]DN;wH,=e6o88d}kؕƜӿ%;ݲ+cbEZ?rvMP#X|x2A&VrءA7[vGU5.9Zr5!j>?a4ԧcCa ص?4Lm>l_ԠX){+Zz@qD6.Rq' Th-r(uJqKM񻲧Mضm;Y͎t۶mulݱmq?;j֘oקfUպthƘt:;L]"hݳ1^H>M:ߨ5Fhg[WKPKr;C;ּ|ݿ TëP/+l{]߯O_:gycZSR`-r!5[馿_+^)Chd/HMƱMFe"Rl~CJGXLr4:0P$w&}E>t1rqzԭr0`wd"{]P>x")jSyCn+s&N={md"=2 E#>tkiarVG6m.OxAq'Ab֟Mu &bpjR[)H[ Cq]Cq}̨Hb&$))-u^|z&NbWKbȍ3QqX(МJuzXRU4i> UG 2f37oE @dbX6r(颌fYxfVG7;IwCڏVZE/qGȣ%$ΐ-&9+ׯgT8F>6 y/D9; \ȁ6, DbF7E!Ol,H8(D8r*ّI7X/'-V3`#p6Q f)V@$BC׌Ȃ:} ]e %AAYJ9ʭὦ _>\0X EM6vg7n@d9F\Q,>= Ea9?v"v}9^Z> ,׭]adh#w5n7N 2gcSJmB| ڒ)T VtG@ BQH<5sa.4PDX.}uCZ|ک/w0d@5ôUߥcFTOdg1>}myeɸVV DB`f/aƭYB֫e\=ߖ_L[%yh!0qpjK7ʍj\82a `W/x<jEk]EE6qɍ+=s:41/"V Sϒ%PC\t v/$/!݈^)hBQ֌qv_H"AߧTj'8<f Y0V\n%ȥl8!egp4TM/p[k J*jYZl`:AzP~s ء>97G2\mHR Y5rk 4@@|8C51˩[qk|3>85 [[GܝlQ,\gs1v۔Y U"T&Ǜ`+bzdxd#9\r |'f/ܼ@0bTK}rtߩsqaO| nZzۇT`kC bu귆=5(;f܌2-f0NO_^_Vω-b /%rgcbI2(މ,= zҮ؝?ZI|T4Ϊ/ `RGz4gtn{Z\߽+^|AU]4hP1R 4ΏL1\ 4lĿH+ =mƶ jVxPg ]Ώ)Aϑ*F!~U)T٢Yo_cUK\VsPkz*!.+-+TRTS.+Gۣq3dp/M\ӑstzTQ6u:""T (kG;#wxrg:;jb$)^IL'ٜUP5n W Fnl'qG+HvyRR5J܅x$oϵ f-CzJ+A6$"mαvBAMIg2`vh%TaaآIƏ2Ǚ}U~LZ rł?AH04L(^ƕ#ՎH#lXIpSN 5AˋvĨ7] @vTsT*^,m]ӝh\LͥE2KICOܟ4o(#G= buH lD߶r硥Jme%wz})J"~P_TERlʒSbٌ4X>)i0Alnߜ .?}S]Do$Qxa_Od;u:#@f %\Eǡu Oj,$f*Ld[1z |sTHdf VmNpI<0P2+5#a2-v90nwThC^0U9S'fQ̉yy"5C;~JێAny*UWva>w\#L HmARl Auٶb4>3}PĥbjDa(YI(,/PZta_Zڢyl He" BCG/?%ao%@ ʵOc}hG"&P?LlϐŮ)9L){9ﯔY/%uu~<)Iwo?d7n9P{Zl6qĠKsJPT(aDچ$\Pщg"ғE+?b}nCwxB+\lȽ#%v_>⚖6 Vn䄠X@z=6WhGE?6\2Ca_wB  ڏK!86 n 6Fo\XU:l}Q͙?8eȥ[.#vSD׿nP6mQ2]mWVv5ui- '"U k6*=h:rN6tqpvX wEKMHMIܧ;uEsR ocrK43_Jqa:̚[5nbs`c擹0ȈIMלi`4zCY +VNDpfI!ffb ;@]ekŧY&TY˦J_ضhyV w?Tn/mǯ~=]c4#r!$q-$<.(~{m?w>9ZW$Ms'u_KPpb 2pxV/rni-M&hflV"x+:تB(#0x=8*~)20е6-w-VVsbbRSJS^h0Cn[GvHPG  G%y@[j?&2D^݈[wvC-*tyra2W%k "lzϒ< jrG$Yrt T17^Ioĕ or1^!&394tNb% ( p7^K ~2REf4Ls1QWoǘ]x4 u˦\2bî4ܖL3?HyZPQ@D&"^܌iTRO%@}e >xhq/fBR_>/SȅMmH-\PIb5n|efHeޮ]i3a&c"@?&Ф'Ita A|2+)c7JF9Z9ij貅mz!T|9v~tKä^=5Gwҩ 2b`^ |DD\XѮhn8"Lz3'#lЂ~Snb+G~}5A\\,SOwnA31RZ$@ee촆vFy嫝rdcZni~Sѿζt7:/ԨXTw10BES=Um3`z * vK(z۰KNTI*1893,._MH745sRcae/TRpU ퟽b 蒯e!mK( }-^Iu}~DӖ ft8dZ±8P 7fCp4;v [hn}mֳIU ߈UPFPH2П~l|Ռt d9sIB JSk١%[`xv}E=^N,\||yQnRK!ס6ZDcc>4< ~?f| 8UqhD0[o}.z͡'1ƚ;Ƞ \Y\> S4]o#F DV4ϔ m:Ur VR4D*Wh=M0o:~n5cEb ,Hq5{6'6{ʫ0#kM.It 5/C/\"OSQIZG(J]\H (&E@<?k VO Ȏ1ԝL4R/=q оxoGN,- P e3+k6H;{3E8{&ųjJù+.'q%!)m(T1_QpHpBJQSNS<xZ(0d~X ݑ{DFV絟Nm)@i[hb|. ZJ! s0n] IU60!`&:dJ9΃*6%8^gD~)ʀx0u`guXbNX+Ri ~!yJ|˹1BogR,R"QLQm3F K;.O {QTϭĹ˽E0-#Vg#IES"L) ȇ/$L|5K'p@AoK/*ŲRpvvT tGmJx(?sK k#,Ylٛ}xϬ0ŠDor$< IFG<0!I8+T('({Rh."!uр:Yb2w]6nO9UOR;ݜhlKx#L0Dd}:}cn ũd`v3!tHO"[rdJgOh.W^<' V|6fKf%Z5++rMV+'o3!ҾP3%[ͭ-ыr[~ܚʆ'gK=AaD ʱqbY{M1%),3(]U}8Y;kr+1(jC=r0Pu~6_2Ńfˠ\ y HvѪLKt3EҌ{Wk"C";$'o9쮰qAY/-Dp5'ނ /f9>dppA[SZ]G6J,[j)ؑqhv $'+/1D{2uھ ,51Ch@u1-<ΚRؤ%LnvuC-Q9])Sih)75fˡFnd';C xGTZom8+GcLy A Mj$yz#9JeJbEr!z,6 3y*-8v3^m@Vc79wwkAuLŵY\LsH*Mh{jpb}# 3<&EӅ)!/Rw,Eަ#-O sSsY1|M7sai/ 8!W9 |WcEN s6]хB~n&{竽Z`2EtC>yz/NAp *$P] j2w27)HV|?1; ]͖Z sL 7>dc~A97o|os`mI5  %ӆRih?uneTG#z={'q܍DM[w :(aPN;sԑ~|' 7i&bgrc1Q΁OmB7"X3XuTSm!aLy !k Qn1qPb촸l~@ ؖe(w>hղL';.acP Lg#!y s42V__x[%_"ƆR0CUi=ٱ,~} %)&T~fh7t(O,,TZ[9kkq1  q7;*d3Tmg{LqYJN42~p7H-nMy)KCEc}V jIԄ |gX3J4(:ܯcH17 StP!yP {b"Sqqk`f`-.-Y;Uzy2Φ sAvַdb;.˪-==SmC15!;M^T} b mָҸC)F/N*%KP8 YeEHNxLO;Ҋ^ٮ}6rTug ?^ 6;Hspр's"T>ӎ1xvX Jͧ.K=uLꏍSW_{oBʇnS}3Je@֣Bþ~VkZԱ@KqJ pzfǘQVTɶҙdjBX9X:6 ^)KmN_s#]5ϺF^$nW&_\0vxvDkr*hns/[j6hgr=tk YaQmd_0Ŏ}{-vpTA{`GCa2yD#Pa`A2!s+ar((uf\h.XF!Y=~Y{ֳoyu ;5IA4MPٽ=;8r4A^Lrj uf,Bv]FwPx5(["GoR uJչtWWx1s>=m$ v' Etnؤ"pGOi/O%FWa'/;"~uZ:Q]dZYc@.4̕%RϠ,__U5m4`~3O֩(&Qks6hc#ߑ&WP_,,J5jUp^vpg_9Wdq>v(rrS2FWBZ1>'EX-._|Ue0*i-F+ت5-XMJ. ĕv[oZMVa7137v,?m?94ys+Bc~K9^KTMל'-'׉G%XOIt؊Ƣ݉սg/#U H^ܞ;%_|jbbԙ*:devEM`?u[qÉlGZn\gŒ5je[ l%t}%lϪ^6Ό!F eҲڤdۦSrDO)Ƃ?,uohb`=I`CV* VlM`9xǬ>oףrXh cg>dJ Q@1pVwjNS^RiR)o|h #6Tu3 TOފtR=TBE7ۏe(2G__# u˃+(Zw”GcuqjmE{fTIxu|cW g7R?^AӟXf/xS5+Nj di_7teYkAHjW 赤#>Ӹ$S3GC|6`Z-A)fb)ŸOx In:]?' x}@dh7]XPGy:S3IVlu4ח,]6#e)CY "d:`B.p>8 Tvy\aX49Lu.Eb,qeS7M$|ƴi!׷f2/Ll٫F6kmoO>hvULvxcc~տ"nO@7vo4UrnL=h4ۂLm;:U:ѣhmKa ȎX({a 8{d!~ʆ̩ww_D2RU3 37u8]G_KL&Ȗ2gd}ӃO{ ` tʵoV;%n}7.^[[SkoSrM&QXNk}5v1)yWuWI<ԛZp_^ OpZuU>+q50z&]^C5 eD5v09֮b弅&rKo-UbSecneaZoJp&ANHԶڝSESHI](-c;{m9z!!Wiz݀(^OԈE%Б"#)_&ԕ,q,JL#zi8l)c՜Ȗ!0%luQ~Sf A#dL~%?PCГB"x3 ^7|S3̅˵XOdyWi*7ҷleHw4O N|\W٫V{_cqŦg)(LP#Sy^ˤfA;-zZIM%YrAO s>f҈KYUI5w"hK.OЬdT\(3j8-^>Vډo#)w y[4 qZAl6USvj).UEQ2(m79oLzn\ t|Q@*vרMKT@_F>.A:wEe@3s8OT]%MjH~W*vxK1\c-#یFxwH nolX1DiW·$l|+7# o(_0@8!W`oLGjC kv!OݤN'ϖur0fOy(I-vr'cC6ѽDBX]>,`Oz`F^ŨnӐ98Fud )>ȼȉ]..oZ\RRVZbם-گ:\<}ba1*'<Xe6 %OtnpT~xl;.{ fx~U (bBRg/*`Jd21sZ4b}T?B0m,풜fsyǂ?#j¥e|CW"R:e`tp<;Kwd+b>Wqf14=Ω *\BLf䖬Ax-gOG*ԅ u(3S0vPClz= QZd%fx0}ͪk7ޟ^^.*fjpNp}@C^ˬ۫D`3wՔ̠?iZ!F@X/áz@Sc(qvH%H$?&&7-rzb8)hG1)*'Ԝt=x-DW0]Qa.'FꏽP^ |kʤ6]XPƭ :G 4D:f&0@  \A PҊ܀Jo=36dI|+N~Z-ZOEs"էz-_AsxH.Gt٧ZFhBr3*V`O-!j%DZtV;钰CN#c}'{_M@x+GC>DkB GB4HN$q Fk\: q ꯦ I>кשFSKk7Y-kgxl5LIOFU쓩k~jyGƵqLAc6 \ .N]:DRr]16.}DQi*|;TEVgm3$TDʗJh~mm"kxP !)@YY5,e<2}gpnl8ѡJû$Z5/D?s)[pW;$H0)m;O6 ˦5̎O循n^aBh!2X.TZkN=6hϽ3/\pȄ؆%f 2gRn0Iа9Odr |=42H%#o4;Qq)ty_Px#&gy e$S OWXB41YVл'8˒"Gss4C+:ljVa 5؜%#NhJW,MEMjJT@$=,VTDڿ Ld/CqCCt7͆}j#م_6.ڢL(ny`&qS%f;maBُ*5 #V>x\iȺݚ@\d\+Ps|D:C$!2߷}֢K:-}=*.9(ҕq:yc&٤(n)ڻf~gxUp_mZ;¨SVC~`j?fLSIJ6>BYF /b|<H,P!tTrjYd5Zv | s>u 8m؏#VػɷR!uNL L'|sSyIU3Ð@0 Wte O,x}][QVλ!*- uEz7cv*xӦ3C-^TtK+eHTt?VI+sH~OyVըfɦWo.* 1Z(Eib.C7\5<Ҥ*#4Vԑ}4xcr(cyRWu&Ƶ0Um9yۯEtj[^K.QC!72ٮ]Fi^[_ի(R,_Lj0AGyd)QrsUèmWv, ++ȲIf)lߕ 3uu@9wf^ıx&@bZ6:-X>+l7rJyzlke CD` W{Y^^,`A[H]T@ؿ;H,:Qj*8Gͫ9{eıL&2]QN3Zi6@zusf"MBY);``TMD Me0DŽhFe %/*T62?@K]E13oBjxwK0^ul w>DwCa"e*Azhr MR]UxO:Aª:X]k9*:ۮEg]:E>kjXFX@;].zD|Bԍ:Z϶r|OlHid,נU~żB'_ƈ҄&KDZq4=:B,@sY(U5)&Xԕ4hު P ѝ"RhV8GYd0JIu`]e:17#ԢE2uI5.N2Me hd1&?!y$ ~o.iYcg7ybj̟5rO)*W/*zJq3Σ7yR箻M> Y@Wlpd٬ jjBy28vZN43̭=:II̗sck+B SL4c_fkJJsuV6F?3Xk8f/ C^'ӻrmڅL}MC "X}|W XJtXHiѭɢ% [qBA94ggdqW΀Gԏ25pTME&|\`a^H!8%1"n o Znf;Tѯvt6v*F ~]urOء{ۄ7ӲAL&Fj4$r*a Ib]ue|P=*#8bv;gyn`oz0ʊH_:p52]Oh!?+\,Ui/RXQ֫JYI`i!^?7uQzjshȸ7h @ UU~OA)W9L g̨,B9DvN[X_FOD_- RVtM(;8-i6 O}r^qϏ">6ڂz lwYᙞvr/ozXXNxPPi dũJd*}zU ME.:_6&bV@I!?,Zc{4O_]OjɅMkUgRuk0]^8h(ʻ+%/u*?B .ɟvgP;R===w~@XdyD8:)Y8(XhLykx=uN6za\:u~|0zqUEbMX.p K,N`_q>EhQ 4dA@D'DrZaQQƴ.)5#3ߍ[| +*~:pMI/ *2)m1nSX-"GVdvmz0 ,)EuzM5:kLj`\70ETˆ!aA!UF2ẇniZ+AD?=@=;! @fO2Wb[wұٱpzwN@hȠDG_z)OYQ43i>Bc*JP,q|߄lſIQAat@Byk$H͞O%TXU;Z D02=S;QTW"X]53źEt/!WZq 3ʛ 0%(K"'ZŸՁrNȎȣfX8>X㗱0Z$/ h^6WY_:7W\oy>'e>G[&;;uuLjͧ[Tw|Ug2Lofq<-Eɭ\^Z1Fؗ+xϕFC(l-Q C=S/uϗ<7iY LJe 5Z]ub!)ur]PXgv-;!m[$'vv/D\$,!jlb TA^(f4wUEy1IxCl#N.jωJh}ie{]Waf'Gu?(7R`wǵDeeW%5OyE5;J\~3%UMzvz-/bqW4[FoTF4my^=v6;MȆa,dP? I#, W;hFȀ$Z?v9jItA-*(/pȯ^rF)*U3~ >r?mh1DT/ *~C"ZTd7I‘$Y>ߗsQ^ 94~vӦ!۬8NGn*痚3f1Y;=kt3e6|LZb{QD-_2+^/RKaw,hej>_yRE1SDw;1vI̥|L3~i935%kkik|p-鲑yE[ :4dA-e#?'ڪ/;2Hʕ&nxtHױ3)/@tk_LoڼwU?;Jv2R";VzȩKnKqd)pJ@rBkg+(ޒ96]=ЮݻD.&3IO lįsueJlA8hxFoA'QW@fGo?i%'5Ɨ .KFe&$Pȷ7P>Xx^k \CfR":<{lԝD[dqCŬƄ%V͙$D+lb\)~b#܏@PR HW.x؆$^i:" f(]zzlN ˉy34g-z7K`{,W4&upHC[ =-)wF>d=*^e=Q5AG[e#E]iqYaI4Dݗ zrMLI Fi֒QU =gbϻq$ Ni;AQXӗsje}+V3T^}87f<}!̚O O4 _T%|&6~_mܸ ͡DB]hEf>uqᖐw_NPyH_WQFw_SqL\)7bdn:BMp^qo3a6B3,-)U W&TtbTߒFCN)9*{&'ScXϓG&9{њ){1D*N^~/X,+.g0=>&Cy 5Ga!5|wflRKQLAn׌WI.MP5:"PaUtN1;̾IRpσ?r)[D%;P&' ;bMB3|I16G|)soMTmp @eH Q{^$fD=2nu9:ݒVz ;gbM,;pc@Lomߡ{h+Yqa'e) rU o5z#.=0獙@iX 4 <. zNFܺۖյ%Ar;˚*AM{BOwJ&cȖ;Gi3BzuUoF05lѻp#vSH'WѻtQT{&;/~akSG.bcL يt!V@ٍ$ېaOaRAM ES C5<+J9/ 8Q+?9tVȂM>,-Ɉ;2OJ{Cwuϗ>Z^P|=Ug^؊zkBjePU]/}KQ+U 8EQ/?$_RUjiC\ Z}(֊'ӂgwϬ{BXbYee~!N﹖7|VC-V[y[2}^i tm }E:[3WQCף\@9SpViy{BH/}xUN&Uy<mC1KBRzX~ Q'gUhGU(2dj"tD]׫}?HN$ku EW\ -Bdoy/' S~AiDQN^,k9 QVC.+h:+*Vz28|Ck^RF=iir{zǸ?zw0CEׯod ?<մy`'- nڛsT[#x|EhZ(6È-u~ilS&M0xUXSnj(*;SMlCzi)wyds?si"FXE^rxr62dfN,({.Mva.K/3<&'$||ˈdydh\n8W| d<D=RZcZM8\Tǀ44iqX?"8lDh=c?2Xu?nt30DHN?E~J/p2OU-(:ma=B9/f%s6tK-S'uSff1ߕ:qy]V=)C!̅?6u[Uiq« !:N8??KK2~4@ϲAU 7smX/o7n/F($MԄQ?ǬD,I͟Ic_WK*CVE#Aw۞Iڵ)oJ9j(D(rޜObZ^^,sCĨ4kWf[ {M~OspIOT+)x8xrP|@@ٻ>a@ ەR&XNȻ tz1yȌQO=HG6KGeva3LmJߒkt6%Sׅ[n}?fr#zq!4Æ5 ۾&LTK]}$ Z$Ht _eCf YFA{Њ t6C0\ڟ l `$ӆ a`F6wճ6Cf\ՖS|'!l͉!׮ U G$4aߏ"?QS|s/^Cz*rzĦLs;+.u/+.U;U_:?;R<%:JiV5uTZ>YHy=I;6>?w-mɵ| X:K2$T__+"ZQl (+m[.r*2mRT>st5kN`O>~^sf#%!ʓ9[JHMa^O3i[#=ƲxP35qQC; FsMB+ii4UQMMVZE'V*u^Ԋv77SuFQ$ :(^?쭰^b+}}|k?杸5S0DK4ID`"Dd(I.!ͅ3ucn7 kM%- oORfV4L!Ŵς|r1Ubޒ:eB`'et9EfbGM\2Teј Mv(.*pԓiRsgy$|WWSL8YmR|P@ԿT;iy!t(\o7ك! 롃fgk | R!,*a~3ǧX-*"Tض$BBec01O#$D0h9jMJQř=\/44[EYiJǘІ)3;q`E=A>nTnJ?HTD#G%zV ̯#ۇF2B# qd|6\[O7 +D%xg3Bt:,>H!zxlF˱"oFZnYm:k4KѬƈ кEL B,tҌq#Q .=Z+1:26oI=8Kp'ŒV֚Ki8mwCDx8ZAWG3Xslſl4S+m[ JM/e~J7M8GL$0Ci/LH~ gcs#u::ё$;ua%Q$@z؜!te\K#UκWp2p>%[ǟEv[Xl{G2uYis2\S \mA؏YDy]X>\Ē|nlpPxB5G# = + ܼȪ6$OTU~sVx:΍V7o1j ba91; DT`8W3 ۸~r-*^y)_Wr$83Ċ^WںT72̅;ÖGRq3dĤY[S?syq E΢1toKXwԅ;:` wc/9Ĕ ?T}6a: (B=ͽ5 mI$ tգ-;K?X#kcYAՊ7O+ٝۿTg#nqn6 7yi!Y{&{ӶJͫP>̑(AA衟wv6eH)Ӛ9JEI=n 10ꨣAV޻_ٮgXKLӮ} >t6#AFޥ%Λ23Gg®׊7OUen?mZ!S5X2<ȉQvc1̕|Jto š|l 5@U g *0 |<0Aԇ;~z%iOGNA 1Yhgmg&GȵQe8.,,VuᎲcʉ}"YB15VU,$:1޸A跮+W/km?ls\$aEor۩¨mü">,ŽB5sO/4Jn$eprI"I|U'R4 OC LʅNU&XwbЍҐA".D oW'AzT'AD MutqW7a9GAkOw})u8]QBA{%+kX?dWSqnVd.gw^( Jmk"TG_/GkؙXٙCK#q*Қ7jzB`H}qD%he04ʢpLKΜ4Ї'm~[\e94gK" -%3#bR%zLKVdMG ywjے;B'ǝܸchK%/b+Xz-_j,jGf4$v-f/NuyZ\jPi؏Ira!p)/! }Y;IXe܎Y[0ܕ~z( uqO=VY$ 2H !Z+鿏) 4qŲ'gALĺc@K"H)c-d8coUz)d,j yXUNȸ?DJeRN_bYif%N3wBΠjy<0nkP<֤55GލAx@Ғ@]Qec{䬦 cahDߑiTkV&lۖ3)"ъ5^4'Z )pIgBC5Iu֌ ƸeHdE2/դ;?Q %͜g:θ"D|&P$`N)LW=яI@˒OņGSv|n⋾z'nJ͡ GD(q%"1L$OGe~kѻ=nAſZ&>S݂jRjV%WjAxkX [@9Y fq-P@7ݑW VUX$U#U2#vTyPו]]=ҁ{ ͫip;cS ^ )1VяW󨮬"όq!IV-BThR;>Kk-m3ɧopKd+ zu sXM9Ij=0u`cC~)p`(T8˘=o؋"?OL^J]9kH^.*YgBoBc9E*~PAaRE_yzzu 1Cտ?c(gNk9}O/#U6fR)j6ꩰzidbo(j^_\?ƗBwbLbDfUY7 WaCG!5lp}p>}gR3_fn]f[A"~zdWW b4g,=n/:+u7ܪ=# i+ؚJT{SS&s&?xҚͱ* FuMU+ggK3&"L 8zIkG:"Tb @nU&E".44fm,ݒܯ辢geB.[lyG`QD+rqBYvJvy#t'|%=UdhP¼k{i FN[,tWfQ?)<šh(}`zvX ([V kGT~1{\;fE``(5(%{!`R^ .Ng}RdW)ob<#ϣ>4BlNZfdbݪ9PjL\6zt_̪"u͡Oj9+~8kN '3 Q&s99bq]3["<ƗCHe ?b%EH@F(:%YsnNr`:JE k׌a~R͑3!oNJohP ]>Ȑ@`j`[x8 S, 5rmvvEWmwWuN<ףܐP~2F6yӴvRwn=fµrc|TWHZ9WrV؏˳<-f nY+0s;Dha ՒI^LM Uv,gUjʀ0NrvDohS\ o|HЭ2ON=] :wȐ" ǝ6tL&4HF;/ߊ@31C+Ub wQCn}19IƑ9J)ݐJ4*'ۓEFRx^ر0ME佅uY KYI/yN2mxm;twҧTEԫg$ܷL )}PU]debW=E}U[kkM%*֥-}}Qa} .1yej²gR8&(elUS,z_{s#ӝ.23{6̻+/حajw%F {;wUP!R23Z:KCsVŧ~yDm⑳."H7S.">Rt| x…A.ftxb XܒZ_B^AoĆtyyYng0ֲ;[(150=ʦYPiİP٬}Rс1l‹V{Yͽv@gjaTfb=$ qGh}3mIzM? ۱8+!N,ڹbjx>}:w\Rq\KNeޱUۍO ll\+sc bnlhT<KXL~=vq 8uY (-إMM )5z*oh\h,v5]XUX1IG$}MRs.o5=oiEWy|]Lb.'zJ hsPdSe+8nFP/ܿn)298ktM{<8aY:NlR^VKޟמtX@YlwGA1ϝ-MBy!$UԜ"W U׫ %ޱ zF{Q|RLmS]ZepDH6]bsį"ݨ]YOrߔIР<`쒏z,,dZx'.dR2 6`!dV:f&7 Z<ƍȪ).1k .Sv[8e(?4]DW[ &yO }_P,`Jw\vk/ik!hؕ(n2Hϑ0+ ^!TI]05d #MYrwk9mtnL'#;?BĴ~wVN TuLV;U|[''|:|c|dh6GS,hUl qx(ƧSE b9W;iu1<j.;[oNīk yAiXr1a (JNmI{US͘MwA/ >Nl/PFwSVG:КXVS#\6GƵ70 \FkpLZm)=i/K[1Xيw&a2[ϱ+-nN7="CtpquOn{n8]!9sl İz=]o`ƥB4<5w91й̱k oOhLw,6:_<F+iCE@tNʅ0U]HkuB% R\PU@[NYrߩ訃mvq]uِU |r|=uP i]F)AJ8;WT;ir g?*} V{^YVO:?3OXzpub r{XYLxjuۦ6/=Y2zꆥ:F4Zny! y@!rw(;̆x2}d{l+Ѵ#?$A `aMo &48v\o6=ze,)H\h=ic pG_F@("`Ϻ3-EQ[C.s֍= i H59C&<4ݵn;|:Zgv]k2tR&ko5ۋgUXrks{z!l'ŗA. ;"̓k7xէ|\7n^ N%vL@Y]}c)+RbD*S *|^hs/#1?ICsK]{R#8K{%_]ZQ8di My'.'"1}7-eha] fG3TV?/"SNʹ8Fh =ĵZ&):DCB`M봀ڹ:E|;Sm}6:pX沙CRXsTVbC6A5@:4mt`;! 켪F`9N`i颮ZᾜJjq)v$sH |cLy\) <|CX 6mPA} @% (sKJ1IX+T0!1j4JxU4<.y@ŌAp{tچю*g)Db8١YLLw$g]= wքZa"\D" f!vYVܹeٹr8RN1Ui1f\Wsĸ?hmt4%/Χ^ PʤQm Bc]ǐYA/LIx;_ vmt-01ζ4ܗ.qmz&B2q>S}{ͣueZD#8,-.#FPmk|mf|Bh0h袗 t0ep)nKXNKN)iN[JΪԵ{/|iE&|< ߧ1UHT^P+6p]qӗI5v>VfPF;L5Qa3zB}߯ 4&NkWANK+Hl%j׈%#֠ǒ &w.{^P[^DgG> &$MO>_zU#l /5u﹂FSHʉ&cnDۧtFoF.DB"4rAµy? `Kjd1vDf`"6p,2F%Y>}"(TB!4M`nl|Eo$I>9"UH7,/yBoge-HPOY_~mm%`2,c/^-/NG+ą&Y6v IO4!ecuWHfl~um]ήpVZςڞSaAvh{D"k δPVQTEdU5TKT$&擧vXALrZ]HEZ䜵N h4 >_w%4gE41G`_[[j[>  WOv0tm i,n1iLwc/zE# j%x'").c^bV/hk)jxX^pg/~Un6B`Uk$y޳2/dlUO\uݢ q:业-቎y2B25z<½gɋoVMQq5믒!OA7Yh l+bTb1$uBN+w;1B8)F we&&1`է]>2$:95]|>X鲾%XΑ5ø}v&[`C4|uTuT%0Kd}"+&%X/B7I.Qx`ڎ.Yޓ't&Y'î-%y[F}w5e߬~]O+ɲnQiESdcCgT2E*5qjI16P#(y2[$@33tWY<ބwr'RͧH/7…ތY)rlmHHNkH {q$E _UH)@@¨/R HM{,ٓj 3>RJ}g@iH m#ә_-)aӪB,I#D]rmj4_M6 &Tjd[s3uhWXeR/֍nՐ<6[s5W_߀cUoOma_K}{fU)ߒs7shID{}ۮbzNpli3`#GiJ!sVuT4tKxX&("f*yv:_%}O{Xx>De~ASԖD<[=ae3l@=9@qbx/GIB4Қz&'~*\?dB(Zp6A ˽'(~ԑ*?!U4OFiA]RsXliln2̲$9w)kͶ t9AJ2cTsI,{}:mTy;'Y:M\tN쩺 P ʗA5 j~ &6P{cykNs gzs~ +Yp$j!+xPN̹uC#hMAmOw`=6<2"?#ʰf!8 OəNDJēv$~gwF}TK)C>>9R L^k_-֠BP{vb-U_) N9 A`ٿ>8mmDSc+&Elȷ#x㕬tX70i\9L-;B,;M4wjI[wBHfþ^%7ӘSU$"LR.T͝W }@XЎ!\+cxះ#Pʵ;.C;{TY(-4FSDT!-"Z#҃n/`?j *eЍdg4uRUٗtI\΢MOK|*O\) >T:u> cնcsR5>Ifϑz Qq.4j* b,C4ۗTG´X)VkGWhV%l /a[C?\~_4O[R#W@ 9L ̏ewք%Mge;BTuu0U=ai Io@Kg)֦;6Me, Is^y%/<{HK57$YkR]곾#u8-;e.&QMb>&D*Yڼ]!Ui3Eyj 'r5b`w-3"|[K΢]k& -Fp۸y`qM|r_RAqhXU{gM5z_:A#jf^T[&~)(4Tn NaP h49%4h5 .춬I_gK$nE N^N$5ҎWqGnsQ-bhMq UT껅7f+ֶш>}_Z{W5zXQ +*>8(0[UR{PC61j-ݵkmy!˗%4  b |DQ3*Tʈ->h)CV;%^cc!DDA) CWbp`G3\u+*W}pg5G ,sxe4oa!5%JAqCD0%J@5(6ٿUV%N0S X'Q+ :Ⱃ\ ~0Ounκ9-:HR՚oM /Ox*EV(lh7vԉ4oI}mrn!*f-KLILK+_@"*!aS9$Lj 5=w5)fT  &, ΎDO9VoYȮfHi-ŻX^jI=vܲkއhwxH S†/`1m<:y[v<}lP[hGX;Ȇ➐v7]=;d-!₶:Ua k{P`="2i;'Cҹ.'tLBj>)Q>[MePUh 4zkwQ`C83a$9+fH7OcQ8%cwO v\f[hf*^ĶˑT 1f lp؇Rr,VC`ЂdwYn$}9S*&5pzbR+[R/s7}@4#s-kz+ɛ՟r45\$"lw )6C*z1~]~-6<7QTzr}o@(h\o=Oae\u8xXG=g0B,M0(ue16EO٥dSuIzvz1eCd;8H b_lJ pHm72E&9~W%Yl-P5=k8rg^Q "0MyAm!cԆ@&;m]s*M~իeAθF;K0XF%bFME1>·G`v _㯢yyRnVq{ݯOž2!#$_A$$ "DPu#]b_UZbKqVXf3iUJBM$ ge^|*ÇYS+ܮA'M|jZ05~㹃긪ZIMeb*}o-{~ B}lR@z\ҘcB:*B{Bk:Ĥ1U8r+Y:Uf8N/%7DOY_~maA 9kR>G/$Jx8#4*IŊ`T"Rx$B1k Y꾊/16ڿSb/ /-`7 TWКwlJ &&!!j9Wʈ= Q}\8BlwM'sT)p!xXDiMrcI& |:؈"$eŀD\xD>4arW "rcT%VV/E+KɠYsRƫrYi2Tyۼ/[Ljb 4C4𢡊/Vb]'oЗrsfds h>an"tڃT&6*iLQrx#;^ ePyT̝[V_nkI%ʶyJ(8+%@||Kjj_~&Т1KKs = k; "r!j"vSkH>%6L3ӲTz7^G\f8d_PzvBI ]*EYTNtkp^В$hF ?cg{.D[{K]7$]Yo>G|$р*%t|f5QutʝBͫqR])Ӵ :2$ZdVYv&WǔJ/#zhp[Ήyk(|s88=BerK7OoP v!ìHw 'a\03g^NiQh`u8`HAa#BƛәG3EYjq4Yؑs~}]4Y0~.R?j-E qBӛȀ&Ig`ڇu D65-)Z=yD8V4aO|bOVxwo{7Γsn*L)tCZjȰޕR*lcfU͢-͞oI4څЫ.pq^vbxFB#36VjN{&}1ܤ۹Sx`Z::0X3x0]_S`"WC ePAf3fIXsc[ȴ0 ӘV1 \ȝ~L (H/6lό'qw$a( soyvhZ[] G\oآsYchMΡ͕5ԓ-1=a(||b{|>oR5iŤh5aKj#ϴj+كZŏxJBlS@>q62ٖJ2҆)xPnHOϯ[F]{-KG58[*}wG 1K(-?JSRԱ^]B| /ᲑQ4Ĥ0:ϭ)<7ki+?BLTQCӏ&uN:c&3 3?F/Zth +Iv_疊~"7RNSa*n?궂qlxvI4QsL4 qVBU6-WIE|Q 4:BZD.$(}(iqw u W?iw54+97A䥰No8p+ZePt,T}D!r/h-J ^UsU=속KA HD%H*xF@Vuj=j{N@g'Gq/P $PʠǘuC/f7[& xCf?g_jW(tυByn}'H(V6NGBgBѴ7OhGG.w4\7IXt>2Pۇ ʾ,( x*_.5uEJih4 U%VSETfjJ&p64XEFg\ySOKm3.ZG5p p' #Xa&ixgXcP_R*^=b7z~ IàJmbJN6#VM 9WNx92.&ψO!NڏR g *fXĶ-e)mz{vNNlXxUUHʆn —-ռˣe?6]Y϶]o-@ɍ=ḣCL vGl{~>0ͯi2Sl k&ȧ2יxt_oa!! Y9ID.k%kxC/QYjYş kmC{>h^\kayI+nyB{oN3vR BAHڋt62hߝ+Fԃ"#t-zD9 ~Ţ}˩pdhK.N/=vcB';0}\ka.(q1v+#t (>(e Q!m~ ;q}G3ehl?[p!;rSv nH<>کIM)M>0-P ym˙aRSmIguiu F)ȿa- 4Lʯ2NvbB EܶFc9mY~8p߯E zlt2RD s y\HkqK= K&?<t , a= b+ ok9- >+%TY t%?<L_BAs4;a>3KSI^L,eZ[UfչNbBҁVz.J7PN>r&mzfQ-^ʲ)-iFzs~} _Z}SRR>)ݱT:LER>odƅr ʅ\߅e^δi8֡tڻ5T{J臙VVԯ#{f-hy YDrAμBle'9+DɊ+vMU%Rb.\;&{YN jV3*֬VqM(9HmnӣP(}bs_R\ӶO +hj2e<+aTªԘf5R<2wݕ޼ٙi|S6y,I 4[CVҶ*.\ﻠǫy]wp8EԿl6cM^8fvSF坠hK0ikwjH5=&8 3iF4,tΦLlL,}0m VFk 7*񋥫8%!_Y,+S ]+|N]>ǖpZQHb.;:1]lhێ|҄gd4\ESϚxEBTՔAoݚN<*!#+LHTɖXop@i uvZ`eUV9yI@sYr(gWy U͊#Z~g\`"<,Z^!0Ϻ9Ύe\r?Y;ԡyl)oiҒ/KpW0f,9;s.1ǷAǒ}mΟqTk1m1{'MjjSksxdZ0hsD8vAK¾x@jWCw3A]$q2z'S~f^y{cƻ6J|ŸrHj^ MAX!$Pʹ]srw(kZ>ZG9#+FMIM7IikM-c[6h*őIW4dcrK)c*N;ḏs"œN(rchՏ:&rr#,YѹAdOHDYhrQL[R=K•!3Vm+U cӓL xzWSI%xƃ>!08$HM: ElC*ѵϸ.vu 7tfs aS٢uo@l:?7κ4q:yL݈J_ (I>'=&|A853.+O??'Ԛ{Cj bJndcS:P :O =3\0l3D<˪wžJ('`߻Lt/q(NdQo5;)d֦"IvkRvl 4O8+F`|t>ž)Y4i5jr . X;W^{b+dHxsFg1Io!Ã9nTI7dˡK=r(@,'hr4X2nJJD\pI?k{?,c`NȲX~C1}jE5c*׶p TrI7mGGlȝ?OW&HMǸy'_aL*a$tĆT98zhXuQdRg2a/͛w>õs>e.v$5=훼%Y2!Aaֱl7 (ARhp3nP5 =#ң U7x2MP76URK~xCJkK%QO^Ϛ粗.$؇T5sv-Jꅃ!|T-{Q|υv9^mskTNpN8nY.Y[cP ;pIoh b(+O(2krNWA(+Q]m1NH,+xB[xs?,0%уtǁL*6:@Arz$-PF”!_4J@cүYU)"Er^/%JYز\:vou4V&sE>B: `> אtՅ.G5z4oRQMx:8Ӽ+\ÿg b:LHNks6ttQ`o|odvW;IY0U1Fg, ;WUrNޤ\#עz١0d D8Io)Y^G "`f9ach|AZXcbUch7gnMVdGNG'3G4ꆦ"QkEp]{Nsi_[ƒm,Pv坳-isM5R(Jve[)mnCXT]ZWxP=enR%sęgD-<(ʴĆoP LTJ VkAW`81Gc?qJ-VG)RnH(DΓ]xۣ-׾"q uN^ TJ2bZ,L\J,c#|v:uCMwWM2y`+_1m0Cn!KzӛZйߵp}U}~sUw.d ;i2N̓GvaM Mp*]MM@!Qo1Hrfh4%P6X \/ 9"P9\8s2 LA\3"6$t䲗KwZQxZ@A)yfI]pcCh#%]N}"V*#uxfTLƸ,}(`\+HwN.F[m'G n;\UCV3_? l1 ֈ(v7cO.bZ4;YrKr+J%ƘM;OB-1C{Gqc > *%"s{xw@cGfQ{Ků 6aGU2ݯ sdTvҙ2_QC/ܞa%)jN YFۇPdh׊z{KrWVc:4^/sìᶝ $PC:ؓM%-zAHO j;]R)qj$Б:/j\rU50?C.j!ڄP=HMc[mseMS?Zzǚ z8v&ۢw Q SVdMm>fbԍyotohNAgyFtr4 }=T+Lj}YXߴ^[P 8͏༨HXƒаyi܄ .ŷ!Tj5iFr2J^C6xmDM$ +)%jꋾ ~T}A^0pw=۰r#*'c}?PFZ" icÕn(AC(|w7i00 KȢhfLᑒ'z'Do*5>CzPRe {(HEJ١li 12c>gI,;jгN5SۄJۘk.9cIڎwe1Xs oTecd7̝WMWGQFް !E7>Zc t-AvGx}5GMT a͙f0N𭝆omHNΞ '5*>_n8Ŗiw{ljneo o+ lZw*ޖT-Ib3^GiLyOQT١U *Cը] 'd,)U¡MT< t(r] QՊn1C8mU AU ,T2"0l:T15ΰ"p4B9G;"u@*c9dJ'M(dw;hN~U_7itT[9Aۦ^[NfUz 4[hߗwuQ4]Uwi /-AL` 욣&eFK0NDJm)m|؈iKOFJ+jg9nE|G-9 a7+laîB;POl\xҋ.uiKL>Phi,gޟ\]_mj:wNm %S:%Tf8ov9Oh. @r(dbUsߘVLME:#4 b51Zj8n rZ,`c<*kBe,ɸLW ^Cb l ]PZ`H xhCH 1}nXux>&Ԝ}>Nx->V.oV5˰{GHvi\RӅ\CN䴢˄},:l9" I9VAVX8` !,]]¬qCPdUaxZ!B*(„xՔ^2ܪ T+1!紩egYhe9akP^7䁿'GP'CNńaӪqp׀ց-%Bc0/Ȉ? ȚIʬ0kPEA ^,R +#+2Nu{ܫPCF{[0>$ӦZ/EruV 'Pj:wmhNC<韘Gg<@o=r!V62i Y$^j80ox=c=Iԡ0Kx*&!^7U_wHtJQ6)$j;%dwv ׯбhN+H[?_#@(d*RE1vwۓ#mgcS=2#(i6Eb sX˦W7O*$p!Ob*wi."}n3?BͨPgnvB>FPBIޙ[Ed3cb?p#mҪ!Fu#jV2 xqԇó5:dEXVT3n.{. |ّ`=Am6Bb=c>󖟁P2-}M5&sm_mn}W߯qQ|jEDn|^-1قJth\,xikFGy4obI'i`Ciy aNqŠ"àLƹ;b4/ ;oENc 'y "72yĦi]2"DUtI2Zp{j~c҇OD !~}u`X~xAGjGsEтrd W 8 x):fC`d.clF~&8.\IFѓһA누 hMR‰7 k1 (Uw$Ru%& =g596f,O_-4GCըy~>5fNEٺ[uDuZސWiʹ:ĴY{ͧ`M O||91cS-߇G)~׶Xd_.őD,Z@:}4'!/$4OR DHD-ISj zonkhl+5P }"\0^W7LT{-ڲВRgA4aJ€l~Hy DH+bkEʖ-ʼneONp=|V5yZVYp40_p:5ڙAvYk5O$e\^j ䷞B먽m5K٭532Q VNtQrܟ1dA劤mKTEo7U@믓#S>$VK.HG1}=RWZ< }". -0/Չb0/53xǒZфK A)PC?[jA'Y8SC'^[(31n~j8!^.DPPGn94Ɍf]Ħ#ZmPfX2AEqW8پB(..)osp9toKDr0T%IkfWv* Zu)i ]>L۩ļL'?4Sr;sm)j͡237Zˢv;caƺ6p!v83CYη^Qo7:M.DyQ8vHf7l{. ̏pYe]&FYz=D%)ؾt NL.,o_=P A,Jsk3o;[0c0ZGN`R;8L@ 5 a ώ.:o[9&"2+m:SHct/CdRo*ZOY+Lx-4'U}wNw4D=N3|;dSMwQ-v[-sMt@TVF5uTXNeWYb/*+qIŕ%4ʋ=zI,Mbq*$D6r˧iN=hu^Œ-oӪJϟ-ꮷ.;H%56J(mq]?oA Ie-}+g +g\lKGٝo3׶ &>#ȗ>w&xo|-;:Rt.#5-VL4Fq[9<B(d6۳~?UDjF >pIUݴ]3 7QOk0r4TuruV0^6Pm#QM`UXwQY1MJ_XE^lK؋ޞj$&8j :ISZ4LuϞiκk*LӖ7iUOu[WXqG%56$RaY=nB Jf.hygd$w| :uSyBJѹB.BlTC:c}1@@3@&Ƌ!BAYEYԟ&UUc7ZP_} ^Oizvioɦ[{jjꨰ*KEe4ҋ+K(<ɽؖ.=zI,Mb !H(lRnV: iݳ!\WdIN*=7yQ/o¥VA4@8, ƔdETDK7 2 $mpX4tΛh6&\M!;i}NтWa[ZRY.QӗjzTf뿚.]Se[FnwT*ck#D)rB< u0~>koZ'ĕUBNجH5j5H83ʶkɷ`l7Iˡ:#FRFJQx)&7U]ǥ]W슿%$C@tjprsգ_$..3X7\` L/qpf'"6|k`vGSyyb*|l@vR;ǯǫ0#.Fb`(Ώ#JT>Y׻Q_NXfE?; XG*-h乕yC2ћ 2鉘ljx7^Ύgu>Zj5Ws%Ӌh>P9hTtM ӓ`'.)i0!A1Y9C@.Jlft^p:w8*@v&+:(emǜ`ex R!JSYЖyitioz~X˚Z6'/Sr `%Tb VVz^n%ٟ2Ck^/u9 ~wTRfHIZ*!MQjOL?NȤtvqN&dY4K"5oi>LRs.z~YʾhDr_Gxj<P7󫀺J6h0m%q$:jgdXwNiANTI_MvTBiTVCU5TVA*]3r}/ֽ!nC$ (=o i.gC-$v5WNes74)_NeuPBF%G@[5OʤJ*^ UgdCE- U^L'rT)ԜOJҏ,Tį&beR4JC]VXȸ>SgxTW rFg>Czf TWiַ4$O/Ɩ3wXW|LcqXfzsSQ Nx/vŷkrw28U,Ux6s] $~DKu-{,U<̪mo|Gnr.÷>lJaT]>d{1 XWu|-VmQ^ګj KA}wKHf{fN:]p, /gPe/i wdr] ^tmRzDoy*)&œ!4l Bۙ$-0dRהWVdEDev`H5,@>jЮʩ2ɰ̛)flp4/JwWF`$%Åf5O"]e' Omb.aji&nڐdpu!'x'ѤN[&ҤPveYWYK%vbKZ{t)POovfN|or{_Fm?/iם@@V*E&JվT RB%y!Kc Bۙ$ЪA*ђ @&U(5JR#WIbHPaƕy#RLG!Ф **.7S &P;il_ﮮ8*i%O "YN> cZɦ{  Znq?Xxj.Ѣ9o[eR/M EjjeYGT2Y0mw.VKZ{wKHf7j1Ѫ|op/gPeî)ry@DV*޵VIKk-T%I%/#viAh;SZT%=!VU8^!k#ҔXshb >==" ؟EM@ pti + [uA[t70b"d1qs`I&U"FfBf_ 1N3AobrCo]^<;L_ϫ7sYBjWtCes-ѬM:}X9QUe9v?67Δ 9DK2<3phl)qy 4w`P%HpCcR#[/E`YPwƴ 1#;BX / v*(D+)+bh+n5ueV?zYn;ƒWo?aCv+C$oF ofퟋ$3j^XC|% .f39/a3$xaDqSlUxNWEK^`*%//> WןׇH2*OR_7i^kƍ\Qsdx*OU?h呭eIZTF \1_Mk8_&袏#L$hB CrCЀQ| @ӆ7F#?K޻7h,D'KGȒ]sf̑(h>8phP0̏u'HЕ~a CFĤnTʓg-$,iԮ T[Tm-Л5O5\ARNdfJ6x/%t"owQp2 Jۓ$NJd/B+/r}Uڴ %~ wv{.N_/; `D|RT9*\\e+b 6ovY}sr+3 %N22p̮wE7hYOUƖRt1?T[~Sn;\otRݾMQ?=γi:#Mgv;t Ph̍p:W$T(M!Q7'GW\Y*.-}fZQ9 ̺o`(g xIKHȪt!r+ShzA. N Nk_ GfV;%Z2ː$..Q8UY n~~+3jE7ʻ @gIw djGH:G[N5\fy CYˤp _Yr9MxXK#^P÷pe\ߙ`Z~Hcw)sBC ?I4'{RTʣ~# ߟIOWMS/JT()LL@KрGwZRE1W+>LU7`8+8-7̀:F]( -CQhdIrLz;YHw_Cv++8$VPY(੐ҙ#\92JK2+8~K-^2׵k0doDBö]/xlL/o}tMohԾ[Lfʞ!դp{z1l]`;-+:6ߥ/W7\%BaEm#~LY6rӍdK'p(`8cHN_ Տ%=4a`/.2.h1-wr褠LsU ~l(Flk6:kٸP$뭯$r {Ǽ"tvZ ul[۫{iZ]JU>ZP:D3ҽQ IgˎoK%h>欉Ab> c:GWk.#B@4`ʫU ((SwV\Yp h3LtUQnZJV-rEicH\¸(tJq DGPY%\vwQA:MJ\R_.:zֱ상KšΥyOsy33<$sI[cn(^%_D\Mp,zZo~TM˭bgNiSП`h  NSO`ǧOeCL9f/gk3u|q*kHV(ǥTX.(x.cf>wB& s_<>rp-t/]K;K&ky3e~?O+tq#v ػ lX}pgA)hKطot58\9xc?]:T, D)$}s jPq6w>C=Y=2f?C;Lög-nu6ykH~Ls/a,X#d?B0h7LvUAPH X4'%*d½[Dkٍau }ld|U?b}p}UKUNpO0qt8)f5F >t}uj)ج:p$(1I:(YoT]q6MXC"*RN9 Z7 :+S:}" @Es,<4DF/,)hIY$% 1nneSڵ6oCQU`zuK.8$U! wIM4m9A/{sO隌r)DLנa(m'iC.32}?,&q+bv54M0x "E`Ndt9dj5•G;?'b&uԬg?/r7uV9Mwo l8tDt~[.ßS25hSMAīȁF#X+-_!rAV膙G5KcLyT30" $E])(BZ~.T~) v](4 5NeykC=,Y$ș|OAG(챁7#CmAC>DBxBkye Mil|-Mu:zs < C*ay7Aw% ܃q~];k<+c0nmۜX(wZ5sTppmr$\X˱k*¢Q?oKpOam$H2( ۵M"O6szo7hc딏qQ?g! `q}nap|6۔ P j5[ &] 4;@Gwo)CCWOk@Y٩_j 2n;#Ft$f@9hQ0\R㥼?JR a3la1PA=aפ.;LT'cxx"[00HKyKnHq5%J\EzfL~wg;o]:1w$MV~=X:Ƨ{y]|ANXaWJ7/#7IⱿhHӀ?ǴGa MFL,^) 9a } .@ ~HynT9 yc7Q7/AifXo;J/Kb}u1Q@)0p#FZMQ/6_qyN)<ńf_{"%{kcnk|bmF*٠:6=#M a;q`.5Dɐ (_n7&I fvI+Ŧ?@dx7|k@sRf@w#E:A٦y *S d KᅦF?񴴇͓}ϼU?C\TjMZ.KaUR Az#Dk3ɚކkf0MDX 3;_ ̤兩PlBߓhNMkm8TCUL.#q0BT3Etړ"@cXo#:cnުy,IQ!FO}ޒ s h71ْ%nj' o "β3BDfpuKZ)Zèx>Ƕ=m&ɼd, |̯Wd ЯK0aF}!nzh ߑ˰~]\ E{[HpUw-k#;Uluew0w]@( Ū^CxD2j*f{`H->>k!k?? =ؚGp?UT)Pju\ UED짖Ǹ#="$<]Zp4-Iҫ}fl|^p.煯Ntu!eD1ْ~.IŁŦf,Wz0YO#sQ`^@p[.ha!q.%Bw&V&dc6~[i%L4X*Rz }HZػYOF`gY&~g[Hnv|\~il•L4 ԬoSH7T5XQMy8?wɎ=J8w!.CZcC܅܊Y-8yJ]/nCFG- pOC:KUqةKbrIr)h?$Gٜ~jif;)|aƱ6jUj}\D 3TjO֑S!ֿ7W5-e F>4)޼t5>rUoVqt lYɜ*tŋVgki*HRghM LwvO-R"9M61ѡy܌l%pFȪ= }:`akc#Ju}t¨xjG&OvF HC$GqU2uk vnLQPels0oY޾DŽF;]k& vTZ xi~J?`{:+ֶ.޷\Gv\%sq,!X?ՙb0Z;Ɍb'/ s\!"[ޮnLd -@t%Kf#>NOEv2F\-+)\[=x@eNhL*f Gg9ܾzfdbeϹ E_p{#p}~ЇʼGNT.td h5]\M%<_4vk֊ \Mldx*1x\KRk~$avX1O_BE-f5KEmRz|iIe{+j] œe~I8ck a2?fAjc,cjQ7 PUߒ[C aMHdG(@1:Qm,a_#,'=_'ڤjWF:V}RP9*ֲ|~Hwhi'3(GO$p%pAbEDa{P_v7Hm01*[dM q)gJo&6oD8[uT 0:{.em/T}7ȊA/AgK -/Wvbc~YcspdXOEr¢ȴ\,QG4BHY q*KBLĶ a8žôГl۫|H,d.; 0 5Q1q se7 =`$`ΎKPx5Lfx׃\ %/ov:ǃajf2=e[ǭ#,zSa-* R-%TWuQ( DX8xPWlO_yYzt<}k\?X('8T؁%pYl4[G+QhlZ$̯$z A|a=Nu_ep?QpExh;L;pYXA=&. 704Qcg58j@O:xD(ێҨC [qtB{ԓɊ޺=\5jZ f"oSm?O0 ]ĆPr;)|M MN oOڴb)_~|p|#!$$MU5E" =s/0b\&!{f銳1%g1Xb`γ0F|FM  䛦~ xKͧ|',29Jc|(Ai1px]"zFgJ)UVr<6+dlcKހ/ dSӰ}7;qZZժk~Z(upw齃_{J}mf_eb8DE 1[($''Qiՠ0U`^)%~W*dP^,$GœWk<10w bUaAA.Gg:j+w1[G % }K^lY,ށuUX$GR f/E[{Ռ$XK Q)pyuz:$[#ȣH}{]^Uh,Un4HcSnS/ ҇5-ߍV Ϙq2>K94]~ټ] <^ق@t˦o 'mԲ'qBBzvs,Mj43 ZWyP3*&4gD{_U@- %z!E[ a靽Y嘖 1x]FbãgP?{߱!Ֆ4M+.~v5!~¬!M۩, hۆAѲ7gŀ$ךȴ:lYe4rMD:esEHe0 =u+ÙP&("& ߛ()@{{fk\rQS/e2<>D8'(\:_Oyip12hL Xu$zÄ4/;B2lL)n)=6W/?O6{}So\͓;ԴkgV9 =vck#a9*/|" Ap>2K4 .݃`E0/^#!d9ke#0ֲuyIɞ(Jvc?r|agXf[DrbSѦ:Yn*3+-M찛K߷AFLs^6birV%dV`'?aZ3-WUH€͜-uc"  Tl;=>l7Q-@ ٌ<}dq'^ hvXuIv: ,HGN|"SP L3r<67D)/qo5=+­cyhsv؅`2&bOh:_AxrQaZ 69!%U6r~'c(Ҹqߠ 9ͣ<2m~1!*sN<2tԃSSLSP*QZ!Q&X18"BdOkÑ(&z̗oNL;=C5Y VKYOWʭ^ mc5nC8-$UJTǔ=IdU Kg(yTzV^WƆ(I]&9XqZ." {3QR 4bR4*d.g՟F4EQ(JzTru$ 7]К:s]î/Gqp m ",0E-.%z9`hWq1ku7Ę2 lݸݪƘ6ݤثy6p5݂/yFtfHD qyH1cߟV6cY,fteRYT' j^Q;ٖP 9 z9L)Khnz"ě˷_.`=l'rlxH1WF*6AC-"l G@tf>!j67-еpx&dxV K 7?@UDtl(H <8 dE&q)ᠣG¬) u\~K]\##FT"Ykhe[2_-Jr7y_u}Uli]gzHX.*#AB% /FAR]%%&v}u 2XP1#P\YJplT| <•Ut6H eO/udM3fCWw%'Q"^jc[|y#"L~k̸ڄx]ifoɛ#s'6(x5! O|󁵱55火iV>#kșK &U Bܶ,zΞ5[2d,{~2τoXWPc1Ba98=Df!8]Žf+Fm7֯* r'ѥFbPz=J3gzP#Y ~"+wg8;u{#X+>0X Tıeo0]l`+}\P"9^A9Q]/?ޫ`ʱV¢Qh4tVՆ9Im*r /ҨIjMwLB|B׵ven%yi N:GeR67OmM!6t@!y MuI\ ` yp`EA ,n4,.T:i "M]ZXkG5?;Z96n~W]K[Aةx Z9Z S&K2[ڢynRn:z3A`1TcegcGrf?{badzf!'$p%% vqC@ub,ZK,-8*9#f>)H7 GQgw=Q Ae#׵`F21*Z0$H1.T94mN&KmP.QD@oS *"o'>2ʀ 0Tm}cFSq@Ibc~H Al'%2?z8>%!iIV!@-gJCsJ5UuZqn"p ch\I= if>2U0>jQ-CS3x3=9*xIд>6v(475}tꦉiR}r:лŝA *jձ슻*WF/ 'n ͊wxl+x`AK0^$}*jDH@Y. ՚ޅ@A*kଫeڻJJY~+AoPb QrSYW &a i-Ӓ 8)$*zxs ¢Fk?|XMrM!?nmG| ۩83BL T#li`sMX }d5<)dhZR]&YڢgjvMb|0S Kd2cB*CIAլUucd_/ .P%!Gdj¹>g:-ۆZ;Kp&U=]\ i3,i(#˕/]fc-?cVM|;%lC"m^9\#B i QVKtWE{n^M}5^/GntAV=kYOv#D欔'(1ϔt{ѧi #-(!RF^|Ѳ4}!.A]EEg2x5z%jtK(CT9މ)3$Bw6e}T6rp9gA2 hZjTGh"n!7qCD[-md S7 &m u$1N/OX(y%64gnU5%nkbBGw (('H&tĹeBE8jZwA~H!1GgAK,NHZQ'y7=ݚ5<& ש{8ƞsjY;3m n]r &#g˔12pj(<V6nb0Rry>yDDÄȶT%]1gn uM :A#̠f/s,%hR;x>͡|H=4 ga~!Ԋ 1`*P;lb.LخCREIOE9ց^#׊ !|ƀ rjׂ(<-d_5@fIϼ0YP[HX2xI5riF*ОiAK ֻ,?Kn6/Dzh,8&*o*00\= &Nl/2r !2 ϊh8KqX%`nRnb~=m?ASL}UVGf~.H"⨛S<`G'I/l!1 cYJ Gƺ B<͘P;SVA'u+ƎBx|bwy ]8JӇO)[`@n^s\2i$/)̬ͮ.cE^mnaLmCT^mbRΞtB&h2=x=aF!_D( c(v hu+oYحE#0\P|lW1#$Z8WgE^,q(^cr A!>.ӖnEJoT ԰ eK>v7{(gegD{w"c~r6VKmf5EZ7p"pϚ<=sϡs̃;[$zTgn|o!%%Z!ǏCilUX.įOcYEj+qG:BJ B&f'g+G~fMqCbD (3.ڬK{LyKZhQ'@E8㙺Xg?m lN?; oSlQ-cl8D`iZeFE+ճ!-AM!u$3^mow"Nj W߇U=f/D;Wo SWtRyUrMwvU>N֝dƋ6=q}>Y0ssa酪H{ЀZ4(af6ɒԝ9ׯ`2yqNܲ1+p[i7t^ΔgRTvyFiN)'7uWPOEܶu8LCň¯ۀp3bVC>JkH*gzȝFL PϋՐw"0s(_5G>͠DAR6Ït`ޣ^0S&W(Ccu8cت5s{q/՟j*=4H(kyU}*Al <uh77*)LN~rBQW8˟>^u > B 0G6qT@K`lAqKP p9@U5f6@I{4ۃ-fj0(Nj7St](8y1M- E}5`jZVr1gJNmJ IAq*PcP\y|;7+ڤ x MQHGY=n a98G;=tYȑ)² ]cmhar֭_JIXWy,fn#`WotC'sX8>8z4P,>]#3nD!*i}0`KCk9CnHH l1zI u<4ɡyo0qSOM.2:wס"?K%q{YdsBٝ."r"ήlbC ޙyfYigb|S_!%ۧ>}mBBdY1tXoML< .Lfi0t3.A^"w^^1^C족ED9Fҧ~kV3G.A%AzK65lvlijOd 뙻/>bZb#"! fX;!oQ3ML3 *yS. 禌~ vxѸ3WӍjc馆"F@kCUg_>նvi/W^&~_Gw?)>MҀqS麶wG!g+О:[H`]&ǖ4FcpZpq M{VQ/h!"vqM,uR ;ѐ?kG]S eJ쪾 X  k S?=hlJ5?e. c_k~7N9S==T鯤I̺m .`tӰW cQ@h\pxͤ-s Q|J56gk&lOQUTj0M8܁ m^h9+Ul `&/ Fـ= aCmq4' je/^`ND{/]j`a&k)OЎGOUbg@yғ0¨ߪQ+ј UT9IHΎ5;=r$-&H,d`f*WɤjC G6?Eꘌ8V~[à߲Q38 -3͒Cˆ\+joxA|Tr)0Ss,kߝS %Ty[?[AP@=Od޺5,7>(tG\M_4b'wN-ʂ {m *Aǿ+G-2,2Нx!T&w.[336llFK&j6~gnhN`򞉮(ŨRVIUuXpgԜ}D)@  ] n,300oǧ(1l M}g܇-\7:w oصnRn%=' UdMLEٔnj*Q@N~ T;xzsք.ZRgb?qbNZHlnVֆIpWw/@ =tmw:˲ՖbjHd'o!G!-Dl6$9Knռ:sijNDLLawW!x pCd"cg_k7Wj͹RgX9dvG °˼߅%ֺ4J*dq!n/n:l dUܲ{<99Gӏj $+)G׿X٬#9C :$/QVIԻK' qN 颷AFR{'^bC{]pi_=X auֱ_8'wqG)s9J[TP z&é3l AOEݫKЬAq/" l eK'n\Х`y>p8΀y<|X) &Y:Çohx1Osw!*Z i%kv?7FvC9X?Gs]T.ٜ5JXh3 dZؓm9:9 mٚ>5O zIjU,`Аf{z!魰ˍ?dHK9 / Co̱1" +/u+G(NW8cNS,d@$m(CZ{ux]rq h2p|n&$lA?:)zh+FQu$8-xOegIH'gbeoN96BҳϐqT w/[)zwv5Q݆uI&!>Mx貾}3Y L{mN1=4X|tO"K6: fDZƜ"{3,J2'ǐxZѳ۰4&=9$2 NQ2 lAaT|7d Pz>j2-/(̠鳸9&g>8"9WlsM.A"l=C66JMu`*pR3b+Dei؉HˡG3X CGygSE<Ğ` >lӑ6\s%ka#X+)A*{dkhs.hc{ǀuݙͺP豍+yBbySj(u@lp㖟_9Eԁftg;uk E"<3E{h:XYDȣ9hWPQ39L^كnhgbh;k)D' 5EJ!LpG|(cv剀R Kt5@U8^]L@Ht?g`^-|s:AtR8eaif+eUd>HɑY i c%$_/x:&~Qr(7a%]D3lQZD?'^EjsYH*\'5 ,TByvmMYX8,C~dU9]"9}/E^'140f%e3;_=;>L8!r\jJVʱb!P@v.0t0SιK_FZ͚4]፶qPP3cp1'HC3 οJ@9ϨQBxPZ1`hDSI~K%nN @MF=kS8DR7{9% yY5E3PMZ*v}V9x,"'k@;cXZGh)'ey_ԇ|NK:[Q#V&䩇Gyy1Ącu_b6 .[e06y=ώJ%Ec $x@3R.o{LJ#/~g|rVp: 2?ͷcsg]AtR'_QL#(Fk(_~xc* :_Ͷe0sh`6.2t-] fýR=ɵ|57~ǻq k'DhߊBE윖5^ύ!FN@q hs/BdRz'xlQ煶]M2/ߞұ.>AEWl(3^"ؽ33d |$H$H7t%=[{]/(mbtJ֏Ӧdv]1CZq.[hEo![|ΨW֓4+@;.Ed>8wFSvhqrM>iR;iu /7;Gvs&igkV )[T4d  ,6 +9RH-Pc&0_I#Si r *84{8~8CKȊX#YRA =gj=&W'i_:d+7pJd=*" ϧZEu麝φÒ=wƍ'de񲫶ot(,%Χ$EK+SB'G8yQ{l槗@^xe<`$Xh#Chs0ɭ/hj>X]wU ?G뺯aפnAdzdmn٣UnؚDwmjt?n"Xߞ`fAw9ad׭Pi|DQiNϙVfDsdID\u@69.'+4Yη@v#sJ(\y,PoMSC=O 8l#?sq]U#{ >UN[xu1⥫  t avM Qo}E[}#qKdaXx3º8YVKwb\PT}e+4[.kҕc[Wꖜ pc'3udX:s]gHf^6"/Q Q:4Ճz Uܵp&~x6`ܱk'5}BB)t, J㋝CW"ɕFCw]wrg5l ҹ1teXʔF?]JJ-+Mw^q`ȱ\Yٙ,$u[ 2.;`Xb?L7Z^yK;#I;{-ﯤ )ȤkTۻL!fg84ԫ=Ӫr܋*}]x tϵЋjaw>݌`['$[ԑdBYx:pQE L~z5&x!rX뿩Wa"ͬF6!H*f꟪ȆN=g9R1b "51Džo2c$ 1ol2/\V-)Zܞjp<0ؤοM\ˑ?5bɬWY,L)N+K#b 15Z!{NJ^&l7_L  =O-4>dU w: !۪j {I~:ȤLQۜؾuu ;:cS#k%Wȋ#BMix3?JB . Lg4Gs- 9Rba(Est{L3%6S|\SBHЊ8*SEdLƳ9 ? @> A.f;8ΥKiSb6EX  7b1'?nPl='s5lDƪOq#`T8hH]fĸ{萤%~itm6>ͮ,I@'/kwO@{air_ Iu->&bL|=M(XT͓Tm<460Ye &O4g g1gd@I !EGEi(xA \] rXjpHA"M_B )Z`:>se\2?g3`T@}TMs- Dиʾ-R{ agg7NEF;hƮ^̳ 0C1x;<elEu wpOV8do[^# LI{?Gĸz<";"3 ~nUŎ,|3Z^m>c:X,8-B/h#SXMv>4~~KY83jri{c8]I,Qʡ 9 Z !+79JtAsc|ZXgҶaQv`s;OJ81dnmjQML9tR*+@t\/B,$a;MzڲS~}Nc $״#%[ʣ eDIЮqOg]m~ah) Ͽ5aVy FMW`^xKOmF$"Dzm:X0$?zڴ'ݻ 6;8In Sp'Oy>ߐ3LJ[VLM@d#lұx¶ovVhJD߰/*Rf /[s,Cde:=m&k0*d<+b$cD^鳷b6;\"Fg FS%{HLG)qRwp}nm22j*=xѬFFQgؽ͙Xʔ$CvuV'憒\]xGbUYos C|h7ad(\0xjhBf}ǣѪ4s/G]ނ/x=bHcA K:$}Y-oϕl<ƽdv,r \! Au:@y*]x7J鎥H{LD*I$ISY&`ԥd_t STz:ӿTf!\pQ7T,dg_n3RX*v—=_H]Sw=Vvglw>%]7ʧ;v%C"3Vv\I^ mtP:`ԳS3%`^xX=Ro1H8y"dԚtmR,^ot3't㷠Ɯs[F|IuԱβLpʏLڈayP[kIҼu 'HSqnJA eAY1Y(U4:xuj_gӧ`]^wK7 Ԯ/ G'eS*~IPCTwο 4oLTMu8HK9 ԟ eON.A"^s^M8ڇq!$_}3ij 櫍Vzޭ+es5O}8= '*T<+r "5kcq%15H]F1履<˗+"b6“XU!!H*њlzKD9/"-:apHk<=rbittGD4'v+ W62cXc#]AQtѢGcΈc4gǷ #=U 췤{ќVЈIL󟸩;Wz5gx5{t侙iY) lx~Ai*hUci刜Na.˚Ty:U #M{U:5M=f/hiVԟ^}`vWT|5?v#g*K7r`ʦH66X3/lJlcJ M_#ĵ|w_Swh>2[@hLV$ΦylFCt3V;rU& `xÅʢ9unºP'\-GJL^Q23r%E7[ $z$#tΩ$]Wz~ C_.G7w$mFq[da0q 5;[O~bl$ҵsڳ&l:ރRZ񚱿!"`&--4GS!0>X+$wd9H9x&}EW]io <{Ǘ/ ۂY~)&|~ώ:HebѰߠemj?w"Qm2v/xchD[Z f:.9Zm|.4QX4A20;y|[+6Ef!;@VGnS\ C2vކXxrs“Z^W#V? 2#e0+yHZ1!5`q$YNx%?">cNGQzKa{_ T\D1] ./;vwնXԦ #WP 2iv7@f.-.c]JahcYv?p~sZh8c W:uͩav+蘔ܠwallM?p$ؖɶh?\fsdr9qQЪb_ޣj?Oa S vK22"UsqXd@fE0qX˙$]qH= |)-Ň ;v Cw܊8S3 8oo (I~NO:䑇ߚ{X8onS 43(2iq5Ι{?/ie>^=]~ ݽ\w&L|N=Y{U2zhq狯a&kP=zlQWd}JPd7#DX6fȐOL&93CH@ݩ矃o|1tU=t3ĺN2myYM+(aRENgJF,=53L0-v(GJDHbkRj 8iWk.9|"GK_J錱v*cGm]Ts.!8͐Jx1 ?v~<~}W=9uլ> vW>`* v`c-d hX(wo/'$|N^d1[VG?hts3]*zי2uOl}>K$9DžnL_oIUZKK\Wgܶ z7$*ZqN9 X64 8?ai: T۫tx7"YQJcęabL#J*=?\~qC6Ysb_E8G礪v9Ў0w"O8ME|,my$S)Wwu2mƒ_Xy騌G؜H]8Cw6O\d.ԋLq*v-A 7閞L{P9 ^3PTՊ:&0 P7b,]tm_r|Mb犑N{b>~$):(vfCe#])glE W`/lgp*GayKrY29:#y%QC Z%p*7b| 7@eڂأ8ТoqDzlIl8#)IݬזAB'ynTkkS"^膒i WtU(n/Kzymyj ɛ# jj?vJ7I#ހXEz `B\@[ g&mJ wI L-Bu:։+٤dvq^ŽGiSU m`Ƕ)E8J۞Y8rSVw U-+Ff lt!3ͮZ+p78 b^ \$@v$˘J I0T^飍\wӍ-b)"3OQɢ\v,O"Q̽_jCCzaW5!~E';e3KsN'1HL>YWxkbe,>`a!GX0lp9\$ֲ ØNQϡd 5oK{JyayNlz&[ )r-GSίiPD͈WU:0{ګM=% v-(p›9J/ntBTS{/s_61@u?=@V9݁)vJưn~?y|0Hg+@\ [5~Mjp Yk']"هˤdQ,*2opG 9kAj8Es۪*qvԹbr!nY tS{tpǮiXfq(O5UmS9͞m%s;ū&(7p{SVM}漣 J7e&jBv$mZ=X*q]s|M{;$ = Z6v$wT;>]&o9`UXaoVnDA՝G.~oLjBm%1Vkʲy^ ug͸~{HtUPGma> 㣮v>괉R#~azbB̼W{~Xj3F|Ics߃^B,d 4 ~} miwmBVyyoC+j {J+f,7'?^l̀6些[};QqI]ٔvȚl(tUu?FNxMa ٸeaC3΋@N72w(B {y}ʩ]qa2J^LdF_X+g:_BÂ")3$Qw)|%[-`!3U.0B6( Wò2'jhJҞ; ʏ&ɰwQq{fkB:Rħ۾0!LzctHg͚;O FQɳTЃWD_caszZy.?eJXGSE5WٯVZ =Dv0&6>m&voe{Q%)ړ#]WIȇ^ ͻ>etgs07[&;34(B)-_-k0uU0g>F$_i͹TM)O$(k$m9=J( 2 gˍv-$ؖpOﹳ~i2XC({}yxr; Gl4QdO *v}B7QGK꫟]dzbӊ2dG+(: ;S$)Ҫ8ZFjDW'$[@OKq[&n:PPws]My*T1UgYjůL'{0΋P؏ev#3"@|GTR<=)^! (ٱ\'.f*RTi -uT\ҨdE5߿FK wshRPȊ}($դ,@li䡥_F/#'t;Zi&J^XRg*{:8j2h\D [)h,+d/)mKXYF]$c5AiVv6Wf/*sڼ6Z8y yd ]FhS-`9/oSᨱ[î$X;r[dKf>I)ZqPr֤{%$Z'XB*xDtfXK9ҦE?ݏ@q:K9,|/ЋpfTTbfEr7-!K[FC4ۜi$2Xdd.w|KpnwKatԃ;A=C.U:e`hqG'Tmh} mmӃ?]p jnXq=_OUx/CLJ\I1l]&Z}6ɭjoz6F zjz 3{5FsN`MQzf}(o r+/l!3` pj姱cW |\3E-6Ӱ ZC_甶}DcDm]$&|5% 9]%#|,4ޭB=3:f :`pE&>!%:FE5p\ `o][PAxa>bI%;<+b -&q|@EGMZ!8yeEu<)}znR"1$W2[uH7 eDVǯV.]ʡ,'ĎkdH*nB_1t;9LaY0Bpn"%g9btT\֬tz %vx^Î~3k(Ū=~8c*fY؅@# ^=g7W$Z =I%g۶zE}6ܔ Y(~e%k_qP6 B[eCQ pT#ZiF븻wN-N`rH.1$^~ =1[yi(e&'9dΦQ6LGElo y3abJIޏoЃ0`b> 表Q( K5gE|eߴ)>R5 p^\ g#_oYcY=S&/0|4h[cUŁ^/>;H.1B~xyMT#@56_vV|8!'^ "*НH+®*)OL*<; k^!?dQğ XwTBMHBdx@Mb@-?DYMy-zBqu~^Aފ'Y,| X;ױU BO|ec~jHOlV| ~LKl]_Eeo![>r=#. ZVý|n^Lqb~ެɦg,htn9LY7(0 L$" Z:Lrjx;=*鱺Jv9k_:-!ձ?Ngh()F#s쉬 b]ux#1C"qW{` yʥr*f'IYi{D7ɤh6*؛HvIa TBPWDFʵ-nONNk6_W=WF7`ϪV*1N;*{ .l>0 uNDMWTٴ*)! :CyGǤYlȴ{EhS!c++Dn>uyFhc'rh7chor<1  Kl^JW(zCK\B+r(!NG7>u.Za Hpy{'ylhUubr.ݬҾ>WEkjʹP@͎0``Ezl.ʱo̔3;oiC 6<G 㝪3H>pz$t1t73qR򻭊&qOrmUQay7jotbjyr-i|b7qRRwXNae4~4S'HN mWʻK e;lx N;SU1םЙfIŵljRHnfg|˙^-?&(+7Rmez4D&aΥa>CLWi9;֐bg`ZrJizhh$Fx\;X2pt1;gܵh?_U =wڡ%Z<m558S;wþz9?{6zIC{!ɼ\G!!׷_>m J+m@h?(ڀ ϗQ H󏉞01ӣ+vu4~ K8Pg-ÓD>5܋C|t^Dn1wdFNqi\ʒӏNFVՀr"oWmm-»tAʋ;i6ydsn"Mt18d>KWhBU`ؾf;goKQ PV%Mo%\{F-)(=|B,إqmu'}eU/C%Õ#)uLa6Cb ~ZC,DLMoB4`Ax^|[:ץO‹:ՃǨN]<&r 'bGc);q\ ,&։{$SX;,8s +pRs!SOpXna:x8ݼ?y}M/74xhT@Fx^O,c |[ߝ/z rMb,A,4"Jhѿ]yEf-y%Z4kc*4N/Ik*U-Tꔰ#Ma ?I]ъGZAW CkXT8`]|p1rEp*iFaWvet0YpF'y Pl*2E?IWc5]-Zi0![b"?=p+K q%| hTXWrXr^ޝ.u3 TgN%Qs\*GP!V(YoO\ﻃD61<$ft<{ "manifest_version": 2, "name": "Subresource Filtering Rules", "ruleset_format": 1, "version": "9.17.0" } PK+ s;PK!*assets/snapshot_blob_32.binuP[_/Z(! BCqšw(błSJ! wx3sɬ}ڟg-gϞ u)?kܜ9_]Ϟ&<{-AG͞Iˣ&O'c SOW]ggLX?ثK0=ӱ*'WC==i~BzEhtm(mZֳMW?w|K=gp;3eݦzvJxאRѶFQ߱kxx9#Z=v eP:5ٍZ=z~B2`ރOU+q^c[=J|y(';VVCdq¿1{x2tαU8ce9Aa/7FMasFn|K&It\MifK1_jջ+|i;JcwB-H 9ᑩqWl!ՠTx}QJD7DH!m$ h?2WaS#'u%G.wcWXTqoT:>OwdG`/ep=7IawZLp} YT.}b/1VKp:,Uz;v){pܷS${N7 I9e4YYeLy45H4=woXJ4"nh-F辵h+G~YPI$tOYP$v9xP<AUcb`ҴL6?wׅikti!^Y_`qٷ8Umfqreftw2`qR]")9ݖk=+Pt7H({&ng&-ݓMkGKϋh-(sgY"omwU^iE"rpR,Cgn46ҡ'äit^"7[_?{*o35tx2hcхC36ޮ4駂qI)QY9]Q$'EH0\i>][dݮ$e[1gR XRvL9tS!gF$V6 +BbWDql2k(Vfq՘JVG2jVX`YflqA.U؈oY/߬%82! 0'Q+Itaag6O󺗾h&~ Z&}MaQ~Nxy}-fU+2L #ț7<6SrMaCom~NJHcz C& %4Qha'(fLsV(tI!@ <` 78zN!rQ qd&o>ˡ֠YZ*uط:}2{$/8!v l$v3:L ~a'^W3{"ҙ{, qYU)ظ@fm_(Fy ܓLKЈODZk7,*C6j질A#0)BW{C._ %.$]=)m(ev2l]&IEV_S9ςy ]z"J0 ݁\ 'zD8HN3_R3秣![0Y\~8r䞶 .CH XX./ @ TrG0ڳ(vi'4=>_p끨8!g& gCyKd<FH0* @tC|`?u c)`xDK} o+ @Xz"\=`y4Xg,7z"H ]Ѫ ]!'@. 4 ]mސ;ORȉrg823;:(Re\K'Ҫˤّ 8mW-(VI3%wK8;;;XwJ@.:aʿq{b*&#^M|[$ ]ƿv] h#«sַ?}LǪ|4+E2ϴbd#LnnrN>j_%&{ˡ0dTb]Mn eɅrˋ%bgB2f i%p%"%Khhq3#%i=@j]@>~HpDjخNzL?8m<'\gNgsgDM~Voу n_~o}O:jNC_{oeiDc֯>ú .?vK5pEd54ND%H}Ae~VV:xq=#K`૦DlHCdcr<-)*2BWoD77[wϯo4QՑvm. pՍ1S8>gwrATȄ?Xf{,WuehU"Tߏڪ1 -PrZ\9 aHS!oeي.\9f" 69d{*3q8P& cYo/<}4Ԑ9~v:þɶJ5Lѭ-gIG21萆d UB&4` <$ DlOPD\rn?w'DVk󁸧ɿO݃ 񛊘cu-ZJȵ,!32 @J nOCX~zJ6.Ԁ7FO>YL'qvz dJ́L5VM>WHjdJk4*MM^  ':ga>)t鏌mRTovV%2$JFUC{~3l '(\v PCH1|/]vt/spJDs{"6 n l+%SԦAc+Vs91?! 9sKFk|N L#TrWb FWG$}8Y,xZ-ǕX u V9?Ek<&* Tj͏a6E42>X1MWNDd )+fd7s2<C <1@xy.(9$! o ]NimW'LT9~y[qW2 mt#9r^Ȧ-R~^ڔ}GKzq3wu}NV-=wLRA:X6ۥ$=spbMy;Zq5%GU6tkGt,@|B^~ZR\^,WgpKIY62s9VFY>v>Jv!IpZ3-lp g-&ܫsP󴒓R5׭|_;jE2pօKo5IK8PZKKWhWy?DuW'(q( #mr~(=R1Pg=j 2I"Lp |B=!ϗ)Ɵ6I ,MDykS;ŌMVPAa|}w΄]߇jBc<iJ韴e*V+Y MX]9cϝ< s1Y"_XBbS o4E>uAe&5eRF8vy=ml^  tHh'E2g~&U\g,B+NI0QFx<+ne߁8{D|(g(}8_` tsU}ѾKFɬ oCZ֔N0Gj"j&,ZTʀi5IhI BQՖע 2GOW#a'TN6i>?h7^s1ș;FyWUSݵe*1F~8`s6?2@- $1N3j71xgў̇Rǂې:baТ{G#""azH$_#GV$?KtG+nM,eQx<ҞS{8AyN>ytu66pW# ~En0U\WB_EtD ;D?aѧT1K`I])뻰PײQd.w[ Ĺ߅꟱5C@Ы䄤fh 5-(SnX^9)!;PH i1OK~yC ?4e13#`J9jIZ`F$h }a?mIWΘiwOkn=^UIZ,0&۰r ^E4ۀަW''h-Y?3y|T+j>ŞYkW❧Z0\c9kg@Mi<H8/&6 h*ߴ 9;?dc1rCm˽tϖRPx=Ms.[+i\:>%hFJQ\/+y*)dSjMYN7:z#!.dp+jBd1NTnzpCmuC|5ŝ&,pcjt~y›;me8ߝy4WwfA.^؋jLEip?j#%{$;BbչoݾGWxU7+k k wfp$ӱ?|8r!O<đ,Bm9\cAIZ>QyZY6~Uaa~ӽ XRAǧ R G8p{K?| X~:q@dY;y zz%_ë}~IsIn} !Rpu#_!8oBS `r|TZJ4gߟL,"{w판sbC}䬠Gi[i:g@OypC.H0JDlҭo>zjH/>A~KBHOr1ҽg'cP OV,I.VmkHͤLxoRȲM떏F{ZF(ՠ%ʫsAVC[`A~a q#42#1dG@ /p0 ?Tye 1evٓj'`nR=DrxIY! P\|+EgvHt)TrrKw$;I%[k '*l $J~(CT$STw$;xph5TJ+)No|sbkR \I˷.ǵ-@9k["ןo)?~?Ufk Aw !1vJh0D=*DtbX8JCeT+5ш⥘-Ά%mX3`ϩp>c?3R&fK0O1)SRԟJb>uv9 $%P&v6L'ŝ'@q`KQB}lOBWk%+BWLƢ`v@NC 2c yOOZF|d"Ođ nGqGEL vH|jNI3)|!gY`IB4`1_ !Ԯ7|+S@>;+d+,{~{~Vx%oҞUk0a>rY? 'RQ)0Qdd`I0_oPo~CBW(YFYB$`v=A"c3!pVhHqREZ1!eI:P>#_?>$?9Q'GE d& d.h@d0=ݾ>p$Efm_ҕ.]Fkoޕ)]Kiե .$tnH!h҅L{ -VfʵGeC*O]d]ӛud {.k(+f +.f˱ ^ g߱$+.f^)=#aGHBa- J P@Tt)^*;b@jp?PY\48K`0xkjG HN5-8r#aƿ߅33L2c`~x 8ETawTwT-ᖷ*\H⭺!a7 ́Էhy>6{OKzOoJ1tEp.DrH.G8{2NLGpXdF8{T||w"%W ;`mV0M®W0@r%IQّSSHT΅KSfX]o4LHtE\o%"g7"7pd)K|l+od&7d.rWa2 /d(Jne(uo7ej)=nU2R~[ /RnqOhdˋ[pw(SEɯvz]vzSnx-El!WTl9$Jqb;D>l5 Jx:;w^HP޹?GBO z AWszFBY~I ߟeZl4O~F>E3a3tGn0 (|T %I',EI0͗mpUHU=LēK]1s`"KO-KIRb*ˏb)@\ WЈ*`+"A|/?5q%-_%^2aFRcE$RIǞpGSe`2G6e"  KÂbVKJL937rVV~휜sgsH`T{-sb, %IQ.|y ^NyٝzR'Tmyn n|jPy~kRbj7x; Lv !|V-v1!~[3[U-k*osnYƢ}7ؽ/]ҺHcPVaI$9='Q5) Ϋj |^aO]׺]a8Z|CKO.YP?K u-zYkMT!^34σ9CVP\2,&0@ŪHK2H,|8Oh\hs0O'M!APcsB"_*+W±ig_[0Sk3ofHEc~pK[ʻs԰쾝jwk^Hy;`q;}Hd R;:x2f2T36ܷILA2}[i%YM:E|qv-k~>f)ˀ[= Jbc4kvK]IKWuQҌQ>:d0yYaпpĀt\ x5ΆRGMvfQDz7VP%+TbF!H4A;dg W(P'~L?|?8UY[yN%`R;VrR6$38+~Ѣ#QǂqNuȧB,{aa{Py'4R;km|{.#O"IHaVhYLm{ߔJL0^q-j`;m|AƟ9o4$z:kѕ8a$8fKi  uGV>':'2()k!h^WI "0,XqISb`9F,Be2 3`o7ݨpA hs^F J`}OMQ(,?J@`1PE05](,0DyŻIj$w.1pU.Onxw4>1'9e/v_~aCeߏqc庱5֩IT Pߵy%=oK'o#xM[~ :gɶO"Lyhd~͎ry'Xekb ́&4iEن :Ez 3ns@-Enp7tJR7!sj /ZE2f22|q!H߰$S&d][ӸʟoN-b+ٕ2_<?a 9{3PedgD")qo1C:Qq}yT@tI3Mgv G+bL*'R1MG$jߒ2jz|U+^HmVs帖9Sg% s)({V(0߰%[XK6g/eM5az(eڡSx]ZϫBwo7qY¬ڗ4b_-)rWeVt%9)옫rf^|҉Imє)Sn-t/)*FW[`򣚘U3yNKh)K5aiOMbKv9; x&`PT c$b ~ #4=GZ8׫̀j7`aZ1uu(ᛃ@MPL*= n#B  ȘZ(KHsh^{{F N*}ChqٗA}JA6RBDi߻eY7 I.'fpՕ\ߥS)|>KxeUJw-^}m5)[!"̾{5;[th \Fm<67>.OO{]DyiV gg>w _ P4sbW519NTŜͣhAy NkUe[L9*dN$H\dTIH8&}۾ʁ/"ob-O-SEfsoFTovû4+nc*]ߚ+[HOySX| _覛{icY]O~A^c"&Ψ\g]h{=$8H!%o'ū}`ݳE,S?BM}t ,|5wfs'2QuX]4櫴Wk:tuFiu e+L'ddq |Yqb"2rl.(oSoK\nHKfw|~GP)TbjIUxإ`zL qO_n5糯?#³'QU&XƒMB:gqmW^`v)~$h3N~1ƅ vMĪ~oJ~TP+N^@^oOMN؆7$˿s2ԆmsX&[fR|eFx, Q Nf톸(k1gx774[OeSW7@0{+tgCe:7#mL|߉~yQP{zj,vb&_\)ۖsvNwUPh78+PYZi*zǟ~qZsS dڽ ErX&yXR*rWd&dܯuv#>ٚ4a=ztmyWm viUko挾8;G~@OIim y>"MvT-CM_ĵU}Y+̯wt,Q}dg.JF"5_gzنYAޡ|'ejnO8h]A-CΆDZ,'7R2nD$=z5^kmU%c#-9zJ13aZ5C _Hϼvvml}5='otjю[I<f*E+~߻ K}=Ő9_y)-?{cmʢVWivwCfJ`%KzP։_xKŃXZ ۊn}¨aĻwҕG[AT|ad--k~26{ +,#h/CL &߁_5|3WR]wnWh$O 嗐69J~k#wPs[h}T87L˓<$-_ ϯ}~=x}{|xy &\\݃ܯqV#RQAs|Yrᵞ?&lmɖ(G?L3=x/b)$sξDKTdPNxj!tJ z4‚Lb:cx!A@̡A~x8jT8 [APjP:AxhoܒVADY /U[h#6_rmDY)1ъ&rWqj '1MPh% cMY@bs MХhM8-eR1j8k@ E\<f1 ,De谣\cg!6#kQ}3$CiBur]l9.`4tΕX8k٣*I'Jgw ٵhSSŶrНbyl͙8[e7jl(ipm=~"*P݂%;ֻW:KhXc:W5O. /C|ꇜ[P;jƥ:+lr}b~ k\UV>@A[IE];wMnljnZC%~m9p7'Lɠ1APh\|4+S93,1Xbh^hqqQOx bU`dN%TBLTߕ$ 'KOZ>rg*4'lLVjK 92UlYzat!{yOAm#}ŠewG__13kO;Š-u1 > %31]vZ ޭȍVi:FpƷkdUl U~1?a5)ZͶz;NӎжneAwn{|if6Xũ(4kw- GtMY\ `45*?cdd']o .EOލw?虾G4p;4Vi/LyUŬyi(du>\ƫ0kٌ,M&(>DOhZD~e9rǟuK R+oN]46KD:#WyD6F6+?`\^d\.|{mtI=wMZdRnz_|/h}|aUv'lzǸ@{TuxzOCJډ?Zw΍/f Ǹgw";دR ٚOwY\{vO|x5`:?},0/ <>NOHӝ4r]=/j c˓4nyVn, ڵjpꔿe)ћ5(ȾRn5T*ȔTk׎vb Tgܣa|!ڧ!z6ur{'¢f?WbF?,G)1\ )G>Mϊ>%OGğ8hVFNA}I'fːs3*lfQIz+d7DyfIX)}MJ]HY3,1b&PfWOZx8!I[HSdr6)H34/foBwIrx^bTlV1̛ۜ?Ūc8QCӀkB+hC3qEW , &mX.1&\=z/,5I9F'Y_X>Qfg/jNU.jF=OYR"x}2Nw`wnyR:%^Ծ-y%P}z[}OߌK+) D3Jv L5[(g'ǻTmںvzPa74][ϔoޡ\7wcU/V窒'e\c2 udVْ^4SllElry#_~Mgm"}}|r*m^|7|8*/yGɜ~DUKJ5? a4:)( jC^^BmU u&xⱬMj}hpe0^OtMa^ymv' ׁaClCۡ--Plpn݊S 0S݊|_9;]wϞԈ\:]5=_EWfK[Ϸi4.$_ :XT".%+ZoK@c ;$XXuͮ2?j̥J~O9 %&u/QZ2),ˆ ?_K 'v\<~m' ~x" !Pĝֺ7bD~:*p?o>N򾙵 2&gs0AbB[Pgy6KPUcՖ,-FcFLfA~G/<#<ս$?!Ȭ0!H9MBkF,bчŃ&r8PIFƏ懣],Ꝅ14gy}- j#xe18.?5!~!qN>/OnWrg;t$a\\~F/IUԝW52 *j 探zmb-1 +Z]E#pWfSj {J05Gen} \8Wfy ;N '!{cJ~ZF1a^V1ZPc^Ǡ`"0|ZĤĒ/ "YjE x |>!^dܭ6lúv:LFC&˕b ķ ]{nR{m %)HGz5stQ-ܦJGyjpFy,޻@K+Bpݘue4y??}!*R[$~s;iu: Ħz8*;Q>zIo1/ʩBɽī`d:Gw9^_9Fl# y֭uI,;tE~̫'G7~LbF[ 'IF>yΣbQe1Yyz'%X\$RΌE|,{wRR^ٴvێ!PYFc)^3 j3+:t͍ t-)1WfXTZ  Q#_] {tw(/қ10ӒH"LuЌ[KfF,|߂,C ]E/i"S&TdH2נ.x;ʜRTi;)7}:y_KC xE+nj =_*%##Bc ]  6 ;?f>̭dfz _[rs4  ]=\w) 0dZ¸,$4{XXq au3fBxB^1T G yеq ꪴ쑖Ȋg;IN^F9>Ĕ$QZ0⥋!ЩS.)_N<YtZo;)5{8u+Φ6h"KDx.HmYƮKZ\|(T9뛱CӀ*nwz?j Y ȢpgE:wH\c3{"SPr}P?vuC]#w2%g㞻uհyد_4+Nz}BTV+I[Eu>jAWzi*L$~UOt(/ f70emaТ P?WO?9WY9X߈>JߤdpM"8ͻ hEcA}aܛe{<~1 Bi%,R?Wu"*ҌOE@ ]WZg eJU -Q{6İȟHA-_ą|qrsNE :[liܚ3eUsd4D<%mpF<pec2UBo1f0Gqbg8Rf;הj:{K5k=ve96Diø)QS 5Aܣ$y)Iy6MOU̐K<͵Voz}U0VD혬7.qz K'7|HwXڄ`z}bKGƍNaB>>C<ȏIU^J*xm%||{ ђ>RBj㯃ȋ?=TNoOlY`BHQ_?gd.v\EQ›%=thThy,e׃ZF!ƞ9>n eҗjW鞒ҎH <~(Z1O-CtxB9mSnݴoD~Dz>^ݭѬq[џ'vF: ecJ@$pl$4~Y(yN۱*\pf#}{}7Y>-3!FO_J&?sc 虒F?s{:A=δZy #"BK]1S~-N[KlqPhKH̯9<Ig"b7(;SVqlXe?$'OPpf4:aV8sO)"YP{Ugv"\lMUi { kvdH1l eO_8PD氦ҕ> @Z5;20e1_&tBs#IE3+Iό9{{H;gv"Cbq&^yWc#-҉Z(\V6ߗ*XC_ [Q ~$:]0ya&ɫ>2ѣI іm`]/Ï 9\xH OW_ȷ%@NB7G<;>'rAr(08q'gnnQV99 ohK#G@Lʸ$(xrk y֖Z;4O:wtڨNxz98O|_p.^|>O<އul=hjac g=EY}㬬lV\LKyL}{51^㸲j*Bh`断 b*eO޶]8π6z=#$2:rieJt0󮺵i;ϟ&-9|pp;P˪W06;:#I墤aʩ = IKx!s7k\$r=5٤{[)4h>CJʐVmmvP)G`JqV;UISͿlIƶK>_b%W4wZS `e,k*FGfHABjU2:6'5|Q<49Z>(pg-- D<,Yd&}a]Bz 1Gnm'a^M. oرnǵ?[ӌ9Շ[çgnaWkXԂW6DmpDZ CžFkRrkm4۾ݯa ]ΐIZҌ$,D3ԵdlޮW@J:uP;\ %k9R֦6(uDˑM_\!̍ĐnXPHU'KqŐ&2"Qv5Esh6p_-Lc@uzv*4?PWɼ0q#^34n +֨( zD^a Lْ52} [;cK5{eIQ ox\4<V~+;ړ/RV$A3QC٨4NW eDLԾTwfo>&D(ݿ1:\`Ӫw~=qFqb5' EwGH "<%^;t1YD, g5^^)9IcфnNz.AszBQH8N]%}AYf1rb?/| MNUMki;f;@M}[ OBSRWؗ룴Wv^1]}`潪שd G[ٻoVENοNP|^ԃ;PKv jULbE뼷3a2|g = c_Ej@{jk!H{ct]؉@/\B[^=H=~~ʴH4UT` -/9hypɵhj 뮣rnige&`L,5ԁaZU @0 @weS J!q ҵ&R"8*==2 B}H%/5=@%c MpxBw;m,i̙Iujl~h04lsss Бgu˵ {w8Lp+roף%#vc:7ܗ"C%ͱtxM) μqcxKQ$KG~jZ }(v0e**"j23J4'9{/3lF1˶cWc6l9KfӉ1ہ[6;x%!w\frv"Vz}|ȩK;tISc:Rd4iL3-OK,/p-B,̉)'<'憒l9YJ0ݨ-!MR#zfW$mE{ '`Bϋ%ad ո`ՙ?# SQw1%!SA̪6[KeLo6dYe<$ ج4þЎ.5b5 R']keΰJ5xKe3zŌ4SV~σ&vCSLc*!o1PU!Ͱ6 +eFqdc;2aQ*Z:P9,Eʼ͟)ugKBn^1ж(uCS&b< E랢%g<+w$JuLgdqsQXʾXL."AB)I[(M HqW…N K[#`1ˆ s>3u[~c_].蒺멬:THts).y7|8*9ᪿctKBn履"pKcY'QNJsH/7{S=nnhB]ͫVCup{fl~ó'm\2̐:pȡYamȫP ֣hec@0 R,SGofm18:ގrZ7 ,MR9#P?Sl'*p52Yn(OE2}d~!)Pf&5Hz12ַJWخ#{u/):"1'A?t=I[L_SuE6t3Qea3NEF7X&0d{CPL ZmY?CENJfV(ߛsә]z;)zˤʉ$:s˜XtQG# ݧkّX{:-LС/hߤXq;f`2GS* pԵ')KU+ KDV`zefY PK$:ؐ0Xnu﹊vvsP\7+ꇩʳaIc%e]-㝵 n:_\55 8l!`ZWt.gjEbHRj>UG;+p7=&O:uMWpYsXa*%w>!K]#nVd)yͼqiz#r7;7,ykyZ.,a -y%|R-zd_ṱNj|xPH{4(C.`J~p6 Kw R%wSցvT/2  ~독E0vP7E`mS<1J hP=V| TT Xrq _R]e'2=u ML;X];2*3-~LM`PK* ~Vd UGR`bO2<qp&`q !2r8ڼ6lɷ%Y%09(/xZ&-N}R dUmВJLZvŀ[n.&j˲:%A 8ɍќ`lcYqHf智Pj*P7AWOj MX돗"Rf4Ac*,10}}'(ZlNF Ez"˙xEJ dh1VUott J{$j0G"RUjǭ_)-fsxX|:Cu/ǃYjL=?#MGk2V"3 4.>ZX-Q4e&.(~%x:릏3j^8TI:f&=ҫܯ@,b4Q/b_z<ntV䢛{\WQ(AMǘgwyIke0]%O/Ҥ2rSȉ~k"Y -7ξwGKCf2{pM.J[&1Sd#Y.i֋s(qs͇Bi/#Gl@J *WAt_Pf{N{ c]OAN[7RԞhm=6G.#x2͓<9Pg\i#'R6!:yv\ +˖?b֪;Hn1Ho-] fwDb][,u}aV>}{ 3\u@2yGF3?4 0,Oa |u<f0V(qˁ9O j -׹|́Kc1Tt UoU8r/g#Kv_ENdoI4 l7UAӧaU,y_1DKV!~7EEDcex,< Oe>}:spi@A^H PE0*q̕/g^~th՝r@,(cl4 ",cd)FS5._w }I؋B<=TFP0K~Z>gT<=ޫ&KgM'Whab ;gDSb%ʼդ>W_#QI^aÖ )α;Dk%>;{E,5>ˡ_1Յk&  lƨU>2I(;s-|~z4C(Y{;17L7_݆{.󋝴tGWST~ڈkwuWɵ=オSJuXn|cABkwfJVZ,r2d5} `S fkAL|ɪ,TPJo,>LI{"+ 1p$-Y …ӺoCe/I S3"锸ksyhB44$ [Q0ٻO=i#A40Cg-k?bfTsLqBW0A&o$/ce/˺L:=[f>izioB60!*e$`IjLjo RGKjV@ncM$Eƚy*_!YM ƢȭJE#U;Lc,Qhcن}un[9jYeGAotYw5U\^cPHfrcS౯rc(`,/lH PlZQ1W=)vecD8ֺvM*=(ú q>bM)ppcذ»ss@B‡„eFF*ĉ@]&%   E % E %>b"t*e.1Ęp| ]<=<\ cSU'SJ5MLt|:gb>c4?.yj v%VCD7kKw`Q|!qECfB*GVδAw;J  6 b =|`Jg?8a/(y,#==;E_a,Xt,Ç_8FFW- ]y(Oy>a4(?sS1?ۃs\ :snv5f@f/T78쁎|cR?//!(H]A7bgyJip8> #n#O'- fO]83,%jweB}'<7^dbf:q94>/ o~ÆE?'g0˃Փv l,/cmŰhJM xw@ZkηO*Q9`V OZFZEyɍbBԚXEZ*&NIJ@MČ9 K}epyr.s!l 6VVYUX |T6>/$TYiNZRrJiHͩj/Lr;5 %Ɖ  L=;;g>̳^Wj-Ԧ/aOPTw''r1qk> n|BōXQ4>(ҿY; 2ص ̥\X }л=QQ >f)BsA B ~uo;4N)O~8P9}N#V&%?TY.n=i8a\X ?ǿҘ.Q|-" um6.s&x_ζEׄ&,FriJj6nfI*D_~cZ 8Tx4HPN '](]` cP6$ XEʓ` :EtEh^LV5lj&Q*Bgĵl=FJ.̴g )ț'ɯ:z ǔW?tՓEtSHB[|<_SfIעfl/bL^Zx 8.KtqKy5Te/!}9]['Dk+|P68$faePQ!$8www'xp Cpwrڭstuwt}JwM#'[r4>6;=.g&] Kf|  z~k(琻MAEXuc5._S=g؉,Fp"7 ƕ!_G͈'¯rF"GA4P{bν?4.Fp`gvNI`LxF{g8_?~Xŭuj^do6nŷWGʟ dFu5@[,_}#'÷xꍨ V$ ryAyjnIoѠ_lG '$ -AC CU<]: Ae"PLJ.s '-6R9"Uk Qd02LS$ny6xP-tés'\8ŋݞ͈ zĺ|߷Ę3+ { [jkb#,Ǧ#0hs˧ D"7cNykg[xtKX x ~[8ӈ4c?/Km#|FӅj29vSSh?&友<'mv4 &_A?:\C_qX;{b4ENDo f_#$x<Pu.H"Qh6:2r5;ޡ2! ^eAo-X9/@$Z6+xMNG:Kp&l̘P%A屠B tW hf𠃽 DfElrВTF\ MBllN5#6DhlC[H'mTivȧ7dj.+w2nźߥL z-UrPZ9*?( sq@ ڡV*-!\''B/ ʟ)@b9>rF }#D . B9PSy4FRe cDL+LS%RxJV2z0-jSxB6Ng'ÒӁ0TMсRӁ!$* ۓ$F'"04݅TԵ7wY<RBUQ%O)\^da";XfBrfPt dR#IUA9j9Xje7YL>{D<0aݩx/lUoYo]t_dQ' 3`! fR1NEc}q0zL%FnHbxxB@Z92Y'_rD9'UKQzW,W)xƣ+/N$vy?u|Dħ>By#z;?vЄ{Z H`4!n8{"/Lkd($Vl8?Q{ t4ް'rOyd' rI)2n_HQ=`>_^pV>*(^e _B$"%Oנrt<519 0qT!}XcgٽfB"v+Vzbe1A= x`Rݸ|j6aG xx܀f|@3#WQ Z9Lm< TVϖЌ h4-fzm#e:ڰYG.cED$}W2xW;kwvp?Hp`wQGgM<(0͋& [j?߾TaTR߉ Ctɢ^9f.㭰A{:?b1"Aʵ.WFj/^8(ʖjLc1mң0dghʹ`w}쮏FV qFtQט%?"㾰Tr: ;C꠽[v4L> MX͵ep߿|% \1 xN,L܎KII~/.U]P4HqHvp;&~W=/0$1>ߚLơU>tnQ ތTArTWaQyULT)ysO%^] \yN0ի4wCiUbz.մfmWLNK>.?Nf? _n}<ѻ+U+w} Χԥ{;pApnj'O"$U`_zA.z\hQzmmM%krOl~mtrqyy:W[DWN RSIVki=ds0D$94"gүiP_q~|4}Wnǻ4pՓSOy[rѫʀeyB|al_I1..8fcCsgNu=56QTR⣙\[[i[tNN9;uZx%3< LII[M9[^[|rYxkkxskxi͗Pg `g85*$Rn&(#>Vg 1- R0C dAsOcmc6IG }Q% ,\Sf.RNgKPXͩg2Lo@!yt%IjUSɗ*%5@J9d+n E8H ~Ir V<_29A@iCO:ڕQ:2pٗaI*tT&ߐ޸amC$jb}`5a֪P7֨/ݞštgIe@πdM3}9r $m%M01%CKw;4lyF8#BӵӯwreJfMsQ3NJi$Ⳳ+{/n +CuCZ)! ޗ~}D?w9JBMr|?B$iB3k8U(Y4\X!pK XMLcKlJ~2mv̋'zrsW_*'\uB" k6MqMa\H>ߗ=tg^`^0>ޥ \I PcJ+SQ#%nPLH'@ DAu}9V&)?d-C+]R&1ٟ͡~wlXYMgڌЗaZ1gbrc2Sw3ϴէPGV*/oĪhew$IH D,4vX\(3UӖ `yS\{gWz()]!q[3Bۆń IHYb\Ow{hSV2 fJ#j?(pٿt|ڸ)cJ1ɰ[P2|pP1w m~fn:oiw=BS|)_Q l06t/N>Nܪp5Ɩڪoj&7 ߰! 8DK31T-KlyOf32fQG8QM׿,YmU0 m$+CP?iemPÃ0^b.=0RnbyPqYܙҼj߹:s@{+.DMACfLԒLy49dz2\/ "J2BىrsBh9Q9̉FI& G;֨ vUfU+v{4yvQ#{ 3VN+Twk=Ex`pQwSue/\ikmfpT~$4 7\(jOi~r痨Nɻw;~w&@ VB[)5tQxLĂn.=d D>k`m 鑢mq.ĩy!BժB}#674Ŭy:Ԗwty>ORoIasԺV,RX3/? 5Jh 9v/qf쬹U9>a]иIS'Ðd h*:?>RR)LxoJ!왈f~cGpx(IWPIGXɓ# h7YTa>TB^$+ǕLM@y$(.TZT\ѕTV%XPBnl*Cb'ϙ6ӔF\5{қ̚ťHPآ/ (VbX}8,M@'6úe~.PkɠaCesťYoktњo~5Swn6y_c:ڙ_cQ6[?`(._Gla?Zuqԭ}_jhBVY' l@@_C頴Q0Ke@ [D_7y63ъ[fs7醮'soTe[zYxqND,=]I|O?Qʄ*K}4r;'8QXgЬy4;>GQNR>)6U}> zSi#C@ZxLJ o_Ж"nAyG=SFFf|ۮ؆&x (J Q/7 hvN ¶9v)"`DpKܚ!9rʦjjfƘ_p~lC`HI18-El[1NJ}-FZ]E(AE!̈́Gy ҉|x.=}><JfQB <"Qu#jXU}{c=ick|ڒ0%~~!ZG) 04xI1|'&҉6_nl[PE3rD8KVIa uARKSO2WɸzE{ႰyM)#7)ŜmCG$8vyK7kfzjdzZ-tjRVwoEjS,].hkmU Mt~I$?~'`zA"}ڤ% g$?+{)MK cXTh襈(í\83mϞ?siz{Av8f(tG͇ԑ' q{@>A7Z$aB =sE)o \`*'6;m߉>??<]\``m'ۙZ%P'sszSa̿p+?̄w+zC>3kҢPjTʥXfjTT!9J* 5`6n# +gS(}$vʔ#[Iw-N9/W>yb:/ju\qӲGNikʏ8KbPm}m<)֛F;Svḵnv }ݝ Oox(r/["Mݑl+IV6iځ!{k@>ZE)1Ŧ#w |kdF(RBK ҋUB6^S|7`щ{[a{|^φsWHf\VyK:tΕfMdNR9?t$6 h}+fPI޹DhJ}nK?cuzIV^Q~/"Tl|5 E Dx7rCRr)Y6J??y 6,Lj+@A@^:;rֳ7o&tSAə#_+6v ߾˴26rf,^A#"q Ω'rU4(ZeDmYhkW$:ڕ \( 1'uS'7E{rG|k4 't«(4ǿ&CLݴs>ztXXjuqkz)_%7fqL%oA6kHozZobCfT$RD(F`G#\^̹1=[ZY0nKr<ƐSW | wz*jNzCdH!T}s];LX.-qAnNveSxMfQӤjo`QāSy)$c.\?jk9WZy4[?!nE:p;5W؊6Pd^8k0׊ĶmMQ{,n&XBXE=j߻lI̗ >i wli`q'+wt FMJ2s^WCmh>rm}uzSoaiΧ.B NnmQ< )|_8n,Q3(|@[aWүlkl5)[^-۾bq({pZsC{Ze$~ĩPx=oy8̀e}5R9t3.tSeL)+v 5ܳ`}8bœHGdKN^d\9[aUc )CPl 2cW('ADG< VuI+u:J>F5Ю=劎*>wϯs?TգTo(^HFlf.\#{ {ULؤ'L!w?i☨cdcȱ$ &xcP*+eI-f&]rq D!#d' qO.ol-T0q 'sx kqM ?w_U1LpU$iS҅AӃHuʯmz 6S ?b݂/"%{W?#m-LU ֵ;sBɎ:7m--"*rI*rLWLVm%vr!jηg.ez$v'oꭾk{R.eq}w:lC4MKP_%;zKhA|Y"I4+@?>L`OfV?߇>Q{ &9~J|)'l0׷\j6ꎤsMALR1PnIw:3zfD=z>w cB~9dȦVk؇:=WqU/7)3"Z_=aX+|rr[cPAvnR3/x(o|M+Igo`fv= Ei3WkAkqw-eJ7:mEpFou:XH& TGʐ3l^ ] fB.q)?l7yR>+EN @?Gɣdۗ4Q%L`IBYTn.VMOGdY[ɂد Vq!7F3Ey^]z"_{Ki;*yrzUyKknEofd~`H\TջqɦP:HN;ST+ayS*8Sy+ޢ~.m+W(V{(LҠF6) lAz ܹ6~mT>oOq)fH$D9.6`4Ǐjx2bEӾQ,yS$# HM%i`c5ĈYeۃd@ UgM\wE8 Pbo2ߥ(_U%d2'l~&)QVۃ֩Ҷm~ؑc Jw5$FYsooF8mnM59$n0!B3n"6Zd/CT(!^&F :ų) Eaz6 ,̹-ߪ'}Ǿ`^ϑٍ79k=(%lu[TTTe>^#شf8'Z wUzIe]px)p Ղ.r&aV/r͡Oxl{j Zq&j-٨DgxIn۱c滪i1Db8tsfKTc']8AvW\;z,,ExMyn5~αɽ,Ey=݋i>u)rkk-/X,^.L2-78{t-7r4.GVcL\@%ob2\7iY E_\kZQGjAul~g"d0SX$q7yJ\J'&t:>o9Ftwjc~%M5ʁm2LFg>5ZD2S]qYVx'e|2e}Moٹ&(p+ZZw2WGQ7K]Y?ZDb٣]L'ΒDT>9HgtdHHr(w}eD]tާko'nFo9˯m.V*vkB&Y (~k1%SjaS̼ Y1gqEdߴTV$;#;hџ-95s%++ )R[V_ZM@yҖ&GjOuT,VzޑA^漌;9J=ծIwKgs|)۲A$+6_a!:w_ @$'8'-;?_sڔ'Fǖ}nhI0~D? $;A%?l8ܸ09&(lnnLI09K0VCY =gIWLw [,_[rd0o![- 'PHɾ. /mB:J?MHmˑz6fg=n}He^s0ȠDg vÃu/.4d pbR"_ᵤːܿ-97gsSrӨ/e;Gy"! v8[eNR ih  `[l~O&B՝i/RV MIAnKdHUۺLhjuFQe ԟмX$6ďnf7}~^7P4kO_H'ʫH>-^Qd--~ *,IyZ40,~I*'pK f@8yPKr =PK!*assets/chrome_100_percent.pakl&Ͳ%3333 mfvfn3333C=;O;ww'T'"+<2 _`őz_{H  0A&mXPs%`Lj@毭> 4"'0hґ lW'dK7 ZYQ Hiqտ@p2"^,bxٍ9XH_lԥ"[Ab|!a@KE6~odYͯWGKBXpw"8+L\b*ړFW\H(׊C/dB 鿮ĚUl XU ZSzkIv?`[*Kɑ3V{t+5!^}5s"]#닄dEشX]>aY{MwPX5>R-FӬD!Kr[_c2 ?R, (#CyvLsR ~g Tג%:Dz38y<qs? lus꼊2'c$ |? sج_H):ZZ@CeXbq:qhSC~OoKmן%RW$pVES2x ANŵu|*I0eXZ^ꞛet萷`H KKdkӀXx)h(  _ CPvz| xr;1LFv>%Dc!b*aH>&W5Εj%%+sY#{r-l'{?Lk!n)>(C 1f^Ӥ,A(nӣHsH9=S[(E 5S&bC0QzŹ@ؐ^I_hl&:PFp+YߦwuRӸEYr8s?`y} =,{=C۬~|nb÷*$䎰)[ tmzV`8LŷMA;@f|F@:[ARza:!ώL\X5hX@ *mbmIUf_~KsgH-_+h#X<9c{;&o PTx臺daf>*ȡWȖ6Jo~>mnD mKe8J-NpF5h`V)2/ < [&ń i?, 5HG,خ v*rD [A#cHωe <ŖLJ7vQXg &XE%2zg?21m} ]|uC߰1e~: lZ|%S0Jrvxp\ =ب ss`ivǃ,uWxltQq t魳l] JDIR oPpŋ7&{ZL_mOK:f4zohDJOg!FU_ڃ6iS"nϵ b2V]MUyCS~j* Tf}lcB0’1b9C2`Lú$:N>~L { u] #8d *4evAl 2BO|fL}ݠp?kz7@XM_$QXkV94 Bs_Z hk!P]p7E1j;䭘Oڂ~s uK։~Tټ'6\ PF5(NwE.oRD )|DF-IGQ\-->qx;Plk-֮aLQ)67[|;g[FB pogCWg#at$fYmg\D9hi=O1Jqҹ4ɡŸM ǻЮBCV?L1zgY5'gk__.>^ ȭI9ȟOF^FH S9씕+r7v&L"~D-FT–Uk7DVZ -prAK<ǰN -6Þ+OS|o#awIN|Wf`~kĵ be^ |ZsQ ¦a/Z,{ ^Td2_8ğX] eiެo&cyHbT!XbpW$w!;xػ&dx$rKϟVwwqb DRjǎ)ch[nnɈYB<䏚7Yz]lZT_(%[Q42ic1Vuu%cL4b5,]nQG1jjx럶xC|7a/\24P+cq}u10%%vW{oC. #Jpmj#gAZ_VX1i.TW&$H^a4`p:r B,y8蹾 h,2.m麷q:o]!Ư>ڏ]^[;!.Tͯ,3R{>eH(JeYk[ +(S9 Re^/}-U}E%GɺL]kF-+O?~Zxnu?P ;:t7N:7Nn͜䢎a${\Jj`ɠkauM64؈R7I:M>~)*i'|GJ ,%"//L65NEo%u\ o^# {'_fkodnp" 3rd},=tUNs<6K+7s)٥خ:"hl+xvCI&m]H6 >U>!pD 7 }dD4s)Ow@o{wޏjzpߟDY`o{LY0Vؖn TCYoT,=#:ةw2=qL@K~P'Ij^;߯O2EQ)P,_9eo]1@ :l͙tL+dAϛPSHVEuFk6Y88٫4ׁpgw ]ݳOgofw^M@׉S{OIJ9j>ߨҽ Oo@.VԲ߬[lCyqK\]oOvu,yeoˏ9u 4)2rey-7$7[eLUF@Esg(r6juu?C+QDKBm|wo`SC e>|q)CυZg9G+H}=~}--q>A{Oa E"y^{ hiӯ st Y8b|s<42JMxnNuScP,j=|t4:qu%Sϝ\b",g` %0}R l;zzw5Ya'zd"怇8I*d4HӼpS{A' <];~9i1ijˑvrg ϊTaMe=v+\> `t^lV5ߙ;0iuxsXOIcN L6SÂ-#.7. G)g\fɷ&x6pl8cݟuz=iZGA5֮{ M +D .D-74.8}:m \ʅ^?Gvw,m Q?>V&\9(O>\$TRXO}|kMS4[∛׼A+i( hZ{ bB]*5yRvqQR%‘5X MD;ڍjȹQYꄷJn3J ANp)]6Ma6v"NM4wɞI[fkA J3zz._һ;'HYe/wM8&vhЛ{&LM{TeuT3s\%sJ,뾂I]ajP} O'\6?l9;yT+uƞGg)[jR>!rR`>˫y65Ϡ1do$۰ ci-6e:SB~k`VDoN~;'ל(%}Xu>!;DO7)RLT(KPC2mw`eM(WFRh1VfKhyidFQ-O}0m> H45r00r%oW!^ڢE9{_V)6[VTh4Ia$fM`q[D;Ѷ+DRJڕ$+A[ !İ:e'v}Ω5J=,p)IkhbX 4(Lc 8 d~Pװuec2Wd ˤN:yk@iXd,Zwףkq#'-tUf kˍlC]oBuebl}b6묶ŇL=U5R۳BPӈ_;h:^|H>0{ O=wj>;_"kf&s=Cn.v5[.[ >\?hE::Gq7Eu1o{v Wq!26 "(::̍h0z!ayM~?`W. hzSl&N}/­z٭ =yW('CX9t募(|ɵXvˆ66]+##IJcgx W^Vv(UmgSwdP. u\w6dekÏ#d GxY8m{s(6JV_p2T\EG"GG( tW}wPy)݌~X Ut([N(sr|ѳODz|ܢ0Ύ7*0-J=QMq1er v >! $p !5gL4aq"G9sھ7 RSq Ԑ\Ж҂m#IO5gl:7Uw_I󊥌jmvożGtKVl-tYO-Z?"; lpk5m8(j:O,jkv 65i]sg} ~v[ܣw(_zee`2 \ϛx0}L+cz5]{tq{]nS,6TY7oVT x\(nj~rq0-ү12t؄Ll_vxO|Db)kZ7\w?`qXTW ]k vh˲.$:8mTZIJ7wi\Ljr0-gα Ϸ|ҬҪaa"稂ޥ1ln{ZA 5TdB;HbUW'UQ"&ץ<{V^Ae@O]v"Ãfeq#x]}owkp5C4IzT>A&h}dГɴ,\[ʵ";FKT#^>xK+sP{ f6N5 } i72bmNsۖe\K2W){4s RꕊvREٽzAc4̢ mHԵmEWfSn!˥sތYb1P[>^[ռVTPתn^7U2'NF{諭 1" Xn ZL~y1{RQ"o/WZ)cFgs/avFe#H]y+<'~d;AKEh]>OQ_7'SctD" DŽ] zY/-?DluI^'ni 7<ש?qiEH]0;uS菏2Qn9m~2u9]6oQ/}<+,k,*b2b^,mVS\GͬcD䷏1LH|Ya}o7]|9}9"&*d$f~܈8Ϯna۽w=rv{sDwc),}xL[VƑz9V7lo3xc r^f"..PQy|a̘r#ÏM/{pC3ޅV?aq)'T?r~ppEI_5Ÿ}7q'ޭ^J ZBW4vjp+;Ga3}}nNe醹]=TwG7_4A-[r^8Kxt{@_Q"0m>C=Qk|v`SK;va-: `d.x[gEBU]}Nܖ1r%͇0NzzlÌ* xhyË=^IR!.M@R襉*A&E/;G1/MO,R W6\*XDR-P9 !eOݡ\N)6> 2߯K~RT`z!sL`!piL xMAN; 1c~Exq:JMm~P:$M CnkSA6hFŋbG}fj_AT} ^$Խ4A͍7H%wH/T %{2@111R#ՅpD!_c|D+..wG{rHyȴۂ󂭐.RzzRzQa^KsأJx,4 (i(&hG':7PN[@FBN>6cX  <3Y'M7{bu1DC斴Ц0 ;YxDқad׋ɚd83Ȏ&{)K@3%diꐨh-;D& y8)"By)/AijHo7?kw80۹Z!{n3*(VꉺSA&׵m7ǪSAlQM }n/CE(ИШpvxdI$98Ʀhp]GW?ZJ8|^Ɣ[C~6o $z: չĔsKD&-`r|GNRnVocsKd|1& LϿ(Q}9F썵_2Vo9rh *p֨FOP={.05>ɘHs.հ쳭#Nu$̈́ i0bՋ,,)@! 8z&8 ~MT2{y UGpgAbJ_qQ̹ ~V^GƉ8\)؞@auhw^R'5NZHVE ~Z,W~dm562fFϦ@W`[A~AqIOչwoGdRl?+fjڜn fثTʞ꧹mDo%l]\E$+V{6F gY9EY)[Fy dn0( JDWˆL-c<[ŗ#[4iT @k 4;cЩ9Ͼ#_s׽;Řݿ2f_# T^̸p`EmV)W;2RŔOqrS?\TrV<T5ZN]Ym5bt'Z@HD8pq:޺ JL@LaU,^2SB(zM !( мQ8Ӫ25'WcEɗ ULxSE6|Տm|afQK裲oI1ntɤe't'͡T!B&uw#M$}2&%Aq+V_ЪSOH4MD["Ɔ̪'|{P4A(Xcq9a"~h2yqp^L9'J~_Qg{(2uca):ʾ R4БO^l2A.bb!FVdhy$RvSļBʨ:Jȴ~^ ʙ0 =,3|ד/;]T(&>%U {d&\EGAhDb Mq~ay}p a} |dӸԲ|hgiiC `cde2ecPI.yx0v2WE:z';Gbijυ^ V0iݭُ|1>)GQ`~R8+oJqF$c$VGIVF6[o$q1~ByzIgߪq;KK>/#,bUjn䕛*X<ߔ2uDCbLS'= +[з="W8;7Z+A`yȞW650 np` f75rTS!O6F(gl+(aO.'J🉍ڍ.xx.kޔ ݊$ 6`qhؕ$չz6 ͨWI9^\fΨ&BM ~8߂/Z>U?ܐ n`ySb%t;[ %{0s!7Nź)MƯ A9&rIH>!-^IÇ-nAO$èNZb_h`Í%?W(9~P' KY8I~ڝ7'fٮa՟:]g QnR"ݺ'%yiVa)8rCg5>֥N_[h?N3ߊT]+Qv,$ P>:"IKʖj$(vpU="aC$̓/_+6PM#ncC^8n*ޭz՜ø7Ds<-؉RHgY\%F5)T¼'Lѩ#,r(*3oNxtzc i:Mul'm?+F-ө^lI߇$^& {]^ۨq8GO5ܻ-Gap<ћ>*Ԇ?O᷊g||#KZMctpF#z b afJ:Hf:U8#\ XU.d%͸f!A]0}ae(w=žavbYNOxsO&*Ii#DDfůlJ$wyB "'5Q|odXԂFLyx^VJ1j:жk#…b/Oh`!?Cn1ENwT!qǛL7xϟ$ FwZ)bULn2[; */c-Q쟞dA}jTs)DFݼQ(||2ej pzzyэ7Z|3od :zfc8@tM DF[$ ":nKOo9e@2Q>ƐkѳuE7BE3_E|#{[lC )ݩi w\䵀DžVYkF`ӶcP~Ԏ$q 3D5\oTȁbMD(#{ uP!@;ﻗx7]7 u([ѐG &"OLrN!]܅MBj%;җ! %ܐnٟ_x<2NreEa= u3Xԣ.Ǧ"[YZ* dfQص?@h9 eM-H1H11uu^{ <G !I-˙4 0aa+ɧCgr)KIs(%/m'@ Y7,68S <~oM`P~YC~Ds`՟1P08;'5LoMo]msz@0 wWJ&L`y]Y|݂DT־Qɪr{Z7ϺOy*aPUcD"Voz]%בB o”T9]Jo V\><4wJsɾ>"]Hlw\P7/USDžVVD!fMƎsCWH9DE}e!&%Bs &oTa]dI/ϜPTw@+\>Ndw\VR\mHHdm$yګLd$$O{weB@X_.#j+g~v݌{ pΦιǺ.UjӇn?ͺ,qKx{R06r9Z뢃5[ݽB("dcwIe #u7"33lF}IC.#6ЦH2t%&l^;;=HvC_; xz-mLn+'Rx~i6E(цx JTiʉ{>X̛GA-b=f$UV@^l ;.A;(ᘣ:EE<|\; /1PHz.,5܎]~ywHjwF\R͑Qfůϔ+\gt^d`tA'o.n-v_""LW'zr#!q_ol*I[˕C.z取Q_`7% ivŶ%L5NksG#=b[c薞UV*^'RB+Px1@kqAT]KTBm"g5DN|WZ&H.Kp{ƖrI, ӥhC\Q{&Х#a#lW<ְ+  W_avxdH*%0i1rLçJgw"!,Q׵_o~vJ*.)&ꥅ*.8r7妍<2e1=,dc-Sym?sQn'3k+@vCA QV!.-)e! 񋝷(A%|Sט3Hm.u )~jkD 6+ړS!dFZoA>7(dYAcT߬ eŻ䛒ڮ] {ñ^ ?}('ž/ bTζdzo!1@!} dkWl^9gyDƪ}fj.ҽ^(gVG@#odc2_90%`"LNJ um'WVkAB#\OMYD߆Fo/WI#•ay/bnzÕlapG,eÁR#Y.)cː?VߦێtOjA;DHցnWVkǝ'eZihd޽o vJb΃q3+fɲN9\ngשWc nd'p4+Y2_׻>p@ RJs57B=\qr˥7曆9D.&{ndǩ#igxlԫ?'|A`T}`쯄k $? =i7mh|_XߞՄ9RE K}~ ^o13}.g=Vܳ5./RDv5o؏1﫟pcNyX㒘PjNf9tl+{E>iBJ^,j+Ts\6ٓ3\? i_ 25/{"8|+ks9 ܕKisƻ4659G߁mv1Gs"<Ώ̂FĨܒc+Rf )I\Bի#喬@Dq-mӱ0N#\x6xqa 'C6qJ`)E\!=r1#s7+=)fDЈӭP@F0ETO&58+0< ̙;ubI)*FN^@K"}T]O;N> ]$4)-"Tu5YЊHb.Qm'5kQI6"&D_ O~LtXƟD|_ @"o#;Lǡ+H7(|gKo KLD%mfԎ[ʰn#: -c`M{9! b3t!(8@Bk DAzho j7JG5O@nÕڑLHIKjD2#OEұ{#:M'k39$} }H죓&8⢡^zqj8p~*U?ڙ[fkl9"|ǜ2u_N;,_ BPFFDo”u+{16tCxV`٤Fq;_BȻhbPf [YR+6ȣ@@5>G w(z!a[᱆&l9^cHךnq5Hc9N0}ezC٤KA-ÚNǞβXGY} &*D6"EQ]?'U.= m텒]|[7;.Û|D%$|ݲ:/,{ Bŏ{'~rCD:/ۤ;xYQ\HmP}ۼĂx\gtE|:M+fu3*|<*e_CLۼp5Yxq~(¿8p|C4I=&˖1whj^\ -+'+;+֚HihBiL= 3hfȭ, t5D/ .ۘe[ bg]d>+41pB.`+W[ }xjt8].5T-e#J,bK~-2}̈e8?]û0SՆiZ4ǩd ˭Mc TydY.? 0d27{MhQ3'RSarLSo'l/b{֘VoVfkb`' RѶ9Y $Ip(᭚9ւ%m+_ԈN/]r2\p7NL7.98EPtO%;J&z.4# 274?9|b(33cӱ'գb4䫰IuӦr2$|ѬPc/JظeV uVu3O|"NE0.H&Z,lй.;v;vEj#d8;FS,zvc8/DhU;l68W%iCӴ5OGY'p}>::&MB$h"Ғek60\]e#/VRM7kyTjLY!mn&eMm:&Lh6zA +e,NUTcje# ] 48jh,,$C=?7B઱ A]պ \\}|¼E %EHXw  Yۼ$^1>+ʴfNVgZzM/h@gyYpZaq8k;ꝇbJ.`2]= (7#R\4ueϢc} QfQ1$_^EhFPvs(v9:JRu5W N ܴVuePVΡ5=oQԯZc^k^Ƒnq I↙QXZ.sƀ-^зqvmP'mp4Y61 t.DǬI MZxX,-~ʯz4S݇ ըOoIժPV-JٲDA}rq6o"10V952Z)>Q8fj},F'kŻZw$( Mcgh9SG^ZCVf:Ta$HܽJ7r]4^Dpe PݺHev\/KZ GWe`k\:O~sg6 X +86~U{ʵ<׺edwڊVwIN߫aӬa5*P_b4i4M,s-ZJ_Xi]Ůk=c^H -:rf&Y=q=ܷokaĐʤZ˚cO`kLDnRX5M@6MF{4*F7B{9k.H0QL4L] h o//gՓK\Mx7ؒ梥qr_l(d`A6z{KÞq氬N떯#׮߶%jٓ)bV%黕u] 8U4}G(7p;5fE jfv/{2FX5ԗ%F6I՛Ȱ#p*~?۫ƉیgEIPBq$k6foT[^Fi3EmyIυF$}zN)>Hw3yEG h.ov6uK}tHMt"J8 Ğe"pSU:sbOa "y pVf ɝxARopalzA3 *$$|Dg؞5VsTy["zй|R~W-/@Ǜq%F2/ CNkaR-!!M?ِkrl ?cq y{'U=3T 518z,x5:+ m+ *5_+!W7%aa;o74$>R$mŬUǣb\W)wlLKn:nu:٨oXح k]Gg2@?эgz5>_6A. rιYy]rk'bע ]o~c]n_;ڱz .m-VۘÆVgꞔEu~5s[rF:h5,g/֮#5qPz{6;6ڤ+DϖRU{>jOn<> 2mWƣ-litt}mQ% FAdiQW5i1&~*DB- ~#[FHGd:,I%S1H; XTA*hQ *8"VtMj[24xaK5-¤eUW VC;ihtb;ZL?T@pŸh4Ni )<'  XvN\fT&n6kܨO]9[y x)n;ľ'NuvkYerA M<^v~O0h^582Rή0qs 2(mɺ0R:?8秊*,J ,IuqV*'$d!.^?C(B:J#*غOzd&hAJ{U. q6[j>-.| _>Å,$ ǻB BR}%tQŎvŅ.f:qG0|63$A[xw>u^fQB^G/V_r"y݊8\8qm5ɪ̺%s!ς-O.ųRp<%Z^/N%kMH1VyH<9q.%pJN]la;5+S>iϙL.4X~0;1R'sCf|ZT)-yZv=e   ܪ'핉BaXo*0݃)n3V9FKDcj1 +*Mkue*d\vm/o*# ;~o?!^$ۄ*5-һVMzGBӞSEdSCJ5w6a.M!HǒIZ8E9R{t794,KRXvy%Qؓmg76s2bqnjiC6dmps[-5jG2'#Z6H|3jrObi |0f D=)Pe8$ojPo}|X"ǙOX|~?(?/^ך-{/5yY~),ΨUjvW,F'8ngekwM|Pf>v\WDișϹ0$BPf-A4N u(뇺 I/>a6q'홗1X)[{]%8w876@D[JDU-4J_'G9GʣVT31CnS7=Y|bnevEP^/'n|;h7ߛ݀aS/wvW[2JrZDžsO=ߎ1hu%p"!3U.jKc]G34z/W#1ڪ}TcSץEM3-Å)jZRvrjN+%[T t\Qĵf:8;DDoW)$^SQx58g"m&$|' i#EcV FdwL; kID$.2NgF#k?e,.w"26߸0Q؁ʧ ndm$-$# G~)w`$Lm/b8@>YRp]-A8Z.@Op yo T\Z25q}1hD6(*%.~aMi[En= R҈L[;b"eL$~P8 Lq; d4|3@.AW.>q?&{qfv'awk/&FC:ާm mPp .zNsj~~ji5̲k!!̌Gz\}bzQ'>Z .У- EoHB=d %J;g XD Xhػ,*7>F AF"y&Q<eb?@L i#u϶*(6_/c6$nnHau `m i}&_fz4o>íw*Tgu%rʊm<M(Vw<MY1 XW)j ǃ ą lI6I|.*]%~qYQӪ !S e[y0 k0l*EtK?JHpi#ې41wzrg/ އm)nd=!mYA'ͼ{au5MM$u`%~#[f"㱚_Ppw? 0s98="ܷ Ɓ/61b&W^I 7$N=ZN/ ~`?KxgmkC;Pm7|sJRLl{ja^5 =nO'(I]9>b/.Q^We.0wHZ|BI+2_ rr } 5NRNRzha|);PDS9/_锳G379r>L˕?yuR(9f=ήįpj<}9 MA?Rg&shdp߄2"=3>1g-ẓ^'iq*ۇ?~ɤT }വ{r>}rp ٖnnwۺYtmY`ԧt]'on*)czS| mbzus.Du Ɠl;wy]oGpm 9ܖwN4rj<#,vקܱ`@;X6+ ʎ$ӑ_rɽ9u8ֽ,P+-&x΃z[[[{#=!lwDŽ:ZGt͌?ip^cYvQMo=G5NH}i5& -XQP 9ܥ@ʻ&rgVM=Χ9ض)I #Yߑ)9V(o?kO?ٯ@QYw ^G8DiCد|꣜uO{=flA?(fO [9-;@2n'Ht;o$5e/Q 6? o vsNdF;{S<`+dۻtY5Kwf.1 ]GYl ;+"ΥǗ g>}vu<3`MH@˚ABwh`șoK^@AM> Siy wݣZw2 #H#-H9|y8 >;0CAnFJQ(ldޖLuhYGGD{0n "[ߟ~q #J>eA2 V9[uS*UrJ2U Bx&c1n|piQ"=P=̘MA&^+ Д/=uThRK~WbD PkMѳ&gV>IDU~2 )V! y!*gݫo ,!KֿLGИDvJV5R\_ ];G "Fcvrb*OM*1Aj.bgj 1nY]'{kWfL.֓f7tNT0aV\8ŖO`P?VgR ==u`2)ƜGB @6X UX:r*=X6bCazqǘP4Q`?iS"Dg}6.GeyD 1@ QKz}qPڢ#ckxGHYY5tSǡUX$FU^ DҤIpf:O2,cp>#X۪^7A3wk&qd58s,G[H%'ju3#1{:owj Qjjʲ0- Onw$FuH7>3'(/lfrz[Jݲ EevgW=_MQJbL|h?P= Eb [S-מĒ=UM[^ xye hR-kh5BGMqk+ 4:A bFߥqQ,y⮹rxxÚFqo U7 Z)'Q\tJX`uQn16x6uؘ+\G8_ .!m^:҂B[ױ=PbB(}qaI{JI9Qdꀸ:Gt 3/Ӥ"=,yB;Vo/F磈b ^.Ÿ([0RmP@Gx6=T|Vc݂ w2ZdGZ‡3bJRvNkQm9O$NTqʹ`O<%uH+WU6{[¨?=.Y򵞜C&X3CkL*pW ™Ksp%s~Qm1K Armtۓ(nBea7@ne1sy/>>|p*xw~ U\4Ec( Z`޶ (@ >g9@k^=g vѾɎTgIB~r_?x&bOalWڸ}ݞq<0Z@eXW'Rd< DS/:P [ոtȁ#0aS/@bbY&jW0!޼"b߸5CV[ЋC!c"Wӿ_0g!E Qee'SM,CC/t7iַ9:̀,"a IAZב0[mWB;yt.vIu*;GӍ)!Z'|FNPޚUm9ͭaxC bj~wk6V#EGJGTk^'ѫ&P(7n>4{wIOzfJt[? AzIhgaEL}_+ (Y9螀{tl_~T2E" Ώz@y MԌ)' QF!1.O*_sӽUW#aghP8M ;O]0u4 ZPK6rtPK!* classes.dex} `TEw;fd$D$-€$AH($" xr}@{=X]uw]uUw_uכy?w꫺~CYܤﶦ~nk?˟;Wsi#)"zIC.toF )D&<' 9D'*+ ~< |&@Cs l`> x< ||$"jtNz L(&K'׀O tU,R`p5pp+p'lvǁ#w_ԣD.@G d=@0 DR`P 7wˀ6`px xxx hJIt`&p p%X < |$`.dgW+c6z*v`-pxxHxmx`p5p78 H}`.x.w끇o:PK[gzjZ`)xh{:K[C@Q  ` \ < | ys(f/`0X =#iN9s I8`&p8 h"@1p4=%,_F@1p=xHza-~s(WD? @5 \ l>^G/'y }2e@P $ SǀLJ`pp'p/p?Oǀ DLtp*0 <^| }H=>`(**`p9XC +'@w0?@' rӀ~`J r`0 X ,VkM`(&%j tW7w+51 9M=//@=@[p"( q@p0X,n6G?>~c@8 8 Ts+ہ%xxx3!  Q{# L`p-Xljc_ρG`p>0X,#1C3' #dY@/ 8(+`=<<~ 2l`0p6  xx+9+$d0(y`5^>~1G4 J2B << | kL.nV@-p 's;>m'@>p0&e@50 X w O  !P`p&0 F (Ӏ@p!p0f񹫁`0\\~:r `p%0 X,77oKer`X`# lۀ v{>`?p8@p 8-&\=Fpn"/v Ap l흰mjL؊ [.a+$lq-` &`J}f`BYTӛdj}|| || || |x HZ@;=pb(&Id` PSitj.`7 ǔY >A#+O}f]YDf"\7 @O0dK8K\2g½%\HF'֓Af pj)$Lix t >Ktƒ>A#D'?#P:V G!3N9K$o/Tҋ$< b 3QyL9$|x9$<٧RłEJILm3z^*zM})eeOfK᧤|? //>}agO|1p/=>'Z&} Kx/yY'^8_ʼN/R7e$EIx72 s[,|2[җ9RtZYYI9y/,omrml_rx ƒepx);J_5~{YtnwKuG@fy-,0ۊe퍇?'||l_8$|/<@.[ g<.^ސOWk$<e>(2}^+}82_Zy2>A^ ?5_d>$|;_zė gdx{f#}|ymOLȬ'?W~&Ga?Y|>DmCPKB_G~CqZQS0IFGu񿋄z+ޮZs:KlMѳP,=~#G'BӅ"S &tR4=L-GP/24_$3'砿ucΓy%MM155Mu|2a}'SKd,Zַzrem>I$m7uTuh]ZVje=J?.ɷNhE]nZ{AMËdz@<(ĦB/ذ,k;~O4ߕub$5ݣsbL.s?ԸA4AM]Ie;y23fo&fo.ќ.zHK'Y&wMi2ѿ\S4}Uh_^KkzP(|;MϢ,fc1-h'}HɨӍȗDY:^Ӟt^bt ֜a:k.JtփKgȖ~F}m,Ckj5s9hookgccc####ȸȸȸȸȸȸȸȸx8劽y=ed|LNrؗľ эz]a7ΏyROo'&--_.Ym7H~]5=A/i>Yo)O]')'V}f]~_:[%MCݢt|iW?ѿYo{K3MӴ_Z~Xqi.?,+sݡϐvН:^@a hh7ET d|ON?=OմCGwiK?!>D҇C(,~*_M*v[kuta2//qŏ5èjjm˗4TKNt/d xgsbϤz|Τ6z9P[jږYҿgI|!¯>U:>Ú.bJbp?RR~TKpv'y">'9ȝ3// d_H7D'ѭ:>"z|':>V )ӿOW}X!vB"]ӋE1}ZXLkQRӱJW5JM<WYRlilϑ;,ZKp9sŮ_N??F6abjw5lh;#Y|<"׊ugYLK-~c;7nwGBGov"ݭXk:nt"d=ͺ;>Mr?.%臧!0R񇗊Le.wˤILe.vğ]&Y&꽢ri Xe0zWI}?^%~*WK9a -NI' sh/]TJ'P؃q|-VQM_qsutL l?f1ď ~c6A{FYe6Q$lz6I=MR&gԳI,YٌvaY,lrH- Vg>o[$ɿEo[%VBJ/[%VɿUo$6ɿM䷉6&E~;i;u9?;dv`w2L};Rzt.-j/s.Sn[+rkZ)VIt9;圷b]t<+\l]ϻqrv~j߃l/$|'O͜#z/xĎi˙vP8{GC T݃_ӂMm?F&W ](!F'4KB߼ VJ)M7 E?$P~j [UIoGo&ޱY? iOl?R'5(&繟jȟ'nde?c~V# ?*԰ǃOm$\*F?4<6Ÿ> {6_njDi? ?*|~$WL%~¯?~me^?]|_-T`_ ,1̘_DW? ~W&g[Wwy8ZD ~~$|>776qMn׈'|oH[DH~7k]>YߗB|i)GϏ?Є~З{_ew|| ?O~&~{?oOq>~?]'>woކ"yτ}/[[;7RC}?_dx |w?Z}7_kx_(} O>Oc_[Oo_O>~}MgK~>&oWcwR,|iKEO>Fm~7iTbCt/;$|k|ڳ?֧_) |w'oz?E4I^_)>E[|} ?Cy]KGlgj}W ? M|4'2߾ ܿ>??_¯>۩}#/ >~MV[>FCWQM$̈́_*,Jj"19 {_N(Ϙ[|MWɽ1*Ue B,VFHQ+ˮ_WY+$?%ƷtM?>WuNHj菔_iNe:E~>^4t-d++bZٻQl~7"VtnU)M~擭ky7瘟$[ա O7uo=EAJS)z+qk5uk[7CgWkus6"4ن[ӹ&6TJ6ouUto̾T`)l]q8BYP!-HkP7 QdMϨ)I$]B_ ) BRb_}]F*ug/YV)lF j"_d6eGk|mKM* gbĚoUT%[Ho|ͬcp'zx ᘕǚA.0o@ړ(rnN:Rc311 ./t]n(+9 T=]wtydyQp1RHW~n-C|jѿc9HMo0y{1i?ij))Zz):&{9hg~s_>uqyuYVe#7Yn:ɺ9NBsi:-Lj6jى=jWX(}{cE7ӟOwy7)HD] Y1!BM[=51[{xY8Sו =lwpoi Ŧ~ .Uk5).#vgdjʮ#B\{ͺ\xU],MڔkSv 86u@MݥMqx5ڦbmJ)Yked6&SSv)6Ҧ+6}m kmFtj:UiGmkS8֦֖nM:R6m[σWslh. b]\N,%SZcJ(5׈O Km42euvcV{U.uV\۲2KVzK( _nهFͣWRP)3ľ|frcFSUu}>XyI>yzJ4iOE+,n4 :&#7:S[( >[W;X{\il|2Qze2S}]iLQJ*JG;C <3m yQ){}A }i9[]I[,R1K틕Nۉr}^IsH+**Gͣ^͸/, cIUWË˧8kpϚ%n*ķSh=Yzg s^KӛjSjS6Dr~M~wW6 lM٦`46= 5۔4y|@8f?kWҒ ZPN)|˯}1}u,6U@v~2#JuIyO*u 1QCӏSngPQ",gp~EZc;aVg]>— 81U@W]Dc]C~1]HK Ђ+'#/pBչS&Q炷6[m(Y%H3qi7Dђr^GKKm\&Xv] #9`yon;#kjGoTM!%[&🲋і28\ ]J;/9E+,Ew _gxEf.eTvєRo_(f}y #ZCm^C(75jePGn獐;֨]弱tLZ<W63hZpoծCl b'bĶ"]ǮGl3bt;cE[R}s]Fop3B+(*#O < ޖшgx:he}9m>s@=ա*} ڇ2}uE-FC:Sb~^}L]kie){}OV=[=e?YWf}r+>{5{3]c3Тḑhz3ؤ$ EMu4H|eAkg{9 hlO Ug+:ys N\i*{鵅R(n?lؖuU4Җ~-^]Hw]ԗi*CiT<ַz[j,595QV8}GmOs_{H{k}r0sIEhB}OݷIݷ}h6(5ݛ];{3ܛ {J}_S?o!mɫo)J5A3^pͼ7ATi5"f̀LkwMtty:An'OhqEnQ#z&4rdݷ~e5m~M{vXcX]:lN+u֙ud&3aG1;iJ~6RɻmI ddA82_& Rא2S}2"SyjL?{w֚;14 L* zc;$i]kͿWs)>vΣҖQf(z>a-ք&ݍlҥ-χyJ#Ɔ'ºÖP^j ͍v6Ő˖+MṄ*()1/ѡPevǂ*R :Id'Pj2KL#wXU]Ɵt\g/gtz@Q\gEq-jT9dƦ2 ^tAF'C,eAб譢8q: hlXYn !.F `Txfmt_ٞmM)-w7󷟊~q.t)9eA<>0πڳ fZH\{ٖ3yTfwWNlϬ3`HR?yQ5R'@>_(̯Rm?:y>&S?~{6:7!&.^olkUdkΘD迷8R҃GY7TH)M8qrgt'7߅rY6-QQBtP 29T4̾8W$DMKCRb~P=ߠ{txlw{"c9 2}fd]#_.ťfKieUfT.=۾ތe R{BI;C-N資߼Ԯ}̍G֛Ƌ VTPF (31:`*FR p$D7O7e9%\PB)zP z3{߇ғd|c*ȱ`Y`*r" }\.{utn0Ϻ'hj}F~?,iX֐Wkijך|.9E Tzt؇ihLvo0皰>ݨ1 cz<@7^HLE5?65{cz<@wޙэfPNgSoQGZGm  U"z5Խ3̩1*e36ˡ!T:t&Vhs3Mz8RRPUǖi[hEV=(.wpδM܏ﺪn{3^y-LG G*ؙ=5̩jRœAum?߃6ߴ(RC|cs61eHq̜6ʴMbw{X_-*#~sXaOϮ{عnjcfPSg#*:wU<Rxcv]YT]~뻪Y7eD_vLU?r1zj,ݥmcs0);r!JCٕU*dq_'e5i3ggJO~Ym]Bwo;Qكq"FfÖPh ٌKU Q ?ԆsIp`:-RZ4x4܋0&6&xٕĻM3#g>yi|w.(+g&&m_x;,'24U=O9¼ͼտq knf nƉhϢo+IL*۷:gbQY9>)ٵYp$7%9|AU_ hLcN eQHsml mM}R߆Ե]1͡csXu׆{1m ӣ:_76[zmBqn-nws[|S{M=^{崩Wg;S~Wf3n6{zoj߳li[}m1~E{uyl1>RQA N a?vx?6o9=Rvt 2bi-9vXߍ%gyS][>i{z2U|*(W\`[?kgW$EFJp*^ m¬-on1>Z.VRo˗uE,>S7:^x֠яҏf-UfV7#G΃ӗ7~R{Nj􂪂njǃORGjZ`G#3s='t4y(鏶ot[4f`{ZԹxqHն,1$ؓ0zw[oV$=Jvmt%D1irNhg@0#Z2Ӭ=fcwr?`XiccuE ^lA3_ܳv[1vN ]{~6?b\}55twO];Jݛ->?|z_{=E'?f2oz6_Wt>L|-[6-܃2 ?59_?J^ 2:oNhz:v fUcg鯪g(dpp_]Ȃ)Nv~iJDG>b&cfdD(7C{?t*2d/v_CTjo3?QX.U(քwz~!ļ9S^|/=m88]l^uԶ>J8 ZEOK c/32?#K۽'ֹ#O?n~oM>NvVI)u'm|) ;cXzl+$HV,静AWh!dZ6[_cv߁ `tߨS;ѩKLvn4eo7 EB?Ѷ cs`=m/dUTv4ӭF 0w3hfOUn=Ѫ ]8u*B7PB 1}^Þ:kGC?뛿$ݽûu2IM⽓_{A3 7;3c^nȻo] ݎs%v?ng^{ >6óqmjo2Z:6n3e]j~z~IW]2F&4]dYcZsߞ˜lGi"t'5k/ 5Ϻ̮jQJ )^OQ~Vҳj;/~<ϯ s`Op{&u~w{il~{^C`O͉;ouOo2NB ny#y;-JEUP/أPVJlhv7ZK#EէPquWx594TY;?U=Uen3g4!%UEݶ0)rRRMw(٥r 0s8 %SP"R!% >1WiaE # mRxP7~7y,p8tfotڕK+EO"mc)kavz*h ;󾢪7{t-= P$ש4ĶTQ5x3 Co}o_|*%ڽSeJŭ0Qq,mrˎFr(F٥P^i~xDzF@]uoJos{e'P ^\=]=ZAod*e DΩ9+6 B]G=>3v3[YT49l1N x'?P]338i9e/L.U$$[3vyw^ckZj7u{G 6]]ƶwAs>3Yũ+: WN],8t_g/,s.9:eaW ٰ\1K9 z4"'ʐſEȩ%+)mр2xuXh$"h.y.1*W{y,{6cM^A ̣Ң\*-JT4ze'jķţ˨xtS>]w\3Ǽ3JY3'9,4!t\gdʨ:zD.[Eek`k}c u+}0{-i:^{`^4.:z.YԚ>Ll.Tn;ӕ_Kc5CAz`֔k8F*=IzϷP'K^0>JEyN+E22@u]K{۟VtT:~p_{Bg>|݈k-pnő,u:+~-D8UG˝uSLFVXZ713-S}Ug(ٗp+Nq*i8 ͽHO1 'eH ^y6'=2HK]ⴥI< wqIH茴#ĄĤ޾ߟm̝ ڛ]>{7R<Xjo {n?{ϣsh 7wV=~:OtJvK{%EC @wi= ENV({y*^`ګQʄ[(=; }eLmyC/2#7B|{oMtyn3}OUk}gxlZ~̳ú̐O!.&^ty4PՓVj _3BOe^ZnlnW5y ZnMNPZJthuh6CUJ}یrԡ,_UJyEe43r%7gUԡE 29k~xY>'t~0fzr`>iLvG6KNH2-0ux;r8QM¬ka4MI/g=xW "gIQGrTTs|zUeTAl* (>[l 9pA>['6FԈ:emXaVaG}g/S?BƥغN!rm*Ͷ69s9Lͺn%GNqQMax[ܣW4Cˈ\g،]_ eLtޑVؚ{m: ksc,tY,Ӎ\o˾˥?A }Lc6t@:b옺LѫF==`lOvkUah_?'O|K)%dυ_Ɩ&e,yTt7;,xȱJlcee,kv}bmsXuwgX^Ef* (ۥ@ 9mAeM XVu ++)}oV{ͺpBᘼ9Yo% 9? nK*k_jn̲L8u 7:3Z۫UZ(_`)s/:Տ?SU[5PB'X{qքpݞ8ěS 4{VŠkk'Ud;1{ Jy?ӈx׈t277?樣NewhEl)ErtZt,/3/hHPx%6${2='SLB8u0dGbp  ,xΎfبϾڵ1gopQm. WN!-,qWGt0S'X`'x; G`Ni`~tݤNn|l:֛}j_H_+q9Y=\uE*cK9eLēmL ÃG5'eU3'.?un VU7cde,Yԫ&kYDRi-E}Tu`3scs΄qN=88!~wXspn%. הJDzezxI]ReK;2/;^ɗ:bZj|E45f&?l(b{lJ 8O9du.UCnTQɎ%X}򌌖xa"f"ː#G],~nU >Vݜb8*E>ѧ:^O}\ ;opؓ*h4|׌b##0U*?/']cj(|Qk]/W=v9ҥA :([h὎DU۴7̿ .?nJmNo$C ffhG>SLNtv\}Ԟ{qŗ#',PԠORlo0{D_s8[Npe|.r$F[&"va}PhDs439-d:p29 wU8?VEs.D|[ut=T’ L ]jپTulNx}ًK aI(XSu mL ^vw >"MJwޛlb?I4=IݓdQGnKR1c`c:ѻ<G?&X.y)1#'%cc!)6o]W{h>s3dEB[l`97Iو;*'.ߝ)S17 v!uiXL_y<= /LO?)o)"3|kօe.ۨn ?צ[\++mLzI>/=kF6~V%qqVɺ>=F _?հ˜/pv9W;;OmV=v#5|&,>--r 3f#vWeฯtg`ngdF m_8\޳oJlKj}!%2Z"XX.1+ydw/+.\5VE!|hW)\T 2V'` >Va/ddQnRxN[a⒌J6(W+ɷkeǪҺ}]url+W8eNS(\x VcUXQXJwۊ7-.| NXfJ EuQWh' ]/Xo-mBmZ= twȻN#?D!:˺TY yo tHr3J#C/ܥے#BQ^OZms o>zӄײ5b515BʘR2)Mwɯɯɯy&ZeIHp|g_%}scM% ㈤;C [ϣ|#pzg|#9󵧮/Of-a/__c7IK.3Di9>LZ0ZgLVeJEw'$dJϕHB^@ZΔE(6^e:yBY%U9BX-2QY/JG!oMi="}6/cY5UVԔ@UyYdّ3M9;2kNU̚e}":|93f0,:җ2eU3gK3O>uY啳}CΨr͊3uf͐IS%IГRbkSXjƤ)f IVfWBC@E} f2x %dF}uDBLI'GGWN)$d;NAߓQB*סx:˅9/-T/m%{):, #QDH#!(ׇ@O|CUgRd)U#saL*./̜9RLe'Wz蔁NFIJH,=ʫL=_4r>;N%H?J]ͩ,9|֬*땧Sc8b;NRY{h793kb-S>90YdŀA٘n#25b0MC2̐3j1\ᒆij?gB<.匐FY1Rs0D"Gr6=L8pF2ڐ"C5d! 9אK,1)j4l&#&͸S'ڞ,ڙ˲ @~$\5 I6~ƄTHwٽewK-(I@QE%m^K-}6ҖjTQcK-;gfݻ ̜sߙ3l. ,^%'[|.Z𷨵B@,Dʴ* *6ۤrTQGiߐ:Ҽ7^ՍrWc+ &5R@0W'瞆OΎpBzq$IVE p1B_H'D#[zW_ ]`,IJDv0 LC-EhN,0XY E _``HWiX6Z6Y -h-h_]kA+]gAނVlAbAjA+m}ՂVOh %eXLYÂX*,hn ǂZ*-hUj fAVcAZj-h> ߂hA-hA ZȂYXZ-h71ϭ)52UvRᅹ[^WEME>$*y{1bfY6oOjX^U BxR/哋q DQc&'D+kcSCHEU)^ ->ZU}!ԅRe&"8M`H4dȄ*ܞ#6a6K-|CTUR(!X_vWoT'IϹ5T7( {4Z7Ig72Td1HZ"v8=/ |fp5!LfV^pMȳU.0,ha7 Z!',XE:URCf(q;kܒ(M4UճAM9b-M3J+XI3- - (".,sǸ-~V' &aCteLV Vc37.x>ǂj RXըĚ?;g83qL6d[#4?@(*8)f6{o7,(fsL j77MA fL$m];F|YZ!ͧdm\d+`Py1ץcDϒcX+A 9g4%V3](n 7و{C 2";f{Qx7|* C۴|j h2sfQ;򟟃b @qD /W,rizh6憯-rNJx{`(Dڱ>Eľ︎v\W bH,ޡDbLrqv];bbŬPYU$t'vBxǾw}'ڵ > :pV"܊UL)q=.4Efb|;L1st/GDsc+*;T UCa/t(D\6ĦxU=PϰX(_(\5rЉjj:Be 詗Ş̶AI"|`;rغ:bOq 'BU}IC j6ǓѻGi ^md,y8(+: a$To1iJ"0q[GRt2%$}^ʃsMk> kn1$ǖy4@D_󻾾rڢEE)L0BHM7GцoD 2?ׯrR|F?in%6ɵm>6sNgkr=8Brr}מAa o_|>]2#[WՂUݣVoU^BWU|Vz0g.,*ghvOسse'BϏfdgd2[?>dA&P*5vz$;>r My=KhCB'0#P0Mtgn2Hr_#-;nE8(craBAU;w}]>\S)e5;o"}<<@ߴg P;wPEѿM9}lN&–7L-:ap%hiil-ԞqRmfT͂nQ5҆ۘI,v(׎_)F*`=rr6jȝd9.r=麬cSlrIaԌS*Mh-/m7V׋ߏ6#6g09?D0S,"A lcnz/ArAϑc,f05џt/']?L3n{G%#@;&mFGd{;0sM@O.zԶO:E=0S`:N3x zI筅U=üa)]zTzJ< R 0AC!.~CJR܉ĮP/:15H=k;^|[G,thI#4st@ 5̉O#M0PNP sʐ_ʜgk"|mަIt-qoAKawXߡoB_[prO =IM oo]~=%eRJ auާn 0s~M= c{l}L5]c c# h'ž%c лtQU>J;, z 8)cO?>gzXK߳(?Mg/{*9( v+;`:5"Wu&pC1FxOhN(g$Zo-Susg~ێL1<2|J9cv^{`yq|ւ2P_tf8 e^ך@+] j6g.7zPK6oPK!*)res/mipmap-xxhdpi-v4/shortcut_icon_shadowpRIFFhWEBPVP8L[/#Mm#IciD'@^ʍgZnL-tlVm+iTC#*@=(AO\srw"w/\Z[ 촉$p$m|cdP h#~MLD(Cvi0Lu9}~x@_ zZx]-`\>XhY"$p{AtuԐ1y?YT=[[HGEa,tߴ\K.xĞ8EQu#uSgEuU\sȨ%w:DT\i{sL9PRp U3A+>a ɓN]K~M #$#M|~Ow !, /?1Jz l7jVLt($!q,^&ʾ>]xvpQrb#$ 8..-XLP#D#=D4*1FAb`PBl0UYP *!Iiˆ[`9a-ń]& ҂l. !#bi ХH]@LTî@YPKυyupPK!* res/interpolator/mtrl_linear.xmlcf`ha```daPd(0 PNf^jbg^IjQA~NbI~Hh H3P5PK(D!KPK!*%res/interpolator/fast_out_slow_in.xmluM0 b\pUWƅM<.$bTJJ<DP05_f QNDdS.x# :` ֠d-~YÒ?$J͊D[ ,n$< `B&4{m5Q"Ѧp5uVǺsXVX[oj"/uu(5E5y˾+7jkpn>gP%9|Cs&?+7 ʟ:PKHPK!**res/interpolator/mr_linear_out_slow_in.xmluK 0' .pҕ ] .C-VԦ9G0CoCZ'|e`&1Ȧ#bԣ3YTܔh.p4{o\֫JM*~B%5 ֱyA$b fljT,BKGfg; 6x"&OS/i9)f?Vqr:87vydv|PK- PK!*Cres/interpolator/btn_radio_to_off_mtrl_animation_interpolator_0.xmlu 0OŀE n"MPҐ| QOR<\$ [LE#2ِ(e/wL$K9Ir;_Ipzvt٬ޮ󲸚:m&Ҽjc,gw0wc<$O*KuGyl_ .PKɽ@PK!*Ires/interpolator/btn_checkbox_unchecked_mtrl_animation_interpolator_1.xmluPA 0łx"MK(#B[h>D[ ,n$< `B&4{m5Q"Ѧp5uVǺsXVX[oj"/uu(5E5y˾+7jkpn>gP%9|Cs&?+7 ʟ:PKHPK!*Bres/interpolator/btn_radio_to_on_mtrl_animation_interpolator_0.xmlu 0OŀE n"MPҐ| QOR<\$ [LE#2ِ(e/wL$K9Ir;_Ipzvt٬ޮ󲸚:m&Ҽjc,gw0wc<$O*KuGyl_ .PKɽ@PK!*(res/interpolator/mr_fast_out_slow_in.xmluM0 b\pUWƅM<.$bTJJ<DP05_f QNDdS.x# :` ֠d-~YÒ?$J͊]1Uzfκќb`Իw~PKͥ1<PK!*%res/layout/payment_request_spinny.xmlu=K@ǟKZ)*b,89CAnr4 &\ϗnN~?(~AAEڋMc#߽<=9 z։PjSi0`@t8܂{02"c6հ)k ~y?4עbQ#גJnӑT.EmmML 5_Jߣ%zeQ!gov=z57nqAw\i%|$87H,fo/<3ڌ& 3huX".%/p3v EV k4xa{O&Yj #+t];t٘R.[^n*bfI׍USxe޼lj# ٘/h(;:˙JgTz/Y)n8$Ϫ'Kt/?PK,PK!**res/layout/abc_action_bar_up_container.xmluN07-C.HLfTbfBnlVۤJ\P7FކxXD8Y;]S|Aw6"2&ܑ{@Pr֊OEK Z{| hZe qn{$UjFV0OM"U<^D[|/M bLX_ƙt_Oq1za}s8ѺQk]G{]кٻ93_3gPK^PK!*&res/layout/date_time_picker_dialog.xmln@gKι;@ (IqnqhaW*w% hx7 ^X+K'4RD'="F <%0-x>` -)%ɌWy# H,R+ Yhb%űۖB\+}QF.։q\-RT^*JӜτ*y&$̏9Ѕ`1Jp3]ߎ٬LLUa4:+]<̲*/ŜWw0<̈*kaoXDψs_O TcCƦ'@ln"g\k/pZ^բ6/M<5yXm>"7զ;V?Yk^]Eә5t;C=;ٶ0Ys 6ѻ" oPK~TxPK!*)res/layout/payment_minimal_ui_content.xmlVoEƿ֎M@ bs8 (HH !2Y/ޝe=n ܐʉ @8 AQ˯c[HPo6x2^[ )c=o-RZD[#@q XV7@րWm]}07'8x#ףB!wF"n"Y}"!5}%fЕ=֗=/{rt".{[GQ /6iqQ_^$ H>--a,#HN7A?[e=+y"G]vV4H_Jt#1Oi;*Hd}ۤz}-~+ANxyY$~%" a{Q ߓ!j=*˜K*ra<U'wp1 \>,2)9p ֤[X|7Px :}Jf+W10FEF݉OFJr~e+I]\ґMq5ًHp 7?\y|yLK!'/7e90}\GLMi?[suC9fR#a{P>6ڛ1g7Uo&gѴ̇WhwLNiFWp}A҃hz9j~&'W>zԔ\5/y90Q_z1?㣶ɇ7WϮ}U|m^$I #]U]XdNEzLj&d ]p< x N?)oq W HU$ tOv l*4wF\i|߬${"j&\H_wVڭ)ȲxVurPD|8,< {m1v ρ_g1o=S Ђ>a3 ލ̿emnIY6.ڕ0:aƮ[څ֫kvk{bδmXZ4j/eMƦ&S oBc QEe37MPKN%Pi@PK!*res/layout/bottom_sheet.xmlTn@#E\V9F8THPo缾7Z#+8rkˬ] c}fgkA ? P6)5b#_?#♜D_0d!t:S?8ϒz`)$=,}J nc2'1Ppj3?MagJ9y^P=~ zhETeZ2 IdN_DL2NFj=rw%:uB(%BNyPB(1p`` <o-EP` <ARřǜ*'+nټ 6qVNǶDe΃l7Wp ]oέa,4[o#AS4ߊS CLS6Yî9\u{WŢ:Bxa\ois0Bx[Rt4XׅhMj7Y{B^2k/{]:rmxޫT$9x 67lm_0C)m<`#K;|ds ]qMo?]렟W4. sNSkؙwyHקܻ.P'_ %Ck *9~b\Nu.G>;d;"9iϜ+sxC ?#E(h7w/zy)P7m-fPՙ(9%DZnL7QKOԚcWQ9|8_Hg UMW\^֠RN8XI:uE>/ww0jmFYw0ʜ̖M|#OPKlPK!*res/layout/preference.xml]kIOM'dL\]]EٙEDD]Y˙L=MO$^ ^)(R /J?5]-桻zOȦF[D[HFt2 Vm`/ ̃Mp<=0g;^p>w#^7`8GT@sGHm|sZCs@r)O |-\ zUA|;W9O:“\:GӢbo^nע့Z>_Xvhs?#>2訮wyv)1-RYVH:ccKă~WxfS'z0Ճ%WZb6hpwvX!F)7%q-ן'V* yWLC]-O |%n3YG"k>_s "Hc=N.jǺ--mڑ2[彚u\3>m=k&'6@]mp< %x^G L2N w'[=O3@BX ?T߄O 2xUuM4Zњh2VZКiDf}'gcO豫S)M~ix|2.`%Jj6obFɸAֈ4R>v{>,XOǯ|wl׾ FKGeb"W6H[U26?c3XZӈkVSr9g2Z0bU:GE㼫7%Zt qeVg-h͌?ΚҪCƾ֦8t\>?w;h؇;hgsƗf>;wjZPK[v0 PK!*,res/layout/payment_request_dropdown_item.xmlN0&:tԡ C6 D4?JJ76^@AanG*!qO}On 0 ] X+GĜ8!⚐DF<ff*pW$qh0Յ`gi=/D"})U,7\aїHe$Ql%B~زJ]K<24;$Sث6„9CeTFzӫگs99MtmߨZޞMkn[fy3^_4UAO3ٝɪ̈́/PKlc<pPK!*&res/layout/infobar_control_spinner.xmluPN0JЁH6,L v>Lc$#`c$X u)B=s/ ` O 9ߙ>^=2:L&i_Ѩ*M]/1QMLT,Qpm\_׶ec8Ѻ[8[N\"TJ;*T1 gROV D꣹P.hU#VZ R1ca gbOFu?c~}w|( Jc_躋VK1F9R vV3 :/d36riLNJz?ռ͇qx^!9tf W-Z\jFaJ3Ѻ-\@[sbmЉIz1/i3h9d_reookiLmvͷ5|MoY5uUu9zG"`2չcV)7PK@PK!*.res/layout/color_picker_advanced_component.xmlMPMIcaEu30SAY0 bWv\ͥ HHRܸܺAQp!MnL̴ }{ι:Y bt3S~uZ`8x>o; LxM"q?|iMrNl2M۶;P:it8sȡZMu;p"1!7D|{#A9q/3뉑7JYȍ+F+5#5w#y V*>XGt bJq0M>;DpGMq6zj11 ^$> ~_`1 x buڔg0N"685ISwB+yQjFA^Ur^TnM婾cfr S|UX+M5cIZN{7'5= 2Bn%鉶:gWu\_ ՗[,dLL^w_siaɷfwVg4oO+yYzJ[PK NPK!*0res/layout/abc_popup_menu_header_item_layout.xml=o@g;E(騮8P4Q 84g}Q'Х ҦB'Bx׷(Hh&b􄦌#c?V&g`L!G|wp.pı2su"eVSgO0:!˒z1WkF\we L TDFuDu $b"SXi"RrI=xHqDO|FHlY$^c<[$>(*sfN ܂`1vmƈyaluXп4tm}k7q-wH)Zj%O+64?>rEI+sBiL]%LAp6&V<:׬P2#.ŭlΚ - s~eku+Ԇ: S%W1߀Ĭя/b<מ^C6>9G>;bNy_Os=#!PKu9i PK!*%res/layout/selectable_list_layout.xmloGſY<//`p ,[aFHVlU]i7Ux9#'8@HpDP((Rr z=G(e\3ϯ{_wUD5YtD]:8 >Kn6p3{`΀/ =#T 8sȣIw$Lw'ؖ/wɶ}6s6=w#W'ͮ׷o2# h3ĄzӏuumߕxFCh=N`b<4=}&u+:6vEf:|j55n1:\XПv;N\MDlZ@Ē;R&˭VtxҦ^a%-+cZ\lA* r,qwCeMͶS.6~J0:̍\3kfZ\`ZǽV|YRInnYlo9YC?o?Aɲǀ:Uc\v606O ] O>Gb3ch!==fwȸu\?uC u3+gK~joX_rγkzW s}7eXTx[E=PKKN PK!*/res/layout/text_edit_suggestion_list_footer.xml;N@g IP$\PP@"iB4@KL$v7 tp$Hh Z2>-EژO+0#p@fHd 4!ÈCr`8e< ՚\,PFnHģHeIq/ՏdIs : K$a"{I9;|i7L~02ضs0bgb~o` >3wh-mcu}Pѕի9D֚Y>*ͪi*T-u0:ok#m\^ƤdY5Y;^u/vE;QfE;4uz?Եf˳_PK͎f@PK!*'res/layout/photo_picker_bitmap_view.xmlVAoD&v!)P$P"D%SZjEHRk==[= ~ B 7zĩ8tlq2g'N6YyA Le \b@π/߀:b//)p =9 ++t@fS',@BË*`Aj5SIZH߈(Yz(5oBUq)gI|JWy R~(!K{AgYF gEA67Rf" +:N$.y\lٓ$"wA.>L-HaⰈ!d!Nƣ8].LXV*BǨ؁:%7i\FO|ȫ7O1p>~$u߇'-^w>V_?_ױ6ժE{} i_ kV_#^.m<:ښ f1 Ӻsm쉎s׵t㫼 f=.XPMC@Gܢ}s/Z|K[(w`ϳY?9X8A#Li۲keܜxe'N~xq=]mJWXUw{{.OxoG@7*VsU>Vx[ԴI_z wޮ?I:WЭϘska|z+_<_ϿpƇVzX1wn;w>>*|X}5>n8}8Q顪Y>hE ؜3KfϚU\cµe+ޯ(Ta:Ԋ'6rVmxOfWu:wPKk PK!*%res/layout/design_layout_tab_text.xmluN0#R*B ,1FaEVcI%L  C 5Bp֧;wg9@7GxxF [9&'\k,em5pQ6Lm{w3 h0Q]Lݍ+eZ6db+Ozy'K*]'m1$7^ J>'̍7m>$;ԟ;zc=<=w} V:u_v'5_;3PKAPK!*res/layout/add_site_dialog.xml1O@ vHRJe@- B,!*#H||QX&0wt+E9E~޽҃OhFGa+ 8?%h6<ש2'jFLNT tF}͸fj5ͯ̔\S!b{SfѕWȑ*b3?R@Iɴ.g|݈rExσ]Q?Sr,&cR\iDD0<:2WHGrx4ԧzԳ7wuB _1v <ƈ'c'nF^Gv{k̮ -M?_w?~9w\_f?PKUGPK!*0res/layout/notification_template_lines_media.xml͖kAg6mw5IV7PP^Ԣ(I2ʹxśVEOăV~SMKF~{_@DE&9PK *8 PK!*%res/layout/payment_request_header.xml͋Gٞٝ~wM. g`!Kn=Lq]࿐[0HϮgEƈy`| _/7x `e΃OM F.AeifF\ x j6p(Dy}oIaC\ZF!97*=jLMO!Mp՗z.H( Mv&b6Mۗe(Ȱ??P#E+\ZA)C}!R|_$ܐN^\\i%K9fR3)0E4Wǃ: ;~y<%r]Ǵ::>&@<? <*#ѣ?O^B9~( { m%Bub0Ig$;WHE{B{kM95:A} x^'Xb-.b@=%Ggc~a@_-yc45=3:Ƅy魲(vڧZ6Llh֚5]Vӽ=yߛG-f m3kYc;iJkj^z !K?h5ɭ6ZʅUIEW}Ҋyة mߵ k7[|-f/f [k[>}SQv{q0Q|۱JoJo^oy.nŷ~OVӓg0ߧ)ky;pQ޻*}yNmeY=UqVֲ U>uSYk3T%[{-ݝiKHwjYPK#m:ePK!*2res/layout/select_dialog_singlechoice_material.xmlun@g;|4qSrW^$ "QN!x^ Ulc+ c;ڦ]wha.n.x=''ѓ8dYߓjJ8S\ɱGtZutz!jPPOXQϑ.r9] j6w7qi+q0vVjEW,`cVyU j^4kG<HoVQ#Fuڈ5)&yA7."^veq 4T_tPx'Qw:;I&41 <~6c<zxgl @N0Z9O =Mܷ)%kԵOzRW0iECZY7Ɋ.d 7͊wߟ7CFT-$uo%z\dZƌ=s~wóg"7ʱ9N3iUcmȖ͐d[9lslDϞ䌟5%gd6|۝7X=YGK;luyK1O`b  c 39L#}{ɥY"FG;#Z&H8Ep =  xv[ |z ܜ !Ո>[PEJF!YCy/C#(VypE݆Lmd^r_\bdxɍP5IMk!7_՘jy c ߕ*6P*^o@ y*JwۉHEJ%U#\f.u1< xރ#oc( vl^b|'֒ 2le&~3d3KTgZhkks]̴3)1$&ȥ.}E/PK^xPK!*res/layout/abc_search_view.xml͖KlDzߏ$MmPv%CZ"x'Ckf*V=#qDqG@ qB=VrǻS㐬~|3co[B4r8?`"x tn7;}%~Ylp:M|w"Tneϣo:%V\qNmyFat}s w_Ruə]gR,n֕{fÜ\WYǑcӵaSb`Z.4C=R 5o]愡Ӣ/} ,Ӧv<6@96]c%Z7 QC*+f7jު;tˊE֧=Dz,pfBUronn$ka77l|29F7jUS+ [(]z!Z /aJ;a::sFmLϳܾgRzcЌN]#6rmYZqnV͠%mzW> q\.;lvKAky,Ѵc߂m~{0i: nYp|>f4hu23/Nt\zda\NR#cxR/ZYyNVIh"mhǕ˜d8}=/D2cQO Y[ICϩGBGcUM!=N%DXF/OX;hsJ@7OK$یH+c;e'X+OR+ %^F9OlM2^%׆\ 63ZSzE⸒2GAciM8?IEm(=&kk̩' emXsKD_9iS),mUj֐Qh)\)?R&8k%{]OYe?ׯf~,hջk﮸d_=3ɷnw!rޅx_S}}oMTcVdzrzI_umqPKwxL PK!*(res/layout/mr_cast_group_volume_item.xmlOlLAg]ʢhqîHM%mTHU/Lwo'ٶ\T$!W)QA'z {;|2;ߙ&Jd,I%d5BJy`J(Ӏ n{!x^XQSp2 gDn٬p2I"al^+v$¶H$"$a9õVVeLY!՛۫:¨ItݔDUH&5o2PKkIL8Z9musoXXj89kL<3KE%0E#IPw+EՑ]ņ`Qިd|+ &%o'c6H(n8u!\x Mf&䄰pT ,uUZRӼR-q&_mTjAZIEb[W@[Gɒ?/ſC{|-6hmִ\GyZ6//-=5zmTmy<<~m||bkm*DKn k׫ci#ۥ)Ki=!9ځ$}-2o6o@ˇfmA7W MGw/M5}4S;HnM-ṃh^]?PKrdHPK!*$res/layout/mr_picker_header_item.xmluN0IZĀD L0"*5&h.J [G#x&.+'uG;>ɤQ:Ij`}Dhuz`S ܂;%{iʽ̋ #ȼ+!'i'N=qp%YIJcM'R&Co\ʳe Cʋ"#K2>/w!QO%z$rȝӔ;mcW'O:cZacvQ^c^Qs&^ihMg;殭t_{fN/]Vu--3Jܙ\?=ߕӛ_PKT3YPK!* res/layout/share_dialog_item.xmlϋ@$m6m<7ACA/=ūɐ _$VzZU>K'q.l`;qRNve!N=9T#th<y$;iFA0Qa2S2My7׽(+=j`") Y2ZZ)]"(Zƾȶ<,VXLyysh=- o;(8co,ƈyt6QCh~ t9{FμΙ#^,LD0ffSTZ|nW\f 4KUVz~x;s/<ԞMiOcOz? RCOLGcMh4z:6hCL'+5+Fڝ Tקw'PKB`DPK!*6res/layout/date_divided_adapter_header_view_holder.xmlu @UKA%:݅nAN|XRZ)St#=j]֊] ` -&G11% n+-EjB#UJ'9Za4,\1u:XfDݮ  NBʰ˹B#حn-U#Xe*B=\V})9LVȧ]H$4p7H%0= iYbC2i CteJC#(}WFcoyF`_>2&vvr/&93Fj9Fs֤] >o;0z 6FsxMA~U;]7{*+6Zgg O̶̡;+#Z}*#p^lkWs+z{MO|޹|ouZꋽ͒_^G9_[k̗ /Sǘ\ Bˮ֟˹UJ=2;PKLľ8<PK!*&res/layout/contacts_list_item_view.xmlVkA|1XPQ$Ń ZԃR*R ɰ ӏx^IKɣy$x՛7q&;LR_fo~̸Z 1"S> H8C, #8xxxxxB|B|Al#)-D"ؚvhdP(NwcbeЋ =(ˆ@PX\1;rPhvxs>0(˫%0>~\7tm,N V]j[4PeFn-O=vU^h47Bw1J.GVٶ݋Fl3uPo~v8Y1 #lGϗ2c<kbL&=`*灐MGgWw4!d  G,b$AqkC\4ljƑ טZΑRtؾq!GVMMT&\(.p 8Kp(wˉ)C[uh#֟爱Oȧ;RHȝNInd6 5sVW'[ljNjTmMwlM:%Q6s0֫y޺..l:[z>Xq,^ G>8^:^ּ}33 3 6c UC33rrV`+ D͵4rȻ PK o PK!*res/layout/checkbox_layout.xml?o@߳i9UTx鄐5N)>%-Jڡ,U@L$>68;?}|w6~:fD#*Fl>xcL8o'PG.tX8NKlFJF!YQsrjg 8P3PEhnB1D Rx2y SϤSQm8@@x0jy'6s:'ؓ7o}[_fތ\\fyە{j#PK]PK!*&res/layout/abc_list_menu_item_icon.xmluN@P %ƅtk+&,N't6 aҧ p{B C 23ߜ3F24"Fk0eR1%Q+`l:8<' ^@}+OZ!peR)צJmɥC.Jt(WCG-GR[n.$kJS`X[.O_Jߣl6jh1[بxKG;vDժ#eeYQjj=V("kdD{K=WOcwcI=~A ~A[sʱ5RNKN\8n0NCW{^YOPKGBz PK!*'res/layout/payment_option_edit_icon.xmln0:t(RGm+Ut)7 ;$X"EX+PV XߩDE'{~sƥ>xDF4!;j6np<%x^S|sii|/Xc8rFUOL'4گquKd+HB9;-rvo6ڥf֛ E}Նy>Oj;{l_pu腱olR{n{s[5k m?PKGo<PK!*res/layout/flag_states.xmluN0FJҴR cfX]ab@B$V?%Fw``egf!/mT]ڱUQ!bN[EECHUk l8W܁{Z-).nT@^w0~4 f1R!wf/sy2]!zy,<Q^a@ ]8McLm;s<WL8y2Se25ө'nx/w>1cEkXco& KN,#ӱdJfeikLZ3fyK \r+˕;m}NW/pyTKPK}+pPK!*/res/layout/text_view_with_theme_line_height.xmluN0E#dh"e````3ХXJؐԑc(l|Ƨ [Z˛Dn1|nBJ Nt< jo@!>_l{~X:y#K0J5@nDabfnw6_s_PK+PK!*4res/layout/autofill_dropdown_footer_item_refresh.xmlu?o@ߋ@auhX @H:QaΩmBX(߁ F lo9G*.|=wȡu"Fg#:E[Qz`v})xp_=YptJ̅G>c/+>\b aQ~57Kk2=QѺihٝ=μ_}_}wo5 }NDWݍa/7^b: ԯ@QCdtE/gyL#\ӝ)*r/!s)FdY<e&Otyy^<黩iwnqy12oF2Cz.OXZMJ=_ xl2&S^}5Se5 HIԪ̞6KVYUKyڛ8gp9j3u}%,3XsWEO =\ԋ?PKp,HPK!*(res/layout/preference_widget_seekbar.xmloDǻInwRZhJҊ& =k[Ņr@H >Ž+TUK8(}'*W?~<3VI  Lyh\&8^g9`>' n@ G xX[+wQ!d7 p`t4f `4ňa! 2NHWy..Ww2R6^ֲ+M69։I!rcԎoDteա)S[.]!Ȉ]ӁXư˒)Myߣý$ ܤ-i6IixccY?z;Lf|-2]`%Bd.wy@ki~KX˝4}ZBaŦC%4T7vduYFӲ4XnW;z|<^t(b!|f^İa.jdL4| p\ p[_p3}|U{ f]boq~P~YhWϡ5Mrb!.5r)Fsg=hwC 9da^#h祇AR{P<46kQq1xQ=2Gݠ&LkPTjc%vRyqFhϔla<h/Jz~D Ykf;e͆5UTr,Y Wq>ZxYCSRS}\{;KTI^vhoWVӊ_Z[yՇ >{Swoix*DRJ[߅w &M4k1m>(eKVǢl^(]`GIN˜>dO귥5ٺ(I=MЪ-{Z6C||3PK#=P PK!*res/layout/app_menu_divider.xmluN0 C T00Y BĦh(q 'o; V+uU~wPDA"F&gim;`6VVZRH)u3cɩә{-m;fJ3KKSYQTiZ艶3tI*\2Z`Y[N3z(JeuNRQ.[cG!+1cz||8|П<}a!]'p>o;8(W3Φ j~B,o =oW⤼ԸjkKƯ)5+fSjSf<#^Z *=hg -2zfVhy,:֌x6.D*F"ʜ]mVO''?K>ۅ*J≂v/wh2Fю8vWKmD͉R+'[XN=> bJ* Ы}еx>O|?c% 63Xx5=~d2fNմʵVY*5?C95-{fZZk{ -;\\nnuK-JdZ=t4c:}){?]iu϶5s >(KPݎJ`28tBg0 2> Ɏ3Q;^W6c AGX <\̛}cf#}Z[+hٹm\s`UϫvYSUa|غ[d+MotoٿK_[/vi.}? PK*Qq$PK!*)res/layout/dialog_control_description.xmluN0F?7%VEڡf`@L FYI6WAxXϑFH\^/ī C SbcrN-Lyumt`<ZU͵+VzWxr\Z7lsf,eT|nϔjskֺ]"JK՘Vm!q|!'"Χ䇱z!8i̡&-`9s4~;7 9羙?wٞ)/PKPK!*%res/layout/infobar_control_toggle.xmlOK@:ٺ Rh=)R'/V[!j!;=ً{bOW=OY֮ ?f;lzS'b 6)x^3O8WrW&}Ij5եVkG {mJ;/v0XG*^/{A8?iq'%bdmo!|sw2YX0]W$ߋ]dH~(kFɲPFs.x"楲1ޢK g1v bt]ѳY|us?}*5'3^n6Uj y`|b6MFVg4 #1v_d\E6< Uى}q3vVc<߬_VÚ(k쭍PKä3(PK!*1res/layout/preference_widget_seekbar_material.xmlMlDghB)-MDV@ U(BUDgד]+^N7*!āSO= p 8"h97;ޱ=5Fj%pȞ|;h uB(!/j,yQB>%5f^x,8 E\߁_@'1Nop|??^"d̀gf3!,`nJEG< CUNtSvmyˉPy݈ERɶHfnm̲l"U'l,^D k^flYе]-L`lB.?][0{"RሐшWD05h%bbQ8;>;03Xz]n;XS\ a h`DZE\XO~8CV>?ߋ"@vzE-毷Ju8'HF[Ǟ?C Ep Kp_o{ nnJAX/5p\0x|>dLp=P>E3]\y uy~|oH0gZ9f(;R*ڻRkfD2Xff){䙔hJm v299ﬢ}$9E MxNœ'Tz"Y4q>Nw]e.*ڧL+c{Ʊ9M{J;eY0:wO82-dq rJʜ#hm6rKiķu}TK5Cl' uR~2cD4ruwX[mF-~y^eJ}ן#s[UQUY+龪|/MSz 4KYx_PSjzUԪĵj9rZ/W fwd޲W"cxI. U3oK\~^/K<{o(1Zw??7PKцN PK!**res/layout/expand_arrow_with_separator.xmlO0ߤ;;+(vYEIt=sJlCf-i2 "# ѓiujQ4G'oZ4CEzRЦ9` .+ #S </k mrXGʬh<δFe)q"pL#rcJDE&ɤLCUf0K \ej^(Ri|m|ީ]*Bk3du i3`Y"io/1&Eȥ(fe EeqU& ZL~lʥ_*+I]X*A AaVǒ uWnbg\`c1c@]F8tѫ6.j7o47hWڙVmLdcf3ҟ6}wjǬr\G6l:~7yxp^\*2Jhڨ@keA{/'PK DPK!*5res/layout/notification_template_part_chronometer.xmluN0PR5mU 1thX 20#!d%VmQbl<xX_JTtwl], Cv9"g\wZZ*5<&1s76qAs4΍CWl6sSYjKʒ2g8WGQjfqFJ]Ex._B䍼r-"X/6s@< _G WAu,er^k蓹vnu:[! PK!-PK!*%res/layout/abc_action_menu_layout.xmlAK@6Җ<L.<)xU$>~J#Ͽ{i;Gh.XDI_ W ́yp ,K*p=  |_o`9pk[!x &&ؔ:CJZAH͐oxrƂ |,Ab7\DŷFkHuǥny-qzСryH ˁAA۞q0mfE .2j)zb8- zqLՊHY<ܓZ۝\AbQ%au^-ToChaOPf75]Xp,Vݺ+ڼ[*];PtQglu>I=6vW |?O ,1u< co[shO~ X/ ~{rz6]6vVYQwF Gen91ʶ7kd;l7LoF?˛.7p7n+xVɔoL%ލj>okfyQ%]#fڍĎMc:DOD$-ZJJ>ㆳwRᄋ曜W{OAϤQ1rGԬ`S2G&q#9PKs1PK!*res/layout/contact_view.xmluPN0\'$")(@H\ej($\G $>ocINbٝwlA@@q@  xEX!t[t,WfYP.cVT ֹ[. (YATff *iXmNuGXXY!xڪW5"iJ3%e*}h#ն3]߀wNakOgb!|_,#;؛5/<'c"ўZp7~;1\E ]z]eڟPKX^?pPK!*'res/layout/crashes_list_item_header.xmluk0ǟ~!n;g,ppti tj-lX2Ґ!бc2Pڵtjڹc6ڧ͑|xWO}%ԣw.-ј%5c66}0ρ-x.g󒂿朆C]H 7R+r`8*yscmO>5/dlR,T$54DZ;eTȼS CA`dH:T1'H3dϥIU\hNSc0,Tdܳ {B(eIƂEFt6;&5#b;~+\a@,n0|plbgkdcjтeh;Nko+Yhڤw`vjG\> W{v"{V;Xv[Cq窏aK_{}j~mZ[.ߌPK4ePK!*&res/layout/infobar_control_message.xmluN0Iih"u``C2 FX+jcG< #Q*"$.tΖZ mRR76{ \xݮw(7\:/NL rL-e~3!'֜J#R'(jl4s~49qՈS'&Fd9<j3\s?Rh%T8RX'ZZK=W>Km#?׼>&E;VKj ~5wJ5jr+5ϙgcPKk 4PK!*res/layout/dropdown_window.xml1O0?_.8Ap K%J7VEKrJ\NQ&JݻT K.Eھ1g?lO38@~(UB,VK9|%zYZʡ38XQq"LgZZ!meJeIqzsDR)F"7CBє2p.a]+5 b/Q, d?̣"nfGO/+8?A 1>N9[Fc*_sKmQkF>A[|\yV欽KCj :vMoU-{];Vhz>1s gU>]5Kd9wwV4Zo/PK7PK!*res/layout/http_auth_dialog.xmlSj@fo^(x!L@(hAb/Eq3&CL̲ >o[LBrf|g$P>w]h%-&\C0>_m <Ӂ2VK4&\NL:bMv,2M>}'iQ@~$2R%3v[]N]7B%᷷7I%ܳ+$Ici;Z_LbBv~~erp UMb%S1M#p{d*<8⺴&\G؁C9u:'u&Wb 2Ʈ bcg\/Fu߭ft1/pvk5{_ӹV`hՍYYL5SVj{lџElpͣgo{Yk״N ܕznvAOu66Ft\[7sF~?xoͳܯwk_г{**S7ӸPK-pPK!*<res/layout/notification_template_big_media_narrow_custom.xmlKlEg֩ױN@[@#U(.E@@ZPAAB L쩽wZO^ 7  AKxH!!!C?xv]~yx3$G^/B>r2CQ%^pG8x .3 ]49\?hR np< @$x,`^Cm]< ؆#Ir$_cN+=cͦV6tŢ 4ELM6wZmA*철x &ČH+ỳ#/~uvNF#}ˎLJilFY2SgI? [78N;'JVKN8o4=&X((P Ian.9|P8|w|`:.h|(`._DvY+j)eXJ ؈rX7aWf^3.n ѻ^7eEհ:uζxzl6J]#[I(|߀oe ~?~J x^+U~ Cp\Bˤqg_npߕ3.Ujb[PZYޥj{N_ioT'_aRXʫ9=hm*[cqI]"UL\ M^l#4&#OKKZ/:ѴO-_UH |xxM{DΧ{Ozs>~vL;2hbVjjƻܚ7q?7;^+9c7i~͜2܈GjtUw܏0m쩸fG4}m0}hq>)>IC9j48fnX7Ϲ;c{rwDy_L96ޔ7ލk`z羣=8PnǷj@{%ɚa1K%?PK4 PK!**res/layout/checkable_image_view_widget.xmluN0M[VЁ$vpQW&vZĊ8JUxvn"WAIھ?#$x%p71ػ dkfLY)۽ɽ|BL=&?T q,Z{_mҴɴ!!2gSYZ5jBdvִVFpByqUPFgJpƽd.n/8#I?n!OxM/8= ]F_k?=~PK>HOPK!* res/layout/mr_chooser_dialog.xml=hAn#^4 DLqWhb 7FjZY9ъf:gV3ҎT.DʹQeW{)&m?fRQmai7aԊ޵b ju-x7d_=Zg/G2ݬǯF 8s{4VP+Ǒw'vg'=ib9Wδ:#i|qz /PKAfʪPK!*5res/layout/notification_template_big_media_custom.xmlKlEǿY7ٍ8ԁ@ "QǡPSJ!S{﮵$P@8! h"8 H="ā#Pgwֻ F??9C^*n"}1w(j8 c`<u8߃oA,go+p ."`T*8 p% i#|MRBJ#˒m*xkv[zUM9k,u-4;oBv!jAGzdHꈦB#҉K33iꭸsnN߇Jr2';#<ę{t$qV4[F폆<xp(~4-.QCK{EPJW<.:+'1j"x*L:*A4Զ|0lZ]!qM_obL۶Zt׷C=ck \_e; f= ^/5As#p\Ī\u72 !7R٩VUҜTbiF&a|IJ/0X3 TeWyC''w&3PjVrzՓ9Y24ǩ^gNL}G+ykvk6>|uD롴Pw1g\~햌=̄xh/zD1Nͥ.ޣ$ndmM_ho;=nk|Yo5kNLmOaXe-DK0?WP1T2f25a֛X_# ]bv,y'0Mts'S/}Еo_{"}_ykm?měAy{{ .vu3ՌyI3( Rl·?PK PK!*+res/layout/preference_category_material.xmlo@_MqR T0 ‚u+K[1Ī?"ڴ,$3b`!$AB sΥ>YE?9xA D# 94{2q0fBpx ^3LGIp\>X7&/@?gk\3s[{Q؈US r9סRiɮ/7p%ph`e;4U%9[ [T.ɼhr2M9=rXۮÛX&K[vppppɎ6acڝ`;ضTnŒ$Hil=W HlGs gU&XD .k_;pNNM59ozv<-_[˵ŵb ފèP|>oh9$= x ހx>k. tO6 J +;QՒZ>rZAJPGR+%BPR+Z&yT7x&sVDPzjWB.wσ>*jFGTM+p{N:CT+($'WHb광h}9]ֽ h;ek5Oc=j6̤>JfsW>7Go?[EJ2ǠrﺾT{7Cz%̾'>u3߹{PKQ\PK!*1res/layout/notification_template_media_custom.xmloeƿ.nmA,"VŤI01jݗ7tf6oihpoz211Z4 $8r&JPIgfw;SZ'󼿞y߷HeY!b4MkH]3J8p,6pw`g1 _|Ms7t6^ Vн EVPp_R> CJt] x CUTUё=S=.=Izܰ+y~NREl6Hom''')FG=LzTӡW‰ ,h؅sCeN=%05J2렳j^%1 sg_E,ݤV̺**6qN`I{sGTvV-]q^^p*DL8FnWpG' g>"cW'@No<@4M᷇ Se֊V2EHsRmO\sZYT˹rB?oh8UVh;OdY$CGjkxf刴TC병6aq'-M:d7(/&-mQ~+fr2F5GiRv6yF A^^s;h/*oo\MK g2|2 ٵ c֌zm:ǬOG9/WxП!fN99^YCOdϐ>(3WC/g=:|mPK  PK!*#res/layout/cast_mini_controller.xmlkUvglѦU[?@K-izvdw23Mj[/D*D BEbsfOfgIbc2Ϝ=3cEW MD< K9FGYX?p#@ ow2\> 8 8|~ IV35˜Y^-~ڼ3vJ/hTfuib]6 Y9?lW 5FFuU9}7h"eAbGG7wd[F^Bő:U{!-Re59=Y|Gbg~ &`%gw.K,wXݮ"_;>kGƺoz*(C16Ff./*ֹ>s:f:ӹ\$aTQMdJ:SDdʏ|sH,#d.*u%.o[m2֬t[^; o(;"k/"kQ N=Aa;8O.eo4 c <*8^yx>/+5] ?UcZ-)i8n;T9N޷̎Y@KwbYh,xNqÔ{?m(SWiѼF4Suy30B+#2o }ezw?sWIg -YNC1YhW}X=|{O hgM;-{/=X-Ay݆y{P؆-9L𱉷(v_5 U`1MKz]mCKO}fh>̄E=>|I}Եkal^˧!}mQA1ij_۝PKR$̱76}Ǫ-~e׽a΄%m+=- 4x;kS2]=N.ڰ|JެSz{B׫f2z|c PKR~^ PK!*2res/layout/abc_activity_chooser_view_list_item.xml1A$M6ILqrE\rrh蘝 IvĻN`j9{lwvg!FLޙ^!bt2*Z}pl}<+|7m OZJ8뛉0x<$b6?d.GPg%X7-xG|_wp1vkӺϟh]G}a麵I^d]63ZЪjBsb|RkkVv n{yi5E]hVP2XՊno=sh6,#ͪSu+j759*l#Vh [Oџ9s-=UGV}ߛbV텓ZuϵRlr^JK>_PK+AT8PK!*'res/layout/preference_widget_switch.xmluN@lOHQ!jq UZZhlr8ϊxc>nmxx1hEo^dBNH@$IJBtY:*",Qi+sM"16pmbuT610,WWܤaa7L O♼7N>GO2z?©Ρ3sv9&gs}{7woPK\nPK!*res/layout/page_info_row.xmlkA6i҃_R4xE*9/u̎Cl'y(D+xQgfܤ'3Rq"Fǩ͒iHѠUQpKh 1x W `yAJ]}yJƊx.;A7ڢj5ɤW2qO}Y Os)3ZIR BEfx%Q*0[IOnJ_6P w=_\Obuso%&(Y k0Pe t]*.ZPD|i$jt Z\<<'O $ٓMT\֒@ܖbY\;RmshXcv`|?O{2FNs1߭u}ci&=]3_ƕszǍ4'uZ+ VǕ-&FUFU^k5KEzmƪk5FNޓu1K{ϪoZk#)[;}3^Cbľ־{̌f׿{H3:Ǫp~SkMo~Es#C3Ni3y?<>rx>n:;}PKOa~PK!*(res/layout/color_picker_dialog_title.xml@$sWE<+Nt܌IH8պ*<.ݍTM*ɲD*R'x8/j0 x6D]`@$.UPodVYQGktoܾ@krӹUɄUMQo,Lk4Q|6КCٽL3NGErz{lF!̜(OcGTghBm*78m^V% ;sc )rjN3Ջdx.oPKl}? PK!*res/layout/fragment_flags.xmlOA>OFhC%D:" &&n w@Ga51 Ml쵰Xrr/s̼~(MRD&i[#:G1'kE΃K*:!x }|wg\: x^}04$ŶmnecSriX&iS& :r-cu-CMTæ0MI05˦r`Ii)k 0-dy[|%j\סac ,5bs>X*#LF yt(A 42$2f;xx茷s2AR&Ӌ!׼r9/,u-0d!PBy 5ͮWo0\Yx(X8\֛Y51[UnoVVŴt W21 |_2cn{`ZcL{1^7-xރXFwE;~ hПt$i>_<X`R,u^i>Z%v׶Ѽ6bK-NҒ}H'c8Ψ8rQN9Ek lbGfuV|lCZRiCRHJ!1#~c>Ek% !}X*uZ~õ үVWW>tl+7Уw.+!}R X(w¹'JF΅oSotX5PKXDPK!*)res/layout/textbubble_text_with_image.xmlo1_;m@(ETd 1PH@jĊLκX}d# , X;1!$_85暂{sBKD5,ƈi`K`lm x %x> J:3P(()ZZRHSAwchH=Ȅz=NW2qOZ}_FA7Nhq<܈C ʡ|(:ya̶'}Gy U85l+"<< dFCFP" eĕ͔bk dcEC<.OjJ%W;a/B>lv/;)ebx G |_wgq{Y`79cUY[o? [U̹h0Ӽ,4ӊ6s js;2]5oZ ~VSCi|Z+1㋖vފtn-r~]yo,3arlCG2-ʡЇ;;oȽl>2=OڷB߱wͬuB˕%w Hui :ؙm+,4Q-\6sJssوB<`F51ރ#  0Ʈ `[0FL5A!FsۣI3'߈g}.gDe=k-6rpJkv-99}1sXk+^ZM|afl| lLVJ=4J|vR3ݤctt.0MS&l7^.,'/֬Dr9/s]űguqG޼t!>M 7*zqhl޾O&5Nܲ1Qcs`=8/G{ z&c/~PK3с PK!*%res/layout/mr_cast_media_metadata.xml͋Eꞙٙg7Y7$ AĨQqѐ,JLLNwήY1AA'?г(䖳OT=dCH/?z骷ɥ+SD%# Xρ4xVA >_ow n[6(#8N|߃@0<~[P*Wm;"nsO,oJ%"no,I_0a,+ 4;ɽ"v$4Z--Caؒ]TZ{tb)}[K1 tFPl.ck(@%I|{#ÑvoB+q+g1 .+O k_pc mp|>g6cbM _]wꭴVf0%h;XOXeutxjV1/Xe;s85#oPsfkmNP{YZ}U Mھ{V~m蝢q3͂z.Z9#زӘ]c~65 (5hZ`}ruQph)cz>יH3ϊmz/ubE{-؟D=آzknE2 Oknh\gsr5eD7'~ɚ%$1*#Z$0>!i@CP ܂;pF({~g~Sl)AW(K7Xe]byZAn|#tsL ,^hiok6ə82y'K͑ӽv<>ʛYƱ-vq8zNj`L`VGmf?PKahuPK!* res/layout/abc_screen_simple.xmlJ@4VPpBH nDA*dl`fJuW}|_o%' 39ɝ{ro,ӁEhQt`JX+` 4>hK /P,)ŕ dGjGu+ѿbz.**dq%Jz5\ַ]_m8л[GQ;G\9H K4e 9)TO9bR룱J۾Rўm_yLY.n܁ԊmˠzbM,O0 ^x*ީ2 =<5\YʌgRг*Lkl;T7Ֆ5ѲFnfǚca<5-C[h v7VKiGo놡?fdԭKzl53lΜ~PK'&`d@PK!*'res/layout/abc_expanded_menu_layout.xmluN0DԡcK'vFVFX84V1`<+$rđ]߿ pw}D-SZEټT/0Y益:(* jWؽ*zny2#lBZ+gKSXXsB|_4 H%IH?|GLtL^޴ױw3S>?PKlU4PK!*-res/layout/multi_field_time_picker_dialog.xmlŖo@4PPU~TTG+P\$V_\(H HHAH H## ,ǎ>WW?~|w~{^B5Bࠄ'}`` \ !xW _ uApuJq6X˻<͖Kɲkܲ*fU Bdk[7ivӋTvYnjFd;9V#)97٨)69saV.Et=x]V,\$\JSMp:cM׮t=x,7\:|>Xjeiq>m;Np;Ө.Z%\\l\Oɤ\]p^,fŪɪETtzQ ^)r Y=">OsG |_\u sb% 4G`] I K c\OZLrxhe$7Ξ+ӝ݁䃄ZPm}tc+Ii.M4"iݡzz-d*,vDJm֖ZO!F+/^s+C]ERfh׺B-/$IȆZR{fzMdy"{o!Sq<qVsT2( [բD/Y]Hi]-8oR% ĦeElxw\uc7,x'T"?[YҲm¶:o~yOFPKh@PK!*)res/layout/abc_screen_content_include.xmluN0'с1SU%0!1!!`Ā$$y^)3#*8wg"@ X.ЅG8%F|S R.Ká=r~A*)RawQK>R%tjw1,kc _JJ_+^L&y4\muL %dJ2\_`lE|=pDw!Ca'іn"hg3|zos<3X 봑Y7NsFXpw=<PKlD'$PK!*&res/layout/contacts_picker_toolbar.xmln1ǻGڦi"!T" H@*܍W^4xn<č;'9q6 oSy"F-Fԧ* p4-/| rFƆEþRc54ϥ.:u$&5wE|?ա% j=Z&F ʸw`6T.&oXpݞwBf=zԼASyDیrky@My'KySu M{DntCWXÉ!4-u/{-soPKPzvPK!**res/layout/translate_menu_item_checked.xmlo@߳:WS(PC+Ej2ĂʧQ1B圚ؖsiR@1 J ̈LsιvV~}Τ"]]FH ͦep;>h</K G'wA )|It0ty}%"%C=>Q"A$\_r) CtTΦC_TA[b 6DOETt.߮+$DN~ثRY> _.3ƞ&cN?ߟi c d껦xδVhWZ9OⓥCj3Ʀ9f<'^־37ד7PK$4PK!*,res/layout/infobar_translate_tab_content.xml?O0__%?UHe`BZ1$KoIUʼnsR2!* T1x|rzQ G?ׯ(+3>mkA p ~U#N^Q?ˏa\3j:,呜Ys)'rjR02I RM:TL|JP;yEY皂`?JqBTkg'5xEe5~|'Av V}9`E+TJ&'E^O>4q|SgO!N(>D<&jn ~cHl44$GJͮ|$x*?3>Î3WDZ#& x > cKWGk;0fmA\8G/F^{w<=kLvv9[Jw".*NO:E|og40{h62=Zs6jku*^K9o#gU'/WDɯ?~G5~Q_hB]_PKϽU  PK!**res/layout/select_dialog_item_material.xmluK@ߥMڴPA7;4 r4gs&!9u,?88?&]oګ /|wwȤAhZF:QM X@נ^WBmF1,+[ȅ(^ϥaHՈ zDmپyL<e`g;bx!o=uI:ݰԉEL7{IWp =x| a,FT14*[x*T}NL<E{~ݳvFE][\]1sH])w7sڕswc̜վoePK\f`PK!*3res/layout/abc_search_dropdown_item_icons_2line.xmlOkA4&c&PT`RJR :Mdfwٝ<'Bz fl"UP~w杼3S D#ix(m`p<`2֚@<SSJYlQśZ49VKzR~=-.;Ѯl׎펢R)jrWlb]z"[~OPԆpܔqDL"TEٔRuikOHWֺ-6؅˕8gcͽVÏRJ5;ˣe3ulCՓb921|'p`1bUm,V߫TOM!wʌ;D똝Ɗle\Mc*sڬ߸4ұb?7S} s2Oc3\,4wy Z#bm6+]=Y5v.{_꽕ћוm^_tl73z^-j&>m;8Kg,M7o-K2;6wWz$%?G*!__T'h(mNBM߇OPKF|PK!*5res/layout/notification_template_big_media_narrow.xmlMkAǟٴ4IDPIJģ=xi2M&a3iɢқ={" z$~^E&:d2&(E+6St":Iz0X+M`~*`\ pt.x ^LJ.%rZNoNn.ӒZ\ԏ;E~qb[RtD Mym =­m*J`ioy*u#juz'mSr_FrcۂP.OG mq{HḂ>6D+`mxm#eb>hvDjzzuߩbPmqaKP29J=`)Z ӌ x mw=>b?j,2~ uX)"{he-1 jVDg#jIƦLfGHt*7Dq*yC\G5k% Zf}*45~/CXG<߰ǯԟ_Ci*!3cv:EїtiuP$gy;}^ԷoZ[0ɬ w=~3%kYpǏlvmiÞΪ#o"}QC}G،PKgŚ PK!*)res/layout/payment_minimal_ui_toolbar.xml͖ϋG_Nt \!\IPVE0 $=eOcwWSfŃ9[. !!!s$Q7rJ1(jG܃|owzWյ]2=1:D D+d#F,Up9 A|>_`<O4b: _VSSu<Ox *MMmrn"ljyGdkC4=mUo-զ3l k+3'IdHb'qR<۱ @?ڦ--+"%2/H&'y9-/a,#LtM?6J9cl_QͩUև}xsL]dhξT?`jPyɚP˚˄s}j0&\f3zzH5 {{xzHs9#-ao(|O(~sNk0*lniOQ}99ۃYfl.lZzzUF {uu6κt6-}^}W7]Xʐ?}pM s{MC}U|覿g؈PKְה PK!*'res/layout/preference_list_fragment.xmlN0IJCJ-Tfab 6)i33K,l<'q( .to笓I{:M2ʰ:;`0rI%" Iӄ<ɲ"bt _F7|!<P/Ɓ,|nG1L}iL C/poH9;pdSBM]>rc?qf.31^x3ƈެ/ EEOc.>][DmFEKsԴQoFVU(ϱ\~,5_w^+dzTt~g(zՋ3*\ޭx{~PK/ q,PK!*res/layout/top_view.xmlMkPO2I;vUP B"h Т4 3IXW ݨkAw*h]]*`s'mcz$E:]"R=RS4pY.U;!x [|D:i p<A{[ˍƲo̭(oo6iZ=06ߤ\w۸3%Ue o[g 7M:DB!nA+Orq5{yoX-s#T*tD%梈pt}u]evxJOSS|2ir5ÿ^ ֌MOZ\Әk6ږMl{Aj:d=mUӲ63TѨ_uW( - ݷnL76mEsx+i[lw=(ʫl7M > ~a0_/b.1RPuIfkZ^5ңlQ㴬Z ۳{ MiXcd-6FODm/1KѨ6Ram_)s'ރz,}zK&އ6)fg ^\?< 1IRgGԀ̀l_Gov@_G̀/#֓Y%}4\=_G=H~ԨsS|gKҞhOE%֐d ?@ Qr!PKɰ=C D PK!*"res/layout/translate_menu_item.xml1K@6P E'A'&z$Glo&~] E~{/'^ "FeDi` l=p @nO`uU$RbIׇW #L Nq V*!Wp(TDɲ(} HJ%yD׎GH.Tfny4353f&bۦ]o2e ㈊vm0CL x^ x>` LMkk}jzfÄ\7H_~<\%Y^OX'xxM֡?jyFjxV,Xzq"xQD T;2Tr.}cJE ]Mi-z?p*PvvwѢǣSӈk3"jSDqW&dۈJ xDV`KS=TY?iE绫TQ:ܬIF{>7-kb=>;Lo-^ٌU^ZWO޴.]\+Pw7\zc%wάcε4uv)j)ř$*eBVsW-\.Y_a\˲foe3wn.9?O?PKutcPK!*#res/layout/date_time_suggestion.xmlO@ń8NRLTvm%RP)>ؑ}`JJ/`]01P]r!A<;޻sȥh+j0Y2gʣ^7` {| 7p]%Ֆ<T.Z%)"d;zLTGT$J&1 Ajď}ӑ Rf^C!wZ2=/q32ybgXO2R~!>xiĜ^8!Tĥ"cb Og*(+ܛh/d)9>bOdĵٯI5ޯ=5 9m^$2l̼3Soyڹ^#<ӇӏV'(. "-ㄍ]|WQ>j%9ԐÚy-fJK~N5w?'9?PKJ$PK!*.res/layout/notification_template_part_time.xmluJAgbbbak"h#6 6" V/c|m Dgoevjӂ:m!8^I-l )"vg1szƞ:ҥәT{f\DIkFEKȘ2%.L,163fm耘;7L<]Ԇ ^UaH-߮?j{Q[?5n\Ѹa_PKPK!*res/layout/js_modal_dialog.xml10ǟ6mC% w ]IbCŗZ$lHlH|F&&>HLs6Q sC@6|!`_@5~!C)BB or }bB%1C!K1ӓD9K!9+4\8| +~3؄]2>T& S]/Aŋr˒,> wG JD P 3BzU\({ID%OF1p6e4 Td0"Hx"ÀJ%#^n=x'B:ȡܔ[\=:|?N^M~rnNx`]l%lNhÈZ )t~~B<&I8Pk s e 05%_ݬݱK/:9l$<͵j7 5ן@0c}h\>|'^lD2D(Q؅ȃ^$++jbKm q{"8k[=~?' k p c_/WX0o wvR_(Aq¯oJ?5VkVZкi3cJ52>.X)B[4>NVJTs9ngxʵ"owiP^y?VX2_6xI?6ʵi,l#ou;}玡߯}׌}vz4vvLm:Ӛ\6Y+O(힂9\נ6r=sU+xMmZZ}úFu}T!Z㩷ֺeΐlAkv3Ni{Mir`]hG--ku{yCϿS:}# ~6a`X\gwz/PKNbЯ PK!*(res/layout/abc_alert_dialog_material.xmlUMk@~'jmVEnAR/*RT[DO5Mݡ$dg =^=(xģ7E"J^Z-SEjW˦09)鵊,"N4g5)06֎ɩ3oFu΃jiijV6 T`fU93MnˡL]$' 9v\vT5~6u:":楽אj}R3%zk~1Zm@/k(UߤK6OARjwfT|r(>oU/ uϡxWuOZ7&.-4_@S5_ɹ*?? +z=dTM<-_PK:pU  PK!*$res/layout/modern_list_item_view.xml?o@߳[W0B H qٗ&T6 L0 G0 %ܳ|r |yymzɈ6 ?rh"   [*P{ө) 5bNͭx^ct5b x>O+~{gX@_+6p-]&7qU筙OT@>_:jYϨ:'kZz }O3UZV+5Vf5J wWY>ZG-_Y}dƬɳ-Xy+}{WVxkyLs[WE]ݺ'<~3=k:n=*?_PKLk"HPK!*res/layout/textbubble_text.xmluN0F?7m㡭 C0n ,YU[m+1*l<ë&_T֑sso;1 9Y[rGf`ÍF7* t FOq`1Ʃ5negvܣ]fjL3e2s$:,dcY ?߈Tj(*>j^֋ |K?5UzPYeLs \y'mNoVQw̺06@3ycJj#t 6xރ3q0k`a<O3ddi s$/A e%y:Ō$1h f[Z6d,ZOԁAi}QHKuwKjlѫ|t4#KhZy+S\W4 C*.F3nK3"I;ZFW}{G}Pd|yn*Dt5#\mks / .ciO{W}haQ]:qw)5?e@m_ EsGĠo[PK%"/PPK!*'res/layout/expanded_cast_controller.xmlk@6OoEv)+Ez*BI(ΰn>.^zA/=x$Td'&,[Q'Nwޙg&cCGU"Ft4 ΀`lmD x^>/tWXrá$)S|Mn.T*V˨{ӓT'C>;XrpܻMB ZccƘ ᇣ{+M j6o*;L#فk<*5OxO x30 <~W276"5 =$iWb7@ QU4KEOCqvC|wp1vl i9')DT(ikF_gL㺮ѬB_Q3Ӫ1j%hN癏#3om|4f9V]୻ގmYf>Ж} : Z֬9Y_5=7%c`)s?_KsRBI/^״x~ wPKVTPK!*"res/layout/page_info_container.xmloEgw؉I\P $D]p(4(J =0YOQ㶢R$$Έ/s-h%G#j/' Y~wllL!/u\&c <f^o"|.<>0E1R} &MB02Rhث7pEd2;#^}Fڌ V!?H6*gI> 4y PT#n}ZsQc'nO uP<+% -zkNc.J%uР]i}bbZV$svh_U%ǹkuvs`h\XYsYs]v̧6.%&PQE[:E"<&h!ŨGZ5x[uP[<<ˢO C23Z &shXQ*Tp/m =~e5vRyAb7mG.=y,Xn WLzaj73[IuV3h<;nWa)η]qȑw~52%!/|& <O0X{`i!2%@9=8OG3d.0 Mn|/QFTd(-Ӳ6gj#ϚcIs@ۖb+}}ccJj16iH˧hZlq=MGqhumi(29wk9hY)v5(j>s$k 'q|]9U&|〦$ޏhh9E7몪Λj)ڸÁuԴdb-d#L[H m&4=*Ρϡ3u9TJMK)}/ΛVULh!W9E{}.t}LZ;e]>yYӟVuzq3f#79c -9['{OMMJbE{Zq~c=Y nl$Q PKN( PK!*!res/layout/preference_spinner.xmlJ1O3ETXQ+],a'8Ald;k-}V3fwÈ f8ɟ?!cO6u4~&M` A \<YJ%"0Dzrj`72K< /3y411DZĴNʰP=+HS^<|HS ӨPe%2A?I8X, $( %@^rd>-M`A>Y#=6kCSQi}Z[gs3FͩqM6ɌuV5PT^ ^j%^wmjIi5sK{zS7 =3sT`ø:6FofPKvv1PK!*res/layout/mr_cast_dialog.xml1N@DgmPP%-Q!:$:RQЂe9B:190!8zYۅg8m%ֵC 9% y%v^h<N.򙹝$vk(1LpB0s==Q>mFV 1fr(QpQ?A8 5 *c)uX< G!$KY8jzY"X #R.%i;u%u[gWf0'k"TyREFQ(D# aEX+|ko`ZqUIW^"9ժmV| c'+,*Kjkak+-5.TI}TJ=,[y1:nS\GP|g'~IJ48. (}mSɄ~ohO zU;8~~j]BWkh{蕭liZʧ@W}6ֆL'u};=w^A6:rRajc61wH~v:qT~l]^ULF}Z>3joBnָs wN3'Os,zZ.ZYQڈm_UCq dzfiζ2 hѠ{}S!ߎ?PKgPK!*res/layout/settings_layout.xmlN0;4 :002uh$&Ąڅ+HDT !00qh'}x)6aWƀg9qM,7<1fX4 F#{LThM)s57"NeRϭ \eA>i2 (Qfby(WOa},DuM3݀/4='}80Nmn3sz5=z X/84^u Z;unެڙ=3PKzHPK!*%res/layout/modal_dialog_container.xmlK@%iS88ڡn:839z)ɕ• ?ܻ˻|_ p7+/zw8i@5!dAH9'muLKC[4KHEJlMDccQvw+e]f7YUJZ7xz#\CIĴr5vK" |9ϙL]u^\v>+rCY8}_I뉎W }_;^ǾsPKZe/PK!*.res/layout/mr_controller_material_dialog_b.xmlKlEǿYY'({H((%RUzw<8p Hp@pFqF=p T\{m”~Zg^3 "=TCbD_ʃ 's$h x \lW1<*8/W[p9h,\NxԔpp+<[ jĦi|D+LZk4;d,LN=a 0MLZfwVx%#5 j4[E5\ۘDΪeE)xW4D հŻ2(Bd[.oJ%r';|}Aza\x|`agaz=Ht+<FT8#~xضyyͲ46&">&Pb7QGB͗^`tjR!H_+T:>f7ӴF_6o8*"xXC2B-!GjFXQUYv NBbxipeX6z΀p \߀ ?WTc{>p">XjN.==ܬjcoɮv@+ɻJ Mڿmf6e +seiXo)?ئQ|| mwoy2~c|\oޤh]Wڭ)v'~_ve10ߟlWhkfԼV;kkSҵz@c5аR|1ȨN*s)i^Sc:OcRUZY{7޽Y[Ǒ7֓(?GC9K1%_Krx8ŗaś#܆f?>RtSj:n4'RִgRz\qɸdgq_L\ƛ#J( ?GgR~ȳ?9BZ>T^wT}&=T+h-T Ɛ<?5-~X;e/Bߗq/x?H7Mڊd_~1~ä sCs8xqzrz`Nk\R(Eu6 _7z*󭻚0͇-3[PkֵAUd֌+ެ,YL:;QdfJ|0 ^ظ,]2Ah-Ɗ=ۛAA税-Q.ri+j(xushѶLٮ)bͦN_NkFC﨔R$t_V%XxNIZK'l'8)I0n>XހH%R~1΄0pa|G\Z:bE4YОr-+h\Zߣh%dZQ~s/¶$-U4Q!<ϴ.]GTq^ϰx_?%zfI mjh tyc_qz_EQLR& !㈊hk1z1zHBSċ9!g1-k0QmHMrCuS~OpOz9qv37 MR+^Up{2KǵՐ??p^?ץPK1AN<PK!*#res/layout/promo_card_view_slim.xmlOhAn&5PR0AP- E(2MdhvgٝFݣGAUD͛xQ 7l3M#ne:߼})>"ӖKt=``\+ <k|@g A<_@?8:gTipPuu! 9XPy^a,rU#vG&)V"r2낯^XP$gYڂ\z{cլsn8Cgqg9o;|[#~#7}$8/K@Nlshwv1 }3>Sf=C44d޶Om-}r-ͳe[yKQ=_|_}:s{L]A9`i:sʼt͛,9z&ci;Gv^ywZjk˙ZC턥]~G#[zݼzGXq'qNJzGuIPKO6PK!*+res/layout/preference_chrome_image_view.xmluN0N J+UKU02$V|UPuqxǀ8WZUOSx2`>Nsf\17a* /#o1uaC7hGqk0ޯ-1!Kg ~*5,M,uVv$Z{y7W|1 dO_A|Wa|m>"CMKqsb&Iށ>ȥGwjPKϠPK!*!res/layout/modal_dialog_title.xmlN@gm;;t  HtDѢŷW9{BěPEB xm ;c |gp΁W܁?`_JZNJz=cY69yQ?33K=*L[[:+eqR_ l&müvsӑ4E2Q~rlScE{{)s58U,C"%ŏȪ2jqjM'Y8MŃJRǙLԙV%PSt}!!o/= 1M^]+-xZωyސ\Ҫu>=מ]\[y^C<{3\o;MAK\ֿn&}43Yo˯3^VVl/[s? PKqˊxPK!* res/layout/page_info_summary.xmlK@%M*;tpq&8W)Nl\HNjqqrOps~/^h( wɣGuQ&]\kp\TEJȔ,KĐ(E:SEͦ2 0'Z-II4d&b m„A0)A :|Fq.y(a1J4*&iega΋*vB'\h {7>6uQ/XSXok6\oɵ+ZhsK^hZ+/u/u+=k}i^]569:߯-:d-i/ʹcPKMLTS`PK!*'res/layout/button_preference_layout.xmluN@E -zK-0 0oG#?V[B@L|7s{c,@aB䘜 &$&OuJ+`2)*ZjU,a6 3U^E*O0f)̓tJX%Vy,ụ`2պ<:L㭬WX6mPu_vZ7Yߣp !^ @|.a?Hoc9 su:/}OlebC}-W܊Bu.!H/!5xGDo.*XqOܓbi>ldȶ"d6RM"+ /F| р]fu*1^xOk7- Zz}P =mgB~ټ|zNYyUCKT!zgNsi΅b]Q5V7_Ιzy~iN“xB3z׆i/-cm5F}EuJ>rz.b.TN_=(תTߣG?OYqMsZȎPK)>pPK!*)res/layout/design_text_input_end_icon.xmluN@g[ƃ7=b ^Ƀdvnh,*7W𤾁Gѫ|鷳;5ɦ bCLYRuv p `}=doJ=&Ð>9N{ MFʧJ%kZ~C!PmR]͖J%ݹn4T,+?M0$IV&[1" c6a#;](g1{o'{l_}&3rg=y3] y +\1wEv8YKsE査-PKоWhPK!*'res/layout/add_to_homescreen_dialog.xml=l$5lv$pGk8+(D!GD D"DtZ< Q $*  ? = zc:G#ϼ?!LJ!PB#x< b4x0o 5~q/'5A^ow Ej҉Uhsڹ}yO`L'椗 /RxEOzi̯ٻyʄw\ϩӼyLyy;jK/+~+jr=l0K=_هvY`8N'2?^~ \Sw@%9Ee5I *g_ \2InGy@:.8UGlVr{┎U  szݱ}VtD.'^۩TzwD&Se7\[vq{KRɭ5 H]yu18.r ! Q^zU]vwޭ)rb-.J;ѯbzKVR~ri32_vkyu}ttմall,I&]qVƳK^ ‡]geZ*D6[uk4,DӚTJzO޵͸5'jГ>۶.fjie"yީx+bN}k†;:oH|SD%5XTwۃ5j]1{< E4w}^\)6#$gBG]_6PB 'vٙ^"ҸY+NL>:>T]vf u8΢!t>T+k%Cݫ~+zѫ|,;aa*(BՠPpַΊ/Nɵu㸧 \]SSAKZ`)8Sڢt:W:.ZYrY׀?^pxx &,  k'//O_ < IҲ~pVQsQ9;5!ގ*ڲ]ڝ.\pBrm./%789Ȝ5g:bNGg|$\dbL$OL;}\Ծž!2/]mLmȨ mQ>p|'7ׁz#}+L> qiϟyJrIbӬ:pub9^?RLPv)WwZvfZW1lS?[)[c]$uӧZn.?GH|#f6͛g+E4G[\Ck%:k>KI3U%g̴9{I_=/=/~G\6mx)g mhcuy>k&o&j9& NoJ?94/TyK9Em˕=|0j 雫K."_^Fɍ,ݤH+pS׹;f,[{~J@V]#Oۄ}pG7lp~:ԯs &#rH~ջa3 /Z hz Ұ'f.'9j!Q=k}W}Ԡs̴Wߵzkq֘hMm`1ţ5( f _22BY`+&YH^^ 0sڅ5nOl]5U!Ȑ3!Ėq fJ'OS[$5e@e%'8WfPK:RFlPK!*res/layout/activity_main.xmlAkAmkҦim4"Hh҃xQZ( -DIv.ͦioACUԓ7A= ѫn2]фv“;;&_F'L"FFxP<fXK`63|W ߠ 8.;1x  'ܢ\YV n4< I̤ cG|?Op1V}'XGf 'pIo<&{3Z1]#m8EA'j2QZZXeHM=cw]fMP ;̟ҲM6ʫ}(3 ǟC5mRclt =&}Dz6OH얩Ѷo/ϻ5zJ{7FS'NKq遲=Qzƻ)}\3pib =Wt/#/s{'Gگʱx/cL둣#W:cgoZWgPK  4PK!*'res/layout/storage_preferences_view.xml͋@$Mn TLA<E̦֓C tO^<D ***/xӣO&:cfyf}_^LD 1]*GU07& #<KOۗ&h&<7 Z^|W 6'pb6Gc6 SqTQm'`sF#/p FY}N+ͦ|v ^u縂j, in`;8'`((5W`.Ybc1O.Tcj;ơ量zwS$\ 1sSLjtxށ#;n)rVSRt7Fݼ?;W LEFfy`6+e1I=S)RtVj7Zʵz(A**6*Z6gY>"d9d=(27]柽U-5GG5'>cUj(ޫ"8ڟGfWVd-YgkAun>ZΫYsz=:PK5MPK!*)res/layout/preference_widget_checkbox.xmlu=O0_'8U+UU343L&vf:JZWCI +6MHG>?wBEx tK䈜 rI'ϔN繭|P,fDu>dVMas5q27%<3NO-sֹ΍>7gmMoPKvPK!*+res/layout/preference_dropdown_material.xmluN0 MBӢ0kFllXiBcѤ*1 ̈w`x *6wphOv~/ɣg.yE&0i S nx%"j6D.DZٵTByMb1Nu=r,0P҆KE"y p&,,SfGA8, F4@yPnv]&(&F̣={o` mc}|"<Ê| ezX[QkvET\chu΍,Xŋ(zNU-5jm_M|hRoYVwO?~sve??PK}\ZPK!*)res/layout/tile_view_modern_condensed.xmlO0ߴ;vae`AD<,Q'鮻~"x( '5eIyOz1Nhl`6q\+p9x.g|AP*RWH)^%SQRL -kԧy2uTXe.dk C.yj]+ YFJϕ*Z=6Ez7;]3<d]*h!L3,l9F[q$ߞ}ĸҨ9>nxmзmYmΛkFg3w޻.C?z= PKMpPK!*!res/layout/mr_cast_group_item.xmln@u4IqC)b.M7RUƃ3j=mĢH[Yb p!)>M|f|3t`1:ChTp5pl{@gxށ|5\*X+H]KSu9N=hĩJjҧm x7pߗQ)(j6vLn~azjǞ(9i Qz=&/JU(@UїA0yofo<!])0)#Ti"ˮ\w }#?q =˝N퉐gkzatvlۙk}-Kpރ 2.'[@+z ~aTܱG =EKK*]W[i^ojImbٕf#]o5s+bN7S_O1fV?B;DZ yȹ09-kSXkZ53C?^fڋc`OJkyOw=@ߕ'䝕b޳JF)-ڟef}?u}JC_͵ycm1ךo PKxPK!**res/layout/indeterminate_progress_view.xmluN1a6 rWū<ifC^}0SRi74A73|";4v-݊G*wsXy2 bj-K̰+5zOʽe.3_ e+Uo)tŦ*=++ѧK$";֖x"ډ>R`46 4}G4l|gώPKfPK!*1res/layout/tri_state_site_settings_preference.xmlSn@EPTRE{ TrJ=ph/^kV(j%|n|\<;kŘ"Z)c=ywRwmgFtlVQ#`xLkw`{^exkRZp#UJ## ^\p8秪0G F#3E20\˩LӪz=FZAuyvlLy}* x&"QʠLaU",T-V\B?#ƨPx"Pˬ:dY9J}~?_'1bc@MD٫O~|p_FquLx1r[uue.n@.{7zlOrVFw-K܃w+ީprVgoQ{xgW;^ _o&m5ߞ5,~PK-FeD,PK!*$res/layout/two_line_sublist_item.xmlj@g%%h^ JrsN9b-RI+-i.7%мAHi/=[{$פU%z+};3;<6y4p=#Yx>jx^`) .%A&Mx2hXDZ-IhJȲd@fʃ@&Rc^JkS^=ql^C!&ljU /4QYXLW7%F2AkE!JqL˓ Shi{;:$1혃}31ỌW;s7܁6cw@GV|~*e~PKJPK!*5res/layout/text_view_with_line_height_from_layout.xmlK0_jXDŽ< ڋC=e7* m?B9yOЫmM]|x'K,rGhBFG&0>MxK ^@\\ 'C-R< ),Vv-#iqxȲRXEE7K~Ƶ(%Oki5 M40~E՜tA;'l:&; 6j>Dnvzx6\sœ&븄۸duK{&m PK?!(PK!*res/layout/search_toolbar.xmlk@Iv_~@o-wă RkBAz&$$k=ՋxyIPxx ރO s!w ́URI@j 41Z8 hJ9^N/@ܓܖh||Tݕ# +r$VK<>[{ۉ z)Qj2ReP܈t ^(uM$^,3#vKXs"u_-40=7RuyR_bx}1Ierw*Q3wU9̍YqXN_8]gUGQf?Ŭ99ƎvV.qi(\;wtW(\+7i9tt^@Wvf f/fF߯?y}>fYsЮnŕM)+2Mgis0eŽDcPKKInPK!*res/layout/fragment_home.xml1O0#Jt cFbD,Qb5IUl4~?fx1Oߝ,cxx !ㄜKrEnIF$IښigQds Ozv˭](\ c tfKUǙmš-e^W 6iڬ <$jcZ&UĘ-|/1nu?7㘻"u} xp 30ϱn,&ɯ_^=vyz2?*PKn'PK!*res/layout/flag_ui_warning.xmln@ع8w7E¢"]tU  DJJex[8 *+x}/+hx!89]aZ =o;2uƈt k F qAO x*e0S3\vY#JVL+U 9ժ'rZ୩ח{QNGϝ5mU{Q{rNo)/f]jioo7\8boG?8ߪ}徜 v= PKrUPK!*res/layout/expand_button.xmlOkA4tI[k b"EJA$ifmA͋/zQ hAzP<ڏ zT}&t%oM*Ch*!ݣx$8NY5.xw=_/qp e|<۠PhnSy; N^u; M-2eZ5ע\7-vaKO\,FDr9EĺUbGq֢-ۊؖo_\6C.s-ش]aW[=ZT,ʥ) u)2%dX*;y *Tr;fds)dUT[(ZMM5?U.oܘyͲ鯖uvkΚ)t:6N,b>x #>/`|?Op1v\m^{ ^bEaqA}~9\JgEcM+2HjYE{,5#ֆ>rV[j=[ǰڈ&a%2&D|O[J3yOػJ=^Zr&I16ψ8M)q8tqDڢ6O1E;)5M'Ew؍W;sxEg2ݕ%cǘJ=j0CۗS3ldvdOߴewPK_PK!*"res/layout/promo_dialog_layout.xmloE]۱N 4-pZ @@T)HETC{Uֻi 7$.H. r>. B %+CQڱGm#=9dT#Oi6htQM5|d1RjJh)ϓ9u?sa20zo-{&%یeL͹`NMhcV6VzkEM_،v1j7ȟB7dNu<'zr_z=9^#/j4m VдCu(ic{Nz>ww{]jimgh/kny$zJ|%m]I=vPK./+Z PK!*4res/layout/infobar_control_icon_with_description.xml?o0__;T!S $+`+&g%?r|T†@| 6 9+-HOME*Y2 GԴs`\!Cx ށxog ׍&:9`TX'4i"dhˈO2Wq<*ٝl{))fȲ'38[buy6V9lm%Zð20 A!/Ja8rV!ELJ2bS>gZyt 61|p1vƈtk7tkK7uͽ WXpќFҺvdF뱫˜{rM"~c9giϳI.9&m[s8vѰ|[|}Ujc5|gm笽\9_'x^9k]wv7PKzPK!* res/layout/clear_data_dialog.xmlTo@.Nj'qZTNB*12TL|)[JlLlHP3 $F6$VgNq=|߻mEVm#:Or>GX.u`8^ |j#O,O\<G'n< A4%H<G3Z[!w[n'M] ƂZ-z-; qݮD͇lN e L 8)77}!;~2M0~̓ >d]C>c?/"cx1{ 1֑9Ng/ |::wG2} trK8s5zkp"\KRmBWںR[=S/;2bu:%11<ӿuS.3>OA~L?G\ij$S*'fUz挮i˧sHkFPu]}o:*e?4#@XP}z>sGh#m_G?{2ߝcH-{#cHVa>gﲾmS%~^mf4ØjT3A/T68UZ5Sca-[AW3RCoOy=yPKEEw¸PK!*0res/layout/caf_controller_media_route_button.xmluNA=<&XYAqhgem]W |'J8/;VPç`Ψ]}rHN)K2#Oy:17\Ntz} }Vi4\ɽMfӅ҃ 8St7 G*2gCeᕍmܛ&dQT5E莆t.U~aCeY'! YwA 8bJi>x7tk?[e_6W㷝aDWjm;*wli+[o^M3PK5`!PK!*!res/layout/cast_intro_overlay.xmlK@ߥDhE;8*HfI;u "MMBzU"]\EpQpt/QKX[ ?}"z)"F[43`,5P{ - rR <^Mu2&֥C٬:m8,K[C*R-*ʛn:ZXPG5h"{{7).w۶hrj? cfw]qDνzkHvoAlءhq0A+x*1 ^+x1vYT@~9}bd0@^MјzzЏSf"'֢ZQ?DiU+hbn{7Zם#D9\}FsJ[ YbSD;PKmjPK!*"res/layout/mr_cast_header_item.xmluJ@gl⡠4Oz*=IAfM$$zU7}=?%At3&q1gD*1U@%XgjXDSI'Q%ȶcy*NS]f(NL.h3By: )@e͔e +%h)B/m8 O]7r.QYM+{75ӊq: ' xl'&cz4w|#8m`@,Zk.8~i#XV뛴*ޫ4+evD\kԵA5TZ/;3ͪ0+/{5v.~PKdf*J\PK!*res/layout/page_info.xml͖]kPǟkmnSNw17u ^n"C /ڃmNHO7n?A^~t'k3$<pL)pEp \]|K;H# #8M|LCJaMpGQ6 ǰ& \1\zpӒ"M%Jf#V mTVyҜɨӼ\X9|WH =KBbzks9u^32pl6-lmyq((9^2mA"5:O5=$PI/%Ӹ 7ʰJuݰmHi*ŊY3yu9_a/8f}ѐFGW_Y /VQ㍚_F<ǭY 󞵡{/ >]]Ǻ,SZ%.OXή h?09oCFLǜ@W,朮icki9Mmiqj4uFlo}-__]=pNˎ<_'/᜾]xyN^9}/xyN^9}=߮GJ>oS^7ho)]KxZ"B[mΤ6uGhـvyn.u`@WuIX ^/Jʹ5XuůAx~oLD9BE'˿kDuiFjM̳7Vy?{CpO aPK0 P PK!* res/layout/tile_no_text_view.xmlk@LvdUă"Pmi"oփx/t ١ DɓQP/<(x濠Mβc ^;XfyzĈNxH%pa/-fgBQ#ӱzbW}\v㤜Bnɝr{rF(Hy,H&wӌ4Qa6"edn3{;QxO{jUE2S,e4R*E0 cQ }myXJiyϙtv;(=z[c|wPpXm/ U!~ (s#y3GYj1aZ3~+2ܩܮ6h|x;s/<ԞMiO/cOz? JCOLG木cNMh4z:6hCJ+5uz]VL]ӻPKkDPK!* res/layout/modal_dialog_view.xmloDػqM64 m U` NI+[ )=k;X,p"$ĭp[/z?|w֮*~=?o\sD6=2}Ecl78>H|g b^[`cx~ XZ P(y^p_=Z^W6˓B{_*Bbx^iOTྺ$Oy V@hqO uC .a%͏E&:"B~$P'^sDu!n*ð ϛjF͔GA;mó<Ju]$tj_V+gMsٕQ'ZiJw'n8B25TFbYawI5o ig^XaHoO Z|&x|+tiʮCLs[`(V: O,1wBYNS ?1؏.c?b :X3 sXoY}pnUUw3g+ki֭8Y^`i'X݃%KƇXL,S[:rKis|jZԺ8*xj>t],+Ƈkz~^&ҝRΨy+VΧ_UXX+&o% 欎T3|6zח,/圅^qg,}9 MYWMKh͙Y3cZgaScSXsa-MN316JZ13V]Og~MLQǧVr x ^:rB/o;=l{Y/PK"Q PK!*)res/layout/payment_request_bottom_bar.xmlO@IڃHW*A/MM&^ăxo_›EWԣnlVYcfyytL"btf!tnv340 HF8L&á?vj >|9Vkħa*N]OR"c(bSX^pWń,k3A*eyRF'x"A8 ]7eEpX9o73qu~kví-:nuq+^飹PKvZPK!*.res/layout/notification_template_big_media.xmlOkA٘lҤ&6& ^<=4&KݲE~O~w=l2;NЁ̻>3<1:EET'56%NsA 7 `=P.ȇorHŢ“\Gijj:?T*ܶ ӕT>: V%UiK%J? d+z=ohjh1r×YohKHrH@Zm2--yG Py/q̳HQR&|8'VqK4'C-hYkkq~k}f->iL}dJ];n]$ntkv6hhOf 0 }`>#$_e}[8y>ih|)qe#Dfziz%fޘs̎>e),VL9˒Kz{;[LY+g1!PKPK!**res/layout/abc_action_menu_item_layout.xmluN0OzK/ilHH $$$X!6dD4,̌ PVOq BD$T&BA@:0?,`M 9wL@ = G#%g1\NJ*vDOdݘ 5FYE_D&Qw_(Vuv,$YN^PJp ;qS>JuRd#ѳͤtE(!vU0S<< _)8%n`cd֔D?DFd<' ^7Xe}:̧aacMo͚֑~5V].sͦF~+dL]+|Ҝ:sN]9sK阺J?qi4~}L PK4wPK!*+res/layout/design_text_input_start_icon.xmluN@g[|1ph7h0&xl<ݴAʂƓ &>E(旝vv6:kDň{. Oӱ 2>jJ&}>Aj^*z= BEfU -me1\aRt4v4 "҉#$ PxޏU+&nJ O]w"h]]D3fR s>co|Op;/:clG6FX-yT3I[y~Cc3_4F gaW.\/{AV3fPKG*VdPK!*-res/layout/text_edit_suggestion_container.xml1O09@"ҢJ0t`bH=sWIUli ~ sqڨg}: %^ n3rN5#94k*+(e O~vk[a8.Jrn+|"Irۺ5kıdR:ɲv^n0LƴYwI0[ N>' fE8+ 3!e$]oOkQObO{;˾/ިQ?:KPKVPK!*res/layout/list_menu_item.xmln@ެ NBY)*h@JAP2Q?gl* (E <%<THcX=sgLEfDI7C[\W;>0 W`)X}An#drLs Kqs$sy 'p?dfrB o(d*"]'q02b/d*z( Vx<0M4J7GEsO{~xz8D~OUB96J,4É;$E<N'W :fvY[ |_wf=O1~ ~ˆ^U7/a\oqh{Zfu-g" DkvcSQk]b7sUֵ7t85}~͆Vd7SשBCk/2b k3,]ӟN]6NZoUh- )5휡{s^RNȖ߶^PK$2PK!*res/layout/connection_info.xml?o0_'wMp* EHnĢ#Om%L|O8t!wG?yvɧ'="F #Eu9*C+p;|_/0qj瑠@i)rÍT99i4*x,'3)Nxk]moa8RiPOB^>3hga|kK$R29˂ pD`JqQ̧e]  .]ƈMhq>v!pl>QuTMlo~KBo5u^yhgU\浵Dn}֋}K/,-wQs[-5>|XZ7tV[iie^FFg׼޼?PK,OdjPPK!*(res/layout/abc_activity_chooser_view.xmlՔOkA6c6" TzHI*RB^4xRd;ͮfIkn /k"-.j>C}O0|_W g]tk1)<: $iZ+kڜ4Xd^iVN0uJ&Sٴ+Ywy-ZfMl]3oPKl~UPK!*"res/layout/photo_picker_dialog.xmlMO@ǟie]vQ<cBpD AOfN#N3!1j'かĄ/ŃG xg6SgyLm(Bk%xci)[ @ udYD" y  2#-qDDSrH7EW5I׹-jR-уu&!h3dP*02bmƃZ͌#*ޙJH;io *zM*gsWf:E!(B ,%pm uYiouD4`>8l1LNofM<3"x.YrvWS㳳Bߖ"H/EN .Pc!Vz*o10 gEW{4B(x K!wbI#fVo"ya=|F"?odry$!6!7 E``_(UBqFcfյ*ךӴ}Z9c_ط2#>_Oc!w_?gb)l&U%}ml11L|7Gq܌=kմ-U)czFQjlZ|tMa5:'|}rV̓j5pLg9#= 'ܛ޳PKAodPK!*'res/layout/abc_list_menu_item_radio.xmluO@* mC 1NƩFw䰐Rid?栫iO޻q?YP;m FtB}.8!8@ ܃( i%n3 3I{y:γx@6%FB'gJ }Q``6ˤNi844ɦ&;2SǍ֪ NLRˣ(4:4a(gQQ39tD= |3#dp߆:g_kͬƱ~Nm6nwq[kZ룻/PK&Q.PK!**res/layout/radio_button_layout_element.xmluN0(T#Sza1#fXPy^B⬟:G}za"}z%)u1{  p.L~p'UUTZYV˕34vi -lyr,p*%qZH٤F窙<-sYF}萘xL.j; [OG + !H|qq{_bm;z PK,PK!*3res/layout/support_simple_spinner_dropdown_item.xmluN0|U*ځS$$F&*5Vc&QmT#"}R%JY?>;@8'jcsœ2süT}=e4YA x[km%8Ch|-or|)1Ry\Oy%H^wᵼluVh9^5~m*Kj;0׳| gF~PKBaVtPK!*%res/layout/payment_request_editor.xmlo@M򣄶Q30B Ue3C(aku/ΩϺ( @@GvّX``scD8}޽;P in Y[FV D"C y"/wr"בH!$g {PKD4}$7A#MX &! ݣwE IPJS㑿Tpae6eyĨg|xL E#O 9 G䄬͌~4eUPuJݧ FNoU.0di~81kI< V/1ia3U*,@uYGյ[G#`qx]'#P^s}N'Amkh2 Cb3 J9y/7}[׋OO`̫ۅm2_|kwxZ.lٵlY*b=N"#{rat⾊zHtj,o~Wv]oʝ/V PKqPXPK!*4res/layout/text_view_with_line_height_from_style.xmluN0dhE*10 1^;!b5VlUR'q`N[EH\~x 5vJ]RWިk ӕ+pCk\eLֻ7򾪍P6:ZYH 07Ju3krYNţjMMҴ pDs#֣S=_|c g\y}ρ}2'XO}}>7ň % !8)<uAT䳲W {xЭ6 bSZFpJRJJN5EXM׍ʘyhSWHr5ͺpV)#1 +1FtZ}<*O'y2˄~ruG71;7ވj=wTfؽG3[7gPKGPK!*3res/layout/abc_alert_dialog_button_bar_material.xml?o@ߋuH"6JT!$KDvNlצA E,|b`acbb@P$+lTI?{{ΠQ5zψz=Z\Xck|\œZ|_95~(ܩRS*)#MwWRz,KuXRC_J}3[ܞ Gc7kY w~vk'U*=Le~:+S'v0pۥ%y$RGyxX`cw£FPK!*&res/layout/promo_card_view_compact.xmlOo5_&% *B*u84(B"Rgםu;3yM©$>Gp R'*qC PJ]Ow2m_&~رO $bJK>#ƭVp >Wu >ќm- ~9\* .`~~{`Cđ =47gĮYO5M2IG!Ss54{4=DndyF ?=wS\3ro[* fgEkR;gv}1#IfKK-2"DicݮHS-CC/ԻkH#؁0Ԋ=$'$t:i/"]wOntHQtGv+}"9D(uj'@Q@nh:.<Tm{0絵}ǃ/wq&qޗvVP`b CϬB/c_|~?]cW>cb t 1k!Q< ~<NNY;v^C[`NomFNCYMh9ֵOx>qC\UJsȴZnͪ7kZm.7o>>|r>*yGΖQxz̖h9ow$ٕ}޲ڝ8DX!kעڝX}T;cytm+vh%ZVsɽ‡_W>^`՜vPN>k%ßZWd MoNg PK63PK!*0res/layout/cast_tracks_chooser_dialog_layout.xml1O0K.w՝(C:tR X;#Q Сs~vm:wQT ,gmd!m9a'- 09038\$FɉV ʩ.3G0%u:#q΁mAݮRsBL׹M˷kl1pwxJA-1|KKZ*ߕFڽ4-BE2=Nާ2W|?//f=ÜAtcMwF)~<&F gZeʹy~SOiO5/ȕ~^DU5}5=cugЖk-p˽|̴wOjUgҬy5qknV{6ޑ ^u PKsBPK!*2res/layout/preference_spinner_single_line_item.xmluN0KZԁĀ:4Bbbƀ4jR&Vނwx`Bp']N>qXGMK!3rE41llXugYi@%ΌWp=DDɭ額jXQlhuS[GXV3x^6vck04X#+dFM8U&,ucƒ} L$"@fO|C.3AnޗtN*׮**Gr}s]W֢pk+us9krgPKu24(PK!*!res/layout/abc_screen_toolbar.xmlo@qҤ$mRB"E* uDEGtuϲ/I12 X?@+ΜepGg;*pj@Ymd9@)yCN&E<$@^"g 蔏"deP)`Ycc=pa!TSC+<2~8%`(f1j>| oЉq~z&ן ˿\,>'FIy|D _ow!E ߋEOI3xKfeڊVδFMżr\1'J[l2::[% F@0yyU4ÂRW}Z7wYVo ~jy}(k_9WN~W1-bs<zBݫVOnP PKWBlPK!*.res/layout/preference_widget_switch_compat.xmluN0 4IiS sNM8*H bBpҧ;YcKG&Ω}0,4pETE |ǨELףQoF]mHIPi"9_GUsS,E* Д*XlR%vR, k!'eVqv"K'O3x`  b~d#o 3̣vXXݴsnwϟcٿܝsoPK~ PK!*+res/layout/payment_request_editor_label.xmln@8$vhiBE"qYؔ@BXΐM@ȎMvl bxHoN\ }3Ƞ%"FG4<83*l0/{|۠=N"1Քx=Op; M=T,>rCSVǁz=~ߗΆ邫kO;V+~;/.&o _I["mw_7MrKZR;3.;(jgm3nR._y_lJ1Dn +X\r06hN׹]tpmmw ́yЉ':kw닠$Y"OA0&ƾm?1 < o;|t{8oD2РHa_)>_Q^|?O em7>co!BUvx9zm+MlD}uo!ѐYhXk-':S[48.e 6 7=_BVKp(x̣jU#A|S-J"*GFȷj},=P}Bʿ-)0Z&B3#/@r;GKRon,F]x9t@-x~`c+si#9(AWxo.;t]6um7Ӭ\s%D:gٚds>A>f{o/L#%w vOXzG"f<@qVd^pI5G64<ߓl8p~[1IW.xe|vRpZ"l("BQ`^n$F4mdGc:21ހ8 |?!ز{Q`% 9(?hMm`Aq;kSܥz%"hqk2oUfZZ54Z=}aSz{fuMEKyV{5 =׌k٧LIv̺fY}6qq'=Z..{롿ї7+fy->VY55,Kǜk6i9;{֜{G{aǼPK}UPK!*res/layout/payment_request.xmlkA6٘q*/[PPiUR&e34Yf'M{zT=/(^g&EC:RarR/{ {r PhYR!!qkTmvJ+ F%8m03ӓ2j%~/{>hAr%٣leE~ Xr yC> O'& ą3{qFz/.uBq*M(B!u}%3qR4Uk=1\TRhh;zSf6Sӈ{ 5^qY1=1T8OW{}=w%CSs8 Yc [uM7|Lj`q9|ގjDQk:FMȿKlXݏԇ*f܃jN07fw;6P>νK5#yy={߿PK&r'PK!*-res/layout/abc_cascading_menu_item_layout.xmlkAMgkҦ*~\x(6zD,ItK= 'z"x͋'"X}v3kmzq>;;;IP-Md6jӠ1p &:x5x ' Yucc9cvChӑw[G nK&cS"!˭js:v&|"rqۢ$_dV-aBA튆lzlqlI*ճż&&~)Y|rd,arm^6g k[w#¼Z8Lse 2H$93FuraNvRVrz%{Z-n1Wժj4}ks #CWmΐa<|glax(A(h'A2Թ }e4mGif|Sh==GC''|44vۃه󲺖kTu{ ƕL{&zHMMH+x37;Fck9\AQ9CNK*v5/ft}ﱁ/1?tk5]54C&kCtW)GiHT/1SyMyiyFzKc7PK6ߔLPK!* res/layout/mr_volume_control.xmlo@즉TP1T"TTP[UBBBWHNqlc_V,톄XP#b&u%}wwM#_2P2K.(!$nyp̂sX7mx5x >o l;0C-fq ZOWDbKj˲]aؖ˱e;~G G6Ą64ІCd3o6۾ޟXxz f(YpȠ;xiR Z"UYЦ+ۀUx Ӫ\KKZ LR+\T4+Dw[ rʹsU^J5Wwc͠؜ 9h*7I_N(t,4/l&z39ŔXw/WjKNsA~B6~DnunFtM͔wj5- R߀3C?RWk9"(gtszň64Uc `  >k0(F(K+'`ZTKL8QGJ99L۝xZ'=(J"3/*\ZNLOe25Li0=97*r|))y^Ӫ@ۙR^I&1;I1yyWž_L{;c!%.Gp |t/!p+K׭G敼fkC3{7,MZZڍ9o҂ c^bMD126-V,ͥF 5Zg,|>=޶m>o{EwۺSK7ɞM~ B+owo=wZfPKrPK!*(res/layout/abc_dialog_title_material.xmlM@ǟI&Mn^D/^Yу{E$4`fn~(^ij^zUNH(13yf1ɦ5"Fg#XGT샛S/{|bME" N' ɑ|4O\&scHd"a(ɈJr;HRj斘L%zBf䳻"Ea!B9v[oPKgW4 \PK!*res/layout/query_tile_view.xmlo@ǟ&q~!mR_ TDB,0T@P))WbuT,@"`DL+ tv.8}t}],BȠS40Hh@ p<3o'|`y΁epw6!.7B)_ \j4&;IEZzeSqxb$5Ľjr&Yp=/j#ٮ\bt\ :CTwlK-(ʊӕ~UF)".^ ᪵!ݵWWAæuKΘ<(<5{p8 xXդ_sFs#9~?ǣu|,nU ZjKO}{6?yfeG~͎کf9[C535*)-ͤؗ8[k|OHgK*T'<7q>bϦڟ5R={9c'gZL@~W?<ҦZmTljt>{Fek2}?oG7PK,PK!*)res/layout/abc_popup_menu_item_layout.xmlkA&faڦZ@Drr/$\7F>_no=Ͻ`FG'Do&&O6X|CT$$=QC-gLr̯F*41VJ, +A#d>K3"rRF2r|.ex\+u`qI/ah Vl65ˡ9A x^-x>/+ݖeM& 4/mxn6ti誩~E2z~=l\Cdƌ9Gθ~/Ѳ6I{U5.5pUqwiج!{Oy~.9xέۓC]kxi]/ֺ+Lӆt-=}{Rwj˝PKĩw,PK!*res/layout/video_player.xmlVoEfͮ$8 !*jEGH$TBT 4W*jn艊ܸ#GJH@yqTio߼7n\|!"z`D7?p8>>~m`q^;@ ?B'/'43x%Gc=rf̯uZUe (c3|YזjymEsovVp߄悢TFt6VZm.&\YG^/KȺqQ\Czz' '6o]wfLYs 7Nݦ:n{QfbYWbA[ ACԬkٷ&FloZs'ER ?$/{T^hգGoʎ}M_Ր?o_*ӵI^[e%g%u?tRMZPϠZ ۬:V* {hưwź3;b?mL6o7|{`:}o-؇cz;3ySM ?G/Kc֟L--)%p҇W{Vd6ZwPK?--PK!*res/layout/app_menu_layout.xmlN0MK&E*hv+R$P4V%.[abaxXQ D}:O "FfDM #**X`d<'`q"x$})*PaO#jK8c6^&RӐa(<:蓼,<GU ZJ}=])4 O̽Kz/ڋQΗD̽,i,-cPK-jk,PK!*9res/layout/weblayer_infobar_translate_compact_content.xml=hAٽF/E" Fc"9d;۽)Xk H ! h+ڨ j#Dݝm.'<73}345D=0{/}u 5p #l7_`NS`%OKr7l٣bcGBպlIrR_Ք@蚂*EKR qSλ-JI YjBlH.m!MMYƪ]ǤR7m:oZbI8v.[v6#{r[f۶Tfw&Grp /oxv'tT.{bk{_K#G41=uw:49ٔsVhs>W ]V;ɻҥŋ̸U5۶`Hu`ׯJ;~KQmĭ_QvMU:H8ەn,]yx 6+ψ-3ƎY0n_cA9z<#NB(IH0?gFJJR<.2Bz\XFH8|#4Xw|eZ94#-zz#О ecM3dq antuf9 r]ߊ |9:㋊#״:1xfYǁzׁv01.rPJcQF%39Uez.PK| D(PK!*(res/layout/notification_media_action.xmluN@g@6ƃSM'/&=iɋG) ,6cK>ƘOJ5:cwgwgtH#bڥ"IR] wfXViOTTY)/#2 08j$TV*R6V5# t5x $xVV\rO/-B`p h?j>qH1qF\#"!7¦X)%"V+s9aMsT Flc$0BmwH^8 /+ZOӀ*4Przbv8S{7Sg__8R8RrϦ%H1FJB gE0> Ɉ+t~%F(ezBI98Oܳ*ti.-`x!މ✑f1LkU/2nqIצc>ۼʸ^f6Ja&]tǢftJneVj[ܡWsM YbXҺ]VVfgPKFPK!*#res/layout/mr_chooser_list_item.xmlk@gäQZWTAQ v~= ==͘ǒL[XSIT)(d3ͦbqI̼>oޝ21JR"уI1,p[ x ^bN4*s`1yX5!7HFIT>sK$~*ܞ$ͦ~\ }RX hxl#\օ#{{􋹕.Vwj,7<&2gs ހx>~ҋ&xQ% E:o~cLzoֽMVδV:iUh 4@3⩫jKkڙCUqtnlE=y z6ʺ<԰*?{$G:?_"#usLk5PL+Royʛ:kNOW訏~yĨ':hԈ_)2Nx8+E&5nk$gC}o[gR=+ٔt3PK$PK!*res/layout/mr_picker_dialog.xmln@g'uH4%셩lU*e6KKJba @bboL?dԋ~vG;D6`Dc2}pLA} o[|_/yR/i4:|5`+)2͵3rSGYDZ̒xMuJá \TM&Qix2R}<\iy"vZ׋3 f,V9Lf:P"ZFGBKqDCTb' (s^4yȋP2lNY/~7n3J{\ƈi5c:p?j5̌fiճҼVv5˟Vu]:f_wua}#*ghVէ3+h jҜWNg6kKU5׬3 rMynY袷~]ޛ\͹m5y3PKW+HPK!*1res/layout/select_dialog_multichoice_material.xmlun@g;|4qSrW^$ "QN!x^ Ulc+ c;ڦ]wha.n.x=''ѓ8a,Pۥ7 , 4V=`N.)M.ٟKxDψ:d _SU<KI\K|h8чy.xZ}j4T!E*#Ǒ9"TN)UJfO;XF:FŚg!.1LOp n/1>}_=ƸEi^ei⽋'03g:8r+̙%n[֥-ǸrY^9;rap Vm6Yi6<[9[{X֚y\s>lPo.OOnfxs,]{PK@ <PK!*'res/layout/button_preference_button.xmluN0BZJ1tԭ\1 7 E]G- x'T8c4wFhFDX^ 8W,A@{+VFT$a)KUIGi*6Ecpi,,7Ms^qJosfsgt-%u[=M1~c_I: N1DKڂOB==*}cwю]ޛ/>Zvx+>o'?PK PK!*%res/layout/design_layout_tab_icon.xmluJ1m[h,zPWhɃc鵄lhͲ| ҳڔ |3!9^ \ @ns\3w#f&<2Lhݚ+ӫCQA^{&XWsC%zmY&ubaBhnJe,,lD85ryw}0D"'ǐI؇y G1wnŻi+Hrz PKAQPK!*res/layout/tile_view_modern.xmlO0ߴ;vae`AD<,Q'鮻~ ^x( '5eIyOz1Nhl`6q\+p9x.g|AP*RWH)^%SQRL -kԧy2uTXe.dk C.yj]+ YFJϕ*Z=6Ez7;]3<d]*h!L3,l9F[q$ߞ}ĸҨ9>nxmзmYmΛkFg3w޻.C?z= PKd+PK!**res/layout/radio_button_with_edit_text.xmlo@9MiSP  Rˆ.9ű-L;*3b:!! -'8}2le:aDۤCW\W\w}x  x>/nnWGf qdҡfsPqIG@ࡌHzR=iOA̤XHwp(azw1}$`Fh _h("%m u4YΙȕ:vSI׿x4ZCVT#C)fTs߉8+^ b{,<Ӂ=;x8D"dTDHcfm{p >3 |!c xv ^U;1.F,6oՂ>=i[Bstt-&ʵֲ~,kV]r}gQk]hkUO!D_/{﬿3Vz^gsV:w()>NB~ƚ-irҜf0PK5S&PK!*0res/layout/infobar_control_spinner_drop_down.xmluJ@gk4h=xR9 xxDc$KlHTg_W!<( AnIcwݝd$N "F1"t`=&j 6 ܀[8 XCYPCKdҥ| rN=P)Q)^T(YXA$ ,Aɫ`~M;{ W1cOkO _:CƬm |S;8fqƊXƵvi!_=׮>[VzuPK qH`PK!*%res/layout/contacts_picker_dialog.xmluN0)%Uib``fL, 41$lGU%Fލ3)*q'}gwG1#W[j & \;ɄeR2IZ+GY&jch0ȣlh8lL4QhM8Edx*h 0~|tLBV۲V(K[+qc*,7"si,_3z/ z'>';@lD蝂oD=G~Q;Y؁{kĭuZ7ڻ#9o?gPKb](PK!*"res/layout/mr_playback_control.xmlOhA$IMҿV/= ԋPSnnܝ&DOһ=z("z+oo7dlc3{|)I "F##:Lz09p8.2X7Clw`t Wx loGkjV!(),ŕ-dRn,{*aK%igŢLFdsErARQWaJc/Lf/+*ݭrz^NYZ~TE^SJKPoޠlo" jl??"P(61\ח}5KF9^ѽo2}gr|X hZZj@/u?߈o='yw'pA9E 86&A"X>yr˙'-MR)#.3{x^Of_TR-a%"/v T* ؁3/DOI}jjn1v^6I]6.g$({Zu=_؈palVhWj.pKWI$6}yGۑұҒzՅƽIwpu pa$^ŷwE2O[">W*SKP໨鶇s Lw, 1h1pjclG#l4TyXmpQ؆L8ryzRMCS MV0qC_z_Jw}n14b^ >8$_ +BA%~~?_ p n?_oL)])owC(2MWk d(%JXnyY.5=xeԽ{*UZfTLZ\0Z^ {BBLC7>yV _Vo|_Q=Gڇ~G_=zGt#w7f^kFz_?4`=l#C8A?')qG<3TKZ`9\\Lj0[2TM 9{r,pSqΤXK0 t"Ǿ#1 ItLX$~q?jfsZGx!ވw=W/ I-:]6tn53?vhXe6czU6ZV%MH*>*~Y}P}Lʞ_t,~Bh!(ײJϝqNPKYPK!**res/layout/notification_template_media.xmlS1o@Ύ8ԡ LXD; eb6b+>ؕsi(C  ??X`xJ\tw|mj1ڡ!#X?7;}S%8WF'L<1'nO2 gdY<&ߗ1s:M>Nr?1V2h^z~ɨJ z0#!:Y*Flx市UdU=6UM@q֊fVl-Kv|n[HM[#yd>+];.f~uם ͺrW{WS uwe|IۺFc YgSMo7\VSqM3kBCP[wŖZ}Z-6-U/v7PKxF PK!*res/layout/media_controller.xmlŕ=A^~/OT,zyB@$G@ %Yݰ3A8;KR-B+N̸Øäсyw{5)EoRDSFtDAOqɂC8X@ \@3'|bRuCtT壮_~@d;|D|Y?p=2 ELn\)nwh~^4;=Kq[uGQs9x-_mgeg;EAwq6V\l3h{G qz`IXjߨΠ*;[ Zf){D=Oxށ#~&c R³ QBa?KV)0-|ZZ ?vdB|Ko _2,-uedQḹx\re#-kaǨ^Q3d2S_lL{^K|?O9eW/}O;79W/}O3YW/u}pߓO1\IMq=ڪYq̉qkL9|J dj |_sB-7a켦u*k^ y߰hoƖ[ZՎL!~1p<7jo#}RφwPKޭPK!*0res/layout/dropdown_footer_wrapper_jellybean.xmlJ1o*(( ŵt-ІN3Sf;Kt'pƝ]QOL #əj1ڡ"j FtDh- 8\;(JϨr%S-R<5Vk,fٕ>ݶXQq0"6U*EnAp"̺X~X&ADbr岈aXXݰ*%'w@S_::57>sjluX3:n4gFazm?Yy>տwŽlQ[?]Wޣ;坾PK KJPK!*res/layout/number_roll_view.xml?O@߳i℄* L]v@ !Bsا>|N`ܡߢKY+8:'VҾOwϝ_.# 4ew8'`~%Ovq_i!,qgdYbH։ Ĝi1ݗE!v{$r1qQcV5aQ4rr}X8|LͦĆ˃'~ 7gUWk7sQ{gPKOM矫PK!*res/layout/weblayer_url_bar.xml=o@gmߝ'9&RD])DtW*>۲jj$~ R(RRPPP w6(+=wgfgɥ[+,cVlMp;></+ \BkqLu"eVȧF/ҹzHY כaDd!'2׃?h84H0ҩ)"+db_&q(+ܙ]<ߛPܞ+&z(1u:< 62ڊn~1Čzw|(v\}LjD B-bAtb|WWc;@̣ˈk3ZO/zYZ'= i(}Na5q.}<\)2wJ[L-voꗚSilHmVymbV:Zc=޾^C[[c|r^oMo߰WZό֫7oԴlٗݘf?PKB2<PK!*$res/layout/promo_card_view_large.xmlkAgvl>ښ~m-RQLzR*4AHՓI2&β;V`iEPysFH9m"h?2M(}`W 2xRJh gٍvuG6{'Q='=5~h5yq_4ZZkӭ,ZwڀwMgowhIkͤZ&]Vkȵ8ߠ]t֠kv҇Mm ]tԆtѶw>,cgc?hSKN:;Efo\DZp:8۫A)]G_]?5mL֙O9]ΣGmm0^wǞ;ŞOs?{>=wzv|;tojPKe89PK!*4res/layout/cast_tracks_chooser_dialog_row_layout.xmlo@%qpL2tbB`JQ%Āؑs uE Ht( / 13"1R!kܸ+|w}dPBhQ`DVmp<3pރ|@``JPRIzTBw1|Kw?7>? ԄM9(tzʣ bȶi$֢ #}9H*9~qc;.$HIwY9n$&12;qrO; €Z `TB9Qj8sw"|7pپ+f11|?/p ~?1oI#>b@.ۋ=6]Jkz@ X Z&WGͬsչY2u4;+h:^Lfk/37Zକ+k?o=hgS;ӾCy_/W}ZAFϵ+z(*׾ė˹K]җPK`PK!*res/raw/empty.wav ts3b``w sM-QP)e CJbI"HPK +%:`&la'ĸc7De35B٬8(Lj@',ι _Lf<nClC.W1 ̆|ȋ@ߙO LM0mQ 5ŏ4Y[)'!쥛J¬Rw7E8ѬG[ŏoUTp&4_QlYbPKU\NPK!*1res/drawable-anydpi-v21/ic_unchecked_checkbox.xmluQMK@G-"=(kIe 'h)BO#)6RtyffdЇBzhL`8o`@&kI'YTd2G"4_~0u#g{? lAh ,ߓgK(% / Yn:$a!(%2ڈ2+RFy֣f3|xE&pd QRdM`%$n G3h]j=@k-|?"BchJC MvӔ=ڪXzҁ" ʹ6R7]/PKJwnPK!*/res/drawable-anydpi-v21/ic_checked_checkbox.xmluMK@g&JH Z m=RID=6`4]ZɟO?$nggNvE#gD qf}pBp'@OS"4gH$TLxVcqxVWem?Y˳|LUD"DD5ݰw7;n脮 x8iJ7P'E7n쁚v\pQu 妏 'ﺝ9h#! %* *q< Vņ!?w0ǁ1[ t`ۣXtKA|PR^q!5}K37fj1X+O&(-:^yWb/PK:Е%nPK!*'res/drawable-anydpi-v21/ic_vol_mute.xmluR݊@46UvQYA!.if2ddX!2҆.}}4-E'|s|2.w1`u[cWlc7{'~O89/U٤z6]̗lwjϳ%ET`wwcå*#JH0-"J(Y+ 0*fHěmHX#"S0v(K- X6ʨky, ”:EKQR*Yo84D"R#.qsRT18uRpװr1%5"QtZQ1U2kIg4cVkH,_&sij'!ay.Fq[>#!yN d9ME4ףѪJtQίGh9]vΞGc=-cƾ9> ?8 yw7zOy;;I6}p=os8{vPsq/;IkwI\ǹܣyws9?PKKkPK!*)res/drawable-anydpi-v21/ic_vol_unmute.xmluj@c7(HBL&ɷEH h[z!8ɲˢ'r&13&9 b~14֗x^ށO 8_dRW#۾m]M''}Sݮut}9$fߚCl8?]AۇU>eT<FPQqԅAR*<YP.ܠJJ,vABtS0ʵO$Ϲf(tZ\fAu׭b#ƀ(X%[ WeQ!3cc& =0w'Xc^ǰh^C{Gs`ٸq{5zdڛ㹎{GݝgPKtPK!*res/drawable/ic_eye_crossed.xmluRn@ލ)jE%E\ƻ^{mHh%G$JVʉC߄+38N27;oX~xqU-ƞF8cWl/=x 5s )fE*|v\j}EX XU6rvww?ZT\X Ufhp"!@Zq+V&7*sTVH3*vtG*qLgHD"'I -4y:Bد%*AF*Ld:Y ft*i:J.M2Ҋ%F:#MPkfLh)K'=ҌYF&ڰn7:]-SvyYT`|,`5[vɾOlRSC 9Ϲ@`)@ tq@ Or_6#އCyG>9g:Y65sͻgPK tPK!*7res/drawable/cast_mini_controller_progress_drawable.xmlRN0}'$Du@*Ca*Ѭ?4",l ǰ3ˢ\du @1Lp1"Ƅ1c\2kQTo Bj,SEU6ZU6Y=e}i*󗲿XYUyW굕WJ0徟 z#"-^Cu?:WD&C-uڡSюd6s ǯ?ĩx[/,_7/v.h}PK+u$(PK!*res/drawable/settings_sensorsURIFFWEBPVP8L/ He-@ 7D pH"Phgm#v']GNsvp?F7.MəN:ŊXY%lOȠR((3V * *,pTVuqqqʏre#Uy__PKL{PK!*)res/drawable/infobar_accessibility_events tssa``wu  1 *[??N] >|Va`ţAqa/VS,3PKN2 NLPK!*)res/drawable/design_ic_visibility_off.xmluSn14jC8kg?P9zAc $b!QjQN™%.&i}7c'}5BgDB͒B5;B~^o:}6۽]4Sqpp5\/]}x>] >d^ϗ_q377#t^93mTЎ\ цCkK.cgP _;*歲NZ?rQQ*OIJ9-Kd:ɉmvP!,(a3ۉ5CYK>\1t.]`;d ]"(/42tZ6f LSHZH8;%G;<\Z3Y뒊[&pshߪRO8M [Ъ;9oitZ{Ik\/.pv#\ړ 7 UC6i&(H_{{/BOfb8K8p{8Ym_M VJRF@ t!# @枝O7FzWmΝ ?_-ڱq3؞ޫ9ܫ}ѓl?bmKgPKj0rxPK!*res/drawable/ic_tune_24dp.xmluN@ uK eM\]`RƸl:h+ށGqWqC?Bts?N}hDN(fD/Cڮ8W|oPC)(D> I'RP"fa}V7aX*=M4fdY/ŭ/}ZQzNt!aA#X.GPFvpQ$Tp= #ۼ*sy źAoECHW4:^LX&(P./g>?o8zuřsglj2\O%&]2poG& vH5MUn *>cwmZ?4m!Zizz;=KyOm+Sa,d~]z>~-}o\{PKtPK!*9res/drawable/hairline_border_card_dark_transparent_bg.xmluN@ƿY8W\{&G1֖% ܿ%[ǰ;n ߷3"Ak|8 GBdFܒ"D[]O[eM3mɊ"]at]0˵ٕbڶyHSW6K24k֩)me+e[%.I۳|OE Ӯ/>bW|ͬk'@N.$t}u{'w_8`/T;;Qw|ztp7օ?PKL: dPK!*res/drawable/infobar_warning1RIFFWEBPVP8L/m+QD=+ Y6cuo$)[ZۖCb0h$*Chc&`]R%idbz($<0mY` @k,xL XW0_#Uq9)IOèH{yϣKL3]WHkA;_R.qhR PK1( PK!*&res/drawable/navigation_empty_icon.xmluJ0_Ba7nGlŕVН-)MApsw*zZRqIOI.\~B%"HٙiTawhkmM}{+M}(/lK{Ei$yҜSƻ8"H>'F}+aOID:Ї8_sϯ o?|cd{,}Ci+y7ԨBXfŋ?*/PKh&PK!*&res/drawable/design_fab_background.xmluA0EPQ7İ0 `DK(ԏ)e:3BFS`o>"9 CW*gNmikfa):h"mjT]Nwk-Y.$ƒ"A xv?2%]C'N昊>:5??PK8txtPK!*%res/drawable/design_ic_visibility.xmluJ@{o"]趋\](!& ;Ɨ!|&$=0̜3gLx`/{hB%!9'ܒ{%q${Il{*hΒMYTw=A|QE+C.Cu÷*YTyu&7XaTI-Kg3Iq+y"%br 7^ zlvwt^Sմ{G;~1̦a.soۗ?PKg{XPK!*1res/drawable/cast_ic_expanded_controller_mute.xmlR]K0=6C/OC7mum/76Bp6'$@8' c[cq(w<2ZRWu4LHYun"ԪE6f}U}YF31+ۦP}i0ay^IbD7"q\k!k!?O~Nn$pl{:| uɖ^ l\υOAns빿>73>͝9s)D4k~h ~PK2hchPK!*$res/drawable/ic_skip_next_white_36dpuRIFFWEBPVP8Lu/# m$9RQԋiWZk;}+5dh1.Gm6PWHhuPKh"&AĎ9g4c. r<1ݯ xuPKfZPK!*;res/drawable/cast_ic_expanded_controller_closed_caption.xmlPj1Y PhŃx(~COބJ+@zW&=ta7' 13~! .0s|^nL)V3BoYWVJrejma\6һ/9Ț)])=x;#ëw$uw<$0*눵bI0GW(kiG3XdPqkӸ;?PK4PK!*res/drawable/ic_cast_dark_offWRIFFWEBPVP8L/7 uxv٩fi]13\D& ,hX~`rB>|BY0ٞ,l>`V ,7 2ת6_'$]PKPK!**res/drawable/ic_account_child_grey600_36dpIRIFFWEBPVP8L/#F$I M"w#v11d6*vi'f𯿊/9 Mbtt)i3T~D=F0Օ\6zL>BxB/j[ @OIZyҽ\&x%ZLiJ:7-1aqNGoP Q~?[6 NO+kgQUyOhYѺi_Dz? aB |<6B":|{O9;46hxiޖF3}31Qİ{^۽wPKvPK!*$res/drawable/ic_collections_grey.xmluQJ@O*<ԫl~vD QcH FS%BO}E| F֦TLfgv$> "FˆV6ė48Ov8,3EUFvσrn~fSauyYCrAX4y"b 7+;=244vrbPu| YH/;]q!cg{ =ɣJw +Lr`<S?eާL,}G^я03ec4Q؄9ԁfŘ X [-0^ M|VNuͶ34g.qg\{gi,u7L9Yky/s鼳sPKEߏPK!*res/drawable/checkmark_blue.xmln@Ŀ)*R]UXNtT Bl(RV<% L}L2&ƂE'wܹGk|a1zIQ@v ^W pςsp\7ϊϹ"ǹ-*^oUdj>lzMv?eyYՂ|*U)\˘Ǘ'ArpxHFBFi07i<^A)beH>DPi,C>\S·/1qُ% ?JƣdM~.bJǹR0\Nl.LYοlɶ& 1tl,`;#w՞^CW ]M_SD;jZg Y-M{M4<9/"w9,oMmծU{ѮU{fq8FCVcbp̝97o9cPKzlPK!*res/drawable/ic_add.xmluJ@I]((HDt2 &CJ]4|L )Ao933wt)҈ˁIp.88נ+>A 2e6:KeQ߹6hq<,".cbpx;9=p/CF xx?ȲYUd3/X-b_ lDt|{ `b;4ol elgUkM6XkMk5Ѥ 4wQچў;LuWԺ̺/o~PK):HPK!*)res/drawable/async_image_view_waiting.xmlN0qpRu`@t@,hVԍp$ p +/!*b}YRHEcr~"\+p x 5ajo5EY6+ T+KAEj,dSNliHJ6 )d&z6[[[-N:zᔋ|߉.6;?G6V^DHSxB|t_kw^b E/S<1ڌC0w::Tatm=acrjw307PK'8PK!*6res/drawable/cast_ic_expanded_controller_skip_next.xmlPn0BBB07t֩rK Ak?]ŠE/*S|x@+\1dNs+9Xy7{3Z}gWmX;<+e˵]eJ5VEso5;S'}hG83 ,{S_fXsS]*;Ci,uagkuQbQz߮r[Frnߔ5NpF'ewf?/xzG/"PC =V#'c_$7iyoLn PKE\PK!*#res/drawable/mr_media_play_dark.xmluN 0}g+ 蠢ԡqGZlmi_H|q˽@Ba1xydBdzkEꞵu!sc]Ju[$i]Id;aX]N:5u' L@33? %ϷE.zik\;D'_0=O/PKJTPK!*!res/drawable/ic_logo_googleg_24dpBRIFF:WEBPVP8L-/!mQ?H=6E*}$Wv9`uId? M`%=~Kb`wJ6BcKƍ>ɾ$arf=۞?0!h88hx0,wE  Sy#!ThMtM/r} N<}x|.o3'?owx0<nq ~y7(E/y҉== mʚ9Ʈ43,Rz^jړQj*;y%8y1(;_[ޭBPKCGBPK!*0res/drawable/ic_offline_pin_24dp_on_light_bg.xmlun@&D.XU/uc"HɊXZ:rW*>'b~cbYpǧIB!b~01Ilg;Ps .kI^'46]F*oϚkeWydE$dN*?ܭ nw|˿ jo <=ab{{/Q]Cϭ0tPK!*+res/drawable/navigation_bubble_shadow.9.png sb``p F $;6)gNpXԄ$301q*9 ` b@,D3"@.@1$Yo{w=,p,z[ Nq11y>},Y49B 鼢iXhKU^eݵv> ?PkX=[Cl*~#rd ۹[0S]fH|eQd[±aF>3ϏFzFyyḻ0Z]7snlU0\vŇm0C͓g 1zjnۺ_jWGkмl3&/qY6d7ں-5RO~Um+G@nqMٱyU! }RZ==wq*pnVw^&^OnuMu"0+sTT^at|:7KWP⛘Ϲ5oI1wbnzڇ=-s梛}it'\#taS̍M gs3Y儙2%gws=c`e@ڈȳ^B_rۻ 8khtھѓgW;^}1ףz*<]mvZl5%6fm07W/_4-G#>Oa5JEgꜵɖ>VxGA徽'W4ɬ|qЯ&<-~/wH,9EԵ/ގͿ (^,kGf;uYwu\w$v6ūQo\ug]$ó7ayARZ^lҙ~7b-2|[ke. l2 v]VL MxλiWp-Jb*e0u3nݭU}#/Ary7ihbfwF%[*mxGׂ'_E'ӷ_[:ۼwT./3+>kt}]_VYyv"Qӯ'(㠡MB {ՇؾgWP) PKU -PK!*Ares/drawable/cast_expanded_controller_live_indicator_drawable.xmlu?K@\  Zm+V~[A;Cnw!~C}$oټɛlt.!^?%䚬#y&[if@`);ۣ(C۶jeUٗn uٽq:~ۤk|7gw. <I _+ᛑ2gD|GŽ٤}E_|/LKl^q65?%c+dvqW9r7?PKg LPK!*!res/drawable/gm_filled_nfc_20.xmlR@]N)0doYۡC "Di9]IRR\G܏l% а}3;o;x`@^~.)bx ۘ~F|A|C|GvYܖliA8wŤTn1_olZl8͗y/2a$ACW*P+BJ S)$~U0 ?-DGJ?q|A4W+! qP,$-mtPiJu:װ܏dЧP"R('~-DNYA9Ґt:P蕚\&fiʀcگur^LRY&[M/[|-.ض%i^lh0 !6cF8`]+Z G mJ>4Nq}SZ/ۖq; 9qGuBuPI]Gg@Dx[Xd_s4NSí5\=PK}rePK!*/res/drawable/infobar_protected_media_identifierRIFFWEBPVP8L/7m{$Hpp]:t%CMè$Gʗo,Sܶmb4s'C $NL:wߪLY[K]I%JCuUN\M)a X|cs\ܿe1so MXd1#xBx2RN]re $\QwիT˂0VA>/PKvPK!*res/drawable/permission_popups}RIFFzWEBPVP8Ln/FQ>00xfQ6JcW?;863BY}1.aB5a L@8,O08p LsÊD"q{`CPK^PK!*&res/drawable/abc_ic_clear_material.xmluAK0_ڴk ;xvQZ;cDx,[m-]G?9޼?mд?KR^^E/3uR q@+ 'x"40<jY$7xc_ m.NQeP^==~_b)a+~<ε_E\#U*d%ZH(SWMd郗S\̹ǝYDvch1p`bBo yVEPwa^>7JgN_8Nv"_q2yKy<<>V%IgNκ-}Y?PK$`iPK!*res/drawable/blue_circle.xmluJ@Ϳ+"XlkK[-,B2 V>cFzFfLx{ 2+|X#&'\+rM" BhU8~As7miZezsSj/%6eϋ9}"SZ76$cDEdK,qn" ;Cb?Lt)ϧ\3 =W Gm){#%梉 6{K'z'_, 7L{w?PKl$PK!*/res/drawable/cast_ic_notification_skip_next.xmluNK 0}H.\(xRxZ$6$97 (ox̛&pFCk=>̖yb R1u!mtݜsJv{ivNy[_)_}/ٯmBAæ%]*~mȣoʵY:Z^Ԟ?hI*, aH1:lv ò.l ۢ w59,]?y,<=J/'fUs_}Sח}N7c|;mG}={vぁ"G:h['6+mv{g/O {\УB_.ȗzxĭR缋*̗ߵ\xX]_Y4k \05_a"mpl_rWx3ɑ[}=t*ӯS#㢝V*v0W ?7ëm J]Yw^sc wN2]|1lw̿S Jw |ĭמ3hI9}Q k_|zu] ;Zx]z$/9>Sޛ U}S/?&Ƚzy^VsN/poEӂUM >Ο^,ٶ%}s}Gw]e[}>wRPVtsYPKs^PK!*(res/drawable/ic_visibility_off_black.xmluSMo@]NZġkks@BPF!H!Qj('™7Vvgwfڱx*t,CэHSq7c9`{O/77?_/88OU}?<ܾnu}+1,'*TBʒͰxTqʐ͙p**CިG Z*J(s*(Ph+e4̖Pp X,@R\tb4oƐ*Hּ[哶`݅Ԕ L't B!(z!U+)BC uJ)Y3SeFzPNTm<*О3@ehCy.C$0r5Kl}Kw"1ki@f[^jZpL8CYE x=v2yjVn$t5ombb_Y,_FlyrIUϣh5m' U[4($b o$`c=؛{vImЭޏ6ޝ ?_-ޱqγ.6ٻ3{Ɣm}`owuƊwPKqpxPK!*!res/drawable/gm_filled_nfc_24.xmluRMo0~$mشä!H;)qcn 0$.q#J ֪2i'vpWC/8MGO^-'3Sj#1N ow5 vUVEEW8wt|\jS}h'':9r ү*"4E֋|XZ\x!6'}AC,,I{gݛ"I,FP&*UQ-ӤI@ւi('SlH|e`q J!Tf:VOiiҹ&t!X`7rNWW/Gm7X݌fuζmNWT/ Mؐ.qc@fl6B0.}73|N~ֶqd_gqh۫ize83:Z'ޞ1Q߾qpVa. ^/PK!`PK!*!res/drawable/gm_filled_mic_20.xmln@gc;vҦY7H9P h9 H(YR>@-x%Z?̷;YУA)dDjw68Os0oĿ%Tōn7_rEu[TN߮ʵT''?{E\Ne&Y*+x"%^<򆂋HxU!M%$n/COT"+aq̣PH='7xUr8A-AEN7YYyz`ԝBLs9t{y>ɘL`b}7Fst?z>c5C-<׿MY9/L/fhz{u5utvuֺ1l4zxV?sM{/YA~PKz\PK!*res/drawable/webrtc_videoRIFFxWEBPVP8Ll/$IQ7ZTD 06`w'' |hɿuBHN!R*0!`9_*! yFP\XEpЫPKi`PK!*res/drawable/settings_storage tsc``wu  1 jdIsXԷor42(lIJٽbj[5ȔsK~u`PKNIFPK!*#res/drawable/btn_radio_off_mtrl.xmln@Υ)Io d"*v4iBPIY71u$i,@xvlXU</q}iɱDy%bMDt`D(96=  pN|_7Ѕ6G 8>~YCYڜ2~&]s` 'm*/qQ*σ3p\&ܤ w3+XBh209*^4^TtM MWZӚ{_[ oRj-]?h{@ u-P~L{[R΍h#zNauq(P׌85J]kF}Yk'(Za/&r'u~L9NG u\w:8ΐZ_%wt4GS99 h@ݵ9Vm ͉&h]gX5gUךTڲ ntqιbXgVh߆Df}0'3&d@1x - %{c 2~ Q~IhL@0E2&cӲ);Lb(}H},}, m!5}iR߂vg?Ko q?ϻu'6Eަ0JBM=G5C=}vV~V&%kB3 *Wq^^";W? tH{PKAԹPK!*7res/drawable/cast_ic_mini_controller_closed_caption.xmluNK 0}H.\(x"V<Z$6$97 (ox̛&pDAk'| -"Ec<@ۜ )p1&i6w76MY'ilN"s0_ *wJK/(oRӀ6g:GPKPK!*Ares/drawable/btn_checkbox_unchecked_to_checked_mtrl_animation.xmlJ0i6uE2p]{P66Y^>=| =e) eNi)_BUL:#ݐnISIڐPFobVKHFJ+cJí+˻WYXm Mg=&oyxnreb.IL,$IUhu]CYA FdAo` ~T7 i?\}y}{} VwL/딒;[?c\#8q}c=cbw3PKD+PK!*,res/drawable/material_ic_edit_black_24dp.xmluJ@g&JUG#m= 1)R|q&t5iBܕfsy,M!Ͳ< 2q(P4_wl[K:{2ĩ}ٵgwD."[} Gֲkf=LʙYVVfT/"OGtt1>uIWN8~rx,5M.Ƒ4gY=P4TۡwhXӥm!ãUϨ!BchJRS749smmYTfjZ2j*Z-uc^{PKNMPK!*/res/drawable/ic_full_screen_exit_white_24dp.xmluJ@g$J<ԛҐ-Ń z`V<6ƄtI!'_ó!|֦cf̬N6c:eD{Cpp+x $}LsNVJEnѲq2%vKq˘FV*G ,t*|̣a٠* +^gc.ܠ 7ɲiSř'"yI'yœW&soUlj"U% _M]y `bQa 4rCWѼxClRchZ [ym6z{;&T̊XW^oj/;PK]pPK!*#res/drawable/gm_filled_piano_24.xmluRn0=Z-5M!C*I̢V<@(j)ԉ PO͖[O? FCǻw#h1zE%ف8N7|.[纺﫲4MЊYkuɣqy\D6BX̲" E$i"LkL:TAi,0rۙbID1D$EI aTX1*mEr,2p֊Vl;uCiF$HZ(.D"L `_/us}o U^DE}ĝ3禕,4Zyt{{\=ΘpwAf`}ϵoŷ?Tǹɉ|0LSㅭS ׷ccu_APKӸ]LPK!*1res/drawable/cast_ic_mini_controller_rewind30.xmluNK 0}H.\(xRxZ$6$97 (ox̛&pFCk=>̖yb R1u!mtݜswr" W.8xu_RԄv쀫)w򁚛"|syXeI;+}5RA1WA S{׸PlhpI_>mDA >LG`Gv`⨱qEkɁIڰ7P8u]-|Enz>.lLӪ=Y:!Na:8,'24\LN+5-Eq0^oc-106@lckhƫ {OG^B2_`ɵپXqwժ8sTq N^뭯{kY갞pZ [jlk5ZK[jXZZجelPK"^PK!*<res/drawable/common_google_signin_btn_text_light_focused.xmluN0*D7P%Ɗ V`1m(T``dd2ry(VNsqN]s"F}u V F`Kpx=K#Ee8 Y JB,+$q.ELI3R\7JF4$R{APM8a0<iPU-+qNWq4 W"TXwïaj_3-CW.mGb䆏_Xesۨ-Ӣ M&3j5m8%zq*FЗ|#o;85U}=.|G6~Oqq6`PK!u|PK!**res/drawable/cast_ic_notification_play.xmluNK 0}H.\(x"VML R7̖y` R1e utݔs4zѻ&ɬS4e'Z9n/;%gxF7Q}i@ o?wPKGxPK!*%res/drawable/mr_media_pause_light.xmluj0Ed[SH)JSh ] K@րl3)os+Qck$Ig9[O3al!\W M͡- ]SeצbQz>i-CbY46񔔕5r` t8”sKD40cX O$?^}~bjI/d^y^2"da_ wW=>u{nqgoPKPK!**res/drawable/btn_checkbox_checked_mtrl.xmlU=oPn|+iR B*ub;vmw@-e@* CpDuq[*S 3# [sqH8:zw:_2p``ns^iDXCl""q<x:-."mR:jgDW7,?9ӖyֵwߋOeؖ@&5c5 sӳ muw;{Py$p7Epu)$i*Gޖ,H yh 39>qyH9/,Mt.TҋNr{Jz.)&ꤞ(Ȳ. v%oSEP5QR##QN{A5.(\; Xq$ 8QG%>)"ccW7X|Z8$EhMՃW!"8.{IeAhe`9ysQ)) &:YmbE+2qox56qs\'yVNc!=-%|,Zڦsd6X)h}}Hd M\#>^!w+G"cX}+p1Tr*. aƑ1A稾G~iEALɈ~ qӡ^5}>ګGD f̻ PKwL PK!*;res/drawable/cast_expanded_controller_bg_gradient_light.xmluPn0#"1tСVWԉ~E,Əjѿ*)Rtw釉D* ]1'p>S_fXsS]*;Ci,uagkuQbQz߮r[Frnߔ5NpF'ewf?/xzG/"PC =V#'c_Iwi7iyoLn PKP&PK!*!res/drawable/mr_cast_checkbox.xmlPN0R`Kza70uLb)URŖ-H =4> %"=S򖜓krCN&>ڕ;WA몳Gw( RubQpXik_Ƌe6vs$sokȻ+CUO ""+XQ=.q%G',zTfq$ߤ;ƽR쌌 3>^j4Wg6PK}\PK!*'res/drawable/test_custom_background.xmluO0}g00qpptb_h"XB~kFBk^]*A !f7daZ3 LS"qJ٢:ms_ )?PYRZSH7R8N#Ox'y.ۙg=<^]E 6$eXfҟPKÄHگPPK!*res/drawable/ic_update_grey.xmluRn@c;C $]0;To<,PY)]bi%G8JT~Jg[*֙9sOkH zPkhBπȻ~~\,5z7y]nYWSvOjuY wE]nrT+] JsPsgӱiLœL( :r9̓CmXS]Z*É T.Ul,ѬJ="1V=e:1%7+EieԄ%8m(RV+f,h9-E,12Zolv1kڮRzptY`P|o..ʺ^rq]l ob;=^tոS3xBOq<)`o s|^v18?|v=nstzz:qB}a}=vv}=rۗ9PKDpPK!*res/drawable/email.xmluN@b[ .-Io L܈qٔj%0{}!w?P!z&_.gT'5"FtLj .m pn|/ ${N%,Ȕ*iFX>,z]-t,ϯm"^G2")oEF^|;xR'x؎-TKV4p+Xm͇88wۼfCqeEq ^O$Na4 /.~4z_/6 uqT?MbBG& vD5^a_n*OЌ_eMV[yOxؾT㩜=x[92>pC]ue]g;b/PK0:mPK!*3res/drawable/btn_radio_off_to_on_mtrl_animation.xmlAN@065ZcԵibٚ+@FQ2Luy/CJHM'A &\1;U+p:ށ7V$Dn||VEji+P&7i:vU~2 ˵M --*ITnl:SbTRqlH*MJ[RXi e#4Î`}bGtq)3l#{.O7sss}a9:2wz<{<VqyyLx Yp|taHIM\qQvbB]H.D\5Co±j6)I:Wu )q/A 5SK= ~@/."KJU/:l$rr0$Y7*8r1W_t3u*M$%[f c-1 # 31`}x=m0Ы4OW灊T3 Rplq5qZ#1CPy pFQSGz1z3][Ov 9wp"r^î8'g){ZG{kN~#HD7PKb_LPK!*&res/drawable/ic_file_download_36dp.xmluJ@g(- <(TT҆X!/*C`jBГ/[%3N5ӝA8#&%xj"_$۞S)(h|]7u<8q\IY(u(Cjǽ;I0*Oa~w;bRUpїs~6ym1ڦwFT°P :MuSRQIz4KӊYg4ϳ<(M^Y'۫i^vY?Vh1C.6qC4o [cH޾24q]q#~wt>>"I0qp2wi* 9)/O^+US/)'A0U F3h0;9)7JbӘy^1n/1ăȅVq7?0+ m;wTlk*ن%s> s#cÚ-vf+P.ֲf0;+g6PK~ehPK!*3res/drawable/cast_ic_mini_controller_play_large.xmluNK 0}H.\(xRx$6$97 (ox̛"pFCk>̎yb EۚW7Aʛsj2{1k:IoSe':9n/;%gF7Q})uٷџ;oPKP’PK!*+res/drawable/gm_filled_content_paste_20.xmluS=o0=Z?&ȐC4%eeJ(n)ԉ [pOɖ?йAݺ2FK=vIS:$;5mG8^@0;nTIEytx'٢X~UVs>fقyZiՍDĕn+Y;m)"xh}IxG.$5"DW8h+)˞PMX>d8-ee}4K"d06d)Tf E <]#Yu EИDt" {~L2Յ%hmUzs2hcZF&G&F#/f..tQ/`]6 ]ο2&jG֤3kPssb;?MPq~gYzWMYk+c'?5]oikV GmoΌVh~-g _PK=VPK!*,res/drawable/mtrl_tabs_default_indicator.xmlu=N0 +~$:ش ꐵH !!vE97lDQx'[㙑|(X\, W<'BIx-iyfuYmunms$&uM*Iפ&q (ѥ,\qcoFΧ(x>&%Ω_3 둾Uװ9yM H NGLrrH?Ӝ;jC_(,w}Ӝӧrt'dnPKƌDtPK!*0res/drawable/ic_check_googblue_24dp_animated.xml}MN08.M%-bĒ; ױhTĂ-G`8BE>~3Ϟ2V0C7RrFXJIWtP*oͳ=:d5HSSm]ϏI_>9Z]im(ں?濊[ {:{@x>8`B !>)ňüS]}DjqKK1?;j/ hC*h326KNzz2ՇٿPK3PK!*-res/drawable/$async_image_view_waiting__1.xmlN0@C0   0h&qHlO3H9N6Dp=>v,"bJhҁ͆W& ܁ AZH\KEמ ^5WߏZ#qd@j>zz t7G<$+^Rya㡫|GNkklj{uz2p_[E4tu%/DOwC/HY9>2;.c<c @lQ75sG}muPy=haocՙoG9_3Us>X1yiqiRWi'*iL3=Uruپ&7!⊂{}ꋱRgF׻|(za{֪ܲΆi2]~[ݿ^36pk2 {U0r5歸u{cw]ܺ]y?7PKT0PK!*res/drawable/telephone.xmluRn@ۉ*`1l+y<3~L*$"K1Qb7 }{v`3̙!"FO=a_vM3@/7@ eQ})[jޖtppYWf~·E8~US7+e֖6wH5WRYDs-" D"u[\ mq)RA+!c0qd" ]bz-+8Qe'@ f"q(*kb>ںu^D u!NAYj6gbu_d}jNe.:/EÅțE-bn]׾->exkk}\<~ aM`}`z?ww;5m՜=| NPsSM~CyC0~.go\?pPKLn6<PK!*%res/drawable/ic_help_and_feedback.xmluRMo@GZkڎP8!r pq[)ν+ֱ(ۙydWs54#̀ @/7w=dRէ#ӼV]I''۪]7}c~+>VulfCκuet}}%# &8!PQ·?b@oE#4ڪJ=HKWn]Yʭډ;BpծSK0Om"z>r%…2W"B5@%AA3X'JU!&Gp%`m"WL R(mȄmqBO^AStGiei]>6/ϛ/[6Eņ-EߘE6c' l oW)~_tDZpڞCWӏ8y n~94Mc7*ΊXW^uxB@\H]@z>owxWso5`{?Ζk={=;;=w&6qε_ٛw3=PK PK!*-res/drawable/abc_ic_menu_share_mtrl_alpha.xmluRn@;jE%iVdG *"%B,-'DJ}G;Ό'E0֙{|f˾#b{D-FtA5N@ qox ln߿Oۚ糛r~ǛheX/5lwe[5 U&䤊ȳPH$ ІPD_NDBB!ƚ&ٖ 6X5V^-J!Bj\8(˔L:DrKAxn`u%'\vӦDF @\ ZLEX,,%<۸D9YJLE!Z7X^'Y%g+X17[2Xt5mYuG; z9YݶWqSճ@T˫q6^ϚѹU-1[cϘ@ N<@z)q9Ncz; ?;LKhr\^NY3s}PK LPK!*<res/drawable/common_google_signin_btn_icon_light_focused.xmluN0*D7P%Ɗ V`1m(T``dd2ry+^~XB8;%q8yt͉ՍV6OhnX` .}p. ,dB,g1* 5ND&J,>Ĺ2=O$9XH)rr"*E`HYA5ISRLc-h)c< ;z}YPз ]"k)>~c>*5mfhN64Usdʖ̨i:t\%XiƩ|G}C_u|dFXhzW7]=ټ?Akgsf~PK u|PK!*,res/drawable/mr_cast_group_seekbar_track.xmlRKJ@| :x]xqI4 <..V$4B£zUv 7!OpSxpN$$GAƪju0ؤ[2}߽"c3Ns&.V{۽ ofx{W/vws{<=}ˏϵu>l] ~E* ݂1`4[07a!]chC`]aQ/ ݂1f4~C`0-/ơ0t Ƹ) ݂hn0[0&aFX8nxk4N[0ƙ0t ƴ8nxg4.[0|q) ݂1c4[0kaYq# ݂Q6[0q+ ݂1g4[0ƽ0t Ƃ' ºpO|PK@(` PK!*)res/drawable/list_item_icon_modern_bg.xmlN0EUZTFX*ѬFH(#߁X;&UIW0 p8)&-H;=遴%FКe݂*}^'Q" ˼뚛$Y.T*$mV4~щ In* YSd]R8派2I$gq={Aa>cx ڏ'຦6Ve2yTtxxSvn>⣣M|׺iۦrSMNˇåNZd2*e6E(d\XDk1ñxx>:VA{wG*IDe2S:21)|cnW0IfwArpq4Z&Idu*-R [v~b6}G^~=*cfEQWBUW|?/ushMYt§S !' qpǫ}kg;)>ϾzsOi~B'6?8g˹D2q\g;u'{=}Wx\9Oy+Zv˼\v dž\ %yk{N bDZ8YNs GgΘs'PK%#)PK!*'res/drawable/ic_mtrl_checked_circle.xmluMO@g&mLdzlb@ɟO?d](ٙ3ݪdлBĨNh Cܧ\k 7S*Q y21U*$D/߫{UhOI4a䡈Bbq}A-ߖxbu x-ٍ=PN,%XR\dPܵxN.\_G,Q {tGp w0&[k|,  c@St@jX tKC|G+QxCJchFCǥM@;ٚi3ڦ.C頴ʫҫŹvRwλ>~PK1pPK!*)res/drawable/mr_button_connected_dark.xmlJ`ںv֩t6d^Cdl ki1.Av"yဟN!M/ y&%#ڠlk ziN=ya8 aw^qr@g9~/Ϗ?AEI'۝4 `evWq%DWΣivs7<=77!)xZ)M`4ƶ0t S# ݂1c4v[0fƞ0t Ɯ, ݂h|nxn4[0F@* ݂1o4 C`,Pcht[0^H! ݂d4baFHH[0TchC`L8nHch C`saѸnhKahnxo4~ C`|0[0֍a7?PK5` PK!*.res/drawable/ic_play_circle_outline_black_48dp<RIFF4WEBPVP8L'// /CmSIRF !0Bo y"d@6FAmۦc)۶m+,8׈Ovۜtwnp ݁t1n;0Wja֖˗K1?>|UqJgj1(#@}+ =,GFsO]b`ƠrwNXmGZm`M!Z}:@ʫArėv4_P[0eåA=酫j CZr l%3j Z+*[$*1+$T]@Nv-(@뗘SvCr0n<$IEu,[͋ pC}&J<$ڑ*0rKzy1\]*>Đ_mh!1:r 4FTcM@ m ,si1=Ȏ{8c@cgj{$3։M*+]@m=by60Y *{'6n_rVv}%PKA<PK!*)res/drawable/ic_more_vert_24dp_on_dark_bg tssc``wu   J{Yi^mS[WsLis!^N+EgFPKs[hQNPK!*:res/drawable/common_google_signin_btn_icon_dark_normal.xmluPKN0WIU+ueDE#pVGjB#u5K.lՊ`ȱK| 'a{f̲;BkjycԳccAVjvsnֻW>R {iZ+ë$ѮQ:/cŹ :'W&h3W3Q}DՏ/F5"Ҥ^C^3cx#:fN߉dqwtggPK O8PK!*7res/drawable/common_google_signin_btn_text_disabled.xml1o0ǟ/KH u CU1$EMΑm+!J]ڲe![[TO/|t1zE{)!2`#pރL'H}NQdIөZZVH$o⸭jdilK_֢Ch*#5=RU-,*uա=,EW*?]we-?۶Qz^UjᵧDl`){^2~Kp nVAla1ߡy?DžX#/͉m5SlYtFdDK͜y;s2rW| z>WoӷG~h }n?,Gfr{dKx;=,{fc|=_f}GojlВ5rz[{wPK1PK!*-res/drawable/abc_list_selector_holo_light.xmlSJ@}& UV((=4'o^4~%VrOh.PKC*t Kp}0^zY7t۳tFwζ[ޒ84ZfłPK8ϛT(PK!*+res/drawable/abc_tab_indicator_material.xmluPN0/30tD: غ 7ԊbK YEY>?/s| ;ₜ rM>ө6gMo_fPUݮr `~Vu{|1&r\ˠSfo1~B]D 3ܤ7}U뷃z\Hx)G%g֨4\֜Jgԫ?zȠ O17FPKPK!*$res/drawable/mr_media_play_light.xmluj0Ed[SH)JSh ]t,Y#iKȧt迵ϭDI9<';bo?ē3ap]454sswMG*_E}+J[ eڴﺳNSRVPك-|D S- "Ìb%<%8{oA&yy=ȈIBFٿS|e/Q^Yc,B?!F蟝PK=PK!*%res/drawable/ic_photo_camera_grey.xmlR@ 6rQ]b$"RD ""e:,Nsk麼PˌYqH]}̷3'QhZ V qx׈  qh6$h\g[/l6\+e<ⶸp!y|ȅ O~ ߑ\d?%)jjJ-TRoU.㊣H%n*{[(nIxz-][r'2v9qNE?.s~RM%Svcs9 s!%sOp vq[0tȦpyyduċy7Z^uWɺO6 9N`p|'c0 pM.zgg Ӻ#܆zgҙ`;?^8#שhSZE8ԙ5]a) QE'4XEYWk3ςcvPK8TPK!* res/drawable/ic_devui_search.xmluRj@cI6,ha xtQ("dQB)+a{ptew~L О 8s33"b0 ̯h?K - گ/4ir|3:>\/U|rƗp8Ŵ,2هD'Xws? M][=e,b.l䋉*.k2E"\"V\BJ3QF?PC+V\xdV>b,ύQ2A8"ƍ_#Uؓ Gv1s:>F<6;R _8Tl\l+]D[ t~i|yY.hbV.d[k۶$c4:c.qg-гpb/ mν^wx3a~گsYͱ'N},pgl8D!,c{F!d9׀$- Vb)9M՗p5^V-PGsK}K{Q8V+`lziaOa413#OE>2Ȋ@qgDE$D@ W_hjv_Y綋 >b^a['fʑ_ʖ 5_4+Mq[Gj Iٻ"']Ⱦ+8r 9Ӑ ^BiPK\HPK!*1res/drawable/tile_view_icon_background_modern.xmluOA0"x_^<?7 (P|;u0%Lt !ZB2"|S1I>PKKtPK!* res/drawable/mr_group_expand.xml]N@Y(ҘHPAQQGV^b&m-ik|;7:NL,f&>|aֱX!+,7$ôם?gҤ.|nyFshlſF(/`8 b9|,=| hq"^ tߍ1XX`&7: }/L^>sʽ{6[jlάdzkz7EFGi!* 2q EƮ8g"4.!S̐Yd++f,253d}q EơҸe"Hi̐Yd+;f,2Jc EƉҘ2Cfq4!/;PKWjPK!*&res/drawable/$avd_hide_password__2.xml}J@glXxzPEzxQzf&6[G'R|nt?3 'A1 & +8' \  DQ[e V"YiSS(K51: [Bt#3E\iB<\eh(bʸ\̎45i6v~' 3+x?' !f ~mhØ 8 ;lmD0<`kjdɳ~s2گ\vdmx9gu\::::*7:Z|o6iNfX5 D,% 9xB(aI8A 6>$G"$)b?#!WzXvE-MaԥM;9ݬi}bU[d"U%8"S+;ۙO|VU';1&Hmd"^BY:S?ғDg1׻,Y + Qa0l2fɌvE{fΆH%C>s<'tbpv`gt'L@A:.w2ur9/yQg}D\h#=' oBai/|oFRh3}_4|TsCSety! c1ʇ`V לW|=zFiQygPKt#<0PK!*'res/drawable/mr_button_light_static.xmlQJ@DKJ^v4x#א$bF``vlis97碨:gs0ϝ[)e)kl v,ihdҔ$F~""!ɝ_=#Wߣöf~i& ,t?+(=ۮK\̷m}{9Mɍ3> 2bȯ/yOcPKH`PK!*1res/drawable/ic_play_circle_filled_white_24dp.xmlRMO@-*֮& TXlS6pOpxwl?i4i^w}ʠP p `|ۨ#'A!BD -5b|/x9"py-(,LX?a؏(]]\>39=#jw m%֫5hv͋3 G[L0Xe)+2e^%izYAR\2@w8~)2齕PK(64PK!*'res/drawable/mtrl_dialog_background.xmluJ@$M D+.p%Qhm'dƽҕ ;z;xܜ̹wrdžO 7U!,#}Ev.9 G\{@8H# vL[N'HGWn&ױ/g2EWRk9I& Pf(Sb}Wa5.C9"W6)gRrJNxBgB^y'˵C,2_*g{Z ӠkZsچѳWFO,}6 ೌ~ . }XֳVJ]}5cϝPKGPK!*+res/drawable/gm_filled_notifications_24.xmln@gc;vҦj%=p0RZ['v8 P)*qr H(\rA1xwc[";;;;kZDF4vKaSp)&曞Gx iV]E~,XT9Fuݯua}r}ϛS\e&Y%U:RF*T*䁫6*™ „+!"݆>㍌j/JhzRL%BvWbc+~MD5!Q0qT3vEOP !szOLfg/PK0८PPK!*+res/drawable/ic_mtrl_chip_checked_black.xmluMK@g$JK+*(kICzh ҂ 3}li :afߙdҝBhڌh!,g w>AGcIחɌl.hg]Z*$M/4+4Ǘh8ޑOGΉsF6B|>PB<ϊ,Qsn<(pl[D*4_D!9ޘI==P4TkS 3M@-Ļ4y"XgJchZs5MBiɞFOm@BśUyUxUUZw5~PKgn*/BXPK!*&res/drawable/ic_fast_rewind_white_36dp5RIFFWEBPVP8L/#5mI6\.mm/&)i LNL0+ugEKmN(46HZ?(T^HxfxP8!w@1{6χ 1 Ma@A"AG M&Cӕ6$ddSi\s!pJo2 ɈhdM$cJ-PKwPK!*%res/drawable/gm_filled_devices_24.xmluN0lj&8·CPwą=FiXG[ĩGނWAx¸8jUNqL  >hKX9BNoH\!o_;Je1h-$X}1" yg頜 y*ŏTzZ=d}1C|Ugw6L('$BaqqGy^0 pƸH2ʙEAF\M\wW^Wc}f3Me1v[H9?e&t ?+t'XˠT[USÊpJF~!%D(b!@`"h6z1PҕKߣ^g=u>,rCړ<_(hKW]Ǟتڬ#-h5ϺA}V|PK!t뀮PK!*(res/drawable/ic_drag_handle_grey600_24dp tsb``wu   ږ+aIg9yj`PKd42PK!*&res/drawable/mr_dialog_close_light.xmluAj0D[nBfB"چnzE ۀlz%-n%jL:a/ĚIJ؟s[!B1}cDc;:<O^7 ?/"\@ד8Nim FUy)>q;54ˮ,/4H$#T~0s?[kaAn5xx{b7ܷ^(,:'[anOyyhf{.cV(<-FeU Xfia֯kAggs,xm |DōS-\]Qv$ =c)@ N^a&@ƏpI/4vh!ZSzZ)Q=ٳ:5[31.M+r~G?zaTn{ѯ})oϘPK0itPK!*%res/drawable/notification_tile_bg.xmluA0E]qѥ+p= ףּ)ј?v*P@`g>Ĭ9kڱtC |sHsƷG{]Yָ<ˮզ:=bD+/XOFG,+\/y(S@r'KZ̘ޢ?_PK.0PK!*+res/drawable/abc_ic_search_api_material.xmluj@g-5MHzP!+eqoA-@ңJTI 'Xy>BOy_yi|3vF:p_9م x &{fpn,&׽۪7 }>:<\oU]M,.g:J2jT\ 1}%Ud"C**JDQ q&"QTҦUA`*; tOj6P`XĵBR=UbaDC󂱈qH1)ػ^/MM5R0\eq-MȼpQ,f͠0"ъyt 1|Θ8p|`y>@:@?z[M__8fa߫s<ֱ2u}o`? PK&&,PK!*5res/drawable/material_ic_menu_arrow_up_black_24dp.xmluMK@g&ml  "/"zv5 z,7<|Zꄇ}wfprBhZAE Uؠ: 5 Oɩj5PkɲHhCD?df_煵K8\D(!lj.亩Nʻ[{7^%>m(u@Me+zhx'*b!~wδdNNN3AE0ƁV6]a tAO3c"u-_ih>7JΚӄBVwhռ&s:s)/PKNPK!*3res/drawable/modern_toolbar_text_box_background.xmluJ@?+  6)6X)[XIpL[;2aq;!2 p'p!'"'g\ܐ{"H}U={lJaufr[xm{/En6iOCHɯ`wғiMKS:ɦ; (M$ l;W.^eX-!,dS]9*^F&K/d-PK/PK!*res/drawable/ic_cast_dark_onRIFFWEBPVP8L/7 omǹH~_ mܿ1lQrwE(;18(j)PNHM!͞Gec4"R+&va4bD=C1 ?$ JdӪkskORphxiށ@O걂D5[/p*7gʛK.5xx-PN8G  7H̩+D9.ZcU~_\oqq%`jw[?O]X;z=;qPK@>PK!*"res/drawable/modern_toolbar_shadow tsc``wu  QZgm!2f+r-n}׼s-PK86PK!*&res/drawable/mr_button_dark_static.xmlQJ@DKJ^v4x#א$bF``vlis97碨:gs0ϝ[)e)kl v,ihdҔ$F~""!ɝ_=#Wߣöf~i& ,t?+(=ۮK\̷m}{9Mɍ3> 2bȯ/yOcPK-`PK!*)res/drawable/gm_filled_location_on_24.xmluRn0c&E,awA{S` PK!*:res/drawable/cast_ic_expanded_controller_skip_previous.xmlPn0BBBUJ ^~CnLXAh~>Z \t: H2w ` O19gig>FM)V3BoYVLm_Nôlj+9ϗȚ)]bO}/x;#ëwGExkxɂGo*눵bI0GW(nȈ4+/ d\4PK"I4PK!*Ares/drawable/btn_checkbox_checked_to_unchecked_mtrl_animation.xmlN0OL1L5v@:('pO^2%6dL6'8>g9nW>tI"I$Az#}\WZbSIPe-t(Pyה9pIfE%-]ZA㬐6m.Fo,nI^-I\eMvtOFJYRXU<-(AcAgu;c1cCŬ0鷤y}wX}Y}C>2si8;Yiȸ817Fh1Yd?o PK .PK!*)res/drawable/gm_filled_location_on_20.xmluRMo0o݄Ҫ8pRz|Z8!Q6mXTqX ?ŁωVef7 )3=_1 8ρx Wk߀iZtZW͗Ze6+YMSnڭ''cfX8zٮ-Bݿ, /p#yE<)}A롖qЃ? PKa 8PK!*%res/drawable/gm_filled_devices_20.xmln0ƏeNldСd(1)rݩux.UѭBȰ Աѡoӗ軴m 6t)xGeM "F#Q=࿣x^v1G|oxPn˼"c1WzJ}f>v:bR.2U6U))5K/̼E;H[Qպ%W8dՑ"MȍX/ǎNC]'#?׉74"`*$™MNjbj(G71 ؐeUYJ*:}?+t5X \L t_0ރ3& v}<%vA ]Smk6&~f:8ZG>[hshc'fZk{Q8WS?kXu q.M??PKm`PK!*0res/drawable/color_picker_advanced_select_handle"RIFFWEBPVP8L/.@6mUY.D sFHs҃V6mUY[-2QضUe-µjhB3'%y`ڎПG B@5d(@\hg@Q$JSAim @̶ őg]<i#JeLRݙ2jpxOZ.X04%@7rȲ ]r<|k;šϲ 0_W?b8 I>HOv9pZݾ^QOz,ڦ~ -mxa 0)cf,0얤; ZcYBݬ+PK PK!*res/drawable/mtrl_ic_error.xmluMK@g&E@,*8[# {pL \n ɦXeB}s^ə$SʅA|58FT(Iq=V /2MRY-ZkCR'D|&`6IuvxY]:ҧKjNKQOiUtf81 yH}5fbk&6>|-߂4*ӧys͛VfJ.ffu̢ 9ژ!VVO73oYbjP@w~%?X&9~0}7мkiYoPKPK!*+res/drawable/gm_filled_content_paste_24.xmluRj@$jC9B%ZT܊[!BKBV#Q2@N>z_ҾWĘv̼ٙYt1zMK 5=p o |"^wp]]/4UYU<銎7ulVKktd|̛ \Writ#30r,p).@* dm& >\Mұ ?Ȥ"qG0BFt6(IT47"DBuh4mPJiqMiZU(S=`/fEj4ZUyEs?ʗGr=]tmޔFh0K c3蹌9 xv9B@=ެ#y VڸorS8t~7{:m^s;>3\߾SpYA/PKHn$PK!*0res/drawable/material_ic_calendar_black_24dp.xmluJ@gѦ衇xMZA!E<4jBS'[mJK fg&-"FM*:UHpn'oZMٳ亣mlY:*~=on7F)~> +bcd:6@D RF'D#I[gR'mه¥IAI:8Iɻ4|B3 96@)3z=~ GJ< J_aJ5py㘵m4X6aG`9. EooXtǩWyCЬFW4334Qʹf:{MY6ޮZe;ߋ~PKr~PK!*1res/drawable/abc_ratingbar_indicator_material.xmlcf`a```da0Pd(0 WNbejnNfq (?Ej$PKUL\D|PK!**res/drawable/mtrl_popupmenu_background.xmluN@g(Tc| shzct\i9TX&?dzsX^wU?K~6Լ{4sf n,KSM?P,m@2v'PKKBDPK!*'res/drawable/abc_btn_check_material.xmluP1N1=HDФ 訐(9.:[$~c ;޵WASo50%/+| 'lp[@릷/iPUMrO[k*%Vuߚy3r\B\z@]D S\|B~U,qk@QO3OǖS)>1Þ(&jI}`>jID=UIZ$ՠ#' g6r'PKDPK!*#res/drawable/ic_ar_core_install.xmluRN@۱S ,-3uaR$*U"ԕ Qʇ $NcEt{}ܱEczbDZ෴Y-8$p |~.bKh6UQ1jE,'T-ݵ l~QSIT׏xdb4+umcl1` 1  OGްuM7k]W9hFCѬ-Lz~zZO,c ykٛ}/V=ZZsb;PK3O4PK!* res/drawable/omnibox_https_valid`RIFFXWEBPVP8LL/PܶNPԶנk %RkA&T M@6똘Z,ʬ"u PK Be`PK!*'res/drawable/gm_filled_cardboard_24.xmlSMo@Ħꡇ8T9:uln HHG "JC@7Nxk(kٷofg?lMw'n8Ng@ ^~~?Ӭ|Q|kb^tx)7r]oGGx c\&\m:)&L^8H^c&|Op+="Kw%7\4d P$|.!FuCWp?VeP6"zB-ce(RCNԽEgV=ree60Mlқ4M *l;FIni0H벘y^׫Q勫zg(]}ը \fոl:ý?e>=10 vܼ<-f:@^',mu\gN$;b:_5M/gqKVW#]Go!P)p~.c PK RPK!*'res/drawable/ic_drive_document_24dp.xmluJ@ҦB q+LPBqhՔv>酢|3LgbC`DM v܂&%ZO"~*2OFX֭b}3ol4crQX4~EwzxΔ$җxW/ArJWQ6a;5 qu}-Jx/.}#SR(1jyVxձh;" T<ap_gpw$IWGkDKo˪Y筲"+$DVͽt[+&3}c6?e}nɘ; GLa}k;#9$D r? hLUH 3m2}N `p  (JwJf4o H( ⇆ Ne9iE4|KQT72!Ttx8Ӻ*5W8uʛT*aXꢦ8]!UHvX$Fp,2y]  U`@g(O|YŸ4AШ̡c"U?q`&<갪'1C5]S$Zdiܟr{#ƳY'^ں}BPKCC@PK!*)res/drawable/ic_volume_off_white_24dp.xmluRˎ0MA3b,v$+Y aQvC,VmJ]14)*pt87v@"= gm9x(%/ @|SN˚ۛ.z:,nyyާiU̫D"yf$aTE̥HSLZ(Ǖ܈XPRX"c `Lv818gv~Rd 5OL%O70iLӈc 9,)ϠRP"sȞ%2ZTnGIj3Rjz̮9t3lHdC74CQ8H!}5)tO-z߸ULU^+lGR13tD ߛ-v|:&e]/^hD1ŗrzRԸo4" o# ) h>&W81X#>x)yQ3mz?֑C+g9f:wPvvנ+dO⏌_ 1%_yPK,͡PK!*res/drawable/ic_business_smallHRIFF@WEBPVP8L3/#~I3WF_/PKUMHPK!*/res/drawable/mtrl_popupmenu_background_dark.xmluN@g(Tc| shzct\i9TX&?dzsX^wU?K~6Լ{4sf n,KSM?P,m@2v'PKKBDPK!*%res/drawable/mr_dialog_close_dark.xmluN 0}g* 蠢ԡqG7w [[?R,/<{$6x#g;|1aG)en]_*8ַ6e$)oJ0viXYS+^5N(*3|c )~h5sq0`!~ɯGs] 4"hׄ$K{ҟPKH1TPK!*'res/drawable/abc_btn_radio_material.xmluPN1=HQ BqC*:*d,%J.-I'Sk4x^OWxpn)9#L|=+Wo\޾CU]w*1eJ,5v1f0:ۺ:t=^EȻ@" " Ym/hãAG g $*p.炬+R/`0P=_OPK(qlPK!*.res/drawable/cast_ic_notification_rewind30.xmluNK 0}H.\(xRxZ$6$97 (ox̛&pFCk=>̖yb R1u!mtݜs$H %0ߋ`tnn1ڒZd:9QZς d~g $6ɶmUXc++Ǯ3~͘lb ǭY?e׾-mvTjύfhfwwFml\9UZZ{23"ؽWf ӯYkY;쉽gPK68PK!*res/drawable/ic_business.xmluJ@gMEC<5jlA=(Gn.)x Kll,:ᛝXҞE$h>*C|E C.$3a- Aժq@+Z[˒x:J^}2^tL;tDlA;; ( aɁ ᲦT2$`τ]@mtXA 1 ψ]cZkf'ה7Uoa.tAPTEσq h_i=:I_O$q<ͷƭ΄K;x!T r @ a5.T%ζx m ״CF`qZbfHXY7kVJkڋyw쐙c2Ze-8PKu\%6$PK!*-res/drawable/$async_image_view_waiting__0.xmlN0BRZ !uE€. t4. $qHl@' {8ND@ꓭ#Z"bF{h2*X` 07VP+mU,pSd,:MRyBU6yJl}?:AD{ %"1&\_?DƪȌmOC<'O,yTqO3.VVg*c{,Y'gzHG?oSvPKDžKPK!*!res/drawable/ic_data_viz_grey.xmluN@g-&8x#$Pjԃ&x4cVlSHy|3g&F & CZ!8;_RI,9"z}&<+òn4zZyOx|\7 UH]:0x;@v˲uTWTq1u:RL&g&zQ6/_.B$Rp`Zយ%m w{?*FXՆc>>a5CpsְJk=Gz3ֆXUXk9+r[k_Ve_=PKNT=LPK!* res/drawable/ic_vpn_key_grey.xmluj@X-uH!,JJ@cK]4g. ^BV&v$$ЬhyWj%t9ϹHgdK ^?~us (;Vv,9rQ4lMvj5VYAUzW1eUdW.uM_yB+14y 8RDRc̔fz gr Hh*cͥ~q M )+9Fr}O{ 5.k۵G"jrSC+cU) %*8" L7[tE-tvVUf8,iKQyհHalfZ&Wޖw1 l,`tK1bt8\?2w-Ձn3'x֜D;i א~wPњA=}S˭ߞ׎{Z?i=K? PKXWDPK!*,res/drawable/mr_vol_type_audiotrack_dark.xmluP= 0}g* 蠢ԡqG7w@l-WQb)w>ęOcxydRV0C}Km̹TdM qRJWeM:sΔ<1I\e )~h5s`ԒmOopס9.z=y|lk-NsPKTPK!* res/drawable/mr_button_light.xmlQN0|/IILC#1!3 &ԪMSŖX c ċN/wVRBae.1p `8TZhy#n# ~Rk#:$)jqlűu*h>_j;2[)n,nRe9VZRr#s]8#'4? <13/LG7=ӎ܂'zBX6{M~vZ l~~ۛN^?^=^・?tg=tyN]o{ǽPK}ߗ PK!*4res/drawable/$ic_check_googblue_24dp_animated__1.xml}J@IIq\!h!W\ _`MufO^'qN!L>gccY0b^$)VZ7HqV+q__kFj#{J"0)KLs4ۢJsߘZl߄˭lu㱾[4N[d:oJD1 hmcs䷏|w]~"gߛњ5GޅLݘ.~o;n៾PKC/ PK!*&res/drawable/$avd_show_password__0.xml}@`b"-i)`W5-4-H[Р Lb+NoN8_%KAl*rlR 2q.RT(j,"/J A õ*މY8J$D*d5-l<:9x)d@ex!iw7UJލ$94'2o\ĥXǍ']l!NU y9=fF0ƞg>au?["D;otul{?n}T?j< rN6hNaZ㖦=B2nS`36qBب^s6yOkVs&vhovK&c{9͜!ڰ/CSK{<˔l;KYCu'MFE^VeݼVɤۿhGyQEYVɞFhIQeNN<!x:R~D;;TV2AFĕ/98M2O0Dc8q^EJYT XY=@T:]]iʡxuv.j94n0-\u^11lM7 ؀ެrmswc^%XkЌ^CR3|myS{ksPgf/V< _;~k|G:o;wKۺwSm<24;oPKS4Y@PK!*+res/drawable/photo_picker_seekbar_thumb.xmluJ0_*#Lp+ҖI 9ܻ%|_COK”2qIͽ#8ĠKrMny!ken֦G6Uo)ښ[Ab_u\ovw[Uiwh7C$qP-eK ("|b3HSQC s.3y,/pQ&3-kN'z~xRzs_<07PKfPK!*!res/drawable/gm_filled_usb_24.xmluRMo@Ħi8Ty7H9qZM(^'z'pgpZ"X쾝7a ,7i8^c!Ng9-="+O/mFp(T8ZI8>nv['=?9.TzSuornNLMhcɓL<]"kyYGa2yFQqQ>}c`sPB^~n%R\Al>ʤnv㝪Mɔ*Nʕɤ &D=)VBLh߬wu dΛ,E}=ɷW]Ldۦ#{iBg.=g}D|F l,pN?\b=7htϽiy8ci::{u8:vCFмk,Ῥ3s6PK2TPK!*$res/drawable/ic_warning_red_16dp.xmlMo@gϐ&*(VIl'Pp'h+1تjՊC~GI y3̎׎A.mD6 z@z@Q' ' _W ^(Kd*cj6ϓ" yrZ?R IҬ C eH\YJ(P(u~sG5:Ao#v66݇;=n{]?Ce`A`ϖ2* ex$ ?O,N,e8' 3^4Y L! ` 8 XBhc&AK:6u\ZzKd!F+BCkFE=urzO<y\zV^Ckh;s֜;Z -E=g(۞tkٷZߨ݊| PKOhPK!*/res/drawable/abc_seekbar_tick_mark_material.xmluJ0_*nFTPpvJW>[AwL34޽o%-$F$p_aA?"\GL$LlM4}kް;S5{iwRk٦zmڕn6}]tb5C;gapt {nN`3Wo.5:jH3yI:?pNsbmwu^>^?sPKvk̨PK!*+res/drawable/gm_filled_notifications_20.xmlAo0ǟMuAM7N۠^PAIH"nDi R5Q&đ۾|0 $jUG?hdg3zdDCjwo=p oy]/ے4ɾ%]*S,n~vc%[:ߒin2}f³4Է=Kv<>Sb} SQ\ ,e{3rd!f2ɥpU^}}h#&Bۯ <[=CX Yh`D'p %<AP)t.}QʪnJHq^ Q$Sɽ$ߏKRT,.$&ם&*30LE5+&Q 1$4*ILѱs+1;g 6m/=c-|]Xou-^GZ:12^gnsWͰ{;;fyzn49pf2MGtx6ah{g[.PK0xIePK!*+res/drawable/mr_button_connecting_light.xml_K`غAq6tQJ-"@lSZƐ!!""""cޖ;N!I'LnNBr_1l)z9\*@}uc>c*Xn:8i!RzDbu, `Z р=0X"U_Byq"D>Ed!jRЯ&xO$@^yӟ@x3"zVq))s\T=D#";dR\ד 9ǐA  d|ܚG,lfn+ސ 58c>}ROI)̔3 )$hFڔPKAPK!*res/drawable/ic_flag.xmluMK@gVC ZHA衂=ZOn05!]Rѳ7Κ.NxwwݝȠç@leQGSEΑkyCޑ/4FO9lQJ[z\8L$]OF@= ^zc{ja48Ǧc~ ڏåOM!5 ׊~V ^Y͡ۥgp,{Fo, }pim+ >,g Jt0p%#B(9ckC/{(GG)BaNP?.&W4.xlNk*R+re>廪"xzZYOUJ6}"PKarPK!**res/drawable/ic_offline_pin_blue_white.xmlRN@?`DS3& $H,QUvVbjG. >% 7pglc7j֙ǹ33xpo /!Al"  ;bt,DndRsMT kk7Yr;ٯWoE`sM|fJ*y$A.X1Kdp qcH Ä6mE ɣt$C&#:|t()2!25n?#eGM.{zkg^(lq"*d v BB_Oy6Tٱ/ir/xʏgy`֭$c}P !?- a# AwB^5xmqxP9d_VaөNk7Pjv~pNyV,=[֪4C㡡nCcӪw~PKqPK!*%res/drawable/ic_play_arrow_white_24dptRIFFlWEBPVP8L`/5mFjy>G(mA )hA Z(ܶmn .JT*H%SOE$0b F*U|.PKxBytPK!*0res/drawable/cast_ic_notification_disconnect.xmluNK 0}H.\(x"VZ$6$97 (ox̛&pDAk'| -"Ec<@ۜ )p1&i6w76MY'ilN"s0_ *wJK/(oRӀ6g:GPKcoPK!*!res/drawable/ic_delete_white_24dp tssa``wu  1 ;v}fX|ge4f?G TFl& ?Ԏڬ|[PK;f'OLPK!*-res/drawable/material_ic_clear_black_24dp.xmluQMK@n (=$F[%^DTPF,BijGf7m-u#oaf)] ЂwP*tDD"< H C_ P.ArдY4!j(%qs^oRyFx`k`Oa ]z֩q]rġ'k.ey%%s==YPR*({]'4n'玓`g*xI)Čyp)Ӡq>1}R (1B(!4w/*<_E`SoWϙ 4w GW?.6ZOsKOG5:R \\P5fOb~Ͼ~PKb|LxPK!*5res/drawable/cast_ic_expanded_controller_rewind30.xmlPn0BBB07t֩rK k?]ŠE/*S|x@+\1dNs+9Xy7{3Z}gWmX;<+e˵]eJ5VEso5;S'}hG83 ,{ʭ?7Ne/o6[($ycBu䦥.*t PKUnyYVPK!*res/drawable/star_green%RIFFWEBPVP8L/u m&m^*me׾/KAK2n6Pߦۻ[aT۶ [i!0 dtq P cJg;>m=HZ{D'F7ߣݧH'ocEJ8RF64{&X0I_.EGZ3O ЅF% *)]PKPK!*#res/drawable/settings_bluetooth.xmlu0iV=^WR=lحZ%+G+웵PP3ߞcGEaD13:A>/ q-_A8R+"XWh׷ǃ,?We![gZd:C< :nsDr3dC5u"l""c#hb.vB C%iF)cNyrcK)ҔiedwFޭz ِI=drؑfXz h6ĢZɷ~{ضM:_hte<7=ٌY vIW0tэ-vu3Z'?Ÿ>:Lʹ{dYi5pg~&_>m vjPKgG8PK!*2res/drawable/cast_ic_mini_controller_skip_prev.xmluN 0m$C"UZ$6$HQgvw) lP Hf<0HA){2:gon9\InM} 7d)I۲@-7ʝ~ Jc4ٷџ;oPKM:w֒PK!*,res/drawable/cast_ic_notification_rewind.xmluNK 0}H.\(xRxZ$6$97 (ox̛&pFCk=>̖yb R1u!mtݜs' 6-@Mq>ԘD̊m&vZhf؛UY̛EFx`n(bpCoN;ucPK'PK!*'res/drawable/top_round_foreground.9.png sb``p  @,$rn$ s F   =$Wҭ ?p$5*H/tq 8^C-Mb*(fє :/y#V5hZ)}YDM\10(H90TYFMZ:`g{٫!>c׺ 2~O֏mVK_X,tij|R}ׂEM}Уƈinͳ+<) PKRAyUPK!*;res/drawable/common_google_signin_btn_text_dark_focused.xmluN0*D7P%Ɗƴ $jRAB`d2ry6Wa(QX苝8Z\ӝHHǏAY{0̾}aljxOGAíMLjLj k ~!~#L.eY} XUl$Uy7ͻn|t4_ZfހmF>ϛno_1N' -\ .,~&C>" y屫*2.H))/h"܄o7틊 )nHc0v e֥S&Y"|шRzpS4}w*+c|֕_);)~Wb,VK_;$\nj ggiO`["RE}OCi{mˢ{BLl8E12 1&B9>5fw#0>o^YDYLqtZ{ZhGu;(n ^ {%9PKVPK!*$res/drawable/mr_media_stop_light.xmluj0Ed[SH)JSh ]u*Y#iKȧt迵ϭDI9<';bo?ē3ap]454sswMG*_E}+J[ eڴﺳNSRVPك-|D S- "Ìb%<%8{oA&yy=ȈIBFٿS|e/Q^Yc,B?!F蟝PKx QPK!*'res/drawable/abc_ratingbar_material.xmlcf`a```da0Pd(0 WNbejnNfq (?Ej$PKUL\D|PK!*&res/drawable/gm_filled_videocam_24.xmlu=O0ω&- UhBZ6T%j(JM*11/uDU{sgdқFhn~[4@>8|oPrqJthYd2&YN9Drwݰwy0ڎ-m'h9p [} RʸR@`wbIh^Ꙫqg:DFI\e^4xq" ^Imf1v XVuD3a-A]ecPwc)i_ K`MʞHj|MyP[ɣV0~:^*@ӥYjPSPK`PK!*4res/drawable/common_google_signin_btn_icon_light.xmlQAJ1}2 t… W wt&NDz A<=yy@"78Ԙqb\319o[vՃl7fY7 )ͦt~{V5n/fUj׽uz emBήmO0a24S%aeuNa_3.QS#+t|,E|\kx =H sR7r'PKEPK!*3res/drawable/ic_pause_circle_outline_white_24dp.xmlN@?q( *Ȣv1aQ T*"@G(H4;%-xzL+jcg"~XD##&3h-{~w2o"ǹGJ,&T]>绻|,lqSITt}}*"8 DT:?o_tĻ0z.Ѽwh̋wGҠ PO He 2ڼ~7 5hZ#:8JMðʬHLòpUضuq lPZ081v6cQ.xy7+Auk/5ְ׉֬ M{ne<5O{&fek]+x<<\<6emt;^PKPK!*,res/drawable/abc_list_selector_holo_dark.xmlSN0}nBJ*( ԡ6&f$Q+ڦJ"+?ſ3e*E!|@`VQ0&O%qE<DQX,y(dVkzGi6 ŷȐ}䐅 9rQxo;A! h3F|VD=+-{1͹߰8AɩSnb,& í5foig ]grL/~o^n{ E[n}ݿ~g[׭ojg^UkkZn-{b PKjnT(PK!* res/drawable/infobar_downloading tss```wu  1 mUW0nAvs_,Rզ?33PKOdKKHPK!*"res/drawable/ic_refresh_white_36dpRIFFWEBPVP8L/#㶑iOkj~#V۶ݝ (]kJwf` b+x*Y]+7yzX,\mm72FÒ nXlĵ0BGLؒ#SQ0L pw ~2-tLc;(p|5T[U@nn7  2[r^@`.-{ 'KNI )/~2d*J̤+ia,xE;#KYµ{\KeIPK!PK!*/res/drawable/cast_ic_notification_skip_prev.xmluN 0m$C"UZ$6$n Ee٧&pDAk'| -"E}<@뜽 )p1&i6w76LY'ilN"s0_ *wJK/(oRӀz4g:GPK@ƻPK!*)res/drawable/tile_view_highlight_mask.xmluPj0c$rh!9fht-_қj򐑒{B>ю\vwv5^0D=@<e5]\كusgC)sլ*N(|U'5^{] ?D䓸%ߌ4D$F|G^Y]O7 M(8T-F_22Qto?PKPK!*3res/drawable/btn_radio_on_to_off_mtrl_animation.xmlAN@t( lj*ƨkIJ5]Wށ00d3^;x)!5#_?}M]EӾ0;ZoEQʦtCA *lUʬ6x/6-^Xֶ$Rղ[eDωQ]KE"k t7i+mIo)ŎLP91N}/ w<\8E}.AGs <1ǃsu evkGx!xVquyLxc->ʾϘOPK,α*PK!*res/drawable/omnibox_infoWRIFFWEBPVP8L/`ж$="Es @N > Td{F6J ;QAdeîeqA̹܎)wC3CCXA@D& (2g8h`.@C >>~0PK@ŗPK!*#res/drawable/ic_check_googblue_24dphRIFF`WEBPVP8LT/ ő$%{mC+@w /iۤOYwN7,^_W?-Q#KV'PKXmhPK!*4res/drawable/cast_mini_controller_gradient_light.xmluPj0- :tСPѵtD"6Ml# BHKyԿj@x a"}aq ^7xOͬS=uPQ:BvՔksVk*x6FUn-sv]띲YT4Vp1o;GRFG k8$I' џ0GZY, ׿6yO{&'3PK >fPK!*res/drawable/ic_clear_text.xmluMO@g(Pm4k"փCMڣEҢii=_, :wAo !<]( 1l@cE.D s %dhBhQJv\Dao -A'owI "F.@&\Pw>A&EHe<"YuYAy*MҜ8B)CR3ݱNqq۾W?+?,`z=|ics \˝{=9y"bt.- cIMs18G5H{|g ''b"Q#!'^0^\> 6(BǦ:{unb°GdJlxaSY<ϡmyniOIFķ4olFc>9lX9SZPK1PK!*7res/drawable/cast_expanded_controller_seekbar_track.xmlN0ƍ@t[Y* 1 Lnb) Hk&<֦Hߗ$@8)lp}D뜵`֚ղ* eѩg5Ub(WX=]˅e9 ,R7OFM6Ya5k˺Dx#9;}@3&7Gh/Fy1Ϸ05wQf( v_n'P/&smO>GdppNձ^.9G?2^. PKr+ PK!**res/drawable/abc_switch_thumb_material.xmluPN1=HQ Ф 7PQ!sg)QrlπO` >aXwǻ*h| 1%yM>d ^zh>o[7X,V!/SbYw7,,ա*DE2'QPY0>Gܟs {i)H44Q8Xuřqzvd=zw3oPKMPK!*.res/drawable/fast_forward_message_gradient.xmlun0E#q!:TĀŊ%HTH"Kn"~F\ $ukeDLs%W;3~WԮph2nSkCY-Pn)g)MȖrX5k)e!i>!lpٵf>' O<8;bt9ˈC& _[N纱q`aƳgN}gp_~r PKPK!*&res/drawable/$avd_hide_password__1.xml}N0IiJB*CP BYLc)&\ 1x x< :j}:9.t1ڡ6# g4u >8\{ @Z7RM*s ;>-3r<LZLy&V\<2IQQ4&"㞝 e6bU5F M?O3۬&9=0vq>c;}Oh !ud8OGn9F! fQ9W*^fb]mZ Xٵ=/8˲PKGi<PPK!*7res/drawable/material_ic_menu_arrow_down_black_24dp.xmluOK@g&ml)!`CcA&OBx+xx7ӷɆj~ۙ}{uQL eؠ<%5O IHz/"˚CQ5ydط,l4<'9N*Ut!$U²n#_bH-,FJ'Ap"9 I QyP p``NNN1@M0ƁN1Mh`mtKױ| 03mc."ywƗڿδ&VsS]Y˻vuzYS98|e.?PKڶOPK!*0res/drawable/floating_popup_background_light.xmluj@gǤqt&Iҝ%L,S<{,aϑS$coGV2 x;<J>ȞıuWh,否-9<ƶu7\QWvɶ0ݧSmLv kɅ@VPKȕ;Dk>C|ėG${}Cr?[yphﰗnPK 6PK!*res/drawable/btn_info)RIFFWEBPVP8L/U8j$ɑߘJDNc%&Ql[mfÎQP]TҮ"m=_a_4DJAKtb1R0M/.41n"tmnЋy6]@;ml)@4^M4!PIA .pڗ.'q?}^{]o{G1PK=8PK!*)res/drawable/abc_star_half_black_48dp.xmluMK@g&jKZl= (1Sҥ?̓Lߵ[ZNxwf3;&9tg1:#&m2c |OP$qHy: j4y)or=\Cey8E$HF$u <x0 7࢝uxyvxAEy\阚D$DS|Oxx/-KgH7 cc& 5@7 \ӕm!gtW96;YhXiu4sCS=Chk=]Xi0ySySϵ/sc\{PKy5dJXPK!*:res/drawable/common_google_signin_btn_text_dark_normal.xmlP1N0=  .Nb8 t6QHFfHp3_\c`1Ng F08ɸ-hm$)zVy!e+ci7DժrvʲXZ+X:SCfu .)5ҴR[m+:p!2/OC%GӀ+}5E& 2s?yb̛W[o}ѷ9 fff t61߰'c?PK86 HPK!*4res/drawable/cast_ic_mini_controller_pause_large.xmluNK 0}H.\(x"VML+-R7̖y` R1e utݔs4zѻ&ɬS4e'Z9n/;%gxF7Q}i@ o?wPK PK!*+res/drawable/abc_btn_default_mtrl_shape.xmlu;O0IҤ & VؘBb3";ABHuio :.5= xLYqv_uu.ei-JZsZGP=֓l|3|sZ˾ފ/ͨǦKV+\{ihk=25mYi֌J)XKg(݃?PK@y*PK!*.res/drawable/abc_item_background_holo_dark.xmlN0dTEb``а ee $Fh(1Blb5x(vče*.;l٥\"C$ª1&t+(e"}>"[<ʇaV%O*GA̳f4N,/N'"OQE'Cͱ.9b&RYT! 01C+3-W6U#xMxm+^2뜎:cܾk3,̲kܽ {np_~u֜d bt0`8~>z-PKkBPK!*&res/drawable/$avd_show_password__2.xml}J@glmhxzPEzxXDlno}oBHIOZY>ev|t1`@~ECp)0 @eUsi!!6ۏrTs :/.O72WRuY$Fg y/fb w8|ZsݮW3;.ӱ&˧ҦEY`Dcf~}:@m|!vo z*qZniUC=XxEu?sRͷ=1PKX*,PK!*res/drawable/face.xmlSn@ZT8,J^怄¡ zBq#V+D߃axq~Mofvg5vȣ_gC%.i9`<F[+'/eMt\trr=,cnt6-fy2yU&QI\Z 3}l,rCYTS9UPXiGCD*bf&QmIÛ6(0CgR(ZY;e3MҪk)Ve5~d'ՉLUJ!.!QRBW"i"awUlml \`~?6^-c(z"JU,A&U=<IQc(Hb>!>Wp.@1~c{@~n;^+76[go8;.rڜ^ }r%PKHQPK!*;res/drawable/common_google_signin_btn_icon_light_normal.xmluPKN0WIU+ueDE#pVGjB#u5H^VF~ۓ4 ,Y|"JE= bCS O,gW9;bN;FۄLeZ-Xj-$ 6_(-zv15^?ߚϿlkro=5| 3mء7lڝ[\EU9Q'Ur 2rc5ZXcaTE%])ج*h5QR43-EEu.D, 9"UbfQRGP_2F.T8aOŧ5SyJjMcIV5Q4S }MXeH7xET]DMa˫7cƑdQDQu9AAe "gMR$**˺FOo0݅lpk5K羫7-R\XczMJ=@{So97X6Xﹽ|^vo]&njt٭Fy:ugxZ: f3䓵=xxL:I/]ӃI7+ɺB>Ln0cޥ?PKnBd PK!*+res/drawable/abc_ic_menu_cut_mtrl_alpha.xmlS=o@=۹;D(RU3]  Y>-dtHt"~=;>b;vͬ=`:'s0n01E#c&f,zGX?c1ali/ c>zGϱVW:wN;LJMV~ooX7nl<:LN&'gf}`zt`z`67go?L>чAP6Ҧ 9goslضēfg۲XHUC(,bۘMlGva& D% @!fs l&EY98HCfST"eA@粛&;{lGa6a5;;S$e9De-DgFH?&nqHV,d!謨\Dl|~8b׌'ǵz $ !DNz@!AP2I6DL(9HsJ3Y]"rg>:|9)fıc#!d r"K: gQt`w$8q9X*3 S"KZT'y)TM'[r#oC@$@5Bs1PrDAHY61X` H/RBaa,%L8om F} \IB1NsrF$ Z +k@ӲQtyM8fj'҂vU@h[2KQА$ׄ *A12 Y@!{GR+(&mp ] HX(ڡ̜y>ySBY9klX*aSEx인~{%%-%ݮטKB# AkYq \RK';52e B%3q╋W]@K4H.9EYDCҤS`^gA7\΅iћծi2F1BI2fu3u@h$({h$2vH2 )K`H܃_QYUi&FB.80zyt YzӜv>` u8rBqAQ"JK?E+):GFAt-s;~"-hHwY@~3Iah63;wrlFr:Y"y\{챹\YeGd= E, [Dfm \d\?rJZZ_QҾA^*Bs IAY>LM.1kсM -3{KE".L { p I/riJ%rQC-4P4&w=rQ!4\=R#H.g 4C:] #3'܁9^PedR@ $d_f375zm١`3"e32`~xvrooԼtz'OnC;>y{pݳ'e}+;)FG%d4umy4ZZZzXf6b}7kOr|{-ܽ{3^nUh(NLliNۻjdu6 lϽv*[置Wuz]O_]ԥ^׷O.A녁矡kyvnFE^ג_p״Xh?~Z_7.>>UfƢ`ɥƢF{+띍zt?/mlw66u~勜yii;9PKjePK!*$res/drawable/color_picker_border.xmlu1o0Gea`ԑUOĈPD (ԭwtؽGrѧwW+Vѧ䙼5ِ }V̶Hʜ95GSA#>bQuMإX椓p_ƚ#Qdr%ƌmE\ d#`WOo"1>^{g~|F/lwF66z_^/A7/VK)`l,Rh4fY2/Jx,,ϯXױa8eaABBͨ9vNr/Ljv,ٗqHnSU; QX^^_UJ(]w:JI<*AGčgJ0pY2x^h!:b &N}[Х?Cݹ$Fд?.oigFO[6z}djDj|e^^WsmKߚw5~PKhUiPK!*%res/drawable/ic_play_arrow_white_36dpkRIFFWEBPVP8L/#58n$I:[:hA Rl-H!Ը 0 '*PKLh56L:LAOP@ N%%F`"PKU3PK!**res/drawable/ic_info_outline_grey_24dp.xmluRN@ <+.Ń&p2xl`IG/#8t-ۙffgf*wp =TgKC\#c]DQ*0zt}MjuEl_Y+VG; s/|ZdPQ&"/0}!3*K,eF|-lgnM),=M7@e1H8G!2; -Z9g)v 03Id-ИMrHQSS)x1Kv0T:#%f้jH Iϖ  avQSj Sax ,T8Í"'97lt~RŸnpLHm1E'dz((^;h8a/3+7F)iKR*2E9CwBJP2OU^yC>]S` =;vLg\8YP6m;--lڟ@iR%MU}]hXs"Y[I34/ m,w%jbouod_uJPKW9YTPK!*(res/drawable/abc_ic_ab_back_material.xmluJ@g_RC^A)ibjE=ЂEzAG7RixqZIr O00.\RݫmZ-:2kp]n6Zlj5dAW$yl (Ps>>IĒV?ގ.VUQN6U=1c|+eT +~`9<@^҅1ħesR>I'הjД!ԅ{[hڊ&j{Ok+2K~kv&EFԡ5HZ  p ;_VK1d4 54^y)~׭j=m!Ͳ>"M46 w0u<_{^6ftD]={y4]c>>]o\UXXX50ƞ xo|b!m/u -e3x ՞Oߡy-mhIܵYyAG^w~O; -}}2^;rWy.Foi!VoPK^ثZgPK!*,res/drawable/mr_cast_route_seekbar_track.xmlRKJ@| :x/ bҐ0ť7НY(VxTx] na  Hx"–XUmB2k9\Ԣ ȞNPuz]JޤiD'hҬݤISI@ ꪗ Nl8b4 > ;7KW1Uτ|8 t *t/C[t{FtK^]ulIa0p*;zo ojv9 tv{Gex{6{ɱޟyg]PK(x@PK!*&res/drawable/infobar_translate_compact)RIFFWEBPVP8L/'7mW>ODLF9wrEd[UgBdȶ6T@j!';lc۶ 3(AQ p_f|R5*)) @Hj)XT ERY@$% !ARPj)]02|| BmMϦe(}EebTi9ɭݾgz%Tޭ:Xֳ`G!?IH zRK̻] i9-YY.?f[&D^)@PT՟QËi8] 27px G]{kx33S6ٚd:~g9Y/ml-8aaI5/,MK,d8BTW p2%}hٛ.2+.=TPV ޿[=f234S ;+`t&V(4\/PKs PK!*1res/drawable/abc_ic_menu_selectall_mtrl_alpha.xmluRM@LF=(ץ3IwȆxD+EcD38kLž?gRݯUuMD{!!.h3xh%C= L&eR6WUSQ.U|>7զYSɚn]$R/cZ(}-EF_ëR^bZ0ԪgҶI b&T$׭s0xU>Ydž9F=jHA˸LjM#UwQG/L$%%Tb2U!ך9T1~5MٷU]WtvV6Ev Xemu `E"hA !l\#:5o,9-zƲsWg߽b>Xs ɞhZ{θoM_~7PKʬPK!*1res/drawable/photo_picker_large_button_shadow.xmluJ0_:Fp Lp+ҖIqfRܻ| =-)qIιMbH"@p/ SrAȚ<'%YffkzKSݙK*Ug FkWz_ؔvYw)&I\:97qι"H>',G=#?=%@jXρEGz7ݱyQ [ԨLf̳LwPKERPK!* res/drawable/ic_share_white_24dpCRIFFWEBPVP8L/mIڻVZMlj5*3AjHb$ L* ۶m]9HqL(h+J0L+B1Ww F?b̯&&!(q&5 &^T+/tmH䅀4ķS)Y|AGO5%~o*] - @ PKv6PK!*)res/drawable/search_toolbar_modern_bg.xmlu=N0"X $h%6@7 $"QbiEGAAP^5Q蓭7ئ,"FID[]&`8 =xA|WEJdjX&)KI-Eί2IR|$Z,2)(j,-yTX:m"mv\%aoinD hޞc7>)o,sCo#~ hsԞ0 ~wy޻aPK [%DPK!*6res/drawable/cast_ic_notification_stop_live_stream.xmluNK 0}H.\(x"VML-R7̖y` R1e utݔs4zѻ&ɬS4e'Z9n/;%gxF7Q}i@ o?wPKPK!*3res/drawable/cast_ic_mini_controller_stop_large.xmluN 0m$C"UZ$6$9yu),>44#2 *X;l):(eC\R^m@M91M[f:>I{DLEDrbk4cp ܂';jebSRiSWMAP?X⸩*OMNѻ2*]c&ˋ$ުj2eMTy]%m_V #]_wbx'?]%|GZ3V\FCX6 u^@yi=F^|n n{s? PK iPK!*.res/drawable/abc_textfield_search_material.xmlQ=O0j) 1000Y_P0Q# , $į'1ϭC# 龞9>A DL{Fz>pgNGiMij*'ȓ$働]df{9űuU4ƪzì*S9MkӆQ%Fk5Qjڅ!W?f޼ |BP?hխň5f9WgqDޯo}x•Z#pw7[EքktV|Co,q4 oy޿PKvLl%PK!*5res/drawable/ic_expand_more_horizontal_black_24dp.xmlu 0OlmSA,N>?hMI[-MU q/c187W11"& V癑9)|vFQduq~-km?PK80m`PK!*Cres/drawable/abc_list_selector_background_transition_holo_light.xmlP @5'XXZYXgH@j O m">"xRLH>5/8|qكL1*kHٱ:a~t%I77ܼęPTuMIgMYU'xugdN$T՝^ݱU\kґ\/e^nrNVI/U՝^ݱUt2>PK3ĭPK!*res/drawable/icon_webview YRIFF WEBPVP8L // ݶ>&EXƴ7EzHAdplm|n*wy^W-9g%$vH_PU5pk=k f˱ث۶mbkRJ1XimTi \m>_{1ϲ9 ,g&$RZ"1{ F6 `4]fʰ8,Bl# :P , ,,jPlOeZ5Bûa"xdi$(.[`V) VsPh f(gT[{`SK:tO˩%D!Fz VrմLBT4aGE214ֆʏf l4tg"=ZG=ۙ8ѠmV'$+!rSa|ǘ0+^5jHp7_ho^nkt¸^kw*Mڡ v UlY1./7xLJ$:kc~trRGƹBLZiWѺJ|8BhQIkmL*%7)S"m5TdK d.&(칡 GғtG% 7GXSsˊVr3^C94Ϩ7P9EwppGsݼwˏv7-~|x={{,am7G"Ѫ(D| +*6Ov 2i Tf$6ͯ,$=qķ&k̅l oBwr #9̻uOo-&O9װB!sf Isµ~Zi蘼R紅Yb@>MP- h ݐ⚪Ҩ4[ZDQI:+|%o /X !jd}EfZp+VT=H .7o-b#F>p%*V0{[Fu>#Q/tJr;&HV8eQw_^l5.91A}=o!`V 6: !mwzHY1Z((m=dg l9Di?t~""zD$"@ # @cyCNu.uaD˦Y >YJDT[ёgwr3AofLn"ZD=Xe`B헢OA|;Idʹ9@p<ֱ5#~@+.]:kN䆨(Sw\RYE$XmgMFeDֆs:r&ۄ&,v` 5fBC viQـ<z| k xMS1e݄uU֛]c~ټ(i#İZq/3 ;9] ͦF4*pƫXl+7y޺)K0oF%CP;5gV$9noDAyOA+J_#"1GP(` [ثFt-0X$d?g 5á ( %ؔd#`&LG(Oɍ0F؊%A0odf`4 `aPKD߫ PK!*"res/drawable/avd_show_password.xmlPN@ RT4ۈ.): :> sY kw5'A"FEG"pDp +x^) EB$Z>ț[Ea(ˬ&Jt ,]e f]S%*6R=]!Ԙ28U`N"jV}QVMN\L}Jo+c{bȜ{aĎEw;&7|mu:f;t@gjrg`~;B#a#_/~OPK;)PK!*/res/drawable/cast_ic_notification_forward30.xmluNK 0}H.\(x"V<1-HlHroHQ7_ M ` N@2[)DJy9{uSbLrmkGol8&NOؖDjaT^PDum4ϾuyPKSPK!*0res/drawable/hairline_border_card_background.xmlu=N@x@&m"eH P.J6Yk׈ pz$AYǖ c}PD5#GFȂ#y"$KU4%O_:HtQ={Vܺqy4R>/VeeۭZ9U'락]J86|i[qA})K>",khg@E.}c%}u{> ~_©ܱcA=9sp1p\% _BVQ2+ɪ])kCa(DWYBYTɽژJCպMNEjL}&U`VNTEZ.c56FgZTWw۔HU͑91{с#֛Eƶp]>“gk:w/#S\Oi(z^\a+- Cu6G.9UR~0VKG^H`qicNxfmȃX\E;]J\6*v/Je^ MZI *nձE0zBG'хWu* 'x'tK~r=/lN''iU-_MYJV Yq5MrnMSf\bVfKܱggXdL ;؃;CGxz4V,"`l.;n-D[͙-uqY~[g^[?im`hk4e<:/PK";PK!*res/drawable/star_grayPNG  IHDR7IDATxc@4h2TUpsxo(> E<(ƭ(XQ?FVG+@MY|ojW1zpwGQ`X3lB"?gU}p ^Tb_e E(7'Jyޟ6R~wIENDB`PK3PK!*res/drawable/address.xmlN@ EK₅aA”V&FXc⦁4%0) +ć\83g? `(T!oUCsyE>O ѱNy$|ӉMY<֋UUS 1ln!wHI%DATDC@]f'3fyP]]6u4VhX~!5eKޫϝܳTT7u7CiHAM_%?^kz蹇^Kt#oPKM!PK!*!res/drawable/ic_security_grey.xmlun@g8T@P!ZY*8h9[8JVSOkߍDLgvF6ɡ{[j 6; <5߀ɤ&۾iMS,t>9W{Ӷ[, ],tAۻgp\mrΕP Eq9If\2AH^y j=S)NJo.T#^('"\/Ȣ/ rE&URnRtZZfA.X!!/?UblRcI2\7`X6 ΐ7t})~96;ip9=j|;Μ 3; 5Lvy^}ǽ/PKMc4PK!*$res/drawable/tooltip_frame_light.xmluj0Dg2 [ѵId轐4c"$++=V12 x )j J6$MSvgԙr塔9nK X,yu7~~YvM]ug듽 |KGD~ɉ@&QVމDz[)9oeī/ >=ƾ.i?ȋyH]ƾx4o7y3PK'fUPK!*res/drawable/infobar_shadow_top tsSc``wu  0 tWPْ{QJc`sc&PKi{/.PK!*!res/drawable/audio_playing_square{RIFF|WEBPVP8Lo/dٶM;m۶͖mmv}{/Ɍn#)RjjnxϗQxd-Σ6YZ M9ʀ2nQX)XbmcGy6^ bEap ^r,w]/0pBb,)Z3ajS^iMN(uv9]\&KY!K~Po,抢ȘAbȍ&_o IT,҄)vk|OI~KS_=}q,=+w'~z޳y/?=uK_uO|_}x'ppPK?PK!*res/drawable/ic_stop_white_36dp tsSc``wu  p^~W&3Yǫ2PKI0.PK!* res/drawable/ic_pause_white_24dp ts```wu   .ږz.*ww$`۶ؽۻ_MU0su5SY"!k2($`y$TT" )3kj8|}шS]]1yRl}O:;Hw&3J}L&*_8f.n抔EPKtPK!*-res/drawable/$async_image_view_waiting__2.xml=N@g8$!EqC R@A K!k7Htp Dwx66 ! !4y]s1uF4EYGHY0Ǡ x/RB#u|a&vZOT.FhnPt"*b1=\=$:EZERmHtRڕ ɲ l"t\ڞ7#^-;N@čR~-c'o]#2 ҍ8OƧ3fwd]{X` < hu QJ(ﯺ\K+Di|,{_j,!&3_qG} |;PK PK!*0res/drawable/cast_ic_notification_small_icon.xmluNK 0}H.\(x"V˘Z$6$97 (ox̛&pDAk'| -"Ec<@ۜ )p1&i6w76MY'ilN"s0_ *wJK/(oRӀ6g:GPKPK!*.res/drawable/cast_ic_mini_controller_pause.xmluNK 0}H.\(xRxZ$6$97 (ox̛"pFCk>̎yb Eۚe%{su&c&utIoSe':9n/;%gF7Q})uٷџ;oPKXFPK!*;res/drawable/common_google_signin_btn_icon_dark_focused.xmluN0*D7P%Ɗƴ $jRAB`d2rxWa(QX苝8tgWn"Π!g h,qx Em:}N YwAצ iL=2٦䩰n_9<Mk_ud]؝6v׽mHv;p |+fn&Q]q?ɋFPȳdus?\!Mms~ݣe0Hs^o[c (ʮզk8RråoeZ[B "7~sy/吟ϧ2=FݓpݙENx.R(ۼVGwy-5KPK}cPK!**res/drawable/cast_skip_ad_label_border.xmluP=01:88092q2H0%]_!z^*(1t#Be܂0`-ວ]Z: 9Q{UǴR(r.N=& 㲐Uesjt]"34B 3_;@<|<05Y7b?b;3<ՉsZ]Ewuoi5 [?G=x{4yPKSPK!*1res/drawable/cast_ic_expanded_controller_stop.xmlPn0#, xa@Nl*7[b3څڪ~~yt@ @!sœ37g``vlٟX6bu-vE])}ګXlLŃ9 .$oWh1ye|1 ,{t_yb͒,tB$0*~∵3a#Rģ={YxPqoi̎d PKEK4PK!*"res/drawable/ic_apps_blue_24dp.xmlSMK@G(- z%A졂=x i4քfix MI)Lx;ovvfL"F#R!h@1pxp L3>OV9椪dcj4fI4)X~:Ox|)iZE{蛽е\1oB lVJׂ8\c#^6r*e\  N-j- -ھKz]lGPKywDPK!*'res/drawable/gm_filled_cardboard_20.xmluSn@ۉMiE,X Tc]? X4Rl6QbRVO`vp3NLtrqn A$9=%}%mO8/>t8Ӭr\}+kjTtxƷ<ׁLtN=m^tp0T]D2I4r2t,< R`[FR@Ɖ 2 dF %t=%C83f(_@ 8.ruXrhz iؔKO@U9,&<5qh]4V;TF>wՐMz[q5Tv Omz`5V\MMzh>Ft~^/r|/gxɿ9g9.jΝ #B Xf/džux/?{h:+$_ Ê1 y~_ Kqo X׷?©ok1󞨗Ô>J:x23YƷ? PKgPK!*#res/drawable/infobar_wrapper_bg.xmluJ0gn B^Ono ^Ml`jK%S>|LAe B[9qD%qCXB_y^+WVn >vŰ*I5dUk]X<CD > d9зYڡ}z2"-G2ʤ!CF]3&7.]w?lk-WUkQ2WٰMW 9^o]6yZ/ƷoށoPKCU&W0PK!*.res/drawable/abc_ic_go_search_api_material.xmluN@gmiEc8x!Jfă&^@6e'Ƴ7wa4_fvf:YЈP2hm%Pup܀W>'\Ac$0HDTp[j_m!N4Is,y ;ǎ;nHshiT*Q#j"!ϛpL]c/Ȟ#cA_t9=,1;l&}֟covﴸ`[:-? Hze?x00 ?PKFqXPK!*4res/drawable/common_google_signin_btn_text_light.xmlQAJ1}2 t… W wt&NDz A<yy@"78Ԙqb\319o[vՃl7fY7 )ͦt~{V5n/fUj׽uz emBήmO0a24S%aeuNa_3.QS#+t|,E|\kx =H Qě!&XMh8>Oٷ -E'2dvMr bOh!.8+ [ȳ1doH洽ZdoU9v^_.6Zx|^ 9N" a.RwyEHG">"LCC(Nt\tQ&[D,B>{ bt]w{<}*Q&e1\$i='S_'|)dӠlYj kJ3\0,L`ۡ k;.WteXnUQWYhXj(8S1Jϖiu*TZ6o=~PKWqPK!*(res/drawable/ic_notification_media_routeuRIFFWEBPVP8Lv/U0nQU6-A?;`jH K@ I6ԟqWC.D1'jRbHdЈ!I`̍ՆZH"AئvMYPKI>ŏPK!*'res/drawable/omnibox_not_secure_warningvRIFFnWEBPVP8Lb/`ܶ$_s?Q6p ύS9 ḧmȧ~Di,s<% dƀR`&!fbĥ;r'BҙaLO~<PKX{vPK!*$res/drawable/mr_cast_mute_button.xmlPN0bCҁ6$701 XjDC*+1jUD:|zg?wgxp֮È<'/[Ժ}X9>m 7>U][Wϗ!5/Ţlc׏s$s5lʕ"꫈|e" NyDFUd^3sC=ѓEi`ڎ$զa1G13HPK}ոPK!*-res/drawable/cast_ic_mini_controller_play.xmluNK 0}H.\(xRxR$6$97 (ox̛"pFCk>̎yb Eۚe%{.p:Y7{1k:IoSe':9n/;%gF7Q})uٷџ;oPK]SPK!**res/drawable/ic_more_vert_24dp_on_light_bg tssc``wu   jdX(&[Pmwa[r;4\5S\Ef|q6gPK#KQNPK!*/res/drawable/cast_ic_notification_forward10.xmluNK 0}H.\(x"V<BĆ$:E y6`$eB蠔} qHy]7.$7ަvnƆc2$mID{ANY?%ޱQMT_jPFC[ϝ7PKizPK!*&res/drawable/$avd_show_password__1.xml}J@g$ڢ= 䡇Ƴx)EDz& 6ezÃo'_ cof73.t1ڣ6# sZXpwinVrčDsʜ&Tˌ<RS%pVi6 8W3ƞ'߀X3}@Y[GW{/r8Ú` Y^VKڛj y_n]joYVjPK k;PPK!*(res/drawable/custom_toast_background.xmlu=N0$E mAAAAbP jJ `%M8CEehWV(>zy 'c\+ȎXAWOE]l:ږH5USMS$)KS^ٵKYgzv¦cYjj~5o"Wy#@zH w_O>?sn߇  ݛrGϛySQgkt/_,߼Οo3PKIPPK!*res/drawable/audio_playing[RIFFWEBPVP8L/7$9ywVhiHhN&{{D4-o ۶m$ݻWPCpD魃ۛjPOocO%'G(5ڇYq ]&ҾM' PK%ЯPK!*&res/drawable/infobar_shadow_left.9.png sb``p @$]Ry9@H n9i`+U eWĤh0`d' f퓂AFz8p\sc0`r?̳¨lu%N%b?.p}qK$^[=qª*~-~.PKPPK!*res/drawable/ic_globe_24dp.xmluSn@N4$EE2;TY!wRX*C8Jvs %*c{6sG1_FYcn 's@w'}|~"_~]۽^ؔg[v ,WX\deƆm).в:ݩL ')dJ; \ڹmip:R! 4$P>:IR6!4A GK]1B jA*P[(2kRI ;ʇCh(bV3S"JBiCfxcOEM\s4D$&КSA7,Mҧ;2% j&iCJ.qWrK " $%P h(Ey_I5w|S,xQ뗓v/-o |V\Ndo' g% \oeYcY6]f=f{zZ ?4Asek:]gC7tmj:g$ 5l?5o^5{is_PKu6;TPK!*.res/drawable/abc_ic_menu_overflow_material.xmlN@gZ<`?&5 1M(H8q<i~3jdPQ#btLha}Gkˀ(37" :p.t: PO)Gd"W24_^*#2'kOx4[mNݩ%Z-DK5e,l;䢣mch,z4x(TB /,+à%u}Y Vɜ˙`l *ß0A8c@ s;0),ևxtu.El.JYQۡik}^JoirmcO#}]DzfRK M^SKۚ_PKMPK!*res/drawable/mr_button_dark.xmlQN0|/IIԁ 1u%&`f?I,jT%~$98Ċ*˝g@tLoDXaKjfgp Fݨ[uPJJ#IRW[q,7YY,3Nl/аR,-r!+Q*-js-Z(qGNh~&xbfa_觞n'O=s y= ,WZhAPί{^o;G^ホv8O::޽wa~{?PK~ PK!*)res/drawable/abc_text_cursor_material.xmluOK0e/^W\œ7K[6Mi {sx7ךRt /&_p!SrEn-y&dCDWFwC]v꼩 5-4ߗKV{l]n`]ʛ7VVb&l}Ywp{D|OYfD1 M>ϹĽqs=u/u`%dny/?D- pPK-/PK!*3res/drawable/mr_dialog_material_background_dark.xmlu͊@9 X*xMU'̸wûZ A;|t%UL'@/\NV'&?dM~IRW{f"7q5}aҴ<R.+vs<3;?e [̖3pɅ@FQ+D {NJOߴ Z_(9D߾ŹO5-5aѷ}Z+7G8GQ?Y5zyyχs8GS9f9PKhPK!*res/drawable/web_asset tssb``wu  1 .6qNI?wޛ/rl{'G;Lnd_aCl5FPK8MJPK!*$res/drawable/notification_bg_low.xmlPAN0%( B/!V8&+5jD/aCm5āFf=;b$A7G ˬ3 iZ lF[M/quw@C5tuz\-w[DQv6^K=>qږ.]7$}'>(SD-JX c{)||> 4Ꞅμ.p-;>/p}B浂?<7xk^Ǿ~PKPHPK!*&res/drawable/ic_settings_gear_24dp.xmluTMo@]IтġZ7$EJ%$r܀#\%V+ܸ:LƳ3ofߎcc٫.c[ccY' yy 3WNgʚzWd_ΦW~g&p㬪FjdbR/&J.Km.9o599;UP+-rSH!M(Ea$0ZI;JJ(PvBFqD)t*0N:&ΡP(GjPdL1%a0mKk) 2TfDvY SQar B<Q Aak1-?M^;j|-Ƈfƚo_[m칾ӿΰGx<Fowky?PKOkPK!*-res/drawable/cast_ic_notification_forward.xmluNK 0}H.\(xRxZ$6$97 (ox̛&pFCk=>̖yb R1u!mtݜsڪ]Mj].cY׸G!lڀZZjfn~PKlO!@PK!*<res/drawable/material_ic_keyboard_arrow_right_black_24dp.xmluKK@gMPA0G!1>"b ^D 6GB~=U-yZg2 Q bG=FT4P pҘgOKŢ UCQ:yD!Yj: ,^2z*XDM[cv %>6aMybKhɩnaiw44͙R YV<܉ن9&ȍMnД 5-R4#Od׾tVLc8=\+k*k}/PKhmPK!*!res/drawable/ic_videocam_24dp.xmluQMK@G- zPג4ٚP *Qś!&.)xg 4"FGĈvIh 8k MFd/ \dcR]fbZCthj=gy~YŌ,k*-[>tpBk:.]uĕr/C(tM VEܩΓi?'(]s;5xVdcR!g7d*ЏM_Y2dÐc.$ X2l;# }"&jņ.RV,ݕд [yѳzj=uݱtfKҷb/PK] kPK!*$res/drawable/ic_warning_red_24dp.xmluMO@gA[ <MWHLhcm۔MI8?MO-}nSBt'3ngf$ "F'dD *8\'!ɶ\ 8ZI&yQb=ƋUH2r4:! Ӡ$]Vfuy! `C̳$S#L}52\B,0}h嗛-KUFy4䕹<`X6 ֤x厮1>KߥZClV?4pRi枦jNxk;5f^ʛz{sPKRް_EXPK!*#res/drawable/ic_music_note_24dp.xmluN@cAF]hۆB.L.jKk\BM\>K sgZM|sgfs4zАPCZ)o|/CIU'lx> ~xorߧYvgyA6 yrAY&ƞoX~fװ|ӵR(Ө7kKgj4§qctΧ'SFI< K|GK^(zG =00&.=oDY|؆ǣT@VY{?mTc +_w1J%X/V˒h9K1_u}Z}N&t4go@w-{{k6wHa۵]=>^Bn[ÜvNyȥR}Hk0bUfB8X] ^hE}/ 1W^!dNi8=q0^1{dqPK^PK!*/res/drawable/abc_item_background_holo_light.xmlN0dTEb``а ҕwiH7Ћ|eBrƘhB z7EXlnnJ*Y<AȪbp8qNEԣ&1JWf&/;7̃!S#,>mF.cmM*UUL9un &}fYn;fqe[p7wlp{_~u6d b\u0`8~>z-PKBPK!*$res/drawable/ic_cast_dark_chrome.xmlQ=O0sVH`f?I,5jT 1SY|=6 p^پ zDLB&:MC8 KPs]}˩.gEթ[Wp]Ro(բںxjDJe&0)FLv NҶq#?x>)rG=ENslyM5Ϯ^.g'Ɖ 9gߝK"]; 7||_{w{%<»/sPKzPK!*#res/drawable/top_round_shadow.9.png sb``p 6@$<, $ sd ~ Ѭ gCuG^AH2 H˃,bFdQx"[Htq 8tI- <OKvj85rvݸN>c''?jl_,GY#Vئzm^~byMe#x0ss\x+Ǽ"RN{ޘXVIz:꩛v?Pz ;m"c6j/g}ᄜ) 3Om{ZXSohOtcjΩz=jfa7Ko_}HBef74kq|O߼||6N34s\g5HMj ݛ?l1}Xg鳾œN.&ƿX1fT:7_{"21m ūL]/;yԻtd|\=YǤ+*MޜxxNޢOBJwsEӅ+TwPK!*$res/drawable/ic_drive_image_24dp.xmluJ@gѦEABJ>m#փ zG!&MH }>gBcSZNef3dѻF$hJAN!Z`  N%_`{H1UdP1ΒײݞV!"/*2RE"L'k8A6;xvJەx˜EK$qC1rcM :A suǒ I⍚eXِSi:ųO~yaXq+ l!= !t`ؤ]ք]-lkj9Ħ؝iM[hh8cM_+h3[ҙƢoC[zսysPK0 {PK!*2res/drawable/cast_ic_mini_controller_skip_next.xmluNK 0}H.\(xRxZ$6$97 (ox̛&pFCk=>̖yb R1u!mtݜs:oecv-ZEyus$*+D9d] ǔG=r癙_xt~P~f鿵!">mz/0sFswh[;ia~w}7}(>' PKxPK!*res/drawable/ic_person_24dp.xmluRMk@$[n@9]ɲCc)9 ٭LC'=־d,Lۙ};3O;Z| zC~舚!nh?{pxn1~+J,x3/K?9~t6Z+eV2CޭFzKJJGRaRᚑ*H#8 N3BreebQH3\W*\CϨ8B( #p^2MaMCuGq6 TJ &%DƵ(-|Et*c<'|C52[b:ˢ,u^LZ5*_`5Yv˽L'%|w@\H w~6:%טn >5':{Os87z|hvZ>/dz8k$hܝu[$PK̈́?PK!*res/drawable/drag_handlebar.xmluJ@"``c')6XX[na[;Y!7|d>jB\\;"H~R.;nTT^ڼ 8ߖK n MU5Yf UmrWdydOS0zMx,E䑼wA 3$_=&GW);g >u|_(&vvqV?۱Gf Vf1>_$zm6va>&*=UL{ͰA[hR _JzHb^ȞB D|VE+m >QGx@Z]}`gOGѤ&$4a?}4N&Q̹M&}^K5]g8Xuc|\xX_tm눷8yƛu-ҙDk|EutYEkkw[ZGlmsսwePK/APK!*+res/drawable/cast_ic_notification_pause.xmluNK 0}H.\(x"VML-R7̖y` R1e utݔs4zѻ&ɬS4e'Z9n/;%gxF7Q}i@ o?wPKPK!*(res/drawable/mtrl_ic_arrow_drop_down.xmluJ@g?E%izYAR\2@wt<ٚl;x,h2Rg_"^Ll_ĥ$:ZơD ;1 fě4F||lxheGWQS{qjy47v;5ݺ֩ix@+TQuYzߦ/~PKH.,4PK!*res/drawable/webrtc_audioARIFFWEBPVP8L/8$Q} DD8Qm n#$Tw& 欌N-xG[H\:(K`;OjВ:P_$c;}Q*|Տ)$M/ OBZ8Q(^8V`32jDmm@PBV [;PKuPK!*1res/drawable/cast_ic_expanded_controller_play.xmlPn0U `l0T|S&@$Ŗt鯖gj +*~{z Lpb3ߘ+9X0{Y RVgW]0n;,4ìl;9Ϸ4Țڔp$y7x;_W\M|~/{yɃ' ԿI`U#֊:a~Qܑki.OdPqkӸ;3PKZX4PK!*-res/drawable/cast_ic_mini_controller_stop.xmluN 0m$C"UZ$6$xu),>44#2 *X;l):(eC\R^m@M91M[f:VPKa5?<PK!*'res/drawable/permission_background_sync)RIFFWEBPVP8L/58lFz7R܌\նUi$/#t\&vL&2ܶm~cQH;mW-:K*S_h)'^C 1a/fwx(#~GKܻؤL+<;$& yY.*{6/)&'rDF_hU;δ3PK[PK!*res/drawable/ic_action_home.xmluN@gh⁃&J,-n(Q@umʦ$| >|u̷;AO 1}#F 9DN@n yGoRaA82qF$Nwk0(NAkj-bَgM 㞭Gf=čAWs(3A=7 7=ש]A8A8O`/BwM?y6`an6+8* DyKG$Qrm\ǶOBtu <١cǥ&< {TTy'b*4se1ʵR*yJ^9O.o'O_PKaxPK!**res/drawable/ic_mtrl_chip_close_circle.xmluN@(Zƅ&`4 &jL]hRJҢ`T:i}7q |pp\B+D-{X+p gE |N6 ܧJexqx/cFpFdc.w\(zIsykc[f/՜ԜKMKiѾM>KCfUCq "o; 2'.@Hp8ZLxX_;V*x|4&pK]wڔuC2QRW W{+tg~;eǺdܔ3e~+u9t=x͒x&bznG`neVL`lϢqVUyI|i/ o' J9czZB]ti{>¡z84١cǕԔ&kvP3r5YMoSdo(|_WSп1󦆞s5B6}"PKrJPK!*res/drawable/names.xmluRK@>G.\;d2օ `A+ i4֔fȅ+w?ߤm)z/zb1zD]vJǀ7|~QYTKE}]-UIggmU\oz{?%N&E8L/3эqc̥" [YBtfJMv:a^+f6=͸ UyOp+q.tWխ+.$B u'#ҟƽ[ E<7gIbu7$iҢEώ>S4n5|5mr[WK,<&/uxC뵟mۢɖ/7{c} 1 v. ch0#^pcmv?8s͙'ܽaq4:ԍb66s2Oλ?=PKf8/(PK!*res/drawable/mtrl_ic_cancel.xmluN@gEQJB"&x2xlF6p|^u]>Bt?3;٩N}iDNIm)5 \\\. Hi⾈TlS].;YbdɲFnbXsߴėߚjN,Ma3q 6oJ\ @bt ,?YMYȰ:aN|'qHѥNzQ8 & 8d7wNUa[ctӰ'0\c@3ӁL@l*X4bKvoJ?4mFj&{vo,VOcSNJcR3A.rսvwgPKp|PK!*res/drawable/rating_bar.xmlPjA}{zJۤJeF(wbgTi+.![ 3{oFBa.? 7tC"MTRYfql>bt]UW榜lɵ~–: GQZ~fxҲ.~'4ģwfpdHZe p3 Lg[ke{AzP9ZC wBUί9 ~%.Hh1XMmAA`=sCx 4r9ٳfIp ˫kEtifwnzeu&p}[}27+ʭ=0ƤW\7:o[m550t05;zC7*_ RV}kd2lQw'6<{RQ֔yV1y||DppQ菝D&Ou{~VE=.~l.繳EϙAt3:X,4[SĆL)DA@Jkec<_U/%ϲxYL[1ȥ"pRɸ}99:>v]Q(( nsEksYO_y7'Dܾ:r`IdΐOv?z+zJ"5%|G.o^c&C>Yo'g@Jn83PK=dxPK!*-res/drawable/notification_icon_background.xmluM0XYOn\/3 P<{aj D2U!D'`.bDdMH<ϖiS0g2- 9뚽6+:$uڜu[X=<\cMW ?oEA VŘ1+2c71~%ηrtˑA<Ňr>:5!|PK󑚺tPK!*#res/drawable/tooltip_frame_dark.xmluj0Dg2=Bht-%Enmph);z/͘ȱ1ɊJcϠU qx EmZ}B䅼 IkTY4u~y(eےºC<xl޵E]__k|jWydow<ߒ!g_r" fԦw"V}%a$[v>u'O=F)p{7A:R׼/%w PKcNHPK!*:res/color-v21/abc_btn_colored_borderless_text_material.xmluPN0/NJ :ug@bcE&Ԋb?0:pl%gw~%A#V5yK>Or K*Em=Tl!5ocb[W9o95ڻڕ7C|d5qA"3ޣ'< ɣ'cydԲgQqyǎ21|ߩپi/~PKUPK!*"res/layout-v22/dropdown_window.xml?o0__.8T@74Jn`@.䘞n;lW]ؐX Jx:$MG?~l~(m"F7(fD {T`nx ^\,'Z+n7JFj1u:*WOԎzSȞs561K5 'BOT09nfLT g ڕڨ=-9,PRh ͮsjsu׃AlNX&"r[,ie}?7% R;1 N7V1[Nc2^-vm״7tnJ=;]+'j5-4^Xjc[sΚ8vjh99/ִSUkxw?<{,m|gw PK~4PPK!*#res/layout-v22/http_auth_dialog.xmlSO@Mne{P zY."56` )ݳ»w  6 [vco{7\"bt>3!ف+Z ` 3@g# I%x}-dJߏꓙtDqFH:fS}<8u"O2#h$L*T{S-OECHWGJOu.J݉LP0%\ ?4 Nϔ>6X坝HxO"rc?{;V<&R$R2ļq%g9W'S!ۋ@ƜZ\cNK+1vOc7cĆt 9`0ތ#<6W왺ຕ:9 YYl8\oV }g.Ko}+|5\Rm_]xnX o4\k]eR*߆_]ߒgWfz{Lqg=cL|=?v0PKz6PK!* res/layout-v22/page_info_row.xmlkA&M&FA_R4x*UQQr)c2Mvx<{YPtW(CѱZ▂*&]OĄٞ z0wfW<{&v_]>Iczo;Xf=;g 38~c|L9&^V]}6"1Zn9@B+wLkVx _12rJJeL<]{R>Ss9Uj|J{lz;ne6~MyV=8?v?^0)=%Nߟ_R`׿?61ԟ#P*Va(1k89/Ggcg[]aVOPK(`PK!*!res/layout-v22/fragment_flags.xml;oAg?C1$D"P"EXtL{{wc!(2 ux)H D Qgf1 jXi}}ozaov_J|L+@h (5Mw6+kAQo^fـWd_J 4&T +7XN~'TǨ%X?V'߬Q w9GدO/@~e ] 3øt7X1ީ7$_"PKSpPK!*&res/layout-v22/page_info_container.xml]oTω&i& x B `k"IH:^rv4i\'kob`cbB+ .T89q]'$M~B~K4Q%[;J1Pσ:x,\Wcp\`$aY0?&'@̂{` B5u |(5 ɤ:a]_H*U I6xܱܲI"kdhhӶkZuV:$S*u9ᴰv|7\.:mĘϫF'bQ]W綴>:'){&I[d_Unv:N0P*]]ܶN݅ cd2oݠ8|P&-¢O md%N[&kRIA+]X˪&P*beLO!Z#evs .0TClX-WԲf{nƳC-2=}3j9-n%c*~esV}[j vYJ.jt׼z2>9|x;s.[K>Tfݜ]=Ǥd޹6["wr8I,+$J?k{p ;`~w=쥔G8{sүU/E28<̦~ Γ ]h<_R1PǺ"UZ6g4mg鳪cgBS[cle5oTRZJZFӾ@hZla=Mqhf;4=!=]eWN=IUp7Ӥ}C~c[Ҵjo.F5.6>4{7 NuD5*#iMJ*o\ ZFL_.y^b}]7Ik%ړԐ~:zuF:.>VV0C4_-5j͋D}g 1ڈR۫iߑnnB=:y8;7O桞y3LkΰbL$&\^Wr,Jvr)}t}qOŨUhz|]Rۧݎ6h.ἤT]RZ?o>E?ISZC-#oG{T MTgD[{.r Fz=5"9NҿPKl PK!*'res/layout-v22/promo_card_view_slim.xmlkA4>jPR0IҊ/Ax2Mdβ; Ի]D/^/DEo~75m>w~w)GY"F&$0} '< nU{u=/k|Ay')p (0`+ uKACCZl9<^MP>/G+7M+P,@ Os-G%T(Z#P-~ףm.ZT> 5hj4yrmZuDi6E;<k\B!D G,HOtǬwLLHW枾ZM\Nd\6.һyT&^Seܡa-@Kꮸ!Xq(msߧj55ÊԔ[Z5qҊffYΪQ5ʖ΄@"Xi ֲ!tG\.sjjn| G>Q.Q8>Qe Pe2tQg <[|'?!p mƞ`6Y@D㘣3nUZ{?Gw1֣ ~S4w3oaj8.ղp#-~l[' ==FHLh6#TRNg_\V1][;CJk|l=K_65;ļSf^,ktNf#] Ku.$ͼ)-{;m9SVKmퟏ^ކcG$aMcoivwr7z|PK's,TPK!*$res/layout-v22/page_info_summary.xmlN0IC6†:4HlHe@ eAUŀ4m\FL<o1AyX?QH\ζImD6H'4U6A48=pn2{X^Ui=ԽRy-G߀`^NRie EW41!A๡7=]wC vq"/]ɅO[4>6/C1[V%oU軳ݑ|wU$ѡyKv\ַ/[T9dB晚JVأBx )S˄~G5X_zDKKtbJބ^sgR?~\zԔ@xzල _e\b=vh-=Y?z/"*bkp _7lOg mky^ @"~!GIy 4tuu sy[c^i-? X=gSg8_Ad,Ĝ9#ϬJ7ҬŘҪ#j#-ϬQ~gjĶޮkoEG'~m9c/v={9 /7K:gen^#/霱o X嶌|} VB#kϔyZЮHʘ71UtTj Cs fCtn?{߮.ND<~?~Գq5{m1Aqy{/{gMZNqɨ߰לGbe&vBm͑oPKB' PK!*7res/layout-v22/abc_alert_dialog_button_bar_material.xml?o@ߋuH l04T"$QDʵc[!/HH5>˖JT=E*,1JsFtdóOYK>+g0?/=*Q`r1F CpϥR[|ò;ڲrI5r8&=!N;;Sn1bpl>w'ܞ^ i2j%{<[8\HEaskvʧ>0qwC"jZX݋  ۭ@1lCN_]Ǟ f3s_D%] Z_AbC}$'}C}(KǚVVKHB>?pO,>외ҊΜ, *:a9 ̔H(j?Ց`НgG߁Xֿ_ahwxp5}n#O>f}Վ7iz5KV6~|n_s5BNoB<;?'WҼ2Uuf[{|Yd>g\m)͵Vrٵg-jJ<7g]kw:_sS?˭;iwr/l툷w-][V%SL<ez~i=WzPKcyj, PK!*"res/layout-v22/query_tile_view.xmlkA櫦15uB 'Ah-*-E r){52?}ŔJ_wb/昿wLK(J6ISzְ^m\f.$=O#Y=SPKbXPK!*(res/layout-v22/promo_card_view_large.xmlMkAgvM7IߒT[EE* 'D"(2͎ɴewb ;"桄#v pLp̃w}</ |{%p<>&,3_u20 u28YXPA DVu1,`˲BoSBqOyV[Dz菘3Lk ]5+#gEHiNId&ՒUݦædq]fRXg#NJ%/5'Ҕ6 !'XPZ'.\6fΠdphsK D XaS,ۮ]53x O!SƨYPisrD-ܦyrg=DJG x^W5xނw3qJNpU)uQ޺+ 5c" P9jiid "-H2C7]aV#V'ڱ{ nX͋n] ҂s[EJ'G#Q\=T2h n ‚2T$gvu 1-mfp{.c*'bڡH-SBu"t:A'# @g rQLȲF}j4w'Pă$=##qSNX$LP ݬJH6I?MP9BA̦7bz-hl_G8/4΂<L"Ì %2qWyk73~A-f&] 7V&-ľWdحR̆U-.jV~kkWaۆ yqE^]yyTY-YudT]&g@M>">Ζ360_70f.1WsuΖ3m`i`v ̵sC17V0l=;rS |"LF*ŝp/Α`5̴k` 3,W3WTg,2%>Ox+X8cK_}3pWK=Zv%u^?PK7\PK!*%res/menu/website_preferences_menu.xmlJ@gwSm/bh`roŋw K`얈' |7 ?f ='btJF4$oh @.P 0ȤE~z%H'EV'Ә\פfdW߷s 2*RNGe[%(i&KybLy:JT&u`{| +/X '5*CT]^ـ whC}2ƈB8ȃ~MM;[Cxk5f{q;o5oƇ&v)?!a)zeܯw PKP?2\PK!*res/menu/options_menu.xmlO@q- ':7Dc ״WX+#489;8+\iB/.](hAAޯ`m*jBQ# zAQ\α@U# ^3={;lھd;!4}l ıXffăU0-C[`"ÀG>t:\#ʄ]GzB=)RG0yQ)@ / #HW@ix㷣$叭ڢ3d?cL{%E#J=YG7}`]q;AYEduA\C囲new0巿AKD?e?F煝naSYO=d{9~!w'\sLr٪8%DquqҙPK PK!*%res/color-v23/abc_tint_seek_thumb.xmluPAN0K=P =PT|&R4QN𩾃;SG"ix^ok|H,+=3c>1{4H MͱC,+ovyikb76ӃYʃ5r熌wRXr "Т\%sf\yw8#x^ތUU}j{RRʦuAEiLZKwTmnzGs)]ie0_ xg L<7*'@}Rz'y$YՄ-osF^.{O,q7?yw"O>PKlpPK!*.res/color-v23/abc_color_highlight_material.xmluPJ@NfL.u dQEf'Y6/2~x;щ Q+Lw:6% `7 x':̣iվ6O+] PU$Qm9trEQvk b qp46BS+W13??`z{$x?3gt=˜ԟagk{mh\0{/$0ﲧz,;ۓBxɓ}=--.ψ6)/_Ьjsp |OP.Kq}wŘD>p}SPD*P(Py(\QT,qoznL΂ ED'GO2=y)FG{/7ط؁51~P>po}U8nKt֍|gJ#u+zΔ ͯW^LxKW ^ళcgS5˫vv.q+܇{K ;K9N68؂jjs^lPK" v`PK!*:res/color-v23/abc_btn_colored_borderless_text_material.xmluPN0|vHJt`@Sz`6$R4Qt_K:ԓN^,(&bO"J)^Ag[g\.μ~oLEIRvM7@uךT﫡UsRM6lˮUPjrLKYfMcJ@Gbb{L{]Jp# '3oЛh& 3"ȠYvE}|g=ay[$7S|mPKa?)%PK!*#res/color-v23/abc_tint_edittext.xmlQ1N@ٱ)"@AE1MDE'ar[CtDt_`Mɀ`fvk ,8#19&wc3CmQuvUuV+yUzUGQVuQM!r2tZӜ UI=YVWlnR0\U!I*Uf!` G3󉈎h23`}~ǡYp{5fYV N:-SQ7,η߿|%ݻ/PK1!PK!*/res/color-v23/abc_btn_colored_text_material.xmluPAN0ܭKTR{C}@ 5T$M{jE0hzf$0}QFжt W`>/tjv[mJJӢU])}Iy^9=)e4ڮźhwIw!)M`|'13R0φ 8~W8/|:IC=IN/dyH{&lcw{G.Gqc7~'F;8/PKѮPK!*+res/layout-land/date_time_picker_dialog.xml1o@i&C$„TB*bmThTNoЭCtl%v3w8'K(gtwsɣẗB2=jFO<-PNp v? G;[ ~5ײqdBYDf j"He|\PNZ,r Øg"Oz# ╌.A˙-z[748g;**wS KSHy}S}j q:潇o̕ҪZV-ZjQFc6Yobyno|xUgֽ?YiV#6yV{ٰU\=T`~hm9c[o綷Zo u'V?PKcPK!*&res/layout-v21/notification_action.xmlOk@I6&ͮ[A{/JŃ'7":&C24dtVDA<.Z$MHc&睌Im m=FFz`Mp]pPx^I"R>4$|=Q?jAQVH*daA"8y:.Cx_c!X! x"ᰔi=6q$z^;Uݭ])Uث qš#Ӱ`ik+V*e/u`;f>B*ٲJ%s CO3 ~_`1<G&cĦtq1|ujTeMVvєtjU՚jygNQinޠYO;n~_B;~e?k{ٝϳ>ځ[G|S{ڹU>18ќNu?p~}{?/PKNoPK!*0res/layout-v21/notification_action_tombstone.xmlo@ߋcI 1 !uhXĀbCbS۲0 '02 ؘAb`?Jy\'~=wgKD#$=0mp\.d x^ x>c㈘#P%H|,׋,9RF(Ռx\ y=4ѠTRLB%Q%]ѐeձEӑϫwMѮzZX*KdP-T,UIO8Nܵ:\޴%a &uϵx_16{o|OVc:cXJ/o ,РF0^ģ?F15o[,=Č6/J7g'a})YkS1MWg0ʶ65 5Ȼ"`2oWcfdn-Aݗѽ`3PK}פPK!*3res/layout-v21/notification_template_custom_big.xmlMOAǟiiwăF)Q91(񍄄ICi7v r!rWohB<ϰ3am~f3F q'\ dC&b! ϐ5- @4@N!gK !+HO+E=-tm{e.lR)׳-QfD"v yZ\({n7uZ*Nyέ͢ݰ* 1@wXv 5mvH.cn '% \jMێD\;gږSYӾDbFmZB<0Dia{L79AbF+/ bŪƈ)/B}DZ>5rqs-xɐsw8\3h1,=օ=6NMLX}sL>z2Cd-hZvuZ:5F63нI]G<PKR PK!*6res/drawable-xxhdpi-v4/ic_mr_button_connected_03_lightRRIFFJWEBPVP8L>/GF$I_Ψ=_f]mHALgbkjr9ǒ}RϞ?;p~ "„*LR-ؽ0cy$g;!Lp|2U^Ns)]ǦB\fxT<993e pav@eԇ28. 0tP0Hpx xfFРL0 ^fF:\&Ea@7?0 A'E8dP# 5$|aL]Sa3{PK1c]|WRPK!*7res/drawable-xxhdpi-v4/ic_mr_button_connecting_29_lightDRIFF<WEBPVP8L0/G6$]a&ΕG"Q?c+xF Ćm<̓yv /0wEL _!U+[{ 3oanC$k3#LpygFGR4 4VarWl8[80vV**)J'e~`1NrH;S,*>iuZN0R&<.J)M3ʸ) 9kp`Yf00'oH8 ~Np ypPH`cw40=%x‡HWA}PK.lIDPK!*5res/drawable-xxhdpi-v4/ic_mr_button_connected_04_dark\RIFFTWEBPVP8LH/G HnIjYՕQ 47d>dO03ʗmƗn5_7Eb"Wn_ ktae "!-)!]vPg.lv͝`@*l#l@0* )cRŭvp9JewwA(R3`k(`J.a`&"i˴琤ac,2M9*B=, T6` fb'[Vxc{{nDm8}n!>6#FHPK$?a\PK!*'res/drawable-xxhdpi-v4/settings_sensors7RIFFWEBPVP8L/G He-@ 7D p$jX5Y |aMDHgs_Š w KXȜqLVЏּXpB[XucãH-}^ٙQg^AQT5}tjgus p캳C/vM,( -JZQ;1,JfQjʷdO& AÔOk/uoHFÐt6ن&((N|]`SʵfEʣ>^]n͠61hPT1H88!dA" 2u,Isq+K P#x2n%v@eښ?+T5{w/Lwwυ~;zͿ%i{=OvK^KoԓԷL))].PKPK!*3res/drawable-xxhdpi-v4/infobar_accessibility_eventsqRIFFWEBPVP8Ly/G $)o{c U($5J 4/<8oöVUӘY5hl C ݖGr8?Cr64zk rysΑ~JKgPKSڳ PK!*?res/drawable-xxhdpi-v4/quantum_ic_play_circle_filled_grey600_36RIFFWEBPVP8L/k IƑjY$lPwZ˶m۶m"xW۶9+em?_HR$9_pFf+NH_/hƔf'4!A!HRu Y.\q8hfL=x8'澃}7 bau LicK` 0f7bğ== 8In`\J 1y( XW|S 3ȴR`Mm= (vhW%CwĥGX-]/. A!8Nέa.#.]y7#^xHpuWAX(!*y5RUjjRUvjcdJu7eJjV@Z昁* Vb,TP TV8rTV cb>rg<QhC6>W_93ԗ=48҄_خӨ:VT]pXnql iY휳";bJsL}?E9wu}[QŸiޭ# +dYkm/B {\"&0rhvLs >y i .Y7Ż}?Og`)`xiQ6ȳ&)Ohh4rNv>;Np'tp]tHaHy2dY))$Uelkh,:"Ԃz4)۟=PK>_!PK!*6res/drawable-xxhdpi-v4/ic_mr_button_connecting_29_darkNRIFFFWEBPVP8L9/G5HrIyH&`OMgb?q`&Cy )?]f]oPW -ZhսE4xEXa\Zp2$H5Z~TjʔbJv%UnH KvL.BIĢvrO.B(?lwR%{ޮJX uVR98 2a5.QS>, xP[pr4pgV+Z;@ 4}HʗհAo4H@`a>]\hp79lc+PK)SNPK!*5res/drawable-xxhdpi-v4/ic_mr_button_connected_13_darkuRIFFWEBPVP8Lu/GuHrIea$ y+ Pz} %^أi2 e^eJ!PK.,7PK!*6res/drawable-xxhdpi-v4/ic_mr_button_connecting_24_darkLRIFFDWEBPVP8L8/G5HrIyḪd 9pxM@3f-6^-?Λ{Lg~w.g]ѱ+D B4~qqlzF[b;S9$ޘJp7Nj+Y-3VtfU1izdQ48cb1|(n;3h'Qwg$`$(Ib1 ualba ihA Mr@9\IS,m73ʡ#Ak7$5$Xट CI9~K]Kw>A )G ޚx(WPK;*QLPK!*:res/drawable-xxhdpi-v4/abc_ic_commit_search_api_mtrl_alphamRIFFWEBPVP8L}/_50lI<.Hy4PaIԱdQk^ƽ4f >-q3`P3A1s s A+\iͱ BE* Tf熜N[Xl:Sֿ PK)KPK!*&res/drawable-xxhdpi-v4/infobar_warning$RIFFWEBPVP8L/G(69R\~:ZGTr4!Z;$Grv9DN+Q$Nt`l*=3@@@ld۶k7۶m۶ma:@ H`,y$>($S'^:F 8_#O…hD`uFRَ+!G("#UØeQ.7$xְ̜0QUGIb߳oDFsRрO/ DnlGO g> #j{ό2T}kNN6]ز>/?#D7ߋ0ٌd }QR{a\/}PÝ y(3z_IÃ0XPeM`Ez|ffok;MCH2~kL\F<7 cq3qwUd3PK )$PK!*.res/drawable-xxhdpi-v4/ic_skip_next_white_36dpRIFFWEBPVP8L/k'1? ۶A!'0G ( q@<  "P(PIsa~p ԫ46Wml۪r~E?'rw"D"mgϞGȿojً"r E AAHdC9t<:9X6Ya.j|R+@XApPv2x#?x+ktv^=-+cLPK| PK!*'res/drawable-xxhdpi-v4/ic_cast_dark_off[RIFFWEBPVP8L/#u#sklkm{&Zmc]ϗ}ׯl+L S$-W}%^k7z/'Ii$Z`\RqL#@PK:n*PK!*4res/drawable-xxhdpi-v4/ic_account_child_grey600_36dp-RIFFWEBPVP8L/kWm&_>:ij۶a9Z 2J` pUPt!`1 .8ki.̪xU kۦÑj{ֶm۶m۶m;a0MoUlO"?߾}Ƴ<ձXu ӻ) W$ 6HMkt4\%e;-M2>6n7yu[# ڳ`z.=ޜ#i3~{|1_CEmKz㟣Fb%Hs=}daCo'陸zڒ&ӓ~kKGuk׶9N% q-ڜxW"z«(lTD{a.9g߽ =WݩBDoL2eݩ`.t?vrToPK'ZrPK!*#res/drawable-xxhdpi-v4/ic_edit_24dp]RIFFWEBPVP8L/GM(jHR6-7O[<I$GJ,Z'\IˆBSSlۖe4a XHs"T& Jr*#HN2&>m֌V Vf!xwRwy٘|bL o3ށWZ hYtȞPh/XޗAr8^UPP ^@ zP ֌ <T푓izjljԑųOsI1<0%W9ݧ/0-yB5wBSp&={hi.==vM53Btje7Tõ-&X=4!yKA0=M[7]F\R9ߍ!9PK'PK!*>res/drawable-xxhdpi-v4/quantum_ic_pause_circle_filled_white_36QRIFFWEBPVP8L/kuHrIyjz/QI2Rm۶^1xڶkָLǝ3>;Y8,s@|}5`zg+Qkh@Ai E<gA`KЊmY5q%nkxDۼb2ah5a XGIxL78J68dZp< `@wptz#:b iލ@4sFǠnPoTC<,޸ pD0* 7yyԑݓ~>qˠnV]UF2(#2(3]5jSQIe*+ Y7Օ^ BC.se.g\@*_.W D.e.grTXeBC. \rI`Jd[4ll)UwTkങjp&}[**D.4QOS׭o_Ydlg,ҷ$7ⷻGsN1nGb1M`@{",|c{AfsӀâˎ篍~'s.oLr>NxקlPd@ {lc5K @z;1K!PK9PK!*1res/drawable-xxhdpi-v4/quantum_ic_stop_grey600_36 ts```wu  H l8Z@ҳz$PK420PK!*/res/drawable-xxhdpi-v4/quantum_ic_stop_white_24 tsSc``wu   \ުyҳz&ԽPK0.PK!*6res/drawable-xxhdpi-v4/quantum_ic_art_track_grey600_48URIFFWEBPVP8L/#uHr#ɑ4.13׷En۶UewO,-޴052%L@0qc;w!xA/YD{ j/Sk$ocVQ uZe՚yy<{),ғq%*^ɭUXX\υτ Z'HsK򉫕&bA!qpʠYpegs{ݎ᯳dӓq%* :*h ䷊o\!mw |6Z@j*h.ظ1vwPK3lPK!*6res/drawable-xxhdpi-v4/ic_mr_button_disconnected_light[RIFFWEBPVP8L/G6$]]Amv6\Ŷm۶Zj(mضو=w5mIN0=Ɲo6Aɍ- :`>ȗ-RȣX5W5*%* 2e,BE-e&t!0cAC3S!((3ȫYK,{TL d;[A1c8Z )b.p"]ȟ~M'7]'զݷUE#cL"ziViU׈0D{t 2A@آ1w d>XHNu͌W=ȔW4IB(8s0ĭ zv> \C]Gu-JUǯJN ..?x蜵hJEd3ʄtۍTB,ʣ@u-<G17ܾ `b4~rC^q^Qq\ mܦDc`| 9בG&to!3 gqp  Pd tl]GY-"S`2D&ȪEpOԠQק(le*qo[> x EPF 0D(G@k1+S?Ο!"gP %h+pd&+4| F` d1]2"U(A{(hd#p[LPB_nMz3̹<*) dqJ4+ ȣ!0hu>п|$ C: @ D܂c.9&GY80\@dgbgދ?1xDDHT "_ÆkS:Nȴ[/+ %Tp$;W>QzPK&3 JPK!*+res/drawable-xxhdpi-v4/ic_media_pause_light tsc``wu  Q( (rtBw|%3PKuPM96PK!*5res/drawable-xxhdpi-v4/ic_mr_button_connected_05_darkbRIFFZWEBPVP8LN/GHm7nݧ vy YAă;b?}ܬϑqYbd~#=fO0#oo!oWy<4c-@Pe߄0=;ɨb|vm =rپ^HRy&ۑjۀDؑEIJKMr#ŵfgiH:R_gDyq$m-&7P, ہ4d#7DN2:鑳jJ IR4"q1,m2_M>PS5)Ѐ"`֙_i@ׇ w  A@AӜ9: E pGl{PK|gbPK!*4res/drawable-xxhdpi-v4/quantum_ic_skip_next_white_36RIFFWEBPVP8L/k'1? ۶A!'0G ( q@<  "P(PIsa~p ԫ46Wml۪r~E?'rw"D"mgϞGȿojً"r E AAHdC9t<:9X6Ya.j|R+@XApPv2x#?x+ktv^=-+cLPK| PK!*6res/drawable-xxhdpi-v4/ic_mr_button_connected_12_lightrRIFFjWEBPVP8L^/G6$]9ՙ+05@@J'L ?ctt宰&ߧ=Zz;o/=;aD6KMeBI,ETl¨LS Xb&azǖ& ؆ݣB! TM \̲,JJ)`I]Rɸ}Rjf|፭x;'L@a #DOG`p$B)\ @>(/x |PB6xmPG\`H+@I %ā+ PPK"|䞳W \qJroS>`40ÿWPKwrPK!*1res/drawable-xxhdpi-v4/permission_protected_mediaRIFFWEBPVP8L/GHHS>yG×bu̼l۶}LjUߟmLm/I<6'1+GRC9ec=7n#Ia'mH0G0BXm0&}oˏh^a9͊b b2%pƅh36֣~z!n4rp-jq5?C+n#Zzei?3g>Fa^5-} h %8/;cw$#7"[3F?XF4s5E4g.Rٛ^ >v+qcru+; fyB~A' G?a<|./?z P#MͶW'`Vy%xxE(gQ׊0XE/@ U;ܯž6Hv'{ɋsPKPPK!*7res/drawable-xxhdpi-v4/quantum_ic_play_arrow_grey600_48RIFFWEBPVP8L/#0uS7u 6RS# qёF"2 X6$ $;bG||r !_/F?•$I2w7V8D"mg7o, Q3_y_5*42U:,OF#zr = J|6~P`%K650ݾXX.RE$!PKբPK!*+res/drawable-xxhdpi-v4/ic_vol_type_tv_light]RIFFWEBPVP8L/G6ifN_58+u$JOt@ zP-f ԉ878Np$+2,6󵇷eQ dY'$٪7x=m#{/#JYHL۲m۶m۶m۶m۶m6ǑFD6칝5< OJB),MdU:d/tȺjYX8f_՝npl4DF߅`&mT 3Llzͨ b f.A wq^mw/;S+ѱo8~%K˿k/svV6םN(1_1PYL0z.p=Y?9i{: cӞd(y2-5ݰ3Vdݻlau N݌t1: aN3oK03Q8V5ypr(gÍM8鿭qL[t@LWͺ?`gW2Ī'7Mr|o.y7?2ۛhL[A-wlt` .ҷ7(BF(S;f@ ),̂|[RJ*϶- zH-)_3yqBjEO|5,Evy R#݂<_yW;FiuwKd.Bi;_zKHw<fs\o JJ_$JGjg erQJT1&7=k/ 3}6F2GiVykTTʳW3c䒱2kL)cI"TR&KP0Ri(-5=G{0&WZTS:/v1|d=AW$]WF hY/snR;Od|x4<->pyk9u!kSX\ u_<^vpK<Ԋ:xݧL&ݾY/Q"?!ƙDdZy-X$]v?+#Me\$'QZy3%b;A+֗p (tN!J?)-(e MqF#=otlTFTBE#Z< PKrPK!*5res/drawable-xxhdpi-v4/navigation_bubble_shadow.9.pngm 4[]C5R5PԬRUEMEC5jzPETby*b1X"mw]k=y>dg}sM110&=]mSJƞ%q{z{RZg3$sO/sG55#Wϐ9CJ#S3(CwpS~msQ}#;4+nr\wnɗp{[D| -v ÿrhT&7Ɨ쑟}B>˪p/0ujd5d Orʥ e%N4/ęQ!l1\&MfyrZ4grJ< +N2F8gi>$UaT9w%ʃƣ3V^Ft+pc.п.c}]CGvl$\e3~YjYC%A`w\5:T#DF~;s9lŻOsqqՊ:b#2 բzZGYdپ+4}uI]Jzߙ{J]~ {M&#F bM]gMh^C;w-:*jjk++!f1Fʅ%L\BT:(}d謅es!GK!^0ϵ?[|_db"T.f-$p ,?w,ۗvs XÞlNUř8ǀ#i$!κSS߾};*((6..,F9H!0 vqchplX AS\x z11;'3O k㛛. mkM- 4\fs%YK V{Q(nw* Wڝr/K_ 6Z5v[V~qX\Ej?[`ξƤP&ė.NF4͌ 4Xo?^y^\PNĄ{ ltak#ZAA`;CMJǴ@ϴzrLi-2J2 jAGV'`wg g'جcO'S$ke"We3-SLXr1q'csӔm 0޵Kcc"4ŝ \[[v侚ֿ `:C=$Sd\U'ʭ ~tUV#\5iۨ~ L_v׸u u#??/V /?yTfRV&2 ^f>(Ib:tJGğƇ*'9m2ۂr6*>ly@nƇ[FXt=WQF]2۵ksK)a6ne :؍?OO)AFO1?hjj 9ulm}=/)n-ɲȒI! 鑜Rϟ~.([ SNAf ʮׂZ<:d˒Q[?fl #9yFn%S*Ӿ\tK=<t;wmH\%28ml"ݨNy2*p.#ŠVި f`';M H_夎Ēƣz[Xxn[`ge 1Ybncvvv$l/i`mW!v$E֌hwE a\?dǼ}0 Խ%πSI_Ccc9oE i` )Yx:#Vdܫ1hQ1ԭ-wӤ;FX .:09&<::~D׋>%RF7@\TkKVE.JTƏA}ג'ǼS+aϴg \g6GCnW0ƶf`oOzg ޶ Uw>28m7XΖߨh*'wˌ3Κz5'R,K6ˊ23衻H%gÇc,jAvƾOO'H;\nt۩;˧`Sf57;((?Ϻ#dϷ*̝|wݔK0f,iH)K}e={Trx>5&ZG2˹_bq=e_k7B,XϳOSédMbF7&d,Wn DNKkcklP wk2Sh[4`Ik1.}y+9|47\@ K2so(P_u7 ̤o cco/P,avkhQ2M[w5N@SI3N /_ro3*'Zӟw -9fGy츳:ydxpbLg4-w>@@U;>O^6M7:U;͌23YRmSffѣ,&X> /&|S4m'R )sZ@Rޒq3*_YRM[s\|`iR~ $%_;֢Ϝ_*W o.Wuk:β28gğ ߿(k  ;6#`T2VRRz\[VԳ`z}=SfL^)E(UGXxrF^sE*Ҙ @jFU{xIP&M4,J;;;u,&E `,?ӎ(+2ewTMDė݌ʺ95DOVj: uςROY8!t$c{zsPĻO9uu?z9.vέ6z 3ؚ5}I|j -TV$2죠c >ҧ砗FPCr8o&ry2 +p6w.@UeXezC/.҇ nQ.@.u=s8!fJʾRq1J˙]0RJ_©ߝJL  5Txk]PX}y):Zٱ,&~.|Uգ䟨`'qH,/.T-oW-~ܲyVʟK\ *6`5AD6E0X(L!P0 wRFFS0 9 8?'G(.~:G􃚲:-)_(2lMfkX ?8{PK=,+E@PK!*(res/drawable-xxhdpi-v4/permission_popups RIFFWEBPVP8L/G㶍$bە"s׼"Ŷ&@ L A@6I$2]pGNQ{-I)zк_ . ː'sxߑy:`b Y;VHŸrX*+((n;셭#1l-3nj̷S Hp R HPd0dr,k=Ho P*|ˇL p1yPK,/WRPK!*5res/drawable-xxhdpi-v4/quantum_ic_play_arrow_white_24/RIFFWEBPVP8L/GM(jR={vFd@}D0m;M~G&-q6Rkd5f54~7R!\j[$y@$@42 =d!CzÙC(SecҒ*RDY"NrONebPK}PK!*%res/drawable-xxhdpi-v4/popup_bg.9.png]Ww8]{%VԮQ6lZ{jnFz[(ZԦfy\ss}?Mل;В ٩ 3_nZGO  U" 'ܿFAiNz֡k9HOMMTigD ;hŋk!sF,L-ɱM2aɵ il0&lEr dmH`R xjuù+&(~nQs~N_KuJ()w$|p+*@~`B^]Oz0/utГ YC!33̬+=0+ C#'ǁ?gc(#@.]ЭdzFf~ZIBqw3 T^i>b2~/ߊH]Xɽ2s?o~ߣd^lF ?%Td2<T. **dʀ/ .;P*>;bs2gŌfN9@.З7SAm"_d%)3BOzͳ_$݇lQ%7@ˎ&*JcY[v ړ(C޼adT̓ע8sAbO}o[e\+i-MZ c0. aO+c2Q$V AC}HAR>5{]oWN+?Ŋtr8RFΥp~aUOTAI W=-YHǯvg^[C"D阴/}>G97v y@ ulO{Bj8+ɰp~=֛޺-p9X8᜿߫9X"֞e8*δ܊LG2qkzAk(! f1D:=Uu$J}h3Aj\1= :tBPę*ßbbwϷJFIEa $ޮ񒲔`-l8{@%|pH#BwP*]u@?RHjԇ3WsoTJG4V7ݚ&}ȁ? 6`mL4VW#ם•&exQ?[ Ƀ#S$%n'4g1|w ߭~I=X!_ txÒF֢σ5 W;~1kFF#uh(^!6 EyI<aC- m:Ibe'̠usȐx@ӥН"׼x59E٠s]\$Oxg̞ &|2Ӥk dӣ%/QJl.|q+## TYLiq0dg\ uv*B0Y) -踝^*V޻3wApF#K4c{ %6Ե[wZmUM/ 1`r\jo\nh< Npm#Z-\"ɥL:xKEs#M]< 2gXh >o h4*_ָ#@gK_ WVX34ĥ8PBk Y 9 ck!xHѣfM.ǣX%oU[&e3zu sD-=2oSQ9e:vGnfAgS$ *uΩhNnFQt_!+­)kf{WX߰͞'kr%."t"p3W2E7ivwCz:VwtKvx*VXd|Bhek[fSHG- []cGxmDyT(4`@?r,Mxf}}-/DDz*`**w njNBsşN5spOr6]BfqKO3Ve`_d14Na[0 Z%v+X+jG`_9i;۝3֓ɇ$]u+(aA{bʈZ-Mr,^u?+5&?O!)#k zynɕ@0B%&r/"o6华fsj6P\O#f{O@_%‹42F ce U-KoDm2]"w= W9o,[v+Ek%au\џY !ccfl]ՉSM }_D=y:U_\&*5_'xJ- B9:ݨ;kq VX)ķDe߈bj(p' Zbx.N4uǍ%hu 'bԟ}Kè2ORHޓȰ#aoU{~#1XstVOOB֧XZhdpv͊7qEIw.(STDkQ y;^*1xHA Np/^'H8OlxY/ߌ\g&eh-[3b_Pu䃚Tڽ\UJjq n2 MJڹxK)G bZEq&^6p縅3=!K[>Jl<7:Wˬ'¸QQL^gZ w?5xuDv=rr֡2n]7,wPKƌPK!*6res/drawable-xxhdpi-v4/ic_mr_button_connecting_18_darkHRIFF@WEBPVP8L3/GI$ǍWSVѬGFFe`QY'@#lJ1]8c>&+2b9r~\vgW02ͅ[~[}!4嚫{sI]+~7#z&+l`\1g[Avһ`8 j=ąA/6R5`-N0' {IEsP/nEA9}^ ,7(Iy/T P$e-tO>HIs  =c'r}JOJ`O1|dIZ,Qsσ^PKFMHPK!*#res/drawable-xxhdpi-v4/webrtc_video RIFFWEBPVP8L /Gum$ɑt;՞~D@`4o~%۶q/ζ wq{ T> M9A\גƪ;W#q(@Qfk:zZ}#Z)l*QEÔbF0^XVXD&-53L& 8LB!JpޖTѕi2M@>q5ˁc "b.}s |vK:wUx@H|0)PK4$% PK!*6res/drawable-xxhdpi-v4/ic_mr_button_connected_05_lightZRIFFRWEBPVP8LF/G6$ݪa`1Danr`1âWe:͓ f1(qٿ+^#g)| UKPoqrO&ί+ٕ`Ydi?@FJW[basת7US/^X,MAUdarhԭ{Ȫ=r&: ɫEeY:yH'N R?O]zx/&>31mVzyf tZy_#37jog+)/3#FqYDց=-5Д'2]Ƽљ5{evTgvi8C l>ڃgy_۶P6H:PK `PK!*'res/drawable-xxhdpi-v4/settings_storage tssc``wu   jdIsxIUg8X88+M2S/t}<Ý2zkԷUAPK[QNPK!*5res/drawable-xxhdpi-v4/quantum_ic_volume_off_white_36RIFFWEBPVP8L/kH$Im"2n > 1 ζm۶m/۶m۶m϶\ݸm$I2gfう@2o>X"֣8v%58# U^/olVRyx!}>L7b!^8o9N>mPb-3^;hH F#/>v~I#6z$ep#XlU9WUG8]5ĚjݛI-vC&pi-Tb8UN)/FS)5$4Ǵ3J; F8VW.@fF%=`8uH;`8uY}pهMIt4 lV ͊Pw  cyN( 9|#= .)WuIBUykrϋPKSNPK!*6res/drawable-xxhdpi-v4/ic_mr_button_connected_30_lightvRIFFnWEBPVP8Lb/GF$I_=^ I!dF$dh?c[+tV Ėˁl=}v~v!Lko[:@BLONפ Wy<2c< /3YX?j$z2BwE>('L]%eFcL3^*U|V)-+NKi&ӊE`]j{]'Hl"9$CMyUk+Hwo<@ʆ!) u1F#ݸC Hڈ?YAoJ=bBdAW"҃W]%0$ZW6Gw@]a++&^+O[rN߻O[A@PKwrPK!*Dres/drawable-xxhdpi-v4/abc_textfield_search_default_mtrl_alpha.9.png sb``p *@$֛)$Zo eWĤh0`f[JCi giIO 6GHHϼ%S|S@=]\9%4PK.PK!*"res/drawable-xxhdpi-v4/ic_vol_muteRIFFWEBPVP8L/GI6WD{VkXW@ٶ}U5ٶ5ٚlFٶmɝc7G@ Uݢ,fěMPI'gơIX,cr4uZVf3JA/X2oVa^5kCszP'_I7+gK;j~'`F7ls_kY:1v9|8W`)wCgg1/\%7P?a  f %."ܧ%; |%+|)\M`bƋM"TSTD/oeb~5ӑtftF =Z]22Z N!gV;R6l._ y#$(ڛ$0B¿'. …GO\ <[# zIBpsff PKj|PK!*6res/drawable-xxhdpi-v4/ic_mr_button_connecting_23_darkNRIFFFWEBPVP8L9/G5HrIyHΈ !&d2yMg 5ܩGVn #yy:'cA^+;S+Dg [hEVOXC܍qt tUG-FsoVΤX 颲_^Thy1(p"[)!K䞣0XN3Q:FSUr#[hKf؅rK|p*.#I6[E e,Z̸ ACYV_h`>g_9|# .V2|.[SEWPKSNPK!*3res/drawable-xxhdpi-v4/abc_btn_check_to_on_mtrl_0151RIFFWEBPVP8L/_ඍ$vuMW:@Hg%0m h2ܶ$fޢf!dnchzJWcqU)%jl/jI}5^ sPqƋu\1R\u1p􎡓|0"Z+  C;)2>UG"(}V]j4@E.ikyFσpؚl-[!=Ma1ҵ)&$\pRl;B َ 4#HV|:5L#XB(Gp PZH~F^ILpdK @ p!4~j+"R{PK0_ZPK!*3res/drawable-xxhdpi-v4/abc_btn_radio_to_on_mtrl_000FRIFF>WEBPVP8L2/_BmS6r\.6Ӡhҧ4p%>  `aD aHMhȲm;m')3333We;ןVDmˠw_kO*tec\X,\$":uz}>7'rV 7Mn=|1ID [hI`fC.SUfS5!"DX~$|DU"۱P|`28q xF$k!fP^Tya+ ~r!!"8k 1ehh6awd;zn~&rv8G?Md:2}lt9?%kQQ}ru+HP/DsWȊGZ=K 5BN;8K){-ci #ࡏȾp*{Sr"0Vk/8%u#`F +G/H2yZC <Hp!jAYI(c\h'z^ #Q~~og!x(Z񩜶52GVB:'Hp $.36d4^,Ic ڊUSEaܧf%PxN1( B®oE_E/r;s^keέ]Tw5W/V_.ޮ.ޮ.ݮ.ޮ.=]z6KSvu߮YCI8PKIKFPK!*6res/drawable-xxhdpi-v4/ic_mr_button_connected_21_lighttRIFFlWEBPVP8L`/GIn#I;̳"{ECF 05Qs<*?cw,N;1Lw#$s~Ek×hgs~>5N-LQ"zZ1[^(- vʊg۵b_R_+섶PQ LEnE -"{PL`TL+AdWPr ,j-" e 6-ZkjKm>W%dF^K]P,E{XPY4U7.tM \`9P]4ـ}[?u"7K%PK zytPK!*Fres/drawable-xxhdpi-v4/abc_textfield_search_activated_mtrl_alpha.9.png sb``p *@$֛),?ߐHRy! LLL @Rf[JJw@c Ve egxJaq&@:<]\9%4PKӶdAPK!*6res/drawable-xxhdpi-v4/ic_mr_button_connecting_15_darkDRIFF<WEBPVP8L//G 7_=!"|G l$),hˌO)_v:/}e~qh~DXϑCR!ß]z+cѧp<鳰< #枆ixس@,8ʀG촐>`JHqc!̎*3Q"s0E9`d3`"簆aѤLΡ 80[9!\`KsPIso"I"lȒYF"N$ $ao6P^:3 2xj2,㻐n:O&4&m݋:PKЇIDPK!*5res/drawable-xxhdpi-v4/ic_mr_button_connected_03_dark\RIFFTWEBPVP8LH/G5HrIy&``EMg~ѫw^? M]#ϻGWP hPE[JߢUw#תwd |JkyqThjx簙;ZSBvhTF!2N5jVf v IOhqfB73MvH.tÈBf82z X I: ;0P> IBy3cA|Y4dSZF 5-cx[PY=gm PKa\PK!*:res/drawable-xxhdpi-v4/abc_scrubber_track_mtrl_alpha.9.png sb``p r@$Mn8=Ry9@A` >Ũ9H$300+9 l0ˠ|FRtq 8FF/ߖ/-Z`eW$) PKM\:PK!*6res/drawable-xxhdpi-v4/ic_mr_button_connected_10_lightRRIFFJWEBPVP8L=/G%Inݦm + 4CGD9J6ܢ ?c+T!BpIHS$Ff L]–zak BՙW2BuPU;`%'[@}IpIȗag)/kY #T,*  Y$S6gJB`>셭#1l-3nj̷S Hp R HPd0dr,k=Ho P*|ˇL p1yPK,/WRPK!**res/drawable-xxhdpi-v4/ic_media_play_lightRIFFWEBPVP8L/# 6RSJ~|9*&5IW 셀OȀ!$ $!;C+ITeopEn6moF 8XYwSf4MkUie00uB#6X+555jG5(zm aX5,hKl(;k`}1X]d]ɥH,8'CPK8gPK!*6res/drawable-xxhdpi-v4/ic_mr_button_connected_07_lightRIFFWEBPVP8L /Gpܶ$1a&`OHt56ϘcRVZ)0sCbfXw5O`wEUB*BTzg{Ӏгix,Ytu9-ZbW[!cHwdq~vq~Oba8@ ( mivpAhsxP2 0Z9x?ID@Ol$Jb|ĕGtTtAp҆W!.Zwɸ:PK<#PK!*6res/drawable-xxhdpi-v4/ic_mr_button_connected_11_lightZRIFFRWEBPVP8LF/G6$ݑ9ՙ+ 4COFwɣ ?cu7u0$'٧=C;Ov ]*B\!*-TBzYTݎ摡@wT8VUo O# UAUUJyXFYGGdR\4 J@ $0RŽ|Pd[_(RpHy8(RlIjL.y@[{>: P"e)_Vf%b\~"S97-5^fB݅{as^؀ wݰȽn0t/8MNCp6:-D{ 2iDtvL#ai6p--jNU+gt/DsnaQ*iJ`Xdn1)vPCdF(Gʄ)8hh,I: GR2ڹ"Ut6DE^/Et PK21,PK!*7res/drawable-xxhdpi-v4/ic_mr_button_connecting_14_light8RIFF0WEBPVP8L#/G%Inݦm+ 43H$#*ܢ ?c+a7raϑ'9Of ] zqVP)P:YXy@mHM ֔[13E0d[9Uu)Tl?قr?U8]AFx:LA[ #Us}!\arǪgo*dæ{@e&g7sj{R@ %OIHJ.ً:11({PK=8PK!*8res/drawable-xxhdpi-v4/ic_play_circle_outline_black_48dpORIFFWEBPVP8L/#f m׽mR~w0DK a>/E/@ܠ6m*5zgrYʼn;w&.ww!zVE}Y7_/o^ڻfD.*eؚco5)]̯ Otp?w^M@d^]ADvoM +4M 9jXprlDV}i)7;Nl]0r}ӊ)zF"}NYF>`G7'Ǣ uQ i֌39}%cJȳ"=TԐ m<,t: vT;yvO"ar`n%-$rbI,(N%Gzڳy:9W<3/yЂ< zPCN] $c NHIedr륾Bb>-f=w5ź:Ng׷ҲLfѷɮOƷaݰ#YFZCe$0*חߚO>zͪ# Y/1;2Z:bb )bC'I-&JYnAGRG]h"Q\PFrZL1$a1&dՓ,LUi`W%:-)(#gYt3t9DN'} ga:dGyUzo922>)P+"`ג"^/uIK-. H5<1I~%%cF<{@x8ji'Ce)wIH.)P"yx_߀fpsE.)dR@q T "PDp0پz(y*8 TgZϴׇPBzW6yV_۳;T_F6u'2< qߕi MP6lW#-L&{Ր'iiՀC&c;4g$K~ZƐyouyDDҨ-?d=-+#Z]meAi^$ *zvܒBצOv,rg.C. /muQ}خ?^ 94'C˻6>Dn/Hͧ.gUf4jJ5h呗^YYD]sҊ{. OkF#WROPϋ;r[HMha+V2̎+waK=s@`j{0) Aa'  !@`C@hݱ@*OT9QQawS(QNCv%4: RAe-~UٽSDKUh|bA@ Q@ yغeB/1: H7фy[& {4[;%?ۙ'g,"vtPKPK!*3res/drawable-xxhdpi-v4/ic_more_vert_24dp_on_dark_bgqRIFFWEBPVP8Lz/G $)?{i ߴą4[m(;i{O?BDH " s` `ORlC-[ Lt %:Hԓ03PKPK!*0res/drawable-xxhdpi-v4/ic_expand_less_black_24dp{RIFF|WEBPVP8Lp/GPm?#@ȶM #{ɂl҆wͶ_WjhB|tl wNB8l-֎P%oiW,j%10ᖱ} ܜvvoPKӽJPK!*7res/drawable-xxhdpi-v4/quantum_ic_volume_off_grey600_36RIFF WEBPVP8L/k$Ir6t1@o9DHm۴m۶m۶Ѳm۶۶{m'7ˑ6(ݳ/?gX wRjs;wRzLxYCq b}XgOp ͿSVߍ$CIlf!cԿ:XWDןqQ'hEBi ®2Yj)?*2u}A=-_Lo/UD*k K]k ⏁<ʂTvjswІ9V5TRqNj~߸Au kA'PKWy\PK!*5res/drawable-xxhdpi-v4/ic_mr_button_connected_08_dark:RIFF2WEBPVP8L&/G5HrI=Y" @2B&K&ƨ~[osޠ~*O+/=#`+MTJd{3H6]fgA`!RИV`)czZ!KvCEYH&Zud ]H*DgÍR+Py)lIC^p }H!5ZI#o)>–R{ PKV?:PK!*6res/drawable-xxhdpi-v4/ic_vol_type_speaker_group_lightRIFFWEBPVP8L/GuHrI4NhEExI9ʶ֗`6Y7ЯYe$P=kX ᯂPEl6zvĉL{mfQG/^D+$5^+^WtBPD굽R^ޡf`օu^F?9FKN0yY*N4> p :u=D$UϹ58h2 y؋z1,&Խ,1Iԓ㚻o$$[z%g&DO=3 P֣aMB[OF5IԳ$Hb$zWt HSo;*ӻV؀#].QH:y8:l>hM6\1 2n 3JYz{m>o[o_5V0]C:8!:E停9&({ru 6E:)IPKy"FPK!*5res/drawable-xxhdpi-v4/ic_mr_button_connected_28_dark}RIFFzWEBPVP8Lm/GuHn@N#e+O #$ؼLPK!*)res/drawable-xxhdpi-v4/ic_media_play_darkRIFFWEBPVP8L/#M(j$IYzK"?Y'`#F #/Tm9bM.E8mۉ.R zsR34jH|?#H / >Eb0|z+bHq1˜dḠh3<[kHz,NwK𪙸iXD,r,~񨶜AsÜ8sqQOs甽7y2*PK@ PK!*3res/drawable-xxhdpi-v4/abc_btn_check_to_on_mtrl_0005RIFFWEBPVP8L/_`ܶ$ޚ``J#_SIܶqdMW?#! %H" `:d# Y}m|n""qe'}}|~)<)dap u]ep+v'hU.]꿘TY%g^bW{^nWE{ݏ&PKwOPK!*5res/drawable-xxhdpi-v4/ic_mr_button_connected_06_darkbRIFFZWEBPVP8LM/G@l7nsS#ÇlʸB+P!IqXdI(FCCO~3a<}Ԅ=IC ~wzSu*OWR)m"}oy`K5+(Va=wvo7u=Z"C'[#L LsF,PJ2@KȻ7Dgwo&]sn/[:\JRT:r¾Z8'8jARܓ5ET/$2m\\dA\ņ ( X2ܞP;o6 Ͻ97*͛|QO11uk멠&:E~ZB4 |4i-):#\.™h ^P '.ςC]7aT#wxb)S~bc1uiu=Y #+jڴfrQDTmz5`uS(dG=mdtѾi[s BXHY}k7)=q1:V{,& 6Ņb !ؑ! D<+4_P>j̊ԯ4m R#PP; Yx->jWVF=61WbwM~| ˠm|\tm/ (tAu2FTr S 6]A>|_? ݞ=1~ø+y٪rp: 4%jGa4ͤMjja"$/vh~E8kLFESGMLHŴOVc %.l86v%;ba߉XM@l%1R8rznZK7T"ZRKĻpJHYHCis?heMmBWyQ&0_w>2- :-KmMs>>ˏ$:`vٛ_#H&^_$RmB~?`Nݥ2^BLVfFnN@%u8RZt6Esx߮;|ޝ[ٕ'cBI779]~.^^۲b{O8TOpuz8TWXc-R^;5^KW 6;݀|ds&gOi8d~2oؕ9iilXNyO}gfp2.~ZB"m@>DGw8YRt NWz47 uYlDpwʈD\EKpɅqdY;z5tMO&M2:Qr|݀j[Gkb7Q^V\~|2Mx4NbJݏgvMy 7?+ʮJVqrOvcC2NJZbVq<.Ktc34'+KxZ z٤N1ؚqLko&O0 J͹Q/:&GbT@4VaynDjQq"XFY+?xm Ͽ%2’FMY+96u3QВ仍./=ٰA4[[P@$AtJKME;H{PKfwrPK!*<res/drawable-xxhdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.pngmVy4ԍ ƒD&RdK2HȚ4g0 CՌdkQT$dK&d%{ws>M=GCH 3}EExIs!w;BLvw_& oO#;@T BA;0݃~Dƫ{RĠ.ge'l :Y*>V[nFɒMdI eBUt{5`w8?D,}=ݪsg1U_1&';K77c~??iE?rΎd658by׆p T18?0X9j?xuV qō?] `A@GFH_A <'-vdxf^cΝ72{̫/Du:QU`\7P)D\cv-횊W?ܶnA/-&iaO <{:4kƲ dL(ˑXFp2&9dLH͆H N.$&,#Nc5 %e~5Z5Op>F5FԄSF7 1Q|7B39A( 3h%ZI^}Rgm)68 2,^jWR6&zC[>[•%y 4 }˓Y2D= V+`|>2xVcрRh:ŨQ]=W˴mM&xXP`S<^ $s0a|?yc2@at!#7~B{,nvjѶv^R iiyJb[Fdv؄e`1Y6 ?gx 4^Kc~O/!^V\Eo߼RV d6Ӧ%bZö[S-h0#@/lL4cqZnvJM4I~Jt;ޭ5STW׀6﯍A0.F_X8Bn뽸T,Jcsu̜``Jilb6 F+" ;R[* tЁDpA] ӋahsmBjp^M8@$>Tgkw$ p3?sjک#5n> rkH|Zn);R PCWΪZ4'3*V?tj @(:XZPM$Oty9g|klj ?NYX0ӋY0䑡w;㐹]bbXjhҧűb6]4'zqy/fiZ.]QqݮeJB#IT⒲hdeZ]ÄX:RWtՂjs\ғﺈ^_c~ uF=\ 3a(a ?}"biaw ܋eCߗI٬M5  }0ج?o(KP4ܮċ!T=tUWHNGkR[rȫOE,?RZr;p\N '{ש]S yW NYH6 %Aa˯7fyVcXg|GKiR$+Kɶ{Λbg] v!QHQ!F7~"vk }2$Њ:! pBU?ZLsl߻U6_{E/c?J)-1F.W%eۯlWTvbw'm?eN'$6 B|/-D>  d% nHpAMrO 8=>q הNtdpK^%6\)PK%IDPK!*7res/drawable-xxhdpi-v4/ic_mr_button_connecting_26_lightFRIFF>WEBPVP8L1/G6$ݪa v#d&XRR T2Oϳ=t3?`ߎKxٿ+j^ҫ0B*0| 3B,oHG,aBcʌG F2ϳ";@+9M̼2.'\ @d).pa8L0d p>̝,a+22: ЗIe·yR a!2.ЇaHAf&>88Yf AatQpp! hpHstCBc w4xÞReA'ePK NKFPK!*5res/drawable-xxhdpi-v4/ic_mr_button_connected_24_darkRIFFxWEBPVP8Ll/G5HrIyH̪dL!p'xM@3faGǂƄlV^z8U=kf4gVmEk",ݘ T IsHmXJ+K]̟)*HE i4t6Ee1dR.4;3ѥ30-ڒ(c$9U. BgIPgJR lr$P kFC4Ll8h I|`A'=PL8B/u/}`A -[:Ll{PK9bPK!*(res/drawable-xxhdpi-v4/permission_cookie=RIFFWEBPVP8L/G6$NgrltQڶ*a3Hq[/e;/\-,YDj+nqg[@UBp8=!! tQ F}S b4|!xaKt LVÒL Lt$lp8 y.`c*'z;*(H2*T7\DukzkA]ꔽ\ݖl]j2τ+_V?7:gdC6X:yAD6L+ +d슎'E= a& ؕ&ɹxߦV_l >s='u1΍GQ 0;^#Gi)Vz H)vYCPKPK!*0res/drawable-xxhdpi-v4/ic_fast_rewind_white_36dpeRIFFWEBPVP8L/kM0jIg'<3{4 caPر) !VHϫOmH֟=pm[ּC_6U wO*{04K8 #xc>Ǒu"P(׀pVNCd y1CD}G!yA1Ggۥ]GHR3Kٮٕv/{NC}Z26ze)i0i' ϣDži ЪWy00]gra6PSVy3[;~۱3qѪLtLψ1 բ0T_PK?PK!*2res/drawable-xxhdpi-v4/ic_drag_handle_grey600_24dp tsa``wu  Q j6ߚۗzu{료PKf64PK!*6res/drawable-xxhdpi-v4/ic_mr_button_connected_06_lightTRIFFLWEBPVP8L?/GF$I_șʨ=^!˄srMglk՜j5bM}Z~x8v]Qxub^!:WH5oX~ [n `wbcdç  5L=¢/8"[2nBwKRp `I ȸ¶"^BfP[H 5`.2LA" IY Zȅg!:%:؁|xAL@L{d-r0XA  Ɠ}0.sz "ϙh 7|O9٧34yqPK)IYTPK!*2res/drawable-xxhdpi-v4/ic_skip_previous_white_36dpRIFFWEBPVP8L /k5@nI՜{fwKAlڶj?dkhZV@ZV@@)!џYw;is-pZ$e[[T7@.$qDc-,рι ]vD#󎍐)Ku?yMX1sBv9єQxTa pM!6aح>,Hpy<!eH ]XL:6)>gQ]p5jE+w IU$~P݀)#kI"c9$%C|q@-〵pw8yLnzIx|A}~}'VP\L1s--]'r<ʫāG07a!@}H"jo&}Fh7%IT $69(7=|]+?SD;;R4];도qþAgbqh9xF*+o ᙀn2ʤHJUsa?qm1f=䑛W #טD Idn>H,D3#?%I$IH_ͣ6 3"8 `B H#d:jW{lXf"6cFC|ov(#= E : 9]( L#Hz^4gMH}O"gV-Cx@:G۩PTk@v|܈L&u=:i3ER.79~=\NS}cMnٵr{ >"Rd"Cӛ2~ )l(qqg$[q"* 4j2f+qy1;ʐ")Ÿro}R Q^n7:&X}Ps8}}s'ʋm܆u l+>.>Zo )a~gGL{d3%uPKf/PK!*6res/drawable-xxhdpi-v4/ic_mr_button_connected_16_lightfRIFF^WEBPVP8LR/G6$]Yә+ 4s&%ܢ ?cvqv\9] dK~hG Q @pxGN U퉎+WZT 2U)@j 6Nm&yJdzhNfw< `w% Sh@CeJz@ғAHK),g7u Suw\Ps@:J=d\|PO:2LjT9VU2%{pCy@&P! ss@=lCr|d¨("R3{PKkfPK!*-res/drawable-xxhdpi-v4/cast_ic_notification_1oRIFFWEBPVP8L{/G5Hn$ɑ_i{d+mƞ}۶۶N.m^}ڴIJv2-Qs_7Ǿx!VwP])CLK* /Q*a'CB~ 'M* 6%9Ȥ쒄BbVI!~UCX&g{[#T&cjpBls5)a$9zV6P9#d>,TdʇRUr-mO HuǵP?D8*P###\d üGT+D*ކ b-G …-|.ÒOPak?.TJb}(B·"/<{Y(BlBi_PKBPK!*1res/drawable-xxhdpi-v4/ic_fast_forward_white_36dpxRIFFpWEBPVP8Ld/k/1? ۶A!'0G ( q@q@ Bp( J0j#Qo͟ "?& 4nZ]uꪇ_@B^*mj~<]z?!;Թ 6Rev MA!f@+AU*ڌ &@S U*7=7z06y'r$*3`p$!ic|l |M7P0Iս=r1G}C}aw5j~~쌛j6s2Ǯ8}| Ai̠ 3>ptf |_OߵȍPKh}xPK!*&res/drawable-xxhdpi-v4/ic_cast_dark_on"RIFFWEBPVP8L/#Gm4G<ҶI_m0dwWFj$E\\kR_lOmYQ?X@T;66B*$6&PGB?u.⭞6'LG$GR^&' VHPTK&eB܅. HGHm۴۶m۶md &)rObl畾i \:IJY|$)MA&g-سҷ_=l7GfiH.^}h4-{H% %j1eY@n wՁ5(u(x.7}t|Er@.0_8`7-+FEwM4D_\aQ5r'0 IK/90b̔$'>*$i4.aK*3e>PRieZ?N PK?'"PK!*2res/drawable-xxhdpi-v4/quantum_ic_refresh_white_24"RIFFWEBPVP8L /G5@$I?ZV&mۦmWTm۶mۈYضNڶqmI2{MRRe/N0yD j#.7`/Xey$Nk6zP֖3k7X_)/1.~0 L!=?8Ț1t~p  | Nb ( loЖ(n}OAף{0Se^-:9'Pχ@Y @$ 5Y6M`_;ӏIKCM&@y $SG E寷v b+PK9ZSNPK!*?res/drawable-xxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_000@RIFF8WEBPVP8L+/# #IJwwHCeD=⏝K5"a$٦um]C8D۶3sď~ؿ^EჅ,4 nBBkFemy::gVKGs^9Zʯ#k^8Z/-% tP>HttCcg%:ZIN^&rGHMjKNɁ#ͿZɹOQۍo=7oϞ<7]@b!,Jm(ݵ=}Ç9ӞМ|Ĕ FoyxguK}PKr qE@PK!*,res/drawable-xxhdpi-v4/modern_toolbar_shadow`RIFFXWEBPVP8LK/FQ9GWbm3l;:lSS8yX. E z@"*ʅAPPK:e`PK!*6res/drawable-xxhdpi-v4/ic_mr_button_connecting_28_darkJRIFFBWEBPVP8L6/G5H$nҹ@1w5a$Xr &'`3Fch3xL:O5?Ͻ+MB4|-Zhe ص zJs g-E;[j4kw%41vG#v9UV1,H15  OdPĉtbK] `MհyJa%,'&AVHR$9{P'1c )S0`L1c )!qJ .J\WB$Zq pA`^JC-%n~`nߏB]A3udqO$-sIMr|21`C+!{'n+,c(.cTH'Zq;Lp1/Zp:@T2՛XAcO"p)# @&_=$ـXE\;_7QӬV ^s<|)utO_9Y4xxb p(SP0`0gt ;,~Zu=ؕ*D|l 12x .mPO[!"nlvRѺc-r35;R7.S(Rr9WJd{3H6]fgA`!RИV`)czZ!KvCEYH&Zud ]H*DgÍR+Py)lIC^p }H!5ZI#o)>–R{ PKV?:PK!*7res/drawable-xxhdpi-v4/ic_mr_button_connecting_07_lightRIFFWEBPVP8L /Gpܶ$1a&`OHt56ϘcRVZ)0sCbfXw5O`wEUB*BTzg{Ӏгix,Ytu9-ZbW[!cHwdq~vq~Oba8@ ( mivpAhsxP2 0Z9x?ID@Ol$Jb|ĕGtTtAp҆W!.Zwɸ:PK<#PK!*&res/drawable-xxhdpi-v4/btn_star_filledQRIFFWEBPVP8L/GImMz eg0}+?G?ŝ!760 )$GRC_k3S.=H(OzǎzMoTaH1T23bQɎ K-}D'5Q+,Ҽ=)%;9Z9T^ Cc]1\/E~#x f ;HaCh_?hאV m)r Oڒ;u jmYqeܛ*lOFocM2 jlY3`fsPͬq7[0dܽ>8MhYK(ܠIhnR>`BYOR>PKwg8PK!*9res/drawable-xxhdpi-v4/quantum_ic_bigtop_updates_white_24 RIFFWEBPVP8L/GHr#ɑgdUSXɞm۶m۶m۶m۶m۶CIҼp Q ')"1P lƷ3o33~8z'9M va ʵ*AreOB}s㟽_=hJ ~)IR&(aˊ+(nCCq&q'zVڗ;6[F.r"ReM#8?vyg#/k_t۩8}~B'#ikPKlOgPK!*5res/drawable-xxhdpi-v4/ic_mr_button_connected_12_dark|RIFFtWEBPVP8Lg/GuHmn 02^x@cH=Ϊt&QNc&\Xؓ.4'\pp~-|Ogx˜o߃ p  b& 2 {X<F-yA(hUv͙oB[$(1$%9PLDq4̓ABX' \"Osע؞%ZǛ(-itb $k,5b"ɵT4I5Dxecd!T=HMP3#-"XB@ `Y*r$jW,CEsʐLc9|n_cx;yԟ,!I.PKR|PK!*4res/drawable-xxhdpi-v4/quantum_ic_replay_10_white_24aRIFFWEBPVP8L/GIn$9WsEdVUM Emu4#ӪV50jgQd}b}jOcx@l= AhW LY85crTv^,??\ X_?2Ujimטh \cnmsZæ =`v=?scHaJ*dl6\̎;ors1Nj*Jhj"V5P8[ 1SE6e{R^IVUc0X?~/?H[) 5 9fA+??To%,FBOiP۟+ _| C;cn'82`:qxNKXfj}'h%'߲ .o _\ՠ_!Y>cfG+ > pbqPK۞iIPK!*+res/drawable-xxhdpi-v4/exclamation_trianglezRIFFrWEBPVP8Lf/GU@n#ɑt>%On*sNJDɶh5(@ (@( lc2h6.rDEn5X /ѷres/drawable-xxhdpi-v4/abc_cab_background_top_mtrl_alpha.9.png sb``p  $?>$ s@|CV"H$301q*9X@( b vf&0! .!^(`qd<.)!e[Mus2r{ztsYPKa?PK!*5res/drawable-xxhdpi-v4/ic_mr_button_connected_10_darkVRIFFNWEBPVP8LA/GHrm;nDҖ >" B%J6EVvvdkYk󞤶ϑ~=2i--{~{]iv|iza[H6[HA5\G2,.@@%9 ,<5@ׅXQHJ3. pg̔֙ 4giQPf9dg0) G* f8rf'yQgҝ)șן9!}鉹|Iwu~A+~z2\jxWPK}/[VPK!*;res/drawable-xxhdpi-v4/quantum_ic_closed_caption_grey600_36yRIFF~WEBPVP8Lr/k5d7nKh;8@SIW GASut]m 5E m#=ԡAŹRt'4$^(Y@&. fH#:JҦK!s@3.W@-J2ag3T ^# 5kqW! R)W wK@)Qs/P,s pxҊpثXzsY3x7MCك3=CTe_eg`+r_q )<ۻ*(`lov];'ɣ`:oFw8)p&?t{Ѻ8Id}8$ԥ"Asq~NPKO"0PK!*5res/drawable-xxhdpi-v4/ic_mr_button_connected_09_dark@RIFF8WEBPVP8L+/G HmY,l$ )c`gea~(lCƌ_a!zz^OjnB] 5k q#G2s -ln@$ >1*l"֑SBRga29o"lĥ< "aSH45af0KvdH;)7hdX%- &ArHEa6H, 8Jt%:-< I{46ELZ4EQq o5nP($MEr(Q1a$ԎxBԥQ HiHP;P)iңP1Aꤡ͌"t\ 5P  l!q oh@p$i{  8!zXЭ %qQzkZN PKMPK!*8res/drawable-xxhdpi-v4/abc_switch_track_mtrl_alpha.9.png sb``p @l$_[HI UPzŎtٽG@*& $S`JId.24H 6e``tq 8vi/G̺3.|pf#FbD?~!|#HHZu._)l]tWk5=jc=gz=y^b1%q6/XW\9VUm.__)!ǡ'ns8;%,j\愻u3=fKkbVȪ,a1xԣj8IŶS41i|ȣ;E7 o>qf{o}uƾVH>g^VXº}ZWf\fiɪW+n޹zu XSW|Wa,aYZcͬSte~Bl՛Mi7=P:2܆-R+b˹-ܴIsL|VD[?U]-ԪopzۻyK;u-> 6=7my–Χmyƙ~v NKD,ޱ1Ͱ{g|_77&qN^/kPD1~3nKviNgsixwמlհ " +  lߊ$?Sw+`Z@)eSBPKȣ%SPK!*(res/drawable-xxhdpi-v4/ic_business_small tsa``wu  H 6yI]S7 |[9XrXE{߼=/@3Y ^;l/ ]uR=^$;hQ#IN# \$ɸ>H"f'IcTrn! lJ3'$;qJʃeƠJkM^ِom癄n5.sRCP%6ɧ> uI3-E]_KӮ5&.jw3m*qk)wxvg8K}MI7hhIC0z_78(ܵ*yڵ~{#3lWs'xgJ_' UuoYhK"Z׊ =|kLmk;!Zl'g47l+兢 }VRQ_%9Gęvi׮`%Yპ7d&KkBn-$F5h 1`1G[]Jy ̴P9x(}뼩gz51x QRCa+:Nq=G"^6ަpfygoY A d:ïZmZ;"d:\|j>IbOu`Mhu:Z O͏>mg^LOB=7_<8s6JIǪ<7c9+U]Pá_pswAч-ͯ?Os'PKf PK!* res/drawable-xxhdpi-v4/btn_close7RIFFWEBPVP8L/G50nFR}S 鿒G6HHpfgm#E1̼o$}mDZc/B4KUl%HV#Xe\%]\ǩNNrCmkL+f*hs@?POLQO垪[ؑ`♌qvDPCqCـ1\)oR!pt9P~ή"\^Eم_ÿ$PK^5PK!*Qres/drawable-xxhdpi-v4/common_google_signin_btn_icon_dark_normal_background.9.png sb``p @ H>w{HIر H-+If`aTr @; 8+HT1t\qsMOǐ[oofxM-mrEÅ'NA;YNBWfM~CL9`C{ˆ)RN=M/'WfwOg%&P:)39ٟN a+U.ðS8▬rAΣl;>iSn&6~תdԧ߫rHNͭ>yO:{6"Liwko4ms5͗:8T=պQ5oP?,mͺy/| ~ڶzR%s;Fٱg&I^rN,Mvo.+fn ^ ],/3uvg2GX ѪC4+w\VWw?wYsæ_9αpm7>L~ npLx .L 4zOxAq_rĮM.꾮md v V\.jdpYH]܊;4/gGh,wv\_1F+ 3^6otsYPKÉ0PK!*5res/drawable-xxhdpi-v4/quantum_ic_forward_30_white_36cRIFFWEBPVP8L/kmmVDxSx w~B0j?Dx:YZZ_ekdb:'0M9jɚ` ~ZzgZ:XtMlg4m $ȬF2Tf[Jnm8o;8z&g-,%EIG$>1^ #˯I"L>ZY$Dz<JÉ[+P?{A|0M"`ѵD@b#›CtI4l)z&.)}7 IoWb]ϓ$%lX3s}A`D t?ڟsDiChK籑g Ļ?e sv%Qf>grbğNw{ÖU@rsY0H"uu"$ [t:hm_!Z\%zmIL=$_IJū*-S<RFڄA1]btCS8f,m WeZV7h}C:F\9SW|_azjBEW^(-m]RV9@w3M?}B_ӝ|j )b f fuAE2)z7PzaMX=Ux[pZgDeʘv 擊u FRƧbTG~=%C`9h.;%@{ ~磘tŵ|:p*p*pfʙ+:r M-u^zwdB8$g|}NMxb=D]=8F ޞ'5P ~ { BDc! 󒢃/C&xE o_y z: PKPK!*9res/drawable-xxhdpi-v4/quantum_ic_closed_caption_white_36wRIFFWEBPVP8Ls/k5@$7n$$}0n0بj!¾/㴶 Yrjܶht^?8?C+vy)?I|qF[E3lnSۅ.C ~2~\]x a_ZR|bTtPKhLjPK!*$res/drawable-xxhdpi-v4/ic_vol_unmutemRIFFWEBPVP8L~/GU@dnsS Y|V,T\ HU']=itSM&?px5ٶm#E1 |A;UiDjŌBM">vG"e|*Iڢihݠ.mxJ,i U>uC0O=E}M:NZ bڎfS/.S :E3'P; a2WD,ه>+}s>.U%e\iϋ/RL]Q}'M>&?/}6vK=Ҧ>RԳ]Q{PK#PK!*-res/drawable-xxhdpi-v4/cast_ic_notification_2eRIFFWEBPVP8L/GYmSR:шmcŶ ٶmmO~Rz{2nf'}cϾb}gPPi~B ܽ%2t7O!]n~F|2},R7GX)`sBߣ2S|A7]rG$VP[9H ƉY49H*bP~;h Tw | Sꍷ$(1;.)[.]`.\ƿWPKr"GBPK!*?res/drawable-xxhdpi-v4/cast_abc_scrubber_control_off_mtrl_alphaRIFFWEBPVP8L/#5@$I~Pd>`SkO 4vRxcq9m#$ ax)n ʠ'pQJF誤8\:WM:~^F@/[&MRSxi B 'Zɇ+)_ќ7s?yu8XB^!~TQ}_{GkxضPVlxm{I[̂ZsÅ٭GZZ{ )kHKXHN"Iofk=k7H܉INt&IO/X |}$!,}ښȐd; I*@j/\s$+0L0$5}>@|SGPKS̻&~ PK\gbPK!*5res/drawable-xxhdpi-v4/ic_mr_button_connected_27_dark}RIFFzWEBPVP8Lm/G5HrIyHʈd"=C*s$?cw.xopܣC?3QQhߢ$%2AU^Έ Z1jGY3Jf48{0nQ*ݘJ"ʶк#Z 3Ji iikiFBugaa3s(4.ZFCg/i(v3ơdIaaRكٍ%\((Ҁ! ٦-!JBlT4ja(|3KINAȟ1%$`fAB|`pكK-0'.L { n[Ə&p@p5ykZN {PKjŇPK!*6res/drawable-xxhdpi-v4/ic_mr_button_connecting_21_dark>RIFF6WEBPVP8L*/G5m$I$6zv^*" 41#h2Ngׂjrl_d;r4oPW *FhޢUFѠA7NrMBbIH𠖋 & &]sv&]sEM6]-xrI j-IN57FbH7vZ ˜0mCel'hڂ,jDaM&, && OtN5~ Q>VpKh{PK)HC>PK!*6res/drawable-xxhdpi-v4/ic_mr_button_connecting_14_dark<RIFF4WEBPVP8L'/GU@dnsSB hw$! ʘOS;43裇Їςxas3?Atg4+l¡9r 0w 7†k0r 3 ٧$Bϐ=R3C"Aoqv@vL*H;\=I"aZx#0)+3NfHXd$a뀉<~@np6r0*Ibl$x\ʴQJfCXВh &s0qD%{ ЭY¦Z-ؖ$PK7-A<PK!*7res/drawable-xxhdpi-v4/ic_mr_button_connecting_30_lightBRIFF:WEBPVP8L-/G6$]a&oiY!?c+tF Ćˆl<̓yv n"ž^!UػWH0c| 3voa8yk3Ew&4gu3gz)S? 4VaWP6rʄ5q7x HbB\<ƌ@$$zA|I+kQaWzsp~p. 2m@C23B  =ˌ8403 4|8{j|-C;>$(1;.)[.]`.\ƿWPKr"GBPK!*5res/drawable-xxhdpi-v4/ic_mr_button_connected_19_darkzRIFFrWEBPVP8Lf/G5HrIyHd!IH&M@3;5jmzLz_&SG-sC4 [$oIp*c0=O*ZGZEV-·5ȝK-I9, Xj<$НC lDr ZF:Eښ"f6+) 8U !@rXC#8x #غQ"bIȭ*CteC(X!aGt%:ea ҃VIEj]P/Ih(=da $6X^SЁ8?oMGnj]PKv)zPK!*6res/drawable-xxhdpi-v4/ic_mr_button_connected_02_lightNRIFFFWEBPVP8L:/GF$I_̚Ψ9v_I!sqMg,cbN1\7Rn+?g3p7 7<g>q8e 9GWH a]O] Nc8L qܸ8)>ibm( {6who M@lXeHȹav:)KG|'|c i L7v-(Cx\6%Fv1}@@[RU9|49Lދ0U)8_#$^W70ZJjIͼpUշJ;Zkفw{PK]snPK!*5res/drawable-xxhdpi-v4/ic_mr_button_connected_17_dark~RIFFvWEBPVP8Li/GuHmn B1.Pl$I=Mug~XhǖȔ%VʇB* 393m;!_ /B~ (-@\I猸4+>Ybs}{Ŝe_L{eW}95Qi0ǩ@WqM$v뾰'`yE-G|z1V)kI.EPٮ nr+[-~ ++sf.+aR%l`2 wZUwoKLFnY= mYny"5L=P+ep7!6sD '_h $s !s⍄荊7HS%^)@ۯ뮸yv2PK2v~PK!*5res/drawable-xxhdpi-v4/ic_mr_button_connected_14_dark`RIFFXWEBPVP8LL/GUHln H|F]D d#I8&HR 8j=@Xh9g~TO5P a+c M!v7 c PKa:P% PK!**res/drawable-xxhdpi-v4/cast_playing_square8RIFF0WEBPVP8L#/_m~[ZB5X.iBKshi 3jpyՉH?v\X{o(l]iIwE}><[o|e/CFZ_|_=|v }]1'`C~s3u3Xs3(9/3=?n-< i~~?ohoEuLWHt'uxTy_@MnV,6F˔Xk> 縥|Rp>|nG6^)-%pp}T71}G:eYcQԶw@:X"rNHWة-yO %Ҿ ;K) `R9x &RpDDxp:ULNyoP1. v4ҰsZ$[+^?%tT!mi w/3RqD~uYH*ϗLNXn|s3iI؍\"(>㍜ ν ș]۬GRksU$@8W%`v9 8͓_9X v7O9Hh0SFל' gi] v4A$9keJS0P@$'(G6:GwH2D|gUT )d(+e, R@ʈHtALRF$28mF>YP#reI3Р9"4p(s#4tSdaȘòOSiȓ"9 m)= '>rjUU#URaFN6xQY Z:OcLh48XT!C nH?̝x7a|=ŋ6ՌY59ȓNJ1FMrm4y@$Tx}uzc4Я,[IrB>ᶶ>1n5a]]23v,"9N@@#gF NiF`ل8%`N+! n3$G(VR[J0>10A' t H!9BfN@0Ș"ds D6Y1e$h!T9_sҗ3K2aJ0A!*RDY"NrONebPK}PK!*+res/drawable-xxhdpi-v4/ic_delete_white_24dpzRIFFrWEBPVP8Lf/G6MI`FyrMpg~=a74 %"4HMRFzST G :5urn0[-*Z<B PK,zPK!*5res/drawable-xxhdpi-v4/ic_mr_button_connected_21_dark|RIFFtWEBPVP8Lg/G5HrIyd!|98xM@3f>aƿ6_ߤir3-?dDv~5-ZoQ|| ;SZkU@ ol:G Fͽ0ʉpR&mXgT}cGN2=TS_ %LPK2j% PK!*6res/drawable-xxhdpi-v4/ic_mr_button_connected_19_lighttRIFFlWEBPVP8L_/Gʍ$I$ꎨ=^9C.$Q\&O@3^+xL;yM~CĜNU h{AEAE%*q&w=c´*sUQei=ćLӲ.&;x(h'JSYR_0dO(y&]P"/CREɋoTUC$/@w*zCk/ Ȯ!!٤ x*~u ܊;݁WՋ!rrx$t^uM%Cx S+TvGsS4DYa5x6j>p?^54^PK$KytPK!*9res/drawable-xxhdpi-v4/abc_tab_indicator_mtrl_alpha.9.png sb``p * $9D^oJ)d&&& GZSJ1#Ȍ۟q<9AuqHOSA fϗLr2Y@x,DkϙD"tsYPKlPK!*:res/drawable-xxhdpi-v4/abc_scrubber_control_off_mtrl_alphaRIFFWEBPVP8L/#5@$I~Pd>`SkO 4vRxcq9m#$ ax)n ʠ'pQJF誤8\:WM:~^F@/[&MRSxi B 'XAs~ 6ZIiop8]]YՍ_^wQetCqO-OfY+֩{lj#5w r.xǔwn+zVO7`ucLr_N|yFW% W/W1y1^}稒%OW?uN MPKy1CPK!*-res/drawable-xxhdpi-v4/infobar_blocked_popupsNRIFFFWEBPVP8L9/G>>$0tN[a\)mFz$EB:zv p)ZHk _ccmH⊭b"ulZh6zgoJ9Jsc(EjQ*|)P$߄xJC~ M , G`.3!K_k8QCA1RT}x\Y|Sq,/4 áp.C> 8 Zc)p$ESbt ƚ /Sic(g g}z;8#ZPK0hSNPK!*7res/drawable-xxhdpi-v4/ic_mr_button_connecting_18_lightFRIFF>WEBPVP8L2/G$Ir&m  " L3D9er913fcwhǕ`Iii'3Pf8N ?!z'B+T_*Cjb^j؈4 Soj怤';j/ub*vTnSUotSb(tdJlC&P߰Cs0 F*@& @ B`6&5 \%XgiMr0HߥjpPP|2_@zrCpPH%܆ ʝ p98tJO9R9 &.b:{PKxKFPK!*?res/drawable-xxhdpi-v4/abc_textfield_activated_mtrl_alpha.9.png sb``p j@$ ),?ߐHRy! LLL @R[ JBi[|[@.!Ǔ$X'4pp`2]B4,K%}FꭗzsJhPK0PK!*2res/drawable-xxhdpi-v4/ic_mr_button_disabled_light#RIFFWEBPVP8L/G6$Y3]9{" U&cf Ceײ %[ X榅V [|P]7 ^X^F)kBh &"0nZ7zM%A2b8KҌ1tw&3Rǿn `L'GV8?a #\R˫ 3=\De$v!$-tEt2Ju{1EF"&`n*QHG؉;–HM0ڡvNܺc E$88pwb}1zLu$tڙxƷ'džM;K ]kl$\ L2X;54sHEX4lgt9O˱2EJݹcup9 "U^!]G|۲YG">G{s[a{oG~& nߟGW$o Zݽd%.%C0|J.oZ] J1r Pw)U:}k.Fxm\fyml @U"'a!TC[ҷ  Ʊ]9)uCC ۘ,Y' uď2c?:!Ύ&8A!}A+a}pЋ8ύy!nn[q{q~HI}APK\=PK!*6res/drawable-xxhdpi-v4/ic_mr_button_connected_20_light|RIFFtWEBPVP8Lg/G6$Uә+ 4CG47'k ?cr 9]s5)>>M3L k[VKNKg0#z't5S*U6x*Scx\JhrߩdxR% U›ʉzU+`$#S,S)U(U6 @)alwLSolU <`GT#-0)ƛiԄrPRSL's3pi U*B@I $) S RLB<.[и膋>n|OSMB &ӆPK()|PK!*6res/drawable-xxhdpi-v4/ic_mr_button_connecting_02_darkVRIFFNWEBPVP8LB/G5HrIyˬeLh'TxMgLs?zz\Pir; <+#Dxhuh!!(ؽ$ꮪt q-55`M5ގpcf$5 = vrF[NSjRqJ; f+VwfvȍjPl vTZn04a$ Y\ , HM Sk0,Pp{@ 6+$^|ð s8Ub`w, &z^)f3^7C+PKdnQE[VPK!**res/drawable-xxhdpi-v4/ic_media_pause_dark ts3```wu  Q( ^r_}ն3Ig~.u?22PK;8PK!*2res/drawable-xxhdpi-v4/quantum_ic_pause_grey600_36 ts3c``wu  H Ƚݶ3zj#RY'؝X[tPK A>PK!*7res/drawable-xxhdpi-v4/ic_mr_button_connecting_21_light<RIFF4WEBPVP8L'/G6$ә+ 4&pα ƬX|Šʝb6t&gL ]QxW^+DϷ{ @DT(oV8"-"">x?iNUta( t!`Wʉ%`|;d 7AJ F$ 8v& 7nB9&N>FP.$RHH! 0&0p 4{\-L'R\ ɿ o)?BI*Sol[`PKA<PK!*7res/drawable-xxhdpi-v4/quantum_ic_forward_30_grey600_36YRIFFWEBPVP8L/k$$IO@eEGxzIi[<۶m۶m۶m۶m۶Q%m,¸FtTbTbTbTbTbTbTbTbTbTbTbTbTbTbTbTbH2H> 3O8 | HZ#~>*`c\J|sQ4s.votO:TԽH@OĩT)fVWgL~ޫxdJa5I_xGtvYvY6R7Vm0w'*/!u4%s IE+Z/g}x??~'w{!,X^CK^{ME:J%Ad2{ ,| p'bo[r])n7b= w|3ʗn0`ݯ몟PA= lWّgD2w狯~}[wxw*~TMǏkN}$YMQ1jDܯ F{$>51rQHe 2=ml,/Aϕ)]$F8#='@p%,´dķ S u)uGQJQZPж0eԓJJ`+` 6\+o饃Ju4.Ph;x>Td3;z P:@9.s׭>#]{0 =KhF=pu"pj{e%Bh+PAQo$:l-G ~C@b%lA! [,&E]p7L [pᯓX*f0QbWXcwNmËq43-w{ r)G9b;3JWEBPVP8L1/G5m$I$6zv:^*#05FNB9LϘǂ~4?9a=7GvTAŽB4~V-Zuo* Ǣv;#+TS+vNFvWSOS )x\LiW,TiU+:rX)'ҴcZ' $It%VK-B(?lw uɞVC݀ ΂LXM"sԖAȂvj@rh(]ւYa$|Y ${ kO,pB>®=sưWPKKFPK!*0res/drawable-xxhdpi-v4/googleg_standard_color_18RIFF WEBPVP8L/5@ 9)‡JDƦbww]..G" Ry6C ϜJr)fOdsr;%PNl*SΖLζmRLrrתR]8@.)G `6*/mٶm۶m6mۈ&lvG ԸQ4pM33>@y)vrMdƚ\<ܨ <c2Cn<=iUnƩQVkC[EKq0:~i5lNJxĔ<ƊǿJ6>sX=xβC=EP*7*+uEq!.r6_wp<ǁr'0<_!qbƇ&@)I{d~RO<>c,ɰU/9WxnT[$adUG>'Y8A#'բ# @Ɏ\=UßPݙ3–o('BY$h5BѷanwVGG_ ~+1i1^'wɫu#^z{du(O>,9?5sq g]9\WǴN:%$ή'QWuIY[~n UВb-t/ꝮёŇ2 m|NVζTS;Y?IӐ+ж*ZPB43;4+m9jEEäOl=ur$P%!\!4hȺ$yD^iȡd IKFȒ$fV7&PKb&PK!*7res/drawable-xxhdpi-v4/ic_mr_button_connecting_04_lightTRIFFLWEBPVP8L@/G6$]a`1$s%ä:֛+Ftpo%4iG0QfxμBgGbB-TBrMyFq^v휕xjG$;;g@Η=kjORqE~㧨#VBy -teSe@\|T)ct`wJ+rRb)U@%#`781v0;UlBT݆J0 9M(ԜL OQ89_n'3/%@O wx=] Pe{PK_"YTPK!**res/drawable-xxhdpi-v4/infobar_downloadinglRIFFdWEBPVP8LX/Gm$) t/վB?P90Л:%l!ӶLZ2}!Lj<92oS2wc2YB{eT>YPK†:qlPK!*,res/drawable-xxhdpi-v4/ic_refresh_white_36dpRIFFWEBPVP8L /k$$IOgpIi[ٶmжm6mƷ}Hcٙ$\kO4(4(-Gx _ҫ8``PKqzPK!*#res/drawable-xxhdpi-v4/omnibox_info!RIFFWEBPVP8L/G Hm)'p[[{duة <NCE%3 Hr.pMz,Dnf5L\0V1`ʁae77Nj"[MPPLR.A]\ fӿWΞɰthNO>IKu4!$:ԈyBu{;*=ϙVȖߞOqUg_NZ^FT&KŅ**A\F8^=X.@Î5[ҁ:sXM1 X9H 2#]n09fnLm@z@^ˋRJT:zJ_ԫ}g :/nˁwOv闔MO3|?'oo+m#̏v2e>PK,t_PK!*-res/drawable-xxhdpi-v4/ic_check_googblue_24dpORIFFWEBPVP8L/G Ƒ$ \^A?9mX̮wG,*lg#m#ԹwCeMqWJFj ژ@οjHj_ԋ|"'˘H& *>X9-)+-/HV0PKVPK!*7res/drawable-xxhdpi-v4/ic_mr_button_connecting_15_light<RIFF4WEBPVP8L(/Gpܶ$1]]+ 4C$\2 1{¢we:Ӥ$aE<;CO! ? UKBѳPuOCPoyBBŴcc4m.z w^䯧U f 9YB,8{g$ZgoV{hC(TO9k9 |Tr#qll8!qRre /|UXb>V9hQ΃t6Ey, 0#V> g\ڏς#,t4vΙMcvb_al8LO!RGe)=jWPOc|h<'\%;>Zy9iǁK7N3333Og':Xuu{:8uqXĩS'{3Un[}ԩh9o:UzPӇO'MS>4}pqQ3Ӈ;#>e'H>}羿g@oPuVPKX)շPK!*6res/drawable-xxhdpi-v4/ic_mr_button_connecting_05_darkbRIFFZWEBPVP8LN/GHm7nݧ vy YAă;b?}ܬϑqYbd~#=fO0#oo!oWy<4c-@Pe߄0=;ɨb|vm =rپ^HRy&ۑjۀDؑEIJKMr#ŵfgiH:R_gDyq$m-&7P, ہ4d#7DN2:鑳jJ IR4"q1,m2_M>PS5)Ѐ"`֙_i@ׇ w  A@AӜ9: E pGl{PK|gbPK!*3res/drawable-xxhdpi-v4/abc_btn_radio_to_on_mtrl_015RIFFWEBPVP8L/_ m&mhpܶ$疪`AB%pKX>+xVd1! Ym(ffffbFIgY<ʐ5*O%D1r, 55x;}~ts0[$o"X<|By:\ \RkNDqx<OXU9ceDp>JQq. Ή{}7f|X#r:fjְo>ǟ־?xO WFjIՎ\झtU]`Xvr"Ru:go" _뗥ROףrO%*n<}W2FVmyaǗNp"o:11XUoH*$:M(.Y/ZZRuX'Ŏ BmmZq_4+pݢ8+vݿݟwdSV- #^);.!K.GNpqx7\&2[8]p"Je~U0K&RV mͺ*t+B9 4?a6͛ e 8=Ys'yZ˶5L0"ĩK.`!/}^%PyrϋF׍(/=T^=ZeЬ? !PK봮PK!*7res/drawable-xxhdpi-v4/ic_mr_button_connecting_13_lightXRIFFPWEBPVP8LD/G6$ݑYә+ 4!#.$ ,X+ajJ\ zNOCBdvD|,ޚ;8U9.[Ao!Dltv !=ʪ\i> RΞɂo ʉ <9l_@ƝCD@sZ% @\(82&iL`YAρ|lBߓ K.=҆ \T$c|tBkD"̉PKE472PK!*0res/drawable-xxhdpi-v4/ic_expand_more_black_24dpuRIFFWEBPVP8Lu/GpIԤ^|Pж4;A݃&!q<::l_.sw 967/ܪY!DYPWT]VYXUN[RSVYZQ_o;\}PKs5PK!*7res/drawable-xxhdpi-v4/ic_mr_button_connecting_06_lightTRIFFLWEBPVP8L?/GF$I_șʨ=^!˄srMglk՜j5bM}Z~x8v]Qxub^!:WH5oX~ [n `wbcdç  5L=¢/8"[2nBwKRp `I ȸ¶"^BfP[H 5`.2LA" IY Zȅg!:%:؁|xAL@L{d-r0XA  Ɠ}0.sz "ϙh 7|O9٧34yqPK)IYTPK!*5res/drawable-xxhdpi-v4/ic_mr_button_connected_00_darkFRIFF>WEBPVP8L1/G5m$I$6zv:^*#05FNB9LϘǂ~4?9a=7GvTAŽB4~V-Zuo* Ǣv;#+TS+vNFvWSOS )x\LiW,TiU+:rX)'ҴcZ' $It%VK-B(?lw uɞVC݀ ΂LXM"sԖAȂvj@rh(]ւYa$|Y ${ kO,pB>®=sưWPKKFPK!*8res/drawable-xxhdpi-v4/abc_list_pressed_holo_light.9.png sb``p B $w$ sc ~y H$301q*9X@(6 3g$wPtq 8<'󌃀ATK++ÇGY =]\9%4PK?;~PK!*res/drawable-xxhdpi-v4/btn_infoNRIFFFWEBPVP8L9/Gu@m7`*_H$D7sM3mv]e&!2E "1p۶z{:PG!zELgF3/%A.w#P`r 4)EcBcZ 4FhN}~wk&HtzﶓhtrEr|v=)tm&ք%E3x Vjs\yN"K޴X#(/N*LgJnO7zI`K7<; ^ן^dq'(/*x~vѓ~U%;ʏ:xJ'wOruO+SϧIgA: = b&~  O2UPK,SNPK!*7res/drawable-xxhdpi-v4/ic_mr_button_connecting_25_lightBRIFF:WEBPVP8L./GF$I_̚ʨ=_ [\:sMglc՜Xh;p7<L3wEU*?! @+1_@fl?)-EF<"w/Y>!TojA&E rd E7YHܴ(-ˈn AZ><)}P^H  !Sd z5A\H ҐsL0 KrPم|{扄 r>B#yɯjhfPKoGBPK!*2res/drawable-xxhdpi-v4/quantum_ic_pause_grey600_48 ts3```wu  Q( ^rv޽۲Θ&SW]_k^PK2Υ;8PK!*9res/drawable-xxhdpi-v4/abc_text_select_handle_middle_mtrlRIFFWEBPVP8L/;Im{mĶmŶqJJ- ̾d6m]]e&u)ԺʐI5, R'u &spNd o &D"f> 7M;Y ؎fa>ztMte*5\.t<2^2"yʠOGa7, ? ɽ3zׇ Oe7Dd]9)IF n4Xm_Bn3ènC c^YΕ8Qu*OUϵ~c\Ih4 I 9ئYvb *l 4nmx\tcA36obnjE #84rz4? (\rmc. F!4Z'ѰSOגVtȝs:d^>&wϙ[NPK*oJPK!*7res/drawable-xxhdpi-v4/ic_mr_button_connecting_19_lightJRIFFBWEBPVP8L5/G6$ә+ 4!\$&4n ,X+|Šʝb6d$glv~;韋tݿ+U|Ys| xg.xǗw :}>QԮ!"."#怬 !y\^8ˁ6IH$.tq$4YD, lf.$G$Ii;@WH? pDD6a`" w6@\B{LD&{l㈈|b(=Ѣ[ʏP$o(LᶘHѴ+PKorOJPK!*6res/drawable-xxhdpi-v4/quantum_ic_volume_up_grey600_36RIFFWEBPVP8L/k5Hd;n__C`Im۶m۶m~m۶m۶mn$)\ j9K>{*&Oe'҃6y;4I3tpw :s+QN>鋞z"%DÌ;r!G i} O5lXUo4_TͱXڃ"¼ݩ[U{VM`u,]W$/u Nt-~>8_L|gb> |۬=4@+:LXh(jd7PjpFCn1bi/{ DdoL!LmTI?iQ5E4թ1/6&r-qNwzJ< Er~ +5JpHdZLjG*mU*HWY;NM#*{,J^2O{8{SnT=PsH70(}[`K;PPoг!JUy@}l$V S_:gFqYDց=-5Д'2]Ƽљ5{evTgvig!~*/Y-8MZ/^@oQAZIP2w4P:1ZlP۬&K;=Zȵl+5GRxQX`%yAe=u$9  |몫]((Y9f l GI騈7x@BMF=Gk?Gn(4_V3"uO$ꞞH݃9I`(էqLz9>8e+$74}̢ܬc |9]̔6U{\}8/H ʹ!HCNi9*Lfъ :sNEkm ɅLN?ݎ}!q ]T[\%.a PKPf#PK!*/res/drawable-xxhdpi-v4/ic_play_arrow_white_36dp3RIFFWEBPVP8L/kM(jRᏸI  TU0hɑ>Elcۊ+}I/@ %6(ArHf h7 i$H1!St!BcJp%R,-J;@ ҎZ:BC5 FJ0; B f F}9 ԐZ PKpiPK!*6res/drawable-xxhdpi-v4/ic_mr_button_connected_09_light8RIFF0WEBPVP8L$/G䶑$v:#"SAi28=9N@f@Y1V==8PK!*=res/drawable-xxhdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png]iX):R(:vP"(3׌M4.i"㒙˝hh%&,{r3af99ΗS}m D,QAhC)i'vMkmKJ4Τ9G٫DNI#`-Q?T _gN~$<5Ps/nɀ;|,Klm\|%en ryL+J|:eWB{&orͳj]1b[tq%LlzhY-3i(aXmr=m)' @OR'# MHС ֒Ӷ7ǧnѼ~vLs=BBFYVkgMtsHS%lWtҤI`"2/] 2{ BΚ?q|086b|7AHSn`?WEvC(+3OM~*cxw|׫\)W #ol׌Tƻ1 'ѱG0 쵧Jrt(6cmjeŅihYfl]5NMMe2>2rFnT;((hX*zGU_kNkBkʆ>g>\X?2}p6Ixxx5wcH&9"6Чogff@7}#}fOe3BELS48Ҙv͓xiجa[ЂRBJz$^֒KrnYڎ*Cmhߪ`4>q\rLkV\iRU|,$"ڝ,u+i^x_6mD ~n>ŜaV_;K\LԴpRDj5^%Xʮ۰ڒى֦s?|Psv?Xy%Ju"$d|.Td#Q/Es2"PN&ں gP|v N04z0Uˆ2]܍>60>& J_2O+d~bkűdϘsfZ i1\2 /;Kx#pu; @){^.D!!<ם ٮ;n*ϖIEu>amwYiWhc:~%b;A2Q*5Pg'?Ux9yBe/B7%ncbo-hPK%qPK!*7res/drawable-xxhdpi-v4/ic_mr_button_connecting_03_lightRRIFFJWEBPVP8L>/GF$I_Ψ=_f]mHALgbkjr9ǒ}RϞ?;p~ "„*LR-ؽ0cy$g;!Lp|2U^Ns)]ǦB\fxT<993e pav@eԇ28. 0tP0Hpx xfFРL0 ^fF:\&Ea@7?0 A'E8dP# 5$|aL]Sa3{PK1c]|WRPK!*"res/drawable-xxhdpi-v4/google_play|RIFFtWEBPVP8Lh/+O$MHRM 6)nm[i$Ň2昙9LfftUu.VD86KB-O` w;I_ A?G!}I,ӫ (Dx8tAMBLn$ 1tT0]f_jK"%ٍt|FZ* m={HždyHH}'' K8s{R%||O1dG "Uk< w4&9H֠((0N.--oqde#۝2M=#j=ţ{H1ͭw:rkAP-v]BS~ȱ1LOd)nj;rȯ|m=|D|+yTPaɾ|V< c~?%3,Ym"a^\s)ҰN \pr. s"=VMie{HXՔWHQ7Fx5kyjBrCeCaxFozܷ5-ZTmTGEAv %Blc Xmr/pXbA@tb^C+XmaXemDZ4/x kzQ?TT|cC(ȭqWh&)@$d#E[@"ĽS59:3OEM`MO'כc-fQ/s#ahNx4G18la-7Zah{䓣ܣpt4Ȉ NMmB$}ߵ7K0" H'e։ 7]&eɌ aLxn\OX2zT. &ų$2{e.':cKn4Z&h(dX GZnЀ:@B%uݒ~ rd& οN3u>=/VȆ3`H 0~נNG=]L6ѱeIπW@vg "1.;)|ܻASo_1`,dܣH9(S"k9Rbܡe5ĈH‡@V/JnBfqei2R @7ۄR[[ j"% 0?&M~0;e[RE3{k~vKDRQ1MHÂnl{q~ ni!.ևB92'Td%Ye{vX.V'>NңN:=?^WX7Fĭ.aCyh:yE5Oh0+ ZT}rFcmc*hz"z<%A1"<= A>M<kTmפ)8׫U9Ą\^R<(qn]O>;ayTz_ۢ'g+u=ֽE j^"̓ݫy`w;5R5e :RO}YDNUw4_u^:Nr琱c >J-NUIĚ$yyFG5cN 4N9B[u!$| =2I{vT 9 (G+EqImt0 @/\q/ @&e>-ȏJJ& ,`/)>Dc@I,4X-@KZ Td3y)G1CSR=H2F ,/yږ$du++-ϖPK31|PK!*6res/drawable-xxhdpi-v4/ic_mr_button_connected_26_light{RIFF|WEBPVP8Lp/GIn#I;-"{ybt U<ēɾn1b_=X,_Mr=ܳ*~}e-۷(~C0Jz Ӫe&V\U'^:䮶Z EH`*'"lrhQ]B&8%-Yj9T-cXM";EE!.TBqӐZIP9F ,)BaI C`*JOTC ǴŤj(ZT(Rx{Z 5<7tB't#S,ȅ"hv 8pZ 08,P0 G-4q*A}H A1 t}RrQ ЉPK9؉PK!*<res/drawable-xxhdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png sb``p r@$Mn8=Ry9  @% $Y`fY3c " ?yKų۞p1108e6eSBPK$TPK!*Qres/drawable-xxhdpi-v4/common_google_signin_btn_text_dark_normal_background.9.pngՔ{4iLJUaYM:$A*fZbKwt11"Me\2vl6T9 "Ze\Cf\0i϶_>|}]@ %vז+s,~ڑ&\ndCL$հs?s!&︍]7+7ߑtwIw̧@V/tS:R|RBǔXdSWFpw&` 6b Nč= ( j !GJCظ1"t}YÄOu?E9g5{Crx$3KrUؕɊ&rsPA\{mgR`A[* Z]!gTpѐ|to&K,FGbI&ht#1iЫ8iʿ[*,_(Яf{8w[fmqTf©9ti{$",nqoG>!FOߋ:UΨ ,O.N0OH>h,6tc0g]J5S` 0|J?p~0>LasUɦܥwR| ^bs:)b!:^)=fM7[6 A ǑGƪkaOb[0+CbUՀ.Q`T*~8А|?W5(6+TeA. ʁns^!ɉ4H}sA=rO.ld/9d߀oz/ " 4@\H9ʡVkI*5jX!:=A6Rk8/D`g Q9:KEج9.!m4k~'};)+v)m"Kw̢KLlsۯE-tsŐ+a ‹k< g&͟EFgbK׽Cd\ә!10nC7n PK\&GBPK!*6res/drawable-xxhdpi-v4/ic_mr_button_connected_23_lightRIFFxWEBPVP8Ll/GF$I_=^fA}I%k?cRozRZiR\>-w/xisUq0 o-Y \aT'kRi N Wy.3&QD,[&\('$~Ì@. qX7L=PONiBL*L03@p尨L$V_8@S!)eAee/3Z@J'T%AR,3Y|pHfǁ%iq-.=z" s)}ݣKF ј/#O@>E!)c/wΔi@V _ wJeN VYoa"!A!BS䠑Xm'CDrAn2NQߔWT1m"SpR'HjkC"GplTiې!=oCXWun!rDآ:FiT{7D#sĄI U$rgCA" wI0 $:W>L$<+6+C /5Iv>4|5^PKbPK!*0res/drawable-xxhdpi-v4/infobar_translate_compact gRIFF WEBPVP8L /GQԼx#+8+q5dqw} )MǮKL0C qWėԄrPJe*qwwwh۶V IH >zV%۶mڵ6c<ضsMl۪3?%FA$ #qr9\N\_\F 1{ieWaݫ:5Da].r~=S1hzMb*cP7rd9 <0Ӱ@Ta6MigX@f"G;-t:Fշ8G+X@䀒 b$P@d&S׹p|Ud~A1)I"\ڃN>$à%4Ѓ,['. )NKBQ>Y٨v/L͏C쑛/P1ua&RsFBJ-nʬVWqs 1º \/L6$\naھ+uH:,[g(Ģ}8F[{~ ٓSH Bc&h l ԫ=}E~[vT-HTPY'Eaݧӵ fQ{,ZTjp_)>@je&SX>u\h~HR.&jM**X;jXMNX>hjMR(^ߏg dw,]K<nqUIp,+U .HbQ$$S: Hǵ~XcIpE*ӌ c> tG$à%*x㘆M@Beڨ`}]*&"rW)Ӡ-"n 21A+IkwId 8>[(i`|á|[7w aŠߏ^D͈qrB/.>MiX QDZr%W.bܼN\2]RnvkqX"< ?,O5US~!^LDD$q#H# 5"J\;OA5TX-Gl8 ܯ)}b 3!" `YD_0!ceD.Z @TU\=UvTG`㓧m50gjՅAh4&"GO`>|\3izn5fUS{\y[) j) lǫ }Ʀ8%(sN]h52^{ r>=<ĻRg{zݬ) |i€G_<-_@8LM}zDT1So=oϪfy FeUr *[h[4VKЛg.u5Yc*6B >* 1(_!Q(B6*[68ރqx{VCeu>R"Hqv\mp~-8V;1dI̲5JE5}ڲ?z08U9.[Ao!Dltv !=ʪ\i> RΞɂo ʉ <9l_@ƝCD@sZ% @\(82&iL`YAρ|lBߓ K.=҆ \T$c|tBkD"̉PKE472PK!**res/drawable-xxhdpi-v4/ic_share_white_24dpRIFFWEBPVP8L/G5@$9nW oAkێG'Iހ`8+3qjVXm-K0f5Sc  & :^iz;߳I0-֤ z`cRc;/Y@{c !n8]`1^HVٲ#z˚fIՓRޱ{N0B71Q|—4zBEK&NU"PP_@UXv!PoB"fG ͎ZcH8Hv`bPdO-."=3wȐ5Üq:8U<OJƯib=JមpR0alP1Gx@YT,,pj̧) զ|CJ@ *\"[=#Blh2^2FҲړNSx@隅5[м(EP_1@c?%_N&PPKpPK!*>res/drawable-xxhdpi-v4/quantum_ic_keyboard_arrow_down_white_36#RIFFWEBPVP8L/k#m$i:IU4qG %=m[ݟ?0ʝ5Z>rcL=K^8ү-f{dJdmJLs5CtRV꒷W=&iJi>Ό56?}dWʬ-ZkȮ^!v=إ}žCPK€PK!*=res/drawable-xxhdpi-v4/quantum_ic_play_circle_filled_white_36RIFFWEBPVP8L/k IƑW{$lmۦ۶mh7cvoc;yߏs$8H]uA~ۇ, }{?Q[BrZk'=^Q$bJȶko/a?x(5+Rs-tC-CqW=#m_kiZA =|[F]rI>gG&{YRd/4u7pRڶm۶m\Fˁ#INS{W5k )\SpM5k %\gK %0w2Z",`0_Ʊ7>cdқP0 ^Gcd^7T:hѫ=ݯm)%U{[`"5h~3,WY㯻ߟr|, \٠kjAnѴ6&"bC0=8<r CaՠIPPa᧰IZR`wI pרH/ XOl?y!TT'@E/p u^H:XDz@˾46 | mQaJ 6?+FȑN&NK%%7%ءs\7~ʝ`[xd_:9(`hOi+ƅ-6Vvk'+C`/zVV |PC!h'8|mop)!"a4y p3OC zÉM v rk@7lzaGt6{ћ.zuϚН%֩;8Nn]͓ͺ["s3ZĸQ2fܔ0kT Ld\{ڠg `WŭⲞ5@@K"p<9g])O1%=1 dԘtP^>x͞xsݠݣ춬ڞRV`lq8p\D7=@ j:_RgEu:cP'_ɟuyL{W-SԩOKu2dN]/)?*_,ӟҿ߯CC'PK=PK!*#res/drawable-xxhdpi-v4/icon_webview'RIFF'WEBPVP8L'/#9$ERW23}wN Ĺ33 tW#IR,o+o `ff4$vH_èyuL ڶɕ]ܵNJXAg30Tye46fhO˓AAoV|gwὃփ5lJcCdM~|&炬_>MIr $G]Fj(CE Wb@K&Y"(TOFϙ0`zn0:E8gMdCbxp ' []FEUtVfݍ BnzmmJi'[$-3Л_bDT-YLrt0SɄ8(Q,0gĈ*hlHhD'VT) vJ.8 J`M&J>ysS|i8ѺT:pQr>n/wR2LIrLQBjǏMCjָmDQb~kk?/r*M/W?ofr E^,GRS5M\ha#Ž8UY=ʉ--J;g3x^:?Nn?Oo<"Aܸ a NH:giٶ13Unu:n[jqY9e !n9i8#V9苙aCVaY4_kGmmRHFѴTJ(9'(TM遚 ֙Vl\8uZKg>qD$q`<A'?d۶G9ɪ{Vh&%sUrg߇rވC$ms{%xU[Y.pJOtʼnX` N\JH'Y: Qɞ˒%9SW ;eeI۳ OD!H \OTS~8#w`}t|ͷWgph{=7;GZ(T3{[ n'{X$tY'oEfZͯo|?>"0|e5?`2V Zo#I 1n_HԮMEE0/&?ΩT ?>`0+77Hꎊt,.@$TjEn?%~Ngf:tR Vqjݗ}C'/.fByb{wa DaHiьC4SXY`9~Y'O>r['x(vCtIrWW 3Ll*>~_>)l/?Tru2?o ET@i ܼ 5(n/ee щdb8~I1(_?\|."=0;}=Ld.ccv8>2#=K l1^2f: ]9^'6$c¨6@,+A?acg"mjN*~oH֎էKVKŒHJba ;BATMW|w᷾_יK=\Jn&Sа(-I㍒jUfJ!m6Hj4IxU~>e.O7N-֙jH^$,女щJuy|%-@x9V P"=Sɬzr_?_Y膇X_K*s ,OMrcdWp0|Bɸ`%Am'^뾐ߟ=u20wyZ G!#zjp%,c$9j[e$A(\K%V-4(ͽ2{|t $m.xEz_T_&EJL8-YIgriL%毷&,./=ީWrڊELiK&l1LזY7deڋ?=&S 7{'k|?MAX:qGsB ͗%c" )48|ձ)& 7 fqRZ9AA"Khzm$S )h$b+MLr|(z; +wch&ϓIF*@}qBwBe1:EOmvt7qGmVJ34&yn/e[ť9D;=+r pu^y< X(KB%>8F7 BTf&^ M'UE9ӅcJ.c1=מw=Db fTq|~ $Dh׳a%e?l.1ߜx=jREz=&ΞR[TAjlAB[/,d5ьq֪~4)g8zSz 6WJM䨪Cp{ i 2ZدW%]TKݨ1FFk?[g3\9KI@ ~^jjEs*\%iۭקah%eд҃ke3&Svw Ti zXB 3 +Y=%]͖6bxx22lXo9e'PSAظC Q5lq C|R=V Z )Ri/=XA&` ڜSPs {{ikz֜PO9둎a ի:!2s)])f\iyju"1!:낌ih_;ϟx<\qHYom'B(lK^zlKC-\12:+U BƂRL'w2>=[m\fCJq1,za 'B3,~q/(Hlgua*S^/S+u<8*{3$SB)ptfT]?^t㎻vN|1l&)3[厯~ya}ϱI:-YP!S}ȋW> tj. J"mE_O^dmpǡILaOJ=źN'IM^•{I44^uAvPQ:V6]lfd:cYdk̙=8հe# Epj\V v݈^orƣ=cЯx쟨ORrZ&Pi*gK<{ ŕWe "SrDEHR VC,%,&ftvVڢke`DOٝF 9HAvy|εقrMI " 5@0.47F2$ SזAWDl<:؏w3TN]"c ^:.xIռn2tRl& ]}Ѕ[:J("c$."n{S̖i+϶ѯb)Bܶ aAhy1A}2&. v\ j/]LI>*$27yDD]FejHD0S*hIj"sx s wsWOYi("؈Eqfrĝ/cd2R Tf^ x VIŘ֒rXZ2Jkʆ@Fn~`w;;<9mPʰ d9:;*Pv^b͖J+ +9m+TkQ"֪~ơmlpYCRN„AbyƘ$0SzS'a ӾL0_IMZ?|$qy{߅Z5$$(*ns1g_⢏֢ }|%Dsi0Œ}M/dvW/7W'_ =SŠQL x҂ C-kue&p2r0W'4#Y`i&1bwtj Y):]}<'D Λ|[$MԆd)1a`T[PbX>\*$M=%{*clK)g?:isQ7?=&*_D>`s4l-uN\.՛~`XS6KuԀi ;9.Qh~ڈ!^/;# [IdvHkLRD0-jZ@^w^.SbZ15Ēv3>uHN5^=M]]8RFnA!omb]V}Y/I>m[sT|r=.Sxx-;~l`Ṭi  JCc^3e< B!M*vމRE  û?0e5zPJkztyQH9=RE.܎Trpk$ YGf896+$A&JɼvUwQ>ym >@需gW %9F.pHGqp+uz-S=CfFh 7خ_iȸ+` nGcʈde]0Ȝ-J@RZLlj*2G-Av&k 7Lx*~vNT |jZ9Bjˮk(>Z!LRFmj(d^ KH"u*zpӃRlkb"(j;BpgeEd]mG =2d[Q++,Mq ebZ)3;$v+Њ'5X84 ̈hpAlS{T ^&h̘b6bP{!Qy{:hU'dȎː I%)6Gd-IL9\P\g+2JNdZazJ[3|9[sOhd3*7䭑h)%,&H4Ezs@|H괋phMFx5l(GrY, ,=$@ZtVrv1UHdɒ87x(o.jIzyv1E[*G閡# [/]1!%'2CI'SM_:u,YҲGt׮7VK[C*鴖󺫴_2JJ7PRZP^!}HꖮDdR d3ʒUk2* "CJHBbo|P4WzI2҅ʳ",m,[Rt3ΒDtD=jW"+ȯ)6*<S 7^6o߉)&bCIM1"[0tPjL/>^^"\4P͜(3l+񠹜'd ElugelķӡsGVG2R ;`QA$ 6+IQpzwEБ'ihplݹSY";"_"жZ8UxS8 \ԪZ+eZ,`$-'dr(CD,fǦv}LchK8N_9<. qq|Dש+P?wǖ-2jKWZACn  iX3UjYG3&F`ȼ8.(|* $}p9?"yQ'=o}0)ƒ' M4o2/zK+2|; ݀etn^mS&* ?xސ{2;ZA\"Z2X,F{!/ʹ礔,әj*o,5ĝB\ ә`>̜P]n9 D7Hle$m#uJ7J^h?8Ue_t /ߵ+\W)Dsӭ I}H_l? "U,0ϫR@HZV.WfӚE2 ]{2qNozM)i/sn+4="qG1)'VK,ԍ߯K E#nf+;_'.kv],}_ pj4̷ܲ{<$ȧj9ߡ1*  oM.|R̄|Y3u.qϼm>e*P%bVO s >('y[LX[3|G=_?¶`Z" ^dH6ʛH"tM |"U`~m؅TA~<]h[iƗWj=*O{G|#(kCHe/]-_张kG=#\3^Nq4}d?:ohPngxJ`ԕ?}*{J<-;I-]}1 HK{~LE!Df +-}鼱ʧ_T.fn͕ثȶGm| qcʽME51~#& 0NO.|cŅw,4T)^v;p{nLAXͧzA@AUy$"?HDΏ=q.B-[$k}[kP];«rV:Z 2NRP/ug|aÙIgl+?}6jVv[£U>뵑hc`P tYCYXK^sӅPC,b o7edE+\ϗLyHAqAZHb Ht`[H?|r!ܞy=c븿NMe4ɀgG1heAB$[B\AVprK)?;/΄i+,CG .0 SFT 8k[Փ(Vc-r{sL(6hT O^.Iry ݻD+.n@RU@eRqN+(104\v;n\G.j):IŒn^_bk+umnz1g|PP&5W %P\<K#w(#㨷{z%UnG85s¦|*+Ө ڎȧUf]~d qNou$ W<:TS,FԱx$L>'*Y6lvT$ ҕɯ]A{9r'K4zJ%mx#ld+EZrĴI*_ldєuUQ'%Fۜq]Bp~ܕA{bGdRy6I.jƹ &}uFfo݀pQ V?[ҒelXoeK垥,Fgf#3A&5$X$%"gKrBF7}\&nQ6*[ |E;㱨C pRDS蹳-$x^D&52 vT!]T3sH2& Jݵ%rv5/9;*Mf#M$_&Lig1[FRY5 ڥBAr;P|HSy6)r3e.RNmN( u`ZN@\<+Ì4z̿9l-?' a0s>&1֙2CP>N O~lū9t,\tPt0iR6.g<9cSfueSKXKw_*F|Lcvv: 'tr<NH%y rU9@}͟gvw<;eЫ.ܫ,'Y+U)b!I?BaO1W4') 6+ $˘RcdT БLV̠0h̐;N )_ܻUD=|4뼁w8r_ǩH=_3:Wuyp$"BM>̏ v1;xxFPz LEa4۳E'DpGk]]ކ>mѿ{,:hz>$vʣC?}m1j;!RiP)B,bqRKQHDbc 6*i^`=?QPKC('PK!*5res/drawable-xxhdpi-v4/ic_mr_button_connected_11_dark\RIFFTWEBPVP8LH/GIƍtSRHq\go5I"|2%3,w䦖jzٯ1#qy:mm+u+}B*R5TkT?^0 Y_h3~QJRnϷ2w(tZE 2j@fc`wTSImD2s"05j7t'cF=;h >NGNtf 0$S@\`B@{ h6Tpcm;#: sc tԞ> f (t{PKoa\PK!*5res/drawable-xxhdpi-v4/ic_mr_button_connected_01_darkNRIFFFWEBPVP8L9/G5HrIyHΈ g9 %Mg չG O4y̟;g]QTM+D[Loъ{V!W>#XlU9WUG8]5ĚjݛI-vC&pi-Tb8UN)/FS)5$4Ǵ3J; F8VW.@fF%=`8uH;`8uY}pهMIt4 lV ͊Pw  cyN( 9|#= .)WuIBUykrϋPKSNPK!*6res/drawable-xxhdpi-v4/ic_mr_button_connecting_03_dark\RIFFTWEBPVP8LH/G5HrIy&``EMg~ѫw^? M]#ϻGWP hPE[JߢUw#תwd |JkyqThjx簙;ZSBvhTF!2N5jVf v IOhqfB73MvH.tÈBf82z X I: ;0P> IBy3cA|Y4dSZF 5-cx[PY=gm PKa\PK!**res/drawable-xxhdpi-v4/ic_vol_type_tv_dark]RIFFWEBPVP8L/G6iON_58+u$JOt@ zP-f ԉ878Np$+2,6󵇷 pA2)TpNL<3'B8)'7;hwr2X0[2S".\35ud<Z5[T Zbj5.V{Z+bVajkK4j^`Fw1퇤?ɉ=<PKnPK!*)res/drawable-xxhdpi-v4/infobar_shadow_top tsc``wu  1Y d$2ujNWf[fEW$hL\ɇ9'3PKIFPK!*9res/drawable-xxhdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png sb``p  $r),R%y! ,L PЁ @ f@1]HcH79,.Eg89#lmI\eoU"SM0G>6fr;m>ޘ6滬Z46 lsC2. k0EHD;Җ4.lfbR0*!l@1(&ʛ6y\D+P#}J..H1Gh % )s2K@^a'SrSSleLyYTB b{ϕ_QT8ucH7$AJ2|D=R*6r^Y|:}r&\AT#p*V'2AJH+C"-J:@LS)2_BVV䕕~3Sý }{7uSǽ ?q  }OtH`'7 Aެ 5lާ̥lS<^n^3xWyfam>7˼/#gYzc$랼VQdݟ3mqp{uJW b}_Ouo}_}/#~=/}߃~\&ݾO3ߧ/} y}{{?{o{{~{^]7?k!ï?$I'O?BPKp܇PK!*8res/drawable-xxhdpi-v4/quantum_ic_skip_previous_white_24 ts`sw? (vb/oMT7n]$_+CKFQ(:hS}J睿u'<|xc` mp0suǃ^Yp5WpLqcRp \Y$8]& GiM]}T}oz!5:o}N+'C-PKJ*PK!*)res/drawable-xxhdpi-v4/ic_stop_white_36dp ts```wu  H l8k؁\gL 77[EIPKp,20PK!*6res/drawable-xxhdpi-v4/ic_mr_button_connected_24_lightzRIFFrWEBPVP8Lf/GIn#I;-2"{yms #38e< Vcu 9+s1 &n; E n :A$  lڋ $~&YR]=a ~Q?︨[u89 PKdzPK!**res/drawable-xxhdpi-v4/ic_pause_white_24dp ts```wu   rwᬩ.gxYZNPK yY20PK!*(res/drawable-xxhdpi-v4/ic_mr_button_greyRIFFWEBPVP8L/G5@rF4cىJ~ꉀhlBm nm۶ٶmϖ#m$IΡ힙/b $b tRU\vHU#.V; ^$MkĪP WMAla]Y9Lb| *Ĉ4)-Rhr gdw=K|a5mH0|3%r\ [,WM[7v(#rshb@P_ \ޔ^S*$|.#iCRc|T 矦9/F/;#iGYiQh9iW@ײҏta)xw:N`H<ͭMby\et7xf?8 D^^.R"Tt>u/:qnyn3|Hx:ox@z m?EPK%PK!*6res/drawable-xxhdpi-v4/ic_mr_button_connected_29_lightxRIFFpWEBPVP8Ld/GF$I_=^ I!dF%\h?c[+tV Ėˁl=}v~v!Lko[:@BLONפ Wy<2c< /3YHX?j$z2BwE>('L]%eF{MRRe/N0yD j#.7`/Xey$Nk6zP֖3k7X_)/1.~0 L!=?8Ț1t~p  | Nb ( loЖ(n}OAף{0Se^-:9'Pχ@Y @$ 5Y6M`_;ӏIKCM&@WEBPVP8L1/G6$ݪa` .y2:N7?cvxW`r\yc3f,BzyT~ x1/x C߃ "V߁C`'fY]@,"Y4kli:+-Ȁ- @$  YQ")oNi@N""cEp&ly>* Hy$ -)5 a\{!.wp8 ,@4$$C…-OpaC=n/&`.9#:E鎆 >-|@ֆa:LǿWPKݝKFPK!*6res/drawable-xxhdpi-v4/ic_mr_button_connected_01_lightDRIFF<WEBPVP8L//G6$]a % e&X+6Zi6\7ddgWԼ +Wa foa&-d:b׌g4ߙМegƣ<d-|^)3:M++=oB؇7e2xZ榘B)cFax `T\|J@ @6>. s8r{ HQpAfT!A2atQP[ړ74<7CC;>(c w|`Xn[܂U趐PK'IDPK!*6res/drawable-xxhdpi-v4/ic_mr_button_connecting_04_dark\RIFFTWEBPVP8LH/G HnIjYՕQ 47d>dO03ʗmƗn5_7Eb"Wn_ ktae "!-)!]vPg.lv͝`@*l#l@0* )cRŭvp9JewwA(R3`k(`J.a`&"i˴琤ac,2M9*B=, T6` fb'[Vxc{{nDm8}n!>6#FHPK$?a\PK!*6res/drawable-xxhdpi-v4/quantum_ic_skip_next_grey600_36RIFFWEBPVP8L/k'1uS7u ۶A!'0G ( q@<  "P(PIsa~p ԫ46Wml۪r~E?'rw"D"mgϞGȿojً"r E AAHdC9t<:9X6Ya.j|R+@XApPv2x#?x+ktv^=-+cLPK PK!* res/drawable-xxhdpi-v4/ic_chrome|RIFFtWEBPVP8Lh/Gʶm}{s(QqY_m$EriW>9d@G\ Nx\_t(HRiuJý}6;2tk?4 CO9RsA5>;eFpn $c5]64knkBt%9| X;Ĵ=,;󅴳d1;#.bۨlx92jwjgft&QbO`{9WI&@zQ<}+ζ砋?$WdL#ns%̢$W6*~Ļɟr 1c~vT;9$gRrLq::kg݋0L#_֔96OU'!N.v\L (iYfB%A5%Y&1IBRtnlHx=%kՖȍm$n]"\(YSbK,n{^{M>x)+~ggT} .Lp%c g NiY~lh,Urol~rTO'8RTgS8Lz"Nɽi7uڦg2EV; iГܳ-ZgU:ۆu~-, -': n%h4H]$z&%iIXB3, -o 頗l<([-fJ`z.t={DY_9((_OPZS` ײ[ ?抱3MC$yy!g<'&K/AI屮PKmr|PK!*,res/drawable-xxhdpi-v4/permission_javascript ts`sw? (0աH+2_02cfms>,o<,znz ;~?%!oOD/q_IS5~6pmf_W`s639lŻDD>if0}f>%?Ց|iF^]պlzu|UI PKPK!*6res/drawable-xxhdpi-v4/ic_mr_button_connecting_27_darkJRIFFBWEBPVP8L5/G5H$Inl`ЍYO(B &@^` X4fUp,?~Cz)s?!'Dhu;32ÍBι2V5#2:kH-䬙Aje7SEnokP^ ip5N3,iaS0cF&J,8f3C0l!aJh2q 6[pAj8t6+ &I  hh{DC 5 po5p/i1LcPKhOJPK!**res/drawable-xxhdpi-v4/ic_folder_blue_24dpSRIFFWEBPVP8L/Gm$)RpUҫ$)3ޜpŐ,mIڻYe&4Cq>J&ѿNUfP-h"&5 esHzqܻ .-KX ړבCm7z뽖ePK<PK!*?res/drawable-xxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_005%RIFFWEBPVP8L/5@ ? FR{1 OkF#WROPϋ;r[HMha+V2̎+waK=s@`j{0) Aa'  !@`C@hݱ@*OT9QQawS(QNCv%4: RAe-~UٽSDKUh|bA@ Q@ yغeB/1: H7фy[& {4[;%?ۙ'g,"vtPKPK!*6res/drawable-xxhdpi-v4/ic_mr_button_connected_13_light|RIFFtWEBPVP8Lg/Gm$IDea`#6)H2X+ h 8Ng@/%4u+qWnW %ةx;zB{*zTLz۰@N1NC|OáWKRr;U2:{ݩWB/bR7tJxj`M%d`M|)XS4>nI); n=d"S#V#"` A#8mjM^r*?#싿F/YxWr*Hsy\yv?6Ogg) =ag }*#:R@̄bJVD*t@nqkar4-MQ8 fFQܱqV8Q#̸J h=SpqJLub::4*\SYU?kє cpLpvhhN6!h0P)xCr%]^ T f-Π>0zG ݻfRiIMa l}ő O=L|vp_kf5_7zR:9gPKY)$PK!*7res/drawable-xxhdpi-v4/ic_mr_button_connecting_17_lightHRIFF@WEBPVP8L3/Gpܶ$1]]+ 4c&&i\ 1;¢we:璟5|Ns'0ԋ5wSB'-= UOCPB< ~+'*f@f{Ss怌6c@RR˪z`Kv * RP;C $ύTSPiTQ* bT؂c!IycU.j)7S8(/`@]`d`_ 5 <{PKIhrMHPK!*6res/drawable-xxhdpi-v4/ic_mr_button_connecting_07_dark,RIFF$WEBPVP8L/GU@$7nW, hOFAi' &8>e)_Vf%b\~"S97-5^fB݅{as^؀ wݰȽn0t/8MNCp6:-D{ 2iDtvL#ai6p--jNU+gt/DsnaQ*iJ`Xdn1)vPCdF(Gʄ)8hh,I: GR2ڹ"Ut6DE^/Et PK21,PK!*0res/drawable-xxhdpi-v4/ic_vol_type_speaker_lightRIFFWEBPVP8L/G5@dnKwD@xU2sNmz 16PݮVZ?N@̼20V QZ>)fPoS2uOM^ޚzhM5_;T2y =e7mߥ~G]wر{'uƷH?p`mj"kvq຃86&#DY z$;"#Ʌ^53herNpC;/&TGd-2\ Tʂm _B@+hO m4`-p謄JpaD=J9{JLဵy2 +Pr=iM4/#wꔒ$Z9B!tqu;^^5(6iPhszCdx.qNt +eڪ4fE'1fLSISuNa>TO5P a+c M! w7cPK+!PK!*5res/drawable-xxhdpi-v4/ic_mr_button_connected_02_darkVRIFFNWEBPVP8LB/G5HrIyˬeLh'TxMgLs?zz\Pir; <+#Dxhuh!!(ؽ$ꮪt q-55`M5ގpcf$5 = vrF[NSjRqJ; f+VwfvȍjPl vTZn04a$ Y\ , HM Sk0,Pp{@ 6+$^|ð s8Ub`w, &z^)f3^7C+PKdnQE[VPK!*Ares/drawable-xxhdpi-v4/abc_list_selector_disabled_holo_dark.9.png sb``p Z@\$\6Ry9 P̀ @|S&H$301q*9 Bb m؊m@1$3 <,؟2z Nz{{?z- Z*)buY =]\9%4PK PK!*5res/drawable-xxhdpi-v4/ic_mr_button_connected_20_darkwRIFFWEBPVP8Lt/GUHrIuȪdn$AM3F1(;(w- w9-  |w}B ǯa&-܄K؆;((sQ$]$H=W%ӕd9 %l-SxgAzNZaAB=|ZMp'(rt#!sBf MXS[ FPxJF@Òia`Ոˆ0ҋ0F thZ9bm,+& b,pR8Tz 6 m*~̂bS;) ^n(]^PK[<PK!*6res/drawable-xxhdpi-v4/ic_mr_button_connecting_06_darkbRIFFZWEBPVP8LM/G@l7nsS#ÇlʸB+P!IqXdI( O@]O#ǂLU$.?oDVx IW |GgưDk.c\ZHvhg-Twч$U|/%$6C%#k#UݨfpwK³ncbDE[EK fI@DţāG07a!@;!k77BQD)latDyqZՍ6%ځߑ94py2P:y&?ЙX8n<#cpcw剷ix&zfHJEsa?qm1$*2Fz#76^A@1;& ?:N!w#͘b|,I%IBbQ\]`Y/% da˨^]c;ŘqވEl+ TP!uJ]yke$Ah!T['rِх~T}zIϋ挑1i器UvXky^y,N0 L|s#2EC![HAhOfX;|)X޳79~r{ƞ)Mnٵr >"Rd"Cӛ2~ O)l(q>*d+NdPZFMl >.4fG\z"E<1ruRwX%w!Y4SS$׷>Q@}qY.qaXmQ0{Fɍmh<PKGF#PK!*1res/drawable-xxhdpi-v4/omnibox_not_secure_warningLRIFFDWEBPVP8L8/G' ۶lh(iںGuNV}6m@m[iqwwww;IA'jU#`6{CTPq#tt H:֩ ڼ>7tE/_\v)z\.5UZ:t )ԓR1LCEy-'φbWkLdʁ9I-OL>З~B`\F K;;d7!8R\yVy_NqRL.MZO]-t].}>}ij+ vggRw6p$R|C QI( AN\Gjɉ"p6kb0PK #K?:PK!*8res/drawable-xxhdpi-v4/abc_text_select_handle_right_mtrlRIFFWEBPVP8L/@ H~E@ 7D $n)u&ǡfx~"v/Dle */"D xQXD))(JMQ4 : E1Ou=_Cp+j:0U WG@z.ES,;S!#eQz1$K9Tj!p{)qS æ֣nC pGTGs~*e߰[PK8PK!*4res/drawable-xxhdpi-v4/ic_more_vert_24dp_on_light_bgoRIFFWEBPVP8L|/GU$Qj&ZzhPضm^- HRm |mFIxD~T?aaz3't nvQn#w`l!zǔa:Kt[964PK\PK!**res/drawable-xxhdpi-v4/ic_audiotrack_light1RIFFWEBPVP8L/Gp۶ 홉D8mx$;C'MlM<(/$.ڜh@¼hlaW:tb+PKއՃ~PK!*,res/drawable-xxhdpi-v4/ic_dialog_close_lightRIFFWEBPVP8L/G`۶$_݌ /Pܶm;\.z_5/;$)nRwo?IBwXCN&<zO4!Du %3%BK:C>Y#Q'IAAUE ^0+6h\On XikGXtzZ:ҬE'*c݁|~'dPK*PK!*$res/drawable-xxhdpi-v4/audio_playingWRIFFWEBPVP8L/G5@$7lW '27v[m{6ξk7\˶m%FR1 mw6ߦ&!-6NWgQ)LisCӤU СT=zE7V\0%響V rW3LG4qrP\87Fiy >cŀp#FaiQDf;w" xÜ'>B_Cc90%_˟,ٖXחzg k5߻1/a~iko;6J)1!59D2| PKTPK!*0res/drawable-xxhdpi-v4/infobar_shadow_left.9.png sb``p @$l p|  .vTggmR6y! LL @&0@0A<3MVj }1)|x\$Oo{T.!&rLQw/ř}i;c۲La@dopx0#izk'ON|¥uOFߢ|h8| +BVpL4^zԌUa3Zދ7nQ*;jʉt+jFBGd+P*(9KIrH[M3(rla\Q ¸PVWYThnYPfij 7ZT jI Wb4h AiKB)Y(6j] 0> 'ԅTCqp%.Fq" ׌ @axaB$ AC߳×jh`$X׬O8ּeh [:tb+PK6 K~PK!*6res/drawable-xxhdpi-v4/ic_mr_button_connected_25_lightzRIFFrWEBPVP8Lf/G6$ݪa&gԑE&رB;vJp]O%IlN#C-:CLJ+>< (3ϸ@≯h; QW$7LP5o#dC@ Yr/3 163p$e@xɊƙg p8PǙI 7 $tĕX|`Py 7ha a|Q?(arj9LT!!L(|8@B…0-*hOސx\]_. 2DoSJ,?Sָ PK7zPK!*7res/drawable-xxhdpi-v4/abc_list_pressed_holo_dark.9.png sb``p B $w$ s H$301q*9X@(6 gΜ!9܍Պ{8hOy|AРGK*%ޕeA鞮~.PK5q|PK!*7res/drawable-xxhdpi-v4/ic_mr_button_connecting_09_light8RIFF0WEBPVP8L$/G䶑$v:#"SAi28=9N@f@Y1V==8PK!* res/drawable-xxhdpi-v4/web_asset~RIFFvWEBPVP8Lj/Gm$y鿒y9ދ"fhmdO!;RrD9 1t!?`_YUjED#}O6=ۧoHPK2Yἃ~PK!*6res/drawable-xxhdpi-v4/ic_mr_button_connecting_20_darkXRIFFPWEBPVP8LD/G5HrIyd !3z#M@3wњ]uLr^&;@g]w.4^"Fv -jL/%k`}Tq'`u$=crb7$7ZwRH%]a57'Ԙ 1 Qk CtS~cucxJi1Z"BlCyp;6 ?5CD6yP[B:lYmCeLÊ%o@7?l|O>(D&&)z7{b6} %4{PK 7]XPK!*5res/drawable-xxhdpi-v4/ic_mr_button_connected_22_dark{RIFF|WEBPVP8Lo/G5HrIyH̪d ! *@RxM@3wFwx$=ɝ7@g^dDo}5-ZoQbmq0*LvhXr8U'X53Z6l{HvZ;3Zٯ2J 9%Yp MUA-FBDEI#׌"l1۸"WHwѥ|Ja(irE\i,T)BCo) ʂk%$ 0$F3t,.^3apfK-pāO> AR?8x!g{boO)ͅEiR {PKWTPK!*)res/drawable-xxhdpi-v4/ic_media_stop_dark tsa``wu  Q( lhTO=cePK`(H64PK!*@res/drawable-xxhdpi-v4/quantum_ic_pause_circle_filled_grey600_36GRIFFWEBPVP8L/km)<&BmǛ_R۶m[3vCj/~S>1Jujѝ/,CHiY, A"zHfZsXwbG+i pJ;N[UZV%~9V|YFBgsZ':X2qDtJ,%:N!zP2tST1%m4B9h_TCE| UU57zQYOks|a އUN=zaKS &Fp!%5B2Sf:;%HCV3[a L(0ք|LXe!ap Ox׹'^{YHDŽ^ZJz)L%"]+~b`?V2R[I̐urCdlIFࠑA\]#9ִ/R 3xș -]mt%7] ^ķs>=(y(!\ w`ǀ9 8+f-7";P`;'wpgh /P\>y+q˥m:=Z sGZAEj쿳&A /1(K"It  ITG 1ܳgmG- EPKxXPK!*7res/drawable-xxhdpi-v4/ic_mr_button_connecting_11_lightbRIFFZWEBPVP8LM/G䶑$v92#{SAifpӅAt-Tt<%7%?O׬`D\`Stc{(t l.^BU5xNM` U$y!XjT#UdWU@ ƨ^Pۊg`Ubr _(@RxjJ-T:P!PKUIPn [~\Aʀ ~4@ Wp0zrPι B];vAO mQR!6vLPKH gbPK!*Rres/drawable-xxhdpi-v4/common_google_signin_btn_icon_light_normal_background.9.png sb``p @Hk) ;6r%y! ,, @H c"q>#6 *+n:1ۻ{E%>۝E%1/]Kss',ܑ#^חѥ¢xc3 9><MSN$$$  &_vAp ᄏW*xz&LmWˣNn{Ĭձؼ- 6L{??_uvoKZ=猪SF:Yz̲r"x~}lK'r:&PKYrPK!*6res/drawable-xxhdpi-v4/ic_mr_button_connecting_19_darkRRIFFJWEBPVP8L=/G HmY,l$IDi|fiVc ~lÎ)tC lnCH6`F ^PK-`zPK!*&res/drawable-xxhdpi-v4/btn_delete_24dpRIFFWEBPVP8L/G IƑv Pm[r pDJrrqCFFrH$w}u6"%ǰXӽOJid(qdi5_sG)EA¢HM(ye[q x^ 6zǾ^llV;ݼx?mHܹ _Q"C x!fy?1 >0Ǵ[DKXfU/N]\Ӹ4ӥiqY^ ڣ*TzFKaQUU~Tu4"!WD̑X#l.+;G:31A@F' %uz:AĜdnFKiE5YwԒbƹjNw uȎ :qo>ܥ|Wm]%?[=Bd%E<3ꌿe:IzNV,Sߖe2Q~LX-_oU|߯rIPKƝPK!*6res/drawable-xxhdpi-v4/ic_mr_button_connected_14_lightZRIFFRWEBPVP8LF/G䶑$v9#"{SAif99unNu >.zN~O5C; ɯ Q @*,׀%;k EW@T@T9M݉ڦjhP:h*+1% { \O(Æط\:J樊 $0I1k(jq  5Zp ; 2Ö`.\sX5 %ꉓ\\gef5F5O6 8(T縡D%XH`Rҧ[xƙL&1DT^PK_ZPK!*6res/drawable-xxhdpi-v4/ic_mr_button_connecting_10_darkVRIFFNWEBPVP8LA/GHrm;nDҖ >" B%J6EVvvdkYk󞤶ϑ~=2i--{~{]iv|iza[H6[HA5\G2,.@@%9 ,<5@ׅXQHJ3. pg̔֙ 4giQPf9dg0) G* f8rf'yQgҝ)șן9!}鉹|Iwu~A+~z2\jxWPK}/[VPK!*2res/drawable-xxhdpi-v4/abc_list_focused_holo.9.png sb``p B $),`& ذH$301q*9X@(<0z֧(ƈ.H\( ; )hYQk[ǔR})n -9195IwF8PReqj)Šρg10ԞɳIA7KrP6Ma#i85}Ǭwx1n,D ϣPZ{ڣs?lr!}~ԒV9K:RHդl7JPG4 wV۲X),GC Sqewn,E=p QeS5= }Oi2Ć7QgAIֳ8}s9 agQ#,㜅؂^>i/O]ka3`=zn%_ Q[[#Ώ>uSEE=tcYe#[GPK)0u`.i$vZ`Q4(-ɹlDRk)tjݱ$%@gB$%}d:qɤpkP#(Csg9D(5+1eOZ9+17 4i$̲O oi˳}yH:3iC\||lb>Dr=[HD>= 7JZd>+{ ޔ3eUS'鈒^G~iuKw3K*}X;5gP00nQɻymq4at~ 駣Pڸ,S+ rZ2 wxo+"P]#d u785`H3s: =>ۯB@oo:u F@ײ87خ$Qգ$BnX]`oHGc X4)gЕp n)B%/"3:[6./kpܭ5 [lF"BU6_Q{tLVʰ5OʑDYۺޒmGK]uvj%94Jd]#u7TsR\ 樤D,]ye y"Ng[W? bkրz}_O)ۧ>rY=uSw|3mosOe`:.W3|4 2+o$(1;.)[.]`.\ƿWPKr"GBPK!*<res/drawable-xxhdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.pngmVi4ab[4dߗF>[2Yf-CQ>42l cR%YC5NeYdK ){ws>s=7 ~p_& r4pD#w^K)՘X3p$~&q券, Іӌ,e`~Ӊ']`QV}n  Ua@Tt\OS0x =dTemd6)GK u{TS€66{35Rb߈G77 `#rVmrEg@6JD%z͑5E]eL._@[y YMamQ'^)y%75S|nz_ 8!D1.Zqs,< o;~|j|kEQQN+8LnuIx6 n 8S%_7elTLxa䵅(%5˜Zm5j˘7)u1TV&REeV۾XS}R: <#7z:lyr3l[ UK=TT}qFPCO .dȉ+f90' ~ $j='/& :BE3kTg7؈g7 \i~Akr%- X 4m9$J_ >S|xgNZc h {ٔfv=r3G{lg&ׄNL"լc^[!"2ܧ@۳)?~4 tf"'v~B{[0 =Uq:c QQ v iKNWFN>YN,wC/~zx{ۣ+) DyAH1ӦS=38'C?Gya9MIW^od/(~=]Vz,I㉐?~+[fz ;9ǭ{5a^&ye/(}.-رA0jB/"np轖!O*N\,uy+?9rGPfRB5iFZUs7+T뢌Of#A.&[.\w%"ёm=²}6Ѿ~MUE5h| zt,)s;b= ;֗bq-ml%[Z} ݊ɞլ,Յ"BاvTr_IԩW %OU߱uʋ놩wAyUh-' xdϴ~Xm`ܺWbv< Ẩ2k^slĠj-HWۧPpq4{+&|R#,yH E΢WU!J{3Q+@7w$L,{RzZz[e&>,2pU>sp*]詉mY|U5TQs˓d]@bMI6(޶zKeZBX/ɤYʒ "}WNjymbs~nǑ*ϰ+k;۠xpC|ҫR>BMlC IQ/yq n@6 % ғn7VD39M3jM\L9(HsF1^`cаknWϒjk5ͭ;8PsIAK1s!'~ud- qTV\l!rmInPj }y1lhoM.7FgF,W+ireK 1{MMHոXnol%~xITay8L4ۯXl,,/|̕ƃ!*3.RSU12tHRC aJHq:S<Ɏn97QZ! Ƥ&.#yffdjsPV^RfY{HfNpRbt\H͎- <\PASclԸ#8Ø+'L9Ep0aԡxsquSS踻K,]jb0 G].;ؽ'Py `k:)6O3'-ڢ8F FZH3;i#u'+8H+*MuAki2Ax~9t@_څ ŖuU}]ffm9.Kӣ:ry`df=ԯKjuL Oڑ b09J[$g5~}V9㴸IV,EVݠΜ5 L#'2BS}9RR,+TC"{6h V_O4Ag5KvMu]xiFH+x1v0ƤY*s4?,1&I"!: jl 8UQ|*ZIneOu7-$!!|ٴkI%Fcm ,$TZkKLZW'hVF3_+D;L+*1-$9 [?[8"hH%ҚN 9A# %Itt5d& ~+S2h&a7QN6f68eHXBJ@|+':t N0O&'Bϟ* ?PKJ PK!*)res/drawable-xxhdpi-v4/ic_audiotrack_dark+RIFFWEBPVP8L/GF$w:^ht qm[shf'%:i(uv`oվ=/$.ڜhgT:#ɡ#4W#H<DWa~~ga`4̠Aa0b2[aJT0ک\]O,. 6b Ă\N?زk<>ʒxL}Mt PK,JPK!*#res/drawable-xxhdpi-v4/webrtc_audio9RIFFWEBPVP8L/GHr#ɑyJ jfVFU>(挷m۶Gu۶flm&`c 8W.<^83n4˒,W{~[c&r>ɕɕNPNr ؂\Q$6C"aΖ ѷOo0^ݤ<csIy<6&TmY)m>"oKCYxBk̀Ib$53j $ڄm[`B(-̛zIz3CLffOnLYey< HlC?^Ƹp1x5KIl3I~q%ID\@_0[IgXm4oIoC \Nk(yr* h $^CYq\/v]ЛԈuWo GKViIay }} PKᦲPK!*Dres/drawable-xxhdpi-v4/cast_abc_scrubber_control_to_pressed_mtrl_000@RIFF8WEBPVP8L+/# #IJwwHCeD=⏝K5"a$٦um]C8D۶3sď~ؿ^EჅ,4 nBBkFemy::gVKGs^9Zʯ#k^8Z/-% tP>HttCcg%:ZIN^&rGHMjKNɁ#ͿZɹOQۍo=7oϞ<7]@b!,Jm(ݵ=}Ç9ӞМ|Ĕ FoyxguK}PKr qE@PK!*0res/drawable-xxhdpi-v4/googleg_disabled_color_18 RIFFWEBPVP8L /5@ @mǑB轝FOxIz$* ,m;e۶{ٶm۶m۶m۶n#)K{7PoPVDbN$%'<#TLY9U8a>[LTeCQ""˪'܋B.fV{a85M2B/琴{ޔ.j|إLZ QwL)c] 4eR>o|p3psd8{f x7GE2!\h J˯I'{Q ?T,xA"1[xT(Q5e-=O dI/ pA.le&` s_:,ERFDS*L*)Z9'E5u!Z5~STWђhZ)Z%B*0ƭp"s>*x"D"hs2czfػ:ڭY@*-qvm&G')w8 |<#%l|o+PK]_ZPK!*1res/drawable-xxhdpi-v4/ic_mr_button_disabled_dark1RIFFWEBPVP8L/G$$IpYnHR$+ecffɂB$u agԕJ7&*W[ɠioa,;]:<*:U6To /A`jd 3Yq@?? @ ЂN/r5ŀW A1ʇ{Gr?ʓCr#"jO2F2M-ҁ,* 0F NsH"qŏg̫co s2R 7Tz4rh4e( %#@5:@gAb9t=}c-1L ,#,R?)fΖCy @gӦns yrHhDMSFҠA2PRR7>=θ2*Lvu$xg٩gY>M{D. iClxաq;؜@GTATY'! {L$_{E!w0,h:c?E;AKϟ޾2Fdnt;-F{uk7|'zoĈ׀CǫE>&ơ5޼ϞOhp iڐ)C{=/e9PKk]PK!*6res/drawable-xxhdpi-v4/abc_list_longpressed_holo.9.png sb``p B $), [5kd&&N GZ2Fay.o Tbq:9eF3fQaV8.f2ɺ`09S货@xsJhPKnk#PK!*6res/drawable-xxhdpi-v4/abc_spinner_mtrl_am_alpha.9.png sb``p f@$S=Ry9@ K"K%Od&6 G ` 0g_r=]C"bt(@xA[BUYܹ9:kv0ڲ5.|Rr@ NߵTW{Ҁ03~[{\Nޘ)_UfUmTޱrZ-ŧ"]iT 9x_LP=AlΞJi<*|iLti`*1Xu|`qJqlllo䖚|YiÝw~$SBaKkxʯOlsܴL'ݞ{6sƠ^O?Wovʁ^ 2(gkK;czhtg!/֛45Q x1Vpϼ:U*(=]\9%4PKIJ PK!*Bres/drawable-xxhdpi-v4/abc_list_selector_disabled_holo_light.9.png sb``p Z@\$\6Ry9 PĀ@yH$301q*9 Bb /$iWOǐ{o8208lԽFFu7VhMZ_n`$Oɞ~.PKaϛPK!*6res/drawable-xxhdpi-v4/ic_mr_button_connecting_16_darkDRIFF<WEBPVP8L0/GH Ʋ3IqU;q-HA JɱbƋ ?n}rƭͯۅs{jl?JoaW$ٟ]{n?\3柂dOA`|  ?zQZ/'{M5U^m4cn?W U't9b@;ডoAրTB`( :^ 1PX%Zd$&@)zp/JL ) & fg.)r\8V PKcIDPK!*Rres/drawable-xxhdpi-v4/common_google_signin_btn_text_light_normal_background.9.png sb``p b``'pI5  ;6rd&~ G f K̰@- Ć30py8Tz{˾[6U{3wTqфsAkD_s$e7wevuhQXqSls3so=w3vztFƳb:Ԡ/{iOGo;kƾO ](t9~;xVy/ؤiN.Moڬ}&0sӻΛ˽5._^,pj/ĜT}~2vν?9Ĺxf/Ͽn^gz[ϟׯǗuVg7GyeJ-Xx]>qϻ=!_ZƷ4r]^n_/ٱcz+:LMnzZb^;NTxsJhPK%=UPK!*6res/drawable-xxhdpi-v4/ic_mr_button_connected_15_lightfRIFF^WEBPVP8LR/G䶑$v:#"{SAi5sFXo+how^6y><y06(z ^ *fF@s`F2`f S hfz`3N(aK8rC6Ѳ\ r,'ʉ0D9DM&=;*.|M)P'U$5@Ty$_R׌u,uy#\> +Ayq%߇U V:$i*6 pEm/5l'kʀRx&m`ڌ$uzqoiti?(q)IH[d`K ҵóA2VNxt+d+1Vݲ8eg}>(@),Hΰp!IN Ų-` 6Ų_ %G=Ap^hH5ghrԺxf-z㡷ZL-6ٵ8g$Njazy=oHazGq=N"8Y}9\zGϮAN:=u>rԉ驣{ {n0_:ޑhsjM+)^rY!EN>&9}^j Tg7J26}c_}@ߎ@PK?1VPK!*0res/drawable-xxhdpi-v4/quantum_ic_clear_white_24RIFFWEBPVP8L/G6iO^δX5$)͋#Lu$IR@$> pA2)TpNL<3'B8)'7;hwr2X0[2S".\35ud<Z5[T Zbj5.V{Z+bVajkK4j^`Fw1퇤?ɉ=<PKnPK!*7res/drawable-xxhdpi-v4/ic_mr_button_connecting_01_lightDRIFF<WEBPVP8L//G6$]a % e&X+6Zi6\7ddgWԼ +Wa foa&-d:b׌g4ߙМegƣ<d-|^)3:M++=oB؇7e2xZ榘B)cFax `T\|J@ @6>. s8r{ HQpAfT!A2atQP[ړ74<7CC;>(c w|`Xn[܂U趐PK'IDPK!*7res/drawable-xxhdpi-v4/ic_mr_button_connecting_20_lightJRIFFBWEBPVP8L6/G6$ә+ $16M3&B'ZS[ zJOgg#N.wEL]!zaWJ0x 3x 3k`UȄ6Tr-S6LsuN;alU:0%p'3f3 $b)ӠܘQtj㱀4:7}X7<)sAdfB5x*Yf $aF,7HAPIr@+GONQx[JlBc_c6{PKOJPK!*-res/drawable-xxhdpi-v4/cast_ic_notification_0sRIFFWEBPVP8Lx/G$$IOݳ^"ضuWEBPVP8L1/G5m$I$6zv:^*#05FNB9LϘǂ~4?9a=7GvTAŽB4~V-Zuo* Ǣv;#+TS+vNFvWSOS )x\LiW,TiU+:rX)'ҴcZ' $It%VK-B(?lw uɞVC݀ ΂LXM"sԖAȂvj@rh(]ւYa$|Y ${ kO,pB>®=sưWPKKFPK!*5res/drawable-xxhdpi-v4/quantum_ic_forward_10_white_24sRIFFWEBPVP8Lw/GHr#ɑ+"++s)F _lEtgtj۶n_ɶ7۶:cсHY<}Cңym*TlS٦Me6m*T;Uz@营^'C@N쀧1n243eTte lAøT#xDW+a^?׳s)/h w*px[=DU/-nxQiZ (DP%630цAi 7(^0,iW]ҫn EzMtsI$l; ٛ<83h(^3LSYOg{¿zW(uzD7Aw%݅㾰tļ!DZ')䮆*ox1®{j^\\`];:!Meos"I Ѥ Iˣxx{nz6<FxH;s)ƹ7sSoV޼ k vSkE4& &eL5Sg*rpw?->3DtGɹ-56J rvQ=_^REPK5jPK!*6res/drawable-xxhdpi-v4/ic_mr_button_connecting_09_dark@RIFF8WEBPVP8L+/G HmY,l$ )c`gea~(lCƌ_a!zz^OjnB] 5k q#G2s -ln@$ >1*l"֑SBRga29o"lĥ< "aSH45af0KvdH;)7hdX%- &ArHEa6H, 8Jt%:-< I{46ELZ4EQq o5{%G4p Ҡ&WJȸF>Nkkvu(:k~2rh*thznK?uhn nNMV7&جV#[nmx~ϪRtSF5~ND vkܧ}u>9fՔla^jIM*) B2zx2O[5&m93Tsi{2}neUxijPj{j^^NO-/Ry;e>ۅ9rL /9rr1/6FcrYrnfrr1/_5&7eyѝ)Ƽ=/+2* ý'p?,!7ɼ'21kN(=x1Hjڂ^Cj2/{Ǽ;y=&|PK_:h PK!*$res/animator/fragment_close_exit.xmlœ=KAg|\>QXHN&BD,ldcNsEK@lmM}/M#f9q1Z #%h` l=P'\g ;(]?*IE*ҧBwXI~}!1(=rO`^PK,mY7tӎqF[xf 96!kE:94J-VPJxG穒Y z"RDZz 1zT~ߐֻun999^o+xMou5eRvPKQ`PK!*$res/animator/fragment_open_enter.xmlœ;K@g/=|[\!Wr+9 n1$6Qo~&Esz!> ?f $""E*21ҁzF1@ .\;p@ᅉPy"Lē!U?JT =HHbR c*<( v$p}ѩDqyt"I/J/Mq@Η̦&r1v =gMΧ+l˙~ ԳL3_0=ޫQO2w<٫RfF{N5f{Qhv/ziQ~4[o.?=L?ލwޕ%WgۃO5]=_گ{XW?PKf>FhPK!*$res/animator/fragment_fade_enter.xmluJ@iI D<{7Ad!$6[OjBUp!^@Ψbm;c2#<0)3a.rEwX3kJ*2u}UԙbRkI\}MR5.1ML6\ͫ\0g6y'2>s䓶Izk!=C.'ؒ{]6~K[ZMy!PK 4b PK!*#res/animator/fragment_open_exit.xmlœK@Ӧ?cP "E\JqPp9F\[G]տIDw6 Nʇx^B,r;Ih&@}H`lG ܁GAꇉPD*rxːJk=%*cHHRyB6E]YzJmlt$uݸёˣ+W5Rtv_*B=qbSX$p0mx`w@F8"&_Ө^D:< 3l}-|fXgmQo}J{=TXi{?΍{~ލwU7;{-kr/a*̽1'PKM 뇈hPK!*:res/animator/mtrl_fab_transformation_sheet_expand_spec.xmlj1Ovlwݮ-x!RҋRzXPq&Sw'C&w x[ ^W}B== $vBwS]M#S:f 9||c.sZDQzdfovwK*,'H@zW퐷x}zצ^^}xC[+ێw3[ƷxWgSv6~sKkmsL9Kh,mOYd/Yz6K[u{d? PKvsDPK!*3res/animator/mtrl_extended_fab_show_motion_spec.xmlNAg98QK C5T cԂr=pʱńG26&>Dp-se&~7ȡEh\FJi>ymspp`kq#u T.ǚ+}BSx#qdH=;Ҩq$Rd$Pć]%.}}ϋyH =]yJĞ1W*R= iG-#zLB JBLC56c<c|bUڂg|!ld2z.M|&#FSL=vqҜK،3[ѪܵZhڤh_Ҭl.kYbsQ̱دK3ǎPK4[< g4PK!*3res/animator/mtrl_extended_fab_hide_motion_spec.xmluN0SRJ 1v@ԅ,]0r\n<#+3 O$p&jD_qrmN]Wթsk}p)1xI5z$.auAjr4V'V$ĴM—FY7BHf}>CaP2 X4wUyT }sb͒t:8q=Z]x>'Ě&j*[ W~O)yEZԊ(2AQzcsyVs+WʼnWr+]kʋ.˗<+n~PK{@`PK!*,res/animator/design_fab_hide_motion_spec.xmlN0EIR*`PPfDb_`RW 4q䘡LH, s;/FQxыso890l1:$N ⒘Lo':W+aF̟0FhsXҐ.*ڬoD*"k1,ɯ2LcF","'$V],VeIZyE5<$xaF?0މObb lX͏o6uh6/K'*5i4մƳ< ?A5cp@_ow*r4Ϧkس |?n|m[nRn32i=ocnٷL[Awj i(VZo\MNSw;eJ/&-k:T,צnt[m]}XA{X%UiDJ}@R?J~AGR!R%? #懫x17c1(&FX六.܇.rRb)D1X=g;Iy*56&^wpwȚ˵{׈RK6%Ed_Ύ}ɇ\[j[ p^[m n&n&rvK>mo7MdnvEnz n&p dMؗ|`ߟMzFL)Qnt߽|eɚy/p?aΠ *KdMŬ@,jL Eh(U IvjIRd'D\&b]ߗ0 2o{W7թ@,u}XA z!9quuES{Ih^S˚s7pJ s'3fXl{˾)e5޶6oF/{0}+oQF/.gnPK|ջ0PK!*%res/animator/fragment_close_enter.xmlœJ@gM?~TD<#KDă]lɆMW>/6Z cٙKB,!b4OF4J:PS/X v8<'P.~$T [XKD1yz.QwJ.yK,+̦Ec0 VOOD#/%qQO2l"Oaz&WV0w<+lbz{DEfw?k1V^\亵gK?{ochvu_x/_q{~y.jb/aJ {e#_PK4ThPK!*:res/animator/mtrl_extended_fab_change_size_motion_spec.xml=N@gIPDK$HTp`ZA]J*jNC!h8 <[kŲDɬ>i$ :/"+AtE:'\ dmiKa<[ř)hT0JS&3-L S+El^JZR K"@fbHJ\%M&'Ɣ{q\MOd.]T(ZVO(ٹ93v}?52HS_={%3r^I-*kyM􁅴 O>y>}%cw6_qo}xz0Ǎ:9f+g`s<hܨՕjYY9umoQ;hhmѠ6cA[w[-hD=n}ݾ%VG%V7NzwlŝPKjPK!*#res/animator/fragment_fade_exit.xmluJ@iI D<{7Ad!$6[x |'?mBUp]!^ @.b;c2#<0)3a.rEwX3kJ2ں Uj*LѠԚ'.bl2d@Fz!rדmlI^?7K[ڢOkg~goPK PK!*%res/layout-v26/abc_screen_toolbar.xmlo@߳EA/"U*TIAN"&HTtsMNu}}I!;# HZ6Υ ͕)tf6F)m.M vA</|x3@ls-U-}]^$CP;b_P܎Oqd՞RJZoˠby_u!M33nfgz"P^7=QPLoD yU8X+}+%JI],r[~\s@ 7wLON3g'PKg&PK!*6res/drawable-nodpi-v4/cast_album_art_placeholder_largezo%nmֶSݺ6~7IL&LdLȰB@HKjf#dM\I) Diʂ(c1+4_?|mwV3Ny|}LW~_uĚ7G*S)Axz|A}Ò,&)#&Wv9Uv.vW=U+/}'W;5p^#`}_\_thԱ1[0B(OQXyW23~b*T\lKʠ3c!S?i~^L4dlDxw֠4&x}|I@MKl6 6tjW>$xqiavE`w&(O{F+ @ɛk6~'(KFjJOÚ8e} .\owJfv t{a"G55p6\Ռco% ZI{3Z['G-2ifipJq\yҟx\*xlڗa~w[:+u%p>V<'f,Ufvb){#%~FoGҿ\MZw>֭.E5*N$bq#Y2~֖ѨFOQwT\ӽx,PCM,>C%+v؟>s;IEF#FAm:/R#5O٩x~M6 L{1]z  U4rZ_m:;9R@5xF .eboj O$f4xdlX urښ 4 _ŹDjv446yG~70wO$RpTn(u㚶ՏǙOw>o1x[ %󧷷-m3]k; p |8B: P?pz_sC)03_@+> EB W$Ӎu z˺# KRˁD @xsuaoS؄iN&pDmk!lxM2 R,cWɧ%\S_.QTYUn"1ؕ8$Po-aD#ds L"@ ;xD5КDj77|~80-/&U! .AmY"J{-Vޭ7( S7h{:ޯ ҕs o)Z0ۧ" |FvL,^XT- m2bl"G]]v5m`Õ:-$`P)Wqwi沠ZH*O#YoPѪ3((hDqE/QM'O L,{B' ,m]/e+i[JF׉*k+oFYʸk6K?/ۛ֒a@cGl,vgdE2}]<=F _&92'9o5ptQ7UpNCu^,?Ŧi66o$oG ΁2S+ O+3Ǭ*/`ш78@-J}U[jnϊwH<5-+k$@2ԇOܸDq*h-ripoC(Z}`/ٙ0ǺbpfY)/r.QyPIrO?lxy˽{5浕M YA'0!!{CԱv)`^Hw廿}6| ~G(q)Cq,a"]W)`wr%ơoIԼ=G/Pq`|:ز%V]Cc_TlbRbR cV<$b&:LZςZ5~ d׵XLv4̲1 4Zǵ˫ G(.lc)$QFft,앱ϋzv >)u J3Sx \Ԓ.td- o.UtV,`ppd/g*P{P U_]e4hc,j*1q(iTp|^D DiyG-N 6'"gtQ&.]|H W[ $\Ų}cB%mo8߷r.fZihAR(1ٺF[S]}ݩ&;Z;a׌ £yLq>͌4DJ$J},*(o2p|(P"PC!XwӤSo$9J7}8{5W4]ٸ9W1[6_`,3*sFV v `T*I&%RxѨ=ɪ0"SxL%}! }{9 'ۭxQgnd"K/KscgUzxp8=S?奫Jg]b5f==槣Q3S1K_'$RSTF^CS:u[qRBOK77lT*/ 4ɦYL^ E'˫HCg seFBQr?2h,El<@T{4| ])3<(ͬt+Jh%N25nb|Y k-E mUQ*+iBڣͭjҌ1#p0FH@?9wJLna*Oa:0@0<;nBI_'~4oӝ$s'q4WH҆fP~nſV?EyZbmZWR0Cp|filőkb72J.2:|N<| RAy-F.&$_ %wƽyJ4$ƙRt%өp:|pǕB–loWG-nܮ9ьUL93uSA:W}leReq{崉ކuuwKlF]meY.$eM}ܒf KZw߈Y*[.ƈp q\*ݞ; rV|8O * +gAaZnlĐZz 8#$ `A7nҭZwF% qEj.:m.\ ZIrsv[h!6:y#%l r4i̺Ĭ逘q%MyiA]翬汇e/>a 5DQZvm2x!-h_EBW1[fӗ(vù.֟3+#Dm_\fO-)-)F38U0ddɖ;% Bs G.>&".˔'»F$Ť=qWq3jJw ~h)h\KIlS4f+{{i,z(nYskAO\m8"I/f E(WŭZ!+e jy|dI9ꏟ?1fwIu/۳xPȽ;~^j>CԢxYWO)pUDBTCX;0(jHq[Aخ@D^S dG\.uJj*ICm8l^yClӿIbv=|K۸3 n!A)PH)ڡ9L/!+zC]д!xD_ )W{{igI#?~_u-G"\8YJe$7Pr]`SԮa٩/$[^(0Ib3If#IЖR}hEΦ G O4FQpI%ͨ7W̼_V~:  )wtEU `S4r'[{Y"25!n`D1j0J9*U; lRhxAiZh <˹(Yj|nPe~АCT[ī\UN>P\RP=GRŚΌ-n;b3xL3(eҖ!^Ne(<;lhCoэn-ʮ{ dt\6y+2V>lc<k`w}dv8C8DvW:l#B fگp I\lAr}@"*&f ?c@Uoh t$D2/cO q `I-n,6R9RԆ؇ֺqY9O.U+Vk5힭qfvg NPӢ;wZ to!X߼3ДI4$T(m}d4 42U# ɾ;9f ?!YMt }٧(xA@WMVDx;~]8[;f1$tDl9S"C 5U^ ZnN[tǧwqJ k74)@}G'(;Kw $"*|v%r& F>T|!y(N%Ph(ٔ뱎u%SZ%WJ!p }N eͫ*pVJ-"2 |I`Л`&0Xb4t)ub3ROR>G hs$$H4XO ?q VX|N1_Æ599/*z84RrUp. V ܘc]+Å*Ԛ .y? 4ҥ(WgZB֡$+4%1 B5 w <7.,vRV53dtb|\nR;0,yD0 ȴ0R=Չ^Q$iy x}0 =`\ZNcR 4f>Áo\qϸc2Y;*1RD j! {ygbc:üVx0fugitlORDe2;\rC:3dfo֪t@+1Hbuˎ-y3_]tL?`KTe:Bl7y I-iJt mjg]6VoSyg9xtvzhh>s._RĻ-aM岪Lu,1C7bfGM kxuݨ$%h)rX*Eb"ɄM#K] ;vpo̰nz&g\:g'y$uF6ѶyD3<_V 7ÿ߯e+3vȼQא91!A}z&(1 @wO ٓYYٺU8g`GvA47|zp6ӝ[Fџzʋl=qYQ|OE2Ag_R{̻+0NE/P/&z7m`#!_ic іD9CO:Ԓg ڷ ;baVj?k2kZ:J7rVU_cRܸJJ u<95҃tu͸5N0g"G>2b/[tl~_ ]-C `fesRDOQ dҢGNjy>}iƫ'/EFd 3ؽ1ge˦k3yGZ ?g_|V 0O}xԯ>t'|S>GZ Q3xp̨J?[+gZ HF/ ՙ%\h˜zs'i@"n e2hU B+0p 5+?߂fgC:W!#~u?=:M BjlD,&=HIS,ޔ Z?RmrT:*6ܨgߨ-ot0/m̉;*R{&tbxsE8Ib c36/;^Zy6j;?zo[ņ{ǘWz9Ou W^|=*rv%c9KR&Qz|9D`#CZ/񳾘0$U<|8?w-\0.lieʦj <tbjmf)rc0cV1j* (Nb!0R#A –("NߪOޙhEl Jep™\t߿}5Ҷ#hoڅ if?wZXu+vv#VH"j>6<+r2KGX?e @t˟=+H zm 7?E;>=tN kL3Dpix">^qo0Lxi3H.SAj TA۟1ϙpg`> 7AyyjN'~tۇdQ5 UV^rVΚA@@8w7Yb"$5ӭv ȠLrQ2RUxbLGKh[ UQ?9Z Y\{AoQ7a/LZ.契pY1 [{s\u2pb},K!SM>5੗;>@E~̰`E,]LV+J :g6X_oÈMsi X1 dt Rc~h4h}]Q~ 0;Dda]WiQo9ʼd`Y6 Б*ſ {'E ujg6VM^ԏIjqH[DBDhSQ2ٞKv?6U2죧y^dc&N6⭹b܁e.}7 }r3&sQC!k1wZG!hGܨ9>bҀ0.//0/nޡD7ȯw)%UcBNvIOHxy.ЍKhuoAH2Һ3R_9j䰪g/4P_I-3fbsۗ uFق Ir1k.˥O+LCMÞe^q!i7W{\?q5^֩ZSV,ɒW7[`0`p?GsQ3ֵ5E$)ObV8|ҫn'SRUMYB`yVCyg7^ͬ(xZ~]Y7o0h_S]| m䪬zk|>O>zLSX0V-ة>,ύqHUH7`* .B3=$Ř1Z"F՛_žžI@ a3Mn 7fKD7 sw5Bz=cefyDd\B_* ɚW)zvPI$v]=TcAN7ˋ72a^hr}|hBUx9m|h|x#L__Hb~kCvz=?v(BF>ku[.v>S>u/i @y2, iLHtvP,K 'R&KJX\V H.Me2@pͩ7&bp 5\{pC #%FbEփ &DXm@TR5f`[)wo> TgcZOК8y!߮N:_H"rm#2" MR_/^,Xk~&N5%g,.]a`v1k| 9Y @{KnC~vۚ m n."2UQ;{ߓrt[~u̔|)N["P#,p!`1p{ <@֙fJ|ckD /0S<aÕUtD5ϓM `:f6]1UaؓP肞ѝ+ 4u~XtО(lRU>hqޡ2NU@eJ=lRxoA32+ K 8eyWhW {tB4[`}AYx4%⵾@ Yf\SAՄƒV[LlA@ 7?q@2'QntEr|'2+Q]+G~p &u-8TwC)u1Od㷕JɟLGǯȸ<@5:Μ|VMv&N^iG ( @ҦG ^p"p6V')41봣X^ .[Z;'?rbF4XօOCsM 2o1#o 4VW9F72]i06X-Vf畁I„fQ%85˔ hs6>_ms$H35q@NQ؄\OSl'=mXcژCKӁ(i@Y1L~f7΁.41P)ixQ 7|nWd?moRQFk{~)o&ȅ&\NnʂMe>jj=wɽ8O/.wMyain`b#T[b< M)Yv-m^`HwZN}v^#n -:4\+-Bõuߞr^4j(G?A`tY.r,MlަybvWywgZ?#+UR5&iT;g|bt#lVQq4?|ZnJν7_ؕĚƹѕ3!J`ZUjcCӕuzS }nX@{Ȥy\e;z^y \ .9wG! ɽ:;֢')td[ϞyE`;muagos!Vn쩷25G!]d +¡VRv:4* _$ׯAl`wZj\-ڄݚ ‰Vv`+BEYM^.qQ\J:< 0ɴ`t,'+H$i RW+:j )MC8 ÷v_qTQO£Od6(Xa&')X>躣 _`ykN5(b[d?zMU<  _klr$MzwAdSͳLf|2A)``_%m`hzDxp4L#SY`cgmo/%&`\d1C޺ؑnt4׌ftmV:7ә =x5#@^>˾$oht4ˎQtdcPPɌJ~tM؟-S pKֵaFLSLHlfک0ڻs 6nN3{r` xydraquU&ol*\XďjY^8f2 2g-ٰ'dPO)\5+1L,mKz>xs2lNh2sTu~0U;r>w6׷{2? :Ġd.ni*qq"F#bSp $[9n;m5Dl-ԫZxIw&/Gs Q|WE-r(8}vmkw9c fWPL8mA7#tUw| ,V8$=UV_e [i7~:Y#S+AD?.CsR9~WׅCiʯ7}5r&sTy›7  |<͙*s@ܼT "샿%ghՖv\b٢<@Zq#l/xwݻ|y~]zx8T2HyDERkVOZ 9U)\y130lJIYSR66Z"&3RӧQ9HcQMՕ`%3n|˛̻ܾx˘V $6;~\g~k|!x4Xhoy px!"h(Ґ=Hn|d UٗC#8 E 79B+mM~}kd_I#y<\ulZ&)gȰfb:HE pcOlz׳ 'Ae7Mٻ2d?IX@GURy iV7t~i[bohP*S/c4 ;3VƛmeCZ`~w@dqw0y&SbU$,,͐$2%4Qr01tG* #m=T{hb- ~AO:! wz]mSEkpB~TRiH-Cz>I[%Hc,,FGfz%عpPS@שx!v[մla\fɧe5\ 6Ӧ_5͏oȰ/78<im/"V2ہLV.ZZ T?qgnm$Vc'N=NJ9?XȄе;P*ĭEj$[hwsGep%Uܫ4mgM`O}Vi:5Tjiz|4ҸEFGj1>L;Rc> Ŧ~'>z%9͹ECBj*AoJ^4bP}SDr^B{A62;ޘz,Uy 9th A~Xhh?:|U=Y1m9 ih_[z]]e,̑?Vqjf:,E\p & Vfbau#:"uj\Hg"mySFX$+2bmӱ3xR|9L^? /`e|}٬l` J_09h G =Oh݅0¨NW2R;L,OE:Y-L4W(&!/w{f @jˈ 1+#(PHC)/!%Մx3pxJq{*KX`>s9rR'P B LJ*5)cܯG-j0ӓ/ygr"IOH9.ޙ"k!il-UJYnV 7i$E)E(l9[t5gmCm\~4FIg?jf9Cuڕ=dB^.FE6vuZ>e&|ݰ/K٥no\lj֏^jRaD ѧ[$D:qlN /1+%HFqrWF"U!QMӮ|^?fk;7TD2/!!7q} N λ+!u3L+|_Lfnl:20.=ͺ&\?~]9@u6xMw*pXPvԉA:- W$ ڲ1O|,jzDҝ#kQpђ -#U >@m|^gDȎ"N}"LgRewJK OUȨZuVf@V/@P)QUV;oii܋'Rya'Qx͇qasv\lv=h9 ҁďLħOP #{ֲ-a^,̿A&{*1w3VK$4mw~xKpQπs(x4UclJ +@ӞyhNGjM- cZF /@sU):V:<P&Gs",6N+7?]',ZDFFF&^A0T_5_Ց߇2{siQuv6! &ߏ R_݌œlAfD[ouOjF3W(QVk 8HkC2HI_}ߡ&5́E~4>{axvT9DJ>{aOY'j7a֫t]h(JU d1jJ[pRޑ_A:}!zOMlFoFLPyxg~u<2nN#+3}{$bu^@U;Ae-Z.YC:TiF+p;(}r61Qyw_Q0QB).ipkYbIInfi iXz=̫9gws9bT$}Ənw%aP"n"q˽cJ4D짟گRKC8FVX^8a1\bkDe3 %VU7e~?Iu1ZSt1bٚZw.eVIC<)420 mHbT?ղTpJ˒h 1g%>J\".E:}bkN?XB5FKzXƆ65%Q、y;)KZUXNGď߯&7ѻh^ v8Xn?%\tRgn7|C/+:󕉖a /λڞ;H9Hni!xtpez7fiV7u4Ok&GՇc~ -7df1a-;KG'e`'~ķO4 Rmclװ 2)fGI7M>J;4@v`rLRU9BFѾZg,]PɁM'e5SH!&B6׳f0.l{02E1jdp wYz1A[ ->5X|ߑ+cb`Շvw#0} ކΘd"Nqeةd֎AϙO\QY$;y79Iȱ-5뼢#Ob<2Σ dCg;k3 >ϸ / |bqLJ6 ^Uɽ879h%-qX;N6Mau@D+siG!n$k^zVj.:}V>Xj.P X AA@|_6hY&-R=SA>ÚVq@|}{@_;z'X;H;bwl͑Z]++ Vy硱ƹĄs_FΟ\̓+=f\=AA{8Pd|]?T|.1c(/fmS8~M[oJMe+\Km#Iδ8T\L$=5bVx OH[F{/oEڦ5n˭y"ꩿ[A_\>L;۲n#vbz{cd Ę xK)x-MzLd,' CˑGSW=oN$n6K{_=1eN']Ǩj*@"kTYAb) '0(F{ޘ7FRٳtȨ;mĎ*:IhQS`2ygEUDMt Iڥᝋv;niD8#Иn <{R'Lfivkaْy y&*[5xj A*[ZAyAaE6L00u׆_bIC^&*qqYϷK:o5{_/]zB`݃?Qp=or||67=cӠT̨  )8Hbm9 Dl5?u?"sZAjc;:fKjj0Za=f3cCE!G|L_Bқ#CR9yhw-H4\&f[0Ыi/5=PHKORN=d$xeAL;k'l决:fEٽ9Z "T|8r8qPEqI=D1eBp Out4˼tSy|=SSZ!_z%s#BEs"R'ɤ|73%hxn} M/0ڧKۘl{bx\s`525E@~&"@gpFˡj*K4/^Y,/W]eD^OTEWS9q241 m\nƳ 1N2~ ѹ n`̊UP th,֍ힾ׸t&BnA 7(<)(ӵ%[[3G/uZ8p.Kn5cĴa]7-t-l9i>mо#[ )hs¦6Ws{;6[ZMBRxCUPMZjZ߿yG_7Lvֈ0r\=Z;#[nR7NL2N^J*'Ho#: 灬=ĴĪc`m+o+3è[[!6}#߅يcX$>#aتjJ^<}/7]yCiČQ3F-TCS {4.`lqz(9^0_qY'3jiȳ+"9gN>y;?u: Dicv\hfiB{LU(*:z%]vӢ2j>C+Ayr vt-`{]Wfki=G=a Nl?D#=Ԋÿ9UԊj%'T&mel̳jsI@`#_wInznGev!Ra7+5%|*wj|ԧyx8ITe0dž"F AXѶL"m?%҄Y!*{;Q![/O}/Õ P5 k~n%4"*+?󔿄t^1RJ ~w;5eZzlt}B%Ei,e^NaeIY R΀ˡa<(>3 ͣʀ ]7AvĻ c^;L,}/W=&'=o Fx\hG[BS=wV:b%%*Xk7Q/dm?kC>d&m4TYٔ[)~Crƭz^Ե7>$HssjнwDj R|Ўb qg@槢M_lXkcb'Uab\}΋.c;;;OICM[h0&V ]걢\͝հEӼ=F |_\골sh*s:Mqx3#xw$pnuDyO+V&axHxϼOҍ;VJKgLiM ]ⴘ){l~oUб&blXx.'/c EIK;ٴ/\"dC\L}Cy$柦g e*t4vn/}KV)QgD9[>: ^թȕ=Q1񎘺w*6eƝ ) N2&=: 1H{.PEk钚eIҰW`tU+>k79;^scûZ*$|ZA@%QQГ ҙhϊ}s("$ZF?(E-}4Q*$Pଛ1IJ4=T@WLTc*л,]n_T-*pr8uFDFCY`v=%xmQ~Ÿ9aPv[ >5a]p煠OD@۬)rR7pcQFy,Yqc h1t#\~O1vQY!A#%sUDut2v&ֈCc7:R͔ƥ؛NW~})AwhTPcN)3Τ{uLdC!Q;ێ_Uc*{1</?G5_(S=2aЉ[YHemL؝"*e|An`%΀:EAթtho&NNJ@8_Kt5 ߪyfwp |?}+} Lf(/#%c.cQP2)$cNyK.O3ci MavB'YMA--6UJt]xς%~B/P79~#4^ęZia8(.9!¢_nУyY^pҫ62PS?6+ r  my過=3Bajh*G5 Z\XG%ڼ˽7^>'=w]SrܙS*ݝ,sMx p[;,"F2qw R 6B„z'_[*UP*RDug3ד`+;rKI_ aS}0{δ|2aZS:VWLv[ܛ+YIhMa B,ph߅]k5~[x aǍV2虳6LD8Jgt]] ~vC;9zSK߇> QwZFp)Jox8Αw.-%{%Z_/0eׁ3n9m'{ "r~8[~J(>r7/V ,;Nz&-UWm;ܬlx?LcfKld._B-c 5)bU䶁_gLC=W.gKoMbbrҺ-NqoK%xlf7-i:F΂&j^E> Tw% AC7D@%ZӍEºQP{s|My>aIM]r,I, +&ܕ" o{EE=40 F,A<^@:h c;e3RG2(q]c3,i!'pUE)]j}]`?CxƷBFr^|_ԬH}MXi0ߔQoHJ1er>_TQ>}ũ\I)or"1|}Y1MO`DTc8騚`5mv i&lAOs>I㵭>+NRw!6.i2$XRœf. v P*̚SMV''O"ڑq%&:0^ g+J{"@5{-~(vQ:IIBf ?1=ST߉z#`@/;ֈՏC5eaע b/̥3iSjKiap8 7ԍ(#3_ij+Y0'uw<)/5kOW:p\GqM|gcAkT_TP: Ր<=Zm1#Z/_|ԛF+=0!YpO~*n%6V!TۃvĢ/8blYKdNLK*.i}r(1Ec)+`s7/"Ҭ!oFMX9Q}᪐꼻(H<ʫ"ki5#B)fvŊ?!&3fmvѕSKQ!H,O0W *XTQodMD@aeb?teE ]KJP@Ώ)oN.0JƠ `+~ m]ZQgQ($V"##yl-MF~KG]C6u,lu#CR\f-rQEnQKMmJ,)ZpJM(NԆgHVx)gp?O%%[ Zh6~5a=qKCƎ{GTvڀSע8yvʍĺײ«XrZ2-l& pVX$t#jȎ*5y_#CsB?w}m$ZC0']6%%浘Qp>|lˉCV*H9Z͸&7HE"gD7ƞr  Հ 3'*$&ʽrRԨQ.<d)ԸH9i9IR;o}'46GV(2ݞ3L{Va^ v5[+ôi%#NLbch]86.lIv2[u3GѦHbwܩq:@֖&ܮ X8cTt3F/Xuؼ%j,c객Q"N5wjչ8 OfN5Xuj$[d.v ?V{@\NU(׿LUroXn{xh@Wт>̕&_~3BT3łڅgo8y;ռѣ#9'd$ rR[謡YzmK|B Įei9QV4:Vp`\YױpLUa/ï =)NȨh: Ld^m]uk]/΄Ղ&#zQXVfMqzT[?y Uz]_' Y辁KG6ODl><'kcF|`^5Arv7'`(֗lrfz ˁH X!g@dB8"2ԩ@˵.Fv׺[4Ž'445^}Di!rQ?0\y=ʶޝsŮ 2;ߘ27ݝvHΧZ4|gEw$HTFy yJ\[]PY2Xב?kwԘn 5IdVÂ&Dyјb{KH 0gtv~>-j4X|dK :+qC F.+PAc3 : y_@7Gnm?R-Y$Fuoh:TTvgz{njY.4uEFazscO_S|N3Amo.=m㏒9Rt~=BPEIXI07̏n76΃dYeaO-7Ƚus-ǂ;e!#An q?E׉8p,oZEPKn9g6hPK!*0res/drawable-nodpi-v4/cast_album_art_placeholder-@ҿRIFFaWEBPVP8Lya/1F6K>"b›Rn0U SިBAO*RK? h[TÞxMY/u[K + ĔzUbEYjTVT~/!)兯*RI%/ PQy@"JʯGEXVS Tᵾkb- #P1҂j933NECά5~YkVB2gAF5⇙Y(hdecYяgzVȬ>1Ԭ",?f~kXWZؙI$RL35›̙9?sэ*VjpfZ묵֬f֚WAghV7=g Q7ʙ9 |*$@>C&ZVnD{oإb*Qynހ*J6BuvA[Tv='IҬmGr 3 0ߢ:TEI *ΨAm Fa4msҶ ԝl$۶9ݩj7oɊPL< $oY3I: ] ոpg u&$a`7ÀE#ms_g ۶ "pNl["U0*$yͼl>ҶomۆXV_+9zp;I S]{ԍ.r &V8ԯ:c Cjg!S^,Lg@ o8sci=ömȶ/^msd7F10PN hMoflqN8w^4Q^ SHZ:S9e%bض'^۶$gKNfaY(Gh#ePIYm?Ok4آ jiň7{*؂HMiDzGRPތR Q$}O19m_gm '}'n'$;bS;͢ظnLhq9F:u&}l3e ]b mf ۶ C5V֦jDւȅnj,;@a#F,[C]X6d8ˬױŠl-SW뒢@4T]KEv/ߴE y6"d!mR+•ea8C}i!rϴZh @Ź_/_nyM]q1m]A(K'Ps9sUK!5͈i-Gӛ=$ĥo.mLQ F>鋑i#8ۏ5:z$~A'Y*וubdcʮl'J ;ԌB;UѪtEy^ڿV]n`/2t_٦Q^>&MeS%Oq-x'fƏ4!RE~wν԰Yh$6CRI{y'c@&5L"%hGk6譁f.9Dp*&l4*|xv +-@RVqRT^bƆA$lg^%ʁ"LBP|hQ MhLNҸ. I g&Rߢ׆]izۆU:HHy2.gݕ0B$YY'J(- Z\GTt&}ޠox Y>9@면"`i"Y\K[&ِvk<]sX2.[:P+g 8ڧ-3C"!ϫAXLMfksr6:.m?Ma{䧟&`#_E:vu\pl@`ŸF|`BR&ZA0&F|^r~=s@w{tiO ZS҈ YXy:U8_Rhi1ǧ. 瀢%Eem$l؂K~T4D}kV!0hHZC3WNVnڨ>B8͏4\F٩Uj|Lõ9Xo~[[Q5nTz5@9~ qC[~ ˝ٮU$_rb6Ճ1c=VyqiU8EѠ}r{ + & lûALQ#l { >`E@02.i%."pws25JXŝ&Yoέ FFj .ᔞS7k;˄"& Ɔ[Yղ P+͜Rbg~Kx }Vᘟwc-TyKOfGv4/e׏ }LUV 7iC%'m$$:4p %͹稲**y򋵰͉7ɝmGeR kN86ԩJru ^VYc7`ѽuEDQÈ#!J*",/RlƻR%4/Y?[gvS0+F(ETĕabTդ+$E@8Xez&jF0 r|!ԟ"a"§ۥ#O( &5fjVKh5*1f6]MU {0>mI]! H|Ϊ2t?֦"AJ` ۡdSъ ^6pa;sH~˼v?\Rls$~V82\Lss F~~4N^9Τ_Q@bmRbN"LwAjEoLO7 h&r7 C"PC<+u8Hzk96a~lXXIhp2K?{NZIv 8DuԎQ1O/[kAڼ|pcu#7`)_LL[(4bHܴ,JL_7QƟۘh&a*R1ܣOݨOg~t:c=j @sh\xp4$I<&Δn4 @Io*Srljw({hf f%" lڣJcz QYf!pɉ(N\ FCj0qȥ% mQ]7h f]v]66^$-Ss޾(8RvH>C@4 ) .kP XGsF0; PhFq O4c@=]ԣM뜰QcំKa>ŕw:D<}1ydO#FÜ2RPn݋r;-!ME~E jyi ۖTTnܰD厛\p w-rĺؕ zR$edRwy5vNRWMH:=5 &ݛDsq 5E3!2KfLyp$mn Ɂ&":;<-:G.dsKʸAZ ~G"ck̆+ǤZ_+Ӡ8ާm7%Нxœ<% |[PF" 5. )Ξ/&UjmNf3(Oiۤ A+R_GI4Gr'nZ;"_. ߃u9`6"mzێ ]a0z|Ħ hxM48$A8sdô[&ŤyQ)W!O~;}H'\ /hw4_˝.pR+XDF[/gMy4qZͼbB׫)zV@ i!0 4"7=)w\m6|$]٥zJO*y6r~oqRw6dh@%Vx -T٣^}C]ZUӽ^nWPK.)IQ"wL:cşVɵu*h -СtbNdB_H$O@Q5e^$%XJoU .fotOok.T|>-Tf__&J__Vf#Ҳ7#cA7:]TQU^,L>ګGMF־Q XL0ϨO#hB9 xD*c/ A(TG2HT"B9=Q `B݂}(o cЗq( CAQI v{5J+Y5Ja7茛pR%( ]OH̻Vuܽ }{caZ.Dt > K(JJ(/"̗E",YY-PE_*+}h#_qŽԨ kn='fUIi2Eũ2J* 5H|hc1&;1Lp*9"@Z2EF4ȁFDaw6QcI qf1E|SRИυ;YqVn8$^aW4u[Kʆ l~='zV@4\5@WJXR{JV""((sFY " X**J@L`J)jДUi"Ap֩ʸNW cH1- "rL-3{_vk)!S#IɶLP{,@Yl9Q:qtV·| ";Le&3Yv̘̤Yf,ˌ׋Kf `麮K qSl&ƫ R3G&t"A 6`^lŻevaO~"otV9s7ݻwgٝ!h!ߝw| B̘ [n B؊V̶hlK߯XK+DЋ"(mFu _ȬG7Ζ([^NS"XkE`;iX]/h߷c+5IP7rz\BUKaXP@h@5Go*,wcܧTǭRv^E_\ۑܘvlz8#rlXyuWފ!Piױ3K=P,w+_:T "# t4Z(t%] m U/.4X׀W`@0zF+M:O OvY[6YɄY:(9b 9ŀ ,$ Q-$ʋ38 I7wښT"|$sC?˻b$E,I2mMimgt>G[@p>*qՏY8Ajk:Ki@j \ x5;&ZeXliJzpplZ_.*/$D;(^ְ L !njLݣޤ7d49J1oKm']"E;;&\aÅVRRrO[/]D$/6!J_(:C^uVWvRڙJ8r> sܰn@ "ҷ lD1Q-[UYmj6><<ki{x%זp-kPNj [{YnL[p5[q])xS×#>g>E|-CL,3dIBbUV)JPu0 Pqmz,XMtT,Lՙ % X/2n0s6PvܶzǽޟhV8a"(Z`>EGYߢ*L7{wH^ 4x&7>BJm@P@bZ/̏IR5uHQ[G)7P)xi,ׄ)t88XezU}n#瓾 kߓ˳motLFIʏmZogM҈}OB6|oD qHDo-Iax);6l&,g'yg r P@a"Lp$=|Ȗ^jN;R fdTYp/&uل@̜3R r ZLzad_ʮiANg@T`c o%)9VP@6HU ř'WS~z~4֯S_6dZ%є*K;34gƘ$^clZVu_9Ac[c#CèJjR'1&MkKw| B1IQ^Nٵ&!|j3HPsv ryEZ!h³U/kѩ*jw4&#R?n_T?bFBvn ݳvuN#) RR5GOθ2Ҷ#TyY6Nn[E!qI[¢@i\csZ6!(t5H:&1zrXA* Q ̳:*K׺4n'bMD6ʆ5I}Iuߙo[n E~9R\En9ʫCV$NvǗ͗Z+JSío3rL~yu ՜OؔTQOcwi܆x(8;%< A6w :RjUAT[hBo{{{➓B l:ޱڑ Z{u3$FMwq{=+]f=\$QɦI65v ո;FtBl-wnNB0k_xPŖrƠ!wL}Ёybm& ~Rנ1k D&aɉ<'y)d FߋGRi `ҭ.rem?QAW0@)1?mr\6A"3^%JqB1&!9ε&ݧ73HpC~97hj&&Vʍ'JV%ƀk3n͸DXE|&ΆT'^Z +y:3 B@Xb (%,jRO$>AIALfթ[$ lf-h[`&1t;VuP/4g%ym4t7rT{# 3rw>QB@oܰKءIwR{^$Ko2a% Ius]Ԡ^54]82jw N@ *je'hq`3& 5a`EFgn/HPAg5Yîj1p >Qs$&$1qtH}m{",gd]Zи~xN[q;^G T6V[NJ㥛n~GwxiBCMPcD]}T}1̼`3u-YFejh_zƌSBŕ?(,],0kd9/Y!k&ZMq >GlW6 $0Sz41$RԴC\v1Mn~A4L 70W[5rQ,,/y=qm">&RD#y bYS?oWe[ ^^ؑKD9"me 2GlYsiZ|!0cLn >99vx;i6kcte,'&m|fD{e±PoRp? ?auV:(U(:kE%v;v:-z)޺V"j6|س6S:jv)OTx*8@"Ca~% Y*|" &Leq$9Ms&SNyșFFtKw ڵCfz'nU[v=QEg(4pÛjRP0FߺkZ塦xz-Lժ`$ lXWi -I!O7n5SŹ't;m'E5hx̞؍/.:oī$o~z{76,nnboFŕc{э\y-mmSJ 4 ?;ߡy{{{{ؼ?vyk7zblz6$0s-Y'A 1Ngyôk @eǺ*5͡-'&"Or݌"feH  DD2Vo.s/"b*@T+7tjP8Lv`RGuu-3Bݢ:NwϢhzoVWaȋ<M\םGF Q wwe,`r^.VLN_zY.},E0WDme:1 QLsrcKeɻH߽Ǿc^ѷh6gzϞ}jz@#/<X ԅC!|zA_`5a5p~ѸVRDbT.>ssPqsQ%g:/r˛ YL]?dV[</_ڎߝGK5a2S0 6NoYTKvw(dMO`,OySyGGԼ!φX #kL1K!6.ŮY޲.UJ/~!ߟr&8?YvA.{Ëtr=!!uN%G]QEXIL yJE:PeCr+\7堘7{γrZ*ǖMvj]oK<Χ)͜8&нyDƗ$b2 ?[8x0_.cؖ~k2nrg R8ivhmAy1gYCY#3MZy%+l&x#6/6 Ġ:Vb:[oїҿS[j' Sv1fYc\s"n FP訕q_ u\f̜<.&{qx*;,^~bBra7,XL=o>%48twÛ9pDǗj QvMWK\O(HabU681}9sF\h[wOH~!bn$lC<5(Zr)4>scy'ya7}b^A.9g]=@q]gLm8dp2t֖:4q u ,M}8 u`ӊFlÍ>{Å=f0NcAL8+3lE(]N%ii2ߞp7~uZ96kdsy3Nb qYO] ˷|~+ƤYlWUH%u+ ) A\Vc:)9-e unll<}ߙ}gwۆd8[.Gpo^TBAS}С?UykMo6;qbT!LD0\ ayJxkaLuz_Y I|X4=xt%54QFYdX+r>|rV /aP_ף8$|1K?5j9xe9Fx70dx܎۪9&9Ec"1wmt Nl4I+\gz4)ZqggM.HȦĆgDP`R͵ P/bd@SxKt Ij7M617ϝGD_4:R; i!?lҫE;h xT;b[%uʻjoBȿFu?QY#=ɅpmkWGeb1fyVK׍1C5W>2"!&R4/+İ=Bi8[-N1j؈> 3I]Gy]==1Ly{h^Ž ׃C|Xׇ |%͂π,lb8/f=${}qrd -nzkݑ|lj3$| f:֧"d,5'x+n{i!zȽ-/Fh6Ay5IyjnBw'zPw_VР^9r0=;rfgS!WM7oXE 1 xi|nokkgφL4HQ gr5 $ -M]l;[ݻO- >!xk*20CˍZQEDQC\ c-n$F5]|5+nhJǪNn4IʬqU>^PY>LnثW@\?KI(L8->խxlOͽ'dY"yӒ{Dܽ,Fˆk2lD4;@U`C.365-4£P >X G_l3! evCP$a} ,y00#y-]C+!}:^^.j7)|&V!k)=Dt MЂŴ+ ^VU*@i>M@&:N 2R.| 9`72Vd-p?^k3dw5}(-?myZncz5 [K.WNr2 /Dϱc"T7Yo00z4oieՒ'db OjCwmC/j4{mR2sLBsz桤'_/wvc 1I8D/xljd 9nRF Zqa!ȬbX ʔSb;* 44HF"mlȩ[6kN+/_rb%?"SQV 5A鬺pΫWFX9\2jEFu_t*H+t_>`8}eێ㽖M%Z?UlZX`2 8/m|uxujdP-z5=aPYJXE̝~u6ISkTTIH: "cz%{:*SC)~J^vkn.B UԾ1.=: Wܧ۔Vz_۪!*[ljw':mE:MذdLc;YF$O6Z&M^5}ƂI+y@gtڞvZޗq*f<5 YU-U\IJޗ<ߥPzv$@Dz؊3l֚/]ChnF@d{MJ8MPL[2h(x'$yz;8A 7(h-w>;4M5MtDMGQӋ_D_Λ9l?<(x ,ć/_te >_$mo4pzvC/a ),6ԥo1} O2Lذ-E kΩֽt/]_>{ X񢍿ߔ,.sHm]4Mdxb8btO$" [$ kgPR4[XTIg9[%Ȥ?)S08z"7B`"2_"00@ӁJSb1V||b 7|qçuiqV[o*. Qr%o5n1iY2O;(|&:+AYS22f7S%,-@AyD]x ZaYa`Q e܏h-:|%j 6 B^UI ܝDI$tyy]kXF#٬(g!XDJ)+iR+t]JWnQq6 0CcG(& äB`s/oJ-nqK߲w_{yWjt;h,+fIƣ":Ht܊SO!ǏǏC !Bl 6Ǐ㇈~![!?Oǟ߶?%ۡEj$ _{[CxmVAkk1~m&zv:!?mHHdG}M"/P{2~Q0Ki} !{dn!t׭W>QDps@R fk 9:LV5 @`h+ #WsFׄa# QN33c A,<@zr(?7{Ό)EɆ08gVƏmJ!9ɱ&A>ǰҷ #1Ib`4$XC4|#~  'suDhbCd &5aN+"G6XPd7(Hiru I=|~p^ 7^64>w\fu-*P]NTwѷSvԣtfG+܋p"1>ٻ+l`s,P!y-1>RK_< V"p3I.>` \9:\hvOȤ]@B7hL !Vfn &L,i'u,LO5ǿl˄'(Mk4 Ͽo+ҽVmJw{6F}Ad<lkY(D9W¤cV%z6'&u|o9z K "G F5u_N ղ{+9=A^ֱhN (/ғw!o$t*=c3)؊/$8s[IktAPK*P˺\C#+oUc"((jtmr42[C$׊RV0Wςe49}i<]舭]IqV#yu]d@KWbhH-TRY~v,ĄB/mek)8KךlJPkg$^L2`>Q@]: nvKAonbzxȐ R)N"Wޫ[0< +ϕpqcE<ǿjEV `nhLpmqFDcfՎE3^|SS()qnssEy|N AZ dV?b*JP&^AJ9IA 9 ܊D-mP.\ml6ZW]D lWvjy.'nq+]ioZ2G'v1 28H~n$ z%R>%Y* 0揑3_|5}= /~zK!>ǖ8Fц!ȷ1jCE))֩(p)vwF0k$jj¾+ MX`,~'j\tqϏeb7@@%o>*"ցtDA_g:DC6L'@Ѵ;kwTzֲWHZ ]IKdkE+Z$wT<'cMbeu A^@8j ճv6#1\y<UƹA8Zz7&5&ojQ )0xmS$<-QHR+`V!Ucl 04(%gG)9 s*:¿1pq oqOOѲ5 p.ɾm a1?]r$KZ*XѨ?Y$Ǯ^}+=A[i_n@}dAp*fg?rLnSV-Hh>X !>|M_ @qi@HO=\r)EΤZbQ~>A OOQZsbLV76đp)n6׻H^v1k^K6rJ,98wMzmP[ Xs!DK TW@S-qWn) T?*wټ[3Zmj`H4#8@<͇%\Ii)J&ߛ|!l ;V:ZBWڥaSoC]066@urEgGΰZ(i .ud_hiPtUvl'G^:v_^o{P qHB[K, Nt0գWuMҤ|&u(8 RUB8h͸^1Y`F)G`uBk"mM6 >$ ` ož@pv`˦d-X>.E9t?%PGOChujCpRo5*DYE_GRN[5#)#9LЭHk!NЩaiB!z ndk{`4: Tf`QQP+e Q|hm uCѧO4RSp23@\ 6q˔4X9Ip7lt }.5EB*0HSLqrs9q049 MghZ[ԥ{mBH)[XV@~rX& =Dm ^m!Ad[LЫmFo3#7Yt|Q[̦{L>.S}:6X_SVraʴ>D,}Y=Dc7|$Yri? =1ڌ[eT`q5] uN~BtO_1gW%6znj\<IBQ_k{xK)@?{kጯ!oA *|5(&f/6t3 VVJFbk[ZՆp3BUZNu+'WOvz4}c݈Lh˗xr9l.>3gQZ.cv;m2T *v]iRM* ` MPr-ƽɂ r0 :ѿi k*re[nAqAs7MѻO9GFRzOwv?O1BO~M?A$b (xrKM bQR"Q(x @ӢM_D[.Zњ6YW^ mc8WWf尵6=.L/zWQeb`KR$/b>`k"7뛴vHB1Yz! T6,wt< bHh S|kBl0nh#ZP$')dx=yH.IvpIN]c"Q4"W?qrGLp+[M!h ʬw𳀰r\qép{lΓ, I@BZs1E3ӻd[5Bв5AUwAȓHyv%έxX c!"VLTr .\aD,d^w(m,-,MLq~@:_TmC[a5sMAZ!$0(<8w?۪}^- {dID7]./W?4k_4Ej/ *s\g}Ey׼Ϭ0qX |h 5hҴBHyXbE n]Pa>!ORlU\s K`H<:xAѦ*V$Vʿ*V]JI5yJ܋8pe,62+ZlIĥ9RǑ\+f4՝5D)%mʎ9l`mTA*[Kuxv7 V& QO>ֿEuVRΰ(%<E9W=.qH@Ҋͩצ5>] M9-*jI^OߴKs:h8 koE O ^]Zx.fL! 8v5ȬzKw*/ (ZCH]eJ|NQrBڊg^1rP1xѺm60 v"QlMP5':lP`QZ^Q0K5_8?@ǛݣWh2hCZr~5=rm`FN KI(/sBkc݌q_}LW؂LqOkqVP,=jhl&aPmL!vbZij\ED/Kt˺`xcXh@)F>1˰5Z 3.w"L(C():%jDm>yZcftlP@’t jCyאJwhы{qzˍC( gZZAru3AF-DHüBFKW5긔U'# 5%[`D/K?bH\%|o߃|H3/V h>e.d=o EEHt{C` #%^+IOAڶG<'.&֖sY`\+>WC9@ۚXl5<|ɗRYAh6:QX}7+&@N}N_|gWZx=k `ӱ>-eK%1wJ̻__Ss(AEFЂ^EV&UbA)K{=/jpZ\K8z6B2Nt/dպe6fz =Nqگ@{OVw/;ޮf.p`&: ߮XhǏХPKsaaPK!*;res/drawable-ldrtl-hdpi-v17/abc_spinner_mtrl_am_alpha.9.png sb``p @$/}\$ sx > d@#۶j1CȘ233K[.ftVp}1ǭ%a7JtS$eD7hd}- d@6RAą 2j1†*?/)b8O_s욧ŵf'[wI V^w ^u^O$EOI2 l˱˹Y6]y2%_]v9c,C [PE 0 8G  H#]4'-۾@2_ 2dstBtXBI zdAlMbB Q*M t5/ (5LH@7A,F"dc2Z0?PKw{vPK!*5res/drawable-xhdpi-v4/ic_mr_button_connected_03_lightRIFFWEBPVP8L// ɍ$9d]=r3L2ޅIY L@CQFU<YLwm?&7NV-M+n?4(SG{xQV5oB&2TV#J j/ȪS!U_+ {9j9RU{CTV N1TlĊoEPhJ}ox֊ _7B(bYwߡOH+A8sVPKO_APK!*6res/drawable-xhdpi-v4/ic_mr_button_connecting_29_lightRIFFWEBPVP8L// Gj#٠/PH8{ߕj۶f?Dިؔ+$:ƕ>\#?w RӁ4ܦZB^Nlf3+BfO  75xM 8$7g?jFȤ4Aa4a?d$H0,J4;Lcz-iJ'#!Ո}]rCG\hW…x9:~!QQ3X@5P VTTץz]/PKfAPK!*4res/drawable-xhdpi-v4/ic_mr_button_connected_04_dark RIFFWEBPVP8L// Hm7n҈I58oA$q*W|C7}K^%&e'/}, Vw`u//~QuSOKDds  d_OWԨ :䨓kh\RQmQ-HZ8$ڏ]r NTz?PP{&?sF435/@D PKL PK!*&res/drawable-xhdpi-v4/settings_sensors8RIFF0WEBPVP8L#//  He-@ 7D %Iv3қ_ n)C4XXJ䱲/CV#UfA9 ߣ(3&aԬ [HCmF;6O2`NICN36}WhvZg|ٶ \ !г߻'Em>9=\Dy,C::>7>'Aseux8YVWQViқ99|-יO_,PK%NC6=8PK!*2res/drawable-xhdpi-v4/infobar_accessibility_eventsnRIFFfWEBPVP8LZ// 50$IJLv^ 6r3Og*)LYAXy[ ~(9Uyo+SqPKɂ9snPK!*>res/drawable-xhdpi-v4/quantum_ic_play_circle_filled_grey600_36RIFFWEBPVP8L/GU@rHTѳd#gEwEmkY;T`PLaʽsܥK/'=n$)˗{WSцg0vțyquZb+F DbzŘ${1&Lޡv-Ves [+Y}p jc CNFe5x ݞӢa!GY^6Ta F# &mh%ҖnE&Җ?5N[k%f#GY$nAM/Ɲи!~v1n~Cm}hUFt n&=:sځGV9ÕT l{|TuIR gMޒDGR![J7'?C:f w4gE@"<rg8@镓zeYxLC^#^+h!>IFCj4FCBPK#]PK!*9res/drawable-xhdpi-v4/abc_ic_commit_search_api_mtrl_alpha_RIFFWEBPVP8L/?۶MMӇDmU/_ՠGKR (`ZӶmf?Ayyox v-Ũ(Ԟ&Ei PC1MS,RJ22z*K0A ^r`:ptGPK&PK!*%res/drawable-xhdpi-v4/infobar_warning{RIFF|WEBPVP8Lp// 8$YvMt#=oQy!""" [F'=3t3$ɗL3^fh6Oܒm/omij4#ٶm{G"$f-=Opҩ qB;rcg/ 1ƵAʧɁ~!` !=cE=&Xdm| @PH ppA.le&` s_:,ERFDS*L*)Z9'E5u!Z5~STWђhZ)Z%B*0ƭp"s>*x"D"hs2&y>=φh.χ$;yI d>jmJi@>Ⳕ40xU\W99WAXrLKڻP$.̗"|(g.ssC(R2:'}{q0r}4Qؼ/Yxn< 1$PKGPm3.PK!*3res/drawable-xhdpi-v4/ic_account_child_grey600_36dp"RIFFWEBPVP8L/GUqHԟFnEH$۴}m}9|mȶm۶m3g&`$b@w )=,^Þ1\q}fM`=G5v]!|R*c?CdTG(Քk"n˦X sn:r\v\k!=;1f};֓hۑX ,lBz@$zSD|ͬ7SZ IFA\Mجĭ=/A$5 NV(~N!Rv<P$D}G< ]f:(Դ0=-5DK>itP ~aA>bAU1?Yb+c#KŲ])F.0}&sPʽ095rٗsfw;rvh_Ήbc&ڴ'A9Ӵdú#SPS|geĘ)QA)1_U:AϷ1~+$1߶c8'ʤ0& .X _83f0 .vN;|U0s8?7+:+[? rCfN n$f12'X2 Y ovo!OyЕ9Phy\'8f+;=}!|kKBЃ^>3(zziȎq$@hoPKdª'"PK!*"res/drawable-xhdpi-v4/ic_edit_24dp0RIFF(WEBPVP8L// mm$8r 8 m`g۶]˵E#۶-mFҙ.p3w$P EgP؀Z7T;z]Sݞ_kyKVID6;^*JP`BTY7  2YQMJ̀Jb,2!9dg148j $6"+A@ PE:ֈQn2@㨂N%@a91`r迖S_1ݱ]P 8j @#y@Ggz:!48h0@U#00*Q (y?4,hTC#YvV !rȲYtSm}WWE99E4hU^'*;&w>$PKߪPK!**res/drawable-xhdpi-v4/ic_media_pause_light tsb``wu   LXvz?usnޯo\PK{H.42PK!*4res/drawable-xhdpi-v4/ic_mr_button_connected_05_dark RIFFWEBPVP8L// @r`nsSsa; ĀDbF_5*&:8ڱgedt68Kx'/afFvc2,o ]tY{Cf unF2`0R@9uч+¶:pA.le&` s_:,ERFDS*L*)Z9'E5u!Z5~STWђhZ)Z%B*0ƭp"s>*x"D"hs2l 4IA!imQÑt&Cr|ܰ0bJ(ToPKD PK!*0res/drawable-xhdpi-v4/permission_protected_mediaPRIFFHWEBPVP8L<// @$I4rV.ӏN甤g2[[ Hlۓ?inooZVv[m6VO@.W1 v,Ko~zf%p_*#'YTt$97F}rA =qp^u fqD/ QDɄSyLk'P]Z`PoLLXkت }l/Ѻmd5A$婍}Sy' .$wo`80{@:*ic-Ky`IWB$IٰL`.m}##TV"_RubRpo@ʚU*H;,6NR7uѿi1y~̿fKB0 AA`T$@M@UATpޫL1?2)Ó?1STu'˯֋F򤰲qY7rN;n  B( )2 B/ɭ(lE1@&Yӌ"HLi2Q9Y.GuŢf=T[%5ɯeonvad5s>X0A6ȘEA~ AW,[P ַ8M ׺F>2??#̏;{<=O:}$ֻXov?>@timsm;vtl۶ѱmض?Suy1{DH,'5{jYP9^ZdVve&FM+F 21k֗Įv/&, mMR4Nl6nԿiXt kcND0Dc[3TWѵ!g2NoPQW"r%5-HPfB0P~")"-IBT Kw[eʻ!â{zC4d=zݥ܇K ;{CyW4[0(ǧ{}@FM?bS{U01 ,s}{&WH(zdwg}t}Pa1|''Hm})>Co׾BZ(.@NvN_{+VF6=1Aݪ<x=<}gl_R^t-iL>]zA9l &f.v+u|rn.E.ccwZ}݄CRʼnblbsxv_-pu?y3bG<+E82M5Gܰ fB /Ɲr' ,ԂPL^B9`Xa9 tl~#dPUoGq8ɛ0<7WXb./N;lGr eCq?δ< =-N\lmp L(BBd oAA,_ӵ)Wtd?5 Z[0--⇯/F.fֺs ެDlԳ^Һ "yD>1<$-T4:*p-QWH$Rupkx;'ϒzUtl iCJam7Y?LӚfKml|-]yB=Pij f-hJB מß@2.`?Gz;::)% &`opy)"U &WNYzO>C9{b{Y#4z@Dl䑱rA;*͕‘p _p_PAbgn`!hdBYPUNdA$7=s/@SX o߿/0RZZ#%(2;K \4Gr>nakC8)䁤Weg†A" p;U*2p qP|4\WDgffjyt(uKiyC?,rL`'7V竓AW.!}o(KRZZvntD5.~^#Si9#%d_Ǖ12⇺WVPi3 EZFD'7^zz 9;E !Z6G\}.S@@~zmw}ؚٝ TsiaV>_Řf[i\RyvL -m gS@xZ5 Pa!FzfMଙ td,Z `j!Oqqsp_0{#+]KwV ^P}j`ehl&rIriª t(ӂXUطs޹Nk.ͬ^̄F{<1ޕ7JS{m Cc|Z哸 i6Nn<,+esqzf~x>KEH#H+kM5D"-_MTH X`w1}?hyh$KxB[8=- hRp)4p«RFRlYe?tuҤMR #no%$ΏJZ>U8ܺ.8i0qz0m3uD;.8'4Dxdh- E=+Nk! [Q27{8D{hܓ]h9FPK! ) PK!*8res/drawable-xhdpi-v4/infobar_protected_media_identifier[RIFFWEBPVP8L// O¨$G?sH tI rѶmnXG8y IkvbF.6^4\/3=-Fs_ }]_ЕZ1ň+B/ `ةDvɹ])Q̧$f'`ɶmY{Igl.?#?m;LaHk=Β $7pTu3h`gGW1~2+YɞlO'X_BX#?%8hUyxKԟjW纼qpؐ+Ȅra9Q4pU:4 IJC?40xt~Yl4|p6VJ3>PKd PK!*'res/drawable-xhdpi-v4/permission_popups9RIFFWEBPVP8L// 58m2c"8&ƋȜM#p;pI1a9?̇Zx$!%f$_M|=篜#O=F=yPKR+RPK!*$res/drawable-xhdpi-v4/popup_bg.9.png]Vy9|ϓ`#/f_,6I;7D͜ʅ#6MnanHO}c_0?qĶt.rꇵ'CpX_%&4}C.k9ߝ)rthqT-i;5Q;?T">e^>DX˂/ (~yDj;{ֿcԵYf6N\(-[Z$-r{ h^ wNm蛃)%e9?c@I`,^ΞZJL[ZD4_0uҗ[Й_M W^ًp-8}ihrFL#4+Ik@D6= /}%zlοZ._A<=AM'2DtO"cd2J`D$ O8QpUT2%nm կ E.΄10 7EYZ;~P$.cD1كWjYջiE5# ʸt^V84%0F0n~YC㽠} NE lh<IwMԚͿۘL_"!rꭽSgp7 ҿux zbH D)4r ˏX ٣hen'"hVTTU*9É̑oZgdLA\BjnIbFz\~`}WI;Kʵ&" 9\ c!cpmA.=u .MvԵO/kn~6Jߛu*%Ĩ{"LU n"57]tFau 粗#DxùÃsjٸ_0-2E׹Z*23~37]{6M !1K6$Ut^(:F.$%adv˟}$ԓA5 aM2/Q|&sH{YLn`zJXOu\*7W'JJZ[(r;Ka>)7 R`'eõݓXzVh񏛾DUvc?V `CʞLᵵOyq%[bxbMON 9&؎*3-\[22Ew7\+vGK/2NȺ[WBfi9P_}k/h 4ǑR8K7h_?xHw,w%O"0jg>43ӛk&PKPK!*"res/drawable-xhdpi-v4/webrtc_video5RIFFWEBPVP8L// u8rFj,UifNy44is;bբfTwO=H쿹4=/*Oʫ4(WA2jymL+> d)G/=LOc4VV(;@Ef߹S}Jt`xq\aE˿@^[PKM?PK!*5res/drawable-xhdpi-v4/ic_mr_button_connected_05_lightRIFFWEBPVP8L// GJIBWпTD;v-]J)q(RS#:gW>B0Q1 7k̂Tu E WIn 8%=8%45MжL$ߥ{fa2r-7e[2:LdpC9=- [.l38ioȉ!yD&%6u1F:)2Hc>|\.r2PK"(@H PK!*3res/drawable-xhdpi-v4/quantum_ic_volume_up_white_36 RIFFWEBPVP8L/G5@$9n:̀48ֶ*m۶m۪l۶m.HR$gpa6jl N=rcVcz'0(E@`vph`jZAW&{;&>&- =堛h߇žta`]O;hvk #5=A*5%=с[*lV҃ϝ5J)slbEvSbP̹[Lt4r A*vuM]m-W$YTnwC' bʫ' vBDY OA>S>SZ*Oæ/XV 1 Z[},r>"Lj~x~h8gIp>Zη-%m4GW5hr}{~MGد ?dSc_LPK (EPK!*&res/drawable-xhdpi-v4/settings_storage tssa``wu  1p jd({Z}ƍOҬm_Pmy=lߜYk}*_#PKiOLPK!*4res/drawable-xhdpi-v4/quantum_ic_volume_off_white_36RIFFWEBPVP8L /G:-)6[k-Y3i4h3fy۶m۶?nF2m۶=Bp#Ie޽BP\E`q`a/yzgqq>)}3F Wx>OP8kf3J?h6 ڷ JgBq}KPRTpor) 5uWsuaF5H@z ~CqJבOvK˰'r,NoLv/c%%W!,KCRޘ5eapsƺx5S+wH2Y7S,W'D :?Gub&uiMejs9(uC@-P%;6a,}% wsde~GA?ȝquhr]? 4PKj֣#PK!*5res/drawable-xhdpi-v4/ic_mr_button_connecting_01_darkRIFFWEBPVP8L// $IEO;V# WԒE5m?\23GN|5*t ;]#wAM -"aJm,;GS^7@(2ێQ,ΰ3x)hvb gPY#*;m N塊Xx:"{ |ĘdGQW}&2Yu>?2^bfb]PK SIPK!*5res/drawable-xhdpi-v4/ic_mr_button_connected_30_lightRIFFWEBPVP8L// Gj aTeڞypFwJGaVc RqhBx!L~Rc^{9~U7n>M.*`ur3UxB.JB:WNڀY(7w&•RD'*L(jlJU8G2l*!RqM%,(-c2 R"0#"2f &4 PK_XPK!*5res/drawable-xhdpi-v4/ic_mr_button_connected_17_lightRIFF WEBPVP8L// GJIbGWسpd.׶' -,pYQKބ3? CKΤI zMkGדQ}L{f3𷇑DL(i+]K6l* Y42@ZzMeA@.%Zv li[EȕPDV!u$ZvJOIap3<d8uvjz%U`ZJչs5Dzd ɾ{ W i'Y[sPgj/a%@朻k=L J5gAZ)*fHZ5>@ pOrZgh |y~b&zO'|c\D@7PK4 PK!*5res/drawable-xhdpi-v4/ic_mr_button_connected_18_lightRIFF WEBPVP8L// pܶ$1=!YN6đK47*RbZ\[Xh&c=}vB?&_Abjz擨;:$fH V?=t+I\:@_.HT>|a UžO $z#H4mCAT6οC֧a~ږZO𤕰$o4o|{:8?ie]C3`15!i_@hCZPK³'PK!*5res/drawable-xhdpi-v4/ic_mr_button_connected_27_lightFRIFF>WEBPVP8L2// GFc@1cAm[$.ܲ{X2H3a?]翣"rXG2Ɉas@",;u?Vs\PKtOJPK!*5res/drawable-xhdpi-v4/ic_mr_button_connecting_12_darkRIFFWEBPVP8L// m7nU=vCI{itTn?TVȓor*9TRciI5-""ܔݟcfJrG֠tg[sɀ2O{ R(0 0y)@G)N( ww*ݣv{ *<hUVtZ'@,UTR(} /c*]cwoPKPK!*2res/drawable-xhdpi-v4/abc_btn_radio_to_on_mtrl_000 RIFFWEBPVP8L/?"IRe݃tMuY̸>ul*] ۶yLlQGWඍrv7aS!I/"C!K*z%$Qڝvn6VD!z[|m:@MAQjGw {c~ 0p5+t:_ig $FXR%|c0pC=\:2RH+$uMJRiI<3:=:),l K ڡ|5IjCό$} tIԥg 3)eĥ%ڛ]RDrƅT#1U5i0RԞGBd :@f'񨢄'g: йL*Lަ;IoPK-^MPK!*4res/drawable-xhdpi-v4/ic_mr_button_connected_03_darkRIFFWEBPVP8L// 6I\QY;'w0 & #1pHQ[?\A}E HE6VBvؗ]M-qEBx*wrz3H:&£]b@4mE݈u1 ( D)hDn9"f/iD1]r!g}lcw rM=g`P=קPd7G%ĬSK_5PK\0jYPK!*9res/drawable-xhdpi-v4/abc_scrubber_track_mtrl_alpha.9.png sb``p "@,$D8y9@`~^H$300+9 ,0ˠ|F6HIz8hON`u1wӲ Vp3qxeSBPK)PK!*5res/drawable-xhdpi-v4/ic_mr_button_connected_10_lightRIFFWEBPVP8L// pܶ$1ݻ=!YgMFeF7*Y ʳ֫aYlo'$ 4"";k41ZF:FZF!M ʸmT@`* 6yG h+5w vPzEkX 4IZ@!IDI`hI:@ @I $'+ GRnxue`I{07PKtPK!*)res/drawable-xhdpi-v4/ic_media_play_light/RIFFWEBPVP8L/_ Em@g3 P&[0l6]m;%Js="A 3նmä'܀ۑQJES/#Š珈y@"0DrHz f?eqӥmOzv:q]}@=U0pPKfPK!*5res/drawable-xhdpi-v4/ic_mr_button_connected_07_light#RIFFWEBPVP8L// pܶ$1=3=f&6 FkoʢT+jX6icsx6ap6k\nXvr nrE}tc퉌$#>u8IP787PKD$m.H,٠('0[4Xk MoPK60~L7DVh5d!D Ԓ;CDԐmtZCI bx2L!)18b6ven|+CR`H8E/ɞ%+fύ&bf&JCPKX5PK!*7res/drawable-xhdpi-v4/quantum_ic_skip_previous_white_36 ts`sw? (vb/oMT7n]$_+CKFQ(:hS}J睿u'<|xc` mp0suǃ^Yp5WpLqcRp \Y$8]& GiM]}T}oz!5:o}N+'C-PKJ*PK!*:res/drawable-xhdpi-v4/notification_bg_normal_pressed.9.png sb``p  $'L0Ry9 X !+B B8 ,j  ь0_- jq鍼 , 'l#+z CE ʍ'[䜤t|u@{sJhPKXڤPK!*5res/drawable-xhdpi-v4/ic_mr_button_connected_04_lightRIFFWEBPVP8L// GJ#IaXpz1&@ٶmyrz,E]q'Ox K]?ca P,ʓߟqeAUm6\>tDnǼ$¡Zylpņ 2=MrC@&H;@8ِXM ;TO4 T,bbQBPKP PK!*7res/drawable-xhdpi-v4/notify_panel_notification_icon_bg ts3a``wu  eZgmUY˾%g;-AӜ*ѵ,PKj><PK!*4res/drawable-xhdpi-v4/ic_mr_button_connected_07_darkRIFFWEBPVP8L//  HnIj3f=:B?6DvXP@ZR)kK@ډVבզaw7|:IuSnRrvrזKέGW(tH_=BC|bſl8rD~!\R {pʔ$bn CL,{>Ô@1B`*IbA?C*$·s9̿!PKyPK!*6res/drawable-xhdpi-v4/ic_mr_button_connecting_14_light!RIFFWEBPVP8L// pܶ$1{>#LCrM.<8nPuKI,$" _RJ!*sxzqFEŤޤHGGGfVO&`4;BR 3{Sh( ph+PpNOiORݹ%:CF(^쨅\/Y x=CRE#R j7PK7PK!*7res/drawable-xhdpi-v4/ic_play_circle_outline_black_48dpXRIFFPWEBPVP8LC/_6 5]{;?j~hIݛm1Wg{NEdw>%ڤJ>o>{UMb~@5&Xu Vƅǜ Uq,4BX[7LݓXͭǺYTn8 33Eyva3AlZXCa,"\l ,I'd7F|5Z Vg)i"]`<>7 ?]t|t \@oMӁQUHL)fbMtPmGڍr;QQWPUor>FM Xl,[ډ3RYD: 4tx+3Q܁i&a Q;qZ C:HwpmE 8@R 8 oDĉ쀶mh^imp~=8t e!j'hEl 5 ,H*Yc gڂDĒiq3=H*Y g"DĂ`pwT!6#9]H*1cj g*m%3yEbش g;zhjwp5FLU`)!öA̦u31e4h#`].FQ3=8rG*CX:cw ;CƑ6.`eJN֙K-By+jC@u{8v;L%R1\ vр.\+FaYdCc4LP(3)uBw@׿S^t/1kHnTeMH I =j]sӼM Š^rK,GEBt}$J6|+ :{@(B=mW=BuyR-_16qٞ )d?U1Ted@1U/!ʰ<*1O#cpqSN1Y]2$9@u{hvN]v:Z?Lx8j\O2 hMTRxuhBr-rPKG>PK!*4res/drawable-xhdpi-v4/ic_mr_button_connected_08_darkRIFFWEBPVP8L// u@dnsSς,"P$}Od`f`d'@@İTZX&/K2[׷ةB[l lΓssx0\)$;CٸP^4v̾tEs6JlRA&r{֒`' gJ/ ge~q6HDwl_8!FAk?ڱ PKĕPK!*5res/drawable-xhdpi-v4/ic_vol_type_speaker_group_lightNRIFFFWEBPVP8L:// 5m$ɑN²~"WG@mtvb_~.!FN1ItL@^ ~Af>j>˲s <;wxΑ-rg;q;O Dr }W@i{:e"/Lk)HT8$ч:s:#*Q;ǟ>DsWG 1y2*9`8DW;͂й[$(c1B$p^a pĮ ks]>.>YjO"e嗰$+y`-Yp`/3'3-B~PKtASNPK!*4res/drawable-xhdpi-v4/ic_mr_button_connected_28_darkRIFFWEBPVP8L// $$IO{&#PF&1EȐDp ܶ#gny!95EneoiOlKhEѰRk=oVbฃ `PaA@,E9N!W´%lXH"FRݥەYU&0} =*_טyݍ&uXC cN$3`}MPzG+& Am~ϫp6 53>#fAPKv)o!PK!*(res/drawable-xhdpi-v4/ic_media_play_dark#RIFFWEBPVP8L/_M(jR » ~ ČHO0hɑ>Ep[۶ڡ%WmӽoL@9ILӐ.l'u<:}qrhg(q ،z6zA gH~bǏpi-qעx\8qUQ` R9`PKh PK!*2res/drawable-xhdpi-v4/abc_btn_check_to_on_mtrl_0007RIFFWEBPVP8L/?`۶$=hqAF캰Z.8yuq6zO7yD;"#a7MBI.s,]F 0%r.C Uy*X >A-(P7RM4Ɂ,_0[{xo8 PKWPK!*4res/drawable-xhdpi-v4/ic_mr_button_connected_06_darkRIFFWEBPVP8L// $9:#wO&BI{XieLNg5n?x=L6A|2>_LsIcc6ɦ )=(fmIƁ ˢ4Ȯ9U[mP \:)Pdj2BUx9U%mS[.TU*Y١V+ܪb`UE|AWjo꧜u{\ۆařCPKO\@PK!*:res/drawable-xhdpi-v4/abc_popup_background_mtrl_mult.9.png]{8{ۖle.+RXu&9҈mRMmMD=HuFIʓ(ٹ<}?}H}$A34_Au6ϫŪ/)*7\gRUcsBPQuSoIEV|ɺ΢ 6 Տ7>к!V bU<;-*]`+üx9cc#绯m |̎(9 %$Oxwy5yKJ*0 =uDL$XQːv>4"q~N92bhARt.;af]BևK+GƇJ[a@P}曶#e(+ +-b V9*>l3:GbXdvp!x"f=}{?*w]Rzv?kǞr %q$pioc%p_:Dʝ| Y23Wiw}̔_̟_G ^AEw=ޕ ~kgs̥\0%%᩠Ⱌ,:/8րtϟs/lAO0ԔpPLތIM?E,տ/,j:\y^,K\ܓŘzeTE6E&OC:ca;w!kXNylfX(5;ζgHЮl$X q%Nm@Z9r@jWrzLF 4I7\ V$ֹj|rӸ5s!guWQ 9-`ovټ F8۩؟_s܀OP|?~%yFFcz\ȃ.UϨk :Xc-1p]PKKu@=PK!*res/drawable-xhdpi-v4/plus ts3```wu  Qp ֻu_]gypql?qogPKn~i;8PK!*-res/drawable-xhdpi-v4/cast_ic_notification_onFRIFF>WEBPVP8L2// H$ɱwKtwa,ζmǛ1GVslvVv۟vs'mk xGdW~t:eE6랚Ƙ6 'wzIeST!mm.L=&mPv@oJ6+ر$uOnXϕsml'&W?o(92[ػaSp cŵɩYl~6ݕэw n+MWyCظ*7 yK~bfc渴 PKO3KFPK!*0res/drawable-xhdpi-v4/quantum_ic_stop_grey600_48 tsb``wu   Ƚݶ~3c?PKj3Q42PK!*4res/drawable-xhdpi-v4/ic_mr_button_connected_16_darkRIFF WEBPVP8L// G0?jvl0m#*f'00n.%};qD'@' oK)ic&B?gU(iLCI!iJr&444)F&̥ QnPk7CrBʒ@[jPmLr9k4RV[*FFOp;\ɸP ,2b("}EXлT&3VzKH€7h$.A嶔^{!PKNTPK!*;res/drawable-xhdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.pngm4 Ƿ%?Y͏7:h1K٘~YhTDRƦỵByB&ۼL_Of-ZE !;yss==?">PKWh]Ud-T}md{k\zQ x.6և\hkq$1@h /k @Z; WAVB3mT&z񭎦:B ,爮z`5"# ڑ%! K~Iѕ(>od&[n\&1ϝ }+ݙK=6@dge/4=msA9}L8fuI1%O^ZJxdoɬBX 2)NhIR#>x :᧍^{ŇT+qR}thSrtpD:MZ7㼎|"~N;#HP (OȢ9y%G8ȊJew&pU IU8AA{J(vXr@Ch}\s 8+uFlJ;OOҰU֭s9~_+}GQI@b}ܨ{CJ&%ղ#ŭB':~.Q ƪ!V9aվZm(ъ/*-W)Ky.("̫iJ\AA2>$&>xT%Z RzMɕ6cvl}Kmc Le(*xל{Cq<lIǁ\TNƊA)oZ[5kyG|ug⎪֖5trz@ENH]YxwkҝVlNWuLPs{,dԻQl;9b+ëatZNycBq|&!>wUǦe6rNX.,-x7;kp8|̇|إӖf2/=k 7y>vbbFޜ:l|%qg˚q=D:r8ayF^q&Sxk3$ ,q;2sp*0LLDC }.fP;mY`ˀܤΥ0_63ԓO //6*nʲׄt\;id$͐*-_E[Uecn4hi;%?@ÄY5!=sgoz0 9HPweNL6#uOO(4q' ( OIdi_bS;'):6iqoa^کB4ۚYUO#G7cQ|SP\U=q.M]gr \?SW?7)Bsvhѧk_{T`_pIc4MdJF!mpɔpɔj kj!*Yi4c]'[ j:joP>D%A;9OX.A<\bTl7yCv8D|wGzh<;~3>+PK׆>72PK!*/res/drawable-xhdpi-v4/ic_fast_rewind_white_36dp&RIFFWEBPVP8L/G#m$iuϒXFֶrVMLLLL`iRemv8.mLzԄRxj>R\&J=XMԃ)@C",`"PC Fv8`ɪԃ l(%WcG)(%Udj()?JǓ=W:H!!HJ>}tJ*$pJ.PڕbNIyf/NaJ_Wtt+zWތ(PK1&+&PK!*1res/drawable-xhdpi-v4/ic_drag_handle_grey600_24dp tsa``wu  Qp jI{]oPKvU64PK!*5res/drawable-xhdpi-v4/ic_mr_button_connected_06_lightRIFFWEBPVP8L// GjFbc>z$۪u _8kj>6|{?%!^pݑJ %$h:.dK^)'ߟ2'/bŋ;4ށ}l nƅ)L%7i<r`6A1pЄxK4%T 剤)3gn& L1 #rfݘb෌A:(]#zm~܎Q_ w_Dˇb ~F"|?g@>+wi!` \MA/1xh J,PTm/bp#Ho+8`\nBSǛ>AK 6kz/fë:]7[O;>z= #$Ȍix{WUqCKwVEaBA5)B.҉M+>|dI0cDJ\VMPK$LPK!*5res/drawable-xhdpi-v4/ic_mr_button_connected_16_lightRIFFWEBPVP8L// GjvlE@my$XB{vW`mإoX'm)cz"E mlBR(3{#3ih|3)$p[I΄&4Ȅ43 0ÍjfH1YHYrhK ]JvIB.c FjKEҨ Nt=4Z;*EF Ezw[dqJt Im%Ҿܖ^y/PKJPK!*,res/drawable-xhdpi-v4/cast_ic_notification_1RIFFWEBPVP8L// l[? Vƫ" @ ʶm۶m P/ځO_&@!|au7hE6 ~D@%$IB?I aJtGP}U:IF,iRaNhFˍ '0eD$pv:ۖ Xhip(WgE2k@(Bp~"Jq3C1~mL?2$6oǶm\NXs~?O2~EZRoʫ 2:,nys~ Է^uEahJdiHoNQ^l7CtM_jzs9A`LW%t9? G;C륗un$aA'G: mEyNN5 '^łIPK0PK!*1res/drawable-xhdpi-v4/quantum_ic_refresh_white_24wRIFFWEBPVP8Lt// 㶑iOk/mǣضS9M0Yk#\CLkO7S=q[6Jz|X?Dd$QTtcWB+iigfBnN L]l rz qAB-nYoHaXOƈ!5B~ɕdkiF y&lGc9x l;@#Ľ`DoG3\z x|$,2"lhDzN2HО |3mV)'!ȾT95r$lx6^Cx{p1 S_ygIgBnVC$|qH"%#Z%VPvԊ%?PKֻPK!*5res/drawable-xhdpi-v4/ic_mr_button_connecting_26_darkRIFFWEBPVP8L// #m$i]qU'# WaDGaIR XCBEp?$~Hc~Lh 6_#H\7GwLE4MX4res/drawable-xhdpi-v4/abc_scrubber_control_to_pressed_mtrl_0001RIFFWEBPVP8L/@жm̟?g8&00; 28~Qඍ3`(yl^H8@сJ ޅ/xQ)'Hğy0@@j]E.-IpD!Gq8vV9҇Tt}O/ Qe$~VP:fV*ܥrwV@-6ڒ?ٶm~ޞm۶ n)rgVCvy㿼Y,o7˛&_\3E+` B b'K`0X)@Uΐ0~7j=K*_ CԨ_'8egЕUW.Ѳ C)t f7?gn6&H34A}IxWN;/<"ai™a?EAs=PKlPK!*9res/drawable-xhdpi-v4/color_picker_advanced_select_handleERIFFWEBPVP8L/] 0r6hv4ٯrI!>p/Q,($X%@ROc78lۉBᨹ02m$QGwq$Im&ω @ xAL 77,!B*Lup0Q0k B!hg !P1&ҋGOyA6|QJTK$,d-@ IR ]۶;>3Lp^$]ʼ_#P1#U1QI"cw:-m$9{KSnmۮլ}7@FADJAAAN^yLl.*@9a͗-ߺ_oslQ{=[͵}H5@y/8雏سgSijcF Ä8MRBeH( ق%>F^GWߙ&CpbHKgHOJ$&tU) 9=eR#w.Dd3~t!0))'LT0`>,IKÞܘǦ{KOuEp0;31rOU*iΥm'R-?Okf:N&3/zCa$=p,4Hqh9Fa:VvJMF.Af 4 z̄5u4R2(&թEcH{Y +.d>d (ni/ScgX_?[Zpfi o 6`?;^LeF>^kVpomB2"bcR ?\nՠ|>LkƄS F((̥R% uս s07ZTѤ@)/bD{H(@Ѧ=hS'Q6~( {JaiqSJی>zt|`L.9/h nо~T.eR5\Lf?Ϗi}Ku6`69t*@N15O9A֠ ɈL>-(e6OU{Jh)*BaBC#mGԨ QN j_aϏg:Sn@N)@UAiSTFUg&PDA;$gi7!!nDbPPKշvPK!*5res/drawable-xhdpi-v4/ic_mr_button_connecting_08_darkRIFFWEBPVP8L// u@dnsSς,"P$}Od`f`d'@@İTZX&/K2[׷ةB[l lΓssx0\)$;CٸP^4v̾tEs6JlRA&r{֒`' gJ/ ge~q6HDwl_8!FAk?ڱ PKĕPK!*6res/drawable-xhdpi-v4/ic_mr_button_connecting_07_light#RIFFWEBPVP8L// pܶ$1=3=f&6 FkoʢT+jX6icsx6ap6k\nXvr nrE}tc퉌$#>u8IP787PKD$m.H,٠('0[4Xk MoPK6$ ƽ!Mlu [ݼ4r¤_M\gia~3P^ٽ#1!طigC5OK ^_bZ:&uaRih,g 19P>"^ɾGDZ.=KDrrԏ-qeh'g, s[ |.?%PKnZ*PK!*8res/drawable-xhdpi-v4/quantum_ic_bigtop_updates_white_24CRIFFWEBPVP8L// H$IPQ=,TRYO(|_Gd x S*>!WW?q *U+~ [v/UDh:tTaRɪS*TBa?,HW![ai"XG%zVq}"Bʸu\U8hP*=(WW;&G8@hZ1 $?+7ƹh0qWbW G|TPKHjPK!*4res/drawable-xhdpi-v4/ic_mr_button_connected_12_darkRIFFWEBPVP8L// u@rHWYݝ9h!IRxr ,O@C?g1c~yyidl1:ws %E X.[%t.EBH @6Eo}HsHax̞ֆ*ś$;'u.]~Þ*EOL+X!OUzK'k _ Pj )XC*Gdj PKD,(PK!*3res/drawable-xhdpi-v4/quantum_ic_replay_10_white_24)RIFFWEBPVP8L// I$)W@Aw.cM8ֶbwYjn*omI9m#E,S{?UZ7[ٶ9Q䅭%^LO`xJv݉$7E'(V}/!h>yވVI24R(O𬔾!jfM9*נyvgwJXvpGu v(ܡ  ` {6ڠp __W,خO]UzQFUtL#Zy:܏ > JdH3̨ ^V(s$h4\2Y|%Ue8UVAVeBUIKA$Hg ŎT=}?ܦQ"?N3|j6Df1VIdži[7iPKtPK!*5res/drawable-xhdpi-v4/ic_mr_button_connecting_25_dark RIFFWEBPVP8L// 6I\QY3tL )m([eu!M*Ahh*w/]#`T"!6+U`]I*hqQgV]ߔVNEiim bp7LP-ٍuFѺۨ-C#zDcy }SJTw@=%nDvXMT)8Q -g m  m].\QA Lo%u}iʣxYûB^o!WT1r*<*:5%gUӡ)| J,40WzKԃ7PKN"PK!*/res/drawable-xhdpi-v4/ic_volume_up_grey600_24dp\RIFFTWEBPVP8LG// mдw9{ǶmѧBN xlOo3pHG{ uaFY 5*bq F`ClCEbd@ SđuލCqpD'6'.-'>]vEt}qGl¥8n"+6g79/G_'r{Qĭ-7 ?Tmj$w#7qʑH8Nx#ĸ gdǴjTkdVܕKu =:%pͰ*WB+VPKa\PK!**res/drawable-xhdpi-v4/exclamation_triangle RIFFWEBPVP8L // Udmܓ+I!^(xx@ڤ/jH,zPP` @ ` @ PmHu#W\dW> &m7ddmj*A 5Ɉm9*q'b$Q3XN"]VJQSeS umuHq{"lO*0~/+*`TjY`T3!:?C|Jg'5Yziaw(>)n HɆ[GXTSPK# PK!*/res/drawable-xhdpi-v4/common_full_open_on_phoneRIFFWEBPVP8L/FO;xPjۖeh.YA4h4xvz3t,l(bezО+zܶqĩg~a? gŦ6h(V,CK'MG'aA_05 de0LJ Ԓw M@s6cY^ȳ 0̜Oo.!` G32_t,VPKEPK!*4res/drawable-xhdpi-v4/ic_mr_button_connected_09_dark RIFFWEBPVP8L// HR`Z +2d<IһigJ\4njc~>αuV^*IB~O$TߣTmlPnO4&'4dL7VkI&0 ut6uIVл$UZ\"HXh19XwQh0df\IeAzf*I@/ #ש Ԁq:oH*`>W}X'3 ]PK\bPK!*"res/drawable-xhdpi-v4/settings_cog^RIFFVWEBPVP8LI// Xm wfCI,'ԯ޸c"TN YQh۴ݺĽw*Ϻ93>T6&Ecbux-N`6#cfjვ%BuϜ^ÝC+ZQ?%v:yaž=Bp^ <^eu35Sn Soݒ}PkjZg\6wي94_'zo:~Gi}||6#?zU |q)9p?y]MLV3ۘt94ÜnϽ^yQtW>P3uŋ1VO}xe2d '9bM-g~>UW?V,>}v[r_bAtT{)}Gv?>!|T~5;@) PK/,3jPK!*'res/drawable-xhdpi-v4/ic_business_small tssa``wu   D-6,!$Cy=+{? qm\ܬ/W{_ePKOLPK!*4res/drawable-xhdpi-v4/ic_mr_button_disconnected_dark}RIFFzWEBPVP8Lm// uHrI Ԟ1٢,#Bm$}_$OvUs53w`cv۶m#K6Jq;7dH3pMM$+M2zpJ] J5DSYk@";3ٻ_ڀn$rҏ<ӆ: Tޥr}_@^o|o.>|LdILRakZ>]0EV= L)ޟ>[޻-&zfC*Ǫ-&s֝S]y*\85+J\! C8 am(Qf|xkQ-cbQ?q K\Q%AO^)Ygf кB[,갃yVW .WX:L'a{Pabz-BŒ,#w!5* 9{L/^HCOH Ǽ1%UX)MDB̃ [ߺOjr[tWRHaBwՍs?ܰ!~G>y>Wi"/ O5 EMO@ xO/PKoOۇPK!*res/drawable-xhdpi-v4/btn_closeeRIFFWEBPVP8L// 5 ͕)K\Lm0; Gl7n(0p:i}'8kcIՠ I`'e!,lLT,Ll:&1A CCG{b{0?k÷A>h-PKtePK!*6res/drawable-xhdpi-v4/ic_mr_button_connecting_12_lightRIFFWEBPVP8L// p6#1tyFo4LgLD6(`M8"b\dIC ^.ëP113' PKyPK!*4res/drawable-xhdpi-v4/ic_vol_type_speaker_group_darkPRIFFHWEBPVP8L<// 5@$IT+uΊ^۶V,\B>b l;"ߙ*|' }.ٱE{wYvݞsN9Da}1q{z"9^}+4ſ|52~b Ip5$*K9S.ޢsqA1';a};S)QsNtѹ,˹U.HPb(HXJ&,^NG: =EsD/RV~ KLBN%XK La6PKB!nUPPK!*Pres/drawable-xhdpi-v4/common_google_signin_btn_icon_dark_normal_background.9.png sb``p  $(Ry9@2vlHq-RK BXX$0@11 ,|Fl? U ̗}1ۻ!2>>Sf5%![V:M`ƻ)VAW/-*l"uD 1{-ŗ~ֳ>Pg-N? E\ydz[=N~+V ={g256Lx_O]~mb 9u7_͏`бX^Z{}57/)swcgdrSΞdg+=gv]OOqjlbj~ʍcgbƜ>I\Cq 6XoݧSN7 +՞W4_\;m'ԷH2al`b```,0 4@*S:Vxd/S?F?+|ח,\3i]LCV[Ӏgh.$іfdzWV.߻ßo^T5s$ɛ>4/? [SRY܏?6mޚzp~ ^+38 2Ws\KKn-b^ӹ64O+>]"ٴ:*-Wyqۺy gv38-wJçk73ڞ!԰uSgvsha!}R.1%1[}N\oۍssڙ򣧫:&PKKPK!*4res/drawable-xhdpi-v4/quantum_ic_forward_30_white_36 RIFFWEBPVP8L/G$$I,DDx2sE:'m۵ݾڶ>ڶm۶m\Fˁ#INS{W5k )\SpM5k %\gK %0w2Z",`0_Ʊ7>cdқP0 ^Gcd^7T:hѫ=ݯm)%U{[`"5h~3,WY㯻ߟr|, \٠kjAnѴ6&"bC0=8<r CaՠIPPa᧰IZR`wI pרH/ XOl?y!TT'@E/p u^H:XDz@˾46 | mQaJ 6?+FȑN&NK%%7%ءs\7~ʝ`[xd_:9(`hOi+ƅ-6Vvk'+C`/zVV |P׈#qt"7 V۲D+a-h9U"=c:/l4 CC*)oTdd3/WK6}J.1}6 YHl]ȢiqfTJ/$hr.1]cS"QyЊK= =,蘣:H[8"3nk gA0&|\%RR*RѿPK͒ PK!*7res/drawable-xhdpi-v4/abc_list_divider_mtrl_alpha.9.png sb``p Ҍ $f),?ߐHR&y! LL @&#{bv\.!ד30222Ho{R) PK$#d5jPK!*6res/drawable-xhdpi-v4/ic_mr_button_connecting_00_lightRIFFWEBPVP8L// m$9ۣv3*L2eGtYL@(j#udA'Yu&vw5&QUKJp[$')M8'9)C;X׼.IVkV-BҝPPZɌb$"ʿsD9(BUZU*UEV7ijJres/drawable-xhdpi-v4/cast_abc_scrubber_control_off_mtrl_alpha)RIFFWEBPVP8L/m$9RQqϛ3m r^.bd>镁۶޽"h<ѹj= 2\w"#3 0Q@˄zwA7hBipexK#PK7~ PK!*4res/drawable-xhdpi-v4/ic_mr_button_connected_27_dark0RIFF(WEBPVP8L// #m$iSq=1P2ꢌFr)"F:] -f5MB7,؝b n9LYˮނ-m Tݾ-S*G_Jɾ":`%8_Q0P,Lt$!ݷ܁,O"Qaʲ2@)Cs,l6"a@`jiiMҐ2FDο3'"0($D`m-.\`8Cx?8΋=T_ ?naf/F_PK[A50PK!*5res/drawable-xhdpi-v4/ic_mr_button_connecting_21_darkRIFFWEBPVP8L//  $9:#wO05S'dLC2i1&A %a艨`Y̨NPK@ PK!*5res/drawable-xhdpi-v4/ic_mr_button_connecting_14_darkRIFFWEBPVP8L// Hm귐Iw5?bFnfYui9J~ЬGةG8#WUPqaRiD`:ppT8X=CCUWvogȶs{E V<"o>PuBhD]+uji"m >B&pm冺@wgFndiIx*۵!PKjWPK!*6res/drawable-xhdpi-v4/ic_mr_button_connecting_30_lightRIFFWEBPVP8L// m$9ۣv3*L2eGtYL@(j#udA'Yu&vw5&QUKJp[$')M8'9)C;X׼.IVkV-BҝPPZɌb$"ʿsD9(BUZU*UEV7ijJ \C|lOfw^bPU" mKfW3fYR<8 PKmA!PK!*5res/drawable-xhdpi-v4/ic_mr_button_connected_02_lightRIFFWEBPVP8L// GJIg(-l,yIF6DFݾѭv Rȴ + 9l8YJ>3+I:3n$&\K>0C j+Im(!R3T\1\,K}F_霚E1PHYBm"mǣ#!Q%*cԥ/Ͼ<m kDMRZQإ嚶C 9p_PKՐPPK!*4res/drawable-xhdpi-v4/ic_mr_button_connected_15_darkRIFFWEBPVP8L// HnIjr̘$?cHeX f&P_4kR\CFW"Dy{*\Uֲ@ʕdiƮ2=  "Rq;@ 4co$$79{7R2)UU@-7PK PK!*4res/drawable-xhdpi-v4/ic_mr_button_connected_17_darkRIFF WEBPVP8L// HmjdOp|D\0>z\ +ixx׊`zh5\ *Wh?a@-az2R@2@:RD. s> PSƺHfAd(rB*&ړq8@^ -%P[ цˈڃ6s Z %5p[9E$)=IlI@#%%7"?$܆:ВjJ{1 aoPKpPK!*4res/drawable-xhdpi-v4/ic_mr_button_connected_14_darkRIFFWEBPVP8L// H$m>z`Č$66's"7jAځ{H9E`"D~*B+T8'P!S>Pa#cgu"Y Dr "!5_c߳&(n7 K)^8{l%@@mrYL\ ĵC&m7YHc;g%m[3I@ř;m_PR.kNR/;NjHUPS PKOPK!*.res/drawable-xhdpi-v4/ic_vol_type_speaker_darklRIFFdWEBPVP8LW// UȒ$n)~ ؑmֵk#33#a؊xM@ƾR?^o]A5&|W))G*Q>(Cq;Oq>Yv7ZPe&jjhwʠ{es|Ӫ"UDl E*!}?1Tݧĕh /*T3̕uB\w@Y++fیhxEQHά+C~3[瀊D_frTphMy8})`eחEZ  ÐۇF1@jrȠH3^ͤ5ۢx1#3@Q99# xFrL;@1flq' 8c >WB"sfW3/Al;H_w~  IN&T!">IM*CD̙hQчH׮:865"-SF9.MF$ VbqOT"W3(ڣN ]J5/OMiE pwThE3xõQhܳ'\T`HZv)/BTQ (4MPKMPK!*.res/drawable-xhdpi-v4/ic_play_arrow_white_24dp[RIFFWEBPVP8L// 58n$I:mH@))h)r۶Q8513*]3HhLx2ٚ%m9Hr!iȥ$*kIBJ>篜#O=F=yPKR+RPK!**res/drawable-xhdpi-v4/ic_delete_white_24dp^RIFFVWEBPVP8LJ// ۶mM3;mF&Ș(`,R"6U͐gr(2 py*PK^7c^PK!*4res/drawable-xhdpi-v4/ic_mr_button_connected_21_dark"RIFFWEBPVP8L // $$IOtDgD,3I'QDm8rnIvex?$+21ZD(9&VҰ8~:gۣ*FW~5Ff6(07=Abβ`/QB! p8Af(uǀcCQ%S@#d4[WEFy:7Lz5/㈴ V\-Yy^Il%Ҡ 0O--fVjl_sPKO'"PK!*5res/drawable-xhdpi-v4/ic_mr_button_connecting_11_dark RIFFWEBPVP8L// uHrIZ.TGs@ IҍOigE~?GE/m>*G*~6뛙I,WJVS*")p?fI&>c`'ps+ȥŮtGoe̛].!x0.PNPuҗ}jggNS1pwv@ed.X`CT;{le }~Au_0I$33ɜoPK/ ]PK!*.res/drawable-xhdpi-v4/ic_arrow_back_white_24dpXRIFFPWEBPVP8LD// FR#ozR2 Ts.SHCUDmoE26V>Z#BPK<1]XPK!* res/drawable-xhdpi-v4/star_greenyRIFF~WEBPVP8Lq/&$/Bq:&33jH2HڙA8\ Dys1ڮjko(;IQ1P]͙4'5PY۷% p_+"Zl;R0{p=D> 1qvo.4@S!ӊI.nՌva3\wS#.nԍfߔeuʼ il\ cv 9(=籐U^9(f/>>J%LɣT*/PK2~C% PK!*8res/drawable-xhdpi-v4/abc_tab_indicator_mtrl_alpha.9.png sb``p  $8y9 X !+, B ,j L (-Č`39)EO Dx?ׅ.&ggd8<nOW?uN MPK)_PK!*9res/drawable-xhdpi-v4/abc_scrubber_control_off_mtrl_alpha)RIFFWEBPVP8L/m$9RQqϛ3m r^.bd>镁۶޽"h<ѹj= 2\w"#3 0Q@˄zwA7hà HOW?uN MPK\PK!*,res/drawable-xhdpi-v4/infobar_blocked_popupsRIFFWEBPVP8L// Fn$9 ||w6 ۈ!ȶG{mi$D >uCNe24:$FnFvd! -wRܓ(G$ƙF49 b6(4-7![50ձ>ⓠD.$kEܵBg&HU@ol)&XUf5gl;4|PKx-PK!*6res/drawable-xhdpi-v4/ic_mr_button_connecting_18_light RIFFWEBPVP8L// Gdi2 Xkz~cKGk22+YZ{ޛ?c z21ަ>m QlJb2ͬhR+۠;@+p;-U|t Q02O mYZ@OEP3lDmzE#8anlB~p@VA;I3hՓ'^Tr99!PKZJPK!*>res/drawable-xhdpi-v4/abc_textfield_activated_mtrl_alpha.9.png sb``p Ғ@,$oo $ s@|CV"HY$3011)9J9 lI(cZgiO Dx0?Dgm'y] ' Z) PK4PK!*1res/drawable-xhdpi-v4/ic_mr_button_disabled_lightRIFFWEBPVP8L// !MR0-^ާ B8mNj;̭SKGG&֥׈3p۶$^Ao 4L%K i.ƄY0F%qQ/%H)[(ikUQTG|C8`|'jT@Nlz 5w1@Ak2˚;@!W;Uav<N{fr'm0g_O}Tiݏr319p?UO,n {g믝g;\̈́YgO@7Գc{k;kXB S~}*B b)w5#i˲E@t".5Sa;@MՓϿ○LÃ8Q~KDYv':sGb@}G@U9^V}@9Q;J _o_PK+*PK!*5res/drawable-xhdpi-v4/ic_mr_button_connected_20_lightRIFFWEBPVP8L// Gj"IRƧd (9Nm9IKg%dXP+i}w UGZE / *@\PWZ q0nT$)ƌ(kJRT $lzD&cHzL0sơg)zJen2I `(eI+1m1V=elJ>K>TS:8= >u U=:auPK'3PK!*5res/drawable-xhdpi-v4/ic_mr_button_connecting_02_darkRIFFWEBPVP8L// 㶑iOkzw305N%tf0n$й?$RA^cB1 LĎ貆;#]pp*l' 9{N1<7dՂCa Jq`TOLSj 4ܘ.w)MH\gW7HTL?_ kC7(!b}UY"HV#}tg Ť>\y“7PḲ64PK!*1res/drawable-xhdpi-v4/quantum_ic_pause_grey600_36 ts```wu   rpT3Y|<__'PK20PK!*6res/drawable-xhdpi-v4/ic_mr_button_connecting_21_lightRIFFWEBPVP8L// p6#1tyFd~J>dM2qKgWX71HR*/}""Y-UmmSmnQڂQhKh?Ю)%[tF!@G U+Ac@jz ^pk!I @e9#,I*@|+@@-?)KF΁#I"ɳyt#IjlǺt)23}ڝ}NĔS&& 3 0p5tOĭc|{]zZkǟDy=߯\ b8AF"͊A['ҤYh$ծyҰH:08#B-e4kZ"E+:l4Iw#-vQZ.svi~:nO-'KNsi仸WggތMܦy] H!)"C)S"ŅSxz7ܺddJЌA 0T*u D>!a $u5M:#)hBAwz JR>O{p+C[xpB$٦mg۶m۶}my᝻"o6mz P[{y{{wtbRv'w,?%ں8{N!?R|'tvyշ{̽ϾїmfN7ԁ ~[T疕^BUUjIn@LU}qU<i41S!a!MDȈ6'd\頄M*9fGˬܢxbNnrl lM'q ΦkV`} Ep)'VbM,ڍ'.5_~Zb[eHi_ŵVp{`7ΪƀVi,2`9$_^~A *@ PK7xojPK!*6res/drawable-xhdpi-v4/ic_mr_button_connecting_04_lightRIFFWEBPVP8L// GJ#IaXpz1&@ٶmyrz,E]q'Ox K]?ca P,ʓߟqeAUm6\>tDnǼ$¡Zylpņ 2=MrC@&H;@8ِXM ;TO4 T,bbQBPKP PK!*)res/drawable-xhdpi-v4/infobar_downloadingXRIFFPWEBPVP8LD// $) t3{MRRe/N0yD j#.7`/Xey$Nk6zP֖3k7X_)/1.~0 L!=?8Ț1t~p  | Nb ( loЖ(n}OAף{0Se^-:9'Pχ@Y @$ 5Y6M`_;ӏIKCM&@;'>t /:O[yJ S޸qҀ u˥ xi.wIpJjnJ$H6{-X(ty\ /M& R#'C $Hs dP])I4uB.OpLXEctȦ"U!X ,lyIRlB׃^z=PK #PK!*"res/drawable-xhdpi-v4/omnibox_infoHRIFF@WEBPVP8L4//  IRcA|H{w SHNIDiԨJZu8W vv;q1x*acef8I!Rq3PK0PK!*6res/drawable-xhdpi-v4/ic_mr_button_connecting_15_lightRIFFWEBPVP8L// p6#1u}Fi#Vܠey-` ?TghX0XO$BTpމ5*Ջ #L):ޤ6ΊўPF64,>Z?P)F~t -3МXANm .50St4B2$i3# ,I &I=Iz $ `;>QU F PK@PK!*6res/drawable-xhdpi-v4/cast_ic_stop_circle_filled_whiteMRIFFWEBPVP8L/_5m$ɑ;zDmPAΡeN`&t=Shm$Er3_wHP3KN̻<8K34 i$/rNd @1 ЈYЎpp; Dwrs}鏣a8G )`< V (ԽJZs3fg}vKIx'jC92:$ER|{YGR8S0H*fU9,\8Wpɗ$"7KX4)l(˯K 8KUBs\\1~.?׍K5eוu1.FikozGHPKub PK!*5res/drawable-xhdpi-v4/ic_mr_button_connecting_05_dark RIFFWEBPVP8L// @r`nsSsa; ĀDbF_5*&:8ڱgedt68Kx'/afFvc2,o ]tY{Cf unF2`0R@9uч+¶:CL.lׄ.0= ۶Or9)333UPun(1 ߂֧*]( ԌK 6^_Ύ7y@Ͱ J޺Hm3M&WHҥ_k@ˌXxO IIy3)*d%Vj_=x"BM_F8^T g\Ó"d빐DB˭Aa |ۋV^N٤HkyZC"3vJk=U[둆uh hϔJ`K>iRأG:R)8 oZn o$=KAAc)s5{g玈@;gʭ[. 4CpP2 o IhzHYM~q "o(H&1$XX.Zc#ȄQӱI08P2 %^WYB|(LJW ^ǑK "*Hm|/F|]oFtnF~Kt)o#ZPKG9XPK!*6res/drawable-xhdpi-v4/ic_mr_button_connecting_13_lightRIFFWEBPVP8L// GHBc&L.\Pmo8;e-_6 l&߉#?i̪U g2xsJhPKæRPK!*5res/drawable-xhdpi-v4/ic_mr_button_connected_08_light#RIFFWEBPVP8L// pܶ$1{>#LCr<@&LnP'0XKr'|}J)*u::tF88=m Z+:7Q2䖴0#Qvk\GGjPvT"bWdN IݡK9:!I;MGR@[f;AUPKF PK!*/res/drawable-xhdpi-v4/ic_expand_more_black_24dphRIFF`WEBPVP8LS//  I 6 m0q$E}HÃ3hSLz|tP衷"%xsp{PKuJmhPK!*6res/drawable-xhdpi-v4/ic_mr_button_connecting_06_lightRIFFWEBPVP8L// GjFbc>z$۪u _8kj>6|{?%!^pݑJ %$h:.dK^)'ߟ2'/bŋ;4ށ}l nƅ)L%7i<r`6A1pЄxK4%T 剤)3gn& L1{><Ϗuuuu20aK꼱lHcccۣ PKڟPK!*6res/drawable-xhdpi-v4/ic_mr_button_connecting_25_lightRIFFWEBPVP8L// Gڶ}Vc0}^%ʵmO'ah-5H$3۩#? .ΥIo{: z=k.VJX58 $A]2E0*H 8ʐw & je "|ZR4>ҊCRW8eިUQ6p:}H:N^O/PK1PK!*1res/drawable-xhdpi-v4/quantum_ic_pause_grey600_48 tsa``wu   jdfsw^F/LzӸ7<ɛ PK E64PK!*8res/drawable-xhdpi-v4/abc_text_select_handle_middle_mtrlgRIFFWEBPVP8L/' lyGw;P- F㲓mbf_s}3& ΐJZ^+U)'jKJH#hZA<ݎo)jGSwZU'1YcЩͣQ}ЪڗIVUc0X?~/?H[) 5 9fA+??To%,FBOiP۟+ _| C;cn'82`:qxNKXfj}'h%'߲ .o _\ՠ_!Y>cfG+ > pbqPK۞iIPK!*res/drawable-xhdpi-v4/ic_searchRRIFFJWEBPVP8L>// ɍ$9Ю%w&7ժӤ)0^pcw`එ{K!eɹk߈(C3ǂ> nSny:6f=gjдʚٚ_E;Q{UaoE:U}*t+FqۜR۾| ir?'2shSϭsΝx1#}:6z N՟XʮO>:bxiJ?B鈏}_\룽2}UujmnPKMoWRPK!*.res/drawable-xhdpi-v4/ic_play_arrow_white_36dp/RIFFWEBPVP8L/GM(jR={vFd@}D0m;M~G&-q6Rkd5f54~7R!\j[$y@$@42 =d!CzÙC(SecҒ*RDY"NrONebPK}PK!*5res/drawable-xhdpi-v4/ic_mr_button_connected_09_lightRIFFWEBPVP8L// 6$Q513Q6ʷhƧq?XZc3òAROAUptSVHm5m+PϷ7=ѫ@-%k}L`H:OK=k @]1A@]Q6P6,BIIwH>I'$o*>x=d/h>̍> CPKMpPK!*<res/drawable-xhdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png sb``p  @l$2Ry9@ c-@zC/p^Okjd&&N G""&9PZ @g_[Oǐ{o#D jCRPR͢Աe\a#7&+M{d7Ǜ9:TUul,u(ow'}wK^1se eF˒ Uw.b pb}{Mb7W}ҰygNn7<8A|Yd=mɈuʣ ,+;/~wW=~>&&f][ZkMHB|^n y ldVTd a<~Oj]I/^}=]˲l/z߫lhrbP go`-(eSospXR׽Biw!1AAavI>k[TׯchY[T/S2۞5Bx0 `':~{s[3gedE<#3KG=r,zЁCZV38h"Pͼ닜u(==ddǶ脫]ZugAd=צSٹ~G~d͜K2Ъjӭ\{{Cˆ"֌t׎2_\o;lK`ˎuL4ED5ъ-"&61r9G!HA;7;ȾR޼ߑS^SFwUXr/<^E<3R}T{†\G Μfi+3V3[IaiWa"*晏y _AToVV1;.OW?uN MPKpPK!*6res/drawable-xhdpi-v4/ic_mr_button_connecting_03_lightRIFFWEBPVP8L// ɍ$9d]=r3L2ޅIY L@CQFU<YLwm?&7NV-M+n?4(SG{xQV5oB&2TV#J j/ȪS!U_+ {9j9RU{CTV N1TlĊoEPhJ}ox֊ _7B(bYwߡOH+A8sVPKO_APK!*!res/drawable-xhdpi-v4/google_play`RIFFXWEBPVP8LK/@ GDmSIfv۶-Jl;wp%%INNo g2oAd?óL믟8JgnEbOROWlO7S_IZ<r?Jbsb}M%޸" xt9:܌Ɵm.cP|7{Fց t #C`ڈa:`(i=_7đ:ED\puO8NBIw=_T`"5Hj|KhmMBL k>IT?L]-ʟ/Y.הAcS4GA5BwM/xk5da=;WW;S):R&wo>.-j7_jr_òNѱy"i:T{pRY nW~k"Y P_$pX+OUaX[<Ñr0&>b̬+j3&!@\=jyxzlvDKT⩉c37xo!XdZC=ANpzg͎kzJ:5,zS"/k F! \iU|_h%m\v8LG55OՄKl Jճ\̷8ZjYG5 0md;hDT~&Fwٴ)!S%v( b=TG-W@Pwvܽ)cy40|Y3 uia/iק)cY377WlcF `r#PQ"=ڨIG\(5=r)YXei"<xRJCRJ*PKHly'"PK!*;res/drawable-xhdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png sb``p "@,$D8y9@` qH$300+9 ,0ˠ|9 klc + =e;B̷h9e+""$k^)K46OW?uN MPK1PK!*Pres/drawable-xhdpi-v4/common_google_signin_btn_text_dark_normal_background.9.png sb``p 8 H-? HIpر ƵH$30+9 ` B@,`ˁ伀8/0bRq-š>>c"۴{#Qk86V0((Ūx&>w,8]սJYݖGg<;m|D>=c r[<4q#=\:U?֬U[J*:ωغ;>>~}~âs͑3Ko+Uջ;^?H!o2WwYlk~)ǭ}mwo]W_q˦X=ʝ]X<9ݞֶ)s}ۏTz1TW۩w=QxV!r-^Ι7?|ӳ]G'O=|z;*{nLyM_roz3fOm>W4#/!f?v)rr^*(!c 6UX!?:naGLJCF:re;4Wp~oǍ|i[oy l6Ҷmqn۷5 %SZj絾j夿?FZv֪omQ~`WUwەX'&{;Mr63J<PAֿF{VZz[Paj;}* v#~/Pq~cO59ZE?R{x%'w%['? m-l0(xsJhPK!>PK!*6res/drawable-xhdpi-v4/ic_mr_button_connecting_28_lightRIFFWEBPVP8L// Gj"IRg>z?ʶm˓&%~K[!D7O?w /Sӎ4q&L a"QP.g|\$6#p9+| ށuI@D7l4|^*-وs !çZҀ)>F:2Ei6!>4'6">U8#SaP 8ey܄WFPF3J`FLr,R!PK_*PK!*5res/drawable-xhdpi-v4/ic_mr_button_connected_23_lightRIFFWEBPVP8L // GJAT7wFsmΤgؕѮcWFV\C}9sS^du>$PH5UG|~U5Nqk\u z %Ld6zplEKnrIR &K2#s)36 g`wb˵ˋ6Z 92RDvr)Rbb(\Io1Q(fQ ]ŋzM&$buȕb')l#i,\Pՠ@ƿPK'#PK!*6res/drawable-xhdpi-v4/ic_mr_button_connecting_05_lightRIFFWEBPVP8L// GJIBWпTD;v-]J)q(RS#:gW>B0Q1 7k̂Tu E WIn 8%=8%45MжL$ߥ{fa2r-7e[2:LdpC9=- [.l38ioȉ!yD&%6u1F:)2Hc>|\.r2PK"(@H PK!*)res/drawable-xhdpi-v4/ic_checked_checkboxBRIFF:WEBPVP8L-// 58nɑ.ynf~#ֶ6rι DZ9);(64mIfIL)a\lIM{f=kkm}?ᨶmY;|2D.m#InR'=fO>z-n}TplT5aED-#–y!DT)jvB.Ó:a L(A{U3e؟'/g75@WYN&P+J J[O,hIp>snc1I${"QQ;|a-SHJ^8? q+]<tO41UVTR$wJ;^[k{U ,>)spnnFL;w7,EjXӎGy>:61/dYE4cΉ_~}U7)AK/ő'({+4"ĔYS ]Ze,KE!`.s5QKS6t5 AŎ87"@@uЪ&vn{0Aw晴Gģ񵠼61|9|p.?bGZ['Q2 <ETq0& ?.j"Tן)@sАigBNXSQ={A ~I3;gJ(dǨSHipR  U ](3fE*˦xĵ52èі=VܺU-^[6̲la /[e˂s7fI UW{-duj. }޶bmuIdqCs$p¶m$j޶,pwt &{¦ORꎲ״Kqؒ|w $6]$Ta[22O?=qBa\D5hsa"4 9Y{Nĭ3SĘI$)@*l}۷3x+u}PKPc^PK!*6res/drawable-xhdpi-v4/ic_mr_button_connecting_22_lightRIFFWEBPVP8L// GjIqMLsmv{h.o6po k#?νaxJϘJM.U61Z ӑx?lpYQDV]g@: 7{mu%Hs.ei}N+ȤG%DzGCgr0k"{ED20'RZ]-#kz%:d_YVkh@N#uPK%PK!*6res/drawable-xhdpi-v4/ic_mr_button_connecting_08_light#RIFFWEBPVP8L// pܶ$1{>#LCr<@&LnP'0XKr'|}J)*u::tF88=m Z+:7Q2䖴0#Qvk\GGjPvT"bWdN IݡK9:!I;MGR@[f;AUPKF PK!*)res/drawable-xhdpi-v4/ic_share_white_24dpzRIFFrWEBPVP8Le// 58rFfwO:@<۵*mmPkݍ`֜]J`Fg9nƑS>yy{麯AꏲjʱgX\:38:KCc0P+q5nK? (l1i88ja +ӅgxE(I_%UG \X:\HU[ T J+V34J(O¿u90B,sF͟/3ӡÔ&3Զd4 JDphn|B[ŝ'vyYaJzP(i۽c@کT9B۾:c[(iڐ'nw'@`ite[mvPk3/H73⃱h7^skgfvnPKΓPK!*4res/drawable-xhdpi-v4/quantum_ic_forward_30_white_24 RIFFWEBPVP8L// 9mV]} Ct݉ݙHJUlGFZm~۳mۖ"m{>"+yX^,/ˋ,At5_ ^mYT@PC+ͺ窲O9fj\rxPC[ 8[}q0vWoWmR?PXd4 @B;eѴePK PK!*+res/drawable-xhdpi-v4/ic_unchecked_checkboxZRIFFRWEBPVP8LF//  ɍ$9ԶIvnkkoL.Max5S#6Hν}FR$/]@Gքz7 :o58ƍX֠{b_ID gw*&:{STĿ  |. GKRߥ״Бu嶚/>"*UA#J*H[ڕVU{)78<:0_gxu~L>8ggxPK$T_ZPK!*"res/drawable-xhdpi-v4/icon_webviewJRIFFBWEBPVP8L5/_7 E+) QzMH2[;cݘÉ7m_L2_S. mk˖~G;D1 $ if PDj*Xt?Ap4 KĄ`GbYr8x T&!W@G!{᱀.qߓDŨ@Ť0"F(@%$F11F& #! IJhI%:b DP%QW"KY㟐0(>ȿ8 \QyB,-U @)lrK70бg?ɽ vW?q8[L/RoWK<*L"-Ub(Z#O|& |<2f>"%۔%!F2RdLޘʝo䉳I ޶k([34%bL.?&MdbcTA3MTo']tNzO/K A:Gk!-K(7rvzQ)05{˜¹V=W1']$]7t&qՕUf~^ـŝw${jnmȄ}p>r)ϿfPv#7A}wׅ،.:/|Ѽ5D_M FgBe05*]jmg?[ճM9Z^v/h7PԶt7 !m/$>s?U\HOxL! o)RJФF۵W]]n^x ɐ$Cҍ #=R-#wkL}w@,:N/鉮y  Qomky0'Ak6FNLwG'j s sokhHtRٜL'}D8pKy_G!9'q8 ӯSlXrSD}! ~1dGT8LC>q5oqޞťo׈LF|_PrhFo~5~ ]( s>ԐJ  ʙ ~dqI'_O :@ _C8d)@7^_~m> >~'t0Pc[k=)mcb??j!E1~{9◭ז"ٵfM+'맆OP=7F{ꍦ&/Y3@٢EɿNXYivqqB\hDzo9FJA2MD3X1L}x2%󮚻x­ϛU*2a@Oz-?{͠Ɂ@xCa~/yO/?䣇];BᅱT/+WP|-*լɱk7 :;'G/o,תR_CƂ%w R&6RCj1Xs_oA  |mpݻcǭt s_ͻ .ݭ 3jͷG`rNj$$ b͏P@Ծp5\{M쫥hzO_:hiõa[D> i5w[,My(NI,uV1b^xxkw? އN~bwV0܀7frQaƭ3i!-$0ل줭KA&u)Tw~~?0yuJXᢂiqY@P d0sGǝ;neu|o)%ʼnQ=3/e" '  :༇X.W<}=5')l??Ti#Te"4{tòaVL U{ܪ\~wy*u }<>e'J^,&,XH=&Ef'5a~90UAӁqDEu\0(j#6D L' XLG{Â^w-mKU?Tղ0f $!PTB0yTL}/$ mMc/RQaFt9g7R EhW9bv` 7"+VnZ#=裡*qўZ4C:mB.Vo k=&G96MBB$&&H] o:jkqM͙W2Sɺ.}{V?X2#z _kDQ4;4z;݀ft;,&чKQ@S#m(pt --53 N r$!^|X8#c]!@KHb֦](gتu  LdZ RQt`'aYhY[wtuU&a(i9X~n^x15el5Q^&,҈CcdK)F=9%QWMEeOU^E|G[& )-][~+0,Ԧԝt\<o<78gQe`ܷvhHis4mc:>ם!01Www =h$˝/A]I4iCcƉh2G Ʒ,]IhDmt?埳#%L(mҏ'^( EhoN nZK"&r … c:~/`] 3Gf@v*/7́pX1Y' teF$Сnu¡Q綗n_uB"&â7o+JZY]E($8w4EIr=;lPK#*OJPK!*4res/drawable-xhdpi-v4/ic_mr_button_connected_11_darkRIFFWEBPVP8L// qh7ntSgD SX Ⱦ3 荷n4{ҷazH Pn0,^կ]E-7i5f O10zg9]q%P p\]Y5|@bRk"ZP% 8I-V2:Z(1Z9$/J` |-=ג PKPK!*4res/drawable-xhdpi-v4/ic_mr_button_connected_01_darkRIFFWEBPVP8L// $IEO;V# WԒE5m?\23GN|5*t ;]#wAM -"aJm,;GS^7@(2ێQ,ΰ3x)hvb gPY#*;m N塊Xx:"{ |ĘdGQW}&2Yu>?2^bfb]PK SIPK!*5res/drawable-xhdpi-v4/ic_mr_button_connecting_03_darkRIFFWEBPVP8L// 6I\QY;'w0 & #1pHQ[?\A}E HE6VBvؗ]M-qEBx*wrz3H:&£]b@4mE݈u1 ( D)hDn9"f/iD1]r!g}lcw rM=g`P=קPd7G%ĬSK_5PK\0jYPK!*)res/drawable-xhdpi-v4/ic_vol_type_tv_dark}RIFFzWEBPVP8Lm// F"mI 0#XGry{L@ %ьV.ȈFD4s'e- 8qxpù+kz c7dae_+=PKϝPK!*4res/drawable-xhdpi-v4/ic_mr_button_connected_26_dark&RIFFWEBPVP8L// $$IO GUD/34f7RjCBKp۶;CrjL]Jh)PLE6Vtae9Kۣ`np0p4JASB+tca2.j$ѬT[iѝ]]P&(T\lbbչ~xސRD|QoLɺ sW0%>)ל}~TuNP:;k?ⴞN\DeDi!ڀ_`0WC8o1|fq_PK +&PK!*res/drawable-xhdpi-v4/star_graybPNG  IHDR sdIDATx^ӱKBQg58):: Qjrpqstu)P\jwJp7GwP8+֋C{zzw3C9 ^FXY$6@U6 ` E cTHx[> Zj=@ږw:@G %,H-v@Z@/@; Xz;YXhV8ZaEUhѓ豴<,/X>\dD[O 8U 6! 48hc>OgTZO$Io|>ܢf˷#/S8&ID WH/t+إDҟ_ @0;IENDB`PKȵtPK!**res/drawable-xhdpi-v4/ic_dialog_close_darkSRIFFWEBPVP8L// 5nFz-<u/m۶Iŭc# AtĀ#bl –$(+S !9UQX)mbm =]d$/VqK2.[q'lKW,?I6=3>PKu PK!*(res/drawable-xhdpi-v4/infobar_shadow_top ts3```wu  Q0 twp rRE&\zPKzd:8PK!*8res/drawable-xhdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png sb``p  $ooRy9 X3~fJ BXBq1'b~ bFA]֞.!ǓS6$8` 1 aaiۉ+yxx'\iX՘Aj3L ;<]\9%4PKع禬PK!**res/drawable-xhdpi-v4/audio_playing_squareRIFFWEBPVP8L/?DɶM}γb۶m۶m;kTQ6z&\j?1<1=o>1 OvdTFGeRwG9ػƣќ~3bђ."(5.{xlЬqi BbwC(x5M V~EYUaMoJNŸ dt;;avNQ *U<|q *w|WqoonyVhg#ZRH蚀ۼ,1w vnԯ\Ss꣝8Cu1 oI>$^ Rg qdTBfBⲠt""$shDcBE DHۏ!#KL1_1>`b=+c侢#/-ċn`#ɽЯkaҼx&y ۯ2Q{Wen箯?Mϻ؜ww39 /noz] yly'eȻe˻>/G5Y稼{"O~ ~%~-~5m2G=~}W6ﻄw ~=}7Lw:}}.~ݍ ,njIPKJPK!*7res/drawable-xhdpi-v4/quantum_ic_skip_previous_white_24 ts`3?-`#WOֻLaַsOߒUŖC,POdOnN VLx$pIJbUE`$$Zrk~w&=vˠ<+g_^>7:W&9b[ ߝPKr7PK!*(res/drawable-xhdpi-v4/ic_stop_white_36dp tsSc``wu   \ުyҳz&ԽPK0.PK!*5res/drawable-xhdpi-v4/ic_mr_button_connected_24_light(RIFF WEBPVP8L// GJ#IaIdpk&=8q2dg?;U#??W[uMta<01OrZ~Mlj9a7|VۓPl%l`m()۶bu AݎՑajA+H 6:{)˽J#y;hJکpR3ɡw$U)Kr CU-~ ceib՝Դ˻|\%3y)HGtǞ4;'=)!9 g _PKb -(PK!*)res/drawable-xhdpi-v4/ic_pause_white_24dp tsb``wu  p jdf{Կk=Ëw_νrZ3نPK-a42PK!*'res/drawable-xhdpi-v4/ic_mr_button_grey\RIFFTWEBPVP8LH// @rɑԟ=r 3P- l{km55;#l_kQm&P،H^l&rdlӅ/8dzЃ:;Ul`VA 8= =1 ]T(~ުޗTP K+s*,*M(a"bfF/qcחPPKa\PK!*5res/drawable-xhdpi-v4/ic_mr_button_connected_29_light RIFFWEBPVP8L // GjI 4\۶:TՎ7 ˋrh~wN}C U^t r7aP*T9V G;g̝qcS/ˤ 8QPKmF.Kgv̤"$RCl亄\&SUb*R!FsI5&24Ɨj$$25RXC.jTtD63% 6,\_LP0 'Ikϫ*Z-h_PK&R% PK!*+res/drawable-xhdpi-v4/ic_refresh_white_24dpwRIFFWEBPVP8Lt// 㶑iOk/mǣضS9M0Yk#\CLkO7S=q[6Jz|X?Dd$QTtcWB+iigfBnN L]l rz qAB-nYoHaXOƈ!5B~ɕdkiF y&lGc9x l;@#Ľ`DoG3\z x|$,2"lhDzN2HО |3mV)'!ȾT95r$lx6^Cx{p1 S_ygIgBnVC$|qH"%#Z%VPvԊ%?PKֻPK!*6res/drawable-xhdpi-v4/ic_mr_button_connecting_24_lightRIFFWEBPVP8L// Gj a4m Pm{QIUQ>;/1* 1*JȣtN~u[eMw#‹=rCO,#v4~k44G8hHh_PK4BFPK!*5res/drawable-xhdpi-v4/ic_mr_button_connected_01_lightRIFFWEBPVP8L// GjI`*>XRڶُE\*$d^[:;I)OkK\J4a(oAN?|9EE, (]t L^4MJ̀uS4)=r1W3r`MnPh6aN &uzTy(fp?%u^ĺ680 4ϥjƦ?s9UT>"d5IBBBпPK!iPK!*5res/drawable-xhdpi-v4/ic_mr_button_connecting_04_dark RIFFWEBPVP8L// Hm7n҈I58oA$q*W|C7}K^%&e'/}, Vw`u//~QuSOKDds  d_OWԨ :䨓kh\RQmQ-HZ8$ڏ]r NTz?PP{&?sF435/@D PKL PK!*5res/drawable-xhdpi-v4/quantum_ic_skip_next_grey600_36+RIFFWEBPVP8L/Gm$9R߹{Y8Euc@H4"v/ }@?<@0[%^h۶ }@<Hż2fĦŮUlJbzaŦVL+KBP *F"'^1+p#D<#I#L/TP?ŴH#}.^ʾ#=Vp/c\pB PKX)PK!*res/drawable-xhdpi-v4/ic_chromeBRIFF:WEBPVP8L.// HrI3qꫡ^|2Rwo۶9ٶoz۶m۞l۶mf %_U>;'U}8yˎDك\>K& LٮT,Ru-[Α͒Efy69E^SZd ߾8"(WTwS sᨻ-A?0p ^oXu{QB^I^`pRi3nw"l鿧[xZv0xWTE/p] Rɨ O,,T&Rmua白Y&j؜/ V4+W`jv4?{BfDK5n\;J-z,<@vRbJzhݖV0y/uB$F3H' H?16~JR]lu)B-(笼S1*i8gxgWUf!&p+rSRb=?7s&|C=$![v%-zi@57PKEGBPK!*+res/drawable-xhdpi-v4/permission_javascriptQRIFFWEBPVP8L// 8n$I|n=Yg"Gr@$nYGIw&;2/V=/==II*[ke!H9R,EŔ#]FbbbZk@Fyje/7OI`Auoü%C i!rтbgX$Ԟi")N.-buZu{:ЪXLj['Z>PKmڞ}xPK!*>res/drawable-xhdpi-v4/abc_scrubber_control_to_pressed_mtrl_0054RIFF,WEBPVP8L/# mۆww[ $qIC[N8 d֨Xz$]&pwoFR\a&ґ9arOfaV<T~AA8Rȸ0\"Y}ޣQF9J`R kXr5@BS5=@JFܼF߫F Tv08vm3Dف|=t|:YIz4ljhMAO!B !x":3- Ke֜]b7(qPKօw94PK!*5res/drawable-xhdpi-v4/ic_mr_button_connected_13_lightRIFF WEBPVP8L// G#IJ"p 8m;qXll G(X*%?ƼqD'@E`~"ҥV㥸$R{HV܊q]iX뱤bR꩔?Lr'LDNM ̔PWPJOE(&=D`nɤ7pPJX uCm  8Ǐ~Z fwԁ\<g)rx5TC|`Ȳ#23|Ob-2%i:PK.a=PK!*6res/drawable-xhdpi-v4/abc_text_select_handle_left_mtrl!RIFFWEBPVP8L/W q'br??cW R`ly@u!IQxB%2!B!$"\ 3t (aPۅ"u]&tLRQIU])XK,ib}VAX`e+)x)hQR W tA+jWS\ʷ EY_ZTyǦ vҚ*e,v`fUHPK;PK!*res/drawable-xhdpi-v4/amp_iconwRIFFWEBPVP8Lt/#@r$qO!){Aޛ!l۶6m46ok4abb [Rt,#kOQ@;6tv?ȑ=$dNDjnAOU!"|Zz4D08A+Rijp=$$C cDҁ;z"RoSǵwFqlɋry߆?iSbőZ& d1=5⟴b9KԠ0/^T򑄎 G*f.gR%R`(iG%{.aRfx0V,fK|yP7V{;5d_׊op&2U PKePK!*6res/drawable-xhdpi-v4/ic_mr_button_connecting_17_lightRIFFWEBPVP8L// 6$Q=13Q6ʷTFfH̡)?(Kb3Ik I|'󉈠{8:TEmm6ҫ_ߛs'x@oD4KN-5hwt* +>/HeCG]!U`H&KTT.(=XwI($/p$ sj0%"" PK PK!*5res/drawable-xhdpi-v4/ic_mr_button_connecting_07_darkRIFFWEBPVP8L//  HnIj3f=:B?6DvXP@ZR)kK@ډVבզaw7|:IuSnRrvrזKέGW(tH_=BC|bſl8rD~!\R {pʔ$bn CL,{>Ô@1B`*IbA?C*$·s9̿!PKyPK!*/res/drawable-xhdpi-v4/ic_vol_type_speaker_lightdRIFF\WEBPVP8LP// uHrI4순0o\wss#cؚn 0ǨA\kۘ{M45{kMMgͲbWP={8oq`8owh?RQFv)?Q :Nݒyb^E`|L(&= jZ? 9ڴ"R#vV"s` 1B(,tq\_LsIcc6ɦ )=(fmIƁ ˢ4Ȯ9U[mP \:)Pdj2BUx9U%mS[.TU*Y١V+ܪb`UE|AWjo꧜u{\ۆařCPKO\@PK!*3res/drawable-xhdpi-v4/quantum_ic_replay_30_white_36RIFFWEBPVP8L/GFIJ!E+Bmm[Am;ݙmS۶mqr>HR$9{P'1c )S0`L1c )!qJ .J\WB$Zq pA`^JC-%n~`nߏB]A3udqO$-sIMr|21`C+!{'n+,c(.cTH'Zq;Lp1/Zp:@T2՛XAcO"p)# @&_=$ـXE\;_7QӬV ^s<|)utO_9Y4xxb p(SP0`0gt ;,~Zu=ؕ*D|l 12x .mPO[!"nlvRѺc-r35;R7.S(Rr9WeseNu6g~e*CJnSx2"ݫfb_z ΣO+M?6î2؛LOn7-MJm+Fqc`|q]J`(Nca*PK21`PK!*0res/drawable-xhdpi-v4/quantum_ic_replay_white_24lRIFFdWEBPVP8LW// FIӡ,ͻ'bjۖ'N|d 'unumHIwoc䧆ռB^ y!/^ZW*Cx!Eą JSe] NdL)N$lEKh:>tXO}x,\J5y^Y@"z7`* `:8dW-D*+cHyգxnZbA`܏o]ytgb.lI>p&2~/ di)q)oVDĬN E \03K, _"oM# I*%g(qPKZPK`PK!*4res/drawable-xhdpi-v4/ic_mr_button_connected_30_darkRIFFWEBPVP8L// 6I\QYU'f+$ڨ&r۶tߝs$X5Y_뾱M膕ۑ؏av}? tVTjo0J4R,[Kn56v#i_EvAK jY4;ޢۇ&EcbS4i[vCi1čο35NL`*7[g!ޠ͏ $;D i}~gk 7]PK˧+PK!*+res/drawable-xhdpi-v4/ic_dialog_close_lightYRIFFWEBPVP8L//  I?!Vx/m#G˿$%@.9(pF}F[٣B:,g,Rp)$W}$\g~^ƹ=iszzyeS)PK~PK!*#res/drawable-xhdpi-v4/audio_playingRIFFWEBPVP8L// $9:ew%?7Mj۞٘>D~\;SKmGb%?|~B`  ȜTvĺSX OZ/X3i'>Rxozl +;ӣO ]xymT+Ɠ| Ud^ˢ +Oe}|Vo1=Hm'<9&M'uAz[G:yyy_#qj>~PKW!PK!*/res/drawable-xhdpi-v4/infobar_shadow_left.9.png sb``p @,$K)v 5 &M^AH2 L@, Č09r ]quR ۇS7ŵW/ ?0싒'gٖuܛ. Ea_e)UK_eNb(+vSD 'SyB^,Ii{iȅ~.PKYPK!*4res/drawable-xhdpi-v4/ic_mr_button_connected_29_darkRIFFWEBPVP8L// $$IO{&# WmTJ9$mcw?<r(W PrK/:6VܧoXَLkc]H68ft5x8@8^2wDʛmT,a7\W&B..;wYAaCK#}%8h)A-ͣa(ͻi1'2 g OX0x>}iаZSvG,A|YPKnPK!*5res/drawable-xhdpi-v4/ic_mr_button_connected_25_light RIFFWEBPVP8L // GJ`*7l0ڶ_E5HdvEgo _p{SpHm0 Ȕ(egnyReF`|`6xvLЃpvtLmz[Ioжp"̬0)F,D;jZ bH hY6z~)u)^-Չ$(PGKrYa[lԻ&uYb;-%.21b"${%kO3#BKЅRJ܄PK$% PK!*6res/drawable-xhdpi-v4/abc_list_pressed_holo_dark.9.png sb``p < $LRy 8\@*$ $SBgΜ!6tq l@A&~F݈~ =]\9%4PKTzPK!*6res/drawable-xhdpi-v4/ic_mr_button_connecting_09_lightRIFFWEBPVP8L// 6$Q513Q6ʷhƧq?XZc3òAROAUptSVHm5m+PϷ7=ѫ@-%k}L`H:OK=k @]1A@]Q6P6,BIIwH>I'$o*>x=d/h>̍> CPKMpPK!*res/drawable-xhdpi-v4/web_assetfRIFF^WEBPVP8LQ// 5(j$I9e#,|2 A۶w /J^>N}Bh˚R>ߩ;HPK0@RkfPK!*5res/drawable-xhdpi-v4/ic_mr_button_connecting_20_darkRIFFWEBPVP8L// qIWQ3S*#$9sqy ?T+~Ȕws]"&m@ĿCw7z9R:SѬ*BW>8@Xujr]٨{ʶzO[6jq4P9C\< :ܱzrq =:bυkE4m%̇ m[g`o̔@w7@PK&PK!*4res/drawable-xhdpi-v4/ic_mr_button_connected_22_darkRIFFWEBPVP8L// @r`nsSsA9rD>0 8LIʛCm-V.Rٟ$'IVGO8w֯Q4: 2NalzAeS;cHMu_kS26+@] v0 @mI\($E"j44@~]1`ivqJo.vHJln!qfnH.dkpCP|AOJ|/=PK4(!PK!*(res/drawable-xhdpi-v4/ic_media_stop_dark tsb``wu   Ƚ{Q\JPPKv42PK!*?res/drawable-xhdpi-v4/quantum_ic_pause_circle_filled_grey600_369RIFFWEBPVP8L/GU@rH/8ة~ NJc׾0+Cݯw_IĦ uqޏ0cڢ-z%R^*O6e7&&d:'}krKHݧ6 6f@'K[6W& K3B׸Ja$wJB/ iE&ӂH>wYvɴ6h44g :=Ѯ/:G.h˭pCsAcA{Yy ^ bA&ugX={+PKɖ>PK!*6res/drawable-xhdpi-v4/ic_mr_button_connecting_11_lightRIFFWEBPVP8L// pܶ$1]3pr[FD2q, U,mhoB3'13SUT*m6@m "N EDV'5;K$3doAXdX| ~G oHZ"[#r`If p$̃+PbDĸxC @ȅgB# \gdɫd3333' PK=KsPK!*Qres/drawable-xhdpi-v4/common_google_signin_btn_icon_light_normal_background.9.png sb``p  $=& $ s8 dt?lZ$3H*9 ` bb@X$@:v/Htq mmӽ\|üI;>3ӌ9Ya:y\VH2ahꪴ9@C]6y+jy,awM%s{yʮ^ɟ8-Йm ?I;ޯ틯kyy 3>}yk잳d+IٵS9rw:KY)V`ۿk28ڎ=ꜶC{l[8>Tbrʖ xr5m7rcUk-81^/x#EIsBtmң:&PKI3WPK!*5res/drawable-xhdpi-v4/ic_mr_button_connecting_19_darkRIFFWEBPVP8L// $I@[HkҬK Ӑ|gSJI& ?4:6>R{L9氝xʤ}*R9vL;5Y!3;$j8uj ]}ҲP}V;zgv+@l>om{u_ׄy^*JJuоmo`zFa^@|KdC C PK\, PK!*6res/drawable-xhdpi-v4/ic_mr_button_connecting_02_lightRIFFWEBPVP8L// GJIg(-l,yIF6DFݾѭv Rȴ + 9l8YJ>3+I:3n$&\K>0C j+Im(!R3T\1\,K}F_霚E1PHYBm"mǣ#!Q%*cԥ/Ͼ<m kDMRZQإ嚶C 9p_PKՐPPK!*/res/drawable-xhdpi-v4/quantum_ic_pause_white_24 tsb``wu  p jdf{Կk=Ëw_νrZ3نPK-a42PK!*(res/drawable-xhdpi-v4/settings_all_sites tsa``wu  1p jdIYUe  tN.B~Vq꬚PKA5GDPK!*5res/drawable-xhdpi-v4/ic_mr_button_connected_22_lightRIFFWEBPVP8L // m$9z# Psp™˘PRضmȥ^^/pmoHWb!ng%UmwFnxum P]& k^.ijb'RN!(|LFN @9UJx^!VcY @xnnXIà=Bڊ54rP*#UR=OrE Li~8+M%P*TؔA/9 @" PK%#PK!*%res/drawable-xhdpi-v4/btn_delete_24dpXRIFFPWEBPVP8LC// m#9O{ou3Uy$o"/@ UN6P% '`dYްtXw93PI8C¡C9B.d,_ `j[+ גss,b$cbd#%!(A{ JD^DfëL8/JD]F%8,Th!#&Ԁ%^ kuA((X\!`z}u@TɩB)OJ!'qxqސG6<:_gX{ut>g;8mPK=;]XPK!*5res/drawable-xhdpi-v4/ic_mr_button_connected_14_lightRIFFWEBPVP8L// pܶ$1{>#LCrO#lr&DnUNUqI$HP%"^$;H$9SA)H-H-D 3ب YN,Xk5H: @<VQ%:lpZ@|CٰViO0pUTgh5I*7bGH6XC%5pw U -PK*PK!*5res/drawable-xhdpi-v4/ic_mr_button_connecting_10_darkRIFFWEBPVP8L// m7n^Hi5k qD LC|ǷI6v1N}7ߡJ[s<?T;1 wh! cWcgYfiL 줤Y: JRL-h|ͱ T65R |{%$DB Kl⫰*t&g!LIH*>w(>)n HɆ[GXTSPK# PK!*1res/drawable-xhdpi-v4/abc_list_focused_holo.9.png sb``p < $Jc),`& ذH$301q*9X@( 3>E@1Ft1M'An0tq 8lrW3gCgC5NđmF7IJJHA}vU]‘^Wg:v_)ݞ~.PKV9⽣PK!*,res/drawable-xhdpi-v4/top_round_shadow.9.pngPNG  IHDRx@{D{npOl66 iA&ѦHnpTc (0;<?@)QIDAThms0 O>݇6m^lL7S2M !]ɲME~wc |Wg?i']Tql?l<]<~706?8<.b+X.noC.ܽhi-}`Qyd`-\ E9;i݀sXX)vg3\/5p54^PE\Y݄{ڑ.G@ƶW ^Ƶ}ݪS%-"2Vj Ǡ2q#[W/ʢ"[ ѮE_{5|ѯ=å- {~yQ?! 0`ڟ6;1.{ΐ÷پ7ۻdkȱ²;n -XX[KØP =cjٙz׸cp"r:KaGz͔"%HUnщ9蚦rûmIq:܎W[ɭ4QFDpszfmZA_L WQU, :k[﬐hWyS~-=66BasCr.zP+yf7W㊢|q[q jͽ 5!Í0O~{%9xɸYf{Ul@^MGѫ߿z BkΝWOomLI7"SaE+.f$0uL]i 0Wݱ3hGQ&{mUi8KgdS>wl>uк<f6ERny$6eIqy`-ތg/ #Kќ=(u &[hh̹ y.[Hq.d/,7G|AL$eq#¨(s}뗅n5 h/ RNs1%c~')W27\z☭v '\]6`JD# X+v9ٷr*A#qm  }9=F>E>ܝ``YF*k\-ٛJ9 ᗰ'yٯ&~YwOˊ"R'„9l=qG8-ro0(poOP+@>6G\/)2!@9o[n,q ݒkؕOwܐ L"9gGNk(\N$Ti*݄M%u(֫8 txjDԙÆ'y'<31ӷ2$86`.ˆ[(N !($e|I1NVP!~zƩy}D{5 Nȫ.x*l2Y*z4 x~t.ax7+O; IzTaM+7"EQbg5wGJ^+!Zraxq͖l}Kzlż" 7Kǯ 'wa - h8fl.iԶNYɽJ'ܩƁc[ռg ΃1snN~R N?`i6b ā|ڷ2_9cɳAGDL Ϡ&|,ˣqFI#!өtu+{a?^^SoMgϞgX"E6cbJ݊~D(x}}#*X@^.8>9N;:dK^Zl_3ͯ_Qm's)rؐ nAϋҼ6 R#%r } ]? 6TYx! 3cBu4 ͪv4j$-= Ԇ |kyb*'ڦ{rd2}՚(*DmC/aqC]cpWR TOscxj(/0|F E ‰rDgxc f>-%Vz_QTfeH~1rIu #匭Ή&G gKs2׭,(qEKEay\sˎBsZ榷 )*LY9CL Aʦ;\!\N &T^AfmJ=E] XC׍21@.rG.Qb嗒"Av%u# ǃ*bo/D-Y "uլgr[{" t<0a5xSZeh E g֚6fзuz" 40CvkkS /6L~SJG|?PK?z0PK!*.res/drawable-xhdpi-v4/quantum_ic_cast_white_36RIFFWEBPVP8L/G5HrIً'29D@`4{H?6uml۶gˑ6${{vCGU]trLw.;*XBUZba&=b_ BM(vȫ&e6VȰ.r,\LbkT i*R Z &2tD=l={vökXs'ӐsafJ.d%X9,ēo2cQPG!(ZϷk\)󣽦UI9\F~ӆ㹥=N=?Ms^^v\aGӎ1МM4+kYlh<;]g'$&qF2:<~i3y"/exyuvt1_`>(Wx6pC7]y\A$[Fy[PKgtMPK!*(res/drawable-xhdpi-v4/ic_audiotrack_darkcRIFFWEBPVP8L// Ҷi{vPڶQF, u+إ 2"yx]Kb1pjj?Gv]xW؅P2lYg){qF (Oq˞9 F|%JBOZPK}>PK!*"res/drawable-xhdpi-v4/webrtc_audio4RIFF,WEBPVP8L// u@$Q4bC\۶W_l'(kC#eil ȿ;5?V31hMF)yh$wOf ~} vYÄ^8'齿\h;|%gpR$wZPV4C<9A:IWl'W+6{3,(XMN0 -$zN aT[=mH}g\9>[f٫=y4qureB)7+4cmK ZPKkv94PK!*Cres/drawable-xhdpi-v4/cast_abc_scrubber_control_to_pressed_mtrl_0001RIFFWEBPVP8L/@жm̟?g8&00; 28~Qඍ3`(yl^H8@сJ ޅ/xQ)'Hğy0@@j]E.-IpD!Gq8vV9҇Tt}O/ Qe$~[;^EFb1:A{>'/ Ti\z -7~|,LН 3PKhPK!*)res/drawable-xhdpi-v4/ic_pause_white_36dp ts```wu   rwᬩ.gxYZNPK yY20PK!*0res/drawable-xhdpi-v4/permission_background_synceRIFFWEBPVP8L// @$I][w t]b7ims3MÂ12NN(u{hamjn#)jf?: %^4KI0ZVC0vtTf5޸uHt>ƾuZpth;i8J8V9W[qk_] `@E:rGU jU է (W }zPW5} T{]KVݧ۷;ڹ'w.Z` ЦlKzвiOei $>`bl5񢏄2 '+,dfD'V݃eҐR6g`uf̞|.\9+6}+őG=n:,m^5l#8i6+mz~ڦ`%6 6ũFPHn/ș_<((-# {PK&PK!*8res/drawable-xhdpi-v4/quantum_ic_cast_connected_white_24iRIFFWEBPVP8L// Hm[Uxz/⊻' (f64{k6l>`du۾f۬}P80C{Z|kb<)^lz#l9K3zE@wkv $Xefb*(&7u.[fǬ#l"j/*|>fPUWh_\0M Z rYSʀxPUgըb*1**Ly@!=G_wɊuUO[gX*z!Jߊ֊6<*|*ʊwP#~Bc{knDxjA LJ[ѿ8[QUL+OwJŹ `M[}RVθWPKibPK!*0res/drawable-xhdpi-v4/ic_mr_button_disabled_darkRIFFWEBPVP8L// uȒdn$$Bvʎ\v!T}_am#{K2"|j1,bTⳁA595uVZ7ÏNOs?Xd_tOASyHww"Iփڊ4v-ց]XGm: ±Jr 16rAAWXd+Gh&ܯtXIs~!5oz( ξAs;XQLN7j(rg.Ÿ;|Z8ܡ.BЙ;2nJA$l!*(zӝ$Uq!yF`xJw. t xU'tG$$G?no)E / ;?u>GXqvRk#T>K?5-ixO,C?5wtN7쿘PKj_zPK!*5res/drawable-xhdpi-v4/abc_list_longpressed_holo.9.png sb``p < $Jc), [5kd&&N GZ0 3IBZIO)3*0s6t6J\ r5tOW?uN MPKPK!*5res/drawable-xhdpi-v4/abc_spinner_mtrl_am_alpha.9.png sb``p *@l$/ Ry9@0 8⹓'d&6 G`  0{ٌ.!Nٟd(^o7? +*sjY!L<EJwYw\#h֏76cOENKYna`۩btA7df.R=hݦm \doWWq\2 ˤS*2p-bgynV/u3:u߳I_/c0|?(h<]\9%4PK> ڇPK!*Ares/drawable-xhdpi-v4/abc_list_selector_disabled_holo_light.9.png sb``p 2@$)(`d@y ^u,HC^AH2 ? @hCHy8D~{ڐypNzݕB"ptt?cO-tsYPKE0PK!*5res/drawable-xhdpi-v4/ic_mr_button_connecting_16_darkRIFFWEBPVP8L// u@$9nW%ؘBD f$I ( s> s" F*]Ȗ5)EخAW+^H=Q2p}.pu{EKTm}\p6mNʼn Ed+eW!; v b tcgwRs&^W+ \[ΛA;kX<%ݲH]]7cH@9ȕ$Uxa]ܜ>+AeSBPKۡ(PK!*5res/drawable-xhdpi-v4/ic_mr_button_connected_15_lightRIFFWEBPVP8L// F#]b305%k( ( 7\$IFOsqDD48g8ۀbT- QFU[A %:qw/Z, et` څb w 3yU jOoAr5J ^QUܑ @ }8aUU|G]R ""4PK@PK!*9res/drawable-xhdpi-v4/quantum_ic_skip_previous_grey600_36#RIFFWEBPVP8L/G5m#ɑfzOGMJw0PӉ5* *(`bM'$#r7{X"T :?$4 w$΄ .|*7$p`e_4f$Xps$u~H i4H (UmjtZMTB_ٛ+fi;bvĹb5U*6{Hb|_Ħd*fwPK[YPK!*8res/drawable-xhdpi-v4/cast_ic_stop_circle_filled_grey6001RIFFWEBPVP8L/_UȒm"'}ό^/OBjۛ $SXqۊb 0 LesF"E,㩠~~Ko#xӯk-kcx4q'hߌ_&\t5wAva%7s꺟qdB>v'!\'پdXϓܫݙyJܝkz"{gSf[GPsP\k-}y |!пux]U9|!\ h3݇,<qžh4ӾgqIxMha=ΠQ.CG D  Œeo9xˇ㚟y!k|:~_.ß+b?Us!\ ?sQ\?{^g/2sA qPKy>fPK!*/res/drawable-xhdpi-v4/quantum_ic_clear_white_24SRIFFWEBPVP8L// 5nFz-<u/m۶Iŭc# AtĀ#bl –$(+S !9UQX)mbm =]d$/VqK2.[q'lKW,?I6=3>PKu PK!*6res/drawable-xhdpi-v4/ic_mr_button_connecting_01_lightRIFFWEBPVP8L// GjI`*>XRڶُE\*$d^[:;I)OkK\J4a(oAN?|9EE, (]t L^4MJ̀uS4)=r1W3r`MnPh6aN &uzTy(fp?%u^ĺ680 4ϥjƦ?s9UT>"d5IBBBпPK!iPK!*6res/drawable-xhdpi-v4/ic_mr_button_connecting_20_lightRIFFWEBPVP8L// pܶ$1]=3=!Y'LNI7*YgWaYl7T4"";k4qtt^7hm?`T@[hdwF ^m .H+uЃہhtHA,Ij6(đtԠWHED'%iذ$!{Bx{B@D$7PKxPK!*,res/drawable-xhdpi-v4/cast_ic_notification_0RIFFWEBPVP8L// u@$Q?hb-T H۶ɶumEе ڠ1z8;iJytAT1!Vȁ0`{P,P(٧#f^Ep*UNcD1!V8TD378:DJhݕfENH9TTu PdVXpTb(0ۢ\)~zR( ы-V!+U/J8 RVHʲPKTx PK!*5res/drawable-xhdpi-v4/ic_mr_button_connecting_00_darkRIFFWEBPVP8L// F$ew:ea&#V"mGzoCB1_ gJa⋒a *;.0A%T${Ҽ#I 5F2 \΂4mè ;R\lytAy k(sGV2ypB`Q 'n.pd0oQte|?O"/"twO=Z;ȓPKIPK!*4res/drawable-xhdpi-v4/quantum_ic_forward_10_white_243RIFFWEBPVP8L// I$)W@1٤#A۶m<ۨ+6gs mۮmGK돍CӇM>4}h(˴M(tykȤFbsGFU9PƉ5g%P9u!a^yuJ:]Y纪/}٧*eSqHVC.n:3cRz j^=y-`XEG{++k;%?{R=1]ʢ]7UUi;&T9Ú~Ow~WV{ ܉uTN^DvVi=վWuCOu&J/J:|}ȆLC,-UN6֏gSӵ0 9RC̣qH·\'bh] b_G|*گڽYZgt8 Wooo+ PKj6PK!*5res/drawable-xhdpi-v4/ic_mr_button_connecting_09_dark RIFFWEBPVP8L// HR`Z +2d<IһigJ\4njc~>αuV^*IB~O$TߣTmlPnO4&'4dL7VkI&0 ut6uIVл$UZ\"HXh19XwQh0df\IeAzf*I@/ #ש Ԁq:oH*`>W}X'3 ]PK\bPK!*+res/anim-v21/mtrl_bottom_sheet_slide_in.xmluN0q8!"DRF02*100fAh1{7&v< |V%D墟se" r.- 8 n#xqGl{<kwk{חx9g [z͌^jmu^zήꝰv PKM2+hPK!*.res/anim-v21/design_bottom_sheet_slide_out.xmluN0q8!@ C#@XaDq䘽;D^?CCTt$(m FtEs7' Mo,W~U5ۤzs~Z^/o_Jo׫1l53zf,.*ߙzήvPKy)hPK!*-res/anim-v21/design_bottom_sheet_slide_in.xmluN0q8!RA"6`dUb```jđcnLQx ~-Qӝs#btH_DE.b18߀;Atf(MBZBUEZHF2 >չ 0jYtRFܘ,IixDΚ=yX-O?̙# c65Fz#\=l@15Z)[6xy{סJsܽ 3z?E;;jwPK5*hPK!*0res/anim-v21/fragment_fast_out_extra_slow_in.xmluPKn0c`.`5B Eݖ 8 $J|ޡm<DU407f@ܐ{ |zFۘb2y.5&6mi"kD.80ޗ<;:n8WMgUY/*SK]mBR]-?vAC5G[1hy;WPK19lPK!*,res/anim-v21/mtrl_bottom_sheet_slide_out.xmluN@g8$33v&WBsvXuV% 9ge&?c"btDDC&5u1 j<icULhI ʂ|A*δ)=֗Yr]-qQD)F4'ZaX84+| U\Ƕ]ZU ky{> 6wE~PXf?亇M(`YcM7=im;jgzxˌџZssC/{v'PKV:p(hPK!*6res/animator-v21/design_appbar_state_list_animator.xml1O@NIHRCHH` &H%*Nز/HH eb``R!6 zO޽wЅG53/T#8G`2p ~Kn!évDDN*f׈ \|OsJf9;,O3˓O<0YqD˳ V1e`,eh,^li(MB} sQlLicqgh6XÉɽYp(#5%#p<:czOߞ}=@lz%3G}=tԹWUlN#]cT~ U-Gt^έo5L3k&4ݫgj5>Eҽ{܁ z}-Жvu]f}[7PKxsTPK!*.res/color/abc_secondary_text_material_dark.xmluPn0=7N$ L^:~R7$@M|Fn>b7#Z߇$.0k/cĜ1o-s8N;nzWIUEU#M1CrU)M'VYU*}P3RZSq!ƙd DDs7FQ0# OƳ8 -v+#rr%hEC6.1عmLl6nZ`N}p5rE`!$ /9.30*22ޯyt'ˉ'$zT]NZ{MF-?*1x`LzLd7f{?PK/K[PK!*!res/color/abc_tint_seek_thumb.xmlPJ@}M.8P Xk$kog'Sln1>x };of\A0'̔y\3(R)*oVݕ:g=˺AmԛB(c\֚K)۬ЕjWyՕT^6=UF}0X]!IZ]r0̹Jx+} u]ǹ@wp7wwp['=pLvCY B]E3|_mzOPK8\PK!*-res/color/material_on_background_disabled.xmluP10CW DCE  `KHH |oW&H5{w[A*`; h'pIwD!ׂ:ΰ"vp3{+WLtOZp %3ҨGO*(MwNU*7(וnjJIq,E7-1muyj٭*u&U]a1$5FCNJ3 fE*G@r۲'|Yq{f:Ow5h̽k>1о0p3,k,,ܷ6Dn0q/qN'2x1~o?[_PK{Y[%PK!*(res/color/mtrl_btn_bg_color_selector.xmlPAJ0Im7vBpbw6aiiro \EAIR<^xy|A)}1QB%x:̃ڔE[=T])ImIy^9]+e4nŦhU!,֙ԚA_/3r|)#?ll8`B&g"^uz}\ yW3cGO>߄.1A+_PKk*PK!*%res/color/default_text_color_list.xmluPAN0 1JUCHpC}E|XJEDK8+֩FQ;hd^#{|3Θ3WGf0:[mJimS]ePDWu/J٢2p.F]ƪhN3 6@I,y~蛈h>< O#/59z$[Αé"m{n.Ҩw[nPK PK!*$res/color/blue_when_enabled_dark.xmluPN0'K 100UL Hl$Z4U3>ΕZuz  np’$WH.>>wEU5C7koabކp37[[If=y3r\\؈x}~ȇ@9?DȂuGT_pM{:S$J5i|_LQiyq˪Ȑ,#SNPK 1PK!*(res/color/switch_thumb_material_dark.xmluPn0=N$Z:0tBL xa@$X jBPgtbEmoRG"8ѵ=K(|@x Xۢnj`.+s:uxfO潰8FSVW uEk4n*9:ݙm -lT+f_(@oOƳ8D#GԿըג@9Ƶ;=hcXOEwPKPTPK!*,res/color/mtrl_navigation_item_icon_tint.xmluPKN0|/NH6JuѰD"USpnp\+&Of'(#bN0 3΀sX@ L&ZmT)sL%; ˼$,Ӧڦ\fZ8n-d/VIUIJōjckVEQrhb931|*>0>8< G7:gE=v63IB12w]ta5F>_qewa߉ў>PK_ÁpPK!*#res/color/abc_tint_switch_track.xmlQKN0I*) *t] Ă%wZjiDs T ))LMKDUѳǣ7~ |؅ \aT8%D$'z0=QwNF<Aa&i6CJh8.c;I6U>8S&C]?4z(*tCcƣw!^7!ޒ'>>s|\#<5\.J-&i55>cpl/ry]-moη|\]o:j_o醴Uk<ܿ sn_PK9PK!*3res/color/mtrl_tabs_icon_color_selector_colored.xmlPKj0gɵV/(BV)DM/t-pK5]W}K$Ba~ @qsμe1lvlm oKimj22+v[bvEeb]6݋1,J\B/"Z"9ٻd2d&/g| #Q& $ddNqݠr\Ooȥv?3}?<63]bW:?PK'BPK!*res/color/abc_tint_spinner.xmlN0ϱCEb`TTz`AL7"i]xĆ@wt|lN) Nh#Z'gR 8g܂xq:WF}q]eVO>z o^7qUEP٤\5 1mRc<ΪRFbF3eW\%i X.ItO=xdxM ]O |"^}|ٜKm/gp8oנA*`'"䙼X_e" {E(9iݥ.v8+47ݚNf/zSAΔ&9x’ [sC,ߏ> 9R#<2x9s;}a PKdTPK!*,res/color/mtrl_tabs_colored_ripple_color.xmlRJ@n(JAƳ`,.j7|޽&:&eV;c7; ^)x50FN6bq8YqGZJ_h\:(#=OWDފ& 9Oʏ°r`Hf!ϯCdFJdHEP' dx!RB@Xo <{s7s.\494fs~yz5?׺ ]6 +>5ǜW`k Vm\ouǿ׭uwzyVíEG~oPKMPK!*(res/color/mtrl_chip_background_color.xmlR1N@9)EHPJ@PC/>Q؊6qr#+5۹DL;`S* !pw=nZju6TMPw::U4fӋx,$drOaur)G2GL&LnlYc"r` $z`CD ̻K}oD4V<79Wئ2=-^pd r*9DU?T5s/7k/uYv\V5:ǷFuKPK-Z>PPK!*>res/color/abc_background_cache_hint_selector_material_dark.xmluPAN0pDC q,R+R~ʏLUTzWAS fH`䊼&'\4M6gum_ۡߵX1 n;6bË|0\;hE&'DcNK%csC~UWG\灺8S$J:ޱSQ#ɱŏ/ckqG=?QCNא3$盾S~s_PK'PK!*#res/color/mtrl_filled_icon_tint.xmlQKN@}EɌ,\!qi\#L-tk;ګ9@.Kuz]-xds`1|)Z(YV7j'Rq(UtbNyJUO5z}[D'haX̯|.W5ל͞XF#j<3 s: sqᄇx`o/?6py{ PKf PK!*$res/color/abc_tint_btn_checkable.xmlQN0\Ic*8pTT RJ&J̝O&Phdg$9 btHoDI.9}#s(Ry)+ukd:YbEI5űZuHsUU4gT3)( L4) usnMIJÅ \'ƈ;&H ;ccVo9n񓏐@~66Յ\!z4i.ğq;zw[ߋolykY3?<籮7nl|^PK2Xu3PK!*&res/color/mtrl_filled_stroke_color.xmlRN0& U*UA He:4HT̈O@RQ`C,bG;Pw.0d[ +>aC؅!pKT qr.+%j-,29ed1걼9=/\#L@H4i *0͎3/D D"‚ (Чx'3"T[#|Q_OCzL=GOttOWgK|3fz[8]j` ;9gt9+9ǚwzef|m}-{汿VyZ:ss]PKAPK!**res/color/material_on_primary_disabled.xmluP10CW DCE  `KHH |O&H5{w[A*`; 6'ϵPe[f3v[aڄ3ƗXu6_Ly ծ ,DzCCD aSQ_&z ,ѓE?A˾/UcZqxOIzzwj︗_PKaPK!*res/color/checkbox_tint.xmluPJ1oPăOSŃ 7d-v&f1,:ae)h| +$0v_K| ̇&'vvZTwnoZ,wxzƯi[38oFsYn렵w;gϢ ."" " YƷf0qZ@$<+s'䅈XHq ={O<*h[ DZ{zS!,o!PK xPK!*%res/color/mtrl_outlined_icon_tint.xmlQN@}Â\<*#4FO09W"6Z~:ټy-pwO&8G !g%1UZjU;yi^b>oy7uEE,ryc Xeژ&̳@wAvUϫTBx +ވ":DE3~8lb~=pyEh2QSY_M[Y{{7&<~SW}qwo[mS/GǸ;1'PKvPK!*'res/color/mtrl_chip_close_icon_tint.xmlSMK@iR R("衧"qуxwxhf[I7Uq5U[9]+e./mm&^l֦:=y[C)g+{nx&%7}J\o*3Gz }_S$zDXÝFm 3GM\މ8۴ =#rC;1Wg7?PK#'PK!*#res/color/mtrl_btn_ripple_color.xml;N@ڱ)"EHP@)bj*jrc^C܁GE! &ZYd_㝙ow5@*#X#13*R*J9YBzyq6 ,OU>eyߏn'E6`4JO°FJ, &䎡)vݩ)3+=QA At0\qmogL\.bu_Ո|:T/1PDȇf\~g mp:Z{Ylyݖ7,k7ܽnv=g?Xu}n%4G/PKoSEPK!*res/color/blue_when_enabled.xmluPN0'K 100UL Hl$Z4U3FrT+N:=[AS! NX| ܓεfum8Zwfz7` 3:o&sY롵wk8G(XYP sZg2yQ3 O)*13nYe~{j]?PK&PK!**res/color/default_icon_color_tint_list.xmlN0M&G N!66x0Q+&j 3ρR0:<3pcBk]~Vb|zwv郈ZT"z>tC9$zPju,oS5Y tuB%uŐTe3vzr't#d,t4'# Z'GAʱD:,72s6*"/@ܳO}9=3ü2hBdهzM̷1Ldo<-=~}̷LykJ d?!7p שpkv/h` al`k0^^X?0^0L?kI PK\^PK!*'res/color/chip_text_color_secondary.xmlRJ@U%z!a>h'pIwD!ׂ:ΰ"vp3{+WLtOZp %3ҨGO*(MwNU*7(וnjJIq,E7-1muyj٭*u&U]a1$5FCNJ3 fE*G@r۲'|Yq{f:Ow5h̽k>1о0p3,k,,ܷ6Dn0q/qN'2x1~o?[_PKz%PK!*0res/color/default_icon_color_light_tint_list.xmlN0M&G N!66x0Q+&j 3ρRC ކG`N~L#Szk_JO..}Q`ZDڇc:$AjS-mF?k5W!֝NNUJxFnQROwDyfdDX(R9VHPQ =c&ZE{;?4^gft\fA_,zRϢ6sYg/>u5yQwg3S:nq e Za2 w 0+G+c"w0gs7iVPKd|^PK!*res/color/design_error.xmluPN0NJ000N Hl$Z4U1x^gKp(g>c /xpj8bA^7#D!޽TDMմܾl]zPl}&%6ES[wxv0g._"&O,9B1jRQ_9<:rɒG%N˙?kQSK%Z];ƋzȨǸ7PoNO PKy1PK!*!res/color/abc_search_url_text.xmlPKN0OMC.XAbCMzV4$}0IJ:f"6A $|!_,36..1E}[$I^jyR;]fE]yST8VWH!FX~B7D^Ìe0lY~9/svm[7_wc͞6itgOb KjE5]5VM[c|q79ϷڻU7c|d9qL~"3W>gy`_ c` pzCvK)yqwy!K8eh'*dG"N0%J'aXƉLr\%qQ~rTAPʙ؞( d}с fzpawXLJ3k.ƯjDUY>} wcoCTgkb6؀\s,6Ӽnlzõ^ r_枳:>7fL٣?fPK DPK!*/res/color/mtrl_text_btn_text_color_selector.xmlRN0=IU)$$$ԩC#1v' I,jDI21,3iT1p9wqr1ڣ7" 脪!0N3(n7E./B\ҧ^oқ+jf,/YI ȶOOqu3h#Mċ#W$s7[Msˈ'r9 #1</}>`o|",`xC|e(-fMck5ʝsWAHqfaYs}g[=5}([-yf}WvK_w^Z1W_ PK|YFxPK!*,res/color/abc_primary_text_material_dark.xmluPn0=7N$ L^:~R7$@M|Fn>7M+*:ֹa 9> 1ggsμ&GdUQHS}c;wzUf{SjUVJ>Tmq|p&s\q&7Fcq̈E7H>ӡl8NO=ݵJ?GVcDon/zPKOsPK!*4res/color/material_on_surface_emphasis_high_type.xmluPA 0mZ'xjbkKۃG'|ѩ(Iv$ gS\ hON #()ڬL-؞UqcH\S'meRƖGSt0<4.ֵ\p q&"3%c|UzWֳ<ޣ=5#7tx%1;KrȟOPK7xPK!*+res/color/mtrl_choice_chip_ripple_color.xmlKN0&,*U.`a͊5T$ E\cpqYALk|5>@ #X!V*iyv7JN,ʬ89h%:2GדVL٣_fPKǴGPK!*/res/color/abc_secondary_text_material_light.xmluPn0=7N$ L^:~R7$@M|Fn~b7#Z߇$.0k/cĜ1o-s8N;nzWIUEU#M1CrU)M'VYU*}P3RZSq!ƙd DDs7FQ0# OƳ8 < O#/59z$[Αé"m{n.Ҩw[nPK)PK!*$res/color/mtrl_tabs_ripple_color.xmlTN@$B1ʉGM01ųmJD =rc«g}+]h6EttuY4X bND$!Mԁ`8` B!;=kS8y]ύQ aߋxaA7#;w~pqnUtlqv^ωm7Nxic-u{=1nE5;bxcU X*8/XB&CX%|Dy9c%=zc,6Io>9>V2)-Oek YO!(/}珱W2в:{4_dN y-CG-Y+ ^՞)T/αj;)s j ђ?y+xgSwMy73xsMmHSTMj42\tͶ@!7Z{o66Nw,6JyW98B +7}ѥ -w2U2''|^ {;ֳ'$zdNq\rq|CE|{™?;gd.PKNɄCPK!*4res/color/default_icon_color_secondary_tint_list.xmluPN0|'ĪTB)C"~`KH(K ;98Iw$雉胈2 @,[ps3f_kSRmP]w,ow%y\-*h mToIs!)M08%?^0/w]g@@ :=r y($?Cfe_h:#M|w;޸ㄎq`Wg7?PKjPK!*4res/color/material_on_background_emphasis_medium.xmluP10CW DCE `KHH |oW&H5{w[A*`; Ob KjE5]v5Vm1ںu|XW]kΛɜZh]DěD>E8%QDP~3a<0% 1ggsμ&GdUQHS}c;wzUf{SjUVJ>Tmq|p&s\q&7Fcq̈E7H>ӡl8NO=ݵJ?GVcDon/zPK0PK!*res/color/abc_tint_default.xmlJ@ֶ[e",܈+K7tL#-MФх=|QϤ3m-7&s{{ˌI[DvUHhTvC:8C=Oȶy9q:ߚ> 2{{]+>K2m{aZ繗tn,x5;-2MEh$:r=7M/< O#/59z$[Αé"m{n.Ҩw[nPK3`PPK!*0res/color/common_google_signin_btn_text_dark.xmlRN07 Jb````0"?"0 Ć F ۘZ(':WDtHD09m1xN&ڔF^ݨN7R)UݫeM˜(tmCc^(+ 7K#[s-Y+1;3Ou"}1bbsԏE}<vQx30 3f}ݞm-{HG<"Έx<{b<|GO/\'ssPK[bPK!*(res/color/mtrl_fab_bg_color_selector.xmlP1N0܍@⊫R[@&%(?:jauQ$HƣY{DLJD y#9s 3fkSRmP]w$o%y\w-*hmv7V[gJSkjS8OR}!7f] '!s =db|FzR * ^Ir-;]aFόi?=}f̻ln~PK+PK!*3res/color/mtrl_navigation_item_background_color.xmlQ=O@}ACr%&6WQ1[tl9k {_Ug!/y;o8A-X1 ]-cT0l4^ZtSe^X.;^*=Vd^/DQjLu .d {Uqxnft hta 7 a5ώ4^#z׭Μ/ȭm9NM|117)i{y;KK!4;PK:?PK!**res/color/mtrl_btn_text_color_selector.xmlPAJ0Im6vBŬlŅ'pF:L;-M07"D 2 >xx?}3QB%x^x>'3ϕ-(j:P]5奭[uڴ[YǰokRWb~gKLu *j893wгI&(ddNWyXE$W"c5H1B'^>n.1Wc7PK%PK!*-res/color/default_text_color_inverse_list.xmluPAN0 1JUCHpC}E|XJEDK8+O֩FQ;hd^#{|3Θ3WGf0:[mJimS]ePDWu/J٢2p.F]ƪhN3 6@I,y~蛈h>< O#/59z$[Αé"m{n.Ҩw[nPKjPK!*+res/color/default_text_color_light_list.xmluPAN0 1JUCHpC}E|XJEDK8+/֩FQ;hd^#{|3Θ3WGf0:[mJimS]ePDWu/J٢2p.F]ƪhN3 6@I,y~蛈h>< O#/59z$[Αé"m{n.Ҩw[nPKiPK!*/res/color/mtrl_choice_chip_background_color.xmlRJ@&M<؃zhYBKӦ$+x?ӯ_/)!R y;;FK7R"!LtAE#8.+xDKnDއ*X@#NT| ¶(bdNGN8 z^cEߏƞX%^lYC享H.腘_73q:kw7,\w%W82=uv+8QpOg5? 㷬{fy‹eSBwgny~{ܩЭmnӘͿY/^/{PKM@PPK!*4res/color/material_on_primary_emphasis_high_type.xmluPA 0mZ'xjbkKۃG'?ѩ(Iv$ gS\ hON #()ڬL-؞UqcH\S'meRƖGSt0<4.ֵ\p q&"3%c|UzWֳ<ޣ=5#7tx%1;KrȟOPK ՍxPK!*res/color/filled_button_bg.xmluPj1=w2㤂 B+ʅtQ[IgJg` =H@X1s\2w=s4N;s0g^YV4U"lSe-v뢩|XՙL )LJ DDs2ߧ|:xϖSI' I`itg@9|7=(כGDon/PKXPK!**res/color/mtrl_popupmenu_overlay_color.xmluP 0|I5cQɡYBvp W/ѫ(/w\"Hљt%9/p Aߏ4/&-C9e~iHXi]ELF6QҭYCm3Rj .ݘy&<~բtyӦzs&ZYrPK톏xPK!*res/color/abc_tint_edittext.xmlN0ϱCRQ%11"&LbwaA!ZK\9$8=ha|J K.Gsp ıRRiŵg*>j"`LUk8וRI18MCAiLsem^Z##wj< ru}~`_U1%&ҿPKPK!*1res/color/mtrl_btn_text_btn_bg_color_selector.xmluPJ0פ ݃=쩇U75.nKSC_)[*;0Lxf'"pO  K5s̘Ogfvxb g.Gۺ[VS6ACֻYVxkݱ26\lm]iu:=yWAΕzdŠD_Dt+@]_`̈ɼǂϫ!z5#G*gf<ǃoCL8R,1:?PK[PK!*(res/color/filled_button_ripple_color.xmlRMK0|ja <WORh4qImvKXM^gJA)}DLgEn3;Pk0˴)|xT嫖զo;mEZnj-;IRTZV4ƴ7yZ6^ R5y>pp.l(M\xNQ߉`'L<B _tGx=h&fa&۪~{whkՒ &12'2h"x{9&\{ {/;3 ? PKPK!**res/color/default_text_color_hint_list.xmluPN0'K 100UL Hl$Z4U3$OsVgu>{Ɨ+8C$/@>6'ϝkQU #qصX!ozc/ftLCk:6"^E!!"q8Q*~\瞵=(?PK=PK!*)res/color/mtrl_choice_chip_text_color.xmlN@@EѨ.0]ԅ?k] I.L|n} }zhgc/9̙ v bc@{>tB7-,ԥH?k?TnwUmId2JCI#AâH4fh PKWi8(PK!*#res/color/mtrl_fab_ripple_color.xmlRN0>N*U?`:4HT̈w+1"Q†x^ !^'`fgEMe ߝ;BX#P[G4vE!Z-g2+e%9A"sYyY<7x봒L0U YļbiQ@)D=5@ K DiCcZh ߛE3s>PӜ5394779]XAm<4^|M7%3XwKt07 t5yNïEtG~oPKY>KPK!*:res/color/default_icon_color_secondary_light_tint_list.xmluPN0|'ĪTB)C"~`KH(K+P{9G"8ty$}3}QFx ||nvkmJJӢҔez_<Eem7`SݛUc8Iv4$5)'3 fk h^_G^~3/PeҐ!g݌_숖3I6{ngrw1ΛPKFPK!*1res/color/common_google_signin_btn_text_light.xmlRN07 Jb````0"?"03Ć F ۘZ(':WDtHD09m1xN&ڔF^ݨN7R)UݫeM˜(tmCc^(+ 7K#[s-Y+1;3Ou"}1bbsԏE}<vQx30 3f}ݞm-{HG<"Έx<{b<|GO/\'ssPKqPK!*#res/color/chip_background_color.xmlT1K@~$MZ:TtCnC)Mi8 "8 տ?]{-}_ޕȣG}"`D4 p =P*YF+ Ry/.<@8N9Q0z!JӤZ-ʲaĻAZ0AWŶx^BѼtJw9G~Fn\kϩ3SS`=g/쯗mf5nK` g%fu gΙ)#M4/Ɲm{qrPKͤٗPK!*-res/color/mtrl_navigation_item_text_color.xmluPKN0|/NH6JuѰD"USpnp\+&Of'(#bN0 3΀sX@ L&ZmT)sL%; ˼$,Ӧڦ\fZ8n-d/VIUIJōjckVEQrhb931|*>0>8< G7:gE=v63IB12w]ta5F>_qewa߉ў>PK_ÁpPK!*+res/color/common_google_signin_btn_tint.xmluP10 <T€x+H (ٝylAq7UAMՖ슮e./mm:\֦:=x[RV6((;3_ fSP FW p@M2qD!#w uzF/$qFόi?=q;ΘwƿPK*PK!*2res/color/mtrl_tabs_legacy_text_color_selector.xmluPN0/N EbC T :VQb b?FpnJճNg>g[AW\!gpMޓ"cKolm]a4*?֘6_q6Ǎy6ܿ:ӛ|m >EcBȏ@&r}CUOI=G,',zT԰Te/fCyIzy$oxN ۿK.?PKPK!*0res/color/abc_hint_foreground_material_light.xmlPKN0I:JmAJ`T`UqP")8 ;Zijy<3RVNȃx^7|kp:N;3~(MYS6TmIJ]]i.kJ٬0ɚJIdLEijMi2313 0=$8]9'yr K,г_fY1zkţ] ;?v PKڜC#4PK!*&res/color/text_button_ripple_color.xmlN0ƿ``@FK(1!Qb`C< )mdEEξ;9Y ‹ cci}!uyzdzJ_]#žeӲfLi-[ǃuVNf)wޖP D so zg~hE|7Cp˞07A'=2pƾPe3?:-}1D|0? 3/`_l~PK }PK!**res/color/mtrl_filled_background_color.xmlRAJ@(jBPEZP\w1M1iBu' ^ĵ{\$!(x~ޛ Fi^ht01vO? pn^B]&Mjf"ڶ$J2d0UxǑ KaQe>ObO^r4[ִP1n"0@<=30g|h :WF qt=ZweM5km館Yu_f7 |<|߶,wPKS_|;Kslm-z PK?[9(PK!*+res/color/abc_btn_colored_text_material.xmlPJ@/4P)B!`WD=Ekb zG[.m1( #>s|8w#a0O)b2ߘQʺPN[~[X̔AmޘM!T]c(olBW]ef*'\=[4)0X]!IZ]rc %q"v1ݘgd%_ c` pzCvK)yqwy!K8eh'*dG"N0%J'aXƉLr\%qQ~rTAPʙ؞( d}с fzpawXLJ3k.ƯjDUY>} wcoCTgkb6؀\s,6Ӽnlzõ^ r_枳:>7fL٣?fPKZIDPK!*"res/color/menu_chip_background.xmluPj1=LH"UHjR|C ]ڠlr3'}?ÕYG2bX1;ڇ4q0Ch/a!|> ߅wUPv r ajw_o37,;he@"-s9/B?gzD%{9#Mby)Gs5i5 *1{%?zP#zwjPK;qPK!*0res/color/checkbox_themeable_attribute_color.xmluP;N1%n"OAAR hk)Qlr4܇8x"czƇ!;aF^LN>ؕנlzL&kw*݃1]kΛ\ZhD^DE2;qN~U,Q~3 zL"yTi~1ĊOs5ԐF+7Fsɉ=PKĒPK!*6res/drawable-ldrtl-v17/abc_spinner_mtrl_am_alpha.9.png sb``p B@,$ccRw8y9@H;s3@ wc> +If`baSr4  H!&bb1Hl;+jtq 8!ס+hq/D,nsݕŤ"^\qkl6Wݺࢎi2;Υkg]#fw$*WN97]yJ"OSBW|دoO`;o _x9<]\9%4PK>PK!*'res/xml/page_info_cookie_preference.xmlRMO@|7q z@jAR+U1*k#7CPqĭ}kd*5Z{<;σ6z ,-zV MaH8$|#$7aJcպlj'kW' Y/LR_sBίE@PK PK!*&res/xml/single_website_preferences.xmlUME~==;;qvvn!Q$,4;/3EvͣxMx 'A ɤv;ϴ4r@Y2徨4fd'ׅ~VkLnŊ9Huk8˶Žfy3_(tU'<~ίxyXUוzg[qz+^u]ٗǿP}z6Ԅ^-;eϷo} Q#|թy\'=`ᰖW˂WKճs]|y}S۪X|1o O!C~ /߂|ary\}!_BB<4P~%Fj}EG;{s3<94dii4KI/IKy+NSa-P#XY*KꐲE(c7R1fchlDj5F'\QR%U t<$&P0 1fc> h~0P\_-#Wg졮$q gSO=)1L|,fۙ4b_ۖ&7nH5곱QLJG3C%kB57Zo-"`fAaw_)M Iu4#j̋\Jg..S^G晖JåՆR!i h#xBˆ|5"Y@*$~O("Ql:o0{/@\95O9_؜s,5YNjSB4W{PiLk;ϲVVc VU<wa_.s-m9\u8zy.:6[8\ul8 Წc7qy=e/86q,x%qy=eW8\u!q,x=eeYZ˲ks;q,Aގ3/~|33ranp69.:p"opYaᲬGymeYgx.:h".z.:xᲬC8֑q,[wˢysPK@ PK!*res/xml/website_preferences.xmlOA߲@Ki(i≐`lcx! $B0q3NIwwY 7o'OM<M a:-o}o>% `A렗 *jEPTGNuD@mLa l* X$i afF2QL&} [MbO%^LX|#h  J(>m9sIE,@#yŢyQmHz.\nX8$:zWgonv _jۥ>ڬrF^M1%%G-|VW.YD2DY̨tb͍)ppEvY+XبQՈJɂNTU:n:?Q>n׀M;!bPI8 ;;N(wa0NN`-נWA @i=>z*؀b .+\TIk.]iyeYo_XE(, ^ xVό)0jlw5nkXa)#OGa=c: >[x,1scNǦKxYxy+C]^:/cxytI>4K7mxQoqD8K39-g1}׬]e}߸LȈyMϖKx5#2y /܁ӼK%wjެK٩y1s"OPKctPK!*,res/drawable-xxxhdpi-v4/ic_group_collapse_05\RIFFTWEBPVP8LG/_U@rHT4{L3 m˓onm͵Y6%VI8q{i" `Gt48J=Ż:&|u,ɀXanP}ø&A?ięPgmx\g9p kk&\@72V]tSVZ}띓Z!K@F3꣔x_oh=M(a-f劭&Jn\YY5_%v#)Z@^'ޞzgfK'{PKFna\PK!*,res/drawable-xxxhdpi-v4/ic_group_collapse_09bRIFFZWEBPVP8LM/_U$R MٶUw#S$s2at1rIݾ`wSAEGp"N[hDc9 o!0K& ] yL7+#ǼvE;5|S{BG3Ohk T!8)0LZ̵}RTY%%W-D03B4Esy/DU6,zg0;BIN`qH XtBq!;HmP$+uj}JkZ1PWP=`+V)e_^~ڽr^{FPKfgbPK!*,res/drawable-xxxhdpi-v4/ic_group_collapse_12aRIFFWEBPVP8L/_M(n6`=I"?XB$'Xc:m7of^#FZ]9uUSt4]Ѷmɞ_7Yfr/^hQHm7UVNG2&7rG Dn47W(:(PK.tPK!**res/drawable-xxxhdpi-v4/ic_group_expand_10RIFFWEBPVP8L/_g1? 6r>PD Q10QXbB$hx mHğ5% mʷ %"'%˕ϐroD8rȑ*b5]}}?S"bÖ́@52SA4ɀP8Q}q=|i=1yh><;A1}(H8XD( d1a"V*-g(Me9xV\ٱ!qwiŘvsF?7PK!ȁ!PK!*6res/drawable-xxxhdpi-v4/navigation_bubble_shadow.9.pngePM?   8p;9C\k9 C8![pw !;^_mUoLv7R&%b$* '@|LF;8i#)Irw1QzNz66!+ _#VX[ۊZ9CUN' Z˚y$"iO<4&G||eI}tN Ӊxy8zǢP†>3>:UzyЋ>4RH^U%zwu>։XU7y }gb@X}j|g$~~d6lF4dȖQ=BgGBą@eڔη]R"433= JL]A $^W /ATH\ ,%&Qq>1PTvAJHH!:*T()HJn" |x/V+qsn-1.B-*`cJ 9f]R%VmQj0HOY}c ݰiS&4 \g_ZMk.H<pNCcQpvcC8bEO6?)/K!<}e}HDgckkkB;?>mϑT,$MX*9#wzy4ڐ] A p;,49l9mO|fG2cܴ R5#Xb慦 FOlzV׳0!q)fǍ ) [N"s S<R;w"n>>l.b*z厀Vdۣp:HD6o ^y~WWa xe;Ȣʋk,)R\ *❵1o.oA2YãS`8%`S%ccy'^[ }i5-3BZv#`HAM0M /Ӕ#\N*直o?vG3aU֌yTy {g/D OMuoJp̚q|F  a@I׎NUbs2H*ZDA>zzxͭ?6nïyA,=>2r-vr ܚ g '2U bI+/x؋zZx}j~~^;Ϡh׎mpnlݣ>C7GΆKOQE'\@W͐퇵jhחۏge-qlP+޷G蔛*XP4x'NcŞ< g[FwQr@\Nk V&BO_GC9'Ea3m¹*iIhTcdco~[l^C<@N]6̋_1 nxpD:]f\1˙e@o{{r$}Q2d<&]3eF8˔[dt32M.EL ^-/:ܓbSikLH1񏎝#P̣Sgz|6nB^-j"?j;B-w6kaeiF,PWL~jMe,6_}v::XPf@Wtt5msGOrSo[ΥA*Դ%e:~8e;ľ(!Kr1˫qYF-lSd{sa*-H4k1kߤjtw ]Tԩ|AհXXz QŇ+dćG$ ra&!﨤iSۅk#7*bԋ9?Cі?!bm!RF1=Cr9lܼy[zzkyyAu427w9%."OVܥҳT01/]ALƴks~uu1I3S_ &7V:Lt¡0;^\ Z}u0vWT1˄b.;8 ].-嶻5jlֿ%NvmAWi'ITk|jw$~&Hp_;S!"U*~gppv~~ʖ}7* Ѷ~==?C헐 UhQ .io|nUʔiܪf$c|8;k;KU,W%+%eR[^ ,"6DZPJޠ"N7 GyGPS0 d.*Bᆚve#H'uxA\|$[3OЮǴhEн?{~UR([Mp~o*0҂rmccUa58 *sZϚ^Xv~yTkHg$6BNQ)ӪVDxkqe{+x~[e|/E f&&[Cu;c# Ϧ{-} H70lfa)~ Y'6Ԛ)DhIHDEl0ծ3;l%% O|'Ƶάlɼ1!L|1:69qtd:O&7}uuE5le"ZO}e(\mÂ*,SS!xF?@Jה$upܘE7c|\F?Fbc>&fLj/Ն6 xLUq/cG]z 9YtxxxFLKN<;"y&EMصQ,ɸRaI,.L%CB/{_sL*nٯ,w!%b NH" w|H3Qo_H}ҕ??2>Z\й4]yBA}L\qOr JJh(jݧ vy@V^k¬mTd&fwUB! m YYro4?5XZMDB[+,IRz/ZM< q|ƼASXr ?.`1 g1N4SR\ xޙ)SFldfJÆjhpZza:,䲡*y !Jqu[\NzE:_pr4 R|*LL؞@y8144ݶjH| xS>>XBSozAVAIê|(bwb!Ž&v%!S"f~o>I +Ǻ@lAuO)z5JZ:ΕL&:dJ.r_݄o&eY߶CrrӖ{۰uCaU8uM ot:,gF<)J_.S;dgNQ:yx=-04`͍bÓn)ҘAj#B_379]:C]9rkJ֑B}0qK=&n͠LM)7])q.̝|]dׂ  Pq[A|/3#,/N^pPΡfDc=؃e(Co qP%S"qnRr(ii~DL4$}<(53/Z-~]OEž=+ (,# }Q89t?Zզ1Ңz**zL2W1ew- E3葜86\ٞAË}<陮*`EM{ChXYNjƬF\ ‘3dgrFw N[!/ҐRwe[w7o 4nz#5e>4F{N0ɤIw s9 hxYd* lcs ~n-sjG3Sȕ͝k=Dznղ{L9UX`G~WPd)F)4!SpʧN5jT$nQۖ0mn5lz?f;(;u28&>3ph=^FZfʤ,Ʋ_om+y+}++E8BcEQPr s Btbcp[`Q$4q3[IK_9@uDHq2%@JM_~36|do}TWz1+LVOZn*gHƒu}(O3Av\}hԸgHAq&? %-󅊋 ڮfawrWbmO./nMkDٳ;["4<(A:Y*Nݩ^bfEǓ5j v?_7RrEMRȩր~nqܾ̤nm#Ñh1GkPĎT2/̡ް³Ճ土dr@B I߱iPw7Zn Gsl:.=~*azOQ(m&*X]ds֑Z#&8::H!WGzB!Oхy0(gl1Bse_\vbVM 硻0#tY?N)XKhvks/E"`G4(WI.`U[BdC?L?^þHt%uѧ !;R̛b e.Ԟq==oTm𤀋AB}JTd12ȫ3tז~{}o+/JDm|Ljd8feƸΊl:x< owf$VWXQ.[{Dz5̃34ح@uwy_}bݖ"#y=]_ݿ4>:~a&H&jeǥAU%0x}٢vFfA-ZXic1-f.FŞ[_"Dwoa3>3s<Fp'wjSsOp i˜ֱ٤v3.{ysG~&LuS"<=qP\''Gzz1URj.94ju7zkтv)_^gdqf~7)QDPSw(0NXj~ ߭C8iFNNj t8b;1Ә vwee~ p]a,"):A,*DJVt_fvI`u$~E C.;C˷GGGM,a,av6s+ϊ=G`2MS$XW߉㜧˭1B]BL277?5pJNgQ@1\ LҋJ~͎ο2 I,&eZgKxKo{r4W1v^#AsG^yL2\47Oha8`Y, 8,`k^JvtƩ{LEbVҭ"Ϡqv'8vK!j0Xx~͗GӶeGGG"A0<Dƀ1[Gg/1'ZxM@~fȭfe~}حWjj cI|KYٓrT:p0 rɂBaKY72u' *dN{1*HU=+*lfvJB! aJX~7@a1((WӼſ d".= MI4|x aߞ"<9Hq,'ti&7}dߟЀ'IX4o-qXB!BM 0@A,G"y$MAn6Jݴ[+)C}{XO07Wt }h`dɇ#¯Oa,] ⼦ems F>ޔ+A]x4P!850勇~:>R޵;M?4SJZNVݽO-b ] u-7Au[o)q0 5πsj o\S_#)piR35%K_~R{noNd|Uf09klfBn#šDO !ׂ(Eق PK?vc^PK!*&res/drawable-xxxhdpi-v4/popup_bg.9.png]Xy<Kv ٚkKb.ٍ5d(Qd˾%Ȗ3.}|>|=sM03؍ -O-^ S_>3*&nYjHGA /o=]sFzV9ÞWycM㗀WI13~&tjv;R“rfYy/1ˎu-3"4Trm} ʄjG%n3놆MB|j XE.isfZ~(&FR&) AҕUh^ۤY#Hӟ#bMáh~`9&4v2kώ ,G3~|5ZJ5=H͹ qryA]Ě,KGj!> Gkgk+u!xcsĄCfs;a-€< -ٚB"#Yg]9=J`/ͼUff82'$<$Y49yd zZ`7A'D_3I<gIZFDQ3`(DC=@qFmϟ %8V!8C^uarhˊػdpq- zUmSPWU3OBpoĥ\ylu*-:LD\ulʘNL{h%E—&'lr`/O00<. ?j݂=OY;h}T"r rI{_D80XQ &Enr (hk?f M @]T]9}pk-/$cc_%e)ߢ0jR3:IIEӜ#!sB5i揹rvukX ^̘<*` %ĉX `ALE^d@qV&CiS.285`IC'DO,|ǴA"cD_xkY,aQLS51jbZP -CʃvV b)`( sG[x+:嘥nJNq-Kϧ$s{@wE8؝r`Cos7CYd6ʸd %gæKi&_޳A1n|| _8Y,,ZvgapnH䬻ڪNЮM/ND@Kߏ <^B`y.^ gI7e6JZ5<^__a^LZ&d?87}}ͽx/J{t{tqyXma*B4)5Y_aUyw8Qr4\ڮN)m D qD~m'ҦOE]ȋe Vf}&f&||S>]u5wE|GȐiP+P@ٖtG]sC^;>p@;#5b,8(hHͽFgtQZKc,|g=8>]U[^ s(0'}aҤ<|sAtC(H[P{[+_]l%݈ ouy^D .{3OȇM<ot< .v`L Z/QgIgI'g̴:;Zp&QjAP9J^|L plzaҾ:u] j=wuu)}wSSRB ď5#&?t͌ytH5g$$.(S#ӻa0.9n Иo9qPB+5 ìř z~ce=DAnSOϑާ!+ߗ/l9()a֋ƚF45nUU1` UCK}p`:q˥N!IAseX3`$Ѿzm zO㴩7(ā-XZ# q)yp]BZc^5,&.h:m22so?YXV<p'ܗyA"k7eyV+L sf!=@7D W:E䰠8mBYo?XLAQ&i\ů%߿?Ѻ{cA'waPA)[,3kC]?%OU_7iORTAV>L,Ukcyt␜7_!pJB–pwGWG90M\]{ aOT 2Iwßr S%{U6RSXy{?&raXtORwSqZ"8rTPqJ/I J,AZ"zr\p׳$DxDi2 vqr/o'3km9ZSgyd2c'X/ئ>"M (2җ6c.sT@$#35SB d%b^,Z/3+g(9TD>/e41#AMMt,Wj?` ʓe ߛz/F^h7J_nP-rkxW罔COe)QLk,~nFm:Pm/QbxF]r|bpYQbՖ5At mƏOX+'nt"f 31iJܫ%!ǺoveiKfRW8=I>W:mZuRǢxztt4G}N~t8n/ h|.녢垪vB&Us.(M_u0}_{9B!txZ}vnGV{_I\ѱX.*F RlmГ4?l{di,_5Noa#4Ag' ¶E.;OHsT`7~Afá WkQ#nݶ¯O<{jCUZWK \Ogpa IUL+FalS4xT6>y[4'h'9D_<,1>(ܹB#h#! G^hMf_+P&$Giӗ1Ӏͷq|-IG0]/cP|;zlD_xr `j5S]XMlq ջg~ٿEgg R5 uvGvyҖ>vIy|nrF kF dW0C@Kyxl5]A2~L|,pfTYv6\ ugpQ`UЋ}w8aÜoa fUlє7:YSXk~ 4^g1^  UG -&d]O.ٯyt-\ۤcZUC4~ 1\h#y1{&,'q jpFlXf3#S/|OƬ ΝGep EYN~C1GIM! ehkk+PKT՝PK!*,res/drawable-xxxhdpi-v4/ic_group_collapse_10:RIFF2WEBPVP8L%/_w1? Ijs\{:b ADa@!& bb x m9c m4ȶ6\J_em8n3Tv+s*4T}oMpD)8l4i. $9ܣ[ ]8CTegc:L+TeZQ7-VpzEhKQ3K^)n@dQ4ҔZ&hM;: QԤUBW7 OAfIUvi&=? PK3\v?:PK!**res/drawable-xxxhdpi-v4/ic_group_expand_01 RIFFWEBPVP8L/_U@$I+GC;*mm$UF*y;57' =<^a\Zc.Ic(9%M}i?v6Ta% tDйȜ8՗gă8cѷ2qt}k%'U5o։cuVa vɉB[($z6~;MDL(ba(S)B j&nU8Jk[Ii^^,ZWu~.1Ha!XOPKCߩ\ PK!**res/drawable-xxxhdpi-v4/ic_group_expand_07hRIFF`WEBPVP8LT/_U@$9n:mwpm;md*ոMW7,ʶw{qF.=Lb=RW,D/,.| ޸ׁ ޼AfV=w%jO%{:p4ΩĻؿSHSQMՕlyv%F&vO*q"S]/Kp܏-q"'3 uDQ" N@ 9p"Ή R1Dd*r|A_& PKAPK!*,res/drawable-xxxhdpi-v4/ic_group_collapse_14[RIFFWEBPVP8L/_㶍$OZ}wה޻j#Im+rr(y'X~ZƳt,{fYBk9ke2*CHT$!>P_$G)<=3[|]r/]z#녮;_hhۉ[u?PKvPK!*=res/drawable-xxxhdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.pngmy4z6h-[!;c7%W&4(4CFkj,,ƌ}_d c^}=y|yz^ ,gΟ`S#)2+ ?7矦|289eX)}\O˞.~Z"aw=)mThTlsFWOndxyw^T!xUTS I>FD'Hnc3ʼ KU[boϛm}f0:' %Ŗ|{R4Z6<pZO^ZH9 ]bPE!ؔ_؟XYl*jJON)9fpr P9>tVŽV/90[lzUе,.iYUCBš9"9m]_oyF 5.Ȭį}=.G,H'Wx`~s_$smR<#ZĬ!Xfv!գ\!&تMVUbRLuѐe!,jpdC{~W{$l-/vϊ7uݸ(PjڞV1o AJ%"njk3]CpMYy_s?x!@߮W&VcBJP+8E$ƪ+XLD`|HuP}@J;ր^IZki}Ňz-ePR&Z#nuD9մDODz 6Ï*ycwI5J6cl OjiX~@T9CxdDnMWyaiezSW+y0%N=g6zqCBX>4~vy A&[YMtLty K#= 5D6!kOI/gveĉ m6zOը]׌7Fa:^{tffqu|BkҐK(5T`dֵ@s@< R2[ɺ/~vIsU󸆛s& C?6n/[R6~̈́N7G$9>(`|:̕)2bOE"D58l3iY.}^oo5C3.*=uo[J/i ae,+,|mQiK4G=k# *0O|p$yu^J0Ah^OƵf-p㵦)ALk}؏B:+ƛCsStIzB#5A R+H4g_k[f'P! XԞTG9SSN2H !\s.1 PwW\h^kn I!Oǥ7e;)*]PЈіr+ǝ8m^q"ꮯΣ: ?)H7ԩ`(N0{X8 ~CnL>(e,S^B!4Z"t^(p>EeKN?xB0L:t/ZʵP {O%KzHRzxx޾PGAWjO Ö%>־ n%RYW}T'3krCxh=.r69$'(PX F,ltJ|]}~7[…uvPloS'"R_p 3i/%F7'{/2>lX|7Gz)=`_h-­k^Oc] YI~C7z<x3>˞=>^:5s:x5oUSsu602 1[v(J {R F-xY5S/P.+m(1J[F`9sy\? lM<.,)]rͮ ՙ*|8҄Tk3"`SBI8dvH;O =7-<1*J5Ϛ{>701eZ"׽WԍM{l5hQ`!E&H,SjīΞnkF$PKmu| PK!**res/drawable-xxxhdpi-v4/ic_group_expand_12WRIFFWEBPVP8L/_58nɑ6 Fﻞ$5_ij^Er6|fx=ʶϖJI흘: jUө$SKX͊:ht*R&ROD/_DX72kԋ,ײz-[;7PKyPK!*,res/drawable-xxxhdpi-v4/ic_group_collapse_06ZRIFFRWEBPVP8LF/_Um$I_i#z6+.3*mkǞ֭][ߛ5cN2'ݹL@=[0 & FxA_{>4gOe) oo0OHO~m8/u_'S]2* 1rX kPvHu#G :ӟds[IlVbݲWLK"=W9yʞMbw=)$9TIy+霕.>QڨLwLh֯m^ך>z)U6E^9hnu zƞ{hĽ?PKG_ZPK!**res/drawable-xxxhdpi-v4/ic_group_expand_03"RIFFWEBPVP8L/_Um$ɑ4;ʒپIɗwg]AtX:aAthG Y two_l̮CZiuYkìW6cT.H>ysxۼr^\Xn&8f{?SOb>-cW2E8p{n8=nXm=8 ʂ .Xn@!va*Nj\qMo8I  1P c<, !xa"xuۨ/J>j6E)Q B7B-1PK\<'"PK!*,res/drawable-xxxhdpi-v4/ic_group_collapse_03&RIFFWEBPVP8L/_u$Yj_:ecğ0E@`4ͨufhwfb?+RjC=oE.\K;[n4F=ofdվ@L%\?š=kK#JaɝEU8/YWnq@iTܔ9+Hu;b X0@ntjJFwk$sXKgon^14Rj@^7&P3PKϊ+&PK!*,res/drawable-xxxhdpi-v4/ic_group_collapse_07hRIFF`WEBPVP8LS/_U@$9n:PCJ]FkێGol۩l;J5uSM5KmmjS2 u4{0aD'`T'I4M!K'"Nr)7Rlx"Lq|JMUBX5E=1Vs/ayLg!юUˆU** Xu"<`^*}uvFzftD%~4^*'W꽐8'UJ}Ru7`d*ܩֈRhLEoOl^){JӫEZ3`J|ksh{{PKmhPK!**res/drawable-xxxhdpi-v4/ic_group_expand_09HRIFF@WEBPVP8L3/_1? ۶mcL C  @( CqAb@! L(h9)O J@6k X6^}F)#۶q{WzFXoMGL˚UnjD(Cm56r\[:UClWҞ:&PK! -PK!*,res/drawable-xxxhdpi-v4/ic_group_collapse_01RIFFWEBPVP8L/_U$IS:} "h:sbmoыNKKF;U59wo|9PK!*2res/drawable-xxxhdpi-v4/top_round_foreground.9.png sb``p  @$+o$ s8 F  ?b < B L`A#ь?a7200=tq vYDߍdaP tXA #r0Wqyww~(ٳ;JP,PeYdl]W~u홉v>j^WgGlrrl>S}㿩;0&m^ֿ>wkfNROL:qo䩩[+jpǾcu~6[p[ 3'.h:s7}_9roّkg[%d,,Wr)uoS1=awMyȀsNz|O层s&3퓼yzn?{w̍s;orC􏽚ۊǼv$=e9[O͊4iy$ _<PK!*,res/drawable-xxxhdpi-v4/ic_group_collapse_02RIFFWEBPVP8L/_U8n$IzyElvo6zV= ȟ!A#ӝ*/ B"i^U3w Gk'LdHh$2&im'x_+m2Tl|RW^mUsxom+ >8Qv(ҺNDq+LIvx͔{3d$E\àP0pis+@lSK^b3 PK0*PK!**res/drawable-xxxhdpi-v4/ic_group_expand_119RIFFWEBPVP8L/_GnH_YSU3Nii.9?\fӶiwp.]II8i/prv`crЌBmҵCzq\(Vbv!&0[IJMiJK+'+[P\׫Pl{^T"f+Kl{gmzef3PKPK!*,res/drawable-xxxhdpi-v4/ic_group_collapse_08`RIFFXWEBPVP8LK/_u@$9ne"ڶpww$'D$G D#ݽދN@} ' # 8lQQ@lG>m!3C`sw?#r$cG`jb+B3|Ř"b%s8pULT $rfQ56U& TaW\dG{Y%+2(Ro.WpAguh"֪ 0lWh -UY "kVA@$ύV KR1s:zG匘qe k޽2GeUC}NPK)ےPe`PK!**res/drawable-xxxhdpi-v4/ic_group_expand_06^RIFFVWEBPVP8LJ/_U@$9n:lpl[;Hmւ/A[W>1Gwi,jbd@||ªa7\l g>Yo7ޡAa) PKvmMbPK!**res/drawable-xxxhdpi-v4/ic_group_expand_15[RIFFWEBPVP8L/_Ǎ$)VC}WKᅳ XK鐿mg6mF{~m/M/wӫu %t'[õL;x@lZ[Xm"%FFRο)ҾY!Y9Jd(USHfG&PKJ)PK!**res/drawable-xxxhdpi-v4/ic_group_expand_14_RIFFWEBPVP8L/_Ǎ$)Vb&w+ C$ k;G>89zRh4"g67?Nd&eN%nZD: $oˬzgxaCEE~a7nי=! ÆUi]5䅌4]8aڰKw3qyE"2h-_Z̵NG,1Wt=qEo=c PKi )bZ[7jLgH)ǒ.PvҋuKjsI ~*f  =p\QϠ &u4>XT,%U|KqDaxsxThX''0 ;*?3GL26[hI٭ V|j'$lo4C¹ң/9:ʴh>R8IZQDhAMI[2u'; wߡ:8`D k1˳^y k6ɋC9MEMvlaaswqz5QLL&'tT0gx%/}Vf-/"6sO2S^5 p-^ ^ITƇ &FӫtMqY_Aˍ`$FQ θr8Gr[qhE8v*F 'c@pN@4txT47c ;`dȞ9A~LV%/?m=Fe< Yv/Ĕ|2D[oO\SkԸQ~DWT>R*Iېbxws_IV$:nw+"[-hB_PnR˧Q-qkK~z4pNBEHoQ>t0*qr5*4fP1QGd(*L& MBw~) ,7i(]^Bbϵ7zD8aaY:=Ň/ lQ#K%귲NG/ wK3+z ؿdv,VvH{~F`(4ް48V#-+YoL]n]H;"jR-jy[`:Xbk^CΎEFx΋׊'w"wAY#!EґpG~{"ޡENP8TݡAƹ` ר?Y޽}b-wGR}un)iCg3<ݖG n S{StrU=&n%p&tȿ#tuTnuגK80^&0 =S@ɃjKx%vwʭţG~3'wN4Kg&ǃ2G %Em>/vz)M}ؒBȘD6vܡD`.;S#0'zPq'cuMg LpӯAS 6SLf&9] r(}u]ݰϊ^vv 1ta_u 8N`o7vZ/ Z3]sj,>m?A!$|ߔ/< Ĕ|[Ǫn"~;pֻD_u8vQqhgoGMfOrdЉ~<3 1+;dj~Z.s^Tv)2pq\6 -QvCҗr{l~Gh*p >C}q͏\qfce}=G5>Xp[olW7,q;yM\ol3W`; + &Ӵ#E4$ n+X"j $TpC/䖘J4P7h2`4Bɱԅ(`>Uvc353Db5ݽW?b%ٌ%C_ǁG9|җSYZL1V0=u^hNQD;Thg1zvR.2\==쪉6+b;Ԕz> %q|"$_(gG[*7_ozO:PK,u PK!**res/drawable-xxxhdpi-v4/ic_group_expand_08lRIFFdWEBPVP8LW/_U8$).wh"P۶ !e:tuBчӅK j_Z $ E;L{)DZh6 QZ&ty,QMB0۝JLOD%A]84\N(oHtO#k!O z1?&/ Et^6 >R`pbAB;1~=bwz(|!c?͹9 AG$gФؖQiO,a$f &&PK#&oqlPK!*=res/drawable-xxxhdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.pngmwPjLiA( PؐJXB*W)4!RQ@A$ HOΛ=3{sF7u lBler:%׏MЃ'53xl^>n9og 3׸b:GOO͂gmɳ2f/DL]",Ɖ.WׇTc3dVb%Й+6D Xx)BHNJ%{0wHxI,i)_֎1P bc",-u0E .-e.ѵRԡ#s,LP68;Pk:[*8QI;jE?SjDpJzp*/ɓ8[]>[ܓɧ52//opufv1uwZe?N,*<^ʞrGu+u-V"S4rZ!3hc7J!6+V#~! O$Mp弓3rG 4Ǯf3K@~6%#KvΠZx !s\%Wzlet{;$: 1N&_*(]ކ_ošk9tCg^))Hy~5JꗴGnxm_!/?#[ǵNݰi*B v hqK(VS,`EFH]Yǘy讗eeu-,,U|ZBAO7=|^1PZʀIߦTj"s)lE{$6{)p ihlz)Vj6:/3vS+UajрAÍ w>X{Y-#jI͎LWhWœRyEu*r$yiޭ!|ݘdAVޕwj(}^L+@VKB/sSmbM]C);6Dr-YYՃGܳQۖGfԔ5)nv2Ӈ*)6J7-0LDz3c֏ !&+ZN+*; Wzĸ'qթP$یtk!%קlbB*HBFz1-Bsm2b2(U=R AkGc,Wo`{fF;G_ȍϕ#f@p.'I8=ٹtc0h76Pt4H@u<^HeYj|6Zl>+u~,hpvPv@;kOmɦ&A@\cڡrDV [@XS;e'l;w[5$W)kt$)rϐgցGgz75c PK PK!*7res/drawable-xxxhdpi-v4/abc_spinner_mtrl_am_alpha.9.png sb``p @$ELRy9@ +b<ލ@* $ $0BYƀ a#WOǐ{om hMapVLR߂ b+I^&-{Y{u5ymJFhefbiA뒯̙\zzsŒ߯ 08z]0U>D3yc˛炯J})q=9&hynf-~9Ƃ&>nu/jq裸.~=Ɔ;-fSyuq})Z=q=]\9%4PKShPK!*,res/drawable-xxxhdpi-v4/ic_group_collapse_15aRIFFWEBPVP8L/_m9jo50DrfӶIw ?QM'&*έKl5JkI+<1XQq# &g<G(`"|ǣ_MO^i5^eTȆlPKhNPK!**res/drawable-xxxhdpi-v4/ic_group_expand_04@RIFF8WEBPVP8L+/_U@$ ?,,{퉀[m۲åk?,qa? xғKw_,霉vVfaH|OHCkEN\X@t 0%Ɩ|p'hxþk$O%vIiTUs> 62BO;6Cߞ7a> P)om]ھGWELey£4Vݸ=Kq݌]~r#քΡ&1ei |!=PK9E@PK!*res/anim/menu_exit.xmlO@YZ 77b(qQF' q@IkɁ⦰hrMK^^~ Nj3:iCm}p9],'괇2Uq[<]PK:vTPK!*6res/anim/btn_radio_to_on_mtrl_ring_outer_animation.xml͔O@Q,EQ:u2jԐ@nV8J{͵EG[ 8 G>ʧחdѵIh,F4IB|@5 *X% <\#.p"!ɲjMD)rM+GL'@˨xBָt3;~M Fy۶VϹB*< .mC[OM ^ʾutL3: ~c2Gn3Vc9 xoz}oʯ{=(^.މs@:t_10ލx7ݔ?Cs^\bߝ9>Sj  &UwS#2kÜu75"6YwSy} 훨o'PKܣ䙬xPK!*,res/anim/abc_shrink_fade_out_from_bottom.xmlO@Y `1(\M5?¢o״|'}3ȡ+>uQt "68 \A#x3_VMGb̥q1#1%ˊFwBOf?/\7Ťw9cn)tBi8 9ٶYf\+|:hHV(ety 'fzsƆ> `J3J2),4p4Aj:gw< ל٘Yu/4PKUH%xTPK!*res/anim/textbubble_in.xmluN0IK 1tCH J YQ"8rލakEi~ww)7d]&3pA]܃g&2RתFi<}䪢(zЪЍe3AA`TW*JS3c$iV,EJ-}46ZT "71 _D96Bԇ8f1Ewkӈ{^{;FFNoiKwfL{zc7{k50z]v PK0m%hPK!*res/anim/textbubble_out.xmluMN0䧴,X ĚE KPV&18ԡ>{4c . 0 F; rE YC&uZ;ceųծ6-FGkź4ԙm:(- fsmlt?4r[pYt~d8_ y#r'${OL5q,;~4D^^GvX{MҘy{=yPKzEPK!* res/anim/abc_slide_in_bottom.xmluAN0E4MFtU#uQ VKF4q=c'!1Xo,{< ^ G KqL\kRjۛ<* kPwv }pq)J׻+֦fjmGmgM, ̷"J, )sJ&#k'{?Np4sw+?ޔzPK D_PPK!*Bres/anim/btn_checkbox_to_unchecked_check_path_merged_animation.xmlUMo@&mR\P5ήmBPP!ԛI $HUr3^H0kAFO~3;yo=jP/KnïE+ x!;xx51qպ$'a j n8w~ x}T^{Q{889| ^ٮtToU ux5ӠqN:Y7(M:z\)F'qwf6, ਆep{鹦mn&eYUp Yu638,#|^7N'ݝMNE9sŀe&{'F|'^òg/Ț3)cQfڔ[ dn2մx6p,l: &x-vvx-z;V'Iư АIF+7m#|ZMJvݾ"?<4m$x*lC:G7wOu9Wq +97^5\__>D)הY9+r*@jʑ9ODV=\Ur9- Ve5髬Mhv_E͋η&x]앬@WJ=Ƚ9Q{YZV|u6.ƅ}/V꿜'SPKI< PK!*res/anim/design_snackbar_in.xmlu 0OjӂPɱC(Ύc#>>E{9X3a[ 1'ĞnVVs۸6 e}4-m7BP4jYRZ\GBw؃K)$yT}#w ܿ}W;zs?[O PKuc8PK!*res/anim/abc_fade_in.xmluMN0Fi\TX5.j *7Tđc]=gCơXOc5cGP  !q+2#}L&U ڭA_zmK,% 4U}Һ[EmE(,V֦hWtz8(ܲRD|O'#aNɈLjҐ5ŗo'<=Gfz?3~PK_PPK!*res/anim/abc_slide_in_top.xmluAN0E4MFtU쑺+ q VcԨM9f8,T\i7=  G +qL\Rjۛ<* kPwv }pq)JVk֦[zjmڝӇóYyS[y!@_OƔ9%q5LckPH='8dtֻdtÕɟ^o?=~PKbPK!*res/anim/image_grid_enter.xmlu=@ߺ Xy/`H O,Yċi_z[fa3l{n|W7j~;ٟ}PK?]hPK!**res/anim/mtrl_card_lowers_interpolator.xmlu@gJq qt$M5*6}sx ȿ_i)|ɷЎ1jёln@h.T|i%ާid"+ZC? 6"d_nW\ ϛ]7:D:P\ -fob0v7pܧ;D@ ^|eu3{!2ϧz}};_}۱K>PKCPK!*res/anim/image_tile_enter.xmlJ@gos?zpEB9+K$$6kgq@*~{ِco 'Dv鋈#:66icULh;%t* %˳8}ϳ2Zp("H44Ѻ<jĹf1[<m*ls^Wk% O?,G{sxo|bB=0~M71^٪zn}~X1jmVsow?:FҖfO쏽PK;d/|PK!*)res/anim/abc_grow_fade_in_from_bottom.xml?O0ϤB!`cPӁ@G&Zj010123s(!~^3ȡ+>QB|MZ3p:! L|Je8~""F\ń,+ I.GyA$ƝpKDfeGဓmKDɵ'H h O*ث`qNWK{Wy%}mͰo|k|E.&M5JޑiV #VӔIif 8UНf ݓb 6rژ.yKN0t>l<PK/xTPK!*res/anim/abc_tooltip_enter.xmluMj0 JtEQD.6-#+,rgiվ2iyc7f !3N!{4c . 0 F; rE YC&uZ;ceųծ6-FGkź4ԙm:(- fsmlt?4r[pYt~d8_ y#r'${OL5q,;~4D^^GvX{MҘy{=yPKzEPK!*#res/anim/menu_enter_from_bottom.xmlN0IҦi?0 ƆY KaAh(1lH<#3 ,lHQ܈O:=ױA6͛D͒Z}V,%>h \Kp n- T*݁@!v$+T(S!iѢz=y9 Ey=n)TLo^ODOR)wzϩX",+:vhyٗ2Xwݨ{}mwyp^䦛-+55ȓh!C>tl;+pxO!xoC[yר~e ,LJ‡J |O  #R\FX/åb )\~ۖ}&Z,[.'g܎:%f~@i#zELX!!BސwREC1ʘ ZFc kژGUUR&@.3U_)iAa:Hf'5Պ/ݝXh@Aƙ}h$i/tq>?w}+ GUWއ1/Csu2PK?NJPK!*res/anim/menu_enter.xmlN@grQ DGDH4T4I*q$k %@AEIM  T<bXGw435ȡY<0:8lXK` AN8 \w>AH? EK㴏".b@vlA8'n'~|dK73wObq{aP",+Ht۴Hy^ >Շ{<<"?͖FKtZی pnCI~ll&m^JczL{kO/sQ; V97_KC]ac7PKWPK!*5res/anim/btn_radio_to_on_mtrl_dot_group_animation.xml͔J@gMMSZԃ')*R^⡈ތbM6lRћ/݃xԫ"OqǥS~0 &C $b4O#$R?&,X+ 8W܃P,~e N$$YV#> gN÷(uc6"2qߟo7Nѷ78A/17-$Br/zSuu$6WH ;d PK6 PK!*res/anim/abc_slide_out_top.xmluAN0E4IFtU쑺+ q VcԨM9f8,TSi7<  G +qL\Rjۛ<* kPwv }pq)JVk֦[zjmڝ,xt|<)󭈼wA _OFʜ }r•?f15 d($ŏdtp7xK2)PKHXlPK!*?res/anim/btn_checkbox_to_checked_box_inner_merged_animation.xmlUo@~gӄPW:ݸNX ,T(b;r\nm'fff ~ ,}NvZq|~{;lTxU `1 qa ###I*_ Q{؍q"{շ?rE%Y{p t) yWpz~zti첋kf.WOV, }T_rZb [Kf4ev;k%7;]6i)cj&6 41I/;,1s0eGܒG\4~AܦlOc,gl[{Nױ}6TI3,Uzp!Zx*?9\B(F&:|c ;;8Z؝Y5E7ȝ2a|ԛ^HCS Qa!=D7wOM1qTq!$o/,ׅ:Y15>{ Pdpdm~j"r99p**V~0sfU&UgFf+<95yÞ{NB"F$.؛֔{@N_BϹ~[K#O8Ž7h~he8;g2PKPK!*6res/anim/btn_radio_to_off_mtrl_dot_group_animation.xml͔K@MS[kQQ')U"HADt36pb7wquo7mΆ#ڥ/|7]>2K;u|gח35Eav)om z3FnnīΦgd.g0+4/:byesYgS>Sj֪BrԻlyu@f-YgS2kY:2/oPKâyxPK!* res/anim/design_snackbar_out.xmluM 0ߴզ \vѸ..C?x0=N%"L yq!%Vm0j,5sdi m!sc]Ru$i]J\e;9,iUhFg<ɀOy.{y/8߮LM1EPKu8PK!*<res/anim/btn_radio_to_off_mtrl_ring_outer_path_animation.xmlJ@gڤ֢D=IP(^(^bcll|;6{fINeog65ȢrV:X`Cp%^ QBec(OT:1?'Ljor̆R\əs rwW ϥv{Tx`Q}' m'ڒGnn4 nÈZ-RR <1Z]#x+1>'Ě0-Pq,^ã#G^ҞxJҹ/sesfz^3 b͘s 68yiϛsznC޴9=Y=7QZgPK%rPK!*res/anim/abc_tooltip_exit.xmluMn0F)$1RVUUŚ uSћX$U"H9fςC= =T8 u)$A% %;IӲkxTwƗdl5Axc2|^x߼jn2"l[=LAyZD>ɉ|?F;zw1fm .]:7re8S/PKPK!*res/anim/chip_in.xmluN@gYxX\grőXZhH,ns` KGk#l~7p9D蛈&dh3p  xi^TתFi"y䪢0|ԪI #e h3IoTWy̘2uYrHON&56ZV o0As1_Dp68ݏf.LtkӈY5xrhkn;gzg7[3^|~'PK_p$hPK!*Ares/anim/btn_checkbox_to_unchecked_box_inner_merged_animation.xmlUn@ӄR ,XD8q,[vؠB;&Ė"uVB` {~<~m3!TbD'3:sϝ3sX57`w "Fv!i q"!!"TW>">#N??d:v I' j׶< )"x9;Ax؞:Lf{ptzt:މdW8Vq8U6.EKS)Lb/,^J鶻eF'aՌ kR$T_̳pTpɔ#) K3lQ$(g*ooxB^ ^/4K7Niv P5JU(QF WtJa9Q3lɌ\,I?yDўo2Ku?әԞYP{M;8nnz_:ð?L s'C"A>!BW7w-1u uDf&(rI a1Qu6/l@]S:Ht R? \WC'pՔ8;7Edgq9_^[[%gu{\+pQ ߍԾ>D(͕_/sr oPKQ8 PK!*7res/anim/btn_radio_to_off_mtrl_ring_outer_animation.xml͔K@55MmբN"E ..8flmrᒊ;pġʇ{~ry nM"Fd1)JC;3(]?2m',ّN {RxT(#G݀7"28GM.]ߔmRzEAݶ%p=׶䡭oDuL3l8m~S2G1V2k7>' V̂/v _MUFiR-6 m"[3Nr9r1F$z",cB!o;"!e&R@}-1t5m#j*y NTMRY郴$0h$֣jŗvh@A͈5o#j̾> (yZϟ{[Z'cPK[4PK!*"res/anim/menu_exit_from_bottom.xmlO@Y1nnP㢌N:@r6״Ma7rMKr/߽}^ te1ڣCF _S6. \.@#xS0ߠV ʋB9JF.*c0=j6c_Dy87u/bz/uX&zgl[EdB+b|_9Eՙe岰Yi)Jk$]yNMަ絹޺iwA> d f5#s.qs}p;d)N%8|qx? N82e3?PKocQPK!*;res/anim/btn_radio_to_on_mtrl_ring_outer_path_animation.xmlN@Eg<  T(HS"44 ZL"&ZoH Y~XA"bݝY_kI"FuJ) p%뮯 VBi:ci+WTڣ1?£J%{BI1Hp&g1+å_)\ZRe찝,³`hIZyeE\1+B%Ő_3e=c|/@AY߈ Л=%tD=szXUNQ7X2sdtRXc^T_H3fn3%PF{i x.ܘyo==s;/9M3eΩ/PK{PK!*%res/drawable-hdpi-v4/settings_sensors RIFFWEBPVP8L/# He-@ 7D I"qBuvn(1C ̈́="V5 uGxqqss=}6LoiqRp@OCGđH"RTPKBEPK!*1res/drawable-hdpi-v4/infobar_accessibility_eventslRIFFdWEBPVP8LW/# Em#9ßΩm T ы#½P­L^3cAgwVB笎ȒPKruqlPK!*=res/drawable-hdpi-v4/quantum_ic_play_circle_filled_grey600_36cRIFFWEBPVP8L/5@  m$INuVݧVߴuk[;Ŷ݁m'ìddV a35{Co?6h4-<#x{p$\W񍣏6!ZqdMی[V@;^0?xgw$qqN |lH"B1;#FC[_⢍xښeigN!-G)1? Zqmhe!\Ms% D$cb8?#b*$%@<VK R$i>#l` VV!Dܼ'@&]1])h' K 'MPKu72PK!*,res/drawable-hdpi-v4/ic_skip_next_white_36dpIRIFFWEBPVP8L/5@ 5mIjVL^u_Ln&`˪?m۸t~xɡ/+ WYQZFFF>~rDhldlЄ[~5eӮiCl(kr ̕3K&:޳OGPKBaPK!*%res/drawable-hdpi-v4/ic_cast_dark_offRIFFWEBPVP8L/S3f!*s* +VIeN4xc=ɉM,X0*7pϖA&$}=(Eq>` \'TE1E}d$$6&Q`tAOi؄O*J `bw _ 1IGO!TRQePKcPK!*2res/drawable-hdpi-v4/ic_account_child_grey600_36dpnRIFFfWEBPVP8LZ/5@ @m7R-~E(gwSm>;cmkv]lX&x=`ce^)e,@IN1ȓ vA52\n\|6{OO%'ϻʫ{BzV&h6yʉȋs䜑 G~BsKH ӄ#$21Xa9ɻ#p3ye3,?X=V}ELm8͒=*V w0~ h޵V ,wPi ƾT(0FFN fS7F]M$L ?(փ}X ?~1^5rpFG;sidK |˔.̘:)b{]X_VT\/0J޾ƃ`}l$/,j.3nt3BŲ:AgLԋOQ}^ Ds69WlDz"z|b=oPKZsnPK!*!res/drawable-hdpi-v4/ic_edit_24dpRIFFWEBPVP8L/#䶑$I<{$-#53mծSHg۶2}m(R?kŹ^)?0x08|= 1mJ]);xK6)[rƿQ-8ti:a>e^WmHYƔIS&lK۶VaOogjŽ 3ob <$$l$̎&=Nˍ~rDhldlЄ[~5eӮiCl(kr ̕3K&:޳OGPKBaPK!*/res/drawable-hdpi-v4/permission_protected_mediaRIFFWEBPVP8L/#@$q;uv:)O wppiTK%\4q !j-Qxlw/V+&GТ% /pLXṞ6|\UoKEC=IoGh8frJ57cZtrM''oA?{2t}@|3[/%YkzqF]J| gJC yЅ:衃!^.@`<>lGʒB>(9MRa 6+S$n| FHAչ|o>9Pfw!̄tTB;̍Q,VF'(gɏXm)&R=p=U%3+!uH{'`S ,AxLl2`O))NPK2Bp3.PK!*3res/drawable-hdpi-v4/navigation_bubble_shadow.9.png]Vy4]Ljl#D(`Dl3eNf 1QK{|νoo/Q( d}@;H2~v`;P1(.Ȋë 98zI? ;ͩ8.?}SPɕ<ܸTjUD_%53¢AՁT-*TWo4FCtNtXx]sKb0ȸpaWi-Jym}o LtFDqq2)F&{T bZ7<'eC_jƾ4?hLuOr 8ZZt j:ЦcdY>jS5W PgqoAUwo?P=ޔ6RX H?aAHixx z-l$BWg 1 !'I2e(4*G -n|zI97е7ur7?7n}#v*g^P%!5+榓[dp GSB5iCIB"" "Y؆r҄Z3¬K?wOk+{=R-U\|# DsVbn&#Zb}m$N^. G -EzxxN915$XA 'Fa_vhVwNKjpHLnAJ[b6}=yF,>ev[8GV}Y#wv8-PaƆ ;sO-, %-?qL1'a*`pU"LtSL?Ih~Uz ysԭ/ϐŗ7lFUSxi%kA$JBfEoJnʷ|~bߌ.=(T ǗGiyoPj g \!<~#n+ *%ZⓩzB*s!45}{nP:ϾL,G2w8S)/k6l$^gS!IO Dx!1K̸6'E&f@ ԉͨQBvZpL/fe0xx(b,3ώh,x< |k֙N&?줆])AϏAǴ'[&2|Y:3s8.ߋnGYպ] /3^e6kTVC5G9לQI̘BnY<}N"1vʁ+vi[' ;1JQXՐ!:ŷ.`!:qbQqмXm!axTjwFzvYǖ”σK{7Dʾx9GԜ&*,`=7ҀV1Xoۙ%FJ?s%)%-Y*P_wL_>5 Mk= !fV@QTAoQ-7]v{2ITYP lLg|7Ѳ# )juoեy.X$(z.2)i*a&*ʮ ^m g6 C`p+w/ٰ sEæ{},՜pd:R~[wO1By?^[Pm W/Q_j#ABТO___&mKC Т}UUr\? +V-&"Ի_cQ$+ż`=Z=;5vYlij"8|I{!@~)_٪W=o9j/;nvMe.0I-ukoaO2Y3@G e9Q#ǹI+V(`45>a 9WZìH Ӗ*E+I[T~F VqK wK sEҋo4v] r#Sˋ`} ,<+6 ?p8zGp̍k"hqŴ!ϖl9=a <:e.J>Oӄ*oRĹ-14 ka//K&$= Z^oIT|嫬X 63)ǽ̵1H+ 6x0n$7qp _ay}`M$\bj$1dkkГ`pR۠,Kz$KuJ\rw&pA/oWUxqkGgg䋕HBf'.TX(֌3$4N:8-99mFgp棷A4(*${8rN67,;:$ϙ`PPhR4y4h{6+4GOXtAd#Z0pJe̿xEsM\@bct`.nBhbb ױbv^rFܸ Vwy0l߳id-T."@y@$4s՝4-8߄9lN8Io8'W}C|I0yՓc j"gU}z3Y1%dDu,y(%_e[#X6s0m+'f|( W. !9 CZU.Nl)ۮ&rX例%) f^BozI&fyfCc$jǢP(})qYv2ѥ>g PS꾰jf;e$iY9߫W+{S'n2ƨXܑ=>*䘶#'IҫɎ[1ɶ{ϝ۟jU'}B@3? Fܽ*JsF|9ð^_g+93U񷍍׽L'X|!5dS<{Xw03%?; xQHjtCrl,p/e,:=AgVh\eQP J3wx1_AjS N; G&u mh>(Z+lwQ[H9R{V iQmp+>'cwV NW('}T<µ5fC%%dsxxOsdPKʉɞvPK!*6res/drawable-hdpi-v4/notification_bg_low_pressed.9.png sb``p < $o$ s@|CV"H$301q*9X@(6 Dal`*6g9_("q9JnBjj޺~zz:ͩ`UGWۊ9@ysJhPK%YPPK!*!res/drawable-hdpi-v4/webrtc_videoSRIFFWEBPVP8L/#۶$yg"ֶD)@SiHˀ. qapwF۶q]iZ(}"UBKuU#V k"9E4t1G*;"E%IAA Al]`ea BPKtٱPK!*2res/drawable-hdpi-v4/quantum_ic_volume_up_white_36gRIFFWEBPVP8L/5@ 6Iӓ'pmk;Ķm[m۬SvlFtgyq 8| ܈; 4Z3RDeR1Q<̘$Uf̒A lS{=io47rC'E<l_!I.TC ,$Gn꣜YpXQ5BƯ=zKaZpdg$gfկE2D`Nv{Ż)ΏPK0ٝPK!*%res/drawable-hdpi-v4/settings_storage ts```wu  pd)H_,l:at\6Ki|&'\RuXaPKJISPPK!*3res/drawable-hdpi-v4/quantum_ic_volume_off_white_36;RIFFWEBPVP8L/5@ $IrF@armiʮٶm7ڵ6;lFSM.n#)RǴ$hJ ;(3毲=cWWecZ(=(s~Rr"pIhe[$LtNN^~'E'i]RO2UD/D{!-;B i0`J7k6hr`~0V64$dA>ԅ( yrIcCu0ZDok$g%yv 蝺>ۚ}OglCrQ6q!KҗvEܧ@+GPK!PK!*Bres/drawable-hdpi-v4/abc_textfield_search_default_mtrl_alpha.9.png sb``p B@$Ry9 X@=Ry! LLL @RF[JW@c f @ =]\9%4PK]ӪwPK!* res/drawable-hdpi-v4/ic_vol_mute8RIFF0WEBPVP8L$/#ȍ$ɑ_igfG64{#ff6^z7 6Rf>)ȣ"r.?'$mQ_Rs6 Sl\SAJ>7km[OIL8񿟧Гnm-WW4I/h~$-ӉzIZiuf4y 4%DwۻS83&8ʐ9?b>f|)W(ǫrV5ϼK PK\{=8PK!*1res/drawable-hdpi-v4/abc_btn_check_to_on_mtrl_0156RIFF.WEBPVP8L!// p6$1o:kȵmn<QÐnR; )~-#2rHH:EE SH$ %J!P$JK3@fJIa$VAP `Qh r6AY9)B7jztQ/AU&, 앍 l!n6t 6Grd  $nm _ "!.? 5rbRc"XEPGGH$+ Yj _O?R찏Eq=^K=Y?|?%PKszD;6PK!*1res/drawable-hdpi-v4/abc_btn_radio_to_on_mtrl_000zRIFFrWEBPVP8Lf// HRZ<"(8IT_NW{U5 P$6mZڶm'w]Wඍ2<XB&HKfSdl?]iاPloy#Im:{JSbׄa^w*B\yp`":zݐ/y8Z}9@"j Ef#и=h.$, -9 ޴mr oY[mXmr r ;Cc+HZ%'KUr vS9iH{D]p}+? w߹?r838掓8q;NyPKqzPK!*Dres/drawable-hdpi-v4/abc_textfield_search_activated_mtrl_alpha.9.png sb``p B@$Ry9 XHD +If`bbRr402 BPlH=}d z8p\ONiPt&bٟ ~.PKZtPK!*8res/drawable-hdpi-v4/abc_scrubber_track_mtrl_alpha.9.png sb``p @,$) 0 q<R.y! L, @&@0432(D\,nR.!$f6|gTk l`e`|ROW?uN MPKۺPK!*(res/drawable-hdpi-v4/ic_media_play_light+RIFFWEBPVP8L/G 6RSJ~|9*m$IN5l0"m۰kG% wrBKAHcN!'\RHCJpH9={WYLMzn3t'Yyx/.Đ31PK? /vPK!*9res/drawable-hdpi-v4/notification_bg_normal_pressed.9.png sb``p < $o$ s@|CV"H$301q*9X@(6 DaZz=6|9cdWIx;p6FU]] jY) PKЌ֡PK!*6res/drawable-hdpi-v4/notify_panel_notification_icon_bg ts3```wu  QyX'2d[~d;ο곷x2mwx:FPK}:8PK!*6res/drawable-hdpi-v4/ic_play_circle_outline_black_48dp6RIFF.WEBPVP8L"/Gp۶ ً߳>m才#f6Om۶)< j|>I2Ԋ+@bݎ"V,#dEK#=P o..w):%X'20#&c&D!ǂbۄZN8;ep<"6.gR A[r963_]fg &D`$Fyj¤,S(P| Ơg14٬Qow/3b GT4(ܪ%*Nw!P~S tYgˆJq#;[AY,6*}`@S v :}"Jt8,-g"KVy()-g"Ep{FJ,8C" 'Oj|u):˔jz .iwF3?P-3\s]vCZESٽVte?j0A 9WVRYk9fG›> b/ #ߞ W.]#ܐ'AQդ?Y0- *(',?OIL]:8Ha&m8npq%EmD;DW Г-0xUqR 4ֿͧ+l۶Q]_a´sc| qqlB|{WBY.76^DcKLà10>q(ZlWìq׊$P34 y)r wȏC:ѫIK~x?Ey7m.yPKlӥ3PK!*1res/drawable-hdpi-v4/ic_more_vert_24dp_on_dark_bg`RIFFXWEBPVP8LK/#U$IouW=DLHm?WU٘Ѷm\ml_)#/7.Z9ꭸUW_ (PKtEEe`PK!*.res/drawable-hdpi-v4/ic_expand_less_black_24dpbRIFFZWEBPVP8LN/#P۶Nr.BAIܣKl҆ƽw D*7~,{fESvI\vqM?PK$JFgbPK!*5res/drawable-hdpi-v4/quantum_ic_volume_off_grey600_36;RIFFWEBPVP8L/5@ $IrFt@armiʮٶm7ڵ6;lFSM.n#)RǴ$hJ ;(3毲=cWWecZ(=(s~Rr"pIhe[$LtNN^~'E'i]RO2UD/D{!-;B i0`J7k6hr`~0V64$dA>ԅ( yrIcCu0ZDok$g%yv 蝺>ۚ}OglCrQ6q!KҗvEܧ@+GPK GPK!*4res/drawable-hdpi-v4/ic_vol_type_speaker_group_light&RIFFWEBPVP8L/#@nIN2ۂET 8gJFffofgxh4Si/0b.Y1kgFޝ2Tm$I+t' 3A@e'5.=m$@NZ,fcbpzj;nꔃvf5P#YAx,.&WƂPGSL%gƟ uÓ+]o)/gY_y?!SV!II=>x j/wӒfPK>E+&PK!*'res/drawable-hdpi-v4/ic_media_play_dark/RIFFWEBPVP8L/GM(jR={vFd@}D0m;M~G&-q6Rkd5f54~7R!\j[$y@$@42 =d!CzÙC(SecҒ*RDY"NrONebPK}PK!*1res/drawable-hdpi-v4/abc_btn_check_to_on_mtrl_000SRIFFWEBPVP8L// `ܶ#_.WڶfGzilA.mF'!)1 "(b0 (\@hJ0]q)$\ fL(#aSV!pjgl5c{rg/PKszXPK!*9res/drawable-hdpi-v4/abc_popup_background_mtrl_mult.9.png sb``p  @l$]䷻) ;6E9Ҳ@J ' ];@*$ $S`1~ Ҋ@̈Xg ̅.!Όͻc&Һ_;pVa ˉBM#w(3njylto/|ωD25vL8.PnvLT>+WyrS_v4IT*}z dP͉B{krp&y}b {-9o(XصUaF#kӉ?lO_Z (Z~LcQRQQ{T$0:P$onEqhqvT=awG,/?Xl>Ngoľñ,[[?Ln#ڛ9-<|w+y\XeeO`1]hHFaɗ9αg-zRj; \y$8kF5#眸"A )[Y1ʞ[6y֢hnL4V4ie+|mYMZ2{l=S]rϋ~1ɚLrҶޖgw|aYM:gkt\{&r3K'Om>hm(X+K/[zWc F/V^Ppm:}УxcᾃVAiF :p̑9ۄfrɿ9:'3+s/,|ϲC?FXԠ{uu3,"朙EQ?C{kci4+oWgobβ~yR&݄Z:_WX=ےϗ'Aqʌc 5دIysRsٹvŊN۹$Ol7{ݥvaw{jV5w+ڮ p|~wr:&PK3 =JPK!*res/drawable-hdpi-v4/plus tsc``wu  Qp{/_=3s>ؿ[ffPK/!96PK!*,res/drawable-hdpi-v4/cast_ic_notification_onRIFFWEBPVP8L/#u@$I+[t<ȳ8l.۶N6kMfl>j+Ceu#sqeQ/aum){=m]2lC%9QRϏʁr:_;4 sCkg"\>GU߭]h& L^H0t@p / `z : :zB? raoePi>rPK9PK!*/res/drawable-hdpi-v4/quantum_ic_stop_grey600_48 tsSc``wu   \;JNSJPKQAr0.PK!*:res/drawable-hdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png sb``p Қ $2O)6 ;6E9I+T@^O+IdN ǀ P:0C ~ib``tq 8t}ȱ3#)L-`!BO"ϖޓdC._WОz)<7CIԢ~\,z"m'eyoL&o\Vi~yMϪU3oo&d-K8X.l w碞,W-(^zPǡ^xъG9eu iYj׶RCJbӰ*;]ꨶdUY&"L"7Y:?!$OqmV3޳dUsvz'z]{CƔfOoڍKXMYtӥ.9-ᯟs7mjnG-cwZsۍ2|:^IqSHc'>~&.[gϲr_73r}kƍ mj򼞻'{a,t2G -aٻ}מ0vM߼/Ooz(WŽ)e,7N:˒وKM8ŕ#NxU'*tZ_/(uHM9\yszjy hwҾ{Ns7ūWPuIx1{l+ciV[mXddKM,{GmgVdhò;- \ `ڣ-9Sy'0[dY|dLPtsYPKK1*EHPK!*&res/drawable-hdpi-v4/permission_cookieHRIFF@WEBPVP8L3/#m$I'W̚3]j@mj~P69pƑ}wȏ`YuSR : z.gm[w\(t{_I8jg&A>)'tI(W>Yr"Sj_#0% ؁z9 ZQ[$jxj5)ߖk5O.m0P}.6&~\V(?;X0.;PK!*0res/drawable-hdpi-v4/ic_skip_previous_white_36dp9RIFFWEBPVP8L/5@ Ҷ6GNkm{/ب'`6X& X QFjd*HJ?L~rhSJ!325- N,аcz" #l3_dj $Hh:4&bK]w%lӘ0L<$jטnd[.٨F.n.K>1PK? /vPK!*4res/drawable-hdpi-v4/quantum_ic_replay_30_grey600_36XRIFFPWEBPVP8LD/5@ Hr#ɑWVtv*별G^.Fe5T1Y*WPg-|\A,*o4/JVEoCFUzp\<b78w}8 {U>..\5 ,6̻@sBPz@gɞc̠ͩ7yfPKp0]XPK!*+res/drawable-hdpi-v4/cast_ic_notification_1RIFFWEBPVP8L/#㶑I'mUoA2P0?X3ʒWt\/G@_ ѱ Bf"-"% @BCY`s .A7LAB'Ls.!#{P@Ԙ A+!`Sd \B`yoSs:en Q HчaDT 6 \SPKfPK!*/res/drawable-hdpi-v4/ic_fast_forward_white_36dpRIFFWEBPVP8L/5@ 5$IR:wzX$$:i2իwg000 ~.״mGS/FWAٷ|h5匙od-ĮRڬ{$5sמ2s"$oh+{'1{_jH"P;4&1x)=^DfODG.AA<וySCRKku 4xTx:Ȕ`qfţPKDhPK!*$res/drawable-hdpi-v4/ic_cast_dark_on>RIFF6WEBPVP8L*/S°m9Kv{mq0`6A#IKy_LZ^,af ÃQ溭oj-W-5L^kX.NK`UZF=ڦk 3` ڶmlYm6r\cDZ/~nx.YSx{ctܒE0!#iW ֥V<i0Qb;u`g~}8j\tSnU#bšM5L2Y<#,%_PKRMC>PK!*0res/drawable-hdpi-v4/quantum_ic_refresh_white_24RIFFWEBPVP8L/#㶑iOkj~#V۶ݝ (]kJwf` b+x*Y]+7yzX,\mm72FÒ nXlĵ0BGLؒ#SQ0L pw ~2-tLc;(p|5T[U@nn7  2[r^@`.-{ 'KNI )/~2d*J̤+ia,xE;#KYµ{\KeIPK!PK!*=res/drawable-hdpi-v4/abc_scrubber_control_to_pressed_mtrl_000kRIFFWEBPVP8L/@Pж cb[x ddVme; e08AP!>J)+G ZYerE \ }).O ) "z_` PKlPK!**res/drawable-hdpi-v4/modern_toolbar_shadow ts3a``wu  0 6IX2h׼pcҬcs8p{urPKH|><PK!*2res/drawable-hdpi-v4/quantum_ic_replay_30_white_24oRIFFWEBPVP8L|/#5@$I+=p𮈀m۱mh[lնl/ͶmmoyLR7ni[-Mh[W+kKnP٠uu K3PH/_H9dM > Wg L*4B[0E$(/l!;g`:# 4B~ eGb(ݿC{x3 5Ϟ=Sվv=-E3J</!{!v 0Al؉U wR MZ%@T/H?1ۑDYC(? PO\Z6rW*k4O  ؄\Qcχhbȅ3)=PKzPK!*(res/drawable-hdpi-v4/ic_media_stop_light tsSa``wu   gW +kr3PK.,PK!*8res/drawable-hdpi-v4/color_picker_advanced_select_handle8RIFF0WEBPVP8L$/Fmz=u<$$ɪp~4ڶU+P@!DgémU= FL`@TcGg H; P?hC(hB @Ah!Dm" E@@fkv~Xti1)62ree>.W}nZ(bXEt>K?ᆱS$$AP0[>n( I`X@\1L\xˁdAYEPG^0IdKMIDI bF]]Q9}|ڿ<<_4&nCm3b vјL_Ϣi[i3[թ=_#qP6\y'|BD'`@wեfʀ#ȑm[}g&>сO܉5sw{s% Я;|j`CG+s =.btqHݪ|S'!IJv 'G[/b7a$j[׆;a;x$nYhвnĬ(4pB%BtMl־ou׈.FV6m?kdjRP礎٨q jNPqCV;E"AV3Njih#;Ijs詋R47G80:UmaA'H җeBN9q\cAWdBPKz=8PK!*$res/drawable-hdpi-v4/btn_star_filledRIFFxWEBPVP8Lk/#mm ˡ; S@*!A#IV{bgŶ$)l,dD4[Hn͢7nS=I|ܭ3Ϫ9|1wӁvA< Ș9U |S_RI\L9IWrZU7Ua&$ΘYHQ ss8xD30 Qd\ 8RTN* P& cW0b Y䊳"[a6pYwQBE+3]'EuaPT9/rU$" Ř*F.Qg'X|B1΂NF/HsB{8e?PK0MPK!*2res/drawable-hdpi-v4/quantum_ic_replay_10_white_24hRIFF`WEBPVP8LS/#Y$)sSpHbPm;n#yY%ޢu{Ͷۏ6mږW݄~H{=Ҕb*?(P" uF\Tſ;9 ,vb%?\RCbcUʱm,^@hU{U o QbtS"ƶƦ6lcm i?i,]x [lKx+c0JN\@8KX(aG̞6,g1(;*6ޮAHwW M/qPK&( mhPK!*-res/drawable-hdpi-v4/ic_menu_share_holo_lightRIFF WEBPVP8L/#Ǒ$I%K= ժڶ&E1PЎMdT&" B amHNҽ>Ap)Rt*HfX*2% DzS6Jb[Jɵ#$T߅Qĝ87mIv '8,h&go :I_2j4) 7х( rQ%x4TKxfH5;&xalCQO2Us6|96uF6|=n8otB~;hې|A:X& i-/ӚD].kZX{i%tk&A@8}QrJ_,PKELPK!*)res/drawable-hdpi-v4/exclamation_triangleRIFFWEBPVP8L/#58nɑ6dﮁ?umν"ބ^lY0` P S/mQ[ۻ͟ߎr`u9!FmF6"f@\R +,r' 먉 2G"d0fX̸*05'c9Dnwoeg Q&è炚* P4F>Vh08[%wPK+PK!*(res/drawable-hdpi-v4/omnibox_https_valid|RIFFtWEBPVP8Lh/#PܶNg65Biek' NM |!2fu""+:X`GKd裠Q}Jl+PKH`|PK!*<res/drawable-hdpi-v4/abc_cab_background_top_mtrl_alpha.9.png sb``p * $9D^oJd&&N GZ%Ģ@, ̄FniU=]C<=(`sxÚ?*x  _O0 d:&PK@`PK!*.res/drawable-hdpi-v4/common_full_open_on_phoneMRIFFWEBPVP8L/_$9R}xjDĶeյNsDw'&@0pHQ ? @)3066& >F̃DR2.')0G¿?.|5=~pǂIϺRY.F&%h]d0pC%N!0% Yv*aO5H=f30;t]\.]N^n_g[[f/\/zo(PKcB~PK!*6res/drawable-hdpi-v4/abc_switch_track_mtrl_alpha.9.png sb``p @,$ %D^;0ڱ)?f0 $c BX8 L`X*2FdRF$ /B.!N1kvpiR`._bT]}fOfeYÕ˷{ߪ+tg 0<Ƙr76W{mEiv}7(]y~%gLZ?R{oya³E%~=>|֣}[eϝHfcV _b 2OW?uN MPKPK!*&res/drawable-hdpi-v4/ic_business_small tssa``wu  MxZm_ķ}G}ޤ2m[{Z7EEKu>?òHjQOǙPKDOLPK!*3res/drawable-hdpi-v4/ic_mr_button_disconnected_darkRIFFWEBPVP8L/#$)I[O Bζm\rc۞2'ݹαljLw3rƑ4mo<"HV5L0! L5e g -#HZA$ME%ԠY0Ad:*i"&̆|a0w[LnHl$-ʕKDx.*đgV$=` &I91sscT5kHDn+ v F&)Vup4zHR`1\q&$8&&31Y3%]]0s o"sbL+dl0J䳢`W\h+64Epp} K[Wņ=$""\%F|Py!aجZ3NG|FYQa(5kw%OSz$?e7>jV&ʍ3,?TᣇD+#\|1PK&}ԡPK!*res/drawable-hdpi-v4/btn_close{RIFF|WEBPVP8Lp/#5$Iy/DGHb ^+pFcOX&g6Yܽ?[eA8..qdʘXrgbzn۶_{ PKs}NPK!*3res/drawable-hdpi-v4/ic_vol_type_speaker_group_dark*RIFF"WEBPVP8L/#U@lF47ͻLPm;?JV2ٶʹcn[qF9y>ZiK|%+\u*fn,&pֺȓB]x]rڎ<8)x[8 PB`֛Wx S[̌k֑İAu13:pX`3zuß.! >U1Pxu.WH#RJ )i~ݷ羂PKe9/*PK!*Ores/drawable-hdpi-v4/common_google_signin_btn_icon_dark_normal_background.9.png sb``p Ҟ $ )v ;6E9}@$3H*9 ` |P"Ă@lĶX$@:=W1;"">n:ZGU5"UDuAC%f^urbVC]#%8#`wߜ|([-Ӥ|?Բo+vXo~}9t&|jk_GSw~g.ԃvF9ߵ*ZgL?aQvYkFHQIR#b=CS|Ĵkރ07?4`>+as$}ٟ;s%IeN7+m(uJ#4W2?=YD J|p/N6|]xJzοN4Jb p̑ة^!Ъ*(f,w$gfl!\-u~۪8]9Un W;*Vs;@hn*%A7Rr牗\u 6Uy:gmU/-'o8O~bQNvV{-ɮ g+COL/q6PK9S7[VPK!*7res/drawable-hdpi-v4/quantum_ic_closed_caption_white_36RIFFWEBPVP8L/5@ HN@L̰/Umk|Kš"̷L Yà?; ZR<5nIx<5G> q0[zߋHn8 ^DᇶBѻE…L؏G ؑaޙXV<:uȩ 5}O#"H$ҷn}/R=ez"8OAC}P * ʠAPKRkPK!*"res/drawable-hdpi-v4/ic_vol_unmuteRIFFWEBPVP8L/#u8rȑjM-o8k xtۜ8"#p|.h.Ume`m(ޭ#|h9pp'*<9 Ǿ- 4pp9 ϵŸd7*rP)[罤lTX:*gh3Ug8C钙(v 0>k &#ڎH">LPK&NPK!*+res/drawable-hdpi-v4/cast_ic_notification_2!RIFFWEBPVP8L/#l[?ƹ_!uGHml۶'p@nPx k ];m Pio"[Xskm %=S6IZ/`'?>Sۆ8b"Wm px=넼}$:Ѻs6OuC_8f#jG bE5O ע lLKe/-٪PKIX PK!*6res/drawable-hdpi-v4/abc_list_divider_mtrl_alpha.9.png sb``p Ҍ $f),?ߐHR&y! LL @&#{bv\.!ד30222Ho{R) PK$#d5jPK!*=res/drawable-hdpi-v4/cast_abc_scrubber_control_off_mtrl_alphacRIFFWEBPVP8L/ m$9RQ1YUᅳV5J819\ i2m%9fE0J`7r ? ePK) q-(PK!*(res/drawable-hdpi-v4/cast_playing_square;RIFFWEBPVP8L//m֦O*WiniU{v?؛  :]cMXTpt8V KE@jNM9,\79./ 䶮(r^}|,,Xߊ)|}@.hӑ:tOMl`Bl6c=~a|BDRew Yu4n/SͶo:,vK$S ZT"͐1$+J5˳ELNi~e*g}lC9;S י|b#6iC6dg34yVFv)~(brCU{**0URXM3+eWV_2"Wyv=[}c8ȺVޯ\Y`if_WlJ=aVY.%R`[ +c3*+7jy2 hV oPK44%PK!*-res/drawable-hdpi-v4/ic_play_arrow_white_24dpkRIFFWEBPVP8L/#58n$I:[:hA Rl-H!Ը 0 '*PKLh56L:LAOP@ N%%F`"PKU3PK!*)res/drawable-hdpi-v4/ic_delete_white_24dpjRIFFbWEBPVP8LU/#6MI{y^hIʕ<}z1n%5%n /+-\ (žVc肆PK{AsojPK!*-res/drawable-hdpi-v4/ic_arrow_back_white_24dplRIFFdWEBPVP8LX/#5nFJjZͼԶmND 7/  !NIԨ ǜ{b 2(Zs4MPKc:qlPK!*res/drawable-hdpi-v4/star_greenBRIFF:WEBPVP8L-/6 ]ݏev1Aw(H8~V:H(&s-4.Ds@qU"FrwE^)GtOj!Z?97%HFQ?gFs}ɠ^:%rI#QO*t,ڎ\n {SU17v9.GNhM66u+m$!w߬DfMtt6Z l(Uª.L(L5rPK͔;GBPK!*7res/drawable-hdpi-v4/abc_tab_indicator_mtrl_alpha.9.png sb``p B $w$ s@|CV"HY$3011)9X BPAf9v;tq 8 ᣽`?#.=.L l)L\WtsYPK\x[PK!*8res/drawable-hdpi-v4/abc_scrubber_control_off_mtrl_alphacRIFFWEBPVP8L/ m$9RQ1YUᅳV5J819\ i2m%9fE0J`7r ?_[{$731 #i$330.r&(K̛QXlҲc=%1Ixh#1$ (o`a ǜk@3?{# 뜻Rszk;>e-`19@ j~|P4 0[()bwC/>OHPKlz|PK!*(res/drawable-hdpi-v4/ic_media_pause_dark ts```wu   rwᬩ.gxYZNPK yY20PK!*0res/drawable-hdpi-v4/quantum_ic_pause_grey600_36 tss```wu  1MxZom=w[-&mpAIPnUjU.R.\AΙs[U~ ~IK!5Γ)*A1gN߻vV}d6sVN36[3ΣlPKg109YTPK!*.res/drawable-hdpi-v4/googleg_standard_color_187RIFFWEBPVP8L/mWܗ ]1_>ӆH]e!?1@"|2L 5DFSiPҐI"=Mvjrl^ؙ'_p= a2V?I l$@,!.ARG$P0uxM8D {+[tMrیu>fm`՗ɑmrmJ '; V9pk'3na H;pƼ/mی\{ۏ<\6 lv<,?nl~Ƙf/Eۚ]\hƺh*S$4M(* LN عShno/W%&+lc} pem JL31!EJ]? FD xOhB:V@*F*BPD<<3o(Ŀ/[?{K!O~q6Ȧu al-sB_t)gЇo̰97Wg\B9>9&; 3pLߕ5ghlPKPK!*(res/drawable-hdpi-v4/infobar_downloadingqRIFFWEBPVP8Ly/#F$)Ҽ/cti66Z H6αEPB ETA5nsLV,4>)ڞ4鑗i Hĥ'LbH `B|6N_PK.`,PK!**res/drawable-hdpi-v4/ic_refresh_white_36dpYRIFFWEBPVP8L/5@ $IFn*&2sd۶i}[۶" kQm@FjvɭAH^xqkIl%3B|[\l0Acn e@V IW|n&iQb-^&Sh^KVaDdnE{DQ`j'X=iH( h1s|_`,چ%۔VlcfƲ3POES⩏?jޕ"'DK1C1}trb oJ 2GTV GQM;gTg-UAsrq;4NZobR(Ro3Uɟ˻{W@GL{Əzow.W^z[A PKwPK!*!res/drawable-hdpi-v4/omnibox_infoRIFFWEBPVP8L/#IRnjSp )h0|dQIR^ffJY{G_6J &iO>uN9bt#;/%EKn &. ̙%a 0bh<::z@ibFH` ARM 8Iz0sÃ>>l$cG`rv@  #w}p叼Go?䯉PK ~ PK!*+res/drawable-hdpi-v4/ic_check_googblue_24dpmRIFFWEBPVP8L~/#m9x{ؙSm6of3ýV3|deL0i0I:>)d$F=Vs F mdy0:@AB[!}A5׋^nhZPK%PK!*5res/drawable-hdpi-v4/cast_ic_stop_circle_filled_white8RIFF0WEBPVP8L#/G58m$I:m?D09MvL]PqρH,4|bb%ϓX=4W w l M}QHkxF;4eh+ 11aDU;2){aP{ ^u7CoUa޸Ws<ʣOQ ~RK%J{v@ ligO9+9\(9*'~boN=SK9[L=S1L?k)cD?˟&zPKT=8PK!*1res/drawable-hdpi-v4/abc_btn_radio_to_on_mtrl_0155RIFFWEBPVP8L// "Mr`6eS ` د!Hu "3@,2!@r$IY<̴;Xw 1 ܶQ혡gĮDդ@QQџNbms= 7o&{lKLj9}vn3]|Tη7+q R+|MC|,b^~7U=Xsp7&_"jQ(^9qFp%Cu&jHvr29:)gׁ$Údt!['y k>A=Zdt, ̜ b(p'-"*lYA )S]#7ǰaq\8&ٿwh?5{11s4ak7#~PKPK!*1res/drawable-hdpi-v4/notification_bg_normal.9.png sb``p < $嘭D^oJd&&N GZĜH4# r֬ʋ{8p\OILlh׉hL\``dt<lOW?uN MPK,PK!*;res/drawable-hdpi-v4/abc_textfield_default_mtrl_alpha.9.png sb``p @,$Ry9 HJb!@! $E`lB3O -q>9AUY菺p.+C#ɹ+ ~.PKD7o)}PK!*.res/drawable-hdpi-v4/ic_expand_more_black_24dpbRIFFZWEBPVP8LM/#P۶ψ"l`fgϝ,[M|}4p0MjU]u[} PK)2bH(D^ƙ9E1ZE25e )h 6Ru2I&@"ٽ;yoH3<-o=o-o-Z:(ܢIjD[Ej PKm1]XPK!*0res/drawable-hdpi-v4/quantum_ic_pause_grey600_48 ts```wu   rpT3Y|<__'PK20PK!*7res/drawable-hdpi-v4/abc_text_select_handle_middle_mtrlRIFFWEBPVP8L/@lȑyE7 <:^.Ī2m۶mcmN@gfxgް0ss'-Q d~g$Y'=~˗ S? k%D;;iEUQvqLJ]χrx$Ll:N0 *٢>}=m}sC~jy5Y5//GK PKk=o PK!*4res/drawable-hdpi-v4/quantum_ic_volume_up_grey600_36iRIFFWEBPVP8L/5@ HnI^U8{hupmk;mTmNm۩{mU9W0ymȋ|o80+b h+Fܢu#*GrDI,Hv BeQ L#{& -ZrA[H˝V)فGo`l9!Nσ$)3 m/V9FJ5{F@*,EE6ގή y(¹c76XOvPKPK!*res/drawable-hdpi-v4/ic_search:RIFF2WEBPVP8L%/#ȑ$)tY9z/SUZp0vVNgt m ``V:, ۶m$/24 @*̥#=wiÄN '"ޕ"qO[r+PO,lope^1G9XjE7ǫ`ƈW 1 c^1FE;GT`14+es0=ʓlo]yTj F~U0צe(Dg9_=Nv*s?xB:MPK!c?:PK!*-res/drawable-hdpi-v4/ic_play_arrow_white_36dpGRIFFWEBPVP8L/5@ 58nɑ򏚻{k*BQm9:P)HA$g6"ib _2j0ՙVF5V5 h5*,wܰu#nu|dCkH(t"->w s2y9@益ag ePK)PK!*;res/drawable-hdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png sb``p  @$D|? $ sx Ǧ( (k@J ' ]ֳGRTH^AH2BQj@(Č?;|8=]C"aw@){6en[r"MڢƢ 2a*3ڗhn>|bB[<_z'RƦw5/:^Ss57wZH,Z[uo''{J8cNuN0,^vᇯV?; wMtqiĵﮦ~C)/[EC/.!G*|oź>xo'͟y@<)Ob) PKG(\2PK!* res/drawable-hdpi-v4/google_playRIFFWEBPVP8L/' m&8HR6hNPx]k3bPvmR}?w"m$ErC- |Aud+ޮ¿!ۑ\:㿃/+s{TU*>%cScοRHJc' IJ,^S =[o8>˓S`{oXԙ#$:""k~_直sQY!v/Lfe%Sc{t=^q?/H׭H?[h"ѝG{ FO' &&BxeDTqj)0 :61f3WxV@ŕxĔ&p*:^ =@l4g/3HT,ފ(wUgSupb8%%}b;b:+|i`#SOiVi")Fр(L©8J4I[!d󀈼yᙸn2}u2cIľOT7=h3=)&&eor~E!èz0\ MZn&.OW@TD>A+Ƅ(W[ ]v\[2+YK4g5+ab]֣}U*Ok?d KPK!*:res/drawable-hdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png sb``p @,$) 0? R.y! L, @&@0432(D\,nR .!$V5|g{ǒfp;+-veSBPKFPK!*Ores/drawable-hdpi-v4/common_google_signin_btn_text_dark_normal_background.9.png sb``p +ؓ H Ν $ s؁ dHU\i.+If`bWr4dB,*& a fDZbpiwuL=]C*ny[$QϬ[*X±˻EB,WӢ Z3t1w}"Iᒢ.ǮbMuM {;ܑBo7όTڵ`{l] _$2M9D͚Kw <\6Tpӝ"svdwϧw|{Ҧ XZ>~/{G~kۊگOwCe{;u_{wGm.1)Q}ixykt 5yӇO^7yzI]kwb2^R5xjտ_}%B}\)}*SO/U}IAyߒqzqwmnin ^ܝy`ZF&.&V   LD2464~Ϛ֛e [߯iӼ6MzwY.9r˦Y3ՖiY:ݺ~ҧE'EeV{JM(yvqpiy+EDϨ+wR-$3tV_\u;6%go?dI뇾޽9g-{'}zUuLحMd4ck ovsN1LGwrN֝|Kkimo4郃5Z __s}ɳ>v<ּLzӹ,Dxyᶤu2f?CżY?;@ŷ#OW?uN MPK 9EPK!*(res/drawable-hdpi-v4/ic_checked_checkboxRIFFWEBPVP8L/#㶑iOgfk?mmM#$Oa*bThVp9-tz ܶmD%} Rvr]2DE¤Bc^>#QCTJ&5B3 e"XL+=:vRKy KH}BwJp;pqee _ |&:CR6i)!Rfh}j)(ئ&Fy*v"sI\krXXPK< PK!*5res/drawable-hdpi-v4/quantum_ic_play_arrow_grey600_36GRIFFWEBPVP8L/5@ 5m#ɑf{imG(;gVAJ´ )!vFR9-C_lkTFmF:(Ѫ8&FEl }3jp?$΂:L>ȍȍ$d:ɖ]gaPf;afYY ڔn$iH,Z6QPTB?h.qdCRʩmYXlw"1, _&C3Q ou&u) XJO}<+LH Nvi >{4o1DCW,oJyߢT$477|%  |\ r-̢Zol6[_X(V1.GSXK,`%C# fQ}3bf R t+@}זw.8+byY.ExVhO*Ë$O~ ADzp T*%(غ[OP[(*恲=FYeg< q@<`)@3[Bvi= ) l$+W!9_[xj"G")(rIf6'K%gI*` UPzPٰOO$sD> uri24@;4vԮZ.RHdW,Ln`eRhj+дW?($/Cjr^@kIgR S֕ ׶>G<}YLI5d:]ƶ #JgG 3>JobB|Hw(}o*}0> p$J%ր58+o~!S6`H}Y#7B ~2_G` v*g>YY{=ᴂ=Zϣrs%$zFX@y'u)fpP;:W!` <{Ez>ɯ+p >ZkPKX&[PK!*3res/drawable-hdpi-v4/quantum_ic_forward_30_white_24mRIFFWEBPVP8L}/#㶑Okg;Bmۦfis۶ʶ]NGi۶Յ۶$gȇdo[-U>rբ '@F-/-l#O՝B>HN{#SQm({{@+L:t{?A %(,?@Z2;<3S M 9fÝr.(j֬qeDTd5b͈jNwGچ.3, !|zCQKzccьD8*m~'Dҋ5xE)2VLldgL;c#8lF0|s#s^[ҥ˒7:Ȋ :@zFeo'g)S5yR7#PK@\PK!**res/drawable-hdpi-v4/ic_unchecked_checkbox RIFFWEBPVP8L/#Fnۆyi S6݅QlF @DD{ Umܤ6 6ReiaVbep܂TIU~i .Lmzq1A*dLr.vM'wJj0c4,Ԅ?ɮxՙMZoyu V_2s:c~a4׿vc53-ۂ_7~:KҲg;j'Bzd xKݰ\/~usr~twO|U~0 s(T 2H1pc$`e;s 3AhLƌRFfA?KsX1UhyBGnU?^pAT7i/VZ1O 359ĝG}`"6V䚥ߝHR_1$"?؍#GƝ*}TZ]@D/r~gfChޢuwP(.>S/P nU(p@Hdwg_DL߇(DC76NWȯkN_T>8? ~nwZ"Sn}pbѳL`UpgQü5#0ɧڊ]Xio]V>g}Z*{ᗅ_\4B8{ {oAfxU,_w[3Nw< rŊos/7-L-_oO׏ ,5 S5$,ycU>[lW J*[ם6x}ZmV⊵b)@Jw EqFC`aAjO|Ҭ_౎E:(REZv~ǻž[xUw)-\ΧŊ]'2c?QzAen}`:̯[u vmڒ$`ײʛzqG{*-ٽwGៃ_^M~_-byyެіKu>g\7R+sԸqGy7%M)@=u>:Uz{O}ӇMz]L, &37VA7\ GD7Bo˘fE@,;!YoeGZZaiH'mPݘN{xp Z#M_f?{{zW>eVDi!Z^ 1!hǻjZ~H[v'g\ZRJ>{dhyΚPxy6i_M88,V׌~S/?TIp֌4_u"!T6 `Zgu&=dv>83FΚ1c+9٨mnC<Ͼ$m=B)=Df9q>㪕"WKB)% EgG4p fԁnkVwKNZ%~jhQA =,&yoiwHx\=ӷ񁢝SP5LBW b֜FX`a@6׭[3#~zCum(ZĽj@9:"ZA7{**M_4Of$(H|л[ĚA@/v3c /e\e-yP@!/,T웟g8 qƃn6ZK\,]yhvX0{% 7cꗶ7/w]mv`\7L[n~*FJ{xx;YhЂL@В1o"#eo+#"< T}!w].ƧI˕n>=& pJDPH<*ZbAWWpUS6: <`#Zd&LSRFĥψ7'0 ;f%31[_I'K+kT&Jǖr-H.gA[:zRGݖ6@5qwH\e[(A mUZW@U6͏](|n;n?إDA! -$JD\>IoU'F]Jp+J.Ƭ qՖ-0&!Z鑅q˞/{s!vH綹ָi*A :H}Ĕ>( ? MijI6+uoƄ1<DQQQ2h+)N~_'?OʹF- +J@DPzmzX&B܌ȏuɚwב(tuF\os,'%gC\Rse94ڨhHq'1-VvmPy(W0X|}׶ծV"LT- I^xҝ:op@4R!8-}zVEi jٖ젉@y%~ϵ9נ5=Kfx*Xvtڳm9ծm:GQ qk D!j_Gny_5YR & `%u8ӻ,-Ls /,))R3gh񒋅TNa+Cй :21{!Q56@ ؟F/O^`!B,"hDU}dMp[=tlܪ1UhXg#W e6"Eh!aU۫6O\= jݹ6) ψ'V'9i}Y1!!bV^얗\麖s%N-Zba{$`e$Mܽ t; Q1{rg_<>t SET"6u+[<%X.?bzks&t^v^wV 2dXݓO]X`W^z~KVHIʖ}*Ea: F벿KQ`v 6-ܞ9/mTNG1X`k(>cO9rM%'v+M.SgmQ=wZDN"L߹Y@J亍C d2Y;jaU:*%su (e-=0X[0FMSXm*7䣝&뗻:N:Gd ܫWC#A H p(ʯI>$qgC`q5"}7G4axhP+<8B#bW7^ſծbF[wp*s[_ nNC;06;DI|qj@c ٱ,Al.|U(VrKɾ,A3RwPl,|0 ZŌ {a8C/!eqo5IENDB`PKeRMPK!*)res/drawable-hdpi-v4/ic_dialog_close_darkcRIFFWEBPVP8L/#۶$mM^FF(l۶WsLS8b䶍4Tv=XqMRUl͊ }69Sr8Ii >#FM~,*a(03dfbH2lgX/F=o PK$PK!*'res/drawable-hdpi-v4/infobar_shadow_top ts```wu  0 tWPْ{8iuࡀ;*z9PK<~10PK!*7res/drawable-hdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png sb``p  $8y9 X/ڸH$30 Pl@Ă@,@Č80icO) ?8$$$(jNp3 XXa2‡2)/V5:6,)rf`Xm}>ٞ~.PK PK!*)res/drawable-hdpi-v4/audio_playing_square:RIFF2WEBPVP8L%//dIMm۶m{-lۘOk̵nī8{"$Es9_(g?e~ޚo.fugq=4z:I׉<ij;5IaG lnŋh;.% WgfKȩګ8J'zr%ANI=V"7[SRtU~QTR' P<PK!*(res/drawable-hdpi-v4/ic_pause_white_24dp ts3a``wu  pU|Uw0?pQUkv>VPKa5?<PK!*&res/drawable-hdpi-v4/ic_mr_button_grey2RIFF*WEBPVP8L/#H$[QţsQ~hϳ>(fGf݀mkF[um O[(@/δ_YO[8Y많.p4^79%bQl\i3r"l]AR1Ob|H"Q_L5CWUVj]N3CBEOâiv"`])b3P^r/D"[|dR${V>ϋ.UB;B=+PQAϷ-PKj72PK!**res/drawable-hdpi-v4/ic_refresh_white_24dpRIFFWEBPVP8L/#㶑iOkj~#V۶ݝ (]kJwf` b+x*Y]+7yzX,\mm72FÒ nXlĵ0BGLؒ#SQ0L pw ~2-tLc;(p|5T[U@nn7  2[r^@`.-{ 'KNI )/~2d*J̤+ia,xE;#KYµ{\KeIPK!PK!*4res/drawable-hdpi-v4/quantum_ic_skip_next_grey600_36IRIFFWEBPVP8L/5@ 5mIf.jFL^u_Ln&`˪?m۸t~8 \[2K7JK(ȧOC(m#x4 =Q0MQS6z&;dɆ&@\\9drQ;{)9PK0sm.PK!*res/drawable-hdpi-v4/ic_chrome9RIFFWEBPVP8L/#6I<ٽ!mSC)fm۶mmv2+۪l=dYO,X-I=DpVr#\#c( 5?6tDDÃ@Eqb# B6t~Nq(3`ńBw&LLXeIHX]7Nsޠ)Q)+ڃҹPKԍSPPK!*=res/drawable-hdpi-v4/abc_scrubber_control_to_pressed_mtrl_005'RIFFWEBPVP8L/lIR=0~>-0xUqR 4ֿͧ+l۶Q]_a´sc| qqlB|{WBY.76^DcKLà10>q(ZlWìq׊$P34 y)r wȏC:ѫIK~x?Ey7m.yPKlӥ3PK!*5res/drawable-hdpi-v4/abc_text_select_handle_left_mtrlKRIFFWEBPVP8L/Ao H~El ^Ukml۪r?P@)k4D.nW"҈Oko4dT-jPFG-j=]קּGn,'IJZ<a& &d_Bf3t !btPKF7rPK!*res/drawable-hdpi-v4/amp_iconLRIFFDWEBPVP8L7/@$qԀ}{ʁ9D Ig.d]B24Jm[3Htd!U_0Q @sBb >&.Kc'x2@GuԛWl)<4:vBe LMBQDDӖbgTMa@0|ƲxMLtN Y|pE011'"%=ԟNvZGe$7E*e6#jKqZz; d`8( )MC: Do>z)/3|d˖Oc'S PKOQLPK!*.res/drawable-hdpi-v4/ic_vol_type_speaker_light(RIFF WEBPVP8L/#8$)^zA:Xfn]@8h~_F?{`khY_oKKg规d<Аxvl.kQi׏Z=Bqm+ cGD1Qar+;;q(Jnb().a8@+Ә"]iL+]LTQӟRfP' K5ŬlF9g1O \wf<'Ʉvycqw,PK<)t-(PK!*?res/drawable-hdpi-v4/abc_list_selector_disabled_holo_dark.9.png sb``p Ң@l$jz)(`d@ vմR!y! LL @&0P@r@,5d,.Ѵ-c x74}IOmޕ+W+ZC%_ׂzsJhPKXPK!*2res/drawable-hdpi-v4/quantum_ic_replay_30_white_36ZRIFFRWEBPVP8LF/5@ YmVV*}pm9T8m۶m۶1ٶmNm۶mq䶑#㹅 5O vC j7nV'捽&D Ǯ/9poTøE8D 9SU$rcU>WyG]J*w*7,T>`ߍ[ɹ&?!J5sepyꇾ0k W.%!;Xy[7WM{`ewF|DUWx!ı+*3t rf 5.9vF{em˃07#&'n*+W;a/׀9>y="wB U'靑z)}<[{Vbzxf6 QY%<>‹͉*nkb2KaQ ,rOriUlg~FztW]_HU= j0dT Ѭq:<Ϫc. ~UKהws"@kX)B}\ϻ@!(dyOw/99r؈||f3PK'_ZPK!*?res/drawable-hdpi-v4/cast_abc_scrubber_primary_mtrl_alpha.9.png sb``p @,$) 0? R.y! L, @&@0432(D\,nR .!$V5|g{ǒfp;+-veSBPKFPK!*0res/drawable-hdpi-v4/ic_notification_media_route7RIFFWEBPVP8L/#HfO-$7mˢIDw'W:!{9utC잀;% E󧹱/˲ o%za-LiW$8J+@boBP|7 3!^zlh]K"2e0Kلe 8Y=/0`/$J>=fOPKjPK!*/res/drawable-hdpi-v4/quantum_ic_replay_white_240RIFF(WEBPVP8L/# HnIjvϒY[?ڎWJ 8K;3pR٨x96*t-lmjB^q#;8E)f[`fak+Ǡ< ㇃)(.aq;Y^9D 57-䦘5VGp@kP}v藏]_# ^ 2+! GV$@9a #8\ʻCGsKcZjqtV_ƂfTF  PKX50PK!*/res/drawable-hdpi-v4/omnibox_not_secure_warningcRIFFWEBPVP8L/# ۶mCٝrXd~Bw 0$I.? 'Oyj ت茲rf6#Ici.s5<Ѩ%=yC#U$FŽswT *[#Yb+J# PK RPK!*6res/drawable-hdpi-v4/abc_text_select_handle_right_mtrlIRIFFWEBPVP8L/AGn9 U7wM)![B(!|By!B()l۶o BYZ0"{SDw@HYkKwpv@ ApaNpm951NۚycjE#}JPM@z)}sPKaxˡPK!*2res/drawable-hdpi-v4/ic_more_vert_24dp_on_light_bg tsb``wu  pX^y So^wuѤލ@`-g_޺5ܘ+9/wb}mؒEzL3 /gbPK*ebPK!*(res/drawable-hdpi-v4/ic_audiotrack_lightoRIFFWEBPVP8L{/#`ܶ#<3imM~ ]bA#3գ QW&`u CP? ;vHl+Le]Ȍ"hg`A!dR/PK0FPK!**res/drawable-hdpi-v4/ic_dialog_close_lightiRIFFWEBPVP8L/#P۶ N2F0hx݁B #me)A3Еf /&]s!MԒNaPKjHkMFI+V$W$d4Kⰳ2KqfFvMވ歽)PKsPK!*"res/drawable-hdpi-v4/audio_playingRIFFWEBPVP8L/#u8$QV̩w!"ڶ&eܵ IgCde*pgQB[} ۶mtޣ7ƤEh@BW ? /JI{: E瘄j6C7\蠐ThabpK:*x.ap)|TF Y W\®v\ڷhJ]&F{.>{.ȽPKj@PK!*.res/drawable-hdpi-v4/infobar_shadow_left.9.png sb``p <@$^<;$ sX vPQ H_d;l B L``,b> f7.!K(p8s?q;ɋ31={/ti􌴼(F+.i*dW]{n#Ɠres/drawable-hdpi-v4/quantum_ic_pause_circle_filled_grey600_36fRIFF^WEBPVP8LR/5@ u@$9nO vm`#[&\md@'95%|B&)"+Wภ󅣻τy9$qA/kDsH2KlBYvg!FYb#5j$.%a*TId1V.ZkPib¹ftF+}vpڏ7^Ñk {+OY̙@/(\wǐu.ubgPKokfPK!*Pres/drawable-hdpi-v4/common_google_signin_btn_icon_light_normal_background.9.png sb``p Ҟ $oWRy9@2vlr*.4/+If`aTr ; mHT1tzHtq ɸaovڪcD^F!11 *l:rc,o&뮈J/yms{}E>3_%&.eNvM d鯷=hy<~U`}޳<NxM긱%+Ϛ3y1>z:Y!{Ubf<=aڼZv"Zs޳p 95!RԋKd'.RI7I{RT%q1ozH $6)i2uQw7MS~=3~o:5cÕXX_^w{-oK?;s2)sݜ#UG?P*RtI?Rtw,91m =#g+׊n/*nv)>#d+O>PtsYPKS0XPK!*.res/drawable-hdpi-v4/quantum_ic_pause_white_24 ts3a``wu  pU|Uw0?pQUkv>VPKa5?<PK!*'res/drawable-hdpi-v4/settings_all_sites tssc``wu  pr R~55Wn g_^h1USPV1Q);qNf!PKՅQNPK!*$res/drawable-hdpi-v4/btn_delete_24dp&RIFFWEBPVP8L/#O IR9f$BJ?3[V)HPTQgm##6Ӗf*S#h'1}hLia7 +If`bTr45P@go}bb-.!M*Qcf_{}|O|2`ҥcִso<}Aiz儃[;:J_oqU'i{^J[QFY檰KޜyXeK /Tnh9{{̙ȳY?z5= <|j]ӳn6LNEL ܆3x\_q0cq$N[У7\d~my'\bRb9w"G~*7ן?ds9yO/ouL{|qvrA%k$m]^l1ԂNZ{7Lֈ= #&=V uG5yN?]':%n/~ϣ91r5݃aK}ƥ'3fx%0Ew݇<ءxs] {׹'R"fxytsqbfcw־{^TC_S;N .|eQ~+^n|O楴^3i/3k],HefSWp~&n2zp0_޺52MMB| gk8rJmJ֢!Vvv惇*p$3W׿ySP)) PKYPK!*-res/drawable-hdpi-v4/quantum_ic_cast_white_36?RIFFWEBPVP8L/5@ Hn#9j{&gc->Sf۶mɜl۶m"(EXJ2p ڜW8Q]WY@Y}[D_6 nPCPPG02m Bie$Hw†с|* %Y{O0w ^7sr:TyJ%oUFHXVŷRJ)+G ZYerE \ }).O ) "z_` PKlPK!*.res/drawable-hdpi-v4/googleg_disabled_color_18@RIFF8WEBPVP8L,/Hv[=" h zn5vj:m}ٶ%8 )g|qk).w: )8F(˛J 4h(4 PW~11eZ+;ű;XJjAQ9KhjPWe(Z/"/G6v]<'zP"!2wrs#OnTfEFWE1 Ñ̏\bӬRLxrZ(PKLVE@PK!*(res/drawable-hdpi-v4/ic_pause_white_36dp tss```wu  1MxLW*{ϸ"š!bYIqՃ$LUMM( PK#%KKHPK!*/res/drawable-hdpi-v4/permission_background_syncHRIFF@WEBPVP8L4/#mQCi O4q9{m+"s'r2BZ_?BS[#m=O~bVI\RRR )m;@?3wp/%/콸<x*>PŠ*X|>1J@N1@^A"FW8vr^A9a=b~5b.`#<"\@jWQpEۊEu nH%G)Q%_QVl*fេxK1.J@) CDB⮈WqR7BRbiy%u7nw<|*֍m!uIMz>x"w,~k"4啋7kTOk6kZZYoi)'|[V.PK=PK!*4res/drawable-hdpi-v4/abc_list_longpressed_holo.9.png sb``p Ҝ $LdRy9 X jR!y! LL @`g |gj=]C$.'̨|xDřY]2eSBPK/}PK!*4res/drawable-hdpi-v4/abc_spinner_mtrl_am_alpha.9.png sb``p @$/}\$ s@*@XqC +If`baSr4@ư@1#ъ P#q&w&Zbq卹L"-o9ROOJk"gku=]\9%4PK>YPK!*@res/drawable-hdpi-v4/abc_list_selector_disabled_holo_light.9.png sb``p Ң@l$jz)(`d@y ^u, +If`bTr40b i2?@Fz8x{ʐAyCğ:Sw| JlҞh) PK ѓPK!*5res/drawable-hdpi-v4/notification_bg_low_normal.9.png sb``p < $嘭D^oJd&&N GZĜH4# dž}tq Ḟ<%-^'^B3q%'&E/@f{sJhPK~7PK!*Pres/drawable-hdpi-v4/common_google_signin_btn_text_light_normal_background.9.png sb``p +ؓH2G-Ry9@2vlr*.4$30+9 ` @2!b 3"@@ MOǐ[o pXV9ay7֎S=R':vmæ t)=:.[ໞ3kέ,-5 iiܶulv`feutp]t4߽]ؔ*A_O?~QR`yM={G'dvߢM{a]_}3};f-hjZb tHFK xlTоYM5\푾M}lwt~;L̋0E?z/l4^b1#v/tm׉,rfJ}aOKM̈(+L֒)*Mo]>xKS0oY촞zv{T\ n~y]%) PK8UDPK!*8res/drawable-hdpi-v4/quantum_ic_skip_previous_grey600_36;RIFFWEBPVP8L/5@ $I?ٿJunkm{rhC'`6X@' X@{m2w'! 3t.05Aj3 Эa@ǟ" ,T lO 8ӓP;Kq-%so4ϰD+@O^.q./ ،/Q/݉9d>UMO*pRl)2Bo8P^,CGa"Xbs[OtH'uQ>+SeNfd~I'e[~[GT#yMe~g6|PKk4y]XPK!*.res/drawable-hdpi-v4/quantum_ic_clear_white_24cRIFFWEBPVP8L/#۶$mM^FF(l۶WsLS8b䶍4Tv=XqMRUl͊ }69Sr8Ii >#FM~,*a(03dfbH2lgX/F=o PK$PK!*+res/drawable-hdpi-v4/cast_ic_notification_0+RIFFWEBPVP8L/#㶑I'Kmzm3[~Ix& ]YnU%o+O?.Ux7Z< :`Y&%~MW`JF,X{))x+ $ p$6 x.JIK 7R|I$񸅣${%,d 7 s#I:PK[UPK!*3res/drawable-hdpi-v4/quantum_ic_forward_10_white_24lRIFFdWEBPVP8LX/#I$)W`Ue cwMV(lfьndfm۶mF{^1w$)88%OISrhIl1=U-RZ|-2V @K{a\X:}Y'-5@/xcx*?UsCg3CIױkT> Ϥf:O3\vnc 3PQ[2o03K6%-^[2n~u}K쨰϶m>/-t ~Jd2B{:c/*{޼B6-lJ o W_qsPK8uqlPK!*8res/drawable-v4/quantum_ic_play_circle_filled_grey600_36RIFFWEBPVP8L/#50r6̫Kkgv"׶&qi:q8ē!C/_-Dm#E^{~6P8(^5SʶRf8b ` b(!GDn^!-Psbś- j4Y3#hU\KT?q)'2 9̒2M`@56ޜ~2t=')8Ëk4?|k3ArGu`$8s韆D$^# 5g PKPK!*3res/drawable-v4/abc_ic_commit_search_api_mtrl_alpha~RIFFvWEBPVP8Lj/U0r6RivG mm۔xX/THcjƟ"47U ѴMk?rQ~3xF:<3SfO%d&ԙ@,PK:R*~PK!*7res/drawable-v4/quantum_ic_pause_circle_filled_white_36RIFFWEBPVP8L/#U$7nOwЕdض&L^ ‰7 ;*)KlEʑb"aF5sa{V7fM5%nY>9 !s9{QHH}"BA"p y_u'p  y$Fq++uN'0n6}SUw)tqaԆPY$V0S`il!䑋X?PKE0PK!**res/drawable-v4/quantum_ic_stop_grey600_36 tsSc``wu  p^;M>g,HWePKݙ0.PK!*(res/drawable-v4/quantum_ic_stop_white_24 tsSc``wu   S_:SFwE* PKt3/.PK!*/res/drawable-v4/quantum_ic_art_track_grey600_48KRIFFWEBPVP8L// u8rȑ't=ySmZ^/S}.B1:gҪmSgMQ8ݪ-2FQ?c=\ckzgcjXaO H;7|F" b;f% E0PKPK!*/res/drawable-v4/ic_mr_button_disconnected_lightHRIFF@WEBPVP8L3/@жmɶm>/)ՁmNTHm6¶m+I`nU@3/<{q8mj&'ۭg|-eW4 0`z?`V\mױ B*)GR/mӇm`)xG@4ƈSO !>OPK,MHPK!*$res/drawable-v4/ic_media_pause_light ts```wu  p \(o3s:\Ys&PKӣ20PK!*-res/drawable-v4/quantum_ic_skip_next_white_36uRIFFWEBPVP8Lu/# m$9RQԋiWZk;}+5dh1.Gm6PWHhuPKh"&AĎ9g4c. r<1ݯ xuPKfZPK!*0res/drawable-v4/quantum_ic_play_arrow_grey600_48]RIFFWEBPVP8L// 5m#ɑfz]G(mA )hA Z(ܶm#{(dop̦53E"fӘy2tfSȚ-g\Hr)i5I+Jxx)oR9+ȓxqQqOrp8PKPK!*$res/drawable-v4/ic_vol_type_tv_lightXRIFFPWEBPVP8LC/Um6W)hPHSd߉Foؘ<  LZ1 <PKA]XPK!*.res/drawable-v4/quantum_ic_play_arrow_white_24tRIFFlWEBPVP8L`/5mFjy>G(mA )hA Z(ܶmn .JT*H%SOE$0b F*U|.PKxBytPK!*1res/drawable-v4/notification_bg_low_pressed.9.png sb``p  $s5),?ߐHR!y! LL @ِhF/ @(q=9TjRRlvH3 MlOsY) PK8PK!*-res/drawable-v4/quantum_ic_volume_up_white_36RIFFWEBPVP8L/#um$ɑtgȥ#nضٲbTNFKwm.#mqwo)9*?H *wTF5KG`pTݝ R3ޛWe\Cߙ׆HƼ`u9 bTU2mvD {96uFedi|?.i8E߶.6(_@L9`i<9I0᭕a8jڤVi >P~8k_(N%:PKaBPK!*.res/drawable-v4/quantum_ic_volume_off_white_36BRIFF:WEBPVP8L-/#@r$IW@fV }b!/1f̤WnmI^_`FR>N*[ 9P/1*^WpF *I`΁}) %Pf%SlX'.oTU$Cjx<#0—6]B_`%U. }y*&S;0pn U*n'v zQuOBk ==<2*"|&Q/] hN?FT6/)<(PKNGBPK!*=res/drawable-v4/abc_textfield_search_default_mtrl_alpha.9.png sb``p <@R $ sz 6uY, B L6f ۀLAO cdPذ+'H:&PK瑯vPK!*res/drawable-v4/ic_vol_mute)RIFFWEBPVP8L/$I C7vm&>=En6[3$I2a@ɟ?"p@o0^(uE,1 G)cXQDIJRÊVkpJ${ ȉ~p8g STڐګT4>vS\C҄6vۗ~PKؔPK!*,res/drawable-v4/abc_btn_check_to_on_mtrl_015RIFFWEBPVP8L/ IjE1B$/ӉlHD03sD(,p !G>-HbQI)i4-CJ!CɑGt`D3[1EJPf=u]9Vځ.aQΘurjHP_0eAEb"PKdoPK!*0res/drawable-v4/quantum_ic_volume_off_grey600_36DRIFF<WEBPVP8L0/#HdVV]x#wֵ/1f̤WnmI^_`FRM*ХgI8]B#$`#?YBʬK`YB9W}sUu~%A5 nMP5<6Ɠ3(aBx_`f-]&U.<J)A;IYpWU*G5'H쨌^˹Bj3 )k`}T(DLQ/ h6o?Rw3){&PKoIDPK!*/res/drawable-v4/ic_vol_type_speaker_group_lightERIFFWEBPVP8L/HcoDm[uΟozR,cIGG@e^DGE9k'xE+_0JQEfЎ7,H6G ?͘mjE89JN.9䜮nPK÷&PK!*"res/drawable-v4/ic_media_play_dark[RIFFWEBPVP8L// 58n$I:mH@))h)r۶Q8513*]3HhLx2ٚ%m9Hr!iȥ$*kIBJ>篜#O=F=yPKR+RPK!*,res/drawable-v4/abc_btn_check_to_on_mtrl_000[RIFFWEBPVP8L/`ܶ#_7q$Im/oj7mXV2UG#h@HWv@ځ%q%7n uG?$&L Ju.gu=O<~_mf_ PK wȩPK!*4res/drawable-v4/abc_popup_background_mtrl_mult.9.png sb``p @$9lRy9 >vlrRy>I09N(TB B8 0)1#̠3"@.cHN j1K9y5NTڋ z;Kcy*6ra^rv ¼-(hJc?ANKb?(:B$u9]Ӷ(u(.r @BqӾ8\B\omLm>8rRJc#UK.a#agNաy<91V{KcP,Ǔ ]K Ƕ,+@mW;Y&+ļNkj ?}ozVrh3sU~&\x̱!s (ysJhPKPK!*'res/drawable-v4/cast_ic_notification_onIRIFFWEBPVP8L/7mjx>$w"%۶Q&36&.ݍj,=j@x帊" (6 C[V8M-bF4 [W^P@-Am0(^^芵idpU/QDA]o:iPK>['PK!**res/drawable-v4/quantum_ic_stop_grey600_48 tsSc``wu  p ^;]>.g(,' PKoU0.PK!*5res/drawable-v4/abc_btn_switch_to_on_mtrl_00001.9.png sb``p  $Ry9 >2vlr~VF)$t5sBdN ǀ P:0KBψD3=1ܐщ"߫W.Trj^}Su7>̟pݳj:-ֳ}T_~ӇWKU`_Է>Q4ث"9CMyzSuWi8~{ԛɷ=-ueфmlKݾ2x}ʇTpK̚+&W3;}^#x y寎OOc~~vw)kGll8yG{,34ץI7(=,X:EJ,'1${K'~Xٲ~c׌G=ܥlW%-k^$!uڵsޗ7qywwk٫u}VЧ/Nz޻qo?jgcQ *ww$`۶ؽۻ_MU0su5SY"!k2($`y$TT" )3kj8|}шS]]1yRl}O:;Hw&3J}L&*_8f.n抔EPKtPK!*8res/drawable-v4/abc_scrubber_control_to_pressed_mtrl_000dRIFF\WEBPVP8LO/  ȶ??FFEu`mۆ& (ij+68iJ[j Y2[m7]"0PKX~iidPK!*-res/drawable-v4/quantum_ic_replay_30_white_24RIFFWEBPVP8L/$9JQ`~ I&{|}[En6rtK,dd;ْ<٧іR?b]Z}O\'*CB^1;C9e{x %C*(uˎ,O`8#Esy%mDOJ jN'$`F_іKp M}l;qΩ%PKM0PK!*#res/drawable-v4/ic_media_stop_light tsSa``wu  p ?L1:gYPKe-,PK!*2res/drawable-v4/quantum_ic_bigtop_updates_white_24@RIFF8WEBPVP8L+/u@$ɑIcV/8fpm6߶K+mvmuضm 3Ss"o(Q1rB0E9p>5{3yeu?N*n2 3z@$d'.;PII?:Ĵ'{6}0Omncq2nȿE<8B=@~Fɋ; ;瓘ũ/tӌTͪ9 |,k%)f,DY 既Zqp&–u^r`1pB]*蓤RU>OIP?PKG5E@PK!*-res/drawable-v4/quantum_ic_replay_10_white_24RIFFWEBPVP8L/ ҾD8mkY[P9 !C2UmC׷g^Dp\8.~z39"u؋MAp#<;O ÆĔ**lXCƪ!1`̘?r1#e k {Sh&yE2 Zn$G6~Aw^n{2Pn=ƧC,o#gAKW]h$i. قt7Exw Xqi d :ӁZVָC$dց?z`<3ڲXÑ>0Uێ6AtF%£tEP.Fz8 &S'W=4dW}mђJ|PK'|MHPK!*.res/drawable-v4/ic_vol_type_speaker_group_darkIRIFFWEBPVP8L/$):rբ '@F-/-l#O՝B>HN{#SQm({{@+L:t{?A %(,?@Z2;<3S M 9fÝr.(j֬qeDTd5b͈jNwGچ.3, !|zCQKzccьD8*m~'Dҋ5xE)2VLldgL;c#8lF0|s#s^[ҥ˒7:Ȋ :@zFeo'g)S5yR7#PK@\PK!*2res/drawable-v4/quantum_ic_closed_caption_white_363RIFFWEBPVP8L/#58nɑ6yfw|[ljko 2qpfp{3r}v?1-j.X/y^Lwd{_J `+ʶB<`$+f0m}ڰS¼x˪'1)E<1Vi2v-}1!_!UkPKs2PK!*res/drawable-v4/ic_vol_unmute]RIFFWEBPVP8L/8j$ɑ=7@8;QmJf௟f.yR*89 ۶m$ݻWxh QQpDžSlѿ Lq('wƨэxqA,2` ]&h>w?&PKavɧPK!*&res/drawable-v4/cast_ic_notification_2aRIFFWEBPVP8L/FnFywcN$@Yruw;|hOȋNN@_Q'\ (]IbgNFU"x+@o^d0> )0х$"b[)87^Z6>PKPK!*1res/drawable-v4/abc_list_divider_mtrl_alpha.9.png sb``p Ҍ $f),?ߐHR&y! LL @&#{bv\.!ד30222Ho{R) PK$#d5jPK!*8res/drawable-v4/cast_abc_scrubber_control_off_mtrl_alphatRIFFlWEBPVP8L`/ ڶm$4u>Bmd DRT#bڶmyrz R ksi|"w ZX,tKc}BPK ^ytPK!*(res/drawable-v4/ic_vol_type_speaker_darkKRIFFWEBPVP8L/50n6P_Iqm%o%*N '& daBa;=X 7F'4 BR=`) Pr[,Lݕ'*܇sF*P& %.d h5dRtp`ٶC{_pMΧPK!PK!*2res/drawable-v4/abc_tab_indicator_mtrl_alpha.9.png sb``p < $LRy )@" $I Kfht )IO >sq:@VeSBPK }zPK!*3res/drawable-v4/abc_scrubber_control_off_mtrl_alphatRIFFlWEBPVP8L`/ ڶm$4u>Bmd DRT#bڶmyrz R ksi|"w ZX,tKc}BPK ^ytPK!*8res/drawable-v4/abc_textfield_activated_mtrl_alpha.9.png sb``p <@$V.$ s@|CV"HY$3011)9JY l(_e ;iO &>/Tb0tgd>U*H:&PKMpwwPK!*+res/drawable-v4/ic_mr_button_disabled_light RIFFWEBPVP8L/AmS ڶmln? OEUe0/}9̘#O%F`Ӏ~2D$J՞v&[D@X c$u7@/.=Xv}1?}=Nc쵹[zͶ[{DB痲2! l̵!lt'6O;J(JgՃiP}fObg4v+PUPU PKi-tPK!*#res/drawable-v4/ic_media_pause_dark tsb``wu  p jdf{Կk=Ëw_νrZ3نPK-a42PK!*+res/drawable-v4/quantum_ic_pause_grey600_36 ts3a``wu  QpjJwδ=!_;iZTug3PK><PK!*0res/drawable-v4/quantum_ic_forward_30_grey600_36yRIFF~WEBPVP8Lq/#Ȓ$ɑwifhP0$mGݶm$vюm[8 ۶m$ݻW= )}Ob=:6(duh:W&:NKNIeYP3E+t"a ܕ?%@b GPD_(K\C(w %@Tj"ö &Nؤz24 6'65~-;h+]B܀ɳ nIYHvx)۰ߵ#e,'5YtbH_4G@g6-Vx>l[U+Mu:zBtvS$ZE@D}4PK[IPK!*)res/drawable-v4/googleg_standard_color_18RIFFWEBPVP8L/@ȵmj+#=X ) ),'Bo?pk± *Lxm[U:vN ij(qum&ǎh$L9W۰<ٶx;kl;۵jNA۶mĤ;ϐ8P2a2g@5:L05Xodɷq^H!@ƛR8hC d̢J<#˻Z^Kh\[݀9VPvhg>0J <?wi9Nqx6~U_ߵvIC>4T[H8M"ʇKsBV#^J ,"2  l[Nm_d0OC5:<:rvE-f5O~ }wue'ޮߌܟƳ@o݆T𛏉=9ܨS _Bf g' PKtPK!*0res/drawable-v4/cast_ic_stop_circle_filled_whiteRIFFWEBPVP8L// Ǎ$)Va᳧gTjΓ@dDFYĀmG4ԫ@X!g1r0K̀,m>Ix(mW@)b[]+5A+[y߼oNf6~9 [5rt5rpdt}8G^MS7?w2:|όxO0#SsJ%gsPK{PK!*,res/drawable-v4/abc_btn_radio_to_on_mtrl_015RIFF WEBPVP8L/ Gn,w;pm]p)l 6p ۅ @X*w9n(c3zY;\^na!Vzfș:'voIR֯pLK|}(ԧ@#k*1oۦ颧rta{߶ù9 θd>^:~w5w=5PK-n_PK!*,res/drawable-v4/notification_bg_normal.9.png sb``p  "< Ry9 X !+B B8 ,j  !ь0_BB8yP^1zrHJR8i.#  LZ^ tsYPK5PK!*6res/drawable-v4/abc_textfield_default_mtrl_alpha.9.png sb``p <@$V.$ s#fsE^AH2X l(3Utq aCN+ ٧R) PK&owPK!*1res/drawable-v4/abc_list_pressed_holo_light.9.png sb``p l $Ry9 X1?iB B8 ,j h3g/)tq Ḟ<' ϔB{o) PKryPK!*+res/drawable-v4/quantum_ic_pause_grey600_48 tsb``wu  p jdfs;/L^9UlPKB42PK!*2res/drawable-v4/abc_text_select_handle_middle_mtrl)RIFFWEBPVP8L/$)e kӞP. i>4Ђ]J0c| Z+ $_Տ> k0p%-c+<{@wX ,`wȔS _2j4) 7х( rQ%x4TKxfH5;&xalCQO2Us6|96uF6|=n8otB~;hې|A:X& i-/ӚD].kZX{i%tk&A@8}QrJ_,PKELPK!*6res/drawable-v4/abc_menu_hardkey_panel_mtrl_mult.9.png sb``p @,$5>p0 MQp %Wنi@*$ $SрH(5aŀ:V\ZHx8x;7ﰂ|:|]\5}mļUZ]z6^Yٴ}g2{\|}:OټAuI*Ggix:A;ϋvDCdEbA#,OL~~:O{<;2Q)%%NNs8|ݝOa+8l71|vKayy|.LOᵄ̳inmRgd5IH:py*GmN,U{$yv^5b?e۴g&{M O+X/hMtR`JFٖ|3w)hgΐ!{?>kёS7,A) PKPK!*5res/drawable-v4/abc_scrubber_primary_mtrl_alpha.9.png sb``p  6 DHIiV8d6r+If`baVr40d"x^Rr.!ד%0AZέH 1 @K7/x) PK*>؋PK!*Jres/drawable-v4/common_google_signin_btn_text_dark_normal_background.9.png sb``p @l$eUD^ iTI^AH2 @Ĝ@a3T/0ܺRHuy8Tz{pLGLVJou*X>齓;+8G ms{{6?RWZ9iMw:&?{uY/Ș⮒dj_~dɷc:t+|ŻLO|O{a㖫t{˟MZ`wb[y~W0wߎ=,,,g^ipؼkJZ/c8y|z="|G r|<$9'km6` χ'5yVQ_w΍cco;\.! c#+wėgL; '7MVyո2GL.;Gt4n=8!_:d'tsYPKAgPK!*#res/drawable-v4/ic_checked_checkboxORIFFWEBPVP8L/2[#:&^׎|Cz.m%1+%B~Y)01MR@+AY1HqT0Cp"?}T9Ne+Ët Mt E e"]`dsIPKPK!*0res/drawable-v4/quantum_ic_play_arrow_grey600_36mRIFFWEBPVP8L}/#5m#ɑfƽu`!ooDZ[ R!.5nF7L8|aS,ilaL6`8$ \0;~``'`[CPKRلPK!*7res/drawable-v4/quantum_ic_keyboard_arrow_down_white_36VRIFFNWEBPVP8LB/#5mۆ1[! Vql҆ƽwq'Ӌb bүk!5eXZgηPKVtO[VPK!*6res/drawable-v4/quantum_ic_play_circle_filled_white_36RIFF WEBPVP8L/#50r6_Kkgv"׶&qEۀNmF!NdBLqy $Ij F#!iqakme0V1DbpU8c)8 7IDf Z,G&K̭@'-k)'NҊyB-'PVғwUZy ƕ7 8iFGLz' \wɻdE G$^\9ML1˷8ck$w|ARG=q,? Q)zg>?\PK'|PK!*.res/drawable-v4/quantum_ic_forward_30_white_24RIFFWEBPVP8L/ ҾDxX@zFi5[}06Qඍ1"Dcc#el cs~h0ڙӞ- X*,!> w/.#oF' X,VkT`PKq͓_ZPK!*$res/drawable-v4/ic_dialog_close_darkRIFFxWEBPVP8Ll/㶍MMx?BQHΐȂ Ym6f}QL *45'@l*V#H5ypϠ;:,)prEY\T$x_NRPK!PK!*2res/drawable-v4/abc_ab_share_pack_mtrl_alpha.9.png sb``p  $2$ s 5)*+If`aWr P cYy9f@1o@Z1D|rJ@ 6ԤT432 330p`k=֐y~s,N;TAzsJhPK̻ PK!*1res/drawable-v4/quantum_ic_skip_previous_white_24hRIFF`WEBPVP8LT/50nQUm~{#Զ HP_0eAEb"PKdoPK!*0res/drawable-v4/abc_text_select_handle_left_mtrlzRIFFrWEBPVP8Lf/+@m9V}hB!BB =K1E/-DT:T+Rs\P HR@yD7O H PKzPK!*)res/drawable-v4/ic_vol_type_speaker_lightKRIFFWEBPVP8L/50n6PIqm%o%*N '& daBa܁;W5{ I+wJqK 1rU9\pHP& %.Q,7WY,6uhz/4PKL}TPK!*:res/drawable-v4/abc_list_selector_disabled_holo_dark.9.png sb``p @$]g_Ry9 PȀ @iiB B8 L`؁XjX\X3 -bq:9%#?C, 0_ߊOW?uN MPKɺPK!*-res/drawable-v4/quantum_ic_replay_30_white_36oRIFFWEBPVP8L|/#5@$I+=p𮈀m۱mh[lնl/ͶmmoyLR7ni[-Mh[W+kKnP٠uu K3PH/_H9dM > Wg L*4B[0E$(/l!;g`:# 4B~ eGb(ݿC{x3 5Ϟ=Sվv=-E3J</!{!v 0Al؉U wR MZ%@T/H?1ۑDYC(? PO\Z6rW*k4O  ؄\Qcχhbȅ3)=PKzPK!*:res/drawable-v4/cast_abc_scrubber_primary_mtrl_alpha.9.png sb``p  6 DHIiV8d6r+If`baVr40d"x^Rr.!ד%0AZέH 1 @K7/x) PK*>؋PK!**res/drawable-v4/quantum_ic_replay_white_24KRIFFWEBPVP8L/m'צ@ڶ? hE CG۶ݲgl-ڢ-m7zFD႙04TO%tڄ+I  54u2B7'ІfR01!e)T,tVˢ|PKjPK!*1res/drawable-v4/abc_text_select_handle_right_mtrlpRIFFhWEBPVP8L[/+@5nF/S)X @0J#0BF!0#<+L hбHRn)C)VӃRWtSP[8w5$PKD}upPK!*#res/drawable-v4/ic_audiotrack_light^RIFFVWEBPVP8LJ/PܶNPHCs]lۗٴNx~I2 -ӟ"cl 'nHh)Tx`PKc^PK!*%res/drawable-v4/ic_dialog_close_lightzRIFFrWEBPVP8Lf/`ܶ$_vP63$ hxVm6m_пsbMVaXUYm5۰Lس%oڨtNX M%BS9kPKĖzPK!*0res/drawable-v4/abc_list_pressed_holo_dark.9.png sb``p l $Ry9 Xq[B B8 ,j h3g}fہj<]C8'<>3!QXOW?uN MPK2xPK!*"res/drawable-v4/ic_media_stop_dark tsSc``wu  p ^~W.3YߓPKl_0.PK!*9res/drawable-v4/quantum_ic_pause_circle_filled_grey600_36RIFFWEBPVP8L/#5$5@Em;^RC[ ^( $ ȊK f(=B=*MCeZ5jQMAL:%l}F,Y0DF"{F3:CF.>$xFQgHzF1 Ȍ:2vlr~VF)$t5sBdN ǀ P:0KBψD3=%1gEeXv5m׃v̌{)BS ;#eOM)B窊J;zjKXǜ?wfgz].7&2X,'BiM7Sp͜Qw!1iSNw?zXuݹL'N׈X_boW*ȟ=83gd^ZrR([x/s{6s{n_i3|cŚ3?V:x+mߒI.y-淨]!weÎVyx;O6z/0Cr.^92I{'ϰRPc$#^>d#;iԮwHbǮvǮ. gor$njM=mje㩈}wyx{͙ؖbn~,C94xMIԲ,{?MMfNM3:UԄDG}dG/awS`yGuM4l%;CZP~c_>]7^oTg u*WMZ#?{l|}?tY|V]U#h¤%6ܝqǏƋ*IK\'u=_˛Q` Jc~.PK|'{,9PK!*(res/drawable-v4/quantum_ic_cast_white_364RIFF,WEBPVP8L/#ȕ$I8YV㧵lW촷m͈{vc`- p Lu1b6xV?tpƦÝ.!fgLF[)` 1(x*S`E*^jQEްT|**|pOsMqzUt{!qPo!VQSPE['<+GDTQ SN( >uWSI0Ybg}W\=g~؝~n?IY Tͩ$5љ!/nlK0w $>GLv#V q?r B]Ur; E[4l&87kYGs _$!?*C +'ΛN_%PK+GPK!*/res/drawable-v4/abc_list_longpressed_holo.9.png sb``p l "y$ s3@l B B8 ,j 3 3{tq Ḟ2؁# $lWtsYPKxx|PK!*/res/drawable-v4/abc_spinner_mtrl_am_alpha.9.png sb``p B@,$ccRw8y9@7s@i7kd&6 G` -20g'(R}.!N{@N\.weF:f4|qQWr1Q:H'Lts\=<;f:^.Lk;MZemDM y}Vg}3[pػ;@jRD:4XbD w"߹?{Fc0=/#9.6}NiPKg9PK!*)res/drawable-v4/quantum_ic_clear_white_24RIFFxWEBPVP8Ll/㶍MMx?BQHΐȂ Ym6f}QL *45'@l*V#H5ypϠ;:,)prEY\T$x_NRPK!PK!*&res/drawable-v4/cast_ic_notification_0oRIFFWEBPVP8L{/ڶm$4sw}ضU|ww t9R % >H,l͔wD'EK 0F%k v7A76۶hu`R[8"4Wg|GPKPK!*.res/drawable-v4/quantum_ic_forward_10_white_24RIFFWEBPVP8L/$):f~ɀzqr}3XBkS6m`(pF~MDf1nk/ wX^Nֲ=IҞ)R)n }zB4 G6#j@Z=QσAIjO`U 诂&o_JsKbkIPKqWPK!*5res/drawable-v21/preference_list_divider_material.xmluAO@ xkLM<4rz4^dKl a71?ԡ.ȗ2þ " K;$kGL^HǦ_Ru {IʮKdqv7EycۊfGx<'E ~N~X"W^J5DrKOѷ*{`'cT3̴pvìPKtb@PK!*Fres/drawable-v21/$transition_expand_more_expand_less_black_24dp__0.xml}1OP baq0VͨCM4 T)/899;Y8Q]{w^#Ch IEsˁ2- 2dfSܛ32mU5jg;]NB]0ƮAFeL*r~ !N/lfMe17SLtNM0;`cp 5xOضJ,ɹqp+ ҥY|"M4 Q\ʌ|LOrA.gLg"/\dhxieEfwAvYu&%Xg}fxo|O@<lu 躥!cU3+wφԬќVho m SfXMUrcRmge܆&UUD:ױIrHb3VDa?hͷXg{/_j]ښȓ/3ϟ}PK1+TPK!*Bres/drawable-v21/transition_expand_more_expand_less_black_24dp.xml}J@ ƿ۩+=yYp*//-k0ܫ{SMe&PH@Mw9c.KF3=gޘ04P*tg$(uY!m]X.ɯ^Lj("ks͍m3%[_R]6^4{mM-qBa^Bw!qb ٫u~=;K 'ǬtuC,cVmKfg2ݿPK=;6 PK!*Fres/drawable-v21/$transition_expand_more_expand_less_black_24dp__1.xml}N@P `ۑ[5nLj\#4LSX\wgq52D%|=\r:t!bE#Z#m8ѷu v<' Ui'PC9BZ\MXϧ\ieEXMOE:oؼw&{vko׹'z^znCNc3<)漆N]kd-9lVHa$1rاjuT8 'C'ͭˈ.8;v<zp4 1$jp$ a&n1aw@L'̄/; ~S%Zc4#5?j3ZKY-{Y_|PK2tfjPK!*=res/drawable-v21/design_bottom_navigation_item_background.xmluNK 0}o.D\pH7%[x3HQMAa@֎@07 ,G][Сiyvg)ͤBT* r*?87I`DZc<^ GKȹrP-K9[PKWPK!*<res/drawable-v21/abc_action_bar_item_background_material.xmluM 07 *.\xR,-ؚ^s+(oM231f H=4mh򼾷 -g{7}7վ 1MqڱC6G;(f}`H- yΨLDy? PKY(PK!*3res/drawable-v21/notification_action_background.xml}OAc(;cmaC v6lvg[ `am |wL哝μy%bZ&Z&4 , l` l]p ~?ssYBW"w(Ƣ$/$;u'I#E2I~R u:Y^]6MF6v`{GyR lCQiYHMUQ:J $LH~ީS!Qo>h\:XuF4ZEڙziy櫏8c9OjgwfOZ5;Wwڅӵ{jݾc@|u~PK{PK!*Bres/drawable-v21/transition_expand_less_expand_more_black_24dp.xml}J@ ƿ۩ +=yYp*//-k0ܫ{SMe&PH@Mw9c.KF3=gޘ04P*tg$(uY!m]X.ɯ^Lj("ks͍m3%[_R]6^4{mM-qBa^Bw!qb ٫u~=;K 'ǬtuC,cVmKfg2ݿPK(, PK!*+res/drawable-v21/abc_edit_text_material.xmlOK@$Mv[`'эRJ7HiA؄&a3,SNaJY~*IňW}=OQ˟1 &8dI1Bi؛aovuskla)KK˟os޽y=PK1PK!*-res/drawable-v21/abc_btn_colored_material.xmlŔo0__KZ*(Ё԰ C^\f`Cb``Cbc@:13'+T~:v(}"F1Uj6k`l+ n{!O3/+'$h' yG%3.~ #I#otw.vX`;*d8w ܇i48|?ʓHy%hkk.ey# E`5XЎyKCW3ܦ~*.hOɯA64FYʩְj69z]Ɣ,ot1'd8f~jOMߺuX뛘Sos}Z>9Mlﴡz<ۧC_81YS[V[qz.vN{uf8jnY7ۧǻujm9nhNnZ ǺTS}PKHB(PK!*Fres/drawable-v21/$transition_expand_less_expand_more_black_24dp__0.xml}1OP baq0VͨCM4 T)/899;Y8Q]{w^#Ch IEsˁ2- 2dfSܛ32mU5jg;]NB]0ƮAFeL*rh"P1dh$B*fQ0OL-r>\n(ϒ84S_i0Zs:^9Ǟ-s:-)Ǹvi/rxbџ$Q tcg]?}r`9Y0Ȉ^Iuw@,z ~`&4okm{ cKyuN;})r`Uu8&ﺿǖC[XPj@ӥUw=kePKq+!:^PK!*Fres/drawable-v21/$transition_expand_less_expand_more_black_24dp__1.xml}N@g[p `W5^Lj<+4lS8y-&q,CҸ+jwdQ, VSTo8w&yNkoxOϽ4nCNs3U fhH2uv|s?^PKkPK!*4res/drawable-v23/abc_control_background_material.xmluNK 0BkOKbkBR.-ER* &"CMa;X17rqFe$F"M5jhQ<IFMB0KZQADO&(k ?} >7f{!xz1X?oPKv0PK!*3res/drawable-v23/mtrl_popupmenu_background_dark.xmlœN@B $ҭ1> ¸3ViiDž;ō1ĸpҕ3)d ;/r3wno3e1ڠ=FD2>I`cpN9@ #C eVx)~ݤT;*ZBƒn,Ba :<IJFWN7iSZKSl;aJ&((A }0˼7s{7UG\9uMbUT(ϲ)hHx*ä(s 7MvݒzyM]YI<{OѬ)mhLtsvj^stkn?Sg }LwaY/-]M_^z=w MaR9c2Q}a3/PKUlnPK!*=res/drawable-ldrtl-xxhdpi-v17/abc_spinner_mtrl_am_alpha.9.png sb``p f@$S=Ry9R@ ba@* $ $6`@13+;,CRƈ'|P11$)y9(-*cs2lK-\5i09r!+KzVLVvWQ{W9ǨhCq ӣ3o䳪eSBPKa" PK!*0res/drawable-ldrtl-xxhdpi-v4/ic_share_white_24dpRIFFWEBPVP8L/Gm$91٧~?kێG'Iހ16gc{&Nt*sHn]B UTX!PjE++C27_mR pƦ`Gm 3)|=\{!^%aS:>[Od$֏6LxHbn&ԩcy|/S"[u8L8am%0b5CNe F R=BI ^MgZ{DlK\1XNbC'Π+y!w\j!^4IJ1o8i\5cMfjf&Rp/OmWq+ ))_*ȥNO%MhO( rDKh̥2E0#!9qr BaF!Ќ.׍ 0lCU7hsmb_yN _PK~BPK!*0res/interpolator-v21/mtrl_linear_out_slow_in.xmluK 0' .pҕ ] .C-VԦ9G0CoCZ'|e`&1Ȧ#bԣ3YTܔh.p4{o\֫JM*~B%5 ֱyA$b fljT,BKGfg; 6x"&OS/i9)f?Vqr:87vydv|PK- PK!*0res/interpolator-v21/mtrl_fast_out_linear_in.xmlu;0 >h*ԁbE@S9G0n/ 蓭/$QNDPp` ֠ d-GUq͏qD* c)YG{ A \[͞ /T }t5;xb˷a!5Gu*i9sres/drawable-ldrtl-xxxhdpi-v17/abc_spinner_mtrl_am_alpha.9.png sb``p @$ELRy9 @  |TD^AH2 HDځ X kAw-B(8S*nîaA`Jk4-NL W0ED+̢ PK򝫔PK!*.res/drawable-ldrtl-hdpi-v4/ic_share_white_24dp0RIFF(WEBPVP8L/#F$w:vB]b *3:9Ve0π[0&Ga۶]1%Z]ݵ`.UiEtUPUXHH5u7쎍eCQT 3ys m]@׮KpEpyDUjpsghS?֮.k[zgBwnGŽ';b'^:`tfJLZC\pn/B6eN^X%q n hW˴ޔ[_{be?PK-50PK!*<res/drawable-ldrtl-xhdpi-v17/abc_spinner_mtrl_am_alpha.9.png sb``p *@l$/ Ry9@0H1@ n~wH$30)9i$`S YYS@ꅧcS2pՈ؀{4&/Wiw4>ϴ x9otRhlS~_T9Rݰ*xmpˑ>62knѲdM쫖h%7x՛uz  >i;oу+SlԻM''c`yph\/bF}G1lȴp[RNkTi>jJSkq򻧫:&PK<%g̦> ]T]uG!VE֎/IʙdC*ܠ!P$tOD*|ϊ#8W!O0ih%R~SuHnpNGr❠DZcКxyKH Xv +UIԜSYuzC~fq$GڪBwk%^!7 ^h_.G\K نxr3sJ󹍄S!TDʥƿPK0(:ytPK!*resources.arsc40u)%-R* At(]!]ҍtH#- s7;3gZk9Z{oؐ4~ QBE'cO!1 Џ"ΣZtg3|FOv<Biڳ{ ]JNBN0m\"Qޣc5% 8?Н\D!|@GsOd!Wf{dL|OgƳ+dOoH&J·te w)*JtcgIhqLfQ08З<${>cC\:{N%:3=Fgưg4c4yJgCppLC3'j0fSslYB(Ggr)d کl#sOcưhޠ9őA !9H\!KSfs^9 Ş( g$yC 9_ #9M_њl9:2&W#Sur9]X r4zd>=8C}FOq33dUЕ\F3&sEėLd75 }X +iTv\ i^1 oX)SW4aHZ\~RQl'-ߣ'KDL J>uZnLcz1&rjtaCBA&JC3S9SJ36W{i<Γq;yʫŊ?E܇!ImưD)~{e[OOęU+fRn,> $Y= 369IBl#zzn {ɗ9GrLg !BE:0C{d.fT#=2`}T(f4ek8F'@f.CX9Z08I̯j2ԧJ߬#];9LUdhoTwqHc 0\%YG=: d 'II #}9;g* #YaRwvXi2uuvQ1l?ruL7fd~s9@>Ei1\"hlB3fr#YE>P,)X|}Gz$B*ҎY;ߩrlzcÏgB>9C<ڦ>4hP5 a Z+5|&> $.ǩE/qǼ12e#HԤ9^e^Rm)KCk<;ƻh hT cLrf7ya=7yJc<H:9G/6d*d}%0NbDkư+朣9N~05 ?˸Gޙ6Rf5x~uН%_D|E'fGC7ss4bEyr&b#?? d=)@җ%BߘAk+qhj0<%mb5jno=*9`Vs ư_NLfr +ŀάW9]7k^3kłq3KƋ뼛l#b/77ЎlY6uӒ8O3bI"g-g:=2$?ӌ!Ey!/ &pt͛8k!R_5>Ob)qڱ佡1$)h|-{`GK"9?B?,#}@={Dc&pMiDvĒal?2<4W0<#^]r>31>7!l:h<;Ą e7Oy>&&|Mq1R帘P$i$& sȋјP'M|LX5 % AR% ilΓ5QL@_6IR!IӒl&ƄVsDbBeOӘ%K kg$H2&|LGqbB{Vc¯)ş Me^H#vƄb'x!]L dO }LNb2џm$|6&;Gy%cL|,SLxLa/cB~9B"FTwVrgƄ2c.I-&XU2e ens1Fd9bB)~eȝӞ1$z>&G+rsJ 1m3dm&b'0d7xJcBC&sg_ _Ѓ5

.L /i Ƅrtc5)R(&g2'|7y%&IfpƄ `++-e^(g(H8KEcO^ Љ79B7cg` yx1Sd.+KbB%d~["ΑSlY;[d4e2ۈgoHv%c7teIS^->%sʋ7Dc»f.~lΐ#OWVqb{ٜ#'jެ!7Lˊ9Xu|j a-ISN P,I?NkK qP/tc!gI[>&/_ KdR cC|,%2.9H'fpgߴg.HUQo!SXNp$.yB2MpNp|ENeWHTEs~q,f9cBub(I~%ҟ!Lb>EC1]&OHV]9>Xi+Jos\?Iڲ!~2ާ,i,Lpу;0H-㲀Dk;QurT ,UEWF'ݯ/6AkF7y@ߌOz3,gGKvjMҁ7Oh/6[~]\vs< H5L>P|G]ҍaLa)9E܇yyR|AuZО/\ vYq#x4mh&5+Gt"ߟ,!99giRpЎä`fG8CbLیd~`r[)O^8mX!xTPd%۸γđRe(k}"ӍI:rQ)w4=ݸmd<#,KC`6Kd-G9^K}lֲDx/):^+XOyO6q$y2PeY.Qt>Ik:1P: 4泍c""9M>>R'ԥ<"n0ЏZj)"?М[2qd [3TX]F泂ݜ*1Bsĭ5&ݙ x*t(yLur([ ï͋B!%|Αi{4p*xlvOa4snNb.|CUӆ.eSXzrD[M>*MpVr6#Ù\6$.&c{1Ilvwd7ȵ34`0GH=6Lw-фd1wxB=zA+F3"OHWuJ!RZ4}Bv/׉?W*oïe>8'YK,/ l&梾EQbV\K꒏Fm:e^nj҂^!NJLx<9yל;uG5z1ܥ 1)KIvZMR', nR?qsgӍ!Lf5yb6|Y@>):y@G1<[EWOO!ޤuiI_&TWf%C tfOؐibbcCI#FnQ(.6Ԣ+;$Ć)m \'i46<+ғ?9?31`#8I bC*^-@9>~7F2El(6 _ӓE$Sb70 bgMH P"]6U@0)Of2% )Eҍ&{R.aOo!hEF0e\'qؐKsҗ a=}R>Q&Ks6-ƆOt?X6q"EzAi~#Yzvs<%qؐOej҄ߘ[<3Ɔb*~^^M~f8Qe -XG,r9kYcCwsDxFL`&KY>+H\l69c2sL %Js^ ёŜ&&sy>5b#d+ ^ :2$OɖO_9gyJ>4P{|TnfY 7=xYs$y56=~}Yzpk6_>:4bs%auKTт_H%kjb/C2wS^ c.nrdžLӖ `,9U ic/gx@7y('Ti<\$?1+X<6HZ҃o[d8Sq$z۾F[nΏt0 ?0wSwp4/:eB1i(|(F$H풍2iMz3) ?du=f<$'Q!myL"eōTfw)'74/cY ">3y([|D цd1I>HI&}FN_a3jҚ^g3Tg4HZA? ӹȫ_</x4` 3l(gIhE7氅%qP'Vt \>I*'ޤ4iM?3],b(9-λHON^8?Ҝ?2Nr;$sR}oL`WxHb6rlլ/iLRW xWiEg&ja i#N)c1?RL*I[W1\ { sbLI>=rpEf#HourZ7MfY,DsӴ}K:2%$Q+=ovyh(GƶbC_0 2=~~cGMriH&{HQ hMAG 1U68#(KEڰ0|vv0-.T&M_07HC# "vqň4=Jr=WI^7`VsT'E+/8K s9oQztg,sYfrxQJc:p&JPfYvls"X>Nq1&n`5QR ;+*5Lr*3 wY49KucCQoYn79UhHXxHq@2T}tlhLNR{4,/TF1> 0&!2ݖ)`p9!ߙ.a:9DYSӂU-HĎDaEyoXb1}$Vq ix/!aOr;[ѝ /U?B3 <2F |XM^\iN_&c# c34+ݹx*˪jwpk*J'1kEB'Ʋ\!?ꄪ/A:9Mq3 *Ȳ^> #9-ĝ~lߤ|9Rw)ß_آQ\J)SmznwvhzN]Ƨn:hǝgm:ZKH_n0CH}=<"Quxܣq1!yNĆ4<)?OGd=-4/#I3=9. )|^Mя5!g9NW(I}{LWf2}$>YECZқ1g=ьl'u` ^ǻ坷] )HI3<r$L"=d8ɳ=X)J?3Z>t#qM~%cx@8y,ԙi'[xJޘPᤉ Jָ0}dąRF3e,(rą`/ƅ#gP|Ks358I\xT1M\".i\@c֑7Y\!'7.yxHq&e\xid/Ȓ)MZ1l,H:. LgBz RԤ I&.|r~6lPYmJ ]8F l\C(q*tVpdqjԡYg{&CPZ e nkgz1\>i^ (ͷ4-8BѸRi&Ai>:MhE0Qf18Y& d~3.csB lbvsTo:15" ߎ 9ij%iLg9 I  ?pg8b?V[}'Ж\>r҄1eGc8N'ޢX>$wH.Uh)q>w`6Ys ^^l)[!.dHirZZQJ}nvUA]C$Q'fq'DžH6Sw<ͩ=^M?g_4&gS yLg/(7׾~Pa82M$_ Hr6%13)Xq;6&Ņį3I\1 rЙYm#|N?=Ǽu^]}XI:Z3k<}ŅX@%y,O=4H(GfvLc b#!"p9A$H I(ԉ#0sO OFnZ%;<r |2jHh! _lJ GB adz0#2E-dT19e5 %L6r-q#>GPNL`fHyery'u&/DBUڰֹ!.&O$|HR*o$La'IXч"&|]~U f8.d|H\/GBHjoq/ I}â{x=:soZ8J\1yDI|H: ~W^Hd$|1d.e Z', D(u|pec)1\&''ԣ+9=>- ]z F<>. s(Y$Tss{<F!MHxAxH8/#ǯ_Eü&]EE+y' +G4ć^%0{9[UR@?\Oj qM2iVK=c&9Χu"a qucyLȧtoHh0FMYNƾ˯ YQEiVJ|3eskbV kn IJѰo 8֞~o<û͵2= 5,q$ Yn c E{ >wz˟>_ B__$  WT _ hJ6s[d,ZKam| ~ғQ%HQlh$\aG ꏊ7FcA߱g  OI<7Qq43_Ҟf^ X%:ųTb$kS}Naѕ 97 %tcQZak9NbF]fqfiRΒ? Nmv$\#_9G~u>py&h%b+8c*.KI(~scZl\hq4KŜr4d6F-oSEmZe!p6P`37ȸRSb*xLdVrk"-AʵhEOqޡ5)Y *n4?ӁLe GMrl4ȴY>М]X+۽)m>xc{m~} 9<$(Xܿz?C$9fH;BU1>O)q"QKbJ9Zѓlbz4.7ғ8J,#e*4Y5\bM}Kc=nG1ޑ?0_u{z(;W@c)P,xqMǾ'SJ! W x#.9cHc,FCZG.R' ()ECoVSh8S2'L &pgF{`8Fd KH< R^K dh*:LOL4uhrnp>wKo )"F3g(XFn.'H9ѕ<`hhzg&]hH=^sѐ=g4\Xh䎆 _|pO1'ahHr4+ѰMj^\&ek+{O+h. C6s\CG)<,:nSCKz0q.s$ q[^c?Zj&,vrD{>g(J9Җ `+Q S6ta)k8M=,bHڇM 2c{yO fSGʧX= Ў,M|L|@i*ӝU<$wl|eŇa!'ć|T1ѕI %i@z1i,c'7LJLEe~"iܼ‡cK9 Α a|HEaޢ/Z&--\\%EPrԣXMKJВd;A,>,b3 [+?P>ey@!-Et_?1-&xBT!=yO-fTGџ,e=9ޣ;;3iCV^҈Lb MʳCjАi&d\vc !5x2|Mu3uȐ1>fCLb@qNr,FCZ2\w YҊqLe͞xʴf$H|ԢsqsŇ)A%zH\ hޛP6z;uhJ;3\!Kr!m;ә$p/ -8-R6 H/jMl8/;I.C.y->N Z҉=*Ru{oćn\7C>(&i(V-.WIV|hQ&Vps+a|N|3lyJƇ-H\Js}v'|MS#|ܞ2$Q 9-Էmʶ,4wI:(b+gy9ӆK$U3La'Y3K$"&g8Wyk|cf,H]< c7ICSnl)~ 0HOuď4wf^ER}>Ʀ} 56:(_S,/6ɯ΃Lc+7(1T.цl2نy#9Jz#yD|>)e 9OQr7hVrݣ(C]z0s$<曱"ş7|@yЀ,?N?cI<Qh+|=[eW>}+ZufqCҖ,cW? z7'=9OM9lo$f26[<6u^oIE:w3uީ/(`4sE. \%nq_d33NU0s%թlV#$CT#RG?.91#D$UhL[2l"icj-:OSd=f=큑Ld;t½tf ,yxNCgc < i9"hJG1i,a;GI3j4dYNpdgoR2TeYϩ%S9ō/X?9h\4C|Iϱ/ +8C޸b}},ܦUkgӏ f%׉\~QJe]7@wcH}{ KOfpTR}Gp)hNGz28]y4tX?s  Ҥ'Vqbgb%oODŽ'keI'*8CJ=z2"1+zĠ2WLhJOcB34䕼1_Rg)e^9 xDǧt`/.ipΐ՘P/y5I ~g^{FNЈNL"OS4~ӳߊ (\#T,VKqd uzq$cGa "1!75Qݘ0y/&|]LnDŽ> 9E퓛4HO󠔸? ScBqebBbB1a>ń4+ W8ELЛS <{Le#{CoĉLRLhxNq6cD6r _fɾSWT ]"sU>ǓjG3BNꄙ<ٜX b3b3IO+謹|` 7yp15IZ)K-Z3BϘ p^znr1d'wf3i GwN1uIÁɿ\d,te79DM0SܩXy= M 0\҇;xudLb 5|xceo1k$.}\SZqxg 0A'zl_sS?䴘~euf.˩:W:&x>;ܣg3ҝL>d8ۈ?'a9ǸAK5 _ЋՋINg #.;sH}w9g2MnMMd?n7kB;+wŖ)u9RCzkxf?T>[_vN FLc?)EǴg%CĦ4d:ȗ2&L1%F"%x@H q߮cXNh$ȟHHk$zոOLH'te5WH:[4pi#$gw= e 2F¯"a.ɕ9!NHʨlp|OE) = o? gx6Ї<Ϲ+ ^"a> ^ D<︑P3@|4/)^{9珄˜x% yHJHiPL& E7-y;:Lb GB 2<@H(n$ >z/겆w/[VLHA$d0z0( Pn`)K9EBIƱL5 XT$4'駑Бԥ[&~gGKq'GY=Dr_Ӂ&GB%7(y$4?y uTK%Hx.,e 'IVAk6+F=, Y*E[# ?џl%G*bZ2| 0lUWM?.i ~o\ϽC$_~|?Esf V_9HFC@r@%3Mdn꾴hyk\ F}- mabZ1b?Wyj|RLf!8AݑP>l Uf !sW u~a=OdA>>"52X7XJv(C'z2l"U*Ra*kI. XLa{7&G7ЕyDmJ)GcU鸳! ;|C3),f[8H=JӎÔ  #26s;DbcCZS4`,cbb?lyKj#':r$!2S. `x#!65O2%!KӀftaX:r;L2&ӈ esYNqԱ!ϐek9 5MlCI҄`Ǹm2u_ Qh泞!1Oiog2+HNч'6\"(A%j+V\#& -VD2)4fs-<Ґ_P1L>dGf MYN,8HFt6$>g~ Qa$9A3C~ޠ8թG 0Ie9;9ufcZb<ta ;8Ma]Nx!6d.cCM:1]$m|K;F3u.<ؔO-%ϡ ۸K7Ж#{Б KUuFusboĆӼ\-q mϥ-]Ŧ7HxG]m/( a1dEbg4U7{2hTN9hRXlhޠ6M_ld.xSf_#sn,oL<%a_~" s)5|j2cC2fmF}(VVSWo\ByD/Py+'CTPC|dױѾbl"7s$T2y4ekWV+Tgz0ߚU䬢 :W oUSlvtvՒ.P(/Yyf׋ Wxc=?gGO5K9UַV Sl9]6RalRQlFqp|c5_65WHhfQ1?CXNņ r9=D<)wQjfiڤpq\`sYC>:3%O47s,v.Ƙm<9hΟa2^\.LpjП<$D22X6.jg2YޛݘM>zt<駫9zT)\,Ύ 5W9#Oo;[,2iSВ_&bņd o4dq`7yNsd1 S4;^X!XZQ_Yb q>+k:ϤzgΓ j(071lDj1|Eq~[fn;CGr{٥~vor1C{92}$ ?xKjVqC1[@#zݤ?j$?nR /0XOZ/KHstl Ld x5K\hZN)k\Nd yͧܓ>>a(W(L\>n9] S9BeP:g\t/ądGI\q<rTW3jbŅtg6yHT`,kr\`6"\(/L`-OW Iw)e(sQ"EFq 9oąg@;֓͸|x;.bs;j Uąu?.{2UӴgOwQfą;x >(.\#c=Em汞%Yl:|C{rKŅc4.s9AܤT0l?UwgyHrMs|\x6}G/Bu%i2JR _A019+35 qWۤ:ҘLcHRYλƅE$csߙ?t&WUƳ]qCӄ\q u4qB%:3>)kH9BuqFQ#_Wc{8tSo;џ a''Kl5@lS##\ bo:ηgޢ;zNd瓟 gNƅrEY#3X 6rĿV Y}:`V|~ M&ĚxyO3:2Y>.R{-SyHmAr-sqYn09lb7I\a.Rr6VRϩCS:Нab[.qĬo RHo&0XYZ%c? z7(?Б|k_:sϩ2>[wٿA~I٩/张4->RkQl}^=|.~a(+O~3㠵PP\G}Diq9v̬q9c NN f3wNΊ9,bEi}y󢳜팼.;8+3~)ה坉N c1n{]5{;GZ#LL rEC_sɣ!uhXFѐ=&^c 2tr\4=7 Gh  +U4L >u4b>EDb'6=EC*C4 䃌p=s4dTƱY!'el!ihxI\ S@#Pt%\`Qh8< {yϋ85爆q G}+s/^'r:o4gx9(#dz%З${z;]y]NX r! / -XCgDCG&m( Ҁc+9 XCw흯EG}OVNh4\uh$/|Gw>p XACM &,߳&M PY$/ iof)I4,sJю?Ii4W'ui1426se'a| %@βІ$pGCu֐hO/zpw Ƴ<5V s8"1t7JG[1f0+gѸhK:s`|wc 'ysޜΨ9Esd*|4O7x\YOƳTs!RLk>7A}z$*сI< >{0Pq唣,rБa`+e#Z-6[UKxUE]+<~(VkT[뽄!zs& zĎ ݏ["[$_n l`T\]Ѱ}%ngڱ;cf)xoo4e*CAAkfC4?cꂒ@sz<'M\I1`.Hyz=\ gC329wx2)6>5ȒsCMn3c|xIb`&lЙlY;[|hHF>mݤx&>OqCI*њU\'!P9ds8G/೜a(B|1nP;0&>%Y}^YL +!A_vʿƑM1d[v|U0>D+pHP^)ӤxWПy.iދh|dX|Hͫ+MCsćl6oWXm-0ĖeE[>ґ!fg|>Gl;2Nq2u>}[34eLbŇ@(*3{td?_?5i 1%'ϗRg{95~"hsCBPy$|+syeuKo(-}W*ы}d7OT?ja٫"F|x2,g3G1׊\`s2ו?{9[jЉe/ֳ_}<3id> OF fki'yHFIޤ8Vgҗ\&zU4i.I0ln= m[mieyZ!j XymY˓mEv2d흧OusTŐ;ӘteǸG>HcqZ/?c|f"} po^#*Ӕf.9]]-PtVsw.>hm~^xT6-b^bI7DPO?CϨJ;\!0ǫGўlVjE z1U&'T>mnnkxb q4 S\v@~'-22ƻQarX屮BQ CY9jS?Nr(6FtwH*Ә.a;I:wML>jџY2LV4fN}BVq/1@@Csz23ܟg:6˞I6[ >#/9 ޘk]T1Q{.P__r."fRm1XD\CzcQL"2e.ޡX^Zp;UޏV5K$UTCkݤN7{ɲE3' ;f&Py'vp25ܩIKR l< n>9=fny(BMЃV|=>2?k\;Mr׋zy@S1ylgA8dR6M#%yGM$;R f:;ĞPoL#In?ligrgS3XCϓ /:O]>݅c&U.]Iq)b*G|M?ѓ]wzm n io'6K;z w(&{fANq}|wtay cZ0fB&;do%dR*(6Sb)^U~"kar2Es:3TQ'$buMlC5*N|#aYM1#&WcϡA&sM=Dsia.4fUHl *>ҵQte YQR4+;iN?l>y;V<;Z'Bud5{xQ6`6+9JGSRWs]]7wwC3ⳞEn˟'Io0hsB\৾~y*W|3<S#ꐏDk>O0gi9K! pBn޽YygLUƳ<r431\ŏe3Y[(X|f>5?Іl&v >!)ި@u[8=޴fX%2V/ 4Mi]HoRRԦ)}$EA%{$^F^ޣMZq$bt/Ws 5?폂:0),`/Hu9Ea*э)M !?iOpԷ샜UiJWNs2|c: 9@wQ*2pEIц,c B^4Gc1$2*Ed;yo%ld/'IPQhp&d~] gqݗF4CbGq$! S ` @!6tc+9Ck:1%I<1A%0GS*r!oUOwF0M" 1!;Q6 K$1D)tlbKo3Cިqas8iB0l`yD\bbHGާ'J %hhf":1+gMw|wtC rJ+W|J} YY#h,|z755cbw)0}d$ ,N\ cPb)51T`(-1L/)Sv`Wy@ꋕd3a&KyϮ(OLb)M AJQ e܏Ԧ}*=_2datd2C\%T> frd}:&S̥yF,6^4a9BnS0_фQJI712 H\!>3*Rft+/yqļy7)w4t6__qԯX%^M GhZbIeĐ)*lStf03X5^yShpbQ\>Wo}.!m!T2![v&{씽C3d~{>~ޤX}̃lѥB c{yP:4Cf~i㲁e1M\6qeBz P_D2*\$=e9F t'vr*ta,{ITFi3u%}eg((R%*\U?sIz;fmj:YgLG1g걔_go}z<`-xHz5499:4L=zM=7E4mnZx?#&ukc#uN=z1|Y~k!Y XQ M҇ld?)>*1 :wǨЛ$d"8FQ#F],,s5.;RLe6kxWf&+G,YEtoyH=OTxhLp DgIOq ?o *-?$L c72CGADTb7QC 6CB_VÌP~ ׉nT9-ROc;H<{N(gk9Cmc SXMQL!UF$eަ&}j )#uJ_ix6 z%iHfI$2^?N&Ʋ'z'K_/R. c:yf393ݼ<hM?swf/&s|gG Ė!BcX<ȻXlHSKy1uZtݽmܦ v)MъlvE^ӝ9l ȼ6*Fy[dZ'@$YAF{a"p:39Y n;ӋIl#V9Lq*ҖUmŧTC>.rC!v +C]d0ai>Np{SŎ}kspGs T9,%=Qg wrQjW'đl(IO!|ʽN/o筳Um=/9G܅s_7eqkKu+HrC}>C[,myHYG;.2N_O3p|sZ2wTGvsO-뤻b6kl~ﻇzm*韊 uI'Dѡț8:/J>d4:ZJ&hNS0\$m:Sc#Ox!Et(Dk&+dHҎ!,REiB_K!$sKQѡwttHtx;{YމΓ>!:1cytaaDz a)ѡ=KEMBd/(45stVdMK9HCޠ \$ Af5PeҎ!y6k(RN萎4d$.p ^8_׬uko7!]0ZosPVtXso'hFO\yKa1) D/Y@ق[S]BѡQr:n0E)~~?:\#W1cҁLaH5C2Lg)C!#B4s1s<%Ga1qt@&dt(O'F1"L/ +E0@!5$6K$hO)@5ћ_ nruQϨMU'`9& ӔadtdsXfn|B9*3SJ0D#ݸFꄷ)CUZ2-&(=Nsk<$h 5hɏ c* nt$`XNQ!qy}l6Mk ` 85P2yNܓŚ~Lf!S Ntc-:U^0Yю/Lӧmbtk+}cF#LK'Vq,#J&/C9Bg<눛kK={9@ 1ë ,ƒhxLq{_l4OIZ'?%)O329|T6ݘCR&P$_&dkI4Vr<"rkrQ tf Y^l+1C>߄w4-"ֳīI zī݇vqk3hC/ DsT13Ih}"=Yy|@KrX,۠q;~g&{;f"[0nCr?)ȶKaȽ[ms{ ɻמ['\Nu}!=!aq8bQ|#$9&x{ I9rJ2<-wFQ~ȯsDb6ydh߸HKze{ŏ+9AU%&]sou{3:`2Є#XH}e/9sޓL3F;ܙKŇ~ x$~ OqTHxUTO 9G}L FBd30z#SDXzH@T1u$4PK Ik0*FrёpLHXED»$)M/EBLOt0矍1dM g!ebH|hrǼ3l/HhK"aoe|-:rO^ˑ+pܯF2Y_3w.V#506цPl rEBYH&|n1[Hx%Q8o$T۸|bw"!C~1c)[jny ]UJ!{,ӌ$- Y,"vt?ka%(Ϙ+ľx$<#!y c1HD} ?""a0wFe#8_ؿ/gEW.#[HW5RT3&ykwM1eONֱ_4מkHmd̞VKIoMm$vƠmtN#8DI]ƲT͕Sl S:G.H]]#/Z2\ajHȿ<ݾG$g7Tw0=1Ju#lN?c'Ŏb4 3 Ʋ3(`I4XniyPqc yDacӁ jeI9һhbGK:3)::Jc̟ꉃ$'i`i~193`]L(&Y𔂓5C8Aɾ("˔H`ROṟzb%xi197U ^nm|Irψ&n?S љ2wgH(N=e{x[s)+9Om|EC{hЉ_9@ő0|Z'y$K#D~gȼLn3kH<^&?j~Oъ ְc\ +{$ hrXeLg={9j{|I&3^#?h{|$SiƲi6XihfQԣnayQa89C%њɬa mV|,#d(U-jn67pi}äa|҆9;́=\_үHݑp {ėo(GkcYA#>Gs~o7wzݼz@;0<%A,hNqC,Rr;_dsBG/Ow*Ҍ,ΐpTx4d({9cRLd952S|I'0uQ Ӕų'̋=)!J4f FӑB z2_Xzsg|*Y{HF9E>-8s)X%9GF"0d7qtIN&O+z3yW3I,d$W%UKspdRV0s;$f_CK1b-$.wIk|BU=#"r$#/5iIG~bO0yb'Q㖿ܖ|N'&27IJ1,.fXN+wy|A#ƲOkt3wv="ݙ Y>fXfNqd]DA*Sa99M~Ѿ2e#K1Y^ Q g#~Y\.b< +uR*hMw&* HzL;4g0 &qvÏ&_ӊf:Γ"ї9l r҄ej.yxg+H[?a(so3Q: 6q$w(Nkg ۉӆ,d#I7&'T)lrO|xh@GƱk9{)1c§$Pp\&ûTeRЏPX s$+b|Gf ?2?8 O)Z1,c;9M+-XM1El8)J(QLX@92P|Cg )%cB.Pte 3?^rQc2vriLx”h@+:ыqc 򀌟uiJ[~`(9{Ԥ%?0_XVR~.6|FӜ~NgJS DO3\D98.𐸲ŨAu) +vrgЇD&[s4|z1Y2*3Zџq,e 'gMJ1+:ҋ`1;HV9&d0uPfҒ٬O]5&7S8EjpS]}0 Ո P125)Tr${Ԥ)h泞 r%FĄnॺla7GIZtf4|"y}yd;ǹs -9)3 cB-a [KtcTdqD7q9mV ISCf&aJUrtcB^zs1['ui q+$ioSVb͔3?ҷv%(Cm:2a/GS"mb 8iAO6y@AN>-O4iOY:p<߹ylwo]!wOS*YI!MG(K]=}NsĄ,M!О!Lc9)}|FC҇1e-WIû6Ѕ_q|/B'S :<-q?"*"u7 Eu{20b{ {'r[<"wLx|q{$cBSF??u>)9e6ysޥ,MPֳ=\!Q9#fX/3+OL#;KYRTYa:a(gb<xfnLx"mޚg_7 |p^Г]ڋ|jݳy7{\#ƛ|H ~?#ywtg6r'k?q.\Mp[CedžLgC9JYrS9@H^Sdžl41ml\:IHJќ%&*6|J7~b6}ɢcCU;AHl<Пb<>0bCC~d#3'>64Hڦ 7zV\(Jrdž|`V F'se4HH0uK,>6e OBl(D%WH56d%;8̓"/ƆO2qt/s%Gc2%l^ %r*vZl852jӍldž!,e&Y:.B T1yxxf*Bn{G4+}26rǤyK_Ptf9ioY_ɣ.$XӒ_XA#n$_҆f 'yk1K!ߙI.0,o:6Ol";H9jb_Tσđ4 IK8ĒI\xS9ĺ>7qB(ΰ_ą?xD/Bz]<` + ^h}+eeyV Wo|R>Ѻ˖qo-_jDž/lPVG=џSkl6N=A\HqWDž̥h TM0'y3F%73h>LqaQ-Ŝ:e9ZgJPl>yXk>c k|}'C򼃹ѝ Q )ؼY_.ji^Z/C\X5wg[F]xG\: a;Wy1]寧тn߳~FҪg`_10.<;H2$`&H7FƅŻBdyzOX8..I3x|\Ä jg:]ŒoVMi/R>Es:2't`x«3-_D5Ko 5Rhz\=B'ט>a2-{l"q'bC=,^0p{\H9TX!=W{U\X v~VxĉmX Y#bS_n{{F^}̧>q~5C}$?i a9AK~bs?َŅԠ;x';N\$)T;tggppyAL`9(b>ć"T h<>\IpMn  $IaxB$M|Ac汅i͛&g WoRE c;I-Ib+|@M䊍Ӌd1I0%GkFsZ̝lxYSaL魝g!C|F13ӈ+f͜!dn*/ye-^U̳y'#_ۗbJ|{5>d}MYz|h=>F|"9C}i->Q4W|Ig&țbD'6pv--9Sjsy\' y7%9Ewçԥ3Øbpő!]ЌMTg K%#YrR/iNGs -ds3uo5ӇcFyTXcome{bEP43C,c {yH̟oXM A9%,d+'g>|DUК~w6s~,%9@O4KO3ђL!u/Ԧ3-}.A :2l2\~PV c< AeQ:4;scRR ŇI Y\ɿ4ST #4氚c\ϔw!cs?T6 bWC{|wtfcbNAnJRtd(SXvNr4RA4s$k"_љ_cm"IVCm5.*pD5ShI Y>r3>H&#>[?b ?1,϶.d #<"cKg&PujQhwdcV.p6MQ d"s넶2*]UsVq9S)O=3i,a#;3>n(7N6plO(AM;SZLy+R%БLe&#DwihK&}PάgXq&]_$2#Gsgyg{6xL!AuZŇE^nbH6},H1bX =V-1',jw#uFάoN;>)rbIٝ~qW~f <]эlf'ST%6fW;jcH1G=2xvqUu>@7+H8Vr( FŇ%݉~!~\]7PR^gPj1(F}8Pn5p7z&==+ -f@SF6ϲ϶#)Q`Xw'nezqW}wds GÍz1d#'EzOLgOc3%"9y^&ICc2D]xe\8AeP,`0 $/rG\cZӇ%l̾o FVcxݙ'5{΀%Cs"<w=OSgTH%B$ a =%LZpZ)V LǫTLI:mB(;I0&6! B߄0-w>&dHKE3%l, a?J2;|!!x flҼ5HyϿzqdz%!,Q#ZBw׭$#!|0_f9JJ~3! 9s3Zn魄Po'nd/G< .& ; B 3;9]^,(tcqw9XqB a!%vE =L|]^.j,ְ{;B1s3.[ 12n᳖%i]|~4ϴ6G ib,mĉe"mBxۄ)8JM=^ҙm\"tHDjC !+BN=l߫C3\pׄp?xA 2] &gMz31rB1=<~,"Q@~*щg;w۞qљl!W_9N(058(H b*"*]tw7H7HHwwwwwI7x3WkOei Rww*'SCziLOCd?ғevS,1{|@֓\L$4 wO(qa0˸@&d4se2 4(w" ߣ(ћ<"`5:z9'9# +ӸEOLgeԢ;sA`~!8I5B1Њ cWxu(<'"1=Y}/r-J3^^&F#:`#_7[7эbI6Vz `.xJmzv|NSF$!^f[8;3 '.Z.v[{nLd=l3\%>W)o J=3&9:3l0xNރ qK=ޔ59OfЇ#E-1 Qa!^TOW&;Ə ыäL>:3D' 5 c*Xzvs$IũJ0<"WbϧDfO^ +Q2 6r <#cҨTbɜ,*|L,ДBT0Nr4)<6 vp)ŃTQ!/#Blj$iB_F0g7'sҥ YtdǸOQ!htp O*2$UzqR4Jֳ+<"q{eޣ =dRd ҄,aH%×T>û~)_Dq 66*`.I#Q}8K8e32E´092G$Eq#ًO;֐%?sYLf k9 Jvr"+Q'[xHWY1"ZTN*Q%la/'yBlQ!y|O3.].)GU1I,f z=*ƻ<҈6 b.q.pFTHO6R_iC7Bs:Ї"rDBg08)TT&с"[MJч|OԤ%=E\.[ﳀ|gp$3(~TE3 S9I<#|ޡД d:eȘO^A;0 ?V7|Da*QtdYN2׫|L ڰǼ&LO«R&,d9[8»!_me^+ަeHM>j-J?23\%^A\rg .+^06,V9KJU2\$U1'Y^-Џ5G Q&>K$(I%Z2 'yI3)"^)k ØyW3u` 6)o˷󝵖9&ru>S믨7O~г1*vPOQawH]Y_Ѝ#ϞE/b:#IRM-Q c)W3wyQa{d-b'T۳8L:Q(:$擠94Te${9{UCg,NFQ45*_cn"hTo1]D@Gms'$m*ЂLco6s"vq$m*0 &E[g3bBcT(KG[DuR>WH9*g3$bM&oWq2tsЉuLn-=䯧Z%t8aʼn<$@56 kg0}|6XCo3Ca~.F#;VԃѮa'Oaq-zQxoyFIy{P=`T_y#M3ědmVPd㽍wZ;o?NMJ/03Z.rY}I-=E%:hg=H$n s'JOSsyHjJL22\⵵bNY1{Zg1] zߧ $Iь"'>nrQd.yy҈()=Њ>LiFJ32$杘)I;+dnn_QL r^کWi|WTxw@ p5--[{Đ5d'1*eGAou4e x<҄'5Ů{ q57[OwWޕ{ nkR>078sd}4-#==%O)TІ!!?Ҍql21us*ј c*[8M^g?A~]9Aڞtcpģ3WӝE\B?ISz3Ya+G3"hDK:҃Gfa .;I4;ŨlrǤx;ÙBs]:34Z#i`&rH>qn|2 iJ1Y|I;l:%rR{F[&C9R-c^GwF\Ej< u$汇;$^lF"FS15٫=;QVe,s3GZ0$9')CsƲ\'栿E32!!g&i況<$aPe+ta3xLrʇ|C-n;FyDIiT>>IwZsϘAlჳXViD_s/%C/pw/?6Q'p{$$M>j.lwwŻ oR $jҖgWIxM}ϩDS\f9n8(C} i~7Y^s||AKї\[j%V6!>>kIsW:1!}2te :nϨK7sX^nitxv2<37)N3Fp|X*+ Ą\B0=$ b‹.YN.0aLHK&rSWbAR%v~>,iLʌd1D0|BLb28}2 R*OE*kHrRoD ӛLd%H´1X%"ܓc,vHEi$rcBVr2EDŽlk걖 y(XƄYBֈQ$}sɺi4"c1s<%sPb,U"/Ƅ|ԡ]6%9c1aGW՘ЂK|{-[Lx|KFP({Luk'SFbrXɚ3&Tg%Iߊ О<\b{1tƄʬ{1!o0@x+OLCc|.G>c+'I>iF|^8&t1a37{S G=ӄ'YkfM>3(U0&L q!^[$&lgQ@/"oW_ Eh:2 MOjz_ńt.>t $Fr;uFN'] pe;RFl_氌͜&I91 >kПgIL1!TޥҖb. cBMl 'L>с~6 ]Gk.o+ kIEWvW9&YQ^MRgiL}z3H,&k*Qf雫3oXYr4;HʞDuRmVz`QA rup6 1&tc :-rRT,"n]嬛=2N?Ʊ\fbϘ0-F[1*dGBLgs<"U_\ M>*ҎA&)'эLc{9} o%]):NdVχYe!GxD;)KUZЃ ,b8<䅡zT vrdf6RCVs{.]Q}AђH3)M%21e+9KQ_S.Lb5yBўO1O)7Ew3 "XiV9@p7ƻb:6̡ YzΓzާ,͘OI>/0l?bSl^QROs=XJz-ig4 $`wNceƳzotg\ Lf Oz)N-Ё#<}YMbOg&K-P?tc )PL!//.vΰTK,f38ϗ .3yy::uh0氚\9V|JEЁLc#GCf-EF}:2c<%*GIslZk% 39ZC:#$:g!S_iCOƱ_oI~JP bxD ŗT..m lx3)e7/9V9dqn:e>iiPqgRFlg {셿hM2!5sh`s<ċAbbAq3)>,2vp{$;wv7?MYI"?_PV,QLa+xkFz0Iс%%-=l"Sl&<3 >nܢJ YCx!=tgc"nؐoE;֐ AlHK0h2n%alF=Fp bCmVp}7Il褾v' dž/ĆS7͙J~` I$UlLP2p4k1e!Z?p|Na*)3ƆO6,*6N5P.&6t`3%bl"!;2q ))6LGf#slʴe&;8E,})_ Ɔ:/_ 5"WcJNkAq1ULc;. 2ވ rCnf:ؐT"۱m<<";!{~f69ĆO,b(Xa|'|җ9 E>{UJQ'cCWfIl?qG46|HC&q>  S9|DEN[pk|T06t"c!B±"8uƆ~&P>Zq%?JWa+%Jdž 7!ذņP&646ʊEy&Rfaclʻ?Y+cCjU U IҊ>L?>&`9I_=6H1Pn g*xW5H/ry ^]DspYw8M4a8kņtokxtrغfcIz^2ԏ Mi 2x =ҟFEj5bF3O2_ ib&SdGOj4'S9IT3#Z2%&Ms}ڴ{F4Z;U[dž[o/V r̃=;rMNPslT6p,`Wd8Hn4)]Kb͗ԦY{Ɔ 1z{džd#|C#nI_=N?, #Cy};AC#FZCd9x_C$ 3" =&59)F/{^#v:$81xϛ`/͓Izoy@%OsMQ_6C7Ʋԙߙr6GP!\EEӁ59OLr:2,˅3-ņi\qK2q%rs+bC;]iPuUlxo3 b=רҮ`P|󅽤YػAMom6_d{`7iUǼý@:w)LaqgFRD kr@!!a*}J#b͏v& e+I1ǭ`-'qB5h'%˸NSB-k<'i}Eg3^Л/㊘\U%i^(j1byŇsg-K" DBwr}.vR0~g:M EhE"jg_T0El!|xNbY:tb H/]QBHV^Iq#CR ?1^h BHL(pDT C9Lo#{P;}$.QkDl$B=zݜrБ`I^^)ß,d?TI^1^SjH(DƳ$!>d~ JKs܃\ʑ0C$9][pתDB{roF,6 vj#!ٯj : ~[ΓHh2Jc֌hjՊ6Lex}P&KH(N5cįkd2;yfe=Ft`A$ c ?7܃ þ{&W^h'mH(Pfk$jL[DBVҒQ,!/<"YHx*t"u$^M$cVQ-\.۩!RW|BAΘ1x읓l]"!k$}7'mw3=ä6(˽s<} &ks)β:@w Q>7H:X.XO!0.o}?98PzaWG#GYFB7d>H2N8KI E(J2yY&TzYK)Mf 8Kiz<%fS_8ú9B`f x@Y^>"!?О29I1?9]hodX$_tc )5t6pK g Kte ۸De0qv0/^i~Ryiy_?pFqۼH^vc?U=9cYK0Uf. ÙMǏ ^q B:#(sDq =bDžD$ -5Dq!&2'&Z2e\qo:n(E\T`g8e\J ^^I>m"~V Ņ@ ~6=2e )wb2ƅ,#uT\(D%3"Nq"Re YN~P a*yD,~OA~J=I).DS,.q$7x<tmDp[<"h5CV Rhsco$Xl7H2~yjԦ 7)?:XNsBF6?;e98[%d EiH&04)&rОa6syЇRSțQ&+p4S/(E]0,e38Ji+ВdYoz#`,w5י ^a1|e>`)DSAf?yF|*P%qWZ0I,` Sr)8+eXC҈vt/^c4lCU_,V{O$=DKf[#ޔ=&^Xk6:uiI/q&:MJR֌a'JjБe!Ą` HQXaI_0nKp"61[NLc׉ަ(J)ӁɼY iB;;^(R,&N"$\,v.׳ES<~sY< ,佃cљnjΐ򄚣JO{sT,>cמ79 *7yqhPQw҇%\)/_V0$"O9ғ U5sTuVwݻ=CK L{Ʊ%Kr7 1TBԷizgyH]UKwƓPta0E}9c%Wzӌ>x@GaJ{Ƴ$zy|h0]\&SؼƗ IdP\сC2L!=e Ig }I SXFB^H)|b2'2kyङBdq3ӛ!^RUC:s$O)D<2=9F”B*'ETB6Qb۹=i汃 iLОMJ)0uLsgdI)AYj0!}83f hXrkEe zԤ+X11B^!UxSr4;89Ekm^^sTE̙4d;;9O 9v e%1M.jLJ ZNE'((JK*Ҡt "!]"%ݍtww}Qf{q9!,ះ=ZQ갠&'MXp4iÂ&a6Ku"}SެiA}xFÂ\M氠`42vhYŌ/Ns:1Uęn,'v L,"uΰ`"0۰d.9{n3#dNOxyv^ﭑ2?6P'd6uVd(WPXЙO qЏ>>ex1Ϥ@qK-KR39MGKџ#c[2eYcs}c N+C%+[7Ѫ+6JU0K$/Vv.'5‚,‚|R[=АI4ú6]O2l6U+TW+ariO}ВLZ!+h?˦aAy\!y =hPƳc<"YsZ ZwkmSY6,N|zOJ1,; v|tW/=S{H[ROXYB;#,EAa/t`:G1hCz|=̌%MaY3_N9{NN?xgs$N={я-'G=b #=cR zS%^x01%a 1ӓGL"}0e$Bƒ!A5~ggȝ*Ld6S2_:Fof< 3a/gy?X?;ØY/ v~=CS\+ei汇˼%9D6pŜla7[s"rG$Q,  Q d;yObj :]Y< .gQ4$[3:=M.- .qDk$ 5)AM0EOZw=+xOFE&zԠ-&DmÃ(IUPXQ54c1$ܡAu1y%nG3* a [9wga':;;h,Α{3\ NWB:0 |;Of2ŨA;F-{)M=z1.z)DVxB^4uD6q9|wF$#v 1!Q ~Ԡ-cXXPR&Cjr7|HR f19-V'*uh?\ *;9{J/?0%2wLԧ=6X.+l%JP&dZenRve lsta:yN5B53d/7xFZ9 =R.DI0\#zs/|2n6Or$d֓o(FuZяa,(߶d? 巚m$vNX#e|y3;-y)A0%.3tXzXk7AC tX >>bn0||c^ulH%Ҏ$?n}4e)^C +N>gvJ ӟ\'i2-LƲOxg 1yϪusk<#υs>^GO/1D]o<'+֓z9C*pγ[俩Js3ic'+enҞA,yIz^La3GHxZ eHxWpN/+ bO)pw pפzG=;f#쑜Ls1\5zd=xI'In8O!JҚ%3g 8ÃL`9x;pPN,_Z7?Ґ~eq_!ηodHVю5O<&?Ks3c%[8Y7{)AM'= A!Zх`%{8=EИ 3u6 G|C!Ӌl$w#" i@ƌV"w hFGP9NDПXqg5z9OAQ2i,?^EkiN3]ܣwBe$XZp#_`{<"HTRN[SU<&Ab35iO7<"d68-{)#L|OQҗqf- sהH~y؏#Ŭe?' UDPLe.k8U^#mbNbDAXDPL:q#eBSu2""? RDF2m'v("HCak9]DE?ѕ%gzo/q#/IJQ a j39,&HF4H+Ƭ '|I~Xfq72"H(Cz/Y6 yKtbw Ø1n齇j4bv"|40<}%Wzֳ9 VÇEɬA,dAqFp$fSZam<ry )Pe3'@IZ'xƷ?1YL|bF51+<- +RbT 9c3r\ LV)oYX<(J]z2La{89nhE䘴 cD|TYIM+xox%b KFGMp¥",d5'q氟DٌKҏѬ&nig 9N2k*ґY^Nq$.t!nrT]fc%wVrJmL+s.sU=|4a&xJjD-q~78Ӌq kgJ+C&vqS(eiJo1u\'D.fryE;0< &}Y"z!L`-7Z(4ϹIbFsz0=ÙF6 RJ43XvpYjb![Il<@vrğ#/"?Ќ+< \}Ow>$\;~X('"`.wQte ɾϩMO&#<5.JP,g#L -Xf$^.lV\ IV3Qj/F3e!/ʬ! 9(E-1u%V{֨ӵM&Ov%;uiNF2yl`;'+z2,b?/Hy؝v#d ugMƱ<%wv e6INWxMK+B&)&lvRneKܳf?тbV|sΌ-8p$<+rь>I~=$E5A[YLGj\68L+bDД.b"3 J\u^Q a" X.phH!S d,KxGDte*sX!n }LEӎe5'ޑ҉Lam^5 ex#o)BuЋ)lzgF2ռ{uDcX#>|FnPFtcY3zdOl%Y ߥ?I32O;&d" ta2xNxȠ8]z;|r$s28-a<Ϣc~(~d)_QpfQFX)CD 1d(2,ސce!9$Ng+AO"&'?ю`3yCاA)2Y?"YU|e'I1##4 EsO֨Ƞ1A"thH+3fWxJAqѝ`1NbAz*R f 9m^&MdPd 5i#7HK5c'?ӛN/|A?qŅwZKYjИ)V#^& Ǚ3YN,AОLc!8mbe 1N>Ќ?F?1ld'yFD6<xrk<'AJԥ-1e㣜rp;$FM+9)|~Dq\wb0U=KZ0 .߉?PbKX>qP99ӹOz,8E@ D Ť#Jj\'Mg<LjSPXNsxi2j`GCbW) %i)Gk1oUT_g;yCbNцn b/I_<2iBOSD/Ԥ =,g3yM|4a'IJE'92S.y2DY5f3< v9 q$,oS+d .q;<'EEuȷ6`s'$|!uh!++eß a.8C*A~*ћKҪE.Ғb՜,_>5iO7nt'Gl,"f";9SV3T-YL:r< A:w$眤 ,.=Qٜ#~uhI2\LҚ1Les4S0~b";!>lLc ASO11wD5Soa4\NIݖ-}:Hf3<&~+##+trs ^k6KIa^w3h8Vp'E[wQRq,g g$/EDkoN:3І l xK?<#Zvpљ>LeIŽB QތaGN8 hXfc=QCwk&[,II#2s\-yyPaɻCMp<`[XOq#^/% Y(N%3$foCaЏY'Yk#u,fPshc@+=dVq|#?iJq$`/ KJ~/gyIAH2Ӕ`Oҙ{6޹3ӈn`~Nr|>,2Dn S?3ܹ?Lc);I=)N]&d#Ş* d)xNQbO q1S$o~2} dgcĔHNpVR:\Vs$]L, (f#],1Яte,Mcѕ,Y@rK<&lw4Rԥ cRq9z,b=SZ3Ę'dNf;_2#%.щ<%B3.g$HH)Kozd8>ZƏta۹[b/uy)J91g'G9wKНq`-8n 1V:/IWlXuv/%?ɸe?yZĈqf~JD *Аna #bmRۤYB(y(CU~e YroVDmU dx@mBVQ!`'y@Arvxv=ƱS%ė*`%y@=^{7yA}d!XYb7ǨLkqW=<;sX>򖨃r#'!$+NK:0i\ {9ˏ6.yҐ43YnDGY6.XPڴa 'sWdg8%3Nӊs;i.& R J;YA.P43xF3 ϊ_2?kY^>g0Y|@jZґALw~ALg3YsW4hľ|C#:чLe+_vQt#WU& !7 Lf=yG?r'D?*pT7hI/Frde~P6e1,e89m+"ui1"UJRVa SynOԢݘ973hJ H=V d}n󎔏2y,,<`'^L-SL%E;{xG/4Cd}DGW1{ ZF9]>Nh`?GI#4b +(3X'g j'9%Yϧoh7\%OPD BE$ CAyZdH iPPެ iPБ%(A]=?YGZ "|2+ zP0cK ޟxǧ`59B'"#22+I CH ƳD,D KsƱ$N >O 07m(uG0՜':3cH Sa$^P=8BA3?c(X%¾ U1#%S(,fgQYBAM/Vr4٬Wd ~H ]((D[r|GiH>ɫ>H{C((No  č3-,d[$ Ï@Cf|VL~^R\%|W2!TJΨC_sdI]RL s((C]t(^Fm XY^VPCA0l*;$lf=7IQ%amPQ-T!Cu=ZBmFq#eP0Ԭ sgSA(E AP0ꋻoBSqo 5P oPН\)1[c0)[EV[ mawk[JS>|3i s\셤x/ 9B=kF?P}GzC50]l!epw$jf2릏Kua6= Vqd5R~e-HGmp'|ך(K}2M<1Yh Ƴ(HHӚl*IR`IrQP&Z<4[Jd7b3jԦ-I4nP#q|, NϏWǤ R>&9tfTLg;O?gZ yAYj3DbЌZ$\Y2-1hK_&qKC|KIуql "mXrH uCڕ^l"Zwu*6Slse,16Z7mɼYB>|01z|Іa"b "&t>GeswL=y:' ;/td!(s2 uDCB=?⼦9COĒ.=)I2Y{>=)O񄗼SOq"O/%D7F3xFpg+U笑 e"۹KK#X.;_Q~,1Te=Hm3M&{h@VzbyBka%1JQ<0NqKDNs^$PИĽ^Gd$|6pw$'6 Y^|"x If퍜 >|d4cr$|T  OĚtd EB]3%8I8*l&<"cL6K<"FҨ ŨLc1l?L. a5b%'3}LcgxB?јvc,SXYès+Xq)Lb[1=eTLT0"Is[D|lT)n$14*L}ce"Ȩ6' 3~d8[Xu⤉ b "*hb˨0=dr^F$I4ME^'W&)2Zzb ][de49 BY1EA!p٣c2yGz9{EK< wQA:2=$eNmި,I}T5yiDVq4?Dџeܥp>Kor? D XIjX>,bhd.'i`0R\ӿϕڱJ 0|.YyxGz.t`˙异a$s9E>(W'F%$і.\jTP֌d!oVyF/z<#ku{ Qr8Me GIԙOg&C<%}3NL04rkao4b$ PfwIJ=Б97qxL6f#q~SNs,<~<ELr4Ӝe:DMv]d0m'ꌫ"6犯9 >ǩ@ @]k-z:X5RC'{o=Fex1#+J~B1_ 9}e^P(RpP"@w pO=.9]!sڴ /'05AZJА,(8 *2%c-GxO>Lb %q1Ōcc1<(G՗~9y%u5v>[W_d(e6ta @P ayG…v,3Βz=-3-Up *[(K5э!`;J\-:a( 0)HMz3}\-V7R´'1qLg8%}3T|I1g|Y9n5Q4Zk}\ :ghH;zE p|A6 P,`%{9C^}3Lc-o|3<-;ӃA?m?&\91[)Ljрf, Χ2y;:E{3<=4#Iud5Ljߢ Mޒr ?hH0m"!H; <#^A^Йg98 {|KU=\_ǔ]X.瀻_| iƱ.IxP-4 qԇ'4e( uع@CxN#ꔬ߬))MhpVDS/Lb/s\7qBlc2N8-ԳT3x&i{'̔i Ƴ}<$gy)I%jӂNg&+^nYd;<#5T1H'uiO_3l(xB gP d:1n\f KKQA)*с,a'{_3?\Q˴/Y\Qz d:KM]:8=i$!fۛE{F1|}´~Dw!х$]{9H{f<)FqRŚLe9Bf$h Ń~"L2+d(>?S[|EN~,}b=Gq]kQ$"J(H4H4ݝݝ]z83o(3;y#/f,Y.N|֬FQ-hH;z24/;2ӆM IS#s20B{=#G8%vxAHЃUl0xA(!A9Sy<$zԐ d r'Lc.s!jrx!A_0XN sH|4b G|&<1A1Rtc9UiV}O`1xJd6uGfqCTb0H#$(ğ\"INp9IڣZqwd.\6qLAP~?R7JPV b&{*hE?qGDJ-ӋQq|NI*Ґ f;,~1C E,}/ e_cIgr* $))Ԣ;Xn򖌅Ć>Lc%yJj-Xjq$6Ø*wz|6<&V! %E z2`wxJjLd%/C_iM;Ҕtd,ICY.R4b5 %%hI/$)-o4c8K]&$(RNI5zПF%:2E8*X]TC6rD$ >Xv.wĮJc-俘4+ØBN MvsĪmd$3@#s{%v 9JyҙLg'y+k uR>ѐ- j'Ya"hgu273,e=9?<#4!j󰩸QL`6a4 &ws=OrwS7øNjZ-!vQ#tg{M50M![;sn`3 jҘV g3G3>E+:3\$:Yi:D_izs c5xM?iC3e'GTØNrx1:2E&Oz3)=h\w.-ANwH<2R~B. 5 z04xH~g1m\%m|!k~g'cXzvq,ũDC35u{b 7f kŒ⼠P<'JӉ#9fq',f+h@s1% FeI3g ǹA:r-5d\)+EHkF1% WxKX=LW&dQXf{!9(DU3,gK01ED=fLgg>Y#ynd'?5. d4KyM0U,g3xBij3Kt!' hEW0-$gAj0$##uiE'-1g;k~!9sN}ӟ \R4Uihbܐԧ=in"3ՙ,6q c/{,T4c2+9HEsċ#E~G; }Xm|dpg^C9sY\sjҞdZ=6tgHJ4QV0|ƺ,q#Z{/qџE.lJӜ1\&38K'jc ,9d#?C~6|G] {./4esޓPt>S^Wb;bv-~>W^Ym.q;g==gvQ샹J׏f7Ճ`٣c54N.ZhCI,#4FۘK>.9c][r ә <^`2'Ta!A|?s B C$I iY) VI4HOhF/氓 D3rQ:i,chЄ:-Sh eoa#@O]Ǘ!jFzra2mFNy{2)O'3\1HdeF=ҋA524N#2DfGp$`O)p$\&SРSZiFz1 )$ڸC\22|FhfK< n /iVp\_Fu1'Y}^=^$ВLoqYb Ĕvf{I_Y2nk5KЈ<7NW <=1 /6(ŕg RqSXH$cXV4Z;8Vm 1W R:eYFvqE"T9 qZmhfr+)BmҚq,yKm1l HY"4K SXpGd8Eof17W)/e4X5x)N2Kѫz(Cukc/YC|KҖQd)YSm0Db~2%1j9T#~^Qjqg㬩k#f=9if(5iL'`qn$Cߜ1Cf59LĎ%icqf[G&bL&k340l..|4(F#z3V~iwm#m]ⴓ#ўQ$Q{!FIFhGa;7jkGwi /*сg'H@?Y9btT˚Ci1Ӽ Wod[M>4Xe>eg/D/q4Anޑs3lV6<&P6 `3xBaY1{H2,iF:p8#xphILc䌇D 8XM anϦ g4WxKYOvob>bkſT^!_E/OHUP-6.^fp$\݀lvb.U'Tf1 r{= V8X}4KnQnYV ;UiO_F[kΰfkZ'~e:gh,g"[(v5..kzYU^zQ_hE'&u8p8rb>/WO>,Aa2CG]zIrج9ɏGTsIvT_Qte,yOcI>`6'Ė.a*9;TOa/J(fq!G/F1gXڜuNSS iϻ5<'?ꂆ1] _r^#_R?:E/;i^1Ϲ{]+~}.R r'ug7;)Üe7Ir|5ibSp#m Ӛ<#cpt` F{fsXEW2vwnJP!1Rr,-)2?1h ?uoЙ9&'s3/ukqo$xgQc.{ҼwӗO]Ж 2}[a(aAaAhajÂB4,b= ~`Iߙ>*vX=(f8 X%^X"~Xp ÂÂ~lْX7ùKav%G2"C LO‚ rdMi&mS/X ⑋Ԥ=9I4a!S+25 K =u`md,V^9cXP~, ‚OiX58{>3l9\"JDXcDNÂ,,XI,bQRf7Rf 岇Y_ 6s9I aAB"a׉[mPNa.ieX0c=}gJz2|7,(L+SQIyrl_}⛰YfS@XЮq|$u!(-d!7%M{Fr(ߪ{jӟeq PM %$yFtf3HX\Nh@+Пd*ivPx/J ԬZ I="U}!ϯꂞ +eQXp7ś75/$j31e DaA&3$n!.2%oaA7v$-eCp$i%Ǵe<[d`"xM6GaAer#i">koVҁ"fuA}19l`/wHѺ9>餧JQ,v/VHU@q쏉,qws|C.A?9P~/3wXKG1B~bA8vO7 YM sY^nT/P_"p$,nb#׈5Dpaa;B32ʞ:ڼe1H59IBqά5O0)8XLIԘs_OQSXEiftb"tLfrc<\uŁyj/=8_ aB œ9'R{'8D}$]fFef"/)RW_jLkAkmz{ %88crn!^VݦN@y^lze!7hי5 _D‚CfCCݔ8:㎘G vLͰs;N?:adX9Mԧ5 I$XYw+yFĕJ %]tӁ—!)r\+2͜jqL‚oMo&U|RްBnq-b+yi r+T/YN{ޯ)x$o2<{D;YGWL*^ܽ9BܤKg^9ZտbFN&tIE/V{1yo}N~ds?0sďD+Rvrd:CmD*1KzR ~$tFqZ* 'p${񜊉ÃL` Kq98CdA)~e;aÃ" ` WxIO:)SURY.Q!R*uxpiƒb'ɝ=Y꧳/ }xƒF23ix!> s|`vE2 > :g n+52?wN"E\/1wx헞ɎƒyR䎍Ã߄} Xн #߆ /EiB   BJ,RAM&s4A=pOKUYRq?R J;S.wÃ~c/R)Z<1Zw]kqikƒ۫A2t zRSxi;[5Ul?w2=ƒT-Xa7z[iКl&?3zMr 6s=њal&V,>^xPbәψ?iK71e$Sm'm_/I>(;XH=$<<1z6".:LnhHg.tfkF&px#Ō&tg+oH5ʜ2}Y_:ckڳ}&t|x0l,8A0\=y&aRxP` 7Er8SUiA_&`LP=䞮G uxKjdd:@o0]-)f R /sDeCJSte,X}S?Oy>Oe:џ\21]LVS[?E&HB`@Ef(%OK0\9;II*0s\-up?RmQ6 b4XCeK^ѐ'GyҮ2-6' )4+93ޑd5PlgC ;SUR g9Y$g yDW:ӓe.[~Tm"{Dp=(C'fD=.τ5Cs|O1N lc)91OY)@9҄L/v3jgK9m5Shq2sy3xYwyW<3|{I;ØV񚘗ŋT{Lvswj>P fs^4yZ)ޑwưD{@ 5O'dS9L71m,vpo:]bq'xgd/ɖ)"f.E>ҏ 7b1[ўvpPIoS( 8 vWuT3Vs=Ld6hU%}͈'Um}CqʐxА'z]'EC/3  ꙡH=1]<"z}sJrFI%MCg27.pIXPvfq7џ (oTчLfMff" lvo4"[867`撥Z9g0kW$N11ۚ%;ۙ :Cd*Hќ!5bwK0&kg=g)Iʥn黫9CJ_F2?! ma5]B8Ә=>yS3 HrK _\fj$fFCsH}ӑb2 YqnO1~-N3%#CrbU ,NgŜ(NejP`(.(#Qb0|OsT zraLb+\cEÙ2m2< yI!Stc02^Sj `'b>'@bq 4'xW!QwԈ QLc k5Ms&Ӑ g gHg|M0 &3ְ"L1)]6n򞄳X$Lg-{8SvO Ӓl0w>G)EG6qxs| \ғ,3DIћLb+nԋ;L)vFi|rGt9+g&9";(N 2"y9>83Q_`>G 鉠"$~Q̔5+1uI JAJPZt/3:wp+Sip6qWŒd>RKSЋA,/(r="Nsч&Qnxs~ 2vs7Q 1oY _It/Yv%Mc:ӛ,f5_Z0D'g2gE@6x.'HyBG"yBj|T0Dl:4aMxNWf$x|!#hVqD{nDP c6Y./|2}Y ~OCz2d/ ,6DVsDoӐ. g9lb7:fyHYPf ]:o_c%sԢ A?7Ba*Qc!=eL D)A]S|52B;r"/i, G(-hPqM1"1#$i@gz3]$J #eƱ\.ψ;2HF:zrq"uiNVxA1џ9d9C/~dlt7#HA^Z0% Ӑ!,O(2HN((IwsDK$S2,c+G$qX?<%Y yiH_2WIG(_А2qG"')CeZ'D˯L~ >kϢ'kJ~yHA/f푲|(z~a9 ~/8m^DhLӸhd仸8q8% әlMJ}~ Z)1~OeaeČ$OYqcfȠ?ЖI[ydҕ9#Y)+:l6sd䬧e\&Fe95xO#ON1Д. `Y%Wѯt'A.^'j/11hF/Ʊ\ );/~r,5P DTg.K85>=a>FP˼'T6-Z\рl A=dq<'j]=qoblqW$1'j ŀl#d3yNOA*Ж Q9~5;xNf.˹G~Q;G(LxGR0v_ dV !/Cte8K8Yސxр n.0<&f/)6R9ldW>F]Fs=#T\!yG5fr%|O3䞠f9LCw6In;Y]0kb>gsjZ\}6 a.9C#H-2%Vt%"Zl|ESb+׫):r`ԥ32mvƱdۤGh&\"fxf3:Lw&0Gf19@=:09lxCmosogx^yHŝ,jAdm6P" _R,2(*>kei{'`9+Yqn: zn7ScX!񖄇:hQ8:M inRЃ\IuJqܽkIz<žo_.fy=3=`5.LwUzPP ٲBL+: asbX(HH~tkPPP^}\҄@U(N6܀҆CPJϟ*{O@]PA/=(?'P{Tc(|7](oCwPNuC-(M(W_:Uz( (/\CY@KP~O@)( W`P()WOx BP~oA#(PJJAa( 7`PC(ϗO@م.WS߀P}T#(M(?0PC(>? B!(CyS/B |s>几K(Oi5Ѝ_N{OzwC[I}5 v ]W_ս>tBe86%V,A^]zz/hc[B&D=:⨕^Ѹ?4~fn5Cd.鸮m 赩58MuZQn,.樃XaW_49 ٷZ^KH@2s#;|ȅ>ʏIgg nv#uGs#j1v 9ωFs`=-? U"VcL9.Y$xF):b+J:),45neHAϮ;-ۗ>8 ۚY%|3Жw҄zF.6EA!㛟'2omvvٱ7q$T2h`Xuubabv8Vbx4555xe6jG\澏.OȌKA(hzѰQAqA%'֌6X0H,h]VմbHI1jXz`ޗ0&zӭfMl ۀ)#1Tnnj'wZ"AeF8EcZ$&1fjXzOP#[ 6#gnZU# 5{uctfT݆g5.oZLO!ltՔf\ G˦79@:nYp!b: ctZ3*c^kSmct->Vt-981G6VM'>g^xyDXT쇠1VC.3u]%5ÔOP:bAj>2E0Mۨ*NCψy2UUF#@TeZUC2 Uf;D6b #/Îb}U5`,ygaahǝeQqظӛPA1lA"k.MSeK,n f|ȨP4*DZ1׃+zR$:r!zw-?J(q3(`4JSH$%#iXEbsA{%զgWPiZhDd_% =Oe*\ 5Sbr1-1#`_6<<`1& 2`2iեFÍ[M3:}"o1I>9:3. (s9[iCE0IFͷ$݆ݤY]8i `캨~*<ԟ zoJ #VܳqFM.)B^9os1dJ՜CD.-DQܨf4I-E:a|2&8 d'r5ă Z1k ?XNSa!0ĥJz5t}K 44!uWJ(%ܮ l.3)!]{V8T8\i:@UjI!U#)^ZwtTSed(!hEjW//W-1(k1&:Rށ-dX_Ю튷}s=zle=gZ@u3s)[Ӎt/%lٵ}S:A>MY&m&J/Ƿ`1Ƙ}##ʸ# T':zA=q+nXS^mEVd >YeŨDY~_1a(+ ^hŰ@*DJ9Y&qƙtr;@1!4)R[$ǵYcP8eT,Ը|%V#rTT-0]͏0vd͍k`Y|YFa зt5#|F(a*ʸBh췆>ABMQ*EfPTK$E% sI~hD^imcUS@`ڷ&^cU UBFYZ-ht<s֊`ZbFN3͉P|$W8رJ kyyLbڊ,7=[%@B,O*bOࡇ|CŠZHʱQ%}'pN t. Z:wOh#[G0t&ݷ6_>l,'˅Tl«&2 g ̘mL^Y[3=|ӏO9v j-83:kX =No AeUeёdiQft8<93쌎>l ^_6̈zzfĚT0rMhVJۼQP#; #K03:(X~TY@VÚ8t~-(Zr)Wң(C,لCËZ:Ԯg_ ZZ߀z A^ak PZ:ύD`@c$L,PSHѬ( N Ὣ&@%:H(iYupK3p4wl#Ђr7QN-\ܦ [XDŖ"åaZnQ!|FhM@7T IPdP'cE0qM]RRT[ĪcTzs-\qMnHmMO5EO$CXWPZ( ֦cس::Ýbr{e:g$f54=ݶmщ@U<<2rV]L=Hڞv=4K^ I4F!>hh:e)W9JEI 1EP.MB k,<\cv|UGUWg0Y6 QD9#8phMޖrVL f`fA]oV"4pXo.HQϦ-FVM2(]?p@4Ci] 3 G/C\i!ݠˠޓAga M t77>ZKB3ApYr]ƨG&;v4sOZgp6%"˙6fI}"P'`f5;o70'5 _1PA R6zrqHqRYb.|1ir P/e(7TMUڳ(m&f@|MqI:b$o]4x5Y}3I '^DxRp++(I83ˊIkn)%aD|:xА+(@,wK:Hn7u6ŽFn׬(Zje/ $CP|a `Қ+ be(:aWӁJ '1fw#VRk5*2o'Wө St@M浤z)+iLN &F2 f00LV*ΞIٍI 2+dV10W|]9ezpL8!}o@̖N;bG)4P5FM:K]P|JSk08 W"s-{GJ\5_֒?WFfL }$n9pl2 HuU%Beٶ^)Mz> Itfo},i=.q2Kq\OQȡ/F[E)Xix['E눝,W%G/ُN#  I-Ʀ AFy"tMc: CDl?0ZvMeoTg,cu0ҶjZm_d Vdݏř&P8GI+SE嚎sdTpl :1kҽ~ձ4!PSY .m, ݴ_8Pr\Dx_IiOBEMӷ5$0v:v+K/f7{^8wJd3#,eZ9e̶޲0yoh$2STP߶{mOiį1(6y@C:!8I$$1\};H^5mo}žthev(B#/lI>ғ%]] .ϸ8dKvqxИ1I2DEpURƯ",P9Xv EςUtH`g< \"|A6P?zZI fjBR;Z\"$-%9wkDĉ)5.aCKNّ,3$sYŠ@K3y?|-e}c*f\zwY0tB`Hn|<79g!WcJWz P4zތs*M-"ga"<q51c">MN{r,fI'@I!y $XGLgC$$2D?0tƂMI7`="cVoFyrËQHj )4o "$% b%kr3, K;DC 4Ѹ"hl}t@#w2k27D#[%sTRu2J|yϧl )i #Y:~ɆOiaL>f44,I?#hp(i2K,=ԭؽmr0f&y=G2SBlPL*Nxa滱{vLn?;6nteEXQ"@u_0uwI.0!I'nAITr+ėIk I҈af"M[,8`t 9~\% 28#GMZjI:kA7lHEe9D "#~ԵY $ˊd@ #2H.A v{Nxl. XU` &4!-S H-ۍ.KAr&ɽS 䡒Ӊ^|ߛb%?Iw"0w/ ȟƉ+ei[ĴAdHRqU Ja9(g6~5% &d66oG MJ,'=Q5U>?. 2ꚛ0d5/v*y}ҩ_ժɄ2M%ؕJREFV'Yi`(s\-p͌0#'|bQFqPll&Ќ5&h3bLk^T|#>T)xsV3[l L]2K <}lJj^vc:V3KPӲ'!IKĒR"G5NK;̀vYyQcpAYS]2eĦ/}BWӔi ^MscLj鄯#N'~5JXF˓54`"kE@/#GE388J{YsQrvSΠd3`d3h\r]+ƣ;易S;%Mms>KoǜofF )g$(΁]# [is*f$hM\Eqm"!Dy%43*SI_ |G5=%3kBk-᪀$f1'B>!.󵯫 nߠЅE1R(c }+trbp?ҩ0PIqIބHВARb05$5qf:1PbMA1-k88&lrQ0@s1kcW:k4=M\m,M"Y)58S)cGԱwFV`Xqdd85L.&L &)͆aJ(x(9E_#W"Op6GTB1,o|H$m`HВ2)мBqlBHyu^nvxb15y GN3E1DO KcѫՊU!vCQ:rD)j0,4ٸ`o=:& sYTó5;Z/Zzmfe 4;b/*re1{zA{,auzQ(lOq%RܞCEqL'{(A{DZ{Y{&gZ|\E:o,xUh5Q|&V62O9^7 <|U#"6H(իEfh>ӆ)] ,7 #ѧx#b>1}).OTJXrz$Bq}&!/cTXLbL NE)#6tJ6)"Ng"dsh 5OnF A~랊Xt_Fũ8Ӂ~[U݇$odIj` N3o22dFⳕ4: B7xf46qkRj.tf57SblnXss;Ws/|5PJ1R)U*ŸJ W*\RT rJ1R)U*ŸJ W*\RT rJ1R)U*ŸJ W*Ղ\ZT rj1R-UŸJ W*Ղ\ZT rj1R-UŸJ W*Ղ\ZT rb\e:*5L V 6X)``բ Nlph3)lg68W +๢ lph \(` 4RT rJQNS)i*E9M 4RT rJQNS)i*E9M 4RT rjQNS-iE9M 4ՂZT rjQNS-iE9M 4ՂZT rjQNS-iE9tANkVƁe #4#thrbd$$x#c0Ƭg9aGEtc@-212b41rCS2b-xvYL]{09`LqfȘ M SH#Xu}͗%#ce0XT8t St#.W9~KeeC23ɗȃ08CƌN1t c|4ôY3LdD 7ČG'0QVf E\32;Dm%e0i,3L(3LD:4r˷vN94G5(DCI4h4&#FTS" ,4f01s* ӾɕK# 4LhD6 ;NcyrAky3j(Iu#RjAfN ޘTcls<9F(}Ak=Skz̭c9R5La5rpUmzeɃ45ΰ)6rtPceΓ'ˆIf fePmcDsm d9HKm#hmM *%0]uIe Sn$I % I7Ludn0͟xc˼gHK <Ƚ` ]RN #J1Fh,mXЖ*SX)898TeCBϓC5 Y8TC@BNáZiTM] 8TF4e=Dc*5Fut.*;R%9q))$82)lw"F]ofkG_k7~CLbt#ˏHˑ2rd#sٙ92#Wjݕ#7J.9sUIsNBϡ`QUы Z)):CstdV%&0G,e/MǷYP#Qz)ס2O _2၀&G#C=1HиvP)$w4G #;ҦPmẒZ .Ht& h4TͥjIJ2 #1;l#BViGI"O%8YCrj %ȄNePFh} ܔWC7Fv5r5T綈bʭՌ!F kdX:FVթYUld_5Fn$)6FW]d#Gl4aLB3lZ MwO)9"`x4H+ؠ!D:^ !9 6h΁WACt Bsl"Xk_9 6X}D,i׾F"4k_# r㵯9HĂxk$bANc5 1^X}B4]ʁWxk$bANc5 1^X}D,i׾F"4k_# r㵯9HĂxkWܧRTrJaS)}*O(>ܧRTrJaS)}*O(>բܧZTrjaS-}O(>բܧZTrjaS-}O(>բܧZTrja3]^I&cunjM7'<Y "%1G m*G^!'dcaPXOgd` MԱH#k2S-Qm!G1~dY?&DBy?@#k?feڏ?G ?:#+#|H?FtZ##K02c)@b ̑d0QYI0G7C <1yA xw&w* ݪ0J*1X4;FnM1F{Y9ji҃d54mJ<}(oZɊa+G(s5chqb4y؅.9F*fC.F=^èJ 2WR2r@FB#Cͯ` #dd0m4Ʈ&y2(%2e2e$֥P uqrP$ߤdW /3DA85DjKYM2fpGOa3LhDS/g ^|zUz3]%'KŞGHD:A C V2x*[._YGLyT:N|ja9vyr4o9=\k[>La.M2Syz вB&-JV-ˑ7~77ǀNmR>~\x6VB?~t`]*{ّp+*}sgʥ<{gKm@DOǏx=VI|ӀAket&`/+ hYq6BX F(?6Ή3@( !5~3bÝЌ%{KB|B^/^̩)-/Ƿ#Yi vi; ȒM:18N'2&'tNG5 =\&J3y o}k_rPfA?M;kմ|:|ocmy`;h~,&̽Sl{ӧHzh^bhRNv%vy`q}D p[Lj5 Jӹn< F @ #!Bm+h(2G.hk)| s3aT;G:~vZ/<]zZ: Jp,| `)-_Y L7>m>ьEҝJUiڨĠʼV"1ԽY7l?`h^D"جZێ9!W4U+3OYi~)`h ;0f W&7,}Q.^]  h X#fŖCD wM:"_A| #Nx2'NDHd x"5utF }E ?嗗tw: Cfm`mF'oKIDkc W.AL41 ]X 1~b`t@ab?w0rUv9(o0*LNmlGJ/S# J}8ADy>Utxz 巘9b~[[DI-Q7wESɾ7Qށ]Drqaq=kv/]Z+ZLOs4\X@ya&  (/EĴgeU‡ĮU93Og]4F)x/dL6G~M7ވ2 kKdw2,X}ꥩ)}8p|$'A(QӃwsV{DF#3u\|+0%s4&tI]uI#ɁwMm/ {=zYb6>r,0f-i/^T ^|$OBJ|.PGydA㆔tBAJm!)x{Ne}x)7nӰ+#g=HXd[Lo$؉Ab;DcEJ?p03#d5`GD۰T=d]G%Xt: Rg `pvwM,qli^x: P(?4z66Q=FĈ+6Ș-ШΈyBygfW'! -V,j' ye-0ђ``\r__kv0lpz(=,T`Nc rsI=dk.ȥsYK{BMBܘNv9WqH}ޗ2ZGзU!2-/N(d xYt$箍VXŠ|g`625wH~4IN}7~mb"V3cfOB]jMz !oi4b:TMH&Qj2 Sj1E΀@޳sLr܄EN{T;ΣD#T68Bwj53R]t +Y.e\ov /eJ')L]Evm~:~ 3 J^^_."KaVacqwO-Blp6vh5JO_ ,9 -cT.}|TT{{9:irQzԳc0I6 OJM 2\qL.-%,mGg7LuDr| WGO:;~+9O a:Kg:a =gÞ8/CXs|rVau!/Ń@Q|g+VV:q{` } ztueqt$15!(rgY 7Xg}@S+y-ryȠ9 ހ$[+]M Q.hG.BId"ӥ(ja[C O;= !GKYa@b_<]C /?/iY-ZW +CiU[|bfLb/|;V=ڹ@V_Q,} h$ĪHz {bВ=lhX U !۽LhZ3Ѭgv ,;vov۝aV3;#v.= ؊H5H=Wz5+yleÂ[tpH$l<d i3F -%. %rDi|:Lc.,a^e0yErmI4 tqFjea>jW+9G~CPݾ[xrn)"(&}zek桵Z]o֫[ ݥΝ˫ՙSG+;sAcpu~dmJxǻr݃|;v#M\S_h-XTvz}wr.3*3Vocmt~s޹5sй5e{7ũַ6^7֯VWk~?;٪oo,^w* Zڞzk qZuaVV wf˵ˌ惭ũ 奙ꭺwp{A㻶Q_ܪ-׮ 𒫋Ts3.. GwJen~Z}ºW{Jڹ}X|x7g/ݬWwn.]_v}6G*{e9/oWG+/^];f[Nͽ\: ͕LU^XPnl,oM_ڜ]ڸZVo]jݺRo_mo5jjׯ^Y>Kͅ {&/\q7ϟѼ~fg ӽ`v^^_]nNogeqfm-G#dw .%ppaj\E˸V -aj]=SRMڵ}}_;jT{{[1غ }zic[ٍz?1!.5._tOnV/[+GSW-7ת3{[ arkatZ}ʕu;ܾݿzv}asfZv7XonOXnߜoGSpm.\8=<׽eoܹo5׻ʵF}xmu=ظqsW;sK{[3wKUݘn_w:wV;7}nqsꅃ+Ks s{~>~vX=ܪԂ0u0,/:3֠[=wt~zp}XkM6o߹./Z;w4u͹:pGUk^[?VL :=Y M5s7;;;s+ōڕKGk/Y?4jYΪ5X[ |ll,Us^-[W++Sڭkw+_۩pn\NT?\./W.lpkhu5n6{bm1wFpbw^Ú:w~iݾtþm]XlʹVYւVһ{ym/Oo+RaiwWU_uV򹹪?z^p}eWoا7'sdxᅭŃ׷ ӷwAwm/^;;w7ӷ;su׺ҽ >snh~zNȕEɧ v4`- 틠T.GoPtZ'|=A&;*۰i7NoJ=FuW6Jn8Xhпr#(!:KO.dJo-M}#׽x{/mx SHs`{xRy`⋌c:l@Nx4Q>Iʆ-//-{t{tFNtyOBXgcWV`/)w<*}s/vË1Ny\ð*s6)3nXWG-ڋe_ysC'yO>I/xo:t>(n֓'7{O6\nxa 4t`3ueW0@?-\7xQ^c Ԥ3bGŮҿ;gg2v0 CW g8=bwmدo}g&iks-Ux++ʁ9Ƃ}| I9:]q{ԡ!${[|d0rV$2eDO\C¶݋amZ>Dp] pZS$Unl=y:J+<g3qqfׁ),v욍z59胎+~0I58 D|ǯ'N;sEl(^f{{~%oF7K>~HG'NDUvx⋛?<^]~>('&?Q|.ʓOnA~H?I|L,zh{ ǎ=mb^|҉ļ!S#2=iz=Oak$$5LJtypxEW8}0 .&Fl9.3l`&41!s|rEӝH~f;0bZH@s%wbaK/18K.zG8p !'_P$}=cӛ.Z-z{t*?h.$&30bQi0oES2Ba?n6B'xqa0 ]Q08MDC?v̡ (f8#"r9iAHO=S\gnd$6ڎΉۢh'G '?p ^XE_`Mt͊.$)ѽN+z,&[k[)(nx \Sza*P*xqq bLV@57'Z?v/hR/c}7#0hZ}M@ =t9#Ed_ݗ.%H4q\HMD,ҿ @ %BLT8 Asy@-rEݱ[75P.hy(D:4QZX(ZDuEw0^ YUhuc)P1->,G3t #W&[ra5pED=N;;zJuwN.$( 7F)O$lw9X[@n]Vtx6 %K Q''ein>:D #KKjL5YPOH}t7 { pYˇ t,E!̕@[ݢ x ԋ/oJS @mbQcKȱH|ƩdrS> O<+An$|ҹsY2i<;)&em *'|7ȣ-HW_nKo/sT_3)f( T 4֮îڴ1 ))rg z:?\œ;XWX\[7gw )`]Pa\˰7(M!ߴJn8pfjO>y2!?6w&[؀<6%.ݙ\0rѲ&,x]͍F6f&wCؔGwlIdr 9;RKDu Ht9|9 Iz YR Jq_#7̓ܖC/w$7x#zF'cx/e^N9}x@OͮtP\;8nd rvjh#Ց‰EH&tlmI"uQr;!gaʙ(ND@38B[o˕\ ӰDB╂/h ;ny/`/X]0-'T0ANm߱zV'j_`PۛMS8^1"UOM`" eUᇙ"'X%;F={0c`G6Jv5 Tb X[E&뒆C-Wx@wڰg}``5Eupp0"N@'xd Se:6F)r3̞!emHMPH'cfyl~9Q> Dt yCc-lga0nrZg.(Y jʀ7?l4'&H"Π3 p@ ,*,V-o'J Q#t̍?OXΖDۿ# NF}C䑽 Hh`.ze0+ Ss:Q|M_cMVR}c!OLewg^:N)}F5o  ADr1"^<3IN[v(3|ևIxmۧȵKmߟ,OGIj#j~wZ?Y]Kqi<Ozz^J׋/_Ъ 1jP*b瞯𺭤Q3c~3^icF[ȁsBMn(>:hLq ; d1[͹y>|=^=Op-0:+-mݨ5X aKUfW`d#I1KzqybZ\S+ZBL(rـŰow)PLjl8!@wؤ[` x/_e?:JO>pD&n5`> H)~fS H} gOďA}Ǣphʚ- ^"at SsI taϊz47ߊA)-[!X82ľRCt8.z +O)t',s%|[xɾcU_r Cd]*yxmdJ/b [RY| řzA.nHSPyH\SzSJ ܷῸb/.Հc3d CՀ0Gt^<ͭQ0)G%F* {5`~ןT}2 ^x.NEiJQ]=l+ٙșƉfբuftڷ*caFDbJj.I~T|Sgšcj 0uXH/-Dʉ\wD>/GM67*-z)|:CmrNh7j&t7lY9e? //[b7Twhc3#O* ,v)gqH!-MUbDUGmדz+&0C+WTr0u0-`9,Ijc pd54Q<8'tlR8-~GcXS:bS"=ĭwؒ54[0U=sEU_A`O[@vARQ/~KH2zC2y6Qg ,qjsAu(p%y}*'d"ǁolJffz-ΪHATL%m<$39dFz[./XP7o*&bQ>Vfր2BF!̲Sb%r1"z*D(N <;mQ:sd7Ad{=Q$;;ԕC 8CYΎkxmXS)!9k'V[C18WE=T;|Pm?H'2x/g]<ɱiim-ٸrڵOKni; {S# oldVNB r.IE/ʛXay3=LY;N俴0'*ZYV`GQ6X'"_Yltb/}43l՚M4,l$\(1/*.hy&܄'- %~05"Taڏ>\oָL&;!X~Fk@H5SˑϮe“.X1zbE GHS w6 OgӳAG-k؏?/0&z7b ;6J4W^! m'`DJc$_$=A)\hMŊ.hK/dkQAw# eɴLH,W}Dc9*RMkt1/'29 \S(ED[eDz JBWUC;0 m+ * aps:w}:k+ѵZϰwTqR~~*ּYH8~-*;|SVR&OccH71\dQ<Ɠt Ppm~$eahJN:`WP@%ɦC}1!}i: Nfcx ʨUItc{+nŒ$/HI9 &7p8QEF!Ceժ>!;e~6O,iUhgJa5"z%I$#>7m*"b,ݲ7_@2YڡgKCtK#wVN3CW ,s|E([7B5:L+#*-ݦ#Gתau7p<(bj=dJU,vK0a$SV/TۺT?ox0X*iUXy>^ZaBn"zzY7?їu ~gtߖs+G#/67MQ-Yt1#n4-N!wۿLIr-=a1%A0#?^3{\"Hf .u@7g5fʼnXNH{۾$%BQ1yf'RWYx2g QR3wg쏥K<)coҀe $kW!74ּDD*:"p쮖*(Z1ybg4MAj)!:r\۲StpHJE!=4 XA2+D#n.>FzLEZk 3^;v=O2(ӥ-qa+62,3C\Ƣ" xrLP^d2XhEe"s^m LEpr;zg+V{O_50@GMh=XfcklGnDNj~uq:^Ev8,mM&ZBJ)EsVf߆HegawS֡c^*ߗhSĸZ,R %Iǡ 8Og"RioYR@L8HO}1sf``r"D.-lbΜ`{~'-3jP~-7A@_. C \1w-(Ss\Ӓf r ?.q[;r$+>~J*kx nioJn eJ`J--|X0? .);bTo!Jnwh?#"qY^W>iVƎW /K1]# [E m2 LMqdqe6,Yu^^tn/*V2p$m)hXRW 4گxnVǾ^޴.p`Zvf~[Hx]# lQ4gNaW'qU\ B,X2L>S 5GE4Ub0PF6 T EЀWٰJ`M:CSʎ7G˾bd :mM(  /~hk5 iSg eCbٲNh,]c|G+jR UU0vi:ZXZcpX=A1w}"5Z])K_@JY`+(ĐT ;`J?H*po]ذa+ O4Z8}.#+Bj,VahU5)Q8vkD6Ǐ0F"~Us*pNC9gmf ~Bk:^G)UQQ8Ӊ}lc'0N{8~*0rhpD.y}*.G,HkVڙ\^/PQ+iU*,/ G҇D%+,T'Ii7WiO{Il2پFS!(>ֿlSdIAiSQdNԫXBmܔ+0K VRFаEG"ّhdMbΟxccli$}|"ֆ;x0UI !H35OVeJ4eڍRe â_!kU%7- -=Tll9 -/dg#\R(dћ/e6  +s8>Ch9 #6Qqy2P M)зS`mRgf 3))WJ#F)7FuؖFSV0u'V77$t} CyzKomQ0yF 90d-*ƌ bmEY08iR T?&w|;3vV$gtȆqD4Zύ +{GyU֦H*Ц@ Zbf#p,))~EZJE I{Ċc gΜrn$*$O{u>;ݼO .pĿm07_eEX!gj3u퉝(EXDScǮ~++|2rG$PU.JCX,Rb"|y|O.NM jTR+D9s }32EpR{RKY;ZyOŐ%'b5eڮrbKVn]LH/Ð&-. 2,Viot s?QS8n\2x{ }#Q28IJ1ϗU Y5Ȗzs !*LP`JZqU ;/Ё±$\0j ňiML1uWZA]fG"[I<8,rƫwq^qb {(+_To˯5嘎,Ր|Vk;\dzB k+pY OŞJdA 3cj;iPyRӆַ5AZI" .cd%nP F+URy}e8.x\˟2 Y^Q̳y{Z|+^0Q^P;?mP2=Qe\ ;bjzb\9 .o86V_T,y2vPt } |Cv(o0㔤oh{XD Söc5!w 釺 =؃v!  q?yڴn&[w[Lr̳æzP‰i~L&7^ ǔL95T$Q Ocv* ˪'EV7(hyE1AU՝2uG,}C8xbG5b}+?S/IهV覺~fPz/-xk1^P\&i)+ ډF1F 7:~~qwH (!Gҫy12Vw0[_t;atIO'̷O8+Qу)S|/hJ@/~.$o>T )=b}8pgN;iw0ؽ?tv>.pnd YꐭZ׺İkr̿b]U/)6W e7YR<]Sn~Hb!e3638pw<[ۍ o"{l7KoL|qqĈݴ%1cR{Zŋw R|yN܂RPe$Mw- }agL-HD+VA5~)_c{Hsw25M6US`ϿZDf{0^ k ı2 }r4Hܞ))o2((/=+>Hx{+Ȟߊa'ǖ譂O!E)زGoJPl3]20r im2[Oz쯞pL TODD UE91T (;53]Ĭ9ΛR 0|Rh_a'ʤDvdKE6z!KUeDyƦ'ʀc@k4W; Vi ~ SWTp %7U% J\t§4x~*C#زx%b$|o,3Y@JF%a ,km~ha\8I$IÝ׼SY^2FFWOOev. ZI/I~u~KbMBR :+K-5/f;z#R)? Ȃ(~._ ,'x7yH&TBYX_ [j:_Cr~(t,VU: }u`]W$6MRq3}N  1g[_PI##J [Z<ߘlV ѽkJoR #c(@z8&4-ivW$@G:V}Y_!+kWaF>LO4]گ$1| >U_ 6m%1#'jH}S7.KIjTY^F7F(/<V`"`!A*)u]%#wŐPi,t^>{+x ?5Sp}?ר<]D 8}'1w՝Yc4_˩èX.LpUkZy›d  ROĉTP]Z tDIBq#e(u ?C?H@/hS',*"WS 8`HeEaL񾩌'ɾ5%;)QM˷iU5龷iPa \\V)~oO[ 3!'zt'ըI~Ɓ^`{UpB@ C$KbGC7o@*_WS(=[=Ki>[e U-j94OUH#˅(bYBI𢝹*bRUhԢ8#ޓ;zUUJqNޥLUZ\Etq=%IR)tg@M$PpUAZ28~81<0P1e"JPFx_,#!gϺ WkDRTge ]{ŢiA;)A?6:QӲEӦFbJi;Jj4D)(wu$rP)$$0xf] ,ƥi/a oaSo^WcIrTE-C+I cb<85;9p3S@=]]U"I}=ggy1y ƙĆBѲ;1`ˉORO2XdjRXİ`tJ!God .?Au8P1MiyB$ȺQyu X$ (^gZڏ)MeP"كvtZDo1JE.)E(hĦL8A%1XypFD!7iu2]ar4lb'HRThqk"v F[1vD1[CSV'Zk鉄&T,:y*.\'L<dpQw&O!k J5Kj忕 GJc>1cI7d/g3ԓKڲk:bt(IWHb((T"hBFnd ~&AG4fD$Yxl@R˙6}сbf_ *5MY.uT,]ڒC!:-(uTXOh0Y+"?tF,#ykYuf]uB؝Z#9UqeQFvfe$wY.^\`s9!zс@r^9IڻAR~9sQ,R>D R>`%E vDjkq:Yf#KĤSͬIH* i*%_~͕Ȧ$ YD&v=}Dcא^?XiMQd@(!szn2'V.3NUD)'"!?O>f9"0FAWY9+J@lO7p+h!Ig %>!1Ҋ)4ڒX҅G?2X hݣ&LO4u٨ſ dDX8fI]d:>^SR|Q*ogXڵX=dQ $(ZCBCXG6K3Q{q<@ƟU bvDqZSƸkJ/gIk_`&9ܶx Gb)ԅ!zET1u:wZX- Vi~$2rNh=&GZmf2^FQ!4+LZ8 ) ^F((+%=ɫ%~o۱Au-5b4[hh1p./ᦪ_ņ O#028s;e%> VVT^z j1Q`'^NI{eyiИq?T]e/0u3[4v鸼6x$iUg6bf˱eϬ#%(^RAk aN;s]5# +6R.sNiऊ 6p>x#K 9[-o4e c$5`x֌\{jl@}m`9Tj|ĤP;g% ț2e6[>鐏DZLb*  r} t86I4܄x2&2Gٷ<$4`l(aI%Zc` zb**{ߌW^YYh Z&h1bp8((XO4'" qÇ;_nh c>LOȷ?CtU-7,b%g{%^Ox?9 lN1,(R2:΄D_ʻ7o͒9j-Xd3R]'0eHz`NÆU^XBYTe)q$*iC]nXƨVgRȵ:qnosX8pq: eL ʠ`h 1*SR?ԦGPGZc1p.C i_IHx, dWn$yyXbƏ2E@bx G Ȭ7vcW"}Xlxٚ˚LsuA"NzruyT);"O-]>k bë:=҂ 5 /n$~K ?r .Š܊ɓ_ `j9kdCR#/ɏ1T@~)d{~(Kc{*K KKf8 B-HcfxIBr;X,-F@oZc>Mq7NaRjE9uĈD#dBL%0Me$2:tFi$;n#G_ }x*Sq| 8DĉW]'^zUt4VY7*g 6?uilZ5lVntBX~_:%\4=,Նzk\ Y>`fd>6g}M9({eυ4ɫ2/o @#I%" W&.;NH`OgHѥJ?#`(+b؄7E7(6]QRX+#?rfR@HCl&V'+Z v{1V2N}`dC# lX@B> ?T;b#X?PAF 9zKzY-&V/ kKbT|~F%N[?|\T !y[J `MYjļ\c(2OۏӲ #o"$ĭPWܶbXFߠAX[ U*(.+0QFd$<YJ-q hB{I-^Ag3G5 t'!x_Qd[a+2Fd#+VJ`Kcm}0EP|Xj'lPaXc'[]Dz≭`o= s3d.l( ϡE4!H{>Ϯ!:)rc7FA  (uH~P*ݘo*"Y  >ڦ+Kc4 6TyKwe,Oxn, ub4"ޣH!"FyYHҽu#$}͖٧N#4CnSq+ a/914Q,Ϻa M^5DUo }cz!_qMd\0jG g5@Q;-0ѪX$WAj0:tWbLibD_U>\?Jty00\1Bcǁˎ$TZv0!O^UoAGS:11ÆK }T/Fw7})_H=!Xvn,؉2j3tNVEь4Ӵ=Լ5=Z`6&6/T<:_(JiLQMu1yVw*[mxsqudsԼ a$~$LoJt)e8'Ѫdt751cwZ~&u؝ C.WGu>o[ڒ +fR7w[igЦ+dT8AKQ7fWb[Tĸ<ZDi6Mw0ri%K)9W&qh!g\_#]>2;r1a lKaoƁ{u"+s?4۸vÇ~Ds))ʘ1ɩ=w*<,IV`VLn0Q`tGN9/{%d%G&Iܨ4x*Eh'*:eW-±iN`a|X̜VA^EAM>FGq;HT\Laܾ*5RXw9QǶԓ uQPoܯPB3`.Ҷv!"lV3g? YTN3%ˊ+q ߥ`x}1RY:v9T-ڿ$bTiD(K F-\,_tHdVjЪ*1.Iuħv=_ X-v0ŤI98,l8xw=QshyAguƦYyʯJE2_<\H*gLMپ} \R1Ei5cco*l%^򫦌0e+V:0|,sQ:iV&Cƨ)S;)8X~Ǜ2/eټ_Wc*Q1gPd1d2YS 1?xA2^/T9sWE>:Fz%cL"59_kgD@̢BypH yb@! -k?>9S2urGS;ED+7vlz}jZ@(8/??:D:nuv\ÇxHC;k͎V1a7BG~4vA;Z6Y9ϸ7`Ӗw4rR8(:ZU}F!jw0-8_: ά-w yMqC u<="7[Eʪ4l8V(Z]Hi8mbo>{%VeRJgx +qP:n]ݳ Lt,GPW߷7wQ׵pp;px }JW/rQ0{tl`_gbym!t3q_<ak?Pw]㙍nncQ>bM7!yCd1j&bЂ0ߵbw+vYg b`^`X8C=z3{4eN*rw(ÚfX0Z!> B`2n-h nq{-MEq=%}yd"͸8Ox tRxqK"aY6 e\AQFW"͚3ҎϾٷYo:9"&zĮ :w3ª:^uW`Cs qy&~Т ɱ<u. ёe%։01sVT@Q믅[3L3Kخg7\L\X.)"RxD{Y=m\ h\E( `.exåw[K MÂ*Bw r(Cu1i4pChd( |-0]TZ"E3$YXXB.`?jS #eH7`7О+B*! @mA"MKSB ~H< u{|be(, bTKT F(D&Rđ"sv'Eܐ '(oʢ$K|xiQ %Bmxl pOҎdvO QFF}()Ű_#BAA5X$(Jzc6;y`.F/bY߁X-?) cpEm/( ev%|1k$X 7Y@ 8)NXgO@{jh2v( *#zeHBLCZP}(4F{3무syy)1w|eDdT;=bV㛤W O=]7Þ,mvam{W00ͷTFSgbJՉZPED {Xjbz6&۰\@PkPcCG(=8>CUf98zu:wĦA?Ψ-7Q#+lnwHډ:jF>BNHOy z0v0pϖOQH=>szV(S>O(~X*c%%ڨlx7!\. S@m+' e a*䖓\~zlMޱ9</Y=G b°*k  R4ǞڞF|ui5y{[r8y)Vc"wVyQi"rZEz9=&DPLs2EՀD[x(@jM)&?e,\AKԊ3̲,û(v`__!ՏN.K+CGZnNF^e-+UJ`nioUk 1PwJ׬јaO͙#%6p$'Af">h kŔ IdC1i_B1:ʌ!] ȣ[0:\׵OҁM@CY;0WERzھF4(MmIB/:RFv ̲[>#(2#-1@w9i25lC/I>7qE5M5t|Rbn&{>!#Ӵ"e3P'Ƈ3"o^ՊSD"si|S^##&(iacPe9yUw!/Uu4#MHtyN+cN+c)JEXV)kCΤQ_o?'&9|B>ύd7>zFX9eC{iM/uY oϜ/lzBŖ5|hO9FdhfjH|􅛂k(&}$+u6~&I~k2>1@h @$yX 1z"u캳Iz@~搖 IGSaXhm= DV׀glgF(m gQLe N%tRԙ| J"H2\I#7CGBɗt,ڐWImW1JuL , chMfQԥ*#nM|G"(ʚ8%n΃e)u mZHjd)QpmL4`ya0}kC 䡶*t3(q O7'U T +ĂW[" xqE :څmm`c{h-[M 7~\1sB!D4]iCF;Uڜ&MڛzbKmW %@YӫՄ;G8;u^J#au|{dDz` QZ/~D#>1b,kTI\ T;:B&(% Nkțap.'(SՁ8eM>,(5!Zx# ȵ g ]-뙴fYf4#EhrcfF*s-MZ\}!jĸVer& btZ B AbVY:?a\\;BSHو UI A,6P- Ѣ+*ݠ_,&cM=`!!V#ije\`'+1q{C)d5 _YntD$QŨ)C/ ӗ͏`0#MEp`y3_žNSKGEӞco&/_Q˸q"Qq1v.. êT5r2װZ46-t;\6 Ech"\xKl6& jSj4ʉR, P,L#/ݣ, U_ZW?$ߩ [f_`Oj苶Yf@W̬/A/<@gMȇr!J* Mr%)ƲD8I;<͟ X]NM\ +Qq[`(1$+C?1`Pg>N@sj~*2iH ceÓEdbv:Ȯ1Q4 m@^嫟Cڜ9!I&Á&2G5-<dчl2·{Gcw k??8Qn&B_y;XLX4̿?ιL+)LcI"zQe&l ޟ̣6tD|U(~etx.𮳌b/1 O- c z<_^l`ǗʲJKRo} + 1uSewO~J>"^MܾEH&C6s VթOSl6<:˽Ю9P喱|ocfkW5{Bƶ:lO~Q֟,]M}ƊǐByXp [wxg18t'`O *A _D/ j3<¹2n{}yO< wQ0wN% g&!QYpJJȲn̊)E+,~1빷ڎ^O#&wJ / n+v2|zi/ $SyJv`^GT,?-'9K6bڳAs82u-B S@#طUaJ2oC (x9p{i HMŒjoË Qb*hp ?GKߩ[˖ %qAۙކ/qm13s9vct\XV4؞9kF:4#=eXs;CtBg2U59N+ ?~21ނp# WN tȡp)Ch iSs6tz olM"[k6A{=u'vqu#>t4*+~+[Qqvi7QutrNUp ۶ϸ% (Xc븳a16>Z9PeBw ҋ;9$eaQM3)6ߠH x<>X{b8|LQx_Wݠks"fgywij#fyX!Ttd" w@ȑUuok͆aTL\sr(3E21Q_Dd~ϗdJavu4D> C<rQP;(us&,vnX0aDCeشtܝ:bi!NJ(髥TU6`):YBʎZEug`K|*3 WT3Owtj3;GĭlF=.b:R|rDtbD.X`*`_I ПZyy&?ӽvSFyS m\~yoYZ!/rqAr-4k-Л5Gb`[ ,-f7Y-9n2 vĨI/"sSbޚNsk j#iW*3Z019AeSKIM`t릇0Ir'6F2/y(~wdL^#'u^Kwc7$ǰ6R otw\ ȭl9=$w}Nv[_:$}w<9_h ;8X+kW& c H&v3Rkp~ǣFLc}JlD)nV麖SFm\]GG &Ov<$m%l`XǐAqz~o?C˿.Hd OI}B୨n@X)FMbw^}D) J<`OU^me[YIKS GOvS}C!)"*F{Ua EYkvfnWEʞA}amD}ɛg,wkq2*qn[bb]gHY{xݠ 7S@0{Z]dp J2E = 4[{t5wm?[S{g" ԟr;̉r-S,>O3`BtHjdIOIߡo)jɛWzpT QW/IY vuN@dQS)"a%ߢMN"}0=)K-h(x |Kv~Y`>11+ hgFMAj Wu^"5,+*5̇dd4Z?Vdbmś>5v]=?fJܓt~5b1d8J:_Gÿk-t~區w-/iǁJ13'~qau~)$޺^b()8n.K#W^D뙃^Rw4ڣݙ7X A3SbB3E͈UV֠İ# 0}FO{R?D3{bxb:hW|Kڊ[RF 7Y]Vy wBs9D[:SOV/twʀkqb=2ї8lg_shsH@O~S*?um!b{$}i(;J-. tTmnWhu+;?\5U%}.iź k\g??LX.̕.TW,aS-n~4ut u?bD<P0u+)vW'I,Թg$<߳,/јdC hJΤ/ʼn 5mRO<݂k}2=7%xk Y@'\vb^#qu Khl[0à+ہ.f jWS7};ߟy7-=/>QyyOL-Gk'[鮺]ysAPsaqM7Ԝw^mpTgO[.TWzڹ@j? ѹn? /竇\h' LV+YPԯm~/FW_jd`1燧C]uh[D\ɱ29{?ݹ&Æ_0(༝aXӱ=U'4qsKD>=w`}+&< -\ԂE#@bʦCm1`QBCgeK4>o);¥OE_~W 4Ő\s 3APmYPejKEdm#ln >h'H]c j}GХ=DM<]]$6Cǯ@#_>h~K &EJ=rޚai[^ґψy8oǐ~; =;>jɗwG?!|$50dGN GeGpDwp7D06h7'zfQuiJQ,ɘsPQ*y'^bgrHU$ ٢ O{ ȫ*TŝRwU}},'|`տ9)[ߕh`g_`В_5AQ9UwPnINJQ%wxd}D뀮^z<E`rrK;׾;K 2s :"&z5ɈD$~\OI9`7GT^1!ĈuoQ>yE0,W$3=i'϶`FHvw}l0וy']k>!KH .⏇* ɀ( EnL-$Hj|)Yֻ{X=_4t+H'4h]U:# ]j2bRp)E d+%СO{_W/ۄ 1 W`&dJ_CusP8;(fnhE_Gtf Jsin➘B-AԚڷ ?7h8v=Mcr6nɷ%%1D Q r&yސQuyh%y]1[DjDOKZL8!W<'Nሪ/}&շk8N0\6 Ny_?~ڎ}=qPtvm1ˬJ_%gxCѧ_}7.xe]p^v{!RFxYFEÑ5ԩlؚs*=acV8sJc:qtW}0  b8*#3?}y\, ,Ǚ<i zi9J*? ?}yX[|U7CU5{N1_hLx|,2>m L8AuC)Ab"p\a~Ff.Ka ]-Τ~)kgy^1JK)j)OIA^$ڠz$Y`N_<];T͟<1lAu:4ƀ]32N䫃ˣr+nà ȇqq88d(:F/w͵¿<$OHui<{0mRq ^mV J]κwsdp[]\[U5 QR5fElkĿ_qVHiAYmb9S:}V^e蔀:g/Fsu@>q6_wOMen=*xz ?w a>2\y4y& Oza)EUqmc\|/)ƭ([/} M=YҦ0*'oh R/1Y;m5BPyY Q1hE8iI7~_+~8J*(|6ĺڛR'Zvf5闥45>Sv0[uj,N&J 1oe뛤6:2?iZpZq?{vL7! J<2 #N8=66;\3kAS3hQ!W:ڥ y%(E)qxK{:!dO&R !~b04.JEԬ;7HOQYA-C"\4TƊr3TU9Ir56y}&e Ev7l-r<Җv4_eлllU'G{Att}LYaF/M}6"$7'qdDv[\>cΩ׶!TgcYNQT%t:~'߼L;+ J"#ր#mg3rr\Gb"dI>PP )=ho]ᢓ]"(Y9מw,YoNk)B(bPj<䮸LK85ƅUK-s4s)5'|ho&|xe!c4)rnx:(c.M M>Ձs**͖4o6J )~Jk{v|nL pd"#[d}:>؋st/_1'509 ]9{3d媯%s5BEBC ++[!3~o7л}:a%-"[(4&~?hEykۛ3";^cX>tJЊՆ޷\,nNP>M&/qھ$eSӽݟ2R9Jb-+b"[3{yY\{9Ǻ 0Lƪz׫@A;{@,Y"X[]oɄ9hځvD[AG6k$bm^*-_ƋwQ;b 2OfL׬U2 4[u?}yػvޥGf 6a#-bU{5S_mx}ƍʪS1saS&Ɉ1y70Z̏2蒀Wj/#^FrZ 3A+cL(; }k%7Vs4מPT\ϲ%I-YW6 aڥ!V#"fj:J@Tfv,Czfn>s%-oܿyIeh)s7=2kX8pC ,a+ZgvRW A(\چe{{1N[K;)m*ȓO^]VQ{t ;v؅2n?#'?qOߺ(*J] d0-Ո/ƿ+U;v#"9:&! |܅p"h뎅4; lCRP"״8ht&&o2\,oDKbN"G!2J\ɱ 2x7|><1XII4U5L@b38_+uxr HBIJl80)01*Iq҃tϷ:"[' /WUvz-5K Y}ty0Hʛ]W}H5'(f>.d8lZEi&ʭ.(3OX̲A 7%mej 81u"j9}n͖-dxT\./S3oEeç@2L}yhm8L;m~.c)ޔȻ>x==jpNr/OuхG)1brVmŤMݟXR@-P[I.)O#K"]}{c<[Gxx45ɸ'dwobeڔ-qlb 4)UΦ.U7W@Ezq1A[>l#Rͅ/(ʃFW17O&`I'H-`6 H?,[j9< v;+ a$>ӒN-iJ Ʈ:\wᎅҼ [-cѿE?3z06*>eJˠÛMLo=2h'n:^dm,bJ%KQt[SC+?+?<Ճ+m o2d6 &qIϹ;ɟޔMS_QpJXM|i]y`@V{l`cZ*O=sH_;p[Nb-Q8!ltDZbnOXCE8<:fƵX]1Y*H STBAׁX5!(rv\'F[<2Q!pabƷwZe' NF{g?^ZӋ'$Oe slNl^H<X\}Qa!dwrvsd/;?[Ӏ l$NWd*^t]]'wz:~k*;)PeQ;zAw)*u'%_vCBcqߠy>4戧!$\BpVkxxA9ͯ+d'"rmh$V2ؠ:$^_[%nФQVr(ѓLUG̑PaOd5lhgIaξ";TQ 9jU{Ak .K4^w\'w0I_Wct < vn#iv qN`(>S 7L]upuZ#E aO  ,>HϻG%l!|Ǡ-s̍,Iα>g|,Gtx8SGE _q簃H-TR롂:8 Xt(fWV09 Onaƒ{tLG=h P"h%~8a_-?{ /,UO2m]FEde1}(`/Fts/wAP{iAP*=C5D:9&o>ï}ǁ~>æk[Ow1px  ѭ }^W!ˈ8 ˎ$1+dzR=[I0N^@^6c7 o=:y nMuǘL8Ad>tP@ RolUիp~E-'4 ʳ GNxݲ0ҿo|@_Π PbѲh*e,>]CPu^Y˱sb9q_P;L%8nΩ'u8?)x^)0 t' "A =Tw0m' *=S9fQxڝ3hRJS'uvI.NB>v2ȫ9*  K."|#_'ZWmux.B/QGYo{DgTkjQT|O=42y::xcCe53j)x0= #:P<U7 ke^gz=yIbqE\ٻ ^{輪L^y 6b0 y2WQ<I\e#ICU%+X!֏,#F0%T[Iӫ=]Ifҳ*==363+kӽfgeu0tJ8g}ُosR\,-E!@԰ hRh(SuZ9ycGjKoߤ9䴈&7}=Isib=-:PSuvWl.Ti6|:9 4TJ2(-oK{- ( { a( ow%…L~9A ' ߡ$=CI !Bs%WzXD y誐(AF {2#6hGK1Nf>F6 a`mrz)Ȣ>yv#]ք?9(_l@v&{O|5,ŷAt(į[jzC KZodz1H0þHdL/[đQA|W$9+aAڸ%cqW:NUJ›Qrv<0( -}8EZ3 =c򼅋WT %m .[us,:NuŅko"a3گ誇͘6'׭V\#8OThtX$C7*y佊"& r$ŃRUc)? GgY ׌ؔjq# HPCU`8[hgy'Mj߭1fdBM A}ӂ\604.YRO7CڥkCUxrkHEHjc!6f1O`2,pld:-o]Sʿ|aԕRWgڛFGYaZvʷQ냳/ Dp:#ב5,w߬3El4WPq3r!f_.|sh5Kp^G\dB޸. .0D /"z֗yzM 1qC#Qg ;+5+BjѥBO`{=HzI)^gX}-hUjтGG(ADY4D7|Ā< &I ʪ(gBu_:-}z{hS:ql5=fjA(syQi:̀&mc q 3{QGI_{I {h+V3X5Dmeq&%\ZeqIwʿnYќ I 7’,7 C)v'l X9%Ъ R6v9dCFx"`G(̌ ^@L{)z.g>ѮM~F)ժ-9u\<5'z1fy^R'H 붇7\C*MA_R)۽D&zojnUR.=dVgDt2BQ a9FK1TIVWaINc\%.,_#5[`gGpk:^`QxI"<-̂ ׇ0ްd*Izw8Y@^aw=%'֎\Ug_P[? cj"A?oBPgRCEۭ!6^cujW^cB;;7dpjՂ/ɾՂ(:7L ˥?d(~lP b R~}zJ,}=ν`i̭Wﮋ>{G B-D`x& ;4#Wb ѧ/פM8]|3^'cע~ۇ}%ZdV|Ռ&$߶S?Lv D;J.?]0BeyBHӰ2/4c*첋sD05di?hm:uptFplbxhK^>یYy̙MG)^_12|Z&B+o_HjJxƃ۬DvN`dOCbyXSr#;CD 2O6yyt<ȵЏ`io̙Q#;mV7>}kض@6K_O$~ -qJ%]_D"v཰;v0וdUpjJlZtr ﰵ Q.GHo2 =4 FSo.}|=qo H(J jJ^(.S7i]pm~L4s9+Op|/x„Cf]a.;Omm!uKm3^~%clW)bĵѣ [;FB0.ZwF2dRўjt|>~ -E˞pUL8G$ ,ڀtf$9YLkkhD:[}1{p4G+%F~t2иizRgfjnqq?jH[hW2h :DQk{ zYݿޝdO|AN*Z][oZ+_@F[k.JWU|LIXlu)Gq݋jyqcL7 zTI{~[ϒ f'?ZU0uTtp犻soBp-2nL Rˢy! **EΈW%soSV5} -~?16ojf)7qVJ2ì27WQ?aiv@yp*ǞE\ =[x g+׮9Ers\j2ѫ|`B;ETFP ?vFfP¢YM ?TLV&nҏQH8>nkW0OXF> =WAQK+QjmPgcyҷ1 "`ctC+A$X;1Zݖ TZJmF\ advGPmonndQF> U0HVn{L ]Zx-}-UC$5c ྷF*Qһ}@dazvBzYߣ#,ٓ+˭yqKEcry%w(nW;4p^_4j2z͎QȽ;@4_CSa$&AWUn$[mzo* A_MYh PI%{*҇}3zWRх+jX'9M/IlvBtݠu B{2z)L-[g9X1q81@{)7I$ Mw!*iKC7HUյTL05B7Pja.dFgdIx)rT57(J$Q=#7γ\v]ks,3Xl^aY/|90X/#MEqt򌦠/mJ̯)e~(z>}CZw˗R})lyʰOע,v4^qSQ$]I&HÉo~A?EWIP=Bе,z{]TQ]9}.,gbԈ?3|0;سD-+À_Q1 >@ܒE5C"!i7}Ozut- -cieCaB5EZL·:\>PăӺxǒř{v6hiԐ%2qV)Y7*EO&Fq.`|He UhY*E'?+4&SUXe30,2\}#W;Dz~W+{ ,񗢍DQ޵JV}Z ? ?ܢAWSDƳ5ZiM} WR$R ݵ| VpHV Eߟv*96$=YDvqh+^ eT#moj0y8t=ܜ( AOgRTKĤAM5ɾ<}bj%8h)gmyW`}>AY3`XBgw^ôYdly)Z'"Ƣ{9?AyFAkzaȶϙGv@2,ZVq4  I?^tYuD8YkbO;l][! >)kF#%UoTj،ultW6/K[ >]''X9B- Aa_̌pƂ. ݐ+T0 ]a{BrGs|(B{KAP#ٜ2b^}c%̳xu]|e,oLƼ-hVxC+Y}³9mQ^+8nW-JKʼn Y41ff=z:s XTdV~@B6^ VlbouJ !557` ޅb_V&@H<=p}qGе1hu{R9rx3!2zT EobE4YWt#RheR_Ɏ+O ~cC8#hkHsp[gtbQ XsיZ~geB-/1Z 6`CYz~q$}$؍cN7Ss)۠ @Ź9aĪծ.MeOV.8ysp؃&r.X,m yu}oPmK,4i yI ֫LY,*)*G\~2Fއ3|^x&OTBG 7j8j?1#D-{( ƂЗĖ]*TzOڙ՛x+fkx<(flLC _5~locRlxxIaJ5$\LT흭o!oL]Y1376F$?F2_2ү u:D?ZTfRy`ԋbJY3;8>f½Q11p77byghV/$x}L?$<}I4g')ON uUے 5/;#ң{|k zH?֟A`ٔp0+P7'@UϿkL9'he`YϞ@@8 :)WqB*~` 43xg|:Yz,eA;ŭM|^{q18ʐ` y^e[e.=a#psiMmx%mS( C:'yz\0W5 QxM `֕emoґ/?cgzeݳ睜Uw< fѱB΍& *ɮR @spQTu8KP;gmŖ9h{XŏI>6E>!j(q\%>5_ @.~stj|07%!#P9:(6FO1+gcAUk#NmL1YF&]T՗سR iF Z{,c4,ؠZc\AxkRjUYU|8v.DZMі3vj*Ե{gkT' F=`չa_V=ѝg%gEH2$a~CA<*!9u*3*5zZF_H#'5w]}=A)5R]!fl׷"iw*L+E1X+r}>BgXW@-\^e͹`Thy/>_C.ИkwqM/}9r ,}L5Uk׊բu3v"Ȫ%>Jv8Op#1t@h V!oA3Pz>ݱrQ!Q=wmɲ8Լ{:-Ob0jX+\Bčg(qi8O %)jqZJQv97RV.ʁ"APnccOah&MM .-9i_yCMe{ Q*4~);%h,3w?>t@wMhPvX+U_ 9KQO.E˞lX7m9Z lsSw'CËfD OglGn8p Nt}3Sm$H88-Tt<(;zS!NA)/ [wc 9EFWa@ W*Z8hv%Jc9{4DeV`&+Ւ._eXޘ W^6䣆'Y{-}p*?fDd6QY=Cǟ}h15 [{w*$3{;Y,v"kuF,6C *Av5][U<{a1 67SΓ*lӌ1sk⤽3q ߬fy6-ʿj6g!g4Xz@|1ɂD r8!.QaZVnbo0+Ś-j"\(^lɹ$ϸW+Z*!@"8ȯZk(hpbp u[D>{Z;}[-d$wވQ=H.Y} "v3h\CpPBYC`Q2 sNҀ R$2+,`ɛ|"_h~ϝr_QƢ#DmD)sYj8d@촖4|} 'n\OS2y! 'dp 5Ukq4@qn)R^>یҟ.M{|O&2PHmh3y}ʉ#<%Q'-<20D~|̹lC )#zSkmVws_, &!Mv.V$ Xu&.KFgϴmd+o?-HwYӃf" @[ RQDWZ8VE7X8g5E:X\y3JMO,? `gƊS"1zz32gE#TQ  43w rlE|4' #WA(bkF ]y1 ]״[Ѣ-oLqo6ÅU'9V }Wp2rZT0M6 i$> 59D+ "a% s' G%/>NMPEAVE>ʡx)Ǝ9i1!cEƝiBȣtr,[~ӨH; ܥuǠE/I?}a|ztѡcoVWGO9=6U==zO=vzlӣ#Ǻ3X"~@k#G/Ht&Է:qzt~_gR|R8yzl_qx (J{ER$PHOJɟv v ےE_DtgTН}E30. w,i Ťrnd_z=`ۢ;eSi(j I#QyIO_U!re{MO& Ϗb-Pz\"](?3wy4"I/f: N[VqOVd&R.4ASrBVd.4}Zng"D_ k4>Ug c~YC pUQ%#]Pc;| q0:})Y)iw1n|qFrtyI95)TYa[OBV )Vvdr"l"OH:TLH;N;29U9GDN}B&JԢ]ߴa4 [ L>eԙ:-= ѭOhL& E#a::Nѻ0'1|rp3>!ôPPIݑ-\I'Y|TF~!!_5bͽKnu\B .{JOr<#}LT{b} tS2g)m{qA.d4***GcǔZMAYU׆hDk:}3X|K/2!L"'W(c\oF=#C{ͪ"B/ސxoxq#鏓n.%Cbџv)]|ErLF7}Sqn/k]A T JO@չGd`]\yVt;藶5 zѢ;FڍBr,TE+ċO_rJӷ;"uӋuR8U7ǢCy+|S JĈ!eW׬38o)+l6'#֢Ws F7W~ґ!~S\0@x qcY1؇y|cJ_ Egt=[ĂPM/jOJz^'9(%GmZTnV[l֏^fU* /+./\i,`Úv7~6k{<(iK?RS7B_!I{$abwѝZQq [^j>I}';ݺ$hĨz<2%W0 ƵPU!BmLi/ ivةznKaB 0opA%w[kn|uzߌE]p@qRW~V0$T>^-W!KyS15M~Q.9 1+'/9Q'cv?IzvJH@J 8ZozYx4¬^ 6FMPX>E% l?h({/ 2x#4~tvaQXdx$ d3 cR+$.M>yi}vޕb%}LJ0>=t4LF1Z&:Iҷw5tT!yHm1sEWS9D%FkaE?_}+uZӆc cօ$ !-sKU0xEt4kt"z:(d?GW?K!1brxz%A=Sֽ)JZ\.2}_?W4)W( -,ƣy.Vuad~zf9ܢjb(;5OMK> 0NZثutkcE!CA"^9]R3>qz= chY 豀i9'oXQ gKOgbX 2lP\$b&>=~Ȩ5fO8)nhΜf2y:>>?Tn5[$sϚ[ 4.@ySx'o.^m.qզU+[6sXm-6:E!藒)>7,N1p! f +Hf2z ܤЅ4Q(/D]!:$k+8^|[1Fc]n2x7tY^bT Ћ.ꀔu9c$~@ YC$5ʋ$we)`  ͚&,v"8t]5`1] (:dd>!ՈYO08w6IHz!K[5~B5hn'2i:̞Br2O:gK (hU* \zUj Ui羁KnPݕTqt8p<<9;: ƫ2dR+LL:! `2HNøK 2_3;O0RFXc҆8"IeF^7(2\憭ܫX٬\u0q\* jI &${ [e$P-Z+@ƪ T1H8`o`ɺ3'YEOF^.g?7z$Kh4Tn|'֡UT*E% >J tg2W5|]]JMk.dOMN@UPV}L;baIsՂH/ =y*:%ۑ( G+Z B:XG sJtXs6HlDQ!Ua/F5q$&u؝%O{b uwPE*qTz:#%a)02@Wѣ8!= ʑ>iFV W!8Ik] iz8mCy*ld&Dl\mpFv@-tmZ5ۇy[=ģH'upT5w9qΌ5 Jxp|eX T-\k=Ki x}'WPc0Ee&l<~Лx6ȏS+&c{59VUAj)-EFsW'B݁?tzS( k!.=޸)Z)^WЮx߅R*P(<{kᢛiAb91[^ny;_ꌹ[ 3jyXE˪ }ڜJc X|]fxߨS+S-Z7JFNP[Z>`jp.f/jW~5܃:$̝֋WIm+`rn)GV:.(3S\FywG rSJtyN3XOo)ZP9<|E@`hA@K[qzQEh'YT۞(z%vPj6ގC"b1!;?DƺйU}Ut:D]o4.VϨ1ۣ4*o ڗ10G$R7!} !sc!熺R7oL|0y/H86ʟ,a' uj&8TrZ//BpF\@>Q_h _d^~_"ؘNpN,F~fȷsQueQhi8/kmctz#7 mI +By퉊_Y6k(^Ⱇ}4n̔<װ$])ͻ= Vk,wuXZg *^BJh#SD]«  6tޒ~lDM+|7|ثR5<ݱ2TQ l#=Y&!bSU! Eʄ Zzb$@2/"KYR@Ҹ&,j[JB[%MU vX5+Lkk)0(C]%ʘY;$]xOG6`0]g-BuϾ,-X|>~.[5t%liMHXvKN2R6 }TH1Bf.LN~ZSy_ow[IĶ:HF#Zsv81G klK9S|#΂;dgCRsn56KwT=]l'T\&h)O ,Z XJI߰'$ߣpU5TȒ%Qe?9]ާQn> C5jAK kKOE%?ߧ هؤAiXUմY<8_GmA+Ɵ$(`yu뤪_Pg\c,Ubff橨ͷhs]}Yﴹm:x9%s[n5N~uy XEuvplsf,^vaȈ)o0kf=wHW uMWrb?Nn+gЀsTvP7 z yè ̽F8F-2]GNM80o]|爇ؗ]~ vgBዒYZ5Ą2⦮Y%*Y8CouZcL^F:0'4e1 D]*z]TxPS4o1 _eW8X^/v{o iBLTF≠QIEp^4~{ sN/$oY)BZO vvltm~<3(Wc Rޕư)n$u)unbE.cY7e R1t~YG|rp w._?S{l~Hwk59kxApD``:G \LpC1pnOb!g>wjQueZ@uYG"g)R;@.Zvtyʲ+ps?[\"= D q#ވGNA2Ɣ$,+P4ڰ5ڽ\ _K#JA^BPqiv]OU(sVV"e1K{$ɸ[A Ia&)Q7q5+oC /.Xu-+o2Kv8v$$* z]`DU9秈;XMtY/&֮ADte]Q9{[p5>jp;|p.#_ fal[Hͪ.4Rb  ۨ&Klg'`M `!4M*XK{ `@`>R $_a`f_2{a2#|l<|9E8)r0A]oۻ㏹YAUDUy?&-%O2sZ ]ԉQ ' z;| xf ]9WxݱmĢbB̚;5ߊuD=$e/#pp.=wN,$޴JׂͧOzMmr? C}ay,)HBYIlNbuH܌:8aN}oh8ג}X&a gT.nA2*8umY@x!x'iOy N`zWSSnRu٦!D>D0G$yY{|hm6S݀ѝ86(e!2;X,g>1iCX.^ HwfkUYNu 'l<~>ڤyMLqe2*61upIJ%lN 0(+x5m[A3mʹ8l8aԸe_P 3Lp}=^[Z#PŮ}dZѥ+r) Dzr3(%V%%FC<ПF֫Aw ҟB@<pE?wڑYdK^M9_NMN:Sgt?}Lj8jIF6l(;LG^uguKx1y'g\]G]5>\\ -L6M1gO5M%`n&9+r7|1EML272-vV 8@csK`ߕ} E<9{0gOQ!D@i{޳ #ch JT|˫h;aY}8' sLTK%9o >plQGcj*VY;&]/sCM%`YfsCPjRLEFBY>HPn3,r& e@$^o]ںHN%ʅuqt-!eCr'<I/փHC*(|ȂغaHNrUٞJ?-eǼ>R9TS_x7m+m\cQȭ^oqX 'Q ӌ+૰bթ%QW :"ُ?9i|t!{)FndOaS, |?x$7>!JJD ڨ4Io*3e^TJKSo 6g(yN@NylӯOjT e"{ƼGOY'<;߮$f2C/Il ~GV*b.컺7KH`KQn|[ɗܫzH0 sf@V!HQuRE zJW-nU8|z)(:Z^ݴs,zt}texN-/wkߦx>>P.ZvkU%>FF=n\@z@Oɿczts@ ~J ɞ}RiN^;]_e̫Lf}1qIF*|_w!ErËu1@+hjs}K*D>)SƼMȡt_)%IbL< < yÈ %gyYdbW^Uwr Ip+xeW6es$hWmV5T?BEҍSTj߲LM֧] td|@p@-aƿ뗯-Mʕ+#5MԂ~i5n0=٬)YBbOz{gYaSl_x&.[46웋HOQR8blǦUb.ń$j;挂7 S`$՜T_&Yrty$^쎋KQOm^(Shs| ~I:Y)ҍ|Eb4+K$hmhU`$6!jުlI[s픘7֧U)T(4a ={wҎ2tl[D6s) nLE'rDWҴ}B.ꢃ\ {`UKaeTBl L#1<>=It4l"Jo-rߥv W# m*]Q44 +u#":3*;D^w#FEj ŭ[]rM)!DLbQEUu5~!7*oZ7΋66$G֭! HP'0ekTɺ!' ކ1`v=t7Nl)ˏ_*nS ӊ!󋔨H{ޢN|pvv j掆Dʢ~Xu7~^g˽IGĨ'dXˢ?a&v&qxpҌ3}]YϻP#Z숞J~C?/W^ [rӯtt3a%v7WSzc!2V%Oy fDzsèÉޒqiTAPI3M6=.-M]4ΏZ U!-~cbC7K03(ꋂ 3VRdSR@QGl8 8~%9\@I^UkYOPj8-E:X`@낧be_p]%!ŒW|v{9oSx3I7gc3Q)=E/akclcWqu }7]zn6W|{oXs^1.uSZ3ɢ+Ỿg~o5} oo(,Nv׸Ѣ{d薤ۂJ|5>%dviks{^|ese&JGp[tZe?jE4IBĿ#h1྘*ې`0d~~03 73,\M[ʣ'̰rd"#Ϫ,~h. 'y%ttr}z\lM"Rk{+Ǖ8*(;&%zk&}?Kn:/HUܸ}ƄP{V]1T_VyL2^ZzbG%^j]xԓdvEfC|"qMCu5,>K5{@2PT"ewZݲdWV!(/l y"%̯O{Q:5)TKqѓ[ .}!QuDVY>4 ec!(u0D I-r@ת8#N|$4(?ְe,Vڧ]>O[iߣ\`(Z{aBY?ƨ:_;d/!]'xwRvK,fЅ7pu1ZA6MPXTTV|3lI=.59&?XY§E!i_0y;#ezUs̅_Na q2=&d WQi^g=98`Џ?Wn~"֜Љo4w*iݟ:E#5.hOa֠mP 9:bƈPq L[Ssd=WI?gFx㋦ oO0AQO_v?P)&Occm#-h:og= #a6#ؐ-Ǎ$M'{6ׁ: ƒ>A6V]ՙ vqjфxb&M ܐ篟us(j>y{lqU8:n sʳY\[x./x 3sY5n_ݒ9vc)[L6Y PK;Io|56vQ W`mCڞL͍Fds0*+"+818,Edt+3Q)S2[JKjݍ(i4BfNbgkyqYXPՊ2FJf: UBkF"EDo3)p#zwܚ9ԕqpYD;8|bZj/>p׊ .kR}+]phKo3cA.UqR#HF #7iK'Q'ՠst: 7c,'܎;CVǗ-hIJ@4KxГ)EKOJ~e+'ƖP (=O&l+Fsڝ8c[:}ueFg?𺄶-"N1 x-ʘE"aFIdSDJ jM{פĘ(3 U:BS=Dߟ#5#>>Bt~\Cx^o< LOfEpN"7e8l 5$UkJRJ>EmC6dÚv7~Āhx/Sls*󜮂 `5kGԐ?QI;| 9M(Z@ 6>h!k^/djh=!hJf<F<R/Yb8aa6&Ȇ( 0 ^ɢS ゾTUmU;Rq{Wgzd'`emjNk ؾӲ+%`3sz, J!T :P}62 a{}O#VbO11ј2 "Ii 5 Ļ^ ]t=)p265@袛 b"d.%SY `ˋLmO$İI9hr̲V "v`x!dOnɿ͉ rMp U)60l8 Xw&No+=ݑX ;uf2=@NehX* 6e=ߣ`Y2=ωTl9:" / W9Hl8K.*d ˁ=Ѥ]%v!N$Gl iVc:\'h!ih쮤xe@vUpTov\ONN_;h/~l圵p'Z~5@Ga+P*bƬa׳L}ۇ8.')oka;ӄL6/[ <' ?xsFrTԜR۔U,?քwh;8M#Z PG`珒bٯjh] и|XRd ^j)c /}N;~}WVD{c\nۏ@^*U% l 8 LF#~tX\ @l:8{3Mp/ubD OJ t)%&D4>"jj232,f*OE?XQd${j\H/F:V]]|m2.VBٯ#9N0ir^VZW8RU/%'_EW6k^ \ԹVOqY<.ąlzՂ1v8,V‹,GoRÔ 2n;300(T^-NMPUa49Lΐ~AޤRtӖ hmvbѦ6 lޯ$?m7_{1뒮 c⌄WK'Ma-SS7~̦pA wYPI4qα`ϗU*M`m=#) X)\HMF Ɓ}ɰ|몓e.4 Nqꂡs-xETsY1 Dܽɤ:+^% y'yD9OA^b0aPm1 ~ <#쉬N!})_DJk,_Eoٹk.Puz@C\|g;SR (' EQ::zʠЛOCj 4>qvȉyڴF7flT䙃lrO-zIcW?@c9Gaef='HY]y؃/iQ$_$ᏔK?镢'c#ɟdW KYy8/va\j|ߦ$>ɔOڃ{7&>"TUݒ8Wj(p')`JǝDM ('ȻJs01Q[҇fՖx](;3mw=rhZ(̽ȰZ]K97<x!Ekvg7%pMJ)*_+Eݼ \3` 5T hŌ2q'S n)4ͪBL=8 ֬XwGU,F{B Crm2:)T!4/)oxiEawq !Gwʤ|!)nxT5a&tYGK7 Q$Ϟ_Ƙ:QjN ;)> HΑGE@ 9I#NI'n){nQ0` N*b*T=pӸݱ\!%A,]\U)7LEG-Vsw(<dgT8?yb5GSB+5_Ʌ5UȎBAK}?c"G:½CoNzn iŵ]ִ-{ҧ4 DtoRǾg,sۗ]/bnj YlT$}U/fBTgF<$(CM -f,!łAhe^*b,7>0?JxO#'8EcL-? f^nv٭8F"}&gc )Lj7lu{d"< +'r8ko /k;-=I"~d8 iC%(,rt|?8ךI"!6**AÀľ ai&RWY"rJ i u-WƋZp^o;Eg%Ϭ1k|uey-Ukv50` ئj WRz iGͻhsPh͘Ѵ7@?p>X;*b/rwܨ@fyntIRaXkI#Oe3(Ft` 1g̏xC}Ԭ$69gp|[sq.d3ڄ,c 6SuFpAqHPY~R4Ra-dtK2_Gr vQi y v׬Nzx)ʖ< }Ö{|ްf˽H%+:<oOCDFE0->;vdc;ϣݟad8Ή\3 d଑?C<8d4xTm6%i}ƽR~Gdbq 89:M:-Z-"-ʄhT[mso)~D1RsX.K#S|4stuF4=dmH,2>Y1 }# m9ֆ9Gm0貭!DJ~= 8{09`f7苴0f8Ѓ9)R+TŖ_mrbOvQi@Uq#zs]p }!efAi8F.͍648̙hV36jƇp kdɄ`x^`sfDL1B!~&ig~qrDo=F:y wM[ N5 Y3jE ;,`KKl)綤"~E!bV6_~˫!;a}}|DUב=9?-d fx%%'P)h؋YL򷿪[+8J,nгӱ!96<`ǁ0? !tʷro9jEΨb dm/kvb&م )4)[s^ߒ ?g|A~4e!O~IgULJ&~Fs&L᫃Jgj-7L&*x;Y(Sy.e#dk~6ߎ&oa?Qu?ex?ɊW}*O?TjCP0|AJ8$>;n5g ߊY(gWh*eǫ%FxG;@4ﴯ{&ReQ.{nOf2s; ^C0*~~{$J'n9,E1¡dP4A 3UDM6kG=듣 d9q+\ulsƕ'o*m>M&f3UD{cA22 vO/4RJ*yD??6hy,`J̲#7 PfOi^KGHA39d3+W,Is )7pcv({Cz+ Ύ .&arp{i5 wWNYjʓX)N"ućPNZАNXOLA @b;!G8}7iz2vf,9YO8+[(Ľ_.͊ϳaRCPsy,]/bi7ϷW)\m93GƗT)-o}̂ح,C.׃m(M x68rdx. uDAl25J3 d,i,P6r7;[&}UmZ\xaPg# k\!q~U4*}D \ZLFO{8*-RUސFY'n6 P1SC.pEO&. ty4 x/;U折y$K@as\b\%`AofF'meC:v.C3d0I?EI~̴=CYDJr=q =] IOuw^t)Ĉ`sX-$J{KV`l3.' V[h8 <]9Ĵ9[y:*0<}ϐC&F/mm>/.)!rؼ?&XLlcxFEs1W_`)Rr lY?\4cr{g(5˅)olf.%32Of`·24&5OtIgQ`fFuNE< 4ڜt;vc/ r4ʩI3Yo*,&ErׁHR0yKJ#Ϝ6@J[DFH^ܾ+tPr>®wMG"l[jNS~SڶmOetW*7BRNâEVضWvnݾ-n-[fhm~iW+nщ:DW^)ov ~ۥ{;[զnGo}sH{GkO>bi.L,_xU\m4ҥwoiM|*[Z_H֬MZvr_n1Ӿ;TmksJBns׋|tУIZ,U/?^nthM/wܝ.w))U[vlkߝ.thߕ.v`ɂ 7Kt[MM[w,۷±c7-4.Vut[L+5Bmax%ZxzL*GbR/tskǎԴ^صVTJ-@e[ʐYٞ*TS3hftXbϧ+:u.;4vF]l^hzshhVc+pG=StqwnM]SL[ێĶ;|53դ[:^.>Bܢ 6lm׋ҝ?( ]*IߖWh´ԷԏZpvK9Յk)3geG77죟t[@}Iuey殺-Ϸ Z}Yji/>(&vڱ=,ߐf:֗Ҡ!]vֶ=Ux=OIJ]wNG }[ʵf=jgd4|)AY⮯6>xuGjuSʷҕY2E@kzt胼j.w;LFÏf4!*%M1+]Oh7r> }-#i_]Y^bR1J$M`fҰzh%]h-!,  kTf,&"P6Af$ǮQB44D[QfAFΝP>ilQ4fٞw۸}MRΗ7->դ2Wb|(Ս  w:܁Zތ \ZM!gy^"DB̘H>avh̋#cC̙Cz(7 Y[>"@vLDc`yy4m#!;xq]Bb=(dz|5#ZHVL=9;VuL'{t1lfp(ž\U8VuvcYF1cvc )yv(qĺuhQD@20x  GI%NX"D[`0Go>)'_Ӧ` $^.Ǝݑ̃1LtXjGZ)+Kc Wejm"Ey&LbP 00~A/,1bSܐ} [qГ sUD=Mh je9wt2AsKJza('u q kk2]=OlʃW?-^IŜhsWtɁc~nA4Z ^6GrJs*{RelcjA ؓQChA bB9 ÐpԌ }!jm"֝4 8}\L7aԣgc]hn2mQ%]Asv$L.= 2mi5nP!6nl6q LM⼪ϘٽB]M]#{#*޿}m[ZHDٮL2n SMY "Q#8닷qwK}hƎ'8фB䛢yS_,],3m0M4msu+W5K;)oۡm C A= v ^N]JcUqy]l`abuDY(=zt3~/WaI/lB/9$@"S8"m)ᡨ@ʽ?Tf5[E8L 5\H V /˖5.ZDf@ȊVL(EVQ&,Sd:dŒ%ٗ͘9&, T ¥6*V1QSSl=h8%K_Ib "Ye\Cs#ږLJj~A7i 4:z aBvla7z 0=f- AIuIԟ_8Qb+&O6oF=j_fBO7 ?p&P K͜.ye>e>TG9h:Rn\ST­)tee W*+'T8Q3|:`d3D ^x:'e@p_Aϸ9%%_ՋR:m5vF5 @PC+Itv4G&'>YO6p=SIJ.2N ݹ"efH,"k%3GYdXpzC]a Jkt 7dc%ĄI0H:~?JA(&"ymʁEIP}/Zk!m__h@K֩DNڔ3iXdPLzQA?|YcǪ7ENwgHtX|KR@ָMH5!I(a>|ԟS[>F"XW9Q_n)8*˫Pk-GMm~rFGsI 䨥eӢ1- E2qlHYÎ2S(j?zlK`micƴ@-2ͧN?x -)GGOA/Tz_iQ`$AE:@"EP0&lE21@ # dD>BQcM);[$"NV 'NlLy2Ki[ӢSq^xnȑ-@y.xlL"*9 s1Hg/O(<"bg p?Iʅe"9s[ب2 l<n4I;y2|/x0ꝓ2}zKO.c'6Y*Z'?T[KoLk|Y~VǎGZ6 !+8FXؾ}bCzVn]Ɋ5+zb9l+CrR*<1beǮ˷ dĒ3=#0 4IN+ѕQS֖8UP2V-w+Ůf~%<:J1ԚLƷV,dՆu3[Pf/6#F' Pt`-3M \DZ=,|x;!т^(}[=?Ш=;29ʌ]xm)r=8A Nw4LF>[Κe?ښV)0}B% :pdŖk:-XgԨ4bjQYMda\"_⽥ LS֎057G֑IEeNt `6Z|bYa9sd( '?;XdQ_'KY"߇c JFavqXtNAWL*rJo٦5Eh/S0A(,/,S jJx k't2btA@9V-c1>)! NXunc=K0VA;$&O9HT\ y>~ !ป! <$qe_ZLI#֏[1qhU GKrN+8G}#U Փ01~SvLjVl#_ !]iQ{m` J?JAqży¼@Ii9 YBPvJFPlїT0mڡ+P_'xd!ɢ,PbMx0QP໋0Q(TtEw:( ܗWrxyVg/Hgr`KrJ%Eɲ* EdbwDOT'Cd {2UZb1̛oX8d&FW2aܥV#8X&1«Ēti`_Ri`^[?J_EƠ/KwJ7Jw'D ^>Ko~<x~o ߠVKKr$w;xrM A} nc?o`gqP``XOAѷ5<]+` oQs4cu¡,3.x/o|P,.G+{{kCKg8bU vm-߃7 kP zk ͘k qv v.@#'O[6Rb U݇x2$(>;GMLj|n8pE# LVۀhFc۝b"ÓdrHuZ*v,am>bV~b2_e5 txYa7E qK(Ob$*w̃Y%ʓ| FW wT0agbpަw*^WePǺ`j M5Zޥ&*=oQJEbAjDN'^CBJ+"c -͛(wLoj!$G-ͰRbSȤC/~9ded\Rʾ1DVmE^zD߈e7pV `E#ځU hK5 , ˯xUn\#{Z'IRL]j2 N`=QLe U? -[Z N#.X uhƧ--ĒméF,yw[ay3jG 7iB0#FRBs렀)c JA}z+Q𹯴F̔šbf}+J:ɚp'/4`vc`Ysf}WRjE#[lBj;@u"q2F7J" >VHH7}^Qݾp{J-S_2Oǩkdt\,߿*Č}&ǞkXR8ߊ 0hbY ;J5{ F5!FOr,,|B)_L\4nkܨioWf e҆q'kHЏZ$ ҔR1 pq垪F;C~gM8xSlsva v$C&Hr6ݚu6fѕ L QAXB\a0R۬gPGpm;5kU~|,Cr6eWdӿzaTVeؑ#X,ZAMŸxp0Ғo&p7"[nCZUu7Jp)g~$Y!v$]&Dc4x؇LWFwEa`0_Gkߊ3qaH9cK.}Zz^͕_#(`5o|ꋗ (YO71.;6/WIWi;-Gдos`Rgh rBO7p=,w ^R0 lAhaRn歄S.{'zl ^e7xC/[Z U}`m)wFvMYЎ2ZNI?$#a%KΈF]XOv<k$fxv #AB S)-, jb)s m#N!%$$T nf  _ASK*^6Q.mfz|ii%Fw{H $h(["o S8.v'CSICK&NvyTl}Or:/bbU%5ƑŤl}KPI/=N@nv`u.BC| #Z!{P$Q8%.þ-҈qϓȇތjEBqSpe'{a5mY?5s4%u㨁9-G[gHjɞ8680\[D"GlO&K(`2Ҳ c9Ռ`z"<_ۦ!+vE"*NHrJ;+JDB+V ԙQ(TO].hހljog%Ĝ*^ >gQ7>YB 7W%!V 酳u]qTYŕ( FIadЊ;0>1&Wb"3ĢXQo OCcȊ2DA;=w}e:H]s#j!o(Ա@ěNS*%X~L*Bld5Th!Wr2|^{*UƱQt"GX3TT$86@;Jge1w ;եs*烔j!vxLG PX*cnvG'b2OjF8Ax *k, v[wXҽIІ/)̡|?VplepDqIU:]Xr,!.!F:%GX9s؅OuՋ>Ҁ8ߦ5EʀRf!"Ʈ}/oS")6 ~y[*j7q} oɡbs z} V2m9’ljY98)7 tycuirad@eJ*v5'lj5 g;I; w*w&-;n@?2pBu,X0UJRG pc8B5Fv#jРxUBFbl+fnoQ8TmR$vboJ &WP_*(ŀ [ Ь|%;Nh%'Xs7g]^łg(n΋ıb—Vn@n2 %*rvhOeَ/&خ,g!G)fM UNcܭ%&X1sֺ Jstb)h8uϯL;:qj[uj5mGǰU;Sk`Ħ{ɴM٣3Ic[R ׄ6PO m!˕NNU4وxp8[0zI|ps+37$*l:Vd&`^L oۇLިrX%0{MeZBDrLnL?K7}"{&H 3B+1% -H9B84"w 3%^g RēTBvցwU.w(EF}0weV Dq~s/οfl)S:"C٥z׳ ]N;QLDFVv*(?sճ ?}6_~]L1}3NR_-8eHHS ED 1ciTg!\btx2a!d_%=ItQ1uH = YȞ IڗҎΔIn!9ϠY̭ߕ,g\+>Ƭ+mftYd΍Mnv+Uo~CDs2ɋJ!at@_}#aט#Q:/_Ba_zG*?g7P[K:(Ƃ JZ̙i%+y! 8nbD2NdG֒gm qLG,ݍY9:4筨o[ro`KSm07oym3q>rd+FV9a ۂwpa лhs(N.;#p?j,_HW tTvOF7\'~m,A@?h0%NaIormkUAԍ9uW&/& 5p &huźJmsRNdǸ5xɈ` F7lWݒ8}ut~.{)ҩ-P@o5!ߩ榧E$b[\d˙-Op`Hi߃Ql,& b:?wV/dl(,Q'T(i/ƄR{L 3%$OU8h3eUXZ]w2(:lU5-T)ۆ|}WH2q PN|ͩ,dGd2&R6==e*jvK7NTnǃJ[T'#OϪ%ƈǫka} 4#T3b݃0 U{ٙȠsLDcg.H}heŒT hܼwVrt޴9E^ 3TdZ֓ɛuB<3CR/({}ğ"v|rH)6L.ZBkB}F.L~W"&>c?ֲ먮e Gϊ+ݲrߥ,u(4bс1e Ljҗ/k<#$:ΉjzGNQgO!O,xKȳd]nŸOJܵYJY7 ؝u\$q?2zH^lpqio~<|*g|a}}hV<)\*i#E6>gP2BywV 5ZaDb4lq8K/ 1T(I?+l ~g{a@gN+"+cYF% ~X7uC3N4wKZp vxM*a'9D/ȈĐq+'iMÖ,_vu4L# D97<):SҜ<>Z(d!!mk_r],HBNMՔi 7 K"u+ڬnݛ6BeLn* lq\>s@n#UYND(5ël['p]֕Bɀiߎk㮮Y2ZWR 9|( ϸ )VxsŎ*-1hcܺ=t;a[P1cy.02tKD;8OTw!p$r7( RiNGA#V[^ܘrAru=%GȀP0B:tYmE%D}TVmW~L-bݛ_ɣZ|\,x6a mB~'+D~Gml',ÂQjؠ#$xMuNkkz| (s,J7f/b מ:M^>hX)4ed.bѷjL]=2jRbzp%N$B3FzA#Iq$̧ן904bpӔHm;p^kD~;B}mF$2hՋCؗ5+=/ Sl܀fggD|' $+ѮAjeX}5Qߥ DYjH\keb$.û"rdඞglLqފ $9zb Ppzu.ɠu= X侴9:]uLcaVLlުt.4wۑD?|wY}Z4NTE˨ŹB>z^CΣ)?xJa_ّ;@"O9}P~ZzZUN]%57p!(TV?,2+q$*6hL 9N 1s<?爝8s7xo%T&JQ%[+Hkй <|Ee4e9/JǴiCeĘG% +?BBU$N2DMi&XmfS-iZ~ˡS)XO~ˋܧlTUJW RU 3NWru=: \ʡbL6E wnF5kM.8-GN:ɬ`;úPQ[hd$ )\һa :ۿb/#(◩Nno?e]n\2Ś?op/!$)huB&9=i߃[> Oq[Z(>p(>{:9y3o!6Ējb_&/׹0_cΰX8r}P6j˹ىL&L:jLYN F?>`B%y=R:= bpoЈ\r/S4S'q24)ueF@HA2$Vdud Q·,rso9r{٦EuzrP:Z|_oS>b ѱ}9N7s6 7WB0\ė.ٿ0*%*8~Ye*v(08ڙXBƎg8ݵMԿCԙdk"~Ë85t{^|S 祋A>zUJ8OR7#'Fu+/A ?Qͯ|)7R]X OڛCkJ.qgX z듥o/<Η桇k*uj*Tq#}5M\qCqzˡNE TK۴`|dA t?6i./0в޿4ndȚLd [llAupEᶶ=6%ɥpT{a(FUS9EDJ=eq;H1.Th0H++0 )O,Tk#['kd A2dž0cr+_!`ey<㬒I)o eCeɧt yD2qM&N'Qu' 4JVp6mU#H]M!.1 ɠ~) ?`%[:dIY 6U^ _cEi2`)0IKNufNҦ]z!JX §oB m<ݲy'ª3>sxgIJYvSN Y IUL Qk pR.U}UvA&⥽`%%楨KϢRHV'co Y pFlRԹ"5RkY;}dě,åh_"RVoc|vU:\d}sILI};_^!',OdO(KxA}{\rJ\YH/dybڟ۫ʊEt{tpg*l$;R^W'lE'ֵaV1qmCБzLQ<5*SLζyV+Ltw{GRw:Zy1a5Қ~EShvaSK E/< -vгej64SB13gR3BO* S^Ssҙ,zL;uQd0"Ԅz/U9G*Nft70YCc,LPOL55QMm^7 ՙ/{Yk#&b^؛̤ i\hHp[3RL拭f+:YnT8*Xc]0>8ѹ;iTʧIJ>[,_Q5qD3l=K̋CriZ^$PLe^OXk&g4}=nK"bĕZ6ZŪ>ߞf˴kN{rZR]0E#|75zo]k吠qoh>c[cS(djpare3d[Aniem|c]CObƌ- Fzےn2e ׅ]I[qbT0E۬?=Y XQ(LDmM}f൤|=ىJ1$-Ɇ, ̈ua+x0EQWPx1WHlZzShc+dwJe ^\,$fN&i>-+`[SMtʃK_,`=-A+H^= VeI*z7I lms.[i@T~-Z 8dS)9}=5bڟ?KDv322I].IQl{P<+Vov$[S< Yy)' L6}Xݟia2jk-bZar*oA$j$T5۞1~,D\T / Ѥ[tW*CӦmѢH@-0NЯYfEa(;==)D4l-"Ǯ,ep[z;RmK) QܰnӺM:v[ ;I:[?֛={{ al;삳 dZDXQ $NXR- >_t'hX3#se 6]ofR\H4^KfBPwl5m)^5oMy|ɧ-J.OI0R)4~(&qQ%5 / Vl#GK#&n)S}|YH9SW7a+(tR b2b)f}Zary;q"moMa4x9\=8'ݘ1]hvڌ844pP32W̉" 'Pv1HDe_m/Soy`;%A,*<,D3c Nji$4T6/RmnCoEaq\txpح-`m*gSݛ1Mh{.A:4̳kO߳Cgn"kT@X^,I[ʢ"L%fV4350y9(qfގ|T l[MmةtgtFJ:xlH͠Ij4jHv> CƽVhGj$$ E۷y^ۛsȃ`8cժ mK|/_z48N/˦zB 'TB] #3/ihO>5zi-6"Kq;\-s 7=~_f/KX G 4 j<%65@]KGM,FNTx zPv'pkJJx,xX)k'X',6lPQ:zn+בMϵ.}MI<Ⱥ`Jx!M,6SM4u0 Cr@I4 -BZzhٖhmxip}YMImoy(A2|B(ab?3?=4U|w'rX;d!e 9P$#$$ F*nqRSFJA9p"HZSxWB(Zp6-_LVqʡu6%NvIoYN(lmAjO:㔄>Xo;׋Ce˰}#d"C{kk`94+^ jL(LgAVu'9B#v x7)Ҿ E4d|FnOw%I jɡ_̧QX{lCZ0fljQk}>Jt*¥W YtiZCNi!f˛QZԱb[S3+4O uUt6̳qß]Ӻ=OXFl TaXZ#!UTxF6=+O[ں(bmh e+!~({,_ɍot -*ʻN;]"|`DR"b mpz\o8oe)Ω>[-0qH Mc${_:MfZ)>0,tc|,>H[n.VR A ܂AiډAjH\/!d db/gZ }91~|SГIe+fPhbٸp /ƽՉ^"HH:IЃkAb?C96&݀O`&Y Py$PV [sw68˪_s@QIy0^G3cL܃ {jP*!s_ĉǬ6 :" ??ў(ɤ.qo%HL[zy( 1 +3fng7Boo I$dS¨FǗR&x B0cGClۺ18˦z4!QFcⷰ@Bf2+;}$HnEoN$N)LĭDĩAhF$ X[+_wOgCrO_@^-& Auرu>Ϟw'ŀG؃,,4Mmv{&$VW) 7D h"z;csJDQ4>;؍vZzPA|0 e%R8inGW T[kpGXJPp|aJhf-i$FNq&.|<h4sdiw]пF@+sF3jj0wAj`o;.@6s!h=F{Q&ڜ,*gve^I?zѐ*$vR,l Ds%՘Fiسs23Sp,Iu + ( KR 6 v 4ubhidRʺ҈%E9&N"M*+7kZ-_Q,9o0duo13I- ʏg%Q)EfOJf$!]YWTvĈL3vtĤ)r0YTFKg(6Y4)SwJV,@kZՅX & Pe?-ZT!OH"իf,ғCyqq9L#w+d+wyo.\3r2#GB$A;9]!jk L&!֭;2s@ 9r (ȣA|pJ' uMF:ӞLz=ݕFlQZy,΅5vYn\1<'.BN@39ToŔ+PlM)OY6H*#2;` A5Wy!hP2ʄ2ڻk* WMq"&XBH|4(BaX jb3\ 1g4 "5nmrj3\U!Rb֬`aiͪ"&IE1o^I0kkb-2e*=fP)F#FոqI.J'@rCבSNwIJP4_.!3`Yr'!QIN6h*5?fV-LMͨiA(wH|пa U%Ϝ4D9HNv~I$ӣI'3Lh[bٍmʗJG{`@{LZ6MmpjfԠè \A{c(Ol=)`UǏw-?|j(JHX4%Oe@3S3 sVd``Yv 2Z%1{fRrjj&Nq )rMgg ,.ih"FY8z,Nrb~ݛYS|x'3 ٛ&1iλ?^c" #;^uZ &Ϊӆ%}Վ=718tT2.cرLkNk\p2_4u%3:%%yV kJ#t^`u4^8{uvE GC\v)USCci] Z0LkomP~V(/iJ5aʤ? ٍQh(nDSK7MgX:mQUp89)tGBX){_Uà5;Σ nu 0{p2۶2S*+a+J*jUS964h / "yЫ P/>V .#YlPW~R5LN* 9_bjlK81TҥTwl\a ndcdD=2*9+IL:VOZ nRF  h.I=/Ջ)>}87'Ə'[Bv;?X7\#k*pzxBFaoIҩH+qTN1m+Pq<@ 1jr҉ DO]y6njyBK|1KcTmi]8e Z% m0?~QV٧mV ;D?%v :_ l2GĢExr:9@IP=,-p~I*uyl3N(I6R3m!p ⋺ݘ$UU*[ 5$!V0-MM mr\1W/4]lT0zh=SIMVj\}qStW\́H T a*tAo .דO-@ݾ}uHL5be*0=$Z>Q"Cj i¢T(ȓ< ᫁mP(rK9qLښVQf]2NDQe]va< ϸq!Lb1o3$Z1UBtl'3G=&<6aP G!ىHJw6-(O̯gRw D2qb bP\Zj3̙3gSiz(ݖL!`" ]zӬ''G)ei\-ih 㧔ypÞ4tȒ ?Fxjj @DlT Bh+ ܜ 1:92Vu Hˣ8EڐZ2(wCPr%->`lQ,!{0y:AlC =ʷ}e ,&"eB/73yL1\LZ ќ _3"a1%=kF8=qBAM9R9s̓㖗0esf]:ՒWZ ,]jǵ ,y-t)t]HvVs=Xc'*!Lķg(|}tĐ}V?pBҤC<<(M_3}u+oOZ6p"y}pNO?3e6Ʃ y&ML?$!ALÅ$'<_uˏ,}Mttu^g?Qtl&C':@SOŶRϚ~bS\ՔdU?Gm*۟2M2;vs)xtp#&,cR:M Mε&"!Biljݘ#ٝ;3!VrZ4F1"Ggs8-.&[2Ȕ(zŞeoa/IԄ=sdB:E14!(1]!1s40_sOHo@fi`*luGIMs14J`X|n'(ު}僘:~:jGK5$Z!)]6IZfGPL/?55&UXf',O+c 7qȗs~@$ YNRO7$QF c*ּbkҶѣQ' ڳW)v-ӛʹf%(`A+u6bG1]Q +]KSJ@zcк0ziR8:ԝHHNBԭz t 1Qf6m0(9jWz>X֫ydϘa[S>(>Ty)"*G̲b]L\ *_8koـ3FN*δ=?|&p+yLtRtRRT b%^9h@$8*/ݶ!X=0Qz;K{u 5mTFKȿ촞8yz}JMm7,;CӨAn:IlBӦk9s2Ռr|+묧 HIUvY\{JgUd)_;+B;`ie\߀=t\g.~p^~PE*Kw<_Ū. 3u,4V/$!;El^> b =xxh`.aK /Ã}4Krδ1#%q Jb:zÿ$abMݿĝ 3?&DjÉe>C}^ܠs434c4 |uN WGKѭ??_f7Fl/akx]*Exadh9CG?1xOr_T>gL9wEWȢ.+G%?q^ S=6a`iC%ҒX+E3E㋈qoS KAh&/B򇣜Ϙ&?Q6)Ϧ؇J 2{2K,| dpˡw 5n6f/CnC-CRک%c%v;'21Xn=:F3\Dw%m/9u(E{uU`8AS9g [xJ"_|X[J"V&J}8T=TVH^ wc ɹ^Z*S=sK41Y GûJSRm^/tAG$JJ[Jw~$n1>|_*< ~B:^P_t7u 0aۅhXM).a^<WVMf~F  n0h$cbUe3LcaJ0b=MSz+\UHKVc<9K(ZipH\KUB,y+6KJXϿWUK13t4 W Pp~uYCt`R5cqnH/<+C99o+22˭^XzH7w[0we]ztsM"lk,SK_~Fv;W[XkpabB^!A(M\'h7OSٞ_棳M[Ϥ,m5:)2zC>9g7g XM0lݜ( J;nB, {IcNCDnxAyji2Q{.u _L\M5kV]PO sbVS\ٱ9ȐbFJN \yc\bEM̠ 9XbSBH+FiQZd/ SZI!1ad;H9sE|A^l#w D(`iWJ1FGiX 'hdƱf%Z ka$%1U3[{[yBI|fSsPk@ܽN\EqWtlXY[jwڋ|dYٙ73$j/4TXmxUCD%*)q$^ԇ; p4M%E/]FSZ%H <DT2vHR%j?Kd(I"6)E59;ā؛aN;/-TZS6)PezRAL1fUe3OĢ?!k% Te+y2@.Yz}AGY-i(j5|Pa7? `xexQ#amJCPИ:qQB?RE؎ zpe|ݾ?JEs`f?a}%'!4ɨ6p88_ţW K_,p:Q#zDsCm^/x,jEO˸ ~YJWѵhWa:'' >I=J,sn  2jy$M'Cn# ؾ_ E DcDatHvX$Gv6%߷Ў7 |mĔ%i2zޕ46FX$"~a.WwPN{L)?Z@h3b3qsxd _VjJGXSµJYV0rNEfJQ/2G:rF WZvuˬ.q>Ή|ɖr䊷MCߟ^K(f:EkfB9ZIj+P (놞kfczWBnCFÉ'^ YH"+>vg!8gD{^U|=W?anM؞I*PZ/ЈIWswV--&pz< ,x)H}EZձ3v2"i&6Ï4ƦfKoGf|`,o аS[0c=jYH|͂t=0G1i~svǴ{،@]AǑMUl歅$"O,is$^ʤRyVYjUGznjG'}{+AkB~5p(z_{wUŬQ{GD%WqI@.ۙ}VجEiնn۠cA:NZCi|w )D%Վ4\k* "|ǧZ$2N8̊bC0xƪqJQ/IFwVVzDZ:bEwz_=+:?6OU;~ɝ}F]Sp0<Q ebD,,iQ`}AZ59SL0"ayˑ9ʿaj+>c ``˜! p#@(7m+AmQlq[9 $f9[aA_Nnb[5%)ׯNMOFu:gY;룺̦sɣbC/W<Ɗ=%屡X#<\wQXA?w?{1ekvb{Jn(AdEZg[W,IvNZs83"t4HGw/Bl0VyUTY(4imXilk6jb(>2E &4.@ܶGOUdLdEį%+QDXII <s=31;jR#<0|n"j 51 *kfɃL,7)濬Yg$#%h&<եTK| i{b6\#=yyDZie Z1HHn\e6 0j2|NT~"3rXwk?q CDfI`&"M^@ \0c=ńt"_S*C1:X_FK!xd hDkjC7XAz53H!W|(׺ʷ094'G 5q^Ƥ3{M,7W3&7(mǭHDR?Ѹ4PZK5M<}+`f#WM: C;ǡ^> sr- tvk'd2Y ǔpp>Jj@z ˾9.+P"zNaXÀťU_Z\[K1{,%чje{<|S{NU{:VWfA|JR%%U2z96gy[ $NJwߙSPy&X&:QaCdhE~WkRs.FjOuk@ʌbT/2uU2LP8Fe eCC2C>?=^vq K?9$U5ƨ[Yvб!#WGp=,gkU_-aF$+Κ͠>K2)k(N[mP1 8,ө%;C]'_N };Ax3%|rS}iF(*뗁@I: Wٷ^ m\/kd ṫA 7qm8W:;ǘ%EF촂*)}4~c;Y793zaBI-4]4ex.E 7+xA}.*x'-EBn"Q-WLWN7iuݏKs-{鯿 r'$Tz)e݁XU6!:kʝy[Tʹ6QenoA+Aka#Tlph E 7 )ZI &fI 6IdN)|\pU|/eZ)/iy$,+#ŃDfO9bg"fzgS3c#z{ιndJrTD˹{{/p}Dz1QYWYN*a#&4pnΦAb,LgG}bF 9!U6}v\k6`.Y3vR|sɭ8#D gS@*jOQQF&/%̲[7E$m?D+&0{b:p=z:jZ};Z!O +L|A`dr܏Z0]`CqLb|hU l.or dLz,@fj $vd]4+#_s`z%%CUN0 sYYrPIb ?-1ܽyFMM}AxS x/&s{]ۄ*=C&褲EOQ:"s@)yd0]|?9ޙu+O`V8Cc09BMpuw3:}!A$*RPERv5)#9u0&>q$gL7<)|N)Tm%Z> SDoBZI=џ!!S8I7Y`$W݁Iĭu\KfyĴsmQ$;H $#&/ |)$ 39L޿z Y +dA` %0p~1|l>-:{~KoǍ.iӃ kiIn:K2[4y,@Nr{,ƒ2`ض!:qRˊH怒:4WكX dJXO<\pIDlGJy1J+Pwl2QU&C+0Fp!ʶȸ}mzTb:siWȗbbSG3҇w}0f6( 35KVq?S IwsQJsZ%P%.TQ"VgC{pӦcK~=sZ=~h8d[(A?sV@\j`z r޴w`ַY|*Hƌ/r÷qo?O9)ʇKJs(V ouA$Ǭ*^K63Ke|_%vl3 KKϽRᮍO!I=#ugr@ĀKy%)ܼO?udBxEPUi-1d-#_ma&#Z +UaCdcH֕[f,^P f0B$|wS)֫RsBSVw+s %-gEO!4Ň2tnLӂ١Yh;͝q|w0c| ӖxH^>ß3LKKIM#py_/&7TG`!ěXTFupP~DZrvӥgv%hN3i~'%IPEsOjgTuC,lL|( d <9m2ǔYwΝQe;z:osHF<~`veHȤ_kԸ,yd4=YZ븮UzgrV=4:Lu)(``|ms+, TKr^XW[;teklS5DN9+'xBܼѫ/eYW)Y?Ehd[ߖ'rZr-25bSx{"<5 KTU’r'h`Ac]wR19J,ӫlF}̺c_w2/5FOQZYי9/X9uf^\n)6mO)V \j B 0dPVMeq(>YWn?4|?)hHHtFy9Yk[]41L6 RBuEaru)eFPω'1;MV6"acjo {M-PkF=Z2^F+[&:ߪR_U[RvvHZF"cW?-jj5hH7ypRJd)7/y`ʭЫC4OJOI<)Sa`N+szm+E3c4l= #QmxN]SI fcee(#@eyysI[\IԍXMf&x薾v9s#ϗpM x=>1!w੨-"["ZǕj\/Z]]FvC{c]?W¦}q!TG$jymwEèol'nho=K }nHo?zEh$>zxsȖ:wHӈ?$cS)eR?Ny@;az;7Q!m G󬔸6[]lx dHW(dWvYws=2i#ֹ_)LT494D_A]ϩ},՗iꟉ%Ʉd(cׯi>@1L#T6=$ÔfuU?܉iV5wLqzVQ޸0QBz@a1!BgOBOR> XFXNbhcWnj'ѺFlY3'"}# !?Ow?Kʋ~YŇcYaF]@H'f\_y4a}Vlh$s\m=0Eҏ,ဒ3덞2܇*==ndz1r<Ω[D{s=$Cn4АZNc*S֓0iɑ0 !e-ذ{1yV(D`f]N<(y5kɼJᴪK$*pI'wM I¹tAJ0|< }T @Ok} Vys<.N2:/D\4щ+eB#ŵ^B*YvM$?>'-Sɟqk 5 5ת}VVV=)TO];j_}DPƦT];{zz0Fϵ G!Zu4;[0G޳~h0 j^ U 1Y`ySCgy!j z*+8p981<'6U8lB;!~>_=DADŀ!Vp0UND?B `S 3X !ڃVeT MXo8ӗ38~sՔ3 0gpc]0A@S=%aS|,=%69O0Sa"#4yضGPq6%tKz:^ 0JYW4j=Tw@=)Dd@1f2C#E'Y7ם[|k0}0i`E-\` *þgUYܓYM?#\w9F*\>øqnX*=QܿN[lYO N =ݺNa )?i,ǔJ91yV_8Ax LmZ!OHX-Pܽ^o*h7U_3taO+@ ;Qtۄ&%J7T n6\ܱ2@`)aIJvaI|8dYV>[(t)ѴH6x[Apnj6ڽ{5\}'}ƹHx[7o caڙR9B*aN^)XLXf-ysJoYCMIvnwי}n[J9a^8kbgX8|@b!GAQW_3a?aM0 ~>2ϫؒe%hי+ͭ pL?bޑ} æ}*t>}\:C$ίDޠcRr:& >ĕݙy0y I<8I*qO|ˌטq'I ϣ]`*tKYoM-yך{.XB}`b#{vz陷\1oCtLJ@9 %|O;3IS #ĆԙiZ`Y eP.HMt˓ EH6k~`V<uhX0)|~ؽRcm8iO;[y_@.~S܎v(~[:itT"8H6# RQ$ԗ(ƠM ėMN'#|Vޔ̱F؈`ܵ%"&#r#oiCs C,g"|f/c( [G%{Z()JN0/b]HwI0s#dɼQ8%+Nrq!xcoTV[=xM9CZXbc]-JN^ROD'\jy=4@3]?t43*RftHBFa e$2 %]gTRH)ņ̀Yi˄G`>jrBlռ`z*~ #.xaz Y򍝶 & QONb~3LQYFm|#ɓO "GSͦn S4wܾ1΍ކ3C6#8 uDg,js<&rwFHBKEHINPơ1H#[)HD} t*~R哪<͔Ew?dݔrʤ`q ~t<Tj]&K^:S Asea"8q`(dTc?lG^N*~퐭רKxH󹳶,qE2? ;<;Lp0}ط19ޒ .Kd/HR&d`ֻ95bftz%w9יjnʊ+0qW7mDNǢ.!.o3߻O'K|7JbP1gL&xƺ4dF7P)bxjU1lxsp<:}%VTQy<#HHP(9?xG qwν)=:WJ@]*W 2yחmjM?X7|HxOeŻI H1/ȥei#Vn=bADA!sgck}T +Yoܘ8E˛U_#RkҳlH[ٺ{mݱ=?|ˎͲV{+q89QoeE "2V*a = lrcmɸz8j`@ߑwω?DyU8[kb١ÒfL7O$%I2BkR$^IaSEd=y$6 6!6l%ߵ.gZΛn@hh %\&_;( ^J3Ϥ[5 21^s|b}dE!jfGV2 fx)cp:^L0*3Jr*ξZ+3`pV!-Q,DI"K`UBNUB6%iLzb#.*'d$g1DM佘qy8DE)295-SqOvM=N yї< e?zP9C[uG㖓pk&4q&nCKJ8e٭Qg*2J;de[q^ZXdr4.0LtZi?DC QMvZ܈ʦS~3lT;lfh$K3Z )fq(h3qʴ|pu*܇a ZȰph`dk7%by7N3ceLjVE]o^)!/Nnߝͫ udGC>G.Q=jnԻHgb <'8Ov BL<<1S1Y85v 807 Sg[]?(we,M9nr7-9at@YfB3 [@%-: y|:OM/.VF sƫfF8nҊRY/~#Uzׯ>g"fs_0T39 c@:N6 |ܗ6])c E@I30)Mf֍ ܘ=ZM7d.g^ K,%[qա*|ziOɮ&lM3xʭ )gBu UǼrz+9OZӷ 4|Q5o9\Rb7i{4c 'Chjl4͒fenHF8Eo? (<ݦ(OozVg&9\$9_~'.!+Ii0FkZ F'GMCMV鲵!4H\5VSרXBz]x嗘yvC}f}XˤaK MJ<cD)> u%ּ9ɺl.3$/ Q2YOVn%?CYX=#(YF5 OFj8íFʤLbHpm$s`⒘:K$ƽ+yt,#GP!3 'T jLQ;qG)DrrjU{TZR>WM;ӈ@c CTցtʀNhqhxS+H6erY,H[`sQ]=$;.H@vR0uq F$!i}/ 6b}[XT$ 38j]: Mvfې@.u|$f,5aAoe@h*o>2˲],ӾLKo$ޒ2@6DHlU8T~^'`nd@dqP@C):2tw=LkIWc;K;SkcF`5)dah>.q& ?7Ѽ,V*mtE}->'Yt~3 (~\ÛCi3lrTU,T䊚!{I2U8)3=^*ӯC ߩr](!oF&!1Jdq)iONMJ!h<[hWWYynM}׈}!>&Rλ4@NAΨuO7.(XTnʕ5 7*8 8\urJk +8i]y-1J0NoPdrּ3>qۖ_ X!qo`:uU?c~ld*oZ< )إ{>OVnlFY:CQH xZi:k?VT5]A5-$t2>u`-;zΞ$o%U\V}'JBv'KBtIO=;~#*!I`> e|߱yWv-M9aNעÜGe6J>K;Ctn[ gECFEUΓp)p8UM }:ܝ$U|H~uNYf0/#m|_;q>ѐXwgYS̲B/|.~'R_'V9a18F䞊jYIJ/`m/.q%fjJÊH̿z 8L2#֘d׸LFtb`Zr*8[$)SV5/Sη~%ie*yM_Hc}d6Lo’oEbϒ=;w&=ڙ!~^oH;M nd=%qc`|ljf =i|:(Z"PZƠ{}IBBj@e_]36ꪊ++tW~ڲN uUέKKZ H\}1LErY-8+ّω!zpx#|rqrJ[x GzR hB},鈅1 ^ COiCy)>#A)SI hߵL/7< {Rg;bKT,v \-\ Zni wƮ`T|++;M_N/ͽP6rKc[Wx@l)v;[J-{;9s(]e1[1ljj /Ƨb01ԫI}@br[S@)l(i-/]ͥb[gW(ZUbɥ .qְ @1}C-Ц!<؅^Y_l՗` &.p=5 D_C]ĻKS lpH q4}:L~n8xHE/ƽiQEA.NB[9\p etxCc9tV޺8M{Z;S{Ѩ\3G+uGI/v䓃k!|;ò8`0A[[YBl`ₖ l,6u ;EA r(-(ó?ity| (YЮ7n l,$\jWn .ݨ}R.ԇiDC$}Esl,2% F[޿iwdHjn1H ;q))u?'t)NRƦ *Y Sh"v(1s-K;OZD6}p->!z,6?WakSbS>~OLوvG0& \@]`rz vCmm l܋A=( 6rR8CB9*^-^I\4AG #+DK8KB ux9F^'NT`mUyCB6(a9`D({?+[uN:L.W籚EZֶJ]eF$DZqe2;L {sguMPcCh|ЯPbEz7nmmEnq]@m/ᆍo|Jp"Ow@@ | b]`|ٽS ԝɣYm֭8>s=VhME93޾ߟхͫ/o.dm)EL<jb( t{"WUINWciULCJȆƠeS7A@`h&Ba\ydmXEgF>Mo04zzl"`n3 K:۬  Go6 #ƶD7e 6: sYHH%7wf=zީ^PpDFf4#sNZ nx,B(W nr̬-4=ux0u>օR+9 Yڵ4%)4CAXS@qb@JW[ぎfxifLC΃:X!!I{tP(B@bFˉ@O6)붭 =5~0xI؇ܽgOUfԢl;]`YMUN-~4B߿l&Cm X`l0ݡ Pkn{Z06aIϦNstT\)lgV,f /ǀM7A݂j!8*Fa2oO˥KkgmaKF8mLi/m" E>.+2hƢEЄRX[lv{o^zo|PE,Ux4 ajե$`rSgKc{{1\Nj3I݌6ƕ;e0ey@cBq뭲@& OF)Q. qLxO!/6NlX8a7^S\SC-@Tw@ hOVc>N$a:.3عjo+WҿbgAWqd3q1Q%/N ;Ys;h)}8 e \ 4Z Th6nt /MVn*헇B!atQ -<^bSʪM/7$[+r4D=Hf;%(/!;_`P&%B!`&8'k_K\2$+߇!jKJ'Vu ac;.ϚR /m>M=ݩmySMCD0K[:׭v`uk<+fL0I` #^w>YpQ_mBX )Dۄ CM+}.`w{O,!g@Wy~m4b.ފ*n7ƚZ)m {!1Hkg]UVԦ;?Ŵ )!ի(s6KujZ/`71O$-c#!0onR50_%&F`JGm&!h{7ds XlJy`hة+8Ae-hFZ]\n4* Vm8Bػorԉl -Z+ryoGc'"^1 cbw"#$iAءTp̞M Y=69qc퓒Œ(It)!9 <6eFG3ojgx @{h(N\sl#Y?.Oh-@#=7ʦRҔQ?^]on\ B,i(4pq&Y~jy'΀p!{B|WEqj4Fr`%^n=)Lܮ!z'!gu+(vlmc%Wˁ#(aofM<-¡S*Rurv|: *Cl{KG",4t6s}hq)_C]:#TN4)Lij$2&GlP Sbr;pr_}NXd7%̰p!w6#lQsQ,1k!X\w'"-RI`Y`O:H2C)YTuۭ:J]@P)W*6[x0^l,ݞN cJ;&o>}څU`ƖB PsQ[AdHXQXE=Gb]һyf9ܕq|ЁoRF`%hiSo2B[n_Ϯ&VД߶x%4@|S1Nt={{r6ha? Rpߟ>=Fe4bY%P[@4 (lh|򈂸.z57ݣb@]3)?QcYj+Z(=ҕ­%''lukVAp2^.6ě&1^iM曷K  q۷]w s;I<7M)2a֯%8޵I`a`t7*D?em2YFQrc yTHCsJcƄԾKb_ I[n\9b-$6X[najrg` 9P΅IjH di?,[ǔ6.0z%:Z[44{J_oE2?a8I=BY!W0SzL{!9 @nv,:&u(~|//}"Lo׎L=M~8@!hl_.Ly$68dY̙σDhNSvs|@vl[``(abs34/k8Scaf铄9o: U(Xcf·OPr0[?b\ytd!R<!< 1C&?u=IKH=:σΙXN|I)]pMϗں|\D˝)]]{ kժx7Sl/1#ݤK>mB'hv>5jN;cg v<_7fp w4(57Jߩ]K{b}Y 5k9(#A-MC7(ɣt3`ڤL̴"𼡏U傠DB!=%ac*x_^/4;&yX )yAZp흅 HM|a?nLT#^NnFT!طOeBZ^}5i*Nr㘬-i2WNߌcn!N, tZ1)/Y3m>l(Vlc.P| m]tLq )oU% &M;(H'CТUF?e5xK]sGb =)ƄrU0~ /tCo̝;DNDEA! FVbYΚ#5 ^DYB+n, e@im|2HKc <.i pgEJ$ [-[ s'wFK o @;[Q0Ӧ`;!7}Μ]y)s-+J[ndTr9f_< >4 Hk¾]R7i֞b!H]]%:eʮlAc^p)[W [ ^^#cQx4b?f͒?e`fȊr+eK|q#`@p hZ>(CBZKઆ?)Bۇ '^!0=F#5U@/y^|SaDA=eГĶ#l)&h:O9<.xjg܉گLjF̠c:?^IUF Cf?πd+t-xg0*(Pp]QU*tq1D{-MlD;e*`,Z@N |rzY7+үX9-X bⰀNf&nc-]+]lu_q* ݥU`cPX8.iSpiCA ZolGxt)p !7ݗ0s.S>%qFb%1Xqv^ɠiDto%7Z[o}I]z;Wm/)r߯Z4P2bFL" cIl2} w>vG@fw yY&q ,Z oL.ZԐp![Xݶ۰Lq 7$556K.x&l 2r xVjüfx0}:<=s&cxrd Sٳṝs+g7s \wp [! nhڄt}K/;@?^/8x)'*~w=0 Qƽ/䡖~9m _F8Rv@8|z c7'Ik}cA6pe% Py(uMK*u` b@!J2e]B`v<#xt҂tB7ȿ z@h2|56mrs<Ԅ>7SְdL P[1i7CBQ!FxHa.[_/#X!:Z#wމl x( O5^z{IoADy~'^t k8ڊY6C? ^!=ڋA2}o I_}oN+":e8N^پVn_ln=DF:'v,ӟzUnذ.Gr4b 6$o!n$7n<|]9x[x<h8VKkk8{Қ?4Kusvkg3'jMuq^5ԓO*94qc<&~AILʬ5sL5|VEWM=%F鶙0s&{WkbPn<$ Nl:.jy|C%?~SA0"m sX̷E_tgj{[ ~ L)Ğ<\xho8џ???7ptJWUF+ãGƢѡ`Sl64/YM<±D+c~*ыo+âцP;ͪx<8:\icGi?9l8#WCh ㈿x٠)+xH4{K,^js-XUGE4;:&`,$* `1FU3I (RBCKcz`5z) 3DtCb MxР㈱.aA$Dͅ{Ո4`$, )ڷNs2N߂c ]M?,1 82bʌPvl`͊ `%êij p0!,x@? :SW&%=" {cYWT:I&*L&5DZr.Ӣ=ݮ DxPDk5> nA7ư)tO%zR 9?!H/Dd[ ex4p^b= b"<](A b7>sG_L&Ff/<f8CrH sC8dĘtё\Ѐ8 PާM  i-39A(Zl_4TZGe:A p "P H)yuWiwF2S;MXVyurVҌkΙ%Nt*>"N ~Ul,$&6!?C@< D,11̳n;%w&iP̏6tbtP FA^`KѱD@=r "%'@T%I`~.fR5k@L hޱNMj7`o44q &m+(SAtt܎7?L?%+Obb Lfvu>c!w:1Ze$:}à쎎n0&U'Of $.iJTC|ְO5џ?kD|O0cxhxG̘'8O.AJ ~WY.^ՈţQ,b5RєƱNmxwhip<.4te$V&KʘrzID`>4TjVಳuZ :Qe{X&⯚NI ^d/BΤqHuJOo [WԘ䂕V &mBuZI2I oq 1q7^Ќ 2^+9%9cgV-?knzΆx:h"5xz.}D '˪u{K39K˗=FKZ/#'˻:ƶ4筈?Ll~b4>xD#12{2Ʊ;QLo1?M`/CpP5؎?TS 듏3$DH>Un`8* 2-48IJ%¬7 oįTaC''S~ ACLED-^c<)dž?<ΆVfWH!4r-΀[5_CP$r,P/գ=<+bC6d,~/WV6ǔ9XQ})":"XR"5Y¤*h.WJH* S07ոZ3^ѩqÇ%z15 ߨ0<r4a_$Blw]2(Wnh )CZR8|LQK\ 0)^enP=s!&n܄6/~DpAz՘ 5y3L~!k=(=<7Hl?;qER]T&KYyD)C*8ǜǢֵ\ ;f}$]gңumT>f|uvkԺ*犴x FOEŴ?Pq/ !5;˺??dN٧U8s\M8n/#cK i Bu=@k\۴C`f_(uy2@[`@G닆:9q]\ng_HܶJs˞D$y w|ޮHL˒){A i " {jl\ֲYJv oW<fxbsbo}¢#u?B`!+-c2vmhW%)Oub BɅk U3c Մ;B#e̼P vF?MkHJyttuV)/Le2MJ4[$ ]k&SBR, ZwFv;KOɶ@sR]o̠)>63B)7ytmq4.7N$+8֓rKeՐ*$VbLc 4JO)L,XH+CpǓ_#,^B<^uj.<gxQ Jʯ-~qS;dԾ$$60ܤ0d?PN1Y-@0A-؈<'oV|&0[**˖23^EceWbm$`Ob h\.@ktIFkj%$Hh.'3~Ỷ{x,u +y8/Zܢp5$G`IrP<}ѿ G%>C3Ĭs$~˺f^g#IayA<2 Cܐr1X@Ƹv|հ!=W l?9kfȈ{!i%C az=[u v9FB.;E6G fͯdDaAbw?m;M\"3z5T'&ݗ̨9󦲌jwi $6PƠRAj]]dRFVK̭\wXfRB 7^^t@{ K dwg}$N8"V':+@`6jܪ?8V3=Pۢ/۴ 24؏b>5hIoP H6rr sv SV &:bdž.-Hg';fWqvJcPI݄uྦྷc52H8${,Fϝ(H}Ŷ$ә) Gc|o#~ټmKۚXX=:1Uf'ta pdB22ա>7Y c$ }`q R;MmoXxIInLhbP{d)laQ%BӀ'II  T/,8lUOU-ub.;t@NXosuBcWH t| oUu}p}s3_3 &=ʺ?9'fm@ص 76Q>b}!?rq P}ބ X}Lc|å jh#eVjo b) + l s"n62:^~Lc4 )"۬OnO S[`})E*@~ew!A`aIxϺ6޿9rO#4&L@5~VDc%ebrL:yA:,v'k.K (uTَtлe_qe2aMF,XəWV\ehOFzX{֫j[)ݵTLbsG?`=nq˜ķFPBlL'ng)?e&\(Z-Kz+It,ZM+&k ֓ x1X'fZ:9ɼZW=&dJ*[_My86Տh0ƌl-mmgFfH)Lƽ-u}og5~RQsBjiP#ڜVޅߎ7#1NR/kKK{:߲Xv|ǨXTPb\0rQ}+h[atka(ߐ8@Z6Jʛ@WON,/e,q_5m(6ȭbn*Y'Nu0`݁uJ3ULӐIS_.10)=ybZzGt8)}V>X |;j9!hBTުА6'+U;H0{  #l{SuaeG&`???A`t.:xtLbߵɉFegZbog>Et-k.rn\N*9h5rnWi~\hUg͑joМ:WTiEw8C5 l)~! F1 XQ*(uGVBAH~7S-h)ɇ*ź\z߆_O[t-!㟶YaAfFLVZM)S (Һqbv)C.Y%ߵjKj%,-gZu`HK.W54.F[ER\| ;m#pښ>QIS mJ{#jVݯnPE/W"J..x(Ga<$jD(XG#+[7m95r}qG߶'VHvlq/ˤA6ŦhML8>p7L=MSfWrq ٚ?zI% PnonK޺uJɁ[~^3 {<=d_!J~Bl9 JJ>|B#'~] lHJj?/9{ej`k8m'1~ʩL*sNj,)/^oTΛ2gFD"D 1^M`㲿.qR7()GE5'Hm mkֲ)}B0uK(E!g |Xa(z%.(5UzK]/,w?K[/T#tV{u·8;ݫxvO Vzƪ1[R?Vi@M}[}387f+Sg0+ Cx_w*W;js|ﰝM'ȉ~>= O9(O2#Z>{7}qo{Ыp* '^ P!+o`&]L<4HE#m*,&eU>x兿PB~U$v&"G ( r,w\adk ӄgPޥ鋩HNF {Ȧ0h,p8N;1QxkO{澈\2PmmGJO*ގ/TRAb/YgŦyFp\Luvo#~# AF~PUUxÁH{u#ǖsٞD m]-W;록yY΍WrT*mYu8×TQbuYAHY C0҃GA=G}-={Ч?{O^=%2vvG{mV1tʇeo'#ypo{oʹa/eX8r}+&>UGՠI\=u;E['}6==6>_ |&"2LWshrbŋ񥻅nU8coXPDZ͇ E| )`?]Zib7㧶#"z JD UqQ+B8AQZzk`O/##`1KpcԎ|w?ˉ%It_%89yZ 4$s[W󖼺hrEau01-+`VQ'1F8t=/hnX@Py[KeMKM_"f,=oaoIAD,e-|ZN3%rroF9 4s8s WC =ﶺa~ !A;ېŚ pp6^<$.m.'2_23JbUZ9r5q̬(.IA`BhZ'ÃЭJLx-kq'2N-aa|_."ʝPoOqG5:cY^FBrg9j81l|Hv::B?s gG&& #Zvp2,F{Y#[["#U]yjy4mH&l{.ąZEG-M4J=sI2:ĘϣD1Km,zZiV#B-e ^czp(?{i7s"ژhTfjQ j5;Lbج|"&K4\rYv08}?@w vbKr33߮ T)ɋ[I{:Ծ3Nqv1DLYbe|Ʌ+-ȃx7ii ^cCȸeCyb{aL:%uBT@oQ[*khvO|!fgp`d(aN˔o$C+~ۋ[%u6uBhiHcP%>8RZu*Z[*qŨN>Z_EC|ꭋmwۼiIA;U,d٘ݾi,>q´ӄ$q1F{sUob0aln6 X@pBmQ{Da}9vEz3/4Q't:BCd$& ,S TEx̲D w/!ڦ8bC^Rn΂ 3eя$Bc7{+%'QJx달(j 'كZ1v6m6:e||GG2^cKZ!C1Jğ|f%z)I&ƅS]ksܫ0G+t ^'rJ 90<?0YVdCgd~p6gڷ3%sVꈂMf]M}$5;i6vKumh5!S8eRgNX˓AFQ<=sa-VŸeqV_ԜiHl cPk V61hA$`ZO!C2 LP tXJi[sK8hK;8DUDԁ, RkaF:%pIڅIbGqQS ,2AF:؝!!tXI/DА;Ž lmrDSwbno)ƯQ]JUI`e!#{yOVjnp%ǬW.}H+9:J)k-PnͱJ8Gx@KDRK=,%+^ .6WR/?![U&4}](xE0 yL͢l*[!~/gjs7m>E22stpJA;v*zz{Yۂ}a4(թs #:YƁ 2!޷!H8x`2?`KOï,Ǫrd཯rLxw_{ڢHvL R Rq_$qth--O%&jɷemci \9l9`%k+VeIiAYAKYQUD S^c-O"VI/`ZQ@#ijau3L9笯-, 9n 4w0%dYxHNB͡m,Va@?5)^+ef;8[\mP>Chp\# C䞕]DO8^E7z瀊Ac.D>;A3!\M+zQ^D2F7A|Xs")@*b(6<&y0(S˙; T_-Nm>YsBZS􅚘*3WmB+S>*VWf C0JEa.CsMz3J ܶ@QCm=Y$Hj͋<^׹a)=CH;ٚMF?U1g!<=!黏lYhۯ58{U2YGeYinS6@RZ~5TВUbAx 0BЙ\?&W%/ J !6P VIWXw9DE r0Y}X_s2å4p=|+W06o:%4ULT6-Uʖ3 q{yKYҪһeÃ˂+$Ժ$zi3y$Fy Ƈ]u3!a(S0zNfVL/ef| SZѮ8"dlwCݱϹaKRb4-Namr2i#@2o*|)rIF,bIKnYU Vd_,CeD<6[Qlýn.ė )bQ,wXƷ mbG>O?i ;$ hrNSt@j)RUn7Do 'R@'28ʞPG%IGhM7+m 5eXZBòACz-5z*>;hqv8ݭ-<]㣷Wz,srҞ*IF+HwBTVp}:>?HZ2CU &bhyxY=11UJ<"w0ejG9jF\@w!* D~,Cz{ןqE8E6 uL1Nשx\:Iéb$1.PG5v}L񬙏3ʷS+! 3IoB!qP-B+`]X1dS؞S*c7 O&K$GOTU OTX}I8^ڲϭLWp8ӿ[PwU)k9Rms|/crOn&|&Lh45auhܧӷ"{h~%`;iIɻ)@naTk[O5*ĂXͫT|`7<wqƀjҾբZ~Wuxؾ1+:o:fof+4L&>QfISߥܔ龀T|S ΈeN%e'Rwjw)Qcg8!`C>jIOTm)7)eZ 647/*&`:4kK;msTssvj'&~3KuOC|g΋K]zJwXFk>vESi[d"[$ lѭt@//C(+^sJ{C[8@0 l.3(i me:Uݩ8bUv㌊]tKީ#z4SەnHM6MHPG y\"v@^63~A'&lpX$f-%\R>GFAA> Ŗ=;` /rM>i1uvK5G\ϮkW 16NLtX]I_S1{gᐨ_3X/UN*Fa0 ANMXD1yoi9!ncd*a.^w9` Jeɟ"J$.]mlIl@ '[J+pR"n_}GBԽ8N8oS%<;h+Z9̼\x-*fCT>` JA.*$"8P= ]֤nXj Ў ieNR})f7 Jp]ڥVsAi!~ʲ-Z_t[x(g3T@ 51IcI9 Ӓ3峯 "C!y,$XW@L}v7S#UQh;+AXJ1m}ht;C83P?Yz`d|_ZV$9A}|7溙8+V=Hh__ <+ :BRl%X!(H2ٵܧ4JBGǫ6}%L4Xs#ٲ8E jv?3Q04J*&Ol3Z^woZ$E={=?笛\ !kH0uޙnj4ҙZb`s9¹-vQu$F u2PۜW '|M +Ӟ6;`*T4ql3Ch Uҭph<,{xҀ3 ֍\s{¤ 1([1u7'S1V\lYlcK<|텃1밚WW3%;Lb 3ᔫԐTV11NxRb 2zjEc+aNʏ5/33sT{#bt`ٽcJs,3p(6(?# aǦje_Idl+۬TΣ<_P݈wo}PFJ>vj;i=\囍E ?'MY-[RݐadH*M;?.)U!9o|;r7;2ߴ34 M۞4Z7Ÿ?Y)8 Y?QBBAIdz$|{>(EaTiEK_x 崨0ub`\+pJK^)J*7}H&3%7Hv@26qPVaDn@z|Exy@xYRB(+x4>R H} }gWsmE0F|qtŌ58{  2LQ(A :P V\4 Z͉8P80ʁNfrmE4sD1P,:@ǺOBR5i6r`'+" ~_-[ U6γ)`H"x [(Lʨt~|&XT4z,;3VǡD2FGBO.\l`[ijqAH:\Fu\q]ڰh߃+0SDRyzlut֕&jq+ 2%B;CBg*?9J v~M3loU#!\R@=Dg* k@2ԶW,-(cby]P-&K!+9Fw0v %Ȗ6s`S8\Ak덹1nv;BJqJݙNRS9_*GwScP7P@TP<A{!yoX)թlPH;QfmRWflRQkC;*L_dF̟v]6*ωUxbp@;n|BJZ8gUcc*Ŕ5Nm6hQE[0YsJd}R'#Bs̐64RKŐᷬ]-mDPkOR{"۾2@"kNMa{{織m`BeZYj@MJP*eH/їn8jiaVW%;$=̖\gxK-/B4[mJ(\A|Z(F'cVd,FݚBVlZ%( SVT ;xLM/(2Vvx7fB50g,AJ+}W[/>w@-'Ǩyޓ˥Fz`׬7SfsU'dsn(Wvΰ`%s(OG}9,]kl3qT+:XvӦiz%kO]%qF=S _JҠ.:Э&ɏ2xm%m15/t:ySpj8-v_~kxC+ Y /N ! u{^SEKMA9/.6փ9cʦSZ`>qj0 ( ~;tpmw"fcتq:tx k< EbҳQMC@@$L)嗹bhk:ܚ5CȚB9`IFoR,",!;;p[m 9%,S][v>]a/oLp4un{)~ncbyʋ)`kLL@QP)[Ua%Ů^#̱JUbC) (:ORml1bn[YV0ϭ2ϙʺHqj,UKWD|.Lddg`  БcW~LcAD9ox"4kn7ILLĪv2r_Rc2 4"rDG ߭ (VufzP mrqq豄!3h91߰69f T5N {αL`b,,N(K0ifJX-keGTxM1L/S_?B1*7wbÎ|ɹkcawXE?QCX. ME\ȉ6eͮbPunvE ʉW^ j^Bmn.wˌeC9T̉W8"9F5JD]{n^+cO9H@rbp$'Z#Ə??0yܔoh7\oY4+KQCX_yڞ@/IͰtM msS y Mv47nml*ўm̮KS:׹N&@eP*G\,l~zTIՄ['\nܑˍ$YBʵy 'O%jl(얀nvmymUdbɵݵQw&urӏ*QۦF XE2A^*7ÌI77盛bzfK2^N}}l5HiW#;7+n7}YPPr۶JK(x$=$sXdwY}„ջQ5&NR3bh|A췣 6+V/v7G[qT,bqhC rA݅]0MFI5 R6-ޖoU%mHDFޛ rIlUKWvGQo{$9 &DM{n^CX_Z.w)Ujw5y(vH%q].@ prJ*@SQRf;DͳA2سkjڪTDG+mzrbk^w{^T7bɬ)uP< %#$oDH ٴQr Jeڭ; S &A*W$.X|.z$Uˉa#B`sHu'ĴYBM46r;6A#|HxN2*";!UnE)ZiJi+-t hJ̵r+U |$bfoJ{ȇ @%%c沧h{m}f{$iXS@<zi/.ae%2 *l\4QR!#c{%D` 2v޳m+ >**(JZ,@Tn#R 76kܤw| &U)HRe^E[Or.fNqrSq>H[)KQ)C $&A2bH\Ar*Rc~r9_oRzm;P YEFHa)AB\-KfZmK<m(YTŒ8P Ѻtv=GԐ,DAWv,,2f!:%Z!+jVٞHSkK0#@yDROn" 㝁Qm[A K[ \m*E6>E:kמNx*A.u3'F`W'/=༘5+E%AJTrcpyܸRIZωܣ:l2tЖyS z9_tXt)eHG{?3 vwܐ_fܲTdKRVU+qvF*t $=ſ* F$F:RmC2?|xeC6. ڙP%oz /(qw*X‰g_.6lcHPE0-%wi6xeh;\,zܼVc_gI:e ֔ybWԣΫҀ5UpiIoct} \x_Rw}R̘g?Om1Fv6|kΑriǩ'vQ,{bZvl@` C&$/"&XLB71(!FG'M->V ͉HzDJb4J1 q21 Nx a:0yQ -XCQ[ bɲuOiJXn}J{T@oz)lWJr.Tl*[|kQEW5j~j^Lq.UvDz7i]Ҩ,of\@?" b|[.`6j.JJ bu(X~,KN/A.ˋuc+lH(TI& mW[ JfKllX`S~QN<$94 m7E^7 `]._nPwH1>Y\: 2\(bcJEhK}·6fm(8}|4X2>/ZbhB}w[?^iGIyܳG$'ޥƍrd"Jmo[ :2C ,k:!K=%u@h>ŲB54I4ұڪcre( {?'uX$U*A$ Blx~`غ{MnG┑$o`c4#j@0he1@Ac}csme^VCr,8R古%\.xhCzRɰf2 YZ}C֑ZX-YMBe}>ush85 6K@^};&)!'KMpJn.[l*"'$ePێ=r2UT 4)lIN`0Q o,'eJRfcH~X@Om&=5"tQz܁@JiPnӜd=v.Ѷ70i 1y|S}Jd|"a=py`wȽpہ:RSOeuAɮ\Ůnq㡃m-'&LPgdh&1~zDxי{s/+׍2e=$ &u띌B2媠f1bz&PGLhi- ,+=b)*(1sLI-_J1X=8U?0Q i&ư V zRG;J1QSPRb${ 7V9gn8rI W%Ǝ]߸@iRoFzD!AY]ރAm`y$'pȈNHڙFrP*\FH% Dk:7fY3~$ (=y1s&̦2i7$\+wSO+ш[Fos榿Ru1n~M 1<"%wu( -_1q1I?3+_s@ךGRD3,2\0wZ3D_S_T~DfOJ6[R4 RFP$`"U|O`4&Oɚ0 tƌ W QKV]7wJ{RhHGrm~+ 6󉨺x )cN5TQX!CO,RFibBI r]EHI!\aOR@PPT%"p=^-R)dmnc(Q=UqZ KiPsu9w'5@QKJxԹPn\q4Gݠ\ {ؼ&mK-sAM{TRIܵsg.lӤw$ux!C~ipV)Ā(ȼم0XjyvH+ ^X~P%,ԫæW;g26(c^/%atmtJA]B>7V9%c$xc)M%M2}fl:&i PҶhBP֖u/ 6.+_ܤ6 KZ.y&QTO̩6 +d0MdN~EމҜxp Y3^GlĴNub㘬y{Kqܣvey0UG)|z7q5TS5k6GOZ.$,7ڝW&DV,O|c=m^ɫo@gSIBE,}BlBIn,NGIckV7pV."[E]4 J5dCHfWœ@P韀g^۲4J0yꀁ;( . Tk{#C?_Qӕ#yZ `N459rmIA,Pfv5~DWE꘡7Q qS1{B67o+ GAr9ƀ\ xǎӿ9hToGϮޜjIJՙTyJ$){]K%bÛ!(wZN7lvLAic#vo%/YP:wt\=i6VV90V:VޚtHaUSVD՞mfO %omC?YLw߮'VMgyBk9s=oB5Oo@`*(%Le9ٝEȩ@TPf^,Y?V+|Y\WI~3WQ-U-#-\Nzے/~ ~I  vK4X1tC$M"T* e(#?oRl^a9nJHY[.ɧ2j u={Tk8QUQ"2uю14Q\.aRH.9s NP [P҆XEìͽn-\vtVȋI <8l;v Y$ȑ[T=Y3fL*S׍ 1LM\, ߿mW7Qgƌ-] Z 1KY|Z%?~Kh_Yc؛͜,Ay (~†|mz[%77@E:-1rzŦ=\x<{Mypb螬߷/t͓,=:!.TOwY~Oq:X9. o %:FO:hn( dԱ/pypexW%%"]GB!{ʧz`.|+0/>#R՞B*b+luG*bIW"Xg  :p6 M࢞\Nls2®РЃ}VN|7~Wp{1R;7%Ч8 J=QA]xvɇJ+mM0ce`Zv]|ZA^ՒuӯK}j'Z=ZdH%ٔHxs3jf }[JT~6:4[xVW=ݭIĥ_Eĥ24d׳'9e;!'ZVpVklI/E1ZBP}HaJK Bnmgt 2RAg5dg*OVS@I9$_Eί\]T?@p5o ]@*# '0.?J*p)Ȓt ŶKR' Zxynsn?DƓ~'%P/ qhɂ7 }@'Ą-#`.k~в^Wze ]'T? ֝4VS,q--r39~-ּ:3  "nL ,^n5. 5x&*>kɲ4&9s2b;Qhm<ݔYԮ9eմa˼#6='ͽ Ȣ\ TjWf!{wF𮹲Hbe(5렠J"~&NwEw#RMqc[FAy~1@ %Fv EMy/4Ԡ>!rTYV"_eYT I/N nH-|OuRZ fjWПfILN%mc*u& Y V[UE/*,Tج 4a7ktHLp1m'J3+x)P+_*E5Tp/84z ST'bBIXVmp+YtMw2{?6(C-a?QѓD vhPΎy"i/ dzuhnp2.OuiA665`"} ip&3f7251t?zL\=L*Oo8;+-.qMgL쉂N~Ct$GijxOCXJI&ȉ?8Zm4@Y\s|U5=*IM>:4ퟺ/&yyC/.QԸm=ZL+\S@L0k#K3\ΚfsZ}[@ľ$I+,Sr*ϡ-'0SLgʡ(zhW;ϴxN$'IY)<Œb .g9vJg9 $tmoso *mpUbXu%>Jg'|/SP2v1kBn!-;.k@+Y9(||99r۝"Pږ-oXoOt13!xG@KCk YGqƎ4mi#Yy攓Jxˏ H+6_} <\Ʒe S{G!z@?E;'r%-Y6`B :1jAvCmv? Q˯(Ws)zGڤ"Q[M]6yv#.I"*+%^O2?uB,1@԰NKgϑ 3O|;qIe`=1^I@ɢ[N -WSZo219߯iv5UAϫ6{uTԮX42vm thH!:ҿWOx bZ.scʱ< {(c G{z TAS5-|r]vvpaWS_C}Xq?bNQh@{[8#,SFk~Fz˲af7NZ-{VT{wkd<8IC*k|+8,PD_1Q,| N(VshZ -}WcMOylI}SbgsrI- 1P<K=T`馑sD< g=QW0%Wb2.?ݼ)r j ͸  6mT\2H~q*L xzm&U:#~NbX=kr]f|5)2G餵r!l*uWkn:A[:- mNa%]lKcRټa8 DVO<w3z"' ,n ,I#^v`a,95nj dta?Ee6uYo ˖LbMђ Sc΅)TcS<,y,;qɌviA:"s8eBONDi'H*V (qvA):ë㙨D0AY;NW*y녠Vꍪ4N\^5nB}":/:DVrM)Ԕ!~O5]&YFgq].$]=TH&m߅RE^̫Ucn o*) 0Dk!l- L6UI͎NO}wgX@Hh{9ϏfAqw^vFRv_TRe85&4>2t2E=WcwOtQ|w{-2bC 6%3#ʸ+I'CuMWr,:4hN@3{ZB [lԳI&zM{5KHkv*`c5=?oW~`vMZ۴}2X6W17^S$U^85$v*iJ(.[W>*>>w:415~܏-V<SJc{sbq>#Y#P|tP ATBK8iF+}NԷC}*z7P"[x#)DwZaƀbQ,$(Bw] U87hȶp29"U7Y||CG¹nPP ߊ> L@\vY{h|㗗aך]EV)2eWr&]tPuI(f~&(PO@(7&Ռf9<(`UVkWӄ_UVr EQjV?SL1E2l==>˸b,N%FcA5}{e?#jϣK$%Mqoɘw݂7O10dLHr ^JtHy`͝u@V;x˼2fik<ħ Tuuhݩ!ҮS^&Tl81*]S![Wslm} * gwD| b8`kA\52bڊ2!Q㘋d/ʪں늨%+2< up”K+αj.88+"w+V*w<LuKL98aRATcÞ_tR -RlW[NsCE[ vz)eWC")5jO-V'F::\qE}U$>%# Kh kvRץm gr-_Wet7wX<8 gsXwzp"H!wWO] o04ZV"KPP/ !J%_@*ߏjN{{5L%zE~tc]B)˒RGA1%ف~UHF}̯TuS^Dƹ0"/2#h!N'i)MCL(.XUKVVȹK;alss|+~[)5LjE05'`Om_$%+ R#s&*En)-v!r1UG1Q5Q+ݽ>u02"tW9_FM;QgqbD2I:D)G2U@=p_4 v^FZ=5>G;k;&*&rmsY/_FO86NVO#9ӊ`Mmw)aS&T7wS+L*N"KJ9!O+H.p?AWY,R%̝YWy/&>/jfn S4%/w+r+UX,5nRJ(SmCj}4 8}R%qpE8캰j^=湫(-cE2M+'Ҹe ?ci7g-PTCryp {TlWMY# 'QnbЪx9`͇V?sAs/r¿ =+&Db/`;ȉ1 c㓶owwtڅ?1}t|!Ph],>o'[$sXSyY;ɌN]7pIyb@BGkJ@DY.$$=(bF:9qszBښ^g%$żE9c$'I6em:oxf-4ͰD#sTA8B|w*(j%ީ Tټ,v! 8TCD!˩9/.J?B ^>Kj% }ԒvWqF?TCV| 1Q]/(tat<^dkf-^kq0U: M#6B%qQ̭R06VUXi׊'Q9%ooZg3MǺ];,}'|^%쩫~aASŸT6#WCVVopl|ڦm h:NJH(Z+6R v[ pZ JmcT`fL}4-c!865N?NT&SYJ܌Jb1èEp8bi' 0_ FzpDv%B- @z!fUEupKܐStK9zmTb(p.sр$C"7wACon}4({X=  r;-0TsV.FQ#O$lı]bu8\nNFE'Y]bcl(#0BQ/ +C`opgA> IOu}.*FˎiǢUy}t=+K[Ґj1{L^^ѢM:KO;aU)p&LR4 (8t \֌ _Qg%bru.0ӮYM>cJv7oLWXUocVgj- XŁg:">s9CTܯsOף:k% ** ^4_: @(XfkTئFؿt/Plmohå!>>D[Ʊz݂.u|νvRU0>!V%У\h*m jd?IOl0b5|%-Y_M^Аv jp]:y:{G& 禆LA];hoioEZ%3ߝqsĬR&#!}_ ]|U[8{k7D*%) T>@'Zi85:3ý5W]dǐ;Og3ɖAWne}t83nyUM$UKݫWNxAVY`GܬKb>Tc-:Ǩ]E/sz Ο>H@-({O #jvDKޕPקgǑp\~H#3}ݮ^_Ko_[Q72cx#pMsP,<PI0$.Vuji7B.J]3j"U ѮJ&d:񥀞ѭ6H:dS#,-z,k%WY >b_c^j>q5l"لE<d9kP;q0xVEu-6,=`W9!v1kO\Vyye{$UJCB)oџiɟUǻh?^h\˾˔1&BBʹdCP㮉/y_I*zTJ߱&rrJKjo_14*mIUÉ7ClnA[~܀ޅTԡHwam-9CHl{iH L;.eI էKe4KPo=pzoSǪ};{S4smn>I%xs ꩆR(fHiyWUOഃ#jm3%[-ZFY>K21TQ8nei(5s#gGҿ*gF"-OTPKw(ʒo҇d5+:mk|)xU/Iz{,d IK\ Fi(xf647@G֬ץDsbw>U)fwq ks:n<3^Q]<̕0 qaCMNtҍ|&Nդtx5`/|%9ϫ%Q[2Y&zXx'TO1$ oW¡48N1pE9K1(cr Afxd!_2rRp#坯qi(TkrO{X꒘~H+h|bdq%80Dt"a!Ձ@QHȦbVttE%z+iq| [w"eʳdtY,a:"d[?Qeeyq[րL#V*>Ty Hi«ဤ,kAuQEYxWY>Ȯ~LLi{Fz:[sE{Pg7;ew{_pgv\\؅Tw=x}/v}5S5>fnX߁ !Nb˦Zvp\D"ФPp71yyvMV90.8C%=0W]e/}m.9.nW1}A+&!sJwtveѤRN\ޭ-{Sn,D[s z!>bù0 b'3aɱr-Q,2Kd/>*O`w{`4 671gQLrV=VJe\&Pv[ҿFQ2@:$-Y2%6?H֬5@o-G?' 2IСly1%kHd8lnzWV)UN@y@FL|Z-QZC;q,#fۚm?IgڏJЈ:(?1j]>AP;OGL[4w ]ƒI 7Ki2L1jᏫPGiq:ޖa% p&LqWvM2 bl|ha#!q\Q~m@T^(yhB#.ZH{T,;"ۭLe͵V`^RfK[NjX(###rXM\TAu'c dLi('?K.Oyt0ݝkf6x۳V$L*ez32KUĸy8bG{,M7}Et]e}%9h4a"W8C]k楻נNz)I:btOH˹ AEl,ُ;r%X(jȔG=k$پCZ/(>׺sI_NZ АmCz%>ҡ_'HMwI^$̑i/b&mTwvcτ:Ez`A<j(%"B~^0%ъ]h&~(aw|mkh+Cg'\bؤ7XO5Gϥ7i>آ@/n%+yWdEyQNRBz4Ng{ % mdL2Z-*]^%^b'z;:^1$I|r  kGcfJаn4lZ?woeq F[a$JhDHH,!$!-KNCZP(r=$¶$@%hBRdLHL2y]ի]ok{?{ѫߟ׫{q{3W,s÷SӴb\/{7uVEH1˞V[9kSfNH)p2L"zF&CSu4HZ[n u}͘doUSY4D|^k״+WHZ< )B?g U]߾#=Q 1i{l@|wפ'0/=EgM%$ih@#W+"SuJ <%^T?1gk7bFu2Z8t8% K@=ǞAubB>iaAAf!zsc~!`mAQŹ8jekA9AUft힙CdZ8K0;ahXWJ[鿃 hDA2ݢdj ơtCU~dS C/Antª>z8}ߔjMI<^<ϢLM"~7@Z[=4.ZǑk@t4  $9m)%rFP l(5q~0LLtO&F6#L P?gF3_qG%1yNkØqYhO_zw(L n& ³nܐzW:UbA IKJ\$H˄̽GYD`XD|J;Oq=oYy Pk:s_C6{-OQŤC[ CqZ!T'A6"ܪ9@jHn~dz m,cCk`<К[oQR/mo s20&ukg00@!A} U{.Vr=yXOݜrq3ZAb`֎IL**(8h[ZB0.9.τL9GX k`XCӲ[6WHABn kXX0]~O=xj t~! Op+vn>giyߋjLO(<VN9!U)]"mIM‘R"s1Z+c29Uz*MÉ`+pP)E tPiZ\pa$FYiF1?9qF^AFt<ƶ7Oyyt c@#]vt4gcirIjRW B244\קS-ua{ϵ+ '=ԍEY =X$YDc8>z.02r =9LE{j7nc7oBmހ/ɟf?. ~"U-^MX[a¤Jh"fӺb{Nհ ҁ&4MC4іN,k;C_d74 ;"=C15- }PiGNJCd$9Q׭ӊrEvYobֆz;OP[ WhN^{pdŋb/fpJ~c\jo4e4Y>xrr4 PɲJ}ہ !kpEvCYBUzblZ֬! "'s:cyBY~Kr[:v F'I tohۢ>=~M/Oh^n&/ D!շKV\:c} Kw&qMXKuOn$ƟOP<.{z4o>v,xjJӰ2J.R&91*C3 َ!u8L-ZXjr]-P.FP./:v 70^f!BtBFG |v* oJd;8?}݂)z@fcS"'ɫkcg+7 J4ra=A;Cylj_"ʌH۞H~ ms S?etb[{xෆ'ZA"s>xaY9y2ot&$hA(c8fO w!QCf&Ҝ4! aHdJJ)=XމJ+j36^xI5kKժo7-!&mciV/QFgCYjzUFBL!*Gc! ֦|]^8{ms?^* @!GY E@Q*Š,tb2I؜amE8[)1"\c]5f}A ykl`?!Կbey`ڞjz_UdĩBz| .&2VOѸx>` v ϳ0{"/\H ߔpѱ&41:Y% ۄ0 (rUw]A dE(R>6T#O3j^ُ]Qe "ΫY*yvHg +ɘH;7dFb8,~k#QB#"tGr5|>rl-0,$Nv' c~Y.}cM`ԡ9*ģN̨]TU"A6X%zQbpa FBxmZ0)iIb6#zx[Ir^a&*?aRҵ`k>^\0sv0zv$xv̫;F(߱p SF h:.V-ޚm{&9괾h}U8V^v2 Lr&[2)b޾?g"[@m+⾪AU^ nmVz?JU5 "m䢫|#19}> COnōƉ Ўйfb69p>iHXNܲVHyi5X] )3D>h;_+. TTJ caP5W刱\4-== RsD7F2}y [ A @q;3%LDSUal.zܷj+sRA  tr XcQMr4USֵP@GY)T%hڙw)F$DQ^,'qSTNsխMgQbilst1<"{M,f򎁺 LKx%,z9aށ6^Fͅ4qfZm61u'i=YJ36~Nb)PZU/Jje4$XQ8]6|hBǫG46: ;}@=a6* UK+Z۪݌}Z`[Q?;GjqY @bc :qڇ̷Z Ve Zr'Ww82Ӭ[Y٪9'o)9Ԉ75/W4Ȱz]c֮+WvӲEeb.(a\*Qpn+])2TKH; $*a=$@ юb QIi5u5B^ 3TCn8ؽ Qb\sa0~,_qKYJ C!=*R, ^P< ,Kc"N!Nb-2pZWs/فNò1c:XD#2=~H1p{ t ڇ[FfGWeBA% g{Of_!A\6<  piKQ`VH!^> GJ!sxvEBDDA{BNI s}ƃ6]U N0)0 mA{8Yd>Z w %$^eH鎗~"NUfShԜb!ۅoA\)X(Y닠@R>p:, t8 >G!saq$仈okMv%-2*˒D>~\ v@ݿJ\7[HP"d8Épּi,MV/OeJ q&)*0w;nq@\ȥ(z' ).EW-OtHL/,;p)bSmqxld̓BhHd+QL nk?7xZŭ7u>XUX\$ύ-pŁ|adVv3-*9QGw_UL["}OE/,bK[{R6&rۢ$"N<MSBUt {cU~іG~߿4,8}h6a !7,yadi$m:l5([c_ JjLIzs5t7MGs㦯BSyKH'=s# OA %Y="9),. =Nyq<ח)80 κaAMFEZ{Y_Ybn@т.knVN^bHӨW9(c pػĮ>e6֑Dፇ b%Zk,(b}MCs|#P$ЄWfgj 7oXC$&15wk$ TVf nrLXɦ0_V)Cp1FN8T}#h"ׄȳNՃzW83'StIKi Z~&XR $`zrX x"RȮY$?#p M_NMVmiZ4z2j9"t`14Xd]Î:Xyr>u P=o(Väk:,UmjYkEpx:ϥ@:  -;l l+; 3jx/s OM[A;ތǾ|te>F= n|ۜIyad5YӿiUEYPa>oqM+5Dވ #rU_z}ޛ_KW?_v<>a} Eb^v0#GciIUXz!97:N{!mO]B_T> qR.W|.a@ 5PBMFxFDK`Z/%z,lCvu3fgo0eF6q4P$CrC`+ЄcP|kCYeƬ8&zVJe<4T vg-K-QPr&^}X!l! !q=G:g)a $fOa/S9%T*>!E> ?{n$lk؈nu៱UjMUj ɂ)Rzq]׍Vݐج>R\"5W?71u*ZgEz>YUoK-;;ދKg?ޚl֝ɋ_&UߧMqg֚lZigW}NZ}IK\RϾP󀪌eCvzKwzOMZtӧZK?Z>hŷ#~r}5sCr$Q뾕iuJ^?i~&m|[U.(T:\oxd*_6[լE%[yy;wSSV)oZv3_kܥKn^M߭pE oںi^ûi%Ziu[[ Q47lԼ '=Ѭ[y#˪E/_~bƔw[pu?K4iBŸ`?޾ OMN}ҊsxԸ)ݰꖵ.}ԜHkK^گ7Uq?VPte{눜hb>iIv+Ӓtl,^.hf?OҟZ՚V3,@7pfkKgW؍FO|+lP#,Eh2:lM[,7P֮'٭*t̛pF7'yi?nvXy {.ivz鋗1 #kݷG7WӖdxK+3a4dץ~xۗ=Ԩh|zbԶ:rFoZr:wPߵ >y9*ZH;aP;q-zJކy¾y鳽 i1"7-{Zܵ"s)%jX Nv=&"ɲ޿kI5T+։ zħ[ݗ$5\MKr@FǏstp=(W`oUc}ǑVݠ=ժf-\W]{R fDwIH* %5r,2d$fnUCUFيyTV`̭~]ݾW'rդY`v*h.k=R_GԈQM#& >5zVǻ825.x,~AXn^?DڴzNxoi'7lT#F7DKѦ޺yokiYX qU2|{9ܱNTQpZ!tFqKw,dzuwcVnSlK ;ԽsV V_",mU8^Z@n[NaMw퓹M 1#BOv鋖jrfCj+o+F'oT`P%^J8{hnW;\]9ٶ_jz?uuí+5!C./hhmȏa J.4-z-;P5kvBCۓ5w/+ 5R5uգߚ??F&| ؐAUxf BZz?FyQVgjݷeGw7ow۳xjjI\ScNZWk ,W}r׶hE4]:d j9\DaW~~!;$ENà =9]{~~յU=ݔ_VzsvTgn43ynNЍh`X'?9أF2yփ$MʠxNo\J #E q|o8ŷjz{r%F|Fy"T0)eZu .mA=a=ՌYFkKI]+$JnJ`'MM`毯W:WxhfGt^O0 3%HX-;/}A|BG6Fߒ4vRX l3!>Y[Gxވp3/z0~UM&1>z2QZ@;#ahl x@Im{U]zfA7:`:BqCK2g42ȸ1x( 8/`y< Qkѓwy7vKRR?o5]g`+\'Y6`|w՘<d rɴe@ N-z.+or[QU_jnaT]3$ ӢKV5_FNKBdiKYu~LCZx6bspIo4m-ᵻM+08֤Rmݏ:>z՜mt@@.;׮[OsH n-|oٵ|Z;Rƹ'zQԦfz݄<"ECFԛv|n`-Youۃ򧱑'0n8hkUkD Ll*]h"0ac]뇧 64PI$1Хm`@[3f,s BfBCɗ#Go`8P57 ("ly N=˾ϝjPjW@TsYJV$@T4ӫ09gɮo{2ָ=_pԏҏ6NM\fB6.FnXSl?$R+%IF K+/ E>5f!:vZM_Gz9o?(GA8fTFHFz T4xJ?Mw9n) }@;@l0CYìu9QS=}q?ɠ}xnAևu ]-eԺh[P&;<0FOb4OB:ܬ%#VzM((hVS7ͫF͜Wގ<vm#`#LD#"V7g![4٥w;`|M 1;l'7nײ5Zwvz-_fhZ#|nA!޺s&}tyNܛFܱul&v_TsL@aݷͻS3b a~/ys6O6Ĩl 5c&I6I"JާB.8`Nt'K{NINRm n  ,t;1ǽ&U3wrˎ=` -|ᩳpme"5UC=5kt/b@~4_V,kyV1,-D8Brj#ۣ - ƃQKg= P-_ɰ4OTِz}AaHe HT}WM)g-|쫾_7WqS41r7V_眖RN&_ {sÿƝ3_Ry8nq_Q7jGI=Q_h?lՂcjԦ0%Ɓ.%%Do]x7Hh3h7xbL-jQJZ?HL$Lm8mZI̕~Û~tb]w}0}[ ,\9=u>YF4#'ܛw:&l  It5iYFO|4'w7sEaXIhVF's+O(Y3ȟNo!H :e.*mD`i&^T0wzpC 6i I۠w^:[=̈́/Xv'a 8Fo"{+1Yq3)mb4J^;8rfī ٥d|n6"COq|Wp伊bƊ7L/xnbQ"}k*fknݢIoz*7Z”#7kFs=Zo֊ږ/8`p V-tzf|PwE1 /+Jl^\D Mw풲VRn.B jDƼI?<Ѩ2FԿ u5۪|"PwDr$|z H6ZNZTzf{2cn+c5~%^pӓ'֘3>a8ix:K_Xzr?z)s_KOIbjc& qht؂ַID?㞔ު xO.ZJ<)AcĘح מ~Pp )#n  7wNQE@M(]YOy(a;<րN~:F!#6wO7~;>K6-j{۰ZS.Psž 0.V?;2}˟/vo\A[Ya˱! 0Z+ r.$n2GYy6-8U">՘^cD/fe2d޲ƚ 5sQ~ab6peeWc@E sue.He+,[eO)fѯ6axwJ5FuvTP@:+Bߏm1n<kzG'Nu?͚FPP0MfcNo<dҜCnFK?rt04_“~ 5qJct!q-51gos|Gx(dGԗkt3w8YusƋ8z|#[ܟq:ZlQo6wCjgԄ)rZxjm7 nfp絢tS5Am[Mިd Lli&R TߨBF ܂p#=ݩqsC !L?H' rh zB?Z*ʉpBK3 fU(o:^PUY]V=M& DŽ Yڋh6BY`wZ *@h&V/ g-%y`VWXyލCd2|Ck Kȑ6N{E]Ծw \֗n:_\@N\mTHzon P7DUGJ*Y'7GR *=h&t|8'y]@}IK(V7reK3PH4WXCȤ\ jF (|>m{}pNP0lBjqj|ہq*ƛ S&4{d_c~׼FPzMjg$ fvz ۼr@&VjFj&nz O'~~_"K; ƲĮK_4(Bʇ.jq9\5yN㥳- chi$ YGkh \'g&VEZ(b\ioGjD(bFKWQ\ Z (jhƼ]좒n=:$-f\#[s-Բ$@*WVk z:jƎo1 z9|qn5~վE\}5qfcؓIs෯o%hknݙ4hՒAnABt3H7|ƺev`;04bij1D%ogf1m&mx1Rg k}Vso@m_xf},,C@,g'm^5ZSghZ5q "`&GUccAQG/TJHm`sCZsNeh g5{k.tB61s'NvQc/ih{{{{k&P5lڧy.ר5 gԨ̖#&LB5F#O `py]|O*&6 Wp&bu<#7wţ8+on4]j׼5P兏x{-V*`~>,X]UM$ৣ'Sp'>&p=DR L-T<%$jJd9#l撖XfZT䓚쒚(w2lpKjJ. Bz&nwR__ח@2oNGN4":ϽZ\3{H, ^U;'rIhdV^5dm'?Zt6_|)ջkrepE8eC=Iφij|y77s^Efh#wo]ԔYo#8zl޶ه>rZiMZw\97y^k~ پeO] i FRɟdw(6p>>"8c_7>j&:yt(6ǢHe'K|>;륫?M2+و F.KWFR3&m qxAu~ " Lc^85/E=5-#z2NjȞO)AD J%;a 8{v^⽳Afï%a6yUVC4{I4ɮ?hn섯zO(zMIӮ-wkmJ}z0h՘h `Z<^L|\0wA#.`s|6W?WIkg{_*p//$P_E3A :6zxK1n;]TEsJʅ/OD pq,\|R|EʺYde^0Cbh~K0(l&U?G3WjCL yP]? Wa=-8@4` )C3Z.Й[Xm " ZLsAj#55RS$)]vhSoVhDM[۝#*kcEED^)^UEXF/~f.VZV}Dh ǟv#Z2~H*foZiEY `V-䁨Μm]Վeڢ*xZer{X0ybMuT݊L~6XupFyhPӅBwā=>Y7@ FP}7'z_$QT+d"07K2V #D&V l>/3R%uZ ~~RΚi@\%AΚd }gXWCvCۿ ' =鑙'Cstxi^q,%U|a^.'8DŽ'{pQ`t n=K,*H ;xffI坘mV62iׂ2,22ݘ ig,u@8'μULcY9:B<3$Lo_ډDv %2w+klRLLKN2MBo >C,^2yZErFZnL̨/Mt14x+a? ϳ-9uQkcΊbiI٣0<#o 5dF^94lѡ&f0PZѓ DIr=իz귛1z )(&;/Y2GdujU`Phfq+ZN*qM-.BK ,2mly5yp^ tr7|j1(jdjJ|q^25(s赈2†s ~ O_OHod f|皍\psv5r[૑s{3; LH[]5Z} glj\0EdJ#)so;Q np7iETEfJǡQ"䝵ta֪FEp]J%^q#.p|fp, g0[ ;A *fT9dl:"ۣ&{&ƭbd?jjZL\Ű.8OؽеNa6>$4 pXm.q\{PE9( hFۤxZaFa%Od'OH4!EQ2P3*{:%>kб.-1\T, [&B!PvV F-%eՊ "GXπQ[ PhӋMOo׼̂ĕqm8g`ٚ^򬑒v 4/JYd0;ځs(]wR _q7:Wo֐kİà;GVPIͨHؖ c=}ש,!&( s<`Sg#6tv 'Y Vsq?o0jgs-$FW::T5Fid$T^Ӱ؅ci9VR O\#h&!Ƞq1xҴ**SH_7AL3M?tXe"5LM_aw7DIa _kЗsIr}#WqN;mۊq4f51tT WϤĤs$GQE،1Q.|VEt,3#co"u9kFV{X:BA[ ɚPmY6GrZX~!S;%h}8߽%EA{ v(553k^y EA[/2U%ϐt"!&BbGXcԡ\fʌbZy- sc /ޑAfg =P .:?5q/ۗ^։Yh;S)lV H`409tiM?L?۸DLr]Y#%3lVbUcgo4 Y-\_9"6>iWQ0yt&5slVQj]Cc{[)kLHyJ 7"SC 6z:HSY$lٺw! sۋXTbYI,:'e}v𮈂{fg [9<g{VpB[*a Qqp51@>rݲk阵 fNKwj*a&̎ws@ĠM(%͒x 21 gz4LAGL:[2-FLg0ȏb`bϱtyZAʽ<rSm"Bnk|NAy%ԍDMCƞH;Ik?oYQO};vl<Uv(TQcjhmDۉ;Ad@Z_@lPଚq-tjVۮ{!dr6BdiNN=F~YSDҘǴa9TC jjpŶ1jI<'Ejy${w(E/^ja,8q0/Њ^WYGY{nğb ^b hAm&k/[ׯ?|ޜ^)gwg] X\7Zj5?u~yMtd,p!!>d)HPFjO}}3ː(ww:A:sjԔC |Xֈ0!n`HjN)נZ8L^\6Quזʱj4:NGs ,ʣ-p`gI"lQ˼I#cUpbIjՈ"#~%זiZA0nɣIeQ? lB"vKa6B2o&BB{!GQqQbuREu3 9`ۈ߾%m;ЏX=67Ґ)]1iLeFGg 6%?G\Q4qji2%I yoe]b"Xq׎?S yO'母%N.=%,C*Z`w#Lj-w8`)q&ygsz}}=3fjq⁉11eϙT+{UҮiW ]<<^7?\}̕N>,EPZw آkhmIz:gl ~lLFgMpMI*cȤEP Xr_}f).SpQLN<̈́n/tjƭTu FŤw8T},T\A̿=a8Bp 쥏]kB n9.kf,*h/0ͺJmdy=~|oF%Fsǎ$zwo-O?@VhZWhÌC{Pm/R+|R^eDZbn~]-K$Ao%Ȯ,l;vYqwh{2[նND])Ntlhr"Ѭ#!=Q,t,Mb irC5c` 蘭dqdUs.6Tc[5f!r0rI/[˳ow%W4<媉.wW50-&+я䥜t`;G0A(Vj)"dͅІn‹rdrȉ]9j~z4wo\>%"B˸PN Mp]W}޲WFN&Ě}`aUsw)FD%jA Qy.aW~eN3(8Fk.7,r@ȝAG)Av{s wl}DE~.σ1IGf!S6W|os_Z"_KcO:a3f J0:K0N2 $=D2Uax?(5.ӵ 'YUp폇>HАщpa߭hV#[c\;>nב]8ԓWz̕9MF1y0&h a f"chsz(:*Wk~ F9-9oP($ս{+ !5UOrs;o]p݂A*m s2eO\"? -nOq@U(5:pr86/jCz:툌Pw%pk#[{ ~|uR21wWXĽZm0Mq"+s)?E!PP%v7ZwXӧ0Q'؁;4 v>vN?Wy2zqD4qkTɚX'Q+n5<6:x6:Y'~]imxy=9͹bnaơgq'{=?2@NƣN+=P ny; a6Y}4qӎD%k[/paM/Q&q]@"J1KH(rFE؋FEFcC IoO?6 un&õ+{/V9YyQyr\r7c dc;2$/r*j,ֻȮs` ̃ KmNlpykbMw3bO"M_bz 0 . ϳZf}JfF< !wgBk ,% ݓxvV-ԐvJ)avkL-Fe0!{+.Xؽq:nZqpΙEmU9~Gk)'sOQ}`SmK $ņdxIz-cYi7A>s`݈%/HF`$JF |ʇw/*HI3ƙ+_mzm{CĴ[|!%dEflHx? Z ߓ(2+_DCA JA,;5r(FlҤ!0YyYuz5v"%C?\):m;J&4ۅ? s"2;^dbcFI>̽)%d#%3o ZTle#9w6cLVf4[ Rϭx(DjrJơ"c35Z<}P֐͟\K/;wEUiW&,{⟪ V`pRWxHa sjڰFg_/(e/ Q$I-*= 9GB.B?%ߘiش!w袶^bת+5Ƴ@@{RHuoGs0V5i1hU6ڰϖ3A0`{<^n!@>&KeYSq?pnu*%jA9X>ϩnoNpImDi%WkؾXZ\X^mQ4@ĸYA ZʗpaZj/; mEau_#5}EgH{=ĴAוRoD&=,EIeҹW!Akt2_&~h 6FpgJ=!`&3 TkzlL\umԃ;ףOLw6\{W5.]gƨJ>k7H!n_gNCb9ϥuN5qh rn(KكҕJ1qҗ>سe}{tGi~L9 l|&rhȕn^`^R9#yEl^lpז̽83=dhhJ 1:21(f?Jet o>|꽣^CwB)̼c3ۅ" H &0Z(FoAy-KAz1yX 5g=#LL 3 RiYdW@$w>II0Їr^\zп6|riLard‰Iihf| Z%"}|hx:Y&%z-.ۨf-_a^*Hߨz|(jl%6!7#u'k̻/ua:aEǿpk_(jWf= ~6„vzbhϒpPLY(fkѲ#Id(olfh]2H.Nuw^Y a4O4h\@fOt+ݨAo<,̌ey^̢2w-+U:*+T>[yi~?ԍGK=P&:3blDTQ!ܫ #-6MFЖx/9;Ș;#Ҫ dPa u{9kvE81jW\͘%M<~8ˡ6HsЮgjF{ n:[,A$ rۄі4{3ppt=O~ _w-éh>{(X{I+^WFI1ء7b, 6deU$H:D(5R8k#rlI8 ړƀZ5fFB= L0?GQsXcj}S!=<؈hiވz)CiJ^E:5`>9&$ ۷?C:4mG JZ dt]J 0SEO'+8To7,`[bf*0)P}ͅ#KuaY\d!ؠ&:F (C[(yٻc':hzl/<`90qn` nYj!  ~7i=IvC6xH}gan\ߋT&82C0pQM&5hp|^p Z3q>bth, XYUy9N`!g[ {w@4CQg}oaUR5. XtF)kJ, B0 /,/m"PpY]d? >";=")bЯv.iuzj^YG鿈cNFdr[in_P\#}Bn!<Ԑ-e<04>I d% 3WSz W}RjLb7!7;׹M"m[Ӊ|X=^)듃`m*.+PL.g zq@E5i!vCHL⧯iwe1Y@C/ /tqϏ"nb5<`1g#@Q6TR.82"bcޑY}K220J' q116=kY0f4s2-bC"y6Q%=SA_t?Qb*ʫ5ȝ`Gnq̪iEf*ܡf ɾ+wL6; e81k3le6.Mn' o%]^@Z} j* e:-;*6t ˼#-E{uRvB''ycEߓXL٠jNS+sb\~QE2x]Dؔy|7 AʘggbYtƕ͸C!ȧ6(PgzC8Yx,E[LF3};1\`^31SMpMU-7(@ V?sb p Sibj<<|w GDw!0fUw9L+ 2vSML2 "e~gg5O oo F`S^pOH'-\K(SăU+a[B#: ěHd)u)cp\ -!BeRZR[ҿ=hu$6,UEDkzQNvӍ?-k_ 8F9%܂ `0dug䞹ywVg]SQ+5G dzF1f1c=v=G} %Ǎ `Kɨĕ;ٔۯ] dwswGnw5&x0u%|f9o3AV^Wľ;; CHK,)|2\^VnvfU BȲ%UPڲk4Ö@*rv虘̗{&bb~LLD̏9ݿ| ݮ~wđ,S[6aG?[Rx1n~!敘ԽKB`:sIjfv[-x)چO d$ nqXmvZMd#(6.ILq{*>O:T 5ݱ(S" }^>u:=Mc^2 ?2 ա.Jw2 R6K{L4Lgpŭ%@#Ga;O-['.]Ʀ._k>?Th0#wVAd" ĭ-寶x=Vc*2%RxPź[O8r!v՗jBS<_i ej\{mGzc ŗm_:` ԤS{d,,!h&ͦN9~YnQҾGfJɔJ˨(k6YN\tx8]$2G8^Mq61 ܓU(NEe4r0d/݉ a9h&cdˏc]H2`ae [L#.h7 :fw}ï9Sհ.miXmKˑsAf74sRkFWd_Ɵh{s@X*vDddGm*uh{=&ףn<ϙ.'yY,(;%9} 1ʪn/1i:T.aXJ(4ԧȉ:=PՊeWy/#Na<ԼGÿ }@x% g1/ J񷻄jٰ#2FkjK8}?.XPS ۃ)%1@ ̷ K'TbOс-[@Ѥh?5NVi7J]-97w6cҭo{v"vx~4}$25K#08L<;B>#<Ћ By*d.NK 奜BVN%ZZQ D40w<{f {IϔFfRV= ;ɞRN> E2VL[䵔oSJN}{[r4Gvk4ӧH3ëf\bUc!k8!Myhb[wV_'MF9M=rbXC?<†,e\tpA.q20&Om* EM6 ٿ)7IS-.L+`EщDv6NX47x X蒳_׳&/{\Z-C I}#8LBl錋߀tbß"zXtR ]_Y[I,H-Mg/!YvBMB&Ȩ!J)j) " BusW^@o!V3Y\ʑz3%idqh)5s(ϋO⧊b9nDm eZ'/.NePu@o3[8\k|/Y-~[w } IX jzJ6\ ?ೋqpVqNm`wʰ'  1cZ3'{Ҋ˶c^XbgÃE_Fb+ 1Z'C1)-5u6y$Sb% QB'!6-¡F95)Uא<w[=VߥWRu;S"zv4fI{J/^&mb.1eN7) + ժF23+=rxV?j),d\%YXJ@1eې1?;q~vxyVnaңhJ YhaBUs5hsm-AiyL#gCH)Hml\FbA̍GdJ~n_.nbkItPnnciJl'xZ؛2]籦ˍ(Յ}.}:0(q @ĺ}%~)4:K+b} 8&72G}1*hcLrκNKŴ3T*%V1Om>E7;[P>oeLѲYKn~񺝑8lB.^^e`1؃YU =}B$2tH_sRW -PNdz0vt)dEEQd :毜]gj(+6{?) 7mJUVZKudNtQbq"Pv/-G=T.j!|Y{MIU[^#LܮbUpSΐ`9Rc/h`^[Yώb+nA)WJ]0_ktrɿF( 'Y[%Shxٷ.jޫsى^ɭr +27:´jG,I?ɜ Doef~]Nw'JJDjҗ,`jAJ|}+JҀ «Mio-|WgwPboAׁgRJ5=ΆٻZқ,k7lr)Z6]}{yUF,H;8DB;Vkq0p[ 8ܧ ʟ%AAb/V9ԧ :Er3"Հ%؂+WO9Uv'%(r$'Nf Wf cqkar]Ph2~}#.X5!ve0"UأHm7K~.S2QJL{T)ZnQCVWsJ,v\{9bø iET6vVb*QțITEt NQ2te!x=_AM;|s3W@⏀Yi+];kֲ Ab@*BH RGB u-H}zM{<ޱJᣑe tV;vK%)= 8wׅlrM  *'wYmH7fro};1Yۘ'Rala d'j"Xϊ6SB{} ޠ[+O,ѵc1d9b`śc׽b\I_p̛(ISx*JWKYs 15Vejz*ZYT/F&Wߐ–ܱtKɌ @[=J5[W>LWkf\S*SMZz\\qLTV&&fE)+';-?â+US3,aW_,.{iT%SKXU2הfru\|W;:&Uiafebl V&-vy7Ds 9V&:I{Drڭj9ihwBr:j2z=|]̞.SNZ*'jƍRؗ>Ɍ4ic*\e]`{,Zҵ5Y(M&]ߐnBxMFQh7cVf*rL5 VG\] eB8QikJ6xo.'V]cF<ŀ'v¿ZdO41O6bю9z5z.]pݹ hGS;F0U,]nl*ri:JL4I#5]/>Ȅ:ڳw4"տο}El[wϦ*70hvT&Ц%]#!*nft]CsyHչU٨IU$]#z'WWX5ZI7THqux1!9LymjuXluG9m.ߝb] ٦lC:EXiں vb4јʶ0~SZ(UOBYZkVr\:jD{q6+ Ve+s5iVS(& pc`{3ԔI- aLmai`BS`-Riv#ԫV݌P.Kob1غ{}q *iUL#6l2}IxΫ'o4UF<\U0d R7X~dD2piz'p`^{SYҒ-ZoqqG3z < k?|Cr i2*k#914@:SG!^׵~'U/Z2}[䮡i {)֡uwM:F!@4l_ %|(<קOځ֓<ȔiVWxBL}2pӵp4ip}UB7H;aou~yk38|}X\(KXQ FY4EΘ'S.R׳I<ȞL=p"{ = ['M1C ӆnKȡ )TtD @\\'%'W[<%!c%R[JLf`(?oNfsDBE{rx42㶇Aip:I$cCFoOSd,Ԣ4tٔ$"W[2V W[)ZD^TV!(kBz4_G7\Y,Y2bBkjB[Ŧ^6MVZn7QrF Ui#oĺk*QWNX 1wىZO0]6[,tŮ jՒ`T 7$bxꬃA.[ECh}to*^bUz:%F(7no" "GM!-6֧rFbCh!`sN?kMD|[C*.;{,xzfdruj-iZrn5w^+dYI_Ə( m :!9?['&MWs9rls}5K+y9#Od*^o!2xL節 J__;V x_!|5Iq"tg 3c @?ʷl}\T,~9^f)sX`*\h2$UC T4JD+Wj:!CA:,+-^\ :giY*NŲ\@&N~5W;p[_V/XZxP 803g뙚\BZK@`[uTQ5b#kʳ~13dbɯgƚ 2u$ʀz6IlyuevEɾoH*kĉfS%L\]ww8itLNpPAR=hIΚ %7c?ԬU#`=o.qbQj2 C3fOkҜ*|\diP]ojN ҸS`TYb ͆ lj*o*s̽"Zqv&AL }5<^:Pa1W4V ¼H+C[YjrثH')1:kT|66QqSyHpvΐ PWHͬjĢeF2] EB I,& U2b}4R#2l2u̮GB=q 84;RT)>ҖDEOZ̝` 9lU~`=FZ'O>,$ Mrٙ4eq/bCtGQ&% a+(b+_Ŵ\M Dlfߨ`P4ZȢUzUyXc$ ^UkͥM0Go֮Os]@|ۺ2ӵon=Z0bItPA3z~> :UҕM/ڣh ] W+/wjԃ@"vv@B%njy5@EruWB"$16J oscd [e]ڷ*hS;m(ym]Rnq"JovsD{պj1s%ZH3ss \\ z{' /?#h2aX#9ki;dYӀ4Yz8rrR{guga@ AƸT! NXpl%TtԸvk~ogwq&N:XWv< 㻴Bp=TiG䍼 $ZkeK{ϼ)AmX,\bWG4Td:+>Ϲj3j&[55|Z!`ǞJjdž02*[+~JE\4bC:佅>~pзHz<e eYVCPZXOfIہy"<8YS!\S@O 1n!KтބF+Ek}6/իdη#5?簩V#W;}a<(Uav< +r4ks*&!e F@aA&x-a˺9):'-~VX&w5i#֧7M~KLOW h/ɹ c؟vcAKyNCQؔdc@h&= t$ ܒȄ$k^5!w`ȹm$G3L57Fd :rU"iJyXr>y$Q4>U0xeRb@/M* VG^lhE3 s\p]XbH;6ڜ;rX 5e^EkꔶSk狇Yax%Qn#YQ4IL] k+e*܉rg_B} 1K":*9أ&#gBAD(fSR~r76-Yw?ywŲj@\aI'欑yLFJq(:-X6"y Z7ˮ^dS]3U.ib7h@KT)ԟRտl.0wܲŢoV5v"G}$Rb7McKNzs։T o"Nx՟ʊ#G~t0Apa;'$ Y/ o`Ϫl*.`B3$^J}C(TǦft>1?F&y1b̐G;1:]3jgJ1A%]("^ke9duEWX8 d49˙(mrZ;C=(SGc#t7} _IUH[?sd8)>uغ$-I։aY;=߱0qSҳ}nA*F H2{{,='N=ҬLW9$:N1";e7)P!UҚ$'b\g5+0k)B"N&`لjw1{?ߪuG4FGdLyRޕ_b ?<ވEkRXvYv9ۭ+ y#\brFd̆YP.`Ĕ)G)#eD|LiG8BCHbd֨1!8 q`F3MGx<3$wp1Z[3Ċ X)q,N]&leHEGU eD[+lLNX|5u)) HL;".OO3g;%4騱tNvۤ\$ˌfb|( 8ei@+`)MUckXHZeP/E.jo 7Yd&~Zj2ʗ>ZuTTڇ6Y2ƜO<^b&a>Ėc3-"2dIk@ jY.ؾ3({!{ ;qFϢܣyQ){,j<֊?>ӔK8Un}}`0iD V,tVJfQ"W . 1eQb@xSOa5omj$B4Q./J'{^D[7)JBI6l: x'EvLE z]3(ve X;uڬvt=y&*wiB 2CS+,S2l2u3Nk [΋{ z]57 YX`]`Y?E@'?`zY*N6K\0PQӒ(/w Dtm%"{ sIy/E#4U불/ s~UWczJXFW['[>g`mT,o\S0fB5=?ԓpkMvK0'N^QnIE0IR&fć % n*-F*}jsGb` uO}d #?-/FFm⑧׌t 6]? qt ګt 8z?4# _SǟgeOV]m| 4"Y^Cr<7H=@QzLǯyPz~M{L>-61T|QϬ-ߪ3hm=x86>i(3a6p2ק}/ā8|,:Zx:|tu6$?B[, CH4É }×SQzM@^pr/=`sZ6|6o&/_iAd<Ϩ3bbΪx=l9}9_<23"~v즘8T?/A) X< ݉3O<6Ȥ٦̐ ,L!>k>zA _a;,Vw$Ụt.\uwѓ@*s=6'=#M_Wu w}PĆ1!$$mȆ.POib;KH.c+[J¯I|zX= \Hz('PMHbnI)֟=P{ !~E)N'?m4 \_+0nk#|Qv>+|s#fAl4a+yDv >/CE{a` ?nz=!A?)y ;k*? thP56|4i|K/\'j"F PA2@oќ׀zxJzB_]( N\GcRl2]!A]7GXpq=bؐvVo{/vN˟ @]G[v@VDJ&f9^RgI\X"^FJ ×oH{ߚ |?0?yͤ F^ez,|D/X3A};5upLeK <}@]yՎLXc:8mriWH4\v)Zz~iuyY9۫,ScG(4A] 8O[?55_'*iN]*o >/|V ^EHEW:"z` X>AQT{y{?#:!@{w8o+*: t@p?|dШM|oI^eGdCT!RTL렛6:SkB6ysހDȻND|`_-{v58|h[l1&A上UǺY!H/ݽxFPJjAPҌȚb틲Lci_9.Smi86Y!>`K1 "Tcgz&n`šah`7~`㗻1P}[=LoA+ƋR-|/[z"O5 D[V _r Ix)Z1M]rG@wK ȍu} |9={MN<)V}14Z\GG(j[6P HȜ5}"Q??o[R@mKfcU3-(avS11kE"OY:=ЯMT%]7V~O|WKeK/Byxo,-"m'^-~BpT@u ?η&֑ow3}vo٫9n'Ye"m()殌QJ1|1E\Z{-Ŗd6 kti,} ׯyCs cd3oX$.-)M\2o8(GC'GNHӅEQkOF4X\k⷏;3f6"Vגg=kH ٱFN[ĊGH>b -RG'RBwJDO%fxkaZ Y-~1Scz=ڞM[l:TuV閆"lfIʆb^jJK&!G&@@ BTX]Hm>1m }RCu|̗?wF\0wT61J.]^x}#t(? !B$`s6ޑTF%z+X1˶9lkk;J4hdcĚǘm=a sz`t@j}o 6Kw%#YԚn-=/ z`9myS pl%u DIBz4Z΢b,዆3Uu'js5E"\[~OoEYfDrny &RR~f$XcR0bc?Ǜx]$n$q V7~/u+oοnZWm'2BOWFhfi|b2-GG9CɵnYMgO]Ouc-Bc)˫1-7R9J ASR"G@3ŻۦSV'D~xŪž'r*MRw[k~)^lgC@q\)|Ypa*N#֟=ȸ"a~<sm[|!Wj!&q-#煦 2H|%Za\~OEH$IѮRhmc? )i}"f Qw >{;RbЀ1 TXjdIsCztЧuڀ 3xSߨ|m$oڞMDhu,I1x-X =JY@$ơ^͊Į_"TwZa\YS(kdVl8fɓI]Dfl,ZxRZjZޞ܌5/./xyH<OmpqXWI'C#xUBqWǯD A^ /{wJ@2LcэQe3gYf=Pn[R!h{:($v%c˰Eo?r&Qh #_&)OoM˚v$I>pX+ͱ(<_ɮ=#IMVEګUL_ƒ*уed=ci;шzvW_9<"D\1uqR tN'f-07Q(s4y#9o /J'cSl:h4Ptabn U)C&vP$ӡzK\5EPОu7:^y+m!;dݑfv TpӬ`"%@eKn5}:Qb*PEr3lCm43-bNWDRܲ̔P~\5~].ܔDPDŁo|'lgvqRgc0KocZQJ2q1|$[1nyH6*@pä'$ZGaqM`b>bXH_$KBaN$ZxsCG׋?iӱ99~q`yg&2ʰv[# `-Gc5QOL]_ r:(߷T]20E$|tZb' 3ieľS]I&DMcWH d0{LlUڽj[l˶J:-?F3B9.[ap 0u|"N%yl0m4Kl?X0SjbJͿ֡? jP+ kbkqRig-oxHRL b(o"ZR$`%,y|(_"[$aJTɵnw3aDW?^%I:C/lfmJw6JumK]C]ˊl#zAř1P;Vzh#!0LgE6\%nyLNq1 mꡎ:;0w큟)ԤY3C?TzTұZCfrYUx=dm*\LŨ<yIKK~(&~s+bcf#?]=6Οe)\戹{n;k <=X)LRL xT\.M\]EL}do8QA꿄9 U "驭 ,ub'jT .=y|E{NS X㳆0_j!Lp<{2ra[aVΛ-ĸQF:+Ivˈ9{ PvEKr' 8k7qqk݃zHa <.v眈~OUWЦ>r&SD}Ҫ^AA ek'&xјm#]RsXZv LWba*u9'jC}XP敩MɶMkWRT`/h{?oɻ|n DU$lX@s긮8sKW11 [`t{З$/\;<1蛤G8܋-ɝ)Oq+P%]tVjϯBɸ CK K+B3.]>e0]Fc&t%{li# pfUv_ GuLb %}ZC5t/V<ؔ;bi8}9"!Qcob/.R+H#_`0aQզ)Ѷ1ۍRHIO*ģCHh_6RE{%\  ElXK?CVr x+)ND^qk/18C}`r%AE/.SEJi{砲P&›ͤA~KO‘>Sui ')2 .{8Qm؀ b6R gggd[0K\E/unyp~ixsELgz:|:.guXsXg" xuLpV9$m(lc5RZ1`UmH8j7-aT4yW>>lK{-g[C#n׳wi75F1ذW덖>1BJlğ+:Zl]ĝ8Ղ~]#Ieg=x/3.#-B58猉\X@mb+TNYdb~mvK2&hjIAZdJT_REԳ%_h^Vu|C֓2qcnf-tRo'HX@ l@j۷ð*-Hv#,?DƸ3ʥUCDwx?&in2 ;MM%[OH.lL%5*IPE{=ot˅ע|{6a +`qc实gk{{Ả߭WgFVMDx7YҼS0̝z>Q0[{YEA3bwbAH ٴs@Xh(VHH.sF&1'"|3w;v'Fq' #s !S3\7F<ʣGy#HiaiҊ2rLJK7< VB(N@{Y/x" #cm8c,ץ†1X4EBE!;mKt^?*E:-`>80ӁSX~w7 |G7j<Ԩ/i 篈$kE/aE{izŋG${}o\+d\ČEBBbW8>&}cLӨ_3Aj5r7F[Fq%CflFu]PTNJ~sKY1 z71bц|>~td;&'ۣ'eCͫD2ǎd3˭tdGZܛ=KJKW>u3+Pq홭Z-x˟,/+ QN_V;x'EoDݰƖ53'CYU}[x̲db XkX{ߚi8 Z~EطJM;m6qc~ip'.oQ̕Jl"vel%֖EEQ\R4sYaWHޕ.(eaeg MƹOFnIOR\1n 4_t"Hs<"z,pXb!o#{U%l*,J%/w_O8k8<9ˬS*8|/+n۫TbEwʊwd0(F Mv<)jCaȁxD}_)2$c; FΝ;&X4[/@8Lc8noGn Njqc#f6 (s[*67PŲZE?;dihVagy(`%*/ݔ;Uv+tAL#ܗQMBʞ^F=Ol+vNAZbEj_ORjExm&-EJ<_^HI7"V0#9?)Q cY; #=''[@rDX46We3M 4QWVB' _GR:M*:W'bg%&ʹ1IcrLxX_clqF"CA#jQ$fe@-Nw0aS a6ڋ"&t 3 #aS)DĝHN3Yދ8k`gc6~Q#ĨL_Ĭqz"YGtSD/mn9?ۚ|?;\L~v ߆O.ݏpjx,s0§QȦi7沐!a̓)@Wc^oֈ1m|YZJa@}i9WبBDnmV2Bf;18<4gn'lwAyJK,Po1xdܲ2*/CUIJ)>o,Zٝn dB&Õ?ڨרSSL?;Xܛ8=j'u05^iOA]xsneЉS wRf_GP[//lk_ ;;ۇ ^l ?@]J P{.DCB^%,\2&鈠.;.@?bDxL"!]waz)3o79M21ymql ~=A8'qʆ:s¦bʼ-Qłu{.X?Uz ^-:ᏫW-yoZm@ Xfqc}XXfYl2xFNkG&@ݻ f pmѾtMC49hx ub6)8N8;$u]}KZC PAൡs2w}o}:nPuڢsN6 xۛ?7x {ahyvw #Ropav{ y&}E08 zo G ́W%ቾ?=ꉎ,OI 0x[@0]f *?Ϊ!$,C,ܮ#4" Jr76p$.6 7 4Û`t]eRȓCufb7&]CDrMwĢ.} wx_n]t(żPCy  DD+ M@O aLCcvއpn 둊?sW݇^Fugoдڷ#?ϗM'h[/ r[o}b\~ :\g샼jdp6"Ŝ.H]Z(`ƧpYD488{M`G(CH[t ]:)$hwO#Ht1`ș}rڃ]I 1`XD[7xmE4,]Ryv5B@8BWŎ]Im~z&UK( ]JD|4졑!mǐܥOƟع@rT^ m44n a0w1Msc1QW9YA{?% 3?bu𷃗Ŵ%PUt~]?5/4>jhRS\ f~LE%>P+Bu $ br>#CłMS&Ռ~Xw%g wG#eqCA7bQVdENc !0l7k%? Īx CHIuOGIJQ @ Ż3-JZjr$E%r4)bOLa͖K[lWPpK&VJV \m"XKo%PcÙ$dT(Nn`Z[Ft] BSLkKtB{8-igGڙ˙E%;t2q4$OtH%/*RT G8پ?4ۘ" itٷ[H)yǎz3hcS[ԑ(z__Q p]U!lHZ/y2Q/Nm5 s }NHR_=̀Ru:a"~)iZSc)5Ow0䣖=Z-X G bd KӲWԚ\{oўnmg=]XmĴFS mzgK=Ep)"ٝ ꐸ1 5p gFwE\6_*P06R!v-MhI8=fkO@)DJU2갍˙4pdtQ/J 1RI2Tq(DGO<*)ؐ" ]sPhg@V4=5-?sn$hL۷PDq_*j˶.o,AҤkK8s ںBYq!Y;;H9-3y%C5m{Dt3)=,|:72ׅǝm%c":sO2tcly~R\B;V!x|9 se,!/BP2y M?ސFV*ۭT_aSR5ixRrSڤhWagmABI.#D(P\Wu򆥘I=ړ=\'{;qUCO)kRqybO!/K_~ %o]~Qo/ E OcˠhcǨ.cgnzࢳ0=rV~t3 ~L5ׯܚM:oU5Iw2۴A6:fL[%ATVbr BeT=$f#K,=GwgPz$jA@sd++>Oن#wun!HƛㆌgC=}?]9iWjlI+nY:c$-Aqd0I-qY.%V֚5b>ޝ.a)5$Eu DmF=,ҫi"ZM5;Q"fi7⭄6eaDF Yi C>ߔ<'%iQlVjdBc(jn?^e>5[@Y[V$UUĥz56E/4e*, Qՙ5zcKqN" 3bvH>/R^ľ8 4b@=IES`52y!2Ubg y@jƜUcO{&R^Xʞi5 -Hź/.V=s2kܶ*TD.SObHPLW۩PBw1P )w{Yrs8t+ai_9.QbV.O[k)XMnH/-oϚv2jk?܇(!`Wj2>oSsJNꍢ,x.X>}.棃kcuy+ˋ ?@IqʯT$7dTf5X~ He"x$]oN`ds;&i rD2x x A]@C{uckPE@'@ *Q1E|?܋ڴ`NJRyĆ^˩erE<MƯJ]dwg Jy\)-L2ctg2h{KOP2ᵑ=r˿nEIgwFP|V;1!@yG$iu|?er xB8˨x/ *EUfI0|~ k0biR_\ <|:HBӱJ1a5E3x( &\NXt*gKp`0|D:ϜHH`){Jn@w#%~wQ /bJ0tlm`X @*1#eEmY]jO tJ1t}Cx`'؁1! btkF#|ZtC&M\1gE[n-%>f; uĒ'' /{eOT#su_1v A&}))V`!`V%նoגjIK~޷N_Yb\;q7^j蹤27P1jBvZNױ>QfUuwbSeK"ShiJm{Hj41䨐I:uf:~S~{q-} !+?W/#^ܘ/ ˉ.6) cҴGV| ۣqԥ|0BCR aZ8=+^t9'껾4ĻwlMv4V=Dz=?!.&5D5 ƘEX-/R&1ҽ?ęr]$~0hBͪ7òS>Im1&ݯ) Qڛ/^{μtrT .VPDJD0ԣJjN@.;bF yz,}LfjPH)Q.y2gUh'K nf/ӥG%hRxrV |ψ(Hyey rQyYiEDT; 8'/}+ MQG+q]ʺNŀ .&I#Nw]{i\I-ZKeɋa NJ&ǝ.IH!hxu؂j/3g\?34*2GH4ߎ l#kLgiEev "r\ELZ}SDwc6MWDPۘdD q=_lG׿".ui=ud|sKR8ls21k r:+˴].DN䀶:cqL쓹wbc Ǚ3iB>R~gyQ)#XlSd-3҈I1A6ru"ܑ9gt%QaH=ɚ??G3ٓLZӭtvqC$KCQr0l36?^4p:{aڥ ŔQuKHyұn:nC?62@gJ&Y_,EjVٮUR%4h'|zJ-2XG y%/­1gkN B3b3`ird@:.{x<5[M[@X,ٚUᬘP/SN `x//c$+?%yw~t2.~3%2ؼ9)AS->[lrt!WنS^tS02eԔ.R) bH )%,7kU G IP9M<ڳAA͕so/UM'++DQMXarb}ݬk^5mBo!lj?9ҧ㵍ڎvbΤț@t "-EZƾM(X`ǐHOj"؅Оx?Ī͌41|Te8\J+ue;@s⺾K)OʋI?cڇQbI>j{<"" F3<Ŋ,&=!ϓғL(rLyQ-,ҥz/ʾooq{KJ<ӄ>Cʣgz8"1R %=ZcVfö؟'RAPy%xpjȏߗ;b[0|Vh(13qмLo+4ɰ]2a?_}֢\)A;YVeOqws|bgQQ?U;:>lŴ|aP>&eEqɬv|mOˎ֑e{Ul+=Q7]m"] 'ȵPIF;<(0;PT,J^͎StymkɻgT2J lYm'lA v,dzR:?N?n\y1a~Y8vωw`_V^LK\#PC҇hw I-2T˺u;_A\c&|yz* }U.px9ޠB~ ÓF zQ萵*!&u33qJ`ګf򥖑ivˆR\GܗmgȲ$%FgOe{\i)>cX[i}#unO |yr RG0o:)e5꣓Jg1~0!\K0s[lG^@: h|z\d`QAV]gX@~Al@),812xpR'Vub)*:%2L ݌'.P{i?]{䩛o᜾y;޿e gv],M[B ՍO]ƊnluT;vK; _cPӘW(_{+H -6#:q-IgcBsc8A˭k9RQsϑoWl &:^bM9n˄#DE2l @r?ML3Yh `zlxtӒ;,qm׼8 ٜ zMGi8[uwq' m?1fAߤJ)\} ,Lv4η?ʆ #|g3ZF9h Ǵ;7]/qvg2H^ֈwj'jEj\=dHdXW '?6[(vof(#R4O;G:L %pׯۓ=℟5; =2<,ˀ/r\jٍJc*jV?;wjN2rR}mg;o "Q(`\,mb "hc;k̈́N\]Z7!zʬ\g)tjүh#Ge[Yv["H1]u`CiozpvK`jHn&"ڣ-ϳZ7n+-gjݼS7 b6;<1^Ut:rPtIaL}ݣOL^xVKMAH>ndNΒ )k6gUo[ro{$%yx0#1'Jc{&߼[51g%lˇ߭^.lEE4T,Z&ZvKRJXv ,YBhrk>mhe ^.}w[s^l:]TjJ ^ {_pC~م?~i(imtn`~8tLZB|SvEU@ʥ eZV+PoXi;5Y {йd^ cq/=) +2bZ8 63<L|ꗈK^iQAm?v0ו@A =ċ^Nttni<}k𶎾H |Z+0-(~` ˎ_(ckAˠd|%NJM9R2X0:j1/ ) 3s/yXAEC~:Std"u0t F 2wì=`JlB0L롦EJ45cmhT K Lu}GQ lVRxL2:uX) `2thscdR|T?Y.4[bTD0G[3Ȉ_~$pHPZa*lA◲l<cC9zAJÈAX>`!{#9=q#yd Р6В,f=Wrd8P $6R4q/(lT9%BHzV *&6Ӻ^_㳘 &wTJ`7 ,XA$= h/^,+`T<*Oӿ.(IH1\̓%Bj_3l`z]+Q^UY+#aK$CdcAIi` yUe] ;N%Ħt SVA[w֯WR+g%IA~A u0D^?x)lj\)0Yekw0,fPwlE.3]lRun=@ɑwr&0dT4 zQ{|V;d=J}vV e~W~8?[ iH'pYS͙ 2<'SQə5͘! DsD=X`!Z8yB! w%*H#93jgpMv*VMWg,a5лZl9̜> o&8o;Mr POS(ejr J=o^'rt"Ĕ)`*--@???5Uf`MkI7id?lV Mf'W0R#h+I={5&Bz Q_yƑlWYyULOR9l g_6#j%ǃ@-.-y{]e?_ IZM#'<\;c&>/|0ȖƯC$'ML_:@m?}G+"ǗZ[64ue ZUHp8u(.9 hCw霕:n٥#{@ZN,,}\d=9T*fXپCkA@6 Ý\,T(1 ayq RiLp*geJ{MڅMx,f^>ϜE(f,ѵ lf}xR;<&,^*}SmĕAQ`N0m}nWݝfٳi:%Ktd^Ctrn{t3ɃSgg ‘VKsi&Eh[Zu)<"BJgJnl# yPA9sd`Ys"9M6!RP[T,e\)@LGPD-X B`=(6.B4`8y#.RJxh wkvc> ƤeJCg(ܧ>?Kz&MBPZ1iT9@GR7sf 5-%Ղb\]yhU\Ո)Y0EHsF\3%KvJ$= y.}*뀞ˈl_ҴrsX-0]`^!TH%,=JKG<;^9)m[ Ę6c>^ b9[.k6w*Yb%S&"uw4&O.@VS`kTL$BaUmiH/,-|,+D gsQB6_:n |k(pΣw@vHќ3m3 A8xzcrgݒ+NKq}:QfwN{A=Hh""m y\E]4Z͎V`+cy䑆벨S^/kmHRHq(8;~)}xZRNQ^&,p2)Qi{`<9[{N,J&NE Jh.hs(eCi1Jb]xIw^ΎgqJA)!A"hfaaN Or<|1ȶXio&`|׵5Ѩ{au=ejwI8{/gEpc40g̪)-{`20͛ F#:!K+2e/P~Sb{&`{w<upCM{Y=~&)-a dg>> aTBe0=FhiBjYBbDrӮwːyT&y 3hc" j1t=c޴ʺ|+=}h()~j94i} 1 2I;'IՍ}V2zڲI1_H&~Jp Z1XmbxAdL~(L{J]RJlWa<~ 5k"=wt!5*afQWg#3y-KHI0i0;4{YCS<ϔM+y[Q|A^OZm 03zM}6e,XqpHV17X,ۀO*ј,V1y5UmPmBgOwS4OKj=莅۸gR]Ԗe~6adEqt| 3;`:)K%ls1Υs0 ºvh# #*z$J Wx~xKE pCyU> @@ ~+cBGMOܘs%ʟ)y3`_`;vΚv9yrW-[a>$8Vv(* $}UnY CtWyapz5=,戕Q]fhx*D8v]b=ܰءg%P#,l-1i`cGKIhX}S~S;U6L,8^QX{ꀎٶj3$-Oc9[[jV?k6z)i,k.[/s}l$XJ5< DA L@sAaObd9~$F@̅Y)al5)\d\6@U[EGYܷ>QGEĂ_B.,fFhlC.zx"]dݻM;]N!8(N'Δ`@ʡCP /z޼Cq dʔCܡ{HELJ*3f>1P9{\tVPI:3g[XBq`l[O4 JՎp<=7Z~0R p <0LӲG0A09< @' !^+^n2L2fPeX5$oƆnɂa6d#>O2 :9bj2L)S?%Kd1;@N"sDW+@pa)KTecǎe}>TֶuzlΖZ$+Z5S7A%dt@:A Uf _tgP&AD[<(z+H']v#J5AWO;uWoܾz~緯{cn_=Ko5.V_Pzgt3T׵f#؉W/RE*9UxO裬k>_7l>߫PWR1c{Ƴגqk;N*M-~Au#o6PbK`#Xuxa;y-VM/-ޡ0;ڿWݜOizPq>.Ҭ~N4`ں8}ӴyǧxG%}KQ4 @o$"-~ ޠV9qF,3WP3eg0ĉziʡ󽑶 C#5Cđ?SdOQ5dl ooigPx'31ʉ61P]3B ո?;l>pd[blJ})T@PGY.:[yt͵,N Y^G%LPKP'bwyM۹041 ɓ|@,4쇺ީFśjo,HB-"bg=x &2x*=` 1VR}[ƣڗ1fS9BF4Úv3~LE =*^uM$EZڹkm#ݐh;L-NO=5-ھ..HٕM L 2jմyYܵ74-GIhu欇ZwH8~YqY%Om)n0lw.o~е{mNw`\ }.J1x` {ˑ4lrq9 $c S$)N(]g#I.iNAa}gn !>Lc.~_Q⊣Հj~Y$;ҕFPN#r[iaC1M-FyLu:+ -4Z9vFc,O }1e&ڿb[. &#/ǩC-\!g?/y)c\xf=}W}^wjk5T hl$1]E4(\5]vDLecv,gd2-UIEe3!v{΢}4I;:|"<|ijSB >qq}^ۈhm cѶ*`sEGuI9nɏ,=5awQW[j! ./mCpqkϤI34:tŴrƺ?5ڹd5gt]_PnJTXǔo>ud_iC2.>RdTv7믎fAwYP]04[%;yAllgk96)mAsjhfuӈttRcqJCd'? rIv'yO Zү]mq7iW?xr=qT]b YࣂJ,=g)~f ܔwB_W\B##}W|LRGu^/̨[)cGaj+Bkoh%2$L:NuV$T 9eeA/sEHq{ƻWPQ -c 8_qZ_'p%A=;EtTYG2ąO5"~dVTAl)\x 'OM\ UچG /|/u%X*̐5 풓5؎ #Me 'v5io|(OS$f%fEU:ZMG>ǵK ڝ:G;_D(W[_8yv,] O$_蝍z[ƂbJyȩȸTX:i+kh9w6o0Z_9(owodfҒ]պ $R|d"OI72&#Rn&+Ft r/!o:y-7m,}:'jRS͛Ful ˢ0z{%LD\D@hGٞX]rvYBn3;yg qVIj^#HLqfWhn\0\/8kZVvq &G[K|\/9\R͒i⳻-F˵>{Ea/+݅n{lse(Aĵ4}+5>5|j6<{^y1*`4+9D@enR`M i*f3z?re4; 0 _u n ,lfRоU]15MA!w&ЙTC1͈ݙHK0Yef9Tω"Ճ]]od-|hn[6H Љ |)C[!U>yH0exAhReLՅ$fHXt'kE#fcwqdSgîDkr;AÓl1.g /o;T-1mrrEyAe]iF.eto%gf]7QvSqq=u 3 `wac<xF6$y7XW]Ž2FLF%\&xGkj8?1b{&Vx䍫wIDzpW7J+RzgZ4}L[~$Qw{%9xАzC%\sEGsW?E;sA{B#zΙ15shi?c#QIQ*w>dp)~ȍq/ʶlZvʍ-m([SOiFF3&5`D/U_ G1QI"396(Alu/Pj9K5y&wwGYqɽm&S㪨LZ 5 a͟}_# }oJ=2 $Mn4Q&sӑSZ[ZN4]a;14׉4Ӹx#wn4#M?@Ab%(*;G"dS|๓/8"\rh3!mݍ/ϊoM|BquC)Yą?ĵL|TJ̦IiTp%H~$Έ8 .) }ΚoY?T$pn+Ί Hf x5/kc5n!lJ 4)u2t;Kv ܦ|r;O rL쭴! '))bTlSq3I1;+Gvdhcw5m憆 ,z4iZdSo_ljڲ"0Z4@̻m 16ur[]WWN\Ij*u~]EؿEc,ut]B,i66Q}TS<eaK2by՗:Ͼ2RF#Gj!S#Вӳ C{:Gϋ*$u^1̘G_1*a{ y֣,Rm-mثI׸͊wX$d||5ُ2 쨽S`=#*9M2X"Nͦ0>UzM;AWXGmb#*RJB5K8y׵w|^8'~ID<G%Ka" tW;D6UnQp4qΉx =4T<9YYtdRfftx,GdL+u T )տ/Lbzaѿ-FM) U Ŵ6qhixKFO{<wwpmI&yNNpr%XP 91iɼFj~i1~SI4m,ޖң6or6Ae$b'RچҢ;%MܸA٣@1ÃC(Wc6)K (A3N jPhhqO,Q?0ni%]fz띈3q,Wvd̚IM`]OѦzm(=ߵ1omvF4jCMG ϐ]9.7 @ }>g#6כv;7;JZGh ?,P7~G3SysE*cJ~iVuX4Z3R]% t`dCO~xau|N#)* L]r9'py܋#-jN3Q溵K:3o@KlmhDO@Jp9rmR[)j-hnH$'jZ9CkSJ@k#zmohZ[#vbS)Uzeɢ"z-u6yp(}H bGLT0lN -fGLE07k1uG'0./;#҇KT?ka0= 5yyMZ#kbkAvb#Z Mr!zZ3ǧIzBL2AL+`ژ(=PZGB[ I"{orH7-q3=] VR8 1Cs8{$5_yUez1k 4ٻ9J7e'Ͱ8Ȉ6i :WP2uC@sYgQSq㆖:*2,$? jxLzNk {ĝ:7.lL|':>pB[gn3'ŗgwe*}mjUMO&l(y(n=e)ɚz-MaӋCNt)vYZ_>$e,#nYS<KTKQMׅKL3}?S<ٮf{;Z"{ڝkڃsM(nU{QauTo`inINg|:jub[TR 6‹'R _SzkaI7[iLXwYŖ[@$<@.VI[ UBgk:L*Ut}O^ま']+_5ΎؔX] db4mi4j2kNhs}M G4vcpqr*D֖j|.]cDzn$O>$iy/@u@Z 359N;#TOq1}=yӫwuu.o4ywowR D-A/VR"Er$xAz5|^WWޞ1޾Jw%iRYӚnC,z8$((]nͪ]Sn(r6 ^h:?1z:3>qzeԿYӧW vǻ8 6V*s,BP8AL5ChV{!Ĺc']it֋D˒8\K 3 /-5 @YObV|qVWyr&<@2P|3.yXsōt8vX=KX,Ha UC/rܨp( pIE8_%J4pG6Kܽ!tu-ծmX#5"ܚN 樍5}\Z:qBoh4?8Ҭ7ʐRRsqISȇ\'^D81(/7-h+;OpJh:+z:u)צƀ3u)AR{fYT|Lg(`*Y8^,RnrtYkJ{R0r ZVP&6tc9cċ2dZ11_.ZhyŶ>[s3~u2[ޡAb.۞YaS$I,@dg 2nr ^ )T @ 1y \ *CAWk&Fx* y_˲dĤDM#~_g rSk)1sԤm:o_4aUqwIs_,ɑF$.5 T<6aw-G]4Eb4iңu@HkұPpC/Ůnrg qoɤ͘v`.3ꁴ /D\dN$`i~/`'hi{䞍;MX[if^Bwԙ4SG6,7V 3/S%ZLۗ:mx 9bƜ_m“WlQtͨyh$)W*pQȧSq禹:Q^ K0JLZ$*2LXr*SН$OefTUb~%ߞx[RPO zPODsd4K ~R1O>5SDo# ,|,ZzUR 1D${u=(uQJJi;M3Y_6+D,n=L. oG_HSGң p c qO'!^chiWo9]>Kiv+bN!.fl3lرKךȯ >'[ :v1;m~O7?0 fs}B%K:3ͯAfGekeO[RG^\Y;fD;IP\ fN -K'Oiw$>ޢv}){2#ZI\"+KFCSC޿}F'"S+5\;B\]jVKQ$?M:ZCh:xM1tgFaS'T^tܕ0qo:Y.֕ڧzwkݥTj9K$!3IO@K!Sb!e 9>f]]u?pGÁq@9m"Mxԕo20hL }@^|VxgM-]G:MI޵4z8u !Mz[%5X+gqHhLFd#^Pxw\6qk[48u6@,wZ1g:ߢJn=JO02'$͍<&8 uo{#e)。 6Z6ʉ8˗|nw?rn. Kjgu[/=C5gbS%r Μ9Ere#W";ffS>*):b, ?} C|@Б`8 D-w~{!V+!T4nU82hn9@oX̕€_ ~w0(2XВ%FNx@^tG]9;.+%?H>j^]U@N~*nҁmfQ(~q$W<۰AYEٸ0PH  }RU&cs}T烂Y0]Ϋ)  DBE6F!bjj:}0+ 9Z-Px @ <0_*cuP= > H+GG"8hdF2`RpT\`1d עGR%HA?, VmG(JJb2N~wWܼW jm8 &fA@"-Pa"Z; Lhȟ8ǎ"%Q9‡4BF9LdW_ml|`;Ъlcٟ56`-aX0.K'<~ǧ!A#`TX}訓'w+ ڐ <1!E$ <+&/o!y(U _ HWPw U+ (]HswG|^#4`l QPI Z΃Dāq\vc9]J>҅ݦ @*og]>63R\q28,[+񩗏x *A;׫W·ߟ^N ]_g!7[ r|٠?P u퓿](k4uA#CdLT '4@)ِ~pHŃrQr}AɕQM)ryh}AÝ YXSИFfAf*hpeٹHvR-Y |0: HcJ;2`PsʐH?!,"m= Lk3b֮p%$}g{'J\NÂ^::GWWC}ԛʒ%R4s,Ϟ͋ }%<|R؃PO(:WAŲ@d4PڼФ]k0<ٞT~d!?+͐fmb#N"f @ꃮ.;!/ e\8aUw\1sb4up.}t4Z̫b(Bi9LgA!У\LYEFukf@yh!QL@<w e@J>eA vZ/Iv 3B jmۈnv r3QC.?nE֥C߆t4CU,h;>QB}E%/XgђΒFaOjj4UċŋѠ.Ub:*9x7f&0'OK<դTA^cZc.͡ !}T`Hx父P"i/ e=tdt}p0Sk^bt^:DMXmKGlnM!AMt=srCwj-4K0ySd<@|#0, 3`]Ć <]Zs}vB<ǽ23Hq@]u K.>C (Cdi.9@fW!(GhAZj#s̉9b| vI=)[wMxfR:;硇۟w$4Id()0N镣 DDl e-)!EjnpcRy;XM9\t-DRB3Tvi FQT!tb<~p']TC 'gժ.#‡LRZٍ52ncqjXHAiiLik$lG4gJX#/X 2YL 1@?SWVPzbvJpEu4L9K^KօdD.3.>EB8Pմ21 ͊7o7p"^ȶH >p@oe uwGlBuprwsba:7|5 P֪’%$bܚ \QM3v#?ѡI,MytJ7A]]}(7 CnVOwaKk6! ϫ^`ְ1^yd\ȂQGCЮt+)lΆRF!{\łvC|R=}|Ӏj)J] y͞Q#\4B.)TD@`M$(lzM,f%,y/_R+>?P™ds'رOCAPBB2S0%PY )a(;טk >ҎjUހszĆM>kI;6Fi{d({<@ime?/JvHcT%\^aβepe{{4%H ,%lAðHK - RU@R>3Rpf_fA6T3`gA0ޘEK1,c[`賑!Ni*=qm9<2σ2sݽq2NFzFzb9PȜ`OKL`[weČwm9AD*w]gm#v'#pk'[m@e̘ qe֭p&] h xCLwΜg"K<`݄ (k'X 9z{K |r*pW2T]_`2[ 쇜T|,6M$g3G~x}} YrʂZQP@ bȓ]=ˠR[cb cHڕvJ[֬YZk/J$|8&v 1aΟ@6jYWڴ]BEg}u 1TM/ EQ1z:PB-!0$2@*E?+W>D8(Ӿ ܹ"@,~C%'T*jL Պ1P~=R A"Zf\RLxGU܊/YGo>KF`W]01Be"eaiGm xVyف?蕎Jg!J,ߩ8 :+~lٵisC&R`Dq0,lwseJ6_X5|N gqDtff.qz|C,ue!PW^ *2IPI .['"1FV&f1^PS~ƝQeG/m\>鍹jP'Ty"Dc.4h8ڱ# ҿ@U0&h۶=GB,\_HY#~kiyg[ԁՒ.uN"tQ"Z@RM?jk,n陛4y8[_ Y<΂vh͞|P8eôܑd'd)Sgx# ?˸/ 'p__u;{)@$g]g< jliHwY8M^O/[b>g?PrQ$]2Ƨ'H uOWq'AlB*1c/|:6m?w53avObqՠ6d %EKKZ/\(#WьT|bvK{ 54U a"|9%} 3}Ly v60EHKѕ-[5tPb7m9}L}>xNI[bcPH1cs_$a?OD'uvb?(< 1ȵ1s&U F Ƙ5k?,)GSO@3k޼1Bd8_y#JCDtDiߔ|~dH3y~7egJgz:?']~m:v8,Rǫ4BMofRyE)XaPB?o4PU:͕&La*ֵk"aVk-AO G=]WS{<-n 9`-}=q%F˓}[p#ε5 %}oF)fDGii<۫ECA 2aCMC8jZThrZF%(n5ڕ*`"R("ˮ+KET^ GGOX9QaV`٘0R=Zuᡖ="~VZx&}6gI,6?7pvj3-v! ^,^ B>GkzД)\gص+` 73${B92': uV790mZ 2|$诀`ڦ ; "V9o;|ٳF0L)T zLS>v:HUdZL`S "}.z7O.>2xɦ ڷgO;@#H;LhO`ESq ۓ?&(Sg6chŤиRNW|bvys , Oz$#I8sY:\T/r1 _z1N1P|Ĕ1f}iE/q^x2'L7$|D ?*sz>;IxUu,[2 "z`˽\^j `%fByQ (t b܊},(b0\ne@8PBAYJ#1W ;\,f3HeyA3+fŲ&M"\e렞FlHjq c${z>kA3 yzǠ(59{ fKRM;/^0nZK&MhZ Azga*!tvZZgWH8Oe3SyK/,0zP:ĉKo*~ _胮(5eAvC@R*QxLұZPwH)ʘ.f(ɱed_ ȳfD9y_SĬY $U9N=E1_d zTݖ"M~R46l yHaOA+IW( )ߴ*nxMvXh?-a 3kTA4 (Cj( KœwwoCcn=3Va.x2/nS'jfϖ9/^)"a5ǰa:<r~0EAl"bՃ J x18G8A# O_`"h/HQ[x*CIYU0n%s=*ݶ,NPT||Wۥڥ%em맂,i t W{ nElF%l Vd@) c7JMuXd(rZ4$:0&۲L-)YAg=j%H}痆 z͐uFI.5W}t>4HvA>rIl KÛ-@!̓`v;mڋ2 tdОY@G)Ք} 4t9avLMjӎL:6= Wވ#G fёol' ɝ`}#5;8tځvdO8[-96͝7ԯ13iHd7¾˗(Pm0A8c1 3 b!@u}<7tT]Hh ҃Za|I^>ɓEIf z7wV毋>=T(LZ.k-ƯUp6 g/`} {s~;$:-]G+WJd]߼悝a A5 o^n_x1y6o&a]$Sũ~uS xÞ"X߅WGg,W|gr¸790xosMƫ/^VKyS T&K}&GqY۱/ެګ٠}Z.])_9f>kFc¹Vglh3^uwAľ,Zumw}G_-Tc~;ײD*` 92s- 2 U݃W +ak!bX9w 6?[E=vc0Me_  { 0ߎBm&&t~XM6pKp0WԒ*ogur9s{:+_0c$}_w$$\l"PKݾ {; dn PeQV[n V^b-~1?Lșx11i9s2.({&f'%Z~yfʥ‚>yFM^wP7qZM)'vxRmvHiGBx ^QRɨFSS2y;T+TCK#_uҜGŨmzBǶghbm+ zt{s<٬Q0AԓJxƱѰ/^G0ɦ}5٤>T[w*CR=*|< W["uGզ&p7Gb3L^/B_9iR շq$|`?jknvM1kuY&يM\8VL[q\?pءOeb'X?޾ED$ ܃VnRȃ7Y7{5܍u0Y$CQoZwRS=Dvͩ7/v@B ڭeSC:Ժ{jA/dJ )e2$ꓼ^O)Z$s嗈>$Bk6ow5GZ2Ep)bS). V7X'K4Kf^˵RX#Ei$'#&@u4Id+0bLDC y|), Z=솧\Q3b&Y<Fs;u` ˌnՒz9UU0"'vJZTph2ϩ`5(Rd͇Eԋ> ~ᯋ$鷍aoo!alڽGVam2?uP7ټjcd|Rg9Pb踺ZY+=Dr_3 ށ NU}ܖ?AҒ)jVSò FMO>1^5 L>ʜԡVq9D@b 7Gr C( 6˨O@:KD(Qo]Kk<8 W]_WOu]E~,Zt:AW/^k4 gsh܇}WMROޟ};dzlٖLM׉iӯnv$aSnJ$9h9+<ɐPyB]FVE-frRunO;$:8p*슆!1…g)S@VQ Ɲ 8'ze)O^gW3m~+1gP6% C=èaY ~ #P;V9fCZ4d9'Ml4.!⭒ PTGEjOBټKLKCZsy3fi/ШFOғM&1n8jߚTH':]^1n C'K‹_ޤ;Q8H]g ʾ>D 1#-¹<^}N[u' @mR'5Kmtq'|ta#hԗV|Nl֭ \xɅ0orNjY *LQi>Zko|b4Lx&Ÿk/8=7]Tcmҍಘb)>[ۅ<;a>{i Ф5Nگ`I:V6?j(?ڄ>}l9}Tc$ oy%j/ 3p@l_~C~"^ 矖Pf{4PL8G;Ң~q$%xEM摁Z&N:JqE_\-^JX&v@/6Ň/V@*жĠ.ߺ(#~hWATdHm.y0>j<憜Pw]3Ei b2itSkיf*iX$G|\;h4Fh#maZk"u{lvsճ)fiwM``ǜ8#Q QM6]Ҟat: ve&V֩ݏr%gc)f|<|8lw` %j4 "}Uu2?0S#Quw=Z:QF!Ӈ41TZp 鼙[IoŘe0n0a|ϼuv`bPiYro FyluJdC4/oV‡Doqb F˩CMM0Q G*QkFrT1[p]L'Q X?0̞M7(6 ]E.- 1*$JհvأP:MSGK gcVPRHH K):7^kD[K'P0MCzW;J( ܎G0t٠Y?ЫJ#rfW=ٟmr9ZC&C$v-YhGƂu8hp.ywoS %Wc%+9 GIhǔ  1#\ #"$C>$0Vi9 i%b.O2g4ʩe=C=6oUIH*@x;0wM"!HcӖ5\?a/o]xA靖d17݉<CHL[< %/~G- h.iG;;N*h}3+ĴБV}g3h !Z1;xipZfjGaD/<ՂBлP4miJu>hYoQZ:ʘvMeAZ5H*\]Ll T BcCs#zS6V 4hFIwqoJ"a,?= HBlhNK֐I+:U,Taepp{pR_7ܮejC5ʩWQ$N5BęctKũԩDzJlHSə3$ q+γ  ܉WnnP+]&Nt 9̆  /sC#!˨/)l;=MrX-ݶO oU``YBw;5woGu\ٽz \J9%j}L{ER R}+q-zcqfw c ꩡlOJ8gljT3mZ+)aCu$zH/3(mvږ-~Z֮/Ōa ;we%'}6&o>gyǶ8e14_dlѧ[b~:oVH~]R?#M"@-m4aIXgYfV8zn!2=A >!udWt˺l2/ ue6Is]3Ԙ  $obso[հXYwn. )R{%n0xľ:{.?nI<h\|֮Rl/rOolo@J@PJ!hȋjwG6XRƃSQ4^ 䛃AAm_'%XAX6Ao&GseI"g0)1Q;N[i#۱>Ͽy"Nn"ʗY%~rSc|B6+ew4zfesŏ Lw4xa-/W'20kl}XaXy-F.ߜQSux8 iyH'a+,E֓'MXk!3$GHsM{p>Z2>QD-҇8=8`iƉ&dmR넍@[q_̡nV֑XfHl$4V0IUUoo;É W,8e_ZS)OX/#Ԧ&9|'pwKGОe&fqZ:ר/]Lӣ32M;%cFA] ƆMלedWDkgW7ɓbc{\o[8Z6~%aWY}9|4+cJ;v]Ğkb4*^L{aj^ɑS׮_Z B3˹V;f%t=],ruzd錄|\v%R"۩}⚁;"鯱H;izX:N3$Goܜ* ל G'H3jWslE:A ޲,&>"p4/$z5 O- ?Ҡwr"bz' ID`,ꡞX%ˮc^DĐsݱc^}=qr |i4{Fl߁wNmgE^kheѯڼ͐|H?ྜZs&\&"Pdiy ϩoƷDGsgw3o[. IE8*$wW}A%V G5!+'`9K0ߖ|l6i+W^w/5'.F:l*wʵeޱz|I߰> = X1N&[:_-26oOHK ,h[]gWKL#%1e-."؄_+V\7l'Kh"G'.;Ҧ:zWÄ./c hWHZy0Ƿwѿ%-K4yABV#A$LL.[oFԃ.,n+o qK[֬7sF%VonH n,llkHow_SeU#ޮL @B(BǼ KN#C*6+=iRdb޺pGFZZg?9XMJs9 ׇuH$2uD_!9p[_ڎ=ND{Vq|&s.}&pnȔY%3 S>&aBtۦMnE (NcnؚZq끨w3^y-ˮ+= rцggKɾ)‹L/U8η<.U DgT^Rh=@lEO;T,ċ gR6|)h0 L匿0\z..Ukƫ~}\@t7*j$o ^R s svj5+yI<|y'Xk,MlqJ*IK $i41jn"ڹ^:Q C!oV=eG'.ۛl2?PAޫ?*DMFU8L6:/ Ͳ j2A FqR4<.YrD@SePpj=YeyZ.]9IGt|yG{۠z*4_]mzr0A^ sBU/a>B>Ѧ5єgul46Q uuxy턺pU[tP9Ԙ1F[V=}+& ƗwZLmm|}]dJz?W֟{|Z}\Vh5D~NF"|s4·} -*0nED׻բ<1Ў5]QU0\帨bƉL?FJt—W[oeQgwu.QN]XuN*@wDlAp_Pn}ͣ iB(JQ۷ۜe&yZe5tռHÁ'jaq<%Lq>4e%6FIT7uң,SW4EO&ؼ)wڲվC L$bގnET xƣ>=ߨV˗Ж(7#ZEPNm9edHNsp#./-I2Y2A ?,G*D |T Mt>2V^եKMCڽ>{öA|1z[3co_*TPIRiqL2tT {Rype–BĔZ~Z!rK6@PK(ؤӁh?,-}+,f9 &ELL8&}67\up#6EN&] ̧"Ct$֬ M37z$ BLٖSg>VřuˏYWχX6"02T' JTD t >SousLŧCoauVǏ`lBQru [,9pݺ3?A.X\V:ށ}(`kWKÑH-&R {M(_MrqCWͅ@~*WRlc}}q#7 Kں-NI%[ga*w_$H4n [HDW{4a4 UmkwƯ?:\gߨ/N;Ч5ڀVY*Q1_Hs $|iFL# qm %=:;c0 ްU(FP&](]ŋ?yȄ i=7V*e7Uo>s! }ϰXdP_ƶjEBn^ |2 z.s'ݢEgIB/j6TѻJ`Qx\'²X HV̳Di[Q>T)DS^Kz_||/1ZuSDiĴu. 4. z#?A{dbP`kB|eFPpmATksġ'2Vbٲ3VS$f~D|S~NގIؿfCl;pd&sZ\JqpYM.<{-g5\=C]@ȱ @rR#ҍL|Ƣ]i"%)o}iD˚j7AQqqzT״ 5F|yumHP:ru/R,tU꥗PYGLE[:P/ײ} h `e%h4*̃zX11HaKa +r?ǕEbZ(C5Q}_$)zmΒܹl(ffr%r8  z5qX3'cզMĊ_=& v+j&XoXeuIqFFV;IH'DܤIZr1W fE z@;A㕧¬Y#Zĉb}i#XhT( vORl< ݬ5W_ʤ% %LZ<&lj H֮׬N$T48p> d,ljk 39~Y:zj!>fS,ÉԞ=ίgf7[y<ۂ4 ɬW̛_2Ti$HH ezV7e+0x3#̏ 27<{N񰬹.n{A $˪s3rVB}o-]^{Ŵff-^:G[{Sy.ԩԲ@'1YUj$2%KCNh?}c &zNڪq[.kȓpMPv'\~^:Ւ%:SDjɯ> >2༷JbP P侀ӣ2d%,8O̝4jq>D!n;y[>.Yr^T)_=uB6@4o(0b$Tm`/ ^ ~>QÇ/ 9fse۬, rjL4yOj3[ÞYͷjuO{Ԇ f?|.)ѬƸGY]Ƃ^Gl'(GDKX_=+3Kŋ|N0#lwt3uЭ[~[ ]ۼY?eXn^af=~-d.@yjEZ +p1VDj8@urk& J<ʸY؟v`F@L;p~kAD:55?YUVQG^g$%j'<\HuP曒HV`gW\xr|$vbD_ zBh:m$V)tr-wkٴHAPDO@p-b 0 js>zV~ sj_a(7E3 "sqXqҋ:.g|{n  }y'6Ģd_R$ 3?BEQ.hhpik~\&nZ(s4mY[ JלZ#I]QY Lz]21Ȓbgr#瞈EmL0FD~G =d;(^A{7/:.1G >GlJ Ԧ-}wE>#nq1KRvE ԮW(WI䐖<$OE8 J,3$Hؘ rT8nVkK2x4 T@LYywznlaDg K/]pGwGb9zX bk#D:[]ԙ  ̚/ \RnQE$ޞ>ߦ2T]fUE< ^Qg&| aQ&U8݁q>FR A!] Zb3a>s1 qu#ߦcN6Kb!7;:$~c, jaa `w=I~nqU+D|&%5/Y:h y7/t>[_sM'iBb(Pqi3Q73ќ78kӗ 3lλv .x5ȄֹK8R`7ES`zbmz=5ȞqkC'_FY5}Ш[fXwI \*v1#SfLc`p_0foF"P#c&Ȃڍģx’7 hwqyWAMQIOa:?KT>j۶D˾hJ0MhGlh1SWoʓ=T9Ǥ9]PRhTpK4Ah![g 6؄1U&r^Od`C08ք,SVhcT-d3t`fumAЯ@$$@AkU.'Fl`YqmX"S 0%{\v VZmG!fsU| W"k_"(~d^oA ۱0a揰X03v=]j6J,0i!PaD]!#B.v ڢ1ѻpps^V|+1knҾ;AMSPɻ9Vyd׭w fu0'X @ aa&` פ :9"͛ݷPmླ/$^Y6zuT6';eYF V][*OA8~9ulo"a=HBZ#q_ޥ0H)kWAKJYi}U+Wi˺ ܩ cJةCSgr|ZD꥗ghWC˦MCl1&6Ъ'j?ġ3i-6lTeNDۊV w`z72!LG !%>'Bgʖ{֞"꥗,7*Ö&*sJυY/u(XKqj]ҁ/bPzH*:e0!>>>*I8V< (wHОrڵk]aZBy̙'1IXJ=|:WeՎɒVACf#Sf7"cZdH3HI@OC)!R7N43>!9P)1#+D9y;[4Vs `ǍXO'2Q(,GzI@ u+8d`"m)Dp0As@F@۶]:p?me?EDV̩\"8`N?3΀:_.)aR:p3d.9RekA%GӑGƻ>uLB̚,_'KyY_YOV=lTZ2GZ]#dn߮Z&9#G.lDV)꼓8c/+a(evt RXsj  ุ~t{W4t2nVUH={K$$&`uZ+W/"vu땤=[x4rB$4V0 YuņB-`"2."anÓ] @HrUXU Bgڂ Y?kJY2$8%̪JU>bIO>լkh;.w̨4m=CkyLM*q5 IjM$Ujo|~[1Hĺ&pq\ Iuo"f7Ro_2KZFrZdt0lꋻDj3KrxES)%oTq%C<37n- ljُWzzLِ+WIl=kIҁwQbNぉB@}PyL<)I>K ݫf-~@5?0'XM ]oUs|i֚N&}ij|j wߛa5rT!X7IsAOZZ6[osBwL%Z4nlykz9玲6g7rvx_ǓNCÑ 2HwcG_xX;l ~M-X*q%K+TC5kޫ:hԙԜ}jk4 wPyoyPG*:;ס\v}uv F ڂqaLI^!Wl 8}f(Z7K8o+kRrwr§E.\BTO$-ESGka݇lԫTIt eoaJ68wyqWٛwe^DB;fި_ 멗h:$ߍ(~\[ G^>V;_ 472l C|;5Ju] KX+0eg)( 7QVj4Y R9OAyyމ\ Qk$([' ֐␇&PK(z߁~XyD ?Z!u5Ol>g0j^>(htj\h%)Pj&\ =LJSd0ɤT NxOҏLpifnv1WB~L9wNJy=M(Gcb"H^a!B[0der>'@Z+K € se-Xp(t$RgM3 R"Iv: vRtݺ$e_$)ur~'}BcnGqOjjbՠRk֜Nq?O=R{ݮN>>Q;w:lKXTP4Ä|I`[by tg=* ֈZZ*],oؠ#Y}yRQw;/G뎛L̓L2(ȜI3u)9k>F.&B}XF8Bc*Ej'Qzp{;(hP6 I$DiI[ ڳj5'2{b7䫕Y%+!T?t, )5,$[VA,Tw, ܈OTS6o]_% | CuҗWa-%Tk=9lA.)j7;+**CmV:p A-n2++QtSJ,١CTnbqӧߠyy,@ R%$R IKT7QKOu-Q-m7!xFM:6cE#Ũ oݷߖBZ088bdΠ?(sϺ̮g + /vv)C>b%G+VݧIc#Q ,ݚxB(ŭe2+2NP,&X}f1P >.Ҁv^SH#c^P?y#‡ӌU Ș.OLȚ`MR4!e|Vhp̨jdloh͏U~)&]L΂C{[Hd#؞S y_\iS}u$TpttȀ^KeZa`Qc /RݰxeGEhH mRv-iT]ІPsYW#1gu5ae'F[S& oHZWc8t_GZ]\ H;yW;rQOJOas24kشj2JERᇳL._*xsb2k{Q<,6(6J PF0,m&Af['ra`5H箊BC<wy^QuMaER=hǡT_!&Bm.7# dyM- mXYoQNfNBLZ9$pt<8R̈́''vDb󛶺ZvLo<~r5L$&ɳ۸Q'9S%K_ )-[Φa H7l,3}᪅I$jvMU|ATkYxߟJqd:'MX:娰*ſ+(3Uȣ~^Um԰Cط/vY+Lj 8[8džq}3ǖ*Fϖ? L%>x{ Da r%]56uYy۶0uĘ$$-Op("vCTPmF< xe)vZ*zz:`$l5)E1~٩l!bltE1h9I iuK#B[gagb%NU-% RrH@'EgWb+9~=UAɌl! P,h%LYN) ApNAH`[ vӜla-)*q cbqIW?DUP'!/4q1 *Cs'j`*DÍaȋ\Zb8 JXR0{$^ZpTnYX7jQ ˓ wuximidb~r`eN~ S*A}WKa 99(jyz9n`+`SǵhI(k !+< r& L6mP96bjic{S9Ybs=BYaMV(bSׯmmx #)ؗOW,ַ=ܰ$5nա~ n/C" M }&2kd9fMDh% {&RsEk˖Nv":-IC5Ի紺_ %U c^{h،AɆ B\L;Vn=C,V>!੧VPٵ\Q%v,1k4yynA1/R{g!;*?p=[ (v,*wn]"nQ;F׫Q1Crf6P>Qa=5h܋w9]XťcG QOӊ$j&S-~4ܾ@"߉ ۞sl#e㾰ws$FƂB0O8 ڏ2^,QZTa?Y7ƅ.qu'L%=v+u&7e2T)}͎Da%Zȱpfb8xp 6lbV9(Tc):&VU <5#Č$|aHO',dH~syް D1cTcھf &EkE'ĻtӦ hH2aJ8DV5.%'l';8?In$Q<Õ٪-L9#rU#9*FZ[bLgmsRk Ryi|mm5Ѥ3yR=;Uf- N{f8w'm.@,Dy磙.3SΠ4-c;R"ܸA< ''ĉ'M9]7&]rZҳlZ ͠˩B'}ށ2$g3t3wΞ-K,~` ̫:/pO W_ 1H/.vX#y [ X 7b/g1,*H{/Xv0n8W)Uǁ` uъBHnQ̺}GdT11 VxQ>ֈ/DRٓ>{ Ŝ-UC~cƶZ-#50hGy]dPtN5n2R cn^F2N2Y :zg7A<9U-`ҥ\G^h y4T{CytKZx n@[377;R|b!\=R=vZxy}^(CS;A]WU<Ai %΍RpTiDJIUH8bWgv22ƴ8jb{a15GQV:\|khdQM+mјOv󧚍@ݶ;wl9qj2lqS{zuG֭.Gd˨ԙ3nQ1j֮u1)}6#^{-& %GaTYN"rU!(8U=~Uc_TtBYp}bCCs%NDZ[ qoXu b4JJ `ަkV Jq\QHtNTYn$xG%2ނ^ d+Tn X~eu_#.rڈ7MpB ȷ,l7;⻵1AmhmX\3@lm6 wX&]̦t'kFz2ԑvP|Dv,3ԍo^mqurZ~s j9wS?-;Gv]sw&fKwihh=^oUj5;P mC}zz2/y WBv!M{YғԜ&ҷ,Y2ķ4TQ">ivs BI}5PG-^<$/QIV]yIfĜ|f ylN[V;m;[7Fl3`NL4D߷s#B|"\۽z|$^ f5` w(,!*q[N3]¼@5n / | E T:m<.]oM(˜dojPV*ǹ4ӝ;'w짌:G 3lzF$e+p枾=G>vn}*m$lDãyf?[_<[jܵhzxH٣[MUAfѭpu??fr?}ǻTbf<ѝ~LCw>5MvG?g}4ѝOf@=SԟKosCݾ4HDi4*̣;M.q?Gͷwy&+<5? gf0 b #<4t Bzve)'>zv󳶉Әۙho4HP!][.]aj,9퍩I.w(:ukh oJ8kOINSNӒk}KhbFȕMI9' OF$1+^7,?ৼ~).uT]pQͼƟnԙWvZV/ڶ<ǒa[1td[sɱ?'9; c@~e9 M-.Sԝ?X؇<#f3e4cl>~)LM=;pnof~h&oR,08Ikw;cvjr0LxiQ=?m8QTtk&-]CK0Ke=i<$0e7 gM_ٞkȞUL\8c+jH2W}LdUVS*(Oklޫ$oF[ة>GDa/xw}?](*LSAgi4I0o`,QVxl<7]gNfޏQXSw0Q )hZsu9_)ͼCr'dq| 񇐙ToY yG8S)SԍԭaڪSCr54w)Sݢ|pvJa51LuZ>T">w({ƪEkR"iU_{쁵&t{d5bp$RAZWam$֡y_˛w~!q 5 vi 4!kcF~Ho% Lz9珙GQccڢ@~`G}&IO=O K᥌\bߗsW݌FČycq=m̀BLEZ~ xRSZȪ%`ӅXT13rL;N=LGDe2P.\S=qEtk@rp}f< +P`oWqI~ȴ Eg]lk0y?~4s"L>4`$!`sC,3`]Xy SE4qH=\})8^Jr QBh& I vfFSN}4q %w 1=e H+cjeddk{'9<HCA!H 53ͭڑW%ҒVIN[P~6<|kS?f}>Q jk1[NCVI!F0t 1;o44R2B;BlgrNL}Iz S;:ed$R *w򁃛;Xiple+KdBF5H'+d@gyO#q7hln"4?ዾP?ss{O:i̱<m/KWE/n s[cE`ڮp C ֓0Sډ_O>vW檃:qmdo=0bwW\oF/ .=dZ;R t. 5sa`BGڐ@aa6|lggdG M[ݐ_ʔmczfՖWu8AN c! f%mP}ZtwU$ őYSGU+]ACL`qdXW u0]xD+q.7#c:ح_:<jn=ФCbi0%ukFSVep7qT˝@R;`"Op*f/M/ٷW1N,_V!p88;,疀gq{1BMFwxn.g")SWݮIڡSl:"vV Ì?ͥeS?W/pIˤ}I]ԴyƮyEhM>- &%ޙ,JsȜij9b8SٖsWJlwQE/VMOel wa0y A5-Ra #{ )>}6,Ak|;?Y'&Sjrڇx} ʴ N#'n9{ ;<;wfXᅾC< En ̦9~d8F7[O_X4WF=h'&)NLH$ϟ/ A 5]gYΊ'NE2ep?&\s:4v5ՂiVj}l/:5%BƁ˚AׁZТ{3!6٫thS#[,?kϝZ廭uŹ6pع7fJGykyNUkP=˙O9d`PTࣧf>/cgôq&˟1阄5 מhEkg4;'>@=i߲m$tuMmyKG5NQ g>pC#H,8]G.OmUv;'.?xτ dP"?`:ާ:W+-Đ6l̃2ڲYDDv9wםi6Wʡ5^ﹾXWovQwgl\|hEHldaOpwa?*w|A9CZ?7|%?R}df7bg:iF>m*e#1f΂X|cW[uo?>(8$ 7ҪT@&(< $ fVgt V̺ 2%Hvw{]ݫzUz=ȷzPkU~{gOs^,3>{b^>q/Hx@Qy=/H\U38K"Q ШQ.99] %&͙ LJD4FQOlOJzd@B_l,WK+8ET {\]f`L .]43gq ?dPzzڍz`}wZUf[RN=(_T~ś@ ` ps8YH{kJ=ˣueec߹N}"9ە˒QPVES`Lege*$T]EW<#r#yg= SL}Ty-{Y>a\dt$ T@Ȇ>5aœIEزDXW_N?F4 g #Ƭn9 `N1Hǐ/O*[}RH>ŕb(gˉM侎@}/rᅁilAM>o+ROn7y}( CpALh=L`A1П 3BIpfJHU%-%jճ|v2MA`bC7HZ&?˾>1XpLd 6PKҲn=R$ͤv  WݦZBRᯣnx6fr܇ i~{I i:=(r<˯I,yU7XhxWUH/1(h[18~*voLG&ɑi3VMrG6]?gQ:'YD[Bψ*&p<iiVk$d0pz_" K1|X. plƞ\Y Sz.]IOUrz ܼxKȃ_!7*ȹVa# c?0 lV΄;HنaT8/waW4'8U2Xk7`@ANo 8~+wKDģR ?T#d"ίtI$LWg#iO>x|o,̎5,f*sgg _w Iz?0)3x[R 96PB$PE䂍[g`9p?5 @~?cё+(r hzE܇Amڒ![Shtq #H)8@)v˸9A*Y/IꤺYM:P+ffg O[mF[Һ([!)Fɼpy'rA|ކ]g,壤^I~y4Q,U? NfMZ!jcDz>C( K O0;'moeud<:4_BڕMg %Ƭ@%/ӾR8q_;:KLJ >܎ @osnEYPy@S2pEBO:Eav;xui-: @Fe怰Wɔ9C/GliCfa(k -=ew^t8⸐( "jR'PIb maEKFx-WLk997|AXyO{C$IX'Ղ"-P?=[#7$u{!Jʨ:D@0@[p aL[}%60EJh*xC\{sTW$:÷Tj}C%SkERMe+(pݳyimq2'4\-'ӟDZ[C7N8doǂ>݇;{=mqTcN6|xiZ+/ޅw,l?1ڰ;֏ljuuqIS9)I8YɎpsYQ5?H0]5"5ϫve͢D ,nQ2߽;φ-zB-Z?@q*pmQgpӸ_t194rûGA 6H5l֎E (l춍O~FmV:0ذ,Gi!@P݆ g=E& ks/H>y$4KL 8cxBY^ 4+EɕeRC۝u`l mOCjԡj%]tż'EHXiGē]m;^WQX'|lCdUAn. cBw&}pZ0nX> s86rInZ$A=oUqOK&=hR_n.CɍO۞|5)>V5cqTO)&/)f:0J/Fb&Z]%Gq.K),W Bi$QGTF~zT{Yx!g!3ndc#ӣdn|2fHHJ 5|) 3Ri35í߱32>bn(OdDIMm>GK>Be_ YyYJnCrv@x5 HSrrOz4r~~+. 綷ǽ껲e]ą- ; ~$w2#YKz|Cf(诓i/DG m-%8 %i?vjd8F Dy2jzI;Mg#ϔGR ;Ė/%!\ʃBF6Y4}Eq]H/[9a>hg\\܋*HpbyU`&8L\@b,XVMTh:+%&ly;RjO;G8l[ *Gklc%w$Q 'RgAUA24@-o!xC_h^pA^VT]{Ս#67|g);x؄އml8Fde,۳T+ d1;lش[> 1^3mqxS늕< M/JfiZ|LB[~\}c`/m8totp4sok8T`FJԿC,s+^ &HMҡ4'kvsuI"i"\c{Cy72t6-9[{ rd](!sbawFcP}#66 ү3/v=IGPp\N]2 z̻`an!.,d2NWxgͻ$-(CSm-i휕J;$J΃"n&s- ӵ#4JP5{0~&|NVjg4f;szgݿ(0r=U'FN@sشB@ mnAg7/Vc^o=^أ$&߱@V=n6)^ٔ$}Wy>pSy4Zvz~X]?y,?KuQU5΁-ۇvhin@gL 66KD8ZXb~Yo3I;pͣn,G?vFHthl5i}G ~nč ٓegGzĬ^nhBxJیdQ&SL:ϯOf_ɘLgvOf'W\mOϹfYa B$'Odyϻ|)Gx@se(`!~xC-Mjvl+{h=sv"#dMrcE=[ƿPfj@\Y?D aâmH}V0B&k>@] 0>xn70IgcC俇rN%? ~ [4,.e 'dQ>^/D߫vߊb,?&e.`M}lw!}i "O]d"k36}c0(m6!"yy#K-qm=6;6/gXﯕDAC7U/#|5F3^i8E oF~}5(}$}AGnw0aMx,3ʐlV| _pQ `׬"(Bj؀?l=;a*dڌ7~Dd J%X>wDZ+^ч2ocnUj_]ktdHެ ,?nؖ\15f/_&S_X~չ0%zq2b2R J "cJ]ԤEݛ/#ܳZ+}n q 2nFIx[88|pb! 'WΤJUq//u+얊$~i7t^Dfɔ3>orC<7d(ESa8-ogu20CPԖż+\Is?.N.&6^$xYu>yU67*XBݴ ٿqfXq) 3U3Ŕ,-TAL}Gyͽu,CY{ɸ<. ,c]q B OQjόCO 0 d DmĹ9 L4> W)[3z؂@GUdҢ^9UK,$C! vK|B[{Yf[QX}LmL[Qg(."d+pxh M{A,^dQ^N&8<( *C/(2r4^_2=hQb!#BC bDlIQ &:$xOe"Ϗw"ǞѾP*_΀w a,Z$2~f2B$Rl^يhbH;hF?R@D+L`$>PuΉ[80c-e7쎌"ngSy0=\Х0c=OqKFfa^TY{Lㅢ֏X+[6E>_",(ݏ,# C]bҋ_A9k**[1mt`nJ%cYTR)o=Q( ^%2tM)!,2v%H-BCb ("(6*_`GoaTaˑ̖`I\!6x&ψ66B)#g°,5XFeB_-?5"0[-iS9bU<1#tHrSQ!H%q=fcr ^iJD΁LQ{܈+}di 0},ytZJDS %J:V7 q :ְ 00[&nuBb u% AJ,R dsͣ=0sG5AQhZ7.)+h}^ɏ? 8@lr.wgh'LEDHF35zfHx19?SMXt#?ns\$D}/ ^${%*H uDGJm:~+9w`᫲!&G$ʛp IQ0gn U"CLZZ `ĂZe8]w/O}DpԳHN{c:/ mzƌsAh3e[tNIP{129襳ɐ>ΈDŽ'աS>\6Hv?mԞ$.Q|֢PCQ>Xj>P[ju rj=Q4d!W@󓗲+["UU;}7{klRIPg4q''K]x߼'ENIZE? |I p)q%'sx6jN 9A!M2sY:u*!ޚ +WuTw S}sAQd~sIٔ>){˕odjE:K ǂf'7} I;Ke#oc%yE4]hzq/"ZVx.熺I .QOH2|fI |^NHf!0̋مZs*'T 3$/("y.H}ZrN@Wb(b٘#$贌pWIeFpdй_[l7^%g'G=w_N x|P { :GOkX,N9! 1wܫ|}$C6X-F Kt$P_3d  :*̜Q]Yڎ|}@.|O +51mf'9)Zx &+H{FmW$&;{_'-Ův!Rz/!~};k )8u#Y4t^ɡ83 `oWTY\+2{yvkλi.^ԅzKB-Ja(n?wM9܁6_"Pny:PAUIeF|VR.Jg=$p\WN# GTfӊ߆Im=sE75P#l.PN82Kyo!?/9K63"{mSP ԎuImGH2^>2xWJY%[=7<+EsX,~NS1A: DlBV&-݋>RPbF){m,dW"bLPDP(opZx$7$Q V A:>كkr[_-vKS&>V{̒ԯi/S(0C74;3i a&7o$ Hl3~[q#~;FLxYOO?4̾0;,ҵ8^gCXw+wMJ7LS< wd[<'&`)\sޭPL; D!':8`g5 *GQNg~-$4K[cbʏQ-H6V`{kÒIsU:ym{E ]/\cɫ#AU|:5UNTǡ!g$ȹ/Qⱻ-7"pw,&ӲSƘDeTRrx7߂؞3 JQ򖠈 xf}9) F†=l5k G;m_,oԃƒjӂB, až:`vT:l~!swWZ_LPWAaƋ ̇_w[RݕeƮ(baPƑRJtFCŃM_ッҸ>d++7OB['p9 .Ts9Qo/t/ $tIB.þ̈́ ]hw=!rx3VGpE%D;'- ɇɬ:/L`٠AUb- yEё|d}ľY3MV(:p%''>$M>}#rc;犝ZnEE4Zdۭ-/J^pai߸ )0S75`?jEz@!v%Z{mX(O{H,93*wa,'2kgc~t%z`)P2'srw9^9eM}XyJuDl#v. o<<"kpN(Ļ9Nh02aʤu6CnZ X&PW<75Mna+ǵ뒅Xktfť `ŨWy| 4?^?2?#}_ֲ/ 30J} O!s@f؇?].zk`-TVp d}\PWτ1DKp w@%EdB-E!k%-kamY qH*~: 򎙘/'wȉgO'źsbx١sB5zG9X*&rPVD>dVė8L_s]v@z9v2)+o'b+ xsyBU)RBGrБrno ᄏ(}i:L|XxY/b f6Vo,}\NҳW2AatY TIQ~W)3A3S^2 ^FZܘ0C{)nJxmx9?}XA9{7[gܡUcZNy~]6zS0@ٷ 9쵞&D殖-+ z/:Y+@F+$GؿoY(KbD(FZ:`O/_:{!kbOQ_,sK̏eLY_nD~lߟuI[j]9E7WZi֬C}e K' ybP{E=rL(W>+W;O\5\G bRz!bz rPA m^yN'IǠrTѕIуR`#5rL2iAsGE6zTAİvY^ܹva8e0Wtq;a}сY]TѻW%n5N_lGֆ ]8ll烖Aeeqʿ8=F-(ďeo^u-\Wx)Q/(";P 1ngoUvvփ}6{h1f3eI9Egmn&ؐ 勷k-A@9ib ,Fi=0>.CkDH|cSEFT3$\Mc\!0>/IٲfE]v8ߨW k,_5VYG!d"bQ*V ;$ <٥"*D7(Wngh*[*-t7~&zI !4U7A7%B\!XlH=l9E06΁Zh{ϐ10( ]+8$dX:? Ͷ矓0WҸ<$03U5 Q~NˆIٹOzi&ş^:[6qPRpcHTw@}/?C7f&sZ^]oH>URgXp}paAF3HklRhQ涒vVxOd‘-{2)(!R%2W) m7Bݰװd/gZj 6 mg eo#FSA5?*!GaO]cCeUcP8?^ܟMLX2UdEt_Y%M) 9 bC 2FZʦ%YPed j$Oe_LܾOySJM,w6rG]9@`˂YT9]ݹf:(i;VG' Tkq(_Ce'ٯy8'-%V{;jĿ u%L?OhsE7ʜCDN~GÂ"hRx싔CEѠ3WwP,;D-:i2Zfnsdфjչ/aſg*ȑX$`b<eٟ-QJ7ˁk`u jt{ $a> ^:EL&cA8vd'>m n>y{ɴƃDŽzg#d}7p!6 6cQ}r^e0g#pase"ŅIі,[i2ܦ{HE$7/wȲ0윆~ݝ5Z­O"T][8bZO>y/<5! :htfsgTkD}JCɨOP9$R`0Glq2~0dEg]{]컙kyq9/}%76]˷#~. o]sm&udP Ĺzm'%FJ'vfz"|zI%yZa' ,td҃b~Ν]Q)+OѩH{#G3{FByL}fj\B"(A S'ܯ7PX;UxھQ%%:Mg("ʺP_&u[g"8\iLІ"aI_?ɼM˻;qh%`W3:ss▉~|̲©̔A!6#xaA4Aأ8I9[;1h&]70n?n@sɤ;끑iNT\O?/e_Aќс .} \3  "pױgMa0:U6=y!:`N*;HDdMT^2>H]퓶 pₓzv q!u!.k`.Όaa|Dt.@$F,$iĎQ 6:? vcr AMLWs~ٿ)1PYMg .i{⶗=!7'4- x.1NM|0J^̱Ķ8P,vU'^'RB6d%BqؙdWr ^e%>4緯{a1J)㚻 1bab " qlvr WdEޅJH]ҙ33S1hǖv9F$PIe)eiQI~-'?l6=!9u!$ ?AY Y)"lq+C/Y2IK8w)&k`2u?QUmtF3xhp_)QO!~թSM#n:zLR`vFL۱5N9 KƆ[JrCaY8Y%/Ī|II?tsJmHg(dހQ{k"IJJfS qK2MyE؛OJ8|F5ҁ?iLLeWCJEpAjThR__&2qwޅO8N;VJ;)GE^Zyz|Iz>߅W{پwFާ-ma'db-8z]KЎ thd4\xjFGf|7ʄ&Kf+Igϼ}G.vXXԄYhgK((dV$YcuE[{xeX{7NcّчjFt+1 G!R:OXGSal^Pb@ e3bnZ^F {fޮ׫0NC) "C/'#P]D0Ab#H "qxkJ jCMVbK3şV%$cs3'.1$t\ Rϥ~S;vW@"-DDLI:YB;r#sn SB) .&g' כG5z(I=>;ƊW6`$c]Cs%'&_RCy|\Gh R mJQɌ1d:@:;s lWL*R8q` L$^.Ο}uD ZTe#>>EӪOnaMT6sfB g7?!#NR dTNrGc9DȆ=x0',XK/cVa x#@Qgi/=p>I0p}+"HR,yF%w9I7fFahan`TuJR" ݠ9G_4Lb iQ;z~jU1H-Vj(}3ݮZ ߡȍg-ȣ`$Ղ-+Sws!^a X7~wkν)lzPl/+ s-,ǀ:hgrP+sZSlSQlKJ<0cz){ 8(NuE~4-?Gc{EK$8:r3 ыq4{KQq- ul[O{OqTAj“5qU%FWJchAU$OӺS^Bhbg]܄unk!MIB7نY-h8vf禈v=OjJ Y=O5gFh)&4`lB&%a]{A'"϶ ;z&%MyDP+lYFrdUayE qݓ9˜\3G4φ}cuSH}AaN Jj(ZNyMOa核V0Q&{=a؂jXQ3驰E({|+aTlfaHQk.%o]FRfӱQ y[r6dŀuJ[>xÞp0ʔRfD;cc )y6ǧ^1Q,?R׃w>|, @^!TNF(t8LgSZi -$9%3%I-,7r %g{ ǁf4*L0Oǽ^؟qY)`ECFƲ>=] 78^\)"G6J74~9}{|cWs*;^M=iHguHOs7D?K(K =058ǡ'lZsf658*!12@_wo0J Jܬ%GbQ/Ͻ@٧]TUd4>[Ġĭ]Nitq$zNVQzPf{FA 8jO(vYTzpzn"wк2' řţy:/zu$/dM S=jTqdFRs-3UM~lSGYFm3t=pp U#֢nu&m49=:{;x灗%a@Ig1UǏ VxCWWICbBqiR8rTH~ d^JB$?-jsHs:BLhaQq m.u&$_ ޒNg=)~b6NzJ垀cȺp_mϐ{F!kƝ^"{6#s 7Ø = YhyI1S#/5m(a撫~Oճ_O(q݈.NayWZ!/L0Nd)1z1E}Z,._4t90ȮF0׳9pKXDsSDW ۖUA9]r]{\ Xd餇1^@:CوjC,ḿh{Չ$;%:" OUfx9Wx$;|^ l>gPGc{b<.7>tq':LhZI_0zHXr )(T+mޓLsO/$*P,]X OSyff EƎZMhGGY5XDžP18p5㴬ˮI+g֙%9'?=ov0HւӒkYhxWG@g3I#31L :EC業i3+>۔ƑG,w!䞺_1 ?80>LŊ 7ӌPd(ڶ7Tdi==]xx ~|SQ *;<-h6BD[|L1ƨ+wV[ȑCu WXdԇ7'G@މx7Lu{xW2%󳓍HĦS'0ce1/e*GYPzhG_hx\z0C|O^_'(fϤab4w;&BX5?u(AP 8kg`׊lё ck鬧^6I <1`yw['!}NƗPjOڠ8bГdp-1̙9FB3 l}Gz6^хUg/yF.wp`l*&BT:o^ơ]4uR"ju|jyqH~=)/ ik9 ai3:`@E*Cfu@=w *0RH-1_ q/zO0nV 1G,DJX8 -ВDp9yors$R9'.NyK/ HdKLn2^H1+OjUƢ]3xH.-8-G=MehOwb?~\`equsA*rc\R}!=[YODĦ=^v\o(POQM]6υ]i ⤆;?[~\sA$U:wAxaH r[&Rh %%ao߷fw27 O*d~O+ ڃ܍/N / %N#T~BwQb3ߝ )7MfTiM]O7FWI]Sqz},?QsK$"-| x`WqB,n,unCjۉqi.)\4o䕢5EQ[)M]ծc:%'Y*k;Gϕt4,g?p, ‘djw k=Iׇ[dH_wB)1yz 1 ?-G]#Pe^cjytlrC fe(j.9?eYcoPg/r$B7W\3/<xhQ8N`D.B7[garx݃N QJϙԳyH`:hZA|B^f>+]/%< O)8j ,ޯ:*|;w=&ێ|cx#V\v"!iEeqK(=q97y\CEaj\ = y&O,[#%!T>SHN5/̓Qs byIșwei=*#NEHpsхen垒s+/x=h;g;1A'zÅx-KoP\(;l^#me;rCsss9V$W'DoIDWl`Aۂfݭp Z=Iݛ砈8ww FMÇE٬W(i/oj"v]IM,oÉ45ܱ־H&]Yp-W'Ea=V g],S&%)= L#858|sm`~7CB t7猗IuԐGDzwAO;Gu4:w[䮱KnxoGX,vW9PR{<&xwL l_ SDx &`4h8%M c+ DSg :igŠVM fW=,Y{eF4`j[]iJ~:mom^F:?v/ۨ-LM{P AkG^k:]n:5Sk#ɘ1ugj~͙3]wGb{kkՕ0sg5;Ӷu@ےkcyP\q< ĥ>E&S-f-C쫫mmBiw[WwCYMS]X=)5%?7kk*;YM.\$?lv ̃j 7m$oU`P@1ut[L]]l֛uWH_\^nMZ̎'3$-"lֶtysU׫;q)Sܚ7f0Zeɷa<@s?uj9s=u+ˆJjGuyv-Pkڻa`[+i')IӂF. ÷ aU@990'd)}iY-hٲj3qڻutQ骦 xlʂ^˶5ͭfGҖJGW7h/ 1焚Dvi^ql^U騤f:DpBD'К|46+*L+6K+f0|kjf*Ⱦ"郞^<9Pռj++*&MBо9]n@S[P)uvUZYw軍`tS k32@jKs+6y<|x~',p`4v']Q]^u9tF'62R9N5.iqaQ/;6|]v*Ҩ¬Zۼ&#nn^+SdXkۺԩglC$8lDy[m SkAi=[YyVQjjkT5 2 PW lݰɧIΜI11-× MrKT]SI-~ ɣ[oǧ\[1cN*Ӓ w'fsg xXZ]0rN!fݭ߻ެ:Vu *+&ʱ[Wc:PJsvMbu׺cnCf נ]1z|nB<; M`!#x'#.A4?iy¿ꅺy %dUZJӓks$pMa J8X,F$prG( J2Jm26\]uThNndخ{+Yaj K7l:uwuյeUttӹcCzN8 7 ^qBt8-^M7-*o*pT}%kAD'Q(C!:,F!lv|y&.y5|eYh=؁"x#&5<Tsa 1€7ǒNU _k˺CF?,oȘdQ*ѓdob_#Z5<n*϶9Y%-ݶͷyL' , 8Zr-ǎ}֠HF U,p〤e(oN}L"Ԩ(޺7ĉ-2Ы0Kz-!>@uzh];ׁ# xc=amjG9su$O> UU8!jX{8dUaɟ aJjed%܂l]BV*ن>)+ ; ;^3GX;fiM.4瘟d~߫PVTWZ BR  k3!z0{yeee `7AH$X CkGjiVV Vo^7[<+ۍMg؜{&rI9)#ag-݆xqȸ7j0 _{4YPUAO )&jJXxbAd]y%mc.R<;1*jkH/V-Ր-5("S))}VQAu맞,M1 =hh^9Ǽ^iXzNd5@p&Y&|+V_r" X*ȬYWm!nD}m~GG{+[GE,ZȈqiV![L_nXDTԑ.fWx]ĕ5vn2Ǽ#aX9O|i'B$C=ȃFA+A6o}W^ FkIJЭqܪ #bh?}F=ͥeݬ\~c?j!SM^K9}OĆmʶ'{4N5+Q_g(V0#q_s=Q"JX9h~;!qECZAEWw&'qݐ*=settaf2~2ʕ`Og7&3ȒXϤhtIiꟑYFqhK8RPkw NWZdZ٣M#՘ Ī0:yFe04}͘TD(h2uҦU NV𖔉5tu7İ[Q%0M~ N)H&K/}FaرT1c^t;i(^f3I, cʑ~QtD_G/[`㱻V>dX$|;Q`9@Yj3Iʝ%VHbd\C`(aqeM'!6O@1b\qbpÆZAK.Y j_NOKfŊ'O^܌!S"=wh֐lk2[JtgtD?L$FBrj0$Y5Dj'` ׼7 .$}1t6'K k=og DFgnwkZ>*&Ct'.QCK7R]}fNu VT .V'SM˛n/)eqPjqA N*mfͲm@X@ëNs9}gz8/if1]U1c.UkiKy@OtrkGMޑ{o5FQxa(ΆLuCGSSQė䃬:G5,|B"i"c`xU}f6>qgdl%LEDowT%fΔw+/fexZJaK`e-q-ܒⶏ<˵U3IrWq-ͫ 0q2hli_4BixSȃAc4h"FKgs,#TƆ C}ǮsZGԝr[mr,v8G`!A_?@$ +e^SZ-%Z͜l L(͈OS4֍YcƼ *P ^DLuUfWZWFnF[Kc|7l2r C>x=htn|ӸqYpjCh, x˛e"Gqiy3~l-GGQX\,6,/%_ c.wW_EQ0>Ğ.EjSȁ #/fX[0!֑{yчx0K~͛'z)ެ_L`pGcRf}$<$`lfo)Ea/dy38ar$if9EMHS?f7Szi++0=LHq\e 8$A&g2AiMY ܞ=X߃ cUATtk?qScnaϜ<`%3}zC6Q d˨66<0oq#[v5mb #jx!ۂ]U:+*+#^z jRo9S1ujr]}{Kr&':]IRA@\|7ܰB;/V^2L=8FXuo+uעkfgEqe+׮X#H5NS{ ,5lߥQ1X_y%B ( uF58 6[t ?~ 7`鎍FLlEL/5h0F70Rõ21xYOyQDjd:й}VPe|U&dJ" 8&pWHaUwfu+CQM^dvLrhcHӈ~G].Wk*]O9&h; O uClh#}ݓr9 F-sJQ^y(lC ?Y lY<Z)~N~nD9C=8Q_v[n~Qˊ{?#j$ƾ'W\M,YJg ח)]헡Кůsȍя#*Fj -Q"1uXהShw퍖YZtࡇܞohh Зˡ`cn]DƔqW\񋟁CG=oAn#%ϗvTW|Oc Tݡ8gjQ^eY؟f0zqt>ѯ Oen0K} 2 q{'tVЊp0! `.[9“T+Ej~Z\毐?TAyMP#[j߈jZ[9b0X[\: wAO%cRӥu݌f+@<|1F2Xagi][xq.I*1Fzz 6gѪ2 2\~\b1v3cr>d4 H.w ^ "gUm[ \EBާ{?q To5ҟFsBO0 ǭb>%'p'ȴ팽pQg:u %R29*x\JEY@)'s^>1'Z@" YO'A`D<C#4C =}y&GN"Fn;l=b&iY^D}?,a>8diiJm̀d/:JR-#Met>Eb G_ Wh.}@Xl{H&a2WlA{!7N'S '+"be4F?OH@_v(!rItƭpWřPI\(TZ1!yLbRc= Ək驣mrJd0FcϹB0-TXK7d2Wp GjIZK#@Rb9yᖊ0 Goa3(06è G.+Զ\=ᛉ0BImIEeSn̩ud9J1G1KVWF}6"3fNZ[oKrhOjc@ TS 0wrM fj&rEZI<[PX1_H*3f VB<=!s0GFq)Nu|Ԕ[-|Lcт/*#) 3 4qw@,ӰDLn].ݣj‡WQҖ ] @9R%ԙIm`^"sAZ]dz †C?Rmը-OUG& I,͔K"g]BFcs{>{XS<᥸>OԃM&b"(ïΦfnb6?X,z*qmg`8/ꀥ-'{ 9ʣ> ]sDXnmksߺ.nt>b,L7d3Z\ȏx阫88jvo yNJj]oamhM/yv2Ҳ%N0)+ !9V@}*vxJjNϋQKoKN`Sb> L>Y;fL&ḙDLb/2fLc6bH9z9Sۄ3\jJNE hhd9NـUOҧi CPs.aJYF+J&HpZǦfcezZGuTH`b )6"7pηld%I.GAS7pl~ ljj1Г0E̪\Ǣ _LR $DT`s|j<,dB|Cɪoz&ZyZ2vS:y认ELg35S.z'Wh [!_ d3 T:*ѪN8GS%D&\/sA*쀁biXʸV_,(F2ܼ t?a|@ɿ{eA$u)3y]q:)jѤI]LlT*[܁dvWXcfW4F',P152#k/&/}y%9ՈZkrr5~f.}(Aϸ7:dN3&mE~rR3;@Z72߇bTm ̺3#E;R[eljIcM~uXMDu DN(sL>9!5A9ĻקSeu;jwDu!FyXFӉBZNT΁y~2g"N$ǔSI6HP !1R2 ՘9Ne$aOP|CIm}%/&h͛SyQެYCaDP]p+$(yl)s Vay'e0g=-ˋdW_Rl3[xYQG(R/f&gֹki5AƄwӂ"VX\9-0uPr)@ Da@x^=}ANŎ+r՛CL2)4mk˚1 Ѓ]xMM[?I;h(s4R ~% :eT5i7s@ǽrE0YrMbq8 3WBC: ~h:$$qG%Y3 dXf?˿QD#nm2o, F.|=_x:BG Ul%%HJTLH*K0U@_2r+kf#QkL xfb4QkʻZPi#ݞ4Edsk}}oLyI,w˾7R%+ nQg>c4X(/5d2y6DSop`rfҞdLO\G)=H#ÊҀQjãȋ&k1gj>P@aڒ n@)3*o (g6ĊB^=@]qB7vFwkfG0Lalsݯ8c苡# Gx*˩K?z%d`a&7| #b3bwϳ= c^s?S kQkhB% "KHX]YO[TcbpzcE.ƨD`Nm7:W:l\r'p'%pEq9²'1C۰[Efz8Ә v ˽gމ}h.{A-x皟N[eٜ2P]X—62c~i";> knn  kfK?oz<Xꂁ*1t4K:@$sQ'!U^IU 3w`lNvn7?yoq+o}6S']xNNN"g~e\]BPE#P('ApԴL]%< k|*萆Sl ,R-dWPBEi./Gi 0'F4*݃/)j*O9j$\{ȒC ^O+vs_Iz˷w`ހzU}ݽ{;=i ̼Y#sR9b'Lz-Eʟgo %~T#i,Xݟ$X,-1KaT g});G>?|;|v {KTQ? 9aQ7:B,RAC1<'تjVWb$P+y'rK zy'ɽ{p^R(|'J?5Nu1 |_iL1Ww~F˰j+8 "دA:7җ &or%՗YI]ϽEx‡}=RݡյoJ- 1'0Rw8ɼNIFޚdKdhJ?(Y^g8z>USO:P@&<?j|0LFǓ;R~OeV ݾirpJŵʬͱAֽ }0ߝtj]*V>k*`rs`܍gw9a O0_z&n%-~Gs)`?S {GНka2"՝1k Yl@8>#ՐiY<#?_eIH gkIɘ{,y[l )N*)yE]v9')*GM}!6MP4|ܥY^47•bU~REg~˲PRW3s_Jq<ͻ,%*׉F 5-]nFfф+J#@nXg UrC^+L42DZC>7r<,lYY4~bF*{, i^AWrW V!'Ѥϛkş%8Ux_i;G50[4㿯gg57g<@6x +gekӚ닌pz-S FrT4dJ +o 7pt-£x}Lwj }_0'hŨ)|d|ۧOY<ο-} bP$ m{<)wIH9ι"UuHO~T5ڑwW̴3M_~>otm{N'փ^uN=I'Tqs**ĺ ɻԉXB"\Kb|qΔ]%S_ғ9dIJYUE4:\4=%ʯݫKCkpD$2nT"rA#ێ;-}A^ogf@A>)]6-- }wqUNF: /x?n 9T˟ _N R) EN1#׺Y?+j"&C]@;7iH9Мc_ZʄbLpQ#э?H+<-5$9fߑpHÏP\^ t&} lރB )ш1>^K=y4*NmH7mhy+gĄ$m6Ͷߌ/|O2StMM 0F=cǫKdQa eQʻd:Oh*y\(IDlfGsh/[oqStHo8~%+2ZZܚG,!TE*&ʂhT&Hvae=g gV;6j5FcET̽VeWgrK^8#qʳkf^3^[:g4D3Y*g)6=lyLJf jˊuZokidƵ) ?Zi~ɼRV8!=¦`ZΖ #O~A?{IF)wl[~4*CHt\ŐBEf?#h\9f4c=$F&,*&:[Mچ1$?vej&uVBuqϡ_;jaZ4݉QU7TLQHʷ+ϏԬHP&afeIu2RY 8l1*VׂǼjyZ TK`-gkY˚Y\F9j+/fjA6mKwM()i2y%K /SdSy̑\[AYVO#[6|N  |e֘gXjm8|rr+r: ^nM!WE2 e{97g[HsVM/ ֌$:Dy:f"2;[%O`s !F-c-cnȗ.~+Thd.cEpOs^ >'Tx+Zr$,svpo)[eGHd]!vZROHy@)~ugf Yf,7K̅Op Wtɿ̡kv Au ?}|MHH0h0bSvyb\gy%0+/VFYv/ɐigJXݑԹMCZD$s287`&;Oi~t .TdZ`V߫Z%_AEҝܷ~ Td4CޜJHkbqh MOtZ-TF)hڟ{Ly/~V'29ATr#J,KjIJ+r{'3p/CA\E [9iYڭ՛&tw=4lajǧ̽:0N^%piE؀ x=k謰'H;b:?/> Oʜ&ؘG]Źht0CLx^ѡ$ΞیꙎU羂''Se#o&&N ߜ2\dTHN{Dҡ'qz2!1 1gBF]5Z9ko /Q|0XHFawi7d Nqȭ%QI &r?Vߕ!q(R!2zh矕mcF\E1s5g6n|5 ۳8CI^MLUwqL(kC7*8INCqCM?M'd{|ȃȖݵC9g/ٹP|HO!$w,PglJO5 (6+QN_Q6dA7L$wY53vYvbS|&ӟ>W?#j7M%Ψƫg;]/H ؔh9#m8SV:2 :L%OO4'WcCBu4@d$d +lS^[w,Wmm˰:G5JׯsT(!ɠ_fJT K%fJxŦԙ ^ąYbпgV,L,~c @`WGӮeYͣ(^%ymTaO &!^h.n-{zt=}7nr x3Y"X!7!W;c$7߬I6fO|ύ7OMmTLyEzC֓Q{~K^ od-l̀VXE 0|`p >!;k!; %V!Z(03(_ßDRTFzǞTA3-/{M1P$M"GӮ53$ ́hg~7|mbu T4ʾB^tK8t Ht¬^6!'K$uZb'(Ш6$#gQ*FZZD)e[/):vOBSٟZKhc=c,* }Z_LQtZpZa͗!PV`Bm&&''RSBCmR|`K !8d(Q(v7uūl9dK˯V4kf1Z~-̙g#5NxÚ"bpn[ϐj1FAć7934k %v(IѴ)4ez)ZzV1t40hmLWZ`C2iE88n3"g(N|D)3d .Q'Yc!ZP;C5,K{(pܔӡ hzl֯mwc N.>[LI6z%@8ANa<҆ ?rֵfcO*gXFuVn,SjpuTtx(M_Q!_e6q9bR3U+t!@;sSdoM'_# ɹt{h!&\G1KJH?G+`bq/? p*i@njJK0@5a9ϡo^H:/*Q: q\^Th &NJ&R 'seR ut4xRB,as64B9iCmI9KА%g`a0G 7G:!n8=z3 =%*0sYF:i+*XCNuI{Qm!宎{|dm23%fV==ʎ Y 5 `E8a3AVdHn8{}o ш;;+@GD &OeWbӀߠj0޴sRrxv*{}KԡY!L`OG6B3Iva@敔b\ 8  ^G8 tC0C08 OEgUѨ$?q*?,ڃК, ;~ LC@ or-,֢ȇhn0]ÍtB2VêW갅#{kǮfҼ%wP94ȭ{2ϨeЄ) Ўh<`Z4H\n+_<f t"$VF7N#[d/jS\f1se@hުS@Ӓb[J٦` ^G(3[ n9KJϯ҂Ԥ5=i\\oq.)}Sw cJr#ࢡV@i=6>҈ʈ6t!ШU>)m+4To)*71dl8Ban6M! 5Sf x=Cnqm@g,X (.ʳip\#'hcS@H:^7Ja4؜t Axu5F1+"KDg`۝#m#;@oԖW!x6C ]m˟|"D@,†ߡrpe!ڴT)j>Dv{"mdXilc׀BtX":KZ*kc,/i#ڏp(6$dl n;¥@fQ0-oN׭VrTQ _6ˁB6^dt"=9:L`&mjT #JS~Ae>Dw&aPRe E PiW] I,{><@-1T]@O pBQ͑Um:+hr"Ӄ g5-I^hTS*P)qr:$bҵ97=괘`PUP|h},S 䪉ZX0+u] ,kt㩆6|q .- 2zC_*h:p7Uӝ/8C*; u+p>ߥspA㟝j!vlJ۪^A&N BQlFkI4T!:81uPN)$Ƌ+Ɩ8JQTA T]jP7"m ;+u1%;@b>2Eo"c>gnc.\g^B^ȵ̱={.an&cq$;wJExxOn,Li?#C3/izȏ6.yCՍTY'Kj:Iޟ$Sj$Ҋ߷g潗0+p}an3 ZbN!ppd|3 q % 2K%<e8a_OMTmNԢ1M`jL Ku)"[g ղ?a\f;_C/lk'U"$WQ=Ay7Խ?ΎW;0F4NϯFCD2aPKw6'*K07l.IU !BBɝ6?Oi|_jHWb+Ϝ:eAjb+U~r@j|xW1k1FNG#3Sy|4gJ4|#wqe .l꜉B&-,u_|H'*W*И[N*7A9?OgP8/ZE'Moo/wɕ9Lǂ QZhS>qh`Xh-^O\t&)@>|.j"bo 6()Nc^+(yy]+1_jA :䓉&0Ro6M)ҍu#E>{&nc<BK@UQ3n@bKZ޵"2LD M*!*| W;a*{/Y*35R0m10kv60o0h4mOY.7cas)8lCej,W>2x>}Xֻp %Jli3\jNwj&s'n ߾؜Hb +.;{CO$$|1/a]ܯ_uBPr[l /Cࢉs=Rw]N%P%Q xEnֹ_J6]sZtilK|]_EVRYeN3æFޝ Ѡ) BX3u1,.6@ss'uk#!*:<iX:$tҴy`oG~Dۺv|O7XZEmƂbs_ @P%#\z1_qWN1|RsU 3wg,ÅU*NiԲ5NG LkDŽAG9aKңE#ZXϞ Ek_ 9MF8R +P+1mX)@]؅эft)Ӕ UdCE.SBeڂ4<}Sh+9)#2:֤[Y&J }G×7z穱fjɤ)WM =ꐝL :ژVby?!Qq@;ͮ:r-e>.kw pl[*-BA(B /L ?B#gΊ2}Ive_;[ӈѤ^<=k|u@6ʩ PfxNtV;y%w7('^3=!5w5ʨvj{~jUI^ܘ?HaW NF1:h@%ByٮLQi[)*|Dbz 3O4H\U"*Vʶ=5SĈPBQɐ&9!DZTMm Ѓ|@?v&:G~]X0*;IGD'_5#tS=L0 a0 2 %ZCqh 74ي'U +ÌNZ+9`oNY?}㭟>_mT9l۹=i_Ș}  sQPI.hq!E _bx# sUP`Kt7(Sى0F,sŠm풸 XpIɹ̘?]&0ׇٕvBpb#,!.d6{}(섦¿P˵bec. ~n(` ?6PGPFIwm 3壩)}mƽaYnW>m{TunEi\| ^F]0vX))gy~?XT+6% DD!p|D|yuH\)΢,ߊwpfкƳcHx0JO{-/eѬo/eF|6 +I oad27{;pCsF;`%"71)h4r^$:ȕ0umQaxD~Vx FPP$|= v[BޥWSy4B]+L\Lo g4f:_̉r_LOZ&u\TQѼ^L:&c^fɝiͽ\[l(f1G%  U #`˒v*8#gY3x8W)ljE%I:@])x%8q1?(NT[_`2+=<2ߌ ܹ5(e3IAOV /8 eWUz-++1/5U Rd.Zt3;)o[}.(q5,XzoG 3$%B[GŷYcy9]QqDgo{֯6L-mcw LJY8]o#zߙ 6.l>BXxw"ko{GOy$;/~T?޶#}cN7}7{Ʒmkv3Cv/o͘/Ɗӵmc;So.5w7{z/nU#jPLUSU{xC{tte`S@UϮo쌮x e0 Ѽ8BYﻸy<[|_Ym|qWx|sAW;5^[cEc[F@oX5{ ԫx4vbkn߳?\Q@9@m4^[IѼZnhWfv_STWFx@ȔY[B#ChG`#QuVw uj : nsDtSF}xGKmt&1<@Ƿa|؀bpa`hMwj%F(E=3:>ЅU3Vlr;PoV\+5{_Εi;5p0ΘjWw&X^)U`ѕSzq5J֓mwplof&%s/w(̚'{睻>5^ UL.Kz[Xjs5I܀^E4{IcTkgQW=`5jX~% {%OG=R<y h֍<ؓliG; N&!@_?PfD4EbpYŏ<B*)Jp?rI~7ve:GW] ?.wvgz]d6?+U#Up^nG](&+/w+?jkk WUs1̭uLTçNj0Zԃ907; M*`EZGqmZkΝq#h=kvjR;ۣk[A|c^, ضO/mo&[pmym5q {¹:T0`TAIѓ~l* xؑe!ת 50yRWxJ< "1m)? xt2 :*Nx]DkiJ l5`Me^@/h!+R9D(OgT".޴д!XП9."mVd)݅23k?03)ٵN; "čX |_Ak2@ױ"XQ)_"! +^#E^ܜ(|<4?rNiє1"";]+[oW'IﱆcŷǚpGk[[RBm8 L#U.U V)v$]-E鮖)6B98>!3B e!٢G򕀖=jA$ymCiq\}r蠈^=/$jwΚ$t=?z2 ."[׏ځv18 5c{wE[9)_ Vi PAJ(ݠ՟m`\'yl\]OB^# i*3*k\luoUi(PZV=p)zZ DC֏)K |Z>m&\[`juG:)]i5*JQ+F& /#Iwv+N_PL$yS ]J\lGs'C-${Mw- ۰N)OcGJĭ 4l{e; zdRRd e_ܼd܎˧0) `߇ Q֑? l`;͘`bB5ԓZ%wu z1x5v(D,iccGD[/kgQJti; =kRdJiw|?ͶZ$Զ*B,L 8o=Pщ=Yn#&"X{.Vm!7%xgQ.3cE0}{`e+Z=G)EZېXK1qضl/y}G\G˅ 41G :f QrrQ{,fX$j3;4rfED5R=l=ɅH^U@jذcFS[f;xcQޱhE@!@t`!?lT=0PMG<PgfhH ct+ ^]9&ӏ)"^qc߭M[0{q!bhRȆ eVlhpGE™[zNB$!߼1@sh/bLahr:2lO]nF ##?֪]Is`))_3_0HH}&9g}fJ+JnOoJA8?Bv%pyd(Z;vU _1`Lѹ-~筭8-n4]D1d IWVN &(7hmwIk[ wEB{QG BaA^ͱ)% {܁*/z,PMXDS`tZ!kh|I O+fJT*+O#}{qW;H$IK+όEL¤S-WSoݴ`nZf jVuK$3 (=Ca)R v%h9S,$ ˞O }x[LJ@{W,΀f=M6(  pEQv2 f:+yDșû.?3HzW& F܁,!0m l0s,l*[iQΩz? 3L?X%j$ا+qWC_~wJOT Cֹ)\1HkP3FW)3i?a 5R5.VZ /jCS4}OfN|'&\(dMѳ :S5b0w'GyD2Xsd )ג2ގUc%NX{c:`GlMb;T{V/X*mGd][4`@?d(ǁ@^C%$`uK>$Ue#joڻuEsÌZ dRٵ%=g;(`;xk{r3llJfdv%ejhͦpAI/E{} dUJ@N,~,i(6RxبQ G-I3ԏbQ=Ih2_Wt-23a7QmqaD'O%\}"Խ QĔ-wңOp@|R]zzg `aTRP Bea5mx#(QY*RD'̕G rB ~4M V]UWqUjPܔ_A)BYf(RoQi7 qV*";(Bg)? 5 )m֑q9 ~d=s =ƶm[(T{.5~XDccP> DP%ȠX2X3!X1E#YR:z sOe4~8 B`9E`[e t9;NJMFp͌eQBԎRb@ih+=X@0Dp ]잉9'(:8"GA(u ^P  zjcXF27Sʿ3Z_H=Q;2P&2 l.jֆ!&PaIda-&DRED<-/][,ӱSL)+_(j{?]E~+Qa}f6a^3 ULaBp f7xF NxNjt*HJ6-C剓,Tf ƽUNE o {A*V0|]P ),&S 8.`bT)Nlaځ7 φmߐH9f:+-8 WF'S3#^ z]e~fg8,Hc S팁e)S)Y,Owֳ2wDDswW i)~Lr@0&Uذ?c]WwSd)s_ތqwΎ.sfYdj\|Z[~]+lsm' <`ӮW\2`'g-įj􇲡 αnbo=?!)Gu@iYQ,<:y_l6 VL@x9ͼ@,f1&YNS }g=LRPcyץߤ23#X #IOos=i>,St1m֒9JlՊ է3sU{!v Q?m@P,}=~W PNTkNH1\jU'!Sh .y?^:;PVeo(ShEMԒw*@|~D\f NM/-!# tf~Vrvc4[6߆֦;(;yk×7>uȕϺLTe &$~>iM]y蕮@nu[*pw8Q`\w=c|E\Q_S %3\' M#r"[65elz5s|Y[8EqpPT/pz(@)ѩT#[n[ȋ;F961p]r0Nl&O:KDn$Km;Ȇs;{qz5O2ck]eŵghF T@u0*`g? [o^`i,F&JVBuuDq`m\:8㠻54^Y\ay. kQeF9VՕ3mJ\5{S4cŭ20`9#DV=8_Ż 0力dې \*]lcvHMk'ᯙQY-9Z: 6 +Ce2[,Wƿ=8m~5&zd!i+j/1Ҽ7<j)TLnzΚ*[sRa^UN]Z=E{.!RbZh(cut(mN]g7uP!=fZV[$Z,ŕÏņ~_Щ$.g˞q)yݒ;c*5e޽Q򐔘Cڐ]MnY"87ɾkn't~{PEswD^5ًg@_8eWf{ H3gzΟ9xg?yL3s3?S6'afl܋ի]pk ^#} `n>?`Öx]6)=:d%p: =w>6 !7z.Кp>8qNmAdZ`zgdH ʬt䙗pue[5tV(P42L8RoΣF'*]q{!]j? *LJY!ahVQ&̈mp^哯6.!qo*VORܰ,&Of\a(z:(j&CUx(>r ,q~KQOyid 5^ޙNFTL(:m+dR<+Dmg hp(Z\,p#&LA>7һĝڙbl)1Rm4c*hShz,ڬ6Y51qM#Dߊi;Z.Q2Tk;RgԒ}J Cc.@5w7]!)J͓RNҪn$z?ٻ%xLĘeC}c|Չءɪ4zV^oqc]f| DGx=Pwyjc\X/XpJPT#yNΎUmB/?~vQ]Tt҉B8[F_G _Vo%g?Vj'QN+|H\h jw!ou+W7~*(Dc6=s7.^_DO'6]p/r|M U}%,\wcAHƝY#B]\M_: #0=}7~[?}!,4ne7|vE+ cMf9+ \(Tp[Oe~6iV?ͯyp βls#bA ^&'+5Sv`o(ptWǍGSf"ђorcl"wy86k#-s2쫽h:GS Ņ\*z4Ux.E4uh.v nW4qцܚw}~ Iw9CH{āNK<]8:j"qcj4r@L&r}sKnoJ]r(.jE}'W>]=s .]y70;26j%-K3{XEމwrl('lŚX.{**D\ xdU0HkdX[ HW7Df6 ?/_}筷y=vhVZ혉 U }'ϗfp~'D#_?'_녛MK % <#4Z:lOyš9f6c3A7eIRvedq!eIT&w"^r+.4mf>h3|~$pP+3U;7AO( Vnvel)UM&i"J\"38%5jS)'S}Gꛍ8I-'iH[[86۸&i>փ3ݏ W- ȩA! {' [ͺ=ܪ56M_ꕶmьƌY883\T{[DR Fȩv vjkZrDBWQ9ފ&&M g/k#ěїjz7KwVxN^/AڇS  WL `Zzn%厄B}t)n/+O"|9/vsqEEVjL5"_>  -}ʍʦ |<482e+GtWumOr3k _0r6⌒:Ԭ9qc!;~Usws\DE$O Z`^IKtqـXO!}) %j%}ZԐ 2*l3 \hxK;>b[apJٍ1kFTQئ[V4㖚?d6KF}Vz-oD7oOV=LF()jP6`m`ւ&!^X:A-֣ puT3 +Ղ {Z=co%"~'J %vSudQ)H5xM,'&!1,D =h9N7xN#+s =f\Y X @kkęN;T>F]x" [qJ Mꂱ)-G)7]{PʆMm\^y=XBMt,/9!N'֖x&t1i#ZliN9m&(7+0CBr`<hecʰϓDQ}/At`/b ùhu{hbפe A^U1I@u"uQ.Z T L=7tUް čKqfJ \'*ٮwUMLM Xl"{Q# V; ^ٝb&vo 2Zws0&-6Jv_ihɓsnXWgkBђWBҝ8kf<4GD &ک{ Z6ԳVcy+'+p8qnOjNٲq!Tַ[O^91vkRC2If@QmG ܍Ni%ƶG"gn>zQͶ$ k~>Ȓ堮 WP̷9q[=u] C'*\TG;ĥfޚ7 F3F4C(^B L X² 8%ga># qNcBjS$Mr^^汳sq*@D\GOhL̺)vdQV(1VBQ gtkiW oRWg6&?~q" cb*yhRQ `Mj glMᙱwB+XVhEֻ-Y0}P3h 1Tv1Vm:>D4pQzoyUz`nݔB [UfWDтeO9d촬nӚTv-dн`f9A1(,0dZ:6dΝ7q) LsCN4n"4*ڜ%<`r2^tZPByLj?4L; \@pw|\S .EIQdw.XtfM[֌pW$jCrqFCS^höo)zV2jcUțx1[IM~tBlril 4&Vs]#2׀JQ_+NJ}S,;&%R7CgkGzeMV[9!6O30Ö6k;!2HI3^s2bE~{fxT;N\e%)t H mj}wz,љL:u.kQ1ZnW%[Vwn,+v)MʌUQQ,癌^b7~E v`Ƹ2.iJC;m-zݨ˒D?Jcvd"I(W.8Q‹'bmҥ1sM%5+#ߗJ7a&md'j^Ub; Fꧽy^Uz4Cb:ZVPӖ09DZ Qή)Fq@7^DreK`Q:cT{"¯8/k1D::(@dBd/{EgPvre'0ehhJNS%sD#K͝P1nӷWb>y}Rwz*ל*iUliy/i2>C5ٚt,7d+*0NYb6NH\O_r\jXk'm ;]ZzLcu ^'9U#|,0iVrk\lדEq ge /V 荭欓R;Sil  އ~ S;+9?8 )1$m[omΈ 9]w t¬; Vp%^qM!]uPS#8'Clj;Ӛsbǣ^\F:r0|Z7:ZNRXdl>Z%&s{J\{P bk0IFs|a%>k ? rq1vy)Ţhj1/PdݢT4KkdZv >`(c'Vv yHt{y\rެNG}c5R|ҡi;yϖ$-#l䲳}%_2Dx=K`܁lKc?¬Iw%ycXOXo<וّKK礍3!1x;Mvv2WVbdƸ%8xbiDuxjcIP{Ju|ۢ+ f>}!?yӣl޺zDT/!b7D6_7Pg36ZWKQD&qδU_@DTp |0:^ -yer ҭX IJ*k7OYS^f)g@ly5tR,[A[^CʿK8N[i7:A[z5oܷ\?.zyF%uc|D0Qi> ,n;͐'IŶʥ$bo޴.C/T 4&gg8}qKS V6ytz^= )^ޠM)gԉ}{5r* c=jDZ l*Ybsz=9+D*d<?rgcb=ڂ2mJCCmz:@i:qIfT~ݙ+Xdڋ~qctH2$Ie%mL1[RK$]Zp+c wwZm&)ϫBN29XDs 9ss'SwKkJRgѥ&>y [C>#N2եצA2p3a}QRӭ*ΰ޸#^6')8q55I܏͘FlZE+*@) +pFSdӲ$j[b淈MbIa*^Rx5^NƸdc,[O|p<ɮvɳ07-Q"rCc Fլ!Jҫ0J{x&MKyƣdB$O j#-Ky$aAqŅ잩h:_6{T2%uR|r1SI-ljkKKhD:xKRv6֢\ЦB+BWZnuj4V{>QDńoHFBEƒ6uYr%?t ).b栨 F qg#% jW6[bRF4øX"I3nU(n o[њq)HZ_6Ѿf5KӈrD9ER$>6yDo_Zʹer1A7OW{R Fl͖%L*㣵άò,Q#Onz?E\D.<[cuC*_PmCgsjn`OЗ,ۚ sQM Oʿ`mo 7k5Bv:jc'5OK/#U΍Fur"Y <Ԝc}/UƧ5Ge<9%?^wG"}L'- Tڒ堌cR'W-]icUS2|n%ug6LLN2uN暶ߤ]DڧmSqZ,w/Oz$:I28OStR"٠SjPĉQh$ƨpydMdvI8[6qR`JdQVl+s}Q]c: Gܶv5-]TWh?1ѩKȁ[W)l-!oKm\_J_RJDg5hM$hXńSLMa~gttIeFEcynoz$[Ad`[}U%o|8$]Y CwVD{@Y:0Lb~TH6 iyum\hJNG.穦9[^m^0~K[tNHPLTq?JjF[zJJ`/Q#6kߤVioQXYYSz8'SBkQkym@~޺{p<- {%>?,W6U`C~ ɦb}(#&kTIIԮӐ!&#`I VM==\϶]){4Wbt9M0c*S2g:j(Uh_I2KLd٥ SYel",S^l}!bLmq2"ϔe7Ö~iiOW/_UKE~vtSǧWv%]7n!aV/ibRM"bhh=GyM|q;`|N0 9*u1oS4ʯ, @z{AK^ S G}xhY_F8 Uҩ(\(@^_l8R =П7xaq$.ᖳ^h1#p+9~s!#^}m:z+`p|b zx y/*s$( y#~{AOϕP"J9H!ߝ a hM;C[\[ oLi@#Aa8,b zʿ}A!,Aw Xj# u_r'|.Pj8--{|~( d[ޗ!X ^,_{͝96mՃ,睛E[C,wjbKGK^ y{^>ly CGAwF ģSt*E˒Ξ|ǕTRӁ"6\l06 hψ8p7K8pa@FRܥ<[ ]Om ,v24;, :9-&S8M, MYi N=H\6*b {;HmIk1P%XA%>$86WN#l c<{óW. K: FOݧ<M*O$D)V SJ3і*`8(I`4s#\lo@U[DEVE|mcctDb&> @RÞB4AZ*5"% 8{ S >ErOA<.<  nGBk?@(M_e@lPbIjYM |[*M`WҒf(e2AJsHz7c-+Q+DԬH4\h!E;;<hK_ må`ycM%؎'8+PŨ|VUЦp8xegR( IpUihgB ,ZZzl7Ȧ'0PB^=Q2'lрͤE?VQK%M/8Vw$)V *lpé >Ѷ#T^$d<{5Z[g< ~W7̢D햖em62XN~*l 4 _@膘z]2 @0z0WF@cC)So+p<{;աעQN9zhFM^2yzwE.}ߡ6@F"}!RT$7 'Q@IЎ"L1lB?fܹ Xs~|InA$ t6xs1 QZ$Ql.RLE?#=t aOnr IbHdF⃰d,QAh6 ٽepyŜXx`Hd4+] G(ⅎ%߽VɇuĕjM yVNb_;vee A"yυ9#WFk> sŒQ LIhڲMHI;f0)AtÂ] E"mmR=)*IS,Qȗ(hYzPz.2DIf}CFevsp+)VWRCwUkƧ”)ZR<\7 5A24J)~qhfN<]eL, woeI@,Ulk %С-^t&S(zf4gA˲avV ѨķSϛw<=,w7dU4-пY"cMYEeC HD;WC鑾6a V KJr 4D*9ԃU`m()𪃾! .`_\/Q&l.QD-⺴D@Ha\`՜"^]~Q(ZO⨢5``zT~}>j1.ת3r .jaASLhcC!lٍurFGHZ){0#o:rWYuHsLb&Y1'q̞}8[~}`}fHmݱVe||o}-`+Tuvr8aRЕcW iǸ GJVe tY|~ 0ЈAaA+֖p'KL4sW#`۽oU-[fپ;xx<ōI p0V!2:KEoi֫9+M '~9(* B@X :^_k'X-|{\&D8= ZEWtG+\wlyX47?ˉ8]eޚy>?Fʑ4R.K&6 d~HG=0v.o5"N񧏐/]/^ A!g N-^\O:gшgIQØM cv&v!EتS$9ל#q2K٠f7Aɝ}Z̃%܋9\ȩPƠID:CA ) `Ȫ"Q\rǖĞ=Tډ^km0(+ Q?䶵RM ұ@Kkw6^EM$ZרZiq?m5$>J G؅ c]9hX_DvpodJc2va1izuxIS t; Mr9[HJw|/:Q (=" Yj|(@`$dG6VdPXH*Jor ]'45mZd[Zkἲ~BL &Ō'B$OlYA@ё \ ưm G c ݅\ zD hv˹|AgP&6&Y%ܯ\67$U 'Xr [-0bD'Gj ѱ7 dNɾv]>fS¼^R>riCS9ea>)*dzbpSSÉW5V[L-&~cryO;z}`g1s։OlbeD:>aBO evVRj,u6Al{mȣMY$jW9톯~?!"3ē@,=CDdvw:uՇUf-y--` 'UrN xB@yAE$eDWWLis]/FҀsa!Vއun u!Qs@횦jIMhtxϘ /9-8*;}_A}bVc;,5B;Z@x.$;t yɖ]H2LXۓr[#v֬.e6ie[Obr3Rb9ػ@]y&Ӿ Ei4Z,GK!rp: RA6bq@e6Ѱ ifɠW^/磿P8gnmPNOB!~o]>I:/:N5 zG:78)5'G[QJgp$t x/Iֆ۾d08lPM8*-)UZ ѲN;iY>HA&wJ/-nn Ċ'z[[7T Pg B=^('7*e#E09s1hY&a)2Viq N)[+=/Y$Q*(4|>b 䤳@ '%RH[f1O#PnX:D [@xnyqN\j`,Z+l]v?rJ"Jn`ꄈ(GHІ gbNc[lTVrn cƀA%AC6G6l4[8U;/;1^oˡHυItQlVE?t.@n $RITD/f,A˩wof|W*Mb= I ~4zt}L0xdI` ,zĊd3O\ع WIh? TcCIMQQҫ|`˹`  tFl> (vHˮ|o0_"&ށ2"Œv (  X9PWJUDswoE-|U.BUѼ)ؽaKB;uHݛLh>*5ɻ4X[/0ݬ]WU`PVz֪#yڵcx^ d(B|QzAxJѰM[=Yܽ.T,V.|HJg 806^h@.\383ft=} ^7׃r[ t)M<y(V 3"sEC޿ȿhͮJֱ Hv +@. B>#*W~_?jgK 4WVև0-PZ5\Gyo4Li-s]e؉^DoIx|6,Qɋ}|KUHQeHjYG&uػ_#}drځ0eY@(M BUnWp]<xUi^"a Έ5*Eq!,ټt!V%T ߈+,GDQl@<.~X)ݛhZYB"6`Ũ<O<] !p9@~+H}NԥXNˆ^0JRDxV ywAvb4R8[ *>PB< H$4C%J}Ḭ!|-L=gf@B8 vQ~\ǴĩW$0}I/6">@" gC)c8r:dwHV<'x<& +@J 񖂡""spt@X9#OU tKnx?<]b48Ye UY/+fH|&D (`Q@> h1kW @? uh"]Tc~/Y-TJ8b=aLXHdv7tZ`ZW+l-n'lo }Zy1g.E]U?8q9Z?9WKjl=܇|P(#BҴH#!'iԭTwoF^So>MUe 3`3  Fմ[F::-ȨI%@$T`qz,g~ gA2sV8Á vG&39J+B ]N b%1o^8u'ꅒ.Yz0eejdЙؚ{H{@ %Yoy衃@8SrZđ)pF̚}P88 >(ՖRymI~`yD@\bKv˖QcR tة7D. hdlPBa2l~<+z,azpZ1l[)f 9RDN]G~dPYR gfR"](x=vޏ/,^;N<6i{ȕ2_6d=0nJFg|U`ծ9U#83@)"+} p; hu!ui2|ĺ J1zf" |pPB%KAl 0, _{OLEcai Eur WK =`Vr%ɚnߋʕ{jpzbV[dBv(o|Nʺ_UK琾u#fxP ,.b VUy)к_:%7+K[ȉڑ%$ɖ*B|trpHډDk@jšϘ|6 M,N,uaxgkQP{ i[(+n`9ifX.,y#eFq}"JvE&(f?hMV0#(I L0|4zqq/J?Dڲ Va2C:;ĕP'AyvAi$n54"j|v/hPR\%؜QM;4_!C ~‹Wh4,x!* \=GYGRxG}Lz~D:]H,~Y)ՔhŪP(5.)y9hY'Kyl (aǟKz"/ AYA\RZYe'AkdC=V!&1onWj݆Ff~9"}GAQra Rqll>0d9rRryGO'P^@*,2,pZeD~Xa;kB1LZC/ܷ3d* 3s~k|x@LυC((c͢X [i Pz(ULZC`3;|j0vjKafG\xm'S Y َ]GHʰZ\?'+k?IJD[YŦU)arc%9ܡ ЂxIS͍xOZtl86fՂNd}&8˞R6i1jwhQ*M5OINݣhca* Sq(jheq#hi9h@x,D4iq_9cO+IK)g;7 wWrJnºx[|0KU&8y3Tu@(Eڛ:2'\?jʲiuTX7cQ r=*m {ݭQ%txЌP#P8}2p+ Y9lH yX3`!aQyQ:A2rMZC6>!v`ނ(A3P_ ÐK);C*% :+}l<uF1$kVѹn>r>]vg j4dX.vB}5J""O%)7;6&]JbV^*6 1a[bNUnϬF.R;~@ -Q"jgΣg^DڤBK ڧ| 1 #mzN]/%]:g  +!e >x7$2s#_HTbŁX#茰j5%٠ W tabВMQn$H, muB\4od'щ>Qwi1U?RU1{ *mokg MfCIs/:t :2(t˸Dw=ˈ.=%KOhh$"VN^ё s¤"'uIu}}b8ظ2L+O%tϟfLmJ_n{ Pw e -#=炢ȜiA-H:K80rxLО^6R Mjs4 5`/sRn0D_3&H5 * bu]BT[F3Lq@TB2P9'P_)(-Sd#(L_T~rBX+VFf/fXJL1`g+?ѕ$k9,Tl CFrvdQ)`4ԁ5˼3: Bq43ts6n?ybiDo4/ wQ ˗(o?U֝wPTR9MM](3o M'XGł.HE`YLޅTF4Te46}ĢEC-͓g dQτ}9T>a| @dAK Ehdw13mWe<eDO fpاy1Yr_Q/P{]s?.ǐe žY6xi3yMXﳭ %Qj%L&W數uĮGB)7rVHiɦ%Je$hYkqT5Š`A%"'p.- BdĎ]_RD-;Ȣ,HQ$C6GyN42k8'dp>Zèī 1#?M%L2GDd=nW;PW e%f :Y; zuhx vͫ Vtq%YkZ4uhHv{0v,#*]  QdYE+r8)\:Beuҡo{<Sיn濚JvJr9Y4!D]:䪎C7KzI[2c'5)~TC@Q @"?5 ?z) $K !Rs#f2(`$~*acg]J@2|AY:"Rab):M QQ*C/}Oo~l"H> &ǬW9i),9HE`g0 KN @KɃ:D|5|h܈SįF zm.pmsiH=!{aì.if;O>bn)>-z%E6 S\F+5W%Jvsޞ| %' m e%[E Gg~2'-ݑ& ԥJ̳%=ꠌRF̆P)`I%ɋ[(KN4Ч+0Wi`N"' ߤ(:hI2sWHN;k|Q+Oc.i5.H Dm E1sɐe?0UV€Bֱ'1IDSrT[K`OҬ QrHBYT.W"!s צ4h`Zp( 'x̥zjg \]&/QrNkеڔl߱K։Tic;= ?N=r*m]!J_m˩94hp8~~ts5q)9 %c) ˖Lo,ޣhQ:EA9tޥb)~a*ɄNSB.dKF)4}uURʇcVb[xCov?"MTHDe,|,hp&~xl3-  Dg]_wЄbj*ޚ`W /_AO)f+Xz&SغXlJ7ߔO~R.(DrzeH#&2VJ & h&A-,y|=8 $,Lb3sbD!ıa)al吟S8dcel;>gn ɮ=de N 7vHzS|Q83Mh +~nT\ ;+4ɐSchR0iJx@쐑vtPC BՂsS h /*?N#mS9K~sr!%ˋэrZ"1НHx#/~iuZ[уRϞ~Y?f< ybL{X7xZ çyg=0T%N_Dq ~Ine2b +m,{ `u-} bӎx黶eOa._ܷhd /QC[98.Us32^mds.[X: RGHRF*&(UD7. nwfqqϓձ2!ЬB+k3H)YŖiSlݙФF7Thm밤Y``\ÁL8}Zs|"{zZFSl#^/gguuz5ya+I.EZ-KiE'>듗 *4qkwSr׾Bv⣉/&&Aۓ!yIU?чXIK2ښn5 ~\ۄ6ګ$)D=~qr̛1qF~^7p&&Ê|΋s}+(59<]k<)ChǷ69MYf1{.*,^ &,UR>o Vn&ߢ _&ơ0ĉó4n ?o`;TAF).ڷwx7&ٍ+TOAkM5%ۏ&p8tw1nOF[(]~hp&8P/70T [﯊y˱~!/~o>矸ܥRؘq{Sb_^&p=x  K"396K!(iv:0WmEoK b'om_I:x=.BJ4PW ?.s4*Qv§?lԱkCk^q[Ġ,X }0j]T}F; ŵ+ GmnQ?UAm" W! WgG ~r.0XOEgx|K\Guʘys$pWռ$ (VSi\vi#-V)ZS(xgoN{L%.>ImPn*6~)<>oֶEqY`A&f|j #~j3tv?ҙE1q<0$ZXr 1Nr便B8z'/D8 P D] ȎX*}NՌdX +" Bqe졇_yz  oo Ч?[NT%vs d_ ϖ+NtM|hI۪y#e7djA_f "zP'~,xN$ 'KX)$7,lf{@c/n.dV3 ZO& "k$;)|7)u1 $!J 89sX75DDC̮z$i#RᓓM,_(EՉNƯEqRM-)܀M>\ G& OA7B,gtLP pLKxP3ND2Zd)f6bDY M~xL3V-0a Ѳ\Fw+ǓXT\y.um 1>OX{BkQ)Q@XLzJAV Y%.e=m,|Sn3*D~EkՄ]Vf(QL%I/ǥ2Cep(~1Vtd1@}B,IݡB%dbZ&ej uA3ˀիc\B+E5)"usĜr_BT*֌ X'd(2~]S+\1mMT+IFQ=Rk,'=6}gx]6)#:}*:1-peuJ(K ?ypARH\. 'Ħ&=V\+,oNt9ޝKS/!9 ,XI>IIv_2g~4(Ϊ-wb bk=q;KrbӃ/-cQZwF^-{躑mVHT' IfO] ȹ [w/h]?/SnIۧ{3/װK/42kE:&)pIV)LVb(tLPDMkYu4⿰]?^;6Jb(]ks Q6%9X-]3]hral 4kR.H69N=M:] xCz9>G5+*em jwN9dq8N PG){@xa䡑~*kKA l kGF,MqW [D[ 3ޒuuyÀoye`vWGcS[LId^͗dcbmf\#@+a*%%&|I8~2[?<_s( ?IfIh@4#`so,vIuC3b٦h/҆M-±l=XKU(O `ύdC"~H(M0Mn%"DHZtKiZ {Jya§&mF:~Qw:$zM畖>c(\G/i*Lim8;Y素 `<FFGlp8qn]aϭwBq +H*w;l`R}v*#zwb\o\7Jq]Ԡ Ʒg>c6675x%a$ 6zLs$[઼\l;M3F|LbJ㳪(#5?^;rCle.gLFw`Q@|PÕry$ V\<-W!W}YKFޱűs,H}VO`=?0kGsn9Y^cp0fh<V(شnnKMЭf%D7(R|xC\5cUo̭YLdi5imRomO+$FrŚ 5'jmqrЈu՘+Kb/IQxw/i=U&$ui6[YxOO3r# aHEe\U>)eZz›!Ƞ=73y!dFn<|2Cw%峘A9}5oǡi^zѱI8J^*a7Ӕ#f ưmdtb9N9LޔUddu&)%"SBNoު|fkrÃaέhn.Zٹbѩ `'YL2**hXqbp7 ->2_a4h]2g-^̈NՏzɑG|39M=1-n|!ZnK)Vh4LIU ʽ$2{:ٚw oRj#O>K~C*w9$di*G:_Lt*9(Ni~FVd:R3V즁]⼚)'"r,ǡ4h$yD/GZ;q1wtM9}뫉V [|BNKj[5++a u3*wX Oˉ:C_v1X۴tSψ?)͆z0g,;ݕ]\?)fĶS44I?UFc5[uNcFl?]W]Xq-)8+y ѴMՄ k wi\̗j]j?nt#eSNQyΠ[ȣ/DQ5 :D @yM &;/砽3NfC>"!${QJ¹; AӂlN$G]UN iW >J UJkUD?|LMPBE|b W7aAB{"^?!*v@'k&9qQR_Xzj .71D d;JXjup,8Wzӿu(<3#u$J±0^%^F4ORx6z/5 HNUk :T-[+#iRoF3p>r#qcrUüA92VJ{;w4kۭN@xqJ@zĄA}M.XTDژk( hnSA V XR'\l;Klgu/vJ>aB9jANRAD,_)@|3,ȝy؈b]6;Wi]iH2 n/KmZwwQ[D9Ҏjt*cℶRF ge2MTO.;z~je$fZ!FefZMeM+4~c0>v +^UrP51뱥:_>uPHf .Vg|go9O?xx%:e%.t$k9O#\ě?Č;Lw<]pXb,Kd)- ƃdp;]* oN m. uF:JH54s5 uIao*~} au㧵HԴ6y2(͋)leo`;2^(D &]&1%;_MOA?}H6֝_A͉㕗AVH ‰ baE${YzWH!aU bDfӦoDxKS.pdiL]V`d>z~zGݛXuy+;C@L `6+ӕ7]⽨DQSUvypf\mHc‰ N,]3R4 fgiZF#H3rֻ"ْe^{} j¯'okaR1u NTܪz} ;r=`ƨtĚ ?6rveҒpC%m1bV],B`IÙ6_农A۲ܔ|**Ix%w3]NJ8neEČŵ=K{OAȍ"m״©{W0W|}4?l NELm=Vc# {MTh^optũ߲)}mBcfCN`M"໱DzeOc!a5A/ݦu ɤO t@'ڠ9nRyvAa* I3+_9aٽ1'pEQmtRDneDd! o)^xh8W-XId7rB՛FF[>RnӄG9Wx4֨77!c-90jιRuts?ti׃jOW`vqV+k66dPCWXa??bk{dAw8׾`,꟰2vrOh:tGr6-cc'u"޶?ٿm_V7A?<(Jt2 [M3X&:::¯ Kkߤ|KC,CsME&Nip0|D:O׈CvᾍAz>q1/Q0B4z?K2B26LFl~%}}TNH7&#V5~WETҟ_2:g_i%-r.y4\4)gF<.d70V%z``П$ F}@UsL.ƶpBjwb!M&BgxL;|Bzh었~~ǘ:Y'*~u^ad9K(q'`4B.#v AWw.-Hg}ҩKsFYxU{&?hcr紲Η@TƄuQWfD(5'n$EEj?Uߣp 1c \PF,kp۳e,CU }aO߅ep4qΛp$ &VjoC ip ߪ#߫ %t$|,bz<ի`=pc CHZ׉O1ߵtH(}[;w^ٸcɋ3m :9@Q",'WKA01@DvZ. Q]IT뭃}S{IyHq%RړT1X""pϱdjNRzSRF,oBeZ@ =rhhZK\nشX,kh -X&/v3h`w"w2eGfgNc/P$]6-MyM;VnDpM%Ӊ'&#XQ֢| H+u]òMFürU76>L:+C#ZekO^҇ UDh<Hw:0V1έ~oF$To|կm̢윣}W=ZІT56a4^F< 6hxꭱXqe(Cr,{zO>59#)ܪ(]6%ezG\xgjwa+ fJp_;mHYe##+yFTDj^D!l!q1 +1ߕ]{Ļ/ c.Av \bC:"r5e^k Lh= ;{ܚ>JC)<\>@$&cГ6J\>2gi.;]~>i8WiZ ϼ/ypAlà@-}s>Ѳߜ/ %h/jcz l!YPJBW/Czc|W9AчP?@?oN#hbR!_]~vb  b0 ́} 󥲟 jT^{ꉺ 0J/,^<Ȉ#}FTkJ17>I:#^zy jHsesCs֟ĄUoNw !4ҙ+iVYZc?U\. J9̅%,91l;i3֮4+kub4|Y>X'4=]~Й r!,bƬjj\b ,(I]; 1~Ž]X~GW%z,PAR/XK P5GbdU5em#KeDbrG骩* ~-&NKb 6aN̞m=&d#;>);o_@_Pǧ%h= h`,p'iiQ?iBWU<0KÅ[`8K?΁ƀIf 72c!xz]cv{h E%1…DǛ{]~9sJ^a1}[*}?+pMo6m Hr} $Rc,%O2x+7Hv^d`˹5?*y\ v+ 3w-l-=*YOsxJi6&ƍA{&&M!w4B^8W^ӛ y++@{` ۟xŠ {0.$ooNĢE=Yn ȇD&V'RNΜeTAyr?^:L&X,±?x1Or6qvT*ylcUB5yx}\9rΆ~DÒ}АĔ);*(kWBh16^O.pbXhz8Sc@'6'G!pvaIU!0M?XicU-)iM{Xkן|}\(vcZN 7mH XٮsE"f2[4Յ#+ %Ev}a2rk?X/a dCWO(*UG5AbvSwӖzA-%t#|jjEz0 8E@^25"e;Z[M̡12(GtpUcK1ݗ (v0׈6:}FTyN3HB|yuځbx|lwWꇾ`~F=[FSbWA3 BU#5[AQT t[/gCd.ب"_j|ܕ~2:x1-GؘѠR/ii`M*jFGӌᯫ3^`t&YbO4*XXKPs{Ǧ-2_5wK)KQ8ӈhOjf#7ňAh"qSqǶjl-☵A͵7j[p~$J [Pij >&RŖ6]31jkĔi)23v7t'3 \DK!at-%9ߜ]t4XkAf(?^(mq]r$nmZ ay40#YW}aWK/ܶNBXXSYAdjW"E"|kY͓aVRP.ePPFBH<[ F]j'Rb7lڥ RZs[L˶`qŔ)Df]P$SӴi ~mADssBgVkaجY ( F^R4#bT$6KGxڇ6ckѶ}[0 TBFSɶS^+l SvxNꛍvroN$`PT Dz#Xrѡ}=F8PB} FEV=~ m$΃GЦSki dX+J,-qJ,bQ$/W@ ~[Ͻ]*[,(+ {hϮ ;[/b?yCg9SCދzT @]bR,A9؋&UF^b^sc`zSFciYya #(J/mm"vn_.H0Bw% KK'LcE~Ad%׶ۄ.9]݉Fu:$TSFy6h{gE5 Q1JG ZS2& ͮ-Tեp7Е9&Ocnm ֫D s:zNF;}PkZ+VŠhC֯΅!8ViA2y(lrP"Pl}-E,J0A6HQ pk! %?)ASR5-n7xP7tVr9>P%ZqmBƚئV<܌XYv_ ٦V>Yfa9h*Ds 5$ĸqMy>$󰭀0g]tHȄUl{r/qiaŝUK'9Y0m3gru;~'>=c( " VEKkK-=)֏Q\brȉbh )aCRgz7Iq+0c 1Z)WY?cˈgvaبWan#.ڈ!#un5+狀#ݲ0)Ӛ0; ,"PYBΑ+Ww*Z ٮ.c05+7C{1;s(GP7Nw>3"4:C4ͅ &V͸q/բ*j}GOXnY.a Nz5QChd5qVOJ9`،;<)]p;H1%e4hR1#ݻ?` #Hׄ,l8NM&‡CL OVa6Pؿ:V&15O<5Jdr,˜ Z"$Z돆~W.#]@ ,FvI- TӅdx{9;;{{eg]/wF,\g$LWU[U@Ӑ7ɘrdH B@1FFrHv/uGqI}q#pzgDˢ9<%oeĮs=rxlLDccf T0ݭOis&c<5ܵ<]ܹQZit\c֬/rKwq숌bRڢKi*fh Q7.F16sbngc.w?_Z+[\ƆJDC';y?8vb~K n_±â3%sZq,2P-0"Œ$C)sڎY&) vKr<`frD V )-Nl>t Q1dE[|s909dItby(/;I/*j2c8'$Wu=}DA䐪JtKp HV+_nq#`@HL%B J;ۋeEFg-` X( ʼn1=.JqL궢 %tC57%p\[<)9&m[Bw*d.ow~)aݺQhs./+ "CM1<#Nc *ho L176e?BIUC&O߾i<;s\(̠+>>}4#:SH>` CNzmMcܸ &O9`.Yݽhq ,fC̙6q1b=qBjh~[uP:ԋѭYdnohaLE8$*Sʼ8qq Ƿ8WXVLx@bE{>Xc6*ouΜ6k+@7XsM X<g rM-WX3~}ZZJ(UpW_'jr6F)Sd |>_nRL~zLi/!+8 >G2~0WŒWNh~Y2-,<YyM:nSoOCk)Pk\ b&Stj ]2" J.oĉ횕ne ڭ)Zgiw;$4 b,Plv5z^9TLnsdSG/-kǓ,M\,X\F>#cjQyû9ʀѡd{1sv;@1ɋ@ 5cݎT(>F]N1 yf \?/&v-Lqwҏ5n7n/{i{pVppso37!tQwiJa eb֬抺;q7 LAYy##ApQ\aо{˱尕iC*vt*b^rS߁vh!x=ᕑJ%1a${~ (6"~s"'6Nÿ' & W!m9"ȥa`NaIͪn~kb˖hMEpar-~SG0_Ж_,l"DPG8\~D%0X4}TFG gBVrWW@* @9R\J](QiUBpc>aQd>ɍ斣6ܙAU MQ<B8!%. yc0Fr'f[.#SXF̛-,s-_ւ2.Wwg@*F _b.#oPV"FS~UegYdS2@Ʊ|:i@V^Jz@p-næn*+@(G%F۞,hYvrۦ'okD :ǖY,9[EH(GBǔ;kr ͠%Tci>8( .mם!ɞVw_)]vi }:y2M޳0nxN$&M|Bxn B﷢2G2pnT2D0| L螊!-93n*\ۇ֗4|do=ďBF<J ooO7AaN]{j{ }oH]JKЉS-i K 1$o}lo{*}lcCO*d &ZM^Ero ލbVz-\SaY1{W4{X^4:q~S֮5Ĥƒ@9.P b֬ͪUr2T1s5?$_1m:= `!lZ*>ށhY_qA q䰚pz*^/\c+E? KtU`48$D` 2yB~ *ޏ V:{+&H*qxuG.g·s,}.L xk9dxWt=w뎢IQ"0ᨢ 1{}%,z%N ;Þ CGvr=tJq o 0^ 6Up[@2+Cf-L)6։une#1"9Bp$= 8/v [{}򌩡W`_`hY64}P} @J VY ad" *6>4 sܲhBn8N "s?BGGd1z)YwXy-4)S,8vƚ٦ͪFׯE?n1oO3 ؼcrG=N} ~xPGd6C4C%d, ?q;v6h F =QC^g`$0,0k}N`oIA\My/I߀}(h`qh{&D4zwVdD7*C->_5*:Ǟ%,6o iTt(nvu]HBCܮ;{q 5o!:jx4Hu`Y|'ʗy+bb3[NP!{hTuVL@ Hr5vG@2gX~{3H4yvߏـpZz٠/Ï^j&pC[,H뀅"$@om!3{RɌ0㵅٠u4k45caHW̙tc(Y[}1_* 2p㟃!=ܳ@SBg4+X&% ڲ A]SR C8_<|އIP;5DK {UF8uƇ?';79 XՆF4ZS^TRaA q}dȻH7x@' KTC0ʓyC6lM"׋N&@M#,>Gb`]8-['Ru`=w*E ZYr=rnj&47,k-ٗ8/PIp#6^VȘ֦1M /Fa#`:1n_*P>SZbdO?Ӳ@8]GEoQe-3'69"/ښI7,*EVr֠mƵ7$ Z8>S>1VY#K1V^@P%wf*҇z%r;3@>h JxJ=ţ9Jk{޼6p[;Q`GLu>ݷlӢm,ٟWqbמ6c0Ay 9BԯB?d(@#BC4`*0gvL P+3]2xX|̚;d2}0P1s4+ 對et~%rex|[+ ei^ D yGl ѫ;zz{i6' 1ŸmHt{ zPqP?њ1HNzHnU Ch@K1tK8ӆ<*ՠ4'~6iDz:AcR@ tXO8˾p *6M>`tAhL*43ff!m}$8P<^rbʃY}4DJSĊi`òX`Љ#tXTB4EBr@†L׭SGx`Йrr9:D(He+Pr-"n&NSOD%t"GI!'@#{=AN-?YZ`!ѡ9:KA,Ztb-aDHx:ș--)Qe'8w~ `<4~Xowy,X}e@X_5A˓Q]rh*-5{p4 }nz+8ʥds  rhIT}u*dϿ /R2kt+K̔|~hփ UVkźV<,yt╶؀l[vCgu >](f(Ves樟J <1r8>E}kִ~RVvCJ ^ 9D&X"(9y-]SIS4O&m} +h1u\h@;`әf}Pc$ 26>♳bDpB**ofG+hX%x:n<]~bAC Nveݤ~ J~\ eIDY~pLw%:>t{AƘ>7\G*ҔehMq„v90*+q`G"!4XIUT͹s=a("9*es{Xc`C {A}_$̈udKt+x1 d0 8TK4Ȁ\yr]lKBq͈-k8"n|L4ȧn87VݟӤ~:zoI)S@ ēA3d`rpID·Ph' SՐ>W y/6,M'X[Y]:t|ZwN_C[ڍ!$3c!v#0XB mW(MMW he8cGlKbEjha6. QTΝVe>EB2)ih8I_,[.:PYm~*$!JLU!*nHԚ\~C*.H8W`pT2SXZ?.5L{ItcO*qd\#ڋ YNz yLO[G\}Jxi=xE ;47G_^McWBm CP*t';*- ߌ ɌGΥrjX[="CP%ӷXqT>ʌXO6Y7?@Ke82 y~!ۓȱ {ۭ  ̄ŒV ,bbB!mFG}aԛ%2as2ϧ°g„a9Z ˉ1%#.;Lz8YJ:5rzMGF|{ yÇBz 0qpmxnLi3Vh{R|T'tˏl,uT 1MlגCxP-BIqv^;a)@ miQ?wMvb+Ҷ&Sĕ!|%y'B1Q(bڴWQ e,x\bbG04~CG{ oZيAog _9nyxPtMm\ G ̙~zLOYT:䬦Wؘxi x{{&LY/DX47*Ğ6"S}#0U`¢lL=&/}xtkr۽V7?\g݃VcIokYi>5rݑk#_ _8r#Wᙑ V!qs#uGo?៑_P#/+X#ß@Kc7FϏ=A s_h\ؗXX)u}4^N?0\{)ӯ˒< wf껴 /ygiMZi^J 47i9f>$Hfu{!y E*s-=w[\Y𱞫4ĒtnyyɦT ZjUkV40zF-1c ?<#:;)T{;,毶.8p~!5+iXp{$V{+ ^b ?ǙGWJlwiVhv#r0hՓ~s(EF4=*C;!k5s6+YXcC4jto<7IeY+ǯS1eMͮ}J:1;Grfv ^aLOY Q4}E0PU/ըɭwF+wKlbiQe}d'[Fl1h|Euޣ*歭QYmѲF$^&VSSvAliHb1&93WT4[j?Y~>TR#+4?DϪuX#NJԦh>D//+ڹL#1A_^ޞ̯߰v2mg /r GyJM㥍`y.5Xmdc|fc:iΉ`*㑒FԃOGZ(F,y(&{OpDyfqkGE#u2y0#-ґ@NˡsRQ15qɜG"} vۉ :gNXM/Z|dH-y_80k#fڲёGPUp j _H;') (]V*}_Td16|khz,W9RG/ZEI;SHSᄂ\F5;c$1ՋG^H Z#Pn6eE%H H>^JZzv; BKZt551n7 2b| TZUUfD쯙 YN 8? 3O*%"G!xZ$2wO^qu/{)Ot68ALx)/GKvI'Ks%WZuJ-OI2Zngo$ t!cmm'R%t_U)/UxmgY۟< G8M7Eջ`è:ALB^3cpm(G@x]#ijX.8{41<$tFkKAK \ʜ.{Jzɥc|CmQxmMi׎ӊn_fwJ$Af]cg->ԓHxωEI-&bg;Hq؎i!e{޻s!abCe|DgҩXF|U?Ղj֑ŴhzAhz]x7qLM;r\epq8hW&=pf64t[>.uuc_K*CJд O40־?VWp-DF}׻`AM\%N Kbgfsi ^ 2i߹;7vɱQ[vR2}Om;//ibGmsGtb߈֛Xܭwp& !^w==<9$X17ll+:ޓW* Ǭ'N2h=Ŀ 7l&glk4W1|5{/=W4u8{WGPׯ.Jaz\ _\3U"m@FjFmWGg;E_T*ASmekjɈ/ū`SEP'5nM(lB6>#m֡+&z_iwO#7~OݛȘ}Gu:w]1X8^D]\W^ ZIS扲ʶaH-yZI_ϯze1gN3IeejywژEkp><ڞ{HC^9~;{2ɑ(?O Li&WG7j7R'QA26]Ng8o80Z5?&<21*k,JIm8r}=ntc`rP=T}Cy]YO*X?+]OI[h4cmDzPPu'٪C6b~d\$|ME^l,9 YhF<^;ԑ}7皫XUj0Nl4؉)V"D j qpͼZ[$ierDNً7;+_Il*?.7摝OCJg!0װ&h gsR,'SL\(Ʋs}@gJv(rIڟ3RފđZr8*J4Hl&MsΧ!=~ԗUR]b֊ZAmO@86s$njVdŔA⽡T#7_6 \Yԁp{߯AI*DPT=EgqԔ(Vmbu23/hp6%$ˆ2kSӓ2,pf-6G oX^-6vbv>Gj5Z[Ğ=Dұ bIb?EZT E9KǸ7TitA,A䉗+Z3˒"hܦɪF5$kG#WCp1#4s46pm%SZWJFUk>F`LZr8ENK%HHiju9e/~Ɖ'͒ rumS߅?e:2cw79 禎LJb%!- /=F9.%G<_}9[HZ>N׺~3mbgLi=1)EW2!OvWn+ L]L;Q`>멧t \G)E Mk/.'_''n'Dɚ3Ҷ"ew81DɃ j9 ZLURh ~ޗG>VLԍ ikD &5HZNV .~1^#MK0άWR/L%^.suiz)WUY!7p(m sYuؙ$,WUUq3OSzj2ݬ:,#o516; 1Ƌ{*$MkG}U0PSn.eӛKJ k}UoZ69gF[^mˁ&qeO|i*sj^QfHX!%ĻAԋ򠼫*^P!_Z91`JD@cɭF=UrQ%B3/HoqrٕmOjo%ѶU ӠriE:n4LHIsAKPd<|^W 'Hu5R(D,"c( e&e>,rѨ5n'hT\qYϙ6k$X6BJ{,/iC罓$1l[59eb+_(À)k>7}Ht*[b'UuŔ^Q g{f&^\ۤK*˝ሃU±|FsSG_OZÏ«,F'*-.2/ fu˖e"Y4jdL9L LvPrnqYq=岓U4_-M4ZDQL3\Yj%K# ֌)D/% k\1ϒzEW SgTBbtY~֌g_V8z1:_&ǣXl 8QHS-7NqWy❦?.*X,sݪQ 4V F{Kչċ(Se#IBcX9*PSo íӄe4K ,癬-?~]8\wӺ64lփVPT/¸WH *Cu t6 Df'Y~Է^]'cu(.;n)%45#htݺq٥Շk'w{:vx;aKi͈4[kj=>lt_wF2ʦA)VX}ڮzQPLI%8̈G;<,`,>;B3u=eT%?K i kΞHfV(kڞ 9]MC_X$ʼn! NA+$@[uX~/dmbwb}7X7L( O^zmLh 8X׮ayYOEK#&S(&<率{%3v+fA̟\/ɘ\41a/[FbK:6YN~G;rɇJKb{XE~`b~?A9W(5XjiW?#^`ݟo@ͺ!SXV.e;*Yaыӵ,h- mY38l{(_OڈX&)3|VklV :6fFJe['fmtW3y-N[, . EwF[vTLj k'5+ڎ{9[J3} S!`G9TlwFASDdf0﹮ ϻDnλڤ&0b}t95ӈ{GiZ[xf[c#eqK$pa*,Œ7bPm̜4 CKҜ0VWvq?e2Ō BN xzڻo`6iO|4zIg>&IF: lzU;4gG#+-Fc4h8T7+%L33fH(}M5' )޾ohj|z4Ֆ_R|%xUքt(!O@D|r?Mxwy׉IGK'ŹGNl;#Mߤ:}LA"_21O!7II{ ^ PFs5<U(#^/mm=S}dX)6’Fiqރ:Fp٫n37aDivQ{Ϟtq;).vSns|)j&Pd#cNXe,N6Svкs-UCm)_iS8Ίk//)[]'LGفjl-?꽴b3M԰wiS>nA܈i+o(rsK1]9#~)<?KTi(lc]Q%:6Y r5tY9vcsLQܚbxxω:ݞN'>Ia7~s%05r%bº>Ǥw,.z<&pc_l(be{~^!5!UTrk8$upgsΐzJ"O%&b'ךAG' p4$N}v"$|߼Sڨc5tM_Opr]% e~ИFw˾*5k$2i/䥜b) TD. >qcPS_zy ;צp [N+elxʞ诰~Nh(yd*1^#yv} ?UfuNQ}*J1Q뀥NH`evV}?mxڹi-pT:3Z5#VpiARBjL&dx?FN[sr#'ANx'j5a:]JN38K_TC|͞6k~#9:yW鎿VL&՝rr`uRk <d'ǚD*g M7 t zx[nͦ4<SAOJr5EO7 ϴob.E"$%- {ʬ,?,d6!2ֆdeUPļ3U&gއ#f>Ml3&f733mQys%utQQ@*6LXrɗ?BM u{HjW)8ꗪyΫF-;+ڪDw*s[W ~l|"CKh!)x@NC!Kq̥ ;[DXW3àHLS?fx^ ȉI}S=Wkr:_<Ý66OS8w{顯V>RWȾΜl噾YЬ_gT\6c*\l^NZID$`1C ן|q ѼKAi[Z'ss0x" #!IIM4/8Dry\BsU_JO+:Ge'=FՏH;nL-VZ7DSPǔ%kf.=ټMq/ $jM[m5S/w($ \Wh+9νk+NIsWq$&΁w낯gVٸg)~E}GAi}#Yy+JZ9ͺ7xچꈡu 󎼯[NO5EMnlnK_/L]~E>B"רߓtvX1(Q0WS-x`yZ0*xs-ɕ :fOrm0zV7GmГuPOCS0Ӟ4+B 69d%R uL =Ly(g,>4DOgLsհƵPzHJa!@RWkh#Z@#FFEl@TtpFP7.}y*Z*50_1aZ|3Rd }K>LVP=sNyFZLcm%O 4QBvUC_yI9}43kQ^X hZ2?^8XS'I󪾦6Nމ?xVg%Es1=Әo;(lgY3ZMPa$$U}lo#Dڄw* (N ūƥ^Kk=!}^E+~WKfʶ2yX#޹$&Ϊ-K^{[ O$91Yz|{C_L.Ǿex91?ڷyӱ6Eg' ) }LXBIMXq|[P7uČeDW{cPIRTyBKА`>;{2<>kZE ]db?iy}SyS\-+21DNhK mRF[xjǮ?c΀]{+XڎSt>:&_aXXa4*eTYט|[F㥺$Ac!QeՉ|}ǹ";ڞf]bzR#þa5P`V7Ӯ G͘p5E ] r['_Y\^ ݚ4K4c"Z*3~l2SWE9k|⤆~HL& W QB俶KL/ Rs`Lzl?0jǖL-!(;+q >4j!հʁ9Fe)Ψ=ⱝ0q(f հ  |Dŝ.C5UJ 7g" [g*fVPaBaugrkKZc7Q @JiORbX\hCxG=۬R&Hy5 ~>h7:˜I?յr9r9U, nLg ah; M.V$b^%^_]*֩9FҗɎ<;GgQ{EGZ[s<"n7ڟ܊~G`;Pd% m/nTYN0|+ nN-Aq aTҋP҇ɎM}vR=uI<Ŧ~6e4 ZgLF|SX`dDʿa(lx|Ҳ88t?m5f |ަ-Rm&H*&էn)%չ=2Jb ,nbJ*n<`Gּ5|#1`&VF˴~~Bn>1.BEсIMpxs]|u¤pBY$qȜRڝb sjb5s=Nw jrޓOhU^T}%t/֐9sƲB$?ӟr.#L|$9e^VxHrc }"fd/Mi@N A=얤rjH:KRVu1HyЗGV; zeй1 8?eL78dPcr*`u|f ߬4V1;?;xLbձM[%DwzTղswԾHl{CqZ* @-\:ɥ9۟72[opWHנ I.~՟ \"uRC"BRE~oެN.qn/~>q 5V>ޛҪ6I_:Er Ҟ]=2&##qFhM~bkc#I}JvXnF~W#: KxIO#ڒv XkՕf+5D!}q/EzkY*x'}[&8D1j|'vl|f &< X<wRu?Q:%ݰROGKJh J8m3ZݬgyzO84V/,?Md[IqClSL@", | ↏%dϿI{ƞC)A %Pjm`˹{K;;'}N>dJ CDUl ]> rQEޤ|g) IK 9jk?B[֘j+|EK_{QO%I(wo2/$})Ϛ䦘{c`0ƍ=C;xЁ[(zh B8Et^;tcp$JvT948!+۪Ëk6#[K!Pl t7ڈhK!OW 5nc:{3Qk3pCh9-RRA1NLVcZ%֕.vX9MfNL'=\wR[p'Xc @T$l%s))wRN!Cb p`_I:m,^>$AV& OL{'C~ yr]{Yѭ=osھ'/ߓd`XKdӌ5}'T ?f"t 皊I,*c\+EWs198i+y/b,qOV4ycRX;B#eA05},]9euu³ĢgsJ _m`UŔ#gFNݲaApr |:is-qFbURiR%|ľ)>& deZ`ߚ ʁx-}EsG+qyHz8fa e؆ kM.ߩpGv85#Vk`'唢و+޺jgL|V6N,֘XP|D'pBN[<wzQ5\a)>y&):6i룅4BM?5GCqߡC)81/ hCt*Vl7J/=7dMIWaI,!xgu,_|gb/~K{|tRuD8ČIk 4f2J= /zU}k{1[ĬM -dhd`k;FjJqU.h1_%\Jp [ڮ&}&ۈkƹȾq&Kl~SMOeeǵړ˥k]&C\SG(DZ+Z.h~!$MfT=Ѐ3Cr>GvGTz3u\O&1)D,.zlq=k\IbX v oRFO3Рw}Q%ny> M#HPV呞B^@ ([PDOpp wƩlH-a|0^@CS\ׯDGˡ4[mu3S%iRW uz'GrQțn*7Zt6H =h??(^ROba:1VStӍl18.%}ҥl-Xxi>%- uZp)H[<]8dH,އj&6t.[O4Ao`^U3G Ag`fORˁ(k4d*D9 mRza7BO_,eu`fw-g9G)w=|`XvY7}EnߥW8 &~Uxr:л]_k)&4'`żIg&z3Ol]ǵIyNEE+rڣѽAZ;CY[6hS,ˡ=0_)*8L8Dc0g? >_jWh< Juְ0b+%{_$Y xRI`ȺJ^_+w2((YKV޽ޣ$Đ5\_}=elaq)W:#} 4O0JѾ\,?x C?eN(&mT1id+](Cu;"?*`tk~~84y8^=Yؔnof WQs _(2-W(N.9'*ˊW~ yt@^?X<(iv:>1iF&2`^ܦYv53Rnsg{Bu(W9焴: DSGRO+EJ/1#A9ʾ97:ԅ4.w.>muܳHxdO5cHF>w^6踑)THFm~r5Ŏ!kU|- PėU| um&9œj䭏oi=T3LFR8YFp^Z=߆M2ILnم >#gHW(q8鄡{bjt a1k=sǹp5]bb^etDu>1kɗ1?[J'qpUl` :M,Rjl^ND7~Q:#]^W=?h11FG [QśRQnLۊ? י}"́athX꡴Fm3.5tzYڜr'R 7жOĘ3s'5rT^#w :%bWZ]Qmܱ%G㗌$9:wEȵ0{~E 9Dw5rFkzlM.̣Uzzz\Z]*n) u#w$o vh]4oǍV&D)P{,qjg,#W8HtI,y'an"ƙgLߡaJ20]ڥN'U:pNuI<} ! :!I=B ԓ\=uD҈Z,exW㌶q_5].Qvcswx߿F 2b7~51gi}š|ϕ7D42h4 /C,lAi\RӒRGy$ ==G-kü\3\<);R rK>lߏ-2R3>p\zw$:x=s[/zQ%E*wH*mS“cj(ICge94ײsH[kvsGĄ-kD#cWGcߣ3G^2:H~ҞBP42<2ǣX;) ;<:^]Έ6 O??.q۲ tt8RUGtH3?4r̚# ,y {qu-].pc5x9#v ;5a\gh;}I#f*[Ǧ.O`"Ƭ{mShtwp6taP$}gw>ǎËCcPX=+ _aᱣ0N\I - 4%,Zx`QK<41s.kCP{{5Zݏ6p~K >"4MObmoަMC K$>{=~JkmMb$&1=Z㔭g؁>: w'f,ZʥR nӧ4sзFE>ݘLvrZxP ]TDS;HKf#¯o&=LU-X q8دMRҚ0ݡC)G3uh6jB3L86XiZ~ɍkan-׋>ɾ@N{y",-"A-QXC+2jF(DkA sZVtާ-qL"P1*3(&ϳW]ĸqJ({ ƎC1<[C@9,Fl1@HdhUj0 abVV 1#39.^.=$WQ6Chd'MS ]Kڅ8q// Q?/\t+?%C0bE,Sh9Pp\Y+тr#G` wo\a {yGG"UVc/a-+1D2$A55'ŁFyXV*+b$NH|$~l0ĕ`4 ôvzvsP"n{(7KM@5iDD48̫ "ٿBCWl@zAY?AY2]>İdkV|-%ѓX=P׃$@lXs)J4pT|'TlcN%pYy4;h= AcL,Ie]l,Օy@X/>biYy e YSeѦx,Gn&Axegf&7I|z">nk$rqҀe;).ҾLΖA HXD:yrll&ﰄlRL# Mlj3p~H ighJ;ԱRHn+ZH[i ]:O[q5ڙn4WI_! sX92bZȝD#S[!nx_L2 Hc?uELTdYR2;8'bV~f٪#[ԁM!Oo.+WgАRK*'v7іo7D3c@Y4!2 #ZA\UoH6N3GߠGXIr竿r(*M+RFs5kJ&)8Jeos"r%Hr? !<;L7š#i_`:l!؃{o8"cֶ[u?Jzj=9ձm v&}knQhjp/U?zN("7:379Ҙ,4VЍzޱ$Cșm41fi(vc~;^#aoYEIT&9;q431a+l faN~ */ß[x+Cdi8"ECij҈;}J.>b\v0Fa HIsԟr&#[F9Ba}Ep~- BϠo$ 3Ûa#J@%9Rs 9MYjIn~& YI !1ɮ&*`62 I^+B)f˸!6EW"!iAy>?1seb-u3 3kY 9{e´cS_*7$-{d; ?.;Gm.q}H ^ ڛhBOk@3،091w55TTa?ڀsSzPDbV8:(?jЯpE5MT0+W"b$D喽x@m0A<[$S>77_9WҽJ@Q:Ro쪿S^6'u6GYmtXMu0?zd+cjȗ9^ F/};˭gA:IPHAӋtY qcՆɄl{tуK-Oӂ#( C5uA**ITR4H8ddfyT\_W6/2b fĚ2M,OxCq [?zz軣adքa 0CO5p((X8u8HLL%={qh@96ei9uV҉ vQ8Ni(tCML*=^bI2( clFRɓd,%_?w$ C ÁW&-EXrX zr3dSm[PD?&erDU\ePkL¾,Eq ,ïiE˝zǙM7uœꊱFFOnZW$h',XqcIZ Mojبާ*:M 9 P;-1yajN:AGF{Z+nop=&.NZȈy;O g/2 :Gx[EQ}ko}gD.u>"o]$~ A.%H$L&~`댝Ӓq5}RٳiZ;aͩ5|*lJKFn1u 1<#[gh+{+ˣyEla6`Vi݀9o}];(NhON3z}YiR:|a hH)Ţ>V B5Я$>76gv(JHHH%X@ڐ?:e!3&R&j?rAAˤ8nVVњv2)QO@@Ű)eR&q/08唗fl2i,s9 t1 K&xZZ{]Ni6)c&8\޷X-=vSc#ZQX"/>tympD8v7[Z-ZKK8dJ.yPIx-Pa-ĭt(G^XEʻFʀxNk9E:s, :WJT8@h\";#ބΤCv"kM/ &;mIsFWoIfP4Em ?(_ʧ[d/_c-źtH|ǦD<@w7<"$%qfxiw?;HyĤ.6p }Jg gl`7ŢS*]#d;%TS55KH&^t@]k$BD G(%enܳ?!k?E|/w6i93z놺.vލ3&̴JO+v[o=tx*-TUl:H* OV_'h{-W,}DV8SKu\Ik"IbLֱb& ֦hǗv<} eݘ9<}B,m*Ux)+\DYon;9z)Ľ[S*xKJ9eI/LY_CyqWF9N + bS.- f4-UJs1, P*{rݴF̻jsĬR0UxҒbbS\Rl91NPxs\蜶#[Ƅ^E׸LbJvB} i_4ثڣh֙}}1 ,6 Jo䐊Qh ( e^JsZސrc{db.sڑ "b p@<z9 Ҹ?wM:Hת^#gT2'r)r ٚ*#I$T2oEpyVo#U<*N^{!L2 WYHb7CXa7 ٖkؚ/!b(I%)ء:Wf22P.lo^ܕVv9Xœ՟RYTswCI_0l %l-0s#K*ӺoĞ<[vW,̦: wsc|Řה_H<\(clL(q(#Tø_3$?h8&͵N3LCDW55RjTևCe8dSS29zi<1rounxR}I9yxae71|f:v̺dtY;gR<:{^ 耘"XTbZIkЬKcLpt0qP -`LRfTK 68qK$@gLQkWGMʘ=[K$?JA_Kg+MJQm&OT@E>SB$Z=|a/)|q** omJ6ʃF…S߫P+9Vֻ<=ZaօYz:j4gʈ'yRG$[f,= Ӻw{|j5`0\Bip'|=aVIc>R2a|]8K f7bɂV5=P:dgrɉ e~ndD)+,%J=W"Xa8aW}bj2&0 \mP~<"H욎&nvt bbW $mAoe,t+MGtV#B>iRX#ŁLS\R%U@1.=XKpŬ dJ )h<4xQԺxA[Dcq_l,;} 0]ȅçѶlO|GTk >wdp̌Xc%pY2tYAi>ٸ}kxS+@dDRʗ8;l:A׮'?̔>滹$0*_K\дt"mx|7AeZ~kt@2CYY'W{#Ռ5x♛hnkl7&h^"4p<2oə5*K%t! ˣEȘ7(y2Er$VWXRo%*uϷWuj(d*a;J]P$v;5EP4ja?4~H-|o-RsFB]َͷ󽹍k-l}Ym͵~,昂J=9hҞ+缲޻z+OW2b9]̕QfrYZ__`͢s@rmJK(h0L)=>Xz(w*{Kb-r3[ȻD;8,Hb oTE,aOBѕSru.%.:wt`+DSi2bCu7V|:}i8zBeK2W@!Ӄ )̈;ܖm $i͐Q %$O/#=v>\IV,&HnWY@`l {o* j׭}~v҇\ #Mގӑ+tM=R9[o{:%@q"9]/t,Э,\DV]yD$ԗ=Xl\ :, D峈_+ jUk_9#hd㦺)$r IM$jCm91i\,J71`VvvY#Lɺ,]?Z>]X@:Qp gKA,*}fB oʶf;y AxX1߁Bsl'+_;sofY1qzCV=(,RO@$4Q T /W".`}(%KL\Л)UQGsbBpYإGޕBBYA;"[he]tἘ6Cec+#ꩁ%~BχJFk@uW퓣 #tn'5 E6saG+fSxR- 0PuMgI;O!4fAZ[s%ޥZ6mQU(/:~eo\bJí@g[#@`DP2-{(eRT4mKY_CIrљo.bVA`>SKCbm4Exc,(FDoPS_oW􌭔zӦ=Vus&)E;sHRۗ{d 0n9? ,%襧hC^]1uڎ<*Գn;¸@e̸JX+̂;,{9srζ^K0>@P`D`WR,JhRR~[҉EW6&Y$B͊H7V44o  LCc1cRGP_q1{`˹ `/Qad(oz`d`[g91eyH6WIELj=Lݑw#D&=D;BP9 !z px#"eB]8K,YS52ގld;y)a&,00mπ'?@}/r]jQe;mL5kb1E[S(7\EJ&!͙h ɼ:{NZl%;szCAro_@곻Nh4.u+j)gɃc> |N)d{Dq@TOO|J@FY ]V~PcOs֜)׏k'R.+Mة"/[FUh"#3]iܚ'֕dL*`pC(](z1Aa,ߕ5V T ֶ%FWaDQF￳=I1ً{7yD{Awxdg!dm‡ILnyeǙ7~B,<`*5'{={g@JH>k.B9$ߋ]")<Whm3yɲ ^H7"4uE0R^? tLbRVz`;>݈~9zg4ŋߔopAuH-qHſ4x1  eJ(eP Zt_i.pU1Ya٦bY1aNa @;ƜMΊ"r9N n\gAV' ׳- )SȝN{R#olt mݶKY}Sx[V~i fpT&*kJ6(.v@!H)MB< mǜrr9q}NQMذ*#޳Kt EJ(sTBZl6K{ZdEDȯL]d68]țd8 ۅ?@mș3e4̵%KwP~~~ Q*a]Pؓ-[vYf .`o7uv3,)=HjȚ8.tc" %`1r7B|SJ|a!v?̰G+@ p]u}ECț(X2R40qO ,d{/ta i#wܹ7!_ٞ\.Pl)澈b*ɤ4j~QS`Y,vZ9؛5ms#V gupk<65YK[hw0=h5Se(PEsn+v8fyU,f/]עiUR@TUߛ0` 0`zx_ ]=,T9hh/b[Λ&3@*?Ĕ)X< 4Ed6n @L^ ';tF;wwtȋ_:ݧ'[/q{szs"E @qbMf}V| IPҜ5'A(Rs)2w9*p["ׅ!3<9znԣJ}Pt9|uK8`ɱ [l7qvb#r;>)JZ [Z@uNXt 5)7wi itZ2n 3zr⥻-X䌍 M9I Qމɥ) YDhrąx:Ɉ,YyeX b=wT=lxn2bf/:_Μݟ+)ϡzEY2V60>5 Q =-"y%os@@q'nd)>#+Bɔul{2b=JSJ=bdz{ 5d#T@|e]q|^hSKbs`N6xin8 !3 L@S:klێ|m0(XxFVө=^S/5T#9~Ga}.:(Il:S̜m~0@{QA  [ "_ÞHXE/uW(,;V ltPQLvkٗ%04pbQ+b,A Xd'bTHX.Õ?d'IcUK"ˉߓS"Mw*ɸv>!+(3lrǝ{xȿ<<)߃e$Mܬ&ڹ{ʉi>8lMTɜT t88&?Tε2 /m( ^Du$Y6DAۆ{8 SxDN'+fS g;ꩬb0Lߓ/#a'OQճ'Ļ˦!_z^oOne>`t>G?k+ހKƍBCU'N3L$"̲Ysn_,X`x1GDlby5QQXsYp5Q]?T|)S}^AI_9O( `"|RBeц&bm^{.L.%Krw>Ff@z"V=BpUWL)m B4W {T lꌻ_V\{o=&USxul-[ߐ"bv~@.9?Hי~ڄQۅ1E];lTHrGR%)Xh,3yKV9 ̇[f#*$3LTSrYd9 "yP_6%\thf!1RG f"׏>Ȇ=2Y(JevCcLcyv0/Mtߢ@jttkAsr=IpͶز53WZ(Ws8~ P~,=:/]w_($0[(16x"Z.NT`سY{)#`A*+W&V֪=T$%\t ( HMDS~J Yl!b .I˱Pk_iN*a8 <WN)mȇ֕&#Ew;fE{#t:G!Hto,`<*RY~LE7[iMVnd<81u 3z:tCm|9/ӻPӞ-Iw݆gjP82h:4i>%iZHV/'>dey_zsg?;ږ1i>#W|/R_̵Bd$IHC<Ȣ)ZZYDK`l2bZ>|rjyޚkK.?sVW7E3utE:UȵU(}Is/}oe[KgMNo[_n_?[Z< hA|oURu9B%&3 ~ f"h֦?Y5AB|ck<6[( Y_1SZK`FkCl0A.&_9{'(Fz@9HeEKkS@#*)PXE$\apդ޸jȪ'NHv-bٽ.)鈷ғl_g>f*\ F$h? xʏjwt =}>ޚMmmMýM6@8Ӈ{ZĞTpeU1ЁDZyKQP!]@m/h%_~v:߅vX[x ⃰g: xFKEl/Cn0O;5{$4]~PlN]Cn1 ], _*E@'ó>?x!~2L&`H:8^`r`.7,ՙ;W$9f{@)a|7K$AJ!jP>bۖ DZ)S}@PblN/F^A V7+V&iV#yERgAG]h _v,$r]QǬ0xgWA7.RZm'E_[:Zgˤщ  @RP. :<֖Gsv FT8>t]nK&Sf?I4x>|iƖZR>)F>mw|)Z)Jw{X*KO(q~ +Gݖ(ewx嘩 P/{+j< a\7whVV>fj5S֢oi#r2j,AC`6S@⨑A'}b\gk+w TThy0qʖB+jlv 1aBh2~_sX2L8y P'2hqIT91*x rQ(FŔP1ע Zғm4-!l"2' 6Oա:I-Q@V,׾;+U%‹с|BF~@n£ @ `+Vj rdR5Gc 0=W=)@:+=-r<a0t ;ۉ$یVH@@*JžoqrM;ut͝G@ cP{^?Y!Ae?n/UN:,So'fݪ$ߑa'\AԖ ^c#&uCrj j &Lj8~iQPΗ&q""ͺU+@iͶ*bv x9TMvlUkk E.JBi։֘*Te,b-t?\7ؚҜRg>[ԼKlgu!H`/4o)*s4ғOpwKٗPĊ~Bvx6Pth {l`2ӥě/F3%4-+b OOz ATZQIRf1=(/#~TRXZoPaY,#z+YaώJ9)6oҲ P!goY0*Lq2f\J ?Q}\$lGeLɝ 6NeD\򰱳H,[hX2rfS(摓~߬+@ K.al}~$]癯,Ѝ@N.1xU=#b >ҡJ 5={UW7r7;j[kYnX0rr$8=H15g׫l"a.Yi2" [5l2krR;Ph*D$iLbtF KSTVBT[޶f/O\u r/Z+ ̙5pmRc L1sz&v/I c_[ԆP-B.Yƫ<Fn1+q2YH }Z.NU^CXEh^+#Zn1#wRˈܢXY5 RqE hN.HrD).synXDDv$ ۑc?W H˰d8ѱ?bZ͆Zz~|)⊚] T_H찻+qjk'N5?xOŜ9#=+夾@Y;[(kњ) 袛11mv N$tQ|dDP6Alϡw?ħ$IéW? Zx93[VɮD5 e-v0.鞈h {Jl,4nQ,T:pk,"_<8+T:f,ī@dn]~oH4\Q:1fNv̓b9fL[j)lo;L;UtpJ N;}' 9 (Àz U( S/Ԣ5Ɯd7/tc\(]4y6- UU6v2d/lz>M~e+7 .\ 0' ~ܐ\8R+ŲIȤbO%3gz&ؠ_}`"$O 0iӹ`-]℮<&Fhў6eA2+Y7@h-MuV/ 8ݨQȑ〘>}w蜰l^Gv5zLP~Y4mOL,_ք=V[P X5r 8}JKx`:XC0D>v,/ 61aBzܖ9;L"=*BNRu9H׹b)VHD:Gs2)J}'ָY+1A̙KLԶfi$vᢝm3>k>ƭ5hDQu`/!%4w3&MOV> 7Y42Gkv!5LgRΙ[0& 8 'YwA/@hs_+Y%Nj„&$nܼN÷;^n/]R0qQlRljc^,j2_cV)q^q7yonHrOMLbEz,F |LX.0k057Gfd{r5ړiωy;ΪkV .HQ{y+, d*9NO}x8; "@:嘬_EbՉI3{Qp %/@2.ILtLn*l~{:ٝ[yuSYM3YtQ|N -kK-ޠKhJ s2,s츽?c #>#"eosFax~f4Q? cDW-kC >N[Jߗ+>%,4tT)TiV8ZMG.X^ <|JnzXkJc2R"i3doypWFOE%`̃=4_Ǝݯ"`>-_ŏpǭGlnD]v[lQiҟ ?^*ԅIn9~"k!v 3Mv#ޞBbjzdAۇdR7lkCG92wK2@,チ{1kne KKYyGmbB/`ѿ)F6 Mh1>A[⪍%īePƍ}x&!@vPxF{^= I2JdXֳ1qǨ# tYD9U5Z2IAsbzም<ژi`!96Ϊ`]udUoVrXeGjr/ojӖR^S^~qSh}gm[UU|U,AG={4fH3%~*vu'j9!l:_B{i۷4ۈwl0[,M2Ϥ`5 k8iiR*ɦYRҠ9L6i*aXڋb՘ oz^Մ xкSPA-81u~DqW6~_?xƍGs<>;lgݱz!n &w @nMQo1 SjI{q,)V)6f68yMxI$6jL+ɾY/-<*tBqKSFHy1d6S2ymٱgE5S+<$[7y#F›'M8FGi_L&dhv1 Q!()ቓTC&EQP4G9ThbDYQ/p!ɕx^!#I) [?fYC!Z&yNl}i0uՍDnCO?WMCIa96g7r|d!"ЪoR|fQ`;Jm9LG9ޢ?';ϹGT)@*NF3qyK%5QdIÐDs9u+;%I fP*.S:|F:WB|5㚨#=Sҕғ*!nd G  **YjiAPi\̀J喅HaHfI%!Mf6-b6AK5nRQoA;oڑb9< " ;[H}CK{?x8l|A:j?DA[b&QԮKI<ɥl̚Uj{Zȯ+fiX3e,fļH>SG&NEU[VT,]VV.o1Go^VĄIu5ǯ[ λq& w?wxӶbjhYBBlF `Fkn%AEyҡQD942aWE)bb"[9mi |G-ل8iS-r W#7bo`p--'vTH7H (njib2mfd)c B~Zxz3}C>w_Ԗԙ5F9P:oFmTT/%8&$F揃6 Q=z)brw"zRqzށ3WN?{g΁3ѽ;1qɲK}*OL__-aW/vVXX'{:_olSv' T!A/",VZů?mONh~sbʜrfd߼J}-NPLy{bFs gv:pD_W0.n[ǝS*Ns¦}^ty3]b}n[o)4?QS7X,cSaρhpNӕd5 .~,HuT*6nz~\GWq[pKoXE tFza/:#XNIzp@=bsɍz!yEx'z Ac0#1XlM5i:(zyYRH]q*ˤɴwK]C"Th f1oA?=DMghhęPI3W S0کKncw_2~Jhr*1ylX8gȈ7l F+BY=mz] abwp!BS0޾S@ɒ/h4]p{: 3R`jXwƼXlm&TʿU͞l3sǛד? _J CT|9e!;pͧK)hwAbSNQMD91r,`ZO*Zҏi83%oᷔ`i9HpוՁ~n&yJ,D>RRuZ[zz;^?-IZ cMh   )IthH̝Vew y I³``ca@,NiRׁM; &&U?{p r֢2Owֆ7QQ΢g-q*Fm.ônrlyF>4oDהG4mԠ6^_Qݹ}"nD.5Čl*hU jH [H"ZU{>gC%IxŖ-^aj$gl5U/p'WQߢ6n*Y ;_yz%q(B˟w.~?ΒzZy'q"tfAÑ'O\"o~A{ OMG+td490RAr&% /I{ekB0Ʒ=5` U1u'eNŽ ^WM lm1G7HhxMh" * OhN,x*T #B TXSU+j'ezg@r쁥ZfzLibUa|,y[&%Z=~ b1Ε0F5!;kwpCh9PtX0"lrieF*),LeND0URXdz ~5+Bg ؞+:Cj!267c' *)[+Z5Xp-3 9;%_H^x ^v hBx72&{_ȕFC@^0gʷ%zS:%]) 쮭@s3AB&X'!CuBy.S92hDB$")Ԍio :=,_Bn^JF:Cк2 uGs(mP X?D'"/o6P_+utȸ"nJKZ7mђhkjWd%RFg#&N 6uݓz +gI|'\+XMP݊4uMf@b, a{rX@ߝb.t`1c41;M8ES41Sd>GnBKb#lASg!bo.I|CD (YEKd\g,NPM{B4f2h |}KLC-bd_ЭKD2L%S)}50K e 0!lB-| ىzE8&h,K[BgN^ x`sL Oʪxz?]eOf{.֜:|LQRU@*#B@ NꔎD:h*H,aRH|ȦY{8#Jg.=ik>~\Yo)\ -\\Q^\!' )j'p. L%^-!e^-$y D,|yOiXM sl7ZA5b NX!k1u1?PJٍ1U4*fy){)n|Caa1:␽V!)U<Ő1Hʘ\CkrW.K(8 >x/>dfXMD5ܚkjz6Gu_&%0݇pWzp 1B~Rnݼ:Ci@/{Y?n߈tv9AԽq 6DZq<-1yz"[Bhdr+(g[eˆR`fxi +vxO u8-P3pԃq7$#vOШR:Y foY`;CbXjd;Mcb/'3}wvlfe77\K9K =Qe_E]]SC&U*6^VFHP잛t_.}\+Jq$/2'K$41@"'ފSc SUbaPJy~ vºp@}]JiA;FTeSe`]0QXj) +DL1 .ۚL]qOd9M`ni%4{ C8a e|Oȓ1?=Z[)fLXv;BE dL 6J~*j V\WvGy^,;.:^liⷤ-ʶ@\'_r!x6C.Z*زږr'.ljq&.W-N*ǒ!i,9Arc}&Қkᇷ'W@dn܆8 3ɆS] ý(,Sct 4RBweãM{N9T4ޞ>fH/?V(Nb0t Sx!:>Gnb-DvV.5cݚQ&-SaՓ%,egeH>*p$>X?7yu6eVɘX,cV{쀛~$,ONx썡쀞q9> ζrb.7C tb4ND6GxCX'y#$pg. !vmg%a\E;$n)SHu>>A(3zۿ5uHVK}BxamSyډt2i.ԓq:Ƽ4I栀&5BR7@+9Kgg|*/Ak:t VR5Q𹝅 <[ 5M1H+^qSF Dg/uuzuʼn$3a&$>kD vpղhܴPj)y~ ˸r2Vtd"e}I TcLK~z yV>QxG3W%Q9qS32DL^mޣYft\ ;%Q1 hRgIB+9&IB:r zE7ɲVw$M8@U&Jg_חqDbmnڢ?ItV>Q݃}:7=/`ҦӠO(sc:Z:բ<f#dsߨ^7s#P/J/\ {fbkN%2gY1@!m#wf1m~NT$CϷRUgK ++Mۣ&ЩDz=`ٰ> Iq+‚NQdt<ROu//0(mxvj(WC t4 e屍ZbHߛNU#O *K6ܭZ`P/\<y*)qԘ L Vq))3}y:CKS2XoILXFѤ ~%rSZ7SR!ﶢ l7,.~ /z;Q_JD' ;-HgyT* ȄGy۾I) <eΰl.BRnJwo38)md@%3'"X:l)L˴+1{MrGb%[Ӌ5m˯|)ւw>%DeE_1zO7&n!'?GPk?IRBU1Ogތ3G53 3qHMHX ڗ_^ (;̕fDx.!QrWqYjp Y*^ &Tf7E脏v<&)UtоyJfS];W^|s GF&SAD3y}Ը}}'/}p' l~J"ȱPG*NѿU)5m3$\"Z)2\te"[& Ǚ^ܿFfGHr$[UV̀02wPm=.[ӗi 缵rT{}Z!7,s?c2e-7CH׺>v42Ǩ&5cFƴeu1c)e_knb]0fQSQ1?nסӞgs v PVV] kwDvcs4fhiW [z;Iq/FCωl٣4Wl[d)rء*:BŊ~޿:'eѳvrliS*X>{wR*? ^:`k=p'+gwwN5W栰U mLsVwꕕae1{}żU%5V% Y6[|8C|O`䪤w/j]X[ݕRQl^R6i %$@, }-C6X\t;#Ye'(Lo_rqN1.;s;/бNR6WekӺ dHg9GB }G)XM+8O70f1}"${:^V wαn™RThƪ6_t.N|LvFT|IU׊lk rr, Ra9}Or@;C@8Ś v|UiGR a(. y=ÀU/3kҟ'z-oR(4P{ uuY<#80 ?yY& / tF01- ˄>CŪŢN@d#PmdqS X2}%\Un,;Jfzaad1ؚg8qF-~iQ0^S :jqK/#"3b.%8t\,mڰFcCA\˧ݦiw/\㧂nw/4Vl%[x$Ϩ(m`rtV Py_e:JP-76vw]3Bac[5?(O@O=v_>l̡/(U hdLSnMZ*C}eF`_ !˄my%T-?pTO:J]@aN}{CJAS3J?H6J_q- d+v_CVGO):pހRJ:=Ru ʿLsl&Y5ߕ?P ;xv$(iPu%HQ5M 8X7-?yyb[+pMVTCǕWe I1@dWkuoILVBR`>թCj5+Y*/so(y=]5 c}x31`Ml=\C^,~0^_I{h&,Zw"yujhRs̈]oRp sZwa͍6ίm̊`4w ~gBJ.UuiJe-|>9}n? #RǶUѫ֥.5zҶH6_6>9+$;kz:CIVھ˾(UO;80h䵗^dE߬[78WPfZ*KmR*L UBn,Qhլ8e0_9C wqW+ň$9mд[} P &HҊpUl. k0S=z gtz&|/"%ҹnaL^5OW6~TD7""؎w?ȗ\c;/ę׌(<*LXM@'z X|O4tS PGs]k_GMڈ؟OЄA'ZD|%Ӟ5R|+t4C4nI.)7i~ͭamFuCO:^Q<:KJ1u'%1܌<7)jXA|BL#y7?z(t);WH!K8|h/^|i?KғSgzrSٞlk$DŻŤV쉤R>y'fPFԂ8(UƘ9_`<yrM}97ES.a !~XU-RK1{a.=P[HU\+ei.1nJCY%ΰ?Qglx4Rrj"\:|o(  C_ib =yoVѯgѫ ~e< ǚQ7yGsLt0+ +_XWo{_ wIlS"4|)}g_*aIPT NM&OЀ<)WS]޶r_糼l"_ zZѵF%{NWNn K~J#niE|xb9",'8|g{Z`^h^:Gꛕ`^*֮tso9UXV" MYqYՌpx]b,k_q;S_,fѧ8]1) %o*:E#e‹xS24hK["/pc>eF ?)!mtzGx,`?YѦYbSaT 7~۩fK,R,^fVjX41oOA#1@.˕l #p$\4_~eʜ k4UwUuh]ZkY{oy%&bhi!Rf|[1/*~ywe\ia 2Wxc[HZFnWvSې4b㮁UD6DRұ!w.WY}ٜ4,eɉdڊ3hd|3i BxMY%j qq23GNp'1b=a@cYXH{gTO@7^1~W%g`VxĨ)TƕHvb1T%# =tx(r#R,6fpxl%Jq[(=;q!5Ed$h^3\ԯ,JoKX]J i>>*)aT^eD㚖ܔ%FMKEL1Q#o1l|l8Z#)n/e)EoekHE$q k,.$ы Wƭg5bOg 'ޤ}aI\,>#}y:*KR;3گ J,q&S(rnQ^%Vho3_ /GV8 ք▸ s푊,wJgU''G_Y+*GcY]r c8-TaUGՒ[LW.r!JB+[Bm҉}Ƃ!B˦dG[h13w/Vhj\^O4ïm; aH|=~4İ rZƒ26>)E᷊JK/8.FeTA.qz,b(KJ 0U#uCl63kIuhWU /sF%WgVQ]xQL5u]>>]tXvW~jgK=O{Ik9!<9'b!M2&lkgшx7^-'V:8'ʧURoP$4cӤJ/髚(I&:ۯ[Qvm1H:M)ӿ馉OfOXX霖4)Jv=p  &,7n<ۅЖBWy{T{I/Ƨ5V_ծO'n _w ̑Qznqm9kفU&y34i|X]dTQڣ}b̿7 z"Φ8i}xRj!L68 X\rzy]&'] U91&} 3bp2%;ɿrp6GzoTnT?"@h&^}")n$w C@N`!!2,`@gU?z^<--xG#jy!|JBJkQh z􆶘Rt@zģ6*OTRToѨéqK~c jɤo .v,ہ>Qm2&їUND³Pml`;=fx&Dr~o*NGE-DOa(tDtw7HK/(Oש ȔPW52-hN$ /.tJfmi%V %|]+arPQ/,&wPejL-+ ,ko ˭:Ì'.Oq"E`^|o#*U8UnG `H{b^$].eJL\ 'skNه:3 ^K>o Ѳg6{=-?KI)4I)33[&I=ЛTZzb_LѤaPx:.&;e)53-OkGN?{a)=g%VzS[9ddbMD%r]>s2s M*LՁھV0C&^ * :Q/shqKv,/rT!Љ!`E)eUl{LoݗtS#q;cg^:kK|73]CtC5FJ$mR꜔^pH)Ya|o@jTy"ٟdՠPHMvsŚ{B^ZF ZhG{KYtp$ڃm]bs+>B.5ȡ,/nW E 1F=e}b}yBM؇X(:y7*9Ӭg>2&-B]YirZ>^[ѓPLنNn d^T%,M (?wqLmR )Qf@fec~Gy*EWEt]bR,y y:!nFk*d{ ŸHNJ߄ۖH\ bza.; I=܊TDmbC:UmV'vG*}'GcRU>s*DC?9ޚmp ;rP#Rm} )_8㹤B*_(6st 䈅NuS6SP`ym*gr[J} c_b]qzu|y]UI`&K̚VFt՗ UZarx/-_ ƘXR/FxMNmVI[Қpu^)7O7ָ$)"Ź5ac-|x:| kAT SSp->!mȢYwxHS)I |&yz*"ewzPȲ֠N"mcŮF$_p˶/hE^M:K%% V¯joY|nG3yU})HJIJÉ χJ裬%/.e=bsWwc85Ͳg(&/6s)Lҏ^Yunr9>X6c5۷ܱNsP 6{s>ŌC$n3~-8m+ێMohT7(֝TN K&+p` F#0qN #y5=.IN19^ :>&j8x^IC;7DG3woxf]5M$3`?9J=51d/b+=^. vjN+hx|;}m!v=t??8q0aX$*XWnGa >kwfMf3Uw!+BޟEcQ?._@ S =ATdq2 pk+8IvjI]iqP'8mj:PJXҁ%?>=ĦU :HNEG AstfgҧwֻH'If2' A5Ը0HG9sI|ݸ~ pJN^ q7O0@*<5W)0LŠ s/ĭ4n;kHFX ~O= 2EzA)98!S1MFNRyX vH& GPҰNџuT:jJVSQ_yZK[Gnj=z;Y7%ujxY;ځ|BO rOU)畉EUqQ?z ϰ8KœFc#y2b[r59>5Ɍa2YHcX0ݫ\u!ȏ{'.13LBFeQ*̈́y ua5D?5 0F`3zWKETH~rF-̴^+&2Xe:jӃ.κ.0pJW8nZ}Mes,-=@󗬽\\O!xzD,YoM/_Z4?! D]]UhEe]cSF뽹M[OYrCm@+Eo.%u?o$:.ZU2MNl$88"!Qr_tw4+w$DY]=6A[j[DZHUaysHk aY[JV=/pB=Q;A g|tvϷwLke4-b)r|dh`/p~Lij@X\)mfmվXXQSܢ>vZc2;m% ߋ~YbȩBƚs4YR_HbwQ , -L[j6ZsJubxZˊ9s诖Q(}, b1#.w+Z ocY}Ӧ-oa3[Y1}y ㌘2hL{RhN] ft5f2QvmKϊY3bdzoŬI.:O|H!*d`n|qpҚa7s033MLЊ=[RQlȴ~̻-j4َRS1SEm%X޷3ǚJԉvnkiai3h5g,hs6ґLs.Wh,}YXǑ//-ߞrswKll GJߞ%4Fg;ZRe=WcEw`mg`K@ԙc8| ng3lPBĦͪԆSjK*- ճetk,KAKQkrLG=J-^~兦B##ʇ(@ qprR1}Ԟk-MLNN쯗`|]VX.]9[l:kl7J nCZ[mb ,5"DtJ_{]CmR w rs1#%NGFb.=ڡGq U8yn^O)[Ŕz|aذjٚ hV$W@Ps͸y,$[_C˭[:VȻ-C<ÍmxmbQk fMV9# Z8lkh5_ۘkIdL]fT[q>-^I] (SW~6emU*ڴ>6 >66?"xǖ唢02[Ԏ"z%wbIϝWgE$J PY9V֌m N" Hc\Ls8TM7t,8bf\0eM7i7~Ml4ӠɩvPF n2xjsiHm ɉsQsT[0eGHĄ /ҊǚgR9&BG{)G(mׂTVkJMR9`}2:oIOJ"ܡz]UMiȮ2>{T[^U؞i6CIDz jߎ" @kH*\TP\xhRزS)$eҴs͹ixҮU'XO<50Xu g Rz\VDSAɊoGU [,yRP#qfPo]MY`=G=ov ;[E! vwi4zmmJ -,ZcNaUR0IWGCk*mq'T=LB՚E;1oH [J4x}SaZXA9^h[L\@9[ Y \0l{ܿl7tz,e:uGswXɇ@z Jt/X`E?V;gF<%"՜VXps80q U0x Ik <^fvF #VwN`*qM0ަМ#f;w]2jԮ6PubdAL@|{&lEp% YU$'AG<q@ơ :PiC(jj~/LaҤ]e͉mJ#wF{j j!6qBVgwj!ՔlZ[4ܮ!фQUDd£x'i2fkaUvfb!5Q ߗQd2% aysX&J3l ,8h-ٸzoFI7ƺ%-]mgN3k&ㇻ9.;aX(! 1X>taǒekcЫY׉Wvric6ai.k ˬpZP2JЯ%V YinD85v( @,Yt.쬵VQB ź %Fc*zٷ0̓v{H}>Y=E<ĂQ  8%Z--yZ ƓpW[GXQߞ.0;^\v>d@cM WoZw}y-6 H @Xb7=rcl!Jm-cALa/^%eVJp ϱQ 獲1^+%|AS0v‹[k竨\:\j AaqwF,Xhy)g 'LcgF=]ra̯^(D(~2&T̛Z0&!#m̘P6G3O4BER!'/9ҥƌESpM@]RDN: Il9 aѩlsh; 1^@Qnx׬WuFg[6:subndkxʯ08F}{5P<ȁJ/Q)*6걬v*$O,1:5\^ׂ33+Xkv65rଅˣE"GQ^p )`[nfd@f Ϲ˝%•a# n~tWD=4e8*<z^B0q<%|c%+&O&ȫX+"H 1MZ دY{mT=8t۞d`EIJ| ﮱ\Y l/FR|m`/~)'…{6g2 K.&OU,k8å홢?bY (P}h{OKbDI7l. ܝ׉OE3_(j3 USmvBJ/q \>L U2Z`kCʹ9zH& MlP();0ÈY.tơ0xG#]}]C0㺹&+4^bbʔ}L#yuG iV4eI6PZI !S· koCf~JRж *1.C{֞CdLFSO*)Go} #YZyf: LRyXV M([h 8.h0 (hr|TfI'S5wl]Ѧ qj~cǔ̈,A. v=xmȤ$y}CG3aLmbn5/ާU8('5-;8dhº AF/yX2-\P66Ejf]E01'd9#X{LOj$bJ`0v+kZՐtojn- Z1F`6 F$&+tϮw:c~79ۀ̙RtBϔ߯GMJc ,kd$fO4NV4@"MҺIۊu\;}C7fduWfL֨AI=F8@'GIf;c#FyEK)w4.YZXt1@H+ g1~5I3MoUJ塸.?WenΎAZQ۶;XbF(%8r;Wic0l|`grA ft8dsD۴eiVֲCm&`(W[p0vaD:p--XaMA兵"mfԳ`FsO>xv !b ' 'QTG`Io dJHS'Ũa /? wI҈($Q]& 5౗LDiCAV+.J4 nmzp)P3,)MjNy sB'qK G௷83dQvCN:$ؐjpb'jl,k|*3Eґ͛JG:ѿ^|p$6?gyoB }{<:Z&u,^T,\TE8PI}k*`;ŭ/6jś?yåc}F&\ߧ 7'cU H#J9%~WR1L5 ?zeO~;n꼖v%2:/'9Cmn!;yf)Qmi;}ƛ|ؾ0gd& |VJ9(/!T<%.ࣶw64~[T3J"/_E+1|0ih9x4yUbDx(& _ɓ|/5I$_AUx[6I\5<1o>3y }8L^JElN¬@KpWhѾ5-QZC <."Y T ڢ:]ovXV c%/ Ld ჻5(GZo="7v ShwjDz-`o* y_"qw?C 0\Ù朽2uћ%4?qG]LE^EJUR=bQ"([]y3d0`=,zg.0N{}4\F UU0lf _o>sq#2k$fܸysoр^6rxJad39h}ڝ}S/:TnӚxZrϩR`D;Nv u\Qp9坵uiP͂n4׈S81c[H)ڄW$f:5.7_w+O^.p :ޚ^J4);+U'hxE %U ʯU&?RWl#_Fko֝*[V+`K(l%N^p$Թ,`$Y$*U'vT&;/1FM[C4VDjyQU(Fo+Ŧz`M(1Kj V;]4k*wܹak>V9HFC5n*Tm[W)`MZ3f:zaLz0S+ahP4FS]Ӓ\-KP)⌟1b410gC'G2'9kyq"ҿJ#|Z2XȥdrRl 4{h2zT $ȔiPΑH7@u#olʃ3ΩnМ ݵaP7IRѻz)dTTHι+CĊé0 {AiNY|԰Iճ{Z+ P1e&[ UTiS*,A]BEAZh}V2@Ztuq«W_eH8Jjd:;S Mx$rޒRM򰇏LWLkotb.az]mpvH5Q}eOCcntݥPMoTԪb)1UL ׊D%ei3Ä!Z^_߱{Pȁ-R޽Virv r<"n"QMU^C-FM'=h6s^qll0d4@C%bD|6Gm_>W2=(&>yi# oz~ 'l@G7+xyp`@A>jKPۋuHzclMԦ:)M'OwL?\$#N4Գ+ E h!'NWMP{ԏJUm$B*K9*JCK\8X/9il1tpW IsXvblcZ #O|c8l;kK91Зʇ.ߧ$u$bNf׿HN&T67`j'IgQ#Z_~ ]:~)͙onnY69 Quj0#>L()ɸgLX~0٪*(ꄸ\{-4cfL]•9gtv;& (`*xć]o&ŢIpqى!c}4359Qz k]!:$+vc5SKLzpo]GP[JX֋$5z jS/m(Z.2Yzel+DTꀸ؈l]AC2)_OCL BHBƸ9QK8|rS]lWzҌD7Mٹ XyѶ~sp$ i y_UVu3!)okڅoh{JIӞs=Nx$%5z%>ZyvboO'xbP':փQ͠E)Nvޔexd. 9P"`ᎁADေUcwHhiZB5o`g!vշO "8ʶg<4!iGKP?KQ^#Kk!/kڋu>Ξ]hOupx>Xg/‚d"aA;A$Zƅ+A_c+9E9:v^1xř ڡ)Y8hywB59@>!ό6ὠiaLƱ<\MZFoc&1fG o|%) #07dk,-5bm1zI5 kHa P!oʴ`z쌇.;?F;Spu/:ğc/XcfieF]WǮI볷QX}s^57~j 1{:lLGl|#M'H 8P='SՍ $!1 ;AATgw,&?қY|'6n##5{6f{w_c?}˿mmS麃ۗzyNҿwJiZxc(՛RͺVAP * 8t-G:sa" #qfM?\&)pBX OK6ff@s346.D3)Opŕ*[W|[T5qtah$<Ęč92ɤuH43@"~SYjIo~B2ix*fSOgo $s}n w 4eH֩wR `jx8\#Gӱ=4R-7;\c'+mLd:G>}c93Ou Si!G1n}zA t6?.!lA4-Dm&8s}9(xQ[s2ě2@GOWis+sEQj)Hr- $};Y={<Ľ\)>.<u(bܒj`bOx+obP_}>Z 2d "c=@`&[!cID:U9aN8b/yTաSҤ>{L')'5|zxHx\ع:{{~EB&y^%76xoEI޲v#rӬ (}LӨޢl*xZ]RvNY,֛HiRB=RzzV܍ MN&}xsk4mY쐕.:BYӆiGG=ܼ7${1a`py4+cNk)xh n,+I(zsndm^̗99ԲU94/6oo0oۏ0W9Ke-ЄN=f{2BUKXCY'&MWU9FQ:ɓͩw'dEirfC=a~#"geZBSGw,st}n0ZܗGDzo-mPV9ى' A9N1 )J84 :LRp&9⾭iTvB8mm͉KYCGJYlTkRѓ9&ߛ*b6#Iっ=T,/y6RI栉>=~1ؾ#I %"=h:pD%q9Mi[]j~f/jAS]ҵ~>wծz>P^dۯ MEM8n2ultB>+Q *`LKaSH&j⍧~rCTIv=pi65Ww>c/-N-T07% ըH] +*b Ť-N4s%G+'LruPQ/ous}6Rz rDUrOVtf}j:F׹13]jnʶQ!˜!y4>T p=>~"՞ >Sڋ+ߥ7a[X^ VvcXGjww9uzQ[_rEQElht٥{+)ԃNi+h>ElITO֫k6ᘛ8)$BϮ7BS}g+I56n_;+d"?K͗t-]L׿)r I'J LjYa5wEj}`@2.#LAc; V'JSNf}oUG}L:dG0%c|2/2cآ]T:-Is?XdAmwO\w G\5Q"UBbiny:6=?1p~<4s-\H3lPl!sgaoGO?\ p"O<r->l v sjt{W𐪂 |Dtz[ %q~hxōT%! hB,UK Bl? A܍d|BDSJpUTOx@_͉Ǖjhup<\^t7YON=.`]#|lɝՊݷ̔0_3kY5Ⱥ> ?l$SRjd/OԞu5rx#Er|%XJ$$I$7ѪÙW:xCjI!+4'y;e:|xcSq:4cV}RV2R N8_$*w#(+tjQ7pWpUc{S]([ejRSx]ϥ#'ZFs{;qj, m-F9OWV~Nut[nv,y bW˴&޲_hAl?Ⱦ E%$RT^.īes`ph8,WڷuA$uN8{*IMBo;_XI3ڟ5}%mgR&;|xpᘷEG#kpGyGXGֶ.ys;imd?ϗAN~su$.IlH?;O-|xf>:u*Br|J׹p9U׵oMCutrOd+7:s~kG ہvHNnsrhR\MAL.[1ݻQڷOk<>Z?3ܤ= 5fZ _EB52ҩxN#j-ee'tBvM\^XZũx9#ֱ.x4҉ g0ZFa%Qe/^qog~z7}=|^L&|HDWY ϻfmI<?(0Go#0F|`Egvd:C.g+<|6Iz !Y6/t.ؚIMB|~La-9ȅMM1xhdhtWiɌy.~ws:p0)I. 6-4NVo꘧y{]eC:u-xօ@(e^ԿtO;ؒ K9d=!-xsc=>^ί!k90ϟ!j ?8,_ >^XT= |]$FFǿXg҇vW8 K)шZK^4Ԯo_=\毩o_pU/k>iʵ'<%fs ҹj$I Hx'q@x(١+ܦLUE Y+/V` |Fu=Ǎ ƒa &QPw?E[vH:o0EF$CU oCZ'%};كÇB3Se^X:>fo"ԃ|RPa'MZ%wF;i:NCC 6>OkGH?W#2""3blϾdžl|IرLI\_XU\7um+>UTn.wmSoL-}= h"Ǧo}JQjֽuHƐx9 qy'o+U8PZ "\=,5 VL)C qRqõnqwOzޯw򸼙D4@f>Aآ ;˦6h(DN_) E~I٫FG ,ypbJ5X>=e(+:HG-(5-fs4&v+En65||c`T!2QcYfr"~}ʦ*5/|G>LDfR K!(KXTǜכlnsUZdD<8Υ 3=y-''([5JY/&QDՙ3Se&l5R^6M383Uiԫ Jp}NS BPDz 91M?$hrjd0B%AM]!a3+$J 3q'ǧpUŘ*1iXAHϵB(!qI} yF!;:K?-XRiQhO;];'O_LRI,Au;=3 V 1LUeTO)N`ZA&mB<ѻzʼnT#Fn+ jp0 1 $: NYWkzqP<Ji^' hiW+inKj4Q)3Mz#Gh2|OKs /OS%h;e^ԉWU&hbu7m95+opەeo۶v7Ė=>ۼ `޻F)Yyj}I+Y_&ĉ < MM{n,l[*y9cjBq ܛ7/0c3(~yB]q^1&B74jf;=8uå)RVIV.IaY ` MbAlYY8I7FsΓQaETqcLYHNra_Rv) ΨE$iӤfJ ikikgIѣTVa"We|@~: C @RLi>O*FZ|Py:[Σ9.~”paW xG%6&8i3i)I>X% jGX'YopV~u~iN~y9$Qл1n0@GlS\P- Nij-5h=b-/<|jpE#~=߅v|ZIaƚ7VYx |du59S<*v̖䭀; Ă3m屉L%—d@--wWRi;JԩSRiHzp&b1 3)t:!46l"`x4z1Uk;S}VMD Ji/em_ Xx|ka"[=sH鞈Hakˇ8"wጥs nq{LTbby& izdbr!vXZg~ ۊu0yVSZ>˩R3ݿ${"eSw_G1r; `$N"? $XMni:d& ഴrx/ ]9-QÏޕbI wg /Eby 3ηRϑTq9|&4ж#UòOțV#c+Mjq׏%yAڔ(^%F-֕M@^٤ѶC(s{W`b_1ں5)#f49uě(3];8hΝwx*+G>ՃNEcTau¬ٻ՟԰~@==s~#|v֗޾t%vm9"F(]liQWU7$HZBd_wBX%Fxemωr=V O9/ԸLo6f"'Zc0U qbO'N#^$Y7+H[a33vX׭Pu|඙VYujr۰UUl3oe .U| hXj7#;BXj_LBj[thPM>\+$P1rhtX"xB7onX3c lOa_GA)., ]&eE'RöE|x5>nK]ISDHul:+sJuVzXp7VM򵪪=aUu 'o#pW|c>-kgKW+uU4<.##a"+Yꄷ l#Q;S\mʥN&.|V:#N;Рe/A{\B8qpq-qil>q\]:n4w.gK(APrj ӌg r̙&]S܍RԻ.|mN' Hfi7BĂ4/"ga894hSvNY9ߡlٝg8k֩Q٣)IOlfWzȄ^ -3 :Wҝ6&OR^}|swy`4' ˒ ~DԝisG+ysv4[,n0Zt9tu/cj.ENoT;9U.`Jjn=8`t}<=w˶￿zn%ǯ<)gtf ďgSpy#ئefキ8vږ]p9INZowN\YH`BN:4I:>0eթ ڵAwTiZ7+.T% dCN̏Hmg)ߗmYǯ1J'!66^de:?~wm;b;?`q>{vkPSnp] e&A*K? qwؕz>$q5Ţ)g;m%6$@/)6 ]vMk)F SyA hv.(XFӬ[+mߑ˻1 &iK<:C#AbdI\]+n{MkIF:zI`Ln=x%1UOZTN~GB)D7öR]HV剰.µسN|H=rBٱ 0e׮'u ̢_oXԏ~|D[9us>DKȲg'kՙ3mE9[5:([kQjl,y2Zgm|{1kb ̻&,G~sa6M_S.-:qu8St5BmA+l|T g{G2oqE-oOr:sCvGչsRMLӻqSiݲҹ\rkzv5a|uRM<ԑgʒl:j'tP[{ P6~l*ݷկv;z~8z+vJiCBΧwƇڀ};3!vp##p!t{r|kye*U멖fu(U!W_-u#nP;1ڲ?lQdĄf 왰JAv -͏d-=6?Guf`?lOϦ3ViS =)hrz,w/<GRbnVkwʞ=6+i={f&ZC##aJY޷o`#x7-)-v:BErL:vkƇw(q+l,>a[2}}qN?S >O?V%A*eeܤ~S@n$*GZ>`UV[ӲT~+s_O8h ~' C Lɡ\|$ğD$9@1}ieCI]rԚL:NWL 䲂:g΅1P֗ʨ!' 1Ĕ׍:"8Yiϳ7f)]7uO.#%7vRMSPe3;>(&CM_6kAǜl| CwSL>l.Ǧ0N iu@'q9s]"u.jx,n_ɿZԱgb$Ȉ~1^Jqe]/9}5gkMRتw/JM//˶th,w:Z;y}@66uKN:;o814+T'kٚiN.oC׿mcrR@5M%%$m ܺ [4Mռr-Ya4E╤Mn{RU|8x8yv]} RK LE~ AA) R75iEz`$RoR2Y ϙWBRU 4f2KʑT"u_%?$sSTB[\&A%w@i l*5Ԯ;%Z95.~n.#B8tH~h 1X%ULj^ %א;|ޞ8 I^ L R44"E Ky]ѓɃB^' =FktU:St{9c :d1RE[rX X >x)Vw^#ny4zRыR;2E_.&VHi׷`'tFf^ʰL{Y|t2I@AbMי >zgʯFQIwi WAOdY y4!8XcEȯQ!Z؅zԉe!Bx߳g_ՕUO4 H۟<:xCgaGp| N RԱ(1OQ%'bqj'35e>lz(#%%]# XYEP [)^FĒTb]؁h n-А@1+z3vD6BOPd[w^S\gu#i-1[T&g>i)JO-[+k菫HQ@Tr^n5H+na*0wq,7 d3 |#bd'I_}8J/H6}\!| Fi4{ZѬLfuHR%ZQbL%"Z~dv{5ro'RDgW|R]%idƬ-Ӑ!dPW޸o#Py^R~,id@'SnFآ5K5]Xؒm j.UgYwXQ+ V?JB{VnqŠ^B\&h)5:BX|y%`RVO s㾊+ӬGRX + uhH.IjCMޕrjh,VE+ӎ%,R\7e85H-E |@8_.۵,ݽGϲzQ{XgCH~z1l B i2yBb 2E-d31z)K^je@JxU7L8*6+ۤp'Z@O]| ua@իx&pBZSW~1#6`(`u2NpaZ_]y8?`AYh-\f^zn")dlVe di'>B6b~Ey6puvgLZl)sN֩u!r<&L;Ì| h6rE{R^=x̡TuV%Z=&e{[MoX 4F,B@BvK$$!L3kJ@,fnqi[45??Gm qruo4G;LmA^ʮ]q<?O B\\wX0i?1{9@:{'ڴVAg9ֻR:)+ҭH. Z#(f[{礲vbb%|GigDSrg0W Ĉߟ~ыs[MB.y6R:}3ĩ'ظ39n in}έFHb\f/[$S$}IU7,vL ;S*\E I%׈P+$ 9AƆ@3|jz>{Y)5ԁ!a; _OH:A'ӓ GacD6:>N hdQ:wD MX=CBEA!P23l0+eE^9\X5W;`LHLvm;wQUƘx)k݊bc#OפF:yo"<@&5̎كZ)9c2M$fbɤI }$Vv.@C&Q%m_ 9;G3 _[_JP/?T t*EexfO\CN9dX/?V8:t-o\MݟaSzm;b[_6lboG(Y|W猾L~KIf 9"qS)W*Zo'1rvL|Nx4"xwް=4O;ABHxi!-udүbv)jʢz=v` ɾk7Bxh`|Y>#Y>S\gn5X6P s?yJ~P&=(hG<_Tb6|Y&#VQee Ńo/0EK&3Xw !/8A|VGr0&!p҉hJ&Dk[_$|I,uE|NB70egZ| /dyq)9q*'7 W {*rZS&տ@%)U9vBR)Niyl+ 'E+%DR&RH:B} $ q9Ln-oߴ>/Bzw?h>m"N$-s`^H*"j'_W*_>A\)|bb;kmߢ1==}ӮEq>:n]%_7Aǩ:Z"Z9Aw|bXOQQ~"rva2jH]n/nF I2d bwj,&fɺvúFPCEN0p,cw胓]9BЇPؗF 9s"] ȱ&8i88tًI0!Iս$'YmJ^+ֻHU1ĞZO#G9ӡ8D>|mHTu2$$ As SImo'?IH=t5ݧʝ=vqSC sC~CHC>i;(P*P&::~"U=r?(p4j'bT`<:4-w^l}Qqp Tx|/ga]oKIb% vg H♴Iɹ=OZk0R;ݑR^G0dxz6940H |$6? 3xcv6#`f%#wJMw-շ ͳ;i! D0R /k\ ՁnNn8Xk}Qr2FO縳ʸT?+@-Rx/  NMt8VNpm5 PYt+H(AiZG %zN X?Տa1V,d(p6288vԒ%҅R>Buր6޸ljkMƯ,5QponnMP}_zeNu1o^ I TnmFz*cubO|\]=OY:p) '^~^&]ls{OsON_{E#T'L**Kt:6ntqv u佩KcHC1 )43>#'2Tdn-8t(t_rvߜ nOQ]Otݻvr~tʞFAISMAyv>2iv>y~wnˣiO~jb7{۵Covx^=}YQ97ɲ#5*SL%йyv-Ľ>^b+X-ˁFc%Ue [XiyZOҏq' :2ѓZiپܓjhH*c\rRMH(L|3VǶTwŚT緄@gR;cTw?nة]LיX"nm/5*>ס~-Eo})[(fdDE9LLK01s#SN,Y<)RG^NZ2Iz$ I*;: $/IϩZN}.5vK,HTG 'W52v$˖`S_4/ x+Xg;}q*`V ?UasBHᗫ{/PJk`?WX16^LdNS5:儥X} 'l8,׳3w]R0e~er$3frF[jꍷ4l\RFy;R‰҈&VN N2u {8sFgNC55 >z"}Iۛ\Wڛ[nec47m~ϮP]yLm0־a I߶qfr˯}Wַ;z* y5G'7ۻ,A9*jd$D0I|tv :p@ 'NdJ&`>P4#\M4[_˵THR,H'p0m<}GbPܴ)̩]!DkTX r_eGfZ\ eN el%|Y !0yme3*#:/6‚_|Ԣ.W׀q9/W4,5vLC +(3 ~tW(tGk~׶ !_P1Lt[Y~ir$4dsZ; µj 'd)Xxҳ܈*0e @lm9KSE-!"ĂWI Kꀷw\k Ԟ=|< _ H] \O?rzKKSdD5@gGdՈ֒IAʇ5p~5ϸvbR=2ZQ1H/eNK`mR}ۅ 3&۹/䓩bD,?##T2i ,Ā^ib@4x^I6GM=n|=lMs"z%]` Jt< 3u mOWᓪ)jjiT,=Rw[[1;[#")EC ۧ_Wߪ1`1 ;8oP󧥝'oV@B-V pkRL붦&& :|&%k" 1ea3 W'dsV x ᚦ D"H͆G$E_:E8cY]\ bZӐ mɘ#J{ٺV ܡ)b:5Vgڶ6.]9cxv8np[ߟ"4Ku曶F0⮢ҿB̛ BbBuH8☹z+~Cիmͩ41$߻HK:komwz{u,_fc6a׻zIMmOjRRri72cÆ:ֻަI׭I.`? MBw^3MF4 z(EL$2`bN\M[L qo;:2;@;Xꭷ/ci.Ep9`w[dUCC\2Ͳ)}p>.\5nF 6D^MLlLjL e 3%UO nWavhБ#*ڔ4o%@<&gؖ&(wyH50כяUn<@o:Ww;!Q(ciŸrHQNjlѦ|^5/ڭX­fTE=2>%Ě'heqSn٢1&=GjwGM5q']!Y௓)j+XvÇvkXg&*2tb'jJ*3%}LC_c v`8I)ħNѴ\OFťh¨#;E7Qj=G,NGIy6%(s-Kgt8|8yHɈgݥ 3Z" gHue_p&Bk~@@ZqBsh0 oʖ.k5Y?d\|RԹs6|Hk2ֈ+ĺWfbB mYb[?S?t&͂OJ'87eָHfP)TeL*.5g5sGE]o3cw@%>X zi;lbk- Ӭ :N,s@4.'I]aRH_3c`Dn"id8j[˟Tq׀/TSQV>Lwv $f[e34Cqjv<|oCҞ% z?xprdm0D4Q1IT\N'oKuznյ6yGi?uUL'Zr;j OcyXӶe^?slO X'6˝f .6?M;rd-k53Sw Rh Șz|2296pQSzy04%%#i9788עfPUsE6K%"E]4 6-"iaڇDI&{6qVnޜ%3; A[l !ecX~Z V#kXAbG,1[{N&L"ޫWv@'ߥsNЖ )г8A{E2:xl9ӣ}֬0KЃ4@ 5s<*j1+\)XLf4XL&;NlogRl8q%л6L09 >';%ONmf7Y|t6={{g@.ށs\ª4R!( Mjd$y8'6N iU[c&k‘j.3_tpl B'p_JI}ؙiɮP0,0iTrCБd#Bk:aLpQ$)-t"pQi '&E. ձ[엗 m3IW10UwGG3oRF ->rd?VJd;7ǎs<'$4u |sm69>ׂ/`8~-Қ3oT"Tz}arEƒ!82.nMM/4E[dz={MxOTO˗K+<6~ks~o>}瞞~.Lxg/k aӠC!l20QtO@R9$Rd߾fzbԏFdr%yv.^L=; _;zh R LQ53CtbqM2L+.\HJ5EEͮ۴ lpp!C(-%,tl Št )Ī:jdlPM{E6 nJw˶%?wqcF@-b߄a^ްBy ގh%PFbK_"XG|neh{0߷oP] "b޽"R50bmX\̯ :@"NbY^fmOvrJiYJp%2,--ߊQtzC 23oV>դe8:puDx4-F ڞ}nsK w;[FZɍFrMGv,T;w®`6n3<[4 ٣\@ gQˀD.ܠ7]J2*#Q s{Q/BBʧ]gfK})Kءb7Aqc1iIe]|M$^-zW,nd^X?E mQ{Һ]lr5o \`WhS( KJЂhj#<Bn05crQ7co2kfX hø)="ؽ" +WǎR䰋-miS[PjdW#D?x)NZg닦#6m|p(QarO(vX[H3LI7h[c<> nG:ϙmǨ5fÜwA9VԒfoxY!sJZ[+oƺo81tae)*HTs#jmb9a2QOCrvR$tP5}&ĺؓNlJ1I 97?N: 4=^I^B+KV!,p}ŮWN71YFD\[+΀u`4 )z裣g!PǷ ) bUGb=Fwr~˜#u6u7'.Q"f)cQKz`H5B>`F&œ9U/׉؇_`Pl`'c.EۻwvVX+᫕*B8ǸMK}#Cq'Nvgػ:6w^5۰7NJx+bM3T*]:9^=B:o,f+M0Mx7L54D"%lM|+ꯤ[9*GVb}u<8I|6U+#O;0q_Dܞ=L>v ub9y 75)D/6-i4;:G񨑮њ:~b"kMmcS̵%2M'}|I@M!c˕w'pXcq1/R35/ C~BH H+ؤ,g}zt=ئ %:Z3?f ۆ qdi[l&m s&+y +$ 6ڰK7rq r-D򈦮ged6l~2Fd50{4+C[<-:L7t+cLx<~뚾ttC4~H==eSw+EAةr~Jn59@(/%Nj@e̝6[+ l?U}yw JRkF>4q0B@iTeT҉<˜yk!aH!t5mn+ c}^˵nD`0B*;B sM# s4u>xIZ$U{ƝqwVL *zvavrWS쨩uN1@ˈU!!VCCż:ixi>W88æ"A~JٴdT|{OyWҤ‡]%J;MA|Ҟ=`k!=FNSiܒ xޚ0<ItΔ V/!L?]OAFpqBwǟ'Eo3ֈ-N xC?):{2mnBN,סC39n \J3{> 0ğ[$>Pk"n[DBTr5eUՎY$..Zd B ,z.&;{N<}ÔFAfҨ];ʇ8M?x݌=H < W/z6ϼy(wX+Gr\jjJiu+G2adZQq3HlM#KIcȴ%8HB.]r +$$|fk{pw,kd(޴'h2-G\@+LM&&Q&A;Ǿ}"Ō8UW)S۸2nٔ0f)\p!4DZ_y:hr^[He89mūv2/6=]m6UJMoY%rFrP5J'ÝFqL{~ZOA%L22]g9<sx]~gˢ|$h,K۪r[}CFX X"ikΔ W7٩^e_T\8‡|2e I!ia5<9G7B' D 4!f@!UM:5p\p3\:G(tFFg0L ?!t1{0 AJh0zӄ gg)NWN̕)G;&iWeRhh}5_'D⃯4Iu|a -ILh+Y4/E*8Tå#$ty óJ?*%,(''!l>iQI',1*K9߉orb傇QTV@QՅ *`&N^g։)E6S=cVVՒ ̒*/LBb[U.`R*: x=^qֻz]ϼ&cȀMRF)TBFsua ȡIVkHe[}UƿOSq#iI ČV>]#X_ XTSjD 2ᖅN߽w DA%N"s$ Xǖ8FfRĠr"dY;{!jH?ӶIm߁i=Ό>t!.̡"xrWW{=$(A,FnYTIgŤcjO#5a9Օq JjΉW`nW1gCF Ϩ6 *9VhDKg( gC|I]DMmuӴ( U1U`Z+b?(,XK:- S"8d~a)_B$FG.$It=8m̎jZМRSb M(Q>&C;d ,VpMU55Z6Cq%[?hl⦅oG izI\ŗiI5? fBVV<~mUL] 7͏K;h w_/[X zbw:m7{GÏ˵!hy;"ڙ_(iGӵFd%A '69#0X'z4K$CM`$Wjp F/hCMxMTbӠ%T~ )I$ a_ ߬ڵk" A]4)%9Da3:U3L)fh̡j69eɓُ#wEX9TSOa#Nݖ>ުf>;-4m1|iJÈ8  f Hb)T.] @Qc+ {I)M=K§0Wء=ZZҘT'&rcrѾ;qOUu.5p}_no7k|݋kP'u֊oV%shÓsbVMgcêcgFyfYdIHI>}3 *)'A;v[XB7,P+1\MTE*6XD*płw'yް94Pik{&R*jמG"A$wB)|2FṠRiDs\TBlZ۵k.hٝv(qX]qRSZË?ꅴI/Q}:ݏOa~H:VTy3}ı"^o \nՉ(-; x  Fe|Ь"{# >|-V&5>n:!5Ńz0L +,9Rze}AG-7\,ѿ-Tv>w Nlݘspw1J%[eZan0m{bj` ɠƌ,(򜈛1ՙʼZ[I@h,m=5Teޒi{3…,[:4/`:$MLj+"jMOLNhi%֕*u%ߥeyhZ!RFd_3]68Fvd9q3(r~gf Jfw\WwTb1'<L~'˃(*es.85T ٭rWiI>m>yĩ/F|G1u k!ơPb餣Xn& 5+p &@kyՑq^%U6gaE-jaQU;rԤ^^/ 6a\IqdhhQȮ|"T+bSs "yy0+yE/+nj|UU/1%v C16]WU+= M+n6e7'?d'YgdS#bTQ^t~$J Po5jBI 5>znQ;ͦ6MI=[5}?EK1(p<,epK|xtnFP}ᢸҦ[Դ14s1kެ~T9YRs],L"P_MJH|R+>\0u\7˭5}5ve!cz5p-# *.nv9SwQ װ[9멋p2 +TEkx[z._Qbߠk綌۹ pۿQ)svn^LWVΣ@Puc03]K]>⮚~0G"wH[߶n/vUh H b?[9thѶ?y3$ M;H^ \\5.lyauE:|f,pBMCӏH>3JwV) Ee.Y(R0%挀 rRC4F ,6y)aQuv[gwNVBK}e0(lh,6QsiÁ%'E#)KDGjE Fc0P,Eff,՞ES'Oʈ춍ʹ:}MgԾ̂ϙ@y 5 @M4ukV([bS3)l/\Z\GfݾZAkk|,n#TƔi|Q,TFFؿxq-9 3qVY}w]"'Obˀzp $Wg-u#dV[}vcĊ7l!#@h > ]-$o~ՌUB%iv~^NAYy|f,Gc"up)kVCAF'%d֦Bo a=Kt7v]|5d [[>(5|mMrE=w~YU:|; Fikđ":6^ȇDcyҁXTFȓ:#z&^JӿtS1sAd(9]}li5=71&y nD+w Kt2 1Veϱv"nvJWp&&+=5}oMWTehz k{<6AV]IW#9SZD_2Dfy=A͗hlY#,vejCs'ND }ާZ3B#ǽ|)/H{ G:K|(hP4Gĉ@heg^)O_Y*iK $S;cW%awn*f$Eup^ʣcbG s_Hq?e~rӮK1={n/8j>o}^3j6J<)˨V_)JU}5t|V [JVō:EyHw$;˜;"*3YÞ='y)zPʁA&2_'<9k;J?q-$/^ 㜅xL{m-,̫Vwouo 8A3\aWlxyՏZ>ƭ6*`ᙶBuY,W,CM+'xعG'O{TmJ="ȉ0;:2FaU-.6u:ax.IRSJ/Ã`+Ԗgs 4NPu}8}5b%:66-/7BlǮUnp!8<|2:a% @o9NCe7 }9rt:]%vX^?U"gB:}|.ڿ/4s@C@IC i~B,&{򤓁ψ@9W>s&4)0YqQ<@&י?E]FJˇe/P:ٸ* 2˶*<á{.Zyi=ݜWo97?TM{'xśpPG$%>pMcٳ`0R`\?xPe'`DBuh|(AK&:t6$E_Ăur-**d\٘ L_Od A|C GY{?aoi>X0SS[rk7~v́Ea[2Y=߼7ۧ/S YO(hJe C^|k*P Ay&=#n_!3D#yCSf:) euEcg-H("9YI( C)V(4> bfP09>~S k5":7bmNNSU%nqիԂP< 9x{ dH{",CE+goߞ [$DycVJ[ֱ0'asqu#O?ݢ-^tyGʪ6+Jc26fS:/_Eͨ{ty'>fDmb#-7V"1rbJ&q2&R&96CI05v wѺ(OaZ\1T$qb \Rgo跺x1We:)Y9" @fpB*uR^ȭ[NA_$ /8`˅[^ٔ<{֔D[Dr8uHVBw҂\3mV oMM㐊{2d Q)9I"gx)K5ZR77f$Y0W66v49m&1KR54kJ % W&\|1 &=ibpnbn(Cl lp,І&@b-~)-S0E@ҥ+[4<:hSaU-웘MDFc^5P. ,n(}2Ùsӕk-1T4UX[o$]p&aP+m X"=[i@MZk!ZSy/PVzo9pF%gHJ B~G$xt`W|VZc2tz/z{P*R+BF/HL}*X^Tg%Hg׮{)n3߯ nnƪkz"&KF` (n3hꝓ8퀍G3.\<2TL>8$@$i1aLg4 Mc/jT?!i?fd m&lR놇,џKcI^D,͔3Fvqmoz VЉֶ(-jP?ƔZ**a;3M,8#РɅSZ/wޙ5"Natb^[mx["m1B,C {k4`;lx̀mI^"ŨDuV#NSdi{YB)[J< ;3WY^Z=3t1N3ԟ=xh7fg@m&њ';s )(qX@FxwF[ 0uo&Al:Nfaa>ax)ȑ06Py3$m9RtA5eFGGį3 V) ~)sJ]̨.jZ}Ii3ڲԞ#Nm[.bniskK+0}qikӒ~ Xx G2VGKBԙ3LBc!fGX2`3ߢ˗&`e-\I@ٷ &PnhSl̈Q$hOݫXaݜtb deD"DА@p¦ cQ{ߛi/7qc6aa>q'g㎋=0/dUn9z)>JS0ig.GO;ֽq7#?cȆ/޲$DR󌳧Kreޅq 282Աc3>1b'׉xZíPvD]>ݣ8EM/DWK+0/^t v|<'rɇPK (4 e 4t n3t"k«o&qZɬ ˈphn_|ݞp}~]ardS'O=@حWYvy(,`*ܵl[Rc=S=n" MT[s[ejW,Sz2ttFNl^4]j19 OCS"$_3`n>uXNX`b V^9G濘u!?2t4GAW<%h|F?s7TĞ-cDoCK*4|΋[1'N9^G>{v.F..[s>`s혅9!\@6&As) ɹ678VxEjiPijP\A."zhuxx+zO&j>$5'1S;qq?,rαIq\=wI4q?uP4gՙuInN>l=5~!㕕@}N׮l޽%4e/w71Š9V+Ixr=AL+Ө.HP+-uzkmD4n"ԿPύM,%#+ Ad=˗ y[7BlV -w9v׮yF9{,Ӄ `hcEOf͚_l9縱:wW_h9'B䤙?B6 2V{MB[C޹ܨ1=6M= -Vּ缂3X;~$U!ZoG?xUb:9k-55\@V) 4z!ҡu,p<>x (7D59lA^33>UuݎsHL30sc_|b.?]'[JrK9=|QN;Zjݲ3صk_gqo6B*z/-yDlQ\3gU Zk%b]%R5Ҵ`HuphH(ԁ E07O7I\[aZ(^Yv7ta~k} e8X6@mHCAn\rJۛWoo4R1ƯG-qS"]C^׊1~ϯ픋U~-@E]P8Y&.hGFrU^wUcf}E/oqfoUn߲%8j/%ɳ2ѲJa.1|";3:~/nē7 doǁU't$/ks\q<⦗R :`Uu2Y |\&Xd87HDl;Y&cёn1$} A{! IB`XǏd4 EDHXegZ 8DU50($x+@i:!N1 ش.Cg,(߲,xk K|'W79STh7oxkjFf?yRB UA`HK6FcZdo8Q78 Va3\&ݻy [`39^1_,GU*~u'̲7ٿ+1͘πuS.Y.kbmlOݕOeNxL9:Ki55BrȮiˢ{7JxBPu÷~uG[X>,OxW7o\% Tw>+M-=E3SDFé]}w[ TT|3-)4sR.w@;.բ oN,b +'VOm]}bށx3&D1KOB"k+%սūn'O>8,eA%5O"悊O}-6_sa @Đw'۷ߴm-<5Uւ(6-B{E˹Wo֌R>MQt:oބjh`dW .k/ d 0=Nęfa(㶺~W߼I.#*SPUVQTl%}yq7T*{vҥ}̭ܰK^hfzշz#nf! ԝI1Fex q+^\og?nK?h~2;[AD%1~u:vj_=ie|x ~-mŊ?hvW61HDz+mbءqiE0 "O?oa[(nZ <&Ɗ2Ө{J, DCM'Y&׿$))ۡp~iQ3NV4u S9?&xm櫯cqdܠ564D8 A"R]zk^SL45`[bR獰hzb7=/4/yNOtbZI#ڦXݙ "h_ij{ZhNv9+OU b&s[M=A;6:ߕ7?-kmkn2u-h)3k~mM,Z:i#DC1z7ͣ-r3̀nlogx2Vݩ/YtRp?ɊTgG' B8eH@Wx-7L~܀2+u a5.$c%Qg*YqA>_Fn.yE|0m3Y"=\2;M$~"ie@r:?fx10 ks0K=㊇LQl~OTaݫah;@*Z_A "~}k=jocI!K6/'2MJ<+M 4{uYN!|Y8i{f3Fڮ=@]ʜh.?jÀ=z|Bd HBv"AW\E8S}:xqb,SP 4v݁.H bܼA;$8<,'Jݏ^8uAd}xX1+Hlo~Q:P' %VB`D8)b6v#iH[6&Pc4ם#M uX[0V(cx-imi~ DkĢv /C2~S=|\l3J` sSl&O/!$sm1ѫ"( ʽ ߌt#i0Xۏ>aWla,,0Tk~6}󽪌}/k[@OkH T}i+pѯЉ`$ǵ^}A~~"$\/;B6_J|8o}X0P1ȶzAUD\w 2i9),XdL)ǷSZ o!xs`>^F&VNt7P&fs].$@Y ҋMrk/V|o7źG'#h #vǜl|}+Jt4Pʹčy̏z{ͩbMAXo?om gvv""yPȔ$`ZS7sWyw:A(rMA+]m)-LwIo4fАIhzIxhǟM cֽo4W_ }e(rim [nUҞ2?g،#D*;B>̉,^Ru KwUOCykmAzަ˿h-oͣ$;84k:4m>d1*.bx`BG-]e´}^c۽*${@gm5v ӑ$9yE)'\kMvE1?h^Z<ΞGe+& Ќ!$p8X*4/Ĝڞ=f"N8(+U8Ы{ѫ_=;qrY9!nDCZ?{d҄=N):,'I{t=yoq\ZئM0IYC(Nv*4w%  nسɢX}ϛx/˵ɧu>_,<녞B:対ɀobhz|^%7uBICo>QRO:8(:|ӯhFH1+J6/Pg*)GݏzEeT&DAsjfhv[ġEQƝTZzdvb7T=VW+BX^Xe͇rF1#A&5w^ÙB Xa.V&.Vbc_R`?هZ%h{у9BfHv~(gw׮AZ.k- +µ( r| Zk ]}ܺ_H ;{jB|z{QR;J\꠫F'4 X) p3-,!ev{w ƌW`d <+T6mngyU݌1lVU qɪCQZ!{Je]U<,x?T384.\ڴu(xCa?/pɉŸk;8`@#YZeðS*$CGf V5;05 E}T/4GiaD;B QNx;z<;] V(܅yԀ{nX%h' 5ItMwp1-ƼE_x4X=*RcyDlsvkukF)ָĩ,9&{OߜVk>@7HX~V7?*?0һg*VfRsyu}C5ieiI~i2?4T?{nwd]]{ȅxoR?L}yiky!"ȠnO6caّ4Xǃ!dxhۡY F=sVE1q@e_0^zC9^%e#mrVn #̖bKqTUo`@^uj)؄_Yӧ&SԒUY q[Uf84$3d4pRMI'9\wX]N& `8Ѯ]-^6FfdX>SqVNV:6 j4'ibaB;Z5nѾlYY- Pn[wJ7~koKpw-dPU~w$o;e@-Աsջc! I˻Lx1YF:T[19.%`܏/\\3D.&&RmVA+*Q w[[,QGN̻^0 fd `wZWum\~BqE@t"Iyd:;ҵMY> tH:")SGfv`ŭϾ[Lruzd9[,pEgfj9lICZZNH7}h4g ^-"c-ҫgoY_SMG&2bc?+Nh~-ұ҄Wc+L_34rppp>K#z_"lLsIFOc5px2?EډmTF"N:줄h~uXu8| h980h>&"=_P}h׮Eda}]zH<4S~c ~kNv8*<~sRat"zn`Di6rSA/ËZٴv3S&VGoiآm,cL:wA<Ǝ?mo懾[W_<B1낖fgߛQK ]ta(2ZYK~UM~[4jʽ0%ߴipu%M<$%}l"Ts`h)hpX1D+߿zh XCt㲎hQ@.C3GBՉ:ʭ4Ҿ!]ê7$͍+_v%bOְA0*p4>Bi#/F<ɜO\g4+ܜ|FϻA wz xWu;w+Ŀ;s]Y麭 >BqB!AxDcr?S.5?~57zcֽͤR!cA@oa"@dMB?z"%BpfzL$4K ?ёzcc(d-SȞ=x}{[I96L4r'aZ>8TFXлv=S`:? zE=-$vŷmV8Kv"39YyʊY\Vg?Ix `4xoQth2^1ޘSZoCo'ħ4W*zCxt,.uI7cP~#{|36% Mn )Ŕ?VݐH}@zAj^wx>#`[tvU8Yk80?sL?x+'[A#aw1q]0ؒ|Lc8ӫ[߸ wGO*B UrA%}XS ?v,Fi;5@$Mۗ`mT7e'y' kyL+~͜֍9j"`Zktf`%q]A);qSC 4QȕPJQ^n6 -s4Κܯ?Z٤e7K*t(wjڞl}6o{Q?޸,Vi,LM'sFK$j a Vx9 ¶$>ɩW6+dE6p{r2G~;.ējLH>[N:2 @p& 쯸-sxU^&w^Iޫ}P>u{9<4tb:vl,!OO{O '.+jÇI?0",[CxBА<M7I_!M LM/80yAX3X {Dv^:}f['9?DG9۫irؿ_uI )Ңhx f>UdD=&ʅ^j# "5~C[9_?&U6 ׻o%HZNZcт4R90t, {&۫Gmz+R1<᳴FBJIMADjFdBQG|'Բf JFZT([!K&SNm1_ SyL^۴7ښS *NF5ؾ{l=rjJF6Xzy_wt@vcjsӄ:NHU[и0>>6NΤ6 c j"A8y?BVe$F :'#Ь8jH#`,4GC4ROS Zu<^e+>B:] 7!`5<,N /N,+ PfG=z+2~]%P|nHM"Ji$^YGwaΞurJͻɈJ60dm0tx8mp|E5OĨ4llZ# pF<'0h!&!EdcքHKw2/hʳtw7-XNN*Vå,R^k5'>0LIg"nlNZ>R'O ?.\> `\;x[Kb"߿_RO0P,bjƍz `,FFNɒ2>$_g0 ,3ڤCWJ0b#_,D́<َ^ GxAb$ !hpyJōp+:> ),Ddxe\6tf59% ?JK J =V^ `ɂ ,98:H.9ҟ s[j&Ng!aci% zō[eD Z@c"g1{.:z, 4 p Z.IHL0Ƴ&pr@>V?} n!bcS>Y;cTjHJta+!M,m[Vض^/ _LPf?vn-`[&)p5LtJHo|R`ŸU `9O@1eu(Mo*g PklnA}4+ĴK3vPZ  HY|nѠǶHN&5uzdAB |`rF|m7 JgI8 Xb͋Cl*7* 1„I[^o.0-jBRwݻGyys/ ;c|M\$nF4-u31of^Al`{q`eaaUyٙڝgU[[>s}vv\ssyi'=i"F#eѤIP=(gOUh}B솑Q+p:b:µs ؖEqbejK,|.%4ݔ0J̟RG"ze(yuw$5DLi4 {%qMGYȁmLs6ڵG~jrָ@:O \ xfaEzGQyR3E6Fc~mj@cX  ;N*:`)PP?*gJlC@neaj@,tnR.8Du4v ep˩^|9"uհ2W*}Bh62ksZ hИ[V{'G epm#Edg)A.,SGݗsvKgsq[YWNGrFLF4GE6vr>IYxIkg^x_d>%er;bthVRX[;3:ML#` ,6 d{Dm1v+|@H>m"Vfy(ufܦ ?;c6~*~3Gd!fGک#8u2Kt4QVNֵKp1U@i"H)0m4v6 ,wr`|qF%C_X~2g}Q/%K şKZDe`fGVB%DMޑ9ocf ux$F=\"=dC$͝xHӭS Y~vC|P<+~#yPGٞ`I Ӕv+Ӷe^00 劣J[y'y*8by(P$rW7}$KF,x\VS"-/;ؐG2jǎm2]on4y۱쳎ktxDeevĉQuR4$9 dݺkh]JQ)N/l~Wϛr^f a0T@Y@>S`jK6W8ODt.Rrx[8^rh^̤ˈ*A@g a⺳ QS7CjMsA)$Wh8ky8U5}X)vejQrkNÔ{SyYiDHP&jܗ=߆g2۟={G`v-lfԟM$Lɓy+l5YJE8)}Nݷw:WsSwpZOM~o ʮX/ O`;N;Cydӧ Tt!gE43Ĥv 7VlPأgET`3X2f/)JA1>Ĭi7{WykF+N#߁V%g ?y̩Mxl f甼]=TmU[c-[FTXHv-x-) B AAm 0C^?o w v{-V/ZD"q4թZXoh~ݴ'1k)*q|V~@k}njفnы!!w ףo];ܳXZ̲gܙmX*7߂(" " G7r?c{Y5Y8rA;E 1uN'%v lumYQq:5,0uC%Ah\Âᓎ E8R h ʏv ; *L3ɴ<pӦw_=mZPX M*/&N֟q?D'&O0XJd8F0LFL#"1~;O]ׁ#M K`8ήpaSL<2,MʪSlݺ&馼98e+tY4IlkT)`.r|@)Mb[F^ݤ<i0:CQSÅYbIk]h~>JX< 698`](qv5)îVW'K:OBi4?hء/bFnӐ*XmA J!Ĩ]8ZN3faPs7Ʒ44;: a f h93V'ҊYfuSnݑ c<a^<,]IF@̙O<e3P'mN DY:և-苣'ʊ2W4 GŴsa[\n67wزC< 4P?"]B>$[hPr%`f;=3c<*Ot (_PbWH11%ĉ{M…拕/hrD_\yʕeJ썁akk"{PwJ ly3d@c{)C{e< SR ;@u'`ʔ'-=']k-# [{3:k-dUBt'!o\($t&=Oiة/I*-X UC3g>g:Ia&S  q k&O?9j? n.UL8?mδ /`kB~RYOH2?„3]O4<49T 4 b}kYV/B2ޙeo ';XD!׊eS:T%WW9>Q /اOY]rؐ/(@쑒~t$# H*VOm'~CAtD B˃ v\zQtRcXD-,2Po8v>ƆiIaG!^bQ 0!('~9PIȋYO? /2̜IϨGc0x.Ƨ4:aqbɤANFKS"c>M|VK-qy`|W=j]l})ZPSVѹݼMsI3zupBes b-)`g/>Ė-:X\Cqn"PHkjuq D}eD[ÜrSB~Y+U\#z]jom#hAoH 0f.ڕ2КS-jdz3b'0F{Th©§$!s$I (ܞxڒSOIwIw>k׉FQlOFTrM>y5fy4K>Xh -\nO}mVFEo$ 0,DL3oꪦKS>NVJ)IT)ʚ-K1}Jㄹ'MPg=\Ɔ=`<޷dT@Ssݘ1eӰn},*|8ȟ4T3,G[zxijH_TZj6;]_(%1˄XbVը"AU;?<:z;Iڳg? z#p|g,PMc?\Bfc7Y'Jb/g9%g])g@/~`zxd壏!9' >/bWxY֣}k{RްwN=?1$/œqff̼WJ\lL^&&Yuj b }Z/)Y'-FHuRM:glq[LE/IE!}L1+6s]NfDا. 5e~j!^P;g@^o ߟL{9bTkZ25}ǹ2k}RM.z Kw .}Refi*Ww2}WXܸiB![ 统(- ۦS/o gV;%GFuqrD^%"UdS,|Hgjv~b'P(7pONͧSbJUDJm?Z pxʢ)tGm%Hj;A0B~mL.z2hxJE/LuG69#5&*ԤX"몶a{[5c6]f#COn>HU7iWuҫ5k;,eHZcZ1ah}f5)vMIqIkG L>i4z0'|F]ݍs|=ˮ\KzTPFt|˦P i'G/5"-;WV(9D!KE*MEŽbNJcO;R9]Я\خo3ʒ:O#)24*I~\ Ш+eDB+{?YDUJ%+57GO?YPǥS\D}e&,EjIJ %MOأ&Jk1a~n7; ֨_QsQX;KstX]=eAb*G @7يzrYeM;efq~WI O#Oi?hSNr@?bŔ!p5KE*kX^3"j=?]GE n /}*쭢*-7]ٲTr(b~coxP^KgNϮC&Uv]YOag ёj3'</nWJGrlȮGG@mƢ7`ܧe/: $oޖSGX,„M*.M1Ȫ\^QcT5W +l^RFzqmG,E4h5Pd1E+6q',Sc[ܤV@+,~TMJ^C=5zޣ.jS} -^!}IC5E€6oϮ(1dt훟cGϘ4~loWcKV4nE ߙo=CeJ FѾPεN9>r J=˞h{ .-Ӹc*G%y7 D?}Y86=B$Ju]q艄VҦi*q}TV1v-q֤= rg6UW@?F,[:) e0t$>ƝL5w{#nt<ɵM<<էSJYe0jm$ _`y֦-MmVȝH)39 @L_M޲*=f&j" 2{Jvwf׬>ݧq)YPyV I9II;0ï.X^HFa }2iFj[~t\Jl}S P94Rur3DtsRq&$9 RMJSxܤ81TW8nr'OS}}#BHI!xC`h!UT /JI}k}bx#thBRb*h_Jm_}R ޤhHMʲG yFF;&a^x%wVh嬓e%X1Ѧʔ!_c&c+a~Y3ش5c::{ջQ.y ȿTO>rbzW./qNK Ԭ<>2ݠN +s.3hgkXk\ tH^RUߥǗ#g ;RhY3* E/bctXNa ȓ8O|ҳ^5'ȎAl ֺ`)vo_s".q/2I>;xG}GQVx.DSći$2 p?ܼՌ@<DV, `?;1]XUi㇋:*C̱SBSb8SdJzj[I )ѽ=8ʈ i/h5O_:hFq$n3,C54Q7̢IAvq ${RݖWj72e[$`Z|OlIܡJarty!e2&f~"`dC?ϣ?>gq)6%XpNNf_8s.KN<9D|Bׇ<2KBbo+suoY]Zx(ÊUZC]ޙ>wF_+Qvn0B|).dOVz Oܪ1Fn/hTQFp—5PFܰ]z8wVw(v߳ը28Pr^n«zN'b8ZpZWyb򘇉ϫU'taW)L]&\ミ@aՊ4s}Yi^>.A6!r:1_ʃ-?x͆¯õk%j+"7pQE6E|rM,Yֹ0_$?JrLS)KZa_@G̣y%!P;}nRWxT^ Q)U*~uv$o9L0K]m,,kE%Vۄ׭ajKR'2y}YA`EG*a(qѮjjȺ>Vne931z~Aœ{o{ЦxOj+04x$k3NwI=ܭ_{[bZV'TLXn>'SbtZu:>o}U Wu**pcHhC6ɑ,3(%BgE`B rĴ8UޅTlb,OK)*>Pfy ("b`jj! _e°"5 g%*rpCm{4(Xח9Q](CTf X-g71t遃T<tYQޣ"=R3(z]CC%q{"eMfjI18"|0CGq,i3y#[DrAUtTtVxJ.F#U/ו{/E&FhޛMXQcESzg;21VI׉VkϬ\wP&ѫ7;ԸTtUʮTK,he랱WUáN6|DfkM8EiTGiL_ 5#X|s[zX'GuLW{cWOh 0LU×5[RFN?vIVpQ @"/3pY_~N Vi^W۝wsjSy[VBuR3$"A|q-Z>Ln>'9L+$#rs¿Rݑ*eo~fs.]fTSIOVN- _!,i ȹr(=:H8}Ԣ vReSCGQvT9U`PQ;ZSO] x |ltkwͳk~~[;d[7\Qջ}m@_rV_&A]vn OE7af_9?R&q.I:˄EZD yԄVDyBq*Bw7! HĬ7! zP 1kP;a )zBm'Fq1s @A$[Ւ&Qe'v[QmYo{k hhkQ[ߧ_Tԁ^l(&%7QU ^Ciz/5˝  OG|HWE񢎜Gׇ]xTeŋ A \pCh]swxv?(GHăI@mIDUyX,I(^? rU3?)74CKl^T2.9IBF)A¨PlR'Ez Jv ˢ5Vqj&AYnKN+.FxD${fU;RL}?*)&P|0JFu:!.2櫣?)y鴧o~Qǭ RGCW>/ix.Q?ސAҙd+. ?Qխ?i@f$@Ka-m,cB3Wf+Ča+͋qqy #ٷ"6fIJ1S81!sJ$ 9#QK SȄuro] iZW ŀ POo$mЊ$#mʥlFyT`ǫe/w(epaʉFλAR0 I/D?n@% Gy`2}.:'G)쉴5H̫j_Z=)bDk?=[֙$8 #̣ӗih'NŊޭ=fxOh8\4z70 0~ tH({4KvN)ApQfA($NKbS;,SCe+xݨxI~JJy;T@֤rD r'FݕH@K|@Oџ^ mڔ&@2JdJQ4(Jve)?CeqRk%ykwۋ BU!xv hDG2*sQ!))ȨV#u 'Or+&[!#וmLإe*Cr߲O'}>mm IYD~np}Sc咂2^,`Tg{yנtt\IK:cW|QV`\\yUv|$1+ "6oHiH:5+܎Pr̳ƒyՊ^vr Y$^+Lr`eIc5ӃNP*z Tw'Dz2I  $#ADz=Ӧq->N%2G2zհ2Z 1FD@<\U$+.繁ћ, 幪+*~|4xz&1ƏE[ c" FhmaTP6*qns(4&D87`'y+HNdg]ˑY&ި#EI%0=ٕ_Q櫖K c N/hr^Z .ʵ^eu;!֍|*w;~To^ps wmS苕T"OxjWÍ%,_Px;rs` Z0•SCOX8 t!K>BмeKTin5m7T9ߦ yD HWKТ7|nrB)+E赍 -@ ;cVԎL "bWLB'I߱724;/=xkfe4b{x"Qp!&h?GUsW~s6¤ P?xzJݩ;g_ 3`2?uT:qglwѭá%|WY|hI.h۹HJاl냲zsJFGo*qQjLtD$5lԓ \r1z(BwD;8W~k搜2xoDO&1I'4s눀@Eg@tE$ IJ|R5p%x՚N5r_)- ڿ\S.,p2[]|߻7nΤ_1bJE՝%OH*G}޺4QE'H17fvWhK?@9F(e9Pl痧*cMjז0nVT,1˪ֲ\-]G?)&)k2A)uKr)1[˷fZ?l;::C)ۆdLBe3{iBV -钘xۋ~ p$E{0LA~cX)A^%,"XlT)jn+\!V.:B}+ND%55+ZB.1E,4!X<.]9EhQ Oj fNkŔd`a=˖Q bƌ1b/XLt%ejt sCLkk琇sDrA!.v|+B_jF=E n&s4ʴ")r}Ex*>ΙT3< Y}°etہ-[͙$-(V>,0+L?.tt 0/o@ePz> $@?`҇$XIGZ6w)]aڕ+ ^Ɔ?,Ĵ ^1 O}`}GW^ B.htte]VP`1SAJ8K8Sí=],t@)Q6ڞ20l0ђ$20u$d),o!B;t 3 s -sD·X (i2Ku Yh*Mt7vî>dE:6sb#cl R1 G 9 S0]R2&.|}6)8 #s}S q)f%lP؞n’ Bk Ϻ`t)hy7}3$Ժ)М-4R3Q*h m-6ZxLD ڡnW!С:w`)0TV On1 .\qظdSQΛ=L;FW& f91445gHn.0RttT8%Ő=*Px4ic#&x8 E2SHC҄C3^gIuZЁ-Kb;vP1/.é<|FvО.;d&T%AS1d E`k3K;L O9,~ڪj! %9 vMl<ܪ+,;xfB$ Cc,LpGtavp{n/OgQw-Z{S5,lks“ $w)d;!dGZvtaЀ?¸pD39iJ-4|>]/}|tܷRgk" >xѹs ;p?P m`坎[.nlP@ޔ ydBG qj#%Dx9샲JLby*fȒ%pzrJgiQt] Ev#!AZm@"h/ttv@)D lɔ vj7(~eG)`("kI|g= C?J9w">6ؗj9OXN|ϲIa(rQg`[ yPQP>m5ˡxᰪrMbV5dksuLۨ-L*Lw*:/[AQx6׫pj Q{HUK'iB.~Jl߇-F [uYXk-8AM:G̸9P#rC*Nh[%I%j TD,I1sL<$&L/4֜^*~%P&1V}Y̷Fv| h9~ m`APۜiZAiur/x5D])s շeɊg%@0[7t.T Q]e(XlQ|៷ө6D'ɳbUƟh`~(2ߠ^ghpbq,JeidCn6:\4 pZ 47 4wFf3#R*@tyV@JJ9PE6~LS?拥NvFX2P :Ҽ"3?nkcuGl ڣǮ}C41.]P }Rhgw<orlT^< [%An 8![pZ!.FGixqlߚ m'lYcnA oOg=fNfsZޒM+ jrN(Q8ˁXJB3%)flLl,*.UnA0X_Р6=έml~k4CضE*\m%%[\*}O"EJow Z!*m%a2G+vK#[m,͙`v.;/:m:띓TC B6hiS3jW s?>z bl,2 !`n- @.bGwɈs7q2C^%Ld¯6ݡc8I0ՆQlAk+r@1JJ(,Ȉ+@DlAx'Ҡa]D"5}2T-K)7!h&MC'nғ$&L1_06n& ԟe@>Dbyc,z]2A me(f̓K ҳXؽ Cm iS֊$dY!ԥ қw"YƯmix١f%eGn>C+D2"Hx Ɇu'1V5Z!- t^<78$vX:yT143wLP( ME+ɉS6s!>qϘh+=;3*C;C{e4̸-ǏW{ u_^_vk ݼ 1w|L)-`gk USWh!懽RyD>05 b. +TXPuYrV+;7mkH/,v\P20/QYJ<8QC%mFmP.Y 1tL6P]_-fPl~f36e;"TSؖHi Z' JmVlfU ^ˣTuI7qGgL2:GJ:ђ?5VDܴ,Pbta`LmDhA vMHLHANhw0o3E"sܹl=iF? V6޵tX`SЀؼʒ RD_ᚙ_:]ib1#b@5 ;&)(<#q1xyJlV);%\K3f5J\ȱ.ycOliۚ 'Ֆ{Ǥ)K6T6_y Kl#&L,eR))-$Eٜ(g:z;X,7͐*|th9Cy6nqJ63M]z=Pʧ(w9F,$}m|#vЂqi]JXFLpяt)UN eJ tZ4Lrrv=݅CXL2;@dOk=x}@NZ;UKʻLuN}?ryD5*zP-/%DCxlSBo7 αj W0 ̷OH.0`<L߭CX]dw,5oKU:Ĥ)[kfaxvwb„Ȁ7~bѽ5yʬ>P.Z14VG}G~䄉[u>eڭVM|VQ捰SPe,DԪX0P, 1aV #V֕@ hUG+Ci~l;0NT֩lg꘽]D͠`B# ןQG+eR{w!f?Qh:=%֕FT-۫Xv7H׬^͑'X&`v֑6fyv]AA%!8W MɢNZ Jwg; 1+:SQ$j&Nn49f"?~QgnI8/bu‘#*0UriML&m7=v5R3.0VSQ Ų_bə߽g;(/1D鳶+y{v`Zq͎8f5ᎼTô*ѷ&Ŕt(;=6؝2b~`fv*Wޞ>Z{N1H@)>g_Sw()q;9=I|;M;Ģ%M8w/+5@x+2OC;)LqEr%+*(Mj,Q)ásT,̢L`Ś'hjYj4aRBNĪMYJA|ޭ\膦lsRQYRƁtCaqcMҔ=БeH1IWƹ'Mj\ b-ZXl$ VJcgQ,]٤QyeQ1{nS0zi:},&VBnjI%KsӔM hh⬈|LFs¯+#cHUMh3bl$s6Iې0l1@d͖'ß#dfv'G,p?2Y^,^tS򄉨LyyM'bsƤqfݶgĴn[<r>cB)&Ƅ@|̴ iLK'o[!ѝ ?vמc¥h*lwg4]œ2Q ўqQѥ HnbnnJ]dhLqYvl6gnyJ(bD'wڅ2Ztŝvă)Dnϭwֳ&#~Ns{;/~lwg4iLӯb uh#53c;InYwCa2'gHd5H.4GHb]22(Ñi~tv23MN@n< 5svY&N Ĝ+\(_T-P)},Oإ\/gvw L;0CCG؄wYQW'xI4;-ewla+iڧ̾i1in;csvk@fM[UbMDdREIf6Ӭטn$رl_lڂ#Gk !]s>+٬2Iur3ba)&"W֙$Ck3PoNHZS` ]P^![AVL)Mwq"ݶ5]v]jp1_<'_Laʫļ%}BlAf`B6Kb܄j+Kv[v[Aе$c}JOލڡ6T'AoxhOFf_RDk"fυJ$ЉlDf`<ȥ"؃7$wyAsdd~dv^DdN9ŋM{,eP@1wL[L,їZ#$ςt%-sKI0v=Bkʓ&("KQ^%C΂(͔Kd1 Grz9: wygyq=Op3l'{=i \|2=B]Obc4uS Bl3G~Tz 4 /ktXPb}Π}|I.rRn}|؜8%'hM{ `+2*w|h^\g{`]>"fo1Op; ȴQLmx8؈-~ _Gt1=Znb{a>qnۍp`L #ۑC p:RPeP5_ {~]9onj,[.-o) y9 )_M"_¥ Z}\Y 0kIG0رШ1KX)F%Nu{"yKFJxrw'M~J !e`m%9_L yO`;h+@_ϔ*inS`}CQc1nS'xٸFψؑS!ښI"H>ɐ_zƉwD4g:Iro;Z0'3fZn^\ۉWy.HdR0ږ~t,' vXJ MnFͷw@+qȟym+;nҪrI1bWcYbR`&M|>$d. 7caQ3[ԭ! jE(ֶBY܋GR+X@O } ݀Mx'T0 >H+7fpNTS bCX O-(|l)⯥Ĕ9hJ!e~/u}kq1y8AMA3'qC搰4~|ݠӇxăP3p7т2bB  x;iZߊs:Jl߀k{@v Fu Hrs3uV ZASY%1-Lا/Kڈ }7ѯ_e-IWУ&tehWD 7h5?ag4~DV>}Cn.Ds؟(ŽPL:7qEx 8UŬ+_3y/OaZO ]'99x7O-awjΉ1Ot%턛H ЊۤaƎ ƆWboFfpFDɘ:vu5C72KI3)PK-/٦G,{$*-Hni%L,SrgjGD5fR\ G ݡ[2?\1Dƃ%Fy!j3Ƹ,ѿ -g,|E b\YCbQ?}H%jG#:CgP_2 /W"+Ɩ"Q} $ᶬ(NGL@ӸiA}ftl_hz ĶLCmȺvo OeDxbG;G;?%zWٍ^ؚDOZuR~݃Ց'0FE`?woz*'(1qk. [J}4Q{PŔ%)Hy~EW7zHOXn>h99zXc{)ADMx n蜘 E ,h5;<(?yNRAKO _7voV\Z4v`x-/xi+ I 3Ч0={ԩIa}KJz}w=8> 3"5u\J1սPV &v RG;S-,)ie|[y0ŁQ^& j ИP|iF V)~NZý{!쯞7#M$R×7y~* =}hcj#PJ\ VtC &'kc\-. 9}cY치 1u ?R,b4܀~\rOڽgc|ފDkӮ ҌiqߦUQ )SFQ8W}ۏ_k[sP0A|&^-꤆C41,ȾfǾOEhI~p^]ۭv/FK?BeIY0bA?'^o`Qt"y_TgAZAO0"I9=ؽPm VYN/p$U~yMYhO`=~(DhnQpXr-c㧻)󣏐zs$eX%6=hX)"KJLX_,XcdT8/6@*2ĢBJna S#@hLE^~dK=< tz)4wH&e!:eE}%\vFYd|7b%y#;$v)+=RNZb#i)bb3m<3 ERЗM2y ۛ>d{4Q[׹b7z*ߗȐ@1@2T z7#?-,!itx]p OMgkBR҃:=n'˾lL9AWoا0D~,0I *s_~=F=>?cVy!1xIGH-3/ioo)=0+o'fWebb"~Fc 5K%@μRX(1e[J:$yaC"+6J7+E LqSMMՌq#KUݯ|b:*J,URQ1f 2p$!y3jS]Z07x'Z;vohރZ7RA}7->gjS`+2_~ 䆔?'0׺i-O`z/Iǣ(TJLih%2oI1%WW0˗`׊A)o)miZb6VS0* p'`<$ epx,ڟ@iԐݒ(*J Ox M:\/cd#Z+mS=EJe71GWޒZ֎Хlc[p_( 7F2ӎ-{2ȓƖ|HXkma"ۃ4&h7z8Ѐ;ϴw#i2=OgAb*\u,-H":[b^ݞP1R/ϊv^Oj]hs*FjJ,mHղIobw wR=B 8eL$@6ws4Ѕ`hc**M{2| Hb_Ti*W;TiִيO0[rM6?+yu9.YAa h2N͡/Nu0\o&'>3Ŗ}gESX#nG6 xbV 6x(x&&Ě?8H:,I0,SFȾhReǃ;z(9c 8If.1!P8k%4e=55!oVUނbmmpʎe=IL}  :B'nqۄnXJIV8*)Ԫ K-B{Jgn@(65XUi! .h|NÅt\?\|ݭ#̫Gq])I =y]Ze =4e2yF%,9?xxqQ[f8S;̫xcO$琓RzNVL%n0RiuZP^ С&ľ=T!*)֐Jt:C591C4;݈T74F\2D[я Re[Üԃk[WXM[%ΰ& ¾ }:ʓlEr&|W7|V$ղ蟓JEJM 1ZYdKOzUS`KNry[_r2oHvM&'=mvr Ě'dDyī$Vm6yK.u-EMέ$m͗kXj>>7awRtT`VhԋyKW'0cV4ɀMnGWǃQnk];:xFy QtV>3P`<$dV9( лC*Y bV~?ÎPIV2IV`KIn23R\3*9!L%_@2ۣQS[i \LEu@&ZTNqа6F9DE/n`g@~_ȑрHZ]V+2M:;.w}EIB@ n"|]v[-/mOEUn+S].*YɈ G8O<13|;'3oaTvYĻy3On'~:Pa؁i84Ȫ$YlqM{S:N 1VJT)jc.a=2S+yY)&|c?A}6N&SZ;7P?\ tLZU]*Oj5#}v?6}0 s>eh,uf\^1h"j/@4bF%7H U~0&Ӷ9$ॄ*0\aj@E>BS~So-Nǩ[Pk`þl|,'Y!Zw ^=_ÂxQKݗa|]L5a.bZ[ ̻L扛mZ~ݶly5s6EDKi7)U% o[P']{^,z5r饴sOcecjt "]Oi`3&qI^ڜA2ˆX92:^^z#A2ryiSm=A]7-"`v>U=+X۷4ذOԪjgƟΫ [/r㵷Ʈ}[H'i"8D7ͼpLlS`d_o?<< @Yϗ#N>mw;(,hD5LQ᧎ZS{nz2V%bc/Qѽ#0& \}L7 ZӖr0r+%H?o.t+iR&m:&ht%_YPA2ρXF5?~QI69B54XCgV#'-~S eLS؏Eϐޙ|dsi㹽 I0D,f"y8M\ X]4#UZ"M80m \o*Xi8r־|2D6TTb:S-ޮUwwRНϝÕ兟,o,aB|̗*q9t'šWiyܬNPVnL J"uM^>S`}lU5{REve\Kͬ4I'st~Nb`Be>1AoWhk+VRN|vK;3FV/L}BrǟKDoz,=]Mxju._vcߘ楅W]KS vanb7I.E  MRwҟ[kPAF|}:Oownk]n N_R[u;/jڑf\sO!2'&F-rX<0qT2ԾmvU8{rUƟ䄩K>c>s_Z g{I̷+OѪ(FHi Wv'bF.EUt2ܜМ QrtGsdъR~Y8Aݟ)(AR8dsҩ/WNJ: z}ڧ>ޑ)Ly6='ޅKWn굁EK7K/EK%ُM' Ff _>J>/DI*4+u{p:=ӎWzx>Rϓ*pLTRW~SVz_01U$7TP}kS*3V)TO/}D9|tMJV=Id~aWE}rw-/Eu;kMmc$}&Lvj?E'\_"nRϏ ipuLFSϝ\2g!Q N#Ǎ89z`?kwrWS\;.l[W϶Mq<$tm1cURp҉-2}u9g>|#GUt[S~p'^l?;KD$pͱi\LK{`ch:ry&]yGi\6'Zzdm{i,֖9-BIR$5?~W$^O^hÖa FtAѷ7p3RmJq/6yy[Ӗ*r5oAit[y!CfG TKb]J{]Â\R^˃*4;˂/]TV%\i~vpd*۰[g}Kr~Ǻ1]B#C܂΋7}$R|W~) p}Ղ\|1g'Kz|O}#YY!sUqmx3?߅j˄WXC.rR{3?'yiզ|e0u]bp|1dtvW@P #U&>6Xݞ*|۳,+ {al$_IaG>\znі!H]cot;}!дC<і,Z+f_L|?u ycQГtdɏ[m:%wwG6A͹KF),EmI'㉓&Ifoi KZ_w?I>haY^*5g 3&*3L2$ˇƽ_m@hI6ᎷM:x66˚-?]|&濸}%sMcgn^ip">twV+|^6cuJlOsvR(ԙ]A2|@37IwhsVKNa|Y8hKչQnviO%'BR:N}dQSmtQ/|)daO,=ѩq"ۃE.x῕$G/O~cs6蘂{ҷ%['p~&g{ȄMnp.% {|ʬ[,wL;Կ8Y| |!7㖆D Z-p+n +'_rSj~h).7YZk=pZu.r/i<&Ẕ "]"$-Fco᏿pivX1|0#w߻W3J\iLDPP G'尤֭㘜YAk6m₰&|/ tΝzPqߣj~LQhp,^<&=u=A Û ߪ_ P@zɉ`6*AV4052@A%( 694tax>U]uڧS *FImViDl3nH"D{z^J4jl9TM1~֬]돞CKMSNMǽzů^8CLWWrl| ugA5ݭZ7W( վ}}Ԥ5ޝk~6mx/M+:;*h>]1ǴJרv_fjÆKMJX)RMuDvT:ҟzTQHSf݊HϠ #t0:GTUq +6j M+CC;`Q\ { cn ' Sx6XFZj#aR33EPy*ߨ5[ͼ{]/$}rNDa/?۠ݍc(ϕ%_O32)nSp(6nAoX fhʕ}=%n_A;ژhG1vBGMf!#"01 mtwͤ_ǒ;t;UQ^J5r+`3睸VkΜiЪԈ0骍RlU!T*Н#Y@LKrDqH* h=-mю7p҈_:T cEbvb4P`7LG!b%q oQуQ,mU K5{= J&RcZa-V@['lc< hTT+L *rlC/9U<׈ N gҩضo& k:f| ݋WG. s^֨Br2bTqDA\7A8čs/e;4I"T6FeЍfp/щڼZ PPu-1+IXҰ=whxH+ -v&;w@ tC:y26dUЈ`7++V\zz 1mvB:?D/0ҧX*|^gs槗&)D;f넠PLY⡭E\&W/[C~C1RQ듖̾'%i |mf$БrtӯfyH٤ʺu\ԩgMYz#5sPC 8.` ګrX%Tt#hYՂQp91o|IDWD6aW_ez (n\gq1 첿HGƒ x@iAگ,kN@ )~ 1K|j9I-Ԛ c1߿T} CPY2DbaZFF'|"X.`%YOAJi@>'p;QL$TSSKU~i+ĬE` H XhV ,cn*n`X=DJ  (wv[wqc#q_-_ ׮]+őx _ U[n\i& -L^.;pCCK/ K~x"Ky֬1Em>AhZS6sgU^"HĒoqFhXysojhNBhQΔ!_t~FءK\F'I%@K6lmDܱ29r6+x$Zg(r~ ;1`=˖]&5DJC;ǝ / T#IoE+juL5ϓjN-}*޸`Y&YEuu+=B$=W)!p'q=H֯׏|=ze,4D|9F+c>XYA~ٲ+wppߨbXW 0 r:ӂIl=L=ID}䤳jHtwZ#^S9rQ]ogVAދ#55v,9]OKB*lBgGSW5:>3:Pin?ոWUOcR:q'LQ=x&jcyCNh c4" 6iĤæ@(4X30bhPb.5T`y>-62YXEt֭ޅF"bSZS4HW uTt3:(0¦eQ-k`~/I_J{4zzOBǘg^dum}$xc~ݻd3"TvhRI@ zب[s<@z6עJbI*t43<gw5G,5tj{Z]>Qq|2IJLuQ ĢT3p2zUs4+W%5<*v@WVg pʼp3tZr}G':F<~?ȻXG ^ 诽^A\9{ݧY|~uݏZAsoJ}!\HB倒70;Gl)7f00[]#zo_#0F])|l_q'Id4$ޟ*=VC#XP4ha\g,~q[D\MxND<[5 p,&qy thQ05X0 4$@ 5 {.< GO0;K0KO Kޛ8 7'^g5htKjFqǍ :f̆lTY{{ :uvDOhOUY !فvIжs $Ǧݡ@8l0jLm>#ّ+& @a5-&R ?2@SzaLģW籁*.eޮ|!#pոv{ODV řR{ RL]5`I%IĬg[ ,5hsSBaHiG1NX f.4~$Zx {:W(D)4 BVd;G! uB=ۋK$ I P['#%Ȁ =B pZ溌ߤQ'Q3 3:Ɖ`[UeXܰ }%Bf~Jp1DZh)$}~<!ˀ(hahV+~oKE&jΥBN@+6nȨڣy2p aa^ԳV&Ub0+A4KafeDR PY9Pi'msڋYɓ+g|%,[H-c"1OaQ_-4U~%^lg6FF;t-,5fQvX0O%&P&BY ֣dupyQ \R)(m}ƞp,v(1Ԉ Q]`Am<Ѭf|K8t倵ƕJ7,jEar#2 oH-4-Z҉jڳ Y: Y q_<`IDBMJQ1q{"HRn _툓킳J@fI&QD x ]HF- %7GkH8Q\.SLRa3cTX}@o uE zZ%)-3ŒHޡ^e;f X H&@4":X1*kc'"4Ym`֜6Lڑ FaP׶΅4#Ly@*JxFI*)=|Fբ7ۃلF,t # j Jd蔌c@Nv 96AMx2Yk w>7Jr>KhM[lT¸Ypip+.7 NRg gBV5HF44 &0B*4b:sI36Z[](*qƵQWhLl np|yoVI\%E; qĈ92M 9/R!522BoEpfx6TzC8A 9x6Z7Ú?jV⋃! cSlm! 4j'5 R_=AcXmݷo0ւ1)4jyN?tEN]74伥 VҊXng g ?:)]%P j6:d(6lqw?IHB7p]Ů5 X8aV[B|DB eQm.&(|m⼮q;6VydR\CA `UE$yV_j0pZ9}کe..NYڽ۩P=7'~Ǟ Ŭ2Cc:t`ݼi;wUXSAB]g@\Kv(=egַn]PFb5t*`^z%jX}B#GHe6_h붱qf8 S:%Oૉkk]lKU~* l WTC-K.],YTvkDb$[Co6A5Ϯʄ3YɌ{jZ6a5KbZUmNI^0$ѣKK(n(cp(ɼAq4&mL8v.Jۣ3P밭8rj&?b 1X2ō[7͕Vz0K$]S0vϰ OJBmf:~m4`RsϽ늃c?"+cb) fq4iiN֏a9Bc s4OziE kQߠoˣ }-D5C!$=;+ ijٲ'q)k<+}{tt\ n0́O[w}& X~͚XKQ#/q+ɗ fo %umww Y;Y)AD J჻XM͊+TW5xqTyd9 'I $J?ܬĎ,}qQheoD(l.nnBxށm/rTӧor/S%g |@Z.ҢMWzl(lXT}yVxClf7 |&E+:aZ!9V o%BBWtl OtGB>p%iߤ $U4p*lo8`H`45y l `NPDb1:%CoFe_FJ4P_vkܺ}d6y]hgCƲk^Kzf߲%l0mC#99Xj qx}Y {gyl y->{ +YD!"ݎd;MaG4Q LRXt0SDj6 -vBw(xAgvںXL hw =+ *2qT؊wXF^0}YK'z 45u ;p:Ā` aZM2R}ºG㱰BtT*o]]&k8FG ~:: fJ^ɷq,p:xI}E7lv:iBݾmʦ54/jqtP.hO+*H;2I{p~!|G̹i|sr:@63 I^&Y~X&8844%J6S""U Z5DY3j_<8lLjX{ /pT'#/X h7$D{0]qչsmgNgmm|=l&,)kL(>W Nd+|F1Ni<4G;ˑ,`/%ж$魷{r2zn?,6Ji{EgLL`mڡNf5pL 1$Ęy潉!d`\L\pW'faN&c-֝ &\Id{ݗc55?@bD[lpj@3#38X|jl`(B6AU]W)6,kQw"ٹ@B&H]1ao /:hJ=$SFlsu|yˇđ!\Q- p()yoˇ#" $IGwKڲX^!ɫCDG \`O{Sm ]^ZnjdaURn;t2Fӎ}+Z{?::w;7 B Bj" f%D^mrJ+ I:d2_.(4/1"Q˗`Ig+p, BsGeJ;֝di @בjG},+ ;w⏗ t-[FD/d'c!Pt qذz%jdQZǮ]4AL _Sܰիu!'K01~pAW׈NBxyAQ-1eK^d3kQ'=@dj +W Un65"A>wXmZMkM5{ڒTK֍LҵsxSd#xAr0~%z&6st9m'Kv {&nB T2ʹ6ߨԃp@ڿ4Zͬ,8"-xJ'ߊ=ڲ-IC'JM=z Z~_P:غ3)7?~v ezbZ&y>uLuuj8NAo\ԥB}xTHVW G/?cӠhՃГ+O*AZ$,j,l/c gA8u =֣&_8hԢ6h~zoxS=Y* e+k7 %cҏ`&jkmmDIe+6toBG4fp*hb昉h}BO>ߤsQɻ1׼ڣǞbT=6[Y5> tozXdL M[*T< œa@=iiSqѤi8Y{DuPlko/U{=Hc%=7xH9UVTn(oSjii>DXiԉV Fi]a]EZ2/CYkTyGyt. H:Jk2h"4&6mjb奂7(wʌ]SgV.  uD~њul&uڶ˖=Jm.`Ni M;y@2H 6:n-¨QğZmOmqM1{ QىZA- uz["voEL čA'l"PLjkֲko6(`KR#*/dHk'c#\>q $/@dG]U_d_-uyp[ nw*hlD);:}'?뮤w7W(L[9 0R0s&jE"FXҕߵGע kKCN]$ͷƺl˲e[?IU&J ^fШAoLZ$i4͟J#"UhaU\wںVHu QARR \Ijgt@Sܮ" $Ho-@xV|THl4ݗ)h^q GpLH-"<XCx FDPE0g@Q4-nq@lԒEUkd9R2?D [`|(qIu ұ}O>!D J=R>(oJIƦjG=~9]Eq8hO!idq5VT`{ʤC)3,N-ߚ =XW=o͂a#F6Hϑ>S]p{2tOfXfH]X: 5k!iz,=Di'fX~iRjnLdLW/F-4+ C䜡ص.][Z<;+"s[ܖtnB[նem4YbK ?XCtFIVf$Vw;M=؂ܺyaI[ } BI;:o@@) Nqp=wp' 6D8TRW]YT߿oXt¨ܷ1i1/gDشU9 #iېd,[Gs 5e!q|-#$*%cIzALL X)-XETy$Ֆ-"zL6|9=:;BI+I[O*$S4#Eʄ$ngʊoQ֓^Ol1^ߛzO3ŜM4Zfj"jGᅓKdVD/ƢlL-KK3 %x:HK\Nu,o^caE6#AuLk ѓ : B(E"rG., 7S OhS<`F'fxa6AHFT.Еk06=/J5z5X/uh oTZi0Yx!-Dmx'Bݹ?In{a׷H±3X d &B^V%6pNu=8^26lf/qkۘއ0yއ#F}+,?)>{ m*67F\޽&GEq8h)Y1Jk(fSiW'^ o*HGu.ڶ,/g5τȮﺞ;- gX]w}O \#j*C9iG3so[Qxy#`6n5?̂xnXa0N!1U%sjUXq+fTѾHP ĈPo9!ͫt3}nUi'^Izt CI*fd+}F;`<{4V3c 6'ew) gk`LXq=d/g:]ƽiK:0B^ao(8Jl1^zUډ(p#qMB6^4 qd6#q X`)۾KTl3ŔD$IԸv?(po&}/VϴZlUS7hu[D;ZGb{NP =ݻ$ tAeؾFQW@fc1VRK1ɅoȋΑ:ѻ$N2>Nck:)$}ueωjy.Q-i,u[w24!7i>VPqLOI+zIɜ18pmI~[A{BZek1o)rǛ%c>-pbױFJvI-AR1Ԓ$&87t*M&CБ@\n`#9?hZBfQHRt.oěDDZh8Ǜ:踅[[j[ZEΓl [T eM&j[(8Z18eMp B8k_b1%'įyJWoVI5mt겿MH@"hׯOʘ]"Vv$ojR#4~ĩAiuf ezÙqr 0MVn hrvH9b3Ex‘Qu]|Y=nxfp7ha;:B>߻h5fFr[0>7c )y''MGk5P0PЫΕt~E#IbkRZ;^J_)/ ~Sko-^;f->WX+vH9&c=Z\}:l<-ܨD^{H#%s(PGƸ3dH睼xf( PN6q`$bI4F;6&Z>oLJ|dؒwU VΰIIa$:R0c5NZE@)N(ݏI|*gԚ Ze^YtR^yj=,o +`Ӷh$FnFäQTO;ؔ!18qv1cg2OgP+gHcy:S|V3p}OIr< XᲲQK[{֣bsh=Vs4ZiW7qX(&yxE}scߟ_™M|l,O9WGϼĭsΫa:(BTZ~,ϻsnI=J `m \m%l/δϫG֕k\Px^{,$#KdTBԕ0-66U )Rzcd!P::b֐(wUH 7.8k?*!0a nlHFqzRI^dz%Ru) zNkTHʄI+.'+˖֤qȣU @Ӫ(ȢOo6boKP+\!!'OoU֍ȇ#{I1?VdX}ӏ&")JFcr;*?hq [l`m5$>kh[8+Y{ч:̊mՒ߁ K8^Rw3 cXX*>Mq7AԤShk~\[ 0|uxysd}}ȭ/4~L$MB+FI^(mz%zI_K9cAu ؄7hT8Q&U ")|gtD(hS ?<A"B߿cxlk5VplyUy["H,t_Lw$j){ßpږժ?-5Z>_^zmh۸{f0:hp>@",JW8:,(lqܪ>UN8/T[9TKjƴцvtR}tfGbWIRBZ񐔞q_kwVKl@kLT{޶jpQv+ĭ?G2UBZ *&. )Nc)W#- sŏ-F)-l:}Po~`ڇGAgMj''|ɄKiguW^]\#_`_JpHv_ժ S9'Vp VLBʕ}S~} xͱqpm /f=d yk& &:@$1̀UչBPi>.q}o"f@1uT\=k ::.` }ZՂ!$hG~:oo47'}HZ/ 2%4.2M*V|Jڃ{T|Zl5kޟ4k[ cHRِvE2A>7qˁf\Saz+ 2y5վ&,`z+1&X17Y*^mm9qTKhX}m4߰ -8̺3 ~L}BwWf $+b=@jbOr Y" _|y0lۉ{ %5Ʉ^ucE)iz18Oo=z v#N"xx9U=.9 +Y֒zB'[ht NG8/x f zEkJqKva!0dc2%e9U {V[3ApZj^FʕnN^g&R.Dt堛>.Wg-JRX i$eL`H-& F-'ahKfXl=G.>/]e 85 _$’3! CDmu:=i84VYeF d`gt$Dӻؖ s1aXweu <XQ%ֺLΦԀ̛DHlچzgj?+$ j*UU* $7s91Sgsf%j2T05|*M3HQ"YՃr7+/&˯DLChv-̶Iu1>uױJ8йE}Zo琥7WMD9r"9J3sKWRݵ5VB@1]"XCJE@ZΖ{Sty`V?_(D1<.}t ލ74ܸXL6"&dhż9,@`O{[-ujD6%v=Cn,\c֬)NFu!*9X Ô^ jX &KgCd8v yS^9w]*M, {ZOļcjːsc`G#fѶB-.qMAm4JPϼs)g^r DA'euUk0cnӯ aU*'R!eU*k8%k7uY5!SN>![1Smjֻ6| (*$^!U࿅ZJ\t81Z5\V4zRh62U]RZgW>຅ 0IrK`;ve^-ǝ+啤ɫ"[e?w|Rp}`3myU{Y ?VQ\eu7;dns*a#Azg&rj7EǗ}5TwvyWjC՜raJQZ)K/ĭŸ2\ZWe[ODQ˖ qқ`6.[>Fs>BC:Ȅ]Qnl$ի, *[' *'o`.wb^>;PT.vjZ~n5#s./0^jjLt>%V[p`zSҠD3kjozKN7Ӣ 6jM4hX̔8A֪pvlϞE"wo:tdP"yvG.Vl)KQ_tk"n[[fjՖ ꇎUU6_uujŊA1۫5k/($-$o(SmZ9~5@Ec.a_[Б6P:dM#6ۏ7,"Vvek"i~yM34nݵoM2.[vt|Cޔؕd]ťܵ!y0}2aAoZGL>Zq߮Ni>ry*rD9vt^T|&.wJ@ ]WZ:Gؕ) V vu. UmN 58ӿFo|QGۘ|)_ϴduՊN.1aVd[0 wQ@Zk3*̸Ğ0 ޾̰2^.b+Q"6o^dmJJ-xϹvÌ #7eE*/[v;t 'a}ֳi$Љ۾)[7dǎ^UZvN47{^ r߻XBWu-t)'xġ"'k,Ct*~RPJ ?n_n}c""v0TμW&7lnȯò`I>/Gd-toƠF_W=Q UkG *8yrV7th?lݼcݧ)>o͊Zf) XZQUMK2ˣ0LE8%Qx$ٶ0_ 7oj&Ta+2 3.g8El6bv- k7zT[msQcmqt'. #v=ku\,w[ֶkìN}uzwNn~:KJn? RB87ANI-Mt󽮮[ٰ٩!=O~_|WOۇV:It6#%~[n(ʄV3](R$IQLMpr]m|$%-ۜt6@[O\\=4\9pE~hى,o%9)ש}o;Vj:NpNTi3B (? ۚs= T0E ÜdӉhc=JDXw !2Ȳv5yUYSvfJiKC`餳:nJjih c 3Yw97b ]rxpib$& Be!f-3KrjY%Tupf'ع3]womUC8JkB8W!yUuwIT!)4kOXڂ}Um*?4JQ#CrOl9R QGG SeU[wx'$/ [eMTw [d3NLki^gmDP}ArϾ` o:zzI\=4kUـ~~,f {T{Ukˆh%anaU-_hT;U-=4q"=Z"@@r V9ζoYo ŦIڼP" C)tL%EEU6㙒z) %z\V7i^Sv_yHV[mX}8bAS,WbdI._~'$D50@ǰ c$fqWvu%5j-&cȰIغmuo$Qwi&{GiSJX0'`yp +9[5=+=2#6"0%46:%]VECۦݲLep!SEU#a6%kJ^Jӟ n:6ixV]hLAI 4Z'Q]"'QG,AnRy&}}mJ a;wHPwm۞{3{ƛBg-'fڮTfr^|ͬ87wXWsmubs@ '] Zdnj1iZ:;n4j/7?c% q⇤zPՖmPaYPqs l&9+LWuF[9-*|(;v9%Zky[;Oij*~Gt嫹ߚL_p|zÐ'6~&?9bn Ef 5C7I?*v 9 Rv7o5u6g$/ kĴ6FuƩ.iu>)~յTcè:W=ccT'eZbn/_1ӑRmlTȺ~/?⯽/wo/_=II}wƱy'FEbeV{|w[W!Ecjڣ 1չ&y>uLv18 =4 ?T: {j*I-hv:ß`"O84uP?c=+vF8->x@u͟b ߣH}h%_[ǟb){?woՕ 1f岃0E6/PbDHr#4~ ˮr-[Ħ2^@B/*&u{$Z13ib"|vd(޳/(XǾHM|gaf9_LG@q:Rj]8??5!72(`8WFq>_[9??OOЧS8`;4HDZN|hp԰R,.FγX+(܆avY[ $NFzvGݞgZI)f&lsXNR:h ?" h͸(i'S}xsr*V N `ǰe /Hi@j1=›8VMɟf(AsLrUk R WS˝g9үH ń;xɀuYyi+Kbv<~A \ݤ + tJ⎍j"դωA4Q+&kēm~#&,ϝ*?fJ0X%ΚT6#[_:3+ 7F{6^?'z) pLo$qqh:? ,L&ܓQ,6OT]jD$с0OR'X$A`o]lzI4 :i6w]25#=)W@-V8Ҩ+|{Vسf5\Xq4B#;oNܸ.-4Gz:E3ޑ!;?&aZL Lj>ʺH/C 4.T q˟fP +tJ &ڊFQ p&%fmmZEHqS`b\J*jwXyu bzvhjH(▰&5$FH `ZU$BtK'Gj81/_E[i“ircF|V3w{ig0[BMZxA"y?:$6o\Y"k@)i>3`<- ;>ϮShDQ1cGMߛ(4F|F4,;V?SBPpqޜϴ l%JȬ8J;Eqs:(0ۑd-Ԩ`F%z@Q֢ "d 'nֹѬ1T'6)q;~A}sO57ZwETVDŽ|YpYrp>m'9qNx\˖}i6q5RMZ( eb.N1Su?Mb-$NʾRJU  1m2lB[_DٝoC&xy*`'50jF `8vZqUf~!R"agJUi#nH,9.`FIec6Rj,3XP̈/RLVu&y{ZDcz(^BE NZ&{k8Us=^euJ S!X(ݡ\9) /rǘy[0]| A:XNrCu 7?\90b'5r W×,rQh;F-!"7^ m! ;Ga+`([WPwpMjůg/Y[Fr-CT;$FfT}ffq [~7PKY e dԆQ[t/}Z^s!fN022Do,F&@9١8ǵ8=o_A}NJ#"Zw#:4JbJhNH:=4`=sCiD:nxč?4m4fgF.X)_x^Y`K1Q~!N'8&tjF:`]\4Jo&:P]'*L-w'/N:0%8ل 3b__n9 ^"9TzE'sHhc!w{Q t8E dE4?F5fL%x2krqᑞڣMsfM %?s|a='b/l$I|r~#Iϥ ofj위/j >l @y`:C(H0!5h}A.PY+v͔Э:x,Ŏ:1X46C]A)b~Rorֺ5:mE^,?TGL_x(QڒotxZm%G&H-Q!ƣpuf)53,mn'3F`V֯Ù]-u>jwHv⼳*xBC=QNGߍa-0B#C'ekixx((2/3%B?(LϢ)ˈMliGcT$z;m9.~f-گeтmzOĹD<%=>4VYe`‚aWV =H xmep]P%|3-WV4 ,KuH@+5:5)^}՝J&^gD5NT&̵ t~!4V"搥W$ 3R{|b][asDJ'| ZI3na'Y. V~21vHOe6ZU`8ЄE21y6jUROsDfn˓;~^<'@ j/o $f1X'nF/?(Ūf.uRU8>H=ZLJ&c&$;}/YP`1 =iq(_m󴆷 8N"ctd}ʊճ #^g#k;ZJ%IX oJ~sjfhIfyɓ͌ɝ$"HF#A0K᣻"iH7)4܂g%ӄ]ly.޸"[ξr](#OnemI縎W!6qsvV6dR"22qK=T"?YDpʗ^`sjůhM TX+ܾI'lyq6C|㭣bƞd8(0Dn;uB]&Iھj:p?#eJL 7n#.1[5'A jL]Ln$\ߤf?m N΂+88 'h;Oi~/δ9 O]+ NނV! ōvf M n5-Vfɕ"_6j]ћը.;ٝ-=뙤 $lYWF'y؇X1(X.qWӄ&zt r;cx%ǀT#Yp6/p& T G¨n<ͪ6~|8@s''/SJZtZ_rNr#*+9CuuwjT7f61F[x-y8ӌfNZ =q: YS3}-UE)s?ٴQX&I jNBSdE⸕ 4S۵R9ڎSga%f*#ǨJTLl_E^EIy0Mia#/CYԘ!T&B ) g$S4qv΅e 2XZ@t|,y6:ܞcx~_Y)p\#*9[ D9a(Si[|1iN0<-HlT&oLYp55]Z% &Mi^  &!?@US/Eb~"4;šjշB!atٓx-bs:@Y=bsL9`{gԌ;J &#F4V@9d`l^tmNRNd%٦@/]O8W 5{5p L0wl5jh]f`,S0t9gBtJ+}$k/(5Z'ֱMlܣtNk3hFCp;oz@H\pA 4417'=7歕/_pSC"C+䘷"HRI=Ha!Jh(`"T@:n8c\Vr#PVYU4mQܟ\?Z̧j4 4Eȣ[9I) LĈCWsS9wS'+57cH>46Y/$sؓHl@#6/Wbe ΪDV]qɌ?ꪢ <]V\/XT}Wd&M|̵Ƽܵp:CJ-]'9jRB7v'^pN겑!zNX)>EڪrQurFb&F5ژ(mjJT|!rME˰ގ@ڈsNkԒ4Jdܤ;ja16kP@`TC_+C?R!p=tLd|}wcd육,vξ QBign6Q7 iy߈ǑL. 2Wx]q *hAdvd6#,IW4o65*A,-cKa(?VoE^c֓~vk4ؙ5/HTt}9BK2Gu"Oѓy]-VTZ͌&?|:fA=>Tx/.mG#ޭb5wr&G!9ߙ]w~[khL&C1< CL6O V~]zf$dF$S`ܓNV?/?~ d!) !,j"Fr|ɀ|'@OQ6iyNz6%S{jUK݇ﶉ(.K_~A@n#VfSjVe_x:6{&eo8;؃iIGkgy/9aNu"pQ#{|ㆥZʹfm qW+u䘈Ժ81]9z7vFHH3jt} |]t=[ܹS=̾}Ձ//]4>k'>\&-{ⱟd_!k-;Sӗ%q2kruV"T;Y$tz}ƒ1RɰڙXz4Ɋxy=~d qؓR?SXĹͦ l1KSj";v.|A81GsOsKJf jqQnhbo Ypk1C+%xu\\x^ RVWo崣VNm ?b.3n鶒rd; TBgt:y5_UݥSVN[x#[A mz%Vn.D hk4W>ܸdm˳Vk=8qtZq8sEy5C)\-1E:q[N0X{3J'BKf&`o\#J:@9譫-,|Udƕ3_?Nycr@elK@G&Șߗ=måz+l. =K9}%co-ّu(#<Si!%/|)wLE掠s*;ܴr,ϴtP#>*(s#a=aG{W{@fsYȞNo&A4A2 fZYՌSG*mިJ13˴$EOg="<ΑlsN,anݺe^`QfkF(W!=;b"=M?!9w'8Z)?<Z/9Tb]s[GE쬢deswh"6Xj|&A*k33>mS):E$bieSjnd&WĊv.T@ss5Q-1jBb~8!iN|5_(õ~j8;|I#ۤ=FIo'X7Gr$t'MV}[\'Io4bkOT ۡ?Ư),^F2PHNqSn"9kC^PCxMVnFI2bfc/[.x[Ts~Daz4xDM:-@i l1,!Gl#3uS0h]$/?ԥk{AL݁L۞1_RWݗޙ;g1AunG6Lu: 媡}ٚt]VwRݙNTkS}lM|믽@֥ نjX+;AfV>[7ې}&]T-u2mٛ=S麃ianߏMf3:'NnJ 0biC0Y, f&;YwZ:ݺ4Pdzu݁lݮl]Ov p1"5t(<.Oӧ?lKӻas0Lu63B5 L| yܗ kߵi] K_6Av;0M**H#79wn?} :fώ{w30W)TnA ڜZ\Krh)hr;GUhy:@M(P9RMgd֫Ư隢AMn?/shO?j97D񚄗hNߗQMeݭK3"}v^V2x X6vB!(]ү- 1kԤմiH.Sa`jxN5oe$Wuz>Pi;?k\^$ASޗٗ&V>UZe~ gWD'B3 [t]\5,{E f̈| -/њPvP,i@?uɄDNl-A^+gR&ݞѰxj*ԓOfHRޠF05vg*&)]{ Li{w3~KokHjJ^pn?eQ x+P&!I=3a,Q=iSI-8A Y%Q@Z}`# -{:pewg#۳'4Wm~x7j?>9Xo^R5TB.堘"&~v ~o A*Bp 4 =dQޞ:t\MDyW^@˫E(둿vKX?j))Se]4Et^@v@=@B*YU=2h0{vP3`Ϟ&5hC:(D`6,0~ՒF  ( ȼG#t&Ƃ֠LyYiVi?2eI3hg("2Smؽv;}A:m]05djH,[ ںt$.Jh-G5lda58,~\HxO0:= +jh I h) 2(;Ӱt &ly(fmI  R*Lԋ/6,8;̪UmOiaf|J Ŝ>cQwKҵPp Q{:iy,jBW9={b%FI^QIF2R?YNt`Hhb/M&5j &e j+SԱR/@㗀gQV ZNM axP93Ţe3iFFHRBb»,ƍzm&Z:zBđaNcg<ӜL31(H5_ױu=>]C]1a [.\2@5i4j#F^n2k@WTiÄsLcp{g%(Q}63n<3I H5x%y~-Ըi5"ϦCtJˀU] s9AECTa$Dp$۳@/lyE t:rVerDex0K::مT.DoFE.Yܠ#[`\eݛk7A@KխsZNKw@فj5I\tjV ' r{]p<Fs Fk)bw`t")@L3^`VrGczhUS'6}<Wūt)`!T%ŷ BQCHv0w^*?:TiWԌdyq{(ԄI!iZ=|FgŻ")w\v,xY#4Mk!%KJH/>j( n0=nrh.⾃Qc8~Ȑ 5xqdn/S1ե[v0+WӃ=g=;ir'M`lᵔ;>yEFdٲԩP|?(tPlҭ9͊j w?W1X^å4wd9"+PKI`365^gmĽ Sfmp HXa:+6r`T+V|E pC3bZ)F#l0Q 7ľ@fJ@n0f;JIS9h{mYTWvC&ոqa0jJ>DL\OC0ȑ| ^F Y)ZUշ3N22AWi!LpPDW@z `IP3ʕgC&dAsU2$VG- \r M{G!۱ LbApfȚ^A1Ȳj@ۓ&mLcZcܟQ?FUSl4do3WKE%AlDJNg6`47vU!C6Y4|~&ܔ% =8#:8a¦ѣ2E3 s .I&㓠b P…\уR-c[0[4/8~}@KЬZHfL+[)hc&& ءٗyɜ:x&tlΡ8E(ʕxis%Bh1xqM K4X? IuvGUUTbE oN!y_PPBl?I 졤T\>ĶMnˆ1P3dְI%e®h s;WL_h8Br) Qr`#مLp  aֹ} g% aTeիݢ'PJD/(PhUH6iФ$eJ*{P#W% ٢^ȑ0^u5Ej6k mzTxG U[oeKQ"WZYcH?(*iov&-#^ݝM;έc (lXz)+x T~4d飈~nG=7XԴc R91)J s|rԩ~!iN.'l|&E0qdv8)GO8K~"̸qyn<<3fBkܥ@BfiwZB6[3!Q-o8G^c72)ACN0N}y1ucGB˗K+^ğ=^3t}aR7L&P^xuPMEX5x'A*GFb͆ΜzW#Po`GƆlҮ΂9>vԭ 7Sn/ap3 hSsY2#aΝI#rX1 l|%޳0GV:/:]6? 07Ўh,T8opnEo P'6\k)?DDJxEE[h:$E&WJbfTF"ww)xXW*)R6cT6;e*Vg25ThQ-mG}^7aw#mdp#QZC L]4\Î*.\(UrGEtȑRd33 TzO6rs3 ح"~-i[xʩQ_Q[in~,vx %m3ꟕƗ4}KӢlǶǶ WQҶvZFrl;A%IknAƧT§ L>DXP Ih 5 ;:{6HoaR7M.4ڒ;=3d( Mq IDKq u@yCV$#ta.PKϰa~ 3Q2gNwG [tGEO#le,'OުMn&&n"`8+nȣw"3߄ ?| ]a,[9FSGPe(ۮ|X&naDX˘߳`+ƖmZ'SXAbP/d 6ү/L4=kw@ŒYp&-)N5H>QM#8tLzgvANeG7qЭnB~[{ OcߠFۅJz "j zAI3YoFPIԋA;g0m ^\~ĭƄݾߢE 9UĞ4 up}C K flj)d(C`n]szh+0m9pѣcR+@6tub`neɇT"4unA&F]hdF :-:G6;,RWs֝Y'=W;Ljrn %k7 G>@"!FNٰaKGLTC=:?'g\B>/osN&d0io6ίoɷ9Mr i>7 6xg6l(^#$=GwO 0I9aOٟIMIo1S%C{2\-6CDsϩIZ[#4b%5%ܝ'm%`D8g%HÆIZ},ݩk㆛޴i`mEۼF}}\ƥ|Kd$ey\C^aڴp17J+4~t%5g:Lf[rJ N5>V7FWsJ4CONyy" 3ܖ:V.m6lҜzuaq'\y l{s5mf!N)*aH8+p {$(DCȴ]NFvg˿OZr7[Nx  W  V=Zdd԰>[$7_Pأ>A-Jȑq HpDPY sMP6l$y{HYK .(e}u^i{:^ěV3y;&MN$Pe3!m\OYS&IĨes0]ΖhVΪ9K[Fpz)94T;9*G;{ngRsr ~13uNMPF_`5˅зNGKAuݪgf!H@=> =&'tIBQE!t)T! n~sP]~l gѣy)/8<|8[T䗙5뭴ɒ? &NEVS39CLd|/I 4ƾFoMP/'kZOD [~A;` "1͖/Щ ױ4ѷߦ캷sD`9z[oQ)ۗ/,Xߧffj4PeRl+PFĠc6ZRhoZ03Ȟ^n_ vbQY=LL3qiJK3.ڑ|Dx=k{bPj.M5/ճFPO]$QLLx |}!hbEj0IN ~;{,IH 7 AZ\'(tLRSUVqً#X >+\/Uޡ-)tC=PH.BgwG7iE[&Wz0ᬺB:7 q\*(yݑ^CCUI#%9^ }遉dw* XomU2{rI^ pԯΣ!&`xڀ`G0GxMTP+0Kk>6 `UꥆqW'a>q~^rjΓB!Y[zı]u:oX(us$}ڠi0>$iexZ1C(AÅ?t: LkL B[߫S-t>RP^ #s0Ր i>>cztb"5&x,{w:ԮFL^8s1/[niDB/} (bu^l=Έ^oq"^^L5y4'XTJ􏜷ԣ%V аo4`0Wp&<+eQk㟡[I0_@# EO#?~Ǵ;И+03nɟ# < +u ,zRO+ޠ5tNDtpTtgq :)Kpĥr6T$AnIvs/"TGFGO~{ݛjDyp%\+ŁC j^uVTKz^\.Ł DF8KĘeCjhI\ K@ 1 ,%ƅRIdvA?EmyDPM^ f//,tZעluRUeo,__E y;kؾUݫ}iJڧ۾.M]B ͻ U(ǽ(rl؟O~c\=B=յ!WoİpTiW0~7F$ 3in޿VC2B d-zZµ[6>&sZ=n>ҷm6c*51 CZ8#oUlB;=l@^2qG‹T`4^[rJ2EQ{u FsnC .j|&l+Z IpXv7Sq4 c7~ 8(e͜A-S}z9Nk /(q6d@[ 517$p%Ί;I]=L񅇎 3@ qng^b$1]\cR $%a{,8W1lyB#K>Zpǒ"$Ny&+`: ~dG9?zN}_[>%'|ՂJ0HMgj%ԉQ>Cƫ.+ViYlD9X$-]hb(0*\!Dj נʝ%#Ga;cWjc=yJP:ڷt;`L?RrHVnӌ"nBDbs6Ntr"8|: FS&\"b+~הX3~JV8.t;Ʃ1'*`5rɦT1tKXWլ/0N˫HL RzY@ @N3A+f~T'CR;K;x o%5z͵t'`}b;z&bN8(`n3Ebp`ȅZ5'E'Jp*aaDŽ$@DӞ,ҮGFJ#DАqAp XхL=4f/n|U9*գ̹{MIIM,{`$H$[ԍ'|>.xQ;0*߫U+~kV(fWBޖNjIGF3pcX`evm b?FDȖFqUta޽f*\dh]8GRsEen:M.ʢ>"v Z4od &&WR2pc#4"L/}Cw" 5QBe։WqzYDr zʆ{"&HgȜMZ:/*V%qꌵDN/_{D LOB!% Ԯ5Z=2EO,4QE{%KdƶtA_}9!HAn 1]MZ(k8c|D CU~Q#ѡqAD0F|clOPj"^ɪk+dVl3FcU;#bFi #,#2]NGI^)ﳓ˛ WL$EŲ>K= hk: h>ݭ朅u-gU5}"u㤉qrq wQ @ P^'"RWqZ42cRPm[Bk4=0vX$7nAl1E,Yf`sl{ʞS`q7}R3]:H/˫t!Z ͷiQ7Hq80\RPEjJ1-u+ٝN|MlՍWn,XE1>=i.q{5Z\+[٭.˙H8:;/?;'9L:F'9Il"TBa/س{1y39rGO\/|M( | .k'̾,tc:Ss8cUAO?ȟ4zwAq1_,P%22}T({sUc8& -%_q&™{/RL(>/w` 3"#/㏳_dJ `u0d^9wDP 'ѳ/i|sXtؤƶ0 >!]z'͂>hjÑpjo脻dB8V.;],`jg?UÄm1ms}tgFL ѬRoۍGo{-gxZșsGS7躢wG8A+@t!˄nJR9x_a&|I*˄̆ƤaʞvP[='BGɸT0t6oDYk_tQڒڴZ޵?{9G4\>9~_:ex&F\y"Trz-ffWUp՞uhЭ;w# -% fc9VX IEh01y ůӠ|٫If;ȱtYez" %{jعD ur_-ɟ@)fȉR&p뇘<38tTme`%%de+.eWВfX% #SJW=vJ{Gxq&k+ɮxZď]$:*))C,c3"%j` D6khizüTpEcTr=MRhn D׊jZrR]f<~%׸q_FLHϩ(Ro ]%l]]Y&%qU$a[p#ZYۿy47B|u,.kSEYKE䈬[&ɡe?P!h!njW3_bb13ܘ(c0L3NM1 hT@"ׄէsS/{NEړM;cq7iG F$oJU$sMTWn j+u7&Z(O3[ [p+}Y58?Mq:?r Ļ#9XHA֮t+pNNڤ[?' z<]AyJ#Kv!=c<ХGT{{<$GH,?5Ie|hpM6U~Z_; SOWy-N T+ |g8uԅw{ vјy *bcHހ\N/m@G#jXY$-n/" c~wbn2f~ɻܻ aukmV_' RK?%Ugu7ΔĬsk¤BẔ'GPGE2<^֏vܸd˄\OVg. wODbxmˡ,0Ha*psW\r4s⡵2pCJdF;p_\Q[3`q 4 /n^sA3KsGd)Zqq{zuh×Np _C'ğSЇ>PzK.SK~5ģl~9M_@X2Ti^{t}Td"cRiy%Mj䒣"Vg[tŅ=mP.!iy/;9yBF. 3 nB-u']SτPɡRo%;pvj$zD )^0woܺ{Կ0K=fNU|Q 6DK9]Af<u 4KqjnE.{2#%j_7R^)Yڹz:-J垃ndFOWnڑi+M&jT\\e] y PH@e(i?U>D_&{{e8rͿi(0թ%jsn^rKkUH1aR~H%gwVRͬl HA:bK3,<("hκ+H}/SbHZyXG56ݰOg&CvRqzd`{FS#9M|+g6t }5%[d VRLd] y|>Yf?DK}?iƬg'Ϻν|O -`mt͘h=q'r:YuQ~ YQ jOּw%."/u;֍_tnF:o薍B17;3d?8U-C+‹߶9e92+'L#Ȧx`DACq9+O|*zg7"Xw?XMA{ܵ!WqX+ ֗ъs;SD[B͖ceIhm*p }\=>.LG( *ԤuF+íTwEk(6姜0j.iOF_gL{B*(r%sҁG5r#uX^ɳo\d+v,aXP%D+GM;Cz5@8lCQLC $yvXVAzrZ^$CȞ^8ǮP iWOUGN*3]a(3.VTIOP{C&0IcnQ ;dO7~*j`aG@18R)&0/'}CB i{vNc}CY>(:kx0z%ge|?j"Y5R? 0p0|i7đ]նf{Dy|^(%x2r\M&`ʹ)JՇM8q&r |T䖧=Of I-+8 4^77q}$#r}”4ld>`7zfCQ1WCuLM}c:#Dgf˫U#a?HȟKЇp;_mB39Z7bbN ,L28U(hADa{ _ F1"N} cGM_xX#j1O- %CUse ?U! NsPu36uE^4n9lv:79]^/+_nፈܗ^}JV]r IxFxͿ}M,A,2FfJ#`)P zUyqܡ~2Z |$bݡwFyؼvq #ɥ?r\kh?Ln)DwPW?+!?r@sBRG%t$܄] C(8KOH޶KIYD5DM Y™aNjM^U5Q餰> |\݋u@8?Oq(#QCtMw %q?d&|3Uܟjn Q!sχN1.1M 鮰M땘PH= _$1x{i 02;E"az} [N7Δl<ݳ>,(|V(ODUQ+ns훷9r{o_n_;_/BKRJeՐarycu[qJ7nĞo_QpOO{磿+  5띄zX& 0CV#'o0w/zl#ANQ'X ۋ@=Ï<~; ʪ`jnG _ĕ1c7~;L{;9 oʾ2ՠu(pl&n:U[_@KWR7s"`hWa.!@Mq&տ}:ݪ`fh_x> lMCFŞ@aİ*8z=(yveEց>H`8z^ b^|=۔1w' \yn#DqH,!$j$ F0a,B3R,>ODá"'1/{)A+1)א P/+!1v-i >?k]jt#"GUVǾ7_J&[$#ɱ:vo曊_%,8}-ԽԐB%O2,XD߻0A!zXRa9!t(ԘTGa1q-p]'ճ{hT? uH!E0k}w58o5tG|++ՋE )ܠXS]J^rM@Y9o̫OZU=>EZD86]H^K0Gdu_|A*nUüSz踙cAl c,±qpfpMx )!๺ZM?Gh3YXBF8TO_}dxZWbrGK$9D%?C ]:*OkƒCScʢy; P5ݠ}ôvvX( xyax'0:rbgmv,RCFo-R[ LC%@Y@?$1O{u5yrcjElѤ2fYt)^˖"O@)-QTPw9( "۷zħh; [j:2 TLjb{ۙ#=q̀MlN{ak8 s*)+w;JӅ,|܂%w@wpM˷{i? ;e6k5CV1ɒѻm l@RUmeC{a%%1BZr]yT(YTI!ճ`ݑ.LS-L!ھ8$Pzz6 2,G{H7 !M 2<̭0+, c)WVojߦ1Y v0=_J"$XL!&-cep-!? Ҟغ{1U#mnv [)k}Z(EjK"p%~*B%W@26Ӄĕ1d p8k;f'QjjZ0BQʆ &;ڸ/ VS)HrFCqx)o7dOV[GzR q0*ӱ7QɾpqXJu!D !!=Lg SBb/n]Zb-RGtd@OXmFqT鋪;4ކŔ`z2}!9;`7c|V=O^ QftE+#ЋOU;5\IWX6 pDٛG>CjBNkPA5gJF/fnG5^iwvr,O\f -[B-GGëkƢ188a̲O3X՘9DLl xh0 U`jtyafWMwĘ [җP V#i]),`;]L-bgM4kFe%Wpj.k3 !O4ɜ^""xFjyhPY\l]0r3/G&;$|8qs##{/G hD}npzG=*kBXAMtж7P%+ a\ȮID|6o8_0!2 > (ָ BzMOLTbj%" pB_ع@. NvYd CJ|G,<w>ZOKR=|TETi╮Gkӈz>1([ GaK1la˪bMlϤT1AH-yBhv+p!ۭFϊ ;cyo:z:&iܻZ}c2(}Rv䘶~@˼dcur<MDx. QFCxdl8$N&Ԍzh~ h|,?e6AB<;)^hf2%.M}zO1a{ Ţ"oh %&h.Ψ*a¾}t:?$n}_0D?TJ=R=@^F0KdEӸ'.>~w=wG/~y/0{DJIÍ,-Vپ^Oޤ ɊTjKց&1'"2u_X=BLK*2l.6{sFyX۴ 0w=}: +cҫeL^"aaHǣP:C\mƐ)?au-uMnsO}ߊݫڥ^:f sM86.;KwYa򘨬0Jt4N)Zt?у6u^3!0ߛd uZX` 8Iw>=X/U#qݫO<A֝)H }Z9Q,};&9IBTek)Kԛu^7EVa wݼ3rܨ[s@ͬ2Ft-+=@pBC6֝R?չ-DP9Q̜Ea{5Y8DݴfhPj_DJ:]{>o/J%<: ԇF{Ӽɚ27lqn*nD_m6=j5hxԌ"|zw"L8o"KB"2)QjHȢ1z'k<>dErm x7φWd70'~YPe(Ȕ%iub"崷^NDBwX)tD{w"V!V14qrW_^v~RyʽiՇ0t,Y1$ƽ}ٷ_.#n )dĆ?['z$LNP%X^Iѣ΄PV|EqJ匚Δ KP)0oKաםl;ì0슅%6g Ǻ8i~3}[=-J$@o L0#/9;b#}֣с8 hER.^·TgPp{z.gKxGvks $a8ӨcćjSK,QmqoK >Yi;MV#)[rn"m,2g%U<ڞ ivR/^cOl ExOy8.v"x91= "҆"7r}P;z/|_bA}GcUu vq۫|ӡ %:m$"Ļl,.PGὣ(lZ ĥ߲>ɧ2`jy},5ܽyUי'xɾ . %r$ʗ/$uJ.n!PJ@S*W$ )8z@PE4<3111KOGĜ;;;dw9D{~}o9ߵLI?a0Z Xf*YUY,x- [BS8~.h@.ubN)!'E:*lŲ\wY<"TNRbu<u:RP1n6n|2]Gﺫ:>eS.SL#`].P |u-\&SԨX]Nt|_ Kq3| {5}f+f)D x~,oH[2ʄƨx5H~Xq)7? [n@.AVٴ+=AĿ ˕q^#[03@zT}K Rc js6>\v=dGYP:xW>3[*ߐ Ʒkf󙂏R٪Pz CcW me;aZv*Ƴp3>W屐͏dₘ*;G'LinimX;w (6thU |N.j?V*㗹&W^@uqH_kp?X:ЫK@Sa_˵'x=9R U2z@` ۣ&[Zg+CAP+),b1௿PixF0[nyd<%%7#ԡ=5)<)eR~*2=<&&^ ܙ5Os~$OK%1cd_$踚\K*KH&/J ˎS-r/jAv+a<{N_yA'9e3Z,5V%]\ s/<M~ GOZrRe~'e{5 6oz 2=߸߿ȾS=T+RsU@,Se ѼFvGz`զt/ E@spIt$2n:/em]LxS %"c\#2$3'#U^+6xԙF xHb`Ӵrev 8I qDINIq/9%p f2`Oh|˦\Q4$\!łs^[:۟rJ/'3BL} 3Υo]Ŭ 4ZAO0bAsEs9ؕY}:V0\ /t= ,tH0l0ŭ:o@ecBy. !+t8YhRph O7`\R],,'+Hbt0 htXbde] y^ &U!TehuA%Z&N]꾱%[TyT*'oRj: vR.M*ܶ͐a 7t=Vw3Lx }D x谐-PҢ5ߪٸpo"G0_LCWo:6vcLBʨ9ܺxfm؆ 6`_HOo;ĵs \Wwp,(Rgn]$x*擂o:1u_m Q/ĭ{=l}6+lEg&ؤ6jү m<~neEMiuqKܴ+usga%MƉeyM5%Cn[d[ !fQ5d4z hw'+$oӴc˱t> mi[tŶ!\vٴmdVҮ ctv s{.j'KY)̙_# Cq_,3Ĵ|{C:62E^H-w>;&Hpy:q=|XߺwY_=T( 2/Rh3-EtCuY1@ˋoVl4Hi]UC+1ksx3Ըx9g=va`DyЈGr=OO&LlRYJZ. H׼+|;3ܣKPƛ9pr#L$ϤN/&7;lȀeݻcB[w7Ͼo1~@Wn/X7zZK#Qܙ/-UuXxp:8*13p[j*LH8oH.'zm=/uJr7M|C1bxĊn(u}')cY봪~=O&|7{^)/iYm}ȴa TG?/SqYb"]5_᫥T1rYgN4#Tta7iZv=rXo!I67 TGsdn akJ[mh/WX!FM@Kd4] uJpr*+ʹ Cuݷzf+ۃ,KI=sxFS u2L:<޿=2`=5saLSvs?"OK- iy#kf$ZT\5R7}+\ޢh}y_kC%Cx0]zQn?gᭋ޼u+|זbku%]*W)DOd'5}5g\/)coz:GFOL+üGv.3 吇EFB6Ouof/96Yk+.8fێzx޵:|Q#a p`hRUp.A㉚1*HF? QXWA?\=ܬj[; l*~ Ĵ'0Ӫ.,4Q]PgQRjIuRd74@Uj0З NXig~)ݽ8F@VfbO2RҧCxWb=}jJ+e9 w8E xnͦz2_mZg;M`FPQ+Osnsi {uܯ3ٲ|i_4b__D l[*mJᙀ@+hQn;O> 7*yZ_;yW pfW 8M[28meT r9|uyΧʠEYjE'&P32yYUi}~xeZQ/xv}fe4BUB1'1D "W48evT&L쭕 >6.zPb9\e.0&3zZeO$IY!5ښg ; h22h%-wr (pn 1dS =4'-o*fSxwp e5@;֥ Hv;A-o`ΛfFWf-sW_y NIB?OSۯNks,)}e?ŗrںyev,UKUEOgXYC+X緓7Ph/΃o'5k"ڈBޮwϘ)jYj (c/'_y@"8OOQ~w+PLg+0-]%|zJg!6y·k_:Ѹ3VfJ0籘f&h=1$Dױ8!Vij,ӑ9,}5fSVq; wj4Xvuv(CJT&W-dw̆<ٷ$׈ְRTq?%;=sTCzdEF>Mc5OQZfqvU"]5ԗ]״H5RuUxpv-tqQVS5x_0x8DP =^ 6:ԯHc>9}?H\`hϳGJ۞+5.EVی!p0@'=_?^c$PO=F7Up-\ڲ37Jr*5"9~:ӿi:à9dSaѧR54H\8EF^/7傿1 J>(G6[}?$U!򺈥[9iArjEzyѓWmɤؤCT0cQ$MGlf*@$UeJk*6fŀc~ ,=Hq!\z6Zk 03BwWڿdž˹MGM  :#9鵧*ڈl7/WtX1.)ʧ8B~Z{GzKkoYbpvVa=kx[&jz[Y۠gL^gӖ|ҙQȸKbӴBe޷l7$g]j}@;`P+w-;PT 1",΋ w56{Hy\4kn΍1a ^ʏZS _wOWYS՘ӇnliZkΖ=\}{ig3ncP]ẠgyB/'km^0֏mz|ޥە7Ƅ>\6xcHmq3{uڠ_}<'rt1CXxŲJ2_:[1z&ꉏ z_2_'5Uͷ+2FEÌ- wh}I赦bPd C'pwߒ.`|Dk/m0]-:,7Jx{>=}<.ERYcKJTiVY { O~;Q~}-=F2n>M@)L]{]O;&%-B7{T#V:W|$zۓgUF%-3B`7U.`K ˡAQ3xcyWWۏkޡ c_eTyrEA/e%:1Nc&8]Ǐ@UhR/ήSi5eO`/}'Oݥ#7ޠ(gsL;/q`a1wI6 <bQpUiFs7FwvBUܧi7, o,[$13 q85-K|d1}::-RyϚR~ƵcZ \\6SdZr(ͬGٗ%jZ;>VG:PxAd;2bxS%֛,a]Uvb%#-fRV{1e?VBB3 :{>@z&5NEP` ^:p ?$#Mܹ5+J jYqls*&[k1ў sw1צ4塚;(9) сMWpN<>]&ݟ(cHoeZ;Hs&+uRԡLyV@5Ɛ:UKZd 3g#o2o3NBl_'ڼ/4v"VSdVV?4SW~LߘٶA~:*oQVew5vGIE_Tj׉'d`Y=IM8 ] 7_UG,:`~TdLb!cx2u΂A:Aһ+Yćlݍ^j- hu Ni k'*Xё UO0ya(VI"~)Q* KyVmeg4'_iTvUۖfՃ_ Xq.䟋FU 8Rf`GlԲIOyPU9p,dۄVtQҫuCbک1DxwZrO1^AoW2_^ڋ&SL!V?wc~ߔ"5 e8ӛLdՃ#7uS >dlBZ\ҍ gUMwy4̕"5`3gv&B>].r߯'f2}e;qVAƓTPN\īt`S2-!Y>$Z5ĝd+k?Iy67YZ턿Mޕ_Ahl(ՃaH6s8} &Z&4Q2NP t8-:X.lF,&Ob r/2LTēN5XQr]KXۻ6;뤪# @xu0eG wʛmFS0մ< ȲeW}]a\gO)yC?NNjg>A Ź~*2i_zm|b3j~Z~NM |Lom.ͽ]:jA"`XsjEaiʷ}}X-vHTG_&)|)t BAu\Z4Y,HLx"c=V@&7+7:4RՇF1s.j3ܺ~Zje:N-@Yʐ$"FX2:Z){56z>90JK {}<>O*6h|GhQ$L3T_̲XB1W9ǜ*'p0#Asuׂ3iULY v,U0_D"4W)VEYV J~1Us31NiȨ!Ĝ ÚO805)GzDu5so6L]gG磐qQڮr=f!'$ 5]%gIG=z>d'<:MM>8Xssj*kXfL).j\+je3SBWH{F/gB&.،{C q_ZpEj_pңΨ/ X)#J4Dq:է ԕfܼ憌ZO|y4}NCۀj4Np["9MO,"Q"TS.uhD +vL3"rd~$Φ 9o"  qYip,mKWRyN>791U̓qqf^r&rYmYˌ;k>pvqVWԣpHT$}^`H}ݼ[XZK:`M]%u|w9fx+2[s8-g'ҚIy&(kx U5"ap^_t\ ڧO1_sx4@[, ECj΀m3pji'K:'5d>m?7#,vUR 2$ι Lm8 yZ{$-b aL/)JLhalӘO:dɏ|gʑy6tau@5y?L_c2-+DZF}; 9q.W,Hzʎ0[_ӏ@cOp^oNYpΨ}ٟH0"I1\nJ0X6i8iƙrUo\$uU[kZ$zSFoi_E]M*}KMf~b7( :$i9<ڈV * Pҟ1-/d8Ѳx݉BGpʧ싞8jvIXbjiEf8 LB~/-1,f,TOSGh:1:kS}G!ѽr*koi>nKzZo_d,w+|,U AYx,)U}386q^p?{6zN==z7pdTަZ]K = Y/ g.hσN? c榀΢^ijе 5R1pJJ4a3fI35ZY-z ngY9/(L 7 p3{n)6# If()R*꓁Zh[{33A[68]Vլ C2B( y˴|H8;zWۨ3 ڽsz=`_I@6ZYWMq) V`{Y'Y Ê\T֔30<*"AE$52mRWG_4M_` Y\d$0fr㠄 E9ρ. I?ric$]= 9Oa*k.ꈗ;Isp J-eCmջJk,Ad4s^^oNM}F,KRop0o׬NbGL .)fFohV z)ԥ#%>UnAh9Ze8uFh"4ѴHk+ Hghe$,]TBA뇴^GmֵܜB0{hTXeJV? 4i}87,%^#u#;Sqcp8[x 7[Ld>[=7k_ 5X6[9:[/;y֨$L;U+DC\MIz>lXv盒_]2!nұܞ,{2OFq?տhECm=zFtFrB]pkص{/-w-J'QȌ$8'6s@ZJ|rY|sא}щ4H0U/Н`C9Pt@/dЦ>.QKaNu4Ș2ok~#NvbqT^[+ܦbmO^a O֐IZ{3|[Lm _۵Cq-r@pJ?fA!4 0F1&3`'qޞMMXy,Ԋj =f-eM =֚SLKIRzK wfVR\ʱP2OݮA,nx BKssq{SuX(z2xL@mq{Θxu+y1R.܋(G͑gZ]x>XCWaɿ8E]ŌP=ѥ"W~@d/Rxɑb8@j,`lf_'X+LwB2l-[[!ϝǓ:NH~{9a:/fvyTD pNn"j=txNq9+okL{V&0)z´?5q-]+[{I4/$L1vq9JڦNߒ7*yyF*h"~#\ƴvuGhc}β4nKA1ؗlWtpXˑZY0Hn8q'fT?<)53j%hיcCTgx>eR^]u 2L{QIՙEi %vNǃ`QS5R:I;6qu1ֹ;m({er9zgjIg V@Wi0e>Eÿdž˹MGބMzw$k֕A[&P>uJ?!9xYZ}%lź1M#sIg=Hh2!a=~z5$"֘.MSW~ ̾9 wFjSx\wr"ٞm_epIg)DDd Xh3 XJ1m4٘*G,t9lNӸfZg Ɨ®c/e8*^mBukH%'K2)k风]Α xSG'Ny*]%*bV*m #rk6!*$ju;2ق}ju$d\L&c4 Z%ڭ!ɛU&Es?yP4opj0I sқaPrSg0*ޣu>5b+e dף !$0rDC'X+d0#AmuPc 0LZo1T,2RTN(myp~b [KA=yCdE8Ռ$%ԭ^!o}ޫ:Iz[*YU# xEʧglnֳrpPywWA\s,tvlN5$ Y^/&WF>ĕ%ZTDhI'%?ҥϓu!yk{&v7sOk؍fh'u PiFGh7+@(d؇8SzZ ~fՌHdr9" kc{*`0؟̫.A4^x`4["X%fb_k}I)c>fZŢЛF&8<㳅m+IP+ A{|*(3AseY 2?)X頰߭޹3v\KkʳlEƯݳ_WWLӆ +0 5;yЏ,xNzFVa^V 33 ^Ҳd8|->o&"*}M,헵U $Ȧ5 \Z*l'C [4: =zTrQ Vr$pO|?}-R҄ױٷ24K(=N4vO7V:xI=?.;G$IAe]6z&˼+3=Qy6=SJNsILҲ0X"/!zpYc{D;Xi+ZV;β$\e']ם-Fe5ܸ.q6 MEs5y8gY- ;ʇ݅Q.w޼̦8U|/a_V ?(n;ܼvwKqQ9ϼv<mXw塂xrQxQNnZ[*..1&[>N`㽅)`~'|{n\9vr=Q^)() Fm,nܓ;qQ<V?"KXzX9x*lC(f/ذͮ˫yOE$; |̘;KH벣߉oŕ)e9,TgYNV㸍0Ψ3f%A|g _6Y ]Eh8GśbE1b0W\Xø3*>b*R{ֳ#b#mHv#H'o V'}P[NǺnMڶlsT Etj5g}7կ.{Bl޹'=Ow ┖Jߺ=M#ܥyS{nM/>!9s+@;nQ&88^KY+Sk\,v 6ڀ`+`ZVqV-G搨!$؂?AF&(f̱Ztg.eUG\cMعAxh:.`lBp8H܍K3֚e u I=bo^:9qXҎiNwV6wr}gT09Gqx}›.ZsUrJWn (f"8Cc]5%.]8lMRWʂ+2e-1nxT`(lr#XѦQѭ<}Xao\)*=v+-kV3~)qtc0Ӷ]Bt$v[BbXP|#~%:CXt %XTԎ:v!2tW_A-mPPAP%,-XF b+FBW<(B)ۂ9D5$}`t:yTJt AΔ HeDi5RB6N%z;@0s ؚ իsъ,[_%K ]jH"xt(-{G`%i(T&J y*/C[eh WG %:Q3"`"RHnúT>@0fbliEm1jf[y&O2H:˹?*?ms,mjA*0EX\̜+*FBeh'1qTݩٔĩ Vݪ1r! +_KAU)>}1,vX>hau;Q3r^ qH3fyĖ@b $ E#q\xag,ųґs^m= j`+U0P:}5_h\Bȶ5qTYn#O&T_6@bbMI0y;q^y#:^֌#'l)㠤=n|YtE}%- gqZ,uM&|Un%@ZѼOV:HnRY{v[R[yC[Y:HF-]twXrks53fhykQ[DKV_>ł-ʇ^t_HQKQ-3I7Iy{`"GA.DVoʨ_h/jII fnn=Rm#Wɳ v`b\"]U+#\e1g{ lCu0kVبNT2<.nj)t>&7O-i[,hA˷[ vvd,*lMMy,`QӨ۞TOXF` Mh, DlhT,@!>!*"ܭHZ=xTN@o#:E`;򪤅䟽5ӱc,{T(YkzJ2b) im:DG QI_]d-u#FnC(̈j$O;׃o3\s>)7zP~{ ܸR߭ʉv\,DG&H-8cY2]G 7~ZR8.6o.Ym -*dKtRW f^oچ^p%|2rz^!GTaX]iyr "T\PN2FOK`ƬMޕ8V/łrh0gSg-qOE詸X>E9-#I6Eθǵ1${3)Z$ISD9 C`"wЎH%dgcc쐺S|*cQgZK%$X,61{˄&Y0'xjo2P s2~3Sf߼z! GYCy-h>.=]#ABk(2'yqz>7MnCks39 \RŶ'(n'mCTLC)ǃ[O1  A(d\0iS(G}ZINYcnh0xhڞ[{ #F=-0x4MV)֊c] *^1;%K,ã+bNOy1rHOG0/ܙV,|_B_t$s䛊>-!8#3+VWG*ܣb;(xW;"R<vSUw#Pa}V`nؑF܍`l&036갆㓦b 4`.x`21" g,G `>ir* (S.޻pGwoP7*,R.WԼsŽҘf4w>{{Xb15Y1>[MxD0`L4/KfA{[Bݘ:cO:}{OC\ Q(&(*y`Gsfz"g2oO(4{sQ E`̘1bs`P9_ i'~D%Ϙ\J^)vP_* 6OƘ^2H[, rvsCYMKL)upEO$1r$){lCot-B}ZcS˂;e&<_v.BMx|UG6#B9c& `!^qՑMa \bQ.$&^[*Od6k&fߗ X _{|Q8UPnIL6 Oa`zl`ZaRo'O2@<ߑ:w${ H\59~wwлizaw:.7#ZU1PcHгۊXBU^8guEܷuW0\.h t>ehU{p.HVJ\9j^Ev$9l^^tؔ!4o\#1e-!W=5G|ٮkMh\ ϟ}5wÌ"X̼< "=$̖[}+[M<}hiəg$O\Vˬx&9s]Q{(-FDZlz0G_ժ}-&>ejV+8F,_vv1)/ukuIl\ݱɹH+_.-qEIk27D0-QwX2)ƃFlO -n,E9k D(sy-  P1HjC؅JߎQ߸#:[^bA|QN_m{Ovr ?z`;BR==f>{2Ec#y@#CpP_<ஂ3`ܷ짐`v}7}[,#qծmEAp*Ξ.b)UoI[1Z-?N9o~蒙5BIV>.^}H\n\-š"Y Z fe2:7Ip>s{0f,V ˚Hc`.txEE'W6&eș<}?Zƥ)Ӟ߷+ ; r䂹sq nT:,(GP'~VNkBМ蓪uRTHdєa\K< y#ÎSh4l V>mœ8z[x}mFIӥU˦^o]neLi Nеkb NlÂ/DGrah7eO.Lz}8a!vu%?^4B8-)wtm*d44vlΓdps< y^pOH>,E$XL?%n|"< J_B˲-;2n\ uL' %&NX΋OT 2,w 4&8 F !z9c&05^{@V[RXR zP Ǝe#F 70C0i۰/p枮^<3TŠii\`}E83_-m-Zi h޳hgyYBX!$>3A:9LF>٩&Y&$N|ҭSn\HGO!FpĬ8cMlK'rp/MX'ٸy3Zk*2(N0n%;NFo_j0Oo%ےU7/Y|\>Ҿn^+_y)$g7/ Nx6WJ c'SlռCpW$co؉ST=ҹȩ%/Mɥu3d_ABM>`U=5ט%zmJ˄>Mk!DB0q]](b}[k(x", Mvk,PVhMp &c my’yds;2A.Aʵ%YBZT\EʢSfʢv`;B+8@2a7+۝V0ͺbFg‰az;`n٪oQ ǽ s_f}핏@PoEBn ʑl{_~x ѧХXbx"SԿCZ3~c.vGͲeQQ 25XXy']a(: P l1<;"]p:VI&UTGx+6&j/ۛ^"DyZ9qGw$_춣P )s BI r]^ϙ g+Ƈ,!+BSkm pv# cr,ԛ^U~}V#] vŎ@0lCtxT!+ArC]p#b-1Ewf.ŐHL/RWGQ%Z :ocܼo\)hjBP]1y\˒%Λ 0VOEJ?Ѫ( -ڢa!J[mk,ݗ*/S)4m ob~`F܂H` LE*T9zp&c;j"Db  yO Iiqwcyt$ieq/ ՟LRJ {V"1N^#Nf" q'ƍaȦ|]՗C[9> F[5lD$ 3\mHK:icSPS5J6Zr bK/Y}iuu+ҴH+Aw;$X<:ظ x4'qYB),祘89i`݀}-->x0HOFrl0‰KW[p>.p}JWGZԈTG a!k[Ea0AZp%WA0JdV')}`~S4ޭ~ݻgSș` _^T;Cnm|\M,FSj6AĂ\nc,Z:;]"YJ@wtt*K23=bVЕjb#ú,Eq!2 , l8+W75]P-kWT{ T&vnoK1bKp9: EJB7 6^F˸AmgXEj-j0di;Lx"B~TR7'td>p7*phi0u[[ @]ݨF=?ǂ3P7 WVLt/c(8.Ō%;p\)ڒnTҏ8ڍdiԥ8DF|K" 7-Kb- M8PNu nNӒZ9PAqtAlXq>[b %+9GXU=H!FF :\zkks {+QP_5s|lX㶦%Y\9rHmQH!vD-)rΈtqE hmciT1~'}x2NOHIH'H/xHd̒9|$$t*Zsƍz˹CP쉄O5ů J&rOPh'@N57?E{O^jtDS6`%MGYg -w# yC+! fkg)β.W4)CsRY)W#u`2LXPu > 5- mv-*+C, A{Xy$y HŕAg4={NNӍ܁LwR_iS{Čأ%$/:~}VJ!ujk8= 3!Bg%,*!EOtr@qmDy <} z+,Gb )'?L~h+T.Wð\BɓXSUQJ9br|$2 ieĜ0P)'qԨO+rgoRLe'Z_z?Z>u<zRܵr_[}:bV\x'" P,.w20cиӟB>XMb B଺)[kD',4rpesfRci8Ďeql9nK)i&)@}}ءB U2SCdC_c(ߕfCb$ٗ>IS^)hf AGb[SO^u?>vwtGY'>`˰#@KBDSދ.6ZjDŽaB1c<غCx^#͛g-srR% 㢩)+6~ 6llwDYu؄XjԩV1HeŪ~YQi(\D=^uc YBZh.Ν;Sa1ƍ;"NӥVbc-Y]r{A'{CE0t_O^Ɇ[Z]M`ݔl]ÙiE5̝+sB:li$zmtSΨTB]Do&Pwv fЯkKV RqǛűcwC֍ 1dA:`ݝP'LGEȑ;bѣwgvBdg%JXBY'?G!;oNҀGZ1yW}ND -x|a;Kr;޴Ý -FI!)Ae(^G45Fa3f6kXE@&/7mnYM57J|L!fdLO8hv0f^aw&XŚ*%Qc+3̜۱vM1} VS@<ظi?6^5nLŠQjʕQ"N27@@ ۅ+PtP-X, 9X!f:׭ФedNAlĉ`!4<G*ɔ>Bf vYc|(m?[1?~"ds(V;!&a8y2rco,s߿GtI~p'R{?GIg[ؖQ@*àQbi_({TT / ̟ٓO؁f,J'"$˥F@UԬY*! OSDV8 (.RԮD{JQ+\3‚ C+*"dQ`ʬ#/iO?[H &OR ո=3sCMs]ĝl4WIh&ڜJ͎ǖ4WSzAk#.C̓`yhe`bJ$w=?W,A&ʸ6OPtbd'w=% b^Fք6`1!DZ c`X6`BK'[JiVLkb,,0:#j={o9a)^J?(a @oZqQ1@呵P>sruv*OVpǎݧ^7?X|}Mt5F2"K5Zmn65Khetܹ:bvJ댰ŋL6` C1a% GA4]o%мD[!UQg:dbC'YvsNN!)eĶY8!s>^$g4h0`_xAU|vAKw \kh'Q5(>"Qڕ"?bD{T<nnL|22 beX+ X}QP:xt Eޚ;G!"9"<ʫ+i2Qyh,|W9-X y JܹhJm7JndBScDV,A"0PZ "|vVno0to}!b\+wA`d >@oWMt.[OϘ]TeF'jT#|߰E}b:ަ:Z̙șQO2&4zLXӯ]'mF-+WnV#7Bmb>~\caٮJUSUIJi*Z'UXqa5I~ӓrPڇwɧ>F.gZK9Qn}7Hg%6.|vW+N"vo1\Ӧ/uwkeVË;+vڵN_{BqEa8.R!|mz(z@~| wS? / X ҕk-6; ~v'_oT2epn\KX'ٲuػ1gSIF%%C;)'u8utbFg/7; ^+s{ȉw[%)gyR,}Y4f (v-@[FxBaC]Z1h UW[j-SWRɨts lH/nա" K1>.`DMLW ̈́` jƠFf/J¦֘4U#oލJNӄmjf&iolt-I 2qgLx?Ӭ6 Ώa;e1@„[sX_#EGoVd`ڢ"]1^nu"3GO)@kM[cۑͿOYKKJW?g8ah6-n-mܸ-M8b-1~DP٦9'쮫WuDWЭ_U,G 8b%**~hN"/Ne θ-V =Я:Z$?p#ptcԨ-x$߶F6s̓*.d^UC%Ƅ[ MQ&gb %IUJmU;ͿԊ@hb5D3bŽM=D.-2]rԬyQ=b'D_Spk"Բ@"%cHx~Ĩ-B3ϔ**gR}E1hU6$t! >LB ƪdi>GRO>|KA;Pk۬@vu I^7Ix aiRWcnY^J $X=3\_}W$mctǜqq1Wc$n*;vn.-U%FmߪG T1^ۺ̯Fxf5e?~R=}: 8MpS?w *IqL;ƢE/'¼U\6SΣvG'ţ)SܟkZwk2rByQ\Zͭ|{f] 7}_YnDԘĂi\Cjk7/?۰sX֯d8/]00p()՗azA`Lzo| D)O}ʌX)zk%%_#$YK-FnyJڵ/@KzD;Ke%Pp_ۑDCA1T-+zvb+0RS'DY6y-CCv#rЭȊsS^) K$H4p燷vw \Q rxn9Ms|2tj;y4|NHPiQg]#%M:'J _.X\5nG+*cWQ?ɊXLAC 3peT ƒv{$7D [v.,PLƭ= (:r_[mbt=n')JY>CNc63[Ʋ~ &N1cf;?UƢ6ZLI ƘǶy)s_xV%hx o@χP2YgRc@bWodA1 ofIelK@ѐ3{R$Q]$Vk̜Ƕ* @JQHDCp.d qhE9rUՖl2W!Y!•._,YZ,,jc7;-HAq<ƣ)(EVJUB0s#bb$AvcJ٪jwoTh!rVYa͝؁n ma>=BH4-)1O,aWfqpf`鿉Dc.=@PR< ,PUBlPtE+T!b&|UpJP+ P=pq FkAV-1>݋s]vV$0vyz۸HoV$8`kU@/>(̄՘)i"-i|hB*DV 2|p5i=ð𧼘D R$ZBvY6ݛ" wHMxqkY A;SHYV_Ȯ4N_Hg*i$5=`9_țƜy>m&w8 Olcl./oL,:Y{m9`).f!9M gt#q:O>imS Jm'u@:cGF +50ˆ& ,fM@Frh۾mC 'xҥNoY0@M-۳Kޔ&Przqve%ޣb{X6(򣒸L[6zE`B I1H8h+&QMf+ޫzS0vl10xKny,`YAb  H$F<,@/W.J>*!ۑj,D!y4G5!/0AFnDoZ3bTWu £!;/q.NT>2fVQT1qg0>ۤp#Hb(#'Rk Rn1~IM:qo`SB椃TL0`n=OP0ijr|? ԈD˅O?p? XUF[-9[,'4&N"MY'MMT }Y,V\ȑU;!;7ɖU e+R`-#uRoPfrr΀}E\0 0.y(Y!3077׺ 29c`e`Gq1$PDʊFA *O zD7.݉QP(fBy ֏m+V;[Piߦ.DlI崤΄QdYCtkVX! m+hGYFxF;]$Č %^› lKs3nZsIryD0O`​sW a m>۴BNmJVwxDGMvj!#qNuC퓍hV\;RLOw?{jCxl1SSӥ^ Ƒ!(I,DLq<]}jPgGw+ꢤ6 (*Ax5ȗ{<&ڣԦ[Lt*,X0l=U u*ގ&w$wu.b P$d\Yg%dAC"1 zFMlPmd%;v56ŀZƠQV7ƍ$&@9< A)SAQM ф75۩k~l#/gBP嫅w"6"WGC5T#1zG0a2͹X_Si1cJd])eB<<#Mۘ8 mSP+(D.'5St`QŒQ$4UJjܩ2fULQ7FվF`!Yh,b0riu% װB2=,ສ%%iF+S d [!}jjHK0ضz BP.Qy~yG1t85dg95MB3aTN #*9 l0YLJi\s-ִGlO  0!6IfĒ"&Uo CkIv" 'i)$,YIX(hBFotN3^i|%BU,!kd;BE?r4w[G7%x@: #jn|F\aAHl%[Y\\o֒<h2XlD@Pr wȆ`_@IE!&p2q8KrUQvHJmׇzϖU Wil \zL"䱧!.0@a%ĝ_)-;I@@ \Q~6 'ngR<-)!L!|B:$GԿ6M[ $)rl;,e̘N1aF(+Ǎmw_jфZ9hI~&IAeiCy(f:HZ)Bn, [ VaW+*EL?d\koߥ#Ʈ]ԃ2r(hiLHoO>C #$h6 lc6^cu&Y><[b ܱ@- |9 ][IPj0j,:Gχ/Ә\#J@^ Aژdc-0$CjiP@=C(Mպ%eEH.Ҏ+CyAU$] $h*֡1!2?D2a+,4dL5$ڡ/V1T،~]k1#SZRQET˵T>c넌šhbD?cѐMޖԩPK aGnm1x'A;YS#7[XqܹP0dRؖ3RZDDlUY-0ՄOra% +L8TvTy+;4 :xlWDYNamw6Pl T$Q)p A2xÁI28"&&ۨ||B+pY4$iMlmF̸ /P(6{q^@XA^a,'qŢqEdΫ8n+]C?~4<©ab߱0DD%IqeCrt͂ch.A+F"c@*5&J81)x骂HuB[WԱ7ēE-uREAot"0|u!2ǐ߿*%Գԏ1(HEUbsn⢊tо{+@xpPօXgE}rev'ONY*)I?1w5Yl@*#^Yȁ1kEh"3$%o͒3 fph/0Wu)h N' 0]Xd PnC+Gt9k %򂰣7dFgOcd]g.#F"qNj6vFj_^g#LI "hfc<4VUm+0fRD Jˑ"GĉQe4Iy+BHl,x}]]N,q.b/H# 'C˂vm+ڟjP &Ֆ3B"5iScXEWߴ`Lⵂ 4\ $6lh"Jsf[ 9[E8A"]K .?.26*jrGk)E ɶ0NSB&%%7nr3oyp c|:M1s|\{0MH׳ƌd ((z ))l%ԊWxuVMKxc{|!.LbAd>jχu/݄p8PJLrֺKXXe6VXh̀>AV_u rq*j1UYwf'7; 4rfqoo|8R0p9T S~l~sҎYz] L Ę=o M sHQ[I-*T4Q\cbyC¢J<PtsIxcwh5fϖ9C~!F[|"wD(zle3hRn4VIܒ/]JlshK;*KO,(NHe_wܢ۵[E( bX na J9 )~6j1@V7ԁ!,EZ`Q?CE Q[BakM2Wt.oުDǣheXLM D؞\NF A]E\!zD$N}޺mUW `$Kh9ڦGܰ9a'!6))θAr)IKm#ɴ ͢ȸPPr8`{~Ax~S Fb[{N3`0hRi- s;E%`8{Rj*tG]5:&&[m; !̚<Dg6-֝# 0]'>ҭC7rx_m > ERUvKˮW![Y-_jNW1w~ z9VE:᳡Zt+57 7f&_U-df..64,i*5W.%2p5b"@5osԡjwjylWC|[N  {/ WKG̙d0עsP7%oJOCl¸/(RKEE(|߾acݧk8O"ɖfuD*<$,jODPaXob, \!%)݁?(Bfr`9T#&wB؁h-\RJcfxb5ԮDx-˥ҨxkT8KmbD]W.1VhMpA#كUů.!o(_22qƛF&![x4fo p6NcŻfr#kfI7̔᤿R ZN#b:haUh2뀐hXk@tG  f8%L?TG&T5ګa4p~L:Q$Zi㫠nbNRo SS+  Y>NV;iQT"Cedkd8~dCTtM=GhaC?2S59Թ}Pa */Z w+\ZJPM@~Ч ȷQ%Ŭjm,ZTX_w]~0 fdw`{r;q`:L 8 lIQ= ܪ((}1@SA}< W9jo9Ŀvȓ.(0Ams(sfE$b4(eD&/,7J S5QT{B-8l!MX`mޅđ{PzjԻP@}"p[%DQ$,L}m5K\3W,(-]_ Xtu4 ,aneEHPNsP,mۘ0a tktU/6|@icμ5^ PB0dʌ?a-,7ԯBYo߄TD=M"6 v6N xaiER(+6eKJD5ViV8j+Bn(.jDO18%cCxbp\B* ɽ0:z(l+ ]MXԩrlnw83}w#Y< q?1|T @劂PÛ 绤d7|<Ӧ36DAĢe0ȑeF `ѿ9 w”0ƌ5V te0~-4M &Q@TBr#JL,P082MV#8(k CfRVͨ'`lݬ1BꨛK el%fI"='B'dO4~{j@Lr$y =ADu3zH§HqX4mvunyd5+3oݺ)LBT,4l#@\8bJ<}O֝ή5/m̸qwӽxk!^Wmz٭lE#%)WǝXc;M2Jb`GRf_[c$yEZBo.e]i[}WHM^~;!ʛj_Ԣ!Y7ewFaZN+8tڊ{춣GDqi[ɷ0&LǗ?6{t+gxv8gQu j(}c鎁Ntq~Lkc-1F%˹`ĥ[XziδKᅴp:MUL<ߚ]fކ0H9iP>uN73-X/t~vʟ?z27.z\3ٓkͬtkw;l]q)pE̒iqbS7%E|[=d_G0'ÞYf"GLo~`Lɴ6cW7`)ٮV@uGr73~%>M￙>Ғ鼢&CTfR̙̩oqé6U@lP<}@ژRG-T=C/cWZ$Xi(t'ӗgۏrpgGs7 2?/{t7wPt'Xibh~֔}ޗxv0{d@ jMU&XxOWdΜu^o47ƔNv"M='"G5# m e.~Hv/tb2ia -M4tkSp*WůGGkoS@,p z8VH xw(ůHڎLK?:H1Ax7ޕқ>Y|WWIeoi:SfPaǺMeld )/K3ӗihIwd} sNeg508>O[3W; >ݕ9vI˙[] A =x"وh3nSJIJ{QS+aq<mUv͜z7=w"3ncmqy;tN_LxH ``ĝ!Snōpn0v`{]ИIhes 6b^f{S'=!@I}+շf:/cGt{nA=7fɜ~IzΩ\{-\ad+14}>qN7ٽ('JM=}XO4& wc\'O0KrGXtY}G2vt^e`$>s;V3Rd'Wҽ̙W ӍHfOdNet0&-P\($fEr͚BҢspvYX%i7\TUv (*Rצ2ʺ]t 4, sBfL\6jNu3@@$M⛃@KƕM` [@xvj)Q PBa} p d^e*2Gprq6,pQ͹;Hof;煻q,֘UHPƢJ[0#$ekŝ+Ƹ2KW;+lF$K~-LLK7R=n6FMk4L|Zt3dώjIxQ8eАQ1ؕi{f@IQI]J^åOZ>r &h xcϹj K' /=` 3_įF1wݻAMNfgϞt w1NJ (Gl$a@)y5OGg%P"?lrz`ay rw;?&x$ Lǒ!CeĒ.!Ώ7g;`oOgKMwˠO/P}ĝt +0ӧOo7ZAi~j03pg"$B=4 "(/D2R!gK䒔!֩ Ф?1yϝ9CZ>AsN^,2=ؚX{4c_Wp:+x+u /mjۍv)P ;\0ѴCGz t/*瞟-<ۜm<,l UO).x;3z%ϮdKdFE|xyƤx&xn^IweҦR.Gb"NmLISo373-_N}J_hCڸ yb8ȑ>Ep7 Ttאh nQXUfML| fnOտ|zl>Զ˷rS*j7O m|X"2'~{X]{#o,@"|a@rn! T`in (avOnD6@~l 霙Z1h퇌GG UA@)AVWm+n|Kh(P:M=\;cT{Op6Խ!RR!ns;Pzgn!8 2Ԙ90}4Uï:댞u`Q[VP̅PGwR3ݧlPCv*pC @"|螶88C[ 9k倸d__9ooF=&hV=ԌBuΝ0B'uY VWEA2F\ -zz@`Ԙ,;'H9=+|@췍٫~3Ӏ\o"Vq? cplv94飤.fm ȆJ *I,^̑z@O3&,TT*;(]3 O+j%*"XpM3_r cL *KgL?f>Һ8}.lCUq;g.ރ(娏?? =,`'2dd۬{a^~X_aC%9 {]eh9< CUsYu&c uF4}Ayr mUa.= >:}wu>vK}+Dh%jP8l4VB^%t(ҩ9!)9d,Zb :P9,څgd ]ҨM/Aij! ~Eȧ@_ڊ'/0Y~&s1܍{}DRven^ҏW꘎!S y(@-^Q:nOsOC~xzGԡ\ Gx$(Y ن Kq9Od;#* r,deQ}y̕M60>!K=kB)Ꜻz 鮁sb=<WtO> ;0T抈YFWmeJ^Y@Vv0L(V4$ٔ:XxFe!zaބZ'[/nFxܴW3%,czpԫ1&`oob鑄e&"/d-^ߩzEZBwrg!g|d*^D7Ooղ +`ܲ#ÐF(dd9&y$s.5xvtX*I("Ki#\.z=E/TZhKnͅLX[q6:~}"Nw ƻ"%,F(f'ʹ7(N!HW^D;#wв?B̩ftŵc(LR[EJ246VX滋>}ac}RBFwCz®ur0ĆKȏ88zz(Y56R*3Pdut&z Wo фt&&m0^㭠ޥo@ﵟ:J_8OHZ-tZOXHJҪ:a@{m-{ lTuߔ x별Z2NnXp%nJ ꐯ 8*``rO}5a6‹X~ŏzA.E{a Bю\5jH-g_>h ±_o܆ҭ%ݯ^.ͤ0Ormrƣ )ť'hpÙSlwjE._39rV@'c &S@\8u*ph"r #sR6z eP=Gh̋Th!9Ozd)`L@œ`Ʌ+} dҝTo)(D\<ښ@ $ncSikǰLSK=ff+P g؜̜K' ;}G~j5 ^gVoT+N8 s)C@B?B $iy"w|ߨA>>EH>iIuR31D6/Ofƒ)O 4B m,ڸL*V!޻AeuV1{o1&,;/ ST$%N 1~J]ƒfU We\bw}aψ"l"1-|KGx\pZ>k(GO|`P2涞 ]?=*+44j?h+%@&<߻AG>s $)3C" W6ƕǝ9@ưYQR_8W`G TV藵T KTL;كźǤ22vyK}EYSF%*([v]N-n,nj!e)^XjV@0|GU5 -[ttϧ_q}gL^1Ξbk$pc#)իF{][;XZyE %ud0 %X#.Xp p/+'H{n1:@{@h a zu)pXt9Cwt܉@ $ |Q* t1F|Մ/쟉y8|Cš{l2z@փCp⩙b~.|AV{ V.Id#BS Ɏa79hk89o>dɚtJ666ǶlX=$Afe+^"S0TSw0^oV:;.7obE8 y[p~Ν=p/1?߰)QuЄUh[#aU/Ӆzujfm?a1+"ĶU)ub۞|!>lYk|!St2oa*0~r32$7ԐE=3uL+|>Oc(RA]0f}RXq)0P7N̽v 9f[`\]/k/Wh^vpʛ\@F1X`ݔ0~Ôw'v]Ci= U9p;KO* ˡ1`\n7󃺺HcSpTat2{fmQVNxﴟC v.1[q%]7Fr4 pϩvGA>'dQF>u7Q\.Мk!XM{4Vf++98:e.Qah ln/ q% fp%f=HgʄDO' `t\r!5NUچu[O[iu lLgBx0LT*}OڋU٫?PdBeʖiibIEVf8= \K緐;W2u]P9]˘_L}ŎSA$ej?ESȂ͘\H{YB# lܝdP9•4xRAb,Lҽcvƅ⽴{DQ<_9d5|VioF zx'`LIs&7Gw3+m (cȜm#o{EG]d9RDž)z|א=N3]CJѓyp,w!w;L=OOv;|7EO,vu `mZ@QLzOþ%P3{㥞t7%3z8Yʶݾ{ю 1{uahj$SK5>6w8qMa&)njIH?~~-s bɑI}6|Y`щ fhAm{/Fi046=xaWS8pBR7S˳}(NK:bqBP_ |C/ӭ 6h!>!JNj1~U"cP|zƘ緀{A!:~}%&: [Oh2J_/BF9hZ#\OZ#g|$4\~`}30W5|u^8J-=Q{z=IIc&Km @xٕY/`vk2RAz w%[F:,xro ǏuUSK(F$Er^G?=W}䓠iXp\<\z{jH6xϴjOy2R\EawH[`,˖jz5d*\;|<"5z 1~)? 'F eYmtg~x# *,~2;`LUƞǘG$9{MC}rox׬둸q>}\ |N^6㸷l "/WwdR d9z5&.o2l%˞~뺈exMw -b@J_Wqt`]֛)% 6iymRZ^N^E"ٹzu#8MZ_+nD*?  =}'PkI$w2c,r':}G(ݿݗ>s #`N$;bޙz<ſp(‹.Rs](gb ĸ38 t$Bt1"1zpvd0J.Sִ*XYk`g81v(z&HdwS\rR/zpWԮ47JXȪL7v >st4L|cEC"ɜ}HALG!Ьvxzɇs")hڬ(u`kϮ{?s,yt/ V^R*t]I/#C!΃;E߾ $cƃVWA! /!hp^`(CĭCNCÉ;1Ɠ}"C tЊSa DV"?0'9=)A*a^/p xM]>2AIН*j%g?x<F S%xl_'z1Aq:!p4α駠zكLcJw=g=qA| @d32dtH4PG(IqzC ^9a7#0&^A+-%'!s &>`DHBH{p$Uzt->اx NxJ4r<{XMcC?{R~bLӵLMʾ!,?mmΌ߆cTRQhEb9eIZ=+veob;@ٳgK [s.,̱Wdx*jNjp gMfZ2V; *~o~n`:wb)&`RrC7AItE; tʔ(,V$X35~R$h>n†4{E^>=/<ܟtELi=;2-ԠF-)̧T.*R^v)4a=Ζ#Lm*ҸpS MLy42LU :a2oa.I̡gOcjYS68Ka Z48g'Z2KUt̷ `I^U"I{!EAtOG/"h,7Ĩ>A1UX+d\f'+ͼbIKkN)dޒ$Fx/UPz) ΁fH/ʙ1-X-֯(H. P`nxj>0^DeH >W)QH4FLDPn0owrDv=bM +] C`Kv YItuuENVɴtL(9$ ) ;\NYT ,4O's wP%Ra:pL'CO0K e?$ؔE8%zu*+us`' (GPTj2LVpcX54n]< {$k}~XE({+U?ȜG}(0 $7ʂ3b~|W(<=Spdu&iP!r6JFL ATaY^-=ۆf?+xwuua=v F{nzjZ@`YLbd##"<UotA%]1Q/ʺn|eS'Э7ز1|yBkejy%hAуoѫZہ)5/wI. y "NI!`ų@n@sn4hkxaWS_QB(PI4Qpq8)1 ØJ=3 YLM~Qj`o0E]Yrᨌaaa[%:&qFWV`mTLo|R:mAmRt(vOM )SҀ脶_c%Uf9\]ϲ')lrdEÕF6d:Ա?+< bkMCA4)Wn/Xb,1>ZN:#,W;!TƔyxeQc'VBwc <1e)_,J@\]!|QH%[zĩo}sZt^5x|@s{p?}"4*YÕhI"n ]eRl{>.C o%'rMW#Slc?^8?zK"WQ'eZ(s7VJj3=pO!',P5>P7zXyZY)yI!%ҥ+^UF\.vd/ 4REnq5 O. +]mhKA.Tu؟Su9JSnC?FNK)L >&7z&k]Yd8R(k$drL9wIe(c]"s ͐{n9L^RS,6c|[,gF[B*+"Jh1g+~CVK0nM)W f13}l/p^]+][ޥ쟈P +}d3\X?7w :X䧠"O̓ܳpC$ yz2Jp3)2~t#•uwOP,?tݥ,OJBCqZ&E3"q\RNWtSde[ :3zUn|ke1I$9q7A FgW}25K]kz1\s ,_j!w W߫)6?|$e:z\W#K #_1eᏤW<"$=[\ u |ǮzP=*k!^Img)W* ھo`p,ot#L1oW 8 ;C~A.T8ܯ]r&$9 $gNt duFywl"*;a ûOs6RW߉z3z뛻g 4ɻ'd@0[kTYk;f};jRpYC4bRQ0|I$ѮDX<`~TZ.X|(4k|1ui\#o9k[ꕵ!^$a [ȱ ֎6(:ZlP']yv4™hP"T&~RYld 5*se5pl/Q#}1E%M"_PԮǀYAZf9`0 > \ZsHY[Q+ץbp؁?o\CsXC fXCZ'ܬχiqUsޟl(?eCyEy3 ]F8-$"U&ųa1^)_#Asn0?tlcZH@dz C':NntӌĞ@YfcEx툆fu(bq-`'@ PͰ1m %%*6R,X4Yg@̊'0@̌', B8ƶSu.5d -ʿNe'ۡb`&$WjV$4}9=z^BuEQƿ] Yq4U窔NdkǬoL*E Ԛ_x(+ѯĉZ9QҎP:Uc(~^Ę۲# p6"" b! RcpD81c_pW".`4Əw>GWuGqpbK@T;=oTdш   Zbzg8K\\=?U5Q e~5@Đp2@؂ V#h2qێ_Īm,TQ#)xhB< 7pԬ޷ìaY.{nf(Rbn@0RgSO^z)J*"lFYAGK-zXV*\Ǟ X8@kWh;WDDWQpH9j&Ft &+ B_|g]YXclݶ [(#!i%]yքs2CJ wZ!7~g{x;h@@#4RGR-! X kQ'N 7"f[xWaߜ`UnB*/UKWHaiuVσEFczsC=Z|x&7Ft3 hBb1? KV]b͟'?3U`J+R9G//_ ։Ra+@Zd׫P,x]Sl0`IPiON 8uXƔ2b=Yiƌ0h-Е $ J(sWx3yAP:JT Ⱦ9sQ ӌ%@U-~%UAJ愉Z1sW\<0`06]oe/=*Q(oq$P4•ƿOk""A6hq[`h}ňzm•o~ӷ7_ $9EjaMxXC%Y { `8zɭ)J*Af>1PFҘ-YZ'1q;x5F P孨k8BUiJʩ IX٬fe7>bAM {>]FTdJENϴ;dQYhs'c\O==(?1Ɍ /U@!'܀b @C3>SQ12I%uqٌw׌YT~ L_#QeYcpڛGb=P&$Y6o`Vd9 ea +g)2# ^2FX'4^{c8PXm=ژ2i6MF3x]&.ɓa˶Y2S@j꫟FbU%a-4hɉ|DV{+==;.=!2j*}õenQߙOG/dc4LD!Q2|E?k= j; RѺŖ/ E۳ݬ`' {dKDYPiS8ݪžVKX bYa/AoT *\fHVXT WTB4 &Pv-Xz׵3!PT? 2b+@b-00@=v;;/֡$"DuSs` Oſ%9Fa[ vJ Xb!-g0>T#XJE҈dL.Nʹ@M+}kJEg zrT:Qd;x:cfr]3IΪAbSC?qkҊu^'1k:M^b%nYB& lQٕee]vT&rBU!4Tk|gmfh@#U;v=xCQ`0 '.LJuqxïc}J&4.Q@ZMvyfwR`ӦS3lV 3B{XAލ=?/&( |ޯ-8⯭1J ^Vm 1W9vTW8-ĭqkaʼ(]D=*RV<7 {Ȱ_B#sܽ ŕ M@ - 4`ܽ}}۾hɪl*:1FM1&qI'N&Tջ{}ofonU9uԤc=ӶݤUf<3b-dvP>yUmɈ<`k[J A]#os"͓G, @ j"DidH#{A:,a[*T{ ')(.>akqWu$t9V@]W*lۏ^~0+o<))%s/eIt=EP].||D #Z#m#:#jbZkiu?~YI/;9 Dx1"Y,ҁE햢';ɥ|ȑ%%\M$qK̛=Xˏxmg$˭M J_֐axQ+E+7pW.W,/*<8[D}eJ5a0}"b (%q~7Q*rI7f270|;C TCr섭 RE<˴Vv\I泄 T8&x>["?"ChaqA<2` ;6$\ d9}۶0n9_xMGmD4O:7/BE*iΥxCדPfuΏ{C͎4$~-ZÆeKi^YIL x)WY :dgg鰲Z ʶbQ5":N:) mǶ^:[䷋ _3Ej&;qÞsr!G!Huji:7CWFkzd'ɴ\j5u3YC^QZ2+f QgwXa.*;Fq/h3G2-1{(㉧fzUuʳڞHvNJ*vK<:^WSh"}3`3U)Ծ=C KJn gۄ5SXɮ@<%JY]wQ6i:3q/}Q{uɨ^a`DNSޞ p &8lly_GRۅܳSdIiܧY[&^g9۱"NE XPqA(^K=΃4b5({Z7jړv@ʩ@{bOM~ނD)xzkY~,}'ԝY R!hQ6wh:!$ eK 8梈rCzoqoHW=j D;ᓓ^K1"iXyeJ{A'6J6Ĭ)ѭ#X-[C+{۵a# kUffs^g{WJ'AʓoHE)M֫3%h=8^GCeW1hLx4%gXIo|v}˄W)$RL4zٙ>ڶ̥µE ߯jXXVVeu*7k+3ZZIt1ᬞF˒4ȉ͎Xݺxbaw %F%X ,Ah{_6ڸFKJ"3ﴘ lY-5;WHdT{KrCڧڎ#S&(W'rrX\/F]]:oNԍr5CxpʰQH;lPvdZ v?EV7i2cN"ZR]/ㄲ tSP8} 5o.v+{z=+,_^OԿ7LofƘS,坧?Q#N.̎[Dg c b\WLK:AI:!jl1C;ESs׃&rv4LTN V^;lxD۸c[a/ VKdп 2鎒Zl5<#QIsu.҉7P_MjaC\+k!A[*O/LZE*,˼z ȳH,uPVAEl\>$:W" xx;1Z__'Qb !X-H—F"l4DĻDyӵF0'G:TTNA[- UQQ0>[w:B6;RnԎ'/'O\숬dVQ:enLbs1O[ok9CK+D^ErSW}Q![Xn:B9vphBD̓҈:J*JxrhQxWfE T P[^NA*i%C&m/-Zwr6j<…&2jL$0>lRXÆc9U>tx&>T΁N$GYtpB>4(&}L'^>ZH/Λ-.$/8WJ^<@RY4;}HH\Ă;Q,6m_3wh")J񚦮=؁PP[N6ɴPSqG<}d9 qҵALwewe׮5sgQ}4Y{˜={hJ%4X1R% ӂqKW *KKx u^KWjC-4WNapKˋ;Ոpzw(#4O2{tHo ]显$2?kX-[}^s4񼻲"JݧweY֭[.}igʟ˜WmTfzTlETlPN,7TbBDI"% V%#yf (])bXB"%U@>hk7NUvRޣq*FGFq$KV3wjfl漵*pVch!c,*#Gʼ^Ih.f΅ͶU\m9_7HsOǗ$8SÉ5%M[BFo;2кl7S3ˊΝWTHl,)a1#Q UϪ5]o?զ+d}'AWA֚Dl9Fz{ŭ_ڻ) mcHt,j5< Ԫ'䋎ВO(9ƼY@L{$~z&b 7SDP*qXG'x*њُљo-XOߊLy$j-1 * M!.yV}ˌ'f}%#!kUkg11I;NnYInY kZٕkcBYTFl$ -wG8Y)ʸ6}"~Ho90u/,%-yw)̺r߉>+ L9|Y8T2רKJܘV3E5R9"?%n~5pL:2YHS49DGpB}/С~G=J7:n٢x7Lz+kL-S'Q:Tژ2;Oupkexci+RE(őPVBEc}J1ޛ!ۍ]8HEq>?W-جqZ+eKJ!$C݁;\dǟI⼘JAhf(}Z2yUK%^Y55ٖH-r$&4xԣEnF2aמۋ썡){MbEh=zTw1V y*טSAqk`IV݂l|7(CaìI:A{&c]PBy /*p1kA@e|GJ3OV)F gi =x39t?7Yl%Wޢ5-h:}OZdϰ5ejV?ǽmɝFڎziT#JD'$[CfUs wޙXO>]lq&Sr3`gXeR٬Ѵ nڗP@:w5b)ճs$/8R̻IX:%hhau;c];}\?mZ92W9zJ#ԜzV[X7޵^sMZ~@$٬H: VyM5xJӅQ:FEDBBAT (Gj4Hl){2L3СC(꺡{׺rrAɪM@eҹrn'y;*G9[ȴd?UJ^7Aغ/.=XkA|G d3F]:L0=#WaqY+o/n#}U%w nS9<70!COmK!V**u]B$\/BDlu@ƜW2G 856pSt ɀYRHχK5<@Wpk3ajV *L$q=k;m.ێcF ?ȂΣk4'=ڱ ޲eQp4P팶QHD@@7#6t||O'ad=a:koT"NOsbsR]@;IXd r+%ʹ~TQ\Ջԕ$Q(+ S˹U(˥K9x"󸮬&M'FJfKWMd.tԴ^ZlL>[BD)rJN-V:ǵzL&+$w1inݽGeV {W@9B-XLRbʸnA5LZ$Pu"3zࡵLַ '+NLb$,{1!Fی֔\1-8[Tdf:;D~$+8Z=~iٮ`Ƌ<#FenraVe 'Ex>7n܊z鴓'xGvҥƓ|ak$Et5/U4R ѫB|d2S(<2YS)=SYU9|rw>yBtnJIJ'r'a1}/@i6m?DפtQ.r3} dn 29bGy1E0h]7F\?OL */3h`>h:NT[uhʼnY̲-@f_&GsU"<ꉦ8;EmvAr.,Oy-KL/$I;!F kt!Ԓ6e\9'Z.{9h[W^zWwv;SI S <_;:?'W[MM 5cZT7ed5gt $RLHӴ!@&r&eOͨ4|_(މ?0?Qg3gŵRQY\|Ɓ J7_q3 u#ԜJOxֻrj-_;:Go~7%imQ9JLV@ex+7U /NC"pjϧ8r?Ql&NJI㥩M;uF8@V2韌y袩mЩ7Moa@׮CIk AyN3e敫\br墳*?PCǜH~>7@XqElغNXo!;vLߺvꌤvcHZna]?GVӪ-FfUΞNtPuO?^6LʛЃ";z"ɘv]}g 7IU$!fN6 тޘoMWn.'j'}rTGۧ*S,iLLw %&I _жz0x!#,קU *&1}{fER\K%`ޛiwzJj_,,^[NPcQ=j$-CʅHU+W?l cr)GKv[n' z b.[*y!KǓ| XĒ0jq}(4kT6Ib1W<蹆hs2<[輣jq^'O 4aMe۱cN'lv?bR|)RȣxS?Z4'K(SpnR'-8&aV Wߛ+M6Y5T, ܬ\H$1l-6 %޴iZl3v*O:7yxA܎%[`rúi݌FROF#Ih)+Y37Q(>y:B\y?,pSlWRd-/hNM~5~ΤAGC&\Ezߣ Iozy}b:$S$OH ~B_ oK8ǖ/hVKz$O1=${j3=*M$xI >&OVΡ֚7未Q+;S]' VM@Hg?*2Ow^3RnMjX&Vf25O\ǰ1W?/v(Չ(b'ҖfC!g΋"7g#Z "rXkG}pHIQ7fϖ%彬n~m&s͵ׇ&Ҏxhw3'7*槾P2Zfէ\kk ԏ޵c`KL`)2ں7NM1ջ?YIFhuW3"yj~JV|F[esrт@.IVDS4I*XÜim{o[|IhYs'n+&O,2ig 8) ngI͙~U;i$ӨSe)I/f6grT?RoENoI-=8qYL:K'EN8}bLJ.ZcBaSOIG8?oKBc":奝$ ס|'XE&!'s?۾S7V]6"S%ՙ,2*-y_-2C2KxZ пnu&_5ҿD82ei,=˻rO/~`ISe F&b0}4^{$2ȇ|3Mt@^9qO.v;|PG@OrE-I섮K\Q? 65^$ % [Hp*IzJAŰ8797A}4cJ -[cVޞ_=wfeSh^|\}^}ܣ^Yܩ[J-rFW_1e'Cw)c3tM;ђ"XbV?KvFI]RA%q;Òn Fr%u Ҹ~͟l<1jCcLPoܯ^F n&^Iem9,_mU:_'!]Y$"uLOTwܥBE=oҚJsP/z ۉbXe}`wTp6HnLskȐ̄Vj7#))޴ObdfRVQ FL1и$3?݆$3SmOoB%nu&_m޺9;iop(zA<_5*U/ rlƤ?NRd|;B$o6Ȗ|/>'g7gQƼuI CEPM Ngteis>ߠl+a]{m3@@"JRD^vu'?\$;vUZk*VȈNl7ax%bcPA\Km]0swr.vtG7)YآMkszp.?}efwHYPuܮBQdBO'4*y$ÿ/Z/#4W6M!uԊ]<+C)w߶*5^gU;x/8(UEJO{P;)jI$LE l`rT2m#!w{zHOOlfdor= TMI"D|\0#Ő4C0bmϱzt>z'.wJxEJ&~ҼHAdnIdPq$Z#LʉefEQ8R/<+W9;[x_irj&OSDg *WŬz0uE'Y\r^yyB&_ݯMq{hGIwwZo4폏YwQ,生X΀v&둬wu\5u 5$7l!V)b%/9weu(-nL}^v_j!!yy)p\Ⱥ.Wݐ,UscUOf&ۍJvv3'wn𺱎c5[U3>jv*b&InE [i]몫9슎gJ-m t :ԭs| jDzrxO7eڵlֹRʑ&KlL5fi?grKnʗOѣ^I36xs4$>=BzTSumh15ꍓ:v op Q4~y4(m[דCki?y_ϞS&F8n~,PSVǎv+A*M;z$704X6/lHn?QVPǁk+U4aޯ>yeT&a Mȇo5w~NԬt{Id_ aO$4D'';T6ڄ0/-ud2 ݠ}"*=sRbH?-[ki['Nl@u^f=u0C Ua ]l%؏2@ޝrn⎻j]arUi7mMT Xbf*L f 횗i㦩x|ύ.f${*͊ foы$jH&Nj]m.yQ7N<Ǖ5$s&Uɱ=;OtO!+٥kN}iJpsZnĄչk{]Ecڶu1 !f Tl]YM+D_}t" ')4DL.]/}Ѩ%O8bʗ=sb&cL$Q\rkwV>rɊc/TSq@稴f-W>5 V=G*ڳ\}Wm:Rasꗟ; u{^hy; +we:͔5[wYJZ:rY~QrKVn]E̡͏芹ԙQZ֙^b;mmoOs^:sdYCUkT,ẕKQ*k>)Gw:#U^s䦚Gvf*XgN.VK40$w幤FMbkVjΩܼbƊx6=Vm<^wo㛛V7fšgwtM+*79qb,Qymʫ6/]O^r̗ '9gĢ#>ɭ?-_!rǶ+)}ȱu{-TCt %? Qgyջv9R^Vz4ʽ/!D͞[M;KRUU'j)pr6]ua3sH%IϤ*JZSņU_j5]W[-dnHRcy?8sl5dEZgڌݯEXnh)etͦ%|=i{TnٚZ@OoWާ]rɲuB3'6Wn[uXիxE wa/}jϾGD/~z2.Iz/bv}_ŪJ/ݲVqޓ\G.a9sigNm+"D?S6#UOG!9ji/?V镊5+vۏ> g=K;'^\"'_^=C)էVlzz|#5KVVo[",ۄ [WЬ()_Ei:´~zDHnڰrVj_YwXZ\*{֬O '^w[rrpFei/T~Z*0 |;ͪ+aͪD$xQK_<zסWs]-ٲ!iVɓ<24jʽϛC)TŤi.ZYAh5kH9Z Zt3Z 1<|x2>~"zO-ߵ^TS\eyӋϜ\\dq5ku+{F0=2j?bٜ9z f>{EOTXf5lwGՋOݴ7bj\RtDK^dͱgf*LvӷU!E柫C9TK'QoFnV5UYMVbLڸbV S^A:Vd4;I0ϢUӿYQhEZZ^!/!,j;d^s˞e i:%Ħ+T\1Uq|]哫LػMVA֊W:]oע.[I ٲbR=R&4}zTƺ+ľՠPw=cΜzza@mm4\nU2|ײ\9[9R{siGG֭V>lV)S^.kǫT`FeK~%>n^q6v R ڙ^Uub.hY5>'ƝXR܌3Ƶ%FͶ婖;FlީM3y̌ۚˌ0|jIeU^ԞL?F'WҴ1-:> #QǑ4̙eT+= ?/_.^]6KzH09MZkEݭ_xr[ի:@AlT(?ik2m[R%/Z{҃ka]l.oLMUj̩ZcH;sU1 t8 4uޕ12,\{Çh^.Ԫ\Y)4"˕9ҽtWrd(~.geF̩2PyN/B1TE_I [#0>Pé=5 GjbjvAK)SL=l.*UƤ:*_dp޽b*vw]awBmSgWI] ʒRHK\ < ͨ V2FyN|tO/f[+FmD5~V=GXrcZЃ핏1hjb/*z;-c:1 M-i+/D}܁u|Р# ZfC+4S'*ws~vՉKwW?lNTW5'_Q_B f?kLwRPʺ7ڑbp@{#׸j?,!.<gp՞}u˴/wHّao*T%kPu c\=儒;W %+_ oāGVWk8l2Aaq*VEX#Jѿ+v8:E ;mYJ7{FU1;bV_m^D޷#W),妤Jn&t\B ד)AM*P`g[AAuy{d ؒoG)RO]S\AKH?IwirMϋlѯe|Zkv51oTM)9:'Uڝ+/\];%1؛3tQgZhrX!}[~ovF-(ug.ES: i<|OL3[.T3\^= =HD_ww.ta3]fz1b׳vVߡ9U{X]ܗ8>Pa V +m4Rvux[uюj/(kwpX[ˀʧU1?T؝kH5] ͡ՌgɯJzv/Z)RE֐]݁H%D!^E$.zq;dpޠv)5ӹxJr~qƙTl9VWJ>d Qӏ?Z{V%6<73|Шp üӇށz'_:R?ŒZUgU.Τ3qIfTN׎1D3جts V b ũկost~#z$o.ڏL &kyU/*c^иj-%Q^F(NHXTU[{'ϔHDfFc?&Z=e ^mjI>66a vl8s1RMjQGdߊmWa3u$3+P+_>K%y |s#Kz뫥 сbZOh[Eꇫzu7.'!imT-wȉuD)}XF"IJ=AR/l'0bEFwz̹y0K~Q?^ SyLWN͙hEePuxg}zb1>;f6l]T U2.6q1mFؓ| K-n-I6ׯ[԰}ݕO!*,lVzY( Qt=rH&'eg&ft*^̱z{5qly G*7lO}J Un^B|:EV?ĎYD-ybE}iÉir&sSA-g,ؿ8N~㮮+hI2š,W-s*.1VL)B۱(-}뇪XK\ZQ _ՇCCA)ٴ9MOCU:%1rTM2j &^5P7t4S]$yf[7~0omXN3cV^ʾ^zR65NԵЫt?2L"UGJ)ưbď0:,\fuO5ā@1u<3O50|]]=Ŏ ޷.Qu_H5R?sBܖ|.W{ra\(js)ͺ*b잀 :8Y^wNG<_:2nv1ъ-熤=?}Usͯ͊P@N$m=޸s{-.ѳ bDD$#;%tY=b>󌼩l6ӿ;zOQ2%: "#Od:xΖO UbE V# ~s9[yqyV78w+L΃0\74ȅó~$C5|MjЊXEB7rp8_Ųw )[/ T<}N%JmRk:~ȥLT;ES_?9oC+,(Q*Vt"L|2u3ճ)]\@ ]JلzF,j0gZx. ah&}&T_hJ 8oо&r gh{e ۡÏ4C odYt"X{8 [hز(87.hbY`8LY(<O+tijY#`2̄j %\@g p!X^> * 0AX;j!3 k!,g-090=p >U+C`<|@֔a<`6|_mh0[ p~_m-'Na3 hD?`>,]}-nOAx~Bou C=;Z֕0 68o3_hՉ: P Z x~ @Ȅ[ 4|G m.a*D~X /1~_]y70=PzO׍.`2qX [`~  \X!x>?Ayp;Ka샷cIy Yp ³:goВ7 k`2  < [`_wh˲AU<\۲@? (jYCffC^C5?\7 (Ev)|_C~:% cs]lY50^#=4솞0 n8'9\46 #` ̂i'] `, r) _ &ÝP V [s|]jYM +a, WG{4Y0 a <_=hpL\+ix NshzA\ n.,uO 4906 vax* [a&,a5bfB!<!x>eS0B!:|_Ba73!Gg tN1pDa. ŸswQX;|CB>̇Upށt0n\`=삓XWZVx>oH|7wS^B{Ka4L{X/[;ڌ 00uބ F 4?kh'p-LBX 8 3Zd!p3 " 57h3qp+̆a-lC}7>`0\ 9`<>8pA& .0n08 §?z' QS! e6N8?= z0Ự;pRnX ]=)p/,m:÷ #'􇑐S!Ga l$>?pэE `C<` ?ypdB6p?a?spTC<;Ly ނ/< /[;.c=dݰVޅh=.\6(a  TX8?ϡCXQ| ˑup~  ip|^Oyf C)6@Gh0C!mp ~ <, VK.| BE|_(%~_% =Y³bx^Oq)ev(p>k9(0|>1p'̅p~ _B|K SM~+hWp,-W"sf ߃8 MWQC l|WR&]` l'YóC 6 =p<oß|G >[c:p;,&`,̄`/_@p<{M=4@ۃ;a>lS z1f }|-7rߐsa#oid xj&5\ |-63w` ?+ :?90 a)P>G_A-,o`V :< 4z_m!xv»4 7C 6%y Ka3 h"S > |wr  q g/y} }M?(E21.0~xjK<#$| "Vx^3h2; +0|@}y ^w~3a%l?;a0aÃc :b\|x6A%|^8cޅ_WUJ`_5 1x`fk` wa-쁷_]^ h: dA.ށ/QdLbX  mơ8m&BA->XI%ZBNXȇ) oh/<P8oBzȆ8  6wJ ?/ÿeçMŰ¯̃|_Cx>a4e \oWmt(@wc*ȁ{a] L2 cGp+ xނϡ叹' K4 mnG% 7B@{A<]O'`7f?E,(pϐ'lp]n`w3h ohK n{%> EN@ 4w`>gߑ[p-`5+ >Ya"CށhktnRXg-\،Nf f8 o(^56|xvLep~G"X4a$LbX /ÿn`3 A  X5O4(upރ*>B ?vմ'p~ @˚ŰO?9C>óp >iwŰ ~B?p0 niU, oG{hA lp~Byߐ 9 C/hϐ߅]Kx>vlXg'  ~_!o`< [rn<}vwðޅ&M`  ` ??C?/ C k?(0j[h' 0 ?Åwka:x^¯shW%\S! ` W4  f|x8 `$dC.Jo |8 `4̀"lWm |Ma"oP; fȅ^ \pyV n +a?Oh~yVo&@r;/hzyVA1,pނh7£3qXbp%^I( hLx 8΂oïU:eXb_ O x L% H(J)< øi{a΅+aӇ%f¾O5kxun0Va *gM:r~k0Mp 3xfKLep  5n°Y fx^y >(߅*8gX1p _xRn@p\?h7,V:Ip1|~ OBb> \ "f,X kX('kpyt:&B8rY C.+h L\Dـca?G X0o}7e7_0u1)l\?_#*}Xb6 ip6\ £t,p| p 0z2x7 Y ,| .+ZaԞ!p{ KtF}x ~ `R ep<au" !nx^%&"x B.+6x We) CQ|[!x^N8>%(|> 7+xނ1+a7X 8 >_o [I2 gyp | G-C|0ju %<Ä};΁p0j?>X!8΀K<#A=`%@p| h{'j8zt8 ?!#;'çBn[.-#Mp8v|n}$F0.C 0/`{y/! B*\ 7/ѫ%fnIp pK̃`Xp.\ ߆v%< 2 `wVÑ!|?L_</ÎKL' > _ax v\˻`wXCt,|.vx`A;tᐅ*_½gxL p1|~W`:  Fx^#` M>_](B}(p.|c% 0v`x? 7O.Ϯ>lR.aa08 oᯰ6 ΅{p ~0js`)D8 ·V= [8 p|~ oQxހqGP 8.$ S7n61'RGO";m"! z8 >8΁Kj!GXz8p p+ S ;y0+N+=6B΂K9<ocKXp d'+pFz f~v8 ·gp?^B۱&L<:\7< op  &x^)\a΁+ ??~8> 'G| ;Ax uA8W/܍` 2 n;>x ^x\ 7Kx߰S2 3aWXQP3p /عzT \7oY&Op<`LNw*OX 68~p&|~ 0~( \p\ 0_a Ùp  k [p <gH'x k, ~OAsmX#> ߁資%q~onG >xƟ;p`yKp9p%\wc ?8p aI#HYp=~ˆ/ΰzMpyf8lsER~w:,m`;|S?8cp)Wam$\ 0"Z 'y1}8?Khk! F;]:,1),8.ahca?8J0E-ÿB8H—F#J~a#lgp| ._aשD8΂v ބ #0r2Q0<;} ( @y4|~ g0J>(< ;] p)k0[?l,l [;_Mp"|n0s8yn?s ̹y^)f "Lu"l8'M …s+L>k!=~8.w}=u enG-} Y ` q0kiG]x:n#-8 !zX f Ӑ \Ox/<W7aҟ>?')xv3/}S<'8}xAϐFp:\`سԫp+vp5 $O_&i~m/PgW`\%>o0o/HWjp6\0PozyXbX )\Ó&zw!g*z=78B(ǰ .;Olo}xr A w?a/0a8 > L{,ޤ 0_;i2q!<-(5'_p\ íp< ;&`/X@78 ?$%:p8|jp&\ ^ammY8\BmB? ax"|ngaNmx87½Lڹ-6~/m`-tép.|G0rD[b>Nk ?x\ɣpp&&Ρ yhӖ ]> ["vۖp6\ Oqm]8 Ƿ%?|~;N p< cOõx fLlKzt'%2\`AP/$B^a;| YSIo$ |M' ]: _C7 z\ :3|j9fp|nYmC~OÈ٤ ~89m%p_;:- p' s%*xvߖXI!< %OB s3څ'9p_)+q3kp'<%V‡4%&(|~/‰evYҖ8>_p<o¼=I8.y P ĽCp\оw‘0÷LKR7@N;&vQ xv\֖XDˉkHÅ+h[A2\S8΅yp9^Upo})p> ނ%< ^w.[p7< ow% \aڻ+Hgvn{߃p-v~o[bo8.[-ZM*["-8 k}kx@} x^i%*|nMu-N/Y <kqup[]w-q( 7w,~rL:MPsFx^ Ƭp ¥pނ%Q)p!` kpЖ 70m p ] B  ߅`&08Wa摤lkqh?-R ocx%>?}ǒp<?HY#xv?#D8 FN{Slw3*֪3g_Zt=j8?^ԥbVrb8O-WM̙#J9W 92iF:aBHZ-'"qXbeb1_YiLY/_+?.g⼷xؗS\Qr;SJ^!w%? ޻ An(4Iׅ&kV 'WQFPғVr}6OS ٪ӉYRH2<4iRT(sS}dtXAv[9.MWJ. Us5cGĎRLqlfP1FJ ̬YJN3>[ ~(j;Jzj==yڸqoq`<GRIbRMUS G:;Mo_^=P쮔鰶Oɓ]lŊIb O?m;qbD1-zS-u K#K,XTB6݂:SgDr#nb#³ JSQ%=EuQ]KQLǾչdQh bYl9|>U"ImT!m.MK"j(RloZQwOP$C=2+b.5S_9 2ԭ}^l+lZC=[f[*3Ұ%ĴiN؟JBFZ{ Mف,EI7||:JIlJ81'ֲ)S|&rR+G2}٪;7Ug/(K)](%=45(zIyR)"פjM1OX_d1#ɼylE}\(&rjk:KNa#M)j ߱LJyU{3PnJWWnOG;:</:_ٞ$L÷d˽4D~[?Y$a8Sl(UYXOU*.Q]2ΗSKG[.[r5E,*Q 5eT r|O hS\ kT;.(J[D. )ϫ{[T|^=4?4\J&|\![.URTbR*&6'[ͥI\ov_mKH^S*Q2urZfrp694[KxDB^~UkxTWzg}jLdBtC9[*aErnfKQkT48i$.Su^PM'GkZo1Qgg lO rbUE$\ e D,&T9^x\tDbHQ )+3e mzxo/!r45^)ScGH.#;E/%.OZf7W}OVR[k󩾊\i,d[˔UJůKJ*kk)n?5mR J?}R)8V@ՔĪt_8&urm#}YO  3 -kkdE;+\I?ftò}PH5zjo(VrчUki:0c_zLarA$R7L:tD*'arОƾޯTZEcW 'M}4M R?!TC)"EDMTNE&kDuD$L4 ީS:9ڼ>Uޜ5eX' iumP|%o [}8sZd͛lfq_.orRX7~| 9SQ! <͝+*ՏˬIT\eDe ~KΐiƏ,֖kܸbJRn]!KK{3ZMb(~UM>ԎﶒG-gѮLe Mrl=jiX-"ZYR5D뮢ckQӦ[^_;Rcy~0.DW1yfyj.3D|Dv+=Xh#-T4?#&΁y<,^&Ufr9Mzr6ZRtv26Gҟngб:Ro)ry4̇Q"=*kBdZO5Wg#S'ަx̬_ {,BWD#kUDߪ76%WlF{6^ӟ+a "u`AB$G*9״0ڗYh)RWz Jh7ѓ?1VZ}`o.Q+Q$M$ֿ7kMRTM+TZ7UPƴG0/|Ca s&DNa7oU)R{Q:0ښ>WI+>K& IUW@yhWUa͙S'#鞳ċ4$pXyCF< %l#0`L74PYyyV*鵩\^'\S{OFOT}$ 4GKHCRml_gqcWDUݨվ,2d"bUY l6LF %k2fYQJ L̚eDv"1Rsۉ"<v 2ǏϤm^9l6;?7oHly*FtT*_ٮL$6 3AyT#3zO{QBUqO0>z yĂMMnj)s_~*V?W+eDQ}i%Ϙv%s% y#pɓ3ytp͈ΓᚑI(+g&MB3R3}~J932̻:QzV;)ly{53[ZW+$Y.94Wzsp)y羢ꘌOAWF&ӟMel{e%/#>6_M UvX‡m3xHIɓ\Yo=ZA#"; Tq rdzJ(O)j٩3e-1K@dWM^XA$"Q9AJF{fV-tp%+Kmg7moF̹nD[֬3unlǩSjE P3f*dh&;Ɨ\!WYSMz(Z=~|Ns#a*Qg *{Ҥ\%"gXvl"`aO߳?mSFTjIϠ-ȕJy6)RDv$u2!)`*=,$>P- e!ZJ=oK|xf07U/T4ZWHiNŠx EfF^7:N*IULfȧIǓ);:TbPv_`ՈؙAy" )9d>x!@F2!X-#$\a>~y% :<':Q&I3rneXTU&Ӥw0XN0d̚WLI݃jo/gӃ鼿)g3tOEz"E.vQBH?Hrydꬂ:a$"BijI6޴vKIƍѣ+4L#*3: Em_w,DOaw}KZoд?BMk Mk'#;)ŭ&^ =H^*ʕjj%ڕ) ;x=mDk7k_u݁XED r YzGym'.$vjh~x /*Ϛo}uekkI|ĉԌǍSB=P;޵HLi1|ҝf :33-ʛmQM2 zX.Ɇe 5jV4Ԭdv¸3vSv5ujœT+M ,T74jå̄ηzbHX{|33WADԺ\Ve4ܜ1Ukȁ m~y"XW(̬YM;"cE?ll}.C`T}v!T\zsAo#8&DyY%Km1/DG6oFwt]p ʼe %/?mչwTj%X%<[ f-CݎA0u!C&q6O fXgkɼ; y ҤO]D{rj ڛl-5?US=ro?L‘ȥN0` JuBNu#Ҳan#jԖT.6eV+HC+ԊJ^@עզNEZ U^; DަOG1''7~рIK5{Ƴ[NƏ;޾EV{ yy>>rջǭ %4clUWݜ[|j{Hxg4_!Qj5mY>uBTS~ F'MrۏuRe;vڹ3dfCvvtȭO}\fTs犎XuW1Hkw7j$$Q`\[una:5g7EwZaVIfK!YTƵt[ftQt۝z0|; $竫x]=@5 5bJ;Ɉ@) [r l_-UU&ZWmMmCK̝],#Ngיӗ͖zuٙt`b$kK `ݨLjj+"⦝<㾑IRwIܻ \& m&"N]5[uăXDj֭#CD.ڿ{H}K4sDW۲/_=CyJfȝCZmxDˇ|Q#>@!Sܖ{kP  ̅Iۨn=d*R}O(B]H*>#/lu5aS=q@ɣVt'QAWDе4"XV'X\A]p䖯LVy!C[ivZ'-tjS`FQkcn=eՈyMxPLmԚI8YjG MiرsXhGuhTlskJt? ^WOI'+w =SF^ YKs%/aX+"?WlV)YhWWGsn PR[B4 C;/nh^{6K]3ƾEvy}A#M|C}oCsSNa6rR?snҏy^hQڦKP=72N9]`BJ+qhYsۭZRHc!W9tt3[1c-c6wښӬ6b.&m ]rn6 p^ LAZ6Ipɧi^2!i]au_O/ %iT1fg<" n4j/8խ%krVRkM.zgTUolihS-Z#6;Q63Tt5Z/N\+6 C5PY?U27Y@MҮHыT!ʜKZsK4m3;mHѡ$ ͘˛]ZYVKm|c7a/-Tn~Ԩ ^akpa ;@leffաaPV Ϛ0ӌMyZVkT 9C͝IJQP1A6 JH0(OvHhPm"Hm"ǩcd.r"æJ(9t!6+UP̞%z|5sbl*~Ӗjnٙ3Wk'KIY5K@W&O)y\ߛ.3zޮ،?(_}*VlVkim(+.aيz1<+3ZEvԟ**EZÿrOgaw: 45}6zU|[yѬrMQ dgHJ;1o݆`eC1Ml +&Ţ7{0ӥKv#(fԚ񲱱\uReKƪMT+"XY_d*^C+/߇%|Vl ww56^Vgrՙ%+>]Qu}$|/37@DT[shD$C5쒏pV1b7vje`V$*[Lқժn3X|[gb-B<鋘L +Q ʐMOzS9N2Dk;e pZ7W[Bj UO47L;PA?S}VtUuj Q/E=孊SrӘUFt{n3ygz2j޺RˡR,bo&x6@zLB)ui.8W(ɯZ, ~6޳ |t{o5Ja\M˔[}jR5&JM#hcZDڻg&-^Wӽ5nk]~j8UT]bu]N6 ?&&X}j4۲,R}(49%8JkAha#uTg҃7EBarUXb6zZ U`iZ)ZM7}׭{}޻r$n2œVnwPz%ƜձDkB&zɖ/)AwImɟ>PYr䗷-*ur$NiwirZ"22ŠHn) ňJNQWKEavve \ޛ_Wg0WA*|GG0H?\ͣ>kna[ن_֊L͆qJa᧦N۽5~f1;vjje7xjʑ_oZ yiVزo1Twf.=v /FcvSd\a.YEOCtDڔ1gC&,i]U–vvҟz}ǎJ<;`=@p +[Cfbl[mjcrt/U=c=RŎ]3R WEhKg#b"=mZ!*Sb4vNpӏ@*WP#Rz( !uihY54dܸrA )ދm%ƈ޷ߞmN7tE]Q#/XT.4+#+WDDߺϊ(ő+N:vj~QM࠾,# 6<8=laX8{}sPkfq.;{}ag_4_^{2ogs%LQ5)v[zuw1ueTp~u833D8NyQBD\9{}KJ:ssKhmƔV&(kfD:+dr3ҙԍs-RkȽt+2\(Q#Ybn.M߰n ;ܣJ)+ VᲺ-z[qe6ԫ˛BzmNhVO/^eϧ Y4P1g+yC}0{ѱOPmqRy\Quhun]*팬widbN CHkõ DRiut ծYŕ,e(>sCvʷ&Ӯ\g \ѧ&ΗUB>sjV}ٓ7>z޾拒Œ#u֋7m;@/!;w߽y2j _ޠi3FЪ''r?ZqNNm\5i/?HF8j__b i}Uk4Ma`LZ,kmΦjAIZ(ZֵIw^/me.US]3m8ު*rV 5H6=63*b[kE5}Dyz:煆:]t0C˩TTzk<ٟJ%QUvt )x+₯[yiȪ$WΘR3ozGn].`:wv) >ib„蠂Er2sʸs~{!wEsڴ:yMIDec:D͟ k[~5QhHvmvC\krCDV04Mp@ç G75*UDPivT}ߨj9%lpWƬR29sb,Ղ͚XFM9E9z/Ui)골o)w߷FPX1g7s&VV|qc}omDz=y Q.}!η+roa-zX|e1wnz2k=,DE&%b^ƬY1]o؛M2;iq0Nu<2RW&zҠe*5bEybڸ0vwr]ia6htYnfu˜jnz𤴽UWrBUu̮MjVuOsTjPk/WsV! Ni]5Qlu@e`r8e^HGv㒻>PW )̉}8h?p yEIj˖|(*R&u@0:o^`f_M )TIҗgL FBbt,b~NXKޅ>_.hU&rcY?'L+dl(3d.c&v U{z&dm^wNruW_>^R>t$IhUAn:|mew&]crKK&^3;Fa˝Ir&'ْVV^B!֯:My'S!s=7HH6n|o{+;c[bh9 O"1O.cw6{_3]x=mx=L]5dK\ ;-:ddЃAuc]`OYO؇4a]stnMEU[Sw4YT -D%v.OrA,n6?Mg_i| LMͨ{ q`BGJJ&imܳu9k: XgNhS1Xjd&…a+ɹ#0y=^Fc0g=Kd_fμZL/ZUʓ)/ƍ1o2zo )6Acg,̬sԮZ]֥رnLHS~QNo% g;:Tv҅u{ }/T͚U1&fB!]u4,QS¢E8z"kN! Z|YJ߻TU?20no m+\8~Cm'F|Y*= \Ī5HqO=cVϜdU+ER-_aJ%,YWTKY!2S_Wk]*2d,eգ[bZ>I-`sNO?5nv)W͛LP1#fw W^-^gg2`z@]g[fm!J'Ȍhh\WyC+#/5 YR+T٫̜ĉ0EN0eʀZ$VBCGm}1k!ZUhtuU(4;0== |pYՏ[Rκ,WqQK˃ m6Hl>T'$bwo7_/@DknV@;V~;h6u`S7Zob8mz`!j8G»ZɷnA[ld?af6z(Zo!s^sxSwn[c7C͠I4^]/+ L= YYq}=ޙ4ĸq\ո欮jU#$Oԋ^RsWHf}[sԬc՟, ;s9֠lFa bst\)tٚ;^WNكJY 4W=$gM+66d24mr 4fV7_d2 5 LTFJE;=[`u4ҥ-e2#6xݒWX'!pS!L,&CC&^ɦF^"{ELM[in9iq뵺Wl! l̙\^ʧfesvd42Xҁ~0UW560kJv(b kc1E𪖩Z(&Ou>z}g".I؅C7w64ovD *Q>7Ne^2=S,d UzC!$\\0P[GgQ3+P.jv@WʗشWuZ;5 5QYn$tx㒙x{}`l8.1L8hQKIۦR_y >5cFQXuh+V5136r?S{B9\SLMIwGأ1u7쑛7/f+JJ^YIƸWh3g:"Q-IW{]F}eA(ry CJ(y[ZF$O7s#sk ,&N%`]Kj2%_8ndh{QD&)<%J)%[Rһzx#,fhز7g"QuP)7 )]8R 6s$3| $LsI鞍U+]겨v yZmIE%HjCqZgW}C{xȭYYn+SN({ߧDj-6+ar˳!`WH96a*'yRD{X"vmm6.mxM(mnfrw[{kZ%(Ufޟho[;kǂ6w=[By9>fE,nTKrߖ:k *2ɫm;:rA -/*uQC}Z"t!ji-62($TCY|͙7x%f.#zwCWTwMW&R':)ɢR'&j§+Ǐͷfi쮥 mpkG|͇9Zx5:g. 3uo˘(A~7V" ۱dIG3&ۗa΍] "&{5iRDcHc$NX7p'.t`b|9{vŋ9Jet]lȶTfPG<|C`aFO!moU:eלLM[i;PZ{t޼@=kk=Es6 KNύ|S#P <;nknFM*~t|Puͻ(>V՘Ե{:?)fQ tӪE2fK։k^ѱ5ۓ*mf,2OW\;;NJ9PSZ3ِV Գgq>#4 aM4^nX ]R^B .i`-LU i)R$6W'`z2RZ,gxyܹCNDl ,̥F|Lڵ4Wa%ѩI{{A=󑻂gԹ".:ju<VH7 բ\DtҦ Ǫ -~ycφQjmC֫Im}1 kǗ&[Y$̕Ki_3' x81."{?&3hx5zF8iȩ,X%Ճ9hscul8rȋ97Ir~YXC`7Bni:dPƺ>p9SGS0kaYr$xeDjO<<!8H%@hOO4 <5(&Q.NZ 拾bP:\[ӓۻN>  \z[[c-FZff%a=b]prfsv^qv\¹Na3}g="A`R.PDӥr:P~F1WFdv$ljgg-B_XW۞#UST} t9T72P)vBꤶ5S1IUR]JUJ"TqwhuF +g*jҬ4>PFÐ@.#!atz56 7 Ll\pib6Ȑ)}O]1$'FH rʯ -Fi0.HIGƺ,YwwmxKz c^Gu"1Wҥ:J@N =:hq#GGZU= nbbĠh+EJ]BuS7CRykik崷)6R,%f?Y&RKg+Lx9Eג U&*9u(lU譳RpH iDe,D0Z'%ZNDjj:5 QL+у=DGmwr$}O`N X U-XZo]߽l%qrnLV;,LhWEP*U"14d_z'Ӹ ۫5S eBEOpҤPѣsJP2sWC!T<LJErg\|qռ̒9ȑJ|0v[QGFJ,ɢIUSdZ*rۏU :E U14tOzF:ZnjyQ:;wf6M'3xAZY%TB=jMp:oHYkfyK<3iV::cPScS Bԝw_"PNRl~pS}:zLftΎ6KZө,՗/*ZXti8////^/7Ve2>P&CerZlҥqd+N,NiҒmڦ{ii ea𲻬$6CٙI_VtWԨf]\wQQ{ۙIY|!g{ H>>rf8XRc<̮kתR \y䳛hO@-hp坝z qljB"'z+\N*Ol8H ah&ޖV=!i{60Eɒ s 9>;_*ҕj߅l@rwfln('w @ !wl[yYi,A[=3ּ#e?@}`쉺~zؗt!F b{Dq-X9Ԇ``{/Og9:O7n qqGGݻקǼo:kG ){4_m"E_=-iAJ"8`9~y!N/y3s`2Ԑ߾--#ԃ! UJ\d{a%K,}.N:RN<ďzwʵU#](Lv4RxLN"x,Nž1V$-i/ .7CoJ$Q]Ӽ;T`9,q &gKDeÔђ}@nJXQ{4!QőB:̡jT!CvAt֗K_oLrnP[$0O&L0+pU6c8P,˳ A=xdڌ4VC/ ݓF䮱4A/ !1Df.ܟ:+8C eXI. b^8 БpIW^XP%}3{DRd.59KP!*ךP+z$شG׹En5}eT.…r [& rU' kn_XgѽK>S,<׹n8f1il+%x1{i%$G"?YL5٠J$9DX66ҕ0`ODc-_:fImкi,qݏngm,Ң҅.|sx-D_ ;|!{B?ّi5d^oBĬ7$1WC`o2pⓣ"YIdųm`i;-…h4ǃ`ՑlPCَ2Y4/WhA)ǤHNi2U1.Orl,Jf_- ^lAaö%KT%dsFu#[7oyobp Yѐ2#ClC4?ir]u??;)COZ͞Ax%Ą6(Af7r y-]j6e<@ՖKLBfi]E*wW9>e2*n8ɜ^PrGv!{sd߲ZuU(Nssa&譳2:¶ڨl밓q47"uÔEc(TxfbV1f)<xwoYHQ6"b֭Mszt=!uTwCT]d^Df n#П#V /w2Ctt:ٳl>DLvY !~Ņ&S',>x.V13bBLD%? Y-)skq&`nb ^2p56ҳ+Zb9f>d1EӋ7!i&΋qLɑu\zY w/\W*TG[lJ̣iI| ~}A[xȅ]ļ`lBA9h D=+ʙ '?L(}Ǎ> J"T{m<mȒXp!{>}~˶9TҺdN%ܣyw`bTB/Zd!^HXġVx+dZ"dɀ˖94Ez+}z͌n4<\ +n&8di9K=Qsm^Y&NKKJ xL#*[`E2=-H_6&\Lk_ӱ,ф_mYKDs`MM89ܠ{=kܚg=S(oo+…N -jXCy-_%#4:~\rkN_E$>4s~ot,l𜐛͒%#Bc1]?%j27ndmQm[*_~I~lϿQ] ]=@IW[ysia+?_0!)Γ=t]+XOֲDpVD,Pzk+?]JO<;MSVZ+lirDW9*J9D=/bjyu5JͳPŗbbl՞tD|%`+LbQ 8.=(L?x!\԰vX+rYN-Q2l &i2F̙ǖ-bWPb7y*8D4$(YN V*3X{>NBČƯMTN%̞= $<+_![x.l?rb|z0_r4?^=O𵻲WS*nY穅ڐgFļWsR/7't?[@tL8feDR= -Ө:tN`t? 9OZRMn㧗阠R"H-gortq3w o>pN9}sUC&GwM/7l"%̼x)ѻd+F~P'N?4:eKgƩJs-rpQu"SS:lᐝH :l!*tz:/:lZ9Y$"ۺM停,wͤy/b-7Of5x9hn&{: T+{g$SnyƍqݖY!Ә^* _V`rĄ&GA8L8F蠜* ̔͆?9U{ oafY&Js=&L%2[e\ƷٱPE^sG--^W kl.iZn/ :}B&݇AGܲ:GQoB_%yu2y62 Ld6>r$ Bܙ8eooT,i"wq ':ZwJMеdLC@iyύX2[~Ɖ6IsU@2uT]R|9ʓ$ʅ(g&׳>J<2Dxrh篑=\hF捒QQ2 rv]+`kd|NѪڿ=n-y:l\MMżaC-g5uQaڕB.f#2?1vϜihIFqL<{1mǎFgPzr,,E [{{|llH  zF !).xZ>!ɺzKofkծ] 1 aqD_@fC=T,1hZ@{{MMDWU^:f9tb,&GiM-[xGQq*<kÆ7ͤ*=ƭY_ceꞝmmitي]Fb,Qĩzߝ;i[Ρ8b kW$bU^FэRLo*'p*f?-tpkEPG&>̑)r+J & uIk׎ FVtv&n:YsppȫWH}CO 2>}Y*Cr1R хûT1R7ۭb?3{+ 9d/bΈN}m+%>;,9 #t!d}jYڣSӰ15kT!Z%ۣfÒtZ.y!/\;v0?ZRZE?ycb4gcf岕|p[BJV8'&-.֮M""aEh$`V"f/~}'N®1 vG;wܬѫt3 S6j|&[tűx1R8 FؠhAI' 1RKAhwۇgȂj#zR4rʗHpm6LH/zL[Rukmte(e(ӱLDS5L8, H gM5Y ;](}!ދyݵ8xɻd'a$UBJ>(0̖^vmp%5kd-SK8kvqc=A6(&VvV[ۮ5/znxR.[Rv3#6zi).ۋ A ]B#ęhYF&PB /?lN/^lچ9&ܰZRn\vץژekF~ybOnMxôQiQlo7KǶ#{&iEcb]k&uX;@j˘f0Ŕ2f_V.uq]6ڢ^Wt=}ZúeKx1Vvb&-lG:$=OfMP4#%+2JjiM5GcvmoOoroْl^?V*U^X0NW_] 8 o_ϦxX i4"iu< Sk׊ryEN_3׆ iTDj9 Oth^'a;P_2Q,lش)J Nq56[!_ɋyc&n2L-log&=* KgHig}qT f/G6TUPTuk>ƋG#q^RJ6=:<3`in]hՄmKde2WC9"ɕ*==e ү^6W4El'rnؐG\>6XDev^#fmilŠa&SQ.g( g"ʨݒͼsŗ4b͛uR xz Q_.i]{mS$\ɍ9$=VU-k1V0|աHF IK7GbI\V_ Rc~BCb_xy|+Ws|#/d!>hFů gի2-;\I{0'p@ƪ{^n(<G]comK}]agUD+IVn݊E5C;+nuu^b t1`{VɝdlfST^ƚ'isއ鲩;՞Rt-qms _w#,UoVǒdKtNSSl;3'ܸQclEӖDL~ͦ"vG?3Z0s{5 X |:iHE^+FTT/J9"$pwFxRg1HL5Ha`O7zLfF{̾K!mP3P 5+oL7iv2_uhQD; *R wb ͉,?Ȧ3r5)f3 3;h Tօ~/en2ጽ( 7_z-XgXuhT99C4%scy'qG0 @O"QlL6kmXL96jN&No¯E կol^Sc`'8 ~&4St 5I3ȘB7٬ҾoH|m=oQѩ=Fּ+'8J Y󵲮*xp\[ZpWd 9t`qR:e۳o$.\G`#υ̤A <'#@hځ K2y.tLd7wb@c=<| 1Qz3E1Ru#0YNxޢ1VS}J|FabaɳrgVR$,79 H;Z olv:Ms_~5W 3; #S')^ n1әJFWM7yoIYZݎ0Ӂ;ɕ1i^^9bd(W*VD .寙й[&N-\t S,-o1mΗAqҾ.͡_)2]hI(|')&Kb0.c•asm„ǴIfq155񔵽=v_<6)0,3c9cs]B*eWQV1|%+ 'ľ8V&[0K0VQ [/'KvIҲysឮ?|hL1+Y+~wVCG*gnl^ICѨ%@WO#BɸDyy׮TJRt4ƪJ2U!;.q@P/C6N]qFD.\9o k}h9^x';vr=`&bsԆh=l-%0Uu"&=-o_,^B Tc2{?3cEFmh~U0ޥ󗾮)R8G"TjBNGQ;$8YnR򹳲#D!PͦJL'VK?՘K9~j CW 1+!1Ƃ82BN&sY^嚹gO=\eVi!1õ25pEakꖫcf=VsVo%jkb,3JRx(I) ˚<`]eˡXЃ.zSn؛t4Y[ySհ~4VFȅC%q~~hD |J/|1T乏|a=5bHV,yV0HЮgPi.POcΝ bu(ܳ q>6޴)^A5HcDH9;9ߑ0ȯeނɋmh6ͮ:G{w#x gH+&v BlI* E+kp͂GD^*9VuI&4wl0 & @PFk49D'[l_SH9GM]Lni ͟ \yf27ԉbeQ:u$|yz$1ՄqaHK mb`5rnhߔ{.gGQ{L*O%0чmYK7 tBXNdժ@2ZķJ&ahr̬b6Kxe]'CMM\ml)&XBU 271xo13NZD b_ܹ3|7Tfy۰g-ضG{RѫkXXV(O6 s]=1"XnB( z7f\}i#1FdWʞXGGb= Z_ym!$]Oğ0\Ycۮ[ˠI,~:Bm|2F~〻*RֹZuܹx1vk=(ayC)!COt$t'&5w)ivUZΟC ~vcgG*u3D䃻V?;@̨Z{})ijX^qO^Eou|pɕ=gLbi^g(;|ajuX 2OTjr k.;+c9Dkk9Ѡ rx獪%SհW{Ox޽ncAxL^n(b_G"A/Dzy/Fi!+ރ'DCȗ[`l6Pmy_Q85]UD=_1VxIJz0Lb>_~vJO,^Ui 讹&,% ׂ+F#2h F?h̵$o7"ymasW~?C0/5 O9o!\nVrAe]K۴x$@CHwV<:سEVDk.Wd~@fp+"I&D=`ebLb3ZTG/BUƸx8QGE!b5[?)+OS u*|T@!$Ӫ8^`F&PT;_rVKmL 3810>~©O -}mfTd6O;k1a.J.k֗4NRLFj#͑L֕mrtv]wӏ2cWZ.X1{ƬJ%<g$|IK6BIAxN5Y_mX*9[V/#,he(U(WMO|l fo5B2 {-7Gh,3SD=8M._"(IgtgrAjt}9CQo4x\ LuMlcSi Krn ]?CX|ڜG%FD|fMՙcرRINXSFeN"x$0oDD_5UL䕧=42mb<3.G,(QI?'JiLfs3>=K/+'dG2{$][-ݛެǜ& Vz?N[[ /-u`4OɅe~}4H5x'Pqo^p~8π]p6o(gEHd&T COy)^fc|^λyfʅ}z8JJ,B~^8.эh6|-qnwp.=Fy0Z cCF&鞋_gK2b/Ls& ~u~c6+3fP*2oZu>XsSVgް!h\ :8ĪrjV78͛ìX/'۽[g2fgu왓;jp3M,-/]Rt7nz=l$m&6"Sif?I_LL}g듳=g)s.sIy 9s!hx@}fc>67~'M,F0I|4 _@fMⱏbu#K:o|r/sgҡ=aȟlVYf#2àIA8_YlY[圚J㱅CW n[5S-gĦ8E〳ǸMEhap fjSxīѯ#. .7P\⤏ iOewebɞΉ:Ze}!:rt:{`F+X_+>9J"A1zoaim3Dj}lیx4Ov m^ֲMBd'|׻.C*4h-=!d%Bߛ[:m\yeT.[πM⬧8kO&F+5Okgƍq6]‡6I!FslӋOdn%2mLͤϮjNU}57KCy_+4|+Co]*Ѝ@ۚH guk+$9hYo' *r"/&㊯v#0&f!7[[8NK^RI(QIS4~s; 1`-6.O7a*ݫf4;A5d.<= /Ȭ[^}탔^4LXhfrtxpW#/m(dңzs#>w|eˎ&ѭtzyX۟aDɵ-[ KzzoOe?lRf9G]DgᗹQ{/{&s{fM|`Qr!O ^>{4cKD7T˴̝;u w"_!2vx^C5ObVώJz9W3O|;jpS?6TS)|sU#n*gtc@=l.=۶b/VtUgڪwtAG0lU岣VB|irѭ.bhUw\mY@lٔuQu.e1}7x9bGA`.HsEN:n7Rhj?O@x;`.\꒲3ԙAxܭD9ףiMt?m^6Henǘۧk+$w v(~[;3^$bKrsN)ޘ`19s#D6y{ Yd6uB53e3'BwNM;'ݖ/ !힡\TgG4}Ϟt9+PXM.]G¶3;и]N>3Jwj/8G#oX-L[0C儋/&gRgh OؗaK*tfuq%kpΰM3#H3DA~I~f):*f;D%2%|.RAݵԽc`*|T^If³fS~$wqVSly;:XpÜeB_("K:^u0$>p(ÕlxlUke J޴6 Z:u$v5O/S쇢VZFTolk3rbs>Hc|) FR"ÀO OdkPMN9Nelg,c]H+'{0]6F^.#+kS AGÏ$k u1N-&0ejF y]ғibqtZt.?]%<;<6sſHI@: _Oۮ_'熌if-;*M;?vnP,d 9L}uadcdF(P9ɒ?UPI+5i:iB6B6ɓVݗS19nc=mE;'.KމrB|r_=CKmN"V>e;Fzab< :,Iדְq;'Lf:9|9nw3#|Aߔ֐N+MQ*iNeSq@i2e99i-<sYVI+49!E#t

  • )u*4>) kDm7|P2aʝȟNzX;wbwd(]I#b,A_)i[Ǐ/YyZ"f )K9Xx8'ҳd f\{8 y/!KCZTL;楄fIkR 9ߧPġC<}Z-GFeK 儼l bխV=ݵ+28Ss"ao azaC2l9dn+sţ5`" X/"nmЍSx_L%=Cu=ܒŲX0v^!vkynr-)zˍr.7VyclZ4ƿtרrvƛI=+XTbE܋=0'9q9qa,>mǼ20S\OEN9 ّ׹xO)" e:$Iܖfmܑ&ioeÓ?oc8Xﳚ.ֽ[}obyN&<\,rW^zy>v0xt_8odsW=z=IjRRnu'?F2V=_3Q!.6|BӎD+ reQlzHPc0=e 0Xō >rc,JA~+IpL滱6iSb fqv&\J+<0)G8m9&OJbԵ =0\-xpMsWy[ wbQ Mi>acT}lnjX3Z؇>l]iI͉FMiCQq۝ԲU$bM ?X` Jӂ"5@_3mיzKJ01[7R ,i?xr ՌԲ}yda$X;zvE6OLE'j5' CAT`wWJcc4VRB+VwNQ`!µ_t ܰXC\SZ9;pc0L&KJT¤6TԄbN0mP]+nvlc1t[8&]2W3RyyqK6XrW޸iR=+2Vb^Ors'=ןD9$Wumtv΁.\{;h su~/'*{ />.'qoB:1zy!&)a7 (z<zѳZѥAx1-xc\nvzT**ZKڊxo%_ %™b@x.rpB?&n{UD!DkiTALh ,Y*)Lf޼a^O o]_p[vC0$0L3,G @;t@Pƀq`i`̃<t]@71`ho| =OWQnBqK8-4.ӸD܂ƥ[i\&n q%qK8+-4ӸJNc%p׈[i\+n MN:qK8-4nӸQN&qK8-4J9e$F)ӸENc%F)nj5n5n7n7777J=Ɉԓnqq̕⦿ԧ J|}+Q!''nJ7sofoq_+o怸oS7sP7sH7sX7so:qq▿w[fn(nyo&q_[TwO)C76ـx^zy{7w~Iƫѓ'1ODdeexmKLz:o{hMU5~qքCQੌxhj\W&>ߓs˴У8G< << omH!ׁV,;S$2- |'gׁ+  E5k*0< <L8%Q m tCs˴r(OMX7U`xxhF9^fexxxږ#^@70 <<L/-0<L/-+2 0<< KVf2{@(0 4BZ.>"0 <4"?{*"вN40 ,Yx'>Q)`xh^x]}E`xxhjC<{*0< <LPxhZ9F^ O/G< << omh*0< <Lv=@ xxx6# ׀=[8,0Cǁ)%uu+p &g׀m(3$0O/p^w.>"0 <4D~73k@.|8 cc ,d7 GiUy<< KpW潠O>x xx\0@0 LW#@0 <4G>7U`xA.>`xxx6b;>pJ vǁ)%u!A`xxq.+C& 0 tC:z- '瀗i:8%a Y`xhàxǁiC 0):PI|#< << omwn`xx^^ZoBS 0< u8 cc ,= xxx ^|.>"0 <4C]n8$2mG>GLM'A`xxx hiN40 ,iNO/wGiU$ tGIyVs@=H'pJ ^3 SK@)3p &g׀ې7I`^f%# xxhi8$2@E#@Pf7!-@70 <omwtC:zNC "Ђ UI`^f%w! xxxx nZS ,0݋080a!A`xxx h11i`XA8O@}@ppx^>n&g׀/A 8O@s#$ڏNC "2x'A` x xx " xxx ^st4?s®O9d nh]y3樕N*aܪޣޫN) ֭ާThh+֣ݥN=ܽ  >!% W)BWh mPh$څvVRO5 ~E"7ȍ(fQڇZYUhB fzAV(MžoaMQFc ӷClC漒h]B.)a~DR)r_'lC2U5@kW(JU A v}M͎_RuB &qW(Jzz7obߍ)m{+oPhߘ@;*oRh[ܷ͊(VEF_?{$a7ʞ4}ɽmJ]Iw$Li}dw&lКBm,5?],X]J|Sh߭оG}BP} 0@=wy4 `Bض>~H=~X??=0Λ:Os7)i "cJݟH64'ԙNx%2F}RO*R)O+%V=s+TZC%A˧_L.i~]~F5 ڑZ(x<.kgyܺcMuJޭWhhvQۤ6+- ]mMgCf[ _0a6n_mBۥv+iأЮTܫ)a^]x gu]ېٯ|:PThvqHiZvB;ЮWhPh7(;M ] K)А9qߵ6u2dn [.Cݗ!sR[{{)v[mJh+;ZB{B3f 4{֣Է vB{BBBO}H$vz>UR6|/ȝQrVRWhYs_ʹ;@3ߞ+{4 +%_ \QڇB*a*rhv̺ o>E%nRԐH\CK0Ph_+rUW(a~eOJ{PɗVkRACk6B:1 a/%_1vTh$ <q~›;~9a:`>DJoNmOߢ[|}$֐6Eە<Rߩ|Jߥ{o~R߫M(>J q  퇔|}BV~DB{RОQzud$Oou a}_T4~IrJ|ߩ(=@k_UהS3J7>y{fCQ7w4^j2Ƚ|gڋJ\P)?RXß(?Uh|oFsѨ:ɒ>y:z_*qxY}^)RJ(e7VUVɧSj]h/ѱNoq?OAThJOJ? 4{~/yАyMɟUhߕRC*rP7Q'cyԐiHK87&l\|@]Кx.T)i_Ж(T˲mS˕-6Oo#J+6??Wk'us:諔nUZɗ5Z-}k'{H?,25Bƒ7}]J}y a mFNWp:|Oą4oo7GV}oSB>jsb\e^W?˻6e7;м,E 4;ؚ@c6%Jܡv*aRhvB۫)J+kZB;:AvHI~!s2~]Ў(߻^; JۼQ{BIKu)q9Shډ6ݐY)[ڻ2::7iܪ^vJm ֭ާThZw)rw+=J?"~E!A~ާCʼKޔ9ɔ=1~-|_iB{+*)ewFUnH+r+rڰB+(eVTh%%+uYQWUuBbWsAIE%>#ܗ*ڗ)/WQEnL}EE|"U A k*)y1ERϾAigߘ@ux+f{ߢ}B{D˷)r߮оCGThW ߥ=w+Q߫oB|B~ qMR?{~H R?~T=W?M* '0JgO)r?|g0V{ZW>=ڧ 2zg;?*I7Gqo72oenwNdJH挷>?jL)%%m~E=|Wگ)a=}F~S{^Io)VEnZ]=E%.)}ПSBCG K OO|3e>?\B)ÿTh/+_)kE{S^U ?*0I?+Qh)Uo ߕ0_WB}îƪRd?2/ o(oe%_Pd=%/]Cc;\%l&61KJW(fP-Rhh2Kh,Sh˕(eBL-xJKCUVhkZ֦) mBۨ&En[0V{ mB۩v)q٭(a^@ m6J-J\'l_y%NvPi Zv#B{+CݠnTM } J]?cǕ:tBݬnQhVh'ڭJٿG*rm vvu+0Tf/w)=JݫȽ |@&>ECJe\UZV ?vTrTh9nQBRhy%+s m86%VPhEVRhVhe% %Ϫ m46o^KvBmn,#y=lGNlWkOuHxڗ1:JS&3)HK#<7olN鳖1}A??}1TIq~|.oxm<Ȉ]+?jfd}j5=~N7efekJ2Mk4j\mKsmxkNg֛S_wR/nUiU=.οr|7۷u\KsG盿n 4h>8LSL&c7ED;`ނ0 ])`fyat/ 'p%=P%$}4i"]wso>;\N{F{'n0L0hޔ[o:.y_(c80L[ 0Ks5LLi]ޝ>G?L3M@ ;c80LS40Rewvy 0[0 4e;Au 0l޻&)`fi0Û-@t}@ Ɓ ``6iAh:.J0L0 Ajځ 0$0L3,PZyn(c80LS40ځ 0$0L3,YMv>0 L 0K_3t]@71`&)`f6ځ 0$0L3,u+2it]@71`&)`fin(c80LS40 mv>0 L 0 dZ!@ %` &I` fY @;t@Pƀq`i`2k @ %` &I` fY @;t@Pƀq`i`2mځ 0$0L3,Yyn(c80LS40ځ 0$0L3,yn(c80LS40ځ 0$0L3,yn(c80LS40n@;t@Pƀq`i`2[ @ %` &I` f-f @t}@ Ɓ ``&[3``;t@Pƀq`=/3{,]f|~}L_iTgU{8 qjq׈fqoC~N'1q*7M}aIff!F+qq76qoq?"nq'o7+hXwqK Bnq=. oBĽK_?ԏ-1rB'%]"b)Bqo"X>Hܷ'wܓԯ;OJy)S>-#.ql~hʗy:>N%Iܟ3 }ݿ(cǎ{*Ҟ)O#9p_G_3BZ#mψ{üivF$~?O-Hğr=-[w#ӟ4_"l sfE:?tԧ?cq#~IqD۟{?{E~F"⮊_{=$G*" o$~? }GQu _H-4",M@&E"QDTi&v `kX`E]5 ^doP9Owfv̙bƿ_Ql6FS[O~4RSg3_L_l_|F|~7ۋf{.l?ʥ_>#_Jja{j(5*~s%7UN-*v\_ezjE_ԢC-%6:l\7_=3w2n`3 7J-g ~7f ڇSuoao+|[快6.,3>w0ww8B=8~'|/l濋y]u1GjsOދX>?K>tō?g>(w»|7i7wazpgx< >;Haf4=`O`p0|"G0Mj֟-f֏)xYߎ`zh3#cL <C~o1fO d3S诩ש|=fz>=骞H3tG 4w989<%ϵX1_f23< ?7 3-F&|nɸ/YYYq_]=7+`~l.cz3Ouq_IYW]>$-v3q_G6o`|A||7%'g} y׸o=sZܷK}ӗ$rpțq߉?wf|u/۷mon6<Ͽ_4"{t~$ECq?26j3O81? {O &$~So-7{k?۷I^_\~qJl_}//͛x8$~*Ǚ|_q&~oxsF<.3>FOMLϱ?~%_c7SYa_O4x&ݷ/vjw]?qO ?3\ 7nUߍcSkVLJoSܿWƽU Z)]|MT(>2\^^#Jx]wN}׸3}s o:>&Z랋6⮃;+\^?է~T(_;W( +Ffy76kb. )>7'0>7'ߖ ?{nS+>1n ;x="gNx1.xO wY>^N0"q?|1KpWM<0rP $oo`hѢ$\W\>au'wfa~:N?_G?`H|"+~8G_F1h׏dc~8%?ω'WLHy"Mb <7~`=^u4ތb=4 t\gx&>řXjv'1\yw{>6Y?~>t~rKox_w7n\?^:}r2K/ç1׉Ө9Og=YgϙB|-J.Ϧ\Kz\ݞKK×%?^t?3}~|aNjy^t|/1ˊ2z^njۑ.i`]wwzi:ROy3BǜYlu:O.[\Rrg._yULlǚ 籼{aQuacL+e0Ou:ozof^zIӜn>_mϖ ƟÚ4k4t4ܡLAs5x;'aefrY3,Y%ܒ Ln{knEXsI.7 Wck.Ǎͭ k*h}Xs!4As47Bs4Bs`5XkrܼK[>o =7Kp]_ce\g&%鹾.XEo='s==z.G+빜Xϵ쯹زbOz,F߯;y\c>4cooc-ګ\ߖޱ*m{oC[Ҡ%(A JPP}.DqW4^ױ:6* c7Uul\Uxwwoo]^8pvնU6a)`FB}vo/eކז7)OWYV%O@PcHkykpS{O ={*T/TDDDKD$1,l\<|PKi/HD%%2$2%bY9yV^",JKdHdJ$$%r$r%$% $BDX""Hh8tiS+F&M_s {0{!3w2#+9Q?W]'5f|%rŊǫZ?iJ 5=k +\> 7o}AM,<3M+Ư%f}~ü7q\foo4~[]=w-~W{j3~_z?T|dc53S33<>,/Ҭ/L~?61j>ߩ;'~T*\WMk[aCa]9 W~T,:?jO5ۊj>_ pe3*joU5jc8Ĺ:|vbx-5Oi_[}mu,fyS|;%~ݺg}Y2 72,&f.j֧*մon0of{_k] 'Ƹq;5w3oo_Ƒ+]%{j>ffyf{9X;!y3`0S@H7A p!fG?=4af:xz˸(\?Cs#M1ƚa8*>Hx:# yl$lS6M3t>3ԟi1f{;%Uf1}kwi|3?Ǚfz'''O'NԏK ?f=wg~?%}mu!nXl{c߹XO-5߷5ˬo _f"fzLoJ3KMr~lR3ԿVL:z]pI7 _74 gǷg߭fzҥK|xVqaߏw}Yw=x~|2~|~ToL fZmƹfkty0 ?fOY~OߔRil1Y~Lo>^fxjL|}+4E]&ڿe_1U} |~47n-~n4{۴l/5o=>~`=Lc3ŧf?y?__o|}e_I_L[}μM`ɬ?jo[W3JE?Km7zY|{[RMQ ~E3JjO*U*հT,~M5W-345Y_3jY; w676﷉.fy7Ulf6nnKK5VfM]ic淭݌ۛ`nwd}Wqw2;w)>/>q]iw7,jzY2۬?}׌5o3f ~cg_~g6Çٞ5S:fپ4>?܌oYG7l43cu8f7L(~7'O4?dbhufgzX3`ifc\~y?ǚ|}:N6Mqdɦ)C>ռN70?ӼL-0/2V.6,s5[j/SJ8K_}f}LoыDZaگT/OGb2feWWƬ_ך:3zuo4o2ӿ-j'fwjf}ˬwlO37ۿUf0l?WV>|DU1ۇ>n'~zҴʬOV]7gpyϙcC~ %O]%dY_^1f4 fUOxi~c]3|= gv}hlT=A ʶJ̬CY:p5ߥ_^˴?Qa~l6kMH# Tw2&gs~_㝛po6oO|l2|e#(A ʿ_$pq÷|sx[{sv((} ֫%(A C^[~q9eۻolq;흛%(A 9?*qNN4?,؎{y?i9t񟚟%(A JP|m[gڎ^P#%Xg%(>@=o J|%XA JP%~}l[:S[yoR5 ߂%(eT7xo+}~nĸ|>Kyq] -|N}o1Rg1wܾrֵ0v:/Ϡ^{9fK%(%"~ynϋk.H8 m3Ϭ|SR|S7R|3e|ZhbGv.R%/niԦimJŵ+i~+~vYmMTu.HYVe{>;v=,)85OYRgՋR OW\1uѿ7gvGoqB, s]+![wKZm{ɸ5bo\ ~̣#<"HȐȔIdIdKHJIKx|A KD$1,lXDn% DD"*.!)ȒȖȑȕȓȗ(n#}DX""HȐȔIdIdKHJIKx&HD%%2$2%bY9y3኉E%%2$2+&m%-#+'/Q Ow=/{fd=C{,Yy3EjzϖXiaHąT1,l\<|o"%DDDDL"K"J☽=_»>$swo&/$*.!IdIdKHJIx*xj2DD"*.!)ȒȖȑȕȓȗ(4DD"*.!)ȒȖȑȕȓȗ(ՐaDT"]"C"S"&%-#+'/Q ߿iaDT"]"C"S"&%-#+'/Q %%DDDDL"K"["G"W"O"_Vbc&HD%%2$2%bY9yކKD$,l\<|OKD$uJٖLDDDDDDDD/aDT"]"C"S"&%-#+'/Q '%DDDDL"K"["G"W"O"_@"T_K%"Qt LDDDDDDDDh'i/HD%%2$2%bY9yiaDT"]"C"S"&%-#+'/Q]KD$1,l\<|PCi/HD%%2$2%bY9yF^",JKdHdJ$$%r$r%$% $BDX""HȐȔIdIdKHJIKHx iaDT"]"C"S"&%-#+'/Q%C"%DDDDL"K"["G"W"O"_@"TK%"Qt LDDDDDDDDKD$1,l\f}oSv- v?g;wĿ=o8+Jx+ơı攫0ǞSn8wbz3W92W]i_w:5]&4ܝ=p|/kq}| } }o{31x7Q a7nx nVx_m*?n!:awīx0#x~g(~W<w=q.5~ ď^ {q'i(><? f>P2|? Csxy< dp:>Gx8Gx >#q> Ç(<'x">Ocd<Oh<OGix<'x"'cd3x*~ o&q&gx6c\<cx>>O d|">O'>Oŧ>ħx>/gEx>//_+l*^~ ^sx)^^p>/ "|!^/|1^_gV7_WJ|_/r|_l|- _7kZ|~w3|ߎ70-) p︨Կh'i]Կߍ72{p ߅W ?j ?q.~j8~?O\^Əq ~?:4^3,:^_W U_/K 2~¯P#~_ }oc?GOϴ=\/{K>ބ?> o;c?x3 ;oJr;>q uϸWƿ*7\oފw9;q9NcOqW3=4\帻3<=p* |?›x3~W`a\ ƕ# ~WŹWxk^q\?k'q-NOx-u~}] _w3 ~ 7/& ~7ůfuoMo_n~]񻸀{n_}E?t}܆şvs_xoWx\#k ;oqxO#=ϸ'¿o7ނq_áDqJqy7Np*+A"Wx?\U\ 㡸>p-| N6>x8>7#0Q1>7.HX9[pK<pk<'6x2nv&OO;_W_|toq3޺uw"ԅөg'{x/<sq<~x>p|<y-xނ}V7Cpy?NCq*>WpE| qe|Up\ >#q-|NÇxuh\1x'<7xg<7GFx B|"^Ogb| ^O>2|6|΢|^\r>_|"WK.i`@A JPo-62()i۱u*(ϋsl[Ϳ;bom{7 ng YP.۳?=-̣Xڮ}ҳ-%(A JP%.>l]ue_Wsc_Iu J^eo/%YB_.q0}qsg<_u1-izmGdvXq+':R|0,Ng:n*EC>{ycγgΎ#`+6sy۱wm7ϫ5(e[Wbq'Zh{-=~[az̶O{2f9y;$Ob/\=&E9/;{PNeiC6vKYM,R-*Mnz?[V nz?;)zn7z޿~/ZD`?уX7 =~Cozq\Y~?aX<>OaX}zg9Y7q~o^zzޟc>zϰ/szMXz=z7Xa{^_ny>XgC^?zXg*׳z:M)~=X_*ׯWzz%ׯWzyׇWz}x5Wzw ozv-oa~6u^]^];awz=uCS7z=ucS7z=.XnzfXc9[`%[a5wzs?zq;Xݱ^{#X?z.XznXݱ^?=^ {a>7#`>/#a>2X^9^#z}~X!XC^y#a>@Gc> GX<#^y(#Gb>0GQX<^y$#`>r,#3^9Gaq<'`q"'aq2`hNz}4Nz==6 mlNP`%(A JP2xzsl"}ݍMK-}y } @=y 3ן_{nbqPj}AE}b|],ɨµ-s _zT+fs'pJ=mϥ,v>rGgvY!,>sPmz4d2ky sÚr,kIX@Nƚr§y+Úr<<>CS3恜=obmkz /Nxwy'|wK^pwy$|y!|y\ Dϫz^*R=/ÚrWy |%y cY5y bykX@VcykȣX@ru?5qy O?<恬Śn_} ^pWUݞ@nxnt{7;n𻺽x~>#<S?LJ/K< oGx4  n7=E𩚇cO<,|a34 yX, 4 /<,Hٚk^yXj^yXxa,i>_/<,|a嚇/ƻKp{w+R_wW8wWj _:_{p/|# ߄{q| om8oxo;@|{X8Ú9kyc5yðq53kAX8ƚ9k!X8G`=Wr(<ΑX8Úy8 S/y^69y/y5ayq>X8sqy+<'q>z Śy+qPy=_N8O;~I;~E;W<~M ~C7 ޠe[z^o*m=*]=q)z5Cyak'X4?Ś<ϱi~5OKyinƚ<y_ckX4Ú=<i5O'y?ckX4ÚkX4b5ayU>5QyX*`ͫ| k^X*W$ּʧU>5r-ּgU>59yUǚW<ּUaͫ|k^KX*_ƚW ּWU5uyo`ͫ|k^yoaͫ܈5my`ͫ|k^e>ּU5ybͫk^X*?W)ּϰU~5 y_bͫ܄5rsUys YP.A^ePW> ̱=FI^F~4˟p1 JPʪhnu&Nj˅d rwrf/\f/Ys@qP_)~Y'?춧j7jXÚ7?j+p 3_q [p;z˙\;N;TWpEWMpe ⪸ø:nk&nkV8 ƵnⶸnNX#6zqg? b=רR+=/Ѥ&(ÑaafiXizJO5弦%(A JPQ}i d_w:n%._>{dwKŐ^$NqwXX}>|rUuMLbdw:ΤIZ۝%(A JP(sի5K$#uqzOqp=Cy={~ 3)gNρ=A=}>{>{}^m= !xB}}>>>{vU=4%9߽Gq{߽w_K_-#+'/Q IKD$1,l\<|Q}i/HD%%2$2%bY9yDX""HȐȔIdIdKHJIKHH{DD"*.!)ȒȖȑȕȓȗ(,%DDDDL"K"["G"W"O"_@"PK%"Qt LDDDDDDDDKD$1,l\<|Pci/HD%%2$2%bY9y&^",JKdHdJ$$%r$r%$% $BH{DD"*.!)ȒȖȑȕȓȗ(5aDT"]"C"S"&%-#+'/Q j&%DDDDL"K"["G"W"O"_Y?M",JKdHdJ$$%r$r%$% ^",JKdHdJ$$%r$r%$% $B-DX""HȐȔIdIdKHJIKHZJ{DD"*.!)ȒȖȑȕȓȗ(aDT"]"C"S"&%-#+'/Q j-%DDDDL"K"["G"W"O"_@"KD$1,l\<|Pi/HD%%2$2%bY9y^",JKdHdJ$$%r$r%$% $BDX""HȐȔIdIdKHJIKHvaDT"]"C"S"&%-#+'/Q j/%DDDDL"K"["G"W"O"_@"AK%"Qt LDDDDDDDDhwi/HD%%2$2%bY9y^",JKdHdJ$$%r$r%:zmc޷`ˌ3> /2^n|%+W_j|W_im|_k|7h|Ʒj|wi|k|ƫ0~!㇍W?bqnj7~I㧌6^k3^o y/d+Ưfoo0~xqz~ ]|7C㏌?6Sό?7KMƛ2.0o32MjfwơjE]θqqqƕ+W1j\͸q Ƶӌk1k\ϸN w6nhȸq]7377naҸqk]5ngq{ƻw48bɸq݌4nøq/㽌{1k8jxoc~ƃo<ad|pCGj<0ÍGat34>xBEg/6^b|Kgg|_dbKW42ˍ08*㫍1:o0&㛍o16ۍ01.㻍1>5Ufƫ1~8xcƏ?aSO5~Y7~<_2~W_3~ 7/ f[6~ǮolƟnƛ7e\`7g\_00'㟍17-+fVjxC.g\88ոqEJƕW5f\ݸqMZiƵ5g\x';74ndظ.M0niʸm3͸qݍ;a1dٸqWn{w7aӸ^ƽ5g5oƃ1x?C7j|0Ӎ2>x!#5i|ƣ0m|㌏2o 32^`xƋc|ReYo|/7+/5r+46jk5zo4f[o5v;s4n{5~U?hƫ1~8xcƏ?aSO5~Y7~<_2~W_3~.Os| 3M oo4~w3~?2O?3 /7o6ʸko5{4g_5x[C5qyT 𔢮dW6b\ոqu5k6c\׸q}㝌lиqc&ƻ75nf6nn¸q+ƻ1nkx7']ݍ;a1d߬ϝ.]iݸqO^{6c׸qԾ㽍4d6bPhn|Í1a|HÌ7e|h#50g|x 'O6b|TiӍgtݳPwͶKaҌŻyXɔLC$mP™x9eG~C{}2.O1>g1iƧ㵴?ü3e"Sl ^lX/mzy6gﵣ~fpW޿}mMb{{_9Jl?c#[6Kc6MincvN⽥\8N:_2|Wp6>_/W 5"| ^Wڝ?W ~?:̵)j?/Gqf=Ly/q ~įi^ Y~ox=~?/|/K2?¯k:s-Rg _ Kބ7m~w8wnx?? ?O`Ϻ?ocǟ3J}/py%Np*ތ9 WW*[\qu5O_pm+u\x'znqyF֔Ƙ\֔&8 :"WM_7UpWq5W-q |ӫoĵp+ָ6mp]0) owp;w Ƹ&w/3n.x7p3?~0n­po⾸ (n9g wǃpG#x? Ɲ⡸>@ qo|GPL.aH܏(>ǣ<xc8C?oxCx?< Óx NGT|0<3<g,|8G90yx4>18<3 x>O:)xOq O§$,J-q|o?qz\ds]wyXo.0a~r=y|O0ߋ+RPh;gJ JPXϵ,^3\qR9PŞ>:ýܮh1{y>SLgx*>+%CoK>Pf|{ӞRJ3?=NFӹBiUL'#_)E ?;M7⿡%fav %~3yy١DV;^3Q{b{P_7zCz7z;1GbEzQ*^_^_.PހJ%qeUI׳Uy*S**y99}?w=]~PC˻_?s구9ZUNSyu~;SϻJI0 a~ZޔpSorM~LwBM~ԛXӿ;yyZKꇩe?IuCgMziS4~X[z;i%ô2&uո?4s5+z+C-^PөW?pըG9-2˰O%lzzaSoz}~ԛQ߿9zs˰nãN#NmNíN[-N[CSoUaQe%R#~ԫȿ9*6T^j#~Hq4No.#J䟇3r~Hun:MiʅSn;k;Ӝ7-NNۛONo:mR*;8Sn9ӯL3jMnK8/v/oRvŸX_{=s۠Yiԛٴ1ތNM?zncY>없?4oct NƩ&?9cmxeuVN-SQK~ԫѲk^͖PݩW?p5lYr?TvpB|ڿNveSzZԛ޺SoFzZINcZGM.~XonzmҶzW}z}z{?/vۥ)e[%v=S뽰?vc;e{~xޙw?utaer;? w 8(w8tNaSoXaJýuOG~XԻ?Ի?Ի?Ի?\Ի?<_[R?)~Iצ?8WwJֻ?|?|8:>N#%ñe$k.Тsި?ጯC~h쌯q7~;3]3Jiʮ.tnܩ~ةͿu[B?,u--qͿ.qꝷ~Q{rrNGCvOg?<ک?<{?,葬GsD?x㈅J<מa?L_xN??W[vڿx⽒l歜ȳ n>ˢG8+y._?i^?,y}Wݿwr~שke~?#N__*I^Wq^:֗NNN}חt3{/W9N{uIw|}Ҿ^_gNOo_&wuuo8D[;;o0 }~>+>v}\B?|~ЩaԿ69>nc as>uEN~S~˩~9sPr?, g4ȿzyNBA`П?~}3ŃJޟ#*&n7}Nu^O,ld?q3L}'lョNu^O,q3K_2jgvjg"ÙXgc{KR˦_~9}Il_a/8$پg?w`@g:?ЙCחNNNCחșhc'NO[CѡN~Cz}o; s ο|@o;ۙnz}f]?,uǹ<ޒa@g?{?,rwV pSo0~X[8NJie't~htp^ÃAz>ؿ8r?⼏W'g|?Tr?5a|=ܿlo|^͙n%.vu]z]^r?]p3_KzNGCS/k?,s-KzKGJ#]*~x{dr6zo|ޛ#+#Kv<ҿ^r4ҿu>~Qg1DN!>ʿ;*ǔ]?,쏌cƍzca3aSoO8szg.a?,[ÉcNyNÞzk~8qcf}<ƿw{]F6?]%H\Jܷ?UOqoJ&e|MyM긢Iuڤ8m*+WnrμsڔW6!MiW6[3m:5hm:өL{]bҬ1>9_:Fq636ܩwxN?c9;ҩwD?slm9y*Uh?>c>㓊Gxeg/8}oޤ;˝poN],+pĢ;]zmK n_NIW)ۗNZS/;9Ҧo_F9FM߾vꍞ}ԫ1W{JSD?lwЩNi3i3djɟeps\agu7z˦;N-r=3`glS/kzpL3ΙL~x˩L~X[3ӿu=:ӿrz3aS%oᶮgvYy^m;mvr4忭iiynl'mvo[ϙN?g:fo9m9m֭q:m;ڷC-m9y:9=ǿottqt߷6o8mޜ߷:|0g:Ü ~=Lg:<}Z]|wImı撜%i;8c(XӶw}اv>٬ϟs='c?%fmS'oYm7JAB11Ͽd;$wH>'Kt*5ҾuIkrD^}ɗ%]7|QE}&]73Ѯgkrq]K>g,˳C+>G'|yq(闘{}:%041~ǡ[b|ex$~aj-vevp&%M}nNy _YsJewn_>w$?8LO?8LN?8ܒhwK0)nR0#亴 âր8Dod!k]308'908|nՀSw\wq(Y纍>Wl8 z[yHmU$\!W\;k\u8xPs]7I7\Ab$Ab ~;7?k?~^<<8$}8!$׮>oHÐDd&;$}$!K>-rh~>48h|hq(/IגP?1^aDfzvf։v-.8 CauİpTaòCDÇeC}M;tXq88aǡk]aK]o1s>6bDuth$uk7#ko6u;)DSO}[wT>8$uKl?/Ffdž&oh:">VM}4>2*}"Qj۽=*="Ѯߙuq]:売9/3vֺkqщ迟3Da>CG}Sg1}}z%+^~>&\s迟3OD6>mF}O98ѧ_|slxݐ1ذDcϱAvdcW']=&h7pL96"1K7q8TQYckE[{mwĿߎݸDM;.KDSe77wĿ'^b%޸{cYf$ck%6W{{WۦkkljvM'd$ڭ2!*M̥ffMm2>21K>Zv mBqx6%^qv:O${bBq8/ D|ZᩉLݣóvM>%=418'ڕO>&=818=qyj~M}&%ڍ}nI?58|y{mgO>cN>'4u qXZwiXӲDe{}%;-8#w'ĹvXV[LOaDUgO>}q809}H3}%k4#8Hk1#8tKlnb8t;$038hpcYmg;sǡG×q8p&͘}L+}~]ۮYǡ^]azbgef';-pݜ5'8\h7bNqX5ֶwqx*ݧd]8:19|(8bYsgmf_%_~}~Km|}G-Oo{wmwO/\BEz|%qlmtoUm8'g?\|q]_L9ѸK͜՟Jd{I|I۟w%TuQwojv}v.nyFo"7D^NxյTaNM}V$+ϩYVSScU BcMNvE) Q,Dy! 9rCTQ0DQg Q4DY!*CTU9h"7D^! C(Q4DY!*CTկb "?DAE!C( Q(Qq9R4DY!*CTi "?DAE!C( Q-ooSUQ|<7f#?+uΆf9 o _B<_///1˾_|kBMy~x}=#}lx G?^i z俀O#+H[M;x3/Jp/F'~gxK>߯oO|6׃;s< ^~^1 7MSc)^nIfpsbwUx5گ V5\o1g S&\D>6n¯2:/a]_ 26w7}hoOd7M67Ϣ,gK3jx+; .>•vx{xx;oG;;#]o]}!GᎩ܊ϳx x_^= _5*|`/!մ?ޞ|+0}L##wG]w/e" C7· ^>|N|9~y[>^>=p?/0\O|^—›}R9 x loߏ ;pgNa_'xt>OQu_O~4\H1F_x, 5 .'_7ULt>>d\V|xJx|ܓ4yw'ep'xWƛ_φs<Oe;OoyY||G>z~x48 ൜/HݿG>> ?? ?`'>k~~ ~Y`Ra_zPUu~^[߅n~#}x"|-o}BxO|! <7?f3 aO|w= ޞ?Ë#O&K?ο:O9< lO~y xO9"S&ߐ|{`+?о1<|xKxex<fVps-o{8Ww _k]ٿɯ φmWu\5x]%x=L>pgxxC1|".ś'9'S--Sφs ۝_G{x8 NG/ ^ n|;xmώ>H~_"x? xx|\  x'CC]m0x|8\ w߅?;Hx(OpW' O77>BE OOo)~p a3΄giv||(|.7σ%/ \\//a.#+5^ozx1|)#~w|. )9䯀׃oz~WpK}?{5<9>f%w0'<' /̫_>#M8l5|<p'39<'{~<~/<N~|+| <<v>L&?>φ{s ݰO>.0o~ ×; ? wbG7G8q!>#/z<>E| _ O__od^NU85x+u.߄ob~~7 Jx @}z.Cx0wŸOg~='_~&5 />:||%#<e/Wx ^?O ?p=>/_ׇp>^σW p#hC}Ͽw5{-U }o f{ 5K6mu\x]xK>zׇO7x~C?l1<மG7]>m Hpp7+ǾI',+}?t7XgY:$S 'j g^aw[~z;ok7ל?<:CX/جf^Wsk< 6 /(/x_XZ_U|_ ΀|_  N;;`}`}`}a}|^} ԼwoOߢ`o   a|}s ^ ߃τ=}`}Oa}/ؚ`KX_!//__7/^_p}{`}sh/x v$/y} ~ a}r/ > >|۰> >lO@XpXp_Xp?X~,VvO X|X&X|/ x*ߟ>>]D~Qja}O0>>`[Xp+Xp"6 8>>OLS w=&r ~&W߿~_1y_o&}d}~?}] 2~߯~\ߓ~3`iWow6y*Xo}^gٰ>;>^ Xo=:x??kL^gX [{{xxx?x/sz_{>.w)&x~s𛮟~~s۳=}?} y?xx^x>Qǻ;;;[%z|zǻ>tXy>puQ/}s|;=>u k}ٟ,n7vov[ }hO7zm^O``?]PX_n5ixOX_ i8܁ө5Ѱ嶤ө[_Gi+pT^_nsixuix?xV徳?d|}7Ӷ/7-~?i弿=ˍ^rca}uO_FYO{|>֗H{}9??ӗyS_їkk}|/\+X_hk_gK__%X_25[qqq=qvK8FX_Û_?nUX?nk5ǰ>wp}4Sק> g 2^ק_lkٶ'=y}`}w7a}K|g;gdVd<}gs~O8}+a}~>7o}C^m9nm]xll|q-/PX=qx% nO>۳vy}v϶?8ܐ>Dq8 g Z{Yi=zC{}6l+[óٞ>[kXm8|8|8g=z>ǵvNf=6ִa}^ڑg+ggE>>al| ]|y}G=}||"y}Oa}Eg `}6g[gMs> 볽v$϶g َg|}#`}#_ސ>['ll_?l_gxl'X{?",mWv> =}C`}=xlݭSv!y}gˬ>E>s>HX?|?\볝ma[om >&ٺg ]uٞ{g+GY@}Mca}a}^v==|y} >}gO^[X~^g{gkll/76nsv~BFl?^$Xg[Ef;Kg=~Mlc}6#v/>Yg[O||:gٚlu>[Vlu>[Wl_϶Qہ~fw0w_}1>۰>>>X6_m*6l٦g; g[ϫ gxl_mgl϶&ֈlgC^^#϶ ϶ϖC}~ٞ>۽p߿۟ϯg;Y>6n6<bV'gxl_m *i&϶ ւَq>x?v϶/:l^>>>~>>.϶ >:ڿoxl%:g gggg[o 볝ٞle>[ g[E%y}K,mul `}ي`}MٟEg{lligk Nb<}a}g{g;lg{>ۋَw}| 6^1lk鳵>v>[wXmkO@lwlG^m;XAXuC^>Xn8gKYgI}Y>ߏ>۫]>>[9^ v4I߇>[G {uglc؞>mۧX[mlgl{l7^E{}`}k1e}g g;ٶ ϶϶-G 볝L{}iϖO{}7`}=a}6logkG^-gla}Vprg[|r$&v_3َټͅޠ>6lOm;Xmg}y~賱;lX}N>> b}nuX?}׽lᬿ/y}^ϖrie}錯6lY}볝l=f=^u*gیggg:{g;ljlO&l>Xix4la}Y>6>>[[i9߿>[ X#5cv7~_'gGgxَ^N_. ߮^^GlwZ/U>?w}>ggCIm{95??l;_S}6O[َzd} a}g>LiFi·.>E^&$v1:8_>Kl_lg[_{>Z_{`}=϶;6g~>[}kk8z^mְ^Ql[_÷gsImux`} @^}o} >6g[ll^ uwh֝*U>[qxmq+l}`}a}`}=_}s_=y}Q>Xm$v5|5<>v=4-.l] }`= /Ngپϵly}>A>ۑg; g@{}|X)}5}f}n}zkX=}6ن[`}#v>yYgXlglO8v`=wN>[;q/8l[l[R[m9Xv7g g>l_mXmMqo>[{qp6zb=y=g[zg lg=}s=ǽ^q߰>xgֆlsؾ>۵&Y{~}}٦1>d}6ٶηg>ۍ>[jb}MOY}u,m4y}6bڱ=}^g[zzޏKK,+gkF{}ؾ>[{] 볝|>v9'>[.vxgg[H^m2y}6n%pl賝@} w>v>g>%^?}6 66v>q>ޅlllc?}l_ZY{d|}7a|}_ዬ3>lGxGuٚlW=}=gl8v> =}U`}a}6ޛD&0lOg~~~?;?y}~?>匯fv?g@^-l{lMv?\l `}?ܛZ뿑g[X|>g y}~{?ٶֱ_m+Xm 35u@?l}/lO賽|G_P `}l?g~g;lllll>鳽@^EX=}n̒|S|:gٚlu>[Vlu>[WlG>Ƽ~XG}6F &lC>Ƽ~٘׏>`3}6Ƽ٘>댢{^^hgc]hvٮr:^4l>ƺ)l{>u:賱=lS>넣φ}6賱v [>{^2l>[wg;>>:賱N=l>2ƺ賱n8l[>Nx}6֙GW}`}a}6<7lnFq\q>[WXNX}6DlgPx}6ޛD*g=QxO}6ޣE\g=Tx}6ޣEu'g=PX}6F\/}6ֵD &l\w{^+lx/gc]]XW}6Ggcx>gc]Rlۈ>0:賱>lK>ƺLug=k:賱N=lxgsx}6XG}6DQX}6ol+>gcGX}6SXg}6{Dugc~VƺiE賱N:l>rφ}6<賱!l|gK>{)D>jsZ~ټygcyh6g}6!EuHgφW}6Gߓ>}6<賱n-l_lxg:}6~g{>}6}6ֵFugg}6g<>m*vOug>G8ƺqܣφ}6<}6<}6F l>^uGgcGX}6֕DuGgcRٸNEu*gcFX}6։DxXg}6֑D߻>Hƺڿ볱=l:賱N.l>>}6ol\gu&lw٬w{Xg>uy}6scټ^}6]lE^ v$g3>ag>Jgj=s>I٨ׅ>UX}6<{g}6C6zl= ZOì;>ۏ>϶-φg}6{φ}6F>۹ө>^Ax>ucd&q_>H#iciMu)lX?SVd X/<ngc^(lܧ<^|>gw}6?ٜ?g[>YSugQ.lY_CE5lg>}69vy}6]φg}6<'0leg| ̺q>I6"ƼC٘>Egc4lԭg>Wra~wg>g;g99lY_{}`{lSD&}6Gφ}6Ɖ>7lSG:kX؏1}6sg>}6)6e Ejg}6扢}nَ a}`}c`}6~g>[[q5}6q_>2gf'lDkyDm4g٘>gc=ḷGy^5lYÕE5Dugc{٘7>IgN> SlD9L]}ˬaٜgS>[Zl̳G}6~gc:l)g=R8y}6λQG߳>^_lkx}xge=oY)lוq]>סq>!g=eF^\g㼏>uLYmEy^)l\[٘7>Jg}>|><^٨C}6;GJd}63g>Su'l>.l FODwOd^4l#FlgN[j>g>V볝QFmu?}6{ l'>[>]vWy\}6:9ƼBxo}6ef}6g9*lg{0g>[kXVl>9^ٞ>mG}6\}6ƺ\}6)F}61}6{Fm0뺢{賹=}61}6a?̺賹l[XgcX٘g>jgc-lDyq]>׽  Qgkh7>c0(gc^*l#aG:XAߗ>/}6{}6%^>ƼTX}6EFy賱.$l[E; ^ }6U{!l!>>4g{xp1>wl/|g=٪K.g;g|:iVlu>[Vlvsy6oQlgH^ml]`}y kX^xi>u|٨։K٨ylWl}a}+a}o`}\Xyu!6vvvvv&gggk1}m N복>z>۶>xgۂ>֍>up#϶ϖ[ l3>[;llGlkla}6_}a}6扣ۃv"$ٞ٘w>ہ&϶?y}w;x!lü'>gk=|<[ٖ#g{liۭNNN٦l3a}Y>7}}^,ll2>}6浣{ggcMv0y}6>۷!v(vv{(}>x/}6ޛf}6}6lx/}O?砽>`XmKXmggl}=Ym5϶l}}=)gp {mJ^4lgC^Cl`}ᎩOm:v> v8&lls`}>[϶&v{0lx/}63FgdxO}6޻ElOgex}6sFm.϶g=fټG^>ۋ> >K>>֟] }]y~@^ߛ>ɰ>)>x{j)g+׿Xgggggzv϶gs=cgcO6&&2>$uYuʭiv({́᭭^Kk ]g[>>q{7l>g[zN}S)[ ggz6z:g>a})g glw3>k~j>N]|>gQ7پ>l3`}rixiuXgٮ٦_LXmv6٦l+Z_gl[_ì>e϶5|$6zD^m5 Xg}^SMg{z6gc^ٶ#|>g[z6۷v=`}6 ކ7ކY}}}^%}^&FugX}7a֍FugckrzXw}6E5~ a}ca}㭯`}6ENXm5{_URٖ'϶+϶e>>>4|7ugc]kXa})>SllZlXٜgg{ }a} >ð>ll;[;y}]=]gggg}u^m'q:l `}[`}ݬ?qqq+6zz>Y8g{z>lYllYC^Xm5q?>"gc]pނ{ggc|c _M} l'liv3l}6YD}#_+Xug>ۺ>۝a`}pg{z=u< Mٞj϶=ٞއONَdg{a glgyg'϶lle>SX7}7w>'v>>R?l·)Eug;g[,l7g|g\?6yؾ>l:g[||9|"g|??}[볹@.x?< J>u>m>$x볽dlx\g~p>y}lZ_x?< F[{nƢ6>[_Wx6f϶v5v=6Mola<=g{]/`}k϶??gk އX7XUg}6_lJa}a}6SVFy}O(Xm(*iA}X:X`ٸoDm N|gۇ>+l>鳽N}[,g;g|:iVlu>[Vlvj5϶ ,V}j 볭z /vOgW}li}hv&W,XmS볝A^mol賭 볭I{}f>Z>[+϶֞lg=N^m:y}>['5&϶y}&>@l`}a}_ y}va{lߑgۆlll;2>pv:l_msX복$vG%Xm.َ'V5>[#8}6Ug볽@{}gI^SXKX Zll_XmU볭m m 복ٚl`}Mپ>QN~l1>[Oll^[XX;Xm϶g 볭| 9|&>g>ۑ>[ ֏-J>ۯgg;g{l鳍 ϶ޠ>Xmg^٦l^_^^>>'>[볍&y}c`}iv86l[ll?lq|ٶv|,&}dlyg&y}`}a}϶Om'X>5v*{gϖxl'gہٞٞ>[9y}V>ll2>6>.f^m!5;?}v>%gg{gۖlo1>[K}F{}Om6y}f}֐llٖ'϶϶϶) g[gg[g5cll[_>gggۙlٮ VI^m>y}gy~g϶y}a}'a}zXmXS϶׿X?llm_:Zmm}SCg-v=}]?9+gg[gkfl/Z{볍nra}a} kwWm1W~X1ix}lg76Nm_@i8]j=N}lg>}Sy}sL^m1복>ư>۾JӎG^Gix4|}` _ 5>[?l9p2y}6olݭa}Wa}W`}a}n>?7l>M^}6|gs>Km3g;gz>Ϗl^m/llZ_"5zgg;g;g;cl복^m 복|^g[َ>[Wk 8lٶ'϶ 6g;#y}6v>[#kCkkx;k>Ml㭯SSk5>{>Ӵg>]A>VgmMrgˁyCwX>f=i=oG{}l.׮lC`}ka}XDkllh.lU+gN^z:^Al'gJ^7V볝]l?l+[wgyJwX4볝j}l};|>Ōva}i϶99g}>E>gly}`}-a}^}6pqmlvxxM^mXm/qx88\I^Xm[J^mq8Xya}~ټf=K`}k=ǽ1>[ qxq0 ;lsSY鳵>XmOXmcofougkJ{}\lgٜOgz#Mg>>lopٶd<}|l[Yi=6zk=/̫a}c{lgyپ`{lc}/gٞZllOg~8|l8 M8w>^xyW^f]o}6}dhfghgC{}ٰ>,]_X)8g[]|y}|>}[h϶+gkhfg[l`}2^{a}f^`}F>[)y}> g[ ^m}>Fg`OV>[}Xm>|>=|ց<}gMއc{l7Z^m#Xa볽 -p@c賱}}˜//"g 볭vM|6}#/>" }/nsߓZkl>L^Ulu>[V5|:g|:a}*˹> XmgX#[ְ>AlhfK:l`}y>M)IXA~:1>پ$v9y}s`} h϶+y}{복!gly֣>Ȕ6g[ll=}\l2>t볽A^'X%XmnNlo϶?پ~Fla}S>XZGm?Xl'l^m]X=v϶ y}mA^D϶y}a}~>ۙg === 볽|v v)϶#Gmy}[a}>>-lٞ>,y볕 =Vيgel9lOm"!dl#|ivmH}i6R]Fllwll3>[>y}g{g[lZg{> ټ 볽xll]_&l_!϶ glv-y} ,mEgl]M~ټH^m6gg" qjl`}I߇>[!϶-v2]GlSsaևy~>ۃg>ۛlOUg>gg>J>E>N>\gk@^> gkxlG qv|>հ>@XXPXm`}>[6g{ϫvGZy?gۅg#6llv 6>>[cg>>?}6ol=ؾ>[wX٬w{X;Xmsx׿XN^O4utuTX>xi>[ggm{϶3lY>[+lG0>g/}w`}g[gM{}=ٞ>g{:{g{ gz)vV ]Nm_m4 o} &>}ө>j>{~?lYixoixw ug\X<}e+g϶/y}a}U`}>[3XmX9>YS϶uzK56>~lkl_zg ]E}>[Oi>[oX2XmgF^my}66cX_g>[skx1϶5v?v5볝X_{=[_g= 9ߤvuxma} oh}mY_3>ۧ6ކׁ^>}>ggf=NW>۽Fpgqdqpqv$v#v8<>pXmOO=kx ϶g>k k׋ZOïl >)gz.vW笧S6f<}`}wᗭ^^`}>N>[XG)}*X,Xm9|9>ql[{g۞|llO/y}ߛ>Psl`}`}}Jl;[lӼwllÝSv88|϶ ߇>[϶5g{ٞٞoَbَ_`}OOPq')>lS}7=xllll_'ϖr>[=qmOwj<}6!}gg{g볭xl-O^}6o96}J)g 볍نZvSS mb= gl_Y/賹>vVu؟ٜ&[Xm,N*`}`}Ű>ۓ^?^8;v >0g>xl?l7l~v>}]`}]a};}9϶y}ua}\Xmv56g۔ϧv"y}يa}iv:϶/\o϶61V' gk복VVu%gg^پv>ފlll]a}aj>[g َ `}Ca}_}Smlg~_>fv:g;>A>ۑ>[7X߯Ý`}?g;_9v,vvv"v 볝||pG>>>|gkA>g~gg[xl;_}볭|>5C`}6ٮ>[$GVlu>[:g|:g*m|g{g{g _Zl`}a}Ǩٞ=O{}Y>ޅV곽볭 볭볽 gg*볭xl '϶Zgg 볽볽 ͆n}L^kl?}>'gJ^Slg v"y}볝N^ gggg{ g[g+bfg>Jng}D{}>~>lOm#X XS\l=gJ}Ga}h϶+϶v#:A{}|Xm^_a}UgklY>dgE{}N>η7g 볍nvÛl#a}dY>&|lS`}6geE9HI$I΂䜓 DPA Q IQrvXU_W.kz~Y}8<>Py]o|7j^o'5g[֫yk5϶N<ۙPz=Nng;ռ^Oy?<5Vn|<5jͳy[ٮy}mǎَ0_oγ-cxlk<ە5϶yg[<]Zl >kqG6϶yyzٞfx vH}:϶yum!tC}@l Avy<]x^?Ngyl=?<l~lw<ϳc^5/<ޚgټ?&l}^<<۟vj<̭l<kZ߯:k3O?3O{tx Zپ^li?ycZ6mg{Z<[ټ_y6yzl5@lγmSlS<ەP}xHy|ޭϻտyg>xg35rͳóayjgqͳj5_og<]Rlg<=<ۉ5vy훧 >6gdyv}gs=g;|^b>lg;umy?<^5Ƴ|n>uzy9ﶟg<5l[l7ϳ^lۘ|<ijy;϶Zy^^?[ٶ3_vOyikmMx=Wͳl!6wl_ixW;g[uy;va<5϶N\.j?϶Yٞig{>yoPoPlyw5϶gپWlWg{>ykϳl?Gw5kͳlγ}jPl<>}dyZپzz:6_ͳ_l <ۧ}϶kͳ]~g[g<۸y;϶bͳ?϶Oyjmߎپ<:gg;NySjϳ=Yl<vͳWlw?Wlg[y6Ox|.lgulO<۳5^yqϳ}ǟgumgy67mgVy;ͳ]6ףg5LͳVxmezg3lgPm?׫ng{¼^?o>ltlK<5϶sͳXlL=_y}At}^l>ﳵγ=Qly+jrs=yټ\f^ʳ:϶yּ\oSl{iOټ?ٶy6?x6?O<Ϳglgs=gyy<^Cټ??by7jYR߿zvpl/γ}ʳyokmOg϶@϶HD|=ϳyٞyϳ=zzIPz@l;Pu&jx}:g^Zt=jy6׃yWjg{yγXlk<5aͳXl?0sk7ny[5϶uN=֨y=6ez(.h?;vyͳ~Ulvy+[ٮy6yqkm/ijy~l3<yϳ-Ul˷g@lty3kl[γmPl{g۷umy<Jdz:pͳmxkmlw~my[֭yϳ}ٖy;g[u{ml<۸vrͳxq:g[ƫyjmܚg;Vjgy6Oxe[6hgmͳlyOjmٚg3l#zy<uπgum,ףgپn^|lll<۲kmNjg&y6wtet=]dzMSl3<۴56}}lA6ug{<yϳm1O4϶ySlku<϶vͳ~mϳ:g<5@ͳyijRl?4_6_?<lγ-l_0_<7מl|϶|]g_3_뛯wxmnϛϳZl7<ۗ>x]>/~^737>khg{ٶ7׳γVl<ۆzwϫγm\l}~ٮ5__5_;~y'jgG=@l3OOk>1r<ۂϳ`y0?m?϶חz,x`y9gumَ2G#Mߛ|y}jmgjٖyϳdi?϶^=<ۢo?߳y6ͳȳd'h?yOͳp؎?byzгg^yW<ۮ>vy3?ۭlO<4g{%iϳ}yjo>W^y:g;{]\lӵ(vHyog[gs<5Hͳ=Vl<5϶qdz:϶eg;dz˳}gNͳ~m7g۽u풎^s=>vo{{lγ:v}<۵5vZy+kgټlv~myw|ޮCygۯ<ۦlw϶Y/w~g{yjmGy6Pmﳝ:xͳ-RluyUZy<۸ϳmYl<gg;lkγ:6_6p<8zг:϶^_V/ͳ}x myjmvP<۹>Vob~/y/ϳ|]}U׾}}C}g<=5JykmҚgۤg{umgzzM}~y6x5vCͳyk?5϶پQl癯~1hmٶxlc7ϳ:z϶ug{lgk7xkm\c֣>[ͳm[lsy>onog[lyv<϶y޼ٶ1[|ޭپ٦y)km϶[|gۯgyjyt<`?϶~ͳ}<5ךgudz}uy[Vy<>l^?yw~`y}HͳZlll}k56eͳ]xZ\vykqG6vy<^5s/γ]?;pyK:g<ۯ5Վ>kz:Xg[um)dͳ=vͳ~Xlg|yγij=<۲lu ϶~~mWv=U<۔5vUͳ]Tll~l>Oγ~dz:vAͳٮyգ>[ͳ<^?:tͳmf7_mgl<\56fyY5϶y7[mg<=<~SlwXo γ-b>m?vqͳ-n>Tls;gy;jmg<^/aǬyy<{gng;x<]q=ٞyjmӎ6{lk7ٮ4:϶^_/oy{k2Ƿ٦lg[٦r=W5϶dzYl<۵gNzl7k톚g__:϶M<<٦1{<<ۛzg<ήԇvyU\/zA}Xy\/gt`f~pswyjmgIͳydzz5_{϶ǰglÞmسM<ن=۰glÞmس {-9G6϶#g;پRl>y7Z6mg[ziϳmdz:϶lͳm~mykm5vzͳTl6nyqϳ:yIZ&yϳ٦j?6fyϳ:6El{γM:6M~yj혚glv>m:vFl3<6}ͳx:g;VxmƬyϳMVlGt~myj_gyqZ^kg[ugys;϶<ۏjly}ϳnh?6W<5϶kͳ_l3=y_γ=]lkvykl>g<|56Qg{umϳ?϶Cͳ<۝l<ϳumݚg[óM[lu>mgxy<ۆ56Io>yyjml<g۪϶Q<5϶Wͳ-ZlCy6ϳTlvgxy};gZ϶Xy6OxjmgEͳ-[l<gEͳ>|xmkgl<ۓϳMͳM`>'x=~[?l=uϚgzͳ}:JCy<56Oͳϳ]lg[yy;g<^f|439[ig0_{><~<َy#khlA3\5zYguOk_<{lǶγ=`ޮOh?vbͳų<5϶y_Kdz:6Sͳo'ykm՚g[dz-:϶dͳ=Vl/գ<+5gͳPl<5Tͳ<]_:6g_<ͳ}<]c0O׷gA1Oׯk@{z}yl<[5fͳx9zh?zvuͳhg۽y[F|<ۋ1חg[umy6gݚg<닟ߚg[v?<۬5϶y/<z?yK~jmg<^Oc'6S'C-g{ͳ<^x:϶y<^m?y<^Cyʳ<5϶Y<g\gr=^??ó_l?y/w<jmg;٦y=my5Zپ:z65vlγTlh?6_:f^.y \|>[~z@]|t=϶@<ۣ?5϶R|ހg[lmʳG6VgVͳ~mŚgƪy<,l;<ϳmysj~myg{<lKy]__h}Plw<>5v_ͳy?<ۂlԣ>[ͳ}Zl]l'<p=g[ygjmBz뗙~x;ټ^lGgumz=ٶ9yٶyM56uyO^kzdzUl[Pl뛯믛;g|ٮy~Z}OͳUlw<۽yϳ}<]zkn76sg{<_6γoy9k5vaͳ4s<ۼs5ٶjg[ó-\l<5Iͳ=Tl<۴>+veg{Ѽ\l^|7/ׯI8>uy[ټ\?ټ\&mgy6Oy6yϳM:϶y<ۄ56Sͳ-Xlsu>/+l<ϳy/g[l?v<5NͳRlϳMdxmg[V6_gkyϳ^lv:϶lšg<^/7(϶ys=g{<6x6<ϳ}yXxy?óYl߭yolg׿}kg5϶{ͳt=>zlKγyogywͳa7}>uy])5vl<5v~y3ZN7u<ۻ}x<ۯ;g[lo?϶ͳPlvUvUgۻgۮusl۶γ}1g۾Ƴ<ۏj>6~<۪56uͳ-tٖk}.y+jgrͳmgny/<.g۸uϭlγ-QlKCyv>lgx:v>|PlOBͳy̳}˳y~Ƴyɳu>|<<۴l?l皯m3lmdzMWl'<5~^yjl׷ng[<ۃټlk<:gmg{ywkmgcfhgl[<Kkg[ٞ4_Wϳeomg;\oNj'vu<5 Fn1_|ryjmg۰nyI>_:6y[^jdlγ=Sl+<kmgǓg[umy[|/}>;g|]xj5g{f6_+γojg[ٖy%yg[ٖy<5vϧ yEk}}<=gKy;jΚg٦yckgɳ]Zlwtx7Zngs}gs=g|^|^Oyyskl۴γ}{6ϦyﵟgۻNh?g<ۅ56W}@lswy]}~g`\z~۝gs=gumΚgٮyjښg{&w=?ϳ=Wli?϶X<l;/϶~ҿ}ojlxl߭y7ϳmls=~پ_l{<ۑ>Rپg?vDl/γ:vhͳUlߨyjpzw/f^lwx[v5Gg;ٶ7Ou^lg;yj̎ٞxml;{wmdzMXl< qkmgg۠^y6'g;fͳ:϶Yͳyjzn|m6Sly?gby}>x#xyϓy^u@GuzγMay1ϳ^lc<56V}lϙAvC0O'k*zg~\?Xl'uk̚gg;llo56GӾe~ncmggsg~gs=ó-\l^x63y6ykg|]_:XͳM_l>5϶]ͳ=Pl7u~mylγmzM}DdzMͳM_l <۴zuxͳWlv<u}_lGl<۳kyk&]g[<.my>Yl;gռ]Rlgkguyk/y;϶yumy{>:6y<^hy>mvO<ۘ56FͳUlc<ԝg{ٞ3_|q<ۯkʚg<=<52t˚gUͳ]W?gٮ6Oxl?vy<ۗkÚg2׫ig[\.4<5vQͳfy?y}gumA>i^^lg۬l4כ|yZ4{̳[ls1o^Oy5϶@_϶`ͳ&ig;umϳM~yzl!mls<;g[]Yl㴟g{ٖ2_ֿglgs=g<^Xl<?3vhmgs}g<ۢm^my5[lxme_~PO;cngz;u<ۍԇγ[ldzz@=Zmƚgَr=zgzy=nAP%ABIIQQJiQ ;S@0i|fΚ{}l{^{]^z/γM]lӸ6u<56Oͳ}_l<ۻgs=g;yCjY]q=ng;g_oow3gym_ͳmSlt~mK}Oq}H϶Bg۷ʳ:vճγ]:vQͳ-˳Qlp=}ͳMlw<6Y<:gۺumǚglxy1kmg{y=ml<ۧmŽ:6]g3/l<۝>Wx_gyͳbc|]||=ll'v<϶Oy5϶oͳo}mn(϶R<׺<<>Vu vyz`g6qyilvHͳoiguyk,uig{|wyu}mϳ~mlg;\oَ||?yγ]: χϳ]:y%jl<ہ5϶gͳóy6kg<^/eyۚg[<^/Vl5϶yyWlS:϶ޠg۫<۱x=Κgx픚g{~ul3Zi~g;_O:g~WlKng;1gl?϶{<۟:gۭum.ng۲vyjmdz:gpͳyl7w7y{xKdzٮhgٮy6<ەlc>g;ʳ:vXͳ]y}푚g[ʳ}lggfͳ-~gl<yϳ]Pll<ۿjg}lyϳ:vs}l_lli?.4O׫<~]4γ-y<ی5i_/ggl'gyy["lγ=:϶_ll?϶fͳMWlgmykmɚg{fx<۳ٞy?<ٮ6_lg۸ygZvngۥvykmdzMQl_y线<9lyt{?Zn<ۡ?)϶Hͳxjg{.|<ۥ56zͳ]_l+<ԝg{{|zy kYm?g;umdz]dzxmϳM:6eͳ<۶dz:DMzA}uluZͳM-6i<$5vay)[:fȿ~umdzYl?yg;ywkl3γSll״γxϷγ]Rl<)5vuͳyYZٶyOjmݚgٖ<_kml#>[ͳ]Pl|<\56Gͳ-Ql~~y/<=}xkvUͳ-Ql< ϶Nͳ=~ng{um<5JlO<۳5϶Y6yϳ=Wlg۰ٞi?Dͳ=^llγdz og;y'jmg;yk퀚gۨƫyϳ\l ʳPfyjϳTly<ڭl_ɳcپ<ۂw{5Zy[[ٶOx|y9:g[u~yjÚg{>}mןF4??w|<_7<۪umg@lm?vy~Nyy_t{ƭyj)퍞_b>/m?vGͳVl<56ͳ]hO4ҭl߮y%kzó<^o~mњg[<^xj}xyޮlۛmkmߚg.5s<>vy>ʳ<7kO)϶y<^/`YlS<ۼg{^l߮ywjmϳM_=p><ij}ϳ:϶c'y:g'mq|=ٶxP~=Nͳ|6kV6lOyϳMϳMlg[umy?PPlcgNjg[umپz@rlwg{u/γƳ:϶Nlp=u텚gaͳy]}~gh?v~\Ongۯvq=ީvy\z\l[<#ԣٞj?϶~6i<lOjgF|<ۿ56Yͳ_lkm~=Z=gzdzdz}zgy[jmՁϳ}nm?6Q<56iyjo[Ylӷg3ol6ig۴nyk5v]ͳo701FQ5϶Jl;γMny{ܭlߛ)ϳ=:g<<5϶fͳ}پ\l<˸^P}6] \/wykmϚgټٶyj=ٖ?{==۰glÞma6ن=۰glÞmسwy#xKjyF4vͳَxye[`g.ykξ^y5Zt=ާ<+ls;yϳVlK<ۜ5vRͳUlߨyٺ}Wl<ۋ55Xyk;5϶Bͳ\lKw~7lvmlγM:@ͳXl?y}myj 5϶JVyu:gumg^ͳ<۞5϶ryvhdzVlCy}ϳ?ngu}}<$lstPml/mlg{<6yt<϶|ͳ}<ʝg[nx햚gʳm:|ͳjʳy|x6y6y<jg]S϶sͳͳ]WllO<϶T<[5v#g[yϳ]:϶[=@l<ۏ:϶`ͳ~ȿ6ٖyE{|xIkoǏgRٖyj;5=6CͳXlwxIkپ^l<ی5v~ͳM_ly}m[5 tͳ}y[ٶjgYͳ~Wflg۲ٶy6?<۟}gnͳ-_ltmy;g[y%ϳ< lu~mݎٞy6<ۼg'Cy랟϶Jٮ0AyMjm>ykml ߚ=ϳma1_<<ۻ56Nͳk5϶}ͳmWlg>vy<.ͳdټlSy;Z/'>Ox[٦6y٦y?yskyVyzÚg;<9l wx%ϳM:z$9wy=j<ۯ}l˳}PSg۵>y;:Pml7g{uamS~l<ۊ<#o?϶vͳmVl[P_yO]pkmc7\'hg^o?y]]Nv=<۩5vjmgu=gx\Zl<}x6׃y\/yjkgv<65o=_l<ϳ϶Iy-km]yMKȿf_3ٖy" ]/otfs`f~&wzg ]\/wr;m/϶Xͳydzϳ=:ln; GlÞmس {a6ن=۰geس {amy{:g{h?vAͳmykml߫yogۣFi?vRͳmSl<'guSs?<l_xolӵγ=:Xͳ}ͳM:vCnyϳ=ln?x<۱ϳ<>y<5˳ywx9jl<ۻ>~<ѭl;|Sl<5϶mykfyϳx>W?<%ll(v]<۱5vBͳlkγ[lkg;<}xy[|<&5vWǿ3py kg۲6yj7>vyy6<ۖϳmyjg[@l_l<>?Wz|y}m?϶jͳ<5϶Qͳ}ų:L=gi?vXl{wlγ=[lg;uy6yjlO<϶uҳγyó]lW.mgkk횚g;9χng+|~ާg|޺uםg<'<ۭl˷γ]lyjmzgx:Og;Ny]g|^پF:gۯ<ۅu[ټ^l|?l8lγ]Pl;txv{ٞ0_j<5϶aͳmTlk<5϶gͳ]my[~Y4<ϳٞ~<۷?~ml}<]<]<g;umg[<_:϶NͳmWl;mk=GllKγՈN7y1׃dz<^oɳy=fyWjexy~<ٶyjg;&5c{g3llγMdO62{t<6Uͳh4z"϶y>5.h6<:6{Ql~lγSlw{5ן ϳ_l~?Qy[kg_َy<jmgFyq\/yG3׻γ-:vRَywϳQlw~ Y\/_kg<kd S\/p٦t~lϹ^0g3?lO4y:?϶o<5پ^l<{<ӝg;sٶlÞmس { =۰glÞmس {aپپYl3/8yi7xZxmg{yz?u~9^|ճ~¾myUk7٦yϳSl7<۔5϶ͳ=gY׳y[flγung;^y}dz<:lSwg{lk<۬٦y9O<魏9<Νg{j?vf<[yϳ=Zl[g;ٶy;gۢum˚g۪ʳg;lstTPó}ϳ<ۦ5϶Yͳm^lGh߮yj֚gٞ}u߭l~ml;γS=l?dzm~glg|5󵟧ng{Z<ۥk?5϶gmͳilγ|]_:vjͳijOǭl<7&7yl2ϛ}|3/γ-e>iDl'o[ ly}h}gRg|j?Kn|<gۤ6yMu<?ިy<ۛ5TkgB_϶ylvzykG4V7gyg|٦kgylv<OFyγf=|lu{<,5vw \Nxa5kQl㴟guW>q=ǃgl<ۤ_5vg{_c}ހgnͳXl6vyZ^Rgxy%jg˳=Tl<=><5϶^ͳMپRl_yYjmҚgۿlvxk{|<%֬y5jmdzg{<"϶]lykmdzVlW<(5g۶ٶyj+56A_o<ہ5vPͳyqjg[l[u~yq;gumy7[yYjmg;Vy~m/mgۺ<ۜlku~OPmdzMTl<Ɲg[6y kmg{l<5vCl<5ݾ>yQ.o?l[n|<7~g[<5϶yךg|]oiOx|ykml^_kmg[>{ySg۲<ۢ=<<^5viͳy1Olγ4O;_lg7Omg&xgAc|ހg_fg0}fzTl<3>6Oͳgw;g{٦y6Ϗ<ӻW??p{<+/Pzy?϶\lsγ_/~;zl߬yϳQlk2uo?6kͳYdz-k0ok5϶Su}ig[zY=E?<gl?ٮ\lig{ykm͚grg[umg<ۘ56vgx\%:gvye;gl?zV<㝏g{ٶk?|ͳ6jg;l~L<lv~폮;g۲myγkg[y_γXl<5Nͳyjz(6ggg ٞxl~lγ=Xl<;kgg۰vlOkxylw{|:϶^ͳeljmg)x[y=϶N<۟zϳ<m?y6_y|~l0/ <>}v~sl γy~Ƴyɳųky6Oy6Oy6y#=~yjmvb<:϶Sy^[yϳ:vR<ۋ5zv5߻gϳVl'W/<5gaͳyj)mgۼl3&5׮llu;gIdz~Pylsγh>yyuZپo6ח<^_cjmg<^_x5϶bVn?϶Fy5kmz݁76}jy?G4tͳ}ǟgy;.6lγ]w(6[<k;0~l(v~dzmglSlg[lgَq=.5vFͳ-Zoz@}z<.}ޣu0mk1G}g{$mje\ǩykɎ<<۹<5϶Ddz}zI>v<`g{ٮm?vI<ۦ5Aͳ6aَ4{0xmlγ:~ͳe>?mz(z<Ӷ>gumzgyYk?<,5϶^_/gTl3<ۄmy z ߯=xo=<ێlGu<g۴y}[jgFy]\/\/\/>&ll<_Vxmg!y<۵<ۺlv?gϳ-ίy[ϳl<۳ϳ=Wlg'γ<ۦ5vOlWγَh?vTg;m̚g[َxmgs_϶|l<뮷|;?nl?϶|yjgl<ۙ56jl[< 5vxͳ^l<϶bͳ}ykz(vaϳ~gCy6=;vdymft}y^<=<ۜ5vtVyjlγmnyOkg_lSt{<۲5+vϯoGg[м\_Pl[g{ټ\?ټnyóػhkQۄHt#)Jt#"%*(tH7( )) !!9g=Xn~c?,w|k^7p-Zlx6Oy6ykЎٖyjϳלg;پ`?ks'5vLͳlWg]ޜg{ٮy:gsgGoll_gvͳ=\low焮g[NiγӜg<ۑOu>Rzϳ_ln~i=vuͳmXl<-]6wͳ]z5vMͳ][l<5϶{ͳZl<<ymkmg[g{~\ykmg۾l<ۙgil>Ol/t<϶yz܏~f^[l<]?o<5vKy':vyͳ=Vl<ٝgzٶy;g[^w[ozxcjٚg~~~^~Fiγ}yj`g;6y{ǽ<ǽxLͳ=z4~"vx}~^O<(y]5<ۦܟiPml<ۧ56aͳVl<5vidz|dzUlw<{#=۟mٶh=v{ͳ<;gٖ{#=ۺϳ=YlG<۹gۡ9vvͳ]QlW<ۋ5϶mdz=lo>yZϳ[l<$=?<<ۄ]6QͳQlyox<ۗk/QsgUͳSlWw>m<ۃyl55vzgVy{٦y[;g;fygy짽>ٞ٦/xy1kGg~ó__20fWy{}fy[ϳ'l/^9y67ySgu}Vͳ|ʳȳQl_o_yfl>/lg[y__׿i=qͳ^l_7fnγγ7϶Sٞzg׵M<۱<ۊޯkoxYjggv}Aͳ=n<Ƴj{ϳf?|5/vmsΚg{g{ٞy'k5϶Yߟ<]/߇ykmێپڜg{f]՜g{=5v_ͳi?=<5vt}wͳSlXϳn٦g;96gls<Fy[ϳ}h?^<ųmPl۟ϳ~vQͳ]h^yz~x3lٟw>m<۔g9qǷg~vͳ}Vyil̳|^g{lw<ݚgNͳ`?ٜgͳ-؜gJͳ-Tlۏ{<j%g~g=g\l?x?l?^/a?^/Plx<5϶x\l9vMyk^{gَdz]n]o]j]?lx<+y-y{ǁ#g<hg{~>~ykm^G 4dz=c^/j^ϳl>lu?ߟi=ԻlPs?~ޫyl4V_yzlhγ}mgۣپoglyۜgۻ9Xͳk9Hs͇lk <vym=vl'6پl_d_yͳe6Plw<6UW/?t~y}l<۱5϶gͳc_9϶g/m<kGUlsnγM]l[t>mfyYZϳ^lt~mgvns[ͳ]\ly{|m<ۅ5vQͳ\lߨyUjgvͳ^lllclgt<϶Qsmgmgۼl'7٦iγZlӵg{PmvLsm<56YnγMxilg<'Pm<=>oځgx~F}<56Ay3lm<gzjγ]ll4vnͳlzzz9[ϳٖm=϶\ͳ-Slgll_ u~mNIk?_}u<<ۄy#l<蝟g{yZϳm\l;g[9϶Esgzyyz|<65vu;Jsm՚g[~9vCsmgoV?&o= ϶u}YyWl߷߮oy[km.}?[7޶oߏl{z?yjmQqXl3<5϶y?϶xg۪֨y<~ﶿOy~mgkyqkmzδjγ=Xlygyl_5voy룼cOl_|lzг<ۮ0x޹ylw[}H϶J7gNlv>l'<ۉ5g;پyIjmҚgy/<ۘ5vV><۱y5^҈ٖ|<ۮ5϶nͳUl<۫}=yj}oW/ߟOjγќgY?]l'^Zϳ|5ʳۜg۰/m<۟:?v߷?nϳ՜g9hsg{yk&o7Ƴ[lggcϳRltx{>Fz fD;p<Śg{~׷@lGge~zؚg{y:g;x픚g{-;l|<۔=_>lwgiy<۞}َzyߵg;l;_{<۟jm?__hγo]\l'_7_{;u}Fͳ<]?6u|yuZϳijOml_>lw<6l=SmOzmg^??y}^nlͳM Fl?~y<ۂٮy<XϳPlKOק6msm&'ykmz9vx}x}xx}Dsmϳ=zoy;g;C}x϶yFwymg{k?̚g[ٖyj5϶gͳ-_~l<5϶׋wͳ]f_ڜgg9϶jͳRl<ۅϳk_Tl<۲=6Csm5g^56}ͳb_/g<ۡ5ojγMkox6<ųyu>튚g;ֳњllO<۲ϳXlK_P?~A~<y__o=6O?Ox;gz~ xv<϶sͳ~~ASͳ]ó|dzz픚gyg;ٶ\?{=۰gsس {a6ن=۰glÞmس<ۯW<5϶#g9vjͳz5vhY>γlGvPvDlgۮ.yjg۫٦yjɚgC)<=9vUͳzj/vYs 4϶hͳ[lou=0z1zg;~Aϳ-Xlg<ϳRlgz~ٜg.m=rͳTly <>϶b7g~ <<y%k 6{K<ۚy[5ٮmγ]c?߳پxjݚgy}=ٖhγ9϶dsnyj톚g{lߧ<<55&~ómќg~dz|ʳȳ]_lgƨyjmޯx9;?Śg{g96Nͳ<=>6Wͳ}y6<%56Wy6xCm{<56ׇuoyEkmޚg~g(Dپ]lg}6םgu=Ol6o?l7<1=>6asg{՗6~]l=Gzgukγyóq'~lwyOkzޯy1mg<ۨXϳVl<:5϶t\smg[VWyWZϳóyٶx<:6vͳdzdzMQlSmښg߳y6ͳȳ_loγl/w<϶es<9B/i=6Iͳg_~l_<56Y_6j}g:g[y]jml7پUl<5vk~~grͳQll4t?Wsϳ]~@}{ͳm϶sͳRl>l"Khlv>mg<5vHͳ]Sl<ҝg?mgyI8gپVlhgۡ%϶osg۽ٞy z~xyk/;l6:g<5vk>?٭y_znsmƎh=6qs<냛l_xmgykDlO <lKmbzu 5϶fͳd?^zxjzg{l<)5vZͳZl_׋7.gyjmzfyykmg淟XϳSl_yQl?ycj57϶qsmgɳM|g???ϳdzPl<ۧz~96syQϽ[ϳmz;wǽ~:̳9vol?[ϳ=n?>p=Țg߷y6yk6zy?~b^[5g{zgw<ۓʳ-ݜg[޴ǩy<۪y<ϳ[l+gٶhPmlcP?3x<۪p?϶zó/ \?϶5ϳМgۦNy z<כl56jγ}Ʈy6mm\zmg;ީvy3jmΚg>9vbͳ=\lkקNgۮ9϶VͳTlv~5gټx՜g>~5϶Wͳ~/%/ryg]smUg}س {a6&lÞmس {a6ن=˳ڈ֫y}l>yMkmg;yݟ灺2gyuZY>onyezy]Zϳ}ޫy;M56gl<ٖoγl<ۿZϳ\lgٶs>ylku<϶~sO5Ѐg{yEj]Ӛg[Nxml<5nyjg;ykӚg[zgٞxg<5dy<lγ=_v>k5vn'?g;yg۫6zyjmgfͳ}yS=u=_<:]/bsm<;~(\yZϳmy4.ygcͳ-Ql<7>m<ۭyl4ټlogy_l/x<Cy6=;g{ٞy{|mgFͳ}϶Ul7_pyUjmVyZϳRlG<ۇ=#=[ϳMUlt^_<۷[?gYll5ٖnγods=iͳѿ/vߟy<]5vpͳ}mγRlo=vߟ\JͳTl_[5vBͳ~6yu>mUg߭پx[ϳʳ]n\<dzyjmǚgۦ~x#l>l~gy6x67y;gۮټl>l>?l_׫_{g۲>۩wmzgu=ްzyEkmBy4ٞi]?k=ɳ]mS_? ϶{ͳZlx<7:6v=[ͳm>ֈٶx}Oyou<ےyl/_w=< yk흚gy+lߵi=@l[<~ٶXϳd?]\lG|l4Vy5[ϳUlg۫V>ߜgyg[V?G|<܏~[lٟ߷?gy;kmϚgO۟ׯ؟{>l<۶]/϶ysmgV=>il<ϳmmlۏyWl5ٶ8f?ij=ٜg{>^|<ۆٞywjmg߷y6y<ۯZϳMӜgy<ۘ@lc<;PRjO팚g{<۩yQ~mm"jymg[ϳ]lg^^g7Iͳ>~bóߜg9vųy}l7.nγVl+׏r56[ϳl7٦yyj +jgsg[6xmӚg'<ϳ}!<v=>6xgw<۱ǹ_Pdz}96jٳm(ha6ن=۰glÞmس {Q=۰glg{xͳSl<%ϳќg;v?gg5G4wly?g[9vLó]~|IͳVxg^yjmg^yjᮏg{9϶LͳM^lyo՜g;ٖyo|l6lγQl/g{^y]kw˳=dzzS';g;<_lyZϳykmlv>'5϶yy jmg{y}{|g.yCkmgZϳ-Tl_y;g;Ϋy:gۥ9vYͳxyzx<y<5϶dϳ}ٖykmg[˿g[S=T]/gVy#[ϳSnkγ]Rlo϶@yjK56gxjmˎvx٦x571gl~l~l<5Alv~ϭy6?yi;g9ij՜g۩ޮyZϳmxkmŚg-8<5jͳl<:=϶fͳMWlxg;Nysg~< y676Usfy[grsm<yEjm"iO]?`yjmg{:vas홚g{ٞy<#y6?_yAvHVl?7g{9&~óپzSGViγ}nk=6_s@l'g[ƭyEkmz<7jdzPl߬y :6Wsmm.kγ.y):g9vss<ۼyk>~g9vrl7vm=fvm=϶sͳTl<{vgyg\sm5gnس {a6&lÞmس {a6ن=˳MΈ[{DlYkDlg6~Pl;g96kY=ۯZyjgۿg{9[_T϶e˳MTl?yckz(v|smgaͳٮjγyqzl|<֪ykgl5~לgh=϶]smg{<m<Ӵg۽٦xm<5϶nͳٮ|óyϳ<ۜ56Wͳ]l|gۭ<.5g>yjmg|l5ټFzg˳><^5vcFכלgdz}l<蝏g~ͳc>lxwl{w=Cygxzg[f~'<<۸}lc<_xk퉚g{ٞx|mizó=k?=|l4mγyVys/5&_ʳ}Tsie7gۣfߧ},y6?x6x67y6mg~dzijóQl?hγ.zտz_~gN<۝]6^yZϳz@k:gyg9vuu=Uy>[fͳ}l߰nγb]Zl>lGl7lo'gydz|óo]ok]/RlǷg[9϶v˽~fy:6wsmC})'<ۗOlُُ_Dzٿ6^yQkzdzh]Rl_׷_׿?iy_o_׏<۫5@lO<۟juA_yjm߾^y^lγTl<#56]ͳml>Ol+4Fzx-lv<~6y=yyg~96y}ey؟{<ۏkdzmj?^?\lx6x6xWz|mWz'zгxS?v~)vplُ{=<5vxMsg;<>5Śg{|<3y5lk<~5^OߜgٞhH֜ggs탚gNlγM~< 5϶_ͳ[l lwhNx9~sels<ۼϳm큚gٶy-<qy<56Uy;yEkgۡٶy˵ϛ<5϶]ͳMn?vKͳ}<ۜl+<϶PͳWlGt|ͳ}ٞlg;umϳ~my[ټپXlh?6[<ϳRlgfͳXl<56ig[u϶Ig|ٶxmg[̻;4ϳ=:϶y[l=:g[u|Ƴf^l_n}(6m<45϶ug5Cy?w~{ٶyϳ}uyݺ<56Yͳm`x6wO϶W=ʳ<ۓ>ϯOng{<]/ggg<<ۆ&y67Wlgَj?϶Xͳ~;mLϾ~mg[<'zޚg[|]iyjwznuiͳ=TlK<=5z϶zɳdOi? 6<ۭl'γ=ZlO<5v_n}=x6׃mCx}RͳZl_y56[ͳmTl+wxZXl[~igo~g_b_l?Bͳ\l?3׋lߨyy;zyZ^t=zngJO >S|5vltx^o~γ-d0Kt<6^u=l1mg[N7˴γ-_l?yu?kmϳWll?϶?j?C^/]l<=g~gͿ {Ͷ_7a6ن=۰glÞmس {Þmس {~ٶ_edlyϳ:6f<_[َkltSl l{γQlgyzmyk턚g{پSlv~mg{|ϳxyWjmOmgxml<ۡϳ:vZͳyq5vzyף<[g{l?vR}ye:g{uO<;P>Slj?6uzÚg6ol_l_yyKZپ:z(϶D<Gv~y?γ]X3pykmgó]zߟ&ogQl^xt{V_l<_kmϳ]:vJͳXl'^Sx6xi׾>V|Qlg<5϶>|].5_޿l|ٖ3_{>t<6vg|=3_{>k7xw:g>.|}zгM:vym;϶ϻϻ{m`?϶y^<]Xl7Oy}76yySjmgYvjٖyO~_=yzxϳPO;vl϶y}mg;\k?gyγz@}Vy\z@}Eg[<ۜx\]fog~dz~lu<϶]ߨy6|~g[ٖyCzَmg{Ojcy}?/ySk5g.0b76>o~Rdzl?0nu,ig;ٖ2ףu~dWy;϶Cͳ=`ޯ/x휚gCͳ=Xl~x6/g۩ua}2ד<5Vͳ]lt~l+<5vGlx<<u<5vzyj퍚gLͳSly?ux+}y kggygkgNٖygپ~mg<3O^y<ۉg:ٚgۺ~Qlu>1gۮyj:϶tͳl_yYϳRly:g{h?fͳXng۳ٮyǃg[lul<~ϳ:vuü^^l^yZپ:o=gۡپl^ϫlγx5}}<۷Slw~>Gγbz_lt<϶RͳXl?ySngo( t=g}ͳyk 6yz`g[<]ol˘g{ʳ<]?k7xm^?xqZb~7?׻γ^0/j^|<߯<ϳ-QlK;϶s<yu[~\lce^jmǚg[]]lyk)mϳu75vjy6x6xm2g0׿yqjm>gۥuslӶγMb1 <5gپR<^blγSllw>?Қgzʳ-d:϶xͳYls< 5`ͳ\lUbl_4g3l/l3׋<~z:חykzϦyϳmTl5ן<?fig>xy5VPmdzyóVlO-l<'γ-z@=OmyϳkzSlmm]Aͳog{u}Tͳn__ySxlךkgsͳ]Sl<5϶~ggg۠^llG^P_ڿl[m=oÞmس {a6ن=۰gl#=۰glƳ}e͑ͳkm?@<5϶mykjg[y;?vw<lγ٦o?6v_?vsyUZ~TlgَyjmvFͳ~y_γ~Plߨy:vhͳyk[i}(ٮ\pdlW<۫gyngl~~yϳ:6sͳz{}xͳx|l <4?ó}ϳγZl[t>g{<٭llγM:y[lgIͳw>?WPldzռ&xkk3_cγdޮ|<\5vNyi[kg5׃i+zgfyg=my5k̚gyjg.4_}^|]oSuy>>h?T 4ysͳMk?1O7>~=x<ۥg[Qϳ}\lW<ۓ56iϳ<­l vmgۯxmg޻_o:6kW=ʳckmt[l+u{<۽5vLyjk5϶fͳ-`3wγ]Pmys;gdzz@ xyo?϶rͳRl Wl;yg;|_<ۦllg{umyYkm7 YZfy6'xZTlW<ۆϳ:6K?<ʳxg<یپjm# jx\/x<{<ۥg[ugf߄#=۰glÞmس {a6F {a6g͏G6v#g[uyZNog[S?ʳ5n?l+<%5v՗<>vK<۾>?l;w<6{<ۭlγ:tdzum~Zl{<ی5϶+5nͳ]lcu>mD<Z>:϶πgW<[5lͳ=Sl<۩5y_<۔5՚g^FkguyjmgۺLJgۦz{َnng۾ó~myZ|<56Iy:϶.{_?xGkml_ykW>W>vZ<7zye?gZyUj5vddzl<۽5vOͳyγ:϶Fg;<m/vE6U<56[=g[umgۧó.yq;ϳ~ym=mggͳTlt>mg|yj>oϳWlga<m37y;gvj?v^g;u/5vZy;?vL/]lgw{<۩l'iqy-5϶ǯ׿Qztyl<ۤ7dzcx4Ol >[l[<ۋg;<5v}ͳUll5_~hgg|IͳlOv>پ_lϼ=]l}޲V3Oחv,ͳ}d'2Oγhg0Oy}yij=8myKZٮykm:6fͳɳM<{~:y<>|ٮR~y_k;0׏ϳ`\9٦~lk5vNͳdz-_lK<5y|y6϶Gl<~=~W8y]x~l<5϶?gs=g;dzUlGPzϚgiͳQlw< [<&>϶k_l>onewy]km64vxyj'5hͳRloy<ۃyߵg;~my<ͳUl<*5vY=gq϶Ry<ە}=py;g{i?LͳmXl7<O56yjl γl/g{umю֬y;g{6i?ϳMWl_lS>u~m֧x?W:͎Nm?϶X<ۘϳ]~g;ٖxyZ~:6Yg{xϳyl g{yϳ=dz]:6Oͳ=xZ٦|<ۦl<+5γ=xW>V_TlZ}aͳ]kϳ]Ue3og~ͳ}j_6Ollgܼ]lyښgv<ۑ5϶kͳ]Sٞ<zvigumgx@lyjgn'y{jg{óɳMh>y jmgl_0׷z}'G}g|NlgG_g;<^:v\َyckm>ol<)Gg<^<ۙz)xxMlu{<l믙{kmώu|<۔5vml'γa7~g[~~ž^Ϳglgs=g;6yjͿl56n}@lc<<۹zг:϶cͳWlSw{Cyϳ}˳Wx:Xz?gFdz~ykmg[y6uzyogy#?:ʳ:6M_?϶HͳM]l~~ykuG6qͳMdz<'5vKͳ/vI_y[ƩlγxI?<ۯϳRl<$5gCl߮yq?<ϳZl<7ϳ~klxϳyl0O{yYkmg;ٖyk'm kϳ}^G}پao3_׷<۟l<5϶vͳyγi_5_癯zx/γUly6כxﳵγ=elz=qjJ#<ۧlex}~ͳlyouyo<ykިy7>\l>j4Os<5z2O׳}^y%9l<iپ:vx<>l?y)5v}ͳWlOl/<56\\y:϶p<۸56yy+<5E/>_]l0{_<5g<^_:϶}ͳPl<"zyl<25ewd}nͳy;>qqټlgum2x=y3x}y^ug{<)lγ]S:p><ij}g;<5l4k<5v߷vx6ͳ~g5gپ<<2%z=پųy?ómG}6ʳ:vyχymmlo<Ʈԋw=omg{پz56x< ٞl{>6k<}ޭWl):l?3sg_OUlv<϶gϳ:vW<gfogRͳ~mZ}=o3<ۈvmgۥumϚgٶxmg۶\>Slg6Nig[i?v@ͳfx+56mͳ}.l~>x5=g;vo?vb<۝ͳSl'<<~[߶u6yjmg3l Ӂ)6y~˼a^z;gۮ˳}<^:6Wm̚gۼ_9پ:~`_l<5϶|ͳ-fog۹óTl:vrͳyo<۟_l7γ<^_\ly}γm`yyj/óeɳ6Uo{6Ϧyw<϶ͳZl3gyͳ4UzJͳlnggٶp=gxߺPz϶۶g߯g;y#k툚g۬ϳٞy:gumtgyml߮y뽺=mq[akgilγ_?]lw?Vlkl<ϳSlSgzGyjw^|<խlw<6n<|l3γm_l^?:vMͳyqjmgۤyjmg{zy#kmg۴ٞy_W?Wlg{ll<5/혚g<nys?@lxݚg}ٶyujg[ٞy2Yxx);?v^<ۥ5϶hysZ~lgܿk퐎~]lkl<szĦ#gy<ۧ5ԁP~:϶[}ͳ:Dzy/j@l}}gljdzij=l~l<7YlyGͳ[lkOϳ=\l >\ly}?yjϳ]Xlxlw<Ty=\\NyjbyyjyR>[gۯ٦h?6ZͳMiݎ϶s4͚gs}g{<ێll{wlo]/SBE;%[in$UD$T¢K=kf{3}{>Z^{LUl?<vFykkgw=ہγ]?϶iͳ]l<*ԳPOz<ԋP/WlP޿9϶-]6ys0myguZϳfg;?xmg[VyS[/u<϶isųy}lwxl?yjG5vbͳTl<ۊ=>@smgUͳ}y)zyOgA=ʳulǵ8hγ-?gfxmgۦ|o\?vjs5϶~ykml6>li=g{ٖo=϶psȚgۿ< 5϶пۏl?oγ=^lt~ٚgaykSٖmγ}9϶Xͳ=z56yy|l~?l_y}<+ykzځc8~ny[kg;l6Ny6y/<۸ټx6g[xWml<56fͳ}+<<56Edzޜg;lw<ۯ:?6ckγӜg9ǚg{ٮxm_<ۍyk톚g[/g۳ټxykm̚g>l<=>6Smgg[96t=osњg{vx<ۗk홚gg;9vRͳ_l'<ۉ5϶^ͳ]l'7}<֜gQ~lzxuk^<ѽx[ϳYl<]϶Psm<۫5lmgۨ6yjmÚg۸َDZǮy߶g;پQl <85g[>q~{5϶hͳ-VlK<9g[ykmg{o`=϶Dͳ-RlSO׳4پXlO׏<;v]dz{gyYl[۟{=۟ll۟;ykmg;zx<۞[lkPƳޜg;9lS4&yCjOv>56~yjϳ~@~0g۱vp?ٖyejmgَn=Zsm>mlKgymg۱vyol'<۽ϳ}َy:g۷ٞy1jgl/O7<ۢ}=<ۯ:vwͳzm<ۓygl5ٶnγ}yjg;Tl}<5ayjml_ymjmgۺٶy6?<۾=_<5gYsmdz-Rlt<֚gny;k펚g[yﴞg{+_^xYxzxjŚgY=g{9`ͳ]Ul<$5vEloγUly/_l+g[|9=g~y}~޹9϶|s5϶iͳPl϶t=~ޜgͳ}lOlOy:YzglOmϚgvJsm՚g[y6_yj.neg{>O{sslw4Ƴ{gs?뱁٦jγy}ʳgۼ< 5vAs zϳc?]g?]?Ҝg{ٶj=zͳ=zmg;<۷kmxy~lS_7t~mg=϶Ayql_OγQl geyM}>퉚gsgg{^y6olmγ=j]lg[9϶Nͳ^?Ult~mGqy_u~mg^y6x6xlVsm-/'l~g;>3zw56SͳPl}?yl}gs?g~Ulu~Ϳlmγ]~`Pl5γl<ێ}y^iγ5϶Nͳ}TlOl|l>?ó ϶Lͳ-]l&5~(֜gۡٶw?gw?9϶aͳ=g_Zlv=<ۉy67ٮyKk5϶sͳٞyq~gٶߓgϸ_y߹_Pg[>_lkγgeijx6&l#mijx6F<ʳ}f&uymlKggs턾>m<5dz;Plwv><۝56Oxٛls<ۭy[ϳzlӶg[nxmy6F>Qlw<6Ashټx:g[&mų=<5϶pٶyQgۡ~g۶ٮy}~sɚgdl<ۉ5vrdzʳh\{g{~rglm<5vrͳYlWxoi]lߴ_x;~~a?]_SlOoOw6o`=϶`dz-`?yVo+=>jͳ-yQ}dzԜg϶nͳMe^O]l_~{smγg^<g\yjl?|<۾yl6.?>٦yk g;~Csmg;9϶ls35϶<ۛj5vc˳Ҝg~~~|_hg/zټlg4nxg~~lGُc؏/<ۘyfy_ۯ{<]~ͳml.y<:^1glgmپ~@˞O:jg۹v_kgKsHl4.y[ϳƳuv?z<.A5϶=]s#^ӿ<ۻ5϶mͳml;4ٶykmךgIͳmj_oVl۷g^yg;gy5kmߚgޫ'__<϶{smg+vpsm~lx<:?϶Yͳzm<ۤ5v[ϳMޜgTͳ?~A|u}g{<[ϳМg{gAyZϳ]Ӝg;~Rl϶psϳ]ݜg;96ms3yu~z[پYlyjmdzMQl~~yw<gaygs=xkgDͳ^l/t<϶sgGy5w{smn?oϳުy63/y<=><͇lz^j=vx~smݚgjͳl_߷_{:γj?]^yuvr=glo g]ͳj?=0پyӛl+<56t=|٦lγj\ܜgJͳmYl_l\ќgg;9vu~\l?y϶t}is 6m=Q6tlk6o`=϶[ͳZl<ێ565vqͳ=Yl<ۉg;=ų}؜g>y6x6x+l7viγmVl_yjdzɳ}dzMҜgl6&kγ-ޜgKzsmgfye gxgۮ<5zͳPlW<=vHͳ}&yj՚g۽lγ^lw>mlW|lOyZϳ}9϶Yͳ}Vy?<56Oͳ]l6lγ\?p>~g{Vxgty[ϳ]ۜg[ٞm=6yͳ}l4!϶osm 4g7ly[ϳm|8^ϳzmdzg{ϟlx<ۧ{<5fͳmRl+u>mg[γóykg{l4<[ϳ_ll7uzmg[ٖykmgIҮgJͳ=<5v]Wϳqͳx<5϶]ͳXl;<5Xϳnxml߫y=kmglcu<6vs5϶hͳ- \?llγRl_l=v_ͳ=zmg{nx톚g@l<6vsͳzm6~Slmγ[lӶg޲[ͳ]zmlh=v燚gnѡ\zy9;dzyk펚g6jγw^5϶ހg[϶Osmg[g{Fx;grͳ}ٮ|<55϶ey܏gy:gۺ96A˳_llWt>~ygyEjmny[j֚gny|nγ=yl;<ۙ5Ϛgal?y6'gby{gykmٮhγ}VyIZϳ|yZϳ]z<&56Aͳ}ٞ&lγ-\l<7mgٮy6wt}Xͳ=<^ޯZϳTl'O{Tͳg;ټ~x6x6ol<6p=<ۧx6llW<5v4Cͳܜg٦g[<۴^Oyj틭~WlWg[9϶]ͳ}fyq~m<ۤ=6Mͳzmњg{gsٚg>=óxOw<6is56uLs5~K'6[y l^糿~x﷞g;.y+:g٦ٞyyGu>m<ۊ7O<ۑ5϶x=x=Gͳޱ٦n]]l__;_ׇw=Yl7x<;g<5 Wy6x6xl<]?hs̚gzykdz=d?^?\lt<6[<$=>϶xzdz]Tl3ۏ\6Gykm z^zηguͳ}~~~^<=_<5=zig~xǛl3t~g~ʳMl_oγM]lw؏׷ۏ?glγMlc<í|<ۦx쿽׿xCkg߷46v}yWZϳۜg<ۮ<3lxm?~@:vCͳ}<ۆ}xOz3yOzg<<y6x|P~ח]϶=_<-}?x6|~got>dz̳ݜg;q?^֭yujmgzY ;gt϶{s xl'zm<ꝟgVsg{o yk 퍚g[KԿv~&l< 5fnx<)5϶g[g9vclhγmo\?@sy4پPlW>ԣlg۸/϶\svmdz-lgFyŁg[٦\cyپl:mUgۯ9vuW<=϶Xy ;v^sg[<5vpylGzٚlclw;g;f7m͚gaϳmc?^o[lُ׋ُ~lW< _^ml ns흚gmƨyj힎lγ~@}wͳƳ/s?~ٖyzxw{y6|~g"<&ϳ̳}~@5^/ϳ~߯56~x׻u~ xl<ۧ;϶ݚg[َyjm_gnóMg{lx<}Y?7x< ~@e[k_~mly%kmizg[kγ]VlG{Ny3jmŚgVylG<ٖyog{Jy6.oγ]aJͳ}َyey(~<7ko5vtͳ]Zl~x6/g߳n_g{;mҚgdz~A}^ڳ/<6F<ۈgl#mijx6ڈgl#_xW{gxߡ~֜gVͳَlγݜg۪٦zm٦lw<ۆ]/`sm<:5@yjmg[y{kԎkγmVlӶgٞhγ}9<g{m=6ns<}56sϳyw[ϳPl<ϳ-y3l<%5g[lhγmg;6y{:g;9<'lu=<_l4fyg{vyMj5ϳ=|gkγߜg{fy:g٦yU:g[٦o=6CͳmzykmI<ۤ}x?w~mlylt><ۏjlwmg\ͳ}~gۺ<8g^x퉚gۦl<[ϳmvڜgvsmg[mγMxO϶ddzלg{pfxlc5fy[ϳ}h]Ql_{y6wmg{l35ٮxm5< ϳ]`?]z;?vͳzml_lkO{Og<ۯj{9϶Fͳe?]Tl۴g{g;~^ٶ_ʳMo\yO<56Fͳosll=yy~syjflڏlg6g};?6~dzg?^?RlGgny;j zۚgw=Kͳ-_l_ֿglgs?g[g~!϶C}@lگ{7&_=kg;lדy:g~9~|mVjg۹ٮr?ٞr?zٖq?usmƮg<gx퐚g;y6y:g[7~yu?gdz\lP?ۜg_lG׻{vwVlguԯ<ۅ{yjk϶ψgl#mijMg;<7jvMl4r?^gusm<5l7ٞl{_zyo7~Xl(Gy;gyjmgy^yjykS=>fsmdzzmg[xm<ۥm8϶alg{پWlu5gS_/vHsyz>x](Nsmdz]v yklp~ٞy;6{ͳ]׳g[l7v<5l6γl<ۼg9vSNp}y:g9g{ޫykmg[&ylt<۳yglmγ=Pl/g۹ٶ9/x5϶g4<ۋިy:g~Pl/uzy5[ϳ]ly/v>mg\ͳ]<ےy6?dzMzmgټ_lS6Vj?ٶ3]y|mγi?]xjgt}@ͳX_4Wg6r=oze>Og(Vl?ɳųXl_y6wvtͳzgy_<95϶Nϳizg;γUl_{?xm k]϶_ͳxml[؏xIͳmnk]vϣ_vzm9zggt}bsg&'yڏx)mgyik=mlkٟ۟c؟v})vIl`?^o?^`?^d?^l+ۏ_y/ڏקg~4ٖxm:6^9vjsͿglgs?g;~~>!|ͳcg~>οϳg{_yMl7PozT|ll_s?zlw=<۪yijmly6m0zl <NϳXl<5vLپc<۶Tͳ}ykmg~ޭَwy'x6/g۵vy;vwsmK^?Ul<ϳ}Ԝgi=hͳ^lzdzΚg{γ?lWw~5`ͳ}lzmz<~5϶ͳ_llG56yq{>xٚlG<ے5g{ꅚl{x<۵yl5&oγm|8϶Cͳz<띟gۨ֬yO<_<=y{k]vLͳ]Ul<5vnͳMl<>nyc{~y}>gͳ]lx{ykg[Vykmg[vys~<ߜgՃmٮg{kγ-Ӝg{6iplt}<ϳzm?y}~~< 5Rͳ){l~l7y6g~ݡγ]g<}g<-6Q:϶]ͳVl{_ 56l϶yólouoՎdzu 6yz`g;uFt%t=yzy:pNtul<5vBͳ=h~ǫyjϳ=:'r}Fl|x6?x<^5zó]gx|>^ylޙޙWh+~~^|]l<~yͳ<_{y}xs[ٮykjm}x=xvCdze>gy1{lyϳ&u=Pz@HlS<5϶k7_mϳ}6u=^:϶B5v|\ٮx<Ʈԟv=֯y#;>6EͳRlcPx[َyc]yϵ=϶Xͳ-Ql<ی56Lԯt<u=Vl{jxZs==;p{<ԣ=5϶L4p<ۓ5 y^jgٞ5?6:BJͳyYڞg7kg{log٦3Ojmϳ=cyG<߿oy7Z^ykm>l_<P<5gTͳϋg;l˶=vbͳ]Vlv<+g;&t>zgs}g[y1\/Gw'k{퓮}>g3?l^P:϶5v`ͳ]x6xڞgBͳdzzAc϶͈gl#mijM8F<ۈgl#mijxg>xywjΝglh>Oyg{ó^lO<9=<)5v{6{llg.j{myOt{<_۞gl/N;<|xڟgu^mg^o6lg}{ymZnhgyZyjmOmgul<ۦ=~<۶5v>CͳPl˭4<&5Z϶_?O힚g˳ly?=6G6[l[=6vgQ}gۻ6|y{~l;t<~<ۡmϳMPlG3<=x-[vimζ>g۰yjm>z/gz|yC;myڟgM=}ߟGx<ۇ?W:϶ngۡ{ټl<45϶O6W<ۙgs/yj_mϳmg;y:?@lvqdz:J}˳ykmg<<]O]l|pyg{uE7adz=gzóvcl>lu<3M·gu)#϶YͳyVjmy=y:>˶>Wl<5϶u7϶]<۔=6yͳ<}m{gzg{\o6_gIMl˛Izl_jgV0lͳe|yz>Nlgum~y۞g۪Qln}n{mngV˳}_O<ҭl <۸lvy6'xOwy="_m>?g3?l[<۵Կp k;\ <{<ݮ{mG<ۈgl#m6F<ۈgl#mij<&5϶Yͳ|³m:ly۟gCͳoyٶUΟg^ͳ}LJg^ͳΫyt<팚g;6yS[<}l壆l=g{yo<7jm<ۢCͳl't<۷kmŎϳTl<5Dͳ]l7<5gۺٶylW=:gl~y^<ۛ5ϳm:vzͳ}y[vy]k϶Fg\jg[GyϳPlG<156]ͳXlt{gٞyk=<lsγ-z{XlO<<ۚϳ=<۔5v ?v[ͳ]lm۽?=dͳm<oͳo>g{umԼl~xKjgzͳ]Z6gy/lטu<ۼz2zr=g;<^϶Udz||_mg;x#jg;َ/}zг}<].xy_=γmbXٞyjgy~X~l7<۔=x=ڞgs-k5Vhgu+6y~ywkgy~ίy<<5&zóټl>l>?l <ۜmϳyjٖ<i￝?RͳXl<55vw{<۱5϶d˳SlK<ϳ=Wl'<5϶adzy ۞g{ٖ6_<<7_gulu=Nl7lcϓg|]iTl<ۯjϳ:϶yk&i>/y:pxWx'4϶F=gn6F6__3Pó?<5϶nͳ-<³]:v5ng{2[]|<5lWP_z׽Pzz@·g[o=^<Կy6mgz@x<<5϶O56m٦ykm5;?mgƪylγٶl#mijx G<ۈgl#mijxl><#\fyɦjmglkw<56]l{γ\l3=϶W<]=<5g&x<=O56zwllW=϶X~<۟[yλ }rg~lnmgvyγ]:gvxw<-gg[.n{my;>?+ϳ=lu5v>6u٦ly}:vi~Zl<۸5vYͳ]\l[<|5vIͳl']qgG<g?gyo|۟g{ug{^y]oy=ٶfjg[6vg[Pl<p>ҭl'u<ۘl?l{m~yl_y=mysk ߷<5vml^x;L߻}킚g{y}mʚgtly:mΗg{uG<*guykmngh{5g;yy?d϶W <<ۤtgγ]ZlOux?ͳ]Zl<ێ^Fl׽v~<ϳyt~mг lg[پgd8vySl<5϶lϳ:6u6Qγ}Nm{펞O<+xi}gӞJsOóMy [ﳙyZټlv<9s56EͳMYl<ۺxZ7?ןmggijɳul'<;SGg|0_{|x >p7x?6olu/l;γQl<ۙϳ}ٞomnig\8<ۧ{yv{<۱m?g{y7۟g[>ngyv<ۉ^zjm·g{[_u#>l?϶B^yC۞g;Nogumyo۬lsw<856gͳVlg<7kΟgmϳMZl@l?ykmngul{l'γ^ly1jzԿl<ۦ5϶Y=g۪ungumzóyټly'kgVVͳټlyO<Vll;?g[y6_4vgͳ-<ۊ56VdzSlwSvhg[ٖGygyyͳ<=><ۯkg{=l7Okgy><]Yl߮y ng;<]z۞gm}ͳ-m?ixxlketǚg{~ l_yyjԿVl<ۃsٖx<WmšgyӼ\a^wy_v~<\g;|>.y6?x:>϶Mͳul?y6w<ϧ<Ϗ<_56Yͳmlg&ٞlg;yjmgۧl<۪56svy6xמ/5vyg~ų}yjmgzϳ}^6_|:϶޾l+?϶>yk&&ϓgVnΗg;|]?:϶R<ۋl/}߱߾rǛ[_}:(<7kg;پQlَy|ykm>hg[^5׏z}xvNͳ^luxs;6{lͳȳ-q5xOkxCgpmy_γTlv{g[l/v|-϶MlP<7jxw[N?r=7lp=uyZ>p=v=g(_Ou=g;ykmggx;mgVm`mgzJ?x<'kϳXlyjmٶykپ]lgxlǶ?6glyO<g{ϳmlWγ]Ul;<^ϳ<5g;َ|y3?yjng;ll״?ٚgƳ:϶TͳQlyk^x6/ͳM`>ó:6j^o}s zKדgzͳ]:6Fg}<\xkzw8϶}˳Slǭ<۱mϳ]:6Eͳǟg6cjg4O³wj5Oly:mǛg;u ϶yz`g٦y}svi{Ϳij<.iϳ-_l=vy_@lt˼\_sߧBͳ|̳]:&zógx|>|~~˳=<5϶>uUgySlzvyOݟny+jmٖ<۟kmg|xC5ubͳ-l~hyߘky{ 5vzlw<5϶Vly6כx?OyK|g;|]mYlv}ߚg;|yZnyi{>l7˳}<^]l?n{m xzó·gI? x7۞g{<>{?ongۿj`g<<^ny%loz8϶O.l{?g<^d2{ogCͳc1Wk;?mngJl/C< F<gyjmٞm͚gmDmg{<^?<l_yGgy~lӘ׽ x[|<~ Cͳlhg{uykmngdz=Slc?6NlS<ۤmϳ>mzAng6<{_l۵γ1g3?l[<ۑG^Pz;vCͳdzzA=1g~M<ڈgl#mijx6F|yk+ϳumŎdz=Ql'< g[lv}g;l4llγ=yw< ~yYj|~<۷Z٦y۞g~ų}پTxUlpc~nc5ٮ}M,~:gg[umg|lc=Zٖyj%_x?<ۣmϳm:Zͳ}٦hggel۞g~l#zg4_lǛ}پxjٶifo{g;y[ٶmgy<^oyó]ó-d}yn3y [6yjΚgۭv5O[i^zmz϶Zͳ0ye]r=ٞxkǮԋγ 3<56{ͳz@Sͳ̳-z/kَr=>Z|y=mgίy67~n5{y?t><۵zg[_col0{>γl/= dz]_lt=?·g4p}G2F56ol?kg{پr]l<ۇmϳ>lK<56kͳ-\l< y;g[پTl^P|dzZl^zAߏ=N#mij=F<ۈgl#mijx6]㇚g{>~Sl=vmͳbٮy\:>g{nyŻ}mњgiͳ]\l<۷k;5vJͳ^lߪy=klʳg>۪/϶b˳]Ql=vy϶oWm.m{혚gWl_l϶γy<LJg~ϳy϶Z<5yg۷lj{mylγg}zг=d5O<a^x}6/{3/{1/{1/oolg?p><:zggg|]_l<mϳij~<*56i Xͳ`yuy6x6xJ56Yͳy{[&y۞g[|^?b>mh70{|2?lSγmSlbx}yEg;ve<5vGͳ>Sl<^jmgg[llw<ۚl>lzͳ:6ylm{5v8CͳwyOzϳٶw=y\l]<<֮ԯ<ۦԛP?^l[Pz·gۢumΚg[wϳ-z@gq}<ۚlhg?oyqZ<ۗڟgTlUl<vG}l~y;϶kͳVlv<5϶Ull>lgl3_{6_l>l>?lOS۞g;ٖy[γ-<ۺ5϶sͳxCjmg[yikmg~ȳ]ls<ϳ=ųmjkg۬umnuvͳ=Tl盯e:Qugg;ٖ2_W<$϶vͳ<ۥ5zvzɳj5_>l=my۟gۦumkv}Cͳ-<۝mϳ-:y.l{maxgdz<^:yjM+?6fͳm'4_>D56qͳMbښgۢ>y<ۺQ>y><=<۹5vyyIlo?϶y<]Tl<۟jm~<*5y~y6x[.mg|^dzdzb>y;kl p>QlS[:yިyϳnǨy?3u5϶녓<ų=jڞg{fv^Xͳl˵γMUl=z"^ͳUl<56Ndz>M:yk _^uۥ1ml|糝lKx>ۑl|#Yf[p0ap0aL;f?,{'ed=@=a>}}dOz?YO|'_zz%?YOo|'z/K~៬g9}O3zz>YO3POz'Cd=}a?U0?;扶?ŇwqaS?c0ÜY?z?0G|sMX40#ü\Nϯ _a?̦9#ͯ?0W40WXcao{|\sM??0|3EÜsv?̹040Üg=*>zTEsXca||s}C0?h0?*?̸0۱0߉(X۞0LRoyn?̫0o5f^Pa^/_bai0{>oo 0_)__?d0n0fX7ay2fsmqal4XYba.Z|]?̛0G?\aW\۞0Üxs Xg۞0/>y0O0g􇙿|a/_ˋ/5py"f{Xcao~aƋ5Xcal~a9?qNqa^j0/ÜxaΈ^\T\üX\/üW\ca\OYV\caF+_|-f>v?:076^a&yX9?̹04^1baFŏf-zf?50sMaf/?S`a?vz<~>=n?<00Ǘ?07?ͱ0_\EX?"i󫧽sk<xa6*?ٱ04^a/0;ܠN_9ì􇹳ϧ0'XbaL_\ cavU?ǻba^]sQø=1Ebo|!Ƥ7R/;~7,=oqo3oGĞpSo{~+kxD}D}>qGqazX/m?-G?ͧ?̫f[\s::ާ|aVW_ǛcanU_;ffW}nu|:~#fXbaxa7zX40oY:fXzyJߦގ[0>|a~\3W/8ϔ?̻0ü~?XKbaR_Ǜ0?.0쪾wq?̎0VOcayT==<D?̓0yJ==?basyqa~V0KfX_l\0øfX|X{0?z[0S۞q>\V;?ca/_E۞0_Y)fX3g ̧?zH ߾_XoP\{߷g?(qXQ㱿sX?2szPaU}^_)?9Sޏj{;0ηz@Ìst?" c= >6Xbaylj9|a_z0G?-96f*2Tr;_axXXYgh=z@|x0=a.?0[070]0+Y|睿F|,l=z@'o&&XSfXbaF~O~KbaNR?ͧ?mO?̣.^0X1ObaY00kZ/?[0ߴ^z~5sv04^ 0?}m_w\0q? g>}amgن}amgن}ag5|-l?i?|c>]-g~q>b>+Vl/|c>ۼg8mvg0=l|϶}>پSvDgJ|b>,g8m|َl|gۨ8||َ/vF|c>,G`>l4mglcg;=x>b>۳1X϶gq>cl~g{|>F)6ng{l-,Fg[|>1٦(g2mfl|_ClvlggJǏ6u|Ic>b>1mژ϶X㳽Nl5~(m~g8)Mx>{1mx(j<|Gc>ۼo ?m϶^l|7gۡ8|b>j6l+϶\q>>>l|6|b>nvlc||b>V1W]ٮl66Cq>ۮ11mx(|c>?;^|c>۹4LJ϶pgs}]T϶Hg[0mo||U\l|gy|nlG|=b>|1mg;wl7#}ž?|gۼ|>l{糽8~|y>|=>ulW|YRq>ۺ1킘϶Dl-g;+泽fl|mc>gb>,1m6{g{m|b>Lm|c>ۗb>.MQ>vk|糽پx>e1vUglw~/gy||yb>3糍Q|泝X>s6^/C6z1泍g|O|Clw>~|7m|;8}G=Rbg;XO^:~8Tu΋پQO56}g6}1>{`||>zg|>۔lk|[َj{|b>D_9|c>ۗ|>|gtg--nl=>2vls㹊Nh>>+ܘ~v~g;/]nl;|Mc>ۖ1m^&ܟܟ?)g:8mLu|z|糭٦l 6϶Pgiۗߑw?T_Ǘ=> 1&V_|7|mf6Ug~.)g{J}]T>mɘvTlϨ糭ٶl|/6l,gs峭Tx᳽kmvpg{2ٞl|c>۟c>11mAvhg;|׋2|T϶tg;|>N糝Nlo>>!l3:'g;9lc7~6Fg|>ob>1z|[Ø6n|ٮ)g{8|%c>ٖ*g;81mG})泭پ9?|ImvO|ub>oc>1gsg[پپl|c>mvEq>۳1x;ߴlg{-϶T|-϶Ug:mfj~> l|>|wϦP>m|ٖ-g~gJ|z|{6 ٬'6h~>9l|6?}|2|b>ۢ1mg;|>>ۢMZVپx>t<g|g{ٞl}>l;mQg1mz l4?1m͘϶@m6l zl=6~}+mW>|k{|Գ|611헍8YMQ6Ug2پfllswu1m^m6ug;g;2泝~َl?|+'g;6~x>m1?7|1{||w6?;|_7l㱊-g[8lm>>1mx|/}>1m6^g?泽Sǟ*6s1m6ag({1m6Fg{>|l>_|g8b}|:R?|ގlǕg[lX/V՘f}϶ǧ8mGls5?ml;Cl>ۉgۼ8m b>f1㳹Q϶nllogOamgن}}amgن}amgol=lK5l]Qv|5R>w>[u6Ml{||b>۞1֘`g{ ,gۧ81ml?.g[+#϶U|b>1m6GV-WvMl}1}=x>۲lMl;|ٖ݊n~>R1پW϶Wg[|>hlO}86q|6_>wb>R-m=^|> 1g8m|||s>l=\϶Rq>e1튘Ø϶}g<]nl?|Ήlg|;~|o~>ۧ|g;|>#11m6vg'泍vk|َl'}gN϶Rgiۭk`lsg'l|qc>b>ۍ۝c>J&l?|b>߳?]>;1m˶g<-[>msc>۔}|b>/b>ۏb>ێg{zq|&)g4}>gۡ>(7cg|雟g[8m՘϶Jg|%ٖl|糭Sg-糽]϶f#x|c>0lG=پZ>||58mg;%^j^n ٦lS|9c>.1m糝lk糹(϶qg[|b>YΌlg;81϶Igl(gcgs=糽Q϶v|S׶g{|>S1jg್^g }Nm0|Ec>xx糍׋|l?i<||6mپQ>mC>ۺl?lg7HMl㴿Cl]8^|cvhq>lG|mu:޹|6w>ilߎl|| b>ۆͫ}gO==plg8϶zz g[F=8m|Ë٦SO;糝||c>/gz:8mg{L?~n>>oٶl|Nj6+g:mٶl流9b>Όl?ll7lֳ>{)#ml몯7_>ۗxͮRO5?ll|Ggۻl|m6?|c>UQ_ǿ/v:K|]c>k߿϶c^llmۏRfvpg{lO|6|͊l>>1Yvc> 1m٘6Umپl-zٶV_|ٶl˩-,g{8mrt|||Qm>>"?˟s ϶kq>ō|>al?l{|=b>m϶{gvWΟ|>>,g8z$Wǻg۟糭P>mllc>|=پ~ٶW|᳭́N,϶z<;xl lb>۬1m5cg;@= l?|?}A=_w<|g[|>kvz<>H=|q׷糭w}lwϦmUǯ|1gFgW|W]o=φlG|x|b>۽!gag>gz}mپRvm|vag;H?\϶iw}?϶u㳽e=o޵j= jKlYp>l;Yp~x|6(xlփlZWF>^l| vnl4϶?zCq>۔x3|I.l|?پ6lg?eg{?|6-+`= >泝j{|s?7|Kc>m\|?Yg;Z_+g{5泽٦sg[/泩loN(gQ.V5϶gPx1 e1϶ǿm{|{1m|>|l>_| َR?Pdz|'َj>>5l7|!mژ6Mg-}٬ONil^V>m-^Ol4}b>Wċ|Ec>׬wZ/0x_!ٶ^z~8 l>۰6ް6 l>۰6 l-wnj`>1m6,#vq>۫=n}>!}~g*g|۴1mcG0m|9/~l4fzg=}||gٞlK=>/ٖ*g۸W>^/ml46EM/6n㳽|Ug|[}|>϶Zq>$1mԘ\糽.}Gvl˖gmg|>#>/mf|b>|nq>۝1ml|z|c>۟xg;2泝x>1풶g+泝_>˜vjg,泝>>َl|?>ŇNxhx16c㳽nj]mO}l7|c>:1^P>ۚVi{|Wb>E1ۍP]\>|N.gۤ8m|z|ًٜl'7m϶Gl_lcgEq>y1ml;|>[g{lW|b>ۏg;8m|Ic>۬]l+g۵lW|Gb>۟|=o_S>x1ll|6_>ۣ1.Pg{0泹~.lO,8l>O|6>1l50vx|6߯y϶_|϶Dq>ۏc>1]||hmv1,v\q>tlw|1}8팘vv|Ӌٖ+g8zgSq>ll/g{sD/͘϶Uٶl|6> ŷx?l/|c>al{|6>l#{ng[|c>g|og{HFULJ糍Vz||٦Vl|kz|}'泭WQ_ǻ>|糝Uvlg|>1m6^|lת}| gA=='?|b>I]O/i>>A1vT|َlG}϶gg-MOh~>F1gۘ6jg 泽\_lR/޶?|vx㳽iU?wg۩8gsg{+`l;|6|6|6|6|Ǟg'+|:lW6?*t|Kg5泝6kl_n~>-DgsgF㳭x>Ql|׾xl糝v=T_Ǜ6?g;B}zlߘfvEO>۾ٞ)gsg;1m|)۞׍l|f|[v7-zپV϶xg&|i*gz<ޡ7mlzl|@u:6P}ol='PO{ӞTOvHǓ6yq>ۡiϛlxnWOLJg;A=/l|Kc>Oc>/mxy㳹}7泝||$٬٬Vlk|Ϧ>?Svank|uU7vxg;CxRَlkٞ7~?~o0//vlq>9xlG'cG|5^S/ClO糽h|6S>Eqz$}|>dxExz<8϶Xg- gSlob>1페϶Fg%{6 ;yU=Z=l~g۰8!g{G_^`>^mȁvY|ۚ(m|6|6Go>8϶Wg[8_Olgeg;llZi=z@ۘ6}g']پ٬~`= z@dW }|>1G|>[⳽=-d= ^0϶z0L1,nm϶x·:=8m"y>mΘ6cgfP;>v'泝'U;VOf-g[g[|ssr`{|6Ug[||g[&b>Rk^m|?|9b>l1m||g|g;|>۬xI$}E/ٖl_m{|E:g;ͤgVNj7϶Dg[VC}/fi~>ul|6/>1m9=-}=/TgYlӷ|]δ^/h zAl}vtY/^>\Hz>YF0].lW|b>;>Sl^㳽R?+mGM0ʰ6 l>۰6 l>(>۰6 mF01mF0mG0^/P#-w>ۥlW>ۡ?/m϶ig;,泝xƌl?|Wc>۞1̘v1>|g|>oc>ۂ֊lcg7l6ޘv_g|yb>|>b>1ҘPg۵~WLg|>۽o|뚏6FW>Q~&n>%l|#b>ۑ1ҘvqgAg8zg{gl糭UvA۹l{|5c>wb>}lm6lߏl|c>?m|(g8Ňپ\>mܘZ'=Fi[g8mØ6Ng[.}l'}>}|>۹l]Qlq>^l-g)泝lO{~.>8큘϶TQvsg;|>l8m|MP>m6ah1glx>l|=]]϶@<h<|c>َlv|l;6p||1ml}8m٘϶Yg?}On~>F1mvdg[l+}8϶jgۯ|>)1l7y~.5]S>mf|ՊFk|7c>"1mјzg=?ylo?|7c>ۺ||1>j<6Ng>1϶yg"lal|Ͻ_l#|6?>1Xz|\gs泝֎lug)f}_GƋViۺ1m}tz:P==}>ޏl|/7퉾#8϶zz g]=|11ylt1mV?LJ}EF6W>m^^vT/|vlq?|>>3>M>Lg[|>S>G>BWuy:]}fh{|oyl|kc>oc>1mvg{8|׮Wl'4v1泝n~>=^x<-vgl׾k6:gP}=~vlc7|_>l|;{]/y5]~1ggsm[>Nx> 1xŘxTg"mvl|~.W_{~6]ٮl};>|b>d1mxM٦WO{7}A=yx΁|>iϷ|Wz}|Q{|_9lfV{>6>]|6S|َl'7f}f=϶xg[2ͪ>>>pq>ۧvU׫b>ixvzo|9?|;oϦ㳭OR{|6S>Lx|g|b>g{8mux>mPǯ㳩l먿o{}|z|CW6Gq>X{6 ٬'wc>!1^!glgl']~m7og%j|T>lo[>m||g{4泽h= ~8|[ll3X^϶Dg{|>ۭl~ggÀ6s}^lZ//|;c>Mō]b= >=|7z}|w1泽ٶٶl7Zp~|v?bgS_|Qc>ۻm6J|>Sv?Vo/T_hG1@>|l>_|sluۧ;&/g{$泝>٬O٦,g{g{/泝oFo>>1m+v~dl_l|b>ے1@gsg:泽tܿٶ( Fن}amgن}amgegن}=w=َ]8iٞ-g.]ls71mvql+|c>ƍ}:Z>mvhg[>-hlMƏl|%^q>1mvIl'|98Bg|ٞlGg;7泝k탘Hg{,-|M6ag[|o||vPq>l|>m|c>m1mk|ɋٖ+g"Vn<|Vlz>/|c>]X6Ug&}ٶlӖgfl|6mx(mF-6cg8vGgug3泽_il}:wm?}klϷ|7b>l^vS|g1泍g[8m6Uo ?m|?>Xl->g+gl{g=}3泍||vLg[|%B|=b>۞1m㳍(϶.g;81'1>G>[g{4lP>ۤ^>۟x19>|6{>;mݘ϶^g[?泭=/|c>7mј^?6vq>dl=>b>D|Qjgig{l_m>>ہَlߏl46gپ^>m8~|c>w]T϶Lq>mvW| |s\{dvl| >g|>l|/g8veg|c>2f*g8m|6l?+vQgs=᳭㳭U>m6Vg;|||g7泽6l|/|)6Vl?V>јzP>)g;A=||b>KmK||g?ͩپ|}ޘ@g'ݯ>x٦)>g/8|糽l7|q>ۂte=Y>6z:8m϶z[=l'g1[g;8햘϶zyg\q>|m϶`g[(泭||}?<*f϶Aq>϶z|gsgsg}|1;||g|[ӾolSOǓ}!||c>1Θ6{fk|b>/g۬|#kߘ}8S1l㻋ތll| ͡W_}c>&>Svpg[T}MR϶ygl yb>ۗ}8l3?|Tο|c>WH=vVLJ|b>&1mg#lk|מl_S_Nj|c>M1ʘ϶z:Z=_2| ;^|S.l7||Ӛvz:ެ|>;l>S>ml=ONo<|y|<>O}y٘f=61y'F}|||]c>g{/泝lwc>/lgq56z<~S=|w>lo>n϶egJ=oV;ߪ_g{P=|3bd϶vٖlo,ۯb>/c>||c>Rx 7g+h<>Zx>۾ꫮg|嚏g|>!m˜j|^Sǟj|߀vXq>>۬g[(ݮ}Q|b>/|gۺg]~a= %f=1mR>mӘvx|}=>|>F٬jۺlg[y.϶@q>lZOb= ^ӽ٬-6_gzel}>?mh= Ng;|>"mg|]gmK1$}/Xol׷?|5z=|c>nxg;8mvhlZw/ٶ6j϶j|1{g{8Mg; }}϶M|71m_TU϶&|>/{ٶ*Zg[|>6gN}ٶV|g-ٶ-g8me=_-泽>lO4?|Mc>c>ێ1mϘ6Kg;(Y=e ^8m՘͎|c>| oϦ~೭h fxE׏ll|l[/';_ll>۰6쳍7 l>۰6 l>g#˘6_gIgg3泍38泝Sg{+َm~>ƘvLl3|Y6og+})}||wc>{^>}糽vn{|پS϶Gl K>mg۩l糝y;I|-Z|b>x&lkg[#泽ٮ_;~Jl|m泍29ԑ>Yl7϶pg=l|Mb>ۻ.g;2泝l|ݭdzvೝn}&-g;z|=ٞlO|?|Gc>-1mvĘ϶G|b>:1KP>۱g[϶Qg;l|b>1퐘6?]q>11>|>__>8l糍]϶a|ϖg[|>lv(M~x>l;v~-|WlYo8fi>>ە{n|c 0+gjg|>>l3泝T>iF0l[|)c>ۢ1s?mx(m۾/|]N5p<>6`>g$}>Mپ=/l?lSg*泝T>vmq>g۩8϶f||w1ol糭W6Mg!>#9~|{}| '}l 5?l6m6C/>lm>>M1mly>l|6{>l[-l糍vm>>Z8m|fh~>9N)g;5泹N\s|ٛ϶WgIgsg l|c>h1vQ΋l|c>KͿ^.#yoz|6?>ۯl|6vz'C>~O=Pm^z:^|]|_K{=|g{|>ۦ6lߋlӪ]_c>gy&.gzR=|Ib>糽}_0plzl7|kK|=z)gX=v}TO/7l'|u]lW? b>B1^mv|w+^l|c>ۧˮ1>|l7lgE}ݟܟ٬FU_;_||Kٖ|g;7m5og+|{٦l|{c>Wb>b>%>ۼT_?lu|lMT϶Wq>n1mrkgU}>CP_z8mٶl֛l; |7' v/g[7m^g[|>ۗ泝W>!*g{lSwg;|>V1m?x϶<ߪ;c>mv`g; -||z|1vKgin~>1vz:>_=2|31Btvi?@>휘vVg=M٦p~lG|>b>ۡllೝ>Ol|6{|6q|b>۫1|O| ]Uv_q> l|cc>c>gMgH=/m||3糭[>k|g#w~xl||| 6vq>۷َlG|z}Cl?Vǻ|6/϶[9>*gLl|c>31ml[g|>۩1ml{||6mlS|Bl=(a|6ggG=ly|b>2|6,mx(ll|Cl}.;Gx(mG0/mm~vLg{z϶@Njv~g|>1Xp}l[p*g;>}P>z|vl߲||ll5?3|6fb=flփl[l[|3|b>A糝Όl||4?̘y>ے}]-^,g?WvHg[Ul'7P>ۋ?|'g[-泭٬O6m1/g[[||+-g[!-پ|G}=Vo~Vl)16ngz߯>F1mNl'|b>۩1m*rG}v?7(>۰6 l>۰6 l l>۰/|N|c>b>1mSG0lW- mםF0l#}|c>mlKYvP}v,϶q>lS϶og|>:|~||c>1ؘvN6lo|4϶]|Mc>۞1m϶yg[+}+mپW6~g;پ6l||_4p|lz;ߧ|>O6[q>L1}8mʘ6Ugil/g{8m6egTg{5h~>ۅ1\g1"=ٞllW|b>_b>1m^|c>;Cl7m?YTgl|c>Qv{-b>糭l?l74P>^lO7vNq>]_>Wk`l|^g"泭^>m|ٜl 糽V϶Xg{[<[g|q>1m6ql||6϶Tq>Bl?l'|=?||糭پ||m糽O5p<>g[3泭Vl|o7?϶J|Uc>5|l>|g|>\lZOi>>^g[l4|Yg3x>۟g|>18~|-糝[>϶X|6z|Gc>殿=Rl|糭|^lٶ/vkq>11S`>l|Eb>y1ݘvSgngyv[q>;ll|gg{s>j|ًVl|Ic>톶gy㳍ƍlm>>zwͩ>7Rǿa翧c>o?>xϦ>M^lug=}Yٶl?&Wg|>qWb>m϶:^V}O|lw6?:t|y].l|K=xg۰|'Ǜ6J7>Fl7|8t;tۥ~>5l|?g8mǘ϶d}S~P?ϯz|>+m|/e#r|zk>{m϶Jq>>3>lֳ>۽lw|6O|6?||xmg|Q/c>E1m٘϶Lg{<泽پhlX>oǏ϶Mq>~ls|񏛟||隷b>>1m3u۳|Vo{^rM_r\{1/|_y-U{Q=yexx^q>1՘ve|=^=ϧy޵|>O1m6z:*9gZ=l|:^|;^|;b>7ߞll|6S|*gM}٬٬Tk|b>ۍ>.sg{|>H>۴l+|c>ۂ϶Rq>lw|]-\g|>ۑq'=?xlo>W|gzmܘz<~%泩l㝚vIlΧ|1!x|z<>C=?xTgegl?w;|>:g8]k~>D1߳lf=bgۯ|>㱿~>w}n!g0mx>kP>ۗ֏l=>~Ň~-x>#l4lc=>ۍ1mv[g;z@|hg=泝nnl||wb>qg Y}FmmI_|>l=l|6gg{lOYٶoٶlXo= $nP{?b>۟|I/>UllW|?|b>>mZ6?~KތޱP>Ɂގl|SGg[Ol<2|_wٮn~>u1L?~|>z?>Yo]lb>11{g{rg۠lG|I؀m3|dg5پl>|l>_|Si1c}϶Egl?-g#泝^a >zAl}v@g{sg;8>l/|=|6 ޏl|{b>" bw|sc>WcY/>l>۰6 l l>۰6 l>۰ٖ?c.lK<m|l|c|C>ۥ]x>5^>&?Иve|i|Q΍l|6?mvfg[|NJپVv}g[(泭ٶl6?|%xپ(va~ٖ-϶|g[|>۬mtq>ۢ1m϶mg&]Uv#bgۭ|>{||l/g{%泝Q>m|g.g[8|c>wb>ۘTvg[|c>1픘vg{+泝Nlo|Wb>i1m>|b>۱>>1vO<6}i41m6Ugg;8W1ٶ*}l|#b>1x(m|zlS81>b>--S6q>|9MZvmq>ml3}x>1l][v[q>1ml|_g{&mW>vrg["-ni~>ۑl|b>%1x(m|/ٮhlw|-c>gs糹v/g#^j7m(gy}8mmlg?x>1|`>-XNq>lO]Txq>ۺl糝/5pl'糽V϶Sq>ۜ_>l糭R6]g[~Tqq>l=>٦(gs糍Zg+g|C||b>ig8|8lw|c> m|]c>U*泭x*g[lK|~V+g1ialg|>mǯzl|?g۱8P>fŇ\6a>*g{8mz|S|y֌lwlw}nh|b>ۧ϶vq>:?in-g[@=*϶z:^I=#>{`|;o(m| 7m^9پ^%q>#1Ҙ6_lrlG|63ٶVO|mv\g |6w|c>|/6?@l|||/?uiٖS_sMg8a/- mi)A) E.)QEAJEJSB$%qcYl؏7f6דϳިyj͚g;~yk팚gJͳa]86zͳQlc<5ٞyϳmTl<ۖͳmXl[<5϶IͳmS10g۠ٶy+O7g{qo56w=iͳRl>g[qmg[FgsgsgyIk85g[&yϳ=j?xmܚg<fR8϶HͳMS;p=<}=kmzgl34γk?^m?^c?^_Zlo}mI_߾<ۄgFx)g<^5jͳVl>6xc<j}+=NgzݚϳMQl<۵56FóYl_l>Lh>6~yt?ll#yqy'r?Sl>?ó vwy{jɚgۨy6y yϳ^l{<۞5vqͳm<<;ϳf_o8g;ml<ۈgdz8vCl5vXͳmRlvD<=<ۛlv<϶vxl_yukmg;xy7g{^o>Fͳ|yClgۥ>yKomly}l+<5vWlu~myou<6}< 5g۽?lg[.y/ykg{϶Cy<ۆ6ygۯxSz<ۿk5veͳzlןzgij}8v@ó|9pg{nx<ݚg۹y6xkg;پTla<^hg;qmy3o~`=~oqͳyóy[g<:5vQͳ]Zl>Xlxl;ُ׃>Z^OћϳTlwۏ6γql+<۷j[.5]zˮg6yMjmӚg۬ٶy j8g~~~zy}>ٮԚgc`>vt}sͳMl?l7γXl'<}xkmlGڏOlK4gίyk=8$g[óa^o|I)zl5γ}َm>vx=k<5?7g[~k[wzxMt0γf?^oXlt~v<4Aóa?ny6<lvgmy6x-kmƬlsw<˚g;-6elt<۱ԧ5gxm>6cͳ<۸56Iͳp?~ko>q?~5γƳ~@}Pͳ| jmBWzli>6ogVxy+kml_qys[gۤ<ۏdl<^ lϳt7x56eͳ}z<(lS/8yqϳ_lt=<_m~|ƚg۪yjmg۲y5γ=Ul4g}lv<6fͳ<5vUͳw 4veykg[y+.yKkmٞy?gVyk퓚g{Fo}mg>Wl׿igqgl7-fپ]l'xjml5>g_l϶oͳ]|g;>rx <>l;6ngqK56nގ>y6yjo>|?l?xzų8v@=<ۣgۼZ;<9=<ƍllg[q]϶E<ϳ|5ve?o<<5vLͳWlIٞ9_Ϛg{ٞyk|~Nx}~Yͳ=sS5϶}ϳ=<>پ|mҚg٦yjGϳ=8Ϛg{nxmy6?}~8vnͳy_ۯvqͳd]]l5guͳ]| l3<_'>[lۏ<ۅ5vAͳ]`?^_Tl_yW;g{Ul_|rͳo][l< jmg;<۝gyW}>q?c`>϶t}pͳh?]b?]mͳ>o]8϶UllOl|k=8w$5vy}wl ڟ;؟?Ox5K5gOk}qgngkmg^wzxeΨyQKg{xϳw?>fyj~yϳ-[lS<\5IlK5γqmyGkgϷ}|g٦ngqmgyykmg[^ϳn٥ٖng[߲yyjma óy<<ے5϶{dzy|lx9jmg{gۻl6γ=<5~8vaͳ]Yl<ƭdz]~A}<:ϳ~A}˽ٖw^ϟCx6G6v]l׺_P_]l?uټ٦x5/hgپ5ن=۰gl {a6ن=۰glÞ˳rٞy/<ۈy1.<ۯٞx틍l՟ճlk<:5͚g[Fƨy]:g[ٶn>϶a<_kٖngfy:g۶fk>϶rͳMVlwu<6kͳ[lt<6qͳMZlt<϶h<4}=xϳ8vo<ۭdz-Wl4gپ|mg;<5vcͳm<ۋlg6Iͳ~׿g.yjm/϶=gkgx%.y+kԚg;NyI{>xzx]l_zx5vhgۣqykmz(϶pl<ۿ;g;qmgϳ-8yEZg{qϳ|l<}~Sl<:g[^h>6]yik+56yͳzm՚g[٦xmg<ޚgƳ-[l<ϳ}=g.Il7gfyyjml34>g<76Gͳmlyy1zlhg{l 6γn?=0g[yZgNͳ-Pl<5϶َOy6x5g{y6x6xykO>Ok^׋g|.?ݚg^?mg{~^k/Cj<Ƶ'Rl؏ׯڏۏx=}پZo>0γe?^oz<5϶zͳYly7g{~~~W)϶xdl<_ko5϶x}xQ<NXg&O|6k>϶T<ێ56vg{y7g٦y7fj} 5 ;g}<;l'6γ8~n<]vSlPz<5v^?}~gm?}kOϳ=WlϺPv?>p?AͳYl>|gų]8vUͳm|Rl;gdzZl'7gvͳm|mۚg{<6l[_'_Pdz~7>6{l_0gfl>϶Xl<5϶Dͳ}ټَs<{<5gblÞmس {a6ن=۰g1ن=۰gmF6϶pͳrٖyjmjYV϶ll<ԝʳ}x^yَyϳپ[l;w<϶Tg[y%6sdl5gۮ<{l7γ86mͳMSl5yz̚g٦k=m>j>϶^϶vͳgqmyjmG6϶CdzSlG>vtͳ/y [g;ٞy3:gV<޽l4gcͳ<5϶Ry϶Xy#ϳ]ٮó|mdzVy~x)Zg[fy#jmَmg;Vlw<'mgٖl+l/7g{ƭhm鮟g{qmygyjmgAͳYldzMYlssdlt=ls6γ]l<ۺϳYl7g[qmyjgwͳ}|my6O>l6k>϶yͳmZl[<dzm8϶J_omyjg}x6o<ۉ5~lc|>ͳ=Wlw<׿l<ۤ56qͳٟl_zmgg[lv~m➯yo{lgGkg <j~Vl>6kls<ۜ56{ͳQl|<ۃ51g;q35~ój]uَkggxכϳSlw϶oͳy;~(vx<_kmFmgqmy+o?zl۵lol_5gyjly>vp<{5vTy}^vͳmlw϶YͳPl\lc<❟g[y6)m5zgm,/G5϶xxpͳ}~|zx]k횚g[ykm>dz~[lKv<϶tdzmh?Y<#|vz(vRl6g[l^OyKNkgxSNϮy>϶~_l<ϳdzPlx5v{ͳVl3v=5Zͳkc<۟z< |=y7γ]86ZP>ۯ;g{>yg{̑=g<5϶ay/ykm#<lo=mdzZlt?ϓ[gs?g[qƚgϳTlv<6;>?ó v}l7<x}xm }ϳ]l<ۏzYl<ۄ{5γ>|/lvͳ\lw<}5vw~e~Sl?xg;yٮj}5vۚg{yk5 ??vCmg{.k>϶n<5vM^ig{.y[kPmykm߮gc(ٖy6y_<5϶՚gl~l{Cy6O<<ōϳl6γwy+kmy6'x%kmg;y6yCe?my[gOx;gg>ygkmٶy4g;qmyg;gqk5՚g;y}~~dzM?W/|g;yjmg;~\l<]/g{uɳ}Xl<ۊdz=gEͳϳ-Ql<ۣ>O7dz]n^_aSͳyٮjg-6alٯ׿lv}Czٖm>H<+ looN絿~ԳO6gtj^5z}ywAiKoma'gz3g3γ}ֲzxg{Cy=_5Py ϳf<ۺ5v75vKͳʳ8yjmg~׷xjmDͳygkgg~>qlޟl?l?l<׾9:g{~J5϶bͳ-YkgG<&lt~&z끯'6uVy6oxqklWϚg{~~xq;gvٮjg~loy=q}>l?l6γ>ϗ8϶yͳ=W10g~~~zlz}gyjڮl>vEy6xk~`^i^a^dz?me󶝏gqmzyjgכg;FyZg[~^.//yz~yo5γyp`|_My';?zq{]϶xTlۏ+5(xxӎټlOxx?t[gqi߳y6}6xx=cy6?.?g;~^~~lټَy>CyZgnó~z[gl^oyigrͳVs?^l<r?~^yjg^ͳ~@y6x߬y8g{qmg;zy6|~g5vOk~?y=WlsP~@}=^n?7j>6Gͳ<dzy3og~ͳi_yxxj큚gll?oɁl+Px/PRl7l3ף6پRl<❏g[٦n>6Sͳl_&y6?n}ԟ<ۼv[ywk=mپ}l#1ن=۰glÞmس {a6bس {a6Оγsv~dl7γ}<5϶Py߶?mG6϶Hͳx]kñG6϶hَmgَj>϶T<ۿZg{~l?k=ƚg۳ykg۷ƪy[jmU#g~LlwxyʳmƳ|mg{K7g[ٶy_'n}lw<člvl{ؚgmͳUly{~yG|~jy<'g[Cy6l<1dzwyϳ}Ul/t}9ϳ٦zyil35g{<[lt~mgós?k{mvzxjmgۧqmgۨ?W|ng;xngg{qmy[g{<+5ӎٞxykg3<mgƳWl<5Tgٞyg:?϶|<ۧ_>ig7϶Tͳyٞy'<:?x7gróyy/t϶Qyϳ-|mtzRz~ly}~>yћϳqgyͳy6xϳ`]ϳRlw<۫ϳ϶5~T4Vh>aͳyób׵'<>Xl<ϳ]a5v<_>w>V?c?^?ns>V?]llWu>9z_yǻ^턚g[y}޳NٞOl <EghTl5giyEjmgϳxyll'<5϶Nͳ-z< ]6ml34γ^ódz?mo^Tll}힞m\zlt@ͳ~mg{8g>lyzÁqٶ |y:g~|`g۬yzl v{g{xIk^t?QlysPlg<ۙ56Gl<5v^l5g;Kl>o]|޴jzjmjg[qmg|_ol4g;ٖmPxlOg{w]l3>϶w=?p?ij=PlO<۳56Oͳ\lkxymgپXlCy-[g;ʳz<7m}m<_m'xml<5϶RͳRlt>mg[پ]l{< 5϶xͳ-yz~xkmlK<۬5϶Zg[qmg[v<ۺ5vAg[ʳZlu}϶R<(l_ʳ}<ۚdz8yjmlky7γ]8˚g.l<ۥ5vYͳ}.l}g[xmgk=@l#Zgƪyjmۚg۸ykyYzl xy3kmVy5<۷άy1yylgzx>y+jzفo(϶Q=g;ިyI^{5vzͳmzCyc;g[qm϶`<<"ig[6yy;g[zylg[qdzYl}ﳵ ϶GlW5γ<56Qͳ}yjmgRͳMXl<lxjmgۦy6ͳM|mg[gtql<۬5gU}Aﳍ|Hϳg^zZgۭyŚϳ[l7gۣپϳm8϶Yͳd|l<5Fg{^yjپi?]z]j;%7϶@g۳qmdz<15϶vͳzykm6yk팚gAͳ_x6_yv}϶[6qmglMlye{]/v}Wgg[ ;Pgg=lK5>g~|]vkͳ}iّY=$gl<5϶]g;ٞy[gqmƚgUͳ]Rl'v}<۩l<=5gs?gqmgVͳEϳM\l<^ 3<ۚ^ dz}<5v^xuq?>x9dz닿ׇ7gymߚgۻykkmgَy>myz>x9kl<[(ۚgwxy3jgQl<ۍ5g;ήy[km_my#km_mgUy6m횚g;َyQl<5vzmg;~<ۡ5vXͳYlgmg;َy+/y_<<۸5Aͳ}X&mg۾oPa(϶<ۢ}}xEj$ jx[g;kx?{_qlÞmس {a6ن=۰g1ن=۰gG6vwy?_8϶5#gvͳTllGzj퓚gٮmg{qmծgqmƚg˳<ڍl<ۿmy+6i}mgۡy=kmgjͳ}.ygϳ]Tl4g{.h>v~ͳ|mmg{<̭dzmUlG<۱dz=z<ۡyE:g[y%jmњg{l?yt~mz5?g۠}V϶klv>m/vJlySkPyk혮g;qmϚg{~{y[g{VykmپPl<۔ϳy}پ\l5gy{z϶E<_ٮy:?v{y{ʳqh5vClG6γl<ۢg{q{ml7γ}֫ykmvl5γRl߫y}{<Ýgcyϳ~ٖykmÚg۴hK5ߕ?lS6myjl~>x{<7my?vglS>vhdzM8v@=g[qmgۥyw϶r<|5϶gͳx~y'y5m͚g[֪yϳlwu϶_yjO5϶u~0vl>vP_/+ĎNyϳ8϶LͳRl?y6gx6γVl_l?ig{٦y6xqkדgqgg{Ϊy6y'jmv}@l<ۮ5϶SͳRl{s پ]lߩy;kmgَlGdzm8vxͳ=b=϶`Kymٶyt~myYl'u=϶@y6Ky6y{>>gۦCy9[g;vs?~zَr?`gۻvP<%56Nپ8~^<ۻ5vEyY~Ylyj|l?x;g;٦j>gs?gqmgjͳ-xjmgykmךgyk5϶cͳvQ/vFͳٞxywkL#?_&mgƫykm&y86Fͳ|/5by\?vI<+lg<{ϳfxl<;5ךg{y5γΩyskyg{zvXlkg;Fm=s5Rl?i5γ]8aͳy|lxٞigۿFi>6~<ےl<dzj|ޮy>XͳUl<5qͳ}~l_0gَg;Gh˻_P{dz~A={<5϶OmF?bس {a6ن=۰glÞmİglÞ?x|2g~VvPlOg[>Ny~mڮlGu<5vtͳYlG<束g{ó]^ltmykmg[l7γ-^lO\ͳ{Z<5Dͳ~ϳ-Wlugy^mۚgۺٶyjmϳc\༘nvgTJt(*$I\ (B)%QHKB!D!PzV|oxmΜ93lGqy9ixRxó}#ų=+?<"4<[C/<Ϗmg+lv'x҅gSzxlm_4e>-4gG:ģgTmWixc?Ky(J^c,ݓr V]~x̗/gBme/K. 1<ۋóq<כoE>l _;x6Oٸ~g{d-_KoVlly̯0|Zl[)?xg;K)v4< NOlMm:kGT><}ó=%?.sų4<[3ҭ4<[kixe>.}0q&lHóll_K?&?<"ix':>Q.<.vlHógc}ló-c~.4lg֝ٞWΡ-m7ixv49g|\vix f>)hixaCgxKwa>|<4³ixli³}. t6JGl1_ó$<!xó]+ 6toپU~l1>xg_|lx64<lC6|xxóMSycB>ixixK#&6Xvtqym }i+l\xų=gMfll Jó=l3`=@.&KóPylg;Gl{*><[]ixlױ@}: =Yx6gz<ۮ+*><[iw(><[Uix#K ?<۫<ۭ+Kó5c/}4<*l|xl1.l-^]٪~ll/x6<۾óóQ{³l_j I~xS?<['ix'Xo>Zٮgv 7l*4ix <[g@óݩU|xOX_u'Y_Ym'VU~xlٶIó*ų-e\ʇg;_[#l>5C;<[}ixl#٪~lv4<ox/ٮU|x6<۬gl(?x'پf=g[+~! VWóWzxgN~x<,ٮQzx>ó϶ګMNglhx+uݢ.Sylg;FóUg;Xhxg۪xx vv4<[}F*x?K)?<$ixlJóU><̗CWx<:~&Hó! 6FZixۤٸ>gU~x6?X?gzgcg)=Tl5q϶C̯9=ix-V|M-ix^n4<;̧g2n% 6 vl#g|\)xA*%sUg[X߃gc=`gB ixنKóUd~.=YXm<xev4x+?<[K?(l|UHó. eKB1gC-OalʇgW̯t~6<@g;D q2O*mgixA=&P|xs<2_lg4l|Ňg;ugJ[\@Gl72gd=@5O8)?x: lsg# 6[l0~+?xHϐg{F VCXg.?<[w;֐7_ztŇgigxv4_>_j-Gó=BVtB.?P66Kómd2% ϶Zm-;ߖg+- | ixKSl-ó bDm0e/^vóe2މ?|4<[YK_^lg=_l/xK_^-}磊1>I|lٲنgPzx 7xL H>V]ʃgk( Xl5m({ڞ(,?<ۙJ϶Jf.Lߥ+x'<[yixy>O"v4<ۯKgv4<ix#Q³]*?gv鏥Jó}~V}g[gT³S>R|x=g;@:g+?<[_lt>gl{HóuQ-g1h:+=<`m<[elsҍ+<[OlTx՟V0~lIóqYqy6vk?ٸ>gc<$m0Oy7Ge>.>"lm$qUl0^&?<ǥ{gP϶l>lsgZó! v4<J֋3óm6i9l 3ixYlKó-giҏJ7Ňg{Ӥc>̧g&}4<[ixlJó(m?<[gqy6x,ٶ}*l_϶H~xzltóՑ2ixalC>xj*l+=<[_ix~lKRٞTuW)=<JFl(><۫*mll;ϖ|\ ixlk3g{[ޖQxǘ3(%٘Mb-l7Hól6HóllφgCóVJ-Km4qi³}(.ϖgUyl3_li{ٸg{Hپe>OS}xg{CپWlc>e/g*zKg{E |5(=<[/ixKc/}4ó$ L#g/mʇg{Rixl)xgk^z4<ۃo~o*xDl˕< YgB٦*><۽Hz϶gcVQr<[4<[B-[m4<wl6M=x+l;v_X V³l%<[ V³l%<[g+Jx?$ P~>Κ]+ ϖϢ6ZU|-.QgXٖ~S~gkh϶x+T_xQg.?Vۥb]mʃg&}J_wl?O~<[4r<QŇgk|(wl̯C vi|ZMixU̧ߒg{Cu(b]gcg,=+g{\Iix OsKix}><1lOK$ ϶;iJ>Uzx *>[7Etٲ~>l<כQW2kΧub~MJó=[~x6lm4<[}Zz$kFv4<[4<[7ix6֛ٺJlmQgZz0kَP~lu}]*|\Kvʇgk/ v(q|\q!Qg|\>[%̧y~3}: ix>[]ҵ}=ixsl5+>A?Q<ۃJ q龌/<, ϶g|.[kդٸ?}ߎ~ggl_J~lKl1U~x> VV~x὘Kv{˥٪Hógk+ų%T?xJQ<[vt:Bó,]Ma@/#x6QgzH' v4<ۑ*?l;+><[4<{;}Kub%<[ V³l%<[ V³lg+g(l/4<s ϶Y~xkg=7lIó-]\bٺlٺkg! M4<~~xxU?x3m3>7'lHó% vg;K~xcU_xgDó=gk' óm4<[{ixr<)j! ϖ# Ϧʅ<[ ϶óՖg{J8>gKó}g4<[y϶g;^V8_lix6?x~lΔgcg*}Eh/.϶g礳lC?g&?>x&l?lvϯ>llovkiNd~-}lkqg^v4<ۭ<ۋólÙ_Kחgmlw<G a~-٤<I> 6Gg;Pٸg;̯+vlIóՑg- v<ۥxe<&7W~l+><[ϖ- VV-! VNm4<[i)q<[ixlJóg;Lógc=óg˒ixǥ}Z϶E4ixNUCg|\z q7ސg[% ]g;I;<ۯǥ~l{Ióg+ VI-ggt϶Ygk>gg{B>U͑g+ 4<˺ހg;S}vm%٘!?<[_ix9KwUپgQ ϶g~6<v4ltoՙKl̷ٶHóg/݊dŇg݊϶^ vg;L7lU<~ʇg* 6[Hó~;|ó}glKóq<ѿ_lZrJ.ST?xJOq]zóvOAixH>llJó>VV~x l~UzxRlOp?^ "x6lg顬Hc@ S?Y/>N~xHs϶4bխ5mrLxf̦Q^Gj>o[^?bG5M0k%M~3kol$l2[goVkfF1kz6v3knɬ`fZbmolnKffmkڬ_kY6֚m3+ozfm&ny?¬FV(ifK֘m4k{P fZe}lYYf֘eta¬YOfCƚM2cìِcbךkǕYifKb5glYVOfk6592mfO3krK fw̦-1[c֪lPNwM1[l,߬zWۇfF5[n,Ѭyf̖m0n>f}ƚM7[jlYI֎f=͆7klYY{&-1[cV3b6lr f'[;噵2i6lbfk6m3+mY#fz 0j6lLf֘m4fVTKoȬYf#ƛM3[`l:|^VOfF7fl*uffXzkìrM4`6lj|>7X5[boF+lYYqVf}̆ed2c6lRf=o0ilY[l 1[iV&0-5h{LN^ɖ9OZi{ZRoxn2|XZ]gޗ[k̕+ޑoc,3+- fyAؽ _]XG2JCqu雫^g 2;0۽-}e;;vUt ^0,+qZF_= 4XM2l+ܶMԶ .^l:4׶ߩmXǂxٖz~L]-\%˷UhVP4W*'~D xSċ{J)^z)^[m_[Pl)|//Vm8\y{}z'A Ksd$kk>OױW{,^v\ʼ(-Wn<>b]cqyw%-=9ҽGGLcLcMoq={x?z[=}<ϞlZ<鮦w3M铼c ~}SaKbdxe4]'.S]NSݽuOw*6&+@KO֡?QA}Nezn7;=۽0cn|Y_{y{McAZ 7{uFOFOscY>n

    k(ޤVlmK cVY2pάVrTQHH ۄuX55pȏVr0d^ ǣXs /-{"eeΦ%Ml N,u}{.z'ړ׻Ɏ]\Yyi2u7Gj|"Z;<7D.Wkޟxൖ>r!|y#0ڧRXRygsR2ɅzL34v3!3iGowC"}%0W0YR0h` ;i23U±΂@pf=w]TO"!~e_"þ$v3x3 _p1L\eR6^ 7[*y@C^&8j2#fwxЗ?"0qe4`$xz_\.F8j(KR`~yŸ>:䍅&)*?|;-dG,`3lNH0&BHV1k)Mǰ @'y2sS落3pEwզQޖ<}3bINrh`E Dehga9l њ1=0D~7Z%9Rj3GHn5`-C]hzwYmZmYyfO`Gt xpB6\ } qsn89|蠽BS稴%Dmq[8p~K ||yr f3B%X~/\;>򬵒k:P67Cx%E+Ӗ.!,"qy$7_!'$=èt$Z%2p)+0!*{@yRD R\ @d{B TZv?otlƆnMdخiKn]Vv?~}(9E $Zvq~@2!Vmwo95I)δ|Y n+V*3jrq)\޶L|W!"7B囦e<%1y;Ly gV$`kXa'2L茿[pm(f ³!~⁗EErxXCi_f{CSzq0!?SKu~1} P?3ڗLŗ[<:^o] "{P\L 9iFS+2 Wu[mI/)  E$ "`:$I&t w ))ZI'JS%f=^.N2L(>T` }jw/DK{П]vħC즥obVv~?]_֘bji87 APzCkňXY.zNF(KEa, *`,yfy9JdR_:/<Д4/2t<=AysbGߏd"X %]|9˖+zfFG)6挠j;dK 3 gh9/f=-t"jf[JJ:?<];mzW"7PdUF$[D㒪drR4"F`mP%i Iⅻ<$ Pˀ)F$7[]!F*)ڬp ${?YI?vI*nc (~gB}"l5UVRu/@paoΐ.`jZ!Lꦱm)QB!&K>c؈/ ߣf"}_{r3tsHp ~Ob N9*8 ;-I1 X߯|OrOg1LHi{9GEɿ L{Hٲtkxž NRZpWeaښcTU$dmqc :VGBNH{MZ:ϭn2q}Y;KS$IkK_6x'b9_`WSͬ$JLV+'VVjBjZi(M, TA=^k/;u.&?,+I{MipDXjDf~<֋kSW d}T^tα򱕐t CW~NΎ^գuL*)7DAQ[j5V^AaW1058i\Ixh?m=d80NN\SNd"9cA LO0?[#@B,v3N0c֤FK07-l6_z/Ůgw|-cu-$PYݨGxnѪea@@`e-;>w6ʬ ݔNb{œagU3_&x~ge/NboԺ"1f3NbQXP4>ygDym9M?vhi4>jIU:CM^s&%ؖK{gmhgH fDMxi@p`z>l繫z_&1TVhB-g-Hoh2)@2( ׹)Y,2?"8%GqF\bOAa*yoF??2SY CiJ+wy "ݕ~\,``uȸt)$t7 spEC,ݝw DXw.XLnbRWUV+wX>w0\備ZChVJVY¿rko.ս~~W,k Ed/ ̜>ցy|f"/"՝>$eF$065c\F5t*hq̶JcT !/ko!--[Giev)(b d>EFʛi B)C@e%Gɒ\-=lQ~pOs-Jj O%)h"rgϒ%GYt3sZ${߱`K6tlɴ0N g_owVgjYx_y2-Akk^qf 3et!5dP,mx>k5iyiܪ|IZU}c;}l7) !a %}bMSٕN7nx /EEw;.bK3m89?Wp<ǩŭRuF-m9zW2$< 6WA.D~3/z7gV[kX2 {pӼ*.Y@P-9XB>-`:ih"0)8\i06+ [<[[jFF_|ZA*BRZЗa&f%&;|>w9Adª?xdTW #}ǽOCJ`wBEnO֬dED509F2i87=P&Οnzg-P Ҟ݄*}GR#J ֒E{ԢÛÔ ^m(09/IwTf3?;ٽqzW}`$Lf<z%2VȪءu4k>`t4 /ddX#qLJ=C:3\^Ki9{]/u9-A~P*]@\8Q>SM_ܰ]PSْ?>W8&;\TF=\ @c A߉0ϰޙdj+Gt39-97HaxYmD{Ėz v,$ ndIhJymܚš7\{5ZzdeYYL1"cu=' 8oNFח>]^@jXߥ.AMҏQ+atrp"-i4/ Uo3Bgi#LHg#䱺lJEJkˀW@b( 5zbK5D,}A V_c1/D~P"?eJ2CXq|ߓ|!`ISe V}~pjyR^e2-;T&zf|N! 6@60n'kՒ4= 889<<}ޡK/aOF糌EI̸2C( ^4A%)5n$ԜK@I[$bHKFSkrV9398iҺ&(86&Νxq-ݰ: foIлpzgȌ$B_Gg5I,>k}*,ŒP9n6tցݦKٙ#\"af Ut|D~58*2,%9\UZ#Qd|LĬ>Jz䧧QtJݞ|Pw*竄eODgTB$D9ӧ", AI ۃq/ 1ٞL^p 彉mֲ',G9) }m 8޼[~ 2fPTgBj9܇^͇C-Č߀*-y$[Hb8ox.TtQ$ZYD-dJ&彇3KB&ijvLJuyJw:S4HvABiY8̂ )I+{sx7Up,F$)`-,@ %=^qU _9nBUv ^^Yf{/K99ب~c ]cC׎к5>!6{t:텱;]`9JG!!'Ն/\*DЧ}cQ ּH>ʏ^hZ+@ F%C5{e,5JYziㄫ-|;DmGrޣOTByZZY.j5[CUrx?N0٠ޗD,~rjXOكٗ*P"i*T(1<_Ieu+c@O#ת7hC /V#R 8% IDAT"j_ I9t*@Z:O6@]{fa29~N'kɭ/j+3-co}MÏ>Z,1$g>([Hᶲ E, NU1cO^+ ӅB| QITztߎ*Ve֡Fvy'݈~[@ H2"?^W#jF [_n6KV?֔RFآ2X1bk$},bJ;s Tٞjm[ʸRxzg\jbEgHܭn/tթZY~~h_4{)RS FUȦ$R {3_zl?/$*ush60~N6e>%-'H)AW?a637i1_AZǎ4 5.#YsÃz00D!J]s}ƓH%ɿ1XwXo'w( `Amwe_ tfbL "(P`%=[",agՁ޹-2E[ 9Vr/+rEˊYK! j"=ʇnL2=Jmpۃ%9A@-Q"{ ^=y b?z˺ϼeCj%,> WQ.A:) 7s7:j^,0϶9Tm-vW}y!_ Je@N/0kYBa,KĹt!9Z}<(1U}BvJ2bM,#|ĥ2s.)ʊ9|~\J3.j 8ʣr-/נWcy8oU{P@Wk&I7. `G!szVYTU ֗Bf~5"buְ:dΧ{p@-jM w{] *euH)ԉ(NoȎV@EHvttӋx>ϑc@Ŀ L#ۉ:<~ /{}}^VA }AI[Qks"sz6ĩH==o6LkH[:wS"l %d~WICv srwfxƔ1,^eOې,L#B)e C*/ȭ,Q0{wz:'1y\l,uvrpױ,eV`^ėB/f=@ ^|ITK0E .#>4Bܒh3c|"H~yY*XmH iPOYvZxg-)/ȻϾO?n w`;Y_C=X\njJ?0@%A,Murr{ ԣ\erӟ˷qUCe}>.j ^}B3fCs喝WdYCw D(LvP9)mH(\9͖?T ֓O"/kLVgB)N2 $}fȿ槸%胪0 x䅆TA6im𴱄._^y}5y,n%$w{b;ai ܽd}~>e6z5wR΢uٗPpp !%@GGC PG^B>?UJ2FNIb7[ۗaVV{dxgԠxRhhsW -8^_wA3~+<菝aoi[=O"=$){[2ڔq Ot.1W.rz7~ZHJ!l,0.tq2 fZF @!OBAv}F7U );_Y\ ~7hU3 sҷMϝr#NU$/U#ZF:Rjz0 ,(Ef3gRbH 'nWgJ%=zrFQru|Vfo5 =T)5]Z= a̳R# lI$WTs)Gv"04F9+Zo$3S "['}ŗe=3|/Yך2"%x^,kbce@(*^|=Q/;37 yG\=ADm>,/Chϥe!^0} Z(l Iy:,qlXX( H.n f﹗d0` wOuhKOO[ai^\ʾ]өI zVFu'csOƥmWR# $p{4BO1^#ZX*Y 9$I!m[|*$=_ u{q2.%ʬ`i~wG\#a!0{e`P&K TىMD@Y1dΖ$RB9f}2HkzZ]c4$(Rr)a@Rt '-D쎤9DBĶA++=J2g\C$$ ,-o-KXl?dAޠcE<@K D[m`(\:Z8bXL֪*(y Pe5v5CVQ-B{ғ>}I2w^niٸ”IXİNu MQD [ҁ"5,+z,O ~gjZä ȃ}n+@j^ ܔ$uZXl{30[Rp*MINjٽvIss@f=U 4h?}^րqA{_zPb\v XOSG{'gߝNmbeU7,=;Q3~2c EJ|oWZGF/zeaȡ0Ъ#՟^'De;(;'[[_adL&ghY)ISUKH=YUՊ Ә"êY(kIiQ`XkPCjhhh,Y\ TrcᘃXqU|XGÁAֆzGq8BZ&_YhT]H<^-r ɥhMY1 wfD Ø$saքv!rL“#(*/Ϻ-"ytY-sI_,@]hNvUA 9>ڲۚU  bHw-@:*tO[Af %;ATWʗ4-/>Z?YTVI`QrD-̺V-"(.nrCyo[>[!w+] Sdހ^΄1; נN JO[a@ٵ ֌M,gj {R8U|gI _\7u/r \nke4BDVbca07G9uj'ސZ\" ͆ Cy6 18\+Z+Ҹ|]™>0rnr* 2h  -<_w a-?(5aFldĿ!M0Аd KlHuFvd0A hJG-SN^a(&۟. w a*żMlw|j'K䩄@ _^ !=zr~]s \ 91:T*6X=o_%%=ANGMK j\7%O^TQ}^OhV*Kv0e$~bn߽<\h X`E0cL߻:A=?QOyAI2 55WbrpyR\,ݢeyJ]NbՀB85K)OIm-Da´̩4`b"\TRNAN o{M6% ̲nH:XF/>R,T**\ࠊj  QƠVX$ ~޼ S!k-{|3b8@2}Oz v TtxEgZ~Fְa N/IU,$땬4`P(%RF*L 8L[3dC%Di?dBYS$rzy [Apo+w/I2)*#~^,nSfq-f!xWyNT&R}ީC~j|h& i>~`w*ݚ IDATjBOi`!+ۊyBt T:++,M}!gթ;CRId ;Iɩ qI" :*Lc@<<|bڷ2|uRS(ĬO EPbyd1z8qA\ߺ+#x++!v?qWS +VN!"#r>SHZP%)j%Jbq&q[?23[$bF0C1_y%'Z.409x{}쫫&Ж@{w!{t{ZoO .qIgʿd]Eb@;)s'\Sh2ͮcɅCp[H[2!Jt|;I/oǩC׿[? O:wSsON(F+? ζ`cVRĬdkf$E)v-ÀB Lvg1shӥ6OK] Jv XUЀ@ ͒Y, z>O1 mCgp]iDQzQwUڥ1Ce& aqO41WY̠±ؒ. W0D4`E3 <[ưmx&Kp%>񢘙a+((@C?BRإ!PZݤ&R ɐȒ0/\ ., \@ f0!:gNLB)cqszKyF(9$7T0^LCbSPIV{K}ኼ,G8H >0X΁i'Hnd+-C gLWSzŐe+ZSVWCҕ' #ۊ\^ځ%Ϭ@^?o ]rvQW=kZ~|eR ddXu~!?$'[Z0|B\U5$U!E]ÇzGPepjL]:1+=s?L/u8*8CYw!KYqifYEҏ<^6rSJBΥIkdChE:<00T+pHa>7e} a;\0U:g0!w yǟ{~Ɍ]Z$uq^? _0aDi1q`k6|sɼT-MXƾ/ÔDƠ:ݰw)n+ dm l]Y.tT^0+S0I"}O8 DuV oLeNnjaB3 O5&"{9X ݰyfts_ y_h)8Sbg`d> WGj!ZsF]TxpkrUS^A1? `UP Qz 3M ?Z|웖&šfJ&Ie+0gH<4zeݻs`稃DSe@/!/ 1{ώ>cWmtŐIzb.^탳 fCUW9ti#1&wg^)a_Y.dT9F,T& )rסy|u 9<C3705pdJZ$҅:KmшjR}UYU4%!3q34gCJ11Ҽ(.Hs5zꉐ NHϋ- UK*~6Y$Joכoy~Rɖ2C !輤^Y8wQfNe-:Ox6 TU$#-bRXAZqYVGsK ޢ{`渚T¬>J@M,jûe&ܔ@;Fx;$D^zFUcKϤ+3 , 6lTsc''F 挮 iacDx:*SϿԵRCuݨ$@kU/"_.##f7 =$qޑxoa^H1#SA92և| 'K$&YЊmp_2zg"c [L/]YRXm@׋SZ޺6P􄲑ՌU憼H?ϲV[R;R30 *L2򺐨1iOonܼ\T"e \ZAuXP \N Y2ZU`5 ">.R{PC~?׾nUn'fR2R&9I wm.$f>KNAa(JEx!BHjKZ w`EN ' D|ZC…!@1`;07`< j(Tal2idyQ!gW د^usZ=%04nx/Jl5T ڊjX83ޭiSH ]V˘Uk|Xx. QQQ-ok{eɽWn}$0v5$EUdXi- CCF PyPwpMDT=sA֦Lnnsʻqw+\,Z}v8,8*"_4.-9&fy[RZ_u5~$ScG f "̈́{Xzmb,!|Y)P.,bP rO~|/9+w[[F˪d19d, 6$S*^ye^V6.Ą@`P(/EN oOmEwyxJ^ `N^#|tFkzB%MSaϒ fLUX OۭU@FLjUreܛ8T!Go *Oj1#ǘک![U{.9D+ >épY nWt:#rqbSZ܀Fhf܉f.]/D7v:9}!Ja[ 䣅 N̼lߵ6K91k鵰6Td/dRd&B|ҽb< 6-MG^%.iRW~{ #oj1eb 0%+!:5|FCIA66TI'Vuk:זwK(sv˵5gc_%\uQ/@huW1BߩiEBZ ߝ<wn1,iW=װAFfBC~ /u]~9jpywC癷ihT) j6eL;@4V \m"P %!)Qc˭J'L"|;)?R^&}8P gO@anxmn+ T3BB)P=Wrmh썋5q.g&5Z{2 fIW,5Җ\Ei+P&R({Dmv`)]D˳q7DG\rf%-D?f+}KnplR}6h5/2;i\ʛrYBc9QʣxkS}G&gեq}{6ԚIOiV(OLSGH*.d_ȓHG% S#GAÆW)2e×],0(dx +>īUCË{ ,i꣏'`=/H*=*L?ؑsa<:|sv?F!Aez([Mks@A"[An>?|Qe)QSr>;޹~ e BF`x()okpA^ fh<!?|%Юg γB QHgzlO' Zʀuu>3&m ^~d c$%1kWz_x\r-9IxayHq.T݀\S1=9 9@&G;g\>.Hkaaj9zٱ.jˀ(3NRbI^#s)f27xv+D^p;y,~Ávwlp Hf)m|vH 9Cgμ^0&n@ 43:3nz-P+@`~j4mR_`fQ!JYZ)x vwP]mXvףIٴf~`>ﶝ6. FX@fs!qWhf/=!hq'3035YBe"qD$v=HڠP"3NkƤO6rN"VO SL`\{kKR}˲ 3ӧ4#Pkoe JO4Yc^l]pN`iV6‚-S8ɉ;}s6i?i#[C֙W=eO TU"w9>.q = +/PnxC2'%ufո4Ilš:i QLV*ۂ诡"66S/3=/#"OK :jfH{ Tul=??MML(b9l2}xR|3*Y,=G#3%`'\n߀t W~ֵݶ r(y&r 6C$϶46Oƍ_V*Xz/BqXfYp`+#si6B9y,o94(Sۑ} 6pSܿB)SR!QznJfA!j>A_ܱnho?wШnKD'0VKQ пx+X.If9X'AZ \ ɜCo7M~~:(w#x(y}d)z`L?}>E!CCW~@J]Cbq?#l307WjH!g0?!zFhuL3b&sWT;Ge6 zΟW"F0%n%Lek?~YvBh3t[:}s@ZrVjK1p-[?$p{?jaxUgTR ʔU~~XO3,_0#b]3URZ' TV!YV}KW)2˨=r zXHbr%w=?&-N1;t C gWr2+ uDw@VX )5 ޒA3n ß ?u93%MKT'E|22VR~{A{E'2>[Ɍ̨y[OF._{r|!!L2e@NgfX/n f3yFS~)c.'2ݷTEO~FJ~%Uc .egے}x.\FK8%-dsA'j8;C4Y3FE-7$žF`8Y=OI^M_*R*.GJphg*[@(^f/x#ND\fE~N1?d}<@ϘA|U;;\1|kD2s̨$2'N&uviѤ)?sd=׹Bnʿ?.rryOS+a \vYGc3u}0 }J9Jٛn:j"oe݈U3rd'*c++R9k=]I2S{CI59U_&Ŷ1 ERG²- ֐sѕкT3_$n@LOs򐠘  BS Px zLLf9Ĉ߃[3#j_}aSw"K W|ZTFJƏPݻWp[jt*TޙӒn ,v!6zCDHcU‡yq㬯:p 'a7Y&[|,EOTXM$sH)Y9բ@ˇ pg|\'Dpc=S;/n<;+oF2? `'"~FvZbʸQ#~po!홿,$X/#ȫDJ^4p˘Afe`l&p|ZB.tȠ{+a$T$[v~eLY4q`4PUasʳ4"cnPhf*7̪tYuPpUѷ Q3fb1.O5PlpSR?6)_)3ԫ;@9%cޱb FP!OĸnosO0i< ?0gzmdpX["׷F)[v!8eU[s&âsz";aGrwyI<Ygc|gMxE_/se x6g9Pnw@}Oaig^]g2:}tڱʹss Η[*$.]&ئ}֜V{B_lf??K {'C@?N0P^yS6@wk!!79Àߚ͕ԌYZB buDYշ3(?ϡaA1BpϦZܜ $/ҿfGY :+Mj2$Pv%޿,çj_kDzގoR01;.9.oWlJ[,gHtN16C"e'ȚslCa^tޅ<#\i"e[nkx~miԕ$1\Q2;j?*Zt^hwpT)qSj sOa9Cgde~7Aim/w4d^{;&kz=&Nc^|裕nՏahMi BxZ`u`6ϼTprSU T)-EUa'#lL3 ZbB 9ЌyYΦфyv4۞ry3"\F"i`43B^ΌilnsB㦥0&5NSh̞hne9ق+crt]l٠p%15>(D"'E`%զz:.6F3*)f ]o^UkqˆDo](QfleВR E'$ݥ@M+[ֹɣɒ}AO^nJH77ԸJ"oT+\d0GjZ`4*.,xvL$I HH(GZh[%R{ہ]*\;/N(vJDZ^=PT? ӖR\Yi=V"mϜKMޗ/3e ʯHpAAAgNJ̋^$&z?'3F :ON1F0'J4SAvƮD2?g&q^ĊW!JSs RsIRs!,z^J^5"/f13BZz7=P5[9iĝC iX!Gw}ĕeOKVJי3Vyu/ :3L{WREXRYl; mn_ɿ q .d9~ h&&70L 5 u ~K.941"s6ƕNCk1ekʵ͋N W?l$FX\ĆRW:S <6ef^ߧl+ ,7jfK<(RO3 +IQ{X,I/!)j?bC\'Ʊ)a9=aHEW,?PDd}Fk-<vxaûҞF(׋P$S#Ki\ϺW~ #K#.Ş/ ;K֢~I=֏Z?3?س+g~Vdk1GPD UE SCőEg{s /5аI;z;bbӝv:WLfN~N jo.vVwi+;=_8]PxfCwnӥ=W0$i5D1IuƨVOFނ:zA\J c *pO$m0"Լ 04QT8~ij7Ԥ4j2-Apk 5|$SӴ [B na9S9 qدB䌃쑏gr;Ĕ2?Zf7cnh0uWtA"Lx&zr,Gl:qSf ׵CO6:%5sFS8YhM`D|[V{ ӴoN5ḡ,)d80#~Sshj' ogN_ʽ +'y)]| BҊXC9gfi:.$1|I@Ϋ6 Ӱ<}'L\:߇I]9AG 1r.T:@ hgSQΤ$` @zdخFp@ݷ<ӯu}V9FjAi2`)|6 <ϴX+%$F +cR+!K 2_S:KU}1*fxY1}= `|~1UP#2 ޔLxon|4a-H_qԔ$jpk(I"5Ozrܛ a R=5 |8nAb>imLJoҠ eK9 :+t .ĠP;|o .3eh\6Hq hMPH  qxW *J aSܕ]Ŭ5o~R|律2M`0NzԺmRSsrє/X6V}lHOt٘쯂{~:7̻:/d^=LnΡ3U'9A{I 6 {=<Cf*?,\!_Ԕ^\)hN}N.L>(M@.kQ72 d(4-tTMWt-(韉Mؖj_?Qi5irXMx1.FkOw t#bfֳۅ+W'C; 4)وp@UHtRPj}O׃&IQ3bsf}zfZx-xє  S:1cV*M4jdPA<3er5E Zpe\ћtx$% ~OvF[ptG/15v3LΔeuu_nuFUjk& x*z}WŠ@xg"eD~ b\]~~,r3R@[ )'܆~Bwo-t<)ּ|I G;l8I$A޸i4y?2!T0{sy}-KY&nƒ220faV PC]8z1`C2GrGgAa/,ڌ9@+s&K$izxV/߻ląW#+&s 0-(`Jy9^vML0a&VyBmbֲ<[+8#{V*Qec20/s6x0%`o2>2d 1mZqaL:-QnDRmkͤ\:=ZZxTcuz`=dZ?qY'|ar&L (a~K< -(hī ۃj_8f( U. BCnik8kNF rheS!>H0LMŨRX- ݋ 9v4s O?Y)X6й\~+JCsEh#.fMщY/\riE%V@ Nc|iɋaIqriE*} 윢*\oxjnPG3 qˀv 5=ofNIOCc,2_(Oc}Ϭj(g\6>@k|k,t3m|,gf-`_+ *DgiapB~M9KSa[60&cK!PP[zf$^:t9Z@gxtǫ&ALNNQpLjTB;w)Y>f2 MrشQMybO>ݷ0夓 axY4, ZFѦ2!G!>Dmwt OGD43`)h.x3& 0qCQ/b$j>4 ]&rN9ZtNjOSF5QQI1&Yށ!cex U 91 Xy39a0UN+SF+%?8 `HѶ3#0Y -$%UȭT/bpAfMtZ'FgMX5gP1Fqg3A%1us-~V)C?[IjF7`1ptr&lV;@-uSLY3)iœaJ3u# 3N>Ā0rYfmY{_FXÿ|@5CeMzI0 /KI밻6P|Vu m^5u1ᾖBQuKS&NW|#2Myϟ#ĺ!lE(m̓P5ٰ3*4XUbWJdH xlCo9Ҽ5ZekRV^Rd ng`bqױfZbMY wzqO[ސFXAw<./EX~`~&2v8}PK%s*񀪌ꈙ д;.;>IEL]&:a Ռ jZxA F0/xJcLwF |D 5\ IOFq\oľӫzu 3"ܛRU6_g `l@4<7'"9޽ilUzجãI(` ` 0i,5Q"0kiŖ1m! 7,)> n,>1{ٕf-Zqb$'[Pb6M m23>cgS =fHZA %e,]罸 gSTy?1kzOۄjIt'>cƑ\k >ղs|))hsM=g LOυ4;̨ˆ!-IB2\uXt?Y)>Z IDAT5HG_&=K[?H5x3lTۚ~MbPYʸoXǵ6[MR$Rs7HN8FۃN>{cӼ8M\9o{>:EV\($Br2hE ,H-vM/t+\Dܦ1f* \RG3Ɩ%>V8)Z4Yx79\v{6Auq销jƏ AWtH8Zf8DiY҄ ~)hEkR!NȳƏAѢjMlԧ eN?\id Ž[/$&{7ElN%VeNB:Լ&?>]fwK$hLL1_П_=^Ǒ|_*:_1Oyejy8Z v~;:qNqbj 2Hiu(vNJ߽zͦx{edj.]s/C=Oǣ\l hg> Szోy[:3}9rQIOf;/jr"eCjS6F~4,jew=녢(AsSBTK`w=fՑ磞y6tovig~0^9xg >ir$H5Onq\0EOF\[RX+ 2!hj O1FowW槶[W-k՝cZ36&_cj$g4 )0캙5'q}Y~XGŔzD;T)3DIVq"~Ge'Pf\%++s^#w3Tdг [R~8oM=Ojzju=VU: e/4~ r|{x D]PK.If%M1#gUD6=b %ЉHfh?mcw[z$QYA[hrP:svS_]MOF. %& HD5S@PgBhҺٰqh$UfwQ/hpoR<9v% NӬV)fW&3~n&޼]}GjN(i&N:-"+S!Pv) "?pL`Kʔ6-! |H];7#9@<=p*QOF\PnE(,p(`rl=p*=B^hjyF+$*a.yK}Jf&:W,=W-)1S&qC=gb՘9zo8b >-go4낽"L4hV{A+ BB靧1H OX΍shTfRmRrp%g֥\BN6Mr֐[Pzcn98kfs&k!A3JlgSa_5Q<,aЋwޔ\FQNT@),\9݂5/Gcȅes>o_]to>Ql2nP;U\K;+%$D]@ ޟ.JyBݲxUƗhEL4Qu%9J7g3Zks{ըg_IqGaD13fmsbJ1 h~0XaTJ{ 5ޕK% Ҡft(c[7R4fh}8% + bICKwPJS%BG <1 ڪcjLr&}2|@r9's\g:NMUb ::'L*i“v[B;\oƝ'5*]{*J*?{%0&[QOI"*N26rg`x;/N;ו[+XY̿8bJ7M3اr~c92slgNMcq%ͥ}YFXK%e|&}9\ 3:fOPϘ-5~%Mzd"feeՋܯ<.g8+d{9ğ>ţ&A`Կχʱ#)eAOtil|{]-"JlXR@)=Q߱ n䆳hi3wvyr#͵#yÎ_7hfΛk52fZhrg^F=48ΤMǐO,]/it {|b4b  Q5̋M$9(㇋ŽM+Zۚ4%j" [06dOÄ긌aj$ɓEKM{z c0Bf"O5]p!^iMP1xr10\P-] -7iPW'Ab`&_r~N׽>T( S 7E6Iр6{uڨ2sQw{;?e|5; O?ˎ1kP&5_"x9KEAaHpH0Rnȇ%C b!-:6J4)Mu'3owh!, ( r.r5IzMmO)N>ؔMt9E :E_=6{S!l= nbʠ`ٹuZD)M{W"Sg TY_!|P[kgHiߣ@.Ʈſ$+]ԈdYN<hsgȉcNpVG;nḆ{~ϩH;y>/oӪwu`21Sǖ 5ySLY$YslbLkf˿ςM{v1` r΅^J%).ļf#1!/fe"`A?K+&]zxhӮb%qƮQƢw2PKYZ߫cx]Q47ߺ,sQ4iS !H8#b(b\w Fk5 :衃hŕؔAjS!3AqѓW, B@ T:hUv;uV1T m]a#T3qNoT6Ga\ NV4޷]OEBPl*c) SiۊGƥl|"5犛K~FɨEj2' ȟMF&`nl72sQ]F65exR5)ιu3R+R#JkMWgy j\EcO1>hu1)uʥ<wm][n؈̟(yɶ2ZjP:(swhp ΕJݿϖ) t[k!eЧI6bSE~7{?1ǜ@O 7[uY߻l3K EM+O;D~ yt2Őd [9Gl#)lBbU;5GY5U.洇XTEܓRD#ݔoPp3br5j&-,Z\LyNÞG~dM.5쯝0!W$ݨ& "U13nb^ R;BM)xn>Zx7jE$hqawKIe ASS<&yT#N=fTU`L'%KK>d(.yM&_[c56NHLV߅%$-wv}[d{u:{ hJP<Z0/h\RfF* pێxE#HTbN[\㈑ͅ-΢ukcM'ҧBdL@*^;S?,@D/tFByQ\ĭm~lMrä+ |>^a^򤁛 j\3j2_ }g65J:ZDǖAeh70NOhnD{<'P7nR4[gu22ɉ-:f "H֣acL.42~$2k)tGNfϗI` s? _Y:;Ӧ_~N!~PbT4@]cepD4Q2Gkſ/>wЖWVc_)vEQiD8=+o[:|ހB֒-|>6]vc6υjDhi! >"֟YPT1}F7i50ntM|AJ ?C zeRzs,59;4VKs#=Z{u@N1/ 0UmR$C).,l/e,p77RD-\BjZAimwe6--WY-`Ă}||^C&:LY\D|ʚ$0ԽC\ȣ 4uu/߈p&3%8˕_aXy@Ĉc;.di-e7RsrhVڠ%YłbYZ)g2֘oܵI W% M(ZP[P>d/D nHW77q_"`X&oqJĜ6(C6u R854}XKضư?ϑރ گ0DⓣuPS ৵ zaeS¹oHh Oz6a" ! m4iOj;4/6EڷVz5|ACPw}q4ڿOyzQ=%r{ǥ$~/j9/kYWJJ: "#ȡ0|}Dz# /; F|0r&ēಱ4^yLѶjF Y?`=8^dƑIRR7.LΞ ~&S =r(ɼXc)sҬ6;><{$PGeH:L-"ec[Oʴs3225ke%F5fK$hX}iJL=>YԘ&}Ш֐7%2Ͳ%1؎:hgsv( 7o-ry/!3$Շle*rX1ݎT^ד5痊 P?agoUY- 2ͦ=R&lɘr :U9߯k58ԳP4ͥ7Awm~3տD{#*Dج2͹2P{JȌjVnaQ&=!j_i j|iw9s ȐG5sLu] ]nDd%T+r*>ӳMp)rw}>QBS1^`0#$dy(2|A:,}lvʐ?P8{z2f6Cdo:"zɵ4_h?4BMޠpK ޡW~cSqj .I wSxJDJz(ɏƾ{5\df6x229 f1Z ԷOAۿcͅRbWo}[1ZZcs-R-?ԧdI3qu:Mx99"'#$G烍ޑRH=+V1}ށ RIɆy6Ό"U$cpX<5ׇL/}_9q[n-HFdi}RfIJ~_eCpHFG6+|7NS E7d${ KV07脵sD"9TN,|v2Zfrsp(VE J J f岴N 1n}Lk`LL~h0ڼx1ּ6/[(.]+E4K#$2u^u=Ŝ\&!7QC8)I k<Z6@5*#Õ b2/*h5}SDcE{XŶym߆{]d\*ǐkn,!^N=iGRx뉭fam bKR" 1c::us皜aS &>6R`~ ѝJL_(S))˕LaR1 IDAT}cYL;2-˕2+B!b|M:$XnQ̥9dT/jH]! 7V+0Jw'żh*ukYtje3fD~6er-%  &OKS14C1Wn+"w2y{L#[hYR`2`eA [oeƛ!Lwg. n~Yr.p{?1~˄)ks4 H{yT q> L[?g"*~q!WH TLНHʄC3tl*NU le-i 5x݈m^*/6CQ[K)+14K[![|k[K}w\t.2߿/ZO|vbswq%>ȯ򊿼Ӝ]_"a* SPDjz;H3¯y폓cCcW\" $:ArTtpQeB@Q֦n24 !?O&zC JJ#%L^>n7R̅tt 쉬JW_ 2z lIJ =OoKo)#; U5pPB:¿.v]הZd!` eISv$4#fw"7HN(sΤK=_iF9i/42\H/C!mCL$=$֕rNpL)[THe PCw-o2)| ?͆\'n4k":%fP$Ic]*}O Cɵq Sn@$Iܻ'֙ oAON2||eDњTg6Js{G%i@/l/$EdR}:ͩò/m{:)O7:Qr -69|nաfveyuӰ1Z8ʙ׫ȼ_#h{aiB5֠+?_ *c5pι<0L[C|IQEzm.nfF2%- e "7^H<ty-FYoZiM}` pullXS}Jޖy&H%jTY22ii{^ .]֑pYPN?_Gm6TQvIui HqC+,3+ߖ-iؽi*Y \* @dMULtt'U0'[C2TRI6C$g JuiQN՗ MMݽ~\5m՘"\%>~4e4Eޏ M']DVi6dO<M{kMw;YTVEtcm*z0a)͉!H~ōgdC3qONOgԌ5ֵ>9icy7=~kѰ DuDѨ m(jUw|OQ>czT򛛾,qpaKkC?^AMV7GRP ya[=+W@Cf ή#ctL3G.$&a00>Ox0=hf9z_oo%yI .FC;Ěd6@,>k'gU+}v%iIKr3ف2>7FΉ=XŐ%n:K9M$SZ"2ا3ꣴ?D7uuB&)xKhf_0K$y"4L;8.uυt::%/D4;Eb85ٔErQy]KݗEm i%@W4M4|?~\cERD븂HDedi:^):Fa%{ 6B IX= \:eIH:,2F,9xj ) tҙbq #Eɣ/O\Zw>;G-BPߙ:`bxF&L\*H^jm ?T.z&\K*ŀ& }3\nğ/ˀu V5/jx$s"_ƫp>!+mk 2ڙrdQǽapM5XtwL[ͻ@оBK dG_>tnd7שÜaXi>R#?1 q;#zAg~(.xqo$rD%[^;_.G-mIXS¬|vq{H)ցݖ'@j~F?I3YL'`1ws@{iBJ+[,/.oFտ!(Yڣ@9>,B9f6f7׀RvS-X&ّ2U vD|hLմ`l$vH78.PZ`giM7iMkg$|ocl R!eF:1WPae:SpPOѴ2#a6~  jPKN8M.zE_6fĈ/ WLs}$QSoՐwt iN9SA4J]" lry'E&,2zB+ vO"8545)QR:h.TЍ֤ͦo2A3y$Wze{Ou#E\5U|cߛP64B Wz|{Mcl.gPJ#!F[2.EV} EM-aYSjn5V祭2ٻT)],2nTR^$aS4d':JM`Rywϔ+'P 2-YSP79F9v(m)6'I/ϋ ~R[|T eq1̚jbZtTiW/HXt#.?(sg~HMEO0zf|+hεȤ2ȇgk| k"kpS 4br1dxV45X;-:.VPt#P4#1?vhڄ1ox2%u~`ަii҄pYDM1-Pp..kv.ޖʓH,C7"+!&aϒOE*ڧM;K~DxԲ9TzT9k/{;,ku&S0D2"!s qh.@B5,B%}[1G l"02ieʝ99h^ɒq[84 ]Dũw\0#ϝMU4|ZGb:r.Tܛn ^ߔ5Z_7Uۼ$RD;{z]r ɥ@8B6d MN% >/?L%uQ%YPqyp*rWz'\f$$PnX'xY$bL++Y;7jp$i<vcu~>~dҧS;N*5m<"e ]߸m)࿚68-WTѸyGIZ /0M{$Dڧ,b#*~l#|=}W`F0 EM< ~iHd {;5bE)kwb )+oP٩D[Ԇ*98:{5i/9L1ʸXb_bF0>ϲB2A%g-jq4/awrYc -ë́w"W9#+\E!x؀RvwڿզWzx$ja[4쌀YxZ.Zri_bfTIswCB8" \h^i4D!Z {987C"`]_ڞKׄ/ g1Fol/7jQiÆ'Xଳ &+&lc4JDE}IT#aJ  TuΈI)āyLDI/6ї9L63tCE>f_-6.@Ĥ8YgD`ԓ< ͞KOqt6LI 5kqڿK*rLǂROjtAѥ^bS<܆?AJT7jeBEQf(H1u{h;@(爓(K%=I!Q &m1dcRd e 7810 p∃  fY4|h=.=/ ]#}$Ƀ&?Ni_\ɑۡiU|` +|XVk ȂT@@RuB`{],~51O"J-ҿhn-(F0crج"ioyт#iKY9GM2OClX̚.YW{ެOfA[օ?m\'fVI\Y¶ )D+#۵`_T|Kb_ݠOOT#]{l$+b.lF;8\hoK3sCSE|c]FB~F,-22Q:45L eoTc+XRJ3rQ܍Y|FdJD#N&y^NtA@*E{vuZgsl1}|¹gjS</<]EV io4, 3m@M JXO.bs G{]^|E*Ȩw+AHiZ{hQS`Jnb-keGfJl׵_MlR}Ɗ=ڞc]eկ% =釭nj9ILܯǦ5{#">mYwvҤ)o$XsBu,KgDC 1I?$~q2P9aa buX ѦL8,rB> \@]GE-i[A20 `]v䪄Z3?gFz}&i-<LW@؊{o5 ua5Cg5 ZҠf,̠@CIg21>Ĕn]T'BN-vH&5k2cS2,]D>0eSΉ [90bh2:dRC@텐Rj1p쎚Gw GuMp}*՝ >QgwI3/-Š I8SDhTl˴"()cx̨ӈA+bKDa72v\Trm %'V~ItN ItH7b__P3[xi0Ur;~4#T]9}_fZ %ǐY$o3 \Op*)1/W=V/V謃D,s$܍.Y+ (/ӍL#j@%7I$ev ;GE| Sd9[mqNevm{nS?ឣ7WS"0X,&ɥ' IDATY#w-u 54N{ΤyJd쯗@WSn֌^TŷrF|bž E@ 50GyEUР7XU>dcccs:pgӿX 9PVL̪iȋ`îyn?;I-E'>w`p)zf6z~v7 haT{`ҸJtf\PS(# F] ~u*5:W.NxH:E <La-iByS:NAx^^):ᐔ>\Ó+7_vD}¤aqinչ#vXnNyRR-c4upv{$X$e zmoxW`0KJ9L.W&+Oˍ4ņ*mى9l oϸJ(-&8Cg){]3CW~rõ hF -z{CSYq+ҕr:|;J1΍)i摙bb9oM);Gٱ 0 b~Β|,$o;dӯ_};f@t#<"(f*I(2cIc2n9 pL*AALm$B}1~4a+Kjj.[ Kr~90cFiߴc9_"{I~UՒ/ n8`:@B1dM ;Od^x\@@Lݔ~0/t[B&}0)9;"RII*xZ \wjlft> bċ^h?O3H 5on[v N#f{X@ABXRܮ+]9m^]雤5Ezxl4sS_їa;0#ݵOʻn}8obzHiH4~^x8EF9 3 AqMq9/>ESejE֔c(iA7a̓8.r"?)=sX I:zq]> ⒡tGlS}"i҄ي@,kUro1"ar 8L4 4vdNJoE4u ) ;eq颋QcU/F':- q2uMIFxO`;ߵµƤfӶNNB@QmLsS0cpQ<98"=Ьr9| )IXNs=g89zy&Rϰ`nkP Ӧux󕋠gWn׵֦vRւģ2!(®X#>1UT> IjQEeT\r,Cׇ-92#0B~GQf6:ѮIS}a8u&8fShs6ס4fГH{7c7#JQ2IR/^Xxg|$aJ$Wnl+MfZ@@;;*֬R8ޠ9; 3W>y`1S~vrG㚉/Q¢y-~\Tszzf9JbĐ\jU5 ܄ 1h< Z=@X-`WiשeE*sN#Xz>1`u= )4}-E4;B4.~(?ґ!WҽA([F)J_f`Ɏ1zRl\TtakC+1̿xkRƆҮ:|Z4Ja7g-~D:U2RCfM:=$SYdTWkj75{Qi){f͛$LC<+KS+xFROMΟǽ6BQi1-lMՊSqw8K[Y|Ð #H2S4 ,#8 FCYW[u'6]5SS6;QwyS㱁0~cLL lz׫A{8ߒ 4 Png1alWވ6`gYüp5*ua]{ϳmuI]2}FEQ/9XE`"߆F:Zbnl7#m-|<<;r**~9徆26L!;`k:3ODZw]z7Eq=H&r?>^iS'KKN0C:+j/#ĠϴABGpf8)Z= jחaLA]BI';n$}'d}z2\=0ὐn22@f?5!ū(U(N~}Wz:3s`݄Qz*jAwxpnG4l%tfX$ξ~*Z3~J;ď lrHi!1rOC(0y  v-!"Mr|9]1)hfbRx"*,?˱ڴ 2 &qP:yp{am,7UPfg!_UvF\cVii!0<@0oc/`-R9ԄWz;5|s6T y؛` IFd ]=Fi_:}c58v]sU2/mo=oknE &b\K 16ɒ0I5!K`$$ /6ah 6k^, c[i?T6i+?aC cj)9p:Ms. /3Y1Pq5-OZg1XzZ?dkּIst1ީ̔5}/:-LîLx(y ij'q87ܠ6<4KUXe:lHe[ңP4Às؉L1yh=b h phōjmg)WyR 2aE^l4s|ƒ{zAW5r(&f6ñyNv>*xWSI?z3 C/Fh73166W{Zhڼ} z C18`p `mxS0 4lG"3u$LdDؽK˽Ƃ?k${ՒB}T{zrgd츍}F Bamf(@]tUQ7lzAC #lOLwh UruP#Vp"^}x8D2uɳF =o=]x'/_eҮ /p6Y+KD-_ Z j./?#&7 [&Bzm p1y"`rf;.qqW10վ&Q'19Cz'ɉcE'7 1wWA)^4-22SQ( =P ;FZ g<~qAΣ2 F5KiRwC|/G`:ͤDJ1~dW:^iY}E4PgrpotMⓍXY r\_J| E"w DL"rm?Oq/KҰg"MB3%Es4<$nQd<Ҡ>(@CVc ԕ9%Ș,#b<~^4~AƤz_R$ܧlO@Q }kk7C xғ5qbaG(2Ay`HhWahFkYuSiۯݏǘ2'h" s_y==_y ܟ"KͪЖOn@;R,{TF'n|⫹Kthx T'۔ocR*vmaf@,aX8,E'5OVF.Om3),m&HOnG LN qNե;ȧLWU՞ IDAT&7 m(̳͍}pYĀ?M$Joge#~t 0jH_iK“5S|'aQLiMf2߳Orq Hk I-˾ 5+L<<^4}T R0wIz}#GArӹxiL&!oE}7ϯg=w* ~%=`l:nYxY u<`T+{,I[GIϩG0w3 #%u֑ʌp ǤrkͪCJx>rk1q HkүAB4\2mVh3&Z5Vр3q; nIV°I3>!>Vh8Bn:&"29LlZ)Bnzz/uIX8W 9D7l82|=֬4ɘ<ꓜ&l4AQ*<ᬶncegfa>Ii`W7@46Ϗ^u 4/Mb&r^9Y{I)}T9L\;MH_Όaxp#:rڌ8"Tw;%͠isp1P# 9Kפ䴠J9=fݳ#k15p3aL P'~"G%.8~`;pX)4/^DdH0Dw)',~q'̌13؋VExPȾK`_lF"eщنG3b?ƌsalGE@嗾d1Jټ嚋NU bύz#H5ip.״Il08ɛ>L8~)q4UAu <14KUױO20EqL u E74\o'YjH+Smx540!~aȃ(!{tѐEz&csq}EX6ϼxc!gOD{qxLC;o Ӧf0ؑDہF{du)FSߔ6p;cij㲗vY?Io Ruo/i̿/׽]{~Nxa5(&ʴ&ע4gm̡9}* eN}SY_A(9++7h0Muodc` ؤ4}kXRN_?*FAٙhct@!GazOПuƉ( !2a~tC̳ݥs4uE::uvm53ƘT \ !,Z/6}M(# }P,DFR.hX6uj `RwVH _'zrnk߱LE1!gX.S[rǐ/HQEÇ4>8~chct!DB1\s( '@gI2E}_niOSzg?Cc~>Hw _+&Gx$VώS/aTf oEO/Nm2?ce ȉkLڌ4N2u۽AC~Mss,(W2&5o c$?'Ds8q#cgA4L)wMC 2?(u2܂TizẄ́cfrPk1i Jؘ0lÅ!(4~e3ZHzČʕ-u:kԳr~MrmQ )ƁX{f.M "}MeQHXOF2Ei^I&Րh< ZM/ט Bs.gg K`:`lᬙqqVZOP-ҍn_{0H q8%NzD}@)AbUIO6}EFPvO,; jx1 c[b(:Vݬ7TMII(YTmqPkɠAzSmC+8ۓoBc䔙NzULFCZcb~ksCRx*cGW#1.I#n<$;; I~P{=~8ٱ nPԙ.|wpcRF9GlFԩAbx6b|J'G,뵈tI`J~Qlx|IcY04oIg@#g-I@=Ii˲_#}~ @( A`u܏Vh硝HWG1AgM db!{k"{) ~tqEg)Ba@i*ٲ: $):с soR{KQS@[DLlߠ[[h_C]h=:GG<0ƾϮ3ar3szQC1=lL!:c4;J OaM(ደԆl0F%W8< G *%`MAΖE ypÀ 3|%P(@70Z %E0Y1}V4rH٧aN8M2ʢRi,<ϜZIˀ;bG8g1҇LJ+ ɼLO͔scIk1W۹F|loȡKt=8θ[0"IO85D˞VjCc6{Wu's VE?|%\fZ[;ͨ2މ>7n ]B삛f[|NύK%IҤ:wa~j ?U@ }3h=Xz M|PpRqM]iAts& *$VV|f;(HFx]F? Zx{cds 82Ɵia%{20:pMXj"cTW;klggRFdhrJe!SUӤoXMfd|_OtzBtʴ쬜޹~'|?{ O S^˰=,6hN.,'pf$>)?:=Zp йTv6 N8vUXN6YCJ1xd*8}z9ٞ&$+R* =3=SvXSC`%d@[vn~޻eL9-'فƐjExΎ*OR=*;Ժ.YVp&'@p1+N ~fZf$3m* [ך|5yid̾B:@kۼM5r$-L($#.?yUjYlrt`X˧}[h.7Y4/HSDIو9h051#(1!= ^J'޹$?2j%eEw;((wN7k ~4U BLEmH Lm3&>@D#~ΡFoHxb+$;_t0}?/ҏ~7g%d΅[$Y$R_4gWaS):wҞ=j,&+GdZeЖ1D>T :fPdM٦{-ZhD1MhvŀΦ "Qvo?a_LyoS :r6ST_?Oc4U2Ϻg!5kBӠTc_eқ'NLMrt6t;>0\uQh,qف@Ljqs-d `0HǸP: =.{hhxS5S%me GK]{гD_zP):&7$ݣ9\ p4V(Hl12|@̡C!Q}$0gDdJZ)EMaOXtaZ%-^,u.g"M;)*'@zf*(Alak@ g0Ki24;߷n?L$2 PcJTMD0J43w\d 7ے?%H B9x'nF/)JL7KƦ ʲkɆCz Z cIxjJB'o"d,1R/wGv,!ԥ܎ ؘi< EW0ӴKtxd޳>t9tA'^`j9,_ > Le:wρ١Θlz2:uK`yE6΍j,^#{Icl;7zS S% clyCg8=xwqO?:, 革Atul4˼DSCދ#)HB܂өZ❹bfٗT101Md!h+L8dK>ze{?i' &)/j"!FC*?=Lqk=3VWjuDZK ɞy4JgA o `, 5H2x:LCn@-QI2HVoJ3ף?-p<; R+Ԫgգ _hvr+8 IDATfϡ6O2גZ8-iɣ ="<Z#nXpn~ۚwYf( TҸ0?!otM%Uh:+J2"վ94iIw"B$W  *+POظd݋Lɣsi\픫 4VĐ=|YSzIsfr ,3z_J\IhZRMv*_3^Hg\qm`YL@^uX *˓e J 4'⛖9ЦDj66пΊESx1f;>ʹJfhDѱ8{k{0PswI2P#RJs K }`14Qͺrqz7g3G>Q _/x:_4e2 bp'J'_.Mi5heM8^p|PFUx݇g=خP)ΨI2F$9&F |0OFPY AcD{\#5q5v@#B%G ĄX r)Uώ 89YyZx@h>s!V-8t>CW﷋NLca1ݖQL4{!c.;I&P~.t{r"7Ym@ォF6-~x}4l=kܧ|oIiaȢ}6n'ǩsL.ۼH3ǚSk-@A7N^?JbjLfFRgEx~h_΋,\(k^8Ѷ"3Q0LVH ?ey]" YQ?0\|cr̒drS*vY,( 'fY{HcZ5KK $Bd6ï0)gB"QʞH%:uL}Ng3 ƢHa8z1үFVEܘ- =u쥠Jg1kepɮqTc f}N˱w3B4L_*a{ܘD s(;/PK#՛i5p}IJ5#C+y8%:Ϗ/5BPpZL*i TZz'ݣsUC_ 0x uzhdAjèd뼿:il37wv~Oy]t=/=IiK9 Xc|󬟦=z& !lykFQC)Ѣ 5xowdG;M~N̏ 3uU#CE/-d,H?6ޑFIOme:;PWRXf*J(mn/~- oJ7faǵ]jʵo17۸ylZN {C{6ͺopbu۽Խ>T('m2*X+ 9r@6m z MQv|w+bl&h(eƕ%4˔ϵ ɢP_D11ega.X]^-3Yt8‡o?Cj^o}B 51'9RW"L$/U:6y@8M RK;`@$E4DzI&:1dE_r $d3~!\X p:RxӼB}#B%Q_t'"Zn6g6 -ѵ*A^'^*7y˗ *p1 x^ݣ ~}ݑl:THwD''*-ULat|x}i=R=%$(ov='DUdZ#Z"VnX Ñ| B[F3u % 4;P],.fC-b,< ewꅵC|b:36߽5, THyAu[@|K3Tb#}Α%wfF7 x0$L1orlR ZN܊}=^-Chq@l 6NV7[3)ץK!(.Yd/IX`AZ$~!muzz-4i[G3{: =HyWja\֚$GYzqs &=㊍TWf{R2&IEm N09&d=&?l&iw(J1ћW *Ϡ:XoT==S.+T*f2ȥ0ԩ|^}N+e=,"0#aj !bu!]4}'>0p'wo6 E> ߥVL5DZ }f;C ?2rR)uGh9OIRw|,nFR&| [֔rW]%9^ft7]WLߍAN$Io=j/\fĒ$gk1DLGrT"dZy5 &ɷ9k.13P}BFyIH 'h۳\X CS΂w@av/#gŰ%EG(jZ,Խ#VtN/#ٝ P {2!Ӵ[VK(}.@Eэ`tJ1g2<^p>Hj g{+ +J$6Ƈ׋fNz(bMb E'^3!蠸:^ǂd.="FP IX,]sӨXk9p)9ĹלF;l?42.&^P6OE+uc1yZ>: 䀋ve q+`Yxٚ,hd}aCsM]dQMSL 3^}ƪfŮڔDEQQkyWV@hfT}; -2xYA{e uQ3{{Dc@!4ΐ׃ʿnf闞o+=:Nz_J<;{} X-@YMg9HHI&s~3^&-_maEKb(-ozKgmJW ~4G]{ܩ&e|X_<4OM!'K+cMZ{~6IfC{fnD̪Zu=d(i mvA|1,|Vx# !)V,Fv|v9KBKj%?w &o5Ǒ?i\j374Tn#_A6(ް>  &!3m=Ԡڲ̹(3rQ\k}⻷4t @w52Х2ylnːҝZr$-2쁺4}xr/IRlI5Z@:ƨSp\zUH/(:3)>53 5_@kR롺܅"Eݾq}}ܤ7x;}I)}ݙ608 LJv!Ign,X^SbmbW:5Y{pY@<2A&آl+s4mւ Z]MҎOЦ85tFz=g|;5,^Jo9gͮ;㻏Ѫ"ZKP/ #O]=>=֪43 {/{9Ri`;1;qA*Ts#>.;N'ꔝJk rF\zmqXr0+1o#[ Jq\Xp|`%Ui[Se׀!GxS^6ЭW^滷g1 OJ^e:~ôkKkҠq2\Hs~zj^ w;8pa4ii8X@,)y >'y{AEPA&’49!^9'ۙYC3UH6H6Xe#T{o8a~8;X_2"k&cS.$Mpo \5S=d:Ր„Fy׀(xW2aWP\H$3:ϧ; WadzW" m3.XDm7ÛD*iHGq3&INlE{nTU?쬆dK8*7֪=lhB{ɁѰ!Eзh˝w_mƁRs HVvD,_b!\短[AĥAƗa&YM?-14"0M0sEYu~D cq @n V[оl;2r Q9 12ßWm614KV߳NPk7/3O'WeDî ?cEOٱχcqBNt18J=>>iԷs຅a}ܵ{FiBeW# HcLz|t?T:K @@J+PߥXITV <( 0htY&knTXYަ5ѩzϤ& oKi:@YHvR(TGtQ*3u9J4+Ц[N1*#+0GƣU=Y;ٴ59hój0+Lt&7<1gzT]D-J+{6vɏ#OQo_%m25fG,Ҟ=SjJ%0f6hRF %OrwdISAwWY)MF0B9fX8]GY/|6s7jgwֿ"M|NW2*ed2mڗ#Qq.!H1YWq7vhOeiN|",K%CiTx0!838 +y(P4I4L8c?5)D,֐7@Ui|'o=4e:F9Lx". vfм01a%FQ=C:_xXšo2gt4 vJU6!$ђ2F=Hj"2)1S.!/*Rz`sA={p\bqnbB@iNj=_8ψAnjB))ԨboʂwAؘ̻tHC"oN9:6L9xGyG-ߵ;WYD;O5DC'-/fgS,<|8 !y$a>$ʁnLlDhXiG(4Rg+wꥧŝ=hC'e-m+4#k}.Ev79+"ZpқLe)/576 )S6 ^0$;kQψ YdiVgpX,B7LqNDr}?Х(nв.d=Q`00&J#ͣ? vҼ~[ gidl)5 ¯ Oeu n 0`J}¶I, ii$iR>,f 1P/q.ik*ot=kfRz.ubO\nú_}Y,֤' '=_qcfw ʫig#eDւV&@n|j/񬴖R9:+-Δogk4,@fMX*V;}# Ͻޚ+:爊6UJfuϴqkhxͷ 'T_0o .zй†vfpkWr&ؗ>~J]5r9k _)y98'3>w[jfH^)J0pP6%f%3Z Lj c0KP=X6RSlғQ%ٿiX,ƎJ-~npռI"j4i ɾSPYǭv@Tpϩ$fKrk#z$0YcЖqoQq IDAT%@߶ؠ^={J"-z(fx_ş}_f,ַFW`eFfSN9h{+n`F|>KA?ӵȌ>/rSk]Go%:RR?o| ֓ *;|uQqu\&\-e7Η*dr : ]6sQEI>u@sF8X [)0$qN`pŦXFʹ#]]A>L#DӜJV VSO J{:=jج-zqivdgi y=|N3 t4X~g(g\NK\p,'ad[L7a[L] ]6γ< 'TѓhO r/ hr3k_;8*MtmMG/oN<<{\ 3 MaCx>S{ '^P.b8 n3C4 c~ly*'bwk;BwaFwW~D_c \:Kge#/9W!m%i9A@e/ D^0jؤ}v.S&]/nR[-ᔄȌMv"3,)ozdgVC`YvҔ4.b*n ¦yW}8g2/}Dܿ۸> ,W1%Qt:3\g)N =30[hУa ;k05j *lEw 3>4k3j#8l8'n$}ܮ(4fFeOF4)NbGђp52lN~ |V  ɪ]hx;#7%>,4Dĭyv!t|b 5x&pNM>q!=9i2Ch8 aJWbP,OtvIM Lޢ5Vi F|Jԍz|IRXoҷ]$s3ô+ii/IDKvРW6ilRL\◊ j4t`j$/Zx4b>ܘp J46<OFceh3Xlyٗ" =MVGq)ߢsF;HñIi.RL{B%RK͚7Q;1T 8{t+L+zI7E \l'목|Ca [e2ueOO,EqEn3;1 b#**Luf3Ai- S-8.*xs뜽OD g^Tw/Ɇ1g`}-Ɔ]L>Mjj f>'idhƼǠreN^\w}fqSVV1 $DEتyȤp6V'!knn8#u䑳# {YOXgwi@AJFBCT$dVNh@ GiA,1$,rQ=EƚtΜ;S**J,<âm H| (OQibY 3[QZIRLh4#~+j~!24#\(+86꟝结ؠp3J5WZ΍K[2xϖj:62 Y@{DEƿS|K:~9Lxf$XѠ)ŗb bշEET4iѭdC\Óܾ;foz߂lWu& 83OsЌèVg &2jƬB^D2D*j<~LRPsS0!aՄdV8;M[_P#C ٤ ذ)֥}-rm OsYމ.X4_`0s3Gʜ>~8L=\=.bEtiU["hM ;/!΍[ps1d 5虪!XYhAFiݝr(A]d%&+]mHۼ gY'"` ?s t2:<;4lsŔPz釁ihTTU(S^Gt C㜥}Bd)rHyr |Ui=?@YR}Pi))Lޯz׬8Q JI코@療z 2[ձdyUm'03՘7 Ђ<7`x$JMSMf:9C C҇J5󙸹2^\&عĎ$!hBzW@ϒg*޷q^/hUlI8Gf%/IK괌?b^e;tFCYaƭ+c@5[^)VAϸ.ȠCJ]{vzG&xR(.<(d6)MRG軏VvVht*S/{J"T&ɖrK|]ܯdſ`?:GW~.뱪9C3- Jw(UZ)d(y`슶"5bߗtSz(k8Q%s6*(:5=sT:dX$:m"pV<1S3D覉J48Ԑ3ӕPf52I/af~=8:%wŸ ź&~_ MϞ.uM(zy$Yc-DAr3xveFñ=(2AK7&B<>(I|(tn 1ٲ ]iNnAgIMdZ1 \LRЄr/sGnxwޘPkXpΛ¸g3&86No⤉Єwz ;~^;.uM~úL3<3fNs6ԕ } Y`{ENNBl\ٸDM-f0ߍgbEҒ1w)yOĤH 9ݡiƙ ]yO{όz·3Hvukޑ1%ai/1Qda7|LIHMT^ht@QLWp߭ %6J/,[2M9 0 LCwf,osV}jY]fۧe 1)b2pQgawy"!MDhޢo_=Pܚ8+Jw+ %9W1E߭NxTO)1ѵPVXMco/u7b\?©?ܩτtr[&"s1Fw5mLwN3ENEKN!g+=e]IMo˰K%d ?3)37K8~w',.;KB"*2&V&$rƏ6K(AX?@H%x&ύ oڐ}?d\^({ K"Lr/-q'bQĨRB2z-l ?CM1Qdt087r73ֶKij27?_iJ}3lZ_10gJdz)} N_D٫(%)J73ۤw97#Z%) Rh$Dp&67 tᥲ~t7Y'>j 5i>[B*3LKm[Z7(4r|. ii }4WsC|toZEhtr@Ōv)j1{pQYdQ"_ОSd1F rVoE$mo2/Rx@ݼ 1RA**g3|뒀t@EFɭmm4|r!&RH\Y ^y4qMJ?fhV cpe2M'K² iƜ@< xZ?SQbo)G6- OR iOZJ񏹿tGUh%L:$sF=BX44\ fCc"A9͌L݇SRt[p6 @o9z\i} mǰȂ OWt'kBt<㺅ih ,{(k1M2Ľ^Ab 8ƺLh<W(r L2Uh2;MBkC}_WJPWvmugQ 0 5L#wBPC?/RϚY-Zq4YUŠE)괤qW 1/m" 5E1RSib)ICaśjY‘o7 F8k5w|XdTZ h$0˃/Ni/@.GͅmnS̫J;G͸$06+5)x)i}t&p^Y% 87[4)GĢɱNڃL"I h-o* bof3;uܭݗ>/ ^~ q|ZƀAK#G)<>6h Za&cᥚH^y]mope@7[I RUyON"fםWuw;).DgB㰳5Ԁy=Etrw<0.L\o. cG6a->_4(VLCA@40/?ϳ0Β$fƿ u{B1L{HoTo u5PR,/bM歾gF$NIu^0-3qsaFSⓣ"\h̍uM43ji~Ϟi[VD) 鹔 6t iř:pzNB@|KA+Է#7CvTID~δb F\}L"@O3CI^Tgo[fWɉ4 ӰWàO7aIEkrXf+"~g4H.ӄM x)b 暛t R )sxyT,>\w0KrWUDG[&*3Ox|Po!f";21ž a 6cFt1>Gn%kKhm0A6wCG}xL*7թ$^.i5(\D6-ܣo.s qv~XׯP$.`IAU:6dLQ>znCqH{i&5(LarJsX+/&Up~3̬V PV]7-^;l1ehҁlV\cSEEQg4kTpV04b&^EErwŠ7OjAM#6if\d'S5uEpsFEba .݁'\K-.pm-f(wPd:49o{ ^lh%hθTl%بXM^,Nġaӝ7n;~D!e^'YiyIkSЬ;6Ѯ9E bUQLꦉ"#.PyvvGXIf2bH5xʟCEd8,I9RIg ]ڥLb7]`|u>&t F~8St]Q F=l<TζIIBO=ӶcBq!$6Mjl e&dYi"yZWƍ!Nc)1au0-Ts6\9 {L7ʓZRm]'5( D 3tLzvG3a#j*s}?s % 4] q0`L\D5{㕯41lWw3ɇπs I6;;.Ә ̗$bZ[Xy6ա22JorP?&zK tʟ} ŹyT?FbPI#!5"Bc;x`]!HSw3o8+0@t,B%Q&gΘ.=a}wx_Ϫg%;;eRޗz+5ňD)56tOb(h^]2BC+]$5 h wUMvնFIz]%֓].7MK&X z.JcĊ_Z|y5matzL/ IDATxhF4HBQW9æCc<HiҮ9@Q"S>u?]iAöɈ!y@OVi4ձh59BA)mC&9ǽ`ѓ} =!{*$櫠Y6)شa7L5Lñnkff8b,/Ό˻<yk>QUCFVcAqCB DW#<" KT4^&KLRcճ ud@jTM|u"trb Pz,14/4Ӝn ;S[H%`O^ Giծ^>]w(TOy4A'MFװS=n䄖miǵ,Kޏ]^$\%wZd9DAPLFYK ݼ2=XШoqa%.{P8h ;5AjwR7ћ&AoUfo89\9PsEҍ 60 k\K- 9?>n$I{9ӈ 'VIz{|H.V|wg?^xKpASlA9p ĽRS  I-]kJP^d̞Li%jiR([2BYnڱnpl)BD@B2Q-Լk]1 arI/(ߧϺaE2NW?gf)}۸9`G0rwY)*h4LLT{lC У8!}[lf<j}=̩ 1\,렟a"vKZWTE !v SMaҜ.JWKid̿,f!"ۅՙv|_ <#MĒGj$싍(uݦUdFBBt.ªd* q8>{!Լ(VT[>ξ~FNL,G[IR,x-d"ɠ3$-sVcX0pR%/5|4eS/93=YB=?e;&#;^68le' e뛸tXplf>LgJ:Lz޷[4jȈ=UfH>(RvtNFEIM (u :^Nhdf6Y|QZxu6}6+J['32h_J)O57Go՛-8H}(V΍#Xn0,nզoORehZ zE, zL 4J~  ]d`(eb ) e*GF_}^D_Bv>R3= Y1K*i`XCVemP#Ѽq`X)n$'z+kED;JuTcfؚ8qpB5I6d6Z!^Mph:2wre0e~Q5UG@/޳`_֢[(Jg̩"wjL$P5qAp@ *όaϭ7ic.;Si/+օ40[LJlt"(9%4y+J엝K$ I^%3p3 qy$E6z|--'P _)<#`TWMyF)aYIQnqQهLǸ]J Z0n9A{38a,ۛurO5ՉRq"_ Z^{.^0rE'ER;䤶 詄!Cy}\vֵ $ظzkK=m5w '$0:#iQzi{/qFc¦:mV2nDtɋ1MaђЄbu} j 'Mg #{399Vo&SadOM3 ҠF&2F.B<ݧz X"{(0 $ހ],6BD˃^ ?O T HP3hdt%0_#[坤=qf T6S_?_kܦdݏs7U4 9eaXN8_G?ERQO\XS|e|OP]:5Ós~>GqmH2YUmǫxbM< 3 qcCJ?_:?qn9+b\5n8.]ڮԜY#uߋ,z^Hu˂ I44ㇱ~AƁNo6[đYP?G#UDHܛ} c;k"Z71Ae&b6KF96GXҨP[XV =dQXC:I*s^_!LFr@kzLQ&03=!Ήs,zKeq^&َ2GJ`#0;95%cHژAQ9M*ՈH 0di$>e(z|Xk\SC(( 揹@Y̛AۥS]sѵHue mR ?F5=AM3 ?boܸ y]>w?2Y 6 pǀ'E1bPm6 J3wB*v R.Xr?ifhmgbu1N(R"u3%XZ]^7OEX OBTZ@( Q-J먎bKl%J$}Xk}I-s9<{{yE}N;(Ni6&$nʒsĺ#]"'r ʬ/E-i\5y"N䟊')u3d[@>Eȥw0u?|}"a|R:Ik@byڊL en ϕFHC5El35#ucArEh.,@O$Uㆫ-x>X3j8#E.Zr2@zr{2c^6r}7tAHM&vT"OTdwȴDqeu=ïl: Q{jMT$ 1O!+ XaBEZ]:d|:F۵(@`%@!|Jl,sj=trRUf;,z0.$ Mu|~8_#X{B21Dd.3r6 sGƀc5 fqpccqS}L2X@}:Eo\hSN$`Om6I 8}H:xhL\k>san(%f2#3s!tE:D,Q!W#ŏx9XS4%\K _:f#n^jUFq`|>}5A-4;0|gb3'`@F7 2"'hqN;RK\FQN47>419r"鴀F.]U,Rf>4=se䧇m[S!rU p)v7kٶm[ޛe/2.~zߋnm0S6 Q>/P])j!qZ+|F ufa[ In}ik2-U^UfrƉE0ʘ 2/N8 !GiߚPx#7]8b'd'' K]l${M˝~7 :Mf(c:^M' $bByr&NgPw%O@}u@tr/ z]TcLrNTߍԌVHY&"Rةzl4At(K:h{QĒmr@VyW0O4u %?币=C IDAT1\!uq֯Ҋo *lCFiNMXR\^<yFhNqg%E Yֻ̆Iybmec]↝L0^#X%TMA9S.Ԩ]=^(Z-0 @aH 8ؓWsha٠fe⌗ޔ)no#WHcz:R4 *9#†!< S;Fx sp Ѡd ]J멂z8<$(sBwD]mn>=(ͬ[f/jk٢jI败r!$Oş92 |ؒs;S] qr6-$kٷqD\gk3mv.6!S O0`TYŴnKcU 0U I##` JKȸ"ݻ$P;i(1A:DcTe|V'w1ZS,'g PK;]Iq'w<;iQꜚ:Nrm@ Xf|Ѕ3P;"ȑ(T ]YSE>DdDAv-@أKq&ʚY)#R R g;~gY1s` 7]Pmm܍@fM\(Z\%'%^+WI|:&|c pܲ0e/f " #J)YT\#]ga= J&=Y K OY{3S; ϻyRX-Mn~yo )XA0Oq@@w;O,5kɂȴT*VGɫ Q=f`L`:.eEkHgQ7Tř{rUtKQ`'Uّ2KG B{L9EP sM4)SA!&$kݥ[gasf?>Gwkn }Id1h(p#4[}Q*sR-I`:Ӹu-s(.J+Ϭx۽kn\ׅc`+7zem7 5hmUVjB`kG;{]9.zM)sEq"q2o_o<\ ;֦|鸌,wx?a7yeVe{as2tX=ӹ‚(XtXe1^9oMw&@wCH2.ā0z!Sw6 F_s1MaQF"-siɍu$qD{.Rqa&S.i:g"ݬ[z4.srVF܅ k梒e7"B&M'3(~629UγeF{ e3܌~>.xCNe ⃓كt @3;!澩H d4a23gtjpF" 11:EbS{cCrHˍTr>/[if)}Y(U.B-BCT$/-bM?kH,cN4%gyA?m@|FzقPyx׭\-yWU^T|~rڦ.7X~Ν,SuA͉ڊɜyi2|:;iȭ<YoQ{imM+M )aNb@mdsVRH mQ=  0dZ ^,7!Бr".߮oϓ/Hs1j 4dJt6?FM"ޠ cۘv"} $ wO}Cl(`.9XG^:;9"L <ݵfa'@hXd N^.IUnƒMg !oc_LĆ k 8HQXM2A_ڻ?iV tơj_3 dE,:'ͣ3f DI&gAv, ްQ|ܓW?b.kHѬ)t:I6"X N͊Lt3c#^eT6<*ZYM&ªꂍlE;GEֆolnى;ꋱCJ#>jKo~1ssHUiLӱ|$ՅqSgc~~3hN:' ԤRWp.Z4܅̒g{:5t^dCLXe:= @,EA{Ӌeό:gL'˗j@ ܐgyz! }ǧG8Gd(U5ec v*WqMBfֻOB L#lUyYP_犓AVMȔyqkpX 6LQ!{0FN]ydsk/9WJw,3SATN}*F/I fW.T2rG04(#p2$M~N)Aʲs*^1GLDd f 0q ETOH$+?e:#[&"^hG\R}UPۊ؝sh5m3ڬ_n.G^5Mv +_Sd4(^Or*tӓ,ؤ鞑iUDle`_WGvqxFd O8J:gd)Hd5@Nai~ sڡ7} q5mc7fZTEM}s/Ĝ" t=w]9LQ9YS~xǟ}w=]=cݺ~u]smWmv0EyMsu{7޴7߸mook{텯/n|Ymŋb\w'k HGPFϮLŷ% T4k~B+w/qVy1wքV2DPMoW\"#RVÚs/G+ 0יGv͏ŵ'Pۘz#CB35h+j h[k/H'H43a f< @ŚC);Ѩ8r2bi]c"3Rdv^GB{n=1{ɏCx|{'GzWRWD;ojo+/~^}e{o~^ywd%MK{//~冋2^T 72⭩'ޑ +vEû}.]jlLԜ-#E4x Q,09 Z|-b&Nh"E[ x疌ib1\ \j/H/F^ ␛<$ ScҰ&B"=ȥ鳨 n yv5Ы86O4_hLoqRu+2Zf_nVDz `W)ri81eKZШpf_@ [ NKS8bndPtiLGLp8. ŋ$N$B3z0IV',Js,fEwqPf+Ar{Ҟwf.w^0DA$62pmτ5`JH 0|2N>' $>4/=Gfٱxi,dXf{[c7w`Xs!@+`qZ5aY`l-_.؜0U,IMRQM DD4cCK\/C(]`a:7rh/_ok;;\5XDPL Ps zRa" F9OJ&!6Ȏ(31%[ʌEсvTIߎ(ծw=mi{'n}{~׾_7hoݥX61x.đ IDAT"͒C꼤=OF&:m#^.&q5W[6*$P:4-SK09o8`Ð[( f_`& ]֘xq܍a\ggK=h;<7YXG=hB͋ 8z;ý(,f'lE/2i{{kKm3wX!Z TmЩ9Zӵw!fյNȯlM9Ȁ˰RBI_4؋Ш H􌜥ZȢt jEM|KLa ô>ffcs2 z;t0LQ2Pwl=_#ǒ,Ӌ@z ;ܓc0ZpTeT'D6]xгxiMǓA?QT;:H{,㏮1LdCIȨO qXlrAMvIsj4(" G=($f@RV}]+obxӸd). ߒg4 +Of d@,vmHWǥw\5p#:=S@h7t?.t\e\H3^zi{S?n}?lO'Bƕ͝L;ZeV: TA% 4 -)994v,`khM1KWC<,q~G9E. 'o[ 0GV,>h$:LO &gzxMr"HK`]C3")[mg*sz}Bͱ;x/5U),~\Fa"_9&@{Tf-/N~F;t l+'Tez.8}Pef@n0KcQ&ewbMhޭ[1ɅFAK;?*.4 1Nm&xDkJ:XPl L.y4sr`*f΂]9ǰnzȯ֚¥ғֲd]𝎉gdĄ:-B:忣)*c<9{?nџ'~Sv}/¯{ػ?){[_?ʗvoh@[e:1ᧅQtl\id&ӑ>th}Ht„6 d;>Aَ[rnJR]m3YČ9z{c=5 ,)9`M̻ ) L.Vl3)ǽkT<~o(m%PKRVжj;pv>0Rk49BOh4T-vp ScdxB}strHx8h)j_`RV3ғ^#SgG$\}YbQgſkv'kf"W+!AΒ "[EtX͕O]P*wfx3t13}~ ցS_ I C;QML d,ZC. h260ߣ8#amQ!+ '0BA >>V35)쬝`AZ+j0ӎ,9 zLY^7B2˒9cjbڣyƶ[//o{1{꣟'?G^} 0oҪ/$Шs р8wQ*fNN·Sr*49jzy}w>Ηe&6J>A|XE,s9pXrl^Ql㸫IyLej+N2 R>](e8L㽘LqҁWŻj=+C_9O3f˚ 畦 ;d0]86J> ISc8~VܲMfֻ@^w' J TόOX9МZB#? 5segd9ōp题n1_'1gd#afn!k}|ه? }{]ᗷ{g~~s"n4QDVO]ry(ynvhP !PIB± QN7-'z<6 Vh"ÿ ]iLrL"<ߑ EA93M7 sdRϽxz\(b$5 SRd4-,SSEV&H 2-RbJ[i 9z0&ܚWEh`~hB6vqnug17 KU{[,c U`'6 A cm~Wߟ'ĜhcQN{gA#~ }/xF 4^. XH Y4րU-!DkHB¸Yvg%=$L kQXxk@jsMS]C9= 2@@ U&sr;u .8_61s&=EW@Q Z.]pR҈zpЦ[#9}ݞzv}헻Ï>{7oo_].g4K%8\)VMڶb@bBh)1onepu TpbTnj/i&qUǠ{yu`50$Kg1QMqBuۦ%ni6CkL#<B=;MMqiё&n؉K`q wa,g ?O˹YQ_ }>KsBt63%x=bd0.#xKI#pb#Dz":2E /-T/猆W-Ѥ1I39TeLy^[{xI4hPU_Cel}Imghzd[rd7:s1u^`[Fò&M@:Yw$W4- r/9pNuȹ4tqɱaDyu?jBm,V CWqI[]:6^B'~/Ȼ]gnoyeP 91f,mByP|#_iI0:Vl#A>ETDK ((شQѥK41FB(~ jsCXpm ޑmH'll /:.sL|ҳ\I12[4֖,4QIN1.ˤaC:(ǔQ5.|wzS 1B¡qݲa;]:1X>=M:T$~,c2Sٜ\3+ ývLy 9(QXi%xY:JFE#4Ks9cꩶ]y <,)G""UQt@ocΟMѼyꪎliȉqSs[&cEXĠ{41CczWϩ k˜&2DWSeha 򡩌Tw'K5asf"];GUbMr6TZs?$u qO>/1>8 YS!KΧ8NNa:'輆< =="d[;ː}j~<̺P \?q y E(Etظ,"ydb『KWSϩ6lƏѶ_gM&Mg"PG$Ćp\ExBp3 y)W3fEt/&+Q7^݄bmfФ7B̑*I{/<ߣUЁ~ʰ̉3> 6YSN-{ݟg߶oO|֮_Z{1ЏmWco=Oɜ]]?"MV{"}}m| pֺKRD0AD=rc0>ȃO{c\o-OVu/\ ramkFkHϛ$6dSM7s6 w1#=dj(no}f8L~'Xw)=C8N3ڨz#ғ x',VbȀ LEM][1w67wɐD-!WKpi#. ͠$)พĀWT=)36ۈݱǯ>omkbN euVX`yz&e8mͭMNMt ͭO|8Mqhw>]kgX0gʨ9e=l&5fWy| #wι># H?ezenzy-x NKbp]b̮F/6Td) y9f:ѹ_c?9?/$fOЏO^m{X)UT}fPӴ,$Ic[+k&2* xh+6>}:[Ӹ_< *ïWrbR;yGØ:qzׄ,7^3)HO(FJ4G. -@2^S*[ ӢKAzb8¿sVJa iJd>G "Dq9NyIy/R~ JH%0*˝m5RхɄуŠb2dg.>mi\/t[mjAsANF AjuaCLY3Ұo$1x b0 Y^KˠrulqLG0Wdl(ixj i^ j^0t|V=)H< ybt*"ZkMўwc0t0D5xM)udNÄ, R@R1f3Wx$P|T\>Q4 bʠtmQN\=vugZ$=@?7N+3`۶6\"Qp֥|4^и!9?y`?u{>kW<z){?eo~c-}"- q.;XdxIV Fj_wL\y[4 IDATٜ A9ꁾ4{e ^<j4;.J~;l_Dcax#0YMvi&b&?z;G{<#PQխMSv_q.yGmbi 9E&л:gGX~'ꤑh IiUT@]Lf)\܉"Ƒ6֗ Ȣwf86mG㱖s%`K.%{#z 62q -psəzsc\wfO Qi${4BX=aeM"ض/sa RU9Nԏb[Zl'C?A7 C!3wf*[SRI-ӵif\ql0 NOdMjiT^8$9^c{nɂrAj\,կXbˆϩoh{>=Y<Ǵ{Ēϟmm݃(GjM\N<$FȬ~#%iqgl#M ʛI'+KkcO\}>"^HA!2H"WTМv l;As'F?Ґx,Hڎbmd}* ?R X!e))v b 4xz&/z/ mPSy0J!y:<\o.éf)*VNps-tW)EB>rշ{Կe?W{}?a<93r܈=x(x|>#/8bq9bITXitXIHL Vxr}-dw6@e̐8ѭ ,VLjl(Y+țHӱ4?1cy^EH׊KaS|_ط?^dA/5c3>w]PM#bW :lU7~> AjjE\A:ͅe)i lO4فV>= 捜w/KٺoΖKރ/2v&ls}S32 t~XQDAJv"PH0L X$w X^āka3_\I ǥe(EQx!4R3U:ibx]w^G^uD? TBCpQTVt``lH12;F2Ԗs+km!ˊ a˟L0hnatB|YXL3-Ft7t9,OV04 S k2Vؙ| _G~ڃ>g>y"^y{[o|}nKvyuyްl׶]g>l?N{z=3;^Ρ3ng7#_a'̗sųBzjf94@Oi| W(l׃ W]ƀM䱈>YbZ11 *L ߠX0p3|Oٟ! .F?4`|yb|;Wo ) V*h|VƀO#(a\8֢8K*@ʚ,kN>'i8.Qh! rB_=n'0IQHp/#su005 Db"lbD{;]pXX; $tshzc;txXi{ }9ܛ`J%mg]JqlJ'noABǸΡa :♇3}_ ;uj4!2U7dHqY'H=ɥa8_/)래li}aΪiƮid]lNR¡^tZf}=WGLIcFdd~Eivd ocF:N%e$ST;fcC|E >9"aXL 0Х RF^Heel̂|{~/u{_vÏMnna} =e?7^}a_c22·Zݹt{v߭fQ{'#'?cOEx:5ڭҾG_0S5SܨB|Ci!«8"iRH4%yrQ1_cr$qcXBkN ,ldDQb?/K OJ[SAX#{NrTgSRqhD2Q<2˧{|IC8 įEfQ!dw3bMvc W;  0z'L0:N GKx52g4i OH1h6"u1ÈcBdnfD Wﳈ^ƗmA s2"=spԚhR0Ɣ׫~!Lme- pxXr_Q8P8_<9'B빹iZ"J#[ 3h <d 0| ~S/f1|l/Nah(pڹ~.k x7f@#~?gъXr$fS<hpL ;m6GP"Ns鿍AãХmmo[ϤMC䦱jvg<eh3WM}1;I }S Nu`=Fj8`ǰ6{Vj{$ܮ>($ Ѵ˗Jnڤwe{X8C4m9V (;"A/%!4K33 : vZASt2Bw֖X ]%. l1Q}9x,]aE^hIRfhȊK8"#uNm/ٖ9D|#zhu 2MS)$.AsvC~C-_죟Kv4x;_;?sKvs5xz\Ю68T<;;[7vUkvڋ}Ѿ߶{mch=qkgOm- N[/ .(teiiЬalB#^T'e.\:0w&|BCr I KTf;&ǐe6Ã_.澑#tpP)9sJNdFgThP@Y@;-#OS/sBsB ơn˥0kA,:d07Gxj0϶y<&*c\bf{ fJ ɉהNۋ~4\k{ŭ\/dw<`6N0_[I/ _ nfÓ93cHS?&p{^Z!h0嶘hܚS:a_%$猎`bg7ã`bDƸe莡 NSPcY"tVKc|ْAR]Ҥ`@؀M+G< FN%ӵVk!uCA -\eD@m5lЎ=̫} {Тd4~wKlq=f -v,E3#TtO1u0} U<߯˼v)j㰻5a Q,*hYk [R5p͉2*\N>S e>@~.G ;;5D"k!7? ӈ}wPtkҊ "dX!v&Ckp9ҥ0X "Q>Wzt8ֆ9k9WYn9gEf,fyb3,'NB%EE)$2Nq@He4p643rLv) S$%ESŋq0Nve?v@;onoW޾n|nn^6;U=c9_znn߹훋y赙T&ܽ[on}o7?f/ۇ>wHpȿ+ſ h7, \+\EXKԝRR< RH3K&2TVy~Rx%vQ``:HDF9QѡfY0@HYjx}5"TR1 $ 6~'0dR׎S@O(bk oql`յ]R ̊uB{p0lJ('x,dLҐ0= ~}KXK=%҉qW]gD``iq1]^~k,IP|ω^eX="Q פp[{bfYQGID%W tIheOף\h#ױ9z,Jz6>5xfotLCK'b/5cWcGF7_#?v`h+ߵ?~^zv淬߼bm@ҘKo`l,G4abFܱKh}ko?ٳ?L̏].7~㎽z2oP5"7f ޔQLc`,|ܐ~&Ci`Kϔti$'.̮Vu \mJT&qNәPzv-e!dz B0{ybE-s4 {ga40sjj{23kEHXяY`@ΒQ4chRT[Qt 0Bnz2_R' VUxͭ&.FpL5ٞA$"' k3LnK &M9уFWlJ2F}-(&z<ʋ4=lĘlJqM e:B @+ib eM&Rzhq9ANE̓Q w;52+3yش5)^+jxa1Uw[QG AS_1;œ@ύ]~vd89h9x/I >'_t.9o0ǜh/w!f~{ǁO]oi{|%%-+Z<r&I>A#2t``1L?C¬xt03Џoۖj{L˰ 4J# C}gj(ཡ)4V6![A1+rydqeyg\dc,=vz#d #8wΊF{#L0tLpDk9?I]HKL`긡OAl=v}WM/Dʊ4X8Q\|z8m!Ҕ9'"%Yy ռ1U(/"&9Gkަ]$7infy]p5,i>اӴXi Fj/']mnWXE`xbs^3F?f7=M6<~r>̫@L@@Aj4=Wݳ?ڏ_zk/W7}h7o}wx1*Yxw.}OSQl[]oxj0&s?Wl-{\ZE׾l7ohfudieY]_2@i3]7qu.t`ͥ¢9/!Ro ,V,†AǦY>uh7'0XYt6Xu=iebPйO] wv4:k p@\@NO1aAă!3[S eGS7liԌbi&&@MX`.jAL,S1mWN4R\Dn!'\ɘgZ2/"<4 uI[`Gޥi'0!R-WQy95a ~i[81FɱoںWݒi.@0|! Zpg P@0xV:Tm[v,ڋ(T֖2E8(Rq9~} <\ b9 gOY:V*9r2#@q5Bd" C fY Nukrvz2/p>"f2I24"6b#stÓ OVcŏo7ԤqDf@x?ieu&}}y`Mdy(, -)n;m 8/?$ 'Ȁ; t' w{@[ݶ"ђ5ZI8U{I IDATXEXӫ7{ʏs[{Wgd{s{o}CLL!Y7 U X+n{ :Ji)o p #$,`RAkյ@ǐ.DicF''IS!4PZ՛M)󄫻qlR TRz~@?Բ4k. @KXGy|7,[d}x3o/Otձ e #oT惓ׁA^v}uDjp 4]I=y E!vҺ_o9.챟`<\|^HhT=Bu.OJL$w'J+0y H_Ց]oAx́I'qP9*'Rr@Hk0`@RAo@'($kj)EZ3-`E0? O)V_Ůӫ*+(ܐtNB( c'47,4Tڪl8Tq{%1{TU1D?$qD׏֋ʔnԞeJ ζUy qIILIg+ 'a7`4Oe̴dF֘F~Q-հj: M)u N7p "Ykbm@bY2#M,*9N(&15Fh=lPRm("? 25uҖفI*c1Ù &yCʳKB%^&j'yr-G`tM,#,p)>T22U3ФƸw9ʙ+ȖvCRPMhT(Ns a+"MzKWE=d2⌧^Ge`CqHPqF "?3{c}TI" 8HO |GSul~1L[I/Cl֢mT-O.ɑʛkl vjuںw6*Jz!)U sԃ:Qi}(bAA C6Mxg -7yS[ wŷpaoc)\KFG6ȣ`aoض‡خ,}~WɟxobЎb%Tbh  KF{75pRKL>bq's5?XNc]IXpXmj,ȫf]m?ZvR<.v1>.jjs[c&7;tKMgF [MX(#~vuFI5:}(֬»ދ%F7Acу,dzVHK&#n_vXF G>!u34ɓ<&KJLvB񃰜Tf+b{;NjŔ߻Z )d)u ZgN8P;}07Oд n-9"j @",|;Y,/ܞtNjeo@]sl٧ӣ 3"@ $25" JRLkv G dbj׃jk`v:p1rA89 "nch,e5;O!I*_jڂyz![T6uO&`cM@xhej`7MЕ$ܟ2 RLƭHDijk^ƕϞKa[Nx1 OQ]q nU8pI~f9xS=0M|] \5jMNC2 .17dNEU]2XM9)Rb{K|F@$YuOf#Wʾ c*!"hJ;_S{#M'5D @nj]Mh=!u BsvFۃ*ul&I77v@0 LkA÷<)k%M2ǀY"#YqEl^I3@`kl0 RP㥭UV> AcS(rY .nt]_HZ6o1__ρ@|C8N;ɷ,h'YJ=v=){3"g/OI]V%UŤ;nBաkDQ@@l9S6K4/h^-*teEPO]7_ $qMt9ɒ1ں唩2c6"ScDXA$MTy578Wz=`X˩` 1E5&nLu_pǾ*mzFk8s_X .^_7AT$i,ch Z>^հp2.%(%,=`~yCH۲)*QKS/uش إfʥycmj($Q| 􅲪|L, T&vz*k;0^ES!gb )Ƭm陰 dF5,{%b;B&[[P%x&FK]!?h k͹BJԊiQȨ2G^^ƣK8w<=\ZS_rRyt~gobcBS >5DSqȮfW&6lCY*W.iCa{XTWU_%`%ahLuB3\SvmiKh9] +1C>Rڦ-WJmd]ʩ3)Q'9LԲ}ne3݀?t0= רکIŤZI-k0M2R/jLֺzzK_/OCɦRiދ=^s3I0vuF٨eSK[0+R@rv0g%jh`Kٙ=J[ J-ME>ML՜|Z$ LiT=*WN"1ulɊW~bb1M#5 >6I ҮvTB׉.0S1Ş]Q/ JJ֊PMS35䳡i ˹B?,[Y{N z-F Ug3qvDO 7/mJa ͹98"9P$¦IfCubJ9nRKfy6ϰM@ Zx ؟Ǝ_;̀:W|AvF[L.;d'|Kdh9ңG tIBx)lxO#g𹏄;JhFD]WB6жHq9Ti `'s8%'IZptV( 2f&NEp ]"jGa#W泎bcX_cca.bD]S3[]LJ_to>]>OM JSn1aT0?:n j1yGd{ߐ*U힢S(XL,qE4jgLjMاAG}SZ6mLG rlsx!pl*Y,Ѭ/G'讕%R9z eBn6*ca2d'vQg,XD'(6(-@`[ $4x'b%j!$@p3{"A0"kJ '$e~..-{PE4L]oyةMbI*8S-UA@N0(WJ,`YZr*#JZ)6.š_( V ng3!Mq,<ˋ5^`͟rWp՘,ބe,[s7KJ0=t.oIqd!~(*W_k8$(IH{b8cc1c<A0~S1kc1n~zfiǿ_'`㍟-^oB(rq'MBL Osyv?;5LOuh|lD),UmFjhΟzW#nn fn*FQD0='rM` ԥ pgƕ=*2ڲ"DKuY5PH| ҂T`k*JZtjHU.BQu2E#KInU )gƬ,9I7_vc=T=M S1 lw~T&hRZ*?E0ğT*i/V.,®ٚZyRin=]pN+EA `G(U^2&\è6Ey$c&G̸`E,*.'>.Z]i<r(%cwm yYNUhBK> fﱙpFSg?I^`bT(LذC՟roQ`c2>k?MJ{ S}M7xpK)SBc_6C>{{DK[;lYqfj,J0r0SR>DGwF9ىVfP4NCn3}ݚC{zw"q ؑ<$(bӊ"5Hّ xԌ$m@y#Qgbr:Apښխ(uJ};fxz=ۤ\P p6k8u dXW\_0U!ApP &$c8QL??Q>FYh `t0?o1Uqo.VF,uf \&EK&4KRFQ1xܬHI}gp[ :,GkxXY7LV uh0᬴sc7n6՞'4$p2[X%-֧h5n)ډU%}kvM `@^gRk^)mC(ҞoVNƲ,WM&ϺM3FCm45T˵a #)?}>O~} ?]5ā/?O" U>ODhi6S'M4Vn$ V{S2DRDc]3H{OC2R -YNhLš1MNњf@@ Aupʓ?@"'^hXU+@saQM4 ֬.-<&2yb5; g; ck6)l uJFk`Kz53UasA+Lbbc!&n!e?2]ì`%M~Jb5`|81 99/ H amOt%]QjQlRҥ dЇDǷm&O㴀y Ϋ2 Y<|nMLr"5Zҥ\,iS&u{W!84#lkZ4CSP]Q&QH:gYîJBE+*#0)ևc ۉ6# xH&LLj~gQv< t|GCow VBR-<\b5S〹-0mfwa0Q'^ۓ:Cv4uU)'}w5S3M,s[vֻ釾?5H!Gbz{zWs`,BKuR"ӭՙ'VnHbdr2Д ݜ?̀R4IP?֢Y`k$TPuP04 ђ\W+I{yPJnh4O c^\sZ:-Rm@t.3>((QW.]n5c gX?V)dS-X$ HQ޶8-&"PQy0z_x*&`t(Fv8\q5M^hIR2mK{Ml4\;Iv`$K%;O$([ѫV\U+B@(θaQIc\ls!.3yHe?ur  =EI+9lr$_ys"rlg,V:#L_ij6&:X%?LMFPњAJ iԖ?[5_;q:!z¹6T`zNvF!yȜyzmn<-U)5s {cGkݨ<`<;PB1 F1=džßŭ<]k_y/?pH-mfm,+/_--!z IDATLcbUDv w<%3Xk -Wh ISDN(L<]$%=EwpM 6:!b l=.ԛ:G}"0mM]2+,1C(&44Hk|B ~sꖆFdfHMB+>SUs":K2 oh U3֪4u=eB0L5Q5j7Yi^XsBt Dy(sWe0h%cLy{RV~TRDb}v|V'nb MF!,=҂It஺i,E n#`ԱFJH,5#RNw)㓞-5_ƣT6H5EȚ = r@ٗi}?#EfIdl0T6r[ M_gj'~jṇ;*p ީׁݚwXjܶ5R=ZXWhQ]ZDg*PHAQ~F Afrj,'(X?wK`ma \R 5$<[m,FJ LIrb{\In7rRu&ƌl8C',JׅE|iabR|!*Y>D@eV01Jj jGfHAGP6b ݠ>w-2UX/g9z||OqDjC^ vI}$Ic'p/{"f0=s[B}op 371M)]0 WſW߶1k==w܏x;hд1rO@8yűyj*Ҩ4޳}  YPf(OϤ{YIS"ށ8U93CѺG j޲{Xl'4}Xw(rk oB9;}̬W Le;m:"jxSTv G9-G-}3j%\ Svޤ{Ea ~/S>TJF!jۓ;㍌K C PyybieSef!Ɍ 0cW1&_yMo&I 6}I+KB]IEsȦ}APah]UU:[G9([bɀ*l]~_Gl\:9fCerSіgyցHWre6W+ ;aҮ3%W;c|T%ix<UajA EZ+g`ó3bo5 `*_a&ҹ[:V{P-2]a!^B:4_ չ] D9FWB@G:OBYED쁚Aam;bѢ60ȹװ a O>7YZP]) kIf(`hTVM$CHƝ/@6К;K`և??:sx~:ޠ)z&V2cH̔ȽmpG1v?;0m/B}7f153 U؏~ѼI5aM^PUIW-;}){ßɟ}+O:z{YNeҒaַm4Ԅ @'j<G#>wԑ4NNg/KZ䚫;Ul^~׵7{$?Þ[05xS?ŝO|Kx',2ԧπM<8wxo~[v^a3s{]gb{$(V4.(]l԰P ^  15 9ޠ)FC +]RA&v@Fv_ќ,^^at>Ѽ+h2 ;N/]PD-4zjۂ쌨Tb,l;νba/oxKt?F@tK5ܣBVq%>qOAm3`àCCe)<%5R]|-xGWF:΃aٖ@i/u0ٍ'0p.yr&\yHҬ=*zвG}j]ƘD4SvӇMCnu߃=o;1;^Upc˗t8~\b {#,_?V?k2hY%=0Ki`"Rlvu`f1h`F٦S},M)Fx}7{%GoAq'} @ZB]:[Nokut ɩeov&(l{`kޝk)ʔj4l r IE#QZ6iVY\F'4L2$:24=|t)RvZjD]3&[Bc6}A4(cujY;Ta9~is1 D K7A^]QtF3)mHfL'>A_Yb`b.c$(Y"rlѦESq +"m61I$0c>" 6%4c<6fOST7؎>GzGM-ռeQS!Jv8ٛ(05w?ξ)N|/m+~{@xG`va m㶇>wX|Q'ʛyPg TinCuW7{ÏbuaoA(ZTU4W.Kgƅӯ;{ob~g̾):PEh7duvEi4ՒF(VWŁ^CZ4gtîX{Ʀw"SJ'`+Awg/us)}kcCl t飤Hy(#/'ik-h<%whZ1)L[QVGa`j<}[w`~v-bjz!0K|p >VyT&ߋy݊ŭCo%bh,_O 3fH'bcᄽ$ɥۘ*˸%gm6sx_Ư|+EB8h4:N} oGeQuds+_֖^xLn'Bye* (*SؚTC !=Xر_`Øz+ϿUUբ5{UG#Gz3s}]F\Sɜp<ևR ^Hlf]#_}pˑ{OK$`na ;b[k5SRz^ }̥\]:s~˭w,}8q?pcl'PrtҨYCzlu!Wp[o=15p}.oVl.#\^,=4.^ xo`}v?{?/b,V:q7ڡ;/9sUߘ`z~ށ{0"|rz]>'<l}|qG0eu~lL;3RN19l#vH4LE]|>w`oݰTeCR W躡ԤS;OA([%<{D:Yt:͡xC2JcU+>u͗8E-/ҎVZw1' 0U6'9*5"G^= laۯ ѷ\&s` JFSփ\ *V讒 S`7Eе,Vd:yPQۻ~.B`=ѩhn}ez1 #7૩;Jkl\A.eS-TVߋay)1k]i'UEЉM= %m5DELcwTe\cLvqtBܱ^v2c-UrMzM j1y/pPk5&rR**thh_Äx3uiW(R,%h`"}g/O8_լ >/yt$B+¼} =V!ktڈ'k%G6LW9huC)LEٍ֫l  x()qU#[2&v+b$| o:26O=B3h3 08$!pBV9TڼW͵ϯeA1YI zi ~/' z4{ȽزoG_N=6])F{S bj'pϧ~KغӍ|br'$3y1J ʤ܉gqs[wb`vA lM7݆m7uwIA-bߨm; <ᾏ~[wWtq Ҿ-(@?wW_x _]~.뱥yLT92=Ԩ0IWTjLڊq((]-kJGM,`l^թ B{ew%ӟxfwJOfJ?Eo]{n:P|G_{ Ϟn.eTfsd0Dˑ!~Nf*S}mA+}NCvzQj E-FZ]R-Y rILdps&Kk@O'gfH'P dx#h_[j@"7Hg0HpϾ(Aky5uP^E5qZ^=L|v.6J5eRw4]R3 @(d>nzR{v|zS;r,*1KB:늳AKO}d9{l*}igƗu2:8$ P& 5װb[P<$Mm훌S6TqlƋ\]gE<&Lfr`QLKzD@E k (uΑ}14QL7Us_HA#B!,LM @߸O/m>UL]O⭗^һϚ T$Gp Xcan}|_–]ڕx4V.t2E%%H86 k\< z),؍w4:-; j6ϰrX7eSnicF $Ҥc1'T&`Mj=FDݵHMbkGE{&Xlk瘟,f޵.WKSj(qqW<' Yޟ&ω]TF[w܊[–3\ ?6]P`z(e'# 䵣69B2aj7=54bzh= AUPim|}U,L44+ː 4,l*d,g}A *SՌT[NP R:]kAi]?#=fͫS԰ `z>UZ1쮰H+A/U>%4=m#eܩlbup!ʷXP 37D32a(ep72\/w ~֦0``SDŽ΍躉\bK/uZ\iA0Ri+e+R[Dljn"a/ gZ֪I|jlQM~ްM0Ƞe@CkA۾i_yg!qTeBPIg8`f4w¾0SUWpݭ tU1ban逭;װÿ__FÕVo(ZB dF@/?)8ge\hI -g0yaWpcƶݿkGn4^2 mdv7R-B %6+ӬJltQ~"ɼ™ &̗@ T% 8wCq,=gyR5,u mXtAZCOrꜴ%S?ʾHN}{FAS-3%"J?)&>&#*ZˎSuSm?M20Rz?ILͱN*)7{mKuƺ[:9)"T+`mQL#ܹH r3$}lͼo'f(-= /tJ/7.5<ƅ=xvP%W{u0$Yū8w1;:Zk4S~@/0*c{ͿF\8so<=_p)F^;QQ”><57~Ǹanqfc0kW+:eivBDg9˘_*p#Oanq+%Wh"24bE?.ضcU<νwVC'At`PZ5lZsCܦHܺ׊}^W#q'vV9\1~xq}灕%Y&Ee@F{|HU|3`s 2Z9bضH!Lwo "6`7kXSf\ku N<[dS|- mԡT%PfȽ6alMLև]~=1$>701CQ1)gqmĮ/>>~'uO8GH3;z/<5 H $2Q1RA6 %b~}l R<&I\ૉww4̿[RARM"nAi$zGg|fH 5>= :> " C+$+ҳIFKi Bi?z9ocO|]a:PaT}g[?pZzoTh\^A{hn4qݏR .9 pRD(` 0lvhc0@ҺCgqض{f?!_܊]=w^~RΞ&j3iBPMm,hב`ϡ#ה6| '_{Ǹ|8.xЛBoj3s0[v݊"n8{=qkgH={Ii 8WgGNW (6ϛ^N6Yk 3іJ9_UR rZ)f#ߛ>K!ZZXG>{fA+\-KQ|Q4`F \H46C* nd̅:Хff]J)^Tі)CH䡋L@-A`$`ZR'1JI5ʔZP*\8 Qϝh^zsIqß gO,-Ҵ@[>ȽAB( &a шt\QR%Qd&711gGè 8Ea5$MS  ̥ތFϛ4תy0 bf|)j U!T|ay-m K(mb^w~o5Optx"X?k{]عg/f6ߣcĕ˗ҳey2Su f촽S}AI>iŝ~5j0-)CQSa#Nӟy K.n4u7]YQ7!:s>yã`?5?D]Ll6,jLP}*/s-pBќb1I@lkDgZoҔrLcR_tj1ඉi`MUħkBLK%aze`/K4_1WAZ̴{2WfXm8z㈩ zM"qC]~<Fߝy5Ei 78e&Ym H5E!|i¬ AWaX9L1 ,j#%ke&"/Y`ִSI'ěY9&2ڐ͈6aDj9/3_'L^i>RadͭͿ)簸l{gN'v@N ~nv;>#} ;?\7%\^V`X_YKX:w = }!2[(c~,otXLk97NQcuK+•9Okbϑz}hu%` '[#j'V<ۮ> 7pK\9 NrxSo|'~wޟn(*Vp!*ZS[*y LmS3z/ꦖ /Z䔑[lfT=OL6uk"c}d* ##:j\guGe{畋(uYڎͭVigbH=F1sÚe{"Faf{ow٫^?i|-֮儉oIJMF?Ņ~xx+nTir`T}JFaJ՘1uE~쀑4T,K'bM8*z=$L(b'<ŕf9&w D􉏮hǮfl 㗡nQ &c 0 $@,r"4!%M;5զ)mʬ k(3B_+#3-xJॴUk|;IQM }/ @Rt e 3a:.+:Gw-x$* $!MS5kBRwAdވf0[0d @s & e1`)݄ o@CK|q$!Mȕ r9Ts-iPC1*,c&tZYN ޔE*NfcT0 r P{Q 08wV^5r+2=Aq[ QYZR*7s4h٨0 /֦Nj=5>'}0 ;AXv_o,.z)&Ji[!L/܊~ xCk/ǕKK8xo uL{X[anS} 2qm#7CqznȪw}Ys[v^c]+K(A5qyXUubKaw(0sv^ͣן&?+OSnzFKIIw8.a4Vıqĉk.ß*xi,n߳$ڂ![P/-%4E7, ,' O)Z DIkJ[dRm]L3)"[Gј3ʴsm )}hac7q 2#nSGɝ:Mv:đ~#ضc.#q: t-^ZKgL gVvPe?J>LܴuI_'H Fcd) Qzs(tHM6\Vz¦Mgl%v&[YAC7tRabgsӟ GCBnnf3#ʒ^*5\T { I +6U?7j \qM*GIv)犢d"zW||MrUh=23< cf!ڞMk/ 6(Ij EOq1ILŬQ P`3sxvLgA~Ğ9TF :x#\73g49, CVj{xcS p/]L*2MۍKDQ9 F?_iR)kD4KR28J $(؈GʼеqFk Y)(šN+XG-Ɛ9,P tbѩ}y 78u(.*2'Ni>׸Ryϝā;M7.;ן?pc+C6No)e.bYmQ1 ƱE/fniZۅ4٣ŦQɗG>sC y~,/ ֐4v[2X/MkfaS6 7I˼1>?>R0><&jme5zBO hG(RԚTu4as@r_;mѨRȡH"XoLܾ@ToL0~'213M_-(%oZᮣI<4Ój)PWIkNr-1ndT~Oi lևjO?ԙybBD2( S cr ӛ tQ"w(%>Ժ<gcGu.ӝNtK7=QI{h LU#X4V:LkZ&;Ĩ[T<;QQeEWo ~gKcz6_P Ӄ>ChӖ5j 7h!RI~s}LzmxviW.¥L_{N7sYIQLYͶIlN;=7}zwl&qlڎd'eYP"EQ;A$_93sf}|$>@*%9sfJ%[gс񄸄ɐf5+HDAc:]#DEm33Ts'9wj o*c#}MoƖŒkٸAX{P'{ o^ @Z#]QچEiYkGCcPW߂VV#_SHT RO/z{z}gc(TXulRIc!A%Q_555VT  add]'W1~41UiZyK7cv44LN9=!RL=Re#̙h7 `޲[bסlt:*̵BP@.7I<G)G.{KӿNek4mנ}Νm2u Ȥ+R&11>K=> zpY=#,4(й O旬wQY"!\g־djͨ:FNgb&!|k6v`?~aQ N R*˪0 XvfiA[[f͙9CJi 9 _@_.vDž =8w$G $:6 a'E˷mwUH#`rr##2W|}jלA oƢ0Q{Nx6B̰\@GSlu /]޾ a֜654"ɢP,`ld}} zp?=s+A{O-۾0oA;Ι9mhn&HB>7+ }gpb.\x: ;TK-`*Ng @P8p1c lF,ZԁE`kDJX(`d2/8{W*ʻh 2Q;5i ݟ <41 FEb:6 L橉y=DU}|T dڣ"DIcM MW$*;?Og`+xTc3X3Jl6b ]ziE࿟t]r?^WpU32J:(,}G0q@- dū2Uv I(MIL!B(=+io w$% ]w̫d[Yg5ʣk/4>$)dzj"9 kH$m-A|*>ɘI9`T3~aͦClai Dh&JT"[93wy}W1 D6(7cFMP߿bj*S`N)tJ"`YI1ȇ)d@*SSx K]0sj4]31B)kƦX+D%ߩL}vkB[8wW ?R 3D ՆTZKp{uL^TTc-X~ե I‹ˀ0Pkh]Ea%XdZ;VnFlɉ1?}woE?Mk-V$ äf X/8Llzm]pܸn/]lE8qﮗq\83Gl^2&| ) <^|>&F.r6JA%ZWczuX&/Yue> ;8݇{_Ъ2(=eb<0u* h_-砯+U493%e| tF4LZcxxozQOw*܄Uo†MQ|:87Gck;oN<FO󁄠FO< ܰm;~Tx~F^n66ArVܰ=od)#062JARJk0ņb˶۱ymoM/[mCx內qhҍD$5yW7ODrIo6 ~M߱dw9}0v z4F.@0&~oފѱ4K%7W~|nRhn]u[[nGS˜wv|]'g~v{^%6ᦌ*&'F$<@I 8:DŽu)3AxT#{c\ {9OL;"egGPIrC AM1Lk(=Vd:$ަ}uAfxQ`J,9MRD1Y.<:5$%u cchpAtj.9L\5)$FTc!fA %) cM#S6\AU)JDžrPұ:2Z;EVE(]^Qk$IUq&F+uEϽM:;Ni(B㟯BoQ| C~|tL* Yl-@"/Tg3ߔ@1C u (Ȥ Rm1JDZFPՔ2 !2uߵݧT (f9WJ)!AZи$˷HQAhS|*kdÝ8?)L~QjF&IyضR\Xwӝh$R)P?ݹK F,0C6nێ]TLѤ󩨬UxuaiԷq q5ز4LNj֢Bd |vT_}=Rk Ĵm4gO5:V܌݇ʩAgwյpFJ5pr=:}l^G'utۺ̏adz?D7Q](a<ўP\8ǎNFkqK; w!o^PSpm%Nm $Ү~񞻰mH3ӾlVVo๟^z=^bBLrt> i˝~ Zk4Z;{eN7ګW\͌pC[pļ%ӺO:WaQ*li~0s J<ł-Mb!HXmBq1kNW!swBSx[ O܉KFPϙ4qO6[X'`ޒMx틦'X_koĿ>֌PQuS⠚3^{I=D0`5MЍh5s&8 K a>}45 fDB]LY7ݦD$X:97&{|V65J֐'B']Q:!d'EĔ15B9v&;a0eGp3FPo)pQ QيI$ZEbxz1OCʒNNq7eP0+ DfH4HnJ/hMĴMPK{>n R6oʢ:jTD,q#9#(mN59ڣ'iZV!E܅ۼ@&@b>.Ȉ8+x{iѣ2S'd> )~Pa7h&Z `Xa%v/2n nhqr2֞*1~kٔa|oc#@ө}يFճQ!jB"#PHf]h+jlkng@J T*3))XR!'Rd1?:*rH4]=B0HV My,k˲)I:0kؠ6GWk K ev ZqG~/|3Kvcr Zj!TCa(n g>D`uq=c ͊FcQӔ0oa'a528s)h("+˨3J44Ԣ ߂Gwd:d׾6)T(|͎ʝRZ0T< rXppߛxb`X86oyaݼuiemxWMMT+dlRL}@/gMxZ=^~YL^Ťt&TUVLzqp+(򑑲Ҍ(29غA|oA]yXp)xgfİU>BuYfύ ؆E3)%+CUĤ _HDQ CަPco9'mI)) &&BX-7"a&O9:Wa-o7%=8iDOQc oNȒ%IrBKff#`~zm4O1.ɖwy2GQ?dtۆ_hКIXЛ2 9o{@ fJS(Uh?P`c*_,xlI3KൻogmgH5L.<3}Rh jL⢰q~oɦ#lc3WH J4q-OLIka Fx=7Sͼ X2|Dk ud )I qI&/.sܤylOX1hTI7&f:0jz00c4*]Ϳk5{$ʥ:8!kn??1׾SMTFeϿ/}(P*繂F*9DVDa~#(&L Rm2^A ٨aQKTd4b`x*4]XvST܊[-l>~#_Dȍt0q BFP +@fUKpßkTk@E.IdsP҈|UXj>_?qXcӒ2>su`ŧ~KWGk4e"*;RxL9]"C`' H! -w?3ig-ۑ091c{ "+YHj֬&?x8܏[)A9m: gWm:d$^A6i@n8U`d@ @C"#اf/ŖmwX(3Mb }TL?(~7xZͿ1^kzJ@:ݯZ<_@@?בckj~6?cbb_C;#= kV'ݫq-e;M۶c]>}WZs8$@'cmKV$DNcưiéw>Dڟ` nN| 5=n)!8#JF/0 KiŠ 5R'J5B2a}(&Ay,G9@xt*Xi׌@4)ZT14UrRfr;6^HB3葐!MCDMBEZU#T,N鄐(MRJDT3;xWl(,`[0=xJa6E-!)Ǐ4I8/71(s }ܴi0Pś-ĔXYݴD10f.%( 2ըmʚOO}}gBҁA +o}wѺdû@1ާё! aO|bQ"& L拘G_[(*U w IDAT]@>73PQ, =My8Cr}Xx78Y_8;퉯 _x?|n dPi8ΙeZw.+tc军Q]?5r#؆t lV6`q=<6 g-wcK]*81ӿXhflzߔR5oLATv4|7moZͿ * pZw܏[~?ZVL(!4ƖtNo3ҍ_Ĺs=\5-] Uuhq pgжp9{qd.9{%=wj|䓿>_um=6p3}ְ Q> ħ~?lj_˜(w3k<ܹ}; B`"ѤAn~ߴfaBB)> M-Xf,B9[ Vn5Ҥ$[RX qW&E@Ha',4!i_:f|IʑQaR /M)I-0;t %ѨEb 4x M5.DkP! ]!?6ԕ.iK/n}wtVӤ;EX,kJlW5 lmb |682p~İ*Tm䴊 4d"T!a4I\2p4~AbEb =[ml-&8ױBQx`Ȝ,{8P5Ђ=@zH6chZ)5_DԔnbUl@ 'yͽ09t|rG?_2I;`P6(), @?x$c,^7*V"c1m0Xyhf4 +O67i4*/0ľ丽F°bb!@) ( bԌ;>KH*H& ЩiK&"G\q U5-`!>Ȕ$Ё8ƏHM6g_9޸kKҦX,`bbNȁ8uF\F!/Kn3m6^k6fk5;T&}R0&o)yL0 Eaߓ 7o{/_3*kID}ZXf}YW,191=8zh/.PX;?7ށ -nhi*,>틖"HWr5_=:j6e LM <4ۆdh'[k\0Q֙ė7TdQ!@u,pTq \3teeU^&e9ƹ nьYBUz! H ٰ$7&<|3w^IM_٨G=3DN9o(AѼp H1蒢ZVK 6 Ssdњ:BC`+AI#֘b\h[HB[iWf2$F{Niݤ"V˨S(=J&Ȑ>`Ahj0]"4mcHEy(=%:$?X&≠"u7%JfR $2X 3#;]&GA ٷ Hc@E%#PU?'J)?EdRJ/gd*n~ ӯ`|x0jW*2zgM* ! ad!QP@Tt(0TqfSbV׳i1y#@= 44 mdK̨&D1AuZгXu{~]'aևu?U ƮcNZ%;44cx=HЈ,ۄօSQy EȻs'©ûp!\8{ Ã}ըilXaxfuLوg3W]coM]ᣠ!5v1)|B!>K=p+Zf36n}oSb=>/}a1oM2Uh)Sc݆ScB G/o`0X|p>1e3<׮ѽ7]ZQC8@C#ԡ-{qOyW /H3@u݈)LfR}cLI4wFtXp]c/^i t&ͷރG?\)<,_14 읻8G~B@/x5OBzp]C a -ېOJo=/}Ѯte ~X|ԵEXągw}lMy-[8~h{ ̄ \M%i\eym4A2mI%x lȦmIsIȔ(:}yt*&JMEtC *6I熊pʄA 쪸g$?]4ys pSؔf1߂X $늖#ֹlA2HQE-etZzfD]fx] ΚZZ!rIja 0 ?5f"Y00-\IҨsQvlb,V &"hܢp&XF8/UCc5֟;W0vˁ&=47W` ;ΗI>z@ R2iB45fFW._11~gp/JPU×.t=ch]閻\WTT` w[/{,8'TtƎos,.vELNEM' e^ W>tj~/%dPZc&,]MYR,u0?(.=?11}WqS6|;:S_ 4|J/8\cۑn>}גjhiHJ,^9gQVҨ.u[q}?WֺxkattN" ^}xks? 6o 5WgUUbXa+iRj\Bש#e .^;mʂSz5Kgg.|/<A1Ҏ(>+ʪ겾╗w׾|>4\w#:WBc)ԃS:Fq8Ƌ8y*~Oǔ Oq,R`re>׃|xaLa6tgfe 4{Z64} ̄U%$`bǘӤQèⱍ$|Lu[/<5z"AJqnn{Mg"L5кbiKf"[n"F1Ǵ"lh*i4 Nioi^xfnOkKWQ|YVb^y3 dS$ּĔaC%ҟmc}՘QJ+>uѝ&-b-gSX6L~f$ fh#tM!`'){A{!9%)q"`C5(XUOUi-RΠ Y!PʐaoAPUP!!2 2D,h#@fR Q6"\߭0Z"˘6子Aw[3&F.C IE~1t' 鴎(*T(J ɒ L%d*mwibke,1V迳GI?s5>i"$Tbm~ì>?'=?BqrILC lijI. %=0E'c6H!Rc$8C/9~/ƛnvWYE+6Cc̈X/| gD!?O" sA"֓'djXwek;_zoxT۸A,br^ ϝt<|?[l1oA8_c֚ AI18N8)۲mQ ūnDeevJv`%"qh]mgO7wKB&(ed2T=G?Nڇ0̞4t,_')! 4tmZtUOyF{)ߡ]]]:naܵ ;1ڏ1->Z}>`R7w|G_oԱб`9<ű]}lힲgk7΂ 5hVi4dLc_$$X#0G@gЊ%2;GlmΜ{@jåDM;S XҮ0T- u=o0t$xpJP_Q-m  m-K.@k?wwK*@$+I\X͘4T_%OFP !N!Ttm,Ƿs<Eni1ͬ)@d Rim aUТV2X̛A8jWƇBxcf ն̉ZXmXGip/R,PmvL='PC5An.(jiҘfq _2*aN)?]F_#DOE)cjE~;"&E}O/- L{6ymd0s@@ ҁF:Ȧ%)i㴴"8 He t5r#Q\9ɣ >j\jg[4ݚ\gB"N2E:H,Y5 aBZ (t3mN#wk)+j8i+ᔫ^ JMa?A <4 >,b׏m#?_AEm+fh\^#J3mlO[l\1dSa0`=YutΞ>+SLq+ھ>2gtxO|տ~i]9D!rO#,F' Dg3Re4]p譽;5@ܥ mX-sO1 O~R FE6}pK *9l%ױ  EI &pABri]G`u0&]+7܂ꚩޣ88$7Iyn SF&'/_{\;f ̳e2ĸ9~m݊%+Ceem<#cL{3?=< &F#7֋M F!Uc_8qp7XF _w.GBcV),SLӬV,YM-׎{ :'NrumȞ5:x~24̲+Ѷh%f2}ϝ_?Q$ZkۅǿU oclT[X #ʛy^k;x DGϙx\!|20/Eek *0) D7n}$A8˩va:,;]Bk̤u~?ۯQ@QP "34Sګ{y X{l־;Z }S[KI`lr p~ht⯴J?B~j49yE~x]CgX]k+V;X]3M3E4U 5 R8M; `hi]h5<3)-(8Awf&j< /I"~) %q'/ukq+lỈ/E๺BDsSos-vƏEE6+~w"Ϳ9p"g.]!NX턊U JwDneH$iBlB1}dRT(,f18Ҧ"*Hs"Dk4mbI uKw|o_!SU%Tֶ&x?vy'ӎ@3ʋ$=;>|I4;PT!nB}HS>];UEJJ,\S5=8w{_Dnbժ6^:o+7OX@~b4Ѿ2>ҋ>o-o/^| Zۗz=k7߆)ߡ+xoCE1vX\CR9|W_%WC{?¡;=is 8w$bY߷`PT.]PlOuH=cIN*']Ңȹ/I\98N, w=v-dBAM&%Pޔ:?7+̘l(AJ$S'PNV{l/in?JBI\=A"M等۾XBd lU]t CeG1SgJ#Ixm/i0%%Jt !M9-.84)58dRM):D Jnt"7MG) o#rC@jֿ(O,a&MCP+TP| $5 {"2Taa͕ T9@*he':ۢ< sυTtyM\H67dj}ϧsK @F":.v@"N"B&LP2H'@ithaЪ49]tHGԱʋtsMm,3PX?cﳏad;0PQY|nz2fAw3R&3T" Zh'dDwnH{ɱHBQѻr3xs9~j6J3M:|eȊ܍{vbc!Y+1k|p~b2MHHcRc Ec˜H@n9T/D2b|=F*⿯<.veiX(d/iZ{P6 IDAT€R/yg"6-ٍdy姐":=x}=ݘ6PUU Wۍ{+SvXsc‸KkŁr>#W.[clϱ$Q3TK=x}3SS+يj"Sp,ŕGcS =+)SCҲ& 9mhljf tز)>W"",\59҇(afJ2\' TFKK$\K ϘRpFxhDfz?/&DZpyͨq9!eTSxD ))kvKb$Ɋ%U Mԟ϶~ $(j 7fo&!lI 9'ƕ dxio%I?%+u!Rpne{|)ud%L'L/l#1ik+6!COS:4@!pfN>Mu&SPcA(A7M;dhckX$Ay/ =#Hq W\SR{%7PhNb=oE<->[Ղ92R'Z[2WxPۻvJS4) c_ ؈ 53#@ d@Rtׂ8Dd u-n }U\x7?*1>i@"hS%HdT0* qTIegl8'(p[[A_N"N9R0G1>]WN[xbAJtn VlF*S-|;wg|O>4 =ULwشˡf+Du&[WcU` fC}lTTUCa(k430LveԁW;+hDL|!R*lr;4%8!v*yZYX3l)ZۗyV۔˹G99lGZ~RPĵHSN/ʢa.._:=Ʃf_r {_+j4nǕS6EĜ{+ۂʊ)ã8U|q4s[[Z 8a׷bj,܈3_kU՘3zAf{WΝ9%f崽5GRk|&'&paI`|9 1{%lDMlLNv_>;:Wc#8{T'U5 ROU@שeW5Ui2%22?BC8~hb 09ΔSt$5ͥwXI2nڪhZCf3 FzPZqa xϖBְڙWS\mc]MM "1y43׶@̰_\`vUG -Ӏ@Įh>1dk,iQIʖA*mSkCH׿yeN)ZP3 c')3qb(k[&7"jmfhЩysDDݖћRsP)IщTJiQfeV;54ہmlt͡ - DLs56:mkX5s62Mhg*(2&R8VÏZ^ClBêSՀj& !2J) Ja4Iȅ}B_Dt2!~L@G0>tb8hj[ӱzDn={pFJ>]pE0 l^EdhI0D<Oe+fXйfT5 .`B^Ќ>T:?&#ygbd9(p좂Ă4QY7˚Cgci0Z855H3S .~/H18UH*+m D)]Q#KZrJVs㟹rT^9BsZ痵}=ʇ 7>KN .[lbee5[M@.+mᆚ;XV3".^Fj 8لR 2Ce3 *QU[ :D5ZcKjkLdXҹYrYܫ*˫ajj*QUۀ28!Fu@!?5"0ilS  $tkC;gH/$BPHtL3N"1HHצlsa[ mM8|eFf*еg^/6RImox i7[YBR$Hh.Tg9&9N]%PPP"d2\#}.(Kt! 0蟤SZD)&ohjJ ],(ȠW %,lB7YPgo㯽xDZYp n+%A+1E7e')?{td*\pGb:FIf "EӄM/L"?9ʺ5TjȠ l C B ȍ^B>7sAJ}-9,b.' ?T6xIg+`ѡ>gg11 $2DJFk6X.5;[`@"7v+R<>ҔVV;k&Yӄ hN/s%9ounƺ1ܳ=qh˘щnwL;2SQE;q|&\<Qz:FPK14?m2 T3Vq\<gNĢ5׼9=z&س4JcQ[xͿ{Sy<U5evY=fbJxҙ kKN19w ÌhG)ix٤k`&ϱD5> gO3PQU5ΚT:5WUbrCL d f␛MJaS ݞ/bYVdY%@" _9F]jnEl>@Nͼb4ݓZ,a ZfA`?0Il8W0&B&' hz6BЎ(@N*Zp?'+ˬ"Tx6)~"FO^)Ù:h842pĆ.S4&V/6|ɞ]H8XfAh #HC;-х {`Y#r:Oc1ză)@ a|IКo5Ȉ䆊Rr@DD5ek*p͌4U{"q(FqG$.lD)mYb%l+q/"(Ett8rc3*k=)_N)AygH[3{[i>b4`]kPL2HIdR)fJ HHBBHeʪHef&P*e /S"6wV m#ht9'OBH+(50-,at0ƇL#ݍCwbmѱj˴uh='^p.@ILLL<7&u>2,>߰d&64Gn?5kb h@/.ٽN-+|Gt0ise !Pײد#5E{^}x9a Kk(]Vȿ3ge!_ }&Q1i w}߲eP[_?eWpdk(kHkTԣ 462>RPB0ؒߏ,)Xwk͇5E:g3Ȕ\/틫0Dɏk-3@$R̽0k]pOizKCujje2͵64a*gP p#f^j2n.3|F) Ҿ*%D]b]lHRlD7mօh_W#MڽNGGZ~>:ifVr@&b@)c@}|"zYWҹb-1ڕoFe#q9?'L*}?֌  8!&^])S7&5OAi$AMǯlc˿Z)nM&a'NIf=p?3Ϣ:fרT-_hl5*f!Ɔ.6[a{ÙEFwҥJ蛩M$(ZAJjV8Cc2T…Ob綣scYeq*EuM2MYӟwK ;GCk#\Ow1UW1צa/h b2Yw#E=0w)~Mwbo. 9jRw*wBTCĜU: Nmk^ϒavk;>E6ނ)}=8v Pkkon==8LL~I1#9bq)"Vk5Є7G5(@:u;TD ֖wS3\mle谖]WI 6t?Ҟ"~[O}|ke )/U0, fHG glRn<n uH?gQx<-%}Mh4@oe^c< $ 3RTkOxEh}5`ZU NϱPB 5}XoJ36}\ȧ׼sMࠆR![XGO!(:K 캸C(I+!upschDi)Z 1Sф $若 G7V:Ԙx]鿢4dԜJK+f:]-b+3>Lk磢)A%4thm 5@Z Ɔmb B琀Q?ULM F z%PHw( B`"/N7v,)l Q (rʥdǸTG:44g-B&30TCk%(Ӧ7E&O#EI?)5$5DNҍe+*2Tbr߾Om13 %8Zs\7 2?ADzdk'G1wC11>B3YT֣iVEͷq` T[9(?slu}s/~shthdHQ#RK4G3*pyS1VM5m2I!h4:^'/ uU-}^[_H 8ăc?ox./BAq 2>C}xuD2)4'ʼn̸co, utbݺu:`=h]?91'Jҡ kЫQ\icgi0d $7l6L+ڧ߅Rt^.lwFQ |w'VW+,hͺ("u*d~H)PzIjbV[UZdlʴ (jvފ&Y|kS⤮BlfU\PN2ҟ1@zK@{XF҆X=d0Eꋅ\:^SM$?W^(!ñRٵt1/ H1]t>\ {!<짱q۞e1=ZWps#t 6 6ԊcxO|;?hM.9R{Q#1Z5I7/5TIVA 4WPS&Mx*,o೿KmE혟cѽ\\n7*r{0Zzz+,W0ٕ_|,rE4kR)f;*iqޚe}\A\2jUe$_rBr%f᫢觔dUs|UUC42ar;CG@zoFKRak޲ $&qlz2lj7[c q9𣸖!h7yYJ0`:R,IPh1WCBQ'bCǬuVCd!@0,|K 6|boR41Q&yk%fXfUs^`)?"T IDATL[z&٦_( {J8V#-|ypRQ0HIӝړf(%S~H#& q"uAxƹ H6I ΰЮ$"_ҘD{)_eΙ|kLҬ `8'n^xaJ#"6sP3% c.6Ei``DQ:P{עб4yS u2;1;>޵[V]OxhrRQN ̟S3 fL!%>~$y) &ǔtWtqGyZv-7gQ- Vpd2 g>*`.#DڿA0)dM}̫*9fPhZĊ9"UTk&z8RxIV/0~$굢Ms[k> zHjBy2JsGQz~j?Ľkzt^<3uϪJ+"n^={wdԤp3_N܄`5Jad f iq%L`ibp.ܾ<4 KFڅSUT^jܒ@x,?WLU&Fq{bJlx(u1Σ崒&%UM BJ-ذeDz߾X,8?= s}0?/`ltz>2[03٤g;;}",U5f쥦rP@0@,`R! Wp 8"Ōc0&?7شAJFR$7 VLDj feAZCieĆY<fUCqԀt44v{{N1 9\äif' cIuH'eܗM7RI (st=` QuGRZ Tܞ7\uCUd%mNЅ %M (* AMQb!csJCsȏ ʦ0Ai>X,1cD>~q!F8" ~fѧMǎ?(87jy-]j,lځ͘def&?_'T*lS &ٸd4|. }w4B+k4Wl,B*N./Z(0;aŦNO T\G^l̤XD#ʻCj{b5T+T6ˊtȥ{ӝWCdz wh ?+8djCcoV)UHX;)saKh"A/,֠b<ˁ!H'$Y$PC֙\[ xM!S䙖Fj.X`lt!9v lrD1i!2L}F`9P 7 C^ Ec*K]3\nU51S猛>K 0?5~ؽ0ZpoƣO=WtDQTWz:p HL;[1WZd?[6ZI*l[3I }Z X~-v}( $eLεVe >73alyXQճѨ%rĄezUӗyfrQK2, 1bn|/"= wg?,FU893R&LJQ|~ryw‰כn\EYq =Иw)*rDu9בQRY +\MMV< '}<ߒ¨[Ɋedy[X'6H h7`JMJO>xzPR=+J|RxQ@FO}~Ik\g3-dT;tzi 1XlP55MYujxa{"~>QYI"HS/NЈ:WT4C[j`9sڍrZgY uRf"|L$4~ D?3e%AQ WJI dD?˙t@i.k@ ӄ:m3j I!BsF)īDYDfibVF0yEeMeb#5dd_4*x #WWЎ-{_cX98t;&&R(qa\BuВsЖ֒C{>B--hoɣ5Cɞڨ4_<%*&\0g\!4ګhh4'(q]:σUdZUܙD q\ۺ}&jG+P'Aas,* 8nkއO}O-o> :ɚNK3) CȹE55CkC>FCz0KJ7uyw!Zɡ Ɣv?N%RPe*,#;jL"֪tɷc?[KNғi fgQeL纱rhmBk{ht5Βȵ6ߺFVCWDk0_vX ,'%/jcV)ſN/-`ߣ?|d >ݺEr[3>%-e'lq+`:dqQL^D@m9=bҪMSbMN5"K`*PsTl+lp Ϙl88&MSx#%@PZLY,_fKq dd8kCs,7Y ju/3)3MىX [XU2Y{j``ά(XcB8^Dg Gg~X <0)/j60\PO!,*BU,29{S4i"aΓYtEblK&g#~!mŴ>4Mn>w-93A^ \/HEÌHzcEḫs߸at3 `FMv/~]=xgN말ң4IqLe@y2Yh|CCA}E<}֡ BsEV$n^9¿L^ f7߼}7nf;"ϐ%2Ҵ$˜LWl $5K@=6w ǟ޲\*}I[ϟzO?ilشuZ30/qi6̈́j NrU5E[)\'l$ӆ}Ejj:6SL0SFb*=ԙsaG9J3mۥN̤*PBDz*UbGbo-H6ٮ2Ϭ3\nc[g+ W& ^UR-F mv)H `Ry{{Cg g}ycUp`nU(J1M$LdR\N|D4tJK ZV(`#]y3bC;CDLtIx5ÐD'Tf4tFlAKN8@HtMQnyj"_>? 6P4בa]ܤ\T0{L *Q(fnoU݃[f6^ZPH9/zs+ꩽX~ lލqn*hԫafqzFzJىaܻrμҍ*HbTn4&xu| nS1< F@6H}rn',6mT>b \\+v=Y>J"a ^{.R0 5;F}۰'q?{s s>D2\|k"j*hлs/FXG'EpnsSCwO߲3z"JsciF]>&QUϷ4;pao+͗O #OA>_@Z+ՁC\ȔXT,SQG9e=E{yXse>o狍&)ehBJ48Ϭ5Fz鑡~3kkMMOMm32bI\8mh6s'Sw}S0UBdy$+3' xr[,ӿxP tTYcAK䤋;z#Ék eL 3J@8O¬J%9-ތlb֑dQM} A S"aDv(|xw gK7~N|F!N儙yρRCohE+RTv^5J/fFe.]=jش{n=D816u?rq<'_8g4^{3ylv?yܼr|_BynXBLMttu;EܻBuBS%2̀X|"Zt5u`&t݇M;n>M"ݷs?R'n83jiZ:ѻ݃3=}}ش_ō+07vAdJz- O\G{WYhއ>_8ʟcv 8hDZڻֽsP04roށg>3({6SJjReNE3df׊)Řkgđ׿ח[q+>8yIk[kNcؼcϢ֎G?,:pwkk'G&C[ُ [ǶaObjlowqE& sLeY]4Zwř?hk7S6o߃_y'yS7 ml[wǞ`q E4QL ІxǞvރu}_1Y$poع{76n޶{vugGOo/}omܺz:1d\e~w0xI ݺowIPq܋nbG֍xv"xr IXh~7b Fʹ!Yg}|x1{2^28M &ig}BN `" #3>\KQ_II\j4&'e a0]\F&/5$46}ߴn(8:L{LMB&bH`bAN9V.B؂q9u6hLl:ȹ$` q̖!8sj#sT3)Ba6ɞ΢ 3hdJ*+MCwNf;&fA|b}c  RD'<N%=G25>Y|u b:ÁgcпF? &͓7tr`8V nŽ^xn/BK[ۺ0i6l݅m µ#Bq5#jL7ic%(dǰyAV0ᖯcanNfUR$m̈ZGcӇ?[;f.p^-0jM?Cւ8p mh[_.:ۗN¯-QM IDATDZԴA^cKw:<yA `RhGP07o4pYtv/ awǍK'1~*J׫pm=Y{Fg&w`QőUib d67bߔĎW?zؼcEb޵cfF+\xk7nYT "w#Oaæ-x'155;/bju8|>A[[==X~f0<<"@ h65i2b:þ_57K'm"g\bzn&.=by76s"FnޝAiap=] Xv#:;;ц5XA\8qz;jgVt3rK$B&{?3ENѨq\wm-;%azhlʋ8x ]"@>46oنG8&'&peCq~FC}\b͘zΝ5Lc4{_ xJPtJ?FtIi_$T/j4sl؁AAXZ=ZưbBSU+߷L4Ѷ6Q+f囵Ă~c*=~gA&_QmH:eHO3=`ӯ2CrKlD`czò2#MP @m1}&a&04& <'Po1 *IgIf9[$>cbgd)fRI3-L^oOGM H5N*cq!۵{]Z6a M4&1 83::r# I0XA~nk9>"MĨW0v3hXA޳vǍ19&G{g7nޅԋAwZt `mشux 79j)eLNf3_DOߚUY߾hFMܲ Ba[L f_sA֎䞎޽S)$ehuzS-˘z6w`8ШUF;P{c`O/)ha-8p0PCr9@RZEҕ͊f*R}Tk[d>c&V87^km틯5k7Cqݯ*ܻ~?;`Ǟ}K~~6۸Z<|(+ 9p]--ut-6Uuta89S#Vᢸ(^Uf-ߋ[E7_¯oQ ݹ;jmebV+ۗp-ص vPéC Vttv|7mơǟw#ܴ:=pAKLUsWÏ>zroAֶU޹u ?xt-ALz{nÖm;||[;P)090C`g<щ>Ze[{vލs7bjzc:P*e(g{OM2V)lD頯Ąb023eb- jcA7 ifXE.\3bWFL`nڒU@ƺW^kK^۞A|N9n헿co?{m^ۼ @6UQ{Րi3/:VʤDZ7Wn\lܺ'%J1Zy#nm$FsFfmܯ!ҋ ә tt ;_`nvyVl$NU:h=Y2;nբg LHO3̂sgre0>>62pV1bu Hm4N ÈnJdxH{"倢:W{8$z4>ȊQluҽK~%K!?$_a<! B&ϛL3Vb2>1^C2‰sE ss|U}d̒cwg~`j!t5OֶQzE/պB@uiiaղ4 c$4 YtQIr"ϔ}(3LАyr˹\xs/I3fv8M s]<9"fCJSĽ2r 2}`U Gq%N&`CKkrCmQҐ8cv(|ok/`j A&|g =Qf˞8%7zm>}) _?̐Nk|L#(fj @^=S,7񧘺V;QCNxe^+Ǿs[;g Ͱxۿ'V)G@_q#FJՌ4LTkr8K)%$~/EV[u=4z8*^}8151ߟ5?/ך-ٮ\ 0lfhg'1Z6֜),WUϨV8mKb@*rj%,_&$jMq%q>E陔)GD@Q23u /*Lۥl)C&TR[ C,/n,tVVhFLȒ&GzE93 7ROQmUIK!p:T+U 9S}Im# ={ \'4y!_YP$U8<Ŀ8HbXHm %X+G?k>l6lOan,dш)IYb8Lzo~FG9ٰmUZo:>4sCLkkRRVG@fz9<_F-3W3l|thh׬x3 ?{T0~N=_cf|^G)0k q+(3Ec xqFC.f' C/ aلJUQ +HAD kbxz@i~ڟb]\ef< ~P.mTXXǣO}6,jja^뢭n,U5dg,KMi`t.l۵"Wq‰lSvV^2(J_b 3=uddi6Ѱ8bK;Cșĝw7/uNfB{!_oP.Σ0G֮[cP{{-(O jԹ]4IYs+ۛpW%_#{ߍj )9o\lٱ _"i3g2TofL-uiܞnQH4AX¤xgF3=Rn Hf$+M;c[EC ŷ51'#ԊX5j5'^#BF cbeϺ bF@:7D.!ICRC+2cɆDp"IFc (5F (ŅN @bC |QyaVDcS`fRSA Jm/"#ʎl^u; Sd직C=wsȦI h 0@  i:B|%HEUpx㿰juaǾ0qY\ZNtD˜Ţ sBrG7PU l /"7?yfpzYliQ@yYhsnhm_Z^Ľ̩oR B0jjWiɑZZՇGpkLctqkVfDta30q$rqȈ0LAeRYÖt~o~=I@ߚ7U wIR,UJBd83Yh4jzr8WG^aRM)2e zz÷2'qYԯcuz-Fř>ө8Gc0V$s*dtN2>-3|qM-[=1ݜH$ `+d* /F_;#,$X"բLAGx%3@%<2TvДbx\C$[-S;"f D\@0Ogmj#kҞ@Gڡ d$'sM8OQ mJI+ЎՖAܩEB}ԡ;l4Be3i(IGnPF̃0sSW a']D:Rtk8BYD i !KMK=43n%).E Ct gx1A'.a_+lJj*c2hI0 uQ78ikP]b]D~PCڭU-rf'g17rA#`F7υ0xS5S6{QG[Z|DN+y Hi ME4zzfj̨175aܾ|GGxOB #(%ZX#SS }- =A4j.VP=IH ?);,mFQCq `f4ug0391ܻKN7B^A)d{|?,Hh48(9JqF囧ms>uv7 ^avfB1, v|chmmȵt\Z9|\G*i\;wϞCZPU x13fg09>;>>xqF52Nש+^_ _#1 pyp5df45LOMؑwޫk)Rن4ͶBXǩ^Å3x-򭨔@迬o\\Fq-9q Ƈok.zn{>}|IfFD< H$VfƬ0JTE~qݕ_Fs3S0*_7AC4"^J3{$ 9.]z˅PU=CR=o{.#Pi#{wA/Lwp q:YF?AwF|_뺋w\[ &+A-0ޏ-`.'nn_Z2H4L6Q&-jc>c(D9x߃#zѵN0'BVk:ѻ*#ubY=MK5%M~d^ /2C*Fg`0ٱeU "=0 Ԁ4ZȒU#12]l1KaC3@&6}1/5& ΊoL[L-)&Aќg23a~7%6 P kGf#E2%6a@Vc_õŚMشl܉\0Y̨U+vBDÌi?Ϳ}Ocϡ}#D>F&ڄ|߇h4|,˸s,n]9OcavB%NIDFgOw#5TIdR#RqCoZYH#u IDAT=AQ4`1s#սWq1L.PhӔ4R)a ͉}m4qȋx-r|XI_+*&& pȁϾ qQnCOc \ύ JǸ_ѽn]9N߯i M2޳UTX ={5yU۰=}U38?đodHD:5I tҙwq n؊ |YlݹB!2 ')9ѵr #Cq\:{WΝ] =J,ݽ'GWOd}_hJy5`A4>k8k[{b}ظe{y.ׁ븩O`Ok z N}y!sPN2Ijɘjz0!569x \:ăC=]{'|<NRo18hm\x~'arv2'9!u9ujmm}L `T+e\rCwneZ{ } ݈Bkja ߾0+Oj4Aoр|>) rwq 3=68a5b߹ XFBNMi[~/.*xKP fe*o\on=X$҉~y‰t\`rRAҌsFd:e$u"6H RM4NjzS @⤫D瞢fi?4'ciM#UBnDt;$V0&2e)@4 ?@VoX7u qkJ<_P =88s*c@ ՖC>)y1@cXG#9hsYh  ۞ulm?h5758¿ ;#1c(XTrwtV/3A-ԙWq3/=bUꁕO2 IAR9hDkgrEV~jqQM Z$ "$Gh?jܓ 'G97S)]Yh 9Dryu!/kD"xA> 3؈:kmCt Brf j,f'1;9!͌dP%, c]l hmX)?hQZ.QkXSJ$J.ߊB[r^R)f$^ {Vl5qRhG灙QP-QC1)Q"nה&45r^0~kxϺyPoQ-P&G01r6ߕE8߂[Úгf]Z.a~v3caԪQiLхq(뢭B`^R.TZp'ڇ>d؈(,:Jfv8?=hFk[{ȎpZ=(096{06tIpZý&hiYT_Pvh)p#oڊ5/C>u*f09>Zl5+i#kt;F@n>_@--!٨P)-V-5TN$| ڻ^C4Zf3U ӯIOKhlұ!{MH\ͫ-,?3Yd|qS:D 䤚ujzo!'졈ɢU*a&>s~$ д~d>gתfCl9cUEb~WY窵T1|N5?=K ȵtFVF4#M 9Ji.hF}4 "oZ݇CDߚxK-< ]7{^6j7#lvZ2ӃTu+b~MWz&lf-PfIp#7Ġ3 nKګ!i5uRBH57¤S6{QfEPip3M\;4tʹpSJ]Q ^ұQ$aMAU30w*)>i5 TO:A &(3#k̎3$dJ{Ie0"2܀w00pQ* Me!Y5ZdcI#'Ίnw՚uCQN 2hcc}B5B9Ei-qXb@BjHI?')`IUe0lZ7I}EȖRt@?dتAN_T1ZY8泚KfA*儶4Sdе{:4ufI6rgT Lﳊ!!)?`8&{t}Lm9R~5}B>"_Hf؎k{jdĞ}gfqap-Q![0%.dS$f'j s`Nu}dI`+=Ig$9=h5ϑf,u咄 (EWhRҍ4Ȳ67m 䤇#̤Ĵ"$Pq}&蘤:dwR 7i ecĆp-8 !5I<XJf7l2vaLT^hf,YMMLXiKf%\$YqN!v4TJŁ'>! ]p[:1>2kG#r(lbsÀ9A!s43Z >JSyMйW03|덐1Q.ZZ@RD\DRBV Zy ηPop<p0j?wtiv={ΖFH BV,@H0q&eɅ\ƕJrTRE*$SIaP6"HF@0F3s^o.oΜW~@w_GWTDL+=0="cf;B4ox& ]L&c<2=n^O^)ԱDfck^`ob$~HxPm׊\k[$<2 lbfz8SWL%qSLfqsRoT\^j/Ӄ)ѼIze!fxPh#gBwDNazGnG7V5 kH5V㣱OTBv0Fx@8{P`U3-]}Ьptkҕ4-(X)D.5N@f}jfLf (\ ,Y GAIkÞӴ1 .wù<"Яiuy U&CiS2Lԧ$NXS0 gxgF2C)u:4Ssy:ѣѝUhOэc2bxr'?k9.JFjїR-9r᧴H +A y.4*}sy$hXj3,"tϣZt4-)m_WJ V0-w$gJIq`z-4ߙd91&~˸\l߫\zǘRGF"g.MlI/YiL}wWKZ oq-\y׾O[OH%/1ϘhvU RӍo|ׯ}G{0^H{G|k[~axe~y@Džᾇ_YjEݱwx?_ÝO̽C:i4.p)nAfc~k3䒝Wg I.Z0"iDMԔ..uquq:GgD}Rj])B1茧]…*{Dh[(y1~*=3D,ޗb3sQf"RLż=ӝ(,$;033&3Tȷ&-bkF-06轛^w쳩c{Yݙ8S,KCx!xCs%K˛~]]Af΃+\=Ň#SmMJ\u]>jzdZ7 A E\ԫim٭]ev&L#iEk2MPc&iĀ(dc00RXToW&Ǵ}(w+hJ~ptowNqbuR&u>/m9/Q ͋pFntS| [8d쭽f _ {K N[;_īyϾp׼?mZ`?ó}uy| > ;_b)D5~Wp W@އR^8 ~.o0ªnFДbC ,kBKj( .F.<&*)/xV%H]ub6N YLr@uU>W3zEMb`Zv, &Y֭3)3hD9 E$$p)DmI;N^B ~:\6Qzn:ku.lh@Ag/cEEAWfZAH3!!,/`%er קLX0vIJ j31/M-=0(B qzjKs>V63ׂ s }jވlSnZ2i-m}b4 %fK^Rjpkijd5&w%c]Mu |ywI^$Y"27nj&qwLȵjաgSkJu_o,ާR - DhַϔXM)kg @;V &Zv .BmevJsfb1EߔlXǿ iQ)>[wOlZB2!ɚ#M,FX+]g+r8T0wMR 9VtSLl@+9.:LF;Q0,3ˤg g&7ן}5{gp"z9:V8rm3t { E5yɩtX,~ft'?a]}=.^}gW> %(6lu࿉p=X~ݜ˟>7eA:n~riH{S Ajid&\c9M xт76mB }-96)~c52ɥhSKз\&z:)UdiR ۑ6:.oDHء^^')xci377ӂM*cӻ0b㬚m(-T "jx7ή~A*=j.Rg\K)#^P'҃ /h4hDw:M"7mFXv]nO.j6`[εgc;OH(!>,GߙUX9E} @||#b@ˑ E,M$^FwH,觻F+$ 7O)4Lfަy1!r6\ϳΔRb[/3Xg}4t+VrqII^{%mNnR*HW[:P7|,04~zfVafEab;i,%DF_ӫ%ϭy8gγ*JH$6*S}zӣmIc2mXYQQ-Kk܃eSO]sP"+= դ.ݢ^fOEl*Ϳ4SEn׼i!ͱ BF0O HKzLߥ940=YqqdYvCͱjGF.WG4 $A"͘֊mt@4UH IDATɓjڌfBZlُ8W$Gqx*=46X(E%{9s}WS~:хW&f6N7YNa3 J~|iP 59yYY |:(zn"ܝa( Sq@h +|qpi4YJ!v ܕ *!U!B,D<\ g-[a5*Dyֲ5Jz0E`xhWoq仜=h/ @CnN̯y$A x2`op=H8{?ppp8{h83O&x€݃ϒL!dRo^?S{R=lo~90BOXsZ.YsUz* @4AJSsQVN=Ng`ihG Q ȰT5tg< ;F0uXQNS@BAa*oed7M6Z1IE:ɱtOoZ ̐i댵I"87)G~W<;8{|_}'7tfgIƝ-Մ՜P̼E[xo`&[/ E#W+S? >tepsjTFnR@|Yv=rkԧ:cͅL@ uj#st6 bz?$)[.TL3*/Alaak-ċfϒ\+})Ղ4:ЋY FOaʮŠ't 2. @z\Y8#1|ӻN%-U#LStb&:{濚F-B*ZsPtÉߨ1Œ @dԥϥEVcD]çU,Bx:lgTs[$"|aR.QvBӆ00f!;\:Mki\'ս 1#J"(LqefµQRer%B8}ތ`&-^fߐtzkIJW^P|˖*a WLR$6yU dը>JSL!Urf~ qa46]ˀn9bJb‹|Zeav@RϘ$.[JF^ =gV`H✙/anPJ$tnBze#̾¡Yꅄ{.%{pEՋ+  M564_zG$ 6dqm0U* q:8 oB/`ϒwN&O m3=_d3eFNFLȤF9Gv.w%RK(%n% YFPb$bJTCt8Q#7Ǹ70dW HW# 7+Js5qorp_Uo0`Z_+>u ^x-9͸u&c g'hgά♰Ӎc"e.luɖ+*Z.:$/xk4X]OK}+Rv}w_;ׅ7FSL@fր4<4bc)AV"kh}rB̏v}wX\\`˔-ԅRhGk~ PW? NNZS2-1E|D-^T<0H%v]'Aи?a9X3MS8b6/|k>6Y$Plsa#2f=t"SJ.D \{5-ff8UvYy0r$WItpFu'3bA\.1vցlmh]M Ҕ~C|YaA`=ӡc^o}G o{']{|~7'[׆$!Zkֳ%| lq[I&zs=npđ1}/>N;%읹\Tiqm3 +n3u<'y46,qƲjŀ < Ӆh~<ԡBTeq;zo:nq>sU+bvHy,)&4fMI\۸8׋Y5}zwEqNEbjiz؋ŭ˕-БkkN{WPcS3v07r#^f8ĈŦNjWY.+%7 )Q}viXj拡f2xN52i mdWzv#>xNjo4n Lj:E3GfSVf~;5"czPt8|o3zm1fJuM;'TcLGkgP=GZm(҇khL뢝g輗ϵ#I f$GvL)uzgUnXƙx^-C {Rs$ mpҁYJo>+qx /xO&հДa5OstL/϶ 51oyCv]DQ%bQm)55\'`I *qC-aDo~ u 8w`8&3 `_\EIp?^7(8`MMΙ.C%0Jq`sRɀs!9s&1[DY]rcagU M *-<֧x=‘&Km9evbGrg!m^>ۨbȻ5YzZ^=##59IeKɚi]ev RA׻@2r4Ƣ+3Pْq]R2=(@8BK~fנ^nJ3ս2!A3R̟omL,) ÜUʕOD2:g))ω2׻Yu\'OfiRZmpnnR]hܒ.]x^vel歉pX7ːÖ@,=C)L`@WqeMY8ikHI|!| ci1;חlpưwb2'쀖ٍ ]t1QkMQ䖨ƥuHWVgk~')I8׉.JuOyaTõƈ 103o*Q,\*~[ 42vYڼ*&%>OX@YGd>E_>JBԶ8ZdդP{@}a5;IA89Ýp7q 84,R9KmΌ)ؾ]'0EA y(Hɱ?Gkp%+ W|kܹLCxZlu.nK>m3!YL2a[ӱxJ)T0K : gjRQњsbLGHf`<'22HF06/tӠۭ& Ȳ8ԛr M;nԄҾMS5RHFzc )ώo,5k'iOK7 xuWiY<{3OloEgqKe2/ؤGLja :r-;;4NCQuC9)-"r:2j3s#KMӠR@刅c/FMܕ59TڹBjRj?WIRW;6J{yϓK]1|} 4z[`aՁѡ2%*mۥmmύQUJH+~2,$n hU]V&/)Ъ8Cͪ:uIUoxAjEh)QBjQ4MYJAj z_)LݚJ*7pk߆{ \}ux}=K}Y,MA#V8:L񒀐4 {N7[lr[Sp¥+y׽OM|ÿ׾׃S r뭣cFnV{)gpBsC0dF{&6ɺq 31uP&ixn8v=@51<VTEҜPԛdKܺqNHG!<&MHVELtH 8tZckF{:;.Oew)wD0f`d`TM۱|䒦`oczoԟ/LGU3x*] `1ʙ>ٽɽ:͟YD@ {ܾ}ddWt)3+#V@Z5sMΉ]@f4`.130/'n"Rk\R8ΉL&& T-Ҙ7@j[(2 5̰if̾2VI?(PE29;2_3ڑ,T\< (`i1ґd#: @S=cNTg:UJJIMsm]iv.FHȮ(gC5 ׃h*"DFbbrk_"Vgp/&дw,.?&|I|ቅ*9{d́5m&7!Os[G+qgd=%YO8 oGqtzזMwΆ1Y}G '~ȯwx [*4J"կLNc:/4^qg @zۜ9JO )RMn!u=KwO)ԥ%Q5nm_ .cv_ b1lӒ)ܣ,ToF׭sOlщmcԕēn(X42Zu$нD-;H$K+e"fSu$Z) 3,:GyGgvSJ sVZ; zN ab#mЅ)VY#i h=%ɅFHu^R:}]`6`tMSB;| 'wXx/z\"N f-LǏtd:+VVfd6g^tWj-αg_cef[^9rId bv 70{a1j(Jl$`m\ S7QgY)lE6S//+ZbqejZWTC>qx(sB"v,W0cV3{ g&s!@:aeS@}nwǜ ^V>>6\&:ia5%ԧw?בiIp rjuЅdz PLbj's01 }m?6%M08:ûۦ8kj$A U z4 lWҠlm!Au|\H f hAc^<DM 8&bi zZ-@< x_xw@izo>׾_[}?i?;/-tn0)U™ sa3p7 ~s9^z}xKgU2\i8>=_{ /> ~Lvk"H>Ƈ.42 iձ%>UR($CI6x(u(sriu H )eX-SrZVggv`A8"Ps 1qjeQGP*QBM˜*af|Dji-@sG[FdV4_Q].É֠*5&D#6;&ҪƆrbh*wnf y!( eqʥ0Nʰ 3=u/{yZ{׶ӁQBD4@0!]IOIxmSY!EIR1@'{/Qnr1|, 7P0ϘC3:*D~PN."7!nZHP=JLG˄jmǠs8Fv/7YBZb@P^%A3h!Yb}zZCΞC&KL: 2YOqz734묧(< D S |;׷F}\a 9АY Hi=4 \_S_CXUjJ}>ޭRtz^b1Q3eYw P:lp?߲yW̵bEi)V)v4rb_;cP'~M( \3T}qe֛[0]&]ZZ'J;(GS'aE8q3Xo |TYZl( sԧ%xw.NSx򗚦9G!#(x`z#gk")թ3d"0 ܦ4>`Myk*"ĩts)IiY/~Q:`xvl&$LO lACNnC`1/J/aX~@ M'Mޕ3<03&..86tΉ܇К~a]Fb$F@"]&w6SI!WqcUʍvQ= fÿ^!֑aȦ`-ؠ. R%1d/'Pw/Fr847s aGտփBjrstw.$fnӒtmʳcK+9{ȼi1Wd72iLgΨ-hF2KSn^Ƅ Eri|Ng8 - ;Mw'?xniԆ aYO4pz ͎lS(œ>љۍT{HYo>80>5}2`;tO҆ c ] 'q>>/M'>?_fA$nx/[89>.?0^wߎmݮ_xSlElԁ l^Ko~__}qEt_x ^:gqㅯηN…]'EMòӔhY0U|V 4wՃ9m WS a|\V5 &CIi 9"uäᳯQ'y.f, 29B(QAj)ĕs֚}/N (ذ 8bL`dA{"^t.5z{S6)FLF.MV%P wAr+,Dl+Sk(T2@M*ŵZdl.g,{d3m>߅J{Lpm."1:weq:3ť.O&?ǃRI_^+ov!Ȣ1RĞq(^:v b9-2XRB.̅h)a˴gS:;0lU(VKa z``X)S|K:G2kK޽;6Gq&m| ׎Յ f n  z%=e{!1է4nHA]4yJAU{FJ 4+IY?Cm$SEaLM?ZD Tw}bZ)ĐȥX4Z^kf!S hmn+%Hr襆ŠBG5™C$꺲 C|^81sA|O[g hXin{ `wfoe xs6w Gʪ1>P`R"'}aZogcGw/[Uia7NQ8{ eHipR|@BfXϟ kTdoؘMҙ4q2N-4}4~Ki88\ex%ÝS`12ɰ⋂7̅/gF@Y͝QM{Bɲ0 o[*ChMb3`*VT % H q\RC=w?`@!— )dO"hDRg}\nj84*@%@8 +) VܦL`+d$0u8~xco᷾g^fޟ_y^s!T76&'  iBm&/&9c3XG`hA^.XĈ}V(^v vMTˡ'૟uAD qMࡐ,>M>':M¨BŇ7~^%eqʏ R; SŒš5-J*&;Al0fdVU0gH++G|aF]552 f1Q,uEG ^`'I]ϟG2Z}{(Ed:NaR0(82F"12K-p6u%Gyw} S*+R IPEMM,in<*2N lMyj bEɚ)l1zV!'/5 =a 'KH9D{p L|s.c.u3SNg-_0|VR@p%#|Oxprma^Q]co.^]|2}0N+=:<#\.\r1s1QKWX >͔e&*51YW8π- \FJ8r˴%15ciU2bh|e٥nڦhwLG. R6jSAINX!uѮ֖grwcBCHTudF۩3P\jQ3 ?I45uYL+3j n><8}g/^ṋ/`?O|WOܶ mkqOh1:t4Unq)l-hWU9X/jFIƝ|rׁwG QFGԌn6􀵇8%uj^4c]ډ3_w=4B%'KL|VyHaWc5믻cK9ϔWڡԄvEQ{,VfƘ#35S+k!-MbY!- />s <Z'v w)JD箅i]#Y0P& (^/qRT^iRZ5 CZ-,֙ c,ƚp1WԀAnQ y𤻗OY7-2V*W+jf՟kA3~:8ceiA皆FF>f֐r s3iԡc1iG+MS-Rl\^)>0 Lb$"ƙ/yS.FgcEfsMQ^vBqu{{b胻cCTsȝ#F7et \Ǝs Du5V G{.]uLݒ:,NJx,X'4)NOhlͻ ӻސ0[ӬqthP7"]Ӻ^aod(e?1Uɳmh ,9" {ݮ 4NϖQl`|v0ol;%ܹ8=h,[@lGq>Sj\2YwvE!A\#z\;rxs0?[LC=L6Xzxθ—ċϽ_j1ï;/k8>_ɭgTc JU0%jJH)a 4Ӆ7[lAIJ60 V(;Rũv0),;Ij^ t>&vvċ >SV .dBfg Kͱ_{za$0$|̽hA"`vdpAhgN(ڐ$ۀ]z IDATiB`V_V2>gfCE6t֯KklR޺:xBuRW=2Ęk#sEBʊ]>NU`@p0ww9M=8=haߔF73{`b)`Y`9 $bn>\yS&p\8a}9wBvy-w}t;wۧv;3̼;}ZVKS-5y4f3c#FϝVrF-R.6W }B dwMvTxy٨mY +rmE6Aͱl<; azuhY?=U,LbNzP]&j&#=WEmS[1#͑j`0Ծ5q6J ŧGƷWzҴssO=}泟o: 4G$vA3flf:쌜 MX(iksrrFF{jlL7พ#mz0jսc:9g3t9z.Q*E-9{0H EĻcg:IlwBL#J2R]+Gkb}3i3=yh)EszN{[j7&kr!K:AmC6J3ϲ/#Y0 Rsč HA'7JΌ;NGqȶ m(2,콝}9"ez[Y!t?x`Z)MjӟzFQ>UM7 tf8nl  )ue;klI!#qo2ѹj$z9!bG 3)z1>7 Ml8$+NQ6vBH?"a!CP(/spw|(h׏q м5P_ -l4tsgTN<=vi<2ר69 c}OiM#Gq}t ǔF(92mmsrOɯS_ ^kvП[3O'&Ȗ8*gE~hN"j.b2R7L^cLs1kam. O)P:'%^eX<\^=-]}$UQ^]KF1ZjB?kR샀P|+ 5m ,}V]lj&Eq}s+_ѪȰ>ҺA*_(b1pNE@cRx144LL2~b5G}&NvǰÀ6_T,5* " ޙɣ#d@e٦6.+ܩ[(w0#KÁ}3' LG' ?D:4~ϬY]L#0ORۍ' tY6mcfHjV`O+Mm j.)xָ F2786q;4J1ϙX`,_st #V3=ÇU/Hѣ:y=82< {}8Y˨Et):v1,U2 g/ziAwiMdd+1p`;ؠv<NΘ~ Q'8iD;M~\ <dF卒%#@]V&FcI%埙fkjLmtF|ƙ+ u vX3_`h2v1Z:BLL@Z/gܽiOPȡ\D-ՒGHt̀\ O~/<)<ͧpgwp)|~ [jqL 5)taK/e=,TUJ"ӄ)MXM @+Ǽ#m.eIiŅҽٝ-sz鄦LJvobhG(KHgQ+ɎTϻ4 Y8v&ajH}S/F[,֏XpǙ A>;QG*P>'Go<熐cb1>} R{ihSwe{ASRWdD95vr6zl|feT2Z{D4jص9X#pnkxSRm^t$),#\^mw cQx\e{ ^in{߉/!ҫBz7YL{ZWeUJ@ Clg8׺?d/ú iP'f;T.N$4&tr[Ӂ7DG,bׇ5pp=%VnME??v {ec8xpevOz$=j/O 1Yco!o#z-$Yq)(`b($ M&q>=:Ed搡>h@|F 3}O˵io49GGށXYF\. AD<v)gȿ E; _x ~xgp788s3§?~|2n>n!hy~ ޙyg24aJs?Qi;h`"nU B( g`r-eiJn_K ɼc ֦q$,Z)j! DHdj4g/Lvl3Mݬem^}R:ƆSPx[$ /8$ZQ^Jv%̌dBMIr5Hpk&ţ]t>jPуM֡trunIWPzY \[URe }ChzD5Rq}UpkM0u) ʾ$)+f]s..`@x?2ޅ8Ɯ 8"6>A'1fq# 6- :+6`%u౰|bNHfwKPOh?Lo|d":U.d!2]ajx(^J&ҙx;JǫtPtn泟_ x'o`oogk3^ |Cǧ~'>Ex-S1_f[]-0a$X#] Ԙ-jxcѕy}-i'{L3MNa@'g٨tJ&kUQb'X-t!v"`KYaLm48I:x|G#v[B5п/FޭZG1' BO^XIHĤEo8bThkHbc&/Py)"f΅)jȴh..^/Ҟz> v2X"@|Xw/feR.7գe'ȝ.mmm!;z&1z\zއ1(_fIwaP);%ؑD՚5}w hzԽץ5C@c䎰-ô '70vxX~qOH.u;r\f@paTx5s zN7*TLFơLs70[#V:Qfu#U}4,,'Bcj ߪτ\x]])S9"S^v3FCr؎hM`TWQ)d&>VȰsjBtwS_'x˿Wވ<{Õ^AwǍgc8?s QbHTx()A9;T"kHф?-ESI!p'#K1C ٠Ux9.ż[sf[p .ue8>P#ـ>X7n rvzPfs$Y>Gf%t&1I%S6vʹ5(I[qs1 3v1"'єmy*:~G\BW #s?>,$ QZWk3uG2H 9fb;@  vDC30LGtZr3R:2铭2lB۰NϠ9Ps=H iSCskI"X+m2Xp˙b]M=Z]8|A9 dM=x=A5&gøFpn-&^4wR#X)c 4m,7Wlu]_9٫ .$NN 3?d8Cۛܒ$a~o̩Jj!kD-D lŪʬ Ecnq_e*+}"<͎x~ %^~] <zxӑn)V=~ 7Oှl%.E|`s`bOn|_eΧꎯJ'\^g7|f⽤9#C-!ߢğwJ\ۤnᒯ[J]h7v-O-:!5ZS H?_w7/׿ ~k6?wo_?q8G.0so/'Y^𢈕~[Ӣ:2Ů{E Y|zC%/]eYFon DjStq[7*lm*/U0m!c;zBEwfbh ,8"\Z 2L4%8)F_V Pc{G޺$t64ylrXz%B%:Xg g)G`.pŘQВٚ`yLlN QexNDz3H{tf]`b6)IāB gѦL%VHX'vYʼn?|rHf:/=2gQkW؏u)aPP'nh<:4EkuBCA xxh/9hvٺG3:vzEz:=Ȅ}vqMrI[C'R9u.EEfNn]ć]D|%q52smJPdn٫;~σY"Ψ`i5cm3Z0F*fX ' 퐷Ldfvh9+ $R`b?w+~7_㻿g???۷o_oo|g|?Ϳ¿ϟ{RliYkY”yYIv;& [i擟ǥW'pfj`fb?.Locp6ccdm.( 8ν2:/,5jUBH YP,2 6bMRθR}ow9Jӛ򹯛3IuXhJADNd0d$=W-:0c;gN&w۵- 6^(Jpځ?GĥZu,0ggʧ N.[&NMsꀾ$H_w]Hw)x:iIGI`HnlբZ\r`ft0keo6q9lH$*ȥnf!@u_q*N mHZ[FQ0D7 n7e#>%6N,Kkl4xj`TA1?ueլ2䏲B’W+hx[| Go˗Ox^z/K<|v{nhݟ>޿?? ?P2L4bb\͌48JF4FYI^M,nV!M_tHnרl*֤ˤz]!J\R|w m !7-gmqQGMO{BnXٳo4p\LXt,vA6XEVgbP a)"z%aܛ3GE771V[a 25_]`|xH#!9A/펖4$n]X%bձh|4]LH`î1F9.jv 3KAѫHq"~7f/^}#/滿īƫo Kܞ^$~Ï?OxBl,i'u;lI^3)dɮ"x l f2b5wu5 5R }#̘G85!I"{ٴ:Āem2OMdpeW0HnyDa" wO`mErUi^fh@*VaDoR Z!=1j~ylE$dMWحbHlm5Й&Jז[msA2 !65vӺ߇9v+x dh( $Kǧ?7 M7J=KM<|ĸ#nQ.Q2# \~Cxg*ӽ}VfT$^WRE`Ok:Y\){#3+ODWݯ"a5%/}j^HU]bTTD03M j~qU\Y?Bؾz$oDE&g6Ë(k}Uu}Ë3 E|ܨ͔ DAFR*,Ps{t>^/tyeoi2atԀ\cktu /QD<=+3>QEBb^pG 29W iЩs6Ks :Wv9'~5ގI[4zw$7zVq@U76+'t-:!vP{lz& 3[}5R.q>i\֍R1{D~qQ_a|z,H(!EM8;fge>8TMՠmSI_se9pEZa*ts@d7оh?-=h&aĨ{X< aLLmJ)B.? EPKʶK* ZI)@m]E즷GHfxe 2>;[M}X "I&*"4JVŶgW{V! 8)-q \hjoJ8jf=Hr]n1,iHHFr(WuFrXUH vkŠA$AuЅFM&1jm&n"#[_N]HP6@${KH"G=SVqhv(03Zn`*OۛsY13TtR6o@ "սu#Gf :bw,zŒqePy@ry9Ee[} S xf\ֳzOC_BU`4 O]h{tTI94 /ӬI.fm3Mklٽ_2φz],jS̋5߸mMG #/&sm;,|d8 o[f|v}6.in;l-:b>ʣ`BK,p-8=9vٔpzthzSU'͚j+ ͘eZmj^&smX(`(JTh6Y <F]egn{ V6+3+MMr^.`V5f+T)[|W bÊ~f#sz|Zlt{#ӕj"(6Cw/X4^&Hn uC):8wNlYt?}*)Z\i 1%'\ '#Qv/X kB#ɩ O5fMT~kui${kc1d^qR:HOLNp) l(y CWҡq2CDŽ{ji-bb /m7bqhfuhJecȾͣ>K0z{J5BPg8#:h fe< 8ȜG.kxŽ+Mjg,fP60b^8bn7XJ_n*pu{\|Jɉn,V0h;z%}$=L psQHq (.0$EK"CGɮ &_9"4heuoP(A{IO(ܧ®$k~WJ #82ψ/uN7 s}1ͧY.oW3a䋞uNqɆs*FAT 8JYP_LDXõ=}NV;tie(<<: -) *eo! 8b2,Z,X@p6v?|pك{,Sd^/WdvAOSy3~7x:H%8˫ʣ*z1QyͅbL:\?Hf2j}mՏ'1z,Q#EbVejU7ͿG6t5Z "uyeUe1\JpYGWli66JR"+}&E,PgAw6~-[vrua:c\EQ5L ٰKۚӦ+J\LQPQ~`s%bQH9#U6 >2 01fTѺ<1wU6GQ rQamCvXLMƃ0Xe1/ -^&?4SI)oÞm#W*w gzW#YiitĶ.m`_YKC"mP!kύhaTC~\.jDWNմN!QLF_'wl\D/2CA;g,ͶF93֊ qO \ h}\Brc5hkMۜ}ϤOՎł&xq-c*37{w|HfU-p0dktF~L+fDK[<BlZ`0c&g@L*%]ԝ]i:x~ ӟ1Yke0}zu# UV4hp\bdg^+>6ګJ\B4I YNpe_DP7{s@ (LIߧJvww&3v$Σ"ޢc/`y`{UF_Q|̵v&3'MXqOy]Ev;]jjo8x=Y\6J ,7s ] kkCPv? dz?uǖ]TSL<#3B)mwmJ [υ 4=偂~4vdhD2K$.jtac&lbRLc ?&r[;DΝB{g.qvce#^6Xte-$ت. f`l!VS&PX20Hm #O:N7uoF2K@vcjWsO 2 ?O}jo!)vMR(w,G*WH5Vt[l1 j}͝pYE 4V]i2Mf0BIU+t8$wq:5.ׅ ,/s)I\wfSz#*Rv[t(iδs2b!5Y(eJEy8g~'-ORW+7h̑ۓ N >F5fAh 0l{rjNC⶚3,1iSJQ"P"f}B-3Q+OLkSLS!Ġȉ(A\ ΟeF?or&tmTqw͵xO}]<)DjHPtNUg \F",6&*h\cqRV.mԹK{v;Qҁ3ӡ?y;'29IcOSϽT)2(ї/Ҥt_eb*}5.mldo)2Wu}#YZk9eâ;yT_ v4m}rf2s9-zH ΌOBdiPfǟUri1yE<ݽgQ>d)4*jSZo(qB+n,8˜`\l~CK<@&8:1 "6F^B%niϴ>KZ趄q=IGw@ɦ~WhE2 F6ޓޘ($\L!$lAp5(tWҞ5b>x:͒K8znJSܡMD3"%Z -|.QLi )WaDDO j5}M^Rx>'34M@rFS.4I|wkXeʑBzڐǁvsdcKnD S~Ʉ({+9B2%z?@1hSD+f7jdKGN- -ZGNji錀qhTyyHGi2=6׵ei IDATQ,2#R,OuDp$+@EIVC'"j>&jP*#wyxJ8mkBQ+c}ڦ{,j:S6ϦO,Kz'n?:- HS RO"A=9fG{.km]3͎>dYϺm}pddrYYY EořaMiS t;ȴĘzA0){0iR/(X $)nSE]5,ܣig }=9!JX%׹hӰmu-˺H4-9A3K]4>MaSs!d:!wg4PC+QdJfhL}.;7vf>*>l*ak'c&h^3F+ˏ6D  llO{I3[E7Y<*(0l=5]Mk je p7H)QhaEhn'tP uE6N 痘BL0sj<98m=_S267m(!s'p17{\ARͿ6? /RㄻwI-4&ZkDNy=/l;ĸ)8> _3$>D\$Zx_4._s9L<0CpBcg2'ʝ<Y0j榛dy9MIZdMņ*y$pd6QZ*6p&d[H1uu{C͂? s7kZxF tpEAޥ:6 q&\fy[^>WS\ cC>+5~/UqL tKNCw=3PB1#vIhBTҝj e$@"ɸL'RLkSzsMlZSsɻ xE4IS!) Im7CJ66WMdI]^6#>jФX0x"~Sp ZɠM0ehٙfJ2Ј;Nό r:z$?{mL|:E;JHKni6*똼d7v3bT~=Rt$jl:&bED&ǨA^,H.܏bg0@)g~g :C߮e`Csk*Gsz5gqRNsHRR?Xu*m;G:_fN-ŶS|T8Qd|~>c3$GqAk7;+yv9} ʜ3po<>( 4L/e;; S5^:w~,Q3sc+ wWKT9UY8/h$'m`o`ǔ b]ZlӦ1nEIEVhŸltn\Ӡr0FIcX!b0`i YT`OYcG9 <֥lFtӴj /TRSuN0lZN{8ց=OES!M@TO}ỠQ;7xy(uPJ1]G1w\KQ"yf@ݶXҤ˻e!p$@N& 'ޢ<'l/[W֤6VklW!x,<$ s$yaD 4`4GTh4W) y$fs:@* ~fPiާ ;v6 vRsbct߹x해5\DcI) I2n .I2͡k8L*HKˇELJG&q+rm')l80($M)Tk@ɳ)V܀f &Q k1&fJt<_N+,s.+Ia<2N Æ )2$}UvRUBٿi}(`F5i7EHcY1&)LSf6֔Ո1&O>=)+E48Ԝ]#&>+37TV1^)f+1aaѱ9Z<,G.qVɱ {h ĭ=Iۭn@;3;|'>߉ws?~1]<g$3F\ޮ"! i> +^=p|`ZFO &~4iSArSˍ$f# 4ٷzL(\ZLBYs2M 0&9nd6y*!)xlnVuP ?mwl+'=Xc 51S,*(LmY"iwͬ*T0(}l|4$t۔gyF Ʀ)-E p)NTlU]~I= %S̩Wn3Z[Sqжkth ժqFrfh$g' Ҍݚ_OЯ â.T-bOƌ[ѳ. qD'63OeGgذeD{FMu;iohsEV`GnP|vON̊ $Z?`w^s00&M4}(UVcaeҜEVb'JVmA/rR`71rLnK6.@3aqd%4(3ɵ6* ݘXu\yKqPْ/QJ6M،;՛MX}(:b;e7Cճ d ;nqǭu~z ||%t6>?>>?} }H |GQ4{~3%+xR磌W+@Dq7}48iy1-3Tb/ lA.hEsV;uJ(L( $tM'Fu2uXLy0TZ/wٮU z8́:|MqnIn`yZڕn^}"I+ڞhʔ4J:䇍`JbIySSBMJn !7ݤQEd\$ĐlsPz3s.9h&j;!lhZ0Oq)!Se ]+g'S&Pu1ڛ-ьQ#f2'N,#/ 2Y>hËA_FvF;pkGAق Y_ }:s'&S|ZNo%S=}ʂBFXڮ5((LvQQMșWL w ZV}Z241ceN4k`;\12cM|BR2F؞;[z"MX%) ~m Ok =GABx湠,NJ8!CYmE~ӏ?~~ij|~&>?~]> wC*NC(t)S?hBf *(o&UpMxfPj;Zk~xI!~H~OT-lrVϦ.1ʓUSD7XA\k:8W*RIkЫf'!t|7wm('TF7bh793,MHyAqc"fUh&`BڐF*RHN5=4Up\_#:+u@Be1Dc.]e!d0!gbA_4wMC? $~ed$$3,Įמf! k9ՉFV> -&$-FSZ߆@NԽȅ 384FRE3GAgqi!Sw E9<dP(T!CKȠ:$+5]=4ft'5dY=l7g i{z]3h+ |ڠD :N9̎t!y>M)C/s `ILc5Ad#繨LzP=g s+GI+M6.CBs]Gl?SSez>i $pmxDJHέ6تzR|oH}5Rf5]wjӸm(сtl"knڳAqEܼlg@4O&{ibkӒйsqz$?KLJe;T*zl )7#Fz6+&.Ʌl> x5ۆ7o7y/~WWw7o>S:@s>}?wf#q**~ȁڄxz5h[Pm4I(Ja &K{g9h'Zšs>gԒnqfEf'82sf ݼ65}}"gqI(!VO$eh7cӂg4"gksfӼ) O]+6zLcIn1Z-#L\}6ci޻6_IWЍԛ yq[h3Q{5] xC~ Cס,lwt;3y:Yk(qaY GEMU?kݧrMWc>q1)p^=5tM7:sĢczL8Ft\X D5a>(-60ap몟RC̘kj4j)RaQ DgR$9; ~JkִsCc{Xiޒ;__{Pk;Y-Ny)r-lQi0 WE8g鲧4Qu]1=0#vOҥƞF'  XS}6p>{7hI߀1wZVo?IksMXqj^SGv\HfDA\V,^SۜM'%]% 14WxmOֆDdҘh,^>QVN@[-"G Gj9ܱېE{-ʺb/r["HR<)x+I:\մ:xFM믁"vī '] yxx xGw}<{>=>>}ӣw(,W75Y09 caQ<˝^Րt?f. Tl¼2)r4d,?ÔOb'o'G~b I14m#֒f6Bԁ_I\'Psڭ5F*u{Uq)oN9t[{'ET;=gN{7**[k'#OuM@~j98i7+喐qMof!<ͫ 21QӍQ$7evY #MqN,rl /Ҵ)lPܟIc(̨9I*愝 k1 G{6͒M 1a^+[%xN S*آ3}حcyjn9Zg4fk2D+nX! [)6W:M-OeF*38ս˾X}7%}#w5 A|緵6$}J< _@mMR`cm/d`Qt%in5:ߢhl7bm9wM pCehs1>x9$v`n:(Ku0i^^G+/ĺ< g˛ǼVCTl>$ܤlo<[:3n[/oǔo6x}:G?n[g^~ eq<#g@[;ȿ|-^,#=c&chFCā5Ӫx|p6 SdNh0b;?(d"ub~:*!,a8YsuH.X("Ĺ*-}byMhDWcb{ovDh-mUչ<-%˖ѓcBkoLfNP2f30sFn\I˔Sf- FIW&IɴCZ?Odγ7 Fݜ#!NQ E8*6(8#ܳ`IHA#lrG|J=N;^1{WǤevQ4 ذWU _ f Mƫ5 kRjÌPЄkj0gvԥc3ϤĨTk? 3Ee5HE}`6J(QXGw v]$C'wڊ]ݗ*Wpi2=8 ׺|Ζ~},6pL7wDT+n1;_'y N5*]j3aGP);G$RQ/FK_Kdy͔"?BL}RXlВ4oONyJ fƅ0 {ljrCL!~ps;j7'T5ܞ2n v4t{ۗwoU sj˥SV:bx8v?|L?|~93cD_*2R6̝]LJO矟?9&&S_KOm$HɥjźG8%ыňzk7ĽweVO*b3)MF28P&YTgTxJCr &Ɓ>IһGcdvNpdxLBrO%璳xQb9LHV,bgv85b;c-)~AU:!^(sL7a9@较7M[v_\% 4N۶;iiIq AQjIĒ"IFcIհRoθ~ 34S!|@?T^t_A;t#b+=UAD@ud꿉qT$isuxd磘7F-p=.&B ux9gs;'5ll2Lr IDATTVך6výߓ9t: a,$]Ҥ<eg6<,&%og<'BU&e.yt/ۛ]et&SäpϾx]u9(Dn: ؒI-zd$>L^2FDGh0fS m!pNgEwl>Mt;Hc^#Jy% Y~Y #y i dLq&aY&O9%KvSYz|zΝ9G6@1tB}Kiƅ`3Y4Q=udcu ճWCD2D QJ3'z̵֞o_~mï~xMG9My{wcAapfo;3w>?>'^a c/xؗ_| 7 =Dg'~m4\ίc+tی@1TkZ3>vkcR=WL#D ܅'&@ @9<}n4k ('@꩞Lp4fiGWs~s5QvC2Y]`-T6-i2" :V&/fM!7:90"<:FUd\.+0V SőӚv29>H[Mk5Kc:G1]5pMCGhv҇JRjZ$$bH&n`Zg$|=a(jz`bMVS.bccX,g2؋bۣ4P#q$Z2eFg<<8r;ޤhS_57C`@w>Ѡ9vkIB`dgM"\JrN~ )$ kHŏcH,J:l آjn.k,u׊,Mƫe&)9юyE-s[2I::Or63 >wgf 9H,$i=;ԫhaxJA|ttHX WNIA9$-cyԷM&V'Y0QXi~5]f2t`0 Eϟ㣝FWt MzuR/%$#Pc6D%K{z?Tsh^GL&]!de+"^ #ߙWJfKzaum;)|b(dh߄lf!h: `OZ3A*Z1}[Sƪ9k"/_!~]׿%^|M3g©"!`e%U|OĻw۟oq8Y4&qKuE6` h3ρ?@y:YQ|p^!f#$^n>aMp|Iƒt2 .MqLRQF% |(hy:QsHN].SDO#5O=vۉQ[,ߡ;rQy)L.ld PD{%vm ŏ 8/mf}re_ Vakh lBdh9d1Ɩ~@%ܤ8{cJJF m1?B#K́EH%k|Sι 4k];aXZԴQlSYϴ1Zoʺ&I٦n?6Wq~yaM I'wcsg*cgdx6 l˰s@dtמ&rZEc |jnڠ] ֍E6z$UfFgXEiI|=@̩ܳ*J@Ngq x CAsg'O,GgM 5ڮPŧeGH]wcskkh\u-1GABXx/u&CܑɬY .>&Dc;Szvǭu|oxO#ZBg\@i==Ic|x ?>χOoOif`0RЭ\M#{L:81YēBrXl)*Z,.>T7EjW*3H7 E?x 9rvFa eȥ_!DY*{/Z& \4߃9hCͬP'QD 3[GMG3c <ַhj~^gf;gtoRAj=hwɒ6Y)ŷHE (L6htm`Y2;'DW6WR CPsL,'gCh9ҊMj9 XN^7͖z5\M& " PIXN2RWjL~iH,d@$MY+&Hq klLvYb򱙭}%J۾FOLe&+z!F,^]_9Rq ܧq:z9WL#\ w-8c┥/wlVŷak2_> ¤xZS@,= C 3ˬ-0jC~kBɂ߯͡; ) |Nz nAߣ3錡rb*@?͑Py,v؟h ҟ쨰a<{4' 3sc*+-V9o1 u )쭵dMczq5XQhDIr&bh1>0J1* і:s%k-,Sm8P*] fs5rJԁ&#KK** `1\u㛯_6կ;noE uBjzl$i;-erE }OOg`7vj_QASǟ?N&6AS$=/p.ׁhlm˱7RghP#=s翇jڢ11>S (nƅG#Br6Q7N)~C|&OAF"ʬ?KsMh͸fpi=KIcB؁z,SKї4sMNԔg6y2m^*SaH. $`:W}wZʝJٓ#xkTR[ԤQ\dq/x4n)fƭM.#bdU !GX HޓQXN40~yG<}}giĶ(Bs?ρC?zHJ1riԕQRQ"t&<-K&>Sרi&smЀύn'&}66,G~.N! :aU(Slnot|OL %v4XMjץQe2NQigF%Df\ٽÚc[?[;]{5c>]3i.$у%&~ K~8_q-f;UR8}ЊX[ۧлH[2BʈqP:2mZXyN B)IE58a9v3 `ս老5]? Ojs++%u%,gEޓ4({e˴ϧZ2Qla4,1n)V3ؠ9pkaVy|\6bx^6eG¼'貇seU_|nUjlԭѨ݋QG*թ,H\P'5NJʄ>ɶP YV*(3g4a[b)i_F*-l^L#Vs,5:f ř -#yf=0eftwL^f69?3Zq:̃"G?oQ״4P1끞|Ŝӓ>}߿k}3s&'EC#ۇVm}eҐ.kL-96 J)>¾iB/JX젯ͅy틋X\ Lnf\J KiL.#ɂJȾr;e 0%][~[TOIb"#vx|*ܧs;fG!d F6T@F5Ӂ(آ-;,XͶhIM\͟R;LR4YH#@s-o4z @X#bstȑ|Wee{pzJ+izHy3'SrGW|^0=( ne+.ksE=hCMQP%0IAPt-i2db(\)HEo4gQ O m\'es([-V)ȋ1&J+5*UAu9w2,5BorYA+Y@R;ԨRm/ -C1%rQO-3t^h'}4..ؐR^dwIA8bJe':CgwQ!<NlÀgGᖱ(RG+e>$"SW 0h4b&W->ed(%I( ~9<=߫ 0WC.h}>/GbO#]X<o_?oou45#냚 SL`0:)MvT:4gu\@#hj|Rdw*%ǭ-4eJcXffa^/ml͏"cDRLV*LOMۂ7`0tP 1ef"-qSNBl5#U5# ?Wp'6V¦UǷwj(mz % 3&v&n 0UJ<_@gQBU;ӿ0\.ZrM>LKZ͛OWU[~-9~ . vd[K8+CTmtXl)ֲysDBDD&كB-҄b%pklړhjvcrH#{K;0 I$e`ߒV?')/g}.$H@JrSqƝ$̠+o0QǬG~e"5XSN @scBgyqw_͹gj C jSIzZ>i>Տ??}O,׿a3zEqϾp| e93qr ?{g๏}4$x9%Q.Et*J:h: 幝Ev+4Ғ˜)ss衠&:m]K2%qYnl7)6R$d鹚QF1B>&iL[-F]/:iuH,4唑 bj'4F 7P0L'T Zsp2NVkggň/iKpomn`lk;Z,fC]JAi4%;CCjB$iy.@SpsLD²N7`{SR+WUfTIU=H3fԡӎ[%̥2ws;ny6S7?X]sZ&\m\U9vCǘ8M|P.Yvg-8kDF-2%c|MjQc?#Y)I:tq8|1D.렙69u}b,̀ըwgTyRubTFbǀz5 b/bh E PG%e4%Pdt{L>*H~$Ku.)Ck30:KsPؐE&<֦64Q&OFo{V Ӑq&%&uV4/ӟNÀGHݞ:akN@QIžy6h1En,gڹ #1 ߼%U7<&sU3fg=4Ψ nNM֋W~M? |h_l,f5zո3 S!br9SNhaHNiBu8:s*p :}j3`ź.*X#D!6o4]LQPZLY˲Հn2Y*ݭI*^=iw@M˺ڨQ~%*+OcǙ{A&t v]l={Bכ0IXtA2b4ܤ! DAa3Mo+zvn*TN׼Q #=JU?((X+ngvfM^O&1$%ufw2;6mʂV G UC).R$y᪹IahS#1l9Db2Iyk &tt -ҥ9Y9#RU=G$4.@Gx繩`dj{|8<1XNxae؆EĒ$Å7^M,+5r#O(;gti$"^M|=k3 ̕FyŦyBͧ's]GfV;Hr,]C嗺֪yu:BHU TnF3ERtɲË(WUe5q'69=HLǍ`LגL~ZVҙUa 襗7%l,6_bNFb^IZO BͦmrJkCo?:3SmpCǫWķ!≮ IDAT0,gEbLs#^~ {O^^nx#^i ?!sBU;Y?>)?3Œ:~ 0kQTε GAY}3cA )3X"}Qp/4MTýϮ*8l6O~Q&+6i6:RnUkr#5vq i'<3FkB.Ok*FY-LY3g,  E$KUOvrLHΝ8L\oAz*JAe%,9 1frҿt1W&'/޼ě7S? L|rNC ?>VwA%$ |zmN47V< j7T EQ("ӆP;layihfƒ(1Qۖ"@yH)m ,g0t#Ci`ӟ?ۖ%q$UiyQIT̈03,Pk9vWnW;%gg\J|*5ވHJdZuhJs)h(KnS']"Y>mѕ@r,gkHTbɵIOqc>m5A0--JفT)aAz.-T~z0 %=+e4^tGB<sSfdhgS^\3ѴH N+Rzw]MeG {X (ii.U͜*^c`YspXypJ\pR ُ? ЩTLZvVMo![M]Lu)W~ -mםtGi(Q,8FY qƩljYbեt"d (=CnLjV3,m Dג%Yzn?!:k^>y2uU?IVfxnKy B)˟)3 uEN; {~~5_<FfeA?v@ $]K )->Mi:j&|K> 5Jj٫貖K?Fs-`-QOOhKxp ~xN/?te{?2^3xqԍt*+ ͫs _7׈o39^$\I,ʌ 땷2ܥc J $6`jH3Ծh?TX4~!t:`~j3EYOl//%+{7ehg~VF+ϡI~[(99z.u$o!:g#9+VJ0~TaL* b:EujtO~3pv(iU >a-4 !Ul>Z:QuP:POM{85 N349~uGZFTvm%oIy9~wA WVe #vș(Qqud?I FJSV=gyC[~p媑 ¨idLD49M q r5?kCzJů[Cd|Y$C'#^_"_{Fȁ0WH#A ޴p^G?2E#O_n-~IfwK9(ԧ$KQY-?ڬ INbԿ (cOWA{ 8e#A kWHE;0!cWe4*f?"g#P@kVyRˈ.%sDځȼ?j@|r X27AV}>f>V4?<%,A,H+v[o#Lm(/ )]1Q|߃]0=O*2%*ˢ &C A9S~(f?1C!zl(iHEJy|HEC3L @ TYzx]U=c?!{M[1ߍ鯈>KY{S.GFȧ?q~ϟ#[o#G1MSIQuC+E_! o3T (/;y^Y6̓U|:i }Ԏb[LƨeJ LC}35HO"N($ewOLI,Rl=T9r@:\<>>\WbXr0BCzrp%!,4e}>z97Pe/ ]>sfj3D[OU9]Ý}pKȔPBXK %Mb Dko]2Tҳ@"WXTV ľVa%'@Yo$teޅ_yfa>(6>ɽ&Kߟ"q=t̒jcbR0T4J0eCJ8y?FZz{ru!K G]tȆWyFn4UlmBy½ m֕kN~E#,7 @Cg͂Etk6J_rMT0\d4RR T1̘iG!̇uGFs''Fą`i\dbMwӟ1zUrF:A*uNHdI3m>p;H=!¤/H^EqD @=B>ҧH(lRF!Ag^Kďe姈y|FmY;]92~O˖b1#'CY~f #~:-!j9jCƫ"L]8P堀&b&:&kvhgHW][7s{$ ?Oفx@80' v2FKۜ6ŽyVg42+V2e'"WjE0}I*$9e@Lcu"M(4]ȅ".*} e\jlbK7e0RYc*Sp-"ph PMH Z&q*im?2'~ԛLQ tZ8Ԡ0uQ.<{S!B<'_4Uiv gim@hUmsIlicI7?Zd%N2w>Qz< FJp/a.A5i.!Si~ 8!ׂ|VMg)f:I<Кr=I'`ktsE#M(#_Dj"[533P@]FR93~TIqWI3:8!39]1(7lS5^CWX,F(\z~4xcYUK%5-{00yi<@G=e\YVdXA;[T[2)Zy32`Y]w-CRyyꂀ"ͅxyn΂4-nYͻ[_tgAYԚJ7/6Fw]A詪CSY$K-Hiק= 7W{ n0+,DT.ΨֿM41HY If!+9aTJ5u԰R{GFQ`2t ˶Kn8iBK }/v;Kb6Qs {GJ{ha%}{m>}<±t7N:4/]߄Z@v\䵌\'v L<2P}j/׋ 핯#${A)Ư>ݡ$ }WpĿ}^ngb@N-nMz!Y.pjA{WxC[tD,edޅhhBfNFg<> hlOS#Jja ֘?W԰l*4;2ZS3-G}eF``nAee?;wSmؐ8&(@j5{TAгT8{HXɧ13.O[̕*秞u>cu|ķ>Bni \ƂGeiƐr{Oaz$=`6lFr0\"5?{FA‹ 89czj&RD뀏`#{ZRˮO,КȳB˓\wED}F[weNy! 2G馟Vf@z0`3/X7tYk`erqpwpg )\c!N w?#vj=g8?Vl_`@A/?m 8}x%D̙=⿾!^? AA>^oyo:_# K#j9zLMi]|hWm|{zi.C]H]Y,bʅ>.Lm.4y~tԥ2jzQ=v#M_4xV,eB,%*{T|/A3eO˂(fy>\ppedSЅ1l`D#oW>AY&]H!l׽]H|1R+ KB\5і§\W7 ӴF? yUlIϩ/@ɤ:Lj&pVe+/<^jSF; 1"!5Z$)]B&K1guA]$9 ]O]:tJyz/ `fRH,uvfvNtZ2FEvNapނzo{ e;_grlJokkEtyy^ی[;"gķwėo5_3~)#^UZ -_"[įBw??]_E_n@GPPX \y 9Ʃj:D0B,Ƴ?kDdwrdIJe% RR|$POf#jK͞uHJJJ-O:# VjN2} |,>7c 3,"I󣰮pwT(n2P?ʻrԕvCY' HINԷ0cWm[ ny$7oVAZ[ oT`hK]NST35QGu}&veϑsCʿ{5V抾5["c2=:k55:| ݟA syP QyQ k 8wl}Me?*R%j6&9kͲ`镋wJ6@}ŁY4ɔ!jƁOt٨P YPro魴 HŁFf-i,J?-2 rAԸz/$W 3Xa4eՆ)s}A#:Lj]F\3bst/-b~xs?">}B  ˷o36" 'T {5n2Pk)>&6p&]Zcb;St;KZ020WF+ b6pKUe Tl;`0a6U/`/'[|Pld}5J/[Ev Z51 PA% qHYd!a }o̶?lV,(mV]>Zׇ.UBmyo__"爿ew?\kx=xx%/>GGħ?F|~p@f>6F_O9! 1b</ tnU &7v8r9PK@O XȰ=I؞{hEd>0@'/;m/^Zl.dd9e"%υ;*]X0O2AA?+>܉kݽ~0 \*C>PXw[,;<3`|F2hǛ(ƺպj%:(+UwJhLLۍ[@odLAA-@= 'r6 jJFጢ#Td\$MZ*5P͂Îk @Z;Hć%V=!T}4Wȣ]0.fiܯ0 i&[_$4'7V6ˇS-J2#'#J`({O-f/΁4MSC|׸'K%sg^Ch#-TӼ[uiKtp ,bBeeZV+uZTbm;W<(@,CgajSdȌ^"^Wa}˅scYG;Ō+K 5=㯿"~xyY[o"~5⏯o߮L9/ƟUPMt'|W E_T^I2L ذE<Β#Ie bh-'}>MaHg{ߵs]̈́%G1~ P~R!PyR:,MJa*0LWFg!ՌT8UP ;}7[["6PC.ςuq{pD\G|<Xg&ٱ(ՠ.lk 1T6B~sӦEt,V`=KLA)+-V0Gkf90GOwB/i%x9ε{ xpe߶]+%aK/FgO1d_V=Ypa&sXeXj[ -+[ۧ*ԇ#<!vhj>WЕʴ<13o=D?W S\?5.(ZPυۭġBp  ׼ݗ׏9OԒ*H|z x/;?HȢ1oobՂaߌ9uX*"y~Y 5QCR$Am'= ]*CuVIgr>dIݗ,J;뗜 Yb 5[VKfAP")[.i: iQ=}g`FܤT;TzAA~yֳڨ&\<%Cxm"5VC3lbhŋ \T⣇ S bW}^f+jv>->Ljkglla>!|+s hE=_Gkww`FuIvg?a9c[ 8!SR]OiK (v%R)~wh:>Xcfu#u*W;:f,=P<Pg|uOy![Yt,kwU^ҁ^0gϊQBسJ@mG-JENGtPADwmtrK#Nm['Uɳ3#a:e}zfL\!cÙwu.K1lMI{2UQeT9ih+Uj3X6NWէ{v*덮 ~G%󴖍cɌxY8g(рhڶdjy3?Oўm)ퟙdl,ډx_MyACvaW JP^7Ji-bÙxwY:ZdOQǦ$>]r'+1-QZFv%нi Mj3PO(%eKSV0,PVCf GHK~Lᥝ$({&. ǍP(V!%[.(v6/!VlVSVuiȧx5 凴 'qqUң,uMx6~w2 VM=`P³xN^[!;>9w`_9 b$m@ka(_i'dy{ j@4hxhcQ<,q*u8`I y[5 `5RuP$ڶX\UKxouϓqYH2"&F39' -d?#{cê7K!XĶ$3 i81Jz*ofTlvv<٠ .A;-*9?OZ8Xn6f>H]yPsz-%B2iM 30 +f {oD &kBPeD=b5Nlh邕#OK$5JaYcdt/5 }ּA@XDUqz1Bt>i|Hr\r$>W5P4ٰ>ݓ0( >Kvm-0LI=S7lD^$)~1@gaa4od9GPǦ90ĆQZu]fy A٩]p(υk$ux苩t0&扫HnlⲠ*ұdύ<9"`$3xeQ2/d`CG3S{x SJHx˄䩔EQ=zg*gߪ\sªú}F\3rK\{8(H@3(E/O5<1 b|`Bـκ%nC$Tг]+,f-RfhJ.{zdu~#%'jj=ny)ub'hf*Kե dr/ 2{- 6?lwS}(eh}Ci(g HWU S3HY]4tg0 -|Q6>XGyaZ/ޕO06kj -2:= ({B]a3,#Fg',0:*'~{U6hR"\(6y\GUT5kйu)F/ Uɿ +, En6֜ElH%1zH@:U7"3^sd v)Kh˵?QQfa$kWIvF>EJN)rdlc&)J߭{/H>1Qc˟=`Q֫6$D;aZ/>h],⏠<5zWmNxγ7d%LH{gB!P8ؿ2mhKť陳$RtS\A6hqZ{S~p^pҧHIG23V:Lc`VvHLl,Z(2Xqzgih]]\>Jx꺷eGl0.uOِ밺Uq%_1uIO~*q6KOQR 7zqɔaE-v|w<%][/ BA]|(;c|\[rT,J!5EP|Y$dEj(fB%I4sKbӿ˶4/[gJ(r\*J=%yK-ς|aD5=, p G&GX\Q_S9]ՀO$hf9i?d;3;[ EzpW.{YAՂF/;w*m0cW?)3S)YBj_Cs V.} ]P 0@uN%^lp5dV d>͒͞J^>}˘@#*IZ˗ N^lda-P1a^̛trŧ=aW=[n.`3ЭYeYQ.}zA%~_Z21YeҜ$)/L /۠Wf4fgP/5NnمdIc+?֡V(y|>nkymv΁2T}F kw;#)b 3 CH5#'峊 bnB2G5UAEqJkI LI/퍵cB8iiך AGU;VfC o~u=LcQ`Als*uU͜-UJ?33U2֮@M)&D ]MgGHB=LYrs:F lSEE vlAs(h QVej9/ wZM̵ghW $6)dVm1gv-H}cH5 WMcqVDza|#EҴ9UsűP܁IdO}w`0,|<ŒZlQ pCPM{oXtB66Yç= xݾEJ& %T?`R: ]L' s+ RF"de¥o7Ȱ?t3$X"uHwJG jȏv'L;nN!K8'اx@A*y~[HN EqI;z5ދ=4[&!ˈl9XSZ*I@Un-f|]cMTmwNA$ viASfAR@ޮeȢt`EaiI.$0lH ^ -Eu}eE-v薩vV*I䍆~!&ax F bn ĞLU\=XQUk-)hkƈ} hǂ/dYpjYYWZg&6cW0eLMxLOG_™8c-KvF$4yIBXju86ViNS'| BX]m 65 Ww* O-ߓouxvZXNgGE ilm٪D6L+¢6"MF DUы'ӟ.+:$߇硄F)h]&F#T՞䟹J5+KkkCi=ELsq"#g!C"<.]wWix-3񠼧y]_^8 (CFR6U!bNGSc+ޝg@y'E7RRǣvbϮt+EiKX%9cbqIKqLtT 25\ل bD B%N"T.YGY4ф rZ&l}wt>cPN)@YSi(A -U(T"Tň!:UϟӃ6AVde┬,o,*(fV6Mq':#e_@*hѓ\ 3l;#e^Y(ˌ̅Iz~ 1+?X [@CJށ@R7 R֬Sy ,sG6!dI >̗A9J£٬|њL8xD8tCg);Ɏ{:j֐~Te̬wxM+TKH.smxn'lŊ/Զ2PE vh &I{ 8GCؼm7cIgoᅆC|wm[>=[ۄYR$M0>$AۮJ[A!gyALmd|ʔU%`ajYW|>scd*T3W25RZUKIVbfKS^#cNINJ{+dɏާă R.^o}|c%lh IDATB(*9pݥ[8R dYjX%m9(~&܉ rl9c:LFMjrU{ǨzR.V& ^q.K K;kQ|^f!em<-c,y t+%}i29t'Rv9P:!Td GGk9R4IsgzsJ],eS|s KNq8sO*Z֚qu}C|~xA A'}3;y5K"")r44Ksч$y믆2-BwdSe A ĸ}Qy]:sh+=[Za8H>MrY*40#Lj1b׈IYy.ERO ?\%DyWI36= TƾaH޽PLVhtFpݕ:ͣwlnH gR,[cxf2X-zu=íJƟ6_Hcma5dgƣe4sǹO^/u# f C*'(kvΫ籰sM^Ɩ,(Jul{'o/g7$x4WZ a )۳$=8A4OЕ!ʌW$Z[EҒ*U֮_ `-%l9=Inƫ;Ua72|ꕆp0ge}v#g(!fYL I +R[$ (e #ޑ.bOќ2p=%5R4w <Z|d-̔3v[mDsw4ƗkHF YUIdOH sRkAJ7R1$)YpJ"L_kP\k02E“f5K("  NsQ!?fo_sϙ0%HWU/(Go\㯠|Kw=@/Җ`jK#}ٔet/$ -|#TD h^Hp0͎ï}AEwuXp=r͈]3S|#;ܝU*tBy!\%05J1UQ,, =lak&< 5 hʻ 3u):%KU#H5o9H⧚1Q#yhP}g ֫5[;oilxC|)TYc=j#7R1!,+<\g$Vf[ O-xP1@a\rE:WVa6cL9}w_nZx^U?d*UK7SyI%H0D7"b+JԄ_ݫ:mޭ3c"r#oJ}b^r]߅3%F;U6Tei@MMMn4<% e:< ydA h.y+ƮԃfkÞm0>?eY_d+ʛzxgtēN!e]宍2v&M7sw2L$r+3ی#+LA3̱F3]a}{KJ}ʀ974a)R*7On -[3T~OZZ\ֻϥhR|e^9oX/9 pnߺ;6*@o$3#gy9{NZ Vdz$o y<,r` }R¶YD l5Wޤj&˥wrQݼf HlYԤa55%>p@AV3[*6Wg;r3\ޓ T >R#T(pv>TnPzX.Ѓn0>Ug%`V69J5}j-Yj~5+MR}`8#O Oci=?0 *WX*Qؽ3ϞBDXkPKg-K-ݑfaƏ{BQs1m""{JlU߀רRtX{|'^$=Jo*]}rQ*}+Z|T؜ppW wjv>@\nbI2]m?g"?RKb]Im3ՄE@>zqq^wWY뗗v>onyۋ~IʼF{w ic%h./~c= ^ɼƁ3j\t ZvMZ}U%4MH]lϹ$6$o"DvbBRd7N k'|$6Ւ&wީ m@̼+ W޻ô2Ld ~I ]PRGzC{s~=_ X"r)Œ̒hvX֔皌B Fk@;L>" s+Ҷ UG- FYir^c3Ό:漬 6K/\=ΘY&Tp-X`J;aaMb,΄quYAϵi;a{&+jQOL|0ܯp ꬗ ,?# 1 `.4sɂܖjlda>8#OuD3p_@$`|&QUܗT8}nyj;~98sHǠ`2"n $QgǒJ "ya$\5nr\lr-Ba| Fe HdѲeY6C-Ɲ=yV]&K1㖗-K*D/Y\%>q`s|C'LxF2qk,P[06j 3DLXf6O?+,"?{gՕ'M$BWY`nUTVIom.>'U 㤖y/ @o,I;V4HZ "?ul鼰<@̼%sQ/bT2Sqhz.=ˌl- 9OJ|>ă-Ap;H ZI,N 2bS AGZu]E9]̐lSK}\qg )*B>0%zw\ΩA /gSB< ayƟL*A*,%rqIU-e#&hup [Myۛʡd>gSAJk@UXHvfמZéMŃz?9&Оi ݣ`Ѿ(ĻG|ylmh_I?L@ x =x3ywD/5Aڐ(l D̑ I@{QqyLZ"LN6cDk\~?L"LAfy͵\pe!%ajsUoBŦ\J_K-TI@̤}*S PpLX.0+6o̐%S>^.%9e]]{.׃{<|{`evʔ4@Β`:irI*]rBFVW}Pd)ɳrmj'Pp:M*}=.ڼ|9Ʈa[Tg)?RY lfE HuFK_Kठ) YaC,qGY鬺[ 鈋e8yh@LkX@2()?w< 2  BVXr Ӏ&CCmB6 0eo.yEJIu9>yDtnp/[9GvH/J+Ȩ`¶/Dwٜ'9)dέX!;\Sa f8lYYvzȇY<&ݗt8;:m13B^cYaKsmNjښc*蹘$NU)(@fF9u7Qt+lIZ#FWw^8˭%9#g؝h>^sj3Rwsr]ʝU>Lgqz 60hfwnE,< = q>HY=w}Ryq("Z{ ,tL-9N*4J]]u#h]E6u< fioOgNEELM6.F-QMJ['DTyϘBhw:[bܫu1I9`<ж RZ_ ^ҋ5))x7TémSYz%|<78իڴb؄f]%[H0I~~r4n-\mbg1jJpn& dhb",}CAwJyx д*RyU)//IGSqdv$IM]3?}5kMw#.p\@cG-d%Y}r)<ڽ f*N v?_ |dT 79j$,k 3p!˰`eŞgp҇h,K Cupnɭ>Bet'w :5YZ0&0A @Xj DNj2BK5j&ϓ(~Fp4Xp]=Z^_FJfA)7d թЅ!uDy Uh!U U5Ie'JIy?q|dGVjX'ODhm;=F_b808`*arB%*WP%( 2x Ò__`!d$=M[ZgX>.<гe cIS<%F (,vQvt Zp _8*ӋV=!p 0+˽ %x׹ş!)J/Lھ~^~c3lK3[G.yrwpP`{wPAC EjF3y#<˲MeVp#li 'RZ!hBÔUi[&Ygqrѽ蔌<<  P9 p' z/}#AY.a,LlsKKU} mEWHC;asw4l+ 9mz.rI)4,ŷwo|%?a}x GU]k1__~xm|,͜ɁԬGP-!"̂M+Q]۞d"v?,찝;Ng T8iWGB7|cK;itCPiq`Pa+?2MfiC%-93$"Ved1J.0~u7ABѫL@4_z ̲uNS:]4&eI#\ Όj]u}IG1BNɯ: VM4S0V It3SUH{$%5iJ"q!wn&@M֘걼G?xI6ͩ|?\)}7@=6]Fu2╡;·D#)jcl 3xSOxy~B]YX;s%Q=Nuo2~-o!v['QY SqDf>RU(`DGd߿4]ƺ&2+xB[x[ K,g$1p _/Xu.a,c/XILKZN`vњy9/-Zx[OORW7JX!ȜN1ێ6G|&ׄS'K:=/jn+^AzIH3fĩsRAFʁYw6f\֭=ЌFBD4uղxf iz|o37_">uX'#o+P%f媲\dї?"ψ#()QBOm.vZ4kcȪa?&$`5+N&4Kbj*`w6*Ȭ|6H񬻿|/zưJP<9WM4,dk ?9k`g+^9cr!wH;i(XXwR)j;dNAY+픥T?85;U IDz=7ħ_nj40 Aʕ%xi x_ k%j_@ϔ5TYl$Q+f Z]/%2Ee,9TNqG ]n >>䩕 PjvqbO?Jh!{յN PcN:8}:)B* ܇u2 D<504uCXLH< fKe69f08tAq%%ie3fo+XAuA+g'y(Cb11:,{EASOsvXh\~m܌4O|.&)}EvÓd{,fT >*',sƺ&" 9#φIsD@9K9I6;X6{5fzf&niK3Ӆ|:&2se)<e٥}(L5nEzb3#w[5D4g+Wš %a׾W׼brxK.c- *g+yHbIْxm vZ7 ^Āz#GotCxTaβpv$O14e)j*g Zc= LJ̠(a"UbOd';ϙ @cTMO±n\NOZ"G6n!Z(V!@y緈O_?e9pW&uɫăg1k J#k>τe?rR5: /,R+X.jVnnYq,5z$}fHs,I Y܉Q+ŒjRWy#IIϵ%p]kqZa:Z:A|@4?[ CKn:'nvx)HWOM?b\f b>g|ġbdv4#!-RcI4+,Ӭ!fF"~K:cҗe!kvC Eܑ;Zҷ+L`h\`GR :;g!Ö́-6:娅Ff{/*Ŗϝ. rː߹>4x&S h%SL\:~ oYC94 9ˣ,#ۮa$NIwECl:'qXJCʓq0J`%Cl~҂˄{C(nNiX,V ФJ dkD!v}I7գV]5(ۋU ի`UɩeKBj;5*%DZl&vo`02|黓 <<|+Ux򸞛qq̥^8vQ78=V7Y=I8i @䟳;Q s"T5c ȉ<8bgjו~`[j݂iz(~fP I2e,ixM5K1¬xG_{U=TVfh_[AF`"==G|~o!~9njM*ЊѪ6(rG_" ~[09K&3P5j2OYBCÓU+^zaWC9ӻ/ 捷{I*+ WEKR:) $9v;4wPY9$.KuIsLbU?jH֯Z@VX|'דJ:跏-*Bl N l+,N*)| sJOh߻1U~>xk;a0 0i'y% z߄ıܝ}gV-LlPO6Σp"ZȒ efW5i0ajY^ϦzgV"2"5<R8 x9UZ%ʴhNN8$hoAIKoT%%Üp&^.8G});.QĘ A=N50NAlǬ4І}2d)6<r0:8YM* B!y p @|&WQ] ($?[~ UƥZ*Y[K4EĻxTp+LlYh>lޙHen4bع@ YjGʐ! ݝӞhMuĈi1 N9mMnȢvͨM+\WhOuR`Y<"CÉy O|ft =?|\JI]Yd7RecAs|ЧdV[/q6f R?m)qEpTQ!LriA G뾾g_"^?q.A){&I,9PȬ iΒK]! TUfs7{ybH=}z4jP гg>lͿH<w]ְ p35p_<YȫՂ<'x"4ɓ#Vw'Kм|uk<WC&3GaSf<]TˬXZdx۾;M&SO'Hm43CA?\\7F@ L5 C} x(NSAgk79MP"i((ey voM9SkAct~xHVN8`q|I'3&tTh`jasYu\H#`u>Y3!Փ'2˰4ǹ׏ހ%&f=z%oG;sq`&` -.vV;=rRʘOh0&KG5Z#Sx_\lZ-ú j_lLK Y֚Y CfhfefQJ#=l2k@ e}kιNf$l LUUd cKupVhzLVsCTd[ %{#? h}%"tx.̮\==2( ud ѮoF {Di2 f˥C${UB'´5tAIg^*ViYi#ҤƟQ="{(4JJߨŒUp~셂d?}cU`sH($ XC;1|ܵ2ڃ3N HzH ~{~~'.J0U`0C<~[2VlmZ[*,k2SwuWG \# t<0ycVL*nTuj Uʼnn %62HǁRE)K/ᨯC43<0~{G~^cP4 4|{қpD!:J4̂|I.o„i@MH@m.+k '3@(+ca\#L5IV}a&b5eFS7s\y' +ڴSgu4ߛu |)mbs%4]nab~P7x):\᝛J&*D/ ™+:P1 <}6OϮ]1 `f'Id61:Qp i1^1VkJr&$ Bò3cZ(C4=GPڵT5Esʷ.>wCWo&h0+Zh>$qC*h~1_5a i q1N2ykqtuZd2IVmΔ;;~RA{ Tߦ]ē`&nr iE۰EoѤ&I0Y_{fYEddj7FYƈv*Ve@TKV?4Tgfm]gr(?StVXf ۃ-v#zZ:zC:Ny\r̦> w` U?Lrj,asw/^$: ܷ4N8]{$ɘAg^Lܶik Q-G~{%Ͽ;q`n~N2N=Q'CRz:hM#nv-A|V|}ծ,Դ2ٍ]D0d,3j\@ %3Gk+*c.! MšT4Sy*kVfXO3:br5eD{\h_{3͛&ZrbwcQx#8X'3"ٌW8ݑX5c&T!żH :=x3"p9#u ,&H9-g1VN:e51\n3tC2`6qN7 #93t%`qO|#׾""l8-5; `$4IuhGO8@57ce&&ͦGt\F3o{l]8qM ,+JKEO:h0K4C|gO8C3ItH?oSHPmwjb.eɄed0L\zҍ]+j~5F#Ҳ3<{*Mi @KK"?%6aB u~~k p .zF䚸DNF)PLlgaqM1Xyhl4w3= o _/Dq;W6oAt=43d/94t?|NQQ K&Ca7;\:hM*i  d09{צfx0]z;I i<B,ǚ:?? @ Vx5$8v.%sČ!X&^|.6?Ɣb`)&F۫7i%W\#F,bw2/SV#~9ݏsz?7VA%I删$>_DEnaĮDlSMD[wg%~3uuW39dX-2>'V#' %0S ֒%LJҗ16:MQvN` +ҦNpX]PlVG4MQJj)2؉{F=4wK&iRoFDT#c4?(*l7Ip1tl3Aed0RY3H Z<p x~M;h+jjLY3{ 4q6@]vx(uh,@͡4Cu!%Zx(0{]`X.2[S)?M4 `0_H܂r$KSotuX78ĝ~&h)k`f}]?^<a'Q ~Ta0NW 8.pDP@aJ QԻhc v3'V٤5g¹ȸg%NFT5&"4 q1xT쪞PrΧ Fbތ X<\)l TMJJO=FssV #R&88踺:Mܿ O_˽B}$f$6}m戠P0CS=!k~+?*VΟ6݌DN$LTgW=1vBZ j ɂ3m7Od.CaX.˙E $fݯN.iP 6|:aىX 9Zހ7 IDAT7qdMu. پ^?U>30۬b.7QNIMa)QHN4Y7E.*$RuPreoqǛc A$K߱ .2w}qdL&9e;z9֑M7B)p=hb$(tlx+DDs9z])8;(8΀B&pKc24.'«:f\맑?q2g[Rcȃ֤0N4IY$x9Y:C㗼ّLǨ2@ǐ dC5~-hA3$=ӛrFqvc `., ׂ_5>(Ph1OZUearhƱeX&Dр-COtΙn)rNqO"',@s ,dh  hlbhz?w@׾'%g{Ud&(4u սeBp2DŜnn|NK1*}@X6q1vQ<ٵ}{ɔ0щiR)ކ[f5yXrP2[%p?hK5'fqK\ئ.r(.|FYe #ΓǁYFdZ"R8mDd#@CN"wrR]$eΙhVW(X~q NGݳuM# h=37颏`aؾVܿf&承Sm:[U*;8 a_Dncl[tw:]6t$v/4d}(3ϬbM {5N~ #w#0$7UWaИZdV2 fJLs4(q90t ,Br&ɒm\j9w|,슛!U`fO"0aU1Cr4~L ^H>.P+]:ޠYBIc*Za=1|Y \V t>݀`+V/o/ח᭖ ,c)|%0}İNg^&;9deP煸~n {2E S lt}A,W V} ױA*'(~Ȗ\ՠ;l;gQmoi5v/afMn6պҾOI&hWf c46-S\E 0W隋o#ZcZ"J!Sr&2Q zXs8M݌mJ,>nJc#N,͡8iWp,ݰ:7%P;NNW/9aUクLfl}0Hy`)?24HSY`}d:Hy+UO bĨ,=y!#>֗}`T`OhEݑ@:9]q"o҉l[8 4ܢfaНJy`-Acz !|)PUO(bt^LB]ZZ?h~0ULZ WihAIi7 lZ|dWv. XT 2h;14!|Mxf'ň5t;غkVgTFohNl}X 'eMS36(txߦuL()çS.eb)hSemb2g!Q]Fd MR PfA?Oi,O7ygfXz::rn{m-m BL mUy=KÕr>݄ q) bkY=K!.ES/ __o/u5oD$HugzD@H+Pd6OVnS2 |ǥ?X? XXJ#tX8DV}j-{oM_Mhĸu'- r('J~F>fe/I/z5~[3.Ά==jU. ;MiT@G!qgwj-'f L?VGǍ&>&yFȸ1d(Rc8'&(vhכ[Sr'hdָޮ{c,>bnf65YY<]l4f5?)4APfL9Y {Bq<-T3ٛR!SOdIv3aEq8}8*1@5M^$DA#ˌ87 IN\?{q }-铓=Nygz6g(^AĠ#iRya hh gP̭`:"wݡ^\-?D9bCՈ( ?_Uwu~g1 Vl59Wl dl#Rh>GVg8p;Y,vތRxȆh4._gPdtu`+_M}-^(`g5M@;1cOnɝYgw~79lhoS SE<uLoyZ1,/G`8oǛ SFH`eF܄FQlf"etW#ķ;\I`4d(7 Z:;ks1DS&N ̧2^iy:cD*68v 3CХLMi3/sV3#F4EƲ lǶs Nȶ{& 1BS:mgBL9@%(At?RW9Q?8?k{}@yٖ f·Yhdf1'8`̲$__:w{{\lOdəݺ I- H8$ALux6=m <_ꅥUm#~<^+~{/my #\KNSj0}J!WTzUÖm_pH / x#/v<FN<'H3'y6 hct7*Cc7VqL`쩶ᅿWP=<Ə[nIZr \js̭@VG0q 4"!=ʫ!gҊj 4KQj uN}O3̧ͷ\'& xmlfaid ;r>э!)e$VczByƈ`0rt,RL*&e G:pEdZLdO~'2bPuSg+䩬K Ji$O>+,45O糟n6ӈ½octڳHS NeI J`;Krv#2cJkk^\{`3>Ơq?[*j:3Ty̱lpO_nѿ2bG,i(PmRJӏ?]7tc3Æe |Mqs] Nx"|}6B|ܗⓄcO * 3e aDW+p|FfVǃׂ5&˶0Cx^+kۧ[+&<}x%D5b,77ׯ_!CDqA}1&[0=ddҞwCϯ4f{ZҳFʖ}= _fzt`bжc㣪p햍93$JrvZe30乇0|3$dKStzh0-g g.t_<]qRpЕ@;y6 ѐGWav,XQaL0LW膳DC 1 |Y9KLfDsdE^CvVN?Dݧ0qY% :ӜDZ ׀CI D K:9>O,!V-9"ۦ&Q8(D8VkGWyp+&4sjU7:+("rGiTF', rP}]zɞ80MuFukJ{tm x =l/׳A꙯H,z L<Ŝܝ l~k[c#F<}&kݩ&v{YnF.;_&+pF5,Ig٣b0BBz"CtJ˿_A}{{-p`#׳z݂.%giϩ(iDa ,͐|;4UQ?"ܐюO2(P<h1gFq?;kʗh0Lg]+/o5/82M~> "~_~>;\wbC>mk߈__*lv!ϳ& :@MoڍrQLFdelb3q:#Kbq)@=qӤa= rҴ{qLJx/B;E9"?I7»")6ta hNawƁ.v' 7p3J|+$DQP#5 >|r CJyňU]'`Mc{Qge-!`Is4@o#2!L`Y2cޮ0vl0n~?ݜE}a:rStFɚ;KsPm|TtfעiyP JLC5qQ%m]{W`k5IAN s6Lit2k\iX4V3;'+L)Z# i\f&l/Ɂ 8YFY~9i0䋞)PɄ|;if9p1}06aYyyO`fSR?@2ٽ*H?W|KI&q_ ͠o@lJI5*D]z rҴU;YǤ?BB`he@kE-1.3c=F !N!,\YD/Q_Kәɺ<~~~N|{i{ q@U UaZC1=;p,,M 6VJ ~_W|bamօbMq鐆=Il4 =? 1/? 0.1&;Rcĸ"V@_Yp+A12FJBUH$UVSx(5ل("q֬8D[ N\3*YirFz^GJ,qD\)!5${ϓA}sԗ9 |nd/SYS:0M.ك7)6V3L\4 'cAӀwxm@$jfoũ LɞHtӤ0&n?G1)N7vjhwjM1>%QR׊9*u<5{<}THȢ޺'@0)e@2g)!4E'\LULFOA% wRߕűjNr A${ԵtO#ll5SZ=))XO5GP&ƽP\#'<{2 g6M>39P^v3aOIX$oqOI>#~>ȼ( IDATx֪՝GcQe,\qY, rłS[j5r!\O@. JP(u!XJӯ7{ۀhI<]?7M.¥ͦ;;QҌ~XM*?ڄj # Scx`־< q f@Kr]KH`ЙZ, lp&\wa{ 3i-kia ]BD|Gdfl>TUx?^ҽWzmӺ6LhIMx}ko·7kQdj :=B@箷H|9(]2dp~QT sy4d `p cxX)ZL-m1-9d`^kZjp3)}~Gi47i*aZ KM hɐHdCl,4hQ@P!&|7.'_9cDrSbm] $HfI]:_q|V˖5 ~XnLUas 3SpE-HMq9G)gsB3)}uldOD] s,u 05AҴ8 80*ty>Lgti(vC a„BMAϔgH.`4;hR2](1olO4%;b㑘 NfpZq*{2;!{@Zˌ;%:{gdLc_XaKgsBG"2Ұ&+_f}֐K G^ #$GM$2`u 7CkA^P+.`QTW6ðxsNU rD4cWwGf'ɡ "B\>tj_[>}g&ܖ&Ȃ=HsW pZTxmhVFjr5x;-ۭ8aG?GW4#mkl)?^Р^Mi*ϼNH'#Ug3<̆V26"`ZF0@1_ .53m Y̧&/胤 9W|JFN3{mJr8HrF_iR@#=QytJn(0L~Rt'%c Cl g w1͢ '),O\B~2]o%RQEJ&r8zs:QB %zHl6Dny3P&s1iwBI[CNi; dIuI4ҾلF$z:k$ںQ,$#9S"OQ(TIZжZr̓LC@G&5CƵS2a4d1h}j^㦈8(O9kn>Z^(唥1Ō$xb'4[\h a=:)AN*`:g`tɺ);` 'e\m~be=?aB!!aDg,ӱ%δ^ʠ@tzCY(,X6xnviϣ9kd?W[jb+K֘Uo[lv&7Spp.e>  ,fwavл*~e[, c^^ oq;)yh+tN8+ dYE~@ߘh>SmX=!p[/&*lb`n {$ƳIV9z7假\Iy~Wl@yk뼘j`T4bb&3>ST*V^TacLW$S|;7= p,K[ e$biK0 g'bk _ LVs[Rvj+%cDmvf"^BfS@)6s-WSp$ïlj4r݈;yN)Y;=5clB r |\,pF0hIHIL!S(ϔ5̅'b*f_ <_eYF iމ#wM׹ m7?Q$穮)e>0X.snmd4\xANr0uwF =(W&ޥT rLj "+蚣a8KBO|d,ٷl#qY  JC-Ӎ!Jx@°֥mNXibc2NOA<*BL,X1c}o>KVHSM!)&7SgP-}&>4IW@+厕+4w8fe$ihUʹ^&MG[+p_ۿ׵Ш ^7bۀJ|ϋp[*Vj?FriYpyxal{\3x( 5b긻 {Yˍx|. 5> {{.ܩ䪃VqY=`0sAxT|=:^GZ۾^MԭxH 8'x&3`ahSuh!!d~kcB}G{]ԄGjblc2z!X0 o. R` &swяR5{ݖƾxlftVig(=&YũEX'|FO1 g̈́ FA`(d>υ`Fg2詔u_Gg #2qM~ '!씓<0G!w@LBbșOӂ*҃| fO,&vO5fO`;~7^NۜOqËO' W<4Csc_UM5sqVhD(cħUs5_"V_Wb5aݐ/=xyҪ1$To$$13!ILITL#U@KI%b͓$b%p-m})eנ/ehv}%`A2_=RѲe6s3σ_[\ xa\q+K}Tsntn'Uץýg3 <_ ,Ü` ^(((+\4F!](͢r_{e!;q}{k2!2 +" Q֦WT)?R&C{ {~3aMC0>Kvw?0Ii+}Ӕ5`p>J -A=EIAoBԤ7gɏp10O04X H7rI!bw2|&wl D&xF)!# 48;]&PBdz:uR:^ 6:B) Sk3wcY,_tp^@9i\b;3$#`)-E1%)#<thAvz̲%jr&lhH8a6a!XQ)i#Z狞Ri_Z52cd l %?8 Y崤ɵbf0@}9c`ˏbjԎT49<;wE lM D!^3OwF4L*{Nd R2a|~&[fX'N@"Md].?U::"{pR3<NszBt*KPoL (j~0tR?NugT@ wP@{f=t,\Jk|v jU;Em*P Exyk_3"|_)Po =V‡ /@&؏)bmfg珧ɽ.G|*.~-LB0td(:_Nc)e3|C'?""ڰOw*t?CNԿ6NJ*UsrPCw3>⢆;2D) JaaNN&3A!+yƤ6h-4h!͔f dLs$WwqVNJ2-s,DCdսNY0S-HS (p;xw!/Z'}bn,üdf9y {{O3}֎7k?Iށp5Tҹ #౴۳x~]M =kФ/v< 3 8$1gX\7O򄩹R7淋{_Ё>'[6x|HOAą+ujk?vmeNB~R(EQ֐PU{BRlt~P_~"~zjfrP}}15ʅXV:#8.Xw`]=z'.rU7 ;˲GU"4 >u=Qג7Tm-v)nk݉&lo*nЍc@;(~T涴Ԇ^j(WOFt@ Ħzqkiдp:ult.sTS3hX)^.s G\2{'LaSXz+)7)ZkY>끌MK- &yJ69.A>jSfn(Ywwf} ],xr_Ѧ*f[O ,9F%cqd|mC#0C.Exəgw ΄=>Wf^ 4;$2r5> F=bݢ k af^ `r^./7q+tA`' M# iu׬dq2sw3υ3,5%}jd9BlfmNuhjyFrOLLef}.8'T@YS^[^R4UIb]4캴;`Y{0;Zl];E}O_~Ol[ton"ojqߕLW˝G~/חFf lk3YE,20ׇ<@+j>ùz#ky)k="X .Mrr%͛ڑ>}dc"6*cRp%P{_}^E"?w]&rE,.l 1*mi~ UdC(dZ[txvĬ 郦=>5<We%7ݿΌg}B?^}s|HirӤBǹ& /lc},Gg #uz,Q3f.;36mk@3De $͊lYe9ۨ ){0tTU;IJ3T(-)~DG!h.!f7̦MQz_T,/9h:+,3`?L LxIo&O<)382km!OM3LdsC,HGm1ճɰZ&mE-#dwP벽spXwUYp,|P1=#2spbLf \l2'w i%|iKl3p1o lG@*ég$hE?f' 'ɉ/h8cE|.I)hd;?Ιt"1{>w%Y/y&8CځffzJ>)10`LQܲxggFrbx| QUDSqԝof.'?| MX MyV2co{AIa] \~oJfp6uW\^bJ1'䵽1QP0m>^ p);%jYfJՍFC#G!j{?Gvv-Fxo&ra-Jn;kWNHwFjOW?=O 8uWS7VM@\ ,EO% Lth&`%P*;Q;W-r:%?٦Xvڨ5eize8k>JUށ ±t/vƀf6'Vpty F(*vB/`>2't0)V86[Mc9XN%ێV0(qp409]00qvj1uX /zLZù'^S"Fw5s6z^LԘ7vD uD,qTs\,Ak 8?T4c@N&f?4?vFSccrAshʥp'gqTٟq51L\{ ˜C4}(zK1|okdqhigK7O 3Yxo1@2&rS(z~Qڢ\&k!>_ 3˳˯?g3q`Х3ZE~sd(i'~;YS2.n{܇!xp^tF zx%Z+r ɏ;z^ 2Oz=1գA liȓk5=da#<QM8LW23\݅ɩ׾8G&%a2"wWqfcW:Pç|nV~9]y)sa Py)K_aFHFǰWPݕqP%C\ dDh\ؙar| #ʳSv*0 $tsK(EXF<ܻmO㢭P+N8iS6mmVuJoO¿L C{lM@Q823 Y˳\bS[e~W߿ |<RIs/^vZR-_ՀQ*p+&|4s^bw5'JNr6΍vF8 V yb]oXϲVP#V=&]?y;txg^;qx=E. 69 ]x[8k=d9XB+(k6T`/Nc_/x_nKi*Uu-*LEi Bp77$6YO+֏GK`5?uE9M;o[; Hukֵ_>_'V|&`; I : qO\qy]׶fBəK?1ge@[d,K팰9X ;3=ڢ6uď<0 /Ka|@C`HrP؊I,O΃Ϩ }me+DhW&)RHYS 6Ʉn~aNzC16!G~K۬LO|%G ]׮qưMص~$ 3'r#;HN f:A:t3ҋ>#i٩@4p` Ky$DM Z 0Z];ьqup=})o#S; Ҵ}DDm u\ƵY'N3+yoFF}۩t;`=w cR'E ݙc)͟ΌXHz< o;^0{%8@uY̠B'^W@BS]}FwT,Y8N tr{X9 .` Y`óilEgbipe<3rBYtیԙmRz][Zj5"(&6qFGfv)-|Z~rKsW^7TKKm%˗_+} D(iEYд?ϲOz}| .~#^48]XÉc)U&[Er#>6 5&D7Ek&ԕ9 ޏ'UosgyudzZx-4tk$z?&҃}Zp)X? *KC13 ׾45x:)O3) 6M}WRzwNᙕ?* lIE'r6e0#8&+qGRC`!)["pYipV{sd\cm .J4d6q7r ]~}IUCmiYL~&4)x¥`^=MCB$3JHCsN㦨;а9MFIм骉'ұ8FuFm^SbD!4簬)M(bo)YAA#k|\bg ikc0inbN/#o|9;&4dœ=6q%i;ӈQ0Meۈ>̀8S&C!ߜuRXVEMڰ?Ov`7X38Ɖ@E.*ǫm]7kucTmtֵM^7~e{&֨0F;>07]W~9 kg} =~TG;[;fƨF_F k5<-q_g٧&r,5wG9*Rp+b[kz쟧늵\vf[`u@Ѳ>O_'ᢂ1Z w#44k<ۈUf9bfS U(7T# ŗȒ$[b#HyIRp|WŮi1!C~@'ڽ=UiP?F#ՋD$P$Ų!ux4W>`j9o!'GKkH$3u֊|UGt1H&]R1 #X~>y,qDuqVOףaREIKYeJ:1&\>,:T55 ' নf`*TDo4bl29o2KR FXb "ڲ2#q1e/b#kH??x[mEHy'{;:Ӕ<8tU.B3)"ߚ>7a2oPr qے>8~cȽT+I IVuRy)ć+*ܗT Z>Ll]=Ml*0Ve3tgo٧PI*.!K!W B\ +M$K#13 Ґ:Нn!g\={myuեKBǿ*|}YZja߀ ɶȔ3jy֗jl`ԅUIP;lU,ɡoӊXpDKK |vq~Ԩ Lv٩T?gQ\ȋU7el, h~=N)Nkk=jR,)ӞB+)=hs)^S\t<OmGΙXA +=bwmV.@no`ozaFWtg˗]:J>YZ;_0_@6xP0p3άg]g ^x1z0MږEjY";ҀCN]ɐ3C9ڡQ(-d'|^T璗,93"`X hAgz"'X?β8ė終Z% j ;ѷ$!` Iz~(" v #bs-V>sm b~8.IWC;^5voײm-&gY!\ n B[*˒xE* _Fu*Y}fd=F` ʠi L|\6-3XrY$xZႶS -IL=oOY 턆/AYA^$YsU+7>siXZ~e@o,gFk_U{9gGMR֬v. oa =w2PJ&K L޿fu X3qDPBp.! k :a~öO~1t=)k 5J)B֝9#kșaNqJ眉4IMFEu'SpmP /-\U1|`%<+Sl) K YTW,`ܰGP~ND_rċ6G-3X=`.gf16Z%)ssl]}QRT]Ց]C)Shwp9* mIбo|hqKXh#vmH8TX*'(O[Ajd5*>uZ*7 LJWTMޗg[.x+H |< `N|{ B_Z'2eS[k j"NXA(j'|_P|7 _~xS\3aF綰{PEQڀ^Y$398`%+ӯw g$LUCfޜ1BS_$rc6TYxh9PD*'{"ly] EF՞[)zp_ x-z`ZFtRU$_64J%1BԘR 7O~"8ULBÒdC/:5/.k^ġt!(BP gGe(|b`g<\*1L^#^3,1 Nͺ^Wԫ{mV_|UfZ]kJ?k¼j r)&l۽}ZVd[X;\V? ojυF;q#^X\܌GVߋV!LEӢH\ lsԯ}N-iW2d59cF]p˭9KgIJzر\re5pImiRCbnL?fE#\s ˵j3`尉2ܦQlLBw6% jU,YhZ$R(@)-4Zb@1GmGu9 U IDAT݉I+dJ,dHަVxC@-WeNTCvBL;OPmR=;4ѐ%LAw, ه11=? 1!jkv6 ,= _H='// s^|{S EK"\$pVzp{g޹.R+甂Vd<|`W"e9fP-psۀ'e_># 6HW X^^=xiC$jN'rYa>&0 `O)k||e+wQ ݩ3w#,ۂڿE[ߕ3d??<1eAaQ!Wf :FYj^ tS؟ϵ ģ3wW;\F}𹎌&ގ.gV5 Nn6 Q4T.+y_>x,xg-Xlv#nW̧x)&p5Ѵ<몼+w`ſ]z2qjGCcPV5 H!ōD:4e#^0kusʀ ^v.|ö152r8F!IJS lVLeG35 7QOrrذ[Tqj.b @)P+O GuЕ"\7v!CuF1=|4[c7d<#KDթX{.[=k]n[wPC`'toz'6 n&V^8T<[ᮗܐj7DE) +hIRʖYrIFy1t :b¿/ޗۛ@#_\;ɬ5X)\r贘l ٧S](uHwrq^Q-pҰxAϏKGe!p{.5\,{@d & uꚤҙAR mG @ki\7v#EܦW2t^ ~xk9 Ek?_]~L{@zda(} [5s،ԕ$ omz{/?}#?C1@5W[cTu6>올/ 7 RV |Jן_FYTܘ@rNŃ]/9Py7p559f9 k??'ۗO&PPNXbΆT[W.R9+ޯ?ၿRp|g1[5"n?UyыDr[JK:ˮU+a뿪.vVZ>DF /b'~HW?dFN0eT$eDm-ך{*3kXʸV瞊dg)`'C~V굵 4ȆRJϫYI |:8Ʉz:2k3XjmݢB)/=[LjcA)ƀ&W$%e}imu oYI6dֵ :B\h>gBCzW-oBkG;V Ӕ!p+-q>?f m4`l-H"\yԲ&Ȕn(oI cade{tKw/^S Y+"+u?2c%{O$6+6̦͍=Qhv_sS&2\gLcޯiL/eX K.kEUXe)Z(y9}ݟ/S.!/^G-psYzHNK3>w*0Fw|}y} VXTYVc(c KV3TCĘ >U`4/ QJsDmw dv$.^q)ᯈ H2xoأtHѐB_҉80'UGv[HHyVl6Pp0jxdRJy- E[ ji,tv!u^raHTRR0GS -%LgIRw{,ײ3z^wbۦW!4Gz qchgS<Z+b+)]@0Nήeg1f_IﬖVP\Hv*sMM0wO.$B <*~oWi _ufX9YB(YDC}ڥ7Vڢ>8SK5rн?5 /Na4+_&ObM׈f2 0>5UCfV_ *7?V ? U<rՒQUx#~Zu5΍H OibF%#O)]F@V. Y-.Oha4>uNE)iXٵ;[9aHiwțBb#34?QQrʰ7J%.dJ $alaVxX/){Dgu4-޶\߽e;L{HO)I#1ۊhF~y(dAķ"h5~KT̩{J m 1=1 ؈$eHq !Iփ<9bs9LVYwLuy-MV#!+x3s"%/ (dP4+QrOn-! rco|_G6L&6Y>oŦVfOm4Rͥ$qt2l)e ~+x>[_Xǟ g|#'B}gu@2!^ʬkL֗۶Җ ꇯUgOğ~7V;,1K[#_q*#eȜcUkM qN,% RՠGwM0TChsPbТ!2( -]7_Y|*${ggȪfke0[Nkgxwn("Vg?X)(J+6[^f]X VJN,:u`4w`xywi oWz7Xs_'4ἘWYN1{$+/$ڧˤUs|ꀣ f'rZP"wﲎP=vKV~R2QΨa`n}ހw/O@H" 9*|oWc%f =cKd=lOo>Gg+@{Ul~ΨʍbSNZJD!]MZE@w3eYh)]]9 x2%'&rIS ûW[L=q93"co(V8RH^YR넕<=uֵjΨ/ґU%b8),úU͎`⬯XeiXW5: 2L,̸ؑ0\yr٤6Co;:7@L3p 1<٫ضE~ ɫ:G|ĐBL/|emV^KG;XA+QB d2`CjyQ?kc:dGhug!›qR;U5:omoM-#+Õ3p>UzrJzg{M`^>P rK. ."4kW+3 !߄?|~x#>>۬SC{\ʭaSJLҸ$_͖9jżdlrؤL1"a^vjab !b6Q<=;yiP;ˏ~[sW @-yQG&pg]BUBoDZ엗 | e1d.UE"%JDo,MbVeG0LJ$”D2+ΞV1TuȿCC` xnAkr݁ajc6^`A SQ>]J56?ĥY _ePi5 u1eV[5M:>+uoz Ip=VbFo<% DyoC+'.gғ23W0_lGʔ%ߚ 7L H\G2%# <܄"F9dxq-BBЛQVE dHM9>~1I!{|DX;!*.^2UW yPʑu!D|=}I:YBjQB]s C]7d4V@FT1^rݠaNÙ hYٛVT<#Le,.]zqJ5 \O9OrGSހZLmv66-e[UX)L&YE_N!VnMeh C^2Qc,{|<ՓDݍ^+|Q팳-tcIVj0HHzVPW-NZs;f6U9*g=@]xTM%oCpv)g@D2^r ?p c+=)FvLLⴟ~i(ytzuդ1jR!=kofjWŮ6,xȘ]l7'_38wK>dVI3J,yڒOaӾ J o%oGMן|vW l֬mwTRrfu Sb9KeV1UaVZ.0n o&||U$Z4c^cL؉9V[WUϱJ!v)F{򳚮wڂm0ܘYK9 &:bXca/=˩QqI]9+hzJAlݠZ=_OR35ʻQ߮>DnaR-#E131La.%npRqܫ>s%'ŃuV!q\ pjM8a=VБR6-,ՖW1*u؞[{ Q 砹W a'Dok\g5xŠCUཬU78Eh!,0[LƗ־b Yۘ sS`6jj8~P7 ow஖. { zx^^MWÇ?1Gm#i9+pkJ~ox+}@\3#GAbW~=6bD_֟xf-<kF(fq * zM5["ǿN.==\^=>KpH؅0pu 8A%UYʵs.)-A>U*4h8d!=DrݣҽA:dax2<<k>TjzJN4L~x}|:~zsy/V9wxBvoaPPd*JX_mF[\BzhmEjnWF\|ͼtkRo'ϚGik}cƛq:Ɣ 5[gz7o;P6j~Q vn$ۓ)/ هφX5>ӑbA` qVY c{6^g0ڼ<{꾬OYJxvkz{{WlJ թJG IDATYnj؈wdݬ?k.~9bC^Dv{zGSppЛ{6D`{%=v`-d xXAqӂau̺P8^r{M4AdĊ8"+?Il~[*f2Q[U j*:RZKѫ/^Yr|J޺U /Q>޳[Jj6 =LZ?jK1yXˠP3;!fs _jmJ*K3h2JG ,&۫#dH4/ T1J]WIܫIM"Lma]Z?YCP B4˄dA>(Oy2do˴ *2utt\P0*\# *%`1||cna Q28s]@euA&P$ nAd8&U.ed:fR[*xqkOwrEK7,SwqP|2@l{ ɨ0)nl5f#*Uw=<,UXLzɓLtȨs>׭x 3\OBPЏ*ogͿ$Bj3ϐ8{]N/+FpfYr|{kmE@]b:Te s5^$U Ɛoc b@2_fmnUD²\38qTj.W뢮x7[m.@gf|b&+f`aDtVPC)Iv_ OP$Vl&ZC9T W{>ִGAnMAif}a:ʼ%K6>UZ.6=2iYŠW%,;mHVrMr;~5K-8T{:0DY>=px_.eu|H)7$Sk]R{='Bt'k;Ɣ 4Mͽd('NW1fP̽߭arV#$x>$TcIy9,|mR$>ZmJ=h$ ( )~U[ WR7aDw)al/::79R=K}DV5#.jAl(#7Wx1J2Ї̚g[-!>{1KC\QRJ;S,uD,v R=t. ^c }} tѹ.$ \Vjk[dR{xP >јBvHc1*(Vb#bRG-/-orC5>zE,LL:BrءjN8Wr4Eƅo7 P% L/@-$ X7EvH.x>(@UB!3 ШTZS/xL(+|!H)`J? `۳”`I1as: Ke+LNBaCj.3Nb]ᔰbuOrf<,I/48:c+{/9O7߱68ď8 "Oƌd߻@⤖Y5@>3!O+ [fYLW )} _z ;jz~=JqZLs1ޖMއ4)̫eɀ>"dx3|VxW BnMTG7;GRh]F?}N੅q9Q`XK haM,sme}0c~z~|Rg!3< >ͯGvWzUw!&pgy_m|*YTf-O,9a\S6Uuo5gIi K_OtG%ьl( &$9(ᙓy @cX,p莔-v4$:K Wc2(=pz`dgLnYc2ڿsAgiltavlm U;7g\]wW{_82 CA+O?evLH BҽK k Tcm%HW0)x26߈<֌H7CHVʡLvw̄1['o~~B/Cq6F| հ3T_r"cI4S6A!=<9' OU) [H}ɝ!Z FuWT "RT&ڿ7ƿsu3H1cZχdч[ [\Pd+5A:i zl-$96Ƈ4p9iK\E~'Pav 8h'QYAt1J%jԳ{'5G2Rj܆$!d&=HTS% v:eݐ]]Ew2$K:]{z+l2yjx7%E#RSuh┏ZU] ψjQU\Q\Cco~ kUłw`jOg}%VPYP]D&2Z*k6 a[V7jfVݺ^5[ڬdR& bvI{'8=S,z|ijbmD2CX8Ky c',"7 OVyxNG]@[h}%{oL:KgQ %[Eܦ;D=1- ~T.!Ep8KÈ#~"Zz1dֹ8ރ!^hW{%c~jWU A 0@T{c@h@DJ'TFm"\>Bv oRK ^Iք6Pӗ>]>:?٪Ȗ҂rPvt;z[4YV?(71.?D&dzCϚ5&5Rs0BjDԘ}q+uXδ)8Jā ij]X4s,;/s  Uτ$ y3Vuv8U4EƟ'EDz%߹_,pY+al0gQ*dU%4"P10/tECVqC_TS`jbإy^w?yb|YuB)A#&Ge3*ޯ_89Z_5᪝/!PI y';Z'lFw*v{w>,{ #dҁEPc{DA"MMmrSVR*[ݷ!YbxWмP{H>Y32:UZBdszuu 9Ohzif]80bnn-"Ŵ: ijr׼ʒKT7|1Utl>6R'];U oܪJetU%  LV +«s+ҁIf>kxr_SR(oD hcP4r*VjUbANJ%')UWt0#gk.e`G >c )8H1gn4/Vij,5♚Mv=RDzHR<LR0N,{0_qu¨BLm *Sh-B[#!8ܚr\"eՔ>\W"I$D4ڒ2>XAVՎN W/%K )| sOWD1U ]P.EQ1d)1]JXPPtVļI>AKUa[؎Մ\>%a=Z=Jc@g,K򲌐ˌ28;]S\ixW7w N{P __ 0 cM֍c`\ GM&a; :*w8l&xƐ% ;&jSm$y:ߺwXSΌ>rEB:Kª]~%NG@=[P\|rS\eCCl PCcVFMђ%gh<؛MN{34l q3ZH~xk2)Qg찧`uT=8${vK1{M|ϓ C$dYYOT*#:«g# s,t5TmNeh8a'axcb2:Z&k^Ԫ DPĆ T *!nk!poNU롷\uc{Y V';&wXk hs%-I4Fmd Z ՚M/\"?+)|=Y1PM5.o_ǃdq./Ygշ#yDgk`o7/T=Ȼ&9o24|e.lA6XRsqXlVe>]nkyKџGp3c]r`)uNEBj_3CZb &I̡ۨIpdgX\g»9"25xGp Kր 2İ;BzIrsb2I/vK@e#ĪWͥzZgd>3u.^e՘V0z̙IY$r"Ї@EryFV_gKMs<29Q8 ,N; {4?7&fuU ~{n5dY^P)Ag cd}P$:t=GƬՀ|M!~Ŋ0Ze2 &{hw<.c ld ?Al."b5囨c yN_(??ڼ^rk 19l&ihQmY}?ػ.E/T6;=_UlL#5 +|?\,D^l9}V%,.-i rF)3g(ФޙBmwX||XJlO%X}aUB =ߖ.€O!ik⤵)K޶Z8(.x?Vh,k{( LMblZwUAT:ظfQmZ}.]V δXͺ6#~*gId"ɶqຈ S>PdpaM:y\MߪC~:v\$B}'ۭ"U6,nRGXsӘşuvG*P1%tP6֐hv9ky3fJ'Ji٘gQUBܮ wγVP890fQ'2 VbnΪ] ބ%KSH=sc})#pG +kڟ6rbK5^Jl7ΏOWIKTyd|e lq-htx>`DvOA0EV5q6FNM!)rW@Ն;KSr#4g2'Yskgw$KQ5Nv~b{;˷Z( F$ihafʑ w+ZF z 7aF7ĿWՖoҒ9\WysI㙎&mKCw6 uټk/ pPP 'c6CJ(:?g:vR¾XN/D7,sm!]@;sd q_K'<&quE y8nҊZEV"pkU@U&ht(_B z ϋꌿC)saKR ^9$+ t6|u|^#ƾ<}1d-=}S;g=ûc=n ʫV !B IDATH V$x`eYLA4QLEh=iW6!gd}SAM$3/+沬uK/{ƿU%)Z-RzNYв18F'\;YRm e8PD6`4ܼ=AάcI&udk󽰤ဳAjW/X=TTؠNs!5[cPse ww>;#R#+kLA:}n Fr Ұ@)xdE\/!;E VS9b jfzpya6WQkwW7C}ה~?γs3t̍S`G )q^)MՖtw_U!M.A)kbB~WIO.)0G׫FhNT{2]ϕB P :iU'z8؁6E&ptw p4Rd6Vd(pHl=J:xDx&ex<(Fܲ=Y?v>J`IUolH\Dҕ%`g0=9BNګr6@ȭ'"?MV7?I!+[rYcdCa8]FwIL3'NT fE+n3+߯nUhSӡK2nlf:J`.7ZfPI\2G"3)'KrO NؗS:0]d*f_IJdٿS;Ff '%2 I<}8i,/ O>bȳ̬A5[5c32~/jn9/XLX!wwtsiܞmZ Sy%yWةHlHe%2A>2\OT#'Ϥ0rߕ}Qvx7&;]^9A?ѧjTBFwri}Y;]?v֡hpZl ~zm$$IB|7639mC-*a8++@uN@Y }'ݮed}e[ +rWPO Jgp W2 VLyVZ>O|=O 3Td~\_/>۹UU&1ab̧lW-s J>%#xƁ-7VsMB/1ZI:tT`L!QF=wH-)B+Tq5Xptʂn3+R52]G>7O܁Y]D~Ga9'LKWY͒n<ݧFp5keoq <:p:@\gCn˱D1,D_zk2o^I)$ES P.lP; $cz8^bYTT_ HEhe qKC&3FpG m9C% ,Tپ.Xke!Z/ﺚl& j*V7P2qZm|0Kx<$R֋C#B f۰ w_K/e'ev!*/v;;$rG((+? m>_"ɻ$5}bx Zǖ R\}Y:|| _@oP 20jsggm\];!pϥӔ˞&|PV,YЭײz@=5`/gWIl뫶@!-mk]|KF1gZ/U[4dop!׮Dt>[h %3pS @xh'z箼v?kd`1l<0l9-Y\{^),U_!3^ 5H֝S8pc eo5 Y^] 4t]iG[?"bn~'ody('/ԁ!ꁿ~] Ľv56ye:)\lz-j{|f)Z8=I+_ؽvV 4([l4=hAQ5وPRaj ?D?|]^=/|j5f96k1ƃ}W:akPgRzqk"/}RKm @4]gmm`f3RL֧7VG=B& (&%_\> ɍWűpBc\z~#WQu,B}4vZa&=OoǓĞ:}_}9o /Twq9`_01D zU{/T "#pp LU>6N |aH_`HT z"[_k4U re BM_#{8 s`ցgh>+3Z#'p<@`v޺Js,Y-L $7;1qsP\Jw97oχD#^,ya8Pgՙ'wYRfZ^<SB3wR!rHq||W99/ F .e4jad/aMWo߀;~~7}Cy^΃?JK!ߧbQU 7ru +nWǧZKh#H-i{ᆐGF >v7: |u#mAVRfƚI0ɾ x( "ݙ<*3|1 = ~>{KMf9` : kWo,St3F]zc6 lM{ăGlV0- $"yAWk^I5IwOLɩ$WɖbGld/[7yq.6*&U>?r.|=K_! ߉_?yz>Vrǻ>oG͒ݧlq3 _HuV1D"[؂p譊R"VLVueoUׯ@66jUe$q$ zdUu$g[[DpzefQR$TWfFLM-"H՚;#dOapsqK&}RxPoSq 4&OE&@Ϸl-L 叝WΒ1s^&`).nԹq%@koSnGë2|a8'9Jm1ӻYXӉE/ z'남31-­FUZx-&;5/W/.)ءD]fF'kneV YL?yg n5@O2 buhE'g&K=i*l\պ搓X*- bEK<rq'M<:?n{ɯ2/7kzn#F'f\|E:1-FD~_Z0teХOB x?|T%^! 986۩LY3z&}.1D͉Ãj&:O!˙^O78*bw;8㵷H>Xr>#˪xY͚`ezb}kJ͠~hQn!Bn *ڨ61Ζ36Q\CBU&ӠjcG$AsoK#4F}Wk___o0o8OVlV\KuSQkᬺT7/ۆ[Jxǝ1i"|^)hmmcJ .|auMiE2:t;Qw&eB F +u@.9WV^֨v ut=:g' 2AËHW-/9&ed"2*jf%'Jŭ+̯M' 9HLdSOOe-@s.ZYѡ<]4 \{ğ5(,xdFY%Dd|֐vD.Jݫ 8{xQFvJR!^ދ4mi袤m ;{1:^ce\b~O>}{vx{䄩NAֿ@z烓aT&Σ$&WV5u~k%&Vs%|B[?PH,`&lo]5wRW^ %4" lD:mllCNÉfc@&,5<a;7ca3>8UwrJ-#ai ^1ֹ~Cٗ4FFLqr=%[YR Bcof1PS8ܵa&%hKGjczBM.ߜb%O`m(RE4.o"Lȉ&T J+'lxz-?r wiץ%M=_$ V# {n 23]=\(n!ᖀ$4Z$O]g;C";4nhˆO__3BОH{Nt6?$l|FB7*V ԨtobBF;ik6=?~R^A:&jV<'k&ߴ`2\~GP0`57 g3otvu~}'MjIe1Bi;65{9c?#^ 0'O`jxΣ.xar5K?Ssmqqy h;q6/$Ofl{Nx'xdYRgP >h֪swjb, X&hZ+ =.]?IW?;`BeΕkղ] Z6/i f {_^-"*o?~Bg6_`5~L >}Z"yK!'^ad̀GMi>w&ZR6 HI/XWs2 vt__nBlr$N>u#7JP ?l$3fdhǍO֩'%OU'$\$lEk|#,KrںJ Q8)"\9f1o ٱx󂢧Вs fӂ=o)N#wXI*4E؆=\3=IMO]7?4"\%y(/#;UՍ"J PMϚxgƝae:- 3-_6P.ԋ.3!tTY'1I|89v ͺ51cOUn@f6"3'ʮaŜ^)9 Ll$^)V0ӀL6rHdÕ fph uڙTixBę0/ߚY9OY7]"볧 LS1. gtΦ9l@=D57WjGųo^lƌdbrSA.X, ÇtubOV8 D%hSK-Qi4Z4\Av,{lvO1EW}|Vn'2r7kRڭ}y0X]v`k+< kxvJiO,qAad"gճK̴n)HÍ?A)#>s%6 p< BJ^(_~Vd5Z"'hQ0LMtݘRƮMP.D5,0ݓT2DCZzEkB_6itaN|ԁ-iJ03aSBɫ]?Q vhq}F0a菝Vr}EћN:<=r1ix[Ŏ[T 75^ )J"@tx6|Ab`Q2Ph@J: MbO+.{ ϩpLy{nf˕m8/opOjyϦnq衄{u ؐM"Ts1U_qYϮ˰\p `}ZUOfr\@,LFS>;]I7DbQ/A.2N,Z u43g}?yHKJYX[GRnQd ;9@Lru)~Defr1D3So}@|$(ܶ]&jt=jҦyjoDq OqSw_MC\p}F|S0;*}&t#{ Pљ}MZ"c VJoq<=pK:xw!-:ǿq-}HюknA~kX`L Z, 5qO1ci 0nj!Gmٽv{vli`B$JG& 0D}E]Hc8ƅ3.ؔ?= /g< 'd2~gwNʞ0>_Vɜ<8' '=s4cMg?y>{N ra+ހ;kƟ^/OerIEsP]VH"K*?e[ /95hv>>|ݔ#~$N (Մ40ef0aVa^dgǑK`8'~gwt\b_TA"i] IN+_nVi*ͻ6lj;-LwQ<Όoo -Myeq̯+/|g"xT<1 b4xt/V6I'/0uAV mOHbtkP/0v%Io?R{fVpjk:ǀ'bK7ۛkyYIrL6r ?b(3m``se+^vQU)ZEXB^LCq1g,xLbt",M:N~;i@r;H0 vٖdc\a55 %9ӌY&&Z-N&RXZw,ІBg(\;7?MjF۔A .'؊T]ºyv_KŖ9a=]JoZ4cӘiN _Bp.7rp} 46\I4 -ݟS3hpZ0 ?AȰq8NW7q`s}cu+XUdvV9s]b*HGަ{10䊫̑)E,5[U ZFh:,)T1|`e+[i)6w;T|j jseI=>@N`?YD{7rvE^3m2%ǫИbJXQcnSr (1 Ց65W3?T岦׃A9ik'#L,ʴNFu5hmC_qFۘ4Ro DWZ9隱eYnu|ؓxza}/;DYf^ l(º `1U=Ƅ cnX,Q߁Wؽ$-ss&=@|^(gV 2FIn%V2qԨg1|ہS8UR _]$\@s:C c?SWa5*jSII~l"JX#P˂qJtMW_,>> )g/ɘyO,O3p$vMlDHO,YiP15<)n,̊7]8fׂ߲h2^ զ6cb=LvT%I8jddfZ!hd ~*;ҳ\qÙIvr9&^\O??>Hl,/a=O 1+Ú1:2j{P(%i75N<S amz>%*ͅK3%+4gQW5׃Wn}&[ϭޘ"kA 7ss_DMXP0 b2u]9^3pI5QCG@sje794FShPkڍ†0~&n Y:_gl2pG#-A*,2 49uc2l:vpᅞ2y:hJEJO.ԙ ,ƪMsƑ6}AhP:s7S(fc%kJ47c7-&]˧8Ή!հ2&v mbK)['<#iݝ`JVڛmckFq,>kZ7uy3ڭ^R$y7$҉|e㼒>[+[vը׆:4&?ދ+FU$n͌/"82.dFRz3(Ծgpd(y72x+,=t P`92gd.Vҝ3q/Ii@VՇ:[0fZiMe.`sO8J83N,Vl摘V=oOg_ 2< IfRMosHN櫻._ ùpSK7x`^3L=\_32l}sU8}Q'A?2mO B/i\(-|)b߅*+9U5zf6aaEowGE仚yf~gZ &9!¹22i-<=^c$]]p2`$^\~ϿQY؋D  f=>M?I9WA2P%B7o/d88_\,MsJFAyrյKh=I`#p%*U%R1ܪ`Oq*̑X4Μkm9Mō:$pZoo@;55}'6Zf(diӂ)`IJeWɺfBteD.  &5)84ܽ7EۛIe2&h/]4Lm;LƒkZA̟1Y\tZX"u[0#s9k0 #I2 }O~5JGs26NdqEV[unO L{$^%y/@Hxxli8G="i?P Ֆn+o'{= 6%N/p  v@A">l |.볼4:~ ,MvtьcrsQPiLȭehИD"Yo·b\f.KR6;3;γ=%9y-B:lI1d@~GYB`>wq aY/T )e?? wɿA6CG1n `+p!4}l^GEE [gR ug1^,:|estef[a `߅75|Ϳg8_߉ yyq7V3uW%I fjn]Z$ײRy[Yb?#ym\ӹ5=0. Lኃ9yOG.< {iٓyt~@' ML?"Uc7w3F ۑthJ,@0%ҙi SBg V"^(_R?u$t@E,t'#Cg9oaqɧ"$</2˗h 'sh#7Ӣc9ށ5wsZ,Aa\<]Pf 'xD=_ASxD)X>'*/a3G_{}Jt AU2ya<ۥ0eG}rX~zMQq\9S[53BZhe:w,\.5=ޞssN7gF/N{Ӹ/%+i +?ъo$NT)y#' IDAT""J3Җ\b|,œT+SrF(5WlHxƆgl| {BRg64FQ=i K{얼2LJΎlt`!{&wǽkޅ]xd9BGޏ;7z$?5ШASB{7 @e-hЋT3 O8\1w`R:6A1e|bG`=(U =f68Mj7u?AN5m6̧ۈ>/:٠W0ɣs˦!Q )dhfʮI&} 0q50.eA;&?~(9(8x?}qB{v]q@(< SPD'4{9yH҃ 5(_^gJwdhi\jG"{eW WWG=|(@FSgyq~ gݶ\<')_5j BoY[`ۛ1g\lUy@2d)^Q+: |'g]:/GSjm^0lmIHXVMZKNڌKR0߲J#+9mbrAܛa[PrtCJzmB<#PX<8Eh颺lBlW2j+HiHf9V?6$G_?Zx3ʚB$<0q[/ϵy3G{ncH(W3FIJ@IKM֜O(Gפߨ|BtyY??n_o!cpFbͬ)v(yM(2E¸?} p/ZmO//)?Y$D3J$@> o;qǑITu\c`#Sa {o~0!',7k}-)0N~nS.sar k1,G4=8Wg zԬu8|dT`0I>T XaQƲQO~@ d+\UY3s; ҫģ[J1kL\eL> 1a^v$7+{1[d4s# ּ,[jr1fAtDcnNϱ[VkNi=RqԞP-71wi=>GA0 3ԔUƬ>Ypy>b'+6BԓA 34$ :r!QW 8=\v kvQgS(wYaeFmDnMz^oH`EZpV?T`RIV`~XnHxAJ3wjRBSO[-Yo gidR 9S}0vu'6~<bK$#?e%M:u֤2!4/BcxII٠k#`jϱhKIaa~~KA3|fh;NI<΄B'")xf '? ҈jR:AI!xJ0fFuBB96ORdgD3;g̦ 3O~@^&;qz6/GKk傢! ueP}d WȂd.뻐 u>NA7#Nf{TaR%{&Q|hbOşY03]M[l` |ݟtFHIЬc2ʙ$ 1V%Nnu/iue)4X>=슩?Z9 -қ=M{L\M2UC2VPڈ6܊4(Z+К.e}zn(l.`SFB$X0Jk›fJ, yU7$=a#mE{MTT6)j} US* ~B>Y 'rJZS`be%I ֑+jkvs>ՍĬ+$~|~(+u~?`35 l:U9qfli+o#Q󲟙9Awk}Xϸ,#p?ZfMqވro~&_7GFVY(=#!XSڤbk &F<a cfWSuYGMPLMZb ? 2J :v6`fm/b1 D "!O*'`Rƅݜ?j0젉GBLG-b݀rXf-qm=KbuR{ pSx!8X  r|B?5IrNjvqϺf6/p9F0O-fK\kdl L鸻8Q{]LB$pc,(*Pp2^YZbA!F XvunCoC서"o5f"=Kh6p.tQ"FqKJ /%˳4Բ9taLL}ɢbOI0^}n$UVKje,7g8 F/vZ\b-fl2@dH'1^mmג )j/<<\k\HkkYQ gc$9;Όi+Y8ɲ/rd =zq#p>;01dBFGK*Ga8hqx߁oo/o߉ow%դw~g* p֠)j?&ɄRgFw=6MGӎ%nR/#o &GI-Ski]yظ`%eS3r0Etiz[bNh:} @ݱMa S`N) ;挆-e탯A:Y,6y:Xm+.l=5ljtK6Htӽ6hԫ! yکyMD/=>(CU#n4jUuwgZhaLF4:P^)W%;hM;u]S'E\TLxkj;Mf[8G+'d)D*S[ h0,jk FEDupD!yrkAj\kL[ vB 9rKwXQ2ͥk/@i f# 5(fNr@PEKDd'K00-ҏanΏc%ӀiS1!_/"wI[1Ck6Bkw@$:,,tuFu1̖;7{IAUrj.hc$& <9lf>o^Rfeìk} NhJ)0r\o%B+\R}>UsF#LJF 먄+x}*`/R͹baIF3TL (a7@fߖ\ {Ra~ \|(znsG5 &Ȫ `)+23! /-CvH|)ȇpnu_&9#:oϸKU0%רZdN'Gz@|R/uQGMGx?މG# l|g,OiX>֏Řzs c_#B*=xo?܁k%T&+ u, he1tOso9`5gQΛnKe,y-NYJ,8(X7q@iH[jeHgFx2T 6::m'S*826jPB5$se8M͌\>L} p+ ]j^S‡?1!bL>=A-Q4/bch'D[]܂Vc#8C3曪6( >{,վ4!U ҐfV+J>24+{K^htB'; [K 84Ǹ1~ ~sQYXisKC6(Z SM4ɃT:gT9ZJ r52Pit3=cw }đ`sM'Fp!, ZL0z+,f{Y*K5oKO1\OŪ&=T7՟c>q%C6$>x |{+ۿD{>4i<=Z*{ΌF4z`Xz̦SVF5*Te03{{[F>^!x4ۚzķGy?*Zb PSaL=>bUP*`Hd$|n>tiJIGϓ@x}?A\%Y8޴u3k[ټ. ;q-"3agvS[:o,߷gyk]@l7"m,ƞl3p_w!|~xtt3Xw-dt2h="*`y&Qe'SƵ"u \+[de )+|F.Nef_n"8HYTޣy͕Xw y6]n0samD52d [aBlC %V$;˺: *o|&Ԅ˲O #Z9g ^w[]>Ql-9 &UocCv;#E02A1S8 7@ŖG1~a CVF%&o\#)Lm[{dX"YEď3 yZklC5KƂZK)e i lyW;to/"w1F[α^\tk.gۡɂzqx-ܿغm̹zw0=֡)BXc4^סɏhBm>DMO@ҥBdIN3+D7wt#)01u᝕yVN+4 yAh=Yp%;\(ueR'!C~5fT-iKĜF/9w\ . V[Q:g1hFMi73)s 'f6&|jk R9[Q*b짊L4%!)0($ϛ,!C ^)UJ;^ )Kǻ̄X Eؼ1}c猭6dUf~Fm=ݭ>]w(z ƴy4fhS[lH_87115YE^09 \\L>t}Nn+ ,]g{sӐ=ϋ k(LSe V0edPWMRHoU|2˧pGK$PAgOqg,~7g(MЧuRq7lZ85]Xs"W?o5<'+,2' }EJ-?OĴ4&u 8y?n.3oR .brhPn2Y#ZUSZ&%氚W*6pow?~=0>w3ҝ|;k65 g~2ZWI!(T筤Q@äMs%wlrSt Hܧ{?w6H\guR.%9 &mgm9.{ B\!ôŕE0[)yu"pk]!x=ryYtR c! '60峠SPU㐴^5>K("= OPr ;nfiP,Z+(HGZ<Ix,e^khD#)i IDATe9>8j1-1V?uA;\ k5>ϡ%3.fCzJXXus- A$:lU]q&(B$qؘHɹZڵEl'\ ZӢerFhٚyfNϿ&\ 7=92-鱚@G5NH\Ty&s49I)gki2j#Rjpּ7LQ bvF||UtGBb9o)a{i:4_\rP3X땵Kp-`rvwg,,)w0{vV "1Q3N%'p?czޟH8Q~䌏x}V_7 &,n_hg]:CjTVBG=߁gTeK푚`;`k\Xѯ2yM.˃1W{bQ lȉV% TM(c# E>Y$!L짰g`l M4{ԐQ5O!9If~};N#|Ʌ5"͙xo+u o2pK7q>'~;x#y!D ߬8nfvI[& Z-nn靖䠽,`? RxܐoFBDUlnc+ <~02鉵Q:O8s;,Yb!..w3|]'ՠw(ڔ),T^NxA}k4 ewW|m`6~Z-ѧ;-sDs܋*J%4m+o(/,Hq9-4#d+ULPͲAml*4f ҕy`П*C[C0在N']d}Ingp DŽR_1+hT.}@jJh3&%JǗ1E,4I8LUφptք"fi\Sd#7yA;D M隗C[;NΐJeӤ.!^biTE6L`Ӌ暿KӧͅsgX'tA^^푫YɘO4ym_4S8lD7CCoCvie4C߱ۍ9e1镍C1%;[YB>c¯D'/ӭq}K.:DJ9MQM&E*k%VCث =Zk{Kg^m[4^a̶¾L0  =wU3aQgF b 8-5e'xd3D= 5^fu<- gM"2S'?^LKz!^ "4n>Y,-d|oАRĖZRPX$bϹS Z9'qTAV21z;' npk͞dw(^P JrRJM<ާjjLS(NDi@!IA0gl#r-sT02iO1}MZ=/w`ñ_ QKiPne\eAC.EV}{hchF4VPg lMˡư.dڛHsq=6' :i׏7(-z9 td9Ҹi摛_YN 6Y%έm&/n$WzqH<`w]Hvct52hg2T EE29[0 ̚ 6"$[b". уEl͹9@5Рzp"/'.UYP^\4`:$Bfzt0e[tOHM-Xj[eW*l.Ian8|2``tp-O *a%M,6A`L"\}/;_h%ZU)nPݛ@s@Â0 1O}?-TXg)}D3՞{3OwAT~MX{C%&bMr@~+364`hJwn@@s|em8 ^/O,ya 45Q?NTGv!t+Ԇ]qq6bgֳIwqWr2m!0~ T7Yc|gV8*+"Rk˒HիIH8sY3LsiDfi|:63uaLߍ6|-:΀j}].to x%ς]\B0'Lqz v/(]tF!WG@q dB ,^_l6tʩN=hG.`}p4l|)OZ!s5J֩N鳴> ]3o2 qȑf)de$aK Ig곰tLjү@wT 70bvfO\xLjMѧzo P3Mp<2 LT <߀[V͝L$o ,?]x G. d{ +YVDvO>KaɠoMeÕDҩ>IZ^{RѠ1 c{4l>K}"2 c3ar/.3JFF6[@j1l&rښb7=%GVS`c\1٤AgǻejH׷D+#ô՚ᅡkb4RѬߐg0 pd7^UK| ԥg`Z4a1xh] ( tlP.+P8R_sFº7 UplPy2˕DdE,sߒmZ!V[E~Κ2YYb|4ʼn& =&msg!kFl]-@*C76=fw'M `2QNO3E(fZ5} Fbl 8#v* \l[@q 0+o2 11çB :/M5(VJM4^` !Nc3 s" x ]rH M(D8;eBD]`xHXoϲrvF2 ӤѤdGCICDw <%rYAEa⵴CFJc)}*)єmtܲ ASEm6Ң0iӑh})FF<n Q 6}{-H5%#=KOLdV4gjsUPŽcTYCNk5Ӻ9I'ʴͿTnK [})\pGY?X3qVٟnxJeb]MT~סbv̸%qY V$ĨM9gY:[Ba*#S{G?lerg,nvˣ!"P:}McorhI^bI"rikNEiԿÂ}jQ&Ϧ?5dhn@z\㜺]"cOlCYzk=< A2sX/" #I xE_uZunMz1O/xIj^[9)Fa*#e0湮2&ӰB >eh6ͮB\mrT' ; v,beqT'<1H_Ї¶f2&csC>jRqGq+9gK^>Ceو4m~@$Q`ICCSqh10u'`Pjm[7kh #%dc5V>xoCۻJ( *2yzV24֨ͳ{:Do? wKвYƹe 2{=-;LŁkv*:vbjzT^ʕailS.>~*)Ԓ<$(c TFa5l .w7&l1gb ɦ.XkI]a~X`NƾT8}ӓIe6,/G2_GXFKK-oߜc Slj)F mi |搘D#ŚZyre'3j_ڎdE^ ށ0; ,΃H]bI |'IiƤ}ldMHP!αd<@g hy{IajY<k썼@+fDs8gb=I`abd􆖮Tr[$5{aÑ%6N轑06/Ɔ0iI̮pQhnk!QLmΓ8\ B7gι^s_4:FCo:8՗"t I'nSFSAcdfw֗N9Sd&yJҸJ~Cԅ71dC5p(ip=ŭ<`H#VfCH Q1vZFiv E80hd5# ~H)Ӛ\tCŒ|{@pKWu|1lo;Kq1Ibr 〟 Nx3-OP槺BqzM6){;E3'czQDoG˸pO orDBY~b9ۘ;sSp}zθՂeL3 LeR  EԐX4bn~f# I0#ǀ8I# D@%v7ޮκf"J|ĵC..pdNwt@Tt; p'0k?+%yӍmf2u21Z$4gtIn$s؃~8k YtgxX18↣Il(^&ƮML `x,rV9]y sd`\]@zYhXEpZ0i]C&3ѝo>U1|2IN-25{gA&6=m\a<ةN .f dg&{HZ6X2re#?5z؀r1P`̱X6mԲ!`)"vƚ9koΠżs{y鳘s:5"5I_x/ zfT0 I7FL؉}g3HZdlR}!L6˔?Ja |HE'Tػ~T'),h,UVICn"Eݶ$9,=22 @t7gу~@7zPi&psD˅P@-9t5(v 2lKFLOO XZZ)Z f]QhJc8IY[ָ2<#kiϝf7YDv)zEМ=/!ϋ IH` hrdJ=1s=?':.SylyenVJYܔ2?RW0W֨:|4ƽE $=1/= s[ 9gd+IZU!C2{S+Ub< >e5Z Ϣ.]I5MOR/J8kYTqyA[3E{2Bf~NuN<~0ޚT` c`V8צ iTf32wg U2"/&Sa/*AZͺ̯a^rT utՀ37,P 3l&0τH'5}HƂBk ;SV%YH6Jv1A]N]w.dH1>cٴu*s߿ϔ c4#bYҭz&σ̜7Ж4f2 )MTX珞 ,Po a%{Xb4:+gþg6|Oԣ˳̗Je6g-coP[$#ۚ'I|GCg}`3IٰDiVTǴ=OQg2߶"L kTk;x(52Vszء>0J>%8+o$;at~1rQj- ɀ7=֦i,ǰuRZ}fINZ- Dk^ R]Hm6ƂkA>ޕQ%`VYݳS5e^sk x.K&pt_cm"g8KnPиEPZ,+￲S}eztD%Q ^dl)-pY I{;Oy÷CN*(Y=Ɂ0zaW+܎rodK?/GcU.9sz.Pzh墊W\=V֎E3//.W޶ y}y7A0(sRV e۹6(齦MB k1GҗSntbUw,2E K}VF`bժBh}6g|O@ffu$>h g^‰koFc\P,} IDAT,#'yUʝ-ّψ:nX)cC)4K*mWvYBxիgk`^eVj֗^AJ*9ᕂN0Gֽoi"_w=,S_ccsO)N{Hgum?Tb $\X IfϟɆ?Q3< SbaaH&{/^ M7S_t*ͦN٪vvoAJm Y7T޾H JGW qXAZ]۶`z0qd !CʬpL~xZF19)$YSK?V~Y6@zm+u;6dMOMZZ+j0銁ז{YaZ9fQȚ.$ge^2M[*3c#e> 1 έYm(#icaXqn(0uXs6N S7@K Vg;݀'bWK۶ޛ'S;5ܿ)-kαܤ=K{Ȫ4B^=31HTv2a(w1ak98m0V33$N|= dLY+-hʕsLrOFKߌc4ˬ]MU@*Hn^DjrEL\RUG P92+g . H)WMP8Ϻ3,Tj2N  eİL582QL:|*k Wk7bB89W(qf,Vtn+eDpy, 'vV$sOBUMzUQВbvd rC=]LXZ?C< EU:˜}EƗ%~hq6fٷ= 6C@ ;UlNӪ99O\-Bm^W&s(rf~ѨN՚˵ ߳ܮL"pSτPʸ}3& S~&4 _TN~YԪT0U9"c/`mȏlgUGD0#鉪c^Y*e=y 5sn, TdYu?ǃx>|\s`%2e(*ՐC4z:Qd K8kqHEr} i2~/&_A}<,#.yfGjZp7 SplF bF']С|Itc8Jr1r^U ,Z"l;][icu}NƽCDYSmeV:m8IG[u];_SCȪlPn `~ީ 905Ĝٴn\ y1+pEVb!JzC3C܁kpd-[ȥJ+]pe'!ߋ$ah-㣾Xb.6,lyÝcϢ\cEr+JZ eոgQG)2obp4:O()e)CDNW!5aCV6vC`q ϋvB6572νj|n'ySgBg,ӟc.H&ӵ5#ֺF8vZ4yfxV!)]aa2M9+V"XDR=GA+TE[r 7r7.qEsb"-S,r:`:,Ah}-5!D#.7OY*ت9<Rd<,8]<S&hp*o2e$rMi @˅U% !Nr H xIuluZ`WV5-rf𴈏B6}IbĆ{@e]Jmy'xʃnrClPd)끲LD$ oMW2K&afV(ˎWj JdCɢޭd JIXg}Y* +p=` 2TYv)?iZfSDϭ M5v0{N]mnoJ{Mε Bo9G" xItQdG6_轃rVߍL6{ ,]H8.+g\B!yJXab;]~%d±Q~o Ȫސrfu "JZ:!B-.f}h8Ǿ+R?FšXj] ܗ!@R欐;[_BNhf&8$6ඍDI;Q. y L-sY-{lUUpJNf |;MRh LȠG}'ߓX/ ScAY ʇ.|ew=o7' |JLK@#\h窨sgz kj2\+׊6/^xl\_@(&jRL⽺[~otpCh3g-\HcZf0􊷩63kbۅ^HX.:4pA[CA[ual8xͰ &p@ahk Ҿȅq h"*)29vPv7^f$ #46"%8lF`Dž/ .hX%Orr+ ˎJ~` y=s yiA?fT6x7k@hLPLUz5ǥ<1v1a?Cp}|`\bwEo̓^%D}wTXPrSzfȫd{: Gq[.V25b%qxLV:qn# Kjv8Nܶ"Ҹ>l;op_R?Ǚz%"5>ȇ &@[8F#h@Ĝgƙھ3iW!$3a861 6'X7 'aTA8QϤ$p==3#-tQJ>C@J-ZO^(QQLZH yxl77{M`B6: f'9SF6:aJn7Ot!/(o*/<]fT&.vE]˛S)i&Ҭ>L6 \dI"Qz?oxB_GĖ3$"'؈|ֳKRfpJh/A-ngGmaCP(2gQ+s[Y϶mpS'r '| ;Mzh])_f!W<.aX2Nygv+[+>B/TZywg{/*0v%$9ŏb\<ׂ/^ۥ9S|V"hC\Wj]^_KL-mҷ<bcX-D6&M{u~̷߻TЍ$|!CYZMﻻlh 4KX &X2jK%s\M]* c, AμI|/*G5^6ۭV>g:cz`'K̃Ȑ}TU?ims4 xɶ"J(]qV{,;-e8N˙g; 7ONIW["!f/,A$F8My(rސs$.X%y܀{eܠ ^drayt?9dA%f\y xvzjYC 3[ bRPi{_r`b%W^xV30dEL1(ے4 0E{rf0y%O4Pc/r%  Te !yk`eNq`&dq|JkV` }UY2^Pޘ3 Z 0B4}{n<ϟ7!|70ߑ<ҟ!_$ @7A| hKRa'y$LP{8Yi,<ٲ)P<ƸIYuƉ|"XHT.^SY;EeU\aV ]0S8 &?sǕy1 /?ɂe¢.đY:bغ(Y^/ ˈ\uͫ?h26L? 66ǰBM ]?V*`H§{uuºs?ygID4x\5znE]lT>;(D3?+8Y/hYKy*UV_p0*G/X%IAx["vF|SH&(\IaS: 6 gkgjlU/f9hck8SԒGX2yI|0E,[;A2 Gs dDhBXVn=@5NL(>l\0CI^AKj4M /"=sNrN]L @b̭(i~xZ4IvOviEύ=(Z)i Z5Y/P37-lieH[}]X,諾5jZ gvղ=6$\׃,J!{L9efXVgO>D4׳8jْ5[Z0p{?v5Ed\!ɥ -pWZ&̈́%X?r;n!CO kB–E S(By5TնqV+@>BcVA8py8:~$2ΓQ4{VZ<2NCwwaZ^E[5j~}vER"xV = i'p9Xjޏ> ГgdikO<9ej$NL}lp&)&(Fb pZ?gփΈҥRYU(!fvzoV eǪ*on ς0w]VQϼnZJqB-]iW"&2N\b,ɘ&bzU'W ٷK+1ͨQ :ZwƮ.2žRf4/SK}[ IPr68)l8\,y MĖ;-λ&=..ݚcf\H1Jg0)zHiC'*"$#ZëކlyZ( fh_$+Gj0e0x,Dl[Y4ba9OuEI]@ KesY[0O٭规=m*.:3&w#*wk!U k )uP$U>0 8m9%85Ni 0]u*ߣg.7GMmy+xx+ӿ+,m1I]A 2]x}rY H_m'>OBVi,"A\1UZzqFՃOQZ#G &T2Ύĵw"n'0>2"֖fC^K^1ùdsX> %bR pX\fPG:1a_V`$)IPmϝ5I5 ò=^?=,Hە'LKmU{ZekeiBŃޔ 0NYSSpq>*d(*ed5.XD3H^ꪀ3';p ) f!oU@O>N|{|n_?3xbd?rfF٠KcjmϝKPHQڜ@>s6&ܘ +87@IEyЀGֻe#g"TlϧJfXrwN"2m~ `Fݖx'p\Rܑ aufKz_p ?T\ W q\<lbIoXPA*UV ̢V1ȵ u 1ܕNqȾhMqC`@'^לgINu.7KYmx8Q{(zi΄٠p9gLx_q/BVF103綦2u&u3qXqi.}*MmIpՒr'X 9|gԣPԆT~B1UAX!5(2\BUoEea*_6ꌹ I2֘$"vVJ$"<|q;?Ė>.,:hpJhm-0%f@>2ȳ1~;;79T#OzZ /mO$><~/0H)©p4 7@e Jmaf|aOv94W ^ Mzh/r]䘘E֭IX{ZzT/;!x-J? } zI'M$"ڟL k>aNעIgVgŸ N{+Y4w\ZHLS>5u*4\ҠN UL%H!nq*(\a\C z5!#~?(rَ1a'/+3U\{ M7؟ 4 |,{*N{G*Z.Rid¬."oK| St4 SI2/t}2B"Ae'RfO!/X$wsii`"ReUgD7}\)مꤴ`Ke21~Hl~=<($ b _[NSGm؄*#Ԣzܫ"h#߅m{<㆔r*$ШTd($A|60rƤi5k2p8D'tBe+9 8oGLd<'' NvIGL_F_oP]PE}|E\APae\/gWhŖ?-l >Zy]&.%^De ^…cao%"8!6B*&׎^-sUߟ/.,.8t"B(@ʩ2V Fxoρ͆Q|kAaE 2цn^U(%8$ Vgzl|lݩ#TET$z-"e~?N8n@ydr^!@p零Ռ bXEv`h4DM:Lh 8}X/2r*lb\->5kԮ>R׻b-[5YYY2sKsFUVz,*!#%*SC8lؐr%-B{2-mޝ;ޟw}!h*'\X\(d/j$q$cCaxsgo7>} M'_ㆿOl_4;慨z my 1#C1!%'ltVN2+Rͳެ/ mϬbg6 Xlwt}@Y:8<OD]? 跓k,n!KɧE?ϯ-)eRbǐs⬀]VVݮ hrTsj2Ai0_If/+c=9]=9[vMRCtyvjϚ(G8;kWD(jVx(]!QeذC3ib1GqjyJgPP]c7^WJ5Os?EvŬ;wX"i:WՔp7 e仠wan; _ 6=gX#'||_Sහ'p|ȇg*NO"7ғIA\]Tπ FCŗtIJd'b;Z/+)UƍՆdY-1\3J=cS ^E™Sa .e^"+QN.`&\ =1J™6eA@n]"a3¡>8 C D\\ +ܸUO„פpaLNvwX꬐ e b3`oSJ}Yt-4#mT_WC.^&o*j62TJ-덜]~WA:EXZJRB|1SS4v`b47mgn97a*l 5ʿ5?^d TuXF~w-/_6ows6`tOX;(~n0[O<<3]=!6&l\[aV-f`N`+Qǭg>q4ÙUpfUdΪQR㬕g {}^;WQ`\썚vjZJ;u5Ģ/eB/r?^K:1Nj隳3{58ۭlD+*[|\qOozRi}@V~/`toϢƓ_{F iT.snzVH zp$owxx6@mD≜8o__yWD$?|f8}w|bOߵ\1gw6_w.T  tmjݺvWgh(Ŏ 99$à42kS HbZtz!"I퓏YWSޣSMd) ӣ[#"Pq2>^CW0aOPu? z;}d/$յ%v*0>}I3*T JtQ1ؾ3!h嫡Y%W-dwR ,Ts\^̇9Wj-R%߲[[gTGY *".:z@V ҟlsFYS}k}VVPVF++vlzfC\߹h Ϣ3JS%]1KA-[S+#IH 6>lpWd2(cc?W|0^,-S#W1ce 0! D|> ʛƹFS" J'~`e{`$$%oAɀmx<Zwxpdq%aXa ɩ. %a%eVXYseZeR'xfB/9HaҒ5% ˋcREzGK7 Y* u_|uas5b? p4 "A=&I33jsy6hx@ԐND,@}?,!z)j?M}0]l褒Ez)ǞJ)PiRJp&M8O'`ܿiܱ w{ \ޠDq+>D NlzOw|+{5OdžY԰-"XtX./"R`OzHѸ"LoEu^ \><%C?At;_!:j_21M؟e(\b>$0RG(TuVFC)cuF32nM1AP%M\ᴈcN~lD qS=D{Ņ C~V%#Sz)E kZgudj"Pk u q!D ٿr'X! 0>C[sr_JȹU^z*چv~,D i4H\UaZ(29 ?3dθT}փEq@dH[VZU 2Uǯqa J<9[B&E.~*zQ D%˨-9}ۄ*FHS\Rr&m^b%-_q{_xӊW<F$SUZf㤳m;og*H·$`oOlq6^uT|:3ܐC8{V2n7x>~> 0r x_\Q=v܋xtiT9v"3qdCg(D]vWrY`fmƎƅJn?ũҎ 39 ``,ńt Z- "3nûjiڬZ.ոh"yon(i)KkE IDATsԤx:S=Xc>==뗯cdقm@p&X+^ZѻT^aAA|zKtaZhE[^۪0D'o's—n3> onB7}LT%nCiͦ‰'8l )o3xwlLPsǑby;22pf\9 הq1j)& 9"W՟?f,>Fv[bcH4wy~qĢQW]2:4q{he]nZf,/KTM6h_D+ysk2/.dV8A1@@t" `dyUX@mj%^01HR2?#rs,/}KdV vZ(4,84+7}bV_ /U~C#T3( BT{ ;^@!c@mRv:{6H {2)Cro|p(gr˘e$s)9Le0#>@ٙ~O rY$vk2YY}Oiѹkɨ$ <{!#j~K}O=TRu *pcK!>o8n~+Ӏ\f/ p+DRWVy`np @[aYtÎwl|̿{SU J %UkV <ֺ|-o"Y4rufK, pH,Aa~i];Tlb]M*+ʢHbٵ8'`r؉P[Q〾$~ǟ>~¯_O(~@J`JؘcㆍE=JZ x#8n82sǗDl3߰x${%ZݵjA43N.,0,ŔCx & ON l- F6,Qm瀅qccWb륢 ,`n: j;C]+SG.D۳(`0T#V.$*G / eL(V %N2eFnaJC!V^i = %ΗXB%wo[l5YV' %4. 8e+@#}m)@2]f-geI拜% TWCǥ5]O]8\[lH[d5Lw6@MhIrFYMO{@B.Sx*SmR lo\8{KݞɑH[S%I1je=ig#J(:k}b6: `kǞ_@~? W|*;kO6U{ѕ mm 'ca{" oNDn'n[[;¸lKK ]3F`e  =TV w?(8M 5*`?vg*4bhb5VѠH-Ι u7oT9D+)^6.l[#nX_d̴S3A$hBd̪I%'b`13:t1⎳x-n]PZ0,,rbz<+d<0 U%K"? gHlf>΀ڙ %>,B mض U OW~w$AHۆwY x}zÎtlj't3ݐRF҉3x(#f+I\ն|U,0 OF47,,\ :(aɽMR 71.C͇e[x^>^x8Pv鋩MMzOZQ ٪CM"_xire؝_9\z߉ >3{236kJf, n^4nh/L ?PQ؞کEGt`zqrAS*-(z#sѰ/%zysV2˸s5fK|LnIvޥаY?r% Rؚ( 9YQ!0fF)BwxR ׁh.Y0Z04TVZ_4_%7o oB~Y@2Lĸʩ]yI,'8q`)H֪M `OMW o/4g;\x %V3|^L>cI} AWYr>NYY kiaūu#|* H[+@݈۶CD }#|#~OqGbێ7aGaSc3Sች  ;vxmU^8<{TUeS\4g\O0!RCIЩɫsv=2g% ˋڍ[TU*$WZ=F. LѯVu\glђ>'(ӌ/gg+aE{Xʜ2#I i锕Tau9Eȑ=@1=$?rd3 :K9b`ϥ-\oY<drE^OfLDx+y/>/o[|//ێnطث&NGt6C?Vf#@'H"I<󉇄GNxBToKuW#cos0wWLE3-8(DL?*IzJzFPPqaN痹;xS!wjqV\[W?f`[}W9;< v%yxU)Z_~#}wMhO92.o4hVdѶKz |Awvbsr6,W°w^\켭OjjD4X8tF(֎:&\ z.Xm(򞽊Ni ݬ0G{Kۡ3ȏ; |O?nR6U !vj5- mo%Au?'u(v*f#Ӳ6 ~'~]x~8I g-E5"/W>biN[  4ׅq! J$ej9*JK98+/TQֿ`{@:6V(X! sl C"О&f~+t.@W' H rANk/wn6[2VJ`(w_44"T\9z%D u& *ǥ-6&ì@.SEƴ70 t v[Iޞ8' ~?n/p6*OɯkE;@ )r󉛞xUrVl| P8VZo+x1H\TP\&`ggs9c3S4QTcr, 2RH~ʊ ~5L^I'H9T:a h>m_lug=Ewӭ׳;BNߘqfbO% \ӈ_K+v]Ї^ /Kedg8: `FDYy"DS šKSWM nB&Vn0P{0[dL ``E[}fae-##؍@>B唫ly,!Ko=ѣZkcԳ1&fuP35_[xje$1Ȋ:Ÿ́RJI4&?tG!:Ew$r5D#x+JBYw:*h% vhv/n$C_8 HTz&8,$ 0C @b,4 65Vڽg\;MgʄO-EI^}W~/צެđ)Uܦ ְQ{ntYO\rLg !QQKF{۞pw!}3~~BnHi=vlV?g-̗u𖍁oG[3w<'sÎMvl`NPHڑ v-NOu|N=BeԗѷG9 !Z2bg,7W]Cjz|-W iRvlKulω\^MA]%P"+yjS0;5I d{9)&ʇVE̒jo~~'#*Q֧e ܑIW29k944{3ȵ{f%+~+ّȱ#"kfЗn4$Ւdl#i%(IY[}C+bTk|<1jics 2Ameo|{B?ӥP 9ljZ|'ve@N sR@Y[HAu m`<,r_1댘j,YOI!>tf f Um6;"CFw;Ez|`ZJ]l#{S1/>M/Tmշi93Vr ) اj _ο_o۳.FiU >nz-wv@}I+Qrt5Qw=AjhrZQZ{+T$2:h^_#D;Z Y p/'EA 2$I ˪}k%z bž7ZA%foϮX"{2nYs8'g&fhWcjJ%/Hxs@찅i[ X5g.>Kgm!FNƼ{!=/CPl˛d ʢ"O}tݳu?ž\*ˠ,3P",S$knPgm&/c!W"avX ` [N%\|Ew C '!wB [<>oI~Y>B䁳yĉPH. LiA qإ2j,&nkVv5A,/_>prc, Ku2PSa.^R)dPZkr 2&{ F٬zpxDT JiJĩ#i]mrPuZeQ{s5jHV$0)&kÔ,r}-O +r'y\=+$} XgnwZNN,Bϟp/KziV1Y zR%EFNA_v0*ryؾ.&)ų%;/ec=*6_ܽ TEjBI۪!ՉltN)@WQs, EUGvJE-Z{jظ4UQ1tƪSm5p뇶9 R}-Oz,B8pW *o1-CLKUejTȃ@p,L5૜%v 5u@zs/HʞFX69U]U 2U:"MǒZ9̼Vq6>ҶsJm2|z9\^NhRnLmWxŃCljN7g|8En‡_B#x]u~$gy(5I4P@@pr TgA `/DHoͧݞzʶjh1K7]@c7E<*33\\ QH u2PuGv2GkhAem !@9T:D,ŃBWP1ciTt2^徱u1}9K%o_K僗M0D Y0/R/G?d\(%% 2SπDU|6HA!E-e k5f U܂}QE >|!8^:" Ye`MG^6S_k`P?sU*ݎM<U 6$CmݾǷ:7URi4ƩwiPjK`)CNUb%9M88<Վk6MucuReA} ̘ڗ[4VIDATV&v Okcm7Ye$9l*N!NMe`F`&?)Y+mk G^:YZ=m~Bwy_W1|)_ Nid}_%J͖<4_5&~ %G&?^J;!A\ SFڲ, ^mJi ;_еt A.T.K 7+ib-a֑g%|9$pzU)5nMFzŇ>^8{y;JvZ- w?qj $+)0-v#Pfz)W;W[hKKx`e&'kf.]w~_F*&-}^;T4jCFPk{,/1J`X,K @d{t8؆Pzc)Q}jiliW^H5-Xr=4SL ;6?;"ۊ}կgv,,IMH.N+T!a> BsH$ˢ7vҔleјl9ʖRƨ4 ;7GF6t2n)C|+:Y.q^wCfQb5a{zŃ bǢg2bgȽt:f[JVfR YE2!ؑb\Ꙑ )(;_8/YkiR_rg 1dUJ6ɳK%f<̛#1!v0-{- h׫3!9Ig@-ɛ*PpXVjKLՙ*-KL\CɌ $C\0\]:ex&}!qK±1?-JSKF aၤk އ41E eXKo(:~`UZ tS򮄓6s~NYa2bS@-ٶߪq/5z~(1dw _;p$\di*K/IQX`B|Y89: sù9 aC!ϝKC=В ꀍaMئ1 &$eS{JU+mmj\{V5 25/NDZU4S`maX+->@D<2)d1G{k{]Q`m`(lO eaF *[ U#_-r O7sXrHEڟpp98ӂM$X Aڊ(eSADq&TX-sq%R $NϚPïB\Rꮵ4.L.s?`R-i &FaMv^.>nM4M-TFE[^v_?{-d^|b8lIŽ76]Y c{2 q7D:7.EiQL܌|XKDx|Iđiqᒌ6ji#EX-*<'O k;%or2z0#wa8qSADꨮaz(Dž4 v';nO偣q/=w\/V O3ǯvre8q\x@BྸǩEIζ [ٺ'whͯ#گ⒚2zU )2Q,νo#ďo/CNUh<=0j: Ug)M%r'(CÜƦ :;`͛fvxz'g!5w$VZ˺U9B$arXYW bJT,.=Ld5y>/ޣAi5wNC uEU{^g5H1|F%naQ2|V=`^.4?&Bqi:9%o~{S7~%r]#\Jd)6FwtexX1=/ɣՀՀ=0E)q3.<50L+4K.hAm if m{cX[jt rSP 52*ܳ0,d2מ숌;0=he3r:ȹ {59H ?%M ks:Ѹ `)j a2GY,nyI32ƪ:dSudPv~ʴŒhZ+>w}P X—X&)"e0ƿӼ=XM?"̼(e(#Zg)!٦nB\m'!|[zhZ-BJQg 3`*W< zjy~>G(oxctKhoCj7| "8Póy! !g% @A2bSJsx-B54Gω]0|klĿ4IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039740.0 fdroidserver-2.4.0/tests/dummy-keystore.jks0000644000175000017500000002415514717152074017607 0ustar00hanshansa163ec9b]1l00 +*:$ 5q8E4cʿ3K*sQKxEc\ ~md6 hWyKP) 6lS_ D 's18Qd|mHTķAg>U/gzdDa3iswMg)O#h%Ow/\BĈ xśGnK1U8h/ҍ&*kyP`r6]LQy(茷 X¯/9BS( =,Z2[ 6S~'fc ;[^EʠCDr-|9j(y.C~^L5t^楉 ׬mي*S/E75BpHS=sCwb43\G!H;Hb-d7 s%CTH9T_\OqfmohR.SPdܟ:NGdev$]*{(8'Z-fƨe1@bTwUK@G<Ď#-#V'B3CD-VUP'iF*Ƙ@(COC7S- wJC؞!hhO/q3/3WTGt;!NûY(e7|j̢D֑ UDl1|Rܰ4u$p @w\Gg8E"O<ן2ALGw+~Siu1/L_S(i hGAaꯇu`1| Xwb%?skjUʞfrJ~Ajbe:R: /5UŵFEBpކ=]myb\reոІnڡ~y$¥!00UbO(^ ZubB20  *H  [XXX ff6 T l"jVJO?,RWlAcppoԌͻ"TbB*M i/)q$<\0`w8%/ 8WW'g8K0g&t = H#QcT͎J-Ӫ'K"H#l $ORzch~I"Pp #+kW^*>9buÀ(XTξ.E78688a0f]7L#00 +*JbhXF~j_ ܐFY!}E^ 㜛C 2}u3KYBj kxڣ=^yf%fn(2t P;*]b Xw$S˔MB]S  L8^$Ll,)[=*_"\R=$MRkAQȜ1觴Txf~%3i->ə x\=!O,;M%aP6w&t\=[J?'ɨj)D&BzQA@[q8bE;W愪lG;-nƹ|>uf#"?bw.+ D))_-gv˺?*e1ۘ9d:~?Q L 9ȶ,L1H1pi`)[>Lp5@;l]T#[]%-6v^MPUI Z< 'dPg .Xm2: P CLw ']]/oHk ү,`Wmk<"Lt6?6 Yi5_%3-̬KI{ܫ'㴿[&+  4ab~v@cX.50900ɠ-0  *H  0!10U F-Droid1 0 Utest0 170704152811Z 441119152811Z0!10U F-Droid1 0 Utest0"0  *H 0 ,/ϓ 2ɰm H3یu&É6`IݨoΓ9<в>v1+nۃ( {l 9y-.smm=P!r+KIWmU!|*.g (Um<*6I0[1=ڱ F"(gtB1$v$O(8E'&K@<} 򃗵UiդXZР9w[4W?S,<SRNy?Ŏ|7^Q07؝p]E8clI]' Q/as9@yKurepokey]2ʶ}00 +* }zEךT;‰/l+p)DՐ Ѧu)+^Jgn񯞏ȑV]ZL8=5dc9H?gt]ƒ0M&"re?"PYL }̶ \ j42,r"muI@w tE?2倭4+u'hGR#ֵ,cV kYrbYD%8덟qfѶ.CcU1c?~s_9J;yݼ CrfC);IDfojxƙcl: Vh$>Vyvr$u̬[жYe)%h "6bx'$;S֍ꆱYRC'_ixYA4aSn)Fm7}T[iޖە$t֔2́LiY#e\۳7mSJ{XQԙxS?܊ C=rĬ;$>`ӅMMz?nDWܤ{LD?iV 1izxU6QXȵ\%XmQbq[JYBcCt>Nxs6ECTN$6<7"P.nqc$ V aJ+Ѭ60QO&EX,a؃Ų(Gޕtah]@NLEl½njwg!{,d ^`N5?AW+iҪEfX.50900ɠ|SY0  *H  0!10U F-Droid1 0 Utest0 170711175532Z 441126175532Z0!10U F-Droid1 0 Utest0"0  *H 0 +2!ChB^ X Cnqy:8 /qifOZH71MmS#/CB՝*A apk3s'S.ЬeL[zuYt{YE4@?:٤6%<;j} ^ե\zR3v Z1|~`.SL&w\r_ȄaM~}pd7$"/3|#m=};,3!00U3 ZϣJ'*nE0D?p%pTNGU1'pH(u8~9`&RtV ,Eqr,ɓ8xYEĜU®%Q~?PpiPL A?!gXQ@$2}?aR\7 '*] Hi-pм~rZt4 oY-T_dԚy>jў]Htl-> (N*ȧ=sk0N<'L"QV$ LDgye:D5մ@K+K^"i&̊xYY a.uq93ħAA.؛eEÔb& i7] ӛp_mSn1BN8锨x Iffl y> сtz;a= Mrإ/]Cjb {/op^/'ٳhB[o2|H߿ TKoc:u?O\W  )1-LrB-B7@ ݮ~Md[FZbg%" PA SwQ_^6)׭~(`;Xړ\W=YvG;%z="1gգJgZL9J7(wX%$(1m6u0j_qUD/ c.>zЗ19܅rЊ-CՈy8YsI4סf030d#gs-ᨛq3I-,e¹kSw1cZr'e@p Fb@_Qn|לF,m9ei gW ><޷VWdf@Ɗ?on=jՋ0 wXEʥJ02e- lYi`߉z 2U(urvqFrPpC̟?"N@$IC!GfĤN#Rr%t):z>^ثd/jQW୞z4O2`D.^{-X.50900ɠKl+0  *H  0!10U F-Droid1 0 Utest0 170704152800Z 441119152800Z0!10U F-Droid1 0 Utest0"0  *H 0 h"E~QˈDؓi_fTIW nmuUk0z/p܎m—aX9٢B8;pnPל@ZSQ|2n[ ֯g {ψwu ow)?H6_^ABs} L>wDG]gN N$:1nJƍtJ⿧ˈE.I5Ukw@wfDKLr6DO}ٙʏHA!00UQrr@3x0#+R$~0  *H  *[Jb/%) bKL'8Q˂S1]Vvmj:FUaǪ<$i./„4zp o CC5:dokc|{G腅xY:WI]0%5*,QP3Vq7{$~nkq6\^rTۤ&f K 'IΏךYh?e*thT//nfl=!by>d2d51ff2]600 +*D .qG ` HBx_3}'8au?56@G^Á4%{@b5 #j ^Uun4cU? ~nIw"zxm0d5~ه₥^EM# VG}B#a!m[4Dz29jʊueA|n?!^mu~A@Ns MkTTTI_PxҸܘg<޾ܘDɵ" } 08MB8wgVHJ qG '^B)8'`dK."룻 YcVUubBn3!*J >r6+:C;Y)}/zwx ߥm$GvZl}l{*&gxhU %U-q27#o VGEǗƆ,DBeWw\L27y] 1'+r?Z̑~|s:eؽXH$D{K QRYN# #(wgO^W[0 NIG=ȎbѰZKu 5rI6_-,np D6L'~"eTޯ uƵ+ÒF @{+@1d2^?Ycm& 1nG~]nO^pb;6D3y~m#bC.SoK)Z$Բ,d::"@h숚YqiN|oEEw즌'``$`lk@Ceؠ\6Z^t/?I/#*ֶY6{=tf?<<el@^0=>b)Iy_jnt3R1]lNzӾs/Jji=^7m $>E{O)n_FV%Q `p;UWߜ]{.65qǙ"wg|5 ^(t埭zvtD԰Aw jz'8?0)$7EK;Ib=ŐR7 Dz4P;;"13TX./F'VvBih`ԳlԩD9ՂhoPzTܰ|*KGQJe+LX.50900ɠu0  *H  0!10U F-Droid1 0 Utest0 170704152747Z 441119152747Z0!10U F-Droid1 0 Utest0"0  *H 0 7<1|bEqB .x؍~}U_jMGdt}qt:?|ynO($MP 6kf<)p -ewԋҴ#|>]{ >y4ƒm4S7,.:p7s^؝J5ϩ^D^nC/1yt yӀa M ɟl@ASFB͕%laIHjMRaA;HkyKSQȊ;![!00U؛z:&Dnnl[0  *H  [VR sC ~H{uE"W@Zl9 1-Ehwfm2ڡKVoluX̃j yԐBP3(鲢2ֻ;6X`r[NΆB}D8aJCTNr5)dtx,54xyJ,Rl[(lCֽs̑1 Ց#nf[POTRaY!A4_0d7 # cd ../fdroiddata # ../fdroidserver/tests/dump_internal_metadata_format.py # cd ../fdroidserver # git checkout master # cd ../fdroiddata # ../fdroidserver/tests/dump_internal_metadata_format.py # diff -uw metadata/dump_* import inspect import os import sys from argparse import ArgumentParser import git import yaml localmodule = os.path.realpath( os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..') ) if localmodule not in sys.path: sys.path.insert(0, localmodule) import fdroidserver.common # noqa import fdroidserver.metadata # noqa def _build_yaml_representer(dumper, data): """Create a YAML representation of a Build instance.""" # internal representation of keys were switched # to lists instead of strings concatenated by && # https://gitlab.com/fdroid/fdroidserver/merge_requests/1185 output = {} for k, v in data.items(): if k in ("build", "init", "prebuild", "sudo"): output[k] = " && ".join(v) else: output[k] = v return dumper.represent_dict(output) parser = ArgumentParser() fdroidserver.common.setup_global_opts(parser) fdroidserver.metadata.add_metadata_arguments(parser) options = fdroidserver.common.parse_args(parser) fdroidserver.metadata.warnings_action = options.W fdroidserver.common.read_config() if not os.path.isdir('metadata'): print("This script must be run in an F-Droid data folder with a 'metadata' subdir!") sys.exit(1) repo = git.Repo(localmodule) savedir = os.path.join('metadata', 'dump_' + repo.git.rev_parse('HEAD')) if not os.path.isdir(savedir): os.mkdir(savedir) apps = fdroidserver.metadata.read_metadata() for appid, app in apps.items(): savepath = os.path.join(savedir, appid + '.yaml') frommeta = dict(app) with open(savepath, "w", encoding="utf-8") as f: yaml.add_representer(fdroidserver.metadata.Build, _build_yaml_representer) yaml.dump(frommeta, f, default_flow_style=False) ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2921872 fdroidserver-2.4.0/tests/extra/0000755000175000017500000000000014770510164015211 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368094.0 fdroidserver-2.4.0/tests/extra/manual-vmtools-test.py0000755000175000017500000001235014743421036021521 0ustar00hanshans#!/usr/bin/env python3 # # This script is some of the only documentation of certain processes # that run in the buildserver setup. It is not really maintained, but # is still here as a kind of reference. import os import sys import logging import textwrap import tempfile import inspect from argparse import ArgumentParser localmodule = os.path.realpath( os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..', '..')) print('localmodule: ' + localmodule) if localmodule not in sys.path: sys.path.insert(0, localmodule) from fdroidserver.vmtools import get_build_vm # pylint: disable=no-member def main(args): if args.provider != None: if args.provider not in ('libvirt', 'virtualbox'): logging.critical('provider: %s not supported.', args.provider) sys.exit(1) with tempfile.TemporaryDirectory() as tmpdir: # define a simple vagrant vm 'x' x_dir = os.path.join(tmpdir, 'x') os.makedirs(x_dir) with open(os.path.join(x_dir, 'Vagrantfile'), 'w') as f: f.write(textwrap.dedent("""\ Vagrant.configure("2") do |config| config.vm.box = "debian/jessie64" config.vm.synced_folder ".", "/vagrant", disabled: true config.ssh.insert_key = false end """)) # define another simple vagrant vm 'y' which uses 'x' as a base box y_dir = os.path.join(tmpdir, 'y') os.makedirs(y_dir) with open(os.path.join(y_dir, 'Vagrantfile'), 'w') as f: f.write(textwrap.dedent("""\ Vagrant.configure("2") do |config| config.vm.box = "x" config.vm.synced_folder ".", "/vagrant", disabled: true end """)) # vagrant file for packaging 'x' box vgrntf=textwrap.dedent("""\ Vagrant.configure("2") do |config| config.vm.synced_folder ".", "/vagrant", type: "nfs", nfs_version: "4", nfs_udp: false config.vm.provider :libvirt do |libvirt| libvirt.driver = "kvm" libvirt.connect_via_ssh = false libvirt.username = "root" libvirt.storage_pool_name = "default" end end """) # create a box: x if not args.skip_create_x: x = get_build_vm(x_dir, provider=args.provider) x.destroy() x.up(provision=True) x.halt() x.package(output='x.box', vagrantfile=vgrntf, keep_box_file=False) x.box_remove('x') x.box_add('x', 'x.box') # use previously created box to spin up a new vm if not args.skip_create_y: y = get_build_vm(y_dir, provider=args.provider) y.destroy() y.up() # create and restore a snapshot if not args.skip_snapshot_y: y = get_build_vm(y_dir, provider=args.provider) if y.snapshot_exists('clean'): y.destroy() y.up() y.suspend() y.snapshot_create('clean') y.up() logging.info('snapshot \'clean\' exsists: %r', y.snapshot_exists('clean')) # test if snapshot exists se = y.snapshot_exists('clean') logging.info('snapshot \'clean\' available: %r', se) # revert snapshot y.suspend() logging.info('asdf %s', y.snapshot_revert('clean')) y.resume() # cleanup if not args.skip_clean: x = get_build_vm(x_dir, provider=args.provider) y = get_build_vm(y_dir, provider=args.provider) y.destroy() x.destroy() x.box_remove('x') if __name__ == '__main__': logging.basicConfig(format='%(message)s', level=logging.DEBUG) parser = ArgumentParser(description="""\ This is intended for manually testing vmtools.py NOTE: Should this test-run fail it might leave traces of vagrant VMs or boxes on your system. Those vagrant VMs are named 'x' and 'y'. """) parser.add_argument('--provider', help="Force this script use supplied " "provider instead using our auto provider lookup. " "Supported values: 'libvirt', 'virtualbox'") parser.add_argument('--skip-create-x', action="store_true", default=False, help="Skips: Creating 'x' vm, packaging it into a " "a box and adding it to vagrant.") parser.add_argument('--skip-create-y', action="store_true", default=False, help="Skips: Creating 'y' vm. Depends on having " "box 'x' added to vagrant.") parser.add_argument('--skip-snapshot-y', action="store_true", default=False, help="Skips: Taking a snapshot and restoring a " "a snapshot of 'y' vm. Requires 'y' mv to be " "present.") parser.add_argument('--skip-clean', action="store_true", default=False, help="Skips: Cleaning up mv images and vagrant " "metadata on the system.") args = parser.parse_args() main(args) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/funding-usernames.yaml0000644000175000017500000001040714766514130020410 0ustar00hanshansbad: - "Robert'); DROP TABLE Students; --" - '' - -a-b - '1234567890123456789012345678901234567890' - ~derp@darp---++asdf - foo@bar.com - me++ - --me bitcoin: - 3Lbz4vdt15Fsa4wVD3Yk8uGf6ugKKY4zSc community_bridge: [] custom: - bc1qvll2mp5ndwd4sgycu4ad2ken4clhjac7mdlcaj - http://www.roguetemple.com/z/donate.php - https://donate.openfoodfacts.org - https://email.faircode.eu/donate/ - https://etchdroid.depau.eu/donate/ - https://f-droid.org/about/ - https://gultsch.de/donate.html - https://jahir.dev/donate - https://kodi.tv/contribute/donate - https://link.xbrowsersync.org/cryptos - https://manyver.se/donate - https://paypal.me/DanielQuahShaoHian - https://paypal.me/deletescape - https://paypal.me/freaktechnik - https://paypal.me/hpoul - https://paypal.me/imkosh - https://paypal.me/paphonb - https://paypal.me/vocabletrainer - https://pendulums.io/donation.html - https://play.google.com/store/apps/details?id=de.dennisguse.opentracks.playstore - https://play.google.com/store/apps/details?id=eu.faircode.email - https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/donate.png - https://raw.githubusercontent.com/CarGuo/GSYGithubAppFlutter/master/thanks.jpg - https://raw.githubusercontent.com/GanZhiXiong/GZXTaoBaoAppFlutter/blob/master/preview_images/thanks.png - https://seriesgui.de/whypay - https://transportr.app/donate/ - https://www.bountysource.com/teams/nextcloud/issues?tracker_ids=38838206 - https://www.donationalerts.com/r/blidingmage835 - https://www.hellotux.com/f-droid - https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=8UH5MBVYM3J36 - https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=E2FCXCT6837GL - https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=FMLNN8GXZKJEE - https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=K7HVLE6J7SXXA - https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=ZD39ZE7MGEGBL&source=url - https://www.paypal.me/SimpleMobileTools - https://www.paypal.me/TheAlphamerc/ - https://www.paypal.me/avirias - https://www.paypal.me/btimofeev - https://www.paypal.me/enricocid - https://www.paypal.me/gsnathan - https://www.paypal.me/nikita36078 - https://www.paypal.me/sahdeep - https://www.paypal.me/saulhenriquez - https://www.simplemobiletools.com/donate - https://www.youtube.com/watch?v=ZmrNc1ZhBkQ - paypal.me/amangautam1 - paypal.me/pools/c/8lCZfNnU0u - paypal.me/psoffritti github: - 00-Evan - adrcotfas - afollestad - ar- - BarnabyShearer - CarGuo - cketti - eighthave - emansih - GanZhiXiong - gpeal - hpoul - i-- - inorichi - inputmice - jahirfiquitiva - johnjohndoe - kaloudis - kiwix - ligi - M66B - mikepenz - Mygod - paroj - PerfectSlayer - sschueller - tateisu - tibbi - westnordost - x1unix - xn--nding-jua - zenorogue issuehunt: - bk138/multivnc ko_fi: - afollestad - fennifith - inorichi - mastalab - psoffritti liberapay: - ActivityDiary - AndStatus - BM835 - Briar - DAVx5 - F-Droid-Data - Feeel - Fruit-Radar-Development - Gadgetbridge - GuardianProject - Hocuri - KOReader - Kanedias - Kunzisoft - MaxK - NovaVideoPlayer - Phie - Rudloff - Schoumi - Syncthing-Fork - TeamNewPipe - Telegram-FOSS - Transportr - Varlorg - Wesnoth - ZiiS - ar- - bk138 - btimofeev - bubblineyuri - dennis.guse - developerfromjokela - devgianlu - eneiluj - experiment322 - fdossena - fennifith - freaktechnik - gsantner - hisname - hsn6 - iNPUTmice - inputmice - k9mail - matrixdotorg - mmarif - moezbhatti - proninyaroslav - quite - renyuneyun - rocketnine.space - sanskritbscs - sschueller - sschueller/donate - stefan-niedermann - tasks - teamkodi - thermatk - tom79 - wallabag - westnordost - whyorean - wilko - xbrowsersync - yeriomin - zeh open_collective: - avirias - curl - libsodium - manyverse - mastalab - tusky otechie: [] patreon: - BaldPhone - Bm835 - FastHub - Teamkodi - andrestaltz - bk138 - depau - iamSahdeep - ligi - ogre1 - orhunp - tiborkaputa - tom79 - westnordost - xbrowsersync - yairm210 - zenorogue tidelift: [] ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742486863.0 fdroidserver-2.4.0/tests/get-country-region-data.py0000755000175000017500000000245714767036517021136 0ustar00hanshans#!/usr/bin/env python3 # # This generates a list of ISO_3166-1 alpha 2 country codes for use in lint. import collections import os import re import requests import requests_cache import sys import tempfile def main(): # we want all the data url = 'https://api.worldbank.org/v2/country?format=json&per_page=500' r = requests.get(url, timeout=30) data = r.json() if data[0]['pages'] != 1: print( 'ERROR: %d pages in data, this script only reads one page!' % data[0]['pages'] ) sys.exit(1) iso2Codes = set() ISO3166_1_alpha_2_codes = set() names = dict() regions = collections.defaultdict(set) for country in data[1]: iso2Code = country['iso2Code'] iso2Codes.add(iso2Code) if country['region']['value'] == 'Aggregates': continue if re.match(r'[A-Z][A-Z]', iso2Code): ISO3166_1_alpha_2_codes.add(iso2Code) names[iso2Code] = country['name'] regions[country['region']['value']].add(country['name']) for code in sorted(ISO3166_1_alpha_2_codes): print(f" '{code}', # " + names[code]) if __name__ == "__main__": requests_cache.install_cache( os.path.join(tempfile.gettempdir(), os.path.basename(__file__) + '.cache') ) main() ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2121863 fdroidserver-2.4.0/tests/get_android_tools_versions/0000755000175000017500000000000014770510164021515 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2921872 fdroidserver-2.4.0/tests/get_android_tools_versions/android-ndk-r10e/0000755000175000017500000000000014770510164024454 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/get_android_tools_versions/android-ndk-r10e/RELEASE.TXT0000644000175000017500000000002214766514130026131 0ustar00hanshansr10e-rc4 (64-bit) ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2121863 fdroidserver-2.4.0/tests/get_android_tools_versions/android-sdk/0000755000175000017500000000000014770510164023714 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2121863 fdroidserver-2.4.0/tests/get_android_tools_versions/android-sdk/ndk/0000755000175000017500000000000014770510164024470 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2921872 fdroidserver-2.4.0/tests/get_android_tools_versions/android-sdk/ndk/11.2.2725575/0000755000175000017500000000000014770510164025710 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/get_android_tools_versions/android-sdk/ndk/11.2.2725575/source.properties0000644000175000017500000000006314766514130031327 0ustar00hanshansPkg.Desc = Android NDK Pkg.Revision = 11.2.2725575 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2921872 fdroidserver-2.4.0/tests/get_android_tools_versions/android-sdk/ndk/17.2.4988734/0000755000175000017500000000000014770510164025730 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/get_android_tools_versions/android-sdk/ndk/17.2.4988734/source.properties0000644000175000017500000000006314766514130031347 0ustar00hanshansPkg.Desc = Android NDK Pkg.Revision = 17.2.4988734 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2921872 fdroidserver-2.4.0/tests/get_android_tools_versions/android-sdk/ndk/21.3.6528147/0000755000175000017500000000000014770510164025712 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/get_android_tools_versions/android-sdk/ndk/21.3.6528147/source.properties0000644000175000017500000000006314766514130031331 0ustar00hanshansPkg.Desc = Android NDK Pkg.Revision = 21.3.6528147 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2921872 fdroidserver-2.4.0/tests/get_android_tools_versions/android-sdk/ndk-bundle/0000755000175000017500000000000014770510164025737 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/get_android_tools_versions/android-sdk/ndk-bundle/package.xml0000644000175000017500000000143314766514130030057 0ustar00hanshans2147075529Android NDK././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/get_android_tools_versions/android-sdk/ndk-bundle/source.properties0000644000175000017500000000006314766514130031356 0ustar00hanshansPkg.Desc = Android NDK Pkg.Revision = 21.4.7075529 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2121863 fdroidserver-2.4.0/tests/get_android_tools_versions/android-sdk/patcher/0000755000175000017500000000000014770510164025342 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2921872 fdroidserver-2.4.0/tests/get_android_tools_versions/android-sdk/patcher/v4/0000755000175000017500000000000014770510164025673 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368094.0 fdroidserver-2.4.0/tests/get_android_tools_versions/android-sdk/patcher/v4/source.properties0000644000175000017500000000123414743421036031310 0ustar00hanshans# # Copyright (C) 2016 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Pkg.Revision=1 Pkg.Path=patcher;v4 Pkg.Desc=SDK Patch Applier v4././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2121863 fdroidserver-2.4.0/tests/get_android_tools_versions/android-sdk/platforms/0000755000175000017500000000000014770510164025723 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2921872 fdroidserver-2.4.0/tests/get_android_tools_versions/android-sdk/platforms/android-30/0000755000175000017500000000000014770510164027563 5ustar00hanshans././@PaxHeader0000000000000000000000000000020600000000000010213 xustar00112 path=fdroidserver-2.4.0/tests/get_android_tools_versions/android-sdk/platforms/android-30/source.properties 22 mtime=1737368094.0 fdroidserver-2.4.0/tests/get_android_tools_versions/android-sdk/platforms/android-30/source.properti0000644000175000017500000000030214743421036032643 0ustar00hanshansPkg.Desc=Android SDK Platform 11 Pkg.UserSrc=false Platform.Version=11 Platform.CodeName= Pkg.Revision=3 AndroidVersion.ApiLevel=30 Layoutlib.Api=15 Layoutlib.Revision=1 Platform.MinToolsRev=22 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2121863 fdroidserver-2.4.0/tests/get_android_tools_versions/android-sdk/skiaparser/0000755000175000017500000000000014770510164026060 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2921872 fdroidserver-2.4.0/tests/get_android_tools_versions/android-sdk/skiaparser/1/0000755000175000017500000000000014770510164026220 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368094.0 fdroidserver-2.4.0/tests/get_android_tools_versions/android-sdk/skiaparser/1/source.properties0000755000175000017500000000013214743421036031634 0ustar00hanshansPkg.Revision=6 Pkg.Path=skiaparser;1 Pkg.Desc=Layout Inspector image server for API 29-30 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2961872 fdroidserver-2.4.0/tests/get_android_tools_versions/android-sdk/tools/0000755000175000017500000000000014770510164025054 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368094.0 fdroidserver-2.4.0/tests/get_android_tools_versions/android-sdk/tools/source.properties0000644000175000017500000000021214743421036030464 0ustar00hanshansPkg.UserSrc=false Pkg.Revision=26.1.1 Platform.MinPlatformToolsRev=20 Pkg.Dependencies=emulator Pkg.Path=tools Pkg.Desc=Android SDK Tools ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2961872 fdroidserver-2.4.0/tests/gnupghome/0000755000175000017500000000000014770510164016057 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/gnupghome/pubring.gpg0000644000175000017500000000132414717152070020223 0ustar00hanshansXEUݺЧʜo#tV"ʖD-oY_)H8СAuIhG#r Mbp% 0.bN<|to?1(4X(p ʴnf 4'rUQFake F-Droid Test Signing Key (never use this for anything but tests) "X   q;Wʼ`~IH.3*>ׁ֦7֜ F"$=@0_h r +[E&wt |;dDcs怜^j4R!D}qw*9^XȤoWUV[gMm2xœ *e-u_n/Qx$u1R;ZvNsg S‚]6k?DƿΟA)iοn팣C52 S X qnfEtz 36[\M"CS 2tM1PȾ* =DBxxǛN!%1!:D kW?m''] ).-././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/gnupghome/random_seed0000644000175000017500000000113014717152070020254 0ustar00hanshans].)l$*aqyF~PLs5?=X:j'3`mDC3E UYX#)}tپ2=K- U[QXnڼpMpA5#r_ xK!3@wl;/V^p*"ʧc͈꧇{ʜFՅ=P 4YP2G@iOJs,T'vzv`ޮ*vSEza8S'`uphR`Zp?1>xjw(QzLr *3:t `ZBDr|rWZ!!C"$dC[| S!f\X*A9> l7c_m$wK9l? 05 &xd~'_ڽ/'B5tVQܟj> ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/gnupghome/secring.gpg0000644000175000017500000000255414717152070020215 0ustar00hanshansXEUݺЧʜo#tV"ʖD-oY_)H8СAuIhG#r Mbp% 0.bN<|to?1(4X(p ʴnf 4'rUOwA6'3NcZE]#^63c(_@7z*RST^GWet ̺L. t果g ym #pk!IQ.("940R& 4~66. gH_͜o.)XGl!;b8`$H2l5hXFwdئІHQag'S=f(~Ьp`lZ,$K qS:AfMy7$mT#rT?6>TG_@-G7\@ձ1Қ>{-CM> %P:QFake F-Droid Test Signing Key (never use this for anything but tests) "X   q;Wʼ`~IH.3*>ׁ֦7֜ F"$=@0_h r +[E&wt |;dDcs怜^j4R!D}qw*9^XȤoWUV[gMm2xœ *e-u_n/Qx$u1R;ZvNsg S‚]6k?DƿΟA)iοn팣C52 S; b4} 7ln~Hbf=21ºfg z6w$Dm۝gmlsoQgFR Тiyv5D9%<8QA5R"USǻ`%'4-7ffV,kޘ?}S 4k`,Ҷ#Sa/9ԛ*J_+eKYjjN29R <3#qA7D7c|j ۘ_#)ynF(HE.{=j7GeɁu[9Z5A qؙF? ؈ X qnfEtz 36[\M"CS 2tM1PȾ* =DBxxǛN!%1!:D kW?m''] ).-././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/gnupghome/trustdb.gpg0000644000175000017500000000240014717152070020240 0ustar00hanshansgpgXI  uf:5q `o2ܟr޺mCD[e././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/gradle-maven-blocks.yaml0000644000175000017500000014007314766514130020576 0ustar00hanshans- "\tmaven {\n\t\t\turl \"$rootDir/../node_modules/react-native-background-fetch/android/libs\"\ \n\t\t}" - "\tmaven {\n\t\t\turl \"https://plugins.gradle.org/m2/\"\n\t\t}" - "\tmaven {\n\t\t\turl 'http://4thline.org/m2'\n\t\t}" - "\tmaven {\n\t\t\turl 'https://maven.google.com/'\n\t\t\tname 'Google'\n\t\t}" - "\tmaven {\n\t\turl \"file://$pwd/.m2repo\"\n\t}" - "\tmaven {\n\t\turl \"https://jitpack.io\"\n\t}" - "\tmaven {\n\t\turl 'https://maven.google.com/'\n\t\tname 'Google'\n\t}" - "\tmaven {\n\t url 'https://maven.google.com'\n\t}" - "\tmaven { url \"http://JRAF.org/static/maven/2\" }" - "\tmaven { url \"http://dl.bintray.com/populov/maven\" }" - "\tmaven { url \"https://jitpack.io\" }" - "\tmaven { url 'http://maven.ghostscript.com/' }" - "\tmaven { url 'https://jitpack.io' }" - "\tmaven { url 'https://maven.fabric.io/public' }" - "\tmaven { url MAVEN_REPO }" - " maven {\n\t url 'https://jitpack.io'\n }" - " maven {\n url rootProject.ext.mavenRepo\n \ \ if (!rootProject.ext.mavenRepo.startsWith(\"file\")) {\n \ \ credentials {\n username rootProject.ext.mavenUser\n\ \ password rootProject.ext.mavenPassword\n \ \ }" - " maven {\n // All of React Native (JS, Obj-C sources, Android binaries)\ \ is installed from npm\n url \"$rootDir/libs/gutenberg-mobile/node_modules/react-native/android\"\ \n }" - " maven {\n url \"file:~/.m2/\"\n artifactUrls \"\ file:~/.m2/\"\n }" - " maven {\n url \"https://maven-central-asia.storage-download.googleapis.com/repos/central/data/\"\ \n content {\n excludeGroup(\"Kotlin/Native\"\ )\n }" - " maven {\n url \"https://maven-central-asia.storage-download.googleapis.com/repos/central/data/\"\ \n }" - " maven {\n url \"https://plugins.gradle.org/m2/\"\n }" - " maven {\n url \"https://repo.commonsware.com.s3.amazonaws.com\"\ \n }" - " maven {\n url 'https://maven.fabric.io/public'\n }" - " maven {\n // All of React Native (JS, Android binaries) is installed\ \ from npm\n url \"$rootDir/react/node_modules/react-native/android\"\ \n }" - " maven {\n // All of React Native (JS, Obj-C sources, Android binaries)\ \ is installed from npm\n // url \"$rootDir/../node_modules/react-native/android\"\ \n\n // Replace AAR from original RN with AAR from react-native-v8\n\ \ url(\"$rootDir/../node_modules/react-native-v8/dist\")\n }" - " maven {\n // All of React Native (JS, Obj-C sources, Android binaries)\ \ is installed from npm\n url \"$rootDir/../node_modules/react-native/android\"\ \n }" - " maven {\n // All of React Native (JS, Obj-C sources, Android binaries)\ \ is installed from npm\n url(\"$rootDir/../node_modules/react-native/android\"\ )\n }" - " maven {\n // Android JSC is installed from npm\n url(\"\ $rootDir/../node_modules/jsc-android/dist\")\n }" - " maven {\n // Android JSC is installed from npm\n url(\"\ $rootDir/react/node_modules/jsc-android/dist\")\n }" - " maven {\n // Local Maven repo containing AARs with JSC library built\ \ for Android\n // url \"$rootDir/../node_modules/jsc-android/dist\"\n\ \n // prebuilt libv8android.so\n url(\"$rootDir/../node_modules/v8-android/dist\"\ )\n }" - " maven {\n // Local Maven repo containing AARs with JSC library built\ \ for Android\n url \"$rootDir/../node_modules/jsc-android/dist\"\n \ \ }" - " maven {\n //noinspection GroovyAssignabilityCheck\n url\ \ 'https://jitpack.io'\n }" - " maven {\n //noinspection GroovyAssignabilityCheck\n url\ \ 'https://s3.amazonaws.com/moat-sdk-builds'\n }" - " maven {\n //url 'https://maven.google.com/'\n url 'https://jitpack.io'\n\ \ name 'Google'\n }" - " maven {\n name 'glide-snapshot'\n url 'http://oss.sonatype.org/content/repositories/snapshots'\n\ \ }" - " maven {\n name 'glide-snapshot'\n url 'https://oss.sonatype.org/content/repositories/snapshots'\n\ \ }" - " maven {\n name = \"sonatype\"\n\n def releasesRepoUrl =\ \ \"https://oss.sonatype.org/service/local/staging/deploy/maven2/\"\n \ \ def snapshotsRepoUrl = \"https://oss.sonatype.org/content/repositories/snapshots/\"\ \n url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl\n\ \n credentials {\n username ossrhUsername\n \ \ password ossrhPassword\n }" - " maven {\n url \"http://developer.huawei.com/repo/\"\n }" - " maven {\n url \"http://dl.bintray.com/dasar/maven\"\n }" - " maven {\n url \"http://dl.bintray.com/jenzz/maven\"\n }" - " maven {\n url \"http://dl.bintray.com/journeyapps/maven\"\n \ \ }" - " maven {\n url \"http://dl.bintray.com/lukaville/maven\"\n }" - " maven {\n url \"http://dl.bintray.com/ona/kujaku\"\n }" - " maven {\n url \"http://dl.bintray.com/piasy/maven\"\n content\ \ {\n includeGroupByRegex \"com\\\\.github\\\\.piasy\"\n \ \ }" - " maven {\n url \"http://kotlin.bintray.com/kotlin-dev\"\n \ \ content {\n excludeGroup(\"Kotlin/Native\")\n }" - " maven {\n url \"http://oss.sonatype.org/content/repositories/snapshots\"\ \n }" - " maven {\n url \"https://clojars.org/repo/\"\n }" - " maven {\n url \"https://dl.bintray.com/kotlin/ktor\"\n content\ \ {\n excludeGroup(\"Kotlin/Native\")\n }" - " maven {\n url \"https://dl.bintray.com/soywiz/soywiz\"\n \ \ content {\n excludeGroup(\"Kotlin/Native\")\n }" - " maven {\n url \"https://dl.bintray.com/wire-android/third-party\"\n\ \ }" - " maven {\n url \"https://github.com/vector-im/jitsi_libre_maven/raw/master/releases\"\ \n }" - " maven {\n url \"https://jitpack.io\"\n\n }" - " maven {\n url \"https://jitpack.io\"\n content {\n \ \ // For some reason gradle attempts to get bugsnag from here, which returns\ \ 522\n // after which gradle just drops jitpack. Exclude so it doesn't\ \ bother trying.\n excludeGroupByRegex \".*bugsnag.*\"\n \ \ }" - " maven {\n url \"https://jitpack.io\"\n content {\n \ \ excludeGroup(\"Kotlin/Native\")\n }" - " maven {\n url \"https://jitpack.io\"\n }" - " maven {\n url \"https://jitpack.io/\"\n }" - " maven {\n url \"https://kotlin.bintray.com/kotlinx\"\n content\ \ {\n excludeGroup(\"Kotlin/Native\")\n }" - " maven {\n url \"https://maven-central-asia.storage-download.googleapis.com/repos/central/data/\"\ \n }" - " maven {\n url \"https://maven.fabric.io/public\"\n }" - " maven {\n url \"https://maven.google.com\"\n name 'Google'\n\ \ }" - " maven {\n url \"https://maven.google.com\"\n }" - " maven {\n url \"https://maven.google.com/\"\n }" - " maven {\n url \"https://maven.mozilla.org/maven2\"\n }" - " maven {\n url \"https://oss.sonatype.org/content/repositories/snapshots\"\ \n }" - " maven {\n url \"https://oss.sonatype.org/content/repositories/snapshots/\"\ \n }" - " maven {\n url \"https://plugins.gradle.org/m2/\"\n }" - " maven {\n url \"https://repo1.maven.org/maven2\"\n jcenter()\n\ \ }" - " maven {\n url \"https://s3.amazonaws.com/repo.commonsware.com\"\n \ \ }" - " maven {\n url \"https://s3.amazonaws.com/repo.commonsware.com\"\n \ \ }" - " maven {\n url \"https://snapshots.maven.mozilla.org/maven2\"\n \ \ }" - " maven {\n url '${mavenUrl}" - " maven {\n url 'http://maven.aliyun.com/nexus/content/repositories/releases/'\n\ \ }" - " maven {\n url 'http://oss.sonatype.org/content/repositories/snapshots'\n\ \ }" - " maven {\n url 'http://oss.sonatype.org/content/repositories/snapshots/'\n\ \ }" - " maven {\n url 'http://www.idescout.com/maven/repo/'\n name\ \ 'IDEScout, Inc.'\n }" - " maven {\n url 'http://www.idescout.com/maven/repo/'\n }" - " maven {\n url 'https://clojars.org/repo'\n }" - " maven {\n url 'https://dl.bintray.com/alexeydanilov/maven'\n \ \ }" - " maven {\n url 'https://dl.bintray.com/drummer-aidan/maven'\n \ \ }" - " maven {\n url 'https://dl.bintray.com/kotlin/kotlin-eap'\n \ \ content {\n excludeGroup(\"Kotlin/Native\")\n }" - " maven {\n url 'https://github.com/suckgamony/RapidDecoder/raw/master/repository'\n\ \ }" - " maven {\n url 'https://github.com/uPhyca/stetho-realm/raw/master/maven-repo'\n\ \ }" - " maven {\n url 'https://jitpack.io'\n content {\n \ \ // Use this repo only for matrix SDK library\n includeGroupByRegex\ \ \"com\\\\.github\\\\.Bubu\"\n // Also add subgroups, due to SDK\ \ split into modules\n includeGroupByRegex \"com\\\\.github\\\\.Bubu\\\ \\.matrix-android-sdk\"\n // And Olm library\n includeGroupByRegex\ \ \"org\\\\.matrix\\\\.gitlab\\\\.matrix-org\"\n // And PhotoView\n\ \ includeGroupByRegex \"com\\\\.github\\\\.chrisbanes\"\n \ \ }" - " maven {\n url 'https://jitpack.io'\n content {\n \ \ // Use this repo only for olm library\n includeGroupByRegex\ \ \"org\\\\.matrix\\\\.gitlab\\\\.matrix-org\"\n // And also for\ \ FilePicker\n includeGroupByRegex \"com\\\\.github\\\\.jaiselrahman\"\ \n // And monarchy\n includeGroupByRegex \"com\\\\\ .github\\\\.Zhuinden\"\n // And ucrop\n includeGroupByRegex\ \ \"com\\\\.github\\\\.yalantis\"\n // JsonViewer\n \ \ includeGroupByRegex 'com\\\\.github\\\\.BillCarsonFr'\n }" - " maven {\n url 'https://jitpack.io'\n }" - " maven {\n url 'https://jitpack.io/'\n }" - " maven {\n url 'https://maven.aliyun.com/repository/google'\n \ \ name 'replace google()'\n }" - " maven {\n url 'https://maven.aliyun.com/repository/jcenter'\n \ \ name 'replace jcenter()'\n }" - " maven {\n url 'https://maven.aliyun.com/repository/public'\n \ \ name 'replace jcenter() and mavenCentral()'\n }" - " maven {\n url 'https://maven.fabric.io/public'\n }" - " maven {\n url 'https://maven.google.com'\n // Alternative\ \ URL is 'https://dl.google.com/dl/android/maven2/'\n }" - " maven {\n url 'https://maven.google.com'\n }" - " maven {\n url 'https://maven.google.com/'\n name 'Google'\n\ \ }" - " maven {\n url 'https://maven.google.com/'\n }" - " maven {\n url 'https://oss.sonatype.org/content/groups/public'\n \ \ }" - " maven {\n url 'https://oss.sonatype.org/content/repositories/snapshots'\n\ \ }" - " maven {\n url 'https://oss.sonatype.org/content/repositories/snapshots/'\n\ \ content {\n excludeGroup(\"Kotlin/Native\")\n \ \ }" - " maven {\n url 'https://oss.sonatype.org/content/repositories/snapshots/'\n\ \ }" - " maven {\n url 'https://plugins.gradle.org/m2'\n }" - " maven {\n url 'https://plugins.gradle.org/m2/'\n }" - " maven {\n url 'https://www.jitpack.io'\n }" - " maven {\n url rootProject.ext.mavenRepo\n if (!rootProject.ext.mavenRepo.startsWith(\"\ file\")) {\n credentials {\n username rootProject.ext.mavenUser\n\ \ password rootProject.ext.mavenPassword\n }" - " maven {\n url 'https://maven.fabric.io/public'\n }" - " maven {\n url 'https://maven.google.com/'\n }" - " maven {\n credentials {\n username System.env.ANDVIANE_USERNAME\n password System.env.ANDVIANE_PASSWORD\n }\n //url 'https://oss.sonatype.org/content/repositories/snapshots'\n url 'https://oss.sonatype.org/service/local/staging/deploy/maven2'\n }" - " maven {\n // CUTR Releases\n url \"https://github.com/CUTR-at-USF/cutr-mvn-repo/raw/master/snapshots\"\ \n }" - " maven {\n // Git project library as local library project (ucrop) - see\ \ https://jitpack.io/docs/\n url 'https://jitpack.io'\n }" - " maven {\n // Need manual cleanup for new SNAPSHOT update if same name with\ \ date change only:\n // Smack official SNAPSHOT repository accepted by F-Droid\n\ \ url 'https://oss.sonatype.org/content/repositories/snapshots'\n\n \ \ // Smack custom library for org.igniterealtime - not recognize by F-Droid\n\ \ // url 'https://igniterealtime.org/repo/'\n\n // Custom library\ \ for org.jitsi - maven-metadata.xml not compatible\n // Unable to load Maven\ \ meta-data from https://github.com/jitsi/jitsi-maven-repository/tree/master/snapshots/org/jitsi/ice4j/2.0.0-SNAPSHOT/maven-metadata.xml.\n\ \ // org.xml.sax.SAXParseException; lineNumber: 44; columnNumber: 91; Attribute\ \ name \"data-pjax-transient\" associated with an element type \"meta\" must be\ \ followed by the ' = ' character.\n // url 'https://github.com/jitsi/jitsi-maven-repository/tree/master/snapshots'\n\ \ }" - " maven {\n // OBA Releases - for comparator to sort alphanumeric routes\n\ \ url \"http://nexus.onebusaway.org/nexus/content/repositories/releases\"\ \n }" - " maven {\n // TODO: Remove this after support library v24 public release.\n\ \ url \"$rootDir/prebuilts/fullsdk/extras/android/m2repository\"\n }" - " maven {\n // This maven repo contains artifacts for Flutter's Android embedding.\n\ \ url 'http://download.flutter.io'\n }" - " maven {\n // This maven repo is created when you run `flutter build aar`.\ \ It contains compiled code\n // and resources for flutter_module itself.\n\ \ url '../../flutter_module/build/host/outputs/repo'\n }" - " maven {\n // Used only for PhotoView\n url \"https://jitpack.io\"\ \n name 'JitPack Github wrapper'\n }" - " maven {\n // for Amazon Maps\n url uri('../.m2/repository')\n \ \ }" - " maven {\n // for testlib\n url \"http://dl.bintray.com/acrowntest/ES_SDK\"\ \n }" - " maven {\n //url 'https://maven.google.com/'\n url 'https://jitpack.io'\n\ \ name 'Google'\n }" - " maven {\n url \"http://4thline.org/m2\"\n }" - " maven {\n url \"http://maven.chunyu.mobi/content/groups/public/\"\n \ \ credentials {\n username maven_user\n password maven_password\n\ \ }" - " maven {\n url \"https://dl.google.com/dl/android/maven2/\"\n }" - " maven {\n url \"https://jitpack.io\"\n }" - " maven {\n url \"https://maven.fabric.io/public\"\n }" - " maven {\n url \"https://maven.google.com\"\n }" - " maven {\n url \"https://oss.sonatype.org/content/repositories/releases\"\ \n }" - " maven {\n url \"https://oss.sonatype.org/content/repositories/snapshots\"\ \n }" - " maven {\n url \"https://repo.eclipse.org/content/repositories/paho-releases/\"\ \n }" - " maven {\n url '../..'\n }" - " maven {\n url 'https://dl.bintray.com/amulyakhare/maven'\n }" - " maven {\n url 'https://github.com/Goddchen/mvn-repo/raw/master/'\n }" - " maven {\n url 'https://jitpack.io'\n }" - " maven {\n url 'https://maven.fabric.io/public'\n }" - " maven {\n url 'https://maven.google.com'\n // Alternative URL is\ \ 'https://dl.google.com/dl/android/maven2/'\n url \"https://jitpack.io\"\ \n }" - " maven {\n url 'https://maven.google.com'\n }" - " maven {\n url 'https://maven.google.com/'\n name 'Google'\n }" - " maven {\n url 'https://oss.sonatype.org/content/repositories/snapshots'\n\ \ }" - " maven {\n url 'https://oss.sonatype.org/content/repositories/snapshots/'\n\ \ }" - " maven {\n url 'https://raw.githubusercontent.com/felixb/mvn-repo/master'\n\ \ }" - " maven {\n url 'third_party/m2'\n }" - " maven {\n url xwalkMavenRepo\n }" - " maven {\n url(\"https://maven.fabric.io/public\")\n }" - " maven {\n url(\"https://oss.sonatype.org/content/repositories/snapshots\"\ )\n }" - " maven {\n url \"$buildDir/repo\"\n }" - " maven {\n url \"https://jitpack.io\"\n }" - " maven {\n url \"https://maven.google.com\"\n }" - " maven {\n url \"https://oss.sonatype.org/content/repositories/snapshots/\"\ \n }" - " maven {\n url \"https://plugins.gradle.org/m2/\"\n }" - " maven {\n url 'http://download.crashlytics.com/maven'\n }" - " maven {\n url 'https://clojars.org/repo/'\n }" - " maven {\n url 'https://maven.fabric.io/public'\n }" - " maven {\n url 'https://oss.sonatype.org/content/repositories/snapshots/'\n\ \ }" - " maven {\n url 'https://raw.github.com/ark/ark/master/releases/'\n }" - " maven {\n url 'https://raw.github.com/iFixit/ark/master/releases/'\n }" - " maven {\n setUrl(\"https://plugins.gradle.org/m2/\")\n }" - " maven {\n url 'https://maven.google.com'\n }" - ' maven { // url "https://jitpack.io" // url "https://maven-central.storage.googleapis.com" // url "http://repo.spring.io/plugins-release/" // }' - ' maven { url "https://maven.google.com" }' - ' maven { setUrl("https://www.jitpack.io") }' - ' maven { url "https://dl.bintray.com/bjoernq/maven" }' - ' maven { url "https://dl.bintray.com/ligi/maven" }' - ' maven { url "https://dl.bintray.com/lukaville/maven" }' - ' maven { url "https://jetbrains.bintray.com/trove4j" }' - ' maven { url "$rootDir/../node_modules/react-native/android" }' - ' maven { url "file:///home/snowdream/workspace/git/mvn-repo/releases/" }' - ' maven { url "file:///home/snowdream/workspace/git/mvn-repo/snapshots/" }' - ' maven { url "http://dl.bintray.com/arturbosch/code-analysis" }' - ' maven { url "http://dl.bintray.com/countly/maven" }' - ' maven { url "http://dl.bintray.com/drummer-aidan/maven" }' - ' maven { url "http://dl.bintray.com/drummer-aidan/maven/com/afollestad" }' - ' maven { url "http://dl.bintray.com/lukaville/maven" }' - ' maven { url "http://dl.bintray.com/mobisystech/maven" }' - ' maven { url "http://dl.bintray.com/populov/maven" }' - ' maven { url "http://kotlin.bintray.com/kotlin-dev" }' - ' maven { url "http://maven.batch.com/release" }' - ' maven { url "http://objectbox.net/beta-repo/" }' - ' maven { url "http://oss.sonatype.org/content/repositories/snapshots/" }' - ' maven { url "http://repo.commonsware.com.s3.amazonaws.com" }' - ' maven { url "http://repo1.maven.org/maven2" }' - ' maven { url "http://repository.apache.org/snapshots/" }' - ' maven { url "http://snowdream.github.io/mvn-repo/releases/" }' - ' maven { url "http://snowdream.github.io/mvn-repo/snapshots/" }' - ' maven { url "http://storage.googleapis.com/r8-releases/raw/master" }' - ' maven { url "https://clojars.org/repo" }' - ' maven { url "https://clojars.org/repo/" }' - ' maven { url "https://dl.bintray.com/acra/maven" }' - ' maven { url "https://dl.bintray.com/asf/asf" }' - ' maven { url "https://dl.bintray.com/badoo/maven" }' - ' maven { url "https://dl.bintray.com/dasar/maven" }' - ' maven { url "https://dl.bintray.com/drummer-aidan/maven" }' - ' maven { url "https://dl.bintray.com/florent37/maven" }' - ' maven { url "https://dl.bintray.com/gericop/maven" }' - ' maven { url "https://dl.bintray.com/kotlin/ktor" }' - ' maven { url "https://dl.bintray.com/markusamshove/maven" }' - ' maven { url "https://dl.bintray.com/mockito/maven" }' - ' maven { url "https://dl.bintray.com/robstoll/tutteli-jars" }' - ' maven { url "https://dl.bintray.com/videolan/Android" }' - ' maven { url "https://dl.bintray.com/wire-android/releases" }' - ' maven { url "https://dl.bintray.com/wire-android/releases/" }' - ' maven { url "https://dl.bintray.com/wire-android/snapshots" }' - ' maven { url "https://dl.bintray.com/wire-android/snapshots/" }' - ' maven { url "https://dl.bintray.com/wire-android/third-party" }' - ' maven { url "https://dl.bintray.com/wire-android/third-party/" }' - ' maven { url "https://dl.bintray.com/wordpress-mobile/maven" }' - ' maven { url "https://dl.bintray.com/wordpress-mobile/react-native-mirror/" }' - ' maven { url "https://fusesource.github.io/jansi/" }' - ' maven { url "https://giphy.bintray.com/giphy-sdk" }' - ' maven { url "https://github.com/jitsi/jitsi-maven-repository/raw/master/releases" }' - ' maven { url "https://jcenter.bintray.com" }' - " maven { url \"https://jitpack.io\"\n }" - ' maven { url "https://jitpack.io" }' - ' maven { url "https://jitpack.io"}' - ' maven { url "https://kotlin.bintray.com/kotlinx" }' - ' maven { url "https://mapbox.bintray.com/mapbox" }' - ' maven { url "https://maven-central-asia.storage-download.googleapis.com/repos/central/data/" }' - ' maven { url "https://maven.fabric.io/public" }' - " maven { url \"https://maven.google.com\"\n }" - ' maven { url "https://maven.google.com" }' - ' maven { url "https://maven.google.com"}' - ' maven { url "https://maven.google.com/" }' - ' maven { url "https://oss.sonatype.org/content/groups/public" }' - ' maven { url "https://oss.sonatype.org/content/groups/public/" }' - ' maven { url "https://oss.sonatype.org/content/repositories/releases/" }' - ' maven { url "https://oss.sonatype.org/content/repositories/snapshots" }' - ' maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }' - ' maven { url "https://plugins.gradle.org/m2" }' - ' maven { url "https://plugins.gradle.org/m2/" }' - ' maven { url "https://plugins.gradle.org/m2/"}' - ' maven { url "https://raw.githubusercontent.com/guardianproject/gpmaven/master" }' - ' maven { url "https://repo.commonsware.com.s3.amazonaws.com" }' - ' maven { url "https://repo.eclipse.org/content/groups/releases" }' - ' maven { url "https://repo.maven.apache.org/maven2" }' - ' maven { url "https://repo1.maven.org/maven2/" }' - ' maven { url "https://s3.amazonaws.com/moat-sdk-builds" }' - ' maven { url "https://s3.amazonaws.com/repo.commonsware.com" }' - ' maven { url "https://www.jitpack.io" }' - ' maven { url ''file:///usr/share/maven-repo'' }' - ' maven { url ''http://dl.bintray.com/amulyakhare/maven'' }' - ' maven { url ''http://download.crashlytics.com/maven'' }' - ' maven { url ''http://guardian.github.com/maven/repo-releases'' }' - ' maven { url ''http://igniterealtime.org/repo'' }' - ' maven { url ''http://maven.ghostscript.com/'' }' - ' maven { url ''http://nexus.testobject.org/nexus/content/repositories/testobject-public-alpha-repo'' }' - ' maven { url ''http://oss.sonatype.org/content/repositories/snapshots'' }' - ' maven { url ''http://repo1.maven.org/maven2'' }' - ' maven { url ''http://wordpress-mobile.github.io/WordPress-Android'' }' - ' maven { url ''https://dl.bintray.com/badoo/maven'' }' - ' maven { url ''https://dl.bintray.com/content/simonpoole/android'' }' - ' maven { url ''https://dl.bintray.com/content/simonpoole/div'' }' - ' maven { url ''https://dl.bintray.com/content/simonpoole/osm'' }' - ' maven { url ''https://dl.bintray.com/florent37/maven'' }' - ' maven { url ''https://dl.bintray.com/intercom/intercom-maven'' }' - ' maven { url ''https://dl.bintray.com/jenly/maven'' }' - ' maven { url ''https://dl.bintray.com/jetbrains/anko'' }' - ' maven { url ''https://dl.bintray.com/kotlin/kotlin-eap'' }' - ' maven { url ''https://dl.bintray.com/twofortyfouram/maven'' }' - ' maven { url ''https://dl.bintray.com/umsdk/release'' }' - ' maven { url ''https://dl.google.com/dl/android/maven2/'' }' - ' maven { url ''https://github.com/FireZenk/maven-repo/raw/master/'' }' - ' maven { url ''https://github.com/uPhyca/stetho-realm/raw/master/maven-repo'' }' - ' maven { url ''https://guardian.github.com/maven/repo-releases'' }' - ' maven { url ''https://igniterealtime.org/repo'' }' - ' maven { url ''https://jitpack.io'' }' - ' maven { url ''https://jitpack.io/'' }' - ' maven { url ''https://maven.fabric.io/public'' }' - ' maven { url ''https://maven.fabric.io/repo'' }' - ' maven { url ''https://maven.google.com'' }' - ' maven { url ''https://maven.google.com/'' }' - ' maven { url ''https://oss.jfrog.org/artifactory/oss-snapshot-local/'' }' - ' maven { url ''https://oss.sonatype.org/content/repositories/releases/'' }' - ' maven { url ''https://oss.sonatype.org/content/repositories/snapshots'' }' - ' maven { url ''https://oss.sonatype.org/content/repositories/snapshots/'' }' - ' maven { url ''https://plugins.gradle.org/m2/'' }' - ' maven { url ''https://plugins.gradle.org/m2/''}' - ' maven { url ''https://repo1.maven.org/maven2'' }' - ' maven { url ''https://repos.zeroturnaround.com/nexus/content/repositories/zt-public-releases'' }' - ' maven { url ''https://repository-achartengine.forge.cloudbees.com/snapshot/'' }' - ' maven { url ''https://s3.amazonaws.com/repo.commonsware.com'' }' - ' maven { url ''https://www.jitpack.io'' }' - ' maven { url ''https://zendesk.jfrog.io/zendesk/repo'' }' - ' maven { url ''libs'' }' - ' maven { url = "https://storage.googleapis.com/r8-releases/raw" }' - ' maven { url = uri("https://jitpack.io") }' - ' maven { url = uri("https://maven.fabric.io/public") }' - ' maven { url MAVEN_REPO_CACHE }' - ' maven { url(''http://releases.marmeladburk.fidesmo.com/'') }' - ' maven {url "http://dl.bintray.com/tbruyelle/tbruyelle" }' - ' maven {url "https://jitpack.io"}' - ' maven {url ''http://maven.aliyun.com/nexus/content/groups/public/''}' - " maven{\n url 'https://maven.fabric.io/public'\n }" - " maven{\n url'https://plugins.gradle.org/m2/'\n }" - " maven{\n url \"https://maven.google.com\"\n }" - " maven{\n url 'https://maven.google.com'\n }" - ' maven{ url "https://oss.sonatype.org/content/repositories/releases/" }' - ' maven{ url "https://oss.sonatype.org/content/repositories/snapshots/" }' - ' maven{ url ''http://maven.aliyun.com/nexus/content/groups/public/''}' - ' maven{ url ''https://jitpack.io'' }' - ' maven{ url ''https://maven.aliyun.com/repository/google'' }' - ' maven{ url ''https://maven.aliyun.com/repository/google''}' - ' maven{ url ''https://maven.aliyun.com/repository/gradle-plugin''}' - ' maven{ url ''https://maven.aliyun.com/repository/jcenter'' }' - ' maven{ url ''https://maven.aliyun.com/repository/jcenter''}' - ' maven{ url ''https://maven.aliyun.com/repository/public''}' - ' maven{url "https://plugins.gradle.org/m2/"}' - ' maven{url ''http://maven.aliyun.com/nexus/content/groups/public''}' - "\tmaven {\n\t\t\t\turl \"https://oss.sonatype.org/content/repositories/snapshots\"\ \n\t\t\t}" - "\tmaven {\n\t\t\turl \"$rootDir/../node_modules/react-native-background-fetch/android/libs\"\ \n\t\t}" - "\tmaven {\n\t\t\turl \"https://jitpack.io\"\n\t\t}" - "\tmaven {\n\t\t\turl \"https://plugins.gradle.org/m2/\"\n\t\t}" - "\tmaven {\n\t\t\turl 'http://4thline.org/m2'\n\t\t}" - "\tmaven {\n\t\t\turl 'https://maven.google.com/'\n\t\t\tname 'Google'\n\t\t}" - "\tmaven {\n\t\t\turl 'https://plugins.gradle.org/m2/'\n\t\t}" - "\tmaven {\n\t\turl \"file://$pwd/.m2repo\"\n\t}" - "\tmaven {\n\t\turl \"https://jitpack.io\"\n\t}" - "\tmaven {\n\t\turl 'https://maven.google.com/'\n\t\tname 'Google'\n\t}" - "\tmaven {\n // Google Maven Repository\n url 'https://maven.google.com'\n\ \ }" - "\tmaven { url \"http://dl.bintray.com/populov/maven\" }" - "\tmaven { url \"https://jitpack.io\" }" - "\tmaven { url 'http://download.crashlytics.com/maven' }" - "\tmaven { url 'http://maven.ghostscript.com/' }" - "\tmaven { url 'https://jitpack.io' }" - "\tmaven { url 'https://maven.fabric.io/public' }" - "\tmaven { url MAVEN_REPO }" - ' maven { url "http://repo1.maven.org/maven2" }' - " maven {\n\t url 'https://jitpack.io'\n }" - " maven {\n\t url System.getenv()['ANDROID_HOME'] + \"/extras/android/m2repository\"\ \n }" - " maven {\n url \"$buildDir/repo\"\n }" - " maven {\n url \"file:~/.m2/\"\n artifactUrls \"\ file:~/.m2/\"\n }" - " maven {\n url \"https://oss.sonatype.org/content/repositories/snapshots\"\ \n }" - " maven {\n url \"https://plugins.gradle.org/m2/\"\n }" - " maven {\n url 'https://maven.fabric.io/public'\n }" - " maven {\n url repository\n }" - " maven {\n // All of React Native (JS, Obj-C sources, Android binaries)\ \ is installed from npm\n // url \"$rootDir/../node_modules/react-native/android\"\ \n\n // Replace AAR from original RN with AAR from react-native-v8\n\ \ url(\"$rootDir/../node_modules/react-native-v8/dist\")\n }" - " maven {\n // All of React Native (JS, Obj-C sources, Android binaries)\ \ is installed from npm\n url \"$projectDir/../../node_modules/react-native/android\"\ \n }" - " maven {\n // All of React Native (JS, Obj-C sources, Android binaries)\ \ is installed from npm\n url \"$projectDir/../../tests/react-test-app/node_modules/react-native/android\"\ \n }" - " maven {\n // All of React Native (JS, Obj-C sources, Android binaries)\ \ is installed from npm\n url \"$rootDir/../node_modules/react-native/android\"\ \n }" - " maven {\n // All of React Native (JS, Obj-C sources, Android binaries)\ \ is installed from npm\n url(\"$rootDir/../node_modules/react-native/android\"\ )\n }" - " maven {\n // Android JSC is installed from npm\n url(\"\ $rootDir/../node_modules/jsc-android/dist\")\n }" - " maven {\n // Local Maven repo containing AARs with JSC library built\ \ for Android\n // url \"$rootDir/../node_modules/jsc-android/dist\"\n\ \n // prebuilt libv8android.so\n url(\"$rootDir/../node_modules/v8-android/dist\"\ )\n }" - " maven {\n //noinspection GroovyAssignabilityCheck\n url\ \ 'https://jitpack.io'\n }" - " maven {\n //noinspection GroovyAssignabilityCheck\n url\ \ 'https://s3.amazonaws.com/moat-sdk-builds'\n }" - " maven {\n //url 'https://maven.google.com/'\n url 'https://jitpack.io'\n\ \ name 'Google'\n }" - " maven {\n name 'glide-snapshot'\n url 'http://oss.sonatype.org/content/repositories/snapshots'\n\ \ }" - " maven {\n url \"http://dl.bintray.com/countly/maven\"\n }" - " maven {\n url \"./maven_repository/\"\n }" - " maven {\n url \"http://dl.bintray.com/dasar/maven\"\n }" - " maven {\n url \"http://dl.bintray.com/jenzz/maven\"\n }" - " maven {\n url \"http://dl.bintray.com/journeyapps/maven\"\n \ \ }" - " maven {\n url \"http://dl.bintray.com/lukaville/maven\"\n }" - " maven {\n url \"https://clojars.org/repo/\"\n }" - " maven {\n url \"https://dl.bintray.com/videolan/Android\"\n \ \ }" - " maven {\n url \"https://github.com/jitsi/jitsi-maven-repository/raw/master/releases\"\ \n }" - " maven {\n url \"https://github.com/vector-im/jitsi_libre_maven/raw/master/releases\"\ \n }" - " maven {\n url \"https://jcenter.bintray.com\"\n }" - " maven {\n url \"https://jitpack.io\"\n\n }" - " maven {\n url \"https://jitpack.io\"\n content {\n \ \ // For some reason gradle attempts to get bugsnag from here, which returns\ \ 522\n // after which gradle just drops jitpack. Exclude so it doesn't\ \ bother trying.\n excludeGroupByRegex \".*bugsnag.*\"\n \ \ }" - " maven {\n url \"https://jitpack.io\"\n }" - " maven {\n url \"https://jitpack.io/\"\n }" - " maven {\n url \"https://maven.fabric.io/public\"\n }" - " maven {\n url \"https://maven.google.com\"\n name 'Google'\n\ \ }" - " maven {\n url \"https://maven.google.com\"\n }" - " maven {\n url \"https://maven.google.com/\"\n name 'Google'\n\ \ }" - " maven {\n url \"https://maven.mozilla.org/maven2\"\n }" - " maven {\n url \"https://oss.sonatype.org/content/repositories/snapshots\"\ \n }" - " maven {\n url \"https://oss.sonatype.org/content/repositories/snapshots/\"\ \n }" - " maven {\n url \"https://plugins.gradle.org/m2/\"\n }" - " maven {\n url \"https://repo1.maven.org/maven2\"\n jcenter()\n\ \ }" - " maven {\n url \"https://repo1.maven.org/maven2\"\n }" - " maven {\n url \"https://s3.amazonaws.com/repo.commonsware.com\"\n \ \ }" - " maven {\n url \"https://s3.amazonaws.com/repo.commonsware.com\"\n \ \ }" - " maven {\n url 'http://oss.sonatype.org/content/repositories/snapshots'\n\ \ }" - " maven {\n url 'http://oss.sonatype.org/content/repositories/snapshots/'\n\ \ }" - " maven {\n url 'http://www.idescout.com/maven/repo/'\n name\ \ 'IDEScout, Inc.'\n }" - " maven {\n url 'https://github.com/suckgamony/RapidDecoder/raw/master/repository'\n\ \ }" - " maven {\n url 'https://jitpack.io'\n content {\n \ \ // Use this repo only for matrix SDK library\n includeGroupByRegex\ \ \"com\\\\.github\\\\.Bubu\"\n // Also add subgroups, due to SDK\ \ split into modules\n includeGroupByRegex \"com\\\\.github\\\\.Bubu\\\ \\.matrix-android-sdk\"\n // And Olm library\n includeGroupByRegex\ \ \"org\\\\.matrix\\\\.gitlab\\\\.matrix-org\"\n // And PhotoView\n\ \ includeGroupByRegex \"com\\\\.github\\\\.chrisbanes\"\n \ \ }" - " maven {\n url 'https://jitpack.io'\n content {\n \ \ // Use this repo only for matrix SDK library\n includeGroupByRegex\ \ \"com\\\\.github\\\\.matrix-org\"\n // Also add subgroups, due\ \ to SDK split into modules\n includeGroupByRegex \"com\\\\.github\\\ \\.matrix-org\\\\.matrix-android-sdk\"\n // And Olm library\n \ \ includeGroupByRegex \"org\\\\.matrix\\\\.gitlab\\\\.matrix-org\"\n\ \ // And PhotoView\n includeGroupByRegex \"com\\\\\ .github\\\\.chrisbanes\"\n }" - " maven {\n url 'https://jitpack.io'\n }" - " maven {\n url 'https://maven.fabric.io/public'\n }" - " maven {\n url 'https://maven.google.com'\n }" - " maven {\n url 'https://maven.google.com/'\n name 'Google'\n\ \ }" - " maven {\n url 'https://maven.google.com/'\n }" - " maven {\n url 'https://mint.splunk.com/gradle/'\n }" - " maven {\n url 'https://oss.sonatype.org/content/groups/public'\n \ \ }" - " maven {\n url 'https://oss.sonatype.org/content/repositories/snapshots'\n\ \ }" - " maven {\n url 'https://oss.sonatype.org/content/repositories/snapshots/'\n\ \ }" - " maven {\n url 'https://plugins.gradle.org/m2/'\n }" - " maven {\n url 'https://www.jitpack.io'\n }" - " maven {\n url = \"${project.buildDir}" - " maven {\n url(\"$rootDir/../node_modules/jsc-android/dist\")\n \ \ }" - " maven {\n url(\"$rootDir/../node_modules/react-native/android\")\n\ \ }" - " maven {\n // For the latest version of GeckoView (moving target!) use:\n\ \ // https://index.taskcluster.net/v1/task/gecko.v2.mozilla-central.nightly.latest.mobile.android-api-16-opt/artifacts/public/android/maven\n\ \ //\n // For discovering available versions go to:\n // \ \ https://tools.taskcluster.net/index/gecko.v2.mozilla-central.nightly\n\n \ \ // ARM GeckoView builds\n url \"https://index.taskcluster.net/v1/task/gecko.v2.mozilla-central.nightly\"\ \ +\n \".${geckoview_nightly_date}" - " maven {\n // Replace snapshots by releases for releases !\n url\ \ \"https://linphone.org/snapshots/maven_repository\"\n }" - " maven {\n // Switch to release for releases !\n url \"https://gitlab.linphone.org/BC/public/maven_repository/raw/master\"\ \n }" - " maven {\n // TODO: Remove this after support library v24 public release.\n\ \ url \"$rootDir/prebuilts/fullsdk/extras/android/m2repository\"\n }" - " maven {\n // Used only for PhotoView\n url \"https://jitpack.io\"\ \n name 'JitPack Github wrapper'\n }" - " maven {\n // aarch64 builds\n url \"https://index.taskcluster.net/v1/task/gecko.v2.mozilla-central.nightly\"\ \ +\n \".${geckoview_nightly_date}" - " maven {\n // x86 GeckoView builds\n url \"https://index.taskcluster.net/v1/task/gecko.v2.mozilla-central.nightly\"\ \ +\n \".${geckoview_nightly_date}" - " maven {\n //url 'https://maven.google.com/'\n url 'https://jitpack.io'\n\ \ name 'Google'\n }" - " maven {\n url \"http://4thline.org/m2\"\n }" - " maven {\n url \"http://dl.bintray.com/lukaville/maven\"\n }" - " maven {\n url \"https://dl.google.com/dl/android/maven2/\"\n }" - " maven {\n url \"https://jitpack.io\"\n }" - " maven {\n url \"https://linphone.org/maven_repository\"\n }" - " maven {\n url \"https://maven.fabric.io/public\"\n }" - " maven {\n url \"https://maven.google.com\"\n }" - " maven {\n url \"https://oss.sonatype.org/content/repositories/snapshots\"\ \n }" - " maven {\n url \"https://repo.commonsware.com.s3.amazonaws.com\"\n }" - " maven {\n url \"https://repo1.maven.org/maven2/\"\n }" - " maven {\n url 'http://4thline.org/m2'\n }" - " maven {\n url 'http://dl.bintray.com/amulyakhare/maven'\n }" - " maven {\n url 'https://dl.bintray.com/amulyakhare/maven'\n }" - " maven {\n url 'https://github.com/Goddchen/mvn-repo/raw/master/'\n }" - " maven {\n url 'https://github.com/toxbee/mvn-repo/raw/master/maven-deploy'\n\ \ }" - " maven {\n url 'https://jitpack.io'\n }" - " maven {\n url 'https://maven.fabric.io/public'\n }" - " maven {\n url 'https://maven.google.com'\n // Alternative URL is\ \ 'https://dl.google.com/dl/android/maven2/'\n url \"https://jitpack.io\"\ \n }" - " maven {\n url 'https://maven.google.com'\n }" - " maven {\n url 'https://maven.google.com/'\n name 'Google'\n }" - " maven {\n url 'https://oss.sonatype.org/content/repositories/snapshots'\n\ \ }" - " maven {\n url 'https://oss.sonatype.org/content/repositories/snapshots/'\n\ \ }" - " maven {\n url 'https://raw.github.com/nicolasjafelle/maven-repo/master/'\n\ \ }" - " maven {\n url 'https://raw.githubusercontent.com/felixb/mvn-repo/master'\n\ \ }" - " maven {\n url xwalkMavenRepo\n }" - " maven {\n url \"https://github.com/Goddchen/mvn-repo/raw/master/\"\n }" - " maven {\n url \"https://github.com/dahlgren/abs-aar/raw/master\"\n }" - " maven {\n url \"https://jcenter.bintray.com\"\n }" - " maven {\n url \"https://repo.commonsware.com.s3.amazonaws.com\"\n }" - " maven {\n url 'http://download.crashlytics.com/maven'\n }" - " maven {\n url 'https://maven.google.com/'\n name 'Google'\n }" - " maven {\n url 'https://raw.github.com/ark/ark/master/releases/'\n }" - " maven {\n url 'https://raw.github.com/iFixit/ark/master/releases/'\n }" - " maven {\n setUrl(\"https://plugins.gradle.org/m2/\")\n }" - " maven {\n url 'https://maven.google.com'\n }" - ' maven { // url "https://jitpack.io" // url "https://maven-central.storage.googleapis.com" // url "http://repo.spring.io/plugins-release/" // }' - ' maven { url "https://maven.google.com" }' - ' maven { setUrl("https://plugins.gradle.org/m2/") }' - ' maven { setUrl("https://www.jitpack.io") }' - ' maven { url "http://dl.bintray.com/dasar/maven" }' - ' maven { url "https://dl.bintray.com/bjoernq/maven" }' - ' maven { url "https://dl.bintray.com/ligi/maven" }' - ' maven { url "https://dl.bintray.com/lukaville/maven" }' - ' maven { url "https://jetbrains.bintray.com/trove4j" }' - ' maven { url "$rootDir/../node_modules/react-native/android" }' - ' maven { url "file:${rootProject.projectDir}' - ' maven { url "http://dl.bintray.com/amulyakhare/maven" }' - ' maven { url "http://dl.bintray.com/arturbosch/code-analysis" }' - ' maven { url "http://dl.bintray.com/countly/maven" }' - ' maven { url "http://dl.bintray.com/davideas/maven" }' - ' maven { url "http://dl.bintray.com/drummer-aidan/maven" }' - ' maven { url "http://dl.bintray.com/drummer-aidan/maven/com/afollestad" }' - ' maven { url "http://dl.bintray.com/lukaville/maven" }' - ' maven { url "http://dl.bintray.com/populov/maven" }' - ' maven { url "http://objectbox.net/beta-repo/" }' - ' maven { url "http://repo.commonsware.com.s3.amazonaws.com" }' - ' maven { url "http://repo.maven.apache.org/maven2" }' - ' maven { url "https://clojars.org/repo" }' - ' maven { url "https://clojars.org/repo/" }' - ' maven { url "https://dl.bintray.com/android/android-tools/" }' - ' maven { url "https://dl.bintray.com/drummer-aidan/maven" }' - ' maven { url "https://dl.bintray.com/markusamshove/maven" }' - ' maven { url "https://dl.bintray.com/mockito/maven/" }' - ' maven { url "https://dl.bintray.com/osborn/Android" }' - ' maven { url "https://github.com/jitsi/jitsi-maven-repository/raw/master/releases" }' - ' maven { url "https://jcenter.bintray.com" }' - " maven { url \"https://jitpack.io\"\n }" - ' maven { url "https://jitpack.io" }' - ' maven { url "https://jitpack.io"}' - ' maven { url "https://kotlin.bintray.com/kotlinx" }' - ' maven { url "https://maven.fabric.io/public" }' - " maven { url \"https://maven.google.com\"\n }" - ' maven { url "https://maven.google.com" }' - ' maven { url "https://maven.google.com"}' - ' maven { url "https://maven.google.com/" }' - ' maven { url "https://oss.sonatype.org/content/groups/public" }' - ' maven { url "https://oss.sonatype.org/content/groups/public/" }' - ' maven { url "https://oss.sonatype.org/content/repositories/releases/" }' - ' maven { url "https://oss.sonatype.org/content/repositories/snapshots" }' - ' maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }' - ' maven { url "https://plugins.gradle.org/m2" }' - ' maven { url "https://plugins.gradle.org/m2/" }' - ' maven { url "https://plugins.gradle.org/m2/"}' - ' maven { url "https://repo.commonsware.com.s3.amazonaws.com" }' - ' maven { url "https://repo.commonsware.com.s3.amazonaws.com"}' - ' maven { url "https://repo.eclipse.org/content/groups/releases" }' - ' maven { url "https://repo.maven.apache.org/maven2" }' - ' maven { url "https://repository.aspose.com/repo/" }' - ' maven { url "https://s3.amazonaws.com/repo.commonsware.com" }' - ' maven { url "https://www.jitpack.io" }' - ' maven { url ''../../prebuilts/gradle-plugin'' }' - ' maven { url ''../../prebuilts/tools/common/m2/internal'' }' - ' maven { url ''../../prebuilts/tools/common/m2/repository'' }' - ' maven { url ''file:///usr/share/maven-repo'' }' - ' maven { url ''http://dl.bintray.com/amulyakhare/maven'' }' - ' maven { url ''http://download.crashlytics.com/maven'' }' - ' maven { url ''http://guardian.github.com/maven/repo-releases'' }' - ' maven { url ''http://igniterealtime.org/repo'' }' - ' maven { url ''http://repo1.maven.org/maven2'' }' - ' maven { url ''http://wordpress-mobile.github.io/WordPress-Android'' }' - ' maven { url ''https://dl.bintray.com/content/simonpoole/android'' }' - ' maven { url ''https://dl.bintray.com/content/simonpoole/div'' }' - ' maven { url ''https://dl.bintray.com/content/simonpoole/osm'' }' - ' maven { url ''https://dl.bintray.com/twofortyfouram/maven'' }' - ' maven { url ''https://dl.google.com/dl/android/maven2/'' }' - ' maven { url ''https://guardian.github.com/maven/repo-releases'' }' - ' maven { url ''https://igniterealtime.org/repo'' }' - ' maven { url ''https://jitpack.io'' }' - ' maven { url ''https://jitpack.io/'' }' - ' maven { url ''https://maven.fabric.io/public'' }' - ' maven { url ''https://maven.fabric.io/repo'' }' - ' maven { url ''https://maven.google.com'' }' - ' maven { url ''https://maven.google.com''}' - ' maven { url ''https://maven.google.com/'' }' - ' maven { url ''https://oss.jfrog.org/artifactory/oss-snapshot-local/'' }' - ' maven { url ''https://oss.sonatype.org/content/repositories/snapshots'' }' - ' maven { url ''https://oss.sonatype.org/content/repositories/snapshots/'' }' - ' maven { url ''https://plugins.gradle.org/m2/'' }' - ' maven { url ''https://repo1.maven.org/maven2'' /*maven-central with HTTPS*/}' - ' maven { url ''https://repo1.maven.org/maven2'' }' - ' maven { url ''https://repository-achartengine.forge.cloudbees.com/snapshot/'' }' - ' maven { url ''https://s3.amazonaws.com/repo.commonsware.com'' }' - ' maven { url ''https://www.jitpack.io'' }' - ' maven { url ''libs'' }' - ' maven { url = uri("https://jitpack.io") }' - ' maven { url = uri("https://maven.fabric.io/public") }' - ' maven { url = URI("https://jitpack.io") }' - ' maven { url MAVEN_REPO_CACHE }' - ' maven { url(''http://releases.marmeladburk.fidesmo.com/'') }' - ' maven {url "http://dl.bintray.com/tbruyelle/tbruyelle" }' - ' maven {url "https://clojars.org/repo/"}' - ' maven {url "https://jitpack.io"}' - " maven{\n url 'https://maven.fabric.io/public'\n }" - " maven{\n url'https://plugins.gradle.org/m2/'\n }" - " maven{\n url \"https://maven.google.com\"\n }" - ' maven{ url "https://oss.sonatype.org/content/repositories/releases/" }' - ' maven{ url "https://oss.sonatype.org/content/repositories/snapshots/" }' - ' maven{ url ''https://jitpack.io'' }' - ' maven{ url ''https://maven.aliyun.com/repository/google''}' - ' maven{ url ''https://maven.aliyun.com/repository/gradle-plugin''}' - ' maven{ url ''https://maven.aliyun.com/repository/jcenter''}' - ' maven{ url ''https://maven.aliyun.com/repository/public''}' - ' maven{url "https://jitpack.io"}' - ' maven{url "https://plugins.gradle.org/m2/"}' - ' maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")' - ' maven(url = "https://maven.pkg.jetbrains.space/public/p/kotlinx-html/maven")' - ' maven ( url = "https://jitpack.io")' - ' maven( url = "https://oss.sonatype.org/content/repositories/snapshots/" )' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742486863.0 fdroidserver-2.4.0/tests/gradle-release-checksums.py0000755000175000017500000001337714767036517021330 0ustar00hanshans#!/usr/bin/env python3 import git import gitlab import os import re import requests import subprocess import sys from colorama import Fore, Style from packaging.version import Version checksums = None versions = dict() while not checksums: r = requests.get( 'https://gitlab.com/fdroid/gradle-transparency-log/-/raw/master/checksums.json', timeout=300, ) if r.status_code == 200: checksums = r.json() gradle_bin_pat = re.compile(r'gradle-([0-9][0-9.]+[0-9])-bin.zip') for url, d in checksums.items(): m = gradle_bin_pat.search(url) if m: versions[m.group(1)] = d[0]['sha256'] errors = 0 makebuildserver = os.path.join(os.path.dirname(__file__), os.pardir, 'makebuildserver') with open(makebuildserver) as fp: makebuildserver_current = fp.read() to_compile = re.search(r'CACHE_FILES = [^\]]+\]', makebuildserver_current).group() code = compile(to_compile, makebuildserver, 'exec') config = {} exec(code, None, config) # nosec this is just a CI script makebuildserver_versions = [] version_pat = re.compile(r'[0-9]+(\.[0-9]+)+') for url, checksum in config['CACHE_FILES']: if 'gradle.org' in url: m = version_pat.search(url.split('/')[-1]) if m: makebuildserver_versions.append(m.group()) if checksum != versions[m.group()]: print(Fore.RED + 'ERROR: checksum mismatch:', checksum, versions[m.group()] + Style.RESET_ALL) errors += 1 # error if makebuildserver is missing the latest version for version in sorted(versions.keys()): if version not in makebuildserver_versions \ and Version(version) > Version(sorted(makebuildserver_versions)[-1]): add_before = """ ('https://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin',""" new = to_compile.replace( add_before, " ('https://services.gradle.org/distributions/gradle-" + version + "-bin.zip',\n" " '" + versions[version] + "'),\n" + add_before ) makebuildserver_current = makebuildserver_current.replace(to_compile, new) with open('makebuildserver', 'w') as fp: fp.write(makebuildserver_current) # write out update to gradlew-fdroid with open('gradlew-fdroid') as fp: gradlew_fdroid = fp.read() current = '' get_sha_pat = re.compile(r""" +'([0-9][0-9.]+[0-9])'\)\s+echo '([0-9a-f]{64})' ;;\n""") for m in get_sha_pat.finditer(gradlew_fdroid): current += m.group() checksum = m.group(2) if checksum != versions[m.group(1)]: print(Fore.RED + 'ERROR: checksum mismatch:', checksum, versions[m.group(1)] + Style.RESET_ALL) errors += 1 new = '' for version in sorted(versions.keys(), key=Version): sha256 = versions[version] spaces = '' for i in range(6 - len(version)): spaces += ' ' new += """ '%s')%s echo '%s' ;;\n""" % (version, spaces, sha256) gradlew_fdroid = gradlew_fdroid.replace(current, new) plugin_v = ' '.join(sorted(versions.keys(), key=Version, reverse=True)) plugin_v_pat = re.compile(r'\nplugin_v=\(([0-9. ]+)\)') with open('gradlew-fdroid', 'w') as fp: fp.write(plugin_v_pat.sub('\nplugin_v=(%s)' % plugin_v, gradlew_fdroid)) if os.getenv('CI_PROJECT_NAMESPACE') != 'fdroid': p = subprocess.run(['git', '--no-pager', 'diff']) print(p.stdout) sys.exit(errors) # This only runs after commits are pushed to fdroid/fdroidserver git_repo = git.repo.Repo('.') modified = git_repo.git().ls_files(modified=True).split() if git_repo.is_dirty() and ('gradlew-fdroid' in modified or 'makebuildserver' in modified): private_token = os.getenv('PERSONAL_ACCESS_TOKEN') if not private_token: print(Fore.RED + 'ERROR: GitLab Token not found in PERSONAL_ACCESS_TOKEN!' + Style.RESET_ALL) sys.exit(1) branch = git_repo.create_head(os.path.basename(__file__), force=True) branch.checkout() git_repo.index.add(['gradlew-fdroid', 'makebuildserver']) author = git.Actor('fdroid-bot', 'fdroid-bot@f-droid.org') git_repo.index.commit('gradle v' + version, author=author) project_path = 'fdroid-bot/' + os.getenv('CI_PROJECT_NAME') url = ('https://gitlab-ci-token:%s@%s/%s.git' % (os.getenv('PERSONAL_ACCESS_TOKEN'), os.getenv('CI_SERVER_HOST'), project_path)) remote_name = 'fdroid-bot' try: remote = git_repo.create_remote(remote_name, url) # See https://github.com/PyCQA/pylint/issues/2856 . # pylint: disable-next=no-member except git.exc.GitCommandError: remote = git.remote.Remote(git_repo, remote_name) remote.set_url(url) remote.push(force=True) git.remote.Remote.rm(git_repo, remote_name) gl = gitlab.Gitlab(os.getenv('CI_SERVER_URL'), api_version=4, private_token=private_token) project = gl.projects.get(project_path, lazy=True) description = ( 'see ' '\n\n

    generated by GitLab CI Job #%s

    ' % (os.getenv('CI_PROJECT_URL'), os.getenv('CI_JOB_ID'), os.getenv('CI_JOB_ID')) ) try: mr = project.mergerequests.create({ 'source_branch': branch.name, 'target_project_id': 36527, # fdroid/fdroidserver 'target_branch': 'master', 'title': 'update to gradle v' + version, 'description': description, 'labels': ['fdroid-bot', 'gradle'], 'remove_source_branch': True, }) mr.save() except gitlab.exceptions.GitlabCreateError as e: if e.response_code == 409: # Another open merge request already exists for this source branch print(e.error_message) else: raise e ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/issue-1128-min-sdk-30-poc.apk0000644000175000017500000002475014766514130020655 0ustar00hanshansPKyBtAndroidManifest.xml1oPύ%mI 1tB 1SłL6JFA`b' ?_1t`<P u;s-'JU4%Ӗ>6Z~e%x> +&KwKcXuejL9ћ%{3<3lr?WAH=)P!1gǹLS1 iGX5X1MP)ט}/V8y_ bO˕?7C+u m匩;L \QxP2ypğWLz_ѕ9x)ܫ|Bϥwj[5[k[[l2ˁKw'c;KcMv;x*u-rw"ԤVEw7r+sϹ] n+}nzRռsy_~~X5uv;PK-*8 classes.dexOAGaAnj*51d]v"x_'5`L8z7ݩy̛͛׷ÑG3#|[ROMgFtLJr%@RGYCe@BF2 Ed y#OBpn#cMd) RF /WȞB?ϷE3]|>ARlH?jznkwV ߷iq&eTTɋogadB9qpHs ^L%kڛ{Cıx|M۬݀B!KO-VrO/,LKO;Yo:9^$J^VTm;5Z3[ښ带]J[uSpᔘmUt(Cl_բvI_0ڿZKA$TK^uL]L-N8]>'dz?lk475{ۢ%:ibӲRۋ ƽ U2k: I>V4\1ceG7IOPFuƴuCtʮ2F-UʦSO*u\v5'S :A8+!A$$!r|W:YaŮt(Q;p0xQ"A :Z5w 8ZVP?1@n[O" ZEVAǐ>#FH< \gPz{(<> PK v,,resources.arsc5 ,( ci org.fdroid.ci P0 string, app_nameThX@PKXdA)META-INF/59D3C650.SFen@= E@E`:v7La Eشܐ%9j +rC$jZJr '3'u3υkYB(g.VURaP]-ÎXȺ5BFn>UC>6Pnav7]CA~0Gn~^~NfI8y%TXt:s#?Pa3^ [ϜP* [n~ovұ#_Te^&a֦%]uGإMuz.}ӿQG"uN/?t4<߄A7ڶn?oV LP0[Ǩ^/ډ. T&{M}`W 6=2wg.Ke[limT;갩oэ|굆`yá'1e}FXKS=Y,ɱ{31320.V47,zbg~ؗ\̠K?-i~jݢm&-5YJ-3Nn|Q_v,w|[ʎ<+cqEeѿQvY&,!̡xoc,bjjsOߝWsۖbSk>95Wr;3Zߒ*Gk?\gʘ;cC&0/0\ۖZyXo(`Ǔ^uȴ m;m8i"|ħI.q(^j閘cM6)uf+[/qߢ7oڷSgxW>9UL~هFr>9{&s5Q:/j!N3z^tս%^"57mw v2CdۂgsNtj_boGWn qaLH@I3o3*]Ѱd-Tc>Pspyo}IOkH]S ; 00h7J[CcaX)ۘ0  *H  01 0 U oops0  240409151740Z20510826151740Z01 0 U oops0"0  *H 0  pN%$,{&h8 $]&3IۆJ;U&i)ZCPmKّiژBxMHNrT9 鎂 Ђ<a*رXMF)&ef#,Y3/cnu>6ˌ?znP6nO5h?… I7jɲҰ;fQcR;<)0d֭fYB=(f[C6n WaH^M0,\sk 9à$]DiأrE?_au ivIqGEd\RG3oo*dgqֽ@<3+o[ͲI(U=.'/l- 9r%M&4%?I_Òr{u kMELIiͽDUg;*[*YCw_VL}8G^kO<#.l:7 tsi#HyKn0EoX.%br&0"0  *H 0  pN%$,{&h8 $]&3IۆJ;U&i)ZCPmKّiژBxMHNrT9 鎂 Ђ<a*رXMF)&ef#,Y3Pspyo}IOkH]S ; 00h7J[CcaX)ۘ0  *H  01 0 U oops0  240409151740Z20510826151740Z01 0 U oops0"0  *H 0  pN%$,{&h8 $]&3IۆJ;U&i)ZCPmKّiژBxMHNrT9 鎂 Ђ<a*رXMF)&ef#,Y3/cnu>6ˌ?znP6nO5h?… I7jɲҰ;fQcR;<)0d֭fYB=(f[C6n WaH^M0,\sk Àt\{>R5F/Rj(O#v@܏h7^lV14 42&O{M~dw *Wog7.Q,=ZD֌~kJ~/`y "*C;汿_/%gYcFۑo#H$0P($V 1-E_ҍ {JILJc sBe5O E_BzZSV?6,D nJ %:/q# 'bpn#L6Kϕ!첦Wp4(mu؛ו5I [Zy98P@X9;Wv4%B,o0  *H iggSs9 Z~Mz{` AKt(=6hĠKkL0*3B*U:H{~;=mf9e&PmSa@4& @D~RDTi`^n!koj-X H kFϤE ŗS_gZ!VѾ݁ud@ !:6l7"٣&eRcr$"[ԲOBz]No  N7eZjkdnz3Oهn..8ߢSвO Ygf#֫Ə!$J9ź;%\"$GGSpDJA*Ml=¶~cV a,]YZm_v_4b˘<1$PNOZ\&#r%iѢ~" 8aM`tثNF@izѐw; =ͷim!N7eZjkdnz3Oهn..8ߢSвO Ygf#֫Ə!$J9ź;%\"$GGSpDJA*Ml=¶~cV a,]YZm_v_4b˘<1$PNOZ\&#r%iѢ~" 8aM`tثNF@izѐw; =ͷim&0"0  *H 0 u|Nx"ȟy]# >*C;汿_/%gYcFۑo#H$0P($V 1-E_ҍ {JILJc sBe5O E_BzZSV?6,D nJ %:/q# 'bpn#L6Kϕ!첦Wp4(mu؛ו5I [Zy98P@X9;Wv4%B,o8hS0,`( {6oEާ(!hLoq M P30!(D<}lk1V1'\K)@M7cfb0^0FLI0  *H 0q1 0 UUK10UUnknown10UWetherby10U Unknown10U Unknown10UCiaran Gultnieks0 100723171024Z 371208171024Z0q1 0 UUK10UUnknown10UWetherby10U Unknown10U Unknown10UCiaran Gultnieks0"0  *H 0 u|Nx"ȟy]# >*C;汿_/%gYcFۑo#H$0P($V 1-E_ҍ {JILJc sBe5O E_BzZSV?6,D nJ %:/q# 'bpn#L6Kϕ!첦Wp4(mu؛ו5I [Zy98P@X9;Wv4%B,o0  *H iggSs9 Z~Mz{` AKt(=6hĠKkL0*3B*U:H{~;=mf9e&PmSa@4& @D~RDTi`^n!koj-X H kFϤE ŗS_gZ!VѾ݁ud@ !:6l7"٣&eRcr$"[ԲOBz]No5.u:L4c7Rs]shhz[9ȒH}yl_UŞQW *KmvF.~Xp9d#Z0 HMw*yq VA2ȍ]{@mYrZw=GO>Ω{.<5C#l*q`}lQL$?`XYcoGաj$rmaBv4͒?8bV]w"Lc!5.u:L4c7Rs]shhz[9ȒH}yl_UŞQW *KmvF.~Xp9d#Z0 HMw*yq VA2ȍ]{@mYrZw=GO>Ω{.<5C#l*q`}lQL$?`XYcoGաj$rmaBv4͒?8bV]w"Lc&0"0  *H 0 u|Nx"ȟy]# >*C;汿_/%gYcFۑo#H$0P($V 1-E_ҍ {JILJc sBe5O E_BzZSV?6,D nJ %:/q# 'bpn#L6Kϕ!첦Wp4(mu؛ו5I [Zy98P@X9;Wv4%B,oXwerBnAPK Sig Block 42PKyBtAndroidManifest.xmlPK-*8 classes.dexPK v,,resources.arscPKXdA)pMETA-INF/59D3C650.SFPK眜#META-INF/59D3C650.RSAPK;(././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/issue-1128-poc1.apk0000644000175000017500000001536014766514130017153 0ustar00hanshansPK !:9gGÄ resources.arsc5 (CTiny App for CTS -[Ţîñý Åþþ ƒöŕ ÇŢŠ one two three] @‏‮Tiny‬‏ ‏‮App‬‏ ‏‮for‬‏ ‏‮CTS‬‏ android.appsecurity.cts.tinyapp P0 string, app_nameThX@ThX@enXAThX@arXBPK!:AndroidManifest.xmlSn1=$MȣiR胖+DS*X +4IFIhf@TB`Q!>o p|cgӈ{m4 (N'3'V)'Έw"{KCO;I%nDh@vI㘳g@}ghBDdL1{_y2Q,#8!g r5e5웴>}\oGv951gN~GLVvdxeM6!m s>1^E+bKD'N&_AǒK,zIT:]}[4m?pGdb6G2Hږc6t KSo#H%c9ԥUBGܑxk?>;"86 }ST@SJkĈVQ*$"̽~]f_77튼*:rpi9M᲎2\ w(ߢYiƳL yI&Cf:Zv/=>O8>Zt/k75h--۴͎Ѵ6%c[k/8ޒWgU^,`yN"jPK`zPK!: classes.dexMhA~d5mmlH\ iZjRPDNm71 -ŪAzqЦ !+|9F~ɏVҐs v܈;Vv?J7 >˦4B\(2/i3 JC #!s.179<plc?MssJ@QҚY$%eEFih7%"6 lR'Peb$GǗ,Շl@IDsH, V"Aë~Pδ/z=:Wڽ}ux1ypk|G=:0khc$ SC}~薖0:z]]ZhDM4LQ:cx]nQ WM]'4w5AԵe72d&f>Š:,)-)ubVj-KX1|efRƊAEǒR/؈DMVRE:SPKPK!:q8r'FMETA-INF/CIARANG.RSA3hbubjhδؠUѐ߀3̓1qAsAsAf&F&&ϳ -P5@-l̡,lLކ| 0{h^v^~y?H]#<$#( *40 8g&%)efȉDX@&F%%s#?Paڅ'5~J'_UVpjNnJ?/"{==T1P*1ν'_.#0Zr#<}>~?|)yNUˢ7ґg2]ܒO.{V)[LJv$-PlP|iL4Xrl,}xcOM=gqGj7k6pXZKl-cX$2GUw8⤓-0y3뿦*~ɒ7:mޯN.Jk58`o{YZɏ78M:jxufYY|%wCx3fE{q6Oea]K[N)fgnYٛlw/YmNħG)]wQT.eɆ;>p3I(iq&s%En.Vcg5uo?EBRy͹xesU峾7lb\L% ѠrR."S#IasD1Lxػd_њ=w^;^j^BZr)St륯sP[viǀvroϑ5ckTvOpr"DE4y*ZV.#/Dm猞|Ft;gՈ/='>|,_,^5_[ {cCHGV:s~!i~lpo›U?m{ق^uJ?.8a/Wұ.z  qaLH@B"zMǙE=SDEucd>rvq԰E4Fn 00g;js%j>:2d0  *H  01 0 U oops0  240422184323Z20510908184323Z01 0 U oops0"0  *H 0 754+gDǃcF=[%}8;J7UT~3D{sY!10|?ރ/WM}kJ3G0A3Ky13ȧnQv%W E)>u+('Iw]Gq)Qsfb!G]HwTyys\#xBi(xXYL0]dEs0WBG[paAhUf,5S0Q0UqR_Gh.aI0U#0qR_Gh.aI0U00  *H  \Zi8whW;em.7WI#Z>MTg;b*\JPX4vڷǠgAF,ɶ|9CR>1`ʜL6o9zƿ)hC.3!&"+,ω*R,UOI)ޱ#I,)-B+Ɇ.{}ǿm3+RO9`hz K[{'zY` $"qG$qԐ(ivVk}}\hqsDt!C;գcƼ2./5[%yw')@zVoOP+SUrSއa!+tč#Ē>'iXj|lQc egm-sLF3ȕ&A̋V,?K2HYRKѣqCYhкqgVwsg&0"0  *H 0 754+gDǃcF=[%}8;J7UT~3D{sY!10|?ރ/WM}kJ3G0A3Ky13ȧnQv%W E)>u+('Iw]Gq)Qsfb!G]HwTyys\#xBi(xXYL0]dEs0WBG[paAhUf,5hSiLH@B"zMǙE=SDEucd>rvq԰E4Fn 00g;js%j>:2d0  *H  01 0 U oops0  240422184323Z20510908184323Z01 0 U oops0"0  *H 0 754+gDǃcF=[%}8;J7UT~3D{sY!10|?ރ/WM}kJ3G0A3Ky13ȧnQv%W E)>u+('Iw]Gq)Qsfb!G]HwTyys\#xBi(xXYL0]dEs0WBG[paAhUf,5S0Q0UqR_Gh.aI0U#0qR_Gh.aI0U00  *H  \Zi8whW;em.7WI#Z>MTg;b*\JPX4vڷǠgAF,ɶ|9CR>1`ʜL6o9zƿ)hC.3!&"+,ω*R,UOI)ޱ#I,)-B+Ɇ.{}ǿm3+RO9`hz K[{'zY` $"qG$qԐ(ivVkm+~^Q·}#Ɍe/ipR&P 5̦Y͒tlp/Κ^02•Nތx1!Ao#۹QOj0\jb'ydž{_CxnejYE",'~݇oNfW{u,.twW'*\ځfRQB9‡BlX2n>lA&0"0  *H 0 754+gDǃcF=[%}8;J7UT~3D{sY!10|?ރ/WM}kJ3G0A3Ky13ȧnQv%W E)>u+('Iw]Gq)Qsfb!G]HwTyys\#xBi(xXYL0]dEs0WBG[paAhUf,5 APK Sig Block 42PK !:9gGÄ resources.arsc5PK!:`zAndroidManifest.xmlPK!: classes.dexPK!:q8r'F META-INF/CIARANG.RSAPK././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/issue-1128-poc2.apk0000644000175000017500000002306514766514130017155 0ustar00hanshansPK !:9gGÄ resources.arsc5 (CTiny App for CTS -[Ţîñý Åþþ ƒöŕ ÇŢŠ one two three] @‏‮Tiny‬‏ ‏‮App‬‏ ‏‮for‬‏ ‏‮CTS‬‏ android.appsecurity.cts.tinyapp P0 string, app_nameThX@ThX@enXAThX@arXBPK!:AndroidManifest.xmlSn1=$MȣiR胖+DS*X +4IFIhf@TB`Q!>o p|cgӈ{m4 (N'3'V)'Έw"{KCO;I%nDh@vI㘳g@}ghBDdL1{_y2Q,#8!g r5e5웴>}\oGv951gN~GLVvdxeM6!m s>1^E+bKD'N&_AǒK,zIT:]}[4m?pGdb6G2Hږc6t KSo#H%c9ԥUBGܑxk?>;"86 }ST@SJkĈVQ*$"̽~]f_77튼*:rpi9M᲎2\ w(ߢYiƳL yI&Cf:Zv/=>O8>Zt/k75h--۴͎Ѵ6%c[k/8ޒWgU^,`yN"jPK`zPK!: classes.dexMhA~d5mmlH\ iZjRPDNm71 -ŪAzqЦ !+|9F~ɏVҐs v܈;Vv?J7 >˦4B\(2/i3 JC #!s.179<plc?MssJ@QҚY$%eEFih7%"6 lR'Peb$GǗ,Շl@IDsH, V"Aë~Pδ/z=:Wڽ}ux1ypk|G=:0khc$ SC}~薖0:z]]ZhDM4LQ:cx]nQ WM]'4w5AԵe72d&f>Š:,)-)ubVj-KX1|efRƊAEǒR/؈DMVRE:SPKn qaLH@A_ү>6N#v#'BH!pA[98-#YC {p3G9`؎ 00g;js%j>:2d0  *H  01 0 U oops0  240422184323Z20510908184323Z01 0 U oops0"0  *H 0 754+gDǃcF=[%}8;J7UT~3D{sY!10|?ރ/WM}kJ3G0A3Ky13ȧnQv%W E)>u+('Iw]Gq)Qsfb!G]HwTyys\#xBi(xXYL0]dEs0WBG[paAhUf,5S0Q0UqR_Gh.aI0U#0qR_Gh.aI0U00  *H  \Zi8whW;em.7WI#Z>MTg;b*\JPX4vڷǠgAF,ɶ|9CR>1`ʜL6o9zƿ)hC.3!&"+,ω*R,UOI)ޱ#I,)-B+Ɇ.{}ǿm3+RO9`hz K[{'zY` $"qG$qԐ(ivVkwer4dh}AG C\W{@ +w㩽DO|D&0"0  *H 0 754+gDǃcF=[%}8;J7UT~3D{sY!10|?ރ/WM}kJ3G0A3Ky13ȧnQv%W E)>u+('Iw]Gq)Qsfb!G]HwTyys\#xBi(xXYL0]dEs0WBG[paAhUf,5hSiLH@A_ү>6N#v#'BH!pA[98-#YC {p3G9`؎ 00g;js%j>:2d0  *H  01 0 U oops0  240422184323Z20510908184323Z01 0 U oops0"0  *H 0 754+gDǃcF=[%}8;J7UT~3D{sY!10|?ރ/WM}kJ3G0A3Ky13ȧnQv%W E)>u+('Iw]Gq)Qsfb!G]HwTyys\#xBi(xXYL0]dEs0WBG[paAhUf,5S0Q0UqR_Gh.aI0U#0qR_Gh.aI0U00  *H  \Zi8whW;em.7WI#Z>MTg;b*\JPX4vڷǠgAF,ɶ|9CR>1`ʜL6o9zƿ)hC.3!&"+,ω*R,UOI)ޱ#I,)-B+Ɇ.{}ǿm3+RO9`hz K[{'zY` $"qG$qԐ(ivVk|9F{xQ y-᜾yLR2k-Ň@>^ ceXj3X o'@׀+w&0"0  *H 0 754+gDǃcF=[%}8;J7UT~3D{sY!10|?ރ/WM}kJ3G0A3Ky13ȧnQv%W E)>u+('Iw]Gq)Qsfb!G]HwTyys\#xBi(xXYL0]dEs0WBG[paAhUf,58 q0,`( {6oEާ(!hLoq M P30!(D<}lk1V1'\K)@M7cfb0^0FLI0  *H 0q1 0 UUK10UUnknown10UWetherby10U Unknown10U Unknown10UCiaran Gultnieks0 100723171024Z 371208171024Z0q1 0 UUK10UUnknown10UWetherby10U Unknown10U Unknown10UCiaran Gultnieks0"0  *H 0 u|Nx"ȟy]# >*C;汿_/%gYcFۑo#H$0P($V 1-E_ҍ {JILJc sBe5O E_BzZSV?6,D nJ %:/q# 'bpn#L6Kϕ!첦Wp4(mu؛ו5I [Zy98P@X9;Wv4%B,o0  *H iggSs9 Z~Mz{` AKt(=6hĠKkL0*3B*U:H{~;=mf9e&PmSa@4& @D~RDTi`^n!koj-X H kFϤE ŗS_gZ!VѾ݁ud@ !:6l7"٣&eRcr$"[ԲOBz]No  N7eZjkdnz3Oهn..8ߢSвO Ygf#֫Ə!$J9ź;%\"$GGSpDJA*Ml=¶~cV a,]YZm_v_4b˘<1$PNOZ\&#r%iѢ~" 8aM`tثNF@izѐw; =ͷim!N7eZjkdnz3Oهn..8ߢSвO Ygf#֫Ə!$J9ź;%\"$GGSpDJA*Ml=¶~cV a,]YZm_v_4b˘<1$PNOZ\&#r%iѢ~" 8aM`tثNF@izѐw; =ͷim&0"0  *H 0 u|Nx"ȟy]# >*C;汿_/%gYcFۑo#H$0P($V 1-E_ҍ {JILJc sBe5O E_BzZSV?6,D nJ %:/q# 'bpn#L6Kϕ!첦Wp4(mu؛ו5I [Zy98P@X9;Wv4%B,o8hS0,`( {6oEާ(!hLoq M P30!(D<}lk1V1'\K)@M7cfb0^0FLI0  *H 0q1 0 UUK10UUnknown10UWetherby10U Unknown10U Unknown10UCiaran Gultnieks0 100723171024Z 371208171024Z0q1 0 UUK10UUnknown10UWetherby10U Unknown10U Unknown10UCiaran Gultnieks0"0  *H 0 u|Nx"ȟy]# >*C;汿_/%gYcFۑo#H$0P($V 1-E_ҍ {JILJc sBe5O E_BzZSV?6,D nJ %:/q# 'bpn#L6Kϕ!첦Wp4(mu؛ו5I [Zy98P@X9;Wv4%B,o0  *H iggSs9 Z~Mz{` AKt(=6hĠKkL0*3B*U:H{~;=mf9e&PmSa@4& @D~RDTi`^n!koj-X H kFϤE ŗS_gZ!VѾ݁ud@ !:6l7"٣&eRcr$"[ԲOBz]No5.u:L4c7Rs]shhz[9ȒH}yl_UŞQW *KmvF.~Xp9d#Z0 HMw*yq VA2ȍ]{@mYrZw=GO>Ω{.<5C#l*q`}lQL$?`XYcoGաj$rmaBv4͒?8bV]w"Lc!5.u:L4c7Rs]shhz[9ȒH}yl_UŞQW *KmvF.~Xp9d#Z0 HMw*yq VA2ȍ]{@mYrZw=GO>Ω{.<5C#l*q`}lQL$?`XYcoGաj$rmaBv4͒?8bV]w"Lc&0"0  *H 0 u|Nx"ȟy]# >*C;汿_/%gYcFۑo#H$0P($V 1-E_ҍ {JILJc sBe5O E_BzZSV?6,D nJ %:/q# 'bpn#L6Kϕ!첦Wp4(mu؛ו5I [Zy98P@X9;Wv4%B,oXwerBnAPK Sig Block 42PK !:9gGÄ resources.arsc5PK!:`zAndroidManifest.xmlPK!: classes.dexPK]%././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/issue-1128-poc3a.apk0000644000175000017500000002116614766514130017317 0ustar00hanshansPK!:^avAndroidManifest.xmlTnA=8$@c<)k( DHD :c`a |_PQP)sē-x{cf!APŗ`>:{oψ}cL|%D1';EJ#^ĀF fD=6̨)xy>[d-Ox"b|:gm")rV{cl \Hp5~zhiҿ}ǴV#0s&j#l Z/DFjKC.ψ6c'Lc3k;Z_JH/CBk5ɷw={phkdsn)+kܯB*rxgJm6#{by7U=԰1*| >e"edcNSld?[{AMyaT9"!Ayyrہ?\9M;˚~[-zp|]QОN2 'g2X2ܬ)~ESǖGYSG:u y\dz$L15#-:q?GO\05;8Z4Zv:ˎυ1uvh}qVKFq_z|՛/zs%o_PK^avPK !:Շ classes.dex5dex 035jIr9ԄJo:u?pxV40p  $ ,t Gs(;CFJWag{        $po nppp ILandroid/app/Activity;.Landroid/appsecurity/cts/tinyapp/MainActivity;(Landroid/appsecurity/cts/tinyapp/R$attr;*Landroid/appsecurity/cts/tinyapp/R$string;#Landroid/appsecurity/cts/tinyapp/R;Landroid/os/Bundle;"Ldalvik/annotation/EnclosingClass;Ldalvik/annotation/InnerClass;!Ldalvik/annotation/MemberClasses;Ljava/lang/Object;MainActivity.javaR.javaVVL accessFlagsapp_nameattremitter: jack-3.26finishnameonCreatesavedInstanceStatestringthisvalue<9    dp  $ ,t       0PKZ[Jtemp.txtst PKPK [J51lib/armeabi/fake.so5٧Hello PK !:!Oresources.arsc5 (CTiny App for CTS -[Ţîñý Åþþ ƒöŕ ÇŢŠ one two three] @‏‮Tiny‬‏ ‏‮App‬‏ ‏‮for‬‏ ‏‮CTS‬‏ android.appsecurity.cts.tinyapp T4$attrstring, app_nameL`P8L`P8enXAL`P8arXBPK[J> temp2.txtsr\PK>PK[J)META-INF/CERT.SFmIZMp~&5FqvC{Q?RTխN`}Y˃yKam+b~] 4Y ~P|hj7=_3` ~EYW ^(:v:t?)! Nzv(-rX)<;Q3o/A b8'2׏oɯTW+rjI+_r < ρvCm]ȷC`47 1qr=s-Mǥf\wɭ}$ hZH9v0045!P~&źe[`F}هKZh3L? zK.&D(div@]JV;_nDխdƄd g {|c tu beL7}]2 BҜq_Vq VyݚN>}KXc+X'(8a?Ҿ{ vUK(@bw". WOt\!Ox#2E3 }+Cqҗ8C:.p5ɀ"9%tmj`舂t%vr[hwxCzPi3Ff䚶ڸ]GS5_E4VjoB$̾if9c^N>y|؃۫\7WMD3gzJ+a\3s&=PoG_t"JGؿ+A5m^-UWj `Y&*m8 6ѓmS Yե])ya(AmAę.P"+hnq&xll%(4FiT 5PO- }_y-Zkj@N};:T}zu^rQZumm:},Lzz:iJ `|,]}7'7mgӢuؒ 4邯|7:P[oi%[Rv^2zuO9Eؕ'f*X5. {MA`ƋE3r֯}85pSډ}{i%P%&Iu-=kʎz*9U>XM;3Rvϗ^]$,c^Z]L2x;lKnIkweL. k7}4T3WҤ/n-(e[w#XɄa~iŸKaGg_gy½+M)erd%LC˙ "`z M+fp8Rn#sS+̾XA;ٱKȶh'Y̒j?r4BQCb4n!3I(Ƽ?rdƟ!:y[kDO/daڍc3q'%!2狉Wf_s )ȸT,qOL.whbB_I .E4=>;YKFx& ϊFɂ\SЀ%4V16Uq\f0ţgPK[J4JRMETA-INF/MANIFEST.MFmˎ@ཉ(h+&Dl"R *2dzl$ fBL2To&7 k3 rfTp3,ߟ̺8]6K̈́{mR? Bh_PLm_u]4.4,ƣIԶP^s\;`YϿ d] [H4Py+ {2 ^9⭹=Ԧ0@rm8-- Λ].4Ϛy|8bNQ2Sh%}uhAwW5N{[ ۝JHZgz^J_D`9@l+.[_yzV9Ε5*]֟;' Դ ]Ʃϔq [ temp2.txtPK[J)META-INF/CERT.SFPK[J1uMETA-INF/CERT.RSAPK[J4JRMETA-INF/MANIFEST.MFPK #= ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/issue-1128-poc3b.apk0000644000175000017500000002116514766514130017317 0ustar00hanshansPK!:^avAndroidManifest.xmlTnA=8$@c<)k( DHD :c`a |_PQP)sē-x{cf!APŗ`>:{oψ}cL|%D1';EJ#^ĀF fD=6̨)xy>[d-Ox"b|:gm")rV{cl \Hp5~zhiҿ}ǴV#0s&j#l Z/DFjKC.ψ6c'Lc3k;Z_JH/CBk5ɷw={phkdsn)+kܯB*rxgJm6#{by7U=԰1*| >e"edcNSld?[{AMyaT9"!Ayyrہ?\9M;˚~[-zp|]QОN2 'g2X2ܬ)~ESǖGYSG:u y\dz$L15#-:q?GO\05;8Z4Zv:ˎυ1uvh}qVKFq_z|՛/zs%o_PK^avPK !:Շ classes.dex5dex 035jIr9ԄJo:u?pxV40p  $ ,t Gs(;CFJWag{        $po nppp ILandroid/app/Activity;.Landroid/appsecurity/cts/tinyapp/MainActivity;(Landroid/appsecurity/cts/tinyapp/R$attr;*Landroid/appsecurity/cts/tinyapp/R$string;#Landroid/appsecurity/cts/tinyapp/R;Landroid/os/Bundle;"Ldalvik/annotation/EnclosingClass;Ldalvik/annotation/InnerClass;!Ldalvik/annotation/MemberClasses;Ljava/lang/Object;MainActivity.javaR.javaVVL accessFlagsapp_nameattremitter: jack-3.26finishnameonCreatesavedInstanceStatestringthisvalue<9    dp  $ ,t       0PKZ[Jtemp.txtst PKPK [J51lib/armeabi/fake.so5٧Hello PK !:!Oresources.arsc5 (CTiny App for CTS -[Ţîñý Åþþ ƒöŕ ÇŢŠ one two three] @‏‮Tiny‬‏ ‏‮App‬‏ ‏‮for‬‏ ‏‮CTS‬‏ android.appsecurity.cts.tinyapp T4$attrstring, app_nameL`P8L`P8enXAL`P8arXBPK[J> temp2.txtsr\PK>PK[J)META-INF/CERT.SFmIZMp~&5FqvC{Q?RTխN`}Y˃yKam+b~] 4Y ~P|hj7=_3` ~EYW ^(:v:t?)! Nzv(-rX)<;Q3o/A b8'2׏oɯTW+rjI+_r < ρvCm]ȷC`47 1qr=s-Mǥf\wɭ}$ hZH9v0045!P~&źe[`F}هKZh3L? zK.&D(div@]JV;_nDխdƄd g {|c tu beL7}]2 BҜq_Vq VyݚN>}KXc+X'(8a?Ҿ{ vUK(@bw". WOt\!Ox#2E3 }!_<:U+J|9:Q0@܉F" c@B![ҨȀ,nyD~-!Dޗ VZko5t@T+;DScw]LBkuDfir-lçI=m2' ~gOOA%wnS"5ْ4,D0 }-w4\V%Pw\}wK9i=mZg lV cIcj'ԥس=/:B`ړN^ Â/(gH(ߒԮ+@@\E 0f/:iL]P| I&tb/5M;>ywmF 'ܿ9 !N5sfZ~gt}l> dHWwӄZ},Y6V{FUx#|&H v,"hH/ @?w/TyGZNqGyaIēPd@T 2eT?'/^|7 9ӑ/KMղ1J_.6z8%vwM}|{YC=\4~D?Taqʾz-$IuwG,ׅwه:Fcʼ8@FbҮw8,*!6ȫO{٫Vc}GWkǫ1|]EsKVn֓ј42kiܳr_0c]moK觗YJf\ҭ9jBXsěD[~ͻ MA:Îr0%`k=vC?tf2?xl|y+#VibQmm uMZ:tzwT8=@ao<aT7Ox8xj#wRX99ɜ..wDfF۲Ş@T?|N -~d)W.zuj0:"QZ}:PdAd5z/:\^/9?/nUbH/F͑EОu SEEpAxYS3n{B/R+z?_:ذKֲH瓌4XzQ=b]0ErsĽQw&/Ľ=Ȳgc_:x۫DϦ^NxŴL9Ka&!G|t>mm{ jTKKe {p&& WU EݴmŒoDc.;c#Ӌ`3sIд^y uzvņҿ,2V3STGd8fm٭?PK[J4JRMETA-INF/MANIFEST.MFmˎ@ཉ(h+&Dl"R *2dzl$ fBL2To&7 k3 rfTp3,ߟ̺8]6K̈́{mR? Bh_PLm_u]4.4,ƣIԶP^s\;`YϿ d] [H4Py+ {2 ^9⭹=Ԧ0@rm8-- Λ].4Ϛy|8bNQ2Sh%}uhAwW5N{[ ۝JHZgz^J_D`9@l+.[_yzV9Ε5*]֟;' Դ ]Ʃϔq [ temp2.txtPK[J)META-INF/CERT.SFPK[JB_META-INF/CERT.RSAPK[J4JRMETA-INF/MANIFEST.MFPK #< ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/janus.apk0000644000175000017500000002352314717152067015715 0ustar00hanshansdex 035DA 9\*EQ5 cPS'pxV4pp 0px !<^x{      `Goodbye world!HelloWorldActivity.javaILandroid/app/Activity;Landroid/content/Context;Landroid/os/Bundle;Landroid/view/View;Landroid/widget/TextView; Lcom/example/HelloWorldActivity;Ljava/lang/CharSequence;VVIVLonCreatesavedInstanceStatesetContentView setGravitysetTextthisview>ZZZ?po 2"p !n n n  p 0p     `pPK }>* AndroidManifest.xmlTNA==fxc^Bb4Ђh5JT4 oLCtq/pᚸp킅qҕKwzv5SL:UuHsPć$0+2MnHLO_-AvUI_!+o.kTޔ] 5..R)om}q%f찭0*u!ɯ2$3z(.6Y=n[ ̻sj7ğ+{y<Ȳ^8&Ne\ռFfRt G@Bsطkgc1 s#f:\i,^-Qaw5+z~1|_#^ ;+9ē:t)*uE?+#sTٽ}_|8RU-Kՙ)^~HxNn lP..ItrUq֧dW|M'#z u32S6H (L)/j䡿h3lGԛf^Z)YVe"ˊSʩUWL|'ՕcwRiݪo)T&3DMIqyeٶ{\Wsl;t\qOΩN#f>sm h1Kz Cvio]^0Dz݆^&D/AGzzZk E+h Gz}^kZ/a54HnrM% BLTkW_]Ƙ 궑~B0o^ _kPkf#f(d͆f<_hBFވ|~ N>?3KVϱ?PK }L8 res/drawable/ic_launcher.pngPNG  IHDR@@iq ~IDATxݛ{eU}?>530 3 C-6JFGRVBBHkmB5АѤIH* CjiPp@2`{̽s^k3w^;wFf%+u^w=Z[Q>!]n6{w+^Zrg%ɘbf"_d""8S)=W|[dbƔ”D~/VBL4֞4zm.ۇo.}2ɀ3cAE "WP%O y؎/_RsO6g8*ImhJkk,3ﶆ L)x"P7Lk]>{K'Ɲ}glOHoxAdH5W`+n|jf^T {l9<=Y8?3`}Z~=Q]Dd$4_u68cQ /-`f|xW޾̱0,Qv%f:9Erם PFa Cb$MDSN-wxbwy?9-MI,qYqТ3e3cL&K'Sm'{~5iUK2T*|Q>BṿƤFާw2j=AReuqPbss`d8\< fczlT57;a_;_n#!R|dc¶6$Zp^$XRӺVҪÅ=mf*`8g.}1#X&`KceA@?#h/XGF8s폰2QԓX(s3n)NeʙcUsp Kֈ-Gܷ(0Z;0`s$q-lݫ);[C2X5ȫ *[V.NԘh &e{O!Z'3(REe}x .=hd '9 &g+vTXQdzU1⍘,řcXJ:t$T!ƾ`)d,BB Fp7IJ;S)Kuo H ׏,;LX D?d0K6 AJ \Zp>(wl(t$HH#Mt޺D I9Dê@"I,Lԋ1I$D(;abx*l D3ZA@%ŷTT~flFFKg, .P9=H8Yb7GIB_ 0 )YBi-r 9* u^ zZ0;j  3)'J{hLJJjZRed=!X%ªTO-e<4M[i9uZ9г"Ey_\u"ۤk5w٣VUv+.YW?)C0TdUlxalÏoARYOɛ6O)-II9 1mx稢ɦfuSJALJLZX{Rn~TviEn12%w+˔2l\qDw]Xw9BԺ*ؖTI1O)ojG*ÅJuaҍQ Ⱦ=xCG7U%EW6Ar{3D2ҝG`9{G=F`I79&,*b9 $Ţc}'ن~!GW{']}uyQx/8#m/7CcЩA,I:Q{!kYk៿s{ALw&~\f?n>{ArPfUWO6?bo^HGz+Z缏t3 xϒ! Or]ˡʀz/}s>^ٱt޻RfE`G.O(3PvaU%bJ]QUǶ0>1kB2ugoF.cOJ?P *Eֽa)#zGV2OE}?ێl9 "8<.kM"83rM5w9YpLC0 n;Jf e84Yʙ+ݴzp\]olNȒ?Re?QGq?&Y{S' =_?8ues_<$ 2|5~5wnqPpitGƵŷ޳5f͇l-S_U{_Z뾏2vc`|hӼ#?mjdkRwX5m:b*I/ :{{&L_lv!|M"uCHځMvw,p7 nNK,/Yygp;lU'ɐw".W眈8cq""s~#։]NbIMUM,&3UmfmfZEvO vݏ<WZ_⚺nIENDB`PK }resources.arsc 80<xres/drawable/guardsquare.pngres/drawable/ic_launcher.pngres/xml/wearable_app_desc.xmlvoice_transcriptionHelloWorld Sample com.example  8 *8FVattrdrawablexmlarraycolorstringstyleX D4Z guardsquare ic_launcherwearable_app_descandroid_wear_capabilitiesaccentprimary primary_dark primary_lightapp_nameAppThemeLtT8L`P8LlP8 L\8 0KKKί{L`P8L`P8 8LP8 8345PK }0Z#F classes.dexeoAge8y4\GQ \dC؎ !ѤD4JDPhM(vIޝKs/қwO_7~ow R"w.TIIT#?v+9Fd d>o`s\K`5x )lϗJ`JSڦ{jkwsoC1Z4ȱT:(*ρŠ3:chday^Qt<ݒ=C~?􉵨㠟秩7Ynx/הv,4 kkq|p/2 e.(v/Y_M#ؠmыxkE~o=:dtZM$n/8Ux |$- +h*T*a~T/%VYRv~+m7Q&9YPy,dY"PM\F )u Sټ7 o1{qؖqGF\?ٹ^O~b'߳Zw0eAWYEPK })pXMETA-INF/MANIFEST.MFUQo0{~EP\@ ɆaNf)J-G-'''%ݙ9(]I#FtLDC0F zm@t" (LɊ?uiь|~ȰgGQmș슾srjEy5%XLD\5k&OOzi&nc?:a>rX3Ǝp.o.]rwlL>9=/PK }uuG=META-INF/CERT.SFmn@=O1{ BKH\HT(f& 3O6F|3yKC@daJ(ͫ|Z&o|$K tFe}Bh 1. }`"S|l9b:9y*Lsi ﯍678ϕei6Afa"kX!$5NUsMۥ ^Gd?"~BKW [J'ֺU^/ 677Wϵ1b,~~1/rF#U]QK؏NPf&)Vn"M/ f&F&& xjYZ&0 3 8\y)E)b" fa^KjRi8a8K`x̟zWeriasbQK%UKR;~㗔fܻdhStYebAӶ6dї5or v$׼h(瓣}wf}w%E5;_31320!3]Z3^^:09cͩ]_$|v ^<4gO./^).Kk.9҂§Z r73zhݺ֛IˋvHlI[i34o:k* AndroidManifest.xmlPK }L8 res/drawable/ic_launcher.pngPK }resources.arscPK }0Z#F classes.dexPK })pXW META-INF/MANIFEST.MFPK }uuG=!META-INF/CERT.SFPK }5)"`"META-INF/CERT.RSAPK~%././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742486863.0 fdroidserver-2.4.0/tests/key-tricks.py0000755000175000017500000000142414767036517016544 0ustar00hanshans#!/usr/bin/env python3 import os import fdroidserver import shutil import sys from fdroidserver import common, nightly if os.getenv('CI') is None: print('ERROR: This can overwrite SSH keys, so it should only be run in CI') sys.exit(1) os.chdir(os.path.dirname(__file__)) config = fdroidserver.common.read_config() nightly.PASSWORD = config['keystorepass'] nightly.KEY_ALIAS = config['repo_keyalias'] privkey = nightly._ssh_key_from_debug_keystore('keystore.jks') print('privkey', privkey) ssh_private_key_file = os.path.join(os.getenv('HOME'), '.ssh', 'id_rsa') if os.path.exists(ssh_private_key_file): print('ERROR:', ssh_private_key_file, 'exists!') sys.exit(1) shutil.move(privkey, ssh_private_key_file) shutil.move(privkey + '.pub', ssh_private_key_file + '.pub') ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742480907.0 fdroidserver-2.4.0/tests/keystore.jks0000644000175000017500000001351714767023013016451 0ustar00hanshans4e7da5b7o300 +*ļ#y -hyܠƩGy{nf5\nŧ] vosO[iK_)S4Xݘ|#}-\mS-/<Ո0[uվOB{ʳX~Lf,Z'Rq'tM:{`zq4\4]1zDmMiN|6eUN_z]dE7n/mJ^1sϸ}9&NhF^UY3c/sewG AZk 0Y̒RqHY[lR/܈"X;ٟ"XjAqr#>"w\eVNSRZw1%nhuP`+fZ#!G`8K>BվP4V(|(2xFņMz/E*~Azc @AP IdCl7 {W4l:Kw|S%KU׏(/~8̇v_#fsg'Щ^'eC)0&p\@Ԅ+gB3f24oNS]M'U]8|<:9|X#@Ko[Q (E4ۘ yB~HJO mV(ynA>h}uoR|S$Ol2\kE qcGV R$\z$"=O3&p}Yn5 7Bx4f{BSpr9rf&߅2LXeU\ҞdRTXw&Ѳ:9Dm e5 u<}JĺAu$IL}’",";XwpP^n 8~7%wB'|\p~#^WyWCA cY-/ +4X 5y4&j fWhv=t!ay}t6yȡT"ZLQ[w5qx% U7F1b'R?3b| =i@V'8L( bw=b@y>2E%IMxty=yC 8^J%⛪ WOTߵ(j' 7ځa?Nc8;pԙ!g+F U?>wx6&E,nDcJB`rBY*W@X\V?pt?܇i6o8ũ+Hs _Vuz]sq"^RX.509u0q0Y1a0  *H  0i1 0 UUS10U California10UAlcatraz10U Alcatraz1 0 U Cell10UBirdman0 191223180144Z 470510180144Z0i1 0 UUS10U California10UAlcatraz10U Alcatraz1 0 U Cell10UBirdman0"0  *H 0 -rɴ kq $?=2#sqeIrO](w$ WaU"6#B2:va>Ni}IDzѣod]]2}ѭY̳C'e3YǮxFᾫ~H)/PMc^$yCv`۽=m9$2&)_Aeҹ8PY~gk}`cH.k9q͉B^,87e,5!00Ur`v.25Rs0  *H  Ztw|yP;A|+7Mp{|XZ 0~Jߙbi+Uex&RDUyzQEԥ3]F6ueXC+ZkL~#ywYq)m#<~*TD%2& ĮjZQZnUm|C׊iO[g XBZh G پp>Cm =+=_-ú_On.:6)HӜwcqȗ.dg ;Ѽ2Hs*$.=24lb{8س`۩ɽ% s׎A.-" TݑXHS7ꮭR7wChel_uvLƬZukQn T/(O0/_?%986W3Ioc@>r[<mq~.724!Η/%o!xg9r P>d_9=W7|ģA lŏΧ(D0Øn@˂LJ*}KIp q& ++=]bKQ] JIQ9&'kʈR% pk8^>?8D]'5͇ yU$XvXv&.VdXQr*fsn4IM7.vp_GQ%b%8 bk^Q *] kAYҮܮ(&:Y> `Y'#x;K뱹6_”^Kb+ӄ= %R򺦖B> d$b9D?zw@fB*WIL#yk-?%bzM"ϩxvdEVM%9V l,E JwI0f6~uwBV1Vr8V- u'r_ ٙHHALs W˱'~?Equ.@l8iY%4W_L[k>'Ld>Ă>,MxQ!l":r=&Svb@wJ4@lCMpF=' ˏGg= ht2wxms+c~qGf7&,kA{ܢ/ Wj"}]Pg1࿯(g:)k ]R)N%S:Ekotƶo`tIS&0&τ XUZU8jUilm7ܰ˱ Mo^y1ިWDobEZ]Ne(uGΤrٺщy_KG5G8rU QY2F> ✨ac/HARdlz?Se1Y'xәfI$;I bk직9NYڌ1&;{̦*"uen ޜhyq?W]9 o'¶vˆdi4ZDCd6'g=qo@A^|XwCڟL\ HhRK7WFl:ȾeV=JM'Dt!P0J4ntqNLN At"LT;`t}UQpaֳc)o> z1:7C<@|E $p--G| [f$aȳ[Rt#oxђccl4tXTLJL,.nozVӚᦜ|}zO%v#t©#Y#Ά`ΠXKo+]Q {ѹw(qvS :79ʊr2_ ީUj"X'oxF Rv8!OnH;Q˰>-ϼZ$N?._ϙ)ag29D#7Zq0%Pv-RB2I1gF%2G(Adњ\ND]42 6ԧ#&*oSaw6R`EhQw0i*';ȑ]?ٿZ>d$Zyviov[[pf"-C z֥L, ?̡&8,S򥆟ɉ>u_kl4j:wמe| R`Z.|KxoU\⼒CC ۺHϾpvGy2s O P8LG  ĞI 4p=#b\]P}&88xaAXr܁ Fʕtw1N#Hy<"qu {Vh2y \tJyOOs*$WLeV`3}p9`J@#[W_4 &jg)S-@V ԽMWg8K;P9c(N$ p qtR~PquQ*iϸ:W*dV JhZ3'vgsN uk+>c~|'(.˦@`rtA!00U‹=թs8ѦA 0  *H  XqFo$&$I Azwɿ-'% >aw<3QeAuEmxoOV8,+ۡ3 0nG$2^/nxu6SK.o^+NͰh"T&cdy>Je|19q"he8pWC_q_ Y&e'DxHx *x1V--;G>i'PZ]9^kEBp>8*!QGzMhr;CGؼFЗJ$)ThƪB ^4w0twSIdzJ%OL`u4j Vsc+6\Z)T`>hv|<%7J[n(oR И+Zmix)Rڑi],././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2961872 fdroidserver-2.4.0/tests/metadata/0000755000175000017500000000000014770510164015646 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2961872 fdroidserver-2.4.0/tests/metadata/apk/0000755000175000017500000000000014770510164016421 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742893844.0 fdroidserver-2.4.0/tests/metadata/apk/info.guardianproject.urzip.yaml0000644000175000017500000000130014770471424024567 0ustar00hanshansantiFeatures: {} features: [] hash: abfb3adb7496611749e7abfb014c5c789e3a02489e48a5c3665110d1b1acd931 hashType: sha256 icon: info.guardianproject.urzip.100.png icons: '0': info.guardianproject.urzip.100.png '160': info.guardianproject.urzip.100.png icons_src: '-1': res/drawable/ic_launcher.png '160': res/drawable/ic_launcher.png ipfsCIDv1: bafybeigmtgrwyvj77jaflje2rf533haeqtpu2wtwsctryjusjnsawacsam minSdkVersion: 4 name: urzip packageName: info.guardianproject.urzip sig: e0ecb5fc2d63088e4a07ae410a127722 signer: 7eabd8c15de883d1e82b5df2fd4f7f769e498078e9ad6dc901f0e96db77ceac3 size: 9969 targetSdkVersion: 18 uses-permission: [] uses-permission-sdk-23: [] versionCode: 100 versionName: '0.1' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742893844.0 fdroidserver-2.4.0/tests/metadata/apk/org.dyndns.fules.ck.yaml0000644000175000017500000000236214770471424023113 0ustar00hanshansantiFeatures: {} features: [] hash: 897486e1f857c6c0ee32ccbad0e1b8cd82f6d0e65a44a23f13f852d2b63a18c8 hashType: sha256 icon: org.dyndns.fules.ck.20.png icons: '0': org.dyndns.fules.ck.20.png '120': org.dyndns.fules.ck.20.png '160': org.dyndns.fules.ck.20.png '240': org.dyndns.fules.ck.20.png icons_src: '-1': res/drawable-mdpi-v4/icon_launcher.png '120': res/drawable-ldpi-v4/icon_launcher.png '160': res/drawable-mdpi-v4/icon_launcher.png '240': res/drawable-hdpi-v4/icon_launcher.png ipfsCIDv1: bafybeifijmr5ygvfvig4vzbmdc3ysj6m46ddohaol4vgp4qoyooqpc27zu minSdkVersion: 7 name: Compass Keyboard nativecode: - arm64-v8a - armeabi - armeabi-v7a - mips - mips64 - x86 - x86_64 packageName: org.dyndns.fules.ck sig: 9bf7a6a67f95688daec75eab4b1436ac signer: 9326a2cc1a2f148202bc7837a0af3b81200bd37fd359c9e13a2296a71d342056 size: 132453 targetSdkVersion: 8 uses-permission: - !!python/object/new:fdroidserver.update.UsesPermission - android.permission.BIND_INPUT_METHOD - null - !!python/object/new:fdroidserver.update.UsesPermission - android.permission.READ_EXTERNAL_STORAGE - null - !!python/object/new:fdroidserver.update.UsesPermission - android.permission.VIBRATE - null uses-permission-sdk-23: [] versionCode: 20 versionName: v1.6pre2 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2121863 fdroidserver-2.4.0/tests/metadata/app.with.special.build.params/0000755000175000017500000000000014770510164023377 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2121863 fdroidserver-2.4.0/tests/metadata/app.with.special.build.params/en-US/0000755000175000017500000000000014770510164024326 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2961872 fdroidserver-2.4.0/tests/metadata/app.with.special.build.params/en-US/antifeatures/0000755000175000017500000000000014770510164027020 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/metadata/app.with.special.build.params/en-US/antifeatures/50_Ads.txt0000644000175000017500000000002014766514130030566 0ustar00hanshansincludes ad lib ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/metadata/app.with.special.build.params/en-US/antifeatures/50_Tracking.txt0000644000175000017500000000002214766514130031623 0ustar00hanshansstandard suspects ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/metadata/app.with.special.build.params/en-US/antifeatures/Ads.txt0000644000175000017500000000001114766514130030262 0ustar00hanshansplease no././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/metadata/app.with.special.build.params/en-US/antifeatures/NoSourceSince.txt0000644000175000017500000000001414766514130032275 0ustar00hanshansno activity ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2121863 fdroidserver-2.4.0/tests/metadata/app.with.special.build.params/zh-CN/0000755000175000017500000000000014770510164024316 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2961872 fdroidserver-2.4.0/tests/metadata/app.with.special.build.params/zh-CN/antifeatures/0000755000175000017500000000000014770510164027010 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/metadata/app.with.special.build.params/zh-CN/antifeatures/49_Tracking.txt0000644000175000017500000000003714766514130031631 0ustar00hanshansText from zh-CN/49_Tracking.txt././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/metadata/app.with.special.build.params/zh-CN/antifeatures/50_Ads.txt0000644000175000017500000000002614766514130030564 0ustar00hanshans包括广告图书馆 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/metadata/app.with.special.build.params.yml0000644000175000017500000000522314766514130024126 0ustar00hanshansAntiFeatures: - UpstreamNonFree Categories: - System License: GPL-3.0-only SourceCode: https://github.com/loadrunner/Facebook-Contact-Sync IssueTracker: https://github.com/loadrunner/Facebook-Contact-Sync/issues AutoName: UberSync for Facebook Summary: Sync your Facebook Contacts Description: |- To configure, go to "Settings => Accounts & Sync => Add Account". Depending on how many friends you have, the first import might take a while, so be patient. * Facebook does not allow to export phone numbers or emails: only names, pictures and statuses are synced. * Facebook users have the option to block one or all apps: if they opt for that, they will be EXCLUDED from your friends list. Appbrain SDK was removed before building. RepoType: git Repo: https://github.com/loadrunner/Facebook-Contact-Sync.git Builds: - versionName: 1.0.0 versionCode: 32 commit: b3879c973e7cac3a3319 - versionName: 1.0.1 versionCode: 33 commit: 252c8dd4c9 - versionName: 1.2.0 versionCode: 39 commit: v1.2.0 patch: - appbrain.patch srclibs: - FacebookSDK@sdk-version-3.0.1 rm: - libs/appbrain-sdk-android.jar prebuild: - sed -i 's@\(reference.1=\).*@\1$$FacebookSDK$$@' project.properties - sed -i 's/Class\[\]/Class\\[\]/g' $$FacebookSDK$$/src/com/facebook/model/GraphObject.java - versionName: 1.2.2 versionCode: 42 commit: v1.2.2 patch: - appbrain.patch srclibs: - FacebookSDK@sdk-version-3.0.2 rm: - libs/appbrain-sdk-android.jar extlibs: - android/android-support-v4.jar prebuild: - mv libs/android-support-v4.jar $$FacebookSDK$$/libs/ - sed -i 's@\(reference.1=\).*@\1$$FacebookSDK$$@' project.properties - sed -i 's/Class\[\]/Class\\[\]/g' $$FacebookSDK$$/src/com/facebook/model/GraphObject.java - versionName: 2.1.1 versionCode: 48 commit: 2.1.1 patch: - manifest-ads.patch - mobilecore.patch maven: yes srclibs: - FacebookSDK@sdk-version-3.0.2 - versionName: 2.1.1-b versionCode: 49 commit: 2.1.1 patch: - manifest-ads.patch - mobilecore.patch maven: yes@.. srclibs: - FacebookSDK@sdk-version-3.0.2 antifeatures: Tracking: Uses the Facebook SDK. - versionName: 2.1.1-c versionCode: 50 commit: 2.1.1 patch: - manifest-ads.patch - mobilecore.patch maven: '2' srclibs: - FacebookSDK@sdk-version-3.0.2 - versionName: 2.1.2 versionCode: 51 disable: Labelled as pre-release, so skipped ArchivePolicy: 0 AutoUpdateMode: None UpdateCheckMode: None CurrentVersion: 2.1.2 CurrentVersionCode: 49 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/metadata/com.politedroid.yml0000644000175000017500000000217614766514130021474 0ustar00hanshansAntiFeatures: - NonFreeNet Categories: - Multimedia - Security - Time License: GPL-3.0-only SourceCode: https://github.com/miguelvps/PoliteDroid IssueTracker: https://github.com/miguelvps/PoliteDroid/issues AutoName: Polite Droid Summary: Calendar tool Description: Activates silent mode during calendar events. RepoType: git Repo: https://github.com/miguelvps/PoliteDroid.git Builds: - versionName: '1.2' versionCode: 3 commit: 6a548e4b19 target: android-10 antifeatures: - KnownVuln - UpstreamNonFree - NonFreeAssets - versionName: '1.3' versionCode: 4 commit: ad865b57bf3ac59580f38485608a9b1dda4fa7dc target: android-15 - versionName: '1.4' versionCode: 5 commit: 456bd615f3fbe6dff06433928cf7ea20073601fb target: android-10 - versionName: '1.5' versionCode: 6 commit: v1.5 sudo: echo 'this is just a test' gradle: - yes antifeatures: - KnownVuln - UpstreamNonFree - NonFreeAssets ArchivePolicy: 4 versions AutoUpdateMode: Version v%v UpdateCheckMode: Tags CurrentVersion: '1.5' CurrentVersionCode: 6 NoSourceSince: '1.5' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2961872 fdroidserver-2.4.0/tests/metadata/dump/0000755000175000017500000000000014770510164016613 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/tests/metadata/dump/app.with.special.build.params.yaml0000644000175000017500000001553714770502071025241 0ustar00hanshans%YAML 1.2 --- AllowedAPKSigningKeys: [] AntiFeatures: UpstreamNonFree: {} ArchivePolicy: 0 AuthorEmail: null AuthorName: null AuthorWebSite: null AutoName: UberSync for Facebook AutoUpdateMode: None Binaries: null Bitcoin: null Builds: - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: [] commit: b3879c973e7cac3a3319 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: '' rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: null submodules: false sudo: '' target: null timeout: null versionCode: 32 versionName: 1.0.0 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: [] commit: 252c8dd4c9 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: '' rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: null submodules: false sudo: '' target: null timeout: null versionCode: 33 versionName: 1.0.1 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: [] commit: v1.2.0 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: - appbrain.patch postbuild: '' preassemble: [] prebuild: - sed -i 's@\(reference.1=\).*@\1$$FacebookSDK$$@' project.properties - sed -i 's/Class\[\]/Class\\[\]/g' $$FacebookSDK$$/src/com/facebook/model/GraphObject.java rm: - libs/appbrain-sdk-android.jar scandelete: [] scanignore: [] srclibs: - FacebookSDK@sdk-version-3.0.1 subdir: null submodules: false sudo: '' target: null timeout: null versionCode: 39 versionName: 1.2.0 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: [] commit: v1.2.2 disable: '' encoding: null extlibs: - android/android-support-v4.jar forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: - appbrain.patch postbuild: '' preassemble: [] prebuild: - mv libs/android-support-v4.jar $$FacebookSDK$$/libs/ - sed -i 's@\(reference.1=\).*@\1$$FacebookSDK$$@' project.properties - sed -i 's/Class\[\]/Class\\[\]/g' $$FacebookSDK$$/src/com/facebook/model/GraphObject.java rm: - libs/appbrain-sdk-android.jar scandelete: [] scanignore: [] srclibs: - FacebookSDK@sdk-version-3.0.2 subdir: null submodules: false sudo: '' target: null timeout: null versionCode: 42 versionName: 1.2.2 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: [] commit: 2.1.1 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: yes ndk: null novcheck: false oldsdkloc: false output: null patch: - manifest-ads.patch - mobilecore.patch postbuild: '' preassemble: [] prebuild: '' rm: [] scandelete: [] scanignore: [] srclibs: - FacebookSDK@sdk-version-3.0.2 subdir: null submodules: false sudo: '' target: null timeout: null versionCode: 48 versionName: 2.1.1 - androidupdate: [] antcommands: [] antifeatures: Tracking: en-US: Uses the Facebook SDK. binary: null build: '' buildjni: [] commit: 2.1.1 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: yes@.. ndk: null novcheck: false oldsdkloc: false output: null patch: - manifest-ads.patch - mobilecore.patch postbuild: '' preassemble: [] prebuild: '' rm: [] scandelete: [] scanignore: [] srclibs: - FacebookSDK@sdk-version-3.0.2 subdir: null submodules: false sudo: '' target: null timeout: null versionCode: 49 versionName: 2.1.1-b - androidupdate: [] antcommands: [] antifeatures: Ads: en-US: 'includes ad lib ' zh-CN: '包括广告图书馆 ' Tracking: en-US: 'standard suspects ' binary: null build: '' buildjni: [] commit: 2.1.1 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: '2' ndk: null novcheck: false oldsdkloc: false output: null patch: - manifest-ads.patch - mobilecore.patch postbuild: '' preassemble: [] prebuild: '' rm: [] scandelete: [] scanignore: [] srclibs: - FacebookSDK@sdk-version-3.0.2 subdir: null submodules: false sudo: '' target: null timeout: null versionCode: 50 versionName: 2.1.1-c - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: [] commit: null disable: Labelled as pre-release, so skipped encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: '' rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: null submodules: false sudo: '' target: null timeout: null versionCode: 51 versionName: 2.1.2 Categories: - System Changelog: '' CurrentVersion: 2.1.2 CurrentVersionCode: 49 Description: 'To configure, go to "Settings => Accounts & Sync => Add Account". Depending on how many friends you have, the first import might take a while, so be patient. * Facebook does not allow to export phone numbers or emails: only names, pictures and statuses are synced. * Facebook users have the option to block one or all apps: if they opt for that, they will be EXCLUDED from your friends list. Appbrain SDK was removed before building.' Disabled: null Donate: null IssueTracker: https://github.com/loadrunner/Facebook-Contact-Sync/issues Liberapay: null License: GPL-3.0-only Litecoin: null MaintainerNotes: '' Name: null NoSourceSince: '' OpenCollective: null Provides: null Repo: https://github.com/loadrunner/Facebook-Contact-Sync.git RepoType: git RequiresRoot: false SourceCode: https://github.com/loadrunner/Facebook-Contact-Sync Summary: Sync your Facebook Contacts Translation: '' UpdateCheckData: null UpdateCheckIgnore: null UpdateCheckMode: None UpdateCheckName: null VercodeOperation: [] WebSite: '' added: null id: app.with.special.build.params lastUpdated: null metadatapath: metadata/app.with.special.build.params.yml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/tests/metadata/dump/com.politedroid.yaml0000644000175000017500000000670414770502071022577 0ustar00hanshans%YAML 1.2 --- AllowedAPKSigningKeys: [] AntiFeatures: NoSourceSince: en-US: '1.5' NonFreeNet: {} ArchivePolicy: 4 AuthorEmail: null AuthorName: null AuthorWebSite: null AutoName: Polite Droid AutoUpdateMode: Version v%v Binaries: null Bitcoin: null Builds: - androidupdate: [] antcommands: [] antifeatures: KnownVuln: {} NonFreeAssets: {} UpstreamNonFree: {} binary: null build: '' buildjni: [] commit: 6a548e4b19 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: '' rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: null submodules: false sudo: '' target: android-10 timeout: null versionCode: 3 versionName: '1.2' - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: [] commit: ad865b57bf3ac59580f38485608a9b1dda4fa7dc disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: '' rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: null submodules: false sudo: '' target: android-15 timeout: null versionCode: 4 versionName: '1.3' - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: [] commit: 456bd615f3fbe6dff06433928cf7ea20073601fb disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: '' rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: null submodules: false sudo: '' target: android-10 timeout: null versionCode: 5 versionName: '1.4' - androidupdate: [] antcommands: [] antifeatures: KnownVuln: {} NonFreeAssets: {} UpstreamNonFree: {} binary: null build: '' buildjni: [] commit: v1.5 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - yes gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: '' rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: null submodules: false sudo: - echo 'this is just a test' target: null timeout: null versionCode: 6 versionName: '1.5' Categories: - Multimedia - Security - Time Changelog: '' CurrentVersion: '1.5' CurrentVersionCode: 6 Description: Activates silent mode during calendar events. Disabled: null Donate: null IssueTracker: https://github.com/miguelvps/PoliteDroid/issues Liberapay: null License: GPL-3.0-only Litecoin: null MaintainerNotes: '' Name: null NoSourceSince: '1.5' OpenCollective: null Provides: null Repo: https://github.com/miguelvps/PoliteDroid.git RepoType: git RequiresRoot: false SourceCode: https://github.com/miguelvps/PoliteDroid Summary: Calendar tool Translation: '' UpdateCheckData: null UpdateCheckIgnore: null UpdateCheckMode: Tags UpdateCheckName: null VercodeOperation: [] WebSite: '' added: null id: com.politedroid lastUpdated: null metadatapath: metadata/com.politedroid.yml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/tests/metadata/dump/org.adaway.yaml0000644000175000017500000005073514770502071021543 0ustar00hanshans%YAML 1.2 --- AllowedAPKSigningKeys: [] AntiFeatures: {} ArchivePolicy: null AuthorEmail: null AuthorName: null AuthorWebSite: null AutoName: AdAway AutoUpdateMode: Version v%v Binaries: null Bitcoin: null Builds: - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: - yes commit: ea5378a94ee0dc1d99d2cec95fae7e6d81afb2b9 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: '' rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: org_adaway/ submodules: false sudo: '' target: null timeout: null versionCode: 13 versionName: '1.12' - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: - yes commit: 4128e59da2eac5c2904c7c7568d298ca51e79540 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: - defprop.patch postbuild: '' preassemble: [] prebuild: '' rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: org_adaway/ submodules: false sudo: '' target: null timeout: null versionCode: 16 versionName: '1.15' - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: - yes commit: 0b9985398b9eef7baf6aadd0dbb12002bc199d2e disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: - defprop.patch postbuild: '' preassemble: [] prebuild: '' rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: org_adaway/ submodules: false sudo: '' target: null timeout: null versionCode: 19 versionName: '1.18' - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: - yes commit: ab27f4dab5f3ea5e228cfb4a6b0e1fbf53695f22 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: - defprop.patch postbuild: '' preassemble: [] prebuild: '' rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: org_adaway/ submodules: false sudo: '' target: null timeout: null versionCode: 20 versionName: '1.19' - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: - yes commit: 695e3801e4081026c8f7213a2345fc451d5eb89c disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: - defprop.patch postbuild: '' preassemble: [] prebuild: '' rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: org_adaway/ submodules: false sudo: '' target: null timeout: null versionCode: 21 versionName: '1.20' - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: - yes commit: 65138c11cc8b6affd28b68e125fbc1dff0886a4e disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: - defprop.patch postbuild: '' preassemble: [] prebuild: '' rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: org_adaway/ submodules: false sudo: '' target: null timeout: null versionCode: 22 versionName: '1.21' - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: [] commit: unknown - see disabled disable: no source in repo encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: '' rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: null submodules: false sudo: '' target: null timeout: null versionCode: 24 versionName: '1.23' - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: - yes commit: f811e53e1e1d2ee047b18715fd7d2072b90ae76b disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - android update project -p ../com_actionbarsherlock rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: org_adaway/ submodules: false sudo: '' target: null timeout: null versionCode: 25 versionName: '1.24' - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: - yes commit: ff97932761cdee68638dc2550751a64b2cbe18e7 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - android update project -p ../com_actionbarsherlock rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: org_adaway/ submodules: false sudo: '' target: null timeout: null versionCode: 26 versionName: '1.25' - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: - yes commit: 33d4d80998f30bafc88c04c80cbae00b03916f99 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - android update project -p ../com_actionbarsherlock rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: org_adaway/ submodules: false sudo: '' target: null timeout: null versionCode: 27 versionName: '1.26' - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: - yes commit: 743d25a7e287505461f33f4b8e57e4cf988fffea disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - android update project -p ../com_actionbarsherlock rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: org_adaway/ submodules: false sudo: '' target: null timeout: null versionCode: 28 versionName: '1.27' - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: - yes commit: eaa07f4 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - android update project -p ../com_actionbarsherlock - rm -rf libs/armeabi/* rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: org_adaway/ submodules: false sudo: '' target: null timeout: null versionCode: 30 versionName: '1.29' - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: [] commit: 71ced3f disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - android update project -p ../com_actionbarsherlock - rm -rf libs/armeabi/* - rm libs/android-support-v4.jar rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: org_adaway/ submodules: false sudo: '' target: null timeout: null versionCode: 33 versionName: '1.32' - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: [] commit: 9d63c18 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - android update project -p ../com_actionbarsherlock - rm -rf libs/armeabi/* rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: org_adaway/ submodules: false sudo: '' target: null timeout: null versionCode: 34 versionName: '1.33' - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: [] commit: f2568b1 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - android update project -p ../com_actionbarsherlock - rm -rf libs/armeabi/* - android update project -p ../org_donations rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: org_adaway/ submodules: false sudo: '' target: null timeout: null versionCode: 35 versionName: '1.34' - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: [] commit: 7442d5d disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - android update project -p ../com_actionbarsherlock - rm -rf libs/armeabi/* - android update project -p ../org_donations rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: org_adaway/ submodules: false sudo: '' target: null timeout: null versionCode: 36 versionName: '1.35' - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: [] commit: 83fc713 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - android update project -p ../com_actionbarsherlock - rm -rf libs/armeabi/* - android update project -p ../org_donations rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: org_adaway/ submodules: false sudo: '' target: null timeout: null versionCode: 37 versionName: '1.36' - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: [] commit: 70da32b567122b701cdcb1609b780eb85732028f disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - android update project -p ../com_actionbarsherlock - rm -rf libs/armeabi/* - android update project -p ../org_donations rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: org_adaway/ submodules: false sudo: '' target: null timeout: null versionCode: 38 versionName: '1.37' - androidupdate: - . - android-libs/Donations - android-libs/ActionBarSherlock - android-libs/HtmlSpanner/htmlspanner antcommands: [] antifeatures: {} binary: null build: '' buildjni: - yes commit: v2.1 disable: '' encoding: null extlibs: - htmlcleaner/htmlcleaner-2.2.jar forcevercode: false forceversion: false gradle: [] gradleprops: [] init: - rm android-libs/Donations/custom_rules.xml - git clone https://github.com/dschuermann/HtmlSpanner android-libs/HtmlSpanner maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - rm -rf ../update_zip libs/root-commands-1.2.jar libs/htmlspanner-0.2-fork.jar - cp -f libs/htmlcleaner-2.2.jar android-libs/HtmlSpanner/htmlspanner/libs/ - echo "android.library.reference.3=$$RootCommands$$" >> project.properties - echo "android.library.reference.4=android-libs/HtmlSpanner/htmlspanner" >> project.properties - find . -type f -print0 | xargs -0 sed -i 's/org.rootcommands/org.sufficientlysecure.rootcommands/g' - cp android-libs/Donations/ant-templates/other/DonationsConfig.java android-libs/Donations/src/org/donations/ rm: [] scandelete: [] scanignore: [] srclibs: - RootCommands@c940b0e503 subdir: AdAway submodules: false sudo: '' target: null timeout: null versionCode: 40 versionName: '2.1' - androidupdate: - . - android-libs/Donations - android-libs/ActionBarSherlock - android-libs/HtmlSpanner/htmlspanner antcommands: [] antifeatures: {} binary: null build: '' buildjni: - yes commit: v2.3 disable: '' encoding: null extlibs: - htmlcleaner/htmlcleaner-2.2.jar forcevercode: false forceversion: false gradle: [] gradleprops: [] init: - rm android-libs/Donations/custom_rules.xml - git clone https://github.com/dschuermann/HtmlSpanner android-libs/HtmlSpanner maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - rm -rf ../update_zip libs/root-commands-1.2.jar libs/htmlspanner-0.2-fork.jar - cp -f libs/htmlcleaner-2.2.jar android-libs/HtmlSpanner/htmlspanner/libs/ - echo "android.library.reference.3=$$RootCommands$$" >> project.properties - echo "android.library.reference.4=android-libs/HtmlSpanner/htmlspanner" >> project.properties - find . -type f -print0 | xargs -0 sed -i 's/org.rootcommands/org.sufficientlysecure.rootcommands/g' - cp android-libs/Donations/ant-templates/other/DonationsConfig.java android-libs/Donations/src/org/donations/ rm: [] scandelete: [] scanignore: [] srclibs: - RootCommands@c940b0e503 subdir: AdAway submodules: false sudo: '' target: null timeout: null versionCode: 42 versionName: '2.3' - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: - yes commit: v2.6 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - yes gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: - renameExecutables prebuild: '' rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: AdAway submodules: false sudo: '' target: null timeout: null versionCode: 45 versionName: '2.6' - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: - yes commit: v2.7 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - yes gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: - renameExecutables prebuild: '' rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: AdAway submodules: false sudo: '' target: null timeout: null versionCode: 46 versionName: '2.7' - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: - yes commit: v2.8 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - yes gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: - renameExecutables prebuild: '' rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: AdAway submodules: false sudo: '' target: null timeout: null versionCode: 47 versionName: '2.8' - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: - yes commit: v2.8.1 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - yes gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: - renameExecutables prebuild: '' rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: AdAway submodules: false sudo: '' target: null timeout: null versionCode: 48 versionName: 2.8.1 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: - yes commit: v2.9 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - yes gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: - renameExecutables prebuild: '' rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: AdAway submodules: false sudo: '' target: null timeout: null versionCode: 49 versionName: '2.9' - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: - yes commit: v2.9.1 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - yes gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: - renameExecutables prebuild: '' rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: AdAway submodules: false sudo: '' target: null timeout: null versionCode: 50 versionName: 2.9.1 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: - yes commit: v2.9.2 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - yes gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: - renameExecutables prebuild: '' rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: AdAway submodules: false sudo: '' target: null timeout: null versionCode: 51 versionName: 2.9.2 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: - yes commit: v3.0 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - yes gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: - renameExecutables prebuild: '' rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: AdAway submodules: false sudo: '' target: null timeout: null versionCode: 52 versionName: '3.0' Categories: - System - Security Changelog: '' CurrentVersion: '3.0' CurrentVersionCode: 52 Description: 'An ad blocker that uses the hosts file. The hosts file contains a list of mappings between hostnames and IP addresses. When an app requests an ad, that request is directed to 127.0.0.1 which does nothing. There are options to run a web server to respond to blocked hostnames and to direct requests to the IP address of your choosing. You can download hosts files from the app but it is possible to use your own and to add certain sites to the white- and black-lists. [https://github.com/dschuermann/ad-away/raw/HEAD/CHANGELOG Changelog] Requires root: Yes. The hosts files is located in /system which is normally read-only.' Disabled: null Donate: http://sufficientlysecure.org/index.php/adaway IssueTracker: https://github.com/dschuermann/ad-away/issues Liberapay: null License: GPL-3.0-only Litecoin: null MaintainerNotes: '' Name: null NoSourceSince: '' OpenCollective: null Provides: null Repo: https://github.com/dschuermann/ad-away.git RepoType: git RequiresRoot: false SourceCode: https://github.com/dschuermann/ad-away Summary: Block advertisements Translation: https://www.transifex.com/dominikschuermann/adaway UpdateCheckData: null UpdateCheckIgnore: null UpdateCheckMode: Tags UpdateCheckName: null VercodeOperation: [] WebSite: http://sufficientlysecure.org/index.php/adaway added: null id: org.adaway lastUpdated: null metadatapath: metadata/org.adaway.yml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/tests/metadata/dump/org.smssecure.smssecure.yaml0000644000175000017500000002026514770502071024311 0ustar00hanshans%YAML 1.2 --- AllowedAPKSigningKeys: [] AntiFeatures: {} ArchivePolicy: null AuthorEmail: null AuthorName: null AuthorWebSite: null AutoName: SMSSecure AutoUpdateMode: Version v%v Binaries: null Bitcoin: null Builds: - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: [] commit: 66367479a4f57f347b5cbe8f6f8f632adaae7727 disable: builds, merge changes into upstream encoding: null extlibs: [] forcevercode: true forceversion: false gradle: - yes gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - touch signing.properties - pushd $$GradleWitness$$ - gradle jar - popd - cp $$GradleWitness$$/build/libs/GradleWitness.jar libs/gradle-witness.jar - sed -i -e '20,22d' build.gradle - pushd $$PreferenceFragment$$ - gradle uploadArchives - popd - sed -i -e '/5470f5872514a6226fa1fc6f4e000991f38805691c534cf0bd2778911fc773ad/d' build.gradle - mkdir smil - pushd smil - wget -c http://www.w3.org/TR/smil-boston-dom/java-binding.zip - unzip java-binding.zip - popd - cp -fR smil/java/org src/ - rm -fR smil - sed -i -e '/org.w3c.smil/d' build.gradle - cp -fR $$AospMms$$/src/org src/ rm: - libs/* scandelete: [] scanignore: [] srclibs: - GradleWitness@10f1269c0aafdc1d478efc005ed48f3a47d44278 - PreferenceFragment@717a45433b927d2f0dfc5328f79e77c9682c37bc - ShortcutBadger@3815ce2ec0c66acd7d7c0b4f2479df8fa70fed87 - AospMms@android-5.1.0_r3 subdir: null submodules: false sudo: '' target: null timeout: null versionCode: 5 versionName: 0.3.3 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: [] commit: 9675ce5eecb929dcaddb43b3d9486fdb88b9ae1a disable: builds, wait for upstream encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - yes gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - touch signing.properties - pushd $$GradleWitness$$ - gradle jar - popd - cp $$GradleWitness$$/build/libs/GradleWitness.jar libs/gradle-witness.jar rm: - libs/*.jar scandelete: [] scanignore: [] srclibs: - GradleWitness@10f1269c0aafdc1d478efc005ed48f3a47d44278 subdir: null submodules: true sudo: '' target: null timeout: null versionCode: 6 versionName: 0.3.3 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: [] commit: v0.4.2 disable: builds locally, but not on BS encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - yes gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - touch signing.properties - ./build-witness.sh - rm -rf libs/gradle-witness/build - echo "org.gradle.jvmargs=-Xms512m -Xmx512m -XX:MaxPermSize=512m" >> gradle.properties rm: - libs/*.jar scandelete: [] scanignore: [] srclibs: [] subdir: null submodules: true sudo: '' target: null timeout: null versionCode: 9 versionName: 0.4.2 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: [] commit: v0.5.1 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - yes gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - touch signing.properties - ./build-witness.sh - rm -rf libs/gradle-witness/build - echo "org.gradle.jvmargs=-Xms512m -Xmx512m -XX:MaxPermSize=512m" >> gradle.properties rm: - libs/*.jar scandelete: [] scanignore: [] srclibs: [] subdir: null submodules: true sudo: '' target: null timeout: null versionCode: 11 versionName: 0.5.1 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: [] commit: v0.5.2 disable: broken in upstream encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - yes gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - touch signing.properties - ./scripts/build-witness.sh - rm -rf libs/gradle-witness/build rm: - libs/*.jar scandelete: [] scanignore: [] srclibs: [] subdir: null submodules: true sudo: '' target: null timeout: null versionCode: 12 versionName: 0.5.2 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: [] commit: v0.5.3 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - yes gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - touch signing.properties - ./scripts/build-witness.sh - rm -rf libs/gradle-witness/build rm: - libs/*.jar scandelete: [] scanignore: [] srclibs: [] subdir: null submodules: true sudo: '' target: null timeout: null versionCode: 100 versionName: 0.5.3 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: [] commit: v0.5.4 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - yes gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - touch signing.properties - ./scripts/build-witness.sh - rm -rf libs/gradle-witness/build rm: - libs/*.jar scandelete: [] scanignore: [] srclibs: [] subdir: null submodules: true sudo: '' target: null timeout: null versionCode: 101 versionName: 0.5.4 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: '' buildjni: [] commit: v0.6.0 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - yes gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - touch signing.properties - ./scripts/build-witness.sh - rm -rf libs/gradle-witness/build rm: - libs/*.jar scandelete: [] scanignore: [] srclibs: [] subdir: null submodules: true sudo: '' target: null timeout: null versionCode: 102 versionName: 0.6.0 Categories: - Phone & SMS Changelog: '' CurrentVersion: 0.6.0 CurrentVersionCode: 102 Description: 'SMSSecure is an SMS/MMS application that allows you to protect your privacy while communicating with friends. Using SMSSecure, you can send SMS messages and share media or attachments with complete privacy. * Easy. SMSSecure works like any other SMS application. There''s nothing to sign up for and no new service your friends need to join. * Reliable. SMSSecure communicates using encrypted SMS messages. No servers or internet connection required. * Private. SMSSecure uses the TextSecure encryption protocol to provide privacy for every message, every time. * Safe. All messages are encrypted locally, so if your phone is lost or stolen, your messages are protected. * Open Source. SMSSecure is Free and Open Source, enabling anyone to verify its security by auditing the code.' Disabled: null Donate: null IssueTracker: https://github.com/SMSSecure/SMSSecure/issues Liberapay: null License: GPL-3.0-only Litecoin: null MaintainerNotes: '' Name: null NoSourceSince: '' OpenCollective: null Provides: null Repo: https://github.com/SMSSecure/SMSSecure RepoType: git RequiresRoot: false SourceCode: https://github.com/SMSSecure/SMSSecure Summary: Send encrypted text messages (SMS) Translation: https://www.transifex.com/silence/silence UpdateCheckData: null UpdateCheckIgnore: null UpdateCheckMode: Tags UpdateCheckName: null VercodeOperation: [] WebSite: http://www.smssecure.org added: null id: org.smssecure.smssecure lastUpdated: null metadatapath: metadata/org.smssecure.smssecure.yml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/tests/metadata/dump/org.videolan.vlc.yaml0000644000175000017500000014226014770502071022654 0ustar00hanshans%YAML 1.2 --- AllowedAPKSigningKeys: [] AntiFeatures: {} ArchivePolicy: 9 AuthorEmail: null AuthorName: null AuthorWebSite: null AutoName: VLC AutoUpdateMode: None Binaries: null Bitcoin: null Builds: - androidupdate: - . - ../java-libs/SlidingMenu - ../java-libs/ActionBarSherlock antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release buildjni: [] commit: 0.0.11 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: true gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '48d' ../Makefile rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 110 versionName: 0.0.11-ARMv7 - androidupdate: - . - ../java-libs/SlidingMenu - ../java-libs/ActionBarSherlock antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=armeabi ./compile.sh release buildjni: [] commit: 0.0.11 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: true gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '48d' ../Makefile rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 111 versionName: 0.0.11-ARM - androidupdate: - . - ../java-libs/SlidingMenu - ../java-libs/ActionBarSherlock antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=x86 ./compile.sh release buildjni: [] commit: unknown - see disabled disable: ffmpeg error 0.0.11 encoding: null extlibs: [] forcevercode: true forceversion: true gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '48d' ../Makefile rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 112 versionName: 0.0.11-x86 - androidupdate: - . - ../java-libs/SlidingMenu - ../java-libs/ActionBarSherlock antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=mips ./compile.sh release buildjni: [] commit: 0.0.11 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: true gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '48d' ../Makefile rm: [] scandelete: [] scanignore: [] srclibs: [] subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 113 versionName: 0.0.11-mips - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=mips ./compile.sh release buildjni: [] commit: 0.1.3 disable: build failing (at 0.1.3) encoding: null extlibs: [] forcevercode: true forceversion: true gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: - ndkr9.patch postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@7c52aacbe subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1301 versionName: 0.1.3-MIPS - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=x86 ./compile.sh release buildjni: [] commit: 0.1.3 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: true gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: - ndkr9.patch postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@7c52aacbe subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1302 versionName: 0.1.3-x86 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=armeabi ./compile.sh release buildjni: [] commit: 0.1.3 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: true gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: - ndkr9.patch postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@7c52aacbe subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1303 versionName: 0.1.3-ARM - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release buildjni: [] commit: 0.1.3 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: true gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: - ndkr9.patch postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@7c52aacbe subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1304 versionName: 0.1.3-ARMv7 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=x86 ./compile.sh release buildjni: [] commit: 0.9.0 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@31ffb20309264994 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 9002 versionName: 0.9.0 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release buildjni: [] commit: 0.9.0 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@31ffb20309264994 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 9004 versionName: 0.9.0 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=x86 ./compile.sh release buildjni: [] commit: 0.9.1 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@37e886d113b8b567c15208579fb2f subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 9102 versionName: 0.9.1 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release buildjni: [] commit: 0.9.1 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@37e886d113b8b567c15208579fb2f subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 9104 versionName: 0.9.1 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=x86 ./compile.sh release buildjni: [] commit: 0.9.5 disable: can't download gmp encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@052600173f376ff58ff04d53746961a2 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 9502 versionName: 0.9.5 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release buildjni: [] commit: 0.9.5 disable: can't download gmp encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@052600173f376ff58ff04d53746961a2 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 9504 versionName: 0.9.5 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=x86 ./compile.sh release buildjni: [] commit: 0.9.6 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC-2.2@27f4799 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 9602 versionName: 0.9.6 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release buildjni: [] commit: 0.9.6 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC-2.2@27f4799 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 9604 versionName: 0.9.6 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=x86 ./compile.sh release buildjni: [] commit: 0.9.7 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC-2.2@9e1c6ff subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 9702 versionName: 0.9.7 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release buildjni: [] commit: 0.9.7 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC-2.2@9e1c6ff subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 9704 versionName: 0.9.7 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=mips ./compile.sh release buildjni: [] commit: 0.9.7.1 disable: build fails encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC-2.2@57cd36b subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 9711 versionName: 0.9.7.1 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=x86 ./compile.sh release buildjni: [] commit: 0.9.7.1 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC-2.2@57cd36b subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 9712 versionName: 0.9.7.1 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release buildjni: [] commit: 0.9.7.1 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC-2.2@57cd36b subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 9714 versionName: 0.9.7.1 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=x86 ./compile.sh release buildjni: [] commit: 0.9.8 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC-2.2@f2db364 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 9802 versionName: 0.9.8 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=armeabi ./compile.sh release buildjni: [] commit: 0.9.8 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC-2.2@f2db364 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 9803 versionName: 0.9.8 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release buildjni: [] commit: 0.9.8 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC-2.2@f2db364 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 9804 versionName: 0.9.8 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=x86 ./compile.sh release buildjni: [] commit: 0.9.9 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC-2.2@e731dc23a4f8ef6782c7cc2236bbbf41c034dad1 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 9902 versionName: 0.9.9 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=armeabi ./compile.sh release buildjni: [] commit: 0.9.9 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC-2.2@e731dc23a4f8ef6782c7cc2236bbbf41c034dad1 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 9903 versionName: 0.9.9 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release buildjni: [] commit: 0.9.9 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC-2.2@e731dc23a4f8ef6782c7cc2236bbbf41c034dad1 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 9904 versionName: 0.9.9 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=x86 ./compile.sh release buildjni: [] commit: 0.9.10 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC-2.2@e33e5de subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 10002 versionName: 0.9.10 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=armeabi ./compile.sh release buildjni: [] commit: 0.9.10 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC-2.2@e33e5de subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 10003 versionName: 0.9.10 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release buildjni: [] commit: 0.9.10 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC-2.2@e33e5de subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 10004 versionName: 0.9.10 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=x86 ./compile.sh release buildjni: [] commit: 1.0.0 disable: doesn't build encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC-2.2@036010e subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 10006 versionName: 1.0.0 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=armeabi ./compile.sh release buildjni: [] commit: 1.0.0 disable: doesn't build encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC-2.2@036010e subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 10007 versionName: 1.0.0 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release buildjni: [] commit: 1.0.0 disable: doesn't build encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC-2.2@036010e subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 10008 versionName: 1.0.0 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=x86 ./compile.sh release buildjni: [] commit: 1.0.1 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC-2.2@59409d5 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 10102 versionName: 1.0.1 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=armeabi ./compile.sh release buildjni: [] commit: 1.0.1 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC-2.2@59409d5 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 10103 versionName: 1.0.1 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release buildjni: [] commit: 1.0.1 disable: '' encoding: null extlibs: [] forcevercode: true forceversion: false gradle: [] gradleprops: [] init: '' maven: null ndk: null novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC-2.2@59409d5 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 10104 versionName: 1.0.1 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "armeabi" --release buildjni: [] commit: 1.1.3 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaARMv6fpu gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@a9b19e4 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1010303 versionName: 1.1.3 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "armeabi-v7a" --release buildjni: [] commit: 1.1.3 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaARMv7 gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@a9b19e4 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1010304 versionName: 1.1.3 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "x86" --release buildjni: [] commit: 1.1.3 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaX86 gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@a9b19e4 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1010305 versionName: 1.1.3 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "armeabi" --release buildjni: [] commit: 1.1.5 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaARMv6fpu gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@e6b4585 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1010503 versionName: 1.1.5 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "armeabi-v7a" --release buildjni: [] commit: 1.1.5 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaARMv7 gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@e6b4585 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1010504 versionName: 1.1.5 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "x86" --release buildjni: [] commit: 1.1.5 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaX86 gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@e6b4585 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1010505 versionName: 1.1.5 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "armeabi" --release buildjni: [] commit: 1.1.6 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaARMv6fpu gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@551b670 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1010603 versionName: 1.1.6 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "armeabi-v7a" --release buildjni: [] commit: 1.1.6 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaARMv7 gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@551b670 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1010604 versionName: 1.1.6 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "x86" --release buildjni: [] commit: 1.1.6 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaX86 gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@551b670 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1010605 versionName: 1.1.6 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "armeabi" --release buildjni: [] commit: 1.2.0 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaARMv6fpu gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@23c8d86 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1020003 versionName: 1.2.0 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "armeabi-v7a" --release buildjni: [] commit: 1.2.0 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaARMv7 gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@23c8d86 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1020004 versionName: 1.2.0 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "x86" --release buildjni: [] commit: 1.2.0 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaX86 gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@23c8d86 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1020005 versionName: 1.2.0 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "armeabi" --release buildjni: [] commit: 1.2.1 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaARMv6fpu gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@23c8d86 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1020103 versionName: 1.2.1 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "armeabi-v7a" --release buildjni: [] commit: 1.2.1 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaARMv7 gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@23c8d86 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1020104 versionName: 1.2.1 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "x86" --release buildjni: [] commit: 1.2.1 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaX86 gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@23c8d86 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1020105 versionName: 1.2.1 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "armeabi" --release buildjni: [] commit: 1.2.2 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaARMv6fpu gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@7491a5f subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1020203 versionName: 1.2.2 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "armeabi-v7a" --release buildjni: [] commit: 1.2.2 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaARMv7 gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@7491a5f subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1020204 versionName: 1.2.2 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "x86" --release buildjni: [] commit: 1.2.2 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaX86 gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@7491a5f subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1020205 versionName: 1.2.2 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "armeabi" --release buildjni: [] commit: 1.2.3 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaARMv6fpu gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@7491a5f subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1020303 versionName: 1.2.3 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "armeabi-v7a" --release buildjni: [] commit: 1.2.3 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaARMv7 gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@7491a5f subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1020304 versionName: 1.2.3 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "x86" --release buildjni: [] commit: 1.2.3 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaX86 gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@7491a5f subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1020305 versionName: 1.2.3 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "armeabi" --release buildjni: [] commit: 1.2.4 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaARMv6fpu gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@7491a5f subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1020403 versionName: 1.2.4 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "armeabi-v7a" --release buildjni: [] commit: 1.2.4 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaARMv7 gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@7491a5f subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1020404 versionName: 1.2.4 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "x86" --release buildjni: [] commit: 1.2.4 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaX86 gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@7491a5f subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1020405 versionName: 1.2.4 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "armeabi" --release buildjni: [] commit: 1.2.5 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaARMv6fpu gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@50accb8 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1020503 versionName: 1.2.5 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "armeabi-v7a" --release buildjni: [] commit: 1.2.5 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaARMv7 gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@50accb8 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1020504 versionName: 1.2.5 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "x86" --release buildjni: [] commit: 1.2.5 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaX86 gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@50accb8 subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1020505 versionName: 1.2.5 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "armeabi" --release buildjni: [] commit: 1.2.6 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaARMv6fpu gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@d59b81a subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1030003 versionName: 1.2.6 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "armeabi-v7a" --release buildjni: [] commit: 1.2.6 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaARMv7 gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@d59b81a subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1030004 versionName: 1.2.6 - androidupdate: [] antcommands: [] antifeatures: {} binary: null build: - cd ../ && ./compile.sh -a "x86" --release buildjni: [] commit: 1.2.6 disable: '' encoding: null extlibs: [] forcevercode: false forceversion: false gradle: - VanillaX86 gradleprops: [] init: '' maven: null ndk: r10d novcheck: false oldsdkloc: false output: null patch: [] postbuild: '' preassemble: [] prebuild: - sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc rm: [] scandelete: [] scanignore: [] srclibs: - VLC@d59b81a subdir: vlc-android submodules: false sudo: '' target: null timeout: null versionCode: 1030005 versionName: 1.2.6 Categories: - Multimedia Changelog: '' CurrentVersion: 1.2.6 CurrentVersionCode: 1030005 Description: 'Video and audio player that supports a wide range of formats, for both local and remote playback. [http://git.videolan.org/?p=vlc-ports/android.git;a=blob_plain;f=NEWS NEWS] ' Disabled: null Donate: http://www.videolan.org/contribute.html#money IssueTracker: http://www.videolan.org/support/index.html#bugs Liberapay: null License: GPL-3.0-only Litecoin: null MaintainerNotes: 'Instructions and dependencies here: http://wiki.videolan.org/AndroidCompile see http://buildbot.videolan.org/builders/ for version code scheme The VLC srclib commit can be found out from TESTED_HASH value in compile.sh On new releases remove the updatecheck and force the CV to the last working build. This will make sure users don''t get notified about the update until the final build from the BS has been reviewed and tested. Once done, undo those changes. ' Name: null NoSourceSince: '' OpenCollective: null Provides: null Repo: git://git.videolan.org/vlc-ports/android.git RepoType: git RequiresRoot: false SourceCode: http://git.videolan.org/?p=vlc-ports/android.git;a=summary Summary: Media player Translation: '' UpdateCheckData: null UpdateCheckIgnore: null UpdateCheckMode: Tags UpdateCheckName: null VercodeOperation: - '%c + 5' WebSite: http://www.videolan.org/vlc/download-android.html added: null id: org.videolan.vlc lastUpdated: null metadatapath: metadata/org.videolan.vlc.yml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/tests/metadata/duplicate.permisssions.yml0000644000175000017500000000015314770502071023075 0ustar00hanshansCategories: - tests Name: Duplicate Permisssions Summary: 'Test app for all possible ' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/metadata/fake.ota.update.yml0000644000175000017500000000305414717152070021343 0ustar00hanshansCategories: - System License: Apache-2.0 WebSite: https://f-droid.org SourceCode: https://gitlab.com/fdroid/privileged-extension IssueTracker: https://gitlab.com/fdroid/privileged-extension/issues Donate: https://f-droid.org/about AutoName: Fake OTA Update Summary: Tests whether OTA ZIP files are being include Description: |- F-Droid can make use of system privileges or permissions to install, update and remove applications on its own. The only way to obtain those privileges is to become a system app. This is where the Privileged Extension comes in - being a separate app and much smaller, it can be installed as a system app and communicate with the main app via AIDL IPC. This has several advantages: * Reduced disk usage in the system partition * System updates don't remove F-Droid * The process of installing into system via root is safer This is packaged as an OTA (Over-The-Air) update ZIP file. It must be installed using TWRP or other Android recovery that can flash updates to the system from the /data/data/org.fdroid.fdroid folder on the /data partition. The standalone APK is called F-Droid Privileged Extension. RepoType: git Repo: https://gitlab.com/fdroid/privileged-extension.git Builds: - versionName: 0.2.1 versionCode: 2000 commit: 0.2.1 output: app/build/distributions/FDroidPrivilegedExtensionFromBinaries-$$VERSION$$.zip build: gradle assembleUpdateZipFromBinariesDebug AutoUpdateMode: Version %v UpdateCheckMode: Tags CurrentVersion: 0.2.1 CurrentVersionCode: 2000 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2121863 fdroidserver-2.4.0/tests/metadata/info.guardianproject.checkey/0000755000175000017500000000000014770510164023373 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3001873 fdroidserver-2.4.0/tests/metadata/info.guardianproject.checkey/en-US/0000755000175000017500000000000014770510164024322 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/metadata/info.guardianproject.checkey/en-US/description.txt0000644000175000017500000000072614717152070027412 0ustar00hanshansCheckey is a utility for getting information about the APKs that are installed on your device. Starting with a list of all of the apps that you have installed on your device, it will show you the APK signature with a single touch, and provides links to virustotal.com and androidobservatory.org to easily access the profiles of that APK. It will also let you export the signing certificate and generate ApkSignaturePin pin files for use with the TrustedIntents library. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/metadata/info.guardianproject.checkey/en-US/name.txt0000644000175000017500000000003414717152070025777 0ustar00hanshansCheckey: info on local apps ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3001873 fdroidserver-2.4.0/tests/metadata/info.guardianproject.checkey/en-US/phoneScreenshots/0000755000175000017500000000000014770510164027654 5ustar00hanshans././@PaxHeader0000000000000000000000000000020700000000000010214 xustar00113 path=fdroidserver-2.4.0/tests/metadata/info.guardianproject.checkey/en-US/phoneScreenshots/checkey-phone.png 22 mtime=1732039736.0 fdroidserver-2.4.0/tests/metadata/info.guardianproject.checkey/en-US/phoneScreenshots/checkey-phone.0000664000175000017500000037433014717152070032412 0ustar00hanshansPNG  IHDR@JIDATx\b Q{* E@:JU@E!{FILb&jb{7=y7(&㘝nڈ                          |6g )**U!D˫AA5#_APgj`QQ)S0”%K*P099W"  .F p8Fջy5o>ɣ_85!,ХRA_;v x%3fpDQAdž  {}#F=f<q^Z}W.#GO1z9u2Zt2[92ZN_q( ??L"uWWYh0؍LLL@?'d:w\. !*idd$ OɁK AA.OO1cMP4utRz~ KS Y>?MTvw0,x2@u@̪@^i9LOgg-js81cP(XV+VUcǎBY RΜ9"ijj!Z^YHWCVVn奥`3E___PPpT_ChAA!ɱSU-OWHlPlC){cϻDž>?Mhh45jLBbE' O!,7{aIA>$_8[g!18RRR[ZhWZҥkØ1o|*++ϛ7/ )S&߼ys}}E@g6--*Ғt?~6\nQQQ7nC$DC(d<77ꢢoooMMMD<4AAawU3IR^%P~urFR.==7kw׿}{0a!bɐBAp<2q̤ zͺi[tӛv xBperrr/222===_yN!+/Ťwswv}ݫ\pZrZtPӶ)6+&oO.gO >ѐ )riHX aaa }A 9l4ZרQفp~A[|; `ћz 3Eٵ3Do#0/CsT#$$-2o޼p c3|MMMk֬_qqqb"??c !C ,BAXA1Zk\tVa )rf*!VuttI%22288ĄB0;~...p}N~/}7Wft> W&K$1b[A/22?@ M  7IOonnnpp+**<@BG;]YYiccFӦM C  2tOuSzqa jF+2ټJ9{{:-՞w,M!g/1sbW3&HI&AJ-Lh{kkkϝ;7&&Vk׮MHHutt=z4} = AՆ#_탳NX!AAA;;IJ_+b8'}NL0aUUUhBS.]oLL R(.`' h=n}:؋-3&//<9J%'s&pKpD3xKϣ͛7 2.,,!  \x,EQ&Z*C~uIc'N7zp|En ADc5}.ȁkגҗ ^:1ظFAG¡Ͽ}O?읇{O/ ?C&}imQ2\B=1pa.A܂ʥ:{;0-H]FKj`xPg cMMM_җ 0,B'o5Lҽq#Ne:F ȵGt/ZG8 `  ]_E_)k?}ra9ӴG5n$pq IUЪq+|wpw8 ~'PԮ; p'cPFu5a„sÞ:G Xpp٤Cs?~럺B|O,0*;0CɁl~s/[IP@BX#sg#  `$w--xQb8::~-xbŔvGZKvv髃7~>W9T3g1Zzut <7~JTYLl~~~~>)ʴf.VL999dy͚5kDwI3Ц{U3Bc[)p[`={gPc'ȢG1c]ÞG+')ׯ_/""2bQ~ͅ{.ga&,F"$ZyR. t#GObu`jA"TK3 FFFaRVZϤdқ6m =՞X$,P'(-[&OOO_UUK. ʂq@CB͛!G\@AAai TEU ?RکLI˅\9{Pd 3 {{hZ[[khh 7..АLLK :b@+t>|΃O^FTh~XDsu``*r$dU3 SLHLLtrrZ|9hyyyFoPBCCccciUTT@t{#eHque' ]fyhll1cƬZtA$p.  2 %6+퓏,3UNēIǍO.N~''P;Rh}K {zx;L=zyN`spfH>{]q~ `p'>>䖿#Wѳg&N2e^ `0xi(}B~t+"cg("'H+цAZŊ%Mܵtf JّKc 7n\h9^OOrԩP3/_O_fڴiIII:FPP1mllt>>>//֣&EA V`'BлY9G6XfDU@@ <<- 2AՉ111Ě!?}IZ[>k*tAx.BՊ}٠vurFYYo\\ܬY̙b̘1gp xk%Ã{y  +hY"hy{nfftGAA8)s' .N4ֵ.³eK;eʔB^l(xDHc1v=[#O\?00jxu_'w+l)~~sLJR(A*^[-ZܲeKTToz{ ?Db͟Y\ nz͹?_o2ԟOΛ>hӅDC^  0,ENNOEYW=To^*k0[hG)f.]M<-r}l<:[xjrxA>"گ ?>-ѩQGUxƧR[wHۏv\~q_杗H8 Ό=63gQii/jL-|79 QZ ,hࡾ~  EdUVi,֏Ymi\{F~iyeEEqiEMmC\oEFjʊ:/*(IS?A WM?_Eo_yT/[޶}SnT'| 43Hߩ,hlRt,ߧ߽{8W?RI?Ct;FAaa eeU)*ʒqGUGC_C&Hf`jbfa"|EIQ~nqe\ײ ڐM}]|fh+cW0 \ .j?9ݧ?_]ߚK)UxSېދum*M1 `AAJ,++ T"gL2vx(k.5RJv2Jurq/ePafoha[YгzGyC.œ"2F)xQw_r q`_aݞʧ{{K7Aڇ=QN;AA]JS( UQWV\G|L}F3-d\(®"nYʢb!rՓ|l xxYyYe{Z{V.Ynfy |B}V[k(c/0 LquF{\"ayu_z߷ᄄ<ݒ_ۖ\L< yrv9rL:"|?؆t6  2XAAACUXjA՗ӗ44k##d#-HR Ԕ_anT-HyRfy,Bo'YnI16nkW{8vc}wu} yFONM;cQt!z_=N7{۟_ɝGuL5xIuGi'a^xn?~(AAb0BԴ;XR$EgN7i)-h.9XrT #:K8$$';HsݵqVi~N>Es+ݪՅP`}[Bݒܴ(cA> \{r37{㴃X_^bz1Wth]*giWFAajTeiW)jӧj pvWIQ 7׌Mp4Kv5 ԏ1Nta`oobkl`oV4pge [y[X3@m+r(8Azս?orټBrr/N'Q#  `y9yM ZIUYcueR (W!H=ۦ#1,TOqjUiFWvzfy9^֚N\Jg;Tn^:{Ǫ9;V.skvhoYgZ;jRע9NzjqA>l|)5\FA]WYZAQQ[I4\)U'F_~ U,[g#X;8I3DmfuAGkcAv~:QfF\+:diYkβTضza>!]nY`[]kms\;u\AcZdpЖ/2ɤ_  yM mn Omk<G䃀Q/~䭧q7tsM]wt F  "/ee (R^"!*:5$Kl 8^y>֒Jol+5ʖKU,XѴjIIfF4c,uc, C57ͱQ7˨QU!nk!.[C\r߲2I;CaE]ENq"ǵn8Ando0O{rayG FAaRO%%bDΌVٗz*M7[snowo5J}…Uc} ]=,]mtܭcMWEi:mp4]oHI4HaK}cEVZfcPyVswplY3,Qlq|Ms̋ jB\W{h`?0 `R[cW?ēae,  ,2XQVƚ"(2GYxdtB%ѺP 6^Q}M?|?hN{ƔKGf7j$̙okelfjj/eZW]H-uQ+qVo P8lbJo7\vAfFކumJ8-t2L׿U9%@Pn_m7Cm!X| UAe UlHTD`J{_S íl}ttۓ͏?8P;6^<BB'TH}D;.I*޶~sͫ>ũ/O:/>?`vݲyM LS) i֪%U>us8k2n3ܱ~*E}4,fϳjɲS_#jT1˰xbK T:̟?u7 [d0ý_=?8]d}˄Λ<(J l~`! V9ake9 a+iE!"5$"̨MKŝɸ^ZԎgwx3 ^XËC/<ڝ}C.6ϴ+*{h77wlo^gTU?KM[}>yXڨ'Y([+o /'S䡷yqsٮ[-wPQpY555E~3g^wqBĉ'ۖ.]:Զ PjU䓾/̉R7I;]Y*Y( 2`Cv7VQH hHiI7P(f-%Puٷ@w=աُvޭ8-ȸqֹM~;X5lU]`XhfLђѓ֓3S.tժ3L>jTS`[)l"5氒bR;w.==="""..Ç;|qww A?&3c+oSE^8PMbsJ -C3N&^ڒuΞ<:Dߞ'{!4ݠ>moNny}ݖO:VZd'ԺuAR!m} b5V EiI*8T蕸iFXSUj44847˗/'/֬YCwV[[[n `0 `t͗w\z_o:s>{ô=G!+W:G:x[9Z< 60lyW_}U^^6z˗#>ԩStI=j===n"D :|bڳW6;w#Y! 0bU/]VrP: `K-S{[yAeޗIȎ VvVPq.PDU4B[j`~}LތJ>ϺVt-on˺5Μwl~% N~0aaaw9͑fŤ5k`W_}E0G!uBe5p\mpuƫ[ҿٖ}{ˣՠ{xg=t/ֽIRՏd=ڝ֤.&ϾVn;5ag `*!k%LU$LGAQ%VWE}nn@%Au+?ӕ.lܸt$ڵk?׽Ac}^CEuӧ{ KّzuM4u7j2) %udJۯ~g?o=>hի{ ^t4ϟ'N.l `ի)njj"/<֭[bj$=4(L{p ͛7E@7ex `V,gҤ"Yvӛsjj*'%%=hNVV\o%B!N{,IFr^m`Y1ti'x qlJ"r_-[aR;<0[7N vaE2+lsidVIXXpYG5J>uj}YoR559TqQf1Ke;SIWSlxmKIWkbo5_kp&Fsƽol{q{/g@~sͩgO;r﷥>ؑz5ve͊w=Wm}4hyFb$=Ubu<4k4+\e**ܵb 7Zk[:2WeR?x 2SCCCn޼IHv4>ɪ/!AAAФ#Fk7erɽ{TWWȆ[\Ů4 6o rL_\'(Ɨ.7q˗O{{;ݻi C̢LX3L{-mm~MXsև(KDC;cdn͢xLV["ߡ!77LQ/&p\غqz}e[+@2٭ļz2xCkx)ԔWZĚ*.w P4[)9[IL_H լ~½kNrݍ4]u*Jٲ/K~YUIȵek"tW}Y;_{?W:X_^td<ݕxmž^/܎_/=Owgv[)iFM<͌`\멕jPW'RiBnW? 3{߿!0]+ʕ+P| 8fff;sQܹsYܤ#&SHq@-L^׮]#N1RdBWf=Z9!*yP#u; 0W_}EzqKtmk(+i"NDX8p{լzA}YBdO 8\fL07 vB  C*МWA+Y]SVb,h޹p#!-Gڵk7;qRkR=1"(#HSjJ-)oQəq&;68y꫕7nlZ~4RO/f1, _+_mu؏M}-v>ٙxG܃u+VWư'mMsA9^w)k^JbR_ ,+J/MNj抩Vy&^L+k!b#MMM Gx:cϞ=!sssѣG.:{@ґNg:B90 (--%WHȅd&)QG@ yg~vT?~WhqE+ZW`r {miGqÇbsrrx!LxGPh9YH}U ƫ+NưaΤ96|g+ xжCNA]bsu>U,mȴcaQ1/VJJ<Ȁ ^{r^ `ѐwJUX%5GYCN0@6RG*BWYFMF(ˢ)&de_*Z~mӪ/t`ᑒ  8{>mgy. UU6E233eWfQ&EQY"O PMDJҕIn]|(c'yK/-VeIȱ2h=vdcUϻ0vժlYyͣ@>֨U+Д|qշ*ޫZ%egc5oN<ݛ{>k^J|INQ-ے6߬]3Y3Qė~Oz!^GJLLdrKRXXHuh{?ʁI r} @`PM?{cR>y<ܫ&'D*e+vxǢEȩJxFOKe0ajd>1А. ђYg~;vA8* 'n 7̺ם[EA^ؓ'OkgnYKU`VJC΍jnnf u3[AR7]EH'CḲ7b+}ɽ ݃ s<ꕾnSCY,VJEo<7RXy2sʻO{,?l%Yʢ %b dc =DRgٶ=yY͚j¿޴ts'_^rDB;v8u쓆 ً./]pkIl|7yG=5_^vp֖m[ϷW\Z}mS]9uC+Ur lKA*m0V䤹{͖Fʽ+d\㛳Kρ&rr}7n0tρI111;X!`TPHψ9WA_]6e.UUUCݼZ UdX]]HNds&'^uA݀. -Ewiƨ_{]LvB5N?VZExV-jR0z&w}6p9 [Uk ~KCn=~8cTmmm̞=W4[f4{U5JB?5hzUUU_u`X9(pk*#\J;Al坭 wPCb<J¾J"Ѻ2d}z3ص'.t3}Y3W>+o:zWk|:^K%oN6=ڵ҉G+^._mh5{V-7ߜlx{0Zg㪸~X(v{L" [c{,k{4AA-b}vIH yQYдjQ#_lb*ڠ Ss6=L֕s+`///hYѿN:*[s*(*'<<}`"0cǎyPih]٘>}:, ~:l01Y"lܸڵ+ -ɩ F 9/_9Ϸ}6]kk5[QF_UR^ 0n I;6III'xnkڻw@:t…ڣ]|9tVpe+XWέTx"SWYtu@U9ժU5/><CXsju5رc-\V-ʀ5M1q !!k(NzՂѥģ7rX?5pdw] <K4/[)S.-K4)ҴxImn?zۗ<={ q Q1qOgMs6|xͫ=o/|.֥̻əߦžML8Gҹ_LYs܉+o?xvmԘ̛oӢ_'}v8kV̤jf.;zٱeGU)5~M]mVs5T/&h!ɝ" `???Q4\(tW/0ˋ< [)ZlA[wGq銄+lzd]߫.gS 0Hy¤ CVndc֬Y488^zSN={8LҾb=XhݺuRWKw9]Gq٬z[Tģ7`(79`X{- fcQcSK)s7g߂y [Թe fŜpiR,upaɄۗ~|˫^p~cݏo}r|[of^:z|潔w?ЁjpfZ۔)ѿ\Jtfr۫7z2}9W\lE~׳ O?ٸͷZѥь~SKMƄ@ShXh-#䠥ŸAbl طozNjuY%0(N, F pc<~._EvZb,Uӕ Ñ#G^"5@Q4~֭M>5z|(H<4p-ѶmۖUd/_Ƨx=;u֯_ ,g& 0̌ZVϜW[=]++T ͛7 mA6<] C~֔)L:U~T"qㆤ}m2p(:.ۂkTʥk>pLEzUoJׂxfU %S;k,ek^X4jlusQ o"Nݜkq/״sP ు57yrȤ s]lje򉿮|{̛K\:&Tf©;煽3o_ɼ~߽k7/FԸ173.fNWOq13'W] KVP*B}jVwu,bVɭoF%͛fĉL&pu> (1\NѣGNCrt׊+ >*Vv;:*g~i]NVT۷oOM9 pƍIN1bhȐ!qqq {͚5t رWADGGK.aV0r q0ٳg+~U]jz޽{Wq MQa> ޜD < {5uNeAO]++Uq>HKKQ\c[Ν;={VT>}zA9P=w6*Q 恣{hnVc*] ћUJ mٜ Ʋ[Ơr\ٻ@JpWԩQ͋;7.ҺlM.จ /xg[ѷWNM| 7GE}zrGA}ܿ $s5mwɑ^ZwyjuM+.kQeloJF<`q& ~ծ6uQ; yqkP#O^~+VVGdNܶm[E`H.JNN4h$ժU+88/dg+pѮ]V\36[|EQ0~¡G^ D駟Dv#ZP;HW_.&ؘ_A5;իs]ϯI&0ݨQ#E;|jSҎl|0ecD4Mݺuq&]&'5Y&C)Kݖ wC[_S.:7*ҰK=4^Էΰf ػͯ|3og^μrUԮG"\h'ּIe |(@XzS9 S 0`޼ytY#E& a+8אÕKzڣE7ؖ'?gCa+ds n>] [*݋.^qfqjR¥s.n>:z ٥!폆8u m'7Mܡ̄#o:}i=fꗧ¸4F]j`a6'N۽ у R4n9gڃSL]EIׅRZd 1b i@ްe"Ntը=ל gs4w9C/l^ׅT+ԠKbΠu*B_}bZ'pVgGvI><}'[g~h˓^Ԇ#zo+_vNΒxn=ShӨg"^G~{۔ o/{μtu?nyyrË=F{|Sc)_YMT6۱5RʥqBUM4رc-|}}mX5mT.b(ڵk۶z,Җ-[P,g0l_}?]{~/+Xc8 ëLoKxPի_wApYԩT/Whf>اѡm&uK?aOwN~osfl {K^?1}qC^Y:j#KH3r똽o:jv<zPR9pT:Fx \rj|7ad݊! ذ*rT\ϧ~[ & pNeO Xk_V?>8p01zaKP![JrU h|yJG/{oS{Ek?_Z5ᦑmhݐ]O oxfTĈ!Myq|ūs^&;oʹ?NGIY۶/Dqrǖqllw|#&~fSu+]pxK}A̞=;`(z`y'of~F_:ǰXc8 /~t+SٯsBy=)?ObZة~hynR3'e/?  ltnJk+Þ_2z^_:t*NІ7M~9{3wғa'2_fP|s .>aOje&zF=SVV㇐jx~o`Ѿ}gϞ0zMrXr8hEH>to'e|#Nc ,hp1 r ^G-Zh ]|T*c<_V*:sf[:\#i^}RtOԶ'F4߻Łn- ~qʘRI4eЅ1Z]&rT -/~m m6>82}شu, :8YBJmɾ%T/UrWɱJ̩S6fUYr[?o{U' oo﨨8:0lҤIY)CV*L8}*5zEv;U_aG<݇du1 `M6E ?oy婜?O|y ÚU^ХƦA8;ݥo.w_X:Կ{ʐ~7B^xq/Oi}~LvWwW_7V\]zv?rsjReǤ_OVrwU)KZxMhZ_ރ3#00P<&z۶mY#$,VA-rlމ[fEg_-8u`?1EJIw'Ngu1 `W/Z|N mPɿ`^+rYiA+{=m.n7wۀroEߤy/L;痸_&\71&I16N|zUu4ݕ9ݓƒ~W rC, xq (\pގg(2ʻho?M)ޣTQ3ZO5:rHTT޽{a0`8"vƿ 736{s =^sNԘqwMm`0 vWK-WȹZaN 8(k҅xP}ƴO}/x˃fPZBgnң^f%辬3 `hࢅt)ssw¯JͿkQgC&i^=3waTz쟼$,u٘mË_]|,pݐ;^^ixp⢁f2]e5WBN ܜsp}}Jm9+ *]){WΰLvqtT\ tuԽbl iQ'M9}}|g@V`0 FE /Zåv8/ׯ@y~[,wD׀Ûڢ^Oyo=Soxc;Ǧoh&c_E}+_t焇]9>,7w)iov:;p\}pbc+WvZ =4~ꆯwM0l `Q̏OTA/g\ >Cynҙz cLޖVƫ| )՗``0 N".>.U 9ujWҹSâNU.W[u^zž7<:7OxcC ^\ڗ7ړp$W[^'[n-xuAsPX)W(oܥkƅ;+ܵL^%BJ)57>e|ӯ`dsUA;%i~>g.Ïr6hyiE``0 p!X +]ĹEI&\@mlp͝>/;W}*OmQgyBZFNiwqnKNZz8y[ͯv:Xl߬}:zcŪ py\W(o.ʸ\ڥcY_b-)__}uޢ?l_|I]o!G "oIڞ /.͗``0 (\S".5]v)͹H\_Es*]ůGWxVǴ9=%oɏ6>:y//zqxzDȩݏ??h\!&68Ym-Pky׺k{79&fZEgwN9uaX60eQN&)~F/]+lz*ݹc16k_ܵs" ;ts.˻S@1N?j`dhWAu}b{>v$GME޶+~2572{_s;ՉkOrY] `09Píw}_ys7?SϿf (_"Bie~QrJUացNuw{c^tQ' j&iTP҈5?ݩwp[_TvMqgЁ;rKo -ҤS@^n?SKY?(SA`09+NÎptWEW=ԗݿx}Qg_!q;g?}?ۿ3OuA㿝tA@!:|V`0 F`ZbEZ4o/pϝ??^bo"knMܝJt:Jqs[ȩ[҅(Zag09/iK/H5M~GE_C8 ;Z0[꣗^^ݫ o&:ӚKsp19 `0r# ,TɹW\>"_}{ܗyrZyCn-y7yG5μsc.+]=`xB /~(_My]z풻K r*ԾTlU¹])zE9 #Coѥw _M:$"nqw?~ ?)o}wzNʌ?U(xGe``0 pp+Rh| ,Pw|<# 𮼮{йQ-xµpd=.)yխL[qkp|2_uy]o|Y97sU`^w5)fa粅 dI F68#7&>xCWմEteweoo;L:xqDlq\3ȻӳL``0 p^{2n%w.',-n|Y}W/WޅKΣH)"|/PICi4h 7'e囿f/u]LjkD_\}֋Bw4YW|IPkAvf2?7h͹QY] `09 wAj;t9%%:;˲NlkEl(Y|7mPnW:{5=ںѶNu9ӬA1՛{׻S?J ^uOTto~7T능/CE\`0&p:swF-{"/޼zkKxOAt6;fu1 `dh`0 `0 V `0 I``0 `|``0 `0Xf0 `0 ' 2 `0  ``0 `|``0 `0>۾}-[6o̔)SL2eʔ)SL~#bccc>܇`0 `0 4Ϯ\xeL2eʔ)SL2e#$3 `0 㳛7o޸q7Ct0f7nvf7nAD%an@qt>`0 `0 FJ+twSL2eʔ)SL2e )T `0 ߿_`0 `0 #F+iFC`0 `0Q]%eyHtf7nvf7`0 `0>|==zDT܇`0 `0g?~f7nvf7nvw 0`0 `0=Xf0 `0 '~&`0 `0 F\(/f7nvf7o C /^fçRǏ? #pyz%!!9d0  pvwJJJ\\ܥK޽Uyu˗͆AU-߼y=Yܹs 1uTȼYq 5jԨ_~'N< (_|``ŋATI7::ZL1&&FWA4iСCv ժU |H*=zs*TzzzvG>\tiƍŢjjÆ ZyIF* Hfgxx>|Cԏ۶m@C5BIA1;?nEnnU q8A0M65nTTSgjj:S&L!x֭[j֬ ݟ=v3^OqWN*O*+_=u+=za7o.〼-Aj*hrQ]խ[wڴin>d7nkܟK^zjCZZvy)ei~zg͚z5k,ODDD6mDzys߾}Q;ecLՠAS»bp]9yK1Q5ߚ={V ATn&MWn߾MO͛G0-/}:!ܹs{$''; 6`bCBB,YұcG}vyxH=:{J?nTp='q ʕJbBB*~5$$0]ħX<==S׿X\(pW7.+-mHs̡[juر$1˗> 0̂ @iڑ=͛7۶mkdʔ)S+; \~9 ӬT<Ac6O?=1(Z!J;S!#ZJL%Ѽys{-*ȡӄM@/_n*!@޽N:MYreI7SN`0r(["SN?tPx4s,A߿.tu*S$˖-g ;i)y1cΪ|Z%Ѥahm۶%?((H'[~t% iYY(=bn۷o/۽{wz{s̙b:u#ӹsgyĽ|F,<3(֫WO?zߺul֎;5jTJICỤF #r꓊`I`IEN;&L+ J{|_Wӻ#G$-[A?7듦 #&_p8 'I4~x=UB'!$LÆ }||#S܋-' 7~;@d})#5kBlׯ'd#yҥK^$kג!C$o'#ķ֭[A E*5%a~ xb)(lKSNtB>,O hʉm[ -?>PA#; ҳg϶lٲE@k׮ڣx4h@O-C]`(zHn@WY` RbEg,/ɓXmڴ ު_ɓq?<' /[[nx(d߈#o!ܹ5hƣJY5 Yd t * l?˟l1|nO@= 3(>=d :6T,n z!OTŧ/_VIIIނSPH1Cɟ/^@o>3vX<;J;Ş " R'TLqFbНҚ)^0'&&B -;vPBL2e*n}wzс;&.L WС۷xp YY4񅇇y:  uQRV "zd ,HsEဪƍMaܹsVdTЮj0@['ʈr FSM|%N8%E ςI( M,p*`?)xSƇFT,iŖl SnJOŽuTm۶I*\N҇Uf0voy\yGWo6m-`j0ШJBBJիW1-Zr%(~2E/_ U᡼;e2e3wz6lh0+)v0%@~?j +zK(T ҥ9^Vj/DV^c6Il5ks$L0g'&&._#>sNfv&}qBBt̲6f=(ħNG{TQyQϹC>!*Z+$2" FzNp'*R )6>A"L#no-XD1<[LSZ$s::ⱀ?ŋ|,r+5'L׉4 '3g+_2M8סchU6Bor\]3F%Q2+ $"+%\] A*V=mnvp7nR|?B|m B+Q!yVX.F <6x`M=ȩYfqݻz~&Ix\Xz5q߈_~Eo[8sN )/׬Y)2Z,bT#yRV<|\X(uп ֨Q#un< ?- j0|CS!&S)v6eʔ)SS{ ƥM0JFVZxr9)>w! ղXrxB CXwޝ={6to^-ߓGxO0HzI1]XW#m8?Ven4C |W :R ,KkZ_CL r0*6UE]~FH0pbHIrrXu'O7I\lYfUI]. }]< s 5ާNAٳw޵kB$Ԧ $'3eʔiN-5k֤ICE'r&G<\)J-xe`ZW⡠ ne=H(4m{ xŊUVfcgժU|C!V??ijR~ 6+kU,ڵ X`< ]TˑTm+,R6-r{\;w}RSSq߬YL]؃pM5Y}]z5h 蛈T,5h :~,<nx *m+N򆙤]B$ds㱭X #_rd0v0*qpTB[1Zuax}jx\VQ.]hV|sNi`ذanSL29=fAiG @q|2eʔmU`Jbx80Df A:4i-<[.F[jU?(c4T<27zi?+%oܸt '"`J^r%Åm5j!"ڋ`"($f^Q T)]C޽ܹsZNKtA9r$zkժy"PۄƕcSN5Pj*2G`o^߶m[d툭@ i^oDzbXc hƽ"P&AAAH,gi&0a˜1c`ʃ:Xv-^/O *U Kt 4.֘1]>}PmذA|$x͚5`0* ) UׯOK =ש*B n˄U< B{>5ٚti&'Ae˖aՠBwlf$yaNNg1׃A?4$MOk׮%J n [%a KK -[nIh 1bzLj۷oy*fϞ[F%pƌ?T2ZHC8Q5ux`֧hDGGJʂh B[U3>qRUhOSqclR6ݻnr ,r 0N.+T(FnAً@Ia/?-,K &_pt7|@4!740nܜдiSHX?T7B U& OI)W a$]1*I~$`_f ah8ԁ111t<`Сڂf7[vHva!ipc0~s})))Fn1l0Q6(mIIcDTTz^ݷnRlߨQ# @V`CC@ZjբE +V$Cmi1DDDk{#mfoooF 0Z f0FnƒV;1`f1P1ExxEjP,%aИ }̬b<$I hޅ>/^. Ať/n"@#GAӧ@#I9'X1  M8F pƇfRaI~$dXlnӄd@S k(X/<^ \5k`ܿ RTZPb*a#% U|nݺ! ܡ`09r{1)az-ܻw/][&{􏋋&BPcҥ/٠ܽ{W=r ҳb՘.;v, =0CP}AA_}p~߾}[ĻwFX%)XXX=TALTU*JvcƍEKxՐKVY 0T'"x>'$^`ƒp策Ўׇ"@ $HWb劀Gag ҾF5Nr@$!hU9 **  ЁAڴiSAVA'^"1B‚ mmڴAnIA3B1]v5U4"h6VXmũ3%QT<7EXlnӄ ѥKQSf˗//3F܁l"nݺqƕXqa*C4ijȑ+`0r t`G a8% 6a `^>zcoVz* X|͑ '.*sW-ovIP\i6DQ9dd @$$$3B͔`0>dS]CVҘ. d0r.p#-88W2G1 `X#{WYgt%e7v۶n0rYO|9xY92e4hm۶Yf 5jL@KLM4jW ͺl2f.4(rN`g9t<!rN%8كf7dr89;u-[FgR͆pD2e KϜ9aIhРA X3Tir@fϞm*n#9b%''~թS'L5,XB*dx~ѣG;8][ѓ'ORSJ. J``Zs{s۷omTx豠2aH(`@3[?*M ]~sȉ)SL- `D!ܹY$4mժ?D^> /'!՛DrPBժUE:Xs^xT)7odʕbxeK e ڻ o2͛]5Uyc)#(-- SG޽{ժU>\1SNQS[Ԕ&JBaJ:!Z,ȹ9'T(oooѧN:چ_̙#Wh`"sȞ)SLuw`{޽"ڵhk,p_t\r/-Q6^q:sbڵk'!Ǐ}}})ݑ#G۶m_=A~`xjԨA/^VZE9(aZ)))rN,ɏ{ӦMDлwo{nٳT)3G+sϞ= e4nrr2UZhhl^^q,H\pa֭Z B]E r) z&Ld\#pK`1e˯$$&&J*{ AJ dGALt߿+q.PlVtէIxEnI+@䜈+rΜ%{f.-u&sO 7ndA/vmW !Cp^q7n<(ޡ؎D\BVZ%'|ڭ[7z~z56zhz}֬Y:u#_kڷo/޽;=][zu h2~uzƍaÆ$kB}|;[+WD_0EGeoIdUҬ/ٱвeKS=Pn7lN1E3@uXN>x ^~%*2 9篿JˉONBBByM ܻwO%|bb"  i@ʼnV28'SLjg<(N~&y;-]^z*Tҥ N҄0U֣Gcǎ)F-_F]r'.@˜2e L$r>o>˒9sO>Z\ N}%׬Y!WBqY<-ȕIH,9sm(ԩSAAZGdd$!((\rIhfLelզb0i>?#p?&OLK,Ë= CK`eUva_\ K I^S[*0[iz˫' .]dW`k )TXr@ӦMځؓ lήרQbŊAھ}$"4m۶L6Q>`S;Dlڴ ͖lW\9xv9 O]L@DÜ'9 C;k;v,2kך -67b hըQ#@ ]e05lذc%O P駟($hG 47 ߆aJPL?yn݊+@u$>hРI&[ ҡxڍ8 ծ] rHW%4<ϧG )b 2@+*W,ޜ!4P՗O> 2Pjbx"M E)yyf-VƯBAh%=JA'#ZbM5TRtEjCTݎCmm۶6AXBϝ;l@Bg6>M6 $b3IL_j۬_> \8 QرOWĀF @Gص<2Λ7]vHO,ٲe[۷oG`Js* (e`sN.Z«Td3G'qIǙs~:)SLSZ[nMW@J~ :* y[8yFxu߾} ̃#]IVJpS\z0I`G9R|СC4גm‚*`0WSjueX^-qСC1['*"/ٳ'dGgeo߾s-`t:4Eo˯8qMW\-zsb gpB# r/E&@ҙ0'-/9G92eT;$ov횩0(@/ I)p<(Zu%:6$AvI6Z* 628plDq-A_aw8k"}PӦMCOܼysP3 ڵkө6Axx8E/VD(a+"%%ۗD`\G7rsv +y;w[ 0F KA4Lo0Zu%+*e c״dƆlbVbP9vҥi' 8'AF߿JNaz6hs~4`0_aIϚ2.ҠA0((*Aǭe^N=-ED<'kD]tIN<j `oBkn˖- I;k֬)9,I-uR$@N!Ԧ~ر;vD/B\)'dX25Bòj fIv= &1⩼8xB_Qې]_r[aϞ=dm lW ֭",p`DÜS9 C;۳g?T$̚NiP1Ç{SWB獒VL/k׮xM-u{6}=q"7gڴix)!=XRL,>$ejժQl .">x<{_NŪI FUF^k'ǂwPPP֭Bw>n8⽠6A=HO8BGO%WTVɛ.ԸS{;ӟyʕ+V@*~dSf͢Æ B LSDcq]1甿9'SLj}Bshm IAx`| mOB)ɫjgk`RLxG˗@bWBQLWn !% Q]jf%+Ci8qB[v+\PJXh=q]8kC1`Su3fTT)..e*]sZz \*ybX\n]ǎECq_G.&N<:?`C,== Uz >ϟWOךwy^"F*lٲK.Ʊ[#oشiS`#rz'~ y~,dҷAUŀK C≽943=4}#RkҠ4@G2Aъ.c$58y$⇪⍞'=b\{ncRױC Z אSQŗ">X(8D{78:-'|yr۵k'TZj{˩P(F]DD?7nL̬ .<~ۍhv{ Ef;ұ0nF?0ad(t~˒%K+6l@A,n9C 9x WFNhvo }ڵ+EK2]f\à;v[L|Z$ӷ!W9<)L6u( a^G֌{P0(}0d VXAn G:t_~,|qqρtRcT^Hh͛6Ni5t)|E-]FKd4v5sn-"%v._põW6wr9rc#t#*`G-r* EUQQ??y$`¾ӧJ4G` 1M<4a4id͈駈2ϟerEHW^-Ӽuɓ0AՎrH ibE3aR|45kp:Ň`;(9B$nܼ̄y՛?࿬aO>u2 cdR`o!8zvM ln߂"KmƎcS2?,&ŭϯ2Re%.xS2QeԠٳg-^np8/%]:e6a)To`ǎ͵Nl3| q4i$jdvUGaEDlpeWPPpYF|G80-G $|֭eskMfx~ز9ru:@ c8PS*GdpmPç+i1ߟ:uj߾}P˗aDc^yhУի1TS! v|Ǔ*jH^Z  #CMF߿Gm9#n2H B%/|du GQ^Zϓ}Grf\W^y啯A+2 >sÆ E y۬8T( "4ҷXy ӧsQGy峁pQ>(/[(ȣ+5`EٳqP)KNx"ЖSP(d RJ*Ŵ7Ι3NeϸlJ*UTRio1GP^yW?-(ȩ++_+UTRJ*UTҬLW^yW^yW^yWV:TRJ*UTRJ`W^yW^yW^y峂 0BW^yW^yW^yWVVTRJ*UTRJk1=J*UTRJ*U4++UTRJ*UTҬXyW^yW^yW^uXR?s͠~- =tP?d\#jFɧyĉ L{| D?Hܿٳ?(ș [ᣏ>ʸ<~(Cϟ?<૥"d\߲8IÇC jUgh>}x%e}>(-GU/ߨZO?ߧ$͛7oQJo,w 4N߿iӦkٲ#=|pa 4j̗_~Yxx$777ߴiӇ~c@N>mPwKNjqu9wڅR,%4lذ_~<7{ 7,L&Uu]v:t%K:޶£#vqN65kV2ǞRX9GKMR"4'3aB]f1ЌSLa>s8ϟ?w9իS('cnjFnݺ=z0V̘1ѶtĨQB=iѣ)ǎ܇_D?$;wPO81%2TP-s aIGa O#%)Ǐ !? vi;,кukr&S78(Paa5:u:<,..vfc!T}HUVWAիBڵk+x8 Ϟ=^,r~klTdy a 4( MטE8q"qoqi}Q7n*BNvLp?#YB"yŋ줎3JRB,Y"U/pOV+4t„ ,ȑ#8]tpjRve͕Z{.O4)pkz}H 0r1b 6i$Uo 4f\pz ͛uy;v{͜9SZ ǎuS)kY`'Ja?F#.WDڵ+C,֮]M6q)&5ʢş;w;w*UqݺurH.@JPTAQau6;fbK p͛lQtw˖-,vNJ#cߢ9viFU޳o"'':uJζT}H`*p4(ZZvmE7z}W M) E={8_57T?|ֱ.CBZ.He?~| T|-qc5C_{gy9wދp:̧[>;vȎc m۶ˍ8ǎMh+k1}G8:MG* %(G>PEtFG+(r0 pe… e?4WY624#n 1=۷ozmđgXt1?'lذwuܑ1LFُS8|BK,ڵ+ۢEaÆh1n޼9i$tHYf508{,\֭[1СC/SNv ]X͛7r_1{eWVe>{Ʊ5jHnbIX tH \tɖ_߫͛#3g俌@3n; U~ 8F8p ^˟ݱ3߀$gĉ4A .}׮]C=|0T)?j&2o߾'knƾQ ZlɯFFSa>3u6TTT٬zB+8c .P jI(**p@cݻol(#.OfO,opsS' ] k׮*)qNw냷0ܭ[7wݻw/l;z()P82;t6#j0oN:qU6mڠ)&jT]"d^|BHǎ'T!Ł) 1'.nY՚4i##GgVۣkߧrμyKzASNq8i2>P9"{ 嘲)sx)9|yBk!x*!1ξ}dQx=o,5Nʕ+Z2 V#DG:PGYOI^ u[d}8s ph"tE*~"\|q<p%Ps/lc۶m[l~ YzfdCˁP=)T=)N߂9w80^#+LgNJUuɎ'o[ɞ>ȭ% uV^# 8%coK.o B O 6H:nj zs=AK[#+;LvlAU.3p\zG>ϙ[p40y-f^^^,~i1y-*#X EP7sn5f AMQB0?NZci'X [Px?çN=0)޽{Ғ~XwɅ%[9f"#7h/GBާXɄ~:uw&>}B:#rix_~ܪ"zCUwގqf~V1 uD"{8尷Lqe#B묪^@QٕkK7@YyjRN>|S0 @%3rM6tC+;@ g#^.0 7EEE4(1@u\z) ۄ/⥤ra? Yr%EvqQbqwn\MeT5<TSsq"AGR%H+1zh=zW_}E+JJJ/uдB6L>maGxEnܸ%5֭[>vbdBHUVV@*Y4l'9ǎ\8L@,7klǎ7 6?ݻ7a-P0q>~/m/fpC[Y#Rzߌop|bG([qaHn?>C4GYU=U=U=4;@~r$+W%wp9C#sO'oQ"-ˣ<?3nj܁ԼyI&yl䔨n׽UYY?##&fܸqF|cNv9h)']`%?<oT8sαLF3fi]r˄U 6ld2?{ΝS7Çߐپ};ߪ<ʂ?kX (?.d̙.[4sB(n 8p.-<)~/ZVN:tQt0Aڵk6jEYiJOkcUWUXǴYf6  ȁtW9]3|p/7=y)p7` U@ F񋊊8ɓ' /dG_^Dlx2˕+WRm#V \;m4 4NwHr‘2ay"3e02C:2TO/Uoh/Uo˖-ᩞSUFUO&WX/^0@{u ylq|CG:#ݸUX!?WrK^f&ia"-ڴiSL //'i}^b)}n!Cr!YıCm|j s<[~d&&/F{׬?& Q͛;fпfP/~u3"7nXaww9"]*5yfrPm<t r7[Z&AK r޾ .-<3_d|9@.Om 3yJU8.q-++E(NE\y:6.oeM_p3%l`J.Ǐ+\z RG<]I9٣>|BVxLsDh U=yT*OyVP+V9D{Ioi1&AKĻ ;Jfj&FΝCPɌL@6w\:|/'\bᲷO12En4h7 7p&.GF]e!EEE5FG;~CA E'Oyҿ:($c}Z ,ip\{G*[n"ZgBUOUBUO #+4PVx4;Ҭ;3>!7CXq#O@Bl[c,p… -L&` ~%sHgttݣ8:K\`G=]wĔcU:Nj / 0z>@ H*\aN*d3gFG0=@yRd.,,D~M[V9e˖S׮]ыPm|D<@ϟ?!;vRBPc̘1_VE iS`h8H;޾.UVx與/_QCd#B묪^2jB(j!VZmAA|OlٲN!)o )yǕZJ-FB8;Y׺ny?v| n?%ge8HÆW=ˑVqn߾n9ѲWs|M6q[ngo Ay@.w)\A+8F"(gQQBvH틔G(0hϏ'ui6#Jf&e#jnI{Kn/Kd޼yq))\vo#FpLUB٧z눏CЉVHB_G-,(Q.Rn[O< )W_}P8&!;p8tZ OIizF6`3]yW=wL}43rp=:<{=K(YY{trk p8ʑp jB&/Su]>cND<4"0𣽻229[;#GxN-7ƈI =!4A}}_|a'$*_e#ƴ݁dovСȎmd @nc-kdNGV7` ;_@ɱB֫WرcYnj3{PyR>oGV4o.+,,@xs$C>H;wr|2m|wAe{ncrFa,pi(cLCIQꟆ izzz>3i>Z& _p|cdlݺ51n ؎D AiBûK(KѣGy`őv9X<ߨjs~>CUJ2 oqt-Zā|G5&J(A6n!G#}YG=Bǹ=Vl؏cGޫ!ìxsk7;0`4oy8\Ή7}{aȫ/lbĹ|rnn.GFp}Lgg߿/{8VÇW7k VQG<䗭">̕ofE𮫆"pn+cҚm+m+eRiZgSGUᎪg=W,XqUhAm<1TϭUZ wTHWX3핣3}j8qV( ԖVķ<?^6w`wqjqpvHZy`rO8-<[.q^xۡ>IƱgkV}`f͚%9Z:0iӦܹSN>xĘ%tjoWK;#qd mѢ+;yd+WM>|XKś9Y[ԡĴ@`9w x }8w4i҄An Ǐp6yiTO=؃`y7f֭x=sq8iFɓl2OKcN j%g= ꈊ%(Kr2tmݺuUۃ @#qiHu}FNqɓ;t ĉQ߾}իO>|-tT ŋs(E4pmcjeʔ)!p&MP8&-gHK!m߾}i%H2ۯYW\4kOVZ%G.cW8Bȁc-wOriII @Y#Sr=OE.[Ɖ'Y2Ie۶mCtm۶E%OS>6<3glzbVk&ӳNDȏ?h̨6 gk֤I ̐!CJK ޽{w~[@P@+Vy >{lٲefXhu<#$-olժhϜ9uXh/[~'OfϞFL ы;*СC6}ϟ7bY|oBfgդΝ; ۲e)Kڪkbx.:5tLryy6"~z(S8} t yAkL^TjAHTF`2-Esa$;E8"qX{m eE)"fMI>S!je@Tψ8zO6 uzJdFintR.Tȑ#zED*|Wr'#B[v/W~vH\#ZC$8;Ly*2%ɓIN:jv(mhԩwe+~f܈> LaBIգ{2W~fFAT^JfFF]q{wva…QGy#ӜѣGV4|݆ 2%C8Ç_|Œ%KJJJm6|hM&?~ɓ(-]t˖-Nyj.}Zujo^Q>|՚ U$sR?~<&֭kJ'}Mt% ڵ+  gig;f+X#޽[(:GAӧzQGi i՚Hʸ?ڵk,~ sQ4TAϟ?z+W[͢OD$(}~+\6Ċ|4 :z{x.A5xz3 UZ h՚H;LY_|}!ݴiӧOGG6問VZ :t߾}ё&G)..ѣF.]Ç[n6l*$ƍaȐ!v񎪷l2RqGzGjʧkn„ W\ɸ}$2Bq$&ԩSI2W+y_Ξ=qyj35h\RVVFgŋ7n@BP'>X`mP޽{9O>ɬ2?δ85U1P"8?~, ;5{)p݃ jРKذa~A򔤟D*׭[aÆ-YÇ'@ƩS *ڵˎ\RR™Y\\ƍ9δiӪYH#:D_RX ެYT)HgzzSQm2e&STc/^m) ǍFnݺ=zU<3f8ږ5jTI"U#_Ђk3f̡C";Z?掱crX#FiSmIJCBȏH-i^sfJ6XѨQ(++ ϯ0nݺ ͥgԩS-`UU?ii8ƍKj8#A!Ua9ha*͛7/tn U=U z_.U:K*\|~,ؙ3g88B^^^jSukT;utY\\C]P^^NТEL˒aeՁ#Gt(=}ɦAB?oР4 A%ˆ8+WfZ?QP#7/FU,((=:e)%K섪^QU/pbĉ,_|aGҥ GHoe ̇' G=77Wnp3[z5&OЭ[ȓ)~\'7oc Gŝ9sJKKAA]i7Z2rO\_x_d<}tҥrEݻ3޼dB/V7oի۰aׯGAdx7Yʢş7oݻwɓua#p;o8QՑ, EH ?#Z>]t6 AQ""[CA[R\M`|RqtxPn݂ō˗eSN0S+MѣG6mmEmڴ=y9МsiٖQtrػwaر~KS .jŐp˖-FǏ"W6 Óbq@9 Y/ZarRY3>#rwH޶m[~~3"?~6W?NÌVHe$xVx5/~5Zʹ:$T zAAK p, +4?d4OCc3۷ozm+7w1?0HՇ!rrrڵk7emݺu$6QI&F]i֬+yS-]}7ɓv[h!pܹSի-$Ǫ֨Q#%U;<42–_߫ш̜92bõѣYEΝ;Ϙ1ݻ2S )((S3u6TTT٬zqZ tʕpE 4NG@ᨁ YxI6} G,)%nC8|k׮3 ߎO\}[ ~ Dz?}ы 9 mPT۴i3f̘}RL{H}'K.Ek\SXUdUkҤ 9tj6,Jq G" _.O<٪U+[b}P*lܸG H޽{"'87e˗/;v7O>phB?^GpU~i=φ.bJ?~<3Lpgl' ګY9ap//ٰaaaP(ڵ|y]^^lA .JgϞ , 7O#;l؈#O&2dDzѢEo΄͛7s&LHᣏ>r6#2zbt#7:ƹuǁAI{ Ƿ0,FdCnG#::#R~7toE?wNrA"tV` V8 zVgSl9ؐgo8R9QQeUG͇OMF=z$4 Xց1c<t-)8Ư}[K(=To'P{J''قj\2Vu]) yΝv=eʔ6*&(5ѣG9AK[#俨9 kӦͣG<$9;x?~zޫJv֬u5x >M6_E9 5y\R^^N ̙Á0qIh!@5׺j?]pXKj-(W\Ɂ||C#ѣkZuV dݺueee-)!@H9d *l﻾gdB5H@ H%Gߏ?΁p&Hy\߬Y &q> jp rxiҤ ,^D34W/^4N = U:"W~r8ׯ'Zn4"Ȃ H7h9"Ϊ4GqX %HVJ7.rkm @s~K(FG!:t(hF;7o>i$cG>xݿ0y9ƍS Ļ>SfǑoM|޽@< /G+\u:"7ӧŃ+F{mEt呋􊋋)Po"PI<޺`7gRo0'Cir٠Q꽶fe|[Ṫxb^gkV}Ο|`yS2.]xXv4wQ42|8ٲN`^m|KǎZ p%{ rBXn2!:d "ѳh_t2M #< UrLQ ;͕lPgU]?mWZO|7p GƧOVvbӎq cm~vCpv)\ w{oa_|RG|[XfC*ݭpbQ =+ݖ qo0{X2.^(e3M:둦#o1TmkWu6R=!XeHbp|[U/J镖[<:D{(4'aN;}^iX8ߖV9ruV N k1سgO" 0>(|aW d8wށn]Bc:w|9ggkP}z!wq;+Wh;.g 0Q]42hР8c-Y ^RTT>%z8- Fb'L0lذX堸!Sx%"x'<QlÆ FK6Q|LT ]_e;yNZ|J޵w9>2(C)_'8(Kx+фVuC~x8^CRHVԦ" EHXspopVȶC٠T}%*U/`PǏ?Yy­MAf+=;T}c=93h'/bd}ɞ>ȭ% ÆSʑB|iYҭ|3r-0zhCgUZ ;._, !Z6-X|UKJ8[qIr6h47`M`Op+msqĔϧZ: / c-XiRRB:ńn*^8Ep;fs̙|3u?C!qb?yXsss{W2N2e֭n @ rx˖-_AL… ұcG/%񫯾*JH#??C,r"aÆF pDzx/'k߾wڧ>6"l.# izzzɨ^=A-Vh%D" !iݺ/((5J%%%,t g( tw Ϟ=Æ8;L8;j 0GYvcL#ښ5k8bd-ruO>%Lܹ{ĉmvߋЦMY8Nг݌)ǯݒY,**BiO?H;H?dʧN>Ri]ff,>_]☨ %:.KF|8rnmĈ飊b@@tF3#:!4sy[|Y.P\"tuոӧOcZ Ex-!Gp8DZ OIizF3Rˌ2q?3Ɖ_Fn$O gϟ?))^94-k-4gW-Ç49\N֭{n}RZLFȥ02=zTrO?o%S;O?D1un/+|pm۶mu#"; @{rpЛ]䑕ƹL nիwq/750@yLZ*OϦy ͛7˅xx޿~$'I~=z%ߵkLJgAI nN29+\gbb$:#]a6a|Fرk_"A޾cS| /i(ԍH:=ɼۉ켢'ꥥ8K&J3Vk{ *O Ǟ ˶>ȱ% ÕcO!+Gj-%zAlcLF3qD5nS҄3gNB土iivqWu7Ra#k׮ׯ]'\y]Kp:RN:F]3?g6q2\ŧ'sU6BM UC˜%u^x1rOLԶ0<5yh#€h<,DpTޫa[ueUT <ﰅr Aaȫ/KJJ8hsss9ۅ}|Q#СCk)]ׯoVꈇx/G+Z"|0pY6 å"?¥NV]B]HHd[dqyŇW41-ϱ'C俆깕uPyR8$UfϞ>ȱ% ï=ǞW4 pPK Ԗq=x,~[Yx߬z(3$M8~'OY #իWG>x`AsGhB:thL&bGpf.oڴ)C0s9 x$:p;bV^ t0Eb(ySΪU&>Wm=.D^{sQ-3LGSr _GRV>IzdqH&M؋Fn 0XH-,]vr*c>;<7"*/,{dCx)*<35#ӥ|c.]J Ɓ<ӹ{.˗+8\oG\n&G=pzv„ WVJ/zٗWp:;vE%LVxꈧH۴iQcdz$^yI,ϙk*͛h 4~zn+Be.pTʪ~vs̑:mǍ-+\g#zPi<r W{ ջ|2W}Qp3`MEzg۪XA8T;Cvڕ{knD@fm7mzwza%7y^ eûq9:Z!Rb25o7e-lDZC C >ޘpYnȱ]529>Ǐ=g[7`>X/Xխǯ349cah0d)DРbS- תGfoߗOw|g *7h˖-,~5L\2rH8?o7N{Z*[h1(Eng>#!3:oE9nhY&4P܈VXXH#|r!3JJ* .]ijVPy9\9 y-!=~\1V&wHD",afWoՃ&cjKΟ?_ߵk+gQ=~h%tZ0|۰[jd -((@1_4=@W_} -;oƎ{B3%K,[,*mȈx˗ShW^5#fF]Bf3?O?RT;Hħ@ W6">b@}'Np\.`_XBF8pjD?~,o J(cO+Gɧli&ijK_yTƄ -@{9\hh,ޭ]_#/qj{#^g ;:%f"իW&Mrrrڷo?yd4v zĉcիO>^ &SSLT>{MvU[+W6b }^zQG;Xϲwn֭h_ #rC^A@.[Ԙ%~R۷!mBHXBk' #<)qv/<}tΜ9[kiv?ɓYf3*Æ [\\,'dPg B(lxVZ*yyyvo2nAXWih̰>2B3Ͻy6VZ'p|?{Q/ߒ{Aw ŽAdҤI"КF)poXn[a7 itۂ_M:OzAƷUmKU-[fWuc& mkߪVցq!##}^lգp8*'zv?뿽2TGSnی#=:9GԖM'ܸq;t6~(#vQ rcǎxwfnv۝]:A#7|/-[Ճ+e^sF=EAUoӦMQGi i՚HXP(+xx*;w.FM_P( BPDøq4h0q)|1Lx_?}ɓ'pAoܸ/aI=zj^P( BP(2:QoٲM6W^˖-?ҴаaCdӁwZ#G ީӧO9… Ȅiuԡg#G<c֭[+WK?~[nM>}̘1ٳg^^^NN^&:\yW^yW^yO9_iRnq-[O>#O4)tݻGݨQ¥nݺGqT4ѣcN'F:FpBC/--upJW^yW^yW^yפ%ЫW&Ge͚5W^i׮]fe K,X`ox25c?~Fpu XP( BP>GOȓKˏ9|ʕlҤItK8W^mРsÁLK֭K_ϟ?2e ӻwo_͟?gvg¥T@7N7߀?pP7W^yW^yW^k`۾}{~֭[ё'pg `O`>~}cfEEE2NӧOs+8jv9hAyx~Ν;HP^yW^yW^y嫃wpm۶mРAf YƁOݺu_xe˖ͮ_~ӦMj:ujdUR<|BQ h׮رcla;>%E{eڵk7oޢE 6l gc=qLK۴i3c |ٳ/| K()2O>֭ͥ^ر#"liR^=y:17(.#G^m[7od~cFg}!?@=,`)v;?0ǔFi5ѣ< ? )~ڻwƍ#󋋋o߾-%~P_G/_Sg*UTRJ*V%OҜ*PN"ÏtƍSyWF>ԩS͝;ûw޳gsűVЅ ed8YQRof͚qIQC ׮]Cti0Ŕ{h+//s GRW\Ç+WJuܸqDVq:A*ݻ9Yf;w|iii)W`ǎv)8VTRJ*UTi5iu|t2c920lu94sx qFבK))G_ڑzUct>S $#A֭F8AIi޼x4iB ]t3BT~h X۷çMf+UTRJ*U={wyTp{OF|eNƍTǎe^*#v = }ܹ>=nߣN<ڄݻϞ={ԩҧڗ/_r`-8m&nٲ%\0x:uݻ`ҥKg%z gϞqFZ_m@439%%%k׮eĉA$m֬Y3J*UTRJfI{mz۾(ϟ#5Jn^/Ç_z}?Ks(j~Q>hʕ+V *ŋ#ƍԐirOmVw:p@zYv{|AE9|T+UTRJ*U=3]'OJi?ٺŗ^ 1cEr8p;M~cBN>;w'~"t e.]:udիW ﺴ?ongYY֭[ϧsp@*++5I36mzw~2@j۶gV#//L2Xr3W\ڵ >}$|)S8%K(|Ϟ=[nN>@?O!u>zǠ|:TRJ*UTi&DcO8ai-[tT:u0I=[od4NX߾}>&Or20tPwyƍ8uX|+m(ez{+773|ذa4W,qmr !Çݢ}ѣG)… ݺu=z4=ge|x8p;x9)p9\:;s$S?~,~vNz)Onذ!O>c~6m;O?`}] )M޿@= BP( V&åm۶?999c|}{Jά/=pZɓ',eN ?pn6n$^MiFυvKjժUM  gvq1aN5kJJըQc)w Jd'?XIݺuQ(5# BP( BQLްى'<(Mo߆{y28~GGG^|ɏ4ϝ;;JyW^yW^y啯| V( BP( "j`J*UTRJ*U44`BP( BPdV( BP( EV@`BP( BPdV( BP( EV@`BP( BPdV( BP( EV++++_[yV( BP( EV_8 +++W3 BP( B XRJ*UTRJ*Tg BP( B`J*UTRJ*U-+|U8rHɯ]9rd,?ziػw?>5k־}ISXM)I-++_[yy~dԩ~ٳg;>_~ƍ6LB:}t~;Ǐ \VVțr&ÊE&?~޽ ~1bپFڸqW옱*ڵj׉'RW'lE V9߲e *ɀ Hjʍ*愡Cu?0al)ȱt~K8$nΟ?G67 oO7}i+5J*U4:{waga cF[;eׯ_Hڵk)yyyc:F:>{ԩ;ex{oO'Pm۶ُ8ƇۡC|1?܀B;ݳgHNx4R?6/K-%ye8)w||իW ,h֬c|8iwMmZM< v=#}c9o!C+znʶrʄ%-xd rFV^yW^4s͛4huԹs[|A߿Skݺ8/^\\\L>L ̙ѣGL>kfOAxG/PXXȇM6wܲeKFHlk&O=J wݸq;N>H˖->|-:kzjSfp8ķH-|#={t\ݛRԩڢ@CO8fi)~P$s,=N+4*-ς!rBw&-Aw92 @zJMRJ*}+T=>m۶/]-… SLG{Ru&ß={6n8 c4 gC۷oذa|~ѯJo=qD<~={Ӈ x/ӹs炩SjիGj1kkի[je3g^o6f+pcּysC .]QȺI&'!|X:?n21>mkzÇϘ1aΚ5СCvλQny毾꣏>B>*4b?dQ:/^L/jذ!}Ȅ_~me18Ak˗&f-\Rh po_.!۳gI!qUj29fS2(3g"T?#ר{/o\tvڅ;3 1{6mӧr|*AN+ynJbf}.|Ů]; ToP^{£J*UTiڹi,>|%aq~ 3n AaQ۷N8m۶>e^v--Z_痲dQ(ƥ/>}w?lOƠ0aQ4萟xf\& !$ /K.6 ڦrbԩS;v;:c7ݙ5f޼uoNp  D0˜d "G%PD"#@ @DF & `D9|;;޻{ViNU]받4im6)<)Y\#JJɽw%f`m_*Ͷm/())tT.T+)MQjݻw<::}~|mPW^pIVE+..&ݾ}[,3GB233멪>oܸ5Zlyfp.^XXX(kyؕ,n@˂,`'j0&ݻwkP!/z7oaԪD㗪.}H,0Ʈ\SREJjJ/Iw #ʀzsuXL[RTTϿIG/~ߞ>a9gyg_`Q^^fܹyGbp-ٳ'SԩӨQ]”j:0me$-B[ZM=a|ۻwo9\Z3u+b7s1?="u tMmXXŷ]'R9M-KTAB||zނuݻwO| Q%Zl:)ŋ[0lhC sY @`K#{ Q< -tALuQT S\w5k ]cХPU^pAL |x*b*-rr X6ӧOi)ӧ@gR@9g2eʔ)ׄv>~/ϊat2|p3R`5 0k#G5 &^t;w"1c0zR:>!fT<;R:G>zhzY,bX жm[3]!O>gZZfȑVO(|@I२N:,^AΝ} "S&E]$i̡~,r ,:6gU)MJPY @`R٨`ӧOsۼ\qSUiI=J<%jtDs*2HUi,IaVP-E?Hsgs`t ^<3<Ͽ.+{zS?=m>,݉DpyATTU/N8ٓϘ1vAjV8+F]&Mdl?#eHahG+?Q@S9)ʤ^zϗ.]J%))SG4nСC\6l%k7أG֮] ֲǏe>|xӦMt!bl[LZn A"LAH!CUX>pXSo2sYJ/J /XWX1a„6}o2eʔ)S + `q?>>zXM'K8vwR6r222\ma[0mR1̥Iqq1Z=*YAKHsMN>Z_sG׮])[%@FܳgK.s趡f͚ݽ{PxǸ!Ec={ЪZff&=]U٪ xybP0\۷O2q}fU|$I ҡ,R]dP0(sʀ%>`0^F+@qs/ܹ#;v Inݺ^PuN ɃJLL bٳgoi}&99zLRz3`|wG׭~#5޼y5|4M%*YM3Ay->DOCj̋,@`j,nI7d#4T*9J/JM^/vٳ77oޥK={߸qC0eʔ)S//}VV,L[F<36lǏۅ`t6R+Sgߨ$ 4,%(bKxx8v.10Y\`|btJ~*j[%L4 4~>3 ta@]& HÖ+8Y fi\\5X$It(AbW4tׯ_WLvp1 _t Na0gH&`1L~0֭[`R\.H1n Oۤ[n-z*!>7gL1@DDC]<(UVK 8 =Nҧd)d|N`)M_%fZ1//='՛`QQQW^066VKK+e1YԂqiMGI{#GTxzox@c۷o{URRB(/^LִFkSOܖ+e1Y fKqq]۷otKSOq+4ŠUjz+V~-%a`0 Sa^`֬Y#4iRNԨ$իW7kߗ` $ͧw~7nLQҷmi ܱc}4%9%MΝ;OǏ/,,KR2 v]r%҄'̙3$fDDސρ2[;Š^ d E_ &~?,Ν;@Z_~I[s{\ܹ#V̙3O> *ԟ5 ϡWٸqX0lh̲*ATe1h^`ZHٳ' {4}9)SL2eWy\D 3QX: E,o`H$11_Y7 )׷Œ o 2bP|ްaCHK`F=TbWW:D暖ضm8fKRTTD EqdpZ>j'|VWDGͭƤ`r  n:Xfd&z1Š`sQ~=mQhP0Q< FG_ pVV ֭^2t} `&x5_txС0Da00}ߑ#Gh_m ^ Ծ[ |ڏ1cƠ iӦYBܹsrrrzz:8}ڵ+"`~΄(={hH̢uzr.< 02Hkȏ?TJ5 :-RhРWcǎ%2`댨(UBB)77RkBKyAqqqjx7Dl z1ylNrdxГXwh(ÂqjL+`Uz{nMʜ{оϟC]v}UdfygȿQZZJ^$¬Xlذ‡ < ahjnf̘qMy Çì~*\dȐ!k׮ďBeTjO2} 6aɡ:-*.}Kr.<a:?p@.իڡC,^ŋi!h}%K Y,2[vbccW^m7Us̹w]^PK L۶m'::͛7Cf͚A>`ԨQ?^IcPHҘ5kր7 5jT111`Fo[l> rP.@!xj[N t -Zׯٳϝ;OK -nSƀJ,jUB}Z ҋ,C̔Z&}˼և *@;_P)[NJJŸ/;udJ] gygh`0 `03 `0 ; `0 x-jfygygygy``0 `xW_ygygygy+``0 `xv)SL2eʔ)SL2})3 `0 3eʔ)SL2eʔ)ׂAygygygy_IW2eʔ)SL2eʔkA;3<3<3<3+ 0SL2eʔ)SL2}-/L2eʔ)SL2eʔi%`<3<3<3<$+ݿɓأG޽{GGGgggٳ*)>SL%s@|!)S`wѫW/.N2eʔ)S/|d֬YC yɀ&Nx'q}V>|]w5 _'NЧ/l„ P0'=ztܹ111}C]d]9d}MKK.zv.?"..N#˲ebcc#""@/9uԀ~Q/3,crrrvzMfDK(U%veq*&tܽ{~AneQ_eqe=APϟ]`Ju9Ϊ``޶m[5?QÔ(--_~'xbK.4ׯc D п{^|YS'hС@ @ % 5nDDnݺBVZPoڴQFb0ն+رcL{f͚MPYbWnejszE }P}M4r >(j47C+_Ւql^oyd}9.,ң,-P^zk׮hԑ%{ݹs'a ^ <"u7o 7=,thb\pj̮^ѣXXu<3ϼH0ƳݻÓm۪aƏaj O41^;дiSk׮}E}xiM<(`tq޲e˩Sѣynn] 4ul֤RX<)A6lpђbռ10 Ν{~!))=ڕ,0sݳgOQQD] @GBCC/_@lZ3g"~yW5Әukɥ=Y;vRe`M*kС!7|ӳgOa\ϟOU#Phk*%0R;qpb={ve H.\ԯ_?##c`'cs+e"{ 1\Wnr,ٲ"J^d01eʔ)Ӏ3G_i9۸qc˸8穆W&`6o(1MOT '$$`K00W0>z2_i2/޿ ܣG  5. f:Z0;m4|Uvm˗i* \eʔ)|QAAw4~*hnFX/&LPqyi,YA2K'y쪜sXe-Yڳ Y7-- RCw%XpeqO8Ƃ .ahhժÓfsGY(۷WJc?-GKVKKGի'_tI(4y/3<*R| `i>Xve\]4{EX_!CO ixx81U~̘1aaa@.ímڴK.e˖v˖-|ѢE0IM ڶm+!S نeĂIeR-XN:0u:kbӧOt[o߾ӧCEDDDFFlc̙POB?x4`=uѱcGEN fx|ԨQ T#G/l߾I&⊐q3̭%A45;WedqdhԨKY@')[qAib"HVwQZƯAEXqw߾}+Q`0zs8Tlݺa, /K`}:xXW:Qa\_ Ӽys9˂Yk„ vСlR|޳gO5~ڵklò̔mԷt[~3w̙3շƷcǎRj*ڒ% <&թS'(Ɣ)SLN_`:;Ըq{:Ὧw<ˢs!:sE^zioRqRN50`>LKKv&~۳eFtsxt@ z*qio':x`qq18qqq0`e})L`*ޔ޽{l |tt4IۼE| 44˕ڇLiݬ]v3g\|fݺu#Uxb1\4Jd40Jx.a|XKG,7``0G,X0ӧOƍ} ۞3[N-A|ƍ n/%6pj 0.\ eǯAJaHy0*ׄ]]oڴ Ν;]5ks1 L4(\1Iӌ&"۔ ]d)#eawn̲wޖf 1K(b^ΝJUoe,[Z|vЁ>Wӗ,K@KȲA=dZRR><ή? vjW-Co. BҽӖ7hߏek,Y PcwX^ 6Fo(gy7_R0W! ?LU$h2MMM]FO G<3h ',4+vhq?a駟~RW+xx ފ?4NouF!|_rY,gؒ\1 +-m2dK_aG /AQ%AUP/݅eKyUi ,qCDNNƂ LxWTpԸ8}`B]T!E˒-AlD}k01 "F xMa0 i֬-c6yիW<ͨ~hhaäx e,v%/̍i 6mWwJ|}~sa(<( 믿{.ɓ'N)/W2md6H}P\Q5ǏƠAc'N=zRcT6/)n/d۷owYR\Ւ1 eR\Oe)߲ВjRΝ;hXhU~ @MСCexʕ 8.4 /~vZ5Sj:dfxڻ,Ve ھ~LR{fTK޵k4vZ+!QLH _1<̿KLYܹs48 S xW_I>OKzܹs'''{ &L[j5zh)[V AhCZ׮]a"ҩS'|;n8zNK@0Ts3f '=fY,=,~̤IǥgϞ/_0+_s`ZO;}t@oǎ >.M( J.,mUP%_Ǐ*vwK>UE|Wmb tɓ'[S*MN3E1E%iEZ%[J` F1`T^qܹva_yq####}ǎ3`1@:mZ4ߜ+m۳ݢ }Μ9jZS!hufW%w(PܟI N>MCZMW2 >335'Q 4\(%(ޫҡ,zd"husQ2Xm3?H@{ҥK^h0ؤx%ubb]0J/(@^SDDY,s nwQ?X֭[s]2 Qxx#GѲeK5 ͇!2}d%::Li:tbEvqɓ'5Ҝyly\`j1n~~>ѣ=f2):[qFK{&N}\>4ÍpRɓ'[l_Yt)Mz1+3il Wb8Գ1zN2}1EK #F4Kz.FQTJcY4<} p)qǎQAСƲML61YJCu˻qaZWaɓ'zݺujI]fa(Gr-q j_?EKvW0&,,D(&AaQ*̩gy_Ue]C+5 -+xx =?*,1Y:qiu5+غuk)kh!_ÉUb,"%Dm?Kelk,>>ޡQXPr hf6t(fL[m#zU,ⶉČ )k`[L(3EE@K60KQWCY젱dr/ wܡU,ⶉR*R-ZWsN8l0xQ*u6mPeV$HAѣǵknYA' **{.jcPvA.\|KFp;1 "6ltg0DXޤ9s fyJJGzOٳb/~p0őʶ}v|L) D۴i>La00M>;`'urJD՟.OE-!uE=`]Q0͹Y߀f) hVSG>Yђ;vh]Z^R+ȋ,0.jb_fdee[hP6腤G:L_+C-,]E JP0Rmc?&) p@GLS1򔔔P0?sLQL+gy/ ӧqЦMF\D OuJSys̱ J:te ԩSK"yժUMXv*{dddf` KQv%"ךԂ0{t544~Z߿hU<&K (Ilu^pC?;x1w\`g FGN:$ǏzC>tЌ3 ߿ĉۧOÇk׮2ի_~iii{ Bw|4E8ӦM (%,mLBJJ ÇwԵiӦtw6w^}f`W8)bxAh2_|?\Μ93{!C`{'3Kv⤇1 Nڋw: Kl%w2ist㙘1KeR)\cU{x˖- hҤIݺu<(fis00Y܏=֯_/7atl֬YHHH >#h6e[ вeKM^6lG4m͚5AѶhܮ1i PR{m{y}`6lA&_!;)öo0sWce%4ҺømrھϟiԖS2aP`~nY0gz/T0o չV+eՏUAVEoV7nlۥ 0La`999j.$̍ @zzݻ9ëN:pgZ`|U@zI0$)su_j  {Ⱦ{ѰaC+T1}t J8)ĉsEÇ[jI)#uӧAJ~2Ka[bJ{SNeffC]`9b\:Kz_uZi1h;'O!$m۶r޽{޽GUPP`à^x~W WfBڋ[ Q2؏EWQb^Rkߋ,ܵkK=^h\f}p2V/Cg%0{Jk>1v\z'P0/`cV:'QI)6*N(|cU`~D/1 PW^ZN'MQ)g꫌֭[;LgX/IBׯW.YD=ԸqcM:#""~g"rkcPť6eϟ?Qvy&[s, f^*, fPK52+%ԟ~hlÆ i<^nAvT]vyἇ1 \fTne1h/BXYlA2LcƋFdKTDw;-ɺbP/f3èzUUf?VƯJ|9T-}JÃl`}::t裏9Ƃa1V@g=l0:J[hU߾}-[B oݺuk׊j=ubIP 3p@ ~uzTLvf) ɈG8 K?`$"Fѧ !ta7J(m=iy)/_\pm7]vhcF  *M(`AAմ4 uW2˪^ژSJ1X08T07CjCy/ƅzunƍ:o߾¸8e޽+u}{+::۷/"͹YbxH>|yz屽dwÀmv6lp٫WBnݺshPH}^NڋÔ ic?*KJjjc/rjzھZ-,-ok}KJEa A0vW^Thc}25վ~@mNJ;<^4+** s*0ΝBҔp[nS8qW 0T 5p#N>"iM`1277Ńty3-4\{ !m^d 9?~\|uQ.8,f 4a1@G>}7nS=tW>{pZ2s Q(@xxtqV<0RoH+tZ56F%wr93gԇ"~;>`BfiP0KsX̹CMiG\xQ< & b]3yHHx3nC[͛-4f-JFWa 1c%}zUPې=F!;Xcj=TȀ⻵1B}U";3И~8!0ZSՏUTw\?*%h2, ׯ74af0AFÀ=vXݻh|Z0S._<;;%,*hDž9*C@BO{KfA'R?dL6 vMK7B~ԷC]VV=4F eKe֣\_y~s~^TG@fiP0KsX̹CPL"Υ{h3K\hÎϿ "oCEXZ2}dMLLAcЏ+Ub^sWA؆1 AEclHԋo`cj"l@cFI&*eqX/ B` t ~If͚8p204e*nNFMH e˖'DfSA9r<tRW1qȑ# F]ZfytTNfeBcǎtN>|8Sv? `y;IAF8;TQ(eJJs;v(֣\Aϟ_j#G4hP>}8 V, Rf`k97~x,_.===K.qv+nKаaC:jaq SKP-~ԇW(~0fݸ־,:7~ȋm v^4!0j!ؘ}5;;3Xu sر͛7'%%ѝ[TeU8 0ZSՏU<;\𰰰/!-LG:Rݺ}v֭[1b^^W^mѢxPn%]l撑!>G3m߾ r(>}/ADJw~LKJwݡ\dtDT]i ^na8Y2 -@w3f u~;YD, ONEc@_xU>WӤA||woxP;p͂hc$xђXB'O,͸^t҅ N8_}>8ŕ̲'hL,O?$ 6n8/Omۦqs7+Y #m\aC?Ȃ#ٳz{@CL&Zj vշo_#ŭ%h`bøLj޽{wܹH<׾y{!;+mВ:4v|1aj*;1hQQ-9N:5X8=ݻwX0/6FT)AUBF!}4@+vX۵kz3zCԩ0B_ qЕYhJg>x A)0 "n߾M|Gi@`y<]~vZ$%%ϙ3G}K9,QAD GDDCϐ OU6Frp@~P.]zE]DWUC G:96Kyl/s9}㧟aPmQCݴpX̟?,EPjjL;KVa Xbx%X*mb^H΍_%b(;X4dƲlL mṃTP2xI,E` X&zQK˖-~1^4::r#0.ꬦC-{cI@/&>@= >vöNOiV0 8/=Jn[ +#ǷxIvƍjKBB[q ?L~P"V6&&76F d T=~6R`K 3 N7/Ҳ徐<S.^ )غuԷd mm]N9%41ɓahU޺uFM-9Ԙ%ϼoT܀jm?0J6}3Y %ү`㾁 ƭlE6Qc*?`b`* 6';M,g4@ ,f͛7+"E7OZX+pT?~?^6hР؋x +9'NqqӦM߻woLGOlNص}`R &[a;:%`xW㾨15Xi0=A4V\hc}eqR/y`ÈZ\a:N Cb^T?VZF8t=l5x?ԯ|>z111߽{kΝuq"[x5%%%ǎ޿~=ov׮]4M6l7`/__-Maaav@jĹ%SXnӦd+W⋩Sj0󃩿%%]vjͣQTK,O-ZWWIJݻ'==]|+]Vh{qƾ{*tJM*_jV|{9rUfv|WxpBMh%<-- *c`4ɓ'[.Xz-<Сm46k N<4E5g"@|HvB01g?9BwAOJ=_~ 8~KZMfW m(Dy/<<\/9( (]y>}BKΝ;C զMh%6}ۂo/fTr־2` :cǎrGiխ[Oebl2#577cǎ/:ט[K`4 $cDjڵ1110ښclPfm/ƯRx Ak1lxԘ*k$1G6W^M4Oza**ͦp/ aÆ6cBU+`[Tvi)ܸqCz;tP/+ؕL_w}o>Sh&Mtw`oݐr?q⽋Ѓ :uz =_\@^):DOxYQR͛7MYkֈ?yPkf?t%,Ν?YY+g[`Ex,"V 0*]SA-'ezIc:3($+ݺublE*3yDjjˡYz?Ӡb`N 0}+>믿,Dd0]!~)bf q-}1ƒ'F{;Q.4Ē~ba,=Ƭ+Y oPfm/j8+0A_6 4f6aUJeۻwo@%Lᤲ~*Њ:\RRhӦ͂ pơu։aoSONhut~,w >*ǏR\7*˗9 رcjxE3IjҥKJJ W^hPR';v޿Ccǎq裏*b/t~#G%{#33 W:D햲@="#jT3e3PDU%O􋊊;KY clceV?ZݻwǦ 0L>]j "e`Al/*/(~'MNks˸0ߒXR5ZEtt4xYR 4Qcshj\-dޠꊖ~Ld`k?(j/\{_V_ ]uH۲Iy/Fs_Ҙ^WlrھSH5!}C;{3aʼ٘>Jqߡ^31W~?V իxN/T8~ƍ+))Bujh90 bոI%h{d2oܸqĈ0֯_?$$`Ȑ!ׯן\x"(]v+,, E1Zk׮Lg֭]f > >>СCO<_)YYYnp9990N@v cV8IS\2336ld7w\{"y([K}8&&-[ 4H̓jҿr rs3P"'_tkc{1t `*[NNN'x 0,h` 2jѢEKƨIS+nۋ\ , mJ* w _Bd :M[^x1DI +PsΝ;ĪFzM !F|X_}ra(3N,@;3<3<3<3+Ww2eʔ)SL2eʔ)Ex%`ʔ)SL2eʔ)SL+#ogygygy%y^fʔ)SL2eʔ)S3L2eʔ)SL2e̔)SL2eʔ)SL_ ``0 `0^a 0SL2eʔ)SL2}-(3 `0 3agygygyUy^f0 `0 k>̔)SL2eʔ)SL_ + `0 x-ggygygy-x^f0 `0 kv `0 Z``0 `\k^ǿ[Ϙ2L_T=ma VKW-~;љo'CGx~Є7J[TclAqjNXQkZSO˾ /;ө.?w\⋚Y5g׈Us3kg5/O%ܻ73XĕM^]{:Vי—佔gXTɑrJ+`0 `07׿f<:O>Xoz;cL[X-)%ͭ6*o 6v9Kj<~y+kMx韖:vWq:y|ѾwԬkQ}:;O3'\;'͑of,N3xUdrow2<3<3<3_|V|oi VK_-1|_}Mإ&/3ߟ;s}Ϫ7z̐MFopsW8cCWe1M_#1/1 `0 *#h_ Tpʽߤy3j8of!_,ք&^p:y QSP]36:x7;kL|kLIjO$8ݔy5f6zƕ_f0 `0A ,-eΨjw9SW _Aė&8i,p@o;WSk3#gV]#fz5f6>Ad ㍛/?_NθewFC]+; `0 `o~¯L2eʔ)SL2e9}#)"^<ӣ wC^c.0ƻ7B/QP5:JW[+1f6L8:yan~޹wcf]k?\#fZcLS񖻾q3WcUάpVS?ZG}^)SL2eʔ)SL_R`ec)}*ͳVX[-ua<1^XdpUW+~VnW^wȋnu>vc'߮q4T=.&x#gV]_y]ӿ3N3g0uNC[Ʀ}\ L2eʔ)SL2et`/⪯p嬥}i .|)8uA)5F76띎C'v̿LlܸcИwb֌*{fHS']#Ϫ01ӪGM8<>u┮ߜUn2eʔ)SL2eʔiiWRƝy3?~/aNW7BYR7ؿ:m!&)k{o?LĜZwŸGL=Z p}˝^x4Vr I|7`V⧂eprܽWk)SL2eʔ)SLV ?=?}Ѡa}1Skx'~vyZrnEi輚skB`pqGͪ4fʼwGΨ;ș5f&{7{t sjY d̴'UT'>m.QcZGDW;px_|B0eʔ)SL2eʔ)Ӡ`]9<^ya.S:ة5G I qvw_k̯5:g{yM̯4ח0vRNyuSSՃs'ͩ8^z#Bb2 ްi7Xcwk*d=0<3<3<3_i XFaݹw=wu|ipF)gJ*5y򜰤9 s~lG6J Km 4Mk6fc4O O:?|9j;%lĄÆ Zor3=]{L2eʔ)SL2eգ/ 0Q:m~w`Q]n-vQ,J/h޻Ɗ]( (* vػX &?[3gw}gϞ]9}JasL,\ GnfmST*JRTh uHw&-mU`.5ey٫:sУ~=8tt6׽˼5{vzXk>] lt㠥/8DE^}yv Vnv*l׏wST*JRT*5{3/>1nSf=J6RyWe &.isnpm%^x7 ^qӦ+7\;eX1# ݧU:7=n fvPc )SfO`0 `0,W'n}(ײM]mu*Ӽg6*tZ~:X/v{C6 r\r`Ψd,00ȸU MkرL%ݥ_3~RT*JRT^N?-oR^F]iײ0 ڗOiVAu(ɇw> wN;жal\N~j]A2:kըy {5nuP^CEI+`0 `I$`3)O㫷 ͱOިӰmoէ|u7jҥ|ͺTiؾB射/YآH֥~nWQMkӨUTjݧ"= {X3N2:w̙3gΜ9s̙3gA.'cWd*T}*PUonwҨ)!>^<^ ږC&]4QjӷRZ-}h>r``0 гЅ{k˫_V} eC28rv+ߪIͽ"; ;iܹTeawqqaU:yqFG7Ixt .̚JRT*JR:aUfV/6jQV8ͤD^cM:ܪQUuu8LӨs&]4QMrW:ܸh^zW5ƤȊ8`TS3 `0 `cMv6(㖙/11Mct*_EI%cv+ѢaU1ڸϸ&V0Xʃ'4pLӈ 4 `0 gCxӁS\&y Nf㖙Yl6b٠iMuD.CZ2N/sߪOfsL~M~u>hِCf~ 4 `0 C7x4w W).dlrKF/2m{11Ҳm*'| u; .uDŞM28Й1>9Cg`2|F!G^f0 `0 2fLtp5b&|K,F76۬~c: ׵/Wdn#+wbAMͮ>bXl>hzՑaE``0 п)ϟÍO9\c;x*I+-`/r馽ǚݻ/@s!W}"s%Vc%֣X6lcY|kZLe-2}E˺Xr~ٍ-g-^eO_m}2^,c`0 `U$#  }ˇs`^y.F,ݻ"+]/8F sRT*JRTjPswn||kp—; `0 [+T*JRT*JH̙3gΜ9s̙3g<[\RT*JRT^`0 `0 FzWT*JRT*j#RT*JRT*5T,B|fΜ9s̙3gΜ9s̳e`*JRT*J`*JRT*JrJRT*JRz9s̙3gΜ9s̙E`*JRT*J~Xs̙3gΜ9s̙3g-sST*JRT*U/= `0 `d 0JRT*JRB 1 `0 a ݻRs̙3gΜ9s̙3grW!B!l 0!B!B!B^@L!B!D/&B!B!B h !B!4B!B`B!B!z 0!B!B!B^@L!B!D/&B!B!B h !B!4B!B`B!B!z 0!B!B!B^@L!B!D/u* w4] B!N41r.ya-Xo-iHASBJwd>D*g {٧}umW_%B!'`VbuG9GZ[/m Ƿ3}cu"oLͪ065Vߦ_ТdWJ4Viܲ=F{L5!B!d0:obvDm1CK=q!ޣ/^=~K"x{%o9R{q[;LPubl6a\fd1ZPTy>Sض'`jܐ|7[&B!G €5ؿ@>%9O9un>|vlc}[Ђc9-cbaAӊ7$rRmk׊j0b+?\uz5-B!BHf8.8+9KeWDy%!ܩkr]ᄥYkю*@c-Q`DBkShhLMXo5ȑY]V^'j|ßo9ӷ6!B!D= 5Ӷ1?OyO7jr%2<% JUPE?\yR}!zhG0I --Ѽ{\P_|O*+[:zre;T[Poq&romB!B>cXJŽ{&kr<9}^[uZh`P,VI YSTS'9'gхⓨ*[&jr&;JXoUG NLڄB!}F p@ |ہgT,Jr_>v_׮\psgaWĠߢN :s:Lk)kPЬȓ3ANW `Kϣ(O+O\auIQ #+'^)m>=Zo:<%Ay4ɵL!B!`6w..N~!kW8x`ւE׶uVZY5i]mgLs?h?1l0+-ާuBh^9rXd^(?hAƓWo3𥨆_!A U p^9/1*d]~*s{z2of+v+ey>Jض~7xi\n-=[o-ն?V2!B!d:cbdn磯(-xǏ>rfjYE~-G6ܰ עOM{ qȑGWB߼]{fݼxKe Z~K#g.T\\eG oek]Tj70xaR Ӫl(+ϑ#G%vFVT*T5s%F&y M'2!B!dbvDt s;Eךٓl[v,մk>c]RmZE[~a<jxk몌ߖnժy[>}U2=6[{׹E`QOl.7*oOѸx1֛X{ J0v4oB!B201v"m?tﻷoNXRЪ͖X=&T眍D|ΡfN;::̼e?{ZNSQKd~L&B!-n:l˗/,'O,}D,=l>gl=??ZQ(A9̰պcnkLc?zd_ƶb}J&B!8<}[E̻Zj1ٻ|{].˖pe[Ա:Q}Gο>nG"0!B!:`?[.ظkӛ޼^汮i.l\VϯH)͜WJw9rr6h !B!D|͜.+?u;*Ooi}}&B JςrVY6ೠ !B!o:,wY}i 7!k~.j]2[bCJm>}߭ןmB!WZgI ^xdVc_h6z^pv[Ŋ]&Lu)&#gL IzuB!!j~aV,twJf5!>m|bwG|1=[0(RTSѰYW1ȑSvo *GM'>DY['`Y>PqѩT(13^ͻ㫂f5Uзh/,MdޖG|>W]r}WߤXFce@$ .Hx4_Ė\ U4MvHX.=8:KU)lcX^}t/Yi Q 9J4w59{Q,n`</cVPiHLpv&iE#bJk /(_Nvy.H.K{Ѳb#)X%7$rw;QjP/SC_B:Zr3]B!,M`B&ynCϟ?M(4lǏ7[{]QA,N^U3֒3՗nśtQmՏXzQ?H bQNF_ ыT\mfQmS\6|=Sm\Nx4_WNQ3_U\}()٪R qUyY+TtJ%8$IjىWVb_/o<ɫWGpB!di˗k,r=l*ډuU/*^wxQ;M8Z$A1,7+o?&BҤm}<׷o^{۷;e N\<[7QV7ފQwkmꪺ tҥi5lUp62d^?oSnsPмVCsUĭNxT&3&ڒcY?Wo[Qu_d83JsNLJ/l_7!B7ibGZ%Cڼ}۫WL3?jÏM?7?}0i F7u?Ɵ1NW,䓇!RQ3gƦS_Q54v*ƙ56i5m ZoOU5EP3M(U]( pZtvbՐp !BH&] eۭa 7;&k =|0nƜҿ-}*cgsTO4=qWdUj7$ʓ|%te.R2귩7vQW?m N]JibpmܭgUjqj+ʓ4ƓŷFCgoU 0(IQFXzP:M*k{e6ķf+v'53i8m pkķ}'|~ G7ҝ?V[NÝNLh !BRF:'_42W/12i'햋~aP+5l\I޻[k|k,t5ҽI+&tyAVu5|Uz]@Q8FT[eV.(qS wLbkkfp<2oOY?WKϰ7WmZ5!YWikS02iӵډIW 0!BHHOm:sǽ}atw덡[><6v[iYkLV޽{5GS4-f™qzCP\2 ,bSj_#ŕoW%u&\ebiY;d#p +.XD|SGxRHOJHvFuf%u v;QjIL!2_l5Cl*+k<gӪ# dA N(DfUfQƖ``%[ʙ'Fͫ/٦zDڍS|b ;2d)T Pck d$v> +L!zf)J{ݐ|+OM)YSMMh;1sw:!BE p䏺k`(\2:Kٗl+G%\/lEӼ3};dih !BY'׊h 0!BH#k'. lU4r&)O9}Hٖ>2+l0%:-dY'gqwM=LB!D0>r޽{4B!Hg\s̻w `O_ ]1v[iiC0ڿș? 0!B!d9l=jNXDd4uևnl5䅰41WڎB!BH p;hǪ/ >m^Il?kɾ&xl -.n`s?f;B!BHI_l1˔%N^HC _HH_ǾV}P`B!Bm{qCa߽J??>zp faE$B!B!' p˶-}73j»oNXe0"w!B!ԓ8n{QN%1>9E XB!=HO, f9ӹu5pޗϟ᳚AvtZ7B!BH!} r*4=ҥ7bucTo_h閮AB!Bmeo|l] ?%&z`~^2aQAf7 !B!$;80qjjWa?ufDxt~`Q+ߢ{ՉNG0f.B!BHv" p_k%v됐Ї{&!c&Z_1~ͫ>};S W2ׯ(_znֵN;m|gB!B~d]m=buPUC  Ϝ9}ʕ݆}O^>w0-Ѳz/ӪW!3Ly[z~ !B!$8Pll|ZUe<±|Z(^u:MJnTvRҥ5t^1ɡl_d?O^ԲTn <|NYk-\[{ƨW>B!BH$c p~v"l.Yo:cl,u&V^h<|na*Sߞ>ySb_ssLCʴn2fْm-\,VH`#|B!B7deK2#Z愷G0[K6>,v6c5w >|A^e: 笍4g,e[G(//!B!g%dNAt~>ݿno޲ծumUbuXΕd~S? 1{{_~;Zt,q`5l|/PxU揙9s̙3gΜ9s̙g\GWa믛7n2iΨ3Xz !B!D ^\ v3;6wFM4c_X M\eΜ9s̙3gΜ9sZ纷e\ XiC.*{VB!BHIXwFe-gW?~N#o@.JRT*JRYQulXnEX2_]ȫ|!B!ԣs+5H5#jdT*JRT*@:ׁwD f]'Ɯ9s̙3gΜ9s̳f{+T*JRT*J=B!BH:`*JRT*JdT*JRT*J 0JRT*JRB,>3gΜ9s̙3gΜ9s2 0JRT*JRBy0JRT*JRBe+9s̙3gΜ9s̙3ϖ9WT*JRT*ř3gΜ9s̙3gΜ9˹LRT*JRTЯB!B!ST*JRT*U/+B!BD,0s̙3gΜ9s̙3g]sB!B x0JRT*JRBL!B!D/&B!ʕkذa[lqtt,Tpꇝpww700^W>}U|Fqǎk׮ussڳgOP?cӦMԚ5k`V^ vLS aDafru`z˖-ܺu  ϝ;'$WRŋFv<߿2eܼy 0r .J=9q8Q믆ǎO7o^zuQ+WŋKcu8 .M-1cƠel"e}0K.F:tP^=$F*YCa6޽+H)KkѢ40ѝD`i`5󲷷/TP`` '<6ܹs\א1}f& lҤIb7x`Μ9s̙3gΜyZ~MXXju7o ; /w}Y9ׯ_}7c;w11}llC6]v%WAϟ?êIX(<9ڹ|2q)6mdd pE/Кxqqgr ,ʣa#?~"B2bSNU߲BҥL<666o޼Iܹy JN5ԩ!''&MZ VF"Ж[P\V^.e0 `0?y$\ݻaN`gPY3Ņt0)___,7778|S[9s̙3gΜ9s闧jڵkE XbHVFqO x:99y{{ޯ\~f8 |ƍlC?X,BB8[`ɀbH;v+< 0q˖-X)]d.x( S-̳`iɵ,Ʒ0ɰ={aFt_~3TBѾ&7/1TŗjbE >`0 `w۷O, 4[]^^^pƙdS0AAAu&snݺu5jԐ̞֭[7h@ׯ+^;O~o0Ǐ Q.%B9o߾H֯_4Qi&ӧ166yٲeyM'ײvvv˙3'ksȁGPR#F\ LMw륯 .L`0 `d0'}6|2\_@@ x`2_\'uä05q3n_z`q36Bj!rt++8.gggAqQrg`daP Ippda;x߬Y3Gߨܻw ZCy޼y-Zϙ E>^R UN2)yaӡS ,w `0 F֊THBE?! 0V;ٳCZO6-W\i`0 `02>RupTTdwi;u84օkٙS~ҥRJӋ);ccΜ9s̙3gΜVyjWw޽e˖۷kku,52&s8ϟo߾}֭o^`0 `0t9 pyaʘ8FmHRT*JRԌT m6U(yᄧDIhhhtttLL y=^vaA9N+0+X@FS4 Xe~aEh̙3K/``P[5agh%m`0 `0T+`Jfnv˖-gϞzjdd$'<#>|Ç ={`w+C===`p_Ì_{׮]O~:. `՝;wn޼aOrvc#ɠRT*JRTz52Z0`U''X7n0G9v yv^ʏ= [u=< 0 X_m۷o߿ܹsG : =u/\CBB`}EvЈFH6dΜ9s̙3gΜ9svvp_*nݽ{+W'9aocbbܹs;}1ԁ=/|2Tx]kŅHaJN30VAAAQQQpp qڵ[n%{I>|޽{a1ZDЦ45[n7 fRT*JRT*5c=V90p !]޺u Ν;P8g@»w>|_?ԩS+|Wt'x4,[ zH/^;-7F۷>l/ł0* aF0Bh1SLY}$ YL JRT Y__+""6 8&&F\Z,x"~k׮W‹ܹs0r7o^vƍ0n^,a^t-Bh)51* U#X/_?~\,0۱(#Tm0PS ,MS`tS Eҽ{5jm6~ذa5>mfs2Pr]#L|јlZtd<'ye\9s̙3gyVϟ?/`$۶m uo>",, CŰ*lC+e:g{3g{.mf?U<#ʥ] #LoU40$JJRT*5s5UFjnٲE`8R?ڵkZXʷoĠ< ` a;7n(rQŋ^¯ٳ'$$$::zǎV$+ 0BGcbT0O>#_PÐ  / 0&~N6i;~xgx}󀏘cnjժSɎ;_'R;تra3ڴi#~{ža7o:5kl۶e˰Mӧ?f͚8l.ѩTעM !C1qFIYdɳgHchР*Ko=:hG*+-I.Hx4_cҥؒ\NA8qBi W Z+c~Μ97Oիypul7Q=bHCҳDWJ9ضm#6cݺuq'WIN_>Æ TQ:,{-Q^P(YUǣ'gTGukTwkx̠/4HtM{~Jcd^l$s̙3gΜyyjW?Ʃu͚5sEs) S<k{W8mmѽq|}y ?LhtSs%,] #wϟ&W8vڅs%իWHtt4NśîOdX)p&3`sM8 Slj;kݺu x4_qjJ>I~rjΜ9S|{rg6C?۷ԑROR4(ߢMյJX366V|R_Lſ?xQ~q8%SƩ1$|sJk8/MҩT*JR5T|aa sU ,>xÇNnѣGa5-2j3**ʕ+0Swwwaѯdx0pһ,|jyf ,+ rJL>\Ǐ߹s'aCDwZ`llCJFHg5jڴ):v͛7[h! 1/uD9f#ꈸ|8-ׂU5řk```Æ Q?c7`S`b7aOiTY+Ӑ??۷/Z_j}Ҍ탑cYj ǞЬY3l4 T UwAƣR7i# ǘIT'9_m }ԩ#Hfٲe-?^llFTFb&M$_4+G#SZRN.q}' XYk{Xjg屧~ϦNIFK?7ͮ `0TvnܸP< Ng'NNNd %06m5===pŋX$?W(0=Q_!َ|xGWAAA111HFˊ S?l933̗gw&\Ւ%K+A:X.y43F@N eƇsrgrʼngџ.ao GQ9ܼjmmuâ@ߙthz5|ו`Rlҹ9%頥%+i0 0%O80TeXUU eLmhh.{J!qCϟ'zXN}7RJnضmW;`"]vI}cPR>w\OOLCCCt~qNa*aMᅮn b9*WNk/.p82П.k}`uDt?]C̲etgpsU8\gxE~'N?aEwoMX> #uuuFҮۈȵ;22=vNwBUZř3gc+cq>|X|X$#?^yyV${q1䗀S?q n^nuvvd0k_j~iMMVXIj4 Y}ҦY=JTŊMۡ!Tk.\ VPޑF'ٳg;;;O>?=b F.Rbp7VOO}r6Bj'Ot~z埪Dmd  `FRs1WɎݰv[eh'4RT(ݭ[1'ݘ8$:(JN:%u&O*Ao_g3!w7UJ3~zj=|t'O ۷oO@MS!2ҭ=|7N?I3W"g߰PN]]]NLZ+rp0sÆ 2gν甤.aaK:EHsAGLtbv-Jixboo/ݯ^{2r dpk`Qֶms]~aCfIIIQQѪUsN':X d {?̊޼yϝ;jpBj/„yG(5P[><:v9s?ҥK:7o{گ֭[؂(? 4&)'B/\0Cni0g͚9,8w٪? ~/U?3Lpa<́[1-P'I=tEԟ?$tDv6 0 #]r{Ak baYQQ:ohhy``رcHV5-Kک_+IL@E3Wj@C]]]Hk\]Y0bխ%KMb/_;ԩS%%%/믿/()8}[ZZZ1MpK͛_}O<5483x+V,͙f4 pH-7,\t'^r{= ʕ+QYD;=_ o8gC2Ofh\O4-xͽD.aaK, o>hj%NġCIsW*Ow$*0Pmmm-?Ԡݛ H)Cykg4M<%00zO:TG?G',%HxzJXƅ,Iچ'`Jx|McD~+~ڄ61Hi'B:S@tkcڛȿ0:c3<#$]~=c%3f`0+=ؕ+W-R+|wǛiW'9?gΜLD2'1ܛгsJAKqo `0 0%q^*FVz;Zr!)~zhmɡEԯ*%o}{zwxv0&ACkk>[_̸xD+++sg¢E7n|Nױ._z5(V .裏]Fyeq]aҥG՟oO>pB7mIII@Ʊ7wbU?Oe87is2BBr:b /1H}A&Y|۹uoD|̙qݺujMZӆaaq/o맳|!%_L VF psWvsɸaaaIAo߾5XgШyώ;0t߼ywޙ7oރ>8w^{6 ###<;i[fqŦ~ 0 0iH:X!O+6 0 0 Ø*w%+ &MU `h0 0 0)J >K* m۶e˖1j&5GILp6 0 0 Ø  ٺukEE?=eEiibY@eeet&ion0 0 0 c F &R'lڴikVP͛׮].))ɮ7nXUUN+ІaaaS"u@:rE~@r抈͢d0U!鉺N-laa1UrEG^IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/metadata/info.guardianproject.checkey/en-US/phoneScreenshots/checkey.png0000664000175000017500000051267514717152070032016 0ustar00hanshansPNG  IHDR 0n3IDATxXMnnrEP){& ] J*(VPAر]Q"Xa僧~gmNTp~yߙwfiCP( BP( BP( BP( BPZph|\i#l;;;]GGwcbԩӠAFr,̂ W` Ǐrj?ʩ5s3ߵꌔ(XBbh,((">ptɢD%H`@]_a&+3aXAAAcƌJNN#OOOgw!~*( "oj(ROݢ1{TI&N!@̉bvnnnVSLM{RzMCF4Um۶=ܔY"`|>!|,mH1 ,8O>@BPZ0UV?tTƳ$!!^q?x{{:wBs~AZ$>c HJJ$%%4Y BP>1c̲1 d )FPA2qM+KZwRRPPS8 Bl^aדBP( BP( BP( BP( BP(СP( B4)^FP( BiBP( BibP( BibW`))*jik8tga4((<,E\/؞=m410TV)ZeefM6BP(Jch.lUH{Hm&;ǻZNuJp1Kt1Mr5a#o Li-Da BP(X jn~F*~j C, \̓z1ͫ wif\MgsS P( Rizd.ڥt/M~: T'us5wKr:47Dg'G=-2, lע0gSc-&OBP(')jWe9i 3 +9 {Ŏ.Jn}5 1Pfsc>.l^ك<9 ՠX BPZ M! 4ՠ Ɉ[B`utPKUj0FjM';yH#:4uIpeՈ iBP( 勡 dWvb2r6 *wenkh`fg8((mmwCu( B$%Ք5ݵd=e:k]^_:TSi}y1fL]#-"\KpHr5Orڷ9>`(>k6[1W!]EP( (l**=XeRNb}$itetJt/XQfB,tz$Z9:'{HvJr4iǂCp@ۥ#]tU*ʗWvԃq~ήڥ/߿Ֆӵ[.z.>a8z]4(2sbooм 67[.TULsЎ4UP]9ƭ$aPIBpv{vh1KKyQaDkf]cMv:|bUcB?)BO=ƹw7PZ+s~uR)kV|~n7U~6g5k'nr)DS֟!k'4'ilnhZA55P`)((ȻuQ/?NO>^8a͟qzi9㶆{@<%Z%62p^HqjK{YmT`.Z}Z-VPM X *եkw)=TKAgd^ٰW/*q~L]]'XL44ʪpm$G@%8d5_3%fu}y elaJyq՛3|YYGL~nA3;ϭ8 VF`sC E !KEARTv$\ vWϫٸ;;[~xɵчLg=VoCU{^V)N\eUk~v^F+.Kqgo9(jVypݣoNyS*O.EdԘԃ"vG`sC E KAPK/U)?M:FtP^2Ig,^U ^hW96_Y[:"N3D9849 {7_cxi˼ ]u3 ZYvcꢻr24?GnP=ִC1YU VF`sC E|4fPJFw¼{8rxa6dwOQK4U"M&A#4;x3:i]6Y5޼)LKK{CLEݢ"r9VVV.<~TU~؇RȋF%#>:G=4 8%fop>}:s9[[۹sjkk1tPx向9'544n`` ZZZ7|`w?8q"91 ''`„ *&&I0I/Q vYP^^^|]sssQdnHH -4+2"(1 ((h1#FkA$-Z=n8Rxn"19rk^*},ovxo1AY捓 A5ŕkA72ۍo ʛwd2kjj*)ʺH)w [Y*@Cj\?5:VDEδK5kg_YvuE[>-Y //<9K G y4OuiWE'+GȏԐ먑o4E;չ[ѪB׷o_hbg~~><I֭[UUU]vm QZ=6?yK{NyǛ*;r5g5X˗/BWˑz_%8З ;w~!ΠAM΅c}FEEÇ7o 1cV\ϟ?ӧOÍ>g͘1>va8v OAk @EIQu˂'ypnXXk׮eGE̚5LaA[h#Weobuo<)Y^^NF$#,:@۷og¯%z m"}b n:ke(LHx1i~ǎćX&[`5BV6YbaɤΚ-Xu j7dx/״7rvWV3g5\WR`NCv1an~ԈE1 .L2r^tͲc/YdעW<#=ߛpESכֿ>V~dƔǥKﮝv +HaJ}lYn]-Ux&$8{9q%tlp{^]\\? ݻwcP î? CG@3yXѣGfGHWd ,\d>AP\p0!N(_\VXtށyv{Y;qZ:LϞ=5cTܼkkkKKK ,"~7WWWp!!!ŸEeXG#~UchvYsrr 4(GT6{!|Đz6lٵ8p ^HÇ'ZZZ+CǮϛTh}l,:ԩS(@ҩc|t- oo-FPLWȄ,ATekjj$_Rd7B3PdH]9ZG 5+xfW"/L89̂g (ʲI=ݞ߳v{=IMyPxcYOqd6?ؐij]z.}2ot[D $3,qsa!'ntnFF]82!3ULL vy"0bnA"߿DŽz{13|mX̯N +r~OF`=~+Ekacp!YSۼ;w WΟ?Of ,ENgs-g2jUccc͛ƽF(0 l8 lقIMME{RQQȚro>ǁ<!*HAARLpE7A&|֖XnU +!ݻ /:}!O&X%z* m"p@||GE8{,b#$Z(}{9[n.(:YnRkN݇GoIF_>>>0#F3fۼ9r Wp%B"3f n xG'\jdd${ ܙ"\oߎK#1qqqRlR%$~t׮];uTAA m6 Y\v""&*HAA"H7ODD`ǎ'O|Ι!pZ (}޼y‹UV۷oȑ0XYYk^ b&3˛+8)\ u ,$!rf AU{ Z];S+e0xѪ!q>steƠG,nef :s*cPwrC֮ ]0^9htM9_bW^[2qfB\'4G,+}Mhm!W>|x!!Xi8w^9%ײV"pΞ=BU?--Mۉ!"?=e޽_}vzʕ+2>xY,z&YOPC*lnjU 0K"$cz1.RŦXwwwGR]]9=A[hPxVĠk733k!!| 5z8cb8pӧO!Жvy[ADxfyW`q':k`yodBc J*]ş{ktQ.=V_nH=97MŌ8>qp߾U,oG3B҃fzT7$!`TA1$Q!ђH0p CE BDFF^|YƆ1ʊ|Ȩl=X8۲h9K`q;}QDW߿+YGD4aScnx!@ 8fEˢ/MA o묠lq6UM5Oq# G5XJd{)J8Ȉ;ʈ{+IU nuij=ڽ-V|SU·%wmݽeߜ7ο}{y+/?⩷~{{gޜ}5;jU?9.:#U0X5{YsYlݺHhdy=~fi ,___hcǎsܸqgϞ%j, `L[+^K E`sC E ,KqN;K+HRWSI>ڴپ?*v}XTPb?Ẃ?\5zsAl$?o:y@LOpS];OIqsz?$o[A̲i~N~ZYY?<7aWp%{ꎚ~wk9RWm'g"l3y)/5)gy OE>JNrջw4X0һ8fɷzu^7Qκ9OWtҧWmyOl{SS7Ͼr[,5t9$MDnaS8>% |~ ,GmVT~nV9w'w> -W$mdm$m$z)uAF\_ldRW9t!#ފiOg؟祋_rn ɛxwE"ywDG{s'K_bg%F,1%=DMjL7HKK)v]z5p&ˡɓ'ty;EQ޻Lb:J:D6I;ֳϝOJ>[}Z-H`()j(iw1!+('aIL$ڇ{gU֯"yȅqwV<<+&7 Zt—W9u&M| qtëCk8jnMm UfFiZ3 ٷ?ACC|5|B$wOt᯿=|FGN*[!nuFy؆>zϝOJ>[}Z-H` ed%d%Tʹ8q;x̱WzvvIn^ȍ4*wY}呵5#J tܣ IOycΓ-)7N0ښ䍓I}xvZJy}ME94;JˁjVjvWozr;E}rOfYytۿEh*Z> -A+ ,h,ymΦFu;kk%ip-2F\Z4ڒ5O[2QճjMQ;3fx̽aN++*3'E:{HN4OuPO4W6VIXeil4ƕ[Jgeŝ߽;vԃUTp:/GT{U~'ilnhZA5O`1v`ݹ}fbf[5gͼ珻daG&{!bbMLę؈91uj_U#挹|⍂egsvRrSgoh8Y'IyQw/w j7yws_}sNrJmꎚ}~7|f޽{śFlhkMG+h3ljjR3,$+.+n%%f 5IۢVA`=ޔ߽Ց2Ce_\y+?ǻ<ݱQQ,F_\KO9q՛_y|%T0eG9aSxo䚳;V. g"h@./kQx_qwVbJ2nFNx̣ SnN^8NQOvf=-]7'K^YbOMnL8#sCkXKi#/$U&X%J-٩kDgcG-%- BP(:KuP$[^ܼ/Jv0Y0mSx҂,.7iK^~7 +_)z?ᆤscf,M.;P_*\^r5:Փ WmjjiIBP(/ ,Ν5%%ˊ+whʶkU)$n'ۙX9¸bפֿ~Rtųo:1`RiA(&W>%t* a+#"9kk-?BP(J@dd4|ҕv?$g6:3uy-`zkiX1%WN <_{rjٙU5E{P8T]GgqzM$5P( pșRQiN;?.-%-ӥRe:tY%/VEqV-m:ZǺVVU]Qixvn:R]vFgIey3BP(J(HwҾ/mILn!+KKl븵dq]{%:KUvR\YT2';+퓒]&&SD;i^ AIz+IH*)7In) BP>X׻+(()z+֞V HLb. RN .ʗ5(i_Vo;thjGqZˊR6S)ץP( Bd4V`+ky* RqVuU-Dn{B:mߪZr~;ף.' .؞ӳf[fq7m,t$$m]ZP^J BP( E3X BD(F ܺP(WDc:TyJiV B|tb!M4EqX B*VRDҪ=,)P( CaaիWX|KZ[[;4)Ʈ9m lFcXSSS {ᵩBP(k'O(//?|޽{wѵkW] t i`f06"\pyP( 5qܹgUVVp۶mT`Q, EUuu5L˗|KUUU ' LgEEرcg͚E Nۯ_拿H _[{(++á9r|4ђ4a/2E9Xd mA.\ψ0aEt 0`Ĉwpxyy1qu#{fYx1J={644ɰIIIAƎ',, '?o ,@q>enaС ///G Q'N3((KMM{޽Hq9|>}?=vܹӀtRxx8.B'}U?ۍڴiSɸ[x6ǵPl1c1'سgO&<{cTuj!wIv bnn&aB\=l߾);sS)$ Mܑ؄_twHHbFӦMnii/|ƍטzamcG}.))i|E kjj4-X' 7 lM-8/33feeW V/Цb&nF)=z. r]va{C 7;k(`[7y,Yh(Ѩ(8OĀNHHu|EammͤmڵjC3"%ߓ0Dl:th˖-p3DtBF`A gdd dWTTʕ+q͟?o qlj}ĉVWWcKQ)N8fǎpؠ֬YP68?: R(0W!NdA-g@9\vAb, nƢD())Შ͛73u5 *HĢப"!lPFbc eTmp!Gq.ܑBXIիɵL!3)DLn-˂wİabbb cc10b@22dp-6~Ϝ9k%dN%Ydķ2lٲZl"3lsB鹸-tں #xzzװRL؋aGTik&z?OnA{7Ca⏶<33 \>55ͭӗ]&pOt<<<Uc?> zAо# kOs`Ϡ/.HA%,d ppp@dzΞB'nt#tfb_RvHM}"eK 2vPlz#fkftؒlBl>%ĉpn+׺Pb㏻<)&a2#>VP *)5,tn3XUUUw$:V򈰎,F@GbZ +?08p 8 BEuw^^.-$ D`Ak%1c8Z8&<1ņGS>bU˳ `X6n V-g. ҲxgP\H!>; Gč|>|8 j:EH WiYsբ|͆JO:˖@ll, mBB+++2%`&uaggW˙b$TWp$#%&1'ij|rv`RBM 8 f:`fA`9rX& i1E(}ƭq;:coG7ÇFo 9!]Ph2 ?4drҥzW=.3/3n5jv===?"kqa0#B}:`\Ǩ|}}Hr"'DH?׌PɌr|70sKH5 )D0  FAPqF{3U5BFS`qYaEl?c6"kTBlSň솄 {XdcDŽ؅1`4N&:NR+^f \;ڌ #H[ZbtF.7 ź,"=ZRRBI9A`,Q`r: .Gֹ0@j @! wAйz2Κ5<o~>0O09K__|Da!mk֡&K0/D?#z'%%ي}A5cA 5l UIr&Ϭݥ!UYYY `_ BHffB֊Psբ5X Y G!H:s&)D) *y^c`HKK#RRR0pÇ7*A3XzNpW]2aFz{ɓhjhp}|Aiq`>{.Ӛ?K,Y?vZSSSO1d69+6ޘI'{.BBءGrѸ%֭CWY3yd,Y}q &@X b @jw FGG?~\P9 :;;/'nd̺MkrԨQ(1GGG?H E P3kepK )7nܨ pMfnIKŘ $1m"…Ş"F2abז%RC !>U" yg,F`/_;Q_̙3aX<-nR2ff#QbM7]soUUD$TH(n-{ #Gv`Ch|8q 8?K[FDD0'>wgL##Bakt~̋FIS 弽 nEK~zD[\`xL^9(\=Οؠ'CYoհnW~p3['/usڏ 7#!b#OT񐑑w @qZ ?b6u{n (RQyyyw =w@@¸n޼B$J =<<0c\3f P ՚(+nKÓsgdi Ƣj,Qזj?>b&ۈI.DjBp!μ^q]ƀRBaH8za. Ch>rrr#hkYE`m-BX hΝ XhC0 >s@]n #=d=RQ\ܼ۲9PV̷[AP ]㼵IƵEGU]]ͼɺHcŵew^Yմ[9$ty}Xݻw%l}+Wm+ےGF߱cG:S)+|xb\Ԥv2d4k֬Hm-_~č*:t({uΗNnٳgrIMݟ}I" :tak֭lOWWWx0>_EEE&SLa<{_>''g쨄8uT33s2cbbVZf511!D H,X _ ϕ+W8I:s5sb`zm 0'Ǐ={ܼysSH"n+**P#1799\KR[[-{ĉ &.]tu^'''+++666>pgprHrHCii3g>|S4YcN:ۇܹsP`8_UU9w\z.,9J  3X BV5X ou]B̄2e MOOȑ#u9rnfitǏ{D<}tرd7!!3f DΆɁgTT.?%$G_ X0'L ,knnn- ֡C&[`As}dĈ+„Y|.G<}aee%3%V]x͚5dW` X9,X`߾}!/'+K`5,nn/M`]rڶm[gCsܹ>pr0Gy|=zԀ94вe X#gCVMMgϞݿrr2`N ,XES[[[bd- 1#VȂw蒥$..NWG`۸qcAA %$c%[{y¯~odk^[_fd8t\v-GҀzAc74:J-17bƤk9ϼ4i aÆ $l\$W:`;v G7lۃT_Z[[/Θ1CP)2! e?4mq2~(~ -n-3[Ծ}#h |ÃL Ot 訝"͛7#@,TLhh(?E@75==}Q&'Z4!nf!}q=N777$z/= d6NS@ F"p-ysyĨ8%rʷf(#Zy^L!#$c4 3-L|׋׭['J4 ;P3Ċ0KMM%$;j $ ;A)eddqܹs!Ⱥ"%B"˖-{L)|rg0|e>wKP}&\[&) 9d ?<M+LB\3X aX ,`A=6k $F6,;f s1bHKK#( XEP1YՁɢ12DG8i$r+Vرcq. H5\Ʋq1 Ecbb^v- ,&??_PoQgxfKAM WxB<2}թSPEEE(R(ӀS 0DFF)YYY pgOL}Y eE6{ ‚,r<:v옠5Xkǎ]r%#`52QkH #"v<s_kLB,,4I*(Mz v4|fimPaa!!|>ҿx!C #bL0ᙾMйPcLke4ȭgFI&UY=1=3y1y1lff;c6  d@HlbxXIUe8OHyNs*7OeU$(X={& 6 ;t@,y駟rcǎH.~c%ߗǍIqcxU_,Sj}V6mdtWÆ {3B8f%/`m=o۶-ݣQoټyN$v==q, ;rNJTBb.))) f,\,)(MRDYQKMv\wNHe4,SQB*yZreˌp(ulmbXz~߾}`Y ¨0-`alDRSSW{&IԩsݫW/8Ȏ 7\ gOJhѢk׮SJ!S0>m۶D)P{R2fuLcu uD݈:F:-J/)kqDAap!]wR\o ]AQMъUP;[n9=X*F=1.d߰aI,SbVF I+S˫E‡kSN>I)Mx$///d؁ZM+H*`ݼy/,K"޽{LLY**p{&O{7던վ+֬YSEU!m\<Ӽy$lٲ)B:gP9Vg}~adDtVP Fŋjbv3^|YR"°\6yRKz)WfV(633Sd%]N2">}|cS0!TUG\kD]Eo5jLf"ёN:6wEj2 ,ZB9ND6ʖy3LVT^1aLxD ,ŅX3g03>6 ՠAfL)deǏC^Q~zzzbbgO9'RRPP0dRY߁=w„ 8֔EEE9W=seÇ+JhEsΛ7oLjڶm! Kj\עEd? x 3p!4Qܳ9p |+/l77n*џB/ba5je%%HHzȟ,!R> лwoy8sPf>w!fM2m1e#Ay`MK6Ü \.3Ӻa$䄝 Bxv &]U+Qȣ5keEX1S'`&ԨQ#!mD&\$mq<]vŁI@AQȵXpTm {"da$,X}V+l؃mWw@vyڡd233jMd:t(A;hd>}ȹA$QH.^(K&v%r Lny^P2Rs\GraI_z}Xk0 ;.,MNaÃ"ҁ8(Ջ"PX+Le 1 :W݃[K6WK9y#B %%,Kq!EGr_[Wʔw<>|v>+x1GծMnr󊓆a^`-B ,Kq!XN| F^=Ozlɦ9͕>͛7?x`c-Ӧ6-Ze)^$ dɒ%KVRor]vnڵ,Kq!Q].`E徶MmjSڴR=uҥ'OZe)^$ԩSYYY6eɒ%K~F"/RH,L e#X6Mmjӷ?JOOR\9I u]dɒ%K? rE,GQO+77k׮7w^ǽėglo00aܹs!CoJ,IGI2iQQz O?34^dL&Ne@Ծ˗w޽[nzl̚5:qΝ;-`aNL`}7=z|K.ϟ/o"%Kr ;<={vݺui111q׮]k֬Yvm.0%%`z˸{yh.6m SXXغu>UIgrZZS 1ڶmW\ļzƍӪU2ݫAT(jSN wjb#¾X'%%;FMZ._z\2'"LÇϲeTɔ)S(6mZ$KwF!GB|!1%%%ՒW-[ [_߃%V(x?|^XI~Μ9^bhUi̾yA:r8rH.K̰?8ԪU+U_7*#9#ϋjX 1_Ѯ飮UZ>}Ҳ|~1k֣A֗U˞2JߙH"PzסH(%,XǏ,K"`8qB"X^)exb3uv9??TѪSȯYcǎ0`S[4ydVmڴ5j%(.^`&a\'=zӾ}7oR 7,a0.jժ!p"ݫH>X^R >96m:v옔?E ZJiXKlٲhѢ5&߹3bJ 8u]`,fЙ3g$j۷oW8߹vZ: >BVB} СC%K>,$@!"3 V@H&ٵkף/&9ڢE ġ|+Wȵl;S$LJ Rr=V'S.YB%Kz ~A ,ŋ`Ŷ[lP)WMSK`tE/:V}@Pرc9wٲe4$m&[rr|W^K.޽eLu5hÇJIayjK}ңGro߾R._(05zQ>KERtΕ) k7v܃ٳgex|E8p wm%?1c 59VReݺuaSi]N0cȨR8n8UXVY5n={*9YI\XR_Xɋ֥9A#_+HCj`⫚A&4!4}yxq]DЫez_L2x 6$>?"ZrҲ㛢GwUiX&N*,7XUZae^zf@cutep)BX|{G`رC -h F5b"aU!m+VH/`E:y%\*R2+@ȰeK`L)@~Q3?_B`,UQF3\}GŖ̉JfRf\kwy/ŒI+ĐZ$\,}/`1޷oLr /--BpU5R]Dpi,vNƍ&7 vi1ڵkQ^kNa-r-[=)z4EL ]}{*| 9QT6~xWX% /n ":y$-ő$Qeffb`ׯe3yI `II>K~ӦM8˱(JX/>@ 7oT `dzbZi=x09_-M26:cǎٿ[nRٲe' 4fLO^V28Ajj*?sssz^Om61(1j*~N>]>|xȹ<+W$rMIf_1JOOWWʽ+=X"Pɢ0\RdPvd\*0-`!y\:*l3i/u,X zkUjB//ux#G>LEe7E,_ Ϯ= ;[;8e?n8+n =Z7S/\t`1P`Y)m3䙿֭+y.'֔_vm=XQ[ -B5wիֵzy=Xjժ\EEERد_?2VOT*((*$.]`͞=;䄾)@ZJq׬YOG~S yA0݃5IXK~vޝN=,1t>_ـɓ3gRBiY-D^zbb=e%-w@* (e-+{PvO3faRk|LTU\Մz+@RwgƍJJ.u̘1CWr{w2_v&\qbe7Z!=XyU5&sʔ)!gLc<*횻BaNR.O/ԩӶmpHHɱcǶonvuaTJX1Bر<.{X63d{XXvb^)r1ҧ~*g5h@_/Ӣ<)Y|9$kS3+4~0\6JKK%Ky "07oud+ә,ǙѶl">gf Ŝ9sdqM"`>a04nO>y2H#PPȒYSʺS'77!۷VbȺ}.yVŭX^= PM~~>3A3Pjk0F@T|^4NuG])a-*-[=z kpF/^4i0xv)0#P a灆_R\^Ǩ[Μ9Ӿ}aj{5+N\K]v=q bUӧq)!,,6mUʥeNIIB`4hLmڴ:uܰgC{CW Uz24jԈOrG{yhy3)VZ+?,d?/3{^U0;plp=EY [XtJT$4dy mZ1 IqZjԑ#GUt1ą 8 pa`wS ?1dJVo8Cs^*uv)^^ŤjLXT` aVR\HEXZqXwA,]ozu4cBٌY*[1L_+b! ,WYE[ncLU72޹,#y)PN]6ZRF}rQY#^-6-{Q oO_g=xA|̙3-kΝr|Ű"E`1MWeA'Ndu>b( 0zF8"x(.Zz,wz Wky `=zt`Y n݊QU,5gΜv!V9`ɗ>ڵk۷ԥ0.kzj\|7mq_Nj233?x(.Zz,wz Wky.\ٸqXB `aZ0X,YdRY`mٲ,Kq!ڼۼۼͿey_ѳgOy5||I}̵u}ѫp 崴4`9h۶m b\r;7{iՍ79/gW#E9!DIN _FqWG}Yb}OJJݻw䍚\deG^?5۰CJ"|!z+ݛ7o>|Æ UVԲܖ`aN,¸䃃x!?yPш#Bm=z$YMr|yN4I>F1o޼ѣGWR%99Ycq_Z PǎkLe=#: pӧO9r$#Ɍ,!ZS/\*0\ 1_ѮcƇ\_-_z|!l̮R.U LGyлݾ};>r^`͜9/˘1cT kquٖ$RK^&{oEeddpU?K.$??_%{>p|KN*ifԨQWsrrzׯT ǞUU58e޽׵Z^%PXh"z1) ~o>|x…,qԄ*vHF>nٲeѢEHM`AbJ\p$yG|Ȗ+F$|D_Rm;׮]S)d`%ԷxbANH XJ QSX̃ `cHȀ 23P5DCsٵkף/&9*ߏï:u$[Zz|S1S_dvuTPhTعs'zN5k֐5kt "ʥ2Vl/Eq,=Auu8۶mێ;L=z,YD?W6>\駟޽;==}ܸq[zœC{ |7l@˩}%ʑ=SΥ%< Azw.m,\TիҥK\Nkխ[נA8k,!&/Pzѣ۷˧UYo ~\j-ղeK[׮])\A-JΊrvVzàAt]QH08jrRʺu먯J+$.(23 ZjjmCFRD+%A$θ)%G%%6i @-|$XFޚ;&`ӤeK5Jx &ZKׯ`HTUW.upԡ[2BÆ 3=l)ZM ]}{:qĐ(qcpW .wՁ&EEEut`.EO>=^_X_|a?^xʷnb8@sٲe2Q0s{ 'O[z$,J"X#XL"cǎ"9E"XPIi%y\~rr}O2{Had5sġ3dΗKڷ^|1j(zp+!W[2'̤9ɹE 8W;K^VEԑK fF1X2IN\_))),'W_}E&--Bp[yoI+l2#II;RqtysQ4ѨQ#`k׮(Gu} 0' |1="X& Ϯ= 9(*?~]P,0S/\PE)% LS`FuU7oG1! '@P~b'ܱ&Z zwouSD6lE"ҐR<ˬѾ>U?==$CޣwL#w xS`!Z0M6 ;'.l3g;vTknݺI˗J]_gLYasΝ;Ν+%,'"X: ƄZjZӧOsO>=rJ,w|XM.^8,I[_pr,v06L|I|d\Vo"X ]}{vvpʀܸqWN=zn$^!?9?E& *tGUرc,Y0@+pN'`<@%vA, ´]JYrJUDjڵӜrq i/o"jժ0& 0kM&׼X@tma<} eٳCNrA 2<5$pKn`+aJ]+< 1yݻzK}:Jـvn͜9SqfB~,ƿzꉉȦ-bY J֬YYS,rCVϨ5>t4jDj(7iEPVҾ9x|۶mDq)1+u#,$4ԣGpLlQiУL \35xIoO)R //T/7vX#,+W`q"V*DQc`BB5j%ȃfBF gϞ[*Wz,Gؖycǎ\Y IdX8#Gj{,de LjĹ2>Ijd}hٲa`w^p<}*ܥ]ꐧ8 Xf70=z.88]}{ @1*:lh$e)70~s.]4m$''\Laa!s>| `Qh% T<]~}sY**%%*xPZCc* u7D/1V3^}3M)! ,WV ZcjvS8*{_PlvJJ+rIHȩ8:TKpًHqK$rFwɦב%KY=V=7\/S21TYN2%կ_>?۷ɓ'Jϗ ɓ fu&%(酠~ȉ۷g1cKΛʑXRۑn߾]֜,_%x2vĉ:b(0=G)3C:qѲcj-o&wRl{:w|…/1\N)PUeff-!lSNuq\BWRҧU1Mmjӷ2`S6e)^$,P`,x1.]?>ZgyPk֬)|x{׻w._߿zkL3Տ8K,iݺuzTrʊ0Ԧ6[J`YI`W-2`{Ȑ!3g8G6n(P9sf0>}T^l8~Çׯr 8pd =zTߔ.^C5,VEljSL՛xA`Y{@`լY!yܹss/lʔ))))m۶5jTQQ`nn.Dʭ[令*:_nݺO>|^BJJJOwC`t).zW\O7n L$"uرy^ZtʧM&"A6MmV6euG>Ö-[TEڴi#;NÇ]8q<q9r$kɮժUѣ)߼y3qɹ'(JڭU֑#G,Y?joO*… JN*dSԦoeGX8 ,ŋXk׮5F㒿tRF'NHcRުU+01dɃ0̙⣢Sz9WEՃm0rE6lxzUZƍgΜm۶94)u֕OSSRhoy]v4h.lmy+ʱdI~P"X[>Er8U~:uJ(QFfڗ| 5A;wtqP)f߾}G-us>}ڼysVسGjԨQܽ{7vڑOMMmҤğ1b<@ [߷ŋ̟??켋SMmjSuj#XʎJ` 7_TT痢i_[GI\z5p@#UG?TGydA tRS~rk,`9s :tժUEÇ]3Fb&1*hYۼۼͫ`=XNR{02`o^h@~u%}Wo[Pf͚6mrY,Tj կ_:՛:u]JAy"lڴ)999n>|Y3d&Lvk3gT'l˦6M:,KeG#{**3`#FٵkWbb"@ݻw?2~lrOOO'߶mI&A!CP.ruK6VDv>Pnn~QG"죚1cƜ9sjԨϢ"S}f:u} 9:!o˒%K,ŗd`Y* rA*.֙3gڷoá &3|ƍM6mذa6ms-yMCf;333wN!57mڔڼys ʁkԑAr߂!%w[lInݺdO@QRN@v?z(rRXJ0MmjӲNmRQBW9cړ7W߿y}_PAAWxmm眷{,=X6MmjSV7j+S˖-_,K,Yd݃euMmjSڴF-ŋdEh#X,YdB,K"z)%'Hmmm-˫,GX6eɒ%K~,KeGA,6MmjS݃egk;v˟>}zС۷xbP֯_a9|N8*szzݻd<@΢"ץKTaڽpB>}:@[c_Ϟ=C$ O_>+} $ST>,Yr`Y*;*=Xݺu BUVyUɓڵkW%Znݷov >CquթSGՙ|XJhȑRbһwo&y;v={ע䏄TҤIȬ /<&>TlW^;С%/^ ࣾ{ ڼlv Kؼys*|srrT}$iѢxJoa݋K)xaԩr*2+INK>sΝ\3`z'Fm۶QϞ=2cmWN_`8{y+Smyԛ-/݃-C,D;<+XJXRME~J^`y'%%Єr|2lӦMH\dDrrr6mqFNQ#wIαc"̡CҚ7o"gŊm۶mذaQQQ|0u`dɒlRQ{^ lذ̑#GmqƽoѢŰa5ke/ծ]cǎjժ `/+Tu… e'~J1tɯ^kB0a.dɒ,TvTW^NHƍQ,EwmpRRRׯORVСC[GAA Hu9uIeS9D}Ԡ$3߱cSNMDO|f~~>meee}T$n7ߗ /_/<&>+Z}$Zg)Aw]YdE`Y*;XK%īTiٲ@f͚ ڷo o֬Y$yPɦ6m^SN 9Xu9u٪UdS9ytLr[xj#{mV:ݻ~E"'~E/D]Ǐ^dɒ,TvTV3 &7eӧOի^ӌ3dϯ[.]^*(hUT`[3M6 (i(zE5jnI:uSAB/o֖r^&y#ҥKC%w*4jԨI&*B$]|LeG*yj/<&>+Z}' ϝ;WbZW^}wnj#G}ʒ%K.r,T֭R\9aT ָ 3g$G~Ŋ!kgiСý{ղeYfI]ne FO>r^5eʔU4H(tqizW"}veGΤIwe9xb*zJIjjLd3IN9Λ?~rr2SĴ4|ԩSa 8{gX`y&OܬY3*3)PΧf͚0\M14oޜƍ9֭[=he_]ǷXޖ͔<}m]yX[e)( +[,Ydk7%5mڴSN5hРU[,Yd85k.Y>Ϟ=+**JOOo֬Y\򗿼{bh5X,YdgJX7o>|Æ &LXj0oMMM-?0;;{̘1%5jԨUVRY*_*=X6o6o6o咏3g/q㥞۫W/J,d`Ydɒ)+%\AWׯ_W?V駟޽;==}ܸqppnFFƒ%K-ڠAȫ |&O I&ٳg͚595k۷v:p:_ڵ ߿h;k)B*aYgؼۼۼ7o_`fDS5jp¥K|I7mڔOdx"8[ԩS7nܠz-G}]C}ֳgϨO9B鸜N9/ZbB6eɒ%Kn#XxA|cXjպ~!C\-[qy_~`w$[n)S8pB٣GXv"6N:EeKE`Ԧ6MmV**Nhʕ}xt֭[𬅅gRR6lX?~ՇJ>;;ٳgȣ~ `;vs6l(?_G`bj>sN%=T¸#*|222m@hӧOAA>%wiEEEhqǎ.]M$O iro={P_6e85K06mr‡Sʹ\O$G9 h7zd)5j 4h߾}.v1ֈE xQ4ĄV.]0Ç'C)xݺuѣX%P(99yٲebt:tї+W0kiܸ:s挔-GmRc-\|_JW^V|kğW#GԮ][99s愴7Dtر#v, PիyU^o⏧zP1c$G|mIh4nrS՗΍r_vMMz  p-[G kC1%@_QslIʤ;_/!aӟ[e *U*,,d ?e@ ޽ DoITsiA_=էO-LYߺu{|RK?|kz||z0\ɋ#) Jć8tm۶a>Gߵkr<\mڴvĿaÆ]vݺu+^Vߍ4vX2ZNKKk޼@ o&yOӸMV_BoРAjj*/S&&z}a,ܭryŊm۶mQQQ z WTx mܸVr|XwW%q(N< p?Tի+kx1-8.]pDM~͚5}KX.h?eiDIC]Ѳ*FӨQI&aQf֭[c)yW /HpqwEsT2} d/`J&&>%0O>%ѣGC%{MU滲7Ǒ+ )_jGgM6m\q]2؃e'4ԯh咖Rbꗩ]^LsrrBU/&LpK1ر8/Y$vcOIAr0z)hM߾T`nnذ!=X;wp`E T:L ,P|p9,7)oPIl}ΝUFHJkԨ< (J?^lfOLL78*UpӦMS?"TKJԩSgϞR i{\ԴiӀF[n'4ԯhUTT` +]^|s;wĐ^a̘1έƮ]b+W/ K@yTxBL؄ vMKq"yك`1ռK2gnݺP?;#X x uU[j  k-[j`:7L/2,_\sH3f{M8_ŢҥKODq1;)=z7o^FX )SV:h ɎI&u]u>ŋK8$ONNW󅌆<5&SM6E2RSSg͚5sLI|M4nrS5Jɟ&|L2koҋ/lCSz,?hBnq\k4''GdSN5lP@zJюsYOc^ljӸokkСr b C پ}1>|¬,~2GcH'i^B.]233Vюs rY&y;ױywTHÇaMmjSԦ嘺"XB ,ŋX6mz{lmm+B޻ hE`Ԧ6MmZRTvTJܭߦ6Mmj2Jv.^ڼyXB9~:ɓ'6eSԦ6}S>χ -BK"xvA6eSԦ6}STvd#X6Mmjӟij#Xʎl˦6Mm3M],`Y :zKHl-ȯwh۶m\Hr^cǎ'Ox2LΝ۾}]ܹ#?>x swmO>=t充خ\ݰaCzzV]@3 'ʗwc swݻw/.9MG5n&>3yF={"˗]}Ç,wvܩޮ<m}=<7ۏ0q}1ٿ#V̙3Q'`|RX*Ee|XE `] =zt{ѵkWYYYRdf 7رcGgtw q㆔?^tڵYӧO~ڴid={TߗzӦM,|暚57oz5i:uTɓ>vv011Q^F[.&{ U9sB/=Y_o:PY Hj*r-vL|L53|֬YSzu)O05J;nٍ7ʵj:{l3&{0ُIzG88C]ڿ=5O _y`M|Lm}^~\`Y*;*%0_4w{Om+W+VrMR._Q-Z6mߩS%h͛7\H [nիWO|HUV^i4矇 ߕM0K5jTRE&,Q&bcTPP@Ӳ `lС4!'?M7iDmr,dz=vX@r"mfC۷MGIӧO/UMԇƍD,/`ܢh_8sJJǑoa,0(8 Zlٺu7gM`0G=0@_=!:hk<ݺuk߾$Yո'~Gd沲N8cǎ?- TjỦL=X^5k.YDyyy]tQGkת)qqXlن 6m:k,>##C˗/WݻJª?\J-6fR 3^s2aÆ۷p̙:tP߿:۶m#߱cG3P.wmTK>]^jcƌ# ('7̄,&TUvϞ=G5n&>^Wk׮]㖔oڴ񌶾Lc3#}B\dz'I3&1Q4/`?4{+WX-ְdo,{͚5,Ç_|S-V9 |=| äIR`8.?ƍ)S|TZ>jxlbX9GxpHivM9` H+Wl۶mÆ /en޼YGhӦM޽>LRuw|.\ؠATe0QqNNNf60vX  '''--y adjw}YfIr'&}Hs+!=O4hRjU 3Į_5u:v(%Dg?rHC/.dm`|W^,,E[ḙkg*r?nڴ)5TS6i7jr}22 p}chd?&9M5p)ǐg/Mhv}'6z$Dq@t$q3 "W0/l?z* yݸqwvi ˗#/^ 7oܹs '~:͡)SL<7ѡ }VBzm&D_:1cƀI`,X,]JY:uݻ=Zkˋ}S1b"uQa׮]-B\U5-?P~Qol)^:f+&yYܹS9w%֭&,V͚5+Q.KU޽{)))grQ< 9bhT*sp5Or@ǎ.^ރ;>! Cpe"@~t ^zqg6߹V8c_4ngEĊ>9+yLm}=$&;qcx$I&{0k<+feeGt'vL|eb=>x%\xɓ߾}֭[AZxʍ7 fiUV\b A`KZ\BEBȈ7(/#EV@Bf1YlypuC S%3!9I TH(`iii$Nŷ'DCrEZ/۷ιYf:tmgρ1ۦMA r62aOȰ7B~G4O1?q314έZJNN֯_-6h%q{^,bE+yMݺuաPIKH,!Lm% 7N.bV-4^uR+!.$M4&F&LmH_B,8];'Nw\Yk3&@N⹣Y?q3o8O6-TrL:uS\!gR$㖓UtۮN񌡾=ح +"^zddO5I],C%@7_>mLRSs& ceggsa_~:ӧO9tҡ%te:f !BEk.Wƀad8`0 ƃ aHFia`lzy (0p#FH^XeTMT չu҅ZL gϖX˗۵k',sΓw-[`-OQq=En[qɖSvDw>|e6wOH8^bȤ 1r;eʔUckT.b.ckذLԤM"i|B~+Kx(v`^+z[Nj-P2VE;юoۜ.;&MCqf g-X 99^zgM>]L8_vmu$i46gz<^z;V=De)BaŹ`U\ݺu31䉈l޼S`DAdp9&x)]r֠Rjwe [H4^=ha7nm$;of?.+8C`n;TQF4覥tm@ LCœ$v`Ԧ6Mmf9$oz1ѣGdd:BBEEEd)ΕMԤ_H69ءozП ;T#X,Ydɒ%K"$MmjSԦ6sj#X,Ydɒ%Kq-yyyy`Ydɒ%K,ř*ֳyyyy;6eɒ%K,Yg˒%K,Yd)d%K,YdRyyyysF,Ydɒ%KL`Ydɒ%K,řJX_9Rnɒ%K,Y5p8w ow4hϞ=hZdɒ%K,U| X/`[Y #___gu=~so.ߗr7%to^/]//߅ۿ> Wƭ_Y'0,Ydɒ%Ko0'Fίt4ܫ_^|o~u_~O>?>{Oվ?]y~Y ʸwgGxgוgvt"X6",Ydɒ%KH Տ/>ssVWfW:*tN+.|A+}rw2V>MsߐS<|SNw2WT>zʇnU>p&*ɫ3K7^5*o>ɓ',1W\x5k%ۼۼۼͿLm+羳7/#*pn©{NO8[Tˇ/2~ g_ 02μU'U:y҉߆J`yw_Uڒ +m9o-5UXX8x5j$%% 8 >SNV0V\Ydɒ%Kt `/X^w\K8p=p~т?a0预3^~R~~*[cwP"jUpA÷hu~]iO^*̩D.bWO>U'?3isέ^xXU"`gyyy/|k_O8x3ȭc X'NW%'U T nUW) \} JuҮJ;+mz2Mn|ުU7EEE͛7wUsmuǏY ]dɒ%K, ,T`~gՄ}_'p(?HA„cY/~JU:yϹwەS@T:*PV@9?6g&l8sV |/O>D/>}z$j׮u*U:r䈔,PΝooojժu5)3g6hǏW֭[5jX-m_?4MmjSԦ6}R"XOr+M ց/0ႄ# Go^:vޒ? A`n%/F+v]~5!=7a'9/V.'ߖM~KyyyիW*|z٫W6ip#a*=իW_ׇή]v*UW??ر#''g4t)9ԦMXm߾˭Z#X3fسgy-Ydɒ%Ko<k^3+oٕwVޛA7*YP~÷[/<{ʻ*V9gw澳#ۮ-^mʬxs|g*m9S$'pi&?O< Ν;|…?k;w;*tw֐!CLrڼۼۼ[/%~ .R¶+ ;rү%Kuž {׿=7v_넝y ;%lMؖ5;a.'lJX:.‹5_%>˄g|gGS#X999 6*V\ٷov%%%(X[ ѧ~X򗿔pαcT:2fɒ%K,Yz[=X; ^yZs^_7}-_ݎۙ_z3w;2_nﶞc{Gu^ipb;u78Oܳnlq . #QEG6ؘ@BuifQo`'%sʌ$r3=w}~g޹R=P|H@<»O>'|\I='8gs#Z0?p0{M |~ɓ''ś7o&vg0p s6@`0"d&kbKVxOOOV zd VC D#TFF@.3jv`pq8rĠ9Zmx\%+^$֊:Khu#h ڝPs;" Fͱp9ڪhdx衇x??m4f9 ,cǎ<^n!$J"vA &P"K UYyJTJNojNT*ZS`1)/hrr=0|Fi^v}=0{{ #!κH$ںgϞta L;_뮻juOOB&:XLrtp8pB`%Y;X F+D|P(Ζ+2Z $2X**յ\P_b0E5`4C&f 6Gp( D#Ѩ茵wtuCwƫtiiߞmݖKٲeˤI ~=>}Dee _|8E.`0}ݐ /Y`%b$5jԨQu`ճ \%T(z\*TTQUYZQdWՔUUT=Ԫ|mdh:jz>_jjikmwktڔ,np:)3a9rhWDFFFFFF.9,d6*XXT\Z$RLDB> gJ` s w~tiv(2D 5:sf8lvq-HK3fުjRB US[SQYQU]Qn=[][Snj`yzNŨaֲN;{"h{ڶOTY` =\E9G %RBQJ2o)P TwNaK2L.+Z,5jZT:-^(jR!Sȁ똌Q[\^~BmlJRFE E4KќyqdI#K׿//?ΝSMA(7[Z[Կ"DFFFFFFF=XuP(;:bXOo㎶tvuut`tt{|^b-0.jj^(R?CdË ǵhk>7|nxx/LS_zktmQF5jWNdZZfvbmjuu=P$ f Uskaӛf{\ErgC`0+A0X["ஆ`}YVQfh4y>/ z`!######_[=֖( 6+spzBKKsKlD@k{[9 "ASYjLzRYS؜v"S)(DPaW6a{Kh.oz޴%k37<, !4':ɓO&F9ѣG\n|@Ax+ыJɤ๏Y;X555?֭[:̘1u}R+ `!N&쐑KN,pW^j-&I=2YݡPvL+_??ݾ=gC`.0XNέgx lŮ 3guMwv0%%%$&iΝPӧO99s&!<31mڴH$Z*[3FOhdpf=Dnn.ԩS$x2߾}$PY򈏤=́Tp dή]F8湏W@{#ק-ZGœlJ^ YhE7722222):XRCe@vy\bmhommi:cC,i% o;wnFǚ;s?@ 8x#e|)|!_h :H,Bs0I$"ja2tKJ$3w\~?Fo B8j˖-!+` !/p|%K \w҂jZN Q9s֯_Ӣٳ;Z3-^x+ؽ{ܹs;XL&x `A p@8jK."5kֆ `]("#(oѢEht*1 px5'&@իW g l $'5w(>)\.$&vQFuStx3E|#@\2uho#` 9|YLe 3]mmι>RF'I:XT7 TUEU1ln&6K6KdFVׇ)D a ު ުܢjU..@ @i<_7ILG247ۿg7v}kl=?~}F/ jZ. KpSƎAN]4-S5߬|WҸI txWEFFFFFFF'`?ӫ-a3\0[tQ(]Ҝ!f[ʶ U$U;p#]LiCޚ!kh΀ő Q8C3 nS Kd05 SF2]]]Pu^&T}t+ @ 5d,0X,ŲJszm˙҅4q8MI5)Vjھ8+[3-i ʁHS*=>2$tI8]N!8 nlO:x83aK^nD^.y>1 fffN:gYzu H.xw}7 roooZZIRoO2巿mnnྑ/hE%Nb:4/MO]Xid4y 5.)JKKӈD2 Qj} CqSEuyt^SZy<,W:әpXaѳ4`^;X9ov0L8rx:nDwy' Ꞟ0X65g!u@FFFFFFNd:ՍzWۓi@06K"B`:)⨸J;U4k֪za+3h'+$";ǬÍ7޸iӦ~:o<[[[̙sT|',a 0[w<㎽{ǎ@g7߼qF"5Ճo&zElvz衇~򓟌85k]{{C\.!OFFr)rχӁn&IA@ Z233~ɯèQF5d:E)_ZnJL&Ky,?HfQ!oAp`ܦ4LW:ya9kiVkUiN#ܘvVVtF'Iv(((,iP(Ns̙`>H&t[ofO裏nnZ d$o -o$v[?bFyaȰ|r( 1x fZuA~33.\& ]mb~RRD }e˖?(-- ,4u@FFFFFF$N=jVlI!tCMcF-~x3 ^S|/&ǀ߅\LWÙQȨS MfT6fTZ. 35M8k(R]F:@yC{cI$qP(LϚ5駟&zD~*??ϒJ:Ï~#Jr؃U#@rwgJjj Fj6PJ݃ eKU((?P({ O|oO #Wpqqw =㮃u6O|޽{`}[ gɟ|Iqq-[L؃p s62@ 0 ">Dѐ8+BRYqϞ=͛IQי EP(c_y'xO.CӁ`ZJrƬ5jԨQF=N`\>_$*$LjPų5j ȥN焗jq\B0KzX+,QtR3jwBHsWs+v77hFwƮ? O6 b^īFw~??>:x,*,,$V`mdd;=I+W,;Ggy睋/]-)洺F3?$+u@FFFFFF$Nkzx|@( JQJZ7BVPd RcjB4p \^IY> #m tvwR/;{zA~]ݽ}F)Jv ####+++ٳ\HIIEGo`2w߈0{K̜J&ĞPE;)S:y…t+Ɋ#%3<.o|x]8䦛nli s̹;`X,hҤIFqt5k֐2^͚5 2nmm%9u@FFFFFF$NbX .' BLv \0MUu5Lg%RT! ̆Z/*4ͭ8)r7,6k9CH%FnwGg 48,g~iqSI|-[@LF^^)WP_L\Ԃ m2.%Ht҇~ރ5ފI`/\r%L`* ŻYr ws! OȿuVR=Cs7x {==u"#####_C`0XvybD&//JEEeE=^* "'UTUV1Uu5eU%er+*_8`uۭ.i5-ZsðmZZaD[Z.efxF;::g$a.6m.WP'-OJ~bT8޵ Ðnw]u@FFFFFFN,&`2X l|P,,*.-N EBLZ^Q& "|!EՌZVŅ;?:dzTfɍRA" hX6isF3jnmoh5`!O fpQPhڵ&MzU`TTVTUWc5rOVԳuXl`1jg+*8#1;D|!`AiWQHrTiRhj ` G#jz,䉰Bu~G^ U!#####_OLuD H2L.+Z,5jZT:-^(jR!Sȁ똌Q[\^~Bm?Ea97V$uF5jԨQ_U:Ez4e{[k[+,X=`юX2^Nljn°:lzlokU|2XL~7k{K/:;;* &O!р,ddddddkڃ50C.DῶVYΘ cZZ[` Z"-H( jVcҋ2b55sa4QXn v cE%qy|^(R@ 5,L 9L٬֖XGyCP _n-&_K[ @8 6iz\*Q9">][hpr|GAyk6?8\{{{aq,z~R,ddddddkSz}>U>dt8nq;.k4lvnZd*e2H9,;l2w) ޥM֛|-}}}Cm%gKZj:lNS"\{mݺݾ}P(DtuWC ;oDQF):XrjVpG"d :c&) 7fY,Xw'L֖h[K]pϯw/c^eLqkK?uwuW2ZLdk>쳗tTvv6/**TʯF?D/SR*H8 "!xctuuut4G2?h 4}`4S<7|[sBﰃ0ssj R`UWTWj[.dSk}}}IA;*5Z3g|$WeD ?Rws԰nWOOw3 7DB>TZ_~y9jbx|yKc677 قW*4 v݀wWMSXJw iǏ/((bb`nng777X#G/?S7G`8yd^^^---رc#=ѣL에u+++!N"fօN>`l6:@ x#HY]] #\UU;h4|>fZ$M|9BB2ck $ xg`%}"I>g|W ?5|~j 1@g V( xqٜvFRcB< .\~=,M?qLEW^ /GB 2^yC_ӌ*$9s6l.ė6m|$ke5cmqƌMMMɁTvzwA7QxOI&@  z0,pW^j-&I=2YݡPvL+_??ݾ=gC`.0XNέgx lŮ 3gu `W'Tfb,` }4//9t̙3!}8܏>MnR|#ٳd,]4;;4s)?xK/֝>}ӧI闐'q<)HOC"sH$>s}qH|Z, LC\p2\piV/..&!'2~']d Yhĥ/PF5:EK&y v{.`2X-mXg,s(9[DAs ڝ;s?@ 8x#e|)|!_h :H,R wfD(h4[&. ^vr~ܹsJX G-^xCot8)StT$N6bx %iKi!Ødm۶Yf(Ȅ5U8ؚ#q̟?(pykkkO'7Oj"D&"qyHK &Ua)dmr菶D,ZjS /&9tG}ٱ=Ů8\IDbD*ʕrF% bpGKC. AzOx xP('޽"nT*?''駟޴i_nÃ;Rt?cy<^9Nbdi0 ;)s܃ nCz~P={qbAAEN$O.}oZlو&zOd,22222q@(p0\nC 6]XXPXTH ӧO BtN< ϟ̬g:~luyymeyMeiES/JBTjTBHk :QOJX,pGt:ljx/I ' OEt c9jkkv>ߝ qMu+o(O3^DHKq\_ꫯ>|xڴi$rYVkbY8'V5S~"d<؃`(dw8n[ WU-/+-?[VYwJ,4ڬd-솊%%%-r}eF!s'aXcv򺺺Hy6iT0NE@yH5k֐ U+W|ׇr O\} = jƍtmaܹ䣁f2F#\)SqpK/D>ڒC?~N`W 9!1XɎXhD1F5j)uϷڬ0lv,˩i͍fb,\4ZaYkk>䓜9[ضm[vvǟ~\mBH"b6#S*RTi0itNCkFD*N+BoLcd}7Zp3a3m;w#<$''_j3g|Gy晃VnT呴֭1cz\rg'Djp\p) 3p0"h`\{9..!sk;7QUS~"d<%_-,`4Zf9Fm4vl (drdig7=q葽{?'? y$rT) RAW0_(w֪q n供3F"K.:7uIB1PvP[ ;zx^+X+q#x뒫qa y~Us$jH+1O^}&r.P'8F'~PF5 Pk`lv "/W* BrjjJ J ϔ-)+%BU$"dz@=,K{) o-&,d`@  ( JpNjFyrlR !H,Rk5vy^OjղlQèQZ~,υb@$((g3,&j`(=[j D5̞=["|ۅ R,>.JV4*0UZV KNK"x!Uh IRBlSM]H"ݼe̵׭]v݆uk֭Yl %֮ZfYk: @ ĵTK/_xtbʤzlñ$rBwz0|^XFKYEZ\PKJo9lشq-n9Vmڲi썛6op4X@ -0X<>j_Uj |X+HP X$|>t].3M%gKJu~Q?lWU>C;rv۰|`VrcF۰nkׯ=t;X@ 12Xh(.-&bWŝ0hHp`ͪ7ZrZn-pڬB qm!mxx~1Zsy\\T+ wTkJL,ew؉x=EP#|.a|GR Ƌ`!{mXlkf̬NԨQF5G` BT,IE20L!+0Ij@$ʥnA=`2 ee "vb$ K}a<;gGE֯%Z:sx:T @ )p8"!"|x|P|eCCŁql6EQPbAYYYg KR .@ 7G ?)z$?d@ H 5jԨQF{@  jzQF5jׇ@ ƅ=XW@ q,ddddddd+B 2222222&@ v0ъ5jԨQF7BFFFFFFFկkԨQF5jPc  3B5jԨQ;XWqjԨQFBFFFFFFFœW|1v0c  ?n̙3gxj2ߐV0ʚ:u>zjxxwRٳWXQVV77-- <ַ~%9S,[׃q 1c~&}ج!ıp›o[{__m`~('9QF5j)"7xcmmm${}꫉s@<129~8ؠ@ 83qb,!cf3>WXqm s`"#####_,oKwuu߻oSvZ&R Voܼysb|޽#&,Xw'|r81Uub0Xs̡`Ho;صkC=;tM0{aXtp~s΅a!PHPg7|svv61Xd0vPsFF?HSo~sC/BSSħO3!Tx|>߷F5jץZ:Xyy[7oyfS0 OrkRPP0ޜe˖zEl6xG}'zW9NX#}{?ɁȒ%K~1LݾpBp6fLz/J%9s&gz7AԀz7;Xpɓ\.d1cƽK!Jzf͚^08/ժh~8d8n`>;$!}52 jwL?wddddd뒯=X}eXuu2,''?~o{/ɱ9'L4&!ރo@`֬YCt4lcYbI"Ԉw /.uxgtM[nwoNfD"H F>v֬YO?4ѽgΜYrܹs}Y2S.` zTs! 8@ojZ#`>CbԾOzogV"X,(|>`jՔG۱c81sطo_b]eee /k޻;/, J}Wx yɓ'`lB\<:̡EH׬VGCRٳ"n8'|nҤI#+1i5jԨQ`'  % q,yˆxWW X,`p]~8'͛!y  ^xaڴi'8 9~.W-/98G3ŋnllLN";Xf;HiӦh4 6H*jpxpH|۶m`/W\Iw"Ȯ]^/Y6O=XlPI'@*J$q!/ Ç_xy4eB&.c޽`wȗٳgu]:OVY!`%Z'O馛֮];`ܹwq`ܼy3x4|{Yź+N !P{ws36Px`??͙3 NJ򀋂v;\$@\Y`şIP$bk [јe.[-npb|>x^O\L&BPh4`T*+3g7gϞOi~;ي~m:u~7qx , `|痿֭[o;XC}f"?ˣ! ýޛ EKxwҥ?0> -V+Cc8'`>)|Vr zB%N򀌌|e9Yk(,I[`Z՞cJׯ8mÖ'`0X,;]$fZ-.h6Ap~39200@jM ocpovU\.q0+р81kH~<8T`D@1#9 @ ĸ8Ǻ{âl龵skEأs)3o'N*,,,)))//6 @ wJTj4D_e; ]h"#######O` R[P|N-N2pGu&>`2M0]D"T J ^tz<psssSSL(X|9liX@ X&>$eLNL>j?-hZu>t5uUUU,傯LUccp݉lb{|j=DNddddddd䫊^<&%s[,<ѿ^!6mW$`JeKx@ KE=XC!Du `Rht 5:V1Yln^`]]]}}="@3LpW0 `$ 7sj ?k3͙3===cvDc sҩ.;3gΌ`qotׯ_zE5jԨ:Xfmx`v7yݱXG+5 #Hgg'yhS&鞖\.`0Ir"X ^e7oޜ9s5f#N|◈`&PʘG@ +`}}fcAn___uzf v^5D6iý*''iOz~NSnٲeժUO=CC)Sdgg[?1w͛7/_ݻ|۷xG'#Oܹ333STt _I'Niի_xb,u6+o6hT9wӦM۶m3_NbfΜ#<. $)~̂KB-Xsꫯ/}Dce\"._{5XẉF_(@ /`jӟ$vYŃO=8t188TCCCMTUUZ, aee+/裛`ҜYZZJ^I[oWWI!!M8$_FQ-rMĞ={h3tM6 _O&CK `ӧh8@7p/Ͻ-Ze8:x 9r7Moo Wa:a2+F"搜8˻D`~ͩj <,utt$ϠRGLD8jqpG͝;P(oKU,Q/^|᤻ !_?^y R:Hr-##w8KsrrX%5LIIIC 2 L' X<%ozUbxy];3@1XJfOބ폼+tǏ"=z4(SFo0~x>}0c'*2X@V uqq1{O&&=z65.'YQQ-[͙ᙗ'^xPp36oތ[]yy)Syy^}QOOoŊUR]v7XX 8\/[L:Odd$3Xhزe ƽy&4X3?={suֱ;}4\EB`pɓjǎY~*F;$0U:::g!%+XMLLЮ);%U%5JKKkРAvvv2 U|Jbz2מy"3{Ā [Ǝޠ 9ayIෆ a\!O"))o߾Fii$e.q[T%:n)r龏Tޱx{YYswl_Ž!Bbv;`K~*yvz'ܼyS=log1yD鵰-E 3?iҤI&-Y}J_D wFF'O`sss ؙF$&&&&&&&~, ///_/ܽ{) @ 4 ʕ+pWL?~&s&M4iҤII۷o!///%%E @ Vh*їsrrbccæ$&&&&&&&~ݹIJة{ݹsw޽~eC~@ C*X܊W I&M4iҤELLLLLLLܤ3X@ iP`&M4iҤI7 1111111q33X5iҤI&M4&j`73z3 &&&&&&&~Ø*XT"&&&&&&&nfnUL @hVP;^&M4iҤIn 1111111q33}*Xt4iҤI&M5U_b M4iҤI&D<Vte];IuueWwқetbbbbbbb/`5\cΖyd2;Wՙ %o3@ 1hj n _\zwյT>}vُ~Ng?e=}~CM`U=>=$Д9(nzUNe93~Nw56Ok,kլ+YTZnpYC.<_K &`Ur<_8~1~ZcS/5]_35wN-][٬ľ|---׮]kggW\\f،#sg?11}Pך}55kj"kjW-YZT(/8ܓ #KF](q]Vp5}}޽{tt %l8;[YY͝;itXpoݮ]?BMM>0`ۦMh///tӧ ĠA{=޽{ XyΝ;=2޽{gdd ͜9 [n F!***׏MLb4&lmm=lذVZ0552-Fqec2'bJZKokߺ&!M4iҤX wqEUao[3^pୟ<%|K?-yQz~һlQjGOݛ~ԃEJGw%:E,60 E-[cǎ0999p9ZZZ>x":lSX!oA`PÝ?oN::wBhꫯHF #!ML,LO?pk׮4Μ9ނYYY)))ݻwd%F9j,eq5@ lj/N.xxɩb<.ۑpo\YI=}b֩;3`bO2>Ŋip3-h`iё\rәСCh;h616O61Eb`1 3}},<;y)61FMk5?C[riҤI&rt*X++N1!ڐÎ^z#W/_>DS˦ĕN61x1rGe Ky-NQw m3X Enn.n2ߍǻ_|E;v=%+rxe>w=]j̙3̗ćP01qHT';/mmm٧xfffYYY%ob2+Xo@  4 ;/Uv?`ިC :T8pѐCECQ}L};]<~X3ZO͖ܺu 7{{wkR,'~0.wޝ7o`WbtL ֭1 [lb)))Ĥ(qKn޽_3f̸u?}:>Ea>Ď=OZ,KJJ:Z2#ҤI&Mo`=?\0|=L'B 97Ա ru@ ՠ!CY! ;?}\Fknu\g{G}_Xd2?lxbN62 ܹs+`tS JKKGZ Iarrrڷo z+XբdzLܳgOX%^m۶h7񁈈Bġ8vF k`ML޷:@ `o <>tzg.<\4)8'6l6yaϾ#?AUݏ>pP{4uQ0z_thCwST;մE­nݾ(,khiYc3)|!-A[eeePXXXqZV:=rWDW#jzձ=e}P*\+D_C^(2Xg,[G c8DXEh[e$V"AYe_hwyMGvvt k+>9 U7~ϸ #[T;csPr`iklXd-ݾctcD2\s^d@ nhS4=a"Wa(`+P uCZvGt,¿vv6שٝʹvln; Ӵjlw`ذ; pCa=5Y7XI4iҤI&rRݻC -w [ 9l}pA-BcڶGU\{_k?l緘4hlsQ_ogbF`pQ]ݡ2r-B@ Z%4]ܻ+D}w,P_~o{rд8:-J8 ?/SsZx_0ti,0ܧվUEk~aH]!0X*9jg!knI&M4i-S+UO,f,0ܣ&>V65D:5[~ -'%_?`UҽkVy.}]L|0Xئz=aC:-5[ s/VS@ z`1uEyZ˞9[uOpeDOIw뷲l|:̼}N`MEGGĝs}&Bg K TS.wwMAus VD##]kbbr ꯘ'?_O<)&M4i-A+U:jnn⫺[}eН󢍽Tw"{{zN),TQiNVyX41,S?7lub7mjEK`}P*\,@CJ :" ` ..YR)FIIIqqAD+ @xS;SS*ƞ0X=.{ /صGVN_q9yvE_~y>ѧu%$$wK$6JAK$e.@ g1` 4 P7U3MmEWKǍɫWJ;11111qe*Xaf&ު_=Tw}vlo>ԅX0XԷ:hoo66ZAwhhlRv+l(`ݽ{"88Ibvۛ5ۏ5v8 ʠO>E$[ZZՔK@رcIdnT $5REvR5te଺¼>EUΝ3XsD,,'+<`muR3pmh?zfFV{,UZB; G߽{&%%|Mtd4>xn0|̙L_v o?^zD\dɒ˗?y2+X2朝-޳q,~]o>q}*3X }fF1-OR|ET"&&&&~c VuN t>vVAIM$^;U,v vx,iVGz `Υ雎lqThwkm-v0X}s}yaƌ =O2[f+**VXQ-UW:z(VpaTTT-[&}[l ˬ`ɛ^$ħ'o3g\~=laE0^رcǜ9sXz+Xv `$6Z$@ )`quUJRUU%=~ULTT̓ԸG9z-1|^MY~՞ ]48nqR쨺>֓-psyZ])\}.XUogiӦ銰m۶'Oųgφ-E?>)YbhܺuΝ;ٙ-yQFiii 4^f |evzOJJ <KeggWЇB 'O`?o߾To iذapN3lړX[nMW$ '@,bbbb7[A*97ܧwM}6WjT7hlhș ٫E֪ZlXetii)닷Р<ҚՐt-&þ?^b5bR}ACׅH/ᮘ൒9k`5oD4iҤI(dKrݲ|gMZƮmw&B1cD{ocFf~}V]m/4ģ1111111/` ѵuKK 593wf9s焝<'YxO;co\A [x8~ؠ%7rUc@4iҤI&t#+XYV :_c}6myׅˍ[[f)tRcv6Z^c|}KT]MVR튘 VM;CcQ3}6~gCv8cL(I#<{hOLtsG-aTzĕaǷ5yW#gvZr4?3I7SrUZ.7#7 S*)캮cn tǚ0⫵ی?u`&,_>ckTsL|ҨqI&M4iҤ[n >|&n{c09GT=j+X'Ŭu_/2tG;z." {C@LLLLLLLܲ`UUW9Gup{TuFzUljumvyջTWZ]j{Փ M`>*ئ-N*ΪU6Pb1{ȁ4ޥo-hFwy@LLLLLLL܌ V5{hkv~KXb3bx /rb exo¸R_Z'OO)LeT"]Xo7ELLLLLLLL,\&M4iҤI&DM,bbbbbbbfgH&M4iҤI7QS,@ B*Xt4iҤI&Mu+W7҈ȧh EAAAAAAAA E3, f2Xd((((((((9`QPPPPPPP4sh EAAAAAAAA/0Xycm;ma6>=64E}+_- `NL.._~C_]Z6?$}+|i=_FSPPPPPP} zEsL$f_׹]jxj{fmbV>453˚=FAAAAAAђy !Ѽ{bZj\L̡C58޼8:0|)lP|n# V9_~cպMMΪm+QPPPPPPh5.ٳg?ްQ0lL?3~#4YN?7'uk5vn_[S~3 zH o}2v^/z?6Z !#-*/ԂLAAAAAAђ@qZ-BHB_;{~z_ou+eDa&-5c._:tz&B=4u;N_)"ÏOf1>W$Q=`|vjϿj)mQK>Wߨ|9X|/5喠!rfv۾~O.'>?1~mlqٺ$27}H&M4i ,kWn~_ZPZp79{n?f)bt= 0U1Nϻ[}P8F=, qIc1sA"FFr83t3j|vn.@;~[i 将K̳{~}[Af M5XsǛ8&(sтM$W[uZ?İpZ=cf;G/VjqGtсf*>IYψ0sZ-c^{otꂗߚn,~2.DS`N` \c!?vnɍj`>:moj5"㲎,с-LUl:X-`qkOc'Y.гe8+,}:w[RI9ÜQAz|fW:Ľ"M4iҤIotS+X*>WQZg)'3 &}*IM{_xxˇQ"%2X=c?[U` V/wYkg`J~i/VĶ}-:lOj'%/3k k.{dՠ%i5OسU6'Ĩ\x[֭dƅg `wT}cg_tw=d+t}[S_l\~cۼ.;S>nYwCx뻽;N_/t)>j`Χ_t92v <{$2gsv:-&M4iҤM`lu ֔ ҁ n|ϝ>!0gM6;NDغ 5۴%0=샿 ]4D51WCgid|!ιݓ=ACtC@ux4fء.֑?2%VNsadVdhQ{?wgKomSӧUϟW=Qv<},{/l찳9Hp/^n J-(=Jru5HْΣzhD^xG-YLϾ yP@ļ>'7 `v;}Fx(&1111111qӹ,us YX-T:PPPPPPPPh`+;RN8TڴZ3d3X!"UWl1©3Uuyzlfm{Q} 5 SD[  t}ImU` E6UL#\fU`9  2] )P0ʋ/8+M{_0)] lrmp~)}4_11111nՀṽ]YɟiP =6r$fzrEaSDU !G^>.p;Wf2+XB 9n0.2W0m8.Q zX J8m!Ait Wύr\]Yk.Yj Xgyss#=QwJohĞHp}{l$]+o㇭\mi$ZWFbbbb7$|Uf,;{2?}| [rrr? @Φ$KV)xWaꩩU @/Ov/ Nz+X,X;p8Hch谬Q`WDud{5dr3=(?䯚` D.5`+96OϹeW"YEPS`s@n6 Ny m$&&&&~c!,XЬn>j.@aĭh(stE+Xܩ)ciiignjp`{)nnp]b&oο٥C;u pV.*Xį  Z}[#9`M;cnUeutcIv?lwW:ՠ94] S")/pj} D6 ,ɘ[%i^ʬEd8!]qKc(XmRl {ޕĜC3_)5`oWSdUzW~H&M4i,a9jz%t/Y}>k̓%¥kww~fwջky%µ=]O"OkW ⹳n{Å>+UJ?3^C2Q L[Zd3[HLLLLLJ,AC=ZDnrjA.&ض3.OӴݭWKA''SqD5~?"?CػppP47q 1bP vq wdpu T4iҤIn8N+׃OLyq/ s^S%&&&&&&&nܘ3X2tx3XO*CTrE/Sꡙa,ҤI&M4閭es+=:-*^4²RELLLLLLw&y*;?6[#VG%?iҤI&M룛+xU}wZ#~g0Xn ]V}g{D=(},HAAAAAAAf`(P➼}C8GbbbbbbbWTbǾ0HAAAAAAAwf`3n UEAAAAAAAQk"M4iҤI&tM, fV-&M4iҤI*Xd((((((((9Z]%@ 4+Z=}YH&M4iҤI7]zF @hV"@hf"@hf"@hf"@hf"@hfz94iҤI&Mt5U@ ^/V]]]YY'"@?Cj6Z%M4iҤIV^+U{nQQQAAA^^^_r{)37@ 3X())IKKKNN>?1kמ>}x-`ݾ}v~~~>ȑ#qqq ggg61k bcc[`ڿhb@ r(:UUUu/ quuήqㆾ~޽ ~ׯ}D蔔sN8}nmoo ŋ]`);wߟ ٶmE0[ J\ppphժU^^x3:wઇ"4nDUUU5553 ?g/ơ)#%C,8$xÇX` }Yfsڴi:usk֭ĉٻz葼 ͋ZO?[8|p]Lt}Q:3%2+ߗwٱc߂?lw^ `o9s|ɓ'?{T/c$2+ &&&&&~YQ sզJ <~ ϱm6ƽ{Λ7i+W9O6k֬w}uְ 'ODҦM>}9f*8GGǢ"6… ~v߿3c #O޽Y{Tq/b׮]WA)Stޝu!?ϟ?3o6**ӧOիW+xzrK0"v;O0BzbX ,hjj@ TorKСC< ;}ң`3g(`]|@y}`:v3ޅWꫯ'`l*++:t@V rrrUpi/_̴̝:u:~8.6lX׮]Y{۶m x>/V922IIIaW;VWWzҥ0ŋfև?&O`1юᴵYD 2nܸg/WkŊ~hh(2cpZpìx*2mݺuX#̽;11111qKVbp67aaa y߾}0uA Wp-{{{%l>}4_9O܌1%y}GL# 4?c;wpЬ͛fkkNR7nhӦ v_x6~n̈ܰaeeeigg3%oN@o.A*KTZZO bpl!@||I&M4U?~ zG111YYY'OC ~Ņ,hYpss[0UDN=IpÆA@ y%oÊ#-?ȈJ??իWϚ5kȐ!|D  /A`ḤK.=Do2..'%%IgP\)/3{wڵT;vvݻ91c`} nmuI\Tرp&L gW)S*,,D Y11111|&$$$R&pf${qV]CnPPХK\2srr0ca &y  "d7xܩS'++`.QIU090___֓'''K9ވHS^fŋ.L,Դi sN Ǐׯ|I '},ybSؕg3@ Tor1)#Gn#555>> :000HدPs]vIn޼ FZ4~lDXzE2rȾ}2-]bX:"kggXk| D;l0ɒTb>n`Dltǎo <Ϛ5M6B hݺ5vӥK~i=GZ///~۷v '=,OUQQU|Ux  \΁D8'n̰ ߸qwhpFFL_ß!\lʉ'Μ9O$0jX0j.//n * yFEEjc&ݻn>g ;ƍ![n|kǎfž4dXl#';S5eXdCCC6'~pآy}gi &Mڵ+V[j-~K|_"3.DfI[cس/#s۶mao'6|616[^<{%gk̘1ܹs, ;iҤI&bu,f 7EHLL[C `yzz`BCCu`焛wjj* Lɓȃ[ku ѓ,Xo 矷fˋW^ F`i!,}xU{V^<4h6ˀ5 `7ء.KfoΝ;idVdf"v֯_Ϸ`??'k=nѢE*YR..6ŋ}` {-aor"""ߟqʕrgD#CWҥԃ2KG IܒH6nضm[x"&&&&&KlN11111W`0XRk/]0p#B*g {xxegg޹shb*--åϱApeee2z*X70IpH`SNݼypB0[h1:{ɓ';f/ Dggg$ȸ|2bII ,+;#w3""֊ PbE߰o$6eeeݾ}~Ν;0Fwޅap8OX1bOD2\{td`0;;} 1$$`Ǐ`"&&&&&&&V`]`9::\t= 6˙)))ʞ>( +XHžԐ7v\~մR2,`"&&&&&&&V {-aaE`\PPq .DFF]of4.D¢SN988XYY9990+vqqq,y$M4iҤInQ  RPBD:|0 Vnnnvv6۷YV5[:gΜ9rHyyyFTRtFr`^\,f_;'!؃dy)vd%Bz`$$$(SYYA.\+SN1mjj%XXXcn {Ҹ;KLLLLz  nH,a~ GИtylhhODDD>}ߟ%xqsׯ_g}.?== }|| Sb- ^B9_u%Tw&ގ-ٳgoݺņf-2WЇy&Ј sΜ9Csbb"ˀ}۳ >4K V*odU(%jl]甾o/`1kܶq+4A`W!111쐻y> lPhѢ͛7ftĉcƌٹs'OpAM6ADN25557n8m4eqIyz4`~LMMqvrr2?Y"!?Vw1uFB%@CTׯS\kٲe˚5k*v64<Z"##%V;c חcllbŊCFB gdd _mƍ~ `ffڵk…#F9͔G'h9|0Vc~hWvZ9W{"Pv$}I&M TopwyV7f'W䝈g 7\kGc2Ukkk8$g9@pOUpuueMnnn,y`֎;0XC<}2 И^;v pSNa%KXBz>.\RR %SKhBr$U RRR4huƍ`I-pɬY>_"oh,=ʯBĔHZ@ mQO+::.e<)._F7GGG푐*+ț!c 8浵+XǏGxxNv?.//g-RP8pm'O\|ɓ'l<,T4s>Xt;挗III VWhaak̳ zc|6+`ITIW~Dɿ@Xĵ[;&%!x&[[[i2A >=LK ...W5b,Va'x%7X^2,dCb톆2NHH^ʬ`)_!dVd`Cvv6 ˬ .}U$&&>U`7uEؾ};+P=9 ` _`>97TG{+U~2'_Mz `"*}㫘˗/&APQқth* E " U( Y{]TLvn?yg|sgΝ{}λRXXޙ&ELe5ØaLnIiMՅl0')%--- ;:Vtqq4f7ELFLtWZwD ?4>o,bf.:wm|ɓV PLHH@z}eeek!_R2AQ|z]]$M~~~QQQgQYY)1Cqq1ZM\_ lmmھfQRSSwgno?R*(((,,tPM!LyygLUlp3䯞X?ƾyڵk=E`͟L >I߱0iҡO ~ЅE+**[x`a4774(+..l0ߘUB ~Ѕmf ,9 `x; Xxw}3ΚAAAAAAARmT]JTi\ksژhCM窐 kh$“"jv"<9 np难 h|^j1{Uŝ }AAAAAAARUk`` 47ؽfU7i_Vۯ.ER_L[c1WeG![ibG ؽyX:PN@}RQ;$p0!-]1۵qa+,,l1~p'OD>==zjf0)) PoN4arr2z‚1O/YU*JE՘n^qc=֕&eٓ<ڧ%9+3?;z0@V@k=w][l=Lon9+xRQ]&?j>܁ZAQRq;uX\Uxn g8-wX,rfBXp LHHXpyKKKggӂ BCC1X<\B~˖-k֬G?z WUUe``(--E\q5{lEEĝTyyyh$6y~~~(~㏽=g?TB{{˲06ظb/*sv: N+9Ӗܛ5=;0f8;r(+x0ͷ?rg٧>{v_p^[;|l5@ IU Hl:'/((j7zѻ̰Naaa8+V':]@.''w}gbb%z 4߸q#M,]]]֭knnnjj4y`>}GxE  JqK8|쾕ZOoVp}(#}aoVWIŒ6}Z3v:uK7fY)fva- *ϖۖq:ex7èGtq?iK`ծ󭑶.8V豭cD *z+dz_R7س}u7vMoOa›v*/5ݴb'*K X;[z~Ӯ6l]ؙ`7,_zvгiPG7Qs|g̹[gc[Bn_ϸ~!F XhpWQbuan'pVtoL[Ғ6_0-w^7A;Qu[֠C]G#,P=s;ҢƁz?k{ڃŞ}C =**dI!OY9P_ eU 0x5ѫoSc^} m{id: ޑy~O3}%n&9޼{2INK}m:Cu늴쎲9gO }/w답#<kvJa[<7_a3:S'W\vm1_gffeS?X>?<'9ID7ƶ/l_]omSUQ͸0g'&:ORIU |IY|-c@m>O5ZBӭ@˩3 @DEE DDDTVV<,.._ݻw?ٌDі3.13Wf=XF,46oXɴLqav*( &;PrTsŞn#[B2sw-/)- :X7F}M .?c߁4Z_>(((((Wi+XVh0,ʼ\eRY:*ƥ藞RKp2̵;-*/aaeDžO? uj&<7VdlEXE֫:Ȼs5Խ.IyS»/irHop,^byMQTxNND|||Tddd[[[JJիW5dCCC---*zF=~~~MC.t"TJAٳhB4a@@ӧOɝh|KK dddÉ0TSo ADəkpȇhWhhhSSɓ'3((LJJA>>OOOԏR3gP @Y 8v2(aL3,,G@H{6.G EpF^. Wu:| Tj۶m[Ca܏Ή'8͛7^!.ԯ۷o :uLRR˗M.gccAeeeeEEE }+O\T6Px^[^SbHN'RꏍEǘ'Ǐ1'JʉsVWWNLMXsѻ;zSGW߱czl=X-׀$O52evkSэÊI]766b0!`N{{{(`---<444LكCl0֏ ۷Q"_"b`4z\ 'NE{郧H _D2@RPiju[eWSoXe羺G3ԮR7.߽>(eXy֫hgVw8f]|J(=8ieXS1W5?k+}4MqhDĘcY(QYQ1c"O⹦['aJ^ÃyrJIIAc;[8:>#CN!9`P:{չs԰5i=/=q l"ڤ~L+99 XNq9u+X#!ag^W{xmGC]:-;#O ߻BgQyS17:Wh#k'D6I[l<)j?=|R$xʰ~C޷3IM^^^tyrBh*M,.`aoi&,XݎLii)$o/))#L>8x5ˑg@pss;Pp_[[ XϟVg$'?'DK-CG_M-PߥxLqsm'8(r-u7kL:Ex:VnӍUZoZ ^}tU^HRLs׵:k^aqtZx,iE tgO XCC055ݳg֏+*6k۶m䀥PKK.<ܹ#,,{Ah%hZޯ75`rIѣȠi=M?]ÇRvv67`;фh^^^pQ`#'> Xux<>x:^᠗f?),wXV/ZFɸ?`(H:Ji"뮛7l|R@۾“ђ79Ƿ^zɳRbppo`P.4D:>iFk̴ XRĘ.ʰ\pP=)tt Ԁŋ[W+4yxii2: 0t"ROOOGA`;]NNMg3դu1IIItGtw=1`=}] @Y033@~G+$$F3MgIf? n{5+9^=9C }9 a455MCI}ϛ>GOkMM˗/O3[kƾa6:x%r?5,27WP\"b eC(sլ3[w5튰 9pmwvNj|ny)ӖZj [_沭ˬ>`sѦ/oXVXԔ_03" gYq"o"tLZS/} S>VQQ+a%F%BAA9_B?Vztrrf 1kVQQ.[,.$B(`ۣa7A-!!iwS|{cNVϾ~k{qD$;-l<_Mq>Uּk^Q`:(tT@y+ohh(,,,''gkku,55ƹnB7haa1444= tǚﯹvٵe^Gn7ce] JTZw28ƱZ7y6'5# 6~\'lcG.ů[ZKBDRBI>̳/ƝIؗ63qm4Xi,x֛k{z/1 f4[PS`cere<">9d+<$s *UkVP#>i&J.+̟ڴF; d |0qq !;'GN{2LcՍ֣&~4VSnXjʼ \kq;ķz?=#[fԔer /G*g]u%n)ŞN3.<e}#f e0JPR78l=OZkOѡ2Zt2=˔RKR1,ź*>kJ4|hZq} ڕ!׬Ű. 雙sX6=`/)-}Ζޝj JtTKM6,;Ag°\jŞO?9V1=odvZbk1Wo V1WXDy/ٕ陓3sΠt_\1x¸ո'~B UG~U1r1cyJz+q#:üü[F^)H^%?L/i!hnn. ))yz~3jo*S>j*SOUr{ȚJz稤騄 AhDDXHo_{Wc[CMUn?cҮ,VUWWGKKO?=y{>NAAAAAAAA?O?m(a 2iԸWoIm 5=cfodwz-ԎQw`Xx될 ~n>6n|F b8[uMz٬MSSdbbRQQ` &{tzggt9$_?xg]ABJb2;Ff'j&Q)Uh%JVB|<}\UF b vln4>BGwY[[Ot钁Qڻw/pȟ>}<ё@JKFFFH;wLigg'((^㓒:!++kYY6`bb~7"""ճz,cL?1w%_E ވ7z-aJ F͘čb(W?$G+~~-}j=lr]ҕx;pz-t-k8[?r|яsrBo߾]UUu4󎽴xbggw]vQQQ%$$۶mCI MNlٲԒQQQǽ{SNaΝ;^^^H{{{ojjB`(a(i͇ 5c,Ҡ>00ߖa~aaaAm LhڃV| W*=Jl],ۙ%ژZ[H銻~%K=ƺW3v>F^ TUU>݀EXxɓ'yyԑhd||x߇ )[;V{S㫒PHP*vEyS=Z8מC{Si5)bEDDHXߟ,+XěmmUPPX@bɒ%ׯ_$UonnfLLL_w K[=g;xvutog`n ,,,ˊ]Xg{KGá}j~-o{+y7^36XWCh#3?Cor]pQCއ zs)zϐ3<:'$fQbӧOQ0y 3|)x?[>fG2M߳pZ22 1 unYHg{ߛц7g+Pm[oFoż־J=L+W~ g᷃ o,{7'g!j9}pق 0͐Z;[O>:~ }]v0`_`kZ<-x[ru?5oz ž։պEЌ16|_9OzFB{ ,/gQ_Eo6EO mAo!ǖƪk:r_)O!߉njiJ d/OїEսtu[МaVZuYɞ&fwnߓ}ߝƏ4vKJ%y:LU!}7zw^mnnaXo6>>>PۛO{EY vf-\ОȢhM=;3S, ۑd+hgcR3ٕ4}G'gֿ\ee6g^K) zdQj(zrʶRp=YPz2Q1`eVu8`nKjg`z`GĤ붑qvK*(ZV#ЅG͟dd;e|%=Hz9>d\{rCѪ95jM)-)dXbK/Z0J R0R(J8JtR-w~vA8ŗ "u(W _ry.TʰP}dޤ%ZR,hA-yAs2)(qũF_q-;u'bkkS9r 2S ҉T~jZڨj8x֥g|\)/T:+9WYb>~"%ér.T98p+{eWirHoJ8bjNµ$-hNZДCZ"X\qW{sg/ JkTռsS5ݛ[ZM up7,-/:U1Vy8N=8f:gӉ{ZW#KNjڒqwpMwqr]bBZWwWk+U$6 ɝeee~~~Ψֻw^r%++ WѰȁN^TT&~g&ޞzI5Lԉ^FGG_UU5T3;9`OZ,0GE @^zE>Fn Q VEM;XM'D];X]}#)\9|w+$֫O屟eyfjyEԟ\E+bQ@KWwP"f(`凯>44ɓbPll,//cǐ">tuuك}$,,>|'77<϶mێ?. 6 C=tR111S2nܸyl*tiTwZ͏&?йo8}4#))Y[xVrpͼqCY#5jf j*ו5+z{dTC?u Y,o>hoQjyw ~3kCAU"1]yU(jqU-gQ Q8sLOO#ׯ_:H$((ڊ|vv6z x"޳{n++awssSPP@]-& Gdb|2?'c&Axxxg<"ܛ7obcLMMwkjֽ40k jկ+mG P U"/ i8ƭ8tIRPWl*z+4P0Ƕ; XUxU/YX˿EZtEmmmX'MMMyyy3tXUUE ?w.K?4?޽{;vٳO!_PPTX?ZZZ% d1>"']+>>{k%%%a#<*[WH'3|+fi`? ʝ(Y+R ^2 WePRЮ'+yi9)ywiYWIigQB΋\(85b)jqgH+nmd҆& aYSSuV^^^}Ф*0RN@@okk,--=[丹>X<^+rSǐ7OI0itٳgQPľaKT}_u̴P "'9O)+j49w)PB Y5 gqҺn-w)Z? -ZqEwGg}5fI$f9t`=h1ol7>xK: 2,LX/S&wuDa ]ÿOW(ZI;K9KH^ }/%M ZцDR"ą-g)TU`{Fg^(((((((<ԏT0l*I1WTG .w@MPxUı&uI\̥T\Sf_i|'qAiHBjAӽEKfmW0X yĉ] &w%6.ɸ\FJL5g1KqHhO5'V5mAǃ/8ogőGG&q*rbxwQU )X.΢J^w?/(4$ XɸdRB=)d{μoJ. n4bCNE>ϏFX,ŕ&e]؏N!~u8'6ŋ|~y ʮWNH}zs5 ==MDi3gtŋi"""tt4rppP 믿G˅𷅶kr\A5+:yٕJmSBg4 'WP.kkk>,JE^c5-U`ͯQ^ߺI.n2X `5(c)ydw}cNN|virssz/{رSGEEEQ3 {W;X<_ɦk[jP{wMN0`]]ݫW1{dӕE񠠠^z%&&RM!Y -v t,"""ϟ:v̙H'$$hw~#h`)orowX_l:&C}vq[7[MMձcǴϦhkkk`0o*X_Ӡ=_ױ>Ij#Wip8.pKοACKEejz-U%\34jQmfIJJڰa|.~Ս7~W\~ѣ9tQ]to۶"gϞ=s w>}iZMyLÿSN)gns.\Xnݾ}JKK٣ܟVw߱P޽{%'zRΝ;t,ii4ٟ_d=Q峦!,,UyZ|/-*X:woEKյj`ϟ`0 ? k`Eֶrڅ#95%_}Z}*Gc;wDyM2.##NB9sf̘ABCsycСǏ'lٲ0O4It;JXB}ir .:u@ x"7QfΜITd\X6WHصkǣ$ӧO4h g ʝnݺ*j6mS榱*OK\^"*HRRRT};P{Cejz;uyNj֨=\ZZJwV2%,BaѢEeeete}֮]+jkkw˖-,Nքnw!}y:tm%%%c<''{|dd$b+Vp5w}wܹ5o׬YIZ ]]]?_n ر~Kj %g%G8t,NsrrNևF )Noeqrf+Xp'!!|ҡCT} J,Uתo`dz):ǀ`0]8Zrd?V\\*}LDz>Q|64|ESkE{`-Q=3"dddt,Y4&:%g@5(Ӝ9sOXXذaø̘1Ǐohjt'M8B&XхGaXd>sr]4)Mt8>͡C2M&Dlld}H`qt\KsKU6ٳguc9,? ٨T]+: n lYf)*44444j ,w=%߾a⸢}_ST1ɓ'醪8<<ܞ*3Wb݀`)i_%o7СCR\ۇ'jrřVG\rŊd>Z72X f2ӡsαp׍:uJ9q,9irt^|H${.ד%̝;UZJMM*U u Z!%%%8Wb]|-K:#id ,KS, VϹUy^OlEz6(T]+6ygsWBCCCCC?\"(xT,-״/J=W7JadtYY5U5Prn|uyСgϦ;+y 6P|SL(++3f̄ : 8%5k9"/^Lnfڴil tѣRtܸqg*XVHAQdԨQEqZԩSYI~I*X` `c=<<̙CA4)WBΕi_EjUU *Pյj(;9' `p{&?7*hV%A92WŤʵFw}2%">OSƍ!!!B<Lj#rssvtkvyRNNXU:y$ R͝;@VبPr6d;XQrRgXL(""B{G޼yN[@NNC&|5k ,܏<An,IcߠSuZ;NMkU"ή~HMx#D2=EIʑC㲲KT8ŕLZ_gyZ/\ ,kރ5K=Ru}ïMA=aTWUU"ʕ+s|}}ΝyZm_KOad!M~NLLy~ >|T*daaaŝ`0 kbL㫿Cm8NyW;)O `0UױR~F4d(!`0U8>[٬e[!Jð֊jWw`0vW8ήW~wrs /ylfBEX͈/6dodx `0 wZ~ {ۆEi6Q0 ? +X c+ TaFբه&V?/4444444tOZR檺/*Ǘ/s;]B 8#]S[dov`0 h44444444ꎬ``0 `T`0 ; 5*X`0 ؃@ `0,Fbn u@{`0 ; =XQ`t<^Q``t0`:Ro7 @gCG􌔔W^Ir9ʕ9'99Ԍ􌲲 VmmmzZ䫗ȼY_PZ\\Q^VUY^]UQSUQUQVQVZR| /?+#JĄKiP/.>W744\KIMJHyύ>x؄_/56TWee&^K$OhhhhhhhΦu؄Y7+|TC]MFZ#GXaaY3P#A>Jꪩu!ecnݺЈ[:z˗~|5ʲK I4O.M222z뭷;y=&Bͬu5U qo~gOrQ/{zOy{o"~/?/GQ>|ښ̴ 1~6ٳ'5k֬_^t; x!0ꗟϙ=3j^7{wַg~{߷>q^={޽_:ݺ%曽f͜Sr/5Uf眏@N0صk׻w8e0`@kԨQCIII9r\`ugН_U[[{|LQAa}]Ç?'ŋv/ͮv۫n?#C}sScoa-$Ĥ)Bq}sӻYg-c,2my磢BC?|"ӪUδr:9^ҥѣG!d駟))),lȴj<h2Xx 1d=|={{׺u]G*P"#5 {78ۈA{Eniǎpꫯ9r$==}h8Ok׮NJKKsqqcqfH=sCCCCCCCwfm+RrFZF7?w5^t102YXsr9<\<=]|}|dHPrprw eo$Y -ȫѵ}:5:M®_NkϞ=:pg]z5Լ&MjT׭[]t,;;`;v:|Z 3`gq5܋>ݽ} L-̈́՛*V9-!ngd-RcN?>:E˽ʘ|{K*NOO'{nU}=X… Q///gϞC/^l 믿Gk`0Uw߯+˳_ncCKU^rVTTTrTd.4Qb+vm|i&"Cn^nO ]fmw%o'(Kmݺi\TLL ֖ĩSPllld]k+XRR]Mq_zM}sS5і="X[ᮼiFاt&)rZZ1Jwww)Uz 6p={=vX`}7,7o޼;w46?",..Ύڬ `ߜ5W|D]{ Rd.^^ԼsWrE}e[\B,((, [ڵ{3?=NQvE#G<ӧO/,,,))Yj]vʿ" իץK6=3/_ftuuSRRЈ#w^0**g]h6K 7o&']k8G[gWwwgOLa<|7@r]^ޮ`S!O`>|S;SttU]S[USsOX{ٳgurG ir`^^^O)+lٲːD鐱q||ߔZ3AsScgK֊|y,klFG|^ACCCCCCCwZaVAAIMcZIDb <3Y\#%8R7'GNNރ ѣp="kekh+o̔_$*6[~mOy%qV9**j:`cӚOV6̦  wQsRbRNNQCs隋Ed$"{kG؉9dV6:/?N`ϽW{16з03yLP՜ݕDNȳg:oGܺYg7ر:44ԩS;wtppP?V>-رcwqqٺuk{C]]Mq`0 VbBbfFv㽇}MZ #;VvbK*q83V'IB+Kc}MFܧ+= +KsgC.Jx&HJ廻rX v::_nP0Ą?k1*ƫ=k!m۶] `]vQ<O*يMQ^"̖EGyb}W{kn-L6mfW+RlrT<|g+!?"BuOW.\L6nܸ}B.B:==?=ztݺu6m8넭'''W[lTs 69Q/ʎͻo>իWi^ʜ=|׹lgϞ4ߵk5,--ϟg.)S(((`6h:`07eu,2 Ieo:8x` $J>ɦiUS,KU~c t1g" x,(j2UMM/z22仸\L(..V}H$7oޔ)S첲(~P8wܙ3g qO}Ǐ'lٲ0r&Mj۶m-6m@ 5j֬Y4N/M:uT777xy dY(byR}QNfuJU i:99`dʿtґ#GsRv? %Ijj*ivIϟ.)skS߅ۼy3MAw`o*X.4s<O|[ g"E&g&c$h7PF{Q9;2MAy6< 1ʶwBWW-P(--]XL Xkd23?uV'D;w><}v+Vû\oY|͚5i^TJ6ɽ1,^^^Nqfaˣ>JU"Ch ևR`ܹnjC4Y2^l=tWq'!!|ÇhYYlxkksm~cS:t3`07ey}nnUW?oii!YJˮ=VmvH`'ۼgn8Nx׍+j"Ale!67".VT4ވS6ccc]TT$)XXXdeeǴ4'fK, b://QsFEE ;v5W< @:11┊iݟ[ϖǞ rU".RX>욐Zi EKyJs?gvww'\쌸Z;wn ޠZeXnVbJKόgi y,2Fb=IMKWM57lal$7XRPqHޡZ=]ݕO_1'V\H(((hlF}ÕLF-QJN,U}5裏V6ũ'-D~EEs?ƍsY;ҸZ;wn U# %~>[w*+OGYYjX"f=MR#T I X^j:<5+\)J(w.BiYݍsQկB ʕ+ iiiC,*.yyyfk6XL3ڵk,H6UZaDrr2ųXs<-屭H˻\%Rݸqa^ŹÖܿٳzxx|g{%.T;wM;k {c ++ZгLd%/e#KY ܚ*XF͍ ,3tH$ZɛPRV27ZZH0Xؘ࣊DT4pСgϦݻw6l@ÇO2B1cL0U%IUȑ#!(NO&_BA*7uEq2.s̡Ii1 #hytQXь,a ѣGD5}MƪP됩 lguܸq0777:D]R:.)lUw| .dShN`0 S=X "eeݭʾ!ϔ̐R$c1̓O˖ s fFR0f:+ W6MDha.dϐŠۑQ2Ti2C )0o<[֭[!!!d)9ՇZ*XϹIp;-ZDq7w?j`NHHd|>Κ5k܃Ezy,K֩>>zU}țR)X,&Iq2Rdi^_d8CC#Y"Sսצj s'M;Sk{Ns%%q1uıg$J~FfYyYd:Ii |: s[Oo߾}ųgΞ9}c'8N̙3gPvvvUUՓ iuTTNNv t пa , @{;X``t0d T:0X.>@CCCCCCCC?F d:׃khT:M{`0 Ũ`t0 V?aV{.*_y[_lVCZ4lvQݹ匚:+`0 l-̢_ƧxaPRK{8)tyh,} |)?Ð?O)~ٹkW٠5%9G;-[Rk}EVCW͍;T̛G|بf?쳤ΰ0 'wC =aw«5~'qޤ?&6r_}\7EXLAbBQ$yf4wyc߿X4`stm}}kSӧOH$ӦMGc)hѢ9GsNxTTus玚5е]t!ehhhhhh迌PåiF 7|p!G z+x!o3"xȐwFmܨG cFNT47z2vD0z{P>*x01tа!@!>zsYehEK srrziddv׋^z)99533#{5k,+̙3G9S[n_2sK}?N˜`0 a=&xco??߁ <8`ȐC 4xXАa!C :|XaC <$$h H݆ 0h~|)L(}m vڵ}$g?` ?^{o&3X2ٵkuyrPV,*叓&M֭[>lmt)[#7Xd Vg"<$$Py,j!Cj(ٯ!C|ի Srr2;d:tk׮*WfffzzzRZJH7|3--M0>/PȆӤ/'|rq5444444tgК*X[NO>r_a( ?h` aKQĒ{#Fv*//Qi._ȟjzJHm/,/oP&S,W`}N>f޽0u…~En߾3DFFz y0~'OLg]bUUU\b|2iۭ[7/,,1OFSNQ7rZn̙j Ï`-'J"I?WO 3 *`v ŪYGUߌ˗;8֮rCK ݽy,}%`6ڽ{>`7o GU9=X\\yy r2Y(uuu\bmNLjԟ,gϞx޽߿?} &Us;PzoO^>ޞx?%TDDQȑdƏ端dŋZd?VlހFV4`WXRRB.O?UGFFn߾i`_G{0ߣoʑ[,^8 Ɔ4+8]t[LU׮]WZE^mtŋ~]:}4?~a޽+*Xթ`0 ;wQc'y{{{ ?XNz?~QQQ}GO_W:r߄'pqq2d0 W'_/ECQz|F4`_Dh<KKKTdL3E?_,V|jS$988(G&N/g${sNW`*??=OO>f_zSO={nv`~9UUھ};u[` 6W ?N٨铘H,..=Ӽ  *P]̻SFNmX E o/;)eog4{E|5c2l^^^^oU+A7WWgg'{]~kOks&{ٳguyf(W"KQU{g\_}ժUQ:~~~z"ϒmF]zUWW<3&L` cO񴴴7x>~7=< W?JsO:z;Pzc_]=<=Vj{ȑ49inqM0~ }XHݕ`I|tr/_  `Mz;xK^pJmy|%^ju2X.Nnr%{,Oך5kYۺe/`:5G,ȓu%V>w{tݝĺ)7H(_ݕFdtЭɪ 9 Mڗ&survvtusqss6,$x{.D_Pn|iԬI~u;^^2~``C='/=GO=jP}۶~>vv4\"t_7`y+`0 lhC =c?8:998:Dh6nhnc*5KIM&;?Cif͜9skYg͞3 +KRcU sj Y ẛ|_C`᭛XR" 9*+Ƞ8Q3gNé?^,H%blőWM9**j?' j7 s'~!ԩSnr 2?SWbUذ%?n;حX(j?ٳdɒQo%Vbͷt[v`W Wعs3///;;c *XdOuv:::8:ٓY>\djCD+Y;ͅT).E-2!M 'QQQ4^V\USƍz_Q~-]ӓX|4 a̘1T%4U-d7od@[Wg+"3Xlo邐mU͋F9q*@g ּ/ܙn/%dm#%%%e'%4{/7njZ*88iTuhݖ|!_ȗ+Hl--]W X_ ccc^EH'$$Pʢiii| _dIPPdeS%g ̝;" .>|8ןcǎ0a½ 7#+VB&_Ge8VZn.`Ǐ\עӭ YLև'&&&@`Ŋ"\ԓ&bcCCC4Xd[!zR~~͛7I\|YusgY~+4Xlt,.-zoe/ imL0Xܼ,UVVܹ*X ](ߣTǷi66bP$% e#P҂`ieehd7??]=]S3S?3+@$Voean"ߢݪi))0o)`cA7251Zls!:  ֲg7e14od˚5=c#}˛~07愑>WPttGP!}.@GAZƷE }t6SZ[t٢<ތpy;1ۣ7Y +;7xdɨأgblG:]dxḏ QO?q\k`E ^Q``4444444tkT:؃ ,F,0 `pG1*X.9@,``0 w0@ `0 P`0h ,0 . `0 b  `p3`ACCCCCCCwF `0ڃU^?1!.FEcE?l޾}{xxxk `0oYo ϫ Kt`\ECP>&UɯױgRPP0c DqGc@@@jjjQ_hQUFEΝ;E_YѨQZk0  VvU+2:Qcx`?+1<\fthW+;dܞ={Yv bK/̎ueԩ-F͞=nnn-1ɱĉŋѤ$7ߨY3U5  ?iq wO'GF=GIo|5v֭EQ2X?^{5sHwڕ.\@{zQ2pt4##CyTMMrJ׳xEEE:R5 60 &Dӥ  dE͓*?%wG^ʦ p4@矟?rO>1bdڵo>Mu3fu٩Ec~孷޽;YZZLyz)2R,ջw7ZXXPΗ^z/%w¥d^zmڴB['ѣGž{9YYY,˗/! En޼2,;;7`_,Y{+P ݏ|Fk ~,s=y"h@.0ãGJ6h}7c @عs>dquu➞Æ sSuNr$666K/ׯ_'߳~#Gщq㆗V%RU"G}>BK/_fT\*yܐ#GpC\†L0k׮d222B!Ӑ_|O?=qK'B "隚_~yl .cbދ aj6taa!g}Ʋ9s=d̜9;^{mҤILT{ `p=X KO2Ãs+5I-k_!txgֱ7*ԏm333[ٳGUV"maa1o޼ؘWj12=ʕ+)>w\=='NP<%%u#})S8;;!q?5WXeMևh,-Ku_ᖔȆ>}1RuEumݴWWļ04Q{hNbHMPt",`CA*"afp=sf20P`7YYs}=}܁y\\\\=Dkk뢢^kԨQF8+X]b Ξ*_R粫۵cGVݵJxbOrDLXc1 OmOOOB4`>{_pEKHGPڷoD&54ZZZ`|cHH6 `RlܸQIIh:88@(cccu_M]^~XYY|o]T***:o4dddddd_ڃ% z%ԊŶPHJNsƊiMI]CB+Z$v )2oϟO4`hii~СoMMMa,^>}_|AIKaa!uk= `֬Y[nJ!sx漇ٕ`cuvv K@ UL7H\xRδ޾Ʈ܆U*zccV@|lƘJHHx׎?^__.W_ %R,лw_}vr HIKUU]]] ̜9S g}vA;D fbb" EUpEKmڴO?$w?~^jkk `)S######y {IDq^qjWbq-Kۺ9E76we5ߧԁhWMm";fEJ^l}/ _b>>>Tj:ܺu(hNs;T;Ą@111yסqƌ B+X6lONqG 5uK!խ\U.?ڵ|oVJJ ١ݾ ,1-jԨQFzz ,F+Cë%br^T'u |~&?jH}AZv0feUH\1l1+^.bGM[[[7EOjK===%%%---|A([TZZ<~{J ?j4VU.U{>grZSN"~ߨ-Bdddddd䗂E`inE''@zYmk8qO[8/МNΏ='0vj>®z64DRnC^ 1dWE7R奨vEW{Eo &K2+;8mܻV&TjԨQFT"U$+96^YK}zCz?ysX k5ԁxqU/vb7GTG:Y}g !@LaA}b@,nPJ\Fo&GV6qZx~ਤßѠC|+g< .k77? X>{ܐTJMR@L}$cw^<ɽmOj-ig.u_ݚ\'UqW!OŢ(0R3Cz:*kVDͣ^z2$.{>=$$DQQؘdPAAA___GGY{{{aVWW744ܿ?h[[͛7R}AQòLl V盙=zT^^2]tuu!ƅD1C&#++ A7mعsBZee"<==!h@ XjZ{/W T!yv(]"y9ɢܽ\ y~.RWN4|Q:@!t]7 8p=X{ʂFޖZՉ߿?jp&wgrS{gXȩ@\ "Ҟ@ $\0࢜A@7>-BQ Vnn.:+вf#+00PMM$B׭[GUFOPE2e ,u2h)6 `$qgb횡"ӹZ><=jb_z狁5`Z8:.*ӇNhın1k׮Ƿ}뼍 M?|+-[xܾ}{8ee厎UUUaiipBCCC046lq!%Y^^^Hdm`L^<࢜nt}DUQQ1aAAS`  Ƃ`AgpRr|ڛ%h>,r:"^( ڳgcȉ#AE+z~IRXLӢĆΡ-m}nE;ӛje.WqW]%8+S W6-1tW)%i8J&|H5цG=x$#ZHUoGcc#eP-brWXa}e0Пk`` 9hjDN<h*CNI555d8i'_TT{}}}@;e)2XA;I(//A)7jjjDI e0XuV]]ݓ'O2uEqFp?䭳a>an'| Hjl"^繹955"\r%$/#ԨQFGc`r$B+;64a ̺־\FOfCϽ 9=-}?շzxB.[Ɣ٪ xXݡq۶mZZZ`Varm uwi p3G%oaIÓgbb)$(CM[[[wEmrWWWHm +9 )p hS ﴀsuh?>Tv.HQ`1 ܹS|2VA@|Qu_y9TPP ;WZEU A067,Ŗvⱒ:72*zF?xrUbO]wUL"FFFdغu+,o߾l*yM1895* 333hE= 1X#f֬Yq-ZF2X`S &t;w.x ,A U/ m۔WXajjK; 6=aD@ Ƅ!5X!Ǡ^E,f.&ʹUʱUՋQoL ~5jԨQFzz,⦞oӚ%%iqzU7+5|󠇨F8vkzsY8]!@LA v*'6J\^V =ůt/Jb] V}K_E5jԨQz, f\&,lЏ{0OtqKr}n.zH~ʭWe8`r`ھϔϪ^PQF5jSJO,{X5;>hgױUww*Y.̼N72c'2222222`L+VwwբmlY۱`׿*sSJTC9? ssszT``-##c߽{wRBwttYixnR>̶b4 l*2F6w62V_ZW48gBnrCc=1$kT|[)[}1{rV1勂BszͽkvbEQ-#FcA}A*X)Okkg 9COQ*XB +TvW \&_˱cǦO.$޹ߵFFFFFFO9n0a٬-k5 p@#{- +ݨ8[s! if3:uu7|^7o^aa!i%yΝ_̘1#)):O>TRRz .@#.**>Jss֭[!ګ*..FrrrZt)‚:VUU(;;;;O5 /`m߾]FF:_rss,!okgnlz 6|]+ā SSSAi|s;k@ 1 <cAUo fݿپ>g{V]=u}zzrݦ+6*7'BϢhkα 1`&>%K M555}Dh߳g( >ѣ Gt:֭[w/!Ȉ|癙eeeVŻ!؋8ѣlgdd;No`Q?3o>H5!!޽y ɻ 8|N 88p'^ÇBR,33?OĐA믿neeE?RCX-[J)GGS&î]"455]r>>qVƩvͻkW{?sZݪtwMROc\ X'kKV.>)h1yf>[+jkk_{sΑKIIUUU566TYl"oa511!aX=<<[X1UqCH(SSS...I'O*8Q:::D O 8Q8q6mڴ9 AszQxǢ 1X|ɹJ8ӹ[ָ5@ Đ"nKd qr5e*OԢJUV].QIXTJg*6$+[]:`ť%ԼoqOVr,79z=8so,9 鴴4X2ݻ~MAzjy?|z zyy[j@--[Q**VOϭ[H;ߞtHԃ?*[" ΅`;ɉ/^h8* ,!k[k׮mnS˸} |1==:}NNs!KŻ5jԨQOl[H%ˆE**K//.Y]"xeTJU/. V {gw{IsOG+:51;+&))) b233u)++ͻR.,|UUU?CGGP-HNN>999]*e_J~4,ڸq#{ASo( _+))&J&lD@L6& =nH P ??0s~!9BrTB^U }Y b*X+ }n)_HSrO{Xt yIMg$85.wQs5LJ766xWݩ~޽{歋E7..[tIBh '1112LE[%RDS{H/v>;'l"RRR౨ YC&wh H > ȸo&,ޚ֭[A?QI;I(S+E o=^Дͷ8k5jԨQO\Xbrcs|OnEMUY(f* p^ 埱L>orG#0'|k*Kx!"V5ܢX\7&,Yfjs{Fhhh` O` HJO6-==~[x K|7n9s&x>Gzx+X9겱 ^)V@T9vznӦ%zBpo`sQ%nG|`^|J^٪60SB ϙyf>:Nhh+'Cڎul+($Cd; l.dկrߟ:DE̶mH ,,\ 8p@FFF*7U>P9}L$ n޼ Fo%kHaP_[[{ @ ^b^ [n7JYRٳGN8.>oiJ$ߝޥ)K_i -|_F}y=1wfޙ! ̖_ig_ZljniLu1[5J~rz)b)~_ŻTJ&!BB tnmmk$΢tBF+@ oQ`sXKSӑJg% }4bYbŊKB/qKX|*L6`es]:)?M?~LsLd,dlCd6!4cɿ!BL\rG$rSY?λ-Č;D5X`9"B,_BD %H+6Ä2XVG`]_a"f%N5QL"Ql\9ۈNG=2b朊Rp [ʘ ;E ;ߵtlCey}) x@ pjlYeHpxn(}*RtKk,EVt3]b%f3ڞt/tOXc:6lc0`ю:v˰Ym&7eyY-EG_B raM\ic}Qhf~#'%Bc慙K;D9^;ŀRplڍ\6Ϲ/v?aYW #߯/Z˘xҎ8vνk6~:Z1R:XD^! h@\ig$mD6kًƺdDH s%%s}Civ6V|"6nzySG܏n|v⌴.=Ls6!2Y((÷@ D2XW8ZJ[ʘIhIGzPo%e*{2)rqǵxST ^8-x]^^fuꈅ'MUZԼ=\fLwT 5, @ ˆWpM Vr+,S)/yP`|A6~2L:T?Yͺ[n ZUV۝{Үgxs E{NHeYd}Q!B>L"eC/)c0XD5jԨQ:Z VJE[8`&yJZ.mB=ֱ`Tenr̜4Av}}% 7.3{%.ƞt]{QFH ~Ҧ]S `{^4+M6m/c,c,~>n `qv_qslV- ^3"OlyM ΃vXt~a鹖2vm9ʪ'&=&yRL[g@ D1K ֝3_))pT[2-M6p4Y,b A+"8oϹܝN>:qD?~Ryt-hrGljQ 377\H}}=^XXUVVFlll?q9𩇇?//Ϗ)%%DOKKd 7::I BǏSǗR!>B,%%%ܹsSHɓ'B抯q rDDDmm-9 N&4hhꂷ0ݻw}׷o7---oq '9A !ZiQtWK]9)MJS K,ibn1?3X\#u7;5h/!{-?;Kz S!VAr&^Gq~}FDHHւ gΜOfk< Ν;QUU_|o>Uj*0/iTHgggN҃4@$=@B)>$_n$,Wٳ===$픔N4WuvvR Ƣ y{{ve"vwv2{DSWSGId`,rAXYY)5jԨQuHǗM}<$IH3|AQ-}?Lʡ=X2@An Uz'$SquwjrE`%m,Fz'WF`ݿTX_[B`oBKKK %;-hHnٳT#UIݛUfTi|9Eܺu+o>|{ѐ}kǏMdwhKk,}\iKW_*HZ}oPPKnΊu |9΂UmӳS1[=kmkbǏ٤BrH)A "@#NX+v%%(=OKP(^-..&%"Ai8WT[KAA!11hA,dYYD5{qUF@ N֕K1n" uƞ>~RR2F~áWv'oMӴBI#+#ڎ`~_La毿ڷo߮ѡqaA$0N,KJJJ?4*++kjjC`}ʕ'Nqn:b x۶m^'$=NU`D :yAT |Hj9p---ѣ7nHکaPlٲe9)̌:oK[[ XBFFFF+"YacsZC&ޒfRG9xKzH6ezC4oNGŴOյ_olb/~] i&E.n  x2O8dNjmf.ښmnn[ZZb _Lvv+-Z[}"g`hގ;V"1K V^ѣӦv) +7"u#` ::::jjj<\ᑡupiDJPЇ=TՊWE$.Y jԨQF+X\ >xIi7)cOi ^m%i|̖Ι?}0c\iNw>qVZEi#'i5 T29kA}I.vA_6h<r#a~^0-Zs%TT~ͫ({ =t19ó ݔ럣\cxC .;*ixD-s^ǵ0@ Ĕxmm*s-ܿ6w_o3uzv[--z$,3n̺]wz35$4wjx_tߚ << , Lq篎;s~z3?XPCzJT?./o&Ot,dddddd#O"۰ugH;5IFRz_ W=4:l/sAIŽF2W90 ȓ` 3Zji۫i\MiU !q`9~wN{np#S'Z|zKʳ=ZR=kͤ&^̓c-gddddddd䗋9,5jԨQF$Tyy{+Xȓ̸ 5jԨQFz5V'ڃE5jԨQFz+Xȓ̯T!@ &XBFFFFFFFd[@ IV'@ 1 2222222$3V@ &C-ԨQF5jXB d2)~H^Ë /k+X<9ǪoϟศQF5jSPOʼny܄I٩;8 : f5D=NE@ `{-~Vss,\#,x UAu)+k?PF5jԨ=X!wlyVs.E;ۼ}Uricw Vf,M E =a`qo vww\-Vm6`خ A [=1{2:7ԯXB~...c=6((#qvv&E斑+/uXϟ&d1!ݻwyF5\O,`[l6I#[flvd1[#~{CZkKb/~=XȆ^ypc=PBBb׮]ǚX131xRB!w ,7l`{ֱuT5.lFqۤ}}ݮMWVĕ- Ypfpc1nŤRj…t2 @ &blfV>a*xY> `9[ ^هsd|usrژEr =*pX 2"mmm};b>#bDTE  B !),D5:thsłs1jB *菊}";D V`Tsìos4+̳Y[=(dk>ߟ?Ffۭ[R6W,Qq0BUOG+ǂQ]]7|הH;,;w_3\B'XYY͟?>z뭷RRRhᣴlݺiiiT(ggK±---CTUUo!퀣eddyBZZZӧO/^˗/$'<-p h333QΎ/ݻwTOZp'OFMld-Zc^, WFH[[{_ˆi$l߾Nà׿Ο??c5X0$=m4'''*,xJ-c:<cAUo fݿپ>g{V]=u}zzrݦ+6*7'BϢhkα>~!8Ǐ/Yd̙]SSwMJJ={b =V)(( [222K2(_|Eff&,ϫVŞC 0ѣGaMw-..ovQ?`zTy` d`ĨӁA?*X8ڗ-x)h1yf>⧷9}G&uuuy tuu5x7j:tԔ+W!$ommmau>x\"BCRPww7& 888~kttt*e8 LJrO *<jD0 ,%{pԋE (U8Sl#(mĉԠӦM+&dAl/ X@{Q,&ߦN@ /;^y9Fdͩ6 tިܟtMtJRըUKT+$UR>ن F,Xq)w,5sܓ/9q^`CI<擞oݺEHիUTT&VhX&',@oooxKmʡbuV555*8FiXA[@: ͛7I4j,HUUUh0Xw޾}ʇ;8L]{=yDLL :;Aivk֬Yx1u $=9  \ڵkyy Sky-b\QF`R ay=ZQ(P%P%pe%ˣWD*Z *<ܥjU|,NWvOw6ihE&^2n`=#9Fkp@DVV_;Y 333u-XhޕuDχ~xԩK.="v>{T |x#xXੁR6$ّ'E򠮮nFL`~J."M|g'(ᑿ9sEnƍ{=R"x7TxGϟ?<2@ ^F ѼP]x% C%A, Q }z)W-b+g1Y`.|!M=y+sbOӭ%5M$*!&՝hT&<7X`%2 XA_}U~w^y׶<`AL`U\\ 0>#x_,ФBڅ,T?*h` 7'  lMOOv<5"I… |ׂ:SVH!I2ݠMf`߾}JPmmm Μ9C*mFFFT4x,(r=ꏍ 4ϵBH|:::Ըo %&&uVE5j/|5ؠg}nW ̚@)0S V}{Z/`|,}cGO>ͅvX`i9D 磣K)8X)A\re֬YV`444,nrJ"޲e ؎qP#mڴ>Ɂ"DHbB׿<@ċ%$իWC0&#U6D6mZzz:>?6j2oݺoP_&ݸq̙3s3`kkG@ "z~VaneMhftyE99)}oZxJH*ygL o.>g9+82:c[d}_F%7hqd/,g&ؓPǎ,07۷o'G^?B VAA,t{RΑڃA|PF$Q*X 1wmCivdme,Gbdۇ?wMBJ,U(XrhYtʸkG,\2<YHZE=RITL6n(cC3¹y,R+6&X\U_I ",OEʟusM9nyK,sFŁ kBgچvT8`5X47Q9y6>d枺,o"e7; V@l5ȭ`%eZ_"IK.rN1,B>?v#׹syX啨n7+닲2&^4#z3`Yx, Vt=d+A V_.ig$mD6kً_s*1:& K!Jګl⭞,b Zuț&>~t gvdS 9*H栍DAE@ 1E k٧,eL|d$BOg'xIمʞ ;Dʸ)\q-%x)0Up oXˬNV66J뜚G_kl鎑 `f>&!2222222Tc*X9`,dL}L8?&8m0duzcK!=u%p{cUeu, z1O/`^TN^љEe"-hZ62 @  "UR2xK_.J4]ۄ{$`Tenr̜4Av}}% 7.3{%.ƞt]{s;+YN+]7W,&Vnݺebb2ȳI(hkkLu>`_z 4`yXKI{IyJ -f!i(c*c"sn/@ sj`1khh:78t:իyTVVsND PF5WTe'm55 `)-ee,ǭ!,+v eKsnq&״<,m{NHf非k(cwI&cΩ!?TVh'MKWWѣlF_a,O3YJH28/rGqwIs?U"H-v`Q_ʿr!RNv':9IzҹRن[˙zKQ{61esչ/^lhh ===ʨ ʕ+nnnxS#˃ qSRRjN"2ntt4|cJKKBxn݂stR{{ ϸqHL'p^]]L)ɓ'T ΝpMx8]޹ S9p9 4¸d\i ]]]!5jԨQѴH%!f&^R'IiZ|+qyI3?e lbdd~vvv|󍩩%K<8<~``-,,=*//=gzzz0:8… MWWȑ#˖-#ZHzp,$! h IneeܹsҥX۶m >?›[||ܹsMLL8F~xvkkkH$^ڵkW^ 1L ;vL[[{pi'I…IVUU+VǏ6Y"#)/nl޼ypИFw5g,JŸD "####A=H+4GSېr4zT^W\s1k=XF*#'L>^ELإx0X:)O/(vm 3@;nhjxكa{{;,.]"-":8X I3g k'YH;8$XA wGNwppϾ} _uժUa\eee???"Ņwvv(gϞhbH\΀E4|s-$$&@Hp|3%>yyFv983IC IL謪ёijjC&$$ $ oCaŋ8m#####,R+,GCR>s0XOo͆vwYgV<V`QxNKYJiީ{Oe2 ƴ`yxg2oB%2"EDiMRdŐ}M!De<뜛=o;5o9sus?}9>sbld-<5={Z2u"mAS ßjcDPRRj\  ?z5/Uөl~V]3uTnݺEݮ]۷U؛Nʏ2h&k*e,*PV϶wdk֝3AvQαRQKsndw( = _՝+}Ui{Jk$M}[k: /o;EZ\PWn?x jl~!IOϞ=[mEt֬Y}N:U-СCIiii_Uce%yL~JJ*֟Oņf׭ kuظq#,ccjc1QI|||E5/k&PU HͰ7VrcjOIRz,OJZ̧O7Jt'r' BڵkY{,^M>oEUYwļʋuLĕ߼n.%#'kuq$ +)[͆uO5R+} Ϥ#>zV\yG؟&7xPAW^U힦+WZ_`uj+ ,泵||VZ>L` D;=''Ub6 _Ƞ\֧ iZ5)ܸq> eEO_.>V]***(@P)v`5jXFu.|ej1D v+++Vß BII߭տuUYbaaaaa?7<|ȶ"aE4IaҎ2N12m¤HE'WW.~1 #'ٍͰ/+I]IgBkӧElWeq3˘V©SRܹs^[tiU - t5кVIdXZZҠO}:tuuuj%ill*|dff&IÑe'700#~6hcƌyO!H9+XNgАFl aaaaa[6Pzc_ ka sh&e!%##CcuCC鹄NvיbŮ=--LML|Wx5]3cǼ*a Q*4X- ZUDذΝ;wfϞM?IVjdTɉI^=[uUOOOPRR6lX```,oOk%-´4>T@@_b1èQH4P(REc`5r.%z8p *v3ZE !!RUUNjiMUWknU:ĉƥTK%CyN0!ORrvv䈟 .Rz/pd+X$FI W%***HZW X{}VxZ؆ڬ mz[f}/oEUd-dW51Y#Sci-aLVÇluo--,,| m2M|ox]bSsM %h[XfZOnM6UNJz޾zf4i{1Vj aaaaa[mde,lӪ}R\lN=lBۅ GdE6lj6^e_'^|SYYYS&MY1,m:Vj] 6 Vk;Mu 2!D>X!dSKocfy3=jSs {d `sUSSpppxikȊٲ2--'Ox& +X |R#}1ԅ/R5rRZ4 +JO[sX9FrZL+zÇ>|[ߔ @tOQ3 M6\]Tu>Gvu}{@o4>ǑӺi5(ƒ-+Մaaaaaaaa[,[ 5^{L1zFwPfl:4f|ÇuP"Qkw.T4_{}_ʔ;ԧw՜tY)1kXOM5z'XJӌ}%L|ZdoQ喙`9s7cGFRϦ|[ Vh|`,,,,,,,l3[T>|of,f棻w{|Ç>`43X @3@`43XGOÇ>|7G iRic*JGXw_.xXT,*.ji%9'5uUUAjiS>@{Z)ذ.U'[傋ܥ Af^T_(yeIaF}_+>|o..2urha%Q/8313t9lnݪ/cO> Жx-_iWWf(⬟s%+.guΔ?]ҥK->w󃃃Ϝ9z>|o=Xg%9ۧCβ xq۞r8LN'R)G;5&NbVYYG}Dmmƀ/ѱ^zW+ Q=y΅qf;q!/\r]& V1ԋi)&$ust|#W9Ѯ~rCo{lIIIiiiv^`ٽ%2mv۔ ‹B.*[y3"gͭes^_Zpd'а#Od i' "?{şu(QkILTNNƍ5G)**={6Ek׮cX;E*g̘1t_~Ia FIxl&''RFFFϯ ۷;и{[:77W{9Qo Gܹ/CnFАZ(/ZM\+r3Ηx4nNc&+ZZ:\3:'9X`޴Zjم{;H%D:::?Cn޼9z>}ŋv===/سhEҥKJJJffa%EE'N9sW^Q~ &0b% Ezb41w֦nvvڌ3 Nt_MɾzR߃UO@qHBLOO۷/?Fκi={\re֬Y$4=+'|?'Z׮]y333>}9Ъy Q' u>ΠCKGC#[w\pq:㵣A sO ^oxL ڷoZ.]$++{:uC-/_Ύޞ$qhu_~=NʣX1t NT/%%%LEǏ)///TEG3+@,U*/،ǪEZАϟ|YÙO2**o'X|$w"`aaaaakn,*xq=9;nO5#:~{s5ݙ|gSNٓ=y͉;MvEcE##N 9]oC#QʪwHѣ$Ν;W$BSSsĈ i2I=5B322={Qվ Gڂ=Wω'ëUOXd\ǎJ*·uc'Ɗ`~=FF?A\w`R/'^xyx[ ۖ9|km_46ϫHWmgGqT-࠵١e]crQ*axA5&Ç2HKK~1j?<2y!C0Ƞ{e=(**6ȑ#GDLq5 >.\`վE(~ӈX,U+%%]x-\JTI~۷|f:mڴ3CuU]k#c u @pa7{npy! ҇o0bő.>Gژ:U̩Q 98pm$e- .q v |K~h}ݿD:crڵkE1__a1xX׮]m۶>IIIٳV-b!;;lڴS*((SeqXg|0!!Lzxxܹs5:88a5F+22 ,:ӓ$k$s;{lwڕISNLod(kgɰNT;oL`59>|,vPE{St{{gUbSŝW=JbkY g11:9$Z1 MDj~}v)y g&Ⱦ͜+;DYeFW%!!AŋMi޽;) jś+WY ޹s@Hۿ`A׏ׯEJ=YUE> H3*,,d VHHȎ;ȧ?g͚Eٳg]ti\9;ϹgϞtI!ҩS'''N۷o*XGC b^qAw)ޡtU~BmT5 $n|Av.999՘8/^Qo߮V[XX]^^^Oʁ)|E0UJg֭[Ϟ=yZk ۆm{ئ=ikw& XM| lri1{s5_SOHS<gOp ׫ٮl0ܷ93?999py  n rR]z_r/7{EitZʡj5>|o~,vovVoVtwUXw_Q׷xl!ե#On2차j)lWrݨ``F~*zNFkH`)pwöů66]gyAqWߤ׶'ȓߥW9pAk ߣ侵?Mvߝ|U#Q=A9V>R:XGA$άE5;oR4pExϧʊZs?o |Ç>V7E-^TKcgB\+MyEJ{H`ۭ౽Ҡ攕<{-6d˦>R{&w 9 ^r:2θENXkve嫥\>,XXXXXX~T*Qk_FY*sVX)9孎1^[+${SBϵFWT|"= 7 ߫m-auS]Z^r,r IamʮWA+XmT+9%N5N)F>RaG݁;#e<RS:)7/-~Ltx HfUT{|a1S~ V.o/#3ny?UH/s"m% ۃu 9V%V!Z.R~jɄkү YIs6y]*uMr)|s/; 5(Y09Y3A ,/_=on[[cI`Iݸu{s_?S`Hy}]P`mvmzixDEM}cj?|r7m3{DHUνk.R?s_ÍۮW ef؂U22s(ﵵGn Yٗ*XmT+Bh9irJ&L5NafMBLboM kfƹ# \~}P{/(])A?ۆ)˙ Y`!~鴥K7+;ȭPɽs{+XǏ;yc#tq{ĉdLMM_0`ϫu,#)F!Z6\&Lv[ߘ-novw$/dĊ2:034!Q棶--+D۰<'y3?9S!zWG{C7ET՚[VZ[[>|f; JU_QQV|Ç"~*X2e텻CH`[ofusks|]pI%kꫲRQ@C'`ۿI`ɛz YJʵ45cWoVv  V||i&jIWY2dAiyy9XG 3{>|=QdeB$W1pg{a`ih9X9ؾA;K`1!u*mW@B)$$y,tE ,Ecr/5mwOPvS ]:8萪z2$yf;;;##!CP;[YYCE2sL%Ko988֌;x`'''ccceeT> A`IP7tʕcƌa,~\T$%%w!6"A#2?<^c}X(ևyH޽[ p44r@;i(&>j(jLm'v?:'z%N[Vg >|o{~*X7 X'i/ȱwHܓAR.k^ޗN+X~VnaOw؅^@b1F-^9V&LSٳ\CsъcBJ"???===zӬj;fΜuh r39wŴFB`58={¶=,ѭع̜Ca֡Rel{Gmrye]CsCҜ{ 1 p(TMtLV5^#irD]y~1zvaWwVn(TU]1СC!SRRoD jq5kxӧOW:tPR*ZZZ$ߕ#LÇUQ,=>gR'a,>ߧ=X4bbbFΑ"oܸ?TT5m:={`v&OAby&''?cÇ~-ByUV1ob;ESY=wT vqq5p:ǸGPU~Dj}Q-fCV׺>gBO &&{ix.E7ԓիWi gĩYV1˫!`>S9NOkkZ+Xv"E˗۬ VVV=vX݋`eddPcnn.Skӧ{صEܸqgώ9B=;Z%''۷ƌNGAXXXXXضg.XWJNߟO ݺ;6L>R1Z)FyMsW}D/GN1ag_L}eWz\[RWi򊲊2~e^TT4u԰0j;wQII˗/.]ʽ$ Wwu'99}ƍxa:ŋk+XN:Ғƥd(x_WzXPQ$}ɧ>Ǐ7fhffF jhh3gӁ3gd1, [%[؝?=ph&e!%##CcuCC鹄NvיbŮ=--LML|Wx5]3cLTNNƍٮ]; hff6eʔիW78P=/P\`Q :v8tМ=}tѱǎ?f/tqq)((9r$666z@##x{{у4III۷?J=ugwq޽s&I]i244h;::||3Ηx4nNjygϕM-I-dbO}}0oZmL½T" 1%%֭[Gӧk_x?Lzzzj-]t!QuaÆK'O<{l^(HQ-[FRl֭7oޤ`;;z KvڕVzFz~ϓP0a&bhݺu۳gnllL>[[[޽3_8p)YO@@Ӥ>Y D|R.\۷/տ3)~NJQXvI4I8sL @#]v_~ٻw)SL3Bԩw}'//?|RQ$HE"5j(\ ,tttdeeێ;Bl5?|ҥ!M)L:'%5[AAiZMgtFt{z mmmia% 5a„>}ԼHOQBBb+Wthcc3c 999RZP YZZZiL>/|ёV |-DNzE #z LһwﯾVzQl;uΓ'O)HPP 5jwcǎ%ڽ D >8h=ڵMttUu&@O?}-=>}\rݺut<==-ZDݮWPP[z5$hhh(!!ɷ>쳦|k!o522c{{{;;;w\pȑ#ALMjذa?'|ē6rPVSS#Ej hBM>(?MLLbD4 ZQHiիת!Cvџ}Y(য়~:j(:K BBB'֭[G.]LJnݺߴ OM87PaÆYYYEDD_׿Zz~)S;xo,CK__>ƍOo/ӟXk׮wliizΝ;ҺV Ç7Dhh(2C|4|'M HkUCBB/fI@`{fȐ!A"hСCSZճgπ.]4Wm  >t:v8bSSS~ -6؆UX--$%%ԚM˯?O~0<gΜjS={6/͛ijdɒN:͝;@GFFrGzжҊ%SD(8 1mڴk+h466Y BPtq&ul2uu~ jUUUSSzg@CW!kڵkaff֌g[SSག4Sz!F}骑4x> zhw8TG!ʧIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/metadata/info.guardianproject.checkey/en-US/summary.txt0000644000175000017500000000002314717152070026552 0ustar00hanshansInfo on local apps ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3001873 fdroidserver-2.4.0/tests/metadata/info.guardianproject.checkey/ja-JP/0000755000175000017500000000000014770510164024274 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/metadata/info.guardianproject.checkey/ja-JP/name.txt0000644000175000017500000000005014717152070025747 0ustar00hanshansCheckey: ローカルアプリの情報 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1740396706.0 fdroidserver-2.4.0/tests/metadata/info.guardianproject.checkey.yml0000644000175000017500000000075314757054242024130 0ustar00hanshansCategories: - Development - GuardianProject License: GPL-3.0-only WebSite: https://dev.guardianproject.info/projects/checkey SourceCode: https://github.com/guardianproject/checkey IssueTracker: https://dev.guardianproject.info/projects/checkey/issues Translation: https://www.transifex.com/otf/checkey Bitcoin: 1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk Liberapay: GuardianProject Name: Checkey the app! AutoName: Checkey AutoUpdateMode: None UpdateCheckMode: None CurrentVersionCode: 9999999 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2121863 fdroidserver-2.4.0/tests/metadata/info.guardianproject.urzip/0000755000175000017500000000000014770510164023131 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3001873 fdroidserver-2.4.0/tests/metadata/info.guardianproject.urzip/en-US/0000755000175000017500000000000014770510164024060 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3001873 fdroidserver-2.4.0/tests/metadata/info.guardianproject.urzip/en-US/changelogs/0000755000175000017500000000000014770510164026172 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/metadata/info.guardianproject.urzip/en-US/changelogs/100.txt0000644000175000017500000000000414717152070027224 0ustar00hanshans100 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368094.0 fdroidserver-2.4.0/tests/metadata/info.guardianproject.urzip/en-US/changelogs/default.txt0000644000175000017500000000000714743421036030353 0ustar00hanshansdefault././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/metadata/info.guardianproject.urzip/en-US/full_description.txt0000664000175000017500000000002114717152070030160 0ustar00hanshansfull description ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3001873 fdroidserver-2.4.0/tests/metadata/info.guardianproject.urzip/en-US/images/0000755000175000017500000000000014770510164025325 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/metadata/info.guardianproject.urzip/en-US/images/featureGraphic.png0000664000175000017500000011176514717152070031000 0ustar00hanshansPNG  IHDR,D|bKGD IDATxg\]v齋RD"XK4D&4oF͍=$zcE Ho"H mYyAvXl}_c2; ) >OȪ?VWW掎 CMMM]]]]]]UUU]]_544/5776l|`h>X\\\]]]SSS[[[SSSWWvjkkZXX 6̬0077766fٌd2@cZ_x%%%t'&b2Zi\.VUUVTTx<999&&&%%\ }}}OOOOOO 333,?Ct+++bcc0W<^^^VVVVVVffftdee}wޭ522}ܹ¼pH~SH ***222RSSRSS@}ܸqcƌ ck׮3U>x뭷8P $WIr EEE]]]t9pǏ߿khWUU}'OT#G!(?^y;w<tВ%Kh hiiIKK~\\ܓ'ONJoĉ61_rC$ eee$PK222vUWWghh8yuֹѝ  9Ĩ즦&5jĉN J?7mD@;2>:::***))DԴǎ;iҤ@###Bfdw5k 2 'zzz2ϟ?ɓ'񹹹fKKKIZFC @Ucǎ#)(v(d+((8uԝ;w }%d9rʔ)o񆝝Ţ;"͍/--mmmp8ZZZ666...NNN:Ѝݹs'>>>//CUUUGGoڴiVVV/ՑqSSu}ً0Hfeettt0L ccckkk &|:GSSSqqqyyyeeeUUUMMM]]]kmmr\.媨ꚚYZZ:885j̘1#FǪ;wDGGggg777wvv،5j!!!Æ +zzYuuummm]]]sssSSSsssKKKww71LMMM33#GΘ1|˝ׯ߹s'##f] '<{.PЌWUU|7558p+//|ٳ= om۶}'ue/[죏>a![YY 2>ڵ={ܻwL&3((hժU"| صkϟcww3g~G zڦ͛'o{-{ z577>}ܹs8 055utt|ϟrO>Jsׯ~~~=zHr666^uwwONNsAIjwxcǎ&66_=$... ] 㭷ڿ*6l {FǏo~]R=]x<ǜA?#,5222,,dҝH544oߖTC_WW߹sG4449h"!_/ӧOtݻw'M$f“징}Ѷmۨ$9O?ݹs8{oҚ"IAAAvZfMllh-XYYEEE ze.Q?޾}{BBBUUՠO6l5k#CBBJKK%ئ?KJJLRXX(Nw |8}ŋ𒟟H|–-[>Sz/..R{{Y~71 "00=.S@y1 { 555۷t:555ssiӦ;<),, ȴ?g~UUDj/+RJ@__ǎ[xćM,+%%ݝItvv "… Lbaaadd^]]]PPJ?srr\]]{{{d2#""fϞgjj\ZZ?dddjOիW۷og_~ɗioo?e+++9r$%%^{ɓ6~x777SSS6TTT/prr"?y…Ç744lhhuӧIntZkÆ Ç700PQQ駟N>Ml3gN8BGG633ĉN" enn^QQ1. @s ܿԩFFFp8QDDDBBGeI~h9rq~Ϛ5Kн>>>YYY$9rD]]]6l^lႚ=w8-F/}g$jkkwuuIwr${n7ཽ~I o .OJ>}'O~Uc322\%Ղh{|>Oٳgv:w\]];efftիWG }qƑ7"{yyyNNN&44˃@{֭92??^)ꚙ9d///[8_ Ν;'꯿"TZZjgg'hG; 7oN0?Z~-[Y]]mbbBrM6n(Ç###In' @` /Θ1x;v̘1Cmґ#GHݻ䷯Yd6#yūT[[{䉠BwwwBB›oH|Ky._,YHN?Ayaٲe.=|PdtIme= 1Z9sFХӧϛ7Ov-Z4m4AW8.###c]?eAWDOy___e˖Ȅ wygIIΝ#ٰÃGj8===T&oNR#蒻PWx{{ : !&AӶNNN.c SH΂m7!I_0Tx0>/]_ruuu;wmqKK K 1SХǏ744PFm%y>$}K1  z{{:~T(>lYYYL% $%\_yyy 8q<|h*+M܅?ZIL#Δ;vرv޽qP ]ʒv$esssݻ< `]z #Yˡ]R Y(󛚚n߾aÆcǎaW){?ҥK p0It$|CrTFFo&NA%Ε#^#;Z|A0WQQq?޽{ 6Piii_|O?TYYHKH6Az{wwwtܹs b~ꫯ\}wi_iOw5$kܸq"4]*..2 #/yɾ}6o,O[YYٶm80KIS?#U#ft ɔ1rqqt`ƍ⴯&L RNNN||Z{Q^^ǏRk o.a{+ ꊎꫯ''D(ϟ۷o׮]ɊEppݙ׮]+GZc$WwASD2 hÆ Cj?tƆð Ym0(hoo_6o|e@@uww8qb֭l|=qDAWcbb>3&ݻw7o, tI$`S__믿~q1{QBKɓ'lQQQORN$3322 rΞ=_ѝ߾}/<h[˔%K\ݶmۊ+Z[[ ;;;""Bޗ.]Jr?߲eBuU!`2۶m#y]dIdd8G.^NIVoGFF _sΊ+]e2$WVA| kjj=e˖l(RRR6o|Ѫ*^?o<8 8t萃Æ \nmmmrr`gg7n{XXNJA_~ҤIPRQQ~oooa1pvvtg555B; ѣvvv۷o6 tttܷo)_͗-[&jWWӿ[AQ7̜9dEY[[Uxzz EAJrR||>ȑ#GytҥK :IzӧOKK oj$OWZ5m4===.YSSSRRFrbT]]gee_ ͞2eJPP&쬫|ǏƮ\Z&78-UWW;88<"bԨQZhh +**n޼yԩԲlmm3ux8^z߾}$/YbԩSGYUUUPPpʕt39?s vP [b<[JG 3ܹ/^3 IDATl.]5k֠/ oooJQGGGAA:tHJt?pЗ`T{>}*Yy2;(/(SNm޼͛rkb Ν;*fG$rss˗:JӦM׿%f3"lJZ7nlܸҥKX%`|;w6mty9=& k׌$ئҥKI#ƠA7n 9v@|ݓ^رcl̙3LTk.(+./xY@Zӿ'Niz5=== )|E1z{44TB,k yɓ]]]E0[(uu[nMr"`I5(蜯=:55544T"] YpAocbb555"AZZZn׿%+W޿____R[PPЕ+WP,(W޽,@o]]]tg]TTŋ}||}1Ù7oޣG`So޼y̙A`A˗/t钡 __dgg/_|H 3g=SLEEeΝ111n4 ggwŋ;wҍu-9S477ܹرcuuuJ% lɒ%|?(OOO4~w8 N >LHH*))RUU>|ѣ===ΨΝ;|dW Rqǎ'N@i1 ^{mݺu$E)>l֭^:|pdd$y@(~PWW_>}^X `0 _}Տ>Ԕ8R-蔫"#QE555[n=uFO>_TTTLII_= ._,h?zhP'Ϟ=ꫯ.\ب_& ՍX~;t?1"88~ȑZZZ W\$isk֬$>4-***lrҥ&E@d:::ӦM[~Yd#iff/ճo@^@*JKKlrʕ&,jiiqA6mߗl۶m)͛7Ow]mmm7oܺug%%%lp…/` ٶmիW<8YKK˵k׶mV__Ow?HcǎIAw U<|ǎ.]jnn; ȇϟ_paΝ +VܸqCUUUR Po=sLcc#Y@444:uo&$R8;;߾}cqF3H@WWמ={=Z[[Kw?;;b&<<֖ ^UUӧo߾}#GRBk hooS^^_Ђ`XZZ]vŊrrrKJJJJJ;:::;;UTTmll\\\|}}2M ǏرH޿x Aw5ϟ߽{waa!F &>{K.ѝ@ZqƮ]#33sΝnݢ;Tk߿stIIIٱcGtt4-'%%ڵ+66,bbbvؑ|>???wܡ; (_Xb F … R/\?ѝ@bhii9s̱cǺgϞmmm; dSu,,:tM|An .}"rccc\.Y%{DwPF111~)ǣ; X+..oܸAwP^W\9~xyy9v &@mmSN>GwP^'N8w\CCYD'@ssիW9NwPv  ".YN4)(( /knn޿rr2v OxԖE}}}SS.;)TTTtttӱ%(Țuuqa"8)f0YYY555tg ogg@o)5nܸMMMfΝ999xJ L NCwڵ ~zzztgxYQQ޸qd= BKKkAAA 2}޽=; nڴivvvt@YY͛g1&,8ĉ'Of0 330www 8p ## /dН`UUU7ort y-щ;޽{)SA6 hoo߹sgYYA jDD?)_(۷ӝr?n;\+W~N 5mڴ UUU ᫯jnn;AkƍtgZvvvee%Y^GAAAtg''MOwOiiitPf/\à /q,NA O>b ?~ `0 .bXtg@CCÁp,K>nܸO}CCÅ H/xg}}}KKKCCC--- MMM--fi ^DGG[nӦMӧO`Έ;wuttH/`2L&fZ[[X[[[pCUTTܹFf,Y"@ :;;xxxѝ@I_.^rJMMMHwhhhIIICC`0l6p8##cǎ7nرZZZtP( >/ږ,Yr힞 ͯ_ RRZZ'@d CUUU]]ʔ)^^^ =z/_?'[lӓR/XYY-Z\}P1EAAA!!!&Lѡ;Re˖EEEjjj/_0a񶶶FFF޼y[}0LIpp+秡Aw."'<YYYյsNigoVNNNnn90TUU G1iҤ)S`;NH(--rJUU/o7o|UT)S&NXYY* ٳy?$? rΝwΝAAA%,+222!!!==f <{lOOO =e999o߮􂼼G?p8%G;wnii)+2}aÆ1LC$s۶m&pܸqc̘1Z7|3&& Y:::ƍ  Į>IOҢq׮]`Re򪪪Xϟ奦Fw"HOZ[[Ǐ777b6}̙INsW\acc7g___ y1I @RRRll0 \m|||%a@Nrrrqq1HuuuNB͎;w KRR҉'$߬Y0;E|a޼y֭[#""0#{ɓD!?aaa!X|yTTTFF 6lxxĉNC&'w{H r6668J4Vڴi… 1S)rrrbccE… 1111bg!aXVVV-ڰaʕ+ ݡ@D{'Op/ojjڽ{1cCNOOgZZYBCCGAw> /**˗/D'N>}: JEE!22r/@1/&&&55U}]PPyf׬Ys޽Ri%gϞ=qDĈAxyyG={&N#}}}?5󸸸,_ɴ}w?ya`-\tww_p!11Qvo3䈪ϧ~;︻X,UTWWƖWTT|Zm Аdrssۼyʕ+?bȈ`.ӧOKMK./pO_ϟ?}@[[[BBhknn>|ff[;6l2''' Ak׮ݰaCPPq " mmmMCz{{%YZZYF lܸô"A`|>?+++%%Eiݽ{޽{!!!R/oKvmݺu̙zzztg^ Y555Oӏ痔;v[WWWJ`llvXjv ÿ)Shjjҝk׮ѝDxb NI!J$S{.^H"]5vE=zT}qϞ=~~~Sy̘1oA@uuuƍC4'ݙXY" JWWwŊEq9rd+[[ۯzѢEtQeddkƍCٳiii󇾾VUU &H/EDTT˔)S榢"ckƍknnNOO; M__9Y@A @^^^\\4]cc[)KSSscǎ/͛7oϞ=,,@ M6X 0d|> W^q5|~ss3ϟrO>;(!<(//?w7N}1L--#v"/pssЈV o뻹ҝ>^ׯ_ͥ/ccERЗ888ݻʕ+?SN@aGGGVVӧODrrɓ'rȑV#)ܷoرc044\x1A@(MMMt'lPZZF!|=j2hkkO<$` 6l߾}ennnݺI&]ZZJw {%%%ty!==mmmekkrJuuu ;wl|ۼyѣKII;= Fi!ׯS0xyy͛7OvJQSS[nɓr`oݺuĈtgA466>~ *Eyyy׮]+///KKE 6f|9sѝ ?~  HHH;ȷ >_UUBAA˗/J/&9z7xC'ӳXH {555d***y+c5++4¨_322(4<<͍D`0֮]Jwc .\x1ɲ'O477@mmv 5j? ڵk?p8tgbccNrl!#ϯ/޹s'::O}ikkM=c0>>>aaaT`0<<<Ν@ __y1  |hooOMM8?~, ן:ue+#MLL^yLaG Jw 3G_jj۷(mڴi,eXӦM h?Ύ x0T}}}ԧSww RSS)OMMmԩliaa:j(iw@n„ X ,; {{{d'''4+((tRee%}مIQ3nܸPv0(##pﺺ:;;dCo޼ѣib&M$Dí|}}\RRR(qd3%%(R[[{b 2559sUWW 9 #tttfΜDw]zz:\,ZHJll;w('$$HΚ5DsҤIR*++`3P/\.777W޷hoo?qD^^fϞ!3ttt%,g͚S;;; 7^vuu/\@͖F >|d]`dԩSAiii(@xɴDޟ9==G}3fp8I;fI5 Al6{...,,@<`@[[<6gϞ;v,,,̙#-A-,,% dY[[O>ӧOtf_ ޜfHܝ;wݻGy cʔ)AAAⷦ/~SRb kmmˣDP )SRR|>]i$},ZQLMMM&Z@z̰,Lw'11(R~yj5 sN{{SJ*00 rcH =|paa![...l jhh8uTCCC [[[ooo<61NuuuI,--_}Ue0Ç={6vXfjjJweٳjx ={699W}1̹s;VUUUuuu'M$#g#GdtQj</77@ooo~~>Q}Ԭщ^yIPa Ť5eggS(<ɡ1^|&L0yNVWWquuR*)1cf.''/Oݶm[CC}wyg^y rgذa:D //((--ݿ?5-Z4y'O^$)a0f*,,;ȁ >_QQAy{RxD_CCAN999a)0zzz/x?A{gll,̋q/&9{l===(llΦ7 e\EM_sp8@͜9蕓G$O}G===td2?cihhiiiQ @J|}}tS=}5f̘sjhhFSS3<<0RLR' .jʎ۷?{#F02 @jHO@@6QeeNI/**fJ쨯ߺu+5}]A#55L0b{{{(\l~/>}Jw8q"%%/^d2~I]]}ڴi 555S(2j&7bק@wwM)K]]}ݺuMA `JKKQߟ(111.]St. / m~/([+kzzz曪*j_l/5P sH~/NB>_PPp!jV5*22K$l]P&88XUUJcrNBǏ?yV\9jԨ;zhj)Tuuuww7)@1 oUWWgjV|~X,MMM K]===i9$-zzzn߾}]j3gNpp0A*** il6J 9&AJϚ_KK˩Srrr(`ZjΜ9X IUUOꢠ;++իWS-Fd2N***2Iwmmm7oތ/aiiIAG@@:LX|>رc tgo(HwiL>O7򢳳3&&ƍto8 J~ c777C֞9s rʨ TRp܌gϮ[NEE8ԩu#==PSSSxb9::bA*- N2J[ _~4i/Y`0>s-]`迟KTTwaQ^g* X0j(v( ֘ɮ61\OwKbFSX@,("vTDi˔ɦ*u9Sϋ̋{'ȹ99x!y~*Ryƍ~"tXZZN:B_HI&M>ʊtiy8:z1 :ǎ#94M;99%&&&&&b^J -rqq#wt c`566Π޽gϞ2AGԫD\SeTotҒjT{X,$%%V(J*ۓNaPtÇ:G: !!@7꟢(Q&tt&/^wVY[^ ]/5LF:1]<\MMͱcDzHao{tzb1{;xs*ڵk3“1tT*]paRRξwsN1'-x%'O 윔@zG Oikk#t @W1H4mڴM6;F{f.Y|>t](='SSSO>(: l H4eʔ{a!\.t](^VVF:NԩS oUbxɛ7o6n(D tRRRN:%I bxӦMSL1]Z%'MB D  SRR_N:ɓ:%H {OB:;rȉ'I]!ccc {O ! hjjڳg˗J%,cٿ (>zGH!b$ד`;t@3JO?ty GucXv#YSUQQA:1 '4(55u٠j"ȀO|*DxIAMfM:ըVE=xtc,#_iVuuΝ;o߾B}G،3D",dM> #O,LF:A_H90sL#"(..nӦMƶm,sss JKK5BA:D7n5kQuH4s̍7_PTVVNa,,,HG݅y/_>p}*HoΙ3HVbxoEmm-n&:-@Rvu…6YtT*ݰaܹs ~M,̙a)RP(ZqÇ(sskΟ?߀H$[v%,ܸq/au)lҖÇR>|}AwdWS9r1\N: bP#^licwIIIv `trrr222jjjH6@w=_Xd\.?}?~L: yꚐTJ:gDdG8p̙3*t0 JĉGōԺ&""B"N@(0p݅QyfzzݻwI?۷/xf`X666LhmmHIIy,`ZZZ;vvYOhii@Y(277b, t]uu?eh˗*++I 177'RG@,8/۷o/_& Vmm?Nt@ 8pX,&RGb3N.geeڵt0L_yyy988P虎 EQVVVwܙH: 4kBCC-,,H}IJAAA8hBgUVV~9994HPdgg8pt+6aeeE:N qttc& tJOHgqOѿ}|A@_uR( c \._n݊A#N:J)**Ύt c++mZZZvر{Y@ڵ &.+7:/\.t\ccG}L: GOrI=y(aРAڎTUUo;wNPʕ+}\.'.""ޞt o]*6668 Hݺu7э3۷oߝ;wHxaaa~R`ٮ!!!NRΜ9ob %ϟ?sN\]]l6 ߺT(rqq. RRSSyRTT}:AÝH`iihnn4)۷o*++Ix#G$ z(E㏿ZA@\~}֭8_XK੺Wi^Ь7~w:x+WHgi:22Օt0(;PBXnݾ}HgP(]_ & A&k) hCkk/k.<*++۾}{yy9 Б(OOO)@tx<-mhjjZr?~L: ٳt@ tss# D P(RВW^y/x,+T*՝;w>fY# 2dn;r_OHgАqIA#l6;22@]lmmJT>RYTT__gkk@zr/._}ѿ"Ǐᇛ7o % JO {XXX,x`7|f͚/rY\~;v055 uww' JO x`J:rȊ+;D:0?!:/ I[}||qRT/^\r={p4QikkLKK#:fCBB|||HC`nn{u}%%%T*Uii駟~N: t!88P5`P5WYYy?ҥK tЮ֝;w^ptM;4944Zi[O|@>O:tJOG/`A EQB5//B@(ʚ[nY[[K$ҡ{_{fAs}3gNHH `4P(277yfAAn2HݻvZYYñƣ}ܼzWrÇŤ!L055&cCR?~|Mu 033o[lzuΜ9U)E_vƍJR#_tP{{Ç +++-,,d2ի$@{_z%\s=]vm+fff555ZZZJKK lllb1>A~}1O/ϟ?РAQmXiں͛Xpƻw566ؘa;^kaW^rÆ [x1v4V(255mooǛCR=y򤸸իΝD) 69sm\//\0""?;MI322ݻҢ Ν;W^MIIy'OfIG3^>z( </00'EPuj ~Y}J$??<+Dսׯ_z=)))44t0?1:::,,޽{)򊊊;vfff;v\|Y.I# L{5q *ѣG=*..trr9rdllhΝ;۶m{ %α2t0"Zikhh}ب>3tǎ#GD1DTG;nݺ?zA 9t0.Z)B0...;;;??__R)--=qT* 9rdtt%tZzܹ'N?afӧECCCaasrss/^X]]O-,,VZ꯾ ̂ޓdƍ & Ŋ?|Gp)tL.򦦦Ǐ;v~ۗTPktʕg֪3+gmYr+3ׅA 4M{xx$''< B(KKˤ;wܿ_( BXQQE4>>>>>>nnn2qCCý{nOqqqqqG}Rٕ3v|||͛'4 [UU,=kky999Fr|ܹd4M ,--LG( BRlhhQrGCRgロ0aߩT^xǩz :tϞ=h EQ祗^|rqqg1m]GU#ƍ꟢'Ob/lmm_x 3BCCcbbh355]f 3w644|7of`@ 2dѣID(jʕ̼ @M ,fNJ{K.k{h5kHcPpppHJJ#4%>>o]v'x33Ǝ@QT|||``lgٲe)wؑ{Xl Po36aƍcu9rG 0X( MNN`̖,Y1??Y{<oѓ'O&.E-]4<<_i:666,,JѣGO<بY{4M8t䭷bSR888̙3n{qD"ի]]]Ie˖0?@x<ޜ9sԜ\Y{4M>|֬Y@(*999::h0a5_~!/^{5.K:Po:99A"hܹ}e`Vcc/\,=>rJAL(jV hСC &=HRϏ=,Ј脄)X(j…F"lmmg̘\rY{:>DW_}ݝ`r111 )333333= z/^8((t Y(]j)=9qDf^e{nZZ͛77bĈENt M3g7nebb2i$lnn8uB,=OOKRAp(t͚5#BBBFџ׮]KKK+++c`T*]z?E4rJHD: @XYYM4ۛYGe`͎2e !\I&MD:@X,Vttttt4UR?>--ڞl2333A:(TtR???A:裏10 zennn:NW ^bD"!|ѣ###y}:==U۳BaRRҐ!C\.,Е@Q@ ;vY8Vgƌ[ngý:kС˖-0`hYhѠAHg,ӧ˞8zs|#UWW;  3g\rD"!@+PEY^|Et1++I&00g`tP(6m?O[[[YE EQ,+>>~ٲe...l6 .d`J*))裏" 'LvZ'''Y EQl6;))iɒ%] .d`Vcc~XUU,:@0zW_}ݝt2@Q]dIbb#:t@  4iT*եKv,:>?bĈW_}ӓt3@Q.\hoo]AӴwǏmmm ̂.6l% U(+W?-:tt̘1 RTǏg`tϏZn]@@, 1@QU̙cmm`X}Yx13РAk׮g` Peee~zBO?Ց1bԨQ̌;zS~0Y0@QU*(iiŊl6q\.g`tL 1bÆ 8x D?VTTT*҉$7{lfT۷_tY1P8f̘0r>m۶ݽ{x/h ܻw- 'O &L]<PūV|q +V0ommOKJJ ӦM[n3G8#*ED ?ٳÆ efVVVVJJ veffvZGGGYtqX,֔)Sd2ه~xQRI:0r͚5BY555| ;'r޼y+Wd^0sYXXd{ 9sfxx83w|OzIDATKrrrRRX,&@KW\\'l߾t:OOTfv߾}{/^T( _lY\\'@5wwW^y/ f/_տBo '%::zcƌp82ߎvvv˗/d[l}68- 6m3rrrRRRf'Llٲ(E:.2@QL&J~).l2HfffWd jhhغukii1o#E(Μ9s~~~X< EQԩS%ɧ~zqq@&O(''uSttQLMM#f-EOCRرc]]]ݻt(P?իWqo.Zhƌ̼` o߽{t"ԩS|>>|Ff!6zMA 6mccxb͛7ggg']`gg7o<{{{fUVVٳƍ 2B2,..nٲex@PzN(>>صk.".!!LJkwY [zɓ?0^p87o~wI1jǏg´4q &&ٳE"Vڀ[4M&&&nݺuСخ@JJJd`Bؽ{wvv6, 6|Wx@{P4bEFFOo3{ƌ3h f|833]۳ MdҤIK. `X&MJOO_z64k{ll3JKK裴6ҡ Ǜ0aBXX'N>|X.k{!177?ܹsq'NA qӦMcǎ.^CRI:~߿رcuΝ[n100$'';88@6lXPP?gϞ7oVTTtL$M0!((YMMM?3 P(tvvHLL d ybxѢE111wNKKqFyy9~*#""F)ɴ=KR奤TUUi{...AAAӧO6l2@Ӵ+&LgϞ#Gܸq5/lmmǏ?`f;v̙3 _|>_􏍍1bD b^|Ř}/s .;lذh>Yr… onn,=KǏ9R*N]s8N~V^=~ǏTWWEرc10Kp\̘1#G$@Gq\__߾}3&--F)tȑf~}uKKٳg:B |Gicc;} N9vXVVV^^^YYB iƍe`֝;w[RR,}! ]]]{9, >>>ǏʺpBIII{{;h 5jThh(N8/00K/D~ 4(**K7\?sΝѴb7N$i{R~]?~Y/44tȐ!AAA6s>}ٳׯ_ohh M[ƌӿfUWW20KgX,++H???0@/40yA]r%77777ҥKw0Ϗ5j+W޽M۳tqpp ׯ0<(zȑQQQ7nܸt҅ rrrn޼J:fg„ ... *//߳gϭ[k/Äd#GϿxٳgϟ?_[[džJ${nС u|̙Cbaaa!!!mllHB0,)**jyyyYYYwcC}||&Olnn;vϽB0 """((} AAAC 8qb^^^nnnNNNUU}mcc3jԨ20ȑ#YYY "i{{AEFFzzzZ[[B0Xl6}w޽}˗Ϟ={ܹF:p8ydPYJh۶mMMMڞEiPPPTTTPPP߾}|>P@ D~~~~~~)..=}+Wt*1GGlj'ӇYw.((``A```xxx``YKKKҡ$ZFT>}:;;͛:P(ݼy3SO?ڵkͤRnnnqqqMݺu\oTTTxx5& t r.......]ξrJmm-TRtĈf`VkkkfffFF+,,,<vvv8 [wrÇW\9st鐐-[10d֬Y 8@vvvVVV<t4i~pccc+++.^x'Oh5I:Ei׮]/_f`? ۷L&]'JRWWɓ_pHfr8课N_T*UaaaLL=h  JD ^.*RPQQqs޽{_yƍSNe`Qظz:pܤRH$255Ň(JƍyyyW^ϯQ*BpҤI}6R{,b999y{{{{{{yyyyy9:: \." v@P[nUTT߿<= /))a`EQ"H߿XPQ*JT* 򆆆wwwUTos8ggg֖@s HQQQppp_K;@`nn.,,,\]]]]];yX,Mfz y뭷BT*xm|>_ ,bwW|#x24ݿIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/metadata/info.guardianproject.urzip/en-US/images/icon.png0000664000175000017500000000260514717152070026767 0ustar00hanshansPNG  IHDRw=LIDATHǥyPuƟ{².˲ 8ႈ 628yr OCM5V^ʡbY"0,,{DPXϟ>ߋ4zљp a22x@-q &6'xnب4Ռs-<!a^zD\W6=YMQ2ɗw|՟-f̶vJA؜s1Ym®n>/]ҹr8୔@(r1.}j:Oi> DowJ'CRRVJ eMPy|{|7sRNQy(KNnቹM{p՝Ғ6Q:h++-LxȄsՆIT~M≹\{V{TTX@vL (Ćyq]zAnBFZmHocs  Çd6ihh CCfQ!j2OPSեlUY G?15t"GUˢy*(M6\$""DJiujdo5GcF^G"@ Vx\|T$SgOt ::erOK\]Ϟb¶hӫnZ>5^7 S~6B3Щb#RجJ[ =64%1N ('5+٥bvTD%W< `y*VnJK6͵[h8l3PA$M;QZ1[,U3|.nlIuG2 3 eb2V'0`ę&Uڂg ,.!蒎Q1 F|UJvuӆaL06 cLzN׎zXYٹLGBr8#0LmMOS7onDVv͞} DLژ.C{e 󳵴&cY,ZKSiZ=I`҇6%]Nm},ŅU5SN܈mݷ<65}E޷'0CקԄf.̙3;EnK=_d*/r.Ѵ#>)?/Ԟ H\o7aU%(|${hjǜIL~ cS/LҘPPX"1sgsLuP!!"@&849^1|'3}ȕs_-]$IVM1,,D-aEDA̤rIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/metadata/info.guardianproject.urzip/en-US/short_description.txt0000664000175000017500000000002214717152070030356 0ustar00hanshansshort description ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/metadata/info.guardianproject.urzip/en-US/title.txt0000664000175000017500000000000614717152070025737 0ustar00hanshanstitle ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/metadata/info.guardianproject.urzip/en-US/video.txt0000664000175000017500000000000614717152070025724 0ustar00hanshansvideo ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/tests/metadata/info.guardianproject.urzip.yml0000644000175000017500000000305314770502071023653 0ustar00hanshansAutoName: Urzip:本地应用的信息 AutoUpdateMode: None Bitcoin: 1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk OpenCollective: f-droid-just-testing Categories: - Development - GuardianProject - 1 - 2.0 CurrentVersionCode: 2147483647 AuthorWebSite: https://guardianproject.info Description: | It’s Urzip 是一个获得已安装 APK 相关信息的实用工具。它从您的设备上已安装的所有应用开始,一键触摸即可显示 APK 的指纹,并且提供到达 virustotal.com 和 androidobservatory.org 的快捷链接,让您方便地了解特定 APK 的档案。它还可以让您导出签名证书和生成 ApkSignaturePin Pin 文件供 TrustedIntents 库使用。 ★ Urzip 支持下列语言: Deutsch, English, español, suomi, 日本語, 한국어, Norsk, português (Portugal), Русский, Slovenščina, Türkçe 没看到您的语言?帮忙翻译本应用吧: https://www.transifex.com/projects/p/urzip ★ 致用户:我们还缺少你喜欢的功能?发现了一个 bug?请告诉我们!我们乐于听取您的意见。请发送电子邮件至: support@guardianproject.info 或者加入我们的聊天室 https://guardianproject.info/contact IssueTracker: https://dev.guardianproject.info/projects/urzip/issues License: GPL-3.0-only Repo: https://github.com/guardianproject/urzip.git RepoType: git SourceCode: https://github.com/guardianproject/urzip Summary: 一个实用工具,获取已安装在您的设备上的应用的有关信息 UpdateCheckMode: None WebSite: https://dev.guardianproject.info/projects/urzip ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/tests/metadata/info.zwanenburg.caffeinetile.yml0000644000175000017500000000016214770502071024117 0ustar00hanshansCategories: - Development Name: Caffeine Tile Summary: Test app for extracting icons when an XML one is default ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/metadata/no.min.target.sdk.yml0000644000175000017500000000021114717152070021625 0ustar00hanshansCategories: [Development] Name: No minSdkVersion or targetSdkVersion Summary: An APK without any block in AndroidManifest.xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/metadata/obb.main.oldversion.yml0000644000175000017500000000050314717152070022236 0ustar00hanshansCategories: - Development License: GPL-3.0-only SourceCode: https://github.com/eighthave/urzip Bitcoin: 1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk Liberapay: 12334 AutoName: OBB Main Old Version RepoType: git Repo: https://github.com/eighthave/urzip.git AutoUpdateMode: None UpdateCheckMode: None CurrentVersionCode: 99999999 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/metadata/obb.main.twoversions.yml0000644000175000017500000000045614717152070022463 0ustar00hanshansCategories: - Development License: GPL-3.0-only SourceCode: https://github.com/eighthave/urzip Bitcoin: 1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk AutoName: OBB Two Versions RepoType: git Repo: https://github.com/eighthave/urzip.git AutoUpdateMode: None UpdateCheckMode: None CurrentVersionCode: 99999999 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/metadata/obb.mainpatch.current.yml0000644000175000017500000000047414717152070022563 0ustar00hanshansCategories: - Development License: GPL-3.0-only SourceCode: https://github.com/eighthave/urzip Bitcoin: 1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk AutoName: OBB Main+Patch Current Version RepoType: git Repo: https://github.com/eighthave/urzip.git AutoUpdateMode: None UpdateCheckMode: None CurrentVersionCode: 99999999 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/metadata/org.adaway.yml0000644000175000017500000002044614766514130020435 0ustar00hanshansCategories: - System - Security License: GPL-3.0-only WebSite: http://sufficientlysecure.org/index.php/adaway SourceCode: https://github.com/dschuermann/ad-away IssueTracker: https://github.com/dschuermann/ad-away/issues Translation: https://www.transifex.com/dominikschuermann/adaway Donate: http://sufficientlysecure.org/index.php/adaway AutoName: AdAway Summary: Block advertisements Description: |- An ad blocker that uses the hosts file. The hosts file contains a list of mappings between hostnames and IP addresses. When an app requests an ad, that request is directed to 127.0.0.1 which does nothing. There are options to run a web server to respond to blocked hostnames and to direct requests to the IP address of your choosing. You can download hosts files from the app but it is possible to use your own and to add certain sites to the white- and black-lists. [https://github.com/dschuermann/ad-away/raw/HEAD/CHANGELOG Changelog] Requires root: Yes. The hosts files is located in /system which is normally read-only. RepoType: git Repo: https://github.com/dschuermann/ad-away.git Builds: - versionName: '1.12' versionCode: 13 commit: ea5378a94ee0dc1d99d2cec95fae7e6d81afb2b9 subdir: org_adaway/ buildjni: - yes - versionName: '1.15' versionCode: 16 commit: 4128e59da2eac5c2904c7c7568d298ca51e79540 subdir: org_adaway/ patch: - defprop.patch buildjni: - yes - versionName: '1.18' versionCode: 19 commit: 0b9985398b9eef7baf6aadd0dbb12002bc199d2e subdir: org_adaway/ patch: - defprop.patch buildjni: - yes - versionName: '1.19' versionCode: 20 commit: ab27f4dab5f3ea5e228cfb4a6b0e1fbf53695f22 subdir: org_adaway/ patch: - defprop.patch buildjni: - yes - versionName: '1.20' versionCode: 21 commit: 695e3801e4081026c8f7213a2345fc451d5eb89c subdir: org_adaway/ patch: - defprop.patch buildjni: - yes - versionName: '1.21' versionCode: 22 commit: 65138c11cc8b6affd28b68e125fbc1dff0886a4e subdir: org_adaway/ patch: - defprop.patch buildjni: - yes - versionName: '1.23' versionCode: 24 disable: no source in repo commit: unknown - see disabled - versionName: '1.24' versionCode: 25 commit: f811e53e1e1d2ee047b18715fd7d2072b90ae76b subdir: org_adaway/ prebuild: android update project -p ../com_actionbarsherlock buildjni: - yes - versionName: '1.25' versionCode: 26 commit: ff97932761cdee68638dc2550751a64b2cbe18e7 subdir: org_adaway/ prebuild: android update project -p ../com_actionbarsherlock buildjni: - yes - versionName: '1.26' versionCode: 27 commit: 33d4d80998f30bafc88c04c80cbae00b03916f99 subdir: org_adaway/ prebuild: android update project -p ../com_actionbarsherlock buildjni: - yes - versionName: '1.27' versionCode: 28 commit: 743d25a7e287505461f33f4b8e57e4cf988fffea subdir: org_adaway/ prebuild: android update project -p ../com_actionbarsherlock buildjni: - yes - versionName: '1.29' versionCode: 30 commit: eaa07f4 subdir: org_adaway/ prebuild: - android update project -p ../com_actionbarsherlock - rm -rf libs/armeabi/* buildjni: - yes - versionName: '1.32' versionCode: 33 commit: 71ced3f subdir: org_adaway/ prebuild: - android update project -p ../com_actionbarsherlock - rm -rf libs/armeabi/* - rm libs/android-support-v4.jar - versionName: '1.33' versionCode: 34 commit: 9d63c18 subdir: org_adaway/ prebuild: - android update project -p ../com_actionbarsherlock - rm -rf libs/armeabi/* - versionName: '1.34' versionCode: 35 commit: f2568b1 subdir: org_adaway/ prebuild: - android update project -p ../com_actionbarsherlock - rm -rf libs/armeabi/* - android update project -p ../org_donations - versionName: '1.35' versionCode: 36 commit: 7442d5d subdir: org_adaway/ prebuild: - android update project -p ../com_actionbarsherlock - rm -rf libs/armeabi/* - android update project -p ../org_donations - versionName: '1.36' versionCode: 37 commit: 83fc713 subdir: org_adaway/ prebuild: - android update project -p ../com_actionbarsherlock - rm -rf libs/armeabi/* - android update project -p ../org_donations - versionName: '1.37' versionCode: 38 commit: 70da32b567122b701cdcb1609b780eb85732028f subdir: org_adaway/ prebuild: - android update project -p ../com_actionbarsherlock - rm -rf libs/armeabi/* - android update project -p ../org_donations - versionName: '2.1' versionCode: 40 commit: v2.1 subdir: AdAway init: - rm android-libs/Donations/custom_rules.xml - git clone https://github.com/dschuermann/HtmlSpanner android-libs/HtmlSpanner srclibs: - RootCommands@c940b0e503 extlibs: - htmlcleaner/htmlcleaner-2.2.jar prebuild: - rm -rf ../update_zip libs/root-commands-1.2.jar libs/htmlspanner-0.2-fork.jar - cp -f libs/htmlcleaner-2.2.jar android-libs/HtmlSpanner/htmlspanner/libs/ - echo "android.library.reference.3=$$RootCommands$$" >> project.properties - echo "android.library.reference.4=android-libs/HtmlSpanner/htmlspanner" >> project.properties - find . -type f -print0 | xargs -0 sed -i 's/org.rootcommands/org.sufficientlysecure.rootcommands/g' - cp android-libs/Donations/ant-templates/other/DonationsConfig.java android-libs/Donations/src/org/donations/ androidupdate: - . - android-libs/Donations - android-libs/ActionBarSherlock - android-libs/HtmlSpanner/htmlspanner buildjni: - yes - versionName: '2.3' versionCode: 42 commit: v2.3 subdir: AdAway init: - rm android-libs/Donations/custom_rules.xml - git clone https://github.com/dschuermann/HtmlSpanner android-libs/HtmlSpanner srclibs: - RootCommands@c940b0e503 extlibs: - htmlcleaner/htmlcleaner-2.2.jar prebuild: - rm -rf ../update_zip libs/root-commands-1.2.jar libs/htmlspanner-0.2-fork.jar - cp -f libs/htmlcleaner-2.2.jar android-libs/HtmlSpanner/htmlspanner/libs/ - echo "android.library.reference.3=$$RootCommands$$" >> project.properties - echo "android.library.reference.4=android-libs/HtmlSpanner/htmlspanner" >> project.properties - find . -type f -print0 | xargs -0 sed -i 's/org.rootcommands/org.sufficientlysecure.rootcommands/g' - cp android-libs/Donations/ant-templates/other/DonationsConfig.java android-libs/Donations/src/org/donations/ androidupdate: - . - android-libs/Donations - android-libs/ActionBarSherlock - android-libs/HtmlSpanner/htmlspanner buildjni: - yes - versionName: '2.6' versionCode: 45 commit: v2.6 subdir: AdAway gradle: - yes buildjni: - yes preassemble: - renameExecutables - versionName: '2.7' versionCode: 46 commit: v2.7 subdir: AdAway gradle: - yes buildjni: - yes preassemble: - renameExecutables - versionName: '2.8' versionCode: 47 commit: v2.8 subdir: AdAway gradle: - yes buildjni: - yes preassemble: - renameExecutables - versionName: 2.8.1 versionCode: 48 commit: v2.8.1 subdir: AdAway gradle: - yes buildjni: - yes preassemble: - renameExecutables - versionName: '2.9' versionCode: 49 commit: v2.9 subdir: AdAway gradle: - yes buildjni: - yes preassemble: - renameExecutables - versionName: 2.9.1 versionCode: 50 commit: v2.9.1 subdir: AdAway gradle: - yes buildjni: - yes preassemble: - renameExecutables - versionName: 2.9.2 versionCode: 51 commit: v2.9.2 subdir: AdAway gradle: - yes buildjni: - yes preassemble: - renameExecutables - versionName: '3.0' versionCode: 52 commit: v3.0 subdir: AdAway gradle: - yes buildjni: - yes preassemble: - renameExecutables AutoUpdateMode: Version v%v UpdateCheckMode: Tags CurrentVersion: '3.0' CurrentVersionCode: 52 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/metadata/org.fdroid.ci.test.app.yml0000644000175000017500000000017314717152070022555 0ustar00hanshansLicense: Unknown RepoType: git Repo: https://gitlab.com/eighthave/ci-test-app AutoUpdateMode: None UpdateCheckMode: None ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/metadata/org.fdroid.fdroid.yml0000644000175000017500000004405414766514130021705 0ustar00hanshansCategories: - System License: GPL-3.0-or-later WebSite: https://f-droid.org SourceCode: https://gitlab.com/fdroid/fdroidclient IssueTracker: https://gitlab.com/fdroid/fdroidclient/issues Translation: https://hosted.weblate.org/projects/f-droid/f-droid Changelog: https://gitlab.com/fdroid/fdroidclient/raw/HEAD/CHANGELOG.md Donate: https://f-droid.org/about Bitcoin: 15u8aAPK4jJ5N8wpWJ5gutAyyeHtKX5i18 AutoName: F-Droid Summary: Application manager Description: |- Connects to F-Droid compatible repositories. The default repo is hosted at f-droid.org, which contains only bona fide FOSS. Android is open in the sense that you are free to install apks from anywhere you wish, but there are many good reasons for using a client/repository setup: * Be notified when updates are available * Keep track of older and beta versions * Filter apps that aren't compatible with the device * Find apps via categories and searchable descriptions * Access associated urls for donations, source code etc. * Stay safe by checking repo index signatures and apk hashes RepoType: srclib Repo: fdroidclient Builds: - versionName: '0.17' versionCode: 8 commit: c626ce5f6d3e10ae15942f01ff028be310cc695a init: rm -f build.xml - versionName: '0.18' versionCode: 9 commit: a6c9ed8d06b19315df9ba9041324f78139f7d238 init: rm -f build.xml - versionName: '0.19' versionCode: 10 commit: 540b7d0522f4d67a4896697f7342e4c75b4cbf59 init: rm -f build.xml - versionName: '0.20' versionCode: 11 commit: ddacfb856ad66c1c367e20c9cbecbfb15fe00813 init: rm -f build.xml - versionName: '0.21' versionCode: 12 commit: 49fa56aa6626a190f2d711120b69e435e9e615b1 init: rm -f build.xml - versionName: '0.22' versionCode: 13 commit: a6a33c942495cc4c74a7cb6e968efe0e00815e68 init: rm -f build.xml - versionName: '0.23' versionCode: 14 commit: aa58a8aad1a1c3832eafb9f1bdd6db8292d2c172 init: rm -f build.xml - versionName: '0.24' versionCode: 15 commit: 9b5fe2976443255b95027abd412f1c1e7f3d27b2 init: rm -f build.xml - versionName: '0.25' versionCode: 16 commit: 43977cc493e47a4dc841c4192ae8a40fb14b639b init: rm -f build.xml - versionName: '0.28' versionCode: 19 commit: f881aabe5bd0ac94771b03f1318a6e0972ab4128 target: android-15 - versionName: '0.29' versionCode: 20 commit: 87b229b95d0909bfd05c65c5670794e743626f6c target: android-15 - versionName: '0.30' versionCode: 21 commit: 497cb19840f79b31ae9590f5abd9e4df832b34ee target: android-15 - versionName: '0.31' versionCode: 22 commit: f99f8a544c7cb4d4a48ad09da00ad281af05f2ac target: android-15 - versionName: '0.32' versionCode: 23 commit: cc3970cc243e345416bfc62781ece6eeefd11495 target: android-15 - versionName: '0.33' versionCode: 24 commit: 58eb580159aa4d54767f0af1736cad233fec2475 target: android-15 - versionName: 0.34-test versionCode: 25 commit: 335d27b725b0f92e9e8804ae09518cd47bc7b021 target: android-15 - versionName: 0.35-test versionCode: 26 commit: a06d18b029392669e98359f86c07e442a04e6a13 target: android-15 - versionName: 0.36-test versionCode: 27 commit: 647e230c9e888c04bb0554078c5aa81da63548a0 target: android-15 - versionName: 0.37-test versionCode: 28 commit: 3c02e3ccc147a34af42cedf7d85f18dc75c8efa8 target: android-15 - versionName: '0.38' versionCode: 38 commit: 99b52c988d203811f434d6ac40675a63d5ae41ab target: android-15 - versionName: 0.39-test versionCode: 39 commit: 9a7d0b9f10710105d51d8206a7faa4408c60c20d target: android-15 - versionName: '0.40' versionCode: 40 commit: 51a67efdf1ee2819bee99d9263b2980dafaf761d target: android-15 - versionName: '0.42' versionCode: 42 commit: 36b815095ef51ca4f21887d973dbc0a50575cd65 target: android-15 - versionName: '0.43' versionCode: 43 disable: sdk doesn't like tzm (at f2109e4e0bf1597c625221d8d2d10050f146ba5a) commit: f2109e4e0bf1597c625221d8d2d10050f146ba5a target: android-15 - versionName: '0.44' versionCode: 44 disable: nasty upgrade bug commit: '0.44' target: android-15 - versionName: '0.45' versionCode: 45 commit: '0.45' target: android-15 - versionName: '0.46' versionCode: 46 commit: '0.46' target: android-15 - versionName: 0.47-test versionCode: 47 commit: 0.47-test target: android-17 - versionName: 0.48-test versionCode: 48 commit: 0.48-test target: android-17 - versionName: '0.50' versionCode: 50 commit: '0.50' - versionName: 0.51-test versionCode: 51 commit: 0.51-test - versionName: 0.52-test versionCode: 52 commit: 0.52-test submodules: true prebuild: rm -rf extern/Universal-Image-Loader/downloads androidupdate: - . - extern/Universal-Image-Loader/library - versionName: 0.53-test versionCode: 53 commit: 0.53-test submodules: true scandelete: - yes - versionName: '0.54' versionCode: 540 commit: '0.54' submodules: true scandelete: - yes - versionName: '0.55' versionCode: 550 commit: '0.55' submodules: true - versionName: 0.56-test versionCode: 560 commit: 0.56-test submodules: true - versionName: 0.57-test versionCode: 570 commit: 0.57-test submodules: true - versionName: '0.58' versionCode: 580 commit: '0.58' submodules: true - versionName: 0.59-test versionCode: 590 commit: 0.59-test submodules: true - versionName: 0.61-test versionCode: 610 commit: 0.61-test submodules: true - versionName: '0.62' versionCode: 620 commit: '0.62' submodules: true - versionName: '0.63' versionCode: 630 commit: '0.63' submodules: true - versionName: 0.64-test versionCode: 640 commit: 0.64-test submodules: true - versionName: '0.65' versionCode: 650 commit: '0.65' submodules: true - versionName: '0.66' versionCode: 660 commit: '0.66' submodules: true - versionName: 0.67-test versionCode: 670 commit: 0.67-test submodules: true - versionName: 0.68-test versionCode: 680 commit: 0.68-test submodules: true - versionName: 0.69-test versionCode: 690 commit: 0.69-test submodules: true - versionName: 0.70-test versionCode: 700 commit: 0.70-test submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: '0.71' versionCode: 710 disable: Broken MTM/AndroidPinning commit: '0.71' submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: '0.72' versionCode: 720 disable: proguard issues commit: '0.72' submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: '0.73' versionCode: 730 disable: local repos broken commit: '0.73' submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: '0.74' versionCode: 740 disable: still some proguard issues commit: '0.74' submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: '0.75' versionCode: 750 disable: repo update progress crasher commit: '0.75' submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: '0.76' versionCode: 760 commit: '0.76' submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: 0.77-test versionCode: 770 commit: 0.77-test subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: '0.78' versionCode: 780 commit: '0.78' subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: 0.79-test versionCode: 790 commit: 0.79-test subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: 0.80-test versionCode: 800 commit: 0.80-test subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: 0.81-test versionCode: 810 commit: 0.81-test subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: '0.82' versionCode: 820 commit: '0.82' subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: '0.83' versionCode: 830 commit: '0.83' subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: 0.84-test versionCode: 840 commit: 0.84-test subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: 0.85-test versionCode: 850 commit: 0.85-test subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: 0.86-test versionCode: 860 commit: 0.86-test subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: 0.87-test versionCode: 870 commit: 0.87-test subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: '0.88' versionCode: 880 commit: '0.88' subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: 0.89-test versionCode: 890 commit: 0.89-test subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: 0.90-test versionCode: 900 commit: 0.90-test subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: '0.91' versionCode: 910 commit: '0.91' subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: '0.92' versionCode: 920 commit: '0.92' subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: 0.93-test versionCode: 930 commit: 0.93-test subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: 0.94-test versionCode: 940 commit: 0.94-test subdir: F-Droid submodules: true gradle: - yes - versionName: 0.95-alpha1 versionCode: 95001 commit: 0.95-alpha1 subdir: F-Droid submodules: true gradle: - yes - versionName: 0.95-alpha2 versionCode: 95002 commit: v0.95-alpha2 subdir: F-Droid submodules: true gradle: - yes - versionName: '0.95' versionCode: 95050 commit: v0.95 subdir: F-Droid submodules: true gradle: - yes - versionName: 0.95.1 versionCode: 95150 commit: v0.95.1 subdir: F-Droid submodules: true gradle: - yes - versionName: 0.96-alpha1 versionCode: 96001 commit: v0.96-alpha1 subdir: F-Droid gradle: - yes - versionName: 0.96-alpha2 versionCode: 96002 commit: v0.96-alpha2 subdir: F-Droid gradle: - yes - versionName: 0.96-alpha3 versionCode: 96003 commit: v0.96-alpha3 subdir: F-Droid gradle: - yes - versionName: 0.96-alpha4 versionCode: 96004 commit: v0.96-alpha4 subdir: F-Droid gradle: - yes - versionName: 0.96-alpha5 versionCode: 96005 commit: v0.96-alpha5 subdir: F-Droid gradle: - yes - versionName: 0.96-alpha6 versionCode: 96006 commit: v0.96-alpha6 subdir: F-Droid gradle: - yes - versionName: '0.96' versionCode: 96050 commit: v0.96 subdir: F-Droid gradle: - yes scanignore: - extern/AndroidPinning/res/raw/cacerts - versionName: 0.96.1 versionCode: 96150 commit: v0.96.1 subdir: F-Droid gradle: - yes scanignore: - extern/AndroidPinning/res/raw/cacerts - versionName: 0.97-alpha1 versionCode: 97001 commit: v0.97-alpha1 subdir: F-Droid gradle: - yes scanignore: - extern/AndroidPinning/res/raw/cacerts - versionName: 0.97-alpha2 versionCode: 97002 commit: v0.97-alpha2 subdir: F-Droid gradle: - yes - versionName: 0.97-alpha3 versionCode: 97003 commit: v0.97-alpha3 subdir: F-Droid gradle: - yes - versionName: 0.97-alpha4 versionCode: 97004 commit: v0.97-alpha4 subdir: F-Droid gradle: - yes - versionName: 0.97-alpha5 versionCode: 97005 commit: v0.97-alpha5 subdir: F-Droid gradle: - yes - versionName: 0.97-alpha6 versionCode: 97006 commit: v0.97-alpha6 subdir: F-Droid gradle: - yes - versionName: 0.97-alpha7 versionCode: 97007 commit: v0.97-alpha7 subdir: F-Droid gradle: - yes - versionName: 0.97-alpha8 versionCode: 97008 commit: v0.97-alpha8 subdir: F-Droid gradle: - yes - versionName: '0.97' versionCode: 97050 commit: v0.97 subdir: F-Droid gradle: - yes - versionName: 0.98-alpha1 versionCode: 98001 commit: v0.98-alpha1 subdir: F-Droid gradle: - yes - versionName: 0.98-alpha2 versionCode: 98002 commit: v0.98-alpha2 subdir: F-Droid gradle: - yes - versionName: 0.98-alpha3 versionCode: 98003 commit: v0.98-alpha3 subdir: F-Droid gradle: - yes - versionName: 0.98-alpha4 versionCode: 98004 commit: v0.98-alpha4 subdir: F-Droid gradle: - yes - versionName: 0.98-alpha5 versionCode: 98005 commit: v0.98-alpha5 subdir: F-Droid gradle: - yes - versionName: 0.98-alpha6 versionCode: 98006 commit: v0.98-alpha6 subdir: F-Droid gradle: - yes - versionName: 0.98-alpha7 versionCode: 98007 commit: v0.98-alpha7 subdir: F-Droid gradle: - yes - versionName: '0.98' versionCode: 98050 commit: v0.98 subdir: F-Droid gradle: - yes - versionName: 0.98.1 versionCode: 98150 commit: v0.98.1 subdir: F-Droid gradle: - yes - versionName: 0.99-alpha1 versionCode: 99001 commit: v0.99-alpha1 subdir: F-Droid gradle: - yes - versionName: 0.99-alpha2 versionCode: 99002 commit: v0.99-alpha2 subdir: F-Droid gradle: - yes - versionName: '0.99' versionCode: 99050 commit: v0.99 subdir: F-Droid gradle: - yes - versionName: 0.99.1 versionCode: 99150 commit: v0.99.1 subdir: F-Droid gradle: - yes - versionName: 0.99.2 versionCode: 99250 commit: v0.99.2 subdir: F-Droid gradle: - yes - versionName: 0.100-alpha1 versionCode: 100001 commit: v0.100-alpha1 subdir: F-Droid gradle: - yes - versionName: 0.100-alpha2 versionCode: 100002 commit: v0.100-alpha2 subdir: F-Droid gradle: - yes - versionName: 0.100-alpha3 versionCode: 100003 commit: v0.100-alpha3 subdir: app gradle: - yes - versionName: 0.100-alpha4 versionCode: 100004 commit: v0.100-alpha4 subdir: app gradle: - yes - versionName: 0.100-alpha5 versionCode: 100005 commit: v0.100-alpha5 subdir: app gradle: - yes - versionName: 0.100-alpha6 versionCode: 100006 commit: v0.100-alpha6 subdir: app gradle: - yes - versionName: 0.100-alpha7 versionCode: 100007 commit: v0.100-alpha7 subdir: app gradle: - yes - versionName: 0.100-alpha8 versionCode: 100008 commit: v0.100-alpha8 subdir: app gradle: - yes - versionName: '0.100' versionCode: 100050 commit: v0.100 subdir: app gradle: - yes - versionName: 0.100.1 versionCode: 100150 commit: v0.100.1 subdir: app gradle: - yes - versionName: 0.101-alpha1 versionCode: 101001 commit: v0.101-alpha1 subdir: app gradle: - yes - versionName: 0.101-alpha2 versionCode: 101002 commit: v0.101-alpha2 subdir: app gradle: - yes - versionName: 0.101-alpha3 versionCode: 101003 commit: v0.101-alpha3 subdir: app gradle: - yes - versionName: 0.101-alpha4 versionCode: 101004 commit: v0.101-alpha4 subdir: app gradle: - yes - versionName: 0.101-alpha5 versionCode: 101005 commit: v0.101-alpha5 subdir: app gradle: - yes - versionName: 0.101-alpha6 versionCode: 101006 commit: v0.101-alpha6 subdir: app gradle: - yes - versionName: '0.101' versionCode: 101050 commit: v0.101 subdir: app gradle: - yes - versionName: 0.102-alpha1 versionCode: 102001 commit: v0.102-alpha1 subdir: app gradle: - yes - versionName: 0.102-alpha2 versionCode: 102002 commit: v0.102-alpha2 subdir: app gradle: - yes - versionName: 0.102-alpha3 versionCode: 102003 commit: v0.102-alpha3 subdir: app gradle: - yes - versionName: '0.102' versionCode: 102050 commit: v0.102 subdir: app gradle: - yes - versionName: 0.102.1 versionCode: 102150 commit: v0.102.1 subdir: app gradle: - yes - versionName: 0.102.2 versionCode: 102250 commit: v0.102.2 subdir: app gradle: - yes - versionName: 0.102.3 versionCode: 102350 commit: v0.102.3 subdir: app gradle: - yes - versionName: 0.103-alpha1 versionCode: 103001 commit: v0.103-alpha1 subdir: app gradle: - yes - versionName: 0.103-alpha2 versionCode: 103002 commit: v0.103-alpha2 subdir: app gradle: - yes - versionName: 0.103-alpha3 versionCode: 103003 commit: v0.103-alpha3 subdir: app gradle: - yes ArchivePolicy: 12 versions AutoUpdateMode: None UpdateCheckMode: Static CurrentVersion: 0.102.3 CurrentVersionCode: 102350 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898792.0 fdroidserver-2.4.0/tests/metadata/org.maxsdkversion.yml0000644000175000017500000000010214770503150022042 0ustar00hanshansName: maxSdkVersion Summary: Test setting maxSdkVersion in an APK ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2121863 fdroidserver-2.4.0/tests/metadata/org.smssecure.smssecure/0000755000175000017500000000000014770510164022455 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2121863 fdroidserver-2.4.0/tests/metadata/org.smssecure.smssecure/signatures/0000755000175000017500000000000014770510164024641 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3001873 fdroidserver-2.4.0/tests/metadata/org.smssecure.smssecure/signatures/134/0000755000175000017500000000000014770510164025150 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/metadata/org.smssecure.smssecure/signatures/134/28969C09.RSA0000644000175000017500000000245614717152070026502 0ustar00hanshans0* *H 01 0 +0  *H c0_0G?w~0  *H  0`1 0 UUK1 0 UORG1 0 UORG10U  fdroid.org10 U FDroid10 UFDroid0 150403094515Z 420819094515Z0`1 0 UUK1 0 UORG1 0 UORG10U  fdroid.org10 U FDroid10 UFDroid0"0  *H 0 Q_aI.r4Px@ K{F}!aPB({d9(AN>(ue>kkIXxꃑ¨ CN@jz`jU ZpJpFk"{mZ Ab&nk2ok ^<@SL7u%v2 [ސ"X\40  *H  Y N~lP V'3hC-v=rǞ`%9'>xڢ<(͐K63y\'^HݴbY+kFe+!)7 HM.6]] viҀQM+GQJexHJt<1zWYyO}QϾ̢{: 6~pkw\\_K'lʸ>7-p^#%g(CiM3fAŧVcIVvxܺ؎m~SM Ų100h0`1 0 UUK1 0 UORG1 0 UORG10U  fdroid.org10 U FDroid10 UFDroid?w~0 +0  *H Y6oOKom7{xN:%߅xvY69~ c_ؚ-"1qX|+Bؓ ph$BWV@^< cpڬlfRbh@RՒdLr>EL+ ʵ5%]5ʙmIٝd`lwÏ &⺏x4>B_ggjL9})././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/metadata/org.smssecure.smssecure/signatures/134/28969C09.SF0000644000175000017500000070776314717152070026402 0ustar00hanshansSignature-Version: 1.0 SHA1-Digest-Manifest-Main-Attributes: jyVcs92M3Hcv9SH+Z3LUjUkRivY= Created-By: 1.7.0_121 (Oracle Corporation) SHA1-Digest-Manifest: 56iXR6DCWVAoifQSUwNTRSK2h4I= Name: res/drawable-xhdpi-v4/abc_ic_star_half_black_48dp.png SHA1-Digest: osunKPxCh8nEVIDLO5+IMccpFig= Name: res/drawable/abc_btn_check_material.xml SHA1-Digest: YFDDnTUd6St4932sE/Xk6H0HMoc= Name: res/drawable-xhdpi-v4/ic_video_light.png SHA1-Digest: HtVJxluzJoPHCjreZHOfOC3X9aY= Name: res/drawable-hdpi-v4/ic_lock_black_18dp.png SHA1-Digest: tsXHhh2ccnNTEGew41PTgDSThgo= Name: res/layout/design_navigation_item_separator.xml SHA1-Digest: Rop+L/oPNw275ck8glcXZA481BY= Name: res/drawable-hdpi-v4/abc_textfield_search_activated_mtrl_alpha.9 .png SHA1-Digest: 3TVJoKotGhu2qu7nxOP+9dmuUfQ= Name: res/drawable-hdpi-v4/ic_audio_light.png SHA1-Digest: 13Mu0xO0mJ7FzY0q5XKbxSwruV8= Name: res/drawable-mdpi-v4/ic_notifications_black.png SHA1-Digest: MA4DXqM44SiqV6B9cY5h3pUOOhI= Name: res/drawable-xhdpi-v4/ic_advanced_gray.png SHA1-Digest: WDPvH2ZqZwD/phTruQBDukuSpuw= Name: res/drawable-xxxhdpi-v4/ic_textsms_grey_32dp.png SHA1-Digest: 9jva4mR1b6ILjJREhpq5viytlMs= Name: res/drawable-xxhdpi-v4/list_focused_holo.9.png SHA1-Digest: 2/qW1KJgIeUV4L7+Rd9kqNoxB2E= Name: res/drawable-v21/abc_action_bar_item_background_material.xml SHA1-Digest: KV90fjq9oUm4oE6kD9IDK7IG1zg= Name: res/drawable-hdpi-v4/ic_arrow_forward_dark.png SHA1-Digest: klj/AiJeyf83zuYmFJk6xukZkxw= Name: res/drawable-mdpi-v4/ic_attach_grey600_24dp.png SHA1-Digest: ngmOYUucFE57T857CEzLtuTLxfY= Name: res/drawable-xxhdpi-v4/ic_arrow_forward_dark.png SHA1-Digest: jjaIemVkS1nm/HxIu7QLAkN6ZdA= Name: res/drawable-xxhdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png SHA1-Digest: J2uKPpryiQzwY93PQXWIe/qu8C4= Name: res/menu/conversation_list_batch_unarchive.xml SHA1-Digest: RBChRd/UuAfGHAWjrBxlsP+GMag= Name: res/layout/share_list_item_view.xml SHA1-Digest: PFk53SJjEoGF0pQ/iJJziVwTWCg= Name: META-INF/services/com.fasterxml.jackson.core.ObjectCodec SHA1-Digest: TUt3WJOdFSbY0ZddbRq3WmcKOBM= Name: res/drawable-xxhdpi-v4/ic_emoji_objects_activated_dark.png SHA1-Digest: jZHN4c0oJ8KGp3FGrI8oq5DGu7w= Name: res/drawable-hdpi-v4/ic_block_grey600_18dp.png SHA1-Digest: u0L4vqPdxqMY7+HoZZTGJK7pAy0= Name: res/drawable-hdpi-v4/ic_refresh_white_24dp.png SHA1-Digest: Ct72rRND5PQORhQLlWGdDT0wsDc= Name: res/drawable-xxxhdpi-v4/abc_ic_star_black_16dp.png SHA1-Digest: 99UOwsvNS81PRlylisdIV85BpmY= Name: res/drawable-xxhdpi-v4/ic_emoji_recents_normal_light.png SHA1-Digest: kGRNc0o4fZjmBSzaes4vp2PPBgg= Name: res/drawable-mdpi-v4/ic_photo_library_white_24dp.png SHA1-Digest: vHWhkrvE9tFuZp2ZIW9hpNJDsTU= Name: res/drawable-mdpi-v4/ic_action_warning_red.png SHA1-Digest: iNTrh1jh7OMJ/JKmvoUi095+hno= Name: res/layout/conversation_item_sent_audio.xml SHA1-Digest: MDYNLLHlEtPflny/+jsKoheQxJ8= Name: res/drawable-xhdpi-v4/switch_thumb_activated_holo_light.9.png SHA1-Digest: 3Ss5k8ep2Mrg+rgvOa7GGRfjpF8= Name: res/color-v23/abc_color_highlight_material.xml SHA1-Digest: ADJ/QZvjWwj/DO+JqvWU+jC8e+0= Name: res/drawable-mdpi-v4/ic_image_dark.png SHA1-Digest: ZzKS44XOxeDxQocnWdQAjubRzhc= Name: res/drawable-mdpi-v4/ic_message_gray.png SHA1-Digest: 0K+5JBTOf563oye6FpKegWKZ/fA= Name: res/drawable-xxhdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png SHA1-Digest: K3qxsC992lHdJzyirP9Zy9TMKkQ= Name: res/xml/preferences_advanced.xml SHA1-Digest: ismOPLlHsOnM/t1aVSELIMtocho= Name: res/drawable-xxhdpi-v4/ic_attach_grey600_24dp.png SHA1-Digest: ipi0CO2ssjeKYfEDbwhCGHmAhJQ= Name: res/layout-v17/conversation_list_item_view.xml SHA1-Digest: irkP08EmGQuV0W8i11WFROHpfR4= Name: res/layout-v16/design_bottom_sheet_dialog.xml SHA1-Digest: gqn9+EdH25pjfpqTXP6RAZ3CNP0= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_995 SHA1-Digest: VQZUHqW605gJIqlz9jltq9FdR3o= Name: res/drawable-v11/emoji_category_recent_light.xml SHA1-Digest: 0kdu9tgDg1GZ0ECdt2/P+L6zw1o= Name: res/drawable-xxhdpi-v4/ic_message_black.png SHA1-Digest: mXTAUjiikDSafi6k0815KQ07too= Name: res/drawable/notification_tile_bg.xml SHA1-Digest: GCdT2VRFagIyg+5ijRJYiNDkV50= Name: res/drawable-xxhdpi-v4/lockscreen_watermark_dark.png SHA1-Digest: yD27OTvbBk1jpS1o/+kZQko/Sug= Name: res/menu/conversation_secure_sms.xml SHA1-Digest: e4pbyINrig3CE7vbpn9e8WbN5gA= Name: res/drawable-xxhdpi-v4/abc_list_selector_disabled_holo_light.9.p ng SHA1-Digest: 4maqTaWq3BEXw6ShM7wJMon1kU8= Name: res/drawable-hdpi-v4/switch_thumb_holo_light_v2.9.png SHA1-Digest: dUoJcdYHBaB65zOYYoaEwJLGORI= Name: res/layout/time_zone_item.xml SHA1-Digest: OMUu/fQwSnx6ixxWcCbzPFxEl60= Name: res/layout-v17/abc_alert_dialog_title_material.xml SHA1-Digest: OFtIBILoZz5RL4i5NG79H4C4oJs= Name: res/drawable-xhdpi-v4/textfield_default_holo_light.9.png SHA1-Digest: tlklNYajvvNexKXzCLXina5RJ4w= Name: res/drawable-mdpi-v4/import_database.png SHA1-Digest: lW4UkLRTwmCgNQlCpnd+J2wZWEc= Name: res/anim/design_bottom_sheet_slide_in.xml SHA1-Digest: H3e/zshhR8lSEOvNJ1F7meqRXT0= Name: res/drawable-xhdpi-v4/ic_image_dark.png SHA1-Digest: Y6aRi8pB8nHYc2Ab8XnD0qGupRs= Name: res/drawable-xxhdpi-v4/ic_emoji_people_normal_light.png SHA1-Digest: hK3QELxmoGp5x91V/iG+hqecwDo= Name: res/layout-v13/conversation_item_last_seen.xml SHA1-Digest: LKCgoKkL2vB1Xwn2MzNS2iilUxw= Name: res/drawable/play_icon.xml SHA1-Digest: LZsHd/10peNSnCLEcZ0N08QoAB4= Name: res/animator/scale_with_alpha.xml SHA1-Digest: dkkt5ydwuaxd0Vix8/d+HhT1TAA= Name: res/drawable-mdpi-v4/abc_btn_check_to_on_mtrl_000.png SHA1-Digest: 7hzOGLjK5Ydm45f6RGVtepdkPl8= Name: res/drawable-v11/abc_textfield_search_material.xml SHA1-Digest: khlWpwwJ/BpuCBb0uDcegE9Qi7A= Name: res/drawable-hdpi-v4/ic_emoji_nature_activated_dark.png SHA1-Digest: kBBhwFcho+/f2fevl7i89QMctp0= Name: res/drawable-xxhdpi-v4/abc_switch_track_mtrl_alpha.9.png SHA1-Digest: 0/qHVKsPWinDgoCSCJ2tYnOQHDk= Name: res/drawable/done_background_color.xml SHA1-Digest: exuy7684bBtPXZdYMo07HuDY3nw= Name: res/layout/conversation_item_update.xml SHA1-Digest: zTAp/M2/nwDDANB7UAsuq/K4eyU= Name: res/drawable-hdpi-v4/ic_clear_search_holo_light.png SHA1-Digest: UeGvq8ddjrUFOGl38NFyxYA/M+o= Name: res/layout-v16/radial_time_header_label.xml SHA1-Digest: F7ROUbaGiB7d5oCKYGJskkSsP/k= Name: res/anim/abc_slide_in_top.xml SHA1-Digest: ps83fDCN37hSi5vdARGgPEjdET8= Name: res/drawable-xhdpi-v4/ic_menu_search_holo_light.png SHA1-Digest: 1OEqxyBgSuG4bJFuf4KAED1IFhI= Name: res/drawable/emoji_category_emoticons_light.xml SHA1-Digest: s5zj0LIzJakvrvkjFksQqWzCMtk= Name: res/drawable-xhdpi-v11/icon_notification.png SHA1-Digest: RuxV4sFOJZDKMDqRGmvv5ZHjaOA= Name: res/drawable-xxhdpi-v4/ic_emoji_flags_activated_dark.png SHA1-Digest: DFPRNsIBHb5NdyahxEP22SzqQKQ= Name: res/drawable-xxhdpi-v4/ic_save_white_24dp.png SHA1-Digest: M2Ksw9RoI9aAekWorQL1ZAtMg64= Name: res/layout-v17/import_fragment.xml SHA1-Digest: 9TPP+7MllpGYOYiYDBc/h7ibbUY= Name: res/anim/animation_toggle_in.xml SHA1-Digest: dRaYBsOfLqP23qwFMXALeJ6iGYM= Name: res/drawable-xhdpi-v4/ic_emoji_objects_activated_dark.png SHA1-Digest: oPGZtdvfw/nnZQ5u1aLjkZsiFp4= Name: res/drawable-v11/emoji_category_people_dark.xml SHA1-Digest: 8MsF21BUgoxTMNne35u1qG+2KYw= Name: res/color/abc_tint_edittext.xml SHA1-Digest: ELKpQJ7BBc4wCAl/vSvMN6a+kX0= Name: res/drawable/edit_text_holo_light.xml SHA1-Digest: jayuwPQnLwPrLoaJoSHnF9BnVx8= Name: res/drawable-xxhdpi-v4/spinner_focused_holo_light.9.png SHA1-Digest: GoRgB1Li7RZqzAPwAgLgd0fqnmg= Name: res/drawable-mdpi-v4/ic_recurrence_bubble_outline_disabled.png SHA1-Digest: ys+pQ2K1l435FrfBx6vAiDX/zRk= Name: res/drawable-xhdpi-v4/ic_check_white_24dp.png SHA1-Digest: q/oBdURfScsBlV4e5a4TxQowrp4= Name: res/drawable-mdpi-v4/ic_emoji_flags_normal_light.png SHA1-Digest: Zz+YX+HHOmmtVOvPRXbJ2d4L+so= Name: res/xml-v12/badge_widget_provider.xml SHA1-Digest: O68Q2g4i0uc2pLd8KQJJtS6vPqs= Name: res/drawable-xxhdpi-v4/quick_shutter_button.png SHA1-Digest: SxR6XbTH+j6YodTwgGnN1P6NGMg= Name: res/drawable-xhdpi-v4/spinner_default_holo_light.9.png SHA1-Digest: 8z6OMkzlDtz6BaebwU13NRMiwGc= Name: res/drawable-hdpi-v4/abc_ic_star_half_black_36dp.png SHA1-Digest: dLhPxcY8oRLfQRaw+nJKNi5Ke88= Name: res/animator-v11/bottom_pause_to_play_animation.xml SHA1-Digest: LYCzlA/emeQcYagTxZ22jVC7fjo= Name: res/drawable-mdpi-v4/ic_arrow_forward_light.png SHA1-Digest: O/8+Cz6wP0XqeEc1kY5mJJG4hXk= Name: res/drawable-xxhdpi-v4/ic_content_copy_dark.png SHA1-Digest: O58dv6ws4IlktN8EMsPx7STY+w8= Name: res/layout/message_details_activity.xml SHA1-Digest: azLss1HqZc+OGoasvbh3/pmvfVU= Name: res/drawable/abc_ic_voice_search_api_material.xml SHA1-Digest: FKT2suuxpH8tno25EX3iM2N2sF0= Name: res/drawable-mdpi-v4/ic_create_white_24dp.png SHA1-Digest: G0B2ZqlkLHaAmqSMpcq74l7viH0= Name: res/layout/export_fragment.xml SHA1-Digest: R9RsimyrNaZrtRJ6tYxiPnd0xUk= Name: res/drawable-xhdpi-v4/ic_lock_black_18dp.png SHA1-Digest: BHfmCHr+L1mAJXAj3f/Pa35mojA= Name: res/drawable/key_background_dark.xml SHA1-Digest: Q9XtZPMUF3W5vYFD1YfSL3PN98U= Name: res/layout/design_text_input_password_icon.xml SHA1-Digest: enOxXnZ0Bu2vzMaGn/K9/MGflag= Name: res/color-v23/abc_tint_default.xml SHA1-Digest: hkuz+yd/nR5mjwYr8RPMX49hS2I= Name: res/drawable/abc_btn_colored_material.xml SHA1-Digest: 5in2GRrYzWn1M5K8rINJqJPTOtg= Name: res/drawable-xhdpi-v4/ic_keyboard_white_24dp.png SHA1-Digest: gef8mzFbtVz0/gSncFbDhsyWERk= Name: res/drawable-xhdpi-v4/ic_reply.png SHA1-Digest: EqxlL9HBYa08+CVzrwfmhkUaWUI= Name: res/drawable-mdpi-v4/ic_reply_white_36dp.png SHA1-Digest: PcvXgVENNXIje52ZR0uF+Xl44Gg= Name: res/drawable-xxxhdpi-v4/ic_photo_camera_light.png SHA1-Digest: dmMt8Z9y+GqWe+6etY4zVem8ZEk= Name: res/drawable-xhdpi-v4/abc_ic_star_black_48dp.png SHA1-Digest: HtRtZJS+fQnU+eg18M0MLVLd0x8= Name: res/drawable-mdpi-v4/ic_movie_creation_light.png SHA1-Digest: hAd8qQscCw7ttV3lV8ICP7YD1Z4= Name: res/layout/hms_picker_dialog.xml SHA1-Digest: EIDb2yx/gAzfBk1vbnL+PLYhFMc= Name: res/drawable-xhdpi-v4/check.png SHA1-Digest: O/Qi5apjgjIYDbiy4L7NbECquN8= Name: res/drawable-hdpi-v4/abc_cab_background_top_mtrl_alpha.9.png SHA1-Digest: bKDAz/GvMsK2qKIXXjfzdAwCtG4= Name: res/drawable-hdpi-v4/abc_ic_star_half_black_48dp.png SHA1-Digest: ChKX/6bmS9ZkTZ+HL6xSqZEyCHk= Name: res/drawable-mdpi-v4/ic_keyboard_grey600_24dp.png SHA1-Digest: qnqSiT5wNCCg/UlnWQ1v9BlLkqU= Name: res/layout/keyboard.xml SHA1-Digest: Z7oIktvuO2U6H4nSwa18j5kwzaU= Name: res/drawable/key_background_light.xml SHA1-Digest: eFKV10AvLYM51Gr3qKecuaDCFAs= Name: res/drawable-hdpi-v4/check.png SHA1-Digest: bls++agTJ1NimFsoefiNBdsQThE= Name: res/layout/message_details_header.xml SHA1-Digest: h8JQ3mLrzfdnJXrpX6nqi45YmXA= Name: res/drawable/reminder_background.xml SHA1-Digest: gd6gIPUlMSPqPA7qf158rnlpwCI= Name: res/drawable-xxhdpi-v4/last_seen_background.9.png SHA1-Digest: o+wL4yJDNpiNHf5ZhMPaWIKOIEw= Name: res/drawable-xxhdpi-v4/abc_ic_star_black_48dp.png SHA1-Digest: IwCAMkAf6X0pu3GZenrkpUxcYjw= Name: res/drawable-xhdpi-v4/list_longpressed_holo_light.9.png SHA1-Digest: wjffxg4gtxSXtviI33Wu5A+pD0U= Name: res/drawable-hdpi-v4/ic_warning_light.png SHA1-Digest: z4G1iXM8qmbVe/WFc/791V7csQw= Name: res/color-v23/abc_btn_colored_text_material.xml SHA1-Digest: QfOopQVyGBK5764AtyzCeSxgY30= Name: res/drawable-mdpi-v4/ic_send_sms_insecure.png SHA1-Digest: KDIbLEMtUuaf05ehU9GETKSfsFE= Name: res/drawable-mdpi-v4/alert.png SHA1-Digest: iNzhKv0eva+6plDyJC6ddH5jCpE= Name: res/drawable-hdpi-v4/ic_badge_24dp.png SHA1-Digest: Bp+VbQKKHRTv+bE2aHLZU6qH9y0= Name: res/drawable/badge_drawable.xml SHA1-Digest: Q99rmXG7hI/Qdmv3rntexGhZtCc= Name: res/drawable-xhdpi-v4/notification_bg_low_pressed.9.png SHA1-Digest: bY0L7HlUYuOxWEpqttxLZo7p6QA= Name: res/drawable-xxhdpi-v4/ic_emoji_people_activated_light.png SHA1-Digest: tlyiMeENQ1f+aIFe+TyOKIwe2x4= Name: res/layout-v11/notification_template_custom_big.xml SHA1-Digest: VYI2XlNT0XUnuh0qA1BoxW6bJl4= Name: res/color-v23/abc_tint_switch_track.xml SHA1-Digest: bBD39oEqyvU5cz93JUQT0WhDCho= Name: res/drawable-hdpi-v4/ic_play_circle_fill_white_48dp.png SHA1-Digest: PayjsoW2PSnRDUwwmhTJbh2ljyQ= Name: res/layout-v16/selected_recipient_list_item.xml SHA1-Digest: AzEF8ESv6dxauh7AJe31k89QnVQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_506 SHA1-Digest: /BptlPYGlVrO6aOiRVQIw8Ezzhk= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_505 SHA1-Digest: GPF+v2ktP3tCtgbBVUwLwURztCE= Name: res/drawable-xxxhdpi-v4/abc_text_select_handle_left_mtrl_dark.pn g SHA1-Digest: firK0ehpSAty2PwnPS9T52QLoJk= Name: res/layout/selected_recipient_list_item.xml SHA1-Digest: ZwMoe3tueFRM1XJsSKuaiPw4MZI= Name: res/drawable-ldrtl-hdpi-v17/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: HFivDekYna/HGttXT/KmXBD3Fmk= Name: res/drawable-mdpi-v4/ic_video_dark.png SHA1-Digest: TBnuH10e391JDrpYlIxt7yqzqug= Name: res/layout/recycler_view_fast_scroller.xml SHA1-Digest: 7py2L+OuSApx1silOwwAS+CiF08= Name: res/drawable-xhdpi-v4/import_database.png SHA1-Digest: Q4C3QnSbVJogvVbJL04gfneaYms= Name: res/drawable-xhdpi-v4/ic_archive_white_24dp.png SHA1-Digest: Spkt/SXy1cY8lxW+n2OKMQteFKo= Name: res/menu/group_create.xml SHA1-Digest: abNM/Ga3TBltWGfnOimRjkvQYpA= Name: res/drawable-xhdpi-v4/ic_emoji_places_activated_dark.png SHA1-Digest: 2yCExeWjZxDr9TPIhbupCmdAet4= Name: res/drawable-xhdpi-v4/ic_menu_remove_holo_light.png SHA1-Digest: jS22ANT03aXHBixQEDTbArmO/sM= Name: res/layout/media_preview_activity.xml SHA1-Digest: JmeMePMCgjZNCZT+wiTCPoUUruw= Name: res/drawable-xxhdpi-v4/ic_emoji_recents_activated_light.png SHA1-Digest: /Jeu947UWEMQUEv7gCj7ch3fSac= Name: res/color/abc_background_cache_hint_selector_material_light.xml SHA1-Digest: mnPrYggTiTtLeSJMGhhI7MazdiQ= Name: assets/fonts/AndroidClockMono-Thin.ttf SHA1-Digest: zFQStQ34LrLFalq5xe3Uxd6yuVU= Name: res/drawable-v11/emoji_category_objects_dark.xml SHA1-Digest: rGXVg2KdXem4/iDdBV8pb2V/6Aw= Name: res/drawable/abc_seekbar_thumb_material.xml SHA1-Digest: 3gcgKKHkoQO20Qass3DY4tt02lc= Name: res/anim/abc_shrink_fade_out_from_bottom.xml SHA1-Digest: bncgNmwtn5WUMmKg+YNicoakQlQ= Name: res/drawable-mdpi-v4/ic_audio_light.png SHA1-Digest: UmjvOFURYutq4AlUnNhK//vRArM= Name: res/drawable-xxhdpi-v4/ic_emoji_recents_activated_dark.png SHA1-Digest: oDErz9G4J9sw13lmWiAcTyi0/JM= Name: res/drawable-sw600dp-mdpi-v13/ic_backspace_disabled_dark.png SHA1-Digest: goD6JyqKwXfXEQ+bnApKBlW+Gz0= Name: res/drawable-xxhdpi-v4/ic_volume_off_grey600_18dp.png SHA1-Digest: R4uNV8VJIb25VxNlcMMDg/67s0w= Name: res/xml/preferences_manual_mms.xml SHA1-Digest: jHUQzpsM3z1VTPD+NaMIDpwlp2A= Name: res/drawable-xxhdpi-v4/abc_list_pressed_holo_light.9.png SHA1-Digest: rDoVKQUYnqgVz5KStlGT59UHjW4= Name: res/drawable-xhdpi-v4/ic_delete_white_24dp.png SHA1-Digest: Lb7XaUgaZoqd9Om5eg0FWfdX4H8= Name: res/drawable/abc_cab_background_top_material.xml SHA1-Digest: Z+2EBs+zMxbPCCEkmiGm2pj627E= Name: res/drawable-xxxhdpi-v4/abc_btn_check_to_on_mtrl_015.png SHA1-Digest: KV1kviY5baSCVCjRxrMs398LwBk= Name: res/drawable-mdpi-v4/ic_attach_white_24dp.png SHA1-Digest: I2ss7aVE2K9WPhzlOKoXB+xJL+c= Name: res/drawable-xhdpi-v4/dialog_full_holo_dark.9.png SHA1-Digest: mgx4FmtAVykjmDt5bIzhpACjqt4= Name: res/drawable-hdpi-v4/ic_lock_white_24dp.png SHA1-Digest: 6CyxxMRokxyQCUvFeOWUrqC0Z+E= Name: res/drawable-hdpi-v4/ic_volume_up_dark.png SHA1-Digest: 4wby/2YNvkPSOiVjwE7SpkE54mY= Name: res/drawable-xhdpi-v4/ic_message_gray.png SHA1-Digest: tqlXe84qbQTT4jGRNJY9Ft+E7pg= Name: res/layout/outgoing_sms_preference.xml SHA1-Digest: pJFNcYXq+0z0p98IPcboyReDb64= Name: res/layout/number_picker_view.xml SHA1-Digest: VypqbcK3MUZJEcrnRcempupOR0w= Name: res/layout-v17/design_layout_snackbar_include.xml SHA1-Digest: QzNVDbo0qD41LnOPYCRD5jHKA9M= Name: res/drawable-xhdpi-v4/ic_lock_light.png SHA1-Digest: xV8re7lisutnOVQxHM3gACt+r5Q= Name: res/drawable-xxhdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png SHA1-Digest: Jrc7Wnxi6R1ydjCdOBfCkiBqY5s= Name: res/color/switch_thumb_material_dark.xml SHA1-Digest: 8cvUQgKtG7wHuyAwzySbxVSy3KY= Name: res/drawable-xxhdpi-v4/ic_visibility_off_white_24dp.png SHA1-Digest: EronAFKuEapU27GYFV++I8hEsgU= Name: res/drawable-mdpi-v4/ic_push_registration_reminder.png SHA1-Digest: 4mxg5UOCU40SUg8JGLVNJzkIQKc= Name: res/drawable-mdpi-v4/dialog_full_holo_light.9.png SHA1-Digest: I98WjozKc0JNwjTZq0MP3G92hxE= Name: res/layout-sw600dp-v13/design_layout_snackbar.xml SHA1-Digest: AecXgQqt21R3R1lrOUnPAtiMSbg= Name: res/drawable/actionbar_icon.xml SHA1-Digest: Zolvi6pYeS++UJxxiH9TjkqRRJs= Name: res/drawable-mdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.pn g SHA1-Digest: S0h+/cgNmuIaGR2yC98F2TluOLU= Name: res/layout/abc_list_menu_item_layout.xml SHA1-Digest: BBIu9OwGrkJCBkYpt10MXYYt1G8= Name: res/drawable-mdpi-v4/ic_movie_creation_dark.png SHA1-Digest: gh9BV9TqavDUMLj3I02tsSzYdZU= Name: res/drawable-v21/abc_edit_text_material.xml SHA1-Digest: hBtHM7G5owedF1Sx2+3m6PbIJaw= Name: res/drawable-mdpi-v9/icon_notification.png SHA1-Digest: XO7m3P5ttOZrRdz96uBImEdvufQ= Name: res/drawable-xxhdpi-v4/ic_refresh_white_24dp.png SHA1-Digest: juzHaK1HIeW3e5KzHw55xyfh6HM= Name: res/drawable/progress_background.xml SHA1-Digest: vOhG7l3qzc7lUlqnjnghMamRR1I= Name: res/drawable-xxhdpi-v4/list_pressed_holo_light.9.png SHA1-Digest: 7Gks0mPw3HB/OmNgzPxInAEdGvw= Name: res/drawable-mdpi-v4/textfield_disabled_focused_holo_light.9.png SHA1-Digest: 3HLtWIGeOcjeWJDyrxpQl26BxQY= Name: res/drawable-xhdpi-v4/abc_textfield_search_activated_mtrl_alpha. 9.png SHA1-Digest: XhJt+0uemfensB5jPL5pYEy1IQs= Name: res/drawable-xhdpi-v4/abc_cab_background_top_mtrl_alpha.9.png SHA1-Digest: j7oKd56yOLmG/qIDUU3a+2EFFV4= Name: res/anim/abc_slide_out_bottom.xml SHA1-Digest: QE0YUwjYdedmgPyovw3+5mmYlYE= Name: res/xml/preferences.xml SHA1-Digest: PT/JgBHAZ8ftn3TxEqqMqZ5pdis= Name: res/drawable-mdpi-v4/spinner_disabled_holo_light.9.png SHA1-Digest: uvpYfq+h6Qn/SDGkwYFfUeaTWJI= Name: res/drawable/emoji_category_places_light.xml SHA1-Digest: 6J23pXumUTxrk55YpGf2J53MCQ8= Name: res/menu/conversation_group_options.xml SHA1-Digest: erRDp8SZW5YJE1GY6Ch5oxltnxM= Name: res/drawable-xxxhdpi-v4/abc_text_select_handle_right_mtrl_dark.p ng SHA1-Digest: GtE+iSfForTxBq2j48yuxNYKU2s= Name: res/drawable-xhdpi-v4/ic_emoji_nature_normal_dark.png SHA1-Digest: MWPryu4IpuIzEHxEWBFL3ogscwU= Name: res/drawable-ldrtl-xhdpi-v17/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: l+vUgYsVgQXPS3iZLaP1u5bjQck= Name: res/drawable-xhdpi-v4/design_ic_visibility_off.png SHA1-Digest: yi6TjTc4+gpXbmQRh5L7zm9CXWg= Name: res/menu/share.xml SHA1-Digest: OFFi2txtjcp5KSxNEBrun8cQpVc= Name: res/drawable-mdpi-v4/spinner_focused_holo_light.9.png SHA1-Digest: PkIQHK1gQev4CH5s1HE8eer4Q7A= Name: res/drawable-mdpi-v4/ic_unarchive_white_24dp.png SHA1-Digest: 4l/On9BS78WvYF1uwjNEV8/1G/k= Name: res/drawable-xhdpi-v4/ic_send_white_24dp.png SHA1-Digest: YD6S90hg7pSL0YuLV5QDwdVbKYY= Name: res/drawable-mdpi-v4/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: uSRKE0Y8igxEBi0V95m3BVba9Dg= Name: res/drawable-hdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png SHA1-Digest: kUO12sw4wuCW6X3apk/9/Bgw1+M= Name: res/animator/rotate_90_animation.xml SHA1-Digest: uK/YW8CFLkvobgn+SDKh5dvJKnc= Name: res/drawable-xxhdpi-v4/ic_forward_white_24dp.png SHA1-Digest: Y3hOlIZxNvmckcFpXZTZuf10tyY= Name: res/drawable-xxhdpi-v4/ic_notifications_black.png SHA1-Digest: AKxPExcZvMELEkvvP1zzyAdeIhc= Name: res/layout/message_recipient_list_item.xml SHA1-Digest: HNkd/TEU9KeZaxKBKRxfCKaSY4o= Name: res/drawable-mdpi-v4/ic_send_push.png SHA1-Digest: 4fXyZhxfTIKtowGHz864YuxW1uU= Name: res/drawable/abc_spinner_textfield_background_material.xml SHA1-Digest: VxVhP39ECkMfDcnEy/uhMtmv8LA= Name: res/drawable-mdpi-v4/ic_pause_circle_fill_white_48dp.png SHA1-Digest: 73mWrCxJapk7/mfXDUXGtoKTW64= Name: res/layout/single_recipient_panel.xml SHA1-Digest: gp93RHYmAHjep9cLn7e4j5uTWMs= Name: res/drawable-mdpi-v4/abc_ic_star_black_48dp.png SHA1-Digest: V5wpcOnIoe/CNNmRipWaosuWAqc= Name: res/layout/select_dialog_multichoice_material.xml SHA1-Digest: irO5EwKaeonZFyXwllRA1Y/3usY= Name: res/drawable-xxhdpi-v4/ic_warning_light.png SHA1-Digest: jsK7b90OKdO3vtd46dwWd92NlH8= Name: META-INF/buildserverid SHA1-Digest: xhNZchncMZQXytaTDWWDf2VsOkI= Name: res/layout-v11/notification_template_big_media.xml SHA1-Digest: ZdWu/rZKQzwVcV+s1qWjhDJvsII= Name: res/drawable-mdpi-v4/abc_btn_radio_to_on_mtrl_015.png SHA1-Digest: XI/8mKg+lFBg6GPmpkV9cv9l9n4= Name: res/drawable-mdpi-v4/ic_menu_login.png SHA1-Digest: h5cU8FfckVa4rOuoIbz3rB48K3I= Name: res/drawable-mdpi-v4/ic_forward_white_24dp.png SHA1-Digest: zcVF/wtERmVIt3bCYas7rD0sBuE= Name: res/drawable-mdpi-v4/abc_textfield_search_activated_mtrl_alpha.9 .png SHA1-Digest: 8MDSDpYFD8fxl8tEamhg6/oSBig= Name: res/drawable/conversation_item_background.xml SHA1-Digest: ksvuopfp0d7WQvKy20PIkopUaCM= Name: res/color/abc_background_cache_hint_selector_material_dark.xml SHA1-Digest: EkWMqlaBHrpcPaV0xhKAKJtZbBU= Name: res/drawable-hdpi-v4/ic_delete_white_24dp.png SHA1-Digest: 2nHoZeS6OL6RfxKF6SCo48YhVdE= Name: res/anim-v21/design_bottom_sheet_slide_out.xml SHA1-Digest: p2/uhdWZ4yTGAbU/lBqEQJKJUt4= Name: res/layout-sw600dp-land-v13/calendar_date_picker_dialog.xml SHA1-Digest: WjSX/EalWBnBe2rlRRSuIY1u8Zs= Name: res/layout-w270dp-h560dp-v13/calendar_date_picker_dialog.xml SHA1-Digest: Djn2sT5SZvoA7c1kwGkK9DiulwE= Name: res/layout/design_navigation_item.xml SHA1-Digest: h8Z4IZ4EaznZ0mo6kqbz7RPxJMg= Name: res/drawable-xhdpi-v4/ic_contact_picture.png SHA1-Digest: IeIqBVil3MGhdEzcHuZS32ebYc0= Name: res/drawable-xhdpi-v4/ic_push_gray.png SHA1-Digest: SdutMl0s5vzPa64biCQ9LrttW6Y= Name: res/drawable-hdpi-v4/ic_menu_login.png SHA1-Digest: YrBpMxSmkmtw2XbZ3d6yRIJYu4w= Name: res/drawable-hdpi-v4/ic_emoji_flags_activated_light.png SHA1-Digest: X+Z5HSACXPhP3BAA/Ep3phP+uAI= Name: res/layout/notification_action_tombstone.xml SHA1-Digest: /CJtUAzQm88owb3rpJ2lmhJ8nXs= Name: res/drawable-hdpi-v4/abc_textfield_activated_mtrl_alpha.9.png SHA1-Digest: PIZprngie1clc1fat6kH+iHy6P4= Name: res/drawable-xhdpi-v4/ic_group_photo.png SHA1-Digest: MaCkY1wW7r9wgt6keYpnoNeK+J8= Name: res/drawable-xxhdpi-v4/fab_shadow.png SHA1-Digest: d1fCRucybBZ+sWRe7tnLPKn+GUg= Name: res/drawable-xhdpi-v4/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: v+Lqu0RugRO4lsVbLkHSOZ9u334= Name: res/drawable-xhdpi-v4/ic_visibility_off_white_24dp.png SHA1-Digest: yoKJE2Q0Q97jGmbrQ1KsgQf7rGQ= Name: res/drawable-xxhdpi-v4/abc_list_selector_disabled_holo_dark.9.pn g SHA1-Digest: e8DEB+kwT5rrQOaL1UepmHHnW0M= Name: res/drawable-hdpi-v4/ic_archive_white_24dp.png SHA1-Digest: aqU5UhuTJeL2mRIZhnOmiDZm9Rg= Name: res/drawable-xhdpi-v4/ic_backspace_disabled_light.png SHA1-Digest: uvL0tDWQYO+b6a2r8JmD+J9Jlsg= Name: res/layout/select_dialog_item_material.xml SHA1-Digest: R7iXswuWqsPN8EjQvGjC9B6cHTI= Name: res/layout/view_identity_activity.xml SHA1-Digest: ZxYsEzUbqWB1fd31cKcAig8JDhs= Name: res/layout/design_navigation_item_subheader.xml SHA1-Digest: 69a0szAexIuOGbKDRpYcCnJcMhU= Name: res/layout-v21/notification_action_tombstone.xml SHA1-Digest: 1xrid9zP7OVc/uzz4qlGXdDs5To= Name: res/layout/share_intent_list.xml SHA1-Digest: /OHFqV8MJVHfwnbde21PTpxrK2o= Name: res/drawable-mdpi-v4/fab_shadow_mini.png SHA1-Digest: 7tnIvAUbieMoyoHI7/D7iHUF4Qg= Name: res/drawable-hdpi-v4/icon.png SHA1-Digest: CAVFYxqGyWt6CY3OmeIJX/+GrPs= Name: res/drawable-hdpi-v4/switch_thumb_pressed_holo_light.9.png SHA1-Digest: 85bARtoMmHSPqKgl57lX2txB7Sg= Name: res/drawable-xxxhdpi-v4/ic_archive_white_36dp.png SHA1-Digest: pOQIe48NSqdiWxZfFfwOPOH/pT8= Name: res/drawable-xxhdpi-v4/ic_emoji_places_normal_dark.png SHA1-Digest: 7/jTrEpkuGZjnbgKQSEqElfJ2Gk= Name: res/drawable-xxxhdpi-v4/ic_save_all_white_24dp.png SHA1-Digest: xKq8C4GY8EkO3Rol+/G0+/Cd3oc= Name: res/drawable-xxhdpi-v4/ic_delete_gray.png SHA1-Digest: lPVwwPUCLG3GRVxP9VyDLfyaRF4= Name: res/drawable-xhdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png SHA1-Digest: bTNFsVJfPn6MYG0AqtJNqG+o5hs= Name: res/drawable-hdpi-v4/ic_emoji_emoticons_activated_light.png SHA1-Digest: 8UlhfP3tNBq8Wf5YVnXyD766HXA= Name: res/drawable-mdpi-v4/abc_textfield_search_default_mtrl_alpha.9.p ng SHA1-Digest: IKTGIARYbmam8Kefq6089z/0k98= Name: res/drawable-xxhdpi-v4/ic_textsms_black_32dp.png SHA1-Digest: C8gUhZWCtgS6vVORCu6jLmyhHXk= Name: res/drawable-hdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: PtZHBaIOZQ7QKdJsAM/4rDecT5c= Name: res/layout/group_create_activity.xml SHA1-Digest: Mz4Qdjyqol3nqXnezWWmg/hPfQU= Name: res/drawable-xxhdpi-v4/ic_volume_off_white_18dp.png SHA1-Digest: BN+6DA8i0N7feI+DXuSuHwu62Kw= Name: res/drawable/emoji_category_symbol_dark.xml SHA1-Digest: lZvGgjFlg46lXgxyWMMuiA1xop4= Name: res/drawable-hdpi-v4/ic_delete_gray.png SHA1-Digest: tat8joPgYFEqR40RJTM055lAwdU= Name: org/spongycastle/x509/CertPathReviewerMessages.properties SHA1-Digest: J41SvstF2si4wHzfzilAP7QU0lQ= Name: res/drawable-mdpi-v4/ic_emoji_people_activated_light.png SHA1-Digest: 07Lo9EDy3OzK7UmCLWv7hZdkp+s= Name: res/drawable-xhdpi-v4/actionbar_icon_holo_dark.png SHA1-Digest: lsGB5rIJlqJvg5RCYO7sQSheKlM= Name: res/drawable-xhdpi-v4/abc_btn_check_to_on_mtrl_000.png SHA1-Digest: 6jyDQn4+fkX7JjWXzkyApClEOBM= Name: res/drawable-xhdpi-v4/ic_visibility_off_grey600_24dp.png SHA1-Digest: +K79wo79xc+zIdUhA+BgY3NSjf4= Name: res/drawable/abc_ic_ab_back_material.xml SHA1-Digest: LqMgt+Rywg7XqCzgIu4X9925b9E= Name: res/layout/design_navigation_menu_item.xml SHA1-Digest: 6WXixNq0qbNTdOQrxHoRlPGWqEs= Name: res/drawable-v21/touch_highlight_background.xml SHA1-Digest: LXWsYtf9CleMEE9F2d2jKTU65FA= Name: res/drawable-xxhdpi-v4/abc_text_select_handle_middle_mtrl_light. png SHA1-Digest: poX8dpNKEtacykuUW45/TXuqGCQ= Name: res/drawable-mdpi-v4/abc_list_divider_mtrl_alpha.9.png SHA1-Digest: 5CNLAG5hgHUpb17az14TTSMIzd0= Name: res/drawable-mdpi-v4/ic_reply.png SHA1-Digest: 9lPFP5ez5joY2ong87wLU1XP1NQ= Name: res/drawable-xhdpi-v4/ic_emoji_objects_normal_light.png SHA1-Digest: 4AdVQ6THS1Icz32grl9k5Tsnjgs= Name: res/drawable-xhdpi-v4/ic_emoji_people_activated_dark.png SHA1-Digest: FqikSS1A066ye++OLqgxphBX0fU= Name: res/layout-v17/notification_template_media_custom.xml SHA1-Digest: NRqlXcBt6+EiJWA2Us3EB4O/aNA= Name: res/animator/bottom_play_to_pause_animation.xml SHA1-Digest: noAqkjThR2pnIhrGEXxZ9yulSK8= Name: res/drawable-xhdpi-v4/ic_emoji_places_activated_light.png SHA1-Digest: oSUJddvEATDs9mKMCzEASwz8jIQ= Name: res/layout/switch_compat_preference.xml SHA1-Digest: SCvYTOQBF2ZhtbA8eqD7WWHhPMQ= Name: res/drawable-hdpi-v4/abc_list_divider_mtrl_alpha.9.png SHA1-Digest: Sjjr2U+mtnlc+xsrpBBNrqVorGY= Name: res/drawable-mdpi-v4/ic_menu_barcode.png SHA1-Digest: ne6Yu7swl/uqop6waeVVh1zxCHc= Name: res/drawable-xhdpi-v4/ic_audio_light.png SHA1-Digest: b7Oyc5myGgbHSG4u9zXQDjle0xM= Name: assets/backward SHA1-Digest: hgif/oUAa/79gSRPr7FCRJRVfvk= Name: res/drawable-xhdpi-v4/ic_emoji_recents_normal_light.png SHA1-Digest: g0z67sfbKP0Rd2NtBXF3o8q//48= Name: res/drawable-xxhdpi-v4/ic_push_gray.png SHA1-Digest: 7ZX2rXUTLc6nm3GsOwVrscJFST4= Name: res/layout/load_more_header.xml SHA1-Digest: fO/2JO2SLTeT3dtcsrS43HVQ450= Name: res/drawable-xhdpi-v4/ic_missing_thumbnail_picture.png SHA1-Digest: wGbI11M1M3pYFtyUJXQZ6MizZkY= Name: res/layout/abc_action_menu_item_layout.xml SHA1-Digest: W6aMUP8ritG0C2IidXq3FVHIo1E= Name: res/drawable/conversation_list_item_unread_background_dark.xml SHA1-Digest: 50vYDX1625FfrdJBL+H6rx1VTE0= Name: res/drawable-mdpi-v4/switch_bg_focused_holo_light.9.png SHA1-Digest: VaARP+7lQEpru1o/MCLqYUFQzRo= Name: res/drawable-mdpi-v4/ic_advanced_black.png SHA1-Digest: fhaB4MyFd6TDRkCQ3/WY8zSB/js= Name: res/color/done_text_color.xml SHA1-Digest: eR1WRcksZkuvjSRlr9yROqjJR30= Name: res/drawable-hdpi-v4/abc_list_longpressed_holo.9.png SHA1-Digest: xcQ0bHWRc+R9tuxQ3wgY1a2eY0k= Name: res/layout/splash_screen_activity.xml SHA1-Digest: CFKY1bhI3rjzzDbxHkfXqzAyKtg= Name: res/drawable-mdpi-v4/ic_app_protection_gray.png SHA1-Digest: GzFsgti12EvIVG1qkSLAtV9ZjMo= Name: res/drawable-xxhdpi-v4/sms_selection_icon.png SHA1-Digest: Pd5TMvT4yFkJcbqEitc5QMJNKmQ= Name: res/drawable-hdpi-v4/sent_bubble.9.png SHA1-Digest: FdfowFhHZNhFmrm59JSxASd+t3E= Name: res/drawable-mdpi-v4/icon_dialog.png SHA1-Digest: 79d0h9fKk4P7pUZzgJ7lv2p9tZU= Name: res/drawable-mdpi-v4/ic_visibility_off_grey600_24dp.png SHA1-Digest: Kme1LM1CzvATKwc7XWpJRXV86sA= Name: res/drawable-xhdpi-v4/list_pressed_holo_light.9.png SHA1-Digest: o6uQudI4iPo5plFaQ6Lklwf2dTY= Name: res/drawable-xhdpi-v4/ic_unarchive_white_24dp.png SHA1-Digest: u01sKhxVrWMhi1XBEwZNIVo7rdA= Name: res/layout/timezonepickerview.xml SHA1-Digest: FTO6xH/QnAy/MYvMir8FJKaoZLU= Name: res/drawable-xhdpi-v4/ic_check_light_disabled.png SHA1-Digest: MSOoGQ4W9IcDT9Zhqhv/G6fngNg= Name: res/drawable-xhdpi-v4/textfield_focused_holo_light.9.png SHA1-Digest: GTkseIIJxb2K4BmEEabgcA60SSU= Name: res/layout/color_preference_item.xml SHA1-Digest: B3xDRjQL8y7Jv067L35aCv3GdXA= Name: res/layout/transport_selection_list_item.xml SHA1-Digest: JBE1VfhklKRsjD2pKQh9o/ZtgMI= Name: res/drawable-mdpi-v4/actionbar_icon_holo_dark.png SHA1-Digest: VgvhFV/+fXGYj5+AC5e93lMt7mE= Name: res/drawable-hdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png SHA1-Digest: o6T1nENnpl79GnrVrE8AKfzN0kU= Name: res/drawable-xhdpi-v4/ic_menu_barcode.png SHA1-Digest: ZlAaKLTGj6XqaMQf223krzJLh74= Name: res/drawable/import_export_item_background_light.xml SHA1-Digest: I1I61lkLByy2qvkW9xYBLKTqUwQ= Name: res/drawable-xxhdpi-v4/ic_app_protection_black.png SHA1-Digest: IqZgSmpHE49sfbLTV6FwEMdEvYI= Name: res/drawable/emoji_category_flags_light.xml SHA1-Digest: mVgGk49YE3Kp0cMsfEDBXyh5PiA= Name: res/layout/abc_alert_dialog_material.xml SHA1-Digest: Duv2PX2Q+Op7FCLYmzQw1pedlJQ= Name: res/color/dialog_text_color_holo_dark.xml SHA1-Digest: j3TCt+8RhyKc5DagKQ/vROwHTJc= Name: res/drawable-hdpi-v4/ic_visibility_grey600_24dp.png SHA1-Digest: uYPGcx0wpMlrcYbzL5ePQwFwY0E= Name: res/layout-sw600dp-v13/three_keys_view_leftright.xml SHA1-Digest: ZK+ggUFpyjP9kHzkHRtbzP+F6O8= Name: res/anim/abc_popup_enter.xml SHA1-Digest: mW6OQN3tih7Y8FA4hLg0FHa+E8g= Name: res/layout/blocked_contacts_fragment.xml SHA1-Digest: uEHjf8i/Nf2x4YvNH554IW1UpDw= Name: res/drawable-mdpi-v4/abc_tab_indicator_mtrl_alpha.9.png SHA1-Digest: ToVo2KPSLrpwpzwqt2DA6d7KLWk= Name: res/drawable-hdpi-v4/abc_ic_star_half_black_16dp.png SHA1-Digest: 8ZyC0cv9tlgFMz8W119E8Qvb7w8= Name: res/drawable-xxhdpi-v4/splash_open_padlock.png SHA1-Digest: EH1IeP6nR4AaPoz61kEWmoqXy8E= Name: res/drawable-xxhdpi-v4/design_ic_visibility.png SHA1-Digest: 4Ss/5pyNfqZlcXdBZWunmqBPz5Q= Name: assets/zone.tab SHA1-Digest: DB2JMeHIQyU6vbJXRUlLcMwvciM= Name: res/drawable-hdpi-v4/notify_panel_notification_icon_bg.png SHA1-Digest: +WaWq164+JEgAS3SD7a6bgQZgMc= Name: res/layout-v16/conversation_list_item_view.xml SHA1-Digest: lSi6A/is5qvx5RlqAICR8SN1MIA= Name: res/layout/notification_template_custom_big.xml SHA1-Digest: D8hRNdml9Qrs+koitDmiY2HzYm8= Name: res/layout-sw600dp-v13/calendar_date_picker_dialog.xml SHA1-Digest: KCrT+yA0T8tZKWG7czg0px64l2Q= Name: res/drawable-v11/emoji_category_nature_dark.xml SHA1-Digest: eNALJxHkeZjrFhl5ynj1vPatWh0= Name: res/drawable-mdpi-v4/notification_bg_normal.9.png SHA1-Digest: g3zlZErALgEsgwbkgFIJpkkFLfo= Name: res/layout/centered_app_title.xml SHA1-Digest: yHdRO0YUJInlZSmzQZ/2onMkj6I= Name: res/drawable-xxhdpi-v4/abc_scrubber_track_mtrl_alpha.9.png SHA1-Digest: boG5dcozMnSrJdbSbLX0TBOMATU= Name: res/drawable-hdpi-v4/ic_info_outline_light.png SHA1-Digest: yTkqd9ICdFOI0MGJdKMgkmF2syI= Name: res/drawable-mdpi-v4/ic_block_white_18dp.png SHA1-Digest: v7Q72iINjgascz0t4CZkzcmzl30= Name: res/drawable-xxhdpi-v4/ic_info_outline_grey600_24dp.png SHA1-Digest: aENZGpvf0G9xhsxd0qM6dAdMHT0= Name: res/drawable-hdpi-v4/ic_recurrence_bubble_fill.png SHA1-Digest: qdJfmY6e/L7whGq87X7BrYEd1g4= Name: res/color/abc_primary_text_disable_only_material_dark.xml SHA1-Digest: PMhnRzfrwY1jlNfoIvzhOutdgIg= Name: res/drawable/info_round.xml SHA1-Digest: EQHFy9KXlVRBd3MTQYLkJoHhHec= Name: res/drawable-v21/avd_hide_password.xml SHA1-Digest: QqMO2alBCoD55pHulq7TEnfVdEc= Name: res/drawable-hdpi-v4/ic_launch_white_24dp.png SHA1-Digest: NVgYd/FTVz8kdW/gqkxE45/kXao= Name: res/drawable-mdpi-v4/ic_unarchive_white_36dp.png SHA1-Digest: Bmyc/kg5I3kT9pNIRpbW1ewggQ8= Name: res/drawable-xxxhdpi-v4/fab_shadow.png SHA1-Digest: 2OdUmLlQwfByiuOyfudiKjx+TzU= Name: res/anim/slide_from_top.xml SHA1-Digest: dpPiD0hLamwYer/Zh9GESUYkkl8= Name: res/drawable-mdpi-v4/ic_warning_dark.png SHA1-Digest: XELeit1UK1v2TSoxXA5W2ItV2p8= Name: res/drawable-hdpi-v4/ic_content_copy_light.png SHA1-Digest: m4WVZSa+cJwRcqkd9/78i6UHqls= Name: res/drawable-hdpi-v4/received_bubble.9.png SHA1-Digest: I12yNJInw7EAeJ+dan826X5qFys= Name: res/layout/keyboard_right_drawable.xml SHA1-Digest: WjmFFtlUJcq/Yu6n0ViwogbHXfo= Name: res/drawable-hdpi-v4/abc_list_pressed_holo_dark.9.png SHA1-Digest: 0zBo9Tp1wTO3RHYh5z1M+TUN+H8= Name: res/drawable-xhdpi-v4/ic_lock_white_24dp.png SHA1-Digest: KPi18fS0OO6gNsSD6NSIA7/qJ/0= Name: res/drawable-xhdpi-v4/ic_reply_white_36dp.png SHA1-Digest: n8qCbJdRiLbOJQKLtlmRaJe4C+4= Name: res/color-v11/abc_tint_default.xml SHA1-Digest: luVMp6CyIupPEeYKYuBDed8Oxeo= Name: res/xml/preferences_sms_mms.xml SHA1-Digest: HTAmLUbhkj/pNntmzSd72heNryA= Name: res/drawable-xhdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png SHA1-Digest: Pc4i3ShwZdpubjNQkH6pYtKd/fo= Name: res/drawable-mdpi-v4/ic_emoji_places_normal_dark.png SHA1-Digest: l3jpuQm48WQSKusaIIfI+iWnh7s= Name: res/drawable-xxhdpi-v4/ic_emoji_emoticons_normal_light.png SHA1-Digest: Xvvq6TlHGeCifYKafmHdp6JHTjs= Name: res/drawable-hdpi-v4/import_database.png SHA1-Digest: 9otw1PbLpHs7hylnm0vJ+UF5cDE= Name: res/drawable-sw600dp-xhdpi-v13/ic_backspace_disabled_dark.png SHA1-Digest: A9mermiNe0qduM6gxUjBYk7DkEU= Name: res/drawable-xhdpi-v4/ic_emoji_objects_normal_dark.png SHA1-Digest: YMEOl3+EnHVD+04WJgjLIXFrm6A= Name: res/drawable-xhdpi-v4/ic_app_protection_gray.png SHA1-Digest: /6PrYlU5CH9zIxTa9kmohiJ8Xmk= Name: res/drawable-hdpi-v4/ic_action_warning_red.png SHA1-Digest: M4Ki+A3MnsgSmiETmbzkaKBd0jY= Name: res/drawable-hdpi-v4/ic_info_outline_dark.png SHA1-Digest: NYBCWSND9m39u/8vziayfc01qDI= Name: res/drawable-hdpi-v4/ic_account_box_light.png SHA1-Digest: xx+Gzzcs1zzLeHYFn6HRmAj2v88= Name: res/drawable-hdpi-v4/ic_notifications_black.png SHA1-Digest: TugKLJ+BFDIZO0X3xAZztlvSsdo= Name: res/drawable-xxxhdpi-v11/icon_cached.png SHA1-Digest: 1YwCC2U/322ozak6+RBlTlTDUac= Name: res/drawable-mdpi-v4/fab_shadow.png SHA1-Digest: OSfdOYSWS2nNsDyeAGKqUW/NY3M= Name: res/drawable-xxhdpi-v4/switch_thumb_disabled_holo_light.9.png SHA1-Digest: iXB9Wp8Ev4e3k9Wg79Vv7yfO0fQ= Name: res/drawable-hdpi-v4/alert.png SHA1-Digest: k+gqwAY1F3AaClTmFDpa8cL1gDE= Name: res/drawable-hdpi-v4/ic_emoji_places_normal_light.png SHA1-Digest: g4NzbPe2I5wmoxSsOkoLHIDvFUY= Name: res/drawable-hdpi-v4/ic_reply_white_36dp.png SHA1-Digest: qG8B249RYqWmtpcR7dqP3lAuBR4= Name: res/drawable-xhdpi-v4/spinner_focused_holo_light.9.png SHA1-Digest: CGrl1FRXVxrvA14ueVH03Fn2em0= Name: res/drawable-xhdpi-v4/ic_create_white_24dp.png SHA1-Digest: 9l/Qnsghg6ESUm3rcMTUMtX/ESI= Name: res/drawable/conversation_list_item_read_background.xml SHA1-Digest: f5xdYCU0BaoUAhAzCv6IFIdB13o= Name: res/xml/preferences_appearance.xml SHA1-Digest: DRBO5iPjXkZYKyXOuof/dULm0xU= Name: res/drawable-xxhdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png SHA1-Digest: /SHIbNyt1+Fo97bGAhsp65znrc4= Name: res/anim/abc_slide_out_top.xml SHA1-Digest: NM9nWh/XI2zag3rBwIXEqrpl9XA= Name: res/drawable-mdpi-v4/spinner_default_holo_light.9.png SHA1-Digest: s/npsTa4f6dHCangZu461npuSrQ= Name: res/color-v23/abc_tint_switch_thumb.xml SHA1-Digest: HPm3VkEuzmYKpgUXXHUspwEOEKk= Name: res/drawable-xxhdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png SHA1-Digest: zkV9qOyIhi4vLRHjNhK5xl8gfkg= Name: res/color-v23/abc_tint_spinner.xml SHA1-Digest: X2/0Q6NoDfrYk6N/X7x1DbK4XK4= Name: res/drawable/design_bottom_navigation_item_background.xml SHA1-Digest: q/tAvUCKzH/tN0gPUEzccAp698k= Name: res/layout-v11/notification_template_big_media_custom.xml SHA1-Digest: KX1rENjUs85+ejNOUAYAl9Z7p7A= Name: res/drawable-v21/conversation_list_item_read_background.xml SHA1-Digest: lHqCczv9TdFvutPUbZ0CbjrHBe4= Name: res/drawable-mdpi-v4/ic_delete_black.png SHA1-Digest: A3F3BoFKYkG+kiaML4IoSYKbALI= Name: res/layout/conversation_list_fragment.xml SHA1-Digest: uH0eyxy/wXwDnv6FtjMMPSPj9Io= Name: res/drawable-xhdpi-v4/ic_notifications_black.png SHA1-Digest: OqKoWA5XngcH3MzOC07wT6/DgGc= Name: res/raw/whisper.store SHA1-Digest: XHW+g7lvAC9+4Celnl0Js28aCVo= Name: res/drawable-hdpi-v4/ic_emoji_recents_activated_dark.png SHA1-Digest: rUvpBOhj8S4eylPNtFccUQBNN1w= Name: res/anim/fade_scale_out.xml SHA1-Digest: Uir4/KEtcVOVxHtCmwcmNzM0Nnc= Name: res/drawable-xxhdpi-v4/ic_video_light.png SHA1-Digest: RYbv/stsAv9oTONUojTZJIztUpI= Name: res/drawable-hdpi-v4/ic_reply.png SHA1-Digest: yW8DB5L+UjcqFxvPb5iuS/mfNH8= Name: res/drawable-xhdpi-v4/ic_image_light.png SHA1-Digest: YHBTbc/9heYP6RqeLq9sXyJW6FY= Name: res/drawable-xxhdpi-v4/abc_textfield_default_mtrl_alpha.9.png SHA1-Digest: sNds9Ym0phYx3ALXo+MZX8xlc30= Name: res/drawable/conversation_item_header_background_dark.xml SHA1-Digest: 3zJGQhq7efNb8O1pcgs6FzHcZtw= Name: res/drawable/emoji_category_recent_dark.xml SHA1-Digest: eAK1NEcV0fHAEgwtw+fTu9BiJEg= Name: res/drawable-ldrtl-xhdpi-v17/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: P6e0iLoIQdVv5zYT47sluTSi/8U= Name: res/drawable-xxhdpi-v4/ic_emoji_symbols_normal_light.png SHA1-Digest: K1eqzy0NhAiQODx1UHyyoWU91Ds= Name: res/drawable-mdpi-v4/ic_forum_black_32dp.png SHA1-Digest: MnNIINOWIvcaYHrGk2rfw+yAVPA= Name: res/drawable-xxhdpi-v4/ic_lock_white_24dp.png SHA1-Digest: VdAOsL1D5/ItORL6K7CcwYggixM= Name: res/drawable-hdpi-v4/ic_contact_picture.png SHA1-Digest: gPwXrikYXs+yK3bZyZgFtAIDmmg= Name: res/drawable-mdpi-v4/ic_textsms_black_32dp.png SHA1-Digest: R83rBBoEwhhrp/iegHs2AvJtM6s= Name: res/drawable-hdpi-v4/ic_push_registration_reminder.png SHA1-Digest: dcBXqXnBBxTTh7oHuIxfc8KfTCk= Name: res/drawable-mdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png SHA1-Digest: fNoEDfJ2jcrqTWkxek2nAJgdC58= Name: res/drawable-xxhdpi-v4/spinner_pressed_holo_light.9.png SHA1-Digest: y35Cc9pdVLFODoXVqOPGVcSrZMs= Name: res/drawable/design_password_eye.xml SHA1-Digest: Ip+zp9WKcMYKDC/1FcIw9dGmhd0= Name: res/drawable-xxxhdpi-v4/ic_clear_white_24dp.png SHA1-Digest: 1bagW7s760FgyC2CyUuCe5/ziv4= Name: res/menu/media_preview.xml SHA1-Digest: fOX7zZBM/ljHhjRMGFudzioNsi4= Name: res/drawable-mdpi-v4/ic_emoji_emoticons_activated_light.png SHA1-Digest: E5wir/v8hkd9E5NTh9HqVC1BD+8= Name: res/drawable-mdpi-v4/switch_thumb_pressed_holo_light.9.png SHA1-Digest: VyxRoouO+Z7ITDC+bYAPridmWf4= Name: res/drawable-xxhdpi-v4/ic_scroll_down.png SHA1-Digest: ZcDqoZMsXZUUwEEg0N6+uWPRkJk= Name: res/drawable-hdpi-v4/ic_group_white_24dp.png SHA1-Digest: Ni/4uzTNcVuC9JFCauz6cg4390Y= Name: res/layout-v21/message_details_header.xml SHA1-Digest: gLk3IyEea/JbEnQK2ANAzT7EO0E= Name: res/drawable-hdpi-v4/abc_list_pressed_holo_light.9.png SHA1-Digest: +pi/Z1BDTC/eHcG86xxdoFAyukA= Name: res/drawable/abc_ratingbar_small_material.xml SHA1-Digest: /P2KXIWbMuyOgftOHbBQa8ym+uI= Name: res/drawable-xxhdpi-v4/abc_text_select_handle_right_mtrl_light.p ng SHA1-Digest: 2fShoeavJczbLrecvbStdNRWHBc= Name: res/drawable-mdpi-v4/abc_text_select_handle_middle_mtrl_light.pn g SHA1-Digest: IsZBJs79BBpAphfuhFcivjA1NpU= Name: res/drawable-xxhdpi-v11/icon_notification.png SHA1-Digest: yQfuhwUNRxNDirhNEoeb9xni0wo= Name: res/drawable-mdpi-v4/ic_menu_remove_holo_light.png SHA1-Digest: 5ird1K8096LmheKRN4rsyxZFjDw= Name: res/layout/abc_activity_chooser_view_list_item.xml SHA1-Digest: /DgA41m5NJLrwrcDEmzvCS9O1yw= Name: res/drawable-xxxhdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png SHA1-Digest: ZcL++/zGOpiMrBK+00MCCJiYQ3Q= Name: res/color/text_color_dark_theme.xml SHA1-Digest: pR2obPIva/G2jowyPfTM8RXmLeU= Name: res/drawable-xhdpi-v4/abc_textfield_search_default_mtrl_alpha.9. png SHA1-Digest: P2nXckVhoat9mgVUXkNB8jHu5sU= Name: res/drawable-xhdpi-v4/ic_emoji_symbols_normal_light.png SHA1-Digest: cTSoOzJv61D89v2GDVBHmByVH3s= Name: res/drawable-mdpi-v4/ic_badge_24dp.png SHA1-Digest: gnFSqIT+E5kIsh+Br09jRekEuaY= Name: res/drawable-xxhdpi-v4/ic_delete_black.png SHA1-Digest: MNYVDUN/Gt9+uDpcHLyR88U2rFE= Name: res/drawable-xxhdpi-v4/ic_reply_white_36dp.png SHA1-Digest: R4DMczvl55BvJN5JeI+Brs0gsdY= Name: res/drawable-mdpi-v4/abc_btn_radio_to_on_mtrl_000.png SHA1-Digest: XS4QSKcuwFMyWTP/Zt+tOFsl9ak= Name: res/drawable-xxxhdpi-v4/ic_circle_fill_white_48dp.png SHA1-Digest: rISqysqox9AU2cIf7NlrhI8t5tM= Name: res/drawable-xhdpi-v4/dialog_full_holo_light.9.png SHA1-Digest: Dz8isbAUH34hYBe1HIB8PQUSGO4= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_972 SHA1-Digest: wAYIltvc6+i6ruNDh7sN4H7KQtQ= Name: res/layout-v16/audio_view.xml SHA1-Digest: B4R1LyV+PN0MHQruAVIKwxhSMEY= Name: res/drawable-v21/design_bottom_navigation_item_background.xml SHA1-Digest: 2jtUIzAVfdNNdYjQbhXKGtwbJK0= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_971 SHA1-Digest: hXcyXUcpEkkPh5oyJGLDlCa0gj4= Name: res/drawable/conversation_list_divider_shape_dark.xml SHA1-Digest: ktw2iwGSzvnpAHSYqkCzwAl1IDc= Name: res/layout-v22/abc_alert_dialog_button_bar_material.xml SHA1-Digest: 9PCUgjPrwCbXRSWb3dRs7CNBrME= Name: res/drawable-xxhdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png SHA1-Digest: IG999C1958jP76m6s0v2EDG8eAk= Name: res/layout/push_recipients_panel.xml SHA1-Digest: 2jGWKD1zuA9OasOhzoeRBstw/gs= Name: res/layout/blocked_contact_list_item.xml SHA1-Digest: CaLC/vO/gBnjCuEBJxMq3Q5IWbE= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_595 SHA1-Digest: jBKKEzLak9mybfD0suOcI3/gILA= Name: res/drawable/emoji_category_symbol_light.xml SHA1-Digest: V7rs1fShvGaZC0DqybpyHQ7R8zs= Name: res/drawable-hdpi-v4/ic_emoji_emoticons_normal_dark.png SHA1-Digest: FtvuHhnn2rWRI1W4eDnkGxOW7mI= Name: res/drawable-xxhdpi-v4/abc_list_pressed_holo_dark.9.png SHA1-Digest: LdyLROvWFgig9Vsgsaypd9fZOJY= Name: res/drawable-xhdpi-v4/ic_emoji_nature_activated_light.png SHA1-Digest: srXdxRF7zmsNW2/pq9U8k9+Fp0g= Name: res/drawable-xhdpi-v4/icon_cached.png SHA1-Digest: JuqwHlsBI7MPpbHGQKe1oTsXs/8= Name: res/drawable-hdpi-v4/switch_bg_disabled_holo_light.9.png SHA1-Digest: 8JhypYeb6T5pv+9W/UUzEOwHvyI= Name: res/drawable-mdpi-v4/ic_emoji_nature_normal_dark.png SHA1-Digest: nHzm3ieSQiM3OHi93coXGldH6c8= Name: res/drawable/ic_backspace_light.xml SHA1-Digest: SXT6/wR3ZvR4BpzLlepVtpYeEbg= Name: res/drawable-xhdpi-v4/ic_forum_black_32dp.png SHA1-Digest: wxl+jLneFHgHmn5j2hd4PPtxw0E= Name: res/drawable-hdpi-v4/ic_emoji_places_activated_light.png SHA1-Digest: sTP5McVyAvCYWJ9qwSR1qGkfkqM= Name: res/drawable-hdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png SHA1-Digest: o7+2UpUxcOZYQ4J4x3i56OSAwrs= Name: res/drawable/rounded_rectangle.xml SHA1-Digest: SLpT6+Ji9tdT8wIJFuZ4ixlh0iY= Name: res/drawable-xhdpi-v4/ic_lock_white_18dp.png SHA1-Digest: Oby0J/jOXhF12uk0Zoy11OxxTdY= Name: res/drawable-hdpi-v4/lockscreen_watermark_light.png SHA1-Digest: AXK2KP2ApxC2Z2yzuty9it93QuI= Name: res/layout/conversation_activity_attachment_editor_stub.xml SHA1-Digest: elQymJQ2LcmEQwG1CIaQbQUK270= Name: res/drawable-hdpi-v4/ic_lock_light.png SHA1-Digest: 6xsBKtq/dlPGkcu4hdJHkMAQhd8= Name: res/drawable-xhdpi-v4/ic_forum_grey_32dp.png SHA1-Digest: YmNZAvF1dw49FR+n3p2+UEasp5E= Name: res/layout/color_fragment.xml SHA1-Digest: R48hoN017xeVcNLmubDVpBqNrl8= Name: res/drawable/widget_unread_count_background.xml SHA1-Digest: 1176myGDj2tXsvH5TzAG82aondY= Name: res/drawable-xxxhdpi-v4/abc_tab_indicator_mtrl_alpha.9.png SHA1-Digest: 3fhmc4V2nmgfmXePbvfRvhgIwJY= Name: res/drawable-v21/circle_touch_highlight_background.xml SHA1-Digest: o2UQBTWYlJ9QXTjKaXy9nlvVkd0= Name: res/layout-v21/recipient_preference_activity.xml SHA1-Digest: 9yFPBf2+N+0/IgrEZT9d7AG7VvI= Name: res/drawable-mdpi-v19/switch_thumb_pressed_holo_light.9.png SHA1-Digest: CFRP5NlSZZOns7feha7lGxerPGg= Name: res/drawable-xxhdpi-v4/ic_video_dark.png SHA1-Digest: h2fDFLYAXstx7xbgiUFoiVTCyQk= Name: res/drawable-xxxhdpi-v4/icon.png SHA1-Digest: WtQHPcTXiUt+2Q8CVkBaKIpO47M= Name: res/drawable-xxxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_005 .png SHA1-Digest: ihH9NNjybEcS1mrq0UNzdyMwkLM= Name: res/drawable-ldrtl-hdpi-v17/ic_send_white_24dp.png SHA1-Digest: HIyXGcfdgw5bBXdBaJ6Mw8gbJlc= Name: res/drawable/emoji_category_objects_dark.xml SHA1-Digest: xmZDgPBPRHkIReRRxihiLYLA1ak= Name: res/drawable-xxxhdpi-v4/ic_archive_white_48dp.png SHA1-Digest: +b2FPCB/qYlbwGosHhZSn/gq1hk= Name: res/drawable-xxhdpi-v4/fab_shadow_mini.png SHA1-Digest: oBYy1KBTteK/1XvroCshzukQ3rg= Name: res/layout/conversation_item_received_audio.xml SHA1-Digest: wmLTxioffAsJsb4h8fuhcIGuG7Y= Name: res/drawable-mdpi-v4/sent_bubble.9.png SHA1-Digest: oWvWoFrpRQdCV4lAcWNy0a6DydY= Name: res/drawable-xxhdpi-v4/ic_attach_white_24dp.png SHA1-Digest: 7SvJje1R/bzW2htsBKRw0unxWCs= Name: res/drawable/compose_background.xml SHA1-Digest: 77YF5OthBZArbShPc+i58Aql40g= Name: res/drawable-mdpi-v4/ic_content_copy_dark.png SHA1-Digest: EiNHa+nhPyWGj0gC2+oLnBXhcxw= Name: res/layout/date_picker_view.xml SHA1-Digest: AtS3nascwyJBVE+H4vD2IN7fi7o= Name: res/drawable-mdpi-v4/dialog_full_holo_dark.9.png SHA1-Digest: q3ptg6feoBdTrvEzjNt9NgzKcHM= Name: res/drawable-mdpi-v4/ic_emoji_recents_normal_dark.png SHA1-Digest: aXPZFvyR6dEDTGYuXzmdiwTTM4s= Name: res/drawable-hdpi-v4/abc_btn_check_to_on_mtrl_015.png SHA1-Digest: zeU1JSNmPm7v39XNkaEkis5yDOQ= Name: res/drawable-mdpi-v4/abc_ic_star_half_black_36dp.png SHA1-Digest: Ql4KDXZpZ5PFXDlF3miVqQ8Z5DA= Name: res/drawable-mdpi-v4/divet_lower_right_dark.png SHA1-Digest: j/2GkVcY+hoTFH44wDfwNjcB4DM= Name: res/drawable-xxhdpi-v4/ic_image_light.png SHA1-Digest: vhhilPVoXIJw10WfMfgAz/q30E0= Name: res/menu/contact_selection.xml SHA1-Digest: BPAWUA3FKzBZVyeDk6rz7ZTVj6U= Name: res/drawable-xhdpi-v4/ic_menu_search_holo_dark.png SHA1-Digest: gdLsJp9wkONi0h1ARQRCjjgfXIg= Name: res/color/abc_tint_switch_thumb.xml SHA1-Digest: 6XjG56K16rD+RUsRUBNur2NAk1A= Name: res/drawable-hdpi-v4/dialog_full_holo_dark.9.png SHA1-Digest: gYRi3qcewvv4DpgH7WRa5oontHM= Name: res/drawable-hdpi-v4/ic_backspace_disabled_light.png SHA1-Digest: 4DrNtujXsHOnOZbH5z3nT9s2ZZs= Name: res/drawable-xxhdpi-v4/ic_reply.png SHA1-Digest: qG0hBkDSQm7dAysBPD1VzEHexIE= Name: res/drawable-xxhdpi-v4/ic_send_insecure_white_24dp.png SHA1-Digest: ZxJY268JNqO/9atssu9hBquS+pc= Name: res/drawable-hdpi-v4/ic_message_white.png SHA1-Digest: IgwqNHZrN/XeY8WZvNKXVAD40QI= Name: res/drawable-hdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.pn g SHA1-Digest: uMxaAPN53ynLGvBOkqlsfufYJEY= Name: res/layout-v17/abc_popup_menu_header_item_layout.xml SHA1-Digest: TLtuMry21yP1ZaUx8BGqmrhC+4A= Name: res/layout-v17/notification_action.xml SHA1-Digest: HZT619G5p+wXxhjri4eaIpvZo1Y= Name: res/drawable/background_pane.9.png SHA1-Digest: DebSplvlRk4ibCyCE6fVr4Rye5w= Name: res/layout-v16/conversation_item_received.xml SHA1-Digest: cbsB8+EW605eLAe9v+hToLruFl0= Name: res/drawable-xhdpi-v4/ic_arrow_forward_light.png SHA1-Digest: FwHQb1/0kv+VMlsrHkrzqvVHIyc= Name: res/drawable/emoji_category_people_light.xml SHA1-Digest: CFjiHrhvyZtBoOrjP6LotQu2o8I= Name: res/layout/notification_template_media_custom.xml SHA1-Digest: aAiITkLuFWAAa6RLNuhXTyKbze0= Name: res/drawable-xxhdpi-v4/ic_error_red_18dp.png SHA1-Digest: 4/XTIknpEfHwIgBUeiE09u75i9c= Name: res/drawable-xhdpi-v4/ic_forward_white_24dp.png SHA1-Digest: lBhMg7uuAL2TsIpM5wQxqtqz1yI= Name: res/drawable-xxhdpi-v4/ic_keyboard_white_24dp.png SHA1-Digest: //m/4n5G6FBA7MbrhujVAHgUTjs= Name: res/drawable-xhdpi-v4/ic_message_black.png SHA1-Digest: C7LJDa4aEbvOPOxhDwvHcnBLuUU= Name: res/drawable/emoji_category_recent_light.xml SHA1-Digest: sqTG5bnucpspdMl+YKAO73VvcAE= Name: res/drawable-xxhdpi-v4/ic_app_protection_gray.png SHA1-Digest: wd1wvXlTsp+e/0GVz7YL52iYnt4= Name: res/anim-v21/design_bottom_sheet_slide_in.xml SHA1-Digest: P5+oT0+JVe2tOF/nHLy58E5nCQg= Name: res/drawable-xhdpi-v4/list_selected_holo_light.9.png SHA1-Digest: U9jUfNg6H8NNFEsehvr9ue8J/zc= Name: res/drawable-xhdpi-v4/ic_send_insecure_white_24dp.png SHA1-Digest: BjmpEJVy1wBNO+c6Sh+AygI1M7c= Name: res/drawable-hdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png SHA1-Digest: Eh+ZTEk9nWC3r6F65kTTCqFuv/0= Name: res/drawable-xhdpi-v4/notification_bg_normal_pressed.9.png SHA1-Digest: R13cV9f14qtyCUzpc/FGqOIcssU= Name: res/drawable-xxxhdpi-v4/ic_scroll_down.png SHA1-Digest: uTdB/76suYhkMGS09Fb5rYUx/u0= Name: res/drawable-xxxhdpi-v4/abc_text_select_handle_left_mtrl_light.p ng SHA1-Digest: g4xmf1zIMEOQxLCN5PJ4U0Uk9uc= Name: res/drawable-mdpi-v4/ic_app_protection_black.png SHA1-Digest: YYlTW8ijNJvUYMwoi6Bils3c7ps= Name: res/drawable-xxhdpi-v4/ic_error_white_18dp.png SHA1-Digest: G9twTPy0ao8j5wNFULY3l1ZJPTU= Name: res/drawable-xxhdpi-v4/ic_content_copy_light.png SHA1-Digest: 1uiDQ/MALB8aE//rdO7zcVmPiaA= Name: res/layout/abc_screen_toolbar.xml SHA1-Digest: Rsk+wUgGh3cQxMiDvRqTgBypnUE= Name: res/drawable-xxhdpi-v4/abc_ic_star_half_black_48dp.png SHA1-Digest: kXuE8rc+VUrWq1VBZznOulaTh2g= Name: res/layout/database_upgrade_activity.xml SHA1-Digest: rL6MNoPR3el/9nr/O35nh8wq07w= Name: res/drawable-v11/emoji_category_symbol_dark.xml SHA1-Digest: R05URkn92Ah2uD+XESV+rMC8oq8= Name: res/drawable-mdpi-v4/ic_download_circle_fill_white_48dp.png SHA1-Digest: lWCsGRplQ/8lYectnUFCcWs4Uuc= Name: res/drawable-xxxhdpi-v4/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: hlPg0mO16g5nYlkb2LmahKOZAG8= Name: res/drawable-xhdpi-v4/ic_select_all_white_24dp.png SHA1-Digest: ZI18NdfQH1mcaGkRA9XM9EVMq1M= Name: res/drawable-xhdpi-v4/switch_bg_disabled_holo_light.9.png SHA1-Digest: R8GV7kb6QAwT3efgJTdnB9VOJAo= Name: res/layout/transfer_controls_view.xml SHA1-Digest: I8RMTIKmQOzTY3MNCUDaSiq0Z4w= Name: res/drawable-xhdpi-v4/icon.png SHA1-Digest: ZX0Na7vYQj2M/TBdj+eQoSk7YR8= Name: res/drawable-mdpi-v4/sms_system_import_icon.png SHA1-Digest: UTztdlNiwCPOus9KMOoPzE8U8eI= Name: res/drawable-xxhdpi-v4/abc_text_select_handle_left_mtrl_light.pn g SHA1-Digest: dTW+TBt3P2ZDHiurAQlmTb3QAuc= Name: res/anim/slide_from_right.xml SHA1-Digest: TfPszWadpReLtTNx99WycfoyUO4= Name: res/drawable-mdpi-v4/ic_emoji_places_normal_light.png SHA1-Digest: c14K5X5vUSiK8A+vXcWcLhsJFeY= Name: res/drawable-xxhdpi-v4/switch_thumb_pressed_holo_light.9.png SHA1-Digest: i+IZCPf+mTAbIWLZMAie5xMxUZ0= Name: res/drawable-mdpi-v4/textfield_default_holo_light.9.png SHA1-Digest: HHVoeIoiPaZGrfV/J675mX9mKZE= Name: res/layout/design_layout_snackbar.xml SHA1-Digest: 9Td2r2BXeaOLyxj36W5GtBQQHX8= Name: res/layout-v17/export_fragment.xml SHA1-Digest: uBKGKpWuKPDpVUYf+T5f9RYou4I= Name: res/drawable-hdpi-v4/ic_menu_add_field_holo_light.png SHA1-Digest: 2TfxfYx1ixLVxj6ZQADjYFv3XqQ= Name: res/drawable-xxhdpi-v4/ic_unlocked_white_24dp.png SHA1-Digest: tKD7bJUASCeM+QFUcF+GJcbYNpo= Name: res/layout/reminder_header.xml SHA1-Digest: GBOEd5G8AKVMWM3wGZZU7a6B8O8= Name: res/drawable-xxhdpi-v4/ic_send_push.png SHA1-Digest: Qh+qDzj+m3I8RG1NHZdesZuA/0Y= Name: res/drawable-mdpi-v4/ic_emoji_people_normal_light.png SHA1-Digest: 6Bv0SGIXD5AN9PJr00X2y3ipc7Y= Name: res/drawable-xxhdpi-v4/ic_image_dark.png SHA1-Digest: tmxPWgeZj3+N0xIj8vNZb01aod8= Name: res/drawable-xhdpi-v4/ic_done_white_18dp.png SHA1-Digest: qd1giIR7/BAdurQ26Vj4iyghuD0= Name: res/drawable-xxhdpi-v4/list_longpressed_holo_light.9.png SHA1-Digest: CBiyFOEOkN4G8LwWwkREd/FYJhs= Name: res/drawable-hdpi-v4/notification_bg_low_normal.9.png SHA1-Digest: cZq9c0ns0DMcrd6DYpvD35Sj9Q0= Name: res/drawable-xhdpi-v4/ic_download_circle_fill_white_48dp.png SHA1-Digest: nwZ2f7lDQzw+7Jrc2oyk8h38Zlw= Name: res/drawable-xxhdpi-v4/ic_send_sms_secure.png SHA1-Digest: Uv+tmwIFjiRqwMHnsGdsneBKHek= Name: res/drawable-hdpi-v4/abc_btn_radio_to_on_mtrl_015.png SHA1-Digest: 9BhkClp5dEf9SiNlkJTeUiPUGSo= Name: res/drawable/abc_list_selector_background_transition_holo_light. xml SHA1-Digest: GmT6IMAyeHMrj3HfwELKNXx7GjY= Name: res/drawable-xhdpi-v4/ic_arrow_forward_dark.png SHA1-Digest: utEb2enp9ebHHkI2x3Bwiti0gHk= Name: res/layout/recurrencepicker_freq_item.xml SHA1-Digest: /bPgQHwiLQ9Sj/1Q05VTg6GbZ0s= Name: res/drawable-xhdpi-v4/notification_bg_low_normal.9.png SHA1-Digest: SAWMxhraPrV6SXLtk3Qi4BJou40= Name: res/drawable-mdpi-v4/abc_text_select_handle_left_mtrl_dark.png SHA1-Digest: k4RjcVv0axodcYtXz1im5Yqlkxo= Name: res/drawable-hdpi-v4/ic_content_copy_dark.png SHA1-Digest: ys94tVvvZkfW+lyZuguDWocDf+E= Name: res/layout-v17/notification_template_big_media_narrow.xml SHA1-Digest: Fk2nZNget2CoihxhqQPC8OhQqjA= Name: res/drawable-mdpi-v4/ic_volume_up_dark.png SHA1-Digest: IUGVAnqQbPJ3mBqkEjDNZxObb0s= Name: res/drawable-mdpi-v4/ic_volume_off_white_18dp.png SHA1-Digest: 6m960Tsqk6ehOSk4ZX0ELHr5q7w= Name: res/drawable-xhdpi-v4/ic_audio_dark.png SHA1-Digest: Xcsn7AYq4zZ2cUnPpjkHLg4+zBE= Name: res/color/abc_primary_text_material_dark.xml SHA1-Digest: oHZ5jco2WyPUASIcKjDwdNuqMsQ= Name: res/drawable-hdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png SHA1-Digest: QT06M8jIu5PbB6orRZr5qtxv3oI= Name: res/layout/notification_template_media.xml SHA1-Digest: jOsIQ3hR78h017hqQi0gPfxMzkA= Name: res/drawable-xhdpi-v4/list_focused_holo.9.png SHA1-Digest: OMRGZ9NZcF46RZNFPM1PA5UDfDk= Name: res/drawable-xhdpi-v4/ic_emoji_places_normal_dark.png SHA1-Digest: xIUT2cYzPVsHZ1uWdjqvDm5VgEU= Name: res/drawable-hdpi-v4/list_selector_background_selected.9.png SHA1-Digest: hwr6dZUS/iDuJ78l2mF0/dfJL+8= Name: res/drawable-xxhdpi-v4/transfer_controls_background.9.png SHA1-Digest: j7LzaIHFeP182GCKU70DBB8X2+Q= Name: res/drawable-hdpi-v4/ic_call_split_white_24dp.png SHA1-Digest: tFTy8mgFHCjTf1q4a4uHGHBLFds= Name: res/layout-v13/select_dialog_singlechoice_material.xml SHA1-Digest: Yb6SWeDe01r7nK02f9+TLBlVMcU= Name: res/layout-v17/notification_template_custom_big.xml SHA1-Digest: G4b1e/mdGTs1PGLxC2sGKae1ejg= Name: res/drawable/conversation_item_sent_indicator_text_shape_dark.xm l SHA1-Digest: wrHIuc38MrDLiUImGUAlWDTWVoY= Name: res/drawable-hdpi-v4/abc_text_select_handle_middle_mtrl_light.pn g SHA1-Digest: UrzeEED9vrKPkwN3GrI1ylsIFuA= Name: res/drawable-xxhdpi-v4/abc_ic_star_half_black_36dp.png SHA1-Digest: Yf0xjUFhN6YR8IMpV2zk0K2xzhE= Name: res/color/abc_tint_switch_track.xml SHA1-Digest: vVHnK21A9Mg9yvzqb69+lOoo4jA= Name: res/drawable-xxxhdpi-v4/ic_send_insecure_white_24dp.png SHA1-Digest: 59SBcPoQcl+MHHIBe2/jSRqjqJA= Name: res/drawable-mdpi-v4/telephone.png SHA1-Digest: XXO2Fhva42p/Gm3ltGeWU8qwAJY= Name: res/drawable-mdpi-v4/ic_save_all_white_24dp.png SHA1-Digest: 3sA7d4yR0C3cAnFK+KE20ix4YEM= Name: res/layout-v21/notification_action.xml SHA1-Digest: ARX2L+8GodSYDBTJEFEWaVfJjOQ= Name: res/drawable/navigation_empty_icon.xml SHA1-Digest: NnWYc105PNs86W5i6nWhSR7zVNs= Name: res/drawable-xxhdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png SHA1-Digest: pekxWTKwrzIagiU2Ssj+otR4tkc= Name: res/drawable-xhdpi-v4/ic_emoji_recents_activated_dark.png SHA1-Digest: jjdYBmUugs3Tk1VIJ0TSpMA8AP4= Name: res/drawable-xxhdpi-v4/sent_bubble.9.png SHA1-Digest: KdAs5emUzdEgIGy2K1/+aDjasdE= Name: res/drawable/switch_track_holo_light.xml SHA1-Digest: AjCjiobmxUpXAbj/hs7BwEilUHc= Name: res/drawable-xxhdpi-v4/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: 396cLFH6GmIk+fmw4WU+kcdHCHo= Name: res/drawable-hdpi-v4/ic_emoji_emoticons_normal_light.png SHA1-Digest: 62CMvfSEQQgcBGH4682D4vHVUCo= Name: res/layout/abc_activity_chooser_view.xml SHA1-Digest: t8SNZCpxzOjFOaLI66GA4qvdQq4= Name: res/drawable-mdpi-v11/icon_cached.png SHA1-Digest: cvYOUo32nLmnfiJVHyijYXqpToI= Name: res/drawable-xhdpi-v4/abc_ic_menu_share_mtrl_alpha.png SHA1-Digest: yIiP4Gy0mn3DHVTS9m4D1uLmr6U= Name: res/drawable-xxhdpi-v4/ic_menu_search_holo_light.png SHA1-Digest: l0Kga/HF7gV0KQUMmD0RjUjp4rQ= Name: res/menu/key_scanning.xml SHA1-Digest: loeijMiaLCWeBEo9xiY+e1FGiPM= Name: res/layout-v16/conversation_item_sent.xml SHA1-Digest: P+T7bQeZyVjHk6c5iXcCT0vC+bI= Name: res/drawable-hdpi-v4/ic_emoji_nature_normal_dark.png SHA1-Digest: RRavhILeQiOlyTcq78HU79sw1P4= Name: res/layout-v17/notification_template_big_media_custom.xml SHA1-Digest: uUmG0smYBsEQ28ifQcPFFbFm66I= Name: res/drawable-xhdpi-v4/ic_mood_white_24dp.png SHA1-Digest: IYAUb6e9a3LcyUnsSzM7yHj3ITw= Name: res/layout/media_view_remove_button.xml SHA1-Digest: UTuCQxMaWihUkbRE3VjO4AgIWi0= Name: res/drawable/conversation_attachment_close_circle.xml SHA1-Digest: wT4qc1C3F6xw0uBUEE38D0Eh7A0= Name: res/drawable-hdpi-v4/ic_push_gray.png SHA1-Digest: JoLOR2nABDcMsPnqne437AXo5yE= Name: res/animator/bottom_pause_to_play_animation.xml SHA1-Digest: sGztQN6FsfBHdy/lArM6hyYwIhI= Name: res/drawable-xhdpi-v4/ic_emoji_emoticons_normal_light.png SHA1-Digest: +Old9N2rLprS7oZW6xLg/meIxww= Name: res/drawable-xxhdpi-v4/switch_bg_focused_holo_light.9.png SHA1-Digest: pvzTB0cC/y6EDmF11VDkkGTsOqk= Name: res/layout/empty2.xml SHA1-Digest: IM3rg1Lz0mEteG8vDVjHrpIkzV0= Name: res/layout/design_menu_item_action_area.xml SHA1-Digest: MAjBXF+TiqbN8ABwvCY22FbLaDM= Name: res/drawable-v11/emoji_category_symbol_light.xml SHA1-Digest: TykgFRJ+5KR1Q9rSNbPwsAegWu8= Name: res/layout-land/calendar_date_picker_dialog.xml SHA1-Digest: tb8TxI+kAHvBJry4Ghw9tAXiPxU= Name: res/drawable/ic_backspace_dark.xml SHA1-Digest: BT434abXhMMPnT3sQbuMrtXn6yE= Name: res/color/abc_tint_spinner.xml SHA1-Digest: tDeuAW8Dun0MkfNI/9LHZ3ZFXuI= Name: res/color-v23/abc_tint_btn_checkable.xml SHA1-Digest: 74/2TZdO684fYS/kzfIxIDh0yVc= Name: res/layout/keyboard_right_drawable_with_header.xml SHA1-Digest: Yatfi7l8YS8INf3wfF2NE3OVBow= Name: AndroidManifest.xml SHA1-Digest: yEqnaWsY+ffai3NpIX8t+cW0GRQ= Name: res/drawable-xxxhdpi-v4/ic_reply_white_36dp.png SHA1-Digest: Y4QTK9oU2ML5dRCfNCdOATIDujg= Name: res/drawable-hdpi-v9/icon_notification.png SHA1-Digest: k3ZlgFUY9RiM+5WNMCj0169Vlgc= Name: res/drawable-xhdpi-v4/sent_bubble.9.png SHA1-Digest: PpPeKJZDE+OFnELluMlghGwM1wY= Name: res/drawable-mdpi-v4/list_selector_background_selected.9.png SHA1-Digest: //pjb3Hl60ZanslZW59fxT/C/gg= Name: res/layout/fragment_submit_log.xml SHA1-Digest: hw6soqKamGiIiqb8sqEvUA2tGgU= Name: res/drawable-mdpi-v4/ic_lock_white_24dp.png SHA1-Digest: 9pbZC7NMhOv75QatAANgs5HBSpA= Name: res/drawable-xhdpi-v4/textfield_disabled_holo_light.9.png SHA1-Digest: u+PyBkFnG5V7GBXX1PAbySEqGP4= Name: res/drawable-mdpi-v4/ic_push_gray.png SHA1-Digest: g+vrd4PU18sQ/Z//9zh2tXDQ9nw= Name: res/color/abc_tint_default.xml SHA1-Digest: KX2YED2uqRthphmAhA6odjSt14g= Name: res/drawable/pause_to_play_animation.xml SHA1-Digest: WCcSuzMqsw/4vaNlj3OkwpjVTBo= Name: res/drawable-xxhdpi-v4/ic_create_white_24dp.png SHA1-Digest: tpDx7GyBvnabfQ3361ZHAOEVAIs= Name: lib/mips/libcurve25519.so SHA1-Digest: CufGtSWo6HZ8M6DWgtf0VYskkGg= Name: res/drawable-hdpi-v4/ic_attach_white_24dp.png SHA1-Digest: YJYWi1bI9IdyPhe7ZT5nEf7VehU= Name: res/drawable-mdpi-v4/ic_emoji_recents_normal_light.png SHA1-Digest: nb1zA7N7vLrBxBHe5faIc24dTMg= Name: res/drawable/touch_highlight_background.xml SHA1-Digest: /sqbdO0xB1rR0ofZ71nWtka+gMY= Name: res/layout-v11/notification_media_action.xml SHA1-Digest: CkAaakbqf4jYotOJaDjwZg8NsTg= Name: res/drawable-xhdpi-v4/ic_play_circle_fill_white_48dp.png SHA1-Digest: f8UVK+xSlFWxkHIvpTElUedq8VA= Name: res/drawable-xhdpi-v4/ic_warning_light.png SHA1-Digest: acg6MQqWyvXbYtlk9aNyEyEGL30= Name: res/drawable-xxhdpi-v4/ic_forum_grey_32dp.png SHA1-Digest: /nZ1YZLf1VmyRdCt9k74shgeXlg= Name: res/animator-v11/rotate_90_animation.xml SHA1-Digest: YzPrKibA72xHWsJAnRDFda8WNqk= Name: res/drawable-xxhdpi-v4/divet_lower_right_dark.png SHA1-Digest: fsDH1djAo+V3Wbha9C0rOfFghtk= Name: res/drawable-xhdpi-v4/received_bubble.9.png SHA1-Digest: +GeQlo7tx1PQjC4nJMfJ9I7o6aM= Name: res/drawable-hdpi-v4/ic_send_secure_white_24dp.png SHA1-Digest: 9uwPYUkkYlZH9ngamLedRZ+EM6I= Name: res/drawable-xhdpi-v4/design_ic_visibility.png SHA1-Digest: 9iQsdMe2atN8AlG2+sNkMwp+BjA= Name: res/drawable-xxhdpi-v4/ic_emoji_nature_activated_dark.png SHA1-Digest: J14xvGG8Jn1ZcMQHBzUWkHdkCLs= Name: res/drawable-v21/conversation_list_item_unread_background.xml SHA1-Digest: 7gHZRkfxjXAe/fGi+G9jCLZw37o= Name: res/drawable-ldrtl-mdpi-v17/ic_send_white_24dp.png SHA1-Digest: hE99BQWsYUraZQ+dpCLDCAPIdvE= Name: res/drawable-mdpi-v4/ic_emoji_flags_normal_dark.png SHA1-Digest: Qj/u3uhxRZP+VK/+Z5TGEFvOtNI= Name: res/drawable-xhdpi-v11/icon_cached.png SHA1-Digest: a57NxIxp4tGdjMF/naYYHgybgGE= Name: res/drawable-xxhdpi-v4/abc_text_select_handle_left_mtrl_dark.png SHA1-Digest: oVBkRUE6XhIW4dAoioh5/X56qUE= Name: res/drawable-sw600dp-xhdpi-v13/ic_backspace_disabled_light.png SHA1-Digest: tv7wRXKOl58hVFrG657jIAWJzDg= Name: res/layout-v13/database_migration_activity.xml SHA1-Digest: uZW5xzIg7D1XBqb2SyNTg9x5pWs= Name: res/drawable-xxhdpi-v4/ic_movie_creation_light.png SHA1-Digest: vks1kru2H338wqM7+eoTP2j1oEA= Name: res/drawable-hdpi-v4/ic_add_white_24dp.png SHA1-Digest: /YXYDHyfXqSLJmVDrTIcjaj35eE= Name: res/drawable-hdpi-v4/fab_shadow.png SHA1-Digest: JTWwMd80lcUi3H6QGk62H9WmcBg= Name: res/drawable-mdpi-v4/ic_info_outline_light.png SHA1-Digest: MZjZJ+M6RzY24PmB/ONe540BoKk= Name: res/drawable-v21/conversation_list_item_unread_background_dark.x ml SHA1-Digest: GZOfRbPnDcJsl6tmJ41ksNjD0XY= Name: res/layout-sw600dp-v13/three_keys_view_right_drawable.xml SHA1-Digest: lND2RP8LK/DKsynRSpsFQrr9K+g= Name: res/drawable-xhdpi-v4/ic_brightness_6_gray.png SHA1-Digest: 9bGv8BWdf+mrcvSHb+VARalrHjc= Name: res/anim/slide_to_top.xml SHA1-Digest: 45OutUfVJ6qV4vsLcKjIbCltGPU= Name: res/drawable-v11/emoji_category_nature_light.xml SHA1-Digest: WNvdJFbi4VBwB7SSWnmYl43ftoM= Name: res/drawable-v21/design_password_eye.xml SHA1-Digest: 0z5lKVTTsmwzIox9AxI2XZDgt/4= Name: res/drawable-xhdpi-v4/abc_text_select_handle_left_mtrl_light.png SHA1-Digest: skXEcXSNH1T9DL33yZF7Pe+gkCc= Name: res/drawable-xhdpi-v4/ic_emoji_emoticons_activated_light.png SHA1-Digest: 5Gd3WGYWfnau8ma9mz9V0RjA2Zg= Name: res/drawable-xhdpi-v4/ic_delivery_delivered_dark.png SHA1-Digest: vACgicm9pTLjob2y4F7qkoiYdos= Name: res/drawable-xxhdpi-v4/abc_list_divider_mtrl_alpha.9.png SHA1-Digest: 1Dd/0JZBbJ0v3ZcNgNK8NWwPcLo= Name: res/drawable-xxxhdpi-v4/ic_play_circle_fill_white_48dp.png SHA1-Digest: 6wwUtiEbwiOuXIGZCDz1IlkdSGA= Name: assets/fonts/Roboto-Light.ttf SHA1-Digest: z9omPT1JG8UmPzMe032DUuqIgHc= Name: res/drawable-xxhdpi-v4/ic_send_sms_insecure.png SHA1-Digest: T1VVudRvASxwRfD1anzbGdct2DE= Name: res/drawable-xxhdpi-v4/ic_save_all_white_24dp.png SHA1-Digest: he+Kvp5QLDr1RPYg7x/ZSOFWVco= Name: res/layout/abc_alert_dialog_title_material.xml SHA1-Digest: 15Rl3f2cyYvCDpkFuGx+r5p0zMo= Name: res/drawable-mdpi-v4/abc_scrubber_track_mtrl_alpha.9.png SHA1-Digest: fCw4/3GZJ6HvBRrlhVpfPdRbS48= Name: res/drawable/spinner_background_holo_light.xml SHA1-Digest: h5UzvSzmgiVAUm2lW5ae09Igvf0= Name: res/drawable-xhdpi-v4/fab_shadow_mini.png SHA1-Digest: VF4tJFCsvve+Gk0QaTUTLoxGkZo= Name: res/drawable-xxhdpi-v4/abc_ic_star_black_36dp.png SHA1-Digest: LegIEjffnk8xxS9xljbMaDsxURM= Name: res/layout-v17/abc_search_view.xml SHA1-Digest: 6+X6GtfKSsqxyFGD1z/FhfRI5rE= Name: res/drawable-hdpi-v4/ic_missing_thumbnail_picture.png SHA1-Digest: B+inUZoT1Xta+eKNJBuZ2x79+rQ= Name: res/drawable/conversation_list_item_unread_background.xml SHA1-Digest: wzsYDq0L5HIGF5GjqG4UJX/NH1c= Name: res/drawable-mdpi-v4/ic_emoji_objects_activated_light.png SHA1-Digest: Rl28OE1/+7+rsWUbkursyYvnPvM= Name: res/drawable-hdpi-v4/abc_textfield_search_default_mtrl_alpha.9.p ng SHA1-Digest: VtmcSWaUIf6+DhHt/mnXkgUFXH4= Name: res/xml/badge_widget_provider.xml SHA1-Digest: pV2Kn2jIi0wOfShx2RGl70hlFzk= Name: res/drawable-ldrtl-xxxhdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.pn g SHA1-Digest: ogkt/uGm2JWp22bfH9vZmG/CmMc= Name: res/drawable-xxhdpi-v4/ic_badge_24dp.png SHA1-Digest: 5JLtGA2KxCBOAd9PqCiTCrwnS1k= Name: res/drawable-mdpi-v4/ic_emoji_symbols_activated_light.png SHA1-Digest: OilS22ZGBBCObW9kgmwHbEA8QIc= Name: res/drawable-mdpi-v4/ic_play_circle_fill_white_48dp.png SHA1-Digest: gQum8TE91ke/2S6QPH4tNUCKDl8= Name: res/drawable-mdpi-v4/ic_backspace_normal_dark.png SHA1-Digest: J4VyPfxSxgieBgc3Bumse3SztOI= Name: res/layout/design_bottom_navigation_item.xml SHA1-Digest: klT3nTai/AyZFzYkwOzpGr+G4w4= Name: res/drawable-mdpi-v4/abc_text_select_handle_left_mtrl_light.png SHA1-Digest: W/Qo12yic1xpRjtGp7cyxpBT3iU= Name: res/drawable-xhdpi-v4/ic_check_normal_dark.png SHA1-Digest: NETa3V1Qnnz2QspULgJRXA4mGag= Name: res/layout/radial_time_picker_dialog.xml SHA1-Digest: ZjcwfBrzz2gsGna7/qTzCnHwUSs= Name: res/xml/preferences_chats.xml SHA1-Digest: 8A+NPfvsYxTuEsDEKHzqd8pSgdU= Name: res/drawable-xhdpi-v4/ic_menu_add_field_holo_light.png SHA1-Digest: a19u8qsMIgWqbipY8WunV44A7o0= Name: res/drawable/background_pattern.png SHA1-Digest: eBsAAHA2pACsyImDHFj66PrZFKA= Name: res/layout/abc_popup_menu_item_layout.xml SHA1-Digest: +61DnFswt1tn1sv52roYJY333rw= Name: res/drawable-hdpi-v4/ic_download_circle_fill_white_48dp.png SHA1-Digest: JPAS+Viw/0c/rwmkas+IB8Hh+zg= Name: res/layout/hms_picker_view.xml SHA1-Digest: BJpAu+fVnjEl1XAWwQm9UacGkTg= Name: res/drawable-mdpi-v4/ic_account_box_light.png SHA1-Digest: lVQSsLLXlZuHe2ozbIXLeC/0fCk= Name: res/drawable-mdpi-v4/ic_emoji_people_normal_dark.png SHA1-Digest: Vbl1YH0se4Zp3uLIU65UuNsO2lY= Name: res/layout/media_overview_activity.xml SHA1-Digest: Da1wt0pgVpV55/RDWJaWM4Ihovo= Name: res/drawable-hdpi-v4/ic_save_all_white_24dp.png SHA1-Digest: Kho0UY1QD9/XQXM4XeU2k9k20mI= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_84 SHA1-Digest: RXg8ZCyGT2W/pQDo6jOOCucmFYE= Name: res/drawable-hdpi-v4/design_ic_visibility.png SHA1-Digest: ZVs229CW1T4zwRD0gqYJrNTB2CI= Name: res/drawable-xhdpi-v4/abc_btn_check_to_on_mtrl_015.png SHA1-Digest: e1lIlQ6p/YUvIYoyCe/6CikluEo= Name: res/layout-v16/verify_identity_activity.xml SHA1-Digest: Dj+JIUDrK0eSETGeIodTIOH7Jwc= Name: res/drawable-xhdpi-v4/switch_thumb_pressed_holo_light.9.png SHA1-Digest: VTcVro7tRSB7dCiFLkcjEK1gte8= Name: res/drawable-xhdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png SHA1-Digest: n3rquhXmVYjYpHMG9RG+SAJc+rA= Name: res/drawable-ldrtl-xxxhdpi-v17/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: IiQ92KKKcRVz1q2BpPfR0GMDdtA= Name: res/drawable/notification_bg.xml SHA1-Digest: 9AFcaFfLJMiugO8v7FmbFNfihsU= Name: res/drawable-mdpi-v4/ic_message_black.png SHA1-Digest: I7Xp6tEvbH2IE1OUNevK0b7K880= Name: res/drawable-hdpi-v4/abc_ic_star_black_16dp.png SHA1-Digest: 7DXQCyQGhFdQExgxQdETPf4ezrM= Name: res/drawable-hdpi-v4/abc_textfield_default_mtrl_alpha.9.png SHA1-Digest: Rmk8UREagQdf47LncSS6fq9RbAo= Name: res/drawable/abc_ic_arrow_drop_right_black_24dp.xml SHA1-Digest: kUvz65VYVPxxDx+UerVfiTaN2Zs= Name: res/drawable-xxhdpi-v4/ic_refresh_white_18dp.png SHA1-Digest: F9pX43A38QCJk72HWQMXTk1HO50= Name: res/layout/design_layout_tab_text.xml SHA1-Digest: SIz1wfljARNQwBdK8NWsBSfi3dc= Name: res/color/design_tint_password_toggle.xml SHA1-Digest: OL42+5K65KFw7u0d3/CjyOR1fRM= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_81 SHA1-Digest: A1I5nxwmM7Cjx2rfURezn1a/kIM= Name: res/layout-v21/conversation_fragment.xml SHA1-Digest: /lJ8C8vcPPW2PeKdp3SRfLWZhOU= Name: res/color/design_error.xml SHA1-Digest: XPQoCxvkOrPTeQYV6CgWpcHVza8= Name: res/drawable-mdpi-v4/ic_keyboard_white_24dp.png SHA1-Digest: eQwPXKVg6XijuO+5oVTN3aHQ9hQ= Name: res/drawable/last_seen_divider_text_background_light.xml SHA1-Digest: rpqyDpgoCABNYioAKGP/1EiGaI0= Name: res/drawable-xxxhdpi-v4/fab_shadow_mini.png SHA1-Digest: gpDjkxHAvhDgKQjYpWxr0HhMM7c= Name: res/drawable-xxxhdpi-v4/ic_arrow_forward_white_24dp.png SHA1-Digest: dbaROnHC3HchorbfyZdlynn4jv4= Name: res/drawable-mdpi-v4/ic_send_sms_secure.png SHA1-Digest: 59nwccWj13mmtU/7cLau6207f/c= Name: res/drawable-mdpi-v4/textfield_focused_holo_light.9.png SHA1-Digest: HZ9iQgcyhTz2F7RRfnq0smD0pLo= Name: res/drawable-ldrtl-mdpi-v17/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: nXZ4V1mFaOHaCmrZgjirnAh+5fg= Name: res/color-v11/abc_hint_foreground_material_light.xml SHA1-Digest: bwFvqJjQtoVWIGh5ORSrNFGtO+U= Name: res/drawable-xhdpi-v4/abc_text_select_handle_middle_mtrl_dark.pn g SHA1-Digest: 8Xul44BbEF2flRfTADrorPhA2rE= Name: res/color-v23/abc_btn_colored_borderless_text_material.xml SHA1-Digest: B/fNYd3gcJ/df3PhJe8aALH6euA= Name: res/drawable-hdpi-v4/fab_shadow_mini.png SHA1-Digest: QKG4gpsX+QogBYisabhbCv3XeLU= Name: res/drawable/emoji_category_objects_light.xml SHA1-Digest: uD/Fl+aPOFRztUBW7/57ho10AEg= Name: res/layout/emoji_drawer.xml SHA1-Digest: CIJy3GMnik/4H9CI9+e57RqGXts= Name: res/drawable-xxhdpi-v4/ic_menu_remove_holo_light.png SHA1-Digest: wZMtQu26Bycc/gXQxYyJ48WMMb4= Name: res/color/abc_search_url_text.xml SHA1-Digest: mgOeEFdKIOmQBIiUEKXZ+y4FBn8= Name: res/layout-land/radial_time_picker_dialog.xml SHA1-Digest: 7mTSBWhNTRy6zodyvYl0jFcpQI4= Name: res/layout/calendar_date_picker_dialog.xml SHA1-Digest: +VZrWk4Eq7FdIk90cR506Oyfjdo= Name: res/drawable-mdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png SHA1-Digest: eF/LuENYUMfZZS3fHrJi1byAVZU= Name: res/drawable-xxxhdpi-v4/ic_unarchive_white_36dp.png SHA1-Digest: udoGXGX4LhrUvoy2quoHNw6noEI= Name: res/drawable-v11/edit_text_holo_light.xml SHA1-Digest: PfvbhTnt8unDB9uovuE++VevD6k= Name: res/drawable-mdpi-v4/ic_video_light.png SHA1-Digest: s74Hd9C8ADpO502v6TKNOme/UyM= Name: res/drawable-mdpi-v4/ic_info_outline_dark.png SHA1-Digest: WxTYcDMT33eIYH1elqVb6PQAht8= Name: res/drawable-mdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png SHA1-Digest: nuld1RomiGBKqE5EsGnC+AbnNZ4= Name: res/drawable-xhdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png SHA1-Digest: 6jnEZnvF6Wf/iso9scq8BExu9D4= Name: res/color/abc_secondary_text_material_dark.xml SHA1-Digest: 3hZqJng31S8e4pl48fkYGRumEUQ= Name: res/layout-v17/notification_template_lines_media.xml SHA1-Digest: fXWFBq1QqGxSTc89fOshXXYXVkU= Name: res/drawable-hdpi-v4/ic_notifications_gray.png SHA1-Digest: A7HeGJJrajg3rAbqIgfOgvWoqII= Name: res/drawable-xxhdpi-v4/ic_contact_picture.png SHA1-Digest: tSETePnYRYOH+Olkr9TSthQY6sg= Name: res/layout/design_navigation_menu.xml SHA1-Digest: nGgjj3rDby9y4GZb7XuXG+0i6hM= Name: res/layout-v17/abc_popup_menu_item_layout.xml SHA1-Digest: Q3lxeNeJ5SCLvtUpQigaCUSW2Wg= Name: res/drawable-xhdpi-v4/abc_ic_star_half_black_36dp.png SHA1-Digest: SoI6H44G0Tn/aehVBwD4xNvR4k8= Name: res/drawable-hdpi-v4/ic_send_white_24dp.png SHA1-Digest: oTNDcYmwfOQs4qavTi5X1i5102M= Name: res/drawable-hdpi-v4/ic_done_white_18dp.png SHA1-Digest: fK7s4FyFEQAxnHHjWosq1c1wLGw= Name: res/menu/conversation_list_batch_archive.xml SHA1-Digest: B8kbAyricbY4WLvgWQ72pAPSAWs= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_94 SHA1-Digest: W0CSkKs60WzDI0QUZ1mhx6CmIPI= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_95 SHA1-Digest: owiIKf9pjSZoNZMs63sucQc8p64= Name: res/layout/share_intent_row.xml SHA1-Digest: /qI4T5Xw817feCxvMolDV866zmY= Name: res/xml/preferences_notifications.xml SHA1-Digest: VpDTAz79t3R+nQZjgPv0iZp52GI= Name: res/drawable/notification_icon_background.xml SHA1-Digest: 4Y1VdLi9SHAewoLxNgLA2rlI8M0= Name: res/drawable-xhdpi-v4/switch_bg_focused_holo_light.9.png SHA1-Digest: OIa2+0APqiitnkIjp1qmRxaODoE= Name: res/drawable-xxhdpi-v4/ic_info_outline_light.png SHA1-Digest: t8G2LGMDdspdjPpTuTp9WS9PTBg= Name: res/layout/prompt_passphrase_activity.xml SHA1-Digest: 09Bizk8wpIKXkGdrtBaWUFpL77U= Name: res/drawable/button_background_light.xml SHA1-Digest: /Bll3+L1AkZiLxMhNlReLxUlkVE= Name: res/drawable-v11/emoji_category_flags_dark.xml SHA1-Digest: tqnjHglvtqKRsTkq7o49fyLHqx0= Name: res/layout-v16/calendar_date_picker_header_view.xml SHA1-Digest: E0Mgbv/6FhhCKZC2o4kI7sczdS0= Name: res/drawable-xhdpi-v4/alert.png SHA1-Digest: qskbMn0jztqg1DvP6T3TxsVqBBc= Name: res/layout/contact_selection_activity.xml SHA1-Digest: dJFaoQB8zVefREvK64KPM393w90= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_91 SHA1-Digest: HXgo4Z3+zEUMIe0Gj3t9Geyt8RM= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_90 SHA1-Digest: xmD9UZpmrXmHXGBwgKcnUgG3prY= Name: res/drawable-xxhdpi-v4/ic_message_gray.png SHA1-Digest: 4HgrvxnxB4V+ehblNGmHkJV/6mo= Name: res/menu/conversation_list.xml SHA1-Digest: z9RkErm13m+o+RJ2/r+NSEHBQkg= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_49 SHA1-Digest: 5u8Emu23ipjQSHPDBp+rNN5gLes= Name: res/drawable-mdpi-v4/ic_save_white_24dp.png SHA1-Digest: 3BfYiEyVhrUolewBWRYqH3EjP2A= Name: res/drawable/compose_divider_background.xml SHA1-Digest: hSlm/fjANSZGvY0jNTBpraaWRNI= Name: res/drawable-xxhdpi-v4/ic_action_warning_red.png SHA1-Digest: NraVnc4MYwCYbuuxiC0lQSHCxgg= Name: res/drawable-mdpi-v4/textfield_disabled_holo_light.9.png SHA1-Digest: t++DHoZpGcnF7y+QUYwVT/72aKQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_44 SHA1-Digest: TVnQ8NXIFuFz2qYs35e/XIiGJek= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_43 SHA1-Digest: YwmvuPrm5iistAma7bavl8QEvkw= Name: res/drawable/ic_check_light.xml SHA1-Digest: pRnFugpsobbk3zUm7npXSy8Dc7M= Name: res/drawable-hdpi-v4/ic_menu_search_holo_dark.png SHA1-Digest: /2wBqxOy0cC40ZI6fj5eSS8V10E= Name: res/drawable-xxhdpi-v4/ic_emoji_symbols_activated_light.png SHA1-Digest: UQ78RTXRCKvUMF1i3wgSR/f6YkA= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_36 SHA1-Digest: Q6P0BgyIFO14RidwktMDzIKtUAc= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_31 SHA1-Digest: r/DBDrMghpy33Q11YD6SwLXaCCg= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_30 SHA1-Digest: zX3yz7FhjbZayv9D47R7u97JH+E= Name: res/drawable-xxxhdpi-v4/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: esewcPWP43YzeikiSszMdbAAolE= Name: res/drawable-xhdpi-v4/ic_volume_up_light.png SHA1-Digest: lvwZMSjJIkqYFqzFGgXOGI5CjM8= Name: res/drawable/notification_bg_low.xml SHA1-Digest: RdoLiETS+XSopjRxjEzYLBZ8tLA= Name: res/drawable-xxhdpi-v4/icon_cached.png SHA1-Digest: GH4pTOyQLF/xy6pyGXsM0mgX7rQ= Name: res/drawable-xhdpi-v4/ic_visibility_grey600_24dp.png SHA1-Digest: FqGRsllTs8N0d5ek77AEpBiEkpo= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_34 SHA1-Digest: QJCaGbU/lFnE77x7YIoqtsjah/M= Name: res/drawable-xxhdpi-v4/abc_btn_check_to_on_mtrl_000.png SHA1-Digest: iGm+MqvuHagbCTikSNZ2q6527cs= Name: res/drawable-mdpi-v4/ic_brightness_6_black.png SHA1-Digest: Y1CqXJk7c22tGuqu+WqX4oanWfU= Name: res/drawable/design_fab_background.xml SHA1-Digest: RnDZ4YODuNg44An4VRSM13iDsgI= Name: res/drawable-xxhdpi-v4/ic_account_box_light.png SHA1-Digest: DGezBrNdeaOR3EDeh10knJQlW0I= Name: res/layout-sw600dp-v13/three_keys_view_text.xml SHA1-Digest: rCGhKE9ZDipF1CLJ4b0FShiSZUk= Name: res/drawable-hdpi-v4/ic_delete_black.png SHA1-Digest: J+GJotMCHRqU388rGF3PTnwT0Yo= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_66 SHA1-Digest: sAk8V+6UnOy3rXvWnM6/28B9JCM= Name: res/drawable-xxhdpi-v4/ic_select_all_white_24dp.png SHA1-Digest: dMqhWC0rHUUFTxHE02qSC260bCw= Name: res/animator-v11/upper_pause_to_play_animation.xml SHA1-Digest: h7h1IR3LLxizByblffdV+ZIIvWs= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_62 SHA1-Digest: /GFJ0ylw9Il1gfM51PWk1RBl2A4= Name: res/drawable-hdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png SHA1-Digest: xrEYQ5r7Zv8komYSuo3VLdViEUQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_61 SHA1-Digest: y6DIvaz5WnaAn2TRzoK2bvfLQ7o= Name: res/drawable-hdpi-v4/ic_dialpad_white_24dp.png SHA1-Digest: v5PK56rWt9jZkuaz2Tut3WCve8o= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_63 SHA1-Digest: z55xt2Ayw/sf1cZS1n7htuZln00= Name: res/drawable-xhdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png SHA1-Digest: Lr8CV2APFenrT2CnF18DHzPxPmc= Name: res/drawable-mdpi-v4/icon_lock.png SHA1-Digest: GGDtAyKs2tmo3a95V0H/KdaPS5k= Name: res/drawable-hdpi-v4/ic_recurrence_bubble_outline.png SHA1-Digest: 3AGl+T+k+f4Opirzt8JX3zRUl4Q= Name: res/layout-v17/abc_alert_dialog_button_bar_material.xml SHA1-Digest: oF8mBtXkGOy/041kd1oglLxKpMI= Name: res/drawable-xhdpi-v4/abc_list_selector_disabled_holo_light.9.pn g SHA1-Digest: 55f4pDcLSMwJ2///c7EjaRD4TtY= Name: res/layout/abc_action_bar_title_item.xml SHA1-Digest: QzmSVkZhkH/CGOFdlrZ9s21SgS8= Name: res/layout/color_preference_items.xml SHA1-Digest: PwBWPIRsTNT6kxblCBJX+ueKwCo= Name: res/layout/notification_template_part_chronometer.xml SHA1-Digest: N3bpzPkHEH/egwMXsQQ5MXKZrfM= Name: res/drawable-xxhdpi-v4/ic_emoji_nature_normal_light.png SHA1-Digest: m0/FBDMkAmG2sjUUzXE0ty2NQRw= Name: res/layout/zooming_image_view.xml SHA1-Digest: wjmUQd8KKCMX7JN384NxM9U03W4= Name: res/animator/upper_play_to_pause_animation.xml SHA1-Digest: 1TOkjm6F2/DzGTLmzL7Ol4HlHJM= Name: res/drawable-mdpi-v4/ic_volume_off_grey600_18dp.png SHA1-Digest: +vO8/raOnJIMUUho5sPrnISDDoU= Name: res/drawable-hdpi-v4/ic_send_insecure_white_24dp.png SHA1-Digest: /tlDKZmj+ITZQdb9V+m49SSWVjs= Name: res/drawable-xhdpi-v4/ic_photo_camera_dark.png SHA1-Digest: 0z4aTrrxUBQ133+qOtoG44E7yAo= Name: res/drawable-mdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png SHA1-Digest: EYD0L7FYlUYj4vZvX1mmqzIwLBE= Name: res/drawable-xhdpi-v4/ic_block_white_18dp.png SHA1-Digest: O4y8hdGpbrDXQz4srv4JV/No0HE= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_58 SHA1-Digest: hkt/emROO5dafVOiI7Zx7fKidEI= Name: res/drawable-hdpi-v4/ic_emoji_flags_normal_dark.png SHA1-Digest: l4ASGy17UUsb7ymwG5cl6ndH71I= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_55 SHA1-Digest: fv4z5lbCDxm8xUvQIY8+gDq08Nk= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_54 SHA1-Digest: EjExNy18aod1tZNDB5Mvc+z5EJs= Name: res/drawable-xxhdpi-v4/ic_warning_dark.png SHA1-Digest: BuB4DE8pjB+1lNNjrmP1GnDwwzc= Name: res/drawable-xxhdpi-v4/ic_delivery_delivered_dark.png SHA1-Digest: raZe/SpGw7+m32jNalmYFRJD+OI= Name: res/drawable-hdpi-v4/ic_brightness_6_black.png SHA1-Digest: KFWvIduHGUzkdtOnjFR4rjsGm8U= Name: res/anim/abc_popup_exit.xml SHA1-Digest: 6uAxkSAqOnz6wM+5oio7//G38vY= Name: res/drawable-hdpi-v4/abc_scrubber_track_mtrl_alpha.9.png SHA1-Digest: bbu4U1Z2FReSVaAwtf9Uj+pAXxA= Name: res/drawable-xhdpi-v4/abc_switch_track_mtrl_alpha.9.png SHA1-Digest: xe5aMoZuNGwGdXksGOYPSE3NVpk= Name: res/drawable-xxhdpi-v4/ic_cancel_white_24dp.png SHA1-Digest: MhDSWzHeLiZFYWo1fQBGgZIWpxM= Name: res/drawable-mdpi-v4/ic_done_all_white_18dp.png SHA1-Digest: kr5wUWq9/7hcmKpj2dpnOmRb2Ko= Name: res/drawable-mdpi-v4/ic_brightness_6_gray.png SHA1-Digest: P5bfosvFzP8DRkPZAQaWEUbr9Do= Name: res/drawable-xhdpi-v4/ic_emoji_flags_activated_light.png SHA1-Digest: qLPkosq6BoLzIPVDUEA8qRCOBNU= Name: res/drawable-mdpi-v4/design_ic_visibility_off.png SHA1-Digest: qwRLhCF05PgnqmU2XRTfcbHoWpw= Name: res/drawable-hdpi-v4/ic_photo_camera_light.png SHA1-Digest: YqtGiRfa9Sfo0tzA4RKzfGIINaw= Name: res/drawable-hdpi-v4/ic_image_light.png SHA1-Digest: 6XURzKlid8os71X+M/kkDIKtKYU= Name: assets/emoji_symbols.png SHA1-Digest: XE9qEioRlR74jFdnavx4j39xY3k= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_675 SHA1-Digest: Egbq8VQn3A6YTmNLqQtbJWXPR8Q= Name: res/drawable-xhdpi-v4/ic_done_all_white_18dp.png SHA1-Digest: IqzBd/sAzp2vr9Zz3XXjUWWYayA= Name: res/drawable-xhdpi-v4/ic_delete_gray.png SHA1-Digest: VRvA38i4ZosD8xe7w2CHcHtwPDs= Name: res/drawable-xxhdpi-v4/ic_textsms_grey_32dp.png SHA1-Digest: KRTtcnS3aob83jnO2puQtMcnC6g= Name: res/drawable-mdpi-v4/ic_lock_white_18dp.png SHA1-Digest: HWpWWMAysGi/Ei9A6d3DKw28mBw= Name: res/drawable-hdpi-v19/switch_thumb_pressed_holo_light.9.png SHA1-Digest: K3YgpyXSgJr++z61OECZhndc9kM= Name: res/drawable-hdpi-v4/ic_emoji_recents_normal_light.png SHA1-Digest: PmKdWE/l07qdHCPnDWsUNCt7ino= Name: res/drawable-mdpi-v4/ic_send_secure_white_24dp.png SHA1-Digest: exJ2SaC4rFenjkwgLxUiIDQaYWg= Name: res/drawable-xxxhdpi-v4/ic_block_grey600_18dp.png SHA1-Digest: YYE9kNJ6soXl0ZGfKt8xxe6CwYU= Name: res/drawable-xhdpi-v4/switch_thumb_disabled_holo_light.9.png SHA1-Digest: ljpsvOw3MQTa68v5CQddL5JUS+A= Name: res/drawable-xhdpi-v4/ic_info_outline_white_24dp.png SHA1-Digest: Xg3np82h+s54ITsFzwApkFGHflI= Name: res/drawable-xhdpi-v4/abc_scrubber_control_off_mtrl_alpha.png SHA1-Digest: 7s2leAY1r3tTtxomqJtjfVAN/l8= Name: res/drawable/design_snackbar_background.xml SHA1-Digest: y0hl2UgZoIkRVimAgN0heOxPqhs= Name: res/layout-v16/conversation_item_pending_v11.xml SHA1-Digest: 3BKWy5KoS+DU1okCGCdO0eKv4CM= Name: res/drawable-hdpi-v4/ic_create_white_24dp.png SHA1-Digest: +zaYNvep98pE6VBn7KLB/SKj1gI= Name: res/layout/key_caching_notification.xml SHA1-Digest: BYjDXuzKljnw8ttDrqmWqxC8rOg= Name: res/drawable-xxhdpi-v4/textfield_activated_holo_light.9.png SHA1-Digest: v1cd6v0pRkDauAh+/cr18dBMykA= Name: res/drawable-xxhdpi-v4/ic_movie_creation_dark.png SHA1-Digest: kSZCFwbqJwlipEVBmLdh5SR/qVM= Name: lib/armeabi/libcurve25519.so SHA1-Digest: hyoc/ivNYSNCGdFKdWtJtq8LlrY= Name: lib/x86/libcurve25519.so SHA1-Digest: 1/qEk4pIj0hCaCyKA6XZhCQBEZw= Name: res/drawable-mdpi-v4/ic_menu_search_holo_light.png SHA1-Digest: hLzglnVP8CqrP4zbyg78Be0YriU= Name: res/drawable-xxhdpi-v4/abc_textfield_search_activated_mtrl_alpha .9.png SHA1-Digest: WQ8PqUvvH8nOnzNH5uPMzVsVa+Q= Name: res/drawable-hdpi-v4/abc_ic_star_black_48dp.png SHA1-Digest: 9zZhABOz1Q3ZndRBEwpf8HVzyeA= Name: res/drawable-mdpi-v4/abc_text_select_handle_middle_mtrl_dark.png SHA1-Digest: I7m7a6z3jtIZ0E3nG+dtZ5GXFpg= Name: res/anim/abc_fade_in.xml SHA1-Digest: wE1QEZhFkLBWMw4TRtxPdsiMRtA= Name: res/drawable-xxhdpi-v4/ic_lock_dark.png SHA1-Digest: +NeEZUkgdxipmiJWfO7EnDSaVC4= Name: res/drawable-xxxhdpi-v4/ic_archive_white_24dp.png SHA1-Digest: Jm4z9iVpSUMuu6rB6EBJisPkQxI= Name: res/drawable-hdpi-v4/ic_volume_off_grey600_18dp.png SHA1-Digest: jPKcbkndw4fhcvRIzrY5Qsf9axQ= Name: res/drawable-sw600dp-hdpi-v13/ic_backspace_normal_dark.png SHA1-Digest: 6MlFNjLjWejakHp7mibnYN5g3sE= Name: res/drawable-xxhdpi-v4/ic_recurrence_bubble_outline_disabled.png SHA1-Digest: XT65zBj9nc/wJfCIh5kVI3HHdPA= Name: res/layout/abc_screen_simple.xml SHA1-Digest: wcPlv/nr5pkFN65VKYp3t34HJzY= Name: res/layout/abc_search_dropdown_item_icons_2line.xml SHA1-Digest: zuGa8MGzNKD8HEVLacvOV6QWpew= Name: res/layout-v17/conversation_title_view.xml SHA1-Digest: X2wnAsbTJQOdDD5Yla92hZj5Ep4= Name: res/layout/conversation_item_sent.xml SHA1-Digest: S916DeMqZ15W+Lg0ts+0k/DF2g8= Name: res/drawable/share_list_divider_shape.xml SHA1-Digest: 2ex/sAlke8bN2MQJTFVY60LNmPI= Name: res/drawable-hdpi-v4/abc_text_select_handle_right_mtrl_light.png SHA1-Digest: m5BiWbvIdHBv+pqV2EE1xWczYhI= Name: res/drawable-xhdpi-v4/ic_pause_circle_fill_white_48dp.png SHA1-Digest: MPyCwxn18rrFgFYbNQZal8Alcqw= Name: res/drawable-xxhdpi-v4/design_ic_visibility_off.png SHA1-Digest: SLjRVIOH1nuQ3ylhQ2npZFXmGlc= Name: res/drawable-hdpi-v4/ic_emoji_symbols_activated_dark.png SHA1-Digest: wVM0JNPBL09Dc/M+khA8pVD4C0c= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_255 SHA1-Digest: GR5suOXxRCRSaPOoEXvpBezuIsM= Name: res/drawable-xxhdpi-v4/abc_list_focused_holo.9.png SHA1-Digest: qCddjZI8yABkWFvWCWlg+bQVD7M= Name: res/drawable-xxhdpi-v4/textfield_disabled_holo_light.9.png SHA1-Digest: 8uAr5Lt4boLAicIMjYMnfGSIX3w= Name: res/drawable-hdpi-v4/ic_menu_barcode.png SHA1-Digest: EX5mWZm5BgXuBUNFocBGP4yQU6o= Name: res/layout-v21/notification_template_custom_big.xml SHA1-Digest: eMDKcwiHm3P1l+bsaSD9j6QFqE4= Name: res/drawable-xxhdpi-v4/sms_system_import_icon.png SHA1-Digest: JWIdtXXTfC2pEijSj8uZ9SZRR7Y= Name: res/color-v23/abc_tint_edittext.xml SHA1-Digest: gl5NW5wAw/zYl0bbs9Z1gJfz9fA= Name: res/drawable-xxxhdpi-v4/transfer_controls_background.9.png SHA1-Digest: x7nPBDQlImT7zpcqgig6+lpYOys= Name: res/layout/conversation_title_view.xml SHA1-Digest: PHclzDkPlkxMvDe1iBNJyOfq2Uk= Name: res/drawable-mdpi-v4/ic_emoji_recents_activated_dark.png SHA1-Digest: xshuIndsY927AhHg1NjuMVLiT20= Name: res/drawable-xhdpi-v4/abc_list_pressed_holo_light.9.png SHA1-Digest: 4CNgdraLjH84scvRJUfzItc3PbA= Name: res/drawable-mdpi-v4/ic_clear_white_24dp.png SHA1-Digest: tivFR5Pg7NTzLhQFxmzxw4LhpvY= Name: res/drawable-xxxhdpi-v4/ic_forum_black_32dp.png SHA1-Digest: mPrnI21janVOrga6scZMonvrSHA= Name: res/drawable-xxxhdpi-v4/abc_ic_star_half_black_36dp.png SHA1-Digest: TnwxMKyw13/+oTuxDf3OnEWDW78= Name: res/layout-v17/notification_template_big_media_narrow_custom.xml SHA1-Digest: aaFbDiZySvnPiDoBpHVG/8e4/LE= Name: res/drawable-mdpi-v4/ic_advanced_gray.png SHA1-Digest: +Uk8rEKjUdjYVcpy6KkQCQF9+2g= Name: res/menu/conversation_list_batch.xml SHA1-Digest: FiB0SSD2JzMhRC3siBvdDyGkgws= Name: res/drawable-xhdpi-v4/fab_shadow.png SHA1-Digest: 2HYDT036dFl/SR0UI6Ou2N01QBU= Name: res/drawable-hdpi-v4/textfield_disabled_holo_light.9.png SHA1-Digest: 0uIKHs2pNZE0TCfBlw/gmH5Viuw= Name: res/drawable-hdpi-v4/abc_btn_check_to_on_mtrl_000.png SHA1-Digest: 16vIEVXQ+k0+9qfLK8Cds0zIZCY= Name: res/drawable-hdpi-v4/ic_check_white_24dp.png SHA1-Digest: yRKvOlN4L/fng8u4Jxc0HUMTPNc= Name: res/drawable-xhdpi-v4/ic_volume_off_white_18dp.png SHA1-Digest: yB2h1TiNdb6rs735j1ukm2deiZY= Name: res/drawable-xxhdpi-v4/ic_block_white_18dp.png SHA1-Digest: p9nZ3831Mm/GVCdGS3W7J2vwAts= Name: res/drawable-xhdpi-v4/ic_emoji_emoticons_activated_dark.png SHA1-Digest: WbVoBPPPt7ocOIY2N6pxfTDuNWw= Name: res/drawable-xhdpi-v4/ic_warning_dark.png SHA1-Digest: vI0kBo2QoadOyYhbebgSE1kpDnw= Name: res/drawable-xxxhdpi-v4/ic_unarchive_white_24dp.png SHA1-Digest: WPb8uDzmwkmUPWCQCgFsnOFo1yA= Name: res/drawable-hdpi-v4/ic_visibility_off_grey600_24dp.png SHA1-Digest: WrFfyPZCMZkNcKNH0/jXDxUtlM8= Name: res/drawable-v11/emoji_category_recent_dark.xml SHA1-Digest: BoZ2dC5kzcIbIx4gwYvWke1zNQM= Name: res/drawable-xhdpi-v4/ic_emoji_symbols_normal_dark.png SHA1-Digest: r8abfKuqfSUJWiUG2AFT/uysZxM= Name: res/layout-v21/conversation_title_view.xml SHA1-Digest: Tg0wV8pcxD05YVaYKd+xFtHYZhE= Name: res/drawable-mdpi-v4/ic_content_copy_light.png SHA1-Digest: kkT/ZtIAYURrC11XLIoC6HxuSXU= Name: res/drawable-xxhdpi-v4/ic_visibility_off_grey600_24dp.png SHA1-Digest: PBMaGZk/N3aLEwrJntAUpHCS2yo= Name: res/drawable-mdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png SHA1-Digest: qzSKvi0rQ140s0TA55aBiWLqZkY= Name: res/drawable-hdpi-v4/ic_group_photo.png SHA1-Digest: 6X6IuPMf/i3zPccwEa5rqEMBEcY= Name: res/menu/conversation_list_empty.xml SHA1-Digest: TMRtrz8omO3JnMLziHrWtZD42mo= Name: res/drawable-hdpi-v4/ic_backspace_disabled_dark.png SHA1-Digest: nGPkozJKw1x0Rw8bJJjOl6gAips= Name: res/drawable-v11/emoji_category_objects_light.xml SHA1-Digest: MzmYGqtPaeQZFVT/8NdkVW78hS0= Name: res/drawable-xhdpi-v4/ic_send_sms_insecure_dark.png SHA1-Digest: pTz2XGg9C7JjliPA1YyqSsF8adk= Name: ws/com/google/android/mms/pdu/package.html SHA1-Digest: ye2lxAPXev+RReyb/W+E5sl8jIY= Name: res/drawable-xhdpi-v4/ic_emoji_recents_normal_dark.png SHA1-Digest: peXDYKfMUq4vWyVK9XRdHKy9YTI= Name: res/drawable-mdpi-v4/notify_panel_notification_icon_bg.png SHA1-Digest: y9fFL7ZwxVmqnnOis/943Gj9mHg= Name: res/drawable-xxhdpi-v4/ic_emoji_emoticons_normal_dark.png SHA1-Digest: JAremr2KFp3vYY3/lBDZ8lLWPK8= Name: res/drawable-xhdpi-v4/divet_lower_right_light.png SHA1-Digest: wzMeNheVDFOHZfw6pLbUX/GbK98= Name: res/drawable-xhdpi-v4/ic_recurrence_bubble_disabled.png SHA1-Digest: u7/bcUxXHR1xB61DGGEc7bSKvCM= Name: res/drawable-xxhdpi-v4/ic_forum_black_32dp.png SHA1-Digest: twQY8z+UiEenkkcKGu92iWq+euk= Name: res/drawable-v23/abc_control_background_material.xml SHA1-Digest: M7P91J6Oq/IeAG37sfccnRIVMEs= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_679 SHA1-Digest: brii8vx5U3th9K0hIr7b19MpKXY= Name: res/drawable-hdpi-v4/ic_backspace_grey600_24dp.png SHA1-Digest: KZhpG5sCWyMPeYTn2z1ZTRNlRBk= Name: res/drawable-hdpi-v4/notification_bg_normal_pressed.9.png SHA1-Digest: mVyFdyHKSjUuQpG+f7zlYC/svPk= Name: res/layout/time_zone_filter_item.xml SHA1-Digest: J98Aas/jL/MnMKY6i2PA4j9RYSQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_676 SHA1-Digest: 4gGxM0M6k+qIXUWmmdKRACJhT44= Name: res/drawable/conversation_list_divider_shape.xml SHA1-Digest: j0vuZSNhvW58lO8uYnIKac7g9kE= Name: res/drawable-xxxhdpi-v4/abc_btn_check_to_on_mtrl_000.png SHA1-Digest: 2PLGy262CDuWvGAcqwLjzuuRvIg= Name: res/layout/select_dialog_singlechoice_material.xml SHA1-Digest: 6hlEA3ufhtXKfJiapXg4kuCsoJ8= Name: res/layout/conversation_fragment.xml SHA1-Digest: IwMTGFoT46gwdrGYF7KTkXyIz9A= Name: res/drawable-xxhdpi-v4/ic_add_white_24dp.png SHA1-Digest: GIRc5y8Vb3f6jXKYPY4vbJUdkdc= Name: res/xml/preferences_app_protection.xml SHA1-Digest: Mkyd9mWNqXjxvohDGC5w15FMLL8= Name: res/color/abc_primary_text_material_light.xml SHA1-Digest: QxwSL2/KR5e1LDlFTDHLZagbcCg= Name: res/drawable-hdpi-v4/ic_circle_fill_white_48dp.png SHA1-Digest: ML2jQD6xhLELNoXjYhMJn+65l7Y= Name: res/drawable-xhdpi-v4/ic_visibility_white_24dp.png SHA1-Digest: h4LkirIQKjUxtwO0DlnMNBG0b20= Name: res/drawable-v21/conversation_list_item_read_background_dark.xml SHA1-Digest: aWDc7VlipCrVRzbFuhsbhJDiVks= Name: res/drawable-xhdpi-v4/transfer_controls_background.9.png SHA1-Digest: CmzcrZNC8r+1hIxDz084H5GZEDw= Name: res/drawable-v11/emoji_category_places_dark.xml SHA1-Digest: Owcp6gHe/SjPFfbWYPHHoUaVGrU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZA SHA1-Digest: /wR+q5WuqeSYVq4OTnxax0fTnX8= Name: res/drawable-xxhdpi-v4/ic_error_red_24dp.png SHA1-Digest: no1QBl1qBiyPhA+fKH8oTpHO04o= Name: res/drawable-mdpi-v4/switch_thumb_holo_light_v2.9.png SHA1-Digest: w8Dy0yH3VYRGd70FBZl2zVgtszM= Name: res/drawable-xxhdpi-v4/ic_emoji_objects_normal_light.png SHA1-Digest: JHyrRJeccYNJeWzNN9fC5Oy/Smc= Name: res/drawable-hdpi-v11/icon_cached.png SHA1-Digest: +TCXEDkHf2wT6Ro7NwKnkcX+USc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_YE SHA1-Digest: HbLeneEtbwO+pWAy0EnGv0hSoC4= Name: res/drawable-hdpi-v4/spinner_disabled_holo_light.9.png SHA1-Digest: wiWkHAPVenl8UL3CUN7wiwB68o8= Name: res/drawable-xhdpi-v4/ic_emoji_nature_normal_light.png SHA1-Digest: wfixPVJOdpogZgbyI4TEahh5QWM= Name: res/drawable-mdpi-v4/abc_list_selector_disabled_holo_dark.9.png SHA1-Digest: 0lawN0TfON5HQhuTBR7Om1xGxUI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZW SHA1-Digest: XEwHXyO2BN+vjJ3oTmYwYF26fXM= Name: res/drawable/abc_switch_thumb_material.xml SHA1-Digest: GMLceoxorxIv4SfySzjNiKy4yRk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_800 SHA1-Digest: 0dlU9yXqTTryauz3RqUi3R2ERIY= Name: res/drawable-xxxhdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png SHA1-Digest: DqYT/YomMpTVjcgLxNiWd75/E14= Name: res/drawable-hdpi-v4/ic_emoji_recents_activated_light.png SHA1-Digest: 2+gwJDXYwypYG/+XcE/LGDYq7+s= Name: res/drawable/psts_background_tab.xml SHA1-Digest: RPiMPUR4wVCZVm6K01+4xKOM2YA= Name: res/layout-v16/transport_selection_list_item.xml SHA1-Digest: 9ZpszvVeyXxgdXBFYZuGeB6nNfE= Name: res/drawable-xxhdpi-v4/actionbar_icon_holo_dark.png SHA1-Digest: XS2gX3fVuiDm17r+g86lQnkv92M= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_808 SHA1-Digest: Er28OW5DpBu0S7qE78Rs46U9UVU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZM SHA1-Digest: UMqs5N78T04XZVHo+XfcnTXzp5k= Name: res/layout/support_simple_spinner_dropdown_item.xml SHA1-Digest: v9EKX2UNBQ+3qucl6nl8VOjoJ2A= Name: org/spongycastle/x509/CertPathReviewerMessages_de.properties SHA1-Digest: JEtZ3RAGGTVEFFC7U8WRwNNTJXU= Name: res/drawable-xxhdpi-v4/ic_emoji_emoticons_activated_dark.png SHA1-Digest: q/Atn8pScseD8+59O12FwaOVDVo= Name: res/drawable-hdpi-v4/icon_dialog.png SHA1-Digest: SemQwPZLu5y8tA9/OhifXOEMNtE= Name: res/drawable-xhdpi-v4/ic_account_box_light.png SHA1-Digest: hDkn2R9BCMRYcuDN8OZLbzcRMVs= Name: res/drawable-mdpi-v4/ic_message_white.png SHA1-Digest: qMQrG3OYJNqekHvNN5yf2mPf0Gg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_WS SHA1-Digest: w/P847FjVjBfxdL2c+7EX0wmklg= Name: res/menu/conversation_context.xml SHA1-Digest: 8poQR2hD6mBuYtTPSjxcXiesB2s= Name: res/color-v11/abc_hint_foreground_material_dark.xml SHA1-Digest: Muoz92tJTSeXi0SPaHigB+GjIqk= Name: res/drawable-xxhdpi-v4/ic_audio_dark.png SHA1-Digest: 5qNoPIu9bgbPkC8wtRp7dAf7gtM= Name: res/drawable-xxhdpi-v4/switch_bg_holo_light.9.png SHA1-Digest: EB5fOmXnZyZsagT7N1a70OEs0eA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_WF SHA1-Digest: J9WZUh84u+dw5LiVNdWHTrgoS44= Name: res/drawable-hdpi-v4/ic_video_light.png SHA1-Digest: B8rCPMmHoB5JPFV3REjOFfenk3o= Name: res/drawable-hdpi-v4/icon_cached.png SHA1-Digest: /0ynkRi/GNd/L7zAIMxMFZrzFfg= Name: res/drawable-hdpi-v4/spinner_default_holo_light.9.png SHA1-Digest: wNj51XPjwkpz5i7Qe8C0psbQlO8= Name: res/drawable-hdpi-v4/ic_warning_dark.png SHA1-Digest: zm1FTuklhZEHGM1BDKBc7+ymp9c= Name: res/drawable-hdpi-v4/ic_unlocked_white_24dp.png SHA1-Digest: QrDcUwJPBvJA2fia9L0hfPdwrJI= Name: res/drawable-xxxhdpi-v4/ic_dialpad_white_24dp.png SHA1-Digest: aS9pW5ZiVW23ktv2TgI50vDlnZY= Name: res/drawable-xxhdpi-v19/switch_thumb_pressed_holo_light.9.png SHA1-Digest: vOrQRbnBW344sB4vzWZnuvuoRho= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VI SHA1-Digest: vkoGk7tJGw/D7dD5k7jOMyijm38= Name: res/drawable-xhdpi-v4/ic_block_grey600_18dp.png SHA1-Digest: ElA4R0/C1Oa4WymUxbb7IbERn78= Name: res/drawable-xxhdpi-v4/ic_emoji_nature_activated_light.png SHA1-Digest: JiN+2lpMsROO3miESvAJOcRSeUQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VG SHA1-Digest: HrXQEpLrDYpMZKTpI9pOllxu/fE= Name: res/drawable-hdpi-v4/abc_list_selector_disabled_holo_dark.9.png SHA1-Digest: vVifsTusCsEMS/QLwleavhByCls= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VU SHA1-Digest: ILj3vdeklYp0FAJS7H+Drg4UwK0= Name: assets/emoji_nature.png SHA1-Digest: 3LR8FZBTV9dDX+3fPaFEdfQNKkQ= Name: res/layout/expiration_picker_dialog.xml SHA1-Digest: lBYj8JRu5oIpVDbXlzbIUFRJmTg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VN SHA1-Digest: q7Qn3cHSPT3S93peP2x9KWylEnQ= Name: res/drawable-hdpi-v4/ic_info_outline_white_24dp.png SHA1-Digest: 8tQHiDet7Fgbpnj0uJhuUzZNvz4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_UZ SHA1-Digest: qmNg7UeWXwcRyp+FXCA+LIdy1iE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_UY SHA1-Digest: PA6aZ1by8jynQ4c+eungIaeKx8M= Name: res/drawable-mdpi-v4/ic_emoji_recents_activated_light.png SHA1-Digest: 8K6eTIJEwqqtEkV+dYjfsN+yIbA= Name: res/drawable-mdpi-v4/ic_select_all_white_24dp.png SHA1-Digest: uPkT563M0zaS3nLr8L6tBajYOWQ= Name: res/drawable-xhdpi-v4/ic_recurrence_bubble_outline.png SHA1-Digest: E/z09yV2cKSnnGQ0KTHdUXY/P5M= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VC SHA1-Digest: WqIycqucMNbzQiehs8Hzfu81BbA= Name: res/drawable/abc_edit_text_material.xml SHA1-Digest: oiA6lTI8z8nUuKbfDkfiJVYFwwg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VE SHA1-Digest: qhqhE8cDEVERQp/hwdY9qtKHKTo= Name: res/drawable-mdpi-v4/ic_visibility_off_white_24dp.png SHA1-Digest: QnPKJQNSJWg+KFnw9I9uY3Gobpg= Name: res/layout/abc_action_bar_view_list_nav_layout.xml SHA1-Digest: HpKXyfGMcMRpYtrLU9ybBcuK1XI= Name: res/drawable-xxxhdpi-v4/abc_switch_track_mtrl_alpha.9.png SHA1-Digest: O9JInV5je9E+K0VDIh7tQxIyLAk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VA SHA1-Digest: X9RgrA3GEbXaosdHXS7UioJi6Go= Name: res/drawable-mdpi-v4/ic_emoji_nature_normal_light.png SHA1-Digest: 2AEqIjG+9A64jaXR1ow9UyNvQrM= Name: res/drawable-xhdpi-v4/divet_lower_right_dark.png SHA1-Digest: TrdSDRDDtAdn5HZRumod+VBzN8o= Name: res/drawable-hdpi-v4/ic_video_dark.png SHA1-Digest: LRwm36VyCekL+luFjclPSB5Z1wI= Name: res/layout-v17/select_dialog_singlechoice_material.xml SHA1-Digest: 9yxyqbR9qC/Rt3SI2daiW4WGGa8= Name: res/drawable-hdpi-v4/ic_emoji_flags_activated_dark.png SHA1-Digest: Qk4RhA+73EGzSksMNqfjsZEOHkc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_UG SHA1-Digest: wrNX0UqprVSO8t5el0+ktN0TetA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_US SHA1-Digest: 2/DGaH9u4Ne6CiJFda1J7mLLNGc= Name: res/drawable-xhdpi-v4/ic_brightness_6_black.png SHA1-Digest: 8Nl2BMxG0K8+DwQyxAddEO9EYPI= Name: res/drawable-xhdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.p ng SHA1-Digest: yMgf/1udbZRbmbVxWkO2tX8Dmw4= Name: res/color/abc_tint_btn_checkable.xml SHA1-Digest: EjutwwqwZcNixKT9MBicYlTCl2c= Name: res/drawable/share_list_divider_shape_dark.xml SHA1-Digest: dwoh6E4GqWi3+DAhO/ysZ0zWPa4= Name: res/drawable-hdpi-v4/notification_bg_normal.9.png SHA1-Digest: /y2KUDqzajVjYWrw5CoyqM7Jabk= Name: res/drawable-mdpi-v4/ic_textsms_grey_32dp.png SHA1-Digest: Z5jvmpt7DmWwvsAGPE9WWGAawI0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US SHA1-Digest: 9wBimbr0W9/oIwfS/Tn1C6Gd95Y= Name: res/drawable-hdpi-v4/ic_arrow_forward_light.png SHA1-Digest: 3WZvuZnSsZWuzdneGW5h5Zr5aK8= Name: res/drawable/abc_btn_default_mtrl_shape.xml SHA1-Digest: SKMRXFrMMLv2CZ0xhHWsL5pijc8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UY SHA1-Digest: hbAAX/CtFJm+reOOjQ19FI2N/oM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UZ SHA1-Digest: Hv4Pol9SdHJPa1Soye2xrTXzc1Y= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_UA SHA1-Digest: XEIgrzU4BwSpKojMzajxO8Jc42I= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TV SHA1-Digest: C0KZ5lvGSxh4y3B1G/x/NykuVjU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TW SHA1-Digest: 7OIeA1vJ+mkcPbIfP5JLCkOtWBY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TT SHA1-Digest: +QmgjZTwCkZ9kk1ic+7CxFHAD9s= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TZ SHA1-Digest: diCBTJiQppvA/rE+trGglphJ0ko= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC SHA1-Digest: oFnqWz68lh4TGE083rt0E3gq+Po= Name: res/layout/verify_identity_activity.xml SHA1-Digest: RvqpqlEPWGsVCyyrImHuo9HmYaA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VA SHA1-Digest: dk+7g6GpNiOKWiqTan6GO/EBhKk= Name: res/drawable-xxhdpi-v4/ic_visibility_grey600_24dp.png SHA1-Digest: ecYSYAe/QbzJOHp4AohDY8zSYxw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG SHA1-Digest: SlvnPws1MUdXYkFfLNvSTC6vC2k= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TO SHA1-Digest: BwUzD6t0mvz3hTqiw31cskrBTio= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TN SHA1-Digest: 6H/P3CVVgHcz0qsrirFpDcbOU7s= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TM SHA1-Digest: hka0u4sg0SVtltn9avVmPefCAlo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VE SHA1-Digest: /k4rJtwOSZvawp1iHrJzYYtenDA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TL SHA1-Digest: ZoHaDxUGWH1eg/2zTrEBk/b0mnU= Name: res/drawable-hdpi-v4/ic_menu_lock_dark.png SHA1-Digest: 09t4ugF802cMwk1VmJDI8yGxn9A= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TR SHA1-Digest: zLdfOpaYXSZRYVirbfGLVCilXVw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI SHA1-Digest: PbQLxt3r8E6tYcKkKl3OjGIe5rs= Name: res/drawable-sw600dp-mdpi-v13/ic_backspace_normal_dark.png SHA1-Digest: D8d3jzWwaJYFImRPS/jMKmOjwq8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TG SHA1-Digest: Z97IC3RazJPxpi4q5d5Vzk8BAhw= Name: res/anim/abc_slide_in_bottom.xml SHA1-Digest: 6SIMoqi7/LVEqpyfDSSCRJ9qRR4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VN SHA1-Digest: jXr5eqXsgg+eqXq81gOm/GFdgDg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TD SHA1-Digest: JBNGXYSPFUyhinfZpVBqtGbJZWc= Name: res/drawable-hdpi-v4/check_dark.png SHA1-Digest: /2RXLskv6ItLzRUAeVVlg/46buk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TJ SHA1-Digest: BYGxSZd4XCV5uu0gVjJYZ/5x56Q= Name: res/drawable/abc_textfield_search_material.xml SHA1-Digest: t7aLlxSJ1jiAbfeYrS+TIQ9arVM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TH SHA1-Digest: LLa2F3t7kV2WuaeLc14w/L2lXHo= Name: res/drawable-xxhdpi-v4/ic_lock_light.png SHA1-Digest: cggyhKwP8K467j9176ETpRtdy0A= Name: res/drawable-mdpi-v4/ic_search_holo_light.png SHA1-Digest: SGAd7cuOCvRNlYd3qBr3geJxi/c= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VU SHA1-Digest: HbjMYeDZRIdreBUbs2Cq8xgI5YI= Name: res/drawable-v21/abc_ratingbar_material.xml SHA1-Digest: lmjnTB/yh4tmiAkHkeKcav4nFGA= Name: res/drawable-mdpi-v4/textfield_activated_holo_light.9.png SHA1-Digest: 2tfE7kha7TRVkhq7YgpEw3Y9FzY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TC SHA1-Digest: P2rYn+GUzQmjwxnWNIV5nW9NSRU= Name: res/layout/alert_view.xml SHA1-Digest: Br0KH+NFXrf9pUA7J7nfo+tGLa4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ST SHA1-Digest: VkjSN7fLfBfcEe5SZcWv/uR6/Z8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SV SHA1-Digest: 87MTJtBvnekgRDqoh3aWergvuWY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SX SHA1-Digest: +M4ddjLE9vXFb6xw+flbYCuty8I= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SY SHA1-Digest: BEeh5XFWqcE47qNiKn93LFSRPL0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SZ SHA1-Digest: hJbbNKy1Q1bfkPX9I/PsS/mjzKw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SL SHA1-Digest: eIVoqanZ1ZJy67maaIFIT6R9FTY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WF SHA1-Digest: WbdeKurmJI9DXE9iHJuv59WXJwA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SK SHA1-Digest: AjNjSzJsuFLgA8Dcc4TvtCiuGTM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SN SHA1-Digest: UTz/izU4qZwk8y3ZvZKLoRIAvFs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SM SHA1-Digest: m+OKvr4CGjdGcJCjg5uNhP2qj7M= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SO SHA1-Digest: aVQi/dK6f6d6NrDH6GbfDcBtwXs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SR SHA1-Digest: mr2Dh77dKsHX60ZQlNDq49g12j4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SD SHA1-Digest: kEZMnEybm/LZwkI7J55Y0kWZkG4= Name: res/drawable-xhdpi-v4/ic_backspace_normal_dark.png SHA1-Digest: No+dYXGsvygs6zlpkF0mDfgDMWA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SC SHA1-Digest: QXORK2qsVZwQcZS3nHHTkuzujkU= Name: res/drawable-xhdpi-v4/ic_check_dark_disabled.png SHA1-Digest: MViTJyK0ai5eD+lcCbB/mfxqh7I= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SE SHA1-Digest: PxW+hZty5xN51P6O7m+pOpKjvjM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SH SHA1-Digest: y9IF0UKau4eEIN8MY6AXuYo1dkM= Name: res/layout/log_submit_activity.xml SHA1-Digest: 5SPs9x/Yx0vnD3sfhyN1L9CePNM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SG SHA1-Digest: rgXzetnPrU9k0R9cZIpaD8haYns= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SJ SHA1-Digest: I5oNkjMJePXEKnr+GP+0XoJpks4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WS SHA1-Digest: ItQKkoNByQeq1ddcu+r4o6aIbVY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SI SHA1-Digest: R/8v5Pg11kmuLZ4JjsC0ho7hqyI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SA SHA1-Digest: KSZXOsVtspugLxLthzbF5RGD8kY= Name: res/drawable-mdpi-v4/ic_emoji_symbols_activated_dark.png SHA1-Digest: p1Ts0ObIT4fpP3Oea/h2xJQ5qas= Name: res/drawable/notify_panel_notification_icon_bg_tile.xml SHA1-Digest: IwQ+uXwyEAKvfQTKMCGIQhQIP7A= Name: res/layout-v11/conversation_activity.xml SHA1-Digest: T6kpay7B1Dz0axKJFWNLCoeji0c= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SB SHA1-Digest: NIvNOGZuqSfKY4ldS/EoorKUAf0= Name: res/drawable-hdpi-v4/actionbar_icon_holo_dark.png SHA1-Digest: zY/nEIZhziwsJ79WRFhDlHDVJLU= Name: res/drawable-mdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png SHA1-Digest: M5x5yhIyfAE00veLbT8o+OstFp0= Name: res/drawable-xxhdpi-v4/ic_emoji_emoticons_activated_light.png SHA1-Digest: FCYCyqPIak1PPAm8lZuHrysywGw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_RW SHA1-Digest: s3HGVQB9sABfbWh2xXv4aYFOorc= Name: res/drawable-ldrtl-mdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: 9ZpcNdh+3CmLoXOI2QSTVAmsoKk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_RU SHA1-Digest: IyrojuthlS4Tltsc349tpSlRbT4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_RS SHA1-Digest: 4Zp4Rd85v0edYYVrTfzQlVeGFi0= Name: res/drawable-hdpi-v4/ic_recurrence_bubble_outline_disabled.png SHA1-Digest: 6ahYHWYMu4OAZInGqnk+ouf+IdQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_RO SHA1-Digest: KTLlKrp8mtsT4NqPTYNYefex/dk= Name: res/drawable-hdpi-v4/ic_send_push.png SHA1-Digest: C87YP/AcKU2OcHLJ+I8lhxvBT/4= Name: res/drawable-ldrtl-xxhdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: rb/o5dXnd3wSnkR3k6gSSsTsbsc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_RE SHA1-Digest: iGS6+KZfHJt03BjO4MnmSWLFYHE= Name: res/drawable/abc_seekbar_tick_mark_material.xml SHA1-Digest: 2cfdudxPpdKT3phtRi1TXi7pHmE= Name: res/drawable-hdpi-v4/ic_textsms_grey_32dp.png SHA1-Digest: vuG/t7wroVh3QjmE0gkH+m3X+ho= Name: res/drawable-xxhdpi-v4/ic_emoji_flags_activated_light.png SHA1-Digest: Bff6GcTHRm1uwjalo2G1J8Grgmw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_870 SHA1-Digest: JQd7ImrAcCDVBuYDH1JSPHWSf8s= Name: res/drawable-xhdpi-v4/ic_info_outline_dark.png SHA1-Digest: yH6D/pPYk7SiepHuMJSn04wwTlA= Name: res/drawable-xxhdpi-v4/ic_unarchive_white_24dp.png SHA1-Digest: zTeI0SzDMFGySNHyn4uNUZnfRnU= Name: res/drawable-v11/emoji_category_places_light.xml SHA1-Digest: gnqJDqV59B5rp8hFa7dVmg0xZEo= Name: res/drawable-hdpi-v4/ic_mood_grey600_24dp.png SHA1-Digest: Hj0b/K/XeEo0MrxOdqSqZMZ9DlE= Name: res/drawable-xxxhdpi-v4/ic_textsms_black_32dp.png SHA1-Digest: gTJ4CMlbnKlZx8zJqXQlfPlaR8k= Name: res/drawable-xxxhdpi-v4/design_ic_visibility_off.png SHA1-Digest: 39WgwQ8A2gMul/kCdVHSfMaXWio= Name: res/layout/share_fragment.xml SHA1-Digest: IqdoCw5LcV/pcaht4DHrvqaUR94= Name: res/drawable-xxhdpi-v4/abc_list_longpressed_holo.9.png SHA1-Digest: 2lRuxodMxnuWn+IclaJShuAV5+Y= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YE SHA1-Digest: L5FcXJoNyvTtE2xNkttWnJLWGoM= Name: res/drawable/abc_ratingbar_indicator_material.xml SHA1-Digest: 6gbbPFsN/J2Dxd3gmFcvpI6abI4= Name: res/drawable-hdpi-v4/ic_keyboard_white_24dp.png SHA1-Digest: jWWEy90Inty1U/KJpOG1lZiMu9M= Name: res/drawable-hdpi-v4/textfield_disabled_focused_holo_light.9.png SHA1-Digest: /udp2Q0RttqUBxEQk6HV83tN9cQ= Name: res/drawable-xxhdpi-v4/ic_emoji_places_activated_dark.png SHA1-Digest: JVYwpdu0nMp8b6qn37deStXfBkE= Name: res/layout-v13/message_details_header.xml SHA1-Digest: 6t2khWbFIsrlt4HdczqUkRq8Gik= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YT SHA1-Digest: ci/VBvns4lNNOhH9OObS32+dtp8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_878 SHA1-Digest: VRYqZjoyxSm01oqqk3h0+J0wnDo= Name: res/drawable-xhdpi-v4/abc_text_select_handle_right_mtrl_light.pn g SHA1-Digest: 0sFSb9RiC1Ekht0iXDZIxqOjQtc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_QA SHA1-Digest: nCJbqhYRoyrVRjtCLJcdkFdsT/0= Name: res/drawable-xxhdpi-v4/textfield_focused_holo_light.9.png SHA1-Digest: 3G+rFDxksENpDFDnnWmhx48KLpA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PA SHA1-Digest: psbj72lCq/sL1UFDPF+WdRxFjE0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_883 SHA1-Digest: kDX1xSLz66HnUQDXzN5qLBn27TI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_882 SHA1-Digest: ktmbRdg8Gz2n+qUA8ebBxgxWtAM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PE SHA1-Digest: 4EXXmGnr2E+0zyJGfj0/xtQ5mxk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_888 SHA1-Digest: LwtliyOOWf6PwTZaQStQQYYLZ6A= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PF SHA1-Digest: PrXaxnKuXXfWDon/voJKWJiqDSw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RO SHA1-Digest: /VysOJj9469dUXulaZ2N41d7jTM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PG SHA1-Digest: 8Xhb8+OQXJcz7gI3XlGyOaONStU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PH SHA1-Digest: v4fpxQWJgRR+PdfxHPD5SsU+mWA= Name: res/drawable-xhdpi-v4/icon_lock.png SHA1-Digest: Z0SNskfwhdkoNrpDHS77VfF+9Eg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PK SHA1-Digest: A65rboOYypaau509V41n9l/xTvw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PL SHA1-Digest: Wv8WGdubh03hRMVniWKbV7UCZxg= Name: res/drawable-xhdpi-v4/abc_ic_star_black_16dp.png SHA1-Digest: anvD/umdn7Gbr0QeW9+i2CaHM6E= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RE SHA1-Digest: ZUhxVkruWy08nmep3UAWxDmljxM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PM SHA1-Digest: SQZ7I6va0zPJzwbuV3POrqNyncU= Name: res/drawable-mdpi-v4/switch_bg_disabled_holo_light.9.png SHA1-Digest: 7UJHiJVoqpy2dRzN2BDZ8a3zlsk= Name: res/drawable-hdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.pn g SHA1-Digest: ipZ7n5QscSiC2+nLeSVir23z+dQ= Name: res/drawable-mdpi-v4/transfer_controls_background.9.png SHA1-Digest: 0VZBt8Ugd3Md5Tz54Fi+nEEj8Dc= Name: res/layout/abc_expanded_menu_layout.xml SHA1-Digest: G8xTlaPmMFco2QMPCLDHwprKgwk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PR SHA1-Digest: xO1RQVjAmRVyVX7QAIq+BN2S8lg= Name: res/layout/conversation_activity.xml SHA1-Digest: tYqHpVBkV/xv6W517VQqq/i5g7g= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PT SHA1-Digest: dVqprh0i+d9vh22VegjLWua+BQE= Name: res/drawable-mdpi-v4/abc_cab_background_top_mtrl_alpha.9.png SHA1-Digest: kxSGYJoMOYG0HnE3IprNwOq5ou8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PW SHA1-Digest: oAy03rqC9fj8se4Zb/2uT9UdmHQ= Name: res/drawable-hdpi-v4/abc_list_focused_holo.9.png SHA1-Digest: z5rmTEqRHuMsX24l4sP3B88dR3Q= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PY SHA1-Digest: YMqsB+ycHG539nGUp61je+vPX34= Name: res/layout/emoji_grid_layout.xml SHA1-Digest: i6pRXWxk5o4uaB8M4of5TdUOsSA= Name: res/drawable-xxxhdpi-v4/abc_btn_radio_to_on_mtrl_015.png SHA1-Digest: KsVyWTSJS8EOkowXLP9KW5sg2nY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_881 SHA1-Digest: 1ImuOWtFBx85b3f9fK3guBsia20= Name: res/layout/abc_alert_dialog_button_bar_material.xml SHA1-Digest: myoEBw42XsNNDvhPhUWNrMSnJRE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SK SHA1-Digest: UUhVkI6piKRGt3OSmvYR3FfBiUs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SL SHA1-Digest: PUd9DyMto06CBGqcwQGZDVQTgzA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SI SHA1-Digest: WDW9tkGbkeYDiKFg49BwhCnvbbw= Name: res/drawable-hdpi-v4/divet_lower_right_light.png SHA1-Digest: rlgcFpOMVYJdMulAew70KZ7jI7U= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SJ SHA1-Digest: cSUcdEYFcMwFDV8TKGk6jnYAL1I= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO SHA1-Digest: XMl6G9yJZeIyaCj5w8t/cUEq3ss= Name: res/layout/abc_dialog_title_material.xml SHA1-Digest: WrQrXmc+ow78xNQJ35MGS1YR+08= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SM SHA1-Digest: S1hP4Jx2xtdlOalqxAeOpFH/EPs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN SHA1-Digest: lsnf2mFPlKLmy9muXtTVLB+jwSg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SC SHA1-Digest: GASpnRPBNWf6J6w6FaDTST91o3c= Name: res/drawable-xxhdpi-v4/ic_backspace_grey600_24dp.png SHA1-Digest: ZVfwW8Pnmiws6HNkppZm4n+w33E= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SD SHA1-Digest: UgYHGSpQmiGcSLTLWr9bqv0yRTo= Name: res/drawable-mdpi-v4/ic_unlocked_white_24dp.png SHA1-Digest: 8I9f+mVCvRJzu+Tv4HRm8/3EKUU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SA SHA1-Digest: Jz6pXQIjBTSj35pASVBPMDmqRA8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB SHA1-Digest: j3emy4+G8ADg51qE22aevraUlNw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_OM SHA1-Digest: KKKCba6YvUE9GegKdjQzrYC8faM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG SHA1-Digest: UaEJ38MLyPEsYJY82QFShFzvCfA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SH SHA1-Digest: ay+tzCVPtaGIy5kuoekTN1ZPvsI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE SHA1-Digest: nXCOEoGKAsMGtpu7z3JMkQuCL3Q= Name: res/menu/conversation_send_drafts.xml SHA1-Digest: iiAhjDSibQ1hL83zevj8mesn2h0= Name: res/drawable-hdpi-v4/ic_attach_grey600_24dp.png SHA1-Digest: HyRgsub0Rl5SxI9bI3u1px18Nm8= Name: res/drawable-xhdpi-v4/ic_emoji_people_normal_light.png SHA1-Digest: YSdmOI7zCoOT7cI3MVxN+D9e1y8= Name: res/drawable/emoji_category_flags_dark.xml SHA1-Digest: sSOcNnzeBN/VOp4VP2yKuacmdoo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RS SHA1-Digest: NTYZRkWtWu+2PTF/kdM5HW8WMVg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RW SHA1-Digest: FF4lOOf/NzJbipI2K33bRHrS7aM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RU SHA1-Digest: p2u5JPJ5XyaGC/DLJSLyXkUkJig= Name: res/drawable-ldrtl-hdpi-v17/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: sJ2bizDjc/IvC35UuxBaI7PxljQ= Name: res/drawable-xxhdpi-v4/abc_scrubber_control_off_mtrl_alpha.png SHA1-Digest: 3uCMhkxK9aSNR8eXJyKd8g2eW/g= Name: res/drawable-hdpi-v4/ic_app_protection_gray.png SHA1-Digest: qcDRdnwrgZDD68xNgO2MVMmo4ac= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TN SHA1-Digest: zKMM896w490z2brJZrmx2isnpcE= Name: res/drawable-hdpi-v4/ic_emoji_symbols_normal_light.png SHA1-Digest: uQGeDtZlRZxvXN6oDUabamSpYcE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NC SHA1-Digest: HmgujHYGI+0ZY96JYVJZJkarHyo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TO SHA1-Digest: +9RrnHIfzrqb00iHIkaoG0lTcQA= Name: res/drawable-xhdpi-v4/ic_advanced_black.png SHA1-Digest: yOnkzbvF0s9fB4W1cWSoF8Uy/C4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NE SHA1-Digest: Ttv2dyZeK1tp82DCpE5QVyoSVuA= Name: res/layout/time_picker_dialog.xml SHA1-Digest: m6w/DwIO4mAWI+Dpvif29yLiwMk= Name: res/drawable-xxhdpi-v4/abc_textfield_activated_mtrl_alpha.9.png SHA1-Digest: i8wYHM8BdG6ZwwbsPcMgrtWVs1o= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TJ SHA1-Digest: VzIqZbtItNuw85wPc57RWLsIW1A= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TK SHA1-Digest: ShkEkMq83HFT1gKS2+quvzj8Ekg= Name: res/drawable-xhdpi-v4/spinner_disabled_holo_light.9.png SHA1-Digest: I/VVsCusXLFlgQt+3GdT6CGWj/I= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TL SHA1-Digest: GSa2GXtwB4FpahkJKMZAP0JnZEE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TM SHA1-Digest: crEXZutS188fBibcIs63+xAJ9/Y= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NA SHA1-Digest: LzETU+chj2E4UmrIzfBNB94vDF0= Name: res/drawable-ldrtl-xxxhdpi-v17/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: wAuClHmA726/rhHTR7gcaVbnnh4= Name: res/drawable-hdpi-v4/spinner_focused_holo_light.9.png SHA1-Digest: 3zmmBeKWyKRhH23IcfeYZhVwLyY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TG SHA1-Digest: XuB2EJ54CFbimhdLiJ6SShfDvvs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TH SHA1-Digest: DQu+/i3MH0vskJrZ9gLaX85NgXY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NL SHA1-Digest: 9gXOdrW5uA10gXI87KH3/nrIOIY= Name: res/layout-v17/abc_dialog_title_material.xml SHA1-Digest: 4ZPyYhlyaZDIFv3B2K6zngWIMZg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NF SHA1-Digest: kri4ENe4sOygZDd3APacz+tJpKg= Name: res/drawable-xhdpi-v4/ic_group_white_24dp.png SHA1-Digest: efkBALEOtT3s6Vu2NRVOc63Qybw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NG SHA1-Digest: jSOz9LMAbRi5o6ucO/v1bfmPn8I= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC SHA1-Digest: 2zgcoPtiMDg+0bnxLNi84DZATxw= Name: res/drawable-mdpi-v4/ic_backspace_disabled_light.png SHA1-Digest: sJNgMwrj4xE2+79HxIrMqbmY7nM= Name: res/drawable-xhdpi-v4/notify_panel_notification_icon_bg.png SHA1-Digest: qZTXDPkLdLdgn9U7jvOCObBW7aU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TD SHA1-Digest: Re8N7/eSIlGfgHheJVbxks+nncA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NI SHA1-Digest: XxPOnhPln44M7epXmAyrHbx06lA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NR SHA1-Digest: reUcQGkm5nZ7I85HY9orW5gciws= Name: res/drawable-hdpi-v4/ic_volume_up_light.png SHA1-Digest: gOrn4BUJjdBQkyIlZUSbMoTVggM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NU SHA1-Digest: XOibTOofTA9DAQ0QSy9fmYIAk5E= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TA SHA1-Digest: WJ+x2vyXe10ayIuDS2K6DfG6krE= Name: res/drawable-hdpi-v4/ic_send_sms_insecure.png SHA1-Digest: Ea8rLJM+Eo9rEaKSlbDO8xqchss= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SZ SHA1-Digest: L5YeE6Z1hb5T+6+BEgQNhg7x/Kk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NO SHA1-Digest: Ofk/FepiqsPlAtruvP8cx8lTE4k= Name: res/drawable-xhdpi-v4/ic_emoji_people_activated_light.png SHA1-Digest: iE9Ivms3TJKB3J0ARSkjtZWomks= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SY SHA1-Digest: ZH9cmvHEdiM3gfdBQ7tutvvmmwc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NP SHA1-Digest: qoIkqcy6RODpQtSeA0vs4yEKz5c= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SV SHA1-Digest: MZDmXNHQGh6rEN8PbePd0dGwQZ0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NZ SHA1-Digest: /yzMmaL318HTGJLcBex1KuZ2whA= Name: res/drawable-hdpi-v4/ic_lock_white_18dp.png SHA1-Digest: HETP5KoA2IVulF3WuJKEPW22ZH4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SX SHA1-Digest: bg768pEb+O3Ug2NxXJASswBsZY8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SR SHA1-Digest: Z1lD8EeLOeqPhPcvaMC4lCZ9SD8= Name: res/drawable/unread_widget_icon.xml SHA1-Digest: 48hOKLPIZpRITJN3NMzJ1OwnIMc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ST SHA1-Digest: B7DzNW3EfhSaf5Og6iJS5RKFp3Y= Name: res/animator-v11/scale_with_alpha.xml SHA1-Digest: VoONsngcyPaOcsxveoWj4d5Ytsk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SS SHA1-Digest: A6YcnEx7rBr3pVI5bRp0B1CvM6o= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MC SHA1-Digest: uo6VEOYynPxFJZHlGeDlHUf3Yeg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MD SHA1-Digest: caVfQWkZqV6JO6QPij0H3g1ufdc= Name: res/layout-v16/contact_selection_list_item.xml SHA1-Digest: MCVJ/7F24YEHA4tl2W8jSoR/7sE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MA SHA1-Digest: SHJ/tfwoGaglI2v2LbiX2R+NGUA= Name: res/color/abc_primary_text_disable_only_material_light.xml SHA1-Digest: TpKwzuD1e5/ZOIvTHOUHlcLNSZA= Name: res/drawable-xxhdpi-v4/ic_done_all_white_18dp.png SHA1-Digest: H13Ryi9PkX6C/uaIUIncPYpPO0U= Name: res/color/abc_hint_foreground_material_dark.xml SHA1-Digest: v7j7l+GbLvDF1F69hRS9LDfggu8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MK SHA1-Digest: LfAEf/cIj67t8rw1UKqe4tVSgmY= Name: res/drawable-v11/psts_background_tab.xml SHA1-Digest: nn+o3yq9mqh6oX8CcK/VI3H2I7s= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ML SHA1-Digest: gsP6Cgjej/FEhPiWoM39L88dP3c= Name: res/drawable-xxhdpi-v4/ic_clear_white_24dp.png SHA1-Digest: 7QbJLZbH/knp5MCIscxlYSCv74o= Name: res/drawable-xxhdpi-v4/ic_emoji_people_activated_dark.png SHA1-Digest: OnGHafI8PsaxHGZ8lZwmirnrw4I= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG SHA1-Digest: 5pO4+JUCjB3JMaM57LQOhI8xBiY= Name: res/drawable-xhdpi-v4/abc_text_select_handle_left_mtrl_dark.png SHA1-Digest: ZwRe0lGO9yJr+od2SmhGzEZccaY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MG SHA1-Digest: 0eGPq0v++0EKz5OHCxcavT5vXxc= Name: res/drawable-mdpi-v4/ic_emoji_flags_activated_dark.png SHA1-Digest: hmw72OlceE2gTL+0XuAYVvUmuuo= Name: res/drawable-mdpi-v4/ic_emoji_emoticons_normal_dark.png SHA1-Digest: 79vTb7EL0wLxCNjKQAjmgUzxLXo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MH SHA1-Digest: GMBhmd2G3+hHr0m9ZYFIikkocjg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ME SHA1-Digest: Zf2+VjwW/dEIk7DmUNY+g3ff+UY= Name: res/drawable-xhdpi-v4/ic_recurrence_bubble_fill.png SHA1-Digest: ATTGE3BfNYhQXnFTX7Jpnbu13sU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MF SHA1-Digest: kCBbzw4t7oZ/QvN6zGigwQdafDo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MT SHA1-Digest: bE+XexQWyFQTTTWmAYfLT8YnHo4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MS SHA1-Digest: fR4k036AGzbv0GAL1uG34ad+MEE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UA SHA1-Digest: cKQEqQ3Ry6WQnI9roOhPpFhoQrM= Name: res/drawable-mdpi-v4/ic_group_grey600_24dp.png SHA1-Digest: OsTpB8ywzd/6Engq6RtZq8EmURM= Name: res/drawable-xhdpi-v4/ic_save_white_24dp.png SHA1-Digest: 8MAtxxR4dqh91IujDrakxC13KE8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MR SHA1-Digest: 735sOB9SlXzrg0vtbMbDRV0pEuU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MQ SHA1-Digest: U8BwiAJPu9tGWqhRMCVPQ6rUW7Y= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MP SHA1-Digest: ZLrKuheJUOTF6GUuW4KcaIfNP/E= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MO SHA1-Digest: Trt4UFTbPA8Jz14Irxp8ezg+3SU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MN SHA1-Digest: re2oAQbaFVaV/mAWaAT4oHWjjXs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TZ SHA1-Digest: FPyLF1sL+karcpECpUek/fs7+Fs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MM SHA1-Digest: HjpVhT7ZNh4W1kX23z2IKiKf3ZA= Name: res/drawable-xxhdpi-v4/ic_play_circle_fill_white_48dp.png SHA1-Digest: 5BeXj8m+V5yiA3PMUY8Pgy64200= Name: res/drawable-xxhdpi-v4/ic_launch_white_24dp.png SHA1-Digest: tfVuoH+DeAzzjIa1NfP+SAyX3p8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MZ SHA1-Digest: /OhXIWqDgM0uKzI3quol7bjdsh4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TW SHA1-Digest: IEbHvJq9kgVyHfHOaL4rh9Y6JzY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TV SHA1-Digest: 72Jjc6F7cDsd1dv63W5WTQTHoPw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MY SHA1-Digest: MVxBPbFhghaveOT6m1IrgoQ92uM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MX SHA1-Digest: C3QrVFuO/wliul+KTCEfaEC9/eI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MW SHA1-Digest: 9w1LHuITAAgb4XhUREXKM737dGA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT SHA1-Digest: 3xrIv6e9IaimbBhjBkzvHyuEfe0= Name: res/drawable-hdpi-v4/ic_emoji_places_normal_dark.png SHA1-Digest: 57Y653GtbW2CTvIKUoFbMMXzqvI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MV SHA1-Digest: A1zaPSqaOvWAusj037B/7VFow0s= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TR SHA1-Digest: x/oSY3zmOSH2fRJ6AemrYQs7R8E= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MU SHA1-Digest: qvzj+8VbdeWnQyfD+L6BoLgYY8M= Name: res/drawable-xxhdpi-v4/ic_message_white.png SHA1-Digest: rKHDpW/UO07d/mAofolYj0QZlvY= Name: res/drawable-xxhdpi-v4/abc_text_select_handle_middle_mtrl_dark.p ng SHA1-Digest: BsdbhQlKpA9SYn+gClLarvMmIr8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LI SHA1-Digest: ml9UJKN4SSjRYZp65Oq8zglGLTg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NA SHA1-Digest: KN3sYQBTEyjhXC4ZSYFsguRDc3s= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC SHA1-Digest: wnzri/DybN2pzYMn0C/UjEfeV3M= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LK SHA1-Digest: krOUkhcmVai3w2aSx1gWHAg1TUk= Name: res/drawable-xxxhdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png SHA1-Digest: ilUGdamMg84FuhryTDOf/swhS+c= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NE SHA1-Digest: Pb8ZnheYRI60t4QnqMEgqTChryc= Name: res/drawable-mdpi-v4/check.png SHA1-Digest: clJy7TAIQVyhe6mzvbRlv99YZOo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NG SHA1-Digest: 05+zMc0T/rmCvavuTvMI2pDGnEY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NF SHA1-Digest: kndUyibcB+csXZqB3GT5xT2/xEY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NI SHA1-Digest: FucWSZ3wZV+R+XWNZP/oR4aqCHY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LA SHA1-Digest: TzqD12trWknS3BtHiqj3R5VOFVg= Name: res/drawable-xxhdpi-v4/ic_recurrence_bubble_disabled.png SHA1-Digest: QG1tzjajYfGOEBkcVPy8Houulog= Name: res/drawable-mdpi-v4/abc_ic_star_half_black_16dp.png SHA1-Digest: 3NcPIbGQECgdCby3I+naN/3MIg4= Name: res/drawable-xhdpi-v4/ic_emoji_places_normal_light.png SHA1-Digest: KQY4daNapv4pOE7cEXCXqZkgcKw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LC SHA1-Digest: b4RpZ0zwp17OsCDKZ19fevUpDx8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LB SHA1-Digest: INV6mTaQZ7jwI7NRuimINJ1jLTQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MK SHA1-Digest: z13v1mVv+25E708MCi4mcR+QVNs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LT SHA1-Digest: yLGKah4iP0qZdMJL3FZvMCwcUvM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ML SHA1-Digest: 2QQX1zBwC0Cdu/kbRiJV/qVQS1g= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LU SHA1-Digest: FDQNiTaG/bb+rQZW283xhSL2/dw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM SHA1-Digest: riIBpBXX2fhLdNtOBIiaEQXqXY0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LV SHA1-Digest: dFkEEnxq/1FcwvjmI4tiS9ulqHg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN SHA1-Digest: uUKYV/caMCD+Kj5DIPgu8anitAE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MO SHA1-Digest: m4IKx6zzLQLCNXnDOrUZha+inzE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LY SHA1-Digest: tOy1xvlr875aH7JU3j4he6GVXUw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP SHA1-Digest: JFn5GEpAGcALxZ8140RAhZdktnc= Name: res/drawable-mdpi-v4/ic_add_white_24dp.png SHA1-Digest: foIOFC0YJcLMes6bNxRUeXzNCR4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MQ SHA1-Digest: Te/AsAogzC4wHaWoA3/BOcEZX8I= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MR SHA1-Digest: oQJSiN5JqXP+4IAvNSzzN4hdPwA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS SHA1-Digest: XeC+tYs/5pWrchlG4Tjgr2QPlG8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MT SHA1-Digest: oiZbGtJGQ210WuZZfAx9ALCLksU= Name: res/drawable-xhdpi-v4/ic_app_protection_black.png SHA1-Digest: 1cP/7NkU0BLMnD3fLdI9zDXDIvI= Name: res/drawable-xxhdpi-v4/ic_emoji_objects_normal_dark.png SHA1-Digest: SFTSQmdFwDJs8Po4Hh4GSszGHdI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MU SHA1-Digest: lmPdov+OSu+1pxxe9/4SSlDKORE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MV SHA1-Digest: oK3+1OyTrYU1OcMDodCFG0d9CRc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MW SHA1-Digest: qMFpXXZbW46Q3nAZnmxkk5KNXy4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX SHA1-Digest: GOmsf34KhPFVIgGwifd/OQY7dh0= Name: res/drawable-mdpi-v4/ic_account_box_dark.png SHA1-Digest: N8c3AZqHptj00S+V5ni4XLrx5FE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY SHA1-Digest: Z0ByGaTpVBcLdQ9ks9YXogBAq08= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LR SHA1-Digest: MPz6+q+V+vK30uaWDOsTm0r+02w= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LS SHA1-Digest: ebR59a5l0UTkiLg8bGlmVLOW+O8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MZ SHA1-Digest: 9EkzkH4v0oHu4jxfxjqFII1TXHo= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_27 SHA1-Digest: mGMwCzLy54rC/B9P+BWgJ/aqtLI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KE SHA1-Digest: jXjVi5jMulFFzFQoOh+0d6vpNwQ= Name: res/drawable-xhdpi-v4/ic_volume_up_dark.png SHA1-Digest: VCpxxBJJIWJPwwCgQrrCEtlAuVc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KI SHA1-Digest: yT4TYLZvm7F2eOcjgZxhb8QGCWY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KH SHA1-Digest: CxalpliKly3QdAQXL2PS91m79M8= Name: res/drawable-xhdpi-v4/ic_volume_off_grey600_18dp.png SHA1-Digest: 81zwVRK9ajRJVQYJLq0WshZYONw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KG SHA1-Digest: p4UwBVa9PVpC435eAXPN2PLU03k= Name: res/drawable/error_round.xml SHA1-Digest: n67C+HKq1nJ8tJ9rWOj80CdjZKo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NO SHA1-Digest: By0a86+TigoJBP8a/jt2YbXZcbA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NL SHA1-Digest: Ha4hDjZN16nRgzkBjwvS9fObwBE= Name: res/drawable-xhdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png SHA1-Digest: ZASdEykkaZcSZ7Yjx1dUk6dEVjE= Name: res/drawable-xxxhdpi-v4/ic_pause_circle_fill_white_48dp.png SHA1-Digest: yjDnncHTi2TZtYT3gfkaXmpFgs0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NR SHA1-Digest: ahprX5nq0TbQxWaW48NfNaRuhjE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KY SHA1-Digest: rGd9z8xttxp6/vIr5R5UifPupgc= Name: res/drawable-xxhdpi-v4/switch_thumb_activated_holo_light.9.png SHA1-Digest: 6u81K4sjx958syfrNuc0b5VyCtw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KZ SHA1-Digest: z8PANXDSq5nhyhcK+JmM2j4x0Wk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NP SHA1-Digest: Xt933D4XMBUtNFx+0F7p/w5X/f0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KW SHA1-Digest: v20YnEtJ31VDO+UB3dRKREtZY2E= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KM SHA1-Digest: oKBDs+V52MxB5ZGOVRcairbGgSQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KN SHA1-Digest: NFIFxOusC/uNJef7MTtf7ZRkmEw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NU SHA1-Digest: w1JenUwANTZL4dfTY/aKD2Scsq8= Name: res/layout/conversation_item_header.xml SHA1-Digest: StFS3EO2QuAvfEzV6dli3IXsR5E= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ SHA1-Digest: KJ8G7sin7R7w+cQsgZEpZsL2Usc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KR SHA1-Digest: aRBbP3wmkW2WzPsbRGQbRdE1PCI= Name: res/drawable-mdpi-v4/abc_list_pressed_holo_light.9.png SHA1-Digest: +VIFOUvUwxbnTdHmmjA8LWrUN0k= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KP SHA1-Digest: rw+tCgv/zQPGikAdPAkP0BXLu/Q= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PE SHA1-Digest: SXd0r6EDLyyXer9xu3xKkHlNg3s= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA SHA1-Digest: zJenZHuZ2cn3hQZmzVmM6JhtvXc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_JE SHA1-Digest: wH8VNKVSJjFwqUnb16ypmBK76lQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PK SHA1-Digest: Eq6rPtosPBzXgL4hJ/f0Gbg/FIw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PM SHA1-Digest: L0nqsOVum6HIQ26c77To4p125qQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PL SHA1-Digest: aeRxfkk/EQFfTZ/rJINnPR3cJtc= Name: res/drawable-xxhdpi-v4/ic_brightness_6_black.png SHA1-Digest: np5V0QzKye3eTLCxW4kcaUAj4NM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG SHA1-Digest: rXO3qI9wrLTZrs+5ryKewhxThxY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PF SHA1-Digest: Odye7mb6I5teGMP4MAenbO8iIbw= Name: res/drawable-xxhdpi-v4/ic_menu_search_holo_dark.png SHA1-Digest: T/L5sJVW2pxScaLsCvlNRHZ46vc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PH SHA1-Digest: IkH5hm0h255EZ1NOqB3I8cMzn2Y= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_OM SHA1-Digest: 9evyLcqbrJfZK1P2JsLmf6Lk+K8= Name: res/drawable-mdpi-v4/ic_circle_fill_white_48dp.png SHA1-Digest: PuMj32bJamOW1qHxoKzxZMOShX4= Name: res/layout/abc_action_mode_bar.xml SHA1-Digest: ImmPWOji0acusMAqHT/D5Yk5qAE= Name: res/drawable-xxhdpi-v4/ic_brightness_6_gray.png SHA1-Digest: nCvOoIxTQ5Jo5PXY6NscsSRPDVg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_JO SHA1-Digest: etnm4aLA+bHA5+OIdGZ5jCAOPgk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_JP SHA1-Digest: kI7O7DnD0LvU3XrTIXT7mFRNCyM= Name: res/anim/abc_fade_out.xml SHA1-Digest: MfCV1efdxSKtesRMF81I08Zyvvo= Name: res/layout-v16/reminder_header.xml SHA1-Digest: lhMVKAV9MJNYuW+SJ2lfvSoW5EQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_JM SHA1-Digest: I8yXX/kkW3Ln9yDueqlGVv5MtBU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IE SHA1-Digest: sicER8VgddgNWkvp/J1z12l7PcI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ID SHA1-Digest: vuc4G/SN8nrGzAAd+P8WRJI/27s= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_QA SHA1-Digest: y8J4KXh2lNccc0XbY4yCoEptzdM= Name: res/drawable-xhdpi-v4/abc_list_pressed_holo_dark.9.png SHA1-Digest: I+f9Vf8JVX6hz0eqBuaNI+f4Rtc= Name: res/color/date_picker_year_selector.xml SHA1-Digest: 3R7vZBjmVG+BXr0gy7Pspt7A4EA= Name: res/drawable-xhdpi-v19/switch_thumb_pressed_holo_light.9.png SHA1-Digest: YcyJfNOau/BOW/i7/AKIHt1H59o= Name: res/drawable-hdpi-v4/textfield_default_holo_light.9.png SHA1-Digest: xrFOt/AjhDtJdBUDzaDAa/6vFAw= Name: res/drawable-hdpi-v4/abc_list_selector_disabled_holo_light.9.png SHA1-Digest: 1gu0+JdGxgtkd7hnwaQbfLEaaZc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PT SHA1-Digest: M/lgCqL7346CiRuNiwWoopOi3IY= Name: res/drawable-mdpi-v4/ic_arrow_forward_dark.png SHA1-Digest: Db61tKVCqpJI64QUArwkoeCtcG4= Name: res/drawable-xhdpi-v4/ic_movie_creation_light.png SHA1-Digest: gzWv88BpzIzhVh6iN9KvMTFdg64= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR SHA1-Digest: q1OPwC71Oo4DqRtGBNRJJhOZhTI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PS SHA1-Digest: +e4rAQsWt2o0yPs/9FDJMCNC09c= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IS SHA1-Digest: Hkhv50LIoiHJCsSLH1Q27KO4PJw= Name: res/animator-v11/upper_play_to_pause_animation.xml SHA1-Digest: nGbOGdCFxUAa/SlhCCYlGiHVxe4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IT SHA1-Digest: LvsHP2PjdZNyG7ejzSxAsDW2gn0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IQ SHA1-Digest: xEti79j2sC6UEr2VCVAVOXIRXXU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IR SHA1-Digest: BRnECbhEDa+NUw6gWW/rNLV6BgA= Name: res/drawable-hdpi-v4/ic_send_sms_insecure_dark.png SHA1-Digest: +DidnvthsssPTHPXdMgIQm6bx0Q= Name: res/drawable-xxhdpi-v4/icon.png SHA1-Digest: DF9F713jv+PmMazzAZGr/P2JxVw= Name: res/layout/led_pattern_dialog.xml SHA1-Digest: Yi+0WyrYWJJr2NEqvUCjF2mfObE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IM SHA1-Digest: FHNFdvFcLT8Rn93VtNQhMjlG+yg= Name: res/drawable-xhdpi-v4/ic_save_all_white_24dp.png SHA1-Digest: KQ3TTeFDr9bKYUBuEPZiuUPPbx4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IN SHA1-Digest: 58W4VnHh8FvOYbiChCUNqzlEhO0= Name: res/drawable-mdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png SHA1-Digest: OxGddZL5ftUUMkIS3GSFXNepBP8= Name: res/layout-v16/fragment_submit_log.xml SHA1-Digest: hxjviwb1dreKwtm17ksg3YfY6cE= Name: res/drawable-mdpi-v4/switch_thumb_activated_holo_light.9.png SHA1-Digest: 37aTq/CoCuhzr5/FuGa2TR5yBiA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PY SHA1-Digest: cX4Ed9CqZzNmbYXhguvSsu80sWk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IL SHA1-Digest: ag7zl70llm/HvTsrO2mgc6hOLMo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PW SHA1-Digest: 79DunG6XWWrDpFseuRcQ/eOxaTY= Name: res/drawable-xhdpi-v4/ic_info_outline_light.png SHA1-Digest: LEi02ZgaOIan0L1KZ0bQBAQjP48= Name: res/drawable-xxhdpi-v4/spinner_default_holo_light.9.png SHA1-Digest: TcXBLoAjAlB5KEh8iwVEKiOanVI= Name: res/drawable-hdpi-v4/list_selected_holo_light.9.png SHA1-Digest: DS5Yp1zkxBKJsNnlKmSULzDXa7o= Name: res/drawable/emoji_category_nature_light.xml SHA1-Digest: 6Anm/WyDvgauMmBK0jM/BWyYvxE= Name: res/layout/expiration_picker_view.xml SHA1-Digest: SXYWoBOkixf482pdV3iThCI7g1g= Name: res/color/abc_tint_seek_thumb.xml SHA1-Digest: rMFHVJxtqSk9KDdEBDPHB2GRr9I= Name: res/drawable-mdpi-v4/ic_backspace_grey600_24dp.png SHA1-Digest: RYzAAUdktXszW6j5RXtHi4xW5k4= Name: res/drawable-hdpi-v4/abc_switch_track_mtrl_alpha.9.png SHA1-Digest: aq/s3PoS9wD33oPeDdmP98R6Bkk= Name: res/drawable-mdpi-v4/ic_emoji_symbols_normal_dark.png SHA1-Digest: fFAh7s1JMyyxFRn2ZPID+oIMl0Y= Name: res/anim/design_fab_in.xml SHA1-Digest: dRcgYgcLN0gY/2aHKJnWN/oMfkI= Name: res/drawable-mdpi-v4/ic_group_white_24dp.png SHA1-Digest: giBsdJeQqWg9AW8Mp5wXGrXayx8= Name: res/layout-v11/notification_media_cancel_action.xml SHA1-Digest: /KZyZOzEiShP2cP0cqnTYl+6vGU= Name: res/layout/abc_select_dialog_material.xml SHA1-Digest: A7IHpYuFPT4BZuoZCj+m//qLCmY= Name: res/drawable-hdpi-v4/ic_photo_camera_dark.png SHA1-Digest: foH6nqH7iVHHZfjpplINWKGaFdE= Name: res/color/recurrence_bubble_text_color.xml SHA1-Digest: nXh/1epHXtEJAUdry7YMj9updrY= Name: res/drawable-hdpi-v4/ic_emoji_nature_activated_light.png SHA1-Digest: GE/eS21/a3n0s9Au9TfoETXkpwg= Name: res/drawable-hdpi-v4/textfield_activated_holo_light.9.png SHA1-Digest: Afh8MLGJ3Tx9XRM7C/09jOu01ZE= Name: res/drawable-xhdpi-v4/switch_bg_holo_light.9.png SHA1-Digest: saSmYyqe/82/e2GZuWPAi3VYDPE= Name: res/drawable-mdpi-v4/ic_lock_light.png SHA1-Digest: AKTlpv1YGRuka55Gh+9A59hMn2M= Name: assets/emoji_objects.png SHA1-Digest: vALA6/+WIvuV6gUb5XbcWg5VSS8= Name: res/drawable-xxhdpi-v4/abc_btn_radio_to_on_mtrl_000.png SHA1-Digest: i/xNJ0zuX8i2Qm+lgnh6E6fytF8= Name: res/layout/prompt_apn_activity.xml SHA1-Digest: OvaHMTSuMoMljSQf2Xvh7Jm61pk= Name: res/drawable-hdpi-v4/ic_backspace_normal_dark.png SHA1-Digest: SZn5liFxoX/jJVmxFQ4A2CKTk7Q= Name: res/drawable-hdpi-v4/ic_emoji_objects_normal_light.png SHA1-Digest: 1w29UAnuelWx3GYsNGiOSwuP1HQ= Name: res/drawable-ldrtl-xxhdpi-v17/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: +w/ZV/rJjEMwJS8xH78Mb+2mCMU= Name: res/drawable-sw600dp-hdpi-v13/ic_backspace_disabled_light.png SHA1-Digest: IevK+QGpXr4W7U6uEy6/dLSKg7k= Name: assets/databases/apns.db SHA1-Digest: pj48GVeEBI6ASfUuOGxSeOPuf4w= Name: res/drawable-mdpi-v4/ic_photo_camera_light.png SHA1-Digest: dAu2KZbi7TpJrXbO/C/ZIaEvxbg= Name: res/layout/abc_search_view.xml SHA1-Digest: V7B95cDcwylyEL0KN1ZgvnZlKa4= Name: res/drawable-hdpi-v4/ic_mood_white_24dp.png SHA1-Digest: fUyna2W89cwhr5AHUHz0t7XpZ8Y= Name: res/drawable-xhdpi-v4/ic_dialpad_white_24dp.png SHA1-Digest: zizow2Izc03ucIDK5+Sbw0uVbpk= Name: res/drawable/blocked_indicator_background.xml SHA1-Digest: MwCsXD/KfJg7MgCoWeyTjHysrFs= Name: res/drawable/emoji_category_people_dark.xml SHA1-Digest: 0AoQv/D2FJIPa6agySSspeLXdD0= Name: res/menu/media_overview.xml SHA1-Digest: sPVsPmTH3ulTZpkbgiEkACB9ogc= Name: res/drawable/list_selector_background_transition_holo_light.xml SHA1-Digest: pE/CDG+g87dnlNUicaEve/fKfYI= Name: res/drawable-xxhdpi-v4/check.png SHA1-Digest: pl1AJZMp+3qUvB5MOxVuvVfLSPo= Name: res/drawable-xxxhdpi-v4/ic_done_all_white_18dp.png SHA1-Digest: vR2TeECLw9lbIobeyhvdVAPI4aI= Name: res/layout/import_export_activity.xml SHA1-Digest: KvpYKS2DzUUX5c+l82mvknhKPfw= Name: res/drawable-mdpi-v4/ic_send_insecure_white_24dp.png SHA1-Digest: WvVhyaTyQZ6D4UDNNwoXv5gbI3w= Name: res/drawable-mdpi-v4/ic_launch_white_24dp.png SHA1-Digest: qTNaWuUDE/Jwfi67PxACCQIEZJw= Name: res/drawable-xhdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: yNA/pJXAiNoyw8sLla3LwK1IuWs= Name: res/drawable-xhdpi-v4/abc_popup_background_mtrl_mult.9.png SHA1-Digest: jwT1/Yme29EdIvYr7bm6kxB5lJk= Name: res/drawable-xhdpi-v4/ic_textsms_grey_32dp.png SHA1-Digest: 4zwAkMq6ta+bidHo5cTkoWra1Lk= Name: res/layout/keyboard_text.xml SHA1-Digest: Ld5BDKVvJcBv3RZOSPHFfMu/BfE= Name: res/drawable-mdpi-v4/ic_forum_grey_32dp.png SHA1-Digest: 5mZCwzTnzeapqyoC8S/JcU2BSLs= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_7 SHA1-Digest: R13VmLCbBwMg6K479CnJtnC+bXs= Name: res/layout-v17/conversation_fragment.xml SHA1-Digest: 9vgP2do2wWNfvHNaS5C5Q/q/zRg= Name: res/drawable/recurrence_bubble_fill.xml SHA1-Digest: f3GCv6rhCWwIFFg/JzEgZSezfvU= Name: res/color/date_picker_selector.xml SHA1-Digest: HWOTUXrOCRonuyuxCSSy6QsSxxA= Name: res/drawable-xhdpi-v4/ic_unlocked_white_24dp.png SHA1-Digest: nnyKFq53Gc6DZ/FqDhGbB9xlung= Name: res/drawable-xxhdpi-v4/switch_thumb_holo_light_v2.9.png SHA1-Digest: /dwwrT/7gkG9oNAKszZBP8puxAs= Name: res/drawable-xhdpi-v4/textfield_activated_holo_light.9.png SHA1-Digest: Gmocm6iACu2JtEPjYWad8j6ha90= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_350 SHA1-Digest: FL/nPG4XaSrRGuHfx7krOQDoLG4= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_352 SHA1-Digest: AQbsxBOsaCrzJXI/KS99rfUChNg= Name: res/drawable-xhdpi-v4/ic_mood_grey600_24dp.png SHA1-Digest: eea4+Tx2y464XAKVfXA/o0mAxQo= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_351 SHA1-Digest: 8gUjWk4JW0A+ylZayZHRoen3pFU= Name: res/drawable-xxhdpi-v4/ic_emoji_places_normal_light.png SHA1-Digest: 3F9Y+qUhDtSqsq6b501VgbR42i0= Name: res/layout/conversation_list_item_action.xml SHA1-Digest: I1nQIFRFmKjx1XbSAms2IvXJat8= Name: res/drawable-xhdpi-v4/abc_text_select_handle_right_mtrl_dark.png SHA1-Digest: Er2l3pdoeBwBOmP2sgisT7f+pW0= Name: res/layout/abc_list_menu_item_icon.xml SHA1-Digest: IHjMoWWbSOePG8X4KyBCdZH/r0I= Name: res/drawable-hdpi-v4/sms_selection_icon.png SHA1-Digest: y6JUbF0OyJW7DReN+vDl3rFkvnk= Name: res/drawable-ldrtl-xhdpi-v17/ic_send_white_24dp.png SHA1-Digest: oadJZycEHwI6rCUqfMR/huPDM1U= Name: res/drawable-hdpi-v4/ic_group_grey600_24dp.png SHA1-Digest: TsaEgJUU7sNGtdx8cVq7g7mclu8= Name: res/drawable-xxxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_000 .png SHA1-Digest: h3lL6tDTgeEUsHwNZiv+gOveu1A= Name: res/layout/calendar_date_picker_done_button.xml SHA1-Digest: jXAu71ZxI7rd22TsQVW44vrI3N8= Name: res/animator-v11/bottom_play_to_pause_animation.xml SHA1-Digest: L57WeA9XqgSXopnhomGIU+zO0WE= Name: res/drawable/ic_check_dark.xml SHA1-Digest: guWXfOAn/P9qpKmKSw8YXT23zr0= Name: res/drawable-hdpi-v4/abc_text_select_handle_right_mtrl_dark.png SHA1-Digest: Qbl+T5s4Vgus+255ilPjOARwhY0= Name: res/menu/log_submit.xml SHA1-Digest: m0IzL3uKbtyRFUcTw0XUpvfNJWg= Name: res/menu/local_identity.xml SHA1-Digest: TJYkQb/JH6dHdmcQHfGCke96cmU= Name: res/drawable-mdpi-v4/abc_switch_track_mtrl_alpha.9.png SHA1-Digest: QhKzfQqaMjEUNLGmR/QjnJ0PWe4= Name: res/layout/notification_action.xml SHA1-Digest: qhq9wA6wEMXdRX6DfU/xMNyQqgU= Name: res/drawable-xhdpi-v4/ic_badge_24dp.png SHA1-Digest: Y0sUZk/5avRSaigeuMbbuLfp7ZE= Name: res/drawable-mdpi-v4/ic_emoji_nature_activated_dark.png SHA1-Digest: cX9FigaizqvhmxmCtyfqQ0rxztY= Name: res/drawable/abc_tab_indicator_material.xml SHA1-Digest: HLMNWYzS8Xr2+cGXFiCZarvGfLw= Name: res/drawable-hdpi-v4/ic_visibility_off_white_24dp.png SHA1-Digest: ogZbqcK/nD9kEQDdeTvSnGrDAkA= Name: res/drawable-xxhdpi-v4/abc_ic_star_half_black_16dp.png SHA1-Digest: VIxY8NsnHv+fMmCSUp80rTA+ORM= Name: res/drawable-xxhdpi-v4/ic_menu_lock_dark.png SHA1-Digest: Uiu0uuGjm3xA3Z0+ZYLiD+mDVts= Name: res/drawable-hdpi-v4/ic_message_black.png SHA1-Digest: 14B99xRUu4LvGytCpQ8Wt+5OghU= Name: res/drawable-mdpi-v4/ic_send_sms_insecure_dark.png SHA1-Digest: Y72eTMA51B0PYfNH7TBb1oy25J0= Name: res/drawable-xhdpi-v4/sms_system_import_icon.png SHA1-Digest: esyNqLcMcUkL9ySUdONxbY4R7U8= Name: res/drawable-mdpi-v4/ic_backspace_disabled_dark.png SHA1-Digest: 3p7UfcrwDxKcyJjfazGz1v3IEC8= Name: res/color/text_color_secondary_dark_theme.xml SHA1-Digest: GEzRfoygmSXPKZxKBrh4H8TaO8I= Name: res/drawable-xxhdpi-v4/ic_lock_white_18dp.png SHA1-Digest: Je8Q4gaVQG09yofBh56+9Jicfmw= Name: res/drawable-mdpi-v4/abc_text_select_handle_right_mtrl_dark.png SHA1-Digest: sik4m6NQi5mcKtGRR1c8em9hOjI= Name: res/layout/conversation_list_item_view.xml SHA1-Digest: p82/GxGQgrhOzvtp8FyrVP1eM7A= Name: META-INF/fdroidserverid SHA1-Digest: 3rH3T3oX8Sk967n0ab5NiIei+iU= Name: res/drawable-xhdpi-v4/ic_group_grey600_24dp.png SHA1-Digest: ZIEhI1MDcuNBqyesBqhIX86jFu8= Name: res/drawable-mdpi-v4/list_selected_holo_light.9.png SHA1-Digest: nPWNtANp5FoH4n/kEIShr57wI3s= Name: res/drawable-xhdpi-v4/ic_refresh_white_24dp.png SHA1-Digest: NTsZbqB/c4tHi1UX0fBPegEljwE= Name: res/layout/recurrencepicker.xml SHA1-Digest: n2RYdNa4k3XGjqpkhXF9ztxnxbc= Name: res/layout/radial_time_header_label.xml SHA1-Digest: 6ZBOmonVaXGpZHcc/Mw2FXcvoMs= Name: res/drawable-v11/notification_bg_low.xml SHA1-Digest: bfUYQEbOdfpHyH/xKU2rljlMzho= Name: res/drawable-xxhdpi-v4/ic_group_grey600_24dp.png SHA1-Digest: aHTpAX2FV4iXzJU0sTO878OTS3c= Name: res/drawable-mdpi-v4/ic_emoji_emoticons_activated_dark.png SHA1-Digest: fF5hcXMeH+QGL3iAAr5CYTAMu4w= Name: res/drawable-mdpi-v4/icon.png SHA1-Digest: T2GWD98XUsHaLFlAejB5QgqyOZY= Name: res/drawable-xxhdpi-v4/ic_missing_thumbnail_picture.png SHA1-Digest: 1RUFuEzt+5rkd4Ck+Kbeiv/h1RI= Name: res/layout-v17/notification_action_tombstone.xml SHA1-Digest: A4y2ru7HSV2XUwLum7cCSvHFXqk= Name: res/drawable-mdpi-v4/ic_done_white_18dp.png SHA1-Digest: mh9w0JZCRb1UPTJ5moQFeoaJKkU= Name: res/drawable-xhdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png SHA1-Digest: d0l2OwtZD2+6JR+S4EKCzr+NRhk= Name: res/anim/abc_grow_fade_in_from_bottom.xml SHA1-Digest: kWfUczBIbB0kTzFgtIQfNc6uPrA= Name: res/drawable-mdpi-v4/abc_ic_star_black_16dp.png SHA1-Digest: cMSzyfIyYX1I9dilqPQLxr8V0UQ= Name: res/drawable-mdpi-v4/ic_dialpad_white_24dp.png SHA1-Digest: N3tRrv5WjgQGNPB/ulysghb/H24= Name: res/drawable-xxhdpi-v4/ic_send_sms_insecure_dark.png SHA1-Digest: FIedwWiEi6UrlNAZ3Va+0Jpjpog= Name: res/drawable-xhdpi-v4/ic_emoji_nature_activated_dark.png SHA1-Digest: 0FUYUr/cLI62IQ4RP5xwLN1vicY= Name: res/drawable-mdpi-v4/notification_bg_low_pressed.9.png SHA1-Digest: rxar83E4fhqCH7r8Q3SGQ0s+sAo= Name: res/layout/recurrencepicker_end_text.xml SHA1-Digest: YjnFzKmvN75I1jNf3w5/IibeHN8= Name: res/drawable-xxhdpi-v4/ic_block_grey600_18dp.png SHA1-Digest: 34Zc5JQ+TeVUVP1udhfE6s1D+iM= Name: res/drawable-xxxhdpi-v4/abc_ic_star_half_black_16dp.png SHA1-Digest: f0Rn65H1PwGOyFNxv43FhzHUaVE= Name: res/layout/abc_action_menu_layout.xml SHA1-Digest: EPivHIZzOWH09bETjXQjOXTv1gQ= Name: res/layout/media_overview_item.xml SHA1-Digest: 0tK6lgBCZPMFJSpfYgLhRj4GKuo= Name: res/layout-v13/recipient_preference_activity.xml SHA1-Digest: hxIA28s1tlAg7XpP8teI8EWr9gA= Name: res/drawable-mdpi-v4/ic_recurrence_bubble_disabled.png SHA1-Digest: GQ/oQKqUlDKBM23s1GXUXYldkwM= Name: res/drawable-ldrtl-xxhdpi-v17/ic_send_white_24dp.png SHA1-Digest: fJv3ddlYaDANDDbzyrHLFIsKVRI= Name: res/drawable-hdpi-v4/ic_movie_creation_dark.png SHA1-Digest: idSGuOyhi77lUXJpb/4cLcZyflw= Name: res/anim/animation_toggle_out.xml SHA1-Digest: h5RFa/NEbVssJaJQDR+GOgcbjF0= Name: res/drawable-v21/abc_ratingbar_small_material.xml SHA1-Digest: wPrz0/gmu9ygjwoOdEMFAq9SO+E= Name: res/drawable-hdpi-v4/abc_popup_background_mtrl_mult.9.png SHA1-Digest: F3OLlUdrDj+2/ztQNwug+XTUWPU= Name: res/drawable-hdpi-v4/ic_emoji_places_activated_dark.png SHA1-Digest: G10d1TjnCZpsWvr84SBKdDkeq7g= Name: res/drawable-xhdpi-v4/ic_backspace_grey600_24dp.png SHA1-Digest: Ts9XoUqEl0/Db4JonaDLKHDLsLM= Name: res/drawable-mdpi-v4/icon_cached.png SHA1-Digest: v2DMT5hHXIMepxOig+HMHo1E4XA= Name: res/drawable-xxxhdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png SHA1-Digest: u7p4+i+MbX5Isql4KGmTM6mrhJ8= Name: res/drawable-mdpi-v4/divet_lower_right_light.png SHA1-Digest: 3Cui8QVfTUnCSeGovo/AIEMqF/4= Name: res/layout/notification_template_icon_group.xml SHA1-Digest: 7FMD39NkHvo5k5k068yXh4qwRqM= Name: res/drawable-xxhdpi-v4/ic_unarchive_white_36dp.png SHA1-Digest: UrffJUFymEXRp+MA71+CU/UucsA= Name: res/layout/create_passphrase_activity.xml SHA1-Digest: Xo6l8fNm1DdquvRoi16VjYEG8dY= Name: res/layout/calendar_date_picker_selected_date.xml SHA1-Digest: mDcwSrn9NY9Q+tUBGJz/mY1C5Ok= Name: res/drawable/emoji_category_emoticons_dark.xml SHA1-Digest: E/0X0M2RoQFiqDrCqgcdbgfJqcw= Name: res/drawable-xxhdpi-v4/ic_search_white_24dp.png SHA1-Digest: d7JXPS0TRWeyD/IeowryWnSoHko= Name: res/drawable-xxxhdpi-v4/abc_text_select_handle_right_mtrl_light. png SHA1-Digest: grcVrQtxmzmSV8JMz/9EcFpwC6E= Name: res/menu/conversation.xml SHA1-Digest: eibAWzj9TXppWnBsdgllRmuJgSM= Name: res/drawable-hdpi-v4/ic_block_white_18dp.png SHA1-Digest: rF4DgE+hC5uF/2Vrnfmc5PvtH0U= Name: assets/emoji_flags.png SHA1-Digest: +csJvSPQ400RI0ujnYElBq3F+Hk= Name: res/drawable/circle_tintable.xml SHA1-Digest: BAxvwKvzZbjQT35J7xxN4i7WHDE= Name: res/color/abc_btn_colored_text_material.xml SHA1-Digest: nsCF5QSiDkdzkM9F53HYXAMfSsQ= Name: res/drawable-xhdpi-v4/ic_attach_white_24dp.png SHA1-Digest: D1B41yEjxu6TL0hB+3ARCREu8fw= Name: res/drawable/abc_dialog_material_background.xml SHA1-Digest: mLGxn48GAFs7+4j22JOs3ea71o0= Name: res/layout/custom_default_preference_dialog.xml SHA1-Digest: 5nvWqkqbyYLDQhoAsNjl2z76MZI= Name: res/drawable-mdpi-v4/ic_recurrence_bubble_outline.png SHA1-Digest: X9whs15eFSBjKKHHunLVVSLqLmM= Name: res/drawable-hdpi-v4/ic_emoji_symbols_normal_dark.png SHA1-Digest: oNBzn63zb1OxF/k6815B5/eibZM= Name: res/layout-v21/conversation_item_received.xml SHA1-Digest: 0Y/LFUjsOHVoq2sbVA4KnTiFQU0= Name: res/drawable-hdpi-v4/ic_emoji_people_activated_light.png SHA1-Digest: ka7AtuzDVZzO8CkHunsbVIUpW8A= Name: res/layout/keyboard_with_header.xml SHA1-Digest: UHkiHpBlq7zA4uxcf8jYtv0RLFY= Name: res/drawable-xxxhdpi-v4/ic_block_white_18dp.png SHA1-Digest: kp/UblwOz/etZbQxR4yrlUEOrHQ= Name: res/layout/change_passphrase_activity.xml SHA1-Digest: q0/kYOZTKeWuuL/w8ByxnL5bxak= Name: res/drawable-xhdpi-v4/ic_emoji_objects_activated_light.png SHA1-Digest: wZ3Acttexos7A6oJL3O7FFUIplQ= Name: res/layout/abc_action_bar_up_container.xml SHA1-Digest: Mgt5FmUJbdaA9tDZq82OJCgjw2I= Name: res/drawable-xxxhdpi-v4/ic_done_white_18dp.png SHA1-Digest: Rbf+P82ITa290kP2akU2k43E0kQ= Name: res/drawable-xhdpi-v4/ic_photo_library_white_24dp.png SHA1-Digest: zPg23n5USvJHYa9lmspQbeQGJN4= Name: res/color-v11/abc_background_cache_hint_selector_material_dark.x ml SHA1-Digest: XEu3fV1TnwtDyw4lIFQ7Itsjbn0= Name: res/drawable-mdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: N/67pvsZBjmVMkE2o1xqc73zW9s= Name: res/drawable-hdpi-v4/ic_menu_remove_holo_light.png SHA1-Digest: nZTetQY5mTYLAK/MMKDXzlkSnMo= Name: res/layout/calendar_year_label_text_view.xml SHA1-Digest: yYXg/r7Aq8FU5f+YXqa5C5DxDkE= Name: res/drawable-xhdpi-v4/ic_delete_black.png SHA1-Digest: WnUBAjx5U2ChxEEsHU1sSysOIas= Name: res/drawable-hdpi-v4/dialog_full_holo_light.9.png SHA1-Digest: gtwAYHIRv/QwIODG9Jmy17izcqo= Name: res/drawable-xxhdpi-v4/ic_group_white_24dp.png SHA1-Digest: Q12UZsK8n917gz1XIUlw/er+mI4= Name: res/drawable/contact_photo_background.xml SHA1-Digest: wcH56qoRh/roa5MfCRAUhY5VXOQ= Name: res/menu/conversation_unmuted.xml SHA1-Digest: iGPzWVNCvf+sAJqdMTdIpoAM4UA= Name: res/layout/design_navigation_item_header.xml SHA1-Digest: 9uJLltTeSW3lfOIzg6RogF+0o/g= Name: res/layout/thumbnail_view.xml SHA1-Digest: uxUYHCr7mt2PsZuulTpLlXWjkZY= Name: res/drawable-hdpi-v4/switch_thumb_disabled_holo_light.9.png SHA1-Digest: Oiup3l4uNF0B12bFkgZ5ZbKU4eM= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_358 SHA1-Digest: VvyTT/9LksUV4HPNbIQ7v9P3pTA= Name: res/drawable/clickable_card_light.xml SHA1-Digest: 8lkLIxn4WnkhbvSwoxrs5gc79hY= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_359 SHA1-Digest: s/VIZLolJRrHzUwl20EGXxrhYHU= Name: res/drawable-mdpi-v4/ic_contact_picture.png SHA1-Digest: rdAdnkTTWDxiwQxMCWPsJyZ9kkA= Name: res/drawable-mdpi-v4/lockscreen_watermark_light.png SHA1-Digest: kSry/5rdpYVffPBKS2Yy/krmC2M= Name: res/drawable-xxxhdpi-v4/ic_forum_grey_32dp.png SHA1-Digest: K0zHF9Qe78zRd6DBOF/ryBQqLq4= Name: res/drawable-mdpi-v4/ic_emoji_objects_activated_dark.png SHA1-Digest: 8/XqLH7wdHhdHp+lBfnlBlL3qsQ= Name: res/drawable-xxxhdpi-v4/ic_launch_white_24dp.png SHA1-Digest: zFUqw+W1bmn24GCoTwy7J0mdh0Y= Name: res/drawable-xhdpi-v4/ic_menu_login.png SHA1-Digest: h+9GxhWayTINb75PLctpU3fqo/0= Name: res/layout-v11/notification_action_tombstone.xml SHA1-Digest: z3AGq+so9/rq5YlSWdZdcGUfX0w= Name: res/drawable-mdpi-v4/abc_ic_star_half_black_48dp.png SHA1-Digest: 0CNoLGphB8nQx4lnLUddBN45dxY= Name: res/layout/audio_view.xml SHA1-Digest: 5L+vTIdOLG9H9cmMnX1bpAxx+EE= Name: assets/emoji_faces.png SHA1-Digest: 3iRFxvoz43yD5utC20esxUfeHtk= Name: res/animator/upper_pause_to_play_animation.xml SHA1-Digest: 04mBHR+Cgllch7nL8htY67n82OE= Name: res/drawable-mdpi-v4/ic_delete_gray.png SHA1-Digest: YFqTxhz+roGQPEIYd6mxxjyiS0s= Name: res/drawable-mdpi-v4/ic_clear_search_holo_light.png SHA1-Digest: BAZdjrg41tGSMJqyirk56aAiI24= Name: res/drawable-mdpi-v4/ic_menu_lock_dark.png SHA1-Digest: kCaLMoRhk42asn0qCSXaY42dnfg= Name: res/drawable-xxhdpi-v4/ic_emoji_objects_activated_light.png SHA1-Digest: JhVo49qB76KOWI311Wftlzd+j4c= Name: res/layout-v11/color_fragment.xml SHA1-Digest: GLHqEMogQFWvx4GeJprKsO/m1yo= Name: res/drawable-xxhdpi-v4/ic_mood_white_24dp.png SHA1-Digest: lxrg18UAdmtgHtJsqAnNlvLJ90U= Name: res/drawable-hdpi-v4/ic_pause_circle_fill_white_48dp.png SHA1-Digest: pJFbvpLCoMVp+U4emMzL6hREDH0= Name: res/drawable-v21/notification_action_background.xml SHA1-Digest: 7E6bypZdy1+qGZt27u/jewA0yZQ= Name: res/drawable-xxhdpi-v4/ic_advanced_gray.png SHA1-Digest: ztSx++CxHc+VAzAvdmA1ujHwLoc= Name: res/drawable-mdpi-v4/ic_send_white_24dp.png SHA1-Digest: T6rCWS01LZ6QvOVTFkODy5zzd8k= Name: res/drawable-xhdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.p ng SHA1-Digest: deJMnJHFnu88BXcLutErBl0Yo7Q= Name: res/drawable-xhdpi-v4/abc_scrubber_track_mtrl_alpha.9.png SHA1-Digest: 1Ih2zOyUzHfQqptwXGLdPfBUSns= Name: res/drawable/background_pattern_repeat.xml SHA1-Digest: EEgb/vIb0/VFJJgS0/MIpgsTEn0= Name: assets/emoji_places.png SHA1-Digest: m/f0hGfQoPzldCayMIi+KuOkEX4= Name: res/drawable-hdpi-v4/abc_btn_radio_to_on_mtrl_000.png SHA1-Digest: /B3ilbfijKVVB8UBbI++gVsnSgk= Name: res/drawable-xxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_005. png SHA1-Digest: TNZBS5Mf0wn0ezp54etHHBvWtmo= Name: res/drawable-ldrtl-xhdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: Gfy9zjRcjMoDZ+/hXl+BaITIu3o= Name: res/layout-v16/color_fragment.xml SHA1-Digest: fCJuAB+3MIXvqkaqWkJfXEXt18I= Name: res/drawable-xxhdpi-v4/ic_dialpad_white_24dp.png SHA1-Digest: 9sPO853rsEByDo1QtXuOMwKljhI= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_373 SHA1-Digest: VeJdhu3EY8wQbzczMbiAueR3kcg= Name: res/drawable-mdpi-v4/quick_shutter_button.png SHA1-Digest: ESX5DUp6mmmodSPKnKnO3/Qecu8= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_372 SHA1-Digest: 9XbPZyYd/EeHczEcjCTlJ2wquFM= Name: res/drawable-mdpi-v11/icon_notification.png SHA1-Digest: E2jULYM5hS0byX94E3863fQxcVQ= Name: res/drawable-mdpi-v4/ic_emoji_people_activated_dark.png SHA1-Digest: PAMFXjP0EKgtzY6KVAHZX1eXASw= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_375 SHA1-Digest: PNdFFZIpo4wtdnnyz/Wp8jU8VF8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_YT SHA1-Digest: Qq3+DtsB2AUCJnag1MiKcSkIn4s= Name: res/layout-v17/notification_template_media.xml SHA1-Digest: Gk9mHn5vRrwokTAoN/AeeLOYFtQ= Name: res/drawable/abc_ic_menu_overflow_material.xml SHA1-Digest: 2/LbV03oji/WgEclRTAtRRy1Sk0= Name: res/drawable-xhdpi-v4/switch_thumb_holo_light_v2.9.png SHA1-Digest: lTaQlla7wJWRfNbx/Hu+VJaDlXY= Name: res/layout/badge_widget.xml SHA1-Digest: HXdmZMCZc5Pcz5ZWGoSEDMucmO0= Name: res/drawable-mdpi-v4/spinner_pressed_holo_light.9.png SHA1-Digest: O8B882Dl2Rt2oOS4plpeX8GCUAQ= Name: res/menu/conversation_mms_group_options.xml SHA1-Digest: m5OqDr/5KrnZNZquUXM00d/DYzQ= Name: res/layout-v17/contact_selection_list_item.xml SHA1-Digest: n0ajHyKjqMdxvlhDv4NebmvXVqA= Name: res/drawable-xhdpi-v4/quick_shutter_button.png SHA1-Digest: WAs3uJg+YYm14gsaEJtWq3uDpag= Name: res/drawable-hdpi-v4/transfer_controls_background.9.png SHA1-Digest: bB3l+bAb+LvTfoWtF9LZilz3X5E= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_380 SHA1-Digest: E0pemWil3+yoXcDS1xZEp8+FN3I= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_381 SHA1-Digest: xZ5XwW7Jz0Hhq9Odxqo803v/5Ws= Name: res/drawable-xxhdpi-v4/ic_mood_grey600_24dp.png SHA1-Digest: ozFX51RmDk7zD2chVTYJX3EOxc8= Name: res/drawable-xxhdpi-v4/ic_visibility_white_24dp.png SHA1-Digest: oDeY2Y3QAl5irGgMIuHx15wKQN4= Name: res/drawable-hdpi-v4/list_selected_holo_dark.9.png SHA1-Digest: hSLKqpeDDArxDLbgz2eUcpI9DhU= Name: res/drawable-mdpi-v4/ic_menu_search_holo_dark.png SHA1-Digest: wOzQ4BmFOb8qY/k0XGb+6vb6K7M= Name: res/drawable-xxhdpi-v4/splash_logo.png SHA1-Digest: L78TqBl/ZHtZALdnwct3mJXsQ0E= Name: res/layout-v17/conversation_item_received.xml SHA1-Digest: zENI4B5CfE+nYXVK5U/arYf5/Jo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ZA SHA1-Digest: P3VCad7HZosxVksUO+IxS0Y7qo4= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_385 SHA1-Digest: 800patLGNib6NsjVJcV7fh1yw1A= Name: res/menu/conversation_secure_identity.xml SHA1-Digest: tVQRPh9+TaRar2ja//rcjoPGgsw= Name: res/drawable-xhdpi-v4/telephone.png SHA1-Digest: XiCzVPlsMJsf/rb/Z2RUqQs1Jfo= Name: res/drawable-xxxhdpi-v4/ic_send_secure_white_24dp.png SHA1-Digest: auRbXFYO8NtTyqn1mERzefiJ55Q= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ZW SHA1-Digest: Oj4Ne9co0PEillrIX6/ivUwastM= Name: res/drawable-xxxhdpi-v4/abc_btn_radio_to_on_mtrl_000.png SHA1-Digest: VL2tp5Ko2rl1muvR0Gd7YEtwUdY= Name: res/drawable-mdpi-v4/abc_text_select_handle_right_mtrl_light.png SHA1-Digest: ahadZNpUX2odmzJlr7li4wRLOVg= Name: res/drawable-xhdpi-v4/ic_action_warning_red.png SHA1-Digest: 5fXPbDRpgMlXeIp6WjFDhU9e+Bs= Name: res/drawable-xhdpi-v4/spinner_pressed_holo_light.9.png SHA1-Digest: l07AAjv4APfDSMj2gVcl4QIryn4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ZM SHA1-Digest: NFg9ICpsCKoGQPESt61rjEjKQPI= Name: res/drawable-v21/abc_ratingbar_indicator_material.xml SHA1-Digest: TaCO4rsv95JHS3RML2c940eQ9U8= Name: res/drawable/abc_cab_background_internal_bg.xml SHA1-Digest: OpZTAPON/eHCLK5xEp9Ei2cska4= Name: res/layout/conversation_item_pending.xml SHA1-Digest: eTPQKrzfdGjno8iGRKrmbKxoxbQ= Name: res/drawable-mdpi-v4/ic_missing_thumbnail_picture.png SHA1-Digest: q/a7ftqNdAV6f9nCbSU2PeMXBXE= Name: res/drawable-ldrtl-xxhdpi-v17/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: IsziyF2OBzAviNmnk3+DRoNCmAA= Name: res/drawable-xxhdpi-v4/ic_info_outline_white_24dp.png SHA1-Digest: cWrQw6vVdsRo290b2sLjivDwPVw= Name: res/layout/import_fragment.xml SHA1-Digest: 7FrulvyXhotkn+GNiI5StvYyi/o= Name: res/layout-v13/select_dialog_multichoice_material.xml SHA1-Digest: qFrnA4LpADzWJJ/RBfYVgAaSR7M= Name: res/drawable-xhdpi-v4/ic_recurrence_bubble_outline_disabled.png SHA1-Digest: Ib+t7PgeUwIktdmtc1DDu245Qpo= Name: res/drawable-hdpi-v4/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: kl6Gqu1dkwDjsHbQTjiEEaVCJG4= Name: res/drawable-mdpi-v4/sms_selection_icon.png SHA1-Digest: 2/XFQD5mEqqjzCYSeQ7wZaJV97I= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_855 SHA1-Digest: GFR3JT2vrXUV4AaCWsbkvT1AlX0= Name: res/drawable-mdpi-v4/ic_emoji_objects_normal_dark.png SHA1-Digest: k7TKJAFDa8dHVGD58qFSZTt3Y5k= Name: res/drawable-hdpi-v4/abc_tab_indicator_mtrl_alpha.9.png SHA1-Digest: XUUeghiBJli27nxrwf5sxQ8N90c= Name: res/drawable-xxhdpi-v4/ic_call_white_24dp.png SHA1-Digest: 0Nwk5dMkNeN14v6ptiSdHiEmaqc= Name: res/drawable/abc_ic_clear_material.xml SHA1-Digest: traTi6O31OhEtbvMNJ8PYJjtDME= Name: res/drawable-mdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.pn g SHA1-Digest: +7fQsrk4ONIq9nPWtO1eTM8C1HQ= Name: res/layout/conversation_item_received.xml SHA1-Digest: wAV7JPKTeTXudSF0UsoJ/5i/a2A= Name: res/drawable/abc_list_selector_background_transition_holo_dark.x ml SHA1-Digest: fAkCuPln1zmCTatmP9A40U4lWak= Name: res/drawable-xxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_000. png SHA1-Digest: u9/W8GO9j1WSsX3sxW3nEXn/Dag= Name: res/drawable/clickable_card_dark.xml SHA1-Digest: wf6TFqfzuGakZpMN716tnvOPuu8= Name: res/drawable-xxhdpi-v4/ic_emoji_recents_normal_dark.png SHA1-Digest: rYNP4o9mLGb4hRuFbzgasSMPsSQ= Name: res/drawable-anydpi-v21/design_ic_visibility_off.xml SHA1-Digest: zGvQADjKorrDtblDDeg+FD7MgFo= Name: res/drawable-xhdpi-v4/ic_backspace_normal_light.png SHA1-Digest: Cxntk1NvNFPcycg7iEDABNhjN7U= Name: res/drawable-xxxhdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: 1w/uxs4HAVVuv0NcdbFmy9M8R9E= Name: res/drawable-hdpi-v4/abc_scrubber_control_off_mtrl_alpha.png SHA1-Digest: SFBbwGMV04UxzF/PgrJITyguwKY= Name: res/drawable-hdpi-v4/ic_textsms_black_32dp.png SHA1-Digest: jRpWGSk+5HVbTgEqSMHBKC67+AY= Name: res/drawable/import_export_item_background_dark.xml SHA1-Digest: 9N3yMYN2WLqHwcDCi+qj8GtlZZs= Name: res/drawable-xxhdpi-v4/abc_btn_radio_to_on_mtrl_015.png SHA1-Digest: XEff6jUDEFWHjcuOO3DKy9ou9IE= Name: res/drawable-xxxhdpi-v4/ic_send_white_24dp.png SHA1-Digest: p+LvghVtu4UqmCjQ78gODCMOPww= Name: res/drawable-hdpi-v4/abc_text_select_handle_left_mtrl_light.png SHA1-Digest: OpHRWN2MnxLTK9nhx0Qp9JkgMgY= Name: res/drawable-xhdpi-v4/ic_movie_creation_dark.png SHA1-Digest: kamdG6A5SiThWfBULcd3GxjUm7k= Name: res/drawable-mdpi-v4/ic_visibility_grey600_24dp.png SHA1-Digest: 2fN5+MsicC71y5iO7uVx2iKZtYg= Name: res/drawable-sw600dp-xhdpi-v13/ic_backspace_normal_light.png SHA1-Digest: oO+QVqafnv8qjkKRnUlJc8QC4n0= Name: res/drawable-xxxhdpi-v4/abc_ic_star_black_36dp.png SHA1-Digest: WP2ybY6ZxFUdosC8joKLUcGVas0= Name: res/drawable-xhdpi-v4/ic_content_copy_light.png SHA1-Digest: R/WGz4ly9BQx9UFQZS6XK6iP7xY= Name: res/drawable-hdpi-v4/switch_thumb_activated_holo_light.9.png SHA1-Digest: CctxDSFOgITRJNMJX0mhtDzP4DE= Name: res/drawable-hdpi-v4/ic_emoji_emoticons_activated_dark.png SHA1-Digest: Bs1Bqjn+kjMGOUdmhxHl15R2xFU= Name: res/menu/conversation_muted.xml SHA1-Digest: rrsJ3gK/wiwHJ8EhFDM1gMYF/0c= Name: res/drawable-hdpi-v4/quick_shutter_button.png SHA1-Digest: BqCkbyqDSI7Jt7t8InYASdnPvSM= Name: res/layout/country_list_item.xml SHA1-Digest: 5/z34addyDwgm8fiRrEEt8My/KM= Name: res/layout/calendar_date_picker_view_animator.xml SHA1-Digest: TmLeWqfPUZCkJnKPofJIJK5ryPQ= Name: res/anim/fade_scale_in.xml SHA1-Digest: BGInYJ2dY+FwSHntv4EVZBJwXyI= Name: res/color/done_text_color_dark.xml SHA1-Digest: semtkjG+av9bQR2kNxjnl0cAQ7o= Name: res/drawable-hdpi-v4/notification_bg_low_pressed.9.png SHA1-Digest: x1+Ev4K1aYghXofr0W+mR6oQ9jY= Name: res/layout/three_keys_view_leftright.xml SHA1-Digest: Q7XV2rjXlsx7a1S7PedyYL0Z6XU= Name: res/drawable-hdpi-v4/ic_recurrence_bubble_disabled.png SHA1-Digest: hBR+uzZZXVxyq0bgo0t+U27GnPo= Name: res/drawable-hdpi-v4/ic_menu_search_holo_light.png SHA1-Digest: 0xap1Yr5UvJG1QLDXGeX8i7NEXo= Name: res/layout/design_bottom_sheet_dialog.xml SHA1-Digest: AUJOvlYtmk2AHWv8r3H3P51ZSjE= Name: res/drawable-xxhdpi-v4/ic_emoji_people_normal_dark.png SHA1-Digest: At3lTHNov8OBeIUQE7U2sn3LKdo= Name: res/drawable-xhdpi-v4/ic_photo_camera_light.png SHA1-Digest: FFzT14+B7/XGX4HflN7I8cdbh7k= Name: res/drawable-hdpi-v4/ic_photo_library_white_24dp.png SHA1-Digest: eYroMt+yGNPb/16vvouAKc2CbKU= Name: res/layout/abc_action_mode_close_item_material.xml SHA1-Digest: GW4gZZBmozoKOPFYj0bl8BW78s4= Name: res/drawable-xhdpi-v4/ic_content_copy_dark.png SHA1-Digest: gU/qQLQneKsb2HgbEbByIFGmIbM= Name: res/drawable-xxhdpi-v4/ic_info_outline_dark.png SHA1-Digest: n8IwvoROTVOfrGqhbeVi6X1AD1E= Name: res/drawable-hdpi-v4/spinner_pressed_holo_light.9.png SHA1-Digest: 5Tb20GpfyWPdfk68H93Ix+I70zE= Name: res/layout/design_layout_tab_icon.xml SHA1-Digest: OpgFVS39nmdZdRaCD4FzFLJt5h4= Name: res/drawable/item_background_holo_light.xml SHA1-Digest: lVD3wxMY6nk5LM/+t5mdn7blE3A= Name: res/drawable-mdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png SHA1-Digest: sORfnhpPIEXLnh57veYnu5sMZD0= Name: res/layout-v11/notification_template_big_media_narrow_custom.xml SHA1-Digest: lhEcCM3i0Nk4a1d97lyyozXYFUU= Name: res/drawable-xhdpi-v4/ic_backspace_disabled_dark.png SHA1-Digest: ypl7jxS4XrvwcBL7PFMbZK58BBo= Name: res/drawable-v21/abc_btn_colored_material.xml SHA1-Digest: Exeq8outkyCU3j4roUcAlNp7sYk= Name: res/drawable-xxxhdpi-v4/ic_download_circle_fill_white_48dp.png SHA1-Digest: H94FdKukmjyUrOwyacThnnNZEXs= Name: res/drawable-v11/notification_bg.xml SHA1-Digest: I1JcXdPPUQIoR7Lb18Lxi3LkwvY= Name: res/layout/notification_template_lines_media.xml SHA1-Digest: 6+p+3lkeRlnuyDGgb7A7hf9gFbc= Name: res/drawable-anydpi-v21/design_ic_visibility.xml SHA1-Digest: fn7TJtWncGazXT707hmOkjb7Hjk= Name: res/drawable-mdpi-v4/ic_refresh_white_24dp.png SHA1-Digest: EQyqpYasmoTClIK+uuxMKIzOjX4= Name: res/drawable-mdpi-v4/abc_textfield_default_mtrl_alpha.9.png SHA1-Digest: QAKVB+ymS1bLJVZt/mVSPtEVFH4= Name: res/drawable/abc_btn_radio_material.xml SHA1-Digest: npSvWgijFi0d2VFF3dOZmjf+WBQ= Name: res/menu/conversation_callable.xml SHA1-Digest: SiEu8jM36aCHN/6UTKbnaLPvbks= Name: res/drawable-hdpi-v4/ic_advanced_black.png SHA1-Digest: 4l1EzaQairF8PIGrWNP7KjxlUiY= Name: res/drawable-v11/emoji_category_people_light.xml SHA1-Digest: /qr2mFhRvZmr51s+/QBV+j3wFZU= Name: res/drawable-mdpi-v4/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: K1sCoF6dhKG/axzbYGHK9kB3C+Q= Name: res/drawable-hdpi-v4/ic_emoji_people_normal_dark.png SHA1-Digest: pLARhgTZbjUa7/9j5K+uo/0WtBE= Name: res/drawable-xxhdpi-v4/abc_tab_indicator_mtrl_alpha.9.png SHA1-Digest: DjgjddBKSH0OILJhqJkZXAYKmKg= Name: res/layout/keyboard_text_with_header.xml SHA1-Digest: nOekCMLOv7KiP15NBo87M/Pivzo= Name: res/layout/transfer_controls_stub.xml SHA1-Digest: MX3Bo85Lp6Uf92KqntyrIFCQBWU= Name: res/drawable-xxxhdpi-v4/ic_keyboard_white_24dp.png SHA1-Digest: 9EqfIMdh+YfOoSoBvSkWKV36gNw= Name: res/drawable-hdpi-v4/ic_emoji_nature_normal_light.png SHA1-Digest: XWlFZlM/6FX89ShDQYgI2dyH/B0= Name: res/drawable-hdpi-v4/ic_backspace_normal_light.png SHA1-Digest: vy4xZjN8wjI7KA8BWgZV3NndRM8= Name: res/layout/calendar_date_picker_header_view.xml SHA1-Digest: /86yi1DVNOflGh8oEIT6nHq8oYo= Name: res/drawable-mdpi-v4/design_ic_visibility.png SHA1-Digest: IqZoFoiND+uGXpPyKS/D1WgufPg= Name: res/drawable-xxhdpi-v4/abc_cab_background_top_mtrl_alpha.9.png SHA1-Digest: fWFzmRTvlhVZBzFAxTslbjQMJB4= Name: res/drawable-xhdpi-v4/abc_ic_star_black_36dp.png SHA1-Digest: iKusdXnTG07KT152X2hnsP7XAQo= Name: res/drawable-xhdpi-v4/ic_message_white.png SHA1-Digest: fbsfEqwsJ0tjoZE0hNlvV+b0qHg= Name: res/drawable-mdpi-v4/abc_scrubber_control_off_mtrl_alpha.png SHA1-Digest: vMOEpPnU4ypvMmrbnkpxDB3M4eM= Name: res/drawable-xxhdpi-v4/ic_account_box_dark.png SHA1-Digest: bA+xleAg2iE4sEWwUoJ+lXMnlNo= Name: res/drawable-sw600dp-hdpi-v13/ic_backspace_normal_light.png SHA1-Digest: 9lxexc7vtXhIqELJvJyZMfXE1Ss= Name: res/drawable-hdpi-v4/divet_lower_right_dark.png SHA1-Digest: wP+labhUt9bVEMloEG5PoqrjPHY= Name: res/layout-v16/centered_app_title.xml SHA1-Digest: 2z1eQ56R2gDR8kSMnmlGLTPnXcY= Name: res/menu/conversation_insecure_no_push.xml SHA1-Digest: qHOiXgEtRSYUhLWKLvX5rhwwiGI= Name: res/drawable-mdpi-v4/ic_delivery_delivered_dark.png SHA1-Digest: wpU/Tsm7KtmQ/fqTo+oos4D+7Pc= Name: res/drawable-mdpi-v4/ic_scroll_down.png SHA1-Digest: +5IhB96OyRB+P6MHLAQAZeKGvwI= Name: res/drawable/abc_item_background_holo_light.xml SHA1-Digest: ku9bJ9xYD07lS3GZhes5DH5hi7U= Name: res/drawable-hdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png SHA1-Digest: Bj6BC2+QG7pc8RQwt/bo9WgmUR0= Name: res/color-v23/design_tint_password_toggle.xml SHA1-Digest: wUyUHwcmGGXYL1JhhWMPQVcf7hA= Name: res/drawable-xhdpi-v4/ic_keyboard_grey600_24dp.png SHA1-Digest: iNbhPYH7gI/65q5bf84nezr+hSw= Name: res/animator/rotate_minus_90_animation.xml SHA1-Digest: BuCc2mfyfzB/zJMaWWncVTSkoKM= Name: res/drawable-hdpi-v4/ic_image_dark.png SHA1-Digest: 9kta2ksiC5yxLPcwrfPBZHVdtbQ= Name: res/layout/abc_popup_menu_header_item_layout.xml SHA1-Digest: cXVPf20uVygnE264bcuEa06mRPQ= Name: res/drawable-xhdpi-v4/textfield_disabled_focused_holo_light.9.pn g SHA1-Digest: 5B5Y1sO935jPXP0SPaRMQdqzKvI= Name: res/drawable-xxhdpi-v4/ic_pause_circle_fill_white_48dp.png SHA1-Digest: kKjYOuOpFYBK00EYwdKh/FYMeB0= Name: res/layout/database_migration_activity.xml SHA1-Digest: qtevjvESyGIAKlaaHcTVvFivDEg= Name: res/drawable-xxhdpi-v4/ic_volume_up_light.png SHA1-Digest: HJdq6skIdWI/kSrfFnt6D0r+GxE= Name: res/drawable-xxhdpi-v4/ic_circle_fill_white_48dp.png SHA1-Digest: HSvmtSZQCTVP93CnzYBlK3yHAbE= Name: res/layout-v17/conversation_item_sent.xml SHA1-Digest: dhBiGtMXhEIPWzr5H1gqS0QmrGs= Name: res/drawable/conversation_item_sent_indicator_text_shape.xml SHA1-Digest: gjE0kwExarnHKCBzEcSlNUDsC0I= Name: res/drawable-xxhdpi-v11/icon_cached.png SHA1-Digest: E8iyhY8Yt68zCmnuOO+rk/5Vq2E= Name: res/drawable-xxhdpi-v4/ic_emoji_nature_normal_dark.png SHA1-Digest: qvPNkQ4kgg5OJMnrffAW7nShfes= Name: res/layout/video_player.xml SHA1-Digest: BuhNr7gl0JYIYva/P680FXCcprQ= Name: res/drawable-mdpi-v4/ic_backspace_normal_light.png SHA1-Digest: XLVO12/7C+tQkw5aPeE3ILQ9cI4= Name: res/drawable-xhdpi-v4/icon_dialog.png SHA1-Digest: v3eLJ3OgDgovfl3il+qazPMrAQk= Name: res/drawable-hdpi-v4/ic_search_holo_light.png SHA1-Digest: KbFl7RLjRTGlTIPIu1Vgqw2GO1A= Name: res/drawable-xxxhdpi-v4/icon_cached.png SHA1-Digest: VZZoa23taaL3+aQJQMgNmDAvXOs= Name: res/color/recurrence_spinner_text_color.xml SHA1-Digest: dlRxYbAqKQnnnrUVFpgDY5OD+Hw= Name: res/drawable-hdpi-v4/ic_brightness_6_gray.png SHA1-Digest: 01HgaZfDz74Q+6hlCKGQYqnVMeA= Name: res/anim/design_bottom_sheet_slide_out.xml SHA1-Digest: uTMw35lL6zfB58m4Npj1tkUwCKs= Name: res/drawable-hdpi-v4/ic_advanced_gray.png SHA1-Digest: wiOv8b8dKfTYGJI1iZoCasjZbJM= Name: res/drawable/abc_ratingbar_material.xml SHA1-Digest: dQYfnGBvF3NoNPyyD+NZnOWv73w= Name: res/layout-v21/abc_screen_toolbar.xml SHA1-Digest: c6PHptjlDcIIjsVPCryceAZF3qA= Name: res/drawable-xxxhdpi-v4/ic_photo_camera_dark.png SHA1-Digest: RiWmiAzdH8XswRoWaThmwhpSR58= Name: res/layout/date_picker_dialog.xml SHA1-Digest: TG7jySd28roaL3HtDfJn6hYIP5s= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_979 SHA1-Digest: dqFdRTRBu8qABvUu4oPcGOhjXwg= Name: res/drawable/white_radius.xml SHA1-Digest: fmmwZ1xdiLKhbP7MVdTnY4KFGjc= Name: res/drawable/abc_item_background_holo_dark.xml SHA1-Digest: M0YVK8Qdk4ReRL9EAtEpVn58SLc= Name: res/drawable-hdpi-v4/sms_system_import_icon.png SHA1-Digest: p0FwBdO0i3J1NGN/HenlojXr8f8= Name: res/drawable-hdpi-v4/ic_push_black.png SHA1-Digest: ZvdjVsdLxH0gBqQ1PdWsbLKd34U= Name: res/drawable-hdpi-v4/ic_emoji_flags_normal_light.png SHA1-Digest: ZzWFcSV91qSF87GEePVsoqGaERM= Name: res/drawable-xxhdpi-v4/ic_done_white_18dp.png SHA1-Digest: bKAJwtwxPE29bJdHRdAoqgw5Qbc= Name: res/drawable-xhdpi-v4/abc_list_longpressed_holo.9.png SHA1-Digest: /HDLqKYSwxPWi6ihR75E/oot/mo= Name: res/drawable-xhdpi-v4/ic_textsms_black_32dp.png SHA1-Digest: oqLbYDw4OWuVaNkiBeRLej7kuLo= Name: res/layout-v17/abc_select_dialog_material.xml SHA1-Digest: XhivagTkM42eJCtTl5LKhzffpPE= Name: res/drawable-xxhdpi-v4/ic_send_white_24dp.png SHA1-Digest: jPgl1DeE6qTNGQE5Gn9FrnS+fBk= Name: res/drawable-xhdpi-v4/ic_push_registration_reminder.png SHA1-Digest: t2WKBQ5mpFyToqVHEHKRcaZZzz4= Name: res/layout/conversation_activity_emojidrawer_stub.xml SHA1-Digest: t1a8C6MNcoHCQIVqcvozm7/mkuQ= Name: res/drawable-xxhdpi-v4/abc_btn_check_to_on_mtrl_015.png SHA1-Digest: uGWvmzDJW1Tm49ULXgHdjHtvfwc= Name: res/drawable-xhdpi-v4/ic_add_white_24dp.png SHA1-Digest: xdyoQCLkXu/QWm8eiR5yHAyCEcg= Name: res/drawable-xhdpi-v4/ic_clear_white_24dp.png SHA1-Digest: 73PnLlktjynlAL9dc5op3jz/sT4= Name: res/drawable-xxxhdpi-v4/ic_photo_library_white_24dp.png SHA1-Digest: CYGOrsdjU4wbC903pey4k/K7TDI= Name: res/drawable-xhdpi-v4/abc_ic_star_half_black_16dp.png SHA1-Digest: p77+iJXOm0qrONaejSCLhWIgXoU= Name: res/drawable-xhdpi-v4/notification_bg_normal.9.png SHA1-Digest: jZ3Gp8XAjOt3IlouqhB/Qse7VuA= Name: res/drawable-xhdpi-v4/ic_check_normal_light.png SHA1-Digest: mZkGBjdzIEziwyUJXR4Hgsr1Ex0= Name: res/drawable-mdpi-v4/ic_archive_white_24dp.png SHA1-Digest: qaNI/E3+5JP4Y0EqCBMbYDSCCqA= Name: res/layout/psts_tab.xml SHA1-Digest: o9imNXCn5LOJeFwUrKL9ym55zsc= Name: res/drawable-hdpi-v4/ic_audio_dark.png SHA1-Digest: 6p5nnRQVfPOnYKSUc7LDnWH8fnM= Name: res/drawable-mdpi-v4/ic_emoji_flags_activated_light.png SHA1-Digest: iKK5lkuDk6cgUSxkBjhc7JY1yjI= Name: res/layout-v11/conversation_fragment.xml SHA1-Digest: tEDFwezd29uGZo25Hmrto9fLVfw= Name: res/drawable-hdpi-v4/ic_app_protection_black.png SHA1-Digest: cGFicbnfWgsXiuQjC2yONt0+mNk= Name: res/drawable-hdpi-v4/ic_select_all_white_24dp.png SHA1-Digest: IoR1V7p/3eSsRZqiDIR1fVhtwWg= Name: res/drawable-xxhdpi-v4/ic_photo_library_white_24dp.png SHA1-Digest: hGymLWfgo7k13mfYiomvgpFoGzM= Name: res/drawable-mdpi-v4/ic_recurrence_bubble_fill.png SHA1-Digest: DmXcKYa6S5gB9AZsUldis3sqvPU= Name: res/layout/conversation_item_last_seen.xml SHA1-Digest: 99xLTy2kmZYjpoUuhkydWVW4UNk= Name: res/drawable-xxhdpi-v4/ic_advanced_black.png SHA1-Digest: 79lGVOoBDIYXCTErbr1NvP9Ct9M= Name: res/layout/contact_selection_recyclerview_header.xml SHA1-Digest: Fbz73NjxKw6n9EpmxRB7nv90lFA= Name: res/drawable-xxhdpi-v4/ic_recurrence_bubble_fill.png SHA1-Digest: byPothetufoz83PimCg+81vAW4E= Name: res/drawable-xhdpi-v4/ic_emoji_symbols_activated_dark.png SHA1-Digest: fIQ05wTvHbvpp7fYbZBSzwjuEJw= Name: res/drawable-hdpi-v4/icon_lock.png SHA1-Digest: chwtrHwrmuVUJF5trfB+fonxkyc= Name: res/drawable-mdpi-v4/abc_list_longpressed_holo.9.png SHA1-Digest: jaCqE8RSPyJL2tSTf5ctOZ8Wkp8= Name: res/menu/conversation_insecure.xml SHA1-Digest: 0XziGIUFD2b2uJT/iL/FNk2Oi40= Name: res/layout/three_keys_view.xml SHA1-Digest: eHLBCUAInSvPhL7P/FkER4kgJpI= Name: res/layout/time_picker_view.xml SHA1-Digest: +9O4VWyQ2+LCyq94Q4OcgUpPcbw= Name: res/drawable-xxhdpi-v4/abc_popup_background_mtrl_mult.9.png SHA1-Digest: nM7eMb1IwRTSPeCUiRnPcn3CGRw= Name: res/drawable-xhdpi-v4/abc_textfield_activated_mtrl_alpha.9.png SHA1-Digest: /UEK2xt/qrP3cCJflXSymHBKVrQ= Name: res/drawable-xhdpi-v4/ic_send_sms_secure.png SHA1-Digest: ryMNyBeVzQX0/4AT1TsTXbbp8kA= Name: res/drawable-xxxhdpi-v4/design_ic_visibility.png SHA1-Digest: Jrr2auhCHctL/z4MV65aRgZbDv4= Name: res/drawable-hdpi-v4/ic_delivery_delivered_dark.png SHA1-Digest: oDh4cyrMHk++7kt5u67Kfj07WGo= Name: res/drawable-xxhdpi-v4/ic_call_split_white_24dp.png SHA1-Digest: ww/+BoXzjWC6pIW0UWy3iPTDXSw= Name: res/color/abc_secondary_text_material_light.xml SHA1-Digest: M/vEx1FuZRUURwyMWQad1XJkERQ= Name: res/drawable-hdpi-v4/ic_emoji_people_activated_dark.png SHA1-Digest: 1n23BX7ktYtdz2tzo2K3I2f1Uek= Name: classes.dex SHA1-Digest: JarClbzDn/6wUkVRjrwX/+SFx2k= Name: res/layout/abc_screen_content_include.xml SHA1-Digest: Qy4yTXeEqDx3ZNR+CxiliBg224M= Name: res/drawable-hdpi-v4/switch_bg_focused_holo_light.9.png SHA1-Digest: Uu0jDWQm42BXRa5E8t530Qt9aEI= Name: res/drawable-hdpi-v4/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: 9HmgRLugE7XLFQSCcDKTHa0FfIU= Name: res/drawable-xhdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png SHA1-Digest: MRB8bfz87PDQFDWGNEetiXxTiwY= Name: res/color/abc_hint_foreground_material_light.xml SHA1-Digest: I8Ds4hXXhIubmvL5DNX6Tn1EfSI= Name: res/drawable/switch_thumb.xml SHA1-Digest: uD+ge0ZrXQlCCV1iqqfA3aJAg9c= Name: res/drawable-xhdpi-v4/ic_send_sms_insecure.png SHA1-Digest: 4VIdZ809NFUqx/UPenMJ7D874fM= Name: res/drawable-xhdpi-v4/ic_send_push.png SHA1-Digest: 8v0rupvoADhU++O8r/y24H66WzQ= Name: res/drawable-mdpi-v4/abc_list_focused_holo.9.png SHA1-Digest: P0wooDvrgcWxD6FuObhOb0leW5c= Name: res/drawable-mdpi-v4/ic_audio_dark.png SHA1-Digest: zhpozyc7RnIEux36uvVpLpHvoYQ= Name: res/layout/conversation_item_pending_v11.xml SHA1-Digest: BIdce4ZfxHvQJw2Kpy77LuiSNAM= Name: res/drawable-hdpi-v4/ic_unarchive_white_36dp.png SHA1-Digest: WDXJE78HXhC4ci2+Zk4mWKmsmnU= Name: res/drawable-xxhdpi-v4/ic_photo_camera_light.png SHA1-Digest: EOo/n6OaIvn7/oE1A05+ICtODt8= Name: res/drawable/done_background_color_dark.xml SHA1-Digest: VF0ZGwzrktCT7fzYmlJNmcLtSPU= Name: res/drawable/abc_ic_go_search_api_material.xml SHA1-Digest: PB/HXCss38YyHIfl5zY8qJqidxk= Name: res/drawable-xhdpi-v4/abc_textfield_default_mtrl_alpha.9.png SHA1-Digest: wxS5Do9e7cCh/fgOCbgTwd/ZeDE= Name: res/drawable-xxxhdpi-v4/ic_badge_24dp.png SHA1-Digest: 6NFopP31wSBougmiMFJ/ha7R5/g= Name: res/color/switch_thumb_material_light.xml SHA1-Digest: gulAt9uew9Th4qbVyV+/+NDOoRQ= Name: res/drawable-xxhdpi-v4/ic_push_black.png SHA1-Digest: 9iMVgo9s/BTUDPMsVuQpjGH2iDQ= Name: res/animator-v11/rotate_minus_90_animation.xml SHA1-Digest: uBdoND/8IkPM8vaObJcyA86WNN0= Name: res/drawable-ldrtl-hdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: i+D8jpgrDBK7ho3fPTIxkDeM6rM= Name: res/color/dialog_text_color_holo_light.xml SHA1-Digest: sla+7cKXzMuT4rMqnPPlnGrGwI8= Name: res/drawable-xxhdpi-v4/icon_dialog.png SHA1-Digest: 7htL/8mxE7HuKjrIiEujDYbhXZ4= Name: res/drawable-xhdpi-v4/ic_menu_lock_dark.png SHA1-Digest: RLs+N2EZOJI6nQEGc7gs7kTHNMA= Name: res/drawable-hdpi-v4/ic_save_white_24dp.png SHA1-Digest: va4B2UZYQ357PZmHAnQqrns5hyg= Name: res/drawable-mdpi-v4/ic_check_white_24dp.png SHA1-Digest: lycMfpZqD30AJNacCIEKdpzktjU= Name: res/drawable-mdpi-v4/abc_btn_check_to_on_mtrl_015.png SHA1-Digest: lNuUT0ocSjvW/jki9WBE/Zw/lfA= Name: res/drawable-hdpi-v4/abc_text_select_handle_left_mtrl_dark.png SHA1-Digest: l7zskEgFzcvaKQ3ac893RSnOFG4= Name: res/drawable-xxhdpi-v4/switch_bg_disabled_holo_light.9.png SHA1-Digest: Z13MCJ8z/h7AxU4mFC97sSSvf/E= Name: res/drawable/pause_icon.xml SHA1-Digest: uWh0vL+kjTwWGZdrJ4+2fFtoJmc= Name: res/drawable-hdpi-v4/ic_keyboard_grey600_24dp.png SHA1-Digest: S1yK9PAKEF0wcf3IpadF0QSavA8= Name: res/drawable-xxhdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png SHA1-Digest: CwBgZCf6HQH3oXQJ4vFliod7poc= Name: res/drawable-hdpi-v4/textfield_focused_holo_light.9.png SHA1-Digest: G+sjjsHiKMXPwXhMYcjptrXj5oc= Name: res/drawable/recycler_view_fast_scroller_handle.xml SHA1-Digest: SdRfCp+VhZO6lfe8HeZXlw0zYSs= Name: res/drawable-hdpi-v4/ic_movie_creation_light.png SHA1-Digest: jMpWCxFLChXXQKRH//uQ5eJhDR0= Name: res/drawable-hdpi-v4/switch_bg_holo_light.9.png SHA1-Digest: 84PBAh8/+LjExDRXzcAPH20FsL4= Name: res/drawable-v11/emoji_category_flags_light.xml SHA1-Digest: 4WJXwjHnNYAoh7PsjTRxu/DnfiY= Name: res/drawable-hdpi-v4/ic_emoji_people_normal_light.png SHA1-Digest: UbowkgVOW71RAjjFUGL5QeJotBo= Name: res/drawable-xxhdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: kW1/B+eMvi5Qa6pHdpol8Np5LOE= Name: res/drawable-xxhdpi-v4/abc_text_select_handle_right_mtrl_dark.pn g SHA1-Digest: U8rdfuKZoulQ8qigYFR2oBTsdvo= Name: res/drawable-xhdpi-v4/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: Rnyk862Fak5QBrH16XFG0gnr96c= Name: res/drawable-xhdpi-v4/ic_notifications_gray.png SHA1-Digest: /uLa66vcY/KDIz8g/5UUGqTgdZQ= Name: res/drawable-hdpi-v4/telephone.png SHA1-Digest: zxNQuZWAA4RKS8tts+BlX5qthPU= Name: res/drawable-mdpi-v4/ic_emoji_symbols_normal_light.png SHA1-Digest: wk94ZEu0bo997UCXWcscIEC1uok= Name: res/layout/country_selection_fragment.xml SHA1-Digest: Jc5OXlKL+7GgqXpkjMZR+rNJnLQ= Name: res/layout/number_picker_dialog.xml SHA1-Digest: QtwqVaCO7V+ZLo909BT37PqgH28= Name: res/drawable-hdpi-v4/ic_visibility_white_24dp.png SHA1-Digest: BAJ3nBA44xIO03iRy093h9/C2oQ= Name: res/drawable-v21/avd_show_password.xml SHA1-Digest: N3p+N4O8mTgGo1X4Nfg/Qf5x9+k= Name: res/drawable-xxhdpi-v4/spinner_disabled_holo_light.9.png SHA1-Digest: spcycqX8mk0fo3XEgQ4H49SOCQc= Name: res/drawable/abc_vector_test.xml SHA1-Digest: Nt9ckQDkCsYP2/LnUbJXmZv47z4= Name: lib/armeabi-v7a/libcurve25519.so SHA1-Digest: +Y+tD77C55a6NOXrWekk2U8vdQY= Name: res/menu/conversation_add_to_contacts.xml SHA1-Digest: uWeEXoC0QxpVS9gCdVRHIZJro00= Name: res/drawable-sw600dp-hdpi-v13/ic_backspace_disabled_dark.png SHA1-Digest: 984kWqq3UKY/ucF3wHp/xjMmzzE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LK SHA1-Digest: dGlE/2sVqnqwOyAcnI147+xWo+M= Name: res/drawable-mdpi-v4/ic_visibility_white_24dp.png SHA1-Digest: +V7BPsXKc4K01O1Z7ww+MC18POw= Name: res/anim/design_snackbar_out.xml SHA1-Digest: fenowEI7s0OCQ7vzkP4haFTfB0I= Name: res/drawable-mdpi-v4/notification_bg_low_normal.9.png SHA1-Digest: G4lYrLmqbZodQ56hAVjySdNcV2I= Name: res/drawable-xhdpi-v4/ic_search_holo_light.png SHA1-Digest: 4Ux7qH9nF4Sf5TJIxfT9QATkT1E= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ER SHA1-Digest: E2TigdpPBhjWghTqLGd1MzWD+wQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ET SHA1-Digest: nLInv9rnfTZyc2Yt3HXON1XbpjY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ES SHA1-Digest: Qh+3McPT6XZ0r8gmjWGxaAtWE34= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LS SHA1-Digest: 7BsS5aNp3jcPOYeM+eXOop7yRso= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_EE SHA1-Digest: b8q7bX/oHVLFlYkL9J28fRbE7D8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LR SHA1-Digest: L46Pd4GqB6a5EmHS8jH6nOtsOWg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_EH SHA1-Digest: JG3j+8eE6wXPKykW7Cr9wkfPAsc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LU SHA1-Digest: VrSm6E5recaey0dmWmzxQbD97Hg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LT SHA1-Digest: bOmBTv4QyYmBTfAiGB7zJwbQaOE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_EG SHA1-Digest: fic9NKv+egZ0qRjfXEN/bw7nsQY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LV SHA1-Digest: D85Bu86xeawV7nt+eEnjA3V+yXA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LY SHA1-Digest: uJqhoq1Hm5JnGxP6M4+UeEatBLY= Name: res/drawable-xhdpi-v4/abc_btn_radio_to_on_mtrl_015.png SHA1-Digest: uk3L+RIoakDF8kLQl1lbuz1VdkM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA SHA1-Digest: JJVvzkHvw50ALWuLIFGOVrl0KOs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_EC SHA1-Digest: d+Bo1FvPdg7ZqcgtXZ/O28GQhWs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MC SHA1-Digest: 2CLnKQBD+H31vh400oTIJF70Mow= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MD SHA1-Digest: ZUJDIbLgUEy6YAu8uHv1Ph17sts= Name: res/layout/notification_template_part_time.xml SHA1-Digest: LJb6bTMCYfMEF2qojVDiwIByprc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ME SHA1-Digest: pdgkCYCQNzuE8eH8UbDhGHQ8Ru4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MF SHA1-Digest: MbJgQJRk74Qp7wAQYEdn1g07kPM= Name: res/drawable-xhdpi-v4/ic_emoji_flags_activated_dark.png SHA1-Digest: +zOuSsFclhdcXHPhMp+42LgVol8= Name: res/drawable-mdpi-v4/ic_notifications_gray.png SHA1-Digest: Vdg58LW0JtcH1k8TP95v6xsA03o= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MG SHA1-Digest: ofeWHBJTHurHJ7TSU71QNCxnjbs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MH SHA1-Digest: mK7nAasII3omYbOsaQ5cFKjuVQQ= Name: res/drawable-v11/emoji_category_emoticons_dark.xml SHA1-Digest: OAu/lAgwVhzB1wqMMKjti7Zs7aM= Name: res/layout/recipient_filter_item.xml SHA1-Digest: VUgdDdrc1IRnokXxcJhoEPy786k= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DZ SHA1-Digest: rburB7+6PwMfXvm/PQReu/7J4HI= Name: res/drawable-xxxhdpi-v4/abc_ic_menu_share_mtrl_alpha.png SHA1-Digest: ViuGJMQKprUdITWoAs1n21Kd9ZE= Name: res/color-v23/abc_tint_seek_thumb.xml SHA1-Digest: eQQosilXm46wTNpgufTS2GXzzIM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FO SHA1-Digest: lFmxC97jAfdiHuRAhoMXDweAtg4= Name: res/layout-v21/notification_template_icon_group.xml SHA1-Digest: jmIGYrC7O88w727hgaDWE3YeDBg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KI SHA1-Digest: Opv4VtE9ZFUW9EsP1mVG0JY3CrU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KP SHA1-Digest: iV3PJXFR0FJouyPIiqtSDoXHgrA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN SHA1-Digest: cL6rmmBrzi+CEZDcN/l8+bEam6E= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FR SHA1-Digest: e2LNHa2URvmc1YweDi2e38DJU0w= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KM SHA1-Digest: Eiem7oRL+YcsaBOn9xrpq9U5SSI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FI SHA1-Digest: fv0HyXJMARYH1qwYRusPHTwtYk4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KR SHA1-Digest: 6IvYFcIYj16qqXkMArzWb8kkZ2o= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FM SHA1-Digest: 7B7I+1yvB1dYzahtRcLI86Fof9s= Name: res/drawable-hdpi-v4/ic_emoji_objects_activated_dark.png SHA1-Digest: nS1sUpH7GYkchkkNocVX+iqyFR4= Name: res/drawable-mdpi-v4/ic_emoji_emoticons_normal_light.png SHA1-Digest: FIA08pF7PcghqiplD6sdajW54LU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW SHA1-Digest: AIEBxYsyuRc/uH/3+VaDHxEcSmw= Name: res/drawable-mdpi-v4/abc_list_selector_disabled_holo_light.9.png SHA1-Digest: VAWAgM1S6jdrYNnzjAk62DbHpA8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FK SHA1-Digest: dZEGOpES37DEl5v8/N7TxzxOAoI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FJ SHA1-Digest: ryDmJR/JPQrikGoj8Ytl9g2x+LA= Name: res/drawable/play_to_pause_animation.xml SHA1-Digest: Hck4FSeE+adafq51j4Jnw1ibvc0= Name: res/drawable-xhdpi-v4/ic_lock_dark.png SHA1-Digest: EQBcZvHcmb9yjyVopDpgxuIjKZU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY SHA1-Digest: 9O7bp9+iM7RE9PuiEuHPf+MB3YI= Name: res/drawable-xxhdpi-v4/ic_emoji_places_activated_light.png SHA1-Digest: CxRau8xckOFqqA3yCXqbNRx7NIU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KZ SHA1-Digest: nDp0Y4L6Vqe72MYxEqXVR4E+Ntw= Name: res/anim/design_fab_out.xml SHA1-Digest: xUTzztkV6DmAqFXiLoefobMOg3g= Name: res/drawable/button_background_dark.xml SHA1-Digest: BAgcQtcIxovcnSFHiECiyN3xkug= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LA SHA1-Digest: KzfuzHUPn+zzADyNIhxn75hCr4U= Name: res/drawable/abc_ic_search_api_material.xml SHA1-Digest: JrtYziZNuxfNNt3RwCJLN3fo85I= Name: res/drawable-mdpi-v4/switch_thumb_disabled_holo_light.9.png SHA1-Digest: 6Q0egkPXcET6qWYJbaJnk1GKRsU= Name: res/drawable-xhdpi-v4/ic_emoji_recents_activated_light.png SHA1-Digest: HH8RJwDGr2F1osUMFkzG0XJd1Ho= Name: res/drawable-xhdpi-v4/ic_unarchive_white_36dp.png SHA1-Digest: oro9cJHOkSHpDwbZB77dpOcH+NQ= Name: res/drawable-hdpi-v4/ic_lock_dark.png SHA1-Digest: YqSj7swAiFl1VsnLvzNtj0RV09c= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB SHA1-Digest: Eurl/BYmIaOcP1V+gIVGQPsal6Y= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC SHA1-Digest: nZLWfW3qC4C94h4vl+/g6ETDHUw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LI SHA1-Digest: YZ3im7JIC/R4awZlELNGZMMvGEU= Name: res/drawable-xhdpi-v4/list_selector_background_selected.9.png SHA1-Digest: 36Ws5DFmoLt4ptxx59DL2RNDQ0M= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM SHA1-Digest: 5DbYBw9KSUeRPtXypIiWU5gNGGE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GT SHA1-Digest: fn64fjgcQ5sVtJmbb2rjh2spihk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JO SHA1-Digest: UuIka7azgqzAh93E2hveZozYwIo= Name: res/drawable-sw600dp-xhdpi-v13/ic_backspace_normal_dark.png SHA1-Digest: 7SPgS7EE9ZHgHjE3ix1RBWa7QtE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GU SHA1-Digest: l0+tohuWk8mOFg4gfLveLzyB39k= Name: res/drawable-v11/emoji_category_emoticons_light.xml SHA1-Digest: ztpE1SfFngkQrj8bJd/uhpuCPCc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GP SHA1-Digest: MFbM0hL6BN87q/jIzTAzagplw1M= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GR SHA1-Digest: /CpP0/xJHc8rMdKbqW/bAYdFXAo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GL SHA1-Digest: Zmd4AP1OecMCxgFTjFiUuT/fY1s= Name: res/drawable/emoji_category_nature_dark.xml SHA1-Digest: k2EMEfERm8Meff1aHg8jukX1/D0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GN SHA1-Digest: 27yzuurZHmVz28908rNoN8FZysE= Name: res/layout-v21/conversation_item_sent.xml SHA1-Digest: ARy+pYJCYQSmz4ArH0J71hGD4D8= Name: res/layout/three_keys_view_text.xml SHA1-Digest: /vFsF8aStrIAyx5vaBMMjUSWDjM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GM SHA1-Digest: lZeIZ3/GlVUgeQDOzRGjvdRL5uE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GH SHA1-Digest: pC7TxK7cLbkDXWLN3SvhshSeaP0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP SHA1-Digest: AcjGr5Vu7DqBuR4h/t3zS1KPoCA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GG SHA1-Digest: uFgP7K8xJZfG0WI8wkOIdJzJ0gQ= Name: res/drawable-mdpi-v4/ic_warning_light.png SHA1-Digest: GCuIPBi4gB/5D//gguMgx5SfkGk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GI SHA1-Digest: pgT+EIU+wJSv2fSR0sT2B1eeCMk= Name: res/xml/recipient_preferences.xml SHA1-Digest: FtaSs3vpt3E7JVFAYhd09cQnTeI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GD SHA1-Digest: J8aWXaCzoEO+LO6xYOtAoBWRuGg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GE SHA1-Digest: WlWC/G0LBBqv3SDDZowNROcA0c0= Name: res/drawable-xxhdpi-v4/ic_delete_white_24dp.png SHA1-Digest: 1t3ru1XcSrHEkdcKIJMDBi2Y16M= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GF SHA1-Digest: s57Ys+jho7LCROt1IjC6fOZw3Wo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GA SHA1-Digest: nJ0fu0m2kRxtezMTo7DnO1X+R/4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GB SHA1-Digest: UqcY0WaMyw2CNOe2zQ0OXzlvJVU= Name: res/layout-v17/notification_template_big_media.xml SHA1-Digest: lvVJtIudn2AjsaXqyC/jbBNEbpQ= Name: res/layout/icon_list_item.xml SHA1-Digest: Mg2ZNXzUdd6eoHO5PszPGKsuqBc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE SHA1-Digest: t59xuH+VnD5qQJFXkbw5nye2vMg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG SHA1-Digest: +XMw5Kg4Isg91WJDbWGZhI+SzZ8= Name: res/drawable-xxhdpi-v4/ic_keyboard_grey600_24dp.png SHA1-Digest: xDsUErqnrJ83jKjLNECBKE/N8Xs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH SHA1-Digest: vMip6YT7BGzR5RcCNDbOPWA884I= Name: res/drawable-xhdpi-v4/ic_video_dark.png SHA1-Digest: SMBnhM0NAFoIyJcGF5EaiIFegDE= Name: res/drawable-hdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png SHA1-Digest: N0JreKvhlyMPBSf34DQond465n0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN SHA1-Digest: YWOkBb7MBSAo6Mb0ODvge1HXRtE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IM SHA1-Digest: C/9uvSfqUCVALrUpDmyb+EX4M8A= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_HU SHA1-Digest: GQHycOXwq7rHdtNuIksA6qvcldI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL SHA1-Digest: aJCyzEuJHfXR3apcQT53aJ7Km8E= Name: res/drawable-xxxhdpi-v4/abc_ic_star_black_48dp.png SHA1-Digest: xXkT7UhBEFvSuU5J2I+D1bwj7zk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_HT SHA1-Digest: e+uBAKnhIw7UGI6dYyyOLuymK18= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_HR SHA1-Digest: 4BGgxCvaONoLwTaax71RnTXpPRg= Name: res/drawable-xhdpi-v4/ic_attach_grey600_24dp.png SHA1-Digest: TsHg4xRzFe1dIrHElbFlXftt1fw= Name: res/drawable-xxhdpi-v4/ic_archive_white_24dp.png SHA1-Digest: bE0E69/QNGuUs6osyjF5hnvGOnA= Name: res/drawable-xhdpi-v4/ic_emoji_flags_normal_dark.png SHA1-Digest: aeFtQ2/DII4N35QshPIQSc9uGR4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_HN SHA1-Digest: UZneRcJZOERJiVqI+JauulOEckM= Name: res/drawable-mdpi-v4/list_selected_holo_dark.9.png SHA1-Digest: t3gAnIT+AzQuQiC0J6HKptJhyA0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT SHA1-Digest: gdRZpVQXjDDZfo+vjC6OObobAD4= Name: res/drawable-xxhdpi-v4/ic_group_photo.png SHA1-Digest: e7pgHplWGNXbLF9rvwinkqy3jJ0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IS SHA1-Digest: +oko1XGukY+MrN2r53oOBKkNIqs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_HK SHA1-Digest: ar/P1+rQlrGBixew3JMIigqX068= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR SHA1-Digest: HSy63ScVyG/eLhq9CdBMpSFAPnE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IQ SHA1-Digest: FmlE0rUwvs4ZIo26IMs5IrY1xJ8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IO SHA1-Digest: FwB7DnBBMWPbXjxfbFWWgeZX6vM= Name: res/layout-v16/notification_template_custom_big.xml SHA1-Digest: eBiyAFGYLKee5KXeEPnVSqqCPNY= Name: res/drawable-xxhdpi-v4/ic_emoji_flags_normal_light.png SHA1-Digest: O5Auy59UiqkF7JkxK2Mrno1oY7o= Name: res/drawable-mdpi-v4/ic_info_outline_white_24dp.png SHA1-Digest: RI7Icbqo5kZduEWaogjMA6j57EM= Name: res/drawable-xhdpi-v4/abc_btn_radio_to_on_mtrl_000.png SHA1-Digest: pbP/bpdtNDmjPyIJWfLMJALvoXo= Name: res/drawable-mdpi-v4/ic_photo_camera_dark.png SHA1-Digest: nHm0P2OU8w4FasmKZOYNOBsNekk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE SHA1-Digest: AjRp8NlibDYVU+tALEUnPLEB7c4= Name: res/drawable-mdpi-v4/ic_emoji_nature_activated_light.png SHA1-Digest: 8R7AbylOpq6hTD2+86L3nOCaZkY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GY SHA1-Digest: KrbnGrX0xxCBVfk8nkFiKQj7dpI= Name: res/drawable-xxhdpi-v4/received_bubble.9.png SHA1-Digest: lRkGDA4EzxKSjWgS/YcYGg9439Q= Name: res/color/abc_btn_colored_borderless_text_material.xml SHA1-Digest: fzYoBGcDa2c2oyMPBeOaTO8kqbY= Name: res/layout-v11/custom_default_preference_dialog.xml SHA1-Digest: eSFfc9ed+WiY/Qww/nUHAE6U0mk= Name: res/drawable/last_seen_divider_text_background_dark.xml SHA1-Digest: XCTGK2lgiB+eOOFDixpc9pV4VkA= Name: res/drawable-xxhdpi-v4/ic_audio_light.png SHA1-Digest: 6ngM2rWmrljKjdIacOe0cu85VT8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GW SHA1-Digest: LmXE41jlHG+vphlvr+MghAWCi14= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HN SHA1-Digest: lTgIxZPXaeAMmKQ2gV+iNQ0EkKs= Name: res/drawable-xxhdpi-v4/ic_notifications_gray.png SHA1-Digest: DNUT/VyubypwNlFc5leH3zLEH4M= Name: res/drawable-mdpi-v4/switch_bg_holo_light.9.png SHA1-Digest: peyvmv7NaxWpuLuoG2od8vf2QRU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AC SHA1-Digest: 52T6/UD8x8+sq7OdOJMZWaoZ5NQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AD SHA1-Digest: pDefopEyaRG2+zHbWJ7TjZ6B2jY= Name: res/animator-v21/design_appbar_state_list_animator.xml SHA1-Digest: 3y9SSDOTiyFZI94yGO/38nsIk18= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR SHA1-Digest: ptZ04upnX9rGhmA9OzfEGCkC1rY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AE SHA1-Digest: mPsxFQKI8H5DZvsyLRaRP90LifY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AF SHA1-Digest: izS7xojRAryOGr0qA9Xz9dPoSso= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AG SHA1-Digest: 1DdZY1QOwT8qqZKnmFHNZ5llW04= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HT SHA1-Digest: 2V+6dCrRncydO0uTDSJlOlNCvdw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HU SHA1-Digest: zND66d2un/Wo9yluhuPAn91EfNg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AI SHA1-Digest: gvvHtuY2VuWkF9/T9NG422eFswk= Name: res/drawable-hdpi-v4/ic_forum_grey_32dp.png SHA1-Digest: cSlg8JMxk3TIeSIUC0RyfeRk08o= Name: res/drawable-hdpi-v4/ic_emoji_recents_normal_dark.png SHA1-Digest: X3QsM9GuCqkHy4N6jxYGe+KtLFo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AL SHA1-Digest: yPKEYcRdYIA9EFpYeQa/oiadZG0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AM SHA1-Digest: rQt2UeEZtLFksuxwBcf23zM7vBw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK SHA1-Digest: r3dq0KcrkP0jaZdnsmVsq75GOZs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AO SHA1-Digest: azCK9NpdSOcxG0hg/MVnVsHj8nE= Name: res/drawable-xxhdpi-v4/abc_ic_star_black_16dp.png SHA1-Digest: PyXLVQgunmY+Bf76HwBrp/pQPD8= Name: res/anim/design_snackbar_in.xml SHA1-Digest: 6+HyUPWWyECHhvkn7FfU/SL24MA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ID SHA1-Digest: rS5k3wMYUVWZTCho3c6br6PqCaI= Name: res/drawable-xxxhdpi-v4/ic_volume_off_grey600_18dp.png SHA1-Digest: SKYyfO8DzgP6x7iMbCnKTxBrl2g= Name: res/drawable-xhdpi-v4/list_selected_holo_dark.9.png SHA1-Digest: ddkFXkinX/KLQzbgj+uBDgSBNFU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IE SHA1-Digest: 4+jmZi1toewgU/CaT83WnN0Dm58= Name: res/drawable-mdpi-v4/ic_emoji_objects_normal_light.png SHA1-Digest: BqeIFAcFwZJkqb5kR2t0UfKoxR4= Name: res/drawable-mdpi-v4/ic_delete_white_24dp.png SHA1-Digest: ML68wg2G9p1NW9VL8r3BEjQWKoE= Name: res/drawable/abc_list_selector_holo_dark.xml SHA1-Digest: sfvAyXGl6drAr6es0R11c9d9BWE= Name: res/drawable-xxhdpi-v4/ic_emoji_flags_normal_dark.png SHA1-Digest: sJlblRDOGWvtx1he8SCgTQ6+d5Q= Name: res/layout/recipient_preference_activity.xml SHA1-Digest: UqQ9PQpDhUO/CKxhxMTz4h5O4Xg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BD SHA1-Digest: zCrZncjiYQ+SSHCjmHeLbiCjNzM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BE SHA1-Digest: jYfjZytM8bUw79AXzIi1/hxwQjo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GP SHA1-Digest: 6rjESUS5+feJhBlx8+ju7t710VQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BB SHA1-Digest: 9kxNiqmoKhvMF/sqAR1UXHsMGiA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GM SHA1-Digest: Rc7/O3kbe1uK7g7HZ3AeWGMNsXw= Name: res/drawable-hdpi-v4/ic_forum_black_32dp.png SHA1-Digest: hJWxyhNX+BfxUqxI1hZrgiMJOWA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GN SHA1-Digest: HhbjDJ1+NjuON8mgNRzGKWoVLCo= Name: res/drawable-xxhdpi-v4/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: cVnySG63cChr86Xl5aTin9ET16o= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BH SHA1-Digest: xl02B3ICW6yoVpNy664JuKwusSc= Name: res/drawable-xxhdpi-v4/ic_volume_up_dark.png SHA1-Digest: wrA8hRzex8CVScwGSQchX8ddrpU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BI SHA1-Digest: PMcwTj7rmmsZk55PL1wHhWz5pGo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GT SHA1-Digest: M7KRT6S140vIUkuZMzMyRuEhypo= Name: res/drawable-xxhdpi-v4/ic_emoji_symbols_normal_dark.png SHA1-Digest: MCF9dMXO7s/Q5Mn4VzRiNbn7pWM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GQ SHA1-Digest: agM36GEm6lZQI9DuDoU02RhuH+4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BF SHA1-Digest: t/MR3+1upQKBSIeDoMlBbajuM7Y= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BG SHA1-Digest: 59p12EeJr8dx2MCE4fMPuC31iSI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GR SHA1-Digest: 4zFbzS+vY1NLsUeqI9GblXxAeH0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG SHA1-Digest: jr3bdyX8sEm71B9kN/nyKl+GmpQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BL SHA1-Digest: A926WshRsug3ni7OrI1AwVEh31o= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GH SHA1-Digest: 72MPX/1hxgEFifRHhVlPDMNeO1Q= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BM SHA1-Digest: i1dy4FQOimGiGsNWwZpE8cq7nbY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GE SHA1-Digest: yYSoBGeSgU8l3jcRnhv5mkjHpTg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BJ SHA1-Digest: x3YZGtLHr+Q6W+lUy9epyAhLy2c= Name: res/drawable-hdpi-v4/ic_emoji_objects_normal_dark.png SHA1-Digest: RZ6mrsoTtAKh3cAL6JKF72jBesw= Name: res/layout/share_activity.xml SHA1-Digest: Ita0eNBhDG/Cj6Og4F9b8xmJraQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF SHA1-Digest: NmIGjkQELlpQbKp1XGceoCKGBkU= Name: res/drawable-mdpi-v4/ic_volume_up_light.png SHA1-Digest: u6HXSVUzjgY0xbLFEqSUH+sJq/Y= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GL SHA1-Digest: NdYWDpksScmfPQzQkfdwB4nrqv4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BQ SHA1-Digest: LLye+k6pHTjiEpbOSR48QRJ14Ss= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BN SHA1-Digest: 4KVJcIVvOyM5pNkHRP/LW0+PRcc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GI SHA1-Digest: MyW+90JQaFDpR48bmHsW8BemAn8= Name: res/anim/slide_to_right.xml SHA1-Digest: 0bv28EjFYG0W9O86/FUEyVGaIDc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BO SHA1-Digest: buuWxRiANcZzz39kZI5wZJ/UeG8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AT SHA1-Digest: ADPcGHEooR0B5HgIxPe3yh4wRJs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AS SHA1-Digest: RwNKTKAqOrr0n/V1DJv6xcBrM9s= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AR SHA1-Digest: nYPTqOieOO6SHDfne5T+mLjtYgs= Name: ws/com/google/android/mms/package.html SHA1-Digest: hE75Rt2Cmrv60CqpfVI+PwrlrKA= Name: res/drawable/conversation_item_header_background.xml SHA1-Digest: PkBtM4IfjAPJkWt/w+fC0XhKS5c= Name: res/drawable-xhdpi-v4/lockscreen_watermark_light.png SHA1-Digest: 6lUHGvK7lN2atKOLCJlnvLhmeqI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AX SHA1-Digest: sXwKZXkjx/U8gixI7RH6L+86n8s= Name: res/layout-v11/conversation_list_fragment.xml SHA1-Digest: 3GSSdYX5sM6ipBwkUrO68YEi77E= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AW SHA1-Digest: o0ePsLjCS4rgHmKYRB5YuHcWCXk= Name: res/drawable-xxhdpi-v4/ic_send_secure_white_24dp.png SHA1-Digest: pUlJWnz3F+tFSFZ6Q2Z3hDQecVs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AU SHA1-Digest: IqierGXHtECqe4GIQCtK0znopWg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GW SHA1-Digest: aePAn8Cab2WuQ89czJC9MY2KHyc= Name: res/color-v11/abc_background_cache_hint_selector_material_light. xml SHA1-Digest: vGI9qWZK86UPRnOAjUVBBgxhqoM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AZ SHA1-Digest: LhSf1T7IvjcCena3HN71hUfZ7yE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU SHA1-Digest: fSn6p96r0c0yB7X363RA5pvZC3M= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BA SHA1-Digest: 0fwq5LAnY+VauQY0TOR7t3qaN/c= Name: res/drawable/emoji_category_places_dark.xml SHA1-Digest: mKSryOKdsURVrjhQix+yeiEGwKc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GY SHA1-Digest: 72s/mUFzGGxqpbqHVXbA2oS+5Hs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CG SHA1-Digest: yYWxLrw40zQlfaBccZ+ywrWIgdo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CH SHA1-Digest: t42SOokbTnreJMp3blXZneIMfmY= Name: res/drawable-ldrtl-v17/actionbar_icon.xml SHA1-Digest: Yy7GfAlLoeD86LGaO6/AyLJjuC4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR SHA1-Digest: xi2IkCwD2C1YhJ7m/p5vytuaoUk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CI SHA1-Digest: FtkL1qR+puYf2ZP/hN13hjxmFZo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CC SHA1-Digest: pj2Re+j+ZHBZ97k1cXh9Vs85LGo= Name: res/drawable-hdpi-v4/ic_done_all_white_18dp.png SHA1-Digest: gB/Fn8OghOrqWdvk6bIo+WURnZA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CD SHA1-Digest: QP2A23S3XYWiInoSyl7indNTbzo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FM SHA1-Digest: U0rmgar+PoH71nmCwk4VA/S7SEU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FO SHA1-Digest: pYmvqgGcSKzcBQdvp1Xx86OliuY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CF SHA1-Digest: 28aUWlCa/0ftFre4yRHCEFjFbZU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CO SHA1-Digest: hc+XpUgEPSNA9D07Jqdb+JD29yc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FI SHA1-Digest: R2/EqbCHeYQhz/eizc59jyVKbxc= Name: res/drawable-mdpi-v4/notification_bg_normal_pressed.9.png SHA1-Digest: yi6e8XUhhsJcenYvin1Ro8e73nY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FJ SHA1-Digest: Yxuw/MtmKGkOnVTtZA1h3gs2h5M= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CR SHA1-Digest: ithTLwS5D/vDgZ/mT2e27D9Dsgo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FK SHA1-Digest: M9Z4aTMhfb1IwhDFpVau0hECb34= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CK SHA1-Digest: IAk623SiQPlkGmcaSGA7OtajaU0= Name: res/drawable-xhdpi-v4/ic_scroll_down.png SHA1-Digest: MwQAn/tjGBzRGtJlcWC6y7R6y4Q= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CL SHA1-Digest: +NX7TGNDK+2iD7j1enQTP5cfoXs= Name: res/drawable-xhdpi-v4/sms_selection_icon.png SHA1-Digest: K1XGwBV46Pk4HZDPGOhMZsT5MNY= Name: res/drawable-mdpi-v4/abc_textfield_activated_mtrl_alpha.9.png SHA1-Digest: LHgpBq22Tp/Uz7G6kTktjBB334g= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CM SHA1-Digest: pQB/+s6po8oIhPJ3EBEqyQpx8+U= Name: res/drawable-xhdpi-v4/abc_text_select_handle_middle_mtrl_light.p ng SHA1-Digest: nom5EFpS7blCwactlhvHBLuEfCU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CN SHA1-Digest: K1wvu3GgibjX4toiXdhiWdIP5sc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BW SHA1-Digest: Dd6O6q0ANmaHd0vscJWabMQxAy0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB SHA1-Digest: vYNOxn9CfHShvNze6bu+k9dv8uQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GA SHA1-Digest: ELfUOOdv4uMFeDG6GJcOppNs7u0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BY SHA1-Digest: ljsu1T3XB76a/BeFRln0ojU3Dr4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD SHA1-Digest: G2JfNFUSdaZa/og9TbXIQDQrlpc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BS SHA1-Digest: a2XmLLonApLk8nYjUY8V73lZJZw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BR SHA1-Digest: al9zf3TVa7Ve99aI/am1USk9y2M= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BT SHA1-Digest: n4yOb54Mv3+EnSUxSoS0XarSX5k= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CA SHA1-Digest: n3iG5qLZan30la135XNHTs380FI= Name: res/drawable-xxxhdpi-v4/abc_ic_star_half_black_48dp.png SHA1-Digest: CqdgtKKg5LzgT+Utih7LH0FOba8= Name: res/layout/empty_time_zone_item.xml SHA1-Digest: ieGUBRMmXnFF9ndtJEe4UUoe4dY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BZ SHA1-Digest: xWKU8QZvkdDD2fwnrIgt1achzX8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DJ SHA1-Digest: JViet+S6qPRSZaSvu8NGcfanUUQ= Name: res/layout/country_selection.xml SHA1-Digest: xAbtwp5RvpUqcs1VfEnelzP82hA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ER SHA1-Digest: GjrOcKCpIAPs5DGlQHH39quIYKo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DK SHA1-Digest: qk0XlsJkP9Reexq2kr3yQ7rJ+84= Name: res/layout/dots_text_view.xml SHA1-Digest: r2xnC1LIQwvev9hzjc4fbI+A2cM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DE SHA1-Digest: NjykeGKqIE1DFOCrC/p1XUkd1Zo= Name: res/drawable-xhdpi-v4/ic_emoji_emoticons_normal_dark.png SHA1-Digest: qmPky+oRAyf3lQyuBAi7fH3pkFM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EG SHA1-Digest: JHKFehFvMn1tvW+70RNjxCUt35U= Name: res/drawable-hdpi-v11/icon_notification.png SHA1-Digest: mwvJ5lhMelDcqZ5HSgxZXXrADjw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH SHA1-Digest: 6rzZPeyjZIslePbk6sXAv8roYjI= Name: res/drawable-sw600dp-mdpi-v13/ic_backspace_normal_light.png SHA1-Digest: Z4J6EVi+XrPCSrsIZUYQVNimpnI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE SHA1-Digest: FZyGVbsU6rDYHNUfk+UXWWsNJl8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DO SHA1-Digest: 1o54z9+7TYRXR+cc7QhHiUVUSjE= Name: res/drawable-hdpi-v4/design_ic_visibility_off.png SHA1-Digest: R+V7ZmC50puvgW1vyi72e7cIQ4Q= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EC SHA1-Digest: dVQFvjTDO4hpwzIVVVen4r6gwoM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DM SHA1-Digest: ND0TIhkvew5K4s6vA/eNXmpMFVo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CZ SHA1-Digest: WGdEz1K7JLL9E8MBJrYTbUjtgd0= Name: res/drawable-mdpi-v4/ic_image_light.png SHA1-Digest: dph6JIFScemUkyC8V4bp2vzFomQ= Name: res/drawable-mdpi-v4/received_bubble.9.png SHA1-Digest: x4/fSsrwLvIKbFtRM1k+uNrk6VU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CY SHA1-Digest: KMSE4subU7Gs/aIA2QCTYQ3/jf0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CX SHA1-Digest: FHoxe1QKkee6R/U6aVKIg4Itnls= Name: res/layout/contact_selection_list_fragment.xml SHA1-Digest: XKk68FA4pyOy5PSlDJZZ/PeQkPM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CW SHA1-Digest: FdIfwTyK28JACeQUquJwha5JHhk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CV SHA1-Digest: Ni7NplLdDN+fQerk/xcl9j8PB/4= Name: res/layout-v11/notification_template_big_media_narrow.xml SHA1-Digest: ZiBVLtWcb4GpY4ETxsBuSCIlULc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CU SHA1-Digest: 6mEArUwmcpF/h1AR8tPK90q63F4= Name: assets/fonts/Roboto-Bold.ttf SHA1-Digest: j1hyrMHyDgMGFiAB3rrPXhTUbow= Name: res/drawable/circle_touch_highlight_background.xml SHA1-Digest: o9QlrRMiE0mC1+dmj4+fg7vpBW8= Name: res/drawable-xhdpi-v4/abc_list_divider_mtrl_alpha.9.png SHA1-Digest: riXoVDKowB8vTruZhoiXpL8vgBM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ET SHA1-Digest: n7OHKx+6jwATc3CLZiztk3USmuU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ES SHA1-Digest: CRNNSNA+d0seJkQFZ7sBVk4CWnk= Name: res/drawable-mdpi-v4/ic_mood_white_24dp.png SHA1-Digest: aAawECUowovSRqameg6tsxx6O/8= Name: res/drawable-xhdpi-v4/lockscreen_watermark_dark.png SHA1-Digest: 0c85wNc0nV5Zztf7GsYMc7SKJTI= Name: res/drawable-mdpi-v4/lockscreen_watermark_dark.png SHA1-Digest: M0xsGNyKiuHwaBCCuPvJDCgOWgA= Name: res/drawable-hdpi-v4/abc_text_select_handle_middle_mtrl_dark.png SHA1-Digest: GK+YDX+4M+S5s+noA2Vsy3W+aJs= Name: res/drawable-xhdpi-v4/abc_tab_indicator_mtrl_alpha.9.png SHA1-Digest: kXL/oF0Wug/Gk2tR7sFuSTOQNZU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DZ SHA1-Digest: wYmZxGBYrzzJuQlTTW/YGH2yKHw= Name: res/drawable-hdpi-v4/ic_volume_off_white_18dp.png SHA1-Digest: RQwdjb8jY+52wCaopLvBGc7pRJo= Name: res/layout/receive_key_dialog.xml SHA1-Digest: +as8PetwnBBaeJCc1pbfKl8dR3E= Name: res/drawable-xhdpi-v4/ic_emoji_flags_normal_light.png SHA1-Digest: lnap7s6+mfZWSa/l952QIfrjfU4= Name: res/drawable-xhdpi-v4/check_dark.png SHA1-Digest: hnSfgvYA13U6JO5FBxxS7gf5LTI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE SHA1-Digest: i90vdo+kDq0/AgoF2/hKBKmpLwk= Name: META-INF/services/com.fasterxml.jackson.core.JsonFactory SHA1-Digest: Ba5fEoE3Fm8wW/CHD7Agsn0j4D0= Name: res/drawable-xxhdpi-v4/divet_lower_right_light.png SHA1-Digest: t2Qll0Avs8v4McfCcni+SomfuoQ= Name: res/drawable-sw600dp-mdpi-v13/ic_backspace_disabled_light.png SHA1-Digest: wHYchHnEyH9uYlSfdtV8q6up33E= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM SHA1-Digest: i8oFWIydqBHus8lvoMmndRp9CZM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DK SHA1-Digest: hDPjOmt/2gjKn+joDBSniMIGBBo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DJ SHA1-Digest: pxCV0EJL2IKyl2pmfUh+WiMdmnQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO SHA1-Digest: Xp68rW1mi+n+TgXTP3PDatqmb60= Name: res/drawable-hdpi-v4/lockscreen_watermark_dark.png SHA1-Digest: jRk++D87ZgQBkJ2HLWlABxkEJJQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR SHA1-Digest: 5vyh1wsamKDoo1uoxxc420QtAmE= Name: res/layout/abc_screen_simple_overlay_action_mode.xml SHA1-Digest: 5in0sNUsZqh4AJN6Pw4SP4w5RCg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CU SHA1-Digest: OG3DIiqNwucHlpwwzHDBiYWx/m0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CV SHA1-Digest: pynPRo7ET2L007kIDboVoR72fIY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CW SHA1-Digest: 9ZCdntZll9KvA+/BzKc4qolDvXg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CX SHA1-Digest: zP0i8LRrkTXlWUtKqoGCqlhN27I= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CY SHA1-Digest: BcpGJtPeqZZv7HMotN7x9N+QJLs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CZ SHA1-Digest: +2yorg5Wp5S1MTPuH29YMiG2oYA= Name: res/drawable-xxhdpi-v4/ic_arrow_forward_light.png SHA1-Digest: oGaS5N6FElUZmWHK0FVqsp/IO5I= Name: res/drawable-xhdpi-v4/ic_launch_white_24dp.png SHA1-Digest: 9qBE6yOKZcH/Q+7qpXV1+USE2CU= Name: res/layout-v17/select_dialog_multichoice_material.xml SHA1-Digest: yEUBZ0g/mR7cWkH9CqzEQd1oYGk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA SHA1-Digest: sWZkDflRTGQB8qYSv4kDYp553Cw= Name: res/menu/text_secure_normal.xml SHA1-Digest: HnrmryD9ml1+2+Ri12H8J336Ep0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CD SHA1-Digest: gZ545vQf9tZD5xNi5Wx+IoKYnts= Name: res/drawable-mdpi-v4/ic_push_black.png SHA1-Digest: nXSF8HKfR3Vg0Fy5MbDc6+qfozU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CC SHA1-Digest: uUaHWJqH3ky16k/qae+8AMBLX/E= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CF SHA1-Digest: yI20Wiel7QOU9Fbm6vOVsrEv/dM= Name: res/drawable-xhdpi-v4/ic_push_black.png SHA1-Digest: yLyv9x4uDYDvqBSzCJUjwI2tFwk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CH SHA1-Digest: 4QhdJjXQLyQ8DECkDwpdq5NJDZA= Name: res/drawable-mdpi-v4/abc_ic_star_black_36dp.png SHA1-Digest: 1f+9ywNx/F9X01VZ3lJ0+rCEP+w= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CG SHA1-Digest: u+u2LhZzLvwcBRKyHfo1LRRsgik= Name: res/drawable-xhdpi-v4/ic_circle_fill_white_48dp.png SHA1-Digest: hNQXoSG2a3z0X2cdvCVa6CCid0o= Name: res/drawable-hdpi-v4/ic_send_sms_secure.png SHA1-Digest: iUTEcbh57hLDwBq24T/T3UkP6lM= Name: res/drawable-hdpi-v4/abc_ic_menu_share_mtrl_alpha.png SHA1-Digest: bUAKKsOuQiIKVhmzcDr9M6636LE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CI SHA1-Digest: gQEKmOIshxNtdeACTSv8jGlIV4Y= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL SHA1-Digest: tRpUktZVU/SNjBVEf6SfsRwMdzU= Name: res/layout/delivery_status_view.xml SHA1-Digest: bexcCxKtBslE3ln9kGHk8H9ZDZg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CK SHA1-Digest: RXrpeuEmFtPS5IfZxtB/lmJcY9I= Name: res/layout/abc_list_menu_item_checkbox.xml SHA1-Digest: 6BtxtrSj5417sUBtS2ccXrol3a8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN SHA1-Digest: +6d+rS/lWclQcQjX9ZjIN4LVruU= Name: res/drawable-xxxhdpi-v11/icon_notification.png SHA1-Digest: iaRai5qybbT8Fq3yigwMnAR2B90= Name: res/drawable-xxhdpi-v4/ic_lock_black_18dp.png SHA1-Digest: cwRPAQdnIT94PjrUbHtEv1uHPq0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CM SHA1-Digest: 0DUTWcWAP6rp+oEh9TmRMa54tuc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO SHA1-Digest: W0Zq050pRN7pfN7BEbCABvfgtvs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW SHA1-Digest: Qr5RYO3gwcgGwRC8QnzB5hE8nqk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BT SHA1-Digest: A+rn7UjM4OB2drvaZMjvhZe0iyY= Name: res/drawable-xxhdpi-v4/ic_emoji_symbols_activated_dark.png SHA1-Digest: o1JodDcZ+/2TneCvfAg7xbN2dao= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR SHA1-Digest: 4KciA1/jpo+Us6frPM2TDyYgapU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS SHA1-Digest: LoUK74c8inyEoN7gi28JdyFDr6c= Name: res/drawable-hdpi-v4/ic_unarchive_white_24dp.png SHA1-Digest: kUDb0vw7IlUei5/mx1ma9Bxn27Q= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BQ SHA1-Digest: eNnUu+NOur+4ONfnW6r6wNhusQk= Name: res/drawable-xhdpi-v4/ic_clear_search_holo_light.png SHA1-Digest: 35PHZggi1WM89Ol/GmUHZD8kVcc= Name: res/drawable-ldrtl-mdpi-v17/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: 0rrYNtqAe+ZiS5xOdK1BRYb2P1Y= Name: resources.arsc SHA1-Digest: FGxuj5EoYTsdNQSzBhNVBejvmE0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BZ SHA1-Digest: irkyQd1csI6B8RqbC6gHjMbvdaA= Name: res/drawable-xxhdpi-v4/textfield_disabled_focused_holo_light.9.p ng SHA1-Digest: bpNO5KEKc7d4ScXs/viJJsIhwgw= Name: res/drawable-hdpi-v4/ic_forward_white_24dp.png SHA1-Digest: aRxUkfDbNUGrZan+V8kVCzW8mj0= Name: res/drawable-mdpi-v4/ic_lock_black_18dp.png SHA1-Digest: 2Io9MNnOrhJgjFuMDd5JepnF+6M= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BY SHA1-Digest: ctFRXqrm2CU6J4vmMKXKTBgUW3Q= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BG SHA1-Digest: VSinasjH7YMZucy8zl/W4APmIvs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF SHA1-Digest: WVduyV1nMc6tHyitox3c2YOd300= Name: res/drawable-xhdpi-v4/list_selector_disabled_holo_light.9.png SHA1-Digest: GN6V3GwpXHWWT1+XcPJFYRdM3lM= Name: res/drawable-mdpi-v4/check_dark.png SHA1-Digest: msEel7Kkn0/+XEw1alP/dbAfJBc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BE SHA1-Digest: Rt80YoKYWhYg8qYrkA+4cZa4fEw= Name: res/drawable-v12/recycler_view_fast_scroller_bubble.xml SHA1-Digest: NEQxqwQjygZugYFJNUU8ybLfvxQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BD SHA1-Digest: SlQkPaNnY1fkS5JC6/OZxOsMfeg= Name: res/drawable-xxhdpi-v4/abc_ic_menu_share_mtrl_alpha.png SHA1-Digest: QmTUhZnsFXq7hkzsW4is5m3JyPY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB SHA1-Digest: XtU/YyywY3n91uCeYDD8/Uvq6go= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BA SHA1-Digest: hKU9mWp0M4mY9m9+LIEz+zlgd90= Name: res/drawable-xhdpi-v4/ic_emoji_symbols_activated_light.png SHA1-Digest: c/HB22lBNN4LYepm5i2iEghdj5M= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BO SHA1-Digest: I88GLx6L/DOmQYVvrm4k3VzOml0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BN SHA1-Digest: wUHRTCnaCDLgleWQ473n569Ghcg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM SHA1-Digest: DdSVOQd9u2r8J0b5EsioY+pfGok= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BL SHA1-Digest: GJur2TVqfbwpfjwtOe1+nIgw5nU= Name: res/drawable-mdpi-v4/ic_mood_grey600_24dp.png SHA1-Digest: 7F78uZJiQgg86rqIU3bYHBWKv0A= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ SHA1-Digest: RYe85vl8w2mFpnQApeEqOzBs/n8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BI SHA1-Digest: iZS88pkOBOYAqBOWNk7XEsywMoM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BH SHA1-Digest: rrsHM9AVXnrY1FuX6p/e038RG74= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS SHA1-Digest: dZf+gKLL2HEfDDJtH2ICK+9ous4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT SHA1-Digest: UKJvKRYrZZyqCUmMzKu8cEyKKtg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU SHA1-Digest: ge/jX/b43m/JPiPEQmWZ4RBogfY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AO SHA1-Digest: D0Ha1bJNuWQpKfn8SDYzyhOxgbA= Name: res/drawable-xxhdpi-v4/ic_photo_camera_dark.png SHA1-Digest: YdUPwpYPhTRR7oaMVGCCBmeSgXI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR SHA1-Digest: yXLuaTHYydSh3300TSK9FkGDpnM= Name: res/layout-v17/timezonepickerview.xml SHA1-Digest: +YWjxNfx1LOtArG6NGneDyYXRiM= Name: res/drawable-hdpi-v4/ic_scroll_down.png SHA1-Digest: StqE1YltKYi7ZGi6Cq6zNHhqfmQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AW SHA1-Digest: pbs4IuJBvYxSwRB+BbHiaY3hyUM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AX SHA1-Digest: IMFkSP65C+E3ZpRHve2W8GaMj+s= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AZ SHA1-Digest: s39zUHcenjbKrpltkUa46B3mS2c= Name: res/layout-v16/conversation_item_pending.xml SHA1-Digest: y3mA0Gy6gk7Sw6LtqUBSzs3HP68= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AD SHA1-Digest: RlMBrl7zBtonq3pZ0inesEZ2jV8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AC SHA1-Digest: wzXH46Hy7sWC7b1cAVQTFfs93wE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AF SHA1-Digest: YEPpzFP0XN64qbp1OHkRsOhv9Vc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AE SHA1-Digest: IvmkLYAi5ks8DZw9HSTw0t+eZfQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AL SHA1-Digest: oJGHicPYBCz//Bm8oPcl08BUyt0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AM SHA1-Digest: kx0iGCYKQ+DZtjzKJ2hTNrMtRcI= Name: res/drawable-mdpi-v4/ic_block_grey600_18dp.png SHA1-Digest: xSjan0vZ29yMU3/RPBAuz4XeW44= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG SHA1-Digest: lV+64gNnL0BzEI7tOf+vSwmk80g= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI SHA1-Digest: 0cHZnnuP8/HC5DR0/3dNseNewyA= Name: res/drawable-hdpi-v4/ic_clear_white_24dp.png SHA1-Digest: e5gKy+pyNuu/hqM/R9ev9pw3VPM= Name: res/drawable-xhdpi-v4/ic_account_box_dark.png SHA1-Digest: DJEXivhO+8en8JB4z4/0/+Hn4d0= Name: res/drawable-xxhdpi-v4/ic_download_circle_fill_white_48dp.png SHA1-Digest: UAXpmhPTtc8E0ctoCpM7H7pZet0= Name: res/drawable-mdpi-v4/ic_lock_dark.png SHA1-Digest: QOVZAs0XsZPL6eJ/iYVWmqjyc7w= Name: res/drawable/abc_seekbar_track_material.xml SHA1-Digest: DOBvDIvN1gw9U5RRVtBGkfeW8rY= Name: res/drawable-mdpi-v4/ic_call_split_white_24dp.png SHA1-Digest: tZgaQC9PgwZKGo258RR9eao33J4= Name: res/drawable-mdpi-v4/ic_emoji_places_activated_light.png SHA1-Digest: 75owbEhkOq9i8feK35kLglQs1fo= Name: res/layout/abc_list_menu_item_radio.xml SHA1-Digest: CYF8DGDu/tGrm7bhmsGCFVCBKJ4= Name: res/drawable-mdpi-v4/ic_emoji_places_activated_dark.png SHA1-Digest: dfMxSRGieu5e9RyYKQCg3PsGaj4= Name: res/drawable-xhdpi-v4/ic_call_split_white_24dp.png SHA1-Digest: 5vPMyWqAWYhj6q9d6gkjzmESbLg= Name: res/drawable-xhdpi-v4/ic_emoji_people_normal_dark.png SHA1-Digest: uOkkVrMmBZqLdrAA1gP9sKNwVPM= Name: res/drawable-mdpi-v4/abc_ic_menu_share_mtrl_alpha.png SHA1-Digest: a7qUZSr00ZcAUmE7JWdYo2goDxg= Name: res/layout-sw600dp-v13/three_keys_view.xml SHA1-Digest: 9i+QtBZj1xjUP0dJm/2s08Fao3M= Name: res/drawable/abc_list_selector_holo_light.xml SHA1-Digest: 97+5PTkiP0Ok/P9371JlRcH0xnQ= Name: res/drawable-xxhdpi-v4/lockscreen_watermark_light.png SHA1-Digest: JLCC2x8L/5GAbnfY3JOlgzQvBfU= Name: res/drawable-ldrtl-xxxhdpi-v17/ic_send_white_24dp.png SHA1-Digest: eWeA9e16JIKEQxDvXf/++bhBMOI= Name: res/drawable-hdpi-v4/ic_account_box_dark.png SHA1-Digest: E1V2KrSJR96wVzauXfHJa3ftZSY= Name: res/drawable-mdpi-v4/ic_file_download_white_36dp.png SHA1-Digest: aFCq90YUgXcwZXHc8ic8yBHyKtU= Name: res/drawable-xxhdpi-v4/ic_push_registration_reminder.png SHA1-Digest: LBljpyLEbwvk7NjQH/0wvwOpb0I= Name: res/drawable-mdpi-v4/ic_menu_add_field_holo_light.png SHA1-Digest: HT9HQGybsTJXMjvnUua17xpTeCg= Name: res/layout-v17/custom_default_preference_dialog.xml SHA1-Digest: iGxN2JBtz3p68bBASElzuLFMZzU= Name: res/layout/contact_selection_list_item.xml SHA1-Digest: 6G+nvHsi85Vs0w1r8AsIQU1BIaQ= Name: res/drawable-xhdpi-v4/ic_send_secure_white_24dp.png SHA1-Digest: /KQ/orkUQLjKl5kighqumDfycAU= Name: res/drawable-xhdpi-v4/abc_list_selector_disabled_holo_dark.9.png SHA1-Digest: Iz14YLSRp9C85A2InSd7OO4Ga6U= Name: res/layout/three_keys_view_right_drawable.xml SHA1-Digest: OARIR3OFTnY6eQc0mHjh7x/URhU= Name: res/drawable-xxhdpi-v4/textfield_default_holo_light.9.png SHA1-Digest: DKeaMClqVsDdOOwdcsmTzm049Zg= Name: res/drawable/abc_btn_borderless_material.xml SHA1-Digest: 9+UIx5LzMU67HsEZH0vBreWiJPE= Name: res/drawable-xxhdpi-v4/abc_textfield_search_default_mtrl_alpha.9 .png SHA1-Digest: shUg8eUw5YmR+wQVpcO99B+3lpc= Name: res/menu/conversation_popup.xml SHA1-Digest: DEg7Q3NS8JGA0429vJWm0Mvpr+g= Name: res/drawable/abc_text_cursor_material.xml SHA1-Digest: j7vrPa0Diwit3eZnv21AEhEOiLU= Name: res/drawable-hdpi-v4/abc_ic_star_black_36dp.png SHA1-Digest: gD9pNd1rfZaHg/T9sIhWnrNT9Ks= Name: res/drawable-mdpi-v4/abc_popup_background_mtrl_mult.9.png SHA1-Digest: osQ7eeMeQ/k1V+sk6cW3zQoE1tE= Name: res/drawable-xxxhdpi-v4/ic_volume_off_white_18dp.png SHA1-Digest: z7yFMqSQsmhS8cFnlwVT5ntI2Ts= Name: res/drawable-xxhdpi-v4/ic_check_white_24dp.png SHA1-Digest: 8wFL0VlS5dZarinEXmH01EFZc5Y= Name: res/drawable-hdpi-v4/ic_message_gray.png SHA1-Digest: cW4C+vLes/7/iok4hyO3+Cbv2uo= Name: res/drawable-xxhdpi-v4/ic_content_copy_white_24dp.png SHA1-Digest: RjxpVGv8KhOgXXPZY/AcHxRCqQc= Name: res/drawable-xxhdpi-v4/ic_recurrence_bubble_outline.png SHA1-Digest: QUB4BQiNCq2ODiEHdyGUrmFbJ4k= Name: res/drawable-xxhdpi-v4/splash_padlock.png SHA1-Digest: cINCM2OQ7qKGOXWHFk9Biphn2Fo= Name: res/drawable-mdpi-v4/ic_group_photo.png SHA1-Digest: UstH5ETddEM9nTpUWBD3dntx970= Name: res/drawable/conversation_list_item_read_background_dark.xml SHA1-Digest: QVhTb1JvTgh0OuL4XwXcmoYgAOg= Name: res/drawable-xhdpi-v4/abc_list_focused_holo.9.png SHA1-Digest: Odk0wSbJp0hyQ3RZGhgf+2IXqBU= Name: res/drawable/recycler_view_fast_scroller_bubble.xml SHA1-Digest: Ya8tiZ7KeS8UUktQeNFWslmEDhk= Name: res/drawable-hdpi-v4/ic_emoji_objects_activated_light.png SHA1-Digest: tGhsnYDjKzNZvRHlnY/9Rp8a3DI= Name: res/drawable-xxxhdpi-v4/ic_menu_lock_dark.png SHA1-Digest: +0uXktLB/5wU6t3bQAp0ocoiIwc= Name: res/drawable-hdpi-v4/ic_emoji_symbols_activated_light.png SHA1-Digest: LORgzcXqAUKgwulV9Pb7b2houvk= Name: res/drawable-mdpi-v4/abc_list_pressed_holo_dark.9.png SHA1-Digest: o79LWrpVg8mMdhT8PFdC/uVHnB4= Name: res/layout/design_layout_snackbar_include.xml SHA1-Digest: wstZXlJ7PtCmqNfzenGJkO7cIRQ= Name: res/layout/contact_selection_list_header.xml SHA1-Digest: lKees/HLMOcN/YNRlkGFb3Q2mJI= Name: res/layout/preference_list_fragment.xml SHA1-Digest: 4ipfI4WoTkZxFEZmqCeDvQeUlhs= ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/metadata/org.smssecure.smssecure/signatures/134/MANIFEST.MF0000644000175000017500000070757214717152070026623 0ustar00hanshansManifest-Version: 1.0 Created-By: 1.7.0_121 (Oracle Corporation) Name: res/drawable-xhdpi-v4/abc_ic_star_half_black_48dp.png SHA1-Digest: IIXvgndAzHnlbFdPy/QNd5PVgd0= Name: res/drawable/abc_btn_check_material.xml SHA1-Digest: 4XHnecusACTIgtImUjC7bQ9HNM8= Name: res/drawable-xhdpi-v4/ic_video_light.png SHA1-Digest: U5U2LHRskn9jaXDMTvHZ1EjilWw= Name: res/drawable-hdpi-v4/ic_lock_black_18dp.png SHA1-Digest: S7n2/JX/yuDCLErq0/yirCHoKkw= Name: res/layout/design_navigation_item_separator.xml SHA1-Digest: ZrVCT50MLzsYssSmPSnwC2kz/Hs= Name: res/drawable-hdpi-v4/abc_textfield_search_activated_mtrl_alpha.9 .png SHA1-Digest: sM1tzoxIgcK5w/PwGSZxzucCBqY= Name: res/drawable-xhdpi-v4/ic_advanced_gray.png SHA1-Digest: a4mTiItaaOrkObi4PO2hLFA2qeg= Name: res/drawable-mdpi-v4/ic_notifications_black.png SHA1-Digest: N70Up5wxCOD1opQkUHZZD90OIXQ= Name: res/drawable-hdpi-v4/ic_audio_light.png SHA1-Digest: BQU5Jkm8jgm5qPNXsiTqIUNK9hM= Name: res/drawable-xxxhdpi-v4/ic_textsms_grey_32dp.png SHA1-Digest: Nf/LIN1pRUA77kNNOrXYPAT4DlI= Name: res/drawable-v21/abc_action_bar_item_background_material.xml SHA1-Digest: VikGrClarpkvTVwTS9DEpzyZFsI= Name: res/drawable-xxhdpi-v4/list_focused_holo.9.png SHA1-Digest: FsvLP65iWVfEfIkCPXw4wimwY7M= Name: res/drawable-hdpi-v4/ic_arrow_forward_dark.png SHA1-Digest: 056yrQG7i5TNI25jBLHiQIBh1q0= Name: res/drawable-mdpi-v4/ic_attach_grey600_24dp.png SHA1-Digest: s2S4+X1D/i5/fww5Bc2lWtoAHYo= Name: res/drawable-xxhdpi-v4/ic_arrow_forward_dark.png SHA1-Digest: sGjoiE9yeNeYB84qMmM+lB1oPDw= Name: res/drawable-xxhdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png SHA1-Digest: A1jmf+4/FK84T7WYmxH0Y09wAFg= Name: res/menu/conversation_list_batch_unarchive.xml SHA1-Digest: tZfXEUqLPwLow1ZywhOELowedy8= Name: res/layout/share_list_item_view.xml SHA1-Digest: FlaBySyWODQ+ObFVK+rk6yeR7+o= Name: META-INF/services/com.fasterxml.jackson.core.ObjectCodec SHA1-Digest: mECZ0InRcm6Sm6/P0dIQdmb5YtU= Name: res/drawable-xxhdpi-v4/ic_emoji_objects_activated_dark.png SHA1-Digest: 0Vqi28h81Efl3XxkfQcTf/X+BVQ= Name: res/drawable-hdpi-v4/ic_block_grey600_18dp.png SHA1-Digest: 4I6jmoZyyJOg2EoZu9OHXTOtd8U= Name: res/drawable-hdpi-v4/ic_refresh_white_24dp.png SHA1-Digest: lCrkNOkTGMEpPkiZpK43eSE6ybU= Name: res/drawable-xxxhdpi-v4/abc_ic_star_black_16dp.png SHA1-Digest: SWImInYsdKUpa45H1laBJKZNpMI= Name: res/drawable-mdpi-v4/ic_photo_library_white_24dp.png SHA1-Digest: jjO4ijdaa414z67rjvWBCzBUEY8= Name: res/drawable-xxhdpi-v4/ic_emoji_recents_normal_light.png SHA1-Digest: 1nDUl89fzQc53ObCvzXXlnqnf/A= Name: res/drawable-mdpi-v4/ic_action_warning_red.png SHA1-Digest: c5kWZr/E79wMkqq4a33Ia/tw47g= Name: res/layout/conversation_item_sent_audio.xml SHA1-Digest: ouckIGU21lUqk4E/TL3qF5ZQpro= Name: res/drawable-xhdpi-v4/switch_thumb_activated_holo_light.9.png SHA1-Digest: W+Hupcm4+5Vmhoa+hMuaWAPbj9Y= Name: res/drawable-mdpi-v4/ic_message_gray.png SHA1-Digest: mRK05SwodJgRWHjl6kcUKHfVo/c= Name: res/drawable-mdpi-v4/ic_image_dark.png SHA1-Digest: 6vfvi40T+wAZp2GCPPindGeF1oM= Name: res/color-v23/abc_color_highlight_material.xml SHA1-Digest: d3fTZZ8N/686AarGmf1fVY0oMIk= Name: res/xml/preferences_advanced.xml SHA1-Digest: Mny1c+qoGQuIvGsDXqTswa3bonE= Name: res/drawable-xxhdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png SHA1-Digest: IVjsZMMVr/ce0JFlSQDbVTn2lZ8= Name: res/drawable-xxhdpi-v4/ic_attach_grey600_24dp.png SHA1-Digest: iMQLLyiw1c9Dv5YdxKJ0aKPSIes= Name: res/layout-v17/conversation_list_item_view.xml SHA1-Digest: aN+hQEMZcHYue5msEQjMH4v7qi0= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_995 SHA1-Digest: qCXtFZpw6cj0RMgs3HecypVQnr4= Name: res/layout-v16/design_bottom_sheet_dialog.xml SHA1-Digest: xB2jHM3k+/qdUXqVnuv5nmONmZ8= Name: res/drawable-v11/emoji_category_recent_light.xml SHA1-Digest: M/SBX1z1roN+u5+TvQZXKJDNEyA= Name: res/drawable-xxhdpi-v4/ic_message_black.png SHA1-Digest: Z+M+yxOP45UFN3lnWU00BTJm5cY= Name: res/drawable/notification_tile_bg.xml SHA1-Digest: GASJ/JPWuTyKrvBkfdmK7mtYvlc= Name: res/menu/conversation_secure_sms.xml SHA1-Digest: Umly1//KqmlELY6mwG2+4bTMi78= Name: res/drawable-xxhdpi-v4/lockscreen_watermark_dark.png SHA1-Digest: nyEXs/BKk4Ioez2E62mpWxZ+B6U= Name: res/drawable-hdpi-v4/switch_thumb_holo_light_v2.9.png SHA1-Digest: KtN2rASYoM9JbiYC5rZ+EHNeOWo= Name: res/drawable-xxhdpi-v4/abc_list_selector_disabled_holo_light.9.p ng SHA1-Digest: iN/uNjBfhVbAIr76ujTy7rKk9Iw= Name: res/layout/time_zone_item.xml SHA1-Digest: vnlWmMcNga+AfJgFWDNQIIoLj/M= Name: res/layout-v17/abc_alert_dialog_title_material.xml SHA1-Digest: V1sQ9uyt90Q5ztWU9OddyNDnJm8= Name: res/drawable-xhdpi-v4/textfield_default_holo_light.9.png SHA1-Digest: DuXFeUGOvd3j97HhEpwhlm8QBrg= Name: res/drawable-mdpi-v4/import_database.png SHA1-Digest: ohkWM7042kXKM8DsVK4FYl0OmB8= Name: res/anim/design_bottom_sheet_slide_in.xml SHA1-Digest: JZvF3dH3kK4CROiDGCiyzk0bcCI= Name: res/drawable-xhdpi-v4/ic_image_dark.png SHA1-Digest: pG2xg3lvc0kKIbVUDBgntEps8rQ= Name: res/drawable-xxhdpi-v4/ic_emoji_people_normal_light.png SHA1-Digest: RLKT4JKFh+bDCbS3OE2m2TqLJ2M= Name: res/layout-v13/conversation_item_last_seen.xml SHA1-Digest: nVh5GMSO8uG5b0Ff3hCCIwcZBrA= Name: res/drawable/play_icon.xml SHA1-Digest: sAos14jJZv5f8bMTKeO94bYtOok= Name: res/animator/scale_with_alpha.xml SHA1-Digest: tn55l/2e75ToW4LXM0LeHHxAjTo= Name: res/drawable-mdpi-v4/abc_btn_check_to_on_mtrl_000.png SHA1-Digest: nRtiU5b/2GCMrB/FhPJC0XFk+lU= Name: res/drawable-v11/abc_textfield_search_material.xml SHA1-Digest: Qps1rIzG6yKql3AjAF66l6BFKZ4= Name: res/drawable-hdpi-v4/ic_emoji_nature_activated_dark.png SHA1-Digest: nodqipSEKiA1Wh7Zi4TH5mZ9CU8= Name: res/drawable-xxhdpi-v4/abc_switch_track_mtrl_alpha.9.png SHA1-Digest: IgT0lCbG3uY9vQQnsJCrHog+mlg= Name: res/drawable/done_background_color.xml SHA1-Digest: KQZWh7MuvIw/BvNz3xBDxWt2YgM= Name: res/layout/conversation_item_update.xml SHA1-Digest: yICdPauTzp4uWodLV+0ThZ02PLM= Name: res/drawable-hdpi-v4/ic_clear_search_holo_light.png SHA1-Digest: lySLLFGrRykDN0crMWsDOJvAcPI= Name: res/layout-v16/radial_time_header_label.xml SHA1-Digest: zfzul0N8Pl40HpZdLUdndsD3EKs= Name: res/anim/abc_slide_in_top.xml SHA1-Digest: YBdDQbyB2IFfhjwKI6NSPOXqz7g= Name: res/drawable-xhdpi-v4/ic_menu_search_holo_light.png SHA1-Digest: /ZUrJRkPX8UDursj5Y0cjKzHQk8= Name: res/drawable/emoji_category_emoticons_light.xml SHA1-Digest: Ix5KZgvXSTgzlXU43c2s3+pyEsY= Name: res/drawable-xhdpi-v11/icon_notification.png SHA1-Digest: NTiNSLa7t3TTK0mWOo029dATyoc= Name: res/drawable-xxhdpi-v4/ic_emoji_flags_activated_dark.png SHA1-Digest: FF6h02gP05ugJ46mQGGdoUQTpbU= Name: res/drawable-xxhdpi-v4/ic_save_white_24dp.png SHA1-Digest: vAda17ocZp3K9sSQIG73S3rYY2M= Name: res/layout-v17/import_fragment.xml SHA1-Digest: lTK3hNRJT1fDJbpu1P/q1t0IIhc= Name: res/anim/animation_toggle_in.xml SHA1-Digest: +tj+Zh9Sc3CL9SYyjJU2Itw9c70= Name: res/drawable-xhdpi-v4/ic_emoji_objects_activated_dark.png SHA1-Digest: lKmnwHsEXpfHOrnZpMfxeFQz3Ak= Name: res/drawable-v11/emoji_category_people_dark.xml SHA1-Digest: b/kZoL3i0JG3olAcNzagfvhDi6Q= Name: res/color/abc_tint_edittext.xml SHA1-Digest: sTAI8SOOW/SEHRZMp87XoIXU7cY= Name: res/drawable/edit_text_holo_light.xml SHA1-Digest: KPbOOjkx/j1wRjSSr6Ew1fVQ7Lc= Name: res/drawable-xxhdpi-v4/spinner_focused_holo_light.9.png SHA1-Digest: 7FDASvJfc8AEzERJoNcGwpNM0As= Name: res/drawable-mdpi-v4/ic_recurrence_bubble_outline_disabled.png SHA1-Digest: Wi1XLPwgN/UKKy6kXcjWQgVKmrk= Name: res/drawable-xhdpi-v4/ic_check_white_24dp.png SHA1-Digest: EWTW7qDBAFhOZzexW1mjDojOJ34= Name: res/drawable-mdpi-v4/ic_emoji_flags_normal_light.png SHA1-Digest: xxZCgGAanMLE7VRtyfrK/RS3zT0= Name: res/xml-v12/badge_widget_provider.xml SHA1-Digest: LYzz2MiGdgQYCIgbO3arb3t4YVI= Name: res/drawable-xxhdpi-v4/quick_shutter_button.png SHA1-Digest: YQw6DY43TseRa7+ahBFTptNrSrM= Name: res/drawable-xhdpi-v4/spinner_default_holo_light.9.png SHA1-Digest: Yv8DQV5iCOq6B/hrpnjziMEY1oE= Name: res/drawable-hdpi-v4/abc_ic_star_half_black_36dp.png SHA1-Digest: 9T7OtiKOgE9YHg0K0KlcW6X1OxY= Name: res/animator-v11/bottom_pause_to_play_animation.xml SHA1-Digest: EKWk/sJYqCBErBCnJ88Vs9WwB0U= Name: res/drawable-mdpi-v4/ic_arrow_forward_light.png SHA1-Digest: CbRHxj+5CferrcctmIZ1d0jIDjI= Name: res/drawable-xxhdpi-v4/ic_content_copy_dark.png SHA1-Digest: i++l+AM4yAegDH3qEA21iwiTAsA= Name: res/layout/message_details_activity.xml SHA1-Digest: rCNh6NSBINEtZvsZM7XZ6ovpoUQ= Name: res/drawable/abc_ic_voice_search_api_material.xml SHA1-Digest: omhkmF07gC6wuDBUijeWjNr1lmM= Name: res/drawable-mdpi-v4/ic_create_white_24dp.png SHA1-Digest: dMrdSae/0y0uItmi1TvH7LIG8rk= Name: res/layout/export_fragment.xml SHA1-Digest: acn2Tib5zIDYiwWUQ8+DROsnE3k= Name: res/drawable-xhdpi-v4/ic_lock_black_18dp.png SHA1-Digest: N7y019Qm4MTsPDJvUf6xpcjmLOg= Name: res/drawable/key_background_dark.xml SHA1-Digest: /33Cy7m3UkKOcki5nldzXnDJowU= Name: res/layout/design_text_input_password_icon.xml SHA1-Digest: Lpg93JzhkRdWxr07dxz16VeVgHg= Name: res/color-v23/abc_tint_default.xml SHA1-Digest: JNakLap6TZmoq0IZZTxldEdBsQ8= Name: res/drawable/abc_btn_colored_material.xml SHA1-Digest: c1kBk3kYH1Q2Zf0o2yN8Btg8MFI= Name: res/drawable-xhdpi-v4/ic_keyboard_white_24dp.png SHA1-Digest: uih6E5rFfQHK6fTNT9qs0cTmLTo= Name: res/drawable-xhdpi-v4/ic_reply.png SHA1-Digest: E6A43gDKrTDEXYlV747+gpcFSZ0= Name: res/drawable-mdpi-v4/ic_reply_white_36dp.png SHA1-Digest: 2LpCVIVzMYRpSLyRHyXWzO5I/mI= Name: res/drawable-xxxhdpi-v4/ic_photo_camera_light.png SHA1-Digest: E4gfHIxVLweUS1I6YWO8jy4rKUY= Name: res/drawable-xhdpi-v4/abc_ic_star_black_48dp.png SHA1-Digest: eNgvY49POsWnKG684klRhS5BjwI= Name: res/drawable-mdpi-v4/ic_movie_creation_light.png SHA1-Digest: RAzHQaaPAravxZQZiW0TtJUPDhs= Name: res/layout/hms_picker_dialog.xml SHA1-Digest: kbj1F48T2S6DbCNNs+03w0ebBmc= Name: res/drawable-xhdpi-v4/check.png SHA1-Digest: q8Wdw4VtUWgyMZHvzafRrdm7Fck= Name: res/drawable-hdpi-v4/abc_cab_background_top_mtrl_alpha.9.png SHA1-Digest: J10MbRypNxo+JeKfGf61OMkWgdY= Name: res/drawable-hdpi-v4/abc_ic_star_half_black_48dp.png SHA1-Digest: GV2BrBF8/MHHPwyzNe+cYQSsr8s= Name: res/drawable-mdpi-v4/ic_keyboard_grey600_24dp.png SHA1-Digest: 8qGI1WetA5BPcdLcZ533TtLteWg= Name: res/layout/keyboard.xml SHA1-Digest: i8FnKajJyiLgB5vJQQQ79ZM+vrs= Name: res/drawable/key_background_light.xml SHA1-Digest: 6hucLMUPMI5lbi0CQdnO07Alz4U= Name: res/drawable-hdpi-v4/check.png SHA1-Digest: 9Dw9zTBc9ZC39tlsMH2jDt4hnaY= Name: res/layout/message_details_header.xml SHA1-Digest: rVNpy6Ud1KSAZukWd3bF7JmQY3s= Name: res/drawable/reminder_background.xml SHA1-Digest: ch+x5ouRv1Skv9FSpccJXX4ysfY= Name: res/drawable-xxhdpi-v4/last_seen_background.9.png SHA1-Digest: AcZa88WjmAgL9QcaLEep+IS+fDw= Name: res/drawable-xxhdpi-v4/abc_ic_star_black_48dp.png SHA1-Digest: X8m2s5TyuTw6/NjutpgGA9c1lho= Name: res/drawable-xhdpi-v4/list_longpressed_holo_light.9.png SHA1-Digest: DbbsJ/A8Zk/Z2Q8z6jeVTrNtcKw= Name: res/drawable-hdpi-v4/ic_warning_light.png SHA1-Digest: qalX8/VUDauzBFywTYURgE1L9Qk= Name: res/color-v23/abc_btn_colored_text_material.xml SHA1-Digest: iPtKeCtxBDsPlPY18AN/Fz+9bAA= Name: res/drawable-mdpi-v4/ic_send_sms_insecure.png SHA1-Digest: YLdCNPPxIhI9bmuUabKrE5JPUYw= Name: res/drawable-mdpi-v4/alert.png SHA1-Digest: sSyzRDtWJ5MWIR7PVNG6R5JZD6Q= Name: res/drawable-hdpi-v4/ic_badge_24dp.png SHA1-Digest: BiyuZ+b94otM0TefNe5IDA6Ynqc= Name: res/drawable/badge_drawable.xml SHA1-Digest: aiMhken5i5apS16OJesivKFzhxs= Name: res/drawable-xhdpi-v4/notification_bg_low_pressed.9.png SHA1-Digest: bcGROFguSllVLTSUpbQeY5V6A54= Name: res/drawable-xxhdpi-v4/ic_emoji_people_activated_light.png SHA1-Digest: bWbQisF0+mbPPIfJslvYQ4MIw1M= Name: res/layout-v11/notification_template_custom_big.xml SHA1-Digest: YpS/OEfHDCMgbdA0sBuqh4Hw8gU= Name: res/color-v23/abc_tint_switch_track.xml SHA1-Digest: j8Ow8A7D/juc9qKCl0uOhS7FiGo= Name: res/drawable-hdpi-v4/ic_play_circle_fill_white_48dp.png SHA1-Digest: CG6EW3H6BZYbjlrkr0ioncRLKAQ= Name: res/layout-v16/selected_recipient_list_item.xml SHA1-Digest: IoTIQcdfhF5yj/bZbVuL4GTD1As= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_506 SHA1-Digest: fSwyg4KxEaIctkOMUXXbP0UnACc= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_505 SHA1-Digest: dkhqE6jk0X2rJBCd5h+xJ2vZwls= Name: res/drawable-xxxhdpi-v4/abc_text_select_handle_left_mtrl_dark.pn g SHA1-Digest: nKZVF0m1PUkIw27hETwzR4eJs9A= Name: res/layout/selected_recipient_list_item.xml SHA1-Digest: duqiHkirDUOdtYcYOK4BSsgiKvk= Name: res/drawable-ldrtl-hdpi-v17/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: 2gdfs4MdNrmZ5fPzRYQKwf3z8nA= Name: res/drawable-mdpi-v4/ic_video_dark.png SHA1-Digest: IWblTbgIV8kQKFhGJwVzpyd5L9o= Name: res/layout/recycler_view_fast_scroller.xml SHA1-Digest: yj2pdZt+7FUOalySQMltDj72Ruc= Name: res/drawable-xhdpi-v4/ic_archive_white_24dp.png SHA1-Digest: 9rhe+ODYJADw9F+ZIJy7XnzieYo= Name: res/drawable-xhdpi-v4/import_database.png SHA1-Digest: kT7Dxt0ieDTf8EaNh6ARZMyYdvQ= Name: res/menu/group_create.xml SHA1-Digest: zeZeiPaRvC1mx93uqTHqpR7cl38= Name: res/drawable-xhdpi-v4/ic_emoji_places_activated_dark.png SHA1-Digest: FM3dLeEaQNZQzXXRsyRTRiaVSvE= Name: res/drawable-xhdpi-v4/ic_menu_remove_holo_light.png SHA1-Digest: l5JGHVyNioatN5tnVH3EIvs4nRA= Name: res/layout/media_preview_activity.xml SHA1-Digest: faMYzcwlYnIh7K8g5B/gWS4inw4= Name: res/drawable-xxhdpi-v4/ic_emoji_recents_activated_light.png SHA1-Digest: r0bI+AnVCes3xF/lEu/EnAyGvpU= Name: res/color/abc_background_cache_hint_selector_material_light.xml SHA1-Digest: 6zQV9p9NddLltjdGn1qBYsiO04o= Name: res/drawable-v11/emoji_category_objects_dark.xml SHA1-Digest: 5oHBFdRp6A/AB1/rjl617YZmGjU= Name: assets/fonts/AndroidClockMono-Thin.ttf SHA1-Digest: nDLU3MtBsUBWd/Jq7PrvujP5/YE= Name: res/anim/abc_shrink_fade_out_from_bottom.xml SHA1-Digest: tUIF7X/jI8K8Q3PAJpeZVS4JPi8= Name: res/drawable/abc_seekbar_thumb_material.xml SHA1-Digest: R+zfNUVLkXYZ8GH32A2aK443lBQ= Name: res/drawable-mdpi-v4/ic_audio_light.png SHA1-Digest: M/LxQZgQkGn584KOjwnSsyS3TIE= Name: res/drawable-sw600dp-mdpi-v13/ic_backspace_disabled_dark.png SHA1-Digest: NzveXyIeX/Q8a9YPSBUiW3bhSmk= Name: res/drawable-xxhdpi-v4/ic_emoji_recents_activated_dark.png SHA1-Digest: jVMrr+nZhoszz6VRNSntfqS0cTU= Name: res/xml/preferences_manual_mms.xml SHA1-Digest: E2rymzAKN4LCdZRLsP2mRgX8og0= Name: res/drawable-xxhdpi-v4/ic_volume_off_grey600_18dp.png SHA1-Digest: cZCdGmEQ/C1DSNf8MpfnVFuEcSk= Name: res/drawable-xxhdpi-v4/abc_list_pressed_holo_light.9.png SHA1-Digest: I2JJHnuKjt9jtF8C76fBatEScaE= Name: res/drawable-xhdpi-v4/ic_delete_white_24dp.png SHA1-Digest: OBvkuQzFVSmxufu8IhWrya0IXaQ= Name: res/drawable/abc_cab_background_top_material.xml SHA1-Digest: gLHAZPEH/WYlWCNIPwRV1Ypbx70= Name: res/drawable-xxxhdpi-v4/abc_btn_check_to_on_mtrl_015.png SHA1-Digest: T5slVQklwytRhhFRjSw66UZR3vQ= Name: res/drawable-mdpi-v4/ic_attach_white_24dp.png SHA1-Digest: thQt7cIcZ0mL01x5FsL1R1A1rBo= Name: res/drawable-xhdpi-v4/dialog_full_holo_dark.9.png SHA1-Digest: Xv7q5ITHzmlsgg58AkKDmIAOIx8= Name: res/drawable-hdpi-v4/ic_lock_white_24dp.png SHA1-Digest: 0dcinbm1XmG7pxuKJQyIWyyg1Mw= Name: res/drawable-hdpi-v4/ic_volume_up_dark.png SHA1-Digest: 9Q/rSxq9vdebifqVdmXC41yK7HU= Name: res/drawable-xhdpi-v4/ic_message_gray.png SHA1-Digest: Udx+B3tG4BGz7szLTOV5UqcLSjw= Name: res/layout/outgoing_sms_preference.xml SHA1-Digest: vUmctb+/JCb+YUO7nhCrunZB9uM= Name: res/layout/number_picker_view.xml SHA1-Digest: Y/yClXAuZWNCc1yyjnZBe1NNIVg= Name: res/drawable-xhdpi-v4/ic_lock_light.png SHA1-Digest: 5Dtpi+WAU1zUT7j2ltzqejkiJzo= Name: res/layout-v17/design_layout_snackbar_include.xml SHA1-Digest: nwIcVUJMLdU2ENDUFLbne+hEx2o= Name: res/drawable-xxhdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png SHA1-Digest: kjQh/adr8XS+S465gr9pzFibMnM= Name: res/color/switch_thumb_material_dark.xml SHA1-Digest: vTE9UvBWe0T4UHYQNlyBx5kaZp4= Name: res/drawable-xxhdpi-v4/ic_visibility_off_white_24dp.png SHA1-Digest: VgkSbkRBLyW/56dKPaAQLXk12rs= Name: res/drawable-mdpi-v4/ic_push_registration_reminder.png SHA1-Digest: R/89BRJe6hI+pc6YvD3EaC53Rog= Name: res/drawable-mdpi-v4/dialog_full_holo_light.9.png SHA1-Digest: cPS/8GrbED05T5hrf5U6qfxSYiQ= Name: res/layout-sw600dp-v13/design_layout_snackbar.xml SHA1-Digest: HJOl8PfLoX71EWOMZy+PDFI8yBc= Name: res/drawable/actionbar_icon.xml SHA1-Digest: 4ggDqvnA//4/gUTrCi8SAWhqAUs= Name: res/drawable-mdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.pn g SHA1-Digest: QfpcSdSZHMZJtyvdOvxgAoeFBBk= Name: res/layout/abc_list_menu_item_layout.xml SHA1-Digest: J8RjKYf2o/zzS700bKt+p7lC0q8= Name: res/drawable-mdpi-v4/ic_movie_creation_dark.png SHA1-Digest: 72EYKIbguQFmHPAn+pcWWulmcM4= Name: res/drawable-v21/abc_edit_text_material.xml SHA1-Digest: nDa2DDAkLij1tWInVt1evpeEAJY= Name: res/drawable-mdpi-v9/icon_notification.png SHA1-Digest: jbGkbjzccJX6xAOT664dgUrYNGo= Name: res/drawable-xxhdpi-v4/ic_refresh_white_24dp.png SHA1-Digest: nOASh5umDXH9u9l5Y3Y7r1MjKpU= Name: res/drawable/progress_background.xml SHA1-Digest: zK7FJQT3jdkLOJAs5Y7jL9uLgX0= Name: res/drawable-xxhdpi-v4/list_pressed_holo_light.9.png SHA1-Digest: I2JJHnuKjt9jtF8C76fBatEScaE= Name: res/drawable-xhdpi-v4/abc_textfield_search_activated_mtrl_alpha. 9.png SHA1-Digest: 3u3fLmehvZBhy/5ikwcph94VGWM= Name: res/drawable-mdpi-v4/textfield_disabled_focused_holo_light.9.png SHA1-Digest: DyvZuMUjf2liRGFrEuf0bX7J6Co= Name: res/drawable-xhdpi-v4/abc_cab_background_top_mtrl_alpha.9.png SHA1-Digest: RwOTCkvoy8JfKjFQZXnNiOHbxpQ= Name: res/xml/preferences.xml SHA1-Digest: FCzeWlMFqgZgIHKHcnRE8FHhsYk= Name: res/anim/abc_slide_out_bottom.xml SHA1-Digest: GcBbKJcMWdQ42ssCQexb9kGH6us= Name: res/drawable-mdpi-v4/spinner_disabled_holo_light.9.png SHA1-Digest: hCV+UPDT8uh5rAO/BFyqYTBW/rI= Name: res/drawable/emoji_category_places_light.xml SHA1-Digest: i5LwYGeXLGbsZlLUNAlCLX6WES4= Name: res/menu/conversation_group_options.xml SHA1-Digest: Cz1LHRVTK/n/Yr9i820CGDhZdpM= Name: res/drawable-xxxhdpi-v4/abc_text_select_handle_right_mtrl_dark.p ng SHA1-Digest: TZRpCX4hkbb2R6dA0PyLbOZ1pWY= Name: res/drawable-xhdpi-v4/ic_emoji_nature_normal_dark.png SHA1-Digest: dgs2idcig8HR1aMZTR/mP1DWxg8= Name: res/drawable-ldrtl-xhdpi-v17/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: 5LeNKf2Di1jUSAKDjrtFAYF0634= Name: res/drawable-xhdpi-v4/design_ic_visibility_off.png SHA1-Digest: HGLLL59KFe3wyaLeYNev5PF0038= Name: res/menu/share.xml SHA1-Digest: nP4tL520r8S6X/uEIUuk5rCxtnk= Name: res/drawable-mdpi-v4/spinner_focused_holo_light.9.png SHA1-Digest: V9tjL1cMxuMvNGabgo8kTf8q/oQ= Name: res/drawable-mdpi-v4/ic_unarchive_white_24dp.png SHA1-Digest: GZWbFYYJlpwMTVooN+m9zrREUas= Name: res/drawable-xhdpi-v4/ic_send_white_24dp.png SHA1-Digest: GCB6MFxVku0xwGVLmqI4gkI75nM= Name: res/drawable-mdpi-v4/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: h5X7BIPdIFf8dpb/b/WA1vYdwkc= Name: res/drawable-hdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png SHA1-Digest: IwzRNkVJWfy8agwdJdTuG1InFsM= Name: res/animator/rotate_90_animation.xml SHA1-Digest: AhVLtjcJdoeXGcim/ix1HCO/gQw= Name: res/drawable-xxhdpi-v4/ic_forward_white_24dp.png SHA1-Digest: R7Bez8u9DT2s6Muw5uQAQlYJaQQ= Name: res/drawable-xxhdpi-v4/ic_notifications_black.png SHA1-Digest: 1Fk4e6G2BE2BiZXoO6Pn2b1UG4Q= Name: res/layout/message_recipient_list_item.xml SHA1-Digest: TePFz2FsUOserdUzGiKVTfzN5CA= Name: res/drawable-mdpi-v4/ic_send_push.png SHA1-Digest: ANGo0/ZMpydXfvuzx4jOs2aojRk= Name: res/drawable/abc_spinner_textfield_background_material.xml SHA1-Digest: k4PYrKN6q/ExQP5RdV8dDVaO8Js= Name: res/drawable-mdpi-v4/ic_pause_circle_fill_white_48dp.png SHA1-Digest: dnwza4w6JREr7ooIFzyvE9lJaGE= Name: res/layout/single_recipient_panel.xml SHA1-Digest: XIK0TSNn9d/BVsSHZvDmZ78IV1Q= Name: res/drawable-mdpi-v4/abc_ic_star_black_48dp.png SHA1-Digest: 4f3D3QSNCzMFGqafojrMfwWdbXM= Name: res/layout/select_dialog_multichoice_material.xml SHA1-Digest: kd5khEvhkv1mHuCX1lHN2++UPis= Name: res/drawable-xxhdpi-v4/ic_warning_light.png SHA1-Digest: ruGvzbqHAMH2FRafTgK65crjaH8= Name: META-INF/buildserverid SHA1-Digest: PFAoK3vAw7CF29BtzhTdrgabIU8= Name: res/layout-v11/notification_template_big_media.xml SHA1-Digest: +TFjHcyzZJEJr490AyyXdhaDiMk= Name: res/drawable-mdpi-v4/abc_btn_radio_to_on_mtrl_015.png SHA1-Digest: QZ9FkSY1uLrLNUoYvFP8D6yQGLQ= Name: res/drawable-mdpi-v4/ic_menu_login.png SHA1-Digest: EcClc4RJzMSNChXRIX1XlD/+bEc= Name: res/drawable-mdpi-v4/ic_forward_white_24dp.png SHA1-Digest: KDZDv/eC+vZwebB9bgUbCiHcOwQ= Name: res/drawable-mdpi-v4/abc_textfield_search_activated_mtrl_alpha.9 .png SHA1-Digest: YsHF4VJihRr1oEZ76cu42zsHjek= Name: res/drawable/conversation_item_background.xml SHA1-Digest: 3zP1JNDyPjgLfcHlwQ81OLVB0KI= Name: res/color/abc_background_cache_hint_selector_material_dark.xml SHA1-Digest: JW1Wg9XMsM+FF68MpbJdFc2Yh8U= Name: res/drawable-hdpi-v4/ic_delete_white_24dp.png SHA1-Digest: A0vA8rAkCLZNYoF5HPt9eLe8h4Q= Name: res/anim-v21/design_bottom_sheet_slide_out.xml SHA1-Digest: AGi5g5tvoZK7WNsIL0yZE9rdwnw= Name: res/layout-sw600dp-land-v13/calendar_date_picker_dialog.xml SHA1-Digest: DTEvwBiBAs8Zx8lzI8d7Yxok/cg= Name: res/layout-w270dp-h560dp-v13/calendar_date_picker_dialog.xml SHA1-Digest: 0EXb515hkEqCoPlqNWo2641c6Tc= Name: res/layout/design_navigation_item.xml SHA1-Digest: OBUxoOt71etSxXAmAB0RNSxD4Qs= Name: res/drawable-xhdpi-v4/ic_contact_picture.png SHA1-Digest: oJXz8IZJ6Y95+0ZdP1hqcL2FiPA= Name: res/drawable-xhdpi-v4/ic_push_gray.png SHA1-Digest: alLOpqE4oBaoHod/XGuYJOmQews= Name: res/drawable-hdpi-v4/ic_menu_login.png SHA1-Digest: PO+FcUw8v6AARSGgankkXFPCUEQ= Name: res/drawable-hdpi-v4/ic_emoji_flags_activated_light.png SHA1-Digest: zMws9NE3NlZRKmz8R1wjKhi9whg= Name: res/layout/notification_action_tombstone.xml SHA1-Digest: AwtVhrNIO8jY58Wb9p1zLoAnCrU= Name: res/drawable-hdpi-v4/abc_textfield_activated_mtrl_alpha.9.png SHA1-Digest: H53d9SOkoWezKsVvcOALraOdTFo= Name: res/drawable-xhdpi-v4/ic_group_photo.png SHA1-Digest: oL/kNS4eqBr8RAy9D+FzsG79WkQ= Name: res/drawable-xxhdpi-v4/fab_shadow.png SHA1-Digest: SzS1ucPl8evgFkx0dlXzK0DjLNY= Name: res/drawable-xhdpi-v4/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: co+pW0+xme4l0m6WE+SgOOn2PRc= Name: res/drawable-xhdpi-v4/ic_visibility_off_white_24dp.png SHA1-Digest: sCCf80UsuBkBgQm6R/rr8qLYLKI= Name: res/drawable-xxhdpi-v4/abc_list_selector_disabled_holo_dark.9.pn g SHA1-Digest: vq3AaVX19jU0c0v1npZsAQOh+CI= Name: res/drawable-hdpi-v4/ic_archive_white_24dp.png SHA1-Digest: KbWim3MsiUKD8touScr3oNt4H70= Name: res/drawable-xhdpi-v4/ic_backspace_disabled_light.png SHA1-Digest: fY8wrBom1Rs7BcwNpzmN9KBBDT4= Name: res/layout/select_dialog_item_material.xml SHA1-Digest: E4PLWhmMlEqiZ2c7cb1WZw6h5xc= Name: res/layout/view_identity_activity.xml SHA1-Digest: sdfI5G2rE7lANKYrX52VPeV7uyA= Name: res/layout/design_navigation_item_subheader.xml SHA1-Digest: G/GTeUU3cMIzAHRn1M6boiTStpk= Name: res/layout-v21/notification_action_tombstone.xml SHA1-Digest: DLKxAEny9fK1E7eLn5Id4MMMYWk= Name: res/layout/share_intent_list.xml SHA1-Digest: fd3NhPVV0DCVVNLVlfNEQk+I6mU= Name: res/drawable-mdpi-v4/fab_shadow_mini.png SHA1-Digest: P10uXNSh+EnI7Pj0+KYPZJgMBA4= Name: res/drawable-hdpi-v4/icon.png SHA1-Digest: 3JRiO1Xv3zqBcWZXCMTRCD5uC64= Name: res/drawable-hdpi-v4/switch_thumb_pressed_holo_light.9.png SHA1-Digest: UW8twZMlDStRuqjFewmFD3itfrQ= Name: res/drawable-xxxhdpi-v4/ic_archive_white_36dp.png SHA1-Digest: M5idSMjFl4jMkh7Ph3QB7sogHC0= Name: res/drawable-xxhdpi-v4/ic_emoji_places_normal_dark.png SHA1-Digest: unSBHnvE/dIccJCGZxkcnq9NATs= Name: res/drawable-xxxhdpi-v4/ic_save_all_white_24dp.png SHA1-Digest: lUQYmGbtIp+HCVrKWOxWYTtqiZ4= Name: res/drawable-xxhdpi-v4/ic_delete_gray.png SHA1-Digest: A1p5mUcS5MqrAS52rhbf4X29ol4= Name: res/drawable-xhdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png SHA1-Digest: Bii9JPddV76dH8va+pLHDS/1H2I= Name: res/drawable-hdpi-v4/ic_emoji_emoticons_activated_light.png SHA1-Digest: jmlTwrZJp/RWlsACB6z6XA51nTk= Name: res/drawable-mdpi-v4/abc_textfield_search_default_mtrl_alpha.9.p ng SHA1-Digest: D6dilO+UMcglambujyMOhNbLZuY= Name: res/drawable-xxhdpi-v4/ic_textsms_black_32dp.png SHA1-Digest: U/wm8M32OvVbolXxe15KdIdPx+E= Name: res/drawable-hdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: MMkP0OZqp3er4oTF2Gl+RImzkzI= Name: res/layout/group_create_activity.xml SHA1-Digest: F/Q/V0mWyJ8d7KnG/y8b0Gx+xFw= Name: res/drawable-xxhdpi-v4/ic_volume_off_white_18dp.png SHA1-Digest: dl1JwJfw24ecb/xMq4AABXXFAe0= Name: res/drawable/emoji_category_symbol_dark.xml SHA1-Digest: 851XjUQCOZEjfyEEgWCW8kAGbfE= Name: res/drawable-hdpi-v4/ic_delete_gray.png SHA1-Digest: Uiq37k4GzEgR/Ce0lqUdjCHVz5U= Name: org/spongycastle/x509/CertPathReviewerMessages.properties SHA1-Digest: OGIe7v0JVQeuizExOPQ4Cf/+RXo= Name: res/drawable-mdpi-v4/ic_emoji_people_activated_light.png SHA1-Digest: XodEEfpbmDfbGrSJnks2UgUIzJQ= Name: res/drawable-xhdpi-v4/actionbar_icon_holo_dark.png SHA1-Digest: DAQ7h+0M3pk7vKhzp4y4JzYnzqc= Name: res/drawable-xhdpi-v4/abc_btn_check_to_on_mtrl_000.png SHA1-Digest: F15Y7TDgoQ90hOj/LqmJmzvUv5I= Name: res/drawable-xhdpi-v4/ic_visibility_off_grey600_24dp.png SHA1-Digest: 6OfLCQcJqSkKVVduAE1sIGO7ud4= Name: res/drawable/abc_ic_ab_back_material.xml SHA1-Digest: BARhPfk2bP/lJe+gy67bgfoy+tI= Name: res/layout/design_navigation_menu_item.xml SHA1-Digest: Es36qkrs2ohFy3uijRP+Ur+CQl8= Name: res/drawable-v21/touch_highlight_background.xml SHA1-Digest: 6IadWpveEX8PumPwP847BweJlgg= Name: res/drawable-xxhdpi-v4/abc_text_select_handle_middle_mtrl_light. png SHA1-Digest: MwB5KqjjRjtmWFZ0l1ohdSVBfmk= Name: res/drawable-mdpi-v4/abc_list_divider_mtrl_alpha.9.png SHA1-Digest: f5w1/P3BOViOfigUbV/eR0uuTmE= Name: res/drawable-mdpi-v4/ic_reply.png SHA1-Digest: eKIvQlTj+MqJkkhH83v4XJEf2Cg= Name: res/drawable-xhdpi-v4/ic_emoji_objects_normal_light.png SHA1-Digest: mHYvK5ryHcFU0pYhXyA8BL9bxRE= Name: res/drawable-xhdpi-v4/ic_emoji_people_activated_dark.png SHA1-Digest: QNnJR4N5xGz+RltmJ6P3PkrriA8= Name: res/layout-v17/notification_template_media_custom.xml SHA1-Digest: rdASOHsCejAJ60Z7EWUQWinWYII= Name: res/animator/bottom_play_to_pause_animation.xml SHA1-Digest: 7f8HiUwoTj84cBIvXQhtx6kFMlc= Name: res/drawable-xhdpi-v4/ic_emoji_places_activated_light.png SHA1-Digest: h++4GsX2DR3yZjHveZN6Un2AmhQ= Name: res/layout/switch_compat_preference.xml SHA1-Digest: BcoiqEYKt0pTDgHI781bnYowk54= Name: res/drawable-hdpi-v4/abc_list_divider_mtrl_alpha.9.png SHA1-Digest: f5w1/P3BOViOfigUbV/eR0uuTmE= Name: res/drawable-mdpi-v4/ic_menu_barcode.png SHA1-Digest: /5GmDIrH2/6CRmnDFfrS9MmAmZQ= Name: res/drawable-xhdpi-v4/ic_audio_light.png SHA1-Digest: dFHlft4ev/OLD6O3/IxOV/VT9YM= Name: assets/backward SHA1-Digest: r/6p7b+IrWfsXOtXuSRa3XRryRU= Name: res/drawable-xhdpi-v4/ic_emoji_recents_normal_light.png SHA1-Digest: D5tvJODHVXxHRnrhM5wVnuF7PMQ= Name: res/drawable-xxhdpi-v4/ic_push_gray.png SHA1-Digest: c8b/usgphM6aewlBpulpNeXZ1KE= Name: res/layout/load_more_header.xml SHA1-Digest: sAB0PTtgkiBIW07vp3p5I8ymCfg= Name: res/drawable-xhdpi-v4/ic_missing_thumbnail_picture.png SHA1-Digest: EudZfqzfejDaDRqbpEr36SAilfQ= Name: res/layout/abc_action_menu_item_layout.xml SHA1-Digest: GVqWcYFG/JNanYa8Su924kaY0Ls= Name: res/drawable/conversation_list_item_unread_background_dark.xml SHA1-Digest: EsbJbXnqytwl+8RcQbOlwf8B+aA= Name: res/drawable-mdpi-v4/switch_bg_focused_holo_light.9.png SHA1-Digest: Zb5ZNlmnSJm17S8X88rrHismQoQ= Name: res/drawable-mdpi-v4/ic_advanced_black.png SHA1-Digest: xQTyMzRG1ABoqleiO9T2DU2xP0Y= Name: res/color/done_text_color.xml SHA1-Digest: dxC6/vV+0J6sCuda4BXCTjDxBc4= Name: res/drawable-hdpi-v4/abc_list_longpressed_holo.9.png SHA1-Digest: KQunCQh0E4bP0utgN0cHdQr9OwA= Name: res/layout/splash_screen_activity.xml SHA1-Digest: WhcxHp/AKpO+Q8ubyonRo7Nk+F0= Name: res/drawable-mdpi-v4/ic_app_protection_gray.png SHA1-Digest: l1oCP68e0zJsdRpoZiPDnEBMukA= Name: res/drawable-xxhdpi-v4/sms_selection_icon.png SHA1-Digest: 6Bxf623AFbKO/pbJNEBH5Xy6xAM= Name: res/drawable-hdpi-v4/sent_bubble.9.png SHA1-Digest: JGqPgezZhUUOMdpS7YyeaEXvFW4= Name: res/drawable-mdpi-v4/icon_dialog.png SHA1-Digest: 0tdoFlEu5jnsaJOE7xLDH96MevA= Name: res/drawable-mdpi-v4/ic_visibility_off_grey600_24dp.png SHA1-Digest: Aj01Gk5lbxDET1LAcsCb4YeErmQ= Name: res/drawable-xhdpi-v4/list_pressed_holo_light.9.png SHA1-Digest: 5rSZbdJDOTdM5kJhhIdl8m8briI= Name: res/drawable-xhdpi-v4/ic_unarchive_white_24dp.png SHA1-Digest: aBQ0fXhx8K9gwvMaHRRhQX5W9lI= Name: res/layout/timezonepickerview.xml SHA1-Digest: Dj3lhNq+C7ds1/CQyHXO1n8GvrU= Name: res/drawable-xhdpi-v4/ic_check_light_disabled.png SHA1-Digest: FX86kw3Z1JfWrWBIzFp81EFI38w= Name: res/drawable-xhdpi-v4/textfield_focused_holo_light.9.png SHA1-Digest: 9fXYckUA6bXM1wEDQ0rXYeMvIfw= Name: res/layout/color_preference_item.xml SHA1-Digest: vqvYzwEC3xr2q5l3nzPHqKleTXc= Name: res/layout/transport_selection_list_item.xml SHA1-Digest: /CADOXbj5pHVDjUwN4fw7XuRxSQ= Name: res/drawable-mdpi-v4/actionbar_icon_holo_dark.png SHA1-Digest: fXNn5dSPlex7zo8fJRc/GykpXo0= Name: res/drawable-hdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png SHA1-Digest: OGTAGSMNcF0Z/ZC0uBc4qemdptI= Name: res/drawable-xhdpi-v4/ic_menu_barcode.png SHA1-Digest: HEJnV9zA4JiO7drUo5P8axm6NFY= Name: res/drawable/import_export_item_background_light.xml SHA1-Digest: o7o721xldYwB6g8LEp/bYpO63n8= Name: res/drawable-xxhdpi-v4/ic_app_protection_black.png SHA1-Digest: o14xUEEPx8oZYathbadSli6ZQsI= Name: res/drawable/emoji_category_flags_light.xml SHA1-Digest: sG+4lQ00+HnzttTFyWXu9NBIhIM= Name: res/layout/abc_alert_dialog_material.xml SHA1-Digest: 0/JjElpoOkX474wjYAxVW9ldr9Q= Name: res/color/dialog_text_color_holo_dark.xml SHA1-Digest: OUiI84uJcXDDztFngu8VSJQ6LQY= Name: res/drawable-hdpi-v4/ic_visibility_grey600_24dp.png SHA1-Digest: +5MKdx1pD6i7rpUKoYjN5xCqBSY= Name: res/layout-sw600dp-v13/three_keys_view_leftright.xml SHA1-Digest: i5CqIH9cS4ef/6W5mCUC+ftHnEs= Name: res/anim/abc_popup_enter.xml SHA1-Digest: ZKpMd1TuL9jAkYWPue9RXki708E= Name: res/layout/blocked_contacts_fragment.xml SHA1-Digest: Zn/WBahw+yXO6vRYXgLbJQ3Lp4E= Name: res/drawable-mdpi-v4/abc_tab_indicator_mtrl_alpha.9.png SHA1-Digest: z0xEJNNl6qN3MKa3Uq4y93mF7Cw= Name: res/drawable-hdpi-v4/abc_ic_star_half_black_16dp.png SHA1-Digest: +fmiW7NvYuyLGVRupHZWlrAFb2o= Name: res/drawable-xxhdpi-v4/splash_open_padlock.png SHA1-Digest: 88Z9EUnY9DAqtmsw/olzjASMn08= Name: res/drawable-xxhdpi-v4/design_ic_visibility.png SHA1-Digest: zbNzwAi/FPJPX3HPChgFLOupALc= Name: assets/zone.tab SHA1-Digest: d0US6Zajzyow3w/OX7A+6NT3Oy8= Name: res/drawable-hdpi-v4/notify_panel_notification_icon_bg.png SHA1-Digest: inKyhhyZgO65645KR/OH06l6dAc= Name: res/layout-v16/conversation_list_item_view.xml SHA1-Digest: ewOd5Y16nNg3t9kHFpvyiQ/ivRo= Name: res/layout/notification_template_custom_big.xml SHA1-Digest: nZH2+ma7Ypd4nFBdIcnX7o8EGas= Name: res/layout-sw600dp-v13/calendar_date_picker_dialog.xml SHA1-Digest: 0EXb515hkEqCoPlqNWo2641c6Tc= Name: res/drawable-v11/emoji_category_nature_dark.xml SHA1-Digest: CX83I14m6Cjn4yX3nf46xs45J3o= Name: res/drawable-mdpi-v4/notification_bg_normal.9.png SHA1-Digest: ZmUYoZRjV5S78oUGJgKjRsWijjs= Name: res/layout/centered_app_title.xml SHA1-Digest: Lha/pO4JgIapzSiXkG3RPia9xJQ= Name: res/drawable-xxhdpi-v4/abc_scrubber_track_mtrl_alpha.9.png SHA1-Digest: mXQuXT+E6ctyqZNbnaBtZKfg0ZU= Name: res/drawable-hdpi-v4/ic_info_outline_light.png SHA1-Digest: yLfG2w486Xwg1gGhemkuibPaH7g= Name: res/drawable-mdpi-v4/ic_block_white_18dp.png SHA1-Digest: lcCRmfNUadRfENG/y7V0SukFJpg= Name: res/drawable-xxhdpi-v4/ic_info_outline_grey600_24dp.png SHA1-Digest: hUsQ+oKof/B1wXzOG2wczuBlXoY= Name: res/drawable-hdpi-v4/ic_recurrence_bubble_fill.png SHA1-Digest: A/gWISXw+9VDKN9tNw4Tl2Rlup4= Name: res/color/abc_primary_text_disable_only_material_dark.xml SHA1-Digest: fztyDM09XiKUbzo6Y6O2r9Xqs6k= Name: res/drawable/info_round.xml SHA1-Digest: UZ/381JABO8YY/CyQ+EQwB67nZs= Name: res/drawable-v21/avd_hide_password.xml SHA1-Digest: 3QtcdW2ge+OCJqEkWDqgxvWUHhI= Name: res/drawable-hdpi-v4/ic_launch_white_24dp.png SHA1-Digest: 5UIDgrlIZSwC+oevXwNDr7Mf37g= Name: res/drawable-mdpi-v4/ic_unarchive_white_36dp.png SHA1-Digest: i0NdcFQ/sn3N2wNU4pRTsoj9Hqs= Name: res/drawable-xxxhdpi-v4/fab_shadow.png SHA1-Digest: wbG2dpL50mv2M+7ytx2Z9btKlcg= Name: res/anim/slide_from_top.xml SHA1-Digest: NRMSsU5qemKGLU44qx35gMLtOZg= Name: res/drawable-mdpi-v4/ic_warning_dark.png SHA1-Digest: imXjuG9SUFEzM5Ky7Iz6004sLK0= Name: res/drawable-hdpi-v4/ic_content_copy_light.png SHA1-Digest: fk6cDF9XDO/tPVoXH7Au9mra318= Name: res/drawable-hdpi-v4/received_bubble.9.png SHA1-Digest: l1DcWbaW/Gm1hFu3pEriKWh+Z2g= Name: res/layout/keyboard_right_drawable.xml SHA1-Digest: WUmUZMy5YUW6uStd30yKBHU48lI= Name: res/drawable-hdpi-v4/abc_list_pressed_holo_dark.9.png SHA1-Digest: igV6Z9qyPsoUBNkEZPzj+DDt0kE= Name: res/drawable-xhdpi-v4/ic_lock_white_24dp.png SHA1-Digest: TJpUHsE2NBGPP9IuYWNr4vSPCI0= Name: res/drawable-xhdpi-v4/ic_reply_white_36dp.png SHA1-Digest: nmRdqTp2g/pdSXEHGdcZgtemSvg= Name: res/color-v11/abc_tint_default.xml SHA1-Digest: 1hpqbE55rVWDemrdHwXlQDB32zA= Name: res/xml/preferences_sms_mms.xml SHA1-Digest: JE6Lkr6vRU/ZICk6TH00Bmq7oQw= Name: res/drawable-xhdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png SHA1-Digest: tdbpGRMh8KHxMYAIK8x8FwOqXzM= Name: res/drawable-mdpi-v4/ic_emoji_places_normal_dark.png SHA1-Digest: uZ5dEURRi9chSSqRsAIvTm7dsvo= Name: res/drawable-xxhdpi-v4/ic_emoji_emoticons_normal_light.png SHA1-Digest: 76IJVDUWfrmZO8Tgc/4U7gYqgec= Name: res/drawable-hdpi-v4/import_database.png SHA1-Digest: UcPkcSNbC1STw6zeBomTq2Dwymc= Name: res/drawable-sw600dp-xhdpi-v13/ic_backspace_disabled_dark.png SHA1-Digest: kMBzMnDevZ0XLt1+5ae3cmCuN78= Name: res/drawable-xhdpi-v4/ic_emoji_objects_normal_dark.png SHA1-Digest: 6p2Zi3wq60U2o77Ut0VYOXS4tG4= Name: res/drawable-xhdpi-v4/ic_app_protection_gray.png SHA1-Digest: Dwj18TzfpDuVCp+Vs4gvwRqFiVc= Name: res/drawable-hdpi-v4/ic_action_warning_red.png SHA1-Digest: XOfrmlnFJIZFJRa3Nnl3j/T+uyo= Name: res/drawable-hdpi-v4/ic_info_outline_dark.png SHA1-Digest: 19ADfI6tdEL9JS+w9C3ODAtiQnc= Name: res/drawable-hdpi-v4/ic_account_box_light.png SHA1-Digest: U6N4kCu8QpPN3kdynkIG05UqFaM= Name: res/drawable-hdpi-v4/ic_notifications_black.png SHA1-Digest: 5obbL5gsVnHoftrtjUskEiQvqeA= Name: res/drawable-xxxhdpi-v11/icon_cached.png SHA1-Digest: sHpchMgX/CLVvvi8pYX0k2GJg90= Name: res/drawable-mdpi-v4/fab_shadow.png SHA1-Digest: udoU/cJmx1Xc951df0+aQCglRXc= Name: res/drawable-xxhdpi-v4/switch_thumb_disabled_holo_light.9.png SHA1-Digest: knt1e74vSbTtmi79u+13KXh3GPA= Name: res/drawable-hdpi-v4/alert.png SHA1-Digest: CsIZIT9nICR7yOVCgD/4N8RrL6Y= Name: res/drawable-hdpi-v4/ic_emoji_places_normal_light.png SHA1-Digest: Tjx0H33peYsF2Wqw77RtgtiKG40= Name: res/drawable-hdpi-v4/ic_reply_white_36dp.png SHA1-Digest: wkw+giaxX7aLi+E45Cu0fEnc5fQ= Name: res/drawable-xhdpi-v4/spinner_focused_holo_light.9.png SHA1-Digest: GULvT2ExbYbkv75q+kEpZUH9u2M= Name: res/drawable-xhdpi-v4/ic_create_white_24dp.png SHA1-Digest: YErWmfqMB9JsmsehTToG6eMaslM= Name: res/drawable/conversation_list_item_read_background.xml SHA1-Digest: 29/kx1aQosM0bao66+TnKaMQG4o= Name: res/xml/preferences_appearance.xml SHA1-Digest: nsZ3qRLFSqqkrR3E0p7Lr8zoqqM= Name: res/drawable-xxhdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png SHA1-Digest: AEtucgE23w85/isDYqNTWlxruFg= Name: res/anim/abc_slide_out_top.xml SHA1-Digest: 8TSJifDdlA1J4leugOVG9Peg+k4= Name: res/drawable-mdpi-v4/spinner_default_holo_light.9.png SHA1-Digest: nxjthQ61TKMyJJ5/85W2SC6qs+M= Name: res/color-v23/abc_tint_switch_thumb.xml SHA1-Digest: AYqXR24Imt/KEDO9CrmMOPStaIc= Name: res/drawable-xxhdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png SHA1-Digest: Yq5HoWLW1F/u1kVDMfrxjLA2Z9Q= Name: res/color-v23/abc_tint_spinner.xml SHA1-Digest: BBcfe9ziniPVPStDrP3v4C+knKk= Name: res/drawable/design_bottom_navigation_item_background.xml SHA1-Digest: CWW4mfISMH+Ot1PsBcU5OOmhiCU= Name: res/layout-v11/notification_template_big_media_custom.xml SHA1-Digest: 6K8wc7cnTvNaDsSKT7OY8MSGQI8= Name: res/drawable-v21/conversation_list_item_read_background.xml SHA1-Digest: CcD3lybuOgRWRC9JfV7U+/9POCc= Name: res/drawable-mdpi-v4/ic_delete_black.png SHA1-Digest: TYWWTcngvQ+noNg5VY2/mObifLE= Name: res/layout/conversation_list_fragment.xml SHA1-Digest: 3l/kgDKbrMCrbne+eAbLMwR4KlQ= Name: res/drawable-xhdpi-v4/ic_notifications_black.png SHA1-Digest: /SY0QU8mINEjkvYVAlsPZ4ZzPVs= Name: res/raw/whisper.store SHA1-Digest: hLdMCWiNl4nJacL59TYQ8lK+JUs= Name: res/drawable-hdpi-v4/ic_emoji_recents_activated_dark.png SHA1-Digest: Yk8oAfmNOUCBzGorthoUhHeImk4= Name: res/anim/fade_scale_out.xml SHA1-Digest: lhxvAKLBK4FCXkyEAaT5FHhx6Eg= Name: res/drawable-xxhdpi-v4/ic_video_light.png SHA1-Digest: rXa1DG9CfPTUoWc9l10WRyKbjZA= Name: res/drawable-hdpi-v4/ic_reply.png SHA1-Digest: aS2epjYciCOwQeQwokaHqSA0Kkk= Name: res/drawable-xhdpi-v4/ic_image_light.png SHA1-Digest: Lu0PosNPxOVGN+KYCd9o6C8JBDE= Name: res/drawable-xxhdpi-v4/abc_textfield_default_mtrl_alpha.9.png SHA1-Digest: p9584WImSwr0082/N/zkcvVq7yo= Name: res/drawable/conversation_item_header_background_dark.xml SHA1-Digest: wfTAaLO+JvtusD4leaJ4hBj59Wg= Name: res/drawable/emoji_category_recent_dark.xml SHA1-Digest: S0AnVp/pVgSOiX3IhSGDso30eUg= Name: res/drawable-ldrtl-xhdpi-v17/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: xzR4QYhDLijnhAqvCWT+8WMmqNQ= Name: res/drawable-xxhdpi-v4/ic_emoji_symbols_normal_light.png SHA1-Digest: Ap996kL1vRTFcK4uAPr/M6yhL1Y= Name: res/drawable-mdpi-v4/ic_forum_black_32dp.png SHA1-Digest: 2VihTgtkrcGRaPjMvAtOMPloPs8= Name: res/drawable-xxhdpi-v4/ic_lock_white_24dp.png SHA1-Digest: 3pS9rdIUkQKp5S30wMJ3YxeXMK8= Name: res/drawable-mdpi-v4/ic_textsms_black_32dp.png SHA1-Digest: 4FVbrPZlHa+YXKQHs3sbv+9p4sY= Name: res/drawable-hdpi-v4/ic_contact_picture.png SHA1-Digest: IwJgFsT9XfMJXcvoeXXuGl9CJVA= Name: res/drawable-hdpi-v4/ic_push_registration_reminder.png SHA1-Digest: o5uLzQ3Wi/5qGCLAszhvBS9UPVs= Name: res/drawable-mdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png SHA1-Digest: 7HpkfQXcTxrewbqOQTtoDixKAiE= Name: res/drawable-xxhdpi-v4/spinner_pressed_holo_light.9.png SHA1-Digest: tkF8+78AlJ7clz2yc6mvf/TVJfQ= Name: res/drawable/design_password_eye.xml SHA1-Digest: C+kKIgD0x3Pqpcr7269QZUkuaEQ= Name: res/drawable-xxxhdpi-v4/ic_clear_white_24dp.png SHA1-Digest: JpERTN3Wave8LS2gQZdD90HYHmA= Name: res/menu/media_preview.xml SHA1-Digest: BeeyU6JLag0xKxUdir2wHZygYOM= Name: res/drawable-mdpi-v4/switch_thumb_pressed_holo_light.9.png SHA1-Digest: MvirMfKCPj8aRdrk/qCwNQly7iQ= Name: res/drawable-mdpi-v4/ic_emoji_emoticons_activated_light.png SHA1-Digest: fI8cELlPlmEyJ3q/LmWYESynNn0= Name: res/drawable-xxhdpi-v4/ic_scroll_down.png SHA1-Digest: 2pNphPFslQVi4EypJwZlUbnSc1w= Name: res/drawable-hdpi-v4/ic_group_white_24dp.png SHA1-Digest: APgBld24JEB5OrspdN2DrUDntTQ= Name: res/drawable-hdpi-v4/abc_list_pressed_holo_light.9.png SHA1-Digest: 8fFdZoyOA0FyEP0K/a0QnLk0bbE= Name: res/layout-v21/message_details_header.xml SHA1-Digest: YO8xAg/qe0msCZ8FJl74U3Y+yMk= Name: res/drawable/abc_ratingbar_small_material.xml SHA1-Digest: gaRS2sbjCfcJo3xOrkhIdr9XwZg= Name: res/drawable-mdpi-v4/abc_text_select_handle_middle_mtrl_light.pn g SHA1-Digest: EAjKJ0Rc7Iao0PObDMnje62giVA= Name: res/drawable-xxhdpi-v4/abc_text_select_handle_right_mtrl_light.p ng SHA1-Digest: SRzXekbq93VNBlcB9Jps0im8dQs= Name: res/drawable-xxhdpi-v11/icon_notification.png SHA1-Digest: NCFI5Mn5oUMHXPpvT/+2fHeApgE= Name: res/drawable-mdpi-v4/ic_menu_remove_holo_light.png SHA1-Digest: nKigmEPh2ytFH29tSmzdel83ejA= Name: res/layout/abc_activity_chooser_view_list_item.xml SHA1-Digest: W0JUnTKi0F5FyHdiy48rrT0PvHA= Name: res/drawable-xxxhdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png SHA1-Digest: in/uM6gaoddhlniDyLN3qnCoO90= Name: res/drawable-xhdpi-v4/abc_textfield_search_default_mtrl_alpha.9. png SHA1-Digest: s9/qxuNt34tuDKZEbu3WbQxLGWs= Name: res/color/text_color_dark_theme.xml SHA1-Digest: xtQOr/sxxRTItllz5dWSIu9GbqA= Name: res/drawable-xhdpi-v4/ic_emoji_symbols_normal_light.png SHA1-Digest: 4Bp9wp3TULFiZtRxucglP1XqE5c= Name: res/drawable-mdpi-v4/ic_badge_24dp.png SHA1-Digest: s2Qq8SnVVSxEmxkyiOdFOMdRf2w= Name: res/drawable-xxhdpi-v4/ic_delete_black.png SHA1-Digest: D9qcTOg7POaY2NfJUD96EghjQr8= Name: res/drawable-mdpi-v4/abc_btn_radio_to_on_mtrl_000.png SHA1-Digest: u8lEY+2Bl006RY/NojCiasl0Huw= Name: res/drawable-xxhdpi-v4/ic_reply_white_36dp.png SHA1-Digest: Et1pDHvXSBblxuF1HtzUgxVHrS8= Name: res/drawable-xxxhdpi-v4/ic_circle_fill_white_48dp.png SHA1-Digest: U56E2atwabxebtuVEkDueTNjFiE= Name: res/drawable-xhdpi-v4/dialog_full_holo_light.9.png SHA1-Digest: glc2B1J33SBfEnymVLanXh/77ko= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_972 SHA1-Digest: Tl50phuH8I0GxBh/Drf9vHens0Q= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_971 SHA1-Digest: US/xxHef76UTD882Ez5EnNvcaws= Name: res/drawable-v21/design_bottom_navigation_item_background.xml SHA1-Digest: KvnwLqUMXEglxgfoi5W0JShH0ks= Name: res/layout-v16/audio_view.xml SHA1-Digest: njJJ1HHW5uJdG/n0LTZHePpOQS0= Name: res/drawable/conversation_list_divider_shape_dark.xml SHA1-Digest: 9iXwhZT5/M0X6Yhcmm4h+YjTnLs= Name: res/layout-v22/abc_alert_dialog_button_bar_material.xml SHA1-Digest: ifIi2EmqhnYhwUyaZKxE7+oG+a8= Name: res/drawable-xxhdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png SHA1-Digest: YO4TlWAjr+5kRYUxAOUp6QEa7gg= Name: res/layout/push_recipients_panel.xml SHA1-Digest: EzGjF1IPF7U6lur8BBhcBJU9gfA= Name: res/layout/blocked_contact_list_item.xml SHA1-Digest: lqVgNxm8BmYDMiL5ZlGDMl1H4WM= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_595 SHA1-Digest: Rdp/JhmBpcj6Pr5wipf91JAKESY= Name: res/drawable/emoji_category_symbol_light.xml SHA1-Digest: Ju9NiYprgQLlxTm5XBhkYezLm/g= Name: res/drawable-hdpi-v4/ic_emoji_emoticons_normal_dark.png SHA1-Digest: r8Ri5hv5SAmtXNCrj1CYsb0/zJM= Name: res/drawable-xxhdpi-v4/abc_list_pressed_holo_dark.9.png SHA1-Digest: VPmKAqmLJ6ke7a8XellbYKiIBh8= Name: res/drawable-xhdpi-v4/ic_emoji_nature_activated_light.png SHA1-Digest: sKVcvD9Wh8iWkzK9kzNai9xOAnw= Name: res/drawable-xhdpi-v4/icon_cached.png SHA1-Digest: G7TNBOQsnyDH/X5A0H7KlD7+X84= Name: res/drawable-hdpi-v4/switch_bg_disabled_holo_light.9.png SHA1-Digest: Evi73cVw1F7NXXrV76QvRIFOeFA= Name: res/drawable-mdpi-v4/ic_emoji_nature_normal_dark.png SHA1-Digest: Sl1nqozZKUy0xSe37ZInTPLypIo= Name: res/drawable/ic_backspace_light.xml SHA1-Digest: ArAaZ6HHiiuf0ps1yq9gj8Okqvg= Name: res/drawable-xhdpi-v4/ic_forum_black_32dp.png SHA1-Digest: SmJttX2gOPzZ3n7t+N5MtOr3pMU= Name: res/drawable-hdpi-v4/ic_emoji_places_activated_light.png SHA1-Digest: ayvZGbMCE9vA/RrSp056ftDDN88= Name: res/drawable-hdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png SHA1-Digest: fOZLRa6EGLts4vAJ9jZTI2UOyZ0= Name: res/drawable/rounded_rectangle.xml SHA1-Digest: OjIEQM0LIvEj7gE45R6ehI0mFJ8= Name: res/drawable-xhdpi-v4/ic_lock_white_18dp.png SHA1-Digest: yPHmivjr7+10Uc69s0UTzHHdczs= Name: res/drawable-hdpi-v4/lockscreen_watermark_light.png SHA1-Digest: kZukE3axdMWdS8KMYqwFzRR9cf4= Name: res/drawable-hdpi-v4/ic_lock_light.png SHA1-Digest: yr0Gtpwz3cFbLVAd0HaJokYcN8w= Name: res/layout/conversation_activity_attachment_editor_stub.xml SHA1-Digest: abwLqp13I+gFzfpj6+uenDioU0A= Name: res/drawable-xhdpi-v4/ic_forum_grey_32dp.png SHA1-Digest: 5tHLlYfg6OF+oA1ZeZ0y94dizG8= Name: res/layout/color_fragment.xml SHA1-Digest: mxjiLCZfoiy62pssAJkMzJ1cSSs= Name: res/drawable/widget_unread_count_background.xml SHA1-Digest: /4n7PCi4asBAtgNk/kz6nukmZ04= Name: res/drawable-xxxhdpi-v4/abc_tab_indicator_mtrl_alpha.9.png SHA1-Digest: 3kAOCvPKDybNG1/Fr21Y+cg522o= Name: res/drawable-v21/circle_touch_highlight_background.xml SHA1-Digest: RCp6OOrQn1/KjE6jGOF2niZjcBY= Name: res/layout-v21/recipient_preference_activity.xml SHA1-Digest: WOfr0gullD80mtt/Fc79KMZbteQ= Name: res/drawable-mdpi-v19/switch_thumb_pressed_holo_light.9.png SHA1-Digest: UGB8G0Ku26t0HqFX7D5HJk45fq0= Name: res/drawable-xxhdpi-v4/ic_video_dark.png SHA1-Digest: Fg668StlRQ043EOocA2qQhycAsc= Name: res/drawable-xxxhdpi-v4/icon.png SHA1-Digest: o5/gjAEwK5uCNV8+mM/jhtLwPP0= Name: res/drawable-xxxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_005 .png SHA1-Digest: TdzAFNg4ycPCAcJ8yYIT8wvN194= Name: res/drawable-ldrtl-hdpi-v17/ic_send_white_24dp.png SHA1-Digest: wdHEaIW5RR6TSdUi7MzjLO+dLlo= Name: res/drawable-xxxhdpi-v4/ic_archive_white_48dp.png SHA1-Digest: /rdVh0e9MrmxrFT2l+kvrf7Oggk= Name: res/drawable/emoji_category_objects_dark.xml SHA1-Digest: Y6B+kuodwXhJDYZQpE1FkS9LxIw= Name: res/drawable-xxhdpi-v4/fab_shadow_mini.png SHA1-Digest: JuuXLwnTGlBkJag042XseCTGUSQ= Name: res/layout/conversation_item_received_audio.xml SHA1-Digest: sVV0Ye74Ir/9JHHGuQQ2rJBdcAg= Name: res/drawable-mdpi-v4/sent_bubble.9.png SHA1-Digest: 1sjPXZyhkKG475gQNSuvAeTaun4= Name: res/drawable-xxhdpi-v4/ic_attach_white_24dp.png SHA1-Digest: ZvVKksE6mfF73WzczOAzcllfguw= Name: res/drawable/compose_background.xml SHA1-Digest: zAZp74C8XCW9PDL4CsRYvvQmq9c= Name: res/layout/date_picker_view.xml SHA1-Digest: kZyt8l2Ojc7TCWDbo5idrz4PSzk= Name: res/drawable-mdpi-v4/ic_content_copy_dark.png SHA1-Digest: uj1qp2YktZnz25DDjfAxQAbU04U= Name: res/drawable-mdpi-v4/ic_emoji_recents_normal_dark.png SHA1-Digest: DJe+I+bmT3wwxrAjpBSgs6u1NVk= Name: res/drawable-mdpi-v4/dialog_full_holo_dark.9.png SHA1-Digest: f6ia9cfObNSnjO92EThmcdso0Qg= Name: res/drawable-mdpi-v4/abc_ic_star_half_black_36dp.png SHA1-Digest: KFgfLmmiYai76gReK6O3CrVx8ns= Name: res/drawable-hdpi-v4/abc_btn_check_to_on_mtrl_015.png SHA1-Digest: tpEM52vWcakmOwaErjJ4ZPrPYyg= Name: res/drawable-mdpi-v4/divet_lower_right_dark.png SHA1-Digest: WIoUPZdYM6t3CwssccpkwtWG3fI= Name: res/drawable-xxhdpi-v4/ic_image_light.png SHA1-Digest: edv/Y1KdCwrrt1Z54bVHCWtcKyc= Name: res/menu/contact_selection.xml SHA1-Digest: POaHN1ChfLneiqRwV1PnCum0mVs= Name: res/drawable-xhdpi-v4/ic_menu_search_holo_dark.png SHA1-Digest: FtrLmstk5hLDWAxdslzlf3AHtY8= Name: res/drawable-hdpi-v4/dialog_full_holo_dark.9.png SHA1-Digest: 6D+naJ/vT+snQDqAQOf8FDr7pCM= Name: res/color/abc_tint_switch_thumb.xml SHA1-Digest: v8XhH2hUxG24k0yvjO3FaMwufGk= Name: res/drawable-hdpi-v4/ic_backspace_disabled_light.png SHA1-Digest: nnubVwr7Sy/Q0WLycs3D4sO5LGE= Name: res/drawable-xxhdpi-v4/ic_reply.png SHA1-Digest: QaSH4wLqEhMDOSvU8Sg3e6uFNVY= Name: res/drawable-hdpi-v4/ic_message_white.png SHA1-Digest: MkdV8JUVcPsxsccNYv0v5s95uvE= Name: res/drawable-xxhdpi-v4/ic_send_insecure_white_24dp.png SHA1-Digest: 7B6dnoYSRH6lkxfWGOJo95HKRo0= Name: res/drawable-hdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.pn g SHA1-Digest: p9AZr65Fs0yg5A5RKqfJElcikR8= Name: res/layout-v17/abc_popup_menu_header_item_layout.xml SHA1-Digest: 4bETilyMf1f471rW0prWDl+hKLE= Name: res/layout-v17/notification_action.xml SHA1-Digest: 8ZRmxwDdiPexmskS8rI24tCoRvE= Name: res/drawable/background_pane.9.png SHA1-Digest: uRUD8GBrgiNG4l5dimWEZT7nc20= Name: res/layout-v16/conversation_item_received.xml SHA1-Digest: GK5H2YaM+chtPJOP1mZ3to7TgsU= Name: res/drawable-xhdpi-v4/ic_arrow_forward_light.png SHA1-Digest: q9x2E1eADGdmpgXLDmjo0qb6Bzk= Name: res/drawable/emoji_category_people_light.xml SHA1-Digest: JWHxgdaJ5JIkkd00fQZEJAuJ8KY= Name: res/layout/notification_template_media_custom.xml SHA1-Digest: oNH5XYRZJWEkM0v/OygHz8hJfIg= Name: res/drawable-xhdpi-v4/ic_forward_white_24dp.png SHA1-Digest: xdw1k9Z4ZZfFwqQXdPErH1TZvXU= Name: res/drawable-xxhdpi-v4/ic_error_red_18dp.png SHA1-Digest: +2M7xp+/T/hKg+NkVPdbZ0DyTqU= Name: res/drawable-xhdpi-v4/ic_message_black.png SHA1-Digest: uKaKfpxeOu4b8ZJ5Qtd7MB6+zUA= Name: res/drawable-xxhdpi-v4/ic_keyboard_white_24dp.png SHA1-Digest: b+mYcSoWD7nfLADe99gyCWpwKis= Name: res/drawable/emoji_category_recent_light.xml SHA1-Digest: Ou8VeFgJTkCmSB3Aw6SoPPZapVY= Name: res/drawable-xxhdpi-v4/ic_app_protection_gray.png SHA1-Digest: eIck3aADlr+yZAQftO893QqUP84= Name: res/anim-v21/design_bottom_sheet_slide_in.xml SHA1-Digest: /sfmaMejemtjucshId3pph9anUM= Name: res/drawable-xhdpi-v4/list_selected_holo_light.9.png SHA1-Digest: H2X9BKxBdFAOYEppP+vczoJ/LCU= Name: res/drawable-xhdpi-v4/ic_send_insecure_white_24dp.png SHA1-Digest: BKk82nammTaZyWZU4Zot4YHuTcs= Name: res/drawable-hdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png SHA1-Digest: kv8Z2aiviTOXDoPOY4/vyUE5lng= Name: res/drawable-xhdpi-v4/notification_bg_normal_pressed.9.png SHA1-Digest: XRK+0qTSsEHgbRKmsFa87e2SI/4= Name: res/drawable-xxxhdpi-v4/ic_scroll_down.png SHA1-Digest: bhMqEDS1tdSsjY7xeFk7dQKKg9U= Name: res/drawable-xxxhdpi-v4/abc_text_select_handle_left_mtrl_light.p ng SHA1-Digest: TQlbr5inRLGdVAzp0VH/BNJZyNo= Name: res/drawable-mdpi-v4/ic_app_protection_black.png SHA1-Digest: Vmif57DOxJYBXpueUYz/Dy2QiwY= Name: res/drawable-xxhdpi-v4/ic_content_copy_light.png SHA1-Digest: /03qSwRDQLrgFxWcRhejRF0k1fU= Name: res/drawable-xxhdpi-v4/ic_error_white_18dp.png SHA1-Digest: zLCyWgp+se7ARtP1rpa9t4vXC6k= Name: res/layout/abc_screen_toolbar.xml SHA1-Digest: LjpbeMlhRLwfimRRepF3E1Wd3iM= Name: res/drawable-xxhdpi-v4/abc_ic_star_half_black_48dp.png SHA1-Digest: QnhqhmaaBESNVdVhbQn1hIhZFYA= Name: res/layout/database_upgrade_activity.xml SHA1-Digest: 8ToclyWzXUYSqPU6SHA3neEmVgI= Name: res/drawable-v11/emoji_category_symbol_dark.xml SHA1-Digest: Bsh6VYChXsMvueGZpvzRmBkyrq8= Name: res/drawable-mdpi-v4/ic_download_circle_fill_white_48dp.png SHA1-Digest: 9/qDSW2eRP9jfOP/Z0iKMg+C39g= Name: res/drawable-xxxhdpi-v4/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: OqSIVlkrKIYR7cyOW2HdJP/h5io= Name: res/drawable-xhdpi-v4/ic_select_all_white_24dp.png SHA1-Digest: ad6/USV2mN6REVsn/edWPnEIH64= Name: res/drawable-xhdpi-v4/switch_bg_disabled_holo_light.9.png SHA1-Digest: lihXWFZsEX3Y2VZnZQ8xgJ4HqYc= Name: res/layout/transfer_controls_view.xml SHA1-Digest: kUkmavCCLbl+w7XsCCRzVqtjybQ= Name: res/drawable-mdpi-v4/sms_system_import_icon.png SHA1-Digest: l5z4MnNJTB2P8G2sJd2dJ/GakvY= Name: res/drawable-xhdpi-v4/icon.png SHA1-Digest: QhfVY7UBQilNAfrHJXWil0t74RI= Name: res/drawable-xxhdpi-v4/abc_text_select_handle_left_mtrl_light.pn g SHA1-Digest: ivQtj+4di/y5dhzH685N6IbzXYE= Name: res/anim/slide_from_right.xml SHA1-Digest: R/EvCIayWDXTgntzi87/TffROjA= Name: res/drawable-mdpi-v4/ic_emoji_places_normal_light.png SHA1-Digest: MarlqNR+06iKTB/2P128Kbrw4L4= Name: res/drawable-xxhdpi-v4/switch_thumb_pressed_holo_light.9.png SHA1-Digest: rdXvsbLrMDJEfRgxFdrCnH6Oj6A= Name: res/layout/design_layout_snackbar.xml SHA1-Digest: Qm0yXxP750AN9Zs3M+gCLmrfBWk= Name: res/drawable-mdpi-v4/textfield_default_holo_light.9.png SHA1-Digest: UnLnYU6MD2MOR62lCItQOD29xjE= Name: res/drawable-hdpi-v4/ic_menu_add_field_holo_light.png SHA1-Digest: /GOsJbP0W9Qv2JEkpnr3LP2Lsr0= Name: res/layout-v17/export_fragment.xml SHA1-Digest: qYX7mhpFkMcMxFoqI373UpjRDTY= Name: res/drawable-xxhdpi-v4/ic_unlocked_white_24dp.png SHA1-Digest: WXDbx5f4KO73GnbhLd1QjgZXBoA= Name: res/layout/reminder_header.xml SHA1-Digest: sXqJA2ZQKdHSur+fn8XUDpanODA= Name: res/drawable-mdpi-v4/ic_emoji_people_normal_light.png SHA1-Digest: NFERmN1aL/T2081V6Bhvcp/GNno= Name: res/drawable-xxhdpi-v4/ic_send_push.png SHA1-Digest: uyrpO+blmlxacSsDRtn8/QX++G0= Name: res/drawable-xxhdpi-v4/ic_image_dark.png SHA1-Digest: NUtzuGCNGCNK8WMP9hjCr5MVsBw= Name: res/drawable-xhdpi-v4/ic_done_white_18dp.png SHA1-Digest: 4vMrikq9aYsg1DjcpDsaiNrYP50= Name: res/drawable-xxhdpi-v4/list_longpressed_holo_light.9.png SHA1-Digest: I+5+I8Glvy2IsIw0hQ/hFirU8cE= Name: res/drawable-hdpi-v4/notification_bg_low_normal.9.png SHA1-Digest: kk7ZIosN3+pslvIcX8e6jJgtitw= Name: res/drawable-xhdpi-v4/ic_download_circle_fill_white_48dp.png SHA1-Digest: RIvuVHlDozhalhYGjVDd5DOtFGk= Name: res/drawable-xxhdpi-v4/ic_send_sms_secure.png SHA1-Digest: x1sdT9HIlRjIOfhHiIBrV2ijbLQ= Name: res/drawable-hdpi-v4/abc_btn_radio_to_on_mtrl_015.png SHA1-Digest: W6K3P94iAz0CiSFCp6GiJlxogqs= Name: res/drawable/abc_list_selector_background_transition_holo_light. xml SHA1-Digest: AdlBQF7mCKx3VlJQ4HaRjQeNXyo= Name: res/layout/recurrencepicker_freq_item.xml SHA1-Digest: P7PQYxGG9LY7vr1fAs/e5NanpgM= Name: res/drawable-xhdpi-v4/ic_arrow_forward_dark.png SHA1-Digest: QhnF5j0tTP2JZzbe3Yy2IDBpLKw= Name: res/drawable-xhdpi-v4/notification_bg_low_normal.9.png SHA1-Digest: 0ugTUuZHAnkDPHn8gE19ZKsgmZw= Name: res/drawable-mdpi-v4/abc_text_select_handle_left_mtrl_dark.png SHA1-Digest: ZmbQ2i0OTo0eavn7LnXVqs7Kbl0= Name: res/drawable-hdpi-v4/ic_content_copy_dark.png SHA1-Digest: Lm6gLN2ljsitsRROc7Ux+A4FXiU= Name: res/layout-v17/notification_template_big_media_narrow.xml SHA1-Digest: Jr3BP0TMtCz20tWWd1csBv2DWXw= Name: res/drawable-mdpi-v4/ic_volume_up_dark.png SHA1-Digest: Ky6UbWwiL7NHQoImRhrIq1TsNng= Name: res/drawable-mdpi-v4/ic_volume_off_white_18dp.png SHA1-Digest: 2tno0ARsgceSjzJjWPa2teDkmCw= Name: res/drawable-xhdpi-v4/ic_audio_dark.png SHA1-Digest: pvZ/oBqSVFnUnQsvwfQhgsk1KpY= Name: res/drawable-hdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png SHA1-Digest: 9I5uBrEaa3rXA0AACtIBgaW++Q4= Name: res/color/abc_primary_text_material_dark.xml SHA1-Digest: Zzpm2HGH6H5LoI27zVpNdjRi+qI= Name: res/layout/notification_template_media.xml SHA1-Digest: vZ3txGgpJJnhLxb+zSvtWDjuaas= Name: res/drawable-xhdpi-v4/list_focused_holo.9.png SHA1-Digest: Kw0Qo9eKlw06/oxLHYSWR6VftBw= Name: res/drawable-hdpi-v4/list_selector_background_selected.9.png SHA1-Digest: otna3L08LP49gXxuQvuRvsKnTT4= Name: res/drawable-xhdpi-v4/ic_emoji_places_normal_dark.png SHA1-Digest: N9KlLkDYf8JVppzfm/IbuAbzWIw= Name: res/drawable-hdpi-v4/ic_call_split_white_24dp.png SHA1-Digest: p7+qYquJusVV+/JHiMfkFBB2uZ4= Name: res/drawable-xxhdpi-v4/transfer_controls_background.9.png SHA1-Digest: YwBh/LyZpJuphfkJ+yVu50osyR8= Name: res/layout-v13/select_dialog_singlechoice_material.xml SHA1-Digest: DFY+69ktUBOWthKRwMCsCRPDpG4= Name: res/layout-v17/notification_template_custom_big.xml SHA1-Digest: gs8LQ39s5+1YXyvWg3XT+3ocV+Y= Name: res/drawable-hdpi-v4/abc_text_select_handle_middle_mtrl_light.pn g SHA1-Digest: 0CPerofud1XH0R30L0HWs3Eevyk= Name: res/drawable/conversation_item_sent_indicator_text_shape_dark.xm l SHA1-Digest: JovCfRQ/2H0EkjnIp1jWoRlqvbo= Name: res/drawable-xxhdpi-v4/abc_ic_star_half_black_36dp.png SHA1-Digest: L+/mwEcCSClPjbtRIz+isSJt7Zc= Name: res/color/abc_tint_switch_track.xml SHA1-Digest: 2+T5h4qZT3tgSEpBE5EDOFVT4QE= Name: res/drawable-xxxhdpi-v4/ic_send_insecure_white_24dp.png SHA1-Digest: 5mN8PxdM1CEhGcDgRLhjvN4aenA= Name: res/drawable-mdpi-v4/telephone.png SHA1-Digest: 9FGPw0WAKpSSaTd0HEd05vpiQt8= Name: res/drawable-mdpi-v4/ic_save_all_white_24dp.png SHA1-Digest: 5gQT69RlzWI04CFd1FnTJZmwDJM= Name: res/layout-v21/notification_action.xml SHA1-Digest: PEhf48jOXBA5qkj5jCO+sKO3Xk8= Name: res/drawable/navigation_empty_icon.xml SHA1-Digest: dGWI+PA1xIe4F96rHxKHFJxaka4= Name: res/drawable-xhdpi-v4/ic_emoji_recents_activated_dark.png SHA1-Digest: K/zgXHsDeAiskqa9a/PUoAb2AvE= Name: res/drawable-xxhdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png SHA1-Digest: NRcHxLdsX/Th2xTrioD1KYFYeK8= Name: res/drawable-xxhdpi-v4/sent_bubble.9.png SHA1-Digest: JlBo2LcLmyvycEGbrbpgPJ1rbv8= Name: res/drawable/switch_track_holo_light.xml SHA1-Digest: Eo5MokNAcjuPCs208WPinvrsjSk= Name: res/drawable-hdpi-v4/ic_emoji_emoticons_normal_light.png SHA1-Digest: FgmZlOfVN1rD+CH766Mmvh3NhAA= Name: res/drawable-xxhdpi-v4/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: aLOtkEElPKVQnb/x08i/wBkFiH8= Name: res/drawable-xhdpi-v4/abc_ic_menu_share_mtrl_alpha.png SHA1-Digest: DTeGNcY/gdR9X+UQ3ft0flJ139w= Name: res/drawable-mdpi-v11/icon_cached.png SHA1-Digest: bWjXi9cQeu6bWJMLj3jYj2X5PAE= Name: res/layout/abc_activity_chooser_view.xml SHA1-Digest: 6NrTRoAPSzCvGGEddu+u1rad9lA= Name: res/drawable-xxhdpi-v4/ic_menu_search_holo_light.png SHA1-Digest: oqGMNvyOAw/Sdy8/PletKcOIEa4= Name: res/menu/key_scanning.xml SHA1-Digest: UctbhwtsFtrITbdZGf/9Cs79RAc= Name: res/layout-v16/conversation_item_sent.xml SHA1-Digest: ptvJ+benw2A+ikCMWM9UitsRJPw= Name: res/drawable-hdpi-v4/ic_emoji_nature_normal_dark.png SHA1-Digest: QYocdBCKKv2e2ofEk8wfVdfVbx4= Name: res/drawable-xhdpi-v4/ic_mood_white_24dp.png SHA1-Digest: PRxbL+zUh8rXMbA8cU6w7aum2O4= Name: res/layout-v17/notification_template_big_media_custom.xml SHA1-Digest: mxosU1f61wPXGIvZfg/T6gkImcM= Name: res/layout/media_view_remove_button.xml SHA1-Digest: Z9uZCVkqmrC5DOX/oXvQagCoNbQ= Name: res/drawable/conversation_attachment_close_circle.xml SHA1-Digest: Hq4kBHAnVS0k5VX3vLOaMLmM/1I= Name: res/drawable-hdpi-v4/ic_push_gray.png SHA1-Digest: 1sFcllHROkVQm/p7MnDHmYz5eoQ= Name: res/animator/bottom_pause_to_play_animation.xml SHA1-Digest: 7f8HiUwoTj84cBIvXQhtx6kFMlc= Name: res/drawable-xhdpi-v4/ic_emoji_emoticons_normal_light.png SHA1-Digest: 6dRyqVq/Bpj470mPRDxw+j+gv1M= Name: res/drawable-xxhdpi-v4/switch_bg_focused_holo_light.9.png SHA1-Digest: NhiFyZpL/UFmyLAi93FEdt3bouY= Name: res/layout/empty2.xml SHA1-Digest: wnS9P8OkImc/tnKJnsSet9DvBz0= Name: res/layout/design_menu_item_action_area.xml SHA1-Digest: +CaSrRO+YIeuLR//AbmNORoSW6o= Name: res/drawable-v11/emoji_category_symbol_light.xml SHA1-Digest: S4KbeTJw5wwr/9tLDcglMDRZ4A4= Name: res/layout-land/calendar_date_picker_dialog.xml SHA1-Digest: DTEvwBiBAs8Zx8lzI8d7Yxok/cg= Name: res/color/abc_tint_spinner.xml SHA1-Digest: 4iVhO6HftwPxxzWhGE9nvzm3wdM= Name: res/drawable/ic_backspace_dark.xml SHA1-Digest: kK6WMDP0553tSL5Ig3R8OsalYh4= Name: res/color-v23/abc_tint_btn_checkable.xml SHA1-Digest: +QyTGetrtaNPbuACHNcF9nOfp2c= Name: res/layout/keyboard_right_drawable_with_header.xml SHA1-Digest: FAC3tnMsk157+Mb8A6YeI7YQN8s= Name: AndroidManifest.xml SHA1-Digest: pos9Uo0H8CciJ4P55bBrbNkzTu8= Name: res/drawable-xxxhdpi-v4/ic_reply_white_36dp.png SHA1-Digest: JFrKb7Z9QNRfu6OtxfHY6NeGjLg= Name: res/drawable-hdpi-v9/icon_notification.png SHA1-Digest: PuSZfSqVgmCdbkGoQ/wSfTfKWXM= Name: res/layout/fragment_submit_log.xml SHA1-Digest: kbXx9AP2PSn4e7wJ1TWIialIBbQ= Name: res/drawable-mdpi-v4/list_selector_background_selected.9.png SHA1-Digest: qxEi8kmZgQ876B6Q57MNXtffTj0= Name: res/drawable-xhdpi-v4/sent_bubble.9.png SHA1-Digest: x1LavT6RtZ4zK44/4apQftPRZf4= Name: res/drawable-mdpi-v4/ic_lock_white_24dp.png SHA1-Digest: k38KhyZ93Rj0ZJ6bTEynyrgD7UU= Name: res/drawable-mdpi-v4/ic_push_gray.png SHA1-Digest: 13WJHd5q2Ahp9uU8HAipqXAjWc8= Name: res/drawable-xhdpi-v4/textfield_disabled_holo_light.9.png SHA1-Digest: 6kr6+a7d5GsQfVMreRc+SmQOKzc= Name: res/color/abc_tint_default.xml SHA1-Digest: Cj0w9Ew2rX4ZyCzvg/1RtsNqBUc= Name: lib/mips/libcurve25519.so SHA1-Digest: fnEtlnyCW+CCsOTkWuRjerMx3Tk= Name: res/drawable-xxhdpi-v4/ic_create_white_24dp.png SHA1-Digest: Qv2FReVOsuiuXc6rlNON/RF0QGY= Name: res/drawable/pause_to_play_animation.xml SHA1-Digest: V3CIgB0TLJoQjO+eGe31gEnqOKk= Name: res/drawable-hdpi-v4/ic_attach_white_24dp.png SHA1-Digest: hxmJQR+Pz9G2zaJ1fO47E36ilVo= Name: res/drawable-mdpi-v4/ic_emoji_recents_normal_light.png SHA1-Digest: 7fYNOpcf+J5rpJM+V2hxgtJga/I= Name: res/drawable/touch_highlight_background.xml SHA1-Digest: 9D8FMGAktPIKHe1QYVlbL4T2bHA= Name: res/drawable-xhdpi-v4/ic_play_circle_fill_white_48dp.png SHA1-Digest: ZxSr9NEiosFeSFcKMWj2TyuCn9M= Name: res/layout-v11/notification_media_action.xml SHA1-Digest: xk6Nv+akCynB9a9MstuHUvrigc0= Name: res/drawable-xhdpi-v4/ic_warning_light.png SHA1-Digest: q0UxUvig08oexgA/mJG+pHXZeig= Name: res/drawable-xxhdpi-v4/ic_forum_grey_32dp.png SHA1-Digest: zfLrcaLw9MDbUGCChbbJC6X2vQo= Name: res/animator-v11/rotate_90_animation.xml SHA1-Digest: vCHon/zb8+I+tgv5eAXXGWcch9Q= Name: res/drawable-xhdpi-v4/received_bubble.9.png SHA1-Digest: gcv90BhHf7spJ97oEUWp1vl90m0= Name: res/drawable-xxhdpi-v4/divet_lower_right_dark.png SHA1-Digest: jyB7LGFFsfpMRiD5cBDnVpU2RF8= Name: res/drawable-hdpi-v4/ic_send_secure_white_24dp.png SHA1-Digest: tkxExImE54L1mrPJnbnsEFe7YKQ= Name: res/drawable-xhdpi-v4/design_ic_visibility.png SHA1-Digest: XzXZlPxYfuQXzdfnGMLOPy2zBys= Name: res/drawable-v21/conversation_list_item_unread_background.xml SHA1-Digest: N1Iz07XE+nqdqBg9fH6xj5xds+0= Name: res/drawable-xxhdpi-v4/ic_emoji_nature_activated_dark.png SHA1-Digest: Zwbx2B77yBJ2KFCLfem8UvQ7/d4= Name: res/drawable-ldrtl-mdpi-v17/ic_send_white_24dp.png SHA1-Digest: d9D+dFHq5pcFrHc+3b4nVL6Jpr4= Name: res/drawable-xhdpi-v11/icon_cached.png SHA1-Digest: WXYwe2ZPEkhUlCqRpy7Fi6mr9TM= Name: res/drawable-mdpi-v4/ic_emoji_flags_normal_dark.png SHA1-Digest: LZZgv0dmbJRyZidsyghMmuTpP1A= Name: res/drawable-xxhdpi-v4/abc_text_select_handle_left_mtrl_dark.png SHA1-Digest: 5z9/n+cRKfgbsXkUM056zH3FCVY= Name: res/drawable-sw600dp-xhdpi-v13/ic_backspace_disabled_light.png SHA1-Digest: kMBzMnDevZ0XLt1+5ae3cmCuN78= Name: res/layout-v13/database_migration_activity.xml SHA1-Digest: Vfp5/D6oZcKvcg7J1GUVRHlGWp8= Name: res/drawable-xxhdpi-v4/ic_movie_creation_light.png SHA1-Digest: J6AGqej2x+M+XJ8JN3JtZ/6Wx8U= Name: res/drawable-hdpi-v4/ic_add_white_24dp.png SHA1-Digest: d8VcBCnSk44fNTKCt4XSFXPtyZo= Name: res/drawable-hdpi-v4/fab_shadow.png SHA1-Digest: QcPJ+aww0O/T4fX/NdSxxz0gL5E= Name: res/drawable-v21/conversation_list_item_unread_background_dark.x ml SHA1-Digest: SritqTfucM34VdX3Wq5TrcRj3A0= Name: res/drawable-mdpi-v4/ic_info_outline_light.png SHA1-Digest: hDBWUneztadWl+2LCS2PF3PVayM= Name: res/layout-sw600dp-v13/three_keys_view_right_drawable.xml SHA1-Digest: Ed3lqHofQXUKJnEKuPzOOoZNkEA= Name: res/drawable-xhdpi-v4/ic_brightness_6_gray.png SHA1-Digest: In1N9+Z54wMBLaMQk7yhzQEK+UY= Name: res/drawable-xhdpi-v4/abc_text_select_handle_left_mtrl_light.png SHA1-Digest: g81CUa1lR0Ts/TFU+9EVs79w2q4= Name: res/drawable-v21/design_password_eye.xml SHA1-Digest: HVHJTN2P1VIy7McjbW2zKNHTZ/k= Name: res/drawable-v11/emoji_category_nature_light.xml SHA1-Digest: APCRNVaaYVwvFd3ETZY/JfKdzKg= Name: res/anim/slide_to_top.xml SHA1-Digest: b/7F73oaOgl8QTgwjZirDWc5DsI= Name: res/drawable-xhdpi-v4/ic_emoji_emoticons_activated_light.png SHA1-Digest: S6TvtzA7Bo/XtCkIK2VkoIS82ik= Name: res/drawable-xhdpi-v4/ic_delivery_delivered_dark.png SHA1-Digest: YVsN6slHWNaCzpokvQgLqC+fq6I= Name: res/drawable-xxhdpi-v4/abc_list_divider_mtrl_alpha.9.png SHA1-Digest: 0MMPUBC/hxFmt1Ak92Vmj3X0hfs= Name: assets/fonts/Roboto-Light.ttf SHA1-Digest: pjPMJmlNtysc9kyqUeZLQ8N3mzo= Name: res/drawable-xxxhdpi-v4/ic_play_circle_fill_white_48dp.png SHA1-Digest: HC3H3QKMcIn/XvG7NTnesc4XN60= Name: res/drawable-xxhdpi-v4/ic_save_all_white_24dp.png SHA1-Digest: l3gWuGNSHrqMQXWG0OPvuIaQ3Kk= Name: res/drawable-xxhdpi-v4/ic_send_sms_insecure.png SHA1-Digest: wVnl3pGKiCgCUmX2o2XZJ185DhY= Name: res/layout/abc_alert_dialog_title_material.xml SHA1-Digest: eHB3qMi9x448kTfErbhY0wKGOGw= Name: res/drawable-mdpi-v4/abc_scrubber_track_mtrl_alpha.9.png SHA1-Digest: F8nLQoXKGiQPJCjl3TNIR/eklGw= Name: res/drawable/spinner_background_holo_light.xml SHA1-Digest: FkM2Y5/fZGxEDF75TigYjOv/pBw= Name: res/drawable-xhdpi-v4/fab_shadow_mini.png SHA1-Digest: K6jX5AoiUHx8WZvpb4TNE/aBNps= Name: res/drawable-xxhdpi-v4/abc_ic_star_black_36dp.png SHA1-Digest: WfH571yq6iMoRrhqJrcQ5L9wd34= Name: res/drawable-hdpi-v4/ic_missing_thumbnail_picture.png SHA1-Digest: AkapvGWfA79lmTGbR9Wzo/42GwY= Name: res/layout-v17/abc_search_view.xml SHA1-Digest: w/EaiCfthqVUJ4hNIf3hUGNJISc= Name: res/drawable-mdpi-v4/ic_emoji_objects_activated_light.png SHA1-Digest: alEiHBp0PYCvmpzbGa01iDpAWXQ= Name: res/drawable/conversation_list_item_unread_background.xml SHA1-Digest: Fmy9ZHMz/W9uNp5AftjihiWw9rw= Name: res/drawable-hdpi-v4/abc_textfield_search_default_mtrl_alpha.9.p ng SHA1-Digest: Uaax8TsSlV1ssfdd4JM/P9lAyjc= Name: res/xml/badge_widget_provider.xml SHA1-Digest: +ZlTyPrkmuFlP4u7gmyhFqYltX8= Name: res/drawable-ldrtl-xxxhdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.pn g SHA1-Digest: e4+xS2IHT21cqoB/yQU6OyS1b7o= Name: res/drawable-xxhdpi-v4/ic_badge_24dp.png SHA1-Digest: dzOpM+GS7bMorn2a/IVSkZlYVHA= Name: res/drawable-mdpi-v4/ic_play_circle_fill_white_48dp.png SHA1-Digest: bvQz4mTshp6coddKsCQyDxXU/Q0= Name: res/drawable-mdpi-v4/ic_emoji_symbols_activated_light.png SHA1-Digest: AY6BCs4NmmdcSafgRSNwfOVNmjY= Name: res/layout/design_bottom_navigation_item.xml SHA1-Digest: zJmONTRCmYo9XB0TlPWgbXf5xdY= Name: res/drawable-mdpi-v4/ic_backspace_normal_dark.png SHA1-Digest: E+HzcnHe62jO/lohBxlGEbdT0ms= Name: res/drawable-mdpi-v4/abc_text_select_handle_left_mtrl_light.png SHA1-Digest: I7wS5ZKCeDKsgaNc6QtAyJ+0CnU= Name: res/drawable-xhdpi-v4/ic_check_normal_dark.png SHA1-Digest: 1XD1KsYvae/WOB8WnfjzrdtJBzk= Name: res/xml/preferences_chats.xml SHA1-Digest: SH8XF6Rr8C59ppD1B4e0phGULBc= Name: res/layout/radial_time_picker_dialog.xml SHA1-Digest: rnZqvjrWjvkn0JbM8JD/R3oXOMQ= Name: res/drawable-xhdpi-v4/ic_menu_add_field_holo_light.png SHA1-Digest: qkM0nsehJp2malHucAuSFp92PDk= Name: res/drawable/background_pattern.png SHA1-Digest: te6lQlxaf+qKIDNGC4udnhKhgr0= Name: res/layout/abc_popup_menu_item_layout.xml SHA1-Digest: jA9dptKvdESOx5FotTJaJllrdMw= Name: res/drawable-hdpi-v4/ic_download_circle_fill_white_48dp.png SHA1-Digest: gNRhVl6SKU2LKdsU3uaIn96oBI4= Name: res/layout/hms_picker_view.xml SHA1-Digest: n4jSoVkT0j3uRcsS1tyGutHDKuc= Name: res/drawable-mdpi-v4/ic_emoji_people_normal_dark.png SHA1-Digest: FxxkOb3eliTm0v2G3ujs7dHQZ6o= Name: res/drawable-mdpi-v4/ic_account_box_light.png SHA1-Digest: Xmih+rt8esnUfRPfBmqy1oEug6g= Name: res/layout/media_overview_activity.xml SHA1-Digest: +IX8tuRvJSRL1nnI3aSQGCpc8eE= Name: res/drawable-hdpi-v4/ic_save_all_white_24dp.png SHA1-Digest: fTqBtx3+VRpQQgh21GoAIgIYZFM= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_84 SHA1-Digest: cM9Igo/aYhfEFUXrYtfhy+rGfTA= Name: res/drawable-hdpi-v4/design_ic_visibility.png SHA1-Digest: +hcSUcB9RDUJTOimdB4ICvT3arQ= Name: res/drawable-xhdpi-v4/abc_btn_check_to_on_mtrl_015.png SHA1-Digest: Liu4ZSvXVbRTfKfw/Sf1BCXStdc= Name: res/layout-v16/verify_identity_activity.xml SHA1-Digest: abOUHfeCLJJaQ91jpxtdZSSDzkQ= Name: res/drawable-xhdpi-v4/switch_thumb_pressed_holo_light.9.png SHA1-Digest: UztIfkg+4xXbDDfXpkylsY0bawQ= Name: res/drawable-xhdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png SHA1-Digest: 8QLweU4p1rehkS9Zii3jepzESPg= Name: res/drawable-ldrtl-xxxhdpi-v17/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: dT9O498/3E1mpkpzpSmdy7tcxxU= Name: res/drawable/notification_bg.xml SHA1-Digest: THPM7d4fjttZeFlOLyUSXRHqhH0= Name: res/drawable-mdpi-v4/ic_message_black.png SHA1-Digest: zX0Isnvpx4aSgpL+VtqlSA4mp4o= Name: res/drawable-hdpi-v4/abc_textfield_default_mtrl_alpha.9.png SHA1-Digest: NPD/eXAUHpJIZ0Gue4mGW/Q6oXI= Name: res/drawable-hdpi-v4/abc_ic_star_black_16dp.png SHA1-Digest: FQyC2AygbGjHIwHNyQK6rfa+lU4= Name: res/drawable/abc_ic_arrow_drop_right_black_24dp.xml SHA1-Digest: GQi7GLUlkJLHiD+gB14bbxFEMxg= Name: res/layout/design_layout_tab_text.xml SHA1-Digest: hGylEWtLV6PowlIJAnKyrFqhGEo= Name: res/drawable-xxhdpi-v4/ic_refresh_white_18dp.png SHA1-Digest: Q15fNzEUSMunWUNIiHQsywHTQxw= Name: res/color/design_tint_password_toggle.xml SHA1-Digest: tXHSF7zejvqCXCSnNyLjRNye5ZI= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_81 SHA1-Digest: daBwnRVtz216PB28MApBfpfM6OY= Name: res/color/design_error.xml SHA1-Digest: 6eBLuAiTIJDL9jItNuNpsAB6IjQ= Name: res/layout-v21/conversation_fragment.xml SHA1-Digest: vykdFaKcvfe80HYf0fSDEj84t3s= Name: res/drawable-mdpi-v4/ic_keyboard_white_24dp.png SHA1-Digest: xeYwu7r+BgqvcqSiy6WKyBFn0PU= Name: res/drawable/last_seen_divider_text_background_light.xml SHA1-Digest: SKAPPzKllQI/8GW+6JgqUOxszCQ= Name: res/drawable-xxxhdpi-v4/fab_shadow_mini.png SHA1-Digest: HDUgGlNwLol/QjCoQ1CAJRsFzAo= Name: res/drawable-mdpi-v4/ic_send_sms_secure.png SHA1-Digest: 7RUK/SH4FbWSoWnknRUMq6EWjbs= Name: res/drawable-xxxhdpi-v4/ic_arrow_forward_white_24dp.png SHA1-Digest: kmuYpbwg9hm+zYqSY4xgXUNrUh8= Name: res/drawable-mdpi-v4/textfield_focused_holo_light.9.png SHA1-Digest: Osswqo8kfRGKahOnjpi0n93nS1Y= Name: res/color-v11/abc_hint_foreground_material_light.xml SHA1-Digest: 0+TtbyFWq3KwgFpqHVEftodeMQI= Name: res/drawable-ldrtl-mdpi-v17/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: nhOdszX2MHoKx6H7uBb+tEWPyJ0= Name: res/drawable-xhdpi-v4/abc_text_select_handle_middle_mtrl_dark.pn g SHA1-Digest: qIyIPrdPc6Iq8AOMfE1vzfxsbTs= Name: res/color-v23/abc_btn_colored_borderless_text_material.xml SHA1-Digest: TsIbuUrE/6o0oDATCM4a2QUvxJg= Name: res/drawable-hdpi-v4/fab_shadow_mini.png SHA1-Digest: H2qyAE5qLgTtU/9FhzpezlRiwVA= Name: res/drawable/emoji_category_objects_light.xml SHA1-Digest: JDQouPeLrbGMSt3Uc/WHtIWqhSQ= Name: res/layout/emoji_drawer.xml SHA1-Digest: Dd/8q/DvT7ilOEXIiORvUQ7HDK4= Name: res/drawable-xxhdpi-v4/ic_menu_remove_holo_light.png SHA1-Digest: GbOqf2Yga6qVAxaA3ec35ac0Yio= Name: res/color/abc_search_url_text.xml SHA1-Digest: ULqUPkxlcpqU/WycHleKoU9uLlU= Name: res/layout-land/radial_time_picker_dialog.xml SHA1-Digest: LLbkgnMksutub2cRM1nsU8FpJoY= Name: res/layout/calendar_date_picker_dialog.xml SHA1-Digest: NUtG90BZ+8EsAe+kzPDU+xv2GjI= Name: res/drawable-mdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png SHA1-Digest: bZVk/7JyPqpb9FPgqFjfBJURWhA= Name: res/drawable-xxxhdpi-v4/ic_unarchive_white_36dp.png SHA1-Digest: 9cXrWWjq7GXj9DC1D4MTcb7KJO0= Name: res/drawable-v11/edit_text_holo_light.xml SHA1-Digest: hxVxfVfZWEOaImpM3nIRR206O3Q= Name: res/drawable-mdpi-v4/ic_video_light.png SHA1-Digest: J3v9bGC1UXW6oWWeoGjtijwgDQQ= Name: res/drawable-mdpi-v4/ic_info_outline_dark.png SHA1-Digest: /PF66Z+zUl+MpR95R4Usmp9061c= Name: res/drawable-mdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png SHA1-Digest: 6odRFxWrjmo6tHxritbB5cYdjWI= Name: res/drawable-xhdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png SHA1-Digest: /hpvHveM+a3Mx49n/3P19bBBgiI= Name: res/color/abc_secondary_text_material_dark.xml SHA1-Digest: jVKXpTEzxPaBeJwNCxDpj2X/w74= Name: res/drawable-hdpi-v4/ic_notifications_gray.png SHA1-Digest: Pd6jNrp5QpPHay891JKXphkSd6g= Name: res/layout-v17/notification_template_lines_media.xml SHA1-Digest: tz2lYMQAF7sxUin88+DuDAtQOqg= Name: res/layout/design_navigation_menu.xml SHA1-Digest: vl1zV6hLnTZFqcV+cyuW1MeII3Q= Name: res/drawable-xxhdpi-v4/ic_contact_picture.png SHA1-Digest: twSQpXhWmjQ7CWO9m0F8nUDc7A4= Name: res/layout-v17/abc_popup_menu_item_layout.xml SHA1-Digest: 8DtItPqMurboslrZKDDQ1XmfM+E= Name: res/drawable-xhdpi-v4/abc_ic_star_half_black_36dp.png SHA1-Digest: GV2BrBF8/MHHPwyzNe+cYQSsr8s= Name: res/drawable-hdpi-v4/ic_send_white_24dp.png SHA1-Digest: YeisgUij4OcmXinn/cWMdZz3TBc= Name: res/menu/conversation_list_batch_archive.xml SHA1-Digest: D8Lq/UUufIVGdgLWYsizYBLTqBo= Name: res/drawable-hdpi-v4/ic_done_white_18dp.png SHA1-Digest: KQifE++1R42/hv8mw6aOLGraIQc= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_94 SHA1-Digest: iFng5Rg8uXcO1Wad8WzQjXXbaSA= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_95 SHA1-Digest: 6+a5S3YBqGkTp77eRI98wZppshU= Name: res/layout/share_intent_row.xml SHA1-Digest: hEFfaanmx0xw0zSH1atx6iZAH5s= Name: res/xml/preferences_notifications.xml SHA1-Digest: p4OAaRpNlmyOg9HyN+lTj8L8WJs= Name: res/drawable/notification_icon_background.xml SHA1-Digest: VGX+wieCo2SajK2CMLMDgU1/Aos= Name: res/drawable-xhdpi-v4/switch_bg_focused_holo_light.9.png SHA1-Digest: /LzkB2YWBf8/BEEXg0QTgGcw1zo= Name: res/drawable-xxhdpi-v4/ic_info_outline_light.png SHA1-Digest: f/SRAbWGdLggjG49cpPDrZ8GR1o= Name: res/layout/prompt_passphrase_activity.xml SHA1-Digest: ZPPyAUKsFokJGPAQtWrHF7MbIyE= Name: res/drawable/button_background_light.xml SHA1-Digest: 6hucLMUPMI5lbi0CQdnO07Alz4U= Name: res/drawable-v11/emoji_category_flags_dark.xml SHA1-Digest: K6wG2meKj+58nMR2LS7Tlrk29+Y= Name: res/drawable-xhdpi-v4/alert.png SHA1-Digest: LPSO3FYapsRHFP0T+o4zkdxUEhY= Name: res/layout-v16/calendar_date_picker_header_view.xml SHA1-Digest: 5Wnpaad+1uIjUuhr3iEY2o+38u4= Name: res/layout/contact_selection_activity.xml SHA1-Digest: 4URmy7POdpnO01RqOKKR1jvxUSs= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_91 SHA1-Digest: hd0u/1mAj3Ir3hNqdmnilV5SSVM= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_90 SHA1-Digest: 7WrMiEDONSaE+X9BTfPKgXzIz+g= Name: res/menu/conversation_list.xml SHA1-Digest: uCFkIKxt/KfXVT/jn5kJboO0aVc= Name: res/drawable-xxhdpi-v4/ic_message_gray.png SHA1-Digest: haNfxks1gclytpmzOfPF775nqok= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_49 SHA1-Digest: lJyFdjLImuA15HlomNveCTDcnAc= Name: res/drawable-mdpi-v4/ic_save_white_24dp.png SHA1-Digest: K14JTtfEHf/fT8ZgbB4MHymv7H8= Name: res/drawable/compose_divider_background.xml SHA1-Digest: GVnpKW3S5n6mjpAhT6hMqjKIs0o= Name: res/drawable-xxhdpi-v4/ic_action_warning_red.png SHA1-Digest: 11cnBsIwAg6MESM4rNvhhq30SW0= Name: res/drawable-mdpi-v4/textfield_disabled_holo_light.9.png SHA1-Digest: fdGCIi27zMMr34hbp5pyUowldrs= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_44 SHA1-Digest: N1nuhYaREi9z6iAeXxLcra4rL5s= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_43 SHA1-Digest: mIFkru/j+coHhbRh6/nN2br+Xak= Name: res/drawable/ic_check_light.xml SHA1-Digest: D6ryoNpQPcPyGevgOmJjdbBwuMw= Name: res/drawable-hdpi-v4/ic_menu_search_holo_dark.png SHA1-Digest: gL/VDRxvMbN3cvW+cG+h0LN2kJM= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_36 SHA1-Digest: hWS0Op4dc6LF44g9BIFft/f3QH0= Name: res/drawable-xxhdpi-v4/ic_emoji_symbols_activated_light.png SHA1-Digest: +nPlVQ0H32v53pvZ8POlrZlaOxY= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_31 SHA1-Digest: KuLNytr4ZRl4fcSWuquXOt81/60= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_30 SHA1-Digest: Bh8tv057544lV4r7kRT1zzTlaA8= Name: res/drawable-xhdpi-v4/ic_volume_up_light.png SHA1-Digest: gbftuNpGqiLFP54XEsAgE9pLWno= Name: res/drawable-xxxhdpi-v4/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: Gr88G2zQ2X0grlFxAco+5IsVZzU= Name: res/drawable/notification_bg_low.xml SHA1-Digest: 2//CmepC2cWfyNKA2qTMrqNQ8Kc= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_34 SHA1-Digest: O3GRzsWEr1+UF6z/veTcYUIikdU= Name: res/drawable-xhdpi-v4/ic_visibility_grey600_24dp.png SHA1-Digest: /jSu43bsM7FYf8VJaW3R8jv/Zu8= Name: res/drawable-xxhdpi-v4/icon_cached.png SHA1-Digest: Z1o2fG8R1cjAjLh2p1kMQkm2hak= Name: res/drawable-xxhdpi-v4/abc_btn_check_to_on_mtrl_000.png SHA1-Digest: qyyA8++tpZMeE5woicJ8hRb+SDY= Name: res/drawable-mdpi-v4/ic_brightness_6_black.png SHA1-Digest: zsvLkyXq+dXOYXZXkUrBRkt5NCA= Name: res/drawable/design_fab_background.xml SHA1-Digest: 2IXtIQ8BMr6/gZ9iOW0d/IwZH6A= Name: res/drawable-xxhdpi-v4/ic_account_box_light.png SHA1-Digest: V8BFS/R93Ol03XXTMz0mU5JZryU= Name: res/drawable-hdpi-v4/ic_delete_black.png SHA1-Digest: bJh8n1jViDW0f3jgxMWC1Q2rHQA= Name: res/layout-sw600dp-v13/three_keys_view_text.xml SHA1-Digest: DVMEFp/Bk6iawn0lWSLRKucfq78= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_66 SHA1-Digest: ZFpoKe4t4pLWyhWH1RNMJcPf+fE= Name: res/animator-v11/upper_pause_to_play_animation.xml SHA1-Digest: 7SpUy2/cGRb7Pfid2amb6pYHwiA= Name: res/drawable-xxhdpi-v4/ic_select_all_white_24dp.png SHA1-Digest: 8pvrUMgikaLGOMW8rQ65pwo3A2E= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_62 SHA1-Digest: Ic1OQ0X5xM4WirGTkp+cG+BXfuU= Name: res/drawable-hdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png SHA1-Digest: CBej+P8bwYybMFQCDCEkHRsc8Sk= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_61 SHA1-Digest: 7c51UKlqpVDI3o2A/s0k4nNgKCA= Name: res/drawable-hdpi-v4/ic_dialpad_white_24dp.png SHA1-Digest: oYtNZ3NSPqaVWzVfYJ60vDte8ug= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_63 SHA1-Digest: a7U/pmtZHFBo5obxPjewjKWkGa8= Name: res/drawable-xhdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png SHA1-Digest: O6x52IgsWeKV4Xdu5U2H2IxbVgc= Name: res/drawable-mdpi-v4/icon_lock.png SHA1-Digest: g7e66g+Oh4i7GrhKslnYfHt8/tc= Name: res/drawable-hdpi-v4/ic_recurrence_bubble_outline.png SHA1-Digest: coXedWnlopPeR6mVw+fcRrRfPOY= Name: res/layout-v17/abc_alert_dialog_button_bar_material.xml SHA1-Digest: /LFV3VauCOFVr2jNXldDXPvIhwQ= Name: res/drawable-xhdpi-v4/abc_list_selector_disabled_holo_light.9.pn g SHA1-Digest: bwjSzuahpvwVgJavscLUKen/ZqQ= Name: res/layout/abc_action_bar_title_item.xml SHA1-Digest: JePlqdhFAVxMv4b6ytoiCrX6ghM= Name: res/layout/color_preference_items.xml SHA1-Digest: qKDb1gO+Hu23/dgZi/JwhHAQlWc= Name: res/layout/notification_template_part_chronometer.xml SHA1-Digest: dzQtd/RKeHhfMLTfmeJLOxUNfdA= Name: res/drawable-xxhdpi-v4/ic_emoji_nature_normal_light.png SHA1-Digest: 1KoGyd1xjlqfyoipZIQQGvpyKyY= Name: res/layout/zooming_image_view.xml SHA1-Digest: v8hYwtg/deZRi/NqPvzpCqBUaM4= Name: res/animator/upper_play_to_pause_animation.xml SHA1-Digest: 7f8HiUwoTj84cBIvXQhtx6kFMlc= Name: res/drawable-mdpi-v4/ic_volume_off_grey600_18dp.png SHA1-Digest: iGS7mESVFIWuKWvAPvF2zPotpes= Name: res/drawable-hdpi-v4/ic_send_insecure_white_24dp.png SHA1-Digest: 9+5i19e2XcxBJ2xJIfLEkMDY3dQ= Name: res/drawable-xhdpi-v4/ic_photo_camera_dark.png SHA1-Digest: S1YYRIEas6QV9ZuYT5lIwspAza0= Name: res/drawable-mdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png SHA1-Digest: deH5E0yKjBo6CYdnvx70e1ZcVb4= Name: res/drawable-xhdpi-v4/ic_block_white_18dp.png SHA1-Digest: uvN0KqWUheooWW50U/4DZBpqJn4= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_58 SHA1-Digest: LqgBINJBQXrfS7qSEUdO2YKapSc= Name: res/drawable-hdpi-v4/ic_emoji_flags_normal_dark.png SHA1-Digest: AY66CHRZpDIF8mLkrCS9dfohLHc= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_55 SHA1-Digest: aHXhcJ44Nq+1uITpH9udVnAuQjI= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_54 SHA1-Digest: 0pJTmVMR2tNAUtn+uRmLAqWmQnM= Name: res/drawable-xxhdpi-v4/ic_warning_dark.png SHA1-Digest: 84NAvhniTYBghOjjZJa8ekyhqAo= Name: res/drawable-xxhdpi-v4/ic_delivery_delivered_dark.png SHA1-Digest: vBsabKr/2Z/PNGjK64TGLuWPr50= Name: res/drawable-hdpi-v4/ic_brightness_6_black.png SHA1-Digest: utPotC6A3fvHewhtmFhU7Is33wk= Name: res/anim/abc_popup_exit.xml SHA1-Digest: HpgqoyyC+fdyFrYE8t6l+v0+Y4c= Name: res/drawable-hdpi-v4/abc_scrubber_track_mtrl_alpha.9.png SHA1-Digest: dEml7NSraw7t0+4lZ4iFeNS5MxI= Name: res/drawable-xhdpi-v4/abc_switch_track_mtrl_alpha.9.png SHA1-Digest: DnUPb3c/aCYMPIdhLVRqT1eh/J8= Name: res/drawable-xxhdpi-v4/ic_cancel_white_24dp.png SHA1-Digest: UEXAoM6inwKjrBc8YeEghK54aKQ= Name: res/drawable-mdpi-v4/ic_done_all_white_18dp.png SHA1-Digest: XlJDM5+CSYTJBdW7iBfdkb0S8Cw= Name: res/drawable-mdpi-v4/ic_brightness_6_gray.png SHA1-Digest: z1fiTQfnlGYaEzTtQgwudZSeas4= Name: res/drawable-xhdpi-v4/ic_emoji_flags_activated_light.png SHA1-Digest: 4TlxtnLnrRyRWS9ZwCKcvKFtkNY= Name: res/drawable-mdpi-v4/design_ic_visibility_off.png SHA1-Digest: 0WaQYJLtIRBRLvcCp5FssXE3Izo= Name: res/drawable-hdpi-v4/ic_photo_camera_light.png SHA1-Digest: PvngzhGtMP2JKnNVwyBgLk+zboE= Name: res/drawable-hdpi-v4/ic_image_light.png SHA1-Digest: crJiZlW6XjUC0iMXZGBpmuDB2pc= Name: assets/emoji_symbols.png SHA1-Digest: n7FK0HOrvqZV7o1ufIX1wGOrcIg= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_675 SHA1-Digest: yhEc8jlPKXbvDhLFNca0Uc/VhxE= Name: res/drawable-xhdpi-v4/ic_done_all_white_18dp.png SHA1-Digest: eeXVSa6PUMPTyojiB8gOI30kMvc= Name: res/drawable-xhdpi-v4/ic_delete_gray.png SHA1-Digest: SvQxwXgVblHRBe9fS7BnhcdQ6tw= Name: res/drawable-xxhdpi-v4/ic_textsms_grey_32dp.png SHA1-Digest: J0LDzREI8Ublaf5VBwVwdBVynxM= Name: res/drawable-mdpi-v4/ic_lock_white_18dp.png SHA1-Digest: 9qjL2cP9rKXe4FzEjfH29rs68jA= Name: res/drawable-hdpi-v19/switch_thumb_pressed_holo_light.9.png SHA1-Digest: uOrxuPdeG1Hgke4uVegUhdTfRG0= Name: res/drawable-hdpi-v4/ic_emoji_recents_normal_light.png SHA1-Digest: PHQwvfi9AKmY2plUmIgrEgTgJ5w= Name: res/drawable-mdpi-v4/ic_send_secure_white_24dp.png SHA1-Digest: DOjlQyUuAhurwo0Uk3UNk0Qh68M= Name: res/drawable-xxxhdpi-v4/ic_block_grey600_18dp.png SHA1-Digest: sYYGqQ5gDXfoXZOA1PBxXc4iWII= Name: res/drawable-xhdpi-v4/switch_thumb_disabled_holo_light.9.png SHA1-Digest: MYtF9U4u3mtwL6bJwMkzyLB2Ubo= Name: res/drawable-xhdpi-v4/ic_info_outline_white_24dp.png SHA1-Digest: sZNtJLPCCI7ia/PLaXUm9Dar+AI= Name: res/drawable-xhdpi-v4/abc_scrubber_control_off_mtrl_alpha.png SHA1-Digest: Zj1YE4I/aNMmHr4LVwFo4H/yZ5U= Name: res/drawable/design_snackbar_background.xml SHA1-Digest: 8T4TLSdRXRXbJ+StbJBFy8qpjbQ= Name: res/layout-v16/conversation_item_pending_v11.xml SHA1-Digest: RhsSVPab9bHet3xJ91y/5FGeApk= Name: res/drawable-hdpi-v4/ic_create_white_24dp.png SHA1-Digest: QB3FM8a3lWDcakzTeXFZ4D/juUM= Name: res/layout/key_caching_notification.xml SHA1-Digest: oUYU7tYvlAGnAROZzyClW6M/Z5w= Name: res/drawable-xxhdpi-v4/textfield_activated_holo_light.9.png SHA1-Digest: VMleSAHQjnh30LIfWAOzY1IDlbw= Name: res/drawable-xxhdpi-v4/ic_movie_creation_dark.png SHA1-Digest: jGF3U1BDovYM9lN+7ct+VrKxnxs= Name: lib/armeabi/libcurve25519.so SHA1-Digest: c7mgPDTVx0d7ZVWqg7scxKx/6u4= Name: lib/x86/libcurve25519.so SHA1-Digest: EnxNgvXsAP0+4XwonU5rQjozT5U= Name: res/drawable-mdpi-v4/ic_menu_search_holo_light.png SHA1-Digest: z0HRwPObMd21n50Meu7NnoYtfEY= Name: res/drawable-xxhdpi-v4/abc_textfield_search_activated_mtrl_alpha .9.png SHA1-Digest: Ay1qOaJ2aLiCf8NAaujbkp0H1cQ= Name: res/drawable-hdpi-v4/abc_ic_star_black_48dp.png SHA1-Digest: 84VFkBa9KP++pv1aritXYQWuD68= Name: res/drawable-mdpi-v4/abc_text_select_handle_middle_mtrl_dark.png SHA1-Digest: 1EAZ3n1TgfThsvhrnqhd8KcFdQQ= Name: res/anim/abc_fade_in.xml SHA1-Digest: ohPEA4mboaFUu9LZMUwk7FmjbPI= Name: res/drawable-xxhdpi-v4/ic_lock_dark.png SHA1-Digest: vWoogoEKXCva1zQwhs2P8evL3Y0= Name: res/drawable-xxxhdpi-v4/ic_archive_white_24dp.png SHA1-Digest: nUlpgvqiQ8gTITXcyGd9vKR8R2M= Name: res/drawable-hdpi-v4/ic_volume_off_grey600_18dp.png SHA1-Digest: C+a5oEByuM8SSgYeU25/MraUpRM= Name: res/drawable-sw600dp-hdpi-v13/ic_backspace_normal_dark.png SHA1-Digest: chdWLuSp41Ygjhu4NcpXdLWh9sc= Name: res/drawable-xxhdpi-v4/ic_recurrence_bubble_outline_disabled.png SHA1-Digest: KwldDErOBJI8BaxA5Lx0y+g5/U0= Name: res/layout/abc_screen_simple.xml SHA1-Digest: L+lDjRkMzyxbAEO55AhMboq9FFA= Name: res/layout/abc_search_dropdown_item_icons_2line.xml SHA1-Digest: aFhBmo0lBKAVM55W6TMirZfSaOM= Name: res/layout-v17/conversation_title_view.xml SHA1-Digest: /lcEBZpaKIsZUFfHyc1tpm5ueGY= Name: res/layout/conversation_item_sent.xml SHA1-Digest: I3KB8bXRPrBy2mfFyBFvtBHnGMQ= Name: res/drawable/share_list_divider_shape.xml SHA1-Digest: JKSChmT2fc3TH0THPN+Ic8jMJq4= Name: res/drawable-hdpi-v4/abc_text_select_handle_right_mtrl_light.png SHA1-Digest: 15/Lgr8XtZjo4bQQgTlTC4gG2Mw= Name: res/drawable-xhdpi-v4/ic_pause_circle_fill_white_48dp.png SHA1-Digest: 94h57IA/h+ABdExw4oY+jcr1UR0= Name: res/drawable-xxhdpi-v4/design_ic_visibility_off.png SHA1-Digest: 6/g8nk7pRid9D24FOlgafLT3EXk= Name: res/drawable-hdpi-v4/ic_emoji_symbols_activated_dark.png SHA1-Digest: OUgUKsKg5gpj6PSDf1EeZK7ZvBg= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_255 SHA1-Digest: T8Y8UPJDNNY3gi+RvAerX30aAJ4= Name: res/drawable-xxhdpi-v4/abc_list_focused_holo.9.png SHA1-Digest: FsvLP65iWVfEfIkCPXw4wimwY7M= Name: res/drawable-xxhdpi-v4/textfield_disabled_holo_light.9.png SHA1-Digest: IbsyrIi5P4z5+3CcgDwoUkpzMUI= Name: res/drawable-hdpi-v4/ic_menu_barcode.png SHA1-Digest: V1LV2ko7FekGujcSQETjbZKZG8E= Name: res/layout-v21/notification_template_custom_big.xml SHA1-Digest: RZJXVBX9p1L/7vQbjeCBRdqCzZM= Name: res/drawable-xxhdpi-v4/sms_system_import_icon.png SHA1-Digest: X4mRUtd65sev9HuIeU+o1KVCieg= Name: res/color-v23/abc_tint_edittext.xml SHA1-Digest: BBcfe9ziniPVPStDrP3v4C+knKk= Name: res/drawable-xxxhdpi-v4/transfer_controls_background.9.png SHA1-Digest: 4Ou2gycZRud/GAupu9OHpU/2qqE= Name: res/layout/conversation_title_view.xml SHA1-Digest: p8gGaGnktrziXPgC2LsWIVnUruQ= Name: res/drawable-mdpi-v4/ic_emoji_recents_activated_dark.png SHA1-Digest: 9HHpxbJae6/CS4sveioFjGZtnWY= Name: res/drawable-xhdpi-v4/abc_list_pressed_holo_light.9.png SHA1-Digest: 5rSZbdJDOTdM5kJhhIdl8m8briI= Name: res/drawable-mdpi-v4/ic_clear_white_24dp.png SHA1-Digest: dfoLSz8moBfkGsytGq89kj+x18w= Name: res/drawable-xxxhdpi-v4/ic_forum_black_32dp.png SHA1-Digest: JC82uvRHpOuaKQOwol/LEB8u8ik= Name: res/drawable-xxxhdpi-v4/abc_ic_star_half_black_36dp.png SHA1-Digest: QnhqhmaaBESNVdVhbQn1hIhZFYA= Name: res/layout-v17/notification_template_big_media_narrow_custom.xml SHA1-Digest: fXziI3HkMDGRYbhw6t+nLo4mSqo= Name: res/drawable-mdpi-v4/ic_advanced_gray.png SHA1-Digest: 5gnrbk5AthLhEXt3YdcuSwsrJ4s= Name: res/menu/conversation_list_batch.xml SHA1-Digest: IgltNUuFQ8Yx8Fk0/0HdbERA+/w= Name: res/drawable-xhdpi-v4/fab_shadow.png SHA1-Digest: kwb+NfpJkRntsi1qHriUyrhjuwc= Name: res/drawable-hdpi-v4/textfield_disabled_holo_light.9.png SHA1-Digest: P9M5tQrzNeUD6Wa598XwOxFN4hg= Name: res/drawable-hdpi-v4/abc_btn_check_to_on_mtrl_000.png SHA1-Digest: kvy6NVZis2HTuWhGbjSTUHivrS8= Name: res/drawable-hdpi-v4/ic_check_white_24dp.png SHA1-Digest: quY3cxjleDPvMFafdmbJPpD8D3A= Name: res/drawable-xhdpi-v4/ic_volume_off_white_18dp.png SHA1-Digest: JqO+SIz5f5/dzmEA7KCmj0FBDj4= Name: res/drawable-xxhdpi-v4/ic_block_white_18dp.png SHA1-Digest: rrLtIOHjE+jSEj6kxoOcZ2O1U2A= Name: res/drawable-xhdpi-v4/ic_emoji_emoticons_activated_dark.png SHA1-Digest: QJrW1iKOkorI8NMyy5uac4ObL+Q= Name: res/drawable-xhdpi-v4/ic_warning_dark.png SHA1-Digest: 4RzhY8lcSo3SKqcyPt9ntyV16J8= Name: res/drawable-xxxhdpi-v4/ic_unarchive_white_24dp.png SHA1-Digest: lykWjibfTBC/zovVXNmenA9+uys= Name: res/drawable-hdpi-v4/ic_visibility_off_grey600_24dp.png SHA1-Digest: eoKvoESbsfjYq4hRm1CDGIlQho4= Name: res/drawable-v11/emoji_category_recent_dark.xml SHA1-Digest: 0yO+4Tr5fhkHQluSgM5xxlwkAb0= Name: res/drawable-xhdpi-v4/ic_emoji_symbols_normal_dark.png SHA1-Digest: 76fPfhfCu4HVav8hLSmRsYCQgwA= Name: res/layout-v21/conversation_title_view.xml SHA1-Digest: nIAlcpBCsxSi/3fp5Q65GA2qifY= Name: res/drawable-mdpi-v4/ic_content_copy_light.png SHA1-Digest: qqQJESs0EIV1vVXC6f550e7/FCI= Name: res/drawable-xxhdpi-v4/ic_visibility_off_grey600_24dp.png SHA1-Digest: I7RnYghIM1uYNG89Jx0OyjCWWnA= Name: res/drawable-mdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png SHA1-Digest: rWEkIJT/DhekegJTLoLY7vlStb8= Name: res/drawable-hdpi-v4/ic_group_photo.png SHA1-Digest: wokVkjOa08RdAyBaFTS01G6Vjeo= Name: res/menu/conversation_list_empty.xml SHA1-Digest: jYhZY4UeWjDynfYgrxyDfgW5i7c= Name: res/drawable-hdpi-v4/ic_backspace_disabled_dark.png SHA1-Digest: nnubVwr7Sy/Q0WLycs3D4sO5LGE= Name: res/drawable-v11/emoji_category_objects_light.xml SHA1-Digest: iBMvAA5/+zPuG1HSUhaIO4kjoBI= Name: res/drawable-xhdpi-v4/ic_send_sms_insecure_dark.png SHA1-Digest: 65hZGruTDS+kO2Ilh6udEE4Hsvk= Name: ws/com/google/android/mms/pdu/package.html SHA1-Digest: zW3J5ZXNfuDLZKkBuTBJYYW1zpk= Name: res/drawable-xhdpi-v4/ic_emoji_recents_normal_dark.png SHA1-Digest: f15CLkwxERZfMzNTRSFCSMtMMvI= Name: res/drawable-mdpi-v4/notify_panel_notification_icon_bg.png SHA1-Digest: cz2cTpSbxUR34pkCMo3M7a+mSXk= Name: res/drawable-xxhdpi-v4/ic_emoji_emoticons_normal_dark.png SHA1-Digest: sJUQ6MkVAwKpoBNLjQycrSP/miQ= Name: res/drawable-xhdpi-v4/divet_lower_right_light.png SHA1-Digest: ZlxiUipE7U2T0Z+xbqG5Lm/SrvA= Name: res/drawable-xhdpi-v4/ic_recurrence_bubble_disabled.png SHA1-Digest: /uf5Hf8/xPVdDiTbEWAZHk3ePaI= Name: res/drawable-xxhdpi-v4/ic_forum_black_32dp.png SHA1-Digest: 6VPn4QNKWtzR9AMceQXX1KfZnlo= Name: res/drawable-v23/abc_control_background_material.xml SHA1-Digest: qeTahfTuJMcVEUOeqjCyDaNa8uU= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_679 SHA1-Digest: 6/VdOl5YznGBEI9ms/gjN2EAmLM= Name: res/drawable-hdpi-v4/ic_backspace_grey600_24dp.png SHA1-Digest: 9j5TixAtozyqz2GxHu4Q+CybMhA= Name: res/drawable-hdpi-v4/notification_bg_normal_pressed.9.png SHA1-Digest: TZoq5fn2jjj23LAmyukLzy8TVPA= Name: res/layout/time_zone_filter_item.xml SHA1-Digest: 8GhtA8tcunJ4HJU+H5F5gv6PaQE= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_676 SHA1-Digest: 1XvAC59RhdvXt568Lp9q68Lo95M= Name: res/drawable/conversation_list_divider_shape.xml SHA1-Digest: Wz32SpctHXyVcpEtsfCh8vOI5QU= Name: res/drawable-xxxhdpi-v4/abc_btn_check_to_on_mtrl_000.png SHA1-Digest: jniuuw+ps9CtTIC7MeCedJBG1rs= Name: res/layout/select_dialog_singlechoice_material.xml SHA1-Digest: qhKkBqKT2hoMRK2usuQjUCCU5hA= Name: res/layout/conversation_fragment.xml SHA1-Digest: NlDn3tD3Js21YwVeWX3jdjJryHg= Name: res/drawable-xxhdpi-v4/ic_add_white_24dp.png SHA1-Digest: 03jXVNGWPMsGK3Xg3HWpiEtRhzc= Name: res/xml/preferences_app_protection.xml SHA1-Digest: /04M6lZaLCP/MC4yaLzm3ZTXm2g= Name: res/color/abc_primary_text_material_light.xml SHA1-Digest: ggJcJQnCkCLHvTmVDR7b7H8fPPk= Name: res/drawable-hdpi-v4/ic_circle_fill_white_48dp.png SHA1-Digest: +7XseN+JhezFYkkaQ6oRB5Ov5PM= Name: res/drawable-xhdpi-v4/ic_visibility_white_24dp.png SHA1-Digest: BIVvglNqIXn7Q5OjqW5+wUSfiEM= Name: res/drawable-v21/conversation_list_item_read_background_dark.xml SHA1-Digest: hcx2wJmCBLgC9qTvdtq5xWJA1UA= Name: res/drawable-xhdpi-v4/transfer_controls_background.9.png SHA1-Digest: 8DAsQxUNQf9+eMV1afbdEo/rFik= Name: res/drawable-v11/emoji_category_places_dark.xml SHA1-Digest: cQtDGjtc28B+LSswR0p8fsxe4MA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZA SHA1-Digest: O/3iDLWPPvW2HI1gEX7lRiOIRco= Name: res/drawable-xxhdpi-v4/ic_error_red_24dp.png SHA1-Digest: xWMRRZlbSsjgAbHJZNRmvWrw+44= Name: res/drawable-mdpi-v4/switch_thumb_holo_light_v2.9.png SHA1-Digest: 7aafjURul6zc7RhhsHx7QCLPozc= Name: res/drawable-xxhdpi-v4/ic_emoji_objects_normal_light.png SHA1-Digest: 0RCvcHCYcO+99fHXT0n+nqryk00= Name: res/drawable-hdpi-v11/icon_cached.png SHA1-Digest: ag2zVjSIyL3kLU9QVj0s7SbWNNo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_YE SHA1-Digest: uTpmi/ET3QJvZyW1bX1KTGol+c8= Name: res/drawable-hdpi-v4/spinner_disabled_holo_light.9.png SHA1-Digest: MGzyk0nLOAXBSKZz0u82JCFSpS8= Name: res/drawable-xhdpi-v4/ic_emoji_nature_normal_light.png SHA1-Digest: 6AUNAyK5WVkf8o/aoXqgRhFUYuM= Name: res/drawable-mdpi-v4/abc_list_selector_disabled_holo_dark.9.png SHA1-Digest: +bjkZfnp7jH8HvA5wzYQ85O04Ic= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZW SHA1-Digest: P+mZTYQAfq5OKUqLR5WHleClnxI= Name: res/drawable/abc_switch_thumb_material.xml SHA1-Digest: sujPDGksEdg29cR87ymiy/LIS08= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_800 SHA1-Digest: Q+v2QtFpRmcNgV/ghp33lLyeLIY= Name: res/drawable-xxxhdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png SHA1-Digest: eQ8hrqPRD0qhhaJWghhXuxRIxBA= Name: res/drawable-hdpi-v4/ic_emoji_recents_activated_light.png SHA1-Digest: boHWHgmHYtW3tdcX4PjGYrHGqjQ= Name: res/drawable/psts_background_tab.xml SHA1-Digest: vOj1M+G3LYJopTV3rVV2ec0Pz7A= Name: res/layout-v16/transport_selection_list_item.xml SHA1-Digest: C+Xa1oepxsEmQ+/BrYjp6zA1THk= Name: res/drawable-xxhdpi-v4/actionbar_icon_holo_dark.png SHA1-Digest: SBNfDOIoGi7vrQ81c1aC8nNoTXI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_808 SHA1-Digest: LR5DzJ+FtlDUO7u4/hR2FS3DAv0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZM SHA1-Digest: fo3+ic1IYN/khzc8yHNMPsXcYVc= Name: res/layout/support_simple_spinner_dropdown_item.xml SHA1-Digest: SzOzDLQ2fKoah8SIlmI92JurR+g= Name: org/spongycastle/x509/CertPathReviewerMessages_de.properties SHA1-Digest: 5WleEyCLesz39ayL3AH9lOktT8k= Name: res/drawable-xxhdpi-v4/ic_emoji_emoticons_activated_dark.png SHA1-Digest: p+ssPoFtPIXsYWDXXVbkL9WWpAU= Name: res/drawable-hdpi-v4/icon_dialog.png SHA1-Digest: 8dZkVmxxSs1WycNGs/t5UCk4WQk= Name: res/drawable-xhdpi-v4/ic_account_box_light.png SHA1-Digest: xaixNvIFNKRQlbn8rUGqt1IJJzk= Name: res/drawable-mdpi-v4/ic_message_white.png SHA1-Digest: ZSTTg4aXgzA9uh//DTGBNWrxHu0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_WS SHA1-Digest: WEt+4epzNo4d8ROnBGfRpvsLQHA= Name: res/menu/conversation_context.xml SHA1-Digest: AaGrOcRy8OqLuFMB0Ecc1nET/LY= Name: res/color-v11/abc_hint_foreground_material_dark.xml SHA1-Digest: iAs9P3JrooTyCSdiERlRSPflh7A= Name: res/drawable-xxhdpi-v4/ic_audio_dark.png SHA1-Digest: F1wOc1YlSlBMbaB3zSjZN44wyYk= Name: res/drawable-xxhdpi-v4/switch_bg_holo_light.9.png SHA1-Digest: FgKH/FinWMkRgm9Fn4PzClBvwZM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_WF SHA1-Digest: KiLYxnJzp+EeAhl5k+uMqNG6DRs= Name: res/drawable-hdpi-v4/ic_video_light.png SHA1-Digest: jxTLhK8yR3OeqUxxJ8LsnApV0cY= Name: res/drawable-hdpi-v4/icon_cached.png SHA1-Digest: XkOZtQyk5wSpIySmc226NFqlRR8= Name: res/drawable-hdpi-v4/spinner_default_holo_light.9.png SHA1-Digest: /GXGxE5W4VqGLNi5sm4OsXq19RM= Name: res/drawable-hdpi-v4/ic_warning_dark.png SHA1-Digest: z4qMFoNq7AKIJHQmoN85DgOzKfE= Name: res/drawable-hdpi-v4/ic_unlocked_white_24dp.png SHA1-Digest: HClEuF7VisWvnoTUktxxSSQhaPo= Name: res/drawable-xxxhdpi-v4/ic_dialpad_white_24dp.png SHA1-Digest: QNe5Y7PSFHDxqSF/kcdXdYen/jY= Name: res/drawable-xxhdpi-v19/switch_thumb_pressed_holo_light.9.png SHA1-Digest: c+lEvuW/Yx/kDPuWk7ZqybxGgAA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VI SHA1-Digest: 1LjKCQQJgyuMAMO1iYig3jWtPSs= Name: res/drawable-xhdpi-v4/ic_block_grey600_18dp.png SHA1-Digest: 5mqVsrUSSLrWE4LWBwReJDduvCE= Name: res/drawable-xxhdpi-v4/ic_emoji_nature_activated_light.png SHA1-Digest: YfP1tgpbi+G7epjImNMhiByBkhE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VG SHA1-Digest: +vAhsOiiHugHwBSbJI4edUWsDr0= Name: res/drawable-hdpi-v4/abc_list_selector_disabled_holo_dark.9.png SHA1-Digest: h7hNXJrcbvKMv9bbGrTrvd0dOgs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VU SHA1-Digest: 2l35bRpp9XiNPbbb+0pHyvOO21Y= Name: assets/emoji_nature.png SHA1-Digest: UzSuz2fUlzCNe6CCmT2tNzzmzVs= Name: res/layout/expiration_picker_dialog.xml SHA1-Digest: cSNAbfN6bagC7X6qIr5kE0j17nM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VN SHA1-Digest: GrWHYUO3Cev7KpuTRQB5z8HW1f4= Name: res/drawable-hdpi-v4/ic_info_outline_white_24dp.png SHA1-Digest: pM6XYFrBDZyJGDCo7FzObXJ4Fy8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_UZ SHA1-Digest: NkYYZfkGo/K8LO99CQgOlCszblk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_UY SHA1-Digest: ONUgqpO4eHKCbc4I9lt0hnXcTZ0= Name: res/drawable-mdpi-v4/ic_emoji_recents_activated_light.png SHA1-Digest: oB3akohAY54ZwWkalbMRsXtYJ+U= Name: res/drawable-mdpi-v4/ic_select_all_white_24dp.png SHA1-Digest: 7ivqkSaxLcomol/I2K5TOieuxZU= Name: res/drawable-xhdpi-v4/ic_recurrence_bubble_outline.png SHA1-Digest: 6nGJjRcbSAQJ+oBqTB9ru86djWM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VC SHA1-Digest: OXIzY/KjvYdZT/LXQBAoqp7pamY= Name: res/drawable/abc_edit_text_material.xml SHA1-Digest: Kcap9wHIg3pDdpEtot8/QDSYxXI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VE SHA1-Digest: oG66iy9xkV2aj1MY/szR3pj8zE0= Name: res/drawable-mdpi-v4/ic_visibility_off_white_24dp.png SHA1-Digest: bR7uL9bUTt+rLUgg+5lpRftVxgA= Name: res/layout/abc_action_bar_view_list_nav_layout.xml SHA1-Digest: KWG1Bk0+gHtAKZtYRzqAkVrkAmA= Name: res/drawable-xxxhdpi-v4/abc_switch_track_mtrl_alpha.9.png SHA1-Digest: NdBd5wlMLy/yNmcs71lpwiAvUZ8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VA SHA1-Digest: gvuxOs/muxRZu5a4PRHrPdz7+Wk= Name: res/drawable-mdpi-v4/ic_emoji_nature_normal_light.png SHA1-Digest: ChFdBSWimcTj6jLaIGmNhUjaek4= Name: res/drawable-xhdpi-v4/divet_lower_right_dark.png SHA1-Digest: 5vtzSsOWxrOZPIbZK7ymPuLRTrI= Name: res/drawable-hdpi-v4/ic_video_dark.png SHA1-Digest: kaJwgqosYawCWKdXN6jELspjBmQ= Name: res/layout-v17/select_dialog_singlechoice_material.xml SHA1-Digest: BjU8OwKuERrbzVtBQKEjPAd4R+c= Name: res/drawable-hdpi-v4/ic_emoji_flags_activated_dark.png SHA1-Digest: gIY9sjCgyZyEH3Q+xIqsz4CoLwg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_UG SHA1-Digest: ammP0D/tLcrgu7hqA70yejT+V0Y= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_US SHA1-Digest: 0jE/PFzhpjHEgp+Pmo0sBinBYSg= Name: res/drawable-xhdpi-v4/ic_brightness_6_black.png SHA1-Digest: zpe/yLQkStMLoIK4EePIruR3x5U= Name: res/drawable-xhdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.p ng SHA1-Digest: MCXQ3UO/ZjROJv+Q9oQkLeDNszE= Name: res/color/abc_tint_btn_checkable.xml SHA1-Digest: 8u8Tkxy9mJwO/fhpdihKSt6YMxs= Name: res/drawable/share_list_divider_shape_dark.xml SHA1-Digest: MrLZ34H0lbSocNuprow3bYuFs34= Name: res/drawable-hdpi-v4/notification_bg_normal.9.png SHA1-Digest: e39HWYSRdaO+/NhxvCOzRk3gTPg= Name: res/drawable-mdpi-v4/ic_textsms_grey_32dp.png SHA1-Digest: GutqMf3V/mo5rCoh6b/6RKJOatE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US SHA1-Digest: Co+5n+uLZ3R2GbAfhiLsCy3lXnc= Name: res/drawable-hdpi-v4/ic_arrow_forward_light.png SHA1-Digest: F7mFOvujVqkYNv9201+kMLbpnjY= Name: res/drawable/abc_btn_default_mtrl_shape.xml SHA1-Digest: si9J2ga8fSgrnHUBNteE65S6TvA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UY SHA1-Digest: OHJSVIjgb3PkN3QctmplPc8uJ9w= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UZ SHA1-Digest: 0s3VgLWiElGLZPndvLU2QydhMxI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_UA SHA1-Digest: mCqgyKIiKl2VZcjZsBnWTjipBEc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TV SHA1-Digest: 2nS3XZ4w3DR065o1M/M/JsUM7ok= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TW SHA1-Digest: GVxJianmDusEC/HGf+VGoksOHP0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TT SHA1-Digest: OX+mha4+0Q+/ayJpV68aaht5DJ0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TZ SHA1-Digest: T30rgRQOY5w9wvhUTHpOSdju6Yg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC SHA1-Digest: 0FQA2XuDN5Xp9xp2ulaenWGj0Fk= Name: res/layout/verify_identity_activity.xml SHA1-Digest: 4DkQ6qCV5V+d0tpZ8oMUdT2OS0Y= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VA SHA1-Digest: i9QWJCLFZdmNZlXnq4Sc3iWpfho= Name: res/drawable-xxhdpi-v4/ic_visibility_grey600_24dp.png SHA1-Digest: ElbVxbxM8SCqTcTX9GZlAwmdzyY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG SHA1-Digest: jMJ1+TYrOk+FIDOyezSCgEBBlAA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TO SHA1-Digest: 8C2NrVJjiJ2VIe6e2SG9HRbUpeY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TN SHA1-Digest: FED4CTFMsRktTSDFVozGKFfgHC8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TM SHA1-Digest: wRKs89xVZ3eszAjOGyW6biIB59k= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VE SHA1-Digest: YRMBRAOz+UrjXKnZn89Vv2xzlOg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TL SHA1-Digest: 02qXcniA01s8q0mCsBvCAV66nBo= Name: res/drawable-hdpi-v4/ic_menu_lock_dark.png SHA1-Digest: OLS0Y7LkHAjTgKke4t+ssbaqi1I= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TR SHA1-Digest: It6YpUXvKTZrvmvKnlrtkaH94lQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI SHA1-Digest: REBe+ajxqSZL9NxThXUUem3jnhg= Name: res/drawable-sw600dp-mdpi-v13/ic_backspace_normal_dark.png SHA1-Digest: yOibY2yAUSDo2MVgX9+sZmBY1nQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TG SHA1-Digest: OOqLD1pizqDxzLCgvpj7hP/B3Ls= Name: res/anim/abc_slide_in_bottom.xml SHA1-Digest: ZliTihZ+8kHBA4SfvPIPI00Y7uE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VN SHA1-Digest: BGrGk+xkmzXMOUHG2ROAbBMZ6Yc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TD SHA1-Digest: fXGWbLcwO2uUDV3/v65+7z+ydSI= Name: res/drawable-hdpi-v4/check_dark.png SHA1-Digest: OF10knMqMePug2wsSUoTZ6zZPuQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TJ SHA1-Digest: sVzKUygsCtLduYavdSUOyP+Jafw= Name: res/drawable/abc_textfield_search_material.xml SHA1-Digest: stH8NpmjaXc5dKXq4DDXvkOo1rI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TH SHA1-Digest: to5ZNkVbbaTn9dWFGsdYNwYZUsk= Name: res/drawable-xxhdpi-v4/ic_lock_light.png SHA1-Digest: zf4j7GjJkOaQL/LXahXOCd8Qcto= Name: res/drawable-mdpi-v4/ic_search_holo_light.png SHA1-Digest: IwmnK2HQagqd/ZKXegQEzdknk+Q= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VU SHA1-Digest: idsA4gg5WlN5iTnrErnMvnumtyI= Name: res/drawable-v21/abc_ratingbar_material.xml SHA1-Digest: rf6f8HRUlLAVKAAEFPxwQP5tJB4= Name: res/drawable-mdpi-v4/textfield_activated_holo_light.9.png SHA1-Digest: CSfVZiTZ8M4gHRjhPdVvKlLuXxE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TC SHA1-Digest: h+VNblfdfvL08K4jtRyzB1SniKE= Name: res/layout/alert_view.xml SHA1-Digest: gHWVI8pn6LJxYjY/B5qPNjEDAK0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ST SHA1-Digest: Fh2rqEApU4sgPD+1dLHzfQW0Jlo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SV SHA1-Digest: NW7eQYaa6OCN5JxFIIcMXiUCkfg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SX SHA1-Digest: qPJl1K9ZBaGHWAbdxiA1XFP1nhQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SY SHA1-Digest: pxJxXcMSf7F47SEwPXqXfT7Of9g= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SZ SHA1-Digest: HXFHOSrj8KkBc9h+CUe97BcSQL8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SL SHA1-Digest: P/qdv4quNvaRviFdLBcbuaqT7H0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WF SHA1-Digest: YH2qvLQxCEFNdK3scMbqJ1rLPPE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SK SHA1-Digest: sfxakNdqV0E1+2FJQAaJVY7qBaM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SN SHA1-Digest: S1dW2CSdGrAqy9X2PaSCEadYfV4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SM SHA1-Digest: 9LpXm9Hhi0DHNDXZxoZmtMiZXZo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SO SHA1-Digest: kgpJUydtRlnt+/5S1EKn6EGM5jU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SR SHA1-Digest: CgemZGqbkZ1IkPlJdSZuOB5vs4k= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SD SHA1-Digest: FMCY1LyqhOjb1Ji7UBJiSFhW9b8= Name: res/drawable-xhdpi-v4/ic_backspace_normal_dark.png SHA1-Digest: AGrzhqB0uojxu55l0U6P3vce3So= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SC SHA1-Digest: 4A+CKfsEVbCeov+6aFk2zY9twcY= Name: res/drawable-xhdpi-v4/ic_check_dark_disabled.png SHA1-Digest: c9TvWCMataZvt30VdBp4tsgJl0A= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SE SHA1-Digest: uafcIzQdY3gb3eq5lMhvKBc4krw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SH SHA1-Digest: qwfHH84D0ixUkP6FbEog8mNRe50= Name: res/layout/log_submit_activity.xml SHA1-Digest: mFxIQHJrxfWuKHCZZYnmdr10TFg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SG SHA1-Digest: dqZElj+XoAesFoVwrH5/RGTNpfM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SJ SHA1-Digest: Dy5q310EumwWHG7yi/9247XEwlA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WS SHA1-Digest: mkxRWWtguUpaF6vYRb6vVK8FhaM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SI SHA1-Digest: XZCXpndTs5uKYlFqYZNUWvJ/9V4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SA SHA1-Digest: dSNaPvwq9X3O12zoD0La+ED1U5U= Name: res/drawable-mdpi-v4/ic_emoji_symbols_activated_dark.png SHA1-Digest: gi9eHLJ2IcuCuAP5FyZvLT0e9Yc= Name: res/drawable/notify_panel_notification_icon_bg_tile.xml SHA1-Digest: 728zuKsXYlpvrBKue1cT2+FVRU8= Name: res/layout-v11/conversation_activity.xml SHA1-Digest: a4IfYX1vcDiV/pqSYJahTFTCJeo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SB SHA1-Digest: +Hu3Krmmlzl4N3wTcxEY9rvo0Po= Name: res/drawable-hdpi-v4/actionbar_icon_holo_dark.png SHA1-Digest: 3LtRBykdTucmKV3dkReQtHb+vlY= Name: res/drawable-mdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png SHA1-Digest: wTxntWArKB7sDc4M27U+PpjZhyU= Name: res/drawable-xxhdpi-v4/ic_emoji_emoticons_activated_light.png SHA1-Digest: 3Iw4yaQ6kcuNfC0TE9JRZ3iqC6w= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_RW SHA1-Digest: 9v2nu80N7tOJxq51ZS9SUMzXyy0= Name: res/drawable-ldrtl-mdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: 1dQmPH4BF7Otx7V4njYiASwi5/k= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_RU SHA1-Digest: KLS5yyTbZVBMs07/kzbMl9FDcy0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_RS SHA1-Digest: Gp5fY4V+3mepr0fZAycPZAv5kI4= Name: res/drawable-hdpi-v4/ic_recurrence_bubble_outline_disabled.png SHA1-Digest: NTDdpWYLs7t9Osus1VojraeDZrU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_RO SHA1-Digest: 7pkIrynGenMlOimp1uNOzx4a9ME= Name: res/drawable-hdpi-v4/ic_send_push.png SHA1-Digest: fgtuvJ9AGUtDw5cbcZIfQilMQb4= Name: res/drawable-ldrtl-xxhdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: PqzD1Bva41x/4FJI5xe2uDeGmiE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_RE SHA1-Digest: 8BDvFUhSb3GswgQiUCYWtWx3CEU= Name: res/drawable/abc_seekbar_tick_mark_material.xml SHA1-Digest: DuFih8Np+ruXlGXOIY3g382yoTU= Name: res/drawable-hdpi-v4/ic_textsms_grey_32dp.png SHA1-Digest: iwBnh2xlTCgXXMytlUgYStjLpmU= Name: res/drawable-xxhdpi-v4/ic_emoji_flags_activated_light.png SHA1-Digest: 7HAHnpuwQT+utT89EKz2N/g7t3c= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_870 SHA1-Digest: wrVTblBRAtogCy0iVfpXEH6KlBQ= Name: res/drawable-xhdpi-v4/ic_info_outline_dark.png SHA1-Digest: /S7xBBhg1FIWb4g4lwlhLdCerxE= Name: res/drawable-xxhdpi-v4/ic_unarchive_white_24dp.png SHA1-Digest: 76V7Hze7OYOCHtxTFbFp6y2qvCw= Name: res/drawable-v11/emoji_category_places_light.xml SHA1-Digest: 0oWB2rwfMOzZwePPI6yYOKPyde8= Name: res/drawable-hdpi-v4/ic_mood_grey600_24dp.png SHA1-Digest: yyAr/jsi2L76IozhIsSVcPJ/gVo= Name: res/drawable-xxxhdpi-v4/ic_textsms_black_32dp.png SHA1-Digest: 1LjX+QtnTvVgfcv5Rj7Vu66qJbk= Name: res/drawable-xxxhdpi-v4/design_ic_visibility_off.png SHA1-Digest: zSrspL1HfRffZw4aQdBEi0VyTH8= Name: res/layout/share_fragment.xml SHA1-Digest: tSSIU/XwofYsCDc/RBo+PvGxjPA= Name: res/drawable-xxhdpi-v4/abc_list_longpressed_holo.9.png SHA1-Digest: VJa6PrhxyIRS2huzDuIN1KH+I2c= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YE SHA1-Digest: iWn4VA5oTnB/1SJio1WmtTzxIVA= Name: res/drawable/abc_ratingbar_indicator_material.xml SHA1-Digest: jSCetwmEsQWxASeYyjO7YhmGUG0= Name: res/drawable-hdpi-v4/ic_keyboard_white_24dp.png SHA1-Digest: gm7lHGB1QYwGm36NdoEeWP40kYI= Name: res/drawable-hdpi-v4/textfield_disabled_focused_holo_light.9.png SHA1-Digest: GAqpkknnxMFqolFn7Q0O1q26ziE= Name: res/drawable-xxhdpi-v4/ic_emoji_places_activated_dark.png SHA1-Digest: kBQvXnVBBQAXrqJsZnOaqMHK60M= Name: res/layout-v13/message_details_header.xml SHA1-Digest: naq0XxW2Md+akCHCs+/SOYtFnQI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YT SHA1-Digest: ogcQkkoCGMY8nCyJK4aMLc8rhgk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_878 SHA1-Digest: ru2D0tMTr43HNk9n8YNkwk5hGmc= Name: res/drawable-xhdpi-v4/abc_text_select_handle_right_mtrl_light.pn g SHA1-Digest: 9Xk7OPEfyHSOAHCD7Mwan5cJXnA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_QA SHA1-Digest: slbTHMPLw/mmyQ2E0xEPrlrO4/4= Name: res/drawable-xxhdpi-v4/textfield_focused_holo_light.9.png SHA1-Digest: yTySMaFvSlprEgpEyEgjuVbWIFM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PA SHA1-Digest: fCZKN8Ehp845RUn/9sjnTx4rhxw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_883 SHA1-Digest: X2TcGpqy0IDrFCgWXalvi/FxY4w= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_882 SHA1-Digest: 3fDO2V9ovqhY9kDKG5wczXGwaks= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PE SHA1-Digest: tvR2SBCPV/svYtRXJcjnaVOw4Qs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_888 SHA1-Digest: +nKjS9d1/WYwuDLO7dQS2W5u25Y= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PF SHA1-Digest: /tlLAeslldW1EMfh0/r0nmtik2o= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RO SHA1-Digest: s9CR+P7gvF4BQHm2xZ6+Q8n+nTY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PG SHA1-Digest: PqaHYtXnRREfBVJdJtQGthBM6Mk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PH SHA1-Digest: //vvt5FSIATQwkpUj8jsLjb4k5Q= Name: res/drawable-xhdpi-v4/icon_lock.png SHA1-Digest: x9v02bq0ywac6jle/lMC9N2f8xQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PK SHA1-Digest: 6PpXjrxYrpwZm86B4lrad9K0Tjk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PL SHA1-Digest: 9C3SaoX/Y6RhlzaZ3vZUrlZYvao= Name: res/drawable-xhdpi-v4/abc_ic_star_black_16dp.png SHA1-Digest: GT/QfWDQh959gQPTphPPRr+uGOA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RE SHA1-Digest: lN4hO/zfjPGWlxlXPt1nQG4QJZ0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PM SHA1-Digest: CwesdCPcB4nCSn+T+YSoOMSlyME= Name: res/drawable-mdpi-v4/switch_bg_disabled_holo_light.9.png SHA1-Digest: BhD8bo9CPDyMD8yAOdeT+l8P5Jk= Name: res/drawable-hdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.pn g SHA1-Digest: WqxwEUexvYh0cT/zvmtdxmv8z34= Name: res/drawable-mdpi-v4/transfer_controls_background.9.png SHA1-Digest: Lvtopp/2tRzPP+kXqYiM9od0lTc= Name: res/layout/abc_expanded_menu_layout.xml SHA1-Digest: +K8i1UxIGMVynpvxcjq1tU6AL8s= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PR SHA1-Digest: ff7WU4GqkjoPRUAuysmgqkwvTfA= Name: res/layout/conversation_activity.xml SHA1-Digest: VAyoHr5vzJv9wm/D6nJ/RgnQVM8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PT SHA1-Digest: 0yfhznPNvG4b4UITlM9tJsOwIys= Name: res/drawable-mdpi-v4/abc_cab_background_top_mtrl_alpha.9.png SHA1-Digest: 6eRtpYyE2B45gWd2aZtCG4kO5FM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PW SHA1-Digest: czrqNkXCl59UCFT6eIBMD5X4yB8= Name: res/drawable-hdpi-v4/abc_list_focused_holo.9.png SHA1-Digest: zND8CPcT8wBLOji5D5ZGNvi5kR8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PY SHA1-Digest: HBYBVp4jk/ST4eBs8jk7XDqpUoM= Name: res/layout/emoji_grid_layout.xml SHA1-Digest: NnZDJdnyddzo7hWV77sEuQm1Enk= Name: res/drawable-xxxhdpi-v4/abc_btn_radio_to_on_mtrl_015.png SHA1-Digest: rG5iJ8LJqs0d2oExcr38IP+z/7s= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_881 SHA1-Digest: adrqPFT39BGEc9L6ihSloFCvqrU= Name: res/layout/abc_alert_dialog_button_bar_material.xml SHA1-Digest: U7wENYGNxvfAavK6fN4rpU8GLgI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SK SHA1-Digest: OpWPnEd6/Jmlmpv8WaU3DT4LItA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SL SHA1-Digest: xRAKr0QrWNRv0tF/LfsWZ2Hq/sM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SI SHA1-Digest: GVkOdITub41bNG8Fig/9vPSNo2k= Name: res/drawable-hdpi-v4/divet_lower_right_light.png SHA1-Digest: hcKGWDmNLo452sGyK4oSdDMB/+E= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SJ SHA1-Digest: Qh2tQvrXM3wEadaOQ7twcRlMF74= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO SHA1-Digest: Yz0C8pi4T1L56Nlm3TVwaGLjyQc= Name: res/layout/abc_dialog_title_material.xml SHA1-Digest: jS6bbgBynF3zebyNioiwNxGkv7Y= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SM SHA1-Digest: Sy0eWRdE16v7G2ETphVPHohO/Dc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN SHA1-Digest: T9THj+HSTo2G8LZHVtDZy2ZH6OU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SC SHA1-Digest: 69OaYaEUAquIxWPBTMT96D3mFgs= Name: res/drawable-xxhdpi-v4/ic_backspace_grey600_24dp.png SHA1-Digest: uwFPcHYZCGXqW5sIGeYIEnS0wa4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SD SHA1-Digest: sPYOURylxFZznupFTubdXbaMb2o= Name: res/drawable-mdpi-v4/ic_unlocked_white_24dp.png SHA1-Digest: Pw8CS4BIJ+QJuZGGUxyPnuuWaxg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SA SHA1-Digest: RvkQygRBDVcw1a7hjEYX88hwfMA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB SHA1-Digest: ahGNI4eO1DCgd1DUDdain8akS5A= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_OM SHA1-Digest: Qqh5G0srcW9p2rsj7xSDXf2geNc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG SHA1-Digest: AAObEaJer/GPWCRYsABtWl6JbnM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SH SHA1-Digest: d4MFXmziQLRwnIOBDrApxGXs6p0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE SHA1-Digest: whEALd1LVuwaUn4et+r9hlsMiEM= Name: res/menu/conversation_send_drafts.xml SHA1-Digest: wiaYJJqiQjiNcqPbv6uNj6hnVJo= Name: res/drawable-hdpi-v4/ic_attach_grey600_24dp.png SHA1-Digest: nazUEJrIvYZ9UJHATYmPIOkBU6E= Name: res/drawable-xhdpi-v4/ic_emoji_people_normal_light.png SHA1-Digest: AaSPvsfgBVFXQjc/6zd5sSaehQ4= Name: res/drawable/emoji_category_flags_dark.xml SHA1-Digest: AgeTyeBmCPuLJuPBxfjtUWAnQjY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RS SHA1-Digest: fceCOonAoNK2vZg1X3HFpazjNwQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RW SHA1-Digest: diwT4/eaFAC0RrngvvaAorhEyRk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RU SHA1-Digest: SjLiYb5elyZp4CxuG/jPZiGkAvU= Name: res/drawable-ldrtl-hdpi-v17/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: StjC3BA1LtHVLp7GTDic4k0PU08= Name: res/drawable-xxhdpi-v4/abc_scrubber_control_off_mtrl_alpha.png SHA1-Digest: CzvvFFc7BaWc8x/Y+tvpZvFkY9w= Name: res/drawable-hdpi-v4/ic_app_protection_gray.png SHA1-Digest: U6eZmhJFhi6M4ifbdNv4p2+q+m4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TN SHA1-Digest: sRM3isN8XNXBUejDL/3XVmi7CP0= Name: res/drawable-hdpi-v4/ic_emoji_symbols_normal_light.png SHA1-Digest: DcAYFKgBBakJIAriXXOZQ/swcoI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NC SHA1-Digest: 3Ha+QOSOso/ZuUnEndSttTCui2I= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TO SHA1-Digest: dE14YSWn1Q82IuAx7bz59IzeUJE= Name: res/drawable-xhdpi-v4/ic_advanced_black.png SHA1-Digest: uKoepOzDCewgO7hPUSxctUNm9a0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NE SHA1-Digest: tszF9OIdzcNjcSHbzXrfTPqwfd0= Name: res/layout/time_picker_dialog.xml SHA1-Digest: oPJIQ5mohdAVRZl2D0jhDmbx1ns= Name: res/drawable-xxhdpi-v4/abc_textfield_activated_mtrl_alpha.9.png SHA1-Digest: TLfjxp5bknlrmh6zJTSYD2AfmTo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TJ SHA1-Digest: YnI7JHZGkgVea6QH+ndC7RXc5t8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TK SHA1-Digest: Depjsuzhk7mtPoM47CDzUSt6AHE= Name: res/drawable-xhdpi-v4/spinner_disabled_holo_light.9.png SHA1-Digest: 90BefocA3jktdxbeMYf9CMCWV3w= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TL SHA1-Digest: E1XJpx2P54sMuwGSGIjqbyqPB9s= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TM SHA1-Digest: +Rt8RtJkczgUqGlsGrhLJCqOfYg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NA SHA1-Digest: 9G6kvgsYzJojWoiCuKs4LFfCQbA= Name: res/drawable-ldrtl-xxxhdpi-v17/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: RlASjFlsAOIfgzOVaMJeKCTDJ3o= Name: res/drawable-hdpi-v4/spinner_focused_holo_light.9.png SHA1-Digest: 9+5viI+b67liCPiPkELWte9HLXc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TG SHA1-Digest: xoRihj6KFFTCZEu2DwjE9wkwjCU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TH SHA1-Digest: 4Y+fNQiUYoj/adZKdK6FuT4WFKw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NL SHA1-Digest: L481Tp19PmS40cOvmGOKjpiEZVs= Name: res/layout-v17/abc_dialog_title_material.xml SHA1-Digest: iO2ZwhbDlmITcxVKw57R4GTbcW8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NF SHA1-Digest: IdRiuvAntLUe8r8EQiIk2dtb7bo= Name: res/drawable-xhdpi-v4/ic_group_white_24dp.png SHA1-Digest: v+akTbrOyt63fqnB2m8icaXOQ9A= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NG SHA1-Digest: 2nRUBrCNwLf9EEuCsttbqsVYO5Y= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC SHA1-Digest: GxO1H9LUjukADYAq3al7uBln2WQ= Name: res/drawable-mdpi-v4/ic_backspace_disabled_light.png SHA1-Digest: 8UicXzhNTwHx9Z6gKpFQy8Nq+pQ= Name: res/drawable-xhdpi-v4/notify_panel_notification_icon_bg.png SHA1-Digest: cuJ+cwlm5QO6frAFAjbS9w6zhJ4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TD SHA1-Digest: l+JUZji7wvWwRHePO5f6TBqB3Hk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NI SHA1-Digest: rKpi204I76lvISSARcMzH0LUASI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NR SHA1-Digest: tmbcQ1088LZxiFMYWOqzJ7JECIE= Name: res/drawable-hdpi-v4/ic_volume_up_light.png SHA1-Digest: AmrZQKKPy5VxiBOPfjNXb/eoMiw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NU SHA1-Digest: Krbxcr6/EQRZATYij5QxbMA0M00= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TA SHA1-Digest: zxdsRgGax6ubk8hnD3UU1Ruk808= Name: res/drawable-hdpi-v4/ic_send_sms_insecure.png SHA1-Digest: ZRQWrB//EkYHtK8Cif4HEouXWeI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SZ SHA1-Digest: y7fpRnOAUa5FZ2J07+kj+xlYZtk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NO SHA1-Digest: YduDYCJDzKt3jB1F5FzjA8CRfPE= Name: res/drawable-xhdpi-v4/ic_emoji_people_activated_light.png SHA1-Digest: ySVeYNO7XxKPjLiwanuv5kUKnKM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SY SHA1-Digest: 51xhmb8BiQjfjHf6fUfxEy6ARiA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NP SHA1-Digest: 0eDpSvIShOUr9yJLkxJBQ3zhJrk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SV SHA1-Digest: APTfTay2dBhczPvWxHVungEgdsI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NZ SHA1-Digest: cqczT+ATmJlNQNnCYDCwcK7Bz6A= Name: res/drawable-hdpi-v4/ic_lock_white_18dp.png SHA1-Digest: SadMiv0GE5LgIJr778HH3KfimtI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SX SHA1-Digest: u6hdteFIcfA4Qh6VU1ZTlOmM8Gc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SR SHA1-Digest: QRN9HaIk98/GKlRjpnAs35W3AAY= Name: res/drawable/unread_widget_icon.xml SHA1-Digest: iJJBohPJXzhBScSRFgh6D9b+hpI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ST SHA1-Digest: 2R6NCIAJ8vXbvobZaNkGyw4Fwlk= Name: res/animator-v11/scale_with_alpha.xml SHA1-Digest: VL4imnI1LOFLVsR92Vrab3fF2tE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SS SHA1-Digest: qDHuPDISr9FHIMONMSIrxIlL0xQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MC SHA1-Digest: hGXW2RGjkZnTJzSXIYWADTf7Q7E= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MD SHA1-Digest: xPoHwRDHL6SrjfKT6+g3sNDP1L8= Name: res/layout-v16/contact_selection_list_item.xml SHA1-Digest: gaxyPsb4J5av/qTTgQvisFr9004= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MA SHA1-Digest: sP8aiUoFfUnDvMa4cZ+KjOpWvJY= Name: res/color/abc_primary_text_disable_only_material_light.xml SHA1-Digest: ha0iBG12VF3cEliu/mL5oLsMBCg= Name: res/drawable-xxhdpi-v4/ic_done_all_white_18dp.png SHA1-Digest: WYGP92FJ9q+BZE8E04vg3vwsD6Q= Name: res/color/abc_hint_foreground_material_dark.xml SHA1-Digest: bwmaFbphxna9+xPcugTHZO8XbEY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MK SHA1-Digest: TgHeYY6bKAkWQ84KO/nME5j9nvk= Name: res/drawable-v11/psts_background_tab.xml SHA1-Digest: JywLhgDxib9atxdXInt/S2REuBU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ML SHA1-Digest: +YIOrG20mY4pRKZoLogFQUq6H0k= Name: res/drawable-xxhdpi-v4/ic_clear_white_24dp.png SHA1-Digest: 3fWIHkcMQ9WUZtG2f/nvgPZi7Vc= Name: res/drawable-xxhdpi-v4/ic_emoji_people_activated_dark.png SHA1-Digest: cuvXxnmfuV3zSYU+7+D4Of1zOnY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG SHA1-Digest: HDRbGR4PZPk+mCDGl2fLERJfNR8= Name: res/drawable-xhdpi-v4/abc_text_select_handle_left_mtrl_dark.png SHA1-Digest: n1RWb4t/Atpj+FOtAslnzwcFcuM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MG SHA1-Digest: 9xXZ4pv619b38rhecTjCvpGsRgY= Name: res/drawable-mdpi-v4/ic_emoji_flags_activated_dark.png SHA1-Digest: 0MDts2HilwKeFl9r2d+WrnJLkSY= Name: res/drawable-mdpi-v4/ic_emoji_emoticons_normal_dark.png SHA1-Digest: WzpU4P6ZqqN18ywBS5qllHIenMA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MH SHA1-Digest: ksr60vxlNQ+S2vGB4wQjQ035rzk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ME SHA1-Digest: C9XunjvBRg674eV5hJicqisH1dA= Name: res/drawable-xhdpi-v4/ic_recurrence_bubble_fill.png SHA1-Digest: gsvxIo7mxvWa3lLcSOklKG4lNLw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MF SHA1-Digest: yHAVCZYdYpFSGFHYZKmru+Lz1Vg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MT SHA1-Digest: ZzGfRKQsOkLMM4rNVZQNdlkhKUw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MS SHA1-Digest: 53kFgC2lWvkg0RQdoSOeZDHGWqI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UA SHA1-Digest: pS3fmypW2sTisbd+dNqclx/Hhsk= Name: res/drawable-mdpi-v4/ic_group_grey600_24dp.png SHA1-Digest: NT/pB/ZWCdlgfDjNs1M7YixRR9g= Name: res/drawable-xhdpi-v4/ic_save_white_24dp.png SHA1-Digest: 62+3ju3WbD3do5qYlPVUCFA4ehY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MR SHA1-Digest: BzTGjjro6Xd4KK/3Nd9HDm6Uy9g= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MQ SHA1-Digest: WV7Wb4F0J6tSNdwwkzDdM6iowqw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MP SHA1-Digest: 8JJXIP2nBNzz7H5t4EVdX6K6h58= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MO SHA1-Digest: 7ygX4YP5g568rrukemALUJsQWQ4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MN SHA1-Digest: 2OQsgx6XE9s+gZaHd5es6PyizR0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TZ SHA1-Digest: yb7+qWRrTQ3WMTbdNSafeUjKvSE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MM SHA1-Digest: CgbvC0cEQfEags/cuKxFG+4qQ7I= Name: res/drawable-xxhdpi-v4/ic_play_circle_fill_white_48dp.png SHA1-Digest: zT/J3NHuQMBOslX9Rlc7oUkxZC0= Name: res/drawable-xxhdpi-v4/ic_launch_white_24dp.png SHA1-Digest: S3hKxaIQGJZXm85iAx5LXVvztZo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MZ SHA1-Digest: JaxxJGL+HEM7oBQ1R88V+uJhSS0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TW SHA1-Digest: NfD+3Fztm7C3XxQbq2pBOGqKeJ4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TV SHA1-Digest: Ris17D+/QUvHhHkNr4mTv2xEAGU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MY SHA1-Digest: A61ZRtmC1TVH1R/EQS/6YoBFKLI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MX SHA1-Digest: BcP7PPzqBoh8HeIjfnNqKtg8DcM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MW SHA1-Digest: eFP6Uqji/vptrfcrmraniTYNVdU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT SHA1-Digest: TyGqulSnIfD7kWr7GUtD5bTD1H0= Name: res/drawable-hdpi-v4/ic_emoji_places_normal_dark.png SHA1-Digest: 92ovqQTOA4J0s8cuOIbED129tcA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MV SHA1-Digest: ugqf4ZviM65EcJuzO/E8sIeATLk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TR SHA1-Digest: 72/i0hSlhQT+73c2QiQD7/gVc8k= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MU SHA1-Digest: NyvG1+2xAYXpmxUrZaoP7/4ynOo= Name: res/drawable-xxhdpi-v4/ic_message_white.png SHA1-Digest: nFyuhA9Xrpw2K5ndU20hX2trY0w= Name: res/drawable-xxhdpi-v4/abc_text_select_handle_middle_mtrl_dark.p ng SHA1-Digest: PSeedHvDkZY2LIfg9EBkZrlW8W8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LI SHA1-Digest: 5c5oQUtfCEAEPDk6dFi8DWOMBwQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NA SHA1-Digest: v6Uz30xFp7jzUIOs4lQhcDOmzII= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC SHA1-Digest: dFhp4MlENpx/8otef5KGD9JQIw8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LK SHA1-Digest: xZy3jJkV+z/SLJKkqwCNKOtsPAI= Name: res/drawable-xxxhdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png SHA1-Digest: Vhfvv1y0wkBw2X/iXEqs7JGlm+o= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NE SHA1-Digest: U7FuPCtu97pxXgaLy4jZP/8OL4g= Name: res/drawable-mdpi-v4/check.png SHA1-Digest: avkwoshYVlbnHtetx9GPvFN8ZqE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NG SHA1-Digest: MgajsYmpKYwMV53K9bTUweEND8s= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NF SHA1-Digest: uqOstg+ldbNhMjzpHuh0izKK+jc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NI SHA1-Digest: gTqxDh/MRul6/h8LYqEZPtshll8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LA SHA1-Digest: py3X9u/lE6xMR6fi8lzV86sO1hM= Name: res/drawable-xxhdpi-v4/ic_recurrence_bubble_disabled.png SHA1-Digest: V5oZHMEOJ7E3o/CODskCp3rKJYw= Name: res/drawable-mdpi-v4/abc_ic_star_half_black_16dp.png SHA1-Digest: FHMsjUZwrKpDGM7XpRyQGuhOHMs= Name: res/drawable-xhdpi-v4/ic_emoji_places_normal_light.png SHA1-Digest: kA4yyxqYzjB7kHrP66hy/awfdUQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LC SHA1-Digest: 00HknFCmZjohOMWi6P6q1g1nDfs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LB SHA1-Digest: K1FxC84R/q8VHjnvJmF8YpJuWhQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MK SHA1-Digest: 2NXj053RfuUBxSIFat1D5IYDyjk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LT SHA1-Digest: fb/ckx5EjSMVyJ4Bdr7L762q5Hs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ML SHA1-Digest: TmBs7z4K7qZfn3YuuMPnlQo9Wrk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LU SHA1-Digest: ob0QLVUzjPJBuULFaESbiAvv4H0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM SHA1-Digest: fU2WheWE8sFw3uoYuP70+TNfyOQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LV SHA1-Digest: otR531NPPcrIotMjlVeaYW+GOZU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN SHA1-Digest: /gvOpSnmCSfZXF1CLm98DWyru8E= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MO SHA1-Digest: aQSCgNvOHl4+xuMdKH41mYE8ryg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LY SHA1-Digest: /By5pIbDyT8f6wuNJjPX+TySrpI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP SHA1-Digest: osX2XD0hfucZvxJH1g5j6P2+1FU= Name: res/drawable-mdpi-v4/ic_add_white_24dp.png SHA1-Digest: pT3SpNkEzuNyoBwc5Wr6Ur9ZMpk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MQ SHA1-Digest: uRO4iP2NyZsAxClqG5n7A6fBGc4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MR SHA1-Digest: 22eFX78st0eT0IR308l3k7Ixdc0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS SHA1-Digest: m15+ICDC8TN6qGgyxI9fGIq1r0Q= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MT SHA1-Digest: II8edaEOsL/kdVLxs1neIm2RZrU= Name: res/drawable-xhdpi-v4/ic_app_protection_black.png SHA1-Digest: 7pSYUGzZYGidYb/M0JtUFkeusog= Name: res/drawable-xxhdpi-v4/ic_emoji_objects_normal_dark.png SHA1-Digest: 4C4L1wrESZ3UVMCMyGXEByUQv8A= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MU SHA1-Digest: 4hPw5iNm8AAa9K8Smv66ARGBrVw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MV SHA1-Digest: z2uEx8PGk1pYjANMIWvmiWzn9Pg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MW SHA1-Digest: GJDPn4E5DbpCYuQruKsoe+52ZRQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX SHA1-Digest: 4lhjsOHVa5BQpdDNiFpsm1nG+OI= Name: res/drawable-mdpi-v4/ic_account_box_dark.png SHA1-Digest: 7YhW8AZtzBWHE9ZeieJvih7NR50= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY SHA1-Digest: wVg7EA8+tRlJz87G5FU/Tc2Mbag= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LR SHA1-Digest: osiKYK17TsMEMpxwUSdWIH0VNtc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LS SHA1-Digest: w64d6l2qMRu/hc1FezgCU60XUaY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MZ SHA1-Digest: rKcRh8hcFnOXhYfgSvawBWQxcSQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_27 SHA1-Digest: nEYbSuXRF/uctKuasoKct6HqEFw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KE SHA1-Digest: 7Eb+9olO5an4TwFHi55sQfOqZsY= Name: res/drawable-xhdpi-v4/ic_volume_up_dark.png SHA1-Digest: mfULAXM3aV46dhmKC0I1/BVFjY8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KI SHA1-Digest: VgndwACstWBLpIyzd00I3DsAgzY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KH SHA1-Digest: WwDjEfSaYYvxvjzp9kuZw0wKTz8= Name: res/drawable-xhdpi-v4/ic_volume_off_grey600_18dp.png SHA1-Digest: I47X7flSnPoPB8eb42nJUP1aPgo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KG SHA1-Digest: jSk/TwIasSlFmnZhTWrCWwmOPmU= Name: res/drawable/error_round.xml SHA1-Digest: /dc/CUQ2SFAXgoplWG74eEB36w0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NO SHA1-Digest: XIwuQ06+W3t7V0wUlyRBNu/1DyA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NL SHA1-Digest: +/Y4Of7cCkZTB8fn4MrZSKPN7go= Name: res/drawable-xhdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png SHA1-Digest: pBR99OG39RSH5mvInfhWhS5HH80= Name: res/drawable-xxxhdpi-v4/ic_pause_circle_fill_white_48dp.png SHA1-Digest: xN33rFibRxouC9pfWIRBsJ/nDcg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NR SHA1-Digest: SiNwROtI47UYTzWL8hqcJ11u8Dw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KY SHA1-Digest: jWCt/+g+/sNLdENqqAtaUlvbqmY= Name: res/drawable-xxhdpi-v4/switch_thumb_activated_holo_light.9.png SHA1-Digest: FZ0jvocMQHbBY6GfdO1/lyn4CAI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KZ SHA1-Digest: DxmO0yjUvvuXGC4nK8NuAZrOW4w= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NP SHA1-Digest: 2g5uGte/BTNum9b1mAxNElqDCpE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KW SHA1-Digest: cEw4Jm39ArCO3iOm52+C9sLdDZM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KM SHA1-Digest: riY4/v0MIgCE8l9iMpTLN8m5tOs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KN SHA1-Digest: 3O4gZzoMqkKgHs7s1u3KCL+PR+8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NU SHA1-Digest: gTUt0Nzsr87sGj6sgNtddpWwhAw= Name: res/layout/conversation_item_header.xml SHA1-Digest: OV9Q3kbpbDwb2wxp4ZtsdOgxUSI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ SHA1-Digest: D1QjtPWapV8sDGRu8jlTmbg9CiY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KR SHA1-Digest: kKTdqSpVpt4zAI7ytiAadhPJ8Iw= Name: res/drawable-mdpi-v4/abc_list_pressed_holo_light.9.png SHA1-Digest: tbKOWkoq8X/O9SqZLE2Z7VwIrfw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KP SHA1-Digest: 58tT5gudlbJRzpqqFyua7jkMGjw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PE SHA1-Digest: 2/wViBuGamXrqaTPx4xhDh/kR6s= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA SHA1-Digest: xkDyNu/va2uiNSGtY+SbV/uUvKQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_JE SHA1-Digest: pdeQRQM5r+R2TwhSD3dAlw9Ii6w= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PK SHA1-Digest: 3K58UkbBgfsBn+w1WYyrLGg1Vs4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PM SHA1-Digest: 1eKd1jGumli5KScCSRe7W8FtzPg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PL SHA1-Digest: ZZRfZwKbj5nBaRSEyzDy4oVNL3Y= Name: res/drawable-xxhdpi-v4/ic_brightness_6_black.png SHA1-Digest: hT3Q5aI6chKgjr3u96CzIytR26Q= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG SHA1-Digest: O/wvabhcicXGnHyFO5zY9nBEMzw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PF SHA1-Digest: wFTU4LaoIUUeY8deZsANu+eyMB8= Name: res/drawable-xxhdpi-v4/ic_menu_search_holo_dark.png SHA1-Digest: qf7PAA/agfGHmWMb/SvP5kBKVko= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PH SHA1-Digest: 781vcW1KyIN83oPhMi587TC/tmk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_OM SHA1-Digest: iPQ/4sahDPUNj7CLb4X+eEMNY2s= Name: res/drawable-mdpi-v4/ic_circle_fill_white_48dp.png SHA1-Digest: V/bvSL+GAYkgI4E2eJefZNA6EMM= Name: res/layout/abc_action_mode_bar.xml SHA1-Digest: 8cOoh4SHfS1Uld3Y198MHRMf1p0= Name: res/drawable-xxhdpi-v4/ic_brightness_6_gray.png SHA1-Digest: tHdz55QDyJozOXlcobBxkQ8hYLI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_JO SHA1-Digest: KTnuJeszCYuiahu4zflNUDJa9yg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_JP SHA1-Digest: QpQOc4vADA1q7EahWr87MV5uWDg= Name: res/anim/abc_fade_out.xml SHA1-Digest: MTJWZc22b5LNeBboqBhxcQh5xHQ= Name: res/layout-v16/reminder_header.xml SHA1-Digest: +w3ZpcGYIF5kKzcLuC/LKEO3/MI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_JM SHA1-Digest: OTB7tR826TJrULJiPuDXwX36dZc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IE SHA1-Digest: mcKFsH0GatsbmdTjQdRh0jztICI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ID SHA1-Digest: BkBerSKlrQMQY3/KH5RNV+n5huU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_QA SHA1-Digest: WICjeFr27fN7anVdxio0RVkYeGg= Name: res/drawable-xhdpi-v4/abc_list_pressed_holo_dark.9.png SHA1-Digest: WYYEXP9zXPHmkO70T8BA20aSj+U= Name: res/color/date_picker_year_selector.xml SHA1-Digest: 7HDV3N/ftFQRROQYt5WCO9Is5Jw= Name: res/drawable-xhdpi-v19/switch_thumb_pressed_holo_light.9.png SHA1-Digest: 58f1EtXQ3wizMEJeTAgSgdZA5uA= Name: res/drawable-hdpi-v4/textfield_default_holo_light.9.png SHA1-Digest: fuY+WIlRJ8vgPwAzkl65YeJKVPo= Name: res/drawable-hdpi-v4/abc_list_selector_disabled_holo_light.9.png SHA1-Digest: BLQq1kPx0/JPxPxgp/MrxD6Ft1Q= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PT SHA1-Digest: FTSRD+8krf2I/fe/q8jN/pky5RM= Name: res/drawable-mdpi-v4/ic_arrow_forward_dark.png SHA1-Digest: UtdFAKXRarbKVaIUUO5i/4PmAUY= Name: res/drawable-xhdpi-v4/ic_movie_creation_light.png SHA1-Digest: 8qN3jMnnkv7nQG2Nt9i6hF8XknQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR SHA1-Digest: W7pvgFF3VzVSM9IGog1S1WZP4mw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PS SHA1-Digest: IGHtSws25qiaMxsqlBXqtxSsvMA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IS SHA1-Digest: JvYMu8OKrL9lcqfrYDV9I4ltcFs= Name: res/animator-v11/upper_play_to_pause_animation.xml SHA1-Digest: vpzxwaaL5PRRSeJChzUUaEwd3iQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IT SHA1-Digest: CatC4fTYOKpgZJbH2mM3f/nSBU0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IQ SHA1-Digest: VFc4xI5nUj1n8/U6qztKBLpJp48= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IR SHA1-Digest: 6nXRpbNbAuqDvlBHdtG30O0CRG4= Name: res/drawable-hdpi-v4/ic_send_sms_insecure_dark.png SHA1-Digest: GDJMSStAh7EYNszWCaxubbfHoWk= Name: res/drawable-xxhdpi-v4/icon.png SHA1-Digest: 0sRkUHHzVMQ90JPNC0VwdWFolPI= Name: res/layout/led_pattern_dialog.xml SHA1-Digest: tswBD0QJriEDClR9AywmEXzI4nQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IM SHA1-Digest: TaW3gRKjop4Pi5G+R3Dk6vm0V+U= Name: res/drawable-xhdpi-v4/ic_save_all_white_24dp.png SHA1-Digest: Gx+5fK2ckaZdBfgGtgchP2Ohl4M= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IN SHA1-Digest: BYe7nV7/sNQ9Pohqd3g8yQY2qgU= Name: res/drawable-mdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png SHA1-Digest: j4YCzt0aE3XiVuR90dIkNXUHnHE= Name: res/layout-v16/fragment_submit_log.xml SHA1-Digest: PWVivlzjiCq6ovVB2zlarg82dyQ= Name: res/drawable-mdpi-v4/switch_thumb_activated_holo_light.9.png SHA1-Digest: bnXBtaKF7a29jCEvIOWErkhFvv4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PY SHA1-Digest: 0YjHGDh9jac/0gpxStTX8wtMr78= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IL SHA1-Digest: noPCK0eckpRYQhQWHyZztIoLLvo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PW SHA1-Digest: phVp2GMskybPur1giJmEDXf4+mk= Name: res/drawable-xhdpi-v4/ic_info_outline_light.png SHA1-Digest: 6a9eNZD07GQajIG06leuESyJ/Ck= Name: res/drawable-xxhdpi-v4/spinner_default_holo_light.9.png SHA1-Digest: Q96rsORloNyw2WFYTUl9VA/zlUc= Name: res/drawable-hdpi-v4/list_selected_holo_light.9.png SHA1-Digest: 8+a6kSVhZ1n87KOe3NWXssOoSRY= Name: res/drawable/emoji_category_nature_light.xml SHA1-Digest: RzDuk6h6UEkqappk7hYx6pgKeCs= Name: res/layout/expiration_picker_view.xml SHA1-Digest: ken0b/R8av4QZrSzp1tlprkgdog= Name: res/color/abc_tint_seek_thumb.xml SHA1-Digest: wCFz+npXjWt6jSRAejKK29canhU= Name: res/drawable-mdpi-v4/ic_backspace_grey600_24dp.png SHA1-Digest: gUiX8RH5wH4fZj1wG+l03S3ZlOc= Name: res/drawable-hdpi-v4/abc_switch_track_mtrl_alpha.9.png SHA1-Digest: +BAInzzGimhbNKEsUcg4H+12pT0= Name: res/drawable-mdpi-v4/ic_emoji_symbols_normal_dark.png SHA1-Digest: tljO68WW5/+x0yJR9GWMpSppcoc= Name: res/anim/design_fab_in.xml SHA1-Digest: 88HYAVsN9aX1xNbLpWMveab3t7w= Name: res/drawable-mdpi-v4/ic_group_white_24dp.png SHA1-Digest: zLcWCyxyVrdWkFDGj8/ZlLWVwUc= Name: res/layout-v11/notification_media_cancel_action.xml SHA1-Digest: FOKQ0fSwhQySQM6fclToJK+8huE= Name: res/layout/abc_select_dialog_material.xml SHA1-Digest: R48Z4M6YIfsfL/+YdwRm1HaHYU8= Name: res/drawable-hdpi-v4/ic_photo_camera_dark.png SHA1-Digest: wbyQ2OL70KZRwipbMxfW86M9cqA= Name: res/color/recurrence_bubble_text_color.xml SHA1-Digest: m+qPsVs0ZrAZd+YF4dsuJraUJy4= Name: res/drawable-hdpi-v4/ic_emoji_nature_activated_light.png SHA1-Digest: 76iZVIwm+2dITVc13qDTowynlgE= Name: res/drawable-hdpi-v4/textfield_activated_holo_light.9.png SHA1-Digest: bLHdUYUynLqsA32+N3F3BJ4EBHQ= Name: res/drawable-xhdpi-v4/switch_bg_holo_light.9.png SHA1-Digest: c+JwYiQCZPeynR8o/HjhfKjOc5g= Name: res/drawable-mdpi-v4/ic_lock_light.png SHA1-Digest: wbLs3mArn7d1bmp55eoiuIsD9uc= Name: assets/emoji_objects.png SHA1-Digest: EJCaAiWW33tUKJXv05D8xPp76zg= Name: res/drawable-xxhdpi-v4/abc_btn_radio_to_on_mtrl_000.png SHA1-Digest: 53DYKltMU34zhaYZHtlNZkme+Co= Name: res/layout/prompt_apn_activity.xml SHA1-Digest: PSJ0tS+8D/+87BKr2ZmQlJvwOoY= Name: res/drawable-hdpi-v4/ic_backspace_normal_dark.png SHA1-Digest: J8qgDWuh2640WfVZ8mD4dTE+oH8= Name: res/drawable-hdpi-v4/ic_emoji_objects_normal_light.png SHA1-Digest: BWs4UA8bueEb3x1ZmUnbACZAn5k= Name: res/drawable-ldrtl-xxhdpi-v17/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: 6bGD4jGKEnE3B0EkCpW5Emm9up8= Name: res/drawable-sw600dp-hdpi-v13/ic_backspace_disabled_light.png SHA1-Digest: 1xOse/knAUkmdSJRE7Gm2BWULK4= Name: assets/databases/apns.db SHA1-Digest: bg0zKqxv61OZoXbea65pDG9cXQA= Name: res/drawable-mdpi-v4/ic_photo_camera_light.png SHA1-Digest: eML/v5Eu4g3ks/r8WhFGLPooEnk= Name: res/layout/abc_search_view.xml SHA1-Digest: WWRqmfw7obFK3n7n8Ekl14zUCQ4= Name: res/drawable-hdpi-v4/ic_mood_white_24dp.png SHA1-Digest: dESTHN33RlDCjHon6Kf+jlE1F0c= Name: res/drawable-xhdpi-v4/ic_dialpad_white_24dp.png SHA1-Digest: Oh4t33wvgPLVjp/NgDXxHwmovIo= Name: res/drawable/blocked_indicator_background.xml SHA1-Digest: qucbHTNZYboQObVToh9BCpVzgKc= Name: res/drawable/emoji_category_people_dark.xml SHA1-Digest: L8yyopzaoxR0l4b5y3XQlPcwFGU= Name: res/menu/media_overview.xml SHA1-Digest: grIZlxlp22/PsVq3047Q+M5M+8M= Name: res/drawable/list_selector_background_transition_holo_light.xml SHA1-Digest: 36TGchgA+ugMLzqfO+wPp3RPDTE= Name: res/drawable-xxhdpi-v4/check.png SHA1-Digest: jUcinrMdcOv+FeVYA9vv/xaXxKA= Name: res/drawable-xxxhdpi-v4/ic_done_all_white_18dp.png SHA1-Digest: sgI8NP8L5ChzE3bcd23XivS4RiI= Name: res/layout/import_export_activity.xml SHA1-Digest: QrAeBaxysnjPdSsDza4Dk9mY72w= Name: res/drawable-mdpi-v4/ic_send_insecure_white_24dp.png SHA1-Digest: TxuIHLBVnnWehzVdeGsxh9kPSPs= Name: res/drawable-mdpi-v4/ic_launch_white_24dp.png SHA1-Digest: 3SGP5nUEOjd+H8x09S0Q/mpe51c= Name: res/drawable-xhdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: LHNDVgsME9Yj4JPg5CLyVd0Eld4= Name: res/drawable-xhdpi-v4/abc_popup_background_mtrl_mult.9.png SHA1-Digest: rkfYN21U5rNNgOOcXyHtDvlAuDE= Name: res/drawable-xhdpi-v4/ic_textsms_grey_32dp.png SHA1-Digest: /fWA+opeZhwsYgI19Ktiy9Te0Cg= Name: res/layout/keyboard_text.xml SHA1-Digest: kTgoLBL3RvY7DUrytit4SJ/vNH0= Name: res/drawable-mdpi-v4/ic_forum_grey_32dp.png SHA1-Digest: bZmFrMHRVPaYNDiszshXCN+e26k= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_7 SHA1-Digest: ++F/BtCrUwz7P52Agrem1zBo7MI= Name: res/layout-v17/conversation_fragment.xml SHA1-Digest: hUD2cxgYhFE4EC6kkjKssmXtITg= Name: res/drawable/recurrence_bubble_fill.xml SHA1-Digest: hY1/dq5DoGqB5nB5bzt/+w0aZyU= Name: res/color/date_picker_selector.xml SHA1-Digest: jP08qV5xeDoCPMazM+vaHEgiNsI= Name: res/drawable-xhdpi-v4/ic_unlocked_white_24dp.png SHA1-Digest: qik7+MvynFEnE85vFo7abDFksWY= Name: res/drawable-xxhdpi-v4/switch_thumb_holo_light_v2.9.png SHA1-Digest: U/4Z3gd25jwQChkbsD5VnRLBt4I= Name: res/drawable-xhdpi-v4/textfield_activated_holo_light.9.png SHA1-Digest: If3Wai5q4G/7HwWXms7HMa+ezus= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_350 SHA1-Digest: 1dsh1jmlpctbk3mLLs20rDvMeHw= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_352 SHA1-Digest: wG8Amf2IUehX/g5l0F2/BDWC8XM= Name: res/drawable-xhdpi-v4/ic_mood_grey600_24dp.png SHA1-Digest: F9axoAJFCcB9w59XB74IOFQf5pk= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_351 SHA1-Digest: Mms7D5naQaHUlKhoBn+xBnme4nc= Name: res/drawable-xxhdpi-v4/ic_emoji_places_normal_light.png SHA1-Digest: IhAGTP1mcBfaaxqhff8dvaHPfBA= Name: res/layout/conversation_list_item_action.xml SHA1-Digest: daYMlc9s7/cMUHhdCnx2cD09hyk= Name: res/drawable-xhdpi-v4/abc_text_select_handle_right_mtrl_dark.png SHA1-Digest: e5xqNys69NyvQS8VE/Kly997E88= Name: res/layout/abc_list_menu_item_icon.xml SHA1-Digest: dYFR+O7lTgJC28aXyfVTftOMwDM= Name: res/drawable-hdpi-v4/sms_selection_icon.png SHA1-Digest: l56HHr5n4oBQUmb/lPX166v9h6s= Name: res/drawable-ldrtl-xhdpi-v17/ic_send_white_24dp.png SHA1-Digest: FJqvMGpZ+kYijHSTH4NUm5WLcK8= Name: res/drawable-hdpi-v4/ic_group_grey600_24dp.png SHA1-Digest: U9+6tpgExRqQgcJbv4ViVKDi4U8= Name: res/drawable-xxxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_000 .png SHA1-Digest: VW4JPwMwHw0CzAlOEqerGs/L5mk= Name: res/layout/calendar_date_picker_done_button.xml SHA1-Digest: Ml84ZNS7dAwwhGV+Zjg8U5T0xwg= Name: res/animator-v11/bottom_play_to_pause_animation.xml SHA1-Digest: KjERMZ7qyZ9ZxIR+ZWsV0a+EASA= Name: res/drawable/ic_check_dark.xml SHA1-Digest: kzu80h7wvQqqqewEavCQ/lVgDGc= Name: res/drawable-hdpi-v4/abc_text_select_handle_right_mtrl_dark.png SHA1-Digest: GN5clQjLYHfNj0bF9YP+ewaJstM= Name: res/menu/log_submit.xml SHA1-Digest: IIBD+uio+9ejz7nuBNfS4Ezk38A= Name: res/menu/local_identity.xml SHA1-Digest: 1Igdxj3Es0r2GRwRynPPb8aRm1c= Name: res/drawable-mdpi-v4/abc_switch_track_mtrl_alpha.9.png SHA1-Digest: Goj79xYi41d5Ug2oovkSjYvLbAI= Name: res/layout/notification_action.xml SHA1-Digest: MCcUfGwh0zhVoDOGdKkwzOOaqsE= Name: res/drawable-xhdpi-v4/ic_badge_24dp.png SHA1-Digest: Tfz8+fJWe82EAe380KhmRoQTH2A= Name: res/drawable-mdpi-v4/ic_emoji_nature_activated_dark.png SHA1-Digest: PxSSUiNH5BEinHzkqqlOmKZtXNw= Name: res/drawable/abc_tab_indicator_material.xml SHA1-Digest: V5veQwsCSGKsSBtGwB7BwIrrJ60= Name: res/drawable-hdpi-v4/ic_visibility_off_white_24dp.png SHA1-Digest: tnIaP+YN1dmNBPvKkSvfab/zHcA= Name: res/drawable-xxhdpi-v4/abc_ic_star_half_black_16dp.png SHA1-Digest: nw6+x+wmtucgkuXTdFCndlFazP4= Name: res/drawable-xxhdpi-v4/ic_menu_lock_dark.png SHA1-Digest: PEehXVb+1FiSNRhfemMMdfIHCmE= Name: res/drawable-hdpi-v4/ic_message_black.png SHA1-Digest: 9olkHBpQePze7UF4D89/MzfUZgg= Name: res/drawable-mdpi-v4/ic_send_sms_insecure_dark.png SHA1-Digest: 8C0HRt8QBOlAtUs0AncturKJswA= Name: res/drawable-xhdpi-v4/sms_system_import_icon.png SHA1-Digest: /lk35fCQRfDoJENySR3K7xJI8Kw= Name: res/drawable-mdpi-v4/ic_backspace_disabled_dark.png SHA1-Digest: 8UicXzhNTwHx9Z6gKpFQy8Nq+pQ= Name: res/color/text_color_secondary_dark_theme.xml SHA1-Digest: 2zbnbYOg6F9G58wfP1T5Q6MwdjI= Name: res/drawable-xxhdpi-v4/ic_lock_white_18dp.png SHA1-Digest: 6bUAVeqsigwcdBuAJg2dYp7OazA= Name: res/drawable-mdpi-v4/abc_text_select_handle_right_mtrl_dark.png SHA1-Digest: T7V6hKiMczkLkUlKXFHH2u21kKk= Name: res/layout/conversation_list_item_view.xml SHA1-Digest: 3VfyPkj8uWV2HoQiXx925UVCMt0= Name: META-INF/fdroidserverid SHA1-Digest: PFAoK3vAw7CF29BtzhTdrgabIU8= Name: res/drawable-xhdpi-v4/ic_group_grey600_24dp.png SHA1-Digest: sIzL5sw6bxV7HQIwylPrh+ASMPQ= Name: res/drawable-mdpi-v4/list_selected_holo_light.9.png SHA1-Digest: w5jMjyx0n/lk3stiPGrcn7tdZT8= Name: res/drawable-xhdpi-v4/ic_refresh_white_24dp.png SHA1-Digest: 3d7TIrGejbmbXYCCR0kiPE3trQQ= Name: res/layout/recurrencepicker.xml SHA1-Digest: jYVg/v1x2v2k6GmliiB7aM3R5hA= Name: res/layout/radial_time_header_label.xml SHA1-Digest: cAfMyqMdkLB5b0WtSjoDKDQDR8U= Name: res/drawable-v11/notification_bg_low.xml SHA1-Digest: noAsyGBDHDbAwoxMmtFFogehgFM= Name: res/drawable-xxhdpi-v4/ic_group_grey600_24dp.png SHA1-Digest: gtMIy0EuLn065qk2JYPIzVtEYs8= Name: res/drawable-mdpi-v4/ic_emoji_emoticons_activated_dark.png SHA1-Digest: zgvg/rmsY3NPoHn7SKkEL/vK/uc= Name: res/drawable-mdpi-v4/icon.png SHA1-Digest: 8dZkVmxxSs1WycNGs/t5UCk4WQk= Name: res/drawable-xxhdpi-v4/ic_missing_thumbnail_picture.png SHA1-Digest: 8Z3J3yRXgM7avwVxV616Z64GKEw= Name: res/layout-v17/notification_action_tombstone.xml SHA1-Digest: chGkI32GuGZuzpKxpJHM32oPvTo= Name: res/drawable-mdpi-v4/ic_done_white_18dp.png SHA1-Digest: /pqJedk+4F0QhMNq7QpU4sFpem0= Name: res/drawable-xhdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png SHA1-Digest: c4WhrXmf1QDquO48zO95xrhdWlo= Name: res/anim/abc_grow_fade_in_from_bottom.xml SHA1-Digest: iPapUKcPYcYoPV86U6jl9kw3Fqs= Name: res/drawable-mdpi-v4/abc_ic_star_black_16dp.png SHA1-Digest: voXnHOu9kqbuYTOgvWgQQ6GK7aw= Name: res/drawable-mdpi-v4/ic_dialpad_white_24dp.png SHA1-Digest: Ain67lOpHc1Y5kMFqXv0COHP+H8= Name: res/drawable-xxhdpi-v4/ic_send_sms_insecure_dark.png SHA1-Digest: vqkeZqvUMKhiKa06vnvzfpo0EZg= Name: res/drawable-xhdpi-v4/ic_emoji_nature_activated_dark.png SHA1-Digest: odYh9SPOOjO2DQl8Zt3SeZFoqmc= Name: res/drawable-mdpi-v4/notification_bg_low_pressed.9.png SHA1-Digest: X/lHyqy/i66+Lvhw/RlUttGZCjY= Name: res/layout/recurrencepicker_end_text.xml SHA1-Digest: ju0lW/ZJaH7yy30lekFEcJmudJQ= Name: res/drawable-xxhdpi-v4/ic_block_grey600_18dp.png SHA1-Digest: pEOEbcAFQKdMqhGRWKNrf1itfA4= Name: res/drawable-xxxhdpi-v4/abc_ic_star_half_black_16dp.png SHA1-Digest: 1wJ8llQYggoHcTVA4eV+lgO9viY= Name: res/layout/abc_action_menu_layout.xml SHA1-Digest: Jpw86cr0Dg4qeYri6LCMkdNhQFs= Name: res/layout/media_overview_item.xml SHA1-Digest: 5HQKdf8GTT2QADM6MEH4xRAsvHM= Name: res/layout-v13/recipient_preference_activity.xml SHA1-Digest: 5Qb/c6BKOAMHD2WUyKb01qeChBM= Name: res/drawable-mdpi-v4/ic_recurrence_bubble_disabled.png SHA1-Digest: 4UNh+VZOMQGfV/EWOFVQKNJ4t2s= Name: res/drawable-ldrtl-xxhdpi-v17/ic_send_white_24dp.png SHA1-Digest: +26QRCNXvQKsaRcFvLCjUHNlbKQ= Name: res/drawable-hdpi-v4/ic_movie_creation_dark.png SHA1-Digest: X4S4jWmvJYk/d5OFGYuP3aGezSc= Name: res/anim/animation_toggle_out.xml SHA1-Digest: lBabkCAcL5u2zNS3a/RsxhDIuzE= Name: res/drawable-v21/abc_ratingbar_small_material.xml SHA1-Digest: BADt3Ef1toHfWLOP4cHWQg7zFsc= Name: res/drawable-hdpi-v4/abc_popup_background_mtrl_mult.9.png SHA1-Digest: WvazyKPHGN7DcTmhPWllEqzaoY0= Name: res/drawable-hdpi-v4/ic_emoji_places_activated_dark.png SHA1-Digest: vW42hojyb/7zMg8g+ZHjfbjKHig= Name: res/drawable-xhdpi-v4/ic_backspace_grey600_24dp.png SHA1-Digest: zFl9M6wNCdsM8+JRt/4BePJ1o8k= Name: res/drawable-mdpi-v4/icon_cached.png SHA1-Digest: 1ZRpuZ4qBoONtSR91+hdajO52ZA= Name: res/drawable-xxxhdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png SHA1-Digest: byuQvpWXS6brcdPpZzFwfkUGtWE= Name: res/drawable-mdpi-v4/divet_lower_right_light.png SHA1-Digest: AdwhpOtOoV6YRjHdKI6e5wdJhu4= Name: res/layout/notification_template_icon_group.xml SHA1-Digest: y1Lzv2C59QEKq/zSclTkuZPGQbU= Name: res/drawable-xxhdpi-v4/ic_unarchive_white_36dp.png SHA1-Digest: Q6T3KOG3SavoxEseiE9x/2cUQAk= Name: res/layout/create_passphrase_activity.xml SHA1-Digest: jjTR2QVsPkhdxzsHK5TyF4z71XA= Name: res/layout/calendar_date_picker_selected_date.xml SHA1-Digest: 1jiVfxuc+lsKJV2sPGxYSD8bBnU= Name: res/drawable/emoji_category_emoticons_dark.xml SHA1-Digest: jxqIHC1Ar9qSvcTM0qecJ1TzykA= Name: res/drawable-xxhdpi-v4/ic_search_white_24dp.png SHA1-Digest: csXrkuTLSQec0kz4TC9YLbHaeA8= Name: res/drawable-xxxhdpi-v4/abc_text_select_handle_right_mtrl_light. png SHA1-Digest: x+xo9M5OW92JI6xyR8PIyBI7/z4= Name: res/menu/conversation.xml SHA1-Digest: 7yYqFxougH3U/WKlbDHlh1Rjuz0= Name: res/drawable-hdpi-v4/ic_block_white_18dp.png SHA1-Digest: s5DcKQrrdp5tnwxDsPPAEXGV7vg= Name: assets/emoji_flags.png SHA1-Digest: fICcDebwlX2ZuBVzl4Qb4kBjJtY= Name: res/drawable/circle_tintable.xml SHA1-Digest: uxoUcTKEKLFALgd7oOxFZ539jXo= Name: res/color/abc_btn_colored_text_material.xml SHA1-Digest: GA5CCAEAJGneufY304mtMRAiO9s= Name: res/drawable-xhdpi-v4/ic_attach_white_24dp.png SHA1-Digest: l8lRdroTUNq09WhBtmW6L5h7TSc= Name: res/drawable/abc_dialog_material_background.xml SHA1-Digest: l0M3oq0dSvqXzuiDjFty5ess9ic= Name: res/layout/custom_default_preference_dialog.xml SHA1-Digest: 3GcmVR89CH5c8qh05Ffh7NhKcfA= Name: res/drawable-mdpi-v4/ic_recurrence_bubble_outline.png SHA1-Digest: jU1zZ2OQvuou3WdF4Q1ex+PByB4= Name: res/drawable-hdpi-v4/ic_emoji_symbols_normal_dark.png SHA1-Digest: Q6yw9PCSn4s9WxapNJ9P/UniXl0= Name: res/layout-v21/conversation_item_received.xml SHA1-Digest: qJO0hW4gVDi5SUt7UCnSnBWsb/c= Name: res/drawable-hdpi-v4/ic_emoji_people_activated_light.png SHA1-Digest: 7lrgliE4H7Akj6QYt3qPutlzV3Y= Name: res/layout/keyboard_with_header.xml SHA1-Digest: 9OmkAJj9hLLmYIaJ+sAWk4yDPSY= Name: res/drawable-xxxhdpi-v4/ic_block_white_18dp.png SHA1-Digest: tdEuPGdERhjcavNdrUHecQxrI1M= Name: res/layout/change_passphrase_activity.xml SHA1-Digest: COCPB4ujbEhRgTyyOhEd1SmcEzQ= Name: res/drawable-xhdpi-v4/ic_emoji_objects_activated_light.png SHA1-Digest: JLDo2LqyRd/Sb3CTnsrzQe5u34U= Name: res/layout/abc_action_bar_up_container.xml SHA1-Digest: lgDm2CXl2GfnCEk1PC3+/9seBjU= Name: res/drawable-xxxhdpi-v4/ic_done_white_18dp.png SHA1-Digest: zCCYacrKvxwJ8dWHhJij+mQ2bW8= Name: res/drawable-xhdpi-v4/ic_photo_library_white_24dp.png SHA1-Digest: 5SaD4ioS9S/I9vBJf/jrXH8DkZw= Name: res/color-v11/abc_background_cache_hint_selector_material_dark.x ml SHA1-Digest: RvuWyz0R/TOa0YMWKY4Z70Jd7r8= Name: res/drawable-mdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: 4oU1S0T6qbsEVVg1vrykxhO0l2Y= Name: res/drawable-hdpi-v4/ic_menu_remove_holo_light.png SHA1-Digest: fJ8PTsrpYrWc6H7e3ctCsDSiaAY= Name: res/layout/calendar_year_label_text_view.xml SHA1-Digest: NWuaYel21R2U+Zfgy0SkpnIWlVs= Name: res/drawable-xhdpi-v4/ic_delete_black.png SHA1-Digest: Z6tz8hyRKhxub173/+bxBF+8CaQ= Name: res/drawable-hdpi-v4/dialog_full_holo_light.9.png SHA1-Digest: N91bFRXerR/vcloVH441Xx6Nhi4= Name: res/drawable-xxhdpi-v4/ic_group_white_24dp.png SHA1-Digest: shdzcIyfq7XffvVJiqihdtguosU= Name: res/drawable/contact_photo_background.xml SHA1-Digest: y2aQJR62snrVPJNn7N/Ve0pGy2s= Name: res/menu/conversation_unmuted.xml SHA1-Digest: JdmeZPjIQqeKw6uBcbpoVq8/Gfw= Name: res/layout/design_navigation_item_header.xml SHA1-Digest: NxhEFPzXVmTWKfRFuaYzZQ0kbfI= Name: res/layout/thumbnail_view.xml SHA1-Digest: A77EQLfZjnF/tU2umw1/QfbWivA= Name: res/drawable-hdpi-v4/switch_thumb_disabled_holo_light.9.png SHA1-Digest: HySzs67maedHt7T5DQ9b62NVMUw= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_358 SHA1-Digest: BdiB3G40E33JhpAaQnPmGM6npwk= Name: res/drawable/clickable_card_light.xml SHA1-Digest: VIl5o/NWq1nCN2BBNgoezFbXwbU= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_359 SHA1-Digest: OH/iiqVq50dBV79hJSr2rKoXM5E= Name: res/drawable-mdpi-v4/ic_contact_picture.png SHA1-Digest: gBiGaxFOuYDSl8ly2bHD9ylC4Bw= Name: res/drawable-mdpi-v4/lockscreen_watermark_light.png SHA1-Digest: hEboIczR1JMpRKVdEHPAqTIePyU= Name: res/drawable-xxxhdpi-v4/ic_forum_grey_32dp.png SHA1-Digest: 0LcJ5CBccaXbVS27DsjRwtYc/wA= Name: res/drawable-mdpi-v4/ic_emoji_objects_activated_dark.png SHA1-Digest: QW4LHwogF6+394neX42yQ2CbiP4= Name: res/drawable-xxxhdpi-v4/ic_launch_white_24dp.png SHA1-Digest: ix9Sk+r3UdDblFBjwgjFcnJQs4o= Name: res/drawable-xhdpi-v4/ic_menu_login.png SHA1-Digest: bL+Gp/eJvyBxO7SIeGLohs7bQMQ= Name: res/layout-v11/notification_action_tombstone.xml SHA1-Digest: diK9MlILrXv87mG85BLdUWk57sg= Name: res/drawable-mdpi-v4/abc_ic_star_half_black_48dp.png SHA1-Digest: nw6+x+wmtucgkuXTdFCndlFazP4= Name: res/layout/audio_view.xml SHA1-Digest: g5DfJ3OqZpmDV75jbXDWRewGoNw= Name: assets/emoji_faces.png SHA1-Digest: VF2bbkibGKhCNeUQxTwNIcjghSs= Name: res/animator/upper_pause_to_play_animation.xml SHA1-Digest: 7f8HiUwoTj84cBIvXQhtx6kFMlc= Name: res/drawable-mdpi-v4/ic_delete_gray.png SHA1-Digest: xHXFGYmF/EQrCANgkZsDN8EBF/Y= Name: res/drawable-mdpi-v4/ic_clear_search_holo_light.png SHA1-Digest: QAFEm0zCvZ4Xmc8sOzVOr0LSD4k= Name: res/drawable-mdpi-v4/ic_menu_lock_dark.png SHA1-Digest: nFOkYB6yVhnjOnwnTC/yyO2v3ok= Name: res/drawable-xxhdpi-v4/ic_emoji_objects_activated_light.png SHA1-Digest: bVR43kSrdn2gpPFIHV7aZgin258= Name: res/layout-v11/color_fragment.xml SHA1-Digest: WJb0933SsY9u/EtpCZLJS4UP8x4= Name: res/drawable-hdpi-v4/ic_pause_circle_fill_white_48dp.png SHA1-Digest: YPZvKW9wYirAUH9HUj2e8gGAiDM= Name: res/drawable-xxhdpi-v4/ic_mood_white_24dp.png SHA1-Digest: BXGpNcX8TerVRVxm8RjBkcK5bLU= Name: res/drawable-v21/notification_action_background.xml SHA1-Digest: 0sQTHXDbz/T3B0nMS6oSuhoVMI4= Name: res/drawable-xhdpi-v4/abc_scrubber_track_mtrl_alpha.9.png SHA1-Digest: MtrqRaF9hHgDajQUiUZsdukbh0o= Name: res/drawable-xhdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.p ng SHA1-Digest: VyxMaY4GkM7F0rJ6OUhPiMeP/GU= Name: res/drawable-mdpi-v4/ic_send_white_24dp.png SHA1-Digest: oNDT6r9WHuzyoWCkGNccF9jLbmo= Name: res/drawable-xxhdpi-v4/ic_advanced_gray.png SHA1-Digest: L1jWZJK/JGkcsvUnYnjVMdAzZiM= Name: res/drawable/background_pattern_repeat.xml SHA1-Digest: oB3Wz023ADDvA6nID9pWNGXhWiU= Name: res/drawable-hdpi-v4/abc_btn_radio_to_on_mtrl_000.png SHA1-Digest: TGHVlpw1mq1IC2cB7ulwjQ18wdc= Name: assets/emoji_places.png SHA1-Digest: 0Rb7g/OTs83cL8rMbtjEYfViINc= Name: res/drawable-ldrtl-xhdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: LVFgBAoPE9W6WKtEYtOUGWf+dzk= Name: res/drawable-xxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_005. png SHA1-Digest: LrZts7m/Oija8l6P5TTB5GFdNx0= Name: res/drawable-xxhdpi-v4/ic_dialpad_white_24dp.png SHA1-Digest: EiylrBvuYC5ZY31xUIxumtdyMvk= Name: res/layout-v16/color_fragment.xml SHA1-Digest: qi3u3HGfeY707g+vtbNcQqNMQG0= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_373 SHA1-Digest: cSjMHtHIeYx8NPtkRndSSBuoZ98= Name: res/drawable-mdpi-v4/quick_shutter_button.png SHA1-Digest: hX6aYSlgrIrNR97AVRVBn+Zc420= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_372 SHA1-Digest: JZwfMXoGUZqHYvczzIvFBYzPVG8= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_375 SHA1-Digest: 4gnH58JyJO9ZBj8MNMws2LGhIEM= Name: res/drawable-mdpi-v4/ic_emoji_people_activated_dark.png SHA1-Digest: 17tlH62BvU2XtvzB0q0pMq4pFK4= Name: res/drawable-mdpi-v11/icon_notification.png SHA1-Digest: xSGFNF2FY64/dBhoUeJo/qFx81w= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_YT SHA1-Digest: cXbMKe6pREwZBzSVUa1rEcqWfyI= Name: res/layout-v17/notification_template_media.xml SHA1-Digest: d7SiUv5/rMArNhSFS9axXXveZmQ= Name: res/drawable-xhdpi-v4/switch_thumb_holo_light_v2.9.png SHA1-Digest: aHisXBhA4tSuq4zWW5w1PYjuGys= Name: res/drawable/abc_ic_menu_overflow_material.xml SHA1-Digest: AYT5D3IjptZzIlt4X8LKmKNh3eM= Name: res/layout/badge_widget.xml SHA1-Digest: gSeZLI0hbbQMvqppcrQtnWL0GU0= Name: res/menu/conversation_mms_group_options.xml SHA1-Digest: m2VD0D/7c0WQtNc6WyaFjEnEgg4= Name: res/drawable-mdpi-v4/spinner_pressed_holo_light.9.png SHA1-Digest: MBDjTotrSL6afNoJE5Mq5I6WF4M= Name: res/drawable-xhdpi-v4/quick_shutter_button.png SHA1-Digest: nLmuwLtwDgQhLHYyY81GFkAA5QM= Name: res/layout-v17/contact_selection_list_item.xml SHA1-Digest: o9XZZrqY4ZL7dueiXpGJW1i/Baw= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_380 SHA1-Digest: ooR6xh/a/iu1b6CXk+RjF7LeHoc= Name: res/drawable-hdpi-v4/transfer_controls_background.9.png SHA1-Digest: Cngz5DtX5FWcrNq0lMnsLWpu6cM= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_381 SHA1-Digest: 2JnA+oMJ+vJKy4hQpTtSxQVpZ5Q= Name: res/drawable-xxhdpi-v4/ic_mood_grey600_24dp.png SHA1-Digest: kc3UUSV68fYd/8O4pirHTfqw4Ck= Name: res/drawable-mdpi-v4/ic_menu_search_holo_dark.png SHA1-Digest: QXwY//zJFwvYzqfcyaPoso3TqJY= Name: res/drawable-hdpi-v4/list_selected_holo_dark.9.png SHA1-Digest: 8+a6kSVhZ1n87KOe3NWXssOoSRY= Name: res/drawable-xxhdpi-v4/ic_visibility_white_24dp.png SHA1-Digest: yxLNHuaKVBrTKsUUFdp96DIp5Yc= Name: res/drawable-xxhdpi-v4/splash_logo.png SHA1-Digest: aXmy7BI2jCI0KzC+31RQwr4XuOA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ZA SHA1-Digest: I29bUQkgyXligJyPjjZSktYPO2E= Name: res/layout-v17/conversation_item_received.xml SHA1-Digest: KgJudOLpZCLYQnWA64j03EINKKE= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_385 SHA1-Digest: yPAb2zGtOtW4C/VTuGdD9hVTPww= Name: res/menu/conversation_secure_identity.xml SHA1-Digest: xmKZehi6uJvWFuhq7VmaEPTlLIQ= Name: res/drawable-xhdpi-v4/telephone.png SHA1-Digest: MNupQJZq5K+m8XkBhXUBZo+eIqQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ZW SHA1-Digest: 5Ii48yDkdhHoOHP0+seCyvTM67k= Name: res/drawable-xxxhdpi-v4/ic_send_secure_white_24dp.png SHA1-Digest: ewbLoz2BxWy1dEqspuEHPrDizG0= Name: res/drawable-mdpi-v4/abc_text_select_handle_right_mtrl_light.png SHA1-Digest: 9Yadvmu5mRjm6q0/FxjSOjaktBs= Name: res/drawable-xxxhdpi-v4/abc_btn_radio_to_on_mtrl_000.png SHA1-Digest: 4YsKb2IwvWnlnKLr79msGTpIdXg= Name: res/drawable-xhdpi-v4/ic_action_warning_red.png SHA1-Digest: GTAHKyMIHvaE49HCfIDu+Qh6ACY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ZM SHA1-Digest: DXJorIOTg3+wqBCneGeb+yEd0qk= Name: res/drawable-xhdpi-v4/spinner_pressed_holo_light.9.png SHA1-Digest: ojrB5ql2Tg5clwEbaxKtvWw90HQ= Name: res/drawable-v21/abc_ratingbar_indicator_material.xml SHA1-Digest: V8JrLj4745FQ4gUvuKziXuLT2Ac= Name: res/drawable/abc_cab_background_internal_bg.xml SHA1-Digest: 9JWJR0qt9ACSmUHvHpdMc/ljSx0= Name: res/layout/conversation_item_pending.xml SHA1-Digest: oRpXliWIDPflbkT3VdkLewDNoyc= Name: res/drawable-mdpi-v4/ic_missing_thumbnail_picture.png SHA1-Digest: EJXnMu3Q2GZ996ZVbDQ9QHZC8jU= Name: res/drawable-ldrtl-xxhdpi-v17/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: LRWlMCeV4/Lq+wNklDndVFmtRHU= Name: res/layout/import_fragment.xml SHA1-Digest: MFdCCdeFAzLVqj/DJM8wfp7f97s= Name: res/drawable-xxhdpi-v4/ic_info_outline_white_24dp.png SHA1-Digest: aB9sX6vK5FrIx5rZuc/gkLtA1tc= Name: res/layout-v13/select_dialog_multichoice_material.xml SHA1-Digest: HGp4EP1iVseXgznQe0HcWWQAK0c= Name: res/drawable-mdpi-v4/sms_selection_icon.png SHA1-Digest: gMsauvPGyGNru1K9fJZFRVMguYI= Name: res/drawable-hdpi-v4/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: a2PqqMawE/5F/kuBuWS4K8kdtOo= Name: res/drawable-xhdpi-v4/ic_recurrence_bubble_outline_disabled.png SHA1-Digest: JH3JYUHK6GPX9wicPgy3301y510= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_855 SHA1-Digest: COUdI62w67El5HnnJocGdX/mrQU= Name: res/drawable-mdpi-v4/ic_emoji_objects_normal_dark.png SHA1-Digest: +VtsjXm+z9kYoGwIcG+sBp0DE8o= Name: res/drawable-hdpi-v4/abc_tab_indicator_mtrl_alpha.9.png SHA1-Digest: NJuMq0n7Coq8s/ff6QHhDQhI9uw= Name: res/drawable-xxhdpi-v4/ic_call_white_24dp.png SHA1-Digest: jMVaLm8rUBBL6UaOEgNh1uR2LY8= Name: res/drawable/abc_ic_clear_material.xml SHA1-Digest: 3H791RZwhlVQMbLwc+lrDya3mkU= Name: res/drawable-mdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.pn g SHA1-Digest: DVBX9SO92lStCRmZbxE3WeIe28w= Name: res/layout/conversation_item_received.xml SHA1-Digest: YferUO9TZrPpEnzT+PAB6QWCD20= Name: res/drawable/abc_list_selector_background_transition_holo_dark.x ml SHA1-Digest: LVSNyw7X6tB9DukmioIVl33ZyuQ= Name: res/drawable-xxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_000. png SHA1-Digest: IL+CVRaU8e6508PLcaiJwuRr+AM= Name: res/drawable/clickable_card_dark.xml SHA1-Digest: wZlGP0IxpIpOD5dFtkQgwYtVbd0= Name: res/drawable-xxhdpi-v4/ic_emoji_recents_normal_dark.png SHA1-Digest: fJm3H8d8bXfKaasBd6ueOrRoeu0= Name: res/drawable-anydpi-v21/design_ic_visibility_off.xml SHA1-Digest: /d9K4kz+PEEXzPkb7nC/4aBqj+0= Name: res/drawable-xhdpi-v4/ic_backspace_normal_light.png SHA1-Digest: feAfnm3lpkZOOCFvCpL0csdz6xw= Name: res/drawable-hdpi-v4/abc_scrubber_control_off_mtrl_alpha.png SHA1-Digest: bRj1VtphY6uBpf6lW7kaUSr9O08= Name: res/drawable-xxxhdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: +3A3jUbzRBRBAJ8oRmGYp+sMfXc= Name: res/drawable-hdpi-v4/ic_textsms_black_32dp.png SHA1-Digest: IYNs/eeCZQu1jrg8UQ/BjQ16OH8= Name: res/drawable/import_export_item_background_dark.xml SHA1-Digest: FlWeBUjp1SlfU5ll7qfh03DRIHo= Name: res/drawable-xxhdpi-v4/abc_btn_radio_to_on_mtrl_015.png SHA1-Digest: yP2hhhdWfqPQ6VTBFpcZM+5I8sg= Name: res/drawable-hdpi-v4/abc_text_select_handle_left_mtrl_light.png SHA1-Digest: ivlhy5czDUxb5mLUAXmPi72eh/s= Name: res/drawable-xxxhdpi-v4/ic_send_white_24dp.png SHA1-Digest: 85AZAjtkxwcSRGXJg2lwVURxbjo= Name: res/drawable-mdpi-v4/ic_visibility_grey600_24dp.png SHA1-Digest: 3eP6tI7Ay04/hS70aKMd4FRS2wk= Name: res/drawable-xhdpi-v4/ic_movie_creation_dark.png SHA1-Digest: DGSQCdIvB4x6Fcc8o1O6q7FnRz0= Name: res/drawable-sw600dp-xhdpi-v13/ic_backspace_normal_light.png SHA1-Digest: JHjJGulNyd35UOk1LoXOt1ofcDw= Name: res/drawable-xxxhdpi-v4/abc_ic_star_black_36dp.png SHA1-Digest: X8m2s5TyuTw6/NjutpgGA9c1lho= Name: res/drawable-hdpi-v4/ic_emoji_emoticons_activated_dark.png SHA1-Digest: 7ygAp299B58BWYeEKdULEBvW/xE= Name: res/drawable-hdpi-v4/switch_thumb_activated_holo_light.9.png SHA1-Digest: Wh0P8RRSA74oEeBgIjQxEpqcoME= Name: res/drawable-xhdpi-v4/ic_content_copy_light.png SHA1-Digest: +2RjblKDrYCroX9fWbYVAUyzmyA= Name: res/menu/conversation_muted.xml SHA1-Digest: YEPj/UNVHGEmdggQWj/jvZdFi3c= Name: res/layout/country_list_item.xml SHA1-Digest: r1mS7yS/DEnkOyfbMBd3mCVpbQU= Name: res/drawable-hdpi-v4/quick_shutter_button.png SHA1-Digest: QjtAszUFv66UUx2q7V/I7LHTkR0= Name: res/color/done_text_color_dark.xml SHA1-Digest: IKB7Djz1Q+EIn/NVDzkU7VIqAz0= Name: res/anim/fade_scale_in.xml SHA1-Digest: 7e1v5wyirlR6VHusnyFJ2Hy9Soc= Name: res/layout/calendar_date_picker_view_animator.xml SHA1-Digest: F0bVbT2ZKibioHhAV9cjVDr9Yso= Name: res/layout/three_keys_view_leftright.xml SHA1-Digest: qvylvsnZgiNW8Idjqvase6z+Qa4= Name: res/drawable-hdpi-v4/notification_bg_low_pressed.9.png SHA1-Digest: EU8fWX1eKN47RKlWWD9QqF/AGSQ= Name: res/drawable-hdpi-v4/ic_menu_search_holo_light.png SHA1-Digest: UQ0lpCGANHHgI2mpV5r5DkJWUwc= Name: res/drawable-hdpi-v4/ic_recurrence_bubble_disabled.png SHA1-Digest: UgH13/I6FVTNeKKxXr+zwBeKxew= Name: res/layout/design_bottom_sheet_dialog.xml SHA1-Digest: ggp4eiRPFjw7xpnansSaAuamCC8= Name: res/drawable-xxhdpi-v4/ic_emoji_people_normal_dark.png SHA1-Digest: 6TIk7p6tZSIWizqeMUNg0406Lpc= Name: res/drawable-xhdpi-v4/ic_photo_camera_light.png SHA1-Digest: 6cxiCmI31PdRdpf/9J2Ut2NgHH0= Name: res/drawable-hdpi-v4/ic_photo_library_white_24dp.png SHA1-Digest: xjW11RhiWcKttHxxzexpB5ufoZ0= Name: res/layout/abc_action_mode_close_item_material.xml SHA1-Digest: ol6exvHt2AXbYJh63ykzCPOeek0= Name: res/drawable-xhdpi-v4/ic_content_copy_dark.png SHA1-Digest: yfTX/EsIDROEEgyNXostm1MwYQs= Name: res/drawable-xxhdpi-v4/ic_info_outline_dark.png SHA1-Digest: Q/jHAmsUzBHImAlxLBv8CNiyLRc= Name: res/layout/design_layout_tab_icon.xml SHA1-Digest: 1oW2wUEHsS3deIrUBKUEwpNALgo= Name: res/drawable-hdpi-v4/spinner_pressed_holo_light.9.png SHA1-Digest: 2AU1b4tODlUJW7aRFT0bcz4flrA= Name: res/drawable/item_background_holo_light.xml SHA1-Digest: jQeNZ4KNIW1aa77T9tnO6w2jY/4= Name: res/drawable-mdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png SHA1-Digest: e//ti7f9UjoZyXMyT5IRTahD3PQ= Name: res/drawable-xhdpi-v4/ic_backspace_disabled_dark.png SHA1-Digest: fY8wrBom1Rs7BcwNpzmN9KBBDT4= Name: res/layout-v11/notification_template_big_media_narrow_custom.xml SHA1-Digest: c2pXGdyJHysVThqhDQeqzNKal3Y= Name: res/drawable-v21/abc_btn_colored_material.xml SHA1-Digest: D6vZuC+PxnPYmIv2/fsVSWVSDeg= Name: res/drawable-xxxhdpi-v4/ic_download_circle_fill_white_48dp.png SHA1-Digest: +o6A0Rp5Jw9L8+tAx/yo6VoewgU= Name: res/drawable-v11/notification_bg.xml SHA1-Digest: i+Eh+TUCXzBztY9fc7tQAEoaoXw= Name: res/layout/notification_template_lines_media.xml SHA1-Digest: wPkfHDF1gfeniSNJr/05TBfWeGc= Name: res/drawable-mdpi-v4/ic_refresh_white_24dp.png SHA1-Digest: HsxZE2QPxw8uE/sghJClLGul0DQ= Name: res/drawable-anydpi-v21/design_ic_visibility.xml SHA1-Digest: qEznbTUH0S7OP3v84l+B+dYFowc= Name: res/drawable-mdpi-v4/abc_textfield_default_mtrl_alpha.9.png SHA1-Digest: 6BStYFTiYO5hj6qjB+1tC6u+FNA= Name: res/menu/conversation_callable.xml SHA1-Digest: e+Qo7fum/zXigIiwflf9n+jDVTs= Name: res/drawable/abc_btn_radio_material.xml SHA1-Digest: UTYOeeEsntRapgE5ZWUWf1IlU/I= Name: res/drawable-hdpi-v4/ic_advanced_black.png SHA1-Digest: HlPPmpibdkooNzi58MYteXB5Npg= Name: res/drawable-v11/emoji_category_people_light.xml SHA1-Digest: DrKa3ghgfZjL+KHGdcveooLEhNs= Name: res/drawable-mdpi-v4/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: q8RqfUM2laeQX8n/UUH1IoDcBlg= Name: res/drawable-hdpi-v4/ic_emoji_people_normal_dark.png SHA1-Digest: zueG+phX6wlp3c7eGn1nsFV3nEI= Name: res/drawable-xxhdpi-v4/abc_tab_indicator_mtrl_alpha.9.png SHA1-Digest: K3ucg8inS6QEpdWRjFnNMV6IIbo= Name: res/layout/keyboard_text_with_header.xml SHA1-Digest: 7toqNa34ScBiaSMyRVjDcks+LCA= Name: res/layout/transfer_controls_stub.xml SHA1-Digest: Y7StVJ+2zbCAJ57fSpB7K1nvlzk= Name: res/drawable-xxxhdpi-v4/ic_keyboard_white_24dp.png SHA1-Digest: zpOmathsmWASUKLLjXnT8xd6f+w= Name: res/drawable-hdpi-v4/ic_backspace_normal_light.png SHA1-Digest: +Cm39iWdZnxZySdet1mlC7GeEGA= Name: res/drawable-hdpi-v4/ic_emoji_nature_normal_light.png SHA1-Digest: yePBAFENDZpbEeeQiP2wvNeQ7aA= Name: res/layout/calendar_date_picker_header_view.xml SHA1-Digest: jcCkvgNadjtCZ9BqIBCmCIO4qdo= Name: res/drawable-mdpi-v4/design_ic_visibility.png SHA1-Digest: u5ybIs/Fy+4WcXRY5rghbiikii8= Name: res/drawable-xhdpi-v4/abc_ic_star_black_36dp.png SHA1-Digest: 84VFkBa9KP++pv1aritXYQWuD68= Name: res/drawable-xxhdpi-v4/abc_cab_background_top_mtrl_alpha.9.png SHA1-Digest: QqPpbBwEr9nywoEL/OHp+2+gZ1Q= Name: res/drawable-xhdpi-v4/ic_message_white.png SHA1-Digest: m76UF09N8rD9hTuj8T2rDxALlkc= Name: res/drawable-mdpi-v4/abc_scrubber_control_off_mtrl_alpha.png SHA1-Digest: mtgMXZE7hreEmqDe9Sm7MomopLw= Name: res/drawable-sw600dp-hdpi-v13/ic_backspace_normal_light.png SHA1-Digest: KWGKSf/BwbfOnB2o4M3/SIKQwgM= Name: res/drawable-xxhdpi-v4/ic_account_box_dark.png SHA1-Digest: g6fZdXTYQ/um9rFwes2raFGyJU8= Name: res/drawable-hdpi-v4/divet_lower_right_dark.png SHA1-Digest: P3P19wRqcDaC8i6CnpJfN4dh650= Name: res/layout-v16/centered_app_title.xml SHA1-Digest: BgyFyU3H6I8jKXmUAVmoYtGdL2A= Name: res/menu/conversation_insecure_no_push.xml SHA1-Digest: qkHAGttTsShSQO4xvqE892992NI= Name: res/drawable-mdpi-v4/ic_scroll_down.png SHA1-Digest: +euyL+tn7NhbEyrgkkSHM6QhGM8= Name: res/drawable-mdpi-v4/ic_delivery_delivered_dark.png SHA1-Digest: kskydZAMuGYG9PTEtrB84KZQ7+A= Name: res/drawable/abc_item_background_holo_light.xml SHA1-Digest: fDShwzepkR49aya4UNh+v22s1Nw= Name: res/drawable-hdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png SHA1-Digest: hOoziuoJ3C2IMcfDzYzmL7E6Tm8= Name: res/color-v23/design_tint_password_toggle.xml SHA1-Digest: uKmyWahGcwpgv98l1DYuTUPcE0M= Name: res/drawable-xhdpi-v4/ic_keyboard_grey600_24dp.png SHA1-Digest: qDBBlKnX8bs+TVPhSny6CzeMhRs= Name: res/animator/rotate_minus_90_animation.xml SHA1-Digest: AhVLtjcJdoeXGcim/ix1HCO/gQw= Name: res/drawable-hdpi-v4/ic_image_dark.png SHA1-Digest: h+QGEnOGB5w5rMVo94ZB9dxDRMc= Name: res/drawable-xhdpi-v4/textfield_disabled_focused_holo_light.9.pn g SHA1-Digest: OzQ1tHx9DB5q6GA0ZRNG3prDizY= Name: res/layout/abc_popup_menu_header_item_layout.xml SHA1-Digest: PhE+1WCDHuZ2z9mTXon6ESNGUC4= Name: res/layout/database_migration_activity.xml SHA1-Digest: 0L3RLBOxpA1MVL/q8lNfKLqe9KU= Name: res/drawable-xxhdpi-v4/ic_pause_circle_fill_white_48dp.png SHA1-Digest: YSwwVKAlS7zW/b95XI5PflY7GKE= Name: res/drawable-xxhdpi-v4/ic_volume_up_light.png SHA1-Digest: 1Qxa+uqLhL9bsx+Xo7zWBMQw9l4= Name: res/drawable-xxhdpi-v4/ic_circle_fill_white_48dp.png SHA1-Digest: ggrDW7v0qnp5WAbHjQQS7zpIvkQ= Name: res/layout-v17/conversation_item_sent.xml SHA1-Digest: ak7Kolh67Y68W+PPjTvedX/qw5E= Name: res/drawable-xxhdpi-v11/icon_cached.png SHA1-Digest: ua/0ckOAoVPgxZWb2msmMkbF8FE= Name: res/drawable/conversation_item_sent_indicator_text_shape.xml SHA1-Digest: Y+VvRJBHBMH3e3FleYI1UZWhQpo= Name: res/drawable-xxhdpi-v4/ic_emoji_nature_normal_dark.png SHA1-Digest: tnWnyvoZo4GVHUFkjHBiuft4KmI= Name: res/layout/video_player.xml SHA1-Digest: ZDQfiwr4ntdWq3CAZLvCBrn9kJk= Name: res/drawable-mdpi-v4/ic_backspace_normal_light.png SHA1-Digest: ZOX3U8jCVDPmfkZ3UzQdobzyd3A= Name: res/drawable-xhdpi-v4/icon_dialog.png SHA1-Digest: qPa6NvQ42VAtw8T4KKsrCGPFs/g= Name: res/drawable-hdpi-v4/ic_search_holo_light.png SHA1-Digest: q0rMt4Ru61/YE5rrmHEeki5RDW0= Name: res/color/recurrence_spinner_text_color.xml SHA1-Digest: QH+LNgcJnXMaHumk/oa+/LvF/K8= Name: res/drawable-xxxhdpi-v4/icon_cached.png SHA1-Digest: aNW2LVhGxXQgGuxWTs5xFr2hFTA= Name: res/drawable-hdpi-v4/ic_brightness_6_gray.png SHA1-Digest: rOJAkQKZKFJtBPUn7YrLuC2vkig= Name: res/anim/design_bottom_sheet_slide_out.xml SHA1-Digest: b7nLwVuguqkRn/0QJ5T+s+s304Y= Name: res/drawable-hdpi-v4/ic_advanced_gray.png SHA1-Digest: HrebOCo27YqFksFwsGqwRxkOABw= Name: res/drawable/abc_ratingbar_material.xml SHA1-Digest: eEVopjQX6W514WoHxn9rLKQ1T5Y= Name: res/drawable-xxxhdpi-v4/ic_photo_camera_dark.png SHA1-Digest: 0QgWvdvDxdowlh4HYdQLm8l/1TY= Name: res/layout-v21/abc_screen_toolbar.xml SHA1-Digest: RSm7QsJv1orHpN4/fzQ0JV8cXgw= Name: res/layout/date_picker_dialog.xml SHA1-Digest: aR0MM8nTd1RA826WRCiVc46R2Z0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_979 SHA1-Digest: MRnTvzcPicoarmNssXPD0gjcHTs= Name: res/drawable/white_radius.xml SHA1-Digest: vJ/dDcwo+MQQr8+spnN4wPHrpBk= Name: res/drawable/abc_item_background_holo_dark.xml SHA1-Digest: EYfXWBiFkD5pE+x4VQkg8UKkBDw= Name: res/drawable-hdpi-v4/sms_system_import_icon.png SHA1-Digest: 0zG+KUxYtsfx/OZaI5FkMcq4ySs= Name: res/drawable-hdpi-v4/ic_push_black.png SHA1-Digest: 7fJv39n+mRT4hrun73lCTuWrJEM= Name: res/drawable-hdpi-v4/ic_emoji_flags_normal_light.png SHA1-Digest: TDH6Q0QaGikzI8z9SSXhPTBi1Hs= Name: res/drawable-xhdpi-v4/abc_list_longpressed_holo.9.png SHA1-Digest: C4a5xmVEzcIJxede0Urh0qZwCmg= Name: res/drawable-xxhdpi-v4/ic_done_white_18dp.png SHA1-Digest: wOg5S1bkowRA9IfOe4Ml8vDq6CY= Name: res/drawable-xhdpi-v4/ic_textsms_black_32dp.png SHA1-Digest: AlYxqxaWCxZWc/iDBFSY1Somp+I= Name: res/layout-v17/abc_select_dialog_material.xml SHA1-Digest: B6frzo4lLBVPjLWlbHfkHH/2zLU= Name: res/drawable-xhdpi-v4/ic_push_registration_reminder.png SHA1-Digest: /es9AZtoQI8Ta4GTB/HyJcy0FHM= Name: res/drawable-xxhdpi-v4/ic_send_white_24dp.png SHA1-Digest: xcpEXKnjWlSqUlpQEMnvkLUWJpA= Name: res/layout/conversation_activity_emojidrawer_stub.xml SHA1-Digest: C7rRCyzp/GaaBT0HAenRiFKOMGw= Name: res/drawable-xhdpi-v4/ic_add_white_24dp.png SHA1-Digest: l9WuayKKYwSKF3BAAXsFfIlAn1g= Name: res/drawable-xxhdpi-v4/abc_btn_check_to_on_mtrl_015.png SHA1-Digest: PIrE1bETED2AcFA+Z0PCJDOewO4= Name: res/drawable-xhdpi-v4/ic_clear_white_24dp.png SHA1-Digest: doY0jLzMBaeknvZcaHU55mEcNDQ= Name: res/drawable-xxxhdpi-v4/ic_photo_library_white_24dp.png SHA1-Digest: 4hbdFtP1OVvSP9H1SmvqJlhV6T4= Name: res/drawable-xhdpi-v4/abc_ic_star_half_black_16dp.png SHA1-Digest: 4NZnda4yf8qiNhg33fnhquq094o= Name: res/drawable-xhdpi-v4/notification_bg_normal.9.png SHA1-Digest: j66Eu60yXsTt2+rWG7/Bbt3KErg= Name: res/drawable-xhdpi-v4/ic_check_normal_light.png SHA1-Digest: 8QlwtJ2fccupMeU2If04UCygxos= Name: res/drawable-mdpi-v4/ic_archive_white_24dp.png SHA1-Digest: b7Q2pRkgVfvE4IxfNchLHu03+kM= Name: res/layout/psts_tab.xml SHA1-Digest: ut5zIC2Qke40czbjy2bU3/eq8ck= Name: res/drawable-mdpi-v4/ic_emoji_flags_activated_light.png SHA1-Digest: z9sgNyG1jC/CSDWTcLWRT5hppOg= Name: res/drawable-hdpi-v4/ic_audio_dark.png SHA1-Digest: re7dh5kEFBeVfcfrVP5pPVEd3fc= Name: res/layout-v11/conversation_fragment.xml SHA1-Digest: wBy1lqSfDOIFs+SjnAHEMdnPwzQ= Name: res/drawable-hdpi-v4/ic_app_protection_black.png SHA1-Digest: R8rC9HaXHQ0BpzxXbFIyIdzn9uE= Name: res/drawable-hdpi-v4/ic_select_all_white_24dp.png SHA1-Digest: GKLYH4WsrWYSOLbxzYJ2C3+29V4= Name: res/drawable-xxhdpi-v4/ic_photo_library_white_24dp.png SHA1-Digest: P2xr3ZeQwJcQR/qA6Vk/FmMxNHU= Name: res/drawable-mdpi-v4/ic_recurrence_bubble_fill.png SHA1-Digest: 7rU4lnig2n/p1+EnQKX2RGhw+5g= Name: res/layout/conversation_item_last_seen.xml SHA1-Digest: Ud6D9VpTZ59BZFWRquIaLsnz0D8= Name: res/drawable-xxhdpi-v4/ic_advanced_black.png SHA1-Digest: PdC6cKv/SDMc+zLeLgZg7lAN2SM= Name: res/drawable-xxhdpi-v4/ic_recurrence_bubble_fill.png SHA1-Digest: SvktZ/4DTpGiosr5uLgnDHEreWs= Name: res/layout/contact_selection_recyclerview_header.xml SHA1-Digest: nA+tCTWyXEXLRp0lp0EY09gGbDc= Name: res/drawable-xhdpi-v4/ic_emoji_symbols_activated_dark.png SHA1-Digest: DnNQnLERDE4Vcc/1yBfNui3lYIc= Name: res/drawable-hdpi-v4/icon_lock.png SHA1-Digest: 6BXCijrQeXipalz9npuKqy4DSRA= Name: res/menu/conversation_insecure.xml SHA1-Digest: hZ6jvcpMSW+ZgJOALoh2/efSXOw= Name: res/drawable-mdpi-v4/abc_list_longpressed_holo.9.png SHA1-Digest: GFCjouEOsx2zwJ4qrfooYQ63590= Name: res/layout/three_keys_view.xml SHA1-Digest: Spo4b3TNfcBUjvX7FkKwcGwVFas= Name: res/layout/time_picker_view.xml SHA1-Digest: i/HO6Ciac9XpXg6MhQnXpWGMAPw= Name: res/drawable-xhdpi-v4/abc_textfield_activated_mtrl_alpha.9.png SHA1-Digest: aGoDqShCvfRBOcYadujzbODhe1U= Name: res/drawable-xxhdpi-v4/abc_popup_background_mtrl_mult.9.png SHA1-Digest: qQpaYoGWL908h/WoyV81hrJSp9E= Name: res/drawable-xhdpi-v4/ic_send_sms_secure.png SHA1-Digest: /7klwvylPYsOKFO7iQV7v/Vo0eU= Name: res/drawable-hdpi-v4/ic_delivery_delivered_dark.png SHA1-Digest: 6jdYE2gOPsro7FC7U4wm1vci6A8= Name: res/drawable-xxxhdpi-v4/design_ic_visibility.png SHA1-Digest: QprzI4wdBmyk04hYKt3GSMEip/g= Name: res/drawable-xxhdpi-v4/ic_call_split_white_24dp.png SHA1-Digest: BdsShD0Cdwp93ix2AzbIdNWTrX4= Name: res/color/abc_secondary_text_material_light.xml SHA1-Digest: wP7WZmVV6oEHTqT4ks25UoAPyNU= Name: res/drawable-hdpi-v4/ic_emoji_people_activated_dark.png SHA1-Digest: moTnub9fz8+d7mL751FiGsF5Wog= Name: classes.dex SHA1-Digest: uE2fNrxx2qKrqL76ikYJU/MgbbI= Name: res/layout/abc_screen_content_include.xml SHA1-Digest: 5b3DomolwZfchrtJxjtLR+9TEkg= Name: res/drawable-hdpi-v4/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: HDJoTnQuLh9V9/4kv+/UeX7wGTY= Name: res/drawable-hdpi-v4/switch_bg_focused_holo_light.9.png SHA1-Digest: x7N6bd7BQ9gunVUj5pyMTy+B3f0= Name: res/drawable-xhdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png SHA1-Digest: RnQxBqnfZP2w/UH+bBFTojv2UoA= Name: res/color/abc_hint_foreground_material_light.xml SHA1-Digest: KuAFKms2hZw9E3Is9w+s2zDVQcQ= Name: res/drawable/switch_thumb.xml SHA1-Digest: 3JRoidAeg5CQDYIHfLmmbm9T2jM= Name: res/drawable-xhdpi-v4/ic_send_push.png SHA1-Digest: 9BvcpB99/bvxWwSpv7b58B2Vo7Y= Name: res/drawable-xhdpi-v4/ic_send_sms_insecure.png SHA1-Digest: qo8obCTtUBe01tBhGExdX+cZ8Yg= Name: res/drawable-mdpi-v4/abc_list_focused_holo.9.png SHA1-Digest: jJIIxBXFlVwxMesuJlFFhjvLhPM= Name: res/drawable-mdpi-v4/ic_audio_dark.png SHA1-Digest: HE0MxO6bxPvZrPqI1/FWkOpxN24= Name: res/layout/conversation_item_pending_v11.xml SHA1-Digest: tdwgB5sGkESfShcr5E/hJrXnWHE= Name: res/drawable-hdpi-v4/ic_unarchive_white_36dp.png SHA1-Digest: GWA5xmtnP7HH6n1ZdZ5dGKAOhNk= Name: res/drawable-xxhdpi-v4/ic_photo_camera_light.png SHA1-Digest: GToFtYpo05K8zJYrl7aHSua6fg8= Name: res/drawable/done_background_color_dark.xml SHA1-Digest: Rlncna6lQ7w11D50KF0uWHMiDkY= Name: res/drawable/abc_ic_go_search_api_material.xml SHA1-Digest: WlVPR6cSq9TAkubAAkePiOlg8nY= Name: res/drawable-xhdpi-v4/abc_textfield_default_mtrl_alpha.9.png SHA1-Digest: L12XNgC05BSQghB6JCrs8Us9eEo= Name: res/drawable-xxxhdpi-v4/ic_badge_24dp.png SHA1-Digest: ZCzHQl4OQDCch8q9Z2NUHjque90= Name: res/color/switch_thumb_material_light.xml SHA1-Digest: vXyvBrnI6VAMvOAaXTZ3qrpE58I= Name: res/drawable-xxhdpi-v4/ic_push_black.png SHA1-Digest: Wo6Su4ZMOSWk13DHcWQKIB8yHMk= Name: res/animator-v11/rotate_minus_90_animation.xml SHA1-Digest: dAr9tiloBMntrmMmfeQ1JW7RJVM= Name: res/drawable-ldrtl-hdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: u6/uL8RpuH0uA4j5k6GHmFtKKaA= Name: res/color/dialog_text_color_holo_light.xml SHA1-Digest: tw9Z15LR92IEz7YWFseQJAyVUpU= Name: res/drawable-xhdpi-v4/ic_menu_lock_dark.png SHA1-Digest: DJRuq8KIu10VVbJLKiaYrYWc/Cs= Name: res/drawable-xxhdpi-v4/icon_dialog.png SHA1-Digest: QhfVY7UBQilNAfrHJXWil0t74RI= Name: res/drawable-mdpi-v4/ic_check_white_24dp.png SHA1-Digest: oTQ8U+Rgg+M3vuYmqxlxC0toJ0g= Name: res/drawable-hdpi-v4/ic_save_white_24dp.png SHA1-Digest: N5LsvDNhv9nEwWmboKHAvvwMRNo= Name: res/drawable-mdpi-v4/abc_btn_check_to_on_mtrl_015.png SHA1-Digest: Txi4nHde0NvRVGH4WjelV6dyOKU= Name: res/drawable-hdpi-v4/abc_text_select_handle_left_mtrl_dark.png SHA1-Digest: K41jD6ysbp47ZcvjjR+O3lf5WDY= Name: res/drawable-xxhdpi-v4/switch_bg_disabled_holo_light.9.png SHA1-Digest: JxRwd3DKJhNPzikP2NFPrwYD4WQ= Name: res/drawable/pause_icon.xml SHA1-Digest: dCkVzXnnMv4YZfjzO1Mja5vbw2o= Name: res/drawable-hdpi-v4/ic_keyboard_grey600_24dp.png SHA1-Digest: VVc0f3FyhPmzq7mzgvY/w0IHt6w= Name: res/drawable-hdpi-v4/textfield_focused_holo_light.9.png SHA1-Digest: NfEGOtZ0YkueMDHG9onUNJVuHAM= Name: res/drawable-xxhdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png SHA1-Digest: 07+MMsIKk8a3BObx9eEkeKwYSSk= Name: res/drawable-hdpi-v4/ic_movie_creation_light.png SHA1-Digest: URIg5P3muuPYdqOpqn+pX8knF5c= Name: res/drawable/recycler_view_fast_scroller_handle.xml SHA1-Digest: lId/oCzHC4v97KJfaSwHpjh8Vk0= Name: res/drawable-v11/emoji_category_flags_light.xml SHA1-Digest: C23igqMnLW5kCfUE8FpsQeZLIos= Name: res/drawable-hdpi-v4/switch_bg_holo_light.9.png SHA1-Digest: CpRZZ1GTLscTpuMbiso8PfUMFTA= Name: res/drawable-hdpi-v4/ic_emoji_people_normal_light.png SHA1-Digest: PjxiZtdcSi0eepYbqyq295v8sn8= Name: res/drawable-xxhdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: QluevaTHgv86WnKHj0Dyu1BcXpk= Name: res/drawable-xhdpi-v4/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: 2SSuJk3m1pafpmf81TSs7M6iuf0= Name: res/drawable-xxhdpi-v4/abc_text_select_handle_right_mtrl_dark.pn g SHA1-Digest: 69lnE53qPLgE18gtGzVrdAF6RUM= Name: res/drawable-xhdpi-v4/ic_notifications_gray.png SHA1-Digest: Df/E+k9TSsm3RF962SHeTO3gQ9Y= Name: res/drawable-hdpi-v4/telephone.png SHA1-Digest: PV63hNvLQzhizICDSsAmwazBLzM= Name: res/layout/number_picker_dialog.xml SHA1-Digest: g9Bf7abBubKlGpI+LWdj4jh1Y3M= Name: res/layout/country_selection_fragment.xml SHA1-Digest: 9FP5VBphB5dDjtyb6LGAejYRDDk= Name: res/drawable-mdpi-v4/ic_emoji_symbols_normal_light.png SHA1-Digest: vXmDmMJ5oQnedF/DCmXdsXqUysI= Name: res/drawable-hdpi-v4/ic_visibility_white_24dp.png SHA1-Digest: z1F8ZsbpCOHYL3gHNmkhEoMwocA= Name: res/drawable-v21/avd_show_password.xml SHA1-Digest: PizmnkTFwNC7csslcnSb00Iv2GY= Name: res/drawable-xxhdpi-v4/spinner_disabled_holo_light.9.png SHA1-Digest: /azIzHZ1133FIi3w99IeVESqufs= Name: res/drawable/abc_vector_test.xml SHA1-Digest: 4yJGw44hdFgotEL2tng9U1c82Mw= Name: lib/armeabi-v7a/libcurve25519.so SHA1-Digest: oYaBWE6Prj5toeF6ZASmtunvkoU= Name: res/menu/conversation_add_to_contacts.xml SHA1-Digest: fh+QfduspZw3FJJnfpxs4X/FuWQ= Name: res/drawable-sw600dp-hdpi-v13/ic_backspace_disabled_dark.png SHA1-Digest: 1xOse/knAUkmdSJRE7Gm2BWULK4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LK SHA1-Digest: ko6X10FJKBj0QYuPsWPrM62WUX4= Name: res/drawable-mdpi-v4/ic_visibility_white_24dp.png SHA1-Digest: 2/xp3jjRLpzFxQ6sZaLc973TvBo= Name: res/drawable-mdpi-v4/notification_bg_low_normal.9.png SHA1-Digest: WuL2/toxWwVCkWEMRxb1EQOyMhA= Name: res/anim/design_snackbar_out.xml SHA1-Digest: tSHapqXFI6k7SCynouBmerWDWcs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ER SHA1-Digest: CiK7I1Sa10t6+pGTRT46H57PswA= Name: res/drawable-xhdpi-v4/ic_search_holo_light.png SHA1-Digest: Krgj7/Cu7xR6w6ZP7BIU1glKUck= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ET SHA1-Digest: oG3J7YbEOKhS6dN6m3XElR76Uqw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ES SHA1-Digest: P8KZt3DVwQNU9U3dDlFGFurQorE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LS SHA1-Digest: 3eHHAZpI08lTuNESlnVb1GPdI9A= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LR SHA1-Digest: SEm2FwEPAdTVDqCx7lLTp/n2T8E= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_EE SHA1-Digest: GenDAfyKn99KSYfib/3FBalvi28= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LU SHA1-Digest: q8g4fZ6rCb3VSyKBk8zr8G94pXs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_EH SHA1-Digest: +KAelbDxTopdKY8tZcrGeGOy6/E= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_EG SHA1-Digest: NOmrr8EO8An5VQB/Ewan7/3BILs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LT SHA1-Digest: 9zEJajp/2WPawy2bxkvAbcMAcGY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LV SHA1-Digest: Rf7pQcatiPUybVQYtoNWVkQF2N0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LY SHA1-Digest: FRsttQtKnO+HTkhZ8nNthNU8Q1c= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_EC SHA1-Digest: HOPN0fJQ2e8M9uI+aAM8pAMDKVI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA SHA1-Digest: N7hVhtzF5rIvSTX/OkpGKsFn9eg= Name: res/drawable-xhdpi-v4/abc_btn_radio_to_on_mtrl_015.png SHA1-Digest: sSo2eVyCVNeDBah+XyDsR3c+eao= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MC SHA1-Digest: d9Onu4cbK9qIPE3m/bRARrOwNEs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MD SHA1-Digest: HKD2beGJlD8Q+iDF3BhRoYu498Q= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ME SHA1-Digest: eieLvW4At5ftphyCQqxR2nZYY9w= Name: res/layout/notification_template_part_time.xml SHA1-Digest: W/kytmaWkF2VPENQ086DWVdFzxY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MF SHA1-Digest: XbV+szql0zBvzg+l2YNVpZk59cs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MG SHA1-Digest: TqdHY+Aneh9NS3ecdbhZff6WRIc= Name: res/drawable-mdpi-v4/ic_notifications_gray.png SHA1-Digest: nR8L8PHu6qYWyc+B0FbA7NLEUaw= Name: res/drawable-xhdpi-v4/ic_emoji_flags_activated_dark.png SHA1-Digest: m1hXrT9B1hmf35sVuclo7StZqR8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MH SHA1-Digest: eBu/3cUGVq/NDguCg8djRra8Vi4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DZ SHA1-Digest: 26RxyOaL6MJyB7ZDvc/iWY2kIlk= Name: res/layout/recipient_filter_item.xml SHA1-Digest: QntBBcYW90Shhm0OV1e7vvuiEmM= Name: res/drawable-v11/emoji_category_emoticons_dark.xml SHA1-Digest: Nr4UYN3LOdgJhjONAidin3Hgigw= Name: res/color-v23/abc_tint_seek_thumb.xml SHA1-Digest: Vnia/GdLsxJAaJPbtccRc+DNCGQ= Name: res/drawable-xxxhdpi-v4/abc_ic_menu_share_mtrl_alpha.png SHA1-Digest: zswdlAwmLMUdC8KexYY+VmSOxS8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FO SHA1-Digest: nRQLplgu/j5xCs6/Xs6iIcgTKJY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KI SHA1-Digest: UvEWzbq1iY+eYvwm6FrE2jkONw8= Name: res/layout-v21/notification_template_icon_group.xml SHA1-Digest: XLOAqJg1tab9l8hNVNyDb6OXchg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KP SHA1-Digest: vFoLsjHOWFHvSfUiE1X2la4Cnao= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN SHA1-Digest: McwX1/3qNv2fWPXVHVDT9rWPOzU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KM SHA1-Digest: fVwGfcTe+ypNcEutqQVh4hZ+WhQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FR SHA1-Digest: zjLXabCdm6RwLsAbGMUGIID4iuc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FI SHA1-Digest: Gq5V4OY0faJ1vzbpXJe2eeX2LTM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KR SHA1-Digest: Zmuire8Vc0o/q0jD42zY9FbAVFs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FM SHA1-Digest: FRwN00RDtX/xywLB27kNRjXaddo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW SHA1-Digest: p+A43cemg6fJ42DHd3uVUd23SME= Name: res/drawable-mdpi-v4/ic_emoji_emoticons_normal_light.png SHA1-Digest: n50CsI8Tev0fRuP1872Pd0izlsE= Name: res/drawable-hdpi-v4/ic_emoji_objects_activated_dark.png SHA1-Digest: 3vgsFON2BBKOUhTKy32/9MfPJ90= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FK SHA1-Digest: usWIisE23KlcNfPSmc+1c9tyJKM= Name: res/drawable-mdpi-v4/abc_list_selector_disabled_holo_light.9.png SHA1-Digest: S/+WIalIT7QGoZ4J/VOqr0XEGEM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FJ SHA1-Digest: ++PSC+2VIAd/orrJf/FYj9tbSZU= Name: res/drawable-xhdpi-v4/ic_lock_dark.png SHA1-Digest: apj3XDFuBznvT8FqnzsC8hUgSzU= Name: res/drawable/play_to_pause_animation.xml SHA1-Digest: lC2jsFFRN0P5AV5WRfTxog4PtKE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY SHA1-Digest: +DUNnjadV+WtxMMiD2BjXTb/Xos= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KZ SHA1-Digest: y2WBJ/nXi6ntXL181uUBl0hjwmo= Name: res/drawable-xxhdpi-v4/ic_emoji_places_activated_light.png SHA1-Digest: scW4BrCBqv0pjWht85aaGs9ApCs= Name: res/anim/design_fab_out.xml SHA1-Digest: eqyMleghgi0F32G8QHJUnftDRAc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LA SHA1-Digest: gS+NRXuxsM0J7poj3wGnfcgO4pw= Name: res/drawable/button_background_dark.xml SHA1-Digest: /33Cy7m3UkKOcki5nldzXnDJowU= Name: res/drawable/abc_ic_search_api_material.xml SHA1-Digest: fUkZfr9l9WcTa5TsedyqQlEfT8Y= Name: res/drawable-mdpi-v4/switch_thumb_disabled_holo_light.9.png SHA1-Digest: h+7dgWRgNzZ6qYbj0pMQoC2C4No= Name: res/drawable-xhdpi-v4/ic_emoji_recents_activated_light.png SHA1-Digest: r2UoA5vgl7VxlE/U+jaISJmY46g= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB SHA1-Digest: V7Znjaco9f/Iy2AVoZGzEHgFrto= Name: res/drawable-hdpi-v4/ic_lock_dark.png SHA1-Digest: j7x65/O64r4egbF3Vpw2+AGuv9U= Name: res/drawable-xhdpi-v4/ic_unarchive_white_36dp.png SHA1-Digest: 76V7Hze7OYOCHtxTFbFp6y2qvCw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC SHA1-Digest: U2v7sNQUX871iIgs0rB0Omj6/Lc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LI SHA1-Digest: W+xasLluPUD63y6iVyNGkRRSFo4= Name: res/drawable-xhdpi-v4/list_selector_background_selected.9.png SHA1-Digest: YJ9zp2BVWbYoWuD1G3xXbV47jvM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GT SHA1-Digest: dvrpscpscAUgxE4hiom8hsER1/o= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM SHA1-Digest: oCB0maGB/LsuiBZSstc8Jq0MnJE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JO SHA1-Digest: BuohdoPOVZoe9JBbRmGBloJIWkw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GU SHA1-Digest: 818Cc0DjonRGxvR1hmDeLr33fd8= Name: res/drawable-sw600dp-xhdpi-v13/ic_backspace_normal_dark.png SHA1-Digest: Aw8aqi+S0LDgyLzdEtK2UroA02Y= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GP SHA1-Digest: +UQmfbXc0KRcxLLkqK5LUVN9cVw= Name: res/drawable-v11/emoji_category_emoticons_light.xml SHA1-Digest: Z+gMiNhbCpygIX9WwGge//a90Fk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GR SHA1-Digest: MyEGCggYEB0nER9VELLNbVM4nPM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GL SHA1-Digest: /IqyEOK/kj1QOxvYC7Z8yHkuds4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GN SHA1-Digest: +OCSKP9M7LZN2mc4egttWfQbspc= Name: res/drawable/emoji_category_nature_dark.xml SHA1-Digest: 4m2xH9BcG4ZfhSK8nWd+qBUG6vg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GM SHA1-Digest: yvPOdH0m/84dAXizn6oP3tr2Qyw= Name: res/layout/three_keys_view_text.xml SHA1-Digest: KMedMcKk3gA8FYjf6+amYb9MZyw= Name: res/layout-v21/conversation_item_sent.xml SHA1-Digest: bjlzPTTyRH8puCCeWefXtdCq5+s= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GH SHA1-Digest: 7tyVPL7CR8hqZrZL8J42Zb4f9Vs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GG SHA1-Digest: w9mwhy8uAaRZYw9eKYx4vOH5jY0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP SHA1-Digest: kZtQzweakUTtB6umzZYno/rm5ms= Name: res/drawable-mdpi-v4/ic_warning_light.png SHA1-Digest: m1T8ZK8xW9wGNyF/ScOxmQjmMdY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GI SHA1-Digest: cVLCl6ZK6aazb8dfbTLDEmDbt3I= Name: res/xml/recipient_preferences.xml SHA1-Digest: FNVn3EmgV9mPuhyGbO41W2l+hcA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GD SHA1-Digest: 23f1WPq1tadou7YxZCenIiHx5Sw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GE SHA1-Digest: ewLccLbCd3W7UTEMs3WH3wFSwJE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GF SHA1-Digest: kDeHudl55sl+4Fmq9m9oiCDt2ko= Name: res/drawable-xxhdpi-v4/ic_delete_white_24dp.png SHA1-Digest: fo26gQ1rTD74Xa4FxnDkjcSsmyU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GA SHA1-Digest: KGZCYMIxAAyrB4sT17e9MxpYhts= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GB SHA1-Digest: c2SE5JUFbRwtVCGW3D53NJuPjIk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE SHA1-Digest: jWlj6xDyZ5cjFZU0PFtz4SqPRoI= Name: res/layout/icon_list_item.xml SHA1-Digest: W6DrW/IO8lkbYV8VVYoqni4fB9A= Name: res/layout-v17/notification_template_big_media.xml SHA1-Digest: BRD+EvTCwQbpHEpE0Gm45+E226w= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG SHA1-Digest: gtqR6K//aPYG32NSAU8kVcV+ltU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH SHA1-Digest: Zx7MhNm+QMlmk9IpN6rpPr+ZmHw= Name: res/drawable-xxhdpi-v4/ic_keyboard_grey600_24dp.png SHA1-Digest: OBuIDBljM8VNe5SpGBht4pv7GXM= Name: res/drawable-xhdpi-v4/ic_video_dark.png SHA1-Digest: 6nBugjicr6a673HUCCmJW8Q2Tts= Name: res/drawable-hdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png SHA1-Digest: cK/LCW7Y07tXQ8e5BdotU64US0I= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN SHA1-Digest: 0zQlSUUDB9rFqElM6jcUMxiLntU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IM SHA1-Digest: rzZujVGPgGiwBibfVR3e97DmYhY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL SHA1-Digest: BJBBAs/mxIFQVJAjfdLf24Xhh+s= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_HU SHA1-Digest: cNe4OzWlBFBSMv+CcO+AE7m1Jt4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_HT SHA1-Digest: qAHFHFiqfqrSRBndW5w98Lkfmrw= Name: res/drawable-xxxhdpi-v4/abc_ic_star_black_48dp.png SHA1-Digest: 71NIJQvOQ0vvgmCgwLtmHxelFyc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_HR SHA1-Digest: dqsUO43PgYgm7aFDv22LyKkd58Q= Name: res/drawable-xhdpi-v4/ic_attach_grey600_24dp.png SHA1-Digest: eP8SP5FjNQp/DbNhAUa+6SSjP/Q= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_HN SHA1-Digest: jFRQ55QAcI37lIk+q2SlTR3XQWA= Name: res/drawable-xhdpi-v4/ic_emoji_flags_normal_dark.png SHA1-Digest: xqJQwPDxU7dGMfeBydeKOClG/wQ= Name: res/drawable-xxhdpi-v4/ic_archive_white_24dp.png SHA1-Digest: gbr5qA65hgC92sdOpoFVMacpVxE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT SHA1-Digest: Qagj8Yf+lzuwmuSR369/BX3wn5w= Name: res/drawable-mdpi-v4/list_selected_holo_dark.9.png SHA1-Digest: w5jMjyx0n/lk3stiPGrcn7tdZT8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IS SHA1-Digest: EU6eNECplfpb6ZjxrSmM7LKzfT4= Name: res/drawable-xxhdpi-v4/ic_group_photo.png SHA1-Digest: Amux783eUEcFs+YIx6Ho4QwFmuk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR SHA1-Digest: FxzShd80T65+VHCAVMpqR4RLVts= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_HK SHA1-Digest: ZdcNCKGviOCbNheKAwIBsGeGh0Y= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IQ SHA1-Digest: bSeQ7rQuW3w1sp6XJ9w3BjUAc4A= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IO SHA1-Digest: LCU2bG18IExWKOFnWvywd+yyXN8= Name: res/layout-v16/notification_template_custom_big.xml SHA1-Digest: 6Cc+22UvH+lxCnlhjT1zkyJL+PI= Name: res/drawable-xxhdpi-v4/ic_emoji_flags_normal_light.png SHA1-Digest: Ude+n/pbQCHeuTUCYUnBND+DjF0= Name: res/drawable-xhdpi-v4/abc_btn_radio_to_on_mtrl_000.png SHA1-Digest: WXKtpz66pJSKelShj899BDnb29U= Name: res/drawable-mdpi-v4/ic_info_outline_white_24dp.png SHA1-Digest: qgNNf5R+lfdKfdLL2XwIyLo1Pfc= Name: res/drawable-mdpi-v4/ic_photo_camera_dark.png SHA1-Digest: gMUfLyp6cNpmLdmoRShpG6JDlVA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE SHA1-Digest: HYBvWI2Z0tlb1LIu2hHO9zr5s80= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GY SHA1-Digest: mxcavk/xn8Yb5iJm/8+WVxfGvSo= Name: res/drawable-mdpi-v4/ic_emoji_nature_activated_light.png SHA1-Digest: yJXAdPAwUHY28PneOgCbctsGxzQ= Name: res/color/abc_btn_colored_borderless_text_material.xml SHA1-Digest: WW68R7XHb3JiHwrYdxFmx073AyI= Name: res/drawable-xxhdpi-v4/received_bubble.9.png SHA1-Digest: W4de+5UEqZE2m7rCCt25/Z1CxWI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GW SHA1-Digest: RQiV1VkMzFqN9303Z4US/5oq7UQ= Name: res/drawable-xxhdpi-v4/ic_audio_light.png SHA1-Digest: 1BwT4HEB1FH0e8ErUvvw9UVQqqM= Name: res/drawable/last_seen_divider_text_background_dark.xml SHA1-Digest: S9qKuKzACOFXweC2S3e7be8G510= Name: res/layout-v11/custom_default_preference_dialog.xml SHA1-Digest: 39iUnvmNYHFHassDu5Sf3avA4oY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HN SHA1-Digest: wmdwU8MxPnbinZsXDJTGUL071ls= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AC SHA1-Digest: GSmldQS0V0LF8rbhzh3xXNxJoQU= Name: res/drawable-mdpi-v4/switch_bg_holo_light.9.png SHA1-Digest: vON82tQz84Bild5sO6RktMAlv6M= Name: res/drawable-xxhdpi-v4/ic_notifications_gray.png SHA1-Digest: 3Zb0LfM9HhNjEGyz0Fy5a1z6KPc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AD SHA1-Digest: ar9/1nU9D5hgsnOcx5u0PZwJ/9c= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AE SHA1-Digest: lqJvEENSJdhMOioyyZbiJZOjwI8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR SHA1-Digest: mtcNesgfP/cR+8TfEcqAxeLWRSA= Name: res/animator-v21/design_appbar_state_list_animator.xml SHA1-Digest: TK0TaKV09WhgYkWapszUr/I61Bk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AF SHA1-Digest: sSPsntPXIT4zP2TQYmy3KUo2TBM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HT SHA1-Digest: LyVHo6yRt1b4lxnNknSrW3pelEM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AG SHA1-Digest: P7W5c/VJCbLW7GK6jxGqHH5W5Gw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HU SHA1-Digest: 7vClN02DV7yKBbUWMeHRDD79ffs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AI SHA1-Digest: 27Y8YvEVm8dFdgLgQmCAkFcqBPM= Name: res/drawable-hdpi-v4/ic_forum_grey_32dp.png SHA1-Digest: ipBt0rZC+mrVcuHRhn+zOZXNqE8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AL SHA1-Digest: 79eU7sRCV2FUU4rHUeTSjB+TPmE= Name: res/drawable-hdpi-v4/ic_emoji_recents_normal_dark.png SHA1-Digest: vJP0sjFkcW8TqSxRhE41UHjrvw8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AM SHA1-Digest: jRQ4Uqvixmh7O4V+pQJ7zA3LEXk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK SHA1-Digest: lJp/+67ca+qqknJ9kDKOt6H9nhc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AO SHA1-Digest: 2p80j0O5NxrtyBlDTtd4AZMnXuE= Name: res/anim/design_snackbar_in.xml SHA1-Digest: QPiYcwJRp7LvVEneHabhK9QbisA= Name: res/drawable-xxhdpi-v4/abc_ic_star_black_16dp.png SHA1-Digest: 4f3D3QSNCzMFGqafojrMfwWdbXM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ID SHA1-Digest: C51MJ2ito4WlNqmr7FT+LSn9+I8= Name: res/drawable-xhdpi-v4/list_selected_holo_dark.9.png SHA1-Digest: H2X9BKxBdFAOYEppP+vczoJ/LCU= Name: res/drawable-xxxhdpi-v4/ic_volume_off_grey600_18dp.png SHA1-Digest: PwJ//ed9C27FraSJpbRCsuUYdeA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IE SHA1-Digest: XYmcF2wTQfoGYFukTxsGG60BQ64= Name: res/drawable-mdpi-v4/ic_emoji_objects_normal_light.png SHA1-Digest: ++tNTRbddExtaGnaProLukt1LcY= Name: res/drawable-mdpi-v4/ic_delete_white_24dp.png SHA1-Digest: 3VIWeLi4JOiNOJs4hQZKGwXNuGw= Name: res/drawable/abc_list_selector_holo_dark.xml SHA1-Digest: Zlmbg+JWzYfCIIOn1SxRANlh8xo= Name: res/drawable-xxhdpi-v4/ic_emoji_flags_normal_dark.png SHA1-Digest: 2z1yxZchowADwapp1FtAcalT87Y= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BD SHA1-Digest: FMKTkoiTZVY6rZ8nrm4weFu/Zjs= Name: res/layout/recipient_preference_activity.xml SHA1-Digest: TwR0zonxICqK+vJnKYRTU4PbElg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GP SHA1-Digest: Ry+gEADWJc5F0hk/fPoOgFU6Zi4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BE SHA1-Digest: C9OBMomKeH56Rf8D3kJRK/BornU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GM SHA1-Digest: +Ea0U4Y1zXwD/iNz00D2jjWBiuI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BB SHA1-Digest: 76fqxVMoyy5WsRrZ5YUJP7z/qzk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GN SHA1-Digest: JV96ZaK8wwScichqahTFuYVo+Tg= Name: res/drawable-hdpi-v4/ic_forum_black_32dp.png SHA1-Digest: 5b2v6D+cVzuh/Q0GQHqrKvzoZgE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BH SHA1-Digest: qXk6y18VjNtehZAEohPg+PCWfTg= Name: res/drawable-xxhdpi-v4/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: kKM7t2gcUV2hJsYu4H6GhDJ44Ww= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GT SHA1-Digest: Vk1e7Ww3lQq9Nupht0/l1aj0Zy4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BI SHA1-Digest: 5MEw8Am0U8NskpQQkpv7T/DZoLI= Name: res/drawable-xxhdpi-v4/ic_volume_up_dark.png SHA1-Digest: FnmNVs6FsUpOBx13HvJPiuwSNww= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BF SHA1-Digest: 6qcmbL8lS/pCTJZTRpOBUoGqRoM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GQ SHA1-Digest: JgkggPpwcMssM4KZKyh07cO/d+M= Name: res/drawable-xxhdpi-v4/ic_emoji_symbols_normal_dark.png SHA1-Digest: sWyrOJ6a5eO3vPY9IN3l5lZ9j4A= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GR SHA1-Digest: 1PL0qWwecYHiBYKr42CyQBe4CKI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BG SHA1-Digest: 3xp8HkBNTYnuCpHGqhpSYsMgvIY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BL SHA1-Digest: ZibVzjuWtBO/2c4mChDoqtZ+qdM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG SHA1-Digest: G2VhFcm6X+dFHZpUQ4lW9xXyTag= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BM SHA1-Digest: zrSOwjYO7AtSm3hj60CgJ2/xDK8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GH SHA1-Digest: DxHHS+t+GyG/R9rR+Uz3odQsX5c= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BJ SHA1-Digest: D7lSdeZxzBNos8ni5lDZSFv6Tss= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GE SHA1-Digest: h5JogMDM41xhSu1CUMqPgGiiQsA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF SHA1-Digest: iC1HFHkrIMJDXC9hMk91NTcdNg0= Name: res/layout/share_activity.xml SHA1-Digest: +qEhm4MuxpYYXQPa20C5FCrspiE= Name: res/drawable-hdpi-v4/ic_emoji_objects_normal_dark.png SHA1-Digest: 4CIbOZU3lmgOy9Rvb0Cwb6Xdi+I= Name: res/drawable-mdpi-v4/ic_volume_up_light.png SHA1-Digest: RcmL04qbOKaWF1+mFY7trDsJHaA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BQ SHA1-Digest: 8l6KqnSUMnvDnudq+9jkpx4KEKk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GL SHA1-Digest: 43id6HucRFVSRKQaZ1ZB9yr6cuA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GI SHA1-Digest: EVrXphk2FtWJnoFlU5SDxNqpH7c= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BN SHA1-Digest: 0bTllnIWPvsvqBDNC4yJLPEZZKI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BO SHA1-Digest: BDVs7zW3rHow3lXcsgH04Lv4QXY= Name: res/anim/slide_to_right.xml SHA1-Digest: odD3qfm4+8xLhJn/hGAfXAz+aZ4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AT SHA1-Digest: 3YZ3jvwarlFuCBRiPDHchuW4pdM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AS SHA1-Digest: y+wkj2RLzvL3te7HqxfRdRNDFlw= Name: ws/com/google/android/mms/package.html SHA1-Digest: zW3J5ZXNfuDLZKkBuTBJYYW1zpk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AR SHA1-Digest: mliNA/kZeJg2zEWHmdCzRxPXgRQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AX SHA1-Digest: upADZFWuDDzOFyOXZACn3y1YpKc= Name: res/drawable-xhdpi-v4/lockscreen_watermark_light.png SHA1-Digest: f3uR83//pKLF+IvoV5IDGhpgv7s= Name: res/drawable/conversation_item_header_background.xml SHA1-Digest: ltMtF0mlyQqMyjfRF3u1wqyKwE0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AW SHA1-Digest: 0h40YMhR4HoZ59JDI9dW+he7AIk= Name: res/layout-v11/conversation_list_fragment.xml SHA1-Digest: P2AiPoZu/JLDBPzaaZU7hPX9/30= Name: res/drawable-xxhdpi-v4/ic_send_secure_white_24dp.png SHA1-Digest: PH3CozxQ0hy2yhJtvCJLIWU2bB8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AU SHA1-Digest: EilomLb4KFVrkUSLAF8j40YiZ7E= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GW SHA1-Digest: UqW5JGp5uQlbQLl0uV7uc5sdVbc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AZ SHA1-Digest: yDTx//QhJ6De8XRzJaEzny+z158= Name: res/color-v11/abc_background_cache_hint_selector_material_light. xml SHA1-Digest: 5ZLto+P8lE/ONeMwLGzH/8b7W/M= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU SHA1-Digest: patID8hn7rFEAwM5FSvMAG+gDsg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BA SHA1-Digest: QfHbCGXOy0A65DpYF1RDwxSSnZg= Name: res/drawable/emoji_category_places_dark.xml SHA1-Digest: nAiCejcIDiqsQR2iIrzfyJaJZ1M= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GY SHA1-Digest: tkL4Idg3qX8PFTAiGgoILpOQw74= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CG SHA1-Digest: vyzpX2JZpDz2/DpSIGBMzLcvcwI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CH SHA1-Digest: nH20B0lZhunuR+ZoqsjyWIPFOZI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CI SHA1-Digest: JLyrJK5dx5XHcE5eGorZLdanoms= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR SHA1-Digest: NSzWXVJ5iFb8tzoFPw1usnVOahM= Name: res/drawable-ldrtl-v17/actionbar_icon.xml SHA1-Digest: WB6RqmtbPrs8sxSmdHke+npJQ1o= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CC SHA1-Digest: ft6e6WMLpBd45l3R1ppgxx0vyaY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FM SHA1-Digest: sVD3Buz/PGDNLNJbfPgAEaWN2BE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CD SHA1-Digest: tA8KqrQ4BLG0VvS20MauUcnart8= Name: res/drawable-hdpi-v4/ic_done_all_white_18dp.png SHA1-Digest: NQkeb4KFOxkPuhTFwbONV/rjtuw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CF SHA1-Digest: 7fXS+/JiYC9W+1iAu3QwB83sqRw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FO SHA1-Digest: Eed6XquaU8clgiXBCRkU2qqxVRQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CO SHA1-Digest: xp4Dv0QXpTvjgDGF55mKnqL6bVw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FI SHA1-Digest: TREZSxewZ4tpAJu6YGW9GTCDVQM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FJ SHA1-Digest: Jq2zK1ZUyYzPXjezFUC5l4BAZrk= Name: res/drawable-mdpi-v4/notification_bg_normal_pressed.9.png SHA1-Digest: brlMet9T126SG7tLyf7uBXl9NeU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FK SHA1-Digest: +/BGHWPyWHdcoXh0rd6ESfKQbtc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CR SHA1-Digest: S6EbqlwJP7S3VTyfb1EbfRpn1tA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CK SHA1-Digest: 3e0jDTESc2z0h053k1NFfL00sDk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CL SHA1-Digest: aqK/v7h1wAl6Q7b8PgVR1kL0TeA= Name: res/drawable-xhdpi-v4/ic_scroll_down.png SHA1-Digest: sUnicSMEn6dqaf1oVQrVWzwF8j8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CM SHA1-Digest: MUw7u/ISsywyLZocUXooE6+UHek= Name: res/drawable-mdpi-v4/abc_textfield_activated_mtrl_alpha.9.png SHA1-Digest: tB4B5H9j3pm0Xv62OAovdHEjuyk= Name: res/drawable-xhdpi-v4/sms_selection_icon.png SHA1-Digest: opocNNou97ui7HliabjkMqEJByk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CN SHA1-Digest: /ncr74UKT07ZCifM5WB+L2zm9QM= Name: res/drawable-xhdpi-v4/abc_text_select_handle_middle_mtrl_light.p ng SHA1-Digest: JkjhWOAKXEQ5GsY9qUsQ3JIuhZo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB SHA1-Digest: bQ2vlkEAjXxrWJpjbwBWUAk87Ms= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BW SHA1-Digest: y3Q+s4TM2YndHpz03AEkShZskt8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GA SHA1-Digest: k2Jen0TsqWGNKWRD2IT05C0QNXg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD SHA1-Digest: YnAZm8K6O+IRkrRbCm9BqT+cZtI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BY SHA1-Digest: ONYixx4PDDMAl3N3TQrV7RHbqow= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BS SHA1-Digest: kPjgljRRGXH5y9mvVxSgb77zZN8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BR SHA1-Digest: oD01nNi1cJYUxq6Zau3rnjD4OwU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BT SHA1-Digest: XT7RRQoPXAkuG12nePHULTWbMNQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CA SHA1-Digest: k5baZNgjeWiIpVlJiSZjCdt1dQw= Name: res/layout/empty_time_zone_item.xml SHA1-Digest: oDk4IqvqM8H6e/pK3UH3Lf0q0g8= Name: res/drawable-xxxhdpi-v4/abc_ic_star_half_black_48dp.png SHA1-Digest: hMrx/1G3oK/JDzKrsj4fVhrzc7w= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BZ SHA1-Digest: 3UbcDoFyPHe8PwYlureTP8zD4b4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DJ SHA1-Digest: OCxhQq7DILLkBHn8R16qpX3ARWI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DK SHA1-Digest: j4XiHePQQtda/JK+77klvy3Ghic= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ER SHA1-Digest: P0uJuBjfKLpEp3lG9coxQLxx3Vo= Name: res/layout/country_selection.xml SHA1-Digest: 6NViX+HrI12AtP7KbHukzq6VRpg= Name: res/layout/dots_text_view.xml SHA1-Digest: EeO1nY+bgs6bEIMj/kAY4xDXtDw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DE SHA1-Digest: Xs2mYBUnwBta5Nws962+jlJfbTY= Name: res/drawable-xhdpi-v4/ic_emoji_emoticons_normal_dark.png SHA1-Digest: SiayuB+wX/S0slsZ2npWsZjecBY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EG SHA1-Digest: WJQxoN3AarAunmow6xGyBuTGCUQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH SHA1-Digest: fgANQPgg19kRhwU/+ukN1BFpVZA= Name: res/drawable-hdpi-v11/icon_notification.png SHA1-Digest: 5RfIPQeF2eDVTCzeZfL4Z/Shwq8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE SHA1-Digest: 74TJQTDaCgbnCRpE0OdRL4qRfII= Name: res/drawable-sw600dp-mdpi-v13/ic_backspace_normal_light.png SHA1-Digest: YrP5gVwIfhEX37AgcwI4RunV0AY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DO SHA1-Digest: yCZJ1mOSxKKKE4nA7LCejMRJ3Ak= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EC SHA1-Digest: 6ZuNJ8mGXy7wh3bVWp23t42Z8sE= Name: res/drawable-hdpi-v4/design_ic_visibility_off.png SHA1-Digest: NIsXamkuhAzt6ldG5G4ar1YeZko= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DM SHA1-Digest: lCxy6fdz9COgrWQOljkNmlZuuHg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CZ SHA1-Digest: UIj6c1xplrAfRxxnH+WRoGi8Ldc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CY SHA1-Digest: mzylAzyX7YTSC1/mBd4Xu0XbJho= Name: res/drawable-mdpi-v4/received_bubble.9.png SHA1-Digest: Cw0YMXapgMp4/S7dKrcGoiAWX0Y= Name: res/drawable-mdpi-v4/ic_image_light.png SHA1-Digest: V3hgc8Z5xQ0lxr7M8a+0K3+kyKs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CX SHA1-Digest: N7O+pAZHYKuo//s7uat1CPoD0RU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CW SHA1-Digest: 93FSBejkt7reOcHSWaXM88FuODY= Name: res/layout/contact_selection_list_fragment.xml SHA1-Digest: CkRXrY5QAeLdWwVs9DBq3tDMdz4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CV SHA1-Digest: XDId5wsWqiw49DKaJV9OTbZRhdI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CU SHA1-Digest: n7qaE3KPafkJF6Dbmnr5XmhTt4E= Name: res/layout-v11/notification_template_big_media_narrow.xml SHA1-Digest: tQibd00mdVAWLymwdJ/kNBDS+CQ= Name: assets/fonts/Roboto-Bold.ttf SHA1-Digest: 0xOrLEV1a/TpcmR/WyrWka0lCZA= Name: res/drawable/circle_touch_highlight_background.xml SHA1-Digest: +vrejfE86g5jlzpEsT1T1kPkZkw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ET SHA1-Digest: ZgHaxsiotkHOcLboOBdAmEcPbSU= Name: res/drawable-xhdpi-v4/abc_list_divider_mtrl_alpha.9.png SHA1-Digest: f5w1/P3BOViOfigUbV/eR0uuTmE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ES SHA1-Digest: A471eyB6g1l3oxwstU+e3iFFbsQ= Name: res/drawable-mdpi-v4/ic_mood_white_24dp.png SHA1-Digest: F1jZ+RPCYZYnhrdyEobaqc4HDds= Name: res/drawable-xhdpi-v4/lockscreen_watermark_dark.png SHA1-Digest: hlEs6EtN2kUs2+CrmYa3eux6s+o= Name: res/drawable-mdpi-v4/lockscreen_watermark_dark.png SHA1-Digest: seLgq7oT0J1fGJEos/BvHUn9HxM= Name: res/drawable-hdpi-v4/abc_text_select_handle_middle_mtrl_dark.png SHA1-Digest: Ho2ikNhvPPbPXcRViwyhs0XepR0= Name: res/drawable-xhdpi-v4/abc_tab_indicator_mtrl_alpha.9.png SHA1-Digest: BmwsKC3uNvwcF8agRRgehS1CAm0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DZ SHA1-Digest: nHslb+1sPO2Ce59WWMSXaVXQqG8= Name: res/drawable-hdpi-v4/ic_volume_off_white_18dp.png SHA1-Digest: wGLI3kD/AHJTZ9cmBaHUMgwUmjw= Name: res/layout/receive_key_dialog.xml SHA1-Digest: N6rKDVnVaim5Ngk5WMkQA07ODx8= Name: res/drawable-xhdpi-v4/ic_emoji_flags_normal_light.png SHA1-Digest: lzTZ5KC+L1NXjN1Lc0RUX4B+kwY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE SHA1-Digest: k7ftp7Ib+g0G5Q6CUxuEzYND4u0= Name: res/drawable-xhdpi-v4/check_dark.png SHA1-Digest: iE2tfQLkrgNIvYZN3a0MlRJpleA= Name: META-INF/services/com.fasterxml.jackson.core.JsonFactory SHA1-Digest: wj+dD6oGz5YGyIP+iorCZD19Vfo= Name: res/drawable-sw600dp-mdpi-v13/ic_backspace_disabled_light.png SHA1-Digest: NzveXyIeX/Q8a9YPSBUiW3bhSmk= Name: res/drawable-xxhdpi-v4/divet_lower_right_light.png SHA1-Digest: fUkn0IXtb3K2laJRdKjS0QP90ik= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM SHA1-Digest: oYpfMM+VLHotoNXuW6U6yMp75BQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DK SHA1-Digest: 2hI98L4j3X8dPES6LCFfu76+bg4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DJ SHA1-Digest: OeJYJhL1wPAee7j/UM285LVtMs4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO SHA1-Digest: uRNgcVKJn/gRsZVHGsxP6QiO3Pg= Name: res/drawable-hdpi-v4/lockscreen_watermark_dark.png SHA1-Digest: SNi3m+8aly9MoEzOODURLRT2dgc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR SHA1-Digest: EviDQ8EathIn293mluU6XBg73EA= Name: res/layout/abc_screen_simple_overlay_action_mode.xml SHA1-Digest: shGoP8DkqV4/9zkW62jOT5c6dTM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CU SHA1-Digest: mRNK7K4HUg/JaI/rNhJxzMzQ1Cg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CV SHA1-Digest: RVIN2mYGimgGwrX5Vtj0T3GtE8c= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CW SHA1-Digest: F59PQe3PRWWiEpDzRg1cIssLgvg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CX SHA1-Digest: gSq5dJocBDebtC3H3up10Q0VVXE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CY SHA1-Digest: jDnqEUSgx6Werj9xL6K7MNfZGZU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CZ SHA1-Digest: xx5oz1l40WoFgtXw5Zv13SzDDXU= Name: res/drawable-xhdpi-v4/ic_launch_white_24dp.png SHA1-Digest: ixUFVWh56fsEoPry/wBlNYTpgzM= Name: res/drawable-xxhdpi-v4/ic_arrow_forward_light.png SHA1-Digest: JgsrnATQt1egl0kfbJbKYMJY3FE= Name: res/layout-v17/select_dialog_multichoice_material.xml SHA1-Digest: 6GoUVzn6/X2e2d0g7MP0o+/2Gjw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA SHA1-Digest: w8zaxguC8zeZPWdUkglpBqHhUP4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CD SHA1-Digest: 9+I21RpqnaRIC6/Xr/CImt36Pn8= Name: res/menu/text_secure_normal.xml SHA1-Digest: NaZEidwFPpPT7hrGo6Ju/ysx0c4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CC SHA1-Digest: O7xyeOuzTRUJYrBlldvjkX4DqAE= Name: res/drawable-mdpi-v4/ic_push_black.png SHA1-Digest: rUKpp3tR4GRM6n8viBjxaVQ0Tgo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CF SHA1-Digest: Zb150rGevGBapWuqzyutTvSGC60= Name: res/drawable-xhdpi-v4/ic_push_black.png SHA1-Digest: yPg6Ws1FUPLGcxmjbMjLK7q+IK0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CH SHA1-Digest: eH3zu6OTr8s9tl+AreAyQGP1GZ4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CG SHA1-Digest: bw9rbUzTOmaojAI7sHfQ0uGC234= Name: res/drawable-mdpi-v4/abc_ic_star_black_36dp.png SHA1-Digest: 5iJ2OwOvvq9Mq0WIYEcsSLKKghY= Name: res/drawable-xhdpi-v4/ic_circle_fill_white_48dp.png SHA1-Digest: NBKLet+soFmGPPvFv8en3NizT6A= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CI SHA1-Digest: Z+GKCwhOSabtrPuvRNUNEegV+xA= Name: res/drawable-hdpi-v4/abc_ic_menu_share_mtrl_alpha.png SHA1-Digest: 15Em2L2dzqYc4FpCIRN6G9jDl+w= Name: res/drawable-hdpi-v4/ic_send_sms_secure.png SHA1-Digest: C9M7P4sTqQTkrm9c1b7a5JiCswM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL SHA1-Digest: o2jhWQILjzidYdpzlPTyHweU3Lc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CK SHA1-Digest: EwIARx8u+BnBm/OxE5+eF7icSZU= Name: res/layout/delivery_status_view.xml SHA1-Digest: rY8G9XatzpovR5oZJo+0aWjkcMU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN SHA1-Digest: GpiwtSYl7aT20iutUnqh1jtH2dY= Name: res/layout/abc_list_menu_item_checkbox.xml SHA1-Digest: +jlKh058XvxdeJU7n5iJbTnWP38= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CM SHA1-Digest: OrHRr+X/4FSmYJKlf4qmRgcKkfc= Name: res/drawable-xxhdpi-v4/ic_lock_black_18dp.png SHA1-Digest: m6B0U6dWbBizykEnQpeR0RoOj4c= Name: res/drawable-xxxhdpi-v11/icon_notification.png SHA1-Digest: v3D0kz34jttPWcbQoYLpiWGJS3E= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO SHA1-Digest: 8nTagABMmOjMblfD0WuHGCelKRc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW SHA1-Digest: 9zeEobPgAk0QePW1vwEK3YN5bFc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BT SHA1-Digest: oWKvwYKJy2599iCVKzxxe1kx/WA= Name: res/drawable-xxhdpi-v4/ic_emoji_symbols_activated_dark.png SHA1-Digest: KDZRFcJ7sq1qh1EB6ZOte3n3y/E= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR SHA1-Digest: mSQseCW+AqVyEfdmZQzZfNMDLRg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS SHA1-Digest: SBwAaf2sVMF1XXKqfucd9PIC4IA= Name: res/drawable-hdpi-v4/ic_unarchive_white_24dp.png SHA1-Digest: i0NdcFQ/sn3N2wNU4pRTsoj9Hqs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BQ SHA1-Digest: l/O/YwXNQfrAK+3iAFAuunSAKBE= Name: res/drawable-ldrtl-mdpi-v17/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: rIBNxxH8rn0XchnrLO+YkM759P8= Name: res/drawable-xhdpi-v4/ic_clear_search_holo_light.png SHA1-Digest: 3amzDMs5C1zU0+T2IQhw6+cxKro= Name: resources.arsc SHA1-Digest: 7C0XCh6TfFh0dCc6wu1cJXIvQhQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BZ SHA1-Digest: bZ0DVTWtAaor7LTbuyteUblHZqE= Name: res/drawable-hdpi-v4/ic_forward_white_24dp.png SHA1-Digest: VsmydyZ0FPEoCwy7r8eNB6lNGGg= Name: res/drawable-xxhdpi-v4/textfield_disabled_focused_holo_light.9.p ng SHA1-Digest: EVVtSa4tBxIM4sQfg3efMbAd73k= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BY SHA1-Digest: qyps4AOsSxAwsfkf9C4I37F49lk= Name: res/drawable-mdpi-v4/ic_lock_black_18dp.png SHA1-Digest: y1vas11JhCozCPoOdEJ4aufqvWk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BG SHA1-Digest: z0s/VLZXEOpDzndI7ML2UuBuGuk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF SHA1-Digest: 14+L8OZSyZLzlXyYpyaMlIhX+P0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BE SHA1-Digest: QbvpQbvC8CE1LiMJeKI6rrnnTAY= Name: res/drawable-mdpi-v4/check_dark.png SHA1-Digest: eNnJ7BgEqrocb7op+R+cxUCOil0= Name: res/drawable-xhdpi-v4/list_selector_disabled_holo_light.9.png SHA1-Digest: bwjSzuahpvwVgJavscLUKen/ZqQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BD SHA1-Digest: BXF+lPM0reGE7KxlqdrAjx2Krq4= Name: res/drawable-v12/recycler_view_fast_scroller_bubble.xml SHA1-Digest: fK9A5ABKj0zZace6jtRt8OOyBgI= Name: res/drawable-xxhdpi-v4/abc_ic_menu_share_mtrl_alpha.png SHA1-Digest: cvp+pWujiXpQMYoa2y9EetK0U4s= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB SHA1-Digest: ICtoY5/KdxJUczDlFKI0mImUg9k= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BA SHA1-Digest: ikwEIIEnzXMPWnRGDVHU3KORNCc= Name: res/drawable-xhdpi-v4/ic_emoji_symbols_activated_light.png SHA1-Digest: 6v6XV3wISkj8+48sJjxhmdrSpko= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BO SHA1-Digest: lXEPfhd8iCjSHfu3grvFp/fSMdM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BN SHA1-Digest: +iKXGqbJ7+S7/z8wnIVGL/nbTtQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM SHA1-Digest: DeS+/JuqN2wJgvboIyl7VLpVuT8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BL SHA1-Digest: T5HDy99O+ftVavMq1U6gd3Ajrzc= Name: res/drawable-mdpi-v4/ic_mood_grey600_24dp.png SHA1-Digest: 4P/X40qJCsjuFRNhUQ0rsVMqm3k= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ SHA1-Digest: EQX7sTl6NxbTJhLLvCTpK6MZKpE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BI SHA1-Digest: +ur7EMKohdoIn+4cWbSzKm5Cosw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BH SHA1-Digest: 5kaLaTaOJh1E0yCJVI8LkQPpxEE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS SHA1-Digest: lFPVh6MGBKlowOwE3bQti9UQBmY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT SHA1-Digest: hqGb37qZDfDlQmLhc2O5J4E0Oxo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU SHA1-Digest: pUYpWj7Mbq1jKgqzU6FKQcC0ris= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AO SHA1-Digest: rSWdt7x0gLvGsQEg/RNjE2uaOH8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR SHA1-Digest: wACsMm8/e/4g5yMOLykrkLt4Wic= Name: res/drawable-xxhdpi-v4/ic_photo_camera_dark.png SHA1-Digest: IwWP0PnycjoKHklZ8+OMobwsg6g= Name: res/drawable-hdpi-v4/ic_scroll_down.png SHA1-Digest: l8b//nR9nd7fiUinyLXS0Sj6zno= Name: res/layout-v17/timezonepickerview.xml SHA1-Digest: vl37WDSnud4WlCno8BOR8EA5h0A= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AW SHA1-Digest: forQYq6WWbzM8JB5icXx3pqJh1g= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AX SHA1-Digest: xXXhU0wibZJgRbagTefH5FsETL8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AZ SHA1-Digest: CJrPQMosQCfPKIYPRW1Dd8pUTj8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AD SHA1-Digest: gfIYvmYpbQKJZ55/DXhtY+TJO7o= Name: res/layout-v16/conversation_item_pending.xml SHA1-Digest: M+G4c6n3fpwhlz4QRj/jsnVzldA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AC SHA1-Digest: jhb/OjTha//hkw0P6kxXqaNRmo4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AF SHA1-Digest: msh1yQtOY6p3MDgBy0RJQz+hJoI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AE SHA1-Digest: 2pmWArmMF8XPBhUHB1BDUk6sU48= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AL SHA1-Digest: wHqLey8AvcafXdaSY+why0BZAKo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AM SHA1-Digest: OWp+yIi/MST0sFxWWd8YlBZEVKk= Name: res/drawable-mdpi-v4/ic_block_grey600_18dp.png SHA1-Digest: 4iXvvFIaFAoVQOcDOOX+doa1kwM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG SHA1-Digest: IREC7VmaNyp2z6TlD/gOqjKgru8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI SHA1-Digest: +2+HU3m74y5TWONWX3hrGSVnPic= Name: res/drawable-xhdpi-v4/ic_account_box_dark.png SHA1-Digest: LFnuytM5maL4Lfl/eg1UkXoCtRY= Name: res/drawable-hdpi-v4/ic_clear_white_24dp.png SHA1-Digest: 9zM7YW9BmOj9UKEqe7OeHH9kimE= Name: res/drawable-xxhdpi-v4/ic_download_circle_fill_white_48dp.png SHA1-Digest: 8ve31VPRX9mkBi1B2ygHSSQrvlg= Name: res/drawable-mdpi-v4/ic_lock_dark.png SHA1-Digest: i4whup9/nTIGg/wXaZ8QuIZ70KU= Name: res/drawable/abc_seekbar_track_material.xml SHA1-Digest: 17M1OyJgbSyvZxbg3tUg5REGwOg= Name: res/drawable-mdpi-v4/ic_call_split_white_24dp.png SHA1-Digest: 0YrgcnO5k1/uSRgpvjxausMrXVw= Name: res/drawable-mdpi-v4/ic_emoji_places_activated_light.png SHA1-Digest: Ud3W8vS6D8D45zBZyKIU0mEZuJM= Name: res/layout/abc_list_menu_item_radio.xml SHA1-Digest: agsopWn5fspPqFiahI2wYYvv2Ig= Name: res/drawable-mdpi-v4/ic_emoji_places_activated_dark.png SHA1-Digest: TTKosBID71Fu9FE1ZH87ZoyxMZA= Name: res/drawable-xhdpi-v4/ic_call_split_white_24dp.png SHA1-Digest: 4imrsk3nBfyAcr1rcf4NRimxPdg= Name: res/drawable-mdpi-v4/abc_ic_menu_share_mtrl_alpha.png SHA1-Digest: RsYa9PHKHTGXi9SGr7dikHjzRmA= Name: res/drawable-xhdpi-v4/ic_emoji_people_normal_dark.png SHA1-Digest: eej5DAUXKUi/6JE0ukV+yZhF6P0= Name: res/layout-sw600dp-v13/three_keys_view.xml SHA1-Digest: PeshPVCO5Wp22jO8OB976nxhq/g= Name: res/drawable/abc_list_selector_holo_light.xml SHA1-Digest: y4DqLE9ZMUXA7mpN9gzH7cgYblE= Name: res/drawable-xxhdpi-v4/lockscreen_watermark_light.png SHA1-Digest: AYNtsBVsxmSt1MgC8RP6Pd1pBao= Name: res/drawable-ldrtl-xxxhdpi-v17/ic_send_white_24dp.png SHA1-Digest: IeLbm+xeGshzGwFPXOgB3CPFAIg= Name: res/drawable-hdpi-v4/ic_account_box_dark.png SHA1-Digest: Ii8tkZLRASna4Emp7tR3oRPvpLg= Name: res/drawable-mdpi-v4/ic_file_download_white_36dp.png SHA1-Digest: UY6G3irYxV+vXtOBJkHhAL96QqA= Name: res/drawable-xxhdpi-v4/ic_push_registration_reminder.png SHA1-Digest: Cm0M0XIBlw7BRiSi4j3+PluhFuY= Name: res/drawable-mdpi-v4/ic_menu_add_field_holo_light.png SHA1-Digest: XcK6Zy+//GXKE2tbr8mkSr6ZVZo= Name: res/layout-v17/custom_default_preference_dialog.xml SHA1-Digest: HUQHHYyxai0hDOmCZJWChGinyio= Name: res/layout/contact_selection_list_item.xml SHA1-Digest: Aeg8JWmT0UeWUU7c1k2DEEyDmk4= Name: res/drawable-xhdpi-v4/ic_send_secure_white_24dp.png SHA1-Digest: eVPdl3BecE8ulLAEb8nyJkwRGH0= Name: res/drawable-xhdpi-v4/abc_list_selector_disabled_holo_dark.9.png SHA1-Digest: e6ZxO30OB+oHpoct3gGLBY0gYXA= Name: res/layout/three_keys_view_right_drawable.xml SHA1-Digest: hwXL753+YQ37R1QjWOgBImsKzbo= Name: res/drawable-xxhdpi-v4/textfield_default_holo_light.9.png SHA1-Digest: HnMo01YraOS60C6Mfei/HvkA/0E= Name: res/drawable/abc_btn_borderless_material.xml SHA1-Digest: rPL1lJzRovUC1nEamnoL6zg2+0U= Name: res/menu/conversation_popup.xml SHA1-Digest: Fsb8H1dyYNJVIJb7UjI4pZgeoFQ= Name: res/drawable-xxhdpi-v4/abc_textfield_search_default_mtrl_alpha.9 .png SHA1-Digest: bHADGZ86aGisr0oBfZBoU7RHX/g= Name: res/drawable/abc_text_cursor_material.xml SHA1-Digest: e08kbab0hCmZ+bodjZ7WbbBG5g4= Name: res/drawable-hdpi-v4/abc_ic_star_black_36dp.png SHA1-Digest: lLeiPraqvP94YGRcJ58nUBYrU0s= Name: res/drawable-mdpi-v4/abc_popup_background_mtrl_mult.9.png SHA1-Digest: 8uS5dzxcWfvqLPd6VcABucDe9VM= Name: res/drawable-xxxhdpi-v4/ic_volume_off_white_18dp.png SHA1-Digest: 5dpYsBDaejTp8Sj0/LycIcwqUjE= Name: res/drawable-hdpi-v4/ic_message_gray.png SHA1-Digest: HEBF0Kk39LkBPbBAQ3oPqFNlBJc= Name: res/drawable-xxhdpi-v4/ic_check_white_24dp.png SHA1-Digest: 1ybum7+f/AW95nocQgY4HgUAwVA= Name: res/drawable-xxhdpi-v4/ic_content_copy_white_24dp.png SHA1-Digest: QluevaTHgv86WnKHj0Dyu1BcXpk= Name: res/drawable-xxhdpi-v4/ic_recurrence_bubble_outline.png SHA1-Digest: p8Ew5K1+rS0MDt8d1dNhXOyaeXE= Name: res/drawable-mdpi-v4/ic_group_photo.png SHA1-Digest: H5p61NfNmfjKp56IugjyXBMV034= Name: res/drawable-xxhdpi-v4/splash_padlock.png SHA1-Digest: XmBC9O8eAJQJFddDq6/Wz6i0FcA= Name: res/drawable/conversation_list_item_read_background_dark.xml SHA1-Digest: R/Bz3042zFeI4ZV+832gVyj097g= Name: res/drawable-xhdpi-v4/abc_list_focused_holo.9.png SHA1-Digest: Kw0Qo9eKlw06/oxLHYSWR6VftBw= Name: res/drawable/recycler_view_fast_scroller_bubble.xml SHA1-Digest: wRRdXv08lnaiKNy7Vz1zDb1gdTs= Name: res/drawable-hdpi-v4/ic_emoji_objects_activated_light.png SHA1-Digest: pa3Pmzz6WAvI0UR5AYU6YhqyLDI= Name: res/drawable-xxxhdpi-v4/ic_menu_lock_dark.png SHA1-Digest: 4wi2CULelc+GDc9h9IuPIgQKozc= Name: res/drawable-hdpi-v4/ic_emoji_symbols_activated_light.png SHA1-Digest: lzeQS2wqbqmpwSgJEDzVCsxXQWs= Name: res/drawable-mdpi-v4/abc_list_pressed_holo_dark.9.png SHA1-Digest: MoCLKmenbTlsz905dAkmwWiKKG0= Name: res/layout/design_layout_snackbar_include.xml SHA1-Digest: /FYbLwQJjqORI4i5Hm55yKJy7dk= Name: res/layout/contact_selection_list_header.xml SHA1-Digest: bl+2m53uDPHKWPgEkbbRgrufOc4= Name: res/layout/preference_list_fragment.xml SHA1-Digest: CZYRwRnR40i+N4BeZNClol3VSbE= ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3041873 fdroidserver-2.4.0/tests/metadata/org.smssecure.smssecure/signatures/135/0000755000175000017500000000000014770510164025151 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/metadata/org.smssecure.smssecure/signatures/135/28969C09.RSA0000644000175000017500000000245614717152070026503 0ustar00hanshans0* *H 01 0 +0  *H c0_0G?w~0  *H  0`1 0 UUK1 0 UORG1 0 UORG10U  fdroid.org10 U FDroid10 UFDroid0 150403094515Z 420819094515Z0`1 0 UUK1 0 UORG1 0 UORG10U  fdroid.org10 U FDroid10 UFDroid0"0  *H 0 Q_aI.r4Px@ K{F}!aPB({d9(AN>(ue>kkIXxꃑ¨ CN@jz`jU ZpJpFk"{mZ Ab&nk2ok ^<@SL7u%v2 [ސ"X\40  *H  Y N~lP V'3hC-v=rǞ`%9'>xڢ<(͐K63y\'^HݴbY+kFe+!)7 HM.6]] viҀQM+GQJexHJt<1zWYyO}QϾ̢{: 6~pkw\\_K'lʸ>7-p^#%g(CiM3fAŧVcIVvxܺ؎m~SM Ų100h0`1 0 UUK1 0 UORG1 0 UORG10U  fdroid.org10 U FDroid10 UFDroid?w~0 +0  *H N øQ36g=<6"he#YJ}V. @1WDC ɶR5A-D#QZ^cג8"3J?:BKŁ ⽴`Rd8[ MN%k.]Tz>yD J*OR4Y:^Z~cl/ 5}>9|ђBcJ(4A?KDz+y_(Z././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/metadata/org.smssecure.smssecure/signatures/135/28969C09.SF0000644000175000017500000070551014717152070026367 0ustar00hanshansSignature-Version: 1.0 SHA1-Digest-Manifest-Main-Attributes: rEl8fnPMQh1rq1BuTuB1Ry1XYRg= Created-By: 1.7.0_121 (Oracle Corporation) SHA1-Digest-Manifest: BBOlC1NFW1J6ufJv9Il0JboXzRc= Name: res/drawable-xhdpi-v4/abc_ic_star_half_black_48dp.png SHA1-Digest: EmJpVhbB6cz/PQADmxVzyVNMusw= Name: res/drawable/abc_btn_check_material.xml SHA1-Digest: YFDDnTUd6St4932sE/Xk6H0HMoc= Name: res/drawable-xhdpi-v4/ic_video_light.png SHA1-Digest: BGO/xCluvDTkwWDprkpQDgEc60E= Name: res/drawable-hdpi-v4/ic_lock_black_18dp.png SHA1-Digest: tsXHhh2ccnNTEGew41PTgDSThgo= Name: res/layout/design_navigation_item_separator.xml SHA1-Digest: Rop+L/oPNw275ck8glcXZA481BY= Name: res/drawable-hdpi-v4/abc_textfield_search_activated_mtrl_alpha.9 .png SHA1-Digest: 3TVJoKotGhu2qu7nxOP+9dmuUfQ= Name: res/drawable-xhdpi-v4/ic_advanced_gray.png SHA1-Digest: YLJ9SvpsZRDIbaydeSWXUX+Y3j4= Name: res/drawable-mdpi-v4/ic_notifications_black.png SHA1-Digest: WcvuIg056OtSX/LWMfMDbERHkks= Name: res/drawable-hdpi-v4/ic_audio_light.png SHA1-Digest: cZFumcd+UgZuJnK8UFfkM0ojUUQ= Name: res/drawable-xxxhdpi-v4/ic_textsms_grey_32dp.png SHA1-Digest: l/2TAEyiMaEqIsMf/UHBB98WuYg= Name: res/drawable-v21/abc_action_bar_item_background_material.xml SHA1-Digest: KV90fjq9oUm4oE6kD9IDK7IG1zg= Name: res/drawable-xxhdpi-v4/list_focused_holo.9.png SHA1-Digest: 2/qW1KJgIeUV4L7+Rd9kqNoxB2E= Name: res/drawable-hdpi-v4/ic_arrow_forward_dark.png SHA1-Digest: eqfqRWlSKpxiJF1tASHfrv2+W1s= Name: res/drawable-xxhdpi-v4/ic_arrow_forward_dark.png SHA1-Digest: 4Ppky2q92+b9PMoI1/MVOVpJKM0= Name: res/drawable-mdpi-v4/ic_attach_grey600_24dp.png SHA1-Digest: kWU9fVGPTBhcZ0y79ZcbrlX/lrs= Name: res/drawable-xxhdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png SHA1-Digest: 3cGsKipfgybfWKKMdG932/zCITU= Name: res/menu/conversation_list_batch_unarchive.xml SHA1-Digest: 0s3RSDcaD1sgaGLGFQqDYueUiR8= Name: res/layout/share_list_item_view.xml SHA1-Digest: cwy28T30itaOeMaYIP3myLWkRKE= Name: META-INF/services/com.fasterxml.jackson.core.ObjectCodec SHA1-Digest: TUt3WJOdFSbY0ZddbRq3WmcKOBM= Name: res/drawable-xxhdpi-v4/ic_emoji_objects_activated_dark.png SHA1-Digest: Oel3aZlAYvXA7ntzP46gFjfRvYA= Name: res/drawable-xxxhdpi-v4/abc_ic_star_black_16dp.png SHA1-Digest: 9nUV5uGG9nx8q07XftbT3Na7NqM= Name: res/drawable-hdpi-v4/ic_block_grey600_18dp.png SHA1-Digest: sgiSdfDsqVZSYm42xezzjLluyGA= Name: res/drawable-hdpi-v4/ic_refresh_white_24dp.png SHA1-Digest: M/UZ7uCz9xZwERFtAq0Qj/eh38w= Name: res/drawable-mdpi-v4/ic_photo_library_white_24dp.png SHA1-Digest: E+IxUDHLaaCHl0VENbQA7TdPX0c= Name: res/drawable-xxhdpi-v4/ic_emoji_recents_normal_light.png SHA1-Digest: vqnDTAJRzaAKJdrODeHv5fee3nc= Name: res/drawable-mdpi-v4/ic_action_warning_red.png SHA1-Digest: imrAA59c4hj9zsWIT58CO7ERIJQ= Name: res/layout/conversation_item_sent_audio.xml SHA1-Digest: Kti5J9pFVRrQcrtt17na/DLsPo0= Name: res/drawable-xhdpi-v4/switch_thumb_activated_holo_light.9.png SHA1-Digest: 3Ss5k8ep2Mrg+rgvOa7GGRfjpF8= Name: res/drawable-mdpi-v4/ic_message_gray.png SHA1-Digest: hoiZW7MdOHC0Iby+Gd1rcKOLG0c= Name: res/drawable-mdpi-v4/ic_image_dark.png SHA1-Digest: G2gpXgHeSeHrZWnIAaxkcSiUu+Y= Name: res/color-v23/abc_color_highlight_material.xml SHA1-Digest: qY6zpcmSjeBP4i3CkOTY8zxtwB8= Name: res/drawable-xxhdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png SHA1-Digest: UscVpd7V3jMjLzVpfsG2IbdRqvY= Name: res/xml/preferences_advanced.xml SHA1-Digest: FC8tIXzwmm5OKrtgOX2dwn/qqnc= Name: res/drawable-ldrtl-hdpi-v4/ic_send_white_24dp.png SHA1-Digest: SWlD/H1XB3xcc5Y8usXOJnlLhwM= Name: res/drawable-xxhdpi-v4/ic_attach_grey600_24dp.png SHA1-Digest: huvdgLTmrMUD+DPHPMH/FBNmRFw= Name: res/layout-v17/conversation_list_item_view.xml SHA1-Digest: BJmBhKhNpJxHVSKViobHSvse4J4= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_995 SHA1-Digest: VQZUHqW605gJIqlz9jltq9FdR3o= Name: res/layout-v16/design_bottom_sheet_dialog.xml SHA1-Digest: 4e8NhkRAJcZiADs1jZKcnpw/Ucg= Name: res/drawable-v11/emoji_category_recent_light.xml SHA1-Digest: ey84TlREh39UDPRR+wfQ382pg2k= Name: res/drawable-xxhdpi-v4/ic_message_black.png SHA1-Digest: P4uJ9lf3VIwuGWrX4FNch+CFgjo= Name: res/drawable/notification_tile_bg.xml SHA1-Digest: 4xAQ7hEyW8eB4JxXX1UzIjFqcPY= Name: res/drawable-xxhdpi-v4/lockscreen_watermark_dark.png SHA1-Digest: yD27OTvbBk1jpS1o/+kZQko/Sug= Name: res/menu/conversation_secure_sms.xml SHA1-Digest: e4pbyINrig3CE7vbpn9e8WbN5gA= Name: res/drawable-xxhdpi-v4/abc_list_selector_disabled_holo_light.9.p ng SHA1-Digest: 4maqTaWq3BEXw6ShM7wJMon1kU8= Name: res/drawable-hdpi-v4/switch_thumb_holo_light_v2.9.png SHA1-Digest: dUoJcdYHBaB65zOYYoaEwJLGORI= Name: res/layout-v17/import_export_fragment.xml SHA1-Digest: VJ5WSeX+8T1nXMoe6GeyuVJEBaY= Name: res/layout/time_zone_item.xml SHA1-Digest: 6vPto9xswZvuZa3tTuCf0lqdRnA= Name: res/layout-v17/abc_alert_dialog_title_material.xml SHA1-Digest: NKD1P7TOYluzzXBm47dQperSbo8= Name: res/drawable-xhdpi-v4/textfield_default_holo_light.9.png SHA1-Digest: tlklNYajvvNexKXzCLXina5RJ4w= Name: res/anim/design_bottom_sheet_slide_in.xml SHA1-Digest: H3e/zshhR8lSEOvNJ1F7meqRXT0= Name: res/drawable-mdpi-v4/import_database.png SHA1-Digest: 3haEEMPstl/DDC+BlD5TuI2h15w= Name: res/drawable-xhdpi-v4/ic_image_dark.png SHA1-Digest: 34kW/vCnV6Y0mDgbvz440s781Jg= Name: res/layout-v13/conversation_item_last_seen.xml SHA1-Digest: LKCgoKkL2vB1Xwn2MzNS2iilUxw= Name: res/drawable-xxhdpi-v4/ic_emoji_people_normal_light.png SHA1-Digest: 2rpfD+NY4xRIiknmrubWGmcND7M= Name: res/drawable/play_icon.xml SHA1-Digest: y0KZBhP64W+5E+b01cawPIx1Z3s= Name: res/animator/scale_with_alpha.xml SHA1-Digest: dkkt5ydwuaxd0Vix8/d+HhT1TAA= Name: res/drawable-mdpi-v4/abc_btn_check_to_on_mtrl_000.png SHA1-Digest: EJcEC6U7l1ByKjRFT4I+NP5SA+w= Name: res/drawable-hdpi-v4/ic_emoji_nature_activated_dark.png SHA1-Digest: ozyVwJeR5Vvc6N0nstBfvDxkt6U= Name: res/drawable-v11/abc_textfield_search_material.xml SHA1-Digest: khlWpwwJ/BpuCBb0uDcegE9Qi7A= Name: res/drawable-xxhdpi-v4/abc_switch_track_mtrl_alpha.9.png SHA1-Digest: 0/qHVKsPWinDgoCSCJ2tYnOQHDk= Name: res/drawable/done_background_color.xml SHA1-Digest: YhJEMqwhzaLqXsNhftrT8BJGpFc= Name: res/layout/conversation_item_update.xml SHA1-Digest: zTAp/M2/nwDDANB7UAsuq/K4eyU= Name: res/drawable-hdpi-v4/ic_clear_search_holo_light.png SHA1-Digest: bMAmi23A7C/2T81UWdUJrPAiGgA= Name: res/layout-v16/radial_time_header_label.xml SHA1-Digest: 5+8D6aI/+s8WRtg0oJVSv2oRQVQ= Name: res/drawable/emoji_category_emoticons_light.xml SHA1-Digest: MULA/KyofssSNnEJtJw9ja4MtBU= Name: res/anim/abc_slide_in_top.xml SHA1-Digest: ps83fDCN37hSi5vdARGgPEjdET8= Name: res/drawable-xhdpi-v4/ic_menu_search_holo_light.png SHA1-Digest: aJk1cIss5mXDeXsVR3MB/OZxxFQ= Name: res/drawable-xhdpi-v11/icon_notification.png SHA1-Digest: cLSQZK5yIZN+Q1i/Dvf7T142nBo= Name: res/drawable-xxhdpi-v4/ic_emoji_flags_activated_dark.png SHA1-Digest: DFPRNsIBHb5NdyahxEP22SzqQKQ= Name: res/drawable-xxhdpi-v4/ic_save_white_24dp.png SHA1-Digest: P7ESxivMW9iNSV3BsUYdz/w2D6s= Name: res/anim/animation_toggle_in.xml SHA1-Digest: dRaYBsOfLqP23qwFMXALeJ6iGYM= Name: res/drawable-xhdpi-v4/ic_emoji_objects_activated_dark.png SHA1-Digest: 8PK4PuyIjB/HTzBTXvk7nVFyDuQ= Name: res/drawable-v11/emoji_category_people_dark.xml SHA1-Digest: 95RO/j45d+Krtv4b3RQeH/mAE1U= Name: res/drawable/edit_text_holo_light.xml SHA1-Digest: C4sB8NwynUqgyunbb7TzvQIqVe8= Name: res/color/abc_tint_edittext.xml SHA1-Digest: NDf3mHgsT7bsGplB82V0W1fYqHE= Name: res/drawable-xxhdpi-v4/spinner_focused_holo_light.9.png SHA1-Digest: GoRgB1Li7RZqzAPwAgLgd0fqnmg= Name: res/drawable-mdpi-v4/ic_recurrence_bubble_outline_disabled.png SHA1-Digest: d61P7qoMGt67a4HhUdeQoBO3tFY= Name: res/drawable-xhdpi-v4/ic_check_white_24dp.png SHA1-Digest: 78JbZauasH21gF+Y0lsAHUlAZpg= Name: res/drawable-mdpi-v4/ic_emoji_flags_normal_light.png SHA1-Digest: Zz+YX+HHOmmtVOvPRXbJ2d4L+so= Name: res/xml-v12/badge_widget_provider.xml SHA1-Digest: 0lZ+wV/192wEtNjI4Kd4DNGr8aI= Name: res/drawable-xxhdpi-v4/quick_shutter_button.png SHA1-Digest: tM6vusyRri2ZxMKLxUn1jpr/h9k= Name: res/drawable-xhdpi-v4/spinner_default_holo_light.9.png SHA1-Digest: 8z6OMkzlDtz6BaebwU13NRMiwGc= Name: res/drawable-hdpi-v4/abc_ic_star_half_black_36dp.png SHA1-Digest: WYHzqaIFGhxi7pUghVL542WmTfs= Name: res/animator-v11/bottom_pause_to_play_animation.xml SHA1-Digest: KNPF3kfWr3xJ+UqIibDLQRBRPvE= Name: res/drawable-xxhdpi-v4/ic_content_copy_dark.png SHA1-Digest: 7+NUcLRqL1d+ls7fNAMW+Hps74M= Name: res/drawable-mdpi-v4/ic_arrow_forward_light.png SHA1-Digest: UU22Z20OF19oG73++TW4xNN+d6A= Name: res/layout/message_details_activity.xml SHA1-Digest: azLss1HqZc+OGoasvbh3/pmvfVU= Name: res/drawable/abc_ic_voice_search_api_material.xml SHA1-Digest: 5ugYXzpY74baRVq3UQ+hVyltOOw= Name: res/drawable-mdpi-v4/ic_create_white_24dp.png SHA1-Digest: EvglZuWn1kWrtP9Vu40ifhzH5eQ= Name: res/drawable-xhdpi-v4/ic_lock_black_18dp.png SHA1-Digest: BHfmCHr+L1mAJXAj3f/Pa35mojA= Name: res/drawable/key_background_dark.xml SHA1-Digest: 4dA80hRKa9MiaTulvKa2adsaUAs= Name: res/layout/design_text_input_password_icon.xml SHA1-Digest: jR+6eNBNR1vmNPQjDZjNzwnH7iU= Name: res/color-v23/abc_tint_default.xml SHA1-Digest: rc6jB/Oj1KFzKdG2xnI7wiNPkwI= Name: res/drawable/abc_btn_colored_material.xml SHA1-Digest: 5in2GRrYzWn1M5K8rINJqJPTOtg= Name: res/drawable-xhdpi-v4/ic_keyboard_white_24dp.png SHA1-Digest: 6rPDrkokO6ExvMFZkZ6dUVRihkk= Name: res/drawable-xhdpi-v4/ic_reply.png SHA1-Digest: EqxlL9HBYa08+CVzrwfmhkUaWUI= Name: res/drawable-mdpi-v4/ic_reply_white_36dp.png SHA1-Digest: WWRxqg1IHF+2cbj/RQ2Sl6lOvh4= Name: res/drawable-xxxhdpi-v4/ic_photo_camera_light.png SHA1-Digest: Dwiib5e97pV5agTjyPTNjyki93o= Name: res/drawable-xhdpi-v4/abc_ic_star_black_48dp.png SHA1-Digest: FtlphNkBunKHFyn4YCJf+uB9r5Y= Name: res/drawable-mdpi-v4/ic_movie_creation_light.png SHA1-Digest: eOHkrzkeRo6ziDmk1BAVpLSgwMo= Name: res/layout/hms_picker_dialog.xml SHA1-Digest: tAWByK5zJb4G91bvhGLA5uOPOs8= Name: res/drawable-xhdpi-v4/check.png SHA1-Digest: trr1Y1AvaQ40pvN9HENeXxTaUnc= Name: res/drawable-hdpi-v4/abc_cab_background_top_mtrl_alpha.9.png SHA1-Digest: bKDAz/GvMsK2qKIXXjfzdAwCtG4= Name: res/drawable-hdpi-v4/abc_ic_star_half_black_48dp.png SHA1-Digest: ITuAj9GLxIU8m+qyHDgR794ap3w= Name: res/drawable-mdpi-v4/ic_keyboard_grey600_24dp.png SHA1-Digest: zdlURX5i7BYZIXKORABBap/3RMA= Name: res/layout/keyboard.xml SHA1-Digest: TVzGEgiaoAB2JVPuFjgDcgIAbao= Name: res/drawable/key_background_light.xml SHA1-Digest: ioA3FeBjrk2CUgaieHM8D4jJXKQ= Name: res/drawable-hdpi-v4/check.png SHA1-Digest: b+8u2c2RSD3vaZMSx7nKC/DkXdw= Name: res/layout/message_details_header.xml SHA1-Digest: JW9IPIijzH9fD5fsgqGPA+UnVi0= Name: res/drawable/reminder_background.xml SHA1-Digest: U1dUNAaqsEAw8QxlFPBiuLa2ERU= Name: res/drawable-xxhdpi-v4/last_seen_background.9.png SHA1-Digest: o+wL4yJDNpiNHf5ZhMPaWIKOIEw= Name: res/drawable-xxhdpi-v4/abc_ic_star_black_48dp.png SHA1-Digest: 50lQ01X/2aI5rh53asY/AX4Fkhw= Name: res/drawable-xhdpi-v4/list_longpressed_holo_light.9.png SHA1-Digest: wjffxg4gtxSXtviI33Wu5A+pD0U= Name: res/drawable-hdpi-v4/ic_warning_light.png SHA1-Digest: QteIiirlmwEHFWKiSwLdtXWoTIA= Name: res/color-v23/abc_btn_colored_text_material.xml SHA1-Digest: QfOopQVyGBK5764AtyzCeSxgY30= Name: res/drawable-mdpi-v4/alert.png SHA1-Digest: y6zmCiTCuYWhldLerBNyvH+ECDs= Name: res/drawable-hdpi-v4/ic_badge_24dp.png SHA1-Digest: ZdBBadrqXr7xPO+TKG+AOzCF5Pg= Name: res/drawable/badge_drawable.xml SHA1-Digest: Xdl+2jhWvmt0+HuZDaWK9vBlmQ0= Name: res/drawable-xhdpi-v4/notification_bg_low_pressed.9.png SHA1-Digest: OOefFpggagskOSa29mfgruzOhPQ= Name: res/drawable-v21/avd_hide_password_3.xml SHA1-Digest: 7QAGh6qveXCv/E9W58DOloyvZkg= Name: res/drawable-xxhdpi-v4/ic_emoji_people_activated_light.png SHA1-Digest: 0KRXuSpv/e6708+wbgz9YCOY4k0= Name: res/layout-v11/notification_template_custom_big.xml SHA1-Digest: 1Qx442anRGyxW0wgyeJMt0vT/hk= Name: res/color-v23/abc_tint_switch_track.xml SHA1-Digest: HnhXpMCgkXuPJieDuAMwRhXU4II= Name: res/drawable-hdpi-v4/ic_play_circle_fill_white_48dp.png SHA1-Digest: qN3xIQ/mmkkkS+xAMiHrU4LIHC4= Name: res/layout-v16/selected_recipient_list_item.xml SHA1-Digest: AzEF8ESv6dxauh7AJe31k89QnVQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_506 SHA1-Digest: /BptlPYGlVrO6aOiRVQIw8Ezzhk= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_505 SHA1-Digest: GPF+v2ktP3tCtgbBVUwLwURztCE= Name: res/drawable-xxxhdpi-v4/abc_text_select_handle_left_mtrl_dark.pn g SHA1-Digest: 1Z/j1p/Oxn+dx4ArUNCWfP80d1M= Name: res/layout/selected_recipient_list_item.xml SHA1-Digest: ZwMoe3tueFRM1XJsSKuaiPw4MZI= Name: res/drawable-ldrtl-hdpi-v17/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: HFivDekYna/HGttXT/KmXBD3Fmk= Name: res/drawable-mdpi-v4/ic_video_dark.png SHA1-Digest: 0BQoC1g4XFBRM0TQ1l3SocRVjqQ= Name: res/layout/recycler_view_fast_scroller.xml SHA1-Digest: rrvwcHdb2KbpCtGjKolNk69QOOM= Name: res/drawable-xhdpi-v4/import_database.png SHA1-Digest: rDR3tnpd7erN4LOxG5WFjosNC4s= Name: res/drawable-xhdpi-v4/ic_archive_white_24dp.png SHA1-Digest: Gae7ytyNb0Xft8WyyIiqL1V9x38= Name: res/menu/group_create.xml SHA1-Digest: vMZZOchmeOZssDjuO6v+J7rzo0w= Name: res/drawable-xhdpi-v4/ic_emoji_places_activated_dark.png SHA1-Digest: a3uDG0MTGuXgvTnN6BUXwXZbLiY= Name: res/drawable-xhdpi-v4/ic_menu_remove_holo_light.png SHA1-Digest: BeNFT6m2uMhTvp5g9THjCC3H0o4= Name: res/layout/media_preview_activity.xml SHA1-Digest: k9t13Px9YTbsRvDBaV/rq2B9drw= Name: res/drawable-xxhdpi-v4/ic_emoji_recents_activated_light.png SHA1-Digest: 3XqZDNHd2rDv0WMBctcfIJcaQJ4= Name: res/color/abc_background_cache_hint_selector_material_light.xml SHA1-Digest: mnPrYggTiTtLeSJMGhhI7MazdiQ= Name: res/drawable-v11/emoji_category_objects_dark.xml SHA1-Digest: kP3MaxgIRF2Mf+XiNYIBvVsu8Yg= Name: assets/fonts/AndroidClockMono-Thin.ttf SHA1-Digest: zFQStQ34LrLFalq5xe3Uxd6yuVU= Name: res/anim/abc_shrink_fade_out_from_bottom.xml SHA1-Digest: bncgNmwtn5WUMmKg+YNicoakQlQ= Name: res/drawable/abc_seekbar_thumb_material.xml SHA1-Digest: 3gcgKKHkoQO20Qass3DY4tt02lc= Name: res/drawable-mdpi-v4/ic_audio_light.png SHA1-Digest: 5hLRbrHX51BWfRUHMdSUaHUM8dc= Name: res/drawable-sw600dp-mdpi-v13/ic_backspace_disabled_dark.png SHA1-Digest: so4LY3SJgjbol1mOpd4tofs9SG4= Name: res/drawable-xxhdpi-v4/ic_emoji_recents_activated_dark.png SHA1-Digest: S3D4QA/vjbvCM0ipLSV32x8pZMA= Name: res/drawable-xxhdpi-v4/ic_volume_off_grey600_18dp.png SHA1-Digest: xyShsMFVKL/taZguHjNYVafhUCA= Name: res/xml/preferences_manual_mms.xml SHA1-Digest: bihOojDIOySM3xIwH4cmp7iQwFI= Name: res/drawable-xxhdpi-v4/abc_list_pressed_holo_light.9.png SHA1-Digest: rDoVKQUYnqgVz5KStlGT59UHjW4= Name: res/drawable-xhdpi-v4/ic_delete_white_24dp.png SHA1-Digest: J8LvNs0MhIh3BoduSNyTYjx8LQk= Name: res/drawable/abc_cab_background_top_material.xml SHA1-Digest: Z+2EBs+zMxbPCCEkmiGm2pj627E= Name: res/drawable-xxxhdpi-v4/abc_btn_check_to_on_mtrl_015.png SHA1-Digest: Sd1OkxgWYvHeM4ODIZu3S1hWhJQ= Name: res/drawable-mdpi-v4/ic_attach_white_24dp.png SHA1-Digest: p9K8MPl4UVAiHO4BW2iW0u1lrJg= Name: res/drawable-xhdpi-v4/dialog_full_holo_dark.9.png SHA1-Digest: mgx4FmtAVykjmDt5bIzhpACjqt4= Name: res/drawable-hdpi-v4/ic_lock_white_24dp.png SHA1-Digest: cLkNiQWRwlh8UgGblzdxBspbVB4= Name: res/drawable-hdpi-v4/ic_volume_up_dark.png SHA1-Digest: j5+kaaW+uEa9OqNuM3XL+k6grLI= Name: res/drawable-xhdpi-v4/ic_message_gray.png SHA1-Digest: HlcSvHzI8JnPB5h4DUjQmwj+leQ= Name: res/layout/outgoing_sms_preference.xml SHA1-Digest: 3nd7EfpO4R6Dk74R9VjfestQ3RM= Name: res/layout/number_picker_view.xml SHA1-Digest: 3tuhjqFbmNtKOSuEhNpijVWCoz8= Name: res/drawable-xhdpi-v4/ic_lock_light.png SHA1-Digest: jkurql42fRwoUwJ9dQ4E1U1sqvc= Name: res/layout-v17/design_layout_snackbar_include.xml SHA1-Digest: J7eBMH/8NR1GSJHI2w1sf/rcKjo= Name: res/drawable-xxhdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png SHA1-Digest: Jrc7Wnxi6R1ydjCdOBfCkiBqY5s= Name: res/color/switch_thumb_material_dark.xml SHA1-Digest: bpqZBZv76bgn7Mk1BtTThkcOx+E= Name: res/drawable-xxhdpi-v4/ic_visibility_off_white_24dp.png SHA1-Digest: +JlWwxq/HVPvQ6/dnBTL+tKVXO4= Name: res/drawable-mdpi-v4/ic_push_registration_reminder.png SHA1-Digest: Uisn5CHa/R/wnrVYWnBDuxeMjao= Name: res/drawable-mdpi-v4/dialog_full_holo_light.9.png SHA1-Digest: DeKy7GsN0S4R0sogsQeaHfjUcTA= Name: res/layout-sw600dp-v13/design_layout_snackbar.xml SHA1-Digest: pg2FV1KIEizDuQjBXGl2wPbkQA8= Name: res/drawable/actionbar_icon.xml SHA1-Digest: Zolvi6pYeS++UJxxiH9TjkqRRJs= Name: res/drawable-mdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.pn g SHA1-Digest: hZVZo6Q2zbo8jok1iFFNncAE3yQ= Name: res/layout/abc_list_menu_item_layout.xml SHA1-Digest: sojzCe+xZ74CQbQlqlg6DAKLMkw= Name: res/drawable-mdpi-v4/ic_movie_creation_dark.png SHA1-Digest: pqnNLm2HbqECEQqV/CWKQELBIlY= Name: res/drawable-v21/abc_edit_text_material.xml SHA1-Digest: odhxqQ9YoX/pjZCSMFLixnq44m0= Name: res/drawable-mdpi-v9/icon_notification.png SHA1-Digest: gdz7Utm6zHfttFBV1/waHt+y/pg= Name: res/drawable-xxhdpi-v4/ic_refresh_white_24dp.png SHA1-Digest: azW0GPmTz46IuM2bCfyFef1OFnc= Name: res/drawable/progress_background.xml SHA1-Digest: vOhG7l3qzc7lUlqnjnghMamRR1I= Name: res/drawable-xxhdpi-v4/list_pressed_holo_light.9.png SHA1-Digest: 7Gks0mPw3HB/OmNgzPxInAEdGvw= Name: res/drawable-xhdpi-v4/abc_textfield_search_activated_mtrl_alpha. 9.png SHA1-Digest: XhJt+0uemfensB5jPL5pYEy1IQs= Name: res/drawable-mdpi-v4/textfield_disabled_focused_holo_light.9.png SHA1-Digest: zyu+XV9QUyEyfMxKPq2khDJwXU0= Name: res/drawable-xhdpi-v4/abc_cab_background_top_mtrl_alpha.9.png SHA1-Digest: j7oKd56yOLmG/qIDUU3a+2EFFV4= Name: res/anim/abc_slide_out_bottom.xml SHA1-Digest: QE0YUwjYdedmgPyovw3+5mmYlYE= Name: res/xml/preferences.xml SHA1-Digest: aT1SF6JAwkWWHutmFsRg+R6Zcbs= Name: res/drawable-mdpi-v4/spinner_disabled_holo_light.9.png SHA1-Digest: yVf+7rXpW8kOGpk0VoFsOF3qLus= Name: res/drawable/emoji_category_places_light.xml SHA1-Digest: jHPgby+3qY7Ujw9pfRzvrx1CdPc= Name: res/menu/conversation_group_options.xml SHA1-Digest: c29cQhgl/UN7yvyz4kPHAQRr2a8= Name: res/drawable-xxxhdpi-v4/abc_text_select_handle_right_mtrl_dark.p ng SHA1-Digest: bgS7Y9u7G+otDRLOCvvqXphgw98= Name: res/drawable-xhdpi-v4/ic_emoji_nature_normal_dark.png SHA1-Digest: W3vwBQWHXo5i1OZUZm/hX1lplJA= Name: res/drawable-ldrtl-xhdpi-v17/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: 7EcOfBvuzL3CgvHqFSF/PzLjcQc= Name: res/drawable-xhdpi-v4/design_ic_visibility_off.png SHA1-Digest: BMTOD/vDIsCXobMddP47f9l0tkg= Name: res/menu/share.xml SHA1-Digest: xmMhiGZ5tC6kAUMIbJn3lqEShjI= Name: res/drawable-mdpi-v4/spinner_focused_holo_light.9.png SHA1-Digest: PkIQHK1gQev4CH5s1HE8eer4Q7A= Name: res/drawable-mdpi-v4/ic_unarchive_white_24dp.png SHA1-Digest: nEUZoefnyShaKejwZEZia9gphjw= Name: res/drawable-xhdpi-v4/ic_send_white_24dp.png SHA1-Digest: 1wW51ZVvnOTyWSWVFXLLo6dltK4= Name: res/drawable-mdpi-v4/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: oQXUTVCmKbEkuIGzA7hY1v2BYpE= Name: res/drawable-hdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png SHA1-Digest: zfh5PyI9Lqjbn44yzO7hvkJSsfk= Name: res/animator/rotate_90_animation.xml SHA1-Digest: uK/YW8CFLkvobgn+SDKh5dvJKnc= Name: res/drawable-xxhdpi-v4/ic_forward_white_24dp.png SHA1-Digest: xp/9QSw9ASrlEivYBbN9fcMKCOM= Name: res/drawable-xxhdpi-v4/ic_notifications_black.png SHA1-Digest: dF5+n+zqtdP+ka7/LdSAxnDtmgg= Name: res/layout/message_recipient_list_item.xml SHA1-Digest: cO6Ul1S0F6vmX1DhiUJkAPKYw38= Name: res/drawable/abc_spinner_textfield_background_material.xml SHA1-Digest: VxVhP39ECkMfDcnEy/uhMtmv8LA= Name: res/drawable-mdpi-v4/ic_pause_circle_fill_white_48dp.png SHA1-Digest: EeIiwplPXadZAoahDjmjyd0kmjI= Name: res/layout/single_recipient_panel.xml SHA1-Digest: zsFe0OdCFRTk7jPnGiyHaoumgv8= Name: res/drawable-mdpi-v4/abc_ic_star_black_48dp.png SHA1-Digest: FaUwj2ktP/Mx8BZm5lDgykR/aVk= Name: res/layout/select_dialog_multichoice_material.xml SHA1-Digest: 46ryfXlYBGkcboB0y0GjlBuMusI= Name: res/drawable-xxhdpi-v4/ic_warning_light.png SHA1-Digest: GNPOCgZ4syQiiVSBBzHn18YuiU0= Name: META-INF/buildserverid SHA1-Digest: xhNZchncMZQXytaTDWWDf2VsOkI= Name: res/layout-v11/notification_template_big_media.xml SHA1-Digest: oo4THErHbQ8SdBiHW/8EHh9Ys+Y= Name: res/drawable-mdpi-v4/abc_btn_radio_to_on_mtrl_015.png SHA1-Digest: Es6oBCiowN0wRwOhe4WNu1jjzYI= Name: res/drawable-mdpi-v4/ic_forward_white_24dp.png SHA1-Digest: Fu+RxWE5w8GdxSU1DCKwPIEG1y8= Name: res/drawable/conversation_item_background.xml SHA1-Digest: h6SLLN+ps25Trx7l30cz6Mioc7c= Name: res/drawable-mdpi-v4/abc_textfield_search_activated_mtrl_alpha.9 .png SHA1-Digest: 8MDSDpYFD8fxl8tEamhg6/oSBig= Name: res/color/abc_background_cache_hint_selector_material_dark.xml SHA1-Digest: EkWMqlaBHrpcPaV0xhKAKJtZbBU= Name: res/drawable-hdpi-v4/ic_delete_white_24dp.png SHA1-Digest: J+w109mQxWhOYjM+qp1D7EpZq3M= Name: res/anim-v21/design_bottom_sheet_slide_out.xml SHA1-Digest: p2/uhdWZ4yTGAbU/lBqEQJKJUt4= Name: res/layout-w270dp-h560dp-v13/calendar_date_picker_dialog.xml SHA1-Digest: W74q95Q7a5HSbwCxj2nfLP+L77E= Name: res/layout-sw600dp-land-v13/calendar_date_picker_dialog.xml SHA1-Digest: GOPa/Ci6BmPcCb9LOPRYtRAp1U0= Name: res/layout/design_navigation_item.xml SHA1-Digest: Z2LAX4Z45Q9c5ScpVvdhIl296zY= Name: res/drawable-xhdpi-v4/ic_contact_picture.png SHA1-Digest: 07gvt3zBJHPCeYeZlmnq8pkjvXY= Name: res/drawable-xhdpi-v4/ic_push_gray.png SHA1-Digest: pOCxg+EJqcno1tAdL3omHl5TAMY= Name: res/drawable-hdpi-v4/ic_emoji_flags_activated_light.png SHA1-Digest: NmtVPrNT07HF8JkEdWy/S3QHA5k= Name: res/layout/notification_action_tombstone.xml SHA1-Digest: XQeaU7Egiq2DtYHNjs0SMCrT8/Y= Name: res/drawable-hdpi-v4/abc_textfield_activated_mtrl_alpha.9.png SHA1-Digest: PIZprngie1clc1fat6kH+iHy6P4= Name: res/drawable-xhdpi-v4/ic_group_photo.png SHA1-Digest: WnjST0J5e2XQOJAD8kdAiO08P1k= Name: res/drawable-xxhdpi-v4/fab_shadow.png SHA1-Digest: x9M/KJyVED6D5/Cg3TpamvVVc0c= Name: res/drawable-xhdpi-v4/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: noUbrA0YTfnyTN3qU6nIC6HIi2Y= Name: res/drawable-xhdpi-v4/ic_visibility_off_white_24dp.png SHA1-Digest: reD5BI2mdKU65i+N+wFDVbkYi1k= Name: res/drawable-xxhdpi-v4/abc_list_selector_disabled_holo_dark.9.pn g SHA1-Digest: e8DEB+kwT5rrQOaL1UepmHHnW0M= Name: res/drawable-hdpi-v4/ic_archive_white_24dp.png SHA1-Digest: eeCQonDlHipVzbJ6m65VayQq7G4= Name: res/drawable-xhdpi-v4/ic_backspace_disabled_light.png SHA1-Digest: FvX9DtFBzEZNWx3ub/2oTnBJSzE= Name: res/layout/select_dialog_item_material.xml SHA1-Digest: GUNv1jzQMrsB/0NDNXTw8VXAN7c= Name: res/layout/view_identity_activity.xml SHA1-Digest: ZxYsEzUbqWB1fd31cKcAig8JDhs= Name: res/layout/design_navigation_item_subheader.xml SHA1-Digest: xcHXe/zAAc7FC3sqIMA7/TiN+RE= Name: res/layout-v21/notification_action_tombstone.xml SHA1-Digest: aV/gWa/js2N+8wB6XvVkSGnNUSw= Name: res/layout/share_intent_list.xml SHA1-Digest: /OHFqV8MJVHfwnbde21PTpxrK2o= Name: res/drawable-mdpi-v4/fab_shadow_mini.png SHA1-Digest: m9/szLEMoxYSEP7udguD4fDjL1c= Name: res/drawable-hdpi-v4/icon.png SHA1-Digest: YzSLNbDXnqM/2zu4zYoA+QIsVzM= Name: res/drawable-hdpi-v4/switch_thumb_pressed_holo_light.9.png SHA1-Digest: 85bARtoMmHSPqKgl57lX2txB7Sg= Name: res/drawable-xxxhdpi-v4/ic_archive_white_36dp.png SHA1-Digest: ka4rxVO7H4WEPB3680GcHOZSYWU= Name: res/drawable-xxhdpi-v4/ic_emoji_places_normal_dark.png SHA1-Digest: D+xbr+08WYh4PZpSnQN4FXZleUI= Name: res/drawable-xxxhdpi-v4/ic_save_all_white_24dp.png SHA1-Digest: VldTJ9341lkKln91ap5+0NkeH0g= Name: res/drawable-xxhdpi-v4/ic_delete_gray.png SHA1-Digest: SDeqOr2a1ZZDjr4coXlkzAbayc4= Name: res/drawable-xhdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png SHA1-Digest: bTNFsVJfPn6MYG0AqtJNqG+o5hs= Name: res/drawable-hdpi-v4/ic_emoji_emoticons_activated_light.png SHA1-Digest: GuuTGR/EH4/yVL2IFPt3b32WxkA= Name: res/drawable-mdpi-v4/abc_textfield_search_default_mtrl_alpha.9.p ng SHA1-Digest: IKTGIARYbmam8Kefq6089z/0k98= Name: res/drawable-xxhdpi-v4/ic_textsms_black_32dp.png SHA1-Digest: dY2WYdqBdIVm2MnbgiHBzPTZUjw= Name: res/drawable-hdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: 65aQz5QMXj+UAVHCsbn073ly7KA= Name: res/layout/group_create_activity.xml SHA1-Digest: k4AP0tqSuRSD7P+1g/dRlhTYZ1A= Name: res/drawable/emoji_category_symbol_dark.xml SHA1-Digest: dzEqAStAWicUXbOWCC/SIc3ASCM= Name: res/drawable-xxhdpi-v4/ic_volume_off_white_18dp.png SHA1-Digest: OkFrZtMHjtYzIxy94ZW7uTW0seQ= Name: res/drawable-hdpi-v4/ic_delete_gray.png SHA1-Digest: GK23DhSbaqklFDToW0tkfpKqW5s= Name: org/spongycastle/x509/CertPathReviewerMessages.properties SHA1-Digest: J41SvstF2si4wHzfzilAP7QU0lQ= Name: res/drawable-mdpi-v4/ic_emoji_people_activated_light.png SHA1-Digest: f/TH7ItlEg/niyKj2GAr0sLV064= Name: res/drawable-xhdpi-v4/actionbar_icon_holo_dark.png SHA1-Digest: TZatVkrjHmlxY7IlBlujhU5BAlY= Name: res/drawable-xhdpi-v4/abc_btn_check_to_on_mtrl_000.png SHA1-Digest: bazEYewUnilv0P6pckaiMrtQjTA= Name: res/drawable-xhdpi-v4/ic_visibility_off_grey600_24dp.png SHA1-Digest: 3bgJfHp4RhHGV2kMtin4ebCYM/o= Name: res/drawable/abc_ic_ab_back_material.xml SHA1-Digest: t28C57S8eCJuIjC2my++spL9/m0= Name: res/layout/design_navigation_menu_item.xml SHA1-Digest: nQaPVu6/W8ZpMDF8QEt9cSW0r3c= Name: res/drawable-v21/touch_highlight_background.xml SHA1-Digest: LXWsYtf9CleMEE9F2d2jKTU65FA= Name: res/drawable-xxhdpi-v4/abc_text_select_handle_middle_mtrl_light. png SHA1-Digest: YwrO8vgjHUmvObRSq+AnITPZC2E= Name: res/drawable-mdpi-v4/abc_list_divider_mtrl_alpha.9.png SHA1-Digest: gLcFerBxZUHHCrWZLH3iEvl0WT0= Name: res/drawable-mdpi-v4/ic_reply.png SHA1-Digest: 9lPFP5ez5joY2ong87wLU1XP1NQ= Name: res/drawable-xhdpi-v4/ic_emoji_objects_normal_light.png SHA1-Digest: vFhjx3BEAMCrDnw4ySDUpntYmUE= Name: res/layout-v17/notification_template_media_custom.xml SHA1-Digest: gzUkzEoypfAgJr6T3G4Icb7DIJg= Name: res/drawable-xhdpi-v4/ic_emoji_people_activated_dark.png SHA1-Digest: c/MMC1XZ+gxe5QwxIZ+gcaZ//1M= Name: res/animator/bottom_play_to_pause_animation.xml SHA1-Digest: noAqkjThR2pnIhrGEXxZ9yulSK8= Name: res/drawable-xhdpi-v4/ic_emoji_places_activated_light.png SHA1-Digest: xPpIhlJVBKYVrfdXQgmh5VeRY3c= Name: res/layout/switch_compat_preference.xml SHA1-Digest: SCvYTOQBF2ZhtbA8eqD7WWHhPMQ= Name: res/drawable-hdpi-v4/abc_list_divider_mtrl_alpha.9.png SHA1-Digest: BY8cHWBjISmMI2i+RFH96y5MQfc= Name: res/drawable-mdpi-v4/ic_menu_barcode.png SHA1-Digest: WRiRsH9ERDjUXiQi3mLSuzR1G+Y= Name: res/drawable-xxhdpi-v4/ic_push_gray.png SHA1-Digest: EKAW04fIdkE5eZtqX2agFEei4nI= Name: assets/backward SHA1-Digest: hgif/oUAa/79gSRPr7FCRJRVfvk= Name: res/drawable-xhdpi-v4/ic_audio_light.png SHA1-Digest: pzLZ/JTZjtDf/M2zEMIL9SuNrns= Name: res/drawable-xhdpi-v4/ic_emoji_recents_normal_light.png SHA1-Digest: SJMYsCgc/8fCuja29M3R6NbsVFA= Name: res/layout/load_more_header.xml SHA1-Digest: hPvXpdQKy7YDux7jOh1HBtNOyFw= Name: res/drawable-xhdpi-v4/ic_missing_thumbnail_picture.png SHA1-Digest: 69jYTqmN2tp4O9u6ohWhADlvUsQ= Name: res/layout/abc_action_menu_item_layout.xml SHA1-Digest: WBRWjBB6NmqhNMmPgLKikjYT+as= Name: res/drawable/conversation_list_item_unread_background_dark.xml SHA1-Digest: svRyOBu2+whEW37LlkqNjyQKg9E= Name: res/drawable-mdpi-v4/switch_bg_focused_holo_light.9.png SHA1-Digest: VaARP+7lQEpru1o/MCLqYUFQzRo= Name: res/color/done_text_color.xml SHA1-Digest: vLb4XWbtbiVRId+NRHZPOBIzsfg= Name: res/drawable-mdpi-v4/ic_advanced_black.png SHA1-Digest: wr7WCN0fcSAi5JW5m8myf55Rveg= Name: res/drawable-hdpi-v4/abc_list_longpressed_holo.9.png SHA1-Digest: xcQ0bHWRc+R9tuxQ3wgY1a2eY0k= Name: res/layout/splash_screen_activity.xml SHA1-Digest: eJryvlJWhqRzVH04OAQTL3dHvJE= Name: res/drawable-mdpi-v4/ic_app_protection_gray.png SHA1-Digest: q1NxUnsB8IEjVdrzkFlbjOkvVXA= Name: res/drawable-xxhdpi-v4/sms_selection_icon.png SHA1-Digest: nMUgtPxv8ssxVwF/6dKCmqiMWAo= Name: res/drawable-hdpi-v4/sent_bubble.9.png SHA1-Digest: FdfowFhHZNhFmrm59JSxASd+t3E= Name: res/drawable-mdpi-v4/ic_visibility_off_grey600_24dp.png SHA1-Digest: jtzcfEAVv3vxG3LfkfzexCfO5M0= Name: res/drawable-mdpi-v4/icon_dialog.png SHA1-Digest: sN1A7orUCP1wS6ay7YTobIJO7sE= Name: res/drawable-xhdpi-v4/list_pressed_holo_light.9.png SHA1-Digest: o6uQudI4iPo5plFaQ6Lklwf2dTY= Name: res/drawable-xhdpi-v4/ic_unarchive_white_24dp.png SHA1-Digest: z3y5F8v+7qRcfmyV/3sy7TiJ+1M= Name: res/layout/timezonepickerview.xml SHA1-Digest: PoG/lSYx+ggur9vjpGIzlSwFFiQ= Name: res/drawable-xhdpi-v4/ic_check_light_disabled.png SHA1-Digest: cywK3BhZXLadkndqRLvlZ5YWrRc= Name: res/drawable-xhdpi-v4/textfield_focused_holo_light.9.png SHA1-Digest: GTkseIIJxb2K4BmEEabgcA60SSU= Name: res/layout/color_preference_item.xml SHA1-Digest: 8pDpvvYOnDd3vfLlQ+Q9WfMGf/M= Name: res/layout/transport_selection_list_item.xml SHA1-Digest: XNz03gqniZYh5CPr9sFy3CTqunc= Name: res/drawable-hdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png SHA1-Digest: o6T1nENnpl79GnrVrE8AKfzN0kU= Name: res/drawable-mdpi-v4/actionbar_icon_holo_dark.png SHA1-Digest: /cj9MZ2+estI4chV3tWfVOlf1jE= Name: res/drawable-xhdpi-v4/ic_menu_barcode.png SHA1-Digest: wTyjejvUpn89HCtyeYcelozizeU= Name: res/drawable/import_export_item_background_light.xml SHA1-Digest: LebjrX09YTvkPFojCNp9TxoTHdw= Name: res/drawable/emoji_category_flags_light.xml SHA1-Digest: 2cusWJDjvxQv4dc6oJNAKVfKSs4= Name: res/drawable-xxhdpi-v4/ic_app_protection_black.png SHA1-Digest: 40GtO8uqUrQds7WklErRCNNcr9U= Name: res/layout/abc_alert_dialog_material.xml SHA1-Digest: ZUWbXMo/VjOtdZ/T3ZdDS1bn+7w= Name: res/color/dialog_text_color_holo_dark.xml SHA1-Digest: 4Q/QsARcQeky254Q4d695fPiL8k= Name: res/drawable-hdpi-v4/ic_visibility_grey600_24dp.png SHA1-Digest: y8hXlqbSpjn5i0MMpjrExISMEsQ= Name: res/layout-sw600dp-v13/three_keys_view_leftright.xml SHA1-Digest: MUBcRcFXaDRAK8Q8DZH7MO67ECc= Name: res/anim/abc_popup_enter.xml SHA1-Digest: mW6OQN3tih7Y8FA4hLg0FHa+E8g= Name: res/layout/blocked_contacts_fragment.xml SHA1-Digest: 30DM/Wpgi4Ma6C9rrA0uhEsKBUY= Name: res/drawable-mdpi-v4/abc_tab_indicator_mtrl_alpha.9.png SHA1-Digest: ToVo2KPSLrpwpzwqt2DA6d7KLWk= Name: res/drawable-hdpi-v4/abc_ic_star_half_black_16dp.png SHA1-Digest: QHQgoF3m7FlwHEI02KkUv35XO4k= Name: res/drawable-xxhdpi-v4/splash_open_padlock.png SHA1-Digest: 9X6kQxtwOAjhykjRzH1PrBSB/nQ= Name: res/drawable-xxhdpi-v4/design_ic_visibility.png SHA1-Digest: 1hq21CJLEjOqRp4hk2eb1egstEo= Name: assets/zone.tab SHA1-Digest: DB2JMeHIQyU6vbJXRUlLcMwvciM= Name: res/drawable-hdpi-v4/notify_panel_notification_icon_bg.png SHA1-Digest: +WaWq164+JEgAS3SD7a6bgQZgMc= Name: res/layout-v16/conversation_list_item_view.xml SHA1-Digest: OyJ30/ayut9fWwKSipo+q31JMk8= Name: res/layout/notification_template_custom_big.xml SHA1-Digest: lXs5xrTOn4+b7s8FYWdvQVtlJEQ= Name: res/layout-sw600dp-v13/calendar_date_picker_dialog.xml SHA1-Digest: 7A3C6mu/nfuE/ZOx3v+PHDrH5uE= Name: res/drawable-v11/emoji_category_nature_dark.xml SHA1-Digest: tzM7XM6jXz5ibx/c5oh3hYXuTjY= Name: res/drawable-mdpi-v4/notification_bg_normal.9.png SHA1-Digest: Q3acMTlGj6UQhONPvMrXTfJYYHU= Name: res/layout/centered_app_title.xml SHA1-Digest: c0q2NKq9aTKPwK1WRla9BgWTNWE= Name: res/drawable-xxhdpi-v4/abc_scrubber_track_mtrl_alpha.9.png SHA1-Digest: boG5dcozMnSrJdbSbLX0TBOMATU= Name: res/drawable-hdpi-v4/ic_info_outline_light.png SHA1-Digest: 3U33QULK0J7RuE3cBwPGjUbRVBg= Name: res/drawable-mdpi-v4/ic_block_white_18dp.png SHA1-Digest: vCQBWKrCBsUXUIzg00jbJKpYDVU= Name: res/drawable-xxhdpi-v4/ic_info_outline_grey600_24dp.png SHA1-Digest: MaI496aqVWHrODDpXxhJa19mm3s= Name: res/drawable-hdpi-v4/ic_recurrence_bubble_fill.png SHA1-Digest: N0RlHgCdtk7/v3uisCq9UFt1zKQ= Name: res/color/abc_primary_text_disable_only_material_dark.xml SHA1-Digest: PMhnRzfrwY1jlNfoIvzhOutdgIg= Name: res/drawable/info_round.xml SHA1-Digest: EQHFy9KXlVRBd3MTQYLkJoHhHec= Name: res/drawable-v21/avd_hide_password.xml SHA1-Digest: tCMN1pa7/72S99g/osWbGg8uwMY= Name: res/drawable-hdpi-v4/ic_launch_white_24dp.png SHA1-Digest: BDelJhu97+vnx9fccEH+FD6CdUw= Name: res/drawable-mdpi-v4/ic_unarchive_white_36dp.png SHA1-Digest: anNidWfeepDjyPgAIZKa8Ks9mn0= Name: res/drawable-xxxhdpi-v4/fab_shadow.png SHA1-Digest: HyRQIsHzzBNID4cwXCdz7aHwQTo= Name: res/anim/slide_from_top.xml SHA1-Digest: dpPiD0hLamwYer/Zh9GESUYkkl8= Name: res/drawable-mdpi-v4/ic_warning_dark.png SHA1-Digest: mQDXjcj9f73wMhnSFRpT8LlqDK4= Name: res/drawable-hdpi-v4/ic_content_copy_light.png SHA1-Digest: Kc+x06w+bAcZdacvH0QEgCtLLvI= Name: res/drawable-hdpi-v4/received_bubble.9.png SHA1-Digest: I12yNJInw7EAeJ+dan826X5qFys= Name: res/layout/keyboard_right_drawable.xml SHA1-Digest: O8O7eJxdOH0gZkW5Q+ok6QTtgrk= Name: res/drawable-hdpi-v4/abc_list_pressed_holo_dark.9.png SHA1-Digest: 0zBo9Tp1wTO3RHYh5z1M+TUN+H8= Name: res/drawable-xhdpi-v4/ic_lock_white_24dp.png SHA1-Digest: 3xuHKI/HcZ+RqZMLXhn2A97T2FA= Name: res/drawable-xhdpi-v4/ic_reply_white_36dp.png SHA1-Digest: 8FtXNX+a3aLdkMF4Ye1lu5YGUi0= Name: res/color-v11/abc_tint_default.xml SHA1-Digest: 5QwBDkHEzTgTemwvQXm0FJqBCcI= Name: res/xml/preferences_sms_mms.xml SHA1-Digest: CNZE1mjiY2DPiaB0mWAXNrBBXSk= Name: res/drawable-xhdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png SHA1-Digest: r/h/FWdsW/T/8uq+xHKyl+iJKz0= Name: res/drawable-xxhdpi-v4/ic_emoji_emoticons_normal_light.png SHA1-Digest: UP3HNQi1TrWx5jfn6AKRiPu1SJo= Name: res/drawable-mdpi-v4/ic_emoji_places_normal_dark.png SHA1-Digest: W6IBMjE4M2iGTNNWmOe2vxsnXQs= Name: res/drawable-hdpi-v4/import_database.png SHA1-Digest: ycFAKEbBj2c3oO83GGoVCF2sVyo= Name: res/drawable-sw600dp-xhdpi-v13/ic_backspace_disabled_dark.png SHA1-Digest: MOsT5ebuo+XKKaakAt9/WeSeP1U= Name: res/drawable-xhdpi-v4/ic_emoji_objects_normal_dark.png SHA1-Digest: jGC2iFS0Wfg/WDmaseQgQaykEbE= Name: res/drawable-xhdpi-v4/ic_app_protection_gray.png SHA1-Digest: EOfgE1fjZaclo3c0va+a33QIxMM= Name: res/drawable-hdpi-v4/ic_action_warning_red.png SHA1-Digest: GFcZA1im1MVaPolBF19LyzD4ok0= Name: res/drawable-hdpi-v4/ic_info_outline_dark.png SHA1-Digest: aCTUUUUQ4+v7lkGanhwuQqp7mkA= Name: res/drawable-hdpi-v4/ic_account_box_light.png SHA1-Digest: GPGp+rEnVGmzHqCJEspudbAH/UU= Name: res/drawable-xxxhdpi-v11/icon_cached.png SHA1-Digest: uYGv++9QgJscjBiLG2dew5sowmE= Name: res/drawable-hdpi-v4/ic_notifications_black.png SHA1-Digest: Dog7/fcdUr3lbwLolw6ZDkZQIFw= Name: res/drawable-xxhdpi-v4/switch_thumb_disabled_holo_light.9.png SHA1-Digest: RvDI/d1z/we6bQc9ZS9oXdPJnPo= Name: res/drawable-mdpi-v4/fab_shadow.png SHA1-Digest: 45XV1wLqQqgJWEWEUK4mH+j+4kI= Name: res/drawable-hdpi-v4/alert.png SHA1-Digest: M4mo8M2sCrIJH+vZuoNCICj0CKA= Name: res/drawable-hdpi-v4/ic_emoji_places_normal_light.png SHA1-Digest: MgdPAKeTtnfyUo2ng3EoaRB223I= Name: res/drawable-hdpi-v4/ic_reply_white_36dp.png SHA1-Digest: VhtJFYVXZ+cs1YSh6gAB6UBMiqU= Name: res/drawable-xhdpi-v4/spinner_focused_holo_light.9.png SHA1-Digest: CGrl1FRXVxrvA14ueVH03Fn2em0= Name: res/drawable/conversation_list_item_read_background.xml SHA1-Digest: xo2V+lsQf/r0itDPFGirB+bS9IE= Name: res/drawable-xhdpi-v4/ic_create_white_24dp.png SHA1-Digest: XHYLWABpP3mGUN3uyqc8bQoo+aQ= Name: res/xml/preferences_appearance.xml SHA1-Digest: wW5nZrcFeOc1L2k8Q3tFzK44KJE= Name: res/drawable-xxhdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png SHA1-Digest: /SHIbNyt1+Fo97bGAhsp65znrc4= Name: res/anim/abc_slide_out_top.xml SHA1-Digest: NM9nWh/XI2zag3rBwIXEqrpl9XA= Name: res/drawable-mdpi-v4/spinner_default_holo_light.9.png SHA1-Digest: s/npsTa4f6dHCangZu461npuSrQ= Name: res/color-v23/abc_tint_switch_thumb.xml SHA1-Digest: edQ0GZeXV46rMhldev7VspmKHD4= Name: res/drawable-xxhdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png SHA1-Digest: am9o4CCMkLbqK7tqn2d7aY98YtM= Name: res/drawable/design_bottom_navigation_item_background.xml SHA1-Digest: q/tAvUCKzH/tN0gPUEzccAp698k= Name: res/color-v23/abc_tint_spinner.xml SHA1-Digest: g5nC+lgyeU60gIu/wJqF+3SdbSo= Name: res/layout-v11/notification_template_big_media_custom.xml SHA1-Digest: d8BqWJoZKRqdvlw9kvQm2Jtb2sg= Name: res/drawable-v21/conversation_list_item_read_background.xml SHA1-Digest: Kp+lqb42WaFm0e6LoTHrdtz5xkE= Name: res/drawable-mdpi-v4/ic_delete_black.png SHA1-Digest: mIOI+jdJeaXXrfU+pDakcPF4biQ= Name: res/layout/conversation_list_fragment.xml SHA1-Digest: gMh57swYNwbCfzhX8KeQTr2LNyM= Name: res/drawable-xhdpi-v4/ic_notifications_black.png SHA1-Digest: 5xxTLdG9MaRREbXunrtHf5KYHoY= Name: res/raw/whisper.store SHA1-Digest: XHW+g7lvAC9+4Celnl0Js28aCVo= Name: res/drawable-hdpi-v4/ic_emoji_recents_activated_dark.png SHA1-Digest: s+VUH60cHG3DQHn/KDRKcrw32Pc= Name: res/anim/fade_scale_out.xml SHA1-Digest: Uir4/KEtcVOVxHtCmwcmNzM0Nnc= Name: res/drawable-xxhdpi-v4/ic_video_light.png SHA1-Digest: cIp1SG7udNqwshEULUT0m2Zx4WE= Name: res/drawable-hdpi-v4/ic_reply.png SHA1-Digest: yW8DB5L+UjcqFxvPb5iuS/mfNH8= Name: res/drawable-xxhdpi-v4/abc_textfield_default_mtrl_alpha.9.png SHA1-Digest: sNds9Ym0phYx3ALXo+MZX8xlc30= Name: res/drawable-xhdpi-v4/ic_image_light.png SHA1-Digest: jRfUT1SOm0NWCHN8mTP06GkG3LE= Name: res/drawable/conversation_item_header_background_dark.xml SHA1-Digest: 3zJGQhq7efNb8O1pcgs6FzHcZtw= Name: res/drawable/emoji_category_recent_dark.xml SHA1-Digest: 3LNTUa6nHUMOLhf8Ghy3oolZzzg= Name: res/drawable-ldrtl-xhdpi-v17/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: P6e0iLoIQdVv5zYT47sluTSi/8U= Name: res/drawable-xxhdpi-v4/ic_emoji_symbols_normal_light.png SHA1-Digest: 5LwZJ27P0paPxRx7F4OyAndvSS0= Name: res/drawable-mdpi-v4/ic_forum_black_32dp.png SHA1-Digest: WPgUSq8gt52EyqrxEYbAT0DMhNk= Name: res/drawable-xxhdpi-v4/ic_lock_white_24dp.png SHA1-Digest: htLTvYWN+EgD7hulQ8vXHu5ROKY= Name: res/drawable-ldrtl-xxhdpi-v4/ic_send_white_24dp.png SHA1-Digest: ESPL9d41EpIb26lvmx+kRw7JfjE= Name: res/drawable-mdpi-v4/ic_textsms_black_32dp.png SHA1-Digest: aPyQLe1M5CIKEHMt880bCAo9BDU= Name: res/drawable-hdpi-v4/ic_contact_picture.png SHA1-Digest: J1/9vNqI7GpiHcC/MlfugImp7eU= Name: res/drawable-hdpi-v4/ic_push_registration_reminder.png SHA1-Digest: rqdC/GFKtQiSFjmW/fq1at8m6+s= Name: res/drawable-mdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png SHA1-Digest: iHSmoed/iXLMYG1Wapa0CvCYopQ= Name: res/drawable-xxhdpi-v4/spinner_pressed_holo_light.9.png SHA1-Digest: y35Cc9pdVLFODoXVqOPGVcSrZMs= Name: res/drawable/design_password_eye.xml SHA1-Digest: Ip+zp9WKcMYKDC/1FcIw9dGmhd0= Name: res/drawable-xxxhdpi-v4/ic_clear_white_24dp.png SHA1-Digest: aZFL0sBndjS4MOKenJmwnPQbYec= Name: res/menu/media_preview.xml SHA1-Digest: TUG4x5DmL3L7mQAfYiWNBIYy9P8= Name: res/drawable-mdpi-v4/switch_thumb_pressed_holo_light.9.png SHA1-Digest: VyxRoouO+Z7ITDC+bYAPridmWf4= Name: res/drawable-mdpi-v4/ic_emoji_emoticons_activated_light.png SHA1-Digest: VhIQ5RxVdV3k3W3X17qkKMlzqxE= Name: res/drawable-xxhdpi-v4/ic_scroll_down.png SHA1-Digest: 9Uzxtz02mh/U059QfstpbDG0+nM= Name: res/drawable-hdpi-v4/ic_group_white_24dp.png SHA1-Digest: uM/cr5yN0CYCGsC1huqKr8pKMBY= Name: res/drawable-hdpi-v4/abc_list_pressed_holo_light.9.png SHA1-Digest: +pi/Z1BDTC/eHcG86xxdoFAyukA= Name: res/layout-v21/message_details_header.xml SHA1-Digest: IwErlBffc82CUVeFFihw7lOCdc4= Name: res/drawable/abc_ratingbar_small_material.xml SHA1-Digest: /P2KXIWbMuyOgftOHbBQa8ym+uI= Name: res/drawable-xxhdpi-v4/abc_text_select_handle_right_mtrl_light.p ng SHA1-Digest: xmNf1ImJ9zRw/jShIY6T+TQEFiI= Name: res/drawable-mdpi-v4/abc_text_select_handle_middle_mtrl_light.pn g SHA1-Digest: rzBEG5E2MZ8ThruZL2oRv/S33oo= Name: res/drawable-xxhdpi-v11/icon_notification.png SHA1-Digest: dC3ZDCE4hgbvLcSF8i/dtyEG2DI= Name: res/drawable-mdpi-v4/ic_menu_remove_holo_light.png SHA1-Digest: BQFtfz+X7xkDAjh7SE2eENwuCXA= Name: res/layout/abc_activity_chooser_view_list_item.xml SHA1-Digest: a+iaKMdtxOa/B0g49Cz7dJwCQFk= Name: res/drawable-xxxhdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png SHA1-Digest: WWeCz1VpFVwQ378BwOFriTLP1x8= Name: res/drawable-xhdpi-v4/abc_textfield_search_default_mtrl_alpha.9. png SHA1-Digest: P2nXckVhoat9mgVUXkNB8jHu5sU= Name: res/color/text_color_dark_theme.xml SHA1-Digest: +r5qAEASxwVUq+72lZIJoOu6N+Y= Name: res/drawable-xhdpi-v4/ic_emoji_symbols_normal_light.png SHA1-Digest: xJRFg2lT8pCNLPi6NCbB7K2dtiY= Name: res/drawable-mdpi-v4/ic_badge_24dp.png SHA1-Digest: cJ3CJ+jyxtHeApCtlGzENIl0ugA= Name: res/drawable-xxhdpi-v4/ic_delete_black.png SHA1-Digest: U7JXpz2+U8hC48B4evSn8MjewL0= Name: res/drawable-mdpi-v4/abc_btn_radio_to_on_mtrl_000.png SHA1-Digest: hd7Xhf7r8tiMaj3TA7e8mD5AaWk= Name: res/drawable-xxhdpi-v4/ic_reply_white_36dp.png SHA1-Digest: q1IMO8sC5U7/zGVWmUfd+VXf8vE= Name: res/drawable-xxxhdpi-v4/ic_circle_fill_white_48dp.png SHA1-Digest: WVB9yHE8xW+1eSVkrlKOLFEa/Eo= Name: res/drawable-xhdpi-v4/dialog_full_holo_light.9.png SHA1-Digest: 4a/lXtrHhDyTJ5J/FXa5QOYmYFk= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_972 SHA1-Digest: wAYIltvc6+i6ruNDh7sN4H7KQtQ= Name: res/drawable-v21/design_bottom_navigation_item_background.xml SHA1-Digest: pr4lHw2CyDnUXBosj+Dtzxdp1Go= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_971 SHA1-Digest: hXcyXUcpEkkPh5oyJGLDlCa0gj4= Name: res/layout-v16/audio_view.xml SHA1-Digest: cLq5qBUOjLJvq7rciTXcC3OfLB0= Name: res/drawable/conversation_list_divider_shape_dark.xml SHA1-Digest: fWos81hHhRxDA19IMaROPe9RF/g= Name: res/layout-v22/abc_alert_dialog_button_bar_material.xml SHA1-Digest: BGg02XJg5Rm7Hon/HR5TED1+xGA= Name: res/drawable-xxhdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png SHA1-Digest: x6v2WXfb5dlObVj7r3apFaVYbqU= Name: res/layout/push_recipients_panel.xml SHA1-Digest: V9+FCGlL81aEfDHsTJjEq/vXCic= Name: res/layout/blocked_contact_list_item.xml SHA1-Digest: O2MH8iSEZ/gnJ7/+O30PtzbPZ/o= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_595 SHA1-Digest: Yclq7RFkgBMoTXIDcvEQSp9M8ok= Name: res/drawable/emoji_category_symbol_light.xml SHA1-Digest: AXYq5JMOM7ytemsBcrJ/iZRr5GU= Name: res/drawable-hdpi-v4/ic_emoji_emoticons_normal_dark.png SHA1-Digest: hAVGK8+r2aV6kpGq3D0wI2GPvU8= Name: res/drawable-xxhdpi-v4/abc_list_pressed_holo_dark.9.png SHA1-Digest: LdyLROvWFgig9Vsgsaypd9fZOJY= Name: res/drawable-xhdpi-v4/ic_emoji_nature_activated_light.png SHA1-Digest: 4lPutF935FySe8C9WkMbfnRwTtw= Name: res/drawable-xhdpi-v4/icon_cached.png SHA1-Digest: YFST3niSlSLLmcZHPhBmo/JGETE= Name: res/drawable-hdpi-v4/switch_bg_disabled_holo_light.9.png SHA1-Digest: 8JhypYeb6T5pv+9W/UUzEOwHvyI= Name: res/drawable-mdpi-v4/ic_emoji_nature_normal_dark.png SHA1-Digest: QaZ6rwfPQ4lc5WIJun2DFKbP7Mc= Name: res/drawable/ic_backspace_light.xml SHA1-Digest: YHhJ2M17Nwf63uXOZsa/rXaXSiI= Name: res/drawable-xhdpi-v4/ic_forum_black_32dp.png SHA1-Digest: 3l7T8riC3mgNo6J1olUj+hRqoUU= Name: res/drawable-ldrtl-xxxhdpi-v4/ic_send_white_24dp.png SHA1-Digest: bxEMeGjTEUMf6/VMTJgYOWnNAAc= Name: res/drawable-hdpi-v4/ic_emoji_places_activated_light.png SHA1-Digest: dtZ0oh5dGwA3n/PYE9vMAKw/mSc= Name: res/drawable-hdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png SHA1-Digest: BZJDbJr+DqrwOb7xOhkTBDzBHlg= Name: res/drawable/rounded_rectangle.xml SHA1-Digest: W1PIBWXgXwieJFzg924AzyFFCQI= Name: res/drawable-xhdpi-v4/ic_lock_white_18dp.png SHA1-Digest: QRmXgmOtRZSMLuw4lzyyvEzxODA= Name: res/drawable-hdpi-v4/lockscreen_watermark_light.png SHA1-Digest: AXK2KP2ApxC2Z2yzuty9it93QuI= Name: res/drawable-hdpi-v4/ic_lock_light.png SHA1-Digest: Y+MO7y5qQbcsoqrpg2zSVCsJf3M= Name: res/layout/conversation_activity_attachment_editor_stub.xml SHA1-Digest: xP5sF5FP2CHmgHqc2J4zXFClT/c= Name: res/drawable-xhdpi-v4/ic_forum_grey_32dp.png SHA1-Digest: UFnYU3r7D0HoFnktokFTaP/pPT4= Name: res/layout/color_fragment.xml SHA1-Digest: JbZaOBLv7+acnwkjCmd3xaK8LUc= Name: res/drawable/widget_unread_count_background.xml SHA1-Digest: Yy/nLAIfCf1bcX2jic2d+rlzGbw= Name: res/drawable-xxxhdpi-v4/abc_tab_indicator_mtrl_alpha.9.png SHA1-Digest: 3fhmc4V2nmgfmXePbvfRvhgIwJY= Name: res/drawable-v21/circle_touch_highlight_background.xml SHA1-Digest: o2UQBTWYlJ9QXTjKaXy9nlvVkd0= Name: res/layout-v21/recipient_preference_activity.xml SHA1-Digest: LAb6OqLhhlHIK//g73HVsj6zs1A= Name: res/drawable-mdpi-v19/switch_thumb_pressed_holo_light.9.png SHA1-Digest: CFRP5NlSZZOns7feha7lGxerPGg= Name: res/drawable-xxhdpi-v4/ic_video_dark.png SHA1-Digest: XtOnQnOLPbi3t0IrtZ85LaIyetg= Name: res/drawable-xxxhdpi-v4/icon.png SHA1-Digest: WtQHPcTXiUt+2Q8CVkBaKIpO47M= Name: res/drawable-xxxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_005 .png SHA1-Digest: vemTSSQdycMQQJlthk4udlWVCtA= Name: res/drawable-xxxhdpi-v4/ic_archive_white_48dp.png SHA1-Digest: dKISf3rbvALxLw+0EofvQox3t2s= Name: res/drawable/emoji_category_objects_dark.xml SHA1-Digest: kfXqnfoLc6+1LbnHmJXTPQ5ZSRM= Name: res/drawable-xxhdpi-v4/fab_shadow_mini.png SHA1-Digest: 50Pk6/PSs/mMVgqjsfxR1iLTd4I= Name: res/layout/conversation_item_received_audio.xml SHA1-Digest: rJfl43B7j5swgx4K6TQ86nw5hvk= Name: res/drawable-mdpi-v4/sent_bubble.9.png SHA1-Digest: oWvWoFrpRQdCV4lAcWNy0a6DydY= Name: res/drawable-xxhdpi-v4/ic_attach_white_24dp.png SHA1-Digest: sdTAMI30OBxgl8xmIxijVZVm7vU= Name: res/drawable/compose_background.xml SHA1-Digest: 77YF5OthBZArbShPc+i58Aql40g= Name: res/drawable-mdpi-v4/ic_content_copy_dark.png SHA1-Digest: prKV/2e2z+B34cHOsghLSPcAWIA= Name: res/layout/date_picker_view.xml SHA1-Digest: TswBiM1KZTeAkVH/lhpSjEaZsWs= Name: res/drawable-mdpi-v4/ic_emoji_recents_normal_dark.png SHA1-Digest: brmCWGpFBHeALX69UF3hDMOTJg4= Name: res/drawable-mdpi-v4/dialog_full_holo_dark.9.png SHA1-Digest: q3ptg6feoBdTrvEzjNt9NgzKcHM= Name: res/drawable-mdpi-v4/abc_ic_star_half_black_36dp.png SHA1-Digest: ZXAwjCRHDKMA1FtoZL8+AhM9yvI= Name: res/drawable-hdpi-v4/abc_btn_check_to_on_mtrl_015.png SHA1-Digest: J3SGWA4N2NBzGxZuD1OYrO+kvSg= Name: res/drawable-mdpi-v4/divet_lower_right_dark.png SHA1-Digest: rq1MiOtAGeYqXA9AuuCSqoHYMpE= Name: res/drawable-xxhdpi-v4/ic_image_light.png SHA1-Digest: oe1zE4t4f6sTrfGOtL7BoqGWqBI= Name: res/menu/contact_selection.xml SHA1-Digest: O2r1ScXr8uDumtySR2i8JA4uR2M= Name: res/drawable-xhdpi-v4/ic_menu_search_holo_dark.png SHA1-Digest: bKDlYP7RsBc0UlbbwR/gqgFqq8w= Name: res/color/abc_tint_switch_thumb.xml SHA1-Digest: JY0G52hUE4OcvW5M6WzWjE/j1DM= Name: res/drawable-hdpi-v4/dialog_full_holo_dark.9.png SHA1-Digest: gYRi3qcewvv4DpgH7WRa5oontHM= Name: res/drawable-hdpi-v4/ic_backspace_disabled_light.png SHA1-Digest: I3l9fO+XlM3GMEc7mJi0gIh8HXc= Name: res/drawable-xxhdpi-v4/ic_reply.png SHA1-Digest: qG0hBkDSQm7dAysBPD1VzEHexIE= Name: res/drawable-hdpi-v4/ic_message_white.png SHA1-Digest: 4hH67nLDLSDpO/PkUE3B2tJ0VTo= Name: res/drawable-xxhdpi-v4/ic_send_insecure_white_24dp.png SHA1-Digest: UlsVGjyXvlutgo7jPc9VP3zCRN0= Name: res/drawable-hdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.pn g SHA1-Digest: 3qnimsnK10WL03+kpBN2qzg7V1Y= Name: res/layout-v17/abc_popup_menu_header_item_layout.xml SHA1-Digest: YsoJ5ydfgQxhRDOJEIiXUol6dJw= Name: res/layout-v17/notification_action.xml SHA1-Digest: LO/ceel3QXArZD+w3cRZ8aS+08I= Name: res/drawable/background_pane.9.png SHA1-Digest: DebSplvlRk4ibCyCE6fVr4Rye5w= Name: res/layout-v16/conversation_item_received.xml SHA1-Digest: J278vdGN8exGkzLY9BUHAFJ0fvo= Name: res/drawable-xhdpi-v4/ic_arrow_forward_light.png SHA1-Digest: 8B3KLzM+ZxxKUaz31Ub711ckJuE= Name: res/drawable/emoji_category_people_light.xml SHA1-Digest: +Bv974WbkFqfpxT9EBtPeHcRw20= Name: res/layout/notification_template_media_custom.xml SHA1-Digest: Rb07Oq0AWSU5fpwtGOsf+Y01S48= Name: res/drawable-xhdpi-v4/ic_forward_white_24dp.png SHA1-Digest: GqaeuX6n1vKxkKLK4mh1fr7Ut60= Name: res/drawable-xxhdpi-v4/ic_error_red_18dp.png SHA1-Digest: AGBDwVaOj112bQa4oENKtcShlzs= Name: res/drawable-xhdpi-v4/ic_message_black.png SHA1-Digest: 6352Bc/8+QYJrkmMMMsNvpKPjM8= Name: res/drawable-xxhdpi-v4/ic_keyboard_white_24dp.png SHA1-Digest: 9taTcawrGNSChnJvoiXAHzNR1T8= Name: res/drawable/emoji_category_recent_light.xml SHA1-Digest: 3r2NNEnmR57jtcSYEixH1j6WcLw= Name: res/drawable-xxhdpi-v4/ic_app_protection_gray.png SHA1-Digest: 2TVhdC+MvGJJXfzGaHhucghUJrc= Name: res/anim-v21/design_bottom_sheet_slide_in.xml SHA1-Digest: P5+oT0+JVe2tOF/nHLy58E5nCQg= Name: res/drawable-xhdpi-v4/list_selected_holo_light.9.png SHA1-Digest: U9jUfNg6H8NNFEsehvr9ue8J/zc= Name: res/drawable-xhdpi-v4/ic_send_insecure_white_24dp.png SHA1-Digest: JE4aO/E1KAIkIlzWL4s0wvVAf/M= Name: res/drawable-hdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png SHA1-Digest: Eh+ZTEk9nWC3r6F65kTTCqFuv/0= Name: res/drawable-xhdpi-v4/notification_bg_normal_pressed.9.png SHA1-Digest: oXhMxqCdTU9FU0k6ZW87SKaXIv4= Name: res/drawable-xxxhdpi-v4/ic_scroll_down.png SHA1-Digest: RDfbOziQ77bQwxk2APgk8L8KRz0= Name: res/drawable-xxxhdpi-v4/abc_text_select_handle_left_mtrl_light.p ng SHA1-Digest: LleVLIYRudbFAD34tHNTJEZxhXw= Name: res/drawable-mdpi-v4/ic_app_protection_black.png SHA1-Digest: 0zIOC4EHHt1nv71/50ASJr1ExAw= Name: res/drawable-xxhdpi-v4/ic_content_copy_light.png SHA1-Digest: Ikhdvy4kc7KWV6wQ6mAT8SEXCCk= Name: res/drawable-xxhdpi-v4/ic_error_white_18dp.png SHA1-Digest: +asFYpuUKal6m9VEZlRuBhyaQ4s= Name: res/layout/abc_screen_toolbar.xml SHA1-Digest: uU227asMSuWQIBX4+4P+jVpjaOA= Name: res/drawable-xxhdpi-v4/abc_ic_star_half_black_48dp.png SHA1-Digest: LOaqUgdDJCkzcFxWg8tmL0IBRoQ= Name: res/layout/database_upgrade_activity.xml SHA1-Digest: rixOXNhHj2qjtL8u7smjMKsXm4w= Name: res/drawable-v11/emoji_category_symbol_dark.xml SHA1-Digest: USyM6X1uv2WWZWGfnmw7E5d69KY= Name: res/drawable-mdpi-v4/ic_download_circle_fill_white_48dp.png SHA1-Digest: lwooWBeYZiU+VTxoZN/ghJZ2LtM= Name: res/drawable-xxxhdpi-v4/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: hlPg0mO16g5nYlkb2LmahKOZAG8= Name: res/drawable-xhdpi-v4/ic_select_all_white_24dp.png SHA1-Digest: R7TBs96lHI2rHtkBdpfJQj5XvqM= Name: res/drawable-xhdpi-v4/switch_bg_disabled_holo_light.9.png SHA1-Digest: R8GV7kb6QAwT3efgJTdnB9VOJAo= Name: res/layout/transfer_controls_view.xml SHA1-Digest: rGvBRBRjABRAHbISc9Klc2KXzkY= Name: res/drawable-xhdpi-v4/icon.png SHA1-Digest: ZX0Na7vYQj2M/TBdj+eQoSk7YR8= Name: res/drawable-mdpi-v4/sms_system_import_icon.png SHA1-Digest: 4FpxWz1BwQb5Kp2ZiRbEm2oyAKU= Name: res/drawable-xxhdpi-v4/abc_text_select_handle_left_mtrl_light.pn g SHA1-Digest: o3UnPa5xQWf+9sW1xzSf4Z35vmk= Name: res/anim/slide_from_right.xml SHA1-Digest: TfPszWadpReLtTNx99WycfoyUO4= Name: res/drawable-mdpi-v4/ic_emoji_places_normal_light.png SHA1-Digest: Z0VaVHOx9e28oBU4v9FfnuF5+qU= Name: res/drawable-xxhdpi-v4/switch_thumb_pressed_holo_light.9.png SHA1-Digest: E/oARIhpfJfx3+nGJCpSww+s2hs= Name: res/drawable-mdpi-v4/textfield_default_holo_light.9.png SHA1-Digest: HHVoeIoiPaZGrfV/J675mX9mKZE= Name: res/layout/design_layout_snackbar.xml SHA1-Digest: 8ybNZ/e1PZuEOTyEoWLg2z2iy5s= Name: res/drawable-v21/dialog_background.xml SHA1-Digest: DavJrkoaA6avP9NleoDSEf06dSc= Name: res/drawable-hdpi-v4/ic_menu_add_field_holo_light.png SHA1-Digest: ULfeQw0hAmEOAi1XJUliX5NzZMM= Name: res/drawable-xxhdpi-v4/ic_unlocked_white_24dp.png SHA1-Digest: OLI3oTlEzJinF3GuHri9mip1thU= Name: res/layout/reminder_header.xml SHA1-Digest: vcf19058p0wwcoK5BD/6Op4ZIM4= Name: res/drawable-mdpi-v4/ic_emoji_people_normal_light.png SHA1-Digest: SpLsdXeONmvVc2/mA0Q8tOGXOTw= Name: res/drawable-xxhdpi-v4/ic_image_dark.png SHA1-Digest: 5QWssaiS3uzxGdVkntaRBMH6wNI= Name: res/drawable-xhdpi-v4/ic_done_white_18dp.png SHA1-Digest: KBL2mzmCV7ECTCI1eGxjvKVjB2E= Name: res/drawable-xxhdpi-v4/list_longpressed_holo_light.9.png SHA1-Digest: CBiyFOEOkN4G8LwWwkREd/FYJhs= Name: res/drawable-hdpi-v4/notification_bg_low_normal.9.png SHA1-Digest: GqlxeUYi9nderviC+XwD6tRD5Kg= Name: res/drawable-xhdpi-v4/ic_download_circle_fill_white_48dp.png SHA1-Digest: qyfgqeIjZuk6EpczzzExcGu6zD0= Name: res/drawable-hdpi-v4/abc_btn_radio_to_on_mtrl_015.png SHA1-Digest: ehXR0id2qmpKXDOMM66scpMAeFg= Name: res/drawable/abc_list_selector_background_transition_holo_light. xml SHA1-Digest: GmT6IMAyeHMrj3HfwELKNXx7GjY= Name: res/drawable-xhdpi-v4/ic_arrow_forward_dark.png SHA1-Digest: n/kEo/gBinlbUxHmmkL7EXndGK4= Name: res/layout/recurrencepicker_freq_item.xml SHA1-Digest: EvbG/hd0LGdj3UPmFOorUS5ig+c= Name: res/drawable-xhdpi-v4/notification_bg_low_normal.9.png SHA1-Digest: skfmh8AKXvj2Y90RQYRWGn6cYvs= Name: res/drawable-mdpi-v4/abc_text_select_handle_left_mtrl_dark.png SHA1-Digest: +hxtgSGCnF5TH+4LvSwYRLnVzDw= Name: res/drawable-hdpi-v4/ic_content_copy_dark.png SHA1-Digest: T3QObin9mzq6kKqgsPOkyG3imgc= Name: res/layout-v17/notification_template_big_media_narrow.xml SHA1-Digest: kD4TuSCXVYPjwJvXlcG7T13k38Q= Name: res/drawable-mdpi-v4/ic_volume_up_dark.png SHA1-Digest: AbY5CujgEDn/CHHf3fPQ/zzzWGQ= Name: res/drawable-mdpi-v4/ic_volume_off_white_18dp.png SHA1-Digest: /Gl91aCUE+H597QunvAYC+8mTOo= Name: res/drawable-xhdpi-v4/ic_audio_dark.png SHA1-Digest: KCG8HUU7Z5VlICyAaXx6vDcy+RI= Name: res/color/abc_primary_text_material_dark.xml SHA1-Digest: t7dOMP7ur0YJrU60kQgbx1E/KP0= Name: res/drawable-hdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png SHA1-Digest: QT06M8jIu5PbB6orRZr5qtxv3oI= Name: res/layout/notification_template_media.xml SHA1-Digest: APsr5r93KLHuij35wf2E5vipLT0= Name: res/drawable-xhdpi-v4/list_focused_holo.9.png SHA1-Digest: OMRGZ9NZcF46RZNFPM1PA5UDfDk= Name: res/drawable-xhdpi-v4/ic_emoji_places_normal_dark.png SHA1-Digest: NkFXJ9PnewoPQmwyaxvViVST/Zg= Name: res/drawable-hdpi-v4/list_selector_background_selected.9.png SHA1-Digest: hwr6dZUS/iDuJ78l2mF0/dfJL+8= Name: res/drawable-hdpi-v4/ic_call_split_white_24dp.png SHA1-Digest: aDXhmmrFzHZqOyCGYZVWSG61/AI= Name: res/drawable-xxhdpi-v4/transfer_controls_background.9.png SHA1-Digest: j7LzaIHFeP182GCKU70DBB8X2+Q= Name: res/layout-v13/select_dialog_singlechoice_material.xml SHA1-Digest: msQSXB79DdKW3CGw6eCSN11yWMo= Name: res/layout-v17/notification_template_custom_big.xml SHA1-Digest: Z0vGiLZztPzEw8qLt43/XBk8KBQ= Name: res/drawable-hdpi-v4/abc_text_select_handle_middle_mtrl_light.pn g SHA1-Digest: w8Uc/kI2V1M3yMQqT3OQtJzclbo= Name: res/drawable/conversation_item_sent_indicator_text_shape_dark.xm l SHA1-Digest: ni1zsLQFwrR7vllFnS41NOG8hXI= Name: res/drawable-xxhdpi-v4/abc_ic_star_half_black_36dp.png SHA1-Digest: /qTnweOfRMZPcyM1eqEsdwUZTD4= Name: res/color/abc_tint_switch_track.xml SHA1-Digest: G+p1U+cLARvJsg+xCLdCCItwTlU= Name: res/drawable-xxxhdpi-v4/ic_send_insecure_white_24dp.png SHA1-Digest: IGX4QelGg0sG9EmeHNme4rw9h0U= Name: res/drawable-mdpi-v4/telephone.png SHA1-Digest: DvkA3yTuKRtejM5DM72hMvzdg8g= Name: res/drawable-mdpi-v4/ic_save_all_white_24dp.png SHA1-Digest: LvVW7F2kcUdf2bMZgGOhWD+M6jk= Name: res/layout-v21/notification_action.xml SHA1-Digest: jtD5IGq/mY1IwmkPG/EiEhVS9Zw= Name: res/drawable/navigation_empty_icon.xml SHA1-Digest: oj14w4XpXH1NupwME3lJQMfohLM= Name: res/drawable-xxhdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png SHA1-Digest: pekxWTKwrzIagiU2Ssj+otR4tkc= Name: res/drawable-xhdpi-v4/ic_emoji_recents_activated_dark.png SHA1-Digest: ZKrYvfOfQEtUyhAgWxp/Qvlw9RY= Name: res/drawable-xxhdpi-v4/sent_bubble.9.png SHA1-Digest: KdAs5emUzdEgIGy2K1/+aDjasdE= Name: res/drawable/switch_track_holo_light.xml SHA1-Digest: ehEfLsAvoiTHBcWoc6LkpZu3AJs= Name: res/drawable-xxhdpi-v4/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: MMbSz4/uGhdnvziZg4e9XLvFodM= Name: res/drawable-hdpi-v4/ic_emoji_emoticons_normal_light.png SHA1-Digest: gY6ENGDAhIy/TJ7GuavgvuEIcmw= Name: res/drawable-xhdpi-v4/abc_ic_menu_share_mtrl_alpha.png SHA1-Digest: yapGdXFczOwfYLF7DNP0aaN/cJs= Name: res/drawable-mdpi-v11/icon_cached.png SHA1-Digest: WSol70AKPymO+ekZisb8wkIhroQ= Name: res/layout/abc_activity_chooser_view.xml SHA1-Digest: d11uhgWLGQufvde+7eDb56ysfKU= Name: res/drawable-xxhdpi-v4/ic_menu_search_holo_light.png SHA1-Digest: VJwbHZDpQuhmErJr0dA/acV913k= Name: res/menu/key_scanning.xml SHA1-Digest: VWVXWVDoPEKSUkvxwbRUcxZB6k4= Name: res/layout-v16/conversation_item_sent.xml SHA1-Digest: /yCrsUvoHLTrGjMYrs4hf6pFT9U= Name: res/drawable-hdpi-v4/ic_emoji_nature_normal_dark.png SHA1-Digest: aupznj5AeeBq4ZgMoj3awvKGjnE= Name: res/drawable-xhdpi-v4/ic_mood_white_24dp.png SHA1-Digest: +bjHZR3nwnfhNnrDuHzsHRYSt48= Name: res/layout-v17/notification_template_big_media_custom.xml SHA1-Digest: Z9irvX+ZFO9iWrgVgqV7AnLQ/Cs= Name: res/layout/media_view_remove_button.xml SHA1-Digest: 7BYliZmJN68yTXwLqRUR7Zh1sfc= Name: res/drawable/conversation_attachment_close_circle.xml SHA1-Digest: g1HIrRmL54DnYsdzyXEclQwlGcU= Name: res/drawable-hdpi-v4/ic_push_gray.png SHA1-Digest: qwDOd8MkzJg2NE2FSkvFji0695U= Name: res/animator/bottom_pause_to_play_animation.xml SHA1-Digest: sGztQN6FsfBHdy/lArM6hyYwIhI= Name: res/drawable-xhdpi-v4/ic_emoji_emoticons_normal_light.png SHA1-Digest: EE2p4bcPFBUfjL3C5+qfXjNxc7A= Name: res/drawable-xxhdpi-v4/switch_bg_focused_holo_light.9.png SHA1-Digest: 8Bdi9UbmuTXrnFgMObpGUILEjXw= Name: res/layout/empty2.xml SHA1-Digest: IM3rg1Lz0mEteG8vDVjHrpIkzV0= Name: res/layout/design_menu_item_action_area.xml SHA1-Digest: MAjBXF+TiqbN8ABwvCY22FbLaDM= Name: res/drawable-v11/emoji_category_symbol_light.xml SHA1-Digest: PlLwcnhZX3fatUFRaaqTl4EKUVg= Name: res/layout-land/calendar_date_picker_dialog.xml SHA1-Digest: 4DDhwL/zYY0LD3vXbx63CiJbBR0= Name: res/color/abc_tint_spinner.xml SHA1-Digest: SJW1ArIZ5Gg0BZUUA+p5I1sV0wI= Name: res/drawable/ic_backspace_dark.xml SHA1-Digest: vF9FMkPaMolfqCsJb/Sfv+5SBJI= Name: res/color-v23/abc_tint_btn_checkable.xml SHA1-Digest: pL2E8PJwKlEZNBwJnEzAGOdaOus= Name: res/layout/keyboard_right_drawable_with_header.xml SHA1-Digest: 7YBuE+1NgS1CgWLvx/MgT2aRKbE= Name: AndroidManifest.xml SHA1-Digest: 7IBTP9znBQHFa28nWpjw8Tg2/2k= Name: res/drawable-xxxhdpi-v4/ic_reply_white_36dp.png SHA1-Digest: pAb2FT+NmH4VNJzIqRY5ynzHWN0= Name: res/drawable-v21/avd_show_password_2.xml SHA1-Digest: k8oF40K3UGPcSOYDsDn3XpL7WFg= Name: res/drawable-hdpi-v9/icon_notification.png SHA1-Digest: gxWj9G+mn7RrswOMWTx3KqDlWz0= Name: res/drawable-xhdpi-v4/sent_bubble.9.png SHA1-Digest: PpPeKJZDE+OFnELluMlghGwM1wY= Name: res/drawable-mdpi-v4/list_selector_background_selected.9.png SHA1-Digest: KwBrnNhffw2ctqQgbBLetHzxQ0I= Name: res/layout/fragment_submit_log.xml SHA1-Digest: iko4zsMoqVEyStIpA6x8AQRs7tI= Name: res/drawable-mdpi-v4/ic_lock_white_24dp.png SHA1-Digest: eM6/Ca/CtwmeqtigzFQg6yeNSEg= Name: res/drawable-xhdpi-v4/textfield_disabled_holo_light.9.png SHA1-Digest: u+PyBkFnG5V7GBXX1PAbySEqGP4= Name: res/drawable-mdpi-v4/ic_push_gray.png SHA1-Digest: lX66OZiM5UocV2fv6a5Q/8CvPKM= Name: res/color/abc_tint_default.xml SHA1-Digest: 5NWuzpmorAh0/ov9AByYREIg4bQ= Name: lib/mips/libcurve25519.so SHA1-Digest: qgVowzBaSoaP+GSRhbrA1rjE2/4= Name: res/drawable-xxhdpi-v4/ic_create_white_24dp.png SHA1-Digest: RfhPAykdREtk24rWpt7Y6cFPPpk= Name: res/drawable/pause_to_play_animation.xml SHA1-Digest: MUwc2Q15c93uaEn9kkkP6yGi8Bc= Name: res/drawable-hdpi-v4/ic_attach_white_24dp.png SHA1-Digest: C8fybOOfDGXaxzaXgPOLB+33VWI= Name: res/drawable-mdpi-v4/ic_emoji_recents_normal_light.png SHA1-Digest: mtWkcSTn40XORuPT7JitlWcEluc= Name: res/drawable/touch_highlight_background.xml SHA1-Digest: E0nAyvgGtm+X7Zl4fIL9bsCc4cQ= Name: res/drawable-xhdpi-v4/ic_play_circle_fill_white_48dp.png SHA1-Digest: M8uau5BNu20fQGSY7qcQ6f8T17E= Name: res/layout-v11/notification_media_action.xml SHA1-Digest: CkAaakbqf4jYotOJaDjwZg8NsTg= Name: res/drawable-xhdpi-v4/ic_warning_light.png SHA1-Digest: 8nDKrfBm2tFrJzuMJ5Ua3GTWWbc= Name: res/drawable-v21/avd_show_password_3.xml SHA1-Digest: gt7hpVcp4EkVi9E+Ha+CR1YLEnY= Name: res/drawable-xxhdpi-v4/ic_forum_grey_32dp.png SHA1-Digest: fsT+RhZObPOxX4RoQaZY9402+sU= Name: res/animator-v11/rotate_90_animation.xml SHA1-Digest: YzPrKibA72xHWsJAnRDFda8WNqk= Name: res/drawable-xhdpi-v4/received_bubble.9.png SHA1-Digest: +GeQlo7tx1PQjC4nJMfJ9I7o6aM= Name: res/drawable-xxhdpi-v4/divet_lower_right_dark.png SHA1-Digest: QyXT0s0vW9257dECSdKBbJbJcrg= Name: res/drawable-hdpi-v4/ic_send_secure_white_24dp.png SHA1-Digest: WI/kUnDCawLuobN/tMTdZhznmds= Name: res/drawable-xhdpi-v4/design_ic_visibility.png SHA1-Digest: llhGqQb01dAZAjbBny5AcnTOn2o= Name: res/drawable-v21/conversation_list_item_unread_background.xml SHA1-Digest: XqYYWhECxEj/NQRflZTLiYgaWFM= Name: res/drawable-xxhdpi-v4/ic_emoji_nature_activated_dark.png SHA1-Digest: 44rlgeG5FLzt6DnaIIL6ABJA94E= Name: res/drawable-xhdpi-v11/icon_cached.png SHA1-Digest: xv4C/SPdVPz1BqbexmssO5m5wpQ= Name: res/drawable-mdpi-v4/ic_emoji_flags_normal_dark.png SHA1-Digest: Qj/u3uhxRZP+VK/+Z5TGEFvOtNI= Name: res/drawable-xxhdpi-v4/abc_text_select_handle_left_mtrl_dark.png SHA1-Digest: lqY9vuhB2Y6PNyO4cqhGHU3U5oE= Name: res/drawable-sw600dp-xhdpi-v13/ic_backspace_disabled_light.png SHA1-Digest: ZTUs4+rwQCv1lnyeFEIZ/LTtTTs= Name: res/layout-v13/database_migration_activity.xml SHA1-Digest: 4Lu3OMDcNHESEO7q+5+vklOmAdA= Name: res/drawable-xxhdpi-v4/ic_movie_creation_light.png SHA1-Digest: 3avYuy1gUqsBtTYWwcQ3xX8TVwo= Name: res/drawable-hdpi-v4/ic_add_white_24dp.png SHA1-Digest: KRHgaTCip00LKkZBaj+tRNRBxB8= Name: res/drawable-hdpi-v4/fab_shadow.png SHA1-Digest: urxZbfLe/2Yp+efwbm06EByfg+w= Name: res/drawable-v21/conversation_list_item_unread_background_dark.x ml SHA1-Digest: kQWRKKADhTzqqod8HS4VFglnQwY= Name: res/drawable-mdpi-v4/ic_info_outline_light.png SHA1-Digest: bSpfJGIqffZUzhrm2KQAq5PWZcA= Name: res/layout-sw600dp-v13/three_keys_view_right_drawable.xml SHA1-Digest: 3UxQ1CMcy/Awo8H7BsWSzYjz0SU= Name: res/drawable-xhdpi-v4/ic_brightness_6_gray.png SHA1-Digest: a1pVZU6D2cQlaEWgopesbgagP4E= Name: res/drawable-xhdpi-v4/abc_text_select_handle_left_mtrl_light.png SHA1-Digest: NMyg1BB4Pz2cvQ21qDTnVO4XKPg= Name: res/drawable-v21/design_password_eye.xml SHA1-Digest: 0z5lKVTTsmwzIox9AxI2XZDgt/4= Name: res/drawable-v11/emoji_category_nature_light.xml SHA1-Digest: 3jnMU7AWp91TmpOTVd8QqDytHZ4= Name: res/anim/slide_to_top.xml SHA1-Digest: 45OutUfVJ6qV4vsLcKjIbCltGPU= Name: res/drawable-xhdpi-v4/ic_emoji_emoticons_activated_light.png SHA1-Digest: ffAuA0TCS0VuJhIviwBP10B8vtE= Name: res/drawable-xhdpi-v4/ic_delivery_delivered_dark.png SHA1-Digest: iMwTCPyaIeLrnuVsWQzH41T2DXs= Name: res/drawable-xxhdpi-v4/abc_list_divider_mtrl_alpha.9.png SHA1-Digest: L4kldLqb9NR6DgoipZDWi2jQHbs= Name: assets/fonts/Roboto-Light.ttf SHA1-Digest: z9omPT1JG8UmPzMe032DUuqIgHc= Name: res/drawable-xxxhdpi-v4/ic_play_circle_fill_white_48dp.png SHA1-Digest: xsX3CduYe2M6cFiULGgZrtFGYa0= Name: res/drawable-xxhdpi-v4/ic_save_all_white_24dp.png SHA1-Digest: Ga5H2uBqKDBhxYd6qVNd9xicD0g= Name: res/layout/abc_alert_dialog_title_material.xml SHA1-Digest: JrY9ZYOkd6vkSu9aWGp4FObinoQ= Name: res/drawable-mdpi-v4/abc_scrubber_track_mtrl_alpha.9.png SHA1-Digest: fCw4/3GZJ6HvBRrlhVpfPdRbS48= Name: res/layout/import_export_fragment.xml SHA1-Digest: iyi5Y1njPnk/hKgkJrKdN/85UWM= Name: res/drawable/spinner_background_holo_light.xml SHA1-Digest: xCke46CrQrXfmojAbPIr4ODOHcc= Name: res/drawable-xhdpi-v4/fab_shadow_mini.png SHA1-Digest: a/sbG72ElizD4BCcegQYSqBmP4k= Name: res/drawable-xxhdpi-v4/abc_ic_star_black_36dp.png SHA1-Digest: 4JsTvfBdbaRSqVTy3mD7njRhb4s= Name: res/drawable-hdpi-v4/ic_missing_thumbnail_picture.png SHA1-Digest: NsUwvvdHHjfhLcuy5Cju9pM7uqQ= Name: res/layout-v17/abc_search_view.xml SHA1-Digest: h0EM0StoVFk6mqeuOaQFwX3xq4k= Name: res/drawable-mdpi-v4/ic_emoji_objects_activated_light.png SHA1-Digest: l0NabfIDi6pqTPGty4K97JYQjyw= Name: res/drawable/conversation_list_item_unread_background.xml SHA1-Digest: AsA+NB0zaiiLbn83PXUIuNRXFY0= Name: res/drawable-hdpi-v4/abc_textfield_search_default_mtrl_alpha.9.p ng SHA1-Digest: VtmcSWaUIf6+DhHt/mnXkgUFXH4= Name: res/xml/badge_widget_provider.xml SHA1-Digest: LsJqn1nWU4h8RLWEzbA/V6EicCo= Name: res/drawable-ldrtl-xxxhdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.pn g SHA1-Digest: ku1x+FSTuug9J98a2Pyp41uY6hU= Name: res/drawable-xxhdpi-v4/ic_badge_24dp.png SHA1-Digest: JBOTu5IsmntHowwu9e/zjoaWCHw= Name: res/drawable-mdpi-v4/ic_play_circle_fill_white_48dp.png SHA1-Digest: /uRMGGxF+sOCAzRp9uChhsJB1XA= Name: res/drawable-mdpi-v4/ic_emoji_symbols_activated_light.png SHA1-Digest: Tf66Xu0ryQTG7WWGNuG6b1rhzSo= Name: res/drawable-mdpi-v4/ic_backspace_normal_dark.png SHA1-Digest: xrvbueJnGuy7cXpAwlPELU6TQbw= Name: res/layout/design_bottom_navigation_item.xml SHA1-Digest: KApZ/A8qcI7DERPlgu57owrb24Y= Name: res/drawable-mdpi-v4/abc_text_select_handle_left_mtrl_light.png SHA1-Digest: jEtv5fNe5zMTwAdDEwTqqcIg9Bo= Name: res/drawable-xhdpi-v4/ic_check_normal_dark.png SHA1-Digest: id0GOEomTYZmQove2BYkq+Aaxu4= Name: res/layout/radial_time_picker_dialog.xml SHA1-Digest: VWueYQ9Pg7GzwSaRPzMr//4qhS4= Name: res/xml/preferences_chats.xml SHA1-Digest: ubYPAyIXyng1+PL91/YsEpd4yZQ= Name: res/drawable-xhdpi-v4/ic_menu_add_field_holo_light.png SHA1-Digest: 4qhWi7dfFyiswnx3DLEcu2LjxKY= Name: res/drawable/background_pattern.png SHA1-Digest: jf+Ousfom0Sy7n4UojJP8Tl+1Q8= Name: res/layout/abc_popup_menu_item_layout.xml SHA1-Digest: e/3HrZPNigFwLM6o71EyUba5qdU= Name: res/drawable-hdpi-v4/ic_download_circle_fill_white_48dp.png SHA1-Digest: XJ3foMGdZHO9k/ogu3qCjm0T4kQ= Name: res/layout/hms_picker_view.xml SHA1-Digest: Bfabx6v4Ye7Z8+y+MxNXjZjy4gQ= Name: res/drawable-mdpi-v4/ic_emoji_people_normal_dark.png SHA1-Digest: 550x1oOfcFdLIWXiKicI8Q9koPg= Name: res/drawable-mdpi-v4/ic_account_box_light.png SHA1-Digest: 63xcUi3qw7O4z7lBPDQ2lyQ2it8= Name: res/layout/media_overview_activity.xml SHA1-Digest: DE0hCTjpLY24k2I3p8pVHPsCJhY= Name: res/drawable-hdpi-v4/ic_save_all_white_24dp.png SHA1-Digest: rs/B/BxQ/hdXkBjmqTq0OYriDRk= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_84 SHA1-Digest: RXg8ZCyGT2W/pQDo6jOOCucmFYE= Name: res/drawable-hdpi-v4/design_ic_visibility.png SHA1-Digest: /v0kpQ1j5mTM2XhSiofpFxtnVB0= Name: res/drawable-xhdpi-v4/abc_btn_check_to_on_mtrl_015.png SHA1-Digest: nmJdfiNISdfmbhXzZPqmMVghsi8= Name: res/layout-v16/verify_identity_activity.xml SHA1-Digest: 1Vo8qWyzSua09sH8qcQKGAbGSLc= Name: res/drawable-xhdpi-v4/switch_thumb_pressed_holo_light.9.png SHA1-Digest: VTcVro7tRSB7dCiFLkcjEK1gte8= Name: res/drawable-xhdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png SHA1-Digest: n3rquhXmVYjYpHMG9RG+SAJc+rA= Name: res/drawable-ldrtl-xxxhdpi-v17/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: IiQ92KKKcRVz1q2BpPfR0GMDdtA= Name: res/drawable/notification_bg.xml SHA1-Digest: inV7SLogUBJZh+fioqpUMrGI5ys= Name: res/drawable-mdpi-v4/ic_message_black.png SHA1-Digest: XONTB0EheJN6Y0Tk/oZV9xuMrgE= Name: res/drawable-hdpi-v4/abc_ic_star_black_16dp.png SHA1-Digest: x902XiMoneAAmor81DbeuuMoYo8= Name: res/drawable-hdpi-v4/abc_textfield_default_mtrl_alpha.9.png SHA1-Digest: Rmk8UREagQdf47LncSS6fq9RbAo= Name: res/drawable/abc_ic_arrow_drop_right_black_24dp.xml SHA1-Digest: 0ovJ6X1/yGYcWSv7KAif8aiFzgo= Name: res/drawable-xxhdpi-v4/ic_refresh_white_18dp.png SHA1-Digest: eyBOpIskeHEHN+nVbRODD11snoc= Name: res/layout/design_layout_tab_text.xml SHA1-Digest: SIz1wfljARNQwBdK8NWsBSfi3dc= Name: res/color/design_tint_password_toggle.xml SHA1-Digest: nbryhDBq0BMU8ljp7cpVWU+9ZFo= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_81 SHA1-Digest: A1I5nxwmM7Cjx2rfURezn1a/kIM= Name: res/color/design_error.xml SHA1-Digest: VN6gMqWm3MTl2CIOHZrGVo8LQEQ= Name: res/layout-v21/conversation_fragment.xml SHA1-Digest: 6J/DzJSUjJEKzW0Jg/5fEMwTq34= Name: res/drawable-mdpi-v4/ic_keyboard_white_24dp.png SHA1-Digest: C6WoVhStJ78OHjddSQ1hiVKfzlI= Name: res/drawable/last_seen_divider_text_background_light.xml SHA1-Digest: Ul0NPZmH9ZneiNyrb/06iwknEHY= Name: res/drawable-xxxhdpi-v4/fab_shadow_mini.png SHA1-Digest: z0yIZFkPA9uo98ME+c7hYQWjXMI= Name: res/drawable-xxxhdpi-v4/ic_arrow_forward_white_24dp.png SHA1-Digest: 2M3A5LhILbVRYwellmh5yDtMgXs= Name: res/drawable-mdpi-v4/textfield_focused_holo_light.9.png SHA1-Digest: HZ9iQgcyhTz2F7RRfnq0smD0pLo= Name: res/drawable-ldrtl-mdpi-v17/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: nXZ4V1mFaOHaCmrZgjirnAh+5fg= Name: res/color-v11/abc_hint_foreground_material_light.xml SHA1-Digest: IFfq6CDFKWH4V76zx2clnsqSalw= Name: res/drawable-xhdpi-v4/abc_text_select_handle_middle_mtrl_dark.pn g SHA1-Digest: yfAguILD5aQrWq/KdWarpxXTKb0= Name: res/color-v23/abc_btn_colored_borderless_text_material.xml SHA1-Digest: DmroyQoPzNOJOorwtew2WEsQr08= Name: res/drawable-hdpi-v4/fab_shadow_mini.png SHA1-Digest: ulgb8PFS0FBM+8t64mYseonic74= Name: res/drawable/emoji_category_objects_light.xml SHA1-Digest: WKttpPtRpX6qMo4nYwqVlC6+RlI= Name: res/layout/emoji_drawer.xml SHA1-Digest: QD7D8QJ4kauvhmEPLmXleoEU/zY= Name: res/drawable-xxhdpi-v4/ic_menu_remove_holo_light.png SHA1-Digest: Hf0tLw73DTiA5ARoJff4Mu2sRkg= Name: res/color/abc_search_url_text.xml SHA1-Digest: mgOeEFdKIOmQBIiUEKXZ+y4FBn8= Name: res/layout-land/radial_time_picker_dialog.xml SHA1-Digest: ermst0JTCZ8NcgoQK6T2MUfpcLM= Name: res/layout/calendar_date_picker_dialog.xml SHA1-Digest: JW7fq1c9kaT0wG58A+Gnb6MzRkU= Name: res/drawable-mdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png SHA1-Digest: eF/LuENYUMfZZS3fHrJi1byAVZU= Name: res/drawable-xxxhdpi-v4/ic_unarchive_white_36dp.png SHA1-Digest: x1jt5NVel5ImQ6leOJH2slbEXiU= Name: res/drawable-v11/edit_text_holo_light.xml SHA1-Digest: c7kQ51Lq+a7ZnX0hxv4Ar/AGXBA= Name: res/drawable-mdpi-v4/ic_video_light.png SHA1-Digest: dnsYkAg2UoYNYsMuC472jETNYiM= Name: res/drawable-mdpi-v4/ic_info_outline_dark.png SHA1-Digest: Z6+bkPmQKJPQiU3cmT9sz/TqIb4= Name: res/drawable-mdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png SHA1-Digest: nuld1RomiGBKqE5EsGnC+AbnNZ4= Name: res/drawable/dialog_background.xml SHA1-Digest: IcoPMLhS51+d0m1LQoLCmVU7jlo= Name: res/drawable-xhdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png SHA1-Digest: 6jnEZnvF6Wf/iso9scq8BExu9D4= Name: res/color/abc_secondary_text_material_dark.xml SHA1-Digest: VOKwFxcyYLgm73Ve4W6WEInTWec= Name: res/drawable-hdpi-v4/ic_notifications_gray.png SHA1-Digest: F9T+s5F1UrZYIGRUeHMHI6P868s= Name: res/layout-v17/notification_template_lines_media.xml SHA1-Digest: 4NVmpeYrD66piDRF9hNgynINL+U= Name: res/drawable-xxhdpi-v4/ic_contact_picture.png SHA1-Digest: nc4ws16xOfkKzFG5l8XN7Dgae8M= Name: res/layout/design_navigation_menu.xml SHA1-Digest: ukHjw6xaRQ5PkWljLcrkNy7Zn58= Name: res/layout-v17/abc_popup_menu_item_layout.xml SHA1-Digest: rGUyJKgrpE0AI0G5Po2rWnZpOsI= Name: res/drawable-xhdpi-v4/abc_ic_star_half_black_36dp.png SHA1-Digest: jz/B6EDUP81CMkk6OyDhBLizPLY= Name: res/drawable-hdpi-v4/ic_send_white_24dp.png SHA1-Digest: miDa5p2kSfS26Ry3tkIO1JFi/6E= Name: res/drawable-hdpi-v4/ic_done_white_18dp.png SHA1-Digest: jVtoFesoojMic3mQ3HzsqLUMirk= Name: res/menu/conversation_list_batch_archive.xml SHA1-Digest: /sRRtPJlCyQnM51wHqCoRmIZAek= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_94 SHA1-Digest: W0CSkKs60WzDI0QUZ1mhx6CmIPI= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_95 SHA1-Digest: owiIKf9pjSZoNZMs63sucQc8p64= Name: res/layout/share_intent_row.xml SHA1-Digest: /qI4T5Xw817feCxvMolDV866zmY= Name: res/xml/preferences_notifications.xml SHA1-Digest: S0e/C8cCZslhZLxwy30EYr5l5D8= Name: res/drawable/notification_icon_background.xml SHA1-Digest: W3i7jt5Pavj518bWIUVG8PRBQ3I= Name: res/drawable-xhdpi-v4/switch_bg_focused_holo_light.9.png SHA1-Digest: OIa2+0APqiitnkIjp1qmRxaODoE= Name: res/drawable-xxhdpi-v4/ic_info_outline_light.png SHA1-Digest: RWrz7w+g7OnrbVMf3wNJnVcQZLc= Name: res/layout/prompt_passphrase_activity.xml SHA1-Digest: 6FiLZ+pqHKv0TwZE6SftRX0zT3g= Name: res/drawable/button_background_light.xml SHA1-Digest: 6V7KWIGPftLpVqdHModNEVbbYEA= Name: res/drawable-v11/emoji_category_flags_dark.xml SHA1-Digest: Ea7jGoDtsl9tk/MSigQEQHYAAFc= Name: res/drawable-xhdpi-v4/alert.png SHA1-Digest: VnyUO6MNfl9DN4ulAmyGzyZzrUg= Name: res/layout-v16/calendar_date_picker_header_view.xml SHA1-Digest: 4E+gsH/vmjzH9Fb9y+N9/fy7FqI= Name: res/layout/contact_selection_activity.xml SHA1-Digest: BoBPqDIoK6TIyiddmkBzZzh2PaE= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_91 SHA1-Digest: 4FrcOuE406a6sLJ2iX+nQ0towuo= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_90 SHA1-Digest: xmD9UZpmrXmHXGBwgKcnUgG3prY= Name: res/drawable-xxhdpi-v4/ic_message_gray.png SHA1-Digest: FM0SgppOLNYekXyH7s7y65qy0Eg= Name: res/menu/conversation_list.xml SHA1-Digest: paS/IQBsFMNRIIpyauMfigaYuVc= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_49 SHA1-Digest: 5u8Emu23ipjQSHPDBp+rNN5gLes= Name: res/drawable-mdpi-v4/ic_save_white_24dp.png SHA1-Digest: CTvZxHcXz4WQcVzU5MgcNzoWhrw= Name: res/drawable/compose_divider_background.xml SHA1-Digest: TaNBJJg7z7cx4qEtNifzBNqTRCo= Name: res/drawable-xxhdpi-v4/ic_action_warning_red.png SHA1-Digest: DiY5Iib3+U2SZmokiRxU9aII0oA= Name: res/drawable-mdpi-v4/textfield_disabled_holo_light.9.png SHA1-Digest: y0PPuveb+rmvZE0XoVdCwXnL0Yk= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_44 SHA1-Digest: TVnQ8NXIFuFz2qYs35e/XIiGJek= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_43 SHA1-Digest: YwmvuPrm5iistAma7bavl8QEvkw= Name: res/drawable/ic_check_light.xml SHA1-Digest: tct7jdk7izG4C835TjRCIr7EVOA= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_39 SHA1-Digest: GwstlZcw4BzlZVzFB96jvV7cCZU= Name: res/drawable-hdpi-v4/ic_menu_search_holo_dark.png SHA1-Digest: cpjUnuXseXeegZHwQG7JZa8HqaU= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_36 SHA1-Digest: Q6P0BgyIFO14RidwktMDzIKtUAc= Name: res/drawable-xxhdpi-v4/ic_emoji_symbols_activated_light.png SHA1-Digest: lMC9QAxWQz9KeWUC0xEBc5pKXBo= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_31 SHA1-Digest: r/DBDrMghpy33Q11YD6SwLXaCCg= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_30 SHA1-Digest: zX3yz7FhjbZayv9D47R7u97JH+E= Name: res/drawable-xhdpi-v4/ic_volume_up_light.png SHA1-Digest: Ml/mEuVtsf/hO3+boEno2nw5ldk= Name: res/drawable-xxxhdpi-v4/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: HYDPd61Ck9Ifum3cvWl+fOfD9xk= Name: res/drawable/notification_bg_low.xml SHA1-Digest: 22SYjMhzjkMiHHELUtuy6uYI0EU= Name: res/drawable-xhdpi-v4/ic_visibility_grey600_24dp.png SHA1-Digest: rsZYHEAucgs+0D7w1hJFv4VVIYY= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_34 SHA1-Digest: QJCaGbU/lFnE77x7YIoqtsjah/M= Name: res/drawable-xxhdpi-v4/icon_cached.png SHA1-Digest: ADOq8ZSSoqUxZumCMwIwLAiXaX4= Name: res/drawable-xxhdpi-v4/abc_btn_check_to_on_mtrl_000.png SHA1-Digest: Syjf1WOGXYnoSy9XVDy49z2PpVc= Name: res/drawable-mdpi-v4/ic_brightness_6_black.png SHA1-Digest: NDjKISb8k2SICUl/bOuTxMEgAqU= Name: res/drawable/design_fab_background.xml SHA1-Digest: RnDZ4YODuNg44An4VRSM13iDsgI= Name: res/drawable-xxhdpi-v4/ic_account_box_light.png SHA1-Digest: /N6llAIhrlw2YQNIxiJp4CDO1vI= Name: res/drawable-hdpi-v4/ic_delete_black.png SHA1-Digest: WPk50dgPU79B3wWF/bHdMDoXiBI= Name: res/layout-sw600dp-v13/three_keys_view_text.xml SHA1-Digest: HcqqebIe5IczAB9EHSyWkzSizhY= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_66 SHA1-Digest: sAk8V+6UnOy3rXvWnM6/28B9JCM= Name: res/animator-v11/upper_pause_to_play_animation.xml SHA1-Digest: 63IcO2AyaIcRtq5+lM6ichKDMzc= Name: res/drawable-xxhdpi-v4/ic_select_all_white_24dp.png SHA1-Digest: 0nwBYEUkMnH0RBueAHaPuj2qxqc= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_62 SHA1-Digest: 1Noowsqek546G7Ohzzvb11nDfDo= Name: res/drawable-hdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png SHA1-Digest: hFfrmpffeUhFY9P1rmOGIFG2AzQ= Name: res/drawable-hdpi-v4/ic_dialpad_white_24dp.png SHA1-Digest: 7vQAxqeBS9GbalGsUuIHf9/zcbs= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_61 SHA1-Digest: y6DIvaz5WnaAn2TRzoK2bvfLQ7o= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_63 SHA1-Digest: z55xt2Ayw/sf1cZS1n7htuZln00= Name: res/drawable-hdpi-v4/ic_recurrence_bubble_outline.png SHA1-Digest: f9uw5y2KnxQNrG1es6CoBFBqBHs= Name: res/drawable-mdpi-v4/icon_lock.png SHA1-Digest: WteLaSMqiN9bmBnpeXU1mwSa3fI= Name: res/drawable-xhdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png SHA1-Digest: Lr8CV2APFenrT2CnF18DHzPxPmc= Name: res/layout-v17/abc_alert_dialog_button_bar_material.xml SHA1-Digest: u9IMbu9+yIpomdhnGc9HxebDDZ4= Name: res/drawable-xhdpi-v4/abc_list_selector_disabled_holo_light.9.pn g SHA1-Digest: 55f4pDcLSMwJ2///c7EjaRD4TtY= Name: res/layout/abc_action_bar_title_item.xml SHA1-Digest: QzmSVkZhkH/CGOFdlrZ9s21SgS8= Name: res/layout/color_preference_items.xml SHA1-Digest: xVhV4MgGbJBF6h9TueYdJHa7hq4= Name: res/layout/notification_template_part_chronometer.xml SHA1-Digest: N3bpzPkHEH/egwMXsQQ5MXKZrfM= Name: res/drawable-xxhdpi-v4/ic_emoji_nature_normal_light.png SHA1-Digest: 0jiwcjLEKePMy8m0RMoIhT4ocWg= Name: res/layout/zooming_image_view.xml SHA1-Digest: wjmUQd8KKCMX7JN384NxM9U03W4= Name: res/animator/upper_play_to_pause_animation.xml SHA1-Digest: 1TOkjm6F2/DzGTLmzL7Ol4HlHJM= Name: res/drawable-hdpi-v4/ic_send_insecure_white_24dp.png SHA1-Digest: jcPOs6NbnJ2g4wWmsSf9mQfzv5o= Name: res/drawable-mdpi-v4/ic_volume_off_grey600_18dp.png SHA1-Digest: kI7nw769qk2yR3SPs8rgcvoqq0w= Name: res/drawable-xhdpi-v4/ic_photo_camera_dark.png SHA1-Digest: ngJmjiQc3w1O0KPlXZbXufep6Zg= Name: res/drawable-mdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png SHA1-Digest: EYD0L7FYlUYj4vZvX1mmqzIwLBE= Name: res/drawable-xhdpi-v4/ic_block_white_18dp.png SHA1-Digest: 9z2lHTtH/PPnEg81YtRrU2ZFm+o= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_58 SHA1-Digest: hkt/emROO5dafVOiI7Zx7fKidEI= Name: res/drawable-hdpi-v4/ic_emoji_flags_normal_dark.png SHA1-Digest: l4ASGy17UUsb7ymwG5cl6ndH71I= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_55 SHA1-Digest: fv4z5lbCDxm8xUvQIY8+gDq08Nk= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_54 SHA1-Digest: EjExNy18aod1tZNDB5Mvc+z5EJs= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_52 SHA1-Digest: GfA+N9jSreUFUdFVVb+RZfhngSI= Name: res/drawable-xxhdpi-v4/ic_warning_dark.png SHA1-Digest: D1uEsGlc/SRlmOvLMXa4vPQeaeA= Name: res/drawable-xxhdpi-v4/ic_delivery_delivered_dark.png SHA1-Digest: Q52p/VabHg+UfldUrx4S5s8j9zg= Name: res/drawable-hdpi-v4/ic_brightness_6_black.png SHA1-Digest: WJnVdOMWsjuVdEtW9GXmA1T6DnI= Name: res/anim/abc_popup_exit.xml SHA1-Digest: 6uAxkSAqOnz6wM+5oio7//G38vY= Name: res/drawable-hdpi-v4/abc_scrubber_track_mtrl_alpha.9.png SHA1-Digest: bbu4U1Z2FReSVaAwtf9Uj+pAXxA= Name: res/drawable-xhdpi-v4/abc_switch_track_mtrl_alpha.9.png SHA1-Digest: xe5aMoZuNGwGdXksGOYPSE3NVpk= Name: res/drawable-xxhdpi-v4/ic_cancel_white_24dp.png SHA1-Digest: uIPdERWoB0Xbmn7TtJ53Yt6T8lU= Name: res/drawable-mdpi-v4/ic_done_all_white_18dp.png SHA1-Digest: 6RtNXtvHEJtyBGz7CC+8pcu+2k8= Name: res/drawable-mdpi-v4/ic_brightness_6_gray.png SHA1-Digest: qvlbB6O1T6oNI0cJQ+TLEQOAUCc= Name: res/drawable-xhdpi-v4/ic_emoji_flags_activated_light.png SHA1-Digest: YohQNFrhXEWY8IR4TwCKjPYIPz4= Name: res/drawable-mdpi-v4/design_ic_visibility_off.png SHA1-Digest: ipLLCgBkk/K/KbY3zZsJ8rEwkqc= Name: res/drawable-hdpi-v4/ic_photo_camera_light.png SHA1-Digest: bfG4OOhLunHje5La/8WZ2Tm+2Js= Name: res/drawable-hdpi-v4/ic_image_light.png SHA1-Digest: nxC2CR2PJMIo6QwSZvh9JIlrvD4= Name: assets/emoji_symbols.png SHA1-Digest: XE9qEioRlR74jFdnavx4j39xY3k= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_675 SHA1-Digest: Egbq8VQn3A6YTmNLqQtbJWXPR8Q= Name: res/drawable-xhdpi-v4/ic_done_all_white_18dp.png SHA1-Digest: +vPvdEMP/fdCA6U51cIygAU9BxM= Name: res/drawable-xhdpi-v4/ic_delete_gray.png SHA1-Digest: 9BGTYrElt+IOXRoukCyrJru6/EQ= Name: res/drawable-xxhdpi-v4/ic_textsms_grey_32dp.png SHA1-Digest: w7FTP8fokSOQc5a18rh5ZAnyeBw= Name: res/drawable-mdpi-v4/ic_lock_white_18dp.png SHA1-Digest: pBQx290amd9nTX5NiMqlPcL3v1o= Name: res/drawable-hdpi-v19/switch_thumb_pressed_holo_light.9.png SHA1-Digest: K3YgpyXSgJr++z61OECZhndc9kM= Name: res/drawable-hdpi-v4/ic_emoji_recents_normal_light.png SHA1-Digest: dO0i3/TnoJlyPzUsORXFNVSttVg= Name: res/drawable-mdpi-v4/ic_send_secure_white_24dp.png SHA1-Digest: S4iduCbVpmJnEpp0TrtDu0tibZA= Name: res/drawable-xxxhdpi-v4/ic_block_grey600_18dp.png SHA1-Digest: Y5lhWQ5y7+bHF0sQgxkxtsQaf2s= Name: res/drawable-xhdpi-v4/switch_thumb_disabled_holo_light.9.png SHA1-Digest: ljpsvOw3MQTa68v5CQddL5JUS+A= Name: res/drawable-xhdpi-v4/ic_info_outline_white_24dp.png SHA1-Digest: ohuZr+SPmjW9HPIu+b8s3HtsmCs= Name: res/layout-v16/conversation_item_pending_v11.xml SHA1-Digest: 3uW3DbHLcnvjpSvvoxu1+oy04gc= Name: res/drawable/design_snackbar_background.xml SHA1-Digest: 9Xn8nraZC6Vcz6OSelNnzt+1PV0= Name: res/drawable-xhdpi-v4/abc_scrubber_control_off_mtrl_alpha.png SHA1-Digest: B2HfhtZm7f+8V429AdZbU7mrLo8= Name: res/drawable-hdpi-v4/ic_create_white_24dp.png SHA1-Digest: wtYt9ob7eMgSOIyEUvlDncpuCCU= Name: res/layout/key_caching_notification.xml SHA1-Digest: Q3VhQitFF+cVcnu1P7hMzsahwNI= Name: res/drawable-xxhdpi-v4/textfield_activated_holo_light.9.png SHA1-Digest: v1cd6v0pRkDauAh+/cr18dBMykA= Name: res/drawable-xxhdpi-v4/ic_movie_creation_dark.png SHA1-Digest: hq/HDlKrkU+CD/2b1avbgug0cvY= Name: lib/armeabi/libcurve25519.so SHA1-Digest: nEVHde0KFMHgixmh+GIOePj6EWY= Name: lib/x86/libcurve25519.so SHA1-Digest: H5Egy82jimewQZPkEoJOFBJrWiE= Name: res/drawable-mdpi-v4/ic_menu_search_holo_light.png SHA1-Digest: 6htuxL+VQAoB64kEmH2Kj0/iC0E= Name: res/drawable-xxhdpi-v4/abc_textfield_search_activated_mtrl_alpha .9.png SHA1-Digest: WQ8PqUvvH8nOnzNH5uPMzVsVa+Q= Name: res/drawable-hdpi-v4/abc_ic_star_black_48dp.png SHA1-Digest: QbDpX67R5eyTWuNm150bgcl3Sgw= Name: res/drawable-mdpi-v4/abc_text_select_handle_middle_mtrl_dark.png SHA1-Digest: l6V40h1Kq8Tu3O9lUBPWpUqJtoc= Name: res/drawable-xxhdpi-v4/ic_lock_dark.png SHA1-Digest: NFzTV/6qvcpJans9yAngc04n9eA= Name: res/anim/abc_fade_in.xml SHA1-Digest: wE1QEZhFkLBWMw4TRtxPdsiMRtA= Name: res/drawable-xxxhdpi-v4/ic_archive_white_24dp.png SHA1-Digest: /ApVfvY7TZ7UT1V1/bHQ1w9LsWs= Name: res/drawable-hdpi-v4/ic_volume_off_grey600_18dp.png SHA1-Digest: FIVzTZsmvBIpwjzWaajuDk8CFGU= Name: res/drawable-sw600dp-hdpi-v13/ic_backspace_normal_dark.png SHA1-Digest: f4M6VvhQl88T3RVSBKSNc68yPyk= Name: res/drawable-xxhdpi-v4/ic_recurrence_bubble_outline_disabled.png SHA1-Digest: w1Z6Ozki8nTQaPLHtp4Di5h/gok= Name: res/layout/abc_search_dropdown_item_icons_2line.xml SHA1-Digest: loHBySvilcR0ZDgxQ9eAttNBuHM= Name: res/layout/abc_screen_simple.xml SHA1-Digest: wcPlv/nr5pkFN65VKYp3t34HJzY= Name: res/layout-v17/conversation_title_view.xml SHA1-Digest: E2oUf4eLPGUwwEmq1Cllhbls214= Name: res/layout/conversation_item_sent.xml SHA1-Digest: 9UHjMglE9L9EerONxG5mTuBqo6A= Name: res/drawable/share_list_divider_shape.xml SHA1-Digest: oze/+hk+C+xljs/Mpyq1oVRhM1Y= Name: res/drawable-hdpi-v4/abc_text_select_handle_right_mtrl_light.png SHA1-Digest: zwcMW0GH3RqmlBghFwMH6OEhqXQ= Name: res/drawable-xhdpi-v4/ic_pause_circle_fill_white_48dp.png SHA1-Digest: CVaieu6GpA9k9kxl3q7rTb4UYYU= Name: res/drawable-xxhdpi-v4/design_ic_visibility_off.png SHA1-Digest: PlrfwchzE7z/k1/X+4BUE0VacAY= Name: res/drawable-hdpi-v4/ic_emoji_symbols_activated_dark.png SHA1-Digest: pvBThWhMdTa9M3bExnEkZK73MGc= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_255 SHA1-Digest: GR5suOXxRCRSaPOoEXvpBezuIsM= Name: res/drawable-xxhdpi-v4/abc_list_focused_holo.9.png SHA1-Digest: qCddjZI8yABkWFvWCWlg+bQVD7M= Name: res/drawable-xxhdpi-v4/textfield_disabled_holo_light.9.png SHA1-Digest: 8uAr5Lt4boLAicIMjYMnfGSIX3w= Name: res/drawable-hdpi-v4/ic_menu_barcode.png SHA1-Digest: /8U9t3Qy9/S8IxwFbzkiqnSfQN8= Name: res/layout-v21/notification_template_custom_big.xml SHA1-Digest: LS7+cQspjhKEwdQsTahMw+haArU= Name: res/drawable-xxhdpi-v4/sms_system_import_icon.png SHA1-Digest: u8BglbLgaKCMbPyu2Fk8HHsEb3U= Name: res/drawable-xxxhdpi-v4/transfer_controls_background.9.png SHA1-Digest: eBXpns72mgHZbdQjLQLPnbzbCqo= Name: res/color-v23/abc_tint_edittext.xml SHA1-Digest: XnHYiEdQh7sZ+aQwfddZYqipJNo= Name: res/layout/conversation_title_view.xml SHA1-Digest: QxEoar7Oh/SO2HIYUpNRM1psNqE= Name: res/drawable-mdpi-v4/ic_emoji_recents_activated_dark.png SHA1-Digest: x5kFiFfBeI4gfPvnGuKZRnIVgi0= Name: res/drawable-xhdpi-v4/abc_list_pressed_holo_light.9.png SHA1-Digest: 4CNgdraLjH84scvRJUfzItc3PbA= Name: res/drawable-xxxhdpi-v4/ic_forum_black_32dp.png SHA1-Digest: eJFu4ty1Y+n1Kkwbcs+Kk/ogaME= Name: res/drawable-mdpi-v4/ic_clear_white_24dp.png SHA1-Digest: yNBPrtJwCZAL8kzkOTtUs+nlZic= Name: res/drawable-xxxhdpi-v4/abc_ic_star_half_black_36dp.png SHA1-Digest: QX+e7+1s5MHT2dUAaC7VUR+efz4= Name: res/layout-v17/notification_template_big_media_narrow_custom.xml SHA1-Digest: 484cKP4O32SZ90cmD99/AMvzJGs= Name: res/drawable-mdpi-v4/ic_advanced_gray.png SHA1-Digest: hKAQATuQ9Hfgy7kRH+Blepsttsk= Name: res/menu/conversation_list_batch.xml SHA1-Digest: VsKmzXOd1qCHb7daXAwYd+ZxTMY= Name: res/drawable-hdpi-v4/textfield_disabled_holo_light.9.png SHA1-Digest: DMgBrgDQzsNJNgByJKxx8cQ1G48= Name: res/drawable-xhdpi-v4/fab_shadow.png SHA1-Digest: u4AjjXO/B15x/thNhKzE1yUPWJw= Name: res/drawable-hdpi-v4/abc_btn_check_to_on_mtrl_000.png SHA1-Digest: qohFhg6cHeSRc5iV72L4bfUwcjM= Name: res/drawable-xxhdpi-v4/ic_block_white_18dp.png SHA1-Digest: dl8Q1j2xp1eDvyiDdX8aWsrf3w4= Name: res/drawable-hdpi-v4/ic_check_white_24dp.png SHA1-Digest: PcMRcVMKp3TNAr0vXLbxQo98W0g= Name: res/drawable-xhdpi-v4/ic_volume_off_white_18dp.png SHA1-Digest: unTCKvTLaI3OtXUhb0MBtR/LYXg= Name: res/drawable-xhdpi-v4/ic_emoji_emoticons_activated_dark.png SHA1-Digest: jlfodHPaYKBJF8uY+2oGqQYV01Q= Name: res/drawable-xhdpi-v4/ic_warning_dark.png SHA1-Digest: /Pz/2YqdiI+6JZuf3PjPmZHJfCs= Name: res/drawable-xxxhdpi-v4/ic_unarchive_white_24dp.png SHA1-Digest: pcY8XnRaYgqxWMnB51jCtO6EPlM= Name: res/drawable-hdpi-v4/ic_visibility_off_grey600_24dp.png SHA1-Digest: SY0HrM3WEh/fL3xG9vqRHex/Gmg= Name: res/drawable-v11/emoji_category_recent_dark.xml SHA1-Digest: 72TtZirKpfYUmBHYB1jXqck4b2o= Name: res/layout-v21/conversation_title_view.xml SHA1-Digest: Pbf7I6lbd/dAn9Aw8qYCtQhQd0E= Name: res/drawable-xhdpi-v4/ic_emoji_symbols_normal_dark.png SHA1-Digest: Qg4qhV+3W7kY6vC3Q9cwvnyj46w= Name: res/drawable-xxhdpi-v4/ic_visibility_off_grey600_24dp.png SHA1-Digest: EMdNrmJoDjeay7cUBHlX0b1lhbE= Name: res/drawable-mdpi-v4/ic_content_copy_light.png SHA1-Digest: G4hoGZhtM2+rT9QAyilbCKfnbOU= Name: res/drawable-mdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png SHA1-Digest: xtSRUA6yPL0pgx6e3nVwE/7dLxw= Name: res/drawable-hdpi-v4/ic_group_photo.png SHA1-Digest: nwCmWxGD6l0rTt3McSY3ocjDX+g= Name: res/menu/conversation_list_empty.xml SHA1-Digest: /kPBckj2D9elLCRpFOgpv0BZPBQ= Name: res/drawable-hdpi-v4/ic_backspace_disabled_dark.png SHA1-Digest: poOmHvJuBZ1uvPEANwZvD2LZUPI= Name: res/drawable-v11/emoji_category_objects_light.xml SHA1-Digest: 0mfjchr4HIqg2LJUtn4hINkhVdI= Name: res/drawable-xhdpi-v4/ic_emoji_recents_normal_dark.png SHA1-Digest: pc7ZjWa6ugeu91Y4N8eXss/bLZE= Name: res/drawable-mdpi-v4/notify_panel_notification_icon_bg.png SHA1-Digest: y9fFL7ZwxVmqnnOis/943Gj9mHg= Name: res/drawable-xxhdpi-v4/ic_emoji_emoticons_normal_dark.png SHA1-Digest: jRiMqBvgouoMECLzB/qztT2moII= Name: res/drawable-xhdpi-v4/divet_lower_right_light.png SHA1-Digest: 69RKSTN6id2LNthh544gDm1Prpk= Name: res/drawable-xhdpi-v4/ic_recurrence_bubble_disabled.png SHA1-Digest: x9jgrgeVg7r5sjgjER7QRO5r2IE= Name: res/drawable-xxhdpi-v4/ic_forum_black_32dp.png SHA1-Digest: icvjkc8Dhix7m3Pu5GeiSO7g/vI= Name: res/drawable-v23/abc_control_background_material.xml SHA1-Digest: HqYpnSNEZBO85KEVY5nqiNXSmq4= Name: res/drawable-hdpi-v4/ic_backspace_grey600_24dp.png SHA1-Digest: dsle4x3iWPHanbPGqgDa6C6L6dw= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_679 SHA1-Digest: brii8vx5U3th9K0hIr7b19MpKXY= Name: res/drawable-hdpi-v4/notification_bg_normal_pressed.9.png SHA1-Digest: tLTtgWwmC52vFV8WmsQe/d9txW4= Name: res/layout/time_zone_filter_item.xml SHA1-Digest: Ajn+lJ73oUOV2RXoYL7LLRQLGzQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_676 SHA1-Digest: 4gGxM0M6k+qIXUWmmdKRACJhT44= Name: res/drawable/conversation_list_divider_shape.xml SHA1-Digest: a6RRumBJjeheOC+CUKII6imo1qA= Name: res/drawable-xxxhdpi-v4/abc_btn_check_to_on_mtrl_000.png SHA1-Digest: pIyZCVrTOqpTmBSlPcfEpBjoxJ8= Name: res/layout/select_dialog_singlechoice_material.xml SHA1-Digest: wXy6nQUC4xRU72eF5/tCCdjY7kE= Name: res/layout/conversation_fragment.xml SHA1-Digest: hKDQgyNaO2UxROSPx71x+YUqOqQ= Name: res/drawable-xxhdpi-v4/ic_add_white_24dp.png SHA1-Digest: 03jjfUIpNA5cQ9Q0YOOfLaIQvxI= Name: res/xml/preferences_app_protection.xml SHA1-Digest: DiKzUDzp4hGHFF2ovIkOJRhzDvE= Name: res/color/abc_primary_text_material_light.xml SHA1-Digest: dCntfvSV9J+hVwyRYNjfEdYySvI= Name: res/drawable-hdpi-v4/ic_circle_fill_white_48dp.png SHA1-Digest: 0Xf59WTDmGhbNA5/xUzyt+T0Flk= Name: res/drawable-xhdpi-v4/ic_visibility_white_24dp.png SHA1-Digest: NcT+AoCHgy0H/PGv36QKQW19jCU= Name: res/drawable-v21/conversation_list_item_read_background_dark.xml SHA1-Digest: UlYh4LalEHUe5ePNFOotY3pa2h8= Name: res/drawable-xhdpi-v4/transfer_controls_background.9.png SHA1-Digest: CmzcrZNC8r+1hIxDz084H5GZEDw= Name: res/drawable-v11/emoji_category_places_dark.xml SHA1-Digest: lyHwoErSUiKm/pF3o8jRyeldiuU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZA SHA1-Digest: U0Yd53nbLp1PRjJ4mY7AZ5X63fI= Name: res/drawable-xxhdpi-v4/ic_error_red_24dp.png SHA1-Digest: FAWsyfxJi/Sl5xyojYE61hGmBLY= Name: res/drawable-xxhdpi-v4/ic_emoji_objects_normal_light.png SHA1-Digest: 0hS3kX5JkU1pYENPHjxV9LatZSU= Name: res/drawable-mdpi-v4/switch_thumb_holo_light_v2.9.png SHA1-Digest: w8Dy0yH3VYRGd70FBZl2zVgtszM= Name: res/drawable-hdpi-v11/icon_cached.png SHA1-Digest: lrYsY9ZN9V40fp3p1mzWvwtvqrI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_YE SHA1-Digest: dVyncrRBMtw9bH8eVfdkKLz+dTw= Name: res/drawable-hdpi-v4/spinner_disabled_holo_light.9.png SHA1-Digest: wiWkHAPVenl8UL3CUN7wiwB68o8= Name: res/drawable-xhdpi-v4/ic_emoji_nature_normal_light.png SHA1-Digest: 7pHBYBd5ijeoA+3wdnBydEqxiAg= Name: res/drawable-mdpi-v4/abc_list_selector_disabled_holo_dark.9.png SHA1-Digest: 0lawN0TfON5HQhuTBR7Om1xGxUI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZW SHA1-Digest: hdKqCqXMjdL67/W/uAIBtmGqRdA= Name: res/drawable/abc_switch_thumb_material.xml SHA1-Digest: GMLceoxorxIv4SfySzjNiKy4yRk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_800 SHA1-Digest: Mqvhekjlq5rLsR/GHx5/lGvy6+4= Name: res/drawable-xxxhdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png SHA1-Digest: DqYT/YomMpTVjcgLxNiWd75/E14= Name: res/drawable/psts_background_tab.xml SHA1-Digest: 9uvH4klnViC9JxQERHofBJQ0wEU= Name: res/drawable-hdpi-v4/ic_emoji_recents_activated_light.png SHA1-Digest: ubZ9biCY1B0TJL0CfSZIsrDu8x8= Name: res/drawable-v21/avd_show_password_1.xml SHA1-Digest: lEMe5NORMm0MqjqM7mrLbM1hB/E= Name: res/layout-v16/transport_selection_list_item.xml SHA1-Digest: Nw1L5zREyLlgrRDaXL+5b8Wy2Os= Name: res/drawable-xxhdpi-v4/actionbar_icon_holo_dark.png SHA1-Digest: OZCoH2YpLjQz8QeU2BFFntjlEg4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_808 SHA1-Digest: 1JDvM3Ny0doEEq4kfYb/HSkFbmw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZM SHA1-Digest: krhQ3sQmvB4147GOBnvNGJ9k/t0= Name: res/layout/support_simple_spinner_dropdown_item.xml SHA1-Digest: OMWJqSywbwWFCtiu9pGbWBrzaBo= Name: org/spongycastle/x509/CertPathReviewerMessages_de.properties SHA1-Digest: JEtZ3RAGGTVEFFC7U8WRwNNTJXU= Name: res/drawable-xxhdpi-v4/ic_emoji_emoticons_activated_dark.png SHA1-Digest: NKcdFI0XGDZytPqshETKS5SaHtk= Name: res/drawable-hdpi-v4/icon_dialog.png SHA1-Digest: IklnSOYXNLOm1UnN74LhWWzyP2g= Name: res/drawable-mdpi-v4/ic_message_white.png SHA1-Digest: c2bVOl6Nn58TYkRLcFFBLhvCzgc= Name: res/drawable-xhdpi-v4/ic_account_box_light.png SHA1-Digest: +NO6SXuOd3UCnNzugZOF8k/kjR8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_WS SHA1-Digest: czgQN40vkNfm6v4HBiKFugKgzwY= Name: res/drawable-v21/avd_hide_password_2.xml SHA1-Digest: Y1ILAI8MUyhcBfZM74I0qwm1yl4= Name: res/menu/conversation_context.xml SHA1-Digest: pOBQ7VG5CflQkUSIQKLlKKsdyls= Name: res/color-v11/abc_hint_foreground_material_dark.xml SHA1-Digest: SJ2AWiQB6PrpRYln7M4KB3leYik= Name: res/drawable-xxhdpi-v4/switch_bg_holo_light.9.png SHA1-Digest: HDeWqBG3QxzY3hxSQPNe5n720HE= Name: res/drawable-xxhdpi-v4/ic_audio_dark.png SHA1-Digest: smz6yODujOWvBZrUKiWHPz8pbYk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_WF SHA1-Digest: wPlKXUFZ6+cNCsq5WNhHLEGmAQU= Name: res/drawable-hdpi-v4/ic_video_light.png SHA1-Digest: OFuhmb6FkVlgGx5tN0GrmXb1T04= Name: res/drawable-hdpi-v4/icon_cached.png SHA1-Digest: 4olkuaNuRZ/wX2HF+Z4NdxUi/bI= Name: res/drawable-hdpi-v4/spinner_default_holo_light.9.png SHA1-Digest: wNj51XPjwkpz5i7Qe8C0psbQlO8= Name: res/drawable-hdpi-v4/ic_warning_dark.png SHA1-Digest: atnJqjEwPybNJ1v/jbI243qw8JA= Name: res/drawable-hdpi-v4/ic_unlocked_white_24dp.png SHA1-Digest: cRFRs1Eh3cra62GcixZdycTy7po= Name: res/drawable-xxxhdpi-v4/ic_dialpad_white_24dp.png SHA1-Digest: 2kSKljXa90Dj6lIYAzpnGbN1L2E= Name: res/drawable-xxhdpi-v19/switch_thumb_pressed_holo_light.9.png SHA1-Digest: vOrQRbnBW344sB4vzWZnuvuoRho= Name: res/drawable-xxhdpi-v4/ic_emoji_nature_activated_light.png SHA1-Digest: XvpYzU9xVv3mCYAbmKYPMfQAnEQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VI SHA1-Digest: foVnsR9TPZ96hWgSc6Mc+Kgysok= Name: res/drawable-xhdpi-v4/ic_block_grey600_18dp.png SHA1-Digest: vGqqYp+8vgs+ZR+mveLUXUTI/Uk= Name: res/drawable-hdpi-v4/abc_list_selector_disabled_holo_dark.9.png SHA1-Digest: vVifsTusCsEMS/QLwleavhByCls= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VG SHA1-Digest: bsJEEDbPQhpQPPr9LB1ec8bYbv4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VU SHA1-Digest: e2UqijEw6P7d7KJgJdkVC5NDon8= Name: assets/emoji_nature.png SHA1-Digest: 3LR8FZBTV9dDX+3fPaFEdfQNKkQ= Name: res/layout/expiration_picker_dialog.xml SHA1-Digest: BcWCThF9XR0J7AErzxISmZVFSz0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VN SHA1-Digest: dxE4Qq3twfhDg+ZyYzk6h8N3hws= Name: res/drawable-hdpi-v4/ic_info_outline_white_24dp.png SHA1-Digest: NJM0SmJryxtj3luuPOr/aI3zt+I= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_UZ SHA1-Digest: sBsgHk6r7CosIOw6f55wEp78BZM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_UY SHA1-Digest: utktgIUNk5EHFxnsav5wZviQKXc= Name: res/drawable-mdpi-v4/ic_emoji_recents_activated_light.png SHA1-Digest: rCiJ1YBDhy5sB09CYoWok27enx8= Name: res/drawable-mdpi-v4/ic_select_all_white_24dp.png SHA1-Digest: TBiu2wjPq2uhTrSoBxA7RRkmAqo= Name: res/drawable-xhdpi-v4/ic_recurrence_bubble_outline.png SHA1-Digest: I6Z2if2VOZmKeNfFz+NB0WreeeY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VC SHA1-Digest: AYScUug7DAQKrecThlLqEd5WXfs= Name: res/drawable/abc_edit_text_material.xml SHA1-Digest: oiA6lTI8z8nUuKbfDkfiJVYFwwg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VE SHA1-Digest: OO5py+hE86Zvsbv0+nj0TMQJ4wg= Name: res/layout/abc_action_bar_view_list_nav_layout.xml SHA1-Digest: 51o0wd1RfWEfJUq63f13AZan+vM= Name: res/drawable-mdpi-v4/ic_visibility_off_white_24dp.png SHA1-Digest: Cp1dPyMZ/vjk/a+HvVQuBfflfQ0= Name: res/drawable-xxxhdpi-v4/abc_switch_track_mtrl_alpha.9.png SHA1-Digest: O9JInV5je9E+K0VDIh7tQxIyLAk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VA SHA1-Digest: ssuLZ4eLxP2vvwVBgzwnqCukstk= Name: res/drawable-mdpi-v4/ic_emoji_nature_normal_light.png SHA1-Digest: lK6Dk+nZb3Ge0b5k5J7obZVB2sE= Name: res/drawable-xhdpi-v4/divet_lower_right_dark.png SHA1-Digest: WL+2Tj0YNEKzd378aYnxkejif+E= Name: res/layout-v17/select_dialog_singlechoice_material.xml SHA1-Digest: rpGJfV0tirikFN4Xj46vZ6sETQE= Name: res/drawable-hdpi-v4/ic_video_dark.png SHA1-Digest: Ey7pCsneWAG6ggshi3ClRmTL10k= Name: res/drawable-hdpi-v4/ic_emoji_flags_activated_dark.png SHA1-Digest: Qk4RhA+73EGzSksMNqfjsZEOHkc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_UG SHA1-Digest: 4VAIezqoEYXQtcouEZrmKdPgGZs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_US SHA1-Digest: HqBnLlxl8we2BdQfgfG7D5x3DDs= Name: res/drawable-xhdpi-v4/ic_brightness_6_black.png SHA1-Digest: tU8zMbcX+8v4izG2zUUngkyo6Kk= Name: res/color/abc_tint_btn_checkable.xml SHA1-Digest: mcx05ORnk98iArpeDWcSnC5PJOI= Name: res/drawable-xhdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.p ng SHA1-Digest: fU5gisHGI+zYrb29D3vQ+ofKD4I= Name: res/drawable/share_list_divider_shape_dark.xml SHA1-Digest: KKfJ+Fkfa2lc4+S6SckGvLXk2Qk= Name: res/drawable-hdpi-v4/notification_bg_normal.9.png SHA1-Digest: c5f+iD+5NWV0zWxwzUyh+V+QpkY= Name: res/drawable-mdpi-v4/ic_textsms_grey_32dp.png SHA1-Digest: 7XEhd9/4S8LupErI1szNn922CTE= Name: res/drawable-hdpi-v4/ic_arrow_forward_light.png SHA1-Digest: jMEH18/e6fwquQV6+DaEWLxpNbE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US SHA1-Digest: ZT1gVON7U5vU0cyi+tSUpUmC6aE= Name: res/drawable/abc_btn_default_mtrl_shape.xml SHA1-Digest: SKMRXFrMMLv2CZ0xhHWsL5pijc8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UY SHA1-Digest: yIYOGVZR77ul2hObusA46tMaGOE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UZ SHA1-Digest: eiNIbGwLuX74E0o4Ko596usCtwA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_UA SHA1-Digest: NHLdVShkLuCqtyl3+7z3Gul3u+0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TV SHA1-Digest: LMrGXio9k6kL954+IlHsjNlcGH4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TW SHA1-Digest: cT5W1rkXudYqAeqGeTxS9oScNEM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TT SHA1-Digest: s0U0yH5dscjAnTh8sj4ocqY7n2o= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TZ SHA1-Digest: SAA8d6BxG+K7F4vCBlExtqPE1O8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC SHA1-Digest: SetGpLEb1/uYPF/hUoMGB7L2LS8= Name: res/layout/verify_identity_activity.xml SHA1-Digest: sj6L78ARmd9IiJQwM+guosx/NXE= Name: res/drawable-xxhdpi-v4/ic_visibility_grey600_24dp.png SHA1-Digest: p5AYMH028t5wu1emYkHh+5SBkC0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VA SHA1-Digest: w1Ob7RZ/usfNPy9Z7hs2DvfcLr4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TO SHA1-Digest: 2WNCdtcDzpFmao6jOrfsFKkPbLc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG SHA1-Digest: Q4iBHZuUuAhPeSRQ/dKit61Pdrw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TN SHA1-Digest: Aul5TdO8m1UZFIduHGqBhtGENDY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TM SHA1-Digest: TqK1CJDn4tmApMmnaXtO+Ru9DiY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VE SHA1-Digest: xjQ+aMUsAS0GgnKoQpkPn7457Tw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TL SHA1-Digest: NIVLhqetQw6Z3X5c0/FYd/dzFRY= Name: res/drawable-hdpi-v4/ic_menu_lock_dark.png SHA1-Digest: wWkrOgayvF/16HUEuzLjCr5dF/8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TR SHA1-Digest: KjrtpwbnBEWOe6Xp5911rIcRS/s= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI SHA1-Digest: J5qIZ/dQnYLg48SP+ajWFBgDO8k= Name: res/drawable-sw600dp-mdpi-v13/ic_backspace_normal_dark.png SHA1-Digest: Jd2rzGbYe7KSdh6FIv61QwLEt24= Name: res/anim/abc_slide_in_bottom.xml SHA1-Digest: 6SIMoqi7/LVEqpyfDSSCRJ9qRR4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TG SHA1-Digest: Whu0jzsUpKNydskGqtSIJJVjQgk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VN SHA1-Digest: uK4R4Hk/ier0iSgBWiqRaFMlbdY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TD SHA1-Digest: N3g53pQRS7LmRznOhV6YWBiMUgQ= Name: res/drawable-hdpi-v4/check_dark.png SHA1-Digest: /olsGzw5BAgMsQCdc/G2C3skzG8= Name: res/drawable/abc_textfield_search_material.xml SHA1-Digest: t7aLlxSJ1jiAbfeYrS+TIQ9arVM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TJ SHA1-Digest: NHvu413s8LInAxXaqSV216Lv950= Name: res/drawable-xxhdpi-v4/ic_lock_light.png SHA1-Digest: vRmFIULSZteNv7VyxlZQSJxoWHg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TH SHA1-Digest: dartGP+4CLkopoeoVqgaDcEQ2hE= Name: res/drawable-mdpi-v4/ic_search_holo_light.png SHA1-Digest: +nb7+rYGQnKh7CsoAKxgG6iMM7A= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VU SHA1-Digest: y+wLsIMOIF651Cy6uOoBNn3K4Ds= Name: res/drawable-v21/abc_ratingbar_material.xml SHA1-Digest: lmjnTB/yh4tmiAkHkeKcav4nFGA= Name: res/drawable-mdpi-v4/textfield_activated_holo_light.9.png SHA1-Digest: 2tfE7kha7TRVkhq7YgpEw3Y9FzY= Name: res/layout/alert_view.xml SHA1-Digest: KJkimln1oNMz3/C4GGkF175t/Po= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TC SHA1-Digest: bUtXC6xypa1DHdZZI3HLMa8vabo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ST SHA1-Digest: Trx3SwRQbX2P45fPA4/ikYDloUc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SV SHA1-Digest: n+2fK9t+sy8oMw7+bRkqIf+tTxc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SX SHA1-Digest: AcaoNTcH4WcTw5nkA+qEfALkSTw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SY SHA1-Digest: dlx118m7pTffNHIC3uokalTuRME= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SZ SHA1-Digest: 0iwx55r9t0P+qVGR3LorJpxrMNM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SL SHA1-Digest: +Ialprbpk3u5rF4w11BkKCUzH8s= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WF SHA1-Digest: FPfB0sW2cbCOKbkiLIuhbZjK1pY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SK SHA1-Digest: APpOTRTe4mLqbaaOuWxGdQj0qws= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SN SHA1-Digest: YqgXESj4KBdRhMOXhXCNxMjb+1M= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SM SHA1-Digest: tfI70YIJ8nJs5kHHWT2A4HLjmBc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SO SHA1-Digest: FBCYOe8abRWudaHxWC6jIBo8wus= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SR SHA1-Digest: c99QdQgXb2dYO3HlzuXnjILlM+c= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SD SHA1-Digest: 5UXZhfjjkzOt7i/0DowUSEqMxFM= Name: res/drawable-xhdpi-v4/ic_backspace_normal_dark.png SHA1-Digest: 5yDZmZceUzVe1iekfJAVc2IBmYU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SC SHA1-Digest: 78+gZzPZL5SnTu/+44ffkMNgjpY= Name: res/drawable-xhdpi-v4/ic_check_dark_disabled.png SHA1-Digest: MViTJyK0ai5eD+lcCbB/mfxqh7I= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SE SHA1-Digest: TCL/CAS8dInZOa+XOxk+S5GL/K8= Name: res/layout/log_submit_activity.xml SHA1-Digest: 5SPs9x/Yx0vnD3sfhyN1L9CePNM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SH SHA1-Digest: fAnqEs3w2n4PGMLOti+Dz36lvtw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SG SHA1-Digest: e9DnOnhdZCVdEi1GaqvAT04papo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SJ SHA1-Digest: FP+kcAEQH8XKo4FcaUfms749qjg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SI SHA1-Digest: LL02jvnO1WRwfKkV3M/73Kt+i78= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WS SHA1-Digest: fE4AFos82Fa50/1pJ5MJ6FheYns= Name: res/layout-v11/conversation_activity.xml SHA1-Digest: +jzmxtjYsZ1jifdMk6T/lQIXibI= Name: res/drawable/notify_panel_notification_icon_bg_tile.xml SHA1-Digest: Puty61iA1yiPjNAnY1HrMV4r8fI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SA SHA1-Digest: Rw6bdwvuN6ckE3w54vszo+ILgUY= Name: res/drawable-mdpi-v4/ic_emoji_symbols_activated_dark.png SHA1-Digest: fd+FJxbgWnlzIzFFHDxRKwmRVSw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SB SHA1-Digest: n5X5IcdT/PcrFPlZTOV6eelcnRw= Name: res/drawable-hdpi-v4/actionbar_icon_holo_dark.png SHA1-Digest: AehHwQaKfDLJ7NPJ/kpPofiunqA= Name: res/drawable-mdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png SHA1-Digest: M5x5yhIyfAE00veLbT8o+OstFp0= Name: res/drawable-xxhdpi-v4/ic_emoji_emoticons_activated_light.png SHA1-Digest: +X71FEk4oZu8oDOebWPW3NaIa70= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_RW SHA1-Digest: CR1Ctd1AWQ7U2YnBaMfbdhpJLoA= Name: res/drawable-ldrtl-mdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: d4vgddzsyizuUaFKPS8KV2adOac= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_RU SHA1-Digest: R902pnYPoqWzcXmIui+lv2vqM2Q= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_RS SHA1-Digest: bIAXMHU8vC6J7U+FkIbvJHQ3v+g= Name: res/drawable-hdpi-v4/ic_recurrence_bubble_outline_disabled.png SHA1-Digest: VmO20R2v1KWG/YAVUA4jPmlr6wQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_RO SHA1-Digest: P/Uot9HnhODLuFy/liTyAT7xRSQ= Name: res/drawable-ldrtl-xxhdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: UcEHcms2r2N9yOnGvBk/CGupFMw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_RE SHA1-Digest: WmnEcbAYuEoK0pjJ4NeAwt1zaDc= Name: res/drawable/abc_seekbar_tick_mark_material.xml SHA1-Digest: 2cfdudxPpdKT3phtRi1TXi7pHmE= Name: res/drawable-xxhdpi-v4/ic_emoji_flags_activated_light.png SHA1-Digest: tnQREFYcdkUKF+iId0ThBnT9utk= Name: res/drawable-hdpi-v4/ic_textsms_grey_32dp.png SHA1-Digest: l26hedZwIH9Yw+KlHBEHJu1/9pc= Name: res/drawable-xxhdpi-v4/ic_unarchive_white_24dp.png SHA1-Digest: XglYIsRIEU9WS/bkj4+V64hED6Y= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_870 SHA1-Digest: iirE1LkRVWUWs3G+Wot8wka0/VI= Name: res/drawable-xhdpi-v4/ic_info_outline_dark.png SHA1-Digest: A1oNDHh2looWz3V6e7KZfKEwDng= Name: res/drawable-v11/emoji_category_places_light.xml SHA1-Digest: Bg5yB7phDN6BvS8VFb1FcpSSPq4= Name: res/drawable-hdpi-v4/ic_mood_grey600_24dp.png SHA1-Digest: anUXtsk9vBN7WMxFmaNPS0hfqfE= Name: res/drawable-xxxhdpi-v4/ic_textsms_black_32dp.png SHA1-Digest: DyYIIIDS2lD7lKXGKwqgVZ8H6Ys= Name: res/drawable-xxxhdpi-v4/design_ic_visibility_off.png SHA1-Digest: 7f7aSHLckgKMnYWA1BlMPU8wxtI= Name: res/layout/share_fragment.xml SHA1-Digest: 9VHrZXYRt6ll801+ePxqAS3Ftko= Name: res/drawable-xxhdpi-v4/abc_list_longpressed_holo.9.png SHA1-Digest: 2lRuxodMxnuWn+IclaJShuAV5+Y= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YE SHA1-Digest: otqw9kQnfp2A26BnjYrGGK7agAI= Name: res/drawable/abc_ratingbar_indicator_material.xml SHA1-Digest: 6gbbPFsN/J2Dxd3gmFcvpI6abI4= Name: res/drawable-hdpi-v4/ic_keyboard_white_24dp.png SHA1-Digest: bpM7nSvSapMQ2eXOFULJ+QgSLRo= Name: res/drawable-xxhdpi-v4/ic_emoji_places_activated_dark.png SHA1-Digest: uSERXFuo7exkXfiNEv/W3RsSSCM= Name: res/drawable-hdpi-v4/textfield_disabled_focused_holo_light.9.png SHA1-Digest: HeYl/nhHnXmTW6qa4lu35dzb3EY= Name: res/layout-v13/message_details_header.xml SHA1-Digest: dzr+nKgerzoqIPZhx8kULhTvIqA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YT SHA1-Digest: QUIDz2h66HCRyArqB8mAs7C9zGs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_878 SHA1-Digest: NYlZaMkwixLnHvaYfXzZ2Hg2Uzk= Name: res/drawable-xhdpi-v4/abc_text_select_handle_right_mtrl_light.pn g SHA1-Digest: flcizXeMrBA+Puf2HkSGneGeqXI= Name: res/drawable-xxhdpi-v4/textfield_focused_holo_light.9.png SHA1-Digest: 3G+rFDxksENpDFDnnWmhx48KLpA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_QA SHA1-Digest: vgGevfjW4kSMRwT8SBzfDcMgunE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PA SHA1-Digest: g+cMBunvvG0x/NBD106EV2b0Zro= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_883 SHA1-Digest: 1yCxVXC6jU71UJIsJjT/zZvOlFo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_882 SHA1-Digest: Ww3F4MLSHSlpSGrZX3kXe8x+Xl4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PE SHA1-Digest: Swfk7rt9197+zIcLj/mvi1BqAGU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_888 SHA1-Digest: WNCT/ilHaJtsAO+IaHBVN0fxe7Y= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PF SHA1-Digest: OaVEczR2T7c7UMnRgyj+60lYsRs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PG SHA1-Digest: 5pD4SBpEfIENlVenA99QeZ4u8lg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RO SHA1-Digest: Sg7TmE2mL2KHhy156iS+2WLA/ds= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PH SHA1-Digest: WYtmudyR5ZkOG4VsCCuMjm0e9v4= Name: res/drawable-xhdpi-v4/icon_lock.png SHA1-Digest: nBj3JWja8wKe663qJT8bnEgGSr4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PK SHA1-Digest: 9YuRLN1ojY+MfVYKz4j2dFy+RTY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PL SHA1-Digest: rtVjcwLWkrhfKZelFtK9T/AMECY= Name: res/drawable-xhdpi-v4/abc_ic_star_black_16dp.png SHA1-Digest: qfvO9I4x0UCtfyxe9QDR8Aj93fU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PM SHA1-Digest: 3tAr+G/rtYrsjn3tCmum4OmCH9Y= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RE SHA1-Digest: ospVsbq3w3ACp8QAb9mEBmb4Ly8= Name: res/drawable-mdpi-v4/switch_bg_disabled_holo_light.9.png SHA1-Digest: 7UJHiJVoqpy2dRzN2BDZ8a3zlsk= Name: res/drawable-hdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.pn g SHA1-Digest: ADDoWZfz0cLwg7Xh81feHpftgWM= Name: res/drawable-mdpi-v4/transfer_controls_background.9.png SHA1-Digest: 0VZBt8Ugd3Md5Tz54Fi+nEEj8Dc= Name: res/layout/abc_expanded_menu_layout.xml SHA1-Digest: +exI9wLmf+pukhmoRdN8fQSVI20= Name: res/layout/conversation_activity.xml SHA1-Digest: JCuGu4e9AFvpmLPQw/eSCuyIVpo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PR SHA1-Digest: uhjkEX5co8+MDakVUl06dg9UrQk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PT SHA1-Digest: buewk/3TBiLhEHmkMB/+vrstIj4= Name: res/drawable-mdpi-v4/abc_cab_background_top_mtrl_alpha.9.png SHA1-Digest: kxSGYJoMOYG0HnE3IprNwOq5ou8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PW SHA1-Digest: lmwDhF2OtKNPjvF9kgQkmVYNac8= Name: res/drawable-hdpi-v4/abc_list_focused_holo.9.png SHA1-Digest: z5rmTEqRHuMsX24l4sP3B88dR3Q= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PY SHA1-Digest: LoxH7CJoB2xEj6Jt+hzSIAASwP8= Name: res/layout/emoji_grid_layout.xml SHA1-Digest: RGyPbcQcMAiCBpiJs8xEo+ouCjg= Name: res/drawable-xxxhdpi-v4/abc_btn_radio_to_on_mtrl_015.png SHA1-Digest: je+36x1Dzaic4ajfPsRCU+apd1k= Name: res/layout/abc_alert_dialog_button_bar_material.xml SHA1-Digest: 1EVmc0n14dsx+pzzxfAjcRa8AuI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_881 SHA1-Digest: fmYudsEOVI0LO3liKowBijUFG4k= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SK SHA1-Digest: forjBE2veoc0b7N9u+nMGs1DwGU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SL SHA1-Digest: WX0pXeNsWKDaChCoQEvH7TMJ7sM= Name: res/drawable-hdpi-v4/divet_lower_right_light.png SHA1-Digest: Sn2XrywfVIndmHvaI9ZNXf7SIAs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SI SHA1-Digest: RpNbJSYp9chNDX7VyEHiYFrU4w4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SJ SHA1-Digest: KTgyCNWF0btdbmNTedtXPIZuPVc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO SHA1-Digest: EfoQJModNGFqwVfIBRht2Mnw+Qw= Name: res/layout/abc_dialog_title_material.xml SHA1-Digest: Fda1mG9GqBE3tbcI/D3sxasjrMg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SM SHA1-Digest: hLYQJPXcUyDq8pkRE8HxCbO0lAU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN SHA1-Digest: NJsY1EG/lY+wIQHEiFgFDofenNQ= Name: res/drawable-xxhdpi-v4/ic_backspace_grey600_24dp.png SHA1-Digest: 6tk+OYq31v63pXbYsNu6XgSVlOI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SC SHA1-Digest: abjCxJ5NKjic5Q6+0u6Cgy3eAQw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SD SHA1-Digest: gr0PYn1eaG+kfMRct/KO9mFJZDU= Name: res/drawable-mdpi-v4/ic_unlocked_white_24dp.png SHA1-Digest: MFpgWW3bgmwfNQYBdkV1ru2qTwE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SA SHA1-Digest: Q1fZAHVGEiFvJq4xmrYo6DDjCYU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB SHA1-Digest: cFAxt8BUBueKLMX3n3nIrJVP2Yk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_OM SHA1-Digest: JxH7S2qXvrgvG8pty7IgW54Yc5c= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG SHA1-Digest: ymmFzkaI5Nh4wtYuSKk8byIyDNY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SH SHA1-Digest: wK67hSi3PFaLFfs5vCH6M2uf2m4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE SHA1-Digest: Xye654+IFUlWplS0j4hee/fyRXw= Name: res/menu/conversation_send_drafts.xml SHA1-Digest: OfffoLsFKNX8gA1QfLtk4YS2aPg= Name: res/drawable-hdpi-v4/ic_attach_grey600_24dp.png SHA1-Digest: QsTRfDdAWEFSFhbHCnCdQ2yF8xQ= Name: res/drawable-xhdpi-v4/ic_emoji_people_normal_light.png SHA1-Digest: zilt6IdWFIq64vxZpzlQFYJrCiQ= Name: res/drawable/emoji_category_flags_dark.xml SHA1-Digest: 0JFf3OxcA6r2FLsTS+D0fkmVgD0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RS SHA1-Digest: GgOHkc6UGGXJ9k4/dDlXUgJFWx4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RW SHA1-Digest: 1M3ux4iVBQq7zDB55HkliabGw1Q= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RU SHA1-Digest: sbdtUrhxGryDYlaGpivtZ431g6w= Name: res/drawable-ldrtl-hdpi-v17/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: mmQqcznq/m4DDsuC52g4NiTzwA0= Name: res/drawable-xxhdpi-v4/abc_scrubber_control_off_mtrl_alpha.png SHA1-Digest: 0Pl9UW/jK8MjxYht0b46LIt5W8w= Name: res/drawable-hdpi-v4/ic_app_protection_gray.png SHA1-Digest: 18QacvjMEyh+2FcXmY+26N30YEE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TN SHA1-Digest: 99h57l6ZBRjnr+inn+c8TCUFo1I= Name: res/drawable-hdpi-v4/ic_emoji_symbols_normal_light.png SHA1-Digest: XuujeVAxdAw7FpLFvFI8LG6UwnA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NC SHA1-Digest: 4P4GNXoqdbXhV6aRFFcU6H3wdL8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TO SHA1-Digest: APU4R6D/Vv8viWygfXSTwlGuGuE= Name: res/drawable-xhdpi-v4/ic_advanced_black.png SHA1-Digest: aEWGKq2oc0pmwD+CCMp/K/m+PhQ= Name: res/layout/time_picker_dialog.xml SHA1-Digest: DqL5xtGQIU6GDmEWu+L0ONOXZJg= Name: res/drawable-xxhdpi-v4/abc_textfield_activated_mtrl_alpha.9.png SHA1-Digest: i8wYHM8BdG6ZwwbsPcMgrtWVs1o= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NE SHA1-Digest: 0fayia/F7Ab9umXaPcgO8TOWNNE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TJ SHA1-Digest: WYEOoOaJuCUtX/nB3qQzbRncIg8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TK SHA1-Digest: Z+EAMEK1Vmga8/d1MKXEFWkn/fc= Name: res/drawable-xhdpi-v4/spinner_disabled_holo_light.9.png SHA1-Digest: L3IeDF0w/S5ny9zc564klAP7kUI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TL SHA1-Digest: lrpr3SLFw4KVzXShLgq53Il63W4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NA SHA1-Digest: bEb/e4iGvbSt7Yw+tftI2Ep01c0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TM SHA1-Digest: UW1s3z24ewJHVqxHCwrAQyvDsVM= Name: res/drawable-ldrtl-xxxhdpi-v17/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: RT5SHZxO8jR3cgSzvKqbmSM4LGU= Name: res/drawable-hdpi-v4/spinner_focused_holo_light.9.png SHA1-Digest: 3zmmBeKWyKRhH23IcfeYZhVwLyY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TG SHA1-Digest: e9CF7qT76tycOG/U9vtloxhkk9M= Name: res/layout-v17/abc_dialog_title_material.xml SHA1-Digest: G4wrwZ9xzbCrJ28bLcqb1dFQec0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NL SHA1-Digest: 9jTzxoIyo+vdoFNqt44z/+Qxuc4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TH SHA1-Digest: XFo+EspCXG/steY9Q8YrmvXvgEA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NF SHA1-Digest: JzcCqh9/sW1t7SXSbk3m5rijguQ= Name: res/drawable-xhdpi-v4/ic_group_white_24dp.png SHA1-Digest: q2Y3MKCRGPy99OB9eBgtzUxGBZM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NG SHA1-Digest: 4/KzgayS6YA+dWfJHxJIX25hl3w= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC SHA1-Digest: PUm0fbZcNeYyBF02GBCV5pIMlYo= Name: res/drawable-mdpi-v4/ic_backspace_disabled_light.png SHA1-Digest: mzPE8uTj99CEszbIAsFwvL1VkKE= Name: res/drawable-xhdpi-v4/notify_panel_notification_icon_bg.png SHA1-Digest: qZTXDPkLdLdgn9U7jvOCObBW7aU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TD SHA1-Digest: D6EcGdqsak6vSLimRmtu0bawkC0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NI SHA1-Digest: bAiz96WeXPimGsaoKxDZ5n3pE2I= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NR SHA1-Digest: /k8OZAhVw2vV7bJ7zVJhVjLKhk8= Name: res/drawable-hdpi-v4/ic_volume_up_light.png SHA1-Digest: 4UUxWJRWTZqLoMDVeKqWA4uRqtg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NU SHA1-Digest: rOBttdjHcKcW1VoXCPnSzpsPKtk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TA SHA1-Digest: UA/Ak8WQNt/+M+jCUt/SQcJ18E0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NO SHA1-Digest: qsRVGM5vdCzTjiYG+AUy3lN/dT0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SZ SHA1-Digest: mGbJkioIUevT5sqH50oxWJd04XE= Name: res/drawable-xhdpi-v4/ic_emoji_people_activated_light.png SHA1-Digest: HKfxHlBlqGPdoLM2e6sXxktasF0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SY SHA1-Digest: bxw3Q/FAMiLM6tf7R0mQd2X8mf8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NP SHA1-Digest: 56qxXcseP4XTSSOzVYBJLx+PU3E= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SV SHA1-Digest: 5VE8AK9Pgejuq7rHq8Kj+9NGGKo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NZ SHA1-Digest: FI7sSj1OC0j35Fe/QVvtQV7noks= Name: res/drawable-hdpi-v4/ic_lock_white_18dp.png SHA1-Digest: 6yFngiOvomqtBVlLBwYd3MNNRPA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SX SHA1-Digest: yKBJ6fmDKgMHeGOBhH8pCF9urKM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SR SHA1-Digest: z5DFGYQVr718sSmTQt8sg8TrFR4= Name: res/drawable/unread_widget_icon.xml SHA1-Digest: U6Et7hDtdXBlrmcHiRFGcEJ6FiM= Name: res/animator-v11/scale_with_alpha.xml SHA1-Digest: VoONsngcyPaOcsxveoWj4d5Ytsk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ST SHA1-Digest: 0DyYfyWReGAZQklqQD/gI+Ae/X8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SS SHA1-Digest: I61gNlKBaXoFueer87eVyHqgHT4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MC SHA1-Digest: DJPCVBVZWaQmLjOosHspJvKuAb4= Name: res/layout-v16/contact_selection_list_item.xml SHA1-Digest: DcLhdrS0ZEwJjTo1M9SMxUKo+Jg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MD SHA1-Digest: dSEMtLs1XQZghSWnI7Bb70hHPmY= Name: res/drawable-xxhdpi-v4/ic_done_all_white_18dp.png SHA1-Digest: GBoQjEB/sF3zobnJ4+liG+V9zDU= Name: res/color/abc_primary_text_disable_only_material_light.xml SHA1-Digest: TpKwzuD1e5/ZOIvTHOUHlcLNSZA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MA SHA1-Digest: 8iGu/ODXHZBORf6zi0w3x2gCmGA= Name: res/color/abc_hint_foreground_material_dark.xml SHA1-Digest: pLQ1N5EZpBcE07mV9IB64JqJT/Y= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MK SHA1-Digest: kO2FRje+Jg4ejR6sOBgvrE323r0= Name: res/drawable-v11/psts_background_tab.xml SHA1-Digest: +upC5kygYEM4a20jZXPtDpT3kL4= Name: res/drawable-xxhdpi-v4/ic_emoji_people_activated_dark.png SHA1-Digest: ttWb4gx2rLAeA4LgaEFp7jwzay0= Name: res/drawable-xxhdpi-v4/ic_clear_white_24dp.png SHA1-Digest: Wg1iR9xrSa40Q3bt3RWY7jXg5GQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ML SHA1-Digest: x7VpHNww61rEud7WmOSbxt/Z8O8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG SHA1-Digest: Ckx6wsAY/qzwUIKjOLclgOcmWWw= Name: res/drawable-xhdpi-v4/abc_text_select_handle_left_mtrl_dark.png SHA1-Digest: mMc2vLuahJ9g89/mLStEyPQTEdM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MG SHA1-Digest: D4FQgAs1CLqaS3oinb+PQwWXO/g= Name: res/drawable-mdpi-v4/ic_emoji_emoticons_normal_dark.png SHA1-Digest: 34cW3jlK7zby1nmUyd/JdKqDzmc= Name: res/drawable-mdpi-v4/ic_emoji_flags_activated_dark.png SHA1-Digest: hmw72OlceE2gTL+0XuAYVvUmuuo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MH SHA1-Digest: rnRIgqHBiNWIkxhqmnbXsRCKCxc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ME SHA1-Digest: n6t4oLaUnGIBsRtLF5crGIkT208= Name: res/drawable-xhdpi-v4/ic_recurrence_bubble_fill.png SHA1-Digest: kzOwmlaEQx+ZqZPmsHPah/fUdkc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MF SHA1-Digest: W/pThMhbGUCY5UEKKIcPXjW2rtQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MT SHA1-Digest: 83r9pr9S/M7sWHTeIw5LO2cKTL8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MS SHA1-Digest: cKleUHuWOTFKI6PUj7MpJaWWDsw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UA SHA1-Digest: Hf41BfpvHVZ8y4JX8M4kFv20Id8= Name: res/drawable-mdpi-v4/ic_group_grey600_24dp.png SHA1-Digest: Jz9hBapEr6aEW0ZxbgvHAGS3XhM= Name: res/drawable-xhdpi-v4/ic_save_white_24dp.png SHA1-Digest: xHUf3n0ocqUhiy7UtjDi11AMv28= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MR SHA1-Digest: 6pGkZclc2L6OFd1i1JDSLRFTZ6s= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MQ SHA1-Digest: LM8Co41lxsX2sohhmT8fBuVcYO0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MP SHA1-Digest: gd7vJ0VsE1kCxIoPhIm7LU5u4wc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MO SHA1-Digest: CSF1YTOB5p2xxh6vMCGSGynJStE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MN SHA1-Digest: waWo3Ma0BJ2xY0R/F6roBdVVbiU= Name: res/drawable-xxhdpi-v4/ic_play_circle_fill_white_48dp.png SHA1-Digest: +/+2KFT28uil40tRFWAnvEoR6Jc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MM SHA1-Digest: cOvTLbhfce5Mw+usAdWmYHyZSng= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TZ SHA1-Digest: uxvRqVZhPWcZIaOA+iEVU/Qayi8= Name: res/drawable-xxhdpi-v4/ic_launch_white_24dp.png SHA1-Digest: 5daD4D1Yk5OzmCD6VqLaIW3ZmIU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MZ SHA1-Digest: ERm3whxMRK0XWfwBgU3rQOKLKcA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TW SHA1-Digest: rd7BBrecyPJGMbMnXQmVSiuk98k= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MY SHA1-Digest: P4HbLBcRtw9vwWYcNXcM6Qkm8Ug= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TV SHA1-Digest: /hUsEJmae/km3CCJd2yvKX4Y9+c= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MX SHA1-Digest: fYLnvB9AT16JOqwbYi7VM0pzqSs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MW SHA1-Digest: vbx37+UO23fen6k8yZAZ/IreLDs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT SHA1-Digest: UvkXWknjHX3n38lXB7kMQj/742Y= Name: res/drawable-hdpi-v4/ic_emoji_places_normal_dark.png SHA1-Digest: bJ7uzN61XGZA78H7XHImWMvDu58= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MV SHA1-Digest: xlTWRs6OG6evca/8usxB1cHl3ZA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MU SHA1-Digest: 42DXRc0ck2A2UY9S1ZETptWFiDE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TR SHA1-Digest: hiO+Nyit+r48l5uIP+oHf89sgOU= Name: res/drawable-xxhdpi-v4/ic_message_white.png SHA1-Digest: Iu5pR15zuRxq+YyUPb0wFfPOGu4= Name: res/drawable-xxhdpi-v4/abc_text_select_handle_middle_mtrl_dark.p ng SHA1-Digest: hzjpkT1X7DDbbnWVWCVeingW0Rs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LI SHA1-Digest: DKsH7Jrm58WZMdEDJDCzC/VKTTE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NA SHA1-Digest: 0yZqQf0O5Oku7xt2tXCgnZotsv0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LK SHA1-Digest: jUllmpXcki/+3d7iX12FcRbdmKY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC SHA1-Digest: jEbnjwsrwDHBJn5MiH4px1Wlal4= Name: res/drawable-xxxhdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png SHA1-Digest: iuBU+dvN1PvZNfhVx+viSlB9A8A= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NE SHA1-Digest: 7JI8KCU3Lxp9ktmPitxqtWYI+Ro= Name: res/drawable-mdpi-v4/check.png SHA1-Digest: q4mS1hYZGjnuqVbkX+UXqtjOpl8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NG SHA1-Digest: S0FtuHhYtjwNyVmFQ6ocBHxEZFQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NF SHA1-Digest: kMLSUq9zScIzd6XEFEgxVM2z0GM= Name: res/drawable-xxhdpi-v4/ic_recurrence_bubble_disabled.png SHA1-Digest: YS63bBmWQvSy3dTfrlKeHhouJP0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LA SHA1-Digest: s0kOLL4WkJ5cUeLueaZUFc6j6rY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NI SHA1-Digest: ZGHWgwjHPoQM4bcUmwGprgLkP6g= Name: res/drawable-mdpi-v4/abc_ic_star_half_black_16dp.png SHA1-Digest: thKivdtNhA6Rr/l43Nn1hXPM3hg= Name: res/drawable-xhdpi-v4/ic_emoji_places_normal_light.png SHA1-Digest: ABnnSYU1O8on+DPSdiEWdcQDrMM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LC SHA1-Digest: 0kAiJcnznJ8l+5FzyRrxSZlrXJQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LB SHA1-Digest: 1C5cZVqlPtxdRN6c4OEtBi7aiOo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LT SHA1-Digest: 7gVbLYruXmfEOBqIcEuT7LBv/0o= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MK SHA1-Digest: ehSVzPzw8AMYov5oHC9GKqUfi64= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LU SHA1-Digest: z9ysDmzUhkTDE4NvAwDyPhR5JOI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ML SHA1-Digest: fD4KOBkpbGD6VIao83JV1SMhF9I= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LV SHA1-Digest: LC24QLKfNlKOiTJtOdz3z5ch0Yg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM SHA1-Digest: dEqM5jViAa+i4qT+gHdxTyHI0qs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN SHA1-Digest: RWGHiwf0CTtz0N+Lq7lElVKq7/w= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MO SHA1-Digest: jF/fcLgPaeui3HvlwfwqLNiBHFY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LY SHA1-Digest: C7Znjp7bCWkxeaUTMH4HD5NpndM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP SHA1-Digest: ukS6QltS+3SCKS83yLkKjhyFsHs= Name: res/drawable-mdpi-v4/ic_add_white_24dp.png SHA1-Digest: ibLr0ZOAKWtf1rQ2wtq3k3JVKUM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MQ SHA1-Digest: +0Bg5XIouXpcuV79FPVgtS9YHJM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MR SHA1-Digest: YKD1Q6kRPCdnb6MHCjRouTiH0kk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS SHA1-Digest: t0l1yeTr7yOHKuaQrFKIDma8cbk= Name: res/drawable-xxhdpi-v4/ic_emoji_objects_normal_dark.png SHA1-Digest: QVCUohZYOYpcrebuPU/ytqbzjpk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MT SHA1-Digest: eUk76xeEBLxlY3kag54gEtpx0DM= Name: res/drawable-xhdpi-v4/ic_app_protection_black.png SHA1-Digest: sx4KDtqwf98z7M9vnu6jwKO7/9U= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MU SHA1-Digest: pMM4Ov3SvdHmIEGwtg9o/jY+3go= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MV SHA1-Digest: UlZYa4EzSlMtn063PMuVoxMY534= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MW SHA1-Digest: iUXT4jwd/d2lJn1vQJZsN7kJ050= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX SHA1-Digest: GrVNqkVwhbhGqW8CxLWi1StAwcM= Name: res/drawable-mdpi-v4/ic_account_box_dark.png SHA1-Digest: ktxz2M2qiGpsbvBGd3qPMazfsug= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LR SHA1-Digest: dGWTtCyU6wu0jranhqTgoNxPkQ8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY SHA1-Digest: ajCAigFehz2F5yVh7vx0ZrLyvGY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LS SHA1-Digest: Oyd62Spp8f8rC6WspMX71/yCc7g= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MZ SHA1-Digest: OK8y+Eire3EtIQSgccV+EF+x5Lw= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_27 SHA1-Digest: mGMwCzLy54rC/B9P+BWgJ/aqtLI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KE SHA1-Digest: zztIQwqnXlb8rVJX8QWI+H2Tgq8= Name: res/drawable-xhdpi-v4/ic_volume_up_dark.png SHA1-Digest: pA6ZpR6tCw3HHDSkTBful+I1V4Y= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KI SHA1-Digest: VniZugADPcLjegwJKsQgkwTxs68= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KH SHA1-Digest: olRWDZcTY/K+QHCL1hCIf0UK5M8= Name: res/drawable-xhdpi-v4/ic_volume_off_grey600_18dp.png SHA1-Digest: 1nxne2iNm4monE41EEF68YW7x2g= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KG SHA1-Digest: dgPXXJMllCLT1joDXw28hAdnkSE= Name: res/drawable/error_round.xml SHA1-Digest: n67C+HKq1nJ8tJ9rWOj80CdjZKo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NO SHA1-Digest: RyPkLVH50Vzt/N/2+fORP5U7vqI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NL SHA1-Digest: Ni0NAn1V6pDW5c0ZQVQ8Y26AfQ4= Name: res/drawable-xxxhdpi-v4/ic_pause_circle_fill_white_48dp.png SHA1-Digest: dcZi5ZfI1VUvLPzvFv5KKjuQD1M= Name: res/drawable-xhdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png SHA1-Digest: FIm3sVpLJf34SkU3SQ/694URh1w= Name: res/drawable-xxhdpi-v4/switch_thumb_activated_holo_light.9.png SHA1-Digest: nbKHqGXjI9Sq2g21/0iabe6/LKs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KY SHA1-Digest: /jrOTkkY3ySyoVpJPAafvKMwicQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NR SHA1-Digest: ZiSjQbpr0HhOtQfgL64vSncOTpQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KZ SHA1-Digest: j54PEwVb6Bewxs6wGGAd2lRgo50= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KW SHA1-Digest: AEjoT2OX4gkA43hFr/jGzTd2elU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NP SHA1-Digest: ffyHariyayWa3j2yopQbcKO78B8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KM SHA1-Digest: t7Lbz+yfyiEGH5H8kDZv0c9Lsh8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KN SHA1-Digest: le+ClvBNRmQqVWX1ltCvNXt5Cy8= Name: res/layout/conversation_item_header.xml SHA1-Digest: TQbJlk6h+rmcWOVwj736lG7Y/Gs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NU SHA1-Digest: 18lDHkcMGhJXZ4db4h6re3N2SZ8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ SHA1-Digest: A5wiCEHZiKMWgT1jvFBm6K4t2Sg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KR SHA1-Digest: OaYfTpWALiQjIbGiacNyTHYlG/0= Name: res/drawable-mdpi-v4/abc_list_pressed_holo_light.9.png SHA1-Digest: +VIFOUvUwxbnTdHmmjA8LWrUN0k= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KP SHA1-Digest: uUZIp+MjnW0fcz596c9DWCPM1bA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PE SHA1-Digest: z8Bcu45r+44AYANbA4s6ua6RPow= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_JE SHA1-Digest: o0+QID3niDoDG4kF8SCTAcrq9xc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA SHA1-Digest: 5KTKJLRc9TSE31PvMjUKXpez3Tk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PK SHA1-Digest: cLiN3jb6RQFdjfoAiZz5X/JuBgw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PM SHA1-Digest: BRiUoNKU3EWol0KAjZK/eoQiaWI= Name: res/drawable-xxhdpi-v4/ic_brightness_6_black.png SHA1-Digest: YTC3G4WDqRU9WhknJ2LGEGr3gr4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PL SHA1-Digest: 99SD+7wBWg5i3ULzOfvsIBdcfxg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG SHA1-Digest: 8pnXE42OyAMEI/fTSPobSACXJo8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PF SHA1-Digest: iVtxzepigYBrioYpgjgL4/zV11M= Name: res/drawable-xxhdpi-v4/ic_menu_search_holo_dark.png SHA1-Digest: I/r2cvlknD15rUGXW5nm9DVF/qY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PH SHA1-Digest: 7hU7esILVhSkqD8f6sDcuxi7c6w= Name: res/layout/abc_action_mode_bar.xml SHA1-Digest: df/w06TWwAPAlfisvfE5RPZOdkA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_OM SHA1-Digest: enHQS8cZb0bMHhaWZSHw7JjV/5E= Name: res/drawable-mdpi-v4/ic_circle_fill_white_48dp.png SHA1-Digest: +hGOL77Oa+RQFPfsSRc5ZlJEP8c= Name: res/drawable-xxhdpi-v4/ic_brightness_6_gray.png SHA1-Digest: ZXvqne3E6RV4Q7axhDNG7G/3KYc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_JO SHA1-Digest: cDydACEnjJQ3VRPft2ueyyOrZUw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_JP SHA1-Digest: By35s5+LL76yKqlRkmmHS3KMKVM= Name: res/layout-v16/reminder_header.xml SHA1-Digest: RXIuzBt+Tjfn0jdUoSQcUcdbJ38= Name: res/anim/abc_fade_out.xml SHA1-Digest: MfCV1efdxSKtesRMF81I08Zyvvo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_JM SHA1-Digest: ykBAAUK7ebJec7pPi/GPbrtNwV4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IE SHA1-Digest: 8m3bYBFol+2VXXdT0StUEQv5G/s= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ID SHA1-Digest: CPgOxZPJjD+1sj2wxoAuKLnlZKs= Name: res/color/date_picker_year_selector.xml SHA1-Digest: mzic+nE8/95kRepfSgWKMe2If+Y= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_QA SHA1-Digest: Q7+/DsbqBWpcodl5tp/zNX+HsU8= Name: res/drawable-xhdpi-v4/abc_list_pressed_holo_dark.9.png SHA1-Digest: I+f9Vf8JVX6hz0eqBuaNI+f4Rtc= Name: res/drawable-xhdpi-v19/switch_thumb_pressed_holo_light.9.png SHA1-Digest: YcyJfNOau/BOW/i7/AKIHt1H59o= Name: res/drawable-hdpi-v4/textfield_default_holo_light.9.png SHA1-Digest: xrFOt/AjhDtJdBUDzaDAa/6vFAw= Name: res/drawable-hdpi-v4/abc_list_selector_disabled_holo_light.9.png SHA1-Digest: 1gu0+JdGxgtkd7hnwaQbfLEaaZc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PT SHA1-Digest: sQPprObv8wvwXNJSMeaTVSHxgIA= Name: res/drawable-mdpi-v4/ic_arrow_forward_dark.png SHA1-Digest: O5Qd9Jq8h7GlnewL1WOPfkZghrs= Name: res/drawable-xhdpi-v4/ic_movie_creation_light.png SHA1-Digest: zN1pLotK/okrFKF+MCECFOIPPoY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR SHA1-Digest: ZysPJunUa0T0rACj7ALZYCvs6MQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PS SHA1-Digest: SvxLEqOsfh1dOAUs1R8YHShra/4= Name: res/animator-v11/upper_play_to_pause_animation.xml SHA1-Digest: CH6i3wvXxZikQo+RDdI061uMQ44= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IS SHA1-Digest: YUWDp9NUreWoOr7ROJl5u3DmTFA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IT SHA1-Digest: KC5y45aL2Nc7FBvwsUqiAFxZ8AQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IQ SHA1-Digest: LfzsWJsxP3a6Qf8adFv3LTQrnzg= Name: res/drawable-xxhdpi-v4/icon.png SHA1-Digest: DF9F713jv+PmMazzAZGr/P2JxVw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IR SHA1-Digest: +7hdHrc9JJbgo0k9qBZad56aluk= Name: res/layout/led_pattern_dialog.xml SHA1-Digest: AJgxEyYRo9s2kZ9HvLVtLA0vzHI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IM SHA1-Digest: jv8BgLIst/kWfuqL/5mm2b6s9pw= Name: res/drawable-xhdpi-v4/ic_save_all_white_24dp.png SHA1-Digest: 3tp2j8TYT6D54seciaokjd5iT/Y= Name: res/layout-v16/fragment_submit_log.xml SHA1-Digest: Tp9v8hVCSzsufY/K0Wjimy/K6NY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IN SHA1-Digest: RR6+qxNlw78RwOp4avdOhJRxi5o= Name: res/drawable-mdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png SHA1-Digest: iw5pKwcqPnAN4tMkq40FTN1cl9Y= Name: res/drawable-mdpi-v4/switch_thumb_activated_holo_light.9.png SHA1-Digest: 37aTq/CoCuhzr5/FuGa2TR5yBiA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IL SHA1-Digest: eSh3TmfbgxUyI8XHgpTsE8pFZHE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PY SHA1-Digest: V6I4RhTfKMJkEbU8sViQzBiNimk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PW SHA1-Digest: zh3SBlvOt91/rr+pD8Ly4qVwaOw= Name: res/drawable-xhdpi-v4/ic_info_outline_light.png SHA1-Digest: sdxIp0ru8cC0FFPEai6mSxfHMzU= Name: res/drawable-xxhdpi-v4/spinner_default_holo_light.9.png SHA1-Digest: TcXBLoAjAlB5KEh8iwVEKiOanVI= Name: res/drawable-hdpi-v4/list_selected_holo_light.9.png SHA1-Digest: DS5Yp1zkxBKJsNnlKmSULzDXa7o= Name: res/drawable/emoji_category_nature_light.xml SHA1-Digest: XOW2DJi5AEuHa9UyAa/oHy0FlEA= Name: res/layout/expiration_picker_view.xml SHA1-Digest: /BAPvlFk6lxvGIC09fxHSrVgPrY= Name: res/color/abc_tint_seek_thumb.xml SHA1-Digest: FDKqDoo0BfucHiPLX7REsb4CYSE= Name: res/drawable-mdpi-v4/ic_backspace_grey600_24dp.png SHA1-Digest: pHDjzFjkheW4rZrnmh8p760MMqo= Name: res/drawable-hdpi-v4/abc_switch_track_mtrl_alpha.9.png SHA1-Digest: aq/s3PoS9wD33oPeDdmP98R6Bkk= Name: res/drawable-mdpi-v4/ic_emoji_symbols_normal_dark.png SHA1-Digest: FBvIHdZsFfYRON6AqPfYLAok0v4= Name: res/anim/design_fab_in.xml SHA1-Digest: dRcgYgcLN0gY/2aHKJnWN/oMfkI= Name: res/drawable-mdpi-v4/ic_group_white_24dp.png SHA1-Digest: QXHm8eyZboUzma/MK/o3+qFfxzk= Name: res/layout/abc_select_dialog_material.xml SHA1-Digest: m/HAYUMmUYOA2sV/u//sgq1vaM4= Name: res/layout-v11/notification_media_cancel_action.xml SHA1-Digest: /KZyZOzEiShP2cP0cqnTYl+6vGU= Name: res/drawable-hdpi-v4/ic_photo_camera_dark.png SHA1-Digest: IKp0/V8LAGAHfsN4JipH/ujhdDY= Name: res/color/recurrence_bubble_text_color.xml SHA1-Digest: idGG95iKAtZmusEgO3vjFXWCANc= Name: res/drawable-hdpi-v4/ic_emoji_nature_activated_light.png SHA1-Digest: wBlcPKixV6Bk+qfZr/ycmArmNwQ= Name: res/drawable-hdpi-v4/textfield_activated_holo_light.9.png SHA1-Digest: Afh8MLGJ3Tx9XRM7C/09jOu01ZE= Name: res/drawable-xhdpi-v4/switch_bg_holo_light.9.png SHA1-Digest: saSmYyqe/82/e2GZuWPAi3VYDPE= Name: res/drawable-mdpi-v4/ic_lock_light.png SHA1-Digest: TRdyBXSOem1dsUjaBzd8/ufLsOg= Name: assets/emoji_objects.png SHA1-Digest: vALA6/+WIvuV6gUb5XbcWg5VSS8= Name: res/drawable-xxhdpi-v4/abc_btn_radio_to_on_mtrl_000.png SHA1-Digest: ycXiJ7g1XDwZNYF8OiLagssfXOA= Name: res/layout/prompt_apn_activity.xml SHA1-Digest: p5/2YIBeEGxZYeAJbvAKThhH7z4= Name: res/drawable-hdpi-v4/ic_backspace_normal_dark.png SHA1-Digest: 35+MSRD5ygupxDY0umiLF9T/ZgI= Name: res/drawable-hdpi-v4/ic_emoji_objects_normal_light.png SHA1-Digest: oW1o9u6laSE6YgoL40jv1x4TR4g= Name: res/drawable-ldrtl-xxhdpi-v17/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: KzIuknZAyLH6woubBE32LAuZqFM= Name: res/drawable-sw600dp-hdpi-v13/ic_backspace_disabled_light.png SHA1-Digest: H9IeEe0/jFQZOlID5e+NFaG/pbY= Name: assets/databases/apns.db SHA1-Digest: PvPGqzaWrCJm692iqCn6D7uqZrw= Name: res/drawable-mdpi-v4/ic_photo_camera_light.png SHA1-Digest: ZgixC6ooxM2zs7ANDtRkJ/6PGQA= Name: res/layout/abc_search_view.xml SHA1-Digest: X0QMGszzHYu5/xIJT5n3LBD5gLw= Name: res/drawable-hdpi-v4/ic_mood_white_24dp.png SHA1-Digest: mAWYrnNo+676Ppv2zP9Evc2kNgw= Name: res/drawable-xhdpi-v4/ic_dialpad_white_24dp.png SHA1-Digest: 0erSDWulaDULF69XKAVhXp3crZY= Name: res/drawable/blocked_indicator_background.xml SHA1-Digest: gweHS1jBesmRyU+v0uYavvSZZY8= Name: res/drawable/emoji_category_people_dark.xml SHA1-Digest: 9SFLcnIfRHzdjByBVaLzU3UPOBU= Name: res/menu/media_overview.xml SHA1-Digest: EwI1bqJOoKrYUQvxSrkG+J8bubY= Name: res/drawable/list_selector_background_transition_holo_light.xml SHA1-Digest: b1H87ZIpIiBv7j8kdjbZ6lJmBU0= Name: res/drawable-xxhdpi-v4/check.png SHA1-Digest: AHjC+CFtOBHmDfRHyZazIpV9Ty0= Name: res/drawable-xxxhdpi-v4/ic_done_all_white_18dp.png SHA1-Digest: wy16yLWb3UsNN+/u7g7sDkPLzJU= Name: res/layout/import_export_activity.xml SHA1-Digest: UpNSytODYyXtqkCrkmmHKvi48O0= Name: res/drawable-mdpi-v4/ic_send_insecure_white_24dp.png SHA1-Digest: 5khri+ycEOaa+uANreHte5bedcE= Name: res/drawable-mdpi-v4/ic_launch_white_24dp.png SHA1-Digest: R8WccwkebYOiH17djRNCJO1ZWHU= Name: res/drawable-xhdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: uEqQdj8O/DgiXxPIGMvGrKY7dTE= Name: res/drawable-xhdpi-v4/abc_popup_background_mtrl_mult.9.png SHA1-Digest: ZbFwYRiDS6lC6psf14qui2W4zQQ= Name: res/drawable-xhdpi-v4/ic_textsms_grey_32dp.png SHA1-Digest: cgCiwCpkSgZW5huIGhEXKOh3dAk= Name: res/layout/keyboard_text.xml SHA1-Digest: 1uoV25AMIO86X5CcKpAv2n3qp3c= Name: res/drawable-mdpi-v4/ic_forum_grey_32dp.png SHA1-Digest: 1z1SD83iKbd/LIIUa4Cjqv9Ukfc= Name: res/layout-v17/conversation_fragment.xml SHA1-Digest: LWMFmGevNKwiLFfhK1FKaZSy5AM= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_7 SHA1-Digest: R13VmLCbBwMg6K479CnJtnC+bXs= Name: res/drawable/recurrence_bubble_fill.xml SHA1-Digest: f3GCv6rhCWwIFFg/JzEgZSezfvU= Name: res/color/date_picker_selector.xml SHA1-Digest: Rf67bugjGG1v+PbKB7h61LPHgKY= Name: res/drawable-xhdpi-v4/ic_unlocked_white_24dp.png SHA1-Digest: lbswHZMt8w9hR/nYqPXIIluZHwk= Name: res/drawable-xxhdpi-v4/switch_thumb_holo_light_v2.9.png SHA1-Digest: /dwwrT/7gkG9oNAKszZBP8puxAs= Name: res/drawable-xhdpi-v4/textfield_activated_holo_light.9.png SHA1-Digest: Gmocm6iACu2JtEPjYWad8j6ha90= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_350 SHA1-Digest: FL/nPG4XaSrRGuHfx7krOQDoLG4= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_352 SHA1-Digest: AQbsxBOsaCrzJXI/KS99rfUChNg= Name: res/drawable-xhdpi-v4/ic_mood_grey600_24dp.png SHA1-Digest: Te4e3OJMxFFD1PNny1b3S6DU9f4= Name: res/drawable-xxhdpi-v4/ic_emoji_places_normal_light.png SHA1-Digest: LRzqMDxdNFEw41n3ZT5kGYiAUbI= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_351 SHA1-Digest: 8gUjWk4JW0A+ylZayZHRoen3pFU= Name: res/layout/conversation_list_item_action.xml SHA1-Digest: I1nQIFRFmKjx1XbSAms2IvXJat8= Name: res/drawable-xhdpi-v4/abc_text_select_handle_right_mtrl_dark.png SHA1-Digest: o0rLAcxJ1uf5HaqOAfX0y2STqh8= Name: res/layout/abc_list_menu_item_icon.xml SHA1-Digest: IHjMoWWbSOePG8X4KyBCdZH/r0I= Name: res/drawable-hdpi-v4/sms_selection_icon.png SHA1-Digest: sk1UsWnhwGIOfiwT3j8Jx762tcc= Name: res/drawable-xxxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_000 .png SHA1-Digest: w/MYb1Y/O4Mr/eHUFvYCPi7mkN4= Name: res/drawable-hdpi-v4/ic_group_grey600_24dp.png SHA1-Digest: 5F4bdAqt0YgzmXJCDpWZpzTA5Jw= Name: res/layout/calendar_date_picker_done_button.xml SHA1-Digest: gxPgQ8xj+t/2whmi1WrYjG5+QFo= Name: res/animator-v11/bottom_play_to_pause_animation.xml SHA1-Digest: 2HngVRTUpoolPPl48CkjVhPeluM= Name: res/drawable/ic_check_dark.xml SHA1-Digest: FdXDDSXEKEiwTZQtLi75Mh5C1zk= Name: res/drawable-hdpi-v4/abc_text_select_handle_right_mtrl_dark.png SHA1-Digest: AYI75XDJNXJcd4t4N9dhUkz5G4U= Name: res/menu/log_submit.xml SHA1-Digest: rxGA9EsEgMMsl4FbewMeXKJyMTY= Name: res/menu/local_identity.xml SHA1-Digest: TJYkQb/JH6dHdmcQHfGCke96cmU= Name: res/drawable-mdpi-v4/abc_switch_track_mtrl_alpha.9.png SHA1-Digest: QhKzfQqaMjEUNLGmR/QjnJ0PWe4= Name: res/layout/notification_action.xml SHA1-Digest: JmRjtkOSBAI3rsHo/PoIRtsj2y8= Name: res/drawable-xhdpi-v4/ic_badge_24dp.png SHA1-Digest: G9nZTCoNM7ie0lZLXF8gK7O34PE= Name: res/drawable-mdpi-v4/ic_emoji_nature_activated_dark.png SHA1-Digest: EMpCxgETUVL4ZUAnoRdLf3aCN6k= Name: res/drawable/abc_tab_indicator_material.xml SHA1-Digest: HLMNWYzS8Xr2+cGXFiCZarvGfLw= Name: res/drawable-hdpi-v4/ic_visibility_off_white_24dp.png SHA1-Digest: Ee1fJ0/c+3gTtFZObRlZN6iG1F8= Name: res/drawable-xxhdpi-v4/abc_ic_star_half_black_16dp.png SHA1-Digest: pj+V2r2pJOgJwGGNpeqxnykl0Nc= Name: res/drawable-xxhdpi-v4/ic_menu_lock_dark.png SHA1-Digest: 03Mv6ahkfeQYPbwTCNFniVzRa3w= Name: res/drawable-hdpi-v4/ic_message_black.png SHA1-Digest: MTfDuKQgatE5sG87kXcLreYWyMg= Name: res/drawable-xhdpi-v4/sms_system_import_icon.png SHA1-Digest: IAmHCAxi+fY3FkaMMeciB5ijY04= Name: res/color/text_color_secondary_dark_theme.xml SHA1-Digest: FcQtMrYBHKUcrsrYAJtGmMi4wYU= Name: res/drawable-mdpi-v4/ic_backspace_disabled_dark.png SHA1-Digest: H5+tE8X57E9mXFocXcA2hEo0+f8= Name: res/drawable-xxhdpi-v4/ic_lock_white_18dp.png SHA1-Digest: Kt/G+GU5idOPr2lY6h7w+DEv6p0= Name: res/drawable-mdpi-v4/abc_text_select_handle_right_mtrl_dark.png SHA1-Digest: Su848yQo1YikW7QsiNSK72I0OiY= Name: res/layout/conversation_list_item_view.xml SHA1-Digest: n97/uRTwX6TNoaWizjfLy8ehXWM= Name: META-INF/fdroidserverid SHA1-Digest: qOTzsGoP5INTEonrAW6n9b7mr+E= Name: res/drawable-xhdpi-v4/ic_group_grey600_24dp.png SHA1-Digest: Lr3KbNyfIHhtS8LsvIQUgd5PJKw= Name: res/drawable-mdpi-v4/list_selected_holo_light.9.png SHA1-Digest: nPWNtANp5FoH4n/kEIShr57wI3s= Name: res/drawable-xhdpi-v4/ic_refresh_white_24dp.png SHA1-Digest: N51rcLLXF/W6X5Pq2y5DQhdR/nw= Name: res/layout/recurrencepicker.xml SHA1-Digest: AvGW3h5hKVIh8gMmLOGPzVyLlPQ= Name: res/layout/radial_time_header_label.xml SHA1-Digest: jG/CTw9j1K3lcDFDIgdE5CyoIfA= Name: res/drawable-xxhdpi-v4/ic_group_grey600_24dp.png SHA1-Digest: Z2itXwWg1njYcU7Vx/87vK9U9+s= Name: res/drawable-v11/notification_bg_low.xml SHA1-Digest: Kupt+v67mjNiM4qtFnzAExBwrNU= Name: res/drawable-mdpi-v4/ic_emoji_emoticons_activated_dark.png SHA1-Digest: j5W6WrE76fGRF389dWTaNUyUR4s= Name: res/drawable-mdpi-v4/icon.png SHA1-Digest: bR38XMQJ/yvQLfhVPoKY+UcLYWM= Name: res/drawable-xxhdpi-v4/ic_missing_thumbnail_picture.png SHA1-Digest: 1iK6XuDBSv30IlCHuRdy3ZKossg= Name: res/layout-v17/notification_action_tombstone.xml SHA1-Digest: oohvgUyY9KkKf/x62dUuNKq99sQ= Name: res/drawable-mdpi-v4/ic_done_white_18dp.png SHA1-Digest: 3tzbFFmR3vxyZUfyIQUTGhGl/CY= Name: res/drawable-xhdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png SHA1-Digest: 6HHq6ho9WzMHZQyJ3+YbSbrpNCk= Name: res/anim/abc_grow_fade_in_from_bottom.xml SHA1-Digest: kWfUczBIbB0kTzFgtIQfNc6uPrA= Name: res/drawable-mdpi-v4/abc_ic_star_black_16dp.png SHA1-Digest: Qgvko8tYzI3XirPVbeipvcFF07I= Name: res/drawable-mdpi-v4/ic_dialpad_white_24dp.png SHA1-Digest: /phYMjwLhgWEqFdKp3sf0bZCetY= Name: res/drawable-xhdpi-v4/ic_emoji_nature_activated_dark.png SHA1-Digest: 3qKTC9l9Rgn/vIDiiVg9qEGZJvA= Name: res/drawable-mdpi-v4/notification_bg_low_pressed.9.png SHA1-Digest: sZI/MrQgBXh2aJFcQWzZXWRcBz0= Name: res/layout/recurrencepicker_end_text.xml SHA1-Digest: wXzrOR5iZtN/GsctD/Krbckccls= Name: res/drawable-xxxhdpi-v4/abc_ic_star_half_black_16dp.png SHA1-Digest: l5P17R7tfjGW/U6cw97ToLROGKg= Name: res/drawable-xxhdpi-v4/ic_block_grey600_18dp.png SHA1-Digest: ThyJLvDUQYnunmq8D2/6laaJdWU= Name: res/layout/abc_action_menu_layout.xml SHA1-Digest: whck/Mt3xmSgUFtEnQ+OiTzehFg= Name: res/layout/media_overview_item.xml SHA1-Digest: Zkyp88QoapfkHZKBQoxWNwvj268= Name: res/layout-v13/recipient_preference_activity.xml SHA1-Digest: PachDk/y8n0/Jj7THRp4GKshXUU= Name: res/drawable-mdpi-v4/ic_recurrence_bubble_disabled.png SHA1-Digest: rCUeT9mUua4IT1NK1wuImEuOvdM= Name: res/drawable-hdpi-v4/ic_movie_creation_dark.png SHA1-Digest: HeZenD7UJNHySCebYE7T/ULjL+s= Name: res/anim/animation_toggle_out.xml SHA1-Digest: h5RFa/NEbVssJaJQDR+GOgcbjF0= Name: res/drawable-v21/abc_ratingbar_small_material.xml SHA1-Digest: wPrz0/gmu9ygjwoOdEMFAq9SO+E= Name: res/drawable-hdpi-v4/abc_popup_background_mtrl_mult.9.png SHA1-Digest: Z6SIIC97mku9jiqDCLc6pgfmpn4= Name: res/drawable-hdpi-v4/ic_emoji_places_activated_dark.png SHA1-Digest: NwPCQzO7bnY5CbC66rOJvNyK5Rk= Name: res/drawable-xhdpi-v4/ic_backspace_grey600_24dp.png SHA1-Digest: 7ht7wvyJK0vJfBxK2iJ1af0sBAc= Name: res/drawable-mdpi-v4/icon_cached.png SHA1-Digest: 9qBwDJ7BPNIBC3zXO4Bicuzo2wY= Name: res/drawable-xxxhdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png SHA1-Digest: u7p4+i+MbX5Isql4KGmTM6mrhJ8= Name: res/drawable-mdpi-v4/divet_lower_right_light.png SHA1-Digest: twJYsBFi/eZQzvXXVIMujFr3I3s= Name: res/layout/notification_template_icon_group.xml SHA1-Digest: 6qGSW9wFVndQ13DzZNecTnraDAs= Name: res/drawable-xxhdpi-v4/ic_unarchive_white_36dp.png SHA1-Digest: rF3YHRYfZzIzFX3CHCuhU8yuWR4= Name: res/layout/create_passphrase_activity.xml SHA1-Digest: hN8Af78Y/DR3tvVslR3BOzVVp4A= Name: res/layout/calendar_date_picker_selected_date.xml SHA1-Digest: zpS0QM2B4CzXty9Y5hrPXFeJY2Y= Name: res/drawable/emoji_category_emoticons_dark.xml SHA1-Digest: 11zp4K8bRQx+l2mlZfM0Gni86XM= Name: res/drawable-xxhdpi-v4/ic_search_white_24dp.png SHA1-Digest: JHy06egZz7rzVRiem3CUM66szEI= Name: res/drawable-xxxhdpi-v4/abc_text_select_handle_right_mtrl_light. png SHA1-Digest: zOCXfAxJchHRxMozw8XoHhVJJ3Q= Name: res/menu/conversation.xml SHA1-Digest: hSfHkyXysOtwJJEMx8X1yVNW7xU= Name: res/drawable-hdpi-v4/ic_block_white_18dp.png SHA1-Digest: 3y2ZHGdSmjVtP8PyEQd6Ss+S1SA= Name: assets/emoji_flags.png SHA1-Digest: +csJvSPQ400RI0ujnYElBq3F+Hk= Name: res/drawable/circle_tintable.xml SHA1-Digest: z8l8kMwAv5KMQnIRC+XEP+FC9Sw= Name: res/color/abc_btn_colored_text_material.xml SHA1-Digest: u4U/bWVgc1pHJlW6mCDxZUa/nwg= Name: res/drawable-xhdpi-v4/ic_attach_white_24dp.png SHA1-Digest: Z1lRPPOpob8mxDEUKsmL3h4bRPk= Name: res/drawable/abc_dialog_material_background.xml SHA1-Digest: mLGxn48GAFs7+4j22JOs3ea71o0= Name: res/layout/custom_default_preference_dialog.xml SHA1-Digest: 5nvWqkqbyYLDQhoAsNjl2z76MZI= Name: res/drawable-mdpi-v4/ic_recurrence_bubble_outline.png SHA1-Digest: xD9e+mYD3r++KKOwuVHCB7xzTOc= Name: res/layout-v21/conversation_item_received.xml SHA1-Digest: ReOpCLs5xCUjd8odU8FQz1kuUfg= Name: res/drawable-hdpi-v4/ic_emoji_symbols_normal_dark.png SHA1-Digest: xqJw3AR+/RRR5z9TNwngCdiYDEE= Name: res/drawable-hdpi-v4/ic_emoji_people_activated_light.png SHA1-Digest: k/ZDynZqj37HUstyx1QoGZgr7J8= Name: res/layout/keyboard_with_header.xml SHA1-Digest: wA00i1le3a5Rkzsu26QpDvTUGFI= Name: res/drawable-xxxhdpi-v4/ic_block_white_18dp.png SHA1-Digest: tZn04OM4AjY8u3ZIx4AfhTCX9bo= Name: res/layout/change_passphrase_activity.xml SHA1-Digest: jm/0knHyFdtiPzveSI6NAxp9Rq8= Name: res/drawable-xhdpi-v4/ic_emoji_objects_activated_light.png SHA1-Digest: 4dWl03s0Q3bS4dHBQ1e37GXJNWk= Name: res/layout/abc_action_bar_up_container.xml SHA1-Digest: YB9Q34xo4iOAMJD2OyrUmLDHoTg= Name: res/drawable-xxxhdpi-v4/ic_done_white_18dp.png SHA1-Digest: KUGfV0nSE93yLVYBtZzSzJULZBs= Name: res/drawable-xhdpi-v4/ic_photo_library_white_24dp.png SHA1-Digest: 3xGAmqq7T+1Rz9GezQHGhC+3WQU= Name: res/color-v11/abc_background_cache_hint_selector_material_dark.x ml SHA1-Digest: XEu3fV1TnwtDyw4lIFQ7Itsjbn0= Name: res/drawable-mdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: ZMcwudVDoUT8fuUQX58XOmOX7Qk= Name: res/layout/calendar_year_label_text_view.xml SHA1-Digest: /O2/BvuNy/vUR7Nw2Tr9GAZR9Xo= Name: res/drawable-hdpi-v4/ic_menu_remove_holo_light.png SHA1-Digest: xEu8Zhu8WHensenJ0i8frUqsgIA= Name: res/drawable-xhdpi-v4/ic_delete_black.png SHA1-Digest: Wmcf+HJHP8i85MraoQbpa1QnSEA= Name: res/drawable-hdpi-v4/dialog_full_holo_light.9.png SHA1-Digest: 504Hf96uSL+l0BR84bvm9i98TbA= Name: res/drawable-xxhdpi-v4/ic_group_white_24dp.png SHA1-Digest: t96AuBV2ou+QlUWMgBsZxR0KKtA= Name: res/drawable/contact_photo_background.xml SHA1-Digest: wcH56qoRh/roa5MfCRAUhY5VXOQ= Name: res/menu/conversation_unmuted.xml SHA1-Digest: iGPzWVNCvf+sAJqdMTdIpoAM4UA= Name: res/layout/design_navigation_item_header.xml SHA1-Digest: J2mqonDhWjJsKM5KGR7MNEsL25k= Name: res/layout/thumbnail_view.xml SHA1-Digest: T06Ye5dxfHId2W1rPjoJWvkqBkg= Name: res/drawable-hdpi-v4/switch_thumb_disabled_holo_light.9.png SHA1-Digest: Oiup3l4uNF0B12bFkgZ5ZbKU4eM= Name: res/drawable/clickable_card_light.xml SHA1-Digest: KWl99LsBvQRSQgTPb0LNhchkJUk= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_358 SHA1-Digest: VvyTT/9LksUV4HPNbIQ7v9P3pTA= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_359 SHA1-Digest: s/VIZLolJRrHzUwl20EGXxrhYHU= Name: res/drawable-mdpi-v4/ic_contact_picture.png SHA1-Digest: ZCfKulN5bb8ZikHdvhlcqyY9x04= Name: res/drawable-mdpi-v4/lockscreen_watermark_light.png SHA1-Digest: kSry/5rdpYVffPBKS2Yy/krmC2M= Name: res/drawable-xxxhdpi-v4/ic_forum_grey_32dp.png SHA1-Digest: rNQVPXBNhV93dqQ/Fiu5vNvLuBs= Name: res/drawable-mdpi-v4/ic_emoji_objects_activated_dark.png SHA1-Digest: 9PHPrHu/3aQtyxD1+RTbm9cibcE= Name: res/drawable-xxxhdpi-v4/ic_launch_white_24dp.png SHA1-Digest: P59Tq3p+JAxrOryrDqSOJi+TN8E= Name: res/layout-v11/notification_action_tombstone.xml SHA1-Digest: LvDZJkSa4kdT49E6SqH54/rMffQ= Name: res/drawable-mdpi-v4/abc_ic_star_half_black_48dp.png SHA1-Digest: zE/R5xsR97x8GBTk7wQpVwZn2kA= Name: res/layout/audio_view.xml SHA1-Digest: 2ADoSjXlHFHxmqJFwLvinFy0dP8= Name: assets/emoji_faces.png SHA1-Digest: 3iRFxvoz43yD5utC20esxUfeHtk= Name: res/animator/upper_pause_to_play_animation.xml SHA1-Digest: 04mBHR+Cgllch7nL8htY67n82OE= Name: res/drawable-mdpi-v4/ic_delete_gray.png SHA1-Digest: /iJSk3txqIMpR0Sdea7I5/nIgE4= Name: res/drawable-mdpi-v4/ic_clear_search_holo_light.png SHA1-Digest: pOnppS7KXFY3taOIxA+VL/9lAMk= Name: res/drawable-mdpi-v4/ic_menu_lock_dark.png SHA1-Digest: OciK3SpJATGkVfvuSS0zQTJozdo= Name: res/layout-v11/color_fragment.xml SHA1-Digest: yHf3YSStEI41oNH6Dqql6yiXuVM= Name: res/drawable-xxhdpi-v4/ic_emoji_objects_activated_light.png SHA1-Digest: 7hg/qeC1NwPtOHGwK5ewb+ARKUU= Name: res/drawable-xxhdpi-v4/ic_mood_white_24dp.png SHA1-Digest: aATDrQkGwh8G3SL4XUObM4bY3fA= Name: res/drawable-hdpi-v4/ic_pause_circle_fill_white_48dp.png SHA1-Digest: YMalFZPBey4XfYSiNduE3Lqso4I= Name: res/drawable-v21/notification_action_background.xml SHA1-Digest: gFNJlvGPCPdrqikkFXVxi9K4GPQ= Name: res/drawable-xxhdpi-v4/ic_advanced_gray.png SHA1-Digest: VOzt7g2O+/MLQEnTBXew6o2N/T4= Name: res/drawable-mdpi-v4/ic_send_white_24dp.png SHA1-Digest: iRHc4QuCP9H7s2/KnXUDs8sHrwE= Name: res/drawable-xhdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.p ng SHA1-Digest: bfZIl6CVmkC/rfSoxwLRIE9yYeY= Name: res/drawable-xhdpi-v4/abc_scrubber_track_mtrl_alpha.9.png SHA1-Digest: 1Ih2zOyUzHfQqptwXGLdPfBUSns= Name: res/drawable/background_pattern_repeat.xml SHA1-Digest: EEgb/vIb0/VFJJgS0/MIpgsTEn0= Name: assets/emoji_places.png SHA1-Digest: m/f0hGfQoPzldCayMIi+KuOkEX4= Name: res/drawable-hdpi-v4/abc_btn_radio_to_on_mtrl_000.png SHA1-Digest: VW+74R1Hvl4mKIUXFrQ1+5K+/cE= Name: res/drawable-xxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_005. png SHA1-Digest: ZV+bRJxAcgFQ6LcFfSQS0pjmxiI= Name: res/drawable-ldrtl-xhdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: M5uPxBtgV+CMfjCXzk/6+os9DZs= Name: res/drawable-xxhdpi-v4/ic_dialpad_white_24dp.png SHA1-Digest: niV5rPhrG06CAAYbZlmaso9C+8g= Name: res/layout-v16/color_fragment.xml SHA1-Digest: lB1JB9yraLF+r5m5vyr7eduE144= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_373 SHA1-Digest: VeJdhu3EY8wQbzczMbiAueR3kcg= Name: res/drawable-mdpi-v4/quick_shutter_button.png SHA1-Digest: 2FtKBm5m6sU/LXkCiKFqhU9iNgQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_372 SHA1-Digest: 9XbPZyYd/EeHczEcjCTlJ2wquFM= Name: res/drawable-mdpi-v4/ic_emoji_people_activated_dark.png SHA1-Digest: bOl0syyt8YtGvRnYpNjqAOnFihU= Name: res/drawable-mdpi-v11/icon_notification.png SHA1-Digest: 0R2WWMtPDe6EymAwthJIbRcnyz4= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_375 SHA1-Digest: PNdFFZIpo4wtdnnyz/Wp8jU8VF8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_YT SHA1-Digest: +vjLMpF41agFrIHPfcAQNAFz5go= Name: res/layout-v17/notification_template_media.xml SHA1-Digest: iCf+9+sQE4RgdLhM+IWUq5vXtcY= Name: res/drawable-xhdpi-v4/switch_thumb_holo_light_v2.9.png SHA1-Digest: lTaQlla7wJWRfNbx/Hu+VJaDlXY= Name: res/drawable/abc_ic_menu_overflow_material.xml SHA1-Digest: C8lOzyzsDos77nJfisrycpBcUCg= Name: res/layout/badge_widget.xml SHA1-Digest: Foo9DmBJwFE77cIEKxYE5Gb0STw= Name: res/drawable-mdpi-v4/spinner_pressed_holo_light.9.png SHA1-Digest: O8B882Dl2Rt2oOS4plpeX8GCUAQ= Name: res/menu/conversation_mms_group_options.xml SHA1-Digest: 75WeWlg+lziJM4pv6UCGiv8nxtY= Name: res/drawable-xhdpi-v4/quick_shutter_button.png SHA1-Digest: MooO8IzRosO1l7jroeczOIZMyTo= Name: res/layout-v17/contact_selection_list_item.xml SHA1-Digest: xQXlGCgCZ6yfo118S4CvKiagNq4= Name: res/drawable-hdpi-v4/transfer_controls_background.9.png SHA1-Digest: bB3l+bAb+LvTfoWtF9LZilz3X5E= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_380 SHA1-Digest: E0pemWil3+yoXcDS1xZEp8+FN3I= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_381 SHA1-Digest: xZ5XwW7Jz0Hhq9Odxqo803v/5Ws= Name: res/drawable-xxhdpi-v4/ic_mood_grey600_24dp.png SHA1-Digest: TrEPgqLMZ0HTkvWT3Fsjtq1U2Vs= Name: res/drawable-mdpi-v4/ic_menu_search_holo_dark.png SHA1-Digest: mCM1XbeaaQT9LDW69E/m8yVI0PY= Name: res/drawable-hdpi-v4/list_selected_holo_dark.9.png SHA1-Digest: hSLKqpeDDArxDLbgz2eUcpI9DhU= Name: res/drawable-xxhdpi-v4/ic_visibility_white_24dp.png SHA1-Digest: bxaIi7BxLJzQBugWxh4e0S4BfcQ= Name: res/drawable-xxhdpi-v4/splash_logo.png SHA1-Digest: DJhdzzsZnMKXYBKbx/2F1HdjJ5Y= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ZA SHA1-Digest: MDbMTzJv7V7nvzivSW18VLtR6Ls= Name: res/layout-v17/conversation_item_received.xml SHA1-Digest: EXfi52n9T5OfD2VlPWwxWF5zGcs= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_385 SHA1-Digest: 800patLGNib6NsjVJcV7fh1yw1A= Name: res/menu/conversation_secure_identity.xml SHA1-Digest: SjTQDbxCR22ZkNvp2zoRjJdGXj8= Name: res/drawable-xhdpi-v4/telephone.png SHA1-Digest: x1+9Kjh+KyB5te9ykHhx1ZmZyUI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ZW SHA1-Digest: XJvwF0HzX3D/vt0YWBE9fDUaR64= Name: res/drawable-xxxhdpi-v4/ic_send_secure_white_24dp.png SHA1-Digest: xB8flOZLpwaCmv+8xCCq9BXKpAo= Name: res/drawable-mdpi-v4/abc_text_select_handle_right_mtrl_light.png SHA1-Digest: Fn9hoN8NVPqsAyN/H4QnXfMFpHM= Name: res/drawable-xxxhdpi-v4/abc_btn_radio_to_on_mtrl_000.png SHA1-Digest: I0mWJRAs02Uqa4cRGnhl0DCYnV8= Name: res/drawable-xhdpi-v4/ic_action_warning_red.png SHA1-Digest: XVJGgjYUTuNrKHUV8n2l95KDwI4= Name: res/drawable-xhdpi-v4/spinner_pressed_holo_light.9.png SHA1-Digest: l07AAjv4APfDSMj2gVcl4QIryn4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ZM SHA1-Digest: /g5ZwRrbhNlGJMPdpLYKeT4t61Y= Name: res/drawable-v21/abc_ratingbar_indicator_material.xml SHA1-Digest: TaCO4rsv95JHS3RML2c940eQ9U8= Name: res/drawable/abc_cab_background_internal_bg.xml SHA1-Digest: OpZTAPON/eHCLK5xEp9Ei2cska4= Name: res/layout/conversation_item_pending.xml SHA1-Digest: nooD6q7K9R3KibkZT0hYC2X0OC0= Name: res/drawable-mdpi-v4/ic_missing_thumbnail_picture.png SHA1-Digest: LJRLxFzzaZa2Oflozl2B3m/jl4M= Name: res/drawable-ldrtl-xxhdpi-v17/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: IsziyF2OBzAviNmnk3+DRoNCmAA= Name: res/drawable-xxhdpi-v4/ic_info_outline_white_24dp.png SHA1-Digest: U09I+1Jg2gjdjMrIofJjietJQ7c= Name: res/layout-v13/select_dialog_multichoice_material.xml SHA1-Digest: qt6tjVkKv4OpiJSnVVsh/3YlFTQ= Name: res/drawable-xhdpi-v4/ic_recurrence_bubble_outline_disabled.png SHA1-Digest: dEBKH2kB71bXNj5gEuYAB8XzOug= Name: res/drawable-mdpi-v4/sms_selection_icon.png SHA1-Digest: mJ+FIMWmluLTgfVkc8h5fkAwBoU= Name: res/drawable-hdpi-v4/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: qRCYZUzk2ijqbaq6h2ixzc8HbFg= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_855 SHA1-Digest: GFR3JT2vrXUV4AaCWsbkvT1AlX0= Name: res/drawable-mdpi-v4/ic_emoji_objects_normal_dark.png SHA1-Digest: bFOFdrV1PcYRI65aFXkfYM9OIuo= Name: res/drawable-hdpi-v4/abc_tab_indicator_mtrl_alpha.9.png SHA1-Digest: XUUeghiBJli27nxrwf5sxQ8N90c= Name: res/drawable-xxhdpi-v4/ic_call_white_24dp.png SHA1-Digest: C/IBlA9xde2di5j14wAyOnlqcA8= Name: res/drawable/abc_ic_clear_material.xml SHA1-Digest: PVn2E2PoeX3lHIOKqSVS61kIGmg= Name: res/drawable-mdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.pn g SHA1-Digest: /HAj2ZcakO1w66fyAe8GERxXwXk= Name: res/layout/conversation_item_received.xml SHA1-Digest: 5zUW5qPxJ3jySZXLTjoXqJDh4r0= Name: res/drawable/abc_list_selector_background_transition_holo_dark.x ml SHA1-Digest: fAkCuPln1zmCTatmP9A40U4lWak= Name: res/drawable-xxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_000. png SHA1-Digest: Eve5+sY3kLylSmhDHmYnvjkZAps= Name: res/drawable/clickable_card_dark.xml SHA1-Digest: oEQHpgloj5YJZTiKGjP26F3EVak= Name: res/drawable-xxhdpi-v4/ic_emoji_recents_normal_dark.png SHA1-Digest: tgKx3liU6pxYwNWGnbyv5D/Czno= Name: res/drawable-anydpi-v21/design_ic_visibility_off.xml SHA1-Digest: zGvQADjKorrDtblDDeg+FD7MgFo= Name: res/drawable-xhdpi-v4/ic_backspace_normal_light.png SHA1-Digest: 9k6zQKR7o4w+qSjIuJGCRkAwQ+g= Name: res/drawable-hdpi-v4/abc_scrubber_control_off_mtrl_alpha.png SHA1-Digest: ayEN/y2/KZk92Zl774asitbOxNY= Name: res/drawable-xxxhdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: prowKilSHEAkLy2yRWje7IyMm2k= Name: res/drawable-hdpi-v4/ic_textsms_black_32dp.png SHA1-Digest: T1b4tBg9BfOzxxEg5zIb90C6M+Y= Name: res/drawable/import_export_item_background_dark.xml SHA1-Digest: cuztEmqbDw0+hjuQvpxQ5S+7z/8= Name: res/drawable-xxhdpi-v4/abc_btn_radio_to_on_mtrl_015.png SHA1-Digest: kOF2VzVE6Z/WMHMU96aVNFLvUgk= Name: res/drawable-hdpi-v4/abc_text_select_handle_left_mtrl_light.png SHA1-Digest: JweLCjivdDkQIw/RDW237ctDdhA= Name: res/drawable-xxxhdpi-v4/ic_send_white_24dp.png SHA1-Digest: VJhy6vM0Wd7zLNSXmW5UJ0fiBC4= Name: res/drawable-xhdpi-v4/ic_movie_creation_dark.png SHA1-Digest: qFrKM25Y6qZQfSutjcCOI0U2nj8= Name: res/drawable-mdpi-v4/ic_visibility_grey600_24dp.png SHA1-Digest: IeExyS3cXlzMiSUr9M8L4tHef5k= Name: res/drawable-sw600dp-xhdpi-v13/ic_backspace_normal_light.png SHA1-Digest: JvEQ+dN6zZ+vNjuF4JNOiUFIEQI= Name: res/drawable-xxxhdpi-v4/abc_ic_star_black_36dp.png SHA1-Digest: m00Wj6Inxz/EKEeNQdJaHcF1hy8= Name: res/drawable-xhdpi-v4/ic_content_copy_light.png SHA1-Digest: tyiYOAvb1Pj2PkkR2KEECSm6iR4= Name: res/drawable-hdpi-v4/switch_thumb_activated_holo_light.9.png SHA1-Digest: CctxDSFOgITRJNMJX0mhtDzP4DE= Name: res/drawable-hdpi-v4/ic_emoji_emoticons_activated_dark.png SHA1-Digest: mxD0E+98fWCc8W65aC8ifthwl7U= Name: res/menu/conversation_muted.xml SHA1-Digest: oLlQ6zDh6JjQ3GcyRwCj5hFIHLU= Name: res/drawable-hdpi-v4/quick_shutter_button.png SHA1-Digest: AJ/I4nSNNjmjqQlpgJ1t93h2aps= Name: res/layout/country_list_item.xml SHA1-Digest: 5/z34addyDwgm8fiRrEEt8My/KM= Name: res/anim/fade_scale_in.xml SHA1-Digest: BGInYJ2dY+FwSHntv4EVZBJwXyI= Name: res/color/done_text_color_dark.xml SHA1-Digest: ZO32dm0XbbkLZ53hbG/m5fIEIPU= Name: res/layout/calendar_date_picker_view_animator.xml SHA1-Digest: XMknXL4ZPfacp06vBrvpWdGEgpw= Name: res/drawable-hdpi-v4/notification_bg_low_pressed.9.png SHA1-Digest: hlGgjwCibYSJn0dDvquLScOoXss= Name: res/layout/three_keys_view_leftright.xml SHA1-Digest: 3Zvdz1WMTx1gWMF1H6PIlTmH67g= Name: res/drawable-hdpi-v4/ic_recurrence_bubble_disabled.png SHA1-Digest: SF/O/d5wRLKs974J+KyU0q/gia4= Name: res/drawable-hdpi-v4/ic_menu_search_holo_light.png SHA1-Digest: bzg6ZIQFerI0gya11Ew4hH/lGn8= Name: res/layout/design_bottom_sheet_dialog.xml SHA1-Digest: MQHSSV5PkRdnhGb17LD8cgzm3WM= Name: res/drawable-xxhdpi-v4/ic_emoji_people_normal_dark.png SHA1-Digest: KfDQHtfO71TYmuwZVmajJOc6Mew= Name: res/drawable-xhdpi-v4/ic_photo_camera_light.png SHA1-Digest: 6LlVOreCblgzk/5Rj9Y7yOfH0G0= Name: res/drawable-hdpi-v4/ic_photo_library_white_24dp.png SHA1-Digest: 7QUTeWjJwNF/UW6h8VnnzmzjhHI= Name: res/layout/abc_action_mode_close_item_material.xml SHA1-Digest: J3ykV+zggY5f/fs0BNDqNYo7RQA= Name: res/drawable-xhdpi-v4/ic_content_copy_dark.png SHA1-Digest: 8IU/BwID29XOawGRqYad3rzMmpU= Name: res/drawable-xxhdpi-v4/ic_info_outline_dark.png SHA1-Digest: YjCmtV6QEFdYlXMB6H8OlYSYkf4= Name: res/drawable-hdpi-v4/spinner_pressed_holo_light.9.png SHA1-Digest: 5Tb20GpfyWPdfk68H93Ix+I70zE= Name: res/layout/design_layout_tab_icon.xml SHA1-Digest: OpgFVS39nmdZdRaCD4FzFLJt5h4= Name: res/drawable/item_background_holo_light.xml SHA1-Digest: uzat/IohpDi38vClmuzzWAe4jzg= Name: res/drawable-mdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png SHA1-Digest: sORfnhpPIEXLnh57veYnu5sMZD0= Name: res/drawable-xhdpi-v4/ic_backspace_disabled_dark.png SHA1-Digest: 9pEICN2PFZBO2rIgSYABn+Pu/Hg= Name: res/layout-v11/notification_template_big_media_narrow_custom.xml SHA1-Digest: DMo9YNwCiB5C0JnhlBJHZPL/PYE= Name: res/drawable-v21/abc_btn_colored_material.xml SHA1-Digest: Exeq8outkyCU3j4roUcAlNp7sYk= Name: res/drawable-v21/avd_hide_password_1.xml SHA1-Digest: 4YaBUn+peG7+cOkgZp0Zim5sCNk= Name: res/drawable-xxxhdpi-v4/ic_download_circle_fill_white_48dp.png SHA1-Digest: Dlun14V1F9MsfUVX4BJnFUy45is= Name: res/drawable-v11/notification_bg.xml SHA1-Digest: shqaU1xo6CnJHjS9n6uJU/+iDWY= Name: res/drawable-ldrtl-xhdpi-v4/ic_send_white_24dp.png SHA1-Digest: /XfzuAyMpTd4oRq967TmSMPFQoE= Name: res/layout/notification_template_lines_media.xml SHA1-Digest: 5jFV9mECqvwlwK/2rFI2E2lZFbM= Name: res/drawable-mdpi-v4/ic_refresh_white_24dp.png SHA1-Digest: T+dpNJOBOOXzJWpfpGz56lse084= Name: res/drawable-anydpi-v21/design_ic_visibility.xml SHA1-Digest: cZ/iOJiTHcK5pMXO7FqvaQ+pJGU= Name: res/drawable-mdpi-v4/abc_textfield_default_mtrl_alpha.9.png SHA1-Digest: QAKVB+ymS1bLJVZt/mVSPtEVFH4= Name: res/drawable/abc_btn_radio_material.xml SHA1-Digest: npSvWgijFi0d2VFF3dOZmjf+WBQ= Name: res/menu/conversation_callable.xml SHA1-Digest: ov4Os4DCSxUfWkbgOaDMX7H0mic= Name: res/drawable-hdpi-v4/ic_advanced_black.png SHA1-Digest: qsBeW8x58ZtILedlYH0pENyVK2o= Name: res/drawable-v11/emoji_category_people_light.xml SHA1-Digest: XJvG+zF28Yhvy0FkN8iONtG7u60= Name: res/drawable-mdpi-v4/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: fnkne9XWnuqM1yhMI+5Xc4n/ET8= Name: res/drawable-hdpi-v4/ic_emoji_people_normal_dark.png SHA1-Digest: x75kXO/dKZkftrHJ/90e+0iI7hI= Name: res/drawable-xxhdpi-v4/abc_tab_indicator_mtrl_alpha.9.png SHA1-Digest: DjgjddBKSH0OILJhqJkZXAYKmKg= Name: res/layout/keyboard_text_with_header.xml SHA1-Digest: Wv6BkNDNRiSE283YBFco4mR1gRk= Name: res/layout/transfer_controls_stub.xml SHA1-Digest: MX3Bo85Lp6Uf92KqntyrIFCQBWU= Name: res/drawable-xxxhdpi-v4/ic_keyboard_white_24dp.png SHA1-Digest: gN2uflFTrjbwxYFgNyxkQcEn7rA= Name: res/drawable-hdpi-v4/ic_backspace_normal_light.png SHA1-Digest: N34S904roS41hC3ClAToTJcqMMM= Name: res/drawable-hdpi-v4/ic_emoji_nature_normal_light.png SHA1-Digest: YJItxsRUeM8R8PpwH1uR1hxGWdg= Name: res/layout/calendar_date_picker_header_view.xml SHA1-Digest: ikveS6qboRdIDe5drG6q0/N+5R0= Name: res/drawable-mdpi-v4/design_ic_visibility.png SHA1-Digest: vetC9sqO4mgRjqLU13g5Rr/b+zY= Name: res/drawable-xxhdpi-v4/abc_cab_background_top_mtrl_alpha.9.png SHA1-Digest: fWFzmRTvlhVZBzFAxTslbjQMJB4= Name: res/drawable-xhdpi-v4/abc_ic_star_black_36dp.png SHA1-Digest: ingvV99yU8o+utOuZ5On3REh0eY= Name: res/drawable-xhdpi-v4/ic_message_white.png SHA1-Digest: 6QpdcrrdXT6uAoawekcL1qni0Rc= Name: res/drawable-mdpi-v4/abc_scrubber_control_off_mtrl_alpha.png SHA1-Digest: Fjutt+gOkVGWRcWFLVw0yec4eGI= Name: res/drawable-sw600dp-hdpi-v13/ic_backspace_normal_light.png SHA1-Digest: xf5MwAWNNleSEorv2eI4d4oDxpU= Name: res/drawable-xxhdpi-v4/ic_account_box_dark.png SHA1-Digest: GsvbfizRDzbjjlC2VqxNCKayJP8= Name: res/drawable-hdpi-v4/divet_lower_right_dark.png SHA1-Digest: VgCDvu1t6hJk+F+dB7G/n8QTmC8= Name: res/layout-v16/centered_app_title.xml SHA1-Digest: n8KeQr1Oq7xk9uh5LaiQ0XwDCSY= Name: res/menu/conversation_insecure_no_push.xml SHA1-Digest: dZ99AatYbWrR+cuB4JuVHsLP5NA= Name: res/drawable-mdpi-v4/ic_scroll_down.png SHA1-Digest: 4UMDad9KZsBP08coQFbKrKfB1/c= Name: res/drawable-mdpi-v4/ic_delivery_delivered_dark.png SHA1-Digest: +hzNAViX2sH/Oq4hYo/Jzt/MBRE= Name: res/drawable/abc_item_background_holo_light.xml SHA1-Digest: ku9bJ9xYD07lS3GZhes5DH5hi7U= Name: res/drawable-hdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png SHA1-Digest: Bj6BC2+QG7pc8RQwt/bo9WgmUR0= Name: res/color-v23/design_tint_password_toggle.xml SHA1-Digest: wUyUHwcmGGXYL1JhhWMPQVcf7hA= Name: res/drawable-xhdpi-v4/ic_keyboard_grey600_24dp.png SHA1-Digest: ba6IHgRRfJ/4OZW2nznn9Ult9m8= Name: res/animator/rotate_minus_90_animation.xml SHA1-Digest: BuCc2mfyfzB/zJMaWWncVTSkoKM= Name: res/drawable-hdpi-v4/ic_image_dark.png SHA1-Digest: qDeccgIB1ZI6/06LmLZXRSm7bac= Name: res/drawable-xhdpi-v4/textfield_disabled_focused_holo_light.9.pn g SHA1-Digest: 5B5Y1sO935jPXP0SPaRMQdqzKvI= Name: res/layout/abc_popup_menu_header_item_layout.xml SHA1-Digest: y7fngb40bLUvCDoa8o2mc8LIJYk= Name: res/drawable-xxhdpi-v4/ic_pause_circle_fill_white_48dp.png SHA1-Digest: vzFzfQyNuhT89eChnal9tspeZsg= Name: res/layout/database_migration_activity.xml SHA1-Digest: z2yG2IDG8qxFlDIH7WygJ0zpdBs= Name: res/drawable-xxhdpi-v4/ic_volume_up_light.png SHA1-Digest: NT00jhNGLZ8Ny6I9bu2iaKmKylQ= Name: res/drawable-xxhdpi-v4/ic_circle_fill_white_48dp.png SHA1-Digest: WPdnScLoZXZq+BEx6sPmZiWl/dE= Name: res/layout-v17/conversation_item_sent.xml SHA1-Digest: MdzA2rieMwL44pCYA0CAQVc2SIA= Name: res/drawable-xxhdpi-v11/icon_cached.png SHA1-Digest: wJmPO5ZEOtTfYuF9/SjfEaakBdQ= Name: res/drawable/conversation_item_sent_indicator_text_shape.xml SHA1-Digest: BRZnbgGgP3/B4STOWiLHH0vbjKk= Name: res/drawable-xxhdpi-v4/ic_emoji_nature_normal_dark.png SHA1-Digest: jTPG18ir5W9htOIOpBCbFcZTAYE= Name: res/layout/video_player.xml SHA1-Digest: BuhNr7gl0JYIYva/P680FXCcprQ= Name: res/drawable-mdpi-v4/ic_backspace_normal_light.png SHA1-Digest: 7VNPeLEkk2fyRK2W095OIRZMMzQ= Name: res/drawable-xhdpi-v4/icon_dialog.png SHA1-Digest: T6mC39+Vb3aCPm8yTBOP0NXGcQY= Name: res/drawable-hdpi-v4/ic_search_holo_light.png SHA1-Digest: p8qeQgU+yMu9uC9l9d7sbEe0Ots= Name: res/color/recurrence_spinner_text_color.xml SHA1-Digest: KTMnjr+S6JCNPl2ruEYIIyJz260= Name: res/drawable-xxxhdpi-v4/icon_cached.png SHA1-Digest: BaH7d8VCsdzlxLuHsLX2q03DMd4= Name: res/drawable-hdpi-v4/ic_brightness_6_gray.png SHA1-Digest: ubRcZzc8X01gK0oBc4Og9MbuGpY= Name: res/anim/design_bottom_sheet_slide_out.xml SHA1-Digest: uTMw35lL6zfB58m4Npj1tkUwCKs= Name: res/drawable-hdpi-v4/ic_advanced_gray.png SHA1-Digest: PxHyaAavt/4FvSsD8I/KNTuoJZo= Name: res/drawable/abc_ratingbar_material.xml SHA1-Digest: dQYfnGBvF3NoNPyyD+NZnOWv73w= Name: res/drawable-xxxhdpi-v4/ic_photo_camera_dark.png SHA1-Digest: CNrxIWMbfMY4NawJIA3cDetDbww= Name: res/layout-v21/abc_screen_toolbar.xml SHA1-Digest: kDSm4GXLsz8OR1YX8n5lOFpNdUY= Name: res/layout/date_picker_dialog.xml SHA1-Digest: XyKMjo6lj4DuLnXlicH5pmbLScg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_979 SHA1-Digest: j0a3fBIi4xm5fCnN17oIGM+vnVg= Name: res/drawable/white_radius.xml SHA1-Digest: fmmwZ1xdiLKhbP7MVdTnY4KFGjc= Name: res/drawable/abc_item_background_holo_dark.xml SHA1-Digest: M0YVK8Qdk4ReRL9EAtEpVn58SLc= Name: res/drawable-hdpi-v4/sms_system_import_icon.png SHA1-Digest: kNjRatrvrZpV6kUpHfzc0mJ/SsY= Name: res/drawable-hdpi-v4/ic_push_black.png SHA1-Digest: sXEmWFhqjKFEWipqYB7tksawnDo= Name: res/drawable-hdpi-v4/ic_emoji_flags_normal_light.png SHA1-Digest: ZzWFcSV91qSF87GEePVsoqGaERM= Name: res/drawable-xhdpi-v4/abc_list_longpressed_holo.9.png SHA1-Digest: /HDLqKYSwxPWi6ihR75E/oot/mo= Name: res/drawable-xxhdpi-v4/ic_done_white_18dp.png SHA1-Digest: EDnKomUUnHQkMR2vV+OeoARosfQ= Name: res/drawable-xhdpi-v4/ic_textsms_black_32dp.png SHA1-Digest: NLdDR4CnBtbMUoNizjcRlymkUmA= Name: res/layout-v17/abc_select_dialog_material.xml SHA1-Digest: LcFH8UCfUCySOA9qwS2tde6YwTo= Name: res/drawable-xhdpi-v4/ic_push_registration_reminder.png SHA1-Digest: AwNzKs1sDdaRBwXEFxCZnMWF7K8= Name: res/drawable-xxhdpi-v4/ic_send_white_24dp.png SHA1-Digest: rRzu5B41HRdv1XCPH3CuWYOvjbY= Name: res/layout/conversation_activity_emojidrawer_stub.xml SHA1-Digest: t1a8C6MNcoHCQIVqcvozm7/mkuQ= Name: res/drawable-xxhdpi-v4/abc_btn_check_to_on_mtrl_015.png SHA1-Digest: HgH+EY9WJEVfAXnClDsismo2FSs= Name: res/drawable-xhdpi-v4/ic_add_white_24dp.png SHA1-Digest: 2jueTHnQvZ8Vcp1RBEddwYmfIPI= Name: res/drawable-xhdpi-v4/ic_clear_white_24dp.png SHA1-Digest: yHUv19dhuyxVD7h9zgxetxzXdqY= Name: res/drawable-xxxhdpi-v4/ic_photo_library_white_24dp.png SHA1-Digest: f9ooqjuRjc2RhyRz8OrwLDiUzZo= Name: res/drawable-xhdpi-v4/abc_ic_star_half_black_16dp.png SHA1-Digest: ax5FNeazE4MliK4rtD/ZdnnN0e4= Name: res/drawable-xhdpi-v4/notification_bg_normal.9.png SHA1-Digest: VLNXFzqJn8hvw7NJ233yGma3RqA= Name: res/drawable-xhdpi-v4/ic_check_normal_light.png SHA1-Digest: gIPk0Pkh6BrTqBMHlIMxsy/fsIM= Name: res/drawable-mdpi-v4/ic_archive_white_24dp.png SHA1-Digest: Rr1ExUM306gRaqOSv4HKaV1Xi24= Name: res/layout/psts_tab.xml SHA1-Digest: o9imNXCn5LOJeFwUrKL9ym55zsc= Name: res/drawable-mdpi-v4/ic_emoji_flags_activated_light.png SHA1-Digest: zPy1Pc8+rE9Q8U/4XTf7EoBImLA= Name: res/drawable-hdpi-v4/ic_audio_dark.png SHA1-Digest: ROtOY9puzFiwgnK/NvE8YMfAK7s= Name: res/layout-v11/conversation_fragment.xml SHA1-Digest: Zrf7tBSSnWPkuZHmbTbumTdPWxM= Name: res/drawable-hdpi-v4/ic_app_protection_black.png SHA1-Digest: 76+U2Q62sJTzGwKBKxY3kZU8FWI= Name: res/drawable-hdpi-v4/ic_select_all_white_24dp.png SHA1-Digest: ZBW6w3UxvJRfJPrPZa1Udvx+mQ8= Name: res/drawable-xxhdpi-v4/ic_photo_library_white_24dp.png SHA1-Digest: MvZIueYnCMLN3w1vmKlzt7oRsZU= Name: res/drawable-mdpi-v4/ic_recurrence_bubble_fill.png SHA1-Digest: uiFiU8hCp8NzsUz+JXg/L5MRlKc= Name: res/layout/conversation_item_last_seen.xml SHA1-Digest: 99xLTy2kmZYjpoUuhkydWVW4UNk= Name: res/drawable-xxhdpi-v4/ic_advanced_black.png SHA1-Digest: 28gSkjtuEf65ZxhL1pPtc/oDqVA= Name: res/drawable-xxhdpi-v4/ic_recurrence_bubble_fill.png SHA1-Digest: ZSo/QYJ1szMc8WeMUxkJEkrh6Sg= Name: res/layout/contact_selection_recyclerview_header.xml SHA1-Digest: Fbz73NjxKw6n9EpmxRB7nv90lFA= Name: res/drawable-xhdpi-v4/ic_emoji_symbols_activated_dark.png SHA1-Digest: O6dw8MJmqbt5cVBfJwXjy9dl4Jw= Name: res/drawable-hdpi-v4/icon_lock.png SHA1-Digest: gf6covsCZXb38rxel/tOWhblXqU= Name: res/drawable-mdpi-v4/abc_list_longpressed_holo.9.png SHA1-Digest: jaCqE8RSPyJL2tSTf5ctOZ8Wkp8= Name: res/menu/conversation_insecure.xml SHA1-Digest: Bm4eGsmeWu2cWVDKzmcMJwOpaPY= Name: res/layout/three_keys_view.xml SHA1-Digest: QL+LQf6misGBfzokK3irE7HAkIs= Name: res/layout/time_picker_view.xml SHA1-Digest: q/a8HhO/XF2hxtrnk0SZbS8s1X0= Name: res/drawable-xxhdpi-v4/abc_popup_background_mtrl_mult.9.png SHA1-Digest: nM7eMb1IwRTSPeCUiRnPcn3CGRw= Name: res/drawable-xhdpi-v4/abc_textfield_activated_mtrl_alpha.9.png SHA1-Digest: /UEK2xt/qrP3cCJflXSymHBKVrQ= Name: res/drawable-hdpi-v4/ic_delivery_delivered_dark.png SHA1-Digest: BVRTpt53DaJq8WorS14Mdsp2670= Name: res/drawable-xxxhdpi-v4/design_ic_visibility.png SHA1-Digest: pQ76Wd1817QL9Sc+XC/CD/ujbJk= Name: res/drawable-xxhdpi-v4/ic_call_split_white_24dp.png SHA1-Digest: wUanQMuGbW1mCBtd3BnTXMjQORY= Name: res/color/abc_secondary_text_material_light.xml SHA1-Digest: iShyfcc7mAW3Tmgrd7lTpEv94XA= Name: res/drawable-hdpi-v4/ic_emoji_people_activated_dark.png SHA1-Digest: woeh8Cf2QpEZQAUd2FWii6p8cEs= Name: classes.dex SHA1-Digest: up9o7kkx86uz0555YiFtqj2Keoo= Name: res/layout/abc_screen_content_include.xml SHA1-Digest: Qy4yTXeEqDx3ZNR+CxiliBg224M= Name: res/drawable-hdpi-v4/switch_bg_focused_holo_light.9.png SHA1-Digest: Uu0jDWQm42BXRa5E8t530Qt9aEI= Name: res/drawable-hdpi-v4/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: 9HmgRLugE7XLFQSCcDKTHa0FfIU= Name: res/drawable-xhdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png SHA1-Digest: MRB8bfz87PDQFDWGNEetiXxTiwY= Name: res/color/abc_hint_foreground_material_light.xml SHA1-Digest: dU+09ohh1nGXdVn1YwT5kYY75b8= Name: res/drawable/switch_thumb.xml SHA1-Digest: IvXGnToGPmtHHStuwCl0CRw2CMk= Name: res/drawable-mdpi-v4/abc_list_focused_holo.9.png SHA1-Digest: P0wooDvrgcWxD6FuObhOb0leW5c= Name: res/drawable-mdpi-v4/ic_audio_dark.png SHA1-Digest: OkAdHB8vHceQc1gdyZ7SSMpOsjI= Name: res/layout/conversation_item_pending_v11.xml SHA1-Digest: u5JGoq0fZR2sCq+V4MwzeILpgwU= Name: res/drawable-hdpi-v4/ic_unarchive_white_36dp.png SHA1-Digest: A4dD2i++rUvQSqqhVEzLaBtFEAI= Name: res/drawable-xxhdpi-v4/ic_photo_camera_light.png SHA1-Digest: qVaGtedXyxNPp742wVrf0auwnPw= Name: res/drawable/done_background_color_dark.xml SHA1-Digest: klD8Om4Oyhxq25J/tEWVEWUlndE= Name: res/drawable/abc_ic_go_search_api_material.xml SHA1-Digest: yZz8O2XObxIk4l71uBM6N3jIgjw= Name: res/drawable-xhdpi-v4/abc_textfield_default_mtrl_alpha.9.png SHA1-Digest: wxS5Do9e7cCh/fgOCbgTwd/ZeDE= Name: res/drawable-xxxhdpi-v4/ic_badge_24dp.png SHA1-Digest: l+ZgxeTzG/JHg5kXG3JELU7eC2s= Name: res/color/switch_thumb_material_light.xml SHA1-Digest: 1POjnvuNvl/u8Sw0L4NVAn2aqDY= Name: res/drawable-xxhdpi-v4/ic_push_black.png SHA1-Digest: QFqUhx4kdTHTt7iTwQmAq1sTZFg= Name: res/animator-v11/rotate_minus_90_animation.xml SHA1-Digest: uBdoND/8IkPM8vaObJcyA86WNN0= Name: res/drawable-ldrtl-hdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: nqxFTHIyt1k31oTQzMBPMAnZrEM= Name: res/color/dialog_text_color_holo_light.xml SHA1-Digest: fjQQlGjoz6OJxVoLGckSMA2HUxs= Name: res/drawable-xhdpi-v4/ic_menu_lock_dark.png SHA1-Digest: QZH/9M43JN2CCsxUok8sZSJG9Vw= Name: res/drawable-xxhdpi-v4/icon_dialog.png SHA1-Digest: 7htL/8mxE7HuKjrIiEujDYbhXZ4= Name: res/drawable-mdpi-v4/ic_check_white_24dp.png SHA1-Digest: 7qddwVwLSbaqFPK2dT/svB0LhvU= Name: res/drawable-hdpi-v4/ic_save_white_24dp.png SHA1-Digest: InR15xj1S9NvTQQK+HFLXcsp/3g= Name: res/drawable-mdpi-v4/abc_btn_check_to_on_mtrl_015.png SHA1-Digest: lhisDaprlUhlQTH+gRzBgtywArM= Name: res/drawable-hdpi-v4/abc_text_select_handle_left_mtrl_dark.png SHA1-Digest: rGE2d1k3CHBN3WEhJb2tWHl+aew= Name: res/drawable-xxhdpi-v4/switch_bg_disabled_holo_light.9.png SHA1-Digest: eBiELWDEVXjgDCShBHc8oAEmt+c= Name: res/drawable/pause_icon.xml SHA1-Digest: 1E0vzmWI1PnSBr5lNWo+Uj2DSnI= Name: res/drawable-hdpi-v4/ic_keyboard_grey600_24dp.png SHA1-Digest: geIXrNdM6qH9T37/duVF7NMT/MA= Name: res/drawable-xxhdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png SHA1-Digest: CwBgZCf6HQH3oXQJ4vFliod7poc= Name: res/drawable-hdpi-v4/textfield_focused_holo_light.9.png SHA1-Digest: G+sjjsHiKMXPwXhMYcjptrXj5oc= Name: res/drawable-hdpi-v4/ic_movie_creation_light.png SHA1-Digest: CTk9Kqz4dTOKyZo43Z/Y9HaD7QU= Name: res/drawable/recycler_view_fast_scroller_handle.xml SHA1-Digest: SdRfCp+VhZO6lfe8HeZXlw0zYSs= Name: res/drawable-v11/emoji_category_flags_light.xml SHA1-Digest: ttQ2nNvjn9Pj39Q83yk2TJnYG5w= Name: res/drawable-hdpi-v4/switch_bg_holo_light.9.png SHA1-Digest: 84PBAh8/+LjExDRXzcAPH20FsL4= Name: res/drawable-hdpi-v4/ic_emoji_people_normal_light.png SHA1-Digest: /FqXRAc9eO3Tjk4s0SDzY9/l1wU= Name: res/drawable-xxhdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: KU5BEai+yKGXvI7Yk2+h3Ehn27Y= Name: res/drawable-xxhdpi-v4/abc_text_select_handle_right_mtrl_dark.pn g SHA1-Digest: MUn5sC0GfdFC4B7Ip1/TmztPQtg= Name: res/drawable-xhdpi-v4/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: x+Boa0yvhikp6dlPQH9/d26D60I= Name: res/drawable-xhdpi-v4/ic_notifications_gray.png SHA1-Digest: RHlQ/YPTlJWX50ainCEmbH8pgBQ= Name: res/drawable-hdpi-v4/telephone.png SHA1-Digest: MxX6VeK/T9XSe84OU42SBnzNieM= Name: res/drawable-mdpi-v4/ic_emoji_symbols_normal_light.png SHA1-Digest: 0azrRyQA/jmzM9lZPrhNhAFsD6M= Name: res/layout/country_selection_fragment.xml SHA1-Digest: Jc5OXlKL+7GgqXpkjMZR+rNJnLQ= Name: res/layout/number_picker_dialog.xml SHA1-Digest: Le726FpY12LCbDIm6GilXPFp+bE= Name: res/drawable-hdpi-v4/ic_visibility_white_24dp.png SHA1-Digest: AIFMF1dUX+iPlFX1UKe26p3qYYE= Name: res/drawable-v21/avd_show_password.xml SHA1-Digest: 5fCv+tkbIcgxieAGqs/ocKfepwA= Name: res/drawable-xxhdpi-v4/spinner_disabled_holo_light.9.png SHA1-Digest: 8gTbh5GWm8YanJkaogk407hMRAg= Name: res/drawable/abc_vector_test.xml SHA1-Digest: Nt9ckQDkCsYP2/LnUbJXmZv47z4= Name: lib/armeabi-v7a/libcurve25519.so SHA1-Digest: KYDdvdHDfH7wsXCmAa0/oDfTujQ= Name: res/menu/conversation_add_to_contacts.xml SHA1-Digest: QpUdRBt5UvIttq4lXdJyhp/2/RU= Name: res/drawable-sw600dp-hdpi-v13/ic_backspace_disabled_dark.png SHA1-Digest: VIxaGhgY+mSZKn1s31TESzn4DnM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LK SHA1-Digest: xvUg1ayJgz+trzgBfPMAXKkxhfA= Name: res/drawable-mdpi-v4/ic_visibility_white_24dp.png SHA1-Digest: q+X4gJgIMywD2Qz4G2+t5m5cxWA= Name: res/drawable-mdpi-v4/notification_bg_low_normal.9.png SHA1-Digest: Tnovl3GT2HHDBF1rlU8FPMsFpFA= Name: res/anim/design_snackbar_out.xml SHA1-Digest: fenowEI7s0OCQ7vzkP4haFTfB0I= Name: res/drawable-xhdpi-v4/ic_search_holo_light.png SHA1-Digest: FYvtYtw7d0ihu+BJKrRT7cqElJQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ER SHA1-Digest: Zdar+UL4xzdPQFt8dymAV+TfKwc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ET SHA1-Digest: /7J0J8WsgoOnz0nPfD0pAP8tGRc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ES SHA1-Digest: vO0+zuCILnYVGkdZTI/yNQSiMR4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LS SHA1-Digest: TgChEH00iWOw/4ZwmfgaKxrl6n4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_EE SHA1-Digest: KvNmjHwk3dibtusK0UDPMueINoA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LR SHA1-Digest: TMP0kr7CCX4rjYLxiKQAU1Wy1I4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_EH SHA1-Digest: i24PgAgIVDhrmQ7zJsi1Tzwqk2I= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LU SHA1-Digest: HFO/p3FN3pqLbNDCaiXGieoLkp0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_EG SHA1-Digest: oBabLZVIr24yhTlvIFLSUX9bGJI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LT SHA1-Digest: O/aISF2KQ2YXXPzzAnj/Qa3ViWg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LV SHA1-Digest: u7TnNLiTdTLDGu+v/kmweHT+MUE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LY SHA1-Digest: 3+EmMQaxwyc6MZoGT+6rI02KZnQ= Name: res/drawable-xhdpi-v4/abc_btn_radio_to_on_mtrl_015.png SHA1-Digest: WCxduGC4/DHy03gNcIJSUEhQ28c= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_EC SHA1-Digest: zPdyT97JKATonTxe7DGzFrLWaWs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA SHA1-Digest: KJoYmXEaBb/Lxaclv4aGQ6ZFAuA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MC SHA1-Digest: N0bWepyN5iWxuFlQNcAmaDGIRs8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MD SHA1-Digest: G4PBmYaSDCyh/H+j/ghK2tX1hkw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ME SHA1-Digest: A8fjREffOU/zRBa5k02sVQjVvSg= Name: res/layout/notification_template_part_time.xml SHA1-Digest: LJb6bTMCYfMEF2qojVDiwIByprc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MF SHA1-Digest: ssuj/nWsAEEgbvmiD0lsIpCBRyE= Name: res/drawable-xhdpi-v4/ic_emoji_flags_activated_dark.png SHA1-Digest: +zOuSsFclhdcXHPhMp+42LgVol8= Name: res/drawable-mdpi-v4/ic_notifications_gray.png SHA1-Digest: 9eTMiewLGszMh0/QlBRqNfpi5RA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MG SHA1-Digest: t/2u8WW/YD++w2/vPANcZ8+bur8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MH SHA1-Digest: Pz3fbPeydh347yUkhnNODvX6hcE= Name: res/drawable-v11/emoji_category_emoticons_dark.xml SHA1-Digest: neGf9sfFwfZUmeK88rdNTn5VED0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DZ SHA1-Digest: OtKC5aNOYAusXeHTP01if/cBrlg= Name: res/layout/recipient_filter_item.xml SHA1-Digest: VUgdDdrc1IRnokXxcJhoEPy786k= Name: res/color-v23/abc_tint_seek_thumb.xml SHA1-Digest: IHjcOy8VwmGnfwQ8JwFcmWZVDDU= Name: res/drawable-xxxhdpi-v4/abc_ic_menu_share_mtrl_alpha.png SHA1-Digest: inKiiAaRqdYVz1OEfHB1GSgHGIg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FO SHA1-Digest: RGoqbxlX5EUZSPBF2+t08I8/jSc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KI SHA1-Digest: JpPpGDQXig+8TN7NxZgasg1ruaM= Name: res/layout-v21/notification_template_icon_group.xml SHA1-Digest: FQRV2YCzjKJGEsAwMn+JjMqsoDY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KP SHA1-Digest: QgBLukuMEssNUiTPgUPRc1bnaDE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN SHA1-Digest: Pz6/VS/F5Xy5F+i5U2QOyl90PXw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KM SHA1-Digest: vpMPjG0F+uX429EgpkO8aldKkMs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FR SHA1-Digest: a1QhUPJBZKLfMW2mqzccjKynwCs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FI SHA1-Digest: pqoxR+GHv88JjfxGVSEwMGxgGFE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KR SHA1-Digest: vxibGn2a5MVeHMKC9f3WDx7YQxQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FM SHA1-Digest: iBw584EdcpYewCZM9eqnAEAoRCA= Name: res/drawable-mdpi-v4/ic_emoji_emoticons_normal_light.png SHA1-Digest: WQYTufWjozYfYc1AsHLpdiQQ4JU= Name: res/drawable-hdpi-v4/ic_emoji_objects_activated_dark.png SHA1-Digest: PTW42A8fqBz2RuIzgRxFghdDq+w= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW SHA1-Digest: 4W8tOBau5KRlWkbIcWS6SlGoGUY= Name: res/drawable-mdpi-v4/abc_list_selector_disabled_holo_light.9.png SHA1-Digest: VAWAgM1S6jdrYNnzjAk62DbHpA8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FK SHA1-Digest: 4xr9H2T0u2q9tTPPTA+UCu7HEK0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FJ SHA1-Digest: iBujGNQa9VzoRwcYiX6F0vzTDl0= Name: res/drawable-xhdpi-v4/ic_lock_dark.png SHA1-Digest: ePnd0/QetF3i37z+L8fX4D8MAdE= Name: res/drawable/play_to_pause_animation.xml SHA1-Digest: WBjtPZrdocKlkzf/Oaz+prePgf4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY SHA1-Digest: 03YFHsJFuVtv7/MXuL5EoSFcO6w= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KZ SHA1-Digest: Vik98XodqlUzDlftZvMPsVsLPVM= Name: res/drawable-xxhdpi-v4/ic_emoji_places_activated_light.png SHA1-Digest: ojFTc2I4LWyaz+hlCbtaV322O9I= Name: res/anim/design_fab_out.xml SHA1-Digest: xUTzztkV6DmAqFXiLoefobMOg3g= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LA SHA1-Digest: UtIVhBub3YLaRbqe6yFbyWY+6rw= Name: res/drawable/button_background_dark.xml SHA1-Digest: OQDuvQ/O7NGuULqAMaeJVPFLf/w= Name: res/drawable/abc_ic_search_api_material.xml SHA1-Digest: /ppbqOVwWQ1J8clWZbd5QhdHqvU= Name: res/drawable-mdpi-v4/switch_thumb_disabled_holo_light.9.png SHA1-Digest: 6Q0egkPXcET6qWYJbaJnk1GKRsU= Name: res/drawable-xhdpi-v4/ic_emoji_recents_activated_light.png SHA1-Digest: 0/aR7+dXFWcZeERv9BVxvadKcdg= Name: res/drawable-xhdpi-v4/ic_unarchive_white_36dp.png SHA1-Digest: LgbdS76+tG/EFHzyN2nq+xK1uy8= Name: res/drawable-hdpi-v4/ic_lock_dark.png SHA1-Digest: mfKulURcVzJe1lP7MHqEuUoIv3w= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB SHA1-Digest: A47zFpjsEp2oHqVjFZk1nyYwApY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC SHA1-Digest: YYSZYRoCs99cFSnyVozK5gBFcoY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LI SHA1-Digest: IxcZbMQggJZ3rS6jR/5cy69pLsc= Name: res/drawable-xhdpi-v4/list_selector_background_selected.9.png SHA1-Digest: 36Ws5DFmoLt4ptxx59DL2RNDQ0M= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM SHA1-Digest: gfTHJ7JIvH2FcN/XfII/udV7cCo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GT SHA1-Digest: w4bqh0t2vs7aL/WiwrNT6WarI8c= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JO SHA1-Digest: QCuQvaudkpdmN/dBAGz+sdJxpso= Name: res/drawable-sw600dp-xhdpi-v13/ic_backspace_normal_dark.png SHA1-Digest: qeVeLxFIzDtJH0EBcTdnLQ7kCOU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GU SHA1-Digest: pAyuUdxHxW/PKgKBclYUDwsKPOY= Name: res/drawable-v11/emoji_category_emoticons_light.xml SHA1-Digest: E4KZ1dsCkf8sxgM1ZKhNwq9BF78= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GP SHA1-Digest: a5TY3UmqlDgflovtP2fdJzA6pEw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GR SHA1-Digest: HBNQbfxC/KzzLOmKMQM48SLaL48= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GL SHA1-Digest: aGwRRU75gSEqB76DpdhLH0Xtofw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GN SHA1-Digest: LD08eDpn1LSqgPryFRH3OP25m2g= Name: res/drawable/emoji_category_nature_dark.xml SHA1-Digest: x1c8JXbGKvjf4IXtaKBICjhu3YI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GM SHA1-Digest: /gjxazZapZnNENgsCij3VeHn9B0= Name: res/layout-v21/conversation_item_sent.xml SHA1-Digest: pbM8/s6sL88a9dVFuR+J69jkRmc= Name: res/layout/three_keys_view_text.xml SHA1-Digest: h+bjvII4QuWBdOFH+qtumcSO8Vc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GH SHA1-Digest: UjSi4eufeZoKEzNpsNkT0JYOycg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP SHA1-Digest: SSR+hPZ9s61kX7QfXAtX966+cmo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GG SHA1-Digest: 9uNty6lAftB/f7giJQuzvrXNdcI= Name: res/drawable-mdpi-v4/ic_warning_light.png SHA1-Digest: u1vMXsBaygsm7ZU1o2ULBh426cA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GI SHA1-Digest: ht+QnpDNMdvdw1aoRFL9QVBLL8g= Name: res/xml/recipient_preferences.xml SHA1-Digest: +vst9aS+NsfarDq0EYJPfm1w6B4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GD SHA1-Digest: 5hRI5tVRi+aNtKzdEhXnYlnZZd0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GE SHA1-Digest: 9KzVWZk8A/NeUHePqU749neSgeo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GF SHA1-Digest: xTxouBP3mvzLAtkuIylyErno4b8= Name: res/drawable-xxhdpi-v4/ic_delete_white_24dp.png SHA1-Digest: ToTJe0rPC+51yOcMxUIJK2UQCrw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GA SHA1-Digest: tCQ1ixHgiI6+2py6KCJbrJaP4ew= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GB SHA1-Digest: g1Eb4DVhbm27yVWAs0C0RfHKmmk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE SHA1-Digest: hhxWybR+y1YJams/LDhV7TiqnRs= Name: res/layout-v17/notification_template_big_media.xml SHA1-Digest: zXWQtldpf9zwNEVBWcdN2N8ECF4= Name: res/layout/icon_list_item.xml SHA1-Digest: +hJCdR7mOUblkQr1DPdMI/uVIUA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG SHA1-Digest: c6dA5Pv9A55r1JYqhJuVtkrTQ3w= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH SHA1-Digest: gnM2PhW3SsRXuVJdcweloUK25Tg= Name: res/drawable-xxhdpi-v4/ic_keyboard_grey600_24dp.png SHA1-Digest: 71c0wkotfKgiVtUV5pSOk8Yxmas= Name: res/drawable-xhdpi-v4/ic_video_dark.png SHA1-Digest: gAfbndEESreJ2VMxsPLWhaQgx0Y= Name: res/drawable-hdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png SHA1-Digest: N0JreKvhlyMPBSf34DQond465n0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN SHA1-Digest: dzikC814fHA5FBIDVvYqjMfqXVQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IM SHA1-Digest: xEQJah46A1zC6FRnLhSSyhT2ApE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL SHA1-Digest: spjtV2zUrIL9JCb6SxUGcqwlXnk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_HU SHA1-Digest: hiJid172D5b/yJ7aRcUnEUmlviA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_HT SHA1-Digest: 6prl9nP9LulRjv1H4O7XSbhIdEc= Name: res/drawable-xxxhdpi-v4/abc_ic_star_black_48dp.png SHA1-Digest: 3Enw5tpILSKRTE47u38wsuHunBw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_HR SHA1-Digest: PvTEEEpzEHP4YkdLq2jah8jZ3PE= Name: res/drawable-xhdpi-v4/ic_attach_grey600_24dp.png SHA1-Digest: dqjM1i80e/WZQt9+ivpn1HfepUk= Name: res/drawable-xhdpi-v4/ic_emoji_flags_normal_dark.png SHA1-Digest: aeFtQ2/DII4N35QshPIQSc9uGR4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_HN SHA1-Digest: Ig0hgK32Cb1R4EtULlC7iBzY9gY= Name: res/drawable-xxhdpi-v4/ic_archive_white_24dp.png SHA1-Digest: PHczos0QcABX65YfRO/syErB4fo= Name: res/drawable-mdpi-v4/list_selected_holo_dark.9.png SHA1-Digest: t3gAnIT+AzQuQiC0J6HKptJhyA0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT SHA1-Digest: BXQa475MixzA/WHNEtEDyDkwxvQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IS SHA1-Digest: iOYe7R9H2it3zfXOrSB51/nD43Q= Name: res/drawable-xxhdpi-v4/ic_group_photo.png SHA1-Digest: fEpeqS0uEBAKP5aLnnshyvAF/vs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR SHA1-Digest: LGNYDJdrySYvLVZbVR0zaLmruH8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_HK SHA1-Digest: o/wKdkwQhz+hy4ErMiAoZv1Cw0M= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IQ SHA1-Digest: LQsMTV6YeGQ2NLDk13e4WOst9WY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IO SHA1-Digest: jR144GfBKUf8gV5R43c3k3rrNWk= Name: res/layout-v16/notification_template_custom_big.xml SHA1-Digest: KGbdcn1yUGxa4t9YC/Sh0WbtxuY= Name: res/drawable-xxhdpi-v4/ic_emoji_flags_normal_light.png SHA1-Digest: O5Auy59UiqkF7JkxK2Mrno1oY7o= Name: res/drawable-xhdpi-v4/abc_btn_radio_to_on_mtrl_000.png SHA1-Digest: JjQKi93lV1YYH5MBZnohvbiJq3o= Name: res/drawable-mdpi-v4/ic_info_outline_white_24dp.png SHA1-Digest: rP3GXC5OLK1Fq5gEV//uGjxLFfs= Name: res/drawable-mdpi-v4/ic_photo_camera_dark.png SHA1-Digest: qsOkxexBIxDLCb9YTbMjKvv+y4Y= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE SHA1-Digest: +nuIxQw6Yy7X4VT8csg3TbRsaso= Name: res/drawable-mdpi-v4/ic_emoji_nature_activated_light.png SHA1-Digest: GbE0vJgtzLLaX5m+zN7odPdJYeU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GY SHA1-Digest: JB4kcjLRupWKPLtH5t9ldviypos= Name: res/color/abc_btn_colored_borderless_text_material.xml SHA1-Digest: j7/lbt9HBfjrDGK6fL0EPmGwe1E= Name: res/drawable-xxhdpi-v4/received_bubble.9.png SHA1-Digest: lRkGDA4EzxKSjWgS/YcYGg9439Q= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GW SHA1-Digest: vcGsJHow6MVDu0Lji2JyVXdqjC0= Name: res/drawable-xxhdpi-v4/ic_audio_light.png SHA1-Digest: SO4y6nHCuojyG2d0FMlOtPu7Dr4= Name: res/drawable/last_seen_divider_text_background_dark.xml SHA1-Digest: XCTGK2lgiB+eOOFDixpc9pV4VkA= Name: res/layout-v11/custom_default_preference_dialog.xml SHA1-Digest: eSFfc9ed+WiY/Qww/nUHAE6U0mk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HN SHA1-Digest: cwMXeyaFRSBfPIyMvOTmt6KgSDM= Name: res/drawable-mdpi-v4/switch_bg_holo_light.9.png SHA1-Digest: peyvmv7NaxWpuLuoG2od8vf2QRU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AC SHA1-Digest: vIN3CttxrwPdAm8LEVzU4YpPSaA= Name: res/drawable-xxhdpi-v4/ic_notifications_gray.png SHA1-Digest: /m/AUbkxcdLI5dOBEswBzrLp8EM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AD SHA1-Digest: nRlB4W/DiPwwm9sKc4HOjrzoO5Q= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AE SHA1-Digest: ++6EG1jMumZ2UY3DsKsxhBBRsFg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR SHA1-Digest: Wt+zmOIQ08rJiw9cOy0Vz/MIqzU= Name: res/animator-v21/design_appbar_state_list_animator.xml SHA1-Digest: 50Dn3r1oXTLsMWULaUrUJuF6nPw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AF SHA1-Digest: z+1jWPywDDplv2dcHD4Irq91Ink= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AG SHA1-Digest: aJDSKP+g9lnCmAdhOw+oABROOiQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HT SHA1-Digest: CjU4H9LGnAdt4DnS8ldypm7b/mQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HU SHA1-Digest: zQluiYuJHBeF0akgyxmaSresyPg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AI SHA1-Digest: PK7Uc59oaW/qXE9U8T7IpEvpy1s= Name: res/drawable-hdpi-v4/ic_forum_grey_32dp.png SHA1-Digest: UHT9ShIpeHLykgEROozQy3xzShU= Name: res/drawable-hdpi-v4/ic_emoji_recents_normal_dark.png SHA1-Digest: dRR7oZdxhfC/XeN8ZwLoXy3Z3wI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AL SHA1-Digest: n6P0ZKfI1ChKdN0sdxmdnqRlSEU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AM SHA1-Digest: /dy7DbdyOq8VY+DuUiTpXTgrrqA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK SHA1-Digest: JMIy+xiPxeHnhMYL0uA5LbQ53Nk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AO SHA1-Digest: kFAU6/4S8vlMD6jE9VwiPAmbzAE= Name: res/drawable-xxhdpi-v4/abc_ic_star_black_16dp.png SHA1-Digest: n+HinWLESEjbz+LSJ3hFDhs1hsI= Name: res/anim/design_snackbar_in.xml SHA1-Digest: 6+HyUPWWyECHhvkn7FfU/SL24MA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ID SHA1-Digest: D1U+SYrU0I44sl+7t/yIy0YFu9M= Name: res/drawable-xhdpi-v4/list_selected_holo_dark.9.png SHA1-Digest: ddkFXkinX/KLQzbgj+uBDgSBNFU= Name: res/drawable-xxxhdpi-v4/ic_volume_off_grey600_18dp.png SHA1-Digest: 9nDlHIGm8wI0pVXGz3YjzpfveLU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IE SHA1-Digest: 6a5/hyzdWz2DOkVqPUFVF1juCDs= Name: res/drawable-mdpi-v4/ic_emoji_objects_normal_light.png SHA1-Digest: 8bIMp6ZGnSnKqvsqfHGF9H7IgwY= Name: res/drawable-mdpi-v4/ic_delete_white_24dp.png SHA1-Digest: z6KzQKHtFcbcmozOSn6HHLwaz8c= Name: res/drawable/abc_list_selector_holo_dark.xml SHA1-Digest: sfvAyXGl6drAr6es0R11c9d9BWE= Name: res/drawable-xxhdpi-v4/ic_emoji_flags_normal_dark.png SHA1-Digest: sJlblRDOGWvtx1he8SCgTQ6+d5Q= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BD SHA1-Digest: Sd9O4ZZ3sBJVxtp61RQSoMAoNpg= Name: res/layout/recipient_preference_activity.xml SHA1-Digest: nI+GgTFzDD5vtF7KMDrb8EhWU8s= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BE SHA1-Digest: 1FeBETP5tcQ+rKO2HTOUgkMA8Xg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GP SHA1-Digest: +AHBCvaMUwR5WR8ScZ7DF+fJfyw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BB SHA1-Digest: 20VuKO6cHZ1qH/bUD1e/fkU2DxY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GM SHA1-Digest: iXchZ5Ka/Tk+qVgTFvaCopIYO1g= Name: res/drawable-hdpi-v4/ic_forum_black_32dp.png SHA1-Digest: BmY3i7e9T0Ro2n9Ngq8dLbf4xKQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GN SHA1-Digest: 77m+Qpu01kiBk7oJ/r2iZK/2bfU= Name: res/drawable-xxhdpi-v4/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: cVnySG63cChr86Xl5aTin9ET16o= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BH SHA1-Digest: GO1tkKUHBn+2CU9V4yyS4HbQ6wI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BI SHA1-Digest: CDgPaufb53sX5LjRnO1qJPfAeB8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GT SHA1-Digest: zvE7DK/SMpGIz/43zTCcPsuSiak= Name: res/drawable-xxhdpi-v4/ic_volume_up_dark.png SHA1-Digest: dd3uIJyggz/MJzm4RKtXZhjy/s4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BF SHA1-Digest: FG5EUq6fZH8fT/LSeNN0EXcbIlc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GQ SHA1-Digest: 6c0GWsj9cqC30fwEc8BaLCAU1ak= Name: res/drawable-xxhdpi-v4/ic_emoji_symbols_normal_dark.png SHA1-Digest: yD3rsfn6iwOXaqSx+MIrVWJPLmQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BG SHA1-Digest: T+U7wCqZXSdix7+z1qPuCVxJ2jw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GR SHA1-Digest: AEHSrwsbyJ4H2vWSsYzLeyMXXhg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BL SHA1-Digest: ZuPRnQsFHTZWAzasmr+PfmgHq4k= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG SHA1-Digest: pZPb/GbfmcFApldxhbfJlYKSbzI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BM SHA1-Digest: 31BpK6j6vY+dtbny3rj9k3PPVao= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GH SHA1-Digest: Obhc2qkx9ApiLjwjjRjeokZ/62o= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BJ SHA1-Digest: 4nM/3Uj3CBj2bJP/JwEDJPDxceo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GE SHA1-Digest: hY0YLU+5ACIRQ+92Bew22sXk03o= Name: res/drawable-hdpi-v4/ic_emoji_objects_normal_dark.png SHA1-Digest: +ELSno8p0YtqY+96A7MujNJi6ak= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF SHA1-Digest: dO1yTJErRVAiQcLOB+T2ODVTeUs= Name: res/layout/share_activity.xml SHA1-Digest: Zh+yENYe4VAyNPssbwyFNUc9rF8= Name: res/drawable-mdpi-v4/ic_volume_up_light.png SHA1-Digest: aGwUsIMK4xipGLuaa+boq3rKmYg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BQ SHA1-Digest: TnaPSzSpwAJn3ZPig2YW6GAPU/A= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GL SHA1-Digest: sIgUqCcJiuWlsHwDUnGMvhmRgRA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BN SHA1-Digest: Djr6w42RtkSMKmIm3ZIMpbdIE0o= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GI SHA1-Digest: JLk3lgpICTHwNDEBXTRH/mWfBTg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BO SHA1-Digest: sxOe0MG6Pmg+YSk39kGbyRFNZ0U= Name: res/anim/slide_to_right.xml SHA1-Digest: 0bv28EjFYG0W9O86/FUEyVGaIDc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AT SHA1-Digest: oRS1jsJ83kKRsBrluWNrhbUXCls= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AS SHA1-Digest: p3jgCy3MqbH7l74OUev4NFimlqU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AR SHA1-Digest: k5/KeZoUIUKgjU9R/xpSG+rmTLY= Name: res/drawable-xhdpi-v4/lockscreen_watermark_light.png SHA1-Digest: 6lUHGvK7lN2atKOLCJlnvLhmeqI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AX SHA1-Digest: au5xw4Yhh3VSBRfAarRWUY1taTw= Name: res/drawable/conversation_item_header_background.xml SHA1-Digest: PkBtM4IfjAPJkWt/w+fC0XhKS5c= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AW SHA1-Digest: Fg/Imi/ZuwIgx8sXqAA8vbGz96Q= Name: res/layout-v11/conversation_list_fragment.xml SHA1-Digest: nSxfEzUUdkF4DsI87dXk4NAFW7U= Name: res/drawable-xxhdpi-v4/ic_send_secure_white_24dp.png SHA1-Digest: yM6Azpc4M0EQy+FKt/rEfZeTJ3Q= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AU SHA1-Digest: rNtriWF1bPuAzY6yT3tFywuvk78= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GW SHA1-Digest: tHYoWIo8foBpEPEiNe2PijXNE/I= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AZ SHA1-Digest: m9gma0XyqBhVujW4lEH8nHnpqM0= Name: res/color-v11/abc_background_cache_hint_selector_material_light. xml SHA1-Digest: vGI9qWZK86UPRnOAjUVBBgxhqoM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU SHA1-Digest: WIWb4bRf3ipdNJBLq1zGXXHp2gA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BA SHA1-Digest: xl4bGHzTb1ONkQLxPjEsAmoBzj0= Name: res/drawable/emoji_category_places_dark.xml SHA1-Digest: Q9uMQ9IMOgzG5UHP4aZYv447Q0I= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GY SHA1-Digest: sVW5c2OBdc+R5QjGDn+pF9Ol39A= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CG SHA1-Digest: 49h7UcYYHZoInHM3E1miwqOYVYA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CH SHA1-Digest: p/TKBsfWqdiCPs8HHP/E/mPcfao= Name: res/drawable-ldrtl-v17/actionbar_icon.xml SHA1-Digest: Yy7GfAlLoeD86LGaO6/AyLJjuC4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CI SHA1-Digest: jyCDgLt/DZjar3UUKN3BDuazdVY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR SHA1-Digest: GTFH7TPPnk4kanUvtsG26CI3o1w= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CC SHA1-Digest: YOCUZ6W2OQRQBoQ1x+iyz9KuWeY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CD SHA1-Digest: gOjV58VpYgEFLCbdpOMvxHoKBZo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FM SHA1-Digest: h3m8uP8ZgphBtIf9P9857Jpwz3M= Name: res/drawable-hdpi-v4/ic_done_all_white_18dp.png SHA1-Digest: Voh4CAWcsOvG8zcGCHeDggnuO7Q= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CF SHA1-Digest: 5GGJE/y+2T8OjL3JM2MdOeyadDA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FO SHA1-Digest: zdp8+9dsFOhc6t740lFqWb2ANjI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CO SHA1-Digest: 9MEc79rZITKNDzE/dwvOtCdTyqo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FI SHA1-Digest: jiBuaN4YG4PTv1veIxmvIG3TBfA= Name: res/drawable-mdpi-v4/notification_bg_normal_pressed.9.png SHA1-Digest: ahL1IX+Xa3VHwxUrKeuJQsGU4Rs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FJ SHA1-Digest: 65CaqQeneDMGoYSvhEvr8Q3ahew= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CR SHA1-Digest: sHfKGnXc4597cZdkX/uncowbW9c= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FK SHA1-Digest: tQpvHJid1sXnyHukmw6JaXIqmAY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CK SHA1-Digest: oT97kWguQsQJUswJcgE0cApkNpo= Name: res/drawable-xhdpi-v4/ic_scroll_down.png SHA1-Digest: 7mUXwCPFIDWuZ07Ho64JPZ10CEw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CL SHA1-Digest: iyE9q0jmA6cMek4EEo2yYBzZwoI= Name: res/drawable-xhdpi-v4/sms_selection_icon.png SHA1-Digest: wtrkdTQokfokr8L6uunormQ+5wA= Name: res/drawable-mdpi-v4/abc_textfield_activated_mtrl_alpha.9.png SHA1-Digest: LHgpBq22Tp/Uz7G6kTktjBB334g= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CM SHA1-Digest: UXzV02+ZbeZUahJeWjmBbvZrsEk= Name: res/drawable-xhdpi-v4/abc_text_select_handle_middle_mtrl_light.p ng SHA1-Digest: Q0JBWav3MG5gImPSBRDnr4igoT8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CN SHA1-Digest: UxIDGc1/Zsp7w3r8ayBpFcZ1Yeo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BW SHA1-Digest: CCPodHb3OXMU0phUndEdai3juLQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB SHA1-Digest: zwgwhzdgPiYe5GB75F5qikhL5BM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GA SHA1-Digest: mXTJ4JekKj83uzLUQ8GGZBRUx0c= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BY SHA1-Digest: mkIJ8Fnk2cwqunSzdN9oC7jeUKI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD SHA1-Digest: Tun1XnwGDHmR+zKcQOQUIAjK1Dg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BS SHA1-Digest: 11/QVxGwVGuN+tnb08ZAKRI2NJI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BR SHA1-Digest: 2Owu+rFtvtUqgowSakSIoXHXJ94= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BT SHA1-Digest: 8imG/8/yP5TVi7PC1lTjMn5m6zs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CA SHA1-Digest: LBQOBivyXTVPF5s9ec6DJIBUIuQ= Name: res/drawable-xxxhdpi-v4/abc_ic_star_half_black_48dp.png SHA1-Digest: vK8qEx+zPuCHitVVR+eyI1+y5S8= Name: res/layout/empty_time_zone_item.xml SHA1-Digest: uV3ERXa4BnpJU2qMX0278dny67Q= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BZ SHA1-Digest: CYVN63xJfXvDfB3Fqb9w8k74beM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DJ SHA1-Digest: nuoH5PgiCiqrHM2XgcckrZip6Rg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DK SHA1-Digest: keAd6yGDc5xreI60W5rbVEJTlMA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ER SHA1-Digest: 2B1bVCxBlyzCrhcwatJGXx4bJ+A= Name: res/layout/country_selection.xml SHA1-Digest: xAbtwp5RvpUqcs1VfEnelzP82hA= Name: res/layout/dots_text_view.xml SHA1-Digest: r2xnC1LIQwvev9hzjc4fbI+A2cM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DE SHA1-Digest: O6u5x7R23j22KmNHKTBjwELbeUA= Name: res/drawable-xhdpi-v4/ic_emoji_emoticons_normal_dark.png SHA1-Digest: gvYfcoP514wtkhSreB6JDJczoZ8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EG SHA1-Digest: QZfrehcNtoXOprJx2oKpTGYIkpg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH SHA1-Digest: jMI99XT9IAcD8cWLnqhLySm7A4A= Name: res/drawable-hdpi-v11/icon_notification.png SHA1-Digest: FoRvCNK1ST0VgA8svxNX/EHXCas= Name: res/drawable-sw600dp-mdpi-v13/ic_backspace_normal_light.png SHA1-Digest: rXM6Yx12bhYdJ0eMIoZCItQ5Cx4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE SHA1-Digest: xyVERBugEAeC91y4qOmi9i8/o2U= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DO SHA1-Digest: jyNFaTKAVoAUCuDfVYCqZKgtx4Y= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EC SHA1-Digest: VB1SSVwrv98pDqOPCTb7EKe9n/s= Name: res/drawable-hdpi-v4/design_ic_visibility_off.png SHA1-Digest: nkWvioUMjHczslPxcZZEyMkNViU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DM SHA1-Digest: KsHr4Ck3ZQln5ARS24zr+eVPxW4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CZ SHA1-Digest: ijxHfP7jkZp2P4mqOvmjZaWEORI= Name: res/drawable-mdpi-v4/received_bubble.9.png SHA1-Digest: x4/fSsrwLvIKbFtRM1k+uNrk6VU= Name: res/drawable-mdpi-v4/ic_image_light.png SHA1-Digest: qNmSEg+M63Ml3A51KLqsi4HIZd8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CY SHA1-Digest: ey6pjSYCIMI1FGXZQBrErXsLjIY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CX SHA1-Digest: iopB/+UJdyMuO+btbjm0X7ucaU0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CW SHA1-Digest: kRauL45KgJDW7izSTVtZz4p0ckc= Name: res/layout/contact_selection_list_fragment.xml SHA1-Digest: F4B1cmfBX1/iK16sEezJ2nGQxeM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CV SHA1-Digest: ZRkhuoOG2zs4dQ+RLfk406ZdpmY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CU SHA1-Digest: 4o+E5+gf3D1OOscHX8atbcy0kck= Name: res/layout-v11/notification_template_big_media_narrow.xml SHA1-Digest: oQnOkQJ8yn9gKNhR/QObx+1BzOU= Name: assets/fonts/Roboto-Bold.ttf SHA1-Digest: j1hyrMHyDgMGFiAB3rrPXhTUbow= Name: res/drawable/circle_touch_highlight_background.xml SHA1-Digest: o9QlrRMiE0mC1+dmj4+fg7vpBW8= Name: res/drawable-xhdpi-v4/abc_list_divider_mtrl_alpha.9.png SHA1-Digest: ORZEUwpye3vs2cpRUfvVYVg7UtU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ET SHA1-Digest: KYPXyUmVxhsuBMzC9KmijeCbJvs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ES SHA1-Digest: MgeYrCD9Qz+kbs3eB9BTpLUsgJo= Name: res/drawable-mdpi-v4/ic_mood_white_24dp.png SHA1-Digest: dvtOkGjMXXW/uAykZXv4pzt/rro= Name: res/drawable-xhdpi-v4/lockscreen_watermark_dark.png SHA1-Digest: 0c85wNc0nV5Zztf7GsYMc7SKJTI= Name: res/drawable-mdpi-v4/lockscreen_watermark_dark.png SHA1-Digest: M0xsGNyKiuHwaBCCuPvJDCgOWgA= Name: res/drawable-hdpi-v4/abc_text_select_handle_middle_mtrl_dark.png SHA1-Digest: QmeO4XUWQssq7UOePsOcCnXMg80= Name: res/drawable-xhdpi-v4/abc_tab_indicator_mtrl_alpha.9.png SHA1-Digest: kXL/oF0Wug/Gk2tR7sFuSTOQNZU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DZ SHA1-Digest: isb4iyWWPmCc4KaLPdAbG9LxUGI= Name: res/drawable-hdpi-v4/ic_volume_off_white_18dp.png SHA1-Digest: GaIIaoCJBoGZlHMg+T2u3TA3DtQ= Name: res/layout/receive_key_dialog.xml SHA1-Digest: umAL3zCxRPVhCLGnBBtyN3B/E/c= Name: res/drawable-xhdpi-v4/ic_emoji_flags_normal_light.png SHA1-Digest: lnap7s6+mfZWSa/l952QIfrjfU4= Name: res/drawable-xhdpi-v4/check_dark.png SHA1-Digest: wCknIutQ7PCuuGL3szqt8X3y6BY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE SHA1-Digest: veS2qCnXv2CIdekpR8wVY7S0YRg= Name: META-INF/services/com.fasterxml.jackson.core.JsonFactory SHA1-Digest: Ba5fEoE3Fm8wW/CHD7Agsn0j4D0= Name: res/drawable-sw600dp-mdpi-v13/ic_backspace_disabled_light.png SHA1-Digest: vkntS8T2+of7dvX5DqAoEZGa4a0= Name: res/drawable-xxhdpi-v4/divet_lower_right_light.png SHA1-Digest: AoEdVMbc2iqKwEMnSYBrDuGKNTU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM SHA1-Digest: MuSZ6z//YxaDeXfh9p7jLHN9jtA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DK SHA1-Digest: QNYeeXfrzF2M3AHD8PH0lSFfBpQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DJ SHA1-Digest: TjL2tm/WEHORBFpPSB2iKzLin0w= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO SHA1-Digest: 4MQzhxGPh2UvA2hEAOmKuLmLjVg= Name: res/drawable-hdpi-v4/lockscreen_watermark_dark.png SHA1-Digest: jRk++D87ZgQBkJ2HLWlABxkEJJQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR SHA1-Digest: djjUxEw6P+Un0fNmuek0Wj/unAg= Name: res/layout/abc_screen_simple_overlay_action_mode.xml SHA1-Digest: 5in0sNUsZqh4AJN6Pw4SP4w5RCg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CU SHA1-Digest: L4fGEd2b36x3B/ZkBQIPZrkxYFs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CV SHA1-Digest: 8oINpdPA1tfwd1xtwYLwl+JKJQM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CW SHA1-Digest: gxOB2dDgOPmp7DX7PY18i/keSY4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CX SHA1-Digest: ptOqYyu8NkyFsRkZKnSnBZ6zuzE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CY SHA1-Digest: SgfYT+e2ABNPV5gK+yC5VwknWyE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CZ SHA1-Digest: lMkate/GlFryo0WNt7Ds6eNKf0w= Name: res/drawable-xhdpi-v4/ic_launch_white_24dp.png SHA1-Digest: J4dUVgCgynf3FrSuG7+a6bU9mAc= Name: res/drawable-xxhdpi-v4/ic_arrow_forward_light.png SHA1-Digest: XhNliG5RxtJMFSBDJpJcoL5ZvZQ= Name: res/layout-v17/select_dialog_multichoice_material.xml SHA1-Digest: GBBt+uTGA7oIEPEWpuMqdMpUrUw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA SHA1-Digest: ySdxqBDls0+sF2Mtr7oXInkt2AM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CD SHA1-Digest: 44FmMe2H+uQGUDQWCxQHYmWtEJU= Name: res/menu/text_secure_normal.xml SHA1-Digest: F4X7SCTmX0Sx8aqQfkiGNZg1X8E= Name: res/drawable-mdpi-v4/ic_push_black.png SHA1-Digest: 7JH3YpKYQ89wj3uCww9JJrd/cKg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CC SHA1-Digest: bYV5mRwHKNV3xCqTq3G5S3wWv8g= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CF SHA1-Digest: W5Kaxj3DVMll60RPohluudL9TLg= Name: res/drawable-xhdpi-v4/ic_push_black.png SHA1-Digest: MBM5xqEiJZrPwf4T9dMQM/k96zo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CH SHA1-Digest: PaGyg6lSNaV+FhgV56fYVWsSp0g= Name: res/drawable-mdpi-v4/abc_ic_star_black_36dp.png SHA1-Digest: AkbIo7N/y4oNm7eUJCKzP6fxrhs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CG SHA1-Digest: NxbsruqXH5X1i3jA2NWgjPPXtJc= Name: res/drawable-xhdpi-v4/ic_circle_fill_white_48dp.png SHA1-Digest: Chtzf/JNBEcona4slrfjLZETkLo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CI SHA1-Digest: k+ZcuCojRM7JtzU+49D2VbQtC8U= Name: res/drawable-hdpi-v4/abc_ic_menu_share_mtrl_alpha.png SHA1-Digest: rSfiuPx2H1NYOeY4GaO1qwFYRjE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL SHA1-Digest: EWYC041ztRwFr2Xm4lSi8eTLXzY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CK SHA1-Digest: ondrgHu3kQ/vOvsoKJ4ZnTv9MJY= Name: res/layout/delivery_status_view.xml SHA1-Digest: 6BRRUDIendx8RZks9Wb7bxwScGg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN SHA1-Digest: 57BACNq73zhveN70g8Gy8m1/B0o= Name: res/layout/abc_list_menu_item_checkbox.xml SHA1-Digest: 6BtxtrSj5417sUBtS2ccXrol3a8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CM SHA1-Digest: btb3rwRKf/TH6qiEeUpx7j8hP+c= Name: res/drawable-xxhdpi-v4/ic_lock_black_18dp.png SHA1-Digest: +hVAizc6fLsbURNGbG9PNMZ+8LA= Name: res/drawable-xxxhdpi-v11/icon_notification.png SHA1-Digest: ut/jwoxWLjvDcTItFRuRYYMHw5U= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO SHA1-Digest: kvllo49+MjSxxsXzyYyAbbwF95M= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW SHA1-Digest: 7fX3UbjaTm1aofpSZ0dl5lHDKkU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BT SHA1-Digest: ZPNerUvoDoeRRffvRPouac7IOlY= Name: res/drawable-xxhdpi-v4/ic_emoji_symbols_activated_dark.png SHA1-Digest: Oe6OgCJo8bzjcxo0MkFN6QDNdJI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR SHA1-Digest: 4RdHscY9hoBgTn3t4Z9oZ2dhb8g= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS SHA1-Digest: NWTvV7I25jpEPfSAVWAMloG6d8U= Name: res/drawable-hdpi-v4/ic_unarchive_white_24dp.png SHA1-Digest: SwaIQBYFv+ygqbJYuaoeyC0K3/k= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BQ SHA1-Digest: qvDii2e11KIo9mabPdcfrGte1UI= Name: res/drawable-xhdpi-v4/ic_clear_search_holo_light.png SHA1-Digest: ZmoEnVIiO/dvThjQLwtuajrNDlQ= Name: res/drawable-ldrtl-mdpi-v17/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: 4I3x9UHH+eskJQGXDUb2z+F6rrA= Name: resources.arsc SHA1-Digest: SZyPjShTOLc16yX0OCBeoMLqK6w= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BZ SHA1-Digest: 90eoTH1FLrCCCEVj6zQdv77LZwE= Name: res/drawable-hdpi-v4/ic_forward_white_24dp.png SHA1-Digest: YYTaVTQihbfmZTG56ilHXaNjsWg= Name: res/drawable-xxhdpi-v4/textfield_disabled_focused_holo_light.9.p ng SHA1-Digest: bpNO5KEKc7d4ScXs/viJJsIhwgw= Name: res/drawable-mdpi-v4/ic_lock_black_18dp.png SHA1-Digest: 2Io9MNnOrhJgjFuMDd5JepnF+6M= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BY SHA1-Digest: hlusA6zV6u+as/nPQWudxi+EAFs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BG SHA1-Digest: zPqZd34GtstxbJGqiQOmOGa/oTI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF SHA1-Digest: XhMVoHAMKx61FgYan9iATpjXhMg= Name: res/drawable-xhdpi-v4/list_selector_disabled_holo_light.9.png SHA1-Digest: GN6V3GwpXHWWT1+XcPJFYRdM3lM= Name: res/drawable-mdpi-v4/check_dark.png SHA1-Digest: Mmk/wQGsPx9qCwuG5XCItkQAUdU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BE SHA1-Digest: PThzPqsNKhv6qvi0H9/XBjmSTBM= Name: res/drawable-v12/recycler_view_fast_scroller_bubble.xml SHA1-Digest: NEQxqwQjygZugYFJNUU8ybLfvxQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BD SHA1-Digest: zqr+fnU+QyiKBX1gohtaz8bqvTg= Name: res/drawable-xxhdpi-v4/abc_ic_menu_share_mtrl_alpha.png SHA1-Digest: k2FhN6sjfE6Vf2vHkeQqYXKKIVw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB SHA1-Digest: ZseUhGEUK9ofgYnmSxg6eyHMq68= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BA SHA1-Digest: HZBbXvY5yhwHJcXZvUavCYKSJ9I= Name: res/drawable-xhdpi-v4/ic_emoji_symbols_activated_light.png SHA1-Digest: tioux6wUodj2fXXVQfLAMMDOLJ4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BO SHA1-Digest: WjQKJP65IaFuvsONV2pfU/9Xx9Q= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BN SHA1-Digest: MQAWvyb6WAl9Y9Jsro9OsLXY8pc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM SHA1-Digest: t9C26Uoex4q7CQMaTvWaPt1CYtw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BL SHA1-Digest: t2RZ5Fa6IAdcTGQ4w1l2GO+xPvE= Name: res/drawable-mdpi-v4/ic_mood_grey600_24dp.png SHA1-Digest: yePrmpaOitqbCUN/9v8Zw5DAd1M= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ SHA1-Digest: VTIJaH7v5WKM2XQTkB6RlitC5qU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BI SHA1-Digest: M7iEmpuB6P127+E1KBA9gDw1Odc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BH SHA1-Digest: lYJDjH1V5r4IgdU9/5sh8cR9pfY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS SHA1-Digest: v+0D3G2lcYzniM5MF6acbNSI0wA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT SHA1-Digest: UEBKvpQ+V1kbUAp7cMUuXIx1Q88= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU SHA1-Digest: 9OmMFEZiuaPs+0UbiHTj8yZiUaw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AO SHA1-Digest: Sf4t7Pm2Z8QsUU2iGZFbHRLw/KQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR SHA1-Digest: io8Y7Lth6xwkbP2wyFQQ3jH0VxA= Name: res/drawable-xxhdpi-v4/ic_photo_camera_dark.png SHA1-Digest: P2GVmoSvOhdWvxQH5hoRV8BVWxM= Name: res/drawable-hdpi-v4/ic_scroll_down.png SHA1-Digest: hjcZbb4w/B37ElipP9OIQY9mYT8= Name: res/layout-v17/timezonepickerview.xml SHA1-Digest: PU1pS6cdzIRNL3BQfCI/xZpwyDs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AW SHA1-Digest: MsQjiDH7ELCu5ikPZOz1q0MoLzM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AX SHA1-Digest: 9/3rbTTKIDRla/SGyXSpXs4xiZs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AZ SHA1-Digest: vnxwJVaHudcrOZMMihOXhAvy6IY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AD SHA1-Digest: kGr3DKbucyuf5taYSa0pQy3Qoh4= Name: res/layout-v16/conversation_item_pending.xml SHA1-Digest: 999cf8KEPIu3huSjteafAocQEvE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AC SHA1-Digest: KaSYORw7lBd0nuEayNDKf+xYA1s= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AF SHA1-Digest: mVW7BZcOqgD48kwg9vYsYl5RMfM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AE SHA1-Digest: 1WNDTfo5pRtjzhYWHkSWUfBdIwc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AL SHA1-Digest: tCtON8SyAKhTm86Cqe5BPa8uUYw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AM SHA1-Digest: osV0gnDAdYG1jYIU9/jYn5DUnkY= Name: res/drawable-mdpi-v4/ic_block_grey600_18dp.png SHA1-Digest: LASlB+CdirTiKoljjDUau/XsTA4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG SHA1-Digest: Q5VezNyRzoOB2NnDorUA6iSJ9R0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI SHA1-Digest: 0+NqbX/WTN35/9eX1ohe0/ZmSxs= Name: res/drawable-xhdpi-v4/ic_account_box_dark.png SHA1-Digest: vjY+yRoWv57mSOllC5kxrEN3Vrw= Name: res/drawable-hdpi-v4/ic_clear_white_24dp.png SHA1-Digest: orS5Gk6WmH9NZSs1ijcs74Dx1sI= Name: res/drawable-xxhdpi-v4/ic_download_circle_fill_white_48dp.png SHA1-Digest: Y+Rs4lxQUsDRMnu2vxYCQURBSAM= Name: res/drawable-ldrtl-mdpi-v4/ic_send_white_24dp.png SHA1-Digest: CQX99LRiRyAaCoTHxWwoepI0OkY= Name: res/drawable-mdpi-v4/ic_lock_dark.png SHA1-Digest: 1w/kkUXbv9MJnbsM463SSV5cMiY= Name: res/drawable/abc_seekbar_track_material.xml SHA1-Digest: DOBvDIvN1gw9U5RRVtBGkfeW8rY= Name: res/drawable-mdpi-v4/ic_call_split_white_24dp.png SHA1-Digest: 8qL2gvSfUYlK4oyZ04vPGuorCmg= Name: res/drawable-mdpi-v4/ic_emoji_places_activated_light.png SHA1-Digest: ZhyqtFVMpNmbesgTdjHuEDUNDmA= Name: res/layout/abc_list_menu_item_radio.xml SHA1-Digest: CYF8DGDu/tGrm7bhmsGCFVCBKJ4= Name: res/drawable-mdpi-v4/ic_emoji_places_activated_dark.png SHA1-Digest: CAUz7psRrLauurScITHMToQj86w= Name: res/drawable-xhdpi-v4/ic_call_split_white_24dp.png SHA1-Digest: 5kaLNhHTd44FJJwLLasb5Xoe0AA= Name: res/drawable-xhdpi-v4/ic_emoji_people_normal_dark.png SHA1-Digest: yfTboLWV6BppCCwwtlckHxAS3Q8= Name: res/drawable-mdpi-v4/abc_ic_menu_share_mtrl_alpha.png SHA1-Digest: OdP7A+E6BkFvIe4CYZ3B3GbAUlU= Name: res/layout-sw600dp-v13/three_keys_view.xml SHA1-Digest: 3uGfWlElwgZa5k/lbEACoh96N34= Name: res/drawable/abc_list_selector_holo_light.xml SHA1-Digest: 97+5PTkiP0Ok/P9371JlRcH0xnQ= Name: res/drawable-xxhdpi-v4/lockscreen_watermark_light.png SHA1-Digest: JLCC2x8L/5GAbnfY3JOlgzQvBfU= Name: res/drawable-hdpi-v4/ic_account_box_dark.png SHA1-Digest: m50HVJzBJFBsdA+sXUO/+3a6hIg= Name: res/drawable-mdpi-v4/ic_file_download_white_36dp.png SHA1-Digest: szHldFj8d1T/007VtQmOUh/46Q4= Name: res/drawable-xxhdpi-v4/ic_push_registration_reminder.png SHA1-Digest: 1f6vjXn5e6byK+htQHRiUQFPVWE= Name: res/drawable-mdpi-v4/ic_menu_add_field_holo_light.png SHA1-Digest: BfyD3ORZvAkYbrmX4Ss/sRhwDdg= Name: res/layout-v17/custom_default_preference_dialog.xml SHA1-Digest: iGxN2JBtz3p68bBASElzuLFMZzU= Name: res/layout/contact_selection_list_item.xml SHA1-Digest: L5DreMhEMyEg5kzlMbcyxUnz1M4= Name: res/drawable-xhdpi-v4/ic_send_secure_white_24dp.png SHA1-Digest: R8maxjCmT/Qdys8DG1GTy+SK2bw= Name: res/drawable-xhdpi-v4/abc_list_selector_disabled_holo_dark.9.png SHA1-Digest: Iz14YLSRp9C85A2InSd7OO4Ga6U= Name: res/layout/three_keys_view_right_drawable.xml SHA1-Digest: jELF1tB3fATGtHRK/M3WuOSpTp8= Name: res/drawable-xxhdpi-v4/textfield_default_holo_light.9.png SHA1-Digest: DKeaMClqVsDdOOwdcsmTzm049Zg= Name: res/drawable/abc_btn_borderless_material.xml SHA1-Digest: 9+UIx5LzMU67HsEZH0vBreWiJPE= Name: res/drawable-xxhdpi-v4/abc_textfield_search_default_mtrl_alpha.9 .png SHA1-Digest: shUg8eUw5YmR+wQVpcO99B+3lpc= Name: res/menu/conversation_popup.xml SHA1-Digest: YiGcF2JRF0i4X43cCpg6L4zuPq4= Name: res/drawable/abc_text_cursor_material.xml SHA1-Digest: j7vrPa0Diwit3eZnv21AEhEOiLU= Name: res/drawable-hdpi-v4/abc_ic_star_black_36dp.png SHA1-Digest: 5eU75xlD5NF9nxHXpUHFwQBWZc4= Name: res/drawable-mdpi-v4/abc_popup_background_mtrl_mult.9.png SHA1-Digest: 6LMTm1InS590S2d/jvEnjLlAl54= Name: res/drawable-xxxhdpi-v4/ic_volume_off_white_18dp.png SHA1-Digest: efdJ0EGlIHkF/i7NUvlXuZJW81U= Name: res/drawable-hdpi-v4/ic_message_gray.png SHA1-Digest: Kmyuoij8UtDPhtnWiCaykXTj7CI= Name: res/drawable-xxhdpi-v4/ic_check_white_24dp.png SHA1-Digest: ajFOxsoiud71Y08tFYzc86nEu4I= Name: res/drawable-xxhdpi-v4/ic_content_copy_white_24dp.png SHA1-Digest: 3M5uyFkFu53/ZTVZB62Q7AKEK/k= Name: res/drawable-xxhdpi-v4/ic_recurrence_bubble_outline.png SHA1-Digest: Mws9Jj5swemHmSryIsLB2xf4VRQ= Name: res/drawable-mdpi-v4/ic_group_photo.png SHA1-Digest: 5ScMDwdp0mOd43Kk70YU/8oijzQ= Name: res/drawable-xxhdpi-v4/splash_padlock.png SHA1-Digest: QmhDw732whE2AFLQNdHLTT/WWa8= Name: res/drawable/conversation_list_item_read_background_dark.xml SHA1-Digest: LvClDZ10MhrY1cHLq+HuCrG8zow= Name: res/drawable-xhdpi-v4/abc_list_focused_holo.9.png SHA1-Digest: Odk0wSbJp0hyQ3RZGhgf+2IXqBU= Name: res/drawable/recycler_view_fast_scroller_bubble.xml SHA1-Digest: Ya8tiZ7KeS8UUktQeNFWslmEDhk= Name: res/drawable-hdpi-v4/ic_emoji_objects_activated_light.png SHA1-Digest: 8a4XJYRMdVDkIlsTr91XRxviM/E= Name: res/drawable-xxxhdpi-v4/ic_menu_lock_dark.png SHA1-Digest: Jo/vY59By3J9bFk1Tqks3sxoSZU= Name: res/drawable-hdpi-v4/ic_emoji_symbols_activated_light.png SHA1-Digest: OhvEmgGQJIMywrqr0FEEGPVRwts= Name: res/drawable-mdpi-v4/abc_list_pressed_holo_dark.9.png SHA1-Digest: o79LWrpVg8mMdhT8PFdC/uVHnB4= Name: res/layout/design_layout_snackbar_include.xml SHA1-Digest: JMAZAhRiLqpWuKlGO8ByuAUTsWk= Name: res/layout/contact_selection_list_header.xml SHA1-Digest: lKees/HLMOcN/YNRlkGFb3Q2mJI= Name: res/layout/preference_list_fragment.xml SHA1-Digest: 7aUJw5669SsXS2Ka8sy6fcP7F5c= ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/metadata/org.smssecure.smssecure/signatures/135/MANIFEST.MF0000644000175000017500000070534114717152070026614 0ustar00hanshansManifest-Version: 1.0 Built-By: Generated-by-ADT Created-By: Android Gradle 2.3.0 Name: res/drawable-xhdpi-v4/abc_ic_star_half_black_48dp.png SHA1-Digest: Mv+KiFiSaa+WMki+npzbbru9CxE= Name: res/drawable/abc_btn_check_material.xml SHA1-Digest: 4XHnecusACTIgtImUjC7bQ9HNM8= Name: res/drawable-xhdpi-v4/ic_video_light.png SHA1-Digest: MN62WNe3Z3Ix8KEzRhWfoTk1cZs= Name: res/drawable-hdpi-v4/ic_lock_black_18dp.png SHA1-Digest: S7n2/JX/yuDCLErq0/yirCHoKkw= Name: res/layout/design_navigation_item_separator.xml SHA1-Digest: ZrVCT50MLzsYssSmPSnwC2kz/Hs= Name: res/drawable-hdpi-v4/abc_textfield_search_activated_mtrl_alpha.9 .png SHA1-Digest: sM1tzoxIgcK5w/PwGSZxzucCBqY= Name: res/drawable-hdpi-v4/ic_audio_light.png SHA1-Digest: xNqmnd/y7K6e8YxxooF3JQdiXY0= Name: res/drawable-mdpi-v4/ic_notifications_black.png SHA1-Digest: 6ymoxV29wZYUy6sr+Ai7KRA6bho= Name: res/drawable-xhdpi-v4/ic_advanced_gray.png SHA1-Digest: Fwk8+Z5gi7yWa5u3g3okLYRzF2I= Name: res/drawable-xxxhdpi-v4/ic_textsms_grey_32dp.png SHA1-Digest: wrVuGOcGiNV6OEAJHeLccFCrPuo= Name: res/drawable-xxhdpi-v4/list_focused_holo.9.png SHA1-Digest: FsvLP65iWVfEfIkCPXw4wimwY7M= Name: res/drawable-v21/abc_action_bar_item_background_material.xml SHA1-Digest: VikGrClarpkvTVwTS9DEpzyZFsI= Name: res/drawable-hdpi-v4/ic_arrow_forward_dark.png SHA1-Digest: 1nsgbxW3dt92O/zOyIR6fu/oAuE= Name: res/drawable-xxhdpi-v4/ic_arrow_forward_dark.png SHA1-Digest: SBng7xmSEAoXdcYL69mZuFcTPGY= Name: res/drawable-mdpi-v4/ic_attach_grey600_24dp.png SHA1-Digest: Y2/Pddk+40XsYIjXZgcBpyy2rZ0= Name: res/drawable-xxhdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png SHA1-Digest: K1fb6Q4Ss1JZ+SleO0yJcwwYiRw= Name: res/menu/conversation_list_batch_unarchive.xml SHA1-Digest: SzOPIvPnn6JkS5tSou5ug6wsbcM= Name: res/layout/share_list_item_view.xml SHA1-Digest: 3AXSzFXHJv5n5OHUOFJHT8zp6hY= Name: META-INF/services/com.fasterxml.jackson.core.ObjectCodec SHA1-Digest: mECZ0InRcm6Sm6/P0dIQdmb5YtU= Name: res/drawable-xxhdpi-v4/ic_emoji_objects_activated_dark.png SHA1-Digest: a3H9kAQunORai9e7vsG5YLx4SSM= Name: res/drawable-xxxhdpi-v4/abc_ic_star_black_16dp.png SHA1-Digest: otncOZG21mw8ew/aFY/F4swt8TY= Name: res/drawable-hdpi-v4/ic_block_grey600_18dp.png SHA1-Digest: f7/aPVltrHbzIob5ZeThe5Gyzy4= Name: res/drawable-hdpi-v4/ic_refresh_white_24dp.png SHA1-Digest: JpHXJPqpDRr/RGu10JNw8PhDSQg= Name: res/drawable-xxhdpi-v4/ic_emoji_recents_normal_light.png SHA1-Digest: lD1pqxqDa0jPpEhYDLAsAXCftEU= Name: res/drawable-mdpi-v4/ic_photo_library_white_24dp.png SHA1-Digest: PYJmFGp8A2W69vJlZFZgRfvMp+M= Name: res/drawable-mdpi-v4/ic_action_warning_red.png SHA1-Digest: RjBwTELk56fDdub3UY9Udsc11No= Name: res/layout/conversation_item_sent_audio.xml SHA1-Digest: Lm4pT7mpM/AbEZi6RcSECga58s0= Name: res/drawable-xhdpi-v4/switch_thumb_activated_holo_light.9.png SHA1-Digest: W+Hupcm4+5Vmhoa+hMuaWAPbj9Y= Name: res/color-v23/abc_color_highlight_material.xml SHA1-Digest: AZcOKzrt8RFgMk7A8l3oYy0Zs8E= Name: res/drawable-mdpi-v4/ic_image_dark.png SHA1-Digest: tl9E+GRY38WjmIIqa5mfi5g/8gQ= Name: res/drawable-mdpi-v4/ic_message_gray.png SHA1-Digest: RAKiyIri5FnSjCa42A5wv+2fyoM= Name: res/xml/preferences_advanced.xml SHA1-Digest: aVAKjgCzKsMgjz7lTmTCIRgngeQ= Name: res/drawable-xxhdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png SHA1-Digest: ZqCBR70J+G8APLB6odEE4sbBMrY= Name: res/drawable-ldrtl-hdpi-v4/ic_send_white_24dp.png SHA1-Digest: uansiOchl/+vx7xiZ3nIiMiGCQk= Name: res/drawable-xxhdpi-v4/ic_attach_grey600_24dp.png SHA1-Digest: o55tAgatw4R2/OT1keYTGzj5Uq0= Name: res/layout-v17/conversation_list_item_view.xml SHA1-Digest: klXZl5scbw2zTdPmiNoDnxd4Ei0= Name: res/layout-v16/design_bottom_sheet_dialog.xml SHA1-Digest: 1rIpLJL0aeA/GPy2COzl5qHBWXk= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_995 SHA1-Digest: qCXtFZpw6cj0RMgs3HecypVQnr4= Name: res/drawable-v11/emoji_category_recent_light.xml SHA1-Digest: oPOiG2+0o/JkT7flAFeyAHvaMRg= Name: res/drawable-xxhdpi-v4/ic_message_black.png SHA1-Digest: NuI7D3PpQauURg/C+kxR7T3VtG4= Name: res/drawable/notification_tile_bg.xml SHA1-Digest: LgSTFvI2CxOfbLCHJppJbfr7rxM= Name: res/menu/conversation_secure_sms.xml SHA1-Digest: Umly1//KqmlELY6mwG2+4bTMi78= Name: res/drawable-xxhdpi-v4/lockscreen_watermark_dark.png SHA1-Digest: nyEXs/BKk4Ioez2E62mpWxZ+B6U= Name: res/drawable-hdpi-v4/switch_thumb_holo_light_v2.9.png SHA1-Digest: KtN2rASYoM9JbiYC5rZ+EHNeOWo= Name: res/drawable-xxhdpi-v4/abc_list_selector_disabled_holo_light.9.p ng SHA1-Digest: iN/uNjBfhVbAIr76ujTy7rKk9Iw= Name: res/layout/time_zone_item.xml SHA1-Digest: YlBjC538EjDtp9P8TjEDmFrDQAE= Name: res/layout-v17/import_export_fragment.xml SHA1-Digest: hQ8M5oAwocq4Gs0f+qnxXP80mBY= Name: res/layout-v17/abc_alert_dialog_title_material.xml SHA1-Digest: R57u/fXK5HZURzoutFnsLdSlH5g= Name: res/drawable-xhdpi-v4/textfield_default_holo_light.9.png SHA1-Digest: DuXFeUGOvd3j97HhEpwhlm8QBrg= Name: res/anim/design_bottom_sheet_slide_in.xml SHA1-Digest: JZvF3dH3kK4CROiDGCiyzk0bcCI= Name: res/drawable-mdpi-v4/import_database.png SHA1-Digest: fmXUj235S97wYR7qTHYpjQq9fbE= Name: res/drawable-xhdpi-v4/ic_image_dark.png SHA1-Digest: Wc1oo+kvKKtXAmMpJm8cPMFfXdY= Name: res/layout-v13/conversation_item_last_seen.xml SHA1-Digest: nVh5GMSO8uG5b0Ff3hCCIwcZBrA= Name: res/drawable-xxhdpi-v4/ic_emoji_people_normal_light.png SHA1-Digest: srCBZKoPt9Jaqa8vWWUqk2sRnfw= Name: res/drawable/play_icon.xml SHA1-Digest: lkBA8RCo8EPDUO2fBtG5BPQmAjI= Name: res/animator/scale_with_alpha.xml SHA1-Digest: tn55l/2e75ToW4LXM0LeHHxAjTo= Name: res/drawable-mdpi-v4/abc_btn_check_to_on_mtrl_000.png SHA1-Digest: 8Sb/L5pJ5dP5LYtTMluOvUh3sug= Name: res/drawable-hdpi-v4/ic_emoji_nature_activated_dark.png SHA1-Digest: x9M5xUjmYWNWSCQWFLQYHUuuEbM= Name: res/drawable-v11/abc_textfield_search_material.xml SHA1-Digest: Qps1rIzG6yKql3AjAF66l6BFKZ4= Name: res/drawable-xxhdpi-v4/abc_switch_track_mtrl_alpha.9.png SHA1-Digest: IgT0lCbG3uY9vQQnsJCrHog+mlg= Name: res/drawable/done_background_color.xml SHA1-Digest: 7ueXFtM7hTTfYaxhY/Wk2LkLW9Y= Name: res/layout/conversation_item_update.xml SHA1-Digest: yICdPauTzp4uWodLV+0ThZ02PLM= Name: res/drawable-hdpi-v4/ic_clear_search_holo_light.png SHA1-Digest: GappRCZ2yjTCkyb77wbsfrfr2mw= Name: res/layout-v16/radial_time_header_label.xml SHA1-Digest: WLRzqx7Uv9ULMutleCP5/vCzpT8= Name: res/drawable/emoji_category_emoticons_light.xml SHA1-Digest: 2FAU6vv7sPGDcgJK8ssIbr7cbTo= Name: res/anim/abc_slide_in_top.xml SHA1-Digest: YBdDQbyB2IFfhjwKI6NSPOXqz7g= Name: res/drawable-xhdpi-v4/ic_menu_search_holo_light.png SHA1-Digest: vZ6F2Jg1C+TGavPO7lrCWLFzJhk= Name: res/drawable-xhdpi-v11/icon_notification.png SHA1-Digest: LCqhXT3KEiWE2VoQR5IZnnSuP00= Name: res/drawable-xxhdpi-v4/ic_emoji_flags_activated_dark.png SHA1-Digest: FF6h02gP05ugJ46mQGGdoUQTpbU= Name: res/drawable-xxhdpi-v4/ic_save_white_24dp.png SHA1-Digest: sAK0BTkETpylaJTMYHVQPsJxYvM= Name: res/anim/animation_toggle_in.xml SHA1-Digest: +tj+Zh9Sc3CL9SYyjJU2Itw9c70= Name: res/drawable-xhdpi-v4/ic_emoji_objects_activated_dark.png SHA1-Digest: Vb/8P05ydTz2tlnWlBhqCxHIBvc= Name: res/drawable-v11/emoji_category_people_dark.xml SHA1-Digest: DrKa3ghgfZjL+KHGdcveooLEhNs= Name: res/drawable/edit_text_holo_light.xml SHA1-Digest: zTZ3rXIUm6a45VyuKxhROL/d2b8= Name: res/color/abc_tint_edittext.xml SHA1-Digest: 4uJWj3RC+LNAAjywKebgsX5EjHo= Name: res/drawable-xxhdpi-v4/spinner_focused_holo_light.9.png SHA1-Digest: 7FDASvJfc8AEzERJoNcGwpNM0As= Name: res/drawable-mdpi-v4/ic_recurrence_bubble_outline_disabled.png SHA1-Digest: zRSUvTMpuUG8fSqRq7C4tY+Bt2w= Name: res/drawable-xhdpi-v4/ic_check_white_24dp.png SHA1-Digest: QvCyJjo+HtNwdQ1nKZjy8iqqicA= Name: res/drawable-mdpi-v4/ic_emoji_flags_normal_light.png SHA1-Digest: xxZCgGAanMLE7VRtyfrK/RS3zT0= Name: res/xml-v12/badge_widget_provider.xml SHA1-Digest: m0ulyiJ4lgd6vIhg6VXxujTEa1M= Name: res/drawable-xxhdpi-v4/quick_shutter_button.png SHA1-Digest: KvyyenumTdpPrG8D4bMe2acXvig= Name: res/drawable-xhdpi-v4/spinner_default_holo_light.9.png SHA1-Digest: Yv8DQV5iCOq6B/hrpnjziMEY1oE= Name: res/drawable-hdpi-v4/abc_ic_star_half_black_36dp.png SHA1-Digest: q5BP6iz9no2ZdX9wgjUfIjqk8OY= Name: res/animator-v11/bottom_pause_to_play_animation.xml SHA1-Digest: oFZDtNQqOffhAkrXPBaDgRgyJt0= Name: res/drawable-xxhdpi-v4/ic_content_copy_dark.png SHA1-Digest: hhn2223i5kzrfsNUn6lURO64Jm4= Name: res/drawable-mdpi-v4/ic_arrow_forward_light.png SHA1-Digest: iaicJjzpqMa6uswTfQLd6ewu4KM= Name: res/layout/message_details_activity.xml SHA1-Digest: rCNh6NSBINEtZvsZM7XZ6ovpoUQ= Name: res/drawable/abc_ic_voice_search_api_material.xml SHA1-Digest: AnbktjACLylEEl0ccn+3np57M8c= Name: res/drawable-mdpi-v4/ic_create_white_24dp.png SHA1-Digest: SzyTWAmlxMrH8hL+e2A2/qyJYs0= Name: res/drawable-xhdpi-v4/ic_lock_black_18dp.png SHA1-Digest: N7y019Qm4MTsPDJvUf6xpcjmLOg= Name: res/drawable/key_background_dark.xml SHA1-Digest: vjYs0zd8wTeSSImwhd7SzCMvt3E= Name: res/layout/design_text_input_password_icon.xml SHA1-Digest: 8D2alFuhVd6gqYJyh/7GJ+MLiP0= Name: res/color-v23/abc_tint_default.xml SHA1-Digest: QmvGaAvI4emOb0xLdYeq9wlWw6o= Name: res/drawable/abc_btn_colored_material.xml SHA1-Digest: c1kBk3kYH1Q2Zf0o2yN8Btg8MFI= Name: res/drawable-xhdpi-v4/ic_keyboard_white_24dp.png SHA1-Digest: QmlBOgi9X59yQWRT5FwKxyBl9X8= Name: res/drawable-xhdpi-v4/ic_reply.png SHA1-Digest: E6A43gDKrTDEXYlV747+gpcFSZ0= Name: res/drawable-mdpi-v4/ic_reply_white_36dp.png SHA1-Digest: BeQkwEyqIS7XzKmiVB4cEpfkII4= Name: res/drawable-xxxhdpi-v4/ic_photo_camera_light.png SHA1-Digest: P+u4/QQtC7tIBQVcMn1wJJXHt6Y= Name: res/drawable-xhdpi-v4/abc_ic_star_black_48dp.png SHA1-Digest: pUh1yzyRb6c3D0mL7cI4wKExeTI= Name: res/drawable-mdpi-v4/ic_movie_creation_light.png SHA1-Digest: ll+Zf8EyVcEVp0tgfNkBYbp6TnI= Name: res/layout/hms_picker_dialog.xml SHA1-Digest: NTCwll4GJmpbJ6yInQY9S3eixuQ= Name: res/drawable-xhdpi-v4/check.png SHA1-Digest: dQfE3OFyk+3YoFOYwn+y+t8e7zw= Name: res/drawable-hdpi-v4/abc_cab_background_top_mtrl_alpha.9.png SHA1-Digest: J10MbRypNxo+JeKfGf61OMkWgdY= Name: res/drawable-hdpi-v4/abc_ic_star_half_black_48dp.png SHA1-Digest: xgnROefed1vgMaxaqCgtRMAIU/Q= Name: res/drawable-mdpi-v4/ic_keyboard_grey600_24dp.png SHA1-Digest: 0C4Saeb25DYu43+FGC1Z9DnkBIA= Name: res/layout/keyboard.xml SHA1-Digest: K6E6mKC8m2G6XyF1toWTaLmQB9s= Name: res/drawable/key_background_light.xml SHA1-Digest: 2ArVCjLjr02aFbyRYSeHh1WEUrE= Name: res/drawable-hdpi-v4/check.png SHA1-Digest: GYF1t9VttL+se1d6Il+emojcdXo= Name: res/layout/message_details_header.xml SHA1-Digest: XlVTimKNxmd+tFrX1/7ddxbVd9A= Name: res/drawable/reminder_background.xml SHA1-Digest: O2XBirGQxJDYU6A/4O3mZKlWr0g= Name: res/drawable-xxhdpi-v4/last_seen_background.9.png SHA1-Digest: AcZa88WjmAgL9QcaLEep+IS+fDw= Name: res/drawable-xxhdpi-v4/abc_ic_star_black_48dp.png SHA1-Digest: P/TePusgUK0jTzJbBXwUqj2ymIs= Name: res/drawable-xhdpi-v4/list_longpressed_holo_light.9.png SHA1-Digest: DbbsJ/A8Zk/Z2Q8z6jeVTrNtcKw= Name: res/drawable-hdpi-v4/ic_warning_light.png SHA1-Digest: bWchqS5mxrUz0jEXqPmNSp2dQyE= Name: res/color-v23/abc_btn_colored_text_material.xml SHA1-Digest: iPtKeCtxBDsPlPY18AN/Fz+9bAA= Name: res/drawable-mdpi-v4/alert.png SHA1-Digest: eaLxnhQSh/qDiCsxeefWPdSrua4= Name: res/drawable-hdpi-v4/ic_badge_24dp.png SHA1-Digest: F5QVt4jyFy9QAu6iHeG9kr+LGNs= Name: res/drawable/badge_drawable.xml SHA1-Digest: T2XKzv4ZjP7gDWfKmITyjP1H/gg= Name: res/drawable-v21/avd_hide_password_3.xml SHA1-Digest: G4VEl1xnzQqDzGNNopnaKto5JNc= Name: res/drawable-xhdpi-v4/notification_bg_low_pressed.9.png SHA1-Digest: 9MYmMKRnfwttaoRGc1WDg0jzgyY= Name: res/drawable-xxhdpi-v4/ic_emoji_people_activated_light.png SHA1-Digest: JmwHDfqoh/u3AajOzeVn+cJbhEY= Name: res/layout-v11/notification_template_custom_big.xml SHA1-Digest: IHHhQmMO1W+0BJYbRtm3HlkLGTM= Name: res/color-v23/abc_tint_switch_track.xml SHA1-Digest: io40yf4syWIZa4sAMqqnmDJ5ruw= Name: res/drawable-hdpi-v4/ic_play_circle_fill_white_48dp.png SHA1-Digest: lJitUpTdEPX/w2HQe4ET4fM55p4= Name: res/layout-v16/selected_recipient_list_item.xml SHA1-Digest: IoTIQcdfhF5yj/bZbVuL4GTD1As= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_506 SHA1-Digest: fSwyg4KxEaIctkOMUXXbP0UnACc= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_505 SHA1-Digest: dkhqE6jk0X2rJBCd5h+xJ2vZwls= Name: res/drawable-xxxhdpi-v4/abc_text_select_handle_left_mtrl_dark.pn g SHA1-Digest: FavPjuk6olEZey6sIq7rywmBBwY= Name: res/layout/selected_recipient_list_item.xml SHA1-Digest: duqiHkirDUOdtYcYOK4BSsgiKvk= Name: res/drawable-ldrtl-hdpi-v17/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: 2gdfs4MdNrmZ5fPzRYQKwf3z8nA= Name: res/drawable-mdpi-v4/ic_video_dark.png SHA1-Digest: xgX3HdiZ1/FlP1EZbUATFRtezMA= Name: res/layout/recycler_view_fast_scroller.xml SHA1-Digest: YJYkRqf9kmJnZ6ioHAYG/PoGmxs= Name: res/drawable-xhdpi-v4/ic_archive_white_24dp.png SHA1-Digest: dv+8iSp/u9VOCKmfF/uz7ojqMLU= Name: res/drawable-xhdpi-v4/import_database.png SHA1-Digest: KI04q70EXc7fJQgqbWFJ2KxNYsg= Name: res/menu/group_create.xml SHA1-Digest: /ecK7ty1S1TQH3znAj++GOgp7gs= Name: res/drawable-xhdpi-v4/ic_emoji_places_activated_dark.png SHA1-Digest: EjXH3Q1hCvFRWrwCYGmB5Fz54aM= Name: res/drawable-xhdpi-v4/ic_menu_remove_holo_light.png SHA1-Digest: SygzBPctWRFH6LDfo+w+DP/k2m0= Name: res/layout/media_preview_activity.xml SHA1-Digest: y9gWsqCJFG9jBKiJKU9APtvjnT8= Name: res/drawable-xxhdpi-v4/ic_emoji_recents_activated_light.png SHA1-Digest: T77IRcTGYBtfJ8Gd0tQKqhw0Gks= Name: res/color/abc_background_cache_hint_selector_material_light.xml SHA1-Digest: 6zQV9p9NddLltjdGn1qBYsiO04o= Name: assets/fonts/AndroidClockMono-Thin.ttf SHA1-Digest: nDLU3MtBsUBWd/Jq7PrvujP5/YE= Name: res/drawable-v11/emoji_category_objects_dark.xml SHA1-Digest: iBMvAA5/+zPuG1HSUhaIO4kjoBI= Name: res/drawable/abc_seekbar_thumb_material.xml SHA1-Digest: R+zfNUVLkXYZ8GH32A2aK443lBQ= Name: res/anim/abc_shrink_fade_out_from_bottom.xml SHA1-Digest: tUIF7X/jI8K8Q3PAJpeZVS4JPi8= Name: res/drawable-mdpi-v4/ic_audio_light.png SHA1-Digest: TRsHE+zwfiIvhq+iybeYWtbSf8M= Name: res/drawable-xxhdpi-v4/ic_emoji_recents_activated_dark.png SHA1-Digest: ritPDDx4JIboLAAoTEz26lD0vfk= Name: res/drawable-sw600dp-mdpi-v13/ic_backspace_disabled_dark.png SHA1-Digest: bBJa6fMJoP87GQtakbAV7tKOdHw= Name: res/xml/preferences_manual_mms.xml SHA1-Digest: DHV/b9/XvRlc1RH8WUMy7A0M3Mw= Name: res/drawable-xxhdpi-v4/ic_volume_off_grey600_18dp.png SHA1-Digest: odmgY1yq1ymCKnYPkGL9f0NabqA= Name: res/drawable-xxhdpi-v4/abc_list_pressed_holo_light.9.png SHA1-Digest: I2JJHnuKjt9jtF8C76fBatEScaE= Name: res/drawable-xhdpi-v4/ic_delete_white_24dp.png SHA1-Digest: zUHGzuXiGu6zW1HkGDFXAZcRaEc= Name: res/drawable/abc_cab_background_top_material.xml SHA1-Digest: gLHAZPEH/WYlWCNIPwRV1Ypbx70= Name: res/drawable-xxxhdpi-v4/abc_btn_check_to_on_mtrl_015.png SHA1-Digest: 0OG2GgwzcQVFzj+BwQ+1UYki6vU= Name: res/drawable-mdpi-v4/ic_attach_white_24dp.png SHA1-Digest: wvJ0dZjo9WO3IftZ1u1pDiLAYHo= Name: res/drawable-xhdpi-v4/dialog_full_holo_dark.9.png SHA1-Digest: Xv7q5ITHzmlsgg58AkKDmIAOIx8= Name: res/drawable-hdpi-v4/ic_lock_white_24dp.png SHA1-Digest: b/iJ/j70juEO115QXcuRbfob2vs= Name: res/drawable-hdpi-v4/ic_volume_up_dark.png SHA1-Digest: xrgQPS8hvvANCRdqfp0oeLL62kU= Name: res/drawable-xhdpi-v4/ic_message_gray.png SHA1-Digest: cipeLSWhQ3E8CaS3TkeT2+szopE= Name: res/layout/outgoing_sms_preference.xml SHA1-Digest: swLec1DtO3WJtnyXl/vJ0tZJfu8= Name: res/layout/number_picker_view.xml SHA1-Digest: ahHMCTOCOLOVgvMwVDE2rVvcuRY= Name: res/layout-v17/design_layout_snackbar_include.xml SHA1-Digest: hAKpqrRkn4zttzsruLPeWfbgUEo= Name: res/drawable-xhdpi-v4/ic_lock_light.png SHA1-Digest: zUHx9YJDrvMXb3UbuXPp4CH+PrQ= Name: res/drawable-xxhdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png SHA1-Digest: kjQh/adr8XS+S465gr9pzFibMnM= Name: res/color/switch_thumb_material_dark.xml SHA1-Digest: f3zgtqci6QdPmbytbKTAcztzers= Name: res/drawable-xxhdpi-v4/ic_visibility_off_white_24dp.png SHA1-Digest: qHNgChQ6M9SFZjVLvn1YAf3YOY8= Name: res/drawable-mdpi-v4/ic_push_registration_reminder.png SHA1-Digest: kPTXYuPt5ht+S/b7il4MyfHvfHU= Name: res/drawable-mdpi-v4/dialog_full_holo_light.9.png SHA1-Digest: r4KUt0XX5nLAF9pkvj1Rfe1HuVA= Name: res/layout-sw600dp-v13/design_layout_snackbar.xml SHA1-Digest: aDZ/Y13hRjK2ExLFkIFrqs2EcgQ= Name: res/drawable/actionbar_icon.xml SHA1-Digest: 4ggDqvnA//4/gUTrCi8SAWhqAUs= Name: res/drawable-mdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.pn g SHA1-Digest: 1Sq+VOFFXYaggLRmUPg5CpP+b1M= Name: res/layout/abc_list_menu_item_layout.xml SHA1-Digest: LdonLq4y6EOPd12hm0st2FQeXp8= Name: res/drawable-mdpi-v4/ic_movie_creation_dark.png SHA1-Digest: +Jgq6bNeUNGTAc4VvdAQU7Z3dZ4= Name: res/drawable-v21/abc_edit_text_material.xml SHA1-Digest: QmBeXDdf25h+c59CK063xKJ8JdI= Name: res/drawable-mdpi-v9/icon_notification.png SHA1-Digest: d4hA4WTP2uFIyWtcRSmOiBlTFn8= Name: res/drawable-xxhdpi-v4/ic_refresh_white_24dp.png SHA1-Digest: H/LwcWWxX1VJzYfG76baNG9j7uY= Name: res/drawable/progress_background.xml SHA1-Digest: zK7FJQT3jdkLOJAs5Y7jL9uLgX0= Name: res/drawable-xxhdpi-v4/list_pressed_holo_light.9.png SHA1-Digest: I2JJHnuKjt9jtF8C76fBatEScaE= Name: res/drawable-mdpi-v4/textfield_disabled_focused_holo_light.9.png SHA1-Digest: j/bR5FhKXM3nZJ0PKlO3uo5Q9iI= Name: res/drawable-xhdpi-v4/abc_textfield_search_activated_mtrl_alpha. 9.png SHA1-Digest: 3u3fLmehvZBhy/5ikwcph94VGWM= Name: res/drawable-xhdpi-v4/abc_cab_background_top_mtrl_alpha.9.png SHA1-Digest: RwOTCkvoy8JfKjFQZXnNiOHbxpQ= Name: res/xml/preferences.xml SHA1-Digest: DiuBw5gZWCbnu9P0aKZOXaiDtRM= Name: res/anim/abc_slide_out_bottom.xml SHA1-Digest: GcBbKJcMWdQ42ssCQexb9kGH6us= Name: res/drawable-mdpi-v4/spinner_disabled_holo_light.9.png SHA1-Digest: VDYagFVVDGkZFeYeouIICQC7/C0= Name: res/drawable/emoji_category_places_light.xml SHA1-Digest: wtp4eWxpCWzsWD/8Yle2TAo261U= Name: res/menu/conversation_group_options.xml SHA1-Digest: mKBEDK9co4Csvl1MFy1y8tETXTo= Name: res/drawable-xxxhdpi-v4/abc_text_select_handle_right_mtrl_dark.p ng SHA1-Digest: 1cl/IsP/z8hq0fSoUb3Z29rLRVM= Name: res/drawable-xhdpi-v4/ic_emoji_nature_normal_dark.png SHA1-Digest: qYlz+XXb7tPPlmwbdqrJ/RYyGYQ= Name: res/drawable-ldrtl-xhdpi-v17/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: +/cT3+0N8I+XSw0FPP5O3x2f5g4= Name: res/drawable-xhdpi-v4/design_ic_visibility_off.png SHA1-Digest: 0OVNK8kFZq2fgUG4Kc9y+NUoIyk= Name: res/menu/share.xml SHA1-Digest: 7RSgEelZF3uCMzV2wWHWuVCGtto= Name: res/drawable-mdpi-v4/spinner_focused_holo_light.9.png SHA1-Digest: V9tjL1cMxuMvNGabgo8kTf8q/oQ= Name: res/drawable-mdpi-v4/ic_unarchive_white_24dp.png SHA1-Digest: AnSJIPKgb/L7q2CsDFn2F/9JzWw= Name: res/drawable-xhdpi-v4/ic_send_white_24dp.png SHA1-Digest: UcvZZ00OMZ5tx1dwWXlgGHwkyPQ= Name: res/drawable-mdpi-v4/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: sc2f/SwoJ8sOO1ziZCDS+WfNDhI= Name: res/drawable-hdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png SHA1-Digest: KcAKbOCiTO5UMcKfzx/+vncLmXg= Name: res/animator/rotate_90_animation.xml SHA1-Digest: AhVLtjcJdoeXGcim/ix1HCO/gQw= Name: res/drawable-xxhdpi-v4/ic_forward_white_24dp.png SHA1-Digest: INkdmomUul9bP5BalXgMuqp+Fi0= Name: res/drawable-xxhdpi-v4/ic_notifications_black.png SHA1-Digest: DthaV+AqOozisZR0tlgc31EK20g= Name: res/layout/message_recipient_list_item.xml SHA1-Digest: DNfLiAGMM42qJiUBQ6ptbeD643s= Name: res/drawable/abc_spinner_textfield_background_material.xml SHA1-Digest: k4PYrKN6q/ExQP5RdV8dDVaO8Js= Name: res/drawable-mdpi-v4/ic_pause_circle_fill_white_48dp.png SHA1-Digest: GXf0+NjE+Jl37K5VWpmyDVcX4gc= Name: res/layout/single_recipient_panel.xml SHA1-Digest: Ju3oOig1mDOZq7HiJTjNDpvCc5w= Name: res/drawable-mdpi-v4/abc_ic_star_black_48dp.png SHA1-Digest: LYh5wO7mcgtiq4fyzNQBKw1XFk8= Name: res/layout/select_dialog_multichoice_material.xml SHA1-Digest: i/P6y+zKXgMOuFmhHqYzSjjnP9A= Name: res/drawable-xxhdpi-v4/ic_warning_light.png SHA1-Digest: RANpqRT7jrCv8AUuDx6Mc9LMvvs= Name: META-INF/buildserverid SHA1-Digest: PFAoK3vAw7CF29BtzhTdrgabIU8= Name: res/layout-v11/notification_template_big_media.xml SHA1-Digest: htwU5600qsSzOm2ExqJAffHmYEE= Name: res/drawable-mdpi-v4/abc_btn_radio_to_on_mtrl_015.png SHA1-Digest: xc9EUi8JbA506uG62boWpLo9DB8= Name: res/drawable-mdpi-v4/ic_forward_white_24dp.png SHA1-Digest: 7GEGOC+RhHCBHl4Ao8nOHtZ46Cs= Name: res/drawable/conversation_item_background.xml SHA1-Digest: EdHxKZVagGX+RrPmbiPZVYpFxZE= Name: res/drawable-mdpi-v4/abc_textfield_search_activated_mtrl_alpha.9 .png SHA1-Digest: YsHF4VJihRr1oEZ76cu42zsHjek= Name: res/color/abc_background_cache_hint_selector_material_dark.xml SHA1-Digest: JW1Wg9XMsM+FF68MpbJdFc2Yh8U= Name: res/drawable-hdpi-v4/ic_delete_white_24dp.png SHA1-Digest: lRuZfsQ7T+0nZmYvoYmmRVZJKcA= Name: res/anim-v21/design_bottom_sheet_slide_out.xml SHA1-Digest: AGi5g5tvoZK7WNsIL0yZE9rdwnw= Name: res/layout-w270dp-h560dp-v13/calendar_date_picker_dialog.xml SHA1-Digest: XJB0mJxqi+LHi8sY4BNCBVjCrKU= Name: res/layout-sw600dp-land-v13/calendar_date_picker_dialog.xml SHA1-Digest: iqpjA1eAjjWXIOu09vGX/wjNjVE= Name: res/layout/design_navigation_item.xml SHA1-Digest: ZumpzXxJd7SIBf8+JK3lrCjw+O4= Name: res/drawable-xhdpi-v4/ic_contact_picture.png SHA1-Digest: EV8R3SyK8TC2jq4eFsgX/nOEkgw= Name: res/drawable-xhdpi-v4/ic_push_gray.png SHA1-Digest: 6p2svB1tHSA2wBs/tIp59IcmQg8= Name: res/drawable-hdpi-v4/ic_emoji_flags_activated_light.png SHA1-Digest: X8a9+THL64lmtmwQq3YafciiCQ0= Name: res/layout/notification_action_tombstone.xml SHA1-Digest: 9Liuim7N5gRllPpEjgChbQINE+w= Name: res/drawable-hdpi-v4/abc_textfield_activated_mtrl_alpha.9.png SHA1-Digest: H53d9SOkoWezKsVvcOALraOdTFo= Name: res/drawable-xhdpi-v4/ic_group_photo.png SHA1-Digest: ELEua2TBuh/CXBT5dHekx5lpLoQ= Name: res/drawable-xxhdpi-v4/fab_shadow.png SHA1-Digest: rvLg9lLjuCblbuAMGXXeG6EXNoA= Name: res/drawable-xhdpi-v4/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: EWsVhp6Fuj87sih/RyDRPr/vOxY= Name: res/drawable-xhdpi-v4/ic_visibility_off_white_24dp.png SHA1-Digest: PtWxrz3Gu4HIRGshwwkTOzkL0WU= Name: res/drawable-xxhdpi-v4/abc_list_selector_disabled_holo_dark.9.pn g SHA1-Digest: vq3AaVX19jU0c0v1npZsAQOh+CI= Name: res/drawable-hdpi-v4/ic_archive_white_24dp.png SHA1-Digest: isijXsHBVMlYiGaq2y3vFUJm3aM= Name: res/drawable-xhdpi-v4/ic_backspace_disabled_light.png SHA1-Digest: zKT/1vK3dByF8W/4TqDRB3P//8o= Name: res/layout/select_dialog_item_material.xml SHA1-Digest: YxkfyKn7F7LCilMhwA+JNDz8/LA= Name: res/layout/view_identity_activity.xml SHA1-Digest: sdfI5G2rE7lANKYrX52VPeV7uyA= Name: res/layout/design_navigation_item_subheader.xml SHA1-Digest: Fr3vjBNi2dHk1OoUaEeu1CAHHRg= Name: res/layout-v21/notification_action_tombstone.xml SHA1-Digest: gZ+1Ci2W9lg2B30peGxcdBYja8I= Name: res/layout/share_intent_list.xml SHA1-Digest: fd3NhPVV0DCVVNLVlfNEQk+I6mU= Name: res/drawable-mdpi-v4/fab_shadow_mini.png SHA1-Digest: ExMGDh75RUwD0Zl6Z5X6HYbRDuM= Name: res/drawable-hdpi-v4/icon.png SHA1-Digest: 7ooHofxVnyZj+EI2ktnjYQZw4O0= Name: res/drawable-hdpi-v4/switch_thumb_pressed_holo_light.9.png SHA1-Digest: UW8twZMlDStRuqjFewmFD3itfrQ= Name: res/drawable-xxxhdpi-v4/ic_archive_white_36dp.png SHA1-Digest: wBx4qyXr83v9MPqX3AU262pF2cM= Name: res/drawable-xxhdpi-v4/ic_emoji_places_normal_dark.png SHA1-Digest: HBbXwGgsDb284tHFuhyGbhHRpSw= Name: res/drawable-xxxhdpi-v4/ic_save_all_white_24dp.png SHA1-Digest: XmJstR6YFMPz6jfsWh8L4Sy0Rr8= Name: res/drawable-xxhdpi-v4/ic_delete_gray.png SHA1-Digest: hMQHqOg5ktgmQzEBHuIRG+MGyaU= Name: res/drawable-xhdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png SHA1-Digest: Bii9JPddV76dH8va+pLHDS/1H2I= Name: res/drawable-hdpi-v4/ic_emoji_emoticons_activated_light.png SHA1-Digest: lC5K0zYxqjZPLfkbAMaA5JlvzZ8= Name: res/drawable-mdpi-v4/abc_textfield_search_default_mtrl_alpha.9.p ng SHA1-Digest: D6dilO+UMcglambujyMOhNbLZuY= Name: res/drawable-xxhdpi-v4/ic_textsms_black_32dp.png SHA1-Digest: KQFfNzbixlIhyj/W1wnoDgoBFLo= Name: res/drawable-hdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: MMW5ShwB1m9oRvGdlbR//t0h77U= Name: res/layout/group_create_activity.xml SHA1-Digest: le3p6Yw9tTaS5+N5l8NAXuSdngU= Name: res/drawable/emoji_category_symbol_dark.xml SHA1-Digest: Ju9NiYprgQLlxTm5XBhkYezLm/g= Name: res/drawable-xxhdpi-v4/ic_volume_off_white_18dp.png SHA1-Digest: JqvMHVRMiibxNcOhkh2oZIeF7NU= Name: res/drawable-hdpi-v4/ic_delete_gray.png SHA1-Digest: wxa+vcJFVu6N+ITAH1/7YNK2Ua4= Name: org/spongycastle/x509/CertPathReviewerMessages.properties SHA1-Digest: OGIe7v0JVQeuizExOPQ4Cf/+RXo= Name: res/drawable-mdpi-v4/ic_emoji_people_activated_light.png SHA1-Digest: pzhoFuemKY5gUDVDDQ0FAnHjdO4= Name: res/drawable-xhdpi-v4/actionbar_icon_holo_dark.png SHA1-Digest: 1Psmu0RM/nHRmEKkAhQ2EWpb3FY= Name: res/drawable-xhdpi-v4/abc_btn_check_to_on_mtrl_000.png SHA1-Digest: ivpLQ63tfOD0ISnUmDRNp3o0jBk= Name: res/drawable-xhdpi-v4/ic_visibility_off_grey600_24dp.png SHA1-Digest: aeh86VziSMlBPqpA/NXKOMBc3wc= Name: res/drawable/abc_ic_ab_back_material.xml SHA1-Digest: 6SFmoia7mNGpkW+jSqxSP95Szuo= Name: res/layout/design_navigation_menu_item.xml SHA1-Digest: EpleT5uGJY/Oz1oTPFa6A44+pcM= Name: res/drawable-v21/touch_highlight_background.xml SHA1-Digest: 6IadWpveEX8PumPwP847BweJlgg= Name: res/drawable-xxhdpi-v4/abc_text_select_handle_middle_mtrl_light. png SHA1-Digest: ZjoNfwYFY/w1heN9+GIDC4AUjSI= Name: res/drawable-mdpi-v4/abc_list_divider_mtrl_alpha.9.png SHA1-Digest: B+V5QEOwy10ghi7uX5XLTPFJGJs= Name: res/drawable-mdpi-v4/ic_reply.png SHA1-Digest: eKIvQlTj+MqJkkhH83v4XJEf2Cg= Name: res/drawable-xhdpi-v4/ic_emoji_objects_normal_light.png SHA1-Digest: qfh1k5CNGLoFk4UDObAK/Jf26Gc= Name: res/layout-v17/notification_template_media_custom.xml SHA1-Digest: POf37ImxgRTW1tCMpq3uc1uMOnw= Name: res/drawable-xhdpi-v4/ic_emoji_people_activated_dark.png SHA1-Digest: bgGJzgaYmyCW3yKqClSqCOPMdx8= Name: res/animator/bottom_play_to_pause_animation.xml SHA1-Digest: 7f8HiUwoTj84cBIvXQhtx6kFMlc= Name: res/drawable-xhdpi-v4/ic_emoji_places_activated_light.png SHA1-Digest: hKmWMiPG7DNsfcQHCQk/pQUXe9o= Name: res/layout/switch_compat_preference.xml SHA1-Digest: BcoiqEYKt0pTDgHI781bnYowk54= Name: res/drawable-hdpi-v4/abc_list_divider_mtrl_alpha.9.png SHA1-Digest: B+V5QEOwy10ghi7uX5XLTPFJGJs= Name: res/drawable-mdpi-v4/ic_menu_barcode.png SHA1-Digest: d55+P7bEEVaEbTTLH9RpILA30sk= Name: res/drawable-xxhdpi-v4/ic_push_gray.png SHA1-Digest: C0xTCzZJn9RVKjSqm5v2UC8GXmo= Name: assets/backward SHA1-Digest: r/6p7b+IrWfsXOtXuSRa3XRryRU= Name: res/drawable-xhdpi-v4/ic_audio_light.png SHA1-Digest: hZE6NPD9tvuKoyt48zhjv8yn1hA= Name: res/drawable-xhdpi-v4/ic_emoji_recents_normal_light.png SHA1-Digest: xBC9DCGDPMFtthnVidEzhWv1S3U= Name: res/layout/load_more_header.xml SHA1-Digest: HbT14W2VMV1p5/aX+7rMB42clVc= Name: res/drawable-xhdpi-v4/ic_missing_thumbnail_picture.png SHA1-Digest: KTPAovm6fHADFuua0zRb/i7JPBQ= Name: res/layout/abc_action_menu_item_layout.xml SHA1-Digest: OLXyHaAi29c7ywsCifM30HTfwUo= Name: res/drawable/conversation_list_item_unread_background_dark.xml SHA1-Digest: 2QVen9mJrbCui4pWQqhYnxMM0K0= Name: res/drawable-mdpi-v4/switch_bg_focused_holo_light.9.png SHA1-Digest: Zb5ZNlmnSJm17S8X88rrHismQoQ= Name: res/color/done_text_color.xml SHA1-Digest: i33wjub03ftpQpdSxyTxWIGUeew= Name: res/drawable-mdpi-v4/ic_advanced_black.png SHA1-Digest: y3+kEpasbWgXqfiLlAyDjJKQqRs= Name: res/drawable-hdpi-v4/abc_list_longpressed_holo.9.png SHA1-Digest: KQunCQh0E4bP0utgN0cHdQr9OwA= Name: res/layout/splash_screen_activity.xml SHA1-Digest: Lhg0tWz+QYPZtNwv9FYWrzA1hMA= Name: res/drawable-mdpi-v4/ic_app_protection_gray.png SHA1-Digest: 1diK8UP95sCL0e7+1g5/BrWYAc4= Name: res/drawable-xxhdpi-v4/sms_selection_icon.png SHA1-Digest: rPk7FEcQcnWcYTff9OdenlmidgM= Name: res/drawable-hdpi-v4/sent_bubble.9.png SHA1-Digest: JGqPgezZhUUOMdpS7YyeaEXvFW4= Name: res/drawable-mdpi-v4/ic_visibility_off_grey600_24dp.png SHA1-Digest: DlHropSKeKJ9EdIpCyTbBWnaEbo= Name: res/drawable-mdpi-v4/icon_dialog.png SHA1-Digest: PEUseDLpMhB/t/jQ7t/pQBsEvB4= Name: res/drawable-xhdpi-v4/list_pressed_holo_light.9.png SHA1-Digest: 5rSZbdJDOTdM5kJhhIdl8m8briI= Name: res/drawable-xhdpi-v4/ic_unarchive_white_24dp.png SHA1-Digest: s8blAW4vi9yw0uShZLX58NkJGIA= Name: res/layout/timezonepickerview.xml SHA1-Digest: JDj51OUGhcJia+1+hYcELLrgZPg= Name: res/drawable-xhdpi-v4/ic_check_light_disabled.png SHA1-Digest: oHkXjSaaob4YggB6wrPKOwv5e7Y= Name: res/drawable-xhdpi-v4/textfield_focused_holo_light.9.png SHA1-Digest: 9fXYckUA6bXM1wEDQ0rXYeMvIfw= Name: res/layout/color_preference_item.xml SHA1-Digest: 6mrfGRnCs8Ht9w2eadUQow/xnhc= Name: res/layout/transport_selection_list_item.xml SHA1-Digest: RwZyO8tL+GTMtAco6iT7aMDSwtc= Name: res/drawable-hdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png SHA1-Digest: OGTAGSMNcF0Z/ZC0uBc4qemdptI= Name: res/drawable-mdpi-v4/actionbar_icon_holo_dark.png SHA1-Digest: cqYzvjedowzINhKkhgaEAn/opZE= Name: res/drawable-xhdpi-v4/ic_menu_barcode.png SHA1-Digest: ahhRaU5LjrjteMiTicHEAqpalAw= Name: res/drawable/import_export_item_background_light.xml SHA1-Digest: Bi/t0qJA/KgWChbnN3t3p6wExyg= Name: res/drawable/emoji_category_flags_light.xml SHA1-Digest: V829J6Wxpxf94+asrWt4WSYZhDw= Name: res/drawable-xxhdpi-v4/ic_app_protection_black.png SHA1-Digest: MWTABT4q4vTfDu3fWQmicK+guaw= Name: res/layout/abc_alert_dialog_material.xml SHA1-Digest: ymGYlunu9ido4PijVKjcNyETIGQ= Name: res/color/dialog_text_color_holo_dark.xml SHA1-Digest: mhNkhbYqg2hBKryuU+d73yuTlIA= Name: res/drawable-hdpi-v4/ic_visibility_grey600_24dp.png SHA1-Digest: DyPAobxWgQJCc4ECQRE+Mbh1vC0= Name: res/layout-sw600dp-v13/three_keys_view_leftright.xml SHA1-Digest: tkyYWGtROWaZqUXQEwelz5Aenco= Name: res/anim/abc_popup_enter.xml SHA1-Digest: ZKpMd1TuL9jAkYWPue9RXki708E= Name: res/layout/blocked_contacts_fragment.xml SHA1-Digest: fuRQvQ2rM8IO/18Oa72aBZGsajY= Name: res/drawable-mdpi-v4/abc_tab_indicator_mtrl_alpha.9.png SHA1-Digest: z0xEJNNl6qN3MKa3Uq4y93mF7Cw= Name: res/drawable-hdpi-v4/abc_ic_star_half_black_16dp.png SHA1-Digest: pS2IISWVF11RXQXLyxHF6AODLJQ= Name: res/drawable-xxhdpi-v4/splash_open_padlock.png SHA1-Digest: AyU/qBSGe6ni0/ayORtW1Ba13dQ= Name: res/drawable-xxhdpi-v4/design_ic_visibility.png SHA1-Digest: 364a/+txT+QrBDJZ1GPgI2HwcMk= Name: assets/zone.tab SHA1-Digest: d0US6Zajzyow3w/OX7A+6NT3Oy8= Name: res/drawable-hdpi-v4/notify_panel_notification_icon_bg.png SHA1-Digest: inKyhhyZgO65645KR/OH06l6dAc= Name: res/layout-v16/conversation_list_item_view.xml SHA1-Digest: +V4vOPOUGByJCriRwZWAGAbbbUk= Name: res/layout/notification_template_custom_big.xml SHA1-Digest: zeYI3QMAjdBS9eNvHxgKfQp8pkY= Name: res/layout-sw600dp-v13/calendar_date_picker_dialog.xml SHA1-Digest: XJB0mJxqi+LHi8sY4BNCBVjCrKU= Name: res/drawable-v11/emoji_category_nature_dark.xml SHA1-Digest: APCRNVaaYVwvFd3ETZY/JfKdzKg= Name: res/drawable-mdpi-v4/notification_bg_normal.9.png SHA1-Digest: Wl4jBkhtPS9E+JkWaS0GOyoMbuw= Name: res/layout/centered_app_title.xml SHA1-Digest: 5rEeTeZFkuL3VoHq6nk4sfeB+jg= Name: res/drawable-xxhdpi-v4/abc_scrubber_track_mtrl_alpha.9.png SHA1-Digest: mXQuXT+E6ctyqZNbnaBtZKfg0ZU= Name: res/drawable-hdpi-v4/ic_info_outline_light.png SHA1-Digest: /DlKgwON8BS4G8FmGnpmQItNuqc= Name: res/drawable-mdpi-v4/ic_block_white_18dp.png SHA1-Digest: FC+C3CmEUXCplFxVG7HWgvTGtNU= Name: res/drawable-xxhdpi-v4/ic_info_outline_grey600_24dp.png SHA1-Digest: xBmMFVK3FIxZKSB0TRZIYecVwfU= Name: res/drawable-hdpi-v4/ic_recurrence_bubble_fill.png SHA1-Digest: a/afiiaYmhSCSRPndEe7VVryElM= Name: res/color/abc_primary_text_disable_only_material_dark.xml SHA1-Digest: fztyDM09XiKUbzo6Y6O2r9Xqs6k= Name: res/drawable/info_round.xml SHA1-Digest: UZ/381JABO8YY/CyQ+EQwB67nZs= Name: res/drawable-v21/avd_hide_password.xml SHA1-Digest: n9KjH/8/CCI1IAA4WA95HxD7TSo= Name: res/drawable-hdpi-v4/ic_launch_white_24dp.png SHA1-Digest: buTvIITq3BWrN5RzvAzAkNJ3RR0= Name: res/drawable-mdpi-v4/ic_unarchive_white_36dp.png SHA1-Digest: j3jd65D0sfk5JumlC9jjVSsyKRM= Name: res/drawable-xxxhdpi-v4/fab_shadow.png SHA1-Digest: vzNoDRf8pV/kEmky3cnGOUTqQho= Name: res/anim/slide_from_top.xml SHA1-Digest: NRMSsU5qemKGLU44qx35gMLtOZg= Name: res/drawable-mdpi-v4/ic_warning_dark.png SHA1-Digest: URWCsTSGrzecwznLDboFrYlHiC0= Name: res/drawable-hdpi-v4/ic_content_copy_light.png SHA1-Digest: NAPM4erdO2ZajdfUwR7WwzzfiZg= Name: res/drawable-hdpi-v4/received_bubble.9.png SHA1-Digest: l1DcWbaW/Gm1hFu3pEriKWh+Z2g= Name: res/layout/keyboard_right_drawable.xml SHA1-Digest: K21qYkNJh5XhOn/Sn8+ArpXPZfI= Name: res/drawable-hdpi-v4/abc_list_pressed_holo_dark.9.png SHA1-Digest: igV6Z9qyPsoUBNkEZPzj+DDt0kE= Name: res/drawable-xhdpi-v4/ic_lock_white_24dp.png SHA1-Digest: Nd1pIdgHJVHHAL0NiktI2OyXbvY= Name: res/drawable-xhdpi-v4/ic_reply_white_36dp.png SHA1-Digest: 6t2iywD4iSB/rF/1KvmFyTQmOjk= Name: res/color-v11/abc_tint_default.xml SHA1-Digest: 6ivey668H5tMb8e/bAHFxBOxxVE= Name: res/xml/preferences_sms_mms.xml SHA1-Digest: zYPVqXv2rxnBFNr7kEFeLeEbYHw= Name: res/drawable-xhdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png SHA1-Digest: +F9A3ApomF++Ccyi3vyA4AvmXMw= Name: res/drawable-xxhdpi-v4/ic_emoji_emoticons_normal_light.png SHA1-Digest: O2BU/QZwoCiGacOuy8IsSEnxbVE= Name: res/drawable-mdpi-v4/ic_emoji_places_normal_dark.png SHA1-Digest: h9r6yBVXX9vIhW73Se25qH8kUu8= Name: res/drawable-hdpi-v4/import_database.png SHA1-Digest: rvHksthTPdZ+b/YtO2T38BEGR58= Name: res/drawable-sw600dp-xhdpi-v13/ic_backspace_disabled_dark.png SHA1-Digest: pofIFch+lQqiVC0cbD5xIaHHIbc= Name: res/drawable-xhdpi-v4/ic_emoji_objects_normal_dark.png SHA1-Digest: fVTk0dUWbK3IstNScMq7367Txrg= Name: res/drawable-xhdpi-v4/ic_app_protection_gray.png SHA1-Digest: KObsnbXsPlvVPykyR+NyQ2JQ5Bc= Name: res/drawable-hdpi-v4/ic_action_warning_red.png SHA1-Digest: 2P7OlMAKjtzeGD1WWU6aRcsMhRo= Name: res/drawable-hdpi-v4/ic_info_outline_dark.png SHA1-Digest: RU2a39U19aGRAPSGBhqT3/dOimo= Name: res/drawable-hdpi-v4/ic_account_box_light.png SHA1-Digest: auyN/CyGOQJJ9WUe3XAUVUBXj9E= Name: res/drawable-xxxhdpi-v11/icon_cached.png SHA1-Digest: vVTW2VnbAOubUz1Uw/wzUlWqN0A= Name: res/drawable-hdpi-v4/ic_notifications_black.png SHA1-Digest: ZfQORyIXtZxVt0UI5DfS/0h6tbM= Name: res/drawable-xxhdpi-v4/switch_thumb_disabled_holo_light.9.png SHA1-Digest: jATtINSdqgXWt2HXEF7xpSXBhyY= Name: res/drawable-mdpi-v4/fab_shadow.png SHA1-Digest: RqAVOrWqYhtmaGpjesdDpNjL9JI= Name: res/drawable-hdpi-v4/alert.png SHA1-Digest: r7pqtO1yHsM4QXsGGPPsbZDqN6Y= Name: res/drawable-hdpi-v4/ic_emoji_places_normal_light.png SHA1-Digest: E8FCabJLAd9/PEHPGM3T7HNt3qs= Name: res/drawable-hdpi-v4/ic_reply_white_36dp.png SHA1-Digest: bpDCb4aXWNRK/MO0ktD57dKMZYQ= Name: res/drawable-xhdpi-v4/spinner_focused_holo_light.9.png SHA1-Digest: GULvT2ExbYbkv75q+kEpZUH9u2M= Name: res/drawable/conversation_list_item_read_background.xml SHA1-Digest: xcSjIApmT8lvdb1b+qfO7Z3ohSE= Name: res/drawable-xhdpi-v4/ic_create_white_24dp.png SHA1-Digest: hjecZ+Yk3NTShxd3KTVCHRz1S+E= Name: res/xml/preferences_appearance.xml SHA1-Digest: uzgOR0TINN1MzVwVpddmu/6j+IU= Name: res/drawable-xxhdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png SHA1-Digest: AEtucgE23w85/isDYqNTWlxruFg= Name: res/anim/abc_slide_out_top.xml SHA1-Digest: 8TSJifDdlA1J4leugOVG9Peg+k4= Name: res/drawable-mdpi-v4/spinner_default_holo_light.9.png SHA1-Digest: nxjthQ61TKMyJJ5/85W2SC6qs+M= Name: res/color-v23/abc_tint_switch_thumb.xml SHA1-Digest: bhKfYPTUVR2gp087h+Lq2DP8VnM= Name: res/drawable-xxhdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png SHA1-Digest: Ouio2uWvH7XLWYfqzUwzwmjm/jM= Name: res/drawable/design_bottom_navigation_item_background.xml SHA1-Digest: CWW4mfISMH+Ot1PsBcU5OOmhiCU= Name: res/color-v23/abc_tint_spinner.xml SHA1-Digest: fRj3PTupUzBlYT1O+bKkZbmomws= Name: res/layout-v11/notification_template_big_media_custom.xml SHA1-Digest: lnCSMdxdluML3wH5DsZqz/3sUrs= Name: res/drawable-v21/conversation_list_item_read_background.xml SHA1-Digest: lmBx/sr78+ebREZT82kMdf0qLq4= Name: res/drawable-mdpi-v4/ic_delete_black.png SHA1-Digest: eX/Ck6P/dt7ey0W48PziO1coyoE= Name: res/layout/conversation_list_fragment.xml SHA1-Digest: xt20Np2/qZTXVHgGYRcw8uSHwt0= Name: res/drawable-xhdpi-v4/ic_notifications_black.png SHA1-Digest: smFpvPsUz0+QVjm5sc1F3iIqqtM= Name: res/raw/whisper.store SHA1-Digest: hLdMCWiNl4nJacL59TYQ8lK+JUs= Name: res/drawable-hdpi-v4/ic_emoji_recents_activated_dark.png SHA1-Digest: XcZvxaGT8PWZ+zWSPdAf28t3GxM= Name: res/anim/fade_scale_out.xml SHA1-Digest: lhxvAKLBK4FCXkyEAaT5FHhx6Eg= Name: res/drawable-xxhdpi-v4/ic_video_light.png SHA1-Digest: QHrdCTXe0XaJK4V7TnGjYgI5vQA= Name: res/drawable-hdpi-v4/ic_reply.png SHA1-Digest: aS2epjYciCOwQeQwokaHqSA0Kkk= Name: res/drawable-xxhdpi-v4/abc_textfield_default_mtrl_alpha.9.png SHA1-Digest: p9584WImSwr0082/N/zkcvVq7yo= Name: res/drawable-xhdpi-v4/ic_image_light.png SHA1-Digest: vNLYUm+Q1uaaY6KCo643W3T3i0Q= Name: res/drawable/conversation_item_header_background_dark.xml SHA1-Digest: wfTAaLO+JvtusD4leaJ4hBj59Wg= Name: res/drawable/emoji_category_recent_dark.xml SHA1-Digest: Ou8VeFgJTkCmSB3Aw6SoPPZapVY= Name: res/drawable-ldrtl-xhdpi-v17/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: xzR4QYhDLijnhAqvCWT+8WMmqNQ= Name: res/drawable-xxhdpi-v4/ic_emoji_symbols_normal_light.png SHA1-Digest: f/DVMcd6iAmf5YuZMmfbIpZP9SA= Name: res/drawable-mdpi-v4/ic_forum_black_32dp.png SHA1-Digest: i3yWkE76Gg6P8i9/QIWByBH1p3g= Name: res/drawable-xxhdpi-v4/ic_lock_white_24dp.png SHA1-Digest: JviQD0rQKh7EoL50IzwpezlyagY= Name: res/drawable-ldrtl-xxhdpi-v4/ic_send_white_24dp.png SHA1-Digest: neMCf3BKGMIjG3BpX7B7FovUlA0= Name: res/drawable-hdpi-v4/ic_contact_picture.png SHA1-Digest: qhRnJGObRC7YZLVHGoSvhBwTXCQ= Name: res/drawable-mdpi-v4/ic_textsms_black_32dp.png SHA1-Digest: I+EfkWfDMZiDUUBX9ePVNDmWy9o= Name: res/drawable-hdpi-v4/ic_push_registration_reminder.png SHA1-Digest: dlznighMw7183iJMxTr9dbJsIjs= Name: res/drawable-mdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png SHA1-Digest: jnLnSBDt0id1WrhEiz1zra3RW6M= Name: res/drawable-xxhdpi-v4/spinner_pressed_holo_light.9.png SHA1-Digest: tkF8+78AlJ7clz2yc6mvf/TVJfQ= Name: res/drawable/design_password_eye.xml SHA1-Digest: C+kKIgD0x3Pqpcr7269QZUkuaEQ= Name: res/drawable-xxxhdpi-v4/ic_clear_white_24dp.png SHA1-Digest: E9E+hrQdXlyQOjL2qvnFUBjtFaI= Name: res/menu/media_preview.xml SHA1-Digest: GaxiRvvAk1qGdqbi6bjS1OXbwEo= Name: res/drawable-mdpi-v4/ic_emoji_emoticons_activated_light.png SHA1-Digest: GJZwQNDqmqKM/Z3eNUCy074AQB0= Name: res/drawable-mdpi-v4/switch_thumb_pressed_holo_light.9.png SHA1-Digest: MvirMfKCPj8aRdrk/qCwNQly7iQ= Name: res/drawable-xxhdpi-v4/ic_scroll_down.png SHA1-Digest: yhd3mLL6H+JcdmLZj5Z406XYtOU= Name: res/drawable-hdpi-v4/ic_group_white_24dp.png SHA1-Digest: 61dvQcQoxhHeRLerio6OApFlLT8= Name: res/layout-v21/message_details_header.xml SHA1-Digest: 3gX04TU0Nkpyb5WVtUNCH0ZiZHE= Name: res/drawable-hdpi-v4/abc_list_pressed_holo_light.9.png SHA1-Digest: 8fFdZoyOA0FyEP0K/a0QnLk0bbE= Name: res/drawable/abc_ratingbar_small_material.xml SHA1-Digest: gaRS2sbjCfcJo3xOrkhIdr9XwZg= Name: res/drawable-mdpi-v4/abc_text_select_handle_middle_mtrl_light.pn g SHA1-Digest: izNlbouSIXW9/WiRR/UlgyT9VEs= Name: res/drawable-xxhdpi-v4/abc_text_select_handle_right_mtrl_light.p ng SHA1-Digest: Fv+MHn2EjJlYrnRlsip5/7aL0Wg= Name: res/drawable-xxhdpi-v11/icon_notification.png SHA1-Digest: 85ruvoq6PBpFplSac+00p8PBUsk= Name: res/drawable-mdpi-v4/ic_menu_remove_holo_light.png SHA1-Digest: 9pNClz9jSYsj/xjIXcqo7rWRk0c= Name: res/layout/abc_activity_chooser_view_list_item.xml SHA1-Digest: 4Hicu2mJTSHBznRK16UoQpE1Whk= Name: res/drawable-xxxhdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png SHA1-Digest: bvkSnzG+4r12dRWJRd9DLrqCzfU= Name: res/color/text_color_dark_theme.xml SHA1-Digest: fjkGte3Nla6U3vUNDDxp2dPLM2s= Name: res/drawable-xhdpi-v4/abc_textfield_search_default_mtrl_alpha.9. png SHA1-Digest: s9/qxuNt34tuDKZEbu3WbQxLGWs= Name: res/drawable-xhdpi-v4/ic_emoji_symbols_normal_light.png SHA1-Digest: aRSYzqP0HXhsdVDrbCyRbukPeiA= Name: res/drawable-mdpi-v4/ic_badge_24dp.png SHA1-Digest: BdJRa0IBis/loLKsIw0lGCrUqQo= Name: res/drawable-xxhdpi-v4/ic_delete_black.png SHA1-Digest: feENcEBXL3aQfblBa9o0842DEYk= Name: res/drawable-xxhdpi-v4/ic_reply_white_36dp.png SHA1-Digest: ooBQaFRd9+ZjgadIW/yiEt75/dw= Name: res/drawable-mdpi-v4/abc_btn_radio_to_on_mtrl_000.png SHA1-Digest: 21KY7k5nhCbUYd/od+FyqRUvm2Q= Name: res/drawable-xxxhdpi-v4/ic_circle_fill_white_48dp.png SHA1-Digest: 48zB9zw5i2vmnb/k/rzYZHb+CeQ= Name: res/drawable-xhdpi-v4/dialog_full_holo_light.9.png SHA1-Digest: bymS8SWJTYEscLT8l43bUsTt+Lg= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_972 SHA1-Digest: Tl50phuH8I0GxBh/Drf9vHens0Q= Name: res/layout-v16/audio_view.xml SHA1-Digest: 6GUjWKSxy/K5ZkyC9d3nuD6mN1I= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_971 SHA1-Digest: US/xxHef76UTD882Ez5EnNvcaws= Name: res/drawable-v21/design_bottom_navigation_item_background.xml SHA1-Digest: O27AiByKZrx4CKy6zEVZez3VUaQ= Name: res/drawable/conversation_list_divider_shape_dark.xml SHA1-Digest: RMH4uusB0dYbPXDmwQzuDD/bSH8= Name: res/layout-v22/abc_alert_dialog_button_bar_material.xml SHA1-Digest: iGOnSHYpoL++obhhMoiTd74IapQ= Name: res/drawable-xxhdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png SHA1-Digest: kBG1gtv3r0AKtRMQRJeeGdtStSk= Name: res/layout/push_recipients_panel.xml SHA1-Digest: f7123M9+YBkP1ZmIP/65nFaiIeE= Name: res/layout/blocked_contact_list_item.xml SHA1-Digest: f2DCf36iddblf5w+PSJRz1dehPw= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_595 SHA1-Digest: 9MZietuaP6dH4UDzQ6o0uNb4wl4= Name: res/drawable/emoji_category_symbol_light.xml SHA1-Digest: xjaDmLzBnB0hW1a4I4qll3kGmGw= Name: res/drawable-hdpi-v4/ic_emoji_emoticons_normal_dark.png SHA1-Digest: 7avTaMmRkZG49YogfofrfcXTirQ= Name: res/drawable-xxhdpi-v4/abc_list_pressed_holo_dark.9.png SHA1-Digest: VPmKAqmLJ6ke7a8XellbYKiIBh8= Name: res/drawable-xhdpi-v4/ic_emoji_nature_activated_light.png SHA1-Digest: iD0MX3tTshFLF26bw9o0rW/HaoE= Name: res/drawable-xhdpi-v4/icon_cached.png SHA1-Digest: swnypVnzZ3VLZov4zTo/innOTRw= Name: res/drawable-hdpi-v4/switch_bg_disabled_holo_light.9.png SHA1-Digest: Evi73cVw1F7NXXrV76QvRIFOeFA= Name: res/drawable-mdpi-v4/ic_emoji_nature_normal_dark.png SHA1-Digest: tq5oQ0ncJEa6wpFUeGkuUZWYoks= Name: res/drawable/ic_backspace_light.xml SHA1-Digest: XLvzKxzL6EDb31eem2HstBr+Ti0= Name: res/drawable-ldrtl-xxxhdpi-v4/ic_send_white_24dp.png SHA1-Digest: NtMB3MWJCzVmpluwSDyBqpeFgVw= Name: res/drawable-xhdpi-v4/ic_forum_black_32dp.png SHA1-Digest: I/jyPgMz5rDfZSv5f/8nG40VrMw= Name: res/drawable-hdpi-v4/ic_emoji_places_activated_light.png SHA1-Digest: Sgr83atHA6ctaDZrm2rSA+pUw4Y= Name: res/drawable-hdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png SHA1-Digest: GsekZVTmqt7NzcA9FoawMuFDm0E= Name: res/drawable/rounded_rectangle.xml SHA1-Digest: gcxzAPBwNA4efMc6M4NOp+2OQGs= Name: res/drawable-xhdpi-v4/ic_lock_white_18dp.png SHA1-Digest: cX/Nnkdcm8V9xd/cWBHr+aBant0= Name: res/drawable-hdpi-v4/lockscreen_watermark_light.png SHA1-Digest: kZukE3axdMWdS8KMYqwFzRR9cf4= Name: res/layout/conversation_activity_attachment_editor_stub.xml SHA1-Digest: 0wmFeB0MoEeiCtDugBWYJUu1Rnc= Name: res/drawable-hdpi-v4/ic_lock_light.png SHA1-Digest: FSvq/80FI0ee9qsxI/yelpUuUdw= Name: res/drawable-xhdpi-v4/ic_forum_grey_32dp.png SHA1-Digest: 3ZsizSTpofPJJ/hCVe1Pa1PrNBU= Name: res/layout/color_fragment.xml SHA1-Digest: FC02DqEKBA/g9hwoEHwtgyXOMA4= Name: res/drawable/widget_unread_count_background.xml SHA1-Digest: ci1aSzllcYoUo9M2Etp57yZTv6E= Name: res/drawable-xxxhdpi-v4/abc_tab_indicator_mtrl_alpha.9.png SHA1-Digest: 3kAOCvPKDybNG1/Fr21Y+cg522o= Name: res/drawable-v21/circle_touch_highlight_background.xml SHA1-Digest: RCp6OOrQn1/KjE6jGOF2niZjcBY= Name: res/layout-v21/recipient_preference_activity.xml SHA1-Digest: nbiRs4SeO9RtEoXZhPhIKjT8i5E= Name: res/drawable-mdpi-v19/switch_thumb_pressed_holo_light.9.png SHA1-Digest: UGB8G0Ku26t0HqFX7D5HJk45fq0= Name: res/drawable-xxhdpi-v4/ic_video_dark.png SHA1-Digest: r1SFHM1zyGuGIvLu1LQ9+3+NZhg= Name: res/drawable-xxxhdpi-v4/icon.png SHA1-Digest: o5/gjAEwK5uCNV8+mM/jhtLwPP0= Name: res/drawable-xxxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_005 .png SHA1-Digest: LpI9vSEdW/n3iNzTIDS8ecyd2BM= Name: res/drawable/emoji_category_objects_dark.xml SHA1-Digest: JDQouPeLrbGMSt3Uc/WHtIWqhSQ= Name: res/drawable-xxxhdpi-v4/ic_archive_white_48dp.png SHA1-Digest: rRMs1TNzzsRv7Yyw99xHFZ2zD5E= Name: res/drawable-xxhdpi-v4/fab_shadow_mini.png SHA1-Digest: PtjRVIdIcmcCzH1fbKoXaMb81yA= Name: res/layout/conversation_item_received_audio.xml SHA1-Digest: xSdWgwjagl0eqFLnjvPErH6cnP4= Name: res/drawable-mdpi-v4/sent_bubble.9.png SHA1-Digest: 1sjPXZyhkKG475gQNSuvAeTaun4= Name: res/drawable-xxhdpi-v4/ic_attach_white_24dp.png SHA1-Digest: glGWjWXhx73RSMBCTHMi/Yx1Z9s= Name: res/drawable/compose_background.xml SHA1-Digest: zAZp74C8XCW9PDL4CsRYvvQmq9c= Name: res/layout/date_picker_view.xml SHA1-Digest: n2p258FrajDnpOM4LTVOyAIaUwE= Name: res/drawable-mdpi-v4/ic_content_copy_dark.png SHA1-Digest: a6uq3VE/cFgA0V3jDMbP2hSkXwU= Name: res/drawable-mdpi-v4/dialog_full_holo_dark.9.png SHA1-Digest: f6ia9cfObNSnjO92EThmcdso0Qg= Name: res/drawable-mdpi-v4/ic_emoji_recents_normal_dark.png SHA1-Digest: dFtiEYS7qHuVIHVVbohEIZ3I0Jg= Name: res/drawable-hdpi-v4/abc_btn_check_to_on_mtrl_015.png SHA1-Digest: 91+SjRwS48rnNSkJl3hukfpvmrk= Name: res/drawable-mdpi-v4/abc_ic_star_half_black_36dp.png SHA1-Digest: nEfj0nfPBbqur1eTMAml8UkS7G0= Name: res/drawable-mdpi-v4/divet_lower_right_dark.png SHA1-Digest: o9gMiS7KJCHI0ywxXuJxjHLuU9U= Name: res/drawable-xxhdpi-v4/ic_image_light.png SHA1-Digest: 5xOF+gE95fgQ0Gz1zSg+BVQk0aM= Name: res/menu/contact_selection.xml SHA1-Digest: SKnxzWsnmL/UIhUg70UxYUrDcgI= Name: res/drawable-xhdpi-v4/ic_menu_search_holo_dark.png SHA1-Digest: 2ACOo9oHVGu1g9Rx+lfr7Y09Jvg= Name: res/drawable-hdpi-v4/dialog_full_holo_dark.9.png SHA1-Digest: 6D+naJ/vT+snQDqAQOf8FDr7pCM= Name: res/color/abc_tint_switch_thumb.xml SHA1-Digest: kK0VL//OBUElY330yObYULISlj0= Name: res/drawable-hdpi-v4/ic_backspace_disabled_light.png SHA1-Digest: 8YzE4GMncrZ+4gIgTYYR3Eyhr9o= Name: res/drawable-xxhdpi-v4/ic_reply.png SHA1-Digest: QaSH4wLqEhMDOSvU8Sg3e6uFNVY= Name: res/drawable-xxhdpi-v4/ic_send_insecure_white_24dp.png SHA1-Digest: JAX6v03dmClzJWdLrZj6B+QQ5Gc= Name: res/drawable-hdpi-v4/ic_message_white.png SHA1-Digest: qwRVGYz+PZL+MPV3l+wOOTdgv28= Name: res/drawable-hdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.pn g SHA1-Digest: Fs9wHncn0Hs9X2gBgK72twTeEAg= Name: res/layout-v17/abc_popup_menu_header_item_layout.xml SHA1-Digest: 62MdoB5jCc06SiJOfv6kmJw8no8= Name: res/layout-v17/notification_action.xml SHA1-Digest: U+0PyL0Pd5Lunbf/DvhJXTLqMqk= Name: res/drawable/background_pane.9.png SHA1-Digest: uRUD8GBrgiNG4l5dimWEZT7nc20= Name: res/layout-v16/conversation_item_received.xml SHA1-Digest: WS7AMHAoLxDd2f3I3Gydci3EryY= Name: res/drawable-xhdpi-v4/ic_arrow_forward_light.png SHA1-Digest: Q8NfFFxKmV3ZlwaVDlTlAg69MFU= Name: res/drawable/emoji_category_people_light.xml SHA1-Digest: F9p5OjTrypOtdp8msjXNvhN3nnI= Name: res/layout/notification_template_media_custom.xml SHA1-Digest: wrwK3C537ItdoLZSN6BtoO9+hAY= Name: res/drawable-xxhdpi-v4/ic_error_red_18dp.png SHA1-Digest: 6+r7bLSguP1+dorc7POz7QL9T8A= Name: res/drawable-xhdpi-v4/ic_forward_white_24dp.png SHA1-Digest: N7S8d92IXyTHz0jDB+lI/mNNWCE= Name: res/drawable-xxhdpi-v4/ic_keyboard_white_24dp.png SHA1-Digest: KRcW9K/bL9qALOa7E3x8ohHWkAY= Name: res/drawable-xhdpi-v4/ic_message_black.png SHA1-Digest: VwXJ4mI146cTkwjCNDFc6P9CaRg= Name: res/drawable/emoji_category_recent_light.xml SHA1-Digest: YzLOI+cBWx5WayWrANYRRgk/t10= Name: res/drawable-xxhdpi-v4/ic_app_protection_gray.png SHA1-Digest: wDTdKPD083yELY3jtCNet04sGOA= Name: res/anim-v21/design_bottom_sheet_slide_in.xml SHA1-Digest: /sfmaMejemtjucshId3pph9anUM= Name: res/drawable-xhdpi-v4/list_selected_holo_light.9.png SHA1-Digest: H2X9BKxBdFAOYEppP+vczoJ/LCU= Name: res/drawable-xhdpi-v4/ic_send_insecure_white_24dp.png SHA1-Digest: PFKnv0x4g4imYkMEJ+V8ZDHyM/8= Name: res/drawable-hdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png SHA1-Digest: kv8Z2aiviTOXDoPOY4/vyUE5lng= Name: res/drawable-xhdpi-v4/notification_bg_normal_pressed.9.png SHA1-Digest: iJFesSsAAmE1zFB9XbiCZW1cKKU= Name: res/drawable-xxxhdpi-v4/ic_scroll_down.png SHA1-Digest: UtXgucam8A78b2zfRdwO5GI5Twk= Name: res/drawable-xxxhdpi-v4/abc_text_select_handle_left_mtrl_light.p ng SHA1-Digest: sbqUAnAP9Ic0aSxtt345LLubAZ0= Name: res/drawable-mdpi-v4/ic_app_protection_black.png SHA1-Digest: ENtLHs6kymUD5VLCkQWFsSvZ+fg= Name: res/drawable-xxhdpi-v4/ic_error_white_18dp.png SHA1-Digest: 6hF1pGQtVr3M91PDkMDkmiXGDRQ= Name: res/drawable-xxhdpi-v4/ic_content_copy_light.png SHA1-Digest: 9F6j9eOSjGQk85A6rAH1QAEZLT4= Name: res/layout/abc_screen_toolbar.xml SHA1-Digest: ZOJ5DhP8CmytjHpZxvV6Ox8Ivp0= Name: res/drawable-xxhdpi-v4/abc_ic_star_half_black_48dp.png SHA1-Digest: ELHP/ybr6BY6lvp/69V+RfkZTGQ= Name: res/layout/database_upgrade_activity.xml SHA1-Digest: ndP+rGDj7Cfsf8wp3rsVdbSo7H4= Name: res/drawable-v11/emoji_category_symbol_dark.xml SHA1-Digest: S4KbeTJw5wwr/9tLDcglMDRZ4A4= Name: res/drawable-mdpi-v4/ic_download_circle_fill_white_48dp.png SHA1-Digest: GOV2soF5+mD1AFiHQTBLOn79Ha4= Name: res/drawable-xxxhdpi-v4/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: OqSIVlkrKIYR7cyOW2HdJP/h5io= Name: res/drawable-xhdpi-v4/ic_select_all_white_24dp.png SHA1-Digest: KR2sKphgTXJ9QE7ONLcq1NDJHlk= Name: res/drawable-xhdpi-v4/switch_bg_disabled_holo_light.9.png SHA1-Digest: lihXWFZsEX3Y2VZnZQ8xgJ4HqYc= Name: res/layout/transfer_controls_view.xml SHA1-Digest: BsRRJ+OjUV6SDPbXjABWEiSxB6g= Name: res/drawable-mdpi-v4/sms_system_import_icon.png SHA1-Digest: HPSbBI5mtTAAmUMwy9xiWhVnzBQ= Name: res/drawable-xhdpi-v4/icon.png SHA1-Digest: QhfVY7UBQilNAfrHJXWil0t74RI= Name: res/drawable-xxhdpi-v4/abc_text_select_handle_left_mtrl_light.pn g SHA1-Digest: rSwsu8lyFJ2T0/pa5u4O8/J64aI= Name: res/anim/slide_from_right.xml SHA1-Digest: R/EvCIayWDXTgntzi87/TffROjA= Name: res/drawable-mdpi-v4/ic_emoji_places_normal_light.png SHA1-Digest: 58Y81AI4id/KD2w57lfiwUhD0dw= Name: res/drawable-xxhdpi-v4/switch_thumb_pressed_holo_light.9.png SHA1-Digest: 7rG4iG6xMyy/xID9Y4eo9y0SIgE= Name: res/layout/design_layout_snackbar.xml SHA1-Digest: yqHI1PppkPcFlQunVhDsTy2rRdA= Name: res/drawable-mdpi-v4/textfield_default_holo_light.9.png SHA1-Digest: UnLnYU6MD2MOR62lCItQOD29xjE= Name: res/drawable-hdpi-v4/ic_menu_add_field_holo_light.png SHA1-Digest: 0pX1gONP4nspRI/v0IbK5Z+P4Eg= Name: res/drawable-v21/dialog_background.xml SHA1-Digest: hxhcDAG+dKyz8Ah0OvgCPwSq9eM= Name: res/drawable-xxhdpi-v4/ic_unlocked_white_24dp.png SHA1-Digest: BjECE1oYoMzYSX45C/uZfe5tDxE= Name: res/layout/reminder_header.xml SHA1-Digest: Ns9bmVbQQKHOqKwAFfIX2UM4XL4= Name: res/drawable-mdpi-v4/ic_emoji_people_normal_light.png SHA1-Digest: A2Tz2rbQYHkLf15VCHn8gEVNyE4= Name: res/drawable-xxhdpi-v4/ic_image_dark.png SHA1-Digest: nwFOkQ8DjRor0j8GFbRNQcjfpig= Name: res/drawable-xhdpi-v4/ic_done_white_18dp.png SHA1-Digest: EvplcFpvBiScbuFWdSdMbXMu4QU= Name: res/drawable-xxhdpi-v4/list_longpressed_holo_light.9.png SHA1-Digest: I+5+I8Glvy2IsIw0hQ/hFirU8cE= Name: res/drawable-hdpi-v4/notification_bg_low_normal.9.png SHA1-Digest: D2PhKM51tYZo8a79riJ3XiUD2nc= Name: res/drawable-xhdpi-v4/ic_download_circle_fill_white_48dp.png SHA1-Digest: jsnHVwkh+0nHcrMtuFPHqgaMREg= Name: res/drawable-hdpi-v4/abc_btn_radio_to_on_mtrl_015.png SHA1-Digest: doXTq0PGlseahO7qxrAxAjB7JIA= Name: res/drawable/abc_list_selector_background_transition_holo_light. xml SHA1-Digest: AdlBQF7mCKx3VlJQ4HaRjQeNXyo= Name: res/layout/recurrencepicker_freq_item.xml SHA1-Digest: dHjPcT33piN4BkyJPRFjAA6NJpA= Name: res/drawable-xhdpi-v4/ic_arrow_forward_dark.png SHA1-Digest: 6cKLUxI1s8foaHCASWI1lB3ux9U= Name: res/drawable-xhdpi-v4/notification_bg_low_normal.9.png SHA1-Digest: dnObiFrk1DvtR5VGgJWQwE6oNeo= Name: res/drawable-mdpi-v4/abc_text_select_handle_left_mtrl_dark.png SHA1-Digest: Osfw11YL10WQkjXxgGt64AbLp0M= Name: res/drawable-hdpi-v4/ic_content_copy_dark.png SHA1-Digest: hnpe+tquN9xGysKN2t7576KXLfc= Name: res/layout-v17/notification_template_big_media_narrow.xml SHA1-Digest: BsNv3+dqgVFy8TCxis6ZPV+2cn0= Name: res/drawable-mdpi-v4/ic_volume_up_dark.png SHA1-Digest: e4xQamTr/9wBswXOayvmULk7s2s= Name: res/drawable-mdpi-v4/ic_volume_off_white_18dp.png SHA1-Digest: 5z/S7DZRXLmyKY2siPabSa5l9io= Name: res/drawable-xhdpi-v4/ic_audio_dark.png SHA1-Digest: EDy61rKaw8fTrPT3VUAiqhESnBc= Name: res/drawable-hdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png SHA1-Digest: 9I5uBrEaa3rXA0AACtIBgaW++Q4= Name: res/color/abc_primary_text_material_dark.xml SHA1-Digest: EtoRUbkcIiZooZPruurTjZllNt0= Name: res/layout/notification_template_media.xml SHA1-Digest: 6dpJaNdMjrssiZxrD+YNOMn8CeY= Name: res/drawable-xhdpi-v4/list_focused_holo.9.png SHA1-Digest: Kw0Qo9eKlw06/oxLHYSWR6VftBw= Name: res/drawable-hdpi-v4/list_selector_background_selected.9.png SHA1-Digest: otna3L08LP49gXxuQvuRvsKnTT4= Name: res/drawable-xhdpi-v4/ic_emoji_places_normal_dark.png SHA1-Digest: CQi33/WUEJ3O3cVy7wA3KmXUC4A= Name: res/drawable-xxhdpi-v4/transfer_controls_background.9.png SHA1-Digest: YwBh/LyZpJuphfkJ+yVu50osyR8= Name: res/drawable-hdpi-v4/ic_call_split_white_24dp.png SHA1-Digest: 4Luz8FsAMmkLDUFlDBPNdM6d2B4= Name: res/layout-v13/select_dialog_singlechoice_material.xml SHA1-Digest: PgA++QZN4J6HviFvlqLyaQTbPG0= Name: res/layout-v17/notification_template_custom_big.xml SHA1-Digest: akAGdgzPFfffe0XPHUWTo4fuwXo= Name: res/drawable/conversation_item_sent_indicator_text_shape_dark.xm l SHA1-Digest: oIWtXE+21oYZ9f0XB2vCLpNSc/8= Name: res/drawable-hdpi-v4/abc_text_select_handle_middle_mtrl_light.pn g SHA1-Digest: 10kBvBUte2AZyag/8SjtRBJJBog= Name: res/drawable-xxhdpi-v4/abc_ic_star_half_black_36dp.png SHA1-Digest: JPdqp3Utz4eGl5Yd4o1J/WbUozw= Name: res/color/abc_tint_switch_track.xml SHA1-Digest: Kal6SSve9vbSTh0eyJn+orXHHIw= Name: res/drawable-xxxhdpi-v4/ic_send_insecure_white_24dp.png SHA1-Digest: wBky0wcelBLG2sq2DsTGAKlibKU= Name: res/drawable-mdpi-v4/telephone.png SHA1-Digest: /zVGgLPtF+whyI9zAzCCUGVqt1M= Name: res/drawable-mdpi-v4/ic_save_all_white_24dp.png SHA1-Digest: 3pl9wu2bcFqQPin53Beo0TCY4wc= Name: res/layout-v21/notification_action.xml SHA1-Digest: +5NrwFa4hY8vqOpBznKVUXR48sk= Name: res/drawable/navigation_empty_icon.xml SHA1-Digest: McRL3inoRGPODvRa7Grnm7zZLr8= Name: res/drawable-xhdpi-v4/ic_emoji_recents_activated_dark.png SHA1-Digest: y0SRoxM8gzHC/WhQK2QoqoYWsAA= Name: res/drawable-xxhdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png SHA1-Digest: NRcHxLdsX/Th2xTrioD1KYFYeK8= Name: res/drawable-xxhdpi-v4/sent_bubble.9.png SHA1-Digest: JlBo2LcLmyvycEGbrbpgPJ1rbv8= Name: res/drawable/switch_track_holo_light.xml SHA1-Digest: Va1z0AM2djF/K7f2GOqxfWAVrPY= Name: res/drawable-hdpi-v4/ic_emoji_emoticons_normal_light.png SHA1-Digest: eJa0rEt3drbZs/CZ5jTBlNzn0rg= Name: res/drawable-xxhdpi-v4/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: vs5sXFVGnqpXFZuXg+uY+nALal4= Name: res/layout/abc_activity_chooser_view.xml SHA1-Digest: bm1dSgfcpygi99m3rg+75RoVcT0= Name: res/drawable-mdpi-v11/icon_cached.png SHA1-Digest: 1IT19k6a+GsikYVyLSFHJRGte/0= Name: res/drawable-xhdpi-v4/abc_ic_menu_share_mtrl_alpha.png SHA1-Digest: eobI6VkMzG98QREBV+/eaTz00LY= Name: res/drawable-xxhdpi-v4/ic_menu_search_holo_light.png SHA1-Digest: zArtT76Uh6rEAZylzjOFZOdJ0xc= Name: res/menu/key_scanning.xml SHA1-Digest: 7OX9fzhB/KnRXH168emKX9Qmmp0= Name: res/layout-v16/conversation_item_sent.xml SHA1-Digest: rYlPjTnG3eaUUmmlTdVh9VHpWrw= Name: res/drawable-hdpi-v4/ic_emoji_nature_normal_dark.png SHA1-Digest: B1ybbMnXI/G48h7heHEwxmULCOo= Name: res/layout-v17/notification_template_big_media_custom.xml SHA1-Digest: fZebd6F0W3rnnXGDkVTYqHKDtp4= Name: res/drawable-xhdpi-v4/ic_mood_white_24dp.png SHA1-Digest: oaZTnKdVIywIQl57pKnKCt3DOw0= Name: res/layout/media_view_remove_button.xml SHA1-Digest: tjJoTuSUP7T7iZmZHT3Dy/pkLGg= Name: res/drawable/conversation_attachment_close_circle.xml SHA1-Digest: x0pAqU4e/K7xUap+gtDmVChr00Q= Name: res/drawable-hdpi-v4/ic_push_gray.png SHA1-Digest: 3arYaP6KZtXoMW3ILggQe4fxYvA= Name: res/animator/bottom_pause_to_play_animation.xml SHA1-Digest: 7f8HiUwoTj84cBIvXQhtx6kFMlc= Name: res/drawable-xhdpi-v4/ic_emoji_emoticons_normal_light.png SHA1-Digest: U0tsH4HQqplILpRU9IYTDB1g+Bw= Name: res/drawable-xxhdpi-v4/switch_bg_focused_holo_light.9.png SHA1-Digest: 7Al4NEadlSNDthHtuP+MABLRxJs= Name: res/layout/empty2.xml SHA1-Digest: wnS9P8OkImc/tnKJnsSet9DvBz0= Name: res/layout/design_menu_item_action_area.xml SHA1-Digest: +CaSrRO+YIeuLR//AbmNORoSW6o= Name: res/drawable-v11/emoji_category_symbol_light.xml SHA1-Digest: COUSagF+F1d0/z9XTocQuYRdoVQ= Name: res/layout-land/calendar_date_picker_dialog.xml SHA1-Digest: iqpjA1eAjjWXIOu09vGX/wjNjVE= Name: res/drawable/ic_backspace_dark.xml SHA1-Digest: ArAaZ6HHiiuf0ps1yq9gj8Okqvg= Name: res/color/abc_tint_spinner.xml SHA1-Digest: w9Ukqef88kQScnBfLuUgAvsMqF4= Name: res/color-v23/abc_tint_btn_checkable.xml SHA1-Digest: DmZR1IvQ3zUPR3/rzr0yGhi4FgU= Name: res/layout/keyboard_right_drawable_with_header.xml SHA1-Digest: EujZ5fvmot/8WDge20sozmY1dEE= Name: AndroidManifest.xml SHA1-Digest: aSiqCQO2JS5dp2XosozmPgZuYDI= Name: res/drawable-xxxhdpi-v4/ic_reply_white_36dp.png SHA1-Digest: DTQXA52dZ/Aov2xiYYQ7Ob7wOOs= Name: res/drawable-hdpi-v9/icon_notification.png SHA1-Digest: TaP5pcnL3kExAb7rawMrwW/A/is= Name: res/drawable-v21/avd_show_password_2.xml SHA1-Digest: qzTtTY4E4ILGYDhNdhW0uOuFdm4= Name: res/layout/fragment_submit_log.xml SHA1-Digest: LWpzFy7pfL8GlXJToDVyMxKDMRo= Name: res/drawable-mdpi-v4/list_selector_background_selected.9.png SHA1-Digest: z7RgcGNXM0xZgKnWQDhCMI5jWU8= Name: res/drawable-xhdpi-v4/sent_bubble.9.png SHA1-Digest: x1LavT6RtZ4zK44/4apQftPRZf4= Name: res/drawable-mdpi-v4/ic_lock_white_24dp.png SHA1-Digest: Od4a/kCsNm29eQiGsbXnOXBRPpA= Name: res/drawable-mdpi-v4/ic_push_gray.png SHA1-Digest: d03BRjHQXMT5dxMInzZlfJyFgvs= Name: res/drawable-xhdpi-v4/textfield_disabled_holo_light.9.png SHA1-Digest: 6kr6+a7d5GsQfVMreRc+SmQOKzc= Name: res/color/abc_tint_default.xml SHA1-Digest: joM6fXjegJAOjP/K8fITfQbXaNY= Name: res/drawable/pause_to_play_animation.xml SHA1-Digest: ASS0dbMw+ywWJt8+9i8Ghf2NAEg= Name: res/drawable-xxhdpi-v4/ic_create_white_24dp.png SHA1-Digest: EKmwDF1HmTWNhbghgAJghsA4xTk= Name: lib/mips/libcurve25519.so SHA1-Digest: NF0l6yNnx4ptXGKTIP7BW3ZrJBc= Name: res/drawable-hdpi-v4/ic_attach_white_24dp.png SHA1-Digest: PSb/5+sj50OyW8z6vffHVCC1gSg= Name: res/drawable-mdpi-v4/ic_emoji_recents_normal_light.png SHA1-Digest: x6tdVSC9kMSRwb+iUYOgcFNhj80= Name: res/drawable/touch_highlight_background.xml SHA1-Digest: 0vN+oXyYyK2QUJlvoZa9aQ/hjl0= Name: res/layout-v11/notification_media_action.xml SHA1-Digest: xk6Nv+akCynB9a9MstuHUvrigc0= Name: res/drawable-xhdpi-v4/ic_play_circle_fill_white_48dp.png SHA1-Digest: nDgt5sLI0dxnit80P6JOMwBUxfM= Name: res/drawable-xhdpi-v4/ic_warning_light.png SHA1-Digest: udwVVOTRM5reilE7yAJKLaMHGcY= Name: res/drawable-v21/avd_show_password_3.xml SHA1-Digest: 8cb+Cb/wnTfMUkRNmCqPPMhQADM= Name: res/drawable-xxhdpi-v4/ic_forum_grey_32dp.png SHA1-Digest: 23qo1QLXrlfUfF5Eqhhxis1N7Xk= Name: res/animator-v11/rotate_90_animation.xml SHA1-Digest: vCHon/zb8+I+tgv5eAXXGWcch9Q= Name: res/drawable-xxhdpi-v4/divet_lower_right_dark.png SHA1-Digest: 7u76e0n4jj0tZe9nC/ILisA56kg= Name: res/drawable-xhdpi-v4/received_bubble.9.png SHA1-Digest: gcv90BhHf7spJ97oEUWp1vl90m0= Name: res/drawable-hdpi-v4/ic_send_secure_white_24dp.png SHA1-Digest: Pjohen4qe8BHqItpcnQLsgP79Kw= Name: res/drawable-xhdpi-v4/design_ic_visibility.png SHA1-Digest: Vl5TwBMiN5v++S+3P9T9173+CDE= Name: res/drawable-xxhdpi-v4/ic_emoji_nature_activated_dark.png SHA1-Digest: P6HchX55uRgUtx9k4TqeFSC7BCg= Name: res/drawable-v21/conversation_list_item_unread_background.xml SHA1-Digest: 7HbNlN7x9aDCWc1PA3Rn1AWku+4= Name: res/drawable-mdpi-v4/ic_emoji_flags_normal_dark.png SHA1-Digest: LZZgv0dmbJRyZidsyghMmuTpP1A= Name: res/drawable-xhdpi-v11/icon_cached.png SHA1-Digest: 6bdC1qEKQc3ehR3PNto+CUv4+bo= Name: res/drawable-xxhdpi-v4/abc_text_select_handle_left_mtrl_dark.png SHA1-Digest: GHXXmeZJAjb8EUS6oBJoqMQ0Mjg= Name: res/drawable-sw600dp-xhdpi-v13/ic_backspace_disabled_light.png SHA1-Digest: pofIFch+lQqiVC0cbD5xIaHHIbc= Name: res/layout-v13/database_migration_activity.xml SHA1-Digest: jjuIX4w9d/FstglsdrCiSpOLBYE= Name: res/drawable-xxhdpi-v4/ic_movie_creation_light.png SHA1-Digest: 2dGS1uf9JsTY2QBMa3u3WisZOhQ= Name: res/drawable-hdpi-v4/ic_add_white_24dp.png SHA1-Digest: eDLDjAoj3Aa+/QbuUjLGYJA6N3s= Name: res/drawable-hdpi-v4/fab_shadow.png SHA1-Digest: wGfZ2WL4AmVSxscVUGvQlQwMWP4= Name: res/drawable-mdpi-v4/ic_info_outline_light.png SHA1-Digest: Syo9p12wh15vMkgPW0hhnRarja8= Name: res/drawable-v21/conversation_list_item_unread_background_dark.x ml SHA1-Digest: rxvd8dvInRPnbVhpNTm0bkO8vU0= Name: res/layout-sw600dp-v13/three_keys_view_right_drawable.xml SHA1-Digest: hJIEke3HCJeFoTSsp3Fnr3ru1oM= Name: res/drawable-xhdpi-v4/ic_brightness_6_gray.png SHA1-Digest: RASxq+Vx8fv6bw+EefSqnNRxvy8= Name: res/anim/slide_to_top.xml SHA1-Digest: b/7F73oaOgl8QTgwjZirDWc5DsI= Name: res/drawable-v11/emoji_category_nature_light.xml SHA1-Digest: q91zOle9oQRxFFsMrVjfW5LncNw= Name: res/drawable-v21/design_password_eye.xml SHA1-Digest: HVHJTN2P1VIy7McjbW2zKNHTZ/k= Name: res/drawable-xhdpi-v4/abc_text_select_handle_left_mtrl_light.png SHA1-Digest: BrhcG9gnMxL5cZcJ0jDTmMfIM6o= Name: res/drawable-xhdpi-v4/ic_emoji_emoticons_activated_light.png SHA1-Digest: UUNraI2rSSmTZuRKp76+H6S34tw= Name: res/drawable-xhdpi-v4/ic_delivery_delivered_dark.png SHA1-Digest: q+GLHJiPjWZNX9rBcm75tWDwE0A= Name: res/drawable-xxhdpi-v4/abc_list_divider_mtrl_alpha.9.png SHA1-Digest: tC6uw2w2e+vYOuhd45mTIYRtoKE= Name: res/drawable-xxxhdpi-v4/ic_play_circle_fill_white_48dp.png SHA1-Digest: NH9ukfqebHQOumBZ8A+W0yLkURc= Name: assets/fonts/Roboto-Light.ttf SHA1-Digest: pjPMJmlNtysc9kyqUeZLQ8N3mzo= Name: res/drawable-xxhdpi-v4/ic_save_all_white_24dp.png SHA1-Digest: WR/22zimbblTw5FOPZt13OUTEAU= Name: res/layout/abc_alert_dialog_title_material.xml SHA1-Digest: jVZHwQ3okFh1QBuLZci4icsDWV4= Name: res/layout/import_export_fragment.xml SHA1-Digest: gasJgYghpkBfyEVIE76dsry19Vk= Name: res/drawable-mdpi-v4/abc_scrubber_track_mtrl_alpha.9.png SHA1-Digest: F8nLQoXKGiQPJCjl3TNIR/eklGw= Name: res/drawable/spinner_background_holo_light.xml SHA1-Digest: B0aXFxtzoLaEhbHHxuiXjae5Gog= Name: res/drawable-xhdpi-v4/fab_shadow_mini.png SHA1-Digest: LXN0FOE68TYP8JlxKq2MYPy1a4Q= Name: res/drawable-xxhdpi-v4/abc_ic_star_black_36dp.png SHA1-Digest: 4eyqloBe4i++Lnjut9rv30zXGjc= Name: res/layout-v17/abc_search_view.xml SHA1-Digest: bpToW9h3RZxHrVWHrYOhb4NsYgk= Name: res/drawable-hdpi-v4/ic_missing_thumbnail_picture.png SHA1-Digest: Alvw+lU2O9PD3nO/yAu9taOEZs4= Name: res/drawable/conversation_list_item_unread_background.xml SHA1-Digest: vtHZ4HtPOge1w3+fen0KNHUO/os= Name: res/drawable-mdpi-v4/ic_emoji_objects_activated_light.png SHA1-Digest: 6MaBPweMvqHaw8FgUp8UlSaTT8s= Name: res/drawable-hdpi-v4/abc_textfield_search_default_mtrl_alpha.9.p ng SHA1-Digest: Uaax8TsSlV1ssfdd4JM/P9lAyjc= Name: res/xml/badge_widget_provider.xml SHA1-Digest: BbkN2gHT30IIHuFy/mQKOhYMmKw= Name: res/drawable-ldrtl-xxxhdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.pn g SHA1-Digest: ZMTKws3Yf0EOK1CpWECY7+yKtn0= Name: res/drawable-xxhdpi-v4/ic_badge_24dp.png SHA1-Digest: f0Z1+ACf5AfSh6xkqW9se8lw96E= Name: res/drawable-mdpi-v4/ic_emoji_symbols_activated_light.png SHA1-Digest: 07UvaS4Vt2TdcWhTDIOJXiLICPo= Name: res/drawable-mdpi-v4/ic_play_circle_fill_white_48dp.png SHA1-Digest: pqjm1dRGDzQ8JZmZbqNZzr5lCEo= Name: res/layout/design_bottom_navigation_item.xml SHA1-Digest: LAhv7EglbmBNJita3rNPNDZ6Jww= Name: res/drawable-mdpi-v4/ic_backspace_normal_dark.png SHA1-Digest: rdghLsk72qbvJh/nssDD307QNTs= Name: res/drawable-mdpi-v4/abc_text_select_handle_left_mtrl_light.png SHA1-Digest: 8guTAEXvUmh+eaLeokeYvH7643o= Name: res/drawable-xhdpi-v4/ic_check_normal_dark.png SHA1-Digest: 2MQ0mNjQk8jSZjMS1PM6fadBQLU= Name: res/xml/preferences_chats.xml SHA1-Digest: CbW30JJLB0mFlH8JRMEmKx4hBcg= Name: res/layout/radial_time_picker_dialog.xml SHA1-Digest: 0qg20NInRmHHMeoeoX1qZtGuCIg= Name: res/drawable-xhdpi-v4/ic_menu_add_field_holo_light.png SHA1-Digest: 2wevLdiXjHIkTVcPtdT3YcMZQJk= Name: res/drawable/background_pattern.png SHA1-Digest: CTOBxrOS8ngBuJdnK7DkmHHCF3w= Name: res/layout/abc_popup_menu_item_layout.xml SHA1-Digest: 9KY6cTlIMTXELBZlS/lQJqma3no= Name: res/drawable-hdpi-v4/ic_download_circle_fill_white_48dp.png SHA1-Digest: fuRUb+7a8CDp2iushzsyHDNApGk= Name: res/layout/hms_picker_view.xml SHA1-Digest: E90edl4d9jK1Auvl9DQkc/OHxPI= Name: res/drawable-mdpi-v4/ic_account_box_light.png SHA1-Digest: Pn9U6zgZiaHjLMufo7m5UI3sqv0= Name: res/drawable-mdpi-v4/ic_emoji_people_normal_dark.png SHA1-Digest: o6u0xd82CT37/1jIsyd0EiR5CA8= Name: res/layout/media_overview_activity.xml SHA1-Digest: cqKNQw8HsS0zl7VKIHDH8/Kif90= Name: res/drawable-hdpi-v4/ic_save_all_white_24dp.png SHA1-Digest: BNtudXvSGAgIP4Xz6AMNSY0dWzw= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_84 SHA1-Digest: cM9Igo/aYhfEFUXrYtfhy+rGfTA= Name: res/drawable-hdpi-v4/design_ic_visibility.png SHA1-Digest: il2OWkYNYAmmPAdZJmHUqqQXceQ= Name: res/drawable-xhdpi-v4/abc_btn_check_to_on_mtrl_015.png SHA1-Digest: i6pCyKNDkCGzNzTp71ixAq/8VCM= Name: res/layout-v16/verify_identity_activity.xml SHA1-Digest: fViipTHHheUGccA3ejf2i3023hY= Name: res/drawable-xhdpi-v4/switch_thumb_pressed_holo_light.9.png SHA1-Digest: UztIfkg+4xXbDDfXpkylsY0bawQ= Name: res/drawable-xhdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png SHA1-Digest: 8QLweU4p1rehkS9Zii3jepzESPg= Name: res/drawable-ldrtl-xxxhdpi-v17/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: dT9O498/3E1mpkpzpSmdy7tcxxU= Name: res/drawable/notification_bg.xml SHA1-Digest: bj5a80+E2BgDJ7UtZngYsYRoM3A= Name: res/drawable-mdpi-v4/ic_message_black.png SHA1-Digest: ufXFoyZsYQwoWX75dnNWMkffm/8= Name: res/drawable-hdpi-v4/abc_textfield_default_mtrl_alpha.9.png SHA1-Digest: NPD/eXAUHpJIZ0Gue4mGW/Q6oXI= Name: res/drawable-hdpi-v4/abc_ic_star_black_16dp.png SHA1-Digest: lC47V58n3eYOJicP+Ng5Di5wekE= Name: res/drawable/abc_ic_arrow_drop_right_black_24dp.xml SHA1-Digest: yfl/P7TCWvsLAw6+ItgG3AhNxR0= Name: res/layout/design_layout_tab_text.xml SHA1-Digest: hGylEWtLV6PowlIJAnKyrFqhGEo= Name: res/drawable-xxhdpi-v4/ic_refresh_white_18dp.png SHA1-Digest: dQc+eDIq1pnsTBTStjfhNl4FO1I= Name: res/color/design_tint_password_toggle.xml SHA1-Digest: 1bBz9XsGPIkliq4TDSak3qiheuM= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_81 SHA1-Digest: daBwnRVtz216PB28MApBfpfM6OY= Name: res/layout-v21/conversation_fragment.xml SHA1-Digest: Hb/NyJTA3nGqHaToCWjWyA0Nfhc= Name: res/color/design_error.xml SHA1-Digest: Es59RSWVXiKJovqODE9ReDu7QUQ= Name: res/drawable-mdpi-v4/ic_keyboard_white_24dp.png SHA1-Digest: 1b41v469NLXoyk0C8eEgDKy//vU= Name: res/drawable/last_seen_divider_text_background_light.xml SHA1-Digest: V+jBVY7mlKJH1EPCbcqpCeWfR7g= Name: res/drawable-xxxhdpi-v4/fab_shadow_mini.png SHA1-Digest: 2TqTOMvnZEi2P/x0zbtExFQryOY= Name: res/drawable-xxxhdpi-v4/ic_arrow_forward_white_24dp.png SHA1-Digest: ChZoygScVbCrHuKHdLovsttInZE= Name: res/drawable-mdpi-v4/textfield_focused_holo_light.9.png SHA1-Digest: Osswqo8kfRGKahOnjpi0n93nS1Y= Name: res/color-v11/abc_hint_foreground_material_light.xml SHA1-Digest: xfQnMbjkcgC7kuD+Hp7rD3X8Rzw= Name: res/drawable-ldrtl-mdpi-v17/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: nhOdszX2MHoKx6H7uBb+tEWPyJ0= Name: res/drawable-xhdpi-v4/abc_text_select_handle_middle_mtrl_dark.pn g SHA1-Digest: 2yBDAHgYTM0FfiL8gWf0VdNXNwA= Name: res/color-v23/abc_btn_colored_borderless_text_material.xml SHA1-Digest: ZoOvC29NE42ira4RG74k41hynCA= Name: res/drawable-hdpi-v4/fab_shadow_mini.png SHA1-Digest: hppvVugySDc93vDPDtj/YdWC9nE= Name: res/drawable/emoji_category_objects_light.xml SHA1-Digest: Sd8nRKN7U3KjNP28k3h5bQTceqs= Name: res/layout/emoji_drawer.xml SHA1-Digest: lL84YM61BuU5J1OZN8IHnco9kmA= Name: res/drawable-xxhdpi-v4/ic_menu_remove_holo_light.png SHA1-Digest: n8+8cFBa9+ptZR+rttySX8lU5NM= Name: res/color/abc_search_url_text.xml SHA1-Digest: ULqUPkxlcpqU/WycHleKoU9uLlU= Name: res/layout-land/radial_time_picker_dialog.xml SHA1-Digest: TfwEjFSvG9/SqnIVmSBDfEjpv54= Name: res/layout/calendar_date_picker_dialog.xml SHA1-Digest: a6D1iIW2yY84vwjUvErCg53sxnw= Name: res/drawable-mdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png SHA1-Digest: bZVk/7JyPqpb9FPgqFjfBJURWhA= Name: res/drawable-xxxhdpi-v4/ic_unarchive_white_36dp.png SHA1-Digest: OEYQYVABoR+2CE7ZA7yHLMEW1jw= Name: res/drawable-v11/edit_text_holo_light.xml SHA1-Digest: F+DtDSj0l98dcxb0XPI/r0kY9to= Name: res/drawable-mdpi-v4/ic_video_light.png SHA1-Digest: AHljVdelrMj8drM7jwGHprqJFmA= Name: res/drawable-mdpi-v4/ic_info_outline_dark.png SHA1-Digest: pNBgu6UtP9GYO3W6/NJwyRUiAEo= Name: res/drawable-mdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png SHA1-Digest: 6odRFxWrjmo6tHxritbB5cYdjWI= Name: res/drawable/dialog_background.xml SHA1-Digest: UEWSC5BKnYPbksgbsZfSkL3N3ks= Name: res/drawable-xhdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png SHA1-Digest: /hpvHveM+a3Mx49n/3P19bBBgiI= Name: res/color/abc_secondary_text_material_dark.xml SHA1-Digest: GQ3rWNxlJ84ZAaPkwxO7VystcTs= Name: res/layout-v17/notification_template_lines_media.xml SHA1-Digest: DAyURKcw6XN72DiE6lYrFAfeAT8= Name: res/drawable-hdpi-v4/ic_notifications_gray.png SHA1-Digest: UBKxyCadglItZqfHFWo/NWq2kMU= Name: res/layout/design_navigation_menu.xml SHA1-Digest: fPFY6UdlecbjXNsn4YVofqtT7ys= Name: res/drawable-xxhdpi-v4/ic_contact_picture.png SHA1-Digest: 0QLSDRqpJz/6PixVRqg6TsEKdbw= Name: res/layout-v17/abc_popup_menu_item_layout.xml SHA1-Digest: H1kmEvfqPIpUL4c30NrLzcfeswk= Name: res/drawable-xhdpi-v4/abc_ic_star_half_black_36dp.png SHA1-Digest: 8XIl4bSeXq0sG4+FeucZZjHT7Qw= Name: res/drawable-hdpi-v4/ic_send_white_24dp.png SHA1-Digest: /UYoUVKGEI67dPfLwMLubQ0O18w= Name: res/menu/conversation_list_batch_archive.xml SHA1-Digest: f/k6AdLx/BkfHmuws2aE8gA4VZ8= Name: res/drawable-hdpi-v4/ic_done_white_18dp.png SHA1-Digest: hsrbmHP3Ca7VipiW3cqyhrrkxQk= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_94 SHA1-Digest: iFng5Rg8uXcO1Wad8WzQjXXbaSA= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_95 SHA1-Digest: 6+a5S3YBqGkTp77eRI98wZppshU= Name: res/layout/share_intent_row.xml SHA1-Digest: hEFfaanmx0xw0zSH1atx6iZAH5s= Name: res/xml/preferences_notifications.xml SHA1-Digest: 7d987UvRoWOjXVXe42qeTVWojXc= Name: res/drawable/notification_icon_background.xml SHA1-Digest: 9XV2y6Lq4+7VQc34MLXKGo0bK88= Name: res/drawable-xhdpi-v4/switch_bg_focused_holo_light.9.png SHA1-Digest: /LzkB2YWBf8/BEEXg0QTgGcw1zo= Name: res/drawable-xxhdpi-v4/ic_info_outline_light.png SHA1-Digest: ldG1yneMkBED1JCTqG2hVvc9508= Name: res/layout/prompt_passphrase_activity.xml SHA1-Digest: +ZXaHK1hsoQQvA5zR/XytZxf1TA= Name: res/drawable/button_background_light.xml SHA1-Digest: 2ArVCjLjr02aFbyRYSeHh1WEUrE= Name: res/drawable-v11/emoji_category_flags_dark.xml SHA1-Digest: C23igqMnLW5kCfUE8FpsQeZLIos= Name: res/layout-v16/calendar_date_picker_header_view.xml SHA1-Digest: +545VslRghtWl18ssktPG2+sHHg= Name: res/drawable-xhdpi-v4/alert.png SHA1-Digest: r0uY1AsW4BfEQ0neJobBHCaDZDg= Name: res/layout/contact_selection_activity.xml SHA1-Digest: o1xq3vcI/nhMiAp+92hqM9E2uN4= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_91 SHA1-Digest: lcsLkHVu72/rODkHdAAZAfP/bk8= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_90 SHA1-Digest: 7WrMiEDONSaE+X9BTfPKgXzIz+g= Name: res/menu/conversation_list.xml SHA1-Digest: KpevVWxQDbF5cuDPnZqzkRfPRxE= Name: res/drawable-xxhdpi-v4/ic_message_gray.png SHA1-Digest: 0STrwJfkSN+45t6UZF0HHjhNlrA= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_49 SHA1-Digest: lJyFdjLImuA15HlomNveCTDcnAc= Name: res/drawable-mdpi-v4/ic_save_white_24dp.png SHA1-Digest: mgACmxmFqQ+zs8iPY7oYpx7VXzI= Name: res/drawable/compose_divider_background.xml SHA1-Digest: RsAhKmH09jc4QKAZtjrZMgSO/n4= Name: res/drawable-xxhdpi-v4/ic_action_warning_red.png SHA1-Digest: lJyeXqkO3zENRDDbya7f7KvV+qc= Name: res/drawable-mdpi-v4/textfield_disabled_holo_light.9.png SHA1-Digest: h4/VO+f25Zj7CANfbDIPqcsPTeQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_44 SHA1-Digest: N1nuhYaREi9z6iAeXxLcra4rL5s= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_43 SHA1-Digest: mIFkru/j+coHhbRh6/nN2br+Xak= Name: res/drawable/ic_check_light.xml SHA1-Digest: UNOeSc0tns0fQsdGjNn6nMv2Rck= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_39 SHA1-Digest: DCU1im+wpc/coZrjso8xoYO7IjM= Name: res/drawable-hdpi-v4/ic_menu_search_holo_dark.png SHA1-Digest: 4dSQGHNaTKAj96679sXZ4xJ8A6o= Name: res/drawable-xxhdpi-v4/ic_emoji_symbols_activated_light.png SHA1-Digest: Z3d6uBgQscgF9jpY8JTh0/r0GQY= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_36 SHA1-Digest: hWS0Op4dc6LF44g9BIFft/f3QH0= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_31 SHA1-Digest: KuLNytr4ZRl4fcSWuquXOt81/60= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_30 SHA1-Digest: Bh8tv057544lV4r7kRT1zzTlaA8= Name: res/drawable-xxxhdpi-v4/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: BjYXNIGGhyqIB4Vq4khlEepKSZk= Name: res/drawable-xhdpi-v4/ic_volume_up_light.png SHA1-Digest: LfbmrD0YLMA9OlzM1Gk4P3X3+7w= Name: res/drawable/notification_bg_low.xml SHA1-Digest: IKiF8Z0by9Q2pqJeveIHUizqkp4= Name: res/drawable-xxhdpi-v4/icon_cached.png SHA1-Digest: /SZtInm1nKG4qAtbMelP08hKDBY= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_34 SHA1-Digest: O3GRzsWEr1+UF6z/veTcYUIikdU= Name: res/drawable-xhdpi-v4/ic_visibility_grey600_24dp.png SHA1-Digest: cryynexdcx/BHt6qYA/0iFTRfDg= Name: res/drawable-xxhdpi-v4/abc_btn_check_to_on_mtrl_000.png SHA1-Digest: 0kKvPwdj7zBzN9UX4+jHAPKwyCA= Name: res/drawable-mdpi-v4/ic_brightness_6_black.png SHA1-Digest: bXR9+poSUACZSRXeejLBXqLMfBo= Name: res/drawable/design_fab_background.xml SHA1-Digest: 2IXtIQ8BMr6/gZ9iOW0d/IwZH6A= Name: res/drawable-xxhdpi-v4/ic_account_box_light.png SHA1-Digest: Jj9UOG98sbonLzTowZRWm5p9PYM= Name: res/layout-sw600dp-v13/three_keys_view_text.xml SHA1-Digest: lrd18VCqevhTKeg67U1GT6IrXxU= Name: res/drawable-hdpi-v4/ic_delete_black.png SHA1-Digest: qEmobDlgidBgvc4OoPk6XdEUEmY= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_66 SHA1-Digest: ZFpoKe4t4pLWyhWH1RNMJcPf+fE= Name: res/drawable-xxhdpi-v4/ic_select_all_white_24dp.png SHA1-Digest: immG58Mn+jJpWq3F2CTYfdXTMzw= Name: res/animator-v11/upper_pause_to_play_animation.xml SHA1-Digest: 8rY/CYehbUSswda3BXhrTPOxJnM= Name: res/drawable-hdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png SHA1-Digest: E/mBhY9wNG5VaFmW6qL4iXjAHvY= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_62 SHA1-Digest: C2zdTbDUsHHOOdTxAqDglz9LuHI= Name: res/drawable-hdpi-v4/ic_dialpad_white_24dp.png SHA1-Digest: ukq3bmPeQHlcjILimK53COmRM5I= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_61 SHA1-Digest: 7c51UKlqpVDI3o2A/s0k4nNgKCA= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_63 SHA1-Digest: a7U/pmtZHFBo5obxPjewjKWkGa8= Name: res/drawable-hdpi-v4/ic_recurrence_bubble_outline.png SHA1-Digest: 8mGZECazDoQbCTJL8WAIWh+KGPs= Name: res/drawable-mdpi-v4/icon_lock.png SHA1-Digest: 0w8rXRPZI28+gPou427g9RzDTUM= Name: res/drawable-xhdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png SHA1-Digest: O6x52IgsWeKV4Xdu5U2H2IxbVgc= Name: res/layout-v17/abc_alert_dialog_button_bar_material.xml SHA1-Digest: JyQAez6kQCbcigDs2z/nSmQuSYo= Name: res/drawable-xhdpi-v4/abc_list_selector_disabled_holo_light.9.pn g SHA1-Digest: bwjSzuahpvwVgJavscLUKen/ZqQ= Name: res/layout/abc_action_bar_title_item.xml SHA1-Digest: JePlqdhFAVxMv4b6ytoiCrX6ghM= Name: res/layout/color_preference_items.xml SHA1-Digest: /OV6OKHQivYRh4P5Xmq1+fdcz8k= Name: res/layout/notification_template_part_chronometer.xml SHA1-Digest: dzQtd/RKeHhfMLTfmeJLOxUNfdA= Name: res/drawable-xxhdpi-v4/ic_emoji_nature_normal_light.png SHA1-Digest: irbPkaiv3NQ3eYZERKzfv9yBG0w= Name: res/layout/zooming_image_view.xml SHA1-Digest: v8hYwtg/deZRi/NqPvzpCqBUaM4= Name: res/animator/upper_play_to_pause_animation.xml SHA1-Digest: 7f8HiUwoTj84cBIvXQhtx6kFMlc= Name: res/drawable-hdpi-v4/ic_send_insecure_white_24dp.png SHA1-Digest: XNk5jZwbAktbwvDiJ9gFsob2ug8= Name: res/drawable-mdpi-v4/ic_volume_off_grey600_18dp.png SHA1-Digest: 7c0EwppLt2vWdCJHYSeZzLOerCg= Name: res/drawable-xhdpi-v4/ic_photo_camera_dark.png SHA1-Digest: xmGv8Id61t3QBoSXhTMQIuh1fMc= Name: res/drawable-mdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png SHA1-Digest: deH5E0yKjBo6CYdnvx70e1ZcVb4= Name: res/drawable-xhdpi-v4/ic_block_white_18dp.png SHA1-Digest: +mYTL+dLl37rrmzqXIMss3kAfWg= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_58 SHA1-Digest: LqgBINJBQXrfS7qSEUdO2YKapSc= Name: res/drawable-hdpi-v4/ic_emoji_flags_normal_dark.png SHA1-Digest: AY66CHRZpDIF8mLkrCS9dfohLHc= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_55 SHA1-Digest: aHXhcJ44Nq+1uITpH9udVnAuQjI= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_54 SHA1-Digest: 0pJTmVMR2tNAUtn+uRmLAqWmQnM= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_52 SHA1-Digest: a5Rio2BfCR5r/5jH/4aK85mYB60= Name: res/drawable-xxhdpi-v4/ic_warning_dark.png SHA1-Digest: /RxhT72cwoQLuIL6NL3fNyxrHAE= Name: res/drawable-xxhdpi-v4/ic_delivery_delivered_dark.png SHA1-Digest: wDUNsUxrly/X82wiKUkKCnSH9xQ= Name: res/drawable-hdpi-v4/ic_brightness_6_black.png SHA1-Digest: sNn2cEEK3mhmChlw56v3NZWc+PU= Name: res/anim/abc_popup_exit.xml SHA1-Digest: HpgqoyyC+fdyFrYE8t6l+v0+Y4c= Name: res/drawable-hdpi-v4/abc_scrubber_track_mtrl_alpha.9.png SHA1-Digest: dEml7NSraw7t0+4lZ4iFeNS5MxI= Name: res/drawable-xhdpi-v4/abc_switch_track_mtrl_alpha.9.png SHA1-Digest: DnUPb3c/aCYMPIdhLVRqT1eh/J8= Name: res/drawable-xxhdpi-v4/ic_cancel_white_24dp.png SHA1-Digest: qXcnrshlwqOoKMyTfdqDJvESxg4= Name: res/drawable-mdpi-v4/ic_done_all_white_18dp.png SHA1-Digest: cs2HuS0orrt73+am04haXgUKE68= Name: res/drawable-mdpi-v4/ic_brightness_6_gray.png SHA1-Digest: iZ7h/BCqiG1zxjUl+/NNSnjBD34= Name: res/drawable-xhdpi-v4/ic_emoji_flags_activated_light.png SHA1-Digest: MEtoOMqwvAYWz6fkJUBDVzRUkKY= Name: res/drawable-mdpi-v4/design_ic_visibility_off.png SHA1-Digest: 3oMRQReSGSp08y2pMlOzFR4ywCY= Name: res/drawable-hdpi-v4/ic_photo_camera_light.png SHA1-Digest: wUu5bASnG15UjJ3p/oz6Cbqsubg= Name: res/drawable-hdpi-v4/ic_image_light.png SHA1-Digest: LuLestvVAdcTp5lhGpkzn75c57Y= Name: assets/emoji_symbols.png SHA1-Digest: n7FK0HOrvqZV7o1ufIX1wGOrcIg= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_675 SHA1-Digest: yhEc8jlPKXbvDhLFNca0Uc/VhxE= Name: res/drawable-xhdpi-v4/ic_done_all_white_18dp.png SHA1-Digest: bds2Iuy5nv0qlbNhMazdU+Qx96M= Name: res/drawable-xhdpi-v4/ic_delete_gray.png SHA1-Digest: sbblR+7QPwVjl8EICQ8WnvL/CrQ= Name: res/drawable-xxhdpi-v4/ic_textsms_grey_32dp.png SHA1-Digest: rgFpKvXoZtZMqWY7J5a/bhjpYkM= Name: res/drawable-mdpi-v4/ic_lock_white_18dp.png SHA1-Digest: 0pWTZiXP7gNmX7x0dMXFWAxf4Es= Name: res/drawable-hdpi-v19/switch_thumb_pressed_holo_light.9.png SHA1-Digest: uOrxuPdeG1Hgke4uVegUhdTfRG0= Name: res/drawable-hdpi-v4/ic_emoji_recents_normal_light.png SHA1-Digest: 73HeZsh5EL0NGvcwdf4w0XrGYYk= Name: res/drawable-mdpi-v4/ic_send_secure_white_24dp.png SHA1-Digest: nCLy3tQbOKq07y50ZIUTpcjnhnc= Name: res/drawable-xxxhdpi-v4/ic_block_grey600_18dp.png SHA1-Digest: Wnx7f/cklcGcPj6qR93gMkqNkw4= Name: res/drawable-xhdpi-v4/switch_thumb_disabled_holo_light.9.png SHA1-Digest: MYtF9U4u3mtwL6bJwMkzyLB2Ubo= Name: res/drawable-xhdpi-v4/ic_info_outline_white_24dp.png SHA1-Digest: QPuwWkulg9WVT/Ig3MFtFD3gtQI= Name: res/layout-v16/conversation_item_pending_v11.xml SHA1-Digest: x9oNv7tpQZ8h//UjTjWDz9rEGbg= Name: res/drawable/design_snackbar_background.xml SHA1-Digest: awjecjomEXMebQo/pzfxBHj9VwI= Name: res/drawable-xhdpi-v4/abc_scrubber_control_off_mtrl_alpha.png SHA1-Digest: TE1PNkVCa4/Qe4l6j08Ay94JJoI= Name: res/drawable-hdpi-v4/ic_create_white_24dp.png SHA1-Digest: Ngp6bz1KSL3ekincx4aKU3E5mfY= Name: res/layout/key_caching_notification.xml SHA1-Digest: 4pK9XkXluFEWCEkoL0lDgtVJAeY= Name: res/drawable-xxhdpi-v4/textfield_activated_holo_light.9.png SHA1-Digest: VMleSAHQjnh30LIfWAOzY1IDlbw= Name: res/drawable-xxhdpi-v4/ic_movie_creation_dark.png SHA1-Digest: 1ED3QTApITyFoHxJsk+Sjudbfqg= Name: lib/armeabi/libcurve25519.so SHA1-Digest: DZp6sKgPx0OIH7QnfWd10/xDWKo= Name: lib/x86/libcurve25519.so SHA1-Digest: UFYy6nU/81SXbTSt27hCeprBEmw= Name: res/drawable-mdpi-v4/ic_menu_search_holo_light.png SHA1-Digest: HtE3Ob4am+aTd0cb+2FlBJSI1WM= Name: res/drawable-xxhdpi-v4/abc_textfield_search_activated_mtrl_alpha .9.png SHA1-Digest: Ay1qOaJ2aLiCf8NAaujbkp0H1cQ= Name: res/drawable-hdpi-v4/abc_ic_star_black_48dp.png SHA1-Digest: nrSR6Cj5AAFhLDBo5XOuCzzOUCE= Name: res/drawable-mdpi-v4/abc_text_select_handle_middle_mtrl_dark.png SHA1-Digest: sk0rERRHxBHTLx83NS6FqhClw8o= Name: res/drawable-xxhdpi-v4/ic_lock_dark.png SHA1-Digest: uoZ2hSKRtpk3d1wsVK3LXBQdgSg= Name: res/anim/abc_fade_in.xml SHA1-Digest: ohPEA4mboaFUu9LZMUwk7FmjbPI= Name: res/drawable-xxxhdpi-v4/ic_archive_white_24dp.png SHA1-Digest: iju5YbRtUrYl8YP0bfxGlwX109c= Name: res/drawable-hdpi-v4/ic_volume_off_grey600_18dp.png SHA1-Digest: t/JN4l5yRXI5ZpGVy8IoYghOVUY= Name: res/drawable-sw600dp-hdpi-v13/ic_backspace_normal_dark.png SHA1-Digest: 1XmRIrHr1R9bw9Pzq9j8mLDE+4o= Name: res/drawable-xxhdpi-v4/ic_recurrence_bubble_outline_disabled.png SHA1-Digest: 9mCG2i/EzxrsD9HbYPQDcXflt/o= Name: res/layout/abc_search_dropdown_item_icons_2line.xml SHA1-Digest: Hg4wvo3SofqoQb9PWlHfHhYuR1w= Name: res/layout/abc_screen_simple.xml SHA1-Digest: L+lDjRkMzyxbAEO55AhMboq9FFA= Name: res/layout-v17/conversation_title_view.xml SHA1-Digest: 0pyo8pUsPgwnEZ8+uELR5HJoyv4= Name: res/layout/conversation_item_sent.xml SHA1-Digest: W1QeAnoXO2z0N2cryym2JlweNcc= Name: res/drawable/share_list_divider_shape.xml SHA1-Digest: 74uWk5jveXzr1FmYQ3DdIhPD8bs= Name: res/drawable-hdpi-v4/abc_text_select_handle_right_mtrl_light.png SHA1-Digest: 0Gfqa0wEfQSI0mKJkwlXlJWSicQ= Name: res/drawable-xhdpi-v4/ic_pause_circle_fill_white_48dp.png SHA1-Digest: 1z1oT+i1Qhlq1r7uREl2qmGlIZ0= Name: res/drawable-xxhdpi-v4/design_ic_visibility_off.png SHA1-Digest: VjW4QDbjDLSVWJK4Q5sW5G0r540= Name: res/drawable-hdpi-v4/ic_emoji_symbols_activated_dark.png SHA1-Digest: 62PkF1Y+j3pWj/LSKskVoqGfrTE= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_255 SHA1-Digest: T8Y8UPJDNNY3gi+RvAerX30aAJ4= Name: res/drawable-xxhdpi-v4/abc_list_focused_holo.9.png SHA1-Digest: FsvLP65iWVfEfIkCPXw4wimwY7M= Name: res/drawable-xxhdpi-v4/textfield_disabled_holo_light.9.png SHA1-Digest: IbsyrIi5P4z5+3CcgDwoUkpzMUI= Name: res/drawable-hdpi-v4/ic_menu_barcode.png SHA1-Digest: p14R9rQhMUiRkgh9WUV9xkIM0ek= Name: res/layout-v21/notification_template_custom_big.xml SHA1-Digest: +NAV2xQcf+GDqwoSFHM5HWE+f5M= Name: res/drawable-xxhdpi-v4/sms_system_import_icon.png SHA1-Digest: L2uEmxsqPsX+b2hwagV3mviRdwg= Name: res/drawable-xxxhdpi-v4/transfer_controls_background.9.png SHA1-Digest: wFp+tXS4iMWJJHESG7JNSLvEj4E= Name: res/color-v23/abc_tint_edittext.xml SHA1-Digest: fRj3PTupUzBlYT1O+bKkZbmomws= Name: res/layout/conversation_title_view.xml SHA1-Digest: JeLUgqidsv6MxG4zOZqri0P6L1k= Name: res/drawable-mdpi-v4/ic_emoji_recents_activated_dark.png SHA1-Digest: ZIQ+n3B5THl/aA/uXVzPpIVqpu8= Name: res/drawable-xhdpi-v4/abc_list_pressed_holo_light.9.png SHA1-Digest: 5rSZbdJDOTdM5kJhhIdl8m8briI= Name: res/drawable-xxxhdpi-v4/ic_forum_black_32dp.png SHA1-Digest: Qs+P4ybw3XFue+Vv0FWx4k95zPg= Name: res/drawable-mdpi-v4/ic_clear_white_24dp.png SHA1-Digest: HGIeDdMwnH0fkemT6lO7+z+z2Rs= Name: res/drawable-xxxhdpi-v4/abc_ic_star_half_black_36dp.png SHA1-Digest: dd2zj6sr+xRmZWNPRjYGn37/Nm8= Name: res/layout-v17/notification_template_big_media_narrow_custom.xml SHA1-Digest: qdhlc+Z9n+jv4RmCx3JQOeRSvWs= Name: res/drawable-mdpi-v4/ic_advanced_gray.png SHA1-Digest: UhBepQMxsiJjJCgarZj183ZjXrI= Name: res/menu/conversation_list_batch.xml SHA1-Digest: NYPIJ4od1qC/qiyUnYQLKAYhHVc= Name: res/drawable-hdpi-v4/textfield_disabled_holo_light.9.png SHA1-Digest: E/schz5NibOcz8He1B5Tsu3ujfk= Name: res/drawable-xhdpi-v4/fab_shadow.png SHA1-Digest: LbvYC5hiRMwHEfAlnuyydhdGSvs= Name: res/drawable-hdpi-v4/abc_btn_check_to_on_mtrl_000.png SHA1-Digest: 6nL94lpOIDhHAcaZP6Numi9gbpw= Name: res/drawable-xxhdpi-v4/ic_block_white_18dp.png SHA1-Digest: nbznVH+OZUkhsULWW5q/YEszBpE= Name: res/drawable-hdpi-v4/ic_check_white_24dp.png SHA1-Digest: OxuZuuMKpWfGpoioNb4jTXrydVM= Name: res/drawable-xhdpi-v4/ic_volume_off_white_18dp.png SHA1-Digest: GbAswuzUqZ8xPXxHCKNWmwCYd6E= Name: res/drawable-xhdpi-v4/ic_emoji_emoticons_activated_dark.png SHA1-Digest: 65J8tJ8nazlcXEWEJIFnxPojdPQ= Name: res/drawable-xhdpi-v4/ic_warning_dark.png SHA1-Digest: TSk/H6nGa9ShavF3v2CooQifPqQ= Name: res/drawable-xxxhdpi-v4/ic_unarchive_white_24dp.png SHA1-Digest: Na2uHss6q/itXXPxfstb8nuqLqM= Name: res/drawable-hdpi-v4/ic_visibility_off_grey600_24dp.png SHA1-Digest: 5h5ymBcJ8muWnOdsJHDYhc4i6kQ= Name: res/drawable-v11/emoji_category_recent_dark.xml SHA1-Digest: M/SBX1z1roN+u5+TvQZXKJDNEyA= Name: res/layout-v21/conversation_title_view.xml SHA1-Digest: pwOa8NNzv9FW4Byauw63ZA3uUBw= Name: res/drawable-xhdpi-v4/ic_emoji_symbols_normal_dark.png SHA1-Digest: OCGkcF4VjaLue66XVwzxR4E/DVU= Name: res/drawable-xxhdpi-v4/ic_visibility_off_grey600_24dp.png SHA1-Digest: 4EhqySAhGMjjioXSTtBhegZniW4= Name: res/drawable-mdpi-v4/ic_content_copy_light.png SHA1-Digest: Tbu8D45KApwF0j9Iqaq3JNuAJzI= Name: res/drawable-mdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png SHA1-Digest: c+ieuII6udSDVml51EH3TH6KocA= Name: res/drawable-hdpi-v4/ic_group_photo.png SHA1-Digest: wgViwvlG62FHBV5ncMDu6PtEO6c= Name: res/menu/conversation_list_empty.xml SHA1-Digest: EH9NTV8PcFGMG++Hx8fJwoRaBFE= Name: res/drawable-hdpi-v4/ic_backspace_disabled_dark.png SHA1-Digest: 8YzE4GMncrZ+4gIgTYYR3Eyhr9o= Name: res/drawable-v11/emoji_category_objects_light.xml SHA1-Digest: dlH2HhMroPwNKuyPK/wa2qVt4us= Name: res/drawable-xhdpi-v4/ic_emoji_recents_normal_dark.png SHA1-Digest: wmITBG3cxEr5qR1vodWt+Zpdf78= Name: res/drawable-mdpi-v4/notify_panel_notification_icon_bg.png SHA1-Digest: cz2cTpSbxUR34pkCMo3M7a+mSXk= Name: res/drawable-xxhdpi-v4/ic_emoji_emoticons_normal_dark.png SHA1-Digest: lhZMiOtWUnBWeRzit1Bmdw5KA3A= Name: res/drawable-xhdpi-v4/divet_lower_right_light.png SHA1-Digest: IPMXi0EeD3blOSp6zdpBDLmMWEE= Name: res/drawable-xhdpi-v4/ic_recurrence_bubble_disabled.png SHA1-Digest: pWhbPlICjQK4kqJ4SHeDAGwgsVo= Name: res/drawable-xxhdpi-v4/ic_forum_black_32dp.png SHA1-Digest: Qfv76qYo5Erl/u83Fmx5Xn0Ibzw= Name: res/drawable-v23/abc_control_background_material.xml SHA1-Digest: pzxqKcGy9TVMKjKlYEXVvvN4i/Q= Name: res/drawable-hdpi-v4/ic_backspace_grey600_24dp.png SHA1-Digest: Hu8/khhYfWT5MFNQFFr6RHFMxkM= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_679 SHA1-Digest: 6/VdOl5YznGBEI9ms/gjN2EAmLM= Name: res/drawable-hdpi-v4/notification_bg_normal_pressed.9.png SHA1-Digest: 4j+L3Jzr2U70TU9dUenWhtYe/lU= Name: res/layout/time_zone_filter_item.xml SHA1-Digest: 28+6W1yXeXu6XFfaCFQdzrQ1Kv4= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_676 SHA1-Digest: 1XvAC59RhdvXt568Lp9q68Lo95M= Name: res/drawable/conversation_list_divider_shape.xml SHA1-Digest: zlApN9XJCVuXQ1We2otYrGYB9eg= Name: res/drawable-xxxhdpi-v4/abc_btn_check_to_on_mtrl_000.png SHA1-Digest: 4yQp5RGqcPJVhL3STB21W1r3uqI= Name: res/layout/select_dialog_singlechoice_material.xml SHA1-Digest: PmLkdr92f9FO1MAZiEy9sa3O7as= Name: res/layout/conversation_fragment.xml SHA1-Digest: imqcO0Qv55NXbDTUsWTLPyp7UIM= Name: res/drawable-xxhdpi-v4/ic_add_white_24dp.png SHA1-Digest: Qku8XatHjewVAawjvYnuiZY4LGU= Name: res/xml/preferences_app_protection.xml SHA1-Digest: 9K48G4lRnTbj45HtueNF62GZyUQ= Name: res/color/abc_primary_text_material_light.xml SHA1-Digest: EIjy4txXpS0l3VDPyUffGzfmq7s= Name: res/drawable-hdpi-v4/ic_circle_fill_white_48dp.png SHA1-Digest: w+y2NMFiofz+FELl4O5Fyv60DS4= Name: res/drawable-xhdpi-v4/ic_visibility_white_24dp.png SHA1-Digest: 2RQxp9VFspE9+RuD0icuTndloG8= Name: res/drawable-v21/conversation_list_item_read_background_dark.xml SHA1-Digest: n/NmqVLIR9zVMMnu7LxltyAUCeU= Name: res/drawable-xhdpi-v4/transfer_controls_background.9.png SHA1-Digest: 8DAsQxUNQf9+eMV1afbdEo/rFik= Name: res/drawable-v11/emoji_category_places_dark.xml SHA1-Digest: 0oWB2rwfMOzZwePPI6yYOKPyde8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZA SHA1-Digest: HWSEptWtloOrttDr/x5o5L1sJLQ= Name: res/drawable-xxhdpi-v4/ic_error_red_24dp.png SHA1-Digest: ijvKMR4e/QoYligG+DTtXzpURlQ= Name: res/drawable-xxhdpi-v4/ic_emoji_objects_normal_light.png SHA1-Digest: jS+19gJTC15KDBNIcerxbQGYb0U= Name: res/drawable-mdpi-v4/switch_thumb_holo_light_v2.9.png SHA1-Digest: 7aafjURul6zc7RhhsHx7QCLPozc= Name: res/drawable-hdpi-v11/icon_cached.png SHA1-Digest: fk0Ia1PUNcHHbOt6goi1SYZxllw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_YE SHA1-Digest: KwySfk0V8V1me0EHaLVWj+r29v4= Name: res/drawable-hdpi-v4/spinner_disabled_holo_light.9.png SHA1-Digest: MGzyk0nLOAXBSKZz0u82JCFSpS8= Name: res/drawable-xhdpi-v4/ic_emoji_nature_normal_light.png SHA1-Digest: 0UxsunD6MZeM52tav+Sx2ggqzMA= Name: res/drawable-mdpi-v4/abc_list_selector_disabled_holo_dark.9.png SHA1-Digest: +bjkZfnp7jH8HvA5wzYQ85O04Ic= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZW SHA1-Digest: zyxT3C3km6FQpGLM6uiQ5SXSmLg= Name: res/drawable/abc_switch_thumb_material.xml SHA1-Digest: sujPDGksEdg29cR87ymiy/LIS08= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_800 SHA1-Digest: VQ7yxCBmjjhBc2h0DHh2WZa6Plk= Name: res/drawable-xxxhdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png SHA1-Digest: eQ8hrqPRD0qhhaJWghhXuxRIxBA= Name: res/drawable/psts_background_tab.xml SHA1-Digest: BcRKjO2FMY1kWhZ9ye4ab7iUMGY= Name: res/drawable-hdpi-v4/ic_emoji_recents_activated_light.png SHA1-Digest: 73TSiB2efL7RgRDQplbPAML1u7g= Name: res/drawable-v21/avd_show_password_1.xml SHA1-Digest: YuYYvVgGf2BDuviigWAZ6CSTUlI= Name: res/layout-v16/transport_selection_list_item.xml SHA1-Digest: mOTmOB34VU47Jv9iJNx/G3jS044= Name: res/drawable-xxhdpi-v4/actionbar_icon_holo_dark.png SHA1-Digest: Jy9cJ/v2OcBZ+s3nT0rWv5iYufo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_808 SHA1-Digest: secXPmyfPmQJi8JgLe+sgOvs3tI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZM SHA1-Digest: IgMlNFS8WlUTmWFHpuatLuUd5L0= Name: res/layout/support_simple_spinner_dropdown_item.xml SHA1-Digest: iR6msV+/uQtXanyZ5kWveK47AO0= Name: org/spongycastle/x509/CertPathReviewerMessages_de.properties SHA1-Digest: 5WleEyCLesz39ayL3AH9lOktT8k= Name: res/drawable-xxhdpi-v4/ic_emoji_emoticons_activated_dark.png SHA1-Digest: YMPNigCFda0HibnB+2s6FAh+vJs= Name: res/drawable-hdpi-v4/icon_dialog.png SHA1-Digest: xu2YVmS2ywmCB69j7trlUUEPuZA= Name: res/drawable-mdpi-v4/ic_message_white.png SHA1-Digest: +w8RRj9KX7dPy/Adp2Qq+CIYA/E= Name: res/drawable-xhdpi-v4/ic_account_box_light.png SHA1-Digest: GhgV+uR3Z73NVnG3DuVxk/uZwcY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_WS SHA1-Digest: +RPU13Dhj2ssunWgDZrzz36ikAM= Name: res/drawable-v21/avd_hide_password_2.xml SHA1-Digest: RLmxslaJgHf4Ik5/GckT8IWoKqo= Name: res/menu/conversation_context.xml SHA1-Digest: 3utfdOyLlXhynowrazANJ8IGV9k= Name: res/color-v11/abc_hint_foreground_material_dark.xml SHA1-Digest: osswxebFdMfNI2xvUWBEke0BY54= Name: res/drawable-xxhdpi-v4/switch_bg_holo_light.9.png SHA1-Digest: ZkARNjiagqJDUodedGobTGvG6LA= Name: res/drawable-xxhdpi-v4/ic_audio_dark.png SHA1-Digest: zLGA7QqW1McCG5nfNBdVMglGmEM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_WF SHA1-Digest: /4S4qTkSykY+gjBJ020xd3Mt47s= Name: res/drawable-hdpi-v4/ic_video_light.png SHA1-Digest: xNkPXqmLwBtYEk4H/G9l6sD2cqk= Name: res/drawable-hdpi-v4/icon_cached.png SHA1-Digest: 9k1/m3HDHo/YBPFsVeGkA3z7Db8= Name: res/drawable-hdpi-v4/spinner_default_holo_light.9.png SHA1-Digest: /GXGxE5W4VqGLNi5sm4OsXq19RM= Name: res/drawable-hdpi-v4/ic_warning_dark.png SHA1-Digest: Wdv5gXdXqtarsNsBQ+zyjPB8zI4= Name: res/drawable-hdpi-v4/ic_unlocked_white_24dp.png SHA1-Digest: UysqWQKotJrYdp1DotaD3nKWT1o= Name: res/drawable-xxxhdpi-v4/ic_dialpad_white_24dp.png SHA1-Digest: 0huv0s6rm8+ETQqEkmQx7pTsSPw= Name: res/drawable-xxhdpi-v19/switch_thumb_pressed_holo_light.9.png SHA1-Digest: c+lEvuW/Yx/kDPuWk7ZqybxGgAA= Name: res/drawable-xxhdpi-v4/ic_emoji_nature_activated_light.png SHA1-Digest: ckvK4anIFUHTqiKLDXqzClObLSw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VI SHA1-Digest: u4QMKOB/UTKCIveQQx53+biWivk= Name: res/drawable-xhdpi-v4/ic_block_grey600_18dp.png SHA1-Digest: GtptkP4aFB4aFPBMWE8AYUYT1nY= Name: res/drawable-hdpi-v4/abc_list_selector_disabled_holo_dark.9.png SHA1-Digest: h7hNXJrcbvKMv9bbGrTrvd0dOgs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VG SHA1-Digest: u1dBl8DX8F6OTi0EIbNghWhH5/g= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VU SHA1-Digest: KluzeeNz90zUA0+WHVXi+IxkBm8= Name: assets/emoji_nature.png SHA1-Digest: UzSuz2fUlzCNe6CCmT2tNzzmzVs= Name: res/layout/expiration_picker_dialog.xml SHA1-Digest: Ba5U1l0bt1uC1+SbaWeaFa/YsxU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VN SHA1-Digest: co90EcVs313xpVAM1YRp/+HUSws= Name: res/drawable-hdpi-v4/ic_info_outline_white_24dp.png SHA1-Digest: XdMSJl8GFez0ez6Va9vW9b2uJio= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_UZ SHA1-Digest: /2xIxtVuHa5w34Wpiam/BcQwVcQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_UY SHA1-Digest: j5zMbXVAStT3gdUhhFL/LiX+uEY= Name: res/drawable-mdpi-v4/ic_emoji_recents_activated_light.png SHA1-Digest: BcL12X6gKFeCTD7rSc8Bn/txkl4= Name: res/drawable-mdpi-v4/ic_select_all_white_24dp.png SHA1-Digest: zvNzeJTvoRsgbjC9gA5khsnmeGc= Name: res/drawable-xhdpi-v4/ic_recurrence_bubble_outline.png SHA1-Digest: jYb94n9lCufbf+hthFfiSg6mnXg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VC SHA1-Digest: fpnjelH1AuqJw51MUNnInElgMt8= Name: res/drawable/abc_edit_text_material.xml SHA1-Digest: Kcap9wHIg3pDdpEtot8/QDSYxXI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VE SHA1-Digest: AJYFVptQOVKp4KU7zHPyPryZAdA= Name: res/layout/abc_action_bar_view_list_nav_layout.xml SHA1-Digest: jJclJPApMmkMg6WFlVS0OdEfW1I= Name: res/drawable-mdpi-v4/ic_visibility_off_white_24dp.png SHA1-Digest: 1Gh902UPnMaEV3xZb0/kZ9QSVOM= Name: res/drawable-xxxhdpi-v4/abc_switch_track_mtrl_alpha.9.png SHA1-Digest: NdBd5wlMLy/yNmcs71lpwiAvUZ8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VA SHA1-Digest: 9w+jf1huzkfR13xYd3N0vtF+wUI= Name: res/drawable-mdpi-v4/ic_emoji_nature_normal_light.png SHA1-Digest: M3ulDINItL0wOUdzkp1rqJOPFaY= Name: res/drawable-xhdpi-v4/divet_lower_right_dark.png SHA1-Digest: T3X3fDMT80ZbJwIEbajnSo8mJmk= Name: res/layout-v17/select_dialog_singlechoice_material.xml SHA1-Digest: 7HHmK3lZ6u8c9GLARn1n4FIoUCI= Name: res/drawable-hdpi-v4/ic_video_dark.png SHA1-Digest: sUzWLFSSc1qNA1S6d7ojj6htC68= Name: res/drawable-hdpi-v4/ic_emoji_flags_activated_dark.png SHA1-Digest: gIY9sjCgyZyEH3Q+xIqsz4CoLwg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_UG SHA1-Digest: gFH9T88Py82w/RocQ9Xc31cbmaY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_US SHA1-Digest: il/0ep0wuUDP0jDa0kSCoBvRkYU= Name: res/drawable-xhdpi-v4/ic_brightness_6_black.png SHA1-Digest: yFd3XDUwyUxk/5hkue5her15z08= Name: res/color/abc_tint_btn_checkable.xml SHA1-Digest: SGaPZV/IujUxg59cUi+b3Ps6gSw= Name: res/drawable-xhdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.p ng SHA1-Digest: mEMOENu6EbIk3bOPlINzieiI52k= Name: res/drawable/share_list_divider_shape_dark.xml SHA1-Digest: 1wABzykpOZCe9blX2Jp1W/nfCUU= Name: res/drawable-hdpi-v4/notification_bg_normal.9.png SHA1-Digest: ralFi/xjLzZzimSmlAGCFAUgfbE= Name: res/drawable-mdpi-v4/ic_textsms_grey_32dp.png SHA1-Digest: UoW15gUaJg10ilF5zDll1OlPmAM= Name: res/drawable-hdpi-v4/ic_arrow_forward_light.png SHA1-Digest: NeO4gGycsp3aj8v/zJa1Ps1Ze0E= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US SHA1-Digest: FguG/1bNC+VKBtliTjtv4mk2mDA= Name: res/drawable/abc_btn_default_mtrl_shape.xml SHA1-Digest: si9J2ga8fSgrnHUBNteE65S6TvA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UY SHA1-Digest: dgPt8YWiUyFD5V1kDUlLFSEvOMY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UZ SHA1-Digest: ETmSkp/kr3ETy3FpjTMB3cNQkw8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_UA SHA1-Digest: c1urxUE1X8cOZb134l7CWkhP3rs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TV SHA1-Digest: 8jbXaS3Q9+lFdBxmy8Jf/Aw+L6M= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TW SHA1-Digest: Bx0363s82M2yDQ3/PXBkPKxOgxQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TT SHA1-Digest: usJn33qlB78Wm+Mnsb/pbOTDXl8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TZ SHA1-Digest: H6C/AEzFuZvOMBs4onnHSvp6VPE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC SHA1-Digest: PnZ6nbbRHEsEanMMdu6SeYQM+BE= Name: res/layout/verify_identity_activity.xml SHA1-Digest: 04YjTi+jpVoDQz1sjtEvgEy3XY0= Name: res/drawable-xxhdpi-v4/ic_visibility_grey600_24dp.png SHA1-Digest: UB/rxIB0gqxdEkFZnuG+Zi980EE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VA SHA1-Digest: 188Mly82P5UZg8PYFx4iFxy3hT8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TO SHA1-Digest: tm7R7FWwpZtQ8KfvtEedQHM2T/E= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG SHA1-Digest: UEROpdLmPPQdfd2uh9LGAcZs6Ho= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TN SHA1-Digest: i+pSpgdAHP1DEjGT5VAN0AB1FOQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TM SHA1-Digest: FKj05/S7SD0OGcmSf0Mnij28XzE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VE SHA1-Digest: 8tLlMmLIeS/VyFiohcvxYRN6g6Y= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TL SHA1-Digest: qk3P3aaSNAAZ7hcLrQQC9wLj7NU= Name: res/drawable-hdpi-v4/ic_menu_lock_dark.png SHA1-Digest: CSK9tQSV9EYPt8YQiRV20zlDKuI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TR SHA1-Digest: 4V4Zri42zI2GNSlL754ohVozew8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI SHA1-Digest: /Y4YNwaXJvPLPCGT6sKZ5skh5Wg= Name: res/drawable-sw600dp-mdpi-v13/ic_backspace_normal_dark.png SHA1-Digest: 3pdkXG0U9+VaN4jTez3qBgj9kd8= Name: res/anim/abc_slide_in_bottom.xml SHA1-Digest: ZliTihZ+8kHBA4SfvPIPI00Y7uE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TG SHA1-Digest: +EJqYx+4+2fV4jy8BXB8Ju6AF4s= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VN SHA1-Digest: ylwSFPDIGFBoDIZlkwEFVw15oJU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TD SHA1-Digest: Z8NWrFk5XT6IO7pxED6+3r2/6QE= Name: res/drawable-hdpi-v4/check_dark.png SHA1-Digest: JeAdAnO45vwsnB4Vrx6WWJkBvj0= Name: res/drawable/abc_textfield_search_material.xml SHA1-Digest: stH8NpmjaXc5dKXq4DDXvkOo1rI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TJ SHA1-Digest: ern0tUEKpLBiftv9icrLQBezF0w= Name: res/drawable-xxhdpi-v4/ic_lock_light.png SHA1-Digest: SWIn7r4svFznDykxDqMKDwr//Sw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TH SHA1-Digest: GoNQQZa72w2BLHU0jeRG3Evxo3s= Name: res/drawable-mdpi-v4/ic_search_holo_light.png SHA1-Digest: wl3lhUm2ZwGo28/ben0kwjKT8pA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VU SHA1-Digest: mQMFe27fmtRuUsiRy5e1Hz7kgtk= Name: res/drawable-v21/abc_ratingbar_material.xml SHA1-Digest: rf6f8HRUlLAVKAAEFPxwQP5tJB4= Name: res/drawable-mdpi-v4/textfield_activated_holo_light.9.png SHA1-Digest: CSfVZiTZ8M4gHRjhPdVvKlLuXxE= Name: res/layout/alert_view.xml SHA1-Digest: mDZtD4RPbsWmJmNgpKT/bBjKPKU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TC SHA1-Digest: Rj4tCkFDmTE77Y5vsRjSPFdSo2E= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ST SHA1-Digest: yxKmWo/k7slOiHCEWI4oTCfO44Y= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SV SHA1-Digest: bhAVs5VJO6Kglb9AhX4ZpmekpWA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SX SHA1-Digest: xFKI+cG3XqRTIbBQBcwbcP4ejOg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SY SHA1-Digest: Wghv1Ip+Ik1tzCY+cIbbwAWJtvs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SZ SHA1-Digest: lDImT3tOekqJXhoHcO1BZTmNuOk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SL SHA1-Digest: ViOHYZ5tA1kKYLU5oxd1T1NX81s= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WF SHA1-Digest: zdHkQyT5NcHZEBl82LwJubdeIdc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SK SHA1-Digest: M0nkF1/dp7V7vVRMuhHC1Snssks= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SN SHA1-Digest: z/kRounLTc36PGhi1pw/lKJJzQk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SM SHA1-Digest: g53opthSVmnaVTV3atuKGOstmQU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SO SHA1-Digest: KSRNHIYQ0e6efkGKn+BGHdipOps= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SR SHA1-Digest: x8dytP/U1NDztnevXJAhcQgGCr0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SD SHA1-Digest: RsphnVUDcjIqd2Me7otSCTAsdYQ= Name: res/drawable-xhdpi-v4/ic_backspace_normal_dark.png SHA1-Digest: vCregZmhcawd3oxjzFAxaKv7+wo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SC SHA1-Digest: ATdljVBVkg0xyx1vlI+QYxVog/4= Name: res/drawable-xhdpi-v4/ic_check_dark_disabled.png SHA1-Digest: c9TvWCMataZvt30VdBp4tsgJl0A= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SE SHA1-Digest: wuMCC1cOCIxrb0gnIyBjA1O1+zY= Name: res/layout/log_submit_activity.xml SHA1-Digest: mFxIQHJrxfWuKHCZZYnmdr10TFg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SH SHA1-Digest: yUVejapiW053pX6aCnxUh8O/+RU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SG SHA1-Digest: P+c28dyzrj0X0EGA4zcCv4ZsodE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SJ SHA1-Digest: k/yiXJ4fBf9vcV81YwAK6HOIoG0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SI SHA1-Digest: CLN6AT7hAYgHQkrp7SzCH70HYDs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WS SHA1-Digest: zQfKFkaBS3JP0SXs2Eb30E7wgB8= Name: res/layout-v11/conversation_activity.xml SHA1-Digest: BfJ0kawRbogOsVpVKpy6Y5h+MQc= Name: res/drawable/notify_panel_notification_icon_bg_tile.xml SHA1-Digest: NA2be1PD5DUBJvxTh1FhUBH7Wrc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SA SHA1-Digest: GWWoAi3+QWo6wXaQ+NnOuGHWu1w= Name: res/drawable-mdpi-v4/ic_emoji_symbols_activated_dark.png SHA1-Digest: vEgl+j5UI83zyi76+l+JT6WMbXw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SB SHA1-Digest: 7fpMXARgPmbr9UOIfYxICiywJyY= Name: res/drawable-hdpi-v4/actionbar_icon_holo_dark.png SHA1-Digest: XHg0D2LrDWJ4gItWJClD9/KdhAs= Name: res/drawable-mdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png SHA1-Digest: wTxntWArKB7sDc4M27U+PpjZhyU= Name: res/drawable-xxhdpi-v4/ic_emoji_emoticons_activated_light.png SHA1-Digest: Gj01Pa4hhcmgA0gbjkiZRER0neI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_RW SHA1-Digest: RCYkwY0tiUMtrESFWp9a3Qducs0= Name: res/drawable-ldrtl-mdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: 4Hw7naTONE1358HTJi9mZTJ9Hto= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_RU SHA1-Digest: NKxP239IZ2RFpqKUpcVtdIPdR/c= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_RS SHA1-Digest: KfCSHnreYc10DXkyoqrQ7g1ohLU= Name: res/drawable-hdpi-v4/ic_recurrence_bubble_outline_disabled.png SHA1-Digest: //jfjpK0x0KAStiBOZcahuYO8/0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_RO SHA1-Digest: fbKj3mr/MPcpJGDcmPL9yaVbqeY= Name: res/drawable-ldrtl-xxhdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: QyrilM6n+5uQi4WyzI0NsxXANtA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_RE SHA1-Digest: VzGjkv2kIMpz6HaR4zDEQS26lWY= Name: res/drawable/abc_seekbar_tick_mark_material.xml SHA1-Digest: DuFih8Np+ruXlGXOIY3g382yoTU= Name: res/drawable-xxhdpi-v4/ic_emoji_flags_activated_light.png SHA1-Digest: tn9CFDbJqK8F8ll57BoZ4uOfPMU= Name: res/drawable-hdpi-v4/ic_textsms_grey_32dp.png SHA1-Digest: +btEygrkMpaWi8H27RKsxcYsIvs= Name: res/drawable-xxhdpi-v4/ic_unarchive_white_24dp.png SHA1-Digest: eGo7lFHOkrFuGtuMSR3rtlw1Dmg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_870 SHA1-Digest: 8o55DYA2mDrb+KQAHdgFwEx/Arw= Name: res/drawable-xhdpi-v4/ic_info_outline_dark.png SHA1-Digest: tfAOSivQsuBXllNPdqLwgnMkSrY= Name: res/drawable-v11/emoji_category_places_light.xml SHA1-Digest: otQWz5hG6GyV0LBHp4D53ScntYw= Name: res/drawable-hdpi-v4/ic_mood_grey600_24dp.png SHA1-Digest: sBjuE8eN8LsP4DgA/qf3R+VQhzU= Name: res/drawable-xxxhdpi-v4/ic_textsms_black_32dp.png SHA1-Digest: 1o7BWFksIfbiMrT6ULWnx4IGuig= Name: res/drawable-xxxhdpi-v4/design_ic_visibility_off.png SHA1-Digest: SkN1UCkcfqENTne0agcrTI4meiM= Name: res/layout/share_fragment.xml SHA1-Digest: Po6b1EYFz5RvkXc9Ej9y6nEYANE= Name: res/drawable-xxhdpi-v4/abc_list_longpressed_holo.9.png SHA1-Digest: VJa6PrhxyIRS2huzDuIN1KH+I2c= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YE SHA1-Digest: mMAXt1ldfwA4jZOEV9L9APY/VS8= Name: res/drawable/abc_ratingbar_indicator_material.xml SHA1-Digest: jSCetwmEsQWxASeYyjO7YhmGUG0= Name: res/drawable-hdpi-v4/ic_keyboard_white_24dp.png SHA1-Digest: Xb8onJKRFqnjUkATX0pzbDFa1xw= Name: res/drawable-xxhdpi-v4/ic_emoji_places_activated_dark.png SHA1-Digest: bK61hZF4A5pJzsGBkjVYsmGMaXw= Name: res/drawable-hdpi-v4/textfield_disabled_focused_holo_light.9.png SHA1-Digest: oGMVOAgFtvWj0p2LugzZWDHKQac= Name: res/layout-v13/message_details_header.xml SHA1-Digest: HgcGcNE7DLdk+RiLkhsvANzr3BA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YT SHA1-Digest: gOFCEJdJx614hIUgV7jJpJFm6+Q= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_878 SHA1-Digest: QviNnJSaWUoKjPaQIgJku4PUjd8= Name: res/drawable-xhdpi-v4/abc_text_select_handle_right_mtrl_light.pn g SHA1-Digest: MoCkoRXaiGThFVhhLr4wDS0VuM4= Name: res/drawable-xxhdpi-v4/textfield_focused_holo_light.9.png SHA1-Digest: yTySMaFvSlprEgpEyEgjuVbWIFM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_QA SHA1-Digest: mvoxqh9r7ANXEXsj08jCnSGDQ3Q= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PA SHA1-Digest: a8JPsP2b17sR1vLRvn4enB0M9cI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_883 SHA1-Digest: 2jum0IhxlGkbzkFJWFxDORTg6fA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_882 SHA1-Digest: 8Z8M+V2ZWW6JbKr8gpgeHmqkkDY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PE SHA1-Digest: LAGQyeqw0vpHmJahDVWjbicRypk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_888 SHA1-Digest: wMskIVvmx3HIcL5J2No10i2A9so= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PF SHA1-Digest: zWX+LROUq7crirPHVUe9wtvIDIk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PG SHA1-Digest: JB7/lwiKpgbnSjQZm0QdpWXgj6c= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RO SHA1-Digest: cRgBwAMis1D0rzYnNZC4yKikBoU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PH SHA1-Digest: VScGE9xLEHaBFBcEx52ltLOhRk0= Name: res/drawable-xhdpi-v4/icon_lock.png SHA1-Digest: CtVbaO3+Fr4E2yF9u45P4U9hUd0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PK SHA1-Digest: xgku4bi2sSKqu/lL62DBCeEoQJc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PL SHA1-Digest: 4xgcJ4W8i4tTJsX+E0X3cM4ubH4= Name: res/drawable-xhdpi-v4/abc_ic_star_black_16dp.png SHA1-Digest: oKK0tOor4SmX4ORpTg/URmuOtes= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PM SHA1-Digest: oN42s58DbAWKwv2QpbH/hma1ZPc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RE SHA1-Digest: SwTsoKIYmEECNmj4+b+e320o1Pc= Name: res/drawable-mdpi-v4/switch_bg_disabled_holo_light.9.png SHA1-Digest: BhD8bo9CPDyMD8yAOdeT+l8P5Jk= Name: res/drawable-hdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.pn g SHA1-Digest: 69Uq0XVEEDCz62q7/piNqhuoD7Q= Name: res/drawable-mdpi-v4/transfer_controls_background.9.png SHA1-Digest: Lvtopp/2tRzPP+kXqYiM9od0lTc= Name: res/layout/abc_expanded_menu_layout.xml SHA1-Digest: W73xs5NSOjkqj0jbh7TZZLI0Wy4= Name: res/layout/conversation_activity.xml SHA1-Digest: usVLHgIKhZH73OT/+CjrNGevW9A= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PR SHA1-Digest: Myj2w+M/4RtwVizSQNUpSsLshXg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PT SHA1-Digest: okeuHjNb06deDvLDcvN4klXUc0M= Name: res/drawable-mdpi-v4/abc_cab_background_top_mtrl_alpha.9.png SHA1-Digest: 6eRtpYyE2B45gWd2aZtCG4kO5FM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PW SHA1-Digest: fS+u0XFqL3+38hIyY0REsvwFj00= Name: res/drawable-hdpi-v4/abc_list_focused_holo.9.png SHA1-Digest: zND8CPcT8wBLOji5D5ZGNvi5kR8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PY SHA1-Digest: jO1LxycY4SzKsCcwo1eY0+FeJ/c= Name: res/layout/emoji_grid_layout.xml SHA1-Digest: agZG8EI3nmW4V9cyw7bheN43nUI= Name: res/drawable-xxxhdpi-v4/abc_btn_radio_to_on_mtrl_015.png SHA1-Digest: goxOqApFWDjSlcueZaQmSCez9dk= Name: res/layout/abc_alert_dialog_button_bar_material.xml SHA1-Digest: tMCjLtUjSJOYwttMnMsOHdX7sD0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_881 SHA1-Digest: yo5YOelCWqWBGVDlVa5WhxmL7w0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SK SHA1-Digest: 96rchRUbtAKU313zQVKgv0N3qKc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SL SHA1-Digest: OgDAr1TOCF/1N58CHLjTy1AgkUE= Name: res/drawable-hdpi-v4/divet_lower_right_light.png SHA1-Digest: HCYIERjn5GsGN9vKk35RvVJZUHk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SI SHA1-Digest: UZr7IlrTal2j3ipUJUod8x4qlyU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SJ SHA1-Digest: s4yyxk3g7P1pRuFzCSqGcpUjWQw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO SHA1-Digest: htGLLtSOMKfLL12h6HYrkSiOMBg= Name: res/layout/abc_dialog_title_material.xml SHA1-Digest: zsuhiCNtRRoeFekZBUtVN9Jqp+4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SM SHA1-Digest: 5jAvH995sQVqVzNkgspOpG4x4X0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN SHA1-Digest: WcmT7aKYXTBdfV10S6WkAoFTF8s= Name: res/drawable-xxhdpi-v4/ic_backspace_grey600_24dp.png SHA1-Digest: MFcDn5r/1R3v4bm/8x0bsiYx63c= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SC SHA1-Digest: GBrFpRv3u/6flWJZDlVEGJPyd2c= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SD SHA1-Digest: PdfJzWjB3AA3T9ZmdyKDEOn0UKA= Name: res/drawable-mdpi-v4/ic_unlocked_white_24dp.png SHA1-Digest: fK28/63l+5jbANOBm3m+4Aw23Vg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SA SHA1-Digest: 9BRv6ebxRlIr8BZ1K6mNexyiC3Y= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB SHA1-Digest: /4etoF1Zt2u/o5Z3umH/uXMSgz0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_OM SHA1-Digest: vAkieqUxYKf3YpstJSNeh0032jM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG SHA1-Digest: mrfe+RBUPqsrkjZMbEyO74CjSj4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SH SHA1-Digest: vOkdQKnNRrHoNV+Lg0zZ1yKf9vk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE SHA1-Digest: Z3aCo77hrh8r6KT4LHNMlVnynVM= Name: res/menu/conversation_send_drafts.xml SHA1-Digest: W+zYo2fXJG9Iv9FGkh4kEs/ZDr0= Name: res/drawable-hdpi-v4/ic_attach_grey600_24dp.png SHA1-Digest: DdR+W+yXTJheJrPCfVkH5Q07zPs= Name: res/drawable-xhdpi-v4/ic_emoji_people_normal_light.png SHA1-Digest: 96nNbN5E9bGPhAPE6ftBOob9vko= Name: res/drawable/emoji_category_flags_dark.xml SHA1-Digest: sG+4lQ00+HnzttTFyWXu9NBIhIM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RS SHA1-Digest: qj7G7obtB3uLg0HNuY55tuQ4pn4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RW SHA1-Digest: ckJDwl/jED6zpIyf8ryWBsmgmP4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RU SHA1-Digest: nq/Wsss67yMGaSyobPLEJymIgA0= Name: res/drawable-ldrtl-hdpi-v17/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: h4G5TeOQ9xufiMtoFfAe3fINBds= Name: res/drawable-xxhdpi-v4/abc_scrubber_control_off_mtrl_alpha.png SHA1-Digest: rciAiTdJ+MRPTsG/UvNRmHGoqCA= Name: res/drawable-hdpi-v4/ic_app_protection_gray.png SHA1-Digest: QZT4aa2VzKHLAWpG+yj0gzMgQvo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TN SHA1-Digest: 9m/xZbONlPmO3PPKO3hPEbuDfdc= Name: res/drawable-hdpi-v4/ic_emoji_symbols_normal_light.png SHA1-Digest: 42oEklSS5CvG46vt+LMSl6l4mak= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NC SHA1-Digest: JC4FZSD4039H7qsAsEJC2S3S244= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TO SHA1-Digest: C6MlgyRSI18XYTMvo6+vckYaoMo= Name: res/drawable-xhdpi-v4/ic_advanced_black.png SHA1-Digest: uQSYijVK8clj+RuEcELsZ8TsiME= Name: res/layout/time_picker_dialog.xml SHA1-Digest: N+RWjCpsTTG7ym9CkToPYzHwKp0= Name: res/drawable-xxhdpi-v4/abc_textfield_activated_mtrl_alpha.9.png SHA1-Digest: TLfjxp5bknlrmh6zJTSYD2AfmTo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NE SHA1-Digest: i8hZpLiSVyG8XQN8jzrbvqeUl8o= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TJ SHA1-Digest: swiu2z3fRHNYbl4wsV2XcRLnfzA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TK SHA1-Digest: p6n9j+WcmOxZEA8DcjPC6VRRHNc= Name: res/drawable-xhdpi-v4/spinner_disabled_holo_light.9.png SHA1-Digest: aSQLWb1sFD+uZE0dSc2Aj/zR7Yc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TL SHA1-Digest: IOWA1qVxhFVmaIGmrJRPW9MR8As= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NA SHA1-Digest: JVMN0Xl5tjxTcRYjj7M77IPmq3M= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TM SHA1-Digest: Cf9uOEFp9k9cjW0i5/8m6IvyvV4= Name: res/drawable-ldrtl-xxxhdpi-v17/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: C5G74tW2JFPwdcl//FtvBsXTaV8= Name: res/drawable-hdpi-v4/spinner_focused_holo_light.9.png SHA1-Digest: 9+5viI+b67liCPiPkELWte9HLXc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TG SHA1-Digest: UKTB8RO8balQn3KQo/P864JvqUU= Name: res/layout-v17/abc_dialog_title_material.xml SHA1-Digest: iX/lOYt3bX1MSKeitXE5EuSqs1g= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NL SHA1-Digest: lu34xxm9iiTDnCLXh2bSbYe3D78= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TH SHA1-Digest: SE95tqoq4j/d5OEOXBKd+RDtwmU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NF SHA1-Digest: FxhGK08kM8R1C1SJmIPRDbCoqOY= Name: res/drawable-xhdpi-v4/ic_group_white_24dp.png SHA1-Digest: mNjS6NAEYUiBqxZlnYyOEXQJeYo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NG SHA1-Digest: GXTV2v89Up62k60iQ4I5ZZfsW08= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC SHA1-Digest: EiZ1/iWaVVkT/vWuBvWPMPFgdvs= Name: res/drawable-mdpi-v4/ic_backspace_disabled_light.png SHA1-Digest: QaXYwpDpZhB56I9vu5guCCaGaGs= Name: res/drawable-xhdpi-v4/notify_panel_notification_icon_bg.png SHA1-Digest: cuJ+cwlm5QO6frAFAjbS9w6zhJ4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TD SHA1-Digest: byTDSRZBh8horEiaTJ6i5MuTNRw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NI SHA1-Digest: TjaggApGQjTxch/XqYR42H2EJu8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NR SHA1-Digest: MXq/gSlluenWT3REsEs/Ys5bEho= Name: res/drawable-hdpi-v4/ic_volume_up_light.png SHA1-Digest: l1of9/Hk1H1JBK5koBRKJtdbI84= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NU SHA1-Digest: 0D89o8jukFMElU/fD/VhWpazuVo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TA SHA1-Digest: jBeCx7ldTJlbk342eoyD8jRc75s= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NO SHA1-Digest: WxvbyTQWvHQ23DxpfMFVgZGtHvI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SZ SHA1-Digest: NlgzjkOHMNtUDcWVPTAeizQV+aU= Name: res/drawable-xhdpi-v4/ic_emoji_people_activated_light.png SHA1-Digest: WF9erMYR4jANtyyTuLRBFAuKK7U= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SY SHA1-Digest: jL7hDYnBAkPTHfPGL3SWk8goqlQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NP SHA1-Digest: r76/zkKxIL4gc8EMCY0Fns2QR+M= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SV SHA1-Digest: f7avWcSx/JD+mKPVftZLKA9cxGc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NZ SHA1-Digest: 0tvCGNL9zKa78qH0f/HLLDBXxlY= Name: res/drawable-hdpi-v4/ic_lock_white_18dp.png SHA1-Digest: ohYcGfFxrJMwPbXE6XVO0gcP4Og= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SX SHA1-Digest: 1H/6pqPRYgFPVKMH3TFVXo2jM7E= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SR SHA1-Digest: dkm5v1snRr7OiqOaivJdmYmtfDM= Name: res/drawable/unread_widget_icon.xml SHA1-Digest: upRvtT06LesYocTJGPRPym344vA= Name: res/animator-v11/scale_with_alpha.xml SHA1-Digest: VL4imnI1LOFLVsR92Vrab3fF2tE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ST SHA1-Digest: WTXJHshgmiUapAxM4/VpRZH7eGY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SS SHA1-Digest: ed35M7DJ80y7wAtWthKtcXIk1TA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MC SHA1-Digest: cewXo/wdkjkeoxZ3Nee5WCBjhBM= Name: res/layout-v16/contact_selection_list_item.xml SHA1-Digest: pw672pQGRm0ISP6So9H2IsvV4Os= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MD SHA1-Digest: PjZy0CCmrLZU9zurTo30dtq9PJE= Name: res/drawable-xxhdpi-v4/ic_done_all_white_18dp.png SHA1-Digest: WkByP6D92j4bv/Pil9XHVM3RC9I= Name: res/color/abc_primary_text_disable_only_material_light.xml SHA1-Digest: ha0iBG12VF3cEliu/mL5oLsMBCg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MA SHA1-Digest: HSq7KlJ2FL4GbiLuFJZfmxCgXAs= Name: res/color/abc_hint_foreground_material_dark.xml SHA1-Digest: a31Xl9T4E/lWYRXr97OgmwLIGjA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MK SHA1-Digest: TfSJmoJW1SDd7cAwuH+xhvJsxSg= Name: res/drawable-v11/psts_background_tab.xml SHA1-Digest: FbO7BYaDOS6zhMZenOjUS0C+WPQ= Name: res/drawable-xxhdpi-v4/ic_emoji_people_activated_dark.png SHA1-Digest: os0Db3dkZuFsgJhCYA+MeGDNp+U= Name: res/drawable-xxhdpi-v4/ic_clear_white_24dp.png SHA1-Digest: GVe8Vwep32bd8xsL229mBmg2h4E= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ML SHA1-Digest: Tv12GdE6DSPyQ2XL6DlImd29teQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG SHA1-Digest: l1cY/LkGWOUk1EV46S2Oq92CSdk= Name: res/drawable-xhdpi-v4/abc_text_select_handle_left_mtrl_dark.png SHA1-Digest: h2tBvFGRUrlGIzFUqIYNFF4jBTY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MG SHA1-Digest: ZXB6A/xVxOOc248T3dx+w9LPvdo= Name: res/drawable-mdpi-v4/ic_emoji_emoticons_normal_dark.png SHA1-Digest: mPusmSVMFzZUGpBQ6E5NCbXkKX4= Name: res/drawable-mdpi-v4/ic_emoji_flags_activated_dark.png SHA1-Digest: 0MDts2HilwKeFl9r2d+WrnJLkSY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MH SHA1-Digest: IM7o6TBXSXYE0m4YjQ5qFh2QvfE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ME SHA1-Digest: N03ucXZJX7VgZU13+GWaFp9QJ4M= Name: res/drawable-xhdpi-v4/ic_recurrence_bubble_fill.png SHA1-Digest: VoWjBShGNU44SXtwuX6t5bpZrDA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MF SHA1-Digest: 2I28lsCM+6tu88L5imP3b+N4Akg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MT SHA1-Digest: jgXDYiiFvCeF1IL7iLa7xZPMFJ8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MS SHA1-Digest: +X9s8U7GGLIx930dv46iPPQ9RrA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UA SHA1-Digest: t8XyhQ0mG1pCgDrQ1WTP4o1XXDI= Name: res/drawable-mdpi-v4/ic_group_grey600_24dp.png SHA1-Digest: aOL5qnoByZku+HzkTSlk11T7mWc= Name: res/drawable-xhdpi-v4/ic_save_white_24dp.png SHA1-Digest: 8mGf7Srmi+NaZnKZAZkX3jXJ4So= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MR SHA1-Digest: 4KdW7dYa6hIGvRWo1G5wDIwKSck= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MQ SHA1-Digest: MMRiuGVFqGxrV3dhvq2tye4CkuI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MP SHA1-Digest: ptf0bsMqULADeNlyO51oVJTynG4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MO SHA1-Digest: FOYt2nEEtrR4/3HVwVB6aSP/geU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MN SHA1-Digest: yPX7lx3cgbs8QuzsMJTxMS4j1O8= Name: res/drawable-xxhdpi-v4/ic_play_circle_fill_white_48dp.png SHA1-Digest: IKqNYGcSk58VM0AkhuBDY0am2YQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MM SHA1-Digest: OxIrWtC1QUxDT8JP+DmwrZIcCng= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TZ SHA1-Digest: 5W4ZJ6v7YvgqqIfI6EBozDRT/Ps= Name: res/drawable-xxhdpi-v4/ic_launch_white_24dp.png SHA1-Digest: WHTfhx19GRttt2NJzH4Y+XpE3nw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MZ SHA1-Digest: g3vFBJfNKd63I/WPalb0sCUYSqE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TW SHA1-Digest: Xjoo6t2HPHTH/BLNDymne073Kx0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MY SHA1-Digest: 6NMgbrEYk15vm9xI/1t/FMVIeMU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TV SHA1-Digest: 4wfvZKkRc1ykZm4kLF+zvygZZ7w= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MX SHA1-Digest: NRlLbBAuUn5RBX4zGlqVirmVCU4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MW SHA1-Digest: exAFvjs2eMnAs+pA3nWPuHOe+xw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT SHA1-Digest: iA2IpMDlGcuoM/RMHSCToK/Q38E= Name: res/drawable-hdpi-v4/ic_emoji_places_normal_dark.png SHA1-Digest: AFAumMkPg+T4P2fCg2JVJUOts8o= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MV SHA1-Digest: ZRa3kW4VGFC4ZKIpNPUHE7OUaRE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MU SHA1-Digest: oMn6DlkeuN1C8Joa/Df0HKwRzPQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TR SHA1-Digest: wRUY3MGMXlbw5WXu6s7J0zhc/TI= Name: res/drawable-xxhdpi-v4/ic_message_white.png SHA1-Digest: ifsACHNPhAVlm79oZ7iM/zm4PzQ= Name: res/drawable-xxhdpi-v4/abc_text_select_handle_middle_mtrl_dark.p ng SHA1-Digest: RFU8ebcpWdq1WfG1+5m0rjD3S0w= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LI SHA1-Digest: upsn6OwcOJdwVT+HHz74l+yPv4s= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NA SHA1-Digest: yEv2FgyaJAh8pGKhbvYhDfunkks= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LK SHA1-Digest: ZTGLfQsAjJEcrrmEHACGgSd3KMM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC SHA1-Digest: ajH2DipKBiYyMX/FrrpauY8LLrI= Name: res/drawable-xxxhdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png SHA1-Digest: 1/FXt00E0Mr8GUWNIDQCnUx9Qzc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NE SHA1-Digest: MySQZ5vZlIUKnfLXrQZXNJoNIFs= Name: res/drawable-mdpi-v4/check.png SHA1-Digest: jLC9/pGW+MYKcYNm2cxfJyllBVw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NG SHA1-Digest: Ejow+MuVgMnqqTPxvAJj8R/A254= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NF SHA1-Digest: OzvlR7fb7B4Cf+9Vk1zB/Yvxklc= Name: res/drawable-xxhdpi-v4/ic_recurrence_bubble_disabled.png SHA1-Digest: AV124HmknqvKyuUa/XYpjYLNqWc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LA SHA1-Digest: +OruRafiU57DRrxr/n3KMrKj3hU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NI SHA1-Digest: 3qyBNkHn0Gxh5NLv2pwLIbYpX9I= Name: res/drawable-mdpi-v4/abc_ic_star_half_black_16dp.png SHA1-Digest: LJhGIJ9ykH+SLTXwcnjoa1J97NE= Name: res/drawable-xhdpi-v4/ic_emoji_places_normal_light.png SHA1-Digest: YdZBCdKUNvOCrHQPwpzS0SIBgkQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LC SHA1-Digest: iiefFy3QmJIunB0DJ4DZfN6kvqA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LB SHA1-Digest: 1m0loiBMdY+emkN7eXEHbyfmgs8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LT SHA1-Digest: V1MnmtbPimo2ZrgI0uRK6L89FnM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MK SHA1-Digest: 1eF19PNyJ5as96s7rAVHDhEIE+8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LU SHA1-Digest: S6OsLuJRpTkIBjcrif9UqPjRL2A= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ML SHA1-Digest: SbNPMzF0o5Uz6plQ6ImJScbYw1c= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LV SHA1-Digest: B0orY0nNVdXs9+BHvDXpUCNKVnY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM SHA1-Digest: iqsvsg2e8NJO+cklT7YhOnepdX4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN SHA1-Digest: HgDuGVsZnQIrDj7HXWzsphvMxmU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MO SHA1-Digest: QJZXuiEWqdELKMqe8ZnsYKnki8Y= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LY SHA1-Digest: YltnLOUAyxdkzgJrwyjA2Od9FR0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP SHA1-Digest: zuEoWjXXHq4k2e5ja4pff4JoqHY= Name: res/drawable-mdpi-v4/ic_add_white_24dp.png SHA1-Digest: I6nQAaco1kzjbUS2FmJgI9sBFho= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MQ SHA1-Digest: 1GLz8hrqzsqLYKmVsx/76btejd0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MR SHA1-Digest: WLAbOuMp+0HQ5Endm6t4yonH1qc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS SHA1-Digest: uX4fVmMZ3f2BUUnYj7fIUssjE00= Name: res/drawable-xxhdpi-v4/ic_emoji_objects_normal_dark.png SHA1-Digest: JrXda+th5R9MfiCHfKZ174i1EFQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MT SHA1-Digest: puOfc4sATHCx2nrvay4JOuCYQbk= Name: res/drawable-xhdpi-v4/ic_app_protection_black.png SHA1-Digest: uApXkGW/FNT5k85RAUVhvMUtkXM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MU SHA1-Digest: zgs7t+DTo9IGr0J0AB10nZBo2w4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MV SHA1-Digest: WgbGdYHl3liXNyzSZrbaqzkgVuk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MW SHA1-Digest: /wIDxZ0YosDclUPBpYboB4pxUKc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX SHA1-Digest: +V2jO/Iwq2Ry3N6vmWCu86o69Qo= Name: res/drawable-mdpi-v4/ic_account_box_dark.png SHA1-Digest: 7wNRrjFr2m0teMaRg5GFeCkt2zA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LR SHA1-Digest: WsgB1nPq8MA0Fsjq4rXxFvPAoOg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY SHA1-Digest: aGkIDYkB8dtrYBTnrE3py4Ya2Ro= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LS SHA1-Digest: DgoKQf4lCEL2mtX2ILBwo5e+DIw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MZ SHA1-Digest: EF/iKcMSSP05GvwFeGiDWTJvSh4= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_27 SHA1-Digest: nEYbSuXRF/uctKuasoKct6HqEFw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KE SHA1-Digest: R8PMF1UnkmPg66U/bCgAxl7YAQw= Name: res/drawable-xhdpi-v4/ic_volume_up_dark.png SHA1-Digest: VWl14rkcGJkHVrs2Iays0IdaRCo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KI SHA1-Digest: NbWr5OoxAViKj6R9PpsQLAnuvhI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KH SHA1-Digest: JfUEQWocrRtdPojYHgAGuzgtaYo= Name: res/drawable-xhdpi-v4/ic_volume_off_grey600_18dp.png SHA1-Digest: OQ5o37s135Z/Q1vz8UrbG88saXM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KG SHA1-Digest: qLKWcgQFJeoF5MBnzwkRCHCv83Y= Name: res/drawable/error_round.xml SHA1-Digest: /dc/CUQ2SFAXgoplWG74eEB36w0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NO SHA1-Digest: P1ydPzbNWCbra5/uii8q0hUx11E= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NL SHA1-Digest: jVTgjUlKXg6pjCp7LSIdROs0nJo= Name: res/drawable-xxxhdpi-v4/ic_pause_circle_fill_white_48dp.png SHA1-Digest: w5Ny1a0SNHu2RQtcfJwZoIXwl8o= Name: res/drawable-xhdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png SHA1-Digest: cG04d50tDB7eX3k8GXpvzf7ad6k= Name: res/drawable-xxhdpi-v4/switch_thumb_activated_holo_light.9.png SHA1-Digest: ra2//DL5yVUdjqqYTHr5wqVGdsU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KY SHA1-Digest: WJwe/k4JIc+T7ru1w72Un2d2iiU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NR SHA1-Digest: CtGvqiGAGpJTh7ODg5K6dUoL/y4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KZ SHA1-Digest: vtMfhVkSqr1CsD4NJls3aj1ssgY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KW SHA1-Digest: ReXjgTsJAekB6pgiCCmFNQsLHKA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NP SHA1-Digest: SdqHxcI16hFW1MFy515vwgT0olY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KM SHA1-Digest: 9HWdF77s8JEJFAC0dRThzQWVOUM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KN SHA1-Digest: andVqitx2nhGkwF4cBN14hnAmQk= Name: res/layout/conversation_item_header.xml SHA1-Digest: ZkV0210AY1aJ0OshuVCgO+Qbg/8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NU SHA1-Digest: xj1ph7v07RxQ3Tx2c3eOubdaMLA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ SHA1-Digest: Ozd8CQ8+nyIZ5WyoKRg6yDIoDiI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KR SHA1-Digest: EJJcyRP2SDc63SRFLttTQKyHNc4= Name: res/drawable-mdpi-v4/abc_list_pressed_holo_light.9.png SHA1-Digest: tbKOWkoq8X/O9SqZLE2Z7VwIrfw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KP SHA1-Digest: bhqbTHunDfw7sHn2SrjQVfu0PFA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PE SHA1-Digest: vwjUPkmb3Z0JzHcZGbMAShRmI/c= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_JE SHA1-Digest: YxhA1PAO+zoMV5FiRGs7g0JgEVM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA SHA1-Digest: aaskHG26vfikuQOobVbjvJkXjdg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PK SHA1-Digest: MeQ66zU6Noe05cqb545eOOeFCKQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PM SHA1-Digest: P0jxl/qu/pvOk9oI/jqIkgFqS1Y= Name: res/drawable-xxhdpi-v4/ic_brightness_6_black.png SHA1-Digest: HpV77ISECGzV/+AHPI9elXVuCCU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PL SHA1-Digest: RJMdCvEXRiO7/ljLTqvqswKVoJI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG SHA1-Digest: LrQt5BB84Fms4OSuqo+aIscuzu4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PF SHA1-Digest: PUgWb0bhPQJFK9TJz6w6O1yTBIk= Name: res/drawable-xxhdpi-v4/ic_menu_search_holo_dark.png SHA1-Digest: 7/js6D+0bH1CxZklb/lHp9DnMGM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PH SHA1-Digest: je6mi+Yrig7wXaLZn99A1PpJXSU= Name: res/layout/abc_action_mode_bar.xml SHA1-Digest: H4FVEEhXPLP8buIJgatyzFrcvRE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_OM SHA1-Digest: klpn7S0WXsLenwC+5Iv4T2EM96U= Name: res/drawable-mdpi-v4/ic_circle_fill_white_48dp.png SHA1-Digest: ByK3gPD5yBtDvvqNOkOYzLN0U/4= Name: res/drawable-xxhdpi-v4/ic_brightness_6_gray.png SHA1-Digest: g9LDQa/2MUHF9144p9nuITN+iIo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_JO SHA1-Digest: SalZsp+RivjFelAg5FqpqMSHQ8M= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_JP SHA1-Digest: tjjCc4vBol1u+/hPlcnD9SlEyVc= Name: res/layout-v16/reminder_header.xml SHA1-Digest: BVckKRBJ305iYV1tAQ4J+xG4TcY= Name: res/anim/abc_fade_out.xml SHA1-Digest: MTJWZc22b5LNeBboqBhxcQh5xHQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_JM SHA1-Digest: McBJ3SsWfVTtf3/GJheNxSPbz2k= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IE SHA1-Digest: DI0aTS9fd+KtRjmTLx69Y3zTbaY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ID SHA1-Digest: el6L9YnWqX/HKc+NRxogSB0HzTs= Name: res/color/date_picker_year_selector.xml SHA1-Digest: LzGQSVdgDN4IuJWDz3uu9BOEfUs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_QA SHA1-Digest: gtnWevKmSm5udS052naVPA6xKhU= Name: res/drawable-xhdpi-v4/abc_list_pressed_holo_dark.9.png SHA1-Digest: WYYEXP9zXPHmkO70T8BA20aSj+U= Name: res/drawable-xhdpi-v19/switch_thumb_pressed_holo_light.9.png SHA1-Digest: 58f1EtXQ3wizMEJeTAgSgdZA5uA= Name: res/drawable-hdpi-v4/textfield_default_holo_light.9.png SHA1-Digest: fuY+WIlRJ8vgPwAzkl65YeJKVPo= Name: res/drawable-hdpi-v4/abc_list_selector_disabled_holo_light.9.png SHA1-Digest: BLQq1kPx0/JPxPxgp/MrxD6Ft1Q= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PT SHA1-Digest: /+jUg/fouhfWRr7QzkSlo/IQzjw= Name: res/drawable-mdpi-v4/ic_arrow_forward_dark.png SHA1-Digest: Dqyapq29+35To/xRxC+rxA9W2EM= Name: res/drawable-xhdpi-v4/ic_movie_creation_light.png SHA1-Digest: 5UU364nngw+I67lX3Wcaowdt+3g= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR SHA1-Digest: 7tnKmhKxP4lB+vx/VQ51lUA5Jl4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PS SHA1-Digest: phT+B6EkG0No5vWvOPJ550m13Bo= Name: res/animator-v11/upper_play_to_pause_animation.xml SHA1-Digest: pZ/KDmklLAhatNYLhss0HJP7bTI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IS SHA1-Digest: mTi+12JtOB/zIiarrK5U9SUG4ak= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IT SHA1-Digest: DvDU4JvSM/nExB4aABnCWuQr6co= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IQ SHA1-Digest: 6YJ6ozeNHqkSMFUYmEhXIvK0m/g= Name: res/drawable-xxhdpi-v4/icon.png SHA1-Digest: 0sRkUHHzVMQ90JPNC0VwdWFolPI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IR SHA1-Digest: n5sVB/BGiajK80KhghNVuu9FjTA= Name: res/layout/led_pattern_dialog.xml SHA1-Digest: Nu+KLZK1X/hgyrUT74E4LQ/xobE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IM SHA1-Digest: de6FVs0hfHzqCly5fmgVB4fM7zE= Name: res/drawable-xhdpi-v4/ic_save_all_white_24dp.png SHA1-Digest: DUh+gIlKJ/TTmuo0wHQAdR8IDeI= Name: res/layout-v16/fragment_submit_log.xml SHA1-Digest: fvFOUfp94WtgcKMVWy3hQkjX1BI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IN SHA1-Digest: 1b8VJJvfWSnyWygPcDExgAaYvuE= Name: res/drawable-mdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png SHA1-Digest: bjw5Qfj9OrAUagjyW3bicEthmg4= Name: res/drawable-mdpi-v4/switch_thumb_activated_holo_light.9.png SHA1-Digest: bnXBtaKF7a29jCEvIOWErkhFvv4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IL SHA1-Digest: p3ArTBn8YrJAEa6uQBzmZLCIhdg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PY SHA1-Digest: q3pMKhvhzPQr4o6JVGCRtI0TnBw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PW SHA1-Digest: oi0Rf1UzJ2gCIiry9jU+gwrNMZQ= Name: res/drawable-xhdpi-v4/ic_info_outline_light.png SHA1-Digest: AmfM36X3Zv8Y5Iv3niwqWm5WDNE= Name: res/drawable-xxhdpi-v4/spinner_default_holo_light.9.png SHA1-Digest: Q96rsORloNyw2WFYTUl9VA/zlUc= Name: res/drawable-hdpi-v4/list_selected_holo_light.9.png SHA1-Digest: 8+a6kSVhZ1n87KOe3NWXssOoSRY= Name: res/drawable/emoji_category_nature_light.xml SHA1-Digest: MvM5QlPGIDze+USr4SKXQ0fNc5k= Name: res/layout/expiration_picker_view.xml SHA1-Digest: zUaDCw/P0GnFa/asV/is1AvhoQ8= Name: res/color/abc_tint_seek_thumb.xml SHA1-Digest: N2+i8rVRimGZ58YjFfsmpqK0a2E= Name: res/drawable-mdpi-v4/ic_backspace_grey600_24dp.png SHA1-Digest: kHO0u80/vSCZSg5rvlhGl1iLd2o= Name: res/drawable-hdpi-v4/abc_switch_track_mtrl_alpha.9.png SHA1-Digest: +BAInzzGimhbNKEsUcg4H+12pT0= Name: res/drawable-mdpi-v4/ic_emoji_symbols_normal_dark.png SHA1-Digest: qUB0gCvTkMWF6nHa9ax6itaPdqo= Name: res/anim/design_fab_in.xml SHA1-Digest: 88HYAVsN9aX1xNbLpWMveab3t7w= Name: res/drawable-mdpi-v4/ic_group_white_24dp.png SHA1-Digest: 511LdJ4GYPViD/6dAXj345vG/CY= Name: res/layout/abc_select_dialog_material.xml SHA1-Digest: tjRrCY0x5FoakZqHn3Ut1ZwIeFg= Name: res/layout-v11/notification_media_cancel_action.xml SHA1-Digest: FOKQ0fSwhQySQM6fclToJK+8huE= Name: res/drawable-hdpi-v4/ic_photo_camera_dark.png SHA1-Digest: u2nmahIYst9Z9v2lZ8kLW6X2To4= Name: res/color/recurrence_bubble_text_color.xml SHA1-Digest: LTrVdygP++avEBn7g5W4u7gN8/E= Name: res/drawable-hdpi-v4/ic_emoji_nature_activated_light.png SHA1-Digest: m+ldTqupAssUp/UvEkLj7iQ2osU= Name: res/drawable-hdpi-v4/textfield_activated_holo_light.9.png SHA1-Digest: bLHdUYUynLqsA32+N3F3BJ4EBHQ= Name: res/drawable-xhdpi-v4/switch_bg_holo_light.9.png SHA1-Digest: c+JwYiQCZPeynR8o/HjhfKjOc5g= Name: res/drawable-mdpi-v4/ic_lock_light.png SHA1-Digest: 08GskiiL2N7wF6jvODez4muPFNM= Name: assets/emoji_objects.png SHA1-Digest: EJCaAiWW33tUKJXv05D8xPp76zg= Name: res/drawable-xxhdpi-v4/abc_btn_radio_to_on_mtrl_000.png SHA1-Digest: +TY+I9fpZ38ftBWokyGPSIm59vQ= Name: res/layout/prompt_apn_activity.xml SHA1-Digest: CE8wnVZpaH6HPreItOyvd4STXwY= Name: res/drawable-hdpi-v4/ic_backspace_normal_dark.png SHA1-Digest: RwnuEGaHEztETyRi3umBZWHFTa0= Name: res/drawable-hdpi-v4/ic_emoji_objects_normal_light.png SHA1-Digest: PymWawe+nCbCtsSNOqtgwB3mIrs= Name: res/drawable-ldrtl-xxhdpi-v17/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: EW/WpNliEy+bQjDuiw+U1mX+yZk= Name: res/drawable-sw600dp-hdpi-v13/ic_backspace_disabled_light.png SHA1-Digest: RXmFGZr/Q0yvb7b872P8mGxd43Y= Name: assets/databases/apns.db SHA1-Digest: k6v+TN+cEVpPY0fC67VxFAVib38= Name: res/drawable-mdpi-v4/ic_photo_camera_light.png SHA1-Digest: WmiuSqmKFwE30U0LyMZxLH6BHsk= Name: res/layout/abc_search_view.xml SHA1-Digest: uvwsNoxNUjygjCCYkA9pnNpeJBQ= Name: res/drawable-hdpi-v4/ic_mood_white_24dp.png SHA1-Digest: uZNTsuQbAcrQLA+3xkTKaiOfX/M= Name: res/drawable-xhdpi-v4/ic_dialpad_white_24dp.png SHA1-Digest: mf5EtIftpkW/aAUGgvq5+CpN4JU= Name: res/drawable/blocked_indicator_background.xml SHA1-Digest: 1cWpsxVvS7coD0mOw3AbNatyz4I= Name: res/drawable/emoji_category_people_dark.xml SHA1-Digest: JWHxgdaJ5JIkkd00fQZEJAuJ8KY= Name: res/menu/media_overview.xml SHA1-Digest: lGduXSTm2MsdaEXPVkIlmCSzaa0= Name: res/drawable/list_selector_background_transition_holo_light.xml SHA1-Digest: d7FKlK9pScIw5O7f2CyRR9A91ko= Name: res/drawable-xxhdpi-v4/check.png SHA1-Digest: Cmlk6I4eMSx7Q1CnDR14+OGaGPc= Name: res/drawable-xxxhdpi-v4/ic_done_all_white_18dp.png SHA1-Digest: EVUOZ2QD0IMZA6mmJGnrvlwa7JU= Name: res/layout/import_export_activity.xml SHA1-Digest: eGZy6IF9v9OwCuU3RKROtX3PKMk= Name: res/drawable-mdpi-v4/ic_send_insecure_white_24dp.png SHA1-Digest: uKfZvmTIoTHVB+7pm+rP2+aTzek= Name: res/drawable-mdpi-v4/ic_launch_white_24dp.png SHA1-Digest: S5Taz5tU0amDaTCujYqnyRXr0iE= Name: res/drawable-xhdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: 5ThZFP/+iYVybD8ENFXZKyOzbaU= Name: res/drawable-xhdpi-v4/abc_popup_background_mtrl_mult.9.png SHA1-Digest: hjf9hvwtitJD8jRTc+L89zr4i1I= Name: res/drawable-xhdpi-v4/ic_textsms_grey_32dp.png SHA1-Digest: eZ389TICT2Hx+4lFASo82m7q/To= Name: res/layout/keyboard_text.xml SHA1-Digest: X3CNem6m9YL2iEnh8nZ1eJqnf38= Name: res/drawable-mdpi-v4/ic_forum_grey_32dp.png SHA1-Digest: 1FE//0VushWlCtrkrHNhGxNasyQ= Name: res/layout-v17/conversation_fragment.xml SHA1-Digest: IE7276GxKT7mkymeigejeQnuzc4= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_7 SHA1-Digest: ++F/BtCrUwz7P52Agrem1zBo7MI= Name: res/drawable/recurrence_bubble_fill.xml SHA1-Digest: hY1/dq5DoGqB5nB5bzt/+w0aZyU= Name: res/color/date_picker_selector.xml SHA1-Digest: aG7HwnsPwR4bvTJ0xUC75E7QK58= Name: res/drawable-xhdpi-v4/ic_unlocked_white_24dp.png SHA1-Digest: DG1qDD1yBLURh568diw8VcVqVQo= Name: res/drawable-xxhdpi-v4/switch_thumb_holo_light_v2.9.png SHA1-Digest: U/4Z3gd25jwQChkbsD5VnRLBt4I= Name: res/drawable-xhdpi-v4/textfield_activated_holo_light.9.png SHA1-Digest: If3Wai5q4G/7HwWXms7HMa+ezus= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_350 SHA1-Digest: 1dsh1jmlpctbk3mLLs20rDvMeHw= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_352 SHA1-Digest: wG8Amf2IUehX/g5l0F2/BDWC8XM= Name: res/drawable-xhdpi-v4/ic_mood_grey600_24dp.png SHA1-Digest: 8QptmIlGZy7I1PKYMYOAZkDxgUE= Name: res/drawable-xxhdpi-v4/ic_emoji_places_normal_light.png SHA1-Digest: ubA1ifimUPU7FvNe9Y28BXF3CnQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_351 SHA1-Digest: Mms7D5naQaHUlKhoBn+xBnme4nc= Name: res/layout/conversation_list_item_action.xml SHA1-Digest: daYMlc9s7/cMUHhdCnx2cD09hyk= Name: res/drawable-xhdpi-v4/abc_text_select_handle_right_mtrl_dark.png SHA1-Digest: GuKSrhMJG9+hk/tPX2xPNfs4cy0= Name: res/layout/abc_list_menu_item_icon.xml SHA1-Digest: dYFR+O7lTgJC28aXyfVTftOMwDM= Name: res/drawable-hdpi-v4/sms_selection_icon.png SHA1-Digest: gE90TmnrTARplW4NtpJw2qVXyUk= Name: res/drawable-xxxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_000 .png SHA1-Digest: WvHioMVsEnLk1hJoq6dqHvhFfjA= Name: res/drawable-hdpi-v4/ic_group_grey600_24dp.png SHA1-Digest: sLpgDX3ee/IC25YhvXQob4uLC+g= Name: res/layout/calendar_date_picker_done_button.xml SHA1-Digest: bjM9GoPLqr2UNSSwFri6bBp8tqQ= Name: res/animator-v11/bottom_play_to_pause_animation.xml SHA1-Digest: Dk5obpJ/mFs1fbROjx3K+Ox8YD8= Name: res/drawable/ic_check_dark.xml SHA1-Digest: Euauk3jOzmS98uKm55WarBWhabo= Name: res/drawable-hdpi-v4/abc_text_select_handle_right_mtrl_dark.png SHA1-Digest: OW+ZULMA0miOKqqKj1wk15SSUFQ= Name: res/menu/log_submit.xml SHA1-Digest: 76Vnv4QcUVKXSl0gg59C0Rd9uoM= Name: res/menu/local_identity.xml SHA1-Digest: 1Igdxj3Es0r2GRwRynPPb8aRm1c= Name: res/drawable-mdpi-v4/abc_switch_track_mtrl_alpha.9.png SHA1-Digest: Goj79xYi41d5Ug2oovkSjYvLbAI= Name: res/layout/notification_action.xml SHA1-Digest: p77JXXmQEVckcqQPCcH8E9U7U3A= Name: res/drawable-xhdpi-v4/ic_badge_24dp.png SHA1-Digest: VTflLV+eXJF3SNTJBgsDTECh3AQ= Name: res/drawable-mdpi-v4/ic_emoji_nature_activated_dark.png SHA1-Digest: 4z8a9EycWLfIskhOsuaE8ly5eGo= Name: res/drawable/abc_tab_indicator_material.xml SHA1-Digest: V5veQwsCSGKsSBtGwB7BwIrrJ60= Name: res/drawable-hdpi-v4/ic_visibility_off_white_24dp.png SHA1-Digest: L2bADlHYbxejSKrQRh8xy6jOpm4= Name: res/drawable-xxhdpi-v4/abc_ic_star_half_black_16dp.png SHA1-Digest: EikVyBT5I7pmbJO2k8qF0V5hUc0= Name: res/drawable-xxhdpi-v4/ic_menu_lock_dark.png SHA1-Digest: HeM57qf+HkgH2w82F9rhzcFaSAI= Name: res/drawable-hdpi-v4/ic_message_black.png SHA1-Digest: 1w1ZbYb9IYNUxrU6KYFv/cpJMOE= Name: res/drawable-xhdpi-v4/sms_system_import_icon.png SHA1-Digest: ZxK90q7NEeyiA975EInN3SVAWdw= Name: res/color/text_color_secondary_dark_theme.xml SHA1-Digest: /pIH3XKbeThCFtR3AA7odk9oTC8= Name: res/drawable-mdpi-v4/ic_backspace_disabled_dark.png SHA1-Digest: QaXYwpDpZhB56I9vu5guCCaGaGs= Name: res/drawable-xxhdpi-v4/ic_lock_white_18dp.png SHA1-Digest: mt+MLl4ovdCkwj5ODFADROHfYXo= Name: res/drawable-mdpi-v4/abc_text_select_handle_right_mtrl_dark.png SHA1-Digest: 3J5pByYkZRz7TetQA7yaxvDvbrk= Name: res/layout/conversation_list_item_view.xml SHA1-Digest: 1Tpe43FDO1n6OSssoTLv6Rujchc= Name: META-INF/fdroidserverid SHA1-Digest: eArdeofjDLFxhFSbY0KAExcnRyQ= Name: res/drawable-xhdpi-v4/ic_group_grey600_24dp.png SHA1-Digest: cQ3e+0WiSITUilDzqhqCx/SmoJs= Name: res/drawable-mdpi-v4/list_selected_holo_light.9.png SHA1-Digest: w5jMjyx0n/lk3stiPGrcn7tdZT8= Name: res/drawable-xhdpi-v4/ic_refresh_white_24dp.png SHA1-Digest: VEEQILLOaC8KvtWmsJXu6AZz7q8= Name: res/layout/recurrencepicker.xml SHA1-Digest: cfNI4ZOUVd/QfbE5btsMAce/tHQ= Name: res/layout/radial_time_header_label.xml SHA1-Digest: 2IhYl35qRfn0aNwyv+P1GQUzF7w= Name: res/drawable-xxhdpi-v4/ic_group_grey600_24dp.png SHA1-Digest: Gzl3NBzq/iWJZdiC/zradMbSGYg= Name: res/drawable-v11/notification_bg_low.xml SHA1-Digest: n50NqNrh6NbUKmlGUwKW8waz9vU= Name: res/drawable-mdpi-v4/ic_emoji_emoticons_activated_dark.png SHA1-Digest: NA97YXwuQ1VQZ1b/kEGPfZhJnNc= Name: res/drawable-mdpi-v4/icon.png SHA1-Digest: xu2YVmS2ywmCB69j7trlUUEPuZA= Name: res/drawable-xxhdpi-v4/ic_missing_thumbnail_picture.png SHA1-Digest: y3Qmv2nY0uJc7MmuC5wwRdz220M= Name: res/layout-v17/notification_action_tombstone.xml SHA1-Digest: cOFSV5YQLr/BPiQJMZ3saC3Izp4= Name: res/drawable-mdpi-v4/ic_done_white_18dp.png SHA1-Digest: 2//esNudzLsyh9QlV4QqRHT6pZ0= Name: res/drawable-xhdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png SHA1-Digest: zLtLDGOiJ207WrTCsWah2jkG/84= Name: res/anim/abc_grow_fade_in_from_bottom.xml SHA1-Digest: iPapUKcPYcYoPV86U6jl9kw3Fqs= Name: res/drawable-mdpi-v4/abc_ic_star_black_16dp.png SHA1-Digest: h+GglN330bwjpagOTZFJ9KD8WhY= Name: res/drawable-mdpi-v4/ic_dialpad_white_24dp.png SHA1-Digest: ABD2pMqLWCZLuHxZaVMj35V4Bso= Name: res/drawable-xhdpi-v4/ic_emoji_nature_activated_dark.png SHA1-Digest: rwWlw8HY4PvcbCCcoxgW6kK04jw= Name: res/drawable-mdpi-v4/notification_bg_low_pressed.9.png SHA1-Digest: 58BeVrWmam0XTYtOcBJSh3YmiJQ= Name: res/layout/recurrencepicker_end_text.xml SHA1-Digest: TfPK46sRHEpgf8yaeWam2P7+6h8= Name: res/drawable-xxxhdpi-v4/abc_ic_star_half_black_16dp.png SHA1-Digest: zI176QlarHgsgLRcKJcYZrGV9ps= Name: res/drawable-xxhdpi-v4/ic_block_grey600_18dp.png SHA1-Digest: cPrydB8hKnVN+ija1M9dgeR/VoY= Name: res/layout/abc_action_menu_layout.xml SHA1-Digest: 9YbU6gGH268YUOBguR6iFw8Xklo= Name: res/layout/media_overview_item.xml SHA1-Digest: +vnGfFeH2gFoDqICFunaz6Nuzx0= Name: res/layout-v13/recipient_preference_activity.xml SHA1-Digest: yRYJX9Fp1liMV4/6SBZ9JlXTNX0= Name: res/drawable-mdpi-v4/ic_recurrence_bubble_disabled.png SHA1-Digest: lp9Fl1+WLFGu3BQ3x6KZ3rUqbKw= Name: res/drawable-hdpi-v4/ic_movie_creation_dark.png SHA1-Digest: w57zBCafgVTMCLb/6J4mA1eBIHY= Name: res/anim/animation_toggle_out.xml SHA1-Digest: lBabkCAcL5u2zNS3a/RsxhDIuzE= Name: res/drawable-v21/abc_ratingbar_small_material.xml SHA1-Digest: BADt3Ef1toHfWLOP4cHWQg7zFsc= Name: res/drawable-hdpi-v4/abc_popup_background_mtrl_mult.9.png SHA1-Digest: z7zwna5/785Ly8ahNPOE2jNcEWg= Name: res/drawable-hdpi-v4/ic_emoji_places_activated_dark.png SHA1-Digest: 6lNSCADnZXco1ErOluea0LkWr2c= Name: res/drawable-xhdpi-v4/ic_backspace_grey600_24dp.png SHA1-Digest: zT1tz927tsPpiZ4x9tnekYh1pYc= Name: res/drawable-mdpi-v4/icon_cached.png SHA1-Digest: E5s+IkWDT8zUJdhvw49Vecl69Ds= Name: res/drawable-xxxhdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png SHA1-Digest: byuQvpWXS6brcdPpZzFwfkUGtWE= Name: res/drawable-mdpi-v4/divet_lower_right_light.png SHA1-Digest: dVHWgbpUqmiTu74KqlXFHHK/HiY= Name: res/layout/notification_template_icon_group.xml SHA1-Digest: uwaozoCL3Hme6S9S4jOXDpzdq5w= Name: res/drawable-xxhdpi-v4/ic_unarchive_white_36dp.png SHA1-Digest: IGZU+/25RvCbEyw7fg0ljVrRAGo= Name: res/layout/create_passphrase_activity.xml SHA1-Digest: 1LcmpE+4bLpJVyZvjo8vmyegEtM= Name: res/layout/calendar_date_picker_selected_date.xml SHA1-Digest: BQsSxFqCxOJIg6yNbdfBIoEO9uI= Name: res/drawable/emoji_category_emoticons_dark.xml SHA1-Digest: Ix5KZgvXSTgzlXU43c2s3+pyEsY= Name: res/drawable-xxhdpi-v4/ic_search_white_24dp.png SHA1-Digest: FpdxvD/qOPm+8mVzPLdARTjpK6E= Name: res/drawable-xxxhdpi-v4/abc_text_select_handle_right_mtrl_light. png SHA1-Digest: svcMy3RUKynkEHwirQYPCICt1tI= Name: res/menu/conversation.xml SHA1-Digest: iLLQmZkpzV1KPOCdUGYwEGWOpnk= Name: res/drawable-hdpi-v4/ic_block_white_18dp.png SHA1-Digest: QuLZSRSztDZXckzz4UjAZ5rRV1s= Name: assets/emoji_flags.png SHA1-Digest: fICcDebwlX2ZuBVzl4Qb4kBjJtY= Name: res/drawable/circle_tintable.xml SHA1-Digest: uZXojKWj3Mr3IJ9rWYmGx8Uw6MU= Name: res/color/abc_btn_colored_text_material.xml SHA1-Digest: uyiMqesjnkKMHVSzHpeGdcPuQsY= Name: res/drawable-xhdpi-v4/ic_attach_white_24dp.png SHA1-Digest: JZt8fzELfe2eKXi40Pwgyd2jyw0= Name: res/drawable/abc_dialog_material_background.xml SHA1-Digest: l0M3oq0dSvqXzuiDjFty5ess9ic= Name: res/layout/custom_default_preference_dialog.xml SHA1-Digest: 3GcmVR89CH5c8qh05Ffh7NhKcfA= Name: res/drawable-mdpi-v4/ic_recurrence_bubble_outline.png SHA1-Digest: TQHo0I5fwPvu3SHVqUMuPIOoJaw= Name: res/layout-v21/conversation_item_received.xml SHA1-Digest: HIRetGvvSXKU5XPgxhskNSeSec0= Name: res/drawable-hdpi-v4/ic_emoji_symbols_normal_dark.png SHA1-Digest: G7kt/oO/hbP2pNf53MmgtuqdnbU= Name: res/drawable-hdpi-v4/ic_emoji_people_activated_light.png SHA1-Digest: t2dfo2ThkYARtjZNn9u2G8CXjB8= Name: res/layout/keyboard_with_header.xml SHA1-Digest: hxtmz6yPxJZHDp12OqBDNqtvOgQ= Name: res/drawable-xxxhdpi-v4/ic_block_white_18dp.png SHA1-Digest: 5EQ7aIb3XyY8Fjd1cuQkMyizC4I= Name: res/layout/change_passphrase_activity.xml SHA1-Digest: rCMfYdVQ9alBHpaScTUx40IwdJs= Name: res/drawable-xhdpi-v4/ic_emoji_objects_activated_light.png SHA1-Digest: 5+04RXB3XrAbO7021edsyE6yG7c= Name: res/layout/abc_action_bar_up_container.xml SHA1-Digest: faAH+9KDnZnEFR0fhQDS7VrWa0Y= Name: res/drawable-xxxhdpi-v4/ic_done_white_18dp.png SHA1-Digest: 8l3TFPsQKj2hmP2YeXQ3KR+gtPk= Name: res/drawable-xhdpi-v4/ic_photo_library_white_24dp.png SHA1-Digest: 5RldmdTo6f301+oQTcpShGs46B8= Name: res/color-v11/abc_background_cache_hint_selector_material_dark.x ml SHA1-Digest: RvuWyz0R/TOa0YMWKY4Z70Jd7r8= Name: res/drawable-mdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: O6eAL2M6qoFDRV9peChQYqmfUZk= Name: res/layout/calendar_year_label_text_view.xml SHA1-Digest: jVFlcGuyELrjMDOA4bV8tm2kNjY= Name: res/drawable-hdpi-v4/ic_menu_remove_holo_light.png SHA1-Digest: vvGlhbwx81tjJ68TE7kzkB1mhAc= Name: res/drawable-xhdpi-v4/ic_delete_black.png SHA1-Digest: 4F1zJN0EKPv1Ry5Rd/xH0rjrmQg= Name: res/drawable-hdpi-v4/dialog_full_holo_light.9.png SHA1-Digest: dqmozINUKSEHguCyttZwEp1fsl4= Name: res/drawable-xxhdpi-v4/ic_group_white_24dp.png SHA1-Digest: /a21dJDB9S9FyDHs6Aab6hecJaQ= Name: res/drawable/contact_photo_background.xml SHA1-Digest: y2aQJR62snrVPJNn7N/Ve0pGy2s= Name: res/menu/conversation_unmuted.xml SHA1-Digest: JdmeZPjIQqeKw6uBcbpoVq8/Gfw= Name: res/layout/design_navigation_item_header.xml SHA1-Digest: lilaB0pjsqwfoOBP7mnR3p5X6wk= Name: res/layout/thumbnail_view.xml SHA1-Digest: Ww5lVhhSx0dnmTL+YYp3soukino= Name: res/drawable-hdpi-v4/switch_thumb_disabled_holo_light.9.png SHA1-Digest: HySzs67maedHt7T5DQ9b62NVMUw= Name: res/drawable/clickable_card_light.xml SHA1-Digest: w0Jeb3917xAK0dUQlFRtbSEwH8Y= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_358 SHA1-Digest: BdiB3G40E33JhpAaQnPmGM6npwk= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_359 SHA1-Digest: OH/iiqVq50dBV79hJSr2rKoXM5E= Name: res/drawable-mdpi-v4/ic_contact_picture.png SHA1-Digest: f/CWwAx2/XBNKaH/xWNCSue+JbI= Name: res/drawable-mdpi-v4/lockscreen_watermark_light.png SHA1-Digest: hEboIczR1JMpRKVdEHPAqTIePyU= Name: res/drawable-xxxhdpi-v4/ic_forum_grey_32dp.png SHA1-Digest: kIm/5xpfgahyfo9uwCOAUTXstM0= Name: res/drawable-mdpi-v4/ic_emoji_objects_activated_dark.png SHA1-Digest: 6OFeB8jbu9XKU8jzS1obcv1CdKE= Name: res/drawable-xxxhdpi-v4/ic_launch_white_24dp.png SHA1-Digest: LZ8InwIvmCpu4chxeQEyVYr7rh0= Name: res/layout-v11/notification_action_tombstone.xml SHA1-Digest: zEJGcu9yp2WqTtWRwec+99ylsWA= Name: res/drawable-mdpi-v4/abc_ic_star_half_black_48dp.png SHA1-Digest: YWbbt9prsOJPwsIvkwmEAQ9AjM4= Name: res/layout/audio_view.xml SHA1-Digest: JIotTJ/k2tG+pTcbuQsDdKpNgWo= Name: assets/emoji_faces.png SHA1-Digest: VF2bbkibGKhCNeUQxTwNIcjghSs= Name: res/animator/upper_pause_to_play_animation.xml SHA1-Digest: 7f8HiUwoTj84cBIvXQhtx6kFMlc= Name: res/drawable-mdpi-v4/ic_delete_gray.png SHA1-Digest: 7f4km9Jklsy/fJDbTkcRwb7F4d8= Name: res/drawable-mdpi-v4/ic_clear_search_holo_light.png SHA1-Digest: 2Zf0PoV8doaC2WrhNE5Z05fH2dE= Name: res/drawable-mdpi-v4/ic_menu_lock_dark.png SHA1-Digest: yfTUaOBEVS1ZrLoUEkV8pHxnHV0= Name: res/layout-v11/color_fragment.xml SHA1-Digest: 52Fed5if7X84XGUAMP7+410Btbs= Name: res/drawable-xxhdpi-v4/ic_emoji_objects_activated_light.png SHA1-Digest: c+SW5rP380Tm+zvHq6ImkjaP7DI= Name: res/drawable-xxhdpi-v4/ic_mood_white_24dp.png SHA1-Digest: riHY4u0a8Z6GyIgR2DKz3gEEGfo= Name: res/drawable-hdpi-v4/ic_pause_circle_fill_white_48dp.png SHA1-Digest: YazZkqaPuAeqe1lYuSzOsj1wqi0= Name: res/drawable-v21/notification_action_background.xml SHA1-Digest: OefACFLLoxfCUiCCPvZ9BpijWCk= Name: res/drawable-xxhdpi-v4/ic_advanced_gray.png SHA1-Digest: aSMd74QblsBULsnEaEbZnl3sAl8= Name: res/drawable-mdpi-v4/ic_send_white_24dp.png SHA1-Digest: +aWOvxd03eljhMg9fBIdSfNDoco= Name: res/drawable-xhdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.p ng SHA1-Digest: I9s6aQ5VyOLrNo4odqSij549Oyo= Name: res/drawable-xhdpi-v4/abc_scrubber_track_mtrl_alpha.9.png SHA1-Digest: MtrqRaF9hHgDajQUiUZsdukbh0o= Name: res/drawable/background_pattern_repeat.xml SHA1-Digest: oB3Wz023ADDvA6nID9pWNGXhWiU= Name: res/drawable-hdpi-v4/abc_btn_radio_to_on_mtrl_000.png SHA1-Digest: cjcTLuyFor2apZdbjPAaXPzqPvQ= Name: assets/emoji_places.png SHA1-Digest: 0Rb7g/OTs83cL8rMbtjEYfViINc= Name: res/drawable-ldrtl-xhdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: gHqcnosKJ3hj1qyF5PECFPe1Z9A= Name: res/drawable-xxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_005. png SHA1-Digest: dOjymfO7tQPa8kQCGNculrdtmzM= Name: res/layout-v16/color_fragment.xml SHA1-Digest: Mzfzd3MJQefL1CEIwFbv6UhXR2I= Name: res/drawable-xxhdpi-v4/ic_dialpad_white_24dp.png SHA1-Digest: Su8I4l5yVy88Y7uvDfk/3fdIj50= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_373 SHA1-Digest: cSjMHtHIeYx8NPtkRndSSBuoZ98= Name: res/drawable-mdpi-v4/quick_shutter_button.png SHA1-Digest: lashP3NtpUje/lLH9xjgiqgMbNE= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_372 SHA1-Digest: JZwfMXoGUZqHYvczzIvFBYzPVG8= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_375 SHA1-Digest: 4gnH58JyJO9ZBj8MNMws2LGhIEM= Name: res/drawable-mdpi-v11/icon_notification.png SHA1-Digest: C47OjRxwbDRPciOXxk0JS2qRlcU= Name: res/drawable-mdpi-v4/ic_emoji_people_activated_dark.png SHA1-Digest: ZXnNJxuCfsVTzdXbqCkIOp+H4EM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_YT SHA1-Digest: Kp+a7sS3r8FClzW/weiHhsk/rbY= Name: res/layout-v17/notification_template_media.xml SHA1-Digest: DHZjW3pohCy/wdP2CCVV5iQTx9Q= Name: res/drawable/abc_ic_menu_overflow_material.xml SHA1-Digest: T3yM+Kxh9T09mLZHmQW9RPND7fg= Name: res/drawable-xhdpi-v4/switch_thumb_holo_light_v2.9.png SHA1-Digest: aHisXBhA4tSuq4zWW5w1PYjuGys= Name: res/layout/badge_widget.xml SHA1-Digest: QuNfx9GPL7dqOMYLuPkvHj6u/Lk= Name: res/menu/conversation_mms_group_options.xml SHA1-Digest: t6sm6riQ4OVOUt6/bYJMIBxocvk= Name: res/drawable-mdpi-v4/spinner_pressed_holo_light.9.png SHA1-Digest: MBDjTotrSL6afNoJE5Mq5I6WF4M= Name: res/layout-v17/contact_selection_list_item.xml SHA1-Digest: XvjB3fgrhO0ZYtrxPxky8sE2F8I= Name: res/drawable-xhdpi-v4/quick_shutter_button.png SHA1-Digest: fyDhU/mxYKJuUKZsVjAw2vtA7IQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_380 SHA1-Digest: ooR6xh/a/iu1b6CXk+RjF7LeHoc= Name: res/drawable-hdpi-v4/transfer_controls_background.9.png SHA1-Digest: Cngz5DtX5FWcrNq0lMnsLWpu6cM= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_381 SHA1-Digest: 2JnA+oMJ+vJKy4hQpTtSxQVpZ5Q= Name: res/drawable-xxhdpi-v4/ic_mood_grey600_24dp.png SHA1-Digest: afcx3F9gYbFkiyEh3lVPqd7Gmrs= Name: res/drawable-xxhdpi-v4/ic_visibility_white_24dp.png SHA1-Digest: aLHPy4IJ/AzCROczGi3BglAXQic= Name: res/drawable-hdpi-v4/list_selected_holo_dark.9.png SHA1-Digest: 8+a6kSVhZ1n87KOe3NWXssOoSRY= Name: res/drawable-mdpi-v4/ic_menu_search_holo_dark.png SHA1-Digest: i7rLOq1hLoqJGhp5uh7S6NwzrcA= Name: res/drawable-xxhdpi-v4/splash_logo.png SHA1-Digest: w3a+ReajC17z1G4L3eNiX796UCg= Name: res/layout-v17/conversation_item_received.xml SHA1-Digest: 9F+nQohquqINGLdm+7zyO0wjbhE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ZA SHA1-Digest: l6ayJ7+8XlOK32bR8BqXKOIluHU= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_385 SHA1-Digest: yPAb2zGtOtW4C/VTuGdD9hVTPww= Name: res/menu/conversation_secure_identity.xml SHA1-Digest: hlasr0H6TiEytX4pgdc5MpJS+50= Name: res/drawable-xhdpi-v4/telephone.png SHA1-Digest: bHI0GUIaPppn5oJV2WmCkAr5QmU= Name: res/drawable-xxxhdpi-v4/ic_send_secure_white_24dp.png SHA1-Digest: 2XgtAH/po7U80GR0olF3IISZvAc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ZW SHA1-Digest: TF8pDJ2t0ffaNHdUQUS53/viWRA= Name: res/drawable-xxxhdpi-v4/abc_btn_radio_to_on_mtrl_000.png SHA1-Digest: ++0JraYcPG1W6gax2v1T4h5rv9E= Name: res/drawable-mdpi-v4/abc_text_select_handle_right_mtrl_light.png SHA1-Digest: VzgmMujgGVTkhZBrXgJyrBpI1fs= Name: res/drawable-xhdpi-v4/ic_action_warning_red.png SHA1-Digest: RNqOcepa5uLUhaWV3eBeiLPKRTU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ZM SHA1-Digest: QQGauyCOvvzlJtOuY+cXkzdP8Yw= Name: res/drawable-xhdpi-v4/spinner_pressed_holo_light.9.png SHA1-Digest: ojrB5ql2Tg5clwEbaxKtvWw90HQ= Name: res/drawable-v21/abc_ratingbar_indicator_material.xml SHA1-Digest: V8JrLj4745FQ4gUvuKziXuLT2Ac= Name: res/drawable/abc_cab_background_internal_bg.xml SHA1-Digest: 9JWJR0qt9ACSmUHvHpdMc/ljSx0= Name: res/layout/conversation_item_pending.xml SHA1-Digest: PhcNt6JpsU2WepdAvkj0BVW1xM0= Name: res/drawable-mdpi-v4/ic_missing_thumbnail_picture.png SHA1-Digest: XWUfuVWZb4/kZPFc6854m1kepb4= Name: res/drawable-ldrtl-xxhdpi-v17/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: LRWlMCeV4/Lq+wNklDndVFmtRHU= Name: res/drawable-xxhdpi-v4/ic_info_outline_white_24dp.png SHA1-Digest: b18yrsun4qvibDp1NgsvoMZd39g= Name: res/layout-v13/select_dialog_multichoice_material.xml SHA1-Digest: pOhCB746ty+lvSY4W2hVCv7xArg= Name: res/drawable-hdpi-v4/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: SaBB1uVR+6oONKiYA0HTOmVsmqE= Name: res/drawable-mdpi-v4/sms_selection_icon.png SHA1-Digest: tfYAWDbYwC0di+Oqim+RMId5cek= Name: res/drawable-xhdpi-v4/ic_recurrence_bubble_outline_disabled.png SHA1-Digest: y4fEeZuG+Rke2Gz6Xhv2jOTGczY= Name: com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsPro to_855 SHA1-Digest: COUdI62w67El5HnnJocGdX/mrQU= Name: res/drawable-mdpi-v4/ic_emoji_objects_normal_dark.png SHA1-Digest: koydshN7yOfVp/2xsZpFIkAiRrc= Name: res/drawable-hdpi-v4/abc_tab_indicator_mtrl_alpha.9.png SHA1-Digest: NJuMq0n7Coq8s/ff6QHhDQhI9uw= Name: res/drawable-xxhdpi-v4/ic_call_white_24dp.png SHA1-Digest: YOBn0pvyMtJk0qZhrPVWznPKOe0= Name: res/drawable/abc_ic_clear_material.xml SHA1-Digest: gdOnugi6ZPBQShxkIF+3BjscX54= Name: res/drawable-mdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.pn g SHA1-Digest: NW/i+ex7+hXHYfPT2kBfhzB79kE= Name: res/layout/conversation_item_received.xml SHA1-Digest: L3CzF+IC1jm/vbprpktsIiUA27w= Name: res/drawable/abc_list_selector_background_transition_holo_dark.x ml SHA1-Digest: LVSNyw7X6tB9DukmioIVl33ZyuQ= Name: res/drawable-xxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_000. png SHA1-Digest: pf8Tt2oAabuOsAiSswddcfLUQAQ= Name: res/drawable/clickable_card_dark.xml SHA1-Digest: +k8fRG9M83+fC5mmjI9+enyV0vA= Name: res/drawable-xxhdpi-v4/ic_emoji_recents_normal_dark.png SHA1-Digest: tL+tUpAwomQZH4cE4PfZgIMuigo= Name: res/drawable-anydpi-v21/design_ic_visibility_off.xml SHA1-Digest: /d9K4kz+PEEXzPkb7nC/4aBqj+0= Name: res/drawable-xhdpi-v4/ic_backspace_normal_light.png SHA1-Digest: uzi80CgbHBu5pNzYbVF2Yy2NQiw= Name: res/drawable-xxxhdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: 99GkU44EvefOaxLCiFW5KAUEIJQ= Name: res/drawable-hdpi-v4/abc_scrubber_control_off_mtrl_alpha.png SHA1-Digest: cjG9sTPDRm4+Q3YgeyRUYPgo2LM= Name: res/drawable-hdpi-v4/ic_textsms_black_32dp.png SHA1-Digest: Azw/NnDiG1+fCiaocBZW4qc2hKw= Name: res/drawable/import_export_item_background_dark.xml SHA1-Digest: Cay1NfYIeYp7e4fwT/HL7+Ka+NU= Name: res/drawable-xxhdpi-v4/abc_btn_radio_to_on_mtrl_015.png SHA1-Digest: uWfk23bm97GtczH2YvAwWP/eNOE= Name: res/drawable-xxxhdpi-v4/ic_send_white_24dp.png SHA1-Digest: EIqLEtxB45GlXiB7jImBE260cHI= Name: res/drawable-hdpi-v4/abc_text_select_handle_left_mtrl_light.png SHA1-Digest: xikdq0MUk/db6+MwsR0wYysb7nE= Name: res/drawable-mdpi-v4/ic_visibility_grey600_24dp.png SHA1-Digest: hCJedNfkCuKLGOyHO4Dmtsk235M= Name: res/drawable-xhdpi-v4/ic_movie_creation_dark.png SHA1-Digest: 0OuGMfK+YEHtaZWw+g+kojXzvZM= Name: res/drawable-sw600dp-xhdpi-v13/ic_backspace_normal_light.png SHA1-Digest: ljntDXrk8zdMFNNY6H71toto4Cg= Name: res/drawable-xxxhdpi-v4/abc_ic_star_black_36dp.png SHA1-Digest: BlslH4QYPV8tPkeyq5iFkcDXUkc= Name: res/drawable-hdpi-v4/ic_emoji_emoticons_activated_dark.png SHA1-Digest: S8Z29WUxXMQ/hrf4fBNB7XWvARY= Name: res/drawable-hdpi-v4/switch_thumb_activated_holo_light.9.png SHA1-Digest: Wh0P8RRSA74oEeBgIjQxEpqcoME= Name: res/drawable-xhdpi-v4/ic_content_copy_light.png SHA1-Digest: gyvhu9zNWykWn0gkokBr2GaJATM= Name: res/menu/conversation_muted.xml SHA1-Digest: cdhiUY6M1BWIDI4/XMRhrZeh2eM= Name: res/layout/country_list_item.xml SHA1-Digest: r1mS7yS/DEnkOyfbMBd3mCVpbQU= Name: res/drawable-hdpi-v4/quick_shutter_button.png SHA1-Digest: 4loawsvoafAyt18yxIOpJkDMH70= Name: res/layout/calendar_date_picker_view_animator.xml SHA1-Digest: JlyCO6wz82o9FYeSpqf9w4/LFZo= Name: res/color/done_text_color_dark.xml SHA1-Digest: khODeLf1rSyXidJV3VHbWGh5Oa8= Name: res/anim/fade_scale_in.xml SHA1-Digest: 7e1v5wyirlR6VHusnyFJ2Hy9Soc= Name: res/layout/three_keys_view_leftright.xml SHA1-Digest: RHH5G6B76hUH7H2XjfBVAiAQsTc= Name: res/drawable-hdpi-v4/notification_bg_low_pressed.9.png SHA1-Digest: NP77wvGcwseigxPz8Z8jideVqXk= Name: res/drawable-hdpi-v4/ic_menu_search_holo_light.png SHA1-Digest: GPxu6w91ETl7Kn08EcY0xbKASd8= Name: res/drawable-hdpi-v4/ic_recurrence_bubble_disabled.png SHA1-Digest: PvUD72ClUaAbmozquBpu1pFkyKY= Name: res/layout/design_bottom_sheet_dialog.xml SHA1-Digest: 71oSkVwEAnepDUSmUMPhds/udqo= Name: res/drawable-xxhdpi-v4/ic_emoji_people_normal_dark.png SHA1-Digest: ud+ge15QS8J3W/STrJS85uBs238= Name: res/drawable-xhdpi-v4/ic_photo_camera_light.png SHA1-Digest: 3+ywo30zk8+MdtiZWpzpq+/7BlY= Name: res/drawable-hdpi-v4/ic_photo_library_white_24dp.png SHA1-Digest: 2i75RHTCQxalHyQuCxhbTGvXLDw= Name: res/layout/abc_action_mode_close_item_material.xml SHA1-Digest: p7Z8mhfVBf1Nhg3/qKSX0VslAmM= Name: res/drawable-xhdpi-v4/ic_content_copy_dark.png SHA1-Digest: iK0hdpe6j6iVLceTUcEAKZ+VojQ= Name: res/drawable-xxhdpi-v4/ic_info_outline_dark.png SHA1-Digest: cV1OJ4EtckNtIGY2CVNr6ShaILE= Name: res/layout/design_layout_tab_icon.xml SHA1-Digest: 1oW2wUEHsS3deIrUBKUEwpNALgo= Name: res/drawable-hdpi-v4/spinner_pressed_holo_light.9.png SHA1-Digest: 2AU1b4tODlUJW7aRFT0bcz4flrA= Name: res/drawable/item_background_holo_light.xml SHA1-Digest: c+jqjsOOYhi5ab58opAJtJuW/2o= Name: res/drawable-mdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png SHA1-Digest: e//ti7f9UjoZyXMyT5IRTahD3PQ= Name: res/layout-v11/notification_template_big_media_narrow_custom.xml SHA1-Digest: 28bYnRdxyh92WbNXnWMZDlFrmx0= Name: res/drawable-xhdpi-v4/ic_backspace_disabled_dark.png SHA1-Digest: zKT/1vK3dByF8W/4TqDRB3P//8o= Name: res/drawable-v21/abc_btn_colored_material.xml SHA1-Digest: D6vZuC+PxnPYmIv2/fsVSWVSDeg= Name: res/drawable-v21/avd_hide_password_1.xml SHA1-Digest: f3wodn8CvdpkUqG9L8W7iM98UWo= Name: res/drawable-xxxhdpi-v4/ic_download_circle_fill_white_48dp.png SHA1-Digest: rdZLJPyOK70xd0ScLhFw8jUd25g= Name: res/drawable-v11/notification_bg.xml SHA1-Digest: sRRnQQd2J5pxUzHVH2hGZOMRE5A= Name: res/layout/notification_template_lines_media.xml SHA1-Digest: gRpGoh3JvVU0naZoFivIKT1wjAU= Name: res/drawable-ldrtl-xhdpi-v4/ic_send_white_24dp.png SHA1-Digest: N3tmZFpLNkuV5PXMXlfNnUZNkik= Name: res/drawable-anydpi-v21/design_ic_visibility.xml SHA1-Digest: LQ29SOIozRk3sm4Wm8ahc0DtkB4= Name: res/drawable-mdpi-v4/ic_refresh_white_24dp.png SHA1-Digest: rq3d2FDk0wb2yFvjHMPb08OL0HQ= Name: res/drawable-mdpi-v4/abc_textfield_default_mtrl_alpha.9.png SHA1-Digest: 6BStYFTiYO5hj6qjB+1tC6u+FNA= Name: res/menu/conversation_callable.xml SHA1-Digest: yODyzMLTh3FhGB8ZM9fxrUuGU9Y= Name: res/drawable/abc_btn_radio_material.xml SHA1-Digest: UTYOeeEsntRapgE5ZWUWf1IlU/I= Name: res/drawable-hdpi-v4/ic_advanced_black.png SHA1-Digest: j0WvmKWY/IQyHO+fKg/eax4naCQ= Name: res/drawable-v11/emoji_category_people_light.xml SHA1-Digest: 2IpjsMfArkEhNams3V6tq7qnmLU= Name: res/drawable-mdpi-v4/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: AfbQuyZF1JMvjiaXDfLvtNLgncI= Name: res/drawable-hdpi-v4/ic_emoji_people_normal_dark.png SHA1-Digest: L5cmEyWgTeqNNbrpoey2AHBT7gU= Name: res/drawable-xxhdpi-v4/abc_tab_indicator_mtrl_alpha.9.png SHA1-Digest: K3ucg8inS6QEpdWRjFnNMV6IIbo= Name: res/layout/keyboard_text_with_header.xml SHA1-Digest: IzS7yKtIO1r409DMFOLheoDoNwY= Name: res/layout/transfer_controls_stub.xml SHA1-Digest: Y7StVJ+2zbCAJ57fSpB7K1nvlzk= Name: res/drawable-xxxhdpi-v4/ic_keyboard_white_24dp.png SHA1-Digest: nJgko2VrulT3uc6mPIRZ1gcYKBA= Name: res/drawable-hdpi-v4/ic_emoji_nature_normal_light.png SHA1-Digest: SnOUa2cZaSzg4+9iObM4wTWeqRU= Name: res/drawable-hdpi-v4/ic_backspace_normal_light.png SHA1-Digest: Gw6S97FzS2pjaWtj1/7b8jgyiM0= Name: res/layout/calendar_date_picker_header_view.xml SHA1-Digest: ZJHpWJQx3nOrifwxdWwhnWt9Ij4= Name: res/drawable-mdpi-v4/design_ic_visibility.png SHA1-Digest: ry2f6USvgI8F8oiXlmsF+qG2Ofk= Name: res/drawable-xhdpi-v4/abc_ic_star_black_36dp.png SHA1-Digest: lP85nXzNzaRJULgljjBQBBKL824= Name: res/drawable-xxhdpi-v4/abc_cab_background_top_mtrl_alpha.9.png SHA1-Digest: QqPpbBwEr9nywoEL/OHp+2+gZ1Q= Name: res/drawable-xhdpi-v4/ic_message_white.png SHA1-Digest: pmfbHY8jJwXAiyCXXeZENrtUfJ0= Name: res/drawable-mdpi-v4/abc_scrubber_control_off_mtrl_alpha.png SHA1-Digest: u6bTvtbDXJXOGa13pLv0kzefZXk= Name: res/drawable-xxhdpi-v4/ic_account_box_dark.png SHA1-Digest: Kde5Ka6vP/QX330y0tfeQ03NFt0= Name: res/drawable-sw600dp-hdpi-v13/ic_backspace_normal_light.png SHA1-Digest: VYqIHgFSG25nuyuYWkjuz086rAw= Name: res/drawable-hdpi-v4/divet_lower_right_dark.png SHA1-Digest: cZK8LP3p9zh+vJsrBfv9xEyglgw= Name: res/layout-v16/centered_app_title.xml SHA1-Digest: QU4uUM9N05Qv1r0QRRaNM3vjjWU= Name: res/menu/conversation_insecure_no_push.xml SHA1-Digest: 2v+W6/w1hci1AkfI3IWmRdpczU4= Name: res/drawable-mdpi-v4/ic_delivery_delivered_dark.png SHA1-Digest: iTc9UFAP+v74rV9lqo0ckhej3xo= Name: res/drawable-mdpi-v4/ic_scroll_down.png SHA1-Digest: z4wu0jUNEFIQtWx0fjaU2W/FdgM= Name: res/drawable/abc_item_background_holo_light.xml SHA1-Digest: fDShwzepkR49aya4UNh+v22s1Nw= Name: res/drawable-hdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png SHA1-Digest: hOoziuoJ3C2IMcfDzYzmL7E6Tm8= Name: res/color-v23/design_tint_password_toggle.xml SHA1-Digest: uKmyWahGcwpgv98l1DYuTUPcE0M= Name: res/drawable-xhdpi-v4/ic_keyboard_grey600_24dp.png SHA1-Digest: ExaemJusROzkcV16BfxxQ5RVADk= Name: res/animator/rotate_minus_90_animation.xml SHA1-Digest: AhVLtjcJdoeXGcim/ix1HCO/gQw= Name: res/drawable-hdpi-v4/ic_image_dark.png SHA1-Digest: 5CpgtH7z5pmAtDFcDQAdEoVRSyI= Name: res/layout/abc_popup_menu_header_item_layout.xml SHA1-Digest: hQmvMCh5RfHl7zd1OpMuh0PLPGw= Name: res/drawable-xhdpi-v4/textfield_disabled_focused_holo_light.9.pn g SHA1-Digest: OzQ1tHx9DB5q6GA0ZRNG3prDizY= Name: res/layout/database_migration_activity.xml SHA1-Digest: lRl5r5FgpGGR0IYNF63kp434o5E= Name: res/drawable-xxhdpi-v4/ic_pause_circle_fill_white_48dp.png SHA1-Digest: zwSDGmPznTm/cIpMuWFcFyy3AoQ= Name: res/drawable-xxhdpi-v4/ic_volume_up_light.png SHA1-Digest: csRV9qrs9LdlC+blM4qWJ/bZ084= Name: res/drawable-xxhdpi-v4/ic_circle_fill_white_48dp.png SHA1-Digest: RkP1QTEHdPEXQRxbqaja1mtzzfM= Name: res/layout-v17/conversation_item_sent.xml SHA1-Digest: vcK4YtVfMAI3ZnJzNASPYGpg+NU= Name: res/drawable/conversation_item_sent_indicator_text_shape.xml SHA1-Digest: 0anovoc7dnbKH7CwxXSarY9R77I= Name: res/drawable-xxhdpi-v11/icon_cached.png SHA1-Digest: 7gqMY0mppZ95zVJqs1O7QkspoKU= Name: res/drawable-xxhdpi-v4/ic_emoji_nature_normal_dark.png SHA1-Digest: oYt3fnDKVOOon6ufg4D6JLWXRVE= Name: res/layout/video_player.xml SHA1-Digest: ZDQfiwr4ntdWq3CAZLvCBrn9kJk= Name: res/drawable-mdpi-v4/ic_backspace_normal_light.png SHA1-Digest: f/vIuRIwVMzSZ0MELZ9If7z5iRo= Name: res/drawable-xhdpi-v4/icon_dialog.png SHA1-Digest: Yh+Y8O4R0FtgT/ZHK8Z9fXjGjt4= Name: res/drawable-hdpi-v4/ic_search_holo_light.png SHA1-Digest: CXK4K35HwsRQt7CQWNgpJgEtiVQ= Name: res/drawable-xxxhdpi-v4/icon_cached.png SHA1-Digest: gYE4PCg53nmPm3HpKbU9KPsaZ/c= Name: res/color/recurrence_spinner_text_color.xml SHA1-Digest: ARJUNp1b2gsqcrhQnVBfZl0+Ju4= Name: res/drawable-hdpi-v4/ic_brightness_6_gray.png SHA1-Digest: mZV2cXTOBFqBXlRculNmSCO/nEE= Name: res/anim/design_bottom_sheet_slide_out.xml SHA1-Digest: b7nLwVuguqkRn/0QJ5T+s+s304Y= Name: res/drawable-hdpi-v4/ic_advanced_gray.png SHA1-Digest: C9XzOo5OgF7UgKYvkW5+yfpLFFg= Name: res/drawable/abc_ratingbar_material.xml SHA1-Digest: eEVopjQX6W514WoHxn9rLKQ1T5Y= Name: res/layout-v21/abc_screen_toolbar.xml SHA1-Digest: RcV/ssluMcZyxZ3e3qgYkW/4t8g= Name: res/drawable-xxxhdpi-v4/ic_photo_camera_dark.png SHA1-Digest: GL3a0e1lkDupBd8bZCOrdky8mkI= Name: res/layout/date_picker_dialog.xml SHA1-Digest: kf9jozXy8TB5Ir5lhzUk0k3zc68= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_979 SHA1-Digest: E3E+5deRAaxq0tS5UKPX42zboOQ= Name: res/drawable/white_radius.xml SHA1-Digest: vJ/dDcwo+MQQr8+spnN4wPHrpBk= Name: res/drawable/abc_item_background_holo_dark.xml SHA1-Digest: EYfXWBiFkD5pE+x4VQkg8UKkBDw= Name: res/drawable-hdpi-v4/sms_system_import_icon.png SHA1-Digest: vQnKq6EGrPMsiJdaJNh1oIOVDbM= Name: res/drawable-hdpi-v4/ic_push_black.png SHA1-Digest: 3hCWsO5iMnvthvKOo/Zm96bBr6o= Name: res/drawable-hdpi-v4/ic_emoji_flags_normal_light.png SHA1-Digest: TDH6Q0QaGikzI8z9SSXhPTBi1Hs= Name: res/drawable-xxhdpi-v4/ic_done_white_18dp.png SHA1-Digest: j3GOdthjoRoNdPhM7w8dsgHjE6c= Name: res/drawable-xhdpi-v4/abc_list_longpressed_holo.9.png SHA1-Digest: C4a5xmVEzcIJxede0Urh0qZwCmg= Name: res/drawable-xhdpi-v4/ic_textsms_black_32dp.png SHA1-Digest: ismobvzTPdV6vsV7EGHyff/PrCo= Name: res/layout-v17/abc_select_dialog_material.xml SHA1-Digest: 5AKNRDRSJeVR3cn3G2cxceFTohA= Name: res/drawable-xxhdpi-v4/ic_send_white_24dp.png SHA1-Digest: /cN5XZc/UmW6olmT4asAzS7+HCU= Name: res/drawable-xhdpi-v4/ic_push_registration_reminder.png SHA1-Digest: 0v5auK5BRQPgV95hW+jycIiPx90= Name: res/layout/conversation_activity_emojidrawer_stub.xml SHA1-Digest: C7rRCyzp/GaaBT0HAenRiFKOMGw= Name: res/drawable-xhdpi-v4/ic_add_white_24dp.png SHA1-Digest: lceszf3MMMnKuCFVNxrT7fq1spQ= Name: res/drawable-xxhdpi-v4/abc_btn_check_to_on_mtrl_015.png SHA1-Digest: 6wmuQsGop94sACxKfh+EBLCBjJk= Name: res/drawable-xhdpi-v4/ic_clear_white_24dp.png SHA1-Digest: wAjFdCV0d9G4jJxdA+JoxAcg0BU= Name: res/drawable-xxxhdpi-v4/ic_photo_library_white_24dp.png SHA1-Digest: b9kOM5Oe6AYJoOZLUwdzoqGLYGk= Name: res/drawable-xhdpi-v4/abc_ic_star_half_black_16dp.png SHA1-Digest: OBELUky/hMRu50hd+fRgMPXT3ZE= Name: res/drawable-xhdpi-v4/notification_bg_normal.9.png SHA1-Digest: URz3Lz/tIjMAtXfNHimWcDQLTtQ= Name: res/drawable-xhdpi-v4/ic_check_normal_light.png SHA1-Digest: /a8tMklC0x/6BC7aK302NKgRm4M= Name: res/drawable-mdpi-v4/ic_archive_white_24dp.png SHA1-Digest: FOgV73Y4E4G9tSQRswWo6d25m20= Name: res/layout/psts_tab.xml SHA1-Digest: ut5zIC2Qke40czbjy2bU3/eq8ck= Name: res/drawable-hdpi-v4/ic_audio_dark.png SHA1-Digest: f6Rzu7MWG7Vifj9C9GNnSY5Dwc4= Name: res/drawable-mdpi-v4/ic_emoji_flags_activated_light.png SHA1-Digest: Sj0prdaB7XusQnjD6qzLYyu2QJk= Name: res/layout-v11/conversation_fragment.xml SHA1-Digest: DETVRgIT8hjcWuLmGreCXRbxsaI= Name: res/drawable-hdpi-v4/ic_app_protection_black.png SHA1-Digest: FeElOKTrm6ulL0IKibHFpLwtmsI= Name: res/drawable-hdpi-v4/ic_select_all_white_24dp.png SHA1-Digest: d3NyUt7zbRSBabWVugl1zyezxss= Name: res/drawable-xxhdpi-v4/ic_photo_library_white_24dp.png SHA1-Digest: XeWgItT/2YbqFUIPlA1XN4QyW+I= Name: res/drawable-mdpi-v4/ic_recurrence_bubble_fill.png SHA1-Digest: w1sX/nC9GYX9TAF4H3snP6yRXj0= Name: res/layout/conversation_item_last_seen.xml SHA1-Digest: Ud6D9VpTZ59BZFWRquIaLsnz0D8= Name: res/drawable-xxhdpi-v4/ic_advanced_black.png SHA1-Digest: JkA/GcL3vD+TSlGZkxf/D9Sm0mY= Name: res/layout/contact_selection_recyclerview_header.xml SHA1-Digest: nA+tCTWyXEXLRp0lp0EY09gGbDc= Name: res/drawable-xxhdpi-v4/ic_recurrence_bubble_fill.png SHA1-Digest: oo/O+veI0wHux5c+1XJNoX0f8NQ= Name: res/drawable-xhdpi-v4/ic_emoji_symbols_activated_dark.png SHA1-Digest: N8kyiU9nC4ZzneSpOUFCNlkqQwY= Name: res/drawable-hdpi-v4/icon_lock.png SHA1-Digest: I8WB2hjjIronAb2gOV1ntPWGdaA= Name: res/menu/conversation_insecure.xml SHA1-Digest: PZm4tXSwpFBpAlY2H1eP9h7sqYI= Name: res/drawable-mdpi-v4/abc_list_longpressed_holo.9.png SHA1-Digest: GFCjouEOsx2zwJ4qrfooYQ63590= Name: res/layout/three_keys_view.xml SHA1-Digest: FoZ7Mjpza1xFL31pZL/tG3LwRfo= Name: res/layout/time_picker_view.xml SHA1-Digest: E4bx99VtN4hLn81lvzqhGD6cGTE= Name: res/drawable-xhdpi-v4/abc_textfield_activated_mtrl_alpha.9.png SHA1-Digest: aGoDqShCvfRBOcYadujzbODhe1U= Name: res/drawable-xxhdpi-v4/abc_popup_background_mtrl_mult.9.png SHA1-Digest: qQpaYoGWL908h/WoyV81hrJSp9E= Name: res/drawable-xxxhdpi-v4/design_ic_visibility.png SHA1-Digest: swt1xCeUHWXTPK1wZL3z/KjE6j8= Name: res/drawable-hdpi-v4/ic_delivery_delivered_dark.png SHA1-Digest: z1qP/XuEMgqH6PCTku4wlQfck1o= Name: res/drawable-xxhdpi-v4/ic_call_split_white_24dp.png SHA1-Digest: EqpL7q/kUISc05zCS8PQE7XlTCo= Name: res/color/abc_secondary_text_material_light.xml SHA1-Digest: UK67RbNJcciw6ZIvqgR+d1ZzWSE= Name: res/drawable-hdpi-v4/ic_emoji_people_activated_dark.png SHA1-Digest: MN/3tZSXfYwUNJd1fpv81P9hsis= Name: classes.dex SHA1-Digest: O3iS5F8Y4yienw64NT3rCkhJlBE= Name: res/layout/abc_screen_content_include.xml SHA1-Digest: 5b3DomolwZfchrtJxjtLR+9TEkg= Name: res/drawable-hdpi-v4/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: HDJoTnQuLh9V9/4kv+/UeX7wGTY= Name: res/drawable-hdpi-v4/switch_bg_focused_holo_light.9.png SHA1-Digest: x7N6bd7BQ9gunVUj5pyMTy+B3f0= Name: res/drawable-xhdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png SHA1-Digest: RnQxBqnfZP2w/UH+bBFTojv2UoA= Name: res/color/abc_hint_foreground_material_light.xml SHA1-Digest: 0zpZ3hXSy13vsrByQvEajGH48kg= Name: res/drawable/switch_thumb.xml SHA1-Digest: lH/mX04uaklEXuqyPbIGAmagtiY= Name: res/drawable-mdpi-v4/abc_list_focused_holo.9.png SHA1-Digest: jJIIxBXFlVwxMesuJlFFhjvLhPM= Name: res/drawable-mdpi-v4/ic_audio_dark.png SHA1-Digest: 80UU4YPrTC24AwJ3eKxpXejAlm0= Name: res/layout/conversation_item_pending_v11.xml SHA1-Digest: ZclvwAPtCg7EQ50Xmb/TCW2DbFg= Name: res/drawable-hdpi-v4/ic_unarchive_white_36dp.png SHA1-Digest: DpzTK5IV9VJGnBL1GQNQdw5E2wA= Name: res/drawable-xxhdpi-v4/ic_photo_camera_light.png SHA1-Digest: TzSNJVWVL3UER7oGqP6Nrb06ic0= Name: res/drawable/done_background_color_dark.xml SHA1-Digest: BQ2YGX7F12dg30GOBpoPMqnBg/w= Name: res/drawable/abc_ic_go_search_api_material.xml SHA1-Digest: 4TOQZYsZfAWYiCOnhZ922D5jaV0= Name: res/drawable-xhdpi-v4/abc_textfield_default_mtrl_alpha.9.png SHA1-Digest: L12XNgC05BSQghB6JCrs8Us9eEo= Name: res/drawable-xxxhdpi-v4/ic_badge_24dp.png SHA1-Digest: /UKTs8syiI+8teKE7JTtgCF7EOA= Name: res/color/switch_thumb_material_light.xml SHA1-Digest: 70Ris1bjtMLy8qA7qzUjHvcpAIM= Name: res/drawable-xxhdpi-v4/ic_push_black.png SHA1-Digest: ygKohbyfFVJgNYP5BVx3Xgx+JGE= Name: res/animator-v11/rotate_minus_90_animation.xml SHA1-Digest: dAr9tiloBMntrmMmfeQ1JW7RJVM= Name: res/drawable-ldrtl-hdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: 3f2Gmy7pGZPASiGf+ZPR/zDMdpY= Name: res/color/dialog_text_color_holo_light.xml SHA1-Digest: ieRybNvbHRyOkglFiMNjqxmgnYM= Name: res/drawable-xxhdpi-v4/icon_dialog.png SHA1-Digest: QhfVY7UBQilNAfrHJXWil0t74RI= Name: res/drawable-xhdpi-v4/ic_menu_lock_dark.png SHA1-Digest: M1g3b4KBhEjHrG1iEhJorzie18A= Name: res/drawable-hdpi-v4/ic_save_white_24dp.png SHA1-Digest: b0MOY6ocByL+BiDj8t/xAuWDXR8= Name: res/drawable-mdpi-v4/ic_check_white_24dp.png SHA1-Digest: 9BpaEBpmmi2X4RbVVZyZWtKre84= Name: res/drawable-mdpi-v4/abc_btn_check_to_on_mtrl_015.png SHA1-Digest: Ub7EVU/MNH+VSjP7k8FYzKJQoQ4= Name: res/drawable-hdpi-v4/abc_text_select_handle_left_mtrl_dark.png SHA1-Digest: Vgi5sEfMVSyu0nd6WWsvBST1nxk= Name: res/drawable-xxhdpi-v4/switch_bg_disabled_holo_light.9.png SHA1-Digest: sPU97/CASp/g7EwfcegGeM9Y8xU= Name: res/drawable/pause_icon.xml SHA1-Digest: OW/HliDYn2yZlppVP1IZ8r4AXXU= Name: res/drawable-hdpi-v4/ic_keyboard_grey600_24dp.png SHA1-Digest: 3+L8uB4iXUHcTlCl0935iz7cQ4M= Name: res/drawable-hdpi-v4/textfield_focused_holo_light.9.png SHA1-Digest: NfEGOtZ0YkueMDHG9onUNJVuHAM= Name: res/drawable-xxhdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png SHA1-Digest: 07+MMsIKk8a3BObx9eEkeKwYSSk= Name: res/drawable/recycler_view_fast_scroller_handle.xml SHA1-Digest: lId/oCzHC4v97KJfaSwHpjh8Vk0= Name: res/drawable-hdpi-v4/ic_movie_creation_light.png SHA1-Digest: P5qoF4VsoxJa2WoiilxTRUxdbog= Name: res/drawable-hdpi-v4/switch_bg_holo_light.9.png SHA1-Digest: CpRZZ1GTLscTpuMbiso8PfUMFTA= Name: res/drawable-v11/emoji_category_flags_light.xml SHA1-Digest: 1HXt+SFCsg1FOzvewAlnVfcPlH4= Name: res/drawable-hdpi-v4/ic_emoji_people_normal_light.png SHA1-Digest: +AYFjg+xkMjZNzI3+A94/vqhwIU= Name: res/drawable-xxhdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png SHA1-Digest: n8TfpaUDWC1ZG/DnCL+kvaeXf08= Name: res/drawable-xhdpi-v4/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: jUXes5sBIdjAuvOfVrnJvHW7r+w= Name: res/drawable-xxhdpi-v4/abc_text_select_handle_right_mtrl_dark.pn g SHA1-Digest: NlLE4WLe09sFAjGcYGx9OeUuyzA= Name: res/drawable-xhdpi-v4/ic_notifications_gray.png SHA1-Digest: yG4IA2zOn2IpgU4LIHOixHbx7uY= Name: res/drawable-hdpi-v4/telephone.png SHA1-Digest: 9nlQS7d+VbUPkr+prirBG+O+A+0= Name: res/layout/number_picker_dialog.xml SHA1-Digest: JoItrFpfK/Jc5Yu89HO7z7riXCc= Name: res/layout/country_selection_fragment.xml SHA1-Digest: 9FP5VBphB5dDjtyb6LGAejYRDDk= Name: res/drawable-mdpi-v4/ic_emoji_symbols_normal_light.png SHA1-Digest: qGIjjOJCf3co0MQfgPXcTido4p4= Name: res/drawable-hdpi-v4/ic_visibility_white_24dp.png SHA1-Digest: AHCpu+6ehOjBI4qi24Mr2j/RW1Y= Name: res/drawable-v21/avd_show_password.xml SHA1-Digest: gmgwezio0n1pD9PKq4pn6tN1Jc4= Name: res/drawable-xxhdpi-v4/spinner_disabled_holo_light.9.png SHA1-Digest: d0C8Ku1iXl9QUHg5si64yzLBZ8c= Name: res/drawable/abc_vector_test.xml SHA1-Digest: 4yJGw44hdFgotEL2tng9U1c82Mw= Name: lib/armeabi-v7a/libcurve25519.so SHA1-Digest: 63TQYdkvchMVuxrOy/mctpYth0A= Name: res/menu/conversation_add_to_contacts.xml SHA1-Digest: e3y0WihLiI7Skf9UpjQDJZj2lZ4= Name: res/drawable-sw600dp-hdpi-v13/ic_backspace_disabled_dark.png SHA1-Digest: RXmFGZr/Q0yvb7b872P8mGxd43Y= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LK SHA1-Digest: ied04vDsq12FV0JH3mOjzh309vk= Name: res/drawable-mdpi-v4/ic_visibility_white_24dp.png SHA1-Digest: RQFCLSBs6hvQvM1NMUC9GGfo9D0= Name: res/anim/design_snackbar_out.xml SHA1-Digest: tSHapqXFI6k7SCynouBmerWDWcs= Name: res/drawable-mdpi-v4/notification_bg_low_normal.9.png SHA1-Digest: sUXBSDmIwrVhXMAYtsmpMAdZsVM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ER SHA1-Digest: gHVjUaO/Hu0WmrCse/bbzvHA5ls= Name: res/drawable-xhdpi-v4/ic_search_holo_light.png SHA1-Digest: 5cIoGeIb35m+WD6Ibj+Q/8h7Wcg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ET SHA1-Digest: wy3NWeNxy5SjTEkOTlENuldOG5A= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ES SHA1-Digest: dcfBeFVvtf1Npmm17B+8Uvjkosw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LS SHA1-Digest: ElIWf9hGKw6kJuiTwqiTZ3kksQ0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LR SHA1-Digest: q3eGR1wYR2wXCuY2G8YztxC4jn8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_EE SHA1-Digest: EOshv+VduBq+yJISeM1Hk888RLQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LU SHA1-Digest: 2u7acAapHAVN0vRyrGF4xeNh09k= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_EH SHA1-Digest: ZuoOUkuf9kckH6tgBjNF4A/j8fo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LT SHA1-Digest: qzz+sgWLOJ7dDgsBjovl+5j2riw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_EG SHA1-Digest: gItwjACHBejWkN4G3O36fFVyl4M= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LV SHA1-Digest: eoVKgGuYjS2A1PhEji8Z9sOrgbU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LY SHA1-Digest: f3DxjbiutCyQ2NsG/LTLXF1yGdQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA SHA1-Digest: dPX2NQ3g/UvM8mPBxbNZcNCpLFw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_EC SHA1-Digest: 48aNA4uEKv1hZhtpAC+tlbTQXl0= Name: res/drawable-xhdpi-v4/abc_btn_radio_to_on_mtrl_015.png SHA1-Digest: IKtTqnzlIY7DpFmknZLDUcK+O3s= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MC SHA1-Digest: B9gwrf7Nj6F+sls86I8wqQvtUMc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MD SHA1-Digest: XRSvQ5ItZQ5tjpcthn2rmzBWZH4= Name: res/layout/notification_template_part_time.xml SHA1-Digest: W/kytmaWkF2VPENQ086DWVdFzxY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ME SHA1-Digest: RUPlibrsFUwsw2sk0+RS7N/VRqU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MF SHA1-Digest: 14IzhxapYTuOFt4ytI/QREZoG7I= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MG SHA1-Digest: ctZKR12DERrux+rZo8vytXNh3HM= Name: res/drawable-mdpi-v4/ic_notifications_gray.png SHA1-Digest: vZPyvQob6QrDKcHbe4kBeLDkvwE= Name: res/drawable-xhdpi-v4/ic_emoji_flags_activated_dark.png SHA1-Digest: m1hXrT9B1hmf35sVuclo7StZqR8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MH SHA1-Digest: I553az/fsFiei61dNsx+OzqhGtc= Name: res/layout/recipient_filter_item.xml SHA1-Digest: QntBBcYW90Shhm0OV1e7vvuiEmM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DZ SHA1-Digest: C5e84TgfTYmCzLZYu6RnqZHKpJU= Name: res/drawable-v11/emoji_category_emoticons_dark.xml SHA1-Digest: Z+gMiNhbCpygIX9WwGge//a90Fk= Name: res/drawable-xxxhdpi-v4/abc_ic_menu_share_mtrl_alpha.png SHA1-Digest: uwiP3ApwLduQ11Jf4UyIGf8WaSw= Name: res/color-v23/abc_tint_seek_thumb.xml SHA1-Digest: AG/P59T5NZ2vW8gLE2LWkUNjTgU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FO SHA1-Digest: I0h6Bg+e8DraPzeqhgG/JXKaHnE= Name: res/layout-v21/notification_template_icon_group.xml SHA1-Digest: BYFxUZkg0OVmcdx0VaV8IdmvCRk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KI SHA1-Digest: W+GYGRWWNO9VfnCGjezr83rTWak= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KP SHA1-Digest: Dt3psUrjHh2RtKdt01bA6NayDkE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN SHA1-Digest: r9TBVsQVlApfJ5PURa5jTDp1mpI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FR SHA1-Digest: F8cEznyv5lL3oxB8ewrVNbte/mo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KM SHA1-Digest: /j3NYmNeTSXEqAeNHPcmktPmmUc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FI SHA1-Digest: cc3FiPRu599RuvLrUYuG4GlLx1Q= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KR SHA1-Digest: eeH6SrlK9fz//fLCAbgMKSPbydk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FM SHA1-Digest: Omg8GHvOmLFlocbs/beeFmigteY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW SHA1-Digest: Wqeif/KPbufIR7wVERzqR8S/pEk= Name: res/drawable-hdpi-v4/ic_emoji_objects_activated_dark.png SHA1-Digest: sEuvrPrbfFpdd0oEeUk/F5l37Oo= Name: res/drawable-mdpi-v4/ic_emoji_emoticons_normal_light.png SHA1-Digest: lcN1FLklx34ce3XjX8MS1ub6nM4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FK SHA1-Digest: virx/gqHIJaAJfMya2FVCsroiUU= Name: res/drawable-mdpi-v4/abc_list_selector_disabled_holo_light.9.png SHA1-Digest: S/+WIalIT7QGoZ4J/VOqr0XEGEM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FJ SHA1-Digest: AsBJQ5cDvtaD8KhVrdd3Ra19G2E= Name: res/drawable/play_to_pause_animation.xml SHA1-Digest: 2QNVZNFxIwLbMV2bdMWWFx3Vg+w= Name: res/drawable-xhdpi-v4/ic_lock_dark.png SHA1-Digest: fsVgKEE74rC9VZ1aUVMiTifFjJk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY SHA1-Digest: LzTiSXlJqas0gcRry8BtI2/+MaY= Name: res/drawable-xxhdpi-v4/ic_emoji_places_activated_light.png SHA1-Digest: UsUkp5uLESbx5uRS/7pqYOE+G+M= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KZ SHA1-Digest: morjXaz7AQrfchuU2D9Ir0hso20= Name: res/anim/design_fab_out.xml SHA1-Digest: eqyMleghgi0F32G8QHJUnftDRAc= Name: res/drawable/button_background_dark.xml SHA1-Digest: vjYs0zd8wTeSSImwhd7SzCMvt3E= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LA SHA1-Digest: +UJCznkxgPXlvPZ8PXSLUW4dEhA= Name: res/drawable/abc_ic_search_api_material.xml SHA1-Digest: q4PW+nQazlvYWeSQX654gGr9+Xs= Name: res/drawable-mdpi-v4/switch_thumb_disabled_holo_light.9.png SHA1-Digest: h+7dgWRgNzZ6qYbj0pMQoC2C4No= Name: res/drawable-xhdpi-v4/ic_emoji_recents_activated_light.png SHA1-Digest: x0Fibi8IbLeU9rHJ/EUy/JhYKNk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB SHA1-Digest: 7R1a00+ERbmvIrFMfqEuy0wz3wk= Name: res/drawable-hdpi-v4/ic_lock_dark.png SHA1-Digest: +7Z4j/1Tp8o3+UaRcS77epplfh8= Name: res/drawable-xhdpi-v4/ic_unarchive_white_36dp.png SHA1-Digest: eGo7lFHOkrFuGtuMSR3rtlw1Dmg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC SHA1-Digest: h+ps4m+jPrjq7rFtDAeC1nt/uow= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LI SHA1-Digest: rRscPukcDPzU3U3WU20X9HVrfr4= Name: res/drawable-xhdpi-v4/list_selector_background_selected.9.png SHA1-Digest: YJ9zp2BVWbYoWuD1G3xXbV47jvM= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GT SHA1-Digest: Q7O6pvuWts4wzfz7X9BaqSmQEvk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM SHA1-Digest: hOwOLqaTBB9z6KLemQDjdI/AtoQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JO SHA1-Digest: hJgqHBzI49lT0ggVsTR444WAG8I= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GU SHA1-Digest: a91JKpt1O+8EofHePL/xFmjB7PY= Name: res/drawable-sw600dp-xhdpi-v13/ic_backspace_normal_dark.png SHA1-Digest: 5a/n2fjexn3yPINUH/kg3IzKacY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GP SHA1-Digest: bUPAJj8YbzQEbkKiMdGWK8DP2ss= Name: res/drawable-v11/emoji_category_emoticons_light.xml SHA1-Digest: /i7VOhZRV82iuUh5suuxPNSMFDk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GR SHA1-Digest: 1QYdEhnohIcjN2HvCq/hkhwp8xs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GL SHA1-Digest: J5wULHohOFx6LVORM7knQZPPflA= Name: res/drawable/emoji_category_nature_dark.xml SHA1-Digest: RzDuk6h6UEkqappk7hYx6pgKeCs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GN SHA1-Digest: eQYUfKvF7PhYDoQymxImO/ArAn0= Name: res/layout/three_keys_view_text.xml SHA1-Digest: OIg+cLCV8JJOTklX8tPoW4VQ4HY= Name: res/layout-v21/conversation_item_sent.xml SHA1-Digest: TgHquxe4uRpHmqvpMejOLH3IlV0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GM SHA1-Digest: UjuisQhgKNNJKc8JgAJaKu4mS/w= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GH SHA1-Digest: PMia4PQmF7C2hXDP2qRmalQI3zk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GG SHA1-Digest: IPL006rKrzjMGsxEybUZLG23+OE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP SHA1-Digest: BPoTPiUdBS8osUrAiRWdZZuoySg= Name: res/drawable-mdpi-v4/ic_warning_light.png SHA1-Digest: gS0bDiXBZr0DgAwFbGO9Meuo6Ac= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GI SHA1-Digest: BCI6mUSq/R5El/YBddOeOzeVfM0= Name: res/xml/recipient_preferences.xml SHA1-Digest: vS+sVmTs0ik5kh0QzdQ8EefqVrY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GD SHA1-Digest: k3WLWwCjTxwsIUUmW47RSNfWotY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GE SHA1-Digest: AzBcU9n0fiP2A5xmAb/kmX/5WzA= Name: res/drawable-xxhdpi-v4/ic_delete_white_24dp.png SHA1-Digest: 1RidNQvRsN6EducCc0vCJzxVfF4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GF SHA1-Digest: YTDZuGscoDkKLscSSteWHNnWqHI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GA SHA1-Digest: 8V+YFYPjobN0sTLs1ourRLCEGqQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GB SHA1-Digest: Zi8bBmLz0rAbi2uaIPYkG4kDdog= Name: res/layout/icon_list_item.xml SHA1-Digest: Xw5UkSRVTEth1VIEgzovEo5YDeE= Name: res/layout-v17/notification_template_big_media.xml SHA1-Digest: 2TZwnbqvpxhRXoY7QCi88ttXexQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE SHA1-Digest: +llMaXL1zpGanoMQz7UFeeeWMw8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG SHA1-Digest: +/TbCrw/xmVGXAb2o1+a5y+DJJM= Name: res/drawable-xxhdpi-v4/ic_keyboard_grey600_24dp.png SHA1-Digest: a+dw9a8QtUZy6yhhDT6KdPGUCjQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH SHA1-Digest: SO0HcKRfd3hRI6Yo8LxVqYbZLt8= Name: res/drawable-xhdpi-v4/ic_video_dark.png SHA1-Digest: zpwM996y3CVQukYGQ0HTHy5f7nE= Name: res/drawable-hdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png SHA1-Digest: cK/LCW7Y07tXQ8e5BdotU64US0I= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN SHA1-Digest: 6Tkee6+4mtYefwjp3ho+GZxPO5U= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IM SHA1-Digest: RDnd0hwdyfVc3N2uBvc6S1HEljs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_HU SHA1-Digest: gBSEvsJoHwDyup3b6joCh5dTRD4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL SHA1-Digest: pw3ZQcOPQ8vekxW1votjWkpLonM= Name: res/drawable-xxxhdpi-v4/abc_ic_star_black_48dp.png SHA1-Digest: lZvYglov/F7rh1bqR+gIZerpDBA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_HT SHA1-Digest: cuqCGTXyf9YWfeIE5CpdBM78H6s= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_HR SHA1-Digest: 4SIa2SzqN4pvQ+MNKxxtFPnDRCM= Name: res/drawable-xhdpi-v4/ic_attach_grey600_24dp.png SHA1-Digest: IJb9OzPEjLFeZBPANRMAm0yZfFQ= Name: res/drawable-xxhdpi-v4/ic_archive_white_24dp.png SHA1-Digest: LnSuw5GveQloQ5Y2p7P9PE/o3co= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_HN SHA1-Digest: 2zlD4M+S4ihEvAOOaCf+xjE7KwM= Name: res/drawable-xhdpi-v4/ic_emoji_flags_normal_dark.png SHA1-Digest: xqJQwPDxU7dGMfeBydeKOClG/wQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT SHA1-Digest: mJyiY2OQxiz0HO3knAD52CKKXhk= Name: res/drawable-mdpi-v4/list_selected_holo_dark.9.png SHA1-Digest: w5jMjyx0n/lk3stiPGrcn7tdZT8= Name: res/drawable-xxhdpi-v4/ic_group_photo.png SHA1-Digest: WmOAx7F3WqRDxpRW/IxtzYnNI1E= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IS SHA1-Digest: M6vwcfKOPCPzXN2Q1LPSSN6xUXE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_HK SHA1-Digest: iMRHAc5pHQG7l2MkKc9Uei8mOdM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR SHA1-Digest: kkS2BgwtVVNMbA8B52AUVR7Vnng= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IQ SHA1-Digest: 9kyvSnJwQPj+ofHG/9nIkccqhGM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IO SHA1-Digest: xS6m1Nd+dX6UHPssnjupk97ZTus= Name: res/layout-v16/notification_template_custom_big.xml SHA1-Digest: bL5ENkTdQZZo4/ewb7jV+FB52C4= Name: res/drawable-xxhdpi-v4/ic_emoji_flags_normal_light.png SHA1-Digest: Ude+n/pbQCHeuTUCYUnBND+DjF0= Name: res/drawable-mdpi-v4/ic_info_outline_white_24dp.png SHA1-Digest: kqlF5XPnBveug9qTLLjXSlZngWM= Name: res/drawable-xhdpi-v4/abc_btn_radio_to_on_mtrl_000.png SHA1-Digest: x44uUsdD5wnS8x1uTf9WTb3Fux4= Name: res/drawable-mdpi-v4/ic_photo_camera_dark.png SHA1-Digest: oc0uQS6Z4xssS7SPSC7hWEzCvBs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE SHA1-Digest: t5AW47nFrcJm9IyeUU/4m1DYf4M= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GY SHA1-Digest: a/xp9RWW4VBQ/NIBRZACsJpM0tU= Name: res/drawable-mdpi-v4/ic_emoji_nature_activated_light.png SHA1-Digest: DIn3M7/XVDB6Gwx/ZHF5eykuZe8= Name: res/drawable-xxhdpi-v4/received_bubble.9.png SHA1-Digest: W4de+5UEqZE2m7rCCt25/Z1CxWI= Name: res/color/abc_btn_colored_borderless_text_material.xml SHA1-Digest: qYYJCxgQ4AbdVk4+vJwfrFQSIRY= Name: res/layout-v11/custom_default_preference_dialog.xml SHA1-Digest: 39iUnvmNYHFHassDu5Sf3avA4oY= Name: res/drawable/last_seen_divider_text_background_dark.xml SHA1-Digest: S9qKuKzACOFXweC2S3e7be8G510= Name: res/drawable-xxhdpi-v4/ic_audio_light.png SHA1-Digest: gQuhd3cXwFTM7eONLXkGFPvxBo8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GW SHA1-Digest: NKZr6PrDrXC1lER+/oi/KN2iUAk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HN SHA1-Digest: VcOLvVS1v9QsxowwQQCxxpLIhqY= Name: res/drawable-xxhdpi-v4/ic_notifications_gray.png SHA1-Digest: +DbmF16Xqsi7KleR/q1ocQU0ZtA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AC SHA1-Digest: RDF732v0m4SrZxaPqGU0AJ1dN5U= Name: res/drawable-mdpi-v4/switch_bg_holo_light.9.png SHA1-Digest: vON82tQz84Bild5sO6RktMAlv6M= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AD SHA1-Digest: IgBzZJ0TkASrgg+U2+YVGyfHP+U= Name: res/animator-v21/design_appbar_state_list_animator.xml SHA1-Digest: ovKSSXvPra3gUPG3Ru+QvqC93jE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR SHA1-Digest: nX+4rIC77R7nsEX+7umr/Tl17F8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AE SHA1-Digest: 8a6VtG0nrivCY7Uj7mEBGCWkyLc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AF SHA1-Digest: 0aCjoUjKRbBLMzMy4iOWMtY/3UA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HT SHA1-Digest: aitUHT8nE8GT2l1vyYrnQ3zN9Vs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AG SHA1-Digest: JyNY1zM/wn6O7nt35NXNo2PiLWI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HU SHA1-Digest: oHUli9tcpI1CfmTWNsCcs79QI8M= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AI SHA1-Digest: 7k5INCLG8OxQ0aRVxy32wZmKGYA= Name: res/drawable-hdpi-v4/ic_forum_grey_32dp.png SHA1-Digest: 99b7emFuCdH3rCFmzZtJOXgOgfs= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AL SHA1-Digest: QPUQhoD1ELWsS8wobUKLSlxREk8= Name: res/drawable-hdpi-v4/ic_emoji_recents_normal_dark.png SHA1-Digest: w7FLJuXEQDUevStvf/lE43WZRtw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AM SHA1-Digest: OZ7TzQAruGmMNKwTbj26HSSJ6Vc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK SHA1-Digest: sK5ygddQOZG1bpMfIn+ufm9Ag1w= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AO SHA1-Digest: t1oxQVcHcuY07YStXuGwlPqCGYU= Name: res/anim/design_snackbar_in.xml SHA1-Digest: QPiYcwJRp7LvVEneHabhK9QbisA= Name: res/drawable-xxhdpi-v4/abc_ic_star_black_16dp.png SHA1-Digest: 1y+vuoD2qUEyG9rLg5RKbDNziXo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ID SHA1-Digest: Jd3efgPU/mTNXdAghUYZp4b8f5I= Name: res/drawable-xxxhdpi-v4/ic_volume_off_grey600_18dp.png SHA1-Digest: m7uBbnMbM7TLl/038beKjjdQEA0= Name: res/drawable-xhdpi-v4/list_selected_holo_dark.9.png SHA1-Digest: H2X9BKxBdFAOYEppP+vczoJ/LCU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IE SHA1-Digest: yaaNbeWiQB+4UJuwYBjQjPCyz8U= Name: res/drawable-mdpi-v4/ic_emoji_objects_normal_light.png SHA1-Digest: wLIAptflMGRuo+tA0kne5MPyyXE= Name: res/drawable-mdpi-v4/ic_delete_white_24dp.png SHA1-Digest: gmSSBMZdMw8pnX1afNOc1o+JtOU= Name: res/drawable/abc_list_selector_holo_dark.xml SHA1-Digest: Zlmbg+JWzYfCIIOn1SxRANlh8xo= Name: res/drawable-xxhdpi-v4/ic_emoji_flags_normal_dark.png SHA1-Digest: 2z1yxZchowADwapp1FtAcalT87Y= Name: res/layout/recipient_preference_activity.xml SHA1-Digest: SqZ38YCPlsAm7mHR1/wNghFPwAk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BD SHA1-Digest: 76430xBKwku/DDx/2v8uzd8bS7o= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GP SHA1-Digest: TjngB6KbYm1dWa1jCgFdircKI8E= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BE SHA1-Digest: 0jMFpYLJRvAFhGwV1m0ywwHV0lk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GM SHA1-Digest: +HMlLkrXHtTaQRYsvMNYwivXw00= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BB SHA1-Digest: D9VdzHgGD84sHE9KzoLlCpHhreI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GN SHA1-Digest: kamMv/kGuT+OF5yKyIcbuiawZhs= Name: res/drawable-hdpi-v4/ic_forum_black_32dp.png SHA1-Digest: e7lhz+eq+Z2xMLdWOzhY5aYbdIU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BH SHA1-Digest: hPCyeOJ0pNXVNokGVbueix33HT0= Name: res/drawable-xxhdpi-v4/abc_spinner_mtrl_am_alpha.9.png SHA1-Digest: kKM7t2gcUV2hJsYu4H6GhDJ44Ww= Name: res/drawable-xxhdpi-v4/ic_volume_up_dark.png SHA1-Digest: jZa17/4Ozx3sEVLWjy+QHrSGkY4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GT SHA1-Digest: A+WBdBc1oxnAo/NSFCb0ckHD/RQ= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BI SHA1-Digest: xARDGdB+3gz2uu+L03V5+Z2OkE4= Name: res/drawable-xxhdpi-v4/ic_emoji_symbols_normal_dark.png SHA1-Digest: OXjkrp9N5O3fEmUz0sZ803HBON0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GQ SHA1-Digest: j0Gr8/C7dKo9jIeBiQdGJzrTQtE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BF SHA1-Digest: 9IL79Qc7LVIwe3TPcfm/dfPBuD0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GR SHA1-Digest: oOxq1iueXRhFaVq694uW+BIWVe0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BG SHA1-Digest: h93q28N4Mq9DJA5stCI4Q6kpV+g= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG SHA1-Digest: JjEfFBdOiGvImFk5qCvUNoJHssg= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BL SHA1-Digest: Bkex4W8Sqdq2QdfPpjxUsyDRFNM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GH SHA1-Digest: tARXirdHO+J7jX1BSZGURMKh2OA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BM SHA1-Digest: 2bavZ8OP6WYO1PZ1yZSdwmBWr1Y= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GE SHA1-Digest: Eh+FuhDuQ/Yud4wARFz7ynlQXCo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BJ SHA1-Digest: wPLMmY7tZ7tohQpByJmXMBMvejg= Name: res/layout/share_activity.xml SHA1-Digest: dP8qtNVpgRnPPMBikAwkuMfaRgg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF SHA1-Digest: cStw3rgI9jNczqdt9+S3QrtFgyI= Name: res/drawable-hdpi-v4/ic_emoji_objects_normal_dark.png SHA1-Digest: K8C77eJjxCDFDD/YP8ZOMO/LNXY= Name: res/drawable-mdpi-v4/ic_volume_up_light.png SHA1-Digest: Nfocgsk1S7B5O3+/qQ28m5g+03k= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GL SHA1-Digest: xZ3Nix5ojbYAdxY1ujOK4kEDn58= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BQ SHA1-Digest: TRZ8RoSzM7Q0Kgy9q3Hkgv0+K44= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GI SHA1-Digest: bYlQ/+Z+fxPyy+M8utdMVtVjzoY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BN SHA1-Digest: zLlsc3Sq+KhTy5q17fahCIHn9as= Name: res/anim/slide_to_right.xml SHA1-Digest: odD3qfm4+8xLhJn/hGAfXAz+aZ4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BO SHA1-Digest: X6dOCKzkWH7pG353qvPi0cJMXZA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AT SHA1-Digest: +VdTbd3yiS56Vvg6mVBbJ1FhevY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AS SHA1-Digest: muvAoKE378p/xfRJMH0gEfWAswY= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AR SHA1-Digest: kfEObuTyU520NYg+cgyCwq8UDRs= Name: res/drawable/conversation_item_header_background.xml SHA1-Digest: ltMtF0mlyQqMyjfRF3u1wqyKwE0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AX SHA1-Digest: GAupldrmLMOJNAPQA4t7C7VELi8= Name: res/drawable-xhdpi-v4/lockscreen_watermark_light.png SHA1-Digest: f3uR83//pKLF+IvoV5IDGhpgv7s= Name: res/layout-v11/conversation_list_fragment.xml SHA1-Digest: IZJNszeAm0+nOf+E3k7rnorK68U= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AW SHA1-Digest: 7GFkN+PCbEzeSH/ZPSdE8zL5duU= Name: res/drawable-xxhdpi-v4/ic_send_secure_white_24dp.png SHA1-Digest: u/jnxcjUv1jpnEqD1E2j2DGRbF8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AU SHA1-Digest: V21thVoVDWhqpziOSHcYeQEyk1c= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GW SHA1-Digest: CHWAyb6wfCRIPi1Awop4y7ydYvI= Name: res/color-v11/abc_background_cache_hint_selector_material_light. xml SHA1-Digest: 5ZLto+P8lE/ONeMwLGzH/8b7W/M= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AZ SHA1-Digest: ipWmzFvGqfH6XuNw5VZtKyqAwB4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU SHA1-Digest: 5QtlxjAkALSyqlnJGY1lW+mI7LA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BA SHA1-Digest: YAwTUUxVNul0kJ3nxEj4W5kCNLY= Name: res/drawable/emoji_category_places_dark.xml SHA1-Digest: i5LwYGeXLGbsZlLUNAlCLX6WES4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GY SHA1-Digest: azgoBqgESOhFdA7ELp8TmWkbU7I= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CG SHA1-Digest: Fd16dLbvXqX1FR9LEkbqGIeaf9w= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CH SHA1-Digest: fMOaGeUlCWnq90pEYA/ZuZW2NVs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR SHA1-Digest: /7QnZpwng/J+7wbQ1ginTBiZcIA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CI SHA1-Digest: cYID8mCsmYzvvINPQg/MCBIwU90= Name: res/drawable-ldrtl-v17/actionbar_icon.xml SHA1-Digest: WB6RqmtbPrs8sxSmdHke+npJQ1o= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CC SHA1-Digest: my7RQj++d4c9gN3M75yW9FNrm+w= Name: res/drawable-hdpi-v4/ic_done_all_white_18dp.png SHA1-Digest: ABt/I1W7stE/LdoJLaF/ETJ8Z6w= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FM SHA1-Digest: 4oKk49pru3DTC0/xf0vXtdZ7G4Q= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CD SHA1-Digest: 8piew6BOYZ7ePRqaXFTnAKldIBM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FO SHA1-Digest: TziXLyMXY8BSKyMMQAZRAIl430k= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CF SHA1-Digest: hTwR8te+utnnm0BHnn/drJVOzEo= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CO SHA1-Digest: SmaJI8a3UWgPKtXiHeEGKrkTjEE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FI SHA1-Digest: YpU9InIafwl6Kqrsi87ubqMhmeA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FJ SHA1-Digest: Ftcg8Hvs6vJdlW/rMvvt69iJHOA= Name: res/drawable-mdpi-v4/notification_bg_normal_pressed.9.png SHA1-Digest: qf8Bo3OrZFOkS8OQT2FTwy3VSA8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FK SHA1-Digest: kPwrJTcCgRX2wiiSa1eMea5NqfU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CR SHA1-Digest: E6naAFEOjj3CJ0mUPOORugQKdEE= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CK SHA1-Digest: kml4SOYEOAu5sGR/zUjd4506DRU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CL SHA1-Digest: PrfrQy19TdrSjMCdtHrMrnnqIkE= Name: res/drawable-xhdpi-v4/ic_scroll_down.png SHA1-Digest: A7EKRwW4d9qW2hy1StqMBeGfI1o= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CM SHA1-Digest: SYiWMVM/V/2IqYg4VHau55jSiKY= Name: res/drawable-mdpi-v4/abc_textfield_activated_mtrl_alpha.9.png SHA1-Digest: tB4B5H9j3pm0Xv62OAovdHEjuyk= Name: res/drawable-xhdpi-v4/sms_selection_icon.png SHA1-Digest: mflBGnUVt525AuRZMG09j3NFODU= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CN SHA1-Digest: dUqHuHf7Stpvt0QwpmZZHFfItbQ= Name: res/drawable-xhdpi-v4/abc_text_select_handle_middle_mtrl_light.p ng SHA1-Digest: NlZeJG8MEHDXkZ6eZeHaVGnlZgM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB SHA1-Digest: 01uILLexEy+Gaa/6Y7/TvemCQYk= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BW SHA1-Digest: qRQhEn6cDXt6ZKKeAE+PSQ0iycY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GA SHA1-Digest: pF1ZsVYuRJaVCRphgj5zuakMsmc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD SHA1-Digest: z1A8dkpowjnXpMPRo+nFYkSvI5o= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BY SHA1-Digest: tCUlGhnAdGtfCKcEek88l4ALykc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BS SHA1-Digest: alk0pqMXOSElqgzMBX6KozHs9ug= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BR SHA1-Digest: bXw6aWE+YUGZ0hRkJClTnAHc9zA= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BT SHA1-Digest: 5SiZZK5G4Udghm6H1TPDNpZuM3I= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CA SHA1-Digest: Mw2o53PEmgbpglkqA2jeQ1IJgD4= Name: res/layout/empty_time_zone_item.xml SHA1-Digest: vLxkGUyywCgJGUGr1vsb7WZ2Aok= Name: res/drawable-xxxhdpi-v4/abc_ic_star_half_black_48dp.png SHA1-Digest: fkHHafZ6woOU+hakgiXNdjO+G0o= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BZ SHA1-Digest: d4VPpUrss071FdbKN8VMevGXHlc= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DJ SHA1-Digest: HQaHW8xAy3Yz5KdkqPT3E8puENM= Name: res/layout/country_selection.xml SHA1-Digest: 6NViX+HrI12AtP7KbHukzq6VRpg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ER SHA1-Digest: VIWqyXMJmfGmvosi7uf7KXdwxzI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DK SHA1-Digest: Rk/OAXR56qkx3Oo99XESs+OZgEc= Name: res/layout/dots_text_view.xml SHA1-Digest: EeO1nY+bgs6bEIMj/kAY4xDXtDw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DE SHA1-Digest: j6+PtQ5zJKxMUthOQpoU+Sme8RM= Name: res/drawable-xhdpi-v4/ic_emoji_emoticons_normal_dark.png SHA1-Digest: p8X6C3UakOOV6tRV4BeH3I8fTJU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EG SHA1-Digest: 9wfl0cn7ADAM7/+q7qEKB4aKgQo= Name: res/drawable-hdpi-v11/icon_notification.png SHA1-Digest: SajadWsZ3+kF/B+gC7uyQs3CDCY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH SHA1-Digest: NN/M4oAPzH1Eoi772T19aLeju1w= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE SHA1-Digest: HBnXt+iOw3G7kWFH7VsdWKmxJeA= Name: res/drawable-sw600dp-mdpi-v13/ic_backspace_normal_light.png SHA1-Digest: NuCSY57nwySQHF+2nuwidTcr6es= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DO SHA1-Digest: 6k22UAvU8Oifxa5XVpXuoHtfSpo= Name: res/drawable-hdpi-v4/design_ic_visibility_off.png SHA1-Digest: 2dNj0DH+9oQlB4Is6vasMfxrlX0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EC SHA1-Digest: lU1nyNP5Uj4EF5Q2612APDHmyvI= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DM SHA1-Digest: YhNRdUggTfghgpC35N3JAdXZA74= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CZ SHA1-Digest: VzVyxxyxyajXeORu8EcbWxk0Is0= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CY SHA1-Digest: qLUXYlJr/JYteTiM+4ackZ7ZiJQ= Name: res/drawable-mdpi-v4/ic_image_light.png SHA1-Digest: Djq+m9hk4G8p+kkpCMVp5JgqZOM= Name: res/drawable-mdpi-v4/received_bubble.9.png SHA1-Digest: Cw0YMXapgMp4/S7dKrcGoiAWX0Y= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CX SHA1-Digest: xPBJVrVPnZQVYrXTN1rqgKgbbEg= Name: res/layout/contact_selection_list_fragment.xml SHA1-Digest: 8uVIsygAzY+W00tDeJWb0+wgDL8= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CW SHA1-Digest: FzxQ6xJevFno4kgE8JMBn7vm1Qw= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CV SHA1-Digest: NVw0RDzSeot3HPLCd21YtZzNUl4= Name: res/layout-v11/notification_template_big_media_narrow.xml SHA1-Digest: L9uWxQbKZI+Le8fiaRB0zf5WQk4= Name: com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CU SHA1-Digest: fljaoiFDM4IT97593aTBjM7mDrk= Name: assets/fonts/Roboto-Bold.ttf SHA1-Digest: 0xOrLEV1a/TpcmR/WyrWka0lCZA= Name: res/drawable/circle_touch_highlight_background.xml SHA1-Digest: +vrejfE86g5jlzpEsT1T1kPkZkw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ET SHA1-Digest: UkNUR8e+38ufqUhzALmePKnQEDo= Name: res/drawable-xhdpi-v4/abc_list_divider_mtrl_alpha.9.png SHA1-Digest: B+V5QEOwy10ghi7uX5XLTPFJGJs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ES SHA1-Digest: 29SChkSFfizs4lfPUzwmkhfYdzY= Name: res/drawable-mdpi-v4/ic_mood_white_24dp.png SHA1-Digest: vLMgOnfhzvg7N4kjbk1q6mBhHgA= Name: res/drawable-xhdpi-v4/lockscreen_watermark_dark.png SHA1-Digest: hlEs6EtN2kUs2+CrmYa3eux6s+o= Name: res/drawable-mdpi-v4/lockscreen_watermark_dark.png SHA1-Digest: seLgq7oT0J1fGJEos/BvHUn9HxM= Name: res/drawable-hdpi-v4/abc_text_select_handle_middle_mtrl_dark.png SHA1-Digest: jF6QKRBg9OvlnbeWqmX8Uqm8bg8= Name: res/drawable-xhdpi-v4/abc_tab_indicator_mtrl_alpha.9.png SHA1-Digest: BmwsKC3uNvwcF8agRRgehS1CAm0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DZ SHA1-Digest: RQ4S6uQab867FlpDbYYHHaVL8Hg= Name: res/drawable-hdpi-v4/ic_volume_off_white_18dp.png SHA1-Digest: WAcrLSLpafxsPS7hsU4ikDLzBjE= Name: res/layout/receive_key_dialog.xml SHA1-Digest: uwKqhimJhXsLyVM92wFetrBMLrY= Name: res/drawable-xhdpi-v4/ic_emoji_flags_normal_light.png SHA1-Digest: lzTZ5KC+L1NXjN1Lc0RUX4B+kwY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE SHA1-Digest: kiLeXJRUmuwK6YSEE0un/LBWX7A= Name: res/drawable-xhdpi-v4/check_dark.png SHA1-Digest: n7vjve9oV1IazDBlspyC8ygB7iM= Name: META-INF/services/com.fasterxml.jackson.core.JsonFactory SHA1-Digest: wj+dD6oGz5YGyIP+iorCZD19Vfo= Name: res/drawable-xxhdpi-v4/divet_lower_right_light.png SHA1-Digest: LQGnGyzsEsPzMVo5RVG7YT87vHw= Name: res/drawable-sw600dp-mdpi-v13/ic_backspace_disabled_light.png SHA1-Digest: bBJa6fMJoP87GQtakbAV7tKOdHw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM SHA1-Digest: mwxgTyd8lkaOHm+Sp8pledOgHOU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DK SHA1-Digest: /uFoov4ZE72YEZLQro51JnA0qbA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DJ SHA1-Digest: ljFANfE5k4ywKWuG79RPOG5xZ1k= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO SHA1-Digest: U7K6ebEteyqcWp8rMHKpW+I0dPE= Name: res/drawable-hdpi-v4/lockscreen_watermark_dark.png SHA1-Digest: SNi3m+8aly9MoEzOODURLRT2dgc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR SHA1-Digest: /NGBGdHGjZxtQu9seYZopanOPEA= Name: res/layout/abc_screen_simple_overlay_action_mode.xml SHA1-Digest: shGoP8DkqV4/9zkW62jOT5c6dTM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CU SHA1-Digest: TxifspcBKsFrXrc+wHicK4kkThg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CV SHA1-Digest: qCfYcVgc1m0ocymyHWZCLOEMzGQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CW SHA1-Digest: ZXABFAd5qBbiQwpaxIRm7bM8C3w= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CX SHA1-Digest: tPwjD6BrsXTydYgTEATcxqoFxUo= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CY SHA1-Digest: w2bFmG/+0dEQjd6NOg7ZLIBNFxM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CZ SHA1-Digest: s4yNVj4uxeIYy2HQ1PZst2Wyd98= Name: res/drawable-xxhdpi-v4/ic_arrow_forward_light.png SHA1-Digest: fxLwDF0XgRhh/Z+wIHNmXH2vD/0= Name: res/drawable-xhdpi-v4/ic_launch_white_24dp.png SHA1-Digest: PkKEB5cW/mCfSfqauFHcBYJzYYM= Name: res/layout-v17/select_dialog_multichoice_material.xml SHA1-Digest: kF3z9YIp7bF/zoaUwjPCniSOWSA= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA SHA1-Digest: zLYC+3BHOlbcYHli1mCAZ0LxLWA= Name: res/menu/text_secure_normal.xml SHA1-Digest: advohO24vwcGKxIYhZNY0WNEeZs= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CD SHA1-Digest: KKWkBf+gjho9c01K+7L91O1+t5A= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CC SHA1-Digest: /uTE5ZftKbNfc1KVOBY0BwZYiJE= Name: res/drawable-mdpi-v4/ic_push_black.png SHA1-Digest: Pm4g2wut9XC0rdU2C6SgiGBABg0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CF SHA1-Digest: Atbkx3E2oA0sNPjKVvINB+dI4Bg= Name: res/drawable-xhdpi-v4/ic_push_black.png SHA1-Digest: crIGub6enfp19Wgv9TGPYS5p5qY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CH SHA1-Digest: 6WvaeaOO/6Fz0lOhysacb1sovkw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CG SHA1-Digest: 5Xmxv1AP9rY/jQgxEiQOK0rq8FA= Name: res/drawable-mdpi-v4/abc_ic_star_black_36dp.png SHA1-Digest: 0pZEH/xvvGcZULZXlcabKxti6Jk= Name: res/drawable-xhdpi-v4/ic_circle_fill_white_48dp.png SHA1-Digest: QVa6X8BQerJNmVgAVUtU/q5+yn0= Name: res/drawable-hdpi-v4/abc_ic_menu_share_mtrl_alpha.png SHA1-Digest: UQXINsxHR6ofvfukurZilM7cjk4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CI SHA1-Digest: AvLDYaPuWJ/OdFPGj4ifg0S62tc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL SHA1-Digest: PxCy8tkmCP+qUB3r64VC8XRuwmo= Name: res/layout/delivery_status_view.xml SHA1-Digest: 7cbIP14SfIIw/AtYMsJAE991Clc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CK SHA1-Digest: swr8X/ZjBpnUT6YeeUfyJxwM/cw= Name: res/layout/abc_list_menu_item_checkbox.xml SHA1-Digest: +jlKh058XvxdeJU7n5iJbTnWP38= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN SHA1-Digest: jkqCARargiYpwr+wnSeQYA/kJhc= Name: res/drawable-xxxhdpi-v11/icon_notification.png SHA1-Digest: 1WKv+qoQAxKms56xhFqO8n3qtFg= Name: res/drawable-xxhdpi-v4/ic_lock_black_18dp.png SHA1-Digest: Nl6iL64BmDwCojnllz8S8eq2jCk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CM SHA1-Digest: HwDCRGSDT0iwMJ3s3dhMUDWsmbg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO SHA1-Digest: 4BH0lAASQMIyDN9Y4flioJbgT/Q= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW SHA1-Digest: Hh3GuKKtwYd3UAE020lxf1UPuVM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BT SHA1-Digest: xcgyGPnRb9VHBUeqqRbmsWKUGZY= Name: res/drawable-xxhdpi-v4/ic_emoji_symbols_activated_dark.png SHA1-Digest: hbZuiQ+6Kocq9GPlllglTKfYAQQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR SHA1-Digest: x1ZQeXUed4nFpfeA5rAI8lnTIM0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS SHA1-Digest: TKVmimdFLDNg0z7cGRsPzXosqQk= Name: res/drawable-hdpi-v4/ic_unarchive_white_24dp.png SHA1-Digest: j3jd65D0sfk5JumlC9jjVSsyKRM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BQ SHA1-Digest: PbKm2fiCJXlM2zhXzqALZTQzGjg= Name: res/drawable-ldrtl-mdpi-v17/abc_ic_menu_cut_mtrl_alpha.png SHA1-Digest: pSQWRqoWzxoeprY+bJcbqPYnS9w= Name: res/drawable-xhdpi-v4/ic_clear_search_holo_light.png SHA1-Digest: BQPFl6R0RkVo6zdHy6+CXEMYtwE= Name: resources.arsc SHA1-Digest: pT9SkqoTAVvawSq1GIG8JMi0pkY= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BZ SHA1-Digest: cxxhlPF+Qbo7TkgA5ihmKbzb36E= Name: res/drawable-xxhdpi-v4/textfield_disabled_focused_holo_light.9.p ng SHA1-Digest: EVVtSa4tBxIM4sQfg3efMbAd73k= Name: res/drawable-hdpi-v4/ic_forward_white_24dp.png SHA1-Digest: kw1ov76kMdT3DfN8aOM1S1y2/ME= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BY SHA1-Digest: 2Zx1n42omGg0DHFYInqMnrIeeg0= Name: res/drawable-mdpi-v4/ic_lock_black_18dp.png SHA1-Digest: y1vas11JhCozCPoOdEJ4aufqvWk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BG SHA1-Digest: 9re8XGKo/xLo//bh/z0hR8Uc+EQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF SHA1-Digest: 0tY+clINA//YDU7K+kyxypU3OCE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BE SHA1-Digest: HZZssjC7WANQ41IICioDPlejzwY= Name: res/drawable-mdpi-v4/check_dark.png SHA1-Digest: Zw41IEwzlRetwcNgeIOdfgNOSXY= Name: res/drawable-xhdpi-v4/list_selector_disabled_holo_light.9.png SHA1-Digest: bwjSzuahpvwVgJavscLUKen/ZqQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BD SHA1-Digest: tQ36Ki94Y5VjpX97EPgpzMcnCcg= Name: res/drawable-v12/recycler_view_fast_scroller_bubble.xml SHA1-Digest: fK9A5ABKj0zZace6jtRt8OOyBgI= Name: res/drawable-xxhdpi-v4/abc_ic_menu_share_mtrl_alpha.png SHA1-Digest: NhH/qNsjwbuGc/0xqPrgqFgo+9o= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB SHA1-Digest: 8J7iBIplhPymg/EEzZJsAMvxSs4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BA SHA1-Digest: L26Dxo+sreGbLNYDAUPk5+NPndg= Name: res/drawable-xhdpi-v4/ic_emoji_symbols_activated_light.png SHA1-Digest: hylX4cGP5tPnLt+gZNcabzY3SSc= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BO SHA1-Digest: 37mZ/Ac9FX1C2SItQm2x6JSkS3I= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BN SHA1-Digest: 3R/iFskKZ64flZb/KwUk33Rn810= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM SHA1-Digest: apnXGC3aexiNrwCnA0Ep6puLzAk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BL SHA1-Digest: HZWSbZ3UZ8s4l/FhQoR0nBW7OZQ= Name: res/drawable-mdpi-v4/ic_mood_grey600_24dp.png SHA1-Digest: YS3kKD7HHsRIdfK2f2H5+xYFSYM= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ SHA1-Digest: mW17F/U+xGNDE2Zqf+JDK0jo+Uw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BI SHA1-Digest: gC/DRFRyGCmSbHNi+4vswLWpctI= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BH SHA1-Digest: 1JLqksp2mVHCZp5f3XP0nnIDc8g= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS SHA1-Digest: rYQYJGXNQZoNMNGGqjRyrZ78VCg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT SHA1-Digest: Wyt1xF8GNJ6TagUIQUZvz/2YmZg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU SHA1-Digest: F5nDGT6P8crg0XaezCJkjCycul8= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AO SHA1-Digest: P+IbplkkA6LtKiWPQ3g3AP6Hmh0= Name: res/drawable-xxhdpi-v4/ic_photo_camera_dark.png SHA1-Digest: NDhUEnY/9tmdHmX/b6M64HpS9yw= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR SHA1-Digest: h9cD1dyR0cLOqU13gHWoxESdWPo= Name: res/layout-v17/timezonepickerview.xml SHA1-Digest: K/JpIQe/v0bxlrvy7hhOZj11kFg= Name: res/drawable-hdpi-v4/ic_scroll_down.png SHA1-Digest: XytlHbsWw8c8kdsw8h6y7sjJKq4= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AW SHA1-Digest: CTrn031inOFtaLnJCGhlvWfPKGg= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AX SHA1-Digest: dMS2y3fU2kSnwSTeiJZ0Mpkt+3c= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AZ SHA1-Digest: +t1VkIworcQ38T1C0vEEJA7HKac= Name: res/layout-v16/conversation_item_pending.xml SHA1-Digest: Vq2adS4zm1jVXVo88/+N+RDkNA0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AD SHA1-Digest: bb+pNMaDG7pdq/Cq2Su/Q52u2r0= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AC SHA1-Digest: TJ35D8LXerx6x5iU2mdwSKzZxpk= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AF SHA1-Digest: WCNTNjVsBqg57SCzkaLKHkmDiLU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AE SHA1-Digest: fFAv4HaRBjsYiyiqOi2YvPpOMsE= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AL SHA1-Digest: XJrLVXd4bo6FfmZ06m7R8JDygcQ= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AM SHA1-Digest: fZk1LKUL1HQqcqhvd0TOEYa/4DY= Name: res/drawable-mdpi-v4/ic_block_grey600_18dp.png SHA1-Digest: KUJOjPxGDJUuR310dKFutbu9OrU= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG SHA1-Digest: d2WD7VWMRhFbynO6CH861qiLo0s= Name: com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI SHA1-Digest: 6l9Z9Fbvz1yTIdltnNSGVoSnsd8= Name: res/drawable-hdpi-v4/ic_clear_white_24dp.png SHA1-Digest: KGvzH9tAy4Rp8fXE4ss/IlIj060= Name: res/drawable-xhdpi-v4/ic_account_box_dark.png SHA1-Digest: S01JIJuWASlAuq+cfTEotALXCFc= Name: res/drawable-xxhdpi-v4/ic_download_circle_fill_white_48dp.png SHA1-Digest: +G6fimlMFg2qKV2XZkNN6qxDw/8= Name: res/drawable-ldrtl-mdpi-v4/ic_send_white_24dp.png SHA1-Digest: VbFcDTzqSyDKzi2rqRZMy19N5Hs= Name: res/drawable-mdpi-v4/ic_lock_dark.png SHA1-Digest: TgRcFRX+X3s89plB3KsZ9DYCZtw= Name: res/drawable/abc_seekbar_track_material.xml SHA1-Digest: 17M1OyJgbSyvZxbg3tUg5REGwOg= Name: res/drawable-mdpi-v4/ic_call_split_white_24dp.png SHA1-Digest: f5THhmczC1U2x8JMNIv2h8Q1nJw= Name: res/drawable-mdpi-v4/ic_emoji_places_activated_light.png SHA1-Digest: 6K+yjAZ+f9Rv4akI86+ahnCL/GQ= Name: res/layout/abc_list_menu_item_radio.xml SHA1-Digest: agsopWn5fspPqFiahI2wYYvv2Ig= Name: res/drawable-mdpi-v4/ic_emoji_places_activated_dark.png SHA1-Digest: XpeaT819whOm5PfS0d9GWivG2j4= Name: res/drawable-xhdpi-v4/ic_call_split_white_24dp.png SHA1-Digest: 1uIDxVlM+3QUDQXoBZzGTRrNcZ4= Name: res/drawable-mdpi-v4/abc_ic_menu_share_mtrl_alpha.png SHA1-Digest: uftsHSNmkb7m90jrsRX95EC5rJ4= Name: res/drawable-xhdpi-v4/ic_emoji_people_normal_dark.png SHA1-Digest: DRrX67cohdfiuTn7OIr9CgL8kDQ= Name: res/layout-sw600dp-v13/three_keys_view.xml SHA1-Digest: 1iK1XU6Ybu1I6Z7cXWDONXCmx3k= Name: res/drawable/abc_list_selector_holo_light.xml SHA1-Digest: y4DqLE9ZMUXA7mpN9gzH7cgYblE= Name: res/drawable-xxhdpi-v4/lockscreen_watermark_light.png SHA1-Digest: AYNtsBVsxmSt1MgC8RP6Pd1pBao= Name: res/drawable-hdpi-v4/ic_account_box_dark.png SHA1-Digest: hzHnNF7Nc3hzYAfZjgmaAT4n2Ww= Name: res/drawable-mdpi-v4/ic_file_download_white_36dp.png SHA1-Digest: hbgdgZY1/fI/fqOaKxitnFIcI2g= Name: res/drawable-xxhdpi-v4/ic_push_registration_reminder.png SHA1-Digest: upW0gkPgqGNrSfE71EPR4GfdV+E= Name: res/drawable-mdpi-v4/ic_menu_add_field_holo_light.png SHA1-Digest: Rs64wpgQPbMuMj5rXn1+oBa5qak= Name: res/layout-v17/custom_default_preference_dialog.xml SHA1-Digest: HUQHHYyxai0hDOmCZJWChGinyio= Name: res/layout/contact_selection_list_item.xml SHA1-Digest: sdeMBniS9IJ6AYVkHqBh7NcRPeI= Name: res/drawable-xhdpi-v4/ic_send_secure_white_24dp.png SHA1-Digest: 9DyQOaZ+JzrS3IXK1M/Cy9q6Evc= Name: res/drawable-xhdpi-v4/abc_list_selector_disabled_holo_dark.9.png SHA1-Digest: e6ZxO30OB+oHpoct3gGLBY0gYXA= Name: res/layout/three_keys_view_right_drawable.xml SHA1-Digest: 6njEKgbsmM3f0ShnujnHeW1d8UM= Name: res/drawable-xxhdpi-v4/textfield_default_holo_light.9.png SHA1-Digest: HnMo01YraOS60C6Mfei/HvkA/0E= Name: res/drawable/abc_btn_borderless_material.xml SHA1-Digest: rPL1lJzRovUC1nEamnoL6zg2+0U= Name: res/menu/conversation_popup.xml SHA1-Digest: jik07pVp4j6AEoIlH7yAt8toeqw= Name: res/drawable-xxhdpi-v4/abc_textfield_search_default_mtrl_alpha.9 .png SHA1-Digest: bHADGZ86aGisr0oBfZBoU7RHX/g= Name: res/drawable/abc_text_cursor_material.xml SHA1-Digest: e08kbab0hCmZ+bodjZ7WbbBG5g4= Name: res/drawable-hdpi-v4/abc_ic_star_black_36dp.png SHA1-Digest: vgGy8pBTjoL/yJmNDQQ42DiT8vg= Name: res/drawable-mdpi-v4/abc_popup_background_mtrl_mult.9.png SHA1-Digest: JKV8P+rg3eY4lfp/aRgwOCFBeL0= Name: res/drawable-xxxhdpi-v4/ic_volume_off_white_18dp.png SHA1-Digest: rAVDor9ql64gPZTz5+KoAkLTTiI= Name: res/drawable-xxhdpi-v4/ic_check_white_24dp.png SHA1-Digest: bDxdJbCXinpkzSOdCIJZpcY6Gcw= Name: res/drawable-hdpi-v4/ic_message_gray.png SHA1-Digest: BgellHtjVGHZg5WpI2gtorVn58s= Name: res/drawable-xxhdpi-v4/ic_content_copy_white_24dp.png SHA1-Digest: LNLXvmySKOfF2Lp1gubWDFlQbbs= Name: res/drawable-xxhdpi-v4/ic_recurrence_bubble_outline.png SHA1-Digest: xKHPSlWlpwl+eiFK9hr4FePpdn4= Name: res/drawable-xxhdpi-v4/splash_padlock.png SHA1-Digest: wByXqz9iEvHVgT6+YuyhHFRRWKA= Name: res/drawable-mdpi-v4/ic_group_photo.png SHA1-Digest: LnMrIN2HmBbAm29e9YOIOUlNAas= Name: res/drawable/conversation_list_item_read_background_dark.xml SHA1-Digest: VUasHJ1+/2ThzfBvQafFpoof3b0= Name: res/drawable-xhdpi-v4/abc_list_focused_holo.9.png SHA1-Digest: Kw0Qo9eKlw06/oxLHYSWR6VftBw= Name: res/drawable/recycler_view_fast_scroller_bubble.xml SHA1-Digest: wRRdXv08lnaiKNy7Vz1zDb1gdTs= Name: res/drawable-hdpi-v4/ic_emoji_objects_activated_light.png SHA1-Digest: /oLV9rB2nqhghgvHi09BIJEmEIY= Name: res/drawable-xxxhdpi-v4/ic_menu_lock_dark.png SHA1-Digest: yRZ1+4GpqVyXrqr3eMDXxmWCMgM= Name: res/drawable-hdpi-v4/ic_emoji_symbols_activated_light.png SHA1-Digest: ZikdFDG3isXn+9er/CFwE2KVkn8= Name: res/drawable-mdpi-v4/abc_list_pressed_holo_dark.9.png SHA1-Digest: MoCLKmenbTlsz905dAkmwWiKKG0= Name: res/layout/design_layout_snackbar_include.xml SHA1-Digest: 09E6R0HuXwitMIFjvlCM+pXlOyw= Name: res/layout/contact_selection_list_header.xml SHA1-Digest: bl+2m53uDPHKWPgEkbbRgrufOc4= Name: res/layout/preference_list_fragment.xml SHA1-Digest: GXlLAti1Bhp0ihLEnJZS6HFFIjs= ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/metadata/org.smssecure.smssecure.yml0000644000175000017500000001121714717152070023201 0ustar00hanshansCategories: - Phone & SMS License: GPL-3.0-only WebSite: http://www.smssecure.org SourceCode: https://github.com/SMSSecure/SMSSecure IssueTracker: https://github.com/SMSSecure/SMSSecure/issues Translation: https://www.transifex.com/silence/silence AutoName: SMSSecure Summary: Send encrypted text messages (SMS) Description: |- SMSSecure is an SMS/MMS application that allows you to protect your privacy while communicating with friends. Using SMSSecure, you can send SMS messages and share media or attachments with complete privacy. * Easy. SMSSecure works like any other SMS application. There's nothing to sign up for and no new service your friends need to join. * Reliable. SMSSecure communicates using encrypted SMS messages. No servers or internet connection required. * Private. SMSSecure uses the TextSecure encryption protocol to provide privacy for every message, every time. * Safe. All messages are encrypted locally, so if your phone is lost or stolen, your messages are protected. * Open Source. SMSSecure is Free and Open Source, enabling anyone to verify its security by auditing the code. RepoType: git Repo: https://github.com/SMSSecure/SMSSecure Builds: - versionName: 0.3.3 versionCode: 5 disable: builds, merge changes into upstream commit: 66367479a4f57f347b5cbe8f6f8f632adaae7727 gradle: - yes srclibs: - GradleWitness@10f1269c0aafdc1d478efc005ed48f3a47d44278 - PreferenceFragment@717a45433b927d2f0dfc5328f79e77c9682c37bc - ShortcutBadger@3815ce2ec0c66acd7d7c0b4f2479df8fa70fed87 - AospMms@android-5.1.0_r3 forcevercode: true rm: - libs/* prebuild: - touch signing.properties - pushd $$GradleWitness$$ - gradle jar - popd - cp $$GradleWitness$$/build/libs/GradleWitness.jar libs/gradle-witness.jar - sed -i -e '20,22d' build.gradle - pushd $$PreferenceFragment$$ - gradle uploadArchives - popd - sed -i -e '/5470f5872514a6226fa1fc6f4e000991f38805691c534cf0bd2778911fc773ad/d' build.gradle - mkdir smil - pushd smil - wget -c http://www.w3.org/TR/smil-boston-dom/java-binding.zip - unzip java-binding.zip - popd - cp -fR smil/java/org src/ - rm -fR smil - sed -i -e '/org.w3c.smil/d' build.gradle - cp -fR $$AospMms$$/src/org src/ - versionName: 0.3.3 versionCode: 6 disable: builds, wait for upstream commit: 9675ce5eecb929dcaddb43b3d9486fdb88b9ae1a submodules: true gradle: - yes srclibs: - GradleWitness@10f1269c0aafdc1d478efc005ed48f3a47d44278 rm: - libs/*.jar prebuild: - touch signing.properties - pushd $$GradleWitness$$ - gradle jar - popd - cp $$GradleWitness$$/build/libs/GradleWitness.jar libs/gradle-witness.jar - versionName: 0.4.2 versionCode: 9 disable: builds locally, but not on BS commit: v0.4.2 submodules: true gradle: - yes rm: - libs/*.jar prebuild: - touch signing.properties - ./build-witness.sh - rm -rf libs/gradle-witness/build - echo "org.gradle.jvmargs=-Xms512m -Xmx512m -XX:MaxPermSize=512m" >> gradle.properties - versionName: 0.5.1 versionCode: 11 commit: v0.5.1 submodules: true gradle: - yes rm: - libs/*.jar prebuild: - touch signing.properties - ./build-witness.sh - rm -rf libs/gradle-witness/build - echo "org.gradle.jvmargs=-Xms512m -Xmx512m -XX:MaxPermSize=512m" >> gradle.properties - versionName: 0.5.2 versionCode: 12 disable: broken in upstream commit: v0.5.2 submodules: true gradle: - yes rm: - libs/*.jar prebuild: - touch signing.properties - ./scripts/build-witness.sh - rm -rf libs/gradle-witness/build - versionName: 0.5.3 versionCode: 100 commit: v0.5.3 submodules: true gradle: - yes rm: - libs/*.jar prebuild: - touch signing.properties - ./scripts/build-witness.sh - rm -rf libs/gradle-witness/build - versionName: 0.5.4 versionCode: 101 commit: v0.5.4 submodules: true gradle: - yes rm: - libs/*.jar prebuild: - touch signing.properties - ./scripts/build-witness.sh - rm -rf libs/gradle-witness/build - versionName: 0.6.0 versionCode: 102 commit: v0.6.0 submodules: true gradle: - yes rm: - libs/*.jar prebuild: - touch signing.properties - ./scripts/build-witness.sh - rm -rf libs/gradle-witness/build AutoUpdateMode: Version v%v UpdateCheckMode: Tags CurrentVersion: 0.6.0 CurrentVersionCode: 102 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/tests/metadata/org.videolan.vlc.yml0000644000175000017500000005515314770502071021552 0ustar00hanshansCategories: - Multimedia License: GPL-3.0-only WebSite: http://www.videolan.org/vlc/download-android.html SourceCode: http://git.videolan.org/?p=vlc-ports/android.git;a=summary IssueTracker: "http://www.videolan.org/support/index.html#bugs" Donate: "http://www.videolan.org/contribute.html#money" AutoName: VLC Summary: Media player Description: | Video and audio player that supports a wide range of formats, for both local and remote playback. [http://git.videolan.org/?p=vlc-ports/android.git;a=blob_plain;f=NEWS NEWS] RepoType: git Repo: git://git.videolan.org/vlc-ports/android.git Builds: - versionName: 0.0.11-ARMv7 versionCode: 110 commit: 0.0.11 subdir: vlc-android forceversion: true forcevercode: true prebuild: sed -i '48d' ../Makefile androidupdate: - . - ../java-libs/SlidingMenu - ../java-libs/ActionBarSherlock build: cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release - versionName: 0.0.11-ARM versionCode: 111 commit: 0.0.11 subdir: vlc-android forceversion: true forcevercode: true prebuild: sed -i '48d' ../Makefile androidupdate: - . - ../java-libs/SlidingMenu - ../java-libs/ActionBarSherlock build: cd ../ && ANDROID_ABI=armeabi ./compile.sh release - versionName: 0.0.11-x86 versionCode: 112 disable: ffmpeg error 0.0.11 commit: unknown - see disabled subdir: vlc-android forceversion: true forcevercode: true prebuild: sed -i '48d' ../Makefile androidupdate: - . - ../java-libs/SlidingMenu - ../java-libs/ActionBarSherlock build: cd ../ && ANDROID_ABI=x86 ./compile.sh release - versionName: 0.0.11-mips versionCode: 113 commit: 0.0.11 subdir: vlc-android forceversion: true forcevercode: true prebuild: sed -i '48d' ../Makefile androidupdate: - . - ../java-libs/SlidingMenu - ../java-libs/ActionBarSherlock build: cd ../ && ANDROID_ABI=mips ./compile.sh release - versionName: 0.1.3-MIPS versionCode: 1301 disable: build failing (at 0.1.3) commit: 0.1.3 subdir: vlc-android patch: ndkr9.patch srclibs: VLC@7c52aacbe forceversion: true forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ANDROID_ABI=mips ./compile.sh release - versionName: 0.1.3-x86 versionCode: 1302 commit: 0.1.3 subdir: vlc-android patch: ndkr9.patch srclibs: VLC@7c52aacbe forceversion: true forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ANDROID_ABI=x86 ./compile.sh release - versionName: 0.1.3-ARM versionCode: 1303 commit: 0.1.3 subdir: vlc-android patch: ndkr9.patch srclibs: VLC@7c52aacbe forceversion: true forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ANDROID_ABI=armeabi ./compile.sh release - versionName: 0.1.3-ARMv7 versionCode: 1304 commit: 0.1.3 subdir: vlc-android patch: ndkr9.patch srclibs: VLC@7c52aacbe forceversion: true forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release - versionName: 0.9.0 versionCode: 9002 commit: 0.9.0 subdir: vlc-android srclibs: VLC@31ffb20309264994 forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ANDROID_ABI=x86 ./compile.sh release - versionName: 0.9.0 versionCode: 9004 commit: 0.9.0 subdir: vlc-android srclibs: VLC@31ffb20309264994 forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release - versionName: 0.9.1 versionCode: 9102 commit: 0.9.1 subdir: vlc-android srclibs: VLC@37e886d113b8b567c15208579fb2f forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ANDROID_ABI=x86 ./compile.sh release - versionName: 0.9.1 versionCode: 9104 commit: 0.9.1 subdir: vlc-android srclibs: VLC@37e886d113b8b567c15208579fb2f forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release - versionName: 0.9.5 versionCode: 9502 disable: can't download gmp commit: 0.9.5 subdir: vlc-android srclibs: VLC@052600173f376ff58ff04d53746961a2 forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ANDROID_ABI=x86 ./compile.sh release - versionName: 0.9.5 versionCode: 9504 disable: can't download gmp commit: 0.9.5 subdir: vlc-android srclibs: VLC@052600173f376ff58ff04d53746961a2 forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release - versionName: 0.9.6 versionCode: 9602 commit: 0.9.6 subdir: vlc-android srclibs: VLC-2.2@27f4799 forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc build: cd ../ && ANDROID_ABI=x86 ./compile.sh release - versionName: 0.9.6 versionCode: 9604 commit: 0.9.6 subdir: vlc-android srclibs: VLC-2.2@27f4799 forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc build: cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release - versionName: 0.9.7 versionCode: 9702 commit: 0.9.7 subdir: vlc-android srclibs: VLC-2.2@9e1c6ff forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc build: cd ../ && ANDROID_ABI=x86 ./compile.sh release - versionName: 0.9.7 versionCode: 9704 commit: 0.9.7 subdir: vlc-android srclibs: VLC-2.2@9e1c6ff forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc build: cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release - versionName: 0.9.7.1 versionCode: 9711 disable: build fails commit: 0.9.7.1 subdir: vlc-android srclibs: VLC-2.2@57cd36b forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc build: cd ../ && ANDROID_ABI=mips ./compile.sh release - versionName: 0.9.7.1 versionCode: 9712 commit: 0.9.7.1 subdir: vlc-android srclibs: VLC-2.2@57cd36b forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc build: cd ../ && ANDROID_ABI=x86 ./compile.sh release - versionName: 0.9.7.1 versionCode: 9714 commit: 0.9.7.1 subdir: vlc-android srclibs: VLC-2.2@57cd36b forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc build: cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release - versionName: 0.9.8 versionCode: 9802 commit: 0.9.8 subdir: vlc-android srclibs: VLC-2.2@f2db364 forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc build: cd ../ && ANDROID_ABI=x86 ./compile.sh release - versionName: 0.9.8 versionCode: 9803 commit: 0.9.8 subdir: vlc-android srclibs: VLC-2.2@f2db364 forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc build: cd ../ && ANDROID_ABI=armeabi ./compile.sh release - versionName: 0.9.8 versionCode: 9804 commit: 0.9.8 subdir: vlc-android srclibs: VLC-2.2@f2db364 forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc build: cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release - versionName: 0.9.9 versionCode: 9902 commit: 0.9.9 subdir: vlc-android srclibs: VLC-2.2@e731dc23a4f8ef6782c7cc2236bbbf41c034dad1 forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc build: cd ../ && ANDROID_ABI=x86 ./compile.sh release - versionName: 0.9.9 versionCode: 9903 commit: 0.9.9 subdir: vlc-android srclibs: VLC-2.2@e731dc23a4f8ef6782c7cc2236bbbf41c034dad1 forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc build: cd ../ && ANDROID_ABI=armeabi ./compile.sh release - versionName: 0.9.9 versionCode: 9904 commit: 0.9.9 subdir: vlc-android srclibs: VLC-2.2@e731dc23a4f8ef6782c7cc2236bbbf41c034dad1 forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc build: cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release - versionName: 0.9.10 versionCode: 10002 commit: 0.9.10 subdir: vlc-android srclibs: VLC-2.2@e33e5de forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc build: cd ../ && ANDROID_ABI=x86 ./compile.sh release - versionName: 0.9.10 versionCode: 10003 commit: 0.9.10 subdir: vlc-android srclibs: VLC-2.2@e33e5de forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc build: cd ../ && ANDROID_ABI=armeabi ./compile.sh release - versionName: 0.9.10 versionCode: 10004 commit: 0.9.10 subdir: vlc-android srclibs: VLC-2.2@e33e5de forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc build: cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release # 0.9.10 vercodes were off - versionName: 1.0.0 versionCode: 10006 disable: doesn't build commit: 1.0.0 subdir: vlc-android srclibs: VLC-2.2@036010e forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc build: cd ../ && ANDROID_ABI=x86 ./compile.sh release # 0.9.10 vercodes were off - versionName: 1.0.0 versionCode: 10007 disable: doesn't build commit: 1.0.0 subdir: vlc-android srclibs: VLC-2.2@036010e forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc build: cd ../ && ANDROID_ABI=armeabi ./compile.sh release # 0.9.10 vercodes were off - versionName: 1.0.0 versionCode: 10008 disable: doesn't build commit: 1.0.0 subdir: vlc-android srclibs: VLC-2.2@036010e forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc build: cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release - versionName: 1.0.1 versionCode: 10102 commit: 1.0.1 subdir: vlc-android srclibs: VLC-2.2@59409d5 forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc build: cd ../ && ANDROID_ABI=x86 ./compile.sh release - versionName: 1.0.1 versionCode: 10103 commit: 1.0.1 subdir: vlc-android srclibs: VLC-2.2@59409d5 forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc build: cd ../ && ANDROID_ABI=armeabi ./compile.sh release - versionName: 1.0.1 versionCode: 10104 commit: 1.0.1 subdir: vlc-android srclibs: VLC-2.2@59409d5 forcevercode: true prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc build: cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release - versionName: 1.1.3 versionCode: 1010303 commit: 1.1.3 subdir: vlc-android gradle: VanillaARMv6fpu srclibs: VLC@a9b19e4 prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "armeabi" --release ndk: r10d - versionName: 1.1.3 versionCode: 1010304 commit: 1.1.3 subdir: vlc-android gradle: VanillaARMv7 srclibs: VLC@a9b19e4 prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "armeabi-v7a" --release ndk: r10d - versionName: 1.1.3 versionCode: 1010305 commit: 1.1.3 subdir: vlc-android gradle: VanillaX86 srclibs: VLC@a9b19e4 prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "x86" --release ndk: r10d - versionName: 1.1.5 versionCode: 1010503 commit: 1.1.5 subdir: vlc-android gradle: VanillaARMv6fpu srclibs: VLC@e6b4585 prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "armeabi" --release ndk: r10d - versionName: 1.1.5 versionCode: 1010504 commit: 1.1.5 subdir: vlc-android gradle: VanillaARMv7 srclibs: VLC@e6b4585 prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "armeabi-v7a" --release ndk: r10d - versionName: 1.1.5 versionCode: 1010505 commit: 1.1.5 subdir: vlc-android gradle: VanillaX86 srclibs: VLC@e6b4585 prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "x86" --release ndk: r10d - versionName: 1.1.6 versionCode: 1010603 commit: 1.1.6 subdir: vlc-android gradle: VanillaARMv6fpu srclibs: VLC@551b670 prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "armeabi" --release ndk: r10d - versionName: 1.1.6 versionCode: 1010604 commit: 1.1.6 subdir: vlc-android gradle: VanillaARMv7 srclibs: VLC@551b670 prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "armeabi-v7a" --release ndk: r10d - versionName: 1.1.6 versionCode: 1010605 commit: 1.1.6 subdir: vlc-android gradle: VanillaX86 srclibs: VLC@551b670 prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "x86" --release ndk: r10d - versionName: 1.2.0 versionCode: 1020003 commit: 1.2.0 subdir: vlc-android gradle: VanillaARMv6fpu srclibs: VLC@23c8d86 prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "armeabi" --release ndk: r10d - versionName: 1.2.0 versionCode: 1020004 commit: 1.2.0 subdir: vlc-android gradle: VanillaARMv7 srclibs: VLC@23c8d86 prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "armeabi-v7a" --release ndk: r10d - versionName: 1.2.0 versionCode: 1020005 commit: 1.2.0 subdir: vlc-android gradle: VanillaX86 srclibs: VLC@23c8d86 prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "x86" --release ndk: r10d - versionName: 1.2.1 versionCode: 1020103 commit: 1.2.1 subdir: vlc-android gradle: VanillaARMv6fpu srclibs: VLC@23c8d86 prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "armeabi" --release ndk: r10d - versionName: 1.2.1 versionCode: 1020104 commit: 1.2.1 subdir: vlc-android gradle: VanillaARMv7 srclibs: VLC@23c8d86 prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "armeabi-v7a" --release ndk: r10d - versionName: 1.2.1 versionCode: 1020105 commit: 1.2.1 subdir: vlc-android gradle: VanillaX86 srclibs: VLC@23c8d86 prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "x86" --release ndk: r10d - versionName: 1.2.2 versionCode: 1020203 commit: 1.2.2 subdir: vlc-android gradle: VanillaARMv6fpu srclibs: VLC@7491a5f prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "armeabi" --release ndk: r10d - versionName: 1.2.2 versionCode: 1020204 commit: 1.2.2 subdir: vlc-android gradle: VanillaARMv7 srclibs: VLC@7491a5f prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "armeabi-v7a" --release ndk: r10d - versionName: 1.2.2 versionCode: 1020205 commit: 1.2.2 subdir: vlc-android gradle: VanillaX86 srclibs: VLC@7491a5f prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "x86" --release ndk: r10d - versionName: 1.2.3 versionCode: 1020303 commit: 1.2.3 subdir: vlc-android gradle: VanillaARMv6fpu srclibs: VLC@7491a5f prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "armeabi" --release ndk: r10d - versionName: 1.2.3 versionCode: 1020304 commit: 1.2.3 subdir: vlc-android gradle: VanillaARMv7 srclibs: VLC@7491a5f prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "armeabi-v7a" --release ndk: r10d - versionName: 1.2.3 versionCode: 1020305 commit: 1.2.3 subdir: vlc-android gradle: VanillaX86 srclibs: VLC@7491a5f prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "x86" --release ndk: r10d - versionName: 1.2.4 versionCode: 1020403 commit: 1.2.4 subdir: vlc-android gradle: VanillaARMv6fpu srclibs: VLC@7491a5f prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "armeabi" --release ndk: r10d - versionName: 1.2.4 versionCode: 1020404 commit: 1.2.4 subdir: vlc-android gradle: VanillaARMv7 srclibs: VLC@7491a5f prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "armeabi-v7a" --release ndk: r10d - versionName: 1.2.4 versionCode: 1020405 commit: 1.2.4 subdir: vlc-android gradle: VanillaX86 srclibs: VLC@7491a5f prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "x86" --release ndk: r10d - versionName: 1.2.5 versionCode: 1020503 commit: 1.2.5 subdir: vlc-android gradle: VanillaARMv6fpu srclibs: VLC@50accb8 prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "armeabi" --release ndk: r10d - versionName: 1.2.5 versionCode: 1020504 commit: 1.2.5 subdir: vlc-android gradle: VanillaARMv7 srclibs: VLC@50accb8 prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "armeabi-v7a" --release ndk: r10d - versionName: 1.2.5 versionCode: 1020505 commit: 1.2.5 subdir: vlc-android gradle: VanillaX86 srclibs: VLC@50accb8 prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "x86" --release ndk: r10d - versionName: 1.2.6 versionCode: 1030003 commit: 1.2.6 subdir: vlc-android gradle: VanillaARMv6fpu srclibs: VLC@d59b81a prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "armeabi" --release ndk: r10d - versionName: 1.2.6 versionCode: 1030004 commit: 1.2.6 subdir: vlc-android gradle: VanillaARMv7 srclibs: VLC@d59b81a prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "armeabi-v7a" --release ndk: r10d - versionName: 1.2.6 versionCode: 1030005 commit: 1.2.6 subdir: vlc-android gradle: VanillaX86 srclibs: VLC@d59b81a prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && ln -s vlc-android/$$VLC$$ ../vlc build: cd ../ && ./compile.sh -a "x86" --release ndk: r10d MaintainerNotes: | Instructions and dependencies here: http://wiki.videolan.org/AndroidCompile see http://buildbot.videolan.org/builders/ for version code scheme The VLC srclib commit can be found out from TESTED_HASH value in compile.sh On new releases remove the updatecheck and force the CV to the last working build. This will make sure users don't get notified about the update until the final build from the BS has been reviewed and tested. Once done, undo those changes. # NEW BUILDS # +0: vanilla # +1: armv5 # +2: armv6nofpu # +3: armv6fpu # +4: armv7 # +5: x86 # +6: mips # +7: armv8 # +8: x86_64 # +9: mips64 # OLD BUILD SYSTEM # +0: - (upstream) # +1: mips # +2: x86 # +3: arm # +4: armv7 (CV) ArchivePolicy: 9 versions AutoUpdateMode: None UpdateCheckMode: Tags # Only use higher vercode ops, if we do build those arches VercodeOperation: - "%c + 5" CurrentVersion: 1.2.6 CurrentVersionCode: 1030005 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/metadata/raw.template.yml0000644000175000017500000000014614717152070020774 0ustar00hanshansLicense: Unknown Summary: Template Description: Template AutoUpdateMode: None UpdateCheckMode: None ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/metadata/souch.smsbypass.yml0000644000175000017500000000315714766514130021545 0ustar00hanshansCategories: - Phone & SMS License: GPL-3.0-only WebSite: https://gitlab.com/souch/SMSbypass SourceCode: https://gitlab.com/souch/SMSbypass/tree/HEAD IssueTracker: https://gitlab.com/souch/SMSbypass/issues Donate: http://rodolphe.souchaud.free.fr/donate AutoName: Battery level Summary: Filter SMS and show them in a fake app Description: |- In order to keep away curious eyes, SMS-bypass filters incoming SMS messages before they reach your inbox. Based on bughunter2.smsfilter. Features: * Discrete fake app "Battery level": Long tap on Battery percentage will show SMS. * Filter incoming SMS specified address: redirect the SMS to SMS-bypass messages list; remove SMS arrival sound or vibration; show a discreet notification icon (battery level); vibrate if checked in settings * Add contact from contact list * Export messages to a text file RepoType: git Repo: https://gitlab.com/souch/SMSbypass.git Builds: - versionName: '0.8' versionCode: 5 commit: v0.8 subdir: app gradle: - yes prebuild: sed -i -e '/minSdkVersion/amaxSdkVersion 19\n' build.gradle - versionName: 0.8b versionCode: 6 disable: don't build, just use as template for AUM, correct VC is 8 commit: 2bd6164ff6391906af2af2b484de69a4ff926a01 subdir: app gradle: - yes - versionName: 0.8.1 versionCode: 8 disable: mistagged commit: v0.8.1 subdir: app gradle: - yes - versionName: '0.9' versionCode: 9 commit: v0.9 subdir: app gradle: - yes AutoUpdateMode: Version v%v UpdateCheckMode: Tags CurrentVersion: '0.9' CurrentVersionCode: 9 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2961872 fdroidserver-2.4.0/tests/metadata-rewrite-yml/0000755000175000017500000000000014770510164020124 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/metadata-rewrite-yml/app.with.special.build.params.yml0000644000175000017500000000524214766514130026405 0ustar00hanshansAntiFeatures: - UpstreamNonFree Categories: - System License: GPL-3.0-only SourceCode: https://github.com/loadrunner/Facebook-Contact-Sync IssueTracker: https://github.com/loadrunner/Facebook-Contact-Sync/issues AutoName: UberSync for Facebook Summary: Sync your Facebook Contacts Description: |- To configure, go to "Settings => Accounts & Sync => Add Account". Depending on how many friends you have, the first import might take a while, so be patient. * Facebook does not allow to export phone numbers or emails: only names, pictures and statuses are synced. * Facebook users have the option to block one or all apps: if they opt for that, they will be EXCLUDED from your friends list. Appbrain SDK was removed before building. RepoType: git Repo: https://github.com/loadrunner/Facebook-Contact-Sync.git Builds: - versionName: 1.0.0 versionCode: 32 commit: b3879c973e7cac3a3319 - versionName: 1.0.1 versionCode: 33 commit: 252c8dd4c9 - versionName: 1.2.0 versionCode: 39 commit: v1.2.0 patch: - appbrain.patch srclibs: - FacebookSDK@sdk-version-3.0.1 rm: - libs/appbrain-sdk-android.jar prebuild: - sed -i 's@\(reference.1=\).*@\1$$FacebookSDK$$@' project.properties - sed -i 's/Class\[\]/Class\\[\]/g' $$FacebookSDK$$/src/com/facebook/model/GraphObject.java - versionName: 1.2.2 versionCode: 42 commit: v1.2.2 patch: - appbrain.patch srclibs: - FacebookSDK@sdk-version-3.0.2 rm: - libs/appbrain-sdk-android.jar extlibs: - android/android-support-v4.jar prebuild: - mv libs/android-support-v4.jar $$FacebookSDK$$/libs/ - sed -i 's@\(reference.1=\).*@\1$$FacebookSDK$$@' project.properties - sed -i 's/Class\[\]/Class\\[\]/g' $$FacebookSDK$$/src/com/facebook/model/GraphObject.java - versionName: 2.1.1 versionCode: 48 commit: 2.1.1 patch: - manifest-ads.patch - mobilecore.patch maven: yes srclibs: - FacebookSDK@sdk-version-3.0.2 - versionName: 2.1.1-b versionCode: 49 commit: 2.1.1 patch: - manifest-ads.patch - mobilecore.patch maven: yes@.. srclibs: - FacebookSDK@sdk-version-3.0.2 antifeatures: Tracking: en-US: Uses the Facebook SDK. - versionName: 2.1.1-c versionCode: 50 commit: 2.1.1 patch: - manifest-ads.patch - mobilecore.patch maven: '2' srclibs: - FacebookSDK@sdk-version-3.0.2 - versionName: 2.1.2 versionCode: 51 disable: Labelled as pre-release, so skipped ArchivePolicy: 0 AutoUpdateMode: None UpdateCheckMode: None CurrentVersion: 2.1.2 CurrentVersionCode: 49 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/metadata-rewrite-yml/fake.ota.update.yml0000644000175000017500000000302014766514130023615 0ustar00hanshansCategories: - System License: Apache-2.0 WebSite: https://f-droid.org SourceCode: https://gitlab.com/fdroid/privileged-extension IssueTracker: https://gitlab.com/fdroid/privileged-extension/issues Donate: https://f-droid.org/about AutoName: Fake OTA Update Summary: Tests whether OTA ZIP files are being include Description: |- F-Droid can make use of system privileges or permissions to install, update and remove applications on its own. The only way to obtain those privileges is to become a system app. This is where the Privileged Extension comes in - being a separate app and much smaller, it can be installed as a system app and communicate with the main app via AIDL IPC. This has several advantages: * Reduced disk usage in the system partition * System updates don't remove F-Droid * The process of installing into system via root is safer This is packaged as an OTA (Over-The-Air) update ZIP file. It must be installed using TWRP or other Android recovery that can flash updates to the system from the /data/data/org.fdroid.fdroid folder on the /data partition. The standalone APK is called F-Droid Privileged Extension. RepoType: git Repo: https://gitlab.com/fdroid/privileged-extension.git Builds: - versionName: 0.2.1 versionCode: 2000 commit: 0.2.1 output: app/build/distributions/FDroidPrivilegedExtensionFromBinaries-$$VERSION$$.zip build: gradle assembleUpdateZipFromBinariesDebug AutoUpdateMode: Version %v UpdateCheckMode: Tags CurrentVersion: 0.2.1 CurrentVersionCode: 2000 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/metadata-rewrite-yml/org.fdroid.fdroid.yml0000644000175000017500000004401714766514130024162 0ustar00hanshansCategories: - System License: GPL-3.0-or-later WebSite: https://f-droid.org SourceCode: https://gitlab.com/fdroid/fdroidclient IssueTracker: https://gitlab.com/fdroid/fdroidclient/issues Translation: https://hosted.weblate.org/projects/f-droid/f-droid Changelog: https://gitlab.com/fdroid/fdroidclient/raw/HEAD/CHANGELOG.md Donate: https://f-droid.org/about Bitcoin: 15u8aAPK4jJ5N8wpWJ5gutAyyeHtKX5i18 AutoName: F-Droid Summary: Application manager Description: |- Connects to F-Droid compatible repositories. The default repo is hosted at f-droid.org, which contains only bona fide FOSS. Android is open in the sense that you are free to install apks from anywhere you wish, but there are many good reasons for using a client/repository setup: * Be notified when updates are available * Keep track of older and beta versions * Filter apps that aren't compatible with the device * Find apps via categories and searchable descriptions * Access associated urls for donations, source code etc. * Stay safe by checking repo index signatures and apk hashes RepoType: srclib Repo: fdroidclient Builds: - versionName: '0.17' versionCode: 8 commit: c626ce5f6d3e10ae15942f01ff028be310cc695a init: rm -f build.xml - versionName: '0.18' versionCode: 9 commit: a6c9ed8d06b19315df9ba9041324f78139f7d238 init: rm -f build.xml - versionName: '0.19' versionCode: 10 commit: 540b7d0522f4d67a4896697f7342e4c75b4cbf59 init: rm -f build.xml - versionName: '0.20' versionCode: 11 commit: ddacfb856ad66c1c367e20c9cbecbfb15fe00813 init: rm -f build.xml - versionName: '0.21' versionCode: 12 commit: 49fa56aa6626a190f2d711120b69e435e9e615b1 init: rm -f build.xml - versionName: '0.22' versionCode: 13 commit: a6a33c942495cc4c74a7cb6e968efe0e00815e68 init: rm -f build.xml - versionName: '0.23' versionCode: 14 commit: aa58a8aad1a1c3832eafb9f1bdd6db8292d2c172 init: rm -f build.xml - versionName: '0.24' versionCode: 15 commit: 9b5fe2976443255b95027abd412f1c1e7f3d27b2 init: rm -f build.xml - versionName: '0.25' versionCode: 16 commit: 43977cc493e47a4dc841c4192ae8a40fb14b639b init: rm -f build.xml - versionName: '0.28' versionCode: 19 commit: f881aabe5bd0ac94771b03f1318a6e0972ab4128 target: android-15 - versionName: '0.29' versionCode: 20 commit: 87b229b95d0909bfd05c65c5670794e743626f6c target: android-15 - versionName: '0.30' versionCode: 21 commit: 497cb19840f79b31ae9590f5abd9e4df832b34ee target: android-15 - versionName: '0.31' versionCode: 22 commit: f99f8a544c7cb4d4a48ad09da00ad281af05f2ac target: android-15 - versionName: '0.32' versionCode: 23 commit: cc3970cc243e345416bfc62781ece6eeefd11495 target: android-15 - versionName: '0.33' versionCode: 24 commit: 58eb580159aa4d54767f0af1736cad233fec2475 target: android-15 - versionName: 0.34-test versionCode: 25 commit: 335d27b725b0f92e9e8804ae09518cd47bc7b021 target: android-15 - versionName: 0.35-test versionCode: 26 commit: a06d18b029392669e98359f86c07e442a04e6a13 target: android-15 - versionName: 0.36-test versionCode: 27 commit: 647e230c9e888c04bb0554078c5aa81da63548a0 target: android-15 - versionName: 0.37-test versionCode: 28 commit: 3c02e3ccc147a34af42cedf7d85f18dc75c8efa8 target: android-15 - versionName: '0.38' versionCode: 38 commit: 99b52c988d203811f434d6ac40675a63d5ae41ab target: android-15 - versionName: 0.39-test versionCode: 39 commit: 9a7d0b9f10710105d51d8206a7faa4408c60c20d target: android-15 - versionName: '0.40' versionCode: 40 commit: 51a67efdf1ee2819bee99d9263b2980dafaf761d target: android-15 - versionName: '0.42' versionCode: 42 commit: 36b815095ef51ca4f21887d973dbc0a50575cd65 target: android-15 - versionName: '0.43' versionCode: 43 disable: sdk doesn't like tzm (at f2109e4e0bf1597c625221d8d2d10050f146ba5a) commit: f2109e4e0bf1597c625221d8d2d10050f146ba5a target: android-15 - versionName: '0.44' versionCode: 44 disable: nasty upgrade bug commit: '0.44' target: android-15 - versionName: '0.45' versionCode: 45 commit: '0.45' target: android-15 - versionName: '0.46' versionCode: 46 commit: '0.46' target: android-15 - versionName: 0.47-test versionCode: 47 commit: 0.47-test target: android-17 - versionName: 0.48-test versionCode: 48 commit: 0.48-test target: android-17 - versionName: '0.50' versionCode: 50 commit: '0.50' - versionName: 0.51-test versionCode: 51 commit: 0.51-test - versionName: 0.52-test versionCode: 52 commit: 0.52-test submodules: true prebuild: rm -rf extern/Universal-Image-Loader/downloads androidupdate: - . - extern/Universal-Image-Loader/library - versionName: 0.53-test versionCode: 53 commit: 0.53-test submodules: true scandelete: - yes - versionName: '0.54' versionCode: 540 commit: '0.54' submodules: true scandelete: - yes - versionName: '0.55' versionCode: 550 commit: '0.55' submodules: true - versionName: 0.56-test versionCode: 560 commit: 0.56-test submodules: true - versionName: 0.57-test versionCode: 570 commit: 0.57-test submodules: true - versionName: '0.58' versionCode: 580 commit: '0.58' submodules: true - versionName: 0.59-test versionCode: 590 commit: 0.59-test submodules: true - versionName: 0.61-test versionCode: 610 commit: 0.61-test submodules: true - versionName: '0.62' versionCode: 620 commit: '0.62' submodules: true - versionName: '0.63' versionCode: 630 commit: '0.63' submodules: true - versionName: 0.64-test versionCode: 640 commit: 0.64-test submodules: true - versionName: '0.65' versionCode: 650 commit: '0.65' submodules: true - versionName: '0.66' versionCode: 660 commit: '0.66' submodules: true - versionName: 0.67-test versionCode: 670 commit: 0.67-test submodules: true - versionName: 0.68-test versionCode: 680 commit: 0.68-test submodules: true - versionName: 0.69-test versionCode: 690 commit: 0.69-test submodules: true - versionName: 0.70-test versionCode: 700 commit: 0.70-test submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: '0.71' versionCode: 710 disable: Broken MTM/AndroidPinning commit: '0.71' submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: '0.72' versionCode: 720 disable: proguard issues commit: '0.72' submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: '0.73' versionCode: 730 disable: local repos broken commit: '0.73' submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: '0.74' versionCode: 740 disable: still some proguard issues commit: '0.74' submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: '0.75' versionCode: 750 disable: repo update progress crasher commit: '0.75' submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: '0.76' versionCode: 760 commit: '0.76' submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: 0.77-test versionCode: 770 commit: 0.77-test subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: '0.78' versionCode: 780 commit: '0.78' subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: 0.79-test versionCode: 790 commit: 0.79-test subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: 0.80-test versionCode: 800 commit: 0.80-test subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: 0.81-test versionCode: 810 commit: 0.81-test subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: '0.82' versionCode: 820 commit: '0.82' subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: '0.83' versionCode: 830 commit: '0.83' subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: 0.84-test versionCode: 840 commit: 0.84-test subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: 0.85-test versionCode: 850 commit: 0.85-test subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: 0.86-test versionCode: 860 commit: 0.86-test subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: 0.87-test versionCode: 870 commit: 0.87-test subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: '0.88' versionCode: 880 commit: '0.88' subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: 0.89-test versionCode: 890 commit: 0.89-test subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: 0.90-test versionCode: 900 commit: 0.90-test subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: '0.91' versionCode: 910 commit: '0.91' subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: '0.92' versionCode: 920 commit: '0.92' subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: 0.93-test versionCode: 930 commit: 0.93-test subdir: F-Droid submodules: true prebuild: ./ant-prepare.sh androidupdate: - . - versionName: 0.94-test versionCode: 940 commit: 0.94-test subdir: F-Droid submodules: true gradle: - yes - versionName: 0.95-alpha1 versionCode: 95001 commit: 0.95-alpha1 subdir: F-Droid submodules: true gradle: - yes - versionName: 0.95-alpha2 versionCode: 95002 commit: v0.95-alpha2 subdir: F-Droid submodules: true gradle: - yes - versionName: '0.95' versionCode: 95050 commit: v0.95 subdir: F-Droid submodules: true gradle: - yes - versionName: 0.95.1 versionCode: 95150 commit: v0.95.1 subdir: F-Droid submodules: true gradle: - yes - versionName: 0.96-alpha1 versionCode: 96001 commit: v0.96-alpha1 subdir: F-Droid gradle: - yes - versionName: 0.96-alpha2 versionCode: 96002 commit: v0.96-alpha2 subdir: F-Droid gradle: - yes - versionName: 0.96-alpha3 versionCode: 96003 commit: v0.96-alpha3 subdir: F-Droid gradle: - yes - versionName: 0.96-alpha4 versionCode: 96004 commit: v0.96-alpha4 subdir: F-Droid gradle: - yes - versionName: 0.96-alpha5 versionCode: 96005 commit: v0.96-alpha5 subdir: F-Droid gradle: - yes - versionName: 0.96-alpha6 versionCode: 96006 commit: v0.96-alpha6 subdir: F-Droid gradle: - yes - versionName: '0.96' versionCode: 96050 commit: v0.96 subdir: F-Droid gradle: - yes scanignore: - extern/AndroidPinning/res/raw/cacerts - versionName: 0.96.1 versionCode: 96150 commit: v0.96.1 subdir: F-Droid gradle: - yes scanignore: - extern/AndroidPinning/res/raw/cacerts - versionName: 0.97-alpha1 versionCode: 97001 commit: v0.97-alpha1 subdir: F-Droid gradle: - yes scanignore: - extern/AndroidPinning/res/raw/cacerts - versionName: 0.97-alpha2 versionCode: 97002 commit: v0.97-alpha2 subdir: F-Droid gradle: - yes - versionName: 0.97-alpha3 versionCode: 97003 commit: v0.97-alpha3 subdir: F-Droid gradle: - yes - versionName: 0.97-alpha4 versionCode: 97004 commit: v0.97-alpha4 subdir: F-Droid gradle: - yes - versionName: 0.97-alpha5 versionCode: 97005 commit: v0.97-alpha5 subdir: F-Droid gradle: - yes - versionName: 0.97-alpha6 versionCode: 97006 commit: v0.97-alpha6 subdir: F-Droid gradle: - yes - versionName: 0.97-alpha7 versionCode: 97007 commit: v0.97-alpha7 subdir: F-Droid gradle: - yes - versionName: 0.97-alpha8 versionCode: 97008 commit: v0.97-alpha8 subdir: F-Droid gradle: - yes - versionName: '0.97' versionCode: 97050 commit: v0.97 subdir: F-Droid gradle: - yes - versionName: 0.98-alpha1 versionCode: 98001 commit: v0.98-alpha1 subdir: F-Droid gradle: - yes - versionName: 0.98-alpha2 versionCode: 98002 commit: v0.98-alpha2 subdir: F-Droid gradle: - yes - versionName: 0.98-alpha3 versionCode: 98003 commit: v0.98-alpha3 subdir: F-Droid gradle: - yes - versionName: 0.98-alpha4 versionCode: 98004 commit: v0.98-alpha4 subdir: F-Droid gradle: - yes - versionName: 0.98-alpha5 versionCode: 98005 commit: v0.98-alpha5 subdir: F-Droid gradle: - yes - versionName: 0.98-alpha6 versionCode: 98006 commit: v0.98-alpha6 subdir: F-Droid gradle: - yes - versionName: 0.98-alpha7 versionCode: 98007 commit: v0.98-alpha7 subdir: F-Droid gradle: - yes - versionName: '0.98' versionCode: 98050 commit: v0.98 subdir: F-Droid gradle: - yes - versionName: 0.98.1 versionCode: 98150 commit: v0.98.1 subdir: F-Droid gradle: - yes - versionName: 0.99-alpha1 versionCode: 99001 commit: v0.99-alpha1 subdir: F-Droid gradle: - yes - versionName: 0.99-alpha2 versionCode: 99002 commit: v0.99-alpha2 subdir: F-Droid gradle: - yes - versionName: '0.99' versionCode: 99050 commit: v0.99 subdir: F-Droid gradle: - yes - versionName: 0.99.1 versionCode: 99150 commit: v0.99.1 subdir: F-Droid gradle: - yes - versionName: 0.99.2 versionCode: 99250 commit: v0.99.2 subdir: F-Droid gradle: - yes - versionName: 0.100-alpha1 versionCode: 100001 commit: v0.100-alpha1 subdir: F-Droid gradle: - yes - versionName: 0.100-alpha2 versionCode: 100002 commit: v0.100-alpha2 subdir: F-Droid gradle: - yes - versionName: 0.100-alpha3 versionCode: 100003 commit: v0.100-alpha3 subdir: app gradle: - yes - versionName: 0.100-alpha4 versionCode: 100004 commit: v0.100-alpha4 subdir: app gradle: - yes - versionName: 0.100-alpha5 versionCode: 100005 commit: v0.100-alpha5 subdir: app gradle: - yes - versionName: 0.100-alpha6 versionCode: 100006 commit: v0.100-alpha6 subdir: app gradle: - yes - versionName: 0.100-alpha7 versionCode: 100007 commit: v0.100-alpha7 subdir: app gradle: - yes - versionName: 0.100-alpha8 versionCode: 100008 commit: v0.100-alpha8 subdir: app gradle: - yes - versionName: '0.100' versionCode: 100050 commit: v0.100 subdir: app gradle: - yes - versionName: 0.100.1 versionCode: 100150 commit: v0.100.1 subdir: app gradle: - yes - versionName: 0.101-alpha1 versionCode: 101001 commit: v0.101-alpha1 subdir: app gradle: - yes - versionName: 0.101-alpha2 versionCode: 101002 commit: v0.101-alpha2 subdir: app gradle: - yes - versionName: 0.101-alpha3 versionCode: 101003 commit: v0.101-alpha3 subdir: app gradle: - yes - versionName: 0.101-alpha4 versionCode: 101004 commit: v0.101-alpha4 subdir: app gradle: - yes - versionName: 0.101-alpha5 versionCode: 101005 commit: v0.101-alpha5 subdir: app gradle: - yes - versionName: 0.101-alpha6 versionCode: 101006 commit: v0.101-alpha6 subdir: app gradle: - yes - versionName: '0.101' versionCode: 101050 commit: v0.101 subdir: app gradle: - yes - versionName: 0.102-alpha1 versionCode: 102001 commit: v0.102-alpha1 subdir: app gradle: - yes - versionName: 0.102-alpha2 versionCode: 102002 commit: v0.102-alpha2 subdir: app gradle: - yes - versionName: 0.102-alpha3 versionCode: 102003 commit: v0.102-alpha3 subdir: app gradle: - yes - versionName: '0.102' versionCode: 102050 commit: v0.102 subdir: app gradle: - yes - versionName: 0.102.1 versionCode: 102150 commit: v0.102.1 subdir: app gradle: - yes - versionName: 0.102.2 versionCode: 102250 commit: v0.102.2 subdir: app gradle: - yes - versionName: 0.102.3 versionCode: 102350 commit: v0.102.3 subdir: app gradle: - yes - versionName: 0.103-alpha1 versionCode: 103001 commit: v0.103-alpha1 subdir: app gradle: - yes - versionName: 0.103-alpha2 versionCode: 103002 commit: v0.103-alpha2 subdir: app gradle: - yes - versionName: 0.103-alpha3 versionCode: 103003 commit: v0.103-alpha3 subdir: app gradle: - yes ArchivePolicy: 12 AutoUpdateMode: None UpdateCheckMode: Static CurrentVersion: 0.102.3 CurrentVersionCode: 102350 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/minimal_targetsdk_30_unsigned.apk0000644000175000017500000000436614717152070022467 0ustar00hanshansPK>ytAndroidManifest.xml1oAl| V D!]D$*DDNciCAoDRk)Ro'{w7fF%~֤Ga)^{ AInhuWZS&Dc}MI-1xa|D3LG9q/%%Œ-zzb]H Qho܄ڑق/u.'V[<#t2tza-;R~cl vV'Sn^sdSO91@o^JOlb?Lp+sfc*25z!Gkל{` ҆s;/]Vk%ޯ6cfۭR>E慟JQ3pRfX]->bo1FV-^я'U-c')Õzh 깨}[OnPK SWMETA-INF/MANIFEST.MFMLK-. K-*ϳR03r*)uRpOK-J,IMMut r.JAy)E) E)9 &zz\\PKiS< classes.dexKo@gHAZ<j h%Tmmֱ8"?!zင8q+@o 8ސU癝ݝfGgu+/w_ (z}9%|9K#{C B!A)QQ9@3H F% y|B" *2\Gf)"% #/E/.7/|~d9 bCQ p _{'NM v*yAIH:urix.)IqBߔak00](sJ.R.YYWB ezڶ֌AkL6t HN͚eWiհxL1bڤ,U1VZ Cyw߸Ib|nuim ])mq͈eps~;=I з_pGz.mfg@C/487MZt+-1~\PT5*daF-w3NJfʆ8ydLTeLYNL[gڦUr5j:lL)V erbLSqEu\M$  w pR ‚H"IKv!Bt "G;ҡVڑ(NB$WC]Q?D4?qے͞"H/2zZ}D=5b !Ǹ9ݻ(G;)< }I7q{PK v,,resources.arsc5 ,( ci org.fdroid.ci P0 string, app_nameThX@PK>ytAndroidManifest.xmlPK SWMETA-INF/MANIFEST.MFPKiS< sclasses.dexPK v,,resources.arscPK././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039740.0 fdroidserver-2.4.0/tests/no_targetsdk_minsdk1_unsigned.apk0000644000175000017500000000433214717152074022576 0ustar00hanshansPK 04AndroidManifest.xmlR;N@q$Q#HD(A`b%v"B8sP:H{ovb&v@ah!^}"4@</N|'{x%>ưpKF6Z~e%x> +&KwKcXuejL9ћ%{3<3lr?WAH=)P!1gǹLS1 iGX5X1MP)ט}/V8y_ bO˕?7C+u m匩;L \QxP2ypğWLz_ѕ9x)ܫ|Bϥwj[5[k[[l2ˁKw'c;KcMv;x*u-rw"ԤVEw7r+sϹ] n+}nzRռsy_~~X5uv;PK SWMETA-INF/MANIFEST.MFMLK-. K-*ϳR03r*)uRpOK-J,IMMut r.JAy)E) E)9 &zz\\PK-*8 classes.dexOAGaAnj*51d]v"x_'5`L8z7ݩy̛͛׷ÑG3#|[ROMgFtLJr%@RGYCe@BF2 Ed y#OBpn#cMd) RF /WȞB?ϷE3]|>ARlH?jznkwV ߷iq&eTTɋogadB9qpHs ^L%kڛ{Cıx|M۬݀B!KO-VrO/,LKO;Yo:9^$J^VTm;5Z3[ښ带]J[uSpᔘmUt(Cl_բvI_0ڿZKA$TK^uL]L-N8]>'dz?lk475{ۢ%:ibӲRۋ ƽ U2k: I>V4\1ceG7IOPFuƴuCtʮ2F-UʦSO*u\v5'S :A8+!A$$!r|W:YaŮt(Q;p0xQ"A :Z5w 8ZVP?1@n[O" ZEVAǐ>#FH< \gPz{(<> PK v,, resources.arsc5 ,( ci org.fdroid.ci P0 string, app_nameThX@PKyBtAndroidManifest.xmlPK SWMETA-INF/MANIFEST.MFPK-*8 classes.dexPK v,,resources.arscPK././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742486863.0 fdroidserver-2.4.0/tests/openssl-version-check-test.py0000755000175000017500000000162714767036517021662 0ustar00hanshans#!/usr/bin/env python3 # # implementing a version check of known bad OpenSSL versions, for example: # https://support.google.com/faqs/answer/6376725?hl=en # # This is used in update.has_known_vulnerability() import re import requests # this list was generated using: # for f in `curl | grep -Eo '[0-9]\.[0-9]\.[0-9][a-z]?' | sort -u`; do echo "'$f',"; done versions = [ ] r = requests.get('https://www.openssl.org/news/changelog.html', timeout=300) safe = set() bad = set() for m in re.findall(b'[0-9]\.[0-9]\.[0-9][a-z]?', r.content): version = str(m, encoding='utf-8') if (version.startswith('1.0.1') and len(version) > 5 and version[5] >= 'r') \ or (version.startswith('1.0.2') and len(version) > 5 and version[5] >= 'f') \ or re.match(r'[1-9]\.[1-9]\.[0-9].*', version): safe.add(version) else: bad.add(version) print('safe:', sorted(safe)) print('bad:', sorted(bad)) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/org.bitbucket.tickytacky.mirrormirror_1.apk0000644000175000017500000001600514717152071024471 0ustar00hanshansPKTID"META-INF/MANIFEST.MFmKo@; ߁cDM}mӤ: n*9 5V]@AX~ \8ݓ/d.${]ӵdkHR 9c2Ow]e'B{M.]bu ^} Ks2P`rZSQ"O+>G{QC K839ERH+p:L8+ќ <)poPK"PKTID sb!META-INF/E16A6514.SFmKo@ཉet(j|[u ̈#O 6MԸ;Qx DZ`4 !ڬo6㒇2;h& JN!c0e]_m#L6x}k6 ڔ/]^F„vE_+_Z| OrޗmXNWzZ|50%AJz(4 /z(*؜8cMY8f!3V!ok)N\O_N%X@4B ClYǴ9W Z7D Ʈ&|{^-RwzV]G^U(H*)A.tvFoEs Cog8 cPK sb!PKTID˼h 44META-INF/E16A6514.RSA3hb5`jhδUѠUѐπ"`PǸ9٠9ޠ}3#KO xjZ 8٘CY؄B y @af w6񸄹R3S \@0f8E8K41*!{(pyاSǞ9_a #O-9_{Jy_1o\*H)O+Y^wٗ#[wqao޳Wf{t7WVߒwlѥ~,n~KClիQj̊ =3\j]\>RfcKCV`ES&=of}<3#bEyY`򱈱Hfnh̉- .+M3(fEl SUoK kNpf\1uG;kn5+/P')vfyuZU^fc/`I-,|U{J#^{KOC[o 3YbYv Uuz2űJ4̫dO o-l{fӟW!7_hz?qJXӤ~ͳzc_5|lrY׉R%JIQ!j Ԕ4;޵;|swf߃OyS=*S6=5#SX>ַCVҬX|# 1=ݢG2s9ۨlRvtV-W~1{3jC4nTr&dzmx<֕G·kzoe-] =>w3hTUk*.$l>tn5,{#?=zӳw:EQ~,]v?s^<y{ kocdl~86 վGrYuJ }YdGmG,wh=RAn ϱ΅͸iV3>`צ^ܤ_:ggM+|'םo8Vh[} S Vh(hx_5tnxe&l&Z*#3$Y JTirdVY|<>Èo"nDmC.{c;Ltп7~?+~%ҟ\5Pֲ7\D1x56 pb[~EEr\ d _N"Ǔrl={2p5 i][5:tds,xKQ~~Lğ9Do9-Gze-Jy*y]wVhsw1quoOJ|q_PK,lX{$ PK n=Du\\resources.arsc \p(5res/layout/main.xmlres/drawable-mdpi/mirror.png Mirror Mirrororg.bitbucket.tickytacky.mirrormirrorlP,attrdrawablelayoutstringD( mirrormainapp_name8L<$8L<$8L<$PK n=Dm[[res/drawable-mdpi/mirror.pngPNG  IHDR00ri["IDATHc<@`b0aTèQ F5jQ+,`IENDB`PKm=Dad# | classes.dexklW<}Q{8N@u"Iv5Nli&xwbǑjTm$RDTB HBBj UH@A !R! c0oι;wܙ5[ӹy+u}o?~tx}7>SKT&-E U !#4uB 1?C _???OǠh;87/A(Jl_A=8APEP>gsp\W}x~~ nJ%zݠ QP' gy&A4I ցS`<2ATV`} T6 "ĄErXKX2ԁz@bAHfVUJOUUPώaOTIVթ Ovz/ꬕ:N9R^OT*RU*}KEX uv^.) ߝMF#;tZ8өGqv]5H̢WW:c|5~X :^D/F#O ̩RMܾm1RleĨs!&M<]eҟeo-}GqkI<ؒrӒB⽨uʱrB_RKi\x1J;lwg.zJ {bIs$}{=F^RIɑrSpKv!kyߞ.J/%Ƿ?_pڳ]n{[#h:Z]ԾPet gLSk (ZLo^.[k~ڪ%.[piPD3u&+yzbb]Լl>O4B \,ا|ӷKNKLM:nCW?`M zgɐ-Do6oY.2fCئ}e͹;)vԜo┝]s*h}60mg16gv1 ~5Ϙl;Mќ+MO o.JUG@\Kh?~~͑>CQ#mr5y XO:HyY(\=)иI&,8-.@kK.KZE,OJo rVkfУ<")8i>)66&("K)qYMU ҧ N $)|LZoQܹ@wϘv.W)YjYb73EgRr]H/-jʋcK?⚎Wd7-/b.[2 $K!*ZgQgX~M'o *A/o}R b{m6|SܻcZX٠bY0 >(ʹ{>xos(LGmR~oSKJ!(<9vݟ= ̘ig?W^(#Np(ٱ1Z[;B+_ ii; ;>W_B@HY۪`|m=AP6hC->tL _{Y=FPbQ:&z#̀w*Nqv2ةmŎM7PSF=YQ(*Sj_7457|Yg{k+1R*j3JV(ո\6-{`ПO1=n5kwk4%GEVðD_ _TǰG ۃT˰}Hߌf')ɠB0#;F1}/ #˾!qۆ}HPKad# |PKTID"META-INF/MANIFEST.MFPKTID sb!dMETA-INF/E16A6514.SFPKTID˼h 44META-INF/E16A6514.RSAPKm=DU res/layout/main.xmlPKm=D,lX{$ AndroidManifest.xmlPK n=Du\\g resources.arscPK n=Dm[[res/drawable-mdpi/mirror.pngPKm=Dad# | classes.dexPK ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/org.bitbucket.tickytacky.mirrormirror_2.apk0000644000175000017500000001565414717152071024503 0ustar00hanshansPKVIDJk!META-INF/MANIFEST.MFmKo@; ߁cC &oR@ʥUhO_4i5Nf~_@6TjHQ0wfR)k֌wR*}P\eIюT)TT\+T^N]CG=.ӧ6Y4ڑ._ rF?a8cFŸcvuZufн'LErG䫝? -ra‰CI>MIR ZF2 =wY- p[}e&)U3r`z9j|{f|ɭhNq3gFY4'PKJk!PKVIDb!META-INF/E16A6514.SFmn@ཉ D!U+j70AO_ۦI5|䦂X%d-m6aв3b{ Aj͔og]Tuhn~j6B`X}~~t:C%TT>ޯe7s?Ii'KvH]f0S).S_qCTt$暈َiYs2);΂l|yo#wqao޳Wf{t7WVߒwlѥ~,n~KClիQj̊ =3\j]\>RfcKCV`ES&=of}<3#bEyY`򱈱Hfnh̉- .+M3(fEl SUoK kNpf\1uG;kn5+/P')vfyuZU^fc/`I-,|U{J#^{KOC[o 3YbYv Uuz2űJ4̫dO o-l{fӟW!7_hz?qJXӤ~ͳzc_5|UYo,|Q_Ymv:g$>1i5=|ڳgs+g>+kqWۦ{vmxm4[}<!;kl _uM8~ӂsMvJ.XbQU?ler\Oz~_jRl.9O%VsrY܌YS?_YĠ-(?̽4eIvKy?PK/-54PK=DU res/layout/main.xml]J1tBRDą@f/]\f.&&C&*|k=)z~7䯠 }1mPeA5|C7x::Z郞_Oﶍf\& Uvm*7F6_Ʋ ҫbW։|.[b3|G/4FTa~1.sfΙ, Yq`g)|3PKU PK=DV( AndroidManifest.xmlnE8NH"HdqHVPP"Xg.6i%68( ,+ <,XXsSc.]USjz봔hY+5 Xs|~v">]3+.|~_^>߀o`H!EUUVJ"BPD%"> QJ*!VJT򿏵7~s=>{)Z];w̾X}>I[?r$&l& {;,D 5ȗ!ÐvPC0N3E0 ΃-pD(yS[pP(zpx aA4x>' Ff&ݠ 8N`\W5:x ,_G)P#`x`\_QhxgwKUe", ZX3FB8EP &$ֹ `hA<2Brl zCr<}z?D-Rg?'^Ym۰GjtRO;j5rM`3Rg}1|X<~H1ln.㴟R<*=cvHGIzyE9UyqVw/:c@dws.U:esa.4eFLq|8\F+|kp;؏~r]+|n]RU9o!Rƥ*ۉwQ*m;8=3v[vٓ۟2gMR(waRI %Oj~Mb֬T =k 9J eǷ?_tʔ]Lߵsn{,X#h:Z9X2e9ӵB 8 Ӆ[fi?G+q%qֶGw9!&umR; |,糦}ӷNS(=ۙ-u'?fMO ٪gK3=4_*Rj̃OY!l3]ʲhgNf'lbp]8dm-⚭IzFLYͳj}{/9۔̅fQ6bs&%m(}:hEe1S,,/E{:m 8Q:{R, !sqMZ>qYiԄ:UVPTʮoOKf< MYOMb5;Ә9#e׵Lߢtٹs5]> kP^Vbw;\yRPE +C +eqM+VVL1m7YRصJY䙳Vq|)X>%̒uDScӂrUA׆ok{wkU\-iQa6v3ZJRV"jXdl-RFT%P5hZSM]Q>unw .@pzIoO=Acd͹*8 :عr O/lq䛍qb+@}QIj;]=`L2+iG?wC NWQYUST!a&(ۍk䩜n43|}:# q0]yp?u#Z;W/jgDd:ghe^ 7t[vk9i>PKb`!PKλD)HQZ44META-INF/E16A6514.RSA3hb5`jhδUѠUѐπ"`PǸ9٠9ޠ}3#KO xjZ 8٘CY؄B y @af w6񸄹R3S \@0f8E8K41*!{(pyاSǞ9_a #O-9_{Jy_1o\*H)O+Y^wٗ#[wqao޳Wf{t7WVߒwlѥ~,n~KClիQj̊ =3\j]\>RfcKCV`ES&=of}<3#bEyY`򱈱Hfnh̉- .+M3(fEl SUoK kNpf\1uG;kn5+/P')vfyuZU^fc/`I-,|U{J#^{KOC[o 3YbYv Uuz2űJ4̫dO o-l{fӟW!7_hz?qJXӤ~ͳzc_5|O)XvcJ|!gob.+qJ"IL|'~Z}xx=Ju!ՙ&+ >^:t7R茇n{$Zpc{lkֱ|E%T-]K2=J}7BWhW6/ w>l@}$?]FGj}7%+/ Q$uBr Z\]3/ V'[ve5{2N~[ xmM3֥Q5vU(Q/8N]p0'LC;J5~ n_-p|  >CJ@'ȁpNW>x\W;x|Dπu`+(`Lo6 >U#ʂ` @Elk-&bB)oa: N, Rw;X:@dR "?V,X>/ƓE.Ѓb<},z@?-K?' &BmO B~3bl> &_Ly|e,rRx [h qc)vO1i-#d+q*ve80v\<(bKL/rA.Ctr#!󣅏Gv1omNdNge^=\hKFx~Bf\*d,u7' $mػn?#MWͨO`4t?G%6߂qJMߋٙY = a.%ۚkTbىVbS&4FMk])&C5BWN*t2~ڎcu$mОZ0la#He4/AǓZE1"ގ˽ZfeY-Cd>KEfb("5kg:tyRyLæ])އy)fIET{mm9=ݪ5Hm.ȝyخc]oez[דI~,R'RU'DF}B玳-\+]ZՆ1d8k=8_GkL!ǤNS,>{vt39 NRkE se8fߘ2x:h8P5σGl,ަfߜ PK@?t$ PKλD0#META-INF/MANIFEST.MFPKλDb`!eMETA-INF/E16A6514.SFPKλD)HQZ44META-INF/E16A6514.RSAPKDU ~res/layout/main.xmlPKDBJAndroidManifest.xmlPK Du\\5 resources.arscPK Dm[[res/drawable-mdpi/mirror.pngPKD@?t$  Wclasses.dexPK ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/org.bitbucket.tickytacky.mirrormirror_4.apk0000644000175000017500000001467414717152070024505 0ustar00hanshansPKX^D``META-INF/MANIFEST.MF]MO@; e%`֏V(\̖]F`]_/FdɬH_lv40UFZFWpak'w@iFiʚTܚt]U&p-8ZtO0lg{}®qgJ~`R g z6whGM3w6O?D^)nnvL&n꽶[  m88,q8›̎wNhOPK``PKY^D v?META-INF/E16A6514.SFmn@ཉRI@Q)؈G }ژ&jsCr$+ jD@Ђ[JGӛplwW!Uq@Ja)υJ=(ݦ`$/͆I550$'S@Y,%N6` ')=̓IOfg#bs 1f h){<,h]Exۻ+WQT!`PL- WD#!&]6`\:Vػ1 m ✨ (@Z;p$f_+ q*e/?PK v?PKY^D74META-INF/E16A6514.RSA3hb5`jhδUѠUѐπ"`PǸ9٠9ޠ}3#KO xjZ 8٘CY؄B y @af w6񸄹R3S \@0f8E8K41*!{(pyاSǞ9_a #O-9_{Jy_1o\*H)O+Y^wٗ#[wqao޳Wf{t7WVߒwlѥ~,n~KClիQj̊ =3\j]\>RfcKCV`ES&=of}<3#bEyY`򱈱Hfnh̉- .+M3(fEl SUoK kNpf\1uG;kn5+/P')vfyuZU^fc/`I-,|U{J#^{KOC[o 3YbYv Uuz2űJ4̫dO o-l{fӟW!7_hz?qJXӤ~ͳzc_5|؆'=wyg=Q.ɮJ[+mBmύLix^|D,'zkjҔ}N_wbgg-/ ~ZcOO^7NoR?_ ͍Gjz2MXիYqGkK6mQ}I>{}PK74PKK^Dټ{( AndroidManifest.xmlTMOSA=壔Rʗ@)F5lˇ„4FkK[R00.\ +`ҕ?Kky3ssܙyQppl'pOCxE%S'7DL|%N&_SXw7'w\FXDy ә>G+ -xFƦ@o3ƪ}R滏yړh3nʱJ VpݐhW[xF]h " ^pÖ]*=28TXW\pUURĜ;dtZWʋUUsyV[:͠8 .~?%Ax WO] P5:P5me',-aKEm'iPO/ dR "?Y|J'\ /$?{}AWqدMG#~-DŽ^Z35Ekr|~Fѿq?Z>C|_k>+(_v.$_S:ʔT 0.~YŮqC||{\FQ"\J.ee .4e <ϑ'2Nޅi=7 ȴ (2#}3 u{JƸKaXjl2XFEIA$*KʸQE)M?]^eTQSJbc4eɥ<~Rp´'<, XФ'k' i/dSG.]ix&esڰJ<\&6|,RBpƅ"*R\1mVbOTʮ7[bU§NXQR1KᚔrikaAt F Aչרn˭S V~r)֪f7H+( 2L{pǐ(ySbWT A?) ބ:mLROZEoOP^qIK_h!;(nEenۯzUEkՈܿ|W"o_u%/~u%/I/S:E|EJ%`"4%ԥ(jGpkQx: x6VgKxfY2ݍUeCU9"$cҴ)$T~]gZ4=w&p#W%5 KrbҿcV\nk.IuT^U fZPf%m5UYžo)=%@sT{BwEðw)+܀v/lב["Y Bsbe؟w6$7PKOp <PKX^D``META-INF/MANIFEST.MFPKY^D v?>META-INF/E16A6514.SFPKY^D74META-INF/E16A6514.RSAPKK^Dټ{( 9AndroidManifest.xmlPK L^D- resources.arscPK K^Dm[[ res/drawable-mdpi/mirror.pngPKK^DOp < classes.dexPK././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/org.dyndns.fules.ck_20.apk0000644000175000017500000040254514717152070020673 0ustar00hanshansPKZuI@ META-INF/MANIFEST.MFW˒HWDC-g°x HG|  &CǮE-=#{Ϲ2.a}}^/OS IBR{9<}y2AI'D jTہv.RC 7vi&SGm's.~b a͈A"XV^PF9 ~)dOf8VÜ2UK?>HY | $q-sq]f뾔oۛ;'ݣtѶ'y=wy+7 0h_2_sH_Aa q=al41Xh4uY@ ~ QX ûPZ@ż ³]||p܇H[{HLx.ވToGJF^M;!k'Aϝ0Kgkhbƿ u$l*K0bg^LJ}9k5. D\ٳphNmטw5A x>$newB0K_.Z]N1Ggպ5J{s>}ZMɵ%%Ӎ}p:t1-{+m/#Ș G6F{FW 76?e2v&\,8N{-l#mQfRKnbO!d|w }-AuIU׵;q9'v3^XJ M%bWJaPK@ PKZuI[Xu5META-INF/AD1279E6.SFWێX}gb,@y䢀xx*_?Vw&Ş7B{h0epqz%~QrP:#*aB#(tO65hH3>~0%tJS򗁁!yAyzo/PZĞMk| $e $Âha|oOo/uջp*/uU/mCt|ޡ4hX3=FE=b< Y0FɮAWcgTxr!<м]*[:`(FP "Upi^&$kŷ*(jX9Yp3jMw 05A\E0}P vExP%Q@ǹ闃Sϫ"Y=X\xw~zgjt`F.nb%nbwP4OkX+KXJ1fUI|P#/&;q*ؖ^TR0?q38x]Bqz4_󀢄y{8#RZ*1qRyN*;;=["8 goAvN˩EK@"\\kݡљ1>Kh'ґF'ڙB#kEGyo{w냢ARi!",/v;W>l~ ʞ؃jc;ǥ#P|^7r> n|CqD"${wg{ow:Ҳʊ4#] WWb{cK1И5<Zkoi 2s`gn5Zْ3ųR`Xp ,xvG/uz:"c&%~[iGP2>L/CmQtKݍAǠ:fqwGs2ҙ~͵e~轀@X<0љ$YHT¬;_hVN?аwY61!Ukm';i?kuVSKlEE:|,$LW8JV,fG PK[Xu5PKZuI-U#  META-INF/AD1279E6.RSA3hbegjhδA&FFCnN6Vm>f&)Vn"MM6ML* X/0adjI&mcp3x %̕R_n4(- 0 y , M,L,yM \:Q ی M @q.&FF>^h'vO/ ^:ghū'T0&^-><_^M ޜOV=}:x-=i17t˦^ ׹[ҫkUi?OQX~[i0/Q!L)-T\׉{EzみJ3d}++oݶBIC-FH}sC+f&6yDg\rz%[$ dgL孹?>//X[Pv-a0&ܳW-wjVR7e7}^K_`P6k{v;Z;]ˮl_+\\e \Vp CƼ+ U-nY;1 n6m+|~u>ߢ]7q<]Ϫ8q-Kuw)܃}DĿI0dq! 7͕mO'ξ-tS59Qk}+{DK7yql ݭOInO]&~`*f4 'ThEШAU7҉z; {kp݃0K׵Yn_졲VNjLFoN~P>`n}M͟g::q,<{wOܬjWd5p.`Q9yC˼GX]~f}xd((rv3n,)nDBBZǬ*g^^_Mc9&g/tcaw]҄wzE5mئh->GHIlsSW=PK-U#  PKfAtIqa()META-INF/buildserveridI0 &"x0]u֦ARPKqa()PKfAtIqa()META-INF/fdroidserveridI0 &"x0]u֦ARPKqa()PKeAtI$ AndroidManifest.xmlo[Eq7M$4&iEĭ-J[5iC%0X+ym N{F=r8rCgǻz>G߷;ٗR=-IE*"KÛ/#/c ^\N$CW{ k`삟o` JdԒC9Ⱦل_# 8cf'HY,e>b3өdt-[jLgy1\ylKUba0ogvV첚`\];XI-i&xu'dWRg\bU6x]W<¿s6wy.;M!yPM+i/32}jv\Ԋrkڶ''\;FKtޏ$sLs1'ȨSa/g%ϙb˩$ܻ](v"BթVk#Y0TJžEfR hv;ۿhm^U.e욭f{T&٘lh[z*N<(rq>EptA^(90 VAY UރiǛ_4*Ѭ|-\tA f>wFw-3vW.ZnB%=)m4iG#Q\bnZ&)ƈی9 zVo ^)_~ \M=5-xq;;vZeO-ۼmrŠFjiUZLz6 ł^j9 zVo ?ǟR%gr_MGd? /!6|VݩnҌ.n%w]7mƨz}g8U(szKaEw +AM_woZ?PK$ PK !rsff&res/drawable-hdpi-v4/icon_launcher.pngPNG  IHDRHHUG-IDATx[KU΍|Vʅ[ݖc$F<-+V=l?,,FBhv$K4-X0 c3)pU>ƣvZꞩ+]Yqww=q<8>|wiooo͛bfuΝ۟NW@y⋃_~(~G>8_xʲ 7mӇ jv&B`:=~4M,] zoS"Li:ǃ H;>twh!H߃ 1VVV@Df?[=Qs}p$I)0*8EĎ, ,~ʙ':p먚 RsF{$>M @$H4?!"tg9ZWVn8>GeȲ eQ.<J)$I2([YY_3"2bs!kώg@4{tcc㗃qc<K41ϑ)4E MfYb{?ĉ )R G k=.Z(3/27Q--;PJMEshμeqԼ]DHkMEQˢ\)*ዙ+[4ݻƥK:(TŰyyhanR~Y- nP8Oԏ@ي4MEPA`*$k)RX]]E"e,OܡPmHWXUHêē򁉩ـ 2ښb0 Mv~%[p`fE* H-bj(&Jy4EC pQEQXVCbOکG|Kyy4Ͷ)$ѸXp p8l6_>h9I{祺ECCj $"͂(0]#,!4UҜ*I}8Zڮ[ׯ_.Y%kceY9woH'U z-apࠦu 5q/^ĝ۷O?g#8@V_iuL&|+$\ϩ=wFX[.&'{`Oc{{~-"4k C/omCQ8y&!YIhb4բ$#iF;Z (>%e?/ "((dyҭ[pܹs Tmzؾwϊ^g)uvRMW/R({{ "lmmassW\im\8O Ȯy>@⃀qwa^:ޢ(#sܼy6"fpC:Fwu7S /5ʝi.@)>Lpgp5Ϙf|2CtP=79~q%UهnG JDȲ `flmm( lo#/ aeYboo[KUܵ,ëwyIWk,̘iIj><Ύ-q;hpr"LD9!(™3g1VVWE!>(`0H+(pUozD Qceel+c CF#L@VcN&9d3PF#BDHR߯2}"([#s$I0 p}lnn?g}5wFH"_TsDX#=2o钼ZJYB|h"("΋<ǍO?.\̌sagg/^~'760ŪFwrJSp5 [s;T$7hR0;2Ÿ'~Ϟ=t/?pb2ଏ;{AjJ/rE9XxCףȂm\v :޹$I>#s={+++/w(j n9,GukFpl ?}ŽAD| ֌sb}}_}$H,HHV|2sep{2zn$E| ^yڲ[/$3gpy|׈:[R`-tQE.jő'Bu ΂B^z ,Ա]Z<g/ƍu NUjtK*5N@O\MZ)@kqrj-PdnYL&Ȳ(ڞ#̙3H25eջ=Bч |G*K[md\C DQ-ɨ01[<']=NR;P㥤`qL"XzHsIX O}K(TJ D$b"TaԽ}[7Nu Tӕ&{BGq`4MoiJ$- nɃ0bZGϔeكy+`{m}TM-LfREEͼAW#2?=B3x INiq,EQmy.  8&^ l>x$HTBߌՄyI40:e38I01ŷ qJ6R X*9MR{l@$IИgsT<uD$ & zUUKp7XO?@W^}a:b4}C6,z4GHEIPDRrABT0_zb\neY~y{;4ëBtrA0!GU\kҘ @Z%%;uND~ۏ>{aZ_szk_/pxq<: ,IENDB`PK !By y 0res/drawable-hdpi-v4/icon_list_active_broken.pngPNG  IHDR00W @IDATh޽ku米HK Ⱡ,J%d C@#@ĊRvUb$Y*ʖcDʑ2,cE0`@@]˾wzޛ=Ybrnu힙y9Gpl ;7>-ʬ܇@MhC< zÆ W\Rj:ZyOq3Zk,_~hii&s p oԮ]OR3RZNgRWiD"o?VJ灎EtEX|ym3f)ץ@z.qnH$2+3RU` 5===u] ?S,D!b B(RJeV⺅h̡4_m?]tw3~8f53~n{mM,o;^y~ ,v?|K?*NB :ib*L6S b @q~a`vR!3nzIvȤIxMMix2 _J<ėWJHu6mwiumpsdOqg g?X4y5FwSNVss`ʕd$!$R!hs-$kd}MzUZ^02)Q+WL&yt^9efؑ%<4x .[W{1~jRkT5RB۸5c׮_]kx; ſqc}zf~-ڛoٳs\NH$Zr*Bkeܸu60vz>u?E?ٵ϶lomňЦF2hF+Y gg֖~z˦=rkduᰭ4o3T{éS>oq% 0p,ف? P*t!9ОbK1s6&Ν˥֞o=8xkTɃa\nIe_߅߾LwKfN~R'%1 7Cc#?̴sYM}ֳ|?Np71gy.VYn/J㶗\L$jk;$Ҝ|{j'UUCGհ5ιql0-snoP?D!nKN8sw(QU>zBU_9m^5UV$RXV0R8ݞv !јD(*  xY1IENDB`PK !< .res/drawable-hdpi-v4/icon_list_active_file.pngPNG  IHDR00 1 wIDATXWKkQ$iR fT* *"]ܸsaqc.U\\+_RѮPAI)Ң1Mfru1{#3.'$̤;s_?⬸7뮀'~^~9o?r nH][3[N<C wRrN 6n?{'|SAsʵ*"fJ (T䯂Ğև{t<GtPAZ91oy5҅,e 0nS@? 5(*vb(0R>:{#onY0jُo8, BD;é#(fE`0p04.1h`5~ ,{*ʲJ\"su2yޜ4{bha_BixճN)*}>KT #-p!$/1sʈ*7鐜w?)KFU3ީp}(|GLġl7aQ)}Â5KRTԵ9Gq|Yo $s<]B!5~ݬ/^1v@d `,MB%s; Pʰ"ICe|IT9 \Aۦ0@h^$9d%9} NsFXG6!6T"t"Q>fE5tæI FfXYz/.aPb{ ZYzE|{5H0=xE-}x Û 'o{Yan*Ӑ;ۍGS>IENDB`PK !p*0res/drawable-hdpi-v4/icon_list_active_folder.pngPNG  IHDR00WIDAThY=\W];󰟜8 APH)Q AR"eH!$TR8RD Z')0m(ι9ͿD%Bܛ8?׾;f3_4lf/n^/B/tw.}?|t|'w.-0,<%'a9ןo~D0 $D 3@p2cG__}7-ɰS9_2 @"Ϟp_ߟ @0 }Eo8hr~gAsCrX$ y1sԕ?/$_8w(7Z^R`@ٞ@h>X`y|mratlzW|=vx>i`# `.j44Ħr3?+N̗{~]~4l6KpDO ڲTnX1?}enZC8a! ?>i B$܀HAEaxeM:¸J5 e&c>6YX $3v)IENDB`PK !@*QQ1res/drawable-hdpi-v4/icon_list_passive_broken.pngPNG  IHDR00 1 IDATXÝKl{gHeF%ǒHD-M70ڤAȪiM^uUE6  Ѭ} d}n(#5Տزșt!9/P/%,"Grhv|<<< v#H".j-٠MM <#p%;Ý7p.# ,!Pɣ}/\/hDgf#%MNY/7%eK`.NڼREm.]= \ RJ]}{'E:RRE[8EaU_~rؑp(qKMvhPA;.1xYFv}Fqh&'u\\vۘݳp)%h|zԶp$DL&MkiFC5el_m,O%n ;1H±=$ @?Wv;$6&X_T5ċHfSm*x:/>ҧ"iI :Z7?q#eǾ`ggid8sz딹&-ja`\_[Y|sq|,YWMR i|p2p4iSd8~˭K%i prp 4_ b } ?ِB'{6߆(s. r88h\,rʏ_y * RDK|lqXe_8atWeevY(uVQL2,p=NtѢ'``<,1*=Me|&D676a;|XEq$d= n1\:ݠ *(.a 2$ul1JxrR [ϭ%GjI.52G`0>ﲈKƧ>o;g4%sj6"i| 6i qmɊfF'.y1CNkҚWO:8&50 .Lr jG˲Ky?'s` SQ)Ff=jͪssy: C0|2ۋ%v*SO{rȡ!TZ|eyw6?l~i[rwm]l-p`oIKIENDB`PK ! oLL/res/drawable-hdpi-v4/icon_list_passive_file.pngPNG  IHDR00` PLTEIII CCC%%%$$$######"""$$$CCCmmmEEEVVV"""yyy555```333BBB222 @@@aaa111000111***vvvpppaaa aaa999BBBJJJPPPOOOUUU"""'''666bbblllggggggfffeeedddcccdddaaa111 999LLLFFFFFF@@@yyyqqq}}}wwwvvv|||uuutttsss{{{zzzpppoooxxxnnnmmmlllkkkjjjiiitRNS"'((# 8PUVVVJ&  9 Rv zr8h t ,ІX&Z`)[=`baV$IDATH͕SUƋZ**LEEFe*Aق2DāP 5M&IsIB%@gq "9y~dd@P!Ƒ?0L2ק8o8vDx<bղaK@0S9<H"LX߮of4oc<<;̚ JAhy>apfa<ƃ8#Ȝt8O؍j'67`QюX,Z7PjOOSKn#^ްjr >˼ ֘tĴ~ikl ~BWbXW\NuZr@oL3l릋ڔy1(4wp>/ޠ/ Q>ǣByD6oٺm{QjQX#\t ^ ܵ=ē+' (}@XzR/~iI},apR3~x xJ"G(#~9t$֯~SEGgΞ{ΞpOWKfIENDB`PK !s1res/drawable-hdpi-v4/icon_list_passive_folder.pngPNG  IHDR00` ^PLTEpppnnnooonnnsssmmmzzz|||jjjjjjyyy|||jjjiii|||{{{||||||}}}~~~kkkkkkmmmnnnooommmpppiiimmmppp~~~}}}}}}|||{{{zzzzzzyyywwwwwwxxxsssssswwwuuupppppprrrmmmmmmnnnmmmjjjjjjiiijjjggggggggggggfffdddfffdddcccfffdddaaa```eeebbb___]]]dddaaa\\\ZZZccc___[[[XXXaaa]]]ZZZVVVXXXTTT___[[[WWWRRR^^^XXXUUUPPP[[[WWWUUUNNNLLLMMMPPPFFFJJJLLLRRRSSSTTTUUUWWWXXXYYY[[[\\\^^^___aaabbbccc```ZZZXXXZZZPPPFFF^^^___```ZZZ]]][[[\\\aaaXXXYYYbbbccc~~~}}}|||zzzvvvwwwssstttpppqqqmmmnnnjjjkkklllhhhgggiiifffeeedddWWWUUUTTTRRRSSS!PtRNSo_(M J04-p 2a_E"zQ+G#Q5uy3f, #-'0qۨ-0u;{?2k (IĊΝ/Pp,В(,[cqN_HݱplJVN$e@F֬EaTy*$~7lMpڀ)tp*g#uIf(EMvZ6ٽ  Mib#cY@!m4?kkh$0CpX&"#W'D! xs5YÇP8}"aAv.= ٌQ UgK(\faͯ0T#Wp S0'*ܸ­w޻#.xǀyRv>{e͟?OrGcLIENDB`PK !4˖&res/drawable-ldpi-v4/icon_launcher.pngPNG  IHDR$$]IDATXXnG{wvfwˏ15ȁ+xHH+5rDBnUUUuǷ>={f=~ѣ֖uv/^ϓj^kDmbܠiARKKkkk<}4 ~{4ϲx<!PKzs2eQJnmm-jsVIGc;亮DaHeY)(:^@ ̓Y%Zkʲm ـ@ >+|!peC."ZѡRj$IY`؜H! <OeAD)4 ͺh`! Ã^12 3D($IJi"s0sG#Α 3Xj@J)i"y> eY5K@2j PJ!2c& E]) RtXW*-$:DDEAD80sM@& cxAKEDTraR ~RWRJՀU]Haai+7!t]Tۛ!cLMO0C?bwwyE00nygfnܸʰVR4|un#"I(y 3CkR|b1 *t+0\EFuu&"hB\dUMV"Ğ+w8[@)ut:R\XzȄe$"Rׯ#|ֺSy}ج@Ƿ,mnJ#[0׽ks#ABjhZxhCb xA_Q@^QHj`1-h+3e;L2;3 e6PǓW|x2~RJ)vuu}<44tdp &sFp5#@J)(0 nYٹnhhG"^122|ccca,MMMxC*߿dP@J(<|H&\ (@WT{8̋Yd KWMۍW]꙳Tu[7o=L&m)e/w;Ve&BWLвqfm[x'm݉SOe^d*/oAD"z E 聖sٞOƶ֕ܺ5ztT_ݷOH^׿߽3kGO*ַ~ݮO>~WGZN0IENDB`PK !UVV.res/drawable-ldpi-v4/icon_list_active_file.pngPNG  IHDRשPLTE FFFeeedddcccbbbaaa```___VVVΕЙƳٲֱݯЭתɨǧĤž6tRNS$(((((((("b򆤦R =WԎFIDAT(ϝVPE{])4"((6Dr ǽ:3k5LMm9u M-mo?ba.ϬNs%#IG3,1@#18fA AVt)N*r%Hߍ: ඨӱ۸.F`ŨbIf(caKXbX^8ZG1\Z<>MBq{^cٴ >N"1cgQVֹy܇!f$p>ç^87Yו5Ք4Y͐4ʌ3W‰43×U3{2”U{4t3~Gn2s3v4y4{5~7ɀ7΂7Ђ8Ѓ8ʀ8~6|5y5v3p6ՙ4՚4Ύ*΍)Ў+Ϗ+ώ(ȅ(ʇ,ʈ,Ȇ+gfjjiigjgSTFHH?>>???@7788889988ٕ5֔5ו5ؗ6٘6ڙ7ڛ7ۛ7ۜ7ښ7̍3ʎ3͐4Α4Д5Җ5Ә6Ә7Ԙ7ӗ6ӗ5ѕ5Г6ϒ434É4ƌ5Ȏ5ʐ5̒6͓7Δ7ϔ7̑6ˑ5Ɏ6ƌ4~2344‡5Ɖ6ȋ6ˌ6̍7ˌ7Ɍ6Ɗ6Ç55u2x3{4~66Ń7ȅ7̆7·9Έ8͇9̇7Ʌ8ƃ676a9AtRNSrtttttty)...---+** IDAT(c``ȄE͝&^ -  H1qDxDD$D!)OH%&%g@zzfDB1;'7/JJ!*eUU5u Mj ֶή޾  &O:m3gΚ=gDaCEUIENDB`PK !eB$kk1res/drawable-ldpi-v4/icon_list_passive_broken.pngPNG  IHDRJ~s2IDAT8uMHTQә/ #(҈i6-Mƍj}HEPT&* 2ٗ3h>5=w޽9m#&A.[»sI4[L 689\2tN c~fЂslP C,$$3(7dZ\t9LX,4s$3db 9U%{bKIY_'8 U{b mS[O>@mXNg57o >czh>Vo+~ Xoxm*6X_A益4p_ߌVwlh:N=I&s0gPy VʨIIENDB`PK !nZ/TT1res/drawable-ldpi-v4/icon_list_passive_folder.pngPNG  IHDRשPLTEqqqjjjmmmjjjxxxyyyzzz{{{jjjZZZooo}}}}}}}}}vvvvvv{{{ppppppmmmjjjiiigggddddddhhhaaa___iii\\\ZZZiiiYYYUUUXXXRRRUUUQQQUUUWWWZZZ\\\^^^```bbbcccaaaWWWRRRddd]]]^^^ZZZ\\\[[[|||}}}vvvqqqpppjjjiiieeefffggg```___aaabbbcccWWWXXXSSSUUU8tRNSrtty)...---+*."{IDAT(c``hLX$--,YXـ&e 60`絳wpv@ގ"!(!"h@T "! $$!Rnn(@Z"!aar o__?7-| ʶV>@I*DB- $ VP@/_++[M-@G+7XaIENDB`PK !HH&res/drawable-mdpi-v4/icon_launcher.pngPNG  IHDR00WIDAThYKoιU]eLH&L6H2#VdaDe*#!$@2z{NvٸDJ$_vu{ \rw+o>g{9aMTU0U] OAh?<~ϟ5oqZ{ƦT<BB\<(I{l|>crA-C.i귢610 i6Yj/F?8i<#IUU 穈PepꢟQg :F**TEv2X:`Xιh$HU-KD^Q9JNC *@Dt:0L|b7 "ΡtuEmc]pa\7u"uZEP8H6v1W$ir.چiUy9Fw>)?+[mdbѐAh[i-Bq~AHBA]wH  ÒEPUνZdY(:jCAHD6D0 UEX.o,YWTڰ rY]̌ eYݒ۷Q:|-ʁ6sPS)ku[59>~0 Zk-@I3a O<a# CF#q(paMA0 M&ATD@JaAPf9`"x4M1S<{ {{{P6DsMcXW& `)'-4F[GBH/_͛71 "N"JF#TCX\7qK!IK[g^zo~MS SFDԼ[uNw+aufQRb[0!1,޽N}iŸ Z.V3Ȳ>a:"IN N!Vgur녪<(OG)>uİla@ *jNNB&̀ c*° $@lnn"9I~Sh5Z/u%u !.ֻ֘yud,Sd6_u`*ODMrS՗FSsJYc@ctĐi&m[[[HӴQ`Lisْy/= c 1YC{U_TỺ>r6ǯmȘ efh%Axyu*cbS+ ,:UQPUbfQE=$MHD f> Ra37!5kRTWBE\EdCU2êrS\.,Rf= .T<2y/Jb6FEijXk?弇:yEA_BR3$# pu zu h6Z 9c0tbf\zU WsjdR:-1cӧOӅ ww1F1 }_XE4}Ź_~0ƨ*RRfRQ̩5uO^ UIDd9z!r]ջ K" 5 IENDB`PK !0res/drawable-mdpi-v4/icon_list_active_broken.pngPNG  IHDR szzIDATXí]lw>k;j(qd;T qDJ&UDSniR!UTRѨ"PC)JR!h@j }0Uq vNڻ3;;ֲ+r{gvΙ{Gqy@m7IGyT*-3ƤDD͵P7{{{hgmbbOMMME$Z "Xkg+jrrev&i&pa.+ V{5`Rl6Kkk@'(>C`˖-u RXkZZ%Zkiii#Imێ[kWcdI% jRccc={q(j*uږRMﻩTJR)}|<L]k#ĽP,bE`5ًck6=ggHjޮNEEd7{=<סW0׮Gq&.b4ǘ8Fet.GQ 荗ߩQ֎?|9ѥKxhkQAddٻ6$1261:FUVsҶvm9}^8.SsKcXϐ(_zxx#ގmaXke흋^|!\;4eQ(QP۾} }ccg`3THXF !iNIcG%dRT `,V,b,V]]'d}il2t):(û iq1A)D蘒ք:$&|d~Dy"A_O1ۙӟ:IO:\TseҝruPҚ@kff,$]]\)lLF~?sW0!i9yA:%29ȱ/BjOj~iFN >3u2lIDAT8˽_QBU,llFf!` hb\Ҩ?Ƚ_ysoKSk@lop]G7l܄ٵymw5{G@nwGO8x( 3,IAӻl>rTQ_A"|BxT1p,EQ)xv )4*@J8B Rd5H;~% RϿ@#>GO tӍ6t02E"d!aS%S}>G{,Δ.Rm4'zEs<}Ӵb׃/ھ-T`za1n+ Z5%?UM&3$pN su\$pF|,ؼQHy˙+WZŸ9W?q&pYOCFfXC;}G eᇏFF?yll칭/_xX=?{;}IENDB`PK !e hBB0res/drawable-mdpi-v4/icon_list_active_folder.pngPNG  IHDR szz IDATXVg}ov!; $(R$RT4TQ4(( :$:)(S"A(P%.po^Y߮}ֳ͛7-ߍ t7ʕc-.ŭm&rr!m=6<,g^vߝ8{{UZ d!@4"ۿr #o(QdCi –,7>y6L79(J3?Λ$[_ڱg1G6vKF;*̣+N0gKxv% Bbb]@Nŗ7>?כVb r}4S>LÁQj>@$>4'=XVk~ͅYS }tnnN ^441?sJ˨ d;`,a|b: 5حZdL*aN>Ӏ%" Ac 0z[ r_%p@} +@ ^ &818>"k3Js1 'A  # ̴"|a Fu;i5L *1J!@ARu4Ro Y{?Us0%a0{` 743^ #˂sp=XHizxlE"z @VZyħkݝ_^+%((@L[ 5*{6z^-ނIqH`4JZIENDB`PK !⑐)1res/drawable-mdpi-v4/icon_list_passive_broken.pngPNG  IHDR DPLTEzzzxxxxxxwwwwwwgggppp"""555FFFppp}}}zzzyyyxxxvvvhhh [[[)))yyy)))ttt!!!EEEJJJBBBYYYyyy (((zzzeeecccaaa```___^^^]]]rrrkkkvvvcccfffrrr555===]]]ffffffaaa|||gggccc{{{aaayyy```vvvuuu___^^^rrrYYYnnn~~~zzzqqqtttwwwxxxsssooopppllljjjmmmfffiiidddbbbZZZ\\\[[[WWW]]]}}}XXXUUUTTTVVVNNNSSSRRRPPPOOOJJJMMMLLLKKKHHHFFFGGGhhhIII===` ttRNSI.F P +Q,+R+a$+I(-$+#5J{t;U#G`cM IDAT8mwXqm{{kvdpJZp$ 0ȴLQi)-m1?:WAZiԸMf[7۴m[- !)P= бA'w܅p`ry<>AkzK  A"DQ?$?` OTa,O%ØA^aP(a `8P0lF&XF#k :=6`U07'K Psuj=نhj#F\- xt4hXm I-ƌ#p0R=?DBdJ-nr0%eR)S ahR-[J$NSEpsP^XT)Q:fϚ 0é`eZZ\<\g|c4S+d(5i΢,Bz`|MHu:52@ju:Ǣ [T6Ciֽ0K-H+(j ^brف9\Ui5깮ՕnEzmeeޛyq5k!:|<%I凫 ƛ J;C!rKb/HPCTTTĢf/vm m٪G 33>PMEIKJK>9eB@;vJܘϥnrvJxnڳw~ :|W ?ǡ;AΩYU+pi5Y;%uk>P ~=_ITV(IENDB`PK !<ُ/res/drawable-mdpi-v4/icon_list_passive_file.pngPNG  IHDR DPLTE%%%$$$%%%&&&'''((()))333777μ666ͻ&&&̬ˬ///Ϯ222ҵ®뫫忿ϻɷȶŴóͱXVtRNS1<;;;;;; >BjOj~iFN >3u2lIDAT8˽_QBU,llFf!` hb\Ҩ?Ƚ_ysoKSk@lop]G7l܄ٵymw5{G@nwGO8x( 3,IAӻl>rTQ_A"|BxT1p,EQ)xv )4*@J8B Rd5H;~% RϿ@#>GO tӍ6t02E"d!aS%S}>G{,Δ.Rm4'zEs<}Ӵb׃/ھ-T`za1n+ Z5%?UM&3$pN su\$pF|,ؼQHy˙+WZŸ9W?q&pYOCFfXC;}G eᇏFF?yll칭/_xX=?{;}IENDB`PK !%OWW1res/drawable-mdpi-v4/icon_list_passive_folder.pngPNG  IHDR DtPLTEjjjhhhkkktttiiiqqq^^^hhhyyyrrr\\\sss|||iii|||}}}}}}yyyyyytttsssyyypppooonnnllljjjggggggfffdddbbbggg___^^^ggg\\\[[[hhhXXXXXXgggVVVVVVdddRRRTTTSSSQQQTTTVVVXXXZZZ\\\^^^___aaabbbcccddd```[[[YYYRRROOORRRTTTVVVXXX[[[\\\^^^```aaa___ZZZUUUaaa```aaa\\\]]]^^^[[[jjjggghhhppp}}}yyytttsssoookkkfffbbbcccdddeee___XXXYYYWWWUUUZZZb/_tRNShf\neYYYY\9%F*FEEEEDCB@??ߨ$-----------/b3IDAT8R@K]{Rv)Qlbyywx xL8s̜A FQq UZ7(d2_PTBE´ h▨C{]bѲ{iݯ9BCw.e ~Kp1':q鯘%4ca|;q5 C Y`i+*2%LV X]K!L” P0ނ`{7(lOtJM.{GǞzF}^}ۻ@0 GC8xz.QIENDB`PKeAtI;&:res/layout/filepicker.xml]N@E&$v"DAA!* D@MҢ@JH""%5EC @3zΎgez,IN{Z:8ɭCt>'*i.qfUKyjU)n9n9j$VLyC}fwj@%ЁtC_;ZLg_!3QTȏpgx-\cbLn׵[̗#S_&~>1>ハ>|j1D~9=.8ǵ VQji!$-}ZK@ t=p x d`~T2ʀp < |g#kp:E`"bw@fh \nlZ0p^nuaW/?8 dQFqDqAuw4C4>֑Bڧ1b1ӈM3x\b<Ѻ<݇LșhәE4.ZB׺0ZekhqC%}`W#탺~=WIp+壸*7GbAQ`Nh?VUsf+UQtE^Қt}4">zĤĤF1CzJ9V܆Qm>ƫ}zjǎzKxo9Ý?lhձnӱBիRlTGHnw|rRQگ5Ok.߅;{y~IO5\ncU%5jhM }|juD=jrk|`Jb:ϭ{gMg@h*[~o{my<v_&c|P~*<Ϛ{9,|uի0ro_u볇·rJkV2'`TVz~f>W%IT&y5z\|YgF62Z,pZyrC&@S q؅(QH╒'O+^{ZmM\}:܎WBd]Qv%+"WG \_KylXŹm9C3sg芭#STΜ,ZY˴yK-mFs5 \М~^=4׬QsXhd͕9>=479ӡ9WhbUԜ%4oܴFyBzּޡ9?IoHQKxeO QK5RQᐵD-0V-JsPh }5ơW*a'&_~cV~ۙoȼ ΄;E|τzXmXzpδnVi@#k:pluȵՑ+q,[̑pN5 f5 ;' oɱe8$EZ>3;ZE/ʱni߅4e8L\bg2{8GpعLK*c{8㿡4o8s4e8F?;ḼJs]pعL|L|Bͻj>cW"~Qq߇XKZt Z*CCKCKi{x[;X>}i=»/{ѵUzk9 Uz(k9=cCw"w&wߥ佻ǻӡQx}bmauSǙs{h0-M>ZN-B'Ze.в]h4,_V<`sPK@ PKeAtIb ''res/xml/default_cyrillic.xmlŝU. ,EX`&H/KHi"* BkԨ1vbC7%cb"1D C,sΛas߻|9Ξw3}\Pk~EA5/YU:  l9`W(VWv}V 5X`6 lBV v>Zأ`ς6v׍)r VXC:6l$8`ǂ[l؅`[v+]`{i> W`߀_. 5+6 l4x)`Vv`W] v`wm 8س`/ػ`} `߁ Vk]X#`m:u6lX)`-[v*Y`] l`wm$`VX `= 6l* ցm{-wv}^V&X#`z6 lK ,`om l/XP`u+6 l4x)`3恝l5`]v)U`׃l`[ k` l7BOb`ZulHq`f;l ؙ`]v7&`> l^X`  v,`] im`_W V XG`#ƂB`^ XPj-X)`v4]CeY )͆}mP҂A`}҂ \9@UЫ0X E\2Ϩ 2 f/D/˂aW 's=q":kk>bGB9R*_>$Q\m;OjtpC}Vw voO=η}m_33v.]W]W~\pX0ַ]|շ=}˷M|[÷5}[Ƿu}[Ϸ}ķM}{ovT6Sz}1/շG(Nmo sپumoo|;ӷ};Ʒ2LYyAu3߷}˷wq߫b[n:C|ݷ=|Ƿ}}Ϸ|;ط)U-oooo'ߖ=·|{omUV}ǷvKVu*w}|u s߽?K{߾n9pTu]ag97L U|C#`;KT7:wY~,}}vv?"< hZv'#tK?Ϛv8FrP8VgHvoG"^hk߶m;/}{o^3w{F>qێ}o7QmWW#`+yH~oGE?Uj<#b.u̶mj:9 ak4u] ϫ74wJW`̻ss?&)S}>8UשH.*>˼`N9;{7w/^{x7<]ּyڗK}\1I;OlaۣSEE$]%gԼ]ykUxWܷubꊨ߾@x.X3找ݑww Gp41WgF=.}<ӕ *2]EW8Zt㕄Nkͥs)4RhEɥWjT9xRGh)Jܗ}Qj<]xظ.y^WyO W'uqxxLG(N-6d}8ؐ_5`yH]^C54jx׈.1xu &kxRyM_7^WY3u-{r81Zb, 1bX#Ő81`6,F[Q!F;ю8c'F{ў1ʧAFߘm*Z9?6 {z2^y vDvGuB^xkauA^Ɠ8x- xRy=D^4<ek <, B]/"4!^o6x}ׇ./&뇼~^[?3 @ހx70 84>>5;+уb>Ժv0  Ɠ8oxxC7^ɹORK^rlEɥ֍a-X3@ވx#p7y#Oh5$=]Z*zeF<Ʀֺؒq4c4c4I]I7yc ^;.oEJBxr-ezkHHcxԍgyHMɱ%ukƓ8țo&x țxRwZ>5> q2АK zLNa<;yG'ě<7W s%P.Vr rL/\?$kwh]bDz\r}rucnXp1MC޴xӑ7=jadE\f`.3"xBvGѵ߇\Fr}rucmX8֙'uƓhZk.0Y\r}r%@#蚜s32ΐK둆:cxRGh<2ske!'WZO'2?oqk:lc>\.o$;yxGx .o%;y'xS [xRyK-E4<yslp`yo8C~'D-C޲xˑf yb<[ V"o7[U'uqx'!滑x: 3DEedԝ::gi*u76'n]ߥ|E"bXsc\hC!"Ř3QɊq q)P0e,ND 71 Ɠ:YɜDޕ,c19_1J#) gwG)iڨ͍j]#~kO[.[bHVc+r}D(ugهӴQǑZ]#@?f. ].2"\iZ9WaX\2-"F]lзŐ81nDލln9P1lѷ>"KreOn\nasp+GK,>fܐCsiﶈw!?혹}Ei1d~֚v,܁; ]iO4mԱ}wF4?>([俊9Zq_Bg\#bkϣU&18wwwa<ۀ ޽Ȼ.o#6l PuJmX~FC~>mB&&~xR0n6Dރ'uqx!4<[z>V%??oFf>Yn'ma1A#1^z}(?M+{syݐ쓍w _b*l~{<8XDl$D_Xcc2| =BF<7=>9D|b QNNŸ9߳TOMb}hWr~{0[Q!u4Os{{ACEHr}% 뫝6s"^dk^bIZ zӺ6g=V%RZJ>Z>bXKuGy}>f>46ɹ|?.O0?)/_<%=Lp=edr8" ^A+޳ޫ{'אױ^Fİx#  ٪ԋdyH]ߑx!;AZ'WZk^sStc}:Ɠc;7 Zه@9؁s#i.3d}2Q3}:Ɠc;mCsi94 .;u`yHMɱiZk.b.ryא+- Y ^9':ƓcӴ\va. |hEɕYߏ +?g>6P/40he\iIZ4l\LZ~XRGcxrlCA+JK5#.}&k9s6A/ u`J]޿x%dR c|bcOE|}Ԑ5yރ=,}c'ú:Zsi]eZWEk+==EݷsO~XnEi1Z~#x֜"o/`?C#OŐ81en?bl /%M R53=(C155p1tlrqs}5$b45?614o^QYo9̯Oh4ɠ}r%!ka-7\,,`k)u46'v0y+-ʮ1?T^5.kR zFJ]%Z#/+4{&J]^UHWy_IũԆP EzɆKj"uqxZdEHHT3ԋ)Ľj&͖֭{$+NȫbTA_bTE^UbQdQ yXbHVE+b1jFB1j"&Q } :]yXI,YqbhuZ}i1(ΰN뢯.!YqbhuZ}i}OE=Ӭ'2'o}Nr,ЃG[dv{kh5[!I]^#UJ#}qWM2\#48B-d< Oԑoȹ_׶ B]/"4!^o6x}e.oV$+#uR/ }`Þ,R:0kpkO('sIRK!k9,lpC.O.n# k݋D('sIRKCra-u$FeF<Ʀֺؒq6Cix%!<96هcB|a͵g:06RGcxrlIk8ơ#CBYC#ڒx@O4<7 : &EǦ-@ނx=6xGxݑם.z$뉼ixs{NJ]vlx='xx7Y o@BGcC 84C~=4GunPl \4%I-g /8,üh3:ƓcKZ108'uƓ$%s8xx.$䝔o5Vz9P/k67uXR7y Aސs2d\ivȚcXst8ꆳ<.oF$;yGܟk{'WZ\{_9,1 "ol}r%BBÚkK^d 8țo&E_l{'WZ_\{M2ÜNAME s/JK+BJÚk)0ǡ8MC޴xӑ7=*>Ғ5_kXs31LdyHMɱiZk.0Y\5"JKBzƹt7t<Ʀ45\C. >ҒF俉k_[yysEzVzh8<{n3@'u76usyxO#bXs c\GC; :ᝆ{J]vOlx[5玫3Ջߵ6"F6-ېCsi3#ViL4?o{ u]FC.OZL#kCA4\Tܫ2\Ѱ?Bv-F^xuWl#_H]^IWyp^%G 5@]5B^xM{k'uqx8!^S5M#c!x n/~°@] 5ד81Zb,{h1Z1F!Ɠm0F-#YqbX scg1,?r}Z9~*PywaNw/3d8n5`{XRy {w/I]FmL#!П3R/)dc}:S'`hwOWZ~fXKwM?7vOoi<9 }r%Cra-!ҰƦ45O1O |eEɕ Y߯  sݿ[hlOMZsم2ǐ+-'֑0?_;ֽs^jW{^A콆,uqx}i xnN~0C 4|nZ:hhDL#!O}C{}gAi͆W㹹0Նʹ6G~VyѵX~~t.O.np1὏}_ k]'V0Th-5\˃h>Ғ0d-+R&lXK힧RGcxrlC[Š}r%Uf?_uָ UvW=]Pbr:hZk.o`.ox5 /%I5<|E5/&k%ņDNmm:!'kHZsysya I˴a!"ݐ˹!oQ-`|XnEi1Z~#x֜"o/`G~b1$+N 9[c ~I Cj&hl؇diex} k(cIŐiZk~Zmc~i#Ӑhf ^osxel!ZYW;0\Zr}r%ː,1Y >jKCr-wb; 6"JK6!υچ<:\!f}CsukoA.O]lxo 2𴿃8 )"*p4$k)aH]V/z ˰^.OlxZHˈ ~za?-Ľ0oΕW%YqbTF^e $*CՐWŨ,dʼnQ"j$&jW+M \sdX+f9KVZF_bhuZ}u 1fXuWŐ81:z >꧉A#B)z.ʵ}m`Na0p7phlR}Eoo'uqxW) C2zH]a3\C?5d=Xlh&l81") } 13h,F `1$+Nkb$M O Ygd׊,Yqbh} 1ffm׆Ő81mibVr8/.WaPKb ''PKeAtIA̾res/xml/default_greek.xmlŝ TEdzi.QTDD>DUShPQPo@DEQTta‹@ufg]םugݙ̊UEW?^fdWMk1uՍSؙ[3dZv5,`V8sQ~XcN V X v` 6 l<4`-l F`[^{ -`;؏`B`u5k X|~`C] 6 l:l`-[l#fm`;^vc//`2Xu`uZ v 4`[`/}=د`5*3X>X?a`#ƂM+ l r5`.`P rk X`cƃM+[ lj`Om l/~`G9X-`  b` -[l;>`V hk lP`= Q+XƜ V)X+``-[lg`G X|U4Sh3Aɜhz4̀?wfkgYّJr*3}9j)vmfAty)W&ۦ;l=SAd+4h_較{~h]6SF{5}u2Z m3]Z ~ZS)tzE&x#52m [: N@x;^#UW|^ n"Z6Y|=kڹgY{{knsj}sw;vTqq;:w|(תn7;%w|_s=W*w\Zw\aw|i:z<rim:gu?A|-rZjc`|[bಾ^9N1j|3HUR-8d{̛G%|!|קñ61٭ q5wl޶cHwa[3=/jEn-IjO7TM*vE#ZwiE:;gWhWx,|<q&ڗgɎX\&zѾC}{ ʔk¬^ÛVj`ewt?|T=7 n/ RckqǔޒF)zbGԜz̵쎏08\&Ÿ>P,X[Wy%m+rc\ Y^Sͼw r"VfJG۫?㘿8ozɬ%o'wB BoMrzQӨ9 : 85*x܆F#Uhh=sPY!MPq.jTJAY/oS̩)3eĮ//C\y\ey ^ x<.y-kV ^kx<.ymkixohJ<42e枡"v˃Dž#}xA;G눼Dž򐗗%^'uR(xy;/K.뒆GsMy@߿4c~iޜ盒kOs#]{Z(έ+zȻ KnT#q!%^OTZ)x^oᑿ)]Ɣ kO[E~b܅^<.,.BE ^;b]x\]%^_U+x"RBx/K럆GFMߟkL=H)NXަc;+byy`] H#yt}2TQwLbwS drq{ o1yCg)49E+ry{9Ü!sVq15zdIJԸӸ 5jeа}C#Pcq9DH/Qs ڜ P ==+;O{ у4y?)6|;}3h$ͯ"?>l~c7 J=Bfа|yO4l~c76Fȟo9sgDob|LVa*oC}^nEkAt6Ysh,%l%Ksd#v"bOYn>Kc\͍X҃ >kȾ˕Dž oMx <' z `-֫6zfЈobM}x)["E߯øu^<.o=gپ_,x6TRlڐ4G%q\ҿܪȅ)X{)eBx1KpcK=ZxNSA ٛ\y\Q=%c{L[mFfh}x|}yy剔F,i<OzOi47l iQ(i{˃DžA3Y=g{c1xq*8+\WL溒ޛާy mAڊ^nE릤Ata.ۼCs { ̞ {!Kw4>BG >48+Dy4b|o|?Cg^n!\z}_x!20Ǒ{=ķ<^R|k~AMyǾm;}E,o46/"֯=e%+L麔=eO})]R~K߇&y+Bx~xIx~xQx\Oړ( OړǑcSH64I?\?\SOڣDž=z=zx?cuA=o_2TG_צdm:,='ŹI_Z^7uSR+y\Oڻ2 OڻǑkVP~a<.,âxGIKF_cΑQSE^)ާA+z)q!DÝ/p;;o)+)˕Dž$zmhb'i͏=#֒^1z+^cDž=E޳x(ڐbֆ7?_Q1U.R۔g=׋uq!G[H$E~ h'~6grD]My5U1n J5-i$oZ̺k(?I'j~4gڈ{fŊ{3i왊{Y3<.Wߔ$<鳦Q<<.'}'}?;bm^͍Y/<.'KT/Qc I' #z!=]O+S^ٜ+;44nThh7!핝DCW6gAD.qes)fJ{esVv$RJ{eGiN9+DCSi$ڽ9" z6[{{eߪMqhljxKXG`SVv]` 5 ;`.^{lX`~09LA`<^% or8%z39X_/)8w悯XlɠxXt`&NTee*ZV‟yx |D CEMظ%6 9GKBr"3lܱ<Ϣ_Tf(jw7~]YzA+]۵eX0g^SAdדz],& _5/=h[ZDK~~jcj__'va]gڵȮ:ϮAukwkk?`.)~:jߴ']7z|ngs;o)}=`u6c{>~ˮֲۭkv훩|sG"Flךv}ծ}2y욲kYֱkm2suw.HeZۮخ1v$s}TPaϬ%Ykyv-gjvFVص]߳vl#ޮZծz|{\ۯ9ha63TˠCf'v}ZU;N"~/skb7"ӹz a[BV}=_9yc9-Q9__D"GY =菫bU*;Ϟ0\`ص.z[Lױ뤀xQ[<_O}NLb9Odvi=(_wzfu]:ٮ3E$N\z]eپ̜guڑ97'u]u]o1w6)v5"a63tZu<ܮ+Ćzg=X9d]Gu N2°Z-eQKYA `|$W):\* n j&a+pW}83Tu8?, TUUP|G8|US૎|>Wj06bpl<*)D\MG᫅||+j#_mA: W8|G!Q!|♗yqϏt>;By>꣯^q89`N#QMhh9998WGcM0G"GuE(\qr4͝-0GG:ÜDM-}sO]G/?[!w+G+k|k|m|u|mqq!_#_{Q >g.H;|uH#u #aSzǂ枡B1;qq:!_:#_g__q\c؄"_W_C_7q\=!#hDWh8fI|6Q`yLش KB !-kZz'Y n zvbB_?stp^`[*<&WlڃJǐ ˵ @-|C:gM=B rtp^㵗Z-Q`v -<&Wlڃ^ǐ ˵ E-C; #:C=00Qo8;:8j/KXeB1 -<&WlڃIǐ ˵B-|C9K=wBčqtp^㵗Z-ǣZ*\ic,cBK7CZ$,rj9!!q7.y{<wp=& njZ&*Rh1b,$$ -<}yvw@~ }S7qq!ߴB_1b,tt - ,`y N2Vǐ ˵,G-[|+BB znBJĭttp^㵗Z-P*Iwq7MjF-Z&*"aQ A5!|3>9S0)nBZĭutp^㵗Z-S|S|oq7MjZNShcHZ֣ |z z<nBmptp^㵗Z-g3|E ȷ8|g"ߙ mBM|1Er-gی|C?;~N=gc\swj9;s8.w~B|[oK|Ey i\傄.D Cȿ ~a=5 H"]8k/aZ.F-+,Vh1Er-K.3{[!-k \/ y^DrwboW G$>7 r%jReB !-V<\B"V(cHZF-WGe+Z/P'Akuqr\kڄC|(G>wݐߍwo&8|7# ݂|`<~ I9MV8|!m ݎ|++@;>w'ݙ]wtߟۊ|[#@>>Zs(c({s=S1b,X{Z6)|aV z&Fh9[PN q//-{crŦ=X^+c%y<3Y:7FC9%,\ ,7B Ky.珿VhDPN A`_.Z R{c%<W_b\c(|(/-{crŦ=X^+\crŦ=X>G?^D)͊۵)aD`S`yLشk(QZxLشW_CC Aעݤ1X_.Z f{c%<_;bܮc(8|[1ޣ|ao }Af-+)a=9E>|cT`yL( zRE1CO!)G{+Z(<&GX/,3X=kW3{qqEg# =|V> ,7I Ky&gRz3zq9:8.|B|ېo[\i -)|a| zv鋈{qq^B{^+ĽD՞M{|>^QhyI Kyv_ gfhٮc(؎9G`_U`y C}x5!אBD)-B uz_.Z vch  |oF𙽽o#p4 { (rh87ߐkBňZ`wUhމ|;@n9Wbwx/Q9"GD~qi}GRD1LJ!|י1tb><'a7ߏQD\/`-c}\qrh\rcc7vG0u1OFGF'$"Ga 3nj3 -@9 q~cHD-_:5/`|DlO 3OZx JF3_靖LO:fFNE\꓎oB^>C$lԱ`}o#rd ygߣہ,sW=G?~T} ~r8./qq~E_C-0~stp\ߑw >0|3q\|?*!_1 _Aϊyv/>~~.g+KsQ J99JtDUA1Or}}eW&7E;#l~ޑ/Բ8Kr:hJw;4RA5-iy^ީ)ᫀ|" Fw(ƚ^'(29&yri5>WJߜeXei+j_kUѩ=Q%>^{R+aJ(rTF{xJ/J9/'9O++]*(j徧 ֯E )}aqO{r.꥔#^r~eEE/?3I{c6s~Wf5&v!\CyOTjeu9>98._5䫖_u䫮ૡુ|5>sG"ߑ}3T3m)Vs-Q+D3dsAyjfyWvq\:W'!WWW[wq͐ė I9 1GafP] IuՏ+ĺF KzW/B A*0cc%#O+[[rB Q*8쭉bo<&_X75Wh1S~8: _kgB7/,[zJ_oHVԴ)ִSSI||oVjiQ5G$>7 B9ho/WkZ:8j%ZIXVU×VF$>7  B9記}bQM{.m.mSZ:)|a.^a/-*\i]*ZKW/,yz]KKz()ay?c?ڧK#_:쭧bo<&_XQh1S~t~tH%:FU K~WWz5=Ʃ)||#L*jcrŦ=X..)?y`bw,;qq"_ׄ!_>ˡ^\i;{Gِ }Q_G||||oqq# ߐ>żHpBP7qqC|"̹d\c%d[Oq14 ñf3i.} E?F o$LoRTFs:$>1G 3 ]drc'`!9_9R VyjԙG M@ 9YQ%l*ڹ\뙫yYݾyDMtjϹ)堏0VI$7)Bɱ@c2ѵMqrp89sf>b 52i!9ȿ32z+fk$yN9rp}VOK=\<\\31LkkZ.r\>y5Fb U W8|Ex*,+Gi^rǷ&y8|Ҽ' ǑϼTt6~h9s1:9o^B9#|'-PXȱ:9osɱ;9oIB9"R'2- A{),Dh\qrHs}! Pؐ圮DJ'犓CU[PiNOBI!9Gotlb~|^{c>x٬~4AG?k||g+N[iAB})8|tB|kpnP'>{>°Z-nTσ&>>/3 >Zgۛ1"SV@ 3chU?x+ZVξ9._kk_kCw=]q\nDC}-+Y8|SB|ﭢ*@;>w'ݙ]wW=y`p*D\OG9M⣏'>M{~b #>o_=qGx؇X+6ݏ?{E{_=7qGx$V`2XQ/,c{05I||oVejB Oz=<čqtpM{Z-ǣZQh1b,øC)z. }7qT+JjLD-Z)\iQǣ!|=`p/)METGᛆ|" =|> ,x]"k{UяY8|ov_ʇ}M1’uOP߃|wtpM{`w(<&_Xۊ^v0)zqKG{ؿ+<&_XNE/q+q7MjB-ZUh1’ Rt-::8&IXSQ˩ -ZxLwCEM7 n-@ |gD=`>^}G=s[1{,|wqtp\eȷ,!s>=^\i+!|g>Ú~ )]Gx$VŨb -Ẃ> _(]+Gx%V˕J/Zx i\卄D7C_o}|~j_ >;ޮ]h8|"ߵ ]|)W/q\!!1?x9?*9sg~Rq::8.wnW|>'zϼo8)aD`W`y C}}N #yRTӘZ+]+C9%,}\lchcc@B|o`{z^BsSZ)aDžGchc(chB|!q!|/AKgVKchd A5!|o虃F9+X=8|"߳|>Kh>$,zNGC3Ms =Bs{qqGۆ|"l4W!-k9 fGh yF^D܋r֊1Er- . #lUU;Ex 唰|o1\l{>$,e"BB uz_.Z >$,ո#BN R{ `i* }w7E]b]:Z9._;k_{k nr8.wsB| -!|9TK R8o}p\c؄"_W_ow3mE ݍ|w𑿏g^*EzP?yM{.Po/ -<&_Xrs)\i?2X K!^URznq -<&Wlڃz( Sh1’#3RM{#QHQ -<&_XrsqWh1b,X;VeB 'xz9NK96ZxLش{9 NRhc%DO/')z)=wfB `y/ -SZxL4E/LWh1b,;GeB 3=,RRz,+6^.D Zf+|a?˹^JacrŦ=XQ -ZxL_BE/,R$ĝ8ڛ&aZV -ZxL_RE,St9:8&IXPi -'*|aɿJ%YFmttp\3̄6!ߦ>SU|a=#r!{?`?~pr\DŽ(|P.Gb>ކd|*Ejs|Gs꣯\kG犓hh9R h999cb(r9vr4N'GS sO(GssA[=ۄktp u5ߣCީޥ8.|?99. _|Y^P#Jϗ%W̹(|W:":E;#C|HGye~YuZ:i|TPwG88|ՐZB|Ց)_qY̡w(\snXI,؍pﰔ|Lהg5?`j;8|uNB|unVf\qrTF8rLHr8?߶,Vs\7 !70ƋpמrTU+NO1ɓ#3/+OwW}1nW`yLIl==^OVT2|~|a;hyKPN _Ckgbo<&_X߿+[[B Q*8mbo<&_Xw^OC9%,؏S5A&|fo)c%<ݥ:ZxLش{{6/,?#E/EZxLش{{.eB xzGKuVh1b,e{NEkT K<ܫ:(\i#c*Z -<&_X嗊^J`Mqjqq:!_:#_>S1’kOϿQ\zm䷊5=֩)|]|"LSԞ K==As?*jké)|=# =|V>O ,?{k#Ͳ+Z)<&_XH~w\ozϤy.^=%|#|"b>7Cߒ-Hr$~fWGDl$7հ0|~їV~wS{7'7&D(jch6$l!Vxfb6Gc5{=D1/Gy8|opB|CoH˱ޒ:s:sTTrpqSs aZjZZ _%hqK$>~.|csx.q߻<c1X' sH9TzTEQPQN9fH3$aZ QKaW58ė C;CGxfZ-B{`|y7ѩ=碹r𹒰Z}{IoR>"d䛜7S719&?Gc ?y_c5uLGtΜI9> ' G:9^w|5wqOZ--PK B/,y[__@QXNM9&IX6BKC/,yX_1ZR+6^v^vIEkic%SO/)ze_OcrŦ=Xh--ZxLoe+E/ﲌ -<&Wlڃ썽읊F K^ShicrŦ=X~~h-i/,;wK=ށ=h,}wE?BG?/H|煿!g_9(4мv:r89:99'=_rHw)C~%lԬ=~"r䪯Gse}I9> ۍ!93/"nb<+a~`=_q9rGSӏsɱ:5p_D1>@!93Ws%aEx WF͕W*"Gd9W_k'"}ROjI A{A{!{x:}P=q}8._CK%'oOz-W+,+Gsӈ, ndqqyɅOߨ,I 4/Gўy=98slw6s7s1:9o^B9#|'-Pȱ:9osɱ;9oIB9"R'2- Ai!Ȥ4vtlPKPK !P+P+P+resources.arsc P+Wx6h8Lx.V8b* N b v 6 \ ( T  < z ( < p ,X(6l~4DZh~"*06LZres/layout/filepicker.xmlres/xml/ck_settings.xmlres/xml/default_cyrillic.xmlres/xml/default_greek.xmlres/xml/default_latin.xmlres/xml/method.xml&res/drawable-ldpi-v4/icon_launcher.png0res/drawable-ldpi-v4/icon_list_active_broken.png.res/drawable-ldpi-v4/icon_list_active_file.png0res/drawable-ldpi-v4/icon_list_active_folder.png1res/drawable-ldpi-v4/icon_list_passive_broken.png/res/drawable-ldpi-v4/icon_list_passive_file.png1res/drawable-ldpi-v4/icon_list_passive_folder.png&res/drawable-mdpi-v4/icon_launcher.png0res/drawable-mdpi-v4/icon_list_active_broken.png.res/drawable-mdpi-v4/icon_list_active_file.png0res/drawable-mdpi-v4/icon_list_active_folder.png1res/drawable-mdpi-v4/icon_list_passive_broken.png/res/drawable-mdpi-v4/icon_list_passive_file.png1res/drawable-mdpi-v4/icon_list_passive_folder.png&res/drawable-hdpi-v4/icon_launcher.png0res/drawable-hdpi-v4/icon_list_active_broken.png.res/drawable-hdpi-v4/icon_list_active_file.png0res/drawable-hdpi-v4/icon_list_active_folder.png1res/drawable-hdpi-v4/icon_list_passive_broken.png/res/drawable-hdpi-v4/icon_list_passive_file.png1res/drawable-hdpi-v4/icon_list_passive_folder.pngCompass KeyboardSettingsFeedback&Visual and vibrating feedback settingsKey press feedback"Vibrate/tick when a key is enteredModifier feedback(Vibrate/tick when a modifier is selectedCancel feedback)Vibrate/tick when a modifier is cancelledNormal text feedbackVisual feedback for normal textPassword feedbackVisual feedback for passwordsPortrait SizesLandscape SizesKeyboard layout sizes in mm-sLeftLeft margin in mm-sRightRight margin in mm-sBottomBottom margin in mm-sKey sizeMaximal key size in mm-sLayoutsLayouts for various alphabetsCurrent layoutChoose the active layoutOKCancelPortrait layout only.Use the portrait layout even in landscape modeDisable layout keys!Disable the layout switching keysAboutMiscellaneous informationVersionv1.6pre2 CopyrightD2011-2014 Gabor Simon. All rights reserved, New BSD License applies.Source $HeadURL$Latin 8@8;;8F0@latin @cyrillic@greekNoneTick Vibrate once Vibrate twice-2-101 HighlightToast2 lorg.dyndns.fules.ck F8 0:JXattrdrawablelayoutxmlstringarrayid F40F^~Hz*Dh <h"Pv2Nz :Z6`BRr( workingDir showHidden showFiles showOthersshowUnreadableregexpreferenceName preferenceKey icon_launchericon_list_active_brokenicon_list_active_fileicon_list_active_foldericon_list_passive_brokenicon_list_passive_fileicon_list_passive_folder filepicker ck_settingsdefault_cyrillic default_greek default_latinmethodime_namesettings pg_feedbackpg_feedback_summary feedback_keyfeedback_key_summary feedback_modfeedback_mod_summaryfeedback_cancelfeedback_cancel_summary feedback_textfeedback_text_summaryfeedback_passwordfeedback_password_summaryp_sizesl_sizes sizes_summary margin_leftmargin_left_summary margin_rightmargin_right_summary margin_bottommargin_bottom_summary max_keysizemax_keysize_summarylayoutlayout_summarycurrent_layoutcurrent_layout_summarycustom_layout_positivecustom_layout_negative portrait_onlyportrait_only_summarydisable_layout_keysdisable_layout_keys_summarypg_aboutpg_about_summaryversionversion_summary copyrightcopyright_summarysourcesource_summary layout_names layout_valueskey_feedback_nameskey_feedback_valuestext_feedback_namestext_feedback_values0LLl88Tp,Lh8x 0@P`         Lh8 0@P`      Lh8 0@P`     L`P8$L`8 0@+L+8 0@P`p 0@P`p 0@P`p !"#$% &!'"(#)$*%+&,'-(.)/*0+1,2-3.4/5061728394:5;6<7=8>9?:@;A<B=C>D?E(Ld84h@FGHAIJKBLMNOCPQRSDLTUERSVL`P8PKeAtI+a classes.dex |?~gLdHX"A&0! $$#L2PUԶVm]RkԺ+Z[W\Z\k-{gɂwν眻,7 &Eye/?GDiH f*\pH b`-ppp0Gq)Y%01 m+UhZ68l.n^ތ0x?8`!ۀT`x8v kWK;z`#p#,.I LV`7p  > s\`p >|fMsK1l:+Iw!zAG~ uj`   << _ҁQ fŀX4mz`9p:w}_bl~ ~ ^Lah`R`Pm@l.wC߀?9S),`Pxf lWW{׀ӣX (. jAIY>/@7@ T59j ;7?F?]x-p`y\L )˞@-@g(`<0j`%l^>>C@>0886W7_'Lr3E@X끋 ~7c=   h.j`p/8p8Lfe@5\< |Nr" hw^>LvÀl x@Xl~  8<<>N,=08d*`:`;p=ps!1ck@{$)h d@9X K_< | |$<;i`0L@0(ʀE@ 8ӣɪf..vWޕW{?$l [;6"l[ –-!l?[ –m l[OwMp n3M&חRIp"07=6%,22A03K0F0GsC0)s@Ƅ)G.aOkMH////W(:7Mm]>!O81 )9/KWH| |?@LV @$d`0 ,@2LhKWgCWf˱+ BTjW^[ToU2 g  ߛy̑cݤF9uq H$?Q9TVa.u)nfFncW:IDfgIt)jt‘>[œ*w:CL#Uن|Ux30hPi pJАvKT6JJ霯C""TB l9*lΊN!<3Ux6E*\p /CT ;{ ~aCQCEC!!|P$Y*p ˎOA8X> fN!!,}v{Pg i4m9Ȝ8_eyX3tȵ`*By.bTasv,i3^» |n%*O9sst&9)q,}1=> ΢kLk/5׊*;F4dbZF6AG8AxAtA4F%"*?ә= : ; zZyTnk1C?3=\N_hK h4 4Cu MوO@ ߠIzٺJ :t. )t>3EQԩ-ҝzLult=3LMcQ wJ+(tSʣr,7 «1O j(ﳐΣw-#IQ&g*Q9跩&ei<ԘN5:Ӆ"Jy&7I7R4:)de<^.T\˨DS }3]1|E.ƌ?9l%1ͦsL|>HhL/A z=(7AʹZgJLR,ABAsY%ԣ}|Ee՘?֘6#FQΡJZ)))9\?d!*Jq|h&;}PЍb{^wt> HcF?Lx ){RB=eA/הuAϧ z1>&~ɊVtI):LsATt=MVr E[Aê;쀧CēT 7JP~;1KJt=Y>H_)C25W5?,h**5נ_M:]$(s8(Qr]\ OKFh.2xED Go|$RK]t/Sr|taHzrtBީo DWQ>Jt56}ADE]NR4?Sd;WE7(QMvV͊nQtZ6Z1ͦgS3})\9cEOED>u"^F؏'&{7!?3=KT߂7G$} qy=LOϐqJ1]NUrʟ,qDIo!l]彗&X~\ޅE|gkb!RO4SJo!lG+yp+@C~gB^@qě^oJa{~w*}>(P C8ϟ_$ȿV.U>#5c[2pM!? cwsF_w\ޛ7@?g}\ȏg} <.!@4w]} ̃n^ȗB$Θ5OƷ*>W-*k~TUJ6]g{ %kTFmDfaR}K|%>N| a>> ە#L%)߭>:e~Ibq_+ rx N M;CՌy7L=%FvJWtgr?^щ=M*dH$"4kL3e䨺L&(f"7z|<',ǮS"tʸs>4ӔC\iG~M3?o5|Sm{u5?|rH|oC{O3y}v'gs_ΚO!G'{){۞?}ɡ&~cϳP?=q>';t14Ns?8O<ǝ1#. ?B?Ecf6d#]7%hҁrJX 6j޷C7io?үTcD=Ǘ?/"0^1ܦv;%˽@[MbQypv;i&J3bp$Ndgg%=6#u6@4ҵqZHnʄt7)I:yM<.zLC)v/k)GCVӁ8^cI5Sa_a.lgyΞKّB@ &DŽd K2[ǣFۨ[Vá7Y?d%7ꚽ6ҪV\'^<嚮Atd-m9E5-M`^W55 xLڟڜ Y9\dʼn63Tr~"=N<\F2F5Bn>)(2fG(xFJDcrCʑߑrIV4j{I#+6g{F]*^ ̱&?f!uBDM@7ao2/}f? =A7V:]e!V.bfd4qˑ~9It-p&ivJKB>iOmET)zyzzhUgD/8tǧl'×+%rp<2+Ȯ'iD)Ln`z w; zЫ):j& ӵ}K^ 4=2w{u8]Wq}\<}z9o5ITύ=so>ApMz J33wLn0pGF4PHtd$ 9R%퓹kjIǦ|߬w34j]xF]bf͡BCJJ&Ƅ,^ҭ(& OʫL^rgYH~e-۳Kupb,u"j+x=KӁJ@sซQF`g5,\>_~~)` *)xl<M݅?@I$>L{ܠ73=cz=m+0a^ғ?d!Pj!~&=at F\fH7\YԨ零i}z%RvVե)Fړ K  G؇qC!\ر(='EfNl3;>rgţ,7tEӝҙW5ZdQrgzs&Y`i/;vf-'.~) Qo}Y#5mn{J +UI׮E;*I d[}c ubOu~wf!ghKӼ 6Y9v 6'*vݼ/r?w@I𒉢m2XDxcM2"i/;4G}Efė طS9ZIZ=/—/[>q`͵)ni5:&TlwjgFXW{ְtݵh#aDt$Z#ϗ~|eSiDž5<%;  A#y:v]r䨴5 bD,g3&">˰=qߝGsRx(R GNvv+ \ԩb:>M{/;U7m qKж뉀Y=K﫛[n .tԐsom]}.O)ZL荗"gBb&[կK|e쒝3*i̼x*Tk;!s*E܋T/:|_?ȧf*kaYh;4ppR%oR|gq٣u'r2 l;fiZTaK >s-f,"h%"9x-9v-)Riڜo\}xY dQT6 ;ymUvҗyt䷀s\C=6^NŌMH G1Mp̡=drϖ}cYEqj+\%[np˭BZ*KurTZ:o{b#q"?jA7x Wz}q-:C+7r>|DaJm Md_~sŌbY,gDsYCޙ4v30Oe`fTs.D.C5kB`-sh3AR SrlB.^]d~t.D٠j9,m{0*fU?:B?"%/am2$"QV)WԳ Q|I?Hب-u0!+5\sr4\]<"^gD=գ=*\+=hG#]4v%4A+ K8V"cf?m Ocrx[X#]9]J/1U`k?bű$])8o[Dh,2swNbg7'#iqiV*pX9ۜnjn@M5ݭTsa; u ZF<@ *rɏuvmG9ޖ{ dA xΦKv'?i2D|~i.NT1M{KSϘ~d遞c]<֝$U汊 ê^9!:O - 6t4rۂk[^c+z۩Ԟx׵QzԦ='Yk({E ڜxFWo y 6&Y̨`ͳdj5BTݑSx.$'zxf|b0 9a.܄8MK%׻%, n)02–gay.O%#m4| { +=Ly/32u5IΑ x&=ǠĜ' U=q7cAJJpJX#47|An@){yԨe^dz/C]d7 w|GDi rS?9-_ak!~9>Y-2CQr$Sk0f!]\샴dE|ۗ^|G#}8-*vM8W4>"SOj)+OFq <q<~3@\P<ǭ'FS/j5 P7r4;K)Og,G>H]_9ʴiX:eML[. 푘uKT[%6+T[2BcT ʷM ǧSmLrٔSI91x mހ]%Owq8\%䖉3Cw@yw䉼cɹ0>%*g|bn-ݖ!c/OxƬDKUTsU{*olߵђ/Đct-Rre"7{$K[W.c5Tb ؿwt7sE3|Vr%w3Gz(VD02C ݽJHNCӦ]{b7䶣wVgT%FT4>AJ_A+E\be11b1UWce 8ɤMo>؋7bÄ-䓩qr!W_ {jإ__Zc/Z<_q5qo%/bY^g5ZC;|Zdի{nJ+ڹZ5>,CI 8gR\<*4xُw_oo^a]^0AbnȺ{UW_̃s`_*<>xM9c02W&rǖh{=";_%8Sh=i*Srjs{ǭCwE}cx ԋH߭{'_ys|3.NXیY枞: W=-@fFHʫ}3s3z'6ubMƘ"]|U6}5,O]4y~O|a+{'yw[yػ=vN+k~چzD]:8tu{%:gj&s* g@a2Spxb"ٔEv]Ba) y `7R4NQlEѥ@Mf*B5v믒V)ڭd3'zz>r=KEwbguu/r6sX#.-hEɥ\Z(Bϛn~VqWzٳY k?CV rqozOhf[S׈=b雿Ͳ&{_ȽajkviMZ]ՇջZ؛0];F1ƺyʮ}Ox/6n^ѯtሟ~#F5ӓ:cVvG*͙hksӌ&iۢR찴&#E;@<,qa"嚭ceZQ}{{Y#á9mz*ڬ Ǿw8fl92ka1yyE{6'|{:.g*ϖGn !۝a=B:j%m71#Z+$U+_K2Qr%̀ES+)uPQ(vMS(sVjױw8EuX+, s<ʯD|#5gu&Jt)Xo7}+a#Q#pqˆ1vpU5WkhrJײHja.wG">־%;~Dځj-팣[PҨo:[:*[\չMO皨~?Ȼcľk#}k I= ǗO0X~ˁo!tG~WJGwA~;K B}tD3Jf;iy<1_al.ir :u":#073;0SmTq vqɑ3F<y ] @}9c"ʫ)̢Lt`:]34^l]2 l>tG\]h-dZe?*ȝ95Yos̿77u]E%>XtTbPETې' Od6y=rGDXQO+sАNuyL⊆W l'}|}|.E/:>9h -!y=-/>IM]3ME]6ߓLPÜf:xfNgVZLի *~w!ŢE\e?/֬UIT71>:M"GG,b<(q!Ϊ5F{SiKhVwA.X zh*GRZvr/jx,(!\bmzG7TੂFLV~d3MfwU ْ3դMs+Y#|7cS;]o {R8]0 "¥{ Y꽯)q&r|.gBq1KKWy'53r)SD{4Nd\w{ߋI"/O [<",^T1|x!}Oox/Ϗw^S'ərnRp:x4a?E晆I~X36^|ݝ'ov/1[ľr0j-usxG.tANfm= &z)yϦgX;Mu)FJxBJ|dԛ|=SJoe%;dE}nbN -w`I2皥_i+[@閉"/~'F}gEK[h,H2cu[ku7TUai+yŢՀVπiśӏkbo ѓJ+="JqOFw"'kk2NBMv!z&~c7&?c_wX6گƮl_?ҠDPʹ)܇\p;D[a̾ s-v!_!@, ˅|?Nf٪-d߽S6JύSG^ϻђ nr}2r$U#iQҠAM 7XVNr۝668l~xy&2YJg τ#w-&-,}? }~_K8]_{?`~o0㾞rj@8Meǘh=<)VbՃi7oCOEL9!{2Lۓ\6u#:s0Yof!v?????OHSPh u!PS5ޖNk.ҦuCqS >Oq6C9dA0|ͧQ0e OItZ?IU7kGŁfocgݹ~Jin_8 TXѩ\\UB޶f}x5ް"9׳BwGU*ㄵΧq'V>{k (q SF ک灁2I+e5XiqThhu4lkiu?z8UQ@T֒OӾ-ӼoK`:0"QxFԐhy0hiFR]+plʹ8 JF߮]qoV؁+7Oz 6XrAqC:"Md{DWΐ ΁b `g}@Uʧgmʂm5QzzTD}6irۑOoQ['F#wbb41;K+]o"2M9D1:|EԬ5oI1t7SVҢf_j9,E'd CUyZ_42i.mT;ZIeGhh?Qd´6x[WW@}K0մ{0:eŐ@^kS >Ujx;0=͡Z$M.gw?8I~Xc\a>ܶ ,/ Zua;;9Uَ'\^]<}2gc5 \ ?JIE<]m9.ewhTaMx4'=c0[>> EM.J'`D7("M^8Ԋt v7܌E02:<^1gѹV;pzAS>`Ge!6<^뛥+v<1T^y#|lʃ& "jh5vbQ'nկVG<έxHϑC>}"gF4.﫬@5a>IV%\;qtRE{6q$I>M HFAV 6V&Yߩd:@$(QQ>|Tutܦ?V,ŁlN6 ~uknBkLV ]->Y)'QYz@I3fqdݐM[gK˴5YD0rZ=[KkCkEgb̋S_t6/ :}씇)0)]D%narB&L'ҪH*bq4]rR}6UZh#a6 s&R2x Ճ;DcyEo8TՉST@M|J2{j*K(?Ws/^Xl"R\xrŬ(\F "$N)9zF%= :[.gSK 5zPu`u 6 XNQ`+ERҗdY*mUʥ :edZZVF|hO)gN(n9'1-<|r//[r)Jˑh9ig C6/$ H0Ck9ƇAV v\ױ=W;v731Tz4I2\m J: a8+ [#\&oKYBcSeS+ 6_--KC܀l/39F# G0LZϤ: rg/8|EZ=%{[ZW?pq{nZ( U>GwDcga̼(O) X/,"*D'.XDׯ͘~}`Vk7F:y/L4g}aԑ,Q0 R%~vy`y`~kںBJW;[[!tX=6i(wP}gOEN7IER1WWa4dTGC{ǣF_k|}mB .Й bGA_#%^ȋhT=6GSz{H?̃5R&<023Z8[0hBePLqx?]K٘bdߛ|! 3L_;Q Du" >, HF'orP_w-d+ hpRMa}6K Дj l0 Ir"яi+~_ (fS:֠+EKփ*;,§&,'b)"f$ 5{Z)AX$#nїIa=)&1n:uWprr\ 9д61"Y VfG&5crVxױc4CyngǺ,NamqMgOyhm[e](_!'f~cOixLѐ)T^lXWJ菾E~>)^WY q=ނ .RFg)Y+P?\Wba28ae!?/U0*a]~BtZCyɴXQ֦a TQAVALj^ J⭑Kk8YMVRrW(eU^T‚$E\&QV$IY//k:X5aBZxwoZۃ6T"m(;NdbWאX - Vjqfؘ!,qoDM11W2,gۍ(;BAp=h8_Z58w]Iwmye!XnECJ^֕d4CW.qm' $d& ebMāq:SuLtj@%}ܻڐtIjwy}sjK 0p:p(R*S%2{z,ALWqnN,IR I~"bJ 4UTސc(\ب ՖA=EWm5L1,Ј v"dl`pP`mNvGyOz=t6O;+< åahm#{O%XQj$)5a}v[8T?@~KZf*&8Y//:,9.-\W^gz'@E>pc0,nؒt/?,O2)3z]H@7oǪ=57bSNCׇoZGx,fR TUP7Vm8w3Fz@p^KpRx S7WN Bm|s'((!DSG`F(yHA?HP> tdhdEU/_YKA/;rOBKg "C,fCI"T*(+TR^%%,npгKn"/+^aHaHVØNB|(1!xoԕ3 &@ROfdl떌RQ&%d q:ݴ4Ax"'G6>Јp f9W;p uۢ nF,6aұǡkڣvBXW/_'[Č]oeī Ev07Z99$q7febfar>_7и& )(,Bב/;g i]ȥu3] 4 !_lȺ#c:l ,E8 ȏL!z]RbvJBeq_'09y3`el'){ED6yW`/ e ;bnq'sl̝t)Oۉaj/fL?&%deAirev.Gj\Ac;Na6|[{PJ@鼐F&UI6'y-+{ɥp 6gr6GԾM2ɥ's%6jMwH#68&4pXmdv99#\utpm!0{!tRXE X-b=fq6)$'8';8O@`5GTMQ. iZ"%YI/0y>Yd==o/2o]0%L%݋W`9 }?z8reQ@NPԍ+q ܵ&Hޔ<ݻf.vP,&۳ل&\Yāwn̏7]ȍ̿j`H` u٣,ƭvrld],C/ )H=Fjιgeixanyť21z $pp{bnn" n|nGRkq=owT`?[I⒱jٕuCLaq%-N$`<$yɍr6"m@]rӰ.i~hԵ?sO2 r!@>V0Y lekU|m"{4g}һ5FdD} g<}dHD] c0& AiAJ8`ݨ;0fCjRYvU-kZ=$*v1p8J FӲ6 ]lAw!!<ܹ݈Yeqk1TߣʭL{ ?Uγ N*x+jzJ>Բqk~ +Oim0Ş d\T;qEѾ&M[neѿ]rE^Eމ+&/ȟN%_EËGX@Fкcx]m]u]P! kur~Gm^HYdid , )` KSY"f}$!8XywXwY{Ik>k>̚" IIF-I  _\OO'7ؓIu$4{=?nd0d 1mToDnI~A,@p2D` 0T"BPAB03BPA-"B G0|A"W!C0`LBBkXDl}/^,v5>48Zz^=^H._^^ߎp75Mm/]R^Rs>/xlX^yJ]tjp֒|m%%to -/wЏ_/'J'K#%PK+aPKXAtI"݀D:T5lib/armeabi/libsymlink.so[|TՕo~$0!$Xeu"D4ԲNd ӆ$fZa RJ4j?VAk?~>~Zw;Ƅ֡?Vs2 sr{=s;ZD$쬔r1&,]˦ іY2LVJcL6I^oXI&dv6oÄlLfi J H]??< +*_dBjHp5ֹ-/;>;=? ݽ+tyz9LfniA⹎1h .i?L_y!6lyO7yX@.,h6tlF=d :aSc=$/@6;:/r{ h~tDAWL tTD jtjA9 25۶1yiX}tmv?> o[Y } sVw7g,x+聙^#4cZhR}BߜF+ѫG@,tO-Н |> R8}ɒ1{A.sX\,ԇM^FN ZB_ ewW-f-5e6)\er"Prֱߴ5_%יƎ 茞``MȿPkޡ|2"7ɿ6jWnCSF@M|<*\Yz]f54ur}߼"ug?돴OWVj5ҟ0[\ؾ:- F/L( l GBminh 6ğLa}p:XHsGۣ]ܶ%HUT*W#!uD[穂D:AkBƖ`uCll"͢n3ظ!hiAK= 6}u/OhT`[0a//FZᅭdt[7Abo&0XimG")bLZ tDu_hm: Xۉ^l Ǎ2\lka04ARS$45|nj>d i+ c82*Jaogftˣn`wʦ -t&ೀRyMhkNa);?Mbf^1u6eYZE9CD cR[&Trb$^$ZRg~ۃ"ib58QwG*' C<;M< K&B2 x(}0`04ac0{0'c' >Gy01ؓ1W''5[;4o_3Ref);;VNXÖrR~ROZʃ+(;~'cLV]lk^-nvzv*~3؞/R"y>Q\VUUU9ɗsWWڽ75?J1-zY>U% I3 fiH&/-/Z69߯N3o7P c8v:yOg"*/alp*z9E/+J/l.^lj1?B6$>Cu[|[ EcE|ۯ.ժqTl jqWg}ݱ7|jϮ}(&Ae*Ix kOb~2}|bEWpsyǓ0N%ړN=[).u^%l@6kլ $`ENtS6)^6B_?cM Y*r” 3,6~٤Ù6!;):y# .GEn>yaU} '[䧵(o##lņS>Ee̘sY:._ @AnZA:-|2,wB.s= "yS !lR4~1oU$lϤ}u^ s#Kq OG"] geT!C.6ܐ)%/!KJE.1إ%*|S{ ?[#z~a_='{태KQ|yC} 0^9(4M"~Aurε)O|eV{Q>绗j׉r0_M{ל*5Of=-?: 9R|oQu2BQBk$?A,/aojߢ ?d|CV6EClSGu<8 mv-[p3+>_gdqx9ӺuqZq (,+[c>ZA٬.XqXB\d!m.kr%#:'я򡆭/oՑ>D;*?H0-@ĸqyM|0d?]m=S63P܉7Jj(& leYϹ8oQu'kPw4"mhۃ|Aw(MMS<[uC<ۙLM%:x٬3OFv㱭0{|4t";Dc#)}9DOuǧί۫uWvֶ@u8v8Mŕq` ַTsAT y~Q/ ]f 1H#(pB-o4ڋ{A<s4,;P8p9+w Q$k4a|?ЫQ,pc +OB9G{&~HJ XI}g(5)ʱ,h2=$ 6)qƖ(T6vgb*G;G″1>ypptYppTu,D-X7_'#FbF ӕxn x4O{!e/Z2h8y r(-B<.K(tq,&<ف\S<Hr"WCCƻ8n>tv#|0T_/Ln?4碎xn@ x4<#9x!9D9c]Ǯngnנ2. ]YvѸ-綅tvu[*ĐRܧ9y0嶶]gڠ0s䠌X seFO]0T[oP|r,)۴FN|_'cuazr>lw4;$ W-N]NK &^ 0!i#ނx<~󍍃'w04!q3v p tRGo}uxCo}z7.^|\n-,)*˥`K0ם%Oo׵4eܣSלLIe8\Rm(JӥB + 7#Vj;YYk[$XuCٚ 9&Vִ5q#9nf0=$:@nl[",P"--[j $U(*cP#FoC_blM8֯F,>\D"5"_cga PP]!9^I|Gbc ,R8=EG{#'>1>OL{GŅK2:f)Q a=.k8IbLj@-|\|ؘ}|v-;m{ΑI)3ǣ{L|˺sb cS6$;8_?ySb\wR)ʩf+M#3GE1*}_sk񿵑,3 PK"݀D:T5PKXAtIOײOlib/x86/libsymlink.soXQlE.r(HO*B%(9PLX*n-wzWﶵ%PrmD% P#4碏a${FG:ȤwYuX&-+vvf ̈́mm0;a$S;D:ÞO$\~a̚قѝ fan$ .B+)e*52Ux׆e&V(PyjeM>L.]*) 泀@=x*2?(g(XXC"H~(r)݋xQY4G ǟ(Yx_.OJ>\9-?wQ8N7""@+99Gi)]vPF9Oql #S&& }>K_@O Cj7&x]оh!`)G"FovȞ_5LchxxlEnGcF4wexwx]Z?), fz2ZaU3aG#D=*oI=e {[_=`MIwt}Ѥ7NiW394}7ޓf I&o=z'Oz I ŝCΧGu?di PKOײOPKXAtIz+" 0lib/arm64-v8a/libsymlink.soXolE[J[(R@ P@ς((*A?u{w'+P 1 ȟ~hbH0QI*JHK1IJh9w7v&/.soߛ{lqK_<-C>Wu a8Bi; %/(l, !_{TS Bg"{9΢r* g_y#χr-YNW OUԞS^_ L`oM?Q]<|_؍!;A~,|a-&1Fb]!츇0Ha(CAͨ!e#s):!dy$Vdj!h u~n}? OC`[&C)2ЮA3m hău8,76zmJl"1}p0RE6h f0V#] ?b7Uh¨gaӟx0[*cwV5aF*c1b4nuLj\YWS͢ڞBz]Y3zDyuo4Yk9ҫY>5;mۦϷ{lzɦj?8҄RTŬuΔo<&&B&N|p hL b,4y>X5Xu9Mՠce׈ ʧ42ϴjjS5COj}[}ۈ@.>W= !j=ڸa'`]VɃ4-lMVq66/D}AJߣM}{ch?oa7>쇈S|b_1~#[yf(M0(pt;EN:60`OnҋzK JZ0@{_/E "g@1$va"^/ƶ Zgff1/.mCy{ *)ggPwbs<(flL_Bm?MI?PIcMۯ86bJot`2<'qdR|[l]YuS%<d,-;92ܗ?Ż?¾aEoeoﵫ5X\NTO:2ы}*?PY( mp99rCDQw+?PRj4/:OwY$$_y?]FI󹢘dVO"ɐ}tN"i>F'1eg G9\=L$b˝}_R#$'e3dVTuF}Eylt儯r3yd/1淅󛾟^?{!}$/{/d;ƧO~3MhK~ӡ}m>u:^YtIDrN\3~5;=I3h/PKz+" 0PKXAtItlib/mips/libsymlink.so[lUih:-6jw Cˣ% -|M&pl@BLRъJ(* |tFRяe?H,HB]`Ι{'E^s3xP$@X-Ћ~  8\N B|=\h ?9cZG.7%օ6(_CpZh:n ,kxҶFwqr{glX قkLsx)|PO_:y0*0xOW%f򁪡l2r@;u9@pɼAT7]e*L&=6Ese]i]F|///d,Ai`/Un"`LƑy8$cU/5(D'?M3wQ:KCl߬|*=3(i{!?#xdD۾hG?*qɆ i\2^SN=SO7~PՓAd7D_7dT]=4R/ZX'Fy\s*rYoٹ :6ZEF|G|8|NKͨ7]=l9&'D|cGp-C<-ʽ:oҥFS?5t@h =Uڲ<)3O e[oJוCLlMu⧟}7Ѓ]3&Q.)RcrqCV. %}L,Gzk|]iWڕka@ǭOyw9wIw6ϩF ~soV3dv#ZtA3b,N \ȇ'=%zJdJT\F&WZuPhI?9ŇQI|Yֲb<`JXP-ByjtkmN귥o#}mR9WsLOvVhW6BZ(׭5-&>Jha$bTc`cW!0{>rF f97F`^Dshgd10J^gre)V V̠a\ob Ƭ=Ʋ&Sp<.`bcTc;8->xX)˽= Mx9lm^(l+¦rx#Q$>ڧ/V;~#qA~$stSw=  #giL@gk vM@| G5|ˑ<M8!g|ZKaQoWZ 7c%v?'쾉}е|wChȺ5-& 74z_k˛G:rsEes\_ė$_ʻ,ͷo%O_$baԋ|j PKtPKXAtIyL9 \5lib/armeabi-v7a/libsymlink.so[}tǑi/5Α# B"灭 ej%-h_iqD/Le ǡclA<3y>g_8˂±<^4ڈ8ɻ?^kxo_%'+`Ij9 Z?^$lK}I \'`098؟7X&B(jN4ډZ?P/A> U#Z&x8Ɛ_1Q 9~=,Hοm[[4ܸ&Ҵ!p՞mλ'/k|O\w_Jn)E)t1g2ll>07 k8}8_S6::Y >b F>gcmtmA Mmw@ч@f_]1o~&y2ײ;6#п'8=9ܱ-NEq<5 N&N3!CUӰFNӗ戥A~ş?t>_oٯ j=h?h;{@觝2y^#6 e@E)M)7A{1'> ~N?/L)&} ?86: !i)HS!0[{R-lk&ܶQg(nDWBͭ[uۚڂ6ۂw5 >cd(6}+Tmi ʟ##Ҷ6ECQHo7" l }4(Tgʣk+U4qR4oij ݴWmppc"Xvͮ?2&X`9hb{֭\*e(Vjҟ6nmƒքAH[pK4ܔpE[#xַ6꼥͍- aG,LmV޾q}%)9$>jA5TZi 6CM[[x[t[K8ܻphrdm=pm4\7nڊVkq_÷&^?h0x-]˟.Ko!2qL \i֐MSz2jڛ׆ +HmY(>ܰ:6Nچp{jsik C5eh]E<-6r\@/xP1]l!eÑɖ2ũVe+J̪ؕnacuM .;Bt@N| P2`>:_Vg mlkO>UWLj ,[[.9r9_X||gKGmö5]أ_'#ІcAL,3QC*x!=#o'K$?T:7 dWKO,ݿfa}(zOHk܁'{/,/ בfz)Plٿ0{h{%lQzCߺwf0ߖ}c߼ZkEa&>) ]T"jC=^*|%PK.OxӅL̀9U)>CrtGQW)19]?.TqWPJ4Gg-U C'ꎝj[`9GXa4hwm#4 $K^R*U=rD@Aci\{^-~.$C=,'YT.֣e?d/֫ &17>+c}d[6F?`+ ԫ1;19NJn0,y&#ߑ/ɇo?/o#x=NvtF"gHJcDp/uLRuH2|y~;F<ma#"Hd>Kc囫:TzYuÖ%O9֓M݆_0udW9#?E}ȣ###H#Y= 9?H'Ęo>Y;M |o98G\~MXo"?F%:0C =Sk bna%-4|7%*15ة i AmjU^-ڞ 3 zv\[Z'c8|?}=:xp8*hOʣqOB>#8ws- h*5:cimNi1c̀-]et:s4fo"bb5>mr*bMpxgKoSJ*90I3i("F7Ogz9)/eOԃnOÎ{ٮꇧ ^םͽ8T/v i}2Ajߥwlx?bU: oK݁IG|{%=@gGPys\I_L5DZS^{ԣ'TE1I滗Wh|o MgnY-f߁I>ɿ7m!TPBk;٤?rAƬo:!G<;zkrguBy1H~.'ުA g941 ;b(+ds.soY<:}Ƈ>/>Ӷi #> =) -;ݽ2<񔀜0wMʚ?b4Pk`4^6k0WS;bdO}#ٴLQ :)hn{ N.2|S$c!zn:7:cm6y< ;|c=֙}COյ q_-ΡR-_s,>F~8`J8BrZb`&cMuISz#ljR5k~d'?q6;F/Y8cuǞF$}k\-`]}kB6k9;!xITNzKg\TΘgء3g/3)CtB cߡGu3Y˯Crҿ?H1tgz[`}极/Po_)n쎘WWtA),ꌑ,ıWKzX_/e%ڻʴ4uI{r]Sq 2#>HZנ<;Em5}2iA=r|&wD}Q7P0s+zEr&qJ `bU6v.銹/,{ynmE3I~uF˔Klg.cQa"/kL& vYS\JTv2k,Qi l6dYؓffMGӴV[u1_TJkߏՅj5lؓyߢ0j4a,eeP,݉Q'nM%a^;#F;s{b+_TSB:18xͺ6? xUcP݆3KElU"wqbUMF:nhK┳ zcBX?~_5=jfΐip7v>{']~ķ$w@3aQ#- ]1Sd߆O<;p|1zg$S^xf?Hl#<0s(Yt7'>[L᷉ϵWc~bE`,>NKۥG-z/O?y\iH{M[ Gos(/%ӂ>_!|ԥ_U3#arz?s\?ן)ݟպcbcI {A2F}]> o_]n_=_;t?=|֔ yRreRAKk5o4םOwط47IEEtݣ.[9@w%IҼ%!uMq SBcsc ۢP +4Eí-9.Ҵfknqmkjhh++3pkݴ$`4ziihb!^hz.n4E6*MCB1R k^]+ikc͍ᦨMw2ʑP4 XX=a-EIs>oL⣽Bs.#thn¹9-؝%n= x98BwfC =E OYJ|;xhop9&pI6(O&O`m6>qo;&vY|-loR|)Ǭ۔B=Uc2磜]8ؘ5[±C|t~ϼ/7~%>?ٸ'߫=M|)|?cH>7V\{֚%^.[wJS罺<PKyL9 \5PKXAtIsO8lib/x86_64/libsymlink.soXklU(vZhyմdtEL}R7jQ XKB1M?MycL DqWŀ9g;sJ9|{>ɻc^؝lBc uʂeS@;d,xD;WXe Ns#:{kmwxHq{aW/WMb_X*,|+'?h,弎+ /*ؿ`gxߨOTu/c䆾Hvcv`*~kK&sllF:I%նw/?8'1T% <דpCyBOzNr6d H-9oBl 1ӹju ŧ >P#}62Wi.8}+/JE:m4 Cn;Gm %Aݹr{aw{a?Oe仙Af) 4yhB Џqwu-uri?:RTm|{`( i^Y5>%t6>pϓTz#u[Dum5jOy"zL펙?h槫56n4V^4'N,gש;{4%L T? |;9^>||~e sRߩ4~4k 7@mݾkB W`E_@:n ;,z;W\R*}{q?3DZV$Ѻ0t>iA5rCaP-ݬkX5tuJ̭&3$"HYT?N絙Ø?Grs<q=P?EԋoIнU3~C/yH[|ٲBa52%%zPx8$R =/;[}qPE#(/#29}rHdH2e,J, ؘ˰Ȁ`D&JVA蜍TExFLL0ڕ뙌E 4& 7\lXohp09["P_ү2F"s€4qaA|Z5Y \ʧyGHg2{NN j+=O0t~mUaI䷣NS Zvz 6tc4`nm:6wN\KsOpȧ/Ko39`oT߽ _e~A|~9@AQ0Z$;ǙI HvyP?_PKsO8PKXAtIi+[+Plib/mips64/libsymlink.soXoh[I,4{:s6Jꔋӂ/{+tܝZvSA`(8 4DTQBPVޗ *vF|;O#μyoo{k'k0E $ 9-} ǑQ C@.U> atio /5JS ¹-qsv[ŽXf.ѾoK.QxKاh-9pCMaEl.rx\R~b^;\ \5̓r5a5WgEb:Fe 5WB5|~V?JxaS.#M[ױmE]!# Isydv)MyP \37 CZZ CW0QC䔦SN^_&Ig4^8[y=wnV&z*듕kkG}|kSE.s\EL~Y?<[99o~s#0 (>E+"OPX[x|^m obscmgD?E^<ƴIw60;@-~Q>.Aӟ7ݯPƿ2n< 4^]jo3fc~MwϷP;"N8N+3"|Y nTǂ7Rh1 q}p߲ۧHԉ_6x2{bXRG|9_ :XskB`܌}SBBqφF{85W{?,t]@ r<&u 3)sHߑ?0_z>煮'w:]S Ε̏+ ]grs8qpj?9 mq>f`j/ASJgWAV{E20r>e`Ǻ9^-zS>;{ť.]Ne)E+zMwM鿪n; e;U >@Y=PKi+[+PPKZuI@ META-INF/MANIFEST.MFPKZuI[Xu5RMETA-INF/AD1279E6.SFPKZuI-U#   META-INF/AD1279E6.RSAPKfAtIqa()XMETA-INF/buildserveridPKfAtIqa()META-INF/fdroidserveridPKeAtI$ 1AndroidManifest.xmlPK !rsff&res/drawable-hdpi-v4/icon_launcher.pngPK !By y 02$res/drawable-hdpi-v4/icon_list_active_broken.pngPK !< .0res/drawable-hdpi-v4/icon_list_active_file.pngPK !p*04res/drawable-hdpi-v4/icon_list_active_folder.pngPK !@*QQ12;res/drawable-hdpi-v4/icon_list_passive_broken.pngPK ! oLL/Ares/drawable-hdpi-v4/icon_list_passive_file.pngPK !s1pIres/drawable-hdpi-v4/icon_list_passive_folder.pngPK !4˖&XOres/drawable-ldpi-v4/icon_launcher.pngPK !RYY02Ures/drawable-ldpi-v4/icon_list_active_broken.pngPK !UVV.Yres/drawable-ldpi-v4/icon_list_active_file.pngPK !F0~]res/drawable-ldpi-v4/icon_list_active_folder.pngPK !eB$kk1vares/drawable-ldpi-v4/icon_list_passive_broken.pngPK !ygu/3dres/drawable-ldpi-v4/icon_list_passive_file.pngPK !nZ/TT1ngres/drawable-ldpi-v4/icon_list_passive_folder.pngPK !HH&jres/drawable-mdpi-v4/icon_launcher.pngPK !0rres/drawable-mdpi-v4/icon_list_active_broken.pngPK !<ُ.yres/drawable-mdpi-v4/icon_list_active_file.pngPK !e hBB0~res/drawable-mdpi-v4/icon_list_active_folder.pngPK !⑐)1"res/drawable-mdpi-v4/icon_list_passive_broken.pngPK !<ُ/Vres/drawable-mdpi-v4/icon_list_passive_file.pngPK !%OWW13res/drawable-mdpi-v4/icon_list_passive_folder.pngPKeAtI;&:ۑres/layout/filepicker.xmlPKeAtI@ \res/xml/ck_settings.xmlPKeAtIb ''res/xml/default_cyrillic.xmlPKeAtIA̾1res/xml/default_greek.xmlPKeAtIT~I7hres/xml/default_latin.xmlPKeAtIres/xml/method.xmlPK !P+P+P+(resources.arscPKeAtI+a @classes.dexPKXAtI"݀D:T5jlib/armeabi/libsymlink.soPKXAtIOײOlib/x86/libsymlink.soPKXAtIz+" 0}lib/arm64-v8a/libsymlink.soPKXAtItlib/mips/libsymlink.soPKXAtIyL9 \5lib/armeabi-v7a/libsymlink.soPKXAtIsO8lib/x86_64/libsymlink.soPKXAtIi+[+Plib/mips64/libsymlink.soPK**1 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742812298.0 fdroidserver-2.4.0/tests/org.fdroid.fdroid_1019051.apk.json0000644000175000017500000000215414770232212021733 0ustar00hanshans{ "1708238023.6572325": { "diffoscope": { "Available-in-Debian-packages": [ "coreboot-utils", "ghc", "libxmlb-dev", "radare2" ], "External-Tools-Required": [ "cbfstool", "ghc", "lipo", "otool", "radare2", "xb-tool" ], "Missing-Python-Modules": [ "pypdf", "r2pipe" ], "VERSION": "240" }, "local": { "file": "unsigned/org.fdroid.fdroid_1019051.apk", "packageName": "org.fdroid.fdroid", "sha256": "0eec78236ec5ebb8f416c611717bd659b75d2b6600ef71a50c922efc99dbdca2", "timestamp": 1708238023.6572325, "versionCode": 1019051, "versionName": "1.19.1" }, "remote": { "file": "tmp/org.fdroid.fdroid_1019051.apk", "packageName": "org.fdroid.fdroid", "sha256": "162cb14b93bd9b665fff4256b4fc91cfe75fb72335a02b1d0febe606220b50f4", "timestamp": 1715356428.522411, "versionCode": 1019051, "versionName": "1.19.1" }, "url": "https://f-droid.org/repo/org.fdroid.fdroid_1019051.apk", "verified": true } } ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368094.0 fdroidserver-2.4.0/tests/org.sajeg.fallingblocks_3.apk0000644000175000017500000014106314743421036021501 0ustar00hanshansPKkVAndroidManifest.xmlWMlTU>ӟ0@)"0mi"@?Nۡ̔:oZBd,\4DW… c1ĸp cq~sݹ|=߹sϝ(N!򨍞4mN`^&uGq&1#ukǀ3@=%=xl%>~~V w?.7.+E |ՖG3,/Hl9_zy {8zȥ%V'ؿ̀w$OI8ɧ@~zVio5axa֗³@ޣt4)}0{A◩8IEF-a G#$S ,4]W3KZd>ʢ·h$)zG|ԋ0Vr>dbf/*@Aa~v&eD% VT M XR':;9YuX/`9 ^c FfAHMK= d?;+1gx{eزHEɉE|x%=P0gmsie2D";hϒF{9$zZ2!%%&ўJTϔݎgݱ.gT0sU-QŀT,+WЧQN߀{jVɔ [}T|Ί"z~D gxM&Ƭ;ۿګP(5wmk>{jV1V_aE|Ff{=ʯGq\F3gQϣo.fTlp{c gryߧqIpo^nK< XhM@0w/'1u7@]&pZ_wZ<}νO?)Lb[c3,nr%CVyǖۇ,Ep2+ሮZCeJ~Ljd^VHo%?W|nUnÙ>zZ֛ZVb]Ezh6r)䚄[a5,SnrT¸vGĤۚ 1ݧku2g瀫e|Ǡ Z>|Zǡ*|Uc|ZG IKZ>|ZH>|-uZ>\- /[3AQZ(oy.{紞rC%j[ƈk#Sy~]"v:^+vη>8oX|04|:`ji-Z3Yqgu>gsFoDF3[7PKz^dPKkVres/mipmap/icon.pngYu\]]Z^Xe)A$%\[a J@Bn^;S$n;Ν3<>PmM,o"YwƆtd%L ԋ(qyYs}ϢpH]U#*J6?M N|@qAiEw/se1D*Č$>TVhȫ,}=u7Hh;m{g{Kj$sisK[6EXݻL[ 2RGЊZ,c˼|S_6R4 &C۟F*h]uʓ`Ih~:"D;yyŨg`껎z\C6~=xogS//n<2qDԽ-<Yʎ*7u5S$e2n=wSz '1,\d_r\G~'clyFt.J ~-^dT(o$(92l*"dN.=f#H=kk,uZ < ~haƂv MT=$ҹ]~:aI}]0;O+cfa^61dZ@噝;zi+ yI+AԿOp_I5GNu d‰[\z,9XBbo$IO01I[׭x575͸OؙEKP$΁4'ゴEhWn!2_뱳}=_ ~ٯawofUI0-pJ\Ϫ{~!?Ὦ~+u?rpz#IpˆN!<(kPF ^|(-n} ̻҂Kwrp1/h(CtRG|eUk=r>Hг@r:-c2iR&egl#9a,]6?+/`J`H\> חrcP^8z-+SDSϡPlY&Qsǒ+Kic.UPgµ+j@ɊS.­*/П{{gk+v Q/!~%V6X DMO5 HJ7E?kIuIg@ǝN' 7Yy͛dz#~o%TЁ^ì:n1L\DŽ0f XW5J%CֹwYV`ZKN-qV ?Q"ں"6/+^Mj=f PXz ~qio:kkO#z:T&YCZ)g?%=;M8w]"X~`OpsJ^VNwPhtʍB`iߑ kH a_p+㰽kҵA]g(DP% i3~/լ5Be9j 5r`G_ 6a-k+ F_]sVlw_n0wo`{Lq٭wT=p옾 Qi$0@ڲ߃얟Kj4a>{.op=EptJVa n.RhNf;5J&0Q(pfZ9ܵ$64kN(ÎB*ˌ_wϟk㬔VEH.,G9T}HUZY` O&*l5] !/akd$Լ[8!4ar.\ j'(;.~F w}Ov})CPoI$%9l3p>(g|c:ۓӀ0HBdg{eKG̺H,WZ<3hmEm$Obz_v>"hTh ZZ8$ٱDc2^{OeITIcQ1 /}@uTĔ/^(I_T!dkNNסּfӯu $,E?+-V]2ƒ.(!_]{8(;)@eEE\A jlKe8%زpneT`?r"* ]X<H\ܓS$lbhW0U<(j`?y<8rEr{g˯TϚ!.`Am%$@w RdnSU;|{^UL_A/7^\BcK׹a7R`{x NRuN2{+A7ٙq}%Wƾv'NKwOf8}2& xu0- ze7_l*:[q~_ €GMà'G3 z!͟GJ"hɴٟk߆:j\X:%laz÷th< y8ŀ3$~9q(BmU"jW]-#5:G%ᇇ6͊asBai"':P| d5=ݾ;{ϦD4iTc5~%O-Y (7.f4;Su84_m)20T&1"̓ͪř筃 mZ:*Q0Y #Ukʧ%14XySQqYC3c,FvM-г?E0)u|-Z&z):|yoRIf"_Z{UG`h9uja؈WӄSAaү-!aF.JRGuE:Rμf}kC ׆kob`.Q> U1HcE9,B:aOhjtNd;7i+A6aOS#$, &)猽 f47mPCBzU#!$iJ$Ŗ[^B55_0Ϳ|$1/̴PW, &C̽rtAJA=抺Ror 0Cmwa Ŧ1~nKuxR1{_o/*;MdL4^sƤEeTTHg% ɦIyL7aIQs"N\3JgJ.>)9 bǤޢn'_oo{ LrbpJ\qmc;,0w@ /G-aq7R'3G%}V)6Cp>(/ eXz򽕩9%{Y3={]ox}k+hOӚy9 Q{O{G,po;\e4oF،34Vk}Se3,e %69(++Ro@*_6T|@qpһ'W;^"N_Ì /2/ͩz`›MZǹdvɌFi`s-żef$<KeחPcb -*DK-L_t9&oW>AbDX<aڧWdcKj )^n{*!)gH1ݯ{mRL3?bF v_(mȊ͗bm\ڂ <gL1։H30^6GK{"ӀodPy~1Mj$x(7X7mi\é2d(WƀٚF?鬧g荃.hC|&?8c᝹~wBZ*O\CƈNĊ;.χ[zWa"@4vU^]"EjRK>`jz:&ڌ9ڿ,RaˮK"J!Zǿo*(t2MefFʑ<,n)&H֋r &c #Tb|=l(@u);gD_>4M @A6x[Of?s}Qjev3 2KTpIEPC._W>^(rj|6T,ڒu#¢>Ε^T1|v8`)@isnnd YH9};Hh?W"6w4x z}/vuO@ ]ֈm0Kv]p;Ƙ`}_rCc2&\Q2Sn#C%k}p %6][pHD@U GL Aw&{_$c]?b2ӘA"NB>޹3}OwOQ=}<(t WbӍw d"_uq>L(D`&ZraTLQ@V\ZOK̜p ;޽[BX/0:+)jG xH$<OfYzWq/C=+@o"ql,lQOU}rM-uZТNaҦvoL}lL( ϫTA<j=&Nk\\G :V P)R3ʞ YuFh&S'3K'mrзÜ G,Bw .mnSb@w8z7)tFr(~دbn:^#H +n^F˘rTd+gI~ɀG&IIak38E7 D. u((^AXN:3ss_pZ\cFjd!+L!Ri5?f Wg62*$v&L5!L[y>pA37?{tsz/vW 8T&Ȋ䏾=Iˡ7\E<9wmTO7X|HԲ@mU5~'o'<;;;:;"wS=.б{튡%@nލ|l(DwL$(>qZdP)x̋/N 1ZT=%U.gˋR&CM\-F:0N|r a؟!Wlf&dH?~6fVs9r@`-0hϕd3ͪ%^e :3`¤Z:Xq*tv!1u-cʛi~񁔋boޞ-XLEbF~}*,}l[s91TӐ^Pq.+dH{PT1ه #g[\QfWh誼~%]ُ&=yH.1`̹`љ-Ϫ͝F}>vM]/I3/rjl=nϐ h{tZ*+s6{j_.M7gl/TK"Kyk }6 ­qA<~$ChBn_0git(D <U4Hޛ] wՙbԂ^D4_ӄ?E鳦[qauWQ jMA>8PŒN$j'%ӛN1뀙ҵn*ke"hۯ}?"_Lk-'q55u[dfg:C$|\J4d.޸.ӗ%d"`#gnj} 0G4{1y]] Q6(!;S-3ol@J(L jf+|c/;!ѼFt9әk魑^<\J-w!'wZJŎMz;F\M Z,r~ٴk#OP&WwN`U>XlʱC:w2ɭkI\ £OBk.A(h?hYƳ>}f/;0Di{px57ts,Ie>+yzI ׊y#mm#lӟ$_piIpyn BwT* ?-lk9ͼ nq@Em~6T4KdMPK1PKkVres/mipmap/icon_background.png sb``p 9 $wXH1f Utq ɸ!#whW\^ PaQ[xoeSBPKiZjPKkVres/mipmap/icon_foreground.pngT{w4\ID/eDAND{]Gm QG F/[o019g}x&OL XQAF } MS V(S,ES- nFβSR)ڕV|&g6݀ŴNZپ*^m<=U ѡ2b_+Qӗw-,+N%' Xvfq?eRD㓳uǽbPKḰۡ۬a,r^i\ځE)cNlhGkrJ/3Z*m_7kV#UpG8(CR cί{vtч~Uis13 ~7j~:WLulϱ)yک@ gRmK ~r_d@_,PQ&7e[> EX '@ wC%/ E=G SüVރ;9 Jռ/SnG͏p#z3hm~Mi''N*ˬ 4xr#UV9sSvWEZ^ JüPs!{DE Sesy~^Tl6QtJ`m%3G) MK") iC ,x)}c oWiD԰𽾵L_Eu`.l7(4xɁNk=-C ;^tF[(@^Jhy!T?f|/CET9AK-wSʽb(ž9/.2to([LK]jz3G>e 1<̼dىpǞfW1M >|g؎!' C숫bj 4 gn+Gctc5Cr43,w:+zȌu(5dhfzna&/mF>ѽ'.`/ihPZx~KДASpVfZ`Ű:'GA~7>s'D_kWӌQF0f==Cs|2EK|M2Ԯmwoay26?^tO慺ӥt}8\;8;qK?DXՊ3; e8~' Ufo4YH~"rz^-]9o3L++GD/M4O QO/e<+ɋTDCVfPV/'6ܽCii^*_VcrfT|25(Fd,U?FO4}?_~\$վz9/ޕ4i-XkF,&F"4 #N+:K :؄Z;{qU-emP,a.zxЦWPD0`d==8ʪz҃3lM`E C4@DFeoWH[#ŧZa<9PC~"Qtz.'\F!6ljfO z)KG_ղta}W #o008Rmix}kzokhPWjO̞t<[{`}h,,tmCA .[ەQ:\KKyHd$m!(9R+9S;J6 PJmnR35Ixim;Ç*-Z~5_kMfseP2?KK jP0M;Lm㛷LZu"ޕU2: +C4ͩ82 c,t5Z28IiiG͐5Z^[Ce#+GiW[+4ʮ?e2,+|.*de[Z2A,1^:@^_V%-UHJQtGʻ;-xY-~-gg.6ÞI%jF]]6 Gv6pgŻĜƪD8͹Vx Ʉ].C'OfbRR2a7EFmQ6! {޶om -x^xc}% J'RA>qtu;yeo1k #ҵ4Z vkF7Ȭ} %we,PTG̷>n _5g@T&),fz&DU:D+׬Awc5b{F]XDp],xPbd+^|D7#y|0^E-a2Q4?J,h}$= D.4,NoHXS;qŏ 23a츲!.IKrYgiMtK_q1V #g>=3??~=]e->2&`X)a4]^ɚ%R|lO隃^/ԥ^ _!'s* * ٖNB r٥~xS|17u>󇇕[<>ّ6$6ei1`^9bKaVem6aLb].iqf~gcvPĕD ??nA`v-] x9KڌBOHZn1oUE-9i/~JۯTZ6ɶ<`,\T-ЬV+M`ޥe-[O!9/.GU]:!a N 2HgVXz$@'闣53;kȝ 7ʞQXD+Xj_uCq"덽n8Lihd?KOOn|5No+V D(mAI6.؟fuQV6X oWt[Բqj2Pp (*[bE4LBɩ]QOFlZ EӻGyˋ\zxb# \]6Q3aCI ne33TP~X<Ē2{}됵!:RYTJ.WDϔg1:B>둜2p=c;ǨAM;6jݍudy!!b!g=a/T0uz.Oy汎TQv Q5l##gQkkuX9m F@ r{7R#NNcƹ| +|*,>@Qj,}u@//'lW]\(^Mۑ;AyDtڧ)?`JY!oZ'.\%n8μluY9v(~5,5-{HQLvt7[~ [t#(.:Av'W,\N46)Q~d(4rweT1!?$Ecq?&uK3BX}NLF}5si6+dj =BsCw >rTlAH:ZIi]V;TվTs?/V2 &gk; $LyFPuO5 MG(&: R(H&N$aczȪ1#?˚fpWv?oTz>U,Zl ĉOiϝbe(,1_N0{RL7CW ܯqt:>EU8 V%&7SE_u^07f:4tuܤ~H|B+L]$ $>ܪRtm5A/ƢYזl@0aÊ~ysA SzۚűnqfaqL0#1A۹ժ#IC,&zk7#-#@\ JAn޺Eku9|Ö!a~R9\DRΙwUep@r5E+OfUNpbfg5цCLK##)M6/3^.ilK"U֞^d-,l#7I^;6a.]/98 8z)JM*ߙ0x$W]ԒCbaE§pTj=a6Ga+07 y\8gwfO¾`tƦ4fr45`tam#ߓC7ro =GZb}pԻ-)TڒuLR8-Sq~{YRqkXG!<ԤЄw dgC+SwwVkF1N>$Q[$Omisfn[{ CiF\vr$š.%K3:;Pc|'~4dR<;Ax?~"qdr)C/CdePay⮸G.S?Ijˎݕ('b_`4ze^($=eRA-!c VdW4|b;z;,UL?1XGP j~wPULt銚Qu< Ğ|ĖK.4dd;3:AK!^+J`i"~ut%(Ҩ(k//qbm}N:4Zx3,BX:^p]\vM[{5 o_!8Dt>Hࣕ,w.@SWD>RvC> K2=O8s0flsڋTfBHyHtpJCjUd_YNonC`Q5,H"%Kjk_鑶;IV[ T,J_dAM_ymL,8`lBWC,4;PO5sMׁQ8z޳Y;. ?"׿sJ) 5Ar1qF6BҵcvFl -4moY`ͼP9Ñ67ηg%ڏN;++'ӹ1cJL"Th})ħW$vDѺƾpcST<9V1 N-a`㦫!b#0,w#`aIF(C Jw'"U#TtX +]=Sj{RdoD5^:#R$Iv~aJp3#%hX~Ŀ<2v@{2G2Gz[(D Vڤ{"KE-WoO[3_$ XA \c^3`F "4louHoxnn¸+^_Or]Ln4ȴbo3Ɓ곐[(gݬYY|r4,'h#ckOhͻEʗ P5\)[}̛5mBC_Rf.2 {OVZFd&z4齿G^ :Ss×'-Kt`tc:4^՝m 9P<;2e!wR(uP}m)u;tz_2nUKG}PDm63Y<@_p`G&NviJS<*TU1LW4J^kگu'^8\g(asxj~UQߍxyH~L`N>|.2|( MZdBz2%Gx 3,lB)he9~qF saYdtTPfo] y{JoYGK҃'j`^ fn@d䎮^*(wdϞdv5~9ZrmGϩgkAflk*T~t4Dx6܇ t@ӂJP׍ 'n0A7e(-F|_\FOr<~֟a6%ѧEn9tA# vxB%{#bnka$LQްI$B8tgGd Cʼ #7/elqDTcDF ZGti/ r5Z֙sIU5̑5S;)r^~u?{dls5+2Xlq T!^\ XQ&y** xΜm('Y(&c8"WIG/(}-Y%%^Jm I{DɆr:2]BG@WU4&P?8Ȳ퐒dٗF߫qNI#Aܢ6"~`m %!)buAۆyXI Iy;_,R&fϊu}+:1>Q 2uy_Ep?6ߤɉ7,hŗ1d㇗ }~6 'C-7SS'ݢi|w䍳QnFnsdEOl]qg1*1 @NZ}Fë,yh%WC#p΄R:fg#)Y[BsL!#Cқ.m!]·B@င Y$ti{]4+3}px 7*[ԐV>G @ᐁZ%P}c'p|EuBa]}$zoZ:;hhܨ=W啥|]mPջjYg*8W\]n| Lfp ˩eܤmij9/LjFWx?<Z:h99)7+74(XSFaSgys޶~ZF\vy-X҂ jrGSX6zT͊r Z#A+Ƹc>םKܬJz=dn{6&[᯻d:͵׹Ou}Z)ՆZ^ur:hƼfMuYwfwQ)Ǩ RTOWD~y'ɨJvdb8 9O@tQ:-M6ĀO0oj1*Q/s|W_WQŽCRB.* ҷ]=w +DkEz WUP0~bv͍o])YJߘSKn3 6oڶ[A*'VH 6]l,6PRkycN`isqĭrlu+IvmpJ2u'Y16n1byXx3T0WV.bX$;+b<èɞ7Q<u]a~ijnDD!Es|;R '6F+nM! qƉiPƺy^ƣb|ڦ~m\O {xblOj9ҧ8j*$8jgv5amjlTpAM":Kt76l淈Bmls'i,(خ&O;t_<4yr +{:^uؒ ߕA> D!Z!J|G `vhn&ʦ\ w$U7]|w4>LR:64%?R,];Rnk0ic1F;9 /m(7 h]˼:i5by1~ѝMH0L:,&D(]MRK*i$k~ve*dLiVSCgp!-HQ^P-!w6Q㟿KmHKmv$MDoMVeEMoKgGƗ"aCl)3Ƥ 4fFQ^Xh=-JeWMWlq\t,.iu5<ݞ,))u.J {0ѝ?)2^afyjczBWnYKɔG~4Bpk`U蚷lp_ zĂViqQ sܹ iyLQ,!'H [fʡŦGy?!b|<1D0x]p #xIZ*nmv5AAgtDf_L:Kѫ._gi*H|yb{Yz8= x9u;dtZ[cI]\6 D3tZ5e+`V7gïX\y p9}&?ZVl;.qpZt^\%btz!XsdJ"7;-z s9w:`&@H@Z'Eq|n{>{cd2${#(5D4Y cܱcw*;nP_\ E JO.F򝇅~4 0IIׯq׸e\\Wa1&A\drbیT΍ve8D?2h_KX9 ͮ:^9ŵ_ؙ5;m ͬZ6yE=xCa<;cdn&]3ACZ٤z_cP;"C ˨خR3uF:Øq$?VαyS/?;w+g GK[Ȱ7qFMGEW\Ay YNٓCV Ru?t%'SH0 Ŷ\nn$o% +!c,ūab@ eGojqě|%+L~I}`DP_7x\_m~f < {5#j逫Gq36R2|]pD00%.7I]k0dpvo_wB,8:zNs&лNV;w[^LIDEȏEW\,z}VwiMtq4nLNwUӇ\M!^!wmw/RA_D.2YolwfN?}y$ztv4!ZqP iᶊ~;g^6P˿LǤ|:|qLnH8gi|Z cJؑl"9,[QbO+J칟QboDs`34WuqPD~;k1pIZ`{`O9F=izAK>dF.-a[J8L;`[1\֛@3Hi?7ORYŋUy`.Xx w=#[.%Jrd]Kf7R0Y=o:**Fgjfش) )qxcqZ؁?'uXɨu<|FOǍ.:H[ԍ{ekk_L?X W()iՄi(ޘr&6HgtoZq 聅O#[Ѓ"u\<:|YmE*QzK1`4`lkS$\Ǟ`nHDvm`D8@{5h/JOere*bӳ^d25(Tyk&ȡQbN/fbcGS>6Ἳߚ`?U744+P!Lf MHXms{m7źߛϤ-ȥQN3G ?} -hW3_$ 6ȸ##E/?r? 51Pcልrۙ'I+}n_V ʼWFx_szZqtNӑoӡ=%ܹ!R٥cnFt&?X"b|I=hGx( `_\m=;IGŸ$׫._lkMjPȌk;,5!`"Wm>qOLo67l L!B4ܦ-V>ikuК'ڷ9'%jL85@[ŧڊ[&V1YBC6\M87;h(gVפ_[ K.+.lQdwsڊ6|QrW(2n/sYO¯, /<1.֔jlS"Z_fz'n,IƘtLώ7<$XYQ" >$>⣮!7vwD!ނfoT$>I7 aH֤ۘv#xn?:^>J.bk{O:i;3;1D([,*EOpr, A6/(M>rwOBY!O<-}(R]zij]7 /m󬔆;mKD=oAv$r bO9#ݽ-(4X*d.Fpb.7 U]P b& \`<X>}dv9h ~̷JKX.{7jlZ5Ս f.;H"]̂i%ARQ*CS<ƾ`ἛŤJsƾ[aPp+F#: GNm7>^NPf3{0wj4T+ }buEor;I~nA%aي )|M@wSiEIt?sn?b~y|TDV]^G[E{*h+ Yo;H*hy5r8ٛhDJg;Q!J~Ϸהe2߹{zҒ 4psDs&-G:>hzo.He,&,y)oKS7<7lԕZ)kvYV]wc-AS@o53~ 9\R̶K9_ [-(p膷߷3I퇩]m+$E||xՂrYw cވBtOlT|,؎?z3PbI}GIUu2v>b|0r1/I *&Zny,уSXeW7SX˥::&kYmYRӵ 5^!X;GcDز:Zaakޝcd J._ֺ]q5b'Ms se6h$-#ۜ@u_]$GFV@En 7__O}33u-*8\ӗs9ߓge,r?wܮM!oӏ54T/48 X2񭝫z2?u.QU a@KS泇zԸV;nǾƲnB]ڎbіGʿ: +1[uzXO+E͙՘ F\ >gWA(c!A?Hc$;LDhòQAe[J9(Wǝ1 nj[JZ<1%bLVWWGsD~)mKskF(qtahQkSIIMݎth\}x؁xX94ig鶠jXEH3+1Ɨ5wvvyQ ߟE3gè^g˃!e)R48 9"l5]PK.үHHlqa01Dάߋgy,A0t>vlA^6Y!~@_aY.¢-?a_Yk\jYiqV.DQW_$O$v½qR-HW`OY9գkB9J4/(pO}2oQհA&9CZL9ޣ2 m  rWIZT@kU Z<އ8XKN,A"B!fX+WtLyo%\jU WmOvRT$V{jثv͠UĬM՞TkUQTE kǹ^lzOԞo̙JѮf4+9.?f07~ ;v>yp%wbs. MЭn_p*dpA` cSކ{ll1DOY1fbiǷnLˆs~w'4:,a=9pb k5&kfvMg\1B/I%#{"\yaC! JdG 3m2ŅF!ll%t;Ca~?o}Sv$a3Rpbdx`QisoTmp%xDVV IA@zq`A"m4>!>66ʪ:E \kMjoɨ] D:E3Q5ӈ1˜[9ױYEe%ʪ3u!˄~_Q!:y;/D-Z)BV 5Zd PMI'~Ӂ-ym3w qPf5t̜]`K BΤ򉻿һ ӉzH0SSg5)7F?x)ծ[1\͘& 3X߈&@ P~SE䓟%CԱ=3{(f.ï2f\_?w6&ע>vקMdyc=ʉ1ګ.~Ah-g IQj"x8W}6OrK^B/t#}:e-4+)EJy2}ChQs`srR"W&>gڄi.DBvݍ#QV&8~0tJh`56jY3LQ0{8ӗh+v[` 8mz~=9U}HƤ0ǡ {xtP-Jl\_&6ά"%Q=HUCDa2/.`|ThM=dc)h;x|U;)yc㏘QpDIv!ަWż:f5_ ʡ fE 4ls,|7(d#/pd+(:qR.t=|Bđ&y_>x oI!U9kv!cy<8VL  L#*#jrKH/:n|b]~f {lN`,g?eu[5:}!G9)4F9e 7] >NϭJET'w[DuՉ`Nkd@Qf1ź1@QqZ&-b0'pmsUN&A٢g! # pXy!C/vz)(ٗWc NjmqG%:k46GΎYqeƒ3v_Z\ul $7J GմޜeO58P#?sn˞,șǬcP=c(BƬ^p2\bG5.N*I1s(ŤzIg]եmcb<q> VR]sO~ tԑR5ѺCX:z2'WXILoeޑu>b?3EVVe:r="ߔwht@"k~WzCB^\mg~6,@;1=Y9B$gm"Z- 3WĨP7l|'>{ݨ^mշ$~詾n^]O`0 v^'yTn>Ia9I7|`V8Hpb@EP83׊&6/Lf c;.-?Sz^ w;Fp3>+'CB*@BL&=ݼ_Ҵ|R;!]߲f(H*xnZ t\y4ZZ򸜹fiQ?f2Jug_Xi.S.WW5-[vhA$N"!2Zޠ!VPB8 U~mnq ;KWY$1=, Lj:KnX>mɯhuv,ށ*-[ ?XwɾK-T?;V+1{SsWY$'C$pX',V |]&quༀR <6<xqcGN}+B3(d"]T 7uԷ&"k$vP5H~4ͳbjѫͽ}WU@e? QO9ЛǠ%b|u4-DWi xS,{@TN =8eT-hˆ0߰Pz=>@;30qi}jPFRf[&ɏK&Wh$.8 q jp{v,fyy裤\QJ(K|<}c~1wm>_^݉$RmEj|'ϐG3OtQ+P2,=^E;ή+-X?ttqѕ`k(C&L+=ۨ?H?a3ˣzQzA"QVbmgtMJR|@9Q,, .k.@_`M畄 F__b!9kjo ~Sdzvˮ9wȓpZƭBoUx \Ҋg1J_5xj&̪z.w#fȿ%yQ%yam"rJBVUMG))m&#WaѺ,uRU j >T/gܭ5q]˟z7ߘUǸl]ܠ=0WM姯cF!PK1BOZ[PKkVresources.arsc} TuhE,-QB ݀[lda ]z]6UjhQ4ز'DǓ(D1`c!Grp L$9ǞWڋj)|]uS+'#FGKCT`. [ODOcP -߁K&f ~ (Vipm&Z 1Dqe,fmV#z1h?G& ll#:4$NE}g @d=9u 0 ,3v瀶iDa=ӉhA$:0{&v `EѧKi&m [Yn !M%` B4 p8 LC XAp ЭD>`%LC,6A;|o <\·O |06..Ii:s}! $c`hMs(I> I}dq2(J'ep=P:4uBC>(ߢ(PQG {> BNAڬi&,U T>CeEJWcPJiĤݪ7Iek_)fXrEm%;:)| ﶵ,Eݒ,sʾnsHeqуS"55C}**܀?W]m"%-(إzdlmza%|Trc [Wv˻d9ӑeӶlN,*9^D̑E$voUn))V`݄YdJlU222svqGʹm<bIǞzi%&ϝR 95XXpFݥ-%#IW3ţjr$)|'(Sf{&Ƨ֖ml򩕘Wn'Zhr֕3VƊSm rzCY=|j]yآmCJݪ2ZYY7TbsDFbEz,[׈E~*'շ~Y]9aՓ~Vr"jZFdߚ%ې-W%/i_iisB_SO[*uuZd$UC+,]室˝aLQ3rJثWޏITiQEwqYo"xb{sZ)l]:j& K{ LoknPD~SikFLU1WJի_vYZfIY`Ze8~bWiK Hub_mgyPiPtTk}wWHb}+EZWhZtK޺݅|9KiY"N]2t7uaL90wRr(t eh;7oKEiyK"/SrS͖DaRGΖkYFGY7'dV#_x13J%#HZxUr Ge۟˫QB>TQeuvUָT$_ȷY*FY6*^6ƕJu_21:YzLB<2]YY3ߺR<ꜙG^>tYe#]Nme-f]% wc^X8lLfa+%9,Tja['唚˪^)] kZ;}t>}ռl=/܍Hˑs1h}}(թs:oPe\N|{y,w+yi3G;e_yg=k~^} DV)G^ʳE2X|录NmYz-hho]B%kj=dlh^6Yt[1}~/Prlo>Pry_SYf/VR+_pYݣ|Nqye"o^X\]T}ߥ$/|Xץ-[/Ҏh,Jpʊve"񳷅r#=^Nsۯan=+r@b:ʓэgr+#wGӕcLJtG}䳧]\8Ojǩ'^pG9zG_νtή%/\9v<%Ff'2[~SΝj9.IeϜ7w1%Z<2ҜZ5}4'^??xKٖSZ:AO{Ům=~㔯zsߜgzpGN>??zfK_WEGD%?knyB}g-,e}gWf+o|ґ7_с?Fݹ{n?'k*&bȜsj9.pݵS[#"woΐ`vkORz Ef> 3iWagG[zXv5ggtz\~}LaW^\u8 gٺq<[d8a=ZK^89#ř'~ӳy#FO5VFUhA5z/wxxg„4ɮ7&)r3[K#WYgsH+_$ڋ]PW+W'4~_$i>|'h'~<ó&mfAjUu{[H ?@GdM@/ SwwiaxL_ poMFV`0<_`R{gLwa[Ƶ>yꯀo`$6`8N-qV lb~Y$mS. ߁֩h 5/aG̨3?n+a.(J'%X㛙I!˛gZV47ET.d56ŢMPLJYDk̄ӽiL+0YfM51VΓ4Mi[)=b$BE'iN XbYAs7|ј TqPX832oA{P<6Fj[& ĐBof [z@,7,oʲXz4iZ~bNyHUr.frg \S޺S6[M7IIe%ba|&f"G ~vY?o^ ewxcQ=f|qM!t\(PغlGOZF҅x4-<l+ȏ!cHV,c H$0 Eܼܒ#;΂#0ORѠSq07R^<9#:x|}\ڔ8r|uxZq0!1h)~LS XH3gʌ'd ԩzTpkj9]$ˌaΤGkf>k2Ct!8j4jnNB^r>':7%0va5#UPs;wCQDK(T b"h% Sb+XۋX YS=?aoU;nU4qN0] `ges)2d=jo!YpC"^~M˷OٳnaҺ7RIS\ގoUr]/NMf"cw=RM,(ɫ l;O6ikcvO#&:MTގ煮 HPOXq3v XIg#v10ZVnat$sI,y g2gP<^ױ[XglD1a{d)X4RiլY` wC~ G# Y"Jbl&Jئ&V!@&@w.Űt-)O $z`qPkΜt^b ,.󥋩oX!LL Gك!34)&t;}Ɓsf)P=".so'4TA(= I2ws ikg ٧9Nb^453 w(jt(ot3wn"qs(:i?Ţ1e1hV-|]DP۞8N-(;ML~{32(cvKXb}pSzFV*Č G{x%حwXLZ9QK/T\5Jp,(!NFD̈OfH{g(CGb|] /:BVB~op `+cг#;%G^ΑW/yc +y <.9FSwzOFwK_r 4@ބ<:M&k5?:Z%X|+ѱxzC97jLl?uFnAG}CIQJAX,Vuvlk47|[l>C+?6pJ{~Q79g%~}N~oڟʳ-16'uN͞yo|OM۴:ĎRUOd4RUXgtx+Z!WW:PWr/oupp#| .e~sg+R^)/rV4++9X.vJr~Un̽JʞE?']KK9Z&\ʩ穘/-ɾw~c-Mof";[kZCofߝ}wi--hcr8>p=Do[8}`%[q`p8N;|}Q+M IpxOX lvq`p8N; K3;88' ex}m#ɚNZq^*}_ߠ5>?Cߤh|Ʒh|#T4[??qwhxjx5>?k=ok߫}?'4;RQ5)ZOi3W4{Z㿯@45EÝk's6εq'?n|t^Q`:~M؆??dRnџu.pYԵK沮X:a.pY9o^|SuOycj5k5[yO!zͼgk&lOގvs8.27G !+y+ϡEg%S9{>}{H>\>cMG5}[>PI쫧 \lGDxA}~^3Q>޹ч<{^|]U`iHw%/ɟ'r=z 1 ur_ rYɼEG ᣅ$\ r/^>V7O["M J'˽#:%\p·wkr{U4,\UYr {Mpgr+'pE}O GokB^K9r(}ZA A5>A0c{2Ƕ\pǶ\pǶ\pǶÝ-/ܱ-Oܱ-?ܱ-?ܱ-Sܱqk*X>cK}BTvTv96ǯC9VfH]-hK LmwJe?Sm{F9e~"6[5hs~6j|㻷2GjoVb5JRTBזw/\rԠvAOVj.k噇w^;Qrl԰b=Y#ew5b])2}`k|㿿BTvTNjA^XgKA}2}A-V `_佶vReC{g٬摴;?A5fs54y']^mXe6q>;)}vRGqUg'}g'I줼>;鼧<;)N;줼_>;)ϸN.줼>;)N+|>;)7N>ApcsT*}}*jG5@y{];QrHTfH]~wNW>8\j_ー }Pm۝R^=A^ǫX\ `a=3Q첮]`;%{Wl$kbzkb;P#ew5Ʒ\(| y|/C5yסͦU6WQ#ew5Ʒ\-A}p4Եc?.9ﵩ m)ro5c={:`e6woZ2}U{>x1^ն9*]Cן;C#5h_S{6~lF׬lK\6?5_{=摲{Qyk~>*]^Vol6m摴;_.j_Ľ  dA'""kC֖ʍoIlリ*Z<2nif6%p⼗粼ͮV')ps"uߙt^onmnDž\~sǺq빛0*fdmtcj/!v']!ߒ;8=Ҿ.#Ş7ۓ;b_|_"3s_s\2CF_NHMMfy"os?ߵSvTNu)xG^()Lb]66}rl< armN/ Je wSkQxac,0!E3 -k g)d `z{ ^}Lo|{6۝;k|ɻw|2z'ϦmyfzNbU ayoJ,{fGN H26VNW[gߧ'mϲ~ݸ%n˛ >~lvZpRdRGϦM*&mebò Խ[~Y:L>_ۚ/hk v,H5\i߬tή|StqҥPKkV]9OMETA-INF/MANIFEST.MF}Mo0ỉ"0&;(X]*VD3˒eq@JvXdusA^dZ19-*뵧>FjZwj]rFBMȗTFݺ}ZE{`ک〷])F,3 twzdͱPb0QHN(=4>7KI;GtELj_hkhZ{%X;G{Y7"iE̋Q:؃ˎq".YK5`nsĖ攳c-HN/q{6d>}a9!μܷ/p+&d XK q~@,( $$b%Dh}nE U00ؠ k0  *H  0%10U F-Droid10Umonolith0  230320110027Z20500805110027Z0%10U F-Droid10Umonolith0"0  *H 0 + ?5zQpl1Xc`x)LŐuϰ3q*{_KHvpn|JP.?6`ϛ@'(Q*ץ\޳a$M ّY1. ٿv vSJ CEҀ4o$R{.b,G-h_ _k/+.C 9̸djq7S5`ӊ!92s f6;+"X9 Js8!00U#yA/G0  *H  ivJInE:Mqۉop~p,ο: AE,@.Ц s.G4 ui,@יs&_HgMt͸@&+' jcݞх_&̝E'_xXnnbg{o2甸yDr8!TQbV-*Ձ%NJn9)gVmfP<ˢZReWC}?qU!   s8{ h-\(Vo֞`R;l_+CV}a8+,ů6Qі&$(`$?/HGx'SKF'hoBm~B{yh֦Wu%0[b5 j$Zo(RжXuN&0"0  *H 0 + ?5zQpl1Xc`x)LŐuϰ3q*{_KHvpn|JP.?6`ϛ@'(Q*ץ\޳a$M ّY1. ٿv vSJ CEҀ4o$R{.b,G-h_ _k/+.C 9̸djq7S5`ӊ!92s f6;+"X9 Js8hS~8,( $$b%Dh}nE U00ؠ k0  *H  0%10U F-Droid10Umonolith0  230320110027Z20500805110027Z0%10U F-Droid10Umonolith0"0  *H 0 + ?5zQpl1Xc`x)LŐuϰ3q*{_KHvpn|JP.?6`ϛ@'(Q*ץ\޳a$M ّY1. ٿv vSJ CEҀ4o$R{.b,G-h_ _k/+.C 9̸djq7S5`ӊ!92s f6;+"X9 Js8!00U#yA/G0  *H  ivJInE:Mqۉop~p,ο: AE,@.Ц s.G4 ui,@יs&_HgMt͸@&+' jcݞх_&̝E'_xXnnbg{o2甸yDr8!TQbV-*Ձ%NJn9)gVmfP<ˢZReWC}?qU! ڎ$k,lZuۍI* w0H{I@x#\1]rX'$l`tI(9Q)ce@huTP(&0"0  *H 0 + ?5zQpl1Xc`x)LŐuϰ3q*{_KHvpn|JP.?6`ϛ@'(Q*ץ\޳a$M ّY1. ٿv vSJ CEҀ4o$R{.b,G-h_ _k/+.C 9̸djq7S5`ӊ!92s f6;+"X9 Js8werBAPK Sig Block 42PKkVz^dAndroidManifest.xmlPKkV1res/mipmap/icon.pngPKkViZj!res/mipmap/icon_background.pngPKkV1BOZ["res/mipmap/icon_foreground.pngPKkVis|{!}resources.arscPKkV6όpԞMETA-INF/FCAA5F85.SFPKkVb#META-INF/FCAA5F85.RSAPKkV]9OMETA-INF/MANIFEST.MFPK././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742486863.0 fdroidserver-2.4.0/tests/refresh-SUSS_DEFAULT.py0000755000175000017500000000201014767036517020044 0ustar00hanshans#!/usr/bin/env python3 # # This will update the caches suss.json from the network, then # overwrite fdroidserver/scanner.py to add the contents of suss.json # to the SUSS_DEFAULT variable. import inspect import os import re import sys from pathlib import Path localmodule = os.path.realpath( os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..') ) print('localmodule: ' + localmodule) if localmodule not in sys.path: sys.path.insert(0, localmodule) from fdroidserver import scanner scanner._get_tool().refresh() scanner_py = Path(localmodule) / 'fdroidserver/scanner.py' contents = scanner_py.read_text() scanner_py.write_text( re.sub( r"""SUSS_DEFAULT *= *r?'''.*""", """SUSS_DEFAULT = r'''""", contents, flags=re.DOTALL, ) ) os.system( # nosec bandit B605 start_process_with_a_shell, don't judge me ;-) """cat %s >> %s""" % (str(scanner._scanner_cachedir() / 'suss.json'), str(scanner_py)) ) with scanner_py.open('a') as fp: fp.write("'''\n") ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3081872 fdroidserver-2.4.0/tests/repo/0000755000175000017500000000000014770510164015033 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/repo/com.example.test.helloworld_1.apk0000644000175000017500000003363414717152070023320 0ustar00hanshansPK-N_j._2META-INF/MANIFEST.MF]o@M^ARI/D袶H10Xpml&d2s>rB4 wnrNǝ"y[snM)8&,("ԑzbOhڭ ѸCQ((!K1>]$hvDf8xwwt_Vw+뢽c{%*WUN;xhnRHͭU|lҽ[vS B7 *YאI1y}&7sS1Y(,(WAig[ut43g+<Z`:X&^w7<PʭY\Y71?(Є]lM|:[b>SrwP 84|ej՚ h U)IA!zf*; SٱqCٷ,{Puǥ~Páuou-6<2W^_!!^'nM^sZoUʈO |5Hv{^7 G.C ( gs­Fs!PK_j._2PK-N[ _k`META-INF/0C9DC4B4.SF͎0#;4E? 2'NxSU,YW;zAeq\Єu+jbr %Fޥ(Z:ЏpLxp(^_4Bl()Juk>=h|Q@Y͐}&V+XR5dnln/ חq±Pp|QJkP!=O2) w+jA)t;P'xRp2J]>)Z\` :4(bquO'[.䚮|?ݮWT8cnd`A&wҗq^I:?oE דKlSPK[ _k`PK-N[-wMETA-INF/0C9DC4B4.RSA3hb)fjhδ%Š%ѐۀUIqAK&Mg03121<r6ajQ60ccefwu)L1*0 eeȉZXZDCĨl9#+s#?PaFg߅wK~׋H[&mUSy$Wwf}f'Uąe˓'::W٩G:-QbjI3gٱ.)|l|nyjuWlyͣP)=ҿX|/i('_D]v.QleE6 ZgumWg2z &J}ߓrZ'h=-sWoLfx<{1invĽ  d'""r#6 _>w\'Qh1 ;_57nN2[[)=_]&ޣ}>\=;ɝl_k;u*2DZ#vbRg=}".wSnW ?=f^]JZ,91hZLe̹\͚^lΥ?+H[~9LB%Ǟ4͖g5-'y46&.-r>OZYP647elaWۓ4Nq9ppWq|p#O(ݵJfWObj{G꫆Ӕձ7AFWяYl'8$\Ӄ\Oվ5M<곛X>7X{qgp)!38P3iVlwW T-Mڱ@I]|~nܤw᥄/+kɓp8_}1ޭ>=|側f?r/3\&r?]'qJK PK[-wPK!Eeճ| AndroidManifest.xmlUTgTn@='Ĵ ym`T( PakMhH*!`t |_’`g%1ֱg{ΝqMPhV|?GWĐxO|$߈K X#6cO_D%#NDVMbL| T9^*y9qp=)!r"fm{◝y0U b?G\.#r 7ߥ!| s.DuV\çʐzW^ di\ S)\ܘ:mӜe!v[u{&k_ `!@P :3XopbUK[5jk0_\ 1*A"MD'yCޑOR7UF6z k^1}P6Z3z&Pg*LѨARP0%eiHB3 +*z &C* /'AL*^j{~2Lo gЙ^Yl3Gr6ˢrQ1 y$ R䘫$LHPΊб7;cgqnts)1wwh& ~Ac[_3?Dz5sXa BO`9$CwPKDޝPK!# @2 res/drawable-anydpi-v21/ic_launcher_background.xmlUTgj[W},ɖdKqDv8W#[G44iZ\\$ #DB:%A-L2hRh }@ ^K wN}:(L\139Ӊj])dYD[&D! ?#"# ϑK5<\En!|AC~@f 4nk+ L&jvf4g<_vRio&4F0۾t kLM}v`_170Ƣ4ni,Dcٍe+nXucƚk4XtڎnFju2a%XLE[TvvDn֏>oKv[oKѶ۲ݖr-bm+mF*okv[s[Mni[[&°sPm;YZl)4: fNs3ħ/iqy-d(y1$$ad1ބsH׸=ogZy]Ҙμ}Ά/.ٳ88ݸɖqY(,-JaVXd'[攖Yr d˂Ҳ@EveIi9Fc d˲r,ɖUYN(,-EYN),-Ue, dye,S dJK,)Ev=%M";rMi%˨";2F1EvҒ!KFalHiɒ%N|e\alRZ&2NIL*,-wiL+,-= Y*,-+-3dQXd'[+-rHalBi%ˬ";2G9Ev[Y(,-+-dWXd'[~RZ";PiY$ˢ";HiY"˒";Xi9I sw%PK# @PK !uϮP 16f)3ƌ1FDDDDD4ƌ1uADDDDD4ƌ1cL1cL]1chDDDDDcOnrFDU]?hmWIENDB`PK ! -/ res/drawable-ldpi-v4/ic_launcher_background.pngUTgPNG  IHDRQQQPLTE;0 ~VwZl5sIDATX1 @rȥ6r%eq*-猔T#RS!n"#٩\n-$䣧d]c>pɺ@Ge #D쁈?$q!K<Yo5IENDB`PK !ݣ/ res/drawable-mdpi-v4/ic_launcher_background.pngUTgPNG  IHDRllPLTEy&FTw,5~IDATh; @Ti,8[=l\xOO> kÓ`[5HH R&5`WOHU`D`0 4``0 A`0:^aa~`NP:4XIENDB`PK!NFQ/ res/drawable-v24/$ic_launcher_foreground__0.xmlUTg1K@ߥIh8 U\ Ep.Bh6h[Gį!.=# ] 9f1j F4eTAl _i9L2.j՟i8|&ݞ z^6Ϻ;#"RyiGuEg=bllhbnqwB \+|>s!c&KzZYsf,5~ϵB35mWh<=N5=vǹfk򺊼ksƼf{)''PKNFQPK!G+ res/drawable-v24/ic_launcher_foreground.xmlUTgTn@WK"`QVcfف*"j 6QbZjŊπbp8!1霹s3] v8o]0{Q s=  jɻq Ť^zvo'i6G٨\N QLNG0/,q~8 xDg8!Iy)epW2$,%iH$"U) i.9I%.$Nn38B |g2"!6DPEW^M0 gh4D BSB 5˸ox7|^.2) bIN 5ViDXnƤ.L̐:(BUĈELDb"E٦R?媂՘S 5d$Qq8Z9Q&cb/"!Մ$E$MW<!fTrM Ma-7jx7FflS-%-׭\;U1c*Ү VFb69qYqq6ZAgg}=:Mgjbob:ߟS=?asl*+[5>܍oƫ/PKGPK !}q0 res/drawable-xhdpi-v4/ic_launcher_background.pngUTgPNG  IHDR*PLTEdBl=0 ~z\3%w@XIDATxݽ QJuӥM»<0 _m6 wؾ'y`ֳ81}cQyLqj2rY?),qi2Kӝ#<By0j_}iIx;^"DU!BT!BQ"DL!B "DA@-eWaNU "D*D!!B "D1A"ۯoFV)IENDB`PK !p2 res/drawable-xxxhdpi-v4/ic_launcher_background.pngUTgPNG  IHDRBPLTE``=d:l}8z\38 }wd:y=D7IDATxM0Q0Q_uqL2yE7}=tytMM˲L]0`:`:`tt38`:` 0@ RuutYt;~yˢˢLU0߰¾a0k000`:`:`tt38`:` 0@3`:`:`tt ٝ:cWQWmۡ;ZQWZ 0` 0` 0` 0` 0` 0` 0`;ؑooaM}_+-;!^4ͳCg;a'|lz` 0` 0` 0` 0` 0` 0` qvgs7̝[0` 0` 0` 0` 0` 0` 0`, 捳;8 ;at 0` 0` 0` 0` 0` 0` 0`i0opE` sÖh 0` 0` 0` 0` 0` 0` 0`KyN+>No;Dk=0` 0` 0` 0` 0` 0` 0` Xgw:\p0w:|%Z 0` 0` 0` 0` 0` 0` 0``Gqڶ*ꎝߡW>cWQwl !luŃ鲹ӡ;v+lfpt00`LL 000`:`:`tt38`:` 08"P`ttLL fpt00`L Lwb=W7IȑIENDB`PK!Z|pT res/layout/activity_main.xmlUTgP1K@}׋&;t R,NhsBru+wm//|#0`p:&.Wfc=aFx#ۙx+3[Ĥt\Jxφne鳩.X-(.`BKwJbZ%\9Ԙ:y*hȟBbe47xez`0fu'!qeWۓmyޣ2 }ӵVQh^΋ëy-swCӟ7no`{nnuFPKZ|pTPK !k0  resources.arscUTg < H Bt 8k HelloWorld22res/drawable-anydpi-v21/ic_launcher_background.xml//res/drawable-hdpi-v4/ic_launcher_background.png//res/drawable-ldpi-v4/ic_launcher_background.png//res/drawable-mdpi-v4/ic_launcher_background.png//res/drawable-v24/$ic_launcher_foreground__0.xml++res/drawable-v24/ic_launcher_foreground.xml00res/drawable-xhdpi-v4/ic_launcher_background.png11res/drawable-xxhdpi-v4/ic_launcher_background.png22res/drawable-xxxhdpi-v4/ic_launcher_background.pngres/layout/activity_main.xml com.example.test.helloworld p,"2colordrawablelayoutstring<0Mf colorAccent colorPrimarycolorPrimaryDark$ic_launcher_foreground__0ic_launcher_backgroundic_launcher_foreground activity_mainapp_nameT`@ `wKWT`@Tp`@xTp`@Tp`@Tp`@@Tp`@Tp`@ Tp`@ThX@ ThX@PK-N_j._2META-INF/MANIFEST.MFPK-N[ _k`tMETA-INF/0C9DC4B4.SFPK-N[-w!META-INF/0C9DC4B4.RSAPK!Eeճ| y AndroidManifest.xmlUTgPK!Dޝ v classes.dexUTgPK!# @2 Zres/drawable-anydpi-v21/ic_launcher_background.xmlUTgPK !}mCkǙd8QE14eI1,p5_}tLr(hD!2$߶[&x q,ƸSŒ*LXnPX4:-H,swqSGQU٦?Id1CXȧe$|t{JL7Un.WT1f,) [{>^ #{#5y0|%.\ъ o;3:XXw{d֜_9A. Wz<(5 9 P ټBg>p p3tNޖ/ .]tj2Gbұ7PKSJ4ʸMETA-INF/RELEASE.SF}A0ỉn6 QA)BJ-0L[{ͷ)M CV㊌9i {K)NaK@0wכm`=f 2ٽ·;Ew=m9}Q8ft&PO8y`40'K6K}[33*F+s~[9kXeAI ~0V5{ҹXt|q@˻NV3 ^]9mfjJQҵUM  bPz t)4#3hve:yKQkM5( a?K'm8u>+xC:-آg嚫ZvY#`u|C%'- #mxm?".@]oi (H4g4*PKSJʻvMETA-INF/RELEASE.RSAU;ƌaG.I&AQ$ɥ5ј[ QKLAn<9߉C$ .8!}g]Zzֳֻ@ JB/Y.a MpJx 1 X<YfP>(_ 5%_nb(,N<( c'4ZHhL8 *$r6~82L@o! V-<$iVy*Nd"p 5B*KC264 G~ns,@Â#a K,+ڋrǼM}235Pl '9e_M20oB6`TRFg82=ĺbjRóDϫ H2mnmvQӛxc]Gζ&] )΅kjsU;Ko IOJ arK'w}^qSEM U GBv 7[l 2ՅMOQQE`J:#ꧣs{Kf`HU {L>(ZkqV4Hgd(~s° A$<2UUvnw3Ej~;yXqfM:gq:!^M/W;O>ڃ>x]v,8?Z[|akCɘ.ZD~5<)y{m o`J??1^yXq~I剫B$;%2Q7Ň>Y2SBw s4|@a}I]FLIL"n[9tQ&?\-_jSWPH_ʨ w<VxkIy ֔w d>|[5ê?6՛ vr+f8 0Kk'P} k8)j}`ҸOˋ ΈvJhƹKڵ$ bGXg`EmR{qj'˻mNE `#)''}6ؐv1Qq:Cq߽* SrUgf J9b nB+A绹LyBCWЈ7}|^XV({b>t啿vxXtyŅ`3BXA0.0ǎQ2`Z%hbe_ ~EX nhr >[[sٻUxh2ŗzyxW**h/B:b囤]VyJY[JjnC7*<&f BB!kjakJtM]=6OIMw c7c2t~ff *䔏 ߜ%>8eI2/'޼]]ޗU ֹFEm-<:E%Olf5k4V4DxΈ"Q?5AlO\ҜZ>y .?o>cDHnEk%'ip[GH7I)|,1vj6Oʉ PKwA{:`res/xml/preferences.xmlS=oA}| "dFTABhپ$&|TA/B 蠠@ެz#`罝y3of6@OU@:n&kd=W.w{H*W{"38%Cb3PC`u O)yҖ2NIx̒‶< 3@wxDNv/CTW>a_zDWV@Lu}?⿜ j>a o ADoL[ڗ'4Й|]rrO9Zɔџk1y2]g1:,]kc<_ͻTy:9JmTw3=I"F%B:ncufN=Χ( R3N|R?#"}7W{(gڷ-,kM>ũN`8K?)X9 1B Lm5'~ ,unrշtkZV.e+dG*xb+Fө{sZ5M}MO}5kGwmݖGnxՅ-e,7o}Q_PKwAsAndroidManifest.xmlTnRA=[ʵRG11^qaDhIm.UD`cWuʸ| 'pa|wz30LA{9;g|gfC7'\_q(ω{I&&$A L#DL|%k>p(8B t@ M-Tp(=3|6 E7d+l%d~ >Cwwqw{>dd!*خu!WWY M%G.5CF8ڐ[-2?kysTB (ףM*Ȯr"+A+x%JǶT]{?$v,?JbV.Q*MO]} {'jȹSPtȊ uKfUPZ}jgjS15 8w`5yy"IAXf?59MūkY~TD)kΓUTO G"nZ˚ gg}_3z 9摲<A/Җg~rIB6;1f=6Z?}_"Zkh?3V叛gf-~yފ[<ç v|2Y|nzU˫?Wy>;/:{K>Ûo_PK wA]a( ( resources.arsc ( p2j 28>Zl4tres/xml/preferences.xmlres/drawable-ldpi/icon.pngres/drawable-mdpi/icon.pngres/drawable-hdpi/icon.pngres/drawable-xhdpi/icon.pngMuteVibrate01 Polite DroidEnabled+Activate silent mode during calendar eventsSettings CalendarsSelect calendarsAll day eventsActivate during all day eventsBusy events onlyOnly activate for busy events Phone vibrate$Allow phone to vibrate when silencedlcom.politedroidx0 *8attrdrawablexmlarraystring` &<\<r Fhicon preferences calendarssound_profilessound_profiles_valuesapp_nameoptions_enabledoptions_enabled_summaryoptions_settingsoptions_calendarsoptions_calendars_summaryoptions_events_all_dayoptions_events_all_day_summaryoptions_events_busyoptions_events_busy_summaryoptions_vibrateoptions_vibrate_summary8L<$x8L<$8L<$8L<$@8L<$8D$8@ 8( h$ 0@P`p          PK wA %Cres/drawable-hdpi/icon.pngPNG  IHDRHHb3CuPLTEᶶ9tttwpppfff8RtRNS Y [Y".!:9&B+H*,KLۋYIfe7Ow%XdlprsAGJ EIDATXkW0ZVD`j.v,12&l /jlwd<"ǹ(/1agAbG9ґDBjk3D F6L"Jm)Awvi=(W @ޟ)j:@EDUKA)M#6ӈBoCBGY ِp|#  EZX8hCqoHu/t:3his+] !W?.@6B˅&mR_,qHB3@˭BeŞ4 b;b+fpHq?x-'!8y= HFKk䊌Ps1s'"nr'Xbmgή=mfrO,+Uk4VMϊC)XoD±lՀ-q A}y+J@SCMp{]<g%;5q~Jv(5DG:qs pDq.o9l.c\"u/dm$kۛ-Ha||:@Cu<_%&}Ie7vav Z7wIENDB`PK wA22res/drawable-xhdpi/icon.pngPNG  IHDR``F PLTE---mmmCCCFFFFFFᏤ9݃ל!!!PPPNNN'''vvv;sޅ[[[CCC:::AˠCtRNS &+, PL"+$4*=/DCI7M%9O8&:Q'R~\Sji]p`}0@s{?#cglmiIDAThS@iM V`-ĔRM-}+xpC+*K95%HlRhL4yM}2dH,/p09E-=[ O#mV‚cLzt;4,.*tD]62Ke%'6.' S^Q t/BF0a.Su ѩ*L& V0 ZILmmtLTv);.tv%]r@OWp.I^>u@oGppW33<'η7sבvoD7hE8B`)0n@08<?@wp </d5T=0m hc"A`ڽ~1]=}Fʯd -1SXkKaI=;n YIENDB`PK wANph/ classes.dexZ x\Wu>oE4I^ƖؖK#)^FxwȶɊc4O҄if$'dm]H  R .P(R&$6l)|M!PHBY?7qs9{{xPśgַ+_%n [x͗&DDt|xc߷ۉ6~D7U2 ʉ#z ' XOTlp2rH><|x 8)3'_|,o ^2{&``7o46]w_^^j 3ۀkZ^`Nge x=ނ}ʁ(6 \ 77wGǀO~n%jځ6`;F)`xp/n4(4E'π_%;PĀN`p0dہ)' t\l 9[#cggo?~ b>(nN^ Pކ@FI <<< Y\ `[KF*%B5X;u@p1l  2\\ lv;]|=^`p\;J*`a0\ `i # %g_w-=K>+$Y+E>$mq, )t@>W=%Lul[!m%486UҦQ?jOj9Uoׇ&3EkXe >_WۤjJgY"}r?qٶ^M\0亱o=s DZQ),h}U6QOE{OZ'E0?V"\=*h;}8_Tmn"h-}8'n!c+l˥|ܟt/%h}@ ZKt}VЋqAwҷ9F亮 9I t8߉xTدBqqh; w ZCٟ:9NNSxgAs"1>O|z4u 2nK!߭Vups휋fى+͸ԉf|_}8ϯw B?ξ`VT@|:CWҋ5J$ـ|fs MzzAZqwinjoYRg!qNI8fu::0&V}wӾ ̗:F\7b ꣏E"Kc kc9/Fȹ7}l/hA뤞k^ HANd Rxyo:~o'^C%ڰyhkm\3OC4.;aD70@ 8W 6<..w b.O5lhp9F3ؑK.ۑ-ƒQX~Ӓ>/5z#5"CŔcX㰱ZĔ#΄1$ M˧ڿاJQ9Q,Ld36GEV1Cَ*g-Rswg5o-2i'Vc]iΎvve_3CZVL evOy% hnց!R+z CTſ9~ "ҳΚQ4PDz~_Hֿ""+,ٳX :GU! v=Ts v䙼eLy39]x&1-UD'Mym\6QId8޷ʅ/?\͈o”ws ѨnRbkZ^)yBQ7궘z+Swkq~JF:&FB-eYpx݋"Waq$vAJeҾ`o +{hJYR>25xgbʪ~*Y7$*Bw Y4"Ŋ/4wS( **Im2u*)y{\6gM;7mf-{Vi%uAU*);71+aҲ);N٩%uh鮃:z>%OXfreS-F#%k|*cf*m%m6M.<7\x#X+}L?>R.'r~R~!C( rGOz?Pͤqsz:#mf9ae{awtfyl*dMө1UTXє=g1j*(2Bߙ͘13Rswv9*+I s`Ms^橏ÃE*gnavgԮLjڅ?Ү-hC+_H38[|Ҭ\d*@/PkҴ'{Q/Jys+k6c/sbsy)+2;fL!]V>)FPBUUD\|笝L[)L s7{:huKmwΥ'zh ]s~el,[|*ߑgSykseәt*o9FjX>4Ģ,ҘK"Ͻnx8gkjzэ53Z9\W`fŅO ق$x'e) I,O qJ&mrzEўcִ[.9#\#efOԟMF<$ (42nn6?WaL^N7)h `>#,}$)Z?k_kfEicti e*0ǾKO#u-'j|Ukꔻ}~PS {ɓ{+ڼœFE xQQΊ3k*OJ }(~x\S}bJL:?ס mzS)yK =QXU&f%f-[Օ=ߡ:fpS=u?îo%wJϡNvۋ~DPK{A@FXyMETA-INF/MANIFEST.MFPKSJ4ʸMETA-INF/RELEASE.SFPKSJʻvMETA-INF/RELEASE.RSAPKwA{:`< res/xml/preferences.xmlPKwAs AndroidManifest.xmlPK wA]a( ( resources.arscPK wA %C6res/drawable-hdpi/icon.pngPK wAbee res/drawable-ldpi/icon.pngPK wA7T//"res/drawable-mdpi/icon.pngPK wA22%res/drawable-xhdpi/icon.pngPK wANph/ k+classes.dexPK A././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/com.politedroid_4.apk0000644000175000017500000004407114717152071021054 0ustar00hanshansPK{Ae[LwMETA-INF/MANIFEST.MF}Mo@&AJJ<(QWPp}AM83ϼ#8 gdl(x9->7:%*gaff9n6€J;V v;5h- GeRuoSׅh!yUwB@|`ahXMsJ3f[[@Mt>3bYBZzkWG4^J%N!p`Bb2Smp=lR.ݻZ|m6pk\VsNe ȃll7!u{U.~1vP{w퇾e~h_ƪ]#gѼ;w:1`PKSJ:META-INF/RELEASE.SF}M0߁n&&@¨eS@ e@?8jFo}/']@^R$ne8'#Aih8b\|JHU p3lښʞT㯍YZe^(~ϲu8 ugB(gڒ)EO0iSȯߛfc34(bRRAQ(">b|0ޣ^\.Xn}G(Ouq,4/i,9vZJזۦ R$qP` 9i$$UQ,sTdwFh#/{¥A KȏSq*mG\S{lgդٱ`ׅQͅn8p3ۯ\^ow e@}{Sx`@?O!cW @EjӢ1 fbPKSJxMETA-INF/RELEASE.RSAU?ԋXc(ˡ5:-d_&df4֐:5}DKTFa.%ƒr1B[{98?>}^K0J  @XȅQ8D_-@*<(0 CAi)Q#p 0 7AI"V<Ơ Cɞ~DIK2Z } 0bFJbFȝK !JڄxȠq^2Sª*᰸yX,k?,(<7@2qdVMS'NPdu  ՙ|ӏՓ_5hj^ <ň:?3Z {:]!u])һ20dU)9CԊ㼓$VqvܾdU./+Ɗ%$ .J vX78.]F3;W :u;U<8UX~Zq.W4W10& ϳ.Ʒ% aeFJMgSxϊ I].u%RQ42zreD8'{{c8h3{/8̈e3VtG Ne OoQ'0i3Yi_žO+n֦F?)hӬЍ\v -*k4<sYT*"[ýi uKņMI&u?JHwu|9HvWc(s"O3YYHқ×-9g89Vˊ1hzwy.mwl3xLmD`mɻYS*r\t| OxwOкA;;L[{ i\]Ԫlr'Yw{ M?2@l*'ue{AE!5rŒ॔VCwn9(u [x7V~WZ5ȩmJckN4)-?Vi9,cywh 'w̪Əy{ɦR{ucw$y WK2O$6k1V݅GSV`V #>/>{b{ Bmߎ3,18_n(=Yeu rL1tv`T @v(&Ч8[}^7R5PЈ3y]v5KӚ#Ξm˳U@{@[:#>OVh veU:=e7V L!۰Pʶ_a@W#`l_s}?(^] WPKՖԑV +,)=Vtg|QwE}gS S&K893]'DR#NR?9%|}/yW7k- +|!1ۜVLx&F󝂹~kZqyB_t7MNl [5URײ[\Y$ Wy\B#-Q[=oW37}7_ung,]/͞d6ná[2q.s\˚9/,)E9K٪ik:ꫤ_ y^2y-_~ղW {PKwALEAndroidManifest.xmlTn1=IۡM4} ! ,*VU(,RPUYB,o X >߱I Ɍ==G!q"z}C[=A$~  b߈ \&EN|&߉_5Oڨ: MfgIO '<Ƴ( '[_5:[ \:|ҝՀ-q A}y+J@SCMp{]<g%;5q~Jv(5DG:qs pDq.o9l.c\"u/dm$kۛ-Ha||:@Cu<_%&}Ie7vav Z7wIENDB`PK wA22res/drawable-xhdpi/icon.pngPNG  IHDR``F PLTE---mmmCCCFFFFFFᏤ9݃ל!!!PPPNNN'''vvv;sޅ[[[CCC:::AˠCtRNS &+, PL"+$4*=/DCI7M%9O8&:Q'R~\Sji]p`}0@s{?#cglmiIDAThS@iM V`-ĔRM-}+xpC+*K95%HlRhL4yM}2dH,/p09E-=[ O#mV‚cLzt;4,.*tD]62Ke%'6.' S^Q t/BF0a.Su ѩ*L& V0 ZILmmtLTv);.tv%]r@OWp.I^>u@oGppW33<'η7sבvoD7hE8B`)0n@08<?@wp </d5T=0m hc"A`ڽ~1]=}Fʯd -1SXkKaI=;n YIENDB`PKwAA2 classes.dex[{`\e?ߝ;L&d҄fh;7I[2H4}"hdnɝtAE+.*>'*q},*,ʲ-e?\|Ws9|;߹&i6l/e員'u{w.y'"cC>>^$[~ЦmuAOMV [!zAt? 0 X1`+p)p+[` |x @kT@ ǀ~ ^^*W `-pp1ہ{<|x t[@nn> << ='ׁ>& v0 XuqVN=g?~ D j"`>|x m3@ c@ x>aQq)Uh)u9La&l6 .@Um@?vK8>pp.WWU7G0@(^{Ө'),bL8~GJ N: W3_x )*%oUKZ1/ΧSmQK~JF7;~c-رԭhQi&(dfo)~퀃ϐC~O:aca~;=}ζ(1Pm^xqCg_rڪur-;WzzqLKVotczR%BWc.I7O%]O >^%;>nл$?zK!zԇSVPAt#ƭt=(i%qNNjUwK>(N>'i/z8gD青Cd琏JOIj 2=ϫ1OSOo')utR: zJ3}P>/UjF>E/;%VcF oIYb;鿈sFNTV;y?H~i  V{wD'8qA??".#nz\RnVhF_#Klu ޫy^QUGQM/;znVwp}*@{E]u(RmO">*+XDXHv92Skݯ|n? .- :j\*~a#FH(f/ z^Oͺݿ.mHѮKXVj7;yyQ.>y32?z˶J,>QKz+e_HЍ&fϨ9/w L!^?qZ!ynºxn,a衞#l)^E%=Ar5W"ϧ_%C_w gNy7Q&Ը<'-HqT܇s(GOzYhnS§W*NQIwz>F'n6rˇҊUCՐƲ7&si;]jHSKτevp rugdnj,Y`/ݳ7ڙ^9m;!: 蒇 A?z|{Ko?jq4vS_x;mgvUB(ΏyLk\5 2*iǿx$<)32Y,㸴*jk6m/8oMYToAZ0o W0D^ &jĻxqߺ<]e[hȭc519H., |ڞ}rQd 4\ɻpzT~|r"Z }5νy\{& L\ԍ2%鰦KrMo/UXM9j=㭒 xje<5a\u͍%^T)`~Lj^8ꂻ_t(p\|wC+d΄i<`X|;AGPy7z7=>]b3R2nI6O]Z j fPۜ]Yc9h1ɕ+]pb>ƺ}= [^׺Y91\)5m+Uscn8\ jgW( }%/+\s5?vUa=@W*Ow9}5|Tb&Bzjf6##c3>7ԫ̍O+*h ϱsjy◺ZY_uFi{fKfߪ[T㼢?l?WkVgSȧ2|CC_g/޳#VKV >iwakd];VvnPu:I]'uqRw%ݖq]:'5ݐM{H$ m#t%Uطwhޡ#_q3=3ϗgSm96Gn%Ri3ŠkS(kaa״i(^kd=MXDִFg.5gdl_UkSqqr C`d@Ѓ{l3 ?,:DV6JFSSt";9fl~g*Όn/I6im25N&x=t,~l A)nfD.9jg_4a\&-M/f-97K} 3蝧3̎%F}`!OȤFXR9X.<9{h<@0$cM 3׺+g0sg͕HXfy=3" YiPf2OGw9uY>OaYbLB2)ZkGy꡺(n/Xɴ\TiUQvAy=Fr|{hBe~T~VݰЕg;85MCUȧRyEaA^GR\N'YDqdTͩ4tj$^pcXO T>v${֍$! ;VMKY3G&9hrX~@r8W#|s÷.qjC̜®q`QVq \1ow''RJHΎ]_>8w$)Xz{# LHYx_N\ Z!B{i8' ?$'wǏO7ڊ6w/PNi⛭Ј84#Y-.Jܫܤ5"NOn7CAOnmS]7yE7\!ʟaX?%'EŇ=A; SW՞Ֆ<5~H΃)wT{7*݇0!wo41PK{Ae[LwMETA-INF/MANIFEST.MFPKSJ:META-INF/RELEASE.SFPKSJxMETA-INF/RELEASE.RSAPKwAP= res/xml/preferences.xmlPKwALEAndroidManifest.xmlPK wAg)HH+resources.arscPK wA %Cres/drawable-hdpi/icon.pngPK wAbeee#res/drawable-ldpi/icon.pngPK wA7T//%res/drawable-mdpi/icon.pngPK wA22i'res/drawable-xhdpi/icon.pngPKwAA2 -classes.dexPK >E././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/com.politedroid_5.apk0000644000175000017500000004460114717152071021054 0ustar00hanshansPKYBIj{META-INF/MANIFEST.MF}Mo@&A@MzC+ԏ-Z4+,}ikZ3<̛q%Yc')(k(~C.(+s*8c)x.K|V%k8h;?ڗV8![lmC.7S J ֮ƥ9n}^9&pJHJ㖪]!q~Fm+FDEݦ jᅨ@VHMYΗ] _OPKTJ8ܷMETA-INF/RELEASE.SF}A0ỉn "x@`A˦B ؂ ~L6[{ͷF UM!!4K*~0?zUQ+ȦPb@/hRnX`)7Ae_BOibGM,2cP*G6K}[R3- ե{﹠SB&E.ƐBB6ܯ)Qe` ]%rtQ_8a7yr ^V Hy릈sȷiT"KxVyV䉕2=\n-qg_i.qN׃Mg=ݖx|;1Fw}VTM.2B ĪQ;zHM?( o 2HاhZ62G9`DteVlܵS)lτ?PKTJeuMETA-INF/RELEASE.RSAU?ԋ(K"kc6 t&l=>(Rp8!ɞm,E{rr{~y0ԡƱ_x@!0!R#a "x!ґ ^%ؗG|K g- Zq$nZFzyBbŃ0 tݠJYҨdH;apܶ^ _HldQ$^ V.H('l[}aX{iTޏ%eR (%osI-^֫v,eCwIQ-»d%0eˋ4%,M'۫^֧Eaܤ ʯV\L,Ƨ<v1E3FuF*\@_yݻiv8Lt/љx(~|}W-d[ET$7|6L+c-y'9 jRU@f=#ǥʽ6 {vMaW7LE[QxAaKV?8ꍎ\oky]葺i$^zS8S(ڶAU?\$DM9p%jhG6s Ij!O2O{HF s{PKYBPres/xml/preferences.xmlUnA=PhH}J&~l[޵E j J*D?t B4pxVNxv;3"xXz_"׈bL<#^?_Ěn{sq=%o7C8dVZCbkSWPKՖԑV +,)=Vtg|QwE}gS S&K893]'DR#NR?9%|}/yW7k- +|!1ۜVLx&F󝂹~kZqyB_t7MNl [5URײ[\Y$ Wy\B#-Q[=oW37}7_ung,]/͞d6ná[2q.s\˚9/,)E9K٪ik:ꫤ_ y^2y-_~ղW {PKYB?}5WAndroidManifest.xmlUNSQ].2 FMƄ<Tj-Rii/#ġЁo0~_Й=m ܛs:{}>HO00\G|O &qD|"߈bSDs7(l3I">pxG|$Έ^F+8>Lr(H?"&+ U%vתOD5 ǶıXwJp}*W9Vd .}|kޥN5@"i*mkoօDhdiY,ܠj>ଋd MZ>qtAe<BƿU^5js-Y V2^q5Xeo[WX"pVu[g-bYW·$kcv}p#)U5G2z|aoVcGUJ^bup!~IU^PGlfek2zVY+:YFk1dЪBź?fU9v*yDQ!|x^ӘiR ݦO~ __FJ(ǫ55s*+T++;\kQ-T4Ռ!ېzKU/E=z~X⎞KJ8b'6nFfԷa6{sM4?sS-ؚ;6j6N͢~Vo';Mޔ`$˧"u~C?*}Z _V=5gLF"9X~4-?PK YBg)HHresources.arsc H2j6LXlvZn,jres/xml/preferences.xmlres/drawable-ldpi/icon.pngres/drawable-mdpi/icon.pngres/drawable-hdpi/icon.pngres/drawable-xhdpi/icon.pngfifteen minutes half hourhourhalf dayday900000180000036000004320000086400000 Polite DroidEnabled+Activate silent mode during calendar eventsSettings CalendarsSelect calendarsAll day eventsActivate during all day eventsBusy events onlyOnly activate for busy events Phone vibrate$Allow phone to vibrate when silencedUpdate interval&Interval between checks for new eventsd com.politedroidx0 *8attrdrawablexmlarraystring|h &<`BxLnicon preferences calendarsupdate_intervalsupdate_interval_valuesapp_nameoptions_enabledoptions_enabled_summaryoptions_settingsoptions_calendarsoptions_calendars_summaryoptions_events_all_dayoptions_events_all_day_summaryoptions_events_busyoptions_events_busy_summaryoptions_vibrateoptions_vibrate_summaryoptions_update_intervaloptions_update_interval_summary8L<$x8L<$8L<$8L<$@8L<$8D$\     H8Pp$ 0@P`p     PK YB %Cres/drawable-hdpi/icon.pngPNG  IHDRHHb3CuPLTEᶶ9tttwpppfff8RtRNS Y [Y".!:9&B+H*,KLۋYIfe7Ow%XdlprsAGJ EIDATXkW0ZVD`j.v,12&l /jlwd<"ǹ(/1agAbG9ґDBjk3D F6L"Jm)Awvi=(W @ޟ)j:@EDUKA)M#6ӈBoCBGY ِp|#  EZX8hCqoHu/t:3his+] !W?.@6B˅&mR_,qHB3@˭BeŞ4 b;b+fpHq?x-'!8y= HFKk䊌Ps1s'"nr'Xbmgή=mfrO,+Uk4VMϊC)XoD±lՀ-q A}y+J@SCMp{]<g%;5q~Jv(5DG:qs pDq.o9l.c\"u/dm$kۛ-Ha||:@Cu<_%&}Ie7vav Z7wIENDB`PK YB22res/drawable-xhdpi/icon.pngPNG  IHDR``F PLTE---mmmCCCFFFFFFᏤ9݃ל!!!PPPNNN'''vvv;sޅ[[[CCC:::AˠCtRNS &+, PL"+$4*=/DCI7M%9O8&:Q'R~\Sji]p`}0@s{?#cglmiIDAThS@iM V`-ĔRM-}+xpC+*K95%HlRhL4yM}2dH,/p09E-=[ O#mV‚cLzt;4,.*tD]62Ke%'6.' S^Q t/BF0a.Su ѩ*L& V0 ZILmmtLTv);.tv%]r@OWp.I^>u@oGppW33<'η7sבvoD7hE8B`)0n@08<?@wp </d5T=0m hc"A`ڽ~1]=}Fʯd -1SXkKaI=;n YIENDB`PKYBXW5 classes.dex[ |\e?ΝG&t2ivh;INi !ii2iCh˶m20LB -DJ, "Z]e}ʂADPw;sꦿιuI'eWMvT,;ms׎>{Z":Է&D5Do%42hb"zo=;/O^^ DDu@'p-p?SsL3 Wׁ7e@% `N Ffcmq^+@Q.!iU%6SS @ s;')ppEq4:Xk@x;p;p/U)E@Y_f`w| M{?~ xPWyz\ Kˀf @x%ˁ5@.W&p5p A'OO?^cD@X$4w<}h@p Ɓcm=#//o0X ځMnL&VNsǁ͘ [; x xm@n> >NgXB[Jp9IR CL)jhp.m@;/N 6[ۀ .`p! v}%`/ `?pH=Uہk#d'%?GCK~X>TsurXr I{%cIHt%$.mS%m%Q)RU'VʗHA)g\/5r(pIJJ{}Kߖmc>2R&"y[>&?>9fO;x{>ͲmO;!ɯqk><ױZ8_XquH?*yN$s|u])h};hp=~z}>3qذKC~:sm?WKc5?%u z.p׋}KnCΡa[]!~HҏH?J5߉o A$W,#i}P}NTGJ z.}WзѯB['w!~c yk藂< zetOː~N|ĹO / ZG_!K¾Y^A,q.tLJz8UG>-Ft=, I_'We\E!+w= hDƸ:ՆU<$*z8mĹl6O9Auz8[4O7,F|oI U/0H_"nu^蘠ςΥSZ~e_먜#z^Ŀ_{9QOwV4u0}Ay@¾=[a2-ETvc j{k1k'7A\+ΡO $~,E|sOJq= j٭ -:D|oQ1b+q9~FZOT׈k*o]"5~7CbѨ7c%]*e󿋸,"/V Z4 X ꡯ ~K\. E{}95ֳKʹ^)WK}oLjYuQvHoR!$7H:I7/A/ٓ}wc4N(2͓yloк wb81 ZRMk:ڪjde"Ϣj꣸=-?j{*}IUU~+ɹE2<2qaMUT!|L>yᓮ:<P[ԢvPk h\zq~UVM8W!Ǽwz1_ZU_|+ժ"v E~gTa0JW*VVc//ShQ<Q#U!?p)4/K0{^c/^uAZsgn 1aY\vDw>6XiE]𫂝h;RĤRaHZ*or1'L'LCXOF xꭘ 3JqQ[ܶ]/ӗb۶i.m}hm 쐋+XsX`£(hXd9Bk0qz8fZ}fk% >((*V~(N+-ʏ'iSB/Zk㱽5kgc~3\Z)TΪ~ozᢊ)肿y-݈[Mޡc [Ыo*߆ +h]TqaRy} 0VPnĮd`[ }D鼺%׮r>nTe9 [5͝/VLcQQ;)V G-/cIa) #Esnw@\\Z-#maw֛`]iVu8"/77rO~UO5&Z-\3b/O;ziѢ{w+)3Iٻ78_ڭ%uXl"K=zB^z=be t?#f~q,pe UݏRò<~whaiX -wcY:l;=pT9C{4k&>U=PZl{U؅J yoU9N˵UVކcq1V93A:'9:cT=`Yx6!88gMmVH gE:9WP QC7 Hw! [-!sޣmoP_|`= ˧&zDgn{^WiLX;-Q7qGqh}!MDQS}FdFni=17CZzUl(4 ]pϸt?~ZֺOYnvèLWd ZWm>=D-B` QWs9`ŵ-v~}~_PD~-V![J nV~DXYBr46(7`[$n.gM6V⮴]ԣ z3G$5c5;xMQxF\1M̥zv\Uz1̈wKyD3L"QQT*~?*> Pz_aPTNU[%3b=*־}#fVܱA Z)|cz!ZA11 "LfRU%f$")oq%ⓑ}} +~V>Igx\ߕ5aB+(v@a^ o{x9givR{v 1\^W9]A<; _?|9}9k_V7:XGEs,rac1dq=Op q>K>}ςG̭YT^g_o.ň}lu߄ֿ)>S図kY?ܰrՑEc]? ՆlP+|#Bׄ&Y N]+2Z'd ]2pka]$tmIA[դ>м>0mlDG_ksk(ٶ_9.K4.g;wdﳾMcV46@ؾZB8vQycYn٘"TzU1N $9c^s@̭ڨMحvv{֓fJY$3B^!`uɌa锞wr!mJtR]?fӬX怑]9dkȤtay-JtlJt^J;n޻.j4 y~ޝKG:h81 ٤L3F<ҦhҶs??ƒ-Y`.g֭E\̏$s9pBhK3/m6J]]b&&O)HEJT% T$n =R$HKoOBhyI [.NŒ##L27ܝ4F"tF9d73)67dd$H +e6j(*B۔&S|a1`'ouZtfɂLy&aSTxq=); "rMjFs؋_:Ek1AH+FqK*]bgaÜ,JFiS=6bCa_Aɛd!ُyLs}ŰJ'cctjMBjl>iLe G Jl% :pӅm _vr10ҙXGI`2Dv{ ;f~3Ӫ[9wz6}.9\(.3yogl|Km[j1:FXJH‰rZ}XQqPz`g CzaaC !x2va+VL2gD[ #V8]1*j NN!G9&DIw0!S1Qf dNT}M"g2=5 YQБGjJuj 4T>>~Jte{5|j3FlibЎ u/ $˱̭찝ɝky-͓jH.;Fy0x{+Ōh<(8=\c,ڕ$1s!Nm\rf9L#Y*w)ĢJ:f`hE4b1ĖR]\E?y yL.b;Uf亳)fq\X*ŊHA~)uǽRc˔'eCvv&O:ߍ+2GGְ oq #q7+j&f2Ŏ=|v2ʬi\;9Sl"!Ղqr5,TVLh܋#iތY *w";kT=ILslȴ|Ofn9{a$A >A8X#cHBnda» ܟSyNaHxFU;LΦ3d}?۲פQM&L[?ۋ/SPKYBIj{META-INF/MANIFEST.MFPKTJ8ܷMETA-INF/RELEASE.SFPKTJeuMETA-INF/RELEASE.RSAPKYBP< res/xml/preferences.xmlPKYB?}5WAndroidManifest.xmlPK YBg)HH]resources.arscPK YB %Cres/drawable-hdpi/icon.pngPK YBbee#res/drawable-ldpi/icon.pngPK YB7T//4%res/drawable-mdpi/icon.pngPK YB22'res/drawable-xhdpi/icon.pngPKYBXW5 .classes.dexPK F././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/com.politedroid_6.apk0000644000175000017500000004030214717152071021047 0ustar00hanshansPKոJMETA-INF/MANIFEST.MF]o0{g1E+م9dNP7vTZlQ+%;3ǝ˾_>4!DHZfAs \ ,ofd " 3$!l1]ˌ4vnnFʷ9V/ḵ((?Ses&hj3<{!{цꇮAシK^ ˺VVw}b'Ȗ]AwUA^XheϢJfR2;.UM'ëbGB0FpAzx?E Iy0QٲmPn7^m@ ym(Bqt4ت:v8;Nz8x0sPKCzPKոJMETA-INF/RELEASE.SFˎ0=e+rEEHtbSq &sZUAt8Ȍ#u ,)FSׂm.HH u秼#sk 9(")QF Ki|/p7ukm89ٮ%~$/KH%1|PyxFVrp۹5רKUS*pdpiYeCj#T%rF3󲶽_| darwԭ"/*pNNm7  +$կh]<+Q/&ṖЋe"t ~:mB^m&%'6d7IkY‚H&Kz4eK<~V?NH퐇 Sr=wtx%`AИu 0B^:-Kv&z$̕NdAXWNgjfɽeNfMP3w1dSvrfZ-jwzt8?+ϫ(sZߜ&ȫcܶ:NGL^uW3]pQPH*;8o_Ϧ@ ə_۵sފ@Uϧw?ɣlꂤzyↈK#K4M؆>,n 6͐Rvйo;ظפrbW&[([ŒB) )s/WmFFÒv:B4dn[l #IE`炍t}k()JĻצq|w}s=F-\#έ?>:mz5*OuF}2N S2Fs?k*`>{mCQʼnwLGY[lӃJF]WmSn~)2V0M;#` W/Ňzq[z*O`{/Nt ā/sk4č(aQtJBg>{&89n|R;QI~ ٨`!DSAIkNwx|DFu$StlZZ< SX7JUq9aEdh}).ofXg;y?i XQO:Ěw<1>+kt~iu+ PKJ/vPK4DcFAndroidManifest.xmlUKOSAn[ "T)R^&G(T( Дqqa\Wҕ W\4n3J7_g7|̙G# Hj30$DkPuSJEzU >(6V%Ğ*ޙ* e%ܵf=jZGbzӸ.KAgZ,sdMՁ9"}4G_3Y3z13'gr;Y5L) /8J$D+Q$l#lb0'g~ilxoVmXtr[A:~q+ƶµw+wLbT4R0n#qhS.p's=i=#pbo[YT mBbQ\ymՀ-q A}y+J@SCMp{]<g%;5q~Jv(5DG:qs pDq.o9l.c\"u/dm$kۛ-Ha||:@Cu<_%&}Ie7vav Z7wIENDB`PK /DcF22res/drawable-xhdpi-v4/icon.pngPNG  IHDR``F PLTE---mmmCCCFFFFFFᏤ9݃ל!!!PPPNNN'''vvv;sޅ[[[CCC:::AˠCtRNS &+, PL"+$4*=/DCI7M%9O8&:Q'R~\Sji]p`}0@s{?#cglmiIDAThS@iM V`-ĔRM-}+xpC+*K95%HlRhL4yM}2dH,/p09E-=[ O#mV‚cLzt;4,.*tD]62Ke%'6.' S^Q t/BF0a.Su ѩ*L& V0 ZILmmtLTv);.tv%]r@OWp.I^>u@oGppW33<'η7sבvoD7hE8B`)0n@08<?@wp </d5T=0m hc"A`ڽ~1]=}Fʯd -1SXkKaI=;n YIENDB`PK4DcFres/xml/preferences.xmlS104mkBÉᆖ]$"ڨiRNǀ/@$n`ab}5Qn8KO}}v<1zHyLQ{S8g+\|h r]XP.%6h+"!g<^clℯc]Ɠ0KJŒ˞.W~&dߐ1|e&ND&M3! \L/wZJEi""XC,EohR(%3I{4ЭX$!zGT;c'XLP36zfnS܉8|CN0Yˍi4({ \o_1+_:?أ\--b44ym33Oךui<-^ )Mw߼do{7O;/"[{陏߶Mw{~ev4]"9Fsrہ\DWU64 zzDuaz@8 <<|.2c ?灏2cp%~ \F>`>O'Dǁ?>.#Zl_5 -#/vp;Mh 8n^Z6 p8 nnn< .A@`?p@8 |xxxx=wm) T `9zarMǁg׀w_-@8 L7w^5? hA <<<8k%Z4Q)vA19U1P{Dp={\2W JЅpm יV+Uj`-p9(t=f` &A/;Ĉ3 0{}00&0 $ ) KNs>@>f;RsYc&~#9JIЩ#g>ѩ,JajY,Z%ש: $_/ |]IBwJycz%ܣ |WJ.<ۧZl~G3%<}7Ⱦ $w{$k8$y^aɧJsH.G%!Kl_,_+?._}Dm!\]9&`s߉\ڹYe֒3*2MJgwcoBJGlqJ K.:%Vط9Sv$魂vWJA?h:j^ "]VYRNjzA H7苂Wuу6ÂF%I"koW0wzcmǗzqlsNI6}5Iw$}8O}(D_'S:=F~ꣳ:IyĹyn$-LP_]ߎhWyY =:~B鏄_O*iΣ ?t*_ v+hX;p!wk௬|878qvK7OQ? ^A/7mez쌠K$mlpRAIEq3n!t9= F.J:'s^|9.rs} *۵YW6~DsmĹkJ柒+duV/YUaVS}<`?Uؐ?n:%ݩU mҝe=Q:`kK?N ha7ϙBm*Vo]u5`iJկnV=qvy69V> ּ ŠA;Us݊q -JE^6D/= #hW2ĽJ~Pe@l}/~N<_^|Լj6 κ*GjԳNdtŭ"GŪ} >"Tj`8YQWI^>T+E˟_DGDDk.Q][StmEShMCyk7aoHs9YCKߋeW!t?bC̹]#+auLKW1&BmD ktoJO3,#nɌwS kNGDzK7gʓ=5dXƄiwS6'djbio.JLt:Dʚ=Nۘ2l7-|I#ae3*{q kbʊc)!)#32}fLI() nc,]EQA}f&c,OeȔZfF),gNcVނ}̈KXCd67J>`"͙w7Q[gŜI6{miV,OdSSf& k,.wybJ^#v>QEF72f/ggx|MWpXИ2 #=O.2ef#8Wnꦚ(x,BnjRQxI_Ze٦D-u2EdbqO>`eszEwck6̔٬eaSXj*N!^3RӼ?7xf|f {!7l&X6gy{ldk쒭љkms: ?6rRL&x*;g'M=c$x-ĥØҖp)IsHgabfډ51S2dd')T"3~)ƸgYo1mu@i#>X<ӅN{F7l>1ӆm *H(Py"K"kGwoz׮1n"dA280 H#u 9| 9|K:]áyOE Mm6n oya$C*⣭`WEue,3욲l ;'ϔcf?๤l;dxRWL/LQ~D >wgh4UV˝i+<ǜ [zv^<~\3xv@kJylR}=;+E9vF;JR^:*^3:XRk_ó)D)0qw-#] {F~C5*F%R՝,tPPK U>`|)PKոJCzMETA-INF/MANIFEST.MFPKոJMETA-INF/RELEASE.SFPKոJJ/vMETA-INF/RELEASE.RSAPK4DcF{v p AndroidManifest.xmlPK .DcF %Cres/drawable-hdpi-v4/icon.pngPK /DcFbeedres/drawable-ldpi-v4/icon.pngPK /DcF7T//res/drawable-mdpi-v4/icon.pngPK /DcF22nres/drawable-xhdpi-v4/icon.pngPK4DcFX5res/xml/preferences.xmlPK /DcFiV resources.arscPK4DcF U>`|) r)classes.dexPK =././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742893844.0 fdroidserver-2.4.0/tests/repo/duplicate.permisssions_9999999.apk0000644000175000017500000006546614770471424023243 0ustar00hanshansPK (k% classes.dex p\uwjwZza[~H+6zŲزd2b{%]{u,C 1 7jGNu;It24ЁyR2${W^T99]e@I0?|P9yOϫ?j% Qy]^G"4*Qېuu=>UDo( b`H: NsOw_߀?O^0> iG_!),x7G;` , }]K $ȁ ho x 1x~Aԁ I`"<W9 x 7>MD փ`; }Hc 8.?_WOO{@iFAh[`|  J>(2x \/@U 1f`̃$|63]k 'x^A- L $@;zl` :J> \7`n)n`7`$8 ]^wDBGX+a/enfK\^x3^rlJCg;~+%O~Bg;_>Lxu|LBgx`1!:,^ZYY~KilRVKB^X 9&佐ӀcvOӐQr = N%H}ȑEڇ9) ^ iY5KJ F;2'l È*n?'FtL)-1-LH:Y6:*e߇ b1+J!lu(vGv2ӧ!ORVӳ޼żx=Z0# q2]ҭh)k7 ۼx~܏vBvxwNj2]E ;_$+ޓ<ѓݞ "׻XB| ײѽž<Ꮼs 罗/ .;潺\:_3_ zi ۫je. 7j0y޻?(q[< y@>P?R?^:NJ!ByΣ}^i~m~͐F:8r .؎wNPi%vH݊lF)YTERKfVI0ւ"ǵSb'gV= Bb@W1OTS)>B'~Mcsdzuqԋ^:DjRԨG:v@*۾yojO#h{sx& Y [v?|rNyu9 rZMh'tuwnFb1BKXG+N$P*k;PKe5W3uem(O {GN:()|_7}×ODku݊l>Bn8Mz5ʺ6TL||ʾ-n'YFn\}<. v=;:q؃')99;1'%p1V{+]lԧ1^yAr0 !"߽hVS=*j5N.܃ىNfr"7Amj;w7t};!% ?@A?gyGKʉH1u>`u}j⾊.2^?B_mJ瘑 9F߄MF`AK͊o&cXnA,2>| *U(*5+V=`z+~9gqw ou>6^þmװ︆=/>eخUWWX~{U^j?[o' vO[=i.4a{9ů NY%CXـ%)8_~ p_:":/-QfI$ISU&gZfq]JQx`bb|lh`ra }b"%39sXz)MCi+aD1E#58aZnR<#c; fHE'y8M L8Hb1fԱqp'8+0mf|>9j53U4brLխx,<)Zb Ɂ)+3.Ҝ%+3R]1f.9nϧc<-Ǔi i䈕LP.](#Yx3g XYVXrгG'$n79;9_J;Y3m)&K]f>/mZWgt/zؚ6yږ䯔QiN_.iܜ1+_**"y"WQR];018NE>rÊõԻ\ښOvH_C+V=0!E U4k R\QµUk8+}ʧYT2JQkQd,P B׶>q\z@iL(]xYN٬CU؎gA>h%,Ki7M'TIMDl&=k̖6`0xP8kYy>LUL R>gf^Ŷh ,0ȏcY9)Sc, kG 5٨FqeeUj`㐖ˉ+ OA2'e!څta#9c,=svrxTcffr钕Y&o3k>nۊՃndsĄvv. HÚw]SeJ Yϥ{$wQUv iEd^Q@]!E*(GY*BzE<+%$DR:R'nel#?H0%DVɩ"xRħU咈޵WBݫ %LOWtu(ϋP EEaVSrlc]1U|Z]RϋJ[g?zN_=Vb!~TiUQt MULSUq]U]o!ӽ/^E),==V<^o&ĆZPc>-ķ:[o_<*]UD+khSp};565JݲT3JͬhVV n9icӆM]qX4k<8HӏǏ|%7lVq؀NQ35raMPV[kqhęګ Bym?+>WjQ@9*1UJ3j{".%U:|7h[2_[ WZ@\DCBJ;+z CAC?A-U =^B-1%a(}=~~귢+W(QM>TCi ݦeZ1DsK״"S܄=oi,(-KZZp@ _gE#+PO5/` ǹER%V"GGŵo%{h]+rK-*eQr@JIs2>IKߐ*;о ,VK5H}W(Vо f%8(d~3Aeu]MF.]yWDITo >s8*+4 y.)d/"^AnZt A`")e*A~|.:bOidjq~)_p?59@o˳4lum:bFtUDz)iCtđ|d{zsu$1_E.lJuk +y]\@GY%߮o[uKZk^y<+.{ d]Ȟ~|Zݞw{KAE-sKY3hu:%TڵP̩e]OuoMkQ{M82,h&12x724:b.~<nW_p晸wߤTaZ(' 8 ed7Dù0"C~)COӣ|YX' 래--̖;˶4=Z=LϽ4 7M0Id7I~dEVx^-"yq~=~x^l:N_|ދ7P`v\oU_kqug ?nw/\١7ɜ[|mob]*윥*fb6jV^Ѫ_11˹doQ1<-FDft17g^i ց[vkZ ΁Gh: ~M+7d#+)[2+ȹ)$~ck qCj`|@ܨiKf?hѮb+[e)Xjm1C5vQZaS>kkh[qmmU/xGGH_ww>+[:X/sG6G-sK:~Kw[x=ףLm![C|*_[U^k%x Khwܡ3xRn8x'V`~8CN\Ni1-dBǼa^ia Lx:UOkm|C'Cy=_PKG"vres/layout/activity_main.xmluJ@O$=A桇g HoK`kjZ=c8>!,vv30#Ż;V{crI=ɲyպ]^/l [J9$._UeѨpnyu=+p0U mzek\s;7|`]UR y"r&"+9OZ\Qg|O,?ie%!+'ƋDP/qoA:~PK=~ res/drawable/ic_launcher.png5PNG  IHDRשPLTE)!.H`D=768;er~D?:E8*  2GZ'  ڮ,%!)68.# JKKA@?#  2' 3DT ...  .; !&1 ///*6CC5'  ]1121F;2)667omk ~c omj  H;.  MNO544 ,,-111 &'&&111*!''&223&(&&%000!"&%$ !!# [|u\# RST776#G9,  -:"%*   1@IDA=DJCCCUUV{xu~754,,-{yw}{yZ[\srq[]^zwujiha``79:542\`cKMO988]_a϶^_a׶?>>hkn@ABvut788#"!$tRNSL  SZV6("Vj.ڨTr5T"\r9EhqnnJpDACAD?J?J?QG4V,vRN.=wIDAT(c`@F&f $ّ98/\XXDt8!!9SJZF.!'?k"pEbɥ@Ĥ+WQ$%%38$q-3+dyNn^~MĭBs6LViԃ`P^"qY.P:T =nlb@`hnyYkD{GgWwCo_k$ SBӦ30"pU(IENDB`PK#J;;res/drawable/banner.png5PNG  IHDR=2 IDATxymYgܭZ-P$;`YI` hqx!,/p !lDK ~c0hp](Qrȼy(YDߥWh>1_A̷0S4t-?gzW&j=$Hʕ‡}܈@k粙}i mY zχbyf3ǙŎy 1SQ轧<<اeµkі|핃"bǼоDBcsŏ/_aY;k)'{oZP*?N(NXN/JX^{;XXIJE9}`ʈ-U( /}Xvqv0_%rMoR#}EE(tЬuJzXJ1#} % (Ғ^~JuZ|Uše$kHxS|M>3@~^W3Z.בߞHH c&HqHEؘY˰Eǵzz֙@ G<%WZoA Kss,]f\#3~V\c+s^&TfL:~=~˿Ԋ E>7p+ F1~'DžԵ *Hasmܟhٺtm] =ز ! nl^)y $/Q~8O.}P=z•U~]\[&ī*{|NhFZ۪f~h z- -663`D, X*/s 碔Vzd?:Xt Q|$]|ዟ|r{|0{w_jk6vi|sG}tJƁ`Auh*alW^W^CeW*EN}&ADDta,̼f3C"#fr])o=7^{cc~ E׺i$ifQ]-(P/|9wׄ:M$8Q35L57Q..*XKvfxk滳y4N~v%GW?[GIwVH%#Pq5|yqfhm*7W*QM]~ }-xظ3ݶr=/_~"*ضz67u4`5lPz sV@깯etAF!;܀ `$Bq>-ov\LDLI'c"itZ|Prm0=LxNXp>?8a/U;lHr]TP,ƚ-,I"lFy+a"MHdfst~"e)'n'm>I"sVy0hsF TJ4Uw~?ru5YPvrbku݁ٱ>o+ˆlFy^$Rc=~&s~fwC{oIq}w]|QvI'oЬ9/\>M\V4Er7nmv}SF9k]LD!R1Z[QgyYjs2[|!3 u$܄A›Ǥh<%|x7. (H@Q (Crbi ,[ܾ**w]4yđyz6zh2ɶ6nWnj>(ԨYVGzD$]!lIT67.^biPHl ]AX`{YQܦ-4@O|ȹV4\GF^#X>wZqw֫gؠ&Fo/yTJ%jIhBfȴ|#o9'!Eۼ7`avWrM%8@wH+ v'w^ߍr]*4@KKIoE9q @٤VRa$EJ}KW+mt09ܳƿKFpLdXDm B1zCܰF4]ɫ=g}%n+X(aq ۗmutk0p؎77,T"B۾xZ!9Њ"nBض)б_en:Lw:o_4Q&%ٗrJ܄@oPuji;Ny1X7\yQW;Vv)߾h: Pn8]vĜu3 0Y-!0  ;&0LHY5e b1DgiΗs RV犳 94-Z{C݀y5?cmɫ;<'fc:&DD`-\ /c>7H2q :N Qq-#G kt3/8$®۽7`z@R"g' iR1eFIt AG( L^#S0p}}m(α ƘymXo;o cOnssn(Rez[g@ % ^֌Z5I,YY#޶F t@0dz Ix؄! & l}rL3{a F 1[Sa4 F3̢_EW, 54h7`8FI4+ L5gd*F75Pʼ E!x Gt: 4Wm$hl+&}@=5c`kI!S`[ x:Vk0w03砥z`6pU_b68C ж D=|XiVZ$Ѫ9 sz׃ ;=0' %}\(~\(g!D6  ᫨tŝ擸ChA@F0⃏2%jEura꾏ġDTx7+Pޕ>"82GQ¥+f/v]A9ʱǢ+D1ys_Ƒ982wJCof)kǰ|HEDQ pQ|@$2n~q(lx;Ċ3%_(e* r$"/C3e8H-1XȽP`~e\D)gq,@YL" L 8?_ Ĺ{օx;ty 7:-X5O c9xX̽c,IB뱜0{ީx #ƥ_!ș@H\=RN6(} ^ NZVx<3o_M<r<`XåoA05ʺ6m$ 62佛n1 9ԆZA}3Ti,fܷ]均0{o@G7"fL6Ȩs6?*dƞQXȾM3x)4ك&]6Sed}}Bsoyrz^rPy뉌7+ O,0uޛc_K?'1CŒzr |5Mt-PpƘ#aG-(מ@ @AInSf5Sqw,GUtX1{-[>wԬ0,b| y5~^ -v$ 4D$@q[d3wJU0N؎$L0աCz$Ns 6jS뷳L,j3bRYutdܪ:H"1!Z<ӕD͊-/|1_uT@ HC9 ; & =M8 ><-jc㍶`M.ŽD>3AՋ@0d%F2m}RRh+Zƛ:,/+e c!48yOi 6G7>|r {ULBH򶆠czo<-7g%a:՞hkqѴ #D,~>[0hAӔ;>,󡙒a,~A1ZU^R]7gZI4îj5d|cKKt*J;y&\RozGxW' 3׵3B!Kq4ե'GtGΰ6A'EYu_޸?w /pTw5 Hn,7u6ue2.!",/K23ڈ<E166p4?:>gDϣ}#>t@| LV'ǁ^mzf3 ES܁@l-•V+t Q|YٲcLYT`y0Vgp-`b᪳N 31 Br" 6mkcҚƭ[6њOH)ҕ+™[PڲK2Fl|0{D Dv@1`@D2H@(d  :BFƆs=ꂈ=P+$*C^-e!=e_=I15Q7QuQ90t"ļd?N::$DN9o..>qM?'CBK$h@u}2|G֨$ ǜ;9e{uIT_K7D;U?KSb_t-_{_B}-!5Ӱ򑐪ÿ2*A9J@O[4@`-txcM;Vm@0FUV"d0ԓ4yxfePZҌno)/HXNb$ j`Z 倄dZXkz=Rf51m!98s ǙOJ1F>?FdcydL꒕d6 ɂ<BdhWPfj #ذ {QuzDLvyBi6w&Unw~,%B>d/Hwx+BHu͎YC8i[-p8q> ^"KPbzo>j8~^`첅nԑx8)A~** 2{j,ǁ Ѝ:L ԄL6 ,S9SMh{Zj*x~YB4q9Ln6w&L05DR s#^_9B*jR#-I`t/Tyu]FQr:I ( @H*r \ɀ\/`.@R4nx}˩ S40ooL9" %mf(m4aϽnh9o9lXr_fNV3?j=pR<*;)n4HJ,T8p<;M'HVWF]dW ^+е*I6I58>`>@Xt,™im#^ZIXZAx6ljn" n4>D0O q j™_Ax@7YPյe { D+wzG2%/'IRy:0OG`]Bn5aD=ffssWW~}bOXq'm}ACOg`RPت:p-#؄n6Hݎ7U~;Gv:K!|ĩ6k ?/@ zm@@>~}ئ@WЍ㗙lOo6-zclL}[rfv&!tes?!7=d65 ?)T݄f!`A"PtL cDz"Wa^nG9S>e;И!!f \@@k-5l]viNF7yn]!2H?sز[b T}$D)@YD|v[>,T {}NI =P) Zuq\n T T}FlC}*­\e]R( AMyמs98.,!ZCQmǀ3p;b z1PBH40OX(#n 3=KFJYNgLI[,ܥsPR ޿vƞ %!DvKiprY[Ɂ8IRi9FNSo @FcuϧTpLJpӄ vu s`1T 'V˱fa=P; 2Y|itsTUq*'&PR9M8S,I`rȍBD ;&{`dA3<[# PCPt j> Cp\\w54;z  =,M}"IJ@$'!$|"fRg6I`uyS){Y J[W:fLY{[8"I)Ł4?v4P!2qg>&;$JZj?jX(Rm]\J[<|0\8 pffGBRl>Bɥ;hyI,}} IZ 98KˠLlHFd2pD06t߹{VrHƿ'q2C|z[ ;FCX繁RH*=Uy3 ~4GGgnaLQdc}Q|>=rJCVXo$$yN n!܄|?󐍖Ԋ(2Z-5-pe2U3P33[M+ۃΞ5;wTu$[ִ2۬UA57?]X栛MfE[.c<N U**Qf$ Zu`ijf&MyZ O2'|Xߛ$"F&dBJНtWBBi\"'^C~?8O({eO{S }{.-#4V%"[GnRBpY 8a&Ҭ^k`=Ҵ_~亩=|00kCs.- L'|}لljq ʝF@VVkR- <2Jr2x_xfPy/ ΁}0GrptogN)>R6T+srXș=9e.~>xȻZu[cQ3PT휱G❔J]Z ] whpc:LqdsRHKU,]Z>U) )wؘTHjW6`D6{V$ph}W[=w 7? yDNZlc}OO99W6qq] Tf\ =#4/}ޅ Z!Xk0d)=ѡݫcԙ*HW=w4G@{߇{4j& aV@T+P3iRr=;[Ԙu'=8=ׂP2ܥS'xh~y|q6!╕^@m2'ҟ<@&^ֺW7`Z큑&&E 53 w~:iSa"' ݔ9HGtoՠk5@9iN^}o4^vm[S8r/z4-uǒ,R9keD.ZM ֎)ƶ@5vpϏ$_*lQgH<XI53 g[MfPֶ $}[dsPO)W|4!@YJ{Z ˃gR7nہ ÁO#7! }"f4[xW&F PओptY'f~rO߼Eg -8N}WnS) D}+Qs[>b[) $ @H* t7Ntx6J2^OK-|?z7mi;DZ nE R9L҇V_d_pGp".Գ6hL J:j5RYVex71ubc=IqdBPTO+OMGM!ʗD hA1ԀMN֕͛OSIqmQaC:Npc)tQHw* g?9b ѳvE>`7nGusT #k"-߶h4ѓI6 =SH*rl슸v nѰʔ!Ԯ4@t{Cvې to'sik[lY0M@# L PKp#vj/B܁pBl$b#<=h{}6-ҝ2kO.uքih(}$p;IdJD1h[x ʔVWd1#KJB#Cqt*3&Ӳ+6?^hmcLs=t!f 4 -٫NHJV~ԤK@IV; _; W,o%6W{-XZ <*{e59 ]kW3ZjG t]*!T ',@ㇹVlvpV8r[ϋ8.y x@~÷[xcbvd8^i 摓)PKLMETA-INF/CERT.SFuM0;߁n (/T⢗I]Dk&3̸{k4X I[8d$:rK$T2}W[(JKsSRTMqx%- a$<ccC{%0G Ë_-bV(Ʒ=%%,H||:" *iŽǦxhǩfcXNf?4C28GX$3VO Ԟyݝ.oY }sxuՅI/G厀=k]|7[wk,AO_MmcqR_FwK!X9#!,&9aLrb9Ia^8ėvq,ԃ: ד.yyD~5N^sX߅7^M ^`it@OQ?7VxkPKnWiMETA-INF/CERT.RSA3hbajhδAO&FFC~^6΄6Tf&FVnBM/ f&F&&[ a@-l̡,lL| 0c^JQ~fHY*Tn 'khd`adadhdf`%kB8ٍ@o1724v2562ljf-Q?nf:}`ʃV'?VK5yʮAlMI2<;lLsids>|WoNB.]EXGj1sfG_dbfd`Dv0]}eKOdU֯'"nUޓf#f~Is(* ޫy_l^\[|ؿ)' Yҫ2"00NP=7h0  *H 071 0 UUS10U Android10U Android Debug0 120828212600Z 420821212600Z071 0 UUS10U Android10U Android Debug00  *H 0U>MZiQ@:ɧK&e7.]p]Xd-Fs_ȩ˹k#K_܇Ԏ L؍~b4G'8]&\[0  *H m!y5Df3:{.ȃX%M#fP<+7eL|ȡ),'J L#ORqq8F#"8[2bk ʳM@ _MZiQ@:ɧK&e7.]p]Xd-Fs_ȩ˹k#K_܇Ԏ L؍~b4G'8]&\[APK Sig Block 42PK AndroidManifest.xmlPKnWibMETA-INF/CERT.RSAPKL`META-INF/CERT.SFPK}^META-INF/MANIFEST.MFPK (k% classes.dexPK#J;; !#res/drawable/banner.pngPK=~ res/drawable/ic_launcher.pngPKG"v res/layout/activity_main.xmlPK9TT Nresources.arscPK Nh././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898792.0 fdroidserver-2.4.0/tests/repo/entry.json0000644000175000017500000000035614770503150017070 0ustar00hanshans{ "timestamp": 1676634233000, "version": 20002, "index": { "name": "/index-v2.json", "sha256": "f0912b64db80168ee807f43ab3470bb709b6659aee05ad63057dcbcd1c97dc5e", "size": 55186, "numPackages": 11 }, "diffs": {} }././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/fake.ota.update_1234.zip0000644000175000017500000000035114717152071021200 0ustar00hanshansPK McI'fake.ota.update.placeholderUT XXux Don Nov 3 09:45:02 CET 2016 PK McI'fake.ota.update.placeholderUTXux PKar././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898792.0 fdroidserver-2.4.0/tests/repo/index-v1.json0000644000175000017500000006351714770503150017372 0ustar00hanshans{ "repo": { "timestamp": 1676634233000, "version": 20002, "name": "My First F-Droid Repo Demo", "icon": "icon.png", "address": "https://MyFirstFDroidRepo.org/fdroid/repo", "description": "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid.", "mirrors": [ "http://foobarfoobarfoobar.onion/fdroid/repo", "https://foo.bar/fdroid/repo" ] }, "requests": { "install": [ "org.adaway" ], "uninstall": [ "com.android.vending", "com.facebook.orca" ] }, "apps": [ { "categories": [ "Phone & SMS" ], "suggestedVersionName": "0.9", "suggestedVersionCode": "9", "description": "In order to keep away curious eyes, SMS-bypass filters incoming SMS messages\nbefore they reach your inbox. Based on bughunter2.smsfilter.\n\nFeatures:\n\n* Discrete fake app \"Battery level\": Long tap on Battery percentage will show SMS.\n* Filter incoming SMS specified address: redirect the SMS to SMS-bypass messages list; remove SMS arrival sound or vibration; show a discreet notification icon (battery level); vibrate if checked in settings\n* Add contact from contact list\n* Export messages to a text file", "donate": "http://rodolphe.souchaud.free.fr/donate", "issueTracker": "https://gitlab.com/souch/SMSbypass/issues", "license": "GPL-3.0-only", "sourceCode": "https://gitlab.com/souch/SMSbypass/tree/HEAD", "summary": "Filter SMS and show them in a fake app", "webSite": "https://gitlab.com/souch/SMSbypass", "added": 1524700800000, "icon": "souch.smsbypass.9.png", "packageName": "souch.smsbypass", "lastUpdated": 1524700800000, "localized": { "en-US": { "name": "Battery level" } } }, { "categories": [ "Development" ], "suggestedVersionCode": "4", "license": "Unknown", "name": "Caffeine Tile", "summary": "Test app for extracting icons when an XML one is default", "added": 1539129600000, "packageName": "info.zwanenburg.caffeinetile", "lastUpdated": 1539129600000 }, { "categories": [ "tests" ], "suggestedVersionCode": "9999999", "license": "Unknown", "name": "Duplicate Permisssions", "summary": "Test app for all possible ", "added": 1513900800000, "icon": "duplicate.permisssions.9999999.png", "packageName": "duplicate.permisssions", "lastUpdated": 1513900800000 }, { "categories": [ "System" ], "suggestedVersionName": "0.2.1", "suggestedVersionCode": "2000", "description": "F-Droid can make use of system privileges or permissions to\ninstall, update and remove applications on its own. The only way to obtain those\nprivileges is to become a system app.\n\nThis is where the Privileged Extension comes in - being a separate app and much\nsmaller, it can be installed as a system app and communicate with the main app\nvia AIDL IPC.\n\nThis has several advantages:\n\n* Reduced disk usage in the system partition\n* System updates don't remove F-Droid\n* The process of installing into system via root is safer\n\nThis is packaged as an OTA (Over-The-Air) update ZIP file. It must be installed\nusing TWRP or other Android recovery that can flash updates to the system from\nthe /data/data/org.fdroid.fdroid folder on the /data partition. The standalone\nAPK is called F-Droid Privileged Extension.", "donate": "https://f-droid.org/about", "issueTracker": "https://gitlab.com/fdroid/privileged-extension/issues", "license": "Apache-2.0", "sourceCode": "https://gitlab.com/fdroid/privileged-extension", "summary": "Tests whether OTA ZIP files are being include", "webSite": "https://f-droid.org", "added": 1457568000000, "packageName": "fake.ota.update", "lastUpdated": 1457568000000, "localized": { "en-US": { "name": "fake.ota.update_1234" } } }, { "suggestedVersionCode": "4", "license": "Unknown", "name": "maxSdkVersion", "summary": "Test setting maxSdkVersion in an APK", "added": 1739805810000, "icon": "org.maxsdkversion.4.png", "packageName": "org.maxsdkversion", "lastUpdated": 1739805810000 }, { "categories": [ "Development" ], "suggestedVersionCode": "987", "license": "Unknown", "name": "No minSdkVersion or targetSdkVersion", "summary": "An APK without any block in AndroidManifest.xml", "added": 1539129600000, "icon": "no.min.target.sdk.987.png", "packageName": "no.min.target.sdk", "lastUpdated": 1539129600000 }, { "bitcoin": "1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk", "categories": [ "Development" ], "suggestedVersionCode": "99999999", "liberapay": "12334", "license": "GPL-3.0-only", "sourceCode": "https://github.com/eighthave/urzip", "added": 1388448000000, "icon": "obb.main.oldversion.1444412523.png", "packageName": "obb.main.oldversion", "lastUpdated": 1388448000000, "localized": { "en-US": { "name": "OBB Main Old Version" } } }, { "bitcoin": "1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk", "categories": [ "Development" ], "suggestedVersionCode": "99999999", "license": "GPL-3.0-only", "sourceCode": "https://github.com/eighthave/urzip", "added": 1444608000000, "icon": "obb.main.twoversions.1101617.png", "packageName": "obb.main.twoversions", "lastUpdated": 1466380800000, "localized": { "en-US": { "name": "OBB Main Two Versions" } } }, { "bitcoin": "1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk", "categories": [ "Development" ], "suggestedVersionCode": "99999999", "license": "GPL-3.0-only", "sourceCode": "https://github.com/eighthave/urzip", "added": 1461369600000, "icon": "obb.mainpatch.current.1619.png", "packageName": "obb.mainpatch.current", "lastUpdated": 1496275200000, "localized": { "en-US": { "featureGraphic": "featureGraphic_ffhLaojxbGAfu9ROe1MJgK5ux8d0OVc6b65nmvOBaTk=.png", "icon": "icon_WI0pkO3LsklrsTAnRr-OQSxkkoMY41lYe2-fAvXLiLg=.png", "name": "OBB Main/Patch Current", "phoneScreenshots": [ "screenshot-main.png" ], "sevenInchScreenshots": [ "screenshot-tablet-main.png" ] } } }, { "antiFeatures": [ "NoSourceSince", "NonFreeNet" ], "categories": [ "Multimedia", "Security", "Time" ], "suggestedVersionName": "1.5", "suggestedVersionCode": "6", "description": "Activates silent mode during calendar events.", "issueTracker": "https://github.com/miguelvps/PoliteDroid/issues", "license": "GPL-3.0-only", "sourceCode": "https://github.com/miguelvps/PoliteDroid", "summary": "Calendar tool", "added": 1498176000000, "icon": "com.politedroid.6.png", "packageName": "com.politedroid", "lastUpdated": 1498176000000, "localized": { "en-US": { "name": "Polite Droid" } } }, { "authorWebSite": "https://guardianproject.info", "bitcoin": "1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk", "categories": [ "Development", "GuardianProject", "1", "2.0" ], "suggestedVersionCode": "2147483647", "description": "It\u2019s Urzip \u662f\u4e00\u4e2a\u83b7\u5f97\u5df2\u5b89\u88c5 APK \u76f8\u5173\u4fe1\u606f\u7684\u5b9e\u7528\u5de5\u5177\u3002\u5b83\u4ece\u60a8\u7684\u8bbe\u5907\u4e0a\u5df2\u5b89\u88c5\u7684\u6240\u6709\u5e94\u7528\u5f00\u59cb\uff0c\u4e00\u952e\u89e6\u6478\u5373\u53ef\u663e\u793a APK \u7684\u6307\u7eb9\uff0c\u5e76\u4e14\u63d0\u4f9b\u5230\u8fbe virustotal.com \u548c androidobservatory.org \u7684\u5feb\u6377\u94fe\u63a5\uff0c\u8ba9\u60a8\u65b9\u4fbf\u5730\u4e86\u89e3\u7279\u5b9a APK \u7684\u6863\u6848\u3002\u5b83\u8fd8\u53ef\u4ee5\u8ba9\u60a8\u5bfc\u51fa\u7b7e\u540d\u8bc1\u4e66\u548c\u751f\u6210 ApkSignaturePin Pin \u6587\u4ef6\u4f9b TrustedIntents \u5e93\u4f7f\u7528\u3002\n\n\u2605 Urzip \u652f\u6301\u4e0b\u5217\u8bed\u8a00\uff1a Deutsch, English, espa\u00f1ol, suomi, \u65e5\u672c\u8a9e, \ud55c\uad6d\uc5b4, Norsk, portugu\u00eas (Portugal), \u0420\u0443\u0441\u0441\u043a\u0438\u0439, Sloven\u0161\u010dina, T\u00fcrk\u00e7e\n\u6ca1\u770b\u5230\u60a8\u7684\u8bed\u8a00\uff1f\u5e2e\u5fd9\u7ffb\u8bd1\u672c\u5e94\u7528\u5427\uff1a\nhttps://www.transifex.com/projects/p/urzip\n\n\u2605 \u81f4\u7528\u6237\uff1a\u6211\u4eec\u8fd8\u7f3a\u5c11\u4f60\u559c\u6b22\u7684\u529f\u80fd\uff1f\u53d1\u73b0\u4e86\u4e00\u4e2a bug\uff1f\u8bf7\u544a\u8bc9\u6211\u4eec\uff01\u6211\u4eec\u4e50\u4e8e\u542c\u53d6\u60a8\u7684\u610f\u89c1\u3002\u8bf7\u53d1\u9001\u7535\u5b50\u90ae\u4ef6\u81f3: support@guardianproject.info \u6216\u8005\u52a0\u5165\u6211\u4eec\u7684\u804a\u5929\u5ba4 https://guardianproject.info/contact\n", "issueTracker": "https://dev.guardianproject.info/projects/urzip/issues", "license": "GPL-3.0-only", "openCollective": "f-droid-just-testing", "sourceCode": "https://github.com/guardianproject/urzip", "summary": "\u4e00\u4e2a\u5b9e\u7528\u5de5\u5177\uff0c\u83b7\u53d6\u5df2\u5b89\u88c5\u5728\u60a8\u7684\u8bbe\u5907\u4e0a\u7684\u5e94\u7528\u7684\u6709\u5173\u4fe1\u606f", "webSite": "https://dev.guardianproject.info/projects/urzip", "added": 1466640000000, "icon": "info.guardianproject.urzip.100.png", "packageName": "info.guardianproject.urzip", "lastUpdated": 1466640000000, "localized": { "en-US": { "description": "full description\n", "featureGraphic": "featureGraphic_GFRT5BovZsENGpJq1HqPODGWBRPWQsx25B95Ol5w_wU=.png", "icon": "icon_NJXNzMcyf-v9i5a1ElJi0j9X1LvllibCa48xXYPlOqQ=.png", "name": "title", "summary": "short description", "video": "video", "whatsNew": "default" } } } ], "packages": { "com.politedroid": [ { "added": 1498176000000, "antiFeatures": [ "KnownVuln", "NonFreeAssets", "UpstreamNonFree" ], "apkName": "com.politedroid_6.apk", "hash": "70c2f776a2bac38a58a7d521f96ee0414c6f0fb1de973c3ca8b10862a009247d", "hashType": "sha256", "minSdkVersion": 14, "packageName": "com.politedroid", "sig": "b4964fd759edaa54e65bb476d0276880", "signer": "32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6", "size": 16578, "targetSdkVersion": 21, "uses-permission": [ [ "android.permission.READ_CALENDAR", null ], [ "android.permission.RECEIVE_BOOT_COMPLETED", null ] ], "versionCode": 6, "versionName": "1.5" }, { "added": 1498176000000, "apkName": "com.politedroid_5.apk", "hash": "5bdbfa071cca4b8d05ced41d6b28763595d6e8096cca5bbf0f9253c9a2622e5d", "hashType": "sha256", "minSdkVersion": 3, "packageName": "com.politedroid", "sig": "b4964fd759edaa54e65bb476d0276880", "signer": "32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6", "size": 18817, "targetSdkVersion": 10, "uses-permission": [ [ "android.permission.READ_CALENDAR", null ], [ "android.permission.RECEIVE_BOOT_COMPLETED", null ] ], "versionCode": 5, "versionName": "1.4" }, { "added": 1498176000000, "apkName": "com.politedroid_4.apk", "hash": "c809bdff83715fbf919f3840ee09869b038e209378b906e135ee40d3f0e1f075", "hashType": "sha256", "minSdkVersion": 3, "packageName": "com.politedroid", "sig": "b4964fd759edaa54e65bb476d0276880", "signer": "32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6", "size": 18489, "uses-permission": [ [ "android.permission.READ_CALENDAR", null ], [ "android.permission.RECEIVE_BOOT_COMPLETED", null ], [ "android.permission.WRITE_EXTERNAL_STORAGE", null ], [ "android.permission.READ_PHONE_STATE", null ], [ "android.permission.READ_EXTERNAL_STORAGE", null ] ], "versionCode": 4, "versionName": "1.3" }, { "added": 1498176000000, "antiFeatures": [ "KnownVuln", "NonFreeAssets", "UpstreamNonFree" ], "apkName": "com.politedroid_3.apk", "hash": "665d03d61ebc642289fda697f71a59305b0202b16cafc5ffdae91cbe91f0b25d", "hashType": "sha256", "minSdkVersion": 3, "packageName": "com.politedroid", "sig": "b4964fd759edaa54e65bb476d0276880", "signer": "32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6", "size": 17552, "uses-permission": [ [ "android.permission.READ_CALENDAR", null ], [ "android.permission.RECEIVE_BOOT_COMPLETED", null ], [ "android.permission.WRITE_EXTERNAL_STORAGE", null ], [ "android.permission.READ_PHONE_STATE", null ], [ "android.permission.READ_EXTERNAL_STORAGE", null ] ], "versionCode": 3, "versionName": "1.2" } ], "duplicate.permisssions": [ { "added": 1513900800000, "apkName": "duplicate.permisssions_9999999.apk", "hash": "8367857fe75f85321ce2c344b34804d0bc193707f6ba03710d025d9030803434", "hashType": "sha256", "minSdkVersion": 18, "packageName": "duplicate.permisssions", "sig": "056c9f1554c40ba59a2103009c82b420", "signer": "659e1fd284549f70d13fb02c620100e27eeea3420558cce62b0f5d4cf2b77d84", "size": 27446, "targetSdkVersion": 27, "uses-permission": [ [ "android.permission.INTERNET", null ], [ "android.permission.ACCESS_NETWORK_STATE", null ], [ "android.permission.ACCESS_WIFI_STATE", null ], [ "android.permission.CHANGE_WIFI_MULTICAST_STATE", null ], [ "android.permission.INTERNET", null ], [ "android.permission.WRITE_EXTERNAL_STORAGE", 18 ], [ "android.permission.READ_EXTERNAL_STORAGE", 18 ] ], "uses-permission-sdk-23": [ [ "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS", 27 ], [ "android.permission.REQUEST_INSTALL_PACKAGES", null ] ], "versionCode": 9999999 } ], "fake.ota.update": [ { "added": 1457568000000, "apkName": "fake.ota.update_1234.zip", "hash": "897a92a4ccff4f415f6ba275b2af16d4ecaee60a983b215bddcb9f8964e7a24c", "hashType": "sha256", "packageName": "fake.ota.update", "size": 233, "versionCode": 1234, "versionName": "897a92a" } ], "info.guardianproject.urzip": [ { "added": 1466640000000, "apkName": "urzip-; \u0420\u0430\u0445\u043c\u0430\u0301, [r\u0250x\u02c8man\u02b2\u026an\u0259f] \u0633\u064a\u0631\u062c\u064a_\u0631\u062e\u0645\u0627\u0646\u064a\u0646\u0648\u0641 \u8c22\u00b7.apk", "hash": "15c0ec72c74a3791f42cdb43c57df0fb11a4dbb656851bbb8cf05b26a8372789", "hashType": "sha256", "minSdkVersion": 4, "packageName": "info.guardianproject.urzip", "sig": "b4964fd759edaa54e65bb476d0276880", "signer": "32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6", "size": 11471, "targetSdkVersion": 18, "versionCode": 100, "versionName": "0.1" } ], "info.zwanenburg.caffeinetile": [ { "added": 1539129600000, "apkName": "info.zwanenburg.caffeinetile_4.apk", "hash": "dbbdd7deadb038862f426b71efe4a64df8c3edf25d669e935f349510e16f65db", "hashType": "sha256", "minSdkVersion": 24, "packageName": "info.zwanenburg.caffeinetile", "sig": "03f9b2f848d22fd1d8d1331e8b1b486d", "signer": "51cfa5c8a743833ad89acf81cb755936876a5c8b8eca54d1ffdcec0cdca25d0e", "size": 11740, "targetSdkVersion": 25, "uses-permission": [ [ "android.permission.WAKE_LOCK", null ] ], "versionCode": 4, "versionName": "1.3" } ], "no.min.target.sdk": [ { "added": 1539129600000, "apkName": "no.min.target.sdk_987.apk", "hash": "e2e1dc1d550df2b5bc383860139207258645b5540abeccd305ed8b2cb6459d2c", "hashType": "sha256", "minSdkVersion": 3, "packageName": "no.min.target.sdk", "sig": "b4964fd759edaa54e65bb476d0276880", "signer": "32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6", "size": 14102, "uses-permission": [ [ "android.permission.WRITE_EXTERNAL_STORAGE", null ], [ "android.permission.READ_PHONE_STATE", null ], [ "android.permission.READ_EXTERNAL_STORAGE", null ] ], "versionCode": 987, "versionName": "1.2-fake" } ], "obb.main.oldversion": [ { "added": 1388448000000, "apkName": "obb.main.oldversion_1444412523.apk", "hash": "c5f149e526f89c05c62923bdb7bb1e2be5673c46ec85143f41e514340631449c", "hashType": "sha256", "minSdkVersion": 4, "obbMainFile": "main.1434483388.obb.main.oldversion.obb", "obbMainFileSha256": "d3eb539a556352f3f47881d71fb0e5777b2f3e9a4251d283c18c67ce996774b7", "packageName": "obb.main.oldversion", "sig": "eb41d4d6082bb3e81c3d58dbf7fc7332", "signer": "818e469465f96b704e27be2fee4c63ab9f83ddf30e7a34c7371a4728d83b0bc1", "size": 14323, "targetSdkVersion": 18, "uses-permission": [ [ "android.permission.INTERNET", null ], [ "android.permission.ACCESS_NETWORK_STATE", 22 ], [ "android.permission.ACCESS_WIFI_STATE", null ], [ "android.permission.CHANGE_WIFI_MULTICAST_STATE", null ], [ "android.permission.CHANGE_NETWORK_STATE", null ], [ "android.permission.CHANGE_WIFI_STATE", null ], [ "android.permission.BLUETOOTH", null ], [ "android.permission.BLUETOOTH_ADMIN", 18 ], [ "android.permission.RECEIVE_BOOT_COMPLETED", null ], [ "android.permission.NFC", null ] ], "uses-permission-sdk-23": [ [ "android.permission.WRITE_EXTERNAL_STORAGE", null ], [ "android.permission.WRITE_SETTINGS", 25 ] ], "versionCode": 1444412523, "versionName": "0.1" } ], "obb.main.twoversions": [ { "added": 1466380800000, "apkName": "obb.main.twoversions_1101617.apk", "hash": "9bc74566f089ef030ac33e7fbd99d92f1a38f363fb499fed138d9e7b774e821c", "hashType": "sha256", "minSdkVersion": 4, "obbMainFile": "main.1101615.obb.main.twoversions.obb", "obbMainFileSha256": "d3eb539a556352f3f47881d71fb0e5777b2f3e9a4251d283c18c67ce996774b7", "packageName": "obb.main.twoversions", "sig": "b4964fd759edaa54e65bb476d0276880", "signer": "32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6", "size": 11481, "srcname": "obb.main.twoversions_1101617_src.tar.gz", "targetSdkVersion": 18, "versionCode": 1101617, "versionName": "0.1" }, { "added": 1451606400000, "apkName": "obb.main.twoversions_1101615.apk", "hash": "7b0b7b9ba248e15751a16e3a0e01e1e24cbb673686c38422030cb75d5c33f0bb", "hashType": "sha256", "minSdkVersion": 4, "obbMainFile": "main.1101615.obb.main.twoversions.obb", "obbMainFileSha256": "d3eb539a556352f3f47881d71fb0e5777b2f3e9a4251d283c18c67ce996774b7", "packageName": "obb.main.twoversions", "sig": "b4964fd759edaa54e65bb476d0276880", "signer": "32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6", "size": 11480, "targetSdkVersion": 18, "versionCode": 1101615, "versionName": "0.1" }, { "added": 1444608000000, "apkName": "obb.main.twoversions_1101613.apk", "hash": "cce97a52ff18d843185be7f22ecb1a557c36b7a9f8ba07a8be94e328e00b35dc", "hashType": "sha256", "minSdkVersion": 4, "obbMainFile": "main.1101613.obb.main.twoversions.obb", "obbMainFileSha256": "d3eb539a556352f3f47881d71fb0e5777b2f3e9a4251d283c18c67ce996774b7", "packageName": "obb.main.twoversions", "sig": "b4964fd759edaa54e65bb476d0276880", "signer": "32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6", "size": 11477, "targetSdkVersion": 18, "versionCode": 1101613, "versionName": "0.1" } ], "obb.mainpatch.current": [ { "added": 1461369600000, "apkName": "obb.mainpatch.current_1619.apk", "hash": "eda5fc3ecfdac3252717e36bdbc9820865baeef162264af9ba5db7364f0e7a0c", "hashType": "sha256", "minSdkVersion": 4, "obbMainFile": "main.1619.obb.mainpatch.current.obb", "obbMainFileSha256": "d3eb539a556352f3f47881d71fb0e5777b2f3e9a4251d283c18c67ce996774b7", "obbPatchFile": "patch.1619.obb.mainpatch.current.obb", "obbPatchFileSha256": "d3eb539a556352f3f47881d71fb0e5777b2f3e9a4251d283c18c67ce996774b7", "packageName": "obb.mainpatch.current", "sig": "b4964fd759edaa54e65bb476d0276880", "signer": "32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6", "size": 11479, "targetSdkVersion": 18, "versionCode": 1619, "versionName": "0.1" }, { "added": 1496275200000, "apkName": "obb.mainpatch.current_1619_another-release-key.apk", "hash": "42e7d6d2f8254aaf9fe95ba6ecc233ee8c3cd543a3e4f3f9ebe1b638221122fa", "hashType": "sha256", "minSdkVersion": 4, "obbMainFile": "main.1619.obb.mainpatch.current.obb", "obbMainFileSha256": "d3eb539a556352f3f47881d71fb0e5777b2f3e9a4251d283c18c67ce996774b7", "obbPatchFile": "patch.1619.obb.mainpatch.current.obb", "obbPatchFileSha256": "d3eb539a556352f3f47881d71fb0e5777b2f3e9a4251d283c18c67ce996774b7", "packageName": "obb.mainpatch.current", "sig": "4cbb9827107da5ab4f34228fa997fbf8", "signer": "ce9e200667f02d96d49891a2e08a3c178870e91853d61bdd33ef5f0b54701aa5", "size": 10541, "targetSdkVersion": 18, "versionCode": 1619, "versionName": "0.1" } ], "org.maxsdkversion": [ { "added": 1739805810000, "apkName": "org.maxsdkversion_4.apk", "features": [ "android.hardware.camera.front" ], "hash": "877d582369d2840fc0d6892e44feaaad21419b0e35af42f22b3e127bcd08274d", "hashType": "sha256", "maxSdkVersion": 25, "minSdkVersion": 14, "packageName": "org.maxsdkversion", "sig": "1a5e67bcef6b2d6242f2d36982b54589", "signer": "401a3a5843a3d5cebc22e6de5cb76d08eaa6797122d7fe1283df1d192e132f5e", "size": 12768, "targetSdkVersion": 19, "uses-permission": [ [ "android.permission.CAMERA", null ] ], "versionCode": 4, "versionName": "1.0.3" } ], "souch.smsbypass": [ { "added": 1524700800000, "apkName": "souch.smsbypass_9.apk", "hash": "80b0ae68a1189baa3ee6717092e3dbf1a4210165f7f7e5f2f9616bd63a2ec01d", "hashType": "sha256", "minSdkVersion": 8, "packageName": "souch.smsbypass", "sig": "e50c99753cd45e2736d52cb49be07581", "signer": "d3aec784b1fd71549fc22c999789122e3639895db6bd585da5835fbe3db6985c", "size": 81295, "targetSdkVersion": 18, "uses-permission": [ [ "android.permission.RECEIVE_SMS", null ], [ "android.permission.SEND_SMS", null ], [ "android.permission.READ_CONTACTS", null ], [ "android.permission.WRITE_EXTERNAL_STORAGE", null ], [ "android.permission.VIBRATE", null ], [ "android.permission.READ_EXTERNAL_STORAGE", null ] ], "versionCode": 9, "versionName": "0.9" } ] } }././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898792.0 fdroidserver-2.4.0/tests/repo/index-v2.json0000644000175000017500000015362214770503150017370 0ustar00hanshans{ "repo": { "name": { "en-US": "My First F-Droid Repo Demo" }, "description": { "en-US": "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." }, "icon": { "en-US": { "name": "/icons/icon.png", "sha256": "b1f27fa87f8cabca50cdcd462a0f500d79d883b965a498d0e49eea560b39be1f", "size": 715 } }, "address": "https://MyFirstFDroidRepo.org/fdroid/repo", "mirrors": [ { "isPrimary": true, "url": "https://MyFirstFDroidRepo.org/fdroid/repo" }, { "url": "http://foobarfoobarfoobar.onion/fdroid/repo" }, { "url": "https://foo.bar/fdroid/repo" } ], "timestamp": 1676634233000, "antiFeatures": { "Ads": { "description": { "de": "Diese App enthält Werbung", "en-US": "This app contains advertising", "fa": "این کاره دارای تبلیغات است", "ro": "Aplicația conține reclamă", "zh-rCN": "此应用包含广告" }, "icon": { "de": { "name": "/icons/ic_antifeature_ads.xml", "sha256": "b333528573134c5de73484862a1b567a0bdfd6878d183f8500287abadc0ba60e", "size": 1564 }, "en-US": { "name": "/icons/ic_antifeature_ads.xml", "sha256": "b333528573134c5de73484862a1b567a0bdfd6878d183f8500287abadc0ba60e", "size": 1564 }, "fa": { "name": "/icons/ic_antifeature_ads.xml", "sha256": "b333528573134c5de73484862a1b567a0bdfd6878d183f8500287abadc0ba60e", "size": 1564 }, "ro": { "name": "/icons/ic_antifeature_ads.xml", "sha256": "b333528573134c5de73484862a1b567a0bdfd6878d183f8500287abadc0ba60e", "size": 1564 }, "zh-rCN": { "name": "/icons/ic_antifeature_ads.xml", "sha256": "b333528573134c5de73484862a1b567a0bdfd6878d183f8500287abadc0ba60e", "size": 1564 } }, "name": { "de": "Werbung", "en-US": "Ads", "fa": "تبلیغات", "ro": "Reclame", "zh-rCN": "广告" } }, "DisabledAlgorithm": { "description": { "de": "Diese App hat eine schwache Sicherheitssignatur", "en-US": "This app has a weak security signature", "fa": "این کاره، امضای امنیتی ضعیفی دارد", "ro": "Aplicația are o semnătură slab securizată", "zh-rCN": "此应用的安全签名较弱" }, "icon": { "de": { "name": "/icons/ic_antifeature_disabledalgorithm.xml", "sha256": "94dea590c7c0aa37d351ab62a69fc7eefbc2cdbb84b79df3934c2e9332e1dcfb", "size": 2313 }, "en-US": { "name": "/icons/ic_antifeature_disabledalgorithm.xml", "sha256": "94dea590c7c0aa37d351ab62a69fc7eefbc2cdbb84b79df3934c2e9332e1dcfb", "size": 2313 }, "fa": { "name": "/icons/ic_antifeature_disabledalgorithm.xml", "sha256": "94dea590c7c0aa37d351ab62a69fc7eefbc2cdbb84b79df3934c2e9332e1dcfb", "size": 2313 }, "ro": { "name": "/icons/ic_antifeature_disabledalgorithm.xml", "sha256": "94dea590c7c0aa37d351ab62a69fc7eefbc2cdbb84b79df3934c2e9332e1dcfb", "size": 2313 }, "zh-rCN": { "name": "/icons/ic_antifeature_disabledalgorithm.xml", "sha256": "94dea590c7c0aa37d351ab62a69fc7eefbc2cdbb84b79df3934c2e9332e1dcfb", "size": 2313 } }, "name": { "de": "Mit einem unsicheren Algorithmus signiert", "en-US": "Signed Using An Unsafe Algorithm", "fa": "امضا شده با الگوریتمی ناامن", "ro": "Algoritm nesigur semnătură", "zh-rCN": "使用不安全算法签名" } }, "KnownVuln": { "description": { "de": "Diese App enthält eine bekannte Sicherheitslücke", "en-US": "This app contains a known security vulnerability", "fa": "این کاره، آسیب‌پذیری امنیتی شناخته‌شده‌ای دارد", "ro": "Aplicația conține o vulnerabilitate de securitate cunoscută", "zh-rCN": "此应用包含已知的安全漏洞" }, "icon": { "de": { "name": "/icons/ic_antifeature_knownvuln.xml", "sha256": "743ddcad0120896b03bf62bca9b3b9902878ac9366959a0b77b2c50beeb37f9d", "size": 1415 }, "en-US": { "name": "/icons/ic_antifeature_knownvuln.xml", "sha256": "743ddcad0120896b03bf62bca9b3b9902878ac9366959a0b77b2c50beeb37f9d", "size": 1415 }, "fa": { "name": "/icons/ic_antifeature_knownvuln.xml", "sha256": "743ddcad0120896b03bf62bca9b3b9902878ac9366959a0b77b2c50beeb37f9d", "size": 1415 }, "ro": { "name": "/icons/ic_antifeature_knownvuln.xml", "sha256": "743ddcad0120896b03bf62bca9b3b9902878ac9366959a0b77b2c50beeb37f9d", "size": 1415 }, "zh-rCN": { "name": "/icons/ic_antifeature_knownvuln.xml", "sha256": "743ddcad0120896b03bf62bca9b3b9902878ac9366959a0b77b2c50beeb37f9d", "size": 1415 } }, "name": { "de": "Bekannte Sicherheitslücke", "en-US": "Known Vulnerability", "fa": "آسیب‌پذیری شناخته", "ro": "Vulnerabilitate cunoscută", "zh-rCN": "含有已知漏洞" } }, "NSFW": { "description": { "de": "Diese App enthält Inhalte, die nicht überall veröffentlicht oder sichtbar sein sollten", "en-US": "This app contains content that should not be publicized or visible everywhere", "fa": "این کاره محتوایی دارد که نباید عمومی شده یا همه‌حا نمایان باشد", "ro": "Această aplicație conține conținut care nu ar trebui să fie făcut public sau vizibil peste tot", "zh-rCN": "此应用包含不应宣扬或随处可见的内容" }, "icon": { "de": { "name": "/icons/ic_antifeature_nsfw.xml", "sha256": "acab2a7a846700529cd7f2b7a7980f7d04a291f22db8434f3e966f7350ed1465", "size": 871 }, "en-US": { "name": "/icons/ic_antifeature_nsfw.xml", "sha256": "acab2a7a846700529cd7f2b7a7980f7d04a291f22db8434f3e966f7350ed1465", "size": 871 }, "fa": { "name": "/icons/ic_antifeature_nsfw.xml", "sha256": "acab2a7a846700529cd7f2b7a7980f7d04a291f22db8434f3e966f7350ed1465", "size": 871 }, "ro": { "name": "/icons/ic_antifeature_nsfw.xml", "sha256": "acab2a7a846700529cd7f2b7a7980f7d04a291f22db8434f3e966f7350ed1465", "size": 871 }, "zh-rCN": { "name": "/icons/ic_antifeature_nsfw.xml", "sha256": "acab2a7a846700529cd7f2b7a7980f7d04a291f22db8434f3e966f7350ed1465", "size": 871 } }, "name": { "de": "NSFW", "en-US": "NSFW", "fa": "NSFW", "ro": "NSFW", "zh-rCN": "NSFW" } }, "NoSourceSince": { "description": { "en-US": "The source code is no longer available, no updates possible." }, "icon": { "de": { "name": "/icons/ic_antifeature_nosourcesince.xml", "sha256": "69c880b075967fe9598c777e18d600e1c1612bf061111911421fe8f6b9d88d4f", "size": 1102 }, "en-US": { "name": "/icons/ic_antifeature_nosourcesince.xml", "sha256": "69c880b075967fe9598c777e18d600e1c1612bf061111911421fe8f6b9d88d4f", "size": 1102 }, "fa": { "name": "/icons/ic_antifeature_nosourcesince.xml", "sha256": "69c880b075967fe9598c777e18d600e1c1612bf061111911421fe8f6b9d88d4f", "size": 1102 }, "ro": { "name": "/icons/ic_antifeature_nosourcesince.xml", "sha256": "69c880b075967fe9598c777e18d600e1c1612bf061111911421fe8f6b9d88d4f", "size": 1102 }, "zh-rCN": { "name": "/icons/ic_antifeature_nosourcesince.xml", "sha256": "69c880b075967fe9598c777e18d600e1c1612bf061111911421fe8f6b9d88d4f", "size": 1102 } }, "name": { "de": "Der Quellcode ist nicht mehr erhältlich, keine Aktualisierungen möglich.", "en-US": "Newer Source Not Available", "fa": "کد مبدأ دیگر در دسترس نیست. به‌روز رسانی ناممکن است.", "ro": "Codul sursă nu mai este disponibil, nu mai există posibilitatea de a actualiza.", "zh-rCN": "源代码不再可用,无法更新。" } }, "NonFreeAdd": { "description": { "de": "Diese App bewirbt nicht-quelloffene Erweiterungen", "en-US": "This app promotes non-free add-ons", "fa": "این کاره، افزونه‌های ناآزاد را تبلیغ می‌کند", "ro": "Aplicația promovează anexe ce nu sunt software liber", "zh-rCN": "此应用推广非自由的附加组件" }, "icon": { "de": { "name": "/icons/ic_antifeature_nonfreeadd.xml", "sha256": "a1d1f2070bdaabf80ca5a55bccef98c82031ea2f31cc040be5ec009f44ddeef2", "size": 1846 }, "en-US": { "name": "/icons/ic_antifeature_nonfreeadd.xml", "sha256": "a1d1f2070bdaabf80ca5a55bccef98c82031ea2f31cc040be5ec009f44ddeef2", "size": 1846 }, "fa": { "name": "/icons/ic_antifeature_nonfreeadd.xml", "sha256": "a1d1f2070bdaabf80ca5a55bccef98c82031ea2f31cc040be5ec009f44ddeef2", "size": 1846 }, "ro": { "name": "/icons/ic_antifeature_nonfreeadd.xml", "sha256": "a1d1f2070bdaabf80ca5a55bccef98c82031ea2f31cc040be5ec009f44ddeef2", "size": 1846 }, "zh-rCN": { "name": "/icons/ic_antifeature_nonfreeadd.xml", "sha256": "a1d1f2070bdaabf80ca5a55bccef98c82031ea2f31cc040be5ec009f44ddeef2", "size": 1846 } }, "name": { "de": "Nicht-quelloffene Erweiterungen", "en-US": "Non-Free Addons", "fa": "افزونه‌های ناآزاد", "ro": "Anexe ne-libere", "zh-rCN": "非自由附加组件" } }, "NonFreeAssets": { "description": { "de": "Diese App enthält nicht-quelloffene Bestandteile", "en-US": "This app contains non-free assets", "fa": "این کاره دارای بخش‌های ناآزاد است", "ro": "Aceasta aplicație conține resurse ce nu sunt la disponibile la liber", "zh-rCN": "此应用包含非自由资源" }, "icon": { "de": { "name": "/icons/ic_antifeature_nonfreeassets.xml", "sha256": "b39fe384386fc67fb30fa2f91402594110e2e42c961d76adc93141b8bd774008", "size": 1784 }, "en-US": { "name": "/icons/ic_antifeature_nonfreeassets.xml", "sha256": "b39fe384386fc67fb30fa2f91402594110e2e42c961d76adc93141b8bd774008", "size": 1784 }, "fa": { "name": "/icons/ic_antifeature_nonfreeassets.xml", "sha256": "b39fe384386fc67fb30fa2f91402594110e2e42c961d76adc93141b8bd774008", "size": 1784 }, "ro": { "name": "/icons/ic_antifeature_nonfreeassets.xml", "sha256": "b39fe384386fc67fb30fa2f91402594110e2e42c961d76adc93141b8bd774008", "size": 1784 }, "zh-rCN": { "name": "/icons/ic_antifeature_nonfreeassets.xml", "sha256": "b39fe384386fc67fb30fa2f91402594110e2e42c961d76adc93141b8bd774008", "size": 1784 } }, "name": { "de": "Nicht-quelloffene Bestandteile", "en-US": "Non-Free Assets", "fa": "بخش‌های ناآزاد", "ro": "Resurse ne-libere", "zh-rCN": "非自由资产" } }, "NonFreeDep": { "description": { "de": "Diese App ist abhängig von anderen nicht-quelloffenen Apps", "en-US": "This app depends on other non-free apps", "fa": "این کاره به دیگر کاره‌های ناآزاد وابسته است", "ro": "Aplicația depinde de alte aplicații ce nu sunt software liber", "zh-rCN": "此应用依赖于其它非自由应用" }, "icon": { "de": { "name": "/icons/ic_antifeature_nonfreedep.xml", "sha256": "c1b4052a8f58125b2120d9ca07adb725d47bfa7cfcea80c4d6bbbc432b5cb83a", "size": 1396 }, "en-US": { "name": "/icons/ic_antifeature_nonfreedep.xml", "sha256": "c1b4052a8f58125b2120d9ca07adb725d47bfa7cfcea80c4d6bbbc432b5cb83a", "size": 1396 }, "fa": { "name": "/icons/ic_antifeature_nonfreedep.xml", "sha256": "c1b4052a8f58125b2120d9ca07adb725d47bfa7cfcea80c4d6bbbc432b5cb83a", "size": 1396 }, "ro": { "name": "/icons/ic_antifeature_nonfreedep.xml", "sha256": "c1b4052a8f58125b2120d9ca07adb725d47bfa7cfcea80c4d6bbbc432b5cb83a", "size": 1396 }, "zh-rCN": { "name": "/icons/ic_antifeature_nonfreedep.xml", "sha256": "c1b4052a8f58125b2120d9ca07adb725d47bfa7cfcea80c4d6bbbc432b5cb83a", "size": 1396 } }, "name": { "de": "Nicht-quelloffene Abhängigkeiten", "en-US": "Non-Free Dependencies", "fa": "وابستگی‌های ناآزاد", "ro": "Dependențe ne-libere", "zh-rCN": "非自由依赖项" } }, "NonFreeNet": { "description": { "de": "Diese App bewirbt nicht-quelloffene Netzwerkdienste", "en-US": "This app promotes or depends entirely on a non-changeable or non-free network service", "fa": "این کاره، خدمات شبکه‌های ناآزاد را ترویج می‌کند", "ro": "Aplicația promovează servicii de rețea ce nu sunt accesibile la liber", "zh-rCN": "此应用推广非自由的网络服务" }, "icon": { "de": { "name": "/icons/ic_antifeature_nonfreenet.xml", "sha256": "7fff45c847ed2ecc94e85ba2341685c8f113fa5fdf7267a25637dc38ee0275f6", "size": 3038 }, "en-US": { "name": "/icons/ic_antifeature_nonfreenet.xml", "sha256": "7fff45c847ed2ecc94e85ba2341685c8f113fa5fdf7267a25637dc38ee0275f6", "size": 3038 }, "fa": { "name": "/icons/ic_antifeature_nonfreenet.xml", "sha256": "7fff45c847ed2ecc94e85ba2341685c8f113fa5fdf7267a25637dc38ee0275f6", "size": 3038 }, "ro": { "name": "/icons/ic_antifeature_nonfreenet.xml", "sha256": "7fff45c847ed2ecc94e85ba2341685c8f113fa5fdf7267a25637dc38ee0275f6", "size": 3038 }, "zh-rCN": { "name": "/icons/ic_antifeature_nonfreenet.xml", "sha256": "7fff45c847ed2ecc94e85ba2341685c8f113fa5fdf7267a25637dc38ee0275f6", "size": 3038 } }, "name": { "de": "Nicht-quelloffene Netzwerkdienste", "en-US": "Non-Free Network Services", "fa": "خدمات شبکه‌ای ناآزاد", "ro": "Servicii de rețea ne-libere", "zh-rCN": "非自由网络服务" } }, "Tracking": { "description": { "de": "Diese App verfolgt und versendet Ihre Aktivitäten", "en-US": "This app tracks and reports your activity", "fa": "این کاره، فعّالیتتان را ردیابی و گزارش می‌کند", "ro": "Aplicația îți înregistrează și raportează activitatea undeva", "zh-rCN": "此应用会记录并报告你的活动" }, "icon": { "de": { "name": "/icons/ic_antifeature_tracking.xml", "sha256": "4779337b5b0a12c4b4a8a83d0d8a994a2477460db702784df4c8d3e3730be961", "size": 2493 }, "en-US": { "name": "/icons/ic_antifeature_tracking.xml", "sha256": "4779337b5b0a12c4b4a8a83d0d8a994a2477460db702784df4c8d3e3730be961", "size": 2493 }, "fa": { "name": "/icons/ic_antifeature_tracking.xml", "sha256": "4779337b5b0a12c4b4a8a83d0d8a994a2477460db702784df4c8d3e3730be961", "size": 2493 }, "ro": { "name": "/icons/ic_antifeature_tracking.xml", "sha256": "4779337b5b0a12c4b4a8a83d0d8a994a2477460db702784df4c8d3e3730be961", "size": 2493 }, "zh-rCN": { "name": "/icons/ic_antifeature_tracking.xml", "sha256": "4779337b5b0a12c4b4a8a83d0d8a994a2477460db702784df4c8d3e3730be961", "size": 2493 } }, "name": { "de": "Tracking", "en-US": "Tracking", "fa": "ردیابی", "ro": "Urmărire", "zh-rCN": "跟踪用户" } }, "UpstreamNonFree": { "description": { "de": "Der Originalcode ist nicht völlig quelloffen", "en-US": "The upstream source code is not entirely Free", "fa": "کد مبدأ بالادستی کاملاً آزاد نیست", "ro": "Codul sursa originar nu este în totalitatea lui software liber", "zh-rCN": "上游源代码不是完全自由的" }, "icon": { "de": { "name": "/icons/ic_antifeature_upstreamnonfree.xml", "sha256": "06a9af843ff56ecd7a270f98c0b19b3154edf3ffa854e6d50a84ef00d0ce1a86", "size": 1442 }, "en-US": { "name": "/icons/ic_antifeature_upstreamnonfree.xml", "sha256": "06a9af843ff56ecd7a270f98c0b19b3154edf3ffa854e6d50a84ef00d0ce1a86", "size": 1442 }, "fa": { "name": "/icons/ic_antifeature_upstreamnonfree.xml", "sha256": "06a9af843ff56ecd7a270f98c0b19b3154edf3ffa854e6d50a84ef00d0ce1a86", "size": 1442 }, "ro": { "name": "/icons/ic_antifeature_upstreamnonfree.xml", "sha256": "06a9af843ff56ecd7a270f98c0b19b3154edf3ffa854e6d50a84ef00d0ce1a86", "size": 1442 }, "zh-rCN": { "name": "/icons/ic_antifeature_upstreamnonfree.xml", "sha256": "06a9af843ff56ecd7a270f98c0b19b3154edf3ffa854e6d50a84ef00d0ce1a86", "size": 1442 } }, "name": { "de": "Originalcode nicht-quelloffen", "en-US": "Upstream Non-Free", "fa": "بالادست ناآزاد", "ro": "Surse ne-libere", "zh-rCN": "上游代码非自由" } } }, "categories": { "Time": { "name": { "en-US": "Time" } }, "Development": { "name": { "en-US": "Development" } }, "GuardianProject": { "name": { "en-US": "Guardian Project" } }, "Multimedia": { "name": { "en-US": "Multimedia" } }, "Phone & SMS": { "name": { "en-US": "Phone & SMS" } }, "Security": { "name": { "en-US": "Security" } }, "System": { "name": { "en-US": "System" } }, "1": { "name": { "en-US": "1" } }, "2.0": { "name": { "en-US": "2.0" } }, "tests": { "name": { "en-US": "tests" } } }, "requests": { "install": [ "org.adaway" ], "uninstall": [ "com.android.vending", "com.facebook.orca" ] } }, "packages": { "com.politedroid": { "metadata": { "added": 1498176000000, "categories": [ "Multimedia", "Security", "Time" ], "issueTracker": "https://github.com/miguelvps/PoliteDroid/issues", "lastUpdated": 1498176000000, "license": "GPL-3.0-only", "sourceCode": "https://github.com/miguelvps/PoliteDroid", "name": { "en-US": "Polite Droid" }, "summary": { "en-US": "Calendar tool" }, "description": { "en-US": "Activates silent mode during calendar events." }, "icon": { "en-US": { "name": "/icons/com.politedroid.6.png", "sha256": "edf8d30b97a06821337e267168b131a6a16d81df9e7007e017778f9781f5c8f3", "size": 559 } }, "preferredSigner": "32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6" }, "versions": { "70c2f776a2bac38a58a7d521f96ee0414c6f0fb1de973c3ca8b10862a009247d": { "added": 1498176000000, "file": { "name": "/com.politedroid_6.apk", "sha256": "70c2f776a2bac38a58a7d521f96ee0414c6f0fb1de973c3ca8b10862a009247d", "size": 16578, "ipfsCIDv1": "bafybeidvgxrq77qr7yqkcnykdfvszsxjqc5kzt6ya5k7r666wriadrylt4" }, "manifest": { "versionName": "1.5", "versionCode": 6, "usesSdk": { "minSdkVersion": 14, "targetSdkVersion": 21 }, "signer": { "sha256": [ "32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6" ] }, "usesPermission": [ { "name": "android.permission.READ_CALENDAR" }, { "name": "android.permission.RECEIVE_BOOT_COMPLETED" } ] }, "antiFeatures": { "KnownVuln": {}, "NoSourceSince": { "en-US": "1.5" }, "NonFreeAssets": {}, "NonFreeNet": {}, "UpstreamNonFree": {} } }, "5bdbfa071cca4b8d05ced41d6b28763595d6e8096cca5bbf0f9253c9a2622e5d": { "added": 1498176000000, "file": { "name": "/com.politedroid_5.apk", "sha256": "5bdbfa071cca4b8d05ced41d6b28763595d6e8096cca5bbf0f9253c9a2622e5d", "size": 18817, "ipfsCIDv1": "bafybeifbrio5rumqvgfd5sihs7yihux2yktfvd5i7jimlgrwchzcvi6ldu" }, "manifest": { "versionName": "1.4", "versionCode": 5, "usesSdk": { "minSdkVersion": 3, "targetSdkVersion": 10 }, "signer": { "sha256": [ "32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6" ] }, "usesPermission": [ { "name": "android.permission.READ_CALENDAR" }, { "name": "android.permission.RECEIVE_BOOT_COMPLETED" } ] }, "antiFeatures": { "NoSourceSince": { "en-US": "1.5" }, "NonFreeNet": {} } }, "c809bdff83715fbf919f3840ee09869b038e209378b906e135ee40d3f0e1f075": { "added": 1498176000000, "file": { "name": "/com.politedroid_4.apk", "sha256": "c809bdff83715fbf919f3840ee09869b038e209378b906e135ee40d3f0e1f075", "size": 18489, "ipfsCIDv1": "bafybeicridbev22c2rt3lwbfsrkafcf3yepak7kpvk6zgbayrxls2mmwim" }, "manifest": { "versionName": "1.3", "versionCode": 4, "usesSdk": { "minSdkVersion": 3, "targetSdkVersion": 3 }, "signer": { "sha256": [ "32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6" ] }, "usesPermission": [ { "name": "android.permission.READ_CALENDAR" }, { "name": "android.permission.RECEIVE_BOOT_COMPLETED" }, { "name": "android.permission.WRITE_EXTERNAL_STORAGE" }, { "name": "android.permission.READ_PHONE_STATE" }, { "name": "android.permission.READ_EXTERNAL_STORAGE" } ] }, "antiFeatures": { "NoSourceSince": { "en-US": "1.5" }, "NonFreeNet": {} } }, "665d03d61ebc642289fda697f71a59305b0202b16cafc5ffdae91cbe91f0b25d": { "added": 1498176000000, "file": { "name": "/com.politedroid_3.apk", "sha256": "665d03d61ebc642289fda697f71a59305b0202b16cafc5ffdae91cbe91f0b25d", "size": 17552, "ipfsCIDv1": "bafybeib7arokhivttalcnq5ieu5fx5pzn7vo5qpmdiozqodzhb4ba53nd4" }, "manifest": { "versionName": "1.2", "versionCode": 3, "usesSdk": { "minSdkVersion": 3, "targetSdkVersion": 3 }, "signer": { "sha256": [ "32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6" ] }, "usesPermission": [ { "name": "android.permission.READ_CALENDAR" }, { "name": "android.permission.RECEIVE_BOOT_COMPLETED" }, { "name": "android.permission.WRITE_EXTERNAL_STORAGE" }, { "name": "android.permission.READ_PHONE_STATE" }, { "name": "android.permission.READ_EXTERNAL_STORAGE" } ] }, "antiFeatures": { "KnownVuln": {}, "NoSourceSince": { "en-US": "1.5" }, "NonFreeAssets": {}, "NonFreeNet": {}, "UpstreamNonFree": {} } } } }, "duplicate.permisssions": { "metadata": { "added": 1513900800000, "categories": [ "tests" ], "lastUpdated": 1513900800000, "name": { "en-US": "Duplicate Permisssions" }, "summary": { "en-US": "Test app for all possible " }, "icon": { "en-US": { "name": "/icons/duplicate.permisssions.9999999.png", "sha256": "fb0f3bb45312b53e349a762b67af4f48d010a38a245f75c3a0b152097d7b067f", "size": 1301 } }, "preferredSigner": "659e1fd284549f70d13fb02c620100e27eeea3420558cce62b0f5d4cf2b77d84" }, "versions": { "8367857fe75f85321ce2c344b34804d0bc193707f6ba03710d025d9030803434": { "added": 1513900800000, "file": { "name": "/duplicate.permisssions_9999999.apk", "sha256": "8367857fe75f85321ce2c344b34804d0bc193707f6ba03710d025d9030803434", "size": 27446, "ipfsCIDv1": "bafybeicucr4lk7fynyde4fpxubudpl6m6wqnuq2j6vjroutjyryw24en3u" }, "manifest": { "versionName": "", "versionCode": 9999999, "usesSdk": { "minSdkVersion": 18, "targetSdkVersion": 27 }, "signer": { "sha256": [ "659e1fd284549f70d13fb02c620100e27eeea3420558cce62b0f5d4cf2b77d84" ] }, "usesPermission": [ { "name": "android.permission.INTERNET" }, { "name": "android.permission.ACCESS_NETWORK_STATE" }, { "name": "android.permission.ACCESS_WIFI_STATE" }, { "name": "android.permission.CHANGE_WIFI_MULTICAST_STATE" }, { "name": "android.permission.INTERNET" }, { "name": "android.permission.WRITE_EXTERNAL_STORAGE", "maxSdkVersion": 18 }, { "name": "android.permission.READ_EXTERNAL_STORAGE", "maxSdkVersion": 18 } ], "usesPermissionSdk23": [ { "name": "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS", "maxSdkVersion": 27 }, { "name": "android.permission.REQUEST_INSTALL_PACKAGES" } ] } } } }, "fake.ota.update": { "metadata": { "added": 1457568000000, "categories": [ "System" ], "issueTracker": "https://gitlab.com/fdroid/privileged-extension/issues", "lastUpdated": 1457568000000, "license": "Apache-2.0", "sourceCode": "https://gitlab.com/fdroid/privileged-extension", "webSite": "https://f-droid.org", "name": { "en-US": "fake.ota.update_1234" }, "summary": { "en-US": "Tests whether OTA ZIP files are being include" }, "description": { "en-US": "F-Droid can make use of system privileges or permissions to\ninstall, update and remove applications on its own. The only way to obtain those\nprivileges is to become a system app.\n\nThis is where the Privileged Extension comes in - being a separate app and much\nsmaller, it can be installed as a system app and communicate with the main app\nvia AIDL IPC.\n\nThis has several advantages:\n\n* Reduced disk usage in the system partition\n* System updates don't remove F-Droid\n* The process of installing into system via root is safer\n\nThis is packaged as an OTA (Over-The-Air) update ZIP file. It must be installed\nusing TWRP or other Android recovery that can flash updates to the system from\nthe /data/data/org.fdroid.fdroid folder on the /data partition. The standalone\nAPK is called F-Droid Privileged Extension." }, "donate": [ "https://f-droid.org/about" ] }, "versions": { "897a92a4ccff4f415f6ba275b2af16d4ecaee60a983b215bddcb9f8964e7a24c": { "added": 1457568000000, "file": { "name": "/fake.ota.update_1234.zip", "sha256": "897a92a4ccff4f415f6ba275b2af16d4ecaee60a983b215bddcb9f8964e7a24c", "size": 233 }, "manifest": { "versionName": "897a92a", "versionCode": 1234 } } } }, "info.guardianproject.urzip": { "metadata": { "added": 1466640000000, "categories": [ "Development", "GuardianProject", "1", "2.0" ], "issueTracker": "https://dev.guardianproject.info/projects/urzip/issues", "lastUpdated": 1466640000000, "license": "GPL-3.0-only", "sourceCode": "https://github.com/guardianproject/urzip", "webSite": "https://dev.guardianproject.info/projects/urzip", "featureGraphic": { "en-US": { "name": "/info.guardianproject.urzip/en-US/featureGraphic_GFRT5BovZsENGpJq1HqPODGWBRPWQsx25B95Ol5w_wU=.png", "sha256": "185453e41a2f66c10d1a926ad47a8f3831960513d642cc76e41f793a5e70ff05", "size": 36027 } }, "authorWebSite": "https://guardianproject.info", "bitcoin": "1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk", "openCollective": "f-droid-just-testing", "name": { "en-US": "title" }, "summary": { "en-US": "一个实用工具,获取已安装在您的设备上的应用的有关信息" }, "description": { "en-US": "It’s Urzip 是一个获得已安装 APK 相关信息的实用工具。它从您的设备上已安装的所有应用开始,一键触摸即可显示 APK 的指纹,并且提供到达 virustotal.com 和 androidobservatory.org 的快捷链接,让您方便地了解特定 APK 的档案。它还可以让您导出签名证书和生成 ApkSignaturePin Pin 文件供 TrustedIntents 库使用。\n\n★ Urzip 支持下列语言: Deutsch, English, español, suomi, 日本語, 한국어, Norsk, português (Portugal), Русский, Slovenščina, Türkçe\n没看到您的语言?帮忙翻译本应用吧:\nhttps://www.transifex.com/projects/p/urzip\n\n★ 致用户:我们还缺少你喜欢的功能?发现了一个 bug?请告诉我们!我们乐于听取您的意见。请发送电子邮件至: support@guardianproject.info 或者加入我们的聊天室 https://guardianproject.info/contact\n" }, "video": { "en-US": "video" }, "icon": { "en-US": { "name": "/info.guardianproject.urzip/en-US/icon_NJXNzMcyf-v9i5a1ElJi0j9X1LvllibCa48xXYPlOqQ=.png", "sha256": "3495cdccc7327febfd8b96b5125262d23f57d4bbe59626c26b8f315d83e53aa4", "size": 1413 } }, "preferredSigner": "32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6" }, "versions": { "15c0ec72c74a3791f42cdb43c57df0fb11a4dbb656851bbb8cf05b26a8372789": { "added": 1466640000000, "file": { "name": "/urzip-; Рахма́, [rɐxˈmanʲɪnəf] سيرجي_رخمانينوف 谢·.apk", "sha256": "15c0ec72c74a3791f42cdb43c57df0fb11a4dbb656851bbb8cf05b26a8372789", "size": 11471, "ipfsCIDv1": "bafybeig77jwqx243si3gh55iqx4gkcxhltkt6pjimzgigfsk3kshsi6qem" }, "manifest": { "versionName": "0.1", "versionCode": 100, "usesSdk": { "minSdkVersion": 4, "targetSdkVersion": 18 }, "signer": { "sha256": [ "32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6" ] } } } } }, "info.zwanenburg.caffeinetile": { "metadata": { "added": 1539129600000, "categories": [ "Development" ], "lastUpdated": 1539129600000, "name": { "en-US": "Caffeine Tile" }, "summary": { "en-US": "Test app for extracting icons when an XML one is default" }, "preferredSigner": "51cfa5c8a743833ad89acf81cb755936876a5c8b8eca54d1ffdcec0cdca25d0e" }, "versions": { "dbbdd7deadb038862f426b71efe4a64df8c3edf25d669e935f349510e16f65db": { "added": 1539129600000, "file": { "name": "/info.zwanenburg.caffeinetile_4.apk", "sha256": "dbbdd7deadb038862f426b71efe4a64df8c3edf25d669e935f349510e16f65db", "size": 11740, "ipfsCIDv1": "bafybeigormhkorw3mk6pkkfk63kkmxpvwylthgj67geulvskc5acr65sym" }, "manifest": { "versionName": "1.3", "versionCode": 4, "usesSdk": { "minSdkVersion": 24, "targetSdkVersion": 25 }, "signer": { "sha256": [ "51cfa5c8a743833ad89acf81cb755936876a5c8b8eca54d1ffdcec0cdca25d0e" ] }, "usesPermission": [ { "name": "android.permission.WAKE_LOCK" } ] } } } }, "no.min.target.sdk": { "metadata": { "added": 1539129600000, "categories": [ "Development" ], "lastUpdated": 1539129600000, "name": { "en-US": "No minSdkVersion or targetSdkVersion" }, "summary": { "en-US": "An APK without any block in AndroidManifest.xml" }, "icon": { "en-US": { "name": "/icons/no.min.target.sdk.987.png", "sha256": "fb0f3bb45312b53e349a762b67af4f48d010a38a245f75c3a0b152097d7b067f", "size": 1301 } }, "preferredSigner": "32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6" }, "versions": { "e2e1dc1d550df2b5bc383860139207258645b5540abeccd305ed8b2cb6459d2c": { "added": 1539129600000, "file": { "name": "/no.min.target.sdk_987.apk", "sha256": "e2e1dc1d550df2b5bc383860139207258645b5540abeccd305ed8b2cb6459d2c", "size": 14102, "ipfsCIDv1": "bafybeidwxseoagnew3gtlasttqovl7ciuwxaud5a5p4a5pzpbrfcfj2gaa" }, "manifest": { "versionName": "1.2-fake", "versionCode": 987, "usesSdk": { "minSdkVersion": 3, "targetSdkVersion": 3 }, "signer": { "sha256": [ "32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6" ] }, "usesPermission": [ { "name": "android.permission.WRITE_EXTERNAL_STORAGE" }, { "name": "android.permission.READ_PHONE_STATE" }, { "name": "android.permission.READ_EXTERNAL_STORAGE" } ] } } } }, "obb.main.oldversion": { "metadata": { "added": 1388448000000, "categories": [ "Development" ], "lastUpdated": 1388448000000, "license": "GPL-3.0-only", "sourceCode": "https://github.com/eighthave/urzip", "bitcoin": "1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk", "liberapay": "12334", "name": { "en-US": "OBB Main Old Version" }, "icon": { "en-US": { "name": "/icons/obb.main.oldversion.1444412523.png", "sha256": "fb0f3bb45312b53e349a762b67af4f48d010a38a245f75c3a0b152097d7b067f", "size": 1301 } }, "preferredSigner": "818e469465f96b704e27be2fee4c63ab9f83ddf30e7a34c7371a4728d83b0bc1" }, "versions": { "c5f149e526f89c05c62923bdb7bb1e2be5673c46ec85143f41e514340631449c": { "added": 1388448000000, "file": { "name": "/obb.main.oldversion_1444412523.apk", "sha256": "c5f149e526f89c05c62923bdb7bb1e2be5673c46ec85143f41e514340631449c", "size": 14323, "ipfsCIDv1": "bafybeicnwnpiyfke3tbk3nve62meig65vved34i6kesjkksdciff6242ui" }, "obbMainFile": { "name": "/main.1434483388.obb.main.oldversion.obb", "sha256": "d3eb539a556352f3f47881d71fb0e5777b2f3e9a4251d283c18c67ce996774b7", "size": 6 }, "manifest": { "versionName": "0.1", "versionCode": 1444412523, "usesSdk": { "minSdkVersion": 4, "targetSdkVersion": 18 }, "signer": { "sha256": [ "818e469465f96b704e27be2fee4c63ab9f83ddf30e7a34c7371a4728d83b0bc1" ] }, "usesPermission": [ { "name": "android.permission.INTERNET" }, { "name": "android.permission.ACCESS_NETWORK_STATE", "maxSdkVersion": 22 }, { "name": "android.permission.ACCESS_WIFI_STATE" }, { "name": "android.permission.CHANGE_WIFI_MULTICAST_STATE" }, { "name": "android.permission.CHANGE_NETWORK_STATE" }, { "name": "android.permission.CHANGE_WIFI_STATE" }, { "name": "android.permission.BLUETOOTH" }, { "name": "android.permission.BLUETOOTH_ADMIN", "maxSdkVersion": 18 }, { "name": "android.permission.RECEIVE_BOOT_COMPLETED" }, { "name": "android.permission.NFC" } ], "usesPermissionSdk23": [ { "name": "android.permission.WRITE_EXTERNAL_STORAGE" }, { "name": "android.permission.WRITE_SETTINGS", "maxSdkVersion": 25 } ] }, "releaseChannels": [ "Beta" ] } } }, "obb.main.twoversions": { "metadata": { "added": 1444608000000, "categories": [ "Development" ], "lastUpdated": 1466380800000, "license": "GPL-3.0-only", "sourceCode": "https://github.com/eighthave/urzip", "bitcoin": "1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk", "name": { "en-US": "OBB Main Two Versions" }, "icon": { "en-US": { "name": "/icons/obb.main.twoversions.1101617.png", "sha256": "d27c9866adeda6dd466628e43c62ccac95a0e9480c4bb095ac7e0b1c2b58a77d", "size": 1413 } }, "preferredSigner": "32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6" }, "versions": { "9bc74566f089ef030ac33e7fbd99d92f1a38f363fb499fed138d9e7b774e821c": { "added": 1466380800000, "file": { "name": "/obb.main.twoversions_1101617.apk", "sha256": "9bc74566f089ef030ac33e7fbd99d92f1a38f363fb499fed138d9e7b774e821c", "size": 11481, "ipfsCIDv1": "bafybeiblpfmwololxgsrum337rbbbsqg2gk6hytvt6szf4njubosju3bme" }, "src": { "name": "/obb.main.twoversions_1101617_src.tar.gz", "sha256": "3115241ed53aa047191f64db2c14e609a7dc0a803211f56a9b17e2d027763f9d", "size": 150 }, "obbMainFile": { "name": "/main.1101615.obb.main.twoversions.obb", "sha256": "d3eb539a556352f3f47881d71fb0e5777b2f3e9a4251d283c18c67ce996774b7", "size": 6 }, "manifest": { "versionName": "0.1", "versionCode": 1101617, "usesSdk": { "minSdkVersion": 4, "targetSdkVersion": 18 }, "signer": { "sha256": [ "32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6" ] } } }, "7b0b7b9ba248e15751a16e3a0e01e1e24cbb673686c38422030cb75d5c33f0bb": { "added": 1451606400000, "file": { "name": "/obb.main.twoversions_1101615.apk", "sha256": "7b0b7b9ba248e15751a16e3a0e01e1e24cbb673686c38422030cb75d5c33f0bb", "size": 11480, "ipfsCIDv1": "bafybeigglr3iefb3es4lp2sgfacppk3w2qqtuykjgf4actebpalyizef3q" }, "obbMainFile": { "name": "/main.1101615.obb.main.twoversions.obb", "sha256": "d3eb539a556352f3f47881d71fb0e5777b2f3e9a4251d283c18c67ce996774b7", "size": 6 }, "manifest": { "versionName": "0.1", "versionCode": 1101615, "usesSdk": { "minSdkVersion": 4, "targetSdkVersion": 18 }, "signer": { "sha256": [ "32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6" ] } } }, "cce97a52ff18d843185be7f22ecb1a557c36b7a9f8ba07a8be94e328e00b35dc": { "added": 1444608000000, "file": { "name": "/obb.main.twoversions_1101613.apk", "sha256": "cce97a52ff18d843185be7f22ecb1a557c36b7a9f8ba07a8be94e328e00b35dc", "size": 11477, "ipfsCIDv1": "bafybeicocjo4khzp2rkui2ltvrhbksrm373lr3pb43ut7hqgbllfjpv6ti" }, "obbMainFile": { "name": "/main.1101613.obb.main.twoversions.obb", "sha256": "d3eb539a556352f3f47881d71fb0e5777b2f3e9a4251d283c18c67ce996774b7", "size": 6 }, "manifest": { "versionName": "0.1", "versionCode": 1101613, "usesSdk": { "minSdkVersion": 4, "targetSdkVersion": 18 }, "signer": { "sha256": [ "32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6" ] } } } } }, "obb.mainpatch.current": { "metadata": { "added": 1461369600000, "categories": [ "Development" ], "lastUpdated": 1496275200000, "license": "GPL-3.0-only", "sourceCode": "https://github.com/eighthave/urzip", "featureGraphic": { "en-US": { "name": "/obb.mainpatch.current/en-US/featureGraphic_ffhLaojxbGAfu9ROe1MJgK5ux8d0OVc6b65nmvOBaTk=.png", "sha256": "7df84b6a88f16c601fbbd44e7b530980ae6ec7c77439573a6fae679af3816939", "size": 24336 } }, "screenshots": { "phone": { "en-US": [ { "name": "/obb.mainpatch.current/en-US/phoneScreenshots/screenshot-main.png", "sha256": "719f95f0811e6e6e03e6dbd47553eafe9d8d96b14107e26f2dee3ccdabbdc6bf", "size": 44990 } ] }, "sevenInch": { "en-US": [ { "name": "/obb.mainpatch.current/en-US/sevenInchScreenshots/screenshot-tablet-main.png", "sha256": "460c6ce2e5e3987ae6688f398c9093a07802991e7cdee559a578f201189c6630", "size": 56049 } ] } }, "bitcoin": "1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk", "name": { "en-US": "OBB Main/Patch Current" }, "icon": { "en-US": { "name": "/obb.mainpatch.current/en-US/icon_WI0pkO3LsklrsTAnRr-OQSxkkoMY41lYe2-fAvXLiLg=.png", "sha256": "588d2990edcbb2496bb1302746bf8e412c64928318e359587b6f9f02f5cb88b8", "size": 260113 } }, "preferredSigner": "32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6" }, "versions": { "eda5fc3ecfdac3252717e36bdbc9820865baeef162264af9ba5db7364f0e7a0c": { "added": 1461369600000, "file": { "name": "/obb.mainpatch.current_1619.apk", "sha256": "eda5fc3ecfdac3252717e36bdbc9820865baeef162264af9ba5db7364f0e7a0c", "size": 11479, "ipfsCIDv1": "bafybeievo4e234mllujityvtjgeltauyfbriszoqddzygmimcm4mo3zyqu" }, "obbMainFile": { "name": "/main.1619.obb.mainpatch.current.obb", "sha256": "d3eb539a556352f3f47881d71fb0e5777b2f3e9a4251d283c18c67ce996774b7", "size": 6 }, "obbPatchFile": { "name": "/patch.1619.obb.mainpatch.current.obb", "sha256": "d3eb539a556352f3f47881d71fb0e5777b2f3e9a4251d283c18c67ce996774b7", "size": 6 }, "manifest": { "versionName": "0.1", "versionCode": 1619, "usesSdk": { "minSdkVersion": 4, "targetSdkVersion": 18 }, "signer": { "sha256": [ "32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6" ] } } }, "42e7d6d2f8254aaf9fe95ba6ecc233ee8c3cd543a3e4f3f9ebe1b638221122fa": { "added": 1496275200000, "file": { "name": "/obb.mainpatch.current_1619_another-release-key.apk", "sha256": "42e7d6d2f8254aaf9fe95ba6ecc233ee8c3cd543a3e4f3f9ebe1b638221122fa", "size": 10541, "ipfsCIDv1": "bafybeiatdbzlxairqzvdowevwuy7nk24rknc55jpip2wb2sq4c3f7mtngm" }, "obbMainFile": { "name": "/main.1619.obb.mainpatch.current.obb", "sha256": "d3eb539a556352f3f47881d71fb0e5777b2f3e9a4251d283c18c67ce996774b7", "size": 6 }, "obbPatchFile": { "name": "/patch.1619.obb.mainpatch.current.obb", "sha256": "d3eb539a556352f3f47881d71fb0e5777b2f3e9a4251d283c18c67ce996774b7", "size": 6 }, "manifest": { "versionName": "0.1", "versionCode": 1619, "usesSdk": { "minSdkVersion": 4, "targetSdkVersion": 18 }, "signer": { "sha256": [ "ce9e200667f02d96d49891a2e08a3c178870e91853d61bdd33ef5f0b54701aa5" ] } } } } }, "org.maxsdkversion": { "metadata": { "added": 1739805810000, "lastUpdated": 1739805810000, "name": { "en-US": "maxSdkVersion" }, "summary": { "en-US": "Test setting maxSdkVersion in an APK" }, "icon": { "en-US": { "name": "/icons/org.maxsdkversion.4.png", "sha256": "428442a0b75be04af3191a066041341f8a0b289972f99868687f43e02055a348", "size": 91 } }, "preferredSigner": "401a3a5843a3d5cebc22e6de5cb76d08eaa6797122d7fe1283df1d192e132f5e" }, "versions": { "877d582369d2840fc0d6892e44feaaad21419b0e35af42f22b3e127bcd08274d": { "added": 1739805810000, "file": { "name": "/org.maxsdkversion_4.apk", "sha256": "877d582369d2840fc0d6892e44feaaad21419b0e35af42f22b3e127bcd08274d", "size": 12768, "ipfsCIDv1": "bafybeibdls2h4mpfw5gks3iirsne2qaez6uefwb5xmqkhahqbakvdszk6y" }, "manifest": { "versionName": "1.0.3", "maxSdkVersion": 25, "versionCode": 4, "features": [ { "name": "android.hardware.camera.front" } ], "usesSdk": { "minSdkVersion": 14, "targetSdkVersion": 19 }, "signer": { "sha256": [ "401a3a5843a3d5cebc22e6de5cb76d08eaa6797122d7fe1283df1d192e132f5e" ] }, "usesPermission": [ { "name": "android.permission.CAMERA" } ] } } } }, "souch.smsbypass": { "metadata": { "added": 1524700800000, "categories": [ "Phone & SMS" ], "issueTracker": "https://gitlab.com/souch/SMSbypass/issues", "lastUpdated": 1524700800000, "license": "GPL-3.0-only", "sourceCode": "https://gitlab.com/souch/SMSbypass/tree/HEAD", "webSite": "https://gitlab.com/souch/SMSbypass", "name": { "en-US": "Battery level" }, "summary": { "en-US": "Filter SMS and show them in a fake app" }, "description": { "en-US": "In order to keep away curious eyes, SMS-bypass filters incoming SMS messages\nbefore they reach your inbox. Based on bughunter2.smsfilter.\n\nFeatures:\n\n* Discrete fake app \"Battery level\": Long tap on Battery percentage will show SMS.\n* Filter incoming SMS specified address: redirect the SMS to SMS-bypass messages list; remove SMS arrival sound or vibration; show a discreet notification icon (battery level); vibrate if checked in settings\n* Add contact from contact list\n* Export messages to a text file" }, "donate": [ "http://rodolphe.souchaud.free.fr/donate" ], "icon": { "en-US": { "name": "/icons/souch.smsbypass.9.png", "sha256": "8fee034537477fcd40fd33887868786b70258fcf7b9acffaff7436bca8748c8a", "size": 1558 } }, "preferredSigner": "d3aec784b1fd71549fc22c999789122e3639895db6bd585da5835fbe3db6985c" }, "versions": { "80b0ae68a1189baa3ee6717092e3dbf1a4210165f7f7e5f2f9616bd63a2ec01d": { "added": 1524700800000, "file": { "name": "/souch.smsbypass_9.apk", "sha256": "80b0ae68a1189baa3ee6717092e3dbf1a4210165f7f7e5f2f9616bd63a2ec01d", "size": 81295, "ipfsCIDv1": "bafybeihaccfnt32q2iwfulh2m7jvdivuunlw6t72wa7jfi7igxvqxjqszy" }, "manifest": { "versionName": "0.9", "versionCode": 9, "usesSdk": { "minSdkVersion": 8, "targetSdkVersion": 18 }, "signer": { "sha256": [ "d3aec784b1fd71549fc22c999789122e3639895db6bd585da5835fbe3db6985c" ] }, "usesPermission": [ { "name": "android.permission.RECEIVE_SMS" }, { "name": "android.permission.SEND_SMS" }, { "name": "android.permission.READ_CONTACTS" }, { "name": "android.permission.WRITE_EXTERNAL_STORAGE" }, { "name": "android.permission.VIBRATE" }, { "name": "android.permission.READ_EXTERNAL_STORAGE" } ] } } } } } }././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898792.0 fdroidserver-2.4.0/tests/repo/index.xml0000644000175000017500000005171014770503150016665 0ustar00hanshans This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid. http://foobarfoobarfoobar.onion/fdroid/repo https://foo.bar/fdroid/repo souch.smsbypass 2018-04-26 2018-04-26 Battery level Filter SMS and show them in a fake app souch.smsbypass.9.png In order to keep away curious eyes, SMS-bypass filters incoming SMS messages before they reach your inbox. Based on bughunter2.smsfilter. Features: * Discrete fake app "Battery level": Long tap on Battery percentage will show SMS. * Filter incoming SMS specified address: redirect the SMS to SMS-bypass messages list; remove SMS arrival sound or vibration; show a discreet notification icon (battery level); vibrate if checked in settings * Add contact from contact list * Export messages to a text file GPL-3.0-only Phone & SMS Phone & SMS https://gitlab.com/souch/SMSbypass https://gitlab.com/souch/SMSbypass/tree/HEAD https://gitlab.com/souch/SMSbypass/issues http://rodolphe.souchaud.free.fr/donate 0.9 9 0.9 9 souch.smsbypass_9.apk 80b0ae68a1189baa3ee6717092e3dbf1a4210165f7f7e5f2f9616bd63a2ec01d 81295 8 18 2018-04-26 e50c99753cd45e2736d52cb49be07581 READ_CONTACTS,READ_EXTERNAL_STORAGE,RECEIVE_SMS,SEND_SMS,VIBRATE,WRITE_EXTERNAL_STORAGE info.zwanenburg.caffeinetile 2018-10-10 2018-10-10 Caffeine Tile Test app for extracting icons when an XML one is default No description available Unknown Development Development 4 1.3 4 info.zwanenburg.caffeinetile_4.apk dbbdd7deadb038862f426b71efe4a64df8c3edf25d669e935f349510e16f65db 11740 24 25 2018-10-10 03f9b2f848d22fd1d8d1331e8b1b486d WAKE_LOCK duplicate.permisssions 2017-12-22 2017-12-22 Duplicate Permisssions Test app for all possible <uses-permissions> duplicate.permisssions.9999999.png No description available Unknown tests tests 9999999 9999999 duplicate.permisssions_9999999.apk 8367857fe75f85321ce2c344b34804d0bc193707f6ba03710d025d9030803434 27446 18 27 2017-12-22 056c9f1554c40ba59a2103009c82b420 ACCESS_NETWORK_STATE,ACCESS_WIFI_STATE,CHANGE_WIFI_MULTICAST_STATE,INTERNET,READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE fake.ota.update 2016-03-10 2016-03-10 fake.ota.update_1234 Tests whether OTA ZIP files are being include F-Droid can make use of system privileges or permissions to install, update and remove applications on its own. The only way to obtain those privileges is to become a system app. This is where the Privileged Extension comes in - being a separate app and much smaller, it can be installed as a system app and communicate with the main app via AIDL IPC. This has several advantages: * Reduced disk usage in the system partition * System updates don't remove F-Droid * The process of installing into system via root is safer This is packaged as an OTA (Over-The-Air) update ZIP file. It must be installed using TWRP or other Android recovery that can flash updates to the system from the /data/data/org.fdroid.fdroid folder on the /data partition. The standalone APK is called F-Droid Privileged Extension. Apache-2.0 System System https://f-droid.org https://gitlab.com/fdroid/privileged-extension https://gitlab.com/fdroid/privileged-extension/issues https://f-droid.org/about 0.2.1 2000 897a92a 1234 fake.ota.update_1234.zip 897a92a4ccff4f415f6ba275b2af16d4ecaee60a983b215bddcb9f8964e7a24c 233 2016-03-10 org.maxsdkversion 2025-02-17 2025-02-17 maxSdkVersion Test setting maxSdkVersion in an APK org.maxsdkversion.4.png No description available Unknown 4 1.0.3 4 org.maxsdkversion_4.apk 877d582369d2840fc0d6892e44feaaad21419b0e35af42f22b3e127bcd08274d 12768 14 19 25 2025-02-17 1a5e67bcef6b2d6242f2d36982b54589 CAMERA android.hardware.camera.front no.min.target.sdk 2018-10-10 2018-10-10 No minSdkVersion or targetSdkVersion An APK without any <uses-sdk> block in AndroidManifest.xml no.min.target.sdk.987.png No description available Unknown Development Development 987 1.2-fake 987 no.min.target.sdk_987.apk e2e1dc1d550df2b5bc383860139207258645b5540abeccd305ed8b2cb6459d2c 14102 3 2018-10-10 b4964fd759edaa54e65bb476d0276880 READ_EXTERNAL_STORAGE,READ_PHONE_STATE,WRITE_EXTERNAL_STORAGE obb.main.oldversion 2013-12-31 2013-12-31 OBB Main Old Version obb.main.oldversion.1444412523.png No description available GPL-3.0-only Development Development https://github.com/eighthave/urzip 1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk 99999999 0.1 1444412523 obb.main.oldversion_1444412523.apk c5f149e526f89c05c62923bdb7bb1e2be5673c46ec85143f41e514340631449c 14323 4 18 main.1434483388.obb.main.oldversion.obb d3eb539a556352f3f47881d71fb0e5777b2f3e9a4251d283c18c67ce996774b7 2013-12-31 eb41d4d6082bb3e81c3d58dbf7fc7332 ACCESS_NETWORK_STATE,ACCESS_WIFI_STATE,BLUETOOTH,BLUETOOTH_ADMIN,CHANGE_NETWORK_STATE,CHANGE_WIFI_MULTICAST_STATE,CHANGE_WIFI_STATE,INTERNET,NFC,RECEIVE_BOOT_COMPLETED obb.main.twoversions 2015-10-12 2016-06-20 OBB Main Two Versions obb.main.twoversions.1101617.png No description available GPL-3.0-only Development Development https://github.com/eighthave/urzip 1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk 99999999 0.1 1101617 obb.main.twoversions_1101617.apk obb.main.twoversions_1101617_src.tar.gz 9bc74566f089ef030ac33e7fbd99d92f1a38f363fb499fed138d9e7b774e821c 11481 4 18 main.1101615.obb.main.twoversions.obb d3eb539a556352f3f47881d71fb0e5777b2f3e9a4251d283c18c67ce996774b7 2016-06-20 b4964fd759edaa54e65bb476d0276880 0.1 1101615 obb.main.twoversions_1101615.apk 7b0b7b9ba248e15751a16e3a0e01e1e24cbb673686c38422030cb75d5c33f0bb 11480 4 18 main.1101615.obb.main.twoversions.obb d3eb539a556352f3f47881d71fb0e5777b2f3e9a4251d283c18c67ce996774b7 2016-01-01 b4964fd759edaa54e65bb476d0276880 0.1 1101613 obb.main.twoversions_1101613.apk cce97a52ff18d843185be7f22ecb1a557c36b7a9f8ba07a8be94e328e00b35dc 11477 4 18 main.1101613.obb.main.twoversions.obb d3eb539a556352f3f47881d71fb0e5777b2f3e9a4251d283c18c67ce996774b7 2015-10-12 b4964fd759edaa54e65bb476d0276880 obb.mainpatch.current 2016-04-23 2017-06-01 OBB Main/Patch Current obb.mainpatch.current.1619.png No description available GPL-3.0-only Development Development https://github.com/eighthave/urzip 1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk 99999999 0.1 1619 obb.mainpatch.current_1619.apk eda5fc3ecfdac3252717e36bdbc9820865baeef162264af9ba5db7364f0e7a0c 11479 4 18 main.1619.obb.mainpatch.current.obb d3eb539a556352f3f47881d71fb0e5777b2f3e9a4251d283c18c67ce996774b7 patch.1619.obb.mainpatch.current.obb d3eb539a556352f3f47881d71fb0e5777b2f3e9a4251d283c18c67ce996774b7 2016-04-23 b4964fd759edaa54e65bb476d0276880 com.politedroid 2017-06-23 2017-06-23 Polite Droid Calendar tool com.politedroid.6.png Activates silent mode during calendar events. GPL-3.0-only Multimedia,Security,Time Multimedia https://github.com/miguelvps/PoliteDroid https://github.com/miguelvps/PoliteDroid/issues 1.5 6 KnownVuln,NoSourceSince,NonFreeAssets,NonFreeNet,UpstreamNonFree 1.5 6 com.politedroid_6.apk 70c2f776a2bac38a58a7d521f96ee0414c6f0fb1de973c3ca8b10862a009247d 16578 14 21 2017-06-23 b4964fd759edaa54e65bb476d0276880 READ_CALENDAR,RECEIVE_BOOT_COMPLETED 1.4 5 com.politedroid_5.apk 5bdbfa071cca4b8d05ced41d6b28763595d6e8096cca5bbf0f9253c9a2622e5d 18817 3 10 2017-06-23 b4964fd759edaa54e65bb476d0276880 READ_CALENDAR,RECEIVE_BOOT_COMPLETED 1.3 4 com.politedroid_4.apk c809bdff83715fbf919f3840ee09869b038e209378b906e135ee40d3f0e1f075 18489 3 2017-06-23 b4964fd759edaa54e65bb476d0276880 READ_CALENDAR,READ_EXTERNAL_STORAGE,READ_PHONE_STATE,RECEIVE_BOOT_COMPLETED,WRITE_EXTERNAL_STORAGE 1.2 3 com.politedroid_3.apk 665d03d61ebc642289fda697f71a59305b0202b16cafc5ffdae91cbe91f0b25d 17552 3 2017-06-23 b4964fd759edaa54e65bb476d0276880 READ_CALENDAR,READ_EXTERNAL_STORAGE,READ_PHONE_STATE,RECEIVE_BOOT_COMPLETED,WRITE_EXTERNAL_STORAGE info.guardianproject.urzip 2016-06-23 2016-06-23 title 一个实用工具,获取已安装在您的设备上的应用的有关信息 info.guardianproject.urzip.100.png It’s Urzip 是一个获得已安装 APK 相关信息的实用工具。它从您的设备上已安装的所有应用开始,一键触摸即可显示 APK 的指纹,并且提供到达 virustotal.com 和 androidobservatory.org 的快捷链接,让您方便地了解特定 APK 的档案。它还可以让您导出签名证书和生成 ApkSignaturePin Pin 文件供 TrustedIntents 库使用。 ★ Urzip 支持下列语言: Deutsch, English, español, suomi, 日本語, 한국어, Norsk, português (Portugal), Русский, Slovenščina, Türkçe 没看到您的语言?帮忙翻译本应用吧: https://www.transifex.com/projects/p/urzip ★ 致用户:我们还缺少你喜欢的功能?发现了一个 bug?请告诉我们!我们乐于听取您的意见。请发送电子邮件至: support@guardianproject.info 或者加入我们的聊天室 https://guardianproject.info/contact GPL-3.0-only Development,GuardianProject,1,2.0 Development https://dev.guardianproject.info/projects/urzip https://github.com/guardianproject/urzip https://dev.guardianproject.info/projects/urzip/issues 1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk f-droid-just-testing 2147483647 0.1 100 urzip-; Рахма́, [rɐxˈmanʲɪnəf] سيرجي_رخمانينوف 谢·.apk 15c0ec72c74a3791f42cdb43c57df0fb11a4dbb656851bbb8cf05b26a8372789 11471 4 18 2016-06-23 b4964fd759edaa54e65bb476d0276880 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/info.zwanenburg.caffeinetile_4.apk0000644000175000017500000002673414717152071023520 0ustar00hanshansPK|6JJ>uMETA-INF/MANIFEST.MFMo0;{G.F`HCڤ!mz onmBȿ/mWUJ{d̛b(܀TL1] j46ALu-qH1T`ktM?VWWvC]gW˸a@umQd?:/*j(aR'g lV<R@ ؀Dw,WaT&ףݢB7Ħ*-HFάleDB\xd}G,@YX⌸AN1' =|Sا*BVtgxǰ^$C,ҟ_Oݽ['Y; ݮ0jNs7PKJ>uPK|6J\w META-INF/F981D5B7.SFˎ@}'˙Em/,AZ1Z }O?NO&l9䈗;k |"H^0$p$,9fma㩋:dJg48;7:, ߖ S į7?7 ǕcPg-tfsBܹ' ex"(y c&K!m%2M5b%uvf5+@~ =DXyDΝQbD& |@R7Ci/8{%DuXRےKiqٴkl0g+3^Ű$i0TH|G187>p4nRQgRsP S6NmB /ލ_1n򫴨maX|]tm(;еT^6*?UɰCW7OPK\w PK|6J'[&4.META-INF/F981D5B7.RSA3hbbjhδUڠUѐۀUIqAsAsAf&F&&{|p5@- `CY؄B y @af w6񸄹R3S \@0f8q8!K41*!{(drKTmL*3[3g^^k{1}a;zfPYU^{2gO_fq"Ï_#5LW:G'r$7MV{IOEg盽k^t6uƧ[W|￯RYQou;D%2Ne{j[?MA%ik4 DtDS"'Bs';frt/E'ٹsO9?cO>ߣ4؉r9:&~`BE ڧeh&F 9uU}7?)(L1~Xm.{]m-aʹ9͒r*>qlj ~or>}?{L{2"_(<6YsD-)??j|TȡfuonZ_6rGIٛ-xqvJ_\ɀڻ RbZgѬme/յpDSk'k:a_ٙt-ɶz'8(sȊuRڻzPK'[&4.PK}5JBW1))META-INF/buildserveridA i 8 ?w(pjr%ҏZ$9>PKBW1))PK}5JBW1))META-INF/fdroidserveridA i 8 ?w(pjr%ҏZ$9>PKBW1))PK!ƈ{v  AndroidManifest.xmlUTvUnA}-&1K I ;qa %bK@lƞ]@B9pȁc3pU&n'RbFUU84>rv}u]1xA,I4{@/HĀbEL>@ zA-L@1H!$hIQA Y#Ӹr J"1ZFO2$xkl wiZTݑEwcVTԦ2TX__WӪ;+V*YHGSy1kM|L2]I]j}^Ѯ3˴s_he_ڱd$kSsc}Oi?O~JraSvF֥>wMz+.;kI=~v ( !Xp5T7.8 cʌ+ie_F<0Ij*M} u] 8cK`?9f9'au&t>JV* 1|gTށZ4訯P9h+OJ+rco~X50r~q Byʌ~)TS|=8ű;y9(qxs11΁cH7Fl76y&fIel4(1ڵzVVmลe;qm5tt#0.p?n CUsb$_u9ڵ9|wD1LYY٥;1Kָ2f{@&GǶbFĄŔ{̮$>k1@ѱtWЃ.f*=xN;3s"ΙjhiN%{!kw U%o[.cqܞÉ7?/ PKƈ{v PK!W0! classes.dexUTvZkl\u>s7yIM]R(qWm))ɢdqEdܽ$ڽ]RRnjJB`*B.FR4F N[Huwffw/sfΙ3g93sbSεءtf'o?{2r7"ѵHYD_#nD>#j Z=$PGt&ډ%k@Q Y`$E`yp+߀0q`(~DNo?h&: | @M>`(o?0\ 3@NIׁWׁ_|3-m{ ؏}(0fX@ =O!`p< p^@ x =o>>jS@W?n?>~ dAH%!eO5!\%LAPAeI(W@F=(8յ|x 8DGOQ1u$0%SG4 FPn3|soWmW:ZUaj&i:&)uڴx~c&Gڕ.'e<>5ߢzA&?{ge+*~Zyi=5g4ox]U;yx{isyiO?ۏk~;>?F3PB˒6м] ~zIO釱KK02p,tDQX`*StT>'i^ h{U~cZdv{FÿgewJv5 q-Ge HSd{i}3|9Iyyy T%m#G_մuMH?4FoH?">3?C.%GX09۪^Zu4K?Ă/g\V$m9"fZT5Y{dNաjʟad$T뺽J|uA^/J9 &nZ'/:hlSp;H|^u W${4Y{wp$];<$ V|H˅GGZֲGD#Znz oT{X=B>#!1-ߣwly=ǠI-籿P>ђ:Aw{7*5 0 s79r,،09!4Zceݰ隿O|C$ ysUi Jbvnj,x>"}bܪ5V!ק[mµ%!aazY]s7gu?> ys{F I;0_e !_N*诼f_j1gرNF_(|k|LõDkƸbiQy\?el⠟ >67(O a_ώ-0vMT`~Y`5 YoCbFB+}o鰧ksg盦Mcaq?wSB]i >ƺFYb+nzb?;S]¬ϝ^֣wNjj-1W^[ylDWUuQ}G;dvL>SP9rOWQ5!b: ')qYX#|,A'Rj;l:Ƴ/h i)PIn3[ 5FϺ͹lr='+us%UZƶCƽvOrY)8ұTK_e, lG}AJh!)Ͱ/l4hٚ5ǜTs|׋#Կ` h;ŧrmϬ\'*5egt^R; {{T61D))WI̯kͲrcd>>Lk>wrVA>xrrnAs%O T6Ӡ?ygx߈UӖZlgT~GݢzG}TX߉ݮM;[~wK[<M5Q{ { n -3_]e#?hTG\{=d9kr{jZ5xzQiW&=_o4TX?VYcgQGDb$Rd&K(xTQ5MKKNuR:P۩t^޲j=n䟎OOo:''#>>Ll)n]T!NE|>z2YJK')Y-Mgl^v Q(nц;ATfz:LPҝ̹% Nrv*iK^g۔r|wJ y6Ѵ$4)3Lg]G/v.%I9nZe'.bħLNQ(8E[+H\+d1*WQ,Nt:hɴ7w ".y{/:]'K^bEk+#JMtu-RtJ%b4浌}JAUװ2/;egWJ6g>zMfrE"!:3Ni%ۮ4b*h#3NvQ+pw2^vZݥ\ Wmŵr|Hy=eSv$UNcW-Y}Y3\aTXe#5|F5nG3Q6OWpl-ޜONyyi6dɗix&c/NbSr:9rEXiyza|v^: E29aN:$l6]dKti2H@#);y͗SY]3EKT씴tR'}wP='scdeJێfjp˝(?[A`+4553]RO%LfNȖ[^dG]d5O TSpL>c#z58ޣ]EN@Pn9"{YyCMkön5ރYs_]Fד]c77}ݑol׌dlW\6{Hl6AGCot0iߴ;[w@MP#76C%_vnX-nXo6[=A!n }>!Fo¿/|`MozVՏ}ƭݰs}>pL@3({,!>`O4ܴЌ|7so; /5 Y%q+~h776fi񼫔i7^]?ϗ[ o };Y}tawݰԼugmMPKW0!PK!D| res/drawable/ic_coffee_off.xmlUTvT=s1\珀ͤHjr|5P0d!xbf<TԔ >|;IVVҍhK P8ĢCL%3"#btFBQ.hLz&hLn@_h$6\ ޘ̚ד#QTΤ?L*!(eo >J bcɥ|u EXW"L4vὬZ'Z<,1}H/֣չD֙'Hh'l"+3U?U,k~! VWy3Оw*mx~koV4qT)wCeoϴXyۥ>S{.\D;^\'>sFMB)U1^m0qs'|r5k7Fiڼ4A*,u6k9|Ock֜Q5t[rcwVFݴuPݲF85BF5Fשjx38yPKD|PK!t}"h  res/drawable/ic_coffee_on.xmlUTvUnA=ky9"E$\#z6"Q:@HPpD)o7P ~3wf̜sΎ=ETЯ0(Ȟ5vhi/hϴo_ߴ{?>VF8[c,W32s5ׯ9ɖgyj.}x}/>8;1sK9fNcY8[=NRBqw#4&SrR9}GUOrȈQ_z̨"`m3-ɧO$.ʧ6E}1 L@t*^IG:J1}DVPTL6Y^6^ǃ\o1zK FUܾhuMETA-INF/MANIFEST.MFPK|6J\w META-INF/F981D5B7.SFPK|6J'[&4.META-INF/F981D5B7.RSAPK}5JBW1))6META-INF/buildserveridPK}5JBW1))META-INF/fdroidserveridPK!ƈ{v   AndroidManifest.xmlUTvPK!W0! 5 classes.dexUTvPK!D| [res/drawable/ic_coffee_off.xmlUTvPK!t}"h  <res/drawable/ic_coffee_on.xmlUTvPK!)< "res/xml/prefs.xmlUTvPK !0$ $resources.arscUTvPK *././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/repo/main.1101613.obb.main.twoversions.obb0000644000175000017500000000000614717152070023336 0ustar00hanshansdummy ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/main.1101615.obb.main.twoversions.obb0000644000175000017500000000000614717152071023341 0ustar00hanshansdummy ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/main.1434483388.obb.main.oldversion.obb0000644000175000017500000000000614717152071023402 0ustar00hanshansdummy ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/main.1619.obb.mainpatch.current.obb0000644000175000017500000000000614717152071023223 0ustar00hanshansdummy ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/no.min.target.sdk_987.apk0000644000175000017500000003342614717152071021412 0ustar00hanshansPKOAndroidManifest.xmlKoSGR 1y58qw-E%BRA U*&1`1,X#>+VuE]tWC@RsœIFl=wΜ3g^0^"hZw0tZnA& z ~2Qj@@ow{#4"*C 5; -Cϡ?x}6چ~CB_ERyz u6UA[TMڠs]eU行ThMqBkwDƧ_/ψSgիOכ5y:b\y9@ e4kWo5YkLVEj'cmXfD.wstj\C- .e}j\ Q+hAJv\}UP$u﮲Oaܑ%HY]v\nn"n#{ =Χ YyT>#GwǬ`[O3s8$L`ҟM2/F4DO}S(DAa( 'e]=['aէ}F[Z5a߆sq?O~+#|3(<'ySʣ_kyDZy`Q'|l -ԲUjÏ]:(N=|i3[>_w4VmXɌ x^Bq=n!X19mDr쳬߁7*Qo 8Kj oȡcxf\p5g4! u3ϷMjs$ V`&7%Lis&-giM;޴5ބ7~}y Snu(f CA2B(i8DW-fA<d0 %{-]ێ3o(Um͛J>md1Šݠq^IVS!ϖvww*&lv+d oNz1d %h!zwu(c̉믏O42m5 2 _Zmze2cEX5|fcY[ВkX+tLYi /?V]`o_}XWyѦIƀ%f߻] *%eJy){Gポ-gGvu\`P(E;se!1MqΗʛcwq!m=mggb8\W#uJ3?oCꗾ0>bA!:vak$Բލ4r5LXahKX*14bOv}!EnUlIל-pQ X;ܧߵWfErkRw3ΐ&ꬴ?֪"S-={e5FYb0a#[*lvr+t~.xpsa\|'o ?1XҤcځxVK}h+wQJ;Nut6&uF6'w֤--HxO6#=ŵf\'Q|Ǣ_w:R2afLp&fϜTJ"ͫtHn8q4>WSZn񤭜%,wvXϙn'<6;AŝG"_}#$sVHq2!I0 ƪ[D!eN,a$88oO_M@$_T˛g~~E^LtF|·=4Ng]V֑V 5XeW?Q6,P7g(8 ਑qq\T|ʑ(ma4 {(Y~ߜmO%y۝R)b)?aVPnmH7j^%}eZ1Ŕ< iE5K:@' ݟ rIA!B&uXA"ܳLk@HC.0x"|';PKVlQrCL7 !X""vta3KRP@^͗ДVws$l&_3O?4Mo_EK붧:|9l>xN=nGQzh _S1n/˽ QߌqeNWRb:^?1!nZz\ /Ms ]λ|K} B򎁥/!>&8*ۗmpf^z_2&OPKGMETA-INF/CERT.SFmn@= ] "j- iU7f3:3|cj;9NCǔ^RZ$bG5"Sibl骍ą`*A= t9͡([ӕ>C@HU7]yۯ$K.8"So~ZyLLe~㍪9*W.4[mvfBPj{DLc&\2~6Gf "^'b1 uar`)L?LW B}9Kq8K{ Z@v)0ܦ #pXD'@-Wn3]AO G-oPKo-META-INF/MANIFEST.MFmn@{ށDU^(-ZƬ0eWwO_kH3W3{R_сf-UH}X4(p$!w8ԡ g8<Z۸J2NFUy::hm.h׶WN^nju}p&A5˥b ,m0t3VPd'Oj3 E 6P:ctjҪEr>O4E q#{j"$xy] qxL8*ю-A9M`%,gV-ơ.}s PK0N classes.dex{p}{H"%A-[2eodXcH3;PN8Nq8ǕU=I'N3yi7mMRON=cOkih3w2!sCX~'=嵮߼WG>}lk-7he(ɿ@tD! |@#jx*srDDo '-^p8f"}x<  4 zςoK]рz)o@# a_/`]#V0 > h 2`"8>O/? E*P#j n`10N{'I xx | ~ ~& `7 6pi1)|h3 n0 f"XE]CSwkpq;h`p,CIZA vr@f6lktu`\n;& p >C`8IpiԃzS>0U72xdKp q\==$=&d^OH}Bmy1wHXdU_>!ǾxGӣOx z'[!C/@eUIY-V ~鋇?))? +uΓ)t+w+WyrLx܈R] SfJ`")o>$vᜲ"hi.V]E/J>¬b+W?ES]}s7 O9ReVuծ6^+H_%Jdϊ#I0*>1v1Ah?3؊lA| BzGF[8|,ce5|#-;BVd(e7v-v р'o>ՋŞ-iYeh0؊܌pПT'B}|C"x5' wkTwx ,ڶy۾%2-;/ 'cZ65`:p-&\_"Tf5Z/rV>aÏ'wֵ|œ'}=0] hG{,ka?m令29*S!UhVQxuOr'E\'װai߃+2[Y6i=Oex*Y*V1=&DWb,>}X1م@5;=e{}lhX*tƞLV-i8aXl+=b: >jJ12vҌL` Ɇ$9h[zeDO.8 dݒ19;=_ҝ[yǾǘ-K)3ޯn]IYf>o8;({%;OMviƘ"j~MZ>zz3|"bExUZ2ݭp'b|`8ng5y|1#V9ye2Ɲ̧5EPڳQRЋEԼ .vD9]*$9k&飠wP7T'n%M9UWՕ=MŦ(85r ߚƇGVCw !e ;թPf9MʑAj8rX}v(:vRl[G Foe_.cH͖瞪0G-} ?4R@wfe||H)͑ActeɗՋ:G~7HaB=f 곋MʳI̠v4 q$+l&+fX ?k?M(\hy8ʚ66Z]xCx6a~ڈE:(&^o;HXBdj\>zvr8M5g5L^ MZ׏Z6kQLig']4yYZۻJKnZ l[vϒiu)d)3Ŝ;YؕlK\RYȵCuh]('(UpuG_BP1Q(-`(uk8XukFҥyxVc@ՅҌe2襪J+BeT'=+"AcFJe<7K,oZrLbˤ-B̜v1@F! (ŎBxo`["*{%U<ك,ڻO3Lݧ2_7n-[xST*]<²)fn"SdE6,6q#x-~VSOgYóXSqhFcʃ3zFo]cݪ/Q< Ӫ|b.g4ES5f_S~M6l0=- 6=.vrklm a\:G`PR|*rpͧe1QIlCLZnbMjW Df亻W+ړn>_MMM,6bc}5F|H9͟iO,O33K VC:FjT[|>v.Ӿzr)e3{%Ʉ⻘SU SQگl\2.$NRe?IOZ3.o菵p=<b ׉Cs C{E~Ӹ,x~ UiP&AEۨj,.A;:or忥2ޗrZʭ嗼j7pPK=~ res/drawable/ic_launcher.png5PNG  IHDRשPLTE)!.H`D=768;er~D?:E8*  2GZ'  ڮ,%!)68.# JKKA@?#  2' 3DT ...  .; !&1 ///*6CC5'  ]1121F;2)667omk ~c omj  H;.  MNO544 ,,-111 &'&&111*!''&223&(&&%000!"&%$ !!# [|u\# RST776#G9,  -:"%*   1@IDA=DJCCCUUV{xu~754,,-{yw}{yZ[\srq[]^zwujiha``79:542\`cKMO988]_a϶^_a׶?>>hkn@ABvut788#"!$tRNSL  SZV6("Vj.ڨTr5T"\r9EhqnnJpDACAD?J?J?QG4V,vRN.=wIDAT(c`@F&f $ّ98/\XXDt8!!9SJZF.!'?k"pEbɥ@Ĥ+WQ$%%38$q-3+dyNn^~MĭBs6LViԃ`P^"qY.P:T =nlb@`hnyYkD{GgWwCo_k$ SBӦ30"pU(IENDB`PKS Lres/layout/activity_main.xmluN@=[$BHA"5%$ 'Ql*x$ G;es;wofw} ƘMCt- G«& 99w%fmF)B[nTχUПg!F$~"u.m*~RUx:R}o{EO١R3~`)6d?Tޟ#]{ȣ>64u6Z?p̑?gqդ~,ᛙPKresources.arsc5 $0<xres/drawable/ic_launcher.pngres/layout/activity_main.xmlSettings$No minSdkVersion or targetSdkVersion Hello world! no.min.target.sdk l, 0attrdrawablelayoutstring08Zn ic_launcher activity_mainaction_settingsapp_name hello_worldL`P8L`P8LX8 _ ?  q7 3 LH@4/=.Ic`ّwLnxn{5mǪGzҊ d4yq<{ڊ`900}).Ҟ0  *H  0{1 0 UUS1 0 UNY10UBrooklyn10U Guardian Project10U Unknown10UHans-Christoph Steiner0 140623163212Z 411108163212Z0{1 0 UUS1 0 UNY10UBrooklyn10U Guardian Project10U Unknown10UHans-Christoph Steiner0"0  *H 0 Nۢ>yvA-zmO2=6ߚL:Xx: l9 2t.yi~7Mɍ 'Ţb$62^_pK23[@Y~%t7 oI9:e6@JxAle}PPo%$оQ.q1PDP^HZ G]]*!"~ b'8LkE2l@eSRh1QHj3& sa& aMJ_o}& B3ʦ㞦4x dھR+aS70Ɠ jwK܁YBj\/㥆a/XA5U͎L.<ja.DW&zI(1bM`{>;1H]yJ$p:aYeș糨,K B$ ^XAhY WVN}%!kS;mRF!00U?{쥡"SNd{+0  *H  T # My9L~P1 0r+ˣVτ@UR̜}1ӂC>;>\jUCR+bЬ)-j )+oT)CcQt:өwH}7iLj` K8_WG*@fw1-xfQC3IIN?_ڳH3I'P5f>DMI܇u؉LlФ5E[B׽ (:bQ0>l5\q%Hh@܊Xcgw@~h,иGFsnsDM_xD_@qM W (xs^v̜uQ?yLO݊2Ur`>URCh`ȡ㬴| ]r?LT;RT|kƕf}Wdu0`V݂4@4>"i}kg WD7# ]xە>طif(޼oL] ,( Ƨ*q X8{d-<5XF'3ɭOq^2ٕd7hbe_˧TM'SzZY'&:O&gLRzDŊx@OsE5Tb.(j@]2vStځKo&0"0  *H 0 Nۢ>yvA-zmO2=6ߚL:Xx: l9 2t.yi~7Mɍ 'Ţb$62^_pK23[@Y~%t7 oI9:e6@JxAle}PPo%$оQ.q1PDP^HZ G]]*!"~ b'8LkE2l@eSRh1QHj3& sa& aMJ_o}& B3ʦ㞦4x dھR+aS70Ɠ jwK܁YBj\/㥆a/XA5U͎L.<ja.DW&zI(1bM`{>;1H]yJ$p:aYeș糨,K B$ ^XAhY WVN}%!kS;mRF_ APK Sig Block 42PKO AndroidManifest.xmlPK,puMETA-INF/CERT.RSAPKGf META-INF/CERT.SFPKo- META-INF/MANIFEST.MFPK0N :classes.dexPK=~ res/drawable/ic_launcher.pngPKS L $res/layout/activity_main.xmlPK M%resources.arscPK 4././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/obb.main.oldversion_1444412523.apk0000644000175000017500000003376314717152071022551 0ustar00hanshansPK!AndroidManifest.xmlKLW0CBEAy 0T /i 0‶iREӅ鲫.jLirU˦kϜ+;t.ԙ;ι~a*!j Q=XA6m}FC[ǵ * } } ;2?tB3who@s%T! =J ޅEDOb)cK[TFEhz ? z U"t ZBϡ_2 z 5adh2*DLS .#2h~[+*J:x:GZZ ,UstG2$qwF(hA).,Ӫ- g15s!ښE`ަ8TbiΑ;Ms [UԵ\mL|Iǜ1>%ḇ_|K-%=Lb"5 %xV1i5/exdT"1f@ Ct樀+Aehmݐe܃*frz7xt̽]^ew&sxW1D<|h]e U6lbKj*"f%UJUP{]9]&1s4qltƱFwAiwp>8ZvEơ(5B 42])&"|o翉Xe0+>^f ?3kÓs 3YL[@t+3`mwn';:, Ѝk=왱5sQ': ,bGgg/~i@8APu Uּk^^C8Gs7j~ChS)fW-1!Gfb${UvyeHS*: T*fr.戨xm@Lmu+aRQlb>O=9rz8"9Q#GGѐ'GeU9%Gcr 1s+~Tr$1s}<&5I̮N.|УfѬxjJkV>aُզ? {@볼*~"N*Vom}k),Ã7(As} oH\uziV3]wQ\ Kgy'byNa +볼S,oЃ^B\ yF7xN{F7xxƄ7xzƅ7xy&7x{. >˻ޤ>}*>=*W'T!'nPKr PK! classes.dex{pT}޽z] t%$ i,[  ɑFpW+eB$`ǎ v=L2qұ76ӘN<̔LqNqɴEN~}~Ǧ劾;^oұ߼}}7^~mo%I{A'Zd%("K t~0' Yx   ? hp= V0  =%`Q`\/>*F <NY&/h'8>2`|<.u:x9KCSjjz}`78x 9p^[} D&X z &#8 ΃%p||sp Dj@$8 ΂ I%x ? Bh]`788cH` HFœ v:tM`3A#Im;}``| c`?wxTx-&A}T{Ы4tL i*]+ߞqi|^^+VLڹ~]YcJ?r.u옚Oҗc+EJW?Я~#P=?CJǔߊuڬhC =K|d)yx,m&]"H!1 % YGOu5X*ʊ0rR#[ J~MOR /7-tEuU1zQFM YA'*MJZZQ YEL +yI?$ #B jZeŮ&bEcv#d0gȗo9_M煬?1,-!kD\SNJz"?G|'3B'DPS JnTy$R}{s);w:PwX%Lߙ?89i^CU3|*xywѹG ƏnlW=g "z)!-"G¢ek39'$u*z;P"mLrQ)Ԓ8o-ˡ;G=99?&8qw Ej)yJIO} T^TUs%(μӏNӤbDTسN.ױ*>sTZ;sQ{SjRP(bgg%B|I)̑O6}`%PTrrhFDҤ_ Nް={z>Bs(::92regGe7Q5_]\hy'w ƕU}mX~W#T.!jLYx1a,ع~M;prIgl7T*i.`f 7CaW^>F\ͦsTNS~2b!oGWX[x43&ÝWjpKpW:G~ikS۸CEJR T\~:8\J>RY{]Am) g\!X^y.o{*2(x8^BqP'Y1McΌZHa ">P 2)u-d Xn!.٬ RE\9zRPEz%J˷)ߩukV2%7ҹ56+[+z|庉%v.iU.@EE+gWYKacÆΆL(3c ]j|%. MdVKVMDCBO%'FyL5T5TG>O=أ^BA:NDFRe=X]{ک/cr+,6#uslأ~ƞa=-u:֍zҵVTa04Ƹ7ln/il>z"m'&\؆kHWK \5cbݮwf+.bN~k#vezfm4Y4BQ)gg}Uxryv(kj(H3̳śbY')x+($EcQ-cUMԤXF]_'Ϙ8E?b2*hZ=ƼmHG_HmeQ#D g}^g "l^ͩe2 ;㙛௠EFɹeA6%FwѲ3VnQmG-:"+u`f>(iߛ<HTa 5nĐ~h8Eo3V>J{^7,c؃^CBiZּ%+͔5GV2{h:*)G#TV!E#|.1~.iI;cR9f65]#Si}e ++YUAq껮ѫܔ٤4\G򻎦˭,zֈV/AƼ_D{k4Mךti~z A?cFn8'bk;5ܸ[B4CFY#?%AxXS;يX+V׼{!s7CF;2)667omk ~c omj  H;.  MNO544 ,,-111 &'&&111*!''&223&(&&%000!"&%$ !!# [|u\# RST776#G9,  -:"%*   1@IDA=DJCCCUUV{xu~754,,-{yw}{yZ[\srq[]^zwujiha``79:542\`cKMO988]_a϶^_a׶?>>hkn@ABvut788#"!$tRNSL  SZV6("Vj.ڨTr5T"\r9EhqnnJpDACAD?J?J?QG4V,vRN.=wIDAT(c`@F&f $ّ98/\XXDt8!!9SJZF.!'?k"pEbɥ@Ĥ+WQ$%%38$q-3+dyNn^~MĭBs6LViԃ`P^"qY.P:T =nlb@`hnyYkD{GgWwCo_k$ SBӦ30"pU(IENDB`PK!res/layout/activity_main.xmluN@gmCR"EJIRSYBBх(6<£@KtV 4޽j+O$S_&n7>8 w:TZ^&zԕ.h;6W:WBO>nwǻ4Yy)uߒYjQh#+rK]ٮQ]oq$tv^0jm2Gf&jj~*ywM$,x󎳈sC~]jV%e/i!_[ ?PK-jLPK !resources.arsc 0<xres/drawable/ic_launcher.pngres/layout/activity_main.xmlOBB Main Old VersionSettings Hello world! obb.main.oldversion l, 0attrdrawablelayoutstring08Ln ic_launcher activity_mainapp_nameaction_settings hello_world@L`P8@L`P8@@@LX8 PK!TQMETA-INF/SOVA.SFmQOP{65Z) Y$zO9z= үZr}۷yd#Q2P#`ZS DujKij-VDA?g]R8 %BPNR^C̥߭]?ɺ.ڻ,/IG5K1eIQSF4YJ ٸcul_^cq0E8]#C|:mcx1g tW9Ni|s:ݶm'pl8 EuQ aADԫ 7ձ]1ie4`;Ey#b_a;{"x* D)>wPK!g*qMETA-INF/SOVA.RSAWPI@HhbhҤ)RI/#""ń*"J'*E6JX@ E"R&_srC!<*))qE!x yyUA@In.4oFD ]A "r! 0Lb2 A) Qp؍H Zb0x 554}T'"\G:pM5'/MXWeDdm<7tUPW#(mELbVq3sJ]]p@Ca'ŵ#LwQy +$h*BdvfW]Xŏꕙ~ +xkRHʺ8BOۿSB6Wf R끕`@"77}bXwSRQB&/CS7N+nFO0Vd \XVDKO?ˡeЈ `1bfeYmb4_ρ:R;YFn7w \8odx6kB#c3qͫs6a.^ek4}u[)r`3-vp J کtӚ4FاBnyۆ ]e*u%S}r?u.~HFޘr(ylQRڪP<3. 8`As摝8?p~u#$0cM;EDt⌗]7t4y:=DBNy.! Ù*&ŚƀY:Ҫup>MP9KZ?5jRvfκf.Q{8VxVcV:)׊ "܌W">c6h;UӚ7F*^3KB\*W ŒYCp݀Jw!2<ϒj]uC4k\X!2$U秹f$Sh{JEi U5#NnBmb6*}tLkoli<Ϋ8C^> ?9l/D W-A83^7<%{ U=y+{woJ^ lEp h]Q_}r(=.Ϭpσ K=(k/$Cפ^ sxke;L`v2>, $wa Zfe$vfB"Dc'$pGEct~@$( 5Ki!0kҊ'Q3w}vt??ۉk2 Aʿ[ц- ~6ğ<'$5X@@5-PI$f^)0m#oBpr#{ tj FP"YhNS]eTsÎuTaUs܈-bƯ0HgYM|  q  ALH@si 'tщ6iVbhY?~\eSMNs9l"П 00ɠH4P0  *H  0!10U F-Droid1 0 Usova0 160823133116Z 440109133116Z0!10U F-Droid1 0 Usova0"0  *H 0  "IN>ҕ HCn\]EB_y?֣C0$6؏S:xvEݰ l*EqMdZ3>as5jxM3'd\aD\?Ѡ 9/ }3%tnӐ{nEdX &8$TX-:Ff;-J!XM.A(V[B k!㌙֐JK`VAjR!j(Guߋr_s~D%0(9C7&n 3V2;T[ɫG*~+hsLO$;ʣXn)4 Y 3Hi: 5#@*g*:$Gt]a#k`/EixSO:xQm_Vsv^eA$1p<ۣq^lfbO=^=.mJƓ!,|ַMO!00U+7PF.MO0  *H  t?|VXӐB_>Д%fp){NiCFW;7\OsPZ~‘6.d6)6CyƠp[cJ^n_8C-=yVUipϺ)r:8Vة黻5t[)oWK4u xXL[ 2"r$Zwqi-DT%%cTi"yZ,xYY'c@r,+ѩѕN LWVd;JehD-Ӭj+Wbr(#773̬QwƼs}֌~]c߂F V-@'e ݰK蔀wI#&A`* x4D+'^^MkQ@cS.h.oC5G-űB F:yjY3V|'tQ>}ZMsoQ#e$FtkGzmk)+{ =qȜSnۑ_NkW)ԿJG= e:dQqY_>Y O PU,ҕ HCn\]EB_y?֣C0$6؏S:xvEݰ l*EqMdZ3>as5jxM3'd\aD\?Ѡ 9/ }3%tnӐ{nEdX &8$TX-:Ff;-J!XM.A(V[B k!㌙֐JK`VAjR!j(Guߋr_s~D%0(9C7&n 3V2;T[ɫG*~+hsLO$;ʣXn)4 Y 3Hi: 5#@*g*:$Gt]a#k`/EixSO:xQm_Vsv^eA$1p<ۣq^lfbO=^=.mJƓ!,|ַMO APK Sig Block 42PK!r AndroidManifest.xmlPK!{ _classes.dexPK !=~Rres/drawable/ic_launcher.pngPK!-jLres/layout/activity_main.xmlPK !resources.arscPK!TQ"META-INF/SOVA.SFPK!g*q#META-INF/SOVA.RSAPK!/k *META-INF/MANIFEST.MFPK 5././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/obb.main.twoversions_1101613.apk0000644000175000017500000002632514717152071022522 0ustar00hanshansPKHUnAndroidManifest.xmlo[EnbF1n_nb?^l) TҨIKH(u&!!9gs!qп!77^%yv3('r(IDj]ysww18ڃ?P&DTA]{t>;= 7(rCh ڄ~~*=z{P5jO{t۰Y*=Q3k1k"Q ŧۧg-R3l9xTijf *ߠ/Ƕ!=akm²Ʀʇ=؀o #Q^Qk4{wUOWEc \Rեڪ,*lN`6ڙ1mjّ guak7LE̖p:XULtZqR3z]{!ߟBM)QZeա:S۰quGs}:?Z +;=ygϏSNn7z>@dͻ+Ova..x7}ZQO峎U66bSgݸ 6Б5+ M7|4f *;=dB#nԹ-cGn#v-KʧYyS[̙3E9ӌ aFN:$L0IL2hzr' ]"q04 '6'/k\Գ aVWA~y41es?(<(ybabqqH$[Iq}Yؗq>f&78>d6MJ.ښ#F7F-D޴5^K}Jx)ggq\_p͈7b֘4X}ʲ7i%oп%C7^Fx7ke:; oNq>o ϶s^ /k$yYx94^+兗x +\ o>-b޼5^+Wx% W^I-o«-oAU,Eۯŷk9{PKUnPK H=-res/drawable/ic_launcher.pngPNG  IHDRw=LIDATHǥyPuƟ{².˲ 8ႈ 628yr OCM5V^ʡbY"0,,{DPXϟ>ߋ4zљp a22x@-q &6'xnب4Ռs-<!a^zD\W6=YMQ2ɗw|՟-f̶vJA؜s1Ym®n>/]ҹr8୔@(r1.}j:Oi> DowJ'CRRVJ eMPy|{|7sRNQy(KNnቹM{p՝Ғ6Q:h++-LxȄsՆIT~M≹\{V{TTX@vL (Ćyq]zAnBFZmHocs  Çd6ihh CCfQ!j2OPSեlUY G?15t"GUˢy*(M6\$""DJiujdo5GcF^G"@ Vx\|T$SgOt ::erOK\]Ϟb¶hӫnZ>5^7 S~6B3Щb#RجJ[ =64%1N ('5+٥bvTD%W< `y*VnJK6͵[h8l3PA$M;QZ1[,U3|.nlIuG2 3 eb2V'0`ę&Uڂg ,.!蒎Q1 F|UJvuӆaL06 cLzN׎zXYٹLGBr8#0LmMOS7onDVv͞} DLژ.C{e 󳵴&cY,ZKSiZ=I`҇6%]Nm},ŅU5SN܈mݷ<65}E޷'0CקԄf.̙3;EnK=_d*/r.Ѵ#>)?/Ԟ H\o7aU%(|${hjǜIL~ cS/LҘPPX"1sgsLuP!!"@&849^1|'3}ȕs_-]$IVM1,,D-aEDA̤rIENDB`PKHS Lres/layout/activity_main.xmluN@=[$BHA"5%$ 'Ql*x$ G;es;wofw} ƘMCt- G«& 99w%fmF)B[nTχUПg!F$~"u.m*~RUx:R}o{EO١R3~`)6d?Tޟ#]{ȣ>64u6Z?p̑?gqդ~,ᛙPKS LPK Hchresources.arsc 0<xres/drawable/ic_launcher.pngres/layout/activity_main.xmlOBB Main Two VersionsSettings Hello world! obb.main.twoversions l, 0attrdrawablelayoutstring08Ln ic_launcher activity_mainapp_nameaction_settings hello_worldH\L4H\L4HT4 PKH<>Z$ classes.dex l[u}(Rz"-K$ee[(qDcK]t%['Yz6HʒMӤ k,[:4E--@[-Z,, eAYs{{T^E}8~Ч?߫|-VXoQݘ oYA҉6@y &dʬ!66QT9p\EuS6xv& `'W?wA 3 !U&p<^~ ms"x | ^FQ8ix ;*76xxw &0 )`*> ~\O?_/W 6x0:ZZ 6!p+w"8 .3yo B]p-Ȁ ` >nA ,w+u`)f}`+10 %.Og)E&ՠbMa8.FJה|BOQ 'l7~Znz\tȨCkŮ !cJ(d>.dF,}^߆&;%KB&J>cK7[HveoǮ#žP&m!>KgNQo鯴jy![3"e~7FrTv%99Bř"{,o#\'|ܤf%cDcv'0{3 1W0 @n[m6vO o BF3"ds}=*5A'/":ߌOey:ITW ҼcL')wNf;?r7tH#7KO!ǺpKa27imTJ sB|pm|TZi ˱)ic[D|l%1-(ZM1$9*gpZ' n8 %7`^QmXnљOw79 ~g h3iy&:B-XKb9h#{@͛Q3JzL{d[q-#rJ7E?NK̟˳CaZΚ8c0`ce]}0?ޱd>LFgʹ\s:c5 *{X'Y+bV!3-"Ct\Q[??BźkVexL˳k ;TJuOջ H 54b;,rOi/Knh65:1]hnCxLq}y1'ױuo^u﮲o*T[¶UªWU{WwX7.שmJnWWɭJzad"lS{SL}0&Rb,9QDN,:=&s攊c{ʙFFԼC-=j_t,{jwÖxt+zԝve1LߨP?7&4y>?u[U"#WgO֪F$L_]7194kӮ2{^0_JRK;m! 0ulwܪ`_zDD S}6[շf̀w:ED[[}Kv619SEĚy]+_G[@._=硕 ;q f;j:ER3^ժ@Ey:)2Lɳ2|ԾdئVx=e)vc8O?V*?I;>JZvҷchZ~dU{bW[{R`S)b΢M!~gjM6Ċ*ZUڊv݈x:bUI@EofSj1"8}ǮeZCJB!~wP·&4Ѹp#svu?@+ہzz݊D`SH[D(*ġ|x5a[ÞodVe.U2i4Fn-xMmlm^n8(I?DgZvɼs-]b(Ý]zP흆Mk+*[RwWC;mhȚ]6vX2.~A/2 ]/0^}IC\5A,bdC/vO^`:}gSwZ42Lt-kLKg2Kn c?ncnCc+^h_Yǭ>/ =:Aڔb?/DY~O ~qY{N+7ZC-\nz8+̔$N-+sUy.3?[(jVD[PK<>Z$PKHMETA-INF/MANIFEST.MFmAo0; #t:!Ŕb7B[@3dM'9bp66zk@aԝ6`frrb\Mn }PKPKHE4META-INF/CERT.SFmKo@= ef,ICQDCJЍr__cDIw'_>9!JT-& CSoʔV$} 3.aIÖJ)hVlM (l`mW˔@[j#hU-*m1P̵wLM)$*A6%:blڋWs0Ĉkd 氯BIKx/ )Љ"ߑ/;sxV E)24"jcDkZު0hw!cW ݨ}JMg%~/>[PKE4PKH(tMETA-INF/CERT.RSAU?ԋ6"9J5 Yې,#%d(!,:r,YY"f77{98?>}^uѽu>(',Q0(8 p_ͤ#S:2 C20( 8 #%6A %3CSGPɠ( r@q /nxB"\AGӆEȠ$ qdE}"Ǘr(%x TaA5e qSAa a ?xn0ߵ!1uXž7s71jiӅvx4 ;YrR`T:#ߔ*V >||U>TW=kE`otP}8)bGB妀96B;0BE#sJJH>Im))- ,Fu\JkO7̛{(- rO02dM{ݍ! SqVyzHJdmhɑkDRYCD79Δ=zVoܞz6Rfǩܤ&^3SZT]PM7UJLm:^G)-4G]3.Skca)ZЬ컠Qx`e1oh+ Tw?A4ߥ7-#Q-Ӵbw9ꈽT.n{YPx6'ǃ=a^ҩD-aTl 08}~"I#B:ܬғ837DEn_.~; |?`?5 ;yfb|H~WZD4L PMH9BZk$}&ޗ"'?(IR9'(C}ס}'Q/hF=ȜM{Ӧ. <&wm/UùO-8a,\Tol[!0lYӖfRH3SrO?CAqJTF|\š:b䬟cKZq҉/Oω-TłւOѥg_Y H#FmWnfʠTwu+[ q$ZYH~:o%)(YB{эۙF7Ż5d~ZK)+2/Fl[O#趣IO2zt}4Gw\ˤ% .gx6O7 k+6J5(`:h"'&U0L~bN gR]w 5S^ ?bj%Xaں#u5fowޜXeLg&vCO;=/||WuJgPwd;ˑ~ pr)eۡ׬/Szjۯu(:>p ӇN PK(tPKHUnAndroidManifest.xmlPK H=-res/drawable/ic_launcher.pngPKHS L res/layout/activity_main.xmlPK Hch) resources.arscPKH<>Z$ @classes.dexPKH5 META-INF/MANIFEST.MFPKHE4!META-INF/CERT.SFPKH(t"META-INF/CERT.RSAPK *././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/obb.main.twoversions_1101615.apk0000644000175000017500000002633014717152071022520 0ustar00hanshansPKH@AndroidManifest.xmlo[EnbF1n_nb?) TҨIKH(u&!!9gs!qп!77^%yv3('r(IDj]ysww18ڃ?P&DTA]{t>;= 7(rCh ڄ~~*=z{P5jO{t۰Y*=Q3k1k"Q ŧۧg-R3l9xTijf *ߠ/Ƕ!=akm²Ʀʇ=؀o #Q^QkT_ZŽk*'"1|v.RmUh]x6@ZF'jm]kLնqF5HW᳉?W񎺰?}fq:XULtZqR3z]{!ߟBM)QZeա:S۰quGs}:?Z +;=ygϏSNn7z>@dͻ+Ova..x7}ZQO峎U66bSgݸ 6Б5+ M7|4f *;=dB#nԹ-cGn#v-KʧYyS[̙3E9ӌ aFN:$L0IL2hzr' ]"q04 '6'/k\Գ aVWA~y41es?(<(ybabqqH$[Iq}Yؗq>f&78>d6MJ.ښ#F7F-D޴5^K}Jx)ggq\_p͈7b֘4X}ʲ7i%oп%C7^Fx7ke:; oNq>o ϶s^ /k$yYx94^+兗x +\  xE W^Q,Jo+ o^-o«-oAU,Eۯŷk9{PK@PK H=-res/drawable/ic_launcher.pngPNG  IHDRw=LIDATHǥyPuƟ{².˲ 8ႈ 628yr OCM5V^ʡbY"0,,{DPXϟ>ߋ4zљp a22x@-q &6'xnب4Ռs-<!a^zD\W6=YMQ2ɗw|՟-f̶vJA؜s1Ym®n>/]ҹr8୔@(r1.}j:Oi> DowJ'CRRVJ eMPy|{|7sRNQy(KNnቹM{p՝Ғ6Q:h++-LxȄsՆIT~M≹\{V{TTX@vL (Ćyq]zAnBFZmHocs  Çd6ihh CCfQ!j2OPSեlUY G?15t"GUˢy*(M6\$""DJiujdo5GcF^G"@ Vx\|T$SgOt ::erOK\]Ϟb¶hӫnZ>5^7 S~6B3Щb#RجJ[ =64%1N ('5+٥bvTD%W< `y*VnJK6͵[h8l3PA$M;QZ1[,U3|.nlIuG2 3 eb2V'0`ę&Uڂg ,.!蒎Q1 F|UJvuӆaL06 cLzN׎zXYٹLGBr8#0LmMOS7onDVv͞} DLژ.C{e 󳵴&cY,ZKSiZ=I`҇6%]Nm},ŅU5SN܈mݷ<65}E޷'0CקԄf.̙3;EnK=_d*/r.Ѵ#>)?/Ԟ H\o7aU%(|${hjǜIL~ cS/LҘPPX"1sgsLuP!!"@&849^1|'3}ȕs_-]$IVM1,,D-aEDA̤rIENDB`PKHS Lres/layout/activity_main.xmluN@=[$BHA"5%$ 'Ql*x$ G;es;wofw} ƘMCt- G«& 99w%fmF)B[nTχUПg!F$~"u.m*~RUx:R}o{EO١R3~`)6d?Tޟ#]{ȣ>64u6Z?p̑?gqդ~,ᛙPKS LPK Hchresources.arsc 0<xres/drawable/ic_launcher.pngres/layout/activity_main.xmlOBB Main Two VersionsSettings Hello world! obb.main.twoversions l, 0attrdrawablelayoutstring08Ln ic_launcher activity_mainapp_nameaction_settings hello_worldH\L4H\L4HT4 PKH<>Z$ classes.dex l[u}(Rz"-K$ee[(qDcK]t%['Yz6HʒMӤ k,[:4E--@[-Z,, eAYs{{T^E}8~Ч?߫|-VXoQݘ oYA҉6@y &dʬ!66QT9p\EuS6xv& `'W?wA 3 !U&p<^~ ms"x | ^FQ8ix ;*76xxw &0 )`*> ~\O?_/W 6x0:ZZ 6!p+w"8 .3yo B]p-Ȁ ` >nA ,w+u`)f}`+10 %.Og)E&ՠbMa8.FJה|BOQ 'l7~Znz\tȨCkŮ !cJ(d>.dF,}^߆&;%KB&J>cK7[HveoǮ#žP&m!>KgNQo鯴jy![3"e~7FrTv%99Bř"{,o#\'|ܤf%cDcv'0{3 1W0 @n[m6vO o BF3"ds}=*5A'/":ߌOey:ITW ҼcL')wNf;?r7tH#7KO!ǺpKa27imTJ sB|pm|TZi ˱)ic[D|l%1-(ZM1$9*gpZ' n8 %7`^QmXnљOw79 ~g h3iy&:B-XKb9h#{@͛Q3JzL{d[q-#rJ7E?NK̟˳CaZΚ8c0`ce]}0?ޱd>LFgʹ\s:c5 *{X'Y+bV!3-"Ct\Q[??BźkVexL˳k ;TJuOջ H 54b;,rOi/Knh65:1]hnCxLq}y1'ױuo^u﮲o*T[¶UªWU{WwX7.שmJnWWɭJzad"lS{SL}0&Rb,9QDN,:=&s攊c{ʙFFԼC-=j_t,{jwÖxt+zԝve1LߨP?7&4y>?u[U"#WgO֪F$L_]7194kӮ2{^0_JRK;m! 0ulwܪ`_zDD S}6[շf̀w:ED[[}Kv619SEĚy]+_G[@._=硕 ;q f;j:ER3^ժ@Ey:)2Lɳ2|ԾdئVx=e)vc8O?V*?I;>JZvҷchZ~dU{bW[{R`S)b΢M!~gjM6Ċ*ZUڊv݈x:bUI@EofSj1"8}ǮeZCJB!~wP·&4Ѹp#svu?@+ہzz݊D`SH[D(*ġ|x5a[ÞodVe.U2i4Fn-xMmlm^n8(I?DgZvɼs-]b(Ý]zP흆Mk+*[RwWC;mhȚ]6vX2.~A/2 ]/0^}IC\5A,bdC/vO^`:}gSwZ42Lt-kLKg2Kn c?ncnCc+^h_Yǭ>/ =:Aڔb?/DY~O ~qY{N+7ZC-\nz8+̔$N-+sUy.3?[(jVD[PK<>Z$PKHt|META-INF/MANIFEST.MFmMk0{ߡ /Mء˜NVJEbkFIO?a[Ϗgc)p6zk@a}ӷ`=x NУixl璚F2z݀0:qy(~a8%^8[ X+Z[աѠN<^`[ 7P#Qz[y3~dj fj]B*.W K [ćP/MA_@:O/R @KA#W|IװPKt|PKH7META-INF/CERT.SFmKo@= e"$]hUV18̀\~}i%ݝ|( wPaˌ % y ܓCe\ -y`t:Q(k/GmLb!B~D#N悚]S5h1|V[NFYCkک8MI/quG::Oz\W)Ph#ϭ!Cy \SzȥbrMyx,RUÎcq\ ^lkC}*JJG[#j[)Yc0NQj_\vgnR="1gc0ۨlWȒ Z.?;prJtf;oAUk7WJY9y%7^C۩w)4ۊN#e;,N[Uq4|Wt\Qm42g"p2[׺切-+}-Z~Zwʹ]!]™Y^oɧ Gf.|VE$t%"\\XyO!i+lƾ@ pE:#;׉^hML_FY=s 󭨩kfV!ݬ2#Q[nV߶pEqPi7 =FZ zKL.MH쩉aUlka=ԅ}Ouz"R`>h^M=h柎uϩ+7͎twZ[XOQP}sX5퀝qllxj~6VwTӈ 3g71Sa\dևT3T.uiASbh;kdOVy4f3=Σgxf_q=h$D3N6u֋{bi|'5-ۃ^q@Y#?qÇl nuI57h2ዑ~qp !/?Ÿ AyeVKMfj(Q^z"sڍn?gWM}nP ]!n7p3{{[`i4-^|TbA\ :"T=00+0uTXH\D&J\w(G Š9Kś##ؠD@!|V/Sź`q(&Q/8*!K\b -r=M^· =~o}A7|@pKۿKNtu^cYy5/MS[h,]_y$Z9琗巽1ef}˳vnP]ѽ*_Sz"U烉-Fݒ΋$EO`'i>J|rcW^aL禉cdC|(i!FfZ$ @classes.dexPKHt|5 META-INF/MANIFEST.MFPKH7!META-INF/CERT.SFPKH du#META-INF/CERT.RSAPK *././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/obb.main.twoversions_1101617.apk0000644000175000017500000002633114717152071022523 0ustar00hanshansPKHm{AndroidManifest.xmlo[EnbF1n_nb?^l) TҨIKH(u&!!9gs!qп!77^%yv3('r(IDj]ysww18ڃ?P&DTA]{t>;= 7(rCh ڄ~~*=z{P5jO{t۰Y*=Q3k1k"Q ŧۧg-R3l9xTijf *ߠ/Ƕ!=akm²Ʀʇ=؀o #Q^Qk4{wUOWEc \Rեڪ,*lN`6ڙ1mjّ guak7LE̖p:XULtZqR3z]{!ߟBM)QZeա:S۰quGs}:?Z +;=ygϏSNn7z>@dͻ+Ova..x7}ZQO峎U66bSgݸ 6Б5+ M7|4f *;=dB#nԹ-cGn#v-KʧYyS[̙3E9ӌ aFN:$L0IL2hzr' ]"q04 '6'/k\Գ aVWA~y41es?(<(ybabqqH$[Iq}Yؗq>f&78>d6MJ.ښ#F7F-D޴5^K}Jx)ggq\_p͈7b֘4X}ʲ7i%oп%C7^Fx7ke:; oNq>o ϶s^ /k$yYx94^+兗x +\ o>-b޼5^+Wx% W^I-o«-oAU,Eۯŷk9{PKm{PK H=-res/drawable/ic_launcher.pngPNG  IHDRw=LIDATHǥyPuƟ{².˲ 8ႈ 628yr OCM5V^ʡbY"0,,{DPXϟ>ߋ4zљp a22x@-q &6'xnب4Ռs-<!a^zD\W6=YMQ2ɗw|՟-f̶vJA؜s1Ym®n>/]ҹr8୔@(r1.}j:Oi> DowJ'CRRVJ eMPy|{|7sRNQy(KNnቹM{p՝Ғ6Q:h++-LxȄsՆIT~M≹\{V{TTX@vL (Ćyq]zAnBFZmHocs  Çd6ihh CCfQ!j2OPSեlUY G?15t"GUˢy*(M6\$""DJiujdo5GcF^G"@ Vx\|T$SgOt ::erOK\]Ϟb¶hӫnZ>5^7 S~6B3Щb#RجJ[ =64%1N ('5+٥bvTD%W< `y*VnJK6͵[h8l3PA$M;QZ1[,U3|.nlIuG2 3 eb2V'0`ę&Uڂg ,.!蒎Q1 F|UJvuӆaL06 cLzN׎zXYٹLGBr8#0LmMOS7onDVv͞} DLژ.C{e 󳵴&cY,ZKSiZ=I`҇6%]Nm},ŅU5SN܈mݷ<65}E޷'0CקԄf.̙3;EnK=_d*/r.Ѵ#>)?/Ԟ H\o7aU%(|${hjǜIL~ cS/LҘPPX"1sgsLuP!!"@&849^1|'3}ȕs_-]$IVM1,,D-aEDA̤rIENDB`PKHS Lres/layout/activity_main.xmluN@=[$BHA"5%$ 'Ql*x$ G;es;wofw} ƘMCt- G«& 99w%fmF)B[nTχUПg!F$~"u.m*~RUx:R}o{EO١R3~`)6d?Tޟ#]{ȣ>64u6Z?p̑?gqդ~,ᛙPKS LPK Hchresources.arsc 0<xres/drawable/ic_launcher.pngres/layout/activity_main.xmlOBB Main Two VersionsSettings Hello world! obb.main.twoversions l, 0attrdrawablelayoutstring08Ln ic_launcher activity_mainapp_nameaction_settings hello_worldH\L4H\L4HT4 PKH<>Z$ classes.dex l[u}(Rz"-K$ee[(qDcK]t%['Yz6HʒMӤ k,[:4E--@[-Z,, eAYs{{T^E}8~Ч?߫|-VXoQݘ oYA҉6@y &dʬ!66QT9p\EuS6xv& `'W?wA 3 !U&p<^~ ms"x | ^FQ8ix ;*76xxw &0 )`*> ~\O?_/W 6x0:ZZ 6!p+w"8 .3yo B]p-Ȁ ` >nA ,w+u`)f}`+10 %.Og)E&ՠbMa8.FJה|BOQ 'l7~Znz\tȨCkŮ !cJ(d>.dF,}^߆&;%KB&J>cK7[HveoǮ#žP&m!>KgNQo鯴jy![3"e~7FrTv%99Bř"{,o#\'|ܤf%cDcv'0{3 1W0 @n[m6vO o BF3"ds}=*5A'/":ߌOey:ITW ҼcL')wNf;?r7tH#7KO!ǺpKa27imTJ sB|pm|TZi ˱)ic[D|l%1-(ZM1$9*gpZ' n8 %7`^QmXnљOw79 ~g h3iy&:B-XKb9h#{@͛Q3JzL{d[q-#rJ7E?NK̟˳CaZΚ8c0`ce]}0?ޱd>LFgʹ\s:c5 *{X'Y+bV!3-"Ct\Q[??BźkVexL˳k ;TJuOջ H 54b;,rOi/Knh65:1]hnCxLq}y1'ױuo^u﮲o*T[¶UªWU{WwX7.שmJnWWɭJzad"lS{SL}0&Rb,9QDN,:=&s攊c{ʙFFԼC-=j_t,{jwÖxt+zԝve1LߨP?7&4y>?u[U"#WgO֪F$L_]7194kӮ2{^0_JRK;m! 0ulwܪ`_zDD S}6[շf̀w:ED[[}Kv619SEĚy]+_G[@._=硕 ;q f;j:ER3^ժ@Ey:)2Lɳ2|ԾdئVx=e)vc8O?V*?I;>JZvҷchZ~dU{bW[{R`S)b΢M!~gjM6Ċ*ZUڊv݈x:bUI@EofSj1"8}ǮeZCJB!~wP·&4Ѹp#svu?@+ہzz݊D`SH[D(*ġ|x5a[ÞodVe.U2i4Fn-xMmlm^n8(I?DgZvɼs-]b(Ý]zP흆Mk+*[RwWC;mhȚ]6vX2.~A/2 ]/0^}IC\5A,bdC/vO^`:}gSwZ42Lt-kLKg2Kn c?ncnCc+^h_Yǭ>/ =:Aڔb?/DY~O ~qY{N+7ZC-\nz8+̔$N-+sUy.3?[(jVD[PK<>Z$PKH1META-INF/MANIFEST.MFmj@} eD ]ؘh*Fƍ̌q$35^}چn_8g 65QJsZo["`nT_ $e[3glk9귚]C]S\|[!C<^uCQD{X RF\*نAY*D JAVnoh}09D;nrOPK1PKHݕ"6META-INF/CERT.SFmKo@= e% VܘFC__G/7'D(o ¶+(L ~B( er0:\-VVgpw9/9_/;EA@ mW)MY܁ kr/,?AMv==kd7TM *J89B8끞fCsgg*H:#K?iD-՜4+NH@h#kl]s8tUZZa2:H @Ha_6%qQgu;fPKݕ"6PKH5k-RvMETA-INF/CERT.RSAU?ԉ0J 341 ׺1jn6E)W02*a60|~w<$ ^~dBP>X! >0(D%a80/ B8 ( OE}Mw8WF/@JL@1@dI uCC>% !z955m!!/0(2A}Pe=а`oeOg #%UPCb쥄@4ls$? I0W^FA!^b\Mi43 oޔ,f3"io,VPE9#D)OL=>kiS3o{B''WŚ}@VfUi@y`oU$<%7]ܢ/@Z uKZqZM8_EFJ!c|t@䋮/UP jUs2O Eb+#||S.*QW4o\nT{EwdwGy[`'3JbuRGA]ue}]gױ1ur:-_/$OnOh[r\DU>BNT:$GsY9\^H"1`E3vn:܂B;ʸO&1cwɏvWڥr"q6B{䊤zVbo/b>,"OGїKש9cuń6TҴ Ah<+%Кء٢7t Iz=mm=z8|-ebnI\C\zbnR8k;LiJzhtYzӫKW#V v&?G9`ڂgGj>KYg ѸC,w)Dqx\}t9:  36n;pУHwwF <͢u'c~٢]fMf@=%mݽ|#)B{H8XT`Vo"J^rMo!_~MD3+_PK5k-RvPKHm{AndroidManifest.xmlPK H=-res/drawable/ic_launcher.pngPKHS L res/layout/activity_main.xmlPK Hch) resources.arscPKH<>Z$ @classes.dexPKH15 META-INF/MANIFEST.MFPKHݕ"6!META-INF/CERT.SFPKH5k-Rv#META-INF/CERT.RSAPK *././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/obb.main.twoversions_1101617_src.tar.gz0000644000175000017500000000022614717152071024017 0ustar00hanshansX1 1ԞbN M2m PDa\Fy /X⦣YI_!$C-S_D't.,>Ԫdӏ"AtF4mqn2(././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2121863 fdroidserver-2.4.0/tests/repo/obb.mainpatch.current/0000755000175000017500000000000014770510164021221 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3081872 fdroidserver-2.4.0/tests/repo/obb.mainpatch.current/en-US/0000755000175000017500000000000014770510164022150 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/obb.mainpatch.current/en-US/featureGraphic.png0000644000175000017500000005742014717152071025617 0ustar00hanshansPNG  IHDR&_+sBIT|d IDATxisWOd&@LO۴]7Y}4Y͵[*J$ʼnL D.f!$qcp [O :&ove>4JXYsIϹ7-AE7BI \k&/(@MMoʍ"@M{A!KCW!wECo!$.Cc@{E$ h#F@@@G N#$Ht?=$@WD]$:hiTt !@+@71Bא.C$:'43t &ڏ@pFx*$ZjɣU HMf$@+hǛrUsh#-B`^H 0o$څ@ XA,Iv tH4X&@CQ`hh6 D`UH4 !j$@l=yDH4 NQ@Cl=yCwP$`'9H?# $j@S?5@ b& z>OƅM>/Fa)^V?ٕ]X&ӿ\#iTvZrty&@DfHM.oK@,K$iH -uBuUO?_;WFzb^ VUPo H?,_~/  ۅI#bxb꣹.K # Z$Vo|eI2# : \%=eg]=BBdT0~[  #GِX KFףM5 X>f,?U~cp5^ %b&XGP `H, ?H<HI! ,XC %- f7K< `H,?W$IŢ`xoFLVzM aEGA XT,چ~~Jڄ*!ڂ~[HhA`4A?l$Ich*Jv~W;tDVGcV `H ?!D&" 0? ?&y_H$P0;VU* pGZ#p$ݑǛr~̊D:# p7 5C. NX*f?:!(TfG`P7zChZfA`x7]l 0N [b**'`@`U=HX57G mXgO2קguG `4V*!p@[L&$>.7A` >mg>X87C5Xhh;,IÛ]qK~ ?!  \+l=A`!(EXO]" mV}?Kp-F~XZ.G Uk?̆ǻhѪ@QwG[ym(p<]:p;UIj7KE+6X,^ ._x7Ǫ?n/`MG5r@g]n @Mt96LpJ.u-`*oxg@:]s .iԀh ҵ_X M9 <{Uhk{k_tUժ??WXg.ҐNP`%oB+@7^(T5Ot(\S.l @/ !\&3.Ď?7Q7E\$ųZ Gtʌj![zhՇ`(̂$6he`fk/$m&z>`?t@1ZX?M捹@ u VH$nj[/,?=e tS۪Z`2MԢ@V$=mhM;>!I[Kvl=ޔZb?.m3Ix߆ՊhOvLURWI0 Vv#4IK O?IH*F'XڋD$vkr/58 #4Iݚ\@SO8ڀ$^MEzhՇ`{@{TIۀij@#M<߳Jh̤gڦ1iCh3@;5q.]M;FQ Ǜ>sD@4 Q @[$UjL`f2+":$.MhL=ttIЈ@;0Ah hDxIK H4?Gh&T>?l\$|u'X# 4_ݫj`h.n$lu'XّUM4?wGhRM[5Θx?$\ue' ?@35]`ɣU["`qHT*%v\# 4Oc%4?C]*@?,IYP@N e>:hŸIl=\!gOYy`NUIxVV9K5Il=ެIp9$uE@3!j`?$ uXy>!H_C@m}´$4@?Po@,w6VP'Ò*VV  _~ύME+Po-=+4IYIh@}*&h)H?ڊ*'(瓧V- # 3,?AR[O-p nzYvR?*>Z;>(heUKK? Gk[o@袥$(ꁾ0*Q.z .=P˨X|*TךC?@7,4x`" ޢ[@?R٪4 ?Z͟`%X h%(VӨo`U+Xd*(VpTӸC?VgQU`X JdFXX*0o$v{`5@k!h*`3RX>V2T˶56VP,2(pSsK̻4(@\ J 4-@QV*Dzh UUb,o#m=P$ 3ڌ{nX 2͸snW@?0wd@p̟KMN bd@p `Ȅ.p%u9sE_%,)el-}^$FAkн\M~5U'_n.EI1J.W/ζ?1iԿ~A!2 7O+2@?JͯM |nU2sI7 m+7^$a4!~fI L(Wʄ'[Vo;׾ަ>yy:hb_fod2?E6!hSO}E|u!0,&mꯘ~ornߏ.yL X=I*`L^#*xchz*7,g擲~IXwە_\Ŀ㽤 A0(h*nSߜ7Jɀ"J1H b8Ž0_`.ک KVO)+ 7=oV{E,]~]>\x4eA*EWL1b8 zb>I 8u, `xdLʀ?̕I~Я_=7s wggRMKj (T(% }'C?|%UiI,gJljO˕Z2{pTM\[*0?@|) >XZp?+ >o;9*? UK}iM m;X(-~6%.)  &+ݫWv)tg 9 &y#!y9L0a Ve;I$aUi6]_5^f>Sf27cs6Is7Q!깩*wT-P0@`yLl=yZ79̤I`?xܞo<ҿs6?om!H>*v<ʝ@Sp'peM`>Xmzj?3R" x\0:Aܔy "292` z h6P_jf~ >.Ct/߻/A嶊e{@?d'v(ܕ$PW+A X0VI HLZ`Ұ)|ԧ>\{jwM]LtS6ad`[@?0Rgfv~Ͱ蟙Oq~T]Z:ҜS0WRLyFP=@=pUs[!pwY i-փk#HkI_o^w^7i#H2z& 2S/T3ų;f Z2I!LK=ߚvH A \Cz<a@]p, @+Rp RLYp+(Werl K?L`[5࿋Vs ̵YX5@ Epwϟ< ; X.Ԫ* T(.+;V~M!zr7&1 dG`}[l,rU+nk{ ^'>A`L=i?lamX.`aQ2пtp 3'lyprP,Rb4V5g~pY%ެA$C 8]#Ǜw@?Xժ/Hec'$-`L^H%!6n.nfF,V/R`tϟmۏi,U{*n. b 0GSm Rߤ̵, jˆcV>v2OkiZ )1Qm,U\|0#ޠJAꙥR$c/h2V|t/v? l҃?ǿT Yj(Ү*\<V QW5_aeM]eI;JIwǽ0OcIL܉Y !MVWL=I%VNѳ+jwE0~fw$0;Spej@ep@e̤+xo`L7L=|mp M7r0FV!<{J)0&҃ʦ'#=~'I4r<@ 1Ta}VHe`0[4V}3ZpT0Ix)`6 @`*_Vd!e'h9zUL,L> MS?K$! BۼLdR0׹L$K `F732ޣSUTV]/zsQ̈PmeJ4i]y\MA̎`!BYF(=1Wɝ2$3gOx +FS2 s0G5 L`ܤ`7nrLdi?cVL2\P.H" KzA+nd}F&ei{@!~̤,HkT3K+74Y땕4Ap;T@??X?)=Lndrzhb0Ew?p;$33K7_}3++~<ҸzfRp`v$3~H+2*T 6Ml`))=`]S2\*#iMwY2hzy^OGSSA@_O% J7fր$7B:pRRVV:ͥW'Q[:׋B/ON҅*^]ꇞz!Fi`ROiMn(ۘ\p uA=)P&)J:- U*yu^(]TI"WFd#DܛY //(rm,#x/I?BHO7`z%қSN H.kuR6zғ,m덠LܔIˍVH.eJYHLkjFݸ.m~Ao+wk#='Ѓ+9̶H&P~B4Q'GM:;vN]gE[ ΙBNrà,H9)/FͬlT$`<>`^Y`22%Mo _r\?:}uKV"JL6M&gkA\r;i;t#CdEfR/LAT i,ۃ绅+asW߳MG*tg݃~(}nZIvʝ\]x?Lix?UDOIv V4{?g:<~<.m+ϴ˴޳t,~0\V {9r$LT*z1IK'#듨 }&g;ҪR"i0 ^ГuS{}HՇ+$H@) i` Bzy\D9qKmpwқ( jk'T `щJcDfJQ99t (3AA Lnt}thb)߷s9+=UUB f\ _m (ZĔdF. t +LraпǣwRwNrIZ['HPtWAALz73HԉI0Etw.`h "}Ks"C^t;\NGJ]#i绹Lg Z0J/\Ѥܶh;wJAg<uPngQt>MKo^r87Q}e6LAjV̕I RE:l_f>^!adl\3AL G%@=T5ff*,m en!R^Y_3_xL)8қ }S蛃B?DTuXe)IԷI}SFP8s\RWT}\!jۿdJ[N>sOQwr}á+.p=kTH0mU|7ZOZL^(LI%rD\=OUŪ T5VAuO]_\w 4N+Y wN?s}_h4LL+Ӫ?n> PL mgV{ʂ5i XSZ?+Ө }[Nj\{_c;q~{ F=3\\(yp<Aqot)UKO#X%tXns}kdpCD\ L3F!?Dkd R5$+H !M7Y埤a7#}_,yt+T{AL<f0SÌ+G4̔JՖQiӨo +~7&7-P(JO]Q~/p`z+X3@+ 2oPmy˘,=_Fmmt;QCW{>v7Qg瑷*yoճr'>@(=cX5eS+~X-)F4~:vBNF4*W'Q[ۅ]ǣ\*b#gJs@zUI (e>`BH[MnXclΣkXHN;(bзϧ@]QH=~A2WFLʂ'W@$]{!:BzS_/Qâ[T3\Ĩ^~s?gғ~Yȣp,Bt h1+$K:Sov >:W˚(4˽BkAk7x\`RRf>@6+WYfX\nmKC׋B+tz>)eks$@^"j$ŬU[M,M ;/\G#㨯 }[q( a!|~ezfzзq+IsCHNZ ljd [j{<ۃB;g;FO?뻃B[۹+~vtɔFY9V$Qz}\{맣Ex}Z6DaEB{d@7v HzaN>D`Lfµ{8nv m3N9B?E흧s akCVFy1zD )mxe/DU+COGOpu<,KtA,  B0ez80e>/JB]z.w̿빴{z[F[`ҹ5M5h5Rժ o w {~O)(+NGo K/>\3 BO*RB@tګ-sn:I/>(A˓ák*:^D}{~N%/Y!mEMuo+`]Q_7?(t2tcCn FaO4Ȥ@lA )FcZLKDf?tVHoN]/vs}H}AwrKx]g霚Yr\ A *:K%-gO^+4z I }Wh4jD4^yvN*B箳A(/ӋgrI̳@e>` rOoUjK@$Q:~> èQ+v}u4bGQ8,}802^L `&s* hh,)X.:l'绅^D G\+( s듨绅 LӃ~6> fRpS0O uH@ˤ&I :GQ:fʱC绹zAzn/>J CH@ 6'_jJ}Q!m~8,~GQ'yy≤W(jWLo6~Hi) M^;Dڦũ*Osi,\+g߭ȥ'QEZ&=^ק*},j<; h!+Nb}OFx}cDOS5ŗ{A=zf=,Nj''-DHoFbεtLQkge;-ha 2i94iYi*ْRD(]WQLCu\ۉV} "-bnbnL pޜrU]x Ι뇣4 prfަY&ܫϝY?8w(èݳQ#Q!휥6Xu>\i`( h]};wwaԷ+{*$.P&d]yL\9Hf@h!鼸sQ?s̚[w`0FޙkIwKJ h+fS=Gw h=KC綧qn9ޜFrsu1,H殢j}qbb6n@V}^#.p:4L ֍áhM[sYDh!*E|WyNJ2j͕Z7Fi7QUո_T@ېbnrΊTR>T4K(害U<fLQ!->HܽߖKi@^ UTWZ]4oXH;b̨>%Bڄ)c"9JEvE`VI? h@dD<\iplEΦ7̪UH@xKfMf5t"0dN-"ǟc6 rN8yy(ܘ]*)֠Z yq"Yf)`Q4ߕ ",_>ܾ̤@,d¸J h"M^~и>`zA0ɤ^H>z-",MhʤP6U`5RG 633eH@D %L` ()M/Lv0*څ:/xh mؾk69 &3i2c! LR5).O[sIe Z_pn#N mUIC `LTN>5P隭ROٹUy]Ub$EX WHJ{}Z6)'GIrx.̪$څHڶ+e}v} c% L kvrU?MoXu MaU %oT̬ چ hdYĭ:fكؙT!T@qe}qsdLki\fV^kb&mKv;D-DZSh \)\ILM&&KO6>Zr$m͍U0ֳ+HL=?}F L:ʕk tޟ_E\MR;UUP3ӯ6aǎaJ^{Aag3pBE <Zca^W ۻ綮$<ڼ/eWMo3?<*.$YÒ7[X Zz7[MGg&ZR.{['mY$RfƤF |o+>Z{/eD?+w+iv{V78WR[ӣovJfޮն! ,3*`KY$%%>Mz:J:\/&-D\g{I5Ă1f7'%VI6{O=o`4sa%i[/4tisP?")!_w^$tsh~% vbk`|s==r.b˻њ>m[=k5r߄3ql:$Z+Ceo Xb_nR.b1Θ^n}oFkp;ieяM\,eЅh0I6>o՝F$6}㜦b H zI2rvְ6&xяϋeѯI\z-7пkNa6ŀRจH p@Rr5nwMs`3hR\"梎+&ӝu9hnz$\.]%XBWZ|]H?`dj,Z>NVKF_Ʈeո{o+雃F;hvF[ }ӤK)UAV V\ٌSKpELzZaQ)a5 ƴJ7L5A6?.wՉk /utInѯcW$NVq~)EI_7F&=H4Dz~V$7rteZIbD%/nt#ZoMk4e39h?&\ sՖc|}b3P*n Xn%K}o" 8R*;Cӗwm]"=uF%%Ov^z8IM\oU? K+ nBԙɓdDffjMjp+F/;Fk;Eјwgj/}}M΀g࿘:&+R')4RsORѴH i1u˨hRD;ke{kI5ZV։U]T_W4V X!xӟK](>t+8hIYz6vI鯇E/'uE נXwo3铝ꛃV6ttIX$PG+cj!+]JxT噤A%4fD/\] Iiio^p6h;ighj F=6]HV `η߳ ="%5`٣XKLu#i{`rqei~>*z>&YVMA#m MI5V$1W,%_^?3>8`p `7RJ,OƋ2lvm%V㝤KяfE?nNp+F%}諻mG$?3V]R)(b5%V 3XHrIԁ+ٲGSV}p&8;_2lX~5=Jn{LZR+^ZL:)*#+,˧Uw-A_ 0lVjc}cZC_^􇟳?-eɂdm^wm& #TN}WO.1sP+Y1,ɼkپu5oMi4lbo'Q]Z0l[%)ۃn?hVn'وa7ҧ{'?. lq@s&:}= ?bnh dҠiuoϲyяϳ觗_U'nKO|_>nv;>MzF;DTG0œ$k1:@`Ux nXE]]1%U[c. (ȵ}HwדvIm>iO)믇E/&2/{oK6]`,lL75͝F_Gͤ&Iu,++l%YPYLsW*A_@l%u@PhFlMwM$eG_FEF_''|]wZxK igh_K:X7=Lh'飝834%ťRb.\nXy$(q1SX,bZ#=L&}/EֿZ?(zE,"QsZxԿs֣x{[I7́iTNc1|+IUV WF *?5jS %mF;ҳQѣEl(fO/~9ֻu뉯ru;_(hjɾImT5V{[Im'} GII͉N,^pXL; @&Ik4A^k&eu)%E<ʮ׳?Ʈ_F_Eώ\Ʈg_1,b"m/;ˉk]ɝ/}dmoivL&c0iʹfYv& E\X8wĥIv\H|^Ap bUy:Ű\M=b!y5ɤi5=ت'5QѓâvzzT#&fIHt,$ 4Ha0ݡiotgt7'mL&Iz,}X>ђ=Hvr(#W\ G-Uf1/]3]Kz iR (A2oj@W)S _r]kgg8~Ir8zխ?lߘ]AWO?LJs$3)*Z)!b${:qb&+>=!(z1 x *ƁU\I N,x^]#("j^m2Gp*wl|~-D <"MܣV#xRVdӁqn+mx$oTS2WJq7%IHxo-Cdp1#?NNk_s:& Hb 6To  646e5ގ-XZs:울)=oFp&fe}@&3J-M?(;lwH$נ$s*韭}˸&EjBP\\$6nKNTc'{&y6nOJ\%s `R%ԝn?)a:oR<ˣ>n@ՙHi`6IL-jb&Ű?E+R' eU[TTUT5L.sS\ qxVkRT?\Ep~e\\K@6ʦQ&P4s.4iq%}??pu(.o0nDӋkT\4EA/@\7~[<&0K:쏒`1(.(͵n@ +K2YF$sɸERvפ?[%j+E*:騋9r8eag:f?)P\ W8˫:%w'Vb"X OiRQ(ƱcKGxQv'l:ʮq'7w4\s_9WWׂU.p=\RWKdvLgyQfۤ_R.΄q\;ejObg7&%,dQꦉ'٥Σ$w5 ^EQ=ʮzʅl_4.9U' W qW_튠-Udq+HJf;+q*wIf*+oREn z帒AP\?Wh}6.1mq&E*VɡWy2ΊLU]O N99P:EpnVTJEji\CLFM&:?N# Е%Ap8.؞ROkje@qc{LLIqc-`x J:qXb* @p;S'utQqMj HB̈qve3u6BAܰ](6W#rhV%]ׯtFw7M꼈0(o<տܻsݏ*wW1DdRb@L)?!RNl_?ɿ:?ŀ?2:mN=ˣ }|~'-E5ho9ěbyf ƍ x]>ԚIR*AY?gzs$ŧf?&w} iő=x$k@ ϭ6)3S#~xXwo!Zf~%e$z1jC k)sI"O?n WUk]) ,[,;+WM[-dFяjRդ&">&+e'QlswEʊk?~o{;A pMhKY*5O-6mHV &)pSJz |{lUGƗLRYDGoRɚ+qOXNׇpM(m|UNW=鯽Z Mq%դ47E@<_`sgecfѱc'~Ձ~R^OUO4BO` >/9\D’I 0;ik٬=R=g`mjϵ`jy\>{D}8 #/Te>-}`5:_?yrIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/obb.mainpatch.current/en-US/icon.png0000644000175000017500000077402114717152071023621 0ustar00hanshansPNG  IHDRgAMA asRGB cHRMz&u0`:pQ<bKGDC pHYsHHFk>IDATxwTEv9sA ("Ą"((( P* 9 spstNtzq&9yYVws;w]{"( Bo!Ah+PPCO(PPMGnYP( ;P( O_ChP R]y?Z~P( ſP( 2U DeX.C8y=ZB+QFS77ϻοӅʀ_$"=/fu'zG<|޽w BPF% B v@߇?8y>m9oYȀ^B2P]hPP o@>NȀU' *ԋ.~O8f4. z~r^&Xd!GP( RP(D+ڨ,TQG{ +\q'Y)We-<  ӄf 㟋||S\޿BO='4+~|[Bz&zFh?Q( ⯢ Bw"KePXa. ģ@8/h,~b@7ZOhi!B]B^++d/=,A w;^>^Y/rEt2~B/ Mnq|7*!ߏBea}Be"_*P( P(vW6mA?ꭿXޞ/X( ZSh;ꈱ,ŗOX@T^qp黼\BeB&d+]nߩw;.x+҄P8$QL\%xE?81Lϕ|D?,QAcy(⽋?:U +[ B/FU( ş:V A[oztd}=x3zNmŸPY BUһ?Hq9%% ߄dWBi]qkYrBe@o $;A 'Aקl 7BX~d$3AS( şUP(n_^*qw[Ie !W y;vif7FhSre^l@dW˕֯E//B+U$.ʖ{po@1 ˮ \磊)AVA+[z!:OvXP(TBPt]^'J?IzY:/WJ3<_P1OPJ37s@I*2 +""ʒr Bt^d/ dWZt ;A+A$O<,YqOxyuS2`+>h,ϟ\ϯ580rb,+T\Vύh^|*q1`3?@dw{ ^P(T@P(=n ?ڎ,xe'B :Is;hZ ˱y\ Y-eB^ͤ,<A#Rixܢ x#!5雔wh^ zE7 K3"j#aigfgo5ֆNQ c~2g|H;Dgdڦ}_zVK;Ek\;-C3hnlFYڂ4X,`:Di;i|MGB`6hDoyC=LIڅzDͤ)1OcE4GV:EЙR(NG='Bi>-}dshO#1z6z:5 hd$# I%:,!c%c&~>s0[1ޞ5<5y>*ޒW5<7|4`$vh{+= T7>GC{}#25~^3w0Nbʼ pD&>7x Y hDv~3u#^0 f;!|9,5c9H!.xyOgRiްxABྂQO]?} =PfvF4z\y'#Ӻ\}?u ix=G$4?j|+-BeŊL4Ę|q -"t@i;"aĥYL0*[hdbM& |AGK{o BP(/`T_D@)\A N$Md>N9!+bޥ D ۝뢔ZNaDbp?x/v+ݳ S~e>~:i|>6"ll5m0$Zomh[lѷa/4lJ|4Lƴ&M͖m-a*Elգ6a& S(ЏUEGl+D] ƒJS ڎVXi-5/i F[K؄.Ԉz>CCt\z%r5ZT^ 4iLǫԉ"j(44ԇh7*#Ip,17 QpBF80`ބoAv$w܉9x]ޑOm3C|}c'/D1vX!6LC[?G`|4cl4SpKyC/񯹓!|Wc#~柙p<=mi/򚼽Ƨm36Mj2͍&3f'f{a1e0U7{ѨtqB67{.=~cO{WX9=?9x?RV$BeH4ՔD'deL@Cb,+M*+edL+eM]BP((B"W_yPoY^V EO>er2+YNe /'2_%'F'j ]M)KXϿ}wtdsj>Ǚ7}Fw-_okg<$%+m?Y-ϴ{|߆Z>k!޵Aҝv"Q@ЪBeސ+wގq/. ylA~pLVyeJ( ſP(r,qR}B/WKie@LK˓rpPY RYq t{Gb_G_q,e?^gY1 KeŀYfjwZ$*HvCTM[\h˺;2z*>%ؖh;jԹoֺ6eg_֮,=d@)>viY/XkZSVR5,1VLcJp ,8=cxu-ZXEP/gBGxӶ (iFmMq2u+݋+[  gyk7W)TJsY$"( +UA=C?hif )lJ,lDoAgeP qp4ċդԟ:믢Fa65Q(%!76  I &;; ^hDomnTZp !|+7x syGhlv;=76-f| LC{aPK9aRP]0KYiy!DYw~w'®F sW[0K5_sɳ(%*-oj)F^nϷ8s#4&4xş?7zwox:yJ(w{?Y|_ExуE Ԃ5ޞ5ړp9^9j^'ۛN/x2zN81]`^'^'&3Ȥ$a =!L`ȕQ_0 *Fǀ B?P(q&KՖR˕ +2 vi'{} m9=%w9+qr(%5b$VQfulIOjI86,q}b(ͰKβ&V-l=ڲ$Nm~IoZf7{zRKN7ɫoQT5qdjYzBB ѽJ%-iKKŤ촞.R-;KQ4piTBeD%\}r+$8%! MQ9hIWB;04:̋h0D$eZ$"20@UCUm74BPK(JЦ#ApaP;Xj~Xx{B?3\Sů/$ߌߍ28/an'NMp r 0͕&JoF&Ldi~~ش_ (K! ;q,BqH$k|'a78]8kN[?a:x$4vzt>=? @ 8?9;8ځA4?ZoDQ~ )_2825TB42" E{Ai4Q>ŨKbx 4ƒ8{u_ :H@'!ɷ}^ BGW,/';|S|3v@؊߼7._̗o|հco>ܗ)D]^aomVy 9½46L>it5盋;!Fqy&z:.:![[-mfQpg^ۓ^7u9S?ϻ /bn'/dIBe{!j!B o#nu!1-J2@\zl*[ D]d@/yW=)MJeT]  P(VXjwQ=h,o/䊙^}_=:4AA-,R,-)Y 8y=ڗVtSz.*cС{*gQQ3#z%dkWr:~r qV[k<*o-m}3K4. 4WIE?H}zgѬ{]M]Mu!G;8ק;k:CB޵stwtwܴ^:WZ;?{!] tJhagKt>l/P Ob|Ft. ӷ!z @e<$tO@Ģ5 aE)݉,DZ"BaRmNQ 4*`CAU &}&@ OaOa F` Ӡ +,:O LP 6:t XaAUthTPKW {AF͡ B :+tQcq?`%x )D`NpsBc?Lp| xV| =Pm08 !pG‡Ïqnq?Ä ?Ä~>& _^xx`?A`0y0@a0S/F, A< 3g#(6!7p;^ _ k_T\ӱoe*|oR<)sxQ1 'bL^#y*I|40Ɯf-_&xu.>N.l*Sm=ޕw.·]o{1T-GxIxQ˱Kv 4M n;l)PY9*4/ RBG% ş[ȇU^ܣ$T& S~X&p1^.TʕZ&k)C}܋J QE=)rln q΄cc_cXoyfRߧkzS}EK_zu gMX}cZ"Y`4IXE[[>vU=;aɬ2{ʻRWc']})}^ c@H@/C;Q+D;TE(Uሣ1ȅ idP @0W!J>SLQ&L޺7E [OQkьOy cw“_F~/9؜1f%|yü`*6f]y ˼ΣyESu_lf%1SKF??ڟ7wSrşF'ϝv^o|tog|YSHr+wfr}-+dJ`<^^r] (8$P@]47hv)P(:B#zYj_V V]]kr>%Mٕo(8~Y QoEŽ0.aCQmc::"˜ۭvk+[#vL*9N0sc6Şc_cF >|x{/ oϦ){>U3}wȱ2qCwzp8Y|Ib6x_{5Є7ϡ* o򎼵ۋ84!rAN?i؏/8y~)d#b_W ,! p} 88{Vǰc[a;u>!~o| /2C3oh*Hurf|2֘9yƼj'}Z4OuOJnXyii=YUˢ<'=!ť}Xz*|oȄ@zH/QP1;o şP(jv{J~M5B[L*%'k|( ]n=ai"hr҈!QOE=ῄόICuHhd~6^ dGт?|4ԬR/:NXYU箰ִ(3==| ;#2m4![)u'h@xkjO}CާO]>zcLHDQzYT}@YԲ& ן@`0lXXaFOBуР+u!pEBYWP!p"v*lt60XiMSJc eee~ ѿjF\`EG^7 xx5x;A ux|!\  Qja4W8 srP/Dr? _L\~$~qF*ɗ~wK[|PA2m_EOJsb>]64;dW3̍F} ;ڨ꿚7[s*rEݗ+{XAW.:'8Zcrffl/} ݹ,ZXUaK^WUN n=gv^9'2{^v+;-k(]& /7$XZxh\fJn*P99av2 MZ_?P(gT@P;2R}*'FxY :>BVOr%I/Sbjq?m 1e[}7kjEGYaWjLR}vx}]CKm/-sC^,=;m_?//[9kϡڻu-=m˪kMCh2O?e{6b%R45#[tRZxT::o:fc)-h$ م ;†hﰀ{laG K(90hJVA=fI{@op~yXr)ˊ[#Y!,J *L@R2g>T" /Ë+8886¯O1޷;oE,O?>x!o .!J_)MW(ܭCv]&Y`A  @Zx @G0_9!]JWzPR*2Q,e/2 BSn/ BOGM ſ*]k]"*KYXɧA*#(S寈`+%ŏ}Ρ]czbYq[UI?DŽ z4blkYOowxF{XRyEL7(jP|N[N۴hW4V'<90<阀ԙ::bPQ:5P SP UQv?5D4AsjAM,/9Z^KY4BS4lB)TBU1zHh. y~Z7;<w 1RK*_+%Ppy Din3fAM$t1f%&wT.xK>Wn0y!DWk5\%I|Nv|w{'ca6{NINf{`)'Gk|,S8C1?Pʿ`r^S|E.~>'6sFf%qK{<[ݱEٕkhuEZVCgg㷌*C{__^zG_\rm^P2r@X;xyp4r{P(4IPENG.z7ySuMTQAɵ`aGҕhV`h2E$:paCF-> #""KEаٴ.NX1>25eBaW{3%,սt5q/#WF9gM 8xuu. >^vƣ-s,m-_|V9cYsxAr9; #<1]O,>_T> cog?xӌlY ̹ ?-tG"yyѢ`! :  8wXkο:蹈/|n"bXqJ *8֏V oB 1Gw~J p pBcC[=T=N(E)Q8bPC Jz칇={? a[߶ݎJ(9օ%#IS[#h tV /4L* ȥ/Thp!\ B4"-oWC4½4ra(Bgig{$e1I-=5%2'X7-yGi3+ͤB2̊<,x)"gk7-p^p5 T[_xٙ{.9wf2ߋxzb2 ڇXVij!T^9I\.]9Beˁ" BBGBe^M e%ݗK[ҥ]++1b?fN\aW+Fh CCZ#t5i1ui$ vi=H4cOթ3}s- UQ,H@YI> z {~q~v*W(C_9@8ixlxK<8F X@E. dEQ!pJ:rHK:]A"`(Kc-li{*aàq=9Y 3?`q6KǼ/9| 3wY* XNi0ss٩G;Z,M~zUG=6?Œ%1 YktgUߧ] JHS_ے=f%2𗿷r_'zS Q- n]u_w_NdB@OHDtgPkg[Q 4D/P{7dOr,s$cm Ε,:f[,l-;zQ[J-ݣp_|Dܒ3<䴳t[+V3Q;튝5dqlHyTbceеZO6#C<ԊwQ@OD"}HXn .DhyC<"qzC! (!MB"Ǝ n ;]6X ,j0K%w;TBg_@zܾcYA + dxy(D1B3G2#H7zH7BQ\dVQb#5 688y|^qTiq_^^E1=xO#o,2/ObV&0!W- \W D,^ҔPz+A7fW(%BFmBe pKFcwe?ON`dő4L*{{lxzziHKJv\5ՉҊ&^Kz@_! =ֵ tU =$ϴUYZΣvcY~kwd}3R;>=ʲ ,1,̰4ޤ!#c0FREjDM!E(BbzA*z/ %j]GP;eȈضPV0Ԡ*@ p#!HM^.||_xfOx+Tsy8o݈rSq'wd>S<51ms1"su\e#-m4_6zGxz;NT*Y[4FὙm=pcoNq)5Ǖ2^cY 'g= \&獬!JA~(BB ҬO0^ƒ4"4Y9/THȕw ~솿&F%?\dTϨף??\̌a-o;k[޲菵qZۈmdԕmBe(*b5 9hg]i,0hK#4WAK ۗ(hD$<"Gw <g=WBO=F8n}ob `QVA - aB4T@#4u` i-:XyŏKKi }L|6_NB>Sp Y%^>mp,oo>ikUig--[mݲsYYl?C'SvU~x#@.2.ecB.P؋ Y RxyroB񟄪P($ =rN-Yo-U Xz+:Yށ(6+zϷ޴)G2˗pjWѾssXH6o-?[)m_?_ԗ'.blt^e{teF4Ё:& mP 5PQ($2x}!⑌-1HB[#A C@(54-1ń[BP mDofGwVݶ;xH=L=rp]HGO:Rqݸ+HyY^{3_g4[,-__N9e/w毘Sͩ7F]??~#3==捜7sY3>}g98-tㅮ (ҌP& Do?/r_nE\-zJYP(Q ş+^C4zSh;/Ÿ>r@ȁ~vM_j5oSO~e7i{E; s9wu?ɱPf׷;j8w~lm;>bja]ߊiµ4w\6@ۯpc/Il6[$ajoW ?DtaN-yϖ ֣~!`G@`xBLc34|.&KA` $ y  2f vH$!mD8j*&?@SK#y=h?.iNoTz!^hEC%4D-O4w삣6~ݶQTT)-蜭5+fc٣Kgfޮ3r>|G9{o{vdR9E +?Cs.X\ܛh.[7 g(# Q<AB'υ5.z. şUP}w_.KeN ܎/_%}X$L1JZv[@aM_xPUfaGX;p[-w_Y>.w,0SR `; hLF}HvFQQiMfۓ,Tbb`]A2M>tfzh{, ePb&b(Y`^PBcm>چτ$3"ԷBPUL FO:tX@|OÎ8qU܋k d`/(%>uxO~oG(8eL4/kOa s>"#h1d1'sּ8,[ %L,}7ݖQQó)ל8~ݑVb>BP]1#TX&dk0'Dz˥w]L?@!We@/4t\zA痮+&T@.z?&H|OkL?cbbݜ!Fv\>Uٲ#Ң׹n69B>HÔKO'!Z㩰it/ޤ.~t{;E4 P;\L a4q}腎6**QH@fJH/Mao+ڂv7R( &KF k CzOD˕!:b PEkR0 yޤi9c}1χi&ފԉOɛݧ5cI9i'rrY3 ƬnM^J1(k{ج:eOS5vS믔HXnm)x+*wϑr]QOol-8.w8sr?OJ(T@ ~_r~@HhIĠ S?ĭV0b_(@4g=so 2ʌlgQVS˿ֳl̍(6GGփ7%O>/_6GD[%>i3isxJ5*mcٺ'Lv1%R]%Aՠ !jJP ?=R-Abk.W+q>y4%$Wp+IK${ԿF}7N9qkf"DEjh0wxͶȐ*a\S4kO%ڰٜ,uea M5%Rۄt4}b$ F dOA\B&2QJ&->J{` V `%4u]U/1l$z+ s*{L( ⿋@ʖ8Lp\ÀuSV>!] x=Ґfc ؍_}XܽoNʋxs=߿62ۛU2N7~0e_-Nrydo/U(XnL*?oa~+fAӼay٥2d56eDF87ט{Ήf\?ɥiBE]?$r`@=lf{ B \.wAP ߈J(y{t #He_]sFB6}P0]|ǼVvuGQp0xn^`=?[+mo_W( ;% PS@:ACS@`@AE64KN$U؋]5XE 63'C0-ok<;yqFϛқG:Qfk7 ?_o~~ /}QT0ǼydL{J{\ Դ+NQC‹ sqPa.X/|d4%#Bf RyL(#@C+Weo~PQn%r_B^d.W LR-U~rTۓ9 m\!ccnE|qi'dŽĎ4F݃}9M؇i&~ Ϣ:- {;qfU,|EJ9N 4Ky~>љH`L{KJJR:r+ şwvo ɳ ,ʡ2ښp7-Fs ?fE>FoQF`|0 U4csiIZM;' `?a)1ʥ  í.SlK^Ex Cn%7 8G2J:;!FTt)}IM)PEf'#-.>Ezfbzs<> /ieӎ}(ٱB-kk邃|B*-:\:$ed⋙[m@o$ Hx$dkVP%bA@z?2QPZ ̀e%L(@!?oBk =g?8c|D2_\yOTv(ZC06!jaLr.kQo iMŏO {(筬,3?v[GQb {YU.dkeL[s1-3--ϴR>Sm5[Z!֕^\rGa8C>hfC TC2( aNvXIС ѫ[Li,Hw B/'r]^`€+~>2p[^8CP/" אj) ؃Co-rk|&O9<,}f\ؼl2\`g^O^]p7Ʀx3{P+7I8\7z+rKGvRO_ɗ\q״x\7{G2;0sQ/*+'CeKLlr|`.O!nY01)hL*7`C<`i&}& &_@p,'tBP(0,QvR  'BD|PF~K x~g=ZHiq밊`էZ0%3eFlf\]=L[ej-Ʋٝ+ٮOz #4AU#\N ^y# vުd%UrWGdۖ٢mh[K)e16+ue+TǞ= S=M"b&a^JMh3:/GP Qr?Hc(vnx@"i"є>HPI @N Bmp)C[[EB tS Lw B"Rh!qA6vY4ٙʿ%|U\kub{|/ن0;dK2Utyڕٖ֓:a]§P7_4~y0뀫gԚOHBnˊG?C; I\kɳ.ڋŮ%sHDD U ?5iV(~P-H$/K{E> t@-Y9@ez6ש]UyB#!++) n=upaia;Tuio>oKoJZz泎Q2:dOӌ):6&s z4=q?9CTA-݊D  :46V`90X` hpXA@H[ږOP(Ȋ[Ʋ7)0a`w; p ,c9s|_xIyUӗſo1~4F]:_-x.^iW\ZFE_|QC޼zE9Ͳ+e^qwzF nOwGyjxaF.A瑐_v'XLK/z#g/15CK$ڰGR&'k)$?Eř>}MQq@3)aHaTz2FX)@>Eݍwf+ O^CpN.@ @6rq1~ꯅM؅EK)1|dO6ӇխrF1(N 5N̟Ϟ /*lXxg5}VԲ~o˥ >9ʼ)2SBvr+B ?$QP ܎P"_r +rTVϿ mGˀBn :^tgv*ZHl9=EĢ?#axʖzb%:=1=#ukY&mvTb}Zb"4դ&ZMG|t#M1/~4=Xi\K}VSV$|.샬/͕l8_wcYތZjյ6dΐl6 %bAޡJמQTm,՟'tZ@h Z<#ļ"@ʀ_οdUR.ĀVPPT Bq yf=LlW*0#Y/KEOG-]9сrp&S#:@ _*Q(MJSXKuӈ񍼁YKPvCvVۧc?-5$Tβ6.-UK==KbLc#RF14]JJ~ Nqx7=)<µ#aA4Z+8m `1haj=REdV B[^)  / ?y)xA?B""@5ӼLG[t?C؜91GSS44(ubMm?w\xuANUx˧/Ϟ{Ϟx=@{F;>yE_^KK|mƕg|dڔY?VةKVTx3x#.q؅ P Ke"AnWUA @LD?J(+NaAZAh´d"@ k [y{#"sNMߺ~l4Yf?M%}[-z[7-bz}=]Oq>b [G1---'*kV!%gYGl v&OR_ULYތ7gn} \mל gj1ȟj_{{j%Ws/M\|nv߉zǺyww9e3+P/ ?]@2lм @D(aܦ/Mn'[d/=l浀p yyuo2}!R9ޮFajFͶ~f=l͊M׹>r @[B1 dS;&$4c:JZNCzaF*ccŢh.SA(`C1B0c|0`p@6}ĵ_ҍ BPr СBVX8 N"4OEi sEoЛ1莞k[e`>GwKiW*{URbOo&Eޜ?#' =lґNFVqVG.\ɗ":X胷= )PY VmY>NLTY n|ֺֺ'uuXhKU`p3H-E7:L>b\V48ac-gQ 0Egя@/tvU( Bm%2!`$  <d@Ѽ@HC%js)}G+ :@sKi4Ϲ=#9)b,Ludk)iW+'m =b/IM__p03.ےu#P](Ȓ%y?TxBϊ bڈ] BDl%4+Sɹ ~gwQ_G\o%oqG&J%TV tvYJqL$uM]cC-fCKEnW>׎IXZ}rBWGH̾sGHhC6tJkl|z e/$fAQMh IhTr4C7tǠvшD<NP谐%R+ BW#4/70nmC1𚧐,dCq pҨ5XW4P<0=6>LünX%uٞs idzg,zko(z䴃i}C ?d-Ʋ+7ݸ2Øz_ZRjY,/QZljGV1o*+~ ^Kd"AVwQ5QQ =DLJIN/^& =ٛF+.z굁mkjڙ9k_ 9=q9jXzNjewQ/l-qkQ֑ɿYYv[U2ֱSl ;_S>1 XI?E/D4Do56Iż y3N) BO`C'@@@>C.;?`Jro>b0k<1'?5_||!Es|S7{wy^h.rw.ύ-l[P=9+-âiycrZ\My+|5Qf[qfգ˓Xi!tP j2a ? 'TT _>Pz (ş_B#JW/We)4 P?1 Tl?E?&T2-= .ޖtM6&{kKCچ͏n32?Pk}WӬ^RsVgu6'S }a'h8^qBC<)(TSC94E(D>t0`"o\P( ?2 Y 4Va(N8nP<,*+}h\bzBZi&`"^1 *3M۪,.0uGhboa)i;٥[n M/Za@`9^hCY(@5G;}Q )sph`S/g{ bxڇ5ﭝg~ch@b;(/ Jă oy8"T&3@S&.*]ҕP/zK.G'G/G* :J\IC%I))SJ+*2.MVF4rmQ4L (RxΡ?ƔU]/#Jm/,?M.z) }E룪܃.!eP&lKbYV"aH Qayp" V"nY$Hp110KS BP(l؍80$rV(䍑<ߑQ)ue})igYxTk5k"ʂ)ݓ/h"ֱ(i3'q$\yX} BP%vPBUD P vÇ+|:')~ۦnMviQՈ3\\n4_c|N[Wޛ~㊻Aq7{mMp eһ{VG?fՕi};R{e-ob [Z.Ji1ZX-m6q.ˈq4 :cM{>z{ C@4nň<8'+%mLw3 2P(  ^:t:48XFBX\@ 0l^4x~\6NړxHfQMjA;4V [ք|ܶ60=޸XI_ќɯRׂZe0ŽD@N)1(ƛe/䶃|\K. tJ(Q ş*}aWmp/1.J/Bei$kj1Qw>x9!jmx«*Ctm!m2Ok<c瘞t1+Q"P>|.F?ƄE4E5y8,7B:n~`~Y\BP(~oȴ S`?P7HCⅈ\@_<1zJoN'irۗSN{h=ӌGi#gSZ_V!7`Lͥ}[GD79ϏQF׼Gvb#6H]VBFhs?G6>cqf3#8/;Rr~']maŕq՛߭Zb+n޹[߰yk7Ӫ I}y ?`~|'xc0 bţ%dP3-*oBVȀ_G%TJw~,rPi'+/A\>2Yze0zæ;kOja˔eڔak,s~Q/zLtbJIDATTh2֕֕6_״!= ilNZHkXD z5I~_Eb q=lKB E! mCkxPsQ@ EFc˟[ BP(0  1(`%4 ې3- 7|[^E,??in7 flZ9?~>_g%Oº}lVLg ŋ7+}.~ޱ;swMIk#Z:XFvr܇b܍aRiӹ' 9%* ÅYQ T`@E9``0" H0ө]gyw7k׵:=y D53 `0U4o<@ UbSЗC;B\y&|-%SZf}*Xs޷]V3mXW;M]kйsC;K3ȬΚ1N=,劂Ca/$j?q^'뱎,mwݥ}j01ÿ D[Ͻ6}zzZ:K~N5JX:\wܞ?%-Ω%87xS8޾󆧡ls޹mFً ;̵ʭs[-A2F/In隿B䇌(q,W?%#U-Kma#[`3PJi~oN `0s~JST=@`4Rj2j \QDK,$O嬐C2^k}fm<-βlmgGvx{wNۇzCރ.|qJ;(z%/\vE Zj۽=j#GOe -:GZWwAzn{RqGuD9iZv~n5Z{huܐs!>9c‘ٻso[i`=j{ɳ虒9`آ 7g/hWJ/',m~6EҊ}{m칵ͽ2]~)[6ϒ{+7ɂbH&09"6-)ݟ Tbĉq) (]7ת `0q (2PC^'JWe9JFiu]uޏN99ć񉉹kDEFf kS֮>lGmUԌQ-u^$dk}76_׮e vyώwUY4}&ҏ'뿨;Ci%@z Zjto?SGehu=.TסMmtN[ =6vbpVꩃ zLӪ'򯭘6SSwf>uWorg*|swoD[㭱%F~y#򠼓y7p6SO3nh~R.==E:@\@5U@Gא3 F5>ƃ-6$L*B*\ȦU7<)Sz\}0Y"dX"bu?`s,?ڗ8WFXii;33#[pO^Mi3ڧu)k;;{#LJXZ>.} n՚ṳȥz3=^u֝ZݟJZqHkuC$Tw۵׏km5C?N?"ⶽ . \ܒ:cNnΔ9),*xF={(X~"ksrkq)"Rp̕in& &vp 1ȗMٔ+`!81@LkB%twYS`0 ÿ;?~!ĉ%RT/N:+|/sh/Wȵ2K=JkkQ4iz$LU=<"t{*zss!-mc*-Ecgmg+v\kT֍O#z#ԏzFN=嗿1vp# U̙@C+W8CmF M\]dwדVeEiJv1݇{?ps ϝy[䬧O^69WVUa(JK9:'!D?;MdqZN'}⽗"ha Tx$(x%Y=7Y,'A pɿj `0g :%~ȭ%'<!갉Hg7ؐg?e)^-&{Ք9jJŝmۗNcm5" w7~[s6xm^zg K^Ңnw>cN/r?9Dqn;@7EuV=>`Rn@7t~R=~u)*&K֚ ׆!VWk=Sϻnd$3g}guFΛRY=$\vD|{y磺vmp|Q9y uBNMN(}UiO{W俳=^yE,om#S%$}|yX bsS;ӏѾh! >fDrqb*_HGtCs1 `0'p$HxRXpR9wBu~耼C _IkyYA'+򂾧|{|z轫zTq%M2d̖S19/0bgeѤJ@B5QȾ/@+4 =H,>Kl<@TTgxٕ8jK#!1״P*';G9N5$'~OĎzتVSwca?ΧN[{/"R57iuV9)UCxVwIc0b-n,[ZQ*T埛< ̑+{sYeIn /=Z%R!qyLRhNf|J?ydO>!ӟ!N2ߔp1 `: *ypbZĖTk^RU@Q('EIrfXYZ)h,1""{=ړy3!2OSV _ʭ?9"ͺ?uc7ps'fDQźnztWEzF!n-03RNuξv}\(=?J*_$-yhi= ;ow([RJi%/g [T÷׮$;e:Mj~s<.As'ȇҋ73irܐ8hGzߑI>?%NA$T uӎ`0 f~rI>@o t(QQUm9NN{^EeWYsdltR)vj}ɖ^d+0ޠO"ERۤi]IѪVěY:pdʧ}g2.bݝ } 7uq7psZ5)*y7QdZO,s剼킈D ^r=S]]{hcqY˙&z̾!+Y87)W;^mY=*[f~*ܛm,\µ/Lw:xK!p_h%q*(,2f `0#8(NlNBƧbb˛jJ2hI)[e%Ox[QIP }%V]aw` c1u 2e*Q{gjzfG?QrMyVdv9#kܸi#cwp^4v|7HmdUbֺhG]ϻzl|NOo-~@Wj?N.}sy EќطΏIm5z+6Ym[ UVgnr zۭ ƚ ~]@t?ߍ~; dYk4M'c|?"\33{d<@IWd`t{.z>:#=w)YXvE%sω.J~v~C9kvxN,bΰo8&-zɒJw+ۙ滌R*s(E̾T2^2P(射81nSnzeL`0 ?}EG[+`Q Cv=]І|"1L $rn "U:''xR+o?VkZҷƲ^Io&vկH6彆Mjk^7uv/CtnL qjnq~MzwC-EP:[5Kvbh¨u_ڗ-,tƬsYzujUK ~ (ƻE7{}}TV:j[6SꭶV\"^S3?;  oś\TU>`0 @Ӂ$wqr!RHQBЛ!JĊ+.kMwl:VvrjǵjC^AZz =K1P~3 Lθf!J]uRzwshzz. Vu=e͌v=[ԡ~Gv-y2|(ж5Y;}?{)l}`͗Y.cO,ySȬL&sm ,ic&D6qBKÃ1^_Z0C`0 g~Nh/$DR$*PA;$ChIgL@:2O^g=8c8عzؚf=TzM}d7wxM)S Ck* .+wTz?;*ꋽ:|tUs¶K7_xgh=njwV/h6v)ZS$Oq`nss Ez<@k=NګTJ9KpFձ¼YwzT} FlȬ|%uo}̷ww-u5lTr}urLpBn۴fzyIc<:?o }Fj`0 0$9i1>1TV'r-vR ϗEYf-ux_=i[_B,s|Hкȑe'?׹0 'Gqq ow8+SW#psqմzcOWwԺNVnbw򟫵Vד8H@n~"ZOJ]YiY~КDnmqW`mڧf *-s|oh]iz-g[XZ%O[XG[/Tɸ{q)C4@a6U]L)JH:<&`0 ?}M5PI:52@|@\m/g3c՗2K3NZHY9INgšKE@әi!i.:Si~BO8Mm6޽X8. UӪPuWA{@WuV@nP3ݣյܝW @{V?T3ݎ IYArL'hj'V@+ZWX8cPZQUm<+Le ?.}^[z)ɀN*% aF.+q(!pT:&`0 ρK|&*Ƌa)6UP']3QLK$dť֕Ӿ5.Rv}{oC[ vEO;tu<4S♢%75lr9eɫhHugpssӎqrrp }q7Fp^w ~7 u 4 `vg\C=wC9Bc4+f #=wIBy;=}dwҳAaJ2YdI(sZCgc}O?opųҳ5g*W[6<Ϲ\ƙM_z}%YvbJ$:q'D7 `0}܃"/>x1! TEtֳ T:oYgãUUwqHLGgu_6\ӯykUwٖcjYۚwybvyvغqh㭸9}:D_EzxL?ok\Jn:n0a"s"-n{ؽ$m_Z;:ź϶rr͟dJ()rVx]w@vO7[Wu~R%'˄9SV3<bC?bJH T4l<8o}o0 `"z(( 2K\L}Ĉ<ΐSc|yU捷N߳k}ݡrTJ`(j李]'.=Eh~['uklcrQM},iwqX݈*O6F (G husju I7<==\ǯkXYcU*R|'fgdz)<\rpU`sgm}-:նwTkwi""2SCAtтrɲI']^,Nh819s `0 j186=G%UK,m89J.`_Bdm֛VP>~3vɾtF6G{RVgߖu樌?|~#<޺'(٥u3ߕe^>sowMX.pn0b"31v=|9ZO':ԟ0s6[`$ xW:t!~it4rVv,\a~otw-bI|U ;3{J=k=gx_oug?ln,.V [).YNyVMiLd{Zю\{>d!,8OhC *8e `0QH4Wnl@ dSA@F2?B亴C9*d$+0ʹ)弪6(qfЏխSK_={_|vc,ltlٵ;b5C^uSdWzIj`rr鴣Z^~bmzY}nm3m^,M153p }cC]*Mz|uw>7ӯ]6w|iT, |?0\ajYe˽3eJ꽩'l~3^yRZ~!XNf0\Bw0ו H'1Ш1`0 F@ ֪kވ]ݼƜ8uV^{SEʷZ9K'&.Z"ꏴC6UeU_zoǸWn]^}Ά ~]Ee߮fY{?v7:߹J/.K򨤨{r=syS|=v# ӺFkznAEp tҪs zsB)~k]tI;v/uC!}˚X~.z;gy_(_-]##qUCs9Aj!sF~Ù\8O?O< ȳ.& T__}'&`0 <rU%y_Mz!e)s)$NaTb5ϰ՞}[}ǔ) x, m_m-oHvz36WE>S '{tװw @q֭Zwj5S?wӪC9Bnq=5MŋKۖ__{A[yO:.}{yE1q VyVz{G o>o(j"֐B.y'_zj  mV퀦b]v@ϻ\?uV7 o41?6(75G]_ˤC^ZmFv@AIlZ)7VkI)WuO{*DV)|Vޔ%mr\%ī|(Ʌ2I 3\@1e3 I*i‹ Xbaꉿ4U0 `04ߗ&ՏG,l%I-j#`rL>RqKU>k2Wvz^=ߗG}{J?cCVo)2G=7.,m)~ƓGE::- .e=4kWH&}fnmZ]GA_6~qj-NӡM9j!=M'n?}aRqz/;wݞ3{g=zoJh^)]S}U˞=wy({>jm-yr垼^"cn)N`7^ :YK<PꩡBdѿo\`0 5ݷƈ'z]#];rɥ\%l %ce&Sٴ2)r5=ɊmnHLH>J^r{WWZ^fh/ ;gžu^zWRtCSqFncnȿ6؛r]V[nW7/)V{qr UrQ2U {y(#" KWĉ)_HMƐ`0c_Ǔm]F" C0^m}mUG FEQ@-1Fxg6oj0 v$T" H4!Lr)jzG$9QP 9[k-_;N{Ss^g?zgj`uhYֺVql]zMzQk?!?q~\-o>$ô)݋goxEϻ'xSF@cal홛c wOI?'E9Z]G.-p}qtr-'ڙVᄢɵ`0 Hk9Jlxb Or:1p ~%Hz*/[حjZTćxN_XQ}h~3jzvO?>.ljl ,բN|c-oܓ~7->B0N?5=o%j 4]qqp?vV*:󵞦+MʂWXMeɪ;TvyzjiCRO+:ooW}:ϡu MVe 6% '+ʍ2KLhN H%,Dh0%A{ʿ`0mܓfpŤ@|@pYDzP}e`1A,TQ V o~O-1`01% Tl"L?pH#\yteϫ|jòx5.Q9=ꖔԔ>^_0b]Njf~5ᙢ%^7EZA\W0ئ]bPApyEDV?R?Zjw[KZ 8?{ҲBl'7xx^Qjk{mV]~+ܫe<(sC8˘O6]pP*T*I΍ۃ[=`0 =+*@_;|d#@*g0 j ɢ;a->5 Ar`CW&Oej#Oo9#rZO텵ރ D[@HP@8]N\?:n yk,msK;wndSI [|CcRgӍ R6zkIzu"=w"n2៍q1pCdrC[o3um][70^3k}.d5=۶ZVzff,ʰ2 2_.=x߭c{~{=۾`kgŊw~t99&d:Y.ӡ  CM]q Cz}fևU^䂼,wS r7Hu X^]h8:~5OF{GX"; 9w_yz˺BZB6WGY7˻=5@ޡ cx~)\j[ mri ßɓ~O!NPG`ȖL9S9W8_"R*Y+ƿrU%WʑnKᾡux,sNjk{oƞ暍r_l3W]kV5Sk"GeREoV_룻VߡzoCi|*_oئ?}Fϴe߷m lIK?-}9?{x{_.)7ڝEV5:<]F$9P^d~ЗDU=T;DT $'oqҔnF`0rHnq:݆/FR=!gCݙB4*t62 lʫ>1 6MHlqt}(I5Bj*8c@C)ZHv`0|_,p,o@U-v"F ws0C-e|u5úI+:]>jw<}$h&%/Fhra`ӺN~ٷKֱV0q)S]ֶZ]]⎵6 vkvkɘ[{F{s(=>C;GXb93CtNkyA<۹?/f=mH[2Xΐ+ ^~y9r-|D>81VdS:`_߾`hN6A$_Bb䩉z[WQ`$ TH]*HU׳:=yQEvMkxٹv j:K+5bp5P̅. :}L@g8wbt@,v8(i%>klյLO`hw}s ԩbs]:'i'}C2*Fn XXO:9^gggim#w)/\|E;:v_~uFr֤%诽MsVX'^[sl8_rI']ǎԺA_[ Mז wkn6睊qsp=\n[!^2=NnY=ݶCiZ\K[lu-:Kܙy?Ϝ2uZe9ɞ<gXGXsR-dD4yDR9+L.d41Xx)#ڃۜc  Oz2w^VH2RR@:JxY&MVIl;OAyj;_ 97¶9lZ2rzb `omO!REr$֪8|dLz|fijg7u8'Ls)x6ȶϙzb=?1j]Gk k4W?VfkaIzrv~r_U{&=m 5·>eܜ(6i3FWfnhqs.OvZT.Xg+[bhn N1NEr_,xpVuvý/пYO\;F=vP9U?];4g>6-ɿ{_V7 ѡdk1p /}r?L: bA >HyGMH ~ 8twwoV{<qGSkaOZ 둆 N?Ht [uֵw85qglm4pyr~ӝ:a#u}/켾*T7: PsY4~SPT4oՕjZ(OF2uE-LW`h[# VS-xi`;? X;YnkmI$s$>jڛ=խUKSٕDsܣs 6vܯ/۝̵_.=n.*MF&F檛,Qխүg!zڸ3v뻫﬋9aO9[c 5lAkyKo Uaw$]H^ ֊ԧj z=L/`@ BQ1+КRzgr:'rV,e6! `u\"M묈Ue}WG<9yۋRHuW/cFJZXuu=kh(~!⯽~K?/R3_ˍE];Fn[յ\5(0`VF[ -&h1>nkk]Uz|Vppf㋤(7e`Zv׷.kkest=ߤ}vyFg/W{B8P8(f7xn*xWry}e&Z,7ӧpSJ{070%g+> €R gi9 oIh?+k}IK= & $5Y'_Jx@EMgj[ΝxH@ GŰݩ봆 _Ù 5'&:mWtvqHJb<85{9"q?dgl*P=Sm qʅ`=/n=rV'r?|`)sRrɢ+:Ta|"$# &zuI0 $NqeTkK1[) eC\M a^U:J*NX/,o//\=P瑬99cCeA;|&zc)~mcAID2g:Z$I,ҫ쯵㪎x߿Z3uV!kȸ[ nhyyݦuiR]z|VavQF^뽼+ n yC|+qhm^KowL yNJv}b*CYyCH%I]8QȤ"k Ql,֧Q"$&s ßa_Φb_v$[AN.ԗyj$SKx;4\?@ n|V][[d-ksS>|닝 > Ԗ>Q$>T| >&YII&] Q3*TotȷYjL𭷏g FxnVxVpnmmZkboa3ܭ{sUj[u .] O_=%KіZnK-mynJ#͓viwٌ=a+"r%@N(rz|Zr]< $"@Eh৆Diԧ1J9ͮ`0L4mHJX,b$9^VkT U-,Bieqr9/oQaHzvP?Os>k7:¶S:>yçjk|yj!^,RL˯ ,|IN$7WPM=j?8C @uY$W_팂'|=!K$BH7Zz8'FB2b[} V̒nQ;U x@JTXdAAըR,a0 %seLJF*!Bb!XN d%_ʒ5ͪ;rur_I?⪯Ӿ1_?ܟR4KҖT kuVO>8ώ)}~zZZʟw Uz zպm\ ߠ(w, -sѪ=WD̐V! nMWO+祮O;5-O ܕ7,),)~HНX8-|̈}C0k]a(YVNkR$odTUio;B*RLMSFi0\wAnA|ilp Dq.N-~: uٰi 5q5lʪy6yjtÖ @Uƫа0GxKVQ$6_N҅[ΰt 6L]H%8;~h%хP^%u?l[VPasR9g&`j1bK>3N@X/|A5I*>pYw@ 6{o%g;Y 1āTIT< R㾶d91>&Gd ;agyᲒkJM\{"l+޺kpRKi_PQוKꩣ^MEkH=CMWĵ\;+tuGq?6$L͈"PU{jt|=>0S-%YO*y>.k|/CCSvݝ؏.\X.Gʙ dl'Df3iIq%TJZj ~RNfe0 pӷ60/qNGH|tjh8!^ޙCmV]g+)0yCºn՗$F̺T/wx ]hA+ubVw>C9*iE;9yjN"'ΰ97GU8ֿ] q=l\g9!Z"_Uugm{[ܧoIxtꅩߊ[OA@kvRj%in_C~=qsNZ3h-Z[P(=v#-һdL,ߵVynu ;]4bwŵY|Pf^c'x^V/` &ΗղS0<9qGUCFH5=@pH `0 NPV m2uz99x7F Qr)|JueVԋ̆Ca5Z>6|RK̀_ٹ m| k·TÒdO@6 _{?dJL8Jshx 6-uFPTi%i [waW!G{WZ%8:˝v<Ήj4kN h搊jr_X{_ $N\ŁUK-PQTSF Jl|/k>Hm#(MkuuM^gk?k%7lY0gk`M6천M[bP;Znة.ouf۫\1.cEYVFw hjߧ5AnM4Nr&׎r*a]i q?Hn; `Jkn?)Z'n1$pa%yŖ-TTrڼ>RPUpL?bzk=3Eސu7ryʴ0lWIW‡lG jT!NL@׮WBxӛ.WO#u jS e"ė, jT1tnO [ϭkpvN1^psT ܦHU£%UThұFb~ 'OkS~؅νuςb!)v΃% i}/$6gVpj%c hjY )/z1G=s[h7Fj8{lnWѩ`0QMmic@&\ɖB:D&zOm(M'r{FuRnf^Wy={'\u4Җ;Rzcߔ'VŌӺ%r^IZ$cynw|V75lA2`4a_d̟Qo[Y ß׀&(K[;4GBb#yrPmM4Bqvo`뼺U·ᕚ+`+;ˆ=PzMUi/Աx {@Pd1#K&r6䛛v[]}@SI T\MSU\B#KU7 2%xM;>,䫫aus?. 1J0"$ ~sB68 `^"d|F9:j%׭u@uU5f0<}5A҉2 Ҏ^ޥNc2YVd$!Viϳeތ=N^lUq5gEݢ3@ p '":_ՏߤǓx~>mr罿MZwhu-h 'YZ[ju[%)ru?%Fxcj*kC9e֯ *? I)L9G? ,7/3>EBf[sVyBN\:S蝣⥚$.79b ~`!U%$dۿ@[JsQq[ >fmtSά{OqNջ\aݑ{w'֌j;):Y} yd >P߱@;t7RK!eh@ӵ~5-R۫Tl{,]k`[L b!ĎOLV㡺}dT{/L wVNXꯜ`{cN tMp V<|خ>ue8Hx߼}15 i5Ĩ*vK Oz N%}ivzO*. \Vst(P9 Pdo|mjMi59uЎ,@1Y0<@[9I%f?&ԟpؔ^;ݙ˪;'†a[MiPC]IPU5:<,TRHugH[tK"XL _+PUԱB4SL}2gr-1 KYVߒ5vKPey("P)mXZ:ruZfPb~'~Rk]`=n[z:"SQ]uVmw5a.k\͵ 0,u:Pk2rL[L9]jч''zEb|/z ^\QDH2 hl f r%ԃAt3YP7*6P2R#:gŽ_:]`u3,vpݕN:lSt݇4>Lj-4d|^+Z6P l(j&'[1UMeB-qQgR* $qnEh!>Wh*h\LN!N'>'Y7ɂwׇ.kuC9n|_--\ZBts @]cp24 SOOe o&;@^ $BZRl_&'YrvLYduAdk l]=[]}ξ.4=\&mYWvϿŵoN1w! [5{W(ߏD=>NpvkvkaЪ?XM+kL"6@S; ̲_3*J[vز݅NTNhl< G3A-v(aK_1*@IOMg~o=`1uPD1%TpN)W^N)ddd329j~*rOOk*02!㹢J)nqZ)>6߹moɞ${^[S-V;]54e 14ü0nhiq:f?#~>}$N8߹G=SO'Դ2GdwS /m;g 묗sFȏYe,?1+#x9ryo'le!JGUF n?eBX{#MZA*\D!X:dJ 1F}2?.ޕk@ pxmljYn^obگĥ~c#"а6zCrr$j!ujZbi\:G`7}Ek$nAGb| ԏl//BE >{ToDꝗamuŎ Ϫ^>wzb:,yMIp6=$"mr*%`,&Pk$w{\; bĀ2,i=M\mjY,wT!fg==~~ޞ=W64G3O|%&-=QBx krʻ2,qiU_RDkuMvk ǭ=TVrkj&\re N#˱rN+7n>k}d<9XUi֩'HB~!<. ~`='0aqZCzS#Nw'`0x34, ݪyK-*Ts<+ć;D^KPkUgl~6tŶ k>N\[]< ni5soJX&Ab188TF]{}Sw?}  ,XHLV6AwHDbQ ;olX &r/OBvgطI9%=AsCPb%Eb O|a#d}L_,Ӽ3BDžfo <8p/@~lֽkg9ns+XB ~Bt}OrWK6 T( S'2L ` K\AR j\˝pw: jFǪs`紆N.lZwSZ95}V}I]{|@:=U+ 6HEci*Q0W^z;ͮ🅧Yod/ 8Q:dJ^ẑ`oJ iWHw!XI!C%΅>͞x\ r5g9LPYFr1A=WFtE|; ? >`!6^r 'D/)"bƩ 0,Y( ԭUmUٳa2> yR;936NO3RҟH;-6vFSZGx(X5]^[u֭ZwjҺ1?{W[u'narM4+' J_ ˕o W9lpV BCx{FEUaSly 6Wf&^ml]NCu͌P +1E3(UP?\.w[!WH^an@P ˹ i+5NթmP([lqյ}jKmE'UFQsx:Uw {zIskD C'iG:mWa"$k-m dxu\'7猱ߔIվ%W@FI)R(ɪm?iudG=Oۓe]dvk]yځ: Zݐ[m 9nQ vZF=cRs/z*|h?|#xt譔|gfOYR8кʚi?Sg}m)8M.+R%T=ljf/\}'`0w]Ε!žU'qs/,n&_npNj_rMLr-S:8ÎN i<ř 5NW@x  b娯Ձ%˙q7ڼl.U 8(qpNQ+g: "w'&Pwjt~,v&·wR`K#aӘ)=ge;D6T)}x顺\Vl c'߼9a~|N ςk4 vkT' Mjlȕ)\&ʵ2iyl/ J'g{>|],ٯ҃归fC}z$`Qoɯz5ǮaNs8Fkv_ƿW^k hm.Zjn4z|Zj& \اvˊKz/n3.Mxe{sZP?_aqO'Lkuuf& Qd' jPmP1P=3j8$,ÉPgTA} lXLaκK-u8 a'Sfd=4 ;8ǪqQpW"j8L^ٔ(] 5,~(x[+ =r c=W@ I u S]kmðN6l }| [Nw;P}j;5Zת!~SP{U*݀]|aYCI(Z`0SqunqrtHcWd(&r%=H5Ey/ގWhZ v] /nS [ϭXp mh=9Om\#5Am`Ή IDAT YrVе,Φ>_=tP$_xhCV؝޸[ԉ =3 lmp~8W{))6VCdgOt' &WR!ǐt'_M~nϑ2ߩσ6'P.ieJ.(blV[w=):K(6SmMyzltiZ58u^ ׬ ht_W0'LrmM׹$b3QLN}2U'1kz|%]JsYGSDOVm'Gs^({@~uUerÅ_#C9 O҆VRN>4z$iM USȢ_PWl)#X U&H?~5Y7yՇ#f|^lMn3zkCE&::w0DKU@uj_Ӛ~ UQX9j5 yP6RkxX`DR3U?H~f@ji)2k6 M* aߩpP*/1XFwY`/7e86lbMPG07ꒉR澞664A&($G'M{Zٝe's'1.\'eXXkn?f([@pPwp jǴ++ǧ\|TIeue'WT[#בJ h6Pj]dٱY"{fVXkHY+X¥r-Ӈ>/#ab "ULudcM 2v@э PN H]{jRo@z[e+JjG%rCPQ š+<kέ_T=MQ.$Odp~uRm K|2]RDuOS|os }vSY8[pOp$JRS1r;bS7 k5욙ko· ~=>@lP }*.nU^~+ꀶy#d왝WfYk9Uw/YRryf>MogpWrSvgk5:9>jߎ;]T#E[%~ԟjBT/3% `7MhqFי4DOlYȒn16'ZEM;ikX냾N8=@P>p9OJﱿ?hUX] egY2Ps|siGZR$I4$ǟ@& &m42yՋ'n#XD׌SRzZ뢍VX96w$_if?q7P'q ]j"S-`^78]lwׁfss6Y"-7ySKs?pɆ2/P==; NY;d?Kn=mv<=kGgic%Hi-E[ӖV/9[Γ ")/X-XVqŽ~$W*X|>LGBןF?nq5:>H'eݺcbSCE3-QԜ켑O~.ӶcG7}۾Qҝw>kMniRw ^rle'Cg1UG.Vm)XuFXӬ F)`Q(Y)$_FWq+l?&6|O715Pd{J'爵k ̃ݙj<4]j*gBulc׻By&7 /nu T6DwvCM^ps#Y+@!r7ܥ%( %s-id8O8d.W'Kzu4+X֐J n (]!l{sWC$׷C`O{O# _v^n:6_#Pil=<<<_15R*L'_ >rщ@jyDfvƥ&[l_Wfn[Xr}ᯎN:K7Qsa٬_Oks]&G&7~g_[> 5:e*_\. .!&DmM/A]&vXyCm{+:^|_ة ufnT0*&e;xwy#'{|ƏOp!$p74Tne ӹs mC6R'!hz^=U}cwAESlXwN3˰!6rmxZN (cn[' /ofq*o'Ϸ#qPUA LөNuӰX{+/kFj!ԹQ~VCղ@i@ّkKh*ަF"; {kFRJ &B}IXS(PQv9}HdI4u,.8`j|vK}:9Ivh5͂vN*E꓍z{ޛKج1NMczuzTэFG_2y読7m~VO sJt(]URIQ[8Fm mvGDãva:z_RAz{f^>+6[ws#nj!]`DI?AikkV$H soh W {wkG;ɯ^a Ul+(5\ub wxxxP(\FÇ_.P %r7TΔe\nk.#8{:F惶NNщib˱O7MZߪKZmEWѬz~сiktэ-kefW!WMUH'h\u>Ǵ`WT>9w};~ҷ=ߔj{Pu]ehb3ӟ \ʥ$\? Ά(UW5{ Bm٤n϶F\vLP/S jK ݔ<{-VXL]+g9VX{ lxaOv߂dwx%Y)/fse2P <;}}Zv0Bve$+3cP;&QÆ~Mub@u)2'ºO}R0[!vZG5R/`7^ohdt|Ae-9͎  Z@`aa~)'L>ED(QӃ vXNp'^? Tʃ5='_IEdiy__PqiWek/~L2Wۘ&[:QzltхF'#rۺ쿉dh[9ݵ}C[OLH=!8Y[`^>~rv%wt,rnϏ< - <<"pMKet>mkk_RdQ-9^ӂЅNq#bp Sr,=i Xҗ p  p;H:'!kfM3RPwUz TN S,ׂ ]X{4zwDivܠkcZ{w|M̓(2BG6S&J`s$V74Vڳq Fׂ?Z./qR;6|$!UK y)&B>V'әWr)'R-R5ښQZ{ڷ׹%/ ?&dŹ_*WxzSCmSڞNǦхF'htѕFgݹm5ps"ڶg;mwVW*fOǿ9O nt4SF^:hPP:LGe|s|KV+ VQiwqڇ͔S⬖0r"sd3q%ULWL ]trZChT=!s8@r{!Z:NnYPysT\ )tcJw(T CɛU $_wwHLWmx Hr>(vQs-/ 9k`l7R7u%j:cH4w6磠`/){Sܷ R rv̏^։>W/}VR='lst>cIP4GPEQl/#-uJVǴպ-6IU҉ncJpHT$g+aJ;879oqMjZWJ4U^u m_XxLxȞz'J>Wo=vLэFGv Tn3Cȼ_nלo&i`&@D0 ]_]q*pg`S B[|;v)\g$j^<1P>+E\8bJ(6 .. A-4Z:<<<<$%t" P>`0Akg+6cϻ{/aCgOÆךVy8uW$!j'$v yu~.Nw6ݧq7!{^^͞'wZebA<kΜ s '?WCn(Xg5n!> ko~{CChBz[s aRayhUfҨ籙f_cZij:Gu1pEZ*eSk|WvN6:vNV/M+ rF{+ݔ5JwoSu{i;B[[fh]itѝFnso۪wDVښړ#n>bNm[8sOK9c|wg:EeYkVVd/k5d"y2Z"DH 1DA5D#"[[`ܝVsS)Y GQjHmĥvjԭH\V7^ \67UP}J|ZJ_Cg52W/7@1A-u:Q=:henn΃9/tS j4G%7 $s~sU{;ڽ6{#&p5}$Lĉ%14J<<<<HR0/WΔpS{tu =DoHMQCMAulpwf.{q:T>c .}7C:A>;ePW srA V5 ,<2,`ˈ@҆H`6$KGHyP=@NxT/2|?D[!9u'29S&S 3d3ڨR |}9S /oBR뚨$„ +Cٓa.+#cdG:QuV]-|?gDAcuQ/>g|  v+;.?uT oE;ijJcF, kLd]Yfm+5<-0Y#愶 ߣ59.vb{)k%cwazlt򀹑 k ˋ/ʛ{ԷCVtdBTFҔ7XnEr;3ai"$[xxxxU0%2͵Dt?Ì"QM.M][Hg!~kfG4vOUUPZz~A*v&hW#o^ S) 5 2%.Y:ߤ$@~jF5?syȞ&}^yT3X gi'D \^ Dp;BMInBU!PW8H= M*vT]nR<)yQ䃌E#u`j`xM~=</r[X)]|Qv*r]ܭˢmqh(K^1Bdsp58rlfeOn]ۥ& *7n D8pY5 tA8~.Q1 s8r'p 큍4ႺiR8z<<<"j9i2@!Eȑ@.Ӌޡ2X2˙efj/orr.syn:Mb ;Ԧݛ mz*n(U ~|-GRJf_kqqɀAQFGɫc8IoFqG]A \,WK79Yn˟lu-:&8'V̒Rܯdls&|WUP\x^`QNkmr; G:HELznt6m]^[i]zC:Tޮs:0Z|jI="AN0ЭK:7|lӒ|/?jlͲ]'GIuoQr%S H-<ֳDJUZvAQ CD`*eDPltSo @:2T@RQa2>d8s:b\}X6Ntbu,n|5.L|~ ˓g3NWx$JE49CS<ܽ*[,<< t~n]zI͠0RH'-a]ΆP4=z.N%K[>j-8+ N;kv xl&iP@אeg Ai]!;#P @Zӆ6rdVNUg^ 8K^ߚmw+oDCLjoSW\rޛvfkcSz{Fgitѥ[ [ 0\tքbs4@mu5H9ZgzOz^9mй}B{H~Ȼ"040/x q~`wv, HRir\8PAiEO˵RN)O Bc\%S*/x&w*$"R.H/)XLhmu& |C?P SE[iFl;6lŭ6F'%}FPe| 9 D(z꧎ nOI}LdG7lqsྠ?WfXʠDytbl5mraMϻPYnZ n:Bl.LzD~E .[BJ@I+m$"6[NᱭG:'z$'Q@9$EwؓaLrIB,n`gTwl7.85<24<}s"hgtެ Ml֕Zg6NC.5:Vc7nZh-jMsNi`B6F?Bh{z-k?z.FЙGws--=\i--?Y8Y-=C9AiKk,|-ЖLQaKL'=<qmgjBHgMd'Eamƻ`'yVl:Wf Htˠt?nQ=ڨY40#Ed;}J-+HǶJKctE oZG}xpZJrYYs}ta }ђ#(5吞NWoA2 QPCU6[4o{vk*7v{DW S^s&R h @'BlGɜgsޯ\ϋC)LzϡjGZ޽U6Vzputm|wǫ L?&@{ FmǷ|C#ӗ0ПR|<<YἝ7ךhϷo+ [ϔ^8kP\bve(8P5PC-zj$I{xxu0!Nyv;g۴ɾZC BedSyVz A^T{=w۠rzBw4li6̓â1PJR !qzv&:EM'>~ 'oYЫ5WmsR'[y=r_vz=/`@bI u_$D-masMaбiʅѮvPuc|{*ԵNORAGj8t 3lܦCj=WUŖ[y+hAoSyKm4Z:{VC7j)`N9Q|"mп'ﬔ w \o^腢/w GGn?noϳ_ZO[9v^}Qζ-Hk鐗#9_EB%Ed "EpnF+*%W9k(r@.){ڃ >T5LJ3`}Ij`î o3Sac)n=.N,TCj;H]G,V{ݞxkKy/󠭞Yej9_yu:fJ~u84z ½V\74;[8P$Ʃ& FXozxxh] Nlt&l9E~$X\\#qjk'Gމ=ko?sLdrpu̎K,+/Rr@¥_C,k]_2&|k۬;[Fjtѱ[]4V18;izl<3gikNB(VZgٗ 7YZ\pwѳşd~ 9MmZkl>0:x\;[e+-)?O򫬎,UJ^41ٙKrʬw$(WQIR"i/`'H)40b,@Tohg< l~2v3 V[JfD_s`vq_TM,R;| Mz6G\g`MnqzތMJҏ%| qPR|-XwBH=9j`=Dr;d6\ /A%Ac{PgHkDuU~T<<vcͰ9/Mǩ0dƨ/y؛;lPtxww-eivzfNlAlp?Wނh0uO RލªwCa=oC=>|[-xm$5RՃ~ PO1I^7:יW /C@gH|s"]&cdsΌAr<-sqyWVʊdow_s v ,ު@sJ N/-*OZỵxaɌvX <{sq@n`FGj]٬3PKN5Xk,\K4mL9mC'mhC[sBcΗ2lN[[!qVᕅË.,97( γ!YyF|D6ʹr+Oe?NdpIFNtK eRdTȐViV0+-ېh]Tm. BB"fHqeMRo<{*K}W?uæcWP1m?|rlW3'Uc~;"*h>'dx:kֱ$;UC̳phx0>gG>P7 EPC=oknvV'}:}xT.wSCp.Zlᱭ`tI|MQ&I/0:Zr3 Lfr`̐;#ؑٚhMM6}~r^.>MٰМy] Y';Ügdޛ]mm4:NC.ѭF]ktѽF0+8Bkm{ik)P 1D[Rmワ5>u٥j{n}`~ZPƲŹsMk'IVjg@ޑy;<ь}kJ/zՔҚ֜O3?t. \zU=<<5=+۩5鬗\՜DXO[t9j5H2r4Rwl:64v w7C.P?΃ڙ|h<0@j  w3Pztґ8d}g'=`<|PyFtj%$F+KDCF%*uO"5*ӱ2ظwTlAA*ɲ*1+K^Rɔtב:Q_q]{h:*uUWFiu)IO{5WFɣY[My~_ł"s?+pM%596˂cK-d7 ڤ޼֗ͺ7PKNm֭&u}o6V O905]Z}9Q1'ngmPꟻ{P[kڒJwB~, /.qVq*>[N+J:EIW!,:?CP^_E={W3߆,@X2Nnk VC|\f:j?f@^nn:8~PAj1$dBL@5ܓDx0p'~*O ۓfޔ, jjKy8dFB2p9bP.6TN" !gɯ`i-BVu,@MUXϵ~Hցut-+'Vg qe7=<1pU%];:}l*&d?T=Vѕv;z{K]ktѱuFE[֤mtV9P&„Fd ?]YY.UFΖkrN=+㳕jݲuvr{mb-~ޖ0DL+ ܡUzqO0P9&POTPFXlJ6PI*ՠ2lV1mcDi+7ewɓkkCϾe'su=ްZ7"TU5!\NF?9c=X.ӟ7$HvntѥFRϮ^6)6/i gPsMNkޞ"MF&sY4,Y{#M=3?? tq}.q(:m.~- ox_]q$g0k,cI Fc9<<黹#T'tݙ:ªVTeif=ZDef66|?0O]:LT{ğHh84y v9߽=6C.@l(BA_&/c]$¥`)Wk=/ X@5q]\#fJ`zxxl+d'Ɩ. `әFNJ[9z`m7]j': V~UW <8/_.( ;2{T\Ycu ̎MySRSnBZ5_oֲye3mL?Fs1.7hXBO4=ԉ#eOw}3.u[fͲ6Y=wn d\ vQܡhbh@ᱭ%:F _8}D@-6&posH:̂hmNקUP"Ύ-sMVέ;Ğw[A)pHݦwo6]?y-N20;գ:;ApG!ALhAŔpB.syu⇢BHw(y5LC |}<Ƴ &9S͇48T=gy<<<12ZWňJp/e7]F.&ևwWfK Zusasr.%}}? I|kkBu&i{F.5_kty5w]sӢlR&F^semzlw:2Xӹ9-xc#wv:БI֙U}2Y}psy?BLxse"c%8z峞$V&YMKӭ0hXP}iu7Tw/u'Aj4T}cP}gu>29s7}tsu~*o%!ǿʼn';e_lԞU;HJ Hjԏ:rscq U]!gu p682d;yFKD.^#no71;ᱵuI!M@\/UZva#NgC[ğwuuK+uY 9{EkN'eXv<~ܥʯz ޜ s.؜ntѩFktmKY1xhhjb1Y;~+C&(0l_l R\ˉl4&q~ G/?X֓y)V3O>+$yDd?&s>d" Y\\/c`˝8pUJ*r^EFUdK2%h> i"w3l#Ukc/GBānhX<] #U%N̡70IҵswMvo!fg'T$̻vHekP| s;GnZe9nW78^qZ_KnUݭso8|ƂՃBߐ"pfJ"zКP_.PcFt*CVV[ZB\;?9g=]ΐs*]ar)$OcSyZ!֮ڝ}H{C|C>QcVlZUxnv[}er.\)sWFЛK^n֭F]ktѽFݲG[)2G^ 8&:Ѕ->|%E?|3kᱍai"7Xr%(sz$"JAX~A)>0;6llj~kh}6kr#Xu$6e*9 =Qb=\;R: k~S$?s->)ց5M| op9645fۀr+kjW@E@Rr%i\H#=<<,}pkuiNeO "DŽNn^ѯzǂzا8|#]rb.覦gbDF2q&e5F;5:^?; W[f]YpmWm[k@du\ÎɎ;K)]Cv́K39?~ u-_r_R9MFGngd|>D3KWp3ӊ f"GaPNF~WO[",m[^vn L1 A*7hJiq#w)mhr>͜ ~h͝ UkjĎMUCS%|@l|;ixʗ']<h^TKjؘ:sT j.Ϸ 3w ^u}UM-P_["WL1]{q_Yo@ChE{J (Վ<(rz&ȡIyΑV{4ށeWC{it(x_N.sWiLeϚH((\XRދǶ/,%WlHܪS1PSԀ;^e9d3xf3 +:j kNl<4s+pGf ?%wԌ?΄j21, evj7T `zxl yh楙z^-a,l\Ա=&WrO\\&HicJs>]?N96o|Լ֕׷zz70, |Y#ѥFjtֵ:^.05gr!mOmuNh;\}ǻfzL7/G>GF l, u U\z!|m]~yoY`9\6H{6pFqsdutZ.E4F@\2WTᱍOC@JqP^CnZbBt{5KWPJ\Mu!P1i]~uTruDKj }Tf%E$+g>8Ro[ߓrnNaYC,HAS ]J52%\){%;J(98u8\N-@0J 8~bOe=|K,v |F@.1bʋXؚ1޲pHK.I{zO>BgYT739]TwY!?iъ[}]YΚOR'r坝6Pؽ5t`:NJLJ w9H[K1zkkj]ktn'm6Q[\δ7T9ږkkrhs'DibB+i;I[aa1a% v>3>p}1xRt{}bruUn(3y(#C؛}Doz'QB[Z91 `gA4OLO{xxlmLPL,8 8bCI;Od;F 7HBh/c~_|$#g/A@rLjlScsǶK=w';Pê2߫i̇}%٩#ԯO>BMq8C Aļ*+Z]LO۽:-79i} tkh bڀ[}Gb-K׫}jl"VG4ݟ`Ä[UcEаC@%!@$6@uXZU/꧑)WVw716_?v\llڠƨp!k^?"}wCT;]]MQ)q7jΡ۫KG_d]"tJڂ|OP;qk@m:S@)-~sc+Bg)dvd1va=Uy^N >#Zz7قOg^1lӰ_ܟ&|{o;MGH6I[ѩfaZGzg[ѹFv; mWkkͧ]?`vVS,99P5 Ӵ=DoնҹC]·  Mo ʛl_&8qdsO~@GxJ-XsZeۖK.ȯO!2t VRɷDiH[7~-;J͖4)ڍ5#IAZހ;АGmb?S`â12CEmJw>ԆU U[!:A 8 P 2rUX ^˩%4Ћ$A͵TB1xǫ.hRCnNW;8,{S 3!ḡܸ7u NrdYe>uW_O)H :%15 IޞK&]dݮQ7ȡQ>q9~7f앿3wK^J1>}3Tm9Z۽Zy1 -ѽF]l"LjxGb=6snG=Ǧ-Bm?g,xȹ.q6ڮyiϐ䡼dlXNL@g,ٝ;i^ֆjaX HG 7A 'ڪf<5_vG!1(Ӛ)OS]=];߹APѧ]NJ+$j3pkwv˟f/c93Gߜ!=]}92eO3EjuѥF6VcmֹFjܬNnFG߈ӫ,qa̍7| b_mMyhPm.vW?g}ʮ{uk?S sۗGA]>W 2b9C7Kݘ-]]k3g95{] @} 3ţ) 9P1~6][vֺ*j'wOķ*{dQ炻P U2 2/}ܟ'D+db=^l9z{'_O3Tcmֹ5:R/ҰS[޿@/lRL_D!azlB-66xh#e.I.y͒*;j \-7e|x5W4P\yNy#̑ir 7);\\2zYq[+-} 굺؏6j!s{@|ZD  j;%{jأdw#TՉjԿĺBp;xpϕ\ |0K$(]1Orxym}OY#0odV_wA=FH~\̥U9P Uձ\Y7ŖH(( t:mOf@3yk]9x^zdivLo-syxxlҤI]uRNkX%2BHӛSC?K#iFI9ZXi&Yع{Ƀ 7\jFğR@ 9]^ @znh.}^Gu` sLiՐFQB8O:)XHC;.h ?p/--Z{{K r!?H̒7{d]^uXkHԁJ0m.S怘~J˜} ĄHsvqƉ>QaY%o.*ϵY~s/E> kp`_2.<, $_Γcqc{ Co`s]D_7r@60T>M\HTw@ݸG/z[ oXknȸ@MϸmT$zfi3{Pg6:jI߲ФLWLwsđǟeit&;2^dfp4yYPVK+:&4JXa#}~XڶldΔa%n3*'i5ͺu+ѹx`nmtѦe Q(Ei:h)g<"͟ (\YMɕ{o{nய\sK7*pI?֯V~p|"(B<|nrb?M7(CQ"$`aӞ iRdNxxxxIHd8MG2jȀZ.Q=A} s~H~MM)WCM98&n.5]VƘƼ*yZ9$ۼF\vlW[fe</xã:0E9>{݌wJ169bHoV{ 4QCչQaQӢLx *ߍq@L1h- Puu r+}OA-V}DWd}}c+ 2ZuDeJ /eՍr\}܅V)V*X/J(c;ܱݥ_v-;J/F5:Zsw`hkkoW`ˢ~F/V: =69jk"hχtbn`jpty.uzUtn vEwo^ne~;i}k]N2_>.˷rh~f9ݥ'o5$TQ".!L3jxxxhYt6;Sx)V2ש| oBL{u&4KNPBMPU?bWㇹPsz| N5Nt+]Rq`R`ZvgZ^D5GXnR ,,5YMyCx8KaPVTLӝ1*:=-vlb/caȗA!%! /P {m=<<;]ReCHy<*B Fs)D7rT5rUn?0KkKKC9Ml@lה#zfG6gFF[ތvWsꀚ-U+wFZ5AZu䀺H^ÿ`v&&d-_}7Hؤ/8.W:ִ;/;ZŁ:kpq޵ jϚhc'p;7O9V3G&H`\ 6\& S؞XrmAr0df+yn1=|X En007:gj 'iFjGc`&]UkO[|Nc%f=<>^z;~uAiwz L~T &UT[Be*:ׁeni_fBc)2/y d 0Ly.`mm<>ש 1m3^z86u^)i-wО$nFkW9(;#)xpqdvc2?tguTxZ*15m5B-qeb]moΉh&87Ƥ GI0{ s@КpI.huU\ƶou8Â-%[uι*<^ߚ_&LT? zN} ə}<ӯ2 jM|^Jou?7.M7bz.n@}֩n H\D9p=>dKzKmH`t}Yؚ2ZQh 9ON͔r\zܧ]JV:0uLv(=uV' ]|_i}q'm5:{k|7T: m?PuСϛІ h.`O6rCXPWhg²Jnjy|/og{O)&cgD2eqHz^@ Pd~-al^8Gy8XC6ğj@gqVw*c!$ous~dJ-MscO3'_º;BmuԳ_W n?n3cu|J-}4+z/=<ט8}' @M('|N RݛfT@"<-z#?q8 6͏aJ+$fZsB,{b@ޟ4>O=ǟ׌sh'U=QD!aNLN/Sc¯ÝOS>.1E,v)j_& W'% =<<4uЉ;s˹9,"{003?Fqִ zY:qo7Ywnt3ejm￀Їx玲h!ϳF_&:ׄ;١?70#pGGs3-u}u[,,ۇgq&r^:ЉЅiF{xxlHv5~`Wj(zյj-/ҍ`u$rc **vӰyX_w8Tɵ2A%!r2/r#KH4H)6j9+\GJڧt~AݣSk ; wC*Uvn|72\C/cwԞsBΪ _e>R'BjF=gSp?Qg׬' >`/ݍDċ05RZ%sI'[.7pA]e`{h WqV CC{b>+>ciKB[c[vЩblMd],{6kc(x6vhqZCdC[G.?\^:?4N@s_&=ɹ͙Z큹IV,T%tJ!sHhOPlH؟B{;nLx$gHפֿ H~SOUP)^ UqDZ+l'$g!MW :*PQ:`~ܴ==<²W^[0zND13HAu/B>]B}&_́ͅXkwl7z 6uvCۡQh$|Lz R!u1)A.F%HZeu`.=PnMIWiҾeȹ‰8oo|w9.88<*tCmZѵ ߽zk۬MNښoZ<7 R-~x&,_|vSR(cԳP=^ԴWoW*`J.nPd|D5F. !-<Ǎ)涐#Z&&śNM50:p(d |ɯ3z\}!Ϲ_% ގv/ܷSbu6K?Z.'}^k;ZgST_~/.u FllwAK7$&/{ϓwt7tz:bm۹9K~Π|_{Ł=+:P ,~hn0B|oo]G7Gm7kk?m2X-_8ncoECR9Esu/UeN376̎ڎ}m~kuUuuL=PYpx߬w%A\;?wKIG4٬{g/U{4FADT@ Ы"v+vb+vw7v X H< w n|y^{{q<2|$;ePOª V<7VU'{YPU te: m {ipJS!l ԑ5 lC[s;pe_f5 " `M9[L_rdf({rԜ_B՜R+%{xAɨb #M9r< <4:PȻbpb]`u]dDQN[["Gr.)}ewxi"RyHcbbƶD<yA&/T~cֵmo=o_eX羾 i6Z[`S%l/׌IWƑsk5)^˖7mH9yKJH9,v-iGD~*)ȐrKY cjkM7m;GE.TwGg2zDZ=,B֙o87_x,٩.6ŝ2X>2]8oK? 99ؓ wp!_'q,%jU&`ǏA#~3&pܾNj',&9 A$L|+SO'gbQ83`qYFLX]Xj7/fp#o,/xti@ޏs@&5u2*iJ;xأ+3);Y/En*~ %~ 1|\>mPLOוtLp,^sF8^Ta8?Vi@IDATiȴb݈aR6 MmǮH~n+x\Kf9̴ gZړ3ZXVpX06>KoC*s%Q)w|D7SY:Wc׬ ܬ%:޳mifKrp:9_;%w72۲*oRXGۗNfzHȖ~)O}bVkSm6ƖܭHO[}]sw+?:`}lJBcۛ+/ =Z9^F-o;G&io;XZoG9X/+zHyٕ)XMiM1w@.p8SM(BJ3A{k4cƓ^e  C@{=\꫟fÁhUQa Vސ#<n )|i(ȅgea:ģ}mk]',\Zk?sKy07tY1hU>s2{k;Xeb:=| (|mQ_Ú{@r1%nKec 8ǿ;0M4cJЈִlξk̩8OOפ\Mw/#{J:{D~Wrm?E!_k~kѱZc*[7{u6%XXho;>KTF>Zދ}^f_z^AΑSUZf%NVl,sDȎ{!-وVr('eA.p8Sr@FJ;l&Ix$A/f?@,| 3=xIu ueZUyDFe7þ|DpwXSjBrB@P Љ&Abpڪ˿?:{hA`~n[s}mhC[|׳}t49m x(Ց,L ;Šfny@QL}^ᓼz-3xH NJh#enLP80ctДh"[βGd98yWfKUQ.Urw^\U{-bI{d8vXU,sqmw{p%Wpmτnodlsxu_ߖQ 5ƚHXn"5q96ѾFT"DGZʍ~ß%2owRi/^#d"scríO؃#ҝ4 iSvcy4!fץ 8M)#j oBps=;go=D2ÙT}V' aU*Y&[TNK3?@Z ? * s e2,Wp%MBZp|e@.G(| M3mkZa$ oU/ˠMPw}jN΅2oұpOS}ȧ$يr!&0agZO:꺌yVYؚc؍ߓ|n5 x i+)K2қPTL ?ɟwttT-b']΁)F sW`=l^i )6`|7cM KlCsyE' ؈E1->.65 oCo,&r\Y.ʴ%Iя\ǃrU>0]PNSyKH!&5GeW_h:y]i|iVA^C:)㠮e&_j?y +&7êMPuFNLK&Pn>>w~vojk6ssh(3?Onnlslzy_k3m%1 Sl A]޾ޡ6g_i eGM.{o-w޾?"K#)űr{_Cr<?UNg_(۲l}F \V䯟\D(C֖ 8 *-YDѴ',ch\ ACV!s5}S~XyVbp8VT' +NԱN=P_f.l.nIz>:SO9@6ߎ v6޹q'm r]5?=~כ Y@LPmbV]l +'$HX13ql99IPCv6p׃z3D1L0ydž:RF(%h.YF1@R\2! C*J:\)m*ewY/+mX{Ӊiҗ8msl0)v:ވ9ovcW{xv MmfT_1lGtA4"G֕{壥촫fwzͻፍz7? } Δgy%v)r {sb=vOo2Jʥ!O,Bp5c`kmk:D9qfBC`'R}rN,wAp8,x< {$3S!qvvKA?4 l‡=|W{$"?¬ҹϽnVCxV2.\ ź3x鶺 VHχ} t7 .s =ؒ20fx@L- Cz8 uVe8 )<# Ѳ gWy98)9U'zTocl/l+R_yLFwknͼcZumiw[AǗ>'#E'nzkm/ͱ̱gu"3o ,xѷ;6"a{cmH˂4O-:9l6ɻӜ[2ͣW6*kbW#w^5Y-;1Xz%C#Ҏ>t3oQN#p5>iD:dž"7]hsiEx%fF7:a(<5Gj71(<t;L[uo]aYzgԇ+fzh^} tL``*ө'/3up8c?ǥfU|C 8X 5'Rσe{5UO'’m VQߓB͇6: =CtRtJAfr %ȇ#CԅEދ#NTҘ&5tec-8C#d^?.K}-ݼ߭nۯWz6:ɾM_b\sƚ 𼰷Sl@ tqYKh6~.3,zxdfݛf;6"!6aq7*o9Ͽ2-*Ҕ#QV36sjؗ"Ė|Mq8o)|ؘ]&A'QJK҇@Xvn XԾ,<]?>V}%WgԾ, q8>&_>O( p8,EbJǖlo?`HA]̻:VIުA JX ikI#;IƝsu 8H;O^?B*0 r$:Ǖb: ?{BhrF'(# Ӑ7Z6̏h9Me|tw?̿*>i+i{l>- њp^VSmAnN@lp=-Wp%oLVۂ9ncJ~7~: 4a$d:VMO^K2,E>Ά`͉$.L@ձp~]Pdr~KnjA1q1ñ!ZOȒ D"QA"N\H?r77Dx*ߏ).6mF:UoXHn|WV.ގ;lʾB`7ȇzKƻl }ff}__}}ckkx&xrsɷ?s6i=f՛ ` ݴ/Ck0㠦2F_gÝ`73ãT,|Q%\dO[ J>.$qNR銐=ɗf"a5Btx$bd$@rOҿoRg?J'6xCd*G42s+;UB6׳=6l ^׭:rӋ 'h/X`lX&;1 2T^ hsUKUk0>hO$&јIbd'R@xV3p8o':RLb;*G)`a%dÐ>x['3BX3= UCU%` ӟP{s B: 0$/] mZi\?7I0bQ"va.da bv2ӴTH`M]z~k&&J ԏz:d*-$ޠytRM/ƣYG-“cb3iӍi"(}hD'o-u;Kz[GĮoV/z5x4~eeᦍn`^uo `v ̈́ZmuVw[^|?+ ^g}1v܀iNc`f6`c6u276FoG,?b?|'W}ūˢu{*ȥV Ro!?pl8쾹=nЗ9f 72k*A&~ͅPNdᩞzj l+&?P51Qxd##BjD+ W =ovћXŝwȤG]caG<tNU+t*ua\W .IZU{XJoU3j^Ntdr/WrDC(R ČYP؆=K)-iK%Jvo_;.i΢v%SB|Iʍ}||ŕw{;ľ٬6LZ\X`rVg[muV[nu|a_^6\pb[1F4F(ljƶ2HxT)}lr[ )/F㊏G#EуECe׮h23Q^Aڳ_N(%g@WذHLQ9>Lh@@PfA:Bݙ{SXB" /\+K)X}bp/#7ꕭ ;q D_3+xWטQ34KpyʍGhbGV͙ PނtlƕPwAf3FꇰbD ˻& $K;6 58T/CYg E ȁTNHӕl: Ջ ch&Dщl7˸R^Mfx\=75v\I1>joM9hjgef)y1_lo,BMTy J,YU@czd ;r<kMP Qk6o`np^+~mXDxZ'„>Aw,^5%p ,1Pf@6D7amJ(7ӡ2҉rblEPM"@Qk]ݹñaX;&0 ,2YH70/v9En Kddtע! EQm%JE_/dFi{hCB^ voWFV07\*8^m5ߧZ?f.5pXpQihjrͶ#>SlB#~} Ҡ cӽ aEeb7 ˚ֿ ˏH&Mu2$Fg_)ȼ7|O熫 \NƋ9k8:6/c->f)Yk|KC݊yPfi}&k >?OPqOj1 \=A/MȂ<(@wUٟ,up %Wj@THlɦ_*#xы}J*^i9<2ؘXجE^Q.EGTKѝy\c: {ҟ~bJBCp8E.s%9>D@9bM:TP<΁&V’a;AG;AUIJw 18Ew,1d1qyﺮ+Cs?_e'_>XUN>av%]:X>1qnkƤ.!A0 쫛q1!,K lLl3~09 f@ !h(GZ>}}V4?[FEF[ƿ(zc#âF7VZlWn)ymtu^gۦV[]nut|eX wPHHg&vAإw-"wG}ehm׼a3?F\"E3㽽wSQ;M6z!G)e4'A3pbGΫ.PI+h=03Բ45[탩7RsBX::[_,?*TMߪAJ=2ڤh1s h-r}Ǻo 5ՠ@9Iאl_k^4;˅(Mfe hJr$^ٖz ~zۂSdЩ, 0i,Exk4-&#X%ki2hLJ-;+#}+y#zwys3esу#CD5];6XCoȲ%;p۝{n-p[n ΎX5 99M 4'cm{C60O7Ye>Sdћ4^7w. [ycrwȰة\\ i ,emdp8~&_:KC"@WSD'Q L@g) _7)Bݻ=t i>FU%o oUKPuvps.=U!/!,GdG/5լts uЍ3A}Y}R? H_o[>͓gKy6iQH].9#Gxq}ؗ%ZH<`k" ɂ~Y'YDz1kJ2\s@bi 5d|Oeة2DMgxMFtN-u.} sQ{Ŗ؞{V{[otg֫./kg2W/jvS` ؔ Q .?)rL􍦼#FnW#$Yk?>6^'%4zR dd| MDM`4ћ`"RZŕ,`T_@x>㐸6moԥ쓚)X327][k{2T*=!Q猧͍jL"Y%;?#]M;ѵ"0%\C^Дmq.oa?L=Au5!Ԧo]PXC1?{w\& hM83z 8?Hhtbl~ ʤ^6!lEsU9ZZ="ߟOO/,<#jdb)淓ܜTVZFZluVg[muxaaԿ* /`k* ) ͍5ShdEDGwl<]赏x =➲lϼ~clG iDw!Cp8"#O S؛JzJݟ! .ZUSEz'<9CUd$<֌O5 WkJd ~ +aДNj_g5Ьۿp^ilJ{gJ@ R6/! =.^ o{{+LJ{|([ȥb(y-v EL2Vڹ@00~$QI d7D9k@z26g9q j^Oo a։a9W3a9CP96Խ&\BuoI .bm;uL!ٚrfBjBZ'@~VV$ғa떰i7^!F&gAֲh MB+@r;vkrC6 ҀJ^ rVt+g@ZI;\,oExyM*zobggÍ:P?u`u:P쵙V] ny`soF0|c+Rva Sz9Ge7%㵊!7˧(ڙ&y,[AH[0[CeTȝȚHN2ǯϷ+FTE:4)]!9$[c =D`w}/@=X:T>3I" h&% av5gdɬ}r*i ҇A w 9&/2MǚJl捈1rwMB[!Y2{ٔ}[2g(y]mtv^w[nuV ȳmV`S̍.az퍭1/x}Yv^>L%򘬑f&0ˢ$l'3~ ю/{X\"\'!YK_xn(d#ݩ}YVzNv.TcH fYfj_,#M3uF`ͥôl!*{*L}X+2$z7z_ñ~S?)E>װ< o0o#??@gBu*uAM*6څю2J{AIE;؋\ c]X؝@6edƏRX`)M'0P+E-,a\>`E{t9FGͼH?E8SoߘhM.־tۭ__@&/c6'P|+ g5J\. rJ~yVy9KI'0dߞQt1tmd{JR,Gl_,4)/ p8%DEFp1C)iO|'Sg z#$d͡COMՕ't*|eEP?;s6Ԍtu#L`N]`{g5MLbW/M[7R\ft'}J!$_@s e͡"-ң{y04^dFu.$ Z[/qiG>p>C(v Ev ʩ٘^lAÑr\]HwY- %_$#5޳B.e+s% =XA6?R`~&^zc3>0m˭γ |M=Xۥuo$/70,x|s]!}7^WY(w3J]W|(c-R~>gr13ۛJh!O=Ys=\rK9RنrM-ķPpzN^Y \@)p 6}70^5r8mjP0 IgBP.1HFwP{Iz}YZBb[(3DCW[ҐȽ@%IĨ)(r8p[!0р+'[IKZK=z./-}|"U{YoOo,fȕ"7sUƚ N.lgUvGf3rӭnXo>F\`F׵ˌjY@R#oby8G&{$كsr>[X|d8{\)&Bp83ٌReo}hBg: ZP's.%'gG`VqPI7W!g] z :\3xxfa]6 YlTCc K E:Tn (;ݠUKSջ${CU|.3OA`atw/ˋ; ANc @EΏ;;){˱қÞl#{yɅr LOxBJV~ol+`Y(;z{ʉyn\cm]zݰ6`2=N7@l&Z#6y|/˸Jnf }DY!i۸Tja&Lyҏ^L&th&!W#ήih,p8~ ZW,`t@"}چ!}XPAmDVoMυÒ×a$jiSH6 >Bn˛z& @-ƻfpo`v,csG,0U$x*7׍wu8 yDpGfէ`T+'^ _vT{i3x($Mp]hgs-~p8,ы\K_MZ9(:ֽQBmo.^HF+{5gr<R$.ڻec+G0ׯeK&%XF PLFտs.c@,鍙ѝsMه x 2 C3Ro+9ǧ{s`IA:+K6 C̈́̑z)4hGBpD8 1a&_*cj͝k g:guO%K֕nM!Vk ҍPo1CuXuCV(!""/Ar.E<B'*mh Q ЮZNT5w)`Wf팓F XJQ,ҁz1lᷠh6tS"] ym{Xr|\'E>^Zcmi|aA= UkKX;&'9e DW.+)yNpׂ((βHZsK>_ɚ \a5_IR:S \DK,* !_Arbp/跰bXXu 9NFfbn5%Ƴ0󲁱Ƌ1o7RҺF`VS)}N۳R+øjְrF} #gg@ѪyrT]gCx О Gir_A˨r8f0`7Ґd #CC[Dz4S&ЉZffO`%+L%]8 5kٍ*c6M}M GW/Px 6`#l&&bcȱ!OҚdw]tB5`FhF_{)e*{SB1{y@ν:*v5;`wv@[1uDZ߅dIp{B&z+K~7 M}aUaz;ԝM 2|Goݍɴ r dӸKp/y5SEUf7j!i2B.y> ~OF O>dE'@Ph`]?PT7xןPuSd%.gimO?$}AőO#ZzK9UxR#5;KOQe`6|5 `mZ_VDPW´S["`Sl$ثh6q;E~,fҘUzH&K!un u0dg<z>s22९o) c}_;8*#)U($3ߐ?/ _/.t&!qovQJ&AX臠8QN==0~VɶrִU4WЌĈSĉ49-dSӛ> =me;B.e q sHs׍uҌtIi~N5~L@m @{cm~^X>ݞ_ 3 xlWC7loT`2H@[.t`wƴZe7X3{(U**PD8 D ťCrpkjD ܏uvg9U'dۄK:#OgP[W=~"֙fR[13IOԘF=0b6Q-s.Ė<w[yR\ud v@\AoBmL\WCl`2.x8y(qz֐4# ,JBЯuԓukC/%㹌(9JBӖ-%?d(G0)/z٫#J- #^U6kcv xےbc_Th- ~+͎~># vj}E1 BOOјI 8ֲW.ci.ށ;-ChL_vRB b|'cq=DD4% -1򩡺%)d7 뽐>.ܗ!j.?Iiuk2s!LMU8s!%*{n~p6鵼 &Sw6-MX֥:X?,S73;Q VAp^3DٳAǙ t*Ԝ>D?2eP?:󄶂*@:܋3!;;@h/c%kS5~~a+j eD -ؚ^/UN`FI]A9)b;J=KQalmgQX{~m @t{T6؁~L?K}T糁(f90GiEcIzx;ҚNg>~7IJD-p hso p8ڔJ6u([*;!L73 {S%Ae4 j WewPw{fPID";_p;s)1o 8GLWM~wkVߤ 2 |ГM]a8;|~Gk??/j9EkZ)ygh wB}!]ct-E;, M{ ԚǟS2IUB<И^ޑ=dK(:aѿ -Zs!6SPngos ۵_zk ޸MMot)$3iئ6e ~FRƖ=[ˎlOL 3_Γd=OKG_41e+iA#ZH5qSN|JY@х8~up2muD?gR}.G? qbvFAz6d wՠW;Qx2x&ujQp8dT?Wl\nmLt&ɼ aK=R;dȎڷ2h56Z(9_A o=\!Ɠ 9M("P:q8ulEы ҂ y!FѴs-+mFَR) e'ّٝ,с*n7( ;߯5oVK[F]alJnf,rL@W*_/fTߊR},1û46{-J`z.p8hLlL p[PF~uN{ ~zfA}z+0}N&tWe'#o  >D˳CJ,5Tێy+g!n<]\-V  7z4$>ϾEK};7} oK, r>{w4y |$_0A 1O[n96)?'B"рriATHW:il31Є̓{?s?Y(8<7欕&VG۵򂻋M6[.fο7v|&Mޒe2ykr{SIݻv, L{Eҁ;?&?@_?MsJs5D(_@ɠO@gzT*o=R9R}weWe :V1zS(,}3;aV0Ur8֮ov=L ҷjvjA( :!2\^S!WN!EгY8|8.j<#.=i@f̖ Ji^zl!()U:H_Iїb~r|-GK6?%n7)-򳌵]%Y_}~afk,tII =虹@\HK`e|483":QB4$F+т*hC)}e[:R@iBwZ&A`тT["owM[s16дVkca{?6tboؤ<#\𸭉H˷,|.W\%'l)Gz}FцeM)HkJi!.S9ʱ6Ω;r4pK=MkA)7ه q>-rMmtK@jRU/W!T5X$S\';m!M؍A# c.*m]p8~7~qm4R:*>8omaM( NքCR'kPr(muz!ݵ;s؂r\@ wr~U6?V_}=!q| KQ M%Qp`9q|GLm2R/`9WWcmnZ~o%}cX[`ζo\):HLZ޵,='-)vh yve:2}~rb]G,f q1E W 0 30 wꢙOtg,OR_Pl`f[}9_%+Hm9+RMR zh;f[HVj1:O/UGljIfi,cq n C!64D S`m*omIؖ4?;-= ٔ=9=K4gs0*ĦKwVRLҌ(DI4`55.p5VaOU5soݙGYz {S*qPYv#+tTW_EPIm9d=)z>+HjpCKċBuHݓ=K27hs>?5NAu*=YW@݊LV;BjazOӝ;Ѓx ::`*Ȱ{|_T|! GlD`3@BJ jJHKgQ%߳&/2E_SC0gkk /o0 [;/=lkKk{ҎWy+kSGiM&vDhM e5M))#J D|ڭsg?p)ʵ}vR!>HWi$ M]S>?d wȼܠC:z\ݡ,S3K1$ofk{1» >C3{. M+&֨ြ_MMG{O2`7&Bwl dkc;%V@}-Rd/@qh[op"?gs TJm{x}"@k^%O*#+SEFk8N糜 _煿?l~___tsmz^~i?S{c7Ѻc+nB;c%Cr%(q9rpD)brI>ĿWЇfDAfi )Bо:e.T 8Be:tH q_v:}^3'ԟC ='xVpw@2&I:0hwك=$g7O yZpnюlBl( J^:g3H5lndH(#?RG5t2)WV[ou}X{c6E r[_Y*F0@Cc۱n݉-Sumrs6G3MН03c)d YjM,ߚC$k-p84v#1iEtWPЋtAvԦAِ(.Hy]X=z&;(d?7~-½\o|E;p85:9!.KxB}492ؗ7ZHܙJ;f?s!qJpF-_BQzQr#''߂(Dؚuǣ4#Hf>s?Җܜ~k&VWkuˍ 7/xؖƖ\uc/n;@랴go=ÇzL /<48Sa~>)c3XLt%Ii!KM @Q ~:c4(t# a.3܆2;~H\UP{Mnpv> /S@zyx{#p?fZViKLgTKY@ϛf|\9'cId<(~vڏY~]3;LO3]'ޔ.X!sF0[ ׶؝*=$#wlN /ˡ\p]].4Js0V̄ɊlufJ yN[IrhwݘYOTBn ! W7~ B"jz e5&p^WKwq~o=FuChu0{7ǽ_ema@[Ӈ=Bc9. ҿ!lHb~QD3,#CR(vn"TJғ"43^^=–ڇYy'[?ٱ[gj;cI`{х MӎL%'2bY67$̇A8U7;<ܧOB"@}$SPwSe'E~P2(a-9UP r~ :!@, ԑ$c uz7rq3>| O2A=_o#xh`@46h- fXy\xumf>a^fڱzт Ѫz0 Ҙ͵Y[3Dwӫ=+'O?m^#W{\aI<|s_ssvrN6;;f=tfA&nH^.=LSl \*50Em2-V65nryFña~u9kpv/O /zHvO9?^!mȔ_p7}s2R%$$dPԓdYC V泐;17u }^N&sުWʜ nV[o3ڛ& ?FmmV6сZ~Z@=UX+ xi kCGCQJiCk!*D2@40qO pfJLjDM ?bgH݊PtǡLT;AlJwL »GuI[fZئnp8W76!>3ICd赐XOA{2MB]L7ɉ٭2chap G" |As/ R@H- e.#ṲڇiLgؗ;ytZ + .NxM}o)mmT5LW˴nw3'>rkx< .P"I?f\?7)A@2c2/nHޝ@} uL@<]!}hwM0 1f>5:__~7E?l u2- u Ԟ;ILE a?, {BY^t8HGqggPR5,{>cu|KR$/=wn+z>$K2W[_?j[lؔ/36ֈ fct배Xntd`ೄE, ц~ETțO1CJnZe;f ѝ8fD^ p;݊!3:\7+X'2')^ol} 3$W~0xY&^H՘ܢnp86( r~U}^Dr~8Z{5d> sHݎ)P763P۲G)$˞Afp1C)59;=1Д*bJ,R:*,:*p2guw>eUx[Rl7^R$w?˹-}z6WXnu5ƮM257h_h/u#mȏ>UbaS|.&v'Oshla-Бe,Uis\/H؝Āҋ"`;1xR)$^ȞA٬Z(-Z`8SL5Ԕp8 \C2݊!#z7$ZuRԵA%'Av~x6s@8 ؙ#LF }+nt8"H~j>CoS*]cTO+ a*i+%B-gMoEGo_`l]Z]nuvo |ju@Q,/Az| 7A,z9idO ;s [0Dަ}d \p86(֯ڀk1{IjkZ$WsccRjj ),$Ѻs!{ Tp-}kH6џ +X;BvZXC=+-9Cb@! @@@o}oGĖ4u$:f8|9W2v?15x]zI0TGt`.w3to0 ~=_eXnf۷olSc @^혂@/ѿs6ctn:N,\,.I/Pb+XI&/-`0-B.p/)tfZBfU`H[ uZ0!Rx^ Sډ@z4]-M eZ 2:V_,]z$!Xؔ'Cԉr:o 蹐) X}t%i 61*>~^$Y,j3> d Sl0:x[ hT׷mKC oR9>7VWkucϷopM!Hk : Sv}79L3OYFnz%eAZ=W:Uix6{r|A#je\x 5}, Rzgb8~J" }hLDVQޫ+!lG)d;d|9 ?K S؍ ߱ v&Rf|Q+rFؠč_6'g=W} 2ܞo =C&l(<\'CGݸIWl&sAҌ(!)bt8q!BgPK^[e}6xw6Z2cuÂ=i 6|];ު?Sz݌mߍV[ou w`K " ~{QMhnfs4y5cp89RJښY 7z-C@5d/ f[r3H6`). '9zWQAȘ7Q"j5RLe_郼C>:y4{{zlv>.x#\)} \'tN>ϙ{Uٷ<ޠX;F$ <| Af<Q|rg_<lZ~Vgb # [p8Nf|TrB%VCf+'x1 2ʭ7~ Yc\6.Hfe8U0~OZK>2f)÷qȶ A: F-ςnǮL=Y ԓEnƟw(rOOa@ :2iz!yQ7Y:ul]]GtûQXNs5ntVG /¿vgߖԃUCVjxHo&^d [sޢтm®^ɩ$$C?` 2V?KJYFړ4IRdLMKǟ܂9VC8W/c*?|pSBvNSophd0Pɷf2cCc3l5QY#c l7 ln7C6n%)Cu=y &P\N"rWpe0П$RNDk]rNflDЋ?'}RO˂6:]ۆrҘN%s}-zAjc87׵c.3ؔ! TCc h=F7 sU8PoB'gr~FT^/]#w%sN6[g l_ߧ,:*ML@'Ig{Қ/ xSE_lpkmy!Lz>=A,dp8 qWm,`^,Cn!;*@yB]a~Ύ-b 4%?=k&:SI5 U>.9wc,0d?=a/i՟˹x ٜՎEaɼ_ />n؝(lN`KIڛI. ,<+YMCF=!)1g>pdm Ћ&D:҄8+!lm zv ăǡ|d_F_rDA 43ñA~񷹌6],Cv7a2d ok!Iؗ+!X!7ϗil,fM(g8?;v,)Eae0OY0(؉^ҳ8@g#mm5 R ,3g-,hMl ߦ/7֦vX<}_gSNӬ6G7* rv[.:M( g3CgQG>݈ 69tMm)+zQZg5:i d f9deLRf^觠ɝR<&иotñagbi[cp ܥɮy# ٝBv>h aKmp1ڏE\sgs{IUe>;$AP0YTsdcs@sVT̂(IDA2H9tpz?ލ<9uyl*[rzrJs4:]HwTijrxR߇5M,g'IUM#k: =2r+E+e<9Y Qnw׏͒dp=_I1PEk+jQ_mh q\LAr ! kCFwl+pGxCU&cL5M/ܷ>>(3@*s=Yva|Kxf'ؿIBC IJ)c9{K\&+MjJp_rsOto=Qk5%f*tbH)}\ ۡd ̍衵{{|q:?{wEJ;S0)q |由mҋ_d@b3||zL 0W/\QL$"U<yS)l`3@G[P4~ @N4p3]XJ~aH;,d &(VRML W:}|~Lϸ~/a$/C?*-du'XRo}=utsܨ[)sҧJVuVH\kRŪq1~YjRL ꦏxG]6vGyGy?8=32/h_{/a_(B dsSq=b9"BL@ߠ7Ǯ(srQeS VmIqcOUcE?fFZГx@ Z-h 4P@5B;]Į{4ޔdC`_w>7rYX缾^z[}ܺn;ɹ9ks/VSHrVh^ 3 :f s#kmus{=JQ;/vrV{߽v\"RS%,U$xe ?0E)ĥUC0A2CW5 ]i*I' } *d @Ur*%%C!ωQ>>>>)f̪-z&+ p(MZыu-@S<ei՝F4 F&_:0翀̺=B RL' 1rU6bJ٘>»;;'5Ksn\Ľ6jsj l6γdggDƑ7] MB. }PdtXaZ 3ܺ^Gvnwtf EOK^T?.ylXL$'Z5W #}|KpT;>ϳiJ:N.{yj3Oeyӆ;kD`\mYz,=XN Cg}!p5`]6|MoPH'PЖd: (` 8@I\2?wg\P7 gII,m*b\Y:zݒy㽧R\w{̽m0@]NZj5HƱk5W{y @vjA,շt/uV PS`"Osu7N4u>tLzLr7+mEr7~`[*RJR(-4u Hgm9ƥeu`83c Jp PM%ЃC$QcQ_0ZG=Tc|5.Qrv$6 ijEQWKe_6Ovfd L@ eROn+<2̖dFjْjvt?q۷;u)T07nc9I }5n-0ǦTcj5M { `M:?8? Q]cܥro.Y$UٞOqܝq|RJ$.?@M:p$p Tswgf:Gij=GA`j˩`W`*98JB;RzP h  _0q@PS'H ֗*ʹ_`4P=@j0SbR lց90PcϸRJ)&=?9{JtxɆ.,wuxY g@\fEIiѪfv_u"ygt{sNÝn4+szM v|&p}+xncR?BL}||ftu+`MP}hVg%'SjSZ:(WP #ɘ㸶r:Ъ3\kfm&kE!k6`GA`KjOBZ \<-jP6@6S ,H2XJ1eRnP>9>=B`= &_KSFN3;m_f_gሻ[[BIDAT]<9/iM$_?%uiOsn`;* ^ORVR8R 7uB0%,Wu`[+=>TWE͓@vp=;}km=4 Ŕ?/%kޓ8-( j5)T*A>>{3Uz'~!E8 bQz`k :!tUj4.ʸTWN՚4SWe;ۦ5]*wUՂ{hoԁS\ ށuzr#Q9UC@r{a&pE{ggg@&F|&RW"FyW>w_&[$'K\:ՇT][e{k,P&~?MZ7fDYsٮM5.Zu ʨzX?%u+ 0AKGi-Wצr՛3+fxUʇoPE DSd $+LQ|SG҈$k l# 䲑4Ј(XBԷE>/-9:J!}Ջ$ȁT:*5ȯKcVeajB.V/Tu:D r5 Y Я< u~Un1?6>>{=;uh"JʁSF7 rvpkONOJuL>Zyutőu:7;B|:Kl]ҪfgxA"4SfߌuֹZMӟ=Y1'iMӿfEy~WK.v>`(uFdSwpKM"t>p(H KDg>Q!D˻ fAg=i I'%]>>d2~KJ`֓rp"ԪmIo'7O)o-+Iߝ&o0Z͖QlP~QYCUV;ǥI@6(ʧRIe< Aa KWGrO1% dy} p 5 rtz"vczsz^ p$6Z_f4"YF~TsS)\8P}#~ɺ8z:L=BSn{1%ފ hFGVR6Y IY}ew9;SӉթەEK~H}Q2Μ;ʺvӡ2B> xv:Yj2z݌7~*Mk]94&~0cb2L >p[F\q^yp%Gj)[UVīUc^LNv;uSH~HC9Csv`{oKwCf AC!:Y(nVHgFfI@S .X ]zxB[Su6'2P5 Mh[R||||R9(k[Q*u4&DdžH8DW!):r2|Meircg>x"=,ސ9|(w|!Q钞/?"բlEВW qJ*+_R~W۾5.];9o2h?\̴Z O7~=ng"$@t-7: hXqePňe{)y7eqULώ;Mm6>=.|$e|]Cs*0XD$WBI3|||uӨ_؀ U A9j'CU-=!rj`!h&~b`yjj[n( jmG @.hDԳS/SsB+TP!4 |u6%J0ˉX ?? ?g(@-6Vr: RAe)r|fu7RWP~m'v\WzB٦%Ý͕O-ī~,=#Tn4+U73~qM/)>>\kC7~ӍnVgvȞ#:6) &GIA0ЌV1MuTH}ʯ+]^43zntW)]N7mF˝v¹,u,rals&Rz4$a9~" r@3|f{=2dcJR@]@:4+dj}HUv"-!>ikP"f"m 0<,+]i oᵁ_9WG@dY`ʇнjRR&̅-Ʋ4:`ɱː_~b=ӵƑZ5jpo0?7MLssLjI_&YS/snWgV҃$!éDهӮQIoM'$_Y&b"'ݖ$zjyQ8 GEd/X] ϞN^M)?r@?\6@pؗK :5 y"}lc`fKQL ԸK1vuX&9 m XiSA@:?SNT ʷ|zA@}ޑLQ.@+`pq"N&6T QR7}g)CN'~<;^}o+_T6]U|IֽaAsk]3G&@ ՚]bo|WY/,q뚅9fߌ'0 }>6)-t3y&=*5-5K>ꌪ I~rٖq:GvsyϾ>I&{JK;%cœv=!#;[g d+E$HP绕 :O/YoY |b:ut(s4@Cu'oB`#:Dg6XoUX  kjJmWu+B@/ZD͠FY   %c! SO@5Aj`/bb@hhAh>>>c'6TH9Bk(y6ȫNciz*9CpZyzjwgsbɹEwOX-zW֫-֝> Oj5)~i5ɘ7mpw[#E6'6):_T?#2Yu>-Fr\*V*6}dw#D% * 0*3aAt,ȴ=q| +YiD XC%#D 4 uQ ୼S7k!^fX e,ez} ||||DXeN-$8\`Rn֥ ˃w gd 5rk Ip0@hRBMd"p(R ^_ =*?HTK!&vE:ȷ򋌑rt(1-"i5}':oIs9~^ʛ<^mcFd[\xk]O}Z¤izkkzf=~VggӖLD~BLRVImБ Y RWH&ҡS"i;RI30g;֋zyoIO/J SiZX͡2^j9[(aUNSW "*HڸALgٳخ3>`#6< ID[,NSSh kU/ ܧ!P96&p> zu:O3TKB׌Ȕ F2ܝބ!pnU]Z r PK *Z ɺZfyh\@%j]>>{8JGU JBbe;sY,o*#xgJ6$gz?ɽ[`9AJI}iLrxUCR|^+}օZWI_G?y0YI7;-&feilw?n_o/iݠ4?0iZџgG28f PgxkZZdIfޒI[>>{<[0Q (9d2*e2a n#9RΕk#=:$p{߸/^Kl1XG?:T/6~˴TQ@eĔVӄ4/0) &<,:O #>&:w Xq/przzW'{H//=/eW)SNK; eY xĉdRCϿbrO녝^YXD[cľ ,T_AqyOꩭ8BpQMnI:mkt2=m0ϮvrgˮJX*A=ÁOtp.y)M y3G Ƚ;@AlUfQׂUhA ț@Qگ% *FqVeޓ2\^'s)RY"W-Uzuocgow{si>Lq9 }63ܯgf2dcj`y]G6~xڝ^\,͚ 15 5iv`pl`j"%&ִFW{3~=-s9z﹏W'f^QFկKRorX<Pr%T9Ew~T<,ӉfGYA.~zH= 3C=6 S!+3|UAxz\#L*{Ki?cH[3b4cM5F}||||βe\GU_>Y lg3%`h 9N^ }jAigU><HTZoZut7?˥V{@[{:;8ͫg=]-o79{C^^əW22kG9K;Cl]Q,eR="C Tmi M[A~'>ݧr <6Ќ!8`MWs2-Zԅ:k`m"SR96[Sڊ~1.hd j;^)R(ZAkƬ)/Кᐳ!tZyNW!ml=ܬ~P0p:7\-2a 2j =||l_:@(U2_xuxkd}dJov~ spNtOնafgsvxFTO}lvk~kl3]kcL&ҰEIQ0&",q:ksc1Rh=ڽ9sӇ>K>gO//v;i7.|"ʚɚh L,ru=F-GS(33Ց46) =;V摃A.U#i V/]nR!olU K稍=s3ZV_}ՏbuTu3 "ڟާ2ot|;998q;ion1'uhadܩpsL}6S]ckZn^O6~s_]gպddS.VIXD,:5A7 eZMb[ 4̜yֱ.`s}|(1-Y]H]H~4']/"+{o >z ^# <>Y:xmUTLw||lz9Z(\ocU +hAzBh=8PK R 8UÃ)w> uOK0 ~)7d}E}i+.hHԓUM|΄M֋\aj* ?QU9OU z 3 Yzx(8Y) `H钄1~] _ng?%(+_xG';3y5EoMJx]ccwY|@g}֦Z?jR?l>>>!lGԂ@OBGS!P/ !vxzrg*j>`u,[gJr@f3 L"I5*t/=ׅfg3e,eWovlxE\;~ 뫮OU{j˪Nu.lUBg_cYim1M`6~"&ʴfaw;녦K٩jҬ9Y_դT0]3 u>jk?GתFUܼxa|f**f^VY+9/2/>T&xWՉyrWSm;|Vb^\;P^>>{:fWpJ2F3m14bu!} ԃ`BEk, goSՉzϽyp:IOr@}=ϛ z 7?z8QoEo !p:"ΐ;!FƑbu1y yQ!QoAzH'K@F]@Ae^`?/@(&g"irW2 }&9Y^Y: 9:!.Pshrȯ 'T+6.P pzW \Gg~[.H[؝3vpޟP.3vF#G *ڝ#}SHPuTxȱ06QWp4- c!@n:X[Ok1 ”ygd_nf?!i&D.Am> r};PKLw.|ztGoU>Wޮ<^UT_ɧ SO*[_v="$],L3Zu{_;%K;Uj{/7~z2y?"{Rsͅ~fIYZiRH޸om_\oۻV]Uըr`oNϩлsJfb/e{GG6 `ͧ0sh WϞٹUz a@`AyՎ!;po@}uGc>(x39gQ3 ݚ9nj&Ig d6&Daly㳷c윱v(e딀: 'NXP^yT@[Pȃ{ x {tP2qTIvN1Ϟ"㧩]!2 @!1U\Y*Gke^S Ton>RʱVc[l۸nbkůxN].ƃl5Q0󦔞7Skl 1d 05.?F͍274SpӳSR[ֶglbM_Rݾ6Qu|%TN:x?{ȍr&,`)&NB>c *?l:PH{E봜h*@%ـV':"m=ի9\Ձ:GWG"Iu"C=>WJ3]dn6uWE㳗mܤgd)P\Gg8rP腿Wuh:j/P]!H"@X픭dy28;||>h_hϩ>Z\0E^g9Ny!RS J/[񙕷luoW2w,y1uW7_KwFj^G:GL3?Skoll?7;d՚/?{=?ɟC=\T 6)ki<ڱ*KTTLN ö|CS,z.Jw%p 5*5m_uW=^HMLLO^e/8[~t[e`Cl(:TSMO= T @pذC]E9.pL!򻺔OIV@[AQD.sUVgxO! \NF(&PFPY+[-zTo̧|m#Ԧ0p:` Ե3)4\ OF*fP{@4O-Z%^77t CkVM2 d:E "q$.o}}||<0]e6t]qjfHiG&ˏnV0=i(uS=ǽ[S9Im;zꊥ,Z,\;ovԗ}Fw7cL|寣Քb?3~񻳦3ϑOJg5#0 kzԈeZu@ͼwRllw=N+_4w+ʖrڮ^rt˶\3$]Jfke*Nc8s}CFe3]Il- ԑ  KKs=T/TdY|h+/(jKE PH:r[jo$Pq|ޥ ЖS=9~tM}||.,;{l9Os9cyr_~j(~@ F.Z;")u<wVe:Peӑ}[*@+S1~YPioq)U\~ew|.<\9KMdLSg'Աɒdlb?MmYsu*~xtClh|0)w}5SL<zG?ϺcMqf>q#GjJi5]7 DꯪiΉ2m龼-=6vm۴ ~fy܃MϽӒc@YYʱ*y~)g X)+pqYCHeT{ Jܕ O.Tl3?$JC1{T_֒Hu<~* z;/ JCЙz:`2*Y_efo3v@mUO %J-P`}.G* &CT&"Pv 5j-,V!P}ȇ< T5Qcץ/c(2&\}|l̘?㧅ⲊMeL`|.zy[j9ȑ&1^H,Kpf޹^[wMTo;znt5vmiᾓ94ys2[5uƔojRkM٥fpɸ7k+kNds?Skv7C0 MZZU|o;OǽލrXay&yWCB ޶}%umpuSujWh+ETuC9L")&}(Zuuc9d..K %c=홝y$@.;*)ZJȉuY "? u&>خ&AC@;k>:^5HPy9짛V U㳧b옱ke^_mYjZr$R.(])G&RPxgX j}Ά^}$  \b=Kt  3cYR `}||T_&Jh--f KY$13FHo9"UZD]>'\[HP6%Y3ɘL&y2D.-jbwݝrSIa=[oI%>2һUΨ:\DxUM_"-S<-Cw{pppXH9dAEߵ<٣RI"NiTSӢJ} ӭ\ чԗ7-t9VC(iC~~xy;*) R !(pzEVg5*TzAؤċ.||||1vwm6b:)5"[! ިA }T5B_U+/ lBT5DkoW@Q@=Fъ7XFTR~ge@j?n9+rNHޫZ{吪-s_L|9cI} :sK-i,IHS>3UW1٦םchV̆џYfcL)Oܶ?oj6g]ZvD.LMI5f Od-z{KxT^&_>~׫x~*V*^ԉN3>Աto{W^?װ"OU~H$Ǹ۝YӭYJC V1"zY5fрyUg"=헩h& 8?EWonq.d?)-<.TxgyyySaOSܡN cӫSg9+N<=4}cj3'k%yY.g)ЁVk~87#oۮ5%Zw mRsbwUդ&O7`Jß=A߰@ 0?M:;P{}tHpU;j{ޥrw|T*1AruVf3RlfC.9@b@@>>{:v&_J)ag՞P?ӏƠnSr[pα.UC΢5j%F#ST[}I=W9%`5VYq%w8yL2aS[Y??)T&jvs HzVVOܡ:E's~X7U :W=EҪ VBxXq0eA \u".("ǟci,J\ \a.do"i"]'x^7ٽ4ڽ=Й8y9Yھ._u[C47t;b4 (jvwL4v Nc53XS2 2C_XY+9K~ ^|T7]v(l+Yg7y3<ŧ9t* j-3%\i3||2FƓBP]JA>c)zĀ!¾ȵ.B}PGj۬ s?sy IE!37C;SqmJl"o&;@iHȰL!%*L@q5TO@AWPȩdmP!T7r!Q˾vf"\W V=٨eg/4LostM?*y'TqK`i;˽r;Z=#z'_ &RbJrk2t*:_kmVN/uuӇ:v9;[/+7yXx# U@N*St5UMsWЄCLC ~)Q\8 ɋ8$FPU: PtR@SAjEAb\xF@fJEܾԥ;@f' HvvSS9czdV9:XՓ\΃|L8`m ])sq*a~1~Y9bDɔw)dP-yIտxyeʅ.vWrnWu&R2},='][9s2eRMOw3bzԔ@g5jZMS|:Nf=n2gi d2(ק}lv3cLup4z:n]&%MI~~Z6NG> kz.U_XJ>>^] '\PmP\U`=Zʉ,Ѝp bWFHMusPP~a%9JNU@p˕kJ)7xY}D-` &B}ӭ:Q?XOcZcX@PS P.%TAI @tQ0~G"#P-Vw2N}GBB`z+kjla.p2],d'BPeyG +gS{O.yKiw|3ƾ>(P3񎩯Su7%KM亍X\Ӯ>٨6MLJI7zVqJLuծ*&+ZM?>& 2Ldd`zAMm `zkj.ʴlggTTUi%US'$ğJNߝ>kAOwޑ^C9KNSYbz3K.P4jQ:@a2s'`s0vJӡJ5HFQNfiA`jA7/ȵhw|t5YhmzVPX;2Z9Q!$% U?P88h Db΅uj8?*mvbbbbk+/' Mj#FVXBl6Amh(:7u4DR_ڟnd6f,dxLwOd-{|-㇅P:@CK0Ys'K;O:^UǷ9J'Q7-yͲ:ɞى*UUOyU QN}8Nk'ݳ"_~|V4,5~(0g̀5j slnV0dL:%yf>b z}AW^RqnDʂV-'d兩ƩSGuq;.jyUʹ҃.59b{ Gy:DL&Ϟϋ3\OT#oPL`)ڪR:BGz  WAݍ#ס~X/kԝj-D!9\[CtHf5 0X/u:JeV|:L[W?ءRm)ԃB9qjRPH'k;.:?;Zun*D U1 #NL;^_@ס/M&?X~I2;^ $WZps`U[)1:?qc٘x^孕W-](^y=vP.g;I2"j\?f#lj?̾F'0c {n:uB3]8xȴG٧pUв&eKn(y6NAAᓅ ]Ǻž.%yoBx\.9$c|$;JwJ?)lpqp THG=?֗I:9A 5$ڦI555oXc6PȹޭP0%тSiOZC29s V^~IϞ-UImR 6 U_8JlP#}}jD^Nh=zOI=,P_%!ͩc.@g_q5_M޹q?fZXK^ |ޡ>ry3B(^zB{sUm#z j^ G>W[!@mٍ_zFLMo8Z[Z߫gY r&&P"G^"| t׋~C}| N3mnJou,+! _Ē`PЏs O+7oeUN/]Jrx*-2Ԏ1[?lblWwpq9(A4&ٳeaq+E84ž`QUOVzp&AݩcШG?VPqw xӼZftLY_mKsfaFeϟ8!&Җ%ܑYJ%Raǂ).(%>{*ITB;Ie 3Dd%D@j_dM^ڤz@ݫX@!়ޕ) Q. ]ʦnu= 8RY/_EfBۡ3AYS ::b?`MZq^6hvoR4 7lX!9;TAhT] j;H1QrAP/AURqlcͿ@}|t,,, „wflfD({bf.T'.Uaa>8~tEUwV^iІ7_?`dz}˶^]][yrv޴Wˉ s}UZh5gG՛Y_=/g=r?&`vMjl&&# [aVdgh)VdKXtq~~fy߬m*e.\;>l¡*]~hK˶ko޻qdhi.O'd9ў{ X-ҤH1Q@XQd'ZY2HoƓ#T\<,Qu9J5j~C9V%4=>@hIQ uC3ݐ:NPՙAj5zǿTMJr4cecG]1v؝fu%unN":B(j`ڡCPwB tƿ.*ёU}&V+oc? =$H$vkZg!1PwIb<3cʳ s-'J*L^Z IޏU/^uXZ/8Q5+XzSl8m5뜋K1qGܛ>tpWc|SoV]/foY3nV&~Ɠ4| &%dG~jzԤ^q7;:p`f֑Zr7ʝ_]ݹYtyZǟ{gLXy^Ʋ+Qtanm(;9x=i&JJ/r\n+f $ICCNfJ>>{:f\Rj:{NGZaajU#At`,ރD mMށ9u" :z ?`u/BUDn V ՉSH` vmjk^8~#k]6W.6Xԡ ՗ 2!P*Pu.%h+Z WԲAOcZ@pjcXGj%Tr| "2nǜڌL>>{ ƯVLkI/wr kߥ@Ңxȣ޳I!^˯*(ab?W]e*IN[taGw~>}u-= W:w{VW3'#WOzӴOLq3{x/j2~[ݵW)jRfaCs#gd /D tÃE)Rf)Rp+׺CuӛӁÉ !Ӣ2ǛuwCFޣַeXckPzq>>;svbY&Sɨ:P_վP}8"mъ@55zum>zBu$kKZݡhyO}#CU)^XhŃ!Nh9S #opFa@\oPd|3-ӭ&C/^5;sl_I07Livu>I7mZۢ&¢:cAyT8% gw''&rNkb* msNp/*GSíHP/2<4CU\UF#j@>>>{&d;)<|G9bfꪞf `~R#A!T̺/ڧP?b-r^P5- jʂ W:c\ K8ޑ˗kUoP@}mM^~Rx|un"jDKYy r Q%P?r(Կ9gZ :tFBcYˡ#P|iRkh2xcXO d0)gW[3nW@%N)#=A-$X z/Nw۸Jֹ뜶A%=mMͩGRS*HDrR{\ SYVc]oRcChn}l:窱Y6HI)2x3Jf,). UKGxi쥜19-78YzM5Jx!(Z*O \2bowhmUr޶jUJ[{+'2'ep&25*A2]*M=$s/YIXʳ؆ 7PgV FqbuΏ-΍,BƱe:I ;HdxXyW~C69,jH'U,evS@('k>>{>;iĉ3xםJBnܙry)q'_o?o,^!}iɞp2$9+y]Uȷs,zڔtzCZˠ7YDo״#5֦d֟jr c2VPMLʄ温Hn5D~E5ZfU_ā_[CbnO/ |뀼.Rj [8y)H5ImR@!Td/(L ̖bQJzjL@^ZU*|pKCW P'@]נr5r~vKxHn R׸ pxCU+/n U%ǃĀ2 v62r5;1Ej!J"SJYNXWtՐ[?tzjP ZWӜVy&z!7 S!6'XCu`V+UoXV7LU e@!dƀw}|>>{ ƲVR&PF I zN_(j6.4Um:vu4z2[pu0<9]Vp]Eh_u'fD( \ɟ rNfI2?b]U_}@`e"S=;𸜞M#yfKζnbZF!zw~u;X[fnT^NxsdW.-m*=#GM}a&|H=%E2=uݨN)RuJnrI)%Ǖ.(XXPTc-]QrwN`J/}|*9ZkewSՔok5~!_m42D678@!1ctՏ+<^i h~RY9+z;q+ٸ!v}XC]؍y pbإ9T(M26yVӛ!A$_òY ?A?TϞs3:Yhƨ(0N>i`( A5Zj筗)?N!pGG+W#d>}Ү:҇HGT# orZmU dO>>{>!J@2mFXU:AD5 zec* SPk~Fu*[uU>4ꒃusUiVhl5##!62XF@C'~[M;ۦm]Qq/֟vLU w;nMHCݾ^}L7OoI7~gC/f1Jg1uucy_ǔ 6cLJ.XkQe%Ch$f"1&˜;kȀ׽KZ'G#"oe9?作aՐ4go/GzާgKgoL4k]qgVs*r~5kSaD$K!:֌ LVő`1x@Z/|TTKm4\Zf{}ç[gB7w #.`jAB>X$.ɧo?S].i̛l6'Yèj7ML[|*S"?7԰3?L|1Pp W9"[ԛDXԉP{ŜKɩy<3ZEVX!'|Smȋ R: sr4L#lg8acV._CW̗d,eRdL:z 6;[SZߏoʦWu ֭MNrզ7(;uy^cl2j2Ƴ8/ԪKk[_k?ƏclZFӏƑ77L֯ә5sM@I4%zѪL/e<&N+S_֪&y:?2/(|ra+uh:}mW*ܫ[e C,:y bHNKޗ8coЎt >>aı#0쨷.Ќ\b@>Ij*P7!x-C'IРwΣtpޑ| ;>*ۂoB_[O H[``/t=I.} 'o RG tBm=kzbCߧ_]zLmDH/@}:S TLuW!ejl^Zl+heM;'p47z;j݃)E F5VTp R GB&1e 0<$A@T88@,#gz0dқe̐)UWB.׻+Aq;iX}b_eʉ[scRl%%1=v ̐,#RwjMC.ZuwCVW?WohjhWeeZcDJξtE(#3L|&DMMF-f0I,5b^;[-^`Y-+:'OZ3zE\|u2gA*{ɯOE'F49n:OX.R4;2bTzV?<ӵ2&} d8Tu>S Q:0P)`tM:DH i$w'`Bߙ54UE7wUN.oT[;RWT?ԭTf8Se=m{V s5*gL cH}xӹKBE3dw7=@2?F^$ 722`&Hޢ5Vg 0RL{ t60 |do^zN~v7vk SذP@.ځY[Q}3:;G)`8r{T=U@J[VǃJܪgߖx}h+ n *6k@T.ҍ `M)[؝egBYwː7 x Ƌ2:Z Ϊ@sZ֬(4>$ yse3dERt!8h,f$C}ۦ{A}t~ӭ`мI7Kf!d٬ktkt| ~߸!~_ٚms&P`<i6ƛcO {GN5h@K;U²,MRʷԏmyU^N|@q^h %,Bmw,}+# ,7۴yt,r쐃>BK>['4,sڷ}߾:o;SN"h]su#|DZ|q A2:] uyz*Ml;uBu7>݃vRejR=i:t=POkr@=z_ !uɬF{mOXA>;9l}fSk-h-=!t}| G@zE6 )! j!d׿/I2f NOnw{#Bלr 70TBі:BV꼳h26wXԺCH[" S&|[- F@S3Nv_宴gB@(k* fMa'XkpAHYCeؽN9[8|@_Xx'T􍿪Rbr z=ftQyL"ݩ&KՉ!x5n\<\9%:1D*ˉlo>_7&j6+8gOnt6S)M[>]°^WhtF@Wͳ57MQsz7%1["S/yH{fX ^_l(1ߨϙ7__YsZ5-j.kW׼fV2opZ{3gۏm?;=n Fr4(>mh$#.--߬wK_w#k]SB_nEF~qA]$X,`ugFy}wr6[X3jaon=/ui~'yJ@xBHMd]-.[X e cb /P2.]  <k luS_2hO\OmvN*ZD_ɬ:NGw`JlV¯17:4|fmͷׯoJ.ltѱ ^^Kt @C]im)>LMhM ׬ Dz]esJ9J߻hUΫ6sw}h@^ps踌37s>Un232:?~5=8NXPpO)q깗QbrYbs66>R> Ãg L qFaNJ>WH)k<節`}*i VTssrOb,Će}c3U_f"- .EaB< @lPG1 xHVJP_Zr]JS݄5Wmq-|=a~t*OݵtzYcY+ t{FC {<'|V^2hfZ@P*Vdiz wTA `.Tp6Ѝh @* :%˯S6R@1>XmV[-j 8xX{M\کJ[x 'C)Krnci9poQ oL4͹>܃"LWAg0&\)\LXar8^m*oB;d,c7>kz6u$ҞsuZ9V _@݃ _dm+(op=T 뉢@}8Y Ǯ;S. lσ,Z$, |R|L)RԝɞsߨOܚ8V+F{W?ZvWq(º֪桚#sڎJ*hLԬSlͦ\+0t@uiݘ7:RSnFך{?lI Tc~`RM? جԛ/t[Ǎ7˻z~f0&G6P7ծSmWW͜nX;y2~YO=~rB)~p9+{Y;׭n.yON2M"0I&|V?r!WlUJ8N5Tfؘcc f`VMJgt&h6%FYsC=ktѽF Hj6֬t[1=C+^3} \ è]#ucQ0[!9+k/o~->3l ʹ2LJ;$U)WcwR(MhJ39hM b9S#]T=xgT'Rďhs`Y!IS , p%VG +.xZ4>g9I[?6S4/;*ގ֨ʍ>IW@dHfR"u 8J @tAV}ujҵ^pkNLi̙wtۿ4/ۧu t|&Rb@m7눎ҩ75-__ZNQ'y&f=B+_}Iu-tv|~.V0UB^eh[1.GuGL_dEƫO>iJs%lg;Rf<zTuK2WOA@4*'WCAw>o{`JSRqq9DLUj98}blSP zgHq{86ǵN7=!g;?vBlߢ]%=^hUu5NM "W(?Obki [\hOкњ4:RQnOj^٘ ?_dllXI d 3nf7a14d/UuW[U*vެ@Ϫl2z ښk7Jolw|U6n:;JUo9ȑ!Қғ1bd4Ç?!BT?]/7 ~o}ݎN]Δ sik2 @P-ʹ߅ y,"ȫ APcx`-PkfaSVљFwj&FkRK{0;H1@^ay?] f ̎0Uu(} 4PS7;{>YtQAy_(՟E-}V7WNlS@d*ӸsZV)ar=M f;Hd-~`?l,l pP?/ß n:a>47:c _PKr䃼`l %M@y,׫o}4ț^d uA*x[.`G9 .sA`Ʉ[R6iٽj^fAmD?d#\~`Kj˜*cRm/{V; Pyga`\UcGH~d?T}7[Y b-@g* ֳ2 sL̖!O [2r-(&mX^Rh;#,CYh/cA# ;B@+{9W|EpbJZ 4&$ vwv35ўe666I*UG0IH9,cZV')\JD]FD8Ӝ_N<:~E N]+J,?w3e*^-{K/!*bd d_ffw3tj@o\67zLltѥFjt93+:rtPuG\?ϴ DLccL*qe4f &?L|*-Wz;y˛Zl%vdpphPFUu})pPqY+/ 4"㨌[b6cx'mL (8,'J. F1ًl ^K$u#mZP@V:B:C@R%D /e"OEX,1`XiezGE@Z7BA5Ndo ^)B/V΀ь (-(,(}%<\Bp{;؏EF}TX] JJ GRw'%AFYh_vnl;qax@@y*6śR(Rfr8`d}dr/dK<,Mnh͆2;ZɧZ@_2FCȫPxyh ?.?B^IJH*Zkw9 IpAmTϰ4ΧJVjpJ"( o4Ht[btI(Qf5K-"e˾rO)Du~W_hf(093ڦHٴ;IsoͳZv/k6:Owg )(:ĸ<+yܤwPö  _s:@󑊂en+W|b|;֍v 7%ٷ-L.ܫ۸sz挫vܧ&9e*d::By'3ʏt{ј8f4'PWňadص"g6oK- @6lPJ{*K\:Q :̴3y r̆pR_19r;lp kUg?L@s:P_Yj Xٜ|,j$ ܃Hw:?y[`;'!'<3}zobW2@Col m.6৽c} @@>Дr2@kN V;^,Py낟xSƅ2h51Xlhme/FC?A2f(,td@Jv,@~E_;A>.Dݮ 0 d?/QkUb$NٍKI6瑆O{ U ! JR cn3~V=YPǫ#b.P5vtάNW+FFW]_|Pѝ;'W訅˭Y7rFUMmmrӵW&mS3%i)2nZ)]`L6coj5q7KN5ϡY&-ԳnR͊9zffk6of 1.{j6:c@=_}kUY}}TٺVdiav_>b>uߴIi(MZCQ{]P|dɃ<88>79zH xTzI<{7,>I|Vj`#H2 ! ֹ2(Yk/ }{׊ZΪݾUn=Ǚ`_`)M`Lȴ})PtbYfN 3| N|pR}ց*SwR`,_R lfolrlJ28ˀݓ@Ngcӏ~OqC¡#`zr, mi /2N`'t{G]fM$gZ@'=*~AAY۬Ӭh=4ChsUη(hzuv4:Dy% kA2^}(u2EͨS}e}}ne&OtMnbo.?R)Jgc2jPz3缠f]X5Pgj63Ӻ?Rv/SQO9zl@z]ϛhL!3M̊NMbCOUsf8EfOx&:~<9Uٮj[AT+u"|X tױ:pߔ쭭k8|Y?]1f u5voyjF-142:J* W5ȭ/z}#3 fYoJ>d3* ΀$M.xg]`-f32XGB32fBȽ-p%Rc}{HXWc`(-Hp)ϱ$IpZPKT1Iv b68<4I_yH9 ASB PqjtJ^n`'YW2<Ѣ|dx=«o,S/z(_yqQiq}rЄ)e&?eL&j+Ju5Lo=ޔWf!=1ntiot(40v]S0n&b.=C:3g{XGv 1&{팋z{Pl< k_ת̚#Oo}#&Cs BgӭcG sp//9Cv' _1шF645m@rj,ͺ~k^ ~kMjT~JA d0C|@{AQ.ka9[UM (\./C11;cynw8.Z.hܽ* ,]nVn{p{9ͫ%u75ڍh@y**Bv:槽R62``λo=O*mi߆T懚L9#^}\dj3?S;A.sُߒz/[7Cr.ĂwmPx}ue(h:X`l˂r ^i$F9.C2;"]I!kJ0 ~;p@%w_}@},Zd7I^Q!s;&8's H-PO.Q38#]bS`5H=h}oIi37Jgy"!S1rhBK d89 kl([NDOJG(<2tMgmg Cɩ/Y@'Z.4i9&@}5ՐU_!c!t};}9'HG e0І5=XB9p1qDYN X׽fDZ{%4M9EB,`ίVi퇄 h:/KnL]i&`<La)9Jh7z\wltaAĈSqm(:h^Ԇs:z ڲiֲ<|ģ֬\S_=j|jW֜|6ԥ̱sB퇭gv림*iY`ٞ\C#z2 p*0 btƏҗjzR92>}Gw FrZY!i]C竏fT|*dO5 8]$H.H,v>nPyScYn:-vfր{rP0V;+zĴ# H]EAC9!k0ҁcڋkP^LҐ Y-I6rOm׉(e,M:%`-F~ Xm,W r ,yl%f7 apQY _FDžf h#sUgg M_|Z MVdtf̶ Y9AmaX\2TRٛ p`I%Au%)!}ݤkuO,]=x/L 苔0ғELQ\5Oj!P+#9 U{>]E/WŲ6sjީffUY0n }&0wUMcZђ{)c;;G<3zt04ͽ5ҏ~m6֝Fn\Yřv}f7Ctd&&PT:#@L]=o7 `ЙMu;um*2cxjvKJu)(mt\㗪_}[[ed֞+}|-Upo^*^H,.Vצ!J5DH%$@?,tfCڃ'0r(.JrS&y2TIGv~" ?!A4,|S ]"9SšR-b926q߂셁e?<]Cmdi/S[~mLAx\r"u D/N rP!cst!Y>nĽ )+!_;uwЩu&A3YAs']:Ns }mɿfiXBgq Ð@w71lXصwgIIؤh^%1+סr}U-Տ5b;5oNش+)[u>/rP,wqXs &ֱ7rN\ sLvs|M}'$!W` ܶ> vFwNc(.ĺ Gޕ`K`FY}!s4kA%ɝj')l P؏gWԟ^ʣ+3<\v{!n=󊭯ꩦآVU-[)Qrgq3AR^3ԥ1UXU]²7WTRN;{ˇXsD3ێ2a7UvMٔeMFy#ͺ˛сh^ǔq/i6:/W tJCقI;*MIMzl<^{_mcd)^Ufe{ޫZ8=8)qO(uNKV#m}{L.̥Y+ݳkFZQ :AuTe!rMOFr\!2R7 $URuW /YaRܛZgDmVi'9bRjx9.NSAgj.[XW˗[KMLPs߇r?MRwCb[ ~ >KPuDlz *nPoBCܯ5jT~MU|?|[5S^kK*w|JPϹm;Z/N0uhVWzNlVM?ٮpW19t3M Ԑ'K ^O50\sJzNjeCX;Edu@0aW!sdAΡdV,x]T*Koȿ?xNBz򲂷HWz@5*}\ !øo[ʵ`njw:P4 j;q & 6U\ZjD< ͟_d2 Il@E,b>K|sꔨU3"ڪQǻ9a5'VfG/ (߯բU;{KU+ڶci&k{B&UgWsI_:h=Kw}^WF7=wnuWM*gRltљFwj^?_6k>ϻ"@C5ۀMjihJya\&^癶FbghzCjZr:yM7>\fd=ڷr)سc#k9*c+36+#ʕ lX7Yp#7 8yבd hA>PO-5@?aՉrIZ(P˵W4;Je0w@X*m&q`]jh"*C#O:'w qeT{4,V 9pk=?_}Y?܏ ʁcmU9dnJ&~ʡnFE Tߺ7 U;AչWu~FQ j WQ J=L nTWTT@ûT:uz*hfPd>  j;K-0ԃvwEEA}vPFXl{u:?<- ۑ &8AVᴗTiǞ@eoK9,[@ !dGDZ|( ʩ䃬e \EcIȋ4ه%$WELN Ёow=!:dB^[LC9 Zn#pEh5 .='á-^zX!mH)X2>as p(4!lه37S\B;H卤2P.0^| %]~$0d MyJ%@ؠe{/r#7$PG}̯u/q>^rir6^?/~OqO-U%[شk~7h]m{۲wL^^?Zu^E ʘ}ٔfW>=>by:i6A@SCFw_5{mMg+E#zޔhs@iWt7= JȈnqdiJ/kԢb%_ݹI*gp@$uY=&/=QM}3ng{H_k(9B-[9ٲA6fkiK{:1t-l?Ujvm<mcWyE=S+r!<Ł5+ul'YOXqĀKݯC:+)/XX K+jdU{Cn]@wŮQ;ڸ_e@-!ցP2]%Q93y mN q\ެ>ZwO+zޅd}L}~a:fW(5 f{yV~ܛթgBPUL% Pw>D=jJz׿ 7& =}Oh t@:I6v5K=ݱnlӲ yT>hKbe'Fǖ?S۾fmuڢmWn^,i! )oORKz%^ljy7i.o)MS53@0|f#3O_5а-I0GqupDjYQw|p"ʎ/vDAUJeu/7o 꺣2:>25[#òJCeD[AOzJu@Lo$uǺDkP- Lh2 %`MT#!Ur v{tu DNT{td<:Zi ]rڃ]&)૱f3R:ojʉj5 z !u,%_h?!B X΁iBnzھ^.wAClB|Erd<Xk%k co: `_̇}dd,e,Ȭ/Ȝ{H>}o˛qP|52m#҃_@6҉d">$J @5X4f6ӿ>xl<+`tB/@k؛%X ~Ous+ 'NW|qNScw jfM?Y{wd@x hiLMyZw+Фj64f6~:C7 X׊0W?_Mm:0D HAz<*&!̘tI>~WseWjB1+v4&Wr=8 Yd yGrER+}! [d$ފ g. ƥ.ϵ*&̕l| (6uNЄX /R L)?=U r uK}{Q '|m{%$wWBVWC8=ؙ~j0DCa'yjvb/%Q6&"HLP!mr Ojr2OV V9u?׹Q "0󶚨< N?O}RmU߁6o}T+x1uۢ-R;7@y2`"u)s9 u /'ϪO\O69^ɳ|FV 8Ύcַ^}e2dPA| A&mY?&} {Y[~&H |H6e-.U[=}d:[p /V_OJ._/k々r:u~A+),rH LQKcb'O M@D1.SEV2-]yÿ ::? (PST~F:n]hgmىsm#S#m^Q}5_]5ҭbEE#ԾT[S{Ys_>td:M 2~O5%ubZ&Oi6ƌд7:/WpW ˣ1_0Ɍu xfcaV)zDzLWzL{Ś4A|+|"hlihOT\Xz_/d7Z% oFHˍ b{n=k (YKzEUgCUbNUCPgo7Htg0ݳlpV8Ur\V:B}vPiW$g%{H쳥w>*'>r}R 122ǘ mѐxW6CX( ,AY]:@v

    /()̱2>lwo;!N"!t~z𣗟cs\,ȋJjC\]]ܼneUK%0)z;ٽZہTQVe0>/_@o:<7]/褪}[/ESB ݻw퓳_"H~ ؟MG"Tu:+gSaYfa`>\i,h<)wΨh}%]v8q*U4]Ϟ=-mzd"`z{[-Lwۓq,E1BieQBФXCc!` l'>|&#Lp40ƚ_0u}vkߧ~0Ӻ~?ܗl<~JqAa%@mUavo !5M綫tWȶ(Vu]sܾ-nA+BNZ~69fBn DvEYsj4a, Qţ;xw}@8tȱQ0)%6E?e `N`LAWa۪̎cseb`1ep$dY ׎B,ve8h~4Ic,el1MD{kQ IDAT,+fЁ}ǃfo%SnEE"ڞ[RбMas'ݕu UX'RK,˪ϟ[+z1|v1nB}Z52]̫}~~~2_eohe?{ +9^hBt|2{MSՔmƘ_/mດRXHƸmd}?L((veOӣX. Īo-;+zot?PQHd[ezȳMƣ$qݾ-"sw)&t<ʇ^~˲ Ef6NH)>\_믌Bg}A,w }X(QxLJl2M1eu燎ض;0ň0V]i@J.5I(7wmM FJizWwq2M7Un_/?]o:/)!N7ZD=N"0ݧ8{vp ü|zu}6IPJmVJ(Y_Pԕc ).B0m{Ji]VCzs]Źڞy޲.^A0toE9NɅFxu/w< cdB9|1{|trDI]׮mE SjT^Gyl==M=}zz:$0m.3@MRdY4H`:ac0-kyUǞq$e_9R}zIYv7`@ w!WJN(Aj說w|1)쇺n0ܲ|F<םN'zLgol_x{^-o)0pA20#,XRu3L[VзoF7(n:s+).Aϭn(<;B@9Riˢlbu/''ym}Uwe]gLF!󬲬y`l3aOtΪla ێ/%ֻMڂKaPDQp}' O'Tu[E׶ٔRemmxuJ:~}{P~ pG',>%X#mc˚[áupsyfA~8X b:rvmZ> #[n>(BErWiC9[ 3#^_Cz%5(p>E gƞ뺞4uUrו[?_xd%:™04b2K o]OEs|xz&iVV]>Fw7B㴨o,M 0xry.buU:6/q{g #Т^A9הywoC8/~nYftM:eLM뾟N'~gsכ?h M?|/_6x2A2&n]ū^uyU]Nע_D4s΅Q-QZ68/ʶn68CTZfY}Bi k#FcC,"nד鴭2Oژ}YH~`uwU5&][s۷wZ]},P~YVh aJKV830ˢl;훴(d Qq BGZOcJ]B4x88I4AM1}rlfwenjf?0󟜝M0шrzzz4Ǜvm4JWMőX}kP~d @=>o:g5u;?8"hm֫GqIMU7xUoۚRtn p8g.rݦگmA8Omno f9(s+Wo,_<;+W~9wmnq vvYsssg(\]WdPV|4)!cQ%4WiS4O?; Ʊi9޼??8JwONZmdS0@srrel~ ]S4ݧ.yVYYfTBEx2Ƙ~}sN=.wZYb͋S&q"MgB Jq8RU {n*#K?J'duCRИ R.&8nBHP[ 0ʸ>OFw۪$|sDW12vZPߧZ+׮Q,'*D>kbaH(=ivrzzzzZuӶ,{zǑyBoyYU؜gYZlc\yQRA 4v)fofm;N!|p|gYgA8l eu a8O?]oVQWH?aQ1,n ` mٔۛ[Wh;q`bX.ﳶJh^Ԡ 9$ 2^@1He2l+㳺*O>c/Jjp3Ht:i:a/8Bo^ lmNw]/?\2UEhѦnWj`,kU;c;b$nvl:Oa8FyƙcSw4 sQ`- Wuw}WW%chi>/d:'Jwe~nlk2MBNhH ٙMŎ#e-f bϏny۴-*8dkjY{ M&u7\^/_x%}IϋAA[.mm,7w/?9:f۷b~ܶm@²nniMmߟFަ/pN/i}C5&ߕ!1!dbqzy|lrB@/5a}IGq+ułs^j)J!v# ^~ W'Ћrk8S^o o޾'Ta;6Ѹk[ Ƕ%r{pXl (,vFNcqΥFż][ő;BH^Anv 3PfG(N(' Q,q*F`ױ-A꫻5s,]<eBHiQausK|4]zxcL0*z4 (!]S{#>;'u[qxpafyy6ZcO__][#=?9l6$:89>/:۬^* i/?9;8t6Q²C4 x4lKv]mS1F ]C=gqcٱY?f6cYq m'c[ŮHw|T7c TѤl+EGlmhϹMrOp}y]-?:Qw”_fug(J9A  % '6eVzh4-Aof>PɚU/@ϩqϷ[Tr[EÅMH`A.P6a]\ BTEUٓ3cRz2RLqϦSen{ٻA Sы~>G_|z9҆Z8+wo.y]^\0 NeN>b~}8[" ux=yhF Feyש4Whm[#DDSKD֏.ʪ||4 Q瓳#x_*-KǶ J׌Ѽ(fh([8/cn6s>el6@Ȯެ֮J EmۜZt:F_~9HI)ڶLMYRM'(&$IT]}1l4uaٗUUS+(N Ư_ƨF{\L80av֮ˏOk̠t2a]ijqfq+IbFy(956e{yj@k,VZ0QlqޢiAJ﫦k[1&he=? d6ov;#eܲokϵ]',#/'nܝ7wڛ×g8N}9LJ{۶<Ten(~2N`P]WQCgl+{q~~^7c6y쇄*|5R^`$F*ݍa_>{rëȡaCW\^>q| 4nsmÇU'>Yo@\)"Z Ir25 8CGapUUvmNBo:Jcf >O붡t,lϏN/=Rhl"0;v\`4¦05Jjl:~xُB?hR)]ײ,ꇇU_˗~~UefW8^9m3(] hڮp0AR Fx:]wBTRx0w*mm߂ٴ8~<쩃㐺 z0edP6}eeS0LKݽ]i0' ( ȶ^5ޖC'Z!6{ az=H3` ،iS$ Aʡ~%﾿Ͷxݐٳz3_kDWiKA:cu3F*Œ['qm|f<e;}'|ZT.OcضO Da/Dw}&MA$MRTjvmy?>:$v|enYU$aYQD&IZx^H<˳/^!)^Mӥ ( CQcVRyQsBf|z}7DQ4i;%h2~6I8s:!|@fid٥kT{} :%_~c:?/7ynVlƗ3t8HςQ{~yYQt9+Fj}'18VMUnX`Tfx]n L2#D fJRb3SWR&~Y7R*r{8+ˊs$VeQjwA(AJ?8zyvp~zS>b<~}`/~cP>A(\oK[]oea uvSK fmQgi7FNGRhVV9p:QJ?{?;?OiQnؠ@EƁVk.NWDwBI1e;$I߯7t4U5" CDNN\Fyeq6݇ Awb~PkU4I&TR1F˲=KUHƑElkP&,cCbhʡw|lgQM?9d<|6ٮ7h߯v ^(CӇ.*Po~rro*QTϦJxAvb<wbz{}ͺǣmgc,1C+\ccN376Y ]Ee'eãzjnQ(Л&$bKGMfj0vwJx~rtjYVۅ^.ĵ|Z׵E36WZ+`W'NjY7O.ڶbt:gin|?`6w}g+E+Dp}qv7uHr6doh4M[miΦ~, N: CuofcBho~FayM̲NGͯvZSFA8z6 :`& IDATI9\̊f7xvǓwwg#Jݻ׋d:Ч 9} sV6V`04! Hk~#EWe.O hIn>PՕR&sNb}+d/Dp1>jOiq<ûkڮ?p~vpC~stq|ul~q~ۯ糳Zbvx2OaS4>~URHĀ!Jo@f @3#NOlt_@0B9 wM{ pR%ǖ>~w^l_m4xC*3TmONq/nn,cx6RHv1$\w.~r8} BqU4C[vy` 1lj4o*-` F S <ۦre>}Vӑ{w{U"qu7,f9a2HHtmU5LValdo&,dYfǧH"U󃛬:Ӷj٨k,(|r|g #`QWuu2JdoF(Ij:ͧAUԠ~#w"{]/[qoD˳6+ ]2 G/z=;Zm4 ` Xrѹ]IHFw`Ψgھ3VY_iC]dٲ(@H9te1j$P,Nhq~, jksֽ~\8eŋ#K*lw$nN;k4dȮmbˈ 3M=w*(ZH6g~{y'[ M[*#!TJD7qJttYP  !G@8ӏ FX9ecf;1pd0gCs/e6]`S!J)*$G~0d'i7R@@l |>hRP|Jo4=_Mru=ƀ3 #0$\ R- Qal;*sdWt %ķ77 `9`T2 ,Nz)0vPEO 0`uZrs s0kyE~Vl6;s2hwlk!uE5@0x(Pk 8~ZIWsϥ\I_]EiY7u8fVS*63/ XkWفvmpiCӴm+MǓRa=ȡ0v凇Brq\ xE"0b ՃȊ'q<_5g`Y*ǎ}z1y^6TOA,KwQmu]ģdC,ֆAdW/^<;:8q=c* Bׯo_<{ѵ}]Q;`68\m8h#7GccmY8 YG2W7 'ONǣe6̦ʧOapuKq4A6UwŪB,߾z9 zn.4eS][},I#X,"ߧt2L WWxtg.D'yﮫ>T$2dJЙ;.+Zu`q@q"kz-a1AY@R %*VCi0E@ 6eF0A4X4`A 0Fa11 %B%,$8w C=6z9[9 GqވQx9k K4vvv,Χ^8 $b>lV:qdm]["w(`JA0 Fߘ4l# q|( :FQ `&n~#T'A)@%IhMcRгrѽߔKm50R{وRV`10toa4Jf3|4.)_|vًo?|]Y6A!#)EQUՉ~W-0:IJm1 HC(#,2ȀATQq<ͬLuPW7 ZNkc0n+n_%q\]ו g,zx7i k룙;(mkZ^jbW^GFAj5(mA%`*- <O[JmHi;ȀBeM=۪+Ola yq[GdootE@ױ`b~׻WP@\ʾiP[\X򳫙ٯw]uΑO./MM&fZoGEqGzf}/?3]sfo߼/!a'D4u(wc.릖 6˒Mg?7x%}% Mc/ϭ`#t5YifQ'Jj=Rł-'>ϸB )@;@b 1D2`]@pHvM$ΐ(HDH: (͔¤dQ>@$,Ј|s w2{o a̴GrЕi=@tzחvaN'IZ`!@ lD(d%pt  RZGrQ0cc S }CDM @""?[9cSDĎ]TKLy Jf CDB`Ũ 6P s)b [Z@ƅF1d$z/7myM^cB(u<0kmhc,$B$ :ZAy<ٽZcMeRfGR$IUEѦ塅rӹ<2Y-ZƲ* !H0<׋X "A"D:֓>81d\qJɫm:1-s-&.x%%!]:P@Β47b6 > S~_f&:#Vwyt~:ˇ(İەys;pE/<*.y$\iAwBۮIrDUxD|i ޿{/>G6n1{n|۸Hb߰HWI2͏Wg/ÇJt9>p<9W~lN!>,uYYzqy)6J*n|izXD`:Θu?o?{,F nˏ?h8N2@,B= ^}4M2uBlŇںo>H11FFa<cϾy<noӤ?L޼}?9R06C0.q.Yo[m?zSB18: ȁ}& ;cM/GOFg"q[ScYHg &Y졨m7Ls q69.jO\|hU$ xz謉. Nٟa,5` K1Qo]Nl\eI"x(9`HtGfZ9OReɅHރ,)PA iR-EhZuE>tG]y9SL"BU bi9 b~t"5C |6rKt,PCH3.g_X@ R>yv9Ll5{nXq!ORʑ0??{Qe0ϒD)1RYOeΒYk|!$Zey@ dGr>i2m mtmmS4]L]DxebZ bxxSn^]RɴB$3֙P7]Q7>,uu.,]iWZjDgM/nnnFyQA?I~^N.w5RaOe*7Ey?5u˗_|[ں'z\,O,0ĺmHQw{T_d|\H]mjYo_߾iOdzyvw82{xtJ'PeIյ)i͇r{!D0׶rN1dj@0O"@p5!y/sXzl  8o j!;te6H1v"rb ` qF_jcHeaVl?̈5iq[Ag)ȆQw4Piz|r, "kŸj[ e}Prq~K%blCP8)r3c24J]ۺcAmb"BDp&Z{7!߼~=\]FM ϸu{yv\3չCL󴪪l6޼} N?IE#\=:=O3ӳjdba~v6do*N&Й>PԊ3\lz6]]'3@V7uaw4?Z 7F^<}"H%RI92(ڶ2m[DgLݔYp0H^12{fg2tm4\t|(lއ.F\g9 Y_ht4M8HR6/&g$Kl׵sa`83JU>fJŷ#rn}΢!,{ ye)ooiɨ.rLz6.ж=Iax Nm6 ΣHA;` lLBC_1d2ͤatmLRHFaY(!WoO',ò88(Z.ӫljմn~y⁀&(q9W'xRU`8L;4Z%nԗY?-6W?{Qgl?<ͳ:~_o6#Qo2̵#.׫i?891&Ř5tH0c+G,sr2_lu_\]evv2&o\m7k\sGP%^~Du_~MLHL  y'EZ`<v] yeYU"%i:Ki֋TjߴMw.8?BM  d @p7I>BdBb$s/(  Xwjja?v~"#%)R֘c#Ä91ĺ( [-vE"u@qqqo}RQކp ew9c)"Bt\ B7. })Zq !#Òp]Y5 ^{Z>QdA&RVA6u"bЉLZ@|rΟN~rquVd$JFs!G d D>ГP38g  IDAT9@!%ZcI%i ebû `'\͔ʙhxwzӤɱ,G~󜹶*w`*DlZp4~Q~PHdynYe3?=J ZcYB~R+9_vi-^-$חRJ:)E?MbC>MGgMnc|YVLzd8m$Tlnq{+B@] '`q?,d3hwH!U3m&)314[WVGk|z6B GskobSgy欗pOօ~/c M窺OCC@>E TK9 }(l*I'EY}u" Mo0ɳ.ED͸ ~us.(E/<~붪]ΦIRw @,2lmU|\ XD'xge\)$pu'@!9k-`(yF0jhrEOP2be0p!W$Ҍ3B iE@Ѐ#y||2.MC RdDgC Y5 {,j%#'ɅB tƸno014;t`bwDoRFY51H$kG;]Z2 \ibqt\#Ѳ4\8K^{CeɉB \rq cNh{7NG3t JINk(D"gs>+}b-#+ˇo1Pm>P$Fg1HIdv2D6M Kn:)81dhLp("7"ʺ`)wB΅XJ~ !*)9"C] "qlñ1,cqƚEk]"YҜLD:nBK4@x07w4ϧrKz'5%4Y/K!F9fiX_U]Y4NWgV]vr2O߽_F}i9gOϹhJyljⱻ8ƿ~p/~6R֋vϾ~FBT1gy-/~qrqͫv:|zNf.N&tqɉ_}( UTMe.9򼫍mSئٕB*ɣ?BϞ|Ce]U~0Ng'rG <_/YX./^`*IX/zy<^k3)ɬ-iM,Zd\%v4\xv~q1;9sΗMKa_~]ː Ns뚲h\_fśE/ӘgQwM[PC˳Ӷn :z}LBBpHq*TmSZ|Eye ű8.kFJz*YBʥsG$ELNJaY:M J3t9Ȝq BH)ƭw;cA2(2Bh EH1 w1\pཌྷH0\Dr-c1h9ȹ]*`rǨ2DL~VԐfB+t6ͳ4 vȹj9PS 9[G%Z>mEDdRj@;S8eRvn Qpy:I!'D Or9x:ɡ,#tJtۚbWq@O /2:A tZ{΁;r>RsJI7գi/ނVyfu] !U slh[+z]@..Db\ h"Pԑ"cѹX0hB錋ib@)nw<ֶnDOLوfѱnIf'>x{:N&SxKr%h8ڶjMжm$&=Ň劢0]wr>k6n߼zAći* Vp& FY~ XVBcҶ==.wZhy>nJ(eZh-08ΠHRg>F1b1 1Ĉ~U2-X_ 9w"}!Jy)3Y+}Q*i}I%D$J4Gy@ѵWU9֙NL+ 63F[#=8_JN9~6ՈXTH ELS"J)Q0E1xc#c<2 OTZa! d,J#g!FB1q1Ǭ~<>zvγ\޶e7CyjʶiB 8GN<>6XfeCmu#H"!r\~geQ}|(%X!>BGc ޅ9d.k "8Se4F1F5IQ r1Y* hbRȽU&݇byK_\Bcdt< OO2/mv}7"S1xaESYI ~cJq͂`8hYr0(|_޹>lɌsٵIo(36~n}c /'Ǫ M"_} MUDDv 8pxLr:ƲD0,+o(13_E[77/OOT1opq4 )޽}L3 D^w6!tvh6ۏWO{^y8>zlU_{{84UBF!Rr<>,9cBɋ9v!|2MdĐN]W1Ɠb}r:PLDL1X\8;$WZZKΐ.mݘjN&d2 5ux RWLsƚ\0FI?a)"0F 4=rK($sD.qc  =@s^Dȑ3΄$g!2Ti_ϞF麺b\KXmg#cY7'nW)bs!8

    \máϿ?l,b8 A ޮZsEȒ$?;>g}ݵ뢏 UvM$",SZg:991^>}4ִjhdfzx`$4p2%j˃Ï^<.8kNRʮm?u#M'l} !cWO$՛Ǐf'6M<ϋlLWO{ñV!H)~/NU]vM3ͺ>|H?q.aq]?M<>IbEw.!>?uׄŇB8 L3^K.֘O=aB5]S;=Ⱥ6u眉X{</=t$rm]oΧo*rC$>dC<=9rl76O~UoZvMHeA-"ze&ͩMZ8T.vg1"Pؔm*&:#*{t24``!R@esid6tGrsA$cB1HOM Bt!ӳb{(.E|,I`"g tEm_A&y2:UUnPOZHgA1j{o, &^?2'fMduW/()WM[Ψ@y]ϟ=w7`H Tx Ig Ӻb*f>7]OHTb,ySl>5"ň0ͮ<97?_?vwWTpmk ¹ !MԚxq69OP姓Ϟm%_|!YSWqY'!_w/!~/KUUuzz\<ت@ X!tr|=~vΦؔ:M9#`߾ٳf3Nt6X.n>?ȢAr}qYDY^|2DUU=}h 1C }ۻ*4q¸wnJL s0ˋnx0$U%Z͵o$/^rkPϕeYe KPjbaK(uCΤT SY\`wQ<ᮬ%%g<b&*>Fׁ]9>}Y`@@BTC3d1F O)m%ZY*@hsY 8'%cB$׵l,E?9 dg`q~C|@$ק Mtcluۢ۲0'wP?,O󜟜Laphlm!p m7Ǧ<四o,|,R9o-[AqO)2gyL01"D!2!p!1'vRrZYݯk:Wgٴ'~œdMЊ; ɉFOnZ{TIuoºI N:n{c8OgݦYwEUOʪvF) F5D'чg;~\F ,;޽blV.YzUeQȅhXԓQvpju:˭}oީGv .Lpae9v c4*`4IVkcMaTUe5@$]$R`RȠFf$MZ8Jn$!B>1J)A@b >0dxT($7:# C 1l-DL0b I5mg*"JAi@H>R℀$$, D@m"u~ ^]׳E9Hq>Ve3cDElRi(5 DDҤ1!qB,SY唦Dq!1Llc`%eBcti-N['6k饽ݤ! {eǤ-{ C`<4DC1n g.*%N P00 G@V1*Jz2$!F1l߇AW[#^ѧQUէgG'wno2H0a]ے`\"F* ֘;G2 )ףq9;_U=}7\lNr<[7&eivgwOF_β뫳O>zݴ,IT]lݻ_<>:j}3=}Gʈ5˫ӳWgE}}q*׏ vJ`WZ*D 0( $"'a 41ɻGU=N)qYdLROrŇwf`ol޹7;~$'O~ ǟ~zrωQν!\rч0Kι;"YY^@j\.gWry¿'{U]n^P5f3?1I]_\K,%?@ڙL|}ˋ޹Ǘ7WʳGVRf>i`o<^;"k ?yN}YrjԼ"om\ O[~(xuq3cf_LIeV+)tMp~/߹7%p˅{ܫޫ:˽>;;ݻ/,JJUJ_7O.Og:a ('חQORd>/!hqcɁoR!+*>yTFǮͪjIwÇͪQj?G/>7g |zpwwwg\C,nfbu }=w&򃇏Z~3j_|x~-zz3?{/s|\/ݝqh%%vзa8suL]R1zw7M; [6Aa4-R&7_ot lg1u XU)3nI!D-jiAX;kX쌉zyA07+f2R]4N=SΘ'mm?w!uEЉxvwg9xl ';F(r"dR@!u !ŎUQ% >%3L />?1Xʪ2N>خz޽@ܝ~L{ߩfuuy}>N&?K:RbSU˗/̘!/lU2TJic3[tu^dJ?G l3K򫯟~Œw騪Lx00ū4MiU|eӽٽw $+ l@z72l=M5Dx6 J*DAb%e@B91q Z X-/wRufBHC)%[Ν 100G ]⼏19Ǩu4 RJLVS00: TʋI1N~>ޫvCSՠ,3q"AQϿg4 3F6Ke{M cD'FVERc f Ax^,ad̕Qy/CVQihV#n^>tWjg:)BU&m6 +X~9vmL2Eq "δ1P(RRօ.E ޟU#N;v;WXvO?5Y;oˋ积/Ǐ>8{rhu_?}zq{.x? ]_X[/@Fƀ2wy9~lCN|^\]ӏUl6y{nhWMs7__DV9%PI0i=ΛzTGwlw H POf 0r5㓃iثe^ӗgW>§w}sݲmoMQWh<ɲ~% YQ&^P덤ֆ6G~;57WW:l"2&&)QEv$e8NbbվA<"#$4FiAՙVuQ&gTU ]G"UF$Yjīeimto @Hwf2)E֪kۧ7 ~?5u^(bcR@0(JotTThbTXS~]6m6)ji>z"b2EI@dK( V&110 FP 5ނl-ٷفo($h @BT lAP2B e%'#i65)\|ڒB]~0Z%Aˉ({E#De P)eR@fGa|sщO?1LI%J .uq'O.>Ξ/_tZ&G ARQ)mI$5@{LVbFwh"iz7;-6p2N뙦~i񳫠eJm'p KkNGyբ; >,ZDȪ^,~ѠH@ 1JEblTfhw_~I NiGci;1y>*vEWF/<_W҆}&WWe= >x>tM38two@xvq]EEպ, kL?.nh7ɴf>s%=QA)|߹wYFNr\ fɉ*ˮـ/o TY7ETp`VkCz^nUi?4p6wΜ;y wh2yq| t@mUi164vJ ޵$q)DnpGN'g9i@Q).Ġ5Y9Aaa_,ӊ'ɿu"#b&ZL"J  ߞ5 oK}P V4c7OO/՝Q() I) a$@ĉQn;⼽|Nv y5t~#|g:V_n߼ؼr8ޟ8n}YC.d7Dϝr,qjqyP_] IG *j3m0*쳳$ͳ|'?|(laNnx2kY UW*w1!鋫?|owg>\I|7F;GG.0Nң?픛uZ4( <YյE<_,aV^6O{'w~kozZ}GN|;>,3_1xf[n2w_ 0Jä@wz{1j˛Շ{ZԊzڪ]=z!Zy}1PwE"OVmSJLPUe5( 0 xvзm iŐ@h4z7^\,K)hu)(!QHUY#n(˫kflp%r=BH$(ǒ|Ob89 @s"Y0Aڠx[Y) ԣJDڦ:FI ^[oWYV;sr^]/ʢ4{13DmZ;eYM3?xtdlӇu+uY{O忸?rDbd@6μ7 & Q@H Q pt;IE= Q (!P(P:`zF z|3Gۀ*~x7{d}"UH.-o ɹl7߾g $[@,Ƅ:F"BBT b4ZF7!+ܾ@!*@'|^_?կ^o ZuFÒ*%)*og gݐ+SPw_/4Crl2>77m69xGbӿJ|b,~R""6]*QBu ǔCbb raS(GO^EY$aS]}?W*{`$-R #-1 +m?[nɃ~W÷J<G۝MHm׫ iDBZ$c ܾUBðh@H(BTJ@9"6"C$BB`8%vzپs홁$]%^jAog,AH o>6"ײ@>+İ>?oO_7__" pDCD1ĔRmO,Wȫq4f!@Q&ۈԇ{LfRVh~|3}iNv_nS7Mx 4@ Fส>:>_}]ŪL3rvϊ8.n?B@G`=;?'6hw:J96M;tsp?pzMVgUߝ9:wr?l<9Wb;IB ]?,몪w|~qyy|tt/ۗ(V|4N'kD.?lږ6MO?OƗ Jr99[HjLI-G_]bys3?{{}Sl8{؈VN!6-5@r]~24k74̜8qbDA8uY @ !AR/+UVe>^yݼϖCӬ{=ι7v# \n*3үN/ƶ"1?F|ѷ^g!) M軧mlCgγ>2)=~~{yu8.٤iq<<'dVTjcͺͦ/!e^PRYOo7<|7v当헟?]yQId|oʼz>;Gɹ_E*E~fM~p_hw|u}S(}?gkDy0uz1lɸ9]}vt}1ᴪ8ڴ_r^ [2]?l2 ܰF0&)d!@&DC K"2S S2!&"iEAm CʇMcR̚I]h??zuzy7fxeFJ;w֥&1]_\)Q~g|A2s,>&t~a |hdru{:3Vĕq4RThuF8]DhT>6um"N{6mI?FJ xl֫z4&q~; >`dLSɇw+DJ# &VNzM9}0ѠVZ+|!mkW D;9*BB пw#Qo$?ÛAت~$ AAH 4FQzW%R%.#@"A"= m"φ߽V>C|_tFv/uoG% !p #CXg/.yS! ^RLKI$1#2CZ7amkT) 3l6N >i10`Ϝi tΞ۵v> h THq\7ͪ%(C{EWE?߼ޓ~yvVf\*7A,qg2^]O;{YQLŋ;7~Tgphݥϟ>;pղsrWWyfٌ|X^{[nzw4Ev{G{LJyYonoИۛkcl:w}w].WO^F/n_H4-z\},YNE=gR||6VYM;ggƣ|;ә~^L6ฬ-G%HeF&3!Mf! "* tٹ(2A * Dk#"1L qgi]MwyplNmfep"mm9tS&3dfȁߴ=I>x}tt(Jeb\232ڈ.mdR+/ME,%q +2c:Q~\0ɣj _H~i1\w. % @Smgmw9`>=<ϕ[,rMfհ*Wppoj,oG`f<3BR|;u7O_x<J٨Sfr7k]`ceݓ7ˋK {{;Ӫί>ѣF_xaH{1vw:}WZ.|NE`~xr['#$Yjvxj{rnGw\nA`/Mh=ĀO/wO֛M?PglVe9rUיVݦo~\yfB\.8^ $oC0b46K1*Dx[`8ۏΡ}}t|R5]m&#(33Ъp gޭ74K.{lgVVV6=ݳlC D$H  z t7*Ȍwo󈌢g3;عofr;n MJ֐kͦԱJi4M"k1.<I,JZmR(@t;wMUW֚^j*ߠJUbd A5u(d痗-$X5[6~?]{xHdUPِDh H;@:5P;|i#wrikfaQ; hnKȭx`ǷBXFBZv2 8Dnyca`i;npeZdm¹ tSƾ>xww߮_iAHm  r7nFH Qk.?/ծ*R!F6I$8YCCZkgY4Z۳ͫ5o־Ӌ7/Њ`g8J񎾜- /D'(B}ô3Y,͋"r\x7Nt}Ÿw& &M'{}]gM^ի7u LcA16:u p }:gz @`6pٖ8<'w*mC[Cb5ngٗ/zO߹wt‹| ,ů_9~zMHEȃ3U6iϞ^3O69X{),J`4F2aw`"dVuΦ,˺|6s6;v\WE5>~~n5"_ypP0@JQ58ebKiRQKӺl.W4Mݞ5v\nR\m<cBu-RYUh6 b2QT4e'Ҋ~p.*STEmױ!(wӦx'lt g6z)"k:Yr(KVjicQ*"&p]5IE8;j.Lbk4@XV$/jdobyu 7a+4J@GqG=v9DIPxh-m+@A P  l{kٴ5@ l0Om -+Ţ\ [-3m K*yHTp7 N\߂[ lX5uϻsEXNRѭ t oޑ7U(Dnoo (oC =\[g@zv+("mH|gjvF6Ҧ(7imכl'X7u&8tif`l~W*m闥g*mQ .5 L,@nU^Hy@f~7xQ$۟1ڮ@6K}^?돺4W)y^9O^:M^//s#,KM^z%c#T|4m`\>L%c~<|ȬDKL꺩֫7ZG,2X\.adq&to..O櫓ي ʃh=UU;N4ݬ^UI^l,|̥ <>߹s&|>- ׬UkJ$EeqNIgeI(Y4VLٓW/9G1vI/?yӬduh|*Wuղ(8<_WI'=QT`'"EuPbR[FeY[{g<(Br ~>"yqrƝ9M"nzv6{o4Wn!iq2噍N'Ym!{{{ii6.7X׿AH:XogoΧwCmtΠk ypIo<ƣǁ`9_<}h0]\^fi(٤ {RtyyYB[$NuzL_~_3uҝ-7yo0I:|*<` '{Io =` poη?a[|[e]ԝ7ofrt(V8EY,V_|xg&6Z7!|~~_Ujt`r~1ET a !a/'TYGWuݼxFk=k*̗7Ho>)W~ujQ}@`;Q/A"js]@RZa\@TUӱAl(AjGWՕ7Z)N4"|>}?j|G7gY7޻swyt#/Y6ޮ_74G݇0erZmn\xK pƁR_"1Aoߜ~ß~3i?ĝӳƻWW/tOl7[~s-Gd$NoBރ50I&<\g<^d]NǫA`r- ŵF2hyצl =7wDb2l"x,*#p/04&6UdAs``4Q[kH%V٪3<~>/:~>3/ *ԑyS(2UQͳ{'t60஛wdali a_C;ږ[!2-҂F@DfDeFiHb Q"$ JEG!(RҞUM}: kEA?j*(ZF)FBmD17ZIEDu0U;/GOr낄m,k+Q@λI`ww|h3ArEf!lx,2P᫟dq o E6"Pwn(MUHZE\DT{)]hQ *b,Zm[V2eݜV.hҰU91&z횮Бb3G6 hP=ߦ@wU8LJ:v]^uys5[O_>{8MP|L0)ǽŽ~:A LX+^m+hGtX gI{|~ç &rq h]ZEufYYSȵ #F IDAT;I{uv>xMQx4(UQNbeȘ|j $6&p<kvpP{Va]Ŵ1Ǩő"B9rK,!r|HltfZ<_nmBezj? /M?Ňw퍄9uU&VLUQңwQ8ui7sWU)Qd0GIzc"bafѩmDbދH (+lCaVڔo0%/ ! Ս!y AE;t ~{ؖBucU tuZi Y$  V&Fժuz3eCo_mge"3o_m~uW _Qxk-8)oe}۽8gx;y !3+ O?hX!l|qE!<: //<m1Ɔ~?+vzCGlISGCn9+W,}4 *+"ky+˟؞gIj8QD 5TdjjXc¡R]uNchƃ?>E> X{\uݴϛ%7ի7ϋ;71huu:E"ufZ-*NGŀD"EB,k99`գ__NWww{{vA:η~& W? v4 J(RH pG'_F$@Yt̃ @uGSGk\F0K2q*/<і91FNJ-/7%<OЉRjW,$eժAr^^% ?NfEip0k®!4pYE?~3^ .h|4뤱Eҹ:#*fqAK&o_׎_/?Ŷq4Ox4OFq7я~}7O>}TT~oX_xyMiҩ}k#eݻD|Oכnj6I%UR kniAޙX`g@Hv$;{cw+A Ed {󊨝D!(]&Vٟ_VUwק5ZkJk_ )"r,+FM,g=bvnARIi:[V^\PtUV}Q!q{ 2v~ͽγÑEPIl:M{nh$\קo晵{Daw;4d<#j^.z#!p8RJŝ~Źbv#NƽݪbDTqgU.˲W[ mb72NP\E)R$>ibFքD(UhAݔN^֡ؒR|-5AGW4P@~wXj}cg˺n,6KJXm7@` 7$Rj5_FD$\pv"eg"Qj`U5u<o?Kl(d_{McȤX%m&~2|0fkBEͦ(K16JϲNZM;JiϢb'I-ڹGYƽN`FQ6(wQٴ8NPF,-c-QMDd+f\Z`5fF((4(BTPBmR9IXI|y].2榋&hhryD(/u1:ժuɟQ{^0.XCMȂ΁g~{.Bκ|gb;[ώnxiD(R^(SW~:N+9>d^_\ FC/ߜMpYU>K P A@@9 @D(,FXl֗Ff8 DDh*ck猵m@M^s `:xa WEI?IM3l޹MM]Wvr9N'Mѳ;6aړ8;uZ 꺪ˆHnRAVK"cL^ot~r2/tgm]wGO%J/,m ƍGG^hΗ1Mt"sRuX Kd?O6b1GؒQ?GI4l"3ޛTέy!U7?~K j偿O>{^i:@B؉i#ឡ#vE_x6 ARBJ" 2R0FF"ӦĴ6|aH="f[?!lfOj[^<   P+Fk &`agbpBl[h V݈p,(˵w x% v1 ?n!"kkRעۇ3 j@B VIǿǟ''TVMu E[5 cCWukL굫jy7"\W^iպ^7Έj_z9զQ ,_.WGl9[l6 D:MÛEz]ݣZMKtv0F)4qlOr7Zoý!N.:pw P^UVVȚEUS_\ѡW٬7,W;G|UVjXkЍ '' ~کW&_+a;82JnMYXWXԨU, V g1~?bźje^LW`o22:Z̗>84:rSEMneݮ(2*؈m4۬j\`WIURR[V*QT^Dk2/@kҞGQ4uq_PצZkwPŶ i ,{n֪̋9lw}x/il4cP5|?dze"cuz)4jř%":U]qx/"DEYoE'*D4_I "Y#k`t^5 #}'˂zBѠ"iJRybd$E@@D p!"T"O[ "QLSs+2Zqg6]n$ =[+#(lLһx`~:|]3; `7^&FFig2[o*.VJao)/.V9L'ge!M.fˁ [Ϲ cY&&yYYxTFqVR:ԍTՃ8:vzA4{q?>[7 ;e,n">|}u'e,@IgyYgcu^ۢz]7M]WFG痋6Ϋ[v{O_<ؖ?y6w}^^,7GaoTyO-΃&5&Omr d)#\.9rUqT{ŦnZs,qä  9"cJM'6"r:E5J5Q h;Фi."HnzLT0\e}j-dqƣ2Qcp8|5n7{o.~6wMDJ@ևƨAٲ+>:N/߬|7ߣD9kWkFw{>{uz~Ѱ*ˢ6KōhLzQǪGA_~qTIΓȚקUuezi؃e)A8NڻpcsHkl42"n`VIt60;$BxP`g!@ HzvUlƢc?G@Im 8D{C@",$"H!.}m!bD7<p`ӇA)c+(rDt@Z`!@R m@v9l ˫~Ǔa! 7*l pxgP;% $bfwlWFhVj@@Di MҦ6 2h$exk*moqW Pv^IaQF@"PbV!6Y.CF!8nb]Eq'IR؊MMSvhQ`4bnR< ʇRJ)ɋlq+4{$qɌ,O{dU՗z`E DzpVL!t`5K@<?ˢfN~zw=LR%%B^|u\9f.{=|Rx>-4ۍP]N:"2u= z  juK:-M=R|sHo+\nT ND<A@H)$*tUz^\֧_48 JrU~8H n! 9f{ l!J!?bPoOtCDK:.;i Vnlu] EڱC a.- 5B" Jq߉ʪ&Zmʲ/Uɰt==s3I"m^tzYq] ȵ~ykaEwh4],ow=}R7}g;ni_3cgM]4UQZ5yf'of3v)d`{Ѥkǝxu6Jjϊ(|źk0p1Z59ı>#!he~meokOQF[cցm`6FURkK "U iUz]eQoxlݏAo-Hb\$3-QK^Z}c/V/^6<@p٧Gvj]xbrYrئۓvNj5u%ţ{uQUtY.{w`:< z}+PTkNkU_lQͻnf*ڜ_hUDh}uuE@ {{ *U5սw H! <B"5 "~~F C|~:}hij prb `*B`A h0vwhHt@HD)F8pP1"Fr%!fPf5N7+ZE&]3Qy7s(NdDRօ?yٲԌ,(F$j]@P`g߹ZQ5[~yvěFjj@PvNiTx!jӕo+" V^,(¼PC{ NP(HJV&D4 .W7_gG_Ejݬ~qyWtWbjeKͦ(E" $A"EomNCR|IļۼRGF@Q2ߌz`*yh:d,Ez@_4e޳z)$K\g+⸪*}_/_E}wۭ7jij9_\>ff_o6OqTLw a{"HқFڪ IDAT<̋ÃY^9A(䂴CDId:^v>ԽW_Aܷ;iVx=+vվ7#?~B@ݛ_F@@{{9@`x#wW9GpޓAcro~ G%G8~gn_.磼T,7d9ƛP 'wE\:Zx>+_W% }R$Ѐr $c/˾Ӫd|a頷{0Y5ݿbuUSɷǙ\\$I^.#@i8+˻/ ž'󫻂A{o\Q9rqQ$":!f @ xDmd[wM]@hֺ{IŀhOC1whgG)Hڙ (/ 8R2b9;`8l)xrvXY:=>Nb( Bۦ&mӛYm]7am{<ꋧ82ˢ$FG]`y˘q^DY% yP<85Iprt'n]|yX/56, y7TҘ3Z:$QY=L-4x4zrbB}LE AKMC!TF@[cm0DBDY;@rȐWc!'DLrl/O3!pȘvpqXtˆO5 (v!y%5qgz4k=TRkOTaum?)dGM>_^-T|p & $I2F$\|mWyQz@d 뻾1 ~|Zr& َE䘀o|ZGDR; ܼW5Ď={X 2ړ=l2DF%|[_Fm߿ n/հo?~\^~D{#9o8 ~OA`,"j~|G X3TZ,PN1 !>#;@ K @ A/DP tP 0jģ|7fEeg(T'YtXvc`IvŬ%CDUͺ:.K7"̓pPRA=,BGs^^~GGyh@>{丮vۛ_>d9oMa0L%'kK8yv0N۶3I:9o3E|₇LTw 0P Zpt`Q2+fBl;nB)!Č P2Yc,QoQArxm=yt|qNȇnHʈ?A M ͺH2wEQ]õ͓8wշci)/~;oL'(+.OB5_Y,>nHq<avnhonv H*)yo6 ..7_j A `lsvnA>8F{p!hC$`?8fXI>m福yP띉#}FiX`ߘ$gywz:rAϪnG Nx/)vޥQ|X93ʻr2 ۶?9<ID\FJƁljMm_3b{,/rrO~g@inO'}tZ;Dl{r]Wuúm,Ѩl?7[mnfky˼vr2XXQ1Jl4,MFa$ġ20(F[!y8,8Q5cg4GRI cGQqtpPDYz2itVD?|[!wݓi>0i1WfL8vGq5wWb;4ά6C?rV[ZJdE>M&Lwmj9ą:>9c8QE—y0D(]o;`=8;點vۦiiowb'%yiQZ&u۶o'E_=}5*̣8G8XY:CmӃ 8z\ ' "9rŐq"fȣ5R BG/otön1QD!Hַ'y*+57vVʏL$i.ۮi&H3+Ʈ] HQn9{"G3,yXΆN8y'ExϊQ9`=o>rvh=3~"lΘx HEoj]1v!xtp\#ok Fwf6իo$Yg-wƦLifӶݪH~ ˫]}#!XE\؃0 $ I6MO,$ YgT<3HPwa8bbyE.Ӄ;$ Q*L!4͓_q^EZiqyze9 fX 0 dL7tC1M?zYo64ݮźHxͺM=RƌXŇ/Of1Pfǹ",T\t]/i%˄co-^.w͠<Û˦j Cq n8<,z֝ Bo,ϛ gGǂ dQr42$b0)''ѶnP8}8  3dVaf2B F@֚kR\ d.kq5+rƅr캖!2]SQ㺶6D&Z,|ׇA׽`v}8 D$ŜS:3]5bnrk:r^hT?8)FiIx6 `WWȥP曯/=zIzoF;3*3$snq7׃mvj?>,C.jebv19uc_ݮk@<i|r|Tđ|\N(IPwr[O zs֢~4T=yK'r{g#<ާѽK{7I}OɁ;r#{r~h!'{o׆?(p;"OHt{ FO;Lquuw+I4T"8f #ۜH !2uSߓY[ 45f@Bp چ? #z8 ~Tt(;EAypI 8$fj@ s4̷ұd4ޭwqe10kѽԭ[9-`Cl{W2L!v,DH~|tPWշɀy1FD̛Q!փ|:b[iȸu3z!ShlZNG4T̊$P{0KcIQDdybn1GiIyF.狛~ ɰ{@vglguFu֦mQM\ Yo~{oeӣo}*zwZ/&eo*0m4K`Ͼ7d@`pkܑ>dAν7K.䌴,je%YW_>Gښ,I˲V ͪ,r/~tR׵I$I< ~ܐeT]oEvs}#UuiQ^na(zt[mQ;`9@P 2V3kmˬ,59d2#A(Ct{! tT&졕5'1%8}!ZA@LJ;B!GdspP IG`Zw߉g2 |DB.ٗO8W9oW7]1~?yO8 nm˔<0ͭw~%m=0` !LoDa%9PM#V<9V4$ʨ.pzP:kX/67R|4CR2ѓ'xx(g?XҝnI!Y@LFd2zPp-8I#DN3Ī& gm!z}bXpvp<.AIL5M5_\Ũ5]UuOOMDQXރ%aDsi:g qlNnqŅۮմly|<+EhQqs!1=2|O'~ !IKcsW|d@R;6?Q{8r%*0z+Ziy܃%`dPKҶ~}s'H*:}߳ƚ.{W%wB;cpgY7'8H%C"g8I1y=k">ɳvUg, D^lfcU#yė?Q*fLF/nB$b_u juWw30"^Pp*n M2v)Aʁ>.w>8y|ֻ;?3%`Th윊^nm;lvټ~K97 2IN/4n@I 1.K\oO]XBŁf$+s (in:e3ۦk `_ו=3% 2f [ݯ.nB{C ! à (F]GE0 =v:M!جw M記*a2y4=ȳ䷾V&b'/4yïE5`||37ѿO7ZLH=ͣg|?߸dV2G:ߩM7}>+Oz">q+gRə!Pp&<`̾ 󢪪ah"Q6*mF >ObY]<GYd]nFeJnGGՍM&9Xջ:=s]P(`| P8Pºˎ-xBxGcɣHz4>3|aϟH)g_s~(MyDAFAFqC7Ax'Yln//>V}% e)HbksȥAD>+F޺B d2Me-BJDhpuuy' }6*[%EapuAm ^f{\UM5;k=@ 588ZA0Yj'Q]\#ypͮ񐄐Y?/ &jOc>E]>b.ntU*n.os ,.M׍ZE>r4`dOg~i8 v]wC΢e|v8o<~$8np1\i$Iιtijk-3q1 ]qFX{ۿ4ՌH2˒Xƒ+ahd!ԃGӋ.;u@tu\- 0MgmL !\(yQJm: %sq} \,6imkc횻|6+v@蠔 0!&q(1lc<Ί7, 'P՝5vtTzu[w2C7,yRk/0Ey'ag0 UAWU-C>X0 7+|jյ٣ǕoרԤ_ LyAicPV9C\0 rƘ`Q2@cp#pzUoK_!^3L .]~1ln3J)[3pD1 v9xݴqƉ׵&IxAD1M߶'9Qi>C T(Nʬp鸐\]lo'ѲzAx4Inim_s((q:h@xٗCP 6rdJIdEp( $,s qrx&Q?뚐_dG_w(ϚM(T1KQQdF\n˛mnHBAM2Yc8̊Qk3 TԌ,?ͤPnvٳgp2zo@$H0Bkt'[m 8gH:gQdbBA 8\nz [\;{?{OsRM]5] @XPd`-d N MD" YP?Brl[g=f;=ΛژR/˦D_}FG3ū\I:h 7V4z~;wC3 j8x~|<_\nrdW<)L(quuXwwY^Nfjo:y֚QQlf,M8g=t>:'<9>Org_T=&4Now&`r|e$1"ov9=Ur܉~¹?R )sι " 2F.8g"c-pƘ^w{=Afrt]miaн{*'B2W}߼Z. X'zXm ƣ$ R0QBhc$z0s!nۦQq#}; (Gŋg:͢޶GI(:7};Y"P 9_8:#,V9z d\q@ fT8 8hM+XvhT1R!(GCyw{-ey5; -Ɋ300%TaCpUif˫n֛z:J%%gXF13~Wuu]_] Pigзi{е*HySUH){X-+g.p3~'0BNRfjtNY_ =:'G>;ߝA&^(;{^/y\-7_]~$GOҹV;9v9xz{j'y뭻W_߾{:( j8bcU)r) ~<;<҃.6ۍ2Lz-]wnݮlD}ygR0tf軆<@(aS2⦫$zoM<"IQƛϞ^|X4 aח77x6+—.Pp9YzOWtjr.͋󀇛eoF{ipH2O6vCكY24hlygG'ƘgxEFf.CX7-x7%fwv-6#?`-i@:S]'"vƺ^Xb-gz}^kǂ(02"Йa(INN{;>{sx"7͖1N)Q0ν[KD:/׈332%QȀ C,b/s9Br9kk a\{/:m9*q{C߆K$00mݨja-fwOHI2o88F*★Xvb*H1%﻾.T^z[;2{[4>iگ.ugFG@ӒPYcuyY6f_~~ }t#32Fd)"Z &lc n?YWsr:*"ض WmTbRvuDa im`{ KE7)5Ga\Ymy~skݜNHHIe[l ;#;? woE p@,N$-vUNv_fFy9&x ?zك\xL^MsEV >),e]"b^*K2^o~O289+q,]>:yDb?Ҙ-Nl%yY؛- qմyCZp9'ZA9VIwqD(Bpc3j<'z 0,~ÿ=;w}]ɸ~QJ(NWk vWa,' bĨBH/ϗחo(ꛦnnaRLS֐Hz0H6bsmpy' A9 1gι0,q'Y/~fG ٺ ,W0$I%FZ9Gрm `ضqH%bcFIhȇ# R{ GCPeDFy)q 2Hƻheq>`7R߁ R'!=F{ `! wH;o`> 9k!3yQy`rZ+J׎bKq.80&rXiE { !L:F"(IVWje~evY  xu],θ 8(:0Ab\.u&M(lQ4P,vz$SY s#)'UX)^ICvN{q6-b>I4NC׵]uEVizQC1B"eFju 98祱0`mdIJBF`魧F !f bgY6LqsmTfCP"vq nǣABRʦir\_Ng$,kaBojj2A6Ѡ,EC٬۶nv4Oq1眵VR ~~y|z\U5@ YFVvJ{(Di$Cţi9HA$7Аx<â rssQJ4LvW (ˌ5eU2&xٛF>7|>o6Bo\oM9^n|Bx6e4ꊒ0 é4vԫ c)bXUssE1ELI dwW2DQAGzpknoQR(>w~mAd8EŒ&E%+_{ݛv_7Q'\ƃQQ eRJ]_5OPj[uۃ#OC6|VޓUm#f"0UG8-P`EI nXxL,f"}xURqsƔ]ʁ p8(|};8ah:!lm 5ۀm/^[ `I,6JǧӾ};(i docථ6]c] `h2ózAdsFzs(8PJӶn9K1ap c (]U%ι(\@`xu1Ɯs}"V{v $zʈ'-hf A0F!rhYީۍZX{oxNG BTgaƹZXSM*i,(^. ѰN+"q@H\wXq$)lIk. IU7Ͽ0ǔѠ<8,Nal#Q1`L `-h3F(׃'1AL4N8Rmw4I%%o^r80LH>dߴNͳh>bBw,+c^b=@j][Ғ#[$|rdS0 5m`|~Ⱥ:cv.rgJ} EDM]#'T=v \0{eFvN6[P@ ag$IX Njn׫6bU$\,UFgQ!NkKq7>,MoxQ"k@sWSI%WbcBp̨΁GA+BFXPrZ]7&8B8.XqfG !`y~*,bVսDڀAi6@EN)ȳ`1CླA*f\[ܼ׮!gEY A[5au0@ >4;M80aٻوS) 8] pvTDDZtw!KR*|~vZzpM*ל4ɛVfI uEAqƳ,ic(9!GL1F9;c8A,bvqqv uJ#`Lp'(ZYt$_?O)U׵ȇQ ӴkBlTvFNN,&BxPmwmƑPʺսGIaE,Kh>yvo[7 a@uw@;o)M8dO.bH7Vq)-|YJ菾wOog?onͫV':ӬFV zU∄02JQ8N(;Q\4ŏ8⣏xSqqo7~l2 7r`Yn"}8bLP Zz;wfխ5PVQ>nQ:]aqob|Z!..7|~>;>N(4:l70"vv=ym+۽$1@;fQbsFTZ T۝Uq`@ Qw^ʇ`]{uLHn q\7ݶ-tN lP", Pvd8[g`]ZZ'Nq8K 1뛦B`9L=rT c[Wk'XN}TVIٰ઺=&nw__\dp 9gfEt8 ֛ x:9/R^848RZ8X+y<-j֫d87 IDATTUo8Fo7%vSE1vZyW˛u\1l):M0//?}Z/?7۟y[=:+tϟߟ{VNfۿymLve dI/޿X̳{oW=h6m]F94l9b#mdWQJ85 zFE:M d\ܵ]n/w@azH!׻z$E&"K r~4Yt^$ a,(ȋahfM<ɲl~r| yVZk6i Aą vFHA(B]Q=g/ۿV\k'HFe B4x Zqf_; N4ZU%B(BRʣ,\ThMSL"C[ NEH@wvx̳2ӽ1v!筵q=N~k1GIErY5]t"@\1 (`9 \+Aqh8 rPѵJɫd2B1q}ө}]W\X!ɐjg姶\pC00(¦`q|R/1#d4aWWQYe̒$mni@)Gڪt;Q1yj/ep׭|szvqr1͓$bY1ȦcTOҺ/~IR \W;'X c|TB!<,ڶh=l'1}TU#Fz6Kpf1}l"½Q mdjZގFcfWAa\u*t10ńvMyzzR̆kiPBvƹXآ@D9 q}ӣ//J”QDol>ӬZ oPl̳rm[y'{tuyם;'@ q&pӔ1@amz{{]Y R%#PV?} 6aVLQ8x{4^m G/ۚL''",A_~~S"KX(J/WDuʮ2,,"O;n(K2Fy{-ܷW-~5lKGD(I2qT /TjM|[|1701Ɲ!Nh KGOJBu^^V*c10J']g c7C `qw6<{8HJUo{r_b x2n/W=$&p"̀^_5!,R 7,Jo;;=鮮`G@~2Nq%4볔YT%pҲO_.{vrhiF|D⼗=8->9e0RJKcN7jx,vd=Fȣ/~Kɐ{`a 㓣7+}Mf7 (n@7Mx6B}SL$hҍv*?vmP`@ 9+8#fF4b?N (=aϣSмnш8B7`ౠ9TЎa)]zó`:/Uv|:DEbt])<}סY{v(),!rmҴ@̢8(]+gS1"DHG#Ҭok|SWJW_;i<- D3nz_#3D4r[A0Be7FwFZ9wg(!>L@ h>߿w$ܘӷ5&2/ !JQWהm+%u6ϲ8P!$Ϣ;FbSN lßsu[v R.Eqx0\a>y,us:Ҙ1 ެ ^!cLfcCI~-TD񼒦w~8OJt/oeb;|hFJIi`.MSF=e8s 8E(Lf4I?MN`蓗篮ԢNs유h_՝t J'IipS u#ez/hr2;;Ҫ0BR|v}?TPGT:r[tn$%1o>yOgyvGy@\$6_\t4(``-|z2yX43ګ^@?yu[]edBg "ײOFyQmݭݫxLsiicaDOM0s<^Z٦ *5>41:)>ZvE$:lG{$@#L4,v>,yu]G(7M`d80#l~46۾2R%[z#Ed"(8c꽷PDJCL|sXmcj=(={b8x{|c>Qf/ Ư~w 6OAS%_?wC;R7HDj>4O} 1f{g$Uj !G "hؾjء6,re,E0h0pt䳏VwtUc$7RZ|Z L(iNgQ @M#Hzx (E^~yQ !(Npƀ8`uE`Y^P!ܽw Xy("(`+uxza $Ji !3 u4s((!Cp1gS "IG(M#?իk'Ǣ@2/ֲ/./h@.⍑2/uSyo= {VݽX/?y}b!C ge$HNDL`HN)n7d4LW)yiĶҮu̐7f4(RZkB6J(%DH9g s>v4=yz" VY?J;nU^ CSxhw!ɽ!XMWWxṘNY_uWecV?'@= Qv1p>l|: gFM (N#¢ͪbݮ.JyxC{ѧWfx<>qjKt'e!Gx)FUBxG7vo=T mzDr>͹ȬOs7t@GkOmdY: RRf6dynGZEg^4jys4}ϲyCVU)R}7,@$0)eSB'BkvJo5F{811!edIJmw>Jy8}43&N8{@@0=7f[s [-(n){."Bvr81&M(Gck-缪jhn}tF$/g8< 7?NUװ$Q{m|o*kZ xQT- FHĤs."}4aSD6}_,d(\nۧG ZR3e^-]o~`ĩ k}۴ao6yqLh'1F8b,ԭ6W͎ ̏n?Z1>E2G4iZ&BTKY/{v>΍3JKB\UH+Ifw=޼K$Z!"9z%=o9;5)Co6a"P&yZ 1b2(͡fx/Ks {L!x8*TYQ GZFgqx$Z^-__ )z@2&Ĝu9e"8ƪC38~ OOr&,6n_~q|LU׵P7؝0brm&)4(gȶLtg_^܎p 1.u4M'+lp auѷ?oΣIO}Ѵ~fȋ/O, õk䂌_-'2X#{<^%BM_^UЧCwS?r}ky(d'MZX\7>,D AR,hW_^ώf a }B@w qc'畳 $Qt4({T}:;+Dʾ= $aX12DE9Y@M]"X#E1cQ+2U::> P.Q,m8}h@1ZLq(>TUS1catG1ZD,-)4ʨGg?|-?˘1[xpvӛu1̇bEq|]1#×7NjqVv㣙j r>Ϻrk2@eBwG|p6Z,gf1yųH*MQBPQ~H:QDh!Y'fYnZɋ] \Y #ÜAk`:{<f[xOߜމulh8Äbv;H"v~2>7iB`qcB"*0aFXYgC୶oև[pr$@$z-*RI~祿n7ʸPc00 !p0C)$,(MZ8(d 4Mtr8G8ZGcHh:2?0"V=Y_7ݏ~ŧ^t>1 O~{7~}gE/[@F}u~S"͖3>|9[pV9)M5`ͤ IDAT&F%o0BDFAu^\bJI3 %C?MC< HTLov7'r4>bJVLJۮ{՛?7h~r|Z)*{S,c)(b"bi0&;buzpJ…5iaߵ7Z%HX%`}!pZ;aJqC"$(^WVyq;(ظm14Fz/X,L_e|PEs8O\Pl!& #oǺ@0NAm4pi1.B60C!P&"s1L0_df? B~TIa]!TcI8&i$RB@s}v,`b:J(QkDЮ8 LSlhgqF%BV#Ó"mFk1~2-PFq%]S.8[mnoY>ȮW"%%TkzqܔMB(8}OрCp]\Qu SBQuV겼FpD"t 58P`>)d:zmz\A\(kUiޕ=89:([CMC{BzmA91LJ31!pΡ((E\L&b2#A}ދ(Dmem[ [gFƘ*'Y<- kmq^ȃw.Fx FI!H]oCpĹHʍ$JZpxG)-rI'yەMSգi㧄(%/X!Y1xZa@SB!JQTǜP٬ooozwgQ@PaU( ,rRpZ#\*t#F|W_\0!&" j0ȸOBLl"z'ݻNݬݞB)~ȅaG7;̂c P+Hpj֝я>\_~ R7/uOo~?_-hȓNʪh Dn;8e  -hl 3w+rz¹@*&iUoG Ø1UU$ PVJ!# `C$A(滕$fᄣYΔʺELEwje$AhF]Qi&c/(1&y6 QZU:{ES-W$θqp6e$&mM4-EȢ8 ð~/n,=<[5ͻRzsА+FGWn[s?#[ :X#\dAHv ̳gyHj"yyu+%fa(d x>;\5j; =`m49 #aԖ ,K8~CV]EqvXX'g<cYaR2ޢf})Hd4Ji{$o_(V91 GjcVK+ş/?tOrqDzk(G z D$AXch00F:7*)%Z%/{rF1.n[aBdrHX7/ɤRc0B:{%mꦉX8c{q#03lQ;cknmk1x>;>;Da|p|$5k5(yb}KL< NqEQ'y:8I!gZX1A4vIgJ`d?4M@QͶ|S+|/}dQ9뵬MRLH1Rvn-s0Aio$xmFdh ;yOn ^d"ٟ{QLT P`חݓ']Q}~mē2w89ڶVE;G( !0c)u?<< a(p9˻no@$4Ktmk|3AcطHj SOӡkaC%Hm1 1Bi;O?b~}{3GgP Y 8T1Vke)GWu6UsNqWח/ܽ`z]շR= BfW; <9~zAVMٛO?8>7zpb Ax$KpTp { t,f޹ i,%6 Em|s5jB1l}7@Q* 轇)1"DJŗ$iZw8|2%J{͸Z9罉o?L ZL,gznR8r3(81gon޽U|=RbbFJ1hdz4HBuӏ]9 e¾K ?7_nj%G;g>xj{ڱSՅc{By˜Q 085[#I!%1 pF0a2NA`Bm!;0BY +aaŔR@iGBSi_%1֏2q@4, ÐR# \k}Y8pmwݾI;b䌝h1((.b1 k/u_qtm4c眉8EG1tRxg 0!Bp{{Qn[L#m/ͳgOS^+GyE.c_7.~ !LQ,"9

    ZсGXctOR^PەͰٍ >Y18UB.}AOYrAݾ98dB4!i`B;RkR8rUovf`,H9 zI 0Γ04 =nz0Ao9b#L(F;h%ZƐ6z (NaM0hK#zfU+Cm=BC趫Ty#y<z͒W45KZ@&B1*~r~6O˻mk;+Iu$ؙ fkڷb(@Ta{;?~SUw;7O|˟|}{IelPppHD"aтC?~p%9$KCh3 8DŽ` 0$zc6hpRj!97Uڀc3;;(Y7{RJ7J )"a$qd2J8;Ky` i+JZeD`J0XZۮH?88ؗUG"1L)icmR8ڮJs ]ǀ(&9JѺ+g q.$0#vvr}?8m=8DHƒ&i&ښIg="j//|&y,@L+5"[mySer<}]7lRdAE1s6 XJ1V&GQtŨ.wIʇ$Hdٖ`ZYx^ZL ɱ`4Z-5FC<4L 1(1Ja?8#Yryݺ?ۢ(&Vf.nzrdAT˱nO- oyq) 2eh#j!tø۵7Ak=@Nx7 pk3 gyp""RLp ga; XOl0SjyqG< f;Pe]]' yP _FPL/~ScJ׫m>c'7}^77rc@; XS ,)fO擣 Fh)UrYڲ,s)54 ,.IS[Y ]݅1<8F59J!tc0rUƔ4ǏVɬ9x{e $ 8OVWWןk-f(Fӌ0ROn,fa!N &:#s&g$"FPBZ拯^;p#FуS.X[/k8ڹQz !޻'qMzo iy9S}ܗlmVǧbח;e`c"zNk!̜?KbA~w޾|ptA1vY16'axJ.U%y<{)&T3'$ !a{~&G2BI9:g !)푷{GR[G 2N6M=Fk-с<Rr0m;rθT8  *( w*G<zܼӣ ,RJo/|٣SyaRJ1/N<guq3Jw}׍Rqֻ(Xߵ֪IK9NY$ \YVݪ5SF׵5-!Ǫo[ou9 ,"Ww'G3~v^"?:[7u`mpM]mCX4Z*alXB(ߗ6IMۗo;~!0a+,d9 ^ʺnyJM,5A{'c  k{ByzQa8 cF76BY^@[t ?^LN0c:Bw^G0<}3%]-G1GET5.OjBN" E4-xq]U aP 1Ƅ !Q3QCNZydvRC]iB=9>!??J< , [\Ti=ób6+}t2 ;qg8Onrݴ;,fLw@|[;K$˵u98ʹF3|$І899]EYgyE ~_qW[t J mx 6nK<NS'ۦYڃ8wCH4CAx |Zt_7׷"4PyM;4E"HH׈B///]a ,RYUU]m7{+ux9u;t ` Sx ? рA/ViR)}/w('}Uze3SFB(:IpQ0zzxBX}7(óbZ{cttgF0 u$IV%&$`tv{rjB= !a3k-„1*D@r!Y$,2or* E uVK7:紒]ہG]m,:eno~%cH A1O ?/^|{WnO)߬FB03T:c:@0X{ &(-Ⱥ]y/?)d|k8"&1.FsQB@U쫶aXM܍xsWo?=tWGX7*zYD(CĸH! xe14l[w;ͫ[#V3 F;4ͪ~f@ :Pj2zFiF1M?2J(fRAadBBǂaƉ59G01jMA'QE $"l]HGp7VI5J0 CY;! 38H`42.0bn eY;Ge~1$ς<_~QeoM1LKc Hv0IO.p0Ygv/o_f_$.W0 X pyp>;YFIKɾިj7?~e NkGQ4Zd(A*-RZw][rJD۵;$E r0v9@e48YWJJic0 hkzQ0(ՌNi31F)9oqy04Mf'g󢐪O~rq9A rh8ƈՌB/q.K("G' wm;=¬7|X}0"ξx cw%ӏ#Wf}q*FV"0lCiU!\eY.&6ASF8fBBpvW:F92J4 aZvrɪnif{|k$ܕCR=SNsBpOSf&TmFu3f}uQ*ofn69H^]*V,>zn`18e䠵62d4=*r C.=qǻQJmwuE!I,㳳`]oJq׫t:I9FQ zEanO?^]1&4wPkJ8 g Ȣ"@xoGkJXE)}SlnmorcTX0ޘs8 (/;y||dxgôȒcc.`TFwkp\~===0l7mդq콋nk}sy1nzठ:2(xx-W5O>޳ v]}u_z~~ruZ`źxaXwar%v$gBb80O4zQθc]60 F9oqUvvzEhs d? )'?~z~E$eվ^n[a8ɬ mE1L)##/G8~jGY ʢ~0Z;=r#}@BB{`HѮA ?q0lVy" 1~"f#Ny`i:@z&8F @S98!selc`kD0}J @42!& - aqxBBFnm;9 ] 4'a Zc[5K9;x8^ob!&)xS`qv8Agn7B\4 @ɓI DV߾|=n{"W^8aJa,8m"a<~ \jXs}?Jڱ03"KKC"NO=rQ"(=lZi)!7{ HJ=zc"<cJð;ϨA"nI9UCMOWW5m zNuP$g;3yRrn]UV.AQI˻K5O~~ww'EQ\0]糩1fصtZU&#B8缳="X6z1n*q6aQai!a (:~G0u0Ā$ij&ipNkF0ň"vI-mfNώ(wmfcя;39Gu7tm'QJ)$l&A~]-mq\L$  $+@bwl~+]&^T?dqb6y<;bľK8 ۶]4a{凜Ji=eC0<#о6Ph^|4ϳ8:͋rQ'Of5Fr %j>ypM!etɊ R?S_zVQAȏf/nwfq àa `mof Ny ~P%b;K" bJUCb“4Q`(j|2;Y(y*h\Gck`ɃdyB:d˭Q.M4ai1{+oGGxOf'q8_}}ݔg='ś}˗E>9NŌ)WONN, Q.ˋo"eӃPFA!!c~ rQJrʝVx^z۲$Kl_wᑑAfeQJbS9#`DȬ̪l"o<_{֌u=<:fwefk91Er:;w۶Iӱ;FB@)I$D0'kPVx?NbFV ښ~g6BFU4着1׿i ~/_&Eaaawϟ|||TJMg;b!awZnPl>!8,}RH2EIHSHrƈ~DnBF[TM8&DXH%c Eι(mN'}sGCOq # "~wS;PץB휫jw}]>e3%E.ų'?}w̾O2Pu<1Z .Ic[䓉!0VZ8p-' D>YLkR;OrY~ĿxY*h$Z@9?6q9Xv]D-+]O04eU*ff17_ys}ؾ{wTŪ ӏ^<̵wp`ѷ>9[/?=?ݯ?{dӧϟ=@'܏Ŵ/ۮeyYNr} r ܚov֠xVՔ)S3"TJ'I1lz#P0hcP(4 e5/ω23=uuW9)SҘ'M!1&lG7!p[a ѵm`¤8$@,HpO>zxxRP)aNLa;R)3!H&̍9<_Ǯ 4Vu]W9%%q) ecN'S!U?﷛n0;;U7xjB)*l +YK$"eRRTN޷,e<ӳTnuscK-Sϼx^_fRXmsLA Q|_~9X0V (w(˲ZZӶC~[k]umnvno~(_|_<}3C_<1=6SE ׏Χ>BJkYQ {gsqw$:<*w! sY*PP#)Fb 2Y cwQ&d X j4(A}L D\H-l,&e-L5b:H!3b13 rN 03Bmps%Znj!N?E#+^kٳٴBղXJo1&QrCl6ǟT,/$f*M{8տ0w//ۯ}.8qR÷?~l&i&D?0r"!RQPpXTwq .&YSVRx]\w9b^|f\ z.\UCͦxרgcLՓI7î j}_~1zA3D#T\(+3 ,@mR+K1CGui)?h9GFdH T$%DC:#e2srg?0Jl_B$L]f*ep3G<<1ͤ? p`N-a1QQX?x"SbM&")@`Y´Vt߶M;PY-*hJ|LbV<{4R_4Jä,rmtb@fe1&8ܻ\hR*'P"(>@Xĉ- 47}{ ~ `\/^f0 (Ǝ2Ӫpn9[H3WU,i3ѹ wCFVus"'olD76tV|QUuWR?r~6b_;wee% cFQ1cTP6V 腱fr"Oafw}}V5ɾ~{g~ɢ1i~rQZE)?ibden,R"]fsFx~?Ǣf3z!}rs(͇O. oG,~|Kr9ª/?0F[i;;kL15)=W45EF Y]Lv~#Q6 K[̊Br-gRf3mr tƑAx>LA@)dF!DE68G@$KTs,b@)>dPBZ#u l=C0XRƘ0ɬqLCO(>zٻHy4ӜR!dS`B1g=>v1Uj\ic(=*NR1~C_ ΡRŤ] pfA=@UI"H)!'Q2 RZean~tF< Umli43=׿-Ϟ^UUlp'Ujaw(ˏۮ=1ˋZk)bCo~W(jZȔ yU13%OL l؍]JaLQMSʇ~lnJ.|8h"@JդTq@%oƪҠ _{U]O1GbU$dfb+Z=<ϮtnߎH"4%X-eUc?vGS)DYuW3͡dƏfӏwly_f=w ]"d|:5;H KիkхB iåEÐP7œE%jRbwws|}Z^/f_/V|a@̈́\7rzZB#sL(@F xXP&P i|ې9BYUXz IDATcL&m¢ .nŲ|/ $OUαCs.0}}:[U! w7O/!bq˟]]Zfw&KO+=P(RBٵ[. DF eqaD((!!Vǜ2@aT)䜢@B5%,YIvx"dI`VҢ4߹U w~4aCꢮkeL7{ BY4q@PH1,|:_!sw8]C]fby5Uݶ@QuŐR)MbV3Jr }L1`$F[6LlNǞ ! )=:rXbJRZjSd3E8rvV(EiF!6fCwCC/PׯlBP2r^cLC"eL4( l>(;N.*RP bS'u=}7earu5ڣ.Q`B<”R2]#g%H?yTZ8s@KR `k,gʙrȐBΦ"64 gn >VWRK}y~r"c`Md@>\8[UInί{ze#{9$Η.lf6)}!e`ξ+&)є!I3!GSq49QRJ? b;Js,%bEeJ!8c ]3VFM,~*TŴ(RRZ%Bʋ3S& `Dw8(deއ aLqt솿v+̰1ff >D.ϭ(w1geJ6v6;@y5GO|֏7ik/֕~8nwPd@)v?vc]ZFPԥ(!ĮƮEaB9P#])z>fA@S%q+*bZ!hBH^,2UzJ'8D7o޿x qPhP|uvq{8T~#NWWOvCp8͞H!?&x6cBdaB Kϟ.^ TWSSWR ~8b⢞VERhJn 'ѻ߾ĜkΖzoY@Sȥi) Y)(frvZ6c,;Nw솣R*U]-gf!NӦjX PҒ( Uh%r4ZVBhm)nTI!~×ꝏֶ.*v@hRh90J [m̴q" @hʼnHD@"``H⤭%Q0 , B=DL_͝i=Uf^+HCBFMU2y6Hx>ϔOTzZ]lL&) (YȲ+!&ϧL,=7l]b(c?f5]Z]nL99 6@C` [) NNO'c]X-퍒*XD;w8:^-R>|Q@t#rnL)`ZB#w}׎.fӁ/z~׾'g>uY912FHϛsJ}vv?޴B'a;bVg*΍=ZL]?r.2!%TD)R JPc!2c1 $ #8OIiRv1 Fy6z}$1>Q{u) g ~q 볕*kb.0DeQדy g˘ݱ}dB3k||F03))l臃w^6ĴnO.cJ?8Ss3*1D(@ Ĝr@A ?Xw!^ Y\U16 npN`L IDdz6mfJtC!z-Ebh-a͆*_g]&?.4nG\J%xKTC^ ZM) 7I,xn/zص,%dм=<.kﶣ8 P R!N캮(q-נ囮sa`sNRv-Rt^&& d"'Ӊ 1d$P530BiaQUiu#j{B"><<3ͦ2՗޼yj^'wHq cB8(-1-ȔC\LkW_~yCH2ebbB1!$ϐSfHN&r^ɟ|Z~?tBQ:|w[!Ey|FWV___ݠQ[0RsD4ɚq5RfmLn{t7X^(%1R=E`iUv;`^]\uc߷~;n@U0RF_Jzĕ>SJ0JZcT8rZ)%BL(VV1|g[M &[.LW_=>hp3Ms aZ3aTtwb:M~0VCn>{qݏ;(2>ry~Յ:x ;AZieA Dd0&OJ xzXhHFH \eftFtVT@e5qDYn]ܻQ3ҺzN9My} EUO)B_fkR]4yt/uq%QG+-(kTOϯCo=a>>[^,yS_QSNFY(V|zppyq1 !iun9=vBEBDxPK5Rle{s4 %ܨIUXe]z <d>N' aup2 s3դ&m5_ZjԅeuUM,Փӿz%/u\9BH, *FL&C_3l/̄D 3` _`"TiE+()Ǡ;,ˉ),'MMnmш}UK !#3$1t00`&)1p}ۍ|J  S(nAi-FU]_4J⤱9sLgg)|TB<=|:]]\cws{ssʹOkk )es,TJ01S&D9'7 z: D熱 v~v?c 8Xk8Vڌ.6k4!d$hk1%¨cߪui:tGPl> L1Mlu:B(8чRI"(RS)4U])窰!w)}˲6 @ԇ8-ׁ (P#pT*לOJVx~qH>g8\|Rnz/ u>xz؏!g5x\aep!%bb`1I]nCQ~<5 z∀ J̌ ?@IA28dS:&ZE.mQ~OR CN+a s]\ރTU*JX|ZCS=k%٤v.C<, @q0 ׻]yG#DZZ=eWw1X9W(#@34H!tscη1o*]j=5g]6VhH9*2B230X)(Y)]hCyO,01EiVRbfnCG9h5I$`Y>čs @$gRsQ ;(! s'9v{PJq#F̤RdT,~2ȷfZMk)ʍH%\DXR0z  !LR9L&RVRbJ#Q$ w1X PcJXXe| Adg c~T;@P@Jm?}rۇ)|2VB>đ1 %0Z P>9_}G_7O1WoUB%9ĘcD@v!dNRr)@! !Bf"ƲA \ 0Ƥ攵L$q1ReiEarݦuWϮvM ( KcU7nL"Nh#"$t_Y+ !7-&@O'\D22(lEf EELŤR'udj<A49 8`R0"K,s.,.N.bO޶_~**F2'Ra&@ $@lNXO( 3 fXfLɆ\Սǖ!0"04 6b1e*fBv~Hɧ {~@$2ʈZKM>x@!Y(d$! `&&A0' !@;us]N]]m{۵$ Ϋf3`J 8x EYiehz1OVHmHE=S#2G%0/LYR8`JaLQg2Vw7w))jϦc7]??ΥJf|4eq}cH^竕}DbJ)m@1GJJJ+MuιT s C|LմȔ{bB C?!=t1xtsļ\?9+(!{ן |>5ɤiH}?9;r&fNsi蝒J}Ɛxh*5FhRZSl_ Ϣ)%I*=.":03E mq`XD BLOtlN8؉P-_Ip<cpp9i Ut 1&F O{Xb gӜ\_ިZaF4Ѓ~.Hf `tOWW5ulm$uoHv "(SWTo}>C'WU7jAVr$O"A8)fU"'D٬njEeĤ"Pݤpwd" zUŊ/QaY7!.މ 1LUo(fl1nJ %V Rm94*VMX}S߅ErMj4t' x<DBF:4oё !zquYJAEÇwS7|in"As~G*Y[Ƨ)Yr3GZZy"I:rAe%fzRՎ'6"m4F%QJX1K \Sp6q!!t8B 0S qu\\}<vUUOZ&-" d MX$IU4#sٲf09VS V!MЊ~Rnfj?cEOPE:-㱗: 㲪\#U1r}Dq.,Wͦ/|4X ]T҇ۇnjۦP*ƺi*iaE^/_|+gRNc?eb^5 >|,E>ݒj6T*agCyqRW-br:Rt݃yxm6ӷ), ՟|٬ۡ>>jY/\6prUEDTDyf㨢uhf:x'v],֏C>jp:T*)ǡ$`"9?,YnUۋ}DzA2 dPaAT`=P)rȉqݧXëgE[Y;NYrP% seÐVb7d]wE3tyٌ+nۦ?i@j5ŶLm G\ 4MbS*%P3E(O F0)5ҜA v[[~(FL6 f罨BX/l6-O߽})`:T/7fpw=|O,&y#,ղ],5K"r;%7%yG=0ΣodONqvLRyfhn?|]_|?9 Zdz&.p#*0 T}23H~h^^\-c<%OdH@29p ԠS!Xyݬ:|8rNأ u\?S247coJ, eUpksSIbQzQLD XX 8b߽~\89BsZlbEs( ƖLs z}qQ>}5qޖ)̬(d ֛C:YY_\oMhRw?.:.6ۼ_SSİMKd4L)ڔ2%,7u])XC ç7'>˗x|<cuu)R̴F(HJ)VU ]$]@)p:S׋ESjLL=uyas`\xZ>կ44»pS53K)%g5HrYӔqwĻz8??*zr]o?tHDc@9uJ>uGդ`vU]dedy 33⇥SN+yM!:ཕ)?pPKvIhs,JEmtVJU[6c߽ZU۪r ݤczRM% `vE~SC7w y /IMj`y $Ӕv!tyJD DjU<@5;|*;su1˪ޮ֗«zv9}I3qsonYU_~iI'Çt8]<7 ;;昺'0|R񰯈kH˛+Ս˥S1UV\^,W˕'RRuC`daʓqJ~^5庌j񁼫4L˶qNa40o͛lZg>< 'v)#DjO׫Ã_iHL.!]//؁ژSvc?h1(:Vq9|:\/:@@Uet94!r1gϞM)-Uլaw:^o w<[^^󰟺Ε]kEܣc0A2=9taF࿹Yz2z\^l;~cpi̦ff00y3}9BƑ 1^?}ss]IJQ<8U1B ֍ӧ`߱ ! s4"$QLSɢ KC6V d'|)}י0ر*<P! 5I2WX6ĹgvYTm˕6ԏS*I莧cׯ?9$USn?~W7o׿!?yq^k&/]lC^U]d2 =N#~z0T3(v~RjΥ|c$K& e~/_-֔}J勛"Z7pϪq<|7/۶}wcO1c?>)rЧ_7{W;e0Np8ԜK.`Show7U)9)@ċeY IȔBQ1©?\T Et)EZ3gQQ+S1fB>|1Mic&ޔg}>!\n~N N7.!Ckl5/2Y(j2WUH&Bi31g4W/xxC_]/˿? @ kj^qDLRq5L8<\&l_Ə{Tʂ3˪= |?>oC*-vꟷU}7_[FؙNL%{`Uƒsz_ _BǓCgj&f@7`M~ v88蝚S*wT&% 쬔lScwPb 1a7c!;s3Ç)5]-բ]#N㸽^ˊ=!1PşiS߼w{yFAL s%Sԋ j` *6N}bmeZ }Z>yY/F)1ݎvQvSZbVs g Cٮ }m6?_o.ۺbj1+@i?xz+Ug!Mn^E SRUNc?i5cX?m''=IyjsNןZ4!FfS.hЫ@H4&3Cr .TjiE9N:-9Wy_74N`[1l~O2tLӘ* c)ޛ(2xeFD :¬LYeTJ(d$8@48k9=Q% >I2($I*TП..=9U<^TЕ_o7YafQ0כ/2mMCI;1{~g~"McoL5EQa7>HʗMEW/~xc)eHYC ^S)j\:d+U/fDD9t s.0-Enw%i03 9>TJH1%V2DK4Co꜇*B4oT #8U! 3IyꪭcҗVj&秜 (Yr. "W9:vSaTw}/cUTU0 hj:kXB#GNhU50Ώ<쎚D8%)V" ORl " ]NIʘ1FE6Mɧ)I6Qa0A{pXX.v3vEmI'7˵SєRev y ŠHUp}("YSwL@tl,b&\pjG4Ly*9S2Ui0x`:,p<oS`,Cx}qbv9M'/|~ncL%; c. %'y޾rbI 2{O"Zʗ~'S}6`oXĪy Oz"ׯ7kU}Ir? 85rZכ墍VCh˶n+JDĻiJr:|ŗD]>)k]tB :J"~̄@gѮ5"b}]i>fkiR^xV6j18'UT2U=]/a߶v4cK8zh Ī.VH1<[P/Ԑ$Tcc1ԏyVSuyK1LTm? CN0(>E)E(LC h xTK_8YձJijW EgIP!L bg~~?$:tnCfb*#@e6p+MUV!aiUEPSmꐻvR:{ƜWǏi-|k2K``Qv*]T~y !82aUZr+&ZT $5c&bR'?{a`#%r9*z]RE 9Q)Y>JdͥwaI1J."ybhNDTJd eC㼱[]Vic:a2^Jڶ+-ő\l:͘"$7WUK9Oԍ} o~= Ww{ػusƅoհO2|@~)'̭:i?=-vR2má;%bЧ9j?y]}MSǺnrBrN9Vf&""))4Rj\,El4MDiιLSa梚L s*S#js7~m8oO.d$-jF͢%ʴ6u;SNXb1NE=LJj>ZUN"Sߏ!{8as|LӢi1F+M*TOjf1GI(0ꏜ98 5X =?\':'̌@T@ N >xBt+ iWxdxFbCv~]WNmz7ct,OIY_m Çiw޹*9U}ڵ0@,:3f>8"g*ً^?t˪̘He@tv~}p<*rN>P~wPC㧟}Nw{#.j1iۜqH2J1c6"/0}hTP;"Opfc'^<؏8X6֫q$b)^4x-5 PT^?]/mv 9a(jLsiH.9F3V7xlZ~ I&zY!q$YD'YB31{@MM4&A8nCTHEڶU"2S&6C*BLDU9!ٹsӐlē}1;5U3&`~[D6~OLyj 4xY=9M:%""SLKsrysQBZ_ YsX 쉙2{US,Fj&IDfsk$=W,eaL({(LXfDQ\)0LTT=gA|^D@23@ٔ@'cS93;nVS`SuS/B FLD#3+"Odc;%&U35rNUh֊:,uQJ>+Xb"*RΈٱ ޻컥)݈Jv@|Îh ,UԢȪY'WQ˦OKxf[Ob3^J cgDf3%gv?p{B.⼯} IJ s'bȹ:p#̎e6~ק9tn1IJq1  ޱwDD 35)i̢c771O޿cO=kɭ}?r|!`b&6S^D9954ك̀ƇNIL0w.e~նˋz{Eϓgt^1O8ӓ)''B*@N931{U鼏iF3H~ ̀0YڪDS΁HsUׁ(z?M)T5u]UF *˅rN DL\M!x0LӉ9b68glKQ+ُ eD O;#:G\"_ss RO f&01R4o+okٚ}9ڵnDb,Hd`a#+Kp$B!! ~@ Hd%REQuQ8s{5?.<v9$*թk7 DsfZwigFFDFI@9`pFQExwI &f&Jw4$YgDl9+cMH(Q$jdhyܺ3#"!#Q n쿔e^0sY7 wn6OMyݶny"F6g:A,"[p& 퓅s &r'dzx{ Cel"+j+IDՁEU|^qBLm2Envt04:5"Z{6!e $ֽ͈]y),1[{v} y#CDG \vT)xHA.6dpz#pwx*斉ȚWr uz{9OSkixd{t<h]4Mク5u]'_0Vxͺ]F= aaʇ$8 'K8qe0S\:˟qV)+e1u7$ʌR' `m"ȠJ e̚eZLd6ۗ~c>w{6@VM 2NDy24/w@7Ƿu=/ywNdLP礈a2DN[Hjp#<8WDp0=s&dg08B"7nn։Ot0pXn=3s]7o^'NjCQVzkfRN7ձxĀ3ScnRjEf^. f(W+, HYjs#=8DPmGXErbonlG}UL#qSIŶޘgeUE0rV1W}悆j-YFJӢO"u[0 D2.7#kW88; QR-"e2kJ daD~7ܽo&d"677 ƞRE&<ܝ( NvdDfjj"sk4oBѽb Bf!45f([b4^%y&[ֻm)/N `-`{^v:>Š[%I .0{'!L{mZ~la DOO?{'"|[vg2\ ftu])`mjzS9.۹ܝYt40eRa榒lʑ´!uu[U8 AdDbĘ4=@[myY'"anFԾNj;X_ș%8L>b#~Xyn{; ]1MʕMH^%^N# ̸DUWt3].Y'œm LI9U1-HX|fpvg-#RQn75DE*g֛6}mY2鎡N"Oz}>wsrI "NdBX 4(4TAs5'LDBњ[[kUhx31iSqw>o1C A83"f f2&,ɛ6yp%t g*]^/^̜N5rEVH¬"t9ʼY{otzHv0f͹ݺ<)<)}l~cUB36  ,„a;lTx}ҺaQI'"rw&UeNU2RA77S2|>oۚ޻WˣІU{I&I M"VK֋MejZb#\peywdʼn 9?865%"2;=bG ](V5 ՍR0jx؋>[S޶ D b &dFrҁI^D"ާ.Ln_~ L*ʜBBAB kMfQډ(#=u+=CӛMDX}TV{3L UtNQ9,K̨vx"ec8PF­{R"rܚ;sU`6E B)s֌#JξaL Ӽm$dr$.70аLF,S~)> ^TDzuU˶_!4O_栱,)9ܘ?',SI蟽x@L2o뺮[AE4#pO>9^TNk 1PXEr)6Wum{g!2M ;ߏ_>A?qeRZH" yn1^ ΗW%\ yig˝ꐙB~%"\[u_`Q䀴ſ׵.g HĈ,btغݻ{EA5\U"ܼvUxdl}$,šxލCD 8/NDY<""s}fbdIC#Qw]<qG`F%4 ՙQ_ 1]Ҫ~90CkB}C&7EFw8c/Ϯ@BDž~tu$[5gdSB%YT O;zT@ 6j D*\Me;%1Khݛk*\}9;S%W>cTX<0!NJ w3,~_a IDAT[o o´S=z5X4=ެmrY;q}W  '̙=/Y0^ I<wݚPkv̾o >l v;Eq{j{w\2=޷ąHN{bb9NνTCPFhPAZAGTcrp}^q|cK;zǧofb|Dk5\`O]jW`&\cM@_Q(#}ruc|$ϋA+ٽeḒIlQͯ/5@W 0#rX_ 2[#IImXd hg:?mEG2("sL"ʌTQw?ǠyN}=#oڇx-ҷ~kVG%Uww;7[߶%@EplC?(ھx5{l6|9b<ynmZjwaIע7ieP<_}T4!4sVh@IyyD?t:<9?`VT!u`Z"1H="}qvp|۫-}A[[^ym{|4W/_RCH6 _s=ֈúv=n8MD;ѳXF$" mQ 17&,XXzjeg{'n٪+'s#tכB\Y.&HqV=)"^eʤ%mDD$.wѫS>ۇ^{ ?Rh';7u3 hò[<qza0(vIYW#X>ŷ=]h M. 7oN$l*R  `3Q5` L- at{\^i0tM-*OIui4Z&?se:42̭ qmtvX|"bSzE nK)O"3?-kM }Z׋Q5RHeV4<*@@)I%^K!3x>?֦ϟgzшA e,p~)UB;Z4J @i҆ܐ߻}>OJZ4b[PYJ<:!"p{za!Iz D#Eۺ֪N(5<-5a /-myiؿN>!A`ګv"ڟ`9i)jOPC}=C5n奄8` 7≋S>14a=1>VCI3SXJ}jĦ9JPwG`r5%y~[xo܍$DyjKkKSe"{jvlȗ@Hd.&Z7nݍ0L~Ѻ5!LufNO |Tvut5icLNeZt{vsͪ|直 6V$pfH׈.4ܖMu;)"p^ʹHH"VZȌ|{D1U@퉸1Ș- \jPU 0$MT!V\{5K@w3t'bN0wcT2ȐFͲXՉLT=mx >'W2)SݥZؾ̭d٠ҘmH"/JXxnm:P:cYkW=k(I>Z`J̧v?䄭$R{#csjP0K$ Y~ǟ[^bMŽk0(HLOlvhbq_݁$qI"_=AkFkʪn4LDIV' ,"7τ^|9|~x85##Z|!(`T唾x#_4@Ya6Qi[&!ݦ4y!airw^OϟOkt@PydbV}sdbUomfq:upxq퍈Kk{pHmQ6`fMeR=*>XLLjF8~MdnEE{wjUhp.BI ')a4s'h(ud!?c@(CcԤ]Ԛ>c&wOyje ꉃ 'UDFң17w:";z~{94@V CTߘ14YTY7b & $܊{M}^5Q,R#sHZ-­)Ex uՏ v'-l"P5/6TRˆνʲ=Wqw_NCU/^cffHb$ 1!j#U05%2r,#z@BXiS2aRi2p +}=xO6#rlHsWxt]T2i&iEE 9+E6&D@Ď?oo^bw̭ry}3Tyٶ EDE!B&NIm(ev3=bt>FLd $24M%M yYX?LfzUM=o&m;mbTh}իIy]׾mBHX[;hkR,ċBh(D ,yٳc&EY"|Z{PdPV޻{RrPbE*2O=}|AdȐ|S!9$ HYkx%jVИ yP w-OLF4E͑@F?^LT4-dfYU2=C*$D(;M[8e̪9 mm_xgYpBYg A)DD҈N3CTUq(wZ"3 UL!pHtv8pL9.rC[ "oL<U`S2$xC.G~Y %tc<]mWdý"J% FtV!A涅dRJX"%>#IeRt!&|Z sD DQ7W,/؋k\ޓ}r 3%} HDpap[&U" oML'ne49S0D,ݪŭ"M0$awG ɱr'e  x"fV۶ZdD'ddнW gU>kf@c{Fh ܈b'd 2C_Nm3ȕ*S z(Lf=܉t_q8AnoúE"=v̻6Ke{&5%,*ZL<[_|CɧE"94M֓7w_Ä2,!sz X͘@m!Uj[z(ͯע禞nSkrw@Ĭ#ZZu4!s&ESX'I8"-iLOm?ʇ'K< mjq (:ÓAַ3ք &q/%!PUh!9%.d;b ZU[D^NN#)ȱ Iiv"w>֢ Mo)-#ՐJHk8'RT4Cx1-rD(5snykJϴI⹯ֻR`o*Dޅui0FlqšH7'f"S1"?Y ħyyWk0Y (Zi@kkFf X?rY+#Bi჌[M;Dq9$P PX@+n}̷B pU,^mk ;١B󼜽 rZ&cֻG|tp6뢭ȴ뺭fݺmn^mjZkE#63RF sЦf˲4mQm뺞ponCaۈ) 6c^I (h=Ǹy{"݌De9ny~i-SS !D,I &rS6M.@٤X yd= 4՚aMJC }m%eS{uգw[TF˜T%Qf{_NN攑EFfj4gb||h #<3BE^HqߖRMA{QwQZ.ez(N~7[AS](I!0QWTV{TIΓ6aa&6M"LPfi4-ҭ3kf Q&GHVL"5&O ^5X~Y e"RE"|:,Mʇr8,zݎNk+.Jj_0 <oS0*nǟOv!_XD2MmF,I{I`Umk}h*EFxQFŽlDzg}t&aCfoo7ɢWqϔo?VCc?`/4ݝEd 9=Sf /733QU,tt:mۖ'U+N&6PDL$"M{˝fD"E&fF%tBz bݼ996f"IhK} #J%4ۺ|:ߟ??NQJ%, K,|2<̢Saae|ȾpX̬oۤxUb VyXUSS "2xiy`@4CD JӀi(#"ܴxF%" wdOk?o}ܯʯO|ׯ |i5?] 9_'?7G򅣿wߚ~_Z`x`P|W&qFl vyDDe{"ͺW,}Wd4{vZңELXxD.^,֑ADeyxI/^0YU2[R,T#FVYQ{"j$si}g‹at>UyxMzoFD!2mfIÞR=-1ЀGX!R=o2L0E-ԽHa\1˕ :ovZymO6i, }W>Qߞ= Er1ԮZlڄ;J^܋_ b%k`޼Ħ_?~4:DEgzd7mik1S[yȤO==ۺjĬ;V+' p2q#` cHrlwj/JT%2=igkMDٻOMk̞2͓ΓRBD>fnvV3fJ*+֞XOٽPҳ":$n&v,LDZSx*.P1#E&޶NE")V 㧠}"!KH~#r!5:3 ٻ;;,a.b!yأ? 1S/]9x!`} ݑ@L=K#Dq:oFBi6TmjݖINP& %٩.5M23 G@fK7^G*4)`ZِMm$rw՗/7<{fޯ]7 N$Jԙ!xDhDѨ1R4-2"E!Gd =BI){O}jѝ=azESI;*i;lQbHC)K: 'KqԘKM¼[ߟV2^oXƬq[;LKg7Lp\wg*QnbnǏ^Զu;jXt[ @#P[ӧ4#( IBqཆNVώԦev?GnrJ(L ?6#x1mT5 W/ekgEP ??kܟr~ fބ榳fHŀQFD旺=0&'g_RKU ņ'eHgʂ6j]Zʚ8ІLj%<@/+t" f/=/h@غQL[87&p7kB*J:5;/rFzu+뉸"uh4ik^Iw Ud"UHg#Ϛ$U>|h7\lDD41/62wd>vBtԂ: IDATB*aHJZfQؑ;MP蓄}$!Z:ܦIKmM ؜mfNDj1 qNk{,P%c"a$zՄA\jn9ݿw9x$pkEJ Re91Q7=SJ o<[F,fZOYQ[hd KJ7B:̣ ""s32VkC!,FNFOg/Eĉk3fe ,sT ii޺a3e*{ԨBz;.fS师LLΰ4ni 8Dw}|V un{5DNћ^,48Y:Kj2~_9崴~0m{S%!⎠OFLAL6@CE,@'.u!e vXNTy}޽kRեa2jP0!VD IMI>TRǙZOIRv]]j` Zn9L`1S%H,I%~2H-#$8ѝp4Xo5]'6+#MжzJksg$Qn]cp' W9DD'%*vrVoeRs 0)vwnNDDu䜴k 3s^Z>6ŪeQk 0sJ6S)7C]s/"&ۜc GL(0u!F @Oj^%qiwaw+y".5r8HN}$P>ⓖR400IЀTXrS`wtxLWR=g"d@J*&DL)`G3n>Kf3MWWW/zڵ,pt baoǸV#\&X$D.,1s5|JsRrY2Sڲ,5ʢ:"!j>eÀRESܭ~\Sf9 q٥W9[IcbB꜓,ͮN% 2Tk)1CI9 )K޵u5 m63qou]awo#8)ݻ'%3r"=hYrP &dd@U$Z% n!\klkĉ;Q4)JLxּ{\*d" 0!~у 3G41StѸx (6h4Pv.c~M׋DpGo^zmXF}!`df-05CI ZcIhn<.PZ13T5!UT8`]-ΥH8Dj6#+ 8L 3'L4s%fg \ '6<祅LH϶n|p޲r7.{ --wۨԘWi' n2MUaS)n4tUEj_xh ($> %ːq"b!M[WdII 3kL@1YYu'Ij&L,.aښjww񰴺t,Xb0'b^{Qq z]{!YܝE 3Z9ᘄ耚̚8į^30MvʡD14}}~{1$@c̺w4di $[n)['&pw'bޏK}7q#mg 919Z!ݦx@~}KpxH^7-Ob<]%\L^k"p~[@VDID-wQL,6!zCrm}~g#aQ`.Կ!+,t" HRJδݻ[34U5b);R9yrڝw.ћ6)1h֔l޴ZٖY ILwS]v{RV }|`'Bbr? |wcυHoZ۲4ÌYܽPرq~> dy@OLVBq"]^%fz_Nmu uxMlRdDn=@CԎ݁Vk7bª-r\7w !P_E0m0^k7p-DEmS )`r?;ߺc<9'gj NHCj "Lܻ<;ߞqoZuPUKth݂Eq10m&c9,<\Zo''j"ֺ6oJbV7-Ir@0//.ݽv8$0s'߷DNƜ͆L4\{bE`cX ]; mQ++?>xow~,stltѦz?SG$!ngdΒIMsJ|<.KmPG> 1L;2 }ތw=z ~)jȧN1CbpxvSm}問#~v?6oΎa.%IJ"ESv7m9LS()=]U3PJ1t]L.sl$fh0ǽx܏/ԧx5uN,Ltllϓ[G7()!`_kX\TDrD``YFkEcȺL""8>tF,eӏ|Y}=;.X-S»çOpDXJT=`P(VNp}}kybZĵ8pk݉H7% nY=#,% աI&bjhJ?myϣo|]qJVr~t;nDJJ'6Y18̣3޴\$݃Wa̲:5 7zq-efPئq; ڛЊy۵~8 Zk{߽>o|eKUE,.vL+:/TUo̅8!kl a//K)p<\{p駟}YFdg&u魚"#ַh}Bk x}2Ժypq]%km%8 4\FOb ZUtdkD@bIКUnB9%am1wa&Rkm ew n|Gk?/:Gэɂm0b]@;%<3ĴSvZyJ2.SNi9k֚z]jқN䒘k7VL|5%9.)ZW̓T͜IZ,rN涙gU0sk̀ 3௒/F|>Mg_b 08]v*tqRΫll~R5 O̓Pu;,)\?O9Ar~);wD@ma˚E63jӵ85]NO|P]NNDK[“= ;w [}\%IN8@Z)iK.mƻ>p,F̜8 E wI``YRNS=?Uo~ɶ堪gFT%)sڴ%s?,y>,K7gެ7^y~zt]Çc׺<'0#jD1McQ m0NfB}FɈ ۼrPu1_bJ,DTR:DG|])Ww TYΙvX,&Uю!"hfހ(k )Q4RʶJ r#j[D,`sj ɇ.Hn{!_ݶhӁPR:|kHԩv };{rz[Zm9)i]"R?lf痗)At=K9zy]$)vs9m$m%4dVXpݱp'? nfja@$%@8ГAh#NZN)lP}m`߽>DBlmgDUXnβHRC͛ei2~ES_ð+hB;RJURr.i w-Z{m"ZFB<-cE/{ Aoڦig2TJ63kNvGksWuY5ZKk9v3GW<7nlKojH"8Egk/|ZOK hF q-ef% 1rSai& z.`U|Lz{toXy8E &DhM|X_ge]3 .]B=ESjY_ >}sQ9Eu= .i|9J҈W/?? EҰ+1 &8N {KI9ڛvla0Q0tt7}3Gau`(j9sLy~5k*k.'M0f10fvw^o{?.O˿[>wxK ?E|lLڭvq9<-Ҫ?wطnO<~}ss~v>GlĻλm߿V]Nr"#D[כwG @ ԊN8+" x5DJb@ +Z_9*@Mj wv4vZ\,B&2]#@nnun4! KӁ[g;uVpgA?_]}Ww~|ٟOy9^'y3s)Sg۳.fs+IHZ7Tmۧ&͘<scD?wV$ww9o6Ft?.fn~b< l>IB/$Q IDATci]HЦ,rVc+-a,4#"-9%QGUG?~^q+D{yxOSW#{p<`s˲y;ޔ$MѻZaKȒڲAR"noJuvߛ 6-ܭ)b;]nϚ~W}]ZȎU ndg3Mh--2YH݃));⸾`֎DC[.Ag; >M@XHC$ؘvrp;;//Mpg~2h֌~̃otޜhX̺2Kk4A̭ T7eY]rqIͩ\ss3_jM9MeUK zwj, ;TuA'/={[ iAoh PD6 5?]'vP@T)./b87E+Rm F//R1PwxNyXENٟ߈ _?ȢddT%&IלReq&hښ(vB폌 bx(b}C;>h_2~C>|!ԏ?zwsr0x-Q;:_wЊs؄:v֯xUf ֟~wz!f>0:C cmOQxr/tVe!,6}/_Jao?}s ]{~E_2{ޚH nJ쵶yXrkl[[m\=sXv z}M{,*?,j~R9@4 ő۹LB }4VyVBUYmXĈvxZ߰B\pxsɉwO9齷Vu<ɇ.x#w6JDàN-}ュ0K/@c}NwY_k}^ g0E/ۏ{//}>󿾼5jRË/Ժ{k"DfZ&qF䇥;4ا) X81=Tv#E#ҿۢO- YI]ICyo\уñ{m9&?7ocn{6 d*jyνU5t6I|///fܞahlM⮽߉>8Q7?>U gCK,,DS[Si rpkZ3{fvX 9_WvR3faٔ\oZy3TyvxpOܺ6&eъ(_wk{~1e5vcT-<~1mn[KqY,4,d%E*oww7lݼi7wbtkZ~ގͭ)%IbQ& m|JrnϷq$J;Ae7I2SOȻߟ,5߿pws5TK89+-5d=<`nf1"6P%7 J&F^$I' lHfL) :%Mi1nYhIZrv\J!N9qf,".M6u/殝çI@;$X3iJ)%|<G/8%3G1!D>h!ϗ*)eͧ~k|uܰ.lB0$`}3@fRNf ̽՞Koϥ$+P/UDX°zswǃ.55=1tHdimQu<2 f ņa՛ZjL̅33GV"4k{CЮ~=h[~~wГ7X-n~wC\?%ɔRbI$f DpYt5I bc[7 Q؟l3>8 NIZ{X tjI4A_~/\ﮧ3}'IK4efdfA3}ȝos (Kw*':M'Nb-vx,MT͌)̞[Hxཫxc_?aO, Olyȹ0[)8lQUMg|h]pG̊u? 7bin̸nY<=7~C,E&N 0]ZVUZL]k?vXRaj>V#QW;D%Aaa OTǝw˃D?+bJJ)//;kTݽor13s$Mr Ir|)\{MbyC}n7ow-󷾹R {geLB[:&͚v[Qk "Z맹cTi81[]ǒꦷ?xM7|ID)ЫJڔr~yqv_a+Qk Jl7@-DBx'$auo; >nw և mi,O=N$Fm_Y3v8tgÏ#dnדzgbF1ZtGXr1A Z)LM 7)f ;`ۂd.ݜ) #n:LL=;K!fs z sH4TXۊ5x+/&48H70g$J"˲D?$ >0^B V&"Bk&XV}15 ;X|4ڭ}fՉQ+:=3'$]aVƒ nN,bj*"nAD9pwb3甘< k>%? '_ ư 9*_+#=ܣ47"&xH %y*f{7,rɁ'zZ)9E̪&|\j\W> {=M_ʿg eă>zd&z ߍDSP?}9I@Hc22MuLfXBD@wg/oS"FEBp~oٖ㥤\Z>s}ꈹ}xns( (%ZiaA^:0/p*v笅~1=~]k?veY?ksΉs"22"+ǺTAab Z\h~Eė7>-ҍ>C#/%6v7E2̬^k9aωȬ{p8֞{9?bڮ@\8]O2<#TKly{x@O_l49$lCc1sia&7ѱ0 2i/U)MT-bg_)'3K?L~@ChR&Q WƐKQ#UhDSP"A=쇾 $f HO!Uyf7W]p#vn0D޾ x&0Ml3/ ']I䆤 0E _m@JᏩB>afMìB$vX'ŪDӉ)ua`#*HMFYW5OD63!UPDULUDkQ)68L`]DD[2[vǪfF[-s.u46wVU T3;$5LrӏjU rqNm'»3:ԑ9F|ws2t85Km=hH)"RyǪm X1a*R&}=ZVGD"L=5ol\䮾o]>ṧp;Cm[ED@PTxLirsoB&2Ylalk#K j3H.ÐĠm2bAb7 ~6]!ha~Ӈr)mH Ɏf8GĨj94`0@ڤRɆ8k>g)9zjЏx9~M;f  `(*$[v +&6mI45-Ȼ@L5혀ߴޓyO{!AmPkh7 BeB<-R%T++a1x&,Ø-D5xEP4 c9|.3`e7sabRͼÛW4d۶n-e3TN;_ƊDG]=PY b6q]N~A-r60(!ڶUٶn߀Ec)YwzqY<jف'rrDN `0b,4L, &19FL{WhRj?un;|8Qbe2QĶ,߼JT3͚@*ه=T#t\1L<@Į)jjHi(͖wFTT-) "r>`T&[Ooـ^zR1@bDFߒNQ W ]N'A>3_V#lC XT=蚦av9J9ÐEjV0Gx`9ƒyVT@C0ͭ,vW^5U6c;DC;bukެ,Gk$ Ri O>f\w`Sx7D7jk;IʓQ+-^DV~SR┖ETٔ6,0RJQSf~,"BlB J*ŕIɺJwsú8>BWoo޾%jWC%jS>NLPd0V/կk#$f"EJ|.J DV jĩEU,[SQip S==yIxŝ|эgvrۅznϼjwXoWw{n[>9{9Rؑʽ6&&"tm+^c,)09)9X6%xWrJCY;ºP6}&1y_r9u]35>*H8T1cBYC/S@3jC38W):Ϭ={Aի* ajRPQsvwrz&ATjZZ&/ʜA"@e6]en1 R}?2TV)E5wmڄ੆dٗb^ jv"^!~&*H1MʪfjB5[.$LFK\3ˆwDԼ51zGTbV:`UP ii@kvt۔Hm6M,HȔN$f? r^ѻH%"\0чjb:9܆h[)B]5B[njj;d:2UrG{NRik;m,hD4SqPJP!B4mlM̀[_k acICAsyߏCE@bvALD+Er`0#VV"vDyL9UZ1]s8İ9iD߫<۞bەc@;"w39=bpUU!ƦRvѶ1Rn ZWb*6j`E.u\^i}=R@9ȡOjUFyO+k8 l}q1ŮeuDttxH9o C߯발¬[7Ǿo Xupm\ʓ3$7ڙpK&e[BLp *, 9Wc};v!2;0,sN4 cfeז\49Ib%Y✋Ȍb"̘JV5 UDL8`1w ^~wi(]\cC8{( Mh!rRD㐔 X b]g}nfal{=:/7lPWPdL {24-9!UG$&%J} +V <vp;HKWۘDz0&fC.l"wiP2T8Dݐw߻%||i!$Tfɨy,2Ŷ bZl/6kpDgLJ{8?e}IP].(\Jmˠ~@"vAdRRlӊZY=9Img0cG(KR !XYƙ )7Fx>Jqu i3fOqIKۆU/Upޞ]<m6_gl xtp'@qc %C4rzfZl8wa||77^qyxrܶ]T] ktm_o; iۑaz9aFqQVi]`Qs" +by|xq8[\7y9>'w̛MG p4_DZͺ / Y<j}`l_?>Z)_̕S7_?Gⓟ;syN?ꝣGǧBTyfP \R% 0bީBʹ`eײ p TT0PèHQJ-H,RJ0kAŲEJNdsq^8 $X,$\LJ)ȵ̤\(B< 3a.b҃mwaD$*WdUj 5lE*%G&HV?`R98$*Z*bX/_m..NMoy;~+s|H9_?9z &Lz7K`zce>C|FbDv1m64yHߪ*" @0z#Bm6Vy!/杩4x}I.^C]zL jL(tzTЊ"d_2sF%dd&:},oo'o}+C>z5fa> w{7Cx=Zέ cz.20N@TZvE&Бm:omT |HSJ$ŶdsU'n%$l(9 k>[n8v>K{Y?̼[K*"mh*InwO_1|n'^m-iWo i^vo8Y88;{oϟ67=\.\Ӝ]}|uy5QXp]{?\. ?+i;/6tٗm\Mڬ._X,16vn-rv0ؓ|z/Ԭ7^X~x̍g߁+fAp·H:yQ%y3'4g+ZN` U@S@ bUaL}SJLܶ흣;yIycl6kf Lѥ 'lP-Jt0N׫Ag'}EQ o];mk=Ri,۰\tA1{ "5B* =8`T3rĒRNP!}΀|Hvh\RF`1<,g^%kC}Y%sd C2wr]ج6 r!)JڈdH3B( >?4﷞5ݣM߿gg}8>>9]]{FIe2FsɋLJ~9zu`_7 =y{W ib'W#XY! uE nޣw!;\/fΔ;BDחZdۓC0񄁠m%aOܻ{|ݣ7>ÓǗMy\شUnv9-y3$PJ{o{aƏE<;oi8ϒ<2MY q31eʹ(f5n 7{8ԛ}~ٻO/ f1b?w]ـf>arՏ[f"#hNT:OT_ m;b_01yDIc+ .+fؙ"d~A-ۤɩ|xx|guy]bh.r~|x[ߔԷ_]G.\xxsy1C_"#Z"K{k[& I7\+Dl6uιh-_T;a5 lW }]<}zuuM1c RC?,b8: D~s~=g>6;w$(Tle۽pg/=sXc dju 1o ֫pHb wӧ{6"*0kd ,Yȅ0})i|>W6jDֿxӳG?iL @CV䒵3Yhgl<\6f3^&GO}}_m כi@3ޢ/ "[%6ȄHClOjozr-w`%xߧr%<>; f2$bFHM׎CR yTu@~v <+;p`)eB=u䱌is3oJb-!l3AF|!QZdӢB5]΁]]^heo}>I]>Lv \:@ر:椄*j "1I l(]6c )WJv1cuݰq,n~)g%ɲxbpKIDAT~@޻ZM Y ",fbU1P1tH`R΋'yWɺ/&ydž|m'F?ɏ3ظ-" [#"\\\5Mj Z}IrW׋-GS7[`./ׄpt v֭פ4 };k"QC }/ߗO//oV4DSl6f _?y_m?+_G6*rDaVՇ_r?ӏlT{!^sossfۿ>ӧOO>OگGW~峟2|K_ i/?|W{K_~ ~~#8o׾q?T_˿}77OG9~[ouppQ]1{;|C-|ѣ??߻wsuG9@G6*?9C"xH{!BX,>OV"V7Q_'>U_Ȇ?ԧ>ٷ~^e/{^e/{^e/{^e/W\3IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot17.png0000644000175000017500000004075414717152071030344 0ustar00hanshansPNG  IHDR65fsBITO IDATxyxTy?mf4hw Z$@lc/Im'n6^i~I۩44m4qj1 A7$@bhA+5Fr H0!;wG{}_B!Lt @ @~R`BQ4@ ~iHa@)(WE;Ե\Z:u,tS,Bc,7F2 >~^z%m(@\dC|F: ç[pW}|H"P }ÿ乘k H-xPp#  !l{0~E_ v-,!s u>y>_t&dxK a\ejϗWAkJ!k1+o~ڪ`Uyep z v|\#߁&Ƚ җ>!(@tEpeHEdOw{Y8i Q 5 7Rc%|t%nS<un  x^LG;2{t!4 ?`CE[>UQ3g j, ]^|pV|f-MPU :O~%W PPH)SPR#I0\ İ۠ X $PzAS: ԃT)ޔ !yƦ/eLXq! 3zu>;2Bhl*ЈEچb+eR7(q ëqtox WЮ3)epFp2/ }({82G(ФWOmO_֧^ Ҹ,O~0o'9"wL>i_-`k@ PT V Įm @j{:K`m(nsU7o_ Mv {_{;OP[x_#osEG2{<,WRu @0Q.󿁘U T4y40-@ X:h ;^HV82,78}Mo Ő "@v`~}?B%pWBOZWzab]6Qc:WAHw)С   ջ|~ ]B޽ >x a]>p`2߃ȹj#8 019@1X3`KqPxZpȆC tw@AO%cQ {Nx4qж~:vs@́M-4Ao@N΅πh(Ix7+Ahi07,X ^'_Pwf? v} Rᛕpuh; ۿ tv?B/&S a`=/Fk ' wA^]4Ÿ C3Y !"_a 4  ~5z= *ö'.@8. J^xqa/ cʀU?c߻/!tc@j_)˹}P}*TpVRTu>u_%YwyAh^OW? I3=zZaAAx}qTê"'8?t;Bh8{̫‰QnHNa+k4Q93+KHkG 0`r>~ʔ)˗/444,Xf?~tgeeק:w^պ`tJikkd*//4Y[[[듓u]$oEСCN>=>>СC燆 [ݨ,TUUEUUUU@Ӵ *I(v7 ---+VXlYVVֲeV\ܼet5klݺVZU]]zqx뭷|ͅ FEE8pĉgϞӧX"++ɓV"'|+6mD)+Wܽ{joo_lٶmDQ={]/WQoTU5ͪ:FM?,~Jŋ9EJJJ8니(++[ngnnnf _|QUը̒;SdڴiSLEرcsERʮj5&!>i111.mE" sٳg ^\#&B-))f΃((f]Y/qF) &  f!(Vv요c󚚚>㶶e˖UTTŋnfx,**0` [TxI5vsNUU(999t]z+W,..fp8^/ ]t:mۖ`-[8wܼy0BQJFYFVk$IAP;88|#G8NV<< ?RXX8wW^y;8tl1cƌ34MϏpEEQ\.ŋ/\ߏ]TBc`v#bu^w999+W2eWX!BAAALL%%I/~aZy/..~뭷l6[JJJ[[[uuidYu]4]׻}ݢ"X~c|B( vZ^^>r 4x4Q[[c2Y_(SJԤ(ܹsN(Y JiTTC=(zG_ݐ!(&i…_kmmmmmm!mmmj6771A׿mhzzzII(DZ+`2AdYE)(( Eqɒ%}}}7G']׻bcc|G(5my~``yCY^͍jf-p!4gԩSv۰ <^SUn;yd{r rBBBP-b7 !466ZXX8ri؈̿#B$Fil㝘hiyL.Э! B(`! B(`! B(`! B(`!ͨB/UUBq\KK'|']d2G+1t!8ndwQm޼51][ZZ֮]{?4..b/2W·_b5 Ճ~3[1!!F5V8\E__XGJ(7nqimmMMMeY>ښl0z{{{zzػndeyYpr:;;%IJLLd)V5,, B,˭jA:oM4UUYwA85k!d2n.wޑ$W^a9OB[l1Lj{{8{7$I|׌FK^~吐˗/<ܹ;v8}tww7;7(aѢEgOӴ\A\.WLL5kVtttIIh 8X~}TTԆ t]?rK/TVV6geZxć~RZ]]=}tC={vIIIXX!l6gdddee999f7ވ Zk}>ZYY9X))rpp0%%ndff1Pu]$UU$I:{lxxxiidzgNUUmjjjhhzؑ'JiX&fsݔRY].WHHȌ3چ5Rꫯ DGG>|xݺuV߷=n߷o_AA󭭭C=Įau]7L!!!gݺux1J-Z4=BC|8&cw#+`k;ؗ7n غE .,\PӴd^owwnxgϞgϞE N:RZ__o4Ffknn kllljj-,,NLL4 Νc)Il})r3gf kF4mK< /.Xkܸ֕q#^vfeevu}ʔ)ymgoAX4ubUX$Vҿ{/h+^2,jٞBzG֕F?*kQjkkX aoy9:|}}}cc|cMӼ^;?~\۷ ^UUrӧO pٳ}Ǐg+._\SS9sK-!n]g\\ܰ-0>{zM˗ҵ˹1477XZZq˗VZjժ͛7˲y}-][x !\;ySDQ-**2L,8zoEQ$?퍍={vΝF… <_pa&  q\RRҰb0|,sOoo/ki:]ѣN3t]߾}{TTTbb" ]**b6m6 {ikk8 gYt]g{rаdɒ .Bl6[zz f֭;uTJJJBB,ebBBB$I!X"4pv#w_vPVR@000s!DeEQdM$x"""TUe}4o"f0tyϷ'-en/!4'N充8-*EQX>7y &v4M$I$EQ؉}&÷'BARj2͛g2Ƶ~jccGX,ػ!4^gxñE7BFuހGB7.[E5P\C5P\C5P\C5P\CQ7`U1|e{,^{Ǐo$I^x݄Hm6ɴiӦW_}u```Ν&mmmM !4VWpX󡺮'$$DGGϘ1#---,,0''W{$֮]rVG2ߔw}u9s˿/700ԔE+BcuWIg\SUuܹgzQQQsqF1%%e!8N*rxxx__M&Xz ㉉e9)))44ws!!DQF3l5VBv{ZZi u\(F1!!AQQٽ3,geeuvvDFF^xd2uww!sg/---^UUU`4nhiZnn+++ޅ nڴRz:uRx瞭[H IDAT yЂUUYB(zҥ4vSgؔh~V <df(dDZE(:Y!4ϟ֒*p p6#zVVփ>8} ,p7˨Aw#O!nQaf!nQ!l0Bs !l0Bs !l0Bs !l0Bs !l0BfxE*O#n sgڵ=+_Wbcc!& JKK5kVQQщ'X=՚;00fff&%%رboڴ୨ǫ RSSٞ{5 dan… |MsY_8"nQ(Ξ=h4tRM4MX,8CFBhMLLzmmmXtC=TTT&L&(Iqqqr0BdY.-->}lu,<[,򨨨X^__Z^^~fa"&##̚5wk*Nbx/--ذaCuuuWWi f944]/9wEW; XDDEEIt}YK*㺺TUu\ݔ)S444ьRn4}[[[M!… SRR:ڸ8*::Ο?Ŋaaaٷ~fYQ46--w3j?78Ȉ6t:7n8VUU8sLM*++Ey~eee.k…v=<<\愄a2Eeii)s`}Vñ`^ 9KJJ=(111555-bmZq[,++<:' (^_9 C<|!k#p7d ?2 a6F~{wH y vkފ1fffBhg]{q8|!49:Ea=P\C5P\C5P\CQyxWE 8tp@w?`/=@TYVU !45 #q!9#s#BFhCMs qs"Wp_B8*l6˲|O!0<(sB[D%mCLjyVRINW7GC}yyyJqqlՙEw ~Pj2i9da۶m XVu#hooe955|a$:BA)53gY{ĺ\JyBC8bMřC,mfo T}(j:\l<ϟ>}z֬Y6lp\$UTT pᢢ I>m۶ HtI'BuyxyHWr.h hTQa5BHwwwbbIMM:w(.\:sTUU͜9s͚5]]],x򁁁7J؜@W{4V)|,"8_cTrd]ԨNUUUHJbMKKeQ_SMu4]1[BFUMWu++._O C !txkdj:t8tmU5]V5FIr!4"NRSRTSi:4,IeȚ'nh܀)B6jDo B(`! B(`!u{8!Px7G8xz---7B/su]nrC2ܽgwjjjrrF5BR.@M">o'\:7?Go_O|l6sdIi#1aцKf:^#<֪B[P=K%XWxIBXDŠ*RBR?/Jk̒bcJvT=gWȓn4=92V\\4V-RӴa}X1pwe544̅288pwyollĉkx"$11?Ӌ,Y >]xb )*33|0{o'gLYyp{" /m/I޽{9kkkKOO-,,,++`yC=c{\z,cɲ,Ii!,,ٳ3g<}4q.]>VuppP+>>uݺuaaaIIIwuWbb"A((QJ=rb K8 sH92Ҝh MMW~*xz\frRz\\\s>kFIOO_r?,DEEm߾;8ydFFFHHH___gggdd(o|>(++EԩS)))IIIǎXz#| 222&&jFGGbqlNIIٹsg^^^ll`l}'ӦM!BGQSNl6Iq5㺻<7wZ{V "pR.2qy=Gwt~c{TTPз8(lr@4A4M8K)kcUUٚ ̀oVo>u'[>]fIkLOgBckRG$#?9ߵ)K)96Zx]MFd4BhRN=%y'~̾ŇOY̑0I  F+|ƞG5fev<Ϗ|0Wq\iii{5uuu 3fw޹;wUYYi0 !LLL `  4-22ŋ<?~O>ܻw+vڵsZÁˌ%>PGf_d <'M}3@V/*pˊ$ dz qSJW\yСiӦEEE $ÑmZ=OYYYff5kve283gNyyyYYܹs ! ǎlhhɉ,ҥK~6EQ)R:uT7::zٲe555ӦMõxX_iӦ<<s?m|`ݝ}. !>sK.痕6ͦ( kb0l,F#(rnnnxx8q۷o?rddY7f$ʊr3~FiDDs疾?NkA/B xÁ]BG~TK+SEBBGNBN'BhkW.\0zý^! h9`IHP\C5P\C5P\C5P\C5P\C5P\C5P\C5P\C5P\C5P\C5P\C}BhB p':P HkIr{*~ 4J%i<}%hrʮ\KG`6bxyPpMjN)5Q]N\/nذA 6\x1>>~O?;}tyyyyySZZZrss'mڴhIDATr/K/4ѧs}JKK~iߗO?tii_7 -۷o_jD&MjO=TMMMCCo2&ٳEQo~F9sLY]/Jhȥh\~׿8'JII399yB}N`Mjw}wiiܹs!rm>x_lo?zԺVZvM6>}eڵk˗/g[߿k׮=q\tty q>ƍ;;;oO\_~uuu/Du{SB!B!B!yȔFyIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot19.png0000644000175000017500000004075414717152071030346 0ustar00hanshansPNG  IHDR65fsBITO IDATxyxTy?mf4hw Z$@lc/Im'n6^i~I۩44m4qj1 A7$@bhA+5Fr H0!;wG{}_B!Lt @ @~R`BQ4@ ~iHa@)(WE;Ե\Z:u,tS,Bc,7F2 >~^z%m(@\dC|F: ç[pW}|H"P }ÿ乘k H-xPp#  !l{0~E_ v-,!s u>y>_t&dxK a\ejϗWAkJ!k1+o~ڪ`Uyep z v|\#߁&Ƚ җ>!(@tEpeHEdOw{Y8i Q 5 7Rc%|t%nS<un  x^LG;2{t!4 ?`CE[>UQ3g j, ]^|pV|f-MPU :O~%W PPH)SPR#I0\ İ۠ X $PzAS: ԃT)ޔ !yƦ/eLXq! 3zu>;2Bhl*ЈEچb+eR7(q ëqtox WЮ3)epFp2/ }({82G(ФWOmO_֧^ Ҹ,O~0o'9"wL>i_-`k@ PT V Įm @j{:K`m(nsU7o_ Mv {_{;OP[x_#osEG2{<,WRu @0Q.󿁘U T4y40-@ X:h ;^HV82,78}Mo Ő "@v`~}?B%pWBOZWzab]6Qc:WAHw)С   ջ|~ ]B޽ >x a]>p`2߃ȹj#8 019@1X3`KqPxZpȆC tw@AO%cQ {Nx4qж~:vs@́M-4Ao@N΅πh(Ix7+Ahi07,X ^'_Pwf? v} Rᛕpuh; ۿ tv?B/&S a`=/Fk ' wA^]4Ÿ C3Y !"_a 4  ~5z= *ö'.@8. J^xqa/ cʀU?c߻/!tc@j_)˹}P}*TpVRTu>u_%YwyAh^OW? I3=zZaAAx}qTê"'8?t;Bh8{̫‰QnHNa+k4Q93+KHkG 0`r>~ʔ)˗/444,Xf?~tgeeק:w^պ`tJikkd*//4Y[[[듓u]$oEСCN>=>>СC燆 [ݨ,TUUEUUUU@Ӵ *I(v7 ---+VXlYVVֲeV\ܼet5klݺVZU]]zqx뭷|ͅ FEE8pĉgϞӧX"++ɓV"'|+6mD)+Wܽ{joo_lٶmDQ={]/WQoTU5ͪ:FM?,~Jŋ9EJJJ8니(++[ngnnnf _|QUը̒;SdڴiSLEرcsERʮj5&!>i111.mE" sٳg ^\#&B-))f΃((f]Y/qF) &  f!(Vv요c󚚚>㶶e˖UTTŋnfx,**0` [TxI5vsNUU(999t]z+W,..fp8^/ ]t:mۖ`-[8wܼy0BQJFYFVk$IAP;88|#G8NV<< ?RXX8wW^y;8tl1cƌ34MϏpEEQ\.ŋ/\ߏ]TBc`v#bu^w999+W2eWX!BAAALL%%I/~aZy/..~뭷l6[JJJ[[[uuidYu]4]׻}ݢ"X~c|B( vZ^^>r 4x4Q[[c2Y_(SJԤ(ܹsN(Y JiTTC=(zG_ݐ!(&i…_kmmmmmm!mmmj6771A׿mhzzzII(DZ+`2AdYE)(( Eqɒ%}}}7G']׻bcc|G(5my~``yCY^͍jf-p!4gԩSv۰ <^SUn;yd{r rBBBP-b7 !466ZXX8ri؈̿#B$Fil㝘hiyL.Э! B(`! B(`! B(`! B(`!ͨB/UUBq\KK'|']d2G+1t!8ndwQm޼51][ZZ֮]{?4..b/2W·_b5 Ճ~3[1!!F5V8\E__XGJ(7nqimmMMMeY>ښl0z{{{zzػndeyYpr:;;%IJLLd)V5,, B,˭jA:oM4UUYwA85k!d2n.wޑ$W^a9OB[l1Lj{{8{7$I|׌FK^~吐˗/<ܹ;v8}tww7;7(aѢEgOӴ\A\.WLL5kVtttIIh 8X~}TTԆ t]?rK/TVV6geZxć~RZ]]=}tC={vIIIXX!l6gdddee999f7ވ Zk}>ZYY9X))rpp0%%ndff1Pu]$UU$I:{lxxxiidzgNUUmjjjhhzؑ'JiX&fsݔRY].WHHȌ3چ5Rꫯ DGG>|xݺuV߷=n߷o_AA󭭭C=Įau]7L!!!gݺux1J-Z4=BC|8&cw#+`k;ؗ7n غE .,\PӴd^owwnxgϞgϞE N:RZ__o4Ffknn kllljj-,,NLL4 Νc)Il})r3gf kF4mK< /.Xkܸ֕q#^vfeevu}ʔ)ymgoAX4ubUX$Vҿ{/h+^2,jٞBzG֕F?*kQjkkX aoy9:|}}}cc|cMӼ^;?~\۷ ^UUrӧO pٳ}Ǐg+._\SS9sK-!n]g\\ܰ-0>{zM˗ҵ˹1477XZZq˗VZjժ͛7˲y}-][x !\;ySDQ-**2L,8zoEQ$?퍍={vΝF… <_pa&  q\RRҰb0|,sOoo/ki:]ѣN3t]߾}{TTTbb" ]**b6m6 {ikk8 gYt]g{rаdɒ .Bl6[zz f֭;uTJJJBB,ebBBB$I!X"4pv#w_vPVR@000s!DeEQdM$x"""TUe}4o"f0tyϷ'-en/!4'N充8-*EQX>7y &v4M$I$EQ؉}&÷'BARj2͛g2Ƶ~jccGX,ػ!4^gxñE7BFuހGB7.[E5P\C5P\C5P\C5P\CQ7`U1|e{,^{Ǐo$I^x݄Hm6ɴiӦW_}u```Ν&mmmM !4VWpX󡺮'$$DGGϘ1#---,,0''W{$֮]rVG2ߔw}u9s˿/700ԔE+BcuWIg\SUuܹgzQQQsqF1%%e!8N*rxxx__M&Xz ㉉e9)))44ws!!DQF3l5VBv{ZZi u\(F1!!AQQٽ3,geeuvvDFF^xd2uww!sg/---^UUU`4nhiZnn+++ޅ nڴRz:uRx瞭[H IDAT yЂUUYB(zҥ4vSgؔh~V <df(dDZE(:Y!4ϟ֒*p p6#zVVփ>8} ,p7˨Aw#O!nQaf!nQ!l0Bs !l0Bs !l0Bs !l0Bs !l0BfxE*O#n sgڵ=+_Wbcc!& JKK5kVQQщ'X=՚;00fff&%%رboڴ୨ǫ RSSٞ{5 dan… |MsY_8"nQ(Ξ=h4tRM4MX,8CFBhMLLzmmmXtC=TTT&L&(Iqqqr0BdY.-->}lu,<[,򨨨X^__Z^^~fa"&##̚5wk*Nbx/--ذaCuuuWWi f944]/9wEW; XDDEEIt}YK*㺺TUu\ݔ)S444ьRn4}[[[M!… SRR:ڸ8*::Ο?Ŋaaaٷ~fYQ46--w3j?78Ȉ6t:7n8VUU8sLM*++Ey~eee.k…v=<<\愄a2Eeii)s`}Vñ`^ 9KJJ=(111555-bmZq[,++<:' (^_9 C<|!k#p7d ?2 a6F~{wH y vkފ1fffBhg]{q8|!49:Ea=P\C5P\C5P\CQyxWE 8tp@w?`/=@TYVU !45 #q!9#s#BFhCMs qs"Wp_B8*l6˲|O!0<(sB[D%mCLjyVRINW7GC}yyyJqqlՙEw ~Pj2i9da۶m XVu#hooe955|a$:BA)53gY{ĺ\JyBC8bMřC,mfo T}(j:\l<ϟ>}z֬Y6lp\$UTT pᢢ I>m۶ HtI'BuyxyHWr.h hTQa5BHwwwbbIMM:w(.\:sTUU͜9s͚5]]],x򁁁7J؜@W{4V)|,"8_cTrd]ԨNUUUHJbMKKeQ_SMu4]1[BFUMWu++._O C !txkdj:t8tmU5]V5FIr!4"NRSRTSi:4,IeȚ'nh܀)B6jDo B(`! B(`!u{8!Px7G8xz---7B/su]nrC2ܽgwjjjrrF5BR.@M">o'\:7?Go_O|l6sdIi#1aцKf:^#<֪B[P=K%XWxIBXDŠ*RBR?/Jk̒bcJvT=gWȓn4=92V\\4V-RӴa}X1pwe544̅288pwyollĉkx"$11?Ӌ,Y >]xb )*33|0{o'gLYyp{" /m/I޽{9kkkKOO-,,,++`yC=c{\z,cɲ,Ii!,,ٳ3g<}4q.]>VuppP+>>uݺuaaaIIIwuWbb"A((QJ=rb K8 sH92Ҝh MMW~*xz\frRz\\\s>kFIOO_r?,DEEm߾;8ydFFFHHH___gggdd(o|>(++EԩS)))IIIǎXz#| 222&&jFGGbqlNIIٹsg^^^ll`l}'ӦM!BGQSNl6Iq5㺻<7wZ{V "pR.2qy=Gwt~c{TTPз8(lr@4A4M8K)kcUUٚ ̀oVo>u'[>]fIkLOgBckRG$#?9ߵ)K)96Zx]MFd4BhRN=%y'~̾ŇOY̑0I  F+|ƞG5fev<Ϗ|0Wq\iii{5uuu 3fw޹;wUYYi0 !LLL `  4-22ŋ<?~O>ܻw+vڵsZÁˌ%>PGf_d <'M}3@V/*pˊ$ dz qSJW\yСiӦEEE $ÑmZ=OYYYff5kve283gNyyyYYܹs ! ǎlhhɉ,ҥK~6EQ)R:uT7::zٲe555ӦMõxX_iӦ<<s?m|`ݝ}. !>sK.痕6ͦ( kb0l,F#(rnnnxx8q۷o?rddY7f$ʊr3~FiDDs疾?NkA/B xÁ]BG~TK+SEBBGNBN'BhkW.\0zý^! h9`IHP\C5P\C5P\C5P\C5P\C5P\C5P\C5P\C5P\C5P\C5P\C}BhB p':P HkIr{*~ 4J%i<}%hrʮ\KG`6bxyPpMjN)5Q]N\/nذA 6\x1>>~O?;}tyyyyySZZZrss'mڴhIDATr/K/4ѧs}JKK~iߗO?tii_7 -۷o_jD&MjO=TMMMCCo2&ٳEQo~F9sLY]/Jhȥh\~׿8'JII399yB}N`Mjw}wiiܹs!rm>x_lo?zԺVZvM6>}eڵk˗/g[߿k׮=q\tty q>ƍ;;;oO\_~uuu/Du{SB!B!B!yȔFyIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot2.png0000644000175000017500000040417414717152071030256 0ustar00hanshansPNG  IHDR65fsBITO IDATx{mWY'=Ƙs~>9 $$򸐶}` `7냦 ZXҩKth v!BD@뜜~Zs1}>{srNmUk9so|-@b)ƶ><ݥoxm3;SL=r=W fg2cؿ72czL7:{}{|xl76+ongggweYK_҇>!&ۭ??Fo|?OUURo%)7n۷OF;5<|!x}ryyy0w'ջᄏ?kkwqv]FDo;??|+Eo;N1)OO;wn.^su#|T{{}7C=|.--x㍯}k|Apnӟmz؏?~{^o?| ox^W/??s[~677w񖷼|4'WĔצ؅o??>?r~\Hgs$Iy)slTE] B]  bfLGn@KJL["!E F3*!@5-=Wu{+Dbٕ5ȽL,j1U"Z,2wc%pu]#(VU uT#&5PUh2!%I`F1S0 "5ED@t]:U-bsCB.s1%Ǯ:Of LSQ5WywDՅݖ `mɕĞr *G0C#@jM'520|䗾8>1RL"*PTE0D4,>wS۞m-϶\G+gbp~}}es:G @ =Zo]sh;ɵsҙ||qhXˈ1hp8ebB]Wp4ϳVgk͝tZZm>zj^n+뵼$ڿs- c3l=^vf_:67ęNdͪ`#<;n/}km'^u,N=ǐgtF]Zt_ 2IIU)b;+CmxjuøŘ,ZYVg:)cγo坼0E^?0[r5V6tk34|| }\/|?ybŅvVD`mu]aݖ3+a(d|՘"oqJd+qP8%KIАw^Dر)"&BBD5E @fU/ڿqaϞ:@V䳭|țƀV840N=?7B,w3Ks].>q)vhg⥄ˈ[xQ՚ؼ%oB,(tQlLqc3@QM$ABk# }eNم٫Pxc^QHnl/:A6#o֑x4 펣\Ge, yToH2|OpqP 6$B@K"hNRJ"S:TI*bB'`!,qq0!a WQgUCr)b]<,-,wﯭ\n1͎/zN=5!zʒ 3/=c_{,s.CĘ" w @U bIuI"E)ǃRsDXVo;4<{e H!&IJTP>!P#^^¦F-1.8{y M4Ͼ.jnRoozsO˪p*XƏez 1wu2Q!"Qu"` DI Q5́7p1 XJE4}j|3T4 ciHݥCE[3)g(D0/,qo#/?b-Ϣ1J<U3Ke[e6ymϵğ\"˘TlV$qKIE AMSEQ;׼7"ic@rf.<*[^ BrodlfL|w$5ӫ1Y+y~3ʲ;ngy|ܾT&4{?#LО7ѬQH'?ç}}M~;Ų= ĔpaDe2 7Cxu~:w`E4 -`18_W }9T8K km8VAڽ<˱rr" H h%$i$Vl8Ntb@$DD$$XH3kṊ#Ve)A)vs-v񛏯G& H ,$$$RUP?5m-./-/XZ:xbTn,͵Cecê:Kv]8791,ːy11vUs%+7g@H`!F33Q@ fBHb䔬R:%%(b " ϋv)r4*,Oָ.Q5ݹӧ*nVv&2&2$Bd"Ȟf7ƨSO QlfFD&jSEB5+l}0(^3 ޹:f $SÂEL)!3 2!*0y"RI.@dC0Coj6~FUAT-nX\XZ\Zyfw칯=hd-P(/ם1j&2D=f,a9j,0Y T!l"#"V30˘fUw65:!j-"cSRZ>VzzUƖϨ3ޢ[*ZE.ӮD3] ,N{;ilS1_;˞;^d ɨV}}:0B<:|uWCt6w|o`8¯| C:P- 9XƾѸ\]mZ>o|[ˉTRM=ѬV,0 Fyr~\G,9OPv8sEC!TsDDJ7s$VuVV1zhq/\oA0՘3q(C v[3Nkx!"Y2>3kj `l\*_#;F034@d0&@ ٖ:fK)*"IUYbhgrDs2FPH(J0P(e]rd) 5 !FfF!ldz u B{؈Ho%3S'NruY[3u&V/_7Fuwh$4^JU֜wHA ̶| &9ff93A4R0[jlQ͑FD Yo~3}  NhfCkˇgcٞNϨ]hjZcslenoa[Jռ%}.۰yr/HB=`[(C lfi_}!1 F Ѭa4;EAfMF*HD.VX0ϭ-eGiu^aTյƠݛ1$PV/+ZbDCYVhonVUϮ<@$h@j<ω9`(F֌SS IZL4aH$9gBM3wC*EgvkqiWF?$0@&z3ēՕK!:gYxMs1Y0SEDv k"$E1Ef&R@^Q'%BT) D6e檪 Uc*6BcWV"/Nk{2F:r׼6s<Chu\h^EaHeU!ͲTPVu@D&f$cAF44 "ՈHDv{훛vO?.#C?_*쉔/htU7 o99ֵ$uhʹLj B U\׾X/蒻8no_C.,`^ m[f=%i^ugI&cQ|%Fh/8/F3s_ l/jH) (ppn0x0Fي,!bof ,UF,,˕3s0>q'ϫaQڐ{5T0gf$3$-̵fdn(2TѢ""He缘pJ'bI&=:ÆT|:ѥH ,^QzT'Qʻ9v~6ko&S@$$Q1$j# UˋD ijlkIMD[eUhbF@8Չ\b;s!sQۍw g I-:hךJBNWo.tOJ"I @H)"DDeڶ; 2a"0jsrm\Sg7'9WBvz!\㤀&u 1pdljH 5"33+A @E@̴\nImllĀ98{d fx_U~a٥W[ھ3<믏WW6}-u|Q$2 IDATOmeq%^C=|14= 8\B\˸ZGm(0mwV>`"[9zw[/?ܛ>p'Q=!wZVGe-\xxpX!ZG9 b l2!(c͊|rmwhn暛^o*:4' euǮ>ʦf; "j 숄]0U4#DUr]9!م13DLbN-eҕA6GԞǬ3a(DS1 !22sCKĹp$%%D T1sӉ PK&)\H1$$ܫЛEDnǕaF[9 YΤ/ĭo0@%Cii20wqT+E}kqMș2  8b*ѫ 䛶D,R8QVUU'qdݶZjЬˋ 7OuL,~wp`ϱӰIi0oh,dFaN*jfb@$!:eDk29J vxi&Zut˺-hp|Թ*DDD33bF%CjtbBbF['ΞqҌ CcdPJLWYV&&R09v&IP 7bl T Vjb5E"Z4,\ (R!us1`o)!ƌ!J) 'Ad;V$iQ{ pWij]@4mh%ŔjAkJ\Я% ˀ<׋R2$bLe9̬Qj̊\T̔jb"&Dhb֌WxPmZ`wbqRȤ t@C6V<s:͓`+wvsm4 H@ Tҁ{vnF=.t3[7ʆ΁+P^|q@hhwz_CgD>OVcCVXg|#iYJ{h{}_CL@,yvQE$:oQ8aY ];k6N|QLԌTRaTB*J̍(8)*^S*8 336PM"4[_bj3R %AKΘ[Ď2ך"av:on+ou]qRD&n#I$ԩ s9t "KJ"e>bU4wCެhwY1^QY)2ȝLZNIpb"tE,5mXMmgSʰHʰʺUq#ÁEHĩY̔&F%B 30,/shL |AsL&`٩hA@F*fEh0掰R4cKh8bd*zG13#:Hm}''رNM"^>O [WYr}ڡHLj[*O6 TKmpuTYf٧q)FqT}ǤE;*YJĘp)9y Lg1'Бׯq$3ˁ0*PFqB斗|Qǣ0G1^vX}*AQ:X%&uz\ozvio3{гKr.%?dos-"% _|е]~ N=rmtg 1K> guhAGF`B2c`DYas3Vǥh\@hGSQ Qn!;c䘧SɔhCWݐid☹=9Ę$qv~αZ UL ֦Nct! bJfH>vlidUUlF:;hB 8ƪa7@ !tα$Icr\ΙQCgg3bB5xC¼H1䭎ׄ)s c0C] ALXa+e9:4fjKGC!7_n옘]yBbuẃ_~Սqb*Ǝfvͮh1ϼbyf>_3383UHDcT3IL` z3s>v๵uGͅMB,벿IZ3`< 0V;˻ƴi :K?R3`$"#ۙǂLioWo x^.fP@\ww|ߏz/~O9vUqd<"nk\!Vf=$bP$ (hF.,k%TZ즙b>m]EATL(\9Q 1:jUi!4C74u{u(iZ a5jm;Q, /EHE1F4$0m͑(mO*Ƥ[c&;Gi|TcA* 'yU5RDf'*&"x_TU ;SP u`J^Tsj=g%tMv!f:_ fJYTa&,LLԢDLARJ!˽wNF#FS'hT&l[s+ ޶]`H06r\2%WܵWyG!%r#>'7d-T0f"U5Ju cLdd%ɟAKZ 5{W}RUPZ5K7}J(>`Bìg5[g-F xZ3x* t"I( k}o;Ŭgf@\D~nߎژqUЌ]i.HfG}SLk3RDD5#_ύ!; qbQT9 HR 7\=x'>c$T("fj\ t٢ I #W]52 E,QVס4Qe*Ϯmb 8.v+ |f TR&%5RIAEvF&*;n ",fR2v슢jXX>{``̄՚T 7{NΝ>=91FPsUĈwD$)cD4UM '.jȶuR#n.s !<@}@s4 dbc6BDhѐ5m3y^1Ϸ-D!ZJRשӧW>OsEDu," |>"2p-t=vD8{&HH8uQc&IRUp9]Yy3UZYYRGܬ:"VT:UYUwslBJə=e1z̚h-cQF|kZl@gAU ;g붼?qd-&j` fMA&-y?sf=cl ;31 9H"QD"iJMR@jLq<gy> iL01>TU=jɬk)fyELvXUQGxY@` {M/sڛX%a6sF)#ZlR lj!- -h_i h-Bl5bvWfMYY1Go9̴#|jc׎}6srVO|^@Eת 挣zV}=c!s!"ڲ_:! Drąw09Rc<9 pwg:}/MMض۽[Lˢ9u}Ej?o}!]E<Q{n lVfuL$iƿngN73_vznMWs t45QSS4%P]kjݵm ;~r!X97شh\Ly+J.uq2Zculƅ02e!"d^$-Z;2ppТJPEY9]\ ϾY5~>3n5W>w :޻mDw}k6ج0.BDMN  *40:J?BwOGm]S iR9!OFU #r:0Y$ff\EPTl5kg7lٴSr՗]`)(l=߰~g>=}V~L͆O 5$H)j$)B)#3C&S[Pӻww*jhL"A 1ؙ YlUQSO7 ߭$DO:Uuvrh=S1m6+UpwZB`Jc物k;Us/ш" #~a.Oɸιk$15^<0rȹ;_I:f_Erჳ8W64PeBsMĎ)r۶9BѨiz * $3Uc島&m/3<1"Ɯ* һ;.lul\}+vwwܾ]",A@[ޱ\M;EVϗ_S0MI;$+@;y5CT_>>fF9)+fO?~j_~y0ܝ5_,?\hDNqYϋR}9r%è\ݩalQg 6 Ao*:mܥE1ה/\Wr]7췅 U!h!j\ I9QaUS3 en=)gx4}qX4&x6* ڞk'8KW50$&C#@d2PLٔ!8)Trf ĐAPףb4DBp˶#Ћy 6*KXT`WX4޲rJ*D`J:h!Vs{Kc6 ٻ]lEXmugm̆;ȁ)cO~~}u׷v'3F۾1veU.VRVE$DHNrT3Q-E`9@)9"&C{޿~q3Ou" {ܟ_YFc_ÿ}qzx$&pd'?3IU7;~dշ&#FQΩFt@ l82R A*>qMWE/4.\V0ARD %'y"mGf_ݜiw*Ⱦ:{hěŬ|:>^,{Q"kݹVc>ޔdZWfBO"p֎ȶutb]!a ͆CYLDOSN&/ZH9v΍G{w4G/{>H=qy;v!ciA l SUcb%"@<Dq>8fQߝkKhغl;{׎sYI(x͉"37,Wgmڔ0H\ۓ$kd)]v#H>%`^JB~-uN/lxy5JH|DIչ aP36oJz_/W?_flc_9$1)hQeU瘘QӔ IDATL$X{fLN0ivx~ztxV@u`522M<2s^wݳgsӪvD-I٭N[Ό& !¦Y߹6.U5>wT$EpQ{Ł+>h9NwQUNkPO^5s; sŨsf/&{G MՐX  "Sv0/fYXȌ ri2;f,s^r늲TU#2o$6*nSy:081weYޚf!@^ۭgm\<]Xn^6} Tpk uq?$ʒIјx绘4RQղ YTDDT |Վ#P`̄"h:0,TB fH}ٍ Y( #@td(3kz {dl7׭xӋtpfws˿ŧw?OV8p)t}61g0,vJq/" oyrgXroƭO~\ɻZ :-|U_X=>8 E m,%D1 }JT荛w>Uk;sT0TMШ($r_]^zՕjWmے•Gvs`pʾFj䭋4C20U H~4,M9ƔbB'OMAlKw>€ 1vdEɫ1B9C0(}ڍ;je+@@d*IIe f jα0]16};ε~p8Zl~=oF?]i߹P%NJt 6{rr,٤ $i33^(I%'G$Lh41.OgIl-~cGe1g@NDz"BpvL)!#f"j`h Emp-EPb1R0K?d T'uY]EobJhjS}DD%KM0mo\o7볽[^LE-/b݅{\Szӽԏb@.{Tsbd35v[y%DTKA7:礪'Dbk?ex7& 9e56qQJ+q[&vwLewROF3)8MOOcmh.XV+PQ}q団]ʸ|F;~ݜϾYmaFn|<8s-`R ;صw<8kig;Y\]A*NVE5m64gɂ`jeI)gE$&ʪ``x&*%Զ=?eD~6˿kB6Q2*ɥرQ49AϏUOFȴJج\?dS$+W̧u9CtcuM .!3:]~T^6~sɱKG`OJ9HWLU RD}(KU5Kd`9wLS㜕HIٱj:Y6x\Ԟb`d  QMh䧣QL7 NZπ3_3˪ޙ=: EZJ veDlVlTCO7g~g9v=?Ӯ;;@oN;{L7zz^}mv;u)ʎ(d<{ޏ8ưBP24_۹[ʉl%H_:>^p7,Ȳ7@ji]˦mksRY=tK?xhbtF>b2RVU˓5A(S*JO%;viSj$A=d@} )uYKyɑUCCQec3ˠe"1e$̹|?y]QtM&L;Q,(՞g`h>a3',*L@zg6[ǜ:QDd lZL{O#;Eu5۝N_Lgh(1"Du*#dQ3BJ*Α&`f4EDC.L4.Ɯ A[ʹdG2t' IVE듘cfieŦB/ otrry)y j0xų) hp{|``/ƐiTUfb`Ĉ@='Y1¶XhDHjޣwIơJUcOL館}nQD&g)nHɴ8-x2vYG=dz1_/# K|%Xw3ҷ|k<]YZo] K<a(Ы. `rF:~uIӿ??ӯGϺE?v4) ֭DE54"T٘ M@I s ͸QFFmRd 3A3s HGSY/W]η~w,"Ĥ]$xlm:8^-> mwf{%q9?s;卝rVFRRղwnLeXz5fvnfX ډsEe1Vo='cgjČ3;IΈjuYց=C4 r٥rN`1uY.Q2]U ;11 ̄f($[u r:_#$P8)o=%pt`gWU/a DZ5ǫI<4M<bL<袇AAժFāj/ }(cbDd ,@!;>އQ]d/槿ŲaWeIƶiC(Bw 7vcDŇj^ֻ# ,ffVj2u)ulßuhs4_sӿg[]bſewDD|˜WUnv~KvfO՗:<ݨ|VSGT $L L,*jҘ`+3֍ǿQ՜y֫vQ;&UݸƸ{S5ol6M5.M)f$nfn= G,כK`s.xBk;yO"h(!!CRSfUd*9G6.X]$"#2$Ʀk#r 3)DzSjP%8 *%v >X;Ϙ 0# c"b#6OL[ u`-P*/0{$f^uQ񏞌6M|wifΒE-h좨!-"n^aQf@gثdS( k|tt&ie}]TWtԈ}v!/J.݉U<%qmm3wh][}~T?Rްŗ=prDK`>ٟݹswǫޝ)@djٯ֍!J"$>[LLR}Yo_su*䶉 6 ?כI&MMA3h}0 eUAPG;{wkqrd %͈\@ǣ&.--;ٳl7,MI~w\ֲU ٨F6}ĔG>McӴ0Ⱥ1s |6٩FDdi DU33. &Qsr.1"]B?31 2DEl6нȇ):`55ET,4/T0q+*Z;>wx+A[-.s>Cd<~f=NORQ3ssg@D3bd1r=L8 3䢪Fui8`=}=w|.*ͦ,g2UQXcsvE/Ʈ4fDЬΗj#u1 ^簿ulTWL7t[pAR`@>#4/?$s^5vpy=jR =Jîӣ/~ѻӛ)k=E`yGٝ`9}U{>z9TM4yu/|xyMf4& 1L&6м[ܻĎ/[!MC`,` h( dJO셂|a'69nzcFd H.>6ލti7M쬬xTxi I0&-BQVeQ:5[meعsDMlE" WpѣGO<( 9O} x:J ƅ gh.83Xj` >رC2U@M9E(i=3BةZT E>[K XՐٜZ:sdٓGuJJͥS/og i8h4{e'b:zq$c,̮;ljlh~NxXTzV}?/>ߨY:p{?/kiIy ē{D\D<Ӧmc/ieMGuDztqs4 esp둉"iy!Pa,sj5>=Dܟ??8|]]@QEUSqEޙP(%.r]f$bü.E([q!¡,*vfesdblesG C&,r!8$3$`b3+cp974X^U!dksr$1ĔZ #HIB@Buڜ[:PbfS"7e1#Dv,# EjșshHԚxw VϪxI_a3z( om bRUu=ZAsP@MQS`aݦ3;ѬwG,Og;z?9xܨlRy^u`ǵ_==ѭnzR53jBQ[ӓǿ2ay;٩\Y.OyijRԦ/=ykcg8 . ϕC~D~~~7jO,*;g_?jȻ~[aBC>jYtkU7fѕ#F-䌢,NdNTr^B?SÃ$3jΈPS }jh|{tN&K"5Dԣzbߘch6I3rRld j+J&mHeMܲiV.g!E1MGgMrYdDpf#"̒5,YDqV̀ 9ް,F2(J̲I{PDєr:U#ΒUlyy<"iB5fg`9z5)wGLc2S ?aͪz92v {f`97+zz%0Cv ")E$CY5ih?ȌfE1dn}"wv>{^op [U!PLHFq=׳Rɡ !x_" />es攞-zrA|wx]]op!}#u=89 ^ԛ2=xusG<|_\^K~Ͼ٠n=/3rX?nqn֌@e{0gCMbWiu+#dRM w 6V;=Zoֵ`jTpvŚB=$!m bIi2`ܷ 1*y\=xۮdK^c RGt|Nܭ}(FA=*zeԽݧMY"3M]כ226fٴPv;_bn<ˇO*x0@"0˪xJAĘ hYb"U)A=q:dmLAz 1R J2""fEAfUQ2^S:\iج/gI**`̤E,PhL=|Q> e^1o2yՋGKq~gp~a 3eu+!1#N@ET1 D`B>5Ӣ~=|Vޞ ߿[vMt`D7 US(p\z\PJP-zSt=Yz6^޽}ˏ'1_4O ^ w x9zxxõG5݆W҉/MK_Y__/?6B@{7&HZEf$gF]k&/NS] )BHuKN:F1k.YIΩQQ' O,j6Tc0Lt?[RABhndQ:Η眔 cRY1,[[RY}?*ԵQcfʯ[uL:fݯ7Ih($99^swVVT$"1ƔF8ECQ DKiZ:qh@#p7{*"uB!P ăá<Z)*h6tĎ(gv@ D5xY>y^y+e[=o/w&%pW~0hk$ USIMД̝@SP2 G¡-(rwwģV]jbfm}Z;iBbVݩ#_sE`.-ɍp>H8J7n僧zO{<|r(A_V.7VW\e/xrʵ\h UU5#p>Ds{d}MUl6cBh>Bz)JW5gP8,I3 aTs"&OF5͌D ˲0,]9BD@M'vS*|TR7*mSl6)ɾ*X"Cj("}۟n6).쉻?9^H\؇b:ޜN>_dm[)>EQؠ1C"b犢}R2>kDT(\z;;Uu)`#Wu+2Tכ00 IDATլ*RLE(T_REtsM;$Kxu d&#d"E>W%!lT싫BlF]&@1a Zz*ǔɳsEc$ $e9OVUmI۬ KUx5LT`IHav7Q&[/:?|I3j)Oãnr1r:!H=(>9|vz|oWCo^x킯9p%zIczk{EMEDҋCN^;kݙ]Y|)+`xuC[us-&FL ČFm'''={`,˃f>Bv6 \F$!+IgU9gI%[71##(HPUU jjFD]+aP5URB;7'gMdED`ڴխ7h/r- ]q]q&A"Ad>>>l " >ƣ{g"{! 9U3T$D2u Bޙe"<:1>8&6,}{p S爲(8"Tctђwlۄ%'er, (cGIQL bO[jΪ;㣍)!xd~JOsyW Ϡ恃\\49/[mq99l3~}{m\ES~/E$so^7׺.tkrAΊ?;ڟ>A~svET~d "9e09F CrH1"gƀhuN)Ŕkjwgha?i]HM޿{qf*fFHܫ>1s(kϔi4jj 01%~wɟǕ7]6ST?m^٢}E%w]9o$> 4Sy_EQɸ?Eb, H x 6A͘L}[żf\6ݺilM Q:dfC,r*ˊF$FI$rΈE#zsspqU7'{vv]ˉu[2*K^ 6/+Cc@ثMc@iXob/``m5INg<t)<1AZ2Axl1r]`nNfr2h=C u2<{q4ݽ΍e~|7/=?1"W6؁r&ub頜0۵o˽^~tᦽmz6L*8y9^qS_sI[/u|gLږͯQ;V\Q+(@Ew1n* 4ctXt\1t 2!+:j 'b97_cnYδlk7ƚe6;7>{~XAkz@* UJi$he*)觋ܷ]ts6(qɪ۸Pڴh Tl/rrTĢEUUj6}ee]Rj T-gmYQJNU"%":Bl # zeN=CAuT-CY489(HTG&UI2c6$Ȣѐc6'=ApZptt{cgM͙˶fMdǙ/g{sʪ7 Aálh1=PHoFo2c3jDʆ")r"AA[ݵee]b9!nVeVUw9aiUyo879~}Z]n%6^ =]뫈z$ڜ)R-&U%qbNeV<:sx$5E1%X7e8[oixWy5m@ zq ^#VC=·vɍ?Ç=:+ز3tޟtN0թF+sW6u*^|-⧥/:ֳ /pWh9=qhhYꢕ{ߺ(z>xԗ\P[S鷆wWSlkפc)uJS6SU mQ4l[>܏~ 92KaXTT9>\ͤsfv3wN8vTh, ՚%Xs^:,R[f>,A0MID-!P!cCc$Ô6Tj45!گײ^My-MJcq)gj6Gw[O=~ZhU&rDY9!hb*l*rprɱ;LuU=#;س[9Y=3W{gu_moAUp^1}Xƭ `Tt֗U6!|1W'a>>Á/̘^u𞃘}\g\ x=Q\pg4Բy÷D bM6~Tj){KuiX=<'oH]D3e'H!M\!v[I&ԃf*L dun ͊i-o˽PSf2."5un6@f8Å/oAӶ1"15讞  ⑙H 7qpz?'p|}6ɳ+QS"t ΁2Q:U Et"EZkݏȑ[DT )A!\)y)HXr9\j4"\O0:V9pA0* 6MMm g8 J !?o)ٞY/\ tGdpjOIpR{r̍͌.,eL'/`&br 3+ 9T viPk}KQ8kZw땣KnC:]YAqLMޙ̱%3{}xﭏj t%5{4M·U5dֱȕS-Hًgk꟱^ 1^\RǟgrI3tUաj Bҳ-?:}osVҗ33CNdJɵ7l|-4 ^kirӔNWt:|i?C^~kbJ*GfEg1=z55lXۆv_7PD 4 qe)TP%stƾ9;vJWui\ÐPK6CSŀg%캅gnc5=x}%8<<:;;y"(yttG8ƋYQ!睏2M"*C!4$@ŹTAؠO٦.&(3fbH+L-ƹȢ['HqTE}穠CU@3vXR^-5+-&IjA2]<)//'< ]b={~ <eDEq^;QT0׊:#t "9Q!Dak9gBV0ˍRPZF"`Vڻo\~"#ƉKiSBw -\?UUUM4{CEveTq佶ȱoC߹CPpٵ]԰&zЙp?4O*|'ϾgW l.+9R^ܫ7O_+tgtm|C٠".jzZ@I٘-UrRJ%''8^19`F"W~^U" 8bADMg ȵ41 yT}*#J͹dPQUg]lc-fƷiU41rȋ}%| 0~T6.t琚9"V 9zmY m̙(E#U33&g⤈'RmRBJk9`UJB)8F$1#|m;[#2!)wjt{fmχGTrퟲsf{yAs?qkDjEX`֒@U3 W5j c.p^MBݼu]A ՊDq55m7>^&FaJDM]6|/_ֶ>\21wPkfAFҠ޻R]RǹLSOa澈L=93}vZt8 "/99}|ktr?ߝBsl/goػfRa#Ra(''[5 Eh@7gc,*W3UcFhji* ZpDP|$_?~9D)g?6M, >ZKZbt1ժԙlBEDS dhDY+OX8Gfc>^~K]snZ P5$ ZLR}0T)sBLRLAH#:Vje@9;@CBdBUpރZz\0d`ڏŌ`*Ef>mw`b6S+e*Tt/F`'׎^~o帍w[9?4\a(ÔƳhb#ĎrҔo,ƖVq񛔦!Z0u2Muoі-<GU;[ \Km۴#Vj[ X=pțW^nnlo? Bc1U)y  :UDEMJfDo0#w" #ZcB_r{tVv!&3ۂ9RJh(8vsEz~"JL`U0;rޱ, z8ׄ4c *Bu ޻TsHfNLptVku;T1:X4F9{tq3$3' ؋>r]kW6+# bH)1sɅJK!$1C"l*;O 6v\sK]8ZIYDS`rtH3whq_xEqm\\ J} ^Mچ\<i&B)g=Z%p*MY^H~~ޞgw3ϵETwh?o ^*TEC040w^Yknn7Ϳ?~η{6/?|to}x$Pe$i[/Br֣VX'HnY^9K yZӸsO9 h\i\ Hk\j- 6CUthCP{;W+7Q ]X#byn3(y2302s>T! C_JޑxSe4gӔЪI)HRB>I m[ELmلϾv?ǡ,wλ1{ACo]r5C$B%9ih`g<:ȳ oZ܇WpN7PIņis0u.7s4t2/#%Zx~!@hB`Q,ژ ZD,Y9Ŋ,.磟_#lnWJۑL/_CK8.6fTk۱EO\vtkB,\:9TeڎfZOfJm0p!4 Tl* 1Ga#~_9~|]b'g*~;V1V15Ǯ"%2.aoI$%Uj!wn^}\LjL mFf _?}lv1e`L< %f 1IR-2Y;gI!R 6M&94MlvLeۡ LJeS$IMBC 6v$u>8^r1}v>wu_L䠧#~vGp:~6kAUR&vETTf7Uu8]U116C9Z,X¦շJ-߻,.=;ݖ ]ӘO6{. ,GaZ0%h(;1.kf{lͣ[KьM֬U?=s]F}ٵ5/K>wѹ˹J;^`gy|o7߾qO t_ݺ|}*%C=4%gjE?>y)Rk-ܼsb?yJppx@Ku;LC2iih !nzm'<1CbM2m(xShd׾q͗nANiq~դ$qqۺLUZ35t\?9O)kJuRns 8gnUI AqB~/{_Ŝw3b`#>]@Ոƫ$\@O:om !!2#*j;9;i:S@5FfkXsr>j\)G4pDSou*J.)ךѳ5Z D9ǝް9fCቊ"~\^o2@Z5ddXh8+1~RJR".t A@re5M+CiWGVY%tW}ƾnzIgLٗW^d^`ϥjIvQ`;#5i`7~;G9璁??_t&ݮɽw^~~HݧtZpG;nZA cDӔ {&)%/i`]yp G{m2c20;:s^;~7-3uft.y6jΉ44\i zKwxqxU!:e݌9$CPDT:GĬJQ0tSWsɻo qǦ*žqp'4\8Ƴ'],\w@BkE8ꎳpgf+Gwpy}lTfjP3-^ h=4uleoF^ܿIs?8d΃Vt ygg3W^>wB1[^է|x5׋8gN8[4"D31{|P`y|3ΏYۛ:cՑŜܼu+}?8to{׾FGCgтTlv(vP*qٹֻI2MpCiOlo5p=:h`REjVkI) vvFoUHws׻nlNʀLVdJ)/UmP |vdF\ -1LDWs; #E@$l6Og*,5M-]0 z;bѽ>vqU{ 34G~JjۓՆa!^ţp~{=x,%iW#wn΅ *yA!_ w |ᵞA`ws|t~wWoKU67׮U3@RG'ۆ3+1=xʵn1l@r`U.*b u-6~he˘[: wU Ik`m[Z, F44қo1wx|mׂc%"q\S: S5MyLXqRˢ%U4뇲81P$t4L{GDfR*)<+ T'$45|-eL;wZT) !V"JQ23A/C<ҵu.2ڒQؤVF4SC>e̩4Msff( Tեjl#ff1PLEfFBq)263T:ylSy2yJT{~>\r/dzr1( ZID21Bs! D1ErLbZZr>zޭ;B 6s"oa䆪3 @LG waIz/oM=#CC];fan8n:j22Rcs6  A%1ꛟZ 6'I6 U3S"$욗~WqҏW;zw܎$-Z ӤZNQG0Ӻd2lRإA*}8]6 O%S* tTqb)*L)bUZ 8GU[o&SIEH1~FxV3UQU0@`"v#;E[rn.zsqiqdD!("22`K,y @zއm,jh@8'nIUT@EɨZs"LZ+MSo✢3AXM}Gܰꇔ[\ʠh`@r0 utuziV}TMOH <ɱ-›|C㔽g59#S:xGBWg!eE12`9Dg4QMc T3:s6Mpq߮MxqɁKÀ#3@\PSVɂ{}[~N|zz6qoW!_]%>xFx23wi =s3nigfhlt~jp{gCִ7W_ /ǽck:% 4pNhUۍe~VfZ&(SC$e3I5mhmbcZo_"vscaQ""xj[iaw- kZ_D`*(a:lqf3 ZVQ-jAŴVjLĔRsYm8b1!\ j*ILE{s#d!>կ/Oń\R*ŰN*].ʍE{ ehZĢ\&JATQ "H!3@D&3ΛZu*h]T5plKJ"+$y4?yx {Rĸ~ e4gR@w8 #GǕSѪPEĔ K1dRC]͕5Mh"T5)N$d':{WM7 w.L+yor֟=:ݺع./;7&G.&ÿaOQ7. >zAl6>.rç_u/_r۶^-x]S􃺭۸LŢ ZcjfD" CB#TS}N@$8Z f 1\i"(iLuv`D}jA}-XmZD,̾ 3o23ժJ̵vy_k[w#[r}Je()wmo#' prL73 I!<~X*QUH}1.ttQ hZ6Cy?Ӯ)R2&3ת{l:W13g1<`@9~!qYOʛ?\S4<.T2f~S8̎qN\eqLM #ýkGjI|ɷbf}l! Gpj"^|pxpZ),)$5G{):mtUC"LX4l*i,ȔjGT-PEJ.ea*o E1RDfV,}?n #KCEFCP005I)k))* PٕTlYyoÝ[>}x>k֜٬'KΥ"AMۜ e1@\̐@\15kL`0Jg"1#"K5E&J%J*]+:Z^[*XFV \ׄG'X FOƵ[ Z nFD6?~ *"c0C0U1UfU9OPsbBB$inܘq2WW;Ě!n^{s:&ZCp{՗!iM*qD FJ`vmn3Ll:9KvkXCF?iH{aBh^η^͈2\NioE3K'\, Y~~v=Q5!Tıa{f!lu ^Z<~pDē2]rz" L5j54@jTXlJ}vJ a -X04eC0S0HÔȐӔDMfvp|2Sn|lv(fA:h:3*iZR?kڶm#6۔s!!x^jMSڎ$#D"+U@T3/#,9:~r#"S"pfgPKt hLƣBB }a*ff$2"LDL*j-@ЧTjiClAb Zze' 7ۼ0;n;*lx:/9N+YQoOS? "9fSN͡'Q`Z WaBDΑa _xyY_ תF-^hW??{8L@zzYw^cQLyqss#.%p}s^byg"yRwb9gK>؊~B_(ιMm=gK Z 6MSrtɃ6~>]rǒW.i)&EOAN/qLsb`08,yk\@QM@QPK13=cbU? HsxwLE)ǧggb˘JcA*!RSq~L5 n7^Jb`hT"CtV*TY?6]@ "䉼s Y~%PUYfǡVTj!34)%?W\TDU\VSO.dyJΥm![E˸ܺyC=s UvlvӿoV3cf0)#)RCO3DD r+$9:_ErHzq9qg s#zv yx?aӸ.if ~ ?w7b7pyЅ.f{BٝA] \^3p|+9=< "b_(ׇ;4zBT3+oW/?'\d?o$VŃ3@6\VEb0*P,YÔޤْ:;p7ˡfP (65jIfdFd26Zhe/d 'M-$*PBM{w ZX䋗yp7Ή3~*冯Vl>lTJYob8fTa?XZ}r]7%S 1( IMUI}gb," m0Ѥшo yu:;]ro>kSDnܸqzz:fc1Ī"!im1WCt7@H)NNnf+E +C`N( et8hQdT+c]\0oh(s61Pp P|4/ `6ũIfۚh'~5Tw{nj'$4v.pǀ?K7V Ժݪx^\r~k_y+eOFm3TtuT@S75 ˽v}h\H'y{Enm0v]F4[Gl9r,Rbr5W DFUsw5s7BrDh8 y臡xr LaXVv:ꦩCJH,~zY,L5Ħn\ ~)vfyԂAϷl3c זͭ<.ӥ+^_~z=__HZEp'xg7;ٞ0TGuʹOM?ӝ7^<&D]+NGtrsf?gK%C@DBb0DFB&oϏ/~~&%_!t: Ș̋[ BLq6aہQ:j]Uv6gɹ+WYVn(j %\5dwä**ZQ (e!g3)kIfF4K;"81aNyT€@H̝}? ۾[Eǀ<򡗡oæ5ub8;?[o>;"E)js7t$!r Ls1)8P16ÈowzsaȆ̳DD`:a횫 `qq"ARוÄ !RН(\̡©vEU\ͽOeU$$ǼhyFQ'a}d$Ȉ7gp]Xk : ㏿Vpu3VPH/|~ IDAT gGs?}c,LfF*`wCh)j2(E@eզO8}/bt}7C;߮0b.ooζnlH8jU !:Sw ~#e-!UrĽN7̣Wm> >Qs??ͫ[Q ;ݯWd?M(z~'vc 95/6?}w1op'uz;88:Jcw%:z7s-xV7c%=2LBܡOa]ATL-c TU.=l^a+r@p~L U`c fYDDt}_LL !D,!t? mgm; n~Hd΁6Iysz'?yϽg%s,90}{}7[xAnܸAD"2/|HD)U"d1(bbZ0&6З2 L7d;JiOaWـ"39;!a):zM)`LbLL*1fԣȉ|ܮA{@몹]iw|BFOO~~?99hdUӨ"ڴ*ךRW4kA%@ba-:bw0<me7c[8aM8NfbdHHȼޜ}z_s}z'_@v|Emѩݴ)pŭ]XABUmԫ0~d_ ӯ]~|_/}ך[|7>{7zt2+YȀh5# Y-'U2zLB(ĵhH89hfVJTUё 5dȃ0,Ɖ` 23a*ƶMꃃb4zq(ّ]gׯ?#GW[/V¤TUD]<ի]ު* wOΚ Ԣ*Pb# c*9R8x"&";-fČq*ײ B7ʦ/W) !":B#}z9ZF-k`TMՅ0#1s[oW !]Hw T\Ld*"1jJ̀ս&\98@S7}`˗&Gٮ|؝)F~\q?yO&HyqD!=[V74_rGx 6xh, ~01g#^oˢP͏_|K}%o\=zWn~epq="ŪAH.n7u}Q[/70kgۦD̗5$`Mb2!3:Ĉj!<_ƱCª`o~t4;:]=ۛ1})x@@@nuK/c"ܕDR\.k_(_zvfߞ~)LU5Mzh"5pqHDuDפLy+@`([" \̌o!ywcETw,6j*]?/:0@1ga YDLkuq> 9!@m;޶^ƾoݧ(9;٘f0@LPAݻCs !{`Bw7MU ̴9r8P8--y])B7/;a{ǝHἮ[:­&*f+$^H"2K/=|阑=rLd5|Bܩ\/yw o3;w>~{{6g^^^-.g/0;8-W,[~g{\%ĐUUH?n\lHR[A!cQ2:jy?l-عNLK^6D gua0psGhX4_/-1@h.&﷪ZJs/x|>7RTnf!]}Ŗ+^g˯kc "DSMzղX;" |]k??;!J)HȀ:f]?6Aܺ#F^zr;8 MB^L'L`b3Eb"솮)P X FQuB )RL *8Zq`ȼq#2DÔsz>ମ0Nx )FšIaŊ!qЇ< rݎ^*]\| :PNFunӳO9%@p~:zo:%_;|pp4:'Q)Onj±}҅N~7?H@I \~JU_FH)k7_l֞"Q5*"DC)ݠݠ^ !@un͐BR:J"!(9Bn XnP)S2BbLq9% 7hګ^?<'~ooJٺ UYϚM$GG[n;::r`5 8s\W,bsZ_\"3ׯ:9I1UUUʘ<}d,+H4Ue5fs< @ `+]'Y t.;X v+DDS$w+2j3ct'5= yA`D hJU(٠6X&6ٍ]H{'j77T zU;2!B 7FSvY&F5#3Iً@gX6D\T T (Ƅ8MëWwvI߶meqay'YCi8A"-U U՞{k?_#@ `ɗMҔ8 [&%R @9sPa̦v˔b0:>Cwz6ke,S-LUlx :7?|{rQ`V/fBL=aN4$yB7~w_~潟 n &F{''qpb5H)pͽo_şcqQD 7щHsUE$&׉ aF4w緶1ֈnff|ם҂谫UB0's t\I)EsHs)`zeqWi*Ds@lGhHɊ_?oO}{Q ܠjuޘ*2%U3aR1Dd;%hc%:ڜu~쉨J:?\.0gĦ^6ӓ~ejP:Q~mVϼtmjhE\Iۇw_CV{R*iIIkFxϖ7ppX.t@1xwW_|[K'6ڡ޲I&S/WC=KU#9wqBLA3Ɗ0pB9!Pn`a۴82)|8thqt5(>_{;O/A3oro>[*l~>v4t+Mh6k$Ο&,fsԕ嬢Nh"0:@Eő`v!M7 2qwf&%&sg՘bDdwfB2X7DjhnfJL(CZ&qP󨦒ITU^\dHV3[VCqT7" uM".C q>u"?zw󍪗"ne, F00o[$pS)Y!@DHQ1%€,NMjtu`14rn{Ghv~.ש!Iiqttpێ{Wk3Fvcau%?J\ظ>\}q&JH>vϾ2Oͱ<@px& uUa/6(y9zUP5tiUP(TF ":T U}ܜl lqS-a .E`jS> DFwҚ#cqhG7~?=g&_)C.gZ,43r.#tr>]ɳWݷ?D^νc60BWƷ~QZoa~f\9Aj fC)Vtx|/|;w:9^J3ULV?A"*ȧ0;CсBH)vC]ߡTUH*UDF)DU10D FnfRD\$dȄ>QfY?~w?899)fb概dE &Fd@0\r$*Rtra'~:)Pqu% *16aSm 1-M[ $ \ ޫ@.ds/v8+on1.붍DtJ qsWj/.P Cw9 0!|x34i-q׀]{ֳCo)0nmue1 {85꬧8΄: 9p0S/bC$ =sn!DD)URJ S`yӏ?+Ml&tՃ˗7֍WU|ote٦KW/šcB \4FZͫv9ۮh^]X;>ڔ!gЯ>öaXuJۦ  :H?db{eӔbsmzGjjh c"DmS/FLXYrZ3]F1d9MYHDSܧ N}Tff8u`5T3+RLSH n>alNT٬z4p{A9eߞ=bJq9o듳7O>d{znLU\&~-)d(pB)@^BcJ`RPՉ-`pq]usT:U\d 8loe芝IwÓzY[(HpKgUO=IX?ǓVb~)_+QB7n}T-R!4䃵)1 vD#cSe(Ū 9fx>ov\px\90|uʡ2ҏ|=RLa N/O?"wAw"/m,+{< 1nRSM 88v.)T_[?>0ϪSA BMMN$` ‰ G0s!@̨:b΂`dS``"hj̨qT@d!c 941t2 nٸb/bn.XE̹p,}7/딴\DXzcf!Tfjn9'SpIԊ;:a1AT@3FBA,E&Bw"mϛ&hu P4)n]1"7:q"{Gwl4W98 Չg=8)gfv/;Y#".џ`0ZSjx Gzl(5k[bujEʘ L ÷mWgG_ټ^6G^:|U! 2܍y*`E+Riږ$˦Yl?޹s \k.u]k##y%ƓO5+d\;ĶdM+\$pR?^ܴ)XmLaKRce "LD0Q~ZۑDp:ͯw)]-NoB}_F-02Bss08)@Q;_ouDPzU7)CFn(ifʸ^[:|ʕܯr>v6K˫loi\DTUXFm_Q(S7D&PY{ɃȘ},Ecdf,A h5DAƐN3k_Oh*H˒!M.cUPY jى|DI8h0XTytst脪wI!8B'Wq">HHa>esLTdGhC`dcTqUrA61T"F*9"(h`&VqVWBɺ!T-k<4㢭gUBS #~;_I` Qݣnߕ6/^q?̻#SpAgH!gO0S9'j|;!\,#x+ pT6w,}naRQ'=d$S<_1 q<^nt}6vU]ÃYxV&=!HWr/k.{ ta& 6KTճlޚ}ˠJ.)&ru$`bBU4_z5m("!hoopYMB)N9#!F#R wY߬xrj(]Ĕ-6ݚc$-N؍qɶ,H;%w@1 $3._{嗾w>p1"V"R;ݏȌ.;Ni@.Уt%&(mLN)Pud3?W"7al._F!E"'6ر!W*wQh<'n>xutXoEFv)Y"ĐRUqwuXT)E5@j(""#4#"%l`bY}WK{{GG3BfULD&6RSu焖NrR-&Rֹ#R`/TME T+81MĐU rXCPs lnNKjR!1"X&RjԳPFuS;lЍo|y@$N!DBYEnJnDW8"39ѪXrRe5KuA޻~I'VF&TOTOW 6>cf ';Iy;o;pB;*!"UWn7M\m[o&nvs q&CUmuokIi8Ý2+nv%Yhƒ [7~3lH(Q(]{5!nfPy3m ynĉg cZ`>< e>`@I" [8 1Qp?@ΰ2d ,ox.o~_<>\dW)?_Y>3zQ6 ֠Ҋ6` 8"{'!y) >Fhqc9LZ.jm:pʥinzRm˙Ҭ tOru‹d62 Tw*FTW@H`.)vլa=11g,q?|0z hZ0JJN LIRbJbkjԥTj=# ˺O4^]݌'y$s@nYdy{v2|c!Vþ5ߠ<}5^^n.%U|z5{qɯ./WZEhdlس* XQWMUva`wq0y.C*^Mb@F"K5Oh4s[I$"& >#$2Ի8Uy|9~|7M1.>zp~?ݎg@R3DG*L 5h*jMI sR&",[}G0s3[esɜ`nsVA4֣Ҧjqjއ011fNԉ28S "8$fPmAH} R$DSMb~~rvĪ*HXL ᡶ^36cZI΂H#F~sgHNY2jhЛ-?TMv+mo;MOa%mciOdfAq{L|9:}ojR3wa}/;ٻ-okxTzu/F ·Veכ9rv@LIXģsN9V(W`t57ZJSId{jnm*C6i%K' ̗"$Cnj'Hdxa}ܮ<;1̭PpH3~o d`3X*1±C改+Xӡ>Kd$P7#^=>6R?\+fHpJ9;hm?}pMnRxMe&؜g/"YqPK_U;z^/ zmI4;_%V ,-%4mG["&պoMWui>=]iA:̌Mbؚ̉ \f I"P:BD$RWh6 B?O??B ^?ih\}~3?GyXt6GA…l‹\~Z Ъ,uPDI;"y愨nMXD]Nӣ'T`g{OL*)AGzNRb03p'I$&p"̉]ڐ4o]fnd¼4(@O6۪-16WTZ pAϢ]j풻O醢]*$Z[s"^*3z:v*^:!RZ+`&o.>8)/Hӯq)x#q+xz{fws rwtˬ'"E/_. |G`+zo.9a@n>8Sm<>?\?=?ћ^Vd9̱Y_wUdyZ 8 Bhn¼X tCeUtv_f4.(%Xy1L ) JPƱ̳IfmI9IbIHM@s3u.LDA0yoxs=oȴ 1'"af*bM 2 -/pEi` Fxm{}Y:7DB SL clA$ͽYwYn{-T=VV5MdXVK_˘_q"!rge}5^C\$$^N?9U׭FU+%60s ֈeޕp:Xj&N,8ٜvspLЫPp? E[=3@`.oNf?w YWA3ԫ6J`DHm-u.//23qr]cD,&D8rB`7Q=O솥V&$xJa5_XKG .mޮO00P,),#b$ UpsG[$m LCeI$P{RRutiPaH0a @" 8JTI3M\hGSj XD<陫bB7CZ ?Ӭ:_?f҂100, 8q,I(z"Qm6-$wH) "B2Rc ` E*:J sb4\úC)9a#knz$d"FE1A@r| 9 oepjjUB @f@ S%0,KW-F9έIj3t6çq,OϯMU!MMJrN fǽG }^q* ,!)LLnaMrι)2Rp;fYbZ}my˛m-C_HNu+^"ޭ#g/Q;WVyPܜ r86xذϣM(qVz=&%Cw??RMk@27mhޚZi-8"bu&,hLfU\j-Vu*f?͍>;Σdc # AwBrG Zjjg 99I"Nb[LT U!$Jz'_ONi@H[kt[f r!81/}T,Xs&hZJY=S5se$Ԛ+Epʍ0",8t8z-t0jDb$otlt]'N'(Zi5qoz׉YYg.92w:!Bx'N z=v)N~|˼Fk;|9}+^o>B=.,oQ@bB6Uƶz!%}nZ8!˹ |܏jW1b[\50 pR54Oq&mm5zA@ġF)8\ȼkn|zPiQ/Z  ! d軎YTͤ$L:Fm{rr<K#*q"Q) MDJH0lS?Z?{x}oXQffFD \Y܍ `iŦ*!HJfʴ] #=<\-"2Xiuq amBL·Ys>dHRmԴI:89r~i0̜s2GfgjػJ;.į˼_ keo[sj}/ksx]\";bQl,ILOux}p!Fyu~)va)S-1493M!KhFXzoW!,r6׏.w:@躄Ȼ]֐@ҴP6mXJ!&@# B H"" `ۇŽ{̓sx!A")id 1!JVlFf!PK)%%ְ]>*TDV5ZA|XRa"rYb!n9eͽ[ [N iNDXpSEIDĈ]"CZvU;τx>)Q/dё;*%06چܫ*832*I8:t 6ĦeeIᓟ._´ʉ}};s%w߳˖/{/fM+~LsNck,WOOQ`v9SHt2ոw0á|Y移s)t$ шLUf||}Ji IDATDfOkX;잎75fNͽ>Z0_^_j tK3PdӦ-#k%L9'ڒ䓋4ibZB  55&k- wHJX*Osǽ{zDprޜk` E$ &3#f5]_-!1bDD$s'3_~hf)"%t,Ds)q>oW(fFPWIO""F &jRbwhAl~;T25#榓u'qNT',Rl?_Й5y^m;&ۤ~E"%eA$ T6^eC&um}=Ajm`8}Gnq!}u%kOӯ} [f_km.{r I@BU:YN &miZUS`"_u0Rfe0.%dqA[YݳZjДd7iH"fmA<Z"2":DD \Dc@0c-$`!fVYar3#mmtozr]_nD{ӱ0}ʹ;ÚmS?͇xڔfZ 8hAf݀ȔכO`/S_o b5+w!OﶗP/Y Y=­^d~oqf/7v+x=zOoj5@tD3@1ّG6"ּ`P~7=#!c5] 1M4S4;6 uӦVoo?M:\jQs@ uV憜Wv͔DߎrtV+1n:Sr&s::E/c'D00C4ʲԑL рεB J%"nuKMћ.w}"42N[hyZOjp&  ]'aHD^usnf: }j6V[ U߳pf$g9:pB sYH^N:w(IZ\[!}?|^3Awٙ/mї?_鶾j˼ {k-^{g'/\{jyV;nN_]V\ EPk$l UTSNTj8 ܬ5U:X7}ɩ PyZuҚ'qnM@G:DjuT4N5=Ԗ)쵪n?짆J"%&Z ÀpqGONNXNR Y*b*b0 zipb-c-+aZcb f8;?\M01"x8U#D? HϸDnffR25D$3&JU@Fb fqbSfPDci@YX$ѯiU/v3 ־ൖReg&sDiI13"teE7]b!r9?쳋(mZZG5^ZUi,EcF/yRw|% wRZr~_?R{7FpoK,WȤGPXT(ܦ}%@6"oYQ,D 2$ij ZӹLVtÛϓTF3w>2".R5 \6׺ڍilN8! Վ ԤO1fl>.7X͘9(>"qtЦL|HGhA(̈`B;4h8]%A+j t:0jsPerA6Ϫs>9ZD8']76i6C Ps @&"`V9tN\L8os)ū{RRCZrZ,%9:qYL,ew}8߮jy%N31_gf!gW_oN^|tW Ns޾{ҏCX+]9z6_o+R"*0YYx+4Q׼Yu+M]c_5J5Y[53d$E> V-St]nOɪ۬Wt}W>;LsZKQSfa!7Er D!g 7EH$ ~pNOni楶RURiy᷿}2 4ll>qq~O5u5E QDc9 jA,M#qZEJɑ"V%"^HMְXgIikZ31"Z+FyҎ$9gԦ|@@ †p@Wp_j@b-Drib)5Z HK<}D_cH${B|N~) !yۅ{:pjLYS,ܚ9{<{f:Oh:uǁcR+NJm@Āf)IqNКv}]. C:;ۜlpW=p6N5x<ͪPcTcR<9 Q͝y -?K<#{E0y$4̛̈X1$ᡣ6\K]#@b1hI1o$2zVǧёs2?=vqN]}C'f%{ ϣ׃mrzk8?+oH]WNYvlN 6%?g>qnj!̓Srf>s\Y B:"99Pk@ 9 9Sjݧ$]ק$ՓO~?7{tl<ͷ| Zq !0 B`]+)Z[`DDr҆af" F7 m-#LQ)q>\\|ᠪ¹Yq"Z^ f'rwg.v4pp"^ڈpjDęX+`fH,DxKTD. "W!SC)Hx=1.u[1gC9Mu^%y~z8vXp">OnvWuk,ZF9lfeV6A 9"2Y=S|%w:Z "|O~u^ӓ~xvzl,0zԪs:7uJ FTح0u ;r4L2IM30-u[aEiƒ- ո=Mj"9Tu.~>G_wWRՇW)!6:[ $ f"D$՛/J2ͷcb#,<9wYդKu`W>ː3!jknS+nW;<!Y:KzhVI[Ei Mw HEDd,)<<<iJ#‚XsNLDuVؘ#4LV$0, nvC"e:jHItLGfb6b9*E""P6rFPiMRGZƸ,U0VE =͝q]BT!f$ 0M #Q,+ m@`,$h0os/3)s3b}tQlޱϼ&"k!ňgm4RPGfa❊pCx)~@a9Fn{]>cfS|,n|ӄ㻮li#,}%OqFVQk}ikW/} fnf2KVKQctASj!n䐧XXNiǓ޾_߼1&BD9<&s RGTf‘Yff@q} ~HQY>t*AiC"3Yܔ:I!98f` 1"`|7滋k !A#[ohLTq 3x9oe/k-އ7<۲Dl NS$y>ܷRөٗ?JYC#Qp-.fDL_*Nm?ij[tjpjw~[[3$9(fϤakh]Z`yoYnn079@ ڐmC$İl9Drd~D|-V$dwJX=jII/^=yD=!bïH֩f*7IF2#ٍѣhUuW*m}-3mmt5imkR"oi>=# [Suo5+ReUOKۻ(_Ջ\/dr w'HJ2R΂J0/.n.h[$a,sM0 2ҋ˽H庽wsQ%$-f4y Z;*ni0VFNZHS֗M,qWШZ m]UAMq3d="]Q 7DW;nGeOvZ˗ٳG닫ɕhÒݴ&_q)<>yigؠOOmm?}q3}q;ݝ+aN:4)ň  #"1;n"Ci.䵅9hkjEkyqޑC[ %ρ"G)9Zhb̭1`i(|2@03 9Ԕbvq\*3=x5""lnF7 e9#6 ҲєMۛ?i-#ztF6@hp9zzD8-(&u}qn']Ms]s[_Lhkh433w @D!+n%uYVRKk,5k84 H'#S+FF)(eRK) A6rFiS)'wslm=)dW?IوNt)$#b'2ri--[t{ZtQ,ffF^۬й;Vֺ&o~߼swx`ZJfP*SB4B5Z{ }JuP>W"RjKզ:M3T3e1Ui]O?j4l)P=d:'F|=L?sc׾cлw_N|jշ IN7sd?Ο>Gxr=׿+ŋw;J5p֋,\ʞٲ|M~ٲfi P#z?%kDBHswI)96G),pB !{;[4*vhRDfBa1¶"Zl92<(6DO0zRI[ado.цQu㸤ZF0Lax`BP*%퐧\t3~9228{_2FJúlm,`Y[f_뫫ں.-Ԛ Xj2ٯHZX֜_\ϵN?n<|ܜ _QӧoY)'?q_jX٭O\Auޛ|WT$!֖X: ǷoH^Y,;yk4Ǻ EٖT-u h]Y6҉$sj,} 8Y0L $͉Znut7Zq/F+I>42CcQ> m$Gf4zI!lqކ :s<2"htr:L-6>r$F%Yw9&T[3Mi?W%2Sqk-y3D.xly\[Z=5 y)EOSK?bT\^w{wj>g?:#L@S۵gI`mSLc|ȹx27wsb揟(vhT\}~Wjc[CB)+kz:ӠFn"íM$h7kTkxh^TK16Snf7TXUjW R|cn~A10<i$ {K@[MR6JB0rK/ж dfdBj7f.$FJZ{HFSH2a Cnj6,]dp3nN# @SkfMIޯ?Mw}5X,){}<U,^T SqWԩLWWW  0}Wο _C@|K@PSo1%AHF>EϨL T |z_ a=dhLS-AMLeR[[G*18} KyǵzseMHcmZ# D"ҋf7wj`^f#ݬGȩ=8%bp$mDܑ4 g̠Q !G0elVsRu`@a DSY G2;`]BsoЍC!6ed\)5R+˯~z<~o@5VZL'oޟ>_`*ui{Y*[krq#oHKe}~y{n2ꌰjxʌ+vS@.eC rTiJ?GwbLEHӬKͮB]>:ŧTV/[fc&jJ,=Z)}&F >4c)j&h)E"R!RCL8MX[s)9>t#!KYKezL4̕m$$6̇aԽJq,430^0Q۲$Kd!#iG)̑gDo=us؎@f.%̍ =ED`atͻJH@,̭ɞs Jr"lQ̑0uM Lƀn_7i=~cqom|y*m|1.IRuMF^fxosR^^_'8o>\H}ekwrIB!τ5GX:Z  1i…2H\ JJ J|:4^_qw e<*GDtw{PZ("}JiC#aHA{]澮k ZZ(#%P>8t EikGvd)^KuJUhyעMSnWOrRL xt%a ,F-D"YFÁC#in`0)D:pD¤٪̌Ȱ4 omAd$5lٙ7GBImda=h dk4՚wŻ5FR>YHe*;:/.i,(ռ[3eER̅͏_|WXf1UxK8C~>&dמқл2-r8TzY`z#M3gCz4NWcs27\ڪаizYDdԠ(: ;6!GW”hpD몓H#ۚJ"3zWj=p/x)\湰\Z7#RsnM (HTQ`)ȡK$"P &KI^ٰц#9Q ']僴=j=|r=Ro440Zwt:ʼI˲`s!`^_x];_2fF?,G3ǭjUj}{:\a2ctdR'`6ZGwT_~U^(Jh~gzzA_]{|_> | |nc2Vw+,abI|D83\ض6kT43 \DOr4$իEu]S ʴ|>h9eԩx֮t:-)̹X}7ϷxnM )̿˯~8s߿@nߕ8e~*!LXAi#1@):Eb7dm)/F7vwota:I/uW̴g~lwhH!3#*CJx ] G|FʉZoJBXX[_3`:ZT5\(\5Ծv#)g#>nK"!}ƶ6>Di ِ&#ss߆O! m6ii@ ir_}k^y.^%7&\PxR6k`sToݜ-Z7meEhGt4ի/u-{T)/}0?,'do]Mz|ڌjO:S1h0Gg秄7b\$:':=sPW-t8޽oM{ZEI-Td*7@#מf@dD2z#9()G7hQqjGB(FΥbs?juOEu hH"2i14첤e7lKm8?Hr:G)![B&FC!#;טF>YFִkud9iZo6OI3Y@jԤDJ^a)qP sdbp?wWeϽaqz}<~y=n=h4ޝ޽$~*eWfY}_?~8mY)9C:>|*ܓxv^nj^;f#Qݾڵ?c/:x\|[I2I,9\'SQ]B<,9tbs5Dp`İi^cZimNtǻo_kmb4Fbwe"C"s I`H"{{PV2_cFH97 0\\^~_|(DJ@t<شIo7E"m*uh{qt7a$嚃Ɂ͕m2=%3vZNvwN i#F.b,axZH|IF^x ٬nkIbJ347>?/SFq#:ndk ϵܦJ͌ZȂ/^wp}?0yx_}y}jXXG?$~Tg׳ttp!eOQP,X/2:OG-BЖ:^)pBc+<;ei˵]67m<ҩZZ>zz 1Ǻ.};ys?c3@>qڐsz4=2DF Ԧ{F1CNR7R. ܤ8=[y3r4ʔG Z ew%5O&2C:n I\>DYg~nB##>I3ü@Vl323NSDAȭ։-Rff::Mpx*JqX[A-H;wt&TfȈhA#^ܼz7b9E/a !zwm)hW>UN'wOO˻`"#cC4Hx*#~4O a}WQ"FR(۟90mW@%7|r5yE u}k3QۂO$1DO? #7S`xz z9k?7ߵiM e"zJ$ b}U0P*sKf Z?w)'M4 Ri_yӶJud9M޼N4m5Zޢ" CUpT9y$EՍhH-X" )93:x4=ƣ<Ń2KP"cFԖn7ˉL^%6Z6^4<$#ш$ GE@y@v=_}o:vpZuMfohyuMdkuW?ocyHVv_Q8zn*UЦ;x켄NK!y>owouNCc'eOzXOHwEGʬևpG4d$@7GDEǥ&7b"p(rPC2~_>UwCq%2ŎL)!'৶zo Ƒ~0.&R$B0FРp.=Mv /\`;IKۼ֌$F:edN^w!j@C-B y F`!ƦaCdJ-/%4Z쇨ShLkM*G5 F{{XGe]O IDAT_OkZ~o3[2Bք&odf0)$Ӳ(s8FP%,6O{HG4"|1yȭ&[]&6QIvW 0rr m/wy'9)q% %B͞zr#,\eZ뺴ǶڲKFѲ늈X覌> a3 qaFf[%"/D&e$²0hMzIe)Sz,|$ҋkCR^vYv<~>[HRtφ]h,gB07A`|.y93읂9UJ\3p[J%=akk)ː1 2Yjf;?&3{rm'^^;8 KF,t#Uto~6vܣ_~iY @kz k)KsgH|:Nr$;1&+v K L$` !UyzZ.Aax5XŰayP=@4@q1V]6pt4hk7F=VzpP6=B-3>e>b w]`[Xᩳ"c8ξG)#tYCjsEݷXgik)ptP{ddz/~/wTyy{譔RTͪaW߿^-`23$`I]x9yQ'< rZdcR,/Äڐ @Զhvq6O'A=0=7@ydLƍh$9'CBr[[.- ܏I=́GGخkT0p.XRp86#[?e¶ dߝN {B`jO(1@ht1#}l6[F(V;axm-[k$1QoA'0aI=/˓.oH̶NkCOk3ͽdfhkp6ϳd=Mpa4Mv,n8MWi̍ђt3#]eX8Mڴ]GFK`r;Wl/gױ._g\I[3RyvvxV6¶ ٽ>5<\|gS>La @Y!ppA:/ɩ=[6gU犨8?NzyΜOO(ln G||t աytލWAj[>IvN::M#){vO;nϐ'ǻ|5;;n8{_g耰sj8ǂ!H#bqvZz@%z>粜NḼ;K[1&)*(!CSJdHiH`; 3*aYbG|sɉRTP*6]; X(z0Sli! FS*th!@7Z/׊|J& Rz9ߜ3bņJ95}R  p4n-{{,#,$r7{Dd`V"2SR * 7\Q&D+#7uaڪ }uwwgVK0ꋫ}bMV/3޾= SZorZO_^?z lJ(l<z͘[$D8_iǏKz|m>?vl. CqkKxv=Y8O/m>KP5#=/gG8ar\C:.wwwp5ǥ'ɔ+Yx1[Fdn"iC`DW#98飬503|=ts=Ҭ=jY#HG ٠ l!ݔbJ>X9"G'XN| OX Dq*R0&Ms|9<7Tw&zNwx)H r&" JdUIP*VG B`7AJ-TJ2$D9bnHa #sepP{764L0Fk Tg5g`=^tS>؛TEc٭oufV|6o}#ެ=woDœ)AAdi:235S˚-yvP<#&`].ݚo۝` ]z1Αz@FfZDf8+IM*^mQD|dDdQBWpvB3">X V13 @5[mIl}s?9/%BC vq! mWG@L-8Im"绞l?{Wg;/tt @޳X%^ B혻 fi9q1v[mp%sEd9j=RREfRO)CycG7ۭO_rodۦF]E8zo56 $9Q@U8n" ae)nh`BG$[{z?w|/oM!K+ҺtSAa}D&Nv@y=i@n]%6rs(M=d-<1Z* j""X̴5k[>0K=|7yAה[X ݺibf"5U]Xƙ gDMqF];#'DdN89є5 =k%[t02#d\XJαbB4Yji*-ݘJVFˬU*BHYMͥ7F̜o[?"Tcdb#0gH`"z)1&YL"djL55噮 Nlܕ\PG̴ZD133K៦>֛}oo1o+smtev-PmC o};Lx݆xjZScɐ4**cO˗_`3v`doņoZ*m9,Fff [Ddg"Ĕ0$?]Սd0RA] p̧ z/s BHI)`DP{nqq+,d~5|P6} zSC*@yz|en 1ɋz=/џ!dL tDsԊ?ǯ||x| 3!v7Z" PSOH+O)@2DE>főg\%'Bdm2g#0mwϜǔ24kquQI"RںHOVvDd''DlQg.PNOʈ譯Nrq̒^M7l1}{<-o6}~?8om÷6n"c QQ:]"{߶?EDkff]3[L29"ބY șdx1=?<\MӑsUq"@0O +ìƩ}iඖbgeL>qD$DI7Aoe hA-T!%?@S]⭊:|_2@RQ+w+eh< Ǿ[W!H<>c/e2#no-QsoSM[k>M~}#:@fJYo[ sN׿cqdxװ/WLePN3 G}w˿_w?'?;1rJs1\Yq]OtɈȗmd-W9dgvن8-IN<+LE,,Z]8W}eIP%im΋_ДYgN^NiŦ`tEkR.y\Ǭ0ob~oo9hzoc?"1'爣AUXPᤈ9h)B'3@I2E4=fn8/g_"c,p!<Ɯ! &iuI5F5d(`]3LvCoo$A@mk1nucE/2DMVyɌywwc95U U%(p$(u~o?o_*rLT͹So_E=ӒU"X =?ɢ$ )!Z(@Tzy5"22\>z9_KFq&ZSԨ"9,fZLEV+?;VdQ*m(b)F#G4˦-M:W}Cp%|~\{.]Īn-z8~Ln6 "bszx#3{kQ+ɡ&ˀ`v4Rg*_P tm^@YUP!6 &DHJ!Adz}2km]!!:rznmym s}SSEtyCd^ jt/j2hۺRGd(#ۦ2M>"dnpie"StFz>u᪯'tRfAs(!(Eߙ@q->^˰$Yb)%V~nPp,u6&HF"QYYyĐdIfFSj#e&WRIkJIUirʼn PNs7 R#TD)"0d<&ÅF3TjV_8><"C8}!̮ju$ J|vy>%Z\i~^+KDƆf6*nPV ȄѻF8սuDHR>be[ZW3[p\tI%Gu(USYn;dmB[r* ^^ėLzOp m6ݻT-SǾۦeyAp?5~nA~~|o>Rl8s hdVl"Dˮ@ $e?g1*:RGbqgPV5e{`ċiq Y,tt@P,W3'DDDטV扎g^G%_\Pf@T`[+4aV-{~Y%TxFZk9W;Ǩ$NnVp LDF(HNAB"-2BDz$LK W5dŬ5Dβ?~~F @aqsY` c#}}@"o](X=" aFMq_ JI{d0ED:4QDŊ~Yp^+UV֤ @J&}B)l7HBUMFy\f 5uV\[65o\ϔ c-:sy"̧> *dq)@ϡ"LY~`>ݶ>#$3v[2%(fcn/cL-3ǘ$末RP9'4z.ZӔ||>Y['Jj]qIKTV1w^1ڤhQVɏĒE+.!YDYL.L@2+qNK_7_ O"TU1ը,vuu M@iL^py[ |&Q)#}I<_a&$U-9[W"N,G,Wv[%qW̌LhNY72Ss  $ܣ5zCJTmϏ9n{b}43wG֬LHTc20"ַF8TĖ"B(vʛ"D"ZѴtʮNmzĕ~Ns6(d5Nk[ϤKV#'Q⹗ggd-uk|ۧI$@ZQ-j1w[>J`\UE"DzYٽ+x%1-NA3@YԻ(6|,KE 8Az!i&[+:Rw o9X*T TK%#3)Sbf%vÌ IDAT˻N?DJPd\xw A!$ "XN ) ʐ /#f$@Q} JQs1UnjFpUgG4IGpڐҴWEjؓˮ#ϘGtq轥{fn[1Vڜh[?7kmo_쏇5cĠAv6| Gd HVaj qi5䪅ˆL}ֶ>a?}<f>iS~M(҄]xµ^P| D,O%n'< _B Ъ?eZsN'W4`ɍKRXipM*%N>`緩I)WDKVתF)pAE4PP\PsL+:1/w `F` WuFI&Db %DHC5@Su{^zSiW]ߏ9késZNJcszKhkAD839=s$ G 3~}ߵV5jXͣѓ]5>k( dyNhdrSUude4U^DD6YDM3+S f|kihLL$W OJI)\LMMfZ@>Hd:c1c1 nC+Beb@ƈ}7Uix /_}w2{ t'#f"f*0q44ivdzp1 Ѳ/i+]i(. U}.;ۇ|nr`hFhY?zя~KfS bqIXUan vEĬ"?7BV%ȕ?mӅ-qm^F-U' שUp)^p}gl$2N*JK䫴0*S# 3E|_iN c?}/}N֛Ic?2cՕ 3{Gݧi?A^ZIN23di!*`}7Kp^?'|^r49 \d\ E{zWt*J>=SL5,^%6cpX OHmp5͓DJ xN( F]Nt ҽzɸk+;šbsBePʎ1U~i _z.H&S%;総* yy(wtg#W-'c_~Xk54R=]EEĜTLH.-|2HZf$EZm+h,s&8uRKrwQ 0[3jmfu+JSDA) Qh*Xs+tj˓CG .RbqnI]^k|z<?Em;#l[x|ud9]m&LmZ8q9gT`3mfjJДimM Yw73ZW@Ȋ)z}|ΎP έLasw( k\z _@τk=K%Ob%,qa\/P+s`kmD$22"֚Y3mUTe>"ZC% #Q Vl"P*pr! G.oE S./*=Hr~~~,)c9g"# EѨ J]j2h,IAYIOc"]E -o:*\#+\&Q,wEjcK֨ 9OħE%#d3EMxDasN2?XH(z\SME[>F/_:fb~<*mS}1`o䲏pO5H=iO$l7]`2ia!ݹf>X n⎜E3'LEx~M(yQpmWFQeק. j~x}=Ah=ܧ( @dDFiZAZ$fT3!мs(/.NﳶZHe%WY#W9=gӀ0s֋^XõFѼ5t=EוtIjƽIuU*}~?d6 |<~o05"L=E2陈Ce!b''G;VixA`0Y7m-w9kUQxle: ScL`_VԞ%-Bd"R1"$S$N'Is$:rko.*v7kcjUsP|~7|[۶ErcZ2o-"~lۦj9^&eUۦQȄ5LIt=#ܽ먂HƘCM|>[kxMzv^Ry5r/?~߽%]뇾lg:s9J]9Ufnu`h Ht[kR5`DUUmڽLnۻH#FpNї]L]Og j/']~ljH]3Uu'3! @f9@´##:̌5 j[͢?wO@U19#sN'%uS&lk+O$t: د gPC)&7*[BWkNjA*8SuuDp&selM\:3#ӤVDm\ 7QUuwcD4fY9MܧYs٬Kq5ՈLa"Aeխ9;5 ڭYDtv߿~:ЦN3[k&bdDe dyh 6eC[[x.JF/Wʳ?@p&DD;'Wj3)8\JΞ W+`+X",l 8M[lw#U5lvYwHm{ [nw^#3۶Ҟ_VT `xzh0qԝEr ?7H$!*ﺰɜ ey|~1"Ib 9>8L&>##|{[߆{$|dSM \4ˌ)c1!Uޤ)O bJP/Vӵa,̚\Qf8EL1-A(*&umukuTkt,Z煥4U ~'d۶Bmfj}@Dfo-J8Q [k۶A )3n7msRY}ogM>pћ"*k U"1F  g\\Wy|} KYXݺbd{amf*yr/^./iHLkH ES4sM[rԚ2bf'I [hv1_J Tӭe{{SC;\߹߬,HfۄԠLΚI, TJ&<勥~EujR^,מi9-sFzefD1X9<s83yD1'EQ_ fjD5'2r'D+E'v!}J`Q ͌.MԄgy$Q׆.**P keRM ʫ"KQO\fZ0Us=BUk^p 3em 8FڶVPYc Efz:fosYx0KaE`5ݽ.*1߶nf[>>lzkǜSTi}k[3"32/G f#R(vdb3Io2־t6(O⬕0}R"t& C=+JYK%#+}g寗ŵ]oUU1ɤTpT) mzOWk֡{Ƙ%y!D)"{pxQdn%5KC*j&6z[M`f[;LQi/kZI35DYoB՘§A*5}ɚ%?;XHHӆS7 L&{۾ f0cߧ8|zF]"#tIEP=e꯿mk*M% ݛ$X̔\l,a&RkP9D^THdKU{ RIf8Pm QެB)SF0s-[ҘSpMܽB1l̚^wfF,mA@kj&wm7OBsVaXkp lZQYS|fcn7zjA:QLK걷~Cֿdy^z /; kkiI0pH>Gr0ʪS_I[ZbELל$̩joNuVOePh(bZE9Ll1Gdho 3&&BB /9C[(eQ5m&7StGnw$<ӓaMuhԪ~fZB]cGNmG δ&!_Ѻ H9L~s~#PU؇ 8pӚQH[BDל$~̻ӛH(.hTXJ߽uu/-bJ|N\h;q)/~!}$.# HfE9K1129L a եfMA@/d\^-ݪ?i$d?ss !Ն$[3gA!eL8֚1"Bm)+wse_ FFVG1F0A<3:~|~vּu"Ղ8m*&On@צ@_MƄ ,ځBVyzc"L-]cRDpN82'Z04h͠DLBqB8 "B9oc|䶽 P*DTcJd#tcep*,aJ&&A9D`LMe&HYB Zk*fR("،lf}'GsEXwXS5FiSiLdж~߾m緷w3w~.d +i$Wx5Āmۦ/qvk)1c9#ewQ #t|#ȱ1<#}(;F$e_>~[ ck\ՓVX7yoM5@,L9gQ٭'O4ns^Yޞ2<-J$*Md`xWJͲЊf=1g>}RԷY[*p֠RĔOZYr٘34m, DyE8lĥ9oÚ5j"LmJ.cƙ1wYۮt8%!0 fp 40=2EEhə9DL]pf YOr!I#~8#g4!^-88[wj.uZڛZW"=c<-TZS1d(Eɭoݧik5CAm{,H*MLUMafZT %AvWE"8]xjv #l}nb$!diifRSI:T..*3a.[c433y[Q!zT9bMm6U93'eh]T!2_~ُju(LsDJ?@sf22!ڦ/S}|>nW|fZRuq+Y\࡜\mD/G$>njCUGvջd9KJt? &,#M.ш{frg%9GDy}On"0C)"3T#w?&0v9ŊLH޵o8\(s k[>>JfpSu1#8a*XwrFQ[y W=Y?W33&l??+5 Z{#[?˩j`9h⪶mM*ycJ0MR} Y}J/yQ(@ wwkoMWl:!8|0UfAwNA.YoVTLJRYifπIVÚ#(ҚX ^;IYXiY*[S!2 $.3(J!U[SP2ғ5vwqiJjk$eNflH"S" nLpk/)sLM3}I+ƈZۈZ2Wu(``'`Y7|җBYn^6FEw0CD5uiH5&MKS/LVjemuE ykϊU,Z 5(K^4YKBǺGDxHskVWMR谪:j}spњ1ǴH aZr1c5q{;cczaG\* JYEV)iEUJaJDPnūEJf.Rfdyط#ν9f7I) CM22lS @/ ~3zd&iK"{bWהY7='b5aEܬUBsODַ=HW:)bp(%T~;b, w cp9Qef ֘í(f^k̤&[lx4mU !( gfs4w7 ˛@:4NђN3V1*tL!q7N[1%&gfǿttm1/y&m{h;) apr̬xՆ]Hf>=m_&TBx1mX8'|D"2~XfMX2<RyezM-'8wUYkH3=i>lE䐣O6eY=DGw̗˥mULwȩ9QDeQM)s#L6VyՖG"oSDDZH5(Zy6D-22@Bއ9ͧW:Xr tcDP$^W#3IYz[HiDz*q4*/k#}; l""1iѕ HgaQ2Gӧ3(SA|TH~Ms 7Ĥ)u B`s/cLq(mnH~XrQS|w! ((㠄4äƬcq)U4IUgk"3c^۳('2SU&43+`oZ>M|ۮu&/zl9gOn1?^cۼ/H!ݞ1ٜ"Q xԣD<8 sLc2H^G4ưEb 7*ix5AP&*SD$=[&:uȧ,jx~`Xg"p7Uz%84Uoz~C> cNiGmuc ^U2=n7ܶ}];cNƴzm?=nTy]eFum.s3D#OP*cl&07,E z-s̴fTUy~; Yq|!O!5 wc2Q"iyyg#2}m#ܜ"{U/^=>>Vĉ!*Ęs(.~UkcDU~ ")8RS#BpmHZ>loo])23mE}Zt(0m֔)m@"фiѐK_dʌ@2(iE B}B80C\8`Qͤ4g0HŅ/m]:ammtpgnX<]D̴aDL$[\ڸ_a>^{g[c,O ջ)~n?Ŋ^* =Pp$8IsڜM;3 cmJ̥TλE|78r ;* cn+ HS6Lwϻm$d:#aM۴m9-4P82ݓE@3:w:G0" .6yBZanËpJA,g6e8pt[ߨMQ爀g*7!ÐTS+Rm_sQjql^pm}TЯͬNB@͙aE+[ w>x%{֤;L b9d滇i]mzpk=3}YWF|\Ӵiۙ"r؄O; 7ՔHφ4E ˓l@ S;cprrr!PFZBEs#}?oj]E2taAo(c)(32}1Uma ";i#It22%j:S$mEQ gRLkNQ$%dm*ӌD<0xQ47aw{uk nK6+&o-[z?m^77=a gvҷȰQ )N/u"1!k_2~I[Z`܉n=mv݄_nK$d W "ѧ./.w2sG8si6oN fGD'şٿqߍ}xtEwf i}@*ILTb&J,Q+zQCOʚJE-4 v1gDuf^WgYix|͍&eYܶ/m~\ZӆG kӒ(˺1CTU)~i1uLen~z%,2sQmX828AtEDZdmWHÙ3dB(e~_Sap`BTI[kRZfK9xY/i_/fR,ښt8]8֥8\U[3P=ҋKo`S̹MG&̣%8=[  HI `UΨ}kxz#?ٌn3#n~O֟%mᷧwnnq 8XPk(Cy-ZìUp+oGdgHև_qj#F[Dm~%*Mk&}<<!@|`Mqd^Z"#ǥfRJ10eBI9gl{#̊skc>UùW-]%2U`x>=='K]۶^aZ}kmeQc\U|^{L(1J([Uv#a8|p*ҋC4FeeNsl Upv}?OdYۥKRTjV)99[$s:z[׵ em KB$cwwݲXxp*O`F3־岅'v](k™@*.3ݩ(~uΠy7/~Lplp#7%oKywO#6/͛/<ҘHDx 2ÅHZRa",L "qT Uz(oxNOgH+'I 0ϩɲ ʘbLڿ◉w^}}16&{-@Q3 uK}#IRRQj#X{vsp `>ӉNq|^L\$j :tOss+M̬\1/- yDqeJq³U-*t pR3aX?skRqu:l6АY* œŒ=8 y.p KLG N\V .%ϱ LŦ04gg8",[5\D,5/˒u]T[ѡXUiOã)Zk"#3"Cy839wTѳeTJɇ-q*7qy#YT89'gQI ~ry ]VYzcA͢J;*MYUoLtn1H:so.ڛt&Kބk,B wKG'2Aa=2|#2L&:Qpw+N@N3 Gp(S"N_oE_Xəa.)b}*{-%q3eЄ#3%^I DC8cr$͠R2qb" ?L#_2BTj!tOLi3B#82;nOO~}=91YNsKZ%FqbYX]…=`ʈZfn>t2*>F+]#"f8™)*6=F$bqNx>.f)sq Sf&5!ӉF$ϫU!3jFd\8,+ [ctstq +80wV muu-NB$^R wξ^D3"w|ꫮ@s{$&w *Nl=)ceG'栤EF"y$~D.LeKѐqhcDвveäy;QtU ͼO27]#2$nfkqS&q8vd(Ez8w3WSCY0$|RYgxwzj (-32yAnu2Z=šḽāpGqIRBVQb>v"¼OF*Xɾś#v"B*IE􅀢̳= OJ倌cN[o{>cLfTF=""ZQ[ꡐlM eP >Xp IDAT $%<#wB ؜a,D'D36"qOdV'BT˪_LH{Qaڈ񄣺JpE?U5{Fl#3ʸ1$Oz DDry3̲2S(Z̼nwa[׵/w_?<]R2e:-d[mk#ȨhMY֥b꘳$"d0ry[(U^dsfO^a{p/pOkkDd2=[O.Z_-r8fѲ27ֈc.\kȤ֧gD%˥(#7a {Y.M.MTuDD<4| >A;Sq KLg_V1B]7if. įPޗaps"V0Gu۶*^wֱ6AQ_2s۽w@ë4,I*ʂūyv.9EU8`"^9&9YE0B$N`d]f K:([ Q "JΌE &RAP-E4"61uۄu]/szGFD7Ubn$= 13i=T3?Ld"ڴ9^G>TV`ç, k$|,zp:JO~$(R~]DҤ_<.e;Y{\79)!3ք&9IYLz:HɔqHb 2GU-EweU}AㄬR7Oa IE?˿'__ݾm>:,3afBk=2@qp婔z擘jYWLZPfAAp/nFwV̑2a8Be" b;2_31VVX[lwaD^Y9AĕT}߇zg>fVV3#PaxHσ֗"lKkMk_23#Zr/djCfxh*]B-"%,\wXLf^sxU|O%pdḋSQ"^L0Qj'HG\F{m"F"6ǃ@D &%0bdΙ (i9o*]Hs-GDzȲBABKD^Ҭf{7~{q{p[8A32ҝ"Yץ}o3(̜mdm8^˝t4I{6Vbn̶]:wSg.1C#S'(  "߲{6M&?R-s9܆%#U1jt-( EsiF#83;"J[`>I6N$GL3&1O+v^&QvPLߛK8e6D0X #¢52lrd,r$&H'nn]I"^8WQ.׋3vZV{a\B;v jíV_E,9j4fMUU;@nxAX+Ul.m ۜa)<"|fQ)T9jBSsOSxE SLp.fŧ1F ]X X#p~Z8 ,MSKV OB*A̜$fcmiuW-gו0cx]PXŝ374  BP0#^]{~؄hU`~\w߱>cF0|rIl*`2)vKh.}[}D.5(Mx5Kas_MO)JU} i̒UW@H#tF d ^A` đ/YWۃ}KxD3Kk8onJI"$L̘_g~m有g^NtnҚXXuQK:ĨA"auFW!& f8nQeDIҴS& 3r6hﱬ|5Pճ5w 3;G)ɓG^P>ʏPTۃ9i%*ry4 5@zk.~I !* KgemnGY*12CU@U֨^ɰ^-vMnnf%_v "diZ08g%P&3ץNϊJLuŔx6L5\{/g;LmnQ ۴)rϸvfmF,LIMe_sbW ]ks}S#HU`is 3Xi9Fdd_GS^IC~$>ǙuՔ^M~ 3%K%hVn~[ɟ?WK=P%WQ9 bp ` aP;@K5E{wWP1q=PE DE싟}x{nsgX/TE{&X"➶`av\*-ҙȣ*eMm .HAEg}0Y :m6mE(f#EL#(#תpr\* Dak|X{~37KK ixܟnWC՛m]oL. 66e1|l{DNs<ƕ}Ӎ.k>xrX"ԦDJJMD(e ^7>L[8 XȘv {F~aݛ/^(Ǐonv2j^!D kI*s9f:*$h0=D I"$.Ҷs=B2CeKPFPB}?O{Fݔ 9zG.T},b60a6pg؜u7-kXe#La%4Rf.‰EEdƈ򄤊F0fubJdx+IsAu:Y,k:/R63KbGY&RU㶳D\BTȎs!R[ph+wi`T:zYP$qx.E5 Y(8=@j82#CX,Hw "A(ݑIi\UrQ7u-̖z#@PۘzRvSu(*~1a gҳ8l@QcYJf+vdBUw|Jǎ>#jO>zoDGAͩ.2#c}HOw|0Ʃc2'?_/42s>9<_?5„'s]F_L'K`ҧ קXZSiDP1g_{_gOuwA<*_5c "]}/ZDNfNhMWN2`e-]"$k~[_~9F}} ͶTYR2N`ڃu.J0{v)`pk99'M$ɲsTcȡ2k 4 KR(Boؐ 4 ].TUVgnEHdG;4"9 'fi&-Z#ЁK!Nۜ ^C}bїd~ 1WƟ([)5Z3۞:Â8Da#e3<ޙ=6cD}ĿCS7r K}ΰh +ϐxe|G5V|_>oUn~M^%-"&ܖk<.]~XOnYmv'%4emBA,.p70(|A g"?@Jvo7g4QJ/~_?{>nnL4JKa,K)@`e6G6}Gaޗ~ M$U̵ܻ9YX-ܙYL}~i5z=@MdE9;a:"iE(mƲf\li-S*LťrO34ߟtKofS/Ǡ?ri[K9_&`ƴdDl{xzn5߯}tFvqz;z~բ#sx{qf˫s7&I/ԉcGq'f],x¬@Et%; LwiN 'j˥_^H }m&=3s>.~\_=y>:(rg##r,<}$.W}m*.sFaKHfmzM^g?h?rC#TO|q:F5Nj*$*4b7Lg!y%3N4ODGdz_LMؔ]G̗Q*PL}ϐ8t0uxEabd1DiI".p ^݄ 0UePppٜ9U;W+#=A0{8uۢS2LY%UctQ)HEl"ޚ1޷x6IUì["֦[kf}DW֖܄yYmJRf>MaIDuU |N-7Tim**o{_zHqtcFcRHt3trL0Knz~_o ,,LL>"Qk=g9sθ,Q1nU""Y\ 7 H܍}wOoȇ.ܯk.ׇ鱽?ߎ6:Ar]?ۆlk:sY"˵vK^ndD땰ooz޷Azq}LGf6 ]dY5c%Xws&u^.=wE&7&}t1$eC[linON`U,a7wW{!?x[E7rJqy/i{a#70ecA p2BKdQ1)!"b*ksz_/GI?U; iӬrO%O9tHxD1Sf-'9=e[Y/Nd0ʊm.kYٲ5su]*V$mmKb2D;Gf!cβL~UNCnqp:OLOw#$)">'gRV5#1y+ȠS&av1 +9˾^?/.fwVd8/`փȥff޻f6_Vc[ q`ү!KeeXh VH\uYwG>Av]LٚrM%E'H:ѵsiIٞ$=+Agޙ.*:݈y.d\ }iI WbӈB $"&ִd7-m힢V({oKcd]ĔWg{t%_{?VG_=~I^\eKC,{оz՟yYv*QYH@x6dRFc# *^4V7 L65HFƈ,2nC-LF"Fcr)UpZBF2AI 9l}Q[L1ݭ"gNf2l@4iO(ņGtfDJQ}(Q aF IDATK3TV`RF}"qOˈfPš>$"U)TYB޶֖N4'gb?`'U- ?%b(q!mR_zX<ݛAcv> O>wmF3da!'4>+;.$4!8?[dK`EWRqJ^ڣ6#¬xUV.qZ5x%aqӞ&Ѧ&}dW{gxbs[n>- NL{ۅjf,ܝb.m X 3ATmL>$2JK˺=^:;zkeDjoY4S<{\}{? 17l`y{K[}=u f6Wd[cF=AAȦl3[ 2E) ^!KTE\׵h)$AB,jUBe&ZС iBDB5-!Y32rp`&LV[Rw#H8LaS @\)jtHQc9kZ;R mN]5fwxa o%OEhTb^ %!D/KVlP 7$a`=cLT`:vL%@\[۷Ƣ 9̌on8?J9 OnƔ,>EvȤ҃9hV[(@] bb27 cyXKjd.UhL||_$(T"DTuy, ZW[~W~]/ME@Ud #:M/'r%/Ko)9s/ÜJ^;M;38mmz *އo Kg7`hUUFu;4Li,˥=F)#Y gFED܈C 7ZH3r I;3И.{_AdAF.ܸm)RwuNv,3"28Q~ rn0ae:3DTfY;PDUBwڊhi2=XB42CU-q@P+OAȨeߑFHlʍ$&! 7RNK13I p/|!| iZA 4(jcbWȣŀ83Oe]mzYby!m#ds$OFGάi/LM*/Uݹ>ZSX V233D=ib>-UEElFgfTXbLWNxO~gִ3#iGSY7/H@0nP /Au1Cev3ƛWr}loK@02½kSJ.%2%VA[^{eM,BZdALihv])骪r-oTN 4Y{9!Ծa}QwԐt"7z{ a6mk|1] ?\f>-9,TF&h[s"EV= ?13-)Jc UJQj M&ʐ|gӧ9^ץd [-< aBPԦ(1D=apSLB 8ߵ^Y#bNyaV޽_4B,?,sγLr5U:iUFG%={,+H &2 &H!P&P5G'JeC@F$#'L)Ǻ.>`gBRd-Uo23U - /ԉs~2; BX~7Dtsn/9q(=&fdR&GҦIc 3ϟv)**d1*׎U}Rg.k_( yg.-_gIDwyedŸ+~*߉(:.!ZG-5YʤR%2jcwQ ܛ#%3)T%|&ޅ.ĖnJ5LўϷ?+s<)qs [2A٤Aygu|z3&j$P'NaZL"P%!DkWwcJVe)Duۇǟas⏙rI@ Je*vX-"M[Eè̴rq-˺mwL9{_1ed9#qTRP fQRQ~" g =lj@ ;5/q~&MrtLSbBƴY)&.\DJCY`nyx>|aȴgFGGo|yj4%drǕPܵ9AT2q4~(ͮmƶ?ud<Èn0! @W -},ǻ\ QB L% ehd"A2%Y8$ pTɚLI.$m %.~==b*wa) A̪3=͖WIOC<,4,HpS[[Z߇7Vc~X6VϫwFN5FdҜƈ*BA,m eoB `V3gl_zl'f 13}Á7F=, ,&%l>o~|>K{j ڕ_@P `fUFIݒ5F P"C*D[ KmX1FL'&Ur RPAxfW҄.LyyEM=9tT[3D&x;fs}i' 6''EX/o 7pCNp11XZTΓ 81)8?gsLsO 1SDW@>U“}u]=HB5bY ww(a0E/6N{V |As1Ҁ_ʉWJ8"Q 6M9ST1e9KdGx /g֧BA {w"M99no>}deY"Ҥo.Ec{.FD:epq~ƿI}?"SE7CFf NBv.23E߶&&LDT;ȖHKWii[0,'k;.$Idʴ E8(m3YfHb#mSz%YA#҅mDDs7oj6$!@#ãԬ*`p8sgV~wۦM#PiOz9nTfc Ȱ 97V4*c9iƙYSDd0%*l̲oW>Z >sKStm:ܖ3THEjjݻ(erj2V;d!K>D+TIGY}o@vHeHQ/QJOKOZx dDǖ3Ȫ(OϡO \RE*Z+IE-y̔a}j3PA^6:b^'*uSIĥKg4ÿ($D4A$=~JZfY ~^?o).r蟵-]ٮ>'z^YfN"@z0ER`ǣϜ? 30} 6Fd%# B !@ш{<~xEVGj}i]yA^5cFHWЈ B?c H(rBcV x`D#F,kB͉KG9g6 Cmߞҷ݇#IH |GRDΚ2羛ݑ!$i|/>{ݐC$ X3,Kf+S`̼y4cW/sw7f΢2Qt}faaOۇOs[-01;4 MnqQQ=< 0Orӛ3jƒQ p$r+MDY[/ l wn`TH0'"`#<6FKr*#iT[ZU, ^Į8i(8"a`pTa娧huEUY"@"{,~kgkY? 10>jyDAuPkג8BZSg-2t .}bDfsTBI򟼔D`j}q} mx,-\4ѕ֑w&A&Zk $3tfMƞ2\ߓ||Z_"$gQdNT.H Ѯ7?wx `.q 6FDP#\UV[׶0P.] '$gaK1go~seuY## <ǰ& # ;x`ꜣAJgt5R0Kl,BD*=Z 2|aErJuDd}C\`5ѣ*CU@J|o cLgs?tC/%:ͬ'QBen'5 iG_Ӟ9#A(T61O;1< LbM"C] $puB.`rSE3#BV 4GPd2߁>F.}Gq0D?k~w74nL (.} ),}>.?vص 4nBkӹ\{]}WoN˺$:m:N>F 'knb@Xڒ. o+&1feZ5#bxk<ヘ99e{@Vt01Yc~Q\z~CDHu.Lzu t22c0O@F$R z*5Bh{D]+9RD.D bt8(pNv}:)> 4":j5g.@UՖn5Q,M @9l9ZmY$@N\|S˶Q㬏O:ZTuAy0_)Ad{k4d CUoKFUAyIqNF$scMv9z~^}?fr$#M.5FDD*`N'ԼZ`cEqQre# )Ypۅ @O)AH!bMgDln>SLxElxzKKR=vZ 흃(/H U@6ȋrK\ھfummSMgz[>\iIBia &D: !gKEL@<)e.uAXG$;c@dMPwUv7fkfYD-x BL#J(Mg6c*3e:pL4i11UhRXe/6E9<JRx/Ik~Y/t71T"FFP"#>G<'aDZSkBq2rD$Ow%n(LZ7( lviOϟa?JuwR  LD iϱPLąo:RDGtf9C|*KsOL#'2<@TDa T2<dfXE"#Tx8(/U)/ڍw\XIHO+I_{~ǃZyﻟzW/opTZ[%k ,yֹRjNȍN Fkx<0dD< QbV^1Yue[%yįqU1GKcLn0$TYYt{xk٫0ߛg0V혒yun31$asCbMuV+Ck@LB$byU``F9h2@ $72Wb|zhd9d)QmNHjUY"hJʬ*AI\ɠZ2kjDCf"kQbt4׹0y.Tbӱ̊tRx94(=8Ԧ< gvmBU7lAҢģIpjZjՊj:(SjE͓REtFb(@ bDZd,M"DV֨TCMuqd!xmmn=y[T0h>}-j"Uf&dVIPisUejƼT[#%}244R<2ݠ4/~cnA3ra[ڪ7+ҠXU)}9XvLDyc0 DXR"raNyڕi:̗͇s:l29dfRAC9%|$*HcV+B=IXŝ4\{86$tQ@Es@nnp"2>T뱨Z#Zp[zV_dGy԰PmkGE]$qQz@kRhaDˈ` D'X{_ 6p\fY fbFWZlj̒F"RE5.׍@\Kx ZPwok9bjenhhW}fH >\Yg=kmѲV†2dG *Ύ:1'b|a Zye|'?LV uLĉjefNHJC|Fa$L՟b;7@fǝZ.؉4RqqM%Sb''4:{fZjeiCWͳzY-DΜdݪV.FuDC5u^Sԋ=MIy "fSfU#ӄnwvC "wgha*w.Lv'#\Pj(c7ɏ]fQR1 n=9R.LÐaO*ڝB1FmoP7QsqDÂmJk5T s`΀;x)lIm+ _;1FծtژwHZ /Mс1_tj"c!GqQzP}W6 zX󥢽[<8"p"-ہot\KqyvfyAnx}w0<#OOYd7OSɭTRs'HEPJIKUW"e&\$%b ƃDVtr:Zp2 yնBh5!,FGieE\%Wkx%\}x[ܹJ­;/XuaY~!Xܧ+/70ʃ­QLSkhnNvtxr14"qN", ωm>ԍG]/YARLmCZ@+RTꑈRM)̢YǃkAfra]Ne@H2K9Ov9Jr{w8*w4H>I:;/O]T{{ 6 ꇩâŭ;du( adqv /Ewc0RF(6bogiK!r,a57]4ö{ѓ/E~m VZ i{0uŨ5Uk] V շE!)HjMVB0,8he{6qϢɮXv]\L:hjЫTcM_^n`{_G$n㷃+z8CBXlLͧxB-+\ ̝TʑjO0jIff$B2r$aiwnGߝ zDBqSQ)|yyr]sT),2 g"kydDYqw\/= F#ʲ]]sǔyɝc!ȻyGGkp2.9MWʳ9Biَ2 ABE ha*DZG.gXq) 9c+V~ņ8.TQb6oQz+t-7mI*8U|dq2s0 37`+"ePp;u8B棖 qwZVUUo%+uP[jbg+!jdy7 5Z=@.y- 4[־ A1>nnPF|Ah^8>-::(PQ(+X'Qjp+r{zN\) r}o/+L};+͕VL|7%d]+&Ƭ2}xUNzwdžFڌT=Q?mǑ  D6; > "ٴ*bUIk~#RAGӻn4CgIg)l8 ĝk-!Ztf)p3deu1սg`HdNm`Vj^ͪUѢ0h5=<"Ta)1Aث|7d='=Y9/j,2raPBȝʱ$ \j54PhDa@V_bl:fRC0ţ .lAqxa: ']%-TzihUCc38ڈsn~˛Сg7ϝ(uݺ[ڶB y{_j^{p9<#ޢR3 j<]յDlK5*w$v4F$)-N%R14T"sWF+$ N)DBT/)(\Mk!aG40+8J E=R,gaVtGӽi nыjLN䬳ldOU5U7WrR&Ff얲X(gN9sɚ(ߨ*:wwi:< M"̴(L̻3TMg:qphUҌ`d ?`7ªYl6D4.ago^GDbDx߬ZY :&usՉvDGD/,deQ߁-K:->("+Ujߦi/ƍVv!?įq&~nC6[ȲUt~k a69XI">)Vu7ɔhGI+LNVh< C2#7V́8fpy7_ ^=<QRU}(V<]b02T]tv>X6+5qV3· Jjjy btʹYoX-\p.nbŌBnP'cdt,tRQ 0*0vԨ=zI57 $8d<5$sTjMImosWE;ePtͲD."Lb'&# Gqs J'H #)P F"RrTpΤj²K2 2GN>fx ֢,*,ۙ(%&"R"v1' [:^Lryg?v&B.2`ҁl6]T0=];jaG1su"$At2x6-󡌻P9+j,}[s^}hZ$AR{fΚ0۠/)C CJ-h.[f/z<;9cJ+o)!?̭bj!R;qHt]0LUb6 [i/2NS0C3>k)t`SpC]r[Bg| ]U%iYn?b7|\fA^7ncrnv8DM[PnWŬ?VzYwi] 5*1_pO`UpCVQsq%3$^|p|nsg̽C1CѢ,I@@<ݍsvɉ(1t9'\]磟E?DH/~>&dIvySm!BifFjVUM5|}CªZ.C!{T ], @n{(Yѕ^;*jnt~:hс:37Z Qy<~JN2WqDER2Q/!)F&f+&dvvVԅH4OvjAr} q8 0s: 3 3PK/}g6O*)rGrwI<ϦN IDAT %6R{*K;IedB"7|$vmG@$&Sw;Rq52,A#U*!wplj-ߐ8;*INS݋$C pxS#z8 Q5vo!]Xk9["[.D$I$KUNb"v0>C/l9l͵ J|t)tiQaL4ONɞf+P|VXՐsҵҦ fZh!eP0p{qsn w۲P,жBU:Vm(~iBȯB(HAgV]3^ય3nn ɠ$Ds18JPF5egjP;y!x< R$9c68X P:č;;yWD<]Ǎ0=ǽ`.fsd-FL8l27<9{:9!I)V3)0L`Uj)e4BAH2ִX@InĮ (nJR7ͥf]?S %!3x˾7CFh##cEP.]%fFZ= ?P/< fS0`o<^}w\&>^,UG.4jCZ-4ƖbH`yֻ*]Ѯ}0>JW)2~l[LlԣMQ{o-djZ'DpFݪ7G;{kHWWjpXR]LjRs#o%ꌜz(d_cRknP sS?{ŠB VuRNYB F` Gˬx  1?KiF0a<(zd6}r*4ۑFBzXDݟ|f$8AHD& Ȓ]lGd%CQl@| yNYds)7P"iDS\He_Q&ՠZ]vuw0+4\1B[fǦ6d"qmM;>ӍlM%#oDhMU h!vz, -V%ߗ/W:y ј{{F-B;c%WnlQ,T7*mPoAD,Fz53̜U)@ Sx 6&6t1W3 %ݕ,[d .d@[Q <*ܴWn6{UJ8qV0nBaqi@fޱKfRIKuZ ѴNѬ& ZQ+b3%: =4U'RhuUo)(h|y2zv  S⴯K[n@:/ծRӐ3mVܭ"& CWt}R0Bܸ$px-3짮=0- :SjZ{5)Z +"Mu!Vkm%lldt"XǾPvW<:/ܯp^َA%zQR~4.o.l^?X mIkw%<]B*@R)iZI/yȵT6t3.6}PAܝ\6l\p}QW4ⶇñr5grqhi"!JՈ]UYaywKVRLT% 8٘ CR* #SN娍x݇̔T/ATU(^P-]`f4N61$SrdTV,%Gj3H3AȔ!. BNVSJHСҗศ?Sutէ;oX""oy ,GUlPw0W($ȠHRa''PJ6.8QK2EEevY&zѭJV$[2V4F7ӸQ Pw.M-;ojʢAPx|~.^OTNwOwَTVw/ Rv y/ͤΣ"Y@<~hY!fƗEnfqE?w\AW*.[g}ƹӶ -+-x=/OOoo|>sOco5ݿg{w"6fpYA VbP2V~L$2sɊ ](kUJ jF ,P-$^#-@DbRaGIRkeqv'$¦ZUiiyZ̴>\znn Dd% G1"}IK{OOe_6}/_ċo37?A[;%bj1G5WD©@hl+#wL8$㭩SM9.*WG(,FδxE/l3,%`--oXPV; .j>dWԇ&0 <1;?%^Lhּ ̯|_J[V-s_tۅ>4Ggƿ8v,j *Nw/9_@G][#Yxe6'qBaj;c$J-{k~wwߟi?p8~pyր|m*^t>"DH4C `Sm,L~d|wZLzZ UtILF6kP qB%j<iyF5u \9!e6WbìrϡZfQy ;9p(\1EKLRJl,9'fPDQ O]uw<{^wi߹o?`$u8=vj֌YFI ON/?eGOµ.<u SoJEb ;+շ~jy-}GOݦnXL _<=LBTG0D2Z Z_HX?B}?Exx;nElGN)L)KTyDRܭ5Ͻ XO>?#SHB~a_[l(nʍ #}Ͽuإb&`ӏ|;nSUs]фУ@f.$k\rF &/#/q@ HiItmgD0&h5s oIJ/=g_57G˔h{a(t}5;G_|p.ƧO_ -.6og;4]͘q[ i͊? o?DO~'_C?}|~oo?_oҟG~\=T 9ER U]gutǞ2CN9[+^|>8PݝݳJplPXX| <Κ$tm4唙% ;K '@Vk`v7B2RJujJHZaQݯ%w]xjW\{x׳}g;Mi1p]2L= uʙԺ#Ӧ7Z_arJ'OTkA-fO~˛]:٤W][CVC]M@XL$xvͷO2hC1&Ixg -Da`S)`Y8?G"/{k~V,=ٻ:1GZ᪮X fxCfj\Tu8g[x>O;۳p Բ%{w}9ů[ sEQr5~?WFOl:w[ժ}_)A:r5Vks.:NXGnO_/w|w~w|ok0ʺKf05+ɴ'L {/+ekH؍=ï~w>ZP\^Jf(Y"_O5yvREXܭN3!L hpTOC]A\ɇ1QC*9sĂtɞVjq\6¿|&|h CÓw''LJ|~䎔?ʙǓ`Zi-6aEmW5zdf+fa$n7vCb;SGwOj?Ng{l)?ц B@w|k2O2{Q?Uc<}ɵKfer(g6d`duY".]zƙݶʆٴ9cؑ 0NG1xHCKN2|vzgnn&ftw~Dnxs%>P"NbY4f+Aqۑ@kXjWF,\B0yIwDpYw}'~{H0|'\LF-tmz4`@K}?|Vx=klV_w9ʋKO1 4rϹ a̟_{O|'ܯ_v=Hrӕ΅lUӌ>_ZVw%?Nx|z\[5o,ǶNt>ߜjx!  :ko=gϞmnw}0 ./_{u{ι׏8 h(40^T 6 ԉuCيJJ5iumEԊQi >iV%դdyB'1;^BUTv>BB]_s=9g. ~/Ï}`0+ 1n0iWeaoEQ7qpDClˆ3k Jaϗ"/`y357xD js)a)RuЅ"jҐ ]LϋV) &|L p=L{l Z@JC2!CZ8)kܫB M:\bR9X!ꚎT O[&nuSfQtIDAT2clijtd{@o j:S`D'E-&V?pO?]UsvJGj098fn;U/*^HIK7zh)HX,&z{[] nྉAfr=fexJWOӠ$=czGZLZ#ÒbˀWɜ~F0[k_b\@k'uwM+o\F@c0ۂ7 ok33٠ ݀76{ @ҟ(fS:f,V>"Ox.2 Pl20( &TBɢ \hI5%^ߒ~qq({3qfzJw]dȣFеS9*k,fWrڠ t`kxŘ*]wu3\nUΧE$ZN4?C ~kV?*cҺ/˷p@M+uyS_5${ oww¡&8꺢\Ce00 00;p0; |vC*q)z=;q212Q&я_k%|Ѓ @)&`W1l8c G-G髴Wtf]Dof-\ɀY&T@W`T0Lj.58ր[4ڂߏ_~/WcJx%ޛ'@^+G:  _ yv9\æ6ŋ'bx{ :xZq88M?1itE.Xo(1%xj |pÒҘXwY Px8#V<|? uS]ZBH:Uu30*23ؠZaF?~syq:&#kCQ`QKxX5ԃiȟ`h@>g k 7VY)D"N zbhDU3{7NaQpÃ_żI<E`Vgw[Hb;FuEhvk 5<>lbLf?cQӴ ,Ά֏5+obj:C23p`atŬF'!rxd2SnE.a 5BH%D5BH\#$5BHI5BB !$PB !$PB !$PB !$>2t(ܱ1U#_YH7?xLu$u0]0U/4M| .<3lYxsWdVVV}}}AA(YYYږ… mmm3U+4Mdo˗ a" |Ϟ=Y/\ 75ӹs}Eȑ#q,&&o$M6544̙3nǻCJKKUUϏwiwAJi^>B)(ڎ;ݻ}xMy򝝝qk 9sիϝ;`#TUUSKUUUq+݇qZbŪUjjj2'`nrٲeDvB8NgEV >#1?Ѿ l۶m˖-%%%w6]vڵf͚~С[0%nܸ1Yf| 6tww*50pnwX`Տs*5s1`X4xb2kdCC !Ɇrl(!!DIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot21.png0000644000175000017500000010625314717152071030334 0ustar00hanshansPNG  IHDR6WsBITO IDATxy|ŝ?OUw=Ҍ}Z2؀@l.&l6&ln{r쓐@& ` p)|ȶdK>dY}>~%Klq 35m;o A. } |>TU1[#_[o 6l< B{=9O$[lpח g,ASeeW^z ݻlq_oܜoۄ[>Mпo%k_{W_ o{ĉm۶AUUsss{{{~cǎۍ7ޘzꖖuwym ڝwy]wT*n\^zW^? ='SK_R45,id3*++)uuu///?qGۗǟc,777Ϝ9lkB,v`:\u08wg?93ga^{?. [nrm޼9###33'5kn馱.,,TU sY|O|0=|T*uA3z ,8|,_?~-'?9zy ~JiEE-blWvnᦛnZbń;o؄̘1^>3Vu(pw}wTVVa΍7~ _[bم7BTU}7+**t] ]]]o|yyy^w۶m? <φ ~.l zsUU+VڵkTe.r~Ϟ=ӸVbq#ȏҏ|#M)AŮ]!>@ccﯮ6---]jUaaa$9d2~r3nx6NCə7o^,[|jI_lك>o߾}eeeu]a蘭e0(ٳgc$E#; }=Cw ?>88 ''gѢE_~ݻb&=ŋ9焐y7oذf˗755}߸qcQQQ4'>1s{].htI뮛ol1K/Oee]n_OX,@mnfsG vmf('D}{y3AgǏ߲e 3xN룩Ƙ$IRd @R:6!iӦ|+?o|o˖-w}i=+**}Ѯ^{m )v۪UKIRO81vu-^xls+444mڵDZZZ*bՅBlr[[[q7A.̞=;G"9SJO<~ pq#WOgZA."d;A=o١ 0 s$+ bvFoA>xƇnp.pIx # %BtAK 7. ]{m׻w%[uo7gA0@[u^~8'GiͿ.3FxviC~ -wù "|/<sd7mA zR }aㇸ2ҲIQ$it*7>Y-npW uIZOB ӌp@F`9@\|0 s 9$k0k19 »a\]&+?-.f77& HS,dorg κ@ŧŝX=)i'hɉΘ"2o2g6DZP~{ t1Pm @Ax8^)5@:wIo}X0͜MǧddPٹSNz 0R)Sgn-0&SiN3!ևأk#{>_]TCpcz 5!Ё(^@iJ7Z߉$G<_d (T1vUdEN8'LY ԀC` 3З܃۾ѱkqh R#tb׷#nļÕ5x|/xvΟbwL4A;Gu rf~$ s ?G DZkAeHL<se82%I8_#ٗg# CL(`TÐ4.6)s-AOz?/Y(Yys rw^@5K0 *6i׏ȑ_~L; jwŏv!d_G0tСBt!4&`Id3@) QL/tQCvٽj=8}?w@HsO2[}sP 6}'Дy3@ɭ Tow'o/рYw"ԇ H.;܊ OUțhx6;l9pYԮŠO "Y,p OɸiiHK[A6Ig)*W4Ac}7t1 lx˧ w,b$xt O sQ~7?ȼKPې {#>^w.Z % м?}WA&dVꐟb\ia\}AX`76Yzei`@>Em|92h4 sΙ t2RnYaɌ|@}$o.- \ ,"vR,V3#һ{gt޿ vH]! g1@>yAK A." \"D@AD.p]! %BtAK  ||=DhjOʄNȹ';IdƷ-x&?hMKt>fw.H.^&UvAd$;$;$$@vBvnJNR@l : L#@k.&\IrznP5畔(d,$ d'ȅ'WMe  !`dkm"%ွ>UAdH/`s#ԏX0Z:;™ B0 [,2tݍ(n ?w>F2W|8j̻?uPUDG_pzѲ3W@d z'qVc+<-.{X1WD ڗJF7_P[ˮYy CqHU^ϋ┟~Pgvظ@i^ﯾ`Pt.qb\>B"cs5Yyj$4k' tA"#Du!,Y ļ; 0P0TBo<>BK(ʗ g89pi9SdR {zfI"8 A=oC q8 }b*C*o% 8ݑntP 9 o>3\>83b+/{'Ӗܕí^™.7 <ȫn dvHv^x9m|]zЇg>Ak_2V esn9UCWJ[@6Tlߎï2PA?NDG5$+f, 2S0ЍBp#8H6HnA?"  VP{Chʼn}"¥}KoNV'f] n v:0sP !Ѓ s 9UG!Tcpp'fCW98  :0p LB$ =ӄU>ҡơ*= O[<2q6y ϛ˽W`$({tMzW_e$Z#dlF`GH=mڴ]_c;co-!5.+̀Ã* !>9`CB@Af |C1̽yI8x U*| YA n s .X B2ρH!d 0cȟ P TIAȏn\zS;̀DZ&n8ȹ<`JBD,=El$*8j䯮asy_%p{IK-ϟY\gI3t74IRQd_#%mKB~c3K:*V_=x4x9#-"Ŋ +P,8Q#( Jʮ;'Y yܔ̊ YW[uι81 (E0pivd 2o a @̊ZE!E!xJ`h }`6pc EN碳;$4H$@={#AtqI`t ]prLNO@b|U-zE 2/V#m'&S 2}hN>ohJYkHK2h6^%)H~ 2] :xC`EPA*g:H !B4h7Rqh*aXp{UK:VX  YB! Bf`u70@Z4+謃;mrKЍJc31 Vަ~BdLɝFOBG>z|0FG W8H4X*@ \(0@U1Hx'AaLu0&MEF{6mR!AD %BtAK00e֭6Y \Sd]vӕ&#$Q )0k`0nٙhDfz܎@,j,'?JXղɨjqU**/SbsZ/wAdur{]`tڹsC`(><JOKsv{n#::[p&d,Jwv)bկOcds;P"1Y@'`DKѨrux X^QdqI cO*̪TţIErQUzd TAu]ӴrcLUUS!Tj-Rjnqa恆!2EDeZ둎=/ OQ: j$KRn(EC!R4|8`錫o^*ΜYUU7G(gϞzMnT*5k,R]9YxjoιU)===jt:ovJ$If\$Iunsx& JѣG%I핕aȲ k.ϧi%B AxI_.D|bN{NbDV748 2|n+0̗ v[ZHsg3TWW/]n:~xccŋm6EQDL5iFb`(,޽{pp7ljjr:? '̟wu%4#7&UMLe¡Pt([D`0 4JyDW$<;Ir9fcv'|0,\s\*馛瞚]D"رcV\lٲ|36mX,wyW\zUVuttzw/YۺuwXAAANNNzzmfXzzzZ[[biv5הvtt !{J7E@w8i޴p(Xw*F"q*S*`jڮ _K fQyխW,XS]2>2Jec <13nZyNby?ϻn3{no vs< ΣM_-n=n{ҥtGѕ+W\.C#  l)j@ oFA4LXvxva/vves8.ש暟U.Pˑ[{#i,/?˄UDfƍ=mF97nLKK16mΝ;>|;v8tPyy믿^SS_o sp8 1 !oSO\2_UUUUUUu=L2Ƃ c| xٳgitSgkf5,),9=5w٥;+:[ܲͲ7LRi}?/Њƞ8eWq#E !d2 ȰDsp8ۻ,YbXdMMMeeeaa VuΜ9fc2FfFX,v. IDATСٳg|P(dZ)xrJ,K*:vXAAAqqq$1FBf3Syyyw9s2+ͺY8e f՜V 7C} W+Ur9>!!MOm=g,?8W4辆҂-qEd:, !f6f4s.Ie10̲EfۂyY8Zh^&[̣ѷF圛hnQhn˲lhļc {Ҧp8\UUe7OV9w<~#­=l l˒d[dE-Q"q~z.E08dV 3t6k8u8doQ6cL(3ZQ>[s09皦n [`&hx|Ƙ/я>!. so[8k?B;H !*,Ps0 ]gP.F 4KcS<Aceee5{d)Jޮ#.׀$Y9Pb>Gep 88fWuPpMlXV7{2lf:żi͓]#̾M W D"5N=TRKsrE%B @$B),7{Y1p0 $jwDG1\"HEEŬYF 1Rc?}e&͞achԬ}4w-Y12 c͔ҴE%!~?++KtA/`0t:N{ClvEuHeR(%眘qBE 39eYXi"j8?o(۷o߹s088XXX(9vWhά9Fa .(--d2YRRb>\n9KUU࠮'===[ַ~{ҥyy9#pq =4b:t jPI `RZRSjZJTUSSZRգT$Lh<&ñd4 CX(r:]탁??PJC磔^ZQmݺN^Gۿ?dzꖖt S__ؘsȑzպm6rرH$bVAxp322JJJqҔ !h2RŪK܀&qB J,I8D%J 隦k)9HM8:EƘf;yY^UUezWTT3K5͞YzzzGoo/缳SQ]Νi&m6Z2늢vD&]ѻH$8D'Ѱ?MPx( 2]cbQh}hJd v yf-Ul.[2-c,77̚5m``pHz8FE<Ommmss륔Q>|x`0##fnO:h"IGzzz$ijj✗Y,G_-pLV(IrDb4ce<bAsVŨD"Z5.BSIJ}Y]Y,#E(Gg3+ׯ7G񌖦I}i9c %I2Gn6b~Y mA([',w/eIB1CIs]3*}#%tJEJ$ReJ <OY)M1;O&,[H54ی^{hAg/Jf7\)*qJ\=mL((WOOH2"7qv!?{(œ&L7bͦo'5sNhA Sq5 ;zEe>]皡,TJ?65 ;ݩTMc` ǒ;i6}8 s΀sZ DaJ(EV,fR@-fKF2!E&q]3ɸ͂ =tMS5M}7HAs% \"D@ADLrx )pqrB){w> 4+kN]ɏA.".p]1EʅB5r`sfsNF2 }g* LjN O0-@(1Trz'>p{i|r Xԉ55AM)ᮺCSj0-Pk?;g`0:vq@5WZk M 5  1E%u,tǑВHik~ h< }aiRFϰQtۑ\$޿xȑ'f-6D 3CQB=3]y,tP'W[:8qʜ4=bI܄PnM;|$c[fW%wh*h"7<)GCptX|— 0uahN8 h8u%:@PUejZE!hc뚦M9J0CQ IUTXKiMgEJ+|liJm4L4NX݃-߽Lׄ(RSSsAM̙s 7R9s Ls8sm'$Ax|B(pɘK0د3k:I7-r)VǒO"NEZNCY Skz" 焐ڸqcIIIqq$I'Oܵka===_Eݹsg$1]mmm}}$I,=zt޽f7ӳsNUU:s \ mޣ>uxeqq۩tD{:_;D?W\0ӹFʟ`]@?!xGimm=vX}}?9OOOW'X,9'X 6 رcǎ'Odp8| E ;v*J z2mK2EEifdJK*r b]{ܴ}Kon~T½P7hPO\97"kIѨG?rrssgΜc}#?~<߾}u](JCCç?d2R\\$Ow(ȍ-X"|_fvV̊r{p ?w_1'O_>=@mP/q fF|.vca}#inn޲e<97,s%Iu<\$ι,999/3g Ø9sf{{bYhQaaE^H p" <~jonf&uS&P}졯|oՕ^Ɠ?-:{DVvx@iPzY2'˜b!wTѣ۶m/nݺxp""Es^RR2k,6~dD+?O Bw>tY%AtJ$KL=ʏ[_޾~$T\Lدz"BH8 "<--ѣW]umiiYzu{{ÇWZnpwmۗ/_JmVRRmX8?--СC˖- p") Yz ,ʖ/O!A)8C ?Y{;=yY&x'1ڽ@;I PXmrI^)K QJ.3c̫0(RM̼ !Dusvo>z <6ͦv(8PB1͙3g) 2=ݮ':;gUͫV{h+Cv?V)!tޛ =iСFI4y7t]WU6 Lؠ94m4nn< E坩mW9dI]d링t*aBM< JnXv_I' a0Ч,I_a=AsLuf eW"A+//t#EEn sr,`w`=I/_61O=Ϝ̭HY>}-*6IPj&R(gAv#H#&/sA.fx<>444~=tC1tI&rZ9nsj(o  ;!HYfL4 #;;6 ]63 Z[lX,ҭ[b۷\/fL+bZ'O644R۷Bg}1m6]Eڷo9 EsU^^>S:L#X 8P_7@Cni׫Oo:QR_?esE/ ߽6,E"* NϥiW_=44tȑF <Ouu_3fhޞH$̴$I]]]/fٳdDfΜ9wP(b֭[?G \ͣ%}n,Vk"7qI_} _lnFnna_9֍/1g(pqq>~EJmV^vڗ^z)Uy󺺺4M[ti{{3:t7 WnFAA>T*eND^ifhMj[le pɘYzQt: H's %Gv^5窢™{Ӄɤҧ>6oWk}X288$bJinn]cs xjkk<OUUU}}}ff !fɜEUU0c;pѣG͛gFfff+**Zxݻ48 \&)*Jލw@lb`REIabhkWOg:Jˎĕ94]KA&ul/-S9}ƄE}962z02pT/ p院8יPU-7Iqx;@ H2ojL)Qڙfc~O%N)6ëYh8ht>us3^^`~"Dip`eMKS ~xP5@QG4`.4D@%>n2^I/_^QQ?qxxokjj222, bEɾlN/ 7/7pvZe %7[\0kOs@ss&p*kЍL#2`|47IdXw}С7~_ P*F? 2&s@(jvayiwgX$FS9c_o5x6zB&z6L`SXid0a 1F)_s5k֬Z;w\~ӻ>)F>3z{^+۬6k[WʌteNFucIVuTuʸrͯbm;#=tsh$zC!>pR:00"33sںw+4JM |yiƘ$ISV@lD4evb8;kN'ޢ} O^~<843FwZ0fp,5ebeggfs. ?!N BUUUV|cIwH(e ]=28,#%s9zegfmݾ<&n/4a0OOK?oଣDcF` u0A:Ƙa3‚H"5YT9EZTVJH=9뺆V,ȗtnf9lGZ[ ':F&A&4 €+]=I9)O,ƛy`ȑoaYA폛wgK%B0O0XgM8ڂQ.BH"H&gOH4U(DcVlt+ [7m]x?7~{޽x^0F+ 5ҡ:UU-[vĉYfegg-Rs::{l33:1!DӴݻw'IEQ,YnޗD"o~VUU}A.B`0xb-*vWm9K RnH=.3;դj勖7僇 }]aY,fY{JRYR.y|Uչ - IDATt3ϐ@H$L2\VשzUp}k'zZkmJւ 2H@2ə=BHuXߏ|N^{O䷟gص뮳Zv2 /Kx`4=(mmmIIIL5M3Mo-))Yxqggg^%$$X,xv;o~p>vr)ybCǙJ2C6r9=B6wr:jraSo-ywο޲*A8 G P$\rMӮzEQZ[[{{{Aعs,ˢ(ر#o۶tڵ+#YaUUU麾gϞ@ ={ Ðec߾}#|`Qcǎ'CǓx)\H BRIsj'9ɵ}ErrMaѯNC \@֭ۘy5b$ 6%t]_hQ{{{ii0uT˵k׮ޱcnܸq…`02 >}7PU[n)))9sfrrrcc-,,x<@  mܸ.ل\H!` hkxA 隬X^:rQs<.ҙC]'8afttWnr릡1$I͛7\Ey޾>bzaa!XYf566]qH9jԨkѢE̐xmڴ={Kpp82ä^oJH^N7)&=)f4 R );>ya?i1ww8i[a-C[Au$/'QZBĉ,@ pq] x'X+[oZt-bf[[ѣGEQdbMپ};twaBH B!]CP___mmO?]QQn-kGEQQ5kְE$)//7 'r8_No}2ӏVc˾Ϳ @ǍvffMMGAnjRoaFt(J՚p]wN IRggᆱ(ƍ`ՑHDMƌꫯ666G]f_| ppnZvr]cG40TUmjjںuj-..nhhXzK/x!nz! ,())azCCÌ3~{0y`0tsʰ`A-MOOu}Ң<h'p J YP{W5rw|[G=l8k+++[noܱc{311+xGpz˖-[vٶJ\Ӵ_wlt:A B?pBB Lu];yd ذaÕW^zRRR4=pĉgΜYVVt:V%Kƍ}!;BN M)@`ʕ֯_z4Y l1cL:U$6Z}}};vXxj=tiiz<^.P___SSӥh _He@.ȷM5zݪ% K8v"`151_zG߸fryWq\xS]H`0ht]w8j&M ~dۣ(]Y3?0zN<)BZZ~1{w9o6N>} .dhtƌ<o /,ZHQ_~y޼y,۰e׍u4p2i~衇LlhhسgOo|h0 b~7[?Lv:>hjj*p> =Obbf#rʲ, ZU_OʂE{{|O -wu `#F ʙ A'x}Ysekfbi5^VV6}tM|>ٳQ̬fvwP(3LSSSAb_>(1G ;tPNN뚦7 p>PJG(]r?(r4e.$IJ:eY J 8 1A ?[k>q)ֿ|y^/!d*1uuu0qĴ4BHMMݻ.\DltG HIIA|UV\}՚Λ7/..b@[[[RR,ˑHcĉ:tW_)S$&&ӧOggg ?ӱ0z{{333 !MMM(677޽{ƌNRr,Kssѣ{zz.]Jnjjf۷ooii;%Ibb2zhD"gԨQ'OYd+άQ`3Ă <,<6g񱣄_W7tSBpQf2_^sB)eG9;Plr&g v62vlA?49c|)SXX(jjsh:mR՗}ZVQRJ&@V$I(Q7@PVbUe-Rc:cPIo);bGccЋfty͡uƎ.{p8S4MFȦ(RBzT3%k<;0 Y4 `@S,r0[?{קS|p(FAmrrrx=ς2qD~#Mڪ =D, UפAH QNHJJuJQDG¦EQs7GcΪ s_\5b#cϑ}YawqKD"qqqpT!$)úRA#$}}aM) ,5Unm0D #GjP{n0DQ\vM<9pnNMM|aÆX}Lfdh1dHp^YO8[K_n]]]]pIصki` X"?_C[oݺ5VL[,K| 9uTUUU`3B3!HvD#fMIq iGmOחlzTLJt% zw~B[zak+))a,0P(YrwwwccEfϞ]\\,bggg}}=vN:.DNQI )JaQ(T(>EX8qbԩǏwhevzz:`qcuzOOϜ9sy'$$8μ/55inxy! zzz-Ku%׷ϟ??v`l,&E X:e[[!|.lϹylX%%٨XIH RXfDUh;F{dW.";1v[g\͛UjHԭV;FrDĹ;$@D# {eY:U_Ep6&ocRHlfo12}$g2̙p8bY;O ޏ 'F'ĀUv0X*i3Bt&yP(5+5]͔U IM0t,Z^#A-Pb'FH&%/b60iiipҸ8 gAZEEEv(@4ـR @ 7BR">g9P>tF/C(4J(+6qp8` eSJEa/ \9cD>t|%8 9s; :p8 t0>8p>pp8/\9 0.Q00'4X9b(A(TI[II$ n_2p8czp^Lv£_ !p8ނH`YM@Dw'R;dr8'')\icƵ\9 €йEzYO /Ϙ̥牢z_ٿgk~bQ˭$ (p8<`#(PL({vIM+/8޻%Lk飢0#tL!0. @#exki`?:b `t:SSS{z<{g! =sXۺu?;w666nذbررc cf͚;w˗njjz~Ჲ#AxW9|rQn;zg_~W^yw߭i( IDATw؉pFɶ:,; ` 0 ,e?wI9eNd' („B B}Nθ?bGstBLErر~7pEQs8}}}w>}cyo}[7n4 #fdY<~Ç;::ƍ;gϾ{,YR]]}WN6-%%aҥW_}ѣӳ0ϣ>ZPPR__} htΫ[kvM7YV^rBE<5w*' `.s@"pmCC#@/VӇ϶(0 X4.uzsZU6Km6[4u89h4 oW^+eYʲ,i,lB]ׯ~޼yG޾}ĉ+**^z%ͤrEQvE0SAxKKK5M;!M~_jJJJFFPŬ/33s|SrBYlb2XԹ>J3e'z7^At`PƄp!]]]'O|7.\ZZZ׷e˖Sifnn#GMǎ+--MOO?zh{{}bQ***g̘ PJc[lKvXBH4=} gsߟ6{ld|ӧOo H"> sڶ ^jp R:ˡW(c=vc֕KaXz " [ȴ\C7ƚ~2#QJn'NhZw9o޼ɓ'3al \sn6mځt]׿jRRRii ƌBst\'ONJJ3fǽ^ŋv()))nr9И1cl2k֬(ϲw޹sfeeM4)??? :vu]׽^ojj*&|@D &usi~5ICdDQ__߅I]N}*<JchA?!5C~ X텞una0K_A`s,毸G5M^iR68+/S;ga-lBHh1yobc!KT7@=0Y pEo8߻d9č$q>sm @Rin-GM`Ls (dhF갳F:Bp8/Aĭ~sߧ@dr`.Z @ E|t#.{#b.Cm=،{䖜IoVS  @ࣵLi¸ .`dgg09 ŢV!un(:D/@>2uH5fMά7 գ/ē>2w= Pҷ47Y_F︆0KZHwGc^V1 *7P;|&}2p8B԰}^kܾ m4gW zZÆ=+n 9D@5LMy@0|wP?2MGJP8GE OfnnvoڴiӦM`F!c 1zl66els]k:ù< D~m ! jt< c _BuBi, `^A.\.:L rM7$*` _D\S@Ƥ|d_–$EB={,X`޼y%%%ax<0jkkDQ 'O B>?zLEQq^^^OO3Z6k BWŊTTTxޭ[۷B$IbWBGQQF`0*b9vXGGݻ٣,a?)@ bC1-nx_|nad2߁(> *pG9}Egy&M۟2gA`__pe1744(Juuu,c nݺeMƍt:}>n{>Ur\ SLIHH`'rAp8 0ڒ"w|ڥ`耇c$p!#.|Ic 5Fj ׋1z`XBb!aLNAF=eʔ竪b$6biookf^^^QQ}Qsd2!s+ *Fa4} 4uI# Ap-ra$JE^܄ICgޕٳgceYlN3++k,Ej:UUsssn*W^BE#Geee͚5㉋c[<$IGel6رc'OaCD67 d҃WU]pĸV|{>MG3O f <' SU>uw5/8; m+90)I/ S0b5Ί&JY,_#h!̮3og39&~e?׬#˿b66 v:t82p8Jl%ϷtG̛aׯuyhlvC(ikagl(G]YC:p> dQϧ0P. +6}`@!7P㌋j!$HG9Sd@~u Ζ bD p8/ $mRu#7ُZ(b1/C}= M{ =9ʀB_3!EP8 ,!(Ž N0WO([68ЁyZy3ρ!90m}%=#{$xCY蔂Bm坠Cp8U7v1շs@gohWR&,|P p8_x0BN{ջm &ԍ+U P>Kp.3$&L-x< &4'P5bSC ,Ut'FE) Oy`ԨlEKC :!Pr8%@m55Īo_HN(8AZF9siPٙ~RdBBvkq2G&8c!.\9瓃{|pg@Rbt[iD4Ĩˣ:g c,r j\9Sz$A  -L ,)V͑rT"K0.eibp8_f(7(kQg͏PE Kp&p8Na-pqX[t&3~Xm0+c~@'kp8: :+0BS`M#ii(H$1p80"A #,90#džNFӤ4BЇj- l ֞⒉5-BGRbF b;L1QdQDEZUns8 Dl9NSQᴹ\ qCU xANj h#T 6o4L{ʨkBBm ԑw=;+ϝ} aK\/!pc#{}abAm[|QJ !~_3NEp.y‘Hc9yP /WWquu+**Z#" D:0Bc2FH D z(%EZ@u @I7λB8iD(t#^QSj*r ï$޽jwy:?ZGj ۱`%'!t=7O\>z\VHᘠ~]֬>RN8EP(h0q  ^Ւ 5K?i@ ( 뿇L_X2B!],~VE 1< ?$:`8gr8Hg4nL.I3b3"Cp8p8/g n f$g0H{)dxRgq# B( "Q4! T k!MDqD@ B)!NDIMSpD3t lu}Ȫ/ӿ`ˀC0 CLʿ\h~muhr8Χ9.Mm )p%"3Q=Vw:8j p@H7u{/{#@G{챜3C@L%IӟT]]m=3k,@ŠB0L `P(6p(m?TUXWQ, +̚gs%%'+#ct~rX0 mmm~!RUUwbV8E׿~_u}GYI7lP^^.IRUUՉ'֯_xbUV ƺoذa߾}aXb/w-bWWתUA8zhIIIgg'ȑ#_,IW^cuZ<{] | ===l1P({eOp8d[ǝ>q&kZ^I}ך._޽ q`k6ib<>Vٞz~)E }'Nx<@ }[nemIIu](JZZZfffgg端yh40;=zCIIIWW?~~]F4_bwj!DeBH[[ۓO>/677DZcdYB(kn޼p|ߎD",\QjӦMjXss[oO>iO?DW\yisY(E$ |*VS޾섂7]=}w-YL\ثy#ݝqIٮ1}PO?Bm۶WQQ!BAA7կ~Hym67|w(R__wvAvEn+gjiiF===cǎ3gNFFFvv9sۻN:Eiii?~}ݗ@)0aB^^^VVVqqeˮz`;v,[l&%%QJeY-'[xqjj*!_w8'N]`h4&%%NKK}P7ͻ{^~eAկ… /_Cki$&&(z衇k&##=[R^^=nؾ}IV3~op>W D@yN,@(Xed$)(?7>>vggg?SO b4M"I҆3tbū*?x{x4+hUx̿Wm]cm6 V5TUe(%55~/Zh̘1)))[{{$IɡP90+E|̈VUn`SRR#554;40Z[[].W\\\0TU5Tf'$$|Xc8VU=-u]We͝7YV].Η`M8ӨM@3!񠰛S@ $Ku]w.w͏=O~a}`A!-:tؘtD%sgefb5hl^x5{yacBR"RInDYYYIIIl'OdPJ322 !LX VXRt:.hFFF~`4iii,h2''rBVk&$$8N]].ѣe#CUն={,Y!dff\.ΗD5ېS|. J JTXЉЩ`FOQFktwlu>|?ٲmsWͥg-@rr@L 3IDATuՕWS5[fRY`\vLψu[u;ŎN<^gu}Vl󛦙O_|Ak45|Q5Bi0{6\̻\;0Z y}R]W'ϭ[=NSpv|RaJ{ZydE>2#_iCwD8? Lf=w jϢq&~/BpV2a  B>P7jʎ-Mv7Suȇ;'b(;-'9 o$pj {aǒGEYQ!C#LӴ![ʬ ˲Vڵk R 2b)e0k,<兿]&:GGCmF'?5i?Hsl==}qqh D*bEQ%5MOO A|ᅅH$L&۷(EQLFR566Zt:Dduup8H$zJR(2LV{^ray87}q$^| 0e2١Cߖ2HN>@QT0V]glnO|rbjY%]u)FU/bimm5n{mml6KRa4ӧOvNfDkZN755%Z-ETFQ\nz}((j555HEb"|(uEZxcH$>e &u ۮ);{?mՆI*vnVa߯Urf9Ig3gvȑo#"aEH_lר}͜| N@5[roٳcǎk/U`Ź ȽC|36_Ⱥ?3%^jeU\t ޝa 7'?̖ll09GbCEtpfՒJ** U:JjnnZ===,˺\ɥJUvib„ j;wnnn͛2HjxraFBvq2Mbٳg z0ĉTʕ+EP b$Iz^2iii9xM|>{t޹sgwwd ###@@8d2$;ҫH&Nn:uP!V[UQ$i'af۟?~T*%XxeR4ѣGK<66666 իWkkk ]vyܹqW__T*N'?NUzqp)ϟw8w 8m E,[5G/]T޽{)>PpB^xj~g癙 @TJtK$5?~`^3gjkkh4|>Be9RŸ |^VVVVVVr]]][l}9JAU={ C80ǫcEQR988(JևeٖI&dR ,:::rO(fǏߺu:=Oggg/AQvGE%`0 v{n Z?Ԣ6rIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot23.png0000644000175000017500000071176014717152071030343 0ustar00hanshansPNG  IHDR'65P)sBITO IDATxymYU}c̵>4QD`C4 ()᩼ƐEl"h{&D4jL{D-Rz:n4{5csn[ťsYk͵s4o|>37zɳ;;V͍#q 0;Gͧśnz0O~l|SgV{ ;;;7<䡷w:flX.ǷƇݸfF^kc rCcNUe$V-jV8@?oޏ@ d7#i##%$PP8uTkO">3cq#60;F!ˑDdfp3s#ˆ0BPIfFt8R٢eಐ-6H*;fe~@\8?<`}t+yt}eveK덼/;KUT`LʕVҬ5[Ьp>Xgco)$t g(p>vM(n@zð-`QtCqҋ@!jbT R e)$BB2hs÷6mII YP ^Bвih2JHeqPM F1w& 34A%v2 ;ˀaMh >Z[}*2P+H3jSLZzݧÔ nF(|ˉ3X~\{} ~ai3[| rXo0j~%VW~G C6Gpf[Ch]fjlcfJmβ.k3/&g hu5:$[((R*WU*?vմm&JH0$q,Zz]LP  d}( 3I  307)Q[2Rn@ I)N֪"BIsx"kMܷ#7I!qqPD5cPkB}cu#NËj/hFtl 8i {NOi\BquۏÏ&N;{=ezѫ?$'|dq$Ơ<3:ZEPܡ'b$X=g0\VFZB (%Z6Nb2zнz-hګ:[i9Swj]؏ eq e2E ֑ ':YH2PrJq!&7h:LY 65dC)nqDtT<_BݒI憡?S RRp7P? 4s mCe)N #$S=EX;3@w fq.¹%]|KOxC{v0!` ,MDS(73%+ ]HB̄gD Rj55O!S"`-3B20|Y[@&k"Bi<htќpNrU-a+Re6E`q6@0Ð2 BJ&`=8讣(Q0Mh-b if>LRmSČ`Gܝ0l ̀2mڔr))37;O%FR:JEXX)JHP15(U96;~Õ1.aNƢ l85n$u9eTWח'FA#[Ɖemխ0+e Mdc{ߩ^+ "F3T j(s1JE»`R`,hQsZ4B 3[QJZdAX 2u4@TiRrޝ`_*ƈz`+? qɹB㒏w s=I Y yb]Ι!Caef .C]zFVlc5W+e& 2*AK0; lQ$&2m0!x1j캘)py8FP[ejKPj6)y1 x(jM%l~B МYGFrY a(@W_ R^c,6FB`"A?2rJ b4it$3۲گ;:Ύ:-}[-0v賫ƑJ{IjƧ"JD@gh# GS[fb##hX(6N3Z/N& 03 TR S.@TB wKHN3F% ņɦvG8ہh$+8;h` Z:';e#%H4t*0B9 CLDsgXZR&0Zmղzn9˰V߭eSnΈ-rj)5VmjLPf*jZSI/#!XA](3bH8i9߽k6f&[NVSlYZ,bؑf&\_ Keo?:5g(kjmC)Ung˳{˽bwO0jXZlm(ʞH@:I(r}mJ 77٬ueb)2Z2dpZuϞ]@y#ldSʶNNZS$BBE8tNFv"8xH#D-s}i ,"jm 1(RFcqW̆a<#LǶ`'%#ִ=g\a#uPg sqa.,%k̹T#cbo: @# e`k8Im5AQ3f6,0)T#׊f(DO0oUP*o{w tgrS*F Hr hU&9%E$EF9%Ԫ֐a2N7sFX`R Nf M̥U88fn4N-# HaVZiJ(AÚԡ\[>A~ nT2SjBV U;;}b9A$˴ZBuSޏ]JaG_hK4SP6折D]M㲆h4&:if VgX᪌LA&pmgэ-3*٣iR U,CU݉\Ƈ^5w+6+62q( E$Q΅̡TJI CU䯤duAُ`$ N#!ڢjSds2!:@1}^[fBdF P%h@"cDLed@$ѳSmf"DJggfk2#YHeAr&.Q@ltrvonnG6#6fÔrc)! f=@RsB}kssH-#2kk{17/PܘmU%e02h2<QpggȘ٢XnaG_xSO{Mтn:}ߩݓ'OY.NR2=Ody\~?/spp7t_tJ ` &+ 0 fB 7Ws0Yr 3 ӄV3'D$ eaXǸƵ̌mL\ f@!@#ujSbF&="$VP (J Bra6Vld)4Lh5a9pV\aVPFww/]פ8U֫`a0iI`r=kZZk0DDvSFe;(69-y[nD5t;@,< !~+t\P^tEXMvWwYmg>@ce 2 B)6/[QI}N:ԙIgRkםtN~fYo޻n{O?|tי_yͷz=;T{G5'~vNS]䟝k G= u%#ss/dI;f_4vwYoyW|ӧJk W SZodsP|\z~>9+V f L1a'LZO *(a(mi^2}?ˎQf#}9m|W#ǮW_yMLu5`艪?[#ñ)>VW+e98z 8{_D:Ë7~FOf=ך&p%甘Zj!8 1ݑ4pG4k613rJP!*(1XADF(#`UgG$]yeВ) ĴNJb 3QhW:S굫eټTC DK): άͼ.&&0$(t^a7ZK 2b#Xe7=b:[.M[G)?u^VRg3$B"AVm笮2EϝVw1آVy8$3 #\s\>sqekYleU%Av\mw[E,ZA_]vCnbXV*r!Rk%YJ1wHANm5#ED,L- PbI Z%CXvs3Ϝ<'=>W5o ; )o}ȍ7ΆaO}g=nZ跿;n?OG9{|q꾓ǎ/k}?1ol6W o:;/һ_s{{3_K7|籏}^󎷌x7V>1_:Їo69~n=v:Cf|;ox;2TkV=w~0?ǮEVlllhM3?~%/cW]_}xGOѯ|Kַ|xӿ扟G}kKzϾ=˾O[[nyW>__/Z.OƳ'|͗y?Uvi'=/zyJׯ(!e媦'p\gV|}jϲNE t'k [)RQ!EKьldk,wePlDe; PpF p k d˩FNu)I[*̦h 2J I s:L+GLcTchEҊ+F B֟ )3kT}ޗ]szA_EO{/Ƿf $ X:K֠,=ZBm uo1;}t:t d'ޫQ˕ѡaYϳgk)s!ձ6e`s}jmjLgnBXN ÌVuef 2EǙDburֽWSƲrw2e}zyjіIi> +ܹnA @Odv"U'N|~|On{ϜcN(eܿ3gN?9oOolhf*i]szfDc6կ~7}?xZ.^c/;sp"O|;c=IO}6vPDd{IhSUm0J):|I` ,[\Fi1:( aYJNs&e2aDT)q(=`1٢gAM @l(3Qb `k2V(Q@d0!ZuDRC&E" l5#ÝY;Z (SM)fLuԓl:hP*{ɑ9!ۺImjMGLsq#GEsW/?Y_'_[[~e/ܤNucsC6ٺ?Mwcyv6D|ɗ~?W_}EYMO_ ?|ӿ9<&t@9A3zA7~{xC|3g 4=}Ǯ|n^_[_ƛiZf BtHsE.:.E.}{k8Y3/kpދ{ytɋ Emn6""EbG6-IS`0U%T!DSF03-&'3!0Y\gopY3a ) fR JvMVXM\YJjs|PhI T"`0AZi6/ M ,j͚rH!RU<DԻe a u42W/&){#mʜkr}coG|0}8^D{ {{c=v?jՅol txr9nsC] +0PCqxÅzitP"'A2UVuj`Ŝey(jbm7WuޜVLeEY)elR܋;iZYTa10 Sk2e2hBK%aÊ8lyp`B9s{n~;яx/ȏޭ_9uf𮷽q왛?~:rtj"}>q6?替[e5<}ϼ}u¶6|= ͌\,OMdlf ~6pb~Vmo 7{/{?Ͽ?_{/ogםu)8N좷jii_/|k~Wt|W}'^+a6xr?`!\9}*6v%M@>a3= }J&fb [1C""Ig6ԛ)d͊z@:iRb.2aRLIn̳'].L^VwݦH MK uTC/a12 k =rBhL7Z% kx huz^")zш05(o` z ]2G/0 ̐qxnWKᎻ>0%F<4x3C uj29-97;VV!WG $5P}As}-2ekA_sFrrܺr*fM\08{Dm6·^cfRRdj5Nu4+~p [/7+H;wy=X\WNѣwvW3g{?/:zZO>?}7 {~pםw&a<|+~'رco~n>5 h0ZfMas:$EXCny=?oy}ۭ%_GG^zӣM;Z8l`(Ƒt掏G5yG[9~Dͭ%A?}P3|:V >x'ϱcKw[;hᢈrOh]iU\Ͳ$=w#1U'u;bRVI)-dn^N&\2[]ΙO-Z*h=C3vuI+#e #LZf 8FYTVM1nL֖-H읠AJ^Ceݦ'é5 jł@nN˄R§뚃"d.1eJu]Ps7fp)i}MiM07PڑP2}Œnj9UMb[4"uXs?B.UoٯdZ1hъE0<:|>_,vVRQR&33gϜ8vb=9V]Lfdd$TdSJ.2(k(7}7ʟ;z5Ǐ`ѣGnmot淿u6IL5mDrɓFsU_̽imYreZ{;K-Z`ۘI` 1(a$1c˲@(,$!&3bllZjMp={G}}WJo8}{_~Gsǿk~5_u_{xxo73?7w}Ck!K$Y<1>s~ү_wַy7/7_LŊ}oosM7o?dS_&mڸK[9.Z_vٖ[C9}N"=Q#G[h*䜌y-@*[5y`KvGp]V-{"jR&`z޳ƞHHk@D T&#E(pۅpRۢ;s~/?{-//|-'~ykwYu]iO}S??/V_kWݳϕ:y_ 3 a^{:կ__afox饗ݽ[T?#~??|{_~5?ſ{?gw93ԺK>SQW^~ǿ{_˾䣿#}O%qt|o;ǥ|W=ڍ7WoXCWƲ@=Te)i/@1)@Y3-Ia;3Pqe^$X]ԄޣT ݏ6±_dG_TTi3H9UdL&"R4dFwDV(-OAYI =΅ ÑA 2b"[WRH_|xpm[z*LhfO| /=xǟ>k/vXD֮f/}@+qͧ}ϧ~=}|VvYxg}Z)'o=wr?gw_A3'?nZ{OO||ݯ3֭[~OOhz2@?yL]9\5xe ztU)Nڱ_Ehk|gJ݁N~&KT&3@othVUuqPLӗuWDmisc]"%yVf\V#cM5fŲ{7)K,4E̮Nv;qrqeR}we3@TL,@D`Hwaӟ> ~oo qABixDkꋧ~Qٵ9<~b*>a]HqSemS<,{#F;S&VTnҟT,mwܯmiks*(+&ÝpԳ&f-$ښ@5SFhILf&U9<135=~syږ _@=98'AƨObC Y֬ aC&,fO?7"k7O?{xFD)YNwq^88<|3^5}UÀޞ{ϧHv(eɟAy5RQtm}V)"O?+C^I&[^fL붔#xW>@Cٔ z| s 3).XUf }̙XXN`w,ҝ%DVr;т[#h  ɥ}`G0 j"d uUEG!*TG4G bhÈMV$4!Б%;ͣH8mQs^2xd) ڋX'wiMH,{{l=P:PLBAr?$#̈T#f:E!X=Wrȶ=ZxW 帨HwSzطfǺfBȐRlisgo}gS:]~Z? H#LUͤ z3L։`7x48*dJyyMS^M=V`*\TJOE")6֤dlٚ 7\H0tOGw]~Ƴ!N7yw!]j5r|uRF)TM`z6*%[>`>|v RUeM,!zbJXIٔ4,&a҈d#&g] aoV $y[׎@J"ULJE6-%euTu2',e '&T1.Tk?_Wk=q ۈ 9=s @UГAC)2LtVGܞ6?c#&4&x׏(#ɬ _ۖ-BX-Ŋ+1M<?[RHOx},ᡦ1)A1Cwla3CGl~ېp$#LIl{웯˪׎Jx(ZsS̹K "z&˧#+IO,w:ک0N S-DLTKIP. EzYj[l$ ޳9 IDATZLP+¾1lI%*2a$֌iWw/藘ꍛO{/~(L-c73h< ~gMV5J8ؗ "PNjt0WS Ygbz# jJr G4xS6Mj(&`Ah"ѿ1%y-`fܚ'eԶ">MTRrLf+UXMjAKs$B=TU%`*Ѹ.*b4 M^̿ZAV'tݼqOm*IXUIԊ3PEb2&fHXOjȁ]{A [ICMOU9B<ካuK)$^fiZ[K-U5M ߟNu*eh""RkgBTλyjRT9*[Lջt\t48JHh┱>JDv,ck=9ptSzpzq0 &'@5w CHI "zRDsAOՐ=?ppRXJanP( D`f'FGHG ~eܞ[bFKF ȵnMU˲ &W{{?2.Ck@Ć+ol懮\jtchɸz pAh)jFQdbHې =:>&L .zJd0u (UiwEPE,ͽ{^U@r5@3<4EKc┐,$̺\}Cb> nn$ rՅe_]ՍaJZ`rH lR" i""taǟ\wIlf7cNl+N2Mbݐ{w<D2Z}S&-UkjRgѧك_&Ts>srX>>218ѫfzFW.5[Z) r NNN̊b(qw3l$yyyT$NOƏq4M\>ܨg>DJd z5+6ޣ 8ՆzX2:Mm;ٖHjuJDdU憪QNebf**wV*bŦhem> I<SRUJyFbt8~wPթTlAZ$K.LyO0UqDN'pB y H8}&%Xaܨ2)6lsC6=Qi{xz, %dy !|8RYZMBhIz;A:QJ!@!B̻w璖 LD1Ià8HGҔKR$,Q?YFR{>< ( RThRuO~6h*Pa sEF a$"U3-"&RN5h1QF oVLL :wɤja{oA;QDeIA"'"j`5=>MXyֻ<L-g'8A.@BqIb,jS\- `zNZ'#M,D&eL*L+N 0J)ksS XA`GÊr0>"oA*YΈpHl7ѷn~V(buuv {K7BQx7QN`=[nȒ0 \-J5يl. NbiH1 qXD`?@ f%3iO SF"/e)3} ?P4I)*} ^"C( |lY+#1nM LM-*@6DN`;A~ G{>/uOY3:P{ .ȀV&Mhj$]/OLbeY;f*iB rIrRrl.n^7ZG>jBRb@1 Yjj6YT wxk6XtB20BzKdC fVL!pϺĖ4Si2S=b-ӋT A) W4pӓ[n[?g_r=}wG[b\m-L*T&Ҋt0bOS \-$ݎUpPMDU[b4kE5t3I{1 1IЍ=+K_BIxYP͑^{`\xy2yx-t}1o?t,z3Ck:vtH)!jwI[@ ~4jh-2h,SG뽁bDE ;! xVe e*h=g^DHK+:cyy} [Je DDa65ɐ"3f"[j5ޑw/i,P}tY:qHa,)Ip9??{^ |/WwA@ƟC5e.IpwSVzoV hx,}mg޾ʲҖ.)TZƕU#Sb3P,"DF-I|D3Z:`o " %ڽZCjGxWF&E5D1#Sj0{ 5ම>uv䗼~`_ݽ?}W/MҾۯ(/яDRv%tf vDZZ:$ylhG!. tZ̖ ";їh PU&-j&Ԉ8۟rpx} /.si Ү;11zp]3c/@ }EƵKECfXe0u#Vbfti7ZA?:FH2)f`@DUM6Q U*STf8f}L((Lm遈-){a]dQ=T Bd6!at(PMDdƒN\Z Nax^0$jl*QjꪯSOM4Ow;Vы}]^D^|\5Jvƥ9"Q`$SM&@ڎI|h><S}D~R J6 pe%&T=`(T"0uQeDwCAwH}emI"Ku]=|Ӽlks0Q3B<`{6}̉Y4'opݏ?<g_l~#\|cуC;DD*Ӄna?ԸHJV%{"uZ@ZFg̨݃@U5֢# [*R̤(@,D-絑""h-)mIsfU* sYI]Y}nUxJy u  DT@?aE2F.6tnv?_I?_=oxL4|pedEgN  `h&]z[p_|b9찖 r=/# W'sʁ=ã=~iDޫH ;]C쭞D2΢ Jk[&m:uej Zkz`g2ZJ!]$ ޅGws){D¦Z "(JMfgl={xdC;k{JI⬻(^o//h7!"6"(P~ZFV,YI4$[H&B$Gjɲ6d@Y"on67saI4,un44+zx,sεGvYȗ<?ɐG>W8{®Kmuei`]{$>f:=ŠèpOƜz*jj($P QoHEqj3jQ T: :!!tE1ZXlGDfli@} PMd B dPV!43K92?H V< AƘH$ ug]7֥uwPH,k{{ӹHz'Mu5ӭz>RSފXPx~Y|b^J5 %ZtWʴ_xl03=sFΰ1,GΰCVNZ~/~Ww'>VʘY$uEV-z;>>$B%JgD1Ha! <<:t{TpE:B`H QUמAL)wU]-e], Q…:.RIُx'clۗ[3zO?r[-r?YDExc O}멣y?/K"*%EDjmF(E//mݟo_k~+ܸqWi~j5c&j6?C`DnVJ2)Bx"ib}mZl]ك;^Iq|$2%Ch&' cf9$7o=RZ-#BBeYe<QU Qq6^oɍ[|:eE\ַ]uZܷw_#+H D`iYMX9yFt/[iDh(Xg]eY o$7+aBRh*EQ`({t5dv#Qt*@RRӷj! ˊ,aMor$H%9$h5C8ސA=#D%kӑ5\ՂUBdؚle0p- >@(IRY9wo,s)q8={9zkwgSݚ2= !z.6dppщOlr3cET̪֚hA¬x:K5Tjmi5*Zikͧ=LGx49[z9XN IDAT-t Qh(!hHTQh)2=xi1ͳT/B^n߼>;wNjyp,9Z_Q sQ@zt*VTLGLvPj5fd{2@9J)\SfZL-eokc7jԜ< ;]Ao=QU&DMmX瞮Ŗ;{8<Ŏh@w=~MGxFA7pq8uo/0}]>@ZJDkI&YK,B5:TUԊx<B}=D#-W0İ;G gR`EJEba&)ް;رI.zwP5Iv [gXBiYw ö3)DWMw U| 'J.) ElKG3;OC )[}@>6s+jE0{*\)_8ŰL;D#MDLA Z@+2ɠ2oD-3 ZL'2Opn]dQv~##Ex#b]QwZuF<Σ8(k;[ΖjyC[Ԋ㢷|qHtۭ`x}3R{X[ۈCa[iWO`v{d'2MifI(lt 8<ΓL\sQ[@!k'w bTfVk(fn,i`ιj9 oDh!I;$P^Pm2 lۘJpiiJɬUYPSd!=q7p5孍BG^шb~շ:ThbRYu N$֢Gir+fIm{qI_6znr"FںD?9q-$MS]ET̻RR{6Dr+roa˾H ;42󫍍:4 "eI+C%J)T35+LU T B ͯx`6] =أ-]u~Ss{{sX?_-RLf:;I \lta+%R[)!Plh :WռlLS!"]ٲM蔒i~"9&Py ӓE9O8v=wkTL& `SQ+:reeRN˺昻׻37;ROȨj=v;Ww83oVيEOEUN] 39ڗF ƳTX+5{-G, hC0m+My|]\+C$6X$3ic=UVgbUk${z[%5Nظ0eh;O!t@r,_'Z,o@w,Сuy۞1A B}&%\ڇ^CG9Kqx;ȗv̛ L{c|Ua}[A"KJЙv! UVCG_p~s!B8Н4 l1$JEEd jRD@f5Rj*3PB Z@s!PgZܽymWU's9%ĄQؠH} bآ~CDĎH Y*Z)ZZeTzL ^{=֜c}} ={Zkv[uAF.-\TC# [ij@:b( NppvUEzE*8cr jn*QMG̒5yE˻֖̃mgGul/4}х`w%R\ȳv5s'SnmH;V [ab $V82Ku^be.gZK"lgTaZ$%XR%VLdDњYN3euD<..}Pt}[T)o0osnQsiq:$\"ת0ZGᇅRRq;|Vtٚ)lړo+FzpK AC"lM354dv[LSѪ$╈Ibu O"ͪكus;^~gopwb($rN$v ˵[0֒0' bQf2/AT6|xQ) nXj*^x^L@*7$(5 ]F%evZ}|#o lFRL$ERqGgvsSr L!XT"#CfUÁsxPL PZfh9o}Z4 [`'rv)T:T]\S, F;joe\ ꪮ~nˡnq^lGPK2e!7^ANs_#)B̴)IuWs3>dfNq8\.At#tمo碊R5[2SN^I  |ŬZ)x<ԔFݙ\Hp:}&fN4P8%c{Nrg\oy7vpbbІ}\ooOӴԉF+Ze*0Xiyfa]t~ٺj*gDL%6cJ""bUݬ2ݠ^eF`N"Vvb4_eLѧs5VVN$ OBsU]R&TEVښPKe \X(uYZ)5AZO[U4Si -ehpfCN>YG8fً)HQ w6<$wF9 l½gig7hh">5T)X?-r2'2~ 7j<\ZBS<䆆iD9ZGKP`Ƃ DBLLfZt" ])BfP sD9ϻ"yObvB0iWA(”|9OǖQb,B{v NbZWT/{ysȬH.m_:&Ω˜9̫8V!I+;jqשӘΓk,LB)XG'N mg{웧N!t91~,0sURrc⽽U%"2qTjj8u99*Qސud>yY¶e29wӎ7ahߙHA^kD8IbhN")Y Dfk޶OaXcaYY'dmOwfZ@lD7J.&zbn0c  1ĹټemjT50f,O)a 8 D /MH{79)VE PCXslh}ӫӣpΙ܍Р߷fU$HyJ=U*ͅfoB -+̧pUhu5&@m0)lʟ-mFS07 Z9$G  {V'$)h<*MN_ sL/0ZRH@@"G>z]C,V:hmٟ{k7t{3j}l{ȳ$T S/ZKwNV5IW$"Z Ybޤڶ/۔ ;0p#ߨbkeH"BY?JN<^$?AppH"!םT\JJe 05+zV t}67-g>R*{HnfbREr:dhTwh|޾Qn?plJlt`av8L,VMaJYʨ^ܽjБS"2ήj 4~sb 2j3P(~Ք=IڌܬdeXCFRrżbz3u}Ino]nL&#B4/͡rs)(Tw=us]-8XH~ij,2BB vIǪ!j֌x*ANwfz 70Wx034 I&jnTWZl$yfos7ncH'bWl̜rԖUUiZh& /`{;VV|wUN,wż?5'B1s'|'Lpb+N#L&hXd hew m'o#6p՝]4DDTu{{Q1%)g2O}-Ek}G`UzmGZ$5K) cA83ZsdU97pP3 4ca3@@_;}r 7'̵nr&L$!j ;+SD< D$V`>A:fd/ی9ι[G,~o~l~w=o[ d5BS7E͵DZB D* 6P% UD\8i!YrvPf"7Ռ&i%^ Mޘ%4Խ XWkyFHA︟9@" f3g aa6ׁTܢ|CXͼZ8@\*7߯٨ҐN3-79naD,9S\ctnTQ+e,9>Z)Y@boo}4Z-9Iu rsj ѪޚFCۋ[#G[toUn8[v?.FC0C(#Eb%FF7 @Y׳D691e~LMؔ@"%!Qyi͛JE/Dp-2!v4k)awF˲V͈C3A6p&~u8zP u*ABUK3}D{DwM;Zy*҆X~DKg2%FM#& l9?z=QUK "^m-}SJNZtw9?:; FaST%"3%✓$$\19B̅s( 8<%gY N"HĈצuG>qwL=gl"iJjsmƭlrZͭ;uǁ ׆߷H2hL)U2!"zwqw7d.Am_˰mig8#'p33ƛX.$A,6#вUX m\n};QsJݡ>%KxN,`¨>ZQ' w6t;9g"BDմ{`!UvC\6LB,$[O{TZMr)SB\L!1jA4^uY@MPm{_h'kipm%Os 2X/d$y 3}*GѽF0U&{c`Px{Q^SRVS|F7q|Kmf&%ʪx:pr$,H\끡vӸIt,c.'0ZV|>_V~zgʙuYeq:;к$a 9QDhfba&6U݈"Rݻ"wIҠ6ZJƠk7qb{>Sp@L f٬ 84JU,Z`Z `3M)UMܬjժYD/H:M7C=T[> rl{Sfy~V-&TÉ8鈀LaD,@b&0>OW[ۺ@XO@4{7RjrHnޅV۟wh?;֡ 9c;Rn}5j٪*A :"%Us5.sHCF̔M& 9 ^m2qn'&ga-0ɜ0 w5 U 8$Q2wZL °1kesosIgJ d&x{IDa(jIyUHhGM~Yf[Zbk+Xڪ8YRZVu}_Ո(LD!9 ^SkgNG 'C<ݦiHם8syGYdhZWȋGu}߄Q; q"r2jVDzZrJE%x0o -w:Gun29:^28!NQ7[lfcHYrBÓH$k1! 6CM㶂]HuPM]3ի Nq(mlI&g~Sg[v6c$|0SQ-KPuU2cyUrHL qASߎΣ2H7;-1ƦzZԔ2 Sr;$kNaDwe= 2wu0YBu{2\yY>õx{u0-=uE폌iZɜD1$XN#I6!ѧmkQPAKD\P%T;3.#+;{^Wcc)(F$Ĥc[g=KS5i>;2r#q܃,w~&)Sa #LDլ ִۛc`UW_ һ]:A.'w%ŒW_=.KjT)I29w9uɛ=lqX{ݝ_z;DVugo)u=C; <מּO}"iȱX%PJY^כM;r[aX`6ΌXwµqT5BLmZk}PURXVc*XRk]*ȓc=ЕyG&.ky+_y|ݵ\S]-lm'}\ZKS-՘#Vɵr~ã3?8^k3?ϋ}啟sW˽b@_` b2捥{)cܽnw{|1-f4BM#gffz^c)ZF!s?+zi3f-P %,Ne=>yz8srh]0L<9㦵[7?_Lv>x}$9&<%I ILxVMW0IGVjèq2JJHHth! 9skmIF4}X{`nRLX: >Vƕ@P)<1r%SXu򵍻uq-j<)e$*Vk-ăPٙub,e90Ե> ;qUmoٶmlKnnU;6 O`(8b^b朳c7N tLJ?u{_sW$uڦEͬ'OU~{LZi¬ju])%uҋ^Wo{w@zl}nU$ꍠZNY J];z uu)!JM5&'ΉL]Bb'0qvʃ+7ETp˃KӓV5q|R E[u |?H&HE"E,h4 3 U7c39R`͢ !#\ԮDhi0L[Ҵ@ױ4/`u&7\}Ϸ̙SB.7„{,p#%k[աJYC-d-9jrΕ5c j6ݩWߖ~0W k['xtCfɫ7%qn5 xdžmmI 쉑!\f?u8A N`3Bt/OPWsJ2"V,7WsI©#WU-jj5Z >*ODfjN ubugrc砹0~+^yWv]#?|^r]o't ǯo=7'|%_w|>sRױfI#7~㟠fH ~~㯽_~ U\<˿a]wK^˧O™_Y>.pЇoO|~[7һ^\KY=E/ceWczluǿI'N׻q A|WO^[o?_Ͻ?E?=?_;nIo~˻;8}“wÕKD\"DXWY57s/TuS+!@Ȫ&I9wZkiNDw|L~ϟz;}{Xmf-#PG]JjN 'ɺBz@P:v1 Vs؞*Hp4IMcx8 stCۤ ΠZNUzؘ) k"%8S'3rs,4gIpSD84fp2i_ JbGhXK%umɽMGr%|FW{g'aRWDF3r(g0/4BLu%SJGxRb=kʩeOo^/!e,!ӑr'$fDM,FA|&s GS!J#:K%Rn?AgRJΩݝr5ZJYHZ'Cy1Nf(D\BIU56ծ)NZj]qk)-U5 $-PjP lj=._|[淾_7fZP} s.R7\G=A&27f>4~`)q~R?u]3j}?Y)>ۿMoW]󶷿'z_wH WL3:tY`j?ñcǎ=׿~ou띝˷}7?Q˿۔|oz%\zeW\ _#~o7}G<ݟg7^o35}^trw~Osb\ΩSgΜa=0V5P5xRDE, j= GF [ӷFJ^g6nfJ[}2~CQdIY\mtlFҵ~ww%Ji)X9QL(BBƊZ׵;K-¬]O)ЪeSV qTix2ju31LR@AJ2z->Y$T>020fU'IOڙD@ SZT8SSKu9_^| rW}ci`h*9uh4  ^!$*Se*ѼRø\0.ݽt};[^#ǎmݞ/F֝5-1q%,џKipWLR\OtD[}Nj-㨫r6u]7˝ Hb3 n^O!S^UkZSNC Ȥ$TuT8|al{{n'E?2V{:)u>;Cs-,)IΩ\܊`[×;[ƨzfo!TAZiah"0Ёk؆א}7-!W$)IJ) W[1"$ocnpO~SOn_]ԧonڅN{{C۞o|߻i>p7O9rz^_1/@$"Vk7"G3N: `6=+b0~ IL]-wkFl1bjo~w}/_gS$/rh /|[޼pƵp p]pN-n8Tt}qg|mO'>{_GOQ-2&,S /A7RN-с Tۣ8;_b`Lm&sbs/o j<$Hɳ{cK\cybL ;9e2"lEV!uWj) W"(%$NJuT Rm]dIz}o>?|O꓿|aγ_y]N7xTȉDrhP)zsG?||Y{Yןux[oz>q'؅;zqK3;|Eu߿x|^?я|kgD-? [Vތ-]?V9w_}?"zהү쥯mbޥ֪,Gܘ(%)mmmf}듢>%Ks`ۯ!>ѴDSԢMA t谻aā2RFGd(z쉎d{#*34Y`[RJsXh²T)!K2F-4I%U9EhPQ1dr|Sjc"b c 쨲3B-܃؃WBSS@D;JU݃@B{;qG[kM4m;;xC >r/}?tY[zA-AJeTw`z޴Nt2j^/RJłUՐN,eERsf9k[V93D;Q[2ss jiRLC7~Yg9>}mwwoa&"g}7;,|ȱb j(UY/۟R!*Df.qKJZusiO)]k_08Yޟ},1 οKOozWg~k!{~r}OgR_ x3oP\~28huF^M7f{'N5{gf_VVeZ${c*8 j]~С,"1b'noΆ11G5Wuk{IBq0$quP3[l\TRAko3 +Hը8kr@򓲚Z KmjepΩh2ȟ+6Pt^x`Gl 贴 (˸i<]{*̌ZPŷ =iZ歴4pt8hH!E~/4DdGBpܺ~LPo(zeLHkTRfbƩb( g`de3(٘ ƪHDiXglwūBVT.{># uLSpiX]prt{{_pg;rּﺜ7dܼԪf",N8l>3ID@[|1ﻭb~x{vhk6$תuwwWW-؍6Q)423Atھ Ow^W꿼W_җx7>I1._?Ayȃ>Kr^z/~}>ozgsp]b,U9ͺٜ9Z͂ w9j𾈘h1[H#3bxoZug1G IDATv|0j$fk_oy/W^w?>]nvϜ~Su]wOe^r ^SN.Wگ=e_Pgq@f)/מ8'a_G>yvV-ֱ8i*'>>̈́$RΤ%I[õK.$I+weYVf<:2K64cfPàKEa.uIR:3I Xd-2b2ZtLO,x$͖6LpBzf 8hhCYzGSԐH 9#%}C=[B%EPS*ܥ~Auѽ  N (U.t ?]{һ.qyfbu n1K}uc+ؑ#GmQu}{{bFU؝ݝY1 $M֜ ʮŬ_INLR~:P-XðփUUt]yNZ#[QUGSЖ5S 9a|xرWګ~ũy/9s[)O>iOAw?~?S7vqHTL!Maj$֫3OItݝݝC[ٴV>ǯ{c%W]3we/f w]^>}R:cٟ|?~_?~ {u/zU OWG/2_W;oz~w: O|"oawwԩS 8.{ /t;O{ /Gz~6F0Yu ﻮﺾY9 TC:8t=7=o76Mon\M Dʞ}St.IoL j5+nwx6)U#mcm˲1\ksν}{``;r( H( "J XQ̏!|ۀ v!8nGUW{k9c}ޫmuk9c¬G " KXx۰RbRJLI@P$N9 Twn,*Yt')$OG: -P27!R (M ~G!CuԠ6eܨ,6DC NlZbM{5 Xy36&ԭ1Pet'vdVJ> q`u]FwT7z{,V3;N"reW8u:I{q||kT#e}:omPχC 7oK.>{vW8ɋ7Q}߽s~棏=_yuJqYWoG<؃w]^ww޾8wx}}VOmnK&wk=IqZJ֜5;n_ˋ+3Pug>ɷ޲ZH |?Ou{}'b'>v޽ǟSeg+%ŝ2ͭqiTPFEO%UEM:nÇxxZ>~½_[˲w{FD[Ͽe_ZJyeN{ofy*7/Ri9-ˋ׮u{|w>rO_ؕZy{w?}v^s矽w< ơ_o.D*pqg{>ڨ>(H|?#ٰȂ/'LrTLySEDf?wwx 3#Q=ŬTR.(o*\;ԝi^Yh}T+zaVZZPgXt7!4*dYgbM:"9Ͳu;cfLL9atKSHw]ڨh4*/DTy%# 3 U`e] 9TQ-EԔ`цT(6Q0DnHSP )_7?ǿb@L-ˮuЇר($}R˔tҙ hp=uCh,BW?|[GUgn^|VDe|mz L WQЗwvܽVlͫ\hV'Y[f5kG - ?1I`\k zO0[,r`DZ_afK1+XײLRJ-EK)@o0h;#/`|!2DEp8+By_{Ib&SyƛZ)Ac&tt8L@vŕwG0c_ \.>?;[of2iJ݊ɾ=TGx 7I=DquZ,z{ZץX[׷y_xtNwݽ3c$#wbrxE>Ox =n7J/G_nROp&TsYr )9x拝 CBZPpTx +rqQ!$=$R]"i}>{wy_.dXU@Tv2W)Kx0Foԥ=ڤGްa4CGƹ6;<- Jҋ)?>p-\ƦC|ܞ/jEͰ([д%aM)!(>8 9JD @N_ "~WՏWU% JmD5(VY*ʡhΐ.2b "M#n^?zqaٺQvӻ SN5U4/8'{ /(B<9DUٖP9P-kPEoS)FA~j*t0QK.=-V~ޮ+nUvsi.>{e2MUҒ9UKI 70ޣئZh E:l4) Tfٌak:{ S-f:e*zҙ 2HV8EDqZT֒Ҳ:ؤzNPTeʲ.nj,Mumkk*~Rk RL?{R; S*D"=L4TU*IKEIBDy˘LY1XtLh t>hb]6A'\4r;[) u,pJKl\Hm7\d0XR +A$zæPYa %)3Hlx^ֹK-:8SV}?ׁg`;Z4.E<»GOe^EAciœ{&t !GAQQ DeH%LL!"0o6:Mc\g|q Aɔ,9\13NUTI1-=g۲]>!j Zn@lvi 4PN!7 s(鐝h:OnTXP/i}Q?tSx>Ḷ;"bÕfb34n~'Ms}e#CiRdVB6ݮXM:ݬ|zYX;Z\{;3N9E۲ި/nnwaJ5zLB ;UY6͊AhIbfS5ASS~8Sg =5IEiY }.蠲PO&zWU͑jwkG1bW1Gb(AH3HXQH=b)XL4IˬU[&.y y[o̦#J-T)㇪:pGxϭX)ŦbsuJΘbO _}I r;8yyG&A/^\a.~+T?+-!bf ;G TiǑDAwIuK'RueVS\e:7ҍ0*@Ql.Z2Iίt'AYƞrz n4gL=B"b"M, O68c ںL鳭&IVÀd@T،?KqH˘jU+5GH8[b#ٌ|"Ze*TtHr7R#s4D+H'@tNu(T*I[$F~OzPzGDxBitLBtZ <;jdU()&VPwrѕZE*LjX)ZlX_ H%ZxE A\ J>"МRF$tUTS 9)EL([rsq m0EyH ѣ77ykZ9H68mIZDE5J4"4&U|YDfk-Я㺶^AC{mmb#P4Mу;>SUizpyqa?M.Z[5cxv;t ]'鶗y'u*4B<`"۵:MNڛ.˩h-Ek;IH0(/+~}o_׭yk-$7տ]}_6!i0o͹k =j)j`>M;E(u^[3=Q:F:@%s6t$hBjFmεܝ RxZTl<+1Fqݜ\)@;$" "ֵE~Otjg,ݮJjj& Ӵj.?!'3㜉WPICSܜ䰇`ljIsOdi`-"g6o.‰W QJ*;<'ɊT_6ʾ̳6~0xxuFPU}N,<}inNQA ȕ"!9L|@FI_1iͽu2wI7%< 6'y9/Ns#6D6U,\<~}~ס<CKSc;e I ZU+iPeΈcOBLup5"4a C 7k>k'?i]Z3ISb3ɎxWϟ\ K>zj7u LHˍ8NmmǾ:A;[sOnkRTP.AkEN;R/Å9#NGi*"-b*݃QD[[o- ^ 7oL?=w?OB:M,0[{ouudz)5v7&Q,H.l IDAT !`@8<͆0x:sE'"C)~*hY9 \OFTq%~y}~jlu'V|[:@I f'f"`'*<}TC1!P͖!9 ;ʼn ĨCEPC!\K_.j:(Ueb4u-VR#rC>nnyoTCr  ͐ta [&OA*t IBP%9<\]OW츇B!lWVo4qcIp=vGFˉ֭u6 Ѡ"dhփJ8:LojKoQWJH!AuGD\) PPhz"/XGQeENTܣLSm+՗;UU.\.ͩ $p_wGx#{d _E˵`Zfw&e.sNt/ʕnjݲ w;woRJgAiC?w{iOey[??C?hj[_oا>5}Wfoj+:՛dc}%_K b%\Z33BzCߤujy5f@ie5ne0s zUqUSb4+G@(X:uYTL f4kJYzWR )U46bi"VS){$LRTTZcZop_Iq?rrO[LGrB*$/x i_bZj2(ז)=?إV+Vp)V *5C#5JRT+B/ϴ,:3PiaPh:uzi"TՄѡ$qo%ւ֤/12h}V:)(TI_i'PSԿZeTu%/Gַ/vfi= C"Eۇ*2~iɹA$!cplq!7Tѐ҄eޜ?1il>,jww^Z.j'|o޿w2ϫS;\c.b/'/z_9%3bFAg]N4J,QR9~ƽ悥C)S ;O E0pYn}`Zßx~73\N'_Wߚki_u_~obf&%ֻwv$*!Qi:pjr,:#z$Ej  H52hD@Xu,q-ΛDѽ~{lE EDĐU]֥M.WR o}7յuMs,3`DD)&RҖ5TGL`%c<"DK| |16G+/;_/86l#`:|. z`* GETPù0Sirygi mKJP) zCva1щ"tX@<ɞCZT^b`xgLl} Iz v}FtP@eLH8-Gع},|Mك_GW}@!"$nLWlZbcKTzO&A o_NC`pk)f(^νac!:pȐp]40a(93j 0Iln9$)?tx}}=OU<3]Mz˱'RHiotTn9^sYzpw䵫WÇ4rZ/9r{ޒۺ,+`l ռ O4L0A5@ -& t-**%E4>Gd6 W]^^ϵ_M?3?Au]no~;wU` 1`CUTz_K `&\LnRys;$@s5edK,x adaKЊZR`zڕ 3|,VKYEe7ݗ֛36 Պ4 7 XbcX%Cgv0~kl: 1dP|22ṯ;caԉQq& g$$(o'17Dz^yZwSE)~b'H#]`YDPzM#2Q)*ά{N©n(Fzl"ue@DKWf+$DyIۮoZFոA1ZDH ^ Hr)fdrIG[nkh1Z8/PȰ$V˳q[Tw?&PE"ͭ19F_tpŠrˆ %HhB  0!rp "n!#_LEyz{{cx|?.~=8xBΗOFi,Cu[kw.|tݽE +?˫zsme]֛`keY)1CoqYEՃˇJA a%ק'Oꬪ-oֶF *z߿{ovqyUo~o^{_~G~7||7>xWkVE">9Cڊ((S]wvIG<_nNX..*n;sSNSw*u=g˧~omH\ #l~psAзi[ǯwɧ?i?M33<Ў"2O3ĠD$3;˒Δ3sޠ^Tl< ,w!/r=ZjRkE /)QAv4S [/@u/E=2Ov%A;3פnP`fq~f4(/4 j#g 3~e-h[U_#um]2?lJr4DD`AQp4bW,*SS{;o( "ĵEښE¾Z s@ޥCŰ+RmOy[ң#GK#VU 3ӓkg+G"7.j8 b; ϑmV֠_-;B3P9W)g?Qe,DC߷:D3T6*vFa M(2P u8C ?:|DupFҎB '0D 9#y$D\?_N2.lq||QfWVemx{s?"y7XGl*ϟ>}|͗jyvVf3-U{;n#ݻWw]}5y:.}]emPȢ}nu9{O_o.֎yzZڲޞz+z \Ͼn90)w~_{ l `(d߷Uc7iLHFL*& ׵MF:L6yeRws5edR6QG1R4hf=5u1@k)1}lm/@`8ʖaAԠC91}!Lw/x~;g@Aׂ-"xO.1 *Io$+rY6{3 չB ;o<Baj&(*EDUmFN)6|[1M/k >QPH C{) BT8!^y[S12IK`jU5cKE C#x<'Cad4VSGPg2ޮ6ڶ#BXtJUlmU"*JB5 QSH/1"h$8Gt@@t_7Yq UT>%kozzގ֪TeryA>>[߼]QIu)_xxo5m)cek|e{k6DYfGקzEon{K;ї"0ѶNYsnړ؝h& Ϛ|_;}k~G~d:!Btq'"q+Q-]\Ed &Dw谓U%FwH6Eu[N%КsD( !L{~ n (E5H4O-LEr: :=5GRI[0ֶzٴ.'`xNH4ʜvP9 pJ@$+0|u:eH5p<~c3UtZ?ye_ y=gZ]^x]xPp1ɟ]tv:jVu˫zMz>yzz. t{盏.ҧutwG$%i"Á}Ta*eZ䉉eiAA $&.@&QXDRn(T{DȈq6=Z#\UZURYVLj+(P =hb 7p]LkRֺ YjMIW1R:Rb]3(ݧ:C7۟#4لAHI^s9۾|/ӟ 8q/-҂"$qwYPd*ȋ%%I# <+`"E,#D^PA" JwiUT$zJ-S*e9 TMLl@ ۀv0<(K"IB$Œ&DP!҈ s1#/-f,F%[Iβ 8n/7_!AK2x#.r0;C`ybج <=A 1ZktE@TX択vJEˢ^|Fw#k;㐥X{^Em9ꌷPD X( )-}qj{o^T jÞq~wh!2׺YU#BY[ Cyv:; A4%r5$ IP3oԇOY +zcO9\ [꼋d 1^Eyp8 ˥X ZCeE5I vv=v=ChżZVcЪO~wsL:ܵu~;>f ћO}j4.Vkhe(b}&nG'CeBb "K``ڲZ_z;t'B,`g$%QpLTۊ\2 ]Bl6UA4._f0[NUU=LӴ^VE&0oVηgݡES L^!9wTkʒ%Hkrse/u -de~?栩pQ%^ٔEDDk %臶m*Z본2j6赐Вd#{TIZ4gaTSY9B' IDAT@IP(BLLJ\.P6#"t }&5zhOE a*,:-BtYЄF-AdIKrV%zM٣-hi0L5(p1ȒޠAw4fDy "' Hڔb$BoA8TԊ@uȁߠ"hly+InUsL)|rrhW}ZFn FdçxsԖi1j&dw:_] ))Ҽ)-+fVr֭$pk; ]g1vUEy:lJۖ7t1f=@9UoQFݯܟdN0@_h7$HJ3R6$YcS9(*ltaЗe)]@ZktOC&N2"C<1klT 'ZgqfifNo.bl[Cm%T5,D^aF@D:~^>6@pXNmDv~c eS=$ w> 7G#yi_ptX奿$d9x_$Ԟ@. aR=`9".L@ƈf"&PQ:m[bzr&-=Kڡ!(/E4Y4 R. lsn 2GK9^f6fd xDg49Q1QD$r~\2pBB.WQOFE@Dr<#=`vGd":$eܰSw7 8kM=dZ~Wt׹$"Ztz(!=Q d12=8JKbXFG˯6fFo<D)%<<<m;u)A_@@n"Ygypg I4& SlPԽ,QI?3EݛPOS9LIw)e@!BS)QZn]jה FB\ iUo\:FjcӔV"Y\[7ʲ4`py?2A3aQDdFMTK8z*J)%"a,bf6#!Ӳy7ퟸWaka[Rvvp8o=߈uڎsLN) ŶoZEJnwڄVJƨ2g۹azRJ7Gy#kbeJX&BKJb63g@eV90YBGCQDIFKO#r  .~e) /K4yR-Qnc]ΧW3l JQmب4oDqs 6RS*T‚-"~Z-ѿγ9Q]0}v e)pz/B+Q);Q̴;Ry%~\W%/ԷuzvvtǴ叓DO}Yݾޅ`4$5TUYnڨCv/$8ƾMnw{,&hEME"+ŊڑFpnH~FR^.Ο#TT"]M{L>&>7ovbH_!Z5ܑA,#@D .&n8#=In3Je8%%N "b%Yb4Rs阁Hodw֑M؊ZZ!0 4DRu hM‘ЀFM]Fxݽ] ,ql5G#ġVp_Ytˀdu\!e1 q*ba#,+MX45BbAe(Exl2R\ʬR#9&"HKo~6;ʨ:p1j<b<>Y5416CԴ"iy~_y:*~X ,a(כE.A&UJXc4Y|jIT2x4 .P&/5CaR4) &>,\ycV!`"蘘 r6&Mc1vZ.5M&1F.{EVIJG(TYѢ&8PjT6ɋGgǶh>]{<' "-&z) 7Sܤ:Kiyf;?pxcd,DD9v/ $`, L0U-^4o?e&oxv$11{7Ckۺ[ԽAC,ef̌ }*%g  ;}тnZZ:^y7Dh^]$DJC.&uȢ!TmK!7tu,cO/JĂ%+f]7eip!k߀]`s%)SQ ¹IH,1P)EHC}"4S.`DSQ!3JU RH)Au굢ϴ _f~o(ET~1Y+e~c\"YV)zrخPpթ{wjp,JkG4A1 Q<7h%[o,DQC4 1ļ܀k\CN6F=O4fd*G&{NL3wTIcSDb"I1Ub R|ԙ#i#iUd(e[ۄ'HMBὤ i T:7[qhO~U_>y-1͏w ?^ X<=miAp0Tbu6o}D6v8[i֩}~)ȡhdh+0tP<3z23ckU}f,EĤ$\(V.ahuʛ8TLKZȬDuoyz6Z6|]֫ZY9;]4ljk5xx7e畷 oj4Ef9ۧܪa H.i筝mf6Y{fjVF:^C1bC䣈ܘ}y^_Dr2Ig%c!ld8CG9ߔ ۤZTRVEI L nF'2.vu[|vٮWP T(V C³B:OVRYnb˲;t|i̦TOCnl$h1VV%'D0t6:BiJK_Z[k9[0SHXD5d8/,QVki^S1l%O>_&9=^- zqZMrw|3=]( uM FafQ'.*Fw,$)$CT(DZEc4HB mA8uڡ" ܽnI;?lٶARD` TEpF/gサN"*D8!nWspbVn1]8 "|a>IYD%h.4y2MG{(eKDr87(I*`H# iX1"& UQCJ"M,Peq;r;)b_.qU8_vAvFآsl{ygD P)"֛*`CtS 6P@I6UI#j*QQgFEW= 0b*^TXLw|؄vn03fUS^{:c<\cS/ƳW'Qd({hh+Frf2ԝ­Vl]8+Vvks뱳}w !B\ )։"9xw{"erLMe.䤊=UDJDxp(:AMk)I,3#l;cxtqը+#HŃQpt̩ ^?4phLj8y8zf0y`ٵz2bp'C ^ c0ݖN y $+/w|ɷc |en~уPKit)V@8g%?:XDs푿s$%|Xs3]oŤdm$GmLDPc]EӡAɹ8E"^xbRXc96{a I\StX *d;| I-l'aMR˧A'x љD7o>$yūIm!1`n&Np™t6 UQ  V(Du'<%pEe:nҫ !2qs-5MB"2F0؂SB) p KooSC(=I.h}tL Yڂ]8N1% PxuH)LvcqcW;yFTafU9D2/p`7rCXV,ڵ'IG.g+1ZƱr<{/߻.g0ӡbW]'܂Rj#47gcxx| o\ĆS!WLk1<[1† 56:n3Q7r}p\a{1=dc"Qs?wc7@aQ7v^9xoS" !5Pi5R-<;lӊV/n_x}?Ǟi}`RpB\M ! ٍ:_k7ۿ+_*D)VJ qi&>HMOŴ.xs9|ɿ|)vo~ANzp__h?ǘrSyIwy(2Ě>iX!07}Bٖ"""aE5ݽ+cf05@&)']gdrWZFN$ `Lޮ"vI$c"LjQӗ bĀǕuQ;` ?B'6WBIU"3xd-tBE@u1G+7-o"q"8KE voY6EP)hrhD=(El)vQY FQ!opH#,{^d^6x q{4,2GPc_ja#'-àbvvk_1Msgomkiٹ+inbv 6V+)8T-AiWd7!*B(&ņaUlU*b|i۫݉w/0PI^Ǖ3rԹ7>C}ѬZUkϽxbsWS[dԺ{!UeHWaZ e-¯/_x^0N:J_{mO*\}׿kV^:'xѦa};O\m9rsv!@kse8\N{ |Ͻj)øZ_8]<1àVĐ|potP:.Ӄ'3=ZavC)yLB7zɯyoH. \/jhTi%ǀD_NbhA{],"{Ng!(z앀VҚM$?&wt$R!ˆIuK6K#pCw$Ma䰆\7Vz1̢(%,= E fKV/HI"H&Ba: e9y\^`5a"eH΍M*fj =\ZA4BeDAUVF2&8aDr D~(Bܑ 0›K@ ݀rvvZ4MӤ$;al1 /vZw{U" jb3q]fHyص0&0<5fifJƂ:ٍ4R+lgqK8nk[j%Le_sLKE ,~++_𚧟wy/O>q]}u_7 7߾uuݯ|O<~q{Zm_{_{?7}oֿwSM??sټ|[o|᮪ .ܯwݾs}|cO?`eR?>կϟ;~=_uX_zݯO;ˆ5ȻϾmɟynh)c)u[~{"җe[!MhnG<96/5 v~}_g> W>tLX2 zDLS\ENt3'(1$=L?bZ|rd?\4T5QXZ7ٸY T*,)y(PFe Cd"A{+ghFBO44T3@8{槩ߔ2'8$$) B )tSA}F7ٰ׍ @0Zd>L@D{eο??QmSgX|q)/iQ!9vQ4O e-C̜@i(HlU`lgiu C{߻g=ERz5<9ʝmSt&^2\\Tʟ ]nO8cafnw2$($0 :'x.BY6{يi8 "A&~nZj0}p`m@ظZϷ*N22Ϥn?l]WSĜX `>?O~7V/]/~{~ӛ>>u?w胷۳}?=1M_ ~?O|տ?S?^u kg~[?g3#?zOgi{K?S?Ə׵ΟY~m_~{gO>7yg}>{"A}՛~? <*&#G)(qn[;3-!\$T_xػx?]BWl KaGN45GpOtBCɌ,/Л#[Tg?R6K6,h(KFFH`fņ2ɽ,R8I]hq2-{A#@QEH94`_.}az|\Xr,SI~~wBB54藚EdetaOMhc2U]$sّȡ>7k_:qc?Ev`tA &ܪ uᨹ@cG0PP(,.CќGl 啁u b%sKcS7Rt*Ac[׽ Uw+_y?7?]?S;?O/_w5To$Xٟ{g|֛?5W/܍W}9w?}_0 Gyѕho]#Ժ`Ns{Y{ăxY#r!Yn&˗Ex/7@zi1PŸBFdjd' YegDkIiT=BEWjrrN8PբCf=BO"0{өT.2Gdrg re^\f_>8a$ɥM5#0K)F!REs!p!!"PjPD"VtKkbxڙP O: дi*"Y oֆ,H,f5avu{k鏞 *vRc8#WC Ԋ)j)bdƙԩΠYQUcml—>(\ FJk1 2LU3 &QPwl\=q]vY(SrN20ZkmuZ`ra7mLt ܷj"e, ü]mfnщ{QJ1JVRz@ ("j$ XeVquhӡ2F4"~g?o?g_%_WP}W۟{s>sqqgs?77߾}_+lWgO}_??GO|~;g_{om[=nO'| }Ш6oȷ}7?v5\#hr^^3?o?gUg{Dp}w_{{K?~0rgS 2aVR,L|_0et% Op9/M̓xstKY t$uw:,vrNQT{7ɋ B~8)?$(;3uC1S֥?vY0bP n!R{TQRf[T4HX al֫X":7we+(R::AK,4]ќcmۖ}1k{o( Jl0^GDG2AD˼@r w_9^AϿW=|x^|+-Hucnd>??_?O~oA7P~3 Oҍ@w:^]]N[~U5AuaqSuLez*co8IT<έџ^>~*lL!ᦛ pM[%8HN%'Ό(ї ,@=Qp7`i7!|_qIv[fKk-2˃#iz+j|Q\UZv@\0ݿ[AJsrն,.ŝ0Y&IB6Y80I*f40؃R/z͞!a$ap*vM+‰<2,>G!^<:s2(Da=e8;}xRŞ84&tB#- /m?J_rܓ$gp EVk:S 8,+@DY0Қc;M(̗"Phr=+$։tERj̦#Bbq>G;lQl5``j >6{LGi" ${` b>'.h%|dܻKݍe bQ"5dãG_U_o6M__%_Mr4r)|*%ti%_w/gd4{;kG}/N> oɟWR<~>o{/mGq}/^O~W D>|s/wԐqGs /zkw]o)^~'}_2, e\-:]Rܽ!kxn;NϠq+?O, Jbn=im'EOu 7x#|:)1s|"613CPl̥VYuwPXDXVEY[ӡ.Dt6 <}~ ]}9ҺHi=FAu?A8wߝJIi.٧8| '҆r8 ! Jm%cn:A(ƒH`DDm숊ǑzhN.cZ8`B)Q(;,ǧ0ܒ%3(S|zbENgOf\B$Da 3I1cs*}@7LI¦ 4}An1PW҈Cֶorwݎx4 L}Zu 3 pA%pnЮOda2pa2 CJY/{<(U 9^ܝ=>Lð+e&s\PaTR&"c<>>|ZffiSJ2}'_oy?գ_]9G}~g~ʗ~W#kL'B'bv_~_/ڏ/O~}o~o7W>ޥ a>cpTU5b6s!-F#ܖDcĸOn `o]cm5"N7x)Hf+'ē'N[W[o{V61`vz,n)la(TXRxCe!W+˳OeO>P:P-xMV򰴫wqН}i>/OM e(ErA_|sm^wðh,i20VGQTFGY0j:9B@)kS1}fa,bfdJR㚙Y@jnF * 85VZ|j ]M,(YJ/Ͼ?yG~7z]fi`&sp},૾{||??>CC'|ҧik~}0 u//?D38@Y½N8\___?y'>3>|؇ǿ{~~Mm]椨 IDATrTeY%,>3_ C^8t'~mf/}Ɇ<Qݎ/SвosyrG.OlxbM6Dt֑2tEx.q&4d-'CW_Xӷ*Ŧ9|uᶋNGppr#wR`2W* ¨Ld\H);)|/lD4L7T "0ʳ/{sϽ~ CrNoYKvϼϿ0nڜh9J@ IJpB{RXRV@ <v& TC y#y2!ZCmj:!G:$WrM'/N"-1߶[O}a~~}%Aw7: 9B#}Q ZPF X +VTk f6C+Dj \]XUKi+IYnf-4̄P#ZWfpb0kFp3з_~ۻޏx|/pqqn _qbEqAG\ٝi`$"Fׇem_|K_iJoy? ѝ(/;=/ݿ 6ype `4/~}+Z2zMaUmi4/7i,A<XJp37,Dy*KS[eys[wm9UQx˛/xwl<ۭ,06/C=Ʃ-W/RϞQյ:s.ׇq72sZcUz{`s]q:uiMs|8ԁu]-˦X=oLޚaĻLq r}7v[ڂDlx m^6S&wZduAp`VV8;=Sa!& D hliǘ vU:|[ I;:',M,~=+OO"?Yytש`~N(w? $LH{ss3+LKcnbaJ,@paC !rkzDjw4-E{)Vwwb 3Zfdj=!g{/Wx9LǕ>>zy= /XFc%LWcva˹:6u5kuUb7\솦ѝ{) Z 7j b <@9*W{ ~OrO8X=) 7EaU\'(Ng~ʰ{UnF̻mTPơ~»fA~8LÀ)"3Fnff.<ӯ:^NqPVO5t' <Խitap*:C]V6g%,Ivz=U9=@H/:I$)wq d$wv]ڍa(@sC3HE!@uBZJX~YWZ`22__ڼ}" RW W"Ҥeg©~±4)TIF `l'hHު'"|zېKvd'-)FhY"5( [y,h z&ZG1I_'4EeyaCf%NR2i268Vu"QkqJ:<ǚ}][kBL1TH0#a¹,<i' 3 iXoeOQUCē(Ru\aB<ȣk[̯5ݛ2Jk3. KzР ʥyZUumAغ4k` f ykŭq04o됁U'gۡ]GH_T6g@8 8P#6/>:<0 0uD$y\Dn,U; ;d\J'R` bqWRc>[+8eoq~ 6;EFH| CiQMbD">ho}e&pa.%!uu1FHUQv&R0x)?p a"]kiF2SaJkJGbukzqvq?FAVp)`0 8Km4.bP$k2N u!|h=vuUCO!y3:#IHB"B5˱bDVB!""LP9eb#܂ EDͲKé+  qǦYtf$< v0ok }!-Ϯotlr`mNg3]RDqh#3e{w]Cit1n&"m$+](!C|`c&0Lj7z!&Zq+7>vh)2~$z)X q!qp U/!ymU]\9T"l.=M 5! D,ŚP@%\7'b)t1Me`&g( "mNw:-I[ydlC]4s )MmY΄ π;m)ʒL'(2tǝP(Dw;fɡSqHN w([G4"{=u%ӴO\R̨3>oeh[|\ "E$[[=!H]ڌwNE0S3sf,Dk-c}CӸ0GH.DQ@6,xtP*q!jq$PS@-J\K^8<|^۸"m^J)M/U}i՚-~0Phؼ(0RŃ /vto[k$<?i(Lj YT`4VN" Lɩi&VZXXP5UmK df(ΐLm8܅b?`nZjmԛ US>'@]9#%dNn"؞9]S?"p g(8ĉaAdk<,܉jZqdmFENNz V@㞤s񨺖aZP+ 7wCqHH09݇zσJ..]tS 𤎡 g SRs6 NԌghތ $m@ "@"a9P'5lqXD[iM`ymUF(ۢCr,A0Er7̥=ASߩrAeC*9#T9ԴaYL[…NLUXi6cvӺfR|dmŴSӡTq<6n&fn"0X5"P*03Jqa 5zyҋ֚p/ǁ#`kkֻgǶ65mTL܇i寮LֶV8ݸ~\6 8x::je0Te eRjjƥaHhD[#bbE|Ogn6 E}(4JHSMj)LHLAڔS9.BM[&ﱑu8;Nq[_j{0c{1GZeb> ڡpPd 3Ȑdl Iu3aaaՍ=CdB]jC3'H*oDz˻tWuc~B)s뱱n}_޾Ϝ.R}a$tbO|Hq*}\LfA{9y!Bf>6/mxwg 09961f`0Y>w6REyE) 6nNB@c>۝Oׇt~3jGp`=z+,66tSD=}z.7woO:e۴D6֧O $[[Y:̮23#XmM x G6)N׭&E nFUf GvV~?PeDžc5: ̐kZHLݕƺ"D\ADH0qqSִ҆T A.h^*j%W?75f7"^ļ2CFum #h5[=v#Z|5a8ɬ\8q^EDv]*zTbK[%GDxbhj7Pjwq&Yj ffS ww5.??qP],ь ̍aIm* A2wS,]~ppa'ExZ1"pDH1SfAp/'޴d}!ms7;9,M!/7xADMkNHa )K"S9OWtn"ĮJ4a !oB,,>Rgy75y]d2}Lp4N['j *JިqbĩbYO?px[Ie2 ".6ݻ;%mDiKDQe@Swp1n;< `B4Zxnܝ &׮YA . vѽe+mde_[4$=cXdsMގVOvj? gNB$=b&JL Y m'^[?ED}M+_M'yw[8s(/Q+9LՈDT殮`6#}ߔ8PZ3uvs5sW3+hT *ٟ6 I-F bpeŀõGDΌ2Rbݹ(Rhs9尬I*ꁫEg!&I~!^xD4|.㱩qQupΗQQJ`Mf I)e %w h F,Kkd)0eM-/.H . ī6U#l"Jf?+C~'.GݐN%l݄ť隆@|D~tluf᜜ՠ-KC>a@v<(q-Mhe/pReD[Lv΃/#_5|_y\b76+Lndž7A #U_6Zdž9 TMD؃kJ;]MJLAAj{1ki*tY-d`, )C-TZ͘ WS*^H 2ppcH.,y9=Z[[i w jhb7>\ڠd~4Y^eWJ2qLý9 0/yQ)1 W(w WƼ;ji296W5Rwu׎??5y/OA쥯cѿ_`qS"N ՚ pT[U IZmɝ5蕛gjiZn8gr Gg"gyb3JUtny3 '2 ,b*|hUʜjG1&PA+c!)aF/"5lXJD/VlLVx |=`iF[nMp:"Itiʈlp |ue4V\=YFH2OJd71fn(c-TFRj nxҷ@)oF8@8.v\\5'";R tGWj`+7Ǭ?~2,~`e;x8qm4Kiׇ/?O/sDk#_E _GAo?Bx[C <~HPj[U՜MކZ;1>$[08uU昈 0d43Odoqrso8#ba&BmWt~ndK$LЄ8V!Jnm ]$@tW颎$9iӕ+مJ&6X{7rIm]4J T2s.tPyju$'ell%)/D2l+oz%hPG!"<ՙzm@li'RJpNp`n@)f Sbv67mfWR&9 xa3p R[ k̮ 7!`M¶Ļ t8jѵX'TڄmJP/+"D= Bn ^I#N:`֩'Dw4kS䥓 lꝈ<;ﱞI\ itZMѩ.DŘ=EE IDATՇ:"DRA@쥆[>oyLĵ#9YFbYdV AQJ&Ӿ|l=XVJHT/<2LgP,f|^DZU^ U4`sh֨G ZeWwWՁ[)S5DRjW1ZbEݙ|uESpd;w?oG1/{C>C _O=?{?WFg_Qd$#4ʩ:1QSEjlt.988zZ0@P$ 'Ph5m:Ѭ">LұQJD̜6"+{ w.m+̝Ђ͆]@ox(;eFc*C[)xuEͻ̠rӒ4rTU~Uh=Iu4܀}jlPٍ! `oNrؐt=xGNl9h st0|+PU95ԡԅÑ )p&';y0Munmm,v(Ի213S"[O:<""!L>3aa >ih4 n" d2nd,GY v5hd}Gу. 7|1{%^ BՉN8]_ipXfgw55jSb?]qk@D>Ͷ D \TRk*)ĬH5c W)61`o#fhdY+,H9db'[E%Wܛֈh1[9؁ͰG7It @XtG)M-ӣ ujA#ڒ:ZŻmllpg*T&ۨ<7c2KiPmn6k3ozzoRmUrbn P#wb K_YuZPkk0P6}D7{ rPJ/̬4\C5 RObKy9kxwcg m>@~c3ylp o< G5.)*<ϾOw@@nhoMODM,0"՘X4n z)fu:V≅ӂ:XM !saeEQ+<% JT O{FB b0K-e!(Ahp03-7h.~\""0EN$rl18Zhggmyq݈SmTx\=9SH E,lLTB0mpqq]ò;wΞ~n~Xv8.%pwn~'֡;AlLeyteo|og}4φݴ,KjPU:"\\K -;,BVR bV`5a@eQ< 2Hrtෛ=mq& @S 2χbJLIFR6( DЦqzg]0!3#JHmy3[V{8_d %ƌKQsl5$ʲ]# &MV`vb.ݷRS©{zoˎLFh>%`@ v*N$!6E=@:T61891ެ2 N`z)6"'jMmUmUojI PS"xS 1s@N&=aݰqC݋i5L$/!p!P>u˨ w3]͚š7D*vO'#]cr \q['zBCF"f֠Ȍm!xD߽g]1@:kBSni )HBӮ80Vbx`:i0 #ʰ,ndĚ4R* .cu J"&*"abXX)R*!*0fv29EaqI8@nw6n7%.efQ0qaZJfj-2wt(%eYȄr.cJHYu]EY T|BF9ʜIjWojۺ=1ks7ޜkcBh_B [ 7Q" *AA$ UEH QCPBH.sk9轿B{{G}Oi1g x ,bpN@#Sf2e0*LTiUԿL"dn26v|G*&~kL Qr65ͳf3l6M&Qgߍy:)E{iyᢂ$q'd{:fJ[p'A2c%矶܈( ԰,$7J4N z~2Ir__|^PX'tXVCE,(j,0Ƕ0I XAHasL ̣;G6gE2> l[?_2-\X,@ &$gjBEZkέ5jWAML*IEX>jp] @SXB8=@8cCʏ| !KN@SB48 MF}?!| R䰤$L"a)~S e\Rm1/|t v#bRfun"W`L栲tYr:8j'z "*$D,) ,WV[AL\h݋U?&qTY2fen2#͘tR! ـem>h:JQTL ȰKiEp%p&bUʉtL/'d>-mw̝zߧiji̧S9Dcd.5"f%6oeV% .nNn*wc1V, /3 [˻ox:20Ef0cjyLJ5uD@!^D%Tl"H㺘zà$r< q ?."HWฟA_^ dyp S3z-£"D &mD7Ԛlael,YPD-TY"d|ifsC%Zi Y`![cUI%QAKbКhC1™n^);ݙ,T+ 3lM^.NBS345m}'jp/=dLp$rZ2Br)N1͒0YBDhLܦK.DU4M-FM1i+ΒX4t>;}x:IhxdEUb}E$<}37ZKlt>oE1 o{|N[S}memG]NgQyy|̭GN}շ0?HO姷uUm]۶40gNin 3O׿W?uhU=<2 B%%)k?Kj" 2s]zqKdCFB뜋Jn>d@HYu3aY{VSO ^e63yL,w29 {۶G^Tcqp{L-?/YQQ`i#)j r+N 6HΠ^0>8G&8@J(TIf`2g(rQUVAE6i ,E=®w%}L^*'}lPUi(u݃@ DZx!lYb JEGtn̨BS$(yhe iM 0 Ӂ/3{O{ `k"E=zxW SE7 > wDqXFE(D a#єp\iONGx#G3sBIQHI8A38#^LL1*'qx: soz,ǣdOLMaB^! 76 $hlDXqH S)ƒYzbwoM FBmҗUgv[IT>k\ _8m{Dzsح;?n" ^`d-29$&s.IiixnlB3yWUFȈ!(Њ_5P1QzLShJz5Gy0ieL;[Y0)11ww!! d!blE1LC+@?(Wc-2A湬̬ k'™`j"Ad:6 UﻪfDSa3ZQ,k"ALY@k=s0U! `PE(2@)U|gpX5RVa/}G2yF !LMY=}.V/AH sPCX4pϯ/N5ve7P -mj=}|vB0)Y৾fi:4<6}?ЇX~w3d*q[o?~kɯ_~}}Yt2SCrH<5'mM#&zitaCZ2vߞo'nQVVK%9PA T}5MYHEaIz"݂DDZkOOoo; .#̫,*iby q!97wdA!2Ş o%#n,"=hu^ I)"`Ep$1/Sޯ"r|8\E~8$ , QAd\%uѤA~QQj(mj:{O?Yn.//LFx r&^m3feȤiG/0n}uáw;,3MS΢a}Tvvy ޔͤf)3{6OL i0Ѣ?fpKok"2s#n׭wֻ7 DkmOO=72-'Vn?Ӥlo}:5kSd"2sJnm뷾{DǢO IDATm@ZE,cOs~8mgj%c}ff6%Kd,3wϽ#gĠאcT~8% deR" FTRԈDdՒcVR|;vY/ Ԟ*XAexQڷӃht--M-瘛;%u)"Bh:MnD˲04}f'|ywX1yRTVPGڠ)$3@Y  7c*#82jPpˀ4r\LHr+)U$Ԉ|@~ ̯z0GRq\n 70nD3@G4E%ʍ|tB U$@g" lE!5(3(`q^o:jp$N<JT%{:T*q(UREG&*W2p:کĵhq9P}: ڎ;s?n L+s&"y:- v:efm,y:XNNl)#;N8[7ļqM7eq}Hz,7!5||^l]Tu%&̋.kM&L& 0i47Ua&m"wc$mLm>=]m6eQƑ؈jMzI:~"iO3)-ih}q>9DvvdFf૤ϡ0\ Ffu߶~ĢaV/䈠ZG "#dFߣ|l8HP( 51a8HBQ':`EJ xPeh^ǛcLRvsf7 (C9!\$0Ø+C 3)VXXzTyFQJ$+ϓQ p'C:+e PrQJg 0s*LBnGl 2U%MQg͹SXkuȭl(. 22bWX}<8Yh _X4FoÄ1FCR%YhA>OދU`*S8'mininl}{7')ЉT~Ƥ"mw7כ/sh}߽ڶͽgDmMĺk6 Kl[;G2(r>%汛GF}MO_~t:O>&ړ)M"V{RQt^rYX0Ԁ%+|y /n(F=3b ૤~.c\=0ZpnUS;NN >}|\Χr:~HYԚEw ,@qd^5UQI1a!73'#Ղyt.%F1LQkX(R]$AO29>Pӟ%Ersţ\t>NDgg&{`c/'Be""=iDk OQj$ f  T<(纆S=B')7jޫxvר.G0lA<.z)I"Ujԧ3a˴L&i6֖xl*`3]X1>ؚZq,c@¼~}zΗMv}{R~踱`S2O!\< sԁ" ="U= @ ̲!EM;s#B"ï>;1#(HŅ"$" m>f𽲗c)̐F2D˞۫of+TF+.P3mg!:}nQo^6;s;*!SX./?IdݣarFq 48R{6U:J8))i5n [_8LU4T.jB]ޘ%%Qrk$eܣ:1:YP@?FdH#WD#s4E2n ֻNP'7-I9X}D{Dxm5{yRLr`uU})RLfd{I1ITDi5mԦl-E:1qZ%ҥ55$M'p;6)#,y7ȼNJU)Rq|T3y9N5p,F$IRD r$<#R8tA""QmJvg*?30zʢ+vbdQvAGs}pݷ\t:-Ha4n +T&!ٌ[<0)cUf:dy(tJ1m&sȠ  p񧟞.O˼@]ݼ?SAȊk\6n5a%,-a2rnz%K|\.AkYF$UUO9@̙5"bw{k{LM&D*)")*de"=%KpSj*8I/2A| 阂Y@LYķ&G\"y&^ǰc$, (;.hY#erDHE"I@AӇ<%o[Eí&UY[(!$z<+Z݇<=ZV@8lI&ڷHwLV}H޷$ط^3j m7*C˅ۤ۶m+{ 1E`3E2i}ө;R"O-D=F}gYv0HLH="t֦˧1t,t6zp9MS(3-2B$EtwwN8]17XS(()"7:|n$[mo܆,)jRgXZ\4eaE%Na%1.y4˗僪nҚRF8<r,L&zzyΌҘL&$tQzRfȱ:VPeTvJdAH"j#u'r𵘅5_]i4(<۵ߥna TFf0i\vՕY)񰤈Y 5v"yaz|o<ǒR8*V[!z?Ek!AJRKKxhFzgfIb?G.`IQfbG‘T!BLsDv_u6!V7R[ɺBTHߺ0~=uC̽)wTz;_\‡J^SE@ӣz%Z-ΞDz>&N|pCn6lXWG"vWn9uviЦmuXqΉ)/ZUQscjnmKB{30;{Ы'.jqP`H"prvROu?\u}?}Oa|絻3FFbhjૌaޠj*ښ[~x^sۯ\xV7I$n1}$UZ8*jl4U;( .'QzT`nHDgt4dV4Q$,jiv^-Ѹ:Fet Og qP:C+U-7LLK: Z(bՖ f{ѐX;8ܧ<p"f^F/åOF{4y|ѴYGWv@N.$,hySg2(KeR>7g_ diNDto.ECY0c}J/ urk@@2:eD GQqbRu <Mvo2(]]NoA_8sJbVȀޢ{0%Z\ ~#mnd4 VJIx 1tܝhI]PSqa{YXɑ0Ut13&,8Z`7êJltW7Q"iȩVj%uu]|9WND"9Oa:9SUNxpszٌM%{zrV4u>՝h0J^oM<ԪVa4 9A7mC2댹zx*m8Hbx\'B7֓:)y:+DdNOX'w~n}'wCV˄ͯ>?W> ^J>yA?AcG3۳KvP}b?=f,m}`m. ȽsƏ>\ GvoT&7~tQ KJ=Osʨ?]7럿{䰾qˆ/zi~< #Ͻ?}k!gWl}ZVW>7w?pmru‹?`'.`1Kݻ&7 MG]Q)EPi>ޗp1v)VV=zwAGZ-@_S;_^B"%a]g@^f肃)T j !j/6]!Y 7(p؀S$C ѦG7n'OgZA9$a3.g\ɰNm!,w[ElLҫV;AfR36pRB'xOcZė|6UHijAT0\mL,t=6hZwg\wەeYX9/پQZx*Seyr+`D (E,%Rqeڼ^PWHNaUmN>8:F@`ś 0ZYvwBZ\\xuPwU+-f(yx-SL''$S<_κ-R*U=hsSa9#"91͊q/sՖa{Y6Z9. _?3NJpw5re= z:ܫZUVenm*|vrI)x b#oDqҊ1xU riݏ|,gNm|\%z2f cco}?x>-w?繏]_| /:?;o>W~?b9o~՝W>n("d&㏺RL<)_=qVS'gНͫwu/?،ᏽO2yUGҽ[?o9Sqk|;/~R*_/_}W_/Vѧu1u *'7 XOXYeBZ`ODwk~ {\YELjE/l968ZT%xcb 4fJmZju¸:.m[)Эø.H,q\y21P{ArH ߥHq닿a:t a:s _h ZJ<υ9;zkP%@ZZclOKi!ZiԈ,9׫|65Sc<$wV;}1R'6K(c ymmgw̋FUwܙ<$fi&;kZTە格ZaX)^\\ΧҔ.boϞflkI'%J̥̉r73d.I{( FP75s%Xy!CN_xܲ?ο~+k+//?55ɾ %g>7ǛRaX`=^{[KFՀLCln8kկox_5O_okwWm?y^(gGm&Wo_?}7?[.Bi0>F:o~ӃCL>g|+~o|O?Ÿj}_o|Jx#O~8-9 ɚ!iD̺ F gJ1Lm2f^k V{69t N@bݾEݍY@f U1V%Hz8 cЪ~I|Щj+hV].ã*&8tw8Ú# !\j$ ӄQ%" 601Xu=9#ƴ;q aPd,!8e YV2maHpu/-),(b/@}_.Hm>>:$ j݉c1'Gt=ӅPjqpӚ{֓6զ*TUМ1ǪZ#5ot5nW &jJֆ!55BsQ1 aC8Z{-2MJyPr9ZKU:`5 3ZU'uXsrg6M9#eJNIZiw/yB 3KwlʥU/vpV'9 ڴF-.s*̈́@!䎝wՑDv/?^zwܒb˚ jEIwc#y2 o'V|{ű{O4?5<;Hr4loQFHv3ܻYd8>.vfsc_EDž`jWqdp+~!W["J}b])ZX_q%]{yKtjĆX;K Rkv IVs?y{6i ( A śucs'$8$lizpjhu8{|ˮ-R4l8R * 'XUW> SͰ{^=$TÎ3@Vh<2Z@hNVvlrZ0%%,78PS ]ܷA0 W~]o?)Iw}spJ{-XQ}N]&Z1 PN¢ͭuK{9*)\k+֘ٙJ)J<䬪faʬRm0q"H[sDzJ"tC"";JEI W,:2A(+sUj6s40DysN`y{yJj`Y$@}WKuݶztx]9\BLJ+[9MBjmrf^oȉad-i3&y*V󢴛*EQ#^i6+矾~EVތ2nfQj1~ƟH9n7?͟1YG0s7pd;/Rww> IxC[w:)!q&7?yy?+?7>ƌ},`w]foY*/;>x9qLQXQ@5d&ŪGݛen zs0\۞X]_+O[=gC֜)U:$9NNvǗ3}hndRE3k[fm'Ąqs 8j#V[;:c}A,{7X[Z~IzgҢ>nNQ3E]"Lv\I 6ǽU] ~`y3;O& mq8Қ 6LYRN3^qΥ/y/t,zhԈ>ݧ@D[omW1^ [P:ƽVFJyVɡЈ>mJIJmD>f1SR3)sW' :j=/Z-œ@0S3: cJVA.M"xt9RHvX2#W,k_S)gfbqYY&/Ksq~y;~ഴƙ-8.qϧV՟si` Npm 4d)wPyX0QNݻ)̪9RNҚȤՅ.1Wqd3&hcyΏ22Ԗ8z'4oi{AO)%W"R9TMUCmfѩ2ɑ>7 bHzF DcZ];}x3^lw~qrJ Om8r{ִ5._ ቤfԢt6f[d_mPskF5/"niWSW_2QuRV;Xw"q 3S,ŻJp'Zkk-#oͦim˴?r\~MOn~/^=~p91kUޚT6m7\Zk51`5o &AJ䮦ΒH-V'ژGwk]gmj*uFr1rjLZk=;ۙ@Rh|NULjZ}ڕz]:|}#\WYDn>=yO޸yTsan޸G뇏קW2ת&mG?3vS"(;zn)F)m?VWvsrp~J_zr{o;ofTOD933;BI0t'*,yA?])àĐ|:нٺ$Դ1T>ɞSQzep[J:lAyQ0DPئo+ثҁ}.uM< c f^c$"rAk䳧Avc-@OT՚ZaWSIskcrvS-j53NL)Y7T17rgd<ԎGdfʜ>̗"Q -@Jar4, ̱Ҁ\մϣdIsҴ|^ }b"r3dQp6JJ`r-~~swyh!f0ED$*{v"k ðߨں%Dpjai2d8+Rr3@b@frdY֛}֊'p0jӶxC-S5{ X6k $(_9~ wݼ痭0ؔD@ suʋ;E Tk @4 >uM_,?S|H=9/]Eq3ssǧVs"f*wxr e.URY@8y״ļT/η)z.λI~y7ZQ{eBbR7"Y*Y2,xg3]h3ϻ]2MU܆$GeZŢ@nQ'-29IhJwiNx0 Vhjqbn;vz{z.ۦMi3ڧ3޸Z-GDgUU3b$"&bGXKEѨ{d _yonZWu# 4nNx>IF0~U_}g #n3'0=$=bKmv";Ja4&F_|EpѸh+斘J1:?kMrU$LIȅ1zuGO<׋m-Mhmށ$ĴNCix֚w}1s󙲰A̋XXr]~vMERb"Ն&M<ȂY C0A` -t1 ZM "أc-&b$*GI8fgy:osv֗@NhyU㴠}_3"{_סE^@nWu[XpsYzVW6qؐI_p f/Z~%z_?~aLrz`JGݴ=۩ ͬW!d pIb{煨on|K[k((Əx._צ4'5?ߛ,@+8;TIϡ-&߶l5Tm5:12 9 #(Z-( 9 tewTJmm[tH$}W.x_P]rA˒] ~ܘ<:lj3wV3󟳛Vrbɹ658eMcv"i%n! {fsZe=lLYq}ڬWf;3mrps)4$̆\KqRr{{k'a\D \خGfg./[Ց}R+!prOU[k]DV_mXieNa 1݇.Ӂ$!9)I2&MP?z?&*̦u#-ݴB%=~})=-%Ǘ['P"?b^j{'"+"dҽ=wzܑ܉lnJڦzs~ s SKm^_*:n70!un^ZkYQ愹nc!y2kWŀxmH=]+N"*5tM$@磏XpX^q?'&4{7vԭra). ꭨ 6<;9Cݝͧ_5ֶ,;s8n` B)J(qPBb@d "D8A Fb-H @bcĎ#9~y=g֜1:Tսלo|_/+H:SH h {'!2AaQ2 P΀1ED f*8v8p< .uE.W R}_$wRt8C7z/~#k2 =]nnmswi%#8"*mۮ%Z[D\7^W/m\25!4aajmfu쭒B{4 E @HkXE`b&Wmy>NfZJn:OT|Xzu3/fzؚ-E A)glXJ{LCk6AP|tNd4ojneat sXխ)y f&?mP,cgmid)'/%v`J>I$Tbpi?Kg4{ɢijwp˱$`-H rkW9chB:U]7׃_`L@!G`R:9-9ḩ?חZFK;tN?djspnm*,j0W-f:A"uwDevI6d b*gd]O  w =ߌ6簼7HDܗ,9H60hް8aNLB8fVϹׅq i,<9Ga~Z=Htt1[h{dܡ5ЍӔk{=;ua0h`, kkꭶĸ+"^y~ J[I7~D)xRz Ytx50Df!u]0\LìBGM)mk6 ,<.aaL2V )jᰮ+jaDBonՑLE$"Zk!\TDL~$DRHa*VMnk>5YikU#)V=2tۅno u[-2:BB&{۲Ne1L.oً'k~" R "~{?bp?Ӝ %ث,[1H\X{ 7557h)DxGLR4M7q1ͨ]R#б d6F@?Ǵqz ijpo:i?#b\J8m1J+ހ-'"$fFLJY|r_73psN^ =ck^\;"fi9 j6"يɀ4#qwsPO3cw`{r&@@iJ)YkD `nr*C#NDnE:s >vecضM&I4U[ | Լ61`шw:@0E'HQ\YbN$"@rH'jhᡵeO7BD5z4@-U탏^ ;à ͅJj>2nN"ƻȽHbbdFf{ȓ̇‡8rVvI4;)W,cdM *it4`ɸLa'FH !# Fg$O|U+t$$BLO&Q~YmD+[H+s@F&4hSUC&  Z3ȲOM9b}|ȹ/[<)aDxamB'/ؓthf^LLFrΤfaăA"$K-ygNV`ogX:bȹh x">MԪc+()QRj v [ǼM#HQ-܍iyf9BmEEt Gcp 0O[m-_{|yz55mn̘pyG~m7_{?鑞xG?||y'wub2}Mx;4z0 MHC4a֦4&Zmmf^f)K u"b]Z_.Vc"Dt_ ~MaDD"cu2 qOuy+4s?|ywdᲤ-c`$z]oO kxLԈ$"9$f7+,{3fdEV 0_UJGΌQtA.*uٕ!G bKqRFg ne`{ xՋq,2n=GY5Ͷ7]+ |][/u&ނ~Sx5BU.nzø_2U7a>t` @7 1,$Wš|瑈U@4h< w@LW+#g1ogO3g$BfX1;o# 2#o[35UkDHɔ:*y8!KLB6Wu55h2GZZ 2D,BTF"n9t,ʵ - $en[-SZW)l X˗/?⭉|jfz궱Rf‡yFD3&ڵvkj!A4_"DP MIЫ;JSmWzgn o{?'?zx8CO?gϞ}?77G0#<<=t [' ́rd8 s|.|ŋai*S)e*AJx{L^_+gABNYO ?5vNŸX)|C^/@0_.ܾ8E^q.ؚ LD&b&fH+e9HaI퀒@ fF CjաkC-Gq0ųp }؜=N9{c"';QƠzp]De"se$_{9~wwOo?7>CDIEdBaPD%hobYעP)¥j !R nvYf*LȄB0>9DϞORC!"lr!{ɥaK#:gFD$ R'b:,eR×W-{]^7[X5mS)E@麽ÁL?0Bڶ6p.B31SrU/c="g`ѐT x h,{ ] wcn5~X܏(ճ?PM<@$RJ".;=lPrS50Alp\L$  vQ>]"|T :h 4Rkm\q6ɴ"u(gaR79! PQ] EUE"@ A'8+F@撇0Rxc^/}G}@@|zܗb#r? "f`C2(1;Q%MF "pY"T7TSXziZJ̉^RNV7z.CFJ+z\_>8J#p˦6!dtFe)HnK)>Y͑tšfjl\8,LRݠ7o^X?;> @.e6/Ưf/Y__'_g7~}N" !HXCyq"0 O4 0jpAG[SPgsQgZ`XӧwO= +8s1bb!Na[$7CrG8 L-t<e*$oxm;jOޚ>_.o?#'$i(-Ux0!{EZzuPJ)cqxSxt5z{z t@s]00}}s7)z˜YVɶl9e]Wj wY{ƽVpT,`N "6iyjV6pD d,GVP   ?rˆ[o;̔_АĄa!KLS۾. Yv i !p TXL8a v BTHFK)ϝAcf,κT`*Dʠ7?תTgn a@;D(8W{edbihp"uqfh8g/^ "XZLM55YuTmɽx $ʕg gLɉ9ܽ1U$Rkm\YPkӦ431X:$P&JNDj%|*AtY6V'kJmmaY0j`cVӭ)}r<)Z&<0ts𼙹;zPxxBk2L/r & 6d[C3؈R\ui^/ȿ}¯}x#|O?/' Ͽ/~S_y " )`բױg&JF\n8`QDH8Tz1@rY/|R@?={z9_]/m|^"lȼa;@Ci*zS(v}P@>y]p`&k~cQ6+~NJ@jBpc*3=$`҅rp4K&G$ L1#A݁9^D$!Z5#2gw#bg^tp2gAp!.Z۔)L69%Bӄ /׋{Ǯdf `ADf 8Ɲ7AqGD[Ô\fjP,лnXH*ή= @4!ǀ!m9`FoT3%`fwrO˚`zyp Vݡm TMnUVt`Hfn!p۲z)3| & :M[zsZ#BiʛbM(RɆ<p8-̢S!A.rnAQ̫Є}aSuOL5 'f#Ԧv IcM3ǍlEP"bfZE[+%"@6 #V3KӨ5BM rگf8Q_?|]&9ޜ/?}{佯|x|؏^gϞcW'w9"y3Lw0$\H ƲDBauG`@CRh4d񱻏pE9ݽGco^7"\|x""YDs!c0@ӹ)0r]hR!m~{$ZExmrSuT{@4@p ȆCSf*ˑ'W2 E$~Ro͇gDFeMD.?K`Ġ'cɂ$rk_1욐rr}h%"4/ly"=/&Kì h#` ;cqH٭{Gu ZLm3ڤL[B9]kkە;\>_zf)uӶ9%zMeK̨u]ʴE;,D۶t3jai=E&^*󂀪ʄ*S"Rʻ_G(WO=E3!0B p0N͓x,rbG3HR=3,aYp.Hr Չ=P6q9,u_xrcjmcfDa -”an<1P8+n/Z$| 3#—fd T·co5`K)%;f@eA`sΔ:x:ҟ!0aqߐ1# g,/ }PDDd G\ f@ʶGfuN;2$le#'D(L"_uv =OdˮN4LB=v IDATحLZy#aBj,ZM-u7k<>6@ a 7C݇bcjV-<0(xa$=1˹~or33{$;~66Vr C0 9cPJgX$#GxC1{ ZkM!ЬcxbR95$$@ٶL\͍)I0afZIԪf[DuA,XVk3kjPMUVR|[[ՊHf2 YnnnL՜ZQmc<T|92MebFfzgœ85G*t|r:"ҫkk]Œ  ^[S-3cYx `0s ښ3R{ 1;-I!r266̥'Iҫ T HaC6ffA@fB,VH^߿퓻͉cx対VëgBNy]5o n@"ivBjWFq\泯[PH eKLo/?&+;7$+|5``tsUE]0gZ%}  Г@bFN}bRQ?${;O\,޽=$Cz8WɹLe%;<%TsKw6J&R)2S7`"(E# WGC,[-k}E 90 ; `aRZ#"p&>ᾶAfG }18Lc[k1^sD$D)BHox4-L'"@PkST =(@\(zPs+)Dtl<_Ϲnu=Zc:ΡfR8"u[WiFk" ɚִ~%)iT&w<@hkSհjh{n[mu5M#|׭+0k?ۦ-ef61?9,E|6&4I4)b3vi dOOfYڹjigpi Zk t`b)L N3\x}V` D\Fwzя!HfBH\H",SrM1005Hm7:Ƭi/?"XvxF͝ +4T<384D@BH7& MICI14gGԲ-+>sls%!̮7=9=kDx8ĩ?wL0 !(h2݌̠ND@q [$F#ùR؝zUp! @b@n$A-H>s!:)yzzh^\]U ": &&7[4.Ŏ0G.d } Tc4u{p_A#X8 \5DJl՚8>Yfb I>H/41EbݶJB$$u_V+5\[KpU[e3;_̈XYk aC$ B`VmmUW6Eiv,6 \R""Rk+#Lb:x+S Us).,̬ź\馶L|ۇ^4k=TJl U> U^LtP/,5U\hD"!2!5ԉ 'BPUn]}.+GTɉEV7z Oo#Q\W'CSUxTP8#rB:NJaY2^0۲ AG2sI#'L R~@ @"@^9"̝E"Fpf[ N} SK~(~28)P7gB]XXrs^kԍ jhb 1Nu{ay%Aٲ n˱kc]0ƹ+0E в0\k)Ċ큶ZI1$$w 'm  YMγE#pZ}xx^:i{,o3kӨe}u0y.r(bf,O:MYU B5&<f$#%@,p3?oznFǙO <9_oRYhAA8gAW>NR:4\M],?=4~vȞcpd1#=r_T=b{GXʑeXc1VruێsD"Bj9'$_JHDx6Zݬ+3auɧ)D1C$FJfLڎr*Pk!".Xwd1AwϿLC/G*Wvݟ5=}@خIJMqHڈM rDLӔPhyiKCF{i.jZK)ԵKU;@bb ѻ7eaL%.5@b,\9we2t:Epj :L<-VpȲ}s^47Nڻ[i7!y(}EE}kN%|/|bjv2ss `P@.9T;nbsUO1P`p֣?<4Ef5[tFDRfUZC-Y#BB# v9k4"@SuHA]0J>(H# @ @BiMWE{!0 cS"閡e';AC Qu0 hpH X psdx>Du (M˩aJ\Ұ%(w곞w{hhcP0Ѳ>I`f]]C8{E+Z`l!*Hqmx8/؊P$x릔8JļǶ,o{ͷ/v<#I7Q#agJFISC@6[3f06ly:cPF,0FSqu<i!ֈx5"0lZe`NZ0sA!dfs@x$Ld$ᑆaJ=Ja#ci" n}eۗoyftiFPF:.-vꭉJBw0HbU֌f䁀emq&L׺F_)zU`fP@*:NڔBZWW \kOkS#pX殓OkWWs´:ĸ !f5*;o7qEepR [e;%Xz&G <*YL6F$ d˹_Vf 6\l)q6-RzO @3pLP5!F9M0\qʚyS- aRjamjpRZ(Gpk DxÍ|"9?P,8GWC+cenD58M%nDA@o6ٲNSj5{N'p +鹉DuW5aAB7o܎^jZA _"8=L4l?< (ӧel t>Ff'Ca !د\@ [ms#,՜<8/D<{ ؃9;m H>` `Zrs0.TJAu%^<"r)u/NRL5"u6#qެ/fbx&E`#po_remE"; (] ҈Tu>p3 8"y83ǰP$ KJƦck=A MdyhV7Ttɝb^1;{ PUo4MAq'(eގPx R]T5JewT"Ճݭ<ש0bP]W?-fO=r=!{7͏!Dмޛ^wn]8+QPP8uŚVi*iS7 QYL",,,"Sy" W# 'ʱ-QmC59:!#ѨǼ1mt٢9jM/1ޤ= U!,(acPp=SN6Rr&[o̬:ݼ8̙G83c ;{)(-]aFD]*l(I18 RwOvA$L,sxtU3'Ub{kW)]3A}-€ #)ruqg[ A.I1´̓nᰫ|z2^% -Jozd]&ޢwDa9*s@Hvce nb!!t Kn-ޠbi9Sk_m1pMrPKu,tE0wMwmYиpHb^3;S^Fhj!bp.0֦ "w&7sBJN"a'$ @s;Z*)lLkm=Ҙp[IҸ" G Ҙ9?Dee:y)|3}2{0>2˼yWUҾSA (eÈbv-2A3p=6U FϵjCQs]9bB m])|bqw! TwR#LJy0SӛⱴH5Su f"]" [c/j0MSZ#8pτ/xkn ͨ+BaB^"vhUU#T.#d"ӗ@IF$U5.a8`6>D8 C?nkRpq2]cs}LnKaHB(Hz֚6vsW5Ps@fw 9$)D.C ;aj6úM{yț13 2o,%]?53@9nK9x?LWJDۓS>4սS[s.ǭ=BW5 VLŮJdr!<^}C!{Uf'{AaHc2lAD4…̴p dDlce6 c% p< ͈ؖ}3霜P!" ì$FYFD>ԏ z'%!+WxL sedLؚf4s-!a"##GO٦CDp7$C*Yfֹ_3Lj8r"ƈ?uk=7Exn$|go@-BMHMYbi"HYѠ1QXՕVY# n@ N-֏&@4W74YpA\^#Q~ blpG܏3+/ q4LgRgg5efI \läL fU­&8բ=0A$ EK Z~YM`?h IDATNDGe[ B7ε Y 1 yjj"3A -dp\;G(kG4wJx<`<`XT"nf&TD (sh O2Vxkq}ky{n8)_7HjO>qgp ꄰ~ F-f *)8 N]4r<㉣qvC9eb&1oV*=J&p'\)bZvš$鸌= 2"N#o lV"$~¹rzݻjLXfb'!Yo`9p鱡_CF"!HigW!xc`,cIx,D}HQ 2mabj^uLBy0{&Xd#9j0&ܚW7RԚ^?8;hmgaG !@޹sqss$?T`@QiWDւHjfvssݮ?>:s y, sjz;t*zm:O6S`ߺ9 "8 J͔LBw//8rqkDLžƣ^DcYzZw4fa[u ʈmB`0.Tj_F%=0mka k8dg# 1Q| 7B Rk Azl2af"L<8xJGI{Ip!"Caaۼ101=NSbDĈBU*!%")6"i$vKH|?tPʂ%79@,KjKTKufab͑H2@Y-TCV*sm]l#dب? :=dڞO<ُڍK"@AKm|Df&fRJM8# mCčlc[m&1?Cͩ.{USFlgvȌ*)"@pP4)`3Xx !QɓO6K!+B3SAH;H/efj=q@Q3UbtGBB^O 0 EItXڗ!2RMxdNVTYڂGIt%Ucz[G6ņ05(on:MS@Z;11Y#4YJ H1C31ȁqNXץ7M-4;9K# N,BUia7qv;q NSEGQoWAF†P mvrK ``᱋}!fB !1rl;Y.z@B,ԻB-Չc/' JGǴĢGGDܤQp Z.TdJX&վap,xpgf7`%lsÈ p} rօex47\#{5. 4tKetE2K 98az==!{W+ 0LVFިT{stY4Zi5 e٧ Ә;:$g406l=\0p\W@a#\tǸzI7V5Í Jxeʇt U 0vc3.У5=5wFxFDI Jpq f h$"!1Sɻ'K"ylX$yL:Ǹ |ux1\$rgp!ݏ% <DH1e<\]a*c?<ܚJ y"ݽ7SԥiVDz8)ZOkD8[7dk:Ou*;vRp2ioνS@ɭf"rWtUh[a\z2HQCBg>W~[?#?ceG^\[ZJ!3,wޝy>>cxu9ܺ[=x|[:Ϗ=̮պT z~+髿]Ⱥ&0aSz ~"=L~8S^3h"@"ͅSOk K)̳x2:o1Z7z`Z'URxRN590Q[;.i=2QxTznnnrtRk RHXmS#$K(Lަ:1owUn_욙ݜ"GqIIו%"@Zh"^vཁֺO>yFDPՉֆ ̙By*A}ϫxO˾꫟>{[Rj_w_]/s7o{kz-Ęz3w/>g}G}s/W /^^/ۿ?]ܵ<گzK;z3X "+"/>ۏ?_/?˟g^䓷?Kǟx_}w~cp7}G}?_C9,]u(wrtP&q\tK,0! ng2 GCh7aƅ2x*saZ =: p89u U0bJ 30gi '}o]iIaXYȩX#]r_:bmEăH4VW6D)eN}jy|>h+ץD9'w4Bp^nie,s!"4sW@?n_á kf榫yRJk|4u) Þxk"p]{&Uy7O.EywJRD;kW/yWeeo{_n_-xq6xs?|Oh\Eoz=yۿ__}>G~p駟?zK^ͯ|}Al}ޗ7<7UqY B{o{~?x+~O<_/| 7G___Ǿ;^.o_~o?_{ÏOw>>zk>MZF8[;nEܿIbofp$ԩpFO87>MM6( P:.#@|_ʘ76@'uss>sV-#`1h*0$\Hܱ#\!@5?[;fȡ`ߊj2ظZia$ȉTM#er)@f)/c0UіujHR{p٨M"N7 WAeǘ5760{0# !9O"9"CT(xw MER[͹ -ܝӥ)Cw@"?. z/|}˷٥<ў)[^1 }Y֭Zyc&$"A\eIX,.XEh'SےY {Ed>R d|د0j-2׺\nu(Av-fnew1K ρI@fէi^ͼ+3 Ƚ>_lzt<)vkB(I9ñ62xVww{.fF/']v;/󺬀hFݕT!`\T ! Z[ױU!ǯJʩ%Rw| .w?_o!|i̧i+}N)g|Yk ^G'o{_OO[~7˴ßOoׯگ_ٟyg~s:_| ~?L _E_?5o||~7?/zOB퟾|B@@Rw5?GDO#,]#ܠAymrMƃ0r7*T;;hN>OP@H4,̅3q閜n怎fD aP%*\Da'CsлߴJ)ޗmPaJ'Z,q'@$jpH yS@f;H`8 #Uט;JgY{ wb)c4pWn̰La ""ͅY!D#K)/]A;&"=2V!˼[EUq8a"R!R "F@rP:b$a Bľց {DBUhoph>FAr8Rֶu8A#(-S-[䤃4;Qwc<HX5$Io!:Ti10$L>"ՊTR`5DfbX"Θ~Ov5aWfݦ]ZvN7.B:Zx\k)ig4;"R"NnOۜKsoC4/+1on£RJ9&[l ,<(L IDAT#;Qܙ-K DzeAeeֻKڍ@2=S dk[CRpsݰ6c7<3şzm;OOeg?C~)F|Qp<|$^ ohLKBĽ{~yyg=xnoы^ijz}q7t3^)?39_yͫ..ww-o?Yyw}xso|w~wc>Y{ۻ/j3` \t&HDdYMӣaƳe RW@K7>|>_g-lNͿh)oEd]nLx=aWn!Λ/$?f+g! !Zqu" df S$IGZ"`dH@FrsOUܽ NI1ao ZK10) D4YeY D:u 11]ܺx챻?x{LD.K "n$[3I0$T֭[wNnv򒫬]{Dڀg3^gC< R* H%-̜( 0{roO|~~:k3$[ǻaI'"iYTu5ҫ fVi ,$3 DT9"H,mHXN,_H{}s3BRkRϼjkcBdbZ:]xK֕7qxhj 2[w_Uo:Le~p}7mLu{we?><ϯk_ ڿUso܇8|쑜G3!"2TjYLӑ#tĹu5jw`P[4GS[ 0X,lU2yJ`rZkڼ54>Sv?"JC""Xݫj@pwcd8fu@$Fjk\%%((` 굔# 8vK+EHwY>[J֖4HKF.`jnp5xu TA# l[9'>_4BpG{dlښz}0n<'Hf^+am58D@ațiqvNt$"iJ\ x~~OVsӔ;TuE=>G(tBTQ;B2up V]J}/-˼l-?7Ýc/sJ0..RCr,EPزpX lFԪZ?f4Cil7aȃ'ZxTHڪeaX%Wb-4jiK ZUss\ԝX$ywV)"uiࠦhlJTq- | R7MDFWs'7-ETAo|-㏿=ﹱAPB8ss8ʘ/T}_]HRǢ, K_R<_^~ݸq7޹͐VX8z)mQ;):ˏVl*9<W N[+{ɘ-QBA4$T"M]׳1u p܌L˟!8DSSnM[( ;8W=Ǣ?*DLDfTpC/ )FF$bt8l:'BD4` Z]Xݜs114=q=к1tٴE9g)E$)'0,hX!)&GnadS/~β,v{ƭeɃ/rX*]q"}챜pvzz=x[<4NG8 $adu\.e_t\i C}泮SYaeGJHg[gl`w=ΕQ!#ϧcjԫjiza/mT]m<òK6*'>pӒq4l6dsz6M7Φ픶9m4 yRNbNecUjh fiAg%gpb]J]U(271e7\i!YVdmjwav+|I Vؠֺ!uܪkm tVusZB6tvIRb>lMSַz[fFeY2,h\ü,Lc͔s>{~eōqp ADED9R:"~@; &z4o1eAwI DFIyŜ)@D}/vs,Rq\JcQ9֚a,Rj%RKӪYY;5k,!gnƒ(ڼK5)/f,V.K]֦,W;T-jkaD%r8̼KLN@JiYeY2h#bI̜"rQUZQV`ܽ{+>rDz[^W8s+`Qy3棧_~'~gYJ_S?oek{#Ӷӟɟ|woo?==dMܳ`xZ,?" [4y+_დ{_Oas.knCƨZYa3g"/va\_@(kחF?QXǏIg 뿮u«BI2]7ǻ=Бj44:;`7 cdӓ%DLƓMy.iҾT\Fw%M du L1a"Paxxwy8h8V1RqhN`w.y)7nxii˽Hj3DPTIp;8*D9hV"AUR]df6ZINy_!b$ 5^m}s>{?a?x7N6xCs9C8an|2\R]Div] G3OwoMOca۞#+zuƳ2}֏+([fܻrf t( hL]tgCœb-I$1gB7cjMkY9!1'A&WBT f,e^۝G?JoǕƓOܾYP붪$"Y "8.˜hjxhYlލZt1]{fqcYГqƜ0Dlk5sNY^]^R[-gv~.J̭:lLD P"fCD$ue:w{VJ ӳ7ͪ&jTxK"ZZpW3Z6,*܌W~g|ŗV$_RFVpm_Pj/]ɋtwϻSk6TONNqU-#lƲaݿwy^<2fU8i$*Ky;4/ռܼukCC5 agJ"pLFVm'lLJvLi{w~PJAq"9K窦&]]TiK)lZbYOYyt4U0f"h`l3akfKHi69ŮHXd ڴ9c}лPN~QK? `<◮;z_K[x߯,?/$~É x爘Dz?}Iҋ(2;QyOo ynn61@cO{()=3pH>z\~Y2ݿd3sX6qm00aKJ!dŮӑص^bV$a\V=DޓQMiL&zc]/uت54 E12z`}wiuHQSzfJՀnlQ+ 2T e\X(thOdަdfPcvӎ_ 1;y˒I@H Ww3ürYb7c]f6)-;*Lu@1":Jw# DG)MU M|J}/5rnma9oXbڪ6Ct+Q a0[kR`-+Gx&]`'3(dY4~!x A'h#Oj$ `kV/Wa?p3*cPd0u0Է/u>g$Y23%npܽ{fR8 d.KU۟ Ci{x=eNKlv%eΉvV,4)u_Ym`jXYZ x؈qLv<\̓HQ81ɝs-%"VRJ"PJ,O4eYҖҵ5զAbilͭ%I9loڢ)^CS ;A‘SfpP[] alj\Zg^NIḾݻ`6?'~'wٍ;竵 A9X",/5VvgN;xLqz+pj{$KJ,Vs+U'fNk.DM]vճ'Ӵ>A5I@ x9x |Dj;cU07k˿">ǟyj= b7֮mL!@fH1Vc[g%l{I3O@GX 0]zvv =wJSqgbh?P]j,5LGp=UEb@fuet;FlN$XpvcG rj5RnJږ0j V|ƽR6jpFP c>/%O)y< &3%* CU 'IrLb< $c-3! Ц 2! ]N^X[ е)/>X z%$a.溪i",uLj/L/#'/|^waqҵ{Ɛx>J\ ht]Q֬d,5#izlpMzq#fRαdژxYZ+3/,B$z\/zdq-D܈&'M0I!o68`ċHvY5n8V}^/XWun-fBd렽7WE2_; 1앬1l3^"B?c!VG"fJ(U\%+0,_Q5>2â'B+丛7ZW)!]Czr3dzAip-"y/sI )=lw>08x֔)vDމ~DHB쀫CcV)o;pN (ؖ[ 2Ӵi ނQ 8<%Į5@HᬧĤ݄V{X_A{ G޽ rk =RZLAP̄v{TzNo[HWNL9gm!>cρt3mC&7m`B闎 DROq=c91i#P0PxO"1̐RXFW#ǖ,<!v;~f#'tzy޳'''0cV+ZKknݹ[YJN)БCTԈuMM#@X`d< &K1o7Sf;`ڈy%E4XQ26x%XLܔ{3i)5eHYIլ4bJ)u b\ '$y5gs*H9,;A0 \rtfb<4 ]ˈJ#VKSZ-{=VJjY,Dcޤtײ7;3S8z){<14&+h8 oNfJ̄ 8Eu1tBp®s3G-T hZsu2] :u0D`W8F|aKӯYl\ OL:73Q9cи _K?1k E+7"]c $-"Zp n- h#5S$B ⻘]9;5]{k*f G~}>prkӹ]<U8nAOlňB$n wͥ1VZVnIU38 Yպ$EGB:P:ϡU_$pDZO㮪9ԬA‘pzWkXlZnQO',IDj'BƑ_!G >/ϼ敟{>''PD P?,8$a0FIVeN@2.g'iДfܫƍ 06hܜ.uω*˘TZ%Qr6IBӔRk]'e9es7In[<8Noڌ|Lssmr"TUېh?iz5 Z8;,<%Z+jv2Labզ.:- Zu?旇r~(.]^.д!r9aXG$,+ LWW?Sy^K?U[krwe_U/{G]W՗ܻ ?ÿ7~z=fAk5F*hZ}*>/:W+3g|M'^##ǻc$&n⍶F Jߡu0ogŔ|mG;Y|}=]1U׳@{bfUa'W-ܵfeDz hGַPU!#sv FVb0]>Gh-!1$9IZ5ΐZ鱲( Sn[Ѝ75mJⰈB*;d,\aq\tcNW;Zq4]Hdz;hAv^aL4u z1qRJ)ji酹Y(^t̴c4' }o+qw7֪PA [Bw'B#w ; U~= wGQvTF6%8c6Lh:0QZ 8 @Ո䄈L5 3ᰏ[eUSJO)cbqi@7yKZk9%Rc!}9R<,biL}JbuUۼ,Z,QjmVM)w;+Zs s >{ RVj+Ι7Y6# 3CQ X4[PzVPVjgtz+i{>~~ǟo|ɍۭ>=zgO~O~իX> Dc^1q|Zp⾒Ib# h=»fu+BciIi= z_aVgQX,F5+bw=pc>G@ZkZ{GKbZzXSeg=1 ̨0aZǘ=PtH&d!xq{hYŸ S pAC&q3Ngw;kh$jzwqOd氫Wͮ/cX|ڍM4Ŝ5sV3@CN)nA ]ݢ7ִo8jܵ $748O)EH!+ȅ$w!7{<kt@lͯ}u\fַW~0fq) HL9I]Dh) n} ~L)gb ٹ8cjM{nuYn[1ϗrN 3Sa~OrΥngۓVK)©VJlsJi7/V`[k5vD\eg3xNxCDĻLf/, ñiRMDw;.'?//w/yK~53@Оh.u@ &m@^I^c!D) 5rՀ(8(_i} 9#YQzl>2,  ZpV|+Lu\Z8]qt5WN}?s {L7.F!T~h`.椞NNOUv*ޱڎH &$,5ĐkW{X B+fjas$'͸y{$i^=wAXd?L$<ܠ A=ʿ*㕯 ּw-N AruwYA[+^01cG0֚)Rr_)1sXR@&)oLR@,w pTmڬ40pfAhƽ Tby7ow?޶ۓ_;7^Y[5f S -29im DT47捄^ΗyEsm!RJ3f6fnFtisyq9 r80Npo?_yq̵t[2;盛&J̇V[ '(:͏cU,Dj2 [YzAaZkyF J[S%D)ZkJgSK5}p75:ªxne+Yḓ5v a\ecx;?Oi{DW9PdI)ZejkݽR0czv'SuZ95q,*\s&?dqT/kxK]sQ]o)~MLB!=%ޚ4\*_;c՛K{LT bqYHAO'ehakRP<"ObP,ljaB(tΔcOcOnynM,H{k R٭cFHZبRP31["1E!3rӘNd\`NL[ҙͲ)Eݼit[;ORn,ZN绻C[,.RMM}7UeuҜ·&|.^ߟӺlLv9?j Ãxmg_ʲ`[jֽBKUY2; ;v`nVX7_Z>pZimT IDAT 3;3nɃ >H@9#5uٛ/ݺ*RBӺ@fl͛z7SK4<|o3?E)/~/W}o~ͧO?XDN?c?_<w?m Dׇ tv#!L]Ȉ1%ËL #f0.L0x?md EG.wyI HH%k B1R/^!>'9 /:  AL0_p'd.G/== ws5mdPd C:IJK"b 9TRpy: IMI{A$ tb@`98`┍vZbf1Fm Rc IudBjf֦izX==9ȤGFL *Tk)ZzPŝpjj5rm4)djĉ̎E2Hr鶱Oq.ڄ4f !U͈5p"23&Líι[bh}T aw^SYߚ1OxYǷۦǮh۰u5K瓺;O`sK]_t>LI3<~~XVrk[kֻtS+UѴ>ڙ{YdQ[s^sCh3OS x0fr"",j:5ܤ)SF~h@p^K]>85˖#"oJ Rp5 & JHqwaQZ6.NjѻS B 0öZov\z֚^J{T Eb 3SH,4Z7U]UtX|>z-vsǭ52lE7 x0Z Fe{WUjkN+-uS4f4O` Yj=ըx^E~)H{,?~zSO_<r3fv^qY޺xA d]yө|j GhS>?55;=K܌M<;edF~-da}$LNp80;1ؔU\aC{a.԰Ih-^$_Gbx'N?_k Q>9 0NQЇ/ퟓ8g3Bgel`{ꍌQźPgw a6Apj]e .٣wMsm̖bfa)XS7[2w}\JDc}(xGfU߾Vw̉]@] C?NOU5uQuj4xj3sؐ0%S av;9|Hպvr3I۶1*EB \Ơq&@C$ D \3NіQK,ڳEmL 1X(g1! TD0"Rm]wH@W5shT{wHLDC"4u5{)e]mۊmZnooDgyeg݈P_IFo.nͼ\f$(C~1!.4h;җS[# ]3aYme裊P 1v"L!].ac)fͅ6XSaqZ7Ms|:pnUnŵʨUpZEb:F9N/Rm˙ UOȳə\zAC3"@!ٍ3S%uU4|yS _x¸ƸP_LԺ^an|@HWfqȃ@,l Vv0 춉.%-EY7֤ BdN' *9:E\ēM %Z29-ESvkۦl:~HEƫDωH֔.ݤ-C{9=*7SEO8/z;f A)RԶ<χcs"RsVSE)Z)($>?v#OY$/s:ihkY9L""1 w#L骦VJ ^]I0FxTV4MKfE}Eœjj1L3 2a#vRX FN^L 2@2kĺ7'f6nak3*ET?#T Q{e٦h׶rz8-K擩0W ч;i )TuAT %SmYZR]wA_4Le,˲,w)ںn˺hHxm<;ȝ6uJgfB6@j* {X s~5^FWc&yHW> ±Rij=#%6j"yOu;d HQC8)dECM_~wz+}.:W;³qxx/k842gvAAx(+:**(Al{53Eo])bLV!=%ffTs\J1WUb58jrw(E>yZ+q;!#TT?E`yG@^4`.zc͛BLTվP t^ζ7t#n-MԪn58j6ҙ@ffHVn}3sN}rZv︙6.G(TJfw Ó8(^`?Z4*h3Z=`ҀW)\wf| my9e9E<{ Uub鶵mbZD0˲M=N·o.}[ջ'P6wyE46LJgs WWXZPek.S%ڱ9YBq/ae( FA"oQC`rGlu-8&u]zjª,D fw-YK;.Y2+Az1MU+*%oO(##WNЍ`KywbFfrRxR1MSM9E[ǥlн2D7݌ ,ѷvSiэF#RH @j5EF <`WOEx;y`B",=U@"Kkhk4J]T)EͺZ7"+!oTT=!0 "1e)a\ l2G{GN`uًMyYv^reHX*Ix;3CfPQJˌ)TDyaӧZIR8ƚtC~^Lyf%%XjqD 08L[w GjNfNE٘=@<N58~0st6E{\~دpl' sћZ7gytWIJs)2Mxܔݔ@t:E_kVj)v½LS+-w4b=@l֗9 dii|nQqԶu[$zɾ=U|X`> YeGeuVՍTAL9" T(n5c@ #y\mx昡 gY(-"T/G^)qmw0q7`n:aF1ĽT-tu-tqG7h0 Ft| 6s@=(. <0`SPs pZ摸.+N4 hj0:)41vWk)#SW i^E.LLff$Z ,bZDWNS7C;'J]ENa(ڄ:Opr3 ̬A.1e9HRܭqD!65NNRDUCQT@p&MJްJRo2O"Wkz|\2s_zj ֕HX r+Vk"fډPc½[?OS9joNn6 ڵQ_L=ztS\LJtpx$;>]h :qs6Y\ݧZV'O4JhaAugPja"sb_d7@Hol~n7sa Yud({& qebwdi%`/nL a2R5w/ZBoc|ܕϺ GgNkt1H41?V7ő`{:T-  om?rmxNAV>NS-`)rasÛپV4-phDedUWo䜾aRl+rg d,9eAJpFf2`lHgTcT.Y7'yn[#Po}pG0&Jk[CNZ~3$jL3g27'PcVu&-2w5DݥZ 10K$w)fƌ"R҂ ebj ],#' f7R'av7Z/|YA&ę cǫOfARDCR* !g!UYJ9=fJDu]C|{g7b&'ftEZjmѮ|P~֖ňxdKY wN]3'rw3miy[1r5*Av"1UrJ9SRy! TQ' ~ZIZ ?:TR*b,e^r<уga|/؀zefJVND awL7e88_.0Ptb=Rxt r1Ss;)yoi ߤ.[bw?rd!f4*HObl) ڮuq9reobǎ 2YU55Fvqa9bf$<+9!eewkw;&&PJىJ_@H23eAP 9kw{:čs0a0"ȗ:8apcM#uFvG\`0\'I4iN`r=JL!RC5\.ZpgWT_,.ǕCC+3SA/6>HR,"^(ɜ"ϸ:ɫԇsb Epp:<34]U:X69ɻEmO YG8%r8[GxUB3kLe; |T;1TJ1 jDd &wa!7'żsQ9 agϚqDzl޵6S) JEZq8,TL|:WF`jڍB,T+kwbLRRfn<.\{#XftO:붢7P$4L3dgZ puux3Չ|KcO#13gЮz9bk\T;]EđZy.R;"8y8KАP:S6lmO{Lη~Q]W`$ V\T.%g"#17'wAq6r}.EE h07xyVWO8Ս^y8ر/^}+xy$u)OY06eA"Ecw(zS{S\xWrQ5.1h5}~/sht]=?j=Rqv8g{DF3l`rq2T:i83nê+Q&f>bP-wN;*3AG"b6]tG]՚h -rF2q-2MS T.n mɘHk&y2p{@Lc@J-Fm Qoc]WMJ_;8BLp,Npu:N"$& Jq+($!PtSAmܼHA=*"M{)ȘN=`QK֖2ʷ> ko-[$Rc?nq43 q=Y 3I' !HghOX3#B #qˆB9 3S{GH"19L}i94/2a)Syٽe]ا Q-'8GZk #u'=xSe386XED昚H7)TC9c(~ g ZoBRJɩ"[ou wʒ |x2MؑU{ n97!Qӗsus&&NU"x=!LZ_Ey%= h]TkD i*SbK33s=4M+J)"1]FC*K֛n[ۚ! &TW_}؎7H˄"xm+S{\uqá:\LMfNLB-M#o4#f &a#PUtHv`*^>> sTE LRkBkM`&&MY#UaۦD  VoU vx~c=8j5 RF/Òx|X@!,+=a.\(8B`cؼ3?0v3pA@b/Du{dx ! 2 h۸NVB^za/a73" óov wQs 藄QID9\U/wn$EQk5[O5VRG>0ezQhu%q1Wzkwz@+J6 < %nI'"DOILDn&R{T3E ~{% K)jf^K!)fAFw8Ѕ!d(32 Q0ʘH %Ʃ/7ԨFqsJnjeT-wY03zI@Ymt_cv^p;S!\^t\͉ۛӲI^jwjVzmú)Jxw*e[ikO6ag{ñ=:l[adępU{CـڀP3~XTqq 8iK a-S |=L._S8Ε]X1w>x(HNaTC2+ŬHdKKCٿ&e殎n^XSsw7j>p0-0ݲQOy&nYLӌKIͮi7]HZL'2C;+B e_(D0!~> [wC!^VDx\>ET#V@ d0iX=)6çjd2g(fXl491kw?|:SrC1>#~e!EܯFs7/erx]W2Ȝ)˖kzp'ݱ9m맇L$[keIZDܚo[WAC뺵{6ϓ6[5 ][vS_fTZj絹x)Vr:o?)S6ɶxhm&1Gnnv` nf7u]kz賂Y#[ccm aĤED)U={ZDy!fܧٽ,[u׸MOT&d|_T}°K lؚ{ WK8#1j~>Lq여FeS n^ݒGat́}ID]ߖW{ѕ&\p#xl4a>ƒ:ѺǏ_-/]e@u5xPZ &aO4Vk$, M`rZ-{37ɖ>N:2ǏY#~`.|IO zzyfjZ/ՌemE FC=#dd|19 u7iߚ`Yvh[ζO)Z:vmu)$L K\ӨEΒO ["؄lKhrI|_D~73Wd=\[ԃ0(v>F&p~D 0wǀ}OżKZJL)2<|~tG^܈|RBգ1HHAC\>W>x]c'9";RJ%DD6ht8{NJ~cjٵJU+eבxAD*QA{;HG玓# A*n   j6{GDR0w5Q*3.Jn@$E477i)l+9[ P²/sF䪺,˶mDl {-j2MNSW"\j8 y):^sHpK נ͍Qt21GZ3{wEutmjKfDX ֶmǃE")hM}m[r+,L/3P/UkƯcgO?>ߞOl9Irz<'FN_3u<=) _E ׳)7^*"5LwF8Ҕ{3XսUޣ 0sM nQUx #|Is.pp uab?Bh@F]mhe̼Fw:R+Gk UxD`9ajb1)$+bfj_977EVwb)hLu78V<ȉjAw6%i,bw57mQ. RnM!)~m %ލ'tٙݨ"nHƍC/ұL$+('FV:%>Q8b7j 1TcЎP-mPݖ3X*[?sf^N>9ުnBNmˢuQ=;[b;8i[7x9i.OOGĹ͡&<}ZΧ֬z8Ѻ@IJn[3[JfnUYc9SUws.AD7b6 ]{m5QEu[ pLuPA4J #.pڍ&Pa=E"+B)ܷӺ\L_y|{_+?O3lL.?O?j-_o~_]__U~_Ǿ?ǿ|oSS]~|xx7/G7/o>{C?myו5N7WnVMl`G~/_cHQ"2dW-ǁJʹnuMHPLnH3V>+N0bA22K,\o=& ֗E>]Jy|ʧ~?Cww??ٟMɦ޼/}{~O}? oC/O?kۺW>>r)e}ƇSk{}g~oo{W;˩N|shPJyt9֍ɽ** ogbKG< p '/ک㧮fC]30Qz%(_<;f+r6RUoՌ3n!F[TJ 1(x)"%J"ޱQ EAys H%pk ~"$"6Ժs.łpPR.rMsyô~9 7琨]0) I0O!rJE;ٝds斳tN5=SIJJGUzmYՔC.a}V>AJe~㍏HJf-C4pld"q("efnN7MmHj)@ րSJzx'<Cm6iEsN'bf9B} p{hYӽGwZGmۦOzcbSR0pik}a: ̀BK;4 w 'kHm65spp2ѬǼ&3ÌA5pI7L!LU|mMʹ hiL ۸FWP0S!fwj:OԸ8hzɿ_|߿Oty97|Oԏ|׻~W?''~~Sdz?W?w};<_tu9/g>?3>3[owOOO|'k9;?o?S>wo^ C՟?/~oy7}nvcwG^^v .Ŭ=+ 1fR7y! E'rpIƜaythTiϑٕkety煷fXiM]y|3_ytSca]Xnn*߯ ZHGwnt2Ϸ7wp{ش>ߴL,yn w߾򸃨 6"n7k/goޟ:jkoؚt6i?9NTpnp3߼|wve-q*d{b._ckuc򛙱Se9^w8w{Xr.,S 'SsB\ 9`mm o|O]Db){mM<QHtz?s~c?>/Us>wͣǷ'}sѣ~oǼ;>>WuG߿}~~?|wW~~?w|f|"?AJEk}Qzw8KTڑ7 }sjDDQDgaG4G.]%ǾY/mHQ%'jaV!"am#W ϸ4]O]MjWmo]tkڶ޶f}`\]""1НH0}m-3yώ=8ҐE*G#f SrEb(5b4כݖ]aks7tVnuKB0`@@H`aSS8fHĀm1vlʔ 0(6A1@ e#&YR4~{9{VX{{F7|sZWC|ֵMDjS[H24<9͗䜽¿}n9w1 pttt|t}8ڬu; juhxgJ*jvލ 2GH1EFl&%0pB1DEU|Cs '| Ui XVyhZ;"B*W}W|Ƨ}K_SgT[VՋ6ac<:kvBc>ƵM@[ub"qµkM͆~nqL)k< Ԉ //{xEɖ$ݜ4i*4i1Әq@88%Jϳ!UѠ<=˥t](.UK2aӯNGW&)r|!s{8^O๏>y+ynLy=T=ͨ宻@PPqT5s4nk d*fڠC0KEDjA833b+.ZJI9f"RTհ,V3^NtM5CUCY$Bĺj(:.x>%O ?yܖon~?C0{}?_s{u7,ϣJiMXnRZf^mW뛹Ƞ?\nq2]tu:ifyUp?C7qvuYB̫ ""1r`UC%shʁ{N#4i!-s4咊L-䆸Mp,V:7o"Qc!F7f")r*)9 ujbfE4DJ,58!0h,% sJs)O }`\DDvLӔ%yBe`jg/ vRra'ޣ5R9(5ի*b;ZJ2 ɒAUJ52{v}C ` ]? w=V}vO׽J'pzm˔d߼ 9DW aD!oðyӓy&ތ..ǜ-gAk㘷49g٦Ya{|XmR`8NA:K=)')RJYk5{ysf-DELI2SZ/AQH@\v㼛S,fV O1"s*Ӕșw˟ !Bɣ"km6GO~{!CED6{3`el?D^dy/W7؏)T9!x‡Z.ݏ=_7<  Coc/MzZ\x|xi*'7r9:r.zvvϖwDΪc'xBbA7|T672a9RSJiг૝8yi<C$v줰9KBh."[Iu%ҰPJ?:5ƛ~K3?J||_ kl<.Tau/|՟W/zoyӯ}=y@|zK*1xRByɗ}ܽ?'zW |?'_EJt(s]yi`c"٧8[> k WL›5=NTUQ4X֣YhXkКZGvU NIejoFxnP^.w27j n=Bޥ+o߼JyW濟G)*[RxU0\g$7aXa-)c .8v؅Cb͟PRnm;8iΥ @E<kN,3{uC!s? ̔4C)'Ǝa8'!`pVD!zp^<uM~h8%<}ߏԛipzr}:֛hj%!Bwyr(G9v'EqќݸqsDl>Q..1vnْ oivr;fJKrLDwp5JR%S@sRr0Su]bbu]C? }r隽ڹ Ő&M ݷ]~'-o®+?W؇NoWG?jq?ɏqN?ϛ~C(|W}3<|K?O}yBHz슼ks_4o_U/{Uz/x?77>Z[DʡP[ a/vj/J4ބ?!Ƶ%4S B[$\D3Ʊ"vXuxED6 [*Q33Vd40ڵkyRdM?pƩ)"f sJDqsa/@m `F]^˜dr߯6G'O?}g5"@X )zdh R)zcs,Rx+t􌄒(+ETbJlH3S1o}Y M$"cU)X9ijgC^9z!@L?s>24M?s1QJ }WϿ~nۮכ}_5st:+Bx/;wN];wo[c`b& ~ Ιjy7c̼}f3=q˯ڭ1c9K0%a =M=KY$lȢ0\O!aH`L,*{-h!,і*]}!`>ծi^vEQʇg/ͯoCٽ YǠEȀҙǻp%yK4^֥#WҴ t*qg 70Y" KEs@;|7N`MO@!sHL1`R!Ō: bY$hH"^V-"m8oJ)g3:3HEwE]0$$OGBb%%FEFpZk]W (h*G?uXEjfh[%!Q1"֭TrJ"aV!,RJ-bI% Ŭ y¢䚦,(D^M;c%bX HLƼGFA3:SgyCR{fdZ./ HF,^;LO6 *Z&r2 MȜS,n&wqDpdLMD$Kj QLjFCwp5 nccVכ_}[~kxc7֛ ]oW|Qp׼W/G>ۿ =v_:"0 w 21g\r7)#R磪s컧;QJ`E<''}w_,}!`TWd%2* F\~՚~9pwZUE͎48 T?}]Ihu\}a40Xf|E$$B1RC8]m>h%U 7 h !H%k0+!`8NBgZuٲ@sVQ`"DArNk(! 13FR# 'nܥQ ;>Zwi<c͊n"q 7MMwvɆD9t+9Ԍ*jȑ1u'`P{//O?zDTQj<<\DsUZbY)4OE e(\(<<f9!œ`Qe'"F YE$\<b9n3 =uNbXdrʻ< lׯ_P!tv~sgCRrf{T<{\M.w;R$Z(u4ބ2 =&hOrmj<p*B\jUz[z)ZZC? HqYyُ|@qJ` ׂZJ !7@KGLeRwYf$Pf"U4cģM'&)ςdKn J+F5TP"zcgsr_1ľ/FDy"@`mU$Q4Y7sf̜r2stߕՔlIWhR|@EC`38l)P88/i:)b%x>,p HN46 EuLQJNɈr;1wTJ>;.9?OӬ@<ΎO11ٔR`<"! t0piLi[.#O_\?yr>{~}i4Ӹ# 84'M 9,$TJ)ʂ}#B348xe_]Aas.bSUT4da;H癈'*g_ mQ 8☪^ +.{=Dc5?l7d@/Kf&kk]qPiSP3/zģzׯ,D ,fuTZ4ǻ\H񽯞"0siY-p}5'$& Mfi9bH;fUX}϶b84x\yUP@/h +UOD2da%3ErPX;PU,gO8TV[kj-^Ljzۦ -?[݆[FϫuO@.)#↿!e#U7L9a,#˄^} a@6 JѢH * s#(dC Z D"HeS) :D/bD[:~ʄST{c= jU! 4J0Cf!̣>wc!"129'5ku+lP]4˔HV}.BR!%KId Q2ӜZÜJ)6l~}ww."4e6<"L1Hqwn];YR:Wȴ;o?uo i.t9Dvc4 TClqUykw"#jO*Vɪg`!l`^iH Y , TLEʒe!Fj"5ڃ5H%Ⱦ Y y{v.P%ϫiY@DBb'셂_wH3@ig07!M%/x>dwXZفQT* 79B,(}`N@JziChҵ5 fܿ[3{°(:\̒ſ,F۲$ 3[&`?Ã&pW][h v(ŁmځZPqH[Nam07ZzϏc]mT)V %։ϚT$D!jFBPb׉\P!rTtY35DebRT ȎCmjfTM[%o]yIPSGpI0P d ÈS 94xjpMEke8?a5r˜SlG,R\! Rc"S7lqO/%"Q)Ӕ1r1IES*!w>s6RH`>FR|^{Giwv~{!LywoV8]LG|Ct%" l7Mr&`B`{/a?R{ ޿vp}@ "sQQ+1< oQA)ŃKf{T5{J6Za03ZJ!kl2U&I0#K}%\;}ː_ܫOt0BR!&2e jK IDATUeZ5[Xk.Hj:0LsbP4z^ v(+x?zv,ƃNJ jBا(%ucA{5/a)թ۰Yq mas 1q#읕:c3AU T3jB`MKV'kQ)QjOllekb' x?@R_#Ġ )HZD R`UPSc] lS"-n]/Pd"\'T٥@=gd.:fF"9v{-9sCx&7@ ~NL<5UD|,-D])@ qK*nM6\9PNԩ4od@LE!Q)f)g$EEA ,4,Fa;%%D.Y,Bjv} 3R(0y"s(;FJN'?TIVİb"bj6vnc'>S>w/Oy?xOyF̞DزԔASjcilJ^%Px f~Z)Z+$~@CE$X8+ 9 ; HeC08rVڽm[tBSgp?w,Fְ콁.L\ U*ª,R@fvI8h2  .9|h&ڶA.-זKU{͈v( VDwړ|D/jm{>oQW_-zܢrߞ5E|pqh"HSkhK>l*Ol^Md `o4p8k \D/*-\9KX>uZrjᲄ*.ubxYTIJZ1&4އlKwƑi]L&֜Tn[q}rg:SΜ7E/r} irZ Q2jEPln<>Qq.ʱv3RB!n/^|$Y0t֭B$EPbR"tw]ud(H=<'jaed Bʆ:X)]3HRQҌ (Zo>_w+v>/ZrW~闽^DZ{⥟n{겨-[ WDR1"I۵m5-Myȶ 1l6'bʭU`voutMXljiB5v+s S薱!sWC" `ҘDt1nh=T6Dz~U&XMC=rRѨx5Ww pż׊Dتۖ[=#TM] ]m DMD@ D"V$(X6Ъ&z6Zl$\L%hEk\+Pzh+nf^R[gLhtoc*ưC%B&jh 3Q4QAzƫ枳3} "ڇW]wO\"w* y 8˪-lL8H)4\dI'&P@J;лCv <3n%L(&y供ْt]!䀁 ]OƭOKU3Rb\.yfɑ$(F%]^~c㵓M0l'52ltP 0s`3}}IXŔiuj@uL[w}\ cЯVl PV%Cms[JaJʉ6)%˚`MTi̠Ր=JwG.~`+KZwI^daLvay$lSb OˀU6!R?Ke7y>a46zk*cu T{i%5wхM[0F}G#wL*Ӵh]vI2ؖg։2qRDEB6ZɤjY٩,T@MZD =m"Z P[ +kl<̼@p"f,m̚w۶ֆ- vIn8)!Id?ID]w7~7?C?3?tRD@x떖N9 `ӗ2Q `%3o[con0dpN:o|{y9/5PtK%'+`Wvﻈrvkes;)DCFli.n!.eӄ\nhEfwZ2B9:cP-Cy6Uɢ)gkUcӔ(>٦Rm<2Rbc9LF+fPJ-s1͛= `@(E-9 !80sʛ5 - *@M{j@4}ݻwK_*".̈xyu4]Z?OԠ \` U/j+ >`-r([nbY mgC؋yrx]a,P9W͇a@V5aaYr8-]6OP?K[ZyL["ܫp?62G[ ߰Xf-ΰ=kp_ѓ%+ofvldp- X Ā@)&ĈY**[~#I+` Ynst;QLTѹMZXB,kizB1T4gȪT ՋfqB ̂;(h(SAnC 5?JDƭ{ԥ*!Y17aNf}#h_C/VEX?" ,fH ,68ͫ8='LP0žz1pRe1H(ƅmv/?'+d$FUBWOX޺u#ۥ@L:([?6dÚj󢈈l!tB[7.C;2ܯ{{ 1eU1G`Vjd,\0HRL Si2 *z ]oMq͊,@(fŬ6] KDH)EULTlN|{W/7W1(!Y)_G^?}}qT=I-#3AFG̬:\^Wşg^iz(\,g3hX *rܩJX=x- seUBCz?o²[EjnU`ZH/[KJ[\ lt&xN`b.2oz"Ț}(ۂ4o0e%6lgOlųYS BDш`  ~ń} };"w֏7O,,Ջ2Djcu.]a&ݑ^;)j`ߡ /䎣hJȠ Y! ! *S%0 }bd&:DTTt2SY&[pâ{dԒ^PRs)2Ei8|n7'}wzBb%ոQD"-8*0SEҌ *j |:A$qڅ4Ʃ+m=CcR( uJA@D,gg۷UlkL4cg9v{B^vބ_--;9j_>\n D92 w""xA!PRăqSHq$vN1nsg_VU9Øϱefc|u&raΜ%3#MEkqXD|>η'^x?W,)G$yd),VqwQBuH2:=*U;P&UURNiVʒG%N@*9;aX5lT1 kw߯]OiV8|?|:Wo~=t?d%P5NQk BѐV<+ɼ̭x]ɾ/,Ncz!(l/? Y;I>o[Yh=^\cpE_ՉaץT2l#Gy+1hhgy+Dx%<|[W|kw!Ϛҥ D7 tHD4.wѢ5} [h`1gU"p%a10K\Rgn@e0-x&c4duLM{IE\& UJ8 "ދprfZ׭{w`IB1܄aF`bURRε&'(8Yumrz D`y1q/8T* ܈ᥔЍܕC3ojRRauu="c;}7wbR}?u$,x|7!˼CMuR3 Ӵ <œ csO~ɣᒏc%e]RnaZQJSvR+!3 ifa&0!Lnw?A}ُ}?/o/ɋg42,O gkZ*ͺ&EuD)Q) N[$5ޅCM6Ȁ꠨gR_0=7_>?W?{~~~Gw?ǿw_?>uP`h[7qu'&aQlcbRʰT}k-J %5e*˳i?z\ǟ7~'C=>$Ӂ4ɛAn|8\DuOƄdT͊VJ1S*ժ2Mi9&TX']3")4ŝT╉,ŀ""N(߿͟/?Wʰ;_~ͧMY)CpNKwPs`Cnw @ֲӽAFsBȉUY8H ǹ ;d#ɁY^L鸰h".`)񺀈Ux~}i^y.uw]*ovV!:ǷoOYi-qflI JK^Z@$䴮; jQF?^CNlJLrG}i`w)x(~0|>{9eMLW/ch: OhExUsLVU#+\#vlnueOіA/ĉ.Ky6ֱq{ԊAw.""2MW:C n HBLI0aÍRzs;£a2sU݋o^8c~サq$MjOyt⺬UDwn>t^yzV:VW;͋Ya,ZO:sr%s߶Cpzy1s "TM) cRZ#6#W n2UoM Z,~a ~ߴ¢*2Hݦl }H|BL~|_K/O :YEa%9;IW;i͕ݤ2:޾l͜<ۭw?w֧_=ݘ"حE={t=P'ʷo=89y>^kqw7eS!$ pՁׯsK7O/ΉTnHH+Nw}Nò,LJ'O& v4딇4׹$Ra(ny!{$R]yϚNU֜W;|d%|*V%1'IJ 9*.m]#0?asa`7+ope͈\zN_0쐷0HkO\!EhfN*f"겸9\0@;$PVWMG: ?|~LD uzUܬOT D+]]mQ`"wOqYafk*vэ^xtח aox^jNetG/Aqw1C dAq^޹V GRJđ Bma%*WUVG!Q"jޣ50@jJmiVV@ lLqJ]UlIk Z87~0 NN&ސӛvg)h}=<;?YwCIuo?yu`'g;KaϧzkËRS5iJ|^rV3~f^Y:I(WfB5-~|I:d\,< p> }k&X5qf`!$:c]&Tu<:m:=ŲZZP 1rJYv:LDvhQPcsU :VR͍ r?8kj~~fwGA89֭p5B? dcac=3\#V7GLG7y="U׽1]pAD9޹n~][oeRqsψn!L=~5c`3X@ :.(+lu\(4iS :1)VoP oaL+Bo #ͫan> oP/FR_57P1ZbkA^*jj(sԂR׺V/իCj->7n'b"fɚDT-e陶mN,N"slC>9ZB6bH#vwcj؈4EtJ"ACO ."r)3Iʸ~|FLL-یm[C#q$*"9n577%{wYC̒T$C%UI p*daVpNwF@L9vpK.~~w= _yw< ?}ۏ;jie)OLiY r\D\ MP wUM)qt7Z&$%Dj̟ePWX?zӲsG>y9wpR.U RyqGOiƤIAXbO,@#^Tr%c  . zQ8'"fzm&+l03I19a4Cs7$IYT@Ο781_M]eآ~ɟ__ӟ7XwFo2p] j0EA¯QBH6SF.lR%_Ë8m1( s?[ǖFT-_q?V>#|֥뿙É9J DF 3h4 .+@!nr@~UsxI(S cP7R/Y*!UJbh4Ç,J̉f$M`VarX!*#eX`ѣ_E1TISmix+ʃRoÍT*p2R) ٘\لJ|unRcp;]j;Id"g_z:dؿ؟n)M<}՛O$Ou6ZY77|>Zu2V=0 Ju=AOgv\k#>yXkuJ̖2YagT_}b>7/BUmƝI=eO~y^V[׿Իӹ sNB:D]\1N2{ DsJ* 4_tI*̜]mf+x6 b =SV X],7av>k*>!t~H^]6,3[mzIB.,GhjL%o=Mu6/n&rC}4D \'5/FNTNUs0b΍..v5\39="t 9$SO^EtҨ&~w2@!u$`"k5~9ZV^Ll-lք= g=[È[%Bm]HKl,JЄchiJ}R#[D*"TU *ZۅHH-r8e"'QcwU!&NRuxK.I|dLRmeVɅRR*QA*\H4f>& #}G!H~2؞Nq:|CPJZKeަ/URZVw! i?My1eYXrgK|U8F?OybP<jRe&9Rz7[@ʜ^G75RY+d9ٙo?4dwQEuYEsdu%-mu:ݩHIT6x &iu!ZVrA?%=\HbLeI\ܒ$0eZLJ48T1,I0FznCYG9^B"8Y D\Pw|pk( z g"@ 䭣-tB"u{Bfoñb.2yWms<{*F,]<#х%.rsq(QyK._'aր2|a]Acd8\<9ˁi;3X •͔Mkeb!wGur6G Ɣ+U0ƺ0iv,AԽ E WfNDTAntM V٭#1 Af GB ٌsS@$eL"c2 (xj:+?PhD< SSdy6_%kIUe1H\u-Z/RffSKjNJTEB )T~44^h'~kZ*@d8q-HooCVN¹ !~Cra<>1dלS.)U^D̋ÆR:auw>z[ݷY5&&Q%bVv9߹ëe48@јsg{E?}! $ 2!רG  ve9f*_5f3Pt \hk@t ROst&''58ye_І8T;ieY:sGۼ2"1 mc;9lf^qE[Q7e۹#I/qeLBt#3?܂ʒk kU,jۋ b`RI5iZ9F-Q)ش>&%E'UUm؈%B- q Em\Su#80wNT Պw~_=Lg]]ґfnBv~r;}4\uuźz DHc]OfV# Р)d1IV!x.WuǏ_ 2Rm-"pgo>pG-~iJ`5\qusT&34iK?&W:)zUC{kAiw)~ǷcKb Q3hB*DZ&0ՉX!΃n4 Po.ޣ"*=ꪭ6KJ>['.ܘ|]<:J;(uiڜ@Z3VOp"'X6̬Ec%ͽEccoݙ@};V/:(bt/zF0y˶unX醴I]9iK7ln:眴 E3=8H&Oc.Z;;|gfe13jpc@#_nx/2*JS%7r;Ma[Q8^] b2}Q[1QWɀqGbb=S>ԋ 9aHIE=nBHXC9ml6]rG Xjl^W5iV0,k 8{1&N''IҲ.:V1-ֺ%-N3gtʕ]eJ-&HIX2vjVYS<дLJӺZ:0.J*A?AaAr,ŐZ,;+;8˺TO=\=;DUnn)nI rUa?&㇟|WΌTZ+*H.(8D$V.]#WV{ pk@X$R"xwӱ@NƦ9;Sش⑎,(:;kn:T%^8 sK);,"*JœYO AH)`J{Z" RAf Ppw1nr*V47IgDJFILAʆ , RjZ܍%5"9$!JP B<1)jKD-eSP2Q0Mli/I`i 3mzt$ߞlݹttIm' 5jőW@8oV=*|1w+6 U0(%g7H$|)MbA qAl|86Ɗlt!5AY nj;[X 'bH0V5'w3p zԑy)| pMd^ <5`3]V`(Yi7sW9s+{+hm3 0XT!B Gb Aa'a%5 <e&BpQ,|_5{Z=拱ݬ1XE' @h"b("Dס!lv|㯨~4{@녢k_y!܋U༼{NNWx;v]Ϳ%z vv5eL# #? cVvs@g_j Eət鲖:ކ8% dg(h|2 ﶽi0\pIPM D[;3uI q\%UkK*"n.")Z-J{[ B<s3c2pRb|rtbTw-iϫ-5j#bU'MD.ՍOeTVW<6!n49'"*^//}Yp%Q^C /޼6#=.SjlJ*,iԜRCbyM-eODd+$R5kt's Xq Ɨ֬FGzXYț80jכT ҹ6C LsOET F^PC.IQ1`db"!RaAp؉\|Ci03oZ VԲ?P~{̣̉o CM~1C 0(("h j@ RLTY3"(;7I'ZL Qf}Fv//_1BL}[!.0=P݊/A@^qZm{%7;mK6gKmS82 V\o汙-],3]8`ao; ⠋rd1ц LA qO ds KJ,̰ 9cMTJ!"U)fs2+R/'%bZM8[?9rߔd[QJ,rLMޔI5υU DL!3&"ecF6h3YM#g]L4|ʃ0ѽ䗈 }۟3SZ̒vYTle)bUk1f 72#wZr<߭Zk%b%N*rխR2W.G8ⲇ``lVYb+bMo~P"V!UdPg%\%p%!0ABvB( 9M):4MK|9euʃL;zکR8 IU+CNSV< o\GhT'oE-UZvhDpvQwUqwciWa!ZϵSA5Y|E􊊳"%*aC)vqv /6n;cB ih U4e"-bz_f=7wͨe%Ե@.n6A^N7͗l@.#v+vEWY Zmq1 7X tZ.֋slmCڲR%mۚѯ_}|WVh !Fxs@R-#j;!!Җt9Ugowaoü:rG'Ü d"g%qA>YH\渰ӥx5DV[fJM"^-0{H V&S5QMT< XUSxJ&jF Qpq# Pl !0iLNKNUNZ-+*ʰoޜk2Z&vZ%Z++~zOYB" ZSݭk9y1)48Nni2*KA?2VO&# J9`1>4*"P3%)i{AI 8O!1ƌDfB)&, 5m6+%/y{C$G2{} ۯVFI0Ѝ2\\.7(}є&&-DZcf5؍f7gRCZ;Q<7ȵaM-s%f.X5C;xہWi;jkܼPM{+fiVH ,`0A3 Pb0) 4t.͞HI."7)efO1E1"dA_BPZ-խmiulMRRw7qlI Aj; v9٦xk1v] pv#pZauZ+鐧0LyLJP/K]j rss "7ZCEZjjCLS}JϧUXXجٜͭWX\!Pbi/a P꺮qYdLiyyPIxJ>eazw~_?3?vw B$BsU1&˾7w>w>^~ūuR1HM,]U;*>, KIbak=2:S Zŭ/D>Wϟ^MJR j=ϟqrk>ϟWZ5TY$BkY63{?~?o?%&UZJJDkYj-ZSKbzob/$y~# Ͳ.t~Sli-w|j rݏ>O?cl*q9:;f! 2l2{0ÅyuxN 쒚Vds9E,u:R6L}F [c|jn16s$vHD @3o.5i^Z@M#HV+l冺q@N DŢ)&2Sox'I:$ Rtؖ!!P:HSV8rʒ"{E+V&A_yQw( 6Fm4.,Ck &䥜 Ajx✳ǘ85X&Jh#R֧ܥe-:fWniVK)pTimWU&<9Zkg6M# H`.  () ǦO),AKDKDHC tO^k9c̵oO眽s*Գu˞HJSǶA UI`gkjh(1IX籎< W@Hޡ#j$QSr-0!QMmR"xTJ!pԈKMޱz}D6 M )  F@YPE"zpX%3;ۦ|ߚa )I8%xKצC?89 QQVt[e[=zԑ9,fJwss"M+ -j4j d >s`mg^ǎcW%`eo~IAй*/}v^3}o&I?{7R(/ܗ^}]GݻIOx`0\_xO>ޮ@1nSǏew߼+|akpU-=9{}јbv-4?AUWkӶ0~%?8|k_Y@֡'=>p{G]@NQ'+眻>g$xOÏz3.!_m7]xM+~H?ňBкyꓟ]w}>lmMD`%:B35,{0J$h;և~?n`iFU0!bHI#^dÜ% D (Zhl۠ (Ym z{GN$7S(v?v( W^U?uM5[%t$PfPAU% 2AƯɤ͂;ch%Q U n;o "rLUDO!"$1ݺ aJ)x'n+ljc}ΊIT3k>ޢJIQEsw dTU_{K˲溷=~#"XQ#mk%q|7b*WUbnʦ։-$ڽ{rd)XBM41r)4ӪWgL1ZNm6䜋)P{eYlmNsTVc$1zgYgTERmq˂E|ZbN9;.z>%hG6ضb.x1'׫PzB63b<4u3nCQ R۶\ gimQmNͷd{kJeo>m>8Ɓ E LgJOǎ|eڼ޻lyCl>$JD!x mS>kb8̀pfw^7=ztyy{^ԟ}ذ&m{߽=뻞Gij"zk^=Sls9wmW]p>.zO~y6ʁ?/\z]_Oz W;vt<^z埿zαo6_}X[[7}?|4yk_W(Օ>gm$Gg߱U︃ASĝ_ Hۘ-9 "(r6!"H`v%ݢӳ˹@"\@s5M"ӵF }(J5@gNok7-0-Uɜ@ ;;D o.~grϾfO6n\a vLTgG/D@a>=h -Ps )&#`!1m4H"fLyFI> fV^f|0+E:6 *up0ONݾdzlAS2-A8tvwYG*ٲZI)I<酏27b4XA0 C4ݙ=KǨUJTB F^?c[*m籍)!"$ lmc F_1sm$J Eذm4m+L*"lmoE۶,KL\Eq=ClV39PT%J*<4?T煙 D K{ע숨Wv\Ab8aΚzjˋOo93nY|u=MS_߻w%z'ӛi}}W1.˲׾S1] ]|Օ^׫浪O8{h47S/ݽ{ŗ}OUSW?[_G^kמGijQQ`midǏ8yĩǏcgfInb9 PAeн۷~9x}.VG={V}Y,ΆaPhWhv< Bի1p9bdp(>=EgˋW$}s}qC} ͞e:\w}c}x/,-PUUmMyzH"BHlAVWGgNo!-ʒ)V=117kM֝'o.{}mf[I1ۙ8s|ZeWvAXݷrE o0ef>.֙:t=1?|s1¶sB6i[z_rԉ}}{*@J"wW IǏx;6vUUyAfȏՁ!Tu=:*O 0/B;U UO{׿գǎ<?WV">y?wwoc"e$D)8d!S@QD 9S5VQgKD&є:D-؎H@ԝA%N +tJ2&CGf gf si@9m`ۑAZ0`<$ԈDJ0W8QD(L̇S!* $쩐YUD"yJ9_R4>!`߀$b=]t !r$H  v""#"!%)BM)`&gy ~} ^Lc}OIf@HhB )AQ괼񖏉Jg/exq *cb掭"ei՟ Ā&@ղ*UU|:߷oW9E){7%L"6hwvl6c$Tewe6\\US7TEAD!vΧ4s( H"*IqZC'>5/ <Tz?^96m~ԅ+wˮp}}*`{\=&U9w%(1sƛ>wӃ;}-_

     +ppČQw1X?F@u.8owo~UWa>8}ԩS'WV{>}"mk{*/XjADD?e0 sصgg󨟾x#*Z%r]| , #2*\WPLPlC~BsDbD(>8*uIȨd(4 R2u"1BB%RhEҢJ$k4F+T1 ,t=.s`&Q,:U@QXOSH6AcۙѡG[Bfb K∤LI`Rj`>+[PfJ"b:k B6Q^eQ\8SUdIJ)uء"u@2+[,s@I")aվ!SQ 735 Tr'$vUs`FJljB"*HRom:=6D6s_~=PQM޳s.|۶uWJ2H*Rnʃ>z^QTstVH)&DŽkv:k{U3ZPvz+Κv:o0U,V烥A|#δ0gQzݛGZMPijJ4ƦUNƕ'zmmՆzxo\;ٳ5S|z}SO~㛟?{W?8C!@v py{^-R//Q:,Jvr8 1#f̧ӝ x/ Ik!0Lᓇ8q]{ۋ|p9yk%:nFy??O޵m'n©S'r~y/~߽A!3 EY:bK}[~kػgF=W??~t'OE\c_>[G襯w?^um}xdzp@79W\u@EKE.%)~#tw}7 o ~&&YOyM1LFC^ rKGūDSZdogݮ$Mb¨D&qљt*Iwa.o!I5W 5lb!{vJ$"ݷaG#V ,^~}2[')C$&Sz/%JH'Q :$H)UU({ t1&I6MuTȴLP1B8 8{vZ#"=Hgw$&f"@5>x˩dL'{!ZuL+&l{S` U)vNVI(6m`Z[Df!PT2kk;;#Gc-) KAQML1ͧ5ԯJMJ[sn鼎 З́&y=s6Ub)+ƑKLyDahc @KQQbB$B!e Tj7~˟kwo6S{FKٽ>D'wd%R+K. } w^NwGi=n>ѨZ^-#$s]A< ǣsP}Wn^{ı'BN׾th H-_lso~;N:}]C_M|/x?9*Ұwp{u?[n⿼Y WzcǏHsy<}ʗg^yȑCw!Dokf<co/#77/}SKo{^u8瘝1 c8ln;ey{ߣ7n=^{}A-0MsڰG"J9V'ݶlIg1&Ua&h UE!SQ "A@2WIU`[l5[%叽Nw- ,8|. !3AMLЈY@%60[VYjrh~β,ۺ0:&)kF$рqUyP-FU)Igfk ٨e6jE,-7 ekt5bHReVȚ̏GƄFciXcH<ݻx_.~sJYFD QeYA,+lSj>kPFv I#_lւrHD;[V7h z4"'#DMEQ1֎5h:|tCKr>vR~`8ʰ<>RTK`‚QY7tٶh]"q]aogI3ޏJoϫġ epg󶦧bQe^"HkW]OIШ :yV]^']!?W3I.dlLvOD=WϿ?GK8tUWmܙΗ7~ӗ_lg}o/\`j__rCg^xE?os&M;?y{_}%{0y//uᣟxtvrMxS{-Uovkz>cyx7"?y5_f{Z]_ԩ:^> AG?qSBxxd=udc5⽋X+QdG#fMEw%TyrXI",L(Is(R.UOg}ƌFR< ȪjRrCvܦhˇ)۫XGga`ʭ "{V"sv+E&T{9u.cw`C-ۢ<@2-+ o9sDuE *1کs(;JL6(/Q1cDcrA@ͳ2A 1BB$bصZ[gwf Gm0h1Y*ZYV$FC@FQ30a~fncK!xB$LIYh0sS/2Yw/z{}[o+7j3]tة)ƈRcL%"UχwӧvV"\J ;r:uݖ3Ac6&r =7=#Q;66M DTUUԾDZE=kD4 ff}c#h CDe8S˓bƲ0*$Q%Ljl:ﶦ'q?mȅ;ƣ(S0r6s?ұ1"QU ?}yZ^ZVjsELIe~x4 r%%v?[?:woSٞ `?I)UR :S'ssUӶ ·>񎶅k6z+έeSL@JkSW_&~ey_ $~FO;<]@Pw0XikSM"EQM\4옝C3"(u Hۂ^ۑ*.RwN@ b]Y!PZ)2pUU<ɛ,gZq_!9@4W+ќ$ЂdbgYEHa婓;;ӪKUu8犒{O^Y@#B+vN|ؤ~9 8GR JDعmEMӊhPh6Gc O%Y|8( t^ E`0, %6PTܴ۪l'^W.Lm9,.h;Q WڶMwa2n왔Ua#ٔEPN[gaYV DrWߚա\^6} $T!  p& n'2Cm$@1c \3k0*e :s|3~bbl;{ 6A0Ir Am\^NtzU!D4F&Y6KBiղiLв}߯=!4<zS`Us2g<;3̀$%|>Q_&ι}0>:/Ey ! r1Zr>zA5) 0 B, . G3UX]SDqti</cMZ !۶uUVA9 W bKiNMz"Q4 <VdKPˊhL iL۝=鹬x➶Qh9{bڵ>(hPg|iϧXUkI@.fW1!:- Pi.q2%hlU@AT}`sp1j*#JcfyvΈ1I2 dBjt`Ӛ4tJ 1IUH"ٌّIBTda4v@D͘VƔ4 ɶuE)Hb5)ؘĨf,If3eĶeH}Xo*fk.4#ResGdN"Dئ`ٸ*@mَKDhc"FIA 5DE0)G@%$@D]6YV#ͧ-{e)ĊN12aB O.P%I5Lډ!;Y]P qJVtBL!d9DVUDC (] U~AThu q]*y%'I$UL,I59c( 96.3+[f] 2 Il}!ILBr)hF"gM:*G3d )FYP,lX@L6 8ۡa.5 W `mӁ&3TƵ[BO7{ӻBQ# dl "CH 6m4G#_[MƓ0dCz2;tCY}ƮQ sѓղXڙs :EI)r \ߙսM+4=G#Ϫ"N]*:;QT ztriқx2 =Ma᰷yfsޥ= ,]P FCs_oM);7^핽bJiu}lPv[kU*lgDhmuytclm r"zg%w -Xވ e:H6XC]S^GbXc{ pYhQӾjR놙*JĀh=dJ]!)tS r24bdYs] $$7+)+--JÜaw47VZг= GqKwUv)3XEm,{YQs6Md̫Wdc|0$#)')Q$;G +19\NfBgdD lr`܇Ȏ 6<VTb bP}6B6(6(w y+,M;RDh]:]zsӑ]}g!g3iMf>hFLZtPbgN4H)=pqF7%# lhQ,T@ȶ12J4,(*hjN;^$ 0 I~?s<'PRYqQ`Be@ A۶"mJ,=XcLơ4w4ZӢ}箷E`g,U J <su!wf{W~GmPƒB 'Gz%˻C` Tq5.yVUP&UYfP8(pQjXJ2Ao!(IwyOeWGdh8þIĴnr5| &+T^d h23 јSVpΉc6+[$඘B`UI)і`Hwk3& , {"Qe(7QW*c 0UQ "U]dE)[1Yh9 ~p)?Qc"SKX *f4Z=]T1LjAE;d809$`T v@ؙ2#ECv@'6B @g q4]z| 3uD5:>0*^dI(I~4rI傥y#up,O;i_<ˑrA|hsH;]Q]z@Tj3ҧvs`Ѥec+,CC狓:@Ju%/V0"XdelX1Fm;GsL몏@DTh*x[ J6rfPh4菊PT8YmOw/ .T/B+ =_"@"l>v\rHpT_$7lgSDHy4EYbL:njmB/ %]Jw%?y޸е 1(>sA_ٞn#USJ۵gYUhEY1sHd[[(j]CDlƘؑ-5f 8LbQbj8[vIPH"-)&nhG=cf[,J^y# 3,l&ms3י9e)澭+2wڽPאtNP^#%鞜^I` KN%2@]yG-p[0(6v!")e:Z IDD)c0HL 11yD!ˢ5 1!;0Vv|'I|aj&dvӺg!!38]?dz9&2g!WPs1 4[lQȨ Rns x%uN/=,<'Mm|4cԝ=t|xy`rʙ &`aXnY*-Eg j3 ۝˃:9HP-vb2rT%x~o t{Bɐ (u;ML6Ŏ1noGKs쬬q"yvmk8j Hr|K;{h* V!dRj7lWU5kX ঙ)jsuԖڶ[] T1 #F"MšCs.XL]Wvg<6gpLjwC{^z,ƞqڌ]h]83+ɠdel@ˁ"E9#`%fMZ7۳UbaJq>?~~5dmKzRU{}tV:HD!QbD B#h/$DTDAPQbKD("M9]}֜1n6u{/k9.gLJ硟)~gSY9̦,̝Dؽ3,J @tUK/DQ)!m,wp &S/apz2k}tOLUh1C*3jDXQ,ngC2[I &"nKUzB&9= s~&)w0Bsղek,!nĂ̹| 9bbt[ȐyqhKCr5ƍ"-YYqU^Fam<Y(e;Xޠ,5WJ-5i<)6J r/r%K}'0@~MkS_fJR($a|g2 /2otlbbGllgBS]u8,o?0Rsg-|9.+fܲICJ}1qJaG7-8Gb"N5N'SuP˧Da$^oȈh}ܑǺ <~nm pnM4`̮~!eѵ_]Zkcx -uip)>3'hB|Y/Q[5@D5>mnfH(OϪxzzZ^^^RLn/?ޞj*"?/hw8nH"}~~@˚@kH}.`1r8<>> YMaim-r6}կu/E1acͿ7]|xy+#ʹ dK+81M40_~>~ ]DQwMX~_a{lJe,١o1 \ D̃)˖|,X%ͬ#'_W__7+??7˗LSuxDN;SNCҟ0 PvwϢ^g@.[0:\/bRuU(}Rl䳝%?v6vc̛ O*Ax3%@lRS_ RP9͝8=ohM JU9k P@^ D$Nd* \~ H]P$PHDxfTAѮiH> -4sڵgVBԇ / Ldjr&I0s;K3fS^wԈ[kvm]pI+cD ptIq҈ɹ:y~i} k*%VYzq"{&тDMHUWxElag7 ?w,LY>J($݈~4i:4fmV߿'F B&Dfc1!@wlZN=3#jt> H8ׇ-lc.>|Yl @\._uk8^`-}q9 3n­GWvY؍`886ck^\vāAޗC ^Z~v *+lJ]pW衴ai߯Bܘ5ی1_#db]7}ק|؏g (J6~|JfL"Mjf (0dS_g)ͨ!2MAaK#D Fk12*8&yƛNAMSr&R^Pj9'l=<ڦٚc7!"SXޮFhO?~?ܶGO+IFy 0p`ޜ:69{Pض A,$h Sߍ=p?9w]:IE"y:Cy,D@c[ze}|z`5Rem}E!A,,W^_o)X-n}bz}ơe"j8Dc'~ُ_A$!fl _Gk_|0H'wKwpH){_^ey2'Wÿꏫe@q$ALKI#9P=7@PH;;`/&qL;L,laiR9I$E ;/NXVT'x6+@xk. M5*I9 H9H1'a9m[&lRK? teM,>K:NqQ|$1. 2Kk34r1-Pz{X/0F@)33K_xHDb+~'_K/_m_Mf`3{r.(88ABf7gAZg4$p:q}TT"ٮG<3p&0+80NIs'7Gk H}3c32Mg9Y\)PZ ne[š"$ZYQ?KiB7Os5L?/_c?ۺBH[QD靜qg,+-DHv ӵ38B^'9ȯm+}Y8ؒZߢ Pdώ[Ocli4Pd قު.NfDh,JH\f{ j<^ia)zufc[$4ҡW91-Nc rWJbR/'5y'4۹9ON~ٸ$g)HMZ#R* )ddܲD Qf35%Xm͟ewwァ%#'探25\ֈHF~h:!T͋ &L m$"g! @|/֘ TH?D2 2ޖ_0Gp! $MI,IaoNEizkiQP1ȼEd {pZے,]EVGN0p1"AWGzL펵1^v@ T㶏z=zBJ2G]LC: SO] 5w &W 6|Z&,ߖnLj6B\1;"DB.5=+ B&A/&tXMGeIbMZk{~׿v~/7~?;O yF*óDio)|:G!bq h!6408O-kXf30e8I l+@<>>7](!/zߦy/:P8#GD[n>Cc 8Y];fS|~9S#bǽwԄU?|x-՘ǃy11bcP*Ұ4EDr$#5̎@ adl')J$f`B14r-LE*% @0s' B*,zƴ=jtܘEz)#+P%#82[k2Y}( W"6-jgs`1G[0G:#ZϹ<:."NXRZ`)4r@̿К0[pDJ>t =C$g(GYJi17'9eĈ,)1">Q ¢5&pF8&\) C0&BtU\jޫ"BJIIGn1' Mrff10U^@# B >mTyaAEY*J9}H0#ED(:4f/Gipٚ>sI`gu@4v3Pj%@r w`1)=zq)۾wq>˅fDn!/mt¦#tGFlepU?}zy~.u{yCG 3cxܣC9߾O>H[S'@DޏwX?3B}֚yAdc!1ҹ,,Vasznm2ܣ$6LX9:u,ia ipRad &,Z\N%61H C<cr[jM3H$&`ϲԅ&D~@\^<*m 3AQ&̙ڳO9`$ $f@*rȴ{2 ]rڑDQݤID`"=$z&9DW U-&or.%yhɊ0 f,u:/Dƪ`fh'1ba<)CoZCH^IS"Lg9=CD=Dhj9N7 S@p `"S]TQ 1,9Z,r O(S14Rwk  oڻ=\wwSDӊOppcdaAMǏ7a~wi킂З&HFȭ˕Ǹ HU6!ږU+r_CۣF, :">HkC{|BA @&ǰk GP0c ٮ z*Fffa@ j+ʼoјY5$љe%s6gdD JxHs´@f$&[m@p*[#I8 |im! \BE  DrGwA! Dbp@flN!BIyW u8aupLKI3МY v9A^(rʳ1`n{"l=A=X aJ@S[GVUkl n@©N.H Yr ݁r%[u)X'"y1G4kEWN Lzz^"ɞT6\8K=\AHnNIfiT)$#PRLs}Gm<j+p@Ĺ/Ms$s&  m@n %KZ5\aXfokFF"hOfD3%a6yj;~s7fm aͼ7 @ 2]; 0Wݹ+C#8t~>l >Л7^s郏r#F`ÝeUNqlOOOqDEX+ضE_۶-a"tnMp17xy̰n巾iT{L|mzGp\}a_|v. پy.M̒Ng2YejD&Po5=DLghK8-k,ړ&4p b|%Y5beYʗ J_Y$@("s$ҙp3iJªy`DzIզ%M&&JGO0ZmF‰!@-T 2P3@i=̋盞:1ifow6g2OZL+x\p}b^l9ׁ"4b=sm 3 9793$DrqH̵g&@"mŲPs2kO܄7YSf_'D8`j:ln>jyGO9 JSvOij0Uߏǡ/>aBD}Y$Xow{}a@\#< ZkH1ۺlp>o"?~h ~"wq?l_u}iCO}ߙ- `{:yeͳ/c'9PQ)WWdapDmigTu2'L!i9^ GED@&D=Pc8EEչ#?y|[49P"1<-T9Yl7N4 jvdPJ$YK~/kg"䢵9,n xRk=$F܂uX@ 0"Pxгڤ, S#)E!BDX[&羖LcL(4m& I JEΊ.'>#]3wu99H%R#Vyg pjFJlIc$s+%  pgW҈, 2KN0#^sre,sFtkP^naE02{a_`I$iSaMra6"m6T] ?u301=t%jq[a|DkmkCHs8M{&뺤&TZHݩ10pW>:2wq}ZE0 uQzݶmt3u]rt]#8wxYGBqo]r^7fAX~{x&T _6P@6 sr-0Dt*G`Σ2ZO_ϒ rL|W.gMHȿɣ)"s nYb{*&4$4*o2%' "pfL91Y ^&X1dzExͽ,Y5wC@`"wgf ZI9t$uDa$ '~C&p:kJN Y 9b9DR# .DQ͐Jʐ9>" "0Kc.4w(5p,HädXdVQQm'#bYr98s Dz\ |UpMxKYzY*9U^RQL[!B[D>އϿ; x);9[դpv|zci퍬K\r2"B`aDEcf\nQ6e@8f "1Aj7R땯љ|] /B`?B8+wݖ%<Ƒ .t3qҦ޻kSz )1o."~3U\7@U_faǮn4>ҺX 'uauW2!&E``44š/sQ.%:3'&q=P+:H fI!rT4&3rE2^3FDvg|#f_6I*^}*>QHdJI rb2iڱ^E+Μ@& 9;=o[LaC r~}#%C)4mI|یwg8WsIa>uPU3*eO*-xcnݚ+`i21E쁪[%eY$7DJ>e?414{%e.̦70&|y7+DԉhJH y.(y(jh6le!Ob ($mU&V*v3T}4YR{`̬#tm̤> 34;)N$WB}M}1}k 0 'S{eݼA>>^eޚP%RWY{Wu#L>92C_͕WY/m]5~D1{zzl9ݻ秧|MA7~IK189@I+zƿ QS2+x+ƣΚy:*J5ivT  fᭉ{Y)u? fDSp4,N sB841̮Τg&KT/2Tz;ٱA.ar(c!1 EbŸo"}O /ʏADIy&ٞ,xs w0cTGÕqS<'BDosa}aސ72PM] p%6Gݕq~;=/LΖ? 35xk#_TW72<` CIJ&:߈I!,`4pbhb.ES"ܚ䫽p}|"|iD>}AIe-֚ gKBM5DUA{,ښG]D0qh?,km!H0v,|,0~>n񭯾E,π‹!> ?n{ ] }4i^fC?]6L= cH~{}] \V0}/nqe>(|Bx|RbPE@Wa6w(륬t<9B6Q(A majِ¤W E49q@viDv^uyn6QyӞ(PLin6sQ'Nv^frQy"j!kY) E"1Y ܹ >W!rqndin4~\Da߉!Q4),=*a:#cŲy &ǭ}+e׻\phDc(튡αujjf-aAkWP[Z7=]BYg=co:u|}W⸧IDmŚ~֎>p>eַ} s#&v^kqjF>úm"c0wяޏjf%UA&Tx*OρY3W?W_V#BH-FYj/ҹY[g_qd1m7Ӿa3#K 0aj綺z+Q5:1Oͷ^6+IH|6ՊM=/tJ{r4`XOK[j='矉:+PUe"\|U6'#L ~p*%@6úqF:n, >|xa4wc17 F"@LYoBDJ K@m]l6!|]u_J$y=Dz\__L ].o~__>޿sC3׈EDp8 ,cݶf ж}>}iG1COTgnrQ=]}o ұ{k$ Leimɲ^ǗomXý,8ew扊F u08q dDgZDrug"G, OeoI%㴚աfCTD8Es1 ^̝& R]$ ˉz_'i9 { c1} &]dg?\;ޗSd 6| KBo--5%CaDU=WZ_?XXu ʫDO`f@804U+.s&N‰c *{MK[ . bv{'b3%"F9K;ʊ% FstYV0l۲HfVG ϫ_, K#/|)?UY,j?"mPăi j C$u6 ͌X aX̘9V4`n1E^^o狶ӻ4fCq0ʶnˊ`fbI/ږK[uCK$ .FBׇvY" oק〗;@[jf?yz|:iߏD.HG>(`X nac[Ǹ^m> 1=G}Cݎ|eeCwora Au}W$4֧~^."a d K$#goc9 Ź-H`"sO޺-8Ƀ8]F sds"9{s0">c"ԐN gNZ+NR$dDy~,R4Nq"?JP  U"Ɉ|IPNL@ I:uyb6#xuPUŬ`1F泫Md 2ՌJ5$LL%D9-$WBmZ#eeωeoB a$#ղjPU"aNΜIZf] ?aJrOO)T+F`FZ,bj̱rn5qNUk!j%Z%lOea7ʇ29Q;/$5ZKA1ApHHfRg2I8AqUҕmD)p$IqiX5mFnv1'0& g5<xpazDf_= )`mp4KҼ!u<<mmCVaEV"PFA槇n]8:oqs&7۷zp={|^o/"- [އ*ԢH$ ~ @' v<zj>Lke]ɒ# Œ͙,V>Aphl鑛J>Y/faEԶZ8O80Sk@3 "}X: Jh!2W5>WS2xs RXA7m9s@"RђՂ뙪GNsѧBH yTѳؠJr Q eL(cGXUFr֏R(B)ĻEp{|7Gfk7(w  눳?[༁9@tscpS!̂cpĈ}W]J`"89=FDPhuv9ZL.)0%g; 1@*9㌘JR%eiɦ nuK#сP AbkWTy8^)]R ¿pb g΂RRbWorE&vd{D}aÜ\|w8}'A0SiֱAKl=NqM{aË<<1MhS}8|<Ktgvf$lKQ,-v]?' ԧ0$40%aH)uhV 뾧NiTh$MtrNX>9Tf˲t+IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot3.png0000644000175000017500000045521614717152071030262 0ustar00hanshansPNG  IHDR6WsBITO IDATxweU;fXqOuʁ*T$I Dk]#Wt}۾ҦHEQUEtrgs?vT~->u^k5J5cE """"饗p8{ {a<3zX/;_K.;t˭/|`^&"""ϝG0juժU_iv]w!^s;/YxQhiuY]tȈp 7|B8pw7mԘs_p[nm?t޽{/׿,k[?[ҙLcQ,k9$IDNLL|;yOf˖-[n`mݺu̓xpmq~oc~>Ѹx7ί{>@&10woBs='.]G9ַ~_ַHb֭kmm{SjZoo矿k.`۷_pDDDDq˗{_Z1111H#$lx5~S;@ܷs2 Ơ{v0;UKD@=Ï6B,hY΅D]v('CzGDD@&I/  @^|+ v+)ӇoU+:YI<  EG#[ջŠk=lyZNfc:X zdJ G6 "LqMJx ~ }6@/;9tzfd._~Edz:F_ѧN jtˏ_֍AՆF}2 =Aar@'GګZ `9N^ W8&`CJ>8o`Q( ~:a@J[w. {~ hhCp]/06oWGwe(>Bu `y`{V_ɋ, /( >?nHd@G 4# =""d>Z3@_V$.s 9g~~Ǖǘub@-$#@%PI2yoL@D ݥΤ4'!>~LωWFq,3AhoQ<9t|d͉ zDDDH#"""^'D:C~GDDDg Jt zDDDğ7\.`x zDDDH#"""^'D:!􈈈 ǼmQu^DDӄ0y'!ȇK(aiWP\^'Z\A RaP۔RAg`F$茱{СCoMGd2y 7xGB?j/X~9!P(g?{ݫRK.Rj߾}c=kD,몫J$hƝw9::tTgg祗^M?|zÆ 7nB4pjz-qEAP(ի-z-ַ8NP(˻vS75⡇VBq',YlRP(A|Oݢׂ뮻.ņuuu[Zo|^pms!@6UJ\ _|qk׮]bI2LTJ5:H)ţ\K~18qqP'!Ԃ^i3ZȂ pl oԾtQgb$E f̢ά3jL٩B@RbMhED@ɐLUǴl)D<Λ6[PfebD J隦(%05JHRG$QBJێ!4~ҫ%L&VhZ0Wg*l- 7 Z vB ۯ!N0 !n,BD؇>;s~?OApRJ7oҒH$MӬe9ð_XB:q+(v6t8]-'O=}T4LJ;34 0McJI8⚦ *@sW(:SV |$Gm.4UCcTpfQF0F9cRBLW0  4Jsl  Veib!!hXC2]GJgbl N y,cRҚjXPҁPQFlD)$.o[ e{G:o KH))gu8R!󆸟3 7% ˲Z x≥K^}BPO.:ni*3?p#/B%8k631:u h*Q@E$*B(EI)׭XAnW;smzS$T~EV݅5\%`œTt䑛#WQG# H0JSaAwv,D@쫆sjh eLʴm!%2Ԫ!2~ϺN }gj*߲toNEzPPBTzVAXÿ) H$(pu;J)QvO+eܠ!ux<>00k׮d2h"4ժJF|;iS8 {j朗x<kkk۶m;NX`ɜݔRu]_4oe^vNBêN: QQ1D !i+[mJ>e+3S M$S:Q޵o|*?笻tמiPF.͚-{PG v&-i1x]O6p*_X 4S˵x>7,Zuۋi;aښ;:r-͏lW23΢JlC  Twto\g-nP$-杍nL'PDqlfjr}b.[=&>Y3frb1ﺆ2&c'} @4z h|'<F>0`x ~4 @Bu#ȣ @Ց*'W HC P$9#jRR)R@ΩM#0Ie_Cwߴ{``J nMϺu"4Div< %$UV*..倎f2at耨$DQJh!$w$R*~="TIE)eR @6EW@ @J$@!BD/ tgdd"hVVoX,f6!1F)mnnnH o_r!d>8]XzRu7JS / WIY;aL5:M53.øoOon8έ[-LLG/+ϙkSդuw 3x=H=$Fj$611y<ɕ*CCe-_wa FP5bǵZ)+gYK-wsI,nC=d}Vz _. @Xldu&fT#I*V 5_:sbgl- C׈Nmș EPJ0¾diLMmhI'bɱZl1M|%K2wS !K!)5'8Rx4PE(V,5jjhVDerKn0CT=+6WyC\!Gz)|Ҳ, 05A8  \hߖ93?:40]=PEp(#.E@H(P@$JNQ"<8¶]kןbdB!f2|e\J@Mu׫I_j0kkaR7DD'&5MfRSgPwZE4 $H "%"A#+_ti=9575STjhqq-gqڕU(D\<(i0z)iFf*5%9[v{% PTC8 %$Z;3jn8#z8- ((.xRrf0P"A&% E k'HPF 1Mca6RO7MsӦM1ƘR4MDtgvvm^_:p\|/r;HTQ,c{1o߾aJikk+OF/СC=X<O&xܶm45MR;pᛮ.^-O@ޔMV rLŭ;²TSSiZck=XV+}-?g Պcj 0\שV+d)K@MR??ff-NLX&ô4M!*)}OA}tp+U{EG|z\7&f|OMΕ4;N5LO^\ P]LBE(DN W B(:`(mB&] IDATV*xZ[hߊ>l9%z&gn()8BFIud #~.gwOBGʑ*P % 8O0 ^ٷePBH%%Q"H((" q2:b[ݜ00B) ҩƙJ밴۩=?$*V 5 ,d2~8uԒTDg,ôuFCs٩39Z<֚z % y[_砭=~$ݭB (,&Q,x%0 ȩ8>c(DP7'Pɗ*===޶m[Cƕ 2̶m]4ءCO~R,9 GÏG}hh{ yٕRjRt7fnf*wڊ*6\C4b'֪t'SسHplmO0ܼ^n涞Sn;087]܏n$ZP#B4a4]~jO8}إLN|,[dQP>ws䙧_\#@*e i!jֽL7"Z4 ܽוpZz&Lc\e@ ?`(:%0넷?Y1HF Q3ΐ鳣%\KKtmдcq*M FM\h#ڔ*ӰCwrﶝ7;x'ԃs+,k՗??{1ƹ#!%F Q PU-w4Bu6>Leg$U[cKz5+i´ d.V} .\ÊYnR,k|lδ. \182bo_R-YFZP-^{ /57w34; pC3Q li=S#Sv=42jocbᚐ(ϭ^ե '$]m[C[uEav:6[Dr޼:dg2d/kjRa0M- HAPQ+h[zWʦf)xo{ Ht4 6<5 xrhz/U:3=x=0(lRR &tu"$Cԙ^z]1hB0DbH =g"BƎ,p *J ETP)P 9U0 -M߻#c12OǙN!Tj=шIh*E+HO:57zB\b9TÒ}] U(ND@#SEP2YZ-tJ@SHÐ "RR"A" 84;wd2ǥH)O;4D, a /~kjjbغupbѲPF4HxH$(7|/ mgggO)jd4.bVٳgӦMm^јX,i'WJRL&NcX[[[ 9p8U}l3m3mǍ\FQaFqLlaCgR]0 b]ό-V@b]˗-T<ٮEn%b\)y;G <͇ML,'S3mlRhi2JӘ=gN˻( fVNwG|jҝQ}A5}|nió"p9@@1 (7I{t׸i[-鎥kp*,W"(eya  !(oÝ]C?{Gm&܀hg;ڳ~{̨ @(Bƀ)@8ryy!@[P9da@J睎^qgf'bV[(tvBR(iE@V k9ռt݆xbU4Mfi6'H/(p=F4shhX./޻{3de!<ԯ>|C_nXCGdTD@0T*A R+.Q0' T \m^-t}2xz#Z@HG:͔@ܶb0[[#F̲S ŨB$@uJ1YM?XjM暭uxGi# #Zãۓ'\ʶR+i2)[& #,l %@9T҇J d{%JK׌!Pb4`o*[N:nJ$/c <{P@qAR6d< eر[(IRJ*-Mm D6Q,^_nQwʅ: [t"Y#*G)&ZB&HD*D HU< O+J$Ԫ2J!ATRI%2B%`xgffbؼ% Bd2~C |>O?d2I)>yfuu]/}颋.[5Mk1p+o~X,vZMx}c?7暛o9˽=gꫯ>/^ٝTΞ[$0By`TWo@GXȧCғWݥ̔)jФ$xWJC_Vرh1iWJU5{`fCR /͕JՁ:v4e||{:DJy*Jd3e`dϦI+FlbxnjV7IZźZ6M֭li*̴֦cXGGZKGS |b=TBN[f[v~POoO4]|Nԛ,&[ t1[@ OO;ޟQys囷|#v]ygCn(IVY;5ݢtd;V6ZBPi(L׸5eФAŭi[yUo6_6Lȡa6ByQ ƧWR 0TV׈[UԿw%31197ֱ"b2F|j]r\d}[k]yeA^|t8=q1PP !>gS%(; Hꄺ.J) r$|s (, c1yx̮8cʺ_ %`hƬ)"F(0%\_O\kZC]DK')MJ7ߒL::gԷZug'0-A@eKӕ0PPSҫ1 !FwBzK[zsuYu}3EV! s=V\ SK 24t<6Sɀ2J1H HAi$DubL>xц]Z~TnW=i%Vrla!3]W@% &(vRG2dRbkx,R*uBB8A@ 5Zڶ=!I\pc=%ggg7oޜd(1]gff.҉;v@RYhѵ^]738G/~qu-YD_mmm-Z`XV)mtZ}iv7|aT*6,J<̙g)k>~K_ZxΞ&AL_n{G[5l Pt@wם f[cuWb{qEG?=YԜE]M۷x{/_bV#@ BXyR[9en/]|3gLlzbtZRnzfxݕ$dtxL3yS"9Ҏ-uJ^5Q 2m6_)Y)wޑȥT5yբ>L>nۍ2rv9@ʰ8SV]͕Z~f]q]~)kߞgmjih yي9[q#ԧc Vuwl;@%!T)0@TŠ==5<$K'SIJ,u੤^KlS;>Bs-V{MZc"j|)(W݆\s=fg߁g0DK7VZWj ɮ;{w, \) d(E(AJT!@P RP)$@!J$}B9S#QylgNͯfBZ8IB9<8Ԓ肾F) Ƒ0F9 &%'4| "c\#La~rJoX53=ͥж^v6gjrZ'ej-;MugZHR2T Jhi&uF| Ո&]*(qFB%LN΃P+^1=1e&@G)J-OL*\ն-J`TiL74Fÿٱwpl*a뚤"\:ޞ*ViîjxR+ T:}Jy/^s,$9"ѢL:4| Q KŁjH' eaRTTHT(PB/ kjjO6RrΟ|jpn4!~k_3MC)9g>#4H$RG۷o[;::,Y2222>>Ų֭[{w۶J\׵m\.{0,sǎ~ z,K###SgӦM6mcc`(5<^ӥ\ކLp77< M&3 A8t}i}ekٛ {\Ӟ{<9M^߽#^S={zw3Ք V37Neaf;Uj^rZٟQ~A''F:yxl=^{ NMUF;mv c֋wjqxiRm=jIbkӢFKs/׹=ll)-٤rUu3e’'2~ϛg>t%mZ>oglJLx϶-٘9G34XQNUN)+*C*5%i'F~;6m}sf =bA@f[Ua2[L %3nt ]Mc978= ȵO5fku@\q\N]"8o p@F9Adf$sj14JPK6A,f⩒ׅO{~P拐AtY1F7ݨcERˌEMˉ:Uiv_"_ tB-#%(9vz :-@JcCCC?|<rbŊBHu10>Tch{{`gggCLFc=~0jD"QVO?tDlnnfb1BHggg.RÍ ޘ0 ۻbҖ0 fzK)ϧ(2LV{9m*ߣx;'Lႃޜsfh^@8ihoY;PTҩDѣ/ Pjʱ?<56?<{{gutmӐَް씊?ox=rlk;m*ss #&j-O9:. SaP&Y|q98ؽov|j+?Ouꚩ3{˚ֽkz~#fӕ y3Q_>7,N$ Qp@=7)NRJrݠ W CH ( ?4ʒ:gCΙYT%4HB<6`0zyn6jOo-a6,^Ƙ1l& ,BTU*+w7xq"Uů2"9ĎDhmb"T*qHJ).T " LaS 4 T))56 tl&WO8T+H,ԃsJWx`\0,Ed}cx{\-A#Cyֹ?[ܻzpqwUMFơĝaPS"`Y37Ҕ(5"3 ^zr6'4ER+WA. +sDq `FA${FU鹋ʥ̌Ǝvć,1zCpdLGR $FLrÏϔɝ92t` 5XH! 03PBH+l`4:hHcjH04aD#0B o\`Wqu8^\\gq7 yeAyJeYR,ԙy䑯|P(H) !_U'zB0\HYz1:6IIfOݴwGSIMf|>oOUY_ O]lZk_~j8^in'ym.tC$N8Gmwep߼1Ź *9` I)YE:a:3ǖ !L(0qmq? 4RqιG Ŧs|$U2B3 Rh3[(%8^XvX|Dlt0Lx'Tz/<ORQ@ʔ}wkQ,Dآ9Ǝ1-l"T'T TV)LQT۽`xȶ q%hM5 0ȫX.2Sr<vyr9/tI 9(B\fg8J&5CÈkk't'I(# V* 05M#=5\߸{YE6o IDATZyz[.TZKpi 4HHO 40ѠysQ zr{׻{WWW~aÇǜ{fYvԩo_׵Zя~W~WƐwe~ٳgBB`p̙}ollxQ=Cryaa4={4;. 'N8t˗kXJ?[o?gϞR/}}?".]u 6rLYF-TkI?8 .qoEkQ2v C'IH#s+<7Uٳw}[y.6;+W NDH1q;*3ns,Q,5]#,W΃"پ}kk+"K)LfKj=+qK%#% .43ɩ矼tnzXĭ7(=s*~/*L?A=YHA c%JI˙ĔI259T &QV"PJ#Rcr-@BHIyF^*U (K'+%f3Mr1A/_Fñl5 XMg/X9w9M?2 Da͍Q\8wqtxtw??g0YQ9m.q@CAJ} P)-WBLHϕ b:I# % :5h cr!rZԨB40 SP"@I$[|ɥ%29 %gCKe,QJTFKKz^RZ5}akRjh L$Bp"Cwy5>KSqq݋9$c˜K~FQIؑR)ù(Ǽ>RW%Db.&DKBJkdbh/5{a !F+RTya%l:mYFRH hr^W1!q3IGYFbK:4z /t{ݴXA0IPT뫳ik @ͼDD2]ZEH܂x S4R6$敀kƧ>8ydTw/b.JRZ-B?$I7| 899я~3p8?Is, .o_Z6`TJO?=99麮/~g۔Rkkk _ŋbj]_l>{,r'N\-)28zkGIGY#heU[]ۡlL-Q3RG<\a/tnbqb([7=[}sǭn xF{`2Yh1OR=Q7yj3t)aN2&mV1 nAEFVL!`"v0i !iYY*Jirz^,~Pt衽 Yv:}/><-_?wpWzFQ°7?_D؉gF? H9E<7*v$2\(!X# @@kcSc%Afgx`fmmԥ[3|d|!39,eTt7W10RtcPJIƠ3lAW2pWVҰ9ӍFRmmݽû'GQFq=ueW,~nP52nm!1Uv tch"y'uY (S1*HLDQI8$L(fW(SOؖW*=7=i[! U<}ga01FKm4;=~ ӔK$26hPvY "mAQ,-) PӚ`$Оm1 VrggbiimۭV+>|:ki4O=˘~>N9-M,fgg;NZ˥sss0Ǖ՛on}P(\wukkkrmr0}sۿt /!(W;)7 ޝc陜Q K b)[q():LM\ R0gSs?'W:hD=G6޺xB%ʕNa>JC Xpvr *r~J2צˣ` .uzEt/uBPgѮ{nݷʻ|r^- i0K=#nKeRbɅ<.?XH".bʶs=sg)s"P )(!kg\)) Q8{mFfIPMd}3L0?,k4CF Jts"Q9L/LZ);p'V/|nx-_]5TeJ* 'Zk3`A0G(&FD 527,w+BFQL(%a"e$\pU*cfqJ,:=QvCVNQ%GJR 6RT"Iq\:3Lz jصkp\V 맟׃I6ڍg?op;,--=vٳg{o}bb/}cr\g?~gn1z3ȯ]ժ8Ia.1UFs(M!YtOͭ:;Y{Vg˷\w}{F9 u(ӪTOsg/mǐ7#SAg&Ο@ 0GGag8TlhF5D⮣L2 k}l4j&tے bzHsv(>v1e_*gwp uT F)ԒzˍxnfE՜a{.=h\xFs79Q_Di{~VO/T5*ۭBP[ɉJ`EbZ` (BTJ? 8ɔIDRSa%l(9vo6ðG4ΤJMS9H%ЫRtwzDy*M's/}Q+ $hP # &,G_7L Ȯb {n3:At-X!0q]_j]g4xQ&ӥ:瘽#R`(5X"tr4t&2IhYJR(Ipt{q;ԣYXcLQD.HYskkΝTKcYY.v1"saJ#  FŃ0Gqp bz>tqnV=7ZU%$&%C핦OmR21R !H`?*X,~SZiƑ#GΝ;w1Rn7I?MO~sBb޽G>0(2MsffX,+ѨZvq͍1񥥥Oǎ<8 n}sJ!!$ FDZ{\cG;'fLenV,Ü.vc±{q?ѫsaoIKS!I@29A.G&S)G7ֺK ӛ[{G#GR$ a:9Ja\eD07=|{$nX˗rlV¥ *ogb%]Ò2k"J3cBkKTDiRM(FRC HY[wȁK0 ʥ)aZc`ɲhcEʔm~;$UJ( qZ~8b%wܵɩN"4W+o\URJ@kiZB13=Myb'YF)-luİ h4-ۀ064vip-A^bER ;:,׷W6kSىvOD9BNQ:TbLDqۢ`tz-VDZ sFh`b!)4BB!ZcR'ZC&DF"3VkV[^4L|YU[+V9hP?tB1VQc$,jR֡RHZa쟞Nm!4N7lv{}\7oNUa=u7{E5A_ڰ._KvC[ eC}2,E)hsnΦṈ 4EO@)h^4XiF2reR2=SW_z\EkvifW\^vQ8RZNN''B 5M*,a1Z]o^(Jnrq`QТt#X8 y fؗ$!@ˋ!$$1F Hc'$J@%c᫆71No97pѣGY8Rv^ @v({>яՇaǶmqؿ`0{VWW}ٱlN}OJ}s{n!X$` |C:۶Fј˿[ouUWWĠqp-NcNT`6as|cԷ1tA68`=f`Ap ř0k'kAgA7cKf A4Sl矾x`(c6Z!Bd2Cu08az53eSۍsK5oM77.t/\\ħfgFM֡@Z'YTct+HbFV@J”R!a~{y0P"M٩bg{ow8a3(羊J!& 3P Eގ@k6pb+'~[n7n'pI޴z$p-qd7{`˜~o0863V+%-I0^8~C\Ap$Y1c!<@`4 5b 4&7SY7 ¥kjPQl6,J\ooz/>sW=sry5{-:Cf-T`9 $'Vk Z РM@CRPNtF*#XH+pqkkp(@)sWi[[[Nj8ws>77vh>Wkk׮o~w//$I2;ڵo;񎱡XK=}#KzN+2۶_V{D$Vhn7O@M+@ lmsB5]0D~KLrٟ\;mPGx;/<3]2`9sk"/_ت.R^nb>W5CNsʅB=$foOFn;WؒJKɰ&X~y-0NY^¹T(^?P 1%33 YgCn4Լ9UoganxGڽ&I郳 s@>q|Dv;_Afa21 ϱ&V+~;i0YbJFx,9^i!DTdH+$X6[% 2LZ6Y%P@j- R5RZcDR &a>rspd~k_{<ԙ$jDljuW[}!:# * F(rel]z]ف]G*ezQ'1T4MV&2@pũXI@9WBLp!iF!nA1 ^I2"TyL`Aٳ)*弩d!N)#k r҄5{aft|+l@`j~~ Z?ctⅵSR$'†peP8:yt/G*OM[*j;7UzXJ~?|᠇s91˖֛nWEYDc?_ (eh@h J \#4DUa:q,.+GЯ}Ccs>BpС\.7VBB9hպk>[[x//9rdLjWB·!fggq'#8|u]7>eG()?OL Ybbr JӔ^7J[6L)V꼉E'82Oa(eF70CA-=~ִ,ƈivϳXy<Y0ZnjY*8j  IB" b./K-2lS{H`BX# 0"1f˥QhD8ln6:텪:5] Z @Oxym+ky?x\ ?/ IDATSNa|+xȦ IFþcI´Da^YS!eJIIsa` AfB׫f}"oc7[@k$CiXX L""^o۳{NJ:UD66*6|t&6M%$eLoy}24[Xi3zn/oY[˜p.21Ncd Zmy꩙c4nAw)se25 Dv_wB,)`t\ >r-"b3 J+'hf')c,YmTu{A0=U+կ Ӣ StW?ءkJ9o,wܒ.NƖ!S4c6ͥkVLL7!1C㠷+WWewxw) ZeP t;Vyog떅T~'N2S'OLLOr.^ZD)Q0W6"Z9dfrf]NHu%09,W9[[4NVq%V\yJ!6WWq@')rίMqu':Nh;θ }FT?H)Md<Θ~J1f<WKdC1*RPJ1Y/7ۃ(j6&V!B F gb 2!IgG]~R FalyebřpYVg{) P(gX/TI,ސr(ltD'Bk.(.-LvuŢyΠݓ%!EYfep-&\j *Vv˵-Zˌ1 .M>ۘ_}ZjɸbgI]l# X<兩'fVG?Ԩ<1bXh0Brްi+c/c4c@#!͈if&QFR6 d0* z$@8Hk5X Ra;v#4ylyg$fhHHVT]g^r'!}]Xi_Y|{- qex)SJ !qزTjsHʴlbb0J+5vg5I$S;p&5̰:I#?B0bL$b`admFƘʌ4"%Y6&*Y KABSi$Cd@LPK7?5qaeChnK:vnn>.I0OM$0آ,gdžAP=j6JW^:q7ҩR2(i m.4FK5RGR#0P՘j˯BJ@1c+QrW<}|Mgof\e<ƊHbda4lY=n8ӫkC,NWYjnֈRZ*B0:zi6qM w| ab4Wʏ8-|' @k-RLV V*=Pt@`L1QD%K>*1msv=>\^_m= ? A MDcˉ铇wφ]wOߟ/j9oz݈" UǑ3(& )0423QHH!MӶ-Od(VfTsV)Ots0"vhH#Deػa|f`FTr@bq~[~R+X!DHd2ek#ŏ?B={l"!{b;tǝ`p,u~)dEi"22MyE0"DcH*-BJKR[%dJ*ի1teJq9/ Awxmw~g&H*K1JI)1 d0Hi*aŔWɗ d*FVikrnʭ\{ GzGy#lfʶ^,EZ1) 3TQLZ(WvUk"h@1`DZa$E"Bh{sǾ+XQe債4;Rq X9:a{}1%0!ҭXm46<3hZh3J'nɳ- 2@4MAZc5 BHi(VᐨbP (3Sz%,^;(W ,<~R6: RJZUĝ_S̯sy}ͯ?zd+q&H!@cEk1QJ !LDJiikyTLS;|yySˉ2%Wo Z-)VW0h5_}WWfBL΋H\d1q2 8y:Xjn(傫N(NbTגn+.*tv .55aОm0EJ9/Hg)/.Zk$D)Rsǎ ?z8'ˎYq%Q0J/n=M;~m?֩xWJ#DkxqubN88"lll`RU ә<Ӡmfi]0JEi(cfgӜ[1[cyw j,8Z{qqmZ|h)^߼1JFgZi >*N`ދ?%{uW5( IaYfrBT";؜E:w~Ͼ1b4R3d̤0 5wꢗ,2 L:5s5Ov:s7X0PE@b^>dh Ɛ 4t"+|_hnP1̜qV(\\ssRCBph`0(qe\;off~곟<,qB2o¡oޜk+&SO֫pr_X)9U!UzU!,. Qms^8 zw!"Xd. y˳nTh1jc;&ygR}M>1nOt`yf(hR +Uln87^[rn~ڨl,RىZ;РC{ku4;O~aOCV>əٹ[[GrSd!Ox'߼:LިV*՘G> <#4>}lޚY +Qީc?q\O:BYL"8~Z6ڠZ J]4IErzmXɌogXnC(2>GH1b:U?o:=ܼz>Ov x`6F 9wlqԑWd5FGڳuՕyX7PY{ޙ"o.]>=HKy}32+p7D:Xx‹>~V[I lah FxҦܦnJPZCcri{_C:1Bj?iԺKO1E==J:2nU iZY^@{BƑViudd~ȑoWMU*%cHtZZc:o[pE3CT&BL#-9pYiFYn)b~;[ɛW.U>^ H˲R*aw AH竜qb-Ll= `B8/g#I|牿xߧK'GYQo,/ߺquj,7~=O=vߌRSkMךӵ8jԮ;[18s[$*rO(Eb6gqX- uZv'G͵fJrf+Wwn@B:dXϝ?9!#I6  wz.fʟ{LHY}⩇OU귟{Ƣ|b3'unǣ?>pxI yF֖S'OE;zKSr58;2Ae2G9'*9猵t_Ms9fdzX C! _.\q1(jBƬ\!紽JSpMZ) ƍz!_8GYg_l+:@D63}vsc>鯜 xɸ}d@ d |~ޟ>ZxaGW/0RR% Axj~^of>t+FmkcgdZsJ.;];M-U]~5h\nfNK&a55nעh7hx=a8KYd:sqo~?oF6|_zgo_ܒfÌn\[2̾gZU1j{\ܕ b7cNH#m˳oFuj}sP~C/ ,V(6PuBFʡaIG⅓[xe/sЀ IDAT[m2m?r+`<0j~l! {^{`'iM:)[ 66Ƒ]QPhcLmkqRfg/fn-\SYrMD\Kn4@dtv=QQ%m6 [󍅥viFjd({3Y:F/}cS- 7fNRC'G=5֚lw_wf'fȉ#3͆=2n^G̣Zz;J,fj=RidTf#FD$e+-zss󎧞g_oyFVA"rp`ߓb |_S9#P:'}ۗΑs@^*ghdׅ(h\X!8\=w \2xpZY=yhkxCO>>sy Wj[=5uWWhv6Xmqz\\oww>?ӜREԠ;HGE+,@%nH pnpYPg#ppeh3>ןhJD'&qhBޞVD?(sg= tMV㨢V`j=UAw{TC 37zY:"-H1ݬֻvkWsso\ FI2`P);?^}y/\\?_:E/~ۯc5 OwkG_fE~9uy0aìU󟿔n#-:v?Hl\6-Rrevk扃3)CoJ3;-AE8 bC -%w͵:) ".-r$15oG9m7z߯>|{;_^ wT{.Y@cjȘ5spZ1/16CZ%_۞kV_ҏBBY"@9#✱ sib<7۔2p~GBHhq>Y $NTjZV9Y2_Fkn9s7[e8R+W탸x\ov$),gEETON֪9Gzt*dzFwgyן=r tP' Ymj,,ssnWHδA)9 8췺@MwMt9 JaN6#G9昛l2)}ItsϾp^>^jy9V嵱VEA:8s:f[UcW6/]\~'ĴE2|:R1yq{(]%oxmF'.N`[ºd3'O6Fv{n^+It9M^=lc YOMgbS:g;=XIV0@/Y%p ~`篖׾r|Yq 8@ !Oys?s?N 2*e~ {z?fq쏊kWgaZ& :#@{>k=Gjiݞ4f2]dE?h-0wwzò;RD-~<+50!Agw7rGE#08dniwkbexR)q}dXm{V$ ݅>pzPX/Gըz_/cJE+˴(`av7d#]:ԙS{ ȫ“Rh4VJ5+4YFI 9LaBXJZ_}g_X LCBd֪IFz0d"ȵ7&O=_B;G 8fmC L+bn%}#zrXKݧ;I9(+g ':j/LeNe}V*OR cJ\\\ٞiͼ㩧W{q񳏾=/O> FUdƸm.ハu_)c5X ]dK[Y^ "bpd!L\a@tj$@wۂ0,D4`鎏7fy`%^I PF+V11t:/nt b0EzLMcc@,2kh(vQoұ/*!Tp_c)݃Ywš Ɉ݁Y LoOt{=CO_N=_ғTM\2ifbϻU~[V!R}~L3 O?eӞvSa=@2R Ba@ 0U-]wNkD fIZ5mPD  "Á/@b7Ed?Dٯov <"I@Y͵\*-̓]R+$81'C9G(j'so[ ;oEy+흶^mV #cGRp,gLn|/M( L82Io>9n:GgqІƼΑ2Gd7NDDd|rgLz4@ƘlT-ywɇUY J{Hn1J LMD>.%0+֧-83o" j\JY=O `-gվ_?FG̡ǃ_~9$\2 *%<ɳ6DLG La= I#M{:z;;u+GPq5fcĀnt]|{8Ҳ¢J`+c0SfI"bިKCejUAɉ@[ 눤;O{>qqo{4(C{\"hV+S3qƇN%c]SDҲ8]~ 8JtY eKB)DҁŤ??~k7wDoo~PNRޓ|G^97 *[b_95te_?m5;O<>Rb# 1@ 4֚{u3\&'{CCac33'`=GJ;8IrO/$<7 !jqTq8s $xgY>٪V4 pĴUD!4۽N?u2׫LU#-\- )Չ!"nhJG8+[DkYX5tnmSV7!3SM!"mLWo\pY֗ө\on(szOvDFˎ-}?'H[ms2^:#VnovLzmTk 0*sܛ;4g?֭7bG9UaETfkkŜ!yHꦴ>қcܸ>̹9:Q0܅h,! v#moJ)}R(M^j/}@M^m/ꁺ~шցqdu7^;7D$, GSV8j% zX;nPloӬ @0JDzC4*2M7mͷ=Qs^frٰրN2y!tI!97o,SWmofSO'+Wʒ8#jd8*CKQciɃٟܺ'V[+;~km+q]^n.1e}tZņY;g4s`PY˅A$YL /-TZzFαS~+#q&,89R J߶( Z8dViZ]N0gɴ Q%xX$Uk 3C't$@>uڒ9܈Rr7Z" H3(\TBO01 !"0ɘ Y3/6yA f0Tlŭ Ի~vk&^yΦ`CR D<]tH=ԄLG*#2n6] kϭ ÇLsdG}y~Tؽ\`3-:tQd;SBJisg,>"ȑDHw ʽ{io^o|_w/{9wτPcxubO yW8ϓ,0q;]qݞTf; lyN!deZ60 *}TJ( M)ӣ\Q'λ8h%Ϧg˲, #ag8MJ]>rt;+~=r [z~G]N4p8 *+_:ZsQoTp~gS.A+bw鸔;م7.ԃsgDƏ>oz4,<-:Fӳtپ9(^~$4[9\]O)ÚMSLz>\jxvEvӯ58ڟ{׿GQ 9gR "i'ţ=O:s@q M3|걃;}g T*Sm? {7s#,N6f87c PtgWIkCikiΨ(x\pp9}241M. R[m N̴#5sBP"ѐ 0EY5"c@z=f ,0|,dM6&"\H k1X"@O&2&ؼY eXg9u4;;[*"Q1  "(8l}RE~Dk}uOr&8CDB1'04Ȉ R+eUy1sUhs7v^9@ԻCǿ̷@`9q5LVh;fƋg_?u祃ua5|WVW^_z&z0bH:+QDd\lpry[=>=Gkj`:x}94Z.F0 E9e)Dr"Bd@h-$'h;4, /~~~Z/>䓓^vy?}"[,00@Aī…..>zj3|} WW"7v.gJmX6ݶ5՚cjy>bt:Eq}#\fKM|ˑ96۴W㹃E^g<_:uULJb -/_Zz sZmf>WiiDtYW吡Cɬù\v-F_zv݇ܩ[nܵ!INA=n֢hYTj4Ui cog3_ex;3#Yc49'=@qrj#K3QY(Gmf=jμG>vk7Wd Z3TaQfqP ]ZrF瑇wr2հN0%t؉4ZYg)3e $wU' &FȭU rRj\~zJ9*,z#p85d X@97U?.kIrF: !cvJEQVJkMK IDAT,KQ29:{JY> (Tz%o?\ jvjldy^p9dc(\I˗7#%,'0Ҡ0BbH4ָUPeA?u%{|m\4xAqlڹM Āq `b$& Sʊ"?կ/PJ~ٳgVk<sh<_reJ{"ؽw򞀳uqۀ~QrLi^:̑d^•9tܕ+lTø,s1`$zbfgw@&Piqi+Sn gY]Eēlg%<6=JZؾvukmu`u)d;rjo0:/_XGiƔ_qDcOm6\I}B0|RbQA Jy ^,{ ?.'=$ bN wE?_^YlNqBCd [ީC'رXyNLF2 9`~Gy$Xw92vsc{S%<ܲe!@!\~" g`eYdyc,1 YTj8|n@YQ~uo.@p AL=<9T tݎ"n #I`6I r6z#G2s;8['ȳ_Gi2ʔF0.q(GY@j_RH vM&/T!9rȥ7/ Ύ9PT ;q{M^!qiY#"GΒcBʫ 2øVWF×J3A&6͸X]_.D7nn&^_KEQ^{IKq|`i@Y {T=5cx8J@X,< *~k -"xFgٖCf(mRjNVw||?ۻj59 XS';jegc0leݔmV:;;Cˏ.?sל( ={j32S'zטAkM s }ds~'+; mkEPaRWI`YY 0Q+om=I۝?ݬGհYR^&+WˇP>4݈lnյ*Enq04j>;yZ zya'.22謓RsKι%p`i[mͧ;yC L^,ߺ8||C nOV^hm1no_s]^kmn(hOfgۂyOU9RzZWu.Z2~?ёCKZެ*ǥ3@h \(,b^7ZsGZ1ѿ8 gޛu]ހF7b'HQHm$DJeYGU]KURkSdO*UɏL&35UTRĞ؉%YlY%($@bzAg~׏UM2Ϲ@T, œ&OI(M m۶wtJŅ+#rQX6 D861|7&  qv& @ @v%H @>fB\!}Bzh$bN%j }t-9'3EMT+]lLjrGkDSPcmL+@׺P]-X%b'S-qObm۶,+^X Et:-+/{!d2l**ili($mž+ _p߾N)*:RԲjl#dvaVd橻+\g]D,;./}%:۶8#kk]7NLLИTWV+HuĶѱ gG |g" t[#|sGi•(Φeء SYi4REۢX*sljGds+\}݋>󜛟Kz ,Ֆ޻>|JQ PV9S-@YwlAGBV8P$A)OJ!- @˲<"P D 8OQK@CjhY3@Pm ?\?,x3-DRuNJ  ^)Ltt7Fc xj~R,;ՑG;R*;ڿcL];s.W]]ମrvBZ,nV وvx*% NuViǒRkOʪkD<ԞL/U2R2#]΅'k )xa 65W~;Z XEiIpKt)tJr#]ZCXl{3Hlnhh8hz~EU'0=-L:Q6Żv a%$h_O- 4!*qk8\k'JǑmѨ`-HGFbC\jt\P9̌XnoN?->3.,ّ.+6=.:;jHDffS'kyHS裷M#RGTj+_p#hQ%\d1De#! G"-ɸ)d+)#57Gʃ V(ތ2xGBܡR&3mnb|cScSI͏T*xuyv$BABslKN^竕%mµBh ibj&tb(%ǜ|TVV*,eRj\#e6qղR'U9W*?0;70?U488BXUF{  czV5AGDK/TTQ:H/r+ym[ SO={J4wExɊ`:&ҍ:pC=q ZC.D#`O}4RKy@T)| bHZi6+RK5y }@J.7_k99H@ͱh67>0 7Hjhtq~ apR qG -s S\A+(O:I̓@"2ՊWTH+,hT'ラړ-"lERŁG[n4%W݉RCd.h[RZ&,hH6ETRTdHC䟖6ZeSKBWs'?htT+^xE`pCWɍj6M>0_J7˼<;vl\)`܉PW?671၁[ܹO oG ~L['XV+y~3˿CZs"՞ NmqkΞ[շF&;q| ;fW0 nj0l,2vY}[w*h{zz_>; *J[[[F8.S7cL&oVԮ]?1=؁n*VljLRhtTwhl`nll9C\. ')ecc'DT(C\7Ԝ烲B wy^yxsKRe|76:k X+WKW`MDZkYP1_Paw6ָXӱ;[ʶ'Ojo+P(ǃoӧgϞݵkm\_QR+׮]R&IƑٲo>w W`#zX[Dd8~=_~ԠYɠ2̴L,> lێbHsԶǏ~ )&~=z ۶ms]äQ;ɓ'] [08[~(~|V eYsJ۶ rYu?jjjZXX,+KKJor{kƫ{%?O{{{W#uz={Q8N"XQ. #-z8/`cO5"ro/_/cǎ3g455E" e=į &ݻ. \"fmq^:33d9L&~顡T*;gΜy'-zx!*^xg BSSSO=ԫ088o?MMM######RʆT*uǏ>|_r㛔_sBwڵpݻwΝǏ%VJ755=C㯽O?S&''yX,p^{m'NҗfO>}=ݻW_]ZZFN\r} >|xtttffü֫hYV<)k"]paϞ====Ǐ_XX^z!3gvzĉbOLL|_\ZZD"R'Ntuu=CDtObB" BlADSOٶ=66{ر{,+9rdpppdd$ ܹ>ػwsqz{{-lkkK$t|8wŋկ2o``|T*;wn~~c=vرl6ONMMݻ̙3|zX7440 ֋۶m{7Ν;yEMNN2]\\|zJRӧ~!ɓ'oDٹgy&L=zRnHSS&%hD޵kK'ofP8r䈔ٳ/_noo뭷Į]?w={'MMMO>k~sR/c=fYV2BΝ;x`gggP8yd\޾}K}٩/}om@Y200pʕX,&rSO=ь JzMJ)SphhHk=11;v'tR\޵kožrB0??/7߼|RxRٽ{KOX\zٳ4XuʕW^y%wy矿tro_x1s/;wn߾}۷o_XX8{$1c̻otuu}Gp&=ӧ/\O_rP(6~C&'';::ܹsBGywޙ5Xuԩ^{gllP(\t驧:w=qlj?с:u[V>Jo K8055yd> .<]]]"VǏorS@ cǎ93==J.^o]v^kjjڿK;v ]]]J)ɓ'y0^zڵ;vg?JRGOr=s{w=uooyg_71ɜgU=h5744H)h4ݶm˗._ۻ噎9|P( +&''CPww7ٻwJg?77cXRuuu566rnnZ]vcoJ{>|x`` NG"!(U IDAT>|8JMNNBlBT"mX,> 'x/wX,jll îd Q[[[<gF:{ }lnn.D8Çmf:|RO3?~}7ڦmlltѣϟN:ED{]Ѩ<S ݲ/6667\}nncQf5 _ߟJ}v444Q4-JgϞRNLL\~ѣ[XXyDlhhp'Vs) '1 T.;;;7C(ZZZ㥗^H:} _|~#=ꫯ*xG}tjjjzzu]Vy_|<^xZ%X,ƌpϞ=Ba||i!+֡Pv M~]k-kC[Y8:gii̙3O?4KF`M-69sf߾}L1W0?Ök^|'Jkm۶R*%k'MTI۶_xᅯ~,&þfV|?Fv*=82.<ܓ`"s [;rtttiiisT*f``Ǐ?aB_+P=yq)/Ex;=c+;_ Q,D<|2 $R˃ML"kttt~~R<㼆9^ M{~֖ě=FDz[5J3g{,McLX F ^W~@ aJpz*ǟmQ I)p}` 0Xn?pisb]~S.cدuE b.b7V@XjpK&tcUgGWIY0O{j7 +@1??_*juE-eY 6ɛzM-{DWE 7g[2/{KܷW+~eimm:w׭)'G͡&ABKf6g5 n51YF$P?|^P˿IgNۂ-؂-؂_ll[} `  gA-SYq_zͮ~3!XRf Z~#^s%lwnzMz+`%AGD5W2uPVB6j7l֩T#8 92L6UJilv="JL&S5J%F0,-- !2\}!xX{Nsyʃ/|>9(6T*`n#TB iDfrd8YQ(tX|b&|Kc]Vk~R)ųa bo-Ed2rRֺRSɽ˞JέZkd8>:@ /[MA.t::/ ol6dJbuּV2^TkcL.rf1 "*2L&ɔjfרXV\ёJ"=ϛsV=YB|Ge-,,0p mۅB3::%rTV"gX@P(˕J%JB!f|r>|__yL Ov:fJTUX\\d2BWT[t]\.OOOOR0oL&xbR\re۶m׮]rRR,..Vb\eBfxrl6 RJ˲85y7;;KD|'Ns$h@TZ\\Lhtffy )J\'1d2T*eb*r]w~~~ii׹8&A&r|\.3\ +X\~<&\<).)MLLp XVdö%cؘsYK׿"/B]eKnBDCCC׮]?77SFWW[\aNfRittX,cnĊDg.ysd2Р>qgܹ3qV:59ڵ+N`4C.w{BQۧnll,JR)wvvZ}x<ݻw|[%@W}]w)J/_Fĉl6{5"]+*eYwFX,b]qڵd2Y*vڵo߾j*H&'ֳ###m 陙t:JX,d2\9RjppR[Nxggg8D"\ Z6miiRvwwܹU.1;wt]7qׯOMMy7>>~ J^u8s.> om Dqrۻ^at^BT*T*y("NNNMo{5444TUf̼SOOOC Aj XcWVjii1.\aLf3r@~ͅBKuB!6>eYbu] 8s60>w+a% &MMM\;pc|_JH$n6}wXsŋڲ]WasW2|ᇭh4Jsad2F[ZZ "ZH$B Z\FR.Bŋ;c[ZZp7FFFxSb1&5l.őN84nmmeUrݜ5Sr(*|AZ>lZҔP((qJҒ8,1ZHgr=TkCºX,FQֶxP 晙&$ hP(NW*E)VTVk1D$ ۂru$Ydraa!BdJ)mQSSS>Rj,qBK \+lflIBP-XX,f2۶yp^Bl;e<;r]2v|>oٶm4bM%0Rf2ncfk` LBA7py@< $5ujA;%2>XCM[ѱ5[uG|A'W,Ƞ|A7^5۠5̻ƚaMփ7܁OCowG 7iC*5䷡V{o5kBX_׷~M fI2 cAq ;neCm }<(-is>:o.sٰPUQʠ[|'>XVll[} ` -[[p2z4h9-RJ%RrB!H2 B1S"lXwy+w6rҧL[gg/?cWj* ٜ,Ne)?~/z"<<)$/oڶ{󛃏}H(v R}}}.b?D"7ݖokR__rjeYJR' t// ΙK333o*<5"؟O8ի#R^.G, <џMڣO<σV_#an hWC|d#ղ&?JuzzgffJZŢtT*!u]#}k2d¡H__ߵk 10kFCԔhnNrR.\P8g @k ^MVhD={g9Lk/O\-.esKKLZVZ+c&2@Db"&6ԲO.`k9%y"E} }>HUip# h2kTܘ$cd4Նkf `H 1]v+|wqm VD 6_:E~{7RֺoO>5ݻwddPȏ˕k׮--- !V\hwUV!h1Qh55547+4r4Sk @j---l:>9 Lm[ ^DA*? 2AwZ=rH[Vƭv8B,Z(%hКQG}jƅ̈ѧ5 sU/ږeYVRBJ!/#^.``͐ %s b@u ceRڀ2,4|25LZ+Cd'2JSo%LBσD HiH'KEhYA<@=vYB)" ."O7h-$vH(%Xli$"_QK5 ;@^%0 2o$BD(@*J=]F{^EU^2kdsP\lql!i:p2F*U%ƀRU@pBzH$H2en5FZ)u0W\, oR>7CX'!`uR튲\0rur #`@ghʋ%2x@^(P" }G|U2\#,+Svp8\zBH˒m`[]-2FATSܠRHOD1 @+QC@C<& 徰^7↗HE R#& "")V-cLs2y"(b[zFc<*R\q\۶BBڎ%dqC#mAJ)ABHDdZH)(%$宠0HCXUjmѲ2S \ܐ J+q"Zν3mu]7 1UJņ)%_BZhHVe)놌1iF0@h "RMO1P P#~<w~ )ars RX Ҳ0h A@""_ :RWl՗ج ^$%hm@XY-qB.iK fd1C"cΪI)l90"(Q$th+4@!(_ f` WI% B$a@$m5͚؉{]5`LUwx\_o2kYXTHi!֬8Vm %M4r7h&%K !ےV"PA#hIUSɑ ?[\g|5$mK 0@ͺ*Fqc*9"F=?75(e,K:6dqB[JQ?0::b0k9L:`""-PJ>Uu_y.DDP(LDRT*km2PsT}@TpڊЎn`PDs6hɀG0߯W2 ["&lD_@\&aN";&A?m>rЗi`{C}=x@kYM['D]^+\"D G 鈌ѵu:8 )"R&SPg$ jC)m@k$Ahjo d!2$6'5Ұ/K0(ВmmHAX U"o.bӇA5iSY@uLF|4c1י`4)|Un m,ϭ {`d ܘ*l$~-V'M0gL<#"@[x@0l5RKFcXLQEC;M$X#%B"C@0 !Ffz_ܾR\QUϫV=bv=ژFo*JpCBͺRiےe)?vuax в,_ 5wîL rjbKDB@a/w&T6\v'-K ^y`Lkkk[[" UUlۖҒRjn!,+˕P(!CDTBąm۶ %/(5 T*y^50A)? E߭?ē$ض#%m) R$"iIP@~=aI@ kWk3.jV 5݊}ݾ۶4nm׌&5vMJDi YCR1 %t` PȠ1 x `PX)?=A VZiMLS(4@$Ts6HưAB }`Yj^FAmӵ'B05 Bv9 AHl +ܬYKc4`a|77J (%#&}A!  s$$`OH}D&oDIi,9AD7zk!IQ FZZ@ J@UE Ј* J mʂQAh! Y34 } A5a^-C媴m!-7*(Ӡ6Z)My/<~1 6hOWǶ椮$ uB(yjBη-f|K44jV1@!8'7ܘ}O0V}W.7ě:Zh"dݽ~#O(e|g3t"HSDXDժe۶BJy^Prdڌ\]X\hlKq 0FR)$I(?kolug_&AH))qJIdɥ$N %HN4q0"(qog{׍*9B=6߰f'OS=KDҤ!i-ܸJ(! Ȉ@y(,a):DD^|5Bh2q D(L ("xQ uQB'I!RwBAP7 H Cg@dFQ50Y/"$FeUol&}RphXcٗ,m+5W2R8a `O∔BmGXYئ8)LgHBIcC_BBJ?Pu@*7@ف "7Pվ7D{J  #TY𕹋i*EZ68%j\Z2HiH(P)#e3 jx#'Vaō >FeTMlUIG㧞gmε{;oxADȄW%ݢ((A$.Kh4#۝ݣGZk(8x<^_ߘB"2|Gy+D¡y8L:Vӯ^:&O`wwINX؋lDQJd2y=}]ιzJk}he7߻z@Qd7,GEVD: u{=EEYB1M C+>ȴ/t~Pt{ϟ=s4}$ZD" = ʹ!IeBU7F HBBF0pZ^HKr(ʟ?,1+ `+/h݉=uӓھ%Z:͎9 Ż jDBb͊WC. H+9GkȫoLˮZ$BCD(@U굤°bO4A0Uo**pR|!("(2B=m:| ! = *+üU dd0 "urS4 x \xfeƶD&,fOK/,Ͽ?_aCZcy>A 8Q ̟8qR(/b0./KYxc#zy+{7%Ht׮m;ڳϿvY{o齢pBwh86Fl>xy!Hm(ffMEڠR WMfF!Ͼrj@drXbZK/^VtfE ."*8b5p";vO@ŊA/UidbK<;$P&!eft J*&"<4Vott_\]@UohZU k~{̹W. (CssH*,h*|5MlQg_X?s*;gB@XPpم9C8޳)[3=oϾ(pǏ;~C}Vhcc""ZqEQAE Q!z$D)}'=)aLԩS_4-"yu:}r~]g!.w~wq7s y_t]"?t'A0E&JH H :280 (U'/K;[/;Xkk R⧊5XXiAAZ7A@bDt͟*7̀ # Tdۈ=0XΡuN[{tY{?Lvgg$q u*fk g֞[f]~0/8VB,{Rf$ yX7PXr1Yl 2JIU%ꮫ:肀B +b`#hJ~ET)1`n *$Q;T°PN[$P[[uIS*Bfgx,@ Ra]뀀(PM:i\V%aat cCv2̣E@T=B_ǞB~[^D&%<NnͫT$3zB5ʅ* W.O\13>x`_w"2Q3-Hj HBbٹ":d2SZڔ;D"SBfFBy*3ié|"_GQSZ8!yyyyu?+/[o{O|駟~3Vk4-//+g~1y^8o[ I눢ַ~l6E{?77ۻ唊Μy *ƅ{VM<і}o6?-gw3 \_2O|. +H@J,aV S*% Aa)@|h򪂮 #BL+zS՛!V* ;dX9BF`J:xz!2eXa:hW}s@h8gBϧf (Xkݑ~nkv0+yG髽gj#PU*TRD+@&M57<" g@VN)@X{С?wF޿|Iۗ|i9πVK$pJʹ^To9ye]+` ) *NwUMA8Zj4FPkrTYt.aFj̃?{Ნ\ze87<ϝAWy/[[;ns~sD €,g> s}bvvvǾ#;v|<EeKolƅ%m$U$# oz@)RRu.xJ?JLjNeM"XgnD18J*=4Sd*bՙA0 {! *TiM'gZ;W׏[9u 5VV&[Q=Wͼx!&a}Rẅxj|R*tV+?c`=( q&o}=ڕWt^]]'6(&`R;&ɡ:mF{{;' ?3" 4T tWi {nH:[="0z:Τ:ᕯ~k SfpQh\Q)uȑ`G Q'DCO@^; S{¶>j4*70g[X5!yվ] _ә7/V* v,|W<0M`WJҚ4)xfT9ge t#;"$$DDݻxrq}7uR5b3F~oz mȉvg'Δ>V,d􁘙",Tm0) )#R4C1{& S$ Yi}c|BҜ&IdҬ$qf@ GzdjfRw{ӌo;}m-g`3!-A1 `-Dt@CztP,L?x$TDei* :wu)Nd@J3NS "*1 Y"aJ/0AD<*"!IUK@adTHBIi0Nle,r| y㱽4q*s-XٸZ3)4y龎 J`aD 8azUP#D 9W{[ϋy D((VX.6V+;z嫱Yff$ {ߋ6f,9j@ # H!ԯ݄&Ղ` P7xhի9pOQNHB (5NDVY^ĔiCVBZkhja& PeѿqڜOhqÈ˫&+, @ 5S"02r;3E=/̷hԗ:c#5zB,rea~wgJQq+Gp ɋ;-A@`:/?w>wɋ/./^$ բD!icNщnOlq%i6)G/28iCXM<#"v<RZU@!## jIL#DZk7 3pnna{?g>xϻVVVtxkk{4+Z2F>77';"rJC}zP^|lXXg,Zk#Qk86ַ( x>}:and8DX) jnBBD̲࣏>C:uj2q"OG`5̴AgZ !!g" ZQ >K +$ F`ܵ_/Oؘ|h {7^u'>~<| 91GWVJz@:Kgq]7y?(I~sρkۗ<%OJlWZQjrG*gه`e`5=É,2(&BB@Tf˱/yp3 ?SKs셗[_1XGZ)aY`0¬,\REΠĹSJa#t a&Dtd@)U)\7jNw[qiF \,Ư'W_Wo}??Hzi\!yԋo< 2ph-9$k׮۷|i]^' +ۅF|l|g?9fGk?5J;㓟}ݷz_|1˲[KkƘ`Eλh4s(~MqEYZ\A Bc uΘXU!IHF(Z[|+ȓlr'xqcqx[rc^|uQęfƵ+Z9Bz_βs7582F5nı,.,:uG|3yy"[)l(=pMvJkeZ{چ-7(¥+G,_8\[:txC<=&cVxdQ <xfTE77E#+/=!\'@Bl ~E6R(`8WW{/,OudLbDK!*l1/ <g UV8 L<@V` juLI8Q@?-0 ( (CV;(;r` 0I:\"_ڜJy$`ήsj76vjI\Iޕ8HŦ`3]TkLP2^x8+ҕRya4Z&QGۏ>G|v< MQGiGN&ыGf E))@HQ XRFk@.CJ+V*%_C}+* (d/Qɋ+Kx{<·gy˧n?~a &2lym5bbGlǚ!+H[Tg6 @ t@dbs\/nP+Q4:Xce;[f+';fb/ 'wr}ѠglܷlQL)XR+Vsjh2:Pu{f . ڈ= `g gw^ݡ# RsW:N1t= CwHwQ"~~?}HP 0Ĉxvȳl\+KY+i"/|Kh4,"dBQ+R4hMݓ2PU= BdϮYi nkMRm Mg/;hݙYcXB\ .-Bg9 F־ݢB'%đ*_+/o -WGB˽f(C)QHJz-"8"2QPEI ɈbHqlfk,($x8~i WϟE`D(gN!#HbIҊ6[R'%{Yܸ;z'`(^Ж{Eyc򗿲vV3RJ)#{_E00;$"CY^okkkii @UfKAB%€< f ZR__oX\\\]]=}`cvs{!h4;ֺ;_wѣѣ!5{w"iZV@$ {NC~* jq꼳Ίa%0{Je?{Ǔ߮%RDQmt]|.m5ſhl_#=W?qw9l8\pä{-~J\kѰ?pD("ɢ>/.SLi (! |p׊R8":ND&٤$A *8$sA;,__NIuwwMk*cR>tCPO7w.\8_7Qkݗe\O%YQx6h78B X[ Y6 - ~=c_&<x~{xukkWNfLD8FsssϡCG؈sLS/5]\Q7vd?V؈H# ;LjOՐ j_&BFbDh4_I|zLK<_7"\{mN^"0̟Nw{ՋmYEJNM|EA^BzN#H^`uӚ M>QQU*b[fMs3sEYIeYmsyFMEBlwaϖ',1[WwՓdrܹˈ>8Rńd/f(Y{'.5icI~o[;};??pyh8գ|* "4xA",sW]IRKkgfǏ5( DR{0"elpi-{l5 ;_+vZ4PY:qNBȞV_q5l>s'_sKHl܁>;;[G g H< u΋ga}p /,=z4aeJ4]\\|?sZk" c^[[SO-,9r לq]qfD~ff&^K1dTEZ-"vK^O"4 ,]QHVf5:b$%?NblV3ҨGZNj5ԤdI ֶU :2xɔll2QwcS'9 {GwiVꑇ5ˋ'ꩂ<6[nR`˓IcS1v+ͦ+xZaoi1A)2n޵k]km<ФD-vfnA1oM2E_wˡ[޼+woonvrgcbzmHHR5sj j٢PAAaGOUFVAd 6TD-m/?/F5i;fP (Z1~Um Ia D *dvf W۷^[Gi1u.(:C4RecP7[3-{F(F1LwK(ق1o_z;Ù^xKk׶:Ɠ1(:v1&12 3F zʼn^ҚANzq\ɑrB?KDH 얠A%> IPS0 (EeY*d?f^yr2y@$F0xdBA!z=mҀotdy+5/MZg8;zã}cm<3M&nwnvv,&(@!(9z~<qMzgwvassyDQTռɤ^yiR/r7Qp8t^N9z3[*"E=e1oԃ `yy9Hr,{pzAGD}%2+GiФgwQ}V7GYqڵAl &a8x<7 yVRMmȳ/vh/́(9"## {€1"#8F` ) B+ RjH>!z| ¹b= b< [ Ui <?ōݵ}FQN6kˋsF{|hl2TXZjZ2,A5 j[orh'e7/[hO&΁p{ RD5%fN/J@ f~{fDkQR8Xv1x4GgΕ8%Vk\@^=x(-@d2llF(K((8l醽a:&7>b̌Tf*5IJA6UvPՀU\2.0`bHhR))'t}/2rUqsOa}8v`&R$IͦuZ9o SSw }Q0z:y ׇ5[ba0H~c~Z3z,ݷo|f_W0*MsveEacO,-.:Z4X=r[oUO~2IqfY^r7 TxvUT[HʒD3{%s#cY,#'|k $I?oFj:㗗(x@BHjC#Xc.KRnعwm_ϑ#)Vy")JI"8١TBJDK@Bn6w]Wv{}{4f3u:lYnYޯzHPȠBēI:BvG@A֪ek;wU}n'=WVo?{ Hܺmfz~ A}?Gp8HB}oLNg&=M?QsF%3'<7*+kio´d@chue}0X5E=t%;=PѧvPFq;iR9󁒕j-ɋ;wכ͵NױD:chiyި; ky[6Yl7j5W=$R\J"tP*I2B8L((@K.UJ켷buEw55ַn馥ΪҁcȋȲ0ژʤ=??75=YEYιzwn}ݻG "W*OqQU*Qdιk-oQSrqK%d (Q(سRR !QFtٛpRK]$$#^ ,Jh;`䀀hgzazRjZQOzZ> zVRڬw ;ܯDBbWku^{onRT)Ȑsf=IR+`ՠb5E[p#fom,AQ!J:kյU%U.'V{bz3O~ffj8mz,G XEvt i8c8ڳgz R6'a\=z쉬PV+f|]u{[ˉ{v/7ᵟ})9l6CTbbDL$N+ed[v a@s4/YV TrH) u(d@NPJ@@YoM/*x$d#xɵnevl ڷwV!3/l6h..ޣYv/L- _]I(Ypevx7L pA:TaAK` v${ #J3λK!Z-3(ҙY!ZS;3tP}ō-{aG^>_GMw[:g%3{o7\s׮_ RMB)OaXVxcLSSЇv _>,M 5?K[Ը13Jq%45%ݸvIPTب2Ҙ@,.k_B+8=51ezye?20Z}nnLaAw5wuWp?:kQZ (ęs@b"Ϸoߑy&yn֡?-4'ƕ/a+o:mT1?7]$G}c8PVۖw,/:J2cH arl0 Yk8G_۾}deå\OKNo oW>=?լ[>)bŎw# aVtcDJ2@DQ" 18)8#Drr)ln ,FPwX {D+9D-IƦ#+')JCyVI&HR"eV D`%;p4^kʼy$m0*o En$ٽ kD]UJIUyzՂ^61Y[Y W_5[oZtPfPZJn3O~Y)Og~I5y>\]Fqx<=Y ]'"@ P+Qè;sr%JeN6Vw0Pvk}_o}ۛ+v CmmQ`(3%ed=S0w]~m=ooZj._Ntr,q7JBf8tG QTmZ33[j:HZ)=o֓O>4W)Hf%|8Ls0IɀAT-kGwo{̙O '  ;\ESjBijl4"/B)7Mtd"c"*HԳ0 ծW_|DQE*' ' A*@%5+wٿG>٫5fL]9KN<}t_~۵jO0Y^?p-ԱYe' Šxv?=sgr&=ɽzp>K_3\v|t2;xD<$kY^93=NV2;߅QS':+<Әݳ2< p.MlJ) e9'@x_ZQ䎈*8D($yG±2V!tDfu3JpNED)W E.{:,¦@)YYҺE38q>8b!f.oK|oY$\N/zy^)zY(5^`{$#Q^ G܈h+Gc-h ,8č1̔]\ܐ)r*2Hl)ۆij n5oZ- 谤a3BBoJv^FAAsZa 2y^PJ{v/cO=] ;"3ynҪ7OLL8aݥr.Q,"VP9w0Ŏ'ۭBZo~fĊTBSS\oyȠB°o}㾇{vtkVv:z}J^T}Y#j||+_YT sZsAPyItnJN5vδ-)3H!kz Ky2/ðR4tDcկ~M)mLn(ߤ| D쉜Y?; 3gO.-yr⅓J%όb~ێ~o3fcao̩3rx719y9&PjqSy3S^7ht$ibSJ{)C}# BӇ>?yd¶옞GZlݱwhf]he޳,#m1y]@D??ΰ=;J3ϟzԹOMf؛ ^m.v2%*?7wĶmo{޵e٪9o&]îBywLocSxn2֓Z57hQdi}3gf̪E%u6'O)][Yy2=B.$LI! 0ˡ@w%5$8eVD@d}0;6*?r)|d9T;lR`5"-\# Dv12p.%ȉ.d)(؈/40e83d0QV##:JGnѝjc0c6x9"ؚ?/O=e²Ґ]aVJrjᐼ1:+ŕ*0P>hN oO) `E1 PvQaX?t;杵)SaK!D`ރ ˼w1Q>FfDkj; RhFA(:+Z |V#"_r@ O>SvsvlY[[( ZX h%E}k˞?s=IB%;y)EQT:ePeq#Ž2k"]vRJ !RVZA kPy)G>O}q\sy}_ X^Yյg;ui=|DͲ:5%P_~{Ϯ0 $9dv,7ԟkj/Z"}*1B`Z(ܑa "(֪̒UͦɋF58wU{o7"TBI(PPIHQ-7}?Nggރλ^_oa[D &ٳsKq4~/?zM ˮ۱ֹ_O}aj1̶e5Rmsw]qgNw]W b ")N8c]{''@UP. r?0_JO bQ&BMItEAq"w̒PT̖ '*E:U*gm&YRu !gɲFV(HDZI%/T:He))zD. 0cDz>zP 6 foN>=g;9oJK+2RJEi=qVWx8E"6ߨMajb/=t$"*(RAJ(@_f_^o67ÇvR 57E tjZZ9HTg H\5&{GQ%0K%DUH$Qk^_~h8kPZEɓ(FQ.h[W~~b8J}/ژX\Y\AE8[S9EQ\3. /ja[[Uzϕ{w)@bQԤ$i?lĚQ֏ c2'Q`io, {D=(F d%{#@PpP]"$ { IDAT"^8$@WFJR2D.ނ? ?Hlm)*&X"U*I 8&#fv^|xd뮇zZ?~{>K)O_9sv8}?x;g,0B_暫$ɮoP%?tCd`kmEV$!nphhsyfLQc`bRsޒP23D:G^3Z,gg,+r1J,D%wPp8̌uu8B!T{ W^[b, (`QzBP#,4,{i {0q-rebIL}ǟ#s[ISzQ+_}r0|~]$twoiA"<>-]Pb-ksijI.hJcbݦ.B "jVݻ۝NM7x☥ .НoY8"0 ėX0D`a-K=XΓ),yЁNY똅$Dh <) NL`)|`c' R1h "< سgJI)ui=i&bgYGXpDQ)m6qX& \cKQ:U  qq/AXh.Rp2[v0 TZY 33S'=q3y60O`/ ۧx?rѡË_q˭3ӕW,R2>Ʒ^H+#eZfoSbL}zZOڹq^okF4\{{wӕM {Zl{݁K;fՅwήj4d .CcALH؃vk+%*{ؐBy@ K 2yJ D2KO@0Kf!d)&'BNJFZwz@)K,re牭 C3!7"?}#㢔,Әnl2eR0setDSDQ4쀌 %(,N>mZeyj]adj}w`J(3 Sq;v<看hǎe yOB(Av۾/ zK+~?ndI%,Oȋڂ̼#gAl  &KRm1Dhx H*`F`$W=K2!+ 1x"F@%jΔ^\n,yy!˳+2nZݲe̹gϜhŕna3Glz~?ٙ:ؽv5'}N0oUӼ|r?=Q \Xd &뮾#+bnn-^no_+j4;;ټcoѧQݹE7{oC<} <8谂l@P <{ 5+)SX&A=oX)P*,A(,+˯K) `7@`E d# Pcȥ𘰗,zG70@&V~q ҅q#&&_}0 X 770y1l7y~6J^`~ءhn( %%Y)I> b2L?LMOrzv~FVsEIDM#}WTĤ,MQ l5{ٙW) f6 zݻ8njJF< ]>lTfV}NNMd(1Rubfv`^]Zl; :$Zl9˒vjiz cLǥ-(yTX29"AaNLL0SZ5ƔrZk33D{w}W_8ydV6"(%wbk^ݻwۭ*S.sf B׼'|#'olz-S{,3EnMnMn k /?oOBXLca$X(Ho z/wyO%H؂ED୳äǀ 'L$IH4 TRZONH *0y!W֗.&gϮ p?}w.y`|br6X\\޹3օ">uuN6(' g8D"sn~?>B׸g&'g_<¯Ɩ-ՈMw٣+S#m[]oM5EAOwcMټMн 4sh|N.OMnF= VsD䋌7|p m\sDQtͯ OAiʞLQ\sxr) Dc~{3XuMMokŊV%ronc $tlaa˜"+K)gͥIBwΡRu'w.lݾ=&O޻R !=x淭c9ѣa{՚3O>uvKDZ)I^ ^*;///'IcaEf~R* r}߰JKUAh0 {f7xشd*kn=oz^Qݹkh[k."CwZx[;._Z 333W]Mwݚ8˿JgKD A 9R,fQv֖ҙ)I %32`*ޝ<؞ 1!o5(Lp~m'$;L{,m:35i"&sK,A䳤[z¶?剶NOJQa^ ߿'o暅7;mm}yD}lz ao\ / )/jsG[6;ͰQ.Rn\EzE޼aF71hq󙗹P_їk(ø@ǟ(sV9zdyuvzd(#QW^uk_d?yS'kAUמ:rEqN)YA2,<8o'EYf:t<=J5wޅ~@Y?477WդRA6X[:zn B {L[njolQ%d+Z:thjjVYk7\-RK%%qEkUVoQrΗ%EJ) .,{Tr%@ $(%(MRfqxs;DR2bcT1"Zm%/? dfF"9k*cmOL%>Kdig1XjD&"ʓhZC:$ɲRTH鐘v8JU*kzGNṬC~l-F@ @D` kl93g֘P & S kF(g3a^{n J38UQB_w Y ' u+<j QA$ QjSX`8i0ҾۿKs[Ad0>Gx㵝&HpsvZ'&=j$8RU_w?21bd~)/Kr]vYts/˄/=楘Ky&X7]JjW+1;^kTP+- b@k5ҚffZKlX2%J%T*:Okx[o4q=8UaZkabsn*e[XXسgOeY[nm6û9eePE(K%(.=e)d%Qk$⒕eC"[_~0cFWv^ ð 8gZ#-B FxHcR (kS=rǎ/ŏο/Q8+mzE"PBIcpE4KVZZ)RRZ3LM|DT5%1rFhWWاΝ[\^fFuZ2f@GtIujό YiA *A _wuMS!#U2J"3ׁγdb" r`5IWn`}P?Ԟ Qt#Yzvo `\k0F$ɓKsŒc {/cJcec=w&(G:Ѐ `D'0r,y)nw޳ԝW T̔Eyņ9B],y9GP-&~Z~~~X^DgϞ;sn Y=1;kR Qi31Z PZ(z`7{$q -վmIEj( oF;Ll1b'̏اy;vCfFD A$ 4._umf*H@uխ4'Oerj${t)R5t#ts)À钫u+BX-v oW$P"Pa1*<ϲ2ah8tXdK%كsH9(y33t \,Ju\XȞ2sW<4r{}ncB UVG@Rh|{o.`*G|R,cg| }NJ $Wasr)/hXg.gj_TI@055왹eb|ljD g:)կٯV!Cv-{nURwDsXknc\>@|.Ye;o'?YyqC&s=w7~!mvtBqOE|oF70KӇ֭[oamSo}[{7ucccM|"e_ p{zzCLG,79!r\D TJi<

    go,ek?VkYǧ`U3:Akќ G҉_82iGE|:rPi#~ __ aP"u3۰)xÿ\mD$TRX!eo5mlgV-9ҒH"HY;;nr}yqlIt][.*]솒oKFU(={~:9W^jj6)tg3怺 Hc4ux*F7Vrn_eO6`Sav&k)Ƀdׁ!1n?c(29B?~ʝ辮TΨ|wv2vv}m\TmydXn ʚ h|ҷ׬%wURwUo5?빈3KNΡ"ZciKG")YIā Kjx< F&%Qid! GHg|q#2d\/na( DM.S):e1%Z2vR`H^TC9g %UAƋT6d~VdVlj 7q K!t>^` |FY%`?h]pT |W[8[ /O. tQ}e2$-9-EַDC)dyMYYOsddeb<| ;|kd޲Gq; k6Ҏfp+1j35;ǙN{iJP3DkA@mPU* D"/}uzyxC*U݉u$g'D4yhO.YUKv,ɒ*.=ڢE휹`~jzE5M)Ror/3z%>j7+ CzS8N \)4T:61hP(~ֹa*O >{iAxyG%ds rAЗTB tyBns@ 5Cr-*!F@0>9bT;YU &/j?s>'=bHf$zAC[^!vOnR}ɥ^6"BU=L=WxT VK@5U k9/@=:Xͦ Xæ<fО7r {3 `H,<,j#f}\`͐# w%yӚmmm3|}t#ϱڳ[t:ηi+*!ԾOޅw#xBW f1ڳx|_Zd(3BF.<˰@Xz%Ā:65r90ID k("̧DʙNHMSc>=x? "laS ,e1գDnpAj_%fW˜ʂdž=TקG"-wU_[?-ZmEj=Ky])=6J{T[43u77u?_MFzl/k_h؏BZi~&EߩM /D9v=o+g/жg2dNv+o{}?\GJr/ər) ;Xzyw}YV˥3X󭯭iNd+,3Gήc.ʂrD!v"x<?ؕ \I)DZK d/V@J5 2A=FQr_'@n 6&O-&dQPN):ڒe֕ *U \{ ǁs{L)ւ3˽['tp۪m<te1ԁl'+YnSܛ)۹ݴ)c[u!dS|@@H@[WޠW퟼@B RO䃼 7$\9U&$.g)`# ,GvP R`eH={$G$`wԁt}r*uxdiq`7U8X˫`a]ɉ@o&ly5DŽ@Zv{-!ΠZ'f 1T>N&*ʈWRǝ^~vzw6;$*k{:ڷ⡚so-6ll^}G68o*Ƣb/ݳ]TH(<6Y .&]NgSt*{J_f&00@n~;GIC1Ԧlit&w :ש&uĘM(0+JpN:@nEsf]b"ODFS;voeSUx]e=}T'n#jO{ ^n[Bm*x%cnD{ovI_Hi[>#Z~>Wʛr/ƩRU{ ,9?>/s`vUz~ްM`_g\gD%p庿zW>|e' 0IVo:/f(zTN+ X':ԂAZJ`I@WyXP7uM)VwzP^%r G氓nҝ8$& tS8smt#|*Y@OΠ;>l :y$6 ep\G1332`+9xC")X)8d;YfR 71HcHIx:_m5p-@c|X@ Mp3P +VmxP: I᧐|k||&Q7pۦvy)*ycbeҳ+b_?|cҊ+_8||ǫ oyB_cWWTNƖGץto~{jhh.Ƅyٴ3o&|svxokn+^t:hٴg3q 6>cqP? *7o1x {y+ d Lf:SMb8G'w.LJ,߹}tXN쓭{ qQ%o[iy?߼dش?%.s;Ki>ŖΨS˯'X sW횃uʿ)V5밭:\?~lLҬ][zl<⌾3 xw00sݵ>6qM OYR/eBbf 0PzCXݶ2AtB;Js@38B~`_@>YX@KhBI}>D_Z j_3!n @ IKJUvh_v8)qJ3S{O=1P%յԼ|C6~"nXmT?RrΔȏYz}(Dw(%$&LJ_Ft"d t#{ӏA6~f {uV[շjnBrp渊_1omS]5xgJogG.Q\Y5J/OcKMe2olj_/<ŭ7&[z|ۥ@00oO k06)&e%J?3KiSaJtH́z?Zso:P $PZ8:`mMi|EUD>ƹATjknwͮlx5XSGƾ/-Ngk($N0% |#9A8(ex .ZրRHSIsjjEY|*Kk5>@6x(6D.H5"}뱀fdbkĂp\͙:!voiW; LHeܮ:`;" 8Xg4WJb$ *T!IǒI$9(8p+H?QLt*UWK* }j=x7K&B԰Z#&s֫ ܑO&{%LU]pwW.Ew=mUrmSbNem«aTͺ2B^XUF ^9@kLu vSp4L\R٘nӬ3O)JgJS/R+9mq=ցay$m=&RͣX#ݶMXgŻ w1}3CM/?hWu=Ai6Xv#:݂ٛAtLrtB1Du@.URG@HH35 ~PG׬H:UŴsɯݣ"=kۺoļj>>?#v:-0(wm襊sro{;;⮷oQGcO9/8LȞ'Wx$q1'Ӊj,iIkPQD2ttM5H' >|; γ~e̿</~ W i Jvɠ1 Vs~I^c"&ƏqǪuǻ[+tM|xXظv|󖪪ի_VX;n݂7R1)Qg/ENV[x˴WOkct'j+ʘk2_'mg2KmoFkt&sLꆩ0;HXjb"Ob< rIO^7\ZozEIe1m/t>~p<[%+U<]=樚՟W ;W5fS}ڭغSeDG5..!c{ƛOG2iG__5kcweN>O|YyJZXЅiE1ŠH@\UtՊ+CWgTnᖫڎ@wrxrKruމK=bϚkjڶ7X\3"ɶ'āJL(^JgN}e}WƬq~HOӬWM7%` ec=`VStt*7%Uz38AϛFZy@=zl<̊9L NIzXs38'<^NR&$%Kz֞n'Dd. Npp\Yz^kN, ȗ۪7njT~vi]-ݏ@Kq:Z+-oԬacfLԗy?JsOu 6 F`_/ #]MIC@}cz#W2U5v4,͊LlLVe˜'ǧ6Ň-prt #sG#VG{9-,lgh?n]P"dlxԺZU)r\(FCWzJq@z@T6 =qfW*uCh)"sſ+>;yA۾-WrΫwSp[h_>ywď7SWfjMinh֙S m2u\yܴ 4.2c]ʝ^x5OɪG& `45L}bMʿxcHi;Qf%Y0rR\ %߱Yϻ7s{[';tɯ=ۺoq7d&Ĕ^ɀ hѡASyp#Bs2NXP>ў{/7#|;sd/)elMyL*D2 ɁHR=|XK{(=<@%jVBuf'*;˜g%&'^HyJ:6?zYqGkW*Sc_V߹s>099FF.~ı޷n2+_ZY'uq7%Ѧ:m7F^(MltmFw jRdX1.:%W|L?SM+t[AQM̹zWTu1v[P/G-~~KC(8dSnZ;U~D('ヌs15QNdN`zU2du/}/s)@"y:.m>bNR'=xwr9=]_&N䎢ŪݶfGout˵_Ԍqx床7߿.[׿/-!WuWN9Ֆũfƥ?]I鵚M@{3.l&k5ڲ׹:nhrNQE *PPP0bBE sl:\9{޻zw޼73未®{{/!0Jk&8N! *f+½{$26/ Zb)$RHy< Ke: Y2_O7%M T䮢[ۺڪB6scf%O) '-qVڵZJˎ['j]ڑu| o( d dPzhD5` o!Rmj((((((((((*LHhHD2"D:4{Q\T~k5t"TWR=ݜX5+ז(J,鸼|{eœ~`Mɹמi])~(%nDÒ|z( Zs?X#qiqALRI=%S?Y<r*Kee>}̗7!G܅ڍq/nZFS$2F@HF,FJ `}fj*(((((((((Р +,)K֠2_[MtFX6^.̖?-_o[ִ .(m]ߤ⃲K+QڊqJsv{+9XMy1[q܋PgWE")訅SR]&&OCcA$HcRTst6 vw eL&b^,d~!Z?O돣^Rr+lRu=#歘_XZVo)E/BgDJ(:fq/&Az! p_#bQ ,+((((((((((HH~A%1(or-s0~FQ_fB|ٕf$UW{ꢓ'tᔃG =rJ עie><|wH ys/BeCRT31'-Q*'E$GE:HqiJ`s YZz)?+L#rxt]ޙHqOgBd^U*wk.||~۽ڨ)guvK%61qq_uZFYLN.>ݬ7Zgjݵ~-ibXMT)1苁@wx= 0aN P>3R l C4Fk@t8@< oDS;@#ϙ%)[v~18dB"0t}Iz'ZٽY{_)2Qq|:ÞֽUK?*Iӌ_> reᇟ$ڒ{S3)> [ɽ_>CkSHq^'n8&<TD2KQ[Ҙ?1̟<3~0`^[)y@,?6 IL H4gwB;́,g&2Zl~'KKhM؂,l6HAL7AAkh;z\qRĊ)Z5XWqA.cHn3{Rh5{qG3f)ov7=aPC3ۛmo[Ze&ډ>_0 c0Z[ Z΁hb:ґ.20 e!:((((((((((`%#&L55x  s|d^& N1pq3+ïD wg9Ngsvڻk KK**8ԚK3dg[Ϡ?w<>ʴdl!CҍTi2G~I&(%(e91ޒH K,]B)+ i#&$HOSpeV (?pϽA}Έ؋HO Kgh|\z]8'x%ӌ(8V׹ц-!F̰Y^xt<^8pEY^(nI'Gp,>;>1 1YɋlSAۮ_----R",bjeڢmb,& ^Ɯ ah/:,&dHA)zY'44(_P &pk4,䍕*R&h,4@a|0"ȱ%qyh)ϓm1FêU y+lwUz]/8^Z^R2|oY󪒮E _V(plX亷[4^ODJhX|qzG,;O?'%")3^(8rsJP  eߓϽ)) "@!M6#$l֤P4^]kVOzӈ-uO/<bܩX|(0*F$O2~nԄ51c>Ioyr5;yi!OZO,ZF@mEh܈[ `d!DS_LF<T௠gEVDzS: Z,BYLwT97֌1N1UVo 1TūJosUzjGwؑPӬqKz^PZ*8k Ȯ.osaNlRH72 G\0qQ]*RB%5p n 6?L2Ke(i],IJSLDZ>}#;L+_[rخkxAYfEct߹4Ъ,xG̳}՗$FSG"ǐ}Ew'fO.tḉ888H &™2q!s*zjzKO/%e"R(_VI91Tnq1?Wh/-TVt~lź 6ѦK=S$W',OXXfc#}bH>K,_E'0gb&1U>f+GoG\ C *Q#*D~|8ċDLN((((((((((A4T54>OX GFPbUn6?e3i }b3F^^,M#_6/8s9(<2Z#qGT?Jk@3c9?`KK<7`qNO<JNTs/ A83IR،lCQ*_7@f;uڞN]3SHֵ7i$ۃx"\ŵb^jwGchi #.Ys`VqN3RJt@gM`U,M~/N>t&TR $$HBRpZ^,K`Ew ya6x k8^$Wul5f/ /W5u!ׯ|uogr̉-JGy]Y> hn\V؎΀x .R'~u,¢L&nL?[brw!Ds`%1 .b8ΊV$(?B%5x b<"H Ch6ڧ}!^qkmVfͲ,k3RmSNHH?~Ѻ{]YLb0Z #;JE@STz*i3ϥ4hd@d ~\ ؀X#;ʇ=Ujkc:]ƭh#nexl8O;[UUb}[T?X׻dEu{V9K^-n >n1fhS?҂JL..f&2,&fO48q1]j*!:G n6b E%EeZs/ 74# pcT}G9O\tl}*v*!(rqغݺj[kf sO-zvmMw ӱTi3؃E4,%vk"0bD4\@-̨_AAAAAAAAA?>ߘ5Sέ|ÆpO)95Rz.m8l;QzH_#mg}מK=KVʊv6(jWސ{֎7a 'G>HZ%4%KStb$ؾG#8<mG=+U?so>?Tp]Yұ$W5| x^RyNTF>D{O `i ] _}\]wࠢF?W^l4:(pbEb0C MuZ'Z?H#^>2b﷾0Pq?J,H j-2EnlI,ȁCzKp lC3q5e¿ ΣߘZv^։T,y"!#l)p̩IDAT޸Co5fowcqٳm6ѵp啛Oxő\wnr` }wmyVU tP?޼5ޑVbP1a9ʜ'VqD )O=8G{p\e+?BQJ{+bOLFZOC%$ 9qx(&% eH%& F'1S 7$|ؕ MiPGۇZzK=ڶ6o[Ͳ5e2],,ra]NL#jDXVfL/2&U8!.2DFUA@Ap (¿A,bĊXġ0e~A *P.'.ӥ]:f`،z>|c |o5W?G^|DA޳eY__⒞.лVbHNRz*A̕~(Kb2cwK_x)fsg>֜y8R{wGIW ,gg=~K>M'i_0s >wF2g'I fOOZo>_?yJm.VY%M<7=B[$,Jp8?a+ qq.kS0 X&Oėb)r1aEGGtFOQT! *]"uI%#?Y3'BTd!< @zW4yQ^ɷ3v}f#󀱹Y. ,[q-tbSU=*VR>OsE$2Է'I"b*E My@Lr8=NJ)^qC`-1W 9n8J*K's֐ۿM,y5yD~Niq陯i]8mYV,EP} 5 zG~|Μ Wawot9͖e5DwRVsj˵WVb{r-Uk1 ~#Ř0 h S"^r4.ϪVXX4F E܄O ]9N^EVȣgfG3y(50^n,R]׻v}u˪ b*ڔ_i՞o{!Ov9cީ!.>mAωso5y͢ߓ~@b@q ,^CH_y҄pkB+ G~GM!ĺү/}KB:t]Sm]K͇b8)Bk%; 'Vh*ÏBI;$SzQkNPhQ~= 1O`?'z+`~ޣ 1e^@` H5mZ@Tlm&%2lVr4M!m⤨a8n RD.#^/4X``@@.CPn&,ҹҀ tLX\K^Ujyl+8Zx}pPu@kθo(`S{UAks{eS*9@ijdq}~PNk6)1EWxp99sK0K/%w+Ƀ$yE R21%JR߂s-d!i>/IigXj=6iFt[mxzA HK z pjqy|bvqYDlv(,3>1Om+/_^IkPxY׺XN|i]Vhl?C@" S+ ldhHHHi\]?DC,By Q*p;p/53ʵFi3ll3v8C=BW6-L 8/?V[V3J?*xSO}tX< ??H蹒qUJEMw'1ug.2[11+9ΉV$+ %x-1Ɉc5(K~b9O=N!Mj}rΜ[O7ڋlmOB Cjtw~iW [k\|'6jbcaSMA!VxO, :mFȂD+k&Lc~B;8#@a8X:,Ƌx|JvQ;9tȻN,cAЩR73I˹߱>S;zT*|vVyj} o:eU} #t@.EMdbHiw̦J"z')9qq %."* 6bͥZ#I_4Ac#}{p>MF<x| {ǙX!m*=yEfhy>vzZV})`sи<8-[Z7eiݗ6I7qV8Цjʮa1ccn}xP,uCcY%+-w"Fm1 9ݖ0aHHC[j PPPPPPPP{CP? ΍ 2:Q#e%>O7Na9^N9Kry1Zn#~SUx"p̿4y㸣{wT]nۓNu>܉޳J-,x.kuvq[w6Mo ,ԯ B6HFFdGKy)x_ǟX/> Gdqx:~Z#3psNa->,/ dxFzY2܋3њya&,cBx EJ4|OhPβ cXMʯ+̕'y"\9׸%O$H8g맶g'o7#kdu|dy3|Zv(Y%-ZӸC1J{IC,lb BD x AhtiJt7h PPPPPPPPPkRKӹvl6rPj>X_;`yf=34Z }J_\qC`]poVS׾UcV?^\eǗ^k閼;:kO8w >{;0ocýsL =!ve 9Aׅ-eI,p^x`L?8_=+da5]ٗ6Ң>'aVMI8-7r\`|sQLnȵg+XSD=hݵk DHVfhƖx'D $U3RG@3<If?7< ;ߞ|%L$LtDFHF?|N>+K]3όFfhQk ek7y.YJWYu+r'~|Wv`fMQ"MS0w`=D}RFг'W+)ؽ=D K{SO?XFqIٸQl+IG8ӷG>L9ȉ) D'ͽ=cL|vH$1W70}]1i˯/Pbo&(_S2xo_n9Eh'I؈wp||&{_B̊ŬK?G&ޒ<"q4\q >!EP ?6Jbq wx솸6j1ZSQD?E>EBcSK swߐ޳<֡'l=3&ʖ-,,ciOZO@k=OJGlUp1z[[˰ [IG7Y-+QH.&Ä& P*N„ ^: BDU؎؊M(/zg ;& %p#2ү. \|ku*-tjů~_8Z_~܇NꍕcLiLxC"G,y-5|%$b AIe?bVOkL?h_$NxH/l*q%GpܢP&f# $5 s_PoGtr  FIbN $I )#1c!Z95%$=Q꯫kws߭[0b?;(f}\ɘ{b_Ojd=aMKG{Xk,-2Z@KH\D((byL?<1v-hK8tB!vt8=U”388oɟ  VĊXؑ t|2!׼ fȑ Lx ,3Ls\dܥ[uGpF謐(}g/+?Y۫ϞB-ߟ]u=v[ܚ_Uw|^> fisN7n16.yYo8;\J Kn.c|-)s't}`Ny9OYZi_ч`nN[|\݋ u<ƯĤ'Vqr)#R#3"9+8ฅ?Th@1KylI"9 A$%bsH+yng<66YQϣAOXlE|'Ya43Uה#&o+05{kv^Z?~jTc^ :,ߜw}̠،C0X/hOY15bLF-QTdh# 0+AnPPPPPPPPPCM*VXa`G bP1F~8P% >2}O}ˌ$ڼpyxDx@w5c|zg< ;-ʶV+7[wT|-_HE|~l˞T {=M[stDߜ*\ȣ}ǒ9#@܅G d =\XBԛgmlvV`Q2b@x\'&qɁzW?Εb8F6hm@GtEO2HdcIGOX0kPPPPPPPPP?*0Njt@!.tԣVVJ ~XZWb >ODyyqGoR>$Dث+怟<$܂|>1߬ԥp1l ~ۣxgs|pIΔ cS~(|Np=>|pGO _R{\/i|EQI|6\9V^^ZTkx{³7[/Adz1<hЄ+8h B|̗u`֘阉GqoxY^+/%[IgkJghZqdm}ߖwԽ[߽(X;9;K-8[Q(ܺy;s+?YW`"6_.fxG1/ &DɜZEq*1sZw%"WӚ W,x=p%)C s`ac%@1{PH*5iMJvo>]"?eŝO=Bz@`i_rw:JQBTF;Wz]V{WF3%@OjiZ m3,uV˘;bǦc[KMVK-iod;"G۩LxHJ*g(;9Ɣ~_3jzG7,;q=5ysڟ|42ֲ5{]ڏM*ę_x $UZԚ z/[5iOpNи\bH,Rw&?)Ti܃JHBGL$d=G8]_`ޡ}2|AOъ~?QLL[{F_p0W=RnjmO1V?8)1r%x{.[|/vrleuj%p| [nZlg񜘧D$#UFe8+z-RT@$ ( JZ'VӁ3T aE8d  HD <NPbAXiO!b\dܧw7fUjjXtsO`LQ/[T{]V.yuDŽGs9PXQUׯqoOw̬`?W͒kh?@Sh֓u \/!8?)T6|܃C?so[~Ϟ2r陯'^[؜6UN7̹歁U[SS|AZimM v7s} ]>ݍ^k ϚݙQ機G< e*sDD3o=Wn׾Q,|̾J,^/ZF![Zq90! $?lwy )Ma1"^@""#s1+ ~0.vdc|D7ljm֘;>U7 -::8n\zk˚TZa/Z{QR_zpz'yGɭ/hf_/J]hW:gw}KV?$W=\=Zpp?JOӚql΅xBO kk\i bԈnIfڧyx)=o&=o<[h3IωpLO '+ aɞAK0%τ8si&]}]n\riZsv E. wk}ఎSϺs4yu K,-,g?bklbmԆ'8cVqC̋S.Y]q+ J""HZG!PPPPPPPPh5AepzLB́OBpJ~/1{(9&^X.暝J)=.uroHpV0owSrIm+>SnsO>1HN쎒K(ZwMޜsޮF3FOec#cњZe%+XKͣ)`yjH>wC|??Fi1i@d/g#@%`>6 d ~h&xAr ӚXi '*O҅m. ]~&_3t J{6{lUK[[VuҘctԧɯ[6CI9R7[eŸ_c*llhjZc=rvv}j<hQr4xYTHp:m"V- mD3,Nj8$HAX h dCs o4#啲oh\&_{ZwC7zSGB/*^4ʧx{3uu/[}5J:M'_OAt';S`QP!Mц}K-Dk2>mZ:b8AšpK+R,?i`VpQMϣ|% Di[lP :uxLy,yʌztA9d$Msj]^h0>HL2N;ɬ\w ia}ܘi~g>NL_۝|bī6ǯ_㮲:s)og[`6K{]ĊUbx]tdݑD4Cs q x!76~[NBbLD:2@#$"q0`r *P&ƏXUy1=rw1k36ޡS 7ח>m)(vWߦ^F6jU1G䧞:sE O+ߩ O8>%srXw ,[/}oobZwm}aOC++<:Zf:rV"M.a#JDZ7E> Eߥ-^_&\$fSsuzyHA⑨Fa(:ӦCG*((((((aEXqǟOv~.!!1_܈AF,eB#y|{L15zA#fnxHxu%hIґEg^\(-?]|tˡfzqˊچW8jTQ2٫KVrϕuBX!ebbj+nۜs<sω . /U{T"x^č{.o q3i WQp; zD)1> VPxIԚZS/ Zي)@YM?wo]8.f_0O~#Mn|eʒL}Ubo}Ym)Qۭ֦t=?cxO;9 MdcOe}ںq3XcD\| @je5*aU@y(((((((9h 6a*ґ FFSHDTG! :gFc']eIgYs9H|f+_= ]Q\h+m>缻 OY xܿϫ\~F#;ؖBSŜ 1~<y7#思<*ub2ێxm.Vx71"bV+͠ iEETM:`ٴfsRpƒ3hͭ.JG|ZSfRrlR%S"\?ov=ixO~Mniu:ZתjW}>,xu/sk\,4yOMnM7v{n'G6z<Ԣ"\XQ $qۉJ((((((( ssXtd脎 pΆ%(I7g2[^\o>h^'q/11kǂWZgkيkk>ZТ2ԥ9y<>D(6`7~.+qw8Ԫ= *'О_{[-.?1~,FxSs?p9 SpZR{G.O\ѧրG+@T3s$H{Y9Q ~l?) Sd"x,zkïw0o-+Tp1:hnkjxH~/os_5m/f͚|5ےD'"R" mq' 'sqID1AL]X6?6\}+((((((p9:t耤shp?+\1 焃2Q.IsYe~`>d d<w{v]~jEmlE+w)[Vu^²6?[XV{g6nPq~+wG<<=¯E1TsB'q7zW\MxC~GnP ~ `FEϧ &BQ}8il!@XP&U@GtFW;p@#C'xI-~ݟ7\7m9O-\vi|0p`Ls{^۾bv6X{2zubj65KeZ?4G^jNlZr)ܢ}׊#fhe=+0[AD8Qziw#""q% D`v9FuҁWP,)(Gy ~Z|mfI!KQ*XZhj\l$aãgT<X?w/RRwW}̜OO~Q~]c>wTjU1L)dV={-,ӬVb<9xȋd28}]S9xkqOX4 K΢5#?3>>oL|%1Y1x3PErފ%Jo 1T<2i1) ؝T|Gә&&b51%ן{4\  %(!Հ -:{}?3@B͐;\z5vf_7xk?,VKmi֖K))a5" E&sQIbmE@#\9 J@HH1` !7Jeݢh[a+eZh6h @kHȽX$_;p94%+4 tf6rM6ui@=K_S9cPlz_.^w žAE_غuksWVz䵢'bB$g~VJ:EI9s~cFQTb嫤sr$K|}6VIR)(P #+AdԋghI?<^ F昖=sƒn7J_t=qg H6Jpcz!ײQVNh~E-vJr,>" %L1\Z|e|(αp7Oh2IXgyFfiven7Ѿ:VZUb3~'ܰѿDShn%ԘA,$ 1T@ l-^5R)dUA,5wk oU +Jx.vʇK~Qpg]SN\uoL)@̞aDf~q}lǽϽ$(,gkg?zd-i\6([,$?)\Q%_Ÿ*הi_[wơ/ ,8Φ}8EZxl>'Hzʼn1Bo1G r_@̽PlbĊ}*Uל~Ozk=Qߜhtcw{6F7gf]l4)EJ{{~0f2mhq+ P9Qb9lh[\ <4G&@>xqzl Ip!*WPPPPPP"s8} ӹ)^(F) ߒoM^2{!ص¨1ׄ;=[wC3e:+n_n]qEec\un' k.D;Wcsc"K|vBs!Әk?ؾ>\Т)TRQϊ?!&%l$g/N \@-EQL)T@-܍Φ{,1|G*_5`i=ΠI%oz?aagB|ad%CH@+tCE5n{?mri_);ܖ%=h9sC={yxdm&5 #t|/j#}]}Ye/~vAiJ֏ep|mIˀ<",| As^;I 8?vHş-z1)i#no9XP+k b*z,?6pK')?h.%P^E|(4-ǫׯ55& ab.*_Bt|I-<$gYI| -ŮF[i+SkcG Z qş]Pړ/)s)}r%KiMOx)$o4=N8׍(|K3XF1'80 >'6(RGLc̱>Vjjb/?Ye>LP 'x萸(i1cqNw'h{G{[&QkwkJlͶ2~k3,/gk#񁵕+d^XPLhBHHh.Y*3V D< ?@ hTAJ@ər<"/1uƹIcCmXpfxvxLuV[~U.lEt^][mͪL*|8wZ!_ogmBows%8pQ=΋?'#,ŽHsJVnJkSbˈY)5O_J(o+,gE@Aɝ5J&Q1(b45VəF%i%Y8`SNp 斁k,Q:AJQ,n=EQKD6:65oTx Wo+I ]brm }pj]f,;RZIw'dž+*`F<%(DsŎ,Q/kĮعRq+:Y+[ 0hhPċ<z߄)DAAAAA 3^x%Z><"W،u؈ɨOJns+z~Z_Ik /h͉ 6cI?|.&e>#fʬ\%4/ 8*Nb'cUěh?_8)a!jA(9YKLLSr%qts k[>.Ɨ4iAӲ.Zdhw.s[j}OzeTIͣZqQ{:~0DP4be)x[E_ AY\/h@z dA& 'ȷuQPPPPPCD"4vCR$":588R?370*9\^*鲩4v`[jfifo?Kjz.+_^r::(|vMu~oV\Yּt|I]Nu|~W6?sz|z\bws@O-ΟdV>WSտ'}:J6{yZ5 4;DlQ~2hXEgl-e J16o6/>b07 o6$=&Y/OTU~{xOW򔺵MVSK%F忙ɹxѧM9@U)Ws\xpÇ1b2H;:Z-|)FqS^Cс?;f}tNHɭ?@81gsWB%`q9b1U#1 Δ8p3_[81&D\Ϧ q=V<&vÉڜ-N'#*yւCo\<+P`n?Tb}iK&ݗ ĪĻ?M-=b(úv"VwE/f.ȝryq,&c: vD"@J?L}]7"qjQZ{n˸ɲl)BWUÎd=E?by*jcc7)aNKή[rY|󕒦g=_w^&B=E7\s r>sྟ Rs=i 6Kz^Z Iq .̛i+T T/ f|NVM Vی窒Jļ2?]h$1hMU0Bͭ$/A`6VZӍDp&s"ϭc&\Fxǜ`yr#Ht=:y;{)NmoFmW^iK}Ϳ/k@M웚ؚjߵi~6-fnZ׬ɧig\i~4,s7>7WВਢ&okGW9YArIEly|R_IOKZ v(^HҎE 9U]݌c\= [ޏ== IuI=BOGgi?S-ٕ\{ٟlBMOQԟ\#h\O:JVrk%:"(6eģJAJ@>3K|&)Td:g|B*>Usr>+>}qsiMX8|lrO̽ys 1 N8`qqP# n;q^k2jһgu:sRz M=(5mU2,=[m\.wwʛe[yVZO _͐76arFE]pÁ_op^ҩQw;utj՞m~|ƽ&Ʌ U=ʷOXbOb` X.Iudr(f}b~>'(ynGOM'h<{LL$˿YOPCf Q|A]}z3s/xK8eMpއx?1I@D@)1gn+9!a/'hN}'1rP ﯂lͬjTjhWk%I'a5:]R)ƚ7'm}{s܄8{vF2ܖ_-3,2kٖW-hqZ4Vk5-*VAqp%@1PxuC ޻g@%2jl/7Ya@Ed"h4GD#@6 @V@nFcm >2CKoe~6<`nwg'4cX}^YK@Mw4΃%*6;w]l my_Ҵ9e|X4e9 cO퉻6meLlX߳n2, ;Dz[`-Vkevq܇ų1hX4X i, ;쀰+ 렑?U ht @ 6T#`_0C=PGbĚFg޳iPXU]Brlʃ3F>rq.V߮κ V"ԡ?.ZK9AwZ{|cg\<׬dbBl:V`yLuIy{ЍUz\!{2t|mfS}<<ˇ:W-^|s>ϱD.~˷^{Ш6_d̯[1Y06֌}Tӗa۸QNHrŞ͡y /G$Q@Jb\ggh# #N Mcj]sj俰2S?J(hvC{@ƭ&|fsF B-llIH6c?N8_ͨy+?DwĬ>7MH99Gy󷊘ZAKG'ըF%c8,Y!B ]X3{!wŸ1G @GtFWB2# ?b5>1`C6 G5N1Θm`ll5>3F8F3:P\pMz`9ޓ]7:9?]U;ce|,m}ıpOYvt{NMޣ}s&!E-|NU*gWYb12@uvgE@DEzn>ݠR.4n0AJ+} S1{dѭ`H#8'^;<_yɺo9Nn{k(w>2;?Hj2)ykݔI{/\}C]jʫos_HޞF||ﰲQ%?d'40XF*dzwz#'Փ"<{YfhQE.9 z$КܢӣVs?p";>*( &pznG=72_L `sjMaӚܳOIws @ĕ [ӣ'Ik6y~~W&X@@!`~.(Fdvc&fD~7$L]zl&wʵD9ټ[aԛ}̖Ƌ"=tw02aoc׭/Tj/T:or ~[o2Y6CXֻdo@ppȗM٦*R.<%K/̆s<s?" >R~ zds֙?2V}ķ>NFZ=\ʾF܏(6ON  ŸX"o'<°S8DrڠDCD 7 H;h7NN <aO#PF! ysgf=66|WQ291/ԉіzyq?A\E|exC=دSmkl/ۏdnyȺzOzFkeӴsI)m(~~MIEA\).E NlLC1e * @r@֢|@P٠ rf/f?ߢ_= -8=/F {3,AqBP/2(8)E:2gtiz`1̝.s#s{qhs.7YuMB|cS=vO*[W^|wesWXW}~coenydg 7gEpA lMýyH-'S G@t?>+5YGAS"\3##>W9ϝ J_ ,&f]47uMf8@ q+K\ALn%jҾ5Y.|#d8-Z^4V"܃R\O2*Xi spļ֬ _qiK=&MN)H^I|2q|ƏweLxlw\n[n˶ μgz[|L~f:sКhbRl0e5AH@w HDԢ̆_ ]`KC/2W x>*#1G< ӾVh6ҐLupATuƷXm%ohll=p;jvaHT_nS4\z(ԯfYhW૵^69T7QVw9ҹdosx yoZU]^S!ĤHD Ϧwi swSfĺ:d6Zy8s@sZZ5W>W*ZR?qd'͟Qϙ j_ \Iy5W~!oHP Ѱ"Y`dLze#Nżϭ8! ߐ ϙoAcmؘاcwwqf-IyГRyPN4kRﯺ,6髤Yɝ\7ɸ'ge5IMv_1;sS nM-CK06acg_vG똫bl+:.5Ѿ~ 1*:pe ;Gc7Zj 8=>0_~~atak0$P 'q~쒻NZ7>tB1;d/y@n j>cN5y)~Q8bw<;,?.}[\UzosjTV+?V*oTvޣ+>()xMA!cw4fr7؊𗖜Ej27 }tNTܢȁ3I_*1Z/#6cedҙkO /%b3ROkrgϦH2x\E~bb+.ϴ'VPB%J+|v+뜹ޮG@a?{D3O Ͳ{x|_tBVDyH9ͮ,Qc3@&ߢB|(V 9̾F,v_Ry[zx'%1K9uA~=xt;sH޶mhVgtE3bZnf k _^/ <VơNdrLdp²rM #qTl f<'ߖ81ELq%Fbe;.{]8=h(HA R/1A f l8iāPPPPE֢cK '}pYTMpq|ʑlwXU9]P7x碃IW y*T/7ȯ2/YcHPǪiMnOOٮew?xeKG^O>\%?ػd̖FUj\C~6W9z8h1Ke\k7_K);2B74A5*QIJFVt#6,B'2iͭ|NIknM4晧(ghӚx|K=l'.RFŸ*W]9cbğmSO 912h}ɬOp&{>J?+ J1Ix9[PTc#Η4Ĺ"pC<,>ЁVA,F_ܬ܄z'A#A߫23ꭍ8cQgX6=[7\e4{|_Wmg]6F;G;aWR-[KM,Oj%ZS :WZ-60E(%bvLR18 ]4BD$c|jE/TF%*nE"ؤ鴗W|JQGEt~=6d Q=D&8!>xԠV\~<{pHB`sd;2\v2)0¼lg#leN1;AjɌ5yMcyx}'Jhd躚Vy׸ެ(T{zc ^7muG+M~jHnM;\nOnh1h|9kh~8l|"6?(/6u ל^Qm܊u'ˮ=.q!2JwZNHz)>iii N$uHnK3nF|Qocݗu}}xMu }icVgoN|l>a6֏o6tJ?U * -%P8mW~koL͎ ;*G꾫P7+fu9;:YKhzՖ6+*v>w6 Ӹ!/w*Zs@&q$ 'E@\€gɅYKe-|ΡsOo9jZw!~x-=58sۯQm+4T@n@3Qs=׉='uZS!`#,C8}<(PPPPqZy h ;`KqH@k@$ IRtIHF@:q)Rc<%bZ`6Kr*}]v ,J LWL[`+;>kfy˘gVO5aghOи5~7emOڎk}_tO]ѝr޲5oǣIy[O?9$p߄xEh3 o q;}tϕzv}G*N%19nms$9ğ-TZ+&&1b6?VMaSgrȣ߯=d:yQ9v=qdc1/ p^seB(2>X, d.Z&:]dyy>|W1fZXRP`[nQ>|qQeWI`}%q=NHk *R+U؞/p2 Z9X?x B% -?QΒ:7۽M?g#O"3Q]PxFE7Y,[|> A.N ¨t2H5*@%*T }] Q\ ^ƗWqOfnt"۽@r>tvTٽf/.k.32sIeI6I}I؂|U@͚LUS]~]^{^q ѓjkWڭtUEcjyѦ~J*[DҺE]%W@0'%zfʥ}YNm#CX`XQ(ҜQԏzc(N,߇ OA2@d*kSdbk S}cG$@^/ 1e{gb7d52&#/Lv@OtY AgJ h{:<=-b'+ tp .hvhCpjfjK V?9Ì]VTS%~#s?y.77&< Ux:?ZY5$iqoV[ӝ3j;_4Y›Z\{@޴Gvv']9>GOA0{=[WkRָ{Twky\=ç`+u:UbE vE/$nujڣ3h* JF1! rmTW4&&| >|]/Zy]>KjL"Xآc +RX5uX9zsܨէS33Y?HNt׻⏺;3kmV+CERcRͶK\0qgmR6t{mK6 [[&]>cYکu\dyhSH-O~#~^lODۄ$ooNޥ ]߰>޴#ts]`1XH#|j|S;v-b/if #y;t7)LU'A@!iΣ$, DJ269s|ׁa3^WQ2~"=tcW Pl'+f(&c)i-稗6AP&>?,KD+A1e L<<`*jcz5x8h~ΰ&>zA УS8df3TzmQQ%?>\еڂw|/gܡMZBW.n4!20$pd ;QUe{}eݪWN̉(&$4]-RԚ𱘅/ip^Ujz\M ۓqVYu-uZD9U_:(Y$G@ uFu-pY] |{׵ٳE<5*Pʒ<A.7FJVl&@ӳxL?侄W9g+=&3SGgbOEtctKNt<]~M^gn;սv {S^̚'wʓmڔ^h#*^uDWx |Vqs_Nl[qZJCj=}Cb{dKb,?/cR5Gd/c2ac¶38JX*H~v sP^;?^NU``₌LvNIDATÇǿ|QQ%8mnX2 /`:^$e=_d枑Jd\7USć/ED :-b;t:3@DSK<؎Nn>: =/Ya:. U-V-uejRcܚ=s {lj򜲜E ?FQA`l  6.+na7.\f _gno/x*NN.pT5՚5SݮnɝrƩ 5: g_ ܆@il*, k @a+&ն΢\5F5A @Rוhԕ ?Ç=X__:~ 6lB@D*E 耦h2na!PJ{zwpwӃu{>~ɽ½4y{R_Wz{Mt3mP{ssKdF)ukwvɖdgW/,?4uUuOkLxh!5֢j*woYJlr_?(_gP6}p_̜3/Ɨ|<.jfޫ٧(`3OkjkKiA 8 p,\I(x 'd2|Cγ]>>|A~1rꬒW5l+("@^@T~!}0Bѡg)_T-)wJJ XI^;q_[ϗ@A z$((~ԩ7\;iy[ V~UQzx'?hF'7Ϋ!Fk );⢧ V_Э˖~#ru+B*ԭ$0?XlT6-,PRz b_=Z8Ǻ{YgZO[Xёi^T/ڣ F[kPj""X*TůLoCÇ~ўc$QA$t5"y~C @QVĄ)B!`f}휤|=;{;ݝrgskCDgjU,'g.\^"BIz{Żw$U윸4b@㵏U]oMD/ I^8&5vYK^z$mWQqYj㶎ؒNᓵS^j_580>|cI vAyiIhf>gyz9)ko.rv!<:ʘ<ꏑ1 dckǀE 9a%",]gv5k}>|+~PSec{AyuZ6R8Mm}?\tYJ?|KƏuEwHQd\RX{Bs!@FdFDI[D܌^ {!Ȣc+b558J-}pd?t5էd*gm|[isJySKs7{54wBޖ)fd| Zvt^xھ{ mzf+(,+EٵF~̹7ؾBovpmj.ѵ.Dl;H`W]UM#ZG!򐧚?U jPhfm%jPr!u]__E|ԕ9H4 42 $L"ɨ@9c 6a]Xe:X% ˰XX 3G^#9Mz"y{{t|O]sߏ^\p:T?\g=sNfLв5ӏ({2yqeKXXES5WO(;l[>8y㒵̩`mV._ց[7eJR7I^ἕX_յ.uXa|ء};Xqj+tN8'|#sXfiU_BtDtև"㘃Y嵯0 L,s7-Zqx04'#5L4 = ~Hqa2 7缂_BQ,}&Vc>?I>|y`;>Gz ^=RzG]&e,2pŪe,z /|j x3[̨=3E_ AQH2(d xXjE{%mv텒hg{A=rϽEҹ{❚,lעy)EÊf7/霗4s9 '''U:(bxP#{^ Zt=4=Ǘ#ZWoy`#uzJM 3p!η@ 0{/T}PG'tQ7C@QPH:# ggf<[>3"+8W78>|uK A~׭!0jsD[͒8P2 kBLguj}^q@.=LeC_ '`>">YyKWO] b[>sNqy!kM̌L7e_O^jgĞ}(:MUUVn+æO*:q_TߔϻkC_~LέxQE3B26jZ{g_jL"E뇵^M>k s{Ic)9{yj22*JYȶ#s)%ܞd C?e >|3|KV5ţI͛B(#vVHE c 0 kY],?W8a,~LBJ2ˉ=d& Z2bPu.8kR;^R||L˵CH`7sv4l/)\|awrwmŬpp2|xД; L7'sF^iߙ;>к~#wUmY]UWo:ɺ*ʻmE>yC!7zjțAֻs10;.]C0@'tCLb ؄@TbF5qʫ+=u8㯃: U'F(T P (.b E9h&h ؊-ʱjL'b`Eߐv{q$tp tKzWڝ;m>\սӝNwb=;&{3=>蜒[Mf<;/{e̊SwN6JL=zlm^^#*T^S1-{>eûw[}iV^XyAoK-s3]<[ɘ-X&㮟`^7RKsc,oOTO~{>Խ=6lv'n𳽞$؝ƼVDa%_IJ!3,؎?Eǟ?ǟ:[GZCm}nK}a_{QG;ASe 0"!@>'Gd;qٍ}Nt!@q &[rL P8Plw{~t =l ]6eUh2:/sJ&į*گuتG?)`#DU99D> WD<y!rWNqԜ=}nԼ᪂!_Bɢ5`yq$=xVpJXhR|@`vhkߟ]h\sZ[[P\:mTe*PmjEc db^(HW&YZ[?Ç*v}J dwM-H`Ƕ{ܾFGP lgAx3~c6?ғD\)D/ԟ$\=Ƚmאָ99S*XvXOlUwezej*GfLSyCNm?Y%:#\* ŎL^h؞l8*JtMwL옼"yQb}ھ55ߤU}SQ^NRѮ| SSWoqљ'Q JikPgɛ'7k kfY;vz {OSx,''Q-]~Q9_`{?ʘu3-/1y,u) Uȇ8E3kF@:7i2`=3 Jj PP  ؋س߯dԽ3N> h:x!IH  H P_Kبd2D5Z +y.lcx֒C7 .}:4Kk"K6~بo^peQ% (QPY4)yj47<,RUNzAr BkyαUUc#0B댜fj:AF/'j=hh.( m(F1J QRu QR܂X]/Q\.sja+-vW_}gwWGgm~2p͈JWazjR]Q~ըĝA5E5*pQ }Q *TR$2Qlׇa a>R_/:G ܌۲+qn 2^3f>Ϻ/8CjuZ9d[W)36SQ3Lu݊SG2k&l޵k+FUV[.[W_Q5VʲevOUT=9#315~>vY }]|S17fGњt1n0nf+m6[6uҡI_1>^ҽ~2`@`j?k!c =I|OOYyRc=.B|}&o,'Ox cy)3UZߪ|\>|+O|/r_Ьo^2JHMC%QSlD\(l DM o;5TWF!0U 2DOmYLX@3p4,pIE >teUϴݎo?n OiWұ9zMvk h2ٷ͛ۅKJ+ٵ䘼y *90s-4o$'["*Z@(+*WK/YyV0<u6*P;NQYmVSG \q%8W] qڧQ w18Yo8 '+u:Fj?p,F[Wb(F8/SuBWP|ВL RU3 QGY@gdꬃLv2 ADC.|XP6oY;lW#0~mg!ZDQ Xsl= Lεz~YOuOkǜ=2KOOb#<ГCCqn=n}(;鞺w#Ou&跓3aDȭr_vo5rrz8~]}73zS:)gG#oWx4^S1fTuˏ*pm+y÷7WuVwY4r.6ݪt׬m:Ԣ^ci{o{>jYCπ61&?`2qZj^yJ O;؎eL}&e9~jT۱aа,ed XS}g_|nHǟ*5C}b=Y kzq5)R&,F@ܰd ɉ%2ʼn1RbRXQI26YLr̄Lz8Ut,P6jV*[YRNg;/Hߜ]ꔺ<5ѻ?TS|atF#Us?țt; 6  X:xs{gy'oY#XMrn,[/Z#SPȣ5J}Z}T\MQ;`ڮJok1( VOG=7{a88GD--dD+@-*P:MZ5" &VC-A Ų4QRDP=IH+ 2E(A9աn V6E<@a'䣮@. Q (/v_ @g y(PR4@Xj7c36?^ Yatԇ=t̡z~Eߑ]5S}ppkT\׻'?wmLw#D{}ȹ/֝tw._#$&v1avBL S9>IQĒ 1b;G5jo_;xmXVX|E51{KoLZKX৹C3j֮Hfّ|)zC6 K]>H/K^h,ͣz3]Ų '彩d?߳,{v Xy*D&\7ŀTYN_d~I/?_|F/T1 &"֣DM}r5СD@&48'm9ۭ0uTo퍇gX Uhh d8em+_5\m ;TrwX_Y"s׳u_wQ_@!`*Q0 |=Q[}ĽJߟSW',=$1׽Xw[u!wcę|;崫4<[YQsll轙6齣kG*?D%%:Y/]{| ׁ@U\Rv'd$o~RH1O$pY 2P҇|-TF~Jz+LqBf*}f/dRIU 'nİkdHԄߋmS2 b&TfM,{Kk@mP23bݽ=mN>+Fpͯl|}y7*x'bnﴏ;!O,8:6BxtxuWEEoh|t[swLozXYE%TU`/l;.'D97樢C{7ӡB']85P8Pٗ YZhij' K-K4μ~ ֝HVWԈH&!#qu $hPSPGb'4A.@>ڢF#S})E>i(D|"G; G E">ad %ՅrLJũ{P> 8X9:׾2: A-Xmz5Rq$ǧ}$ 8bx DtETOH 8!bOE 釐&k؊jTc*q<^^}>"'ݩ$pv{?:FtOw3N8)\]"{Ny<0='b S6U O~<޸:v{5=j~rAEQy&zw}OalϭsvO<$y_"fdJotĻ u&tlrlsk8Kj[T3y4:vfN)c ّ+7"ӽz܍kp^E|r/94ȳ_hSeL*8^vb#wM\:1 9 4h氋# >XOayUq|ap>:0_?? `sr"C h (j Ptw־G%r ?V=V'.p1 ՋC!35!9!c)T Pˈ(T7i%:,߇+{WLOO {=1M]3%:'ew=OktxS{{sNpnn6NEŁ%Ek,<>sm\>->rKͤ;C .k}h]eOd]od͝bUٗYWηFXhuRJ5U.PY/qNMHu:~ 'bNj8#q:Ng8X18ُpu:1 0b:L~Ca/ Qb/^Yj31PR F@t/В n2o1C^f?]/kZo;a;v>vw\?RoɱرXCێ})e7o{˳Yo_Xa lD`#(FYe؎Vz^\|ɽ ||]~EvW}Ls,~ΝgE܃7 ^qa~I䜬_x9ލtsxmey:7E~TOsHNs797Ɔ8}ݝ+b9ݜ !M2j̼L(ݧvVjAdm#ëծiToŕGlnhW$k(wo/O_ҏ;u%Tp,FaN,rԌ)Cd_m "fಆ2ce,L3},g>ߣc0ѧ/ X,s$|>5%@i)8p.„m |3Kh?2|> |/d#QH~MD$Ӡ8M,3$R;i0@ǟ=K !@ "E)Qf79y1`28ĄD:6KLax E2!S"nDI %-GXƆ4Ř~ά=1qf( >[)y4dQbr{؅ޙnKP궒J/ktwW o)ؿaɼ+ ~+724(R`ljߐsޞ)j}{4Rdf?l/y*V؏E>ZYOX3vT}Bgk*TkB Ijz;|Jԥ[*UXP߄nRSj\Su('VߨC}'@@zVM >ށC`O5c0@삺e `;¯- $BumSH" 2N!%Z]ߦuK3H3JK$unQͽM=)z[KA@8;4@ dڰD}]vtX]}Yf[gK1@NAB+<1$"x!D7#$hCbò~$"aFe{!MbMD>(~OP=@|QߏizR?#^qܧc Zׇ)__ڪԿ7/uP/OOԟBw}z[Iuз/GOAһz\S}܎n<ӽ9|ϙ엘A[!ɳϥW':K?;qpnTx ZImk~T,|Tm]kYXfEc~݌}?|1)ae~.ky2*tI@*^;=y_y6:lsˌ6c\{OCF3|?F1oWo6 ]{{%33K{|o27)y~!(3s"BBU"u ,cf:H'f(6x,5 K!K 8Q5` ePQ"A9D`[&d'2'01Rv;WZ@e (EWo->9瞕WlLN^vwL-Yx]ѕk[U^:tA䐜ICBn{ڄ~'"$xe໡CÂw >l_40)|U*x@pIO#-[싃c>x()0'%pYn>^f=>Ѻ9u5 ƹ[VrsU[X+rתjc֋+HDsfu0|^?˂wGM tG4A1uHt4(\q8i$@@I9 @> lHaGz,dPr3.Nuށ`2!PCI_v&옉iW8cdzΡW8T_u-6(!q爃A~uClx9r_A9^H! B@;)u6'=WꞀ83rFzQOwoLv뇓nċG!ڮ%n-^ָ{/:׹;#VNxIJ:ZfpvK}v{oY677e?Ȝ헌fUvhf}1ٵه'7fgӃҳc'fg 3+SY33ɏFF&l^WXʚHֲnc/g*zmݰ%/+t-jYg-QڻP,.,loKuy ,xm$e(t)^itaI-^c9}ToIRjMߋ"n+̱_ϗZlsqd&PGEޯ~ xo7lYc+|7FI狛5bÆeTAf;35'Lj8ʘ'8E=f*R/%GrN} FQ':^O1A-@r6^`FO13E0Q@מL S}2(kTHO9pIĤVk5iCBKC,A ɑ{#r#"'FϽ#47'wYfyGZ0!(?Tpv᤼s?=rGF.D *1s)4(@^Qkwn{{dlkʭ |֝֝%,uET^]~6ͰS 4l(T+2ӈ KMFl6"-E!!J66lBkX Veh!i.mޚ PKc\,b9N1VBY_(r8y 58-Jv] ]A! 4r~  4".̂,I"%6+օ+ C# V 'pP-̇Ja4T*)aE^'X&8p`#\d8pb,_'vص¼X]gjo k," 1E]F5q&(a$] xdѯ^yIvzн#{;N=ƭosq,:u~||}ٔ6{I4a>32{d>y,9$x]j^ώ[vTt_j:Qy ؠCɇ'fOM'x+֙Y~O:&'u;2.uX2nNX̱⥱nѦыѽj׮wߪݽ&0{Xޮ/ ߅1+R燐(&Grfe [$cj⬭k uJffد7|WzF,)GƁ4kE#sY2wֿ>^LT\g}CְS]v`h( ,p#F%ZL7 + ) `5xޛ Űe\#0c2Wlo97(Q 0/] 8S2d yy%InMLlաd$gʰ [\]WA]pec]Jq| p k[Ձ^\p:Rp`uq9%y[W5~=~ nlKZ kٵ̀=;:ئu&hy .?3Ȝ}s&t ϋ?099;s_ ? 3D;`fO~`n"g:Vj(*TihP= FB;{5V!h].V :`UUO슞jV}Uk`wŮ^I]]uE'tEgujhvN;脞zz m6@sfD5Q)JzmmkhVh-V=fhZJp(F:6 @rp"P\5G.ZyE3"\@e#\e#Ǔʿd݅ p " 8F1|$: $5!E qG Ȣ LZ$p?2BT߈(Q˰[Y؈z$Vc`8a،rlc(ÉzlVlR*,b=+~eXEY*,/+J=Wrtga9~r*', G%,XOwz}BN",·z&~,pga {=[=9zu7`*Vb#:=3҅,}@oK䞨q?MNrw$9Ψxs3Й)FȮ.Όy d&e:=y@щ+֎>W[[uGў~Ϣme^n.Yt2+ӪꡕwfjT@LЁL'jü$y6&wE΁=G&ϼ:WZ^]>GC sA'Vyz|%!C͟]_<_Dh=2/Pt;Z|=~ό?\s}@mwd{0>Lp@fg-~J,zks% @ǟd\ŶL'r23FSLxp;'ZPoFF'phI+%f(`Xr7${J?)3'@tx.MW3E?/,i-3,}"ܙF,ܳCׇ9%z>gLyQipk"/c#q&N{Nx=:+TZKBXwۂTU5 LX&RƤ78 "<kP|{"G&wjzL](xzVR<xu$ \MR?W(\W m8׎;nUY@uOqiq%z~EmVԮo}Yg%q$.V:xGCVA8Gڂ-F%Q푏(TRN(S^ @;EKM(D!Z uTƨ.NrA2H PW#MjP (WGa ֨S F@jFBD }6Ҩ@>YZ6~\v1Cg‹ Xw,߻A_U[=`ү`⾈)N|o9sL(K\O1?/k'\0<暼<y{~,b{Zy]eLJ*xw kHX ^c\w:v|oJ{OÇ?ÇP%vX:Ȝ0@J%k:)&zxy,?B3CCS)E,6fh8! c68c؟{sʼnM#/5SK2b̌)2!ؾ,ѐZ/#M'J(X>N&zK*yR<9p'%tAdvx^q>W>ʹƹ(3sdW;N?PG;;;gdW89gepn$ Wf֤Iٜ~+uIj~:Zdf&?]=(="zS͓5/+/_voieÔהO<~ gfZg;83;T~̤bK937R,tl)r2,U2fKn0Ƥ3.}/,\zo)UMc2H'՞Wymx0K ~i0 +k `[AO ,UKEÇ?Ç33zfԙ1'8gfT vP&NJ&X`t #1fg{A:l\lPC@AMah (fd$cE1'R9f`cd|.U'zŞTg,kQm!5Q"r`i3,;-~6[KݑL$Vm{xK3}?0ErɽϚ""kȢogz:]+kmnwj N i 4Y^ L  B[ۅuxȹ9 B"[#CGGE&zk>Zx;T8|S푋+ '9"٧7ۏEfڧXcVw,l֪=ֽև{mjxuz=no=INU燆ԍH}[UWV3!*[`oTPn?TZm WcMq:XCGCU#53j}J T@w0@݄j(5RjQ4up_@.> 5bb/p_:'"Uؽ [T=O{pfa: lL|徢+ wJX!xMwM6gwA_s lg=X}e7c4 c-~zAw˞CL9B/-d"B}T=}>q/snyv:uS>\Jt8gO>mmm}#yRU)3۩LUtYjbtUTdeԊ$$LR5AٙԢ}4\w](ILln4S#n;1uHrJL77zbsIbI}bbͣj{̮qoiT}~U܃DȼP|8C ՘c,:dXy I?+c pj֞Wq<D)J>2`:SV#+St|[?ɘrKAloYN@Ae{>K?=DAfy_x/ y|fiv|Ç NL|2, 3朸~:z+v JQc@2:F ( b! Ě 1 $'jSѬ$E JU&^-c,= '2!(:u}}i80\} nN>|6:$fe}˾T}(\ xUl].NSpu'0u*2lZj_[8:JEf5 /ԃ8rVV'u^Xu5?GFJ7%E KdּN42пyNZ%C_7~yC\Szl܂]Ge.Rۨ&%xVՠ@jQ YmR3#XY7 j_U~QMՀjTSv(tLQݠβS +rCZP0O}TcT8 ADT+* H:;+hڢJm BJWD9zolkp P?\pbyҥ8L;kHy:@%>6u 7N S*XgWqZ]e7^gW[Uؠz@Y>Pg]:gf^s/3I})s;؝cSϹ͝iSWݓ˜RJ5)ϾKN6R {fKOOJ͌N~:?u~T"tɽ&S$Z^;,XS\Mu|K)-krצ>[oiN]*U\輝|'yw<-s7mOs/rw^7Ս]uH?+܅ Lӛ ޺P7ҷ-XϸOw~=T??ss zAח.z  LlӸ^瘋qb%u&e%_(R"ESS; {M&Ue;f9f;<^ K)Cj5RR潷v@T@h-!,) AaX!ćUP!|(kƈ8^ARZegwyTYf\+cɘsdL3d Op*āg_V?<P=!\oo2>Gjh108V?=V,F_Z 57bQĘ(SbʚbT2e0:O2 h镁;n-/nKkMW5zB?^_8鐓+?\q(?ƹ #s66F um :,T* %H< }`/ iϵw;+sV:,xzheXSjOuRJuCRmnPKTcV ^ejC,,Vo d}Օk2 8D nYݨRcuC0`jeE[tĞE!WFXq]Ľnc~A߫b{o\xWWOYR|Kp/R=Ü{twN7v NN_gtY7jNޢzYo_8)~νՙG{qv[wXdZwfYOLg&fcMns<`:!SQc̒yP}eoX]Ӂ@*>K"adŲKT{>|h>.P|Dfҙj"'@j,DvfPH%RdpbM,EmYRZ %p.)`j o-2fཉkdҊ5_X0x Eě"EMOÁ1 (:*X[o6B[ pˀ0B5vsJИ-3R^vZr;_.yї’c_R}<3c}5gI`UdM侜Ck?O \>)|fh;Y'3['xfp40;2ľĞHYOڻ#։:v4aZb1y+i]αQjVuY'ZqkE]gըcըJUQezXrkg5DTq,K耶T]q*W袪tEcj:[ݮ>W=0h5 {}QPaB z>z \W *}^wH;k`>P`tqnr}^A>]_?ތ} = Nv\^~v2wSc~}޽n7w.z;ڽ-p;_93ܛם SΫ!Nuj'$+˲e;gy9N"[&&sBfht(uo:gpkTldiWx<{%v_(KwڑN5/UU5ٳWeóUl/{eDgĖ/6mn6ʑoe@L?Ej0NXfWs>) 1@7|Ve?isÇ߅ǿ FWDNldWtD}xQy%3(SXj4=q=Nyk'Z wlCrֈe1gFga1' QPg@V&׃:?tEc)!q!gOc;B\ez>1 P&m(AkL¡خ?=xH߬w%z:5zf<@/]nRg"':1}n~^垊#.ܝtgPvwsCetw~8;Ynԉ;)N,{ }8efds3oe™2D&=%}d^IE![S9 z:y{@ra2//9?W%x@{=_W*tlLe!ucrυN?Dj&oMqT3 6kI7T5HڅOɘ5R9tܘ+ytd&nnG9Ry<>o6_^ ;af64秆{5с&e09)zHǙb_0>]D:tѱ4Ds L3Ab{'Qc*Reɀ=Ug$H`@qȒ"jh2L'f1cÌ3 xl2kĒJ 4k^zAaAMRzɘ⅒R~[}R7 tX;2VɘץE.rQBy#ciLÇ*buvǤOK:P9?2_#Xxռ~2kMZ;*kZ&z$s;&X')Zbdx[&Yu5RkU:[ SGcUIJ:S:pz@AsF݇~R>@KE8W`&F8}VfsS=8o諰Z_9zACFY}>\wa;c_S?DV7l}V:gkGKFg}]W1wIn[t' 9xG힢wݣqa{{IqXJhw~T_7qwNb;.=zzW7IwBQ|< 1#؎8{>Q˧v!]1pB,yAG)dJёVS"|scssȘ7<E2%xwi%S/0 m2e%e|0L?^2x8"?.KP{k2H!AlN X_χ>lh'rf~8qcBRm+^V73NXaDQ2}^mP!y Lh`mƘ]耋4)2c,3{J8t3BRs}y=xx=m^`۱[\%_obL'ؼ?8}EĜ 3sR`q:d:Mdž;R 1χm:L^tT&kƙK9K 5~c^,ۑz1y{2@6{ \bELJ߇W_a-=d0`gچ>H L9>)0twRNxwfVoe-;NKx zj?]{/ ƞ&$cD>@LJ{ fҍR׏snw?=N|k2X߇>m>|a2RfjؑI UXրRX:tHv7ʘ*N<30!(CľҞlPmLGt h{ P^Wj?ntt8f쏮tsOfF%f 3I@mR:>tLmz̉<%:Ht}(k&Ǥae0)k2CAGhr:nd`=G!p=/?Kv.tXcοu|L2`}ӑb $k27HfW1pxY{m:55N}y3S{#*hxxL&:,usO<^zRYs3wPmx9q)u߅g3ן 1> d0\!c@~f+"\eÇv>|'htLHqgN?:bt\KޛHS#&3I22_,ۍAy2ei),,!0kNY*Pž- q- ^Q\`MDØiRsF30@E8A9K/u&CK1vK.2o'}Ίblw_G(~>:¼p$^:tx~9XC2OXϋ_Wc=kMg>R!:¼2̘2:4y{KJZ?cjpllȰ<:thӡ'2{Sdlvy3p` el|fc>?yHNX)_iw ~\OI&O;WIMF*{=|OD+c>|?NT~g?sbetRo 4Eyj&TjN8Xâ,&}lǚ]~2fI4E:p;ʴN 3R<~_:^t8愞d3G%ˤ^Sܻn4[d71$@ImOL$kw"\4K(`Od0#|2Cǟ:t 7/:jt8ɔ߁Ʉ=vO&0z,c=e!L؏a xϏ f~y3`fdpU?H%\>pf6Tv9֎:xfy|Sw5Юo~:޼_đ|[d@7`O%eO)>o`s EF3w T7Ç>lYEs`HfիN1;H ZTTq3ͽe;fލfٖrGU~[fJfTWgƚXNЅR+O<o}`ZG4mxRfqf+,Y͌·hm"o3OF0G烌Q,9dF{2Cw%c2x߲km:gRg P1`xϩ+rzX}G;D}xN3c8>q4ko6$&KqS%MJ:χ5շz ׿o,_(If@ϓrc9A 1!˙sjyz% 82CF7ޯkĒi]q>>| rbjfDɛ*׎}cqvze[)ڧe쉮L6FSStׁffI%eq+fO1e3j1l E,eB'5aq=텅y:2D>cƟBO1c7%fQed08)GG3Bt\G^@s&< H5KM%d FS>ܟx~`hEhާF I󺚚,L-@ ࠆ y3@ >3q̡g<||?Ç; pL3j #eJ[ƤS$/8g`gCk@_"@!@Q>R%3X[L7Kpk%剣@2CeЙX8 ϓgm-%Ӧ(ڵ͸Nf~orY3`A;Q@6d7 :f?h3d,,.tpL:Ҥh]CP?5tP#T|jN 22DL=>M#7z:z+-wX3ԷLK@ëig&3ky|:w&x{an2 K5LM[/ X1%H%ߐ1dd|YA"?d& -h`qV~w"M0ұ3k鈰!!q8Qf )I2ґc -L5Ϛ~IĜksˉpX0l؏`fґa `|%3(x*B)Bm2D#˜E&kd;j0@o/ko(u#!<fm i ?؟w MMȮLQQ6b,%}y>,0/3fv 1>||w)ω3TYSg<*I%@2axܧkR^&fv}̶8Ğ8.-K >KHug`Y j'q@&8Fϓ^?qt?G9겝πJ`FJSSmmzcvg1c{1B>#D=!ky|7Z 1L1f)^WeXQu= @ǚ_:ߑ %kCό=ϋw~o?O{%߹83Z%h)K=OXR+'lǿ+ :>y>?%3Ç>| #Dfiפb&ʸXR{9g*R% ˘% 8<kg23D` 4G ulP߬a7K9dsU㱆 5?7})jMM Qn'V7q%",s2+"cOY1){s,j,5 3C Lw6wS]~d:n4uӼԇ2!/qt̯2+! I؟mÇ~>` )Tktd|eFذLƽ댧1 `Q!L:dL{Xcr2 Бh t(|k(2ihx˩= ?L:\txa 0>J9f88̘zL8Ŀ5H%g[Bf0i5RYm0@E[0S 7-kwHǞ5Npmqqxy??/YB[s9rrXRjLW2-?f2`38..a\ߔ<}Q%(U~fHqc?/>|ÀÇ N0Ȑ\no<{[b۫mgffx!͚iR$1CGwI,KkOL0žK5r^)Lh (_$uד)Bǿ3qn(@Ce_x $kaߨ~P)(G5,:Ofpy3LǛ5r{3׍ב5+g1x;wCӣޓy8>ɜDf 㓡 G}MG[{)RdbiY`>X@T {z vFג |<>|c:t y1դNsˉ-EH-Ȗ lCƌ$bc dY2[R^q`v02^RΓ5qHYcLfk~^RaT,`&̩QL*ߋWnG]S\˿#ϓu:j !*d0OGrfpeu_xx*$?cl/ۀR|L&ut ,9Myd`R 9lg 8A4d>|I>|'/73#kloR-)3GǞ-кvQլVo4 v5t͒ :R1-3tTxiH땱?7PR2(Go"kMga S[a>cPoצ1Ak^/sa؍Q;rRb?cӱߙ{zL/oj"pLHcv04o7K-vt٦7^G${<Ȩ>||? :*t9DiʉY_Z2&_(弝Xp% GܣKg-1EJcΛ߇j~Nod.4P7,? r3`fF@P (Lv׏uO7ti#N7+o'u0=)~׃3EjOmi9dT{F ? YAMqaj|(al?G5L5 c5"1Lt35kO*:L 8مF?>Wbɰ@ @G؟Z &v`jA0clPo֬u0Cf7,;530Y,dY4#jSӡe>Ry$#E"wn߼y|"PlIjvljf,!e)r(d{2$̒?Zo2Yx^wÇbń|?:&ҁeg\wSTMD< fK~hGHQ4"ru!hy,M"ϓ"ĚZ Er ό1%.oj`{4>˚v1S΀&_؟?ݡ9̹|L-tUS#@< 4K0L&σ^7vXhÇ>|{f8&3tkS:3a'u35o73q;?9FKu6c7|6 oJՠ{b57:ce܎Tu^w30c|o?ÇoБ"m15k15^g阛<̀ъ z27p|r?"Fi# 1 7w_f&!Ǿ't 7XyfYC}b~pHsfhZ} "c}go7,K~ V1+7(Ç >|?3ac 646P֤!e}_(΀yvod&Xgul߱ |4 NHW GgzR逳$ ;7,||Rɏ6p|'݀lhlEÇ>&>|? 2Hgm=k`߃Pqϗ-c1j `_7p-| KClf@C^fce_uLj>?>UEDO/13G.#GfԩOjҟ>|'ÇXͰtI7EL1@l*-dA2l'1:t<hiX~~C%6Uۤro4,d||_peuj ڨ5V:zt3a75 (6ü̶*h{5}^myg-c@y^M`$VX&Ç>|Ç>|ӠFEsh9S AEְ{Z46RL;3""վ>}_S+=GҰ)ci1Oσ0kr>|??Ç> 0jw\SQ~-TrEfBCm,4VN3N=f5Ƶ{ޭ>|Ç ;T xVq 3BS/c/,%tEXtdate:create2015-11-24T19:25:06+01:00%tEXtdate:modify2015-11-16T14:19:25+01:009_XtEXtsvg:base-urifile:///home/hans/code/guardianproject/ripple/graphics/Ripple%20Trigger.svgIENDB`././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3081872 fdroidserver-2.4.0/tests/repo/obb.mainpatch.current/en-US/phoneScreenshots/0000755000175000017500000000000014770510164025502 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/obb.mainpatch.current/en-US/phoneScreenshots/screenshot-main.png0000644000175000017500000012767614717152071031332 0ustar00hanshansPNG  IHDRQ5IDATx/lۺ²t[ZtU]TXmp^pprmPERP)%~xf{~Wg3ZkoͳŗnfL# `0 F󥳐}?g6ǫ7ݻ > @/&c 0^7&洝?t YB.{C E`A~OWq'^+[`\ϻ@ZD~~R?˯C[l]`#(9&x30o P9gV&3xb~͏ x@W6>lhk @sP׽_Np}mo:53:9܌9H'c֖4?6  /( 4 m߫yc3hT7%?~ĸǿYkE5e‘V)| @go&_ֲw}oTlqwHM@f `)"pJD`s4Ά/"v Xbw:3j;1]:76DO|NɢgbwP|ު scF0o Xn`tApo r}n({#kg$u @,"e7Xo`U^}o(vB>yJLXh on< RI&i}0o:#!6GHnOGVmi;/3Ŀ% Pt*G _rcx$ @n)NQNooѿxq<e^ dsN:I6X*u4{=JUo)cx$* m̟v?߀Q'+L@ 86+!?B4X0`IJg Ҟ&ho@j4.p fU؀U 1Fw'ekkz?ߧw&`v7LBoyux$i<DZȤ`}bөi`0 l60 `05<#D{& `,X l\J l Y3ŀn^e낫.M?+9Ĺ9ŹmymK/ϲ<7}~MW1Sr>f(}wqύss<0?&7_΃]7Y@~A7$wτW7q{))MV[Z`WmGp<:H?&T0T|XPzAxؚF .g$wttH剔#h:ꟿ'N$5f}P@B/tH:31~޽[MA __mm_zC}:Cz# ,{+/F|1)?SwN?5(7&!+oVwL.1cOYTPaoǬv_鏊8,U÷mo_@4rc:ӃdS_5BIE]oEi>cfHˏokyl|h<=X'sZJfG2/Yؼ?ݰ賟o3arwi堩fJ ȟ2OӃS)Atg7J~^8}}~i <"]STgR5i7`>QB ?>7{n0PP?@pq@y Iw|}N <\߼woN blX |Ylq}( P6,?fr_QDIOT=K~,ʆx``=}&e=oT43 M K koQ1nлxq?X~_)?>h'-(қL}v?ލ1 QQ%6y**HA)A xWT J2ߟXf1>3Hb`]G)GXڀd].§X?DzDY"w9e0 )?;g*yT JLE ,DcA8bϾ371)?+ ep5Ypmo0loVD}Y9F~b/mb7^FڅXbl-v1}|{`0?J-l% 4:ۧ jG*ER1.~m #Z?Z1Q/?t0P sW7& n5 zc#0h3ɒ2x eB l֛q| ~?3~$\x]o{! {`</_f`|6 "`.**#P$*+Gyqo=Be `=w(}P]X02q2.{lFnol]3z ( 1|ѭ?BGÛz^. >?  0 G|Kբ[3,dS/[N'tYNa^X#2w%?E'An2|Ŭ& ( ࿽/0'/)x\}5GcAZc BU u w,]A%+fqLkY<\o`Oo w5c;v1_}* 86>#>KM@AޅT GZB'Db,fvgOıYǂÁ{{q{fA0R , !bF?뱁mV?JzVUgA]k{aYЭ^d0?=ۜh;ExT^ޢ:3㳭Xע˳^ [ %HC@Sm~ߟ֯3 ό϶(x oboa*ԟ{݋$fW2 zW_.V'vَ{/J`뿹% WtrEş&yN{/X\՟ $bW_T_6]ELJM@{ﯳqOV`0^eU s;g;;ϭX]6ދ{řT ٦__3K\wE 6wŢ`_W,h1 XGV'6nhg]f~۬3Ke88Wc o@w[ VϨ#Xn q_~>_& u(&a+- p_Ik<0fJGՑb_ Rz ^[gQpb0 W`/e`K@[ ?d)R>V>jqn&%,ɸ7hϏ,8ro-\:.;lT, Y-y_`0Ԃް4T{E~a$Ţ\UZ ܣ/ y @;? ^ſ+OM@[cTG_]sG:Y.:fvŢ~{5%?g) ~Z7Eq`qJDuGgY?5T88bcfi@EE <#}UVsgǽ ss?h;Dոg}f-@->?6x/goy=W`por4rM@ܫqƽU ]}rcA/21ro$>. 0, @.u 䋁 0dCܿ W%r?/+g\*P\C\K@/YI0ry>KXQ>e/Kך/(8!%鄑\q?/X 0aܑý\oz>-g KJZyIb``ſQVPrߥo=$$\N*Y~10c Acv~̪뾢Σ75@qҠ})ob1p[ @U(ojK5IyJwUU*R M 06DŐݳl/mޣ,9KiиƸָf&` ٦`] __ ğ$'kO7/KʮWWs`l߼A'QT؅ԟ=? 59W=b` 33/8[nQàwaoָ` j2=v 3Q1$f #u@bԟS&9o=^Wb0A?Us5#,g 2/6Yo :=(06d3Q%d*"_́zUلI -MřA_n10`3Q%$Jt|?_9(\BBcF0s`a? ֻӧ_ֽMm-Р]_g zJ @17\,6eʫ5g ڤ d,hz~ ؀N"Bb&?} Pl9 ` J@U$ xBSY3moWŽ 0E~()m-@@/@?xu` jGi7Q Kh7'ſ+Smmmmf;ގ׷l 06-3?ݿ7,{ evF!p?>6D wEvR{3`+n/%KpOH{=y`47bqſvfg{ mmm-@@3` @,|qUbZO\*9oYhhác\U (Ɏ ,;GTlӯ_\& n94V @606gD]O @ cӯf܎smmmiAp{ i@U Oav~d{. @K. a5+E[2|[ 0Tް>Yv;pa,݁[1e{ܯ`"U ®v|w*o{Api1}`l(*f-iLe?Sgb_hhsi°f  ;??wy}P;18Wzwn6q 0?ƹzW_zdmͭB(S~-x7j{ò 7g[/6O @1` @J W8<:`ޝ8as/z ̗Ly[2h7 l (y5RPޝ%ik6?Qv޷W h`C @Jαjt,RGGD_ 5aQ϶+f}`d1 M2 Ǯel m}}}efZ `lx Sվ> 0} @aTQJ7n_ 3 vQdſ*tApAp! `W4[Th? J @A+ye0VP~Д 2a/ʁ3UeH4ߟ{_u1 ]@P&`<1pݳ AS|;h)&@w}}}̳006* RsN߲ @ z*#@kTx Ǿ7b*5/>φ`}[jXN`# 0YJ0yat6 AEI905oޏ06\G @}pxv>nʘ 3?o 3=P=c#ణh]FιJ>aj 3 s   ׋`ߕ$M0pDD1 @{>}`lx3>1;ݎ @=e?/g06h>d@1WbX;Ȟ 0wmv &w?X5?jqǽ n~<4+7 @q3`# ~!0 c.J cϋ03(DP+[ַ) xZJ@ UAà^G)uɇ q+}06k!,8Ҁ0APs\~OX }e0/>0 @qocFHx7, L7A:i@}}e^{~=P\o4x9a&s>]'1`3 @IgO?d{=0D/:ӡu,S76@#[ 0 wmGI5ԏ~M_}#+[}q'GJN =e~06tuc3s`8ObD_\g}Tx˚1 oa]OzAԄYn폼R}}}}üVט.q  cP`;+ bG 0uq'KhK%]( :O).P QϊҟZ`&X@n A0[v<>\fo?hhhhC~gwb?``GJΚ Wcڽb=016{U1f/y4sqƽ `/N6tm$}FW?@bh#3s/{)o"xwŌ眕f&(2?6FGyYcmvh{v[ՀxEL p F_E .Ahܫ; @4| 7  i_"NMͿ `G:~' ݂eԺM2[bya]~.,0Ҁ V'@*#RjDy˨q]׻ yj~]Ehh x{2fNԟcJ) 8t.`k7,K zm5ָv-m:W?@=B9sE 9ߟto\c\k\&f2Ÿ'޳@÷4am91Ol%Y|;vcrh`l-Aq|+wۀX [gY$ך8g6jq-{1r޴/@ofk"$ȉǚT37o`p1H l󰨕{]J%=8888>m?'=`Y8Ů 21%3#G=n|"ElQ'a?@[oրycޒ6{-@VC?f_'31_( fUX[yYbo OyX[@߳@%bT `?_ҰM0-@9(_ T k?q/Ma0 T,~8 \`orP}}VOlNC[_ ǐ ?7; L߽+?R0>(Zbs7%xXTT=R8UKp6[ <\{;NI3+6e̋eˢ``ܢ߃?GE՟S   eQ0P^F#X+XTt=@74ݛEҁiOKX?P ae<He lRşOIş=D z3> wAe1c|Ojx x#)8J!z<g c7Q``oLn^!(]`'yQg 0в 96WYspcK‚v|X{oy| 07[.Mhi&1c-ܖ g+*LcAIK2ɺ3 N}bE6f``5)Aw0|+ҌKU~``` /`'_ :I :0 ?1bLO  &`ۀڀaQ8mw| | 'ԛ)-hd@)5c3u+c)gkz⬿x:kqT=l3_0 rYOG/:Opm@ 1\ؿ*|.@~S1DS³ؼ/D_yo Ńwo7 L؛!ߟm;eR?o/7i "=D#paAbރliLgzT2XQNH."4"o}>'(7I lqח;##0n|s8r#@XxG5'Z^H)fY"6y{Vs_ |+Pl06d(+z._D<4O U&ٜh"޸l?07 , &_;+-?DPˏ-:, E9SuFAj nfL)JEw9|q{ \K\S:?۠v/VgZ06ꌥ(5:2BٷyPSp}AƠ!ypr;~0_[˃7gAOL8<X;g~O=f7G̗~46^u>a}5iGo~?x 9gG ~_gMv. 0{?(+\ Ǒu?ͫ2|v]ֹO:}zsrZ1oKv\Gs,~yY}VslMk:ϱg4WbGڎіa>})=m'-Xmz|14mF%;ٴO^v7ӾYkV昌~;ꎞ{1&}N[yڬ s+.F:4}.ý۴>g<)ߓ4.գu<5+~ncLgژ,/ZlY>o рjn~hϚ<<_ja P:'=pzcLFy1rڃ?_I?Uk*Fo(Zn,Cx vnb_]6<5/UMos vnu*ִJ\mIz|M6=ii`v?7s=iܘz.6}6i=Эu i\Xۤ>&~Y5X3kt-c&=?~$.~S4GcEUu1>*K/z M/XL}w9<}RK:Y{O:&5~n:&iR߄&ԦmWs(u i\X;o?4}5&~Yg54EgʯƋMc_:.}5Om-^;n{Q|_mT|WjnIXХ}8q5;۴O_U&uˬ5/~n:&sor#@x}3iM-Xߐy w퇦ϳE?ڻˀ.ja @CWYEP_~ΰ0 էN S"bﴽRw3`MIHsȼNCuEFD;U-b[7P56_g_m<~n:&s@ڴAIY1Ѻ\X{w~h:x.Mu7XCPUZٽM JvszMSVޤ|xdYjv/[k买{w~hDin:61jW`D۽].r7Sw|VRӷM, }VfqoFsGZ6=~cەha"3[mbܦf?O,x㧍y+__?ϽA$?x笽gj6KRɭқr`n!M wCټ9SYVhҘ7nCu n~hj9O?6}{}MO?_yja @갧#3|m=DcfÁï}oݍuʯ'帎pH:c=;us4LMN+EiVW唹ni>Qw ʆު_g_³˧y?7Ÿ~{vgy6K}ο!>mMcy:mja c nx%^|N~v鬋d⁲u5ybἷW5YhWWU?M~~ <~Q|:ӛR1jYxWg fNi^ߐY v6Um<_&nײ !^+u5lڰhoY)Ďgwӽ` EJJ珶V:G2GxAd—gwp`Y.: 6ҠNwIPEEgniiUEYNS)/tN'BUvmz<gwp`4ZW}SQ$fj"g;r4= cNsπ{7 `gqX2O墽aGǧ8^*k 0 S&?~9<ǣ8.v,}Ԛ  pӳL!6tE7;>6oiyOvH;!Hׇi*{S!X) Qu3BdFbDq~0 [2ϷOl.fU|9/l7\<[K>~llIüm.m,ag >(7o<ӯx/fk7x @ D7.n!/7w7L&s'ͮsNqzdc'APo6q?`h0SL5RY|NeSA^|Ms^Ze7o5ާhy!A|]8ߘyyl}7W3c11[ɤhɶ&cX>N3GnTϐq*?t*pΔs9V]tNV-nr٭iZˁQCvrNNG1?c7qsMlˣ)my>xZت{g},gU),Moy6LkI8Ϙ\ŘJvxXjˢOO˝w,=E7x`: hU +fRsR0(}`1qMElq{#hٔ7,Svp/830uR~.Q~NWi;*}5~6SÛ hK:&״m9Kbqc}ck5lkNE{u2!6gu>WVejt[crUc*qWsh;Vnq1"`l(nȺ4x|?ac~s]ciڌH|gtƟs9=?0nr@&fuw?8&M:6Y~bl\:o9HXؚ,0m4eY{Ƿ٤\kNMmJ۫qidiLy~t5-ӱ1ikXj h2M}nzQʬ7S,y{ @߱:mG`$bΊəeǝC6-*zc^[,\{[\KՂΤ}gqˤamYitXZ2kz|[ϳ6t9n2&W9ԫ awSem`"[\ǭ*ؙV`󊙒ʯgH*MSf7O|NȬ<hyUlifXZ0݊ԌǷzYwM*V=1MfGn'i8ax7hrɹ4P+&N,~8zy?q߳/nVՖGf`QckI{75<Ƿ~i,ee)ױ-J =ݧjY!oƍ^U#}1ؤv*iZX4jz.uۥ>K&]~ Gyi^xD%oOXda, !/g}EQ - Y `4`0 `0`0  `0 0  ~L>kKX"H?C/೺~~1e?/q|s/9.O~-IpE5҇ިYX?Ћ:-h\q]Ot,WWѿ`߅i+oJ> TT]sXX_(I=G?ʯ*R0X,Fۘ"jr-A:؝-~{0X(俏 ?f 'AOs'@ |,-}ޠy!qҵ3 Aiao:L>[5? V wβT*vf櫾0X(x2)@Ú 0kxp7랲aH @yV )O);W7i#e@,F`G Ό>IC3qwtQz?)0 Z"$Tr?+L@%`6V9xK3#3ag8=ju0X*no ^_f()L -3L8cQ>t}໧ZP1mmz@DDD0)dVP!6W٦V7AN۟WD1m31X,ھw o|VѪmiuĚ80Eu @z7d6f+_ TFw+?XfbJs"6km:կJQjO|>ɕ کho5m"""`\eRENyk&}޴k']cki~UI6;OkSmm`ޱ@DD ;]f^Uzͪy8kQ|o[N(M)jYm2C^>[`֚_m]GlnPgxӑ}j\g7>M @(~9Fgֶ2E n @dO*yiڎm^k8HGi3-Qf^utf}wNQT-nM۹[x9FgֶBʘQ-W3 >UTcF5zk_m^0+}Nw|Nyw*ݧRq~EXOJjJ;mD[}|oog6bJ8::#Y^MH:9y@@@@@@@@@@@K͗ANr[w&GODkIyc@ݏ5p\_ :&'u+yՊ'GiYocvڟ ;_[u'-j 1]s8>Y?y 6O?to'mQH}_Vdw:~P[Kuxn~?*}px0ٮTl@qqGy=y ̧m;l-m?\#iW7^IKQR [o687y=yg@K#c=h$W|b=_T(4).Y֞R ֒db yG1 $hIנj?d-XٱcOXjSl/3ɒ VC߻o!Gv^b>uS#LQ'Ns(T U'G폵㵪y L>#fb"wBG7F{덱zEЩ8|/_ZXSjC0?\W3 Y0s LEtgu V3 g}旽,ٻJ7IX<>*x)?x`uիy=yX~kƉɯZ~,)\q_j;I\9 a`%Xv;J&պ2P^-Oɿ6dys$i]F193I},(``a;G= dY'xI}I޹&<^߽ Gz/ٻ,io+.Yya2ꧮ:`^^Slu}V+Uo[|=6ʿiHbTu~0s ¿l>$ 6M6|5`e@:J!]`̲1#֓XE!wIγ1zG}xT z<ŝ'`~s[^7F.>L!`uva#̟}:t= (bEai@qĹ&`4Xe)Z'=~"xWi?9F>eΎ=O00s pm?R{gVq_r0y®l(ƵLCXEq_wć/O㮮d#Êvv8nqR(1"<)@gQm79~}쿪e$/:^ύs(KBR \(VrMkV9mH' ty W xV'F D~FRLVG~ldEvfؕޜi9:9+^U,G?^c?qBUċ|NZH5x2Ǣtb@yzߝ3w/`0֟,@gFh_..6j:M1`&hq{q m@N HI+WCI z v}Y+_,,Y8 :NI_N9d &7 q`vν )XtQ gv55DW-`Q aKVZs!$X< $,aؿ_ 0 _}>xNZX.f hv: F۽cnT z?dWcXX'3ϳ6l Kv~9rXd¶>kv% W hF kwf@+>l$k/Ɵͳ G{?n3$2v#|`m@rVzݓ2L {{gx`\ pPDZ 5 IO c\g8`i3(Wz֣V|ټXt uގy !݁s"UE86&;x8 YB P|0|N@]m@׿"fZ7_.v0f@DA]WBa#qZ[6IUj j= t_Հ?NޛwקZiE&wQ9.tx ˿Pv|LѳM GWgw+~kd}`L񘽡Ӊ:"m!gsbO@a> dP?m'^WbmI @q'UoxH᪢@ȿ}xA< \ٿg߿*wF^XOԛX@Q3g?9`.za/gρb`qU`wW}'. f F__Y0s:€p _?]^X{g^^AV3]Xnj] XF^`M@_ugKe,tr%۠ec2=7XQn{Wyׯ,@Q{hͯ篮u^`=Б-:I1^6/Ѳ4ftx0[&+2C68׸u29;J}էF>VsauLQZ)jus093t̓?ỶV5 Tx}1{>aMb_ ӺWk\yߓ`E(|o# tTqW6`)~Y}@|ﰢxHy:p{&U@uyKbGM<2f9|-e)5s6LOƇ*+5s_cYx^ޜ6T}Unǫ5pIK=T@Xb;MU}{^FI # ,#EmrTxuy6b]OG Dž}EI\(|YG8J:=-_ld?[-@/yIDAT^:UVⱍ I٦>]Qa͸]<}_=9y`&{ZV-m!+=7WP©ܚQK-~d,ͮxu|UuoI2q5$^-`;ׅVՖwY!-R}pA Q]V0e?eT>Lk/WP96q*iuxyӜ`T+w/v]xm?u['SFE1xxux(uo>V,d=G Gv%K„|KOV?ş߾BO3 F5Guue@VYtT>5G-+;,vG i1U"ߖ2j:WG(NdaTuZXq6QKר+/?ҙN[9~n,KNx ڏwq]}/F}Kt+SfEBaN׹d"{ҵ=(UﻯM<)I`LKqB6" :wxubШc'9'Gܫ0e&a"0J9n_Ap[w= 'gW:ʾo]9}Ǜk\}}^@7-2},#ֶOJlLYSǫ+4 \lڊPd/|(*ȟQ,:o"U1Jk/U^ëKD* gʂic;Z7׸oD}ʝG Pq(08-+?Xxub[|\Q'ǎR,y9\V U <琭,-N({bUBe\!<"|=L4V:.D(^yIy,@Kz޸X&y;w]q]Y?/zOz^@/Y"lq(tS,ʆ.)ZecWg~!$lʣ7jj(P XckSժqaί*'9_îh][(L.[IjCǻ׸Ly,I.- R;閎'lNT]xu,/I{q$yF8~uI{ٕ:F㎝oŤ削qwQǸPl1> `Y0Ruoޯq=y~ňŒ>]ݾ{R< 0IUj-[UAՉ> mu.͹K}LQltr'@@@@@n'z` `           P~f'|t޿$z,]z\x3e+f=;¸wt>PGI7 ſ"}>W~J5l$5Ӈ \DŽ_=3'`&׭{V~ @' u  o D!ss+~y7~s/zeH XNnvh <6_-&_Q>m$v ӤW}GGIǽX Y "< [> ZEfW'I;ãjA :k&yOӫ> ` @$yL&&=l9~v-H|\f:@_h/ g緝d^|ќX֫ v'Nv女@`=A 伆+}?|sM9vEm7Hl5~n@t{xo䒧^|(6 &.b^xpG&|;H|,-z;@G7*~pa Gw+ 4n|ݙȫC#b:b&-o(8UoE}>|u'JGχqo7XՇ#>~,W\ iOTnWk)G}px0xGA] QBtdphFˮH7ծ Wp_ُ"yŕ&8,[45jtu/tzŦ8vF\#'Ns!B+?X|x߷Q4~Nvȭ#H4)?H@BJpB;+镁(NP~G sv2!`飣Uz< |XG?xYCjWK( >7a'Baܰ¿q8f5hC _>ˊ{>mtB? |`xcphmbF+g}~38q8vYpM|d݉IJ+zohOӢ6쫈@^~o~t7F>(#uEq\r ־諗N/{MN?[BB^J?1ws}:s~ &N="61/ IqL\>T~=7ϵ*;]\NTsߏ/]a9Yl#LtP#rW#vdk*FΛonr`U/C'Iznܘ5_?X~4?9T3@`;gEEpVǟ2?$yr91Xs8yZ!re1mBS6JZhȮڀ>\d8~vnFscbXv En?+7̱"$!`jE7;.jd\Ou$ꅀ03hy^BPEnZfͱz/J{LbO4F[i^$__ZB1`R3Qgaz|;0UylGD^#WP%;gkVkU+TY5\؇ʣ_mW$fn_HC?n @m.?;7Ħ`|@`W_(^Iwh#́0J1`z`Y+]sQ@N|~ڛY|h}GЇx㶧4u' 3o4>]BJ1`q@gن`@b _C X^,,z 00J@gj{h%yol(bL> %/d>Int^{ tQ;]6`..B@E:}ݮ\_C ~F`]`l_SHۀ氚NL; 9߹?EC d¶>kv9y5w'G]B3}Za#y^{!'7lm&/t?ߜ[ gO)!k=;l'00׫`+Pũc6`N.8s"pgdBiH[ӝO>XGGSP˄:C<;OɍE {  7r",s4>#j87 @\X]ccgs-{ׂhOrN@]m@׿"fZ7_.vZϟUov.k-ϛIpu]x kj:oiHWEnY7uj||ſ̲-, D{~UV&G8yo!w_>h% z}m<[r^=o]˪?oR "04_4Frx~{a_'l7nmſ,CWh3|yl Z2Daè|>NhK~>8Nv7QՁ c1qYo,dk$5_2?ɮ\1m{Ljc1+ Xe&>mNh&ſ,|pӥB߽1ٿmqc_K/ds~W ^ &gdqrQ3]^qvW?ſmljc/ȿ}$ӥ,KV2ns'?(-vώ&;^_Bs{Oַ3/`YC@%(ݡEopZ؏M \ϲ@1|.е49_V&n #|џ@/ sp^E+i|rgn2lUĥI]tc>d.~{.W}.M/2|Ȥ +3E/OC HN_Is-)eWoiۏ +?9 >|a"=U) 6~~$'pUwν;^t)0: 9&mnr(I~@ys-?@ ;<r#]7@a79w&tM{b4bRO9㎗0* 0.sFſ0&" rӤB})wY8@XËWR@@J(-Ο ~G=ƿ09v9PV-|SX4~3}%eg+~9{=,u8<+lj;Yo!Vtp^\QJZg>tܞ6m/FZ  Tn6Mn}uWx'ݴx(@icm`^J'G0(swB",@* ?^l&V6_l%6.\ A1ys~3DK}wv@ ?.rYv('9^we#i`xY@$ᕀ 6:?-U6UZ@h6NZ /R(XLN ~HM X¦[!v:J_ևk+t4j~X@% Q_QǜU@@@@@@@@Hn`=Ne0@@@@@@@@@@@@@@@@@@@@@@'@@@@@@@@@@@@@@@@@@@@@@@@@@@& XN      @E-Xn}q+~+U0pn~ir(tnt:ΗwロFri7y3{9` {7ٽWwv?77VB㛍d$o?{<>Ha&j}.C`"7gJV=L|e;}E`Q콓~O{mV;So|4l޴[9?vWܧ ʹ[~_>QsZ\\MA+"";o3iPgܷ}тph+0wI[}.{( }`/ߟa"wmA?-u9*Kߣ:fQ^w;騦%q=hn3Z",. 1G@Kgz{Ruof^֫VyO;/>pVw䢨/}nn(}Wf1!8eKfKU! Ãtr@EOXUvýƟ(-tw\[AK-FM:V}&"(zol^+s=c}tbE៵*~뇭#>e>ϯ{Q?O> PRB#>ݳQ\Tم g:[w=1 ZA#V 'F?+|v|٧2srE;cU 5_VB#X{xD|ug" \+k+BuYO͖Gy-1u\GB.o}ͫݹ}| ŭGtYϞX>rR}{qߴn "g``uk~XX ̦ZeͺQ|M V(? I|¥(/qޞ7 s޹ ^!1I1+l~@/ MDKEKNo]uMi碌zGcp#G+] abrT @(㽳TnOg$Y7޳qt (jv{7*C;8L?o#}Wrˆ܁ 8#EzDgA"=n!}֓AX{[F4f=:# ,Wb|JCcK>J[qoC`H/}-(B9Y!h?oM6Ln||#0~iXȂD1LD~@|;i1?W\D+Cq~@lh| lWغXq+CgKPjMٽϜU,       p-?-JXtIENDB`././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3081872 fdroidserver-2.4.0/tests/repo/obb.mainpatch.current/en-US/sevenInchScreenshots/0000755000175000017500000000000014770510164026313 5ustar00hanshans././@PaxHeader0000000000000000000000000000021100000000000010207 xustar00115 path=fdroidserver-2.4.0/tests/repo/obb.mainpatch.current/en-US/sevenInchScreenshots/screenshot-tablet-main.png 22 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/obb.mainpatch.current/en-US/sevenInchScreenshots/screenshot-tablet-mai0000644000175000017500000015536114717152071032443 0ustar00hanshansPNG  IHDRX +ڸIDATx|/ Eԟ] vl`Ał {b:(C/IBK s-˵?s٫.{Wl}gvvyggw ,%%Ei4ZڊF5 !p[n޼H?ZKј޾4Po?餓ݻwOf͚5u?ӏ:utb/ 9䐎;̜9.155Mvi%q?>pI&͞=^M$VP24Mbݡ ߠ|؜9sďy>.B[l|bɵ^ | .ਣ=|GtO/)v]w1zh\Vl6qDc@޽MEoyӥK"tiӦ;;jԨh[:jlRC}v)r'֤C/` )r'%r4";9#Q84 я(,!CӬY"kIa6֭3<h!.vYą k֬YhIhmڴ9s& \GqDwDY74M1Ҏ;ԩhׯ߄ ԫGUf/xOom+%ꪽBS hF"rpbR(Es=nHyر7tS4۷oNJ7@ٽ.)}my}T8裏 [5!@jjj59(OЄZ15M}]tA_PqM^bMYgl fӦM#xI@$r-"`UNBU7xv ~C<"w˞x҉v)Gv)\yI\ V @^({)G6p(̀踈pSl˃ӁT5JlSOaMtFDWEΠ|H DU@ ʘlU!Tk׮]pźZ$f!lٲe>}|m,СC+W;3~C%xWm-{hz!n#uvsbpqAj$sܸqՇꫯ3tF+[d8IGή0/ȥ^:a„C"=zvOB;4hV!<@sqljUHzVc N_ܽ/ةN.?6]tTʒA'O ra7(҂h[ۄ B# ]l0lذ76ЍP7裏P[o,tJxX[!̹瞋}|B(kBO?"#J XQv€ T/T55 QK/ulϐqB4^[8_~9hIbbCh!6\ ߻dS٦[qJI}}%Cq} XYuu]B 8uT]4P4a 9D=Q7{W?iӦ?[o!k(Md裏OЋpvZn-`(/q.(W]u:Թa WA+2@TDj('|'J6 v '$ *nB+K y2dBQ MShOd M"1`Çd׮]oAQT@kb/Bgw ϡ} >*W_cT{9}LKąuiq5WEGlZ7#KCD F;UHJ  >}ᅬ2WˈPOSc/z(!4(兵(Cmzx1Őۘo^ |FhC"Ŕkejh9~y8QnM%!CN?qEΠ&MR?Eh\x* #|rՈ# ѪɅs9ʋ6T޽;$B8]Zǀgdh!FAl?#TApf)†i&d 2Y }]ѣkG_S Q:tsP6[|JsqkpPN< vҥBq.Z"zkժUA d1SO!ꫯ!=! >鳧~W[{}ae]&vHЙ4B#AZ&'NW\t 959C7 ϐoVܔFܭ&'P/sA= #ۏ?6:g}62Zr7C=vm-9PV$nl"D-AaGG\IҾ}{D]@k_ NBЃ6$3X.&͉p{#>~|۴Au5ph3ϜJ`͋,@8ꨣЭPu icBԶh2pk:Z13rj #S84 ׾&Μ9{3慅l2Dc55m_~ -Fhԋ?~hdpI](InA3f6Pb#zM1ߐ+^ڻ_w2T}C'uj6̣oOMP4$*y518B.n_N#L LBt)?a0rbU!@׾c9Flp ݖ&x뭷a=4->+PS}|;O@ ѼFې}aؠKヒ$^{'ܤIwyGUA0h)Nq 8(d20UQ[_|1`GOa!Rw Uu+/`#[u>?Kξ@B. &;"bj7|VxĔNhm,~!d !ju]4yu@7Dxycx>=@S>5X& Ǫy @\PQP| :u[ogx)Swg# ӆP54"վ{a'tu_|1d&4l34 b?#L|xhCF}S7S'@9.vU& pm57Roܞwy(RqNHdX>SXA3U"^QTBEOۍK!&^fL CB4G惵Dgͅ[TGx$Y\bVCB^r6 >UmkMhg}HG!# WM̯ܹ3TV-3<0F=46lܸq96B^ 7S`I>׎ ?~x>8Ik # xP<Ԉ%(}"4vS޽!&L@p.pZqpb ʸxVXCnL<,CBŋs %~vIͅ0 r1cƠm4M<%OЛFVhK#t_JG$a8p*/IJ}=]v?3ό0!d^QFmGꫯ!~ûF&05f!)Sw #"o= 1:a[ d\p'Uk[E[P yj2Zn">ä5tUes=f**!&fc/;SEk"B<}ᇟq]v|N=T(to3H4*-LA"p~;O>䀗8\+#*.o1E / hIkMV "8qGbp5!D"T{%pC]hfxN/5koq 6B8OiکS'4irYg?Xs!D b; {{0t6Q?x#4-Z;ksiӦ=oG! ⋤Q)ܡ+rmYKK^1q_~eübFo'^ V&Tܧ~_D*zu]5? D b@\>l r@Cn$E1ֻw﫯?;a}WL"GyE9֚o>_F駟'|rh4Z%Z1Chzkg>!̋i7L[MBHH0(Q(K!4<5Χ}9fB!$y1,4,! EB!$y1,vҜoBA@wOI*E^znBA'5LH`X!1k,q"Di.wqZǝoqvkJ;S!ATx}"tB7]HG8y Dq3?B>iu G ]Yr]7Y<~jչ㧑͞ܟu!M{! 1KxŎ 2_世-]V%P W+_.ʔmX<,rҜM8/t~ەVl䪃z?K ..suib7CCB"$ʷ=A-PPo疸ytrrHH')i+lwN-tox4<.u5C S] rT-3!  X*2ǭ#\FY-&9I&oe9BBBt*5Nst[xusN{O=@9D^#j'А?}:/[nuװ:&mȡeKWP !:zrsqFh]!mG/sTO(,/{@^*j8~] SC IF;;[^(a/\#{@.TeUCv6ZɀFg ˫S IF#ʌtP?b܇92{BoV5c۪Cr$,{^y9$$T`Ek&ߗd*WfL*p_h"kZHU >lVuEfkJZ+ZHX*GAI_Xp㪵PAWNEW s+\H%$FD]o^WbX6$e>U-TrPBʠ!\eYޙ` v`ۉߺ]V"Uf!i!1Af]|MZylK_nmK1[ %68ϲ%VfUG,SDg8kl<>ȕ0йT500U ,WI b QBCK<,|#7tEl ۱?TpW UXHB(;N)Kj~IYD.u߳j1l3{~ˮj?ѐjTvaBiUU͗E{`BsVL(ePH{@Hm>5Qu[j{D̴.\!MwP((nv 2sKUΨܤ;Ġ|WqüP46Ҝ6ʜČxvlod۷-{+5GUjт4]`]SQtB 6QibtSfHG1.!luȭ< -.(oձ k O!$= $mY_\_`4a{9㪂>-<{B۪zhBo* !&$= $L4)K%;,{R--G7wζl3#mg;XScMH/{@H 2i3WT*B(L8O ;-ӱ˪Ǭ󞪳+B2^ĀO/^U1uS!D(\KM % M|&[蹒BH?{@H2gzW䊳ppA)Hcu?(I K\WW(|RBE#T,-٤&[+mG_8 Prfc-)wߐaKBH/{@Hx?+OF~t&ze&u8dhɹW0Z(m6eΉDFoʬhBo[<lB( Z,=j[_4#uBRBE#V{{mRFEFa%O,XS{wWpA%chl}L~h/.՜CJ+!PI@!J{ڊx /:~[ň߳@!phQp㶵;R܆Fl2Gm`!%x !\hm5BxKu8׽s,OIhM3@>D* nH5oJiœ*M6M̏JOL+#BRBE#׬(uMۥ)ƔB`N|N>{p}S5eaohQg.ruQq,!sDyPT:n{&-+u^B!$= $Z4Bx*ˬt.V,a dXo[QSVQIGj!!Pe/!ţ+_fNQNcht[n;-6+~ňD[_O!e1hQ>~"GT:>ؤڎ]h RBE-Yoe 8-OhAaISv9(l mBRBb@|~\ 閸 J)5yS>GoӬ=G!)xUB~k !KV7􃽕ҲBC5CK \yMf+BRBbͮx~AYKM3 9qil& !'_eVf ό9KM))_PXPy"7;m"Sv91C_96)>_@.2*3e8esP̷>zKș2!ĀF1]̔m٤瓄-F|ڶ!`fXajj |yۄ] }5N|A+">_Ps ӌ)*8S4P̷8xWvk~]Δ! = $6ͫh5xZ޸]VϜA!Tg把?$O/b9^*X!NK+?do3շ mϱ#XOP@nf>l[ /~>ME88,ye(sy\7I@SO75ɪgdWQƃO4,XF79 B>AH{@H̨*1?,nsG5$~LYJUj?5q˦w Pڊ B BjEP8lv;*q }7 [e;|G]iAoN7_nZfc(i8!A}RBY](i!uiY'-yw6K_Y@d=?V8AQ!u:@|^ŗ-+jZIwZ=깤Lu(EICG9P|I MQt_incg|?ToPެZ7Ø2$B)p0Gך9smN P bkM(%EI<hSMg=ԙ[@/p 2yr)Tpӻ꠨瑐r{BZ!Z6`^grSU!`r?zyk$ {@AE4<· P/o;اV$ɅrQ'ΨHgdieSDȹ^SD9oNqʬA4!q@$R9.#^I{0̂',%鬵RK->S] FAX/T7_LIԂ7>Lzwy# zjްURt\+-R Ikb?r|C7Ypjy2i̵ۤM6]{UgŨ{֜u[/?Ղ*4R o<8)זhw@};|ZHiJy;til&_mKMU.[7wJ'n|wv`%)Eӱutz]$r]}L(S;R'[JHSKwȇƧ)Yxdt޺sI}|Gɻuw9zOh#@Jg #Yl/q7dIȕT( #8b{,G>++ެ;nr}s g:(`絇F9_"%>M071=j6~it3,.}*de^s UbIA)|:z&B}xOu~)ؽ5.~R!eV ǂ~Y~zzoBV߸"wE5-<ʖ7p#/\(6_PZǶۄ«+WhEXI-\Kѵmۜ* ^t;L$TF L)>˓@DfhI-]KҰ}X 5 /9H[%Ww1/x2{'Wf*5=:/*]rCG;j8R{%GNjMҗy*(gvys%Kqk,QxSYW|YN\,Dא}|]"%sWy\Jf6(BZ* AW(kX#-*<#x%Vny_4Ni>(aE켚>CI?goх}"n.ڃPrO.RrwzoʨT8MHXSgaY0,v)0AROނ|UlP_+X\+1A[{{*ppRC!#ʭ Rb5-_ZgܩϾۑ+|p5Wg?JѱJy!D!{3:-}Wo #=I UK)m!Xȍ#\/N%©P:13:T1XjtF])SRPsNDUU4b9+΍gN$˰sTM%]3Vȣ۫+"IJ !hM)Ur,͕DkNcVI9ձ؈@c~); ģ }GJmZnz' XP7m]2NeP,?nD0 apg,{OWOGpPlEV-b[( d܉*ӿRpYPDpa/ ,|FAui|tf0:PO'^ P.x=A (1ÁFUBf62MB"+~D,(C4ʆhP{1\яhQ_wPb"?6bYjz[-_mVrE%B/(/?7̅$*e%G:5=puY|B-Yjzy nTn8וzw!E*jN>}OnĹU.Ď}B& k̹@9cdK:WD\ kkd^%ܽ@!'|Pqr{n4\>zvB~AʠhYQ-Wǟ]ҞJ^!]UCœi'XrfPbPl!eVBn!Y;!W_i+(ꇶUh Y7Ԡx㠪6^INVWqZ*^ȣGh wPyb0U( %ܩԙA'?U'na!Xdu}~9Bf!Yt Y`H@s:[+'-~u BzU>T4AJywdSQG4¯\<]Z\.!asb9캬j!'{![rFٴR+?d9GBBM:jNEtoB+~VT,`!,T!Bja~ҫ>~+p *WmGrW!V! 8DjӉjhT1M i+(eT*#HJՅcbyu[l "aP/ѣjsBl,BC,mVKJSTvC:q+&n#zbH=1BhPEb_'\ Y)G'J ?엧+B8Xa[=O-9bSK7 qD,ػ,4ʾQc.WˈB6]&cZ X.o3@|w{u9W-9/bf;e<ؠ"2Hc_9/2 "b9lrVz!fh RЋ w<(6)A xǮG †]˚ aY. S,.|1/.SRD&J?CK 'W BXpMaj.t _(ETQCqEE%";㰠&P:@gi)>#HQ+5ON U}^ydn7SΔ*x!U`# aȆp1"%dcTK!D*70S^X{˖Wsʣp26WQlmˠtݦ ssrn7L1( 8Js=0)k8[ 8lk)_'JyZWocByX~Z)LZV<2N 94 QmI-BG+J{Wifi"YXԖ3ߡ9 kL.}]򨑘Y Jx R9։0h|P){uR#* ?hȳB޾0*T\KhR# t '+)>h#5%fP'l.-vnAFj.Z &EA=ʟh2,E%)##hlVTTE진Y|҈ EIA'mSSӶ8!+^׼I Up у:vE4>K*]MgPde)TYkX~aD.xjCA2zeށX>`h<_2Ȩ+ Ao呋l v˳Cs0|ZrSH$ʉRg!x@;\!59ty.¥\|". %V[ְT#NzpE\@Ucv8 6]$6'dkROyrp E,yD>|o1|Fg* tdWO4-GS*Pf+%RCrFr~[a (j3)m+7I*;_b#PE՛aIE)(7B.ve&y˿+KseZ\mjKrnrN4P,q( e6C z䋕{@hs[%z .-O\Bёvɇ g(BHC#׭j-lg73B  $vUۂ?(h"vc6 ߒFA_ltЀ!w$Bvmo~궭4R.pg%) o,\RԥRB mEP-Umߋo )oZj 0WyҖ -M/ps.@}E ߳* _,/54m9Yeg~)E]#Bvە|k:Rj?ʥ~/E57Ћ{+cR|Bx:e:jVYA$^cVcWo.Bhw-Zo NT5(ɧnQ.+FM} ͠L`R;P g+_,`])9䷏>M:%hB!$4:mM]%~eP`+W(_ʩ5ة*g˱r'ⓒ'}B1Opc?G!Bund5:k[5R| _- "{WULc_zxH}~"G ! L-Y-ByJKe1gT!Tnurй?5B݂ j"X`Xf+A ]3)w_BI^AGy+V+}0;g|gN~k`<lp<JV<%{]bQEQ|.nWsyF#|BHGGMv1=!;j!B!:B!#{@!B!:B!#{@!B!:B!#{@!B!:B!#{@!B!:B!#{@!B!:BH͗]{j BHN)&\2˥>MʪJ./;A:U;P,:W&P=:Cٽ0Gך'%!vI]oB4dR)KhY <~BgV]nGnr[ ٽM/.*6T4V־fYzmZl1km!-Plu"6]n}pG}K}Yo\TlbUUzf;wwWŖ!{.Ӧ|E({fjlP i4-ՙ*epEBۈ{7O3MGx~Cl)֞6)L3)][bϿƦCM7㲿+⠐MQ=k Lץuo.{=j{ڌYݗN.?txqH:^Щfek9kOٰ߷xh`Xr1kI1 o+B"?X"X2JΛ o$ݳeS4h4-bY@nic(mE㳽|&'6V4nw-zV__bm<͕bկY=CMAHj:Y&AHrLۉ/YJ]pFAvUA^ʐ?zӄS DQ&q۬Q?_3ջ%?ySŪ oۉ?GoğCdwgy\Zh4-bBZ!|O,TR=%@O]M9&Êv]bm;5CoZU@)%CJA{'"cRRo(4$ul9rm鸟KpD^Gg<3]BK6o!(ί/v,kqP&kתCBN8Zgx۽h4-bW[3*niB|Md!^Py{PB )Bh[&*o?к]ޗ{H1B.),bZN?wS"˟쥕u\1\FRwWAeKiڟ6VbD% cGf@Y路*!=ʗdUKh s e[キY,E  cTb_VuNw>>Uٟ֚E{BT>\eR$Jz0dF&d3 4^̸v FB!o-WB[OxpY2F[ _;XHYA:PB}MBdhуsM.y (BI4'l)u1ӄTYg{]0f 3rB**OE6ZU#{R5˔2?Fт΄pV<-sгF75>XkUZMV;Yڀ=*]! LŽ芿C%hɿ ||ʕw.#!yү%Ŷ4T"^,AaYeli#41L,#G(hH_l<; b|SN9>4V/ !V&i}7e-5gw#wݮAz=zοo}e[=z7(v1mg7o-3 ***K/!tH 9 ! fី uNMBZ4bӐ~FuH! xF4;(Bfl6޽{??P$Ow5I Y3w廋HۖVNrL6NY^(b<-o _|E?뮛4iȑ#_y(4 ?^} 6u]z3<3n85M6 ̝;733rۯ_?,;v,_Ur !>fݻ7O?4XgϞw"1cV炅!/.3gKM6aߎt<<מ̙n:YaF^MmzbF[ǽmVڪ%Źs,]l%˖-Y+wwiIqU~ϖEU߶~2#C+]k۳ƃ5L:~xM7ݴpۼ1W\qŲeD#L>}q 'D@){ٳ}:}tիL= b/_O@SNE~aW!!f}V$ԩu7Cᆱ, `niiX)޽JzȠA!AȚ(dBHձ ܲe%W3gmJ[6gnu[oޱ3ǖuXhqƬVS{*goiQB.8[۷/T$f!"w^׮]/dΝwR:t^4wW PSCh%^z(xꫯ|{gq DH"]uUk֬K/^ ? ~hR"TJ7fMZZ`+WmԬA {}?9^sGI 3" :=EjEWr=Ӽ NDE)IRQZNSIm$@ըrrj"E¨=3h[ej[8x>!!!k׮}WE Ǐ`UDR;w̺"?Q>uhh~&OW^yz6M8"Ve0jkraNr m[2:?#dھ}; a>1ceRhMue.[/B";&BRY,μt\Z\ZȢ= 4!%j*&\(fRf-\. )::.Y|fcɒ2RfP E즢 _|vTTm\)K/ľ\feeLO)R$'k֬1!ׯ_OdS]G3rPK#GCf ʤa:$AA.CVUm, Az?WfE%e*! 铟X^{YQU*+~+xch% sz`FFbbѣbhGT2bYm۶Qӧ 6Ex*xwAۇJǎ˾Sw6kk.Vj*i<9/F-E8mڴ7)܌U6Mf4BuLk)/:깷W j;gCIcLieũ>ngĕ CB*կ1?k7Ю8*j?ٲiªY)#?~ЎTRfJ>m/>>>"T(R]]][o5lذRL4w}W_(!C"3gϮzzkٳMSI6Dz5W(W'A%Z;^q%WY*հ-DH+rJb7-pp Ǘm(bbcK [,\x YZdܠ5r2UNJD땭gT /;3;%AS_op„ tϷ*:R,fOjo}i(Y?z2 02:AvC>cxr$y_޶m@t}߸q#i5k,]t] 6Pɓ'8pbGrcܸqQV÷zެm)B7m1+WhH4~Ν;IC ㏩Ņ*""駟V,Ugĉ{%۷oڴiԊ n)DɂtX"[i4߀FP)@$B+BS]]]HhآO~;+_T\n%܌;RXx0%!I%erD2 MH)*.2JSG&&߮S444Ѕޣ:{ 1}wAq*P\ȽBDagE\b0قmsSf/ϼsUDxu.L#;)S^xz[bQd_TBPвN Bd4ikH_’_֧>g\MT IWOdVLSY-d\Rӓ?'P0ae,6^g6mK6&6VW/I =VҘCbq_]QQhB$Y@A[JJz R)Ԑ٦NB6uss -:#j:nN,999Q`OiLdm r.4P]QO=}LwERZRE^b 2,<$eƎz d5e&J7oO~ IbIaXxhJSM@ƈ~HRP6]cn-Oi•SMONJba\ye'f+*[F*ݷDH:T+PII)ƨqFƽmE3{|~#B-o5ZEM"\!y[:d8Sz.SAcG+BJM[:&&/Ꚋ zqa!lg'߯F۶b2=A]ovWuuuAaSW%~ྐྵ\,IJJ,q"VY9f7o<ѣ~e!嗖'4Ly+hn5Z̑"/YD(sE"n[{ =EK76(8/’֒$€pO%3exed[ªU*UHD4u$Vm,(*.-C*J#߻oO?uaQ_gDXQ%|_~)6.N-ܹYߒj`I@wkqD23•e^]|Fx3R2Rk*udZil`ƳYѳ3r:t'(7]Ȑ=-tt:(t^*rEs[wWZpݾ؂а`R^}􉕫ָ^zjSZʍr[*,ܦ(('n޲ij7@ikDB,CBT ݊ZYPXDðMl/-mW?1oCYSz)@so3o.^9[U(cb%&w;w<#1KF=Gzk\3[V{晧Ǎ{!$4AV6VGL3NM};**!ck&UM9pȅWoAłk+¶6BtU/\9iɚx3gO}vs=O,g̘ǎCG[֡4rId )%$ŗ jۙgʌP(gSMէJZ+tаŷ\PhθBӻ֬&z+=_/fi]~!=#=|}TMTԝ C_|q<ׅDAgb?s_-l֥ d|/j~Vv@ZjΣO@:g>cr1͎|o0]ʦM_#vNbmlfNEyyLlR%Ikѣ>J܆WF=a:,/5gl@ !Qkp_7t64+* τq_/ш/^ϖ N/zGJ"4.P- W+k7.^:g6=¥s 1e%$$4Kd41ūX8t746VVKs|#-ܥWCTKDh0Suuɋ^>~ʉVv^*,Q+ټ.zEIYqXxXcǠQAJy9$?ĝ6&fm;Ӄ} jZ\QV^QXXXT\L"KM9o\/˦}D~"3+k؂©nⓔJehXHYy1ᡒeА:zh+ƛ#Wed5RNMMFll,_Mi^^^CC\*3~_joݧTWRJe"J$Oڦ iL?U/B"|k nylL$R\W 04VW܉3Be2}EEE]6I\ PYY8%%է4Y1O}<v^$]qs o&5*QEx_5V%*M ^ #c/D5-Z;GTLuwܑ> ެ(88r$ /BZD7nw%)00lb.|mty"2N|blYy\)X6&TDb###*+e ۷_gIa1 ڑo3EGGwTR)3>>E'##о})BVoccP(!.<<4&6($mEDQ5UcKdYÚӏ4/(YwcN xpj:]Xdrr2e"~Ehª*[Kvyp0cS8u`epZ*SK쬨;&Fމ JTTijTyIcwuRIJ땕Թn*2HMMeaU~l D`HĔ=Wfx(,w.+"J4bmTW(ƝK]"@L ̣s%6!%VIM!a^^V !C"BɅ---uuʢ"f"w4#%}pDT'R]JG{f)N121YBpFLZRRqvkIk%/<9'3)ƂS)k~_325qAKV46r?"~GOA>j 魲"(53/6%3&9mdUUURF{x]{FW $HbbbCĪ*V"~GωA!tm455R&Q^y'S߃,JIi܄\o@Eؗh?Y5W'''b~aPPYϙ!M BN D85!"@Spj BN D85!"@Spj BN D85!FP8185!"@Spj BN D85!"@Spj BN D85!"?R6q`z:gGEh<ΠlW*D6ڠV0g}ڵkرcZٱc#:gDfh $+YojnP_5MkײZ $mTg]V׭[yfun߾=hР t#G<|Mh>!W5h t׵jcZvY`J.,*F)HQCj37RO>9vXu.\n;#BNw!nBacEH!^6E7toy[ŤCLN){":@gD@uFa]Gy+u􏍏B@:R ? 05W>Yj N!<+ዐk24 !@j١YL4!"jV"I_׻|yY1)F||hBKCqh:#Եk>|rʏ>hܹ'Nj۾};+DXUUsYfM>}ƍ`;F}R!Cƺu)?00FDDTTTرΘ1cӦM999Y05 O?eMh_fLt߶m=N$'/B TM/.5iOԟovFo&c'={vРA9a„w}wС$_~^c)7xNs 8pܸqT8iҤ'LĉSRRwLL GI io2fքr ӧ)M2eSO=e6fp,B T .7|]%pQVKL6+eRQ;/.+vAF"?*!PFuDH"lAZQ)rMScsHn_ilip./K+q!n.`,YB"<{,Nyyy_!;wβ[cZT_W/%{t,PM0aO%i]>g..Ƨ\p고Uŏ.1yyU5uG"S=߷b&_~eРAB~i۶m+BbԨQd\DHc&yO6!B@AVkѵb J\<%xIYmʡǼ#R"Q5'} me_(_iA\ MNk5{JZrry-yf 7X?&N:uϞ=?_|1f̘.p֬YTmҥﯮnaELy}|8;ӧ JOT-,i}sv9KQ/S9ZfGj֨ouWS,F!X)hlu^"$B2j]? K'G]NRv(IUUUbbbAAmTL( jk6qИ{Mقz{fnTm|B߽Oc-5nHV'l[sIzSg BdՏ-hŘ*ݤFH9/SQ/*N`ÇTVX[$ܰi{!j O(3%ojsӡY7e6Ztm{׊'ˊ } AݍGE gCEz@u/~P``'e2իWǎ;hР۷o֐:$ ɓt:Rye3088pwD&@J7ˌҔt.B|Vm9>Nn˛A`E۹r{M0eO1(\\D.t]E$!.aÆE}١C~n:۴A?So aʖA-߂&)/?{3'+?K)$,>2_$ [UVfpWzu6=#$Tޛ,sGwed/'+qӘ>3%LS.!ќ)hH} > 50g")|iLss_  -(XVB=r]Oi:Y&@D_k;XJo>kSWoq|~NyZOQu>2&> }lS?rP[ ?8,"geS@rt L,\AɂL/~E>l/St!C2KЕjz'_-:"liiq,uixIZ_$ӼDSJ2&> ya.E_ɂ،s. G[-Xhޢ<]Pr*ubAS8(XZ沼l\]Nnb{Aoi˕ yyK2KqM}{L[[ۅ٣T02 4zɂ917c3?i2XR=.) 2 .# ]Qv:0+(]WMr6[ڑ 6 E5bMCGkn)k[k{"Db 2$lN]+!Kʌm1" r᠅I+ӽ(@ @Em*>U\ㅆ-%ćBsƝ( ޵fE(4Y[|T^MڗտvPО)-/7YДH/9ڍ3YÍ?y@)) >h?n,/r$:~DSssU(;;{՜GMtx|bC`M1;tY\Z-R"/9/I7_\>Om.ϼ9`qLb{dX8H"tYZz6 G Š3!)o-WoKn4$W%'S A`_oWO}'vP1.7tY=ᯅgcyQ 2\,MQr֥WT!;j բ⒬߈=iˮfy9w7SoD$dfP)!k:W Bvkڝ2ܙ2(}g?߂3& ,omṽXpEţ+]jl5׋+p9"+83t%jRDhr(߸^١L²J"nRZQeƾ~Oi={hS,fbA.nUf k76555o/f?i!77Jh;//joXR]JU+Ē*>irz}DH465_.u*ۀ{N~GcAƂƛ+*-RXV]FEE]F@@j)UVVrPf`` mg9>&zpM$Bz)l-`"\-1k e;(׊ł$BW?JoTwd2Қ۷oSD"a=EV(ƍnhv#U5TaaJF!XUk{.hv(/4>tYQ>@ryvg.::*,H,/B>L0cOO}t3ݕFUp oռY, ?؛WTF; 3 7j2992Yx@"4:9Ņ;Sݾł1+*eUٌ9%y6S]PPPTYann.{f@ﰿ %e;/emmZMgVM^pE[տXX"t e.lUjj@?!"4D飿-xCj mEn"7-/w5,5dwD9JM NgH!Bw8JDkk\H)y1MKDv^ƶ,8`emVT>Io%gRWx*,c0-=dc@2)Ky1ykaLU5.Vk_ڞ\\ZF5N=NËτpLo hhhފO/VtKHOϱIVM6pK.9KD{0<](tss#C=gk0ګO]"ETTԐ!C^{5PhV}O?t˗/rVJ֭[m۶3gΚ5*e~bb޽R#I N&:u*7nb8߈#h3f9r$m/]U8t__?~[o5x`!qfffYGo?S,ɾIzU٧V_܃>Y~qq?O YNEEٳX!ɒ"EK(,qFZMRʼz}2uS׫|WKܝ)k;yj91N1s"Ȭ=5ܼy3?3##cȐ!cƌQ("$,n۶PTrG̭[q:OսMCvmXW}f)UPNBhsb)J,KONꊈ0gAaHHwS(sVl2{ Cs"TۥO)_{ vz=g$ 6X0n8*>n:?w^x2=<Xxm\p]Ъ7Ym}ǍE8|b֠+V%&O>mxx.X.~Gk4ʧRG"{]kd+!7$3۫3i$jh"ʿ~"N7N(W'A%Z;^q%WY*MS[,CNJ icAuRކMHK[lQgժUTĉLBK/Q~aa"h:KE*՟vX%u\dWHTM(:Pqݷ h|֭[ z뭷lp` O()/d_!BYEJl[:S*8(q<%e)RH[BPw#n33/%qުozOdS9NSL8pg}JJJXM6/\?PhzjJaff&@{MRWO4(]M 9VzQ"T M.k|ky*iӏW1w˜B8pرO؄{.߳)b"ܹs'DpNTZ}5R/laɯLSHe& Z*LzI6=RQ"ԞծTYC㎟II( ytut_BBBUUU2̂e[d>ާ1$Qr-ȹФCItE=l3RcVI-ZPE$b;T DHx^!KJUmeO7J9ኌMЂ,QHA2k-DǨ?ߡP> r1vWMߵwk5L믞ѵ1R*:S @_# 4RYf<|Ps $j^oߘ!"??f5#)^^mzeOϕiυs!Ɖѧ=jq\7cPVS8[x_$uG3E;kAH=2e4vqᯖnںwrWRg χ6?>D>r^o;Y:"IN245pi:CӔ푵zsQ"bH=oæ㭁>Rی"|ߛZc6>|ת U3R:C @ߠh1G/\d]=DoDr.Rcd;2\O-+7tC{*7U!GH ړmq"cكr)e .СgT;?S7_F%߈P5}kxURJN .7"̔ (s3mz}xFH-"ݾ.lHa{"dkܟ,fuMraIҿzv|֨rNg߅rJq[66,@c{% .^rNTK>BThnw̎ ܝ{-@_zҖ+yu>ԛe\= 4~f?\뛻 6 nЂ!lbҕ|٤)g]mc8XpPT#44}a 9f}m~Uf Bw`QJOWxaoI4Мq' ȅwYѡ) 4MV{8;7_"n>oxn,0NZ"BSssU(;;{՜GMtx|bC`M#S"C:T rbߕK!BGaEe~Aᙐ7X%7^ūvْ)yTSS_#4K\Ya_kp→.!Apd,jQQqIVvoDeWjΛ7"2s5VK{ ]/3.X(..a~NNNRR]ԙ}%''̾lNV클KVVe\QV^QXXXT\L"KM9o\/п/{_VHq 9x9@0!!ȸ~zccw?2+(({?wvꚚ=.ۣFSj2XR%'mSN@7e.(Q}EX[[{݄L&Wf@VH$6t B/16_"LKK }vffj Vܾv["hHEtZjjjyvڙQ=lMEP4ӄ>t)BuVnn.YCDCCUHJJ:rZ-3^JJJRRR !Qijjjaa!ɢ)DFPC]EEECDuu5U`{d"lii18(tJb(jGLHHB͹tPEUUms.T6EtDt\t&+oAF_vWų D@EHIDHmʡ24 mdee7`͛7mXv:'QguGQQ킆T*(&aP|ꡥc'Re0$xTaِ UDH+BX!Rhf_&B0ur6N D@["T.,: Li7]:I, PdCt)$iWʔf/NL?JvOβ!]N4[O"Φ:"Y@uKڣN؄.;6DyΝА[q)3O%X!R5:|2Ҁ- }t,w?:&mѱc'^ BjGp'Cn*iۻy.H?tqLNNNAN҉bV\\\={ZJ-p" :57{ ,1nq7ȵIJ&$-!İaШ($ZmNՠA"$g8iVEH,^4/!5xZrVfq'"B5.L ªawzYE򸹚n l])<"-|-4ThYJkPeJJoaD`_OXlB푎r8I~l~68 ;4l"eU!BnL΋-Oɏ6RJ9߂;$$J 5aytIDH*?Ør__j5?KbZVyLA|()O@)6A ֬_"bXڠVy& DBJfw2=r}Ӆʖ^$$$d2{P(,C=S4n!{i6Ķ: Fuu\. Ԝ)"d#f#狐O:SjDE as;!?`:ETƀ2bl1ՄGtWD[bXӚGHuvf#k*yWzx-G$Wu7 q%277'ݸq.\`꛵WTTPTF,Ƞ]SdJ9 $i0zBL s2 ɏ5K=UոfțzENElwtVEh8?&%Eh01&f>NS:Q[Njt&է/*Ә)ix4 ~DTpeYiK;DRQ0gvoAW[*h4;`ZpljXC:٦?$dYj ^e*p@{@O3>'2YV'Y)~/"|8 >atsrrLpA400_J_>%83Ñg6Wt:P^Ž_m"33_ Spj BN D85!"@Spj BN D85!"@A "@Spj BN D85!"@Spj BN D85!"@Spj Bsڵkg>vXe^oB\\ܜ9s.8 6}VW,U6I5uD%[ԭm-TGoݥRi'߹sgڵÃ}ZK59OPv'Y0%%zO{=R, /==_'88xРAχ=-¦fUn~i_]Or[ߠt%mO~SyZڢk&L ]UTTt˗}{nĈ9|pj>t<<== ѣGپ&O'+M9N@zH6\ ;~ )_L0MabDۢkzf+B3v^]DxuW_}6yڵѣG<8<<@zBt!>iɘcĿvcKR &tH.tF6Ir=ו fĉ 5+0vAc_!B ^}ұMKFSjYq^Y<)h]}uh&uEDDPΝ;g͚5cƌM6XmVUUq]mذ۷Ϝ9*^n H4dȐÇ!uNc`YƬs)* =<<?裠 gV;i ̂ƴxf0w)?MVkq6!ݻz1cL:uȑ;֪ ;o /PW#Fƍ*<e'xCWB‚n r{?k7< #mU+W2MfټC3)b/<~z~ݻ}%k׳gvx,f"L7g=r+ ف,Z@!"55(Om_ђ/&zM/]JJJR*MMM---:Nj4ڼ#g|B#tևέQTU~7|SkfagS&j3kHHN`` e.[}-;omm5*:L.[^awy 444ЅN("!;|/~o'90,<頙!RK/daE(J)sر+I_G<3 S`g6)[p[߹gRhل.I?={ĉH~Lq!ɏ6zf1\p5%%ϟ?|fYDgѣGD";9,e(AMcIPlVW\UJ5zӄ"'/Ƿ`1,x`ǎ?tʢ+BZUB3նmۨ… j570>c 3y1)߬s&K!!–O@;BVkѵb J\<%xIYmʡǼ#RО" ?.y>>Ri]oܸqʕ.ڳgΐ>{VPq]7o'߿o߾iӦQNll,WNȜ9s(sԩjv&l'rAƍٳǬ/QFmذaΝ_}Ր!C_).q y& ҥiA@WO4(S)ԂZ9bDHTtq|~'';PְZ~~Ǐ>^4HO>Il%BRH{Efdf"$y{{_`G5FD.$GR5-Wӓ,Eh9윺9r$0i$___f+V80 KէI[C*uʴ>ōY9KQ/S9ZfGjM----ذtLO#9)=50g^ݧ 3eggٮ^V+ꌌ̞|: g]Tm|B߽Oc-5nHV(9\hҡ$zBWE(_JVVK wGMnݺEkSWoq|~N:{._YyzQ5mL;6 ^>AɧBdiܥA+OP!+[9{cєTGW݋-gPkWv £G56=-W6=-}7˸zJ/h4}2Z6嫞?_x~hjj2Y__"<}TUU'5JWgwVvB㫷bBQXhM:..74%ϛ*Ef5.;g[0!TZ}5B [|Kϥ;Q@.4@dQo狳s%R_qv^/.)̃-R`fDgNp"44R1 \U-^wQ]ۏǝ?`~V4sm[L2jۮjj Ȧ!%AB @ I$d,;J*>>*::UY %u^. i^]9XlQ4z,0qmNMпYYYYgS>\ۄ~3#ofcm'8zᛏ))-+]8kM<"S[g:#`ljn`f2>)u+C;WӾ!81555oW^9EWmL͔| FڑGTٕ>zYր9{yaK3Zmj/E34;} I@|Gm{N>}R\xu?nI֭[' N6mS?9.W(dsgyD!ĉ5uk.%ZyczrOa~(qm8iii7՜5== ciݛ?{ ّRw`MmEUuyEZ"~Qh>7?qʄ%wP)(\t^zxoωƤ{9KC334eirtH¼8+V(ڄF.##C W\YYY-Co/E?W>|6gph;1*3NyU]Tƭ' Rx)Fw.u6l9#ʢUViIRR666z{ضm/YĿ[ ACp0a 6$ik-1qivsZQӦU97V=;_?7̿vhiK.u\Р jazz[ߎ;\;`IرcldֿwߎO2*~W%N]ZZTmeZl27#*NKKd拟$Z n坥WS3O+tEE,f^幷ܻz#̬9OL:-,eV\1!y; _;bwmW'Qtt|BPlCxd㦽:~}n"&d&~W-3m7 [ܨSfkV__K\֭[tAEӉz#IM /4mԨGMwWwqCyO!ξ]v=o5`Ԃ __PÄ FH:ѣG+++y}ӧO:{⋙3gΝ;7)))--mϞ=j6ٓ_r!/$\=*Ǐ;vL5A,(uAcֺ޴i{Ӊz ,)l7˸JM1yyy^2 !:{^ꂾmA_z۷WUU@!!4B0L#!4B0L#!4B0L#!4B0L#!4B0LØL#!4B0L#!4B0L#!4B0L#!4B0L#!4B0P[[[Wݪ֮ C+--0a3[PΝ[sWPYf ,tڛ7 @TP&-̞7+s̬|33c響 'ԛ͚UEN»-w&L6V^6- Za{ *z"༙QHi9v6vƏ;6t՘1c!4_ԕ̠ay_~z!㏵}WWYݖ6^kEEE#G|Gz!sժU c= XpmRRҠA ~rJm;p|0991hUt] z"KD3eڤODqWW[[a3B]Q&ʆ1bΛ7O˵faD._kHPu=>>>Airн%\n7y裏ڿW^ym?sm3|oѽޫ(~3]8qba'B̌XpmwFqJOLLlnn ߯ 72+hlͨ/jViF755}YUnaTYӧ_햤i0J-˻6`nIAA{frKBݗZnTcؼyM7\¦caǢKIIɳ>&=]wݫ:gΜz6.wuWG"}7=?'u}Сʾ}nA󆡛a|WA;v6UGv\# /wtjk6s. O嗕E aw|ER˵6n'&?f//=˒=BM®}4fPu?n$(Tn?Lmj >YW6uM=u=###ƒr;6>u3ƿ!뮻8J{ uTRۼ(!/;=p:dFT)/^\r 2%F%̌P} Ü(SL aw>}z߾}yoyЌ[nj*foO:5#r9s?ZM[g͚{w'ahiՕme.U__sYܩYCI[JtӖm1r4CN_^{~Ɯ/@_z饠3w KOOr{'tpԨQ@^twzaL#t%''sv65\rcRRׄHZ~ܼy; vssB=RNMu8ҸK&V_Wwu-2FsDm|2f-f760!T-~ioÇO6MxwГe!7|S ov ?ٿO?_Ncذan a7#EK~X un/fcQAwxԼ9Yȑ#_|ػ3gN'BaYn#>>DmfsoRzM7yC;L}kLG麳Z䪫0`@QQ?SO=6ӧϋ/XRR +onSvBפIcЭN 'ڳjZה,+9.IN$_Q{Ys ?\W^꡶kQ*! 4==}֭1Gn۶m CٲewN;vhWUU]~Y}%1Ea`_Cr%;/{;_'uF.rrXZڬ=Gԙ c[0;[]`C87.S{ږ/ppo^xtM5)쿴6g-Ypy;O#J&pq^]Q߾}uO>xIޤPOwllooB+Ie% {E*50<`뢁K[Aw<4띵;hB8Vvh_fB8(RN;_ OIu&sV!Qt%/\s aNv%!֎!CEמSk!,]UB81..S|!oUSK !\;:RÜ)G]wNR[#{hM(E໓ež,T-s|\W^2 >k4MR%$яO[Q5v= E 'tI(>6wGQri|eݞ^-[ZSWd?PB؝[B-">q'7\W3o^2C|Q!LXeAAmw*tRgjaWowN_TXQYthG!ܼ´B7kk8ўYݺ75zYր9{yaK3Zmjpף!ЏO }co9F畠N3¢͛7?i~nnmۢ2{"pO݉'~ti׮]?(^@mk/-,,,*.]t]KǏ SBCgḱ~mꠗ0+fˎ;/^|$\2*C}%''}EcǎRjjڵkQF[[Rw`MmEUuyEZkmУ!1pݻL͛/}z)V!V?bNNC7+xv'@= 1RhQgdnRrС] bc:zRRҲe˼zصOCmܸ111qӦMnzÇ-MJJvNhG/rMmmm+4Zw :eeeG5 /y׵Co%KxUEPK6%D?[N{CONN5˳HP{sOg趡kݣӀ5t[l Xm9ג_|E‘"o0=3蠩å_`BBwWlT&BMVjvmjۧ7EB֭[Kʞ~tTeߵ7݅QtwVuii~TVOQ'-))q?߿_wy7 Qwf>-/jawSݗhH^pxk]Zﶡߩ]WߺOTd+Bfw;%Q'GqV\\~qV5%'St,v/fF^PZ7 ]Ҹ^)4EEEzj :XN:Vn?UUUC|] MWSՎaC&?S=o{MԴ6jOw=k/K4C(okA/%DQGС2e@{P1 /5-6nvڡoy!HWѬK ˛te׮]] XtR2l=*vuu+EH`C@{8ydW]#nl*jr:! BMXk~'B6Eu/պ9NO}Y !лD93;rrr7ѡSp30 Sj:*Z]uI //.?yyyeee5Çs#ԁXq}B_!׿fEډ7 mVU w‹pe8B87lؐu:wJBypB~KBfzABpG\c^!лD?򣃣U>:tHWUU =..{-w:|!]7:-6\!q_M:HkE@TЌM6ahTe*BƩ]~ F!T5NH4 ENGԠ+rzfP͌`ò tQl簷->C8M\瘚g_Q=T3T|G_!mQ=`kmrCm1 ؂o#v^ѤwwZŵk*ۇ"|'VkJU)XUN&:Qft3cvNt3#@r>wv%:i(0`-* u**k :51 oߛ*{e^?1jcW2*'EթVUrgQk5qTsqDRSlw9x9%NU/5tkj;@ּ?rˌpi[]hKkgQ;tq3uĦ q #70n4w"}&/|4f*}w6ۢ7wnؑE~Rl;|}93zj8g0='{z3#پ#MB$߈&c9r$4 5'Pǁ"<9>{kX_xq_gDFcM|7+ :sBcb{ MHw/'[x`x4k\h+jW+ J^YxeboEZxUj޹f#} 6]|;cPK&PK H=-res/drawable/ic_launcher.pngPNG  IHDRw=LIDATHǥyPuƟ{².˲ 8ႈ 628yr OCM5V^ʡbY"0,,{DPXϟ>ߋ4zљp a22x@-q &6'xnب4Ռs-<!a^zD\W6=YMQ2ɗw|՟-f̶vJA؜s1Ym®n>/]ҹr8୔@(r1.}j:Oi> DowJ'CRRVJ eMPy|{|7sRNQy(KNnቹM{p՝Ғ6Q:h++-LxȄsՆIT~M≹\{V{TTX@vL (Ćyq]zAnBFZmHocs  Çd6ihh CCfQ!j2OPSեlUY G?15t"GUˢy*(M6\$""DJiujdo5GcF^G"@ Vx\|T$SgOt ::erOK\]Ϟb¶hӫnZ>5^7 S~6B3Щb#RجJ[ =64%1N ('5+٥bvTD%W< `y*VnJK6͵[h8l3PA$M;QZ1[,U3|.nlIuG2 3 eb2V'0`ę&Uڂg ,.!蒎Q1 F|UJvuӆaL06 cLzN׎zXYٹLGBr8#0LmMOS7onDVv͞} DLژ.C{e 󳵴&cY,ZKSiZ=I`҇6%]Nm},ŅU5SN܈mݷ<65}E޷'0CקԄf.̙3;EnK=_d*/r.Ѵ#>)?/Ԟ H\o7aU%(|${hjǜIL~ cS/LҘPPX"1sgsLuP!!"@&849^1|'3}ȕs_-]$IVM1,,D-aEDA̤rIENDB`PKHS Lres/layout/activity_main.xmluN@=[$BHA"5%$ 'Ql*x$ G;es;wofw} ƘMCt- G«& 99w%fmF)B[nTχUПg!F$~"u.m*~RUx:R}o{EO١R3~`)6d?Tޟ#]{ȣ>64u6Z?p̑?gqդ~,ᛙPKS LPK H3".resources.arsc 0<xres/drawable/ic_launcher.pngres/layout/activity_main.xmlOBB Main/Patch CurrentSettings Hello world! obb.mainpatch.current l, 0attrdrawablelayoutstring08Ln ic_launcher activity_mainapp_nameaction_settings hello_worldH\L4H\L4HT4 PKHqbDŶ( classes.dex{luϝ%KpWԾ(qH%Zʲɔe2,բdj"#rjvz԰dŎqqmXp.y4IpQ#uZH1&6Z)NF.GD7s{̲䜍l~0y;zjɶzpvp Q5ED/oh+mD߁C#jYEd4Qp\OW߁W]0:h 8 >  9`;5USx%{ y0.-"Z> e2G`߀ p̀Sl#`;(<.+i%p || ° &ʃ@=dl`#6!0Ip+ >0 v;.S$|WJz[4溮4GL*d~OW),)\* υ)({JUu1ީMj~Wz7IC!֐3 鉐 ЧBeG> (S&5f;F|$ui.R򂈥MԪbiIӽ*Pi%kc!Wѣb] :)ִ2?DŽV麒ωr Ѣ&0 Mtz5RfhF82dJB1! JZbkD$;(dN)Y2MTsJ>E<ֳDŽq9aTN?-)o ;]g)ᴲ_12XE|KU;< A_1,1#Bv*N_qGU!8Sd^/ωEۇ BY_%+AݭE RA!`0#ߎWN{B`-32|FDLvKٿ"C_P7ȯ  r̿ +ȿOy2yPRCւLQP`gnD~w.Ψqcҷ 3h~ /1cm9};-;m]젟|ЇVmĖ խX#A7Cyy{(ڊۍ$)@: _E+VX"||;VjdEآ-m>cBy9f/zqSFLU~iu6:+j} ~%exד>0v`;À&.VU<]XcԆfzǒ17m2:mkv^V2hgY]xo>;DGƣq~uʞ)/ϮiP(ҴGO0/;Wg<=iy {ٮӇwYa<)V,ջsRxLKuyVkŜuv7L+MH߿"]ZH?"7H_M{ĺqFmVrH^%7)9`={X20.`ꛉMXcA}cloVǝDHl'Ew[EڮQ2n4{'-'%gy~͚ X%7}'\o^&cG ̂[v,l-D8?J!۽u.:7QMVpbY3d>(N`W2V`I6Cv_6dUj;P9rEMED]Ů-Awn|B۵ZK&mݴL>kDꛔDxPg8%OR{&CD8677b^bGI;(?SBG i(}sq{nΩVP*%{ǫNUjx pXYjA{ܳBs`n]r(— 2)PEJvͦdɩU"OzcܩǑJ-"P \JW!}֙0[U)oj{Є&nlީHqe`רHT;mwji~Ev(lV v8egUj[pe?(ru͝;^Qkr˖-Ԏjm:8UJ͸T;1VhT?ګ5ۛsxqDbA9 ^yRk>"Ÿ#R 4vOsYY1FTU*|WJ|Pz=p-dXt!:ƙEvvl*^NXnjNi3{FמeΝuگ9}Ξc?.F^A6bEuڦ=>8OÌ8^DE:Ŏ:NxC>快\~<&kicCu!u?2-q#n}Ngt%Etmuu7ehnkaɡύjX~fF% 'b;G;>V'ti㱗:ZC-l-",W#;fHf[f(chmIJVhllaPˡ}M큦`S"kF~eqv? zQT<%|>r_<6DU~JcWE"e^y]|>.ɤaOk֫y-f4]rhlVf?*0?F.d>5c1o៥-9H'jve qN;[7D=;n1K~w==joc%3w Sd*/~go<ÒCU}.;PKqbDŶ(PKH +META-INF/MANIFEST.MFm]o0s[sdLqjļ@mAl&NUR1VnFORД_ʯ`ݹHȽi2ڵnſ9KMc6}_CBP buz맇vknIC$ J.J 8${0ku\fjQS(EL a=# T{zAKL R gp-/Mp%S{opRWseZ 7G@lPK +PKH|e8META-INF/CERT.SFmn@= E-(I\Ա ÈAf@ԧ1m_YX]a.H,EZr PlDϲz$ƢP}:X[A1|F,j4>}%Y[ʯi4y-e7 ) #%7:E3ⰂamX2\;zx}1v4{prOv; tVuspcK*ŭPK|e8PKH3dxMETA-INF/CERT.RSAU;NbR%Z̗(UZ -.*-R;S E)c_2]6`RZVRƌZR2u{?0?yyssPqAdOP$PBC]i@  PC@%4x1H4@@mP𗔫 J 8熑R eD ȃr{e$>? !.D`$@Q10)Y+|py@X`xDȕS!0*ɉbNzXu=`@?? P밠pCB B*&ˌbΚgj 9p[vnl wbR)FlvlClI;@7C(l)Z^w߇A+6XX[ZU ɕV%-S =^)TUA!{8!9EPEv(CwJUԺ6FUC%%ex"}۠[ws$Jv^x )JjK8 *:MG2ֲ]p>4z ow'd{vs|Dьc'1B׏{5N'A;Wm5jṙLl@lӂN0;|Z=o@"fni.d2$!Jƾ:eo6򲙚\]. &:9l'cFhb>C;6 ; ی<8sGPܱWcZ4"fHı> PyAHM $k'pΖS] lsղUcb;vaAoE[:K̦֒]s>Z쾇/[|t|fbWQ4L] n']@8r5qVx7T} fu1^=isxq u=B՚&qP ͊7HXx'秙M3C9®1QU7"S%|ءNoij\/]lHi7u4G6> }V _Y˘o^l:0<dl+2tXVw=οX[Y@1&pi'L'T&_$_‰;-FMɕ b$U_&>[.F~'Bze漴꒐('_lbffalQʺա-MKo$ވ=ʷvbZ͉!X1H0cFu-k}"aGc?e_d8t? VSgj3d.rA(5ViUpETa8[ksߎ-]Jbzm'Qze/Eɹ^c5 -va#v/*Dd >g[ZgT{z-( fAw#bu֤YϻƟ[?!,nw%Zs̚--Q#[x{-џ U_Ug|vnoH"ŋDb %6n<J|}KgmT2r8Il4t=}ZJ 5_Y;3ny[:q-Vfٷdfd:S@PK3dxPKH&AndroidManifest.xmlPK H=-res/drawable/ic_launcher.pngPKHS L res/layout/activity_main.xmlPK H3".) resources.arscPKHqbDŶ( @classes.dexPKH +/ META-INF/MANIFEST.MFPKH|e8!META-INF/CERT.SFPKH3dx"META-INF/CERT.RSAPK *././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/obb.mainpatch.current_1619_another-release-key.apk0000644000175000017500000002445514717152071026334 0ustar00hanshansPKcJ&AndroidManifest.xmlMo[UڎcH4͇6Nĉ? i *j"JƁMu VKXw?5B,sGz}H4 ENGԠ+rzfP͌`ò tQl簷->C8M\瘚g_Q=T3T|G_!mQ=`kmrCm1 ؂o#v^ѤwwZŵk*ۇ"|'VkJU)XUN&:Qft3cvNt3#@r>wv%:i(0`-* u**k :51 oߛ*{e^?1jcW2*'EթVUrgQk5qTsqDRSlw9x9%NU/5tkj;@ּ?rˌpi[]hKkgQ;tq3uĦ q #70n4w"}&/|4f*}w6ۢ7wnؑE~Rl;|}93zj8g0='{z3#پ#MB$߈&c9r$4 5'Pǁ"<9>{kX_xq_gDFcM|7+ :sBcb{ MHw/'[x`x4k\h+jW+ J^YxeboEZxUj޹f#} 6]|;cPK&PK !=~res/drawable/ic_launcher.pngPNG  IHDRשPLTE)!.H`D=768;er~D?:E8*  2GZ'  ڮ,%!)68.# JKKA@?#  2' 3DT ...  .; !&1 ///*6CC5'  ]1121F;2)667omk ~c omj  H;.  MNO544 ,,-111 &'&&111*!''&223&(&&%000!"&%$ !!# [|u\# RST776#G9,  -:"%*   1@IDA=DJCCCUUV{xu~754,,-{yw}{yZ[\srq[]^zwujiha``79:542\`cKMO988]_a϶^_a׶?>>hkn@ABvut788#"!$tRNSL  SZV6("Vj.ڨTr5T"\r9EhqnnJpDACAD?J?J?QG4V,vRN.=wIDAT(c`@F&f $ّ98/\XXDt8!!9SJZF.!'?k"pEbɥ@Ĥ+WQ$%%38$q-3+dyNn^~MĭBs6LViԃ`P^"qY.P:T =nlb@`hnyYkD{GgWwCo_k$ SBӦ30"pU(IENDB`PKcJS Lres/layout/activity_main.xmluN@=[$BHA"5%$ 'Ql*x$ G;es;wofw} ƘMCt- G«& 99w%fmF)B[nTχUПg!F$~"u.m*~RUx:R}o{EO١R3~`)6d?Tޟ#]{ȣ>64u6Z?p̑?gqդ~,ᛙPKS LPK ! resources.arsc 0<xres/drawable/ic_launcher.pngres/layout/activity_main.xmlurzipSettings Hello world! obb.mainpatch.current l, 0attrdrawablelayoutstring08Ln ic_launcher activity_mainapp_nameaction_settings hello_worldL`P8L`P8LX8 PKcJt$ classes.dexluޑ##u;J\RDI$eG6Y"E9(K)١Kޒ\{ڻ(հdՎH qep:.NAiQ m@h&H@Q ;? >޼ćo~Vlqپ^|{q=}JDrlgԿ.Hڇ@D'2d7!oPj$:i3>7m{.0ڈ@3h` fiq,*76`48RD.pS?F  ^ohfAP_/ w~&H4{A0Nsx<\/;^t^0n{$8 ΀Ki%5*>x wl#`?L!x|| ||~\ tm`c`c2,>_/Bn'0l -@@7@%}` ~lT$p n]p'`7)p~f+|WJ z[4溮GL2d~/ەo~*\* τ){RPu1ަMj[~U B3}!=#6?kTW`ҧa0:mScN`cס>C|dˇ7932nRl؁HөMO2ozoqsh=#Z4[[Vqyn:|jca܊8^]Qˤof ԃr_bjv>[vj@9 Z~n/Z [mk7Td qr d#h+n2ZH"}'҉hi-YIcs u31|Na4R&ke /*lImm [<07k7}QЃWoØR bdNdm<%7b^qmDn Kg3ls0ɻ0fFYy&)V{0^h{@ f<+sޭPiO'ͤݬeL?Fن%Jc\b\Ҳv¹E{ce}k LVX2FMFͬj;lT>V EgucSN{*o{{ o1].І<'P=7?,ͪA{ϮT,{?[\o/T^)O:s|58m[?V7JNзcRAHnS*ip˻>|>?Na+U+ViKܑkU+z~(N__7yhbe)q]gnmo!?E^mCCM'CC|#zwɹI {lbror/!1DEDW]r[v.qh˲y!+_GW ^߁ʑ+qʟ/!Jven1?W sC'_:gW*s7/u2E_庫oRbCm<1GԧMpjojż,Ŏv 1~ǦʏҎQ B:c-:ܜS.&/ ej凮(;~V='…Bme ^r( Ew١_gdSΡFy'sbMnDT+㊠?sG*5ԖC1x6p2\93W`Ί[)oj{Є&nlHre`_]K[mwji~Ef(mV[A?p&2Դ3~PR;whWExpy7ueM.cM8mY94OR/cOl%t]{a gA=v ]u/5/,kݮ)C3tK44xnP>gfT2-~42:8Hy>M[`[ٺV#aG?З֠k0ff}ZY]tgZOoM Xg(Y_ʠ}u큺`],E:tnw8N1~^/0>37^ GRL*y/5LH]̋"/w E~_uDGҩGg2U땬y# 4]2h 9j(os:{ye=+5 52cXϿI2 Ǒ~G6ۈ uZ!֪Рտouo[YQK~-)Io%sUy~aoêQ6eoPKt$PKcJ%!META-INF/MANIFEST.MFmn@= &]M n0P13ͧۓ/@ `.Te1H6=О,rFgUQR<2MTeac݂'Cw鿘 j]kp,*I$9>BT~\ٽ3" 8B.P(&pےr6t]ŝtm 9pHA>F5 bJ$%5ּ$J@ۢM|SKs|-NK/nWPK%!PKcJjF9META-INF/CERT.SFmn@= -TX5P6fu?gO_cڴnnrs䐂X1e$K A<8& qR,ND^wqK^܈bP`$Zьg%H!|~DN.C@X>xe-<uM+b,A#R`O=r!"S8v2=ƀ"Vs+*Xmglo_& ~{PKjF9PKcJ΅>SjMETA-INF/CERT.RSA3hbMcjhδ5ܠ5ѐۀUIqAsAsASf&F&& xjZJ&0 39Ep8NQ 0[~SbL-,\Z\ % @y%E E9ũr⼆FFfF&Q&&PQ 9xY\LM [o3пJ!fhβ v]ߺʔ fN9ݒ=tuuIM:b'sͬm&@9kuCfE-N1gwJс[Ѧ3_V|nu/8aOeqqC޻ì6('EɵVnmk5{Ӯ}h>rqdֺdzs^?mu I]tpowdZlj O='ٵP~C+bKho2v;1.~jVG&fFŊcc{=xޛK YSu>ehiv>J;'c{.߱n|*_znqw}"Ô8uZ{W?{mkq_ߝrq*|j,/̰_?Yo]0}{Kk~Z]}rM i>0 LHjbgibdضrSjPKcJ&AndroidManifest.xmlPK !=~res/drawable/ic_launcher.pngPKcJS Le res/layout/activity_main.xmlPK !  resources.arscPKcJt$ classes.dexPKcJ%!META-INF/MANIFEST.MFPKcJjF9!META-INF/CERT.SFPKcJ΅>Sjx"META-INF/CERT.RSAPK  '././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898792.0 fdroidserver-2.4.0/tests/repo/org.maxsdkversion_4.apk0000644000175000017500000003074014770503150021437 0ustar00hanshansPK QZm[[res/drawable-mdpi-v4/mirror.png5PNG  IHDR00ri["IDATHc<@`b0aTèQ F5jQ+,`IENDB`PKQZAndroidManifest.xmlUKOSAZ|AAT|&;45Fc ڈXo/X+c\ . .]W_0wΝK4|9ߜΙ3soHE`E8F쌇):xO|'~?yD|%~pX!/; xN%>߈t7'=HX2=="M8d,d%,_Qmq,^䨪#PNZeLv=p>N`%s3ЈuujWj;ɬhFzzT:5}MgMӚ*klZH(#OLꠕvv E̪׈Q:\MUԛn[9,4.z]ٍTbM(ֻWĂxsT4oT^{s{HX +~e.oo)kTbd5yuxU2OQR"E+"y])K79"[~|GӼ|e8[R!&7M"QVvE%YȾwQ|<>nLUwxq:W$3M*@k缬S <3iz1c4Np\#q# 3*)-o#^Vw!c{K󃙰Q?9gC=or6܀o8]+\d{Go7rI\\mwٟ6qEׅzqj7l躰. nR~Mju:fx{*N XX$Q庝S{iV6cq]~o}Vo]hCwN!ߍ "uNuur!'FT+3/︉7PK3% PK QZM&resources.arsc5 X$"res/drawable-mdpi-v4/mirror.png Mirror Mirror org.maxsdkversion dD(attrdrawablestring8$ mirrorapp_name@ThX@@ThX@PKQZ classes.dexkl]{f׋ X'޵m基۩Џٿ^o )͏l&~5h} eXZ%AV4W # AO}1,x\.HNp_?@8JvC4x \`:t\?.Pݠ `c`i2 x| |\5p>P( `vP=@ @c#Q .p)x|mp `Bff.zTMKN,Ҡz dJV269|T8ȶ/*ߞ怽%`H:uJ=qJP#RQ}}s@ }sɀ^?f:6>*}LJj\iIzϩJ|^UCj|ԩϥH*E.tϙ`e=7N;>Eb,߁8{o&Yg,YR:9> { R$8@+Svv9oj}%ߞ.KUǷ?tMfm.yC54N%kEg]@ YM|t|9cfd:jP| 桹여`O ^pU|ϬS  9:}޹tEÜXnV>H RsS¼X6+s8UwJg;Sý?πnH X,әϗTT|dEeօmַ+y6m+VݩO̖NY~޷K&uxWXi;K vex]9Vxnc% d#v`dPF'ud`3)4RDR%mGhJSrj/8e S>*R, P]Ҧ,x,n,J!yxđIax]EmHjU׷G])N5#"Ӗ=5bSfGgDu 7$ TB šE[:Kھ9Ӯ곰0ճVڗX{p.wTB՚P8dîx֙)%'DduezQ6i=ZOSMۭm}.k csA=nkYV# j;o%*J5QhCMVFI5kMIZWݑ[o_S7ǔh1̀UPg8NO+j;q{Hʤ8Ws =IΚ 9 ZXjc0 'FJh9ny(8Qh=/;τh' iq :Q/ vcpI6HURM@FԒ0bŔ !Db'>HE%@W+q O7ЛkIu=Fy?o]^ ^B/R+J v\}yZ i ]Mi^!~^{Y|F:|noF?7o$t22IŪr/c hfz0Ruو̣<$Otm8WWU̔qc(, S씿tuX6с{W$GƯm+9%ݣ%{'r+ Ťkf{2|╀o=$ֿbmvLT8*jەrc!(;RO:XHv-_r=]8Zϭ1 鵷v`zHUG= ښy]IltCM+]PƂ[Pg)I-"x1-2~rL;yhZ^& &QPF WFr t¢Sj/ę^jp gڡ];ׄftrFqә}O%pͽ#ʇxņyy~d)ɏ.*0bg;[]Bn ]Ġ졕62<g|P̽ї]sY'㋽Ԕ;fvҼ⺘iRg-)='4f61R 0SRBM,M د{"G3( uŋ3s,u#:TM}"ZqґFKɮzY=wjtwLKŋL_=}ִE ɝa*_;jʥ }Yhw}go*ZWiJ}IQOio=W8~nszFPKQZj8META-INF/MANIFEST.MF]n0{ށ$8b&]m ig~fYۓs bS31 HqB $3idk41oc=٣WOi0aweQі^1pfw[TE#I*R\_=Iߔ_adDj^=tV^i3$ qzv8,( ~BoiѶŞmi00Р ʹj0  *H  0!10U F-Droid1 0 Usova0  250217152221Z20520705152221Z0!10U F-Droid1 0 Usova0"0  *H 0 /#$#yY -M+ cصZ.MQ0 DDG˺?/mm?:\o|(Io6Uv\B bKLƯѦ؉_z)Bv؀YeIn +lH%jy5Hc2cjʞD&C.4xWZ~=cҼ"8c;P! lz_(P9<ȲGx'xW~TڐShLa!00UĬ kzw0  *H   u+>DÐ奝68I @ʠl8ym]0Y^jRreAIA`|[g|^5Ҁ8ѿq fº|WqkBAI'!̇_guVbG ^ʗ#'<A9VC cp2.O~z Iqֲ&CH*oʶ xCNM@rS ,eH?:dk'i)5bWd9A~(.   @rɘX-`!l}~>S=@y.{Qο,ڙ;tF-C]+ݣkL=S`I]'ڻ0- A#$5lO6䅤K+)M5H1WU+oO;czr?%wm`ikQ$lj!ﷅ uk[qP>^IDMm?M?zL{XF673R*JF[w&0"0  *H 0 /#$#yY -M+ cصZ.MQ0 DDG˺?/mm?:\o|(Io6Uv\B bKLƯѦ؉_z)Bv؀YeIn +lH%jy5Hc2cjʞD&C.4xWZ~=cҼ"8c;P! lz_(P9<ȲGx'xW~TڐShLahSzv0,( ~BoiѶŞmi00Р ʹj0  *H  0!10U F-Droid1 0 Usova0  250217152221Z20520705152221Z0!10U F-Droid1 0 Usova0"0  *H 0 /#$#yY -M+ cصZ.MQ0 DDG˺?/mm?:\o|(Io6Uv\B bKLƯѦ؉_z)Bv؀YeIn +lH%jy5Hc2cjʞD&C.4xWZ~=cҼ"8c;P! lz_(P9<ȲGx'xW~TڐShLa!00UĬ kzw0  *H   u+>DÐ奝68I @ʠl8ym]0Y^jRreAIA`|[g|^5Ҁ8ѿq fº|WqkBAI'!̇_guVbG ^ʗ#'<A9VC cp2.O~z Iqֲ&CH*oʶ xCNM@rS ,eH?:dk'i)5bWd9A~(. k?YOHvΦH}Ӹu|p! Ќ2.Hӱ'XBgOjLAh.o|B]z#˙mÛtLݒO~6 z^dlVt emL#LWAVIqf{SpL٭Rk;HP*~Y‰.'8{ҽܩ!G51z'ӥ%ldja{H!&0"0  *H 0 /#$#yY -M+ cصZ.MQ0 DDG˺?/mm?:\o|(Io6Uv\B bKLƯѦ؉_z)Bv؀YeIn +lH%jy5Hc2cjʞD&C.4xWZ~=cҼ"8c;P! lz_(P9<ȲGx'xW~TڐShLawerBAPK Sig Block 42PK QZm[[res/drawable-mdpi-v4/mirror.pngPKQZ3% AndroidManifest.xmlPK QZM&resources.arscPKQZ( @ classes.dexPKQZ6u -META-INF/662483DA.SFPKQZxPy}META-INF/662483DA.RSAPKQZj8META-INF/MANIFEST.MFPK0././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2121863 fdroidserver-2.4.0/tests/repo/org.videolan.vlc/0000755000175000017500000000000014770510164020205 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3081872 fdroidserver-2.4.0/tests/repo/org.videolan.vlc/en-US/0000755000175000017500000000000014770510164021134 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/org.videolan.vlc/en-US/icon.png0000644000175000017500000004042414717152071022576 0ustar00hanshansPNG  IHDRxsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATxw\W}3۴*jud5r,wlY.m@IH&!& B0- `c .ؒzu63X^I[fv~hW|vwf{>;k@] @"Ig`ou"IT0)I-Ky@$)#$RNkIvBT$E%}E[]2$Rwͮ 0d%3*Qp2GstS%uNFUo f"M-VehvE8OJ2 RTi)>ib#ɻ.@?Ta]/woEK$CZ}o /_HHN4`s! o`&($]iBu*i,qL%3F{Z@m@|?L_gGC w`Z@@]ejDz}'c}Kc 3@<@V;3[&)7"_Z C\+VI dQW'Aj =gH6T6I^U=e^>G\*O^ih>Z'FsNp뵒׽JľsJ|Z $m\pR0%u'j<^ wޮFj =I(6p2Bo{ _I8Ws~8p㕒fշDȳG n~+4?Ro>z1$"Q+){_}Z&_PtkTC;+ɖ]xk@è%`E!u JL1R@ǣ DD\8P0*`RqV# *3NuE_z I$>M"-Ic7(5 Jߟ1"BS-ٿ1ר`3ܗԽNTO10$$ulKGt bEiFµLҴVhwXo."[^9WeI x(7`"{B5LNjL=r??fK\2ISZy"@nu]V <PF1?1 5zj G`*UFc  ]r}ZQ_~Fc  x,p"@@v#AJt_R;c +#_v$@@J`S+wNNB a #c  nKI9@b +%ɖ%n0@G?z:%$/0DTa_Jb` ԉ')I'OR;c.`JW϶mT"&Jvd;0Tz!kD*J%+I-{޵l}`/2A3;sH:m ձv+?aѿ[>U EFT*}^һs}Io![9eEJcCJŝ}NYh_j,ǶJ/2F`J'i^ѿu{] &%'Z/ta )\dGO2gR@px?6uqh uH~u/5nʥqF_0FafϪZbeink8yexPa=RVݵhshi1ktp89- oΨc%@@ji#1kn07&kWXґnQ/ n_yvYH'2]㰷k?h֑m em=ұI>6ʷݰտCs3焰6I#5Ԁ[Q*Zg`]0״ޟ{fϲS g0j@jhZ^fCc:[KWֿ$omN䈝V+i ,^5@ @ BkתPmPy>CRm7(wJWd.5,z}{ݬg` ԀT)H=m.֫t}(gz7\lR{*ѲԵO: EyC5VCkm׭ e\S;+gg_5ٞr1 p ` 0D$YGR1@iR)'YG@qb L# Rǐ Ȭ\gfHz"WȲe."L8;@@Req3cdDGMcdY?D@V1Id12,DwԄ12,1@)1&cd YS `hcd [r0@%1 ?A@&d0@fQ-"3NcdG5b L hVzdAf cF#G@] 90Puw8# /F&H3R?F@eP0@jfQ/H-R)N ciEAa T" h#(JNciDAc ! 21@*.s]$҆?-*M c A!c T! Mh#lI& R7J%~o"x #h#"\A@ZGT HLcb$D1R$u nݿu @ @x5'ضy3GDR<#V{K;$` &' >pN+ڼG>뒐Nf磫>?e|f1w'.յӪs/9*w D# NO9/^,?g:6noŒު/_!߬w(/?rJo9/W;¢?\cw>ڷxO&H0 I1[XOS=UQH_;TclH,~ż~Rh?x ;՗VO x CCwNo^W~Ϳs?WJvsxw^\{2axQ@HH+wsXN_b " kYuY÷y+􄔼Ҽ?+>7q+$ZRH<#m5HQVt֜ ʋ:wϛ=. pUHR+hd^νs{ܽx\JClY8! DS0_κ@jk/-olOY:}l['/4u=tCi?ߺH^㉷ E柳gxz*l7`=X⁉xkX^Cgǔ;]W&2E! QTq]FN1nI`K<(?7 ?%hh0@G p1b$ sp;rIGJiB@Z j3OZ#U1Odh6 q a xJd+@ 6?^ C tDpp1BG@h/I~ua?^c`*\0 T5`pTM6 ,BVJ*_B 58c PBhW E@u pU|$cU0yNKu]1G@Жuh6(FZԆ1Ń ߘttT1E@@ ?+Uc V[1@`x !k#! (\'+P;mNɬ%zAAc pZTz$뻮u# 3x1@x>A󣂩' cԍz'"PEVt %/u!kū1Fz1FF@`[\Mm;Z$k`o^ $#b'l;N/H^U -<_~nT2APRʷbYx@RwMdSrYmV /_ȥ77OE0'3.=-uU<>bLu0]wmO|"&/2iB靛۹7"&)|qqWj 9;E|cԌZ }y߽r{X2G' $u/KںHScԄZUK?n6A@5:+-\./&Z$rߞo,}tlkO暤gS`uW$2kR~]vڅ k444<JMH:Eo;{/$lKQi޵ecԀZ1뾺rwVuj}WL*ugwl8OFjP`*]_~Y%Y {$kD7|xVc d0P%)RK+z5n(w?fKyv@1DU)J"YØ:~o_6޳DY;ֺJuP֩xT6wF+o4_ b8{Wm~Мz֏[}@\srǞ/B܅1?;9~2_pc2&}&@8ʎH| t0P}ށ[s?nu_~a=+%gf_K"ڑ1En{dd4%upN0Z=/k!o{Øo[YjE77;1Deܿ?=SU8F*]Wht^h//QSX"`PR~Z:UJ! IDATr[/+gTUJ[8 VڳVH~Õ|t;zdŜΆ?v]Aš?rW؝xkxl5MT= ?\;3f.f0(z=f/ΖnVR&U v+vE \Re};zf7cs#ۤ=@ڞ._5k^Rj"`@nu[_}9/k#@-*Ww]08IbC+O-MNسJ'[# -\߿@sc$?Cʻxk?#ҷVz}ɾQv~V̴S꺚0I8IRCms/ӱ IsP:1-\V.51I8N1wxO|nB1lrdԹ;7qY_% c㤪?rw7_f:pK"@zw.N0q8N*U0;Ysf g| }ZT@5}r/Uɡ0qxQ[ Ӣ#( %i3!ɷOnOS/XE(SjvpY9aao'9$rqUg7xF"x/j*noO֘5߫}/ŝ}Z&xS4;f) )xh/-1mJZ/t8*.SzY+nkZ&8Y7;Yi*uNg@߶_Ngl5 1$p[s.'9,%b1f=c.x85 8zR1aSy[N}]e@+߲N:k?z.x ;9 F|e-fS{to6'==#j׎}YNZ)mv38&mO d`|*k=~T{.ooCSWJߴJPCN:/豓)KFIgOmNՆ08@VϧJO)ܧnQOG9XRzM!_=}=l{بt$RgΔd}ceG8Ѿmk4Vjg٦7i\mנqMjl[&Spn(08@'$cs:sGop]'fKupmW?^«$- ;lOHKO"db i@b Y@b Y K~75x\0k$}QҎbbqMǽF`. IW;&7?K;YpϨZ)ǵ` [RZ.D@R2&INT07H^!)w Ǽ~f7(j1@oE +nIMK p *cc~n HRxkq\Ij [R88f"}>~\.-)H(I@T0K2BAx IJuIjv]D8@=R<M"\v(3ւ#cIjVE u*Ή@| I򥂳 fRhs'c3$ud7H-i"B@R>.IYUd@d` p]V 3Z2e)cS$O% .@ֿ~dOv] Y as?e` p/(Y}կλ-cf"P0%p]FX'8ّϑ`Rcl\于" Z'73<Ẍen @HgVKE'E ;sBbit]D fB:md!dkcN}|yI>lZkFƅO2_P+3ukQj;Ip|pxL#w;F!D: ;`r^庌 ^?u Rz|-@o>:iBt]E-`%]1:ײJCȄS:S$ﺈ?HW*fg.@/QY!;#/c{io<@™Rgu 2G8n."LHeTTNC2J;LI_/os]lw!R\d=szn]'ˈ78@dGZ}--i"’w߼"=ų%U\ ǿcljRIN1?to:6> gla=uJy IuQe$t]֖W\C]vuaHg軄EDs?3eH>K{dyp T=o6{uXw:I.^_/Zn|;P-J}Uvy݌u]D f,WϺzNٍ=_+\PW."h }nS`so^rq] ߕ/.Ot]K n ^{~.)0o=V6unR2]`R٦G{UzL*>P~\I\#fw1;/_vlu] xW~E{x0-WMp] r/S AIyi!cƦZ?#}zb*+\sTE%=`KJ奦6ߔ}zg=wZf䚤 RoZm*w\ ѯ?ZERIAB応k K}O^Ql7B:@V;PC@ߞ?k>oOL_+-ǀhxՒ\4B)_jJ]\4H=zgUqb׵$\*:i ap,H&>9n}b޵T~Ik/%LUl*dZ.'_fM%EMuP0%p]FV9 @w/}ネ" ߽qr3+ N P?U%?0&yP%HJԽ_CL^:?e&iqVw/)E]IҤu!#@L\+`'v$Yק<-6\G'o qB> ] 4P-{?sV'f[6roOW/Pgr2&cd [ns]F 48uã7}uƤX@O~1F?#=vIֺ"I#iRn y}>'Ќ`loё=ǽ [WG]1I}8Gbq1~yb97Ψk|fcx,}'Z@bI4d_ajozzn_igmU~Y̒vߺ]׃$<$VJ:uY38%eoՏEj46ʀ:QOBI\YI[Wu@ fMȪ*CdLwϽ5cq&Z?ȗϑ:w[Wد.VIpcX.,}rWҫPW~Wلw]?19HjJ7AkA͎Hغ. ,iB$L%Bw cdh2/+~~b+\QFJqcZCݷ~VkHvxwzB{hۮ9ΐ_^&jI I|N{\㍴Qr?Н[ijH'~?{֜k#=ֶ \Q$ .';H/zݶ5w暱9RӏWti+jET+Y`Izu\ !@dJfOo)fٳ( ݱj}{[_- h]a?뺈j%-u]\8jgsǻg@WKf[Wث]Q$] /7.{ߚQ]){xi,_8S4up]H5 fJ;2)ǘve{$5a`p}жs%6Hͭ+w]Q$[%2PPC11/ܜ[މޙ<B8u[W<6u?[ɽ*vET#Ik~u]$!/_--kqrl4[X[ghzKҴ?&#'i)KD5.[]fW.caxZ>ͽ/Sw뒐8.b8Ix8'HXJ_kO2V3gŷZo[N5^vZDU *WU#vV,/jII.s `.-6ߌ !bv-mΒ\ׄxuuIJxLRe  6lι[||3~6aMJojwi7*[9uYH-v.d(3Uv y$H,C@mfƒ޹7xga?uIAq^ܿP?CDkJ%}u^C@ -;swxνL?W;6g6?Ckw>3CSŋ+-Jw% #Q!x{4z8wuAśwh3ifœ9xaX}͏[km̗'. 8A Xr]` A>IH#rXM7sYUS/k5s.n&-./+*#mOn>d*v6 .)/^`&Iu?BIz"WUjBL$L:q;ꛃ#Hk&6]{@s'HH HBM;N 6$!@XG@b).`fKeL1#䛁 Xtb@5v`%] !@ t"JI\"!8!@8?12n,m(E8B#ND & $BXVl7c\m.8I/w?2FI׸e\s wh#nq H&i]u.4qv@W?b'DpB]Xl74P0S%@ "IŦQ^ZED(θ@AWMƉ6LWD'P'BI4 ,HD y? d^Ԁ Dgˢ,P0$-l? $! eWH BDv$#D% *H"DIWFQTk$5E)BE1*G( Nu D sfQ؛ f!@@BGL!H"B:nƅA`&J(="C^ҫ u!@B}p#k&)#0Ea-fIC\HBfFHf*ĵ"AhW 3@TiV݌ cp@̒J@ZT)auxT cHT6@ a~f.ZcѰR`X4)u#80%1D KJT`CHB2WҚ0'a7Jz,!_+0^@3|[ !ȜZWZ<p-)d!Ȕ/x/y S@&l077aJzJCR$p?2և[WG$o$ #IwFFT0z;_Ҽh6_r]6Q`F]d@Rf+:7M9kҩcwEg]]E54jvHOw$#rd}c^h.6OۯG\&@UrKWa?3%}ң\@3Zu"g/Uz4u-~SyIDATӠ˛q]pLyز^])N$mr?;nw]O f+u|M5r faӻ vˁIENDB`././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3081872 fdroidserver-2.4.0/tests/repo/org.videolan.vlc/en-US/phoneScreenshots/0000755000175000017500000000000014770510164024466 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot10.png0000644000175000017500000002207014717152071027513 0ustar00hanshansPNG  IHDR6w,>#sBITO IDATxy|Uչk}$!S $SȠP )` NUZ߫חWmV[{ZV%`g%L%)d d:k?! 䄜 ~a=kz/@`%,] nDw1jj-Ix\ [ʐlHzHYԱ@X 8!kZPz @z@m)) 0vMd nO& !d jPp{Q/ @X`K4_~ kz/__@|BtJ}/FcX| p7:@& JbtD'""\>قϖj0@;O7&Dƿb1nbXp@ m01˫ppoJC p`똷1XzOS~5kMixd9d(J_ ."BRT""р0 Q8a1E p!2> Qbpd o־,k_ި^ a17cyq#  QwCp!66Onea1lX2<'c88|HQz,&ܨp!>WPy{;73]pU|@`iB8×dTFu{Z5l¾QI3Q;H&>W v  Am,3& LL[h YAv~h+`4L^㔮힦?Z>@j}m2*VR@XrQLLhNke tgy}6YXQZu (ҋ{q )$€@af)IA1Vow[8]×A R%rHՠ0o5[ykZwӇKkP <%L ><x>g&5`4φ>'Tx< s y=XBg| lMԆyԮ-7Bŏ7q~׵92B"<kÓsQ$1伇z#N15VL܁M)O4fX- )rf0( ;:W"G:j #3v!>?˅ɂSkQSx2F# $KŹh&|N, ÿa80` "b?cNmmSоH vLdՓ8d.s!YUL|{3*]sJ! A~(!1Fhd}ÿFX a.}/*O:>@ҝ`;Q[ qMnf QH2؈氰G +~k8|0 / |.,K8vMM h]dC IF}!'H&q3/ {r ލ•$$ cیx[Ť3a@ 1HA`\Hi8RT ̓xd D`ˀ?I{t@^bNSCپN2+G}% 7;:{_C!, W/g89珨@T|;V\ S:38G#>'P-:FS5e[Cǯ^<3( 3z7 cdC.}/oJs*E^u`bЃf&~*@rfsI|ߏx5dOß|ɱc|>EQ*Ic1iB$I޹W&dY$$&*rH̘H){Hg3/9+**zWzd2m޼/Z/__z6L/^Wx<0e977wڵׯ_vd6'(s* \v][ݹ>z4m`^WӴzѣqLLLaaΝ;O>$55uҥofffEDze&N3Ϙnv2<##ĉ[n=zhff&4%R - m֦:wܝ;wsǒ^tjnٲO>w}nݺYE-Yj. 'f@Hs_W}b-AU6T|޳>K/,Yd޼yyxxxttthh(|Ĉw}wAA>*Iɓ+++UVufXuCVUU@f[S] xcdW͵Τu&Eks.Bhf6^"xNp9`Mf-0^*{+. <$*:+kRhy7csg}ޡqbE-M`4'ܖ$}o+$€@a@R he[@@Ֆ(H D(SW[%=jiH+L|+qB6YO3dã0/l17Z;yٴIF&&1וcL'?kCj$dY+&F37 7:Epr@ )*=F(0$ H I0 )$€@a2;Dj'5cn\ >_1ƪv{L$nK-aQ43cL_fw &: I0 )$€@a@R H I0 )$€@a@R H I0 )$€@a@R H I0 )$€@a@R H I0 )$€@a+!Q[%<sŖzwh#VN %Ԓݵb= Di[!ɦ9ҕ @Io~.Ch߀ ߨN W_L *|`Ӽ~;@AL^REXkσ ȁ̈EQq >=]_Nim/X,0*NLsNHAH L %0"rDc 9.$4it)0McG9wE ~d{>3뎧\"LR}qp`Ty!+L?gҲKa29^$Hriϵ dsФj$!xT2phh&N/|;64@>8KhI SxŞę^3j:Mh9zUL!ި{^4I{t4zzV )t|$I999 Pe׮]@M|xȐ!='HLL3gӧVk||r͛79rTe۶m,GEE͙3PwB ?ٳzШ(y]]:v|BW^|y׮]YYYm}QQQ ,˫JHH6m_=iҤʲ\]]i缶`׮]6mj ƘnOKK7nܱcx#G̝;dUUU !TUu:Ǐ߶m۾}!D94hPvvvCCCuOgrٳLR__?jԨ+ڸ6l111BXeeeNNΉ'c3fp:)))BDDD`jjjIIfSeĉGCp8 ҷo1cƴ <==}ƍSLNIIY~2Ley߾}999QFɲ ͶvZ9gq%I2^WgϞ0.=v@l6*Yo>o޼s14M}jΘ1cҤI[7} pYn:k֬R=ӧgddʚ>}Bicի_~w]___SSvc^w3f )+++((HNN{۷/&&&&&(222444""8::ZM6}t!7|i&c.\HLL]K}} /++ ӓ1cƔ)S4MۻwAfs;X@TTԡCM&Ij NDDDhhE/+B$%%:t[VllLb2ᡡ膮^*IRxxx^[[k6KJJn0ai6(RZZ%IQUb̘1G:thZZڥKbcc9 GFF !8W\IHHh{YEFF>|xԩC=pɓO p3du+w=Mw?"zTinoNj{z&5MeY/4*+=qm7bh5о!5qj(w^SUU6[#ιCB+30^itt`2Ǝ2g[OnBߥ;v.MK[1b;e˖ϧ !N 8/++spܹY9r۷5blڴ̙3>/>>r}G.]RU566&~˗xb\2!!!,,nggϞ0`Vk~U?~$$$Hg:u*))f>}/OMM3fL(}SNl6oz꼼ÇLǏ9r͚5wqGZR6(ѣG#$ zXpӧOKt+V1y k9s~l67zO?4-55u{Z_reB/XnqG/)כxm۶Lk׮ tLP˗//Z(??_劊A͜9ԩS${gܹ;wl7nܶm[&c…ǎ3L'Nȸp$Icٓ&M:p<;;;777AoY 1c|駧Oֽ\uu7n7iZhh;̙H7n 5sLB!fSN?~|AAA@&8)))7o2e \UկjȑȌ+oى NeMNeYGsͦ1zހGCT7zX(OӴx헠_U)$$$s= &"66Ưl/`rYfz:\x0,e9$$իÇ?|YY޾OUՋ/z ^n˲\^^gU.;v9r***ֵX]]]QQQ>}JJJ Ξ=NIDATnܸ133] Bv}Ij1vܹS]]Ѵ4;{,}軬p4 GN3**^QYYL&SrrΝ3C-//oo IJJJ>fejjj')^ŋaaaIIIW\Glyޯzܸqqqq555#F4pWVV%$$?{lfffQQQRR>\t40Pnem$IQ^bۻ: UUϟ?O&AAAAܜ.a}W~_dee=s]}ф c~竫*'ǏoV^x@͛7///o[l ߽{w'd222{͛7]=جY$Iڱc|Ѕ93蓐0KAAAq#CP&IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot12.png0000644000175000017500000004674214717152071027531 0ustar00hanshansPNG  IHDR6sBITO IDATxipu5^UY;jP$j.d^Ԓ([V[Rd-#FVLX֌p=!nKk--Mvs_@6AX5++qDMh$`/w"A|>u֧P($aEnO|◿$I֑<Jr;vEW@} G#غuz5Mz_=裥Rĉ_6o|}{xYȑ#~+I>~O&Ν7DXÕ T*t:i޽{{{{?AS@2\~(EQ}}}#qp~nA@ kSO=E NQBhӦM.\8r>|pnnnhhɓ^׺32M|>]׭d2z^ 6oll:裏bj"Cqp#G$ AoW'xsBHӴ`0aH*b_٬$IO>d454 60 qu|Ϟ=Gxz 3 rEaY$^UUu\ccc=s֤`'Irtttxx=yg>Zrn7M!#D"0I۳}gF(Vz>\6B0v&SU*fgg=ܱc4M#ٳpg:tIL~(CCCBX,"O?].CPR7iƘyoFe|>/¿˿X<|2MSE0B 0 5Me>SŲ,|u]up(5mrv`&0b ð]kީ*3~[7 ,3g8rD˙a$A0D&B 0]-0M0 &0a"n07|OC#GtWGTH-DICA2:_oӣ:AZ-E婩pt]`aT*n$!n^I $IXjKK ܱBAUH$#⚦]vC o!H|^zgz{{Ϝ98N^RT8`f<[ZZZZZ&''|Ml6 _zd2~U՞y晭[˲,[<{Fn{hh(~;΁j]@>|'L(J4}ꩧ֭[6 i`Irz3/#U,A*E:T=rqfao)a D~Gݵk׎;^k>smڴ)_tS8.l߾㸏;v ¶mJڴi)ڳgOX47Mrm۶!O} !nݺ@ ?cry߾}~OLE>SO=3~|&0"F7+TB155(JßHTE=ooJdgrٔBPxKPk6;/a´鮮.0HL$!05MsLӬ_}20Ap|p8 na?0P߯={ PUm4&&&u]\wv׃aT*599)"Ġ_~剉H$ryi# 0E!d"00CƮ q3Ms˖-E55r9;oj7mCT 5E3wjRJjZT br9@~a ђ Bo"JR( Bi H!4;;L&A݈ӧO@ /yW_ݼyĄ(x</^ON^yf7f^ݻ:,Rz./CCCgΜT* BgϞQ]}>,aeq__{ޗ^z 27`u\.711lnAYh~eggg(0J%|>xJWX,|>$`PpEeMhB'm(jmRAS طo5O mth1vldj$Ix`0h_VxeF㙙EQEQUaYeԼS$IQ!sR1 ^[$kVMu8MHTU M@llB8^i݃dekkeC>aeY(znaYS j>eYEQxGGiTjݺuLc jMӠqiZkkk>w`ͦiaagɰf#M %&EqjjJUUSBl8!ID(#fz0㙛kkk (zMLRmmm!Q9Jnc 2K-6b;kiiE$4-2I~? "@Z\.0Z0D"AdT"^e1jrYUU0ņxf$kK+\#XYbSEQ/AQV`R AQ4 Dpq&Be`^&&!-/C#M-ftK<}Ji|[X1lst+l)Wڇp8X\R%psٌe3r"n `49]ˤLlwBl᷎CbŒ4;,[ku)M{鵌l9sFEMӢ(B Ү0Xlzzz~_Z<4VJ&@$fUU htlllaaA}E1 8V5;jxu]?z֭[!;00h.FeOQLNNvvv&B`P{f٣Gnذ7ntMӳDGP a}>q!Pr_~ffFnxY/]qXX,xdȲ׫lVG:ɕNF1Jv^]'#`pyQk9:ppeXjUT!΢`U@Bf壥=`Koȍ @Ұ}MӖ9kV# øpB(T*$A`t`=:33cfTF`U]#O8}B PsU*H$an\?~ ZD{VZ2!9oMs$I Ns|ddD .~===],b719X VϏc gF[ŋP:VGJRVY]XXBHaQX\7h]ׁ l6 ޴[E'r'h N$x`@EJ'I(9[ x |QXF,B $ZVծB$Ip8C5 `i @–$p8 Ν;UyO$PXT*J?t.%~_eQ LR@s$ o---Ѕ=ɻ$Z$6hll O$p@aŋ^$I˕93 SH4:::rp!4fY6TUY!v-[7=K̈ `0vWa@]8UUU8E1!0L84{zzUrkEQRpFM$`aC} s=)%OB,D UVZiC׌1. pŶDK -5-ںiw+ _UCu p"V!:XM8UcFVfdiA'u15 yY!ooɆ۬! Y}mǰ\:ƚ]t$Bfgff fEFsrGysjL&322߱[KÎƜX ˲~ddd׮]333n >orrX,s=`sjTΟ?NN˲O޶m[yɢfF{{{ޭ[J>ri薭j^/ NAe *b0}Ǐ9R*NA4MRA%95`aADQjA]vq%MBP.ih4 /r m ;0 cv eHbaH1 bO9N};vxx(x$IryfH~,yo/߰e}β-n \͚]7_̈́;l6}K_Rkk+(%$ZEQ2(}}}eYHt\/}q <9;j7 tA3r"w à&;~=k1!Hdm OUDVӴ*xxH}X! 2$ ߯뺢(rzZ?>_^7P.X6 Ki,;00pرt:=<<766L&=`ooՈDUUxᇡ3rZr9͞?;)(*χZXX`y* |4MkD B_~nPxO~zƍ΍F@#I8ONN<ikoo8nrrWsr(׿ԔcC50<ϗj裏r 4d!ؓV,,΢i΂`CL&\DžBF?ςucHoj ]o h /j;5;^\P8x={54-,,6Be ЃJF$ȌB7t{Eu%R@oZ:(*˖aUUy4MAE5qp`aEQ`#EZl6zA?NfitkVAcxhnooWUv_pyT*jZ Q<2q]]]^!$I&f]4!a]ʫժ$ILazvcF p\r:Af-?\. fggyD"BAu(jVӴT*j@qbd^\b,5cYUrzVMӀu˲,0!*iEgFehIގRU5V.aAUBRUUq028[<taSfYv7Q9@]O?F.{k5hȲ2 G*!:X8iG4vp5nj1#l҈"(DP]1 #/wVAA!Ь\Ɍ0A7)\XᩅTzaH B "iDP&"L"TRm YDX SG1 *\`Xq%br!bS77F!$*}Tk,Sٳj Oʞ[!Mg^7 ڵ~t KgϨm A\ Y$cFxֺr#Zd,mXR3g/ֺSaLd¤nAj;{d:IٵkIb4c~UQ{?5w (&72?G6N³dYK+ a&AѓE$mn-I jA¿=K6ծJ>E)B*&84+ܛJ# +,y@r gb@L+52&0ƈrq4n4! ox-46 t,M\ V^08=ԃH _0Q*s$zVxJMrTE$sإR d {N c]Fi~B,"dPkstHAAx.\m^bdRBߟi8T*y<ITU5M3Lf2TUUUO#oݓL}$i(hEQ p5M50.0 êr755Eq :55ښI BsssvwwEhLS*:0|j].Bx<@ $I><7Wi%Y :B!8eXeYI`0D"K*A?& QM(X,z^] s\d9\z Àffggg__|5KTU8d`Š=@+jAzl670ƠlIcEa!jI0tEaNYZ5hU$/.`-VeR2*N:pCೣD`Dއ `X r-BNW! h4#I"HCԬ^,CHֳV Zn ,+L,l1VUsss2MҥKJqm ;$i=Itݛ6m15 2ЭRf3 NAYnwСCZ'ݻF" #®`+r,`g` hqsF ZvSgw`ߩp&GGك.]rh:: Kju||>2X 6}r\5::qIHdvv6ɄB!UUeYT*iJ%Ţij0 ЊFB {A۽aMK\nMT*sssFl4-b1ЩmkklXVEA0 aZ[[KRKK 8 y5 X,B%ǹL&#I"qt: |\IA' iC۷cGc2^+jUuT*,  Av vjrR DQMH3 |XeY4ӒiA OA f= f3TU-}aB@".]jVi(.K$ -5MspaR%;WW"n 5vn,Z!Un 4#a [M7oo\頃G*l䘂\6#'z 9a8nj74Ų]5k臨Č0ƧO.---^CbZڵ BՐ)+MaqKG$9۾}/:;q h%ujJqǎT*oٲ0;vTt:](6lؐH$N>i󍌌@￿Z{ァON!]׳l^LKooo&y~ƍD±Hb?dn`YJR x.^1ÕJettTl6;88(˲t,{at$\.1љiu,ڵ~EQM&@$G?  JK*C4MT*ХKEٰat$v;vYnyǎ+;֭[9 GN Khԙ2swڥ( i-Kjd?b%Ix힜4Rk힞r!`zR)UU[[[gff*J4MR࿷Zt: إRI4AX,r9Я3byv%02` C\Zva+1,u@:N$(J8w#^ƃ ix<c("0-uekHr5\{{%ުݹa$BReIDmL\կ*!8X,4nn`eBh9X8f`hFKخEt9gg_be )),K:0uU/di5SUٳq̙H$244i(3 sP(tywH$2???99)Iұc8MӇ6 H;La$!D;;;g,;t萢(ϟeY1 :::>r(xWj,kii B(>?4tw04M͚fӆ QVcY6 %IUU4GFF@qtttrr!)EұBltl6;99؍95%ID"@'Y\bd;laeB`mcўD"L&x ඃDz1X,P(o>HVXSSSX,ZE jiۯDp6tkvܜr`_ ~} 49. tEaY*AfaYȺ\.8TI + 01d2Pn>GpNi,u򵗐heYr(<G(r j|>zqQccc~d2iZ*Zn]&BZ!UU۳,q0[ )q Kz]f-M333[XRdh,OMM)q ---Z !xfffCy).bYe͵uQ^܎XF 9a,Q[ආ39X8f`Ш(?+:!b8Xw>WHӴ'N`y׻i]A (&rX :mذe(Zۉ IySߘ c㦧[[[O}W^eYeYh"k. 2h$8qaY;va$Th%˲,qϟcr܋/xaU,[,yO E@ïZR9u(A\īzQ8CA`L&S("uڣKؐ _z%N:k׮Zvɮ4'Nx׻uԩz>22222@aȻ?~e^wrrUQuMMM <;z_zv4{zz*J"(J{eP(Ȳ<33m۶p8,I֭[>,I[ZZBrZ}vYtKKKR$ 8ak5KDZBJ'|_.J?x0MӦi4 ۏ|#(|~aaA7p81d2x\љEQ`pzkz=$gBJRI{V7oT*@IyX,.IΝ;=޽{:YoٲnSl]_UQFoFWWi'OE|>5M}}}$Iolڴ &,&}>Hn۶m```ttŋT*J222R,3gDQܹsSUUVp{zxdG"\!EQDQܸqrLBa󡍩YEQ -1i&I%b``@UU (Bsc衎?BAZ ^xdYE@HKDV.X,NOO޽[UUA4M|@| 4o(òtgw;駟fEK_WDQD E t ZmnºEj) ]9!DlggEz~~`aÛT*SSS>!d 7.jR\.#b[{{(w\Wss핵j`z.ӁSR', J@0Sc6a?n*=ۻPqѣG@X;(j+ϻ\zD `eY@ޱa`PUUؓG"suwwl2L&Rbv r`$IvvvR)LH$rMF3$Zx]и1/±cdY FGGUU-Sd2###$^P.T*B066vرj JcIw- FGP(N *zbbbvv$D"93gttt'N9<\T>oϞ= LՈ.NTUkVf.e{v3$I4x}˖-,36d%-u}Z$XcL& tp3agf<}{җ5/,!*NEJi.K$QAQvj& EA(S u]zcccd u-,, L+r,+ VUaZ@3a ._ͥNC}(jH$R. ÈF\đXT:0z! i "0Pٔa p(J.yi ;N\.(JvכEQm5ԠN vj<JGq@`&(. u^4MUz( 0rVpMӠ4M~?$X.ƞ!@ :C9x@_tj3b.6e'a`njI(DE8"[4MMxFh 4_+hW.{ڝ-;7 EeR-5Wc%ʽ h> 6)8Uq>\/,/֙.FΎ 1ÂupU,TrEo8%w<+~8iY= J[nUUUӴSN޽cUU B"ku>,$A`yizь(fx|'L۷'Bz4M板UƸ^R)ӧO:u_J#,LD[?AŌ$*Oޔ_sss. С+_,$ϟ?A6?yۮo}[)J?x≝;w^Ռt#7N-}_t=[ Ξ=w_}oS6_V۵k__@'N۷oΝr;5@LP{o̞{反Ow#nY~ ֭[oVU۷9a{Aȝ;w>˺+l1FDMccfzJNdzAݶ5[}{ Asssyu%ڷ Tg!cקC'N;xQ˜vvv;v _˲БVԍ鑑'KD\~嗗oD7wݟDi|'O`-̈́i<q/} }o]Peƍ?Ϡ|ComUx0FFaO.<j^inBHUva0 OLL!Hc9h~5ov4Ma֭>(_x<gviG(j:jd8i"tJAw_2w]; … 7n8p;lun0MƚN>o~#-d2q\޿GΘeU( ¨%т ʩMƖ~O/hi $JȲ,BD½g(=~ A,t:{[h4dYpv9~?EQ4Mj$0i~49g|Vfi $I0ri6iV ߆|>y /a à(ʲ I"eYCg!\.ciԕaAZj:Ng?ĥH|>oF۵& uP(zqo P8{ $IzL*$E`0$I۔+l6a؝Ep. #Y6EQXQ%Lڳԧ$Jd}I_/qimӱ+J,vlTP(T,s7MqˠCvKor8 qcf3v(:JRx7rt:DCM&'ڵַIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot15.png0000644000175000017500000012400614717152071027522 0ustar00hanshansPNG  IHDR6w,>#sBITO IDATxw^y6~iooJZPC$!zw;'.Kĉ?!`cpc0@HBHZJۻԙZ* {kyϙ癙gyb@}гAe؀fy(;Dӏ? 5WMX@p>P@-.9(`gS7#'Jң5Ƌ12%G8I>c;OTY9n,~r9؄8wsRDzcKLO<0u -_ǷN0]Ýx߰2ʖΟk3'* -6`#BkP(_%6am,Oo՘A4D/ sطTF0w2'z ݍV0WôswpR .Q>K>J7:0X@t.$u ӄ=_ubJ{WkXxlԍkM7C~8k lK^`^'O5!&XDÜU04.:K8BGfdz k>˃m':~݉GUT  BAB;6*?bW._mp'13/2Njc_5w֟w"s0B*W7-//"@J|壮&T5Zο %SM(A$?#}Xm|e;[.OŮA,G"Ǻ 0 cf UG񃋎}IЁKqGPLj.C9l7 $— c[6*ahՑݛ$ 8 : 8*>`blqui5Ǵq~}NmyIW┞c򐝨t'^#ۀw&INj&:5?;LRac$0IIa g9I*p ߶Ȃw_/}K,YwӄxG Ggĉvad;op͓p@mq-7|:>lZN3a*$`r CEb>[$z_={԰}㳢ay$̌\8܀_ލ,oO\(=|q 0/ƾ7Πt<? "l v 0"x@%+T6`߱ٗw|/., H\a?M~筼/Ȟ 2`g߳׹GǦO 19 (C|'Ϗ3a';@j@h>݆0$C~>D~~9Xu_0 @wѦ@n)gt [~(=qi45_1 on OQj'!4} _7}9,~b`@<@=P EXH;n=/GnǀwX΃ > @4 Dʄo>V(|Z 8)ʏJ~ 0|}Z}0贞 r.<)Z0rZ3.囸^S~*@_ _#T [a~zt۫?&.!/꯰?,3W!4>o}Yr!ïC q.=X~Y'3'+r!%o | `"Gv|`=c?@Xi;3wipK QsO/__r0ohŧ䕳5<-w5rXs):9%89|A 0ÂaQ tx^QT"{I3SyJɩ0 Wv|:&av;];3m8ԠgyK&01LRac$0IIA‰܉ i8!{܉q9>NI12L$@zb81LRac$0IIa $&1I*Lb G+RY>#m{ ˲8Nb _g øfΜ8q:!y$dY~W^=+x<} Q$m# $M:GBbrI]'>_7N*;iY3!dI$vl{.6wѡQMUez=H#sM,sDH&Ɋ0s)@L1o|Y;[Z{G]V-jżnVS ڂQ0̱`T7A%ztS'LL(KBmSN/+-OBrxwa*@SX8h GxS‘^r+bla\RFJ#3O|NիB%Ң9e9T|^^K<Չ BI'Ԍ/gE)8y&ɔp\h۰9l1dyx` !N]sw(%;d)r!M@mA+ yØ`!"55 0i f޲`p5Mp<5-,)p9m!\c "Ф%HZ__?o޼\Ӵ !$IRTHZiJRQe˖zϻ8o(eWJò"dX>H& d;0_ #z [ySEU!u5x,E0nTOYpP @=nʂB@9XÎ#1HDCc{inn;w.\UUV͙3_3gΜ9s~2,//'tuuuttW^y%]z۷o[\$ .`֬Ym'뮻!߿ҥg^r壏>jƪUMt1֮]gϞ?>駟^f{קRӧ3~%K455KT 81Ox`9,T=zd--|{}ޞxi4 3z>E" }"TYLP o|zT#ᨰB%.5UPG(\ض!3n[Bp"Sq ~_޺uk"{1˲[MȈk' Ø7o^WWW}}-[/^9>+M^$X,|͌nk׮]bżyV^-IUW]rJ˲dY޸qg>|~#<8r^y<O l2Db1.x/OO>sw^SSF܆f˖-XRN̙se|xWEN@6n۽aob{T*|.F"s- `_K[f4Lj654Yڳǟ[lzqG, +e^ɭO'B9,~"`-+p1B@fϹ7n-r;8L<5~ee:1`۶19w۔[wnRmmͺ)$5B,[%ÌdљM61Nm$2Cu!أ~;p>J a.(mZO!儋Gړe^KWϾifA'@BSfbXt笛į?O<2~[Tƫ1 ijn:GƓu)<;W !,XpF3v*eSTU67OolݑJyS(L0i{Of]E[/VnL)Rc(;?6׭MƜ@X8Զe &uսwp+**k8ΛAHWz4mԘ,JiLp;LBҲHǎ}^x._eS**F!VS?`os5W:Mx%CX iZJ(l$[A T@F3)J˶bh8SV]U~ױl& {| %},[ܼpvLV=$9 |K{5xCDXY!%DxJ@P)[7u0Mò S7|A/ugw[_8l0L>H*g:9.4zɅ%&WBnjH~;z!'ύ<Oj@tWLR>t-!K 8 cB4>Bd+sI_αaRƅ-x?p}>;|Crc P}m$108]su5ukvawvX?+0>>47UHZkwکiH um؞UE:N#*pSJ#;BHNGR?h'=9f&A)!Lb(k Wjd|SωĶ g/97|j<:һkmH9kv[`+Ä)^lץ[dS><& @Za .;t$(1Bb/mhXimX 4ƨ9on- ݑ(T2)xw_]W?7RbdQVbH@>4<QYEI]ȅjstv;)cQ~>_}Y`A&P(.BM^~eJ+FGGt]_doח#H:^d \.g+|>ߺuR;m۶K=@ W0sCe3mؿsSNi(__4,.EZ6gd<hPuSb?etg#HDR7gNaw IDAT׍R>8Z͹3c[Jt2Ӯ #+D)T qc%0^ve۷oohh?m,2Myڵs*pg 8%%%$ ,,˕r-###dYBݝ]v|ݳg͛7/X =Ж=CDzSt|?BMMG3 f{LoyYۑ*x{{oȇ{}[^-(\yP. m`A(# !qhôBpIRp(b8T={9ݻ> >7tbÆ b(ʸ͛9okk+-- BSnc&z~7{Ovh ؓ{rבk߿?-|; !E5vE ={Vp_dxٳg馦W_}U mڴ4\.z[[[}>_ss8Baƍ۱c… y+Nf ۿ}}ٷk^tE)Be rkٲ}TW*xt"ݗk|5QqbŸ ;Ҙu9Y}ԓI%ܳn}8M,jOI:b[rIx>9\qp2O6SW]Fp23hVY)E3TƓ):J+V/ofΙ^Q\5yVIuB0A ==2ӅHf(OT674Z62z{S5ޠ_Ժ ];'Kԧ²~09{\Yj$mM T%*m Y/Xm ܜ̌ ۶gdHb䎆< D"Y[ U>c\R|dV\kL eB>o2;sZv]Ѳފjh)PӺ]%[;1LvH4਀"Uɯx˄ZK_(6!wCkݚDv P"ŗLluJ1R2UpŪ>u3cz46ёBY,2v>rLJ4~55Yi8>KRꗞ7Ke׷36w($3IpŚP*"z[; **B1g sf .i [WktYҍBJʲM ++;JZ}Xљղ_>s]=*cςT:x#1Б4JްZY^*Κ ԀḦhVgזl°mR4T5-A9I8$n4Eڲ#3-*#éڦT`OBʃ{G dhSs@[ȍ"iP"fTm;trc뽳'wh+/@#VbugeaIi|`v`9[sBwgmJ;[E%2kJE1?. cx~skw 5pLc^X^aޑ]\9K0rN&|iD0L}C}y%O*ȉd˲|fppЍeٍ'˲H%0$IrC$;pCɲL)߶m{8,wSv5;T/?^mBY|EN APԊf'39"YnڌiCQx}@i( u-e-xB=FH"y 1IB;wm^W^۾a#* '1X3jgY3Ruu43j,6qFԦhBzhu |p0g\ܹs};SP(tvvܹr֬YO=Բef̘H$~隚/x֭}}},͝;W^kh[[`ww%I"<|np 5 /W^Y]]gϞ}+Ҷl6{wOSBmH`O25ݔooϾؾ9Yku%>2MPPn*l&emO?ͮd|jI'f=?+Ohy]TH {d{:|ԊEyud U5FeZ@Jl4('X-I3<~X,0 cշvO>}#g?;Eٺuy`0ʲ|w^MMM_|d2'|Ͽ~{;Xfxr}x~^$?>1BBW^y5l 0Ax7t!6Ǝёڑ?t;Fb>@T6]#=[aعs͛/?lbƌBS['R@B>7ՆBaiWW캃él <\&'CRFvhp9@E H&zS_Cւ5Ϝ^%uD)F1VsYVP9QCʜr DRʋ@6b!TbjVugn4Nd8c''>[[[GGGeZr˲~_/\fYY#}z*bǙ={~#Ji"( ׯohh8a=۸qcUU͛?Ϻ:u]m=Q }>_SS)xDڿgKJ#x$>:Z :Fa8a2 0f#kڴƩ5>*+"5Ua?>:H;sz2푘\rp@r项e%ͥjcgR`׾pЧ ՝wKnя~tw&} ֯_ .\xLғ߉(%TTbm,3.335ᢘ:vO_*f^Q,ƹ^[l5F%R7T"%aI҇$˦yBdJ:.DtS,ln8`OrZM ;o ;²3ՠ?>4[ DŽTu|',ιk6&61 pt?nx:݉4Xb1B1a%5`f@e$,7VEu5jDd*Wf5–> =kMm2u6vkhVH1 K^SE/!P{(-PZ[\Wm}*Kɢ'F#9k$YwiSwN9K߇7} K ` XWe^X4JBM oIElR%eS*yz#CSk W},ζeͬ~`=ܦ\HenkOyNe;%@rzo4j U( !I5c aT$}ȃ*K@7t]H&( +ယ֕ -~W'H}AEN*񏆔݇FGSYr7_^=G5 ԗ*$Q,078MӲ9'Da7Zz\xׄI%`X#&U0&Pxj28Ƴ'lLN+ fh@@C$MSLS `p}bL2ż"{ GbAERwҖe\-(GZZ$TB}T<*1ଐ/`1 c2D;f֍b +)pBF E]ȣY#[zT2# рL 1kc`WQsOqi,,tx<3z!HA[0NfGhBR{+ 1]B"1H+e,'bPo_:J&d; -;vZ\)3>:+$K,d EG<>e.s𼮧lAp 31ET̨'鮭N>W L>ӝ ͬT1W|~Ӟ'{8kҬJWf覝ҙh?S0t:P&f֖m4X°iUG|AS@5lA& [B\Jx:ҝ^)7WK'!qR}pUjp28NEIyxN`re;F ]rܯV8mq*Fҙa tf^oEUy8$l2؆. \J6Mfs/EJ6W'LV#$B`"+ b.*8UDz)q|f$S.sҀaZp ֧-[Yt{777{(wy饗!fRUu۶mZcppPUŋGٲe$Ix+xW455Eї_~Yrʓ 6E2ʣݣɌdjai^0}y(m=^JєjfEC3&^3FOCy&Ct=irj'n#R.DC>37o4`P1V\-[jjj8c/_ ŋ{<9nD-BHooEBЋ/(K2̾}ĪU6m4<<  ./L&Ν^|EM.Bscf"q|KY=~%'ndac 0,Iԁe n b IVdu;NkN$ӌHE{Yo25"Dh%L!\.yT4"^Ztl4^Wa:R?/R;D|(ODXiSfͬ P9 8v`s>sLIn:;w.YĶm߿lٲ;vtuuy˲.͛7W bZuuuPh߾}ӧO_x~zjܹ[|>׻k׮ 6TWW;PVVF:4uT5Q c@n5˄ &.mFXZYě͘##_h;ʛ5nLK5N=3S,a¡av] KCW/_n;Ũibn3Cغua|O-%-EswBᩧF]]]pK !:::d ~WZZ>mڴ͛7oܸM&b^|oX$K^mIĬr,dzT(I4,ö G&)DwmX\wť;qw˪4C Ӫ=}T!*JG{{Ui3`1ti۴;QTgrCuT#9GbD&Ȋ(?vGs-qzo!\ZIb<eR,˲kJJJlvinkl+L1zǩp t˱20  ,EeΨ$Byxm?ŀ"/m`ze3^_?R?l!ԛGn_DQI@Iԗ>[ 4}~rSh6cmP:{ukΦj߉K8DeûQli{IJp8Ȓ0qˌ8;:ňǍi E4&F*h^EQҹ!#CI$ў=D1~37 SqD2{;\tk0(R0Q Aθi ׅG IG'I[|y:~֢q 2aD]2AyU̯ K?:j?qvm?r2_UĄ9JOM2ؔ!JKjy=܎:Kb=Txt !rPck8\1OsB$F` UU# &-nPA5aOf1yqzCVf4ZɰyxG;~o߾}o@MfrECޡM=Gwx'ht[$[th"icNQf~W:2CW`ppcGj28H96Ƒb$` 0TbCJU s{ޒ~{7H ,]=,G+++_Mg3 6o\VVQd(++4{c.Rf3gl}[ g.ӣ94s&0WUSbL*7&cSYTFU]}C!{)cv1'ڪH" Zvo<@ٚn[pϗe>pqEuWѼJ$fî~[O] sU FLBėuR=$KQVU~˲{?iMM… =cǎYUB>#|>)cض-hOOB^ZJR^{W]cy\ }?::zqYmv]wݮZ8Bc\( ؽ{,8eڵk1 !L]F555$'c{5 '$15kt5ؾO>T'S9sMuՑMӟ寿5s[FTH2$$˛dUBP>B0  xCGƸa92&Nte?Q7ٙDz,q֯_W^yqq՞P$I}}}{ݲeݻ(k׮=rU` ðm֭$G$ޱc޽{Dѯ$]6JB}{スDgrJKKo?,Ik.M6߿lٰ)Z_"UH/m,Ă9"mK"Ua/;}3; _ν_\_jESGHrMH4RLOA pF^ȹ0Rk@wCju۷/xt^{3b844ꫯn޼cy!lٲnKo@ pUWӒo߾nݺ~7t%Kr-GE}lkkkiiرcMMM(>gΜ ^}W]uo~/˭w믿>k֬\.K/zv79W OJ9"oɩoӦM˖-{!/H֍_&.Kb^sY4U 2]1Y卋;eR菮4>2Z)\JWep;A T:W[1L aZ/}d*e\p` EU]$B 2vI6W_ocCۤj[[,---/ecfuѢEқoRjժ[oUUB)=`0hJQK.3 $͝;כy9ng8˖-^[s.ΝD.\xر㊢pΗ/_^[[dܹP(444L`H #M2 8􏥀`kCVUmrwl-)lS.K++>DZ 8B\[_<CGGeDD{]qDdIB@ 8` "#ò%50@!Ԕ䭡q6+3P]]Rǟ}YϷxb.pΫ]ιw(tSLP(D)u;d, -[&Iҹ*#$aHR$T$\0K篐1-l]tp+ZԄ-Ҳ"]o&oydvcC8|AG8*ɸutp4(3A0fs!,34]T1 SILegq^?Dј8;4}ak{Nr_L#g{Bm6{S=ˆ(w hfDVr0'olxevї^|-^߶OKOyy﫯{>q_iLV$[ټ%!PFc$@!ƜX@,¶vzncjι7`NE B9m b@0*؟\\we y :2N!@}u5bl o~_=݇wI-A$lYq`4vFc|&♲`ЧPr!Bcs.8h̘0ׯIxE7`޶[q !قY %9:ߺ^M8rb܆YՅ&eSF8 V*1t*WYáP`&svxeӧ(5&@] B6M5GK@ĉT@o8UK;CjZX>%ѧێԱ\gc)Xn׾CSP5PV #:)V>)E]YA] }gO?;db{w@!$_ DRw\` ER/~AXTxDeԞgv9s- &Y҄apǭ(kvE&K'\*Kʻd 5U%-M|`<|ptrl$vߗ10y!YS dUNLnEfg!`Y5!Je&w歾2SUM N VGI29,c KuJ$./,1vL!!Qeeɞ_~solݽG*0EAhnpdRž#"Yƴ+o*kJrz_Ll-_2z䧯MvsJŠ$`_5Y&)DZPOeG&}_һ4"1~2C0Uٴ0QɏN"! إYjG]ĻtYUzq.o NLT|1HwiN^-KOFwln[()]b9 1MuUWU5eXt.)$SY0&S:5O&€0!H0I&4]IJ/7]Yp@1譅\A\煣Ptwix3.[V+h~l 4;}\щ;?rB0Ry?T7ykڰ?ja$6>8widRء&3(aivsiMdܦ-ݟ s+g1pB`8ԧV{ފFٶm۶mۼBaq 4{ߦy_r]w׮]^˽{sӦM;ve9nڴippkou;vxQlڴɲ,B֭[w6pWpT=8k ڰZ(@S{[6r,1P}A 94ipHm+֕\3I'SS#G8b8u) 0( @,=C_%\)eBX, @' ;5|=Bv5o޼ݻw9882guuuC]6& OfrժU[nݼyʕ+[[[{zzٳr\.YI6]|%K B+Wn߾}Ϟ= .lnnX9gEpE?>o !Ar&" 0ݦ*y@θ۶5M |~Æ Hcccpd2wnjjڼy/={iکNhdssǓ(--o޼y׮]^ID"FkkkSTyyW+dٷO]LT>~iQ/w~2wp|"))=>0]fRzUU]UUyl"`]υeӥx]RV5d%YNnɬKۃ\hhv=?TuO B,Ӗ%@ J"K, ,0BTIU|Z['f%8]vن i,577+2::JBtvvB"<m{mՕf YkkkGGGp׾}6où!*) Hujr&';ZKCgck](l7SOBhy,)@ue 1#J!brqօ J[f^}õ?‚3M]cBW)e0 0>odd$d2B<3zW^niiG=o Rlx4[\t|- BEBm2xA :r2>>ȋ_Z|,cC0DJKBzGu$"'?&ʰ;/[ 8A WHAkޯ7n֐*IHpHp@Ȉ`1*ʜ!& ;c8|I4pqwwܹsܹsc^>/0͛wAXws˲:5\{nM,X`Yֶmۖ,Yd/_䤢(-tzzz$I?~ww,˝o;Ws6,VRV JbGcysKj*E@ePmkV̛۴cf 8<KږSZ}.5Kš #L"S FQ_'zs%pc =%%%P(=缤Y !<]]]JE<„$IW\qE1P9{qHUU{;g8Gw`,m̫'/+,fG5u~_$tWTFޕ[ԦTҵGW^7LMMhvqtq|֚Y:y#c@ʇQ=ױc>s;Wp_%tro^ݶa?]xi'R0! ct&w>L>pMY,XZF$v`OMMn}WbClO4P|";FEkx/qY66r`TW•lא+!ɗgr T00B 6)62fTlZz}7ب+ ϗJ!`ri(Xs 28pBx-*ąk9\M $ic .Xs ӇsJS Di]xkWiR@xҘ#Rʯkԥei_""]0:>5kS~豺U-U#\ץ0-  b\0l.8gs#蜲lnlIlc"kq{.2/[}y^3PWm !o /^6;n9s>;%a -4]u]4JtLۦǎݹT*SS# IDATұ Fo2(s8,`L`.F@f1cXFsE\sinZpWjdѣ&_{eYg%IڵkWl$%'ڙc1NREysMg›.KN](7? )0<;:4L[/mH PC?60'RY<} '8c˨˅0 E4-6UK9a*aq8 &xMKmC{}Ӭ/xEmץLW=DEEO>ĕ'm6}{ob&Bȿ8pq!͛|Rn8xPfS lW508PPmиK%dr%[^ܴ"\|}F=-{-\Q&n 4";ܰ!#o^R͆i J]Ƕ8P˴u`Yy$Ll>а{X,o߾/{^WWK/ӟc{8%IR3od;O7fϞ=44|œqy/^~#w\f… >\[[ieY>Oz;wۿH$v;q#<*6p*ѡo~7"zCcў#2!$aH:-fV|ki XMŧ}B~`Oo R9afu]& ).C/0%R75k3cۮ˼F4 ,\ ƨrᜳ3!֭c 7c$=.ޅd <i{{?V^}}=>`YY޽{m۶xbػw 7C}_N[nY|/o1~;˗q}ѻP(̚5ҿB`06M( A!3kH @ BD":nT~Hc[bŢܒނspR8cmYe\PN@a:9-sAca3؎6?[[z~w~? Ӽ.z*sWW]wi>dRŋ|>/~N#缲rAP 8]9UU]ַ5o޼{l˖-{+Wz:o̚DURF̧)ZP..:җ| 5TEqv+BYb 'ٶƚ TmHg 3w%Evm[ \3p l&u:H64V!ll8kl>w]wllr]}]]]һqO_?gEQ<ʕ+{}cO>w1}}}՞_*t 0UZ{vk-SG97 B8l! kbsKAM}Usk]]C52 +.h"ZU09vX&뮻<-.lG_y^'F+**p8Ңs=WWWWUU˲뮻{9 .ܲe޽{?p8~4%D"ޱ1PaRVޟ/BqT*8gd1}Di !Y"B\մ3ΈjaL ~eԱъʊir-nV446Rf6>hͦ3J[d!ar|>uDn5!/@H0"Oܖ&Iw_߿cǎʑO}S9ݗ)*z޻(rz<-*9Op.~!466z4a ޴(MA #\Bӵ[n[*DtՙFI8pHCM座6d,t9r~GvĖXY"?BX%u)T"Чl |5B@o0c<I9cr8XH)mnnT6gR§+[묲jӛr/3̙n*n"ιB+#8p*xUfseP5M#Q}kpjPhĨMմ7%JFPLf!!A]0BR \2<-)+/SdYpe1F=?\Wc>|C{(\Jό'~<9i  viݽ綝d͹C՘ pm}zT)6$bV-WuP1qd$7R{z♼ش,/]X#Iu9- 11ZsURY$#fBȧIIқbΘv._9=8NZ6VpmrGMϿ!$E 93 yrˢXl"L齚_/ Ҭ#d"F s@o/ȈgB !<GGVqDMG[g}S1.଱6ʥ f*LN”eU%Ci ¡2_wi8( S.3F]꺌QνW[+X^)A\I <߫9 yoCWo?_ø$Ѫ?yVg;IdbVVմwΝ?BVeHH.e*L80%P` SFlwӦ@0%h4\ I,(3:l,_c/ۮbeMMsH0v藾Ї# p؉(ͤRT?E"+5eA]F\!$83\ `vBV1x7> $ .}L.pP2f|"웿YVl6oM7nVO_,e[W'\dkqfLO{Xm1}c|^Ń4 >0YV̭47OL CҪZJ1֫!tr_RF ټs@'N02p%bG"էCTBB! 2˔1f J2井A: f+.ግ  %aJ3| 1soq||S<4DBMMMׯ ^kuB /p-;vlbb²,䲷e ãWڵkŞ /p 7lذ~).Zk*:%4L$z Bpfd鉸օBo1t;AX2DD$u\溄 ̶I"!u2ΘP5U$u LJ"4!@G>yF(+r7´ l,ޅ^{C_ y=-`ǝٰaêUBX oMp o箾ԓӖ!ļΛu`pΝhԫW^^Ŕ+++9纮{QGsut'|7",YL&7nXSSL&ϟ u] [dɦM!K,y7Lz֭g)hESx3wB\q:xŽ=t;xK…3[woyޢH9+OB.bW3/$9// 3sw} 3ܓELcL ?,~IlQK @`"~?LDsL'ٟVh;z㢶 ˲>ϟ[>Ě5??zg;4D.`x 3uƦ]e ʷ $NVn Qra@\p*Bq!@ +oH$ˆ#@Щr!i3|A;U" ޔ\Bެ @ЩH #fR0l Dy0"@ DCtJˑkC#A@#!$8@1KiN\.(g.u(`>B`=r@H`& ! @ JHR|/;71WƖ7T)Ɛ;5I]ʦD,͘dNB$wLrrT0$"aB$d``s:tg@`$0Bxr#>8^y8BQ葞EFݒji)s\$̢ɩ.DLZVVm>Q@\1SLA Yusĩ$$ H:0.{)L""FB\po@Gf!'&kAI]Rܟ*_+ǖ!E𡱆+&! i Y%d$'Ða\`Md́ op?`3΍O D}`20|=sTTSV[ MVD+P$Y W Ad~]Av`&?dbe RM#}C" %uP|>L $HvO%rJF2ÃN.[?o*ѓw/DyZLBf9 6CÖ"\Hk 0FTL909˅`U`p=|l_K/&U@4b|*Vc9$y]|)ɿzP&jyHP5gx)^ċ0ھ}{ 3gb@s3N & 0+kٜe ~+_  ˚Gc(&dV,KT,I]&bɾ*c dC/H cHR@#nY_Q8|Z.Vݽ#iz.CpFI`r<߹7oކ VXZ!$yz XoM!Du[.8\as!afSj؄5A*! kixt6M%nS#u[-hN"%Rd#**eyT5`"dFCOr] BL_,dky_yOȲ#L6BrQ4^;wÇeY.zQ!pJOxzŕE{GyB+W.Xܴr's21lDL"Ødr, "+p"=z,r 4Ӷ>d…˜\q`vw.fؤ HB1C`e3L;rThDe>!R߿Ujjjz)u|uֹ{+R^xaK,B?3yuuu?OLӼ/^\$O?M)UUȑ#7tg֬YN[[[:Jak֬Q0 zJKK㎟󱱱|0LLL0***;訪oeI c9ZjRI0۶ ,T&$%*s2q4" rดunM VHS>yVv@e!;<ʪ{}νW<@UA S*"N41I:Cwј۸:ײmLIwV;m3 j$DEf!Q梊7{9z<Ѵ!]?*ݳ9᷷ǟ[=f.ꄼxsEH:z,؀P-~7#)?昨( +8zd+W[>,\R$+xK.?n?}.nmŊ&M={W\a5{즛n|᧟~f͚O_x≖M6c7nv7:t(JTL&~oNx>q?g?__6uc֭[ߔK8*@$b 0$H":7Vl9ЀDl6+Mv}wk?U.uuN~WGs򦌤cC& D;ڻН5!G$ kްMDt/ELiD"?00o߾G}4 ɓ'&Lrnڴ ؑ8*n_~جjTq9ro[Tcc)S|L&s[۷*6l5TTT@4 czW_}СCuuuo_] Yf뿹(0C  8M&8Un@vԲ<${mgV4_ٰ῾G2"\_~ϸd )~RDKX wLDFdA^$ɓ'LpEgqTss>ذaW_=fD5kV2b6Z7 Urysu#; J$o*[@^ IDATvHbr`6)?9׳X@Y6𑦑â *<Op|vvxS˯{k?mYp9gq #=*irBfa2حu*0!=2.$VX2a 2xEUOT4룭V^o߾M6544=GݰaÔ)S\׵93dk1ƴG?ڴiѣy̘1̜L&ǎNm{c8<+я~tڴiO=+Jƍg̏]w?l煖zu[ZZF/Yѣmmm?I|1bݫH&Fz;;;WXq7UVVVUUc&MNJVZu#F9YtKn" ֤uh 9764rsA*SUfƌoٵn<‰̜3e|)-]>--UKm/__Q]0rȚ۳?xHS)󄨊\?vx#dJ3/7Ov10J5dX ٲgeRG"_0+PI\+Ej*o-54|;~IMyGoOx>) o<_xDdCsc1nh!p:0BWƑU*y@ N%~O}(q+●kK~MS4,9kVUVO=k_I\!E4 0ecS/s˴LѾ}F':yHc<.ъ?'A4-6pUfckBȆH9F^Yw$ OyEﮫ?O$*AUfzn]W;NCyk˲R&uw##nT UڑYeׁC,7ns[8AD`3`P0L!Mԃ` f0p@ nbgP|٩7MGDӁѾ@iOH3 ƒݾc/Y)WAưNi{u?4׫u 0Cl8JML000 v"Ξ" ,/+A 6 02 eYDy\L:KM>0c|mizIG.&P2G#BSȊݯwIt ICf2&l.L:11 FK.1˶l Uk6 hm+BbL<3ZB+H@6UV՗pJf j#:Tr 1o7aoB="Q?M: 9BAh׷~:q"HwYQQK/`ٵk8[n>vaÆ1aԩS u0* r@o޼+W"ի]ﯪׯ_ѣGqKztwzj!ĕW^ݭjkk}ȑ#555tzԩ`ݛs΍FVJs `ƍf:Dc ߹@nTҠHG±u3bRDcM͇:=a "2+Kq\чɃאH\,|UpjAR60 Νe˖QFmذAkAkkkkk+ZZZsQ*)ʕ+/L&SOa8cǎ 9zh{{^kٲe˔)Sb͚5ӧO߸qcotRoKnDLCBA+0РPk-] |6.P6g<J:^(PV@pںIm$e\2>v?0DY)Y9;.D^JA6Z`-[L0!Yn`fl@X۷_tEVðKy{*^7*6YU|蹎[k/߸.*pBW@xijjEۯB۷?6GJYI~w},)+.\(B؄be 8_W?կ~UJCT b b}1d`0 [u+"+ ~F jb,vg[_ f(D  H)7UVV$ ̼y殮"ZdI"#G[ꫯa Yu,^osM6 wرcǎkdccc{{{yyy,Jo_[[8ÇGiʔ)ƘC577IƠ(S|W8R@ Dev$v)6rA\H#jl/-qYBdD>0>Y_җ~?cOOOsss:]t??{wu׾o۳R`޹sٳ صkמ={ϟ}ַu>{udcǎAPSSbŊ믿>yx ={]LfϞ=w(~Ç~iӦe"ݻ@P ![J_?`D*0l@!TXp@ E Gdd;G29uO>D'۶m+6e,0 -[K,ijj?n;wv9e+ s̱/==3'ι8H$lٲE =Fjgʂ;ʑKaWJDQ ^PЎ#Al<B) &%TZaPk`JO=PU,i_Vf2|6 Cu;::*++Kbh3ۋA8c0 PA#H&Zk˚cÇٵk >" KDT%GY!!@UUK*` bYaԷbQXn!v` /d d0F`O;Eo=gcm_'{V$ r,Z$+.K-TZk]nvzꩧ򕯜slLl"$ot b_ !NHHAa>'F"킱0  #mBd"A F{d)x6#jx`NU5gq zFuqJƘDǍF"YKDO$0] + I"`* vAb۠TD$8aA#X>`p(b6ml~ee%}򓟴Lw +L!ܹsgWWgׇ<,q~_p gVΫ,;r v=`C¸#=a<.'Iv$GGDG%F$<H!W"бY}%`)X D(@IhIGK":@G)KaEoo֪k ^JL&8`~DkH۷qގqZ{ک{Οn~+@ĵk8bw p#rb+,Dv\0"@Av@`mJfZ:>voW^:Ǒ R޾]}=ݩt*dV\$:A] 0O(GD?)uMct ӳkG>N09Rvxbإ^j*^<]'l6Uu;}'|rս7x97u<@J8\!,X :#ޱ9ܽHFymKn?[쓛ׯ9l6 Uٌ}d$#ɰCp\)C Ppj!y$86Ϟ=GxuY޽{7mb'gyFsNKkc$\tioo˧Lr}}c5k֧> H" &&!k~׹[`G Pb@h_" vp]ǟ]448iA c'SX(XXMpa6uЦD)L.3X)NV)zɓ'7551ի VYYYWW^xᅩSF^m^}+._@7@P*$A.t2.{eL&N$YcTWג1bf` cQ`8H (@nL %|KG[jqdnW]uU1QֶXVVf)V穭-n0sEEu=Wo&Qΰ}bJ%y?H!deYԋH9u=z IJAUG= *Ҋ5(FWЎrWv4]e5Ykci}@XdcuĐ03a9toČXKүYa"aΛ7|?K9ҜIZ !N@#$ c@q . W4AgJ{57]~ڈAZ ߀Qs==)WK(8BH8N$8BHW8K䱐|),ĝ{6&/,ĉD$&u%0"2@B15:"! R>B0JT _׾|ᲁM]kYYa#@ȑ֫ (* Y0Xo s70k5("hhKƇd ІaR" A: k/V8e]O؞:ј8R * Hd0l ?hb 60Tc|y fGsq)d#lBcqA¨ ]Ҡ' "HUnD4WƐpD.gP@h0)$D)L`40kB ֺ.I abH]`}](uWXFѰF-j[? t9\[2023Z%a(%)e(BFVIZ66hV +Q&PHfc݌ C B"!\cQIDATX cUXN7nܨfүy׮]Ǐ{JG+ 7lp饗655]Vk]^^>q{NJ9vD"~zc̼ylƳgƍ'Nliiٺuk*6Jy1"<$0P*$@! ah$k`hd.3LBa2@AiD 0Vlx&;vD"}pnllL K7l`k`#b}}mۊZFzb3f޷oߜ9sWXQdP9sr3²C u$7 毜 Xr@f'QГctE{ep+pFÇ׭[7mڴǡRnGvg_}GJ.\8wܝ;w;_LRsYlM7ݴdk98ɓ_xᅾ>Z[[WZ߄{;˗ϛ7Ζ)ڡ0ϫ **4!D>Y~#YRT*H$gD"a( P|"E;m{(]bYK$2.R|IX7^©8CpB. 3g ᭠H>}zEEEuuiO%nzk/xcoCKx1D"Y >w y8br*[g(Kuuu Y߿/~o|6?|UW o&=m0! aC0!\8g ʯ~~ nsxg͚6l[ms3g(q``K_i9pR_;ϟdɒ䳌.Rr-7tSv4iҹjm6vl6"L~c?jҟuuuK,9zoۏ<ȹj+tϝw޹e˖s՞Gy?i֭[?Q;Ύ;`\9A]]]KK˝wY_zmmm[[9iE;iL?KwG?zm}߸[ό]kmm=9pDaϿׯ_?k֬s3`͚5X$444,_|-Z4a„E-Z׿5 2%+</.ݳ`ue2sD< %FmN/wݻw>|'?sx-Zd>gΜy\sMWW ZcƏ 7\,4N}wݽ{wwzsۘ1{zz-Zt4! aC0! aC™'NIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot18.png0000644000175000017500000021774714717152071027544 0ustar00hanshansPNG  IHDR6w,>#sBITO IDATxyUu7}x g~jzUJ***TZ~Z X4A愘L'g~{<<9 ! Rk]rg?{^kkG^☽gv9 s@"$@"fDx =B A9 3y$"tG;c;E湳yn@@{@Bό]x'DDݒB๗ƓGs)IJ%T^ P aEF g"`ƶO"x P0x(kM> 03RGBT$ $Ͻ00 bx 2@@̈'жޭ[2WPJͻ;50V?1vMCHȲnJ NGB$R]?!!"B1qI?usOnuucOH)8vjo6u 4j"[디DGR0}C`ރsEA&Yb\F{+kdMoz)b1|CZxq`s-oy[ooWfc̾oey;m뽷֞vi~ҥKʡaޯnƌ1A^5f?=3C蚛rmR*ì\ŢH{ ?Wxgp폮y򷗨 hW?`A?oy?>9]FL;Ef$@ tgOz`DO!]4s^p[n]b"u]rʩuVx^o~sѢEp /{ˤW2|s{[:22q|g;޸q=ӕ=gyfUW]uGXn_J)c[7~jGKRJ) AD̈hyq?VV͙wN|t:6>'7f QDQDD?x񩧝?zp)/~vAڙ!) KIDHZ B/$!!"@ص"& TwpA68/i^_|QG`z֭RJxm5S1':D~Yuˍ1_Woypu]}՗\rG}'pW/7 _}NLLcHǑ{ncX_kJI> (w/^ӷoR+ ,[Ɵ\_TRw+Wyg$! AJD*RZIAȂP"!,9͏ٚhFĮtsӅO<\~sx+_ڲeK X/6m򗿼gðmێ8∉NʕRz׻;^׍{⦅gnַ;C? %DrkS??{?We{ ,% ʳ/_xR("#AvN~i oŊUֹk_j}LZؚjj$j;D̎f3As|{{!D+M5Kï&aJD/x۶mW_})r 't;=s;+bݺu]>wźcpu⦛n*Jp_tE]vُ38㦛n馛N? ^s5+W<^c\XINON>tkyfBR?(`n#8P`RF nZRzv0$yݲjLByLi h C/2'Ha> ;`q U_>8czʻs#0iߛc̫^f[-M;#; ~կ?C)^8]ǃ9*[Bljv;K;y8csףF@B `F&B"! oM"JEG `ڴӖR (I Aa`y;9AH(rkc5'?qɞސ!\ xJ_ro*VD~e˖:j^@@/6m_fMڸqEFFF6nܸt$IfffyE׺/ssn? k֬977 ƃ'DX<Y<>ِZ .e?|5U}7}oYibf7> f=>.޽;M#8?)8qZ6E_s1>h79w]w`.-1\Eh5sძAf9LnOY1K+o-NT5kvl|a?؛cU7Vܥ?[6DQ#c/\ψc)@)533Eѩno׷Z[onP#Xv̢EW "֭ <33xbx ^P7n[~_m޼9p-#p B"*;;gff֮]vڃ')8=+{Bn8xIUQÈ⚫j|}|&KymX=|?K#?rw:ŵWG>}իo]vիWK)… ƆCb`n[ӟSN u5]v{챫VmGuTdZ=#Z!;w۷Ffm7[e9H>M YBz#Rȋ5RZ¥D<{I bJn^73?Ң#+0:T?YsξO?kZK./[;\lYoeuykK,ٲeK5v׷|nz/;Zmٲeo">o?s~r~1;R0@')xaG.jm_C z[y  Њ/ {twW/KvxDHm׿ؙ'\A}djnZڵkӦMEQTU}/\.yaÆŊYy;v!ΕJ%{gӦMZmҥׯߺu… w====00t~_3"Kn޼n4xy?ָ}I|^7~q~"̴jw. wn2134j{`1sa~V1uEY1uz[ ݾ<Mv2]m=X{'Ƕ><UEV&3xFpner9<[ IR@^XgB]4]nfZƛ?)R)BI {IBHljjTJJ(bU EqRe\Jϳ{W:*A\#x0ҥrErYR b@DJ)B$R:i`;SKW)g R !.q@~)rk8RJf5TRWuk+HqHDQ7$/z<`e^J{[{J8 fޯϼFTfDUZvvffu MH{!w:M#k-YjR :CDB@9{XAR%I(J"UJR{ i"5i]F8REJ*,+\>TM<(TqTⰷvREJifTb^/+]± 캼wZgj=U*WJD^@>T#@PZXU("i!P:Rv#]yfYR(4 zc!!TI{$YEHR /]Vm!{ﬓ:τ IDATb@,IDq$Kvh4<4K-8ZyffX2RDXDJy #tWڀڰ{"OG (`Ӓ%K["dF$J {9G:. $IYXKB(ք2$eY3=9.tZzvju!G= H"!T\l' )8sjwJ)l}}Q3CR*/r$c BDTwZ4v/lVdMQV$J*lwʹ LN0 !b=95j4{@d g:N{s"999ZNDW*,$(byh% vK^JHټ B@!dEQTF@I(ӍfTI$" yag5ݳ7'ja s.߭ӝiA;;}dn!z}<%qIII}"x\B lDŋ=X^12 o`ٜZ$Ԟ,LEq E  Y୷ (KHDH(R:N\aJ%hLV2E5ziT(٣sGJ(lfNkݯ}z=nu_8=HVE/xDhVU+E&'zڲ}P__"3kJ={"ղw^HHJHd!u\esFEQFc&uAj8 )(QU VI8XD@8))%3{?335>:3:iVYUk30jh#"B{w{?׾/~9?DŒwL= V{jZߊe yܮiݛw7=|lƍ7odgٳ}/ly_W?ݯ멩0giw}O8wxS2*ל  o~t{fhwA ?uW,鸢#mۓ?dRty+%T@da~`%c٨blUk߳{`]&HzcE c]^ yGЧhD+TΛZ?+fHQ9H<|s׽cSN *GAsRϑv۷u]333't҂ _jpޥ3|Ӹ !J&Ѓ kx`T5& 3&+/ϼDSS[ .Y6RqsCVTiU#Պ~phϦ}PW3`HljR!WTe.BKs 0af9":rZ%2",El~opYeéAH(;q3l߾}dd$m./|ʕ7nS )eI=J$Qˉ!;Uщ7fظ),XEƌ}#4[y OM I*O0xI53hEj%!*&d4W.tMaB"u;Dl0S bZ/ɿ#:lxpɒD :@#BJ@bd$bmu!W^ {6Novkv3אb3T>рW^ye__~+ Y!d{{ʤ}R uuP#Qc֤` $D:GVVje5J)Iq)%3{ʕVj_iEJluRl쮝;yLL7[ǧ9^jgF"dR.菞sZ=҉"AUVjZ @g=мe 6@O^zŊzjA藾{.3;CܹIE3cq}`()EQE^&!ZI)j^+MMzJH󾿚$an {s䁁{oG)/,;.U*%)3[ݙnBR볅5&]tIgE'_xCvYrw^MS*IXRu @tZJJ%g/\buoe")S TՇ-lQ8cZ3syR):RIDj9I(Pz&/\B5y 3G oxܜ]„ओNK+6l dz``mVRZp݅ L]$E֙E^T,^0)r891>961g#+T*l6ޱ:,p5YՋ׽ug.~Zkf+]?5磴E&c}ޞI"Y)Ӎ-8B!ں9ZP|xu}TJVF'ǦSL+[?:#+VeNt#˲<+b˲,#DpyԞk\%.gEFr9ésVy[p;\ڰZ?#Rl\T9ޣ:oh/<3o ^sC wQ??\rM.]4ZjUxk^m۶k>9眾+rdd_bw)/V0iC!Iњڝ- 4X-ϴ[ l6fu("QFJE1zI9YzE$p6VGw+H*iD*KDcc :[JVURR>95>{˭)%Lpֹf| fY{=6gJ)裏g?|ଳ:묳zg?Yթ[fYv'$tv }}}FV]tEzk^ve#r!_n{djkR#KjC8sB ԇjt{yKɳՇQF,$ELfYxxp727wF*)u3PJc-UcjHZHKkN%ZB'1;7'@D)&/:- oC?gRjyNZVsZPZa9,Ԧ[e˖뮻Ey饗^{0'{ynLD[C~>e˖dzŸR 6uD |,&W|_Zi؞VkR$vv3==mB d5{筊GeKVm۹{ᒥ"u)Zhh2==#(gJq2=5᭙ڍ8.9oCs%"IXGZGQ$ID@~M(-46J5ZMg= f~xՁ;l*H&&&^?Cἆ>s=묳-[v'o۶ޱc{i?۳yk_[x#-"QiI/^ ILOO;I兎4u7 {盍5ceN8! !w{ :(8餓^WЧ0,Vw{8{:T ܷ|p<t@wҍ{}"=th3%IJZ?=wleվK޳ycQ*ڍXB)"x@k{c)*5$&?lϷnٶhE#&v R%ٲik_tu9 W#<4O7x#h% `DkxoSO=o~y# 1K_ʕ+OC<68䓿կ΍7)wT+AoZk県(F ]5Ʀr!%g具\icG9j8k-[7Îĉ^jG6Q$%,y7L4xkq$".-:| [ ǖxSO 3=g\Ab !*/zыK|'BvD hu"[tD ւR_9޷^&sJ-YJK:GE4wU-oWu|>3A,[}m-h`hwj.NcșBGٰiL푱5zi4Z)s$1z9T{%# ~hd#{.YTTEH%q<0T߾cWPP-NN7vm`!?ܞ#F,d$= cdك Mmlݾ}s:Ω\;/uCxN޻~k}[񷌑RkxPa RZJed6χ/iss??*_|w,_^cqjo4V)⁛ 6oaP(j;nyFL_25zgJ3< U-˥B@EO>Ͳ#g ҙz{FČ jK0T#Eyb(M,ˉ5,cՅpF{aAEaMh VYd gL,&ZfJ"ϥ* R4N6[4,|vB:u4n1V%f0i5m_qK.Zkz$ih6Ifݞ$ZJ)I$hXS4M.둈4Xb.,xsk'r[њ 8A5VkƘZJ qa 4흝Z9"Ɠ^7K+^ݽrڨAsAUuUdݽki#FiLFV㸎+%`dCK^N=BMhz_N$ =ǛƑY[kz~ꅓNE'EL?BKE@PA?#q0oi+4ݢf(|@|O/& ~Wt}O3(, Gsx˒ZsđW_B)i4gqRΝyU}C??.m 52~Gi?MA6Y1v8FeDZ'y"TQTh T;{#O65_"FIVV%!ZZB}l7^YIYZ KzlWmsƌRFC8p]@Z!8 BG)x?hz^׺1eQ$T4(mK;yCsW[y^P(Et,f dr7?#? C/{ޯ|+{{{p(@<> (ߓ̌[N/3g[H)Wp4$,G Hɴ N(dV}iHVXu `ThJ)Ui}?_$I~g1<?pZx[̡Moz;y駟~WWz'|rVP=y4dT*%t:ZZyB,R&FSq:z^+ gF5;hf`5"yl4Ώt9??O;KFSkUvg:P8 iQ*Z"$ Gu "ES 3Gpܪ0waxg׏˄ ViDX\Z"Nscz/˗)?ʯ89?x̙f|d{{ӟ46J/4˲//0W %_׍w~ !Ǐ_\\1uuu/}驧:{l~Wpx[OҾ&E;ƘNC<'LL= @k{IJmQidEJ]P_ڻ{}qPQV`ITg񣫁^9wy<&kF{$\ ׸_X\xy<s2(ңX7 +BBjsg]< ͧW>~qi}-eZ8>?~k_>G"%JMoz8eQk_ڿ˿lZzfY^\G/.h\֫^$IʾVe8'yYJioٟ 'xbYLϻ0a*-x|yk-1R[@ȵKϏ'\InSi2Ҭ @2Z:bwЮzr !gRYӪ;B8Ib0"O ZJp:QE{ly0jqeiS )}j>}˗ZFirmevf[ke56 kt2Zx<'~Gg=sՏ|݁8z駟|O|ϟϲ?d271[ʷmGy5yTUΜ93+R|G/;v3=ϛYsW^x__omm#Gw|cviyiX{s!ŋSzǞy晧zɓ>¼z(?rvrȋSو=;hyi/`]vvFrf 7wrΕRҢ(JlTH?$+t z"ɋ0RcR`TyA٢ ,) '[Hb<$vh\I% Y/Z+ԅ8jЄk,Xp\G'ً%GK^vee}b~AibtKCXٍ ]9FiЊhaHB(3R(X+-u)apΔ2 J{|)EJZ!ZK03|ϯ 9VZ:c奥[ۣi[\][k&##G(B{~ ZJq"EqL<׶(ܢRV[+TږS *E{x؄m8B,$/YwtBj?k%ח)y"(ݛ`4ԑʥQ$(8l\qVh5\lR@00ʡluP@%T/ @fQ(eNZqVj҆p*R&8X7, qk Xp]yLCxFU2Kju%m )R V $` 07yblc|PJZ` !u4O$-yάŽ8/DhTxۘ۟ -r/$@\QP0ڠXFq9]mVjpJ*- e\hDK)8GT\"s9Ods^w;']p¬h B%*alɵqR\וRfE~`$H#I8A<(jAbF>c mQ{]\%6fU'HCe ?֬ZWs8+s8BhV!jQi L&牊Vk5{{R\۟,WT2\?x~:, )hǡVKJ0O#zq8`h,'Yڠ:Їj 8Rq`>qK S._ڝ(B]ʪ" 4 f2T*z "!HXX\~~w wP,66W,;{QyH &p9ժH 8Q!F6s fV;) `˃a:a-!P< \?;X b =Jy1_;o(-2 !9tQwoVu4Me)?l87۝瞏汵FN{׏8Ats4׽Zu݊tƅBcA!uǴ !4 h@ ߫>lXZ,5xVewLL9xZ"\4 կӮh&NLdUNuuuyia4]6NPkm]YX\Z>rڵ+>)P#varH })Q,/WVTp%]bZesuye}[R8~$NtЅZÝR 0;?Mv>8N,Z ,oMQk;*iYR\|9q$h* YPj=buת.RՄ$w8ЬViTiċ+Kj+xKQ J5[q$Q'cJ!|g3 #+K=56⻢Po/@hk ֶ+8!p=ݯѠ'{\8qjAb8ZcAr?0cL ̖ e> /Մ6y^wt KʄWayajTw}hkq^^&JVIe"vSV%RхM$)q5%p0\Y]\7MJ+Uou$L¸B[R\ikLk5()ǃ&k1 P* U9F<o|01{xck\0bB(-R`Xx.qxQ4UFI<Mfv\nQG0V4j4rkm.0O;|A |j4j?~2"*Xp"isaIKfj7Vyy8WQr%\Kiu,q@ع*roFP֔w,2sΘvB;ϙ?͠,ZˬS@^d!HT4h-\J^H}7pI?tO+펚M߫NRLw458Ff`$e"W j\-X`ժS si4A^AN b&,"4ٹ6{8+`dE E"A4Z[RJ`1 "Q2/w^>v!d;LcO T%%u"1R2 {}AӬ̥.EԄ:dR ȍ!c\Gkɹs牵9LIxRV+g)XRh .x)1 &FIHx<u<ƨ!LPqYcւ!>dYjUpFJ!b)ƀrk cƛ7|O>|ZĽ#RGLLc;j( 9 }ϥ()eI./^vyisE?p\\XX j@\XXa,J4+K)8N#Z%iőHRTy^ p8\Zl"(덶,ݽ0nMRmA?=_CPߗe1qfμI%Zr8z|7h4Zp]#PQ!Tj6Ȑ0< gF kkjӨ+՚5}q!hq={\,b2Qi_xi=gΞp>L(vLIVQ`%BJ5$J1Ƽ% 7P*R7#w;@8NmAk=_&9O߿!z4:yZZm7;xuw7{BM4 'ӪFC0jg`(Am )7eFJf[j`lR$ Q<5F3Ƶ(@ * K^XY"JK4Vk淖ZZJ`0-B#XGi&ƞN&Q^8$yaˌJe ɹ,S9(fn7AjyV RM`fn/Ûƃ0'N`R+i!5X[ݭa[ݽ [4ɒt8FqWx.TݕjB&q=ZKeQ }9ߋr2\BK`ja{y4*RЬX%ѕva*,3ʘ6EƲ(Y4Imز nT.SR8RrPe:I;Cb%Y|"[yOƓŕ k`o—1-HmL2J:$zljٺͪ'8EWpkR]TtƤi꺾^J,*M) Q8}}O; FӨ7Ө^iYcX8G0?85`\+'Yb-lw=azan,"Zh{vC"@9ʲj7թqqp;U@_d'A-Uz8`g딋#O,-%Q*bs}y׬x) ZdQ6q:,RT,vPbG2 Xi"]o0ΘE VWW;zEbwk' 6L{pƙ2Tư,/BlS7BfphJ߃Yx# p\hx̮m5hzut{?'?zj*+'(&n;i:2f0nmh4Z5*>ø<1bE!@`@DZ)^cQpiU,TYv8Uh$"Z>U nFJ+DH.ĉE,Ɯ /#c= Z Hʳsm;Ϗߺ/|E&R&:>:mIdf,iMF/ڽWt[xdS艦zbu%ϑ8> }GCמ:/T GQLGѬTUl}t!KmeAВ\])o~;͵rIkWMF3!onEq\j`"q3+fMČ-ΣnVew4vegq%WABsaDA4^<;&DzR @Z Ǩ9LkLKuAp c ,<2C *^Xu?|ЃU0^ QTfq\T3u|-=yiJ߽{(h}'O>5Rib/F67D$"aݬ"cb O3CS =KcknYjotu9ZI{R{Qeuu9׹_yg@/,MF+}K. DR8_Vn$gY!2TA 溉mى>ɲfUm4h Qjsel>!0Q(yW,(c BUhG5ƘV$ - O(K"TzBRpԢ@ @?񇵫$:㭭Qܺ76&F?g@)8NP̚(Kۻ賋Qۆ>blRVKlkZCq ~ x$a:k(+fSd!QD\d'DD[fQjcLHY#l:WlL&Fq*ml%n߰h%0 FZRKy7(B[Yӎ"MZEEi|l>uk- :k6uk7vGI|4MT4E4ud;ۻm;DWA\gC]V^k'in6DhHx`\44U"jO]2I @Cc""k2 xhk"ƦXJ)B ('0(@"(G{E6ңy}M999{oxǯNwnmMS5XK@ވ8MbG0+vw AUln4O_ݾ훀dhJ1,Jh&&+?[՛N}bfB!A$ B@!(RMNc(Bm l2YβlU&gh j"bo>|щ,T%@"L#绷oTU]Nkzl2=hwMT6wtqt>(Mٟ_dYw>w7x!t`~}4t7xW=vZˋk&@Da@}C;/r䂰$2VGJ:faBTcc,n*!5|Z֎ Qa#6Jpݺ.@5M:y|Nni([Z$|<'E1"`'t>==[u6H˗Bf@q!˽Z\=^5nzd8 06`nUkE{9AA9A E1ULJq"yމ^JV{onhugg(Nd<(srXUڝEd\s?֡. .P<{_ee]u[[6_ .rͫDI4|pnC!y+)W+Yiq{zRCmh ѐ4Ybn'qő[-E@i1)2ԇT& IDAT nϊ2ll}{TJia  eU?7(&eXt; B297NRn?tb~~r9+(U;8=uoWPP*4k‡DHD9h@@hxrBVVU/)6 ,jBGrkRD!($Z75CMg׮vBFiG/^N[ *ӧ2+UUTMUi:o%I`XQGnܹšyl6͚|˪|p8@>M4MVZ k9H(B7 y=K,,!8L ]@JeVi_&\\V P4B @bVWU DWy\UUNAl9e]ճTk]UUw;y'SDD'gdxqȚ/_=ӄT]m"e>[r0Cp8o*tޏ(0!{4ѯ3"@UP;WVt‚"`(X2\Xuh[g}:__Ez~iB!$Qд0G"5:\&7B,nw#e iž\ b}{XSOf:ӱp:pyc|<:w4.ՀCBPw3e98-gRIEAѪΊ{Jjzf[[Ñ'|ק}g+Q,} ^ BjAM d5qTse#apü+$7wvmjYŝ/^߾}+"YHLg.keY#CEkkjByR)lf[YX:&DY\(,}/jW \5x,e ^Uii4ws hP 4}&5zM<] .Rϟ~BZpr# !*%D"T^'ILǂ(C8Tss޷L.N7<]]Ez*@A! Z /ꬒ30 ڂR,4KjEHrq]@wӻՒM`!YEd)WW/"4>\ A_SpMKYbsA&qtD`@|nl (a!@q(JP@N2B2Q\hgvn"ɧogIqj mTXumSF0UBh:bv}1^}'e (_T%,JXv؄e+!XLHS'Wk!?-۳"kZEFnZhDhu4jWc\4 C\jM^u% AX@p$haD!TJ Ih FR#HҤ!h`mwZi_$$IMy2G.տ߸՛7{wQ-'\$N :3Ѣ)@m`qtV3Xa\6ȂJ.5[ߥ׹x*oAm(Y-r4k%W];~a?Qno3 PK1o~Z򦚏@g$`[E2Vi:Bu5c )"ml믯xJC-|0 QQ/_;9"(5nm}}c2y|<~:G$4?gz :A guF5oAPY#kdL J]mhP5 BV'A(EEr@Q(?e*F/MXj7Y!,@DZ(S (dp @!/L,DƜ"4mZ\Fq) "YUe ػqVi:%Z:/occJo~o[q{`Yo~L* ʻ$Y}_K擳,fe5S6`ȚKC "\W|kh- w2uDqa?:0SD{ jvL5/q BXɊJ VHYDCDvY6Y82YDrAZkGe]EaL&a)Ny|w'oGϡy,Nlz?{㹞u/lT=)x8،2%t#j]\pQ*Kԋ!t^b@$x+ K sOe]>[r+q] (f0Jף5ڻ>{ܻM,$䄏7A" S)l$Q)B`PRi#6l@LA!Ң\&v?&KyMg>ޭ8NLr;o?Onѳܹ㟧{M;l1goѷ=yp?/|k\ :L돞Ob OͽR? "᫚fy.{F(Mׅ^@ */r7zaԛ^:tP0 bYU=,$-/B+Wo?L e%z H;O񘛀1>|E`{FCWW Vg5z{# jrkV*JvGh5 )0\U\ CA:!6&keU]+[vݹ^\\nWǁU9=@óc{;7wjl<:'O_]~ѽ㗧N]eV~rQoS:(Wn͍X4֔ UϣjXQJ7x"VV^pz^% q`MƷud2jeIDkYZ54! {-;{B\Z/ ipiz)bCߣDc|6{+HhE+!> *ah(JA(֘k[[[Q")"iv3NNqrCU4 V_vr2Nώ/?yQ۵'yl$꽷{Ygr<JqUҸ8 wF^8T0hJmmeܖK/UX.]`xLb i]e%>p'~B6N=}nkkV&烍mBuq~nrpb12?szS-SrzEvzVPyPm BWG>$c]}+-R,W$h0λMRT]hELԄqHemUo7ktΥouHSiӥ(BJcƦG!hDi *( qdZyfw gy6Ylڨٹ 4RPw 1q6ѫz܊M tpȕNHC"4fxj(WJaJ1T۷񇳺R5aQ{g^W&Rwߪ߼ۻ8"(jgCPPdxv{^hXezW AvB%'F @ <B QhJ/E lXڄpn{rE"&Ӊº)8 Dd T|M-oG[%k6V [=U'1V SgιbkN^}{&2,!ھq{Gis>L'm%S4Q%}M=ARc?b 3p@Vkv( t4<}: UurZ0=;~R+ I\Lót{ڨVK26Ƃ꺜3:I|1]U͍Mnf4jWf,ї|01IKKCBǀ@ &_K뿋%i,JWAg*9hVߴV @9J[-ι8%TBn>Z(gGk/_]&eu]'CR6Z?u>8ob%FV:`81 Eq d1邶En[P ڤ.~Kgon}U5m811^;,N!()Iv/S ˠb֗XeaH8 ѓG5+:=+wHOh/ZE;ZB>{hX䮗}-;]|eJc)U4FF,K1SA `9{kqe1^}f`~kz^>\]H^>6ҝYC$`k_Vah{}hL1AfNblkj`Ŗq%x_K?*}jЗiENwǛx:[Dgo &~0 WݴXO^: 5RCE"lil8M[IQVE:VF(Jb?^^nm||EEtf䴩ֺjmmoMSm K4;;qżGQ iNy}cKtX碨niCRBY֭trgo;'|T>~bkx:I,ND:]#xcx2A=$=wn] ض/ueJ+khD!̵{tfkeV>Vf&@+ƫD:9ډnpIlvZ1٭.j4N{r [ Jڮ_+yY9O Ud:oy;=3Fn'6ب g!x"@E@<Ƴj0-B:::Q*Nc'"1o˦͑bڭݒ_5"L/+E!:ɽ{izZMx&e-D:s7DQYL(X7z|4q/޹9WU] ٳGdmM/#BTFylj\d)nFD(dMt>=$V/c՗t|?4gT%Ee?s1<2%g 9GiaA@X,K1ִxFܺYfTF1,E).K|2z|f]qO/u}cMֶ6 `T}Γ3AR=oodoi惖\~o䭓IUOAۨsYUcSDi;Œ"^ɻFhE?Db \,D|]*:HӒ B!DZ+ -^ !L.Zr+p94Ѥ IDATQf2wHƦf2i%B W/.?(˷d4 %]_t.jRyu56>Se%`",|\1N?xp!6i6s. 3ƝO}b#~R 'cÇgv}~p8YVvϡ!IUͪmSO0}%z*'Y3*#f3o+7>%^ Rɧ?ݷlRH+PilNAH\Ewu|6=Y3J0%.qCcy|tTDgɓȵ}vʟ83N b4vIyp2~rp*cj u4UQtxZR3/'9ļ JKVzfL'٠ݰY %VKеssL4 "R׎AI!*DFуUvq88DQQd\}цM%(UbӸ֗7}BfrW76i-!h6zGkwr=Sg<WVp\fo%aA/* Fl6 kkN7Js1\h9)8P<ݛI6gIޏGN; :ɼG}5x4Ǐd!#s^46DG .9mFDWez!6?QU4h8ÙB$Yӄ{7ox!9DXC DDK ,*n`R*Z!ټ?@M|xWڿݑɸy_Y3ΨQ8(!Ag/íw^VB|^-,~kMͿ+P^6N󼳾RQ" q;}'IijW_fr6lp9Iڝz|q]OU̻i<"Yڵ()n#𠆂:]WRKl18s|ZH 9..Ђ+كG 5xſG?5YV+WUkiE Ajqb-yL$b*vJ |5:/k@Z8{T^(g :8q!ަ(=` "5(ekwBXp,N м^0.!ƙZY{ͦ-.ڄL pj686ON/숀ZNw>q'Vfq;O|ix˧b(°L!˃E.VxЀ6D*'Lϭ1v"Ζ9 ,ȦE*12, 4 ;IӪ!.NWHJդ $#Zd,JhѲ3NhJgᴊJ{91K:5ȓ}/u|DalV*}bpzZodvFr^=*3S;P m0!bb\x +ǁAB 8,LunRD*γ"$EY6`ۚXϦ3ppV?0://Fv~ pVR֨<(ɊZ5-CNIN$ټ^>!iv4mR*]isFG e'|ۮ7*2 B#;Mb爭 mz(Jc90 ""RBB`<\Of}rɾ{>|*M7|Ñed]uzQgi{ ^כX^ak}TUnߑ8HȔ%E5$ I o1-H^ ,qdXH(cwWx=}ZyKRqPS88﷿akϟ9m#(%cZ;cb)B4f<:}y9i{g{mzqs]" (D uQB[)@AH:5<OTnmwGG)љ.*amQ5?~7}"6B Jb埬wC.sŋRx}՝쳌,&BL ȶ߹V^nC-R.HQ0!g*DpzqK̜Q`J ֘ڻS(JjBNSi=Az0F"+B2K".R(5W/Cw՝CD"#1 D~ ;α8Aj#P2m ڔf>MOZ ,'f~v]׷?7lఞ`JP3̴>P:i2KunJp@>y/_ySeSQ9ǙAS7cUJ"o4ՠ(UJ._Nf95vLT([]'2W?}zsR|"TA܈rjs bJ'r?|ku3 0D7_}pyM?+I.9<:G puoe0ǁ09Q=13WD W[d=*?W(;9۝Dʘ([Ȩ$@}-c%~5G-*B#at٢`D!@AJl2M2q$@Q*D*S[ϯW妨ENsRa`eL*v! mqis~g-N\UhjԶ,$ȩ P2.S=T>~ҫ1!k;uotV׉}?yo;75RN1E@9KY(S ʘÍZC@'b# &FXGFIz<~l}iXŲ~4aew}woi⤙7') ϝ9?|B|qÏ8AA}L1 |u"DV@P̔AW((7[<%a pKu > ExkY)q 6WM;ik!JJJgKIџ~y>8*Pzs:[~תJ#~'O.\YR "Bdwn(0%„SJBȜpN`3J(#"!bU)m`{!cB4tJWgdN/v{xngT:ysJ~$kE>[SNEϏsAĠ>ZAwJJ]V8n1+(  ,*YGG67WRWޜ۪y0aP S/j4ddJW3fB[լOOӿ?֟_<^ %DNPܑ_;9;ߦM̂US4ַOC0D~ՕR*Z2 )|y i a׍V+] AD1%$"d7 ǁQ&kC( @UHt8wuxQrx@ 3.?S6gnv(ڋcp_ ':?4ë_{}D~1wJBb@}D$STZĔ93!$F< !,*qۏ^z4tlQ.Y]_# PLK?7z/}W~g_O?O^9n0O=~tw<0~uP|]/DW~ZnRr܆EL3{R@ɥh 3M $ݩ'H.U*B)tFxY^ 3V0xRF.T:R鹤)ϾtqhpL*(YNgNO]K?S`m.`##bksXq>9{CЅ@ 8'ȉL6e E1[o7fytD"3VEYp^*ePpE%/77ٮ_s9k&umR)̑752ѐ ^ɮ]Wnx/򣉐SdNV3 njSJXUfFl8gb R2b'0ʀam(T\|Ym鎵 #$sMЎ Kub?o5n?8w/Mu3=h|k 0'ݿU唇o&j"[) 0 2 rp>~DϞ=11Ѿa0lfٵ9U5Kb?_V=:Nl }s; )YJ%]"z‘D\_W/7?o R`9y}v8()ŘfwMjI!P n[ֺ Nme$`ZH=szR/"BF"G2$ NH!b+n2MH!KK(>)ʙ-@V f.U/@dAIrG@9f!购+j3 !DI!E8X~{ue9$ dR0b1œD!^?ǂѺ)k%/}3ݛ۸71\*|JX 90KҲ ܾ!!Dįo/_3Ns'J ybp.fꝋ3{7w "V#)oaXi0Q&;uR?.nRJra .>?_}IwZ @T@(( 'Ij% Rz I8Y2 1b2jt3q8EQ eM#qj B&"9 4* .W^|㠠 Ц*kB1 BTBBDFA)ɼ{L \ a@&kbt%qbN6a ftU !p$ 2x7" + oUU4@HF|}!+%!4)Dqt$2l_7.jIJ9Ő25ƸYJ'_zw^)|{yQ0L~]FKйdt!r&6J*I}U+CU4 \ed4h-Q1$1[p(:h *fOB(G]*B;3EaO20%D)s78]4B6Ry81C4eꪌ9w}_o~>Rf{br4N no* B8!@ibfR rn JB4hQɘR"j׶ "ZJQD eco~%%E7}J̌_&cΈ,]HDY >)EcLD\Xm$0q& 4"nP[TZ)'e% Pے֪((;dS̩g?c{8 O򳦲~MŴR>,~,SAIwAFҌ"$"eLMQ u]jܚeU*ID 9zD ,1ƔIKA]u-w< .GE`I{o->xXDuebZ@JH|)R"$)ܤ.nV|Qڣ~CuSem&9y_L93NO~?S#+mI1˧nEYf9cQVjL,B1sS t!38++Rg3f`ZM'u׹9 je@n^R#HU .{_>'em{;;d~$2d uW 12ݭk꪿ lV.8%&P s]!y;C{ %@RPrtboDrY&*ҫbT]bNFI 1Aat (`B< :W6 8D fЃI75$N \NbQ dlI7;H|}dm8?޹ݺu?~VP%*}~ ]E3眙(S9}X݆1>eEubVf 0 7t-6}o\XQ .ʅ$, ^vo\,CY?lq9&_ɪQBcQ(lY@RY ,d"VJ3+TRua[rR5݋뺪 V["J)s9e Dʧ~_ p!_FMl;MطX(J!Ko*NaBT1 N Ŝm`LtQ/K}!T\miGBXMUb/nR.`+B !.+rSzn9Ό޷C ˄9p;0LjǶ/4$3i||8)JZ9ƽK>p tb /"McʅP札)q!5#O6iehd' Bt@J1ٲ1E!dEifD@Jh! à!SZ9vͪc}YY'wM|Ye IDATE5&3E΋iCt'U` B(D!pƦf$Ӳ^ yC j^A1bQBiRB"d Y+~MJe~WjyaZdeB;O)sQi>]_Rӷſ?ln$N촤˧%SDqgS , ʛ0jGbkzH*<v(qDʅV8* x1Dtل#. 0)vtVgu7Y'7UdDy~F$ĪJUY圄TqJ0.޷z{}6Y8[Y׻u> g H j\wί.mǢ[*BEdeLJmR`J]BȤ&BBtWXmJ}DEewk1d2%Pg"ntV3ҪˈYI97x k2"h?wO%gB|']&a? t"WBg[-m!g3C9ma?/F򦍓ٔoBHau֖zq9PrҘ%-KӔBn0<|pc6-$*IBi; `3zb?~as¯&R~<Ѡm6ϺH#{wU4nd*) HSBF!ŶEa J*9FhƆ,nV5 [m4 i#Q!f` T>_R(*E10ˌJ/'),A9쑊4ԍuit1+B#3c멩O$D=wxyY')K7};fcBVEڐst5^ݮ*E<RоqTVx;bf_4 2ss*!Ei@YY6Yh)U&d`vۮKcTNc/J[CW7ZR 12h:yY!ލ aq$!b빨RaYQd 1Q]O޿|49J$+@8U \ˣ#V~^b#a^֬ІCJݴFRe?Ҥ֍Ua8;*?yl 9,w~qS͵G Q* o"旎w`TiEE,$0d ISƨk[f!UBLJ0=8 эW񽫋 #nJYZ&%{q>G҆UKk!+r^LwUŔ=1?VQj3qPB]LGKk=2H)r:%?mm߇ʜ-fgӹ,:"k&`%.PiiLI w2 D:s!0kƑ,s`WX.:PrGj b`T1뫶4RN Jͤ* ެ;-̡ P88~W6A0(!c 9 ]ڃ׋MF1ڮOE!DgP4.-sgžO/}'1<ʈ0DuJg Z[Z\EQZFf0m7XZ&umoK )ݴQ42#ūuxΔ&@ٺa*mޱ]2Kl׷OW\nJ|\9[]ͪ. mծm #f1w{P(tQ>ݐX*;/qLә C!ma{smh*;»'s).I)HD~1}~&X],88gxupY oZqK,oכIeM[oZǭզL'F7U 03ʞ݇)H">z4{iOM* (٤pq5ٹYE'ɑ1h abIyd!)ʢ8>Z7;nܔ%t\sa>Y?{:u 1HoHUY BRkkdV HRH[T֨읗y !}&B^o@<2sLQ(rΥ-q(QJRU1Lռyy̞>Gme1*(BD-JVٺjZ/׭#HJ׫ZҪIz>x:BsƍL{9btBr9pu3 ۭTYșs+1Y|پrV;=;WV*ɓ,mj$}ȫMlA>.&1>ү<ѬZ{GElsaC![$`mua>+A5zE*ӛ$4AnCׅzדyƳ 71 BT( %Ȝ)Cܭ}o&ո]I,`,B(ia}"c}f9'"; 871D:]Ή^r,_uCРʙa]ϼqL-?èj|GGK.?[T1_:i1%'K-4 }YT)Jvu1 4-I c2ia[LE`m]aYTʊ.WI9/]w,}'lϝh[&$ʲ f23EI) um(j5DY`H)tqyTG59y}|C=+7I4tY?L1\Z1a:+\)M!CxJY}^՞>,bhljs7jrݜkCZ5go;Ԕaf7jMrmb!ڳwGU;>ɳ{QZ1&e#(c?~' X3:$iW[YhBSG [ҽ{"ʮoa'"L(~u=a~@O)j[;MU9G7ۋB;0XBJDwa6v:_MCI``*#B@.1WK,vSu(Ǟ8>:a1[=:TV+tvTÔ9%G5pM*m*|i쇳EE%Eѥ<<{%ƍbVmL>~t)J)(BGuAYfNb߷ӓy|y)J(L);?Zk4 ĝӫa4R2 1b\6,mYt6Ie3ɽhYU^]<\^gu7..- Yt>ZS<8+79}(Fλ˔i> U5"Pd O;6eXB8(%r)ϟn6mۘrz Aٓ'k|F[F;WU@k1qq?:?GOg~]mmwf1h m덢Qq}MgmQ8ڼeawtdzlB ]=!zV$0􋃃^) hkɍQ䬱eQVYf Dtwc&HL!&<89ʀW7C9/& .CxvHm{x;- Ri˂mYƤ80kׇXm>NJ(7@$_nJMaJ@2)"Wp~6ǿ pKLեQΟ1Q1Y0XSe]JB˜3_\]ٻo$ 2/ =ޮP EVE+۷Om( l<jmnv}J~#c닫`5O'bnZPO PX?D*QiSp4!㺬næc%V>z 9뭛UY,zt.lRJaf:<ܸ} `qvCooҚ;J!|:N T].ɺ]!{v#ӛK|zo}1qULP哳ɾiS8 67cF5jZowS$A1RHTR@L43Q1#D20'nq,N*Uq q ~ PX]F ct phݴ)' +?GR_<=9B'iL޲qRuќ,gn{eыm[Q>}>p8FUWx}۶LfՏy6;]۽уYn[zdq&#]BS7m_~8bB>;2ɏ}oz.aPaڲѦBT,2,R<]޹(=e ;2X)! t%b(qR6hÈݍ@fVϥT1EWX٣htvHIFjֶHcJiخu2J[o0itȮ)tQWmyYOWƳf(mSv>jT˃If74Mv^cnxtcCG'ܛvUu1\kw]r]i D"F2J@P'@ h@SW !H $7Mr~sϹ$Zw{wZs41h -3{V=5`"s mKDuaU䖘f6; yAȉVwsF0d|xd+5jh5gmn&M 8{h%>~7+nyseQF3ȘVgniϞF)Bdʦ:U/\9Eyjno3OvWϱ\;A QxQ щգ[UTER:F`CuŹGCJ::*u[lBFıR; G׊oFFcn9\yJGX'vyĨam_ud,Uc듍>{`kH6zr[]X,.&nد9W0ۥ`h&E07/R'rtMk}ϱ鴳ubksk8[kvɲv,?rJt0!cW:lm8XZ,dnNgWƮd~.兹sZlk[ F3an62(e9%kʳʕE+:0c]ѻuOVV΂ǣ\3G)cksyPG,G "P.M#dM 7Y6qdLޘH?oow0=joR入GW{ [Rׯ:-_Y={ZÂz`d8ol z|sW71)\Q*rV~R,I1Y6oLR}WלK4zfgTcv4qA?6\]|M7pWj-+G#o=x{[eYhþ>|谻ٟLf+ pnA:X_s1v,UD+HlnҵZ͢,6{E{+x4.Y++1sB\)p$ɠWe97%Fđ{E*щD"ڝx/^ª ꉝ*{dIќ?ztco FQ=1нG6/Ņvv|}n.?|dHYuB++<6Ui(OK+\1VĭfvYM ;1 6`j[qYLJ5vc}ݪ*unڿe\v fG#gsSz؜PYƼuo:M{6Nf}wvY8@ IDAT✇A;t*r5?-&7j5Vq?.Ys_Z\{[E7x<3[Rrkckkr4.7f_hvKvXPya0*xhw0NJ5)lv,0#͵[1\UE|MUqK eUGd%Zh;|`hT`U0p0X Xk•cY]?{]=[wf(=gb6نVsb(;8MYk2;QǺ5FopށљN*2@v0t..6F%wl5}*,N:Z{'f5iΫFcsolx0'o;VU+(wL+fP&ٙ6YmuGD[ZW?ѽqQx_ QtYiB4{#`Ge{;>{$bx IQBx"ڱ8aQ AEDCqE";ޱ/%y JqJB&1Q"Po 1ɤʴN O 2,NT qX"B 5XzrڌhV!g ɿCԁ 11b)NT,!^`gLDT;bջ{5TC`つP;Yq!g;F ҫ 3̲ HQ~P5rfָ*ǽOAByxVTʚ "4J×+8iHv0ƪYwG=ɸpJ܃I $`u@a 26ȅ|p[HB$DRT8&TpCR2L)t\!A9Â@^K΃!d@` ˭R0@yjRQh Uec'-A(B^4U *UOUi#DY&Ԍ$` 4NLH(TӓSaTp'-g SrAհYV*HlfzCEJ/l 8:(FkYe↵wU!XEBʨ UBlA`^`C2x.0" 1!m,ߗvLm[r7:k SeVXo U~ʻ1l/D<=JQE8Ok8(*QlT| ** r^RR0V' R2TTTf0g/_6EZ-$t4,_4 Ɉ1Ƌd6GV4 VJ)YKgIT8%ɢ,3LCg&ȿ"KD~ -68=)At-@H $Eɺ$QO|,#X u*&E2HA)I'JiJJTL*?qJr*c1{o̷&3)`)R%1DnQǕ3&⩱J.ZA-PKY|‹ pAI`tK" TrΗi(KF*CQ !^i;9n$ |sX/kL |0V@ ^@{2 */+O*UX@e ǸgkkTxQ)SfQaT!A1W. 5R8P-LH Q;O̊ Z$%ttu3ק1>JGdA"0J& cZv6\ 8 ̀D2Tuf*B)^,P{FLʉ;L,KښNQ G(Hd ELmru. DVF <؅EG3j[S PJ=rI%T l@H%V#L0Q QZFD`^1!BLR*[k%@ɰHBNT{ ]2fˠ3`f䌩o YމD`ԍY:0=ʣTQU_cԨZOUB=EG{1dY@VŇy\6r6'<Qb Z@:5@Œe&6}$t%65E3C$"0 ݫe p 1 (5Spv~dP=AL(g&,z&Ruk(e1yUYVB(@*1+ CU$PlA6J8y bq1jă^4I (K)My"m(Cİ`V3^V% me{YmxAeG55qZX5lHWOOXTawV)iVS *4 5; 2paYKY37yf0"c`3 f` hS{.+}ly]Nj{yy,-K+Ҋ_A3[ w?c$'hkz5 u]^y啁o o|S~~CC>H_&4I8xE22ndƒ14{?<3XJmdC$ a-t"vީX0-%B׉R 2zJԋ+5VleBlK7E]9!UaRO{fk5ok, [:thnnNU;E]^\pŅ^;OU:`yy9#///#}xx{0,N,S0!@$+^QX&2pMfݛD)TO! 3ZNz#(1Ha&})y%B,2ݕih O %<૎Ή=TZxgn"`.ҩ@#`Z)+,7r"m yUI^]ifEXE[3EK+M 'g=:viO귏x#|#^>*3J"ii4jJoc|O΂ҪRJmc֐I}ЪB셦Q2%DUJQp^ *Q(+П%5yZd'ea-6^JU ` <>0XNWdWR8wJ1%<(ErkϒM(b$x';m˴k XQfUQ(1[k )9m\+ !y+|t"֫ #⸕0YCc,q”fDض d@dVxhA/r@LٗH&^ Q4EL0 k}+,։tfN zʹ:1WVE˪+p-bRd*BYFy3AO]g5!8)ϔ a 䓌d!X4K!|tm?U¶ޞqP6{YSP(՟'Fƒw1Dj j6>b G^O#&F0&T*Jԕ,ԉwU)5V<6ШuعǗI쩪 VT J!bhC.3Id9@Rp]XSj' QD(i87mlI8,`" *yi?5]pIJg(DsJF/ * Qjh(1SH$Dw A fӗLH\*@d joWnC8̇?oάj,#x[iFUDKj"T'38, )Uga*Aɉ'@8U= sk'SMTbF 23/)ުBi cv5 Ӏ JTqnNi=4:S 5m@_,xt AgǀT,ι6 B b1YC{2FESSAk`Z#N+ (zÍjo~ sRAp_jbf]®K t0dL\4$Rvr[^" CdL*LCZz&V֒@H"(JU;f(sʔUUB&TO\oUW? 3wm`0v{{VTY댩c"ՊzxiA֢X8GSsZaMۄN3,j% Rɻ TJW+APmg it*^z;2U4}MjP2]B/wFK~?tDTC1Z{ǝw~n逃*0dH1^c =A#`5<Ά;3//<N1gTKբ?ĉ7d[XCyd;ѡybB8dU(5=8U{4QcD@5L%g'0_YԚ[|i~%¤&&c0 NEAơ^{Ep($ ['cl?|}^ D"22-+ҙx.>nn-)M u謁N|yΫh x "cqw:OӤl>~:X^)iu&t’qMA1~:HxWu_Kz{Ož7YtVB]Q`f\{]*Jٗñ Q2Qgw>+o E&* lXь`DN>/ŚKuݛn}{߇?a!t6&l'%hT^D8װRdym#X׿'HRh >}]耇ZOf׮bKiUl,Kg>󙛛;iRHo/}J'$p }fT "߽o/%K?gHY>\Mxo?bCtP*F9x!&U{e2J_A0M I<$6Lkx'dgy Fz0{fB(S,AυdOG?h4:eYVŏ~3I>iVWxc9N0B IgDwL3>7?=jϾf骫QOP-QLg^Uԫ:8x([c%Oq`ݮF5Ň$Ch`M}uٚ շ9-T!0a|]xI9eY^q_p58CryPUlQF7J^F7 ?)&R\ZӁ9TU y 7tPoa̽7WXx>M+W=ry2׭Μ;TjtNooK1#z1c>cDך-fZw~:SpnguE#I_N1?IDAT -\A{+FW=G!^d~jQĕl4_bo9=W}\ٯ܏d˵g5. (cQf"kGD'_|ܚ'c}!_1>β,Kλ8 TAAY]_tE;.D ~GF_VGGx+^L&"g?_nt*O7|7]Pk?ځ]Woc_;*Uutr#v 8FR &̏u"Ĵr39p'>ϷHe}&{KL&w_2hݼ~re83Ń q($_DBbqJ8yCqT6JL^Wl\v{WՙgYeK8U1oho.f@Ǡ62djb&iQtnn. # /g-"V+|jDps]uUCgl-Ѝ-}t_{a+~VgC S_Swiszc:ϣ*TK8G^#y/'B{[{KG_'>_unjG1F/]^zV:V@gtb<)5$Ped@xn߹/`gטw_|qWz*@!3O/>PKcyI|FV7c=__x9`Aƶ_oD^kہO^_5&jHBxT\jm՜D 0ၞii$wShwo{e>?>A3Obr~N^9neYFCǜ=$5 @FExP  l UUsm=_F[ڶai8:k`:&ti'ۦ ;oaTz/Gzl*=Y^wu{"ʲo, u]vkJn[Uh[o]2uZº8av `\ds&}U^;Q'Orn6Ƙd27 `#V>(WG[Ȟ'^9/ 6i "1Uf&VrtPv@[ kp"ޝ;UzՋ^kh?~iO{Ӟcǎ5kE/z+_p3qǝfQdgc=-})>m6:P<ѿ]0{tLNRaee%ΝqoX7U|ݾZh,$3eo.S"cdҡ3ՐΝt<{ p+p% o/e/M7|C$#;U;;X˨Ia5<[w}neVAf`ܙ{ z)gIp D-{=W^ۻw?CW3眻+vCZEАzɯc UU௾d>Aᣃ xwUvAWq*j錀ٱU5˲--<{[ͦ1p;%_,)Ajk"PL_y^:OGW^<=7G кŪ,1A{\ em|mcccyy92.yqiKHΛ[:vܴz4l0-܂/| 窪q9GDe `C,ß秳\5U:83Xm?~wm:vp yy7S:k@k[]uoZ ~3vb%EzE&X) 0NfOSCMo,9qXmU) w5soLofwZM*-'Udes^y9*zbz+pM_G4%P/[?w3`C]W^g7l:ésݫudx(_|kg3nЙM5p lf~1ߏs/5UKez y *m=l &r _mWlzL;/V H{ ߺ+:`pw}1%pR~0k^k]jJ>cAK_?&%'gHj%gG^;84^`_ڬEJԤ0=G^Hct$Nn=gPBGc#fr^QcE ~+Sm;\ԗ{kҎt>5ʲ_ ]/8)zY~fc̒BTtKj</@>c0gY4fjELa<ͷU`az}ġW4c8DEF@x GĴ+<{DD{򕺂m-`4d-*1>{O<;f. pT[?~8<\S9`3+159cᒅ=vmsP{-hͨ\) ڠm_)v!?Ӵ-:TpQAh&1PHI9h>"bG<ǪZyА6<XQf&qB .a3!A5ڹDȢ\rB !Q6.D Rh/TE=3t1MZʬpc.}^)moy*>j2T I8j*EĆI؋Be0|%գ= ߥĿi:s^߭'aSgNi @xz ܒMfvR25ٓ5QcHU3Õ OO\|;#@)] \Hf1غhZdKg7lh@Fv̀g!xmۚ3s?XSӁ쮨Zh1&1heplΨS%ޠ1֫z/jpp$h䠓z:RDWÌ?P``t[0 br`D\DR\gX'ܾ% ePM9 t}t5K>M+V5)zC5CDKU`3ЩH(YN)WN/Md"mcФG&4K$DrKêB]l,\[BD9x/j>ղau2m @R)EH(!N'Y TK sO&Mg ;phnC 0XiifWZVR8qNyJs!)7[2D0D4 }1 &gym( D4_A}âxj-^YBep5j(xjX>Mo(bAKb!Lݥ" L! 1S "e5e 2d#QƀH@FkݒB1׉XRHnH E=t?WefTpI Fb^B>ݞ!(Pb޶3!D hQa‰ĉ,J"U*$Hؕmcsm\ }mV&&I@fh @LE ᢇșX ňT VH$=܁SȜ13sTZ'Z  &q*>j:2HpK]z*@0)TiNJp!U4 eeMS~ 4[BRB7 URN0\ əU=TU*XxQā 幚}0@Yi(<,B_N7iXkto߇Ҡ$&AD=\L]J0$U_VhCV  35uj!IPV|EuJM`LwEuPk=EL̘vp ~ծz~\Gg.ЈjoSfh!H!P5v2 ^ۼCx2DD$rZf %Jt&d31Ǵ!㖟=B7!jv3,@).i kgC}a`ժO:6aZad⚦/uU:pE0 MGY;Tūw*3yggzB A pY1-| dfcR1ڦdaUH'}CB>k;fG#탺o[z_Vm)'-lx8kތ"0 N*~$D@Ch9&4XR)JC0ş&s 4K.5 [&H!A;M8ocw4Fkp:h_l)< uRJU$ۻШ,{UNNq…lEf2fP" =D70 F'NqB1.2lGdE w,ν/tZ0#TBխ{))67D$"%ˆ)$1@[v 5lP9LH:y H~[Ӡyۿw[n~@Rlo|_{2TDdbbӧN:tԫWΝ;;w*[ # IR+rE^\\?{{ӿǞ={jJe$gϞ D~*[7+wxTNr.K@KN@JM4Zn!6B#"LF .$Mnykl:g_55Zbu eEImuAeQ("& 3JEr5x i+䨶gS(p(<|I} Oޕg CFUyƈ$KTl̎g{=ՠ 4rՅ:Н~vJ dT7ā@D(Me{<@s5gs3kZ ÙPQu] TU}g+W\lY2$i``ߞ|w}Ǐ_sK.ݰauϽuM7E"[ZZ;~"%o-Hx㍯z|1[ZZtMׯohhxwr.{>+**^oCCúux زe˃>811ž nݺ_T[o}O8˗/ ツo*++GGGu]ϝDa1}tWUU+Mp.g}:Jno|b$Ip6 CXdI{{{[[۝wYSS裏:k۷oҥfȈ1f۝NaOȝ\bEEEE27 uM55F6lS* @ >W| SGU c!05(! 0L!еsaF)c:77_R Щ/ hq83& :#` wEG@-\21Zذ\ \F(\L9ALo*>]aN>lhؒYuPfpAVyq3(26%>y]?4g:%?f$AR#(< l3_?~z1W@p+$@wO\"(ï~%W,TMAӍpz;n y04|nշX NWl qzF4o`KnϾ vo ?' Hd{M~yٝK&ߍ uJ}l>] PPB,O&2"@(m)PY _6t`;!>mdX&4с s4i24ęGt<? ^< p ]a|ιp3pq.#]'];bk _;iO9y1p.D,ȵBEǀ@/}A!f`F`Pv.HS!WC ZX8G@$e&Ѝ8Bt<ޘAN~ M3:.v+vcD~¹z8,p8p122Y%#"mWmg&f(ˆ`9KUDUfׁ^'\C&#D)cYˁP̝Ȋ) >X)>~ 0: (_|Ւcb#Qȷ0?Ay>T!4U;qHV˄R!3  4Dch EnA).Se1J26U8WC)_c(*5ÜbVfe-4k5n^|cǍFȡ_zĵS/ٱܹ!s9XMo7:ydT RRʞ\uGg0iikAf #;A,`C 2lD13Hb;[[SCH'N3:Cu1C˒!DV(BJEA\l,LFBs٠:!"L&bz'ˠc " ]b,B$ir%] hOOϜ;F 4D(UDsUS 'AKjX1X`Vak!xc˖-3ssQnᘳ9k͗$> 2#w/ qcaOXdL0EU4k0ƙL&'X,[kh4QZ#beq5 :e(#3H"iidbSJn7clw;x<c|M˓oCKp*4yRj,K~(Εc,2clv$_dC6@ZXnoc /mb ɻBB؈cvnc)%J~ܟ0T {NGw`#Yx-||1E%m# V'X+!I "efba<*'~# rVčmB\h!=bH.~*Kf-{,xʈ1@X>Ac ØBBJ4 !WHd mșH[#>mș sk<2[ÙrA#tm45`R|lB&( zm6b!N,V@*4U eVI8獘juxťo7O>'_>[ohi]$bQ-VMUU-ɗC2y7"q cc}+XIt/zW_|NQ-曂Hιj _W'DA߇H0**(J+WTcQ8|5O[vʕ(3 <؂@lV+ı͊dzm,7v ?ݷ[%Ϝ@y#0˽g{m &{KWë<+%˲aK10(L!D])$W bX$}N !I ~oP2hʆ٢EyEd>b;rrKo\ӴɕkaCCC^OOO::p8jy뭷~?tz/7!>{ɩ&6|߾w;NH:ڙLzdK^i^UYX/~CFJAΜ9S__F}ٲG677˲.ڵkǎ}xxU16{ٙ:axxO|t v"HCTT ]Yj}V͖t]ojjMR`pɒ%T 4M B 2XAB6v nݺ.'Я*l4uݳ{~scD{$:Q-_HG84&[oh-7|}br4P2կ~USSr7|]]]vZh4H$2L,K$qرGνۮGiiŦ!O${KV5ջEab"\Xǭ,ĆJ'bE"I[(۶mY|f-^x흝$566TVV;w:u{ٰaӧNIH$1/2u&Jwު(GÑ񁡟hMEC#Kk-6;tz^}#ۖ,]H>gd 秒; `Z(m sǜS4mŪ>/=5 =}LyI%KX%Uqcl4`:sB>cHcI]?򶧡.<:\t*~{V;nyGTL*q"Ę iLWxp8 A;Ll`ѓ=sPOO?єMgQjb#Rɤ(d*`^7,bԠc@E@phxa].cL550@/@'c\W~ ιjQclq8ρKYg2\Fy"d%wά)#Ie80w/5,cͬ2B)@ʦy+L&#&RZݭ89cA,2B br˩g٥|lyWB$9,̪q6n9|['?>10FB1nq(6uuZkG3"3{tM2bC^ i-.P=-0 0Ä \+t7Gvq.  `jהSÄahDu=&_~f`ø1lm3UFNJ<6iQ_De i>?2lg whU 78<ӏ"{?;_#oQ\AoeYlVIGn\I}l*Zg2Όl*c55io E> ӳAF `?[\:GH0~ L0Ќ q1 $&*!̐~`J$x|43tjx] fnb09V L&c`3OLLh01`]$dYB!D4(%G.w֨٭6.@07-a<5ϥ}麾cUU}cǎQJ$I;d2 T*Jmڴ)<37|,ˑH7o4m``  ٳ%},sZe&!(-"@b1Bbq:/l*+{vQVxt:=>>nZ-[k׮UVUVV:M|E9T*(JSSSkkkcc!PQիWKTRRѨf!'&&/^<.Ze7,G+4nYOxעx>qC׀`:X{=δ9 ΈRj91$@uUf*73_nȆ14Ѹ0kf泂'/ ;]7mˁ!@az"5|9yaqcNerӋMι2(3F$((@@ϝ߿cEFʷQPx4Hg sd,AVC_' V<ۢ+H@- &@oDa ! -u:ɗO \:_X䱍tta##srr>9+T yC5E<1gBahA3'rIgrb2SedXyG}n0MI#błU˄E ,ꊂ%;‚Yd'x <=6Yt]7X,htppj"hb^h>joo(p~Y[?BH\KL\^lYXsbi 6h0 LS?UUUL?y 8uT }}},766Kwq{DTU_ݻ?DART ر#Lttt={ċ/b6 (FQqַUUU%r<|wqǓO>)q{Yn]@4߲eoҲo߾իW 6[---EEE(((J&[lyWp(; z?я$I 7xvenEO$}}}UUU9/O;uח(~ _v8^chѢl6K)u}[n=x(--ZͅT*%IΝ;5Mkmmxin:zҥK=,^wbb,in0T*UZZ(Juu5BvjۇNj"H**..6 _\t٩a;1^~ݻEg?_~Rz1yX=C=$7EOlE`MWwx'yf!0nhݦR4/LFs-Ou0I]M5 $)ava93f=Swya1d2(Y(CCCwnll\z5c6˘U.14=[&f"r6|w7ƴL̴MG`E.0{IAubΧ1 b65r@bh4ZQQ!j* X1Ivu2,Zdz;:e49fjڦe\&;}L&p8Lw~ *ȏȍ.g/!V55ՔQB 13WX;s,>9 gQGZ9 czw3痋%?B璔!4SfZOGGh: 4ynoIJZLK=H'@HUcX%23jQAijl p-dmE@ ʌVR͹]S9Я넀BgzY (t@vw+]~M{ĉGMq( fI ,26Ԕ~+Ovw҇\[LN2 y:f6j7z[gBC{ÇX+!adӀE)L'\&k9B(J%KNQзԇb1#SjPULoEQ\z,Nt-"tww[TU={xަ&39ڵkeY^~=ѣ[lӍ3 "zfSVw'%h: [D:UGLͦGn]=iAs@4MqM %c: `MO\nV4M4s+,h:a7G%vm5T 0͊7-<39L`r''eҋqj\ s O頍ÈuHc F *Tz֗;%` j!xsp?Ĵֈ2zZi4a0өS6TA2(bFLMeNp̀%FGJKAAB$ _)c3= >uFESۺf<s?P^\UmUL3DηR f˅nh\M=c|0 yˈ3pq.#<0[D0932kkNpR-gFflwV>d{;86<#gf&8ޝY q3WCmLEwL.#%oHg_cxs1HԵl(q0ɳ4 0,0,s46:-gu!3ȅLFN1La մV_{:l[53<MRimjN a!3#4~˜j0 ct~YʐY˔s0SC(J%Xh4TUJRAf1ͪJUUESXdO}9k4&f䩓֯4|p?)*&1ŌMr-dmT*X#=c}p|o~V`]diP|U(31yоϴ?baG^?g66Q_.ٱI$ 2b5Й&$X -ՒOuؖ^eݲ^[GNv(P[K'B8cPX ]!i=`}}ڍ[*b%w ?FĦ"BffgJh~l4fiQ/)kYTRdUU#TH4[Z\N/Z\y._$&I!d w8vٳdrhh/>~媬b}}}y^I)//㣣Db<>ĕn˲<*O>5Q\5SC=׆ |gyMIDt;ccv(drA:p@EE,..ꩧZ[[nw:v\Xj9:jllFH$L&D"rʉB ƚfWNMfLT}Cr;ѰIzLs˒[^ۑ MfA@Tb֭[WX1<<F].W8>xiv2sgd2911QTTdZB7nܺukWWPU{@ss]rk9W Ƙmhh(6g"~xŲqY|ȱRdI:8 'Zzplf` 6:u#~6llL&n [f͉'|>|k֬`M!CP]]%&PX,[҂CPxo:;w!KVVbtblڴ (ׯuRuIt]g\_v-!p8֮] c<88t@ `˾XlayZ#Qev:O L2ηÉLdl(/he!ݖ' N!e.,_ؔ'_E)-***))]ś $ɲC7>=xgLZ;?3/< &oPҹ8~LF2wdLJ<ݏI../-)[>C-p~j1E bfDC$;d"!ɢ9uLcccqq 262Ys?Dgߘ ]y?lRzxVz8&<g2\Fyˈ3\e/Oa. /6gFfc>էI+3) D~0)w:aJ d!3ɋtpW6weq%fcLr -$lG +`kYJ3ԽXfKot.h0,`d"Y> f0Q!ra:Ϲ`hoy%1ܥS4MFLT==磀v] ,S6tNHr-6T6MLm9]\Z ][3y.2`9]#4"`tRaYlL/^ 2%ЁC?˪}~璕6ԟUtϑN*U͗ E>hn7P 6s!&`QB$Y0%  kNUKk+[gBT&N2_4ӚjxBeYk|oB@(p!Ay؏b4m8hZ,eh4tt..DI&Tw2/q>@m-dt\P ]T,ȄH`wLI] JO` Z#3%>Y 1H$,6mϘd}Şqwq1;;V}VDGz6y Hd2eeec31F10K]1Ip4ㅅVrs WP:BcӧA5n5OvQp{\]1ͺ<o$jVJ߿``ٳ""H<BcR_,kؘ$IoBȑ#lv``RjO?tN cvWWWY2Ok ӿjePrM+ B0txo@Ĉ$!*"JB%R'NZ1SOKf t Ji>w޹ۺ3g ca3g,oyϞ=%%%#Bxkt@B2+ppʚk߿ɊBX6mrߵe9əP$;Nifwll, F"A&&&֭[=φ Es8f\2Q#-2 Cu֙d,X,\FW][[Q|G?@BC! Z0F)5 FE wv~A8=0{رիW’3͛oԴ|򱱱&bEEE{{{mmm:--- ̎9`0h۹T*WWWϮKc#BDBLD1BraQ`<,/jy3ٜPJ)fP@ L g>a hfYC\DlƘiWFń\"L&(㙽dDXx&CvI$JHQ400eJ6Ģ1-\``X033#yˏ J34Mhktk@1Dp&vs(-L(i~#"J}J`M!/"b-Yj_0lө1A93 A^r,۶Xny1t@3!'4PyF _xz捋!)c#|ah84:5cL0 o߿u}}=ݫV J0`9f Axcz'f.kϞ7ↆիVY0͙AFD`ɤ???RXXy/wDS̮fN|20 Y@]==/u8Օ>/L}>36cM?ϹQUU46{ٵbo_yƉPQqq}}}&I&a`B0Sl#3Tc,5Cx d29888gɼ?'($qHDC==DbBFGF$#I P0ƱX'8|K/D1 Rj1C 0Ɔa\zQe1x-Z4gF{I=D4))-`1FfժUcccX^$nWVVF@ k׮naƍʧ:R̠`pN%F""$w/f=YN&߼eKssbbbx\t:tREQ̸}Db?eYޱcFUᐤYQFfHj`n6Gzpmp8|abFBui3D$Iv]ӴӧOK]d2P(4g|CL@p:md⦛oJ뉖 zIDAT;~o/]{>r&ɍ7Cab(]wcYuG!d15mŊ?{i@藿xw֮X6P2fa<=a5M|Z1p8N眶G4"K"(bB(16 : |!SJ 4=!dA;gN &8Kyˈ3pq.#N~\Ni0&9QG/=n0B"8y@},#Wc8yAl@H(p8` s ILv89jw;w& rFEW^yehho](nR2, ʩ-jjh lli Z"(( +4wp^y_?Gx\߮zVqi^Vd2N.K F $IMZŢj4MR~Z]f_=Av;v=laMAkaUUtD"p$I➪8r9Yq:Lj J<GQveYV?p8qn[,zH#D<HQhO\gQEIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot22.png0000644000175000017500000004004114717152071027514 0ustar00hanshansPNG  IHDR6sBITO IDATxy\GyTYzglfFI^e2.06!r! !/$o{KBp`C 6&oXބ5fߧgz>}z8Eȶ1s󛪧@---`0xޫJ4M@p qWGcǎRҲ:g`Y|~@`vvqbb֖d2i&)Wwq,}}}`0xͽ?_W|۶m333.k;v|lMgאָ`6?e˖W_}_$Ie4͇zH]q_!UUU7n|衇n~|S7|;tk_Zoo-[\/v|/ƍeY'|rbb"BnfXў={mۖL&ݻw{o]Wڹk׮_yw݁[nz$ !OYfdddÆ .k޽pW@v޽}d0~='ojl|챿)xWyGLl5?z& drphHEũSִo۶ H*|upQ,޿I=i,i'7 )C@G s={B'TPL@\Mc.)9"BxR{/u . ?_qKHt14M77_cbܻPa*!x=Pe%1%FE-%z^`颃n_ j59y@bVwfz7Ҋfv/{Xw8!Pf-9Y|rZ~\\7p߂ƥ{mU h~ X HDL Э@ӧ RA Yv#\v@epkw! f6]FPp|n.8\ Czl"z  { &H|NJ"\ǽtɗ!niՕ^abdƁYR`vh5 ;Z8*3 P'wCC3H` 1@߷ލz}RԀwg %nrS){2R N`"^ rCP fjf #PL1&&`vOί= P5w#4~Bj#߬R#\^Lf]25C=)N~Lqى^/Q @vG)4 eF xPgM7\btƋ< d$8,/#~'_+_f3%_,r/ْ/-_%,̂wddr8 Z`Rpg3H~PA &q.ȏT `h(!_)8|.qYq`7 GIZC(Z./(UnY  ԯ\0Q  Z`&p |Lp8ʃ+$pzf"3 D *>z 0!3@vCn|B2֍pMJ#ͭnBJ4w\շ@n/| u`D @v\5`1 d >Arp5 5xWAfw3  pDf!pAz HG8jBW+;dJQ=y]UŋyieBm8 ez3theGO=ZN֖|-rR_~- k8`76HN1d-fԗ/Dv>#~ bY $LFWؒ$Ry7@,3oAby1 +JDf{]{ƹ뿁YYA0V?*gYYRFsbz Ta.Y-H g,xUÏ0ԓ/ ` 8Ɖ#%F,$362)7jFvsT LM\֔w7 2Υ^q8ϰ,˔DpswۖNeI 2Be˯ܟ?֌5we^ zZ][tӓXBF"J5` `JGjCفV?ћRs޹\.aH7*xVL$$b ʐXAaX B!s,/K@N$#1\$!$I,#1wArIΗAJ5Hfs؝( cM ;8cJ<8;;uV߿{.v8,{<!U*rũu!PtSfYptuK+^3&K4/נt݈M|@ R^v߯*`)EczzC!?7NM ۻ/AR:Szs_;oM c^X5@!i3DQd\ٕFepƖU3sv}[˩MTY,;;ʧ xtQJ Ð$4MY-˒$1Ƽ^ܜm |>?77W__fBlZљ~>ݻ]bsvV_(tHY la~n 1EBo9.g$ko3Ua_u8UcMsC{TYkn-ȨG-#+{.?2:=o߿u؉oKBly'W{\Sɱɱ֖Z?_\جSUڶ~؁_Qⶆ&;T6Ma,K,J)&DӴ .H}-e\V< d$8 ʈptGO#BIsa)!4NI'ERl;,85!w HY+(:B@%z@̰.RJ 핮b3)%1 d2wx\\3!S#.+1jsZ`Ė6 3.K~X P;݇B~&.o"_lS课Bt26 StHJz#Do]NO_uEot0U,$$(,/6 E0 @Pd>t|U`$yyBHO# vϖX=3ڣOj`oA-1[s1Ƅ˲ʜ ۙ8_p!,KQ%ϖm`nZO@Y{ rB^XwBi!Tꭷ޲+UUUEUUYcnѨN3qITU,L7[oΝ;1?rDt!c;7b^6׵M:hlk]M0`jFT*L&IÇ]'\W^y; رcͯ͛[ZZѨi|# ]1\* 6kzc#m_8 fw}a |ww߲eu}֭^W:EQBmmm@`ff& R)!tc[&˞-bKF+<81do/VU1eNÿݮɼ>G;f5MӮASH I`j0O JeYe=?(UJ uP 9$\\/u Z[\1BH!ڎ-L)޻BrEgxDrbfPb@:2 s2KZ Ūb޻L}CXB@\c32~0a=!(}p9SZY0|:qQsf Y=քXTz[u֠"Y,Ȉ2990 ΩVL,0`ղ̯}LS (ZŖn}nnWI |çu6f.6/ \nːrۨr݆u]&*#Jڶӷ׵^uW7W仿#e[oH톾: ב%3ӣ 1gћ[Q(pyg {&[ ,o΅lvxv UGz6ݹ*Q5-AtJtӶ?t;?Bhvv~mڎ"$BP{RV[e-lٿNLLvvۅ}:ۥ.]tw Jn]>nf"x<֨-V{Z[,l69>vg6Tr}A Nm|0Xl<ܹ:>=GYpIv|ᶶh4ZYY922"I$ISSSv[zUU=~w711qĉcǎmذs>11d?p8xuuu0ܿkk={t:flwwSr}#G_ѣ EQ~WUU۔[oѣ_eYhԲ@ ѨaRsu]pkvd2x<,z))sj(ZWBZڷʲ/:~:5]5ua~+ b/Bccck /@)8|޽{9i,#͎uuu9'NxGb^w\nttc,?gff?p8v577x&''eYnjjڳgO4M$p:u/KX*|gzzzL|禧N端jY֫t: !/š5k~8q"=x_x뭷n!sz,[(T0=3]_t;8*jE*?y`_,J,iUSSN+** A3hhhPHQYSSiZMMM.xG[݊p5M|xĮiB6>c.+ήZD)|O$7t9\.&ۖ,ˊhfAyϗL&UU5 RJiDlVUՂe,ˆa(N]H2My gc9pZhVRq3"VMPLii4o֋ա?ADgubKkHm _WfkMg/eujw\2u{  8%Oگto4Vg鞩3om-0a@ @JfδF.4r$9N˲(aBdY>w?FHmbNh9,a&١ƧyZ`Ld&0+7M$iϞ=`1Lz<˲٬x< طoBP(twfYI}Q@)5MsۖML`l,՜3rtVgғa%mbsmGBH)dtdUTTد;;;m@UtE9e[C i iXMeSz~m0y-UQVɒ^SNjbp.gz#Og+,%` aHgIDATe#NQ3TP΂<q$"c-8Xbb%(m`Yp[.;JLlXNB6IMp2B%!scI! v<,%ib2%H$8+KF$8,cq7O##+,$YY4!`+2Us%W%Cū25%l#A90Fc- f {HX2od yǍa.)!|BgNB=Q!X1=BHQdJG\،eQ+\ŔFͦ3GOZd3L~U[#fuL3<0bm#8c%ovjZ6O&5ƕb&(ccL{oޑ]Wb:%'Ti覲 bDR(! Z>}6eÍ2Fg_:d2;=ŗ)6MN[!,Ʀr9cnvCCDlܜѱ8 W4V,ڻwo4RJք\.$I_lmm]rttk۸q"ڙ:::Eʑ< 8Lc^3C+c\Rz8pr8q" B!08($#իc cLUՑsn+x˲lׂZA!Y$ WEHws"DRط✻\. nvA}}$ImmmNן662O}cvʒ%O&O+4x $d$(tAB4L,!l* lvrH(l\GG!AM6B1sAD BFr؄l#Rv3^M2K_y0W\Rչ2̒35TgjhXq m,i8IE@*6&\R`@"&(#S!V5r1PqLsąe02o2Q0ɱxC9Ķ,Ƙlg2dD3x}ƖjөNft~7:1:ͱry?[MIoD?d݈H6R53)C>ǡafQ\eL)T" ӚERY-YΎfIAMug\Ȉ]+R8RQQQ$H]u;^\v^dpž %;z'th/wnzBt]׷oDB.+s+++,ˆa$IXeeizNsk=bxb`\5fY!18ntܬq[V|r|69]PAdfjt:iӦ 6CCCvx_{{{OOi+t;?˝7bG>>q"PIbCL[6 m0:lM#X(z7eYꙙӧO^zjjRJeY㶶6BH8uaϞ=4/"ͰzUln$≃Cu(nD&0s8aΦƢ7cFʳsO>,˲]֮c vEQlQ[e_.\i[lmdQ>ɹtRLD$N0P.11\2&0^خ jdkk+cYoPł(.=DF*F4E3q).' xv+'& uyrb?BDMuX ;,iRoJ8h (GHdO=^1Gٜk<۫n'jRJEBH--|:`XR^[2oaG, BF2 Dgg85dfqj0 .BԈ$Mpsaۈ(Y 84F@ĩ ΁ꎈc Fg?p*YŅJe8F+" btqSPR8FKőe Xc$ m-(Sg]D1aY(c Wt8͜ONKKs{{w("d$(\"s[lp?6{'v !D1ere eJ|I豿~zTUpDQa #K/74ڵM MfnMdcBލ$xC[r%H$0Jnw&ijnSpqyk]ןx7|s``Bf~w=.?\iG(Doss|zbbzR""ĮX Ú?7NOO~ E.BaR)y"a YRn$ҙo%zj[@󎎎իWSJ#XfPee($v=jl3+IW$Lj[lhL#طcyA)v8>/y7"bdr9M]n- TUC252@e0-ˢ OPB -&, ټIR109Ls;Ŕ7Š *g1DYcf.#yjvh=ّů1ƌ#e D|.:(37 q>0h<\.o҂Y1U%NgYI!T.'I\4˲dY&EH]K~S E\r(T dtNE:[3ZfNH$vuu)y麺9ƘeY@EQ˕cTjӦMc! B8kĹIOD`ɚIz^,vʼeB544LOO]w ٝS65Msw}O?]QQؘfNgҨeyQoq&5gGRѩx}SU:mR`(ͥ0qdi#@ X86 #_>n4NpxÆ 'XUSSH$FGG[[[W^+++(8H$2]ؕ;M44't|N FxRu5ͼͤc?nB7kʲlsnc˲l}Gl{HuIJŅaY.d,2 r-y|aRD;)%Eb*%caٜR~Ybگ Gly"4"B$Xl/@OD(̦,n嵜#18(5~UXl9ǒŜStəIa[-Sz"N#(c6g^8(lr*2_ YTkR)8V^|>"Ӧ,iJIkeK~SQVLnKPB0~SF=ċ d:+ndQab (KdR9ޙqK"V gmA&6q= #ڛ6C-OJS6h嶑 Ɓa iLNOg .:~g9wՍ^uN'莩;gC/ x/RU5y;E?MkQJE BHӴT*UQQqY#-_lاPNE7Q\|ȉ\?Y9_]p8|)TJQ@ Fׯ_sζ*]]BcO@tޔc&t91w333T6'#G۞!twJi>zK-]lD30 &LRja!-0"ȯ~d2qԩ\.jժg(g߾}lVĵ]p%Ir:5XQjt /2!SW4 EsEQ6o\UUjժz*7M;4l"*\ V(+/&[[< ,; *~1M1:3hw 6~1{]3p,l#*o^54@1is0/rgKm#d VW{Li3X) f0r(7%0$0x qSvz&:A5C$B0A<[r*4$(|f-,7 &8 !QAp,Y!#rBIsd!$9,Od٢}A17b&8gG0J#e[ `+&\(ZˤWGS!) |e!ɬ[B=L\Rp+LT,%)ML#)Re35g!-*RAYXY ?=tXdPUͫV 74A1e2/h0\ﴠ3_zo؆56_WpaRZzٛ;_^gzkwmA (Y7b #dT"zo}L57=#dtrҢs6^ꪻv%^PW֘3/daCH$;,cUUN$]K ;r =oPb~1C#*du>ӧOݻWӴvp}kFQjfV[~{a?H_I07dO244tر UU;fY>\.'ƾK ;Kr!%2"׏Yuwk2VOK=8{ΆnK4hh[[۩S| ؿ&QUU]2pW.=SO7ʉCoۏz#Wo:Wlt>.cWnC u.BL&՝= ONm"Z?}HUnT&{YSod D|E@RӾ3 ZW7޻|t$j7i맽c !ˎ+ˈ1FzQ,wT:H8zMpS2q>r۝DLjweX 1u 5A QNSVd;Ԛs0`yZ?D &״|ŋ!!#y`y! DY@Pr1OkL#8gԸXhK)v~)=BٺK8T> %kb8/0*^FHK ιp @gB3pw8 J*d楙>`Y8 ɪYr?*S9hHm,Z9Ͷr)T|qdE%Ev1`4tFD$w^q"g7~wwt_n}gǕ-plO~3?}pF} Sn %ǠV(rMJOڑOc C媛7^;("d?{*VgBF]l=!Lr?egD]_"*_7{Av +B l1J#9/Ւeَ a1 !Rm8}`qB;P ΊɞCA$|N&3p ^pfhcNs֭CCCSSS?|]]]\wyriMfffc۶mH${v/Yb`Ydn;?}㙽gگj+dN3f4W:&pt:k ]vjj޲[nennRmFUU7lp8x>D"$|>4)'Oܸq#Bh͚5x^Y`2{+ س0 r$7g鎎p铧~o| %\.G)B`PUU4].5\cFKK 8g25kdYnBڵk[[[1Ʀi`0 +***)x@iP`bW!ݕ !^K$<,˅ eI_{t:mWv|ͳptww۱v(՜sxꂌBSSS?O=cHa(N~WIp}:k?z${˲bX J9d2x4jJAEovE"HҾmcdYS8Xu[[[!ނaˏQ;9BsF9!4R c!(`e:ɛSIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot4.png0000644000175000017500000005175614717152071027453 0ustar00hanshansPNG  IHDR6w,>#sBITO IDATxyxU?Zztҝ}O EAAAqq;883Νeq:!kg:NIStNT`<< LP IbqaŁ`jPA3m <ma/a`aaAxk5f+wZSiω Ð ?6%k9s9hD}]v`|Xbxi& d8KYU%-.&@o7BP$``ubn} P$܇5G~[./~7@(ÿܘK;v:W5c~%qeg]yW3?d0PA k (c"0w &ƀ7XBxaF^ !@ĘBq"E`  1Fa =)I45y[=JhRE1&qBa60JB(K|CEQ@e(S^DcйY^I./- nU츐ڮ יL!^i_|Mp86lؠR04M @4ByBYHRχL_D,H4M#h&kmm v:oGQU.\P]]}~^{R뒋2 s}\.V~z ,_IW#mЅ'CGΞy XUu%NP!mVZ7,mt:oc₆ÂV)j^}w}<eO>}aefsqqW_}eXX-**"Ђ 6lؐzᶶ⚚Of3˲.k555^^zifuuudgΜqF]/_ꫯȥVkGG˲4M<7.7X~}oo~*++m6 {illd1sEa̩O͋ iIIɱt!=gćX *`f(P0AnZ,~W~' ZZZ?ł1޶m[^^ѣG +?BϜ9g۷o…}yٳg^lx>^ŕ+W&''_wuFQ?/ȑ#}ۋ/&N \V^m۶>qɓ1}}}555wzv VdRV]]q-`Ebc4m +igo_8QSWJ E/WDԩSJ>AAAOS!bDDDLLٳT{rի6l "94aO2MAAAn[R4lM֭̈(rWWWϾ= sзzDQ}&( .x6~c[ΟL7 L <||Gnv~|Cċ844w9rznxy׭[P(DQSRR8t(_OJ%M?ϟ|IJ?[ny' x޼yկzDHJJbF2cccK/ۿ JTTs͝;geea Cbb3˲OvU\{Ke׿n޼g}vw@yyɓN?͊SofȄeⴻĤgEQuuuDkcbr(` A;G삤ȶlR\Ճ vRT~ޚu5F5ï2D]F<[aDZh{PUUU+x<}#G444DDDs80Ds?|CLfV`dS1DzZYcS>'N^qJfҊI:=5='&Ecߍ!<_|,Y//^:y$BHקPFQTQQ鎎SNϛ78pKN~@P*z^є^XX89Bmts|[8::3`T ` fXIH*V~m#>mvAI崥+.2`5gzzVںu^_r… z{{)"jeh߾}sqyyysν[?䓫vWZLŵk94ؘ)ؘ)5c_D_;"9D5EQgOR#&ħDTk;^uCBHvtp4ߓe Qyy[ۧPa:#^ӧSSSZi-ZD!.B,O~zw)-~ OV)B@4( ҄EtYYYmmM77k֬Ç߿ʕ===I֦P(BBBDQ4p%Kݻ7---44>-AXjձcdžB ,ˮ\0?Ͽ'[i?Sl0'Q74\t1!C?}M=_+7 bNtU͘vCr:N9}5sk}CS0 S8("m6f̘v[ZZnlkkEh4"l68>>^T$$$#*++nӯ޳ o#B@F.Z֐͙c{7u=Me[_W19gV_g_}̈P\Pyfg#0UHH18.!!!11QR&"tXX ϗf" ==CkWnIuVUj6-'k/!n޲EWl>R[ソ`_;=Kqdh/ocC66ߋ}jw-?t( KXAٓow=gF`P\gu Ĭy...v25"XW#. >KSŮTkU2TWӆGQ݊$$Ă x8ln0L&NJQ HQ (Bm!N$lZ EItw~2$kWUtC||ې/Ƙihhj8Wߌ1B d\F>Ȣ Yd0(4-}Q i?dԆY|qeq!('N*JKJJF("d! h.,,T(EEE4| K^a'-- !m6kjjJ%a:XV[J%8//OP,P(HeKKK2U1EUWW/[,***66 JeKK~30)))^8.77駟&шJ`boP-M&!i49mڴ?55 AKKK׬YS\\\YY9cƌO?[n[pE]pa `JFөT*U*qR* ,<<8juvv -YrWnۺuxDQE1--ȑ#:(-0ڊ%;i$CCC)y>&&&((HP$p2.Ē#lK,!!d(@rM":sLPP=cb۵Z͛|If``@Yx,E`O$ \R!F !F2AI`T$})ȔAH18֑0zfv62.0>o~c6 Q@ t: v joooEEISWWN ɔA$n=vi#x_jUFFƌ3s-jjjIVXU"󭭭E9²ZGuttguu5eeeᨩirֺnY.cVOLx1jEQaP[[[UUw=55!Vܐ\VU4M={655877vtVVv+++ϝ;R^^.;>UvU\\|@ԉ?}cqF&1 @={ !B;xG֭[R⋡!a~4M,[YYYXX(wJp8 `(r:СC$~8-##릛n2#66̙3#!!> 0LSSS}}}{{ںufYvppt]]]~iyyy{{{dd$ p\}wϟcwޭV rӦMK,ywKHz@L999򜜜ӧOKB}}}0tAAڵkZw]XXHdNh4͛4i EEE˖-NOOHV %%%WjsM&qn '+o |w"B`{ cܬjLfՄ)zy>+++&&ygYV FxZv{<%5bFcWWWzzbtYYY 7lnnˉd.o a>ӊҩS, {EESN E;|Wrss1'%ygΜiӦOmٲpdggK*jٲe%Qil6ڵXoݺu4MgeeQum۶ ? T'Qn˗/ &$iZph4bt:20̀cc!¬Y!mkǓRz{{U*̙3j:ujvvZ&V"cZ'M4wܡ!SbŢg͚500 f;{,h JKKfS"gggO b&ɴ(++՞/t:Os fT^9s洷GGGǓ>III(ܹs9g+ ~8 .vRy oDGG7662 t:KKK̙SYY 111RI! cC" ø\.Ҙ,Deow+NX,(&'';ThiiVֆ1s:SLQ*vZ&)vhjdd^6m4-l6~ ☹s'QUI Õɲ՟>;O)EbAK 9wٯ 8, 2|EAMٵw`n4}V.?z`GY)TƵV, 2|EA(a\Q39a|&W&,}$ę]FI|QT}}%GL\c2Bӥܳg)6k.avGQ($ -UaHoe+ <`Y/$)IYڲe W_}Ih,2 sQJEkeLq_/ZM^PeٔJǷo߾e˖Zw7|f߿_R677+477o۶mƍ{* 1)ۻwC1 y{L"oh42*Pb6o޼qFBX~WO'O\fMkk㩯g t]VVo۶d26Pxx~G;::?NQULMM!44t+Vؾ}ꫯN2Dܹc\\\sgyp|Dzr@tKK D믿Rd(x@V%?uht\%%%V:zL7|s^^E<qo 044xbccz(999w(&I/8>~?A]ivӦM  4pItUª&7ң ߹s̙3Jӧ׮]zzb1ҷ.sjjj~~>B0uHQq!**j޼yK.%nX&+ %''l,Q/~1 `  #M裏"##Fckk_Oyqbb}㎆SN]"%jZϙ3СC5553g4 A׏bx @IPeXZ[[{{{-K||I Ewwj%k",y?8$$lYEj0=())9wSO=%q#I4)kLHR?DOy~ԅdSrtΝRY8r=iiiXrk4oNg&Z˙ oTK0 L9T)yԹ$BSHrL?le~톆;377,"F=quww;N2Z---D:;;;;;=ja%x}:44d4ijj"s|]]IQ\\l0Ο?_WW'媯'\766z<†cY6??d2?8;{Dld#_)ӟt3FGG+ 6i$V;w\bOIYYYJh4666tq09p .\ZJxz>oJ,>.rs"k#+ڋEIћXTizGNHH6(P4rh%^>n7u߸tOY>GEE8޾zo b,ҏv.jc0U>aqg(kdd=,E(>f 0zl1`ćMV|\6.iPl" A`feerf=UFW杺r~V 5{x{'@QTFFP(ߤ(yD@Xmj͙7sBJ!h@4`nL+(wf@1(䲉8h *,If)S,0J/‚jȏn(y$xDe8NÌrZ*T hLcǎUTT1$.]jUttז^wVdTTL+4_L ~C"ŝHbV}< X9ɹ#nd)pѐ!Rc,1Ov< /VJ9 F D6I2 bEp<3gXEbM& IS^gG!cѓCRQ}) j"BOOϦM1x Lx< bڴiuuud2)Vccc983&& $ORȞj2HRMӴ2L@fEĮ~p 73^BsrrDQp\ك}}}SNQT$(}}}Euuutٳg766VUUeffG vΚ5ekii),,tͥr)Զ| c&$$HF#q .\$ghh(q bƌPWWGח[__nXBBB9X,sέg+x;YzjU(SJ%G!d2Yuf-,,DDEEICjﭻY@*LJ>#@Z.POOq!!!ǙPNӣjjuOOf3vl6O4)44… YYY#It@$sN0d322(t(t:9BKA0.}ֿD2HGG5R)B҉tGRIWJ#}l|2|gb>Ȣ Yd g]Y>Y>Y!2|EA(a"Q/,'o{ q9޸m,z<)z;F+IX%?Poo: p}K;=p '^u&UjRII] B$ TT&C+U=u$yR.釜f  ˲w&QlܸDJ i޷oy6Ι3w8gΜ1͹.cԉ]`AddÇ1IIIVn:uR;-ˡCX뮻<G}]wvϲ5kFcGGB(**h̙Ǐonn^xqtt4Idɒ;$9|hhˇ˲ڵk ˲eeeAAAQQQHBػwooo… fnb*'8-33nkk[lY~~>e6KJJOcm߾r=3zMMM{#Gf̘nݺ?<`hmmhѢӧO۷oŊ{oEEŮ]zŋ744FGG>|j<̞={iȑ#|믿`Rv'$Q0[n}-[v!Z]UUU]]O~裏v޽gZ}ȑu}GD҉?O>䓫)@K{$+ N䴷yFcXZZZJ%! Wh<)LQTOOOxx8qE*AV/hHbHd! FC\>b9.{>bRbZW#`.ba:4V('v^YYIb/ ǩSH7_ٵkƍ'HN%=s̵, $JgEQLNN^lYeeҥK333I6^2˲,٦i3NzOcHD0VCG]tiJJʟ'L:|BO?4!AOۄt+PDQԖ-[hEeYeLeYBV5(766_~Ϟ=`6uttݻ駟BBB͛700f6fs__ߏ~Jѱzj èT*FrJRan{ FƫpVӟ+'`]+@c:tLd(hric9Rn+Pss3BHVIl/9 ëv5䨴A ?wԍ.D&d W+ٳg?[Vd!;1z>))bL---!UA7LfiRSS5MEEBhʔ)BZxn755|}}}`0$$$x< .TTTdee544\Y8y~<|vvZdYcy\G"cvtt`Bz}MMMyyp\v<((b?>22R_p!55UpEEzbg\p`0TTTt:A0LIHH zl+|s\[h% "%Y%E/] lA>Ȣ 赋Q\rڅ\rTie\;F>Ȣ Yd Ư/0e'&$1>@.3XX=vyV~H(=ώ;H= eW~KEQ(O޳g ôڵiRT* Js>cRu=2.crrr<|^/˲4 vۛor>l߾0vRWWg׮]gϞk}TWm+!͘1CPx^i޴i:ujbbbgg{wwp2 $kxm&%%+JZ/+ hp8Xmii!^>HJBs==k&%~@ٳgO{{;!bbܹsǭ\RV744dffnݺUPdggϜ9!!!K,9y-{Xbǎ:nҤIgϖ {|ˎiR J -F(/( %L'a[3@cJ~RQ~gRRRdUQ@;B^¢'w!##C|#&NR2c9uTB:lBpd%ƒ!g9*KrX+))))EEE !v.\xYϢ-R^1==!tiNVM&SSSIFx@QTCCCTT!PUQQA%$$rV -he7D@QEQuuuiiipW ƴtREf"5322I ˆ~jXG 6Laaanh]pAVZMtFF, B\rh4ZVRI$3BaVzJ[2229y$ nooSa===aaa$)91STsP(3gx>n0&&& bʼdZ~r4a#[G#~\SC 4JJ"DMXh&5%D;9t@ A@ A@ AӘ(!A0,x;eYDuH?w@T  -%.*>p\2V@ L]MGw͛bq4i0CL&>&B 3Gb#~8 6<2șEuy3ߓq+V `pttTѐnAs"NѣG}>LWW ۶mkll$90O30yԝ6u9#@ *9ĀV-6+WL_~YV`6Buuuo^SFs (׻vj}ꩧΟ?_PP6vn?׺PdIJ7G1+˲bIIIR%Iںukoo/\`$''mٲ%!V;==m4322{_L22ҧ1y[4e rRfr#HTjq!fUV9NNM&SRR'|ۇK DA홙---,ˮ_pD,_p+|+[\O! -j)f tww@½<6Z,QwfI)&Y?!8smc?1qذ,H"[t:C A Uƀj [OO Pb@@ A@ A@ A@ OYqXpqH $b,P MeWꡡ!RĉD$UVV&%%af#GE ):[㸘HC!\em6ۅ RRRFFF&&&HcQu:]jjdQQQSSӲ;:h:󟏥WkqgϞȮ/$vaZJ.4"z(FcXFc @Ѹb  gG<\|0^d|{ᇟow_1_dubDgg2;;ܐק_QQaÆg```ӦMo<ܹRR<<痢+J1 bxwG20mǥM$3s;ac ㌌aꫯЮ]Nv,Z322E!UӅӃrJ@!AݐlOaRE|m~Ue֭[o* |<|={R`0n޼MH5LA$gz H$l\ 81D @`׮]s:z-e$*b<KGVu᧟~Gcq`lvd,[rdsċܹ/nѨJeGŋj^B>hkkk{{疱H&H I! 8R 냲nt{ weY\ti|||llLɳ,z@DS%@ `d@ ;8H׆:%%E8pcL.b!˲ <޻w*"АnohhZd8݅F' 4:`:A܁XO$-d2 r;wl۶M?~|1/&% ZzΝJȥؘ""1R]fA4 ASwXR8F#Ihs\=͓%*81?sdPƌJi vѐA` aGZ\p-go0:iNzYMMMZ^};x߽{_|joݺx KAaBr\\gs@cO q܅(&''Gcݚ [U4^?q2CA4QJčxޤFt(s$-E ݼySm( BP( B,OT[o;vСCjgΜ),,D]z|ttT-K6nQ Ǝ=*8_xeٚR$++<С_]u֩eOEEENNT~^ljbX<SΞ=1mmmUUU#NS-{Ξ={ɨk׮(cr{r?CP5bZ2rl6bҜQL/bEE;S^^cf͚>/;;[y{ If7n}T\p80?ƍ2棏>ھ}pYET+lذ>~ml^{mǎ 477>}ZEK1QX޽p8T4BP( BP(XB!?yIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot7.png0000644000175000017500000004632314717152071027450 0ustar00hanshansPNG  IHDR6w,>#sBITO IDATxw|V?{7 IY E.ں[vVkZZPPAEAEII^O$ϾI#BW^y|#XXG3!~e!3-2wAs8`j )h@xA+s#oсp Er Ŕa-jW`Ko[(:gžE3>+ Kf.AdT?: jH /2z1FD4Ƣ?iл@,|s۪}/eOw35 c}^ g2lE7ZT > @x@(\D?RۣK,4+bs1n @߁@e|Kzo XfkK7d*6 ʷ0{@z!wARW@G]8Kq e=οDfvb_rMtt f\GhvPk"4e_7H-S y(ܩ3|EQL}!@xMpxLYe`]n%88~x>5?߁+y"5([t ༻脦 5nnÊ!;ARyz5Tg[nغʪ y3Q_F0Fdv+~/o,B9o0K3?@Sog(џW}~( j6E q4U"> `™(\!OK{J?c4E?@@ 5crS#xmԜpZ>4~b ƙOi߅ Io@H {16G pFƩnG<[ljЁb]|;@z ^u! !9' d N<ʾaV]{~*Q8M8~DŌ*&^b?%Sq+ٰ>}6`9w8(@l4,P5??y0 4K@wh w{2Ȁ%=9]iyO@cH)P1~xmGC;^dEO②H(ō_:@$\G0Md%O".ǻ7@h}}S AЁُ@}1iM?pvRĹ_63i>xjJow?*6e5` b)>/] VPsb!8\wk%7b'zWJ Ҳ ~Y0Ӂ F>@Jl|̏aχ $~ U"# \nq)P~ѯ1,;?? -9?@0nDg=:@CGv)@f| /Gjaj_TO wóJt|P:cKIJy+}]9.A,tԢ6 m;Q]9#g!)oAw;_s_!/Kc2.gbl|H_&F'.l` T®5,B>l &Sˑs*q:F>(fmߠx!ې\G2" &tԃTBr MƇd"@I4ȹ~žU&!X+{ %w4zOäzOXsP B9 vМ?nLʥMa~y6?:{#1fg,Wv?E[|y$0 F) #塌 ;p q3 @əسJF讵l' Aٮ94W5t=3 B(xCHB0&{\ODER 0 Ini @^!IPʞ~ QuGCꓝ(MJA_a` I:D Dk3zѸ{b !>R L%CJM!IaQ!0 !$k8I@̇d@h*"$$B-ۢOZב CT:+=W=@l" !n ߘU `bjv&l^ȿ;;{K#,G B jh?3EzoGM[[5*|n^Ȗ$pUHN]T0*۝o׶lRRpʏA(,d tT!C]M $c$h; /ҲcG+ď@{'(0,rXR#.̴ۇM=` oƫkF޶H_1>(:" 0)7Pk_)p$)E )* OE v^) ͙6" kL\1*I~P B)aPHdPJc fBchA,+++,,< KR$)sTBy?{krɲ`P$xJJJTU=YȲ?rz)ι$I/yge!?`!PO?moo?f"A7_sν^_[7!D,ncVhD:qG!FιMIIzBŋvO-sMHgy<4sff'''e n?]wiMWWWjj*I!<''gСǦ1I R`\P SBx`f4+64xwjlO8Un} l` !WM^99OJJ:Ap8 $ ![nE41LLL: HII)..NMM=prӯjw0e+ PJSQ1'8JШcSYK'>1 =>]CQ`I"%(,XRbI"%(,XR28BDG>C><& !>(5oFRqh0hHAԸ>R[D9\>V_'zB@C=u0;( $ :NYa A\NBS0apN ),K99Npu-1-+%&9EUww jVS_Y06;wPX#CA&gysYY XapQ2V_|_}{!qssA[SXwJ)N=-() q3a(lF$3>s$sՇʺ[33[ٖ7/0Q8 WJY< % /Ttg;vg3{'#-lm liGm]Gu)cp 6M6%#>ܳ{L/njkkyFGt1Tl []@`{^pj,lJ)cc p7T޳+5)~զIZa\ ;;'&&9$iz;?{➧S#MAl-O̜ԄM| IDATC'<jUTJLj HH6wdkNU>q6v'7Iߌ:*Bn0& DOHH /ҜL9wt-D_wionKOKv؇eɶ_T7a6+Cب(@'ŔDA4Cdx};l©&;:-ndmFHd{nkD(ءJnlG *5cl;dB^޽{]hSv ;xooMcKGSK1N@?~ΚrAA=V<3NsņaL_9oooOJJ9sy⋕+Wfff\r%7UYx`B\TTtc mlhMLrЄ~xd;5/edihj#HKOZZ J߿po=33L!bŊ>n뺾|O?f1z뭵kxG^~億Ͷqƕ+WB1-^nD"/_qFYVVVVVwΝ,ZNv(f~ӟL7xJjFWg{7g?9y~ےuqj+P^v) 5wRq#K-8,Ҏ?\Q>ࢋ.?yzw}. o駟.IҎ; 2ydBȖ-[N1cyiӦܶmy/ooo߽{ O^^^z_|[ne͚5nF?sJibb,~@kn[ڭ[F+.EOK_3 rthfwCx$#=vx::HloDOgsRhkk ÇLMM]t띝ٳg/Y555uĉ/c .̔$}۶mVVVjv)ػw*,,MOOçrJaae.͛7_|ńe˖M2e,gB+--thX1 57vW:;\e74˧Y.ӡ +z-Ӧ.)))p??&(޲mGiC0C !v1tkVQwq?ϲ7O=T^^^`/2ͦ(0CΘ1fB!]Gdɒ4Xbb/~'xrOB9m43_ҀTUؤ) Π\t"BU΄|ߛRvWFFi`K#9mx鐳G o={6o|嗧<6lB曕^xaǎ ,HIIyN;4gݱc+**ݽv={\r%K]믷lӦMKKK[nPs߾ʿvfeSC~0Jo lѭוV8dhI6oyr,-EztUpu;kwoxD1|?M4{lfEιfzj)4McEix?i,;?8Ɏ٘,++hNX1\o4'"~#?Z˜7=}ۯfj8)n]vCUU]׻Gܬa&{ڋ"tBew\U˪w6O?&[&JX |>crCeujr|wݯ?,:eMfNsrP$+'c- 5qr-N)ۂ0ʹpğ{V.esϽhʩs+jpge쩮 5oz`w3 s}׎Ͼq9El.tסp>m+P% !EC̊hkͱ]0p9.foMffNuuuQX[ AVW9㒮w,tJ5pHv$&gvu41%wl dkjƹ;܏>p gwۉ;%%%!..^V|IJ~$ۙ$KL$ӧiaۭ:74CE vu{ a99Y2UBBa%ťVpsQ8=C;-|tpsQG2} 6QcI"%(,XRbI"%(,XRbI"@@eBv58XHxڤrSrn[bL ,\_Y1Z)FR dp0BuVo}* ~ȟ%!\C . F=7Gn+ApJ}4i 4 lL/^#>?icY4 (w!Z$i_'!#%?ZdĒBDQ@wwUnwVWjtr UM01j|ќs&m-(HNy5SNk '>K@͍hܴԜ,MjkJ͞;ܴ] q-uv =rܖN|b o[\'ajUycedDp|},]ӸδH$V!nʜ 415|u3K 7{mo`ނcN)2fٓS=eki4{%g&9rkkՓ?\6Բ>\ uw73UݾHsYVY k"jg{73Zw֥g'7nni'h#hV^^e1͞;:n@ bsSlN[ݞ&Ԭ\xo|SLp >l$Yhajnnnii^ /֭['Olz!ظqx vW_vԩB3gx]]]?9snZ\\8㌖3ϔ\{'$s3ƀU*H|c v7SBr3J&%/*7 1tNLho'*L?XREQ"M6]|7|+UV͟??iӦ;g| vۊ+M6wٳg`e˖}/--SJ?^x[o]hΝ;g͚~zI^o0qUV]s5---K. ÷~?66uT5cƌ4Tŋ !^ڵkVv~FFmLu3BNv5Ȳ&B e0P B{F!oiع5wXm|9EEE{~==:>>@a_{k&))饗^ڰaäI̜;VӴ˗vm> K/5Mr{1UUo]v9NM.䒻+''4)y䑟'}'P(k׮!CH69F QJA#J e 0 9 jf*vC p~8E,I~a:=q9 mSJ~Rm.2{t3,˪;1o߾(''g@CR6Nf$LfPB13 sC ssaV뛽i.7<<Ў|>_BB^hO:(j ._H`6dY1I@2(! `H`pP(*٘JXe2u4%B s! ӈBf)Dp N@)2иA(\HX#\!.[ PvDKǍ\D ;0CQ뚑/ 2c,H!U⎄F6-(LLXrd *UI}]a]q6$tu'$%ӑT4v q9/llF|O ='I9 &2l#B@bvZC##n'!2(Ev8Y nt4u]qv=GMZ2bS&첏]bHN0R!VokiI )jGQoX Jsldl4"vœ &&4&qkke:;1n)-ѣɋkq5|Rʘd>CS$:dJ I@a '>l9G},Xg-XRbI"%(,XRbI"%(, 0/ HB.nK r$,+ p)xUVRhQa`01<`ZpVZb;w&[ a`R  =k4A ya-BPX')q1 ٬`P24bBC2JbV +eab`Ynxc䎢V^/3'7Ӂ<߱ \S6S)ݠ~k|}:{.9)v(.$r&׏ 81N($G_"a}y8T~w /<%%i9}sZÌyfs,Ę` ||i>4]]w[r*lIh`>C!DӴڽ{VWWkVQQaSJ,50TU=fʺK㎼I&;gv}ŊuuuNs'{ysssZZnзØ0IRBG{)"/M9mf$yk['bB '$I/>sffիWϝ;ox<GU;3 ͟?޼yMMM]]]7t鬯 x޽{655 8l`V޺uM u=aގ5k֮}wmIii!;~RU]5s̞}0~Z/Zhƌn^̙3#Ȱar\d,ˉB i6"1F%jQ ;mSgwyFzy睓K(ݼ鳌 M7z ι(j ?^oB!aE .˓eْBҎ–b?O),U$_lf߯[ormmɓF%$vGrrRBpPkBHK[M߾|#yCƦ4gN\s!R!@=pR`Ob(jv!FƎ<]f4Q=!{N|#|~̘1%р?H7xOgi!@0¡%g) UTTB|>ߦ̝nw8t=B O$0C9$ .ظqc^^^jjjiivyMI sIDATB@a_X#SAoQzFŘ+G="7'2џG׏<-lqBqjqK'AgŒEK Q,)XD`ŒEK Q,)XD`ea ! k`bALG:nOTKBXI ([v&=QΥGsX (gwҍZP Rv=w&dp0 PgZDtU0{'tA€Ę#dQ)S%;VY d4I{;x<3LH@(I) jW66]U( TZi@*EBHHE*FHPqy@4(2+=e$$iL=s}eo@;Ta< |WFiIaQ_?/eUzn0e_(gDwLg#:VǺ(=cb6:aOlez \Ϩ6bJ+$CJ&ۈXi<&%J3Jo#@y/_nzi򾨟 Mc``D0JZП 2Kx0yL@ Hϟy;vfŋA)@2ܺavCJqI_zO ""R PHlG9\J.9+Ge %%**^ء`|>1…t"8B)%Ѱ8Ҵћ0 )ܐ\.(IDz%ȅ~F(prrPPm3F >>Jl>}*@@tRXi!J!i>TʖATKʨD̈́R1]P iᯘeY mGRA? @JN(e.zҴ{I$ҙR1=FfD3ƞ^b_%C %i؟镛FpB1w(D+ kOPIy@FPatSC*NOC !dσnr'n!%cO?4{q%N/\H!P%MKRȒٹ~ߊvĭqkVQN8WG!!:r~B_?.8}4cǏ4(!ڵk捣SJsF@nܸǧ{0M~oX LK9Ssp\ #P^LP<]p[Iq#mE"Zsη~t݁@L) |>w9 5Z;x cF/]ikF傈R7ӦM+***-- VPJH$PR@F4JeqJ\$ |+@eqAń9ARzĉ#buuu^^СC-ڻwڵk]Ʋ+W4445Ms7<{;EuJkŋ[ZZ(/҅ ֬Yssmܸ>ZjUKK ,_Ν;/B8`˗KJJrss5HDN p@\#(i;PJ(B!TB1Dz-FvɤTyyʕ+ƍ˗/#bOOڵkWX14 vݺuF+)۷_|Ųx<~ĉڶ۶}޽ XԩS+W=}71Ad2iLцBqo&q) ܱ씑,QIQƂ'LYi!_͉UJE"ޅ nذ/n/پ}3g;uJ)JmۃIJuֹ֥hPR^^~ἼʃwHgb~Jŋ3@3Zrn rs})MÙ~Rpner0c}isqLF293/H֌!(ib1ڻAXCC|[dY83a88eYBYfuuuQJe*++o{EъsuwwCCds>psBm粹ep,軇=ws |9>% #{T@G41˜p6RqD?YϝR)s)?ﯮ>/LBT*ֶd@ӭaP4MMܺ=#\ Z[[ΝK Æa~Ji<ɡΛ7BJ&{%%% ̘4__T*Ez OyL"; n'&!Q 5+52\ܧD)ĥV]rDF];߼y8 ƍ ޾ulb’ŒC:#4K!P>#A׉eY‚TrDضۏI`uvvNd֭[?æM6eK|555x͛7?x [J.]:T~fdcUV9r$///\̙F5M۴iӆ qlٲeKEEaCboQWW-I#G{}%ӍCKmvlٿ~:ŋjfdVصkW{{իWgΜw^peٳgo۶mhaccc$Y`AV$)F1S}}-[>͛7gf驪uHo޼y3P(455ս555iN<9cƌGˋ=y=?onnnnn>p<-ZZZ:4̙3d2+zܙ;# BofŊnz뭷N:UPP,|WRҥK%?;;;jǎˀWXdɞ={>gK;G۷/J\1CDnnn΢$tN3UTIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot9.png0000644000175000017500000011121614717152071027444 0ustar00hanshansPNG  IHDR6sBITO IDATxw}{rU8=ӓ#AN$$Rťey%N-]}Gڧ۳|'}+'ٲ%ˢdJI < 09tN޻?j"AhI^E&MTR8>fBȲ{[cǎ[u:/^822/u`˖-7xsgzz~cӝwY*;gΜ64ZZZ#Gj}C>lԧ)/~xxnappNW|g?F޽{-O}*U*[XX[x 0އz(N={FX~ZZZ=MRd24V"0c^otgg͛|.^;;w\WW`0 ɟ lذ _0<_,:.˲iӦ#Gs=zK/tm>|xppP$L(~u׮lX}z~^BuzM|ȑ6UUZ>8 9,//<faSEQ$8|Їb)ښfoBH8T*eiJ%X+FI$[BϜi?1òmYo#GWr RZ֦&]pԩBV(X~Z*ápZ]\\ .!Z/9mێ3-\T1Ѿ~bT8 ıս/{bPJ(BBc  L ZS@@ c@cˢIA,Q)FMy슚3ֶ>,jEM5}] طޥ @?vO>\#1kJzezH{qA4s徿y՟]WgP7{%k7wpu\q* `^q _\.P6ѷ&@XU^!}yN_ h5#UAU?uAHm׾x /ew_]07&, @hޏw7Qp(l gI曻Arr՟P(8OC莇ɮ_+#zxLjxeaak]~M2!;  h Py|؋B݁ P_M!  ~꧛>@ T=[kF0h/7Ko7z;(uh$Z| 1̛vj @5pkWq!pUρ_N +8靀e8s~. RE ^%}l4K(w޽(w \e܏??AV&~*7@|Q`9my팽 6Z#hY`EOYoq`I)xQpW\@da.0kP)/Î@_"~x&/1^so]ۘﬠWh4ԂsgoIMI 4P{{-f ac'F`x  `bh,{ `b0s >򿁣)@)858oYml 4 fI`BOӮO~QSrDw:>OdCtC_F'2Ď [Ђ( u#GWqoOuA K0 Fɥ65VohG5P }lyU pdxl-6 1\LjN .zR>5evĂ[g*~}hι\b&ܷީI7vJV9z+0F }6Y+cH&Bٵ!M3Tk@S\V'_ àj6M5, :E9̐KE1LE( Bax<lB`0!jUQaRUUalAzeY4"8PSJ1^BOuB U@9sݻw p$1?<7> {ZӉ`$lWŲ&n$XZD0Inh /ny;s'%=FDm4H+>bݕkm9R2R'F}fYX,.---..M0ַh47 (Bȷ͛7?EBӧ !drr2LRu=z k7޵S\0DBņ QJ!JbM=2jhjlJ|.4] b0+.%,8w &K4H*h.);k/1)bYV333{D"jczRrZU*dYmmmyVUUϧiJ4MRBC|>?>>tZ677e ~ll̲+'xu1,Fӓ++7 HᶶDiI_\BNBy82p&m%q( KIj&$ KZGB93 cT{'wwwݻ7{S9r]7JYOvmlܸ1%m8˲޾wx<~ 7eu[ZZD[[[^ooopK/411111MqXd/^Ske)6zHJ< &NP,T}J*`[cٙ RzgMh)ŀYz)OV$ \3oǏRtT*u?b@ EQlhtÆ hX.(F"o/jVVѕ, Ȳ4ɓH䮻ڵkxkkڼM.RePXB^8^9"V-i}_ ȾʼnIpA! sCGb(`r{(ϡЇu\ Z 0Eb/':!@s'.|"3`BC\apqgOӞ°VJ*}|(!fsss>!T꥗^3,˞;NruEwJ \X)f8_. yЋx@2iU]g0CY:Qv꧰s&.ԩ\"I0G\ʲ1Ce9q]Iwg(,˲,UDEQik˲u۶-b*t߾}KKKPV P(T(eYT*!<\>P_%SIS@,zcgo$ʲނgNz=AMCc]SEFNSz\<+r`Cb={2x_[_e5YSb*Jړhoٓ+&;V0oitt4cyW7ZL(!>P'k<xCluw?׮Ex~EN}}1N%{wٺP4rMr)y8W sX0n,7r"pD[׍KR\XG.SZrDee o*,ev%[G5cb*rfm5ld P5"[-E>y^zZY*ͻwt5ⲽ ] &|}l[$@"ǂʤ|Z.%8N|0g6EoDU^ͅ}ÀH3 1LE'T VuYuơc3loz#Hl@,Ęi[mJHIUٛe7ȧUlmBtt>]{hF*^7A c{}=CP.raLSl0o2֣Op_WtmwȢi2=} ɰoB,/NlڻJ\5*w-ºY$Y%/Tm!txPJL8I9Tڣ̦.QH8 }>% [N^8q`BwebRwem2?z87."|kė](=>>^X0 q[#e Bc+``^hFc*ʕA| 됯WR(LbFmM(K!G).XyW~}Ǐ~"ˋ_+,C  1( B(j#&=2}]C=ccc@@Uh4/o۶0͛7[533s?~<ڵRTgyfӦMCCClԩS^@$eyrr2ڵW_ۮ0LOOϕFp)B1>c<p\Yd2̙QI?|/_'?\`ѕ \Vb`;::rm%QIq1 h-,, OOOo޼9رciiIU;7nΟ?7;v[n)J###m߿ԩSL&].oqܓO>y=HtСj֦z3O?~|ݧªbt&c|X%&p2S%0)?6$7WmJ,4Yp疊֗3 bñ3SjVIb!$ !/ݻwtt4 J9R!fggٳgy=r!KYYY^YYQUճ,+˲gna/n߾dMϚsNl&0툈@r"s5P/Cgſ{8,bTQ\t㶀XDa )$K%9roiiiT* yfuUUG>"8Zm֭b E1JybnOOaDs5ѥ%߿}vq$ MO>{۷_闱*F sPHxJ8"f'"#JT{T8]m =3‡eHB$b,$Y8UVȵDFH)m;{8H@*jC#R1Hx6nJi0 Bp8X襳 6lظqr2D6mf1PA{JR-'WTj~F8l)oZ72L(/2V_\(UJ~-* lD+k-վζ=lqpG vm{۶mm76eC)|g[[@8JCP@ԖLQ璢ktQW+ -mL~E+eBM,TeCK.઺c9ժj,t(o#z x\"j(6SVU38̉lkPp@̩<<1/)L{JRk X+W&,-6A]xI}M N<ψQLDK B0 eXa󆵡#+ka#CL?z̑6F՜j5$Y)Eu-~cJ^6"(PdRЪa^\^j. )(U #n؊qNLeX % 㪆9_5 "TV;ureN2X40ƖJcC15eׁCr.7rU^ʪQ͂5L4lU5* +IboAM 3)n;Jqݕz8drԊer걀/N0uq$Y{1^v"/kw]={(=j 0 1B=V۶=㒷 2_gjUx |Ri>IȬ I`J2Xj٬#$a1vPͩQ|rY0+Y qܑ#GEimmmh`R1MѰ8-,,h4|>eYޙ/o]!Ŷ[&buݥ| J-++jeZB 8l0Ñ?AB>KRTq, M|-c>ͳ/(6%D)Ue``[E[ 0r\*e[;v~E{~Lpt394f '$:(p^xe*"pu+=6=|Xm:;;?OyDcn."wMYyYWYek)!ĶN}MAZMW#gGW긔aWj!zIF#J%!b`iu'Pǡ#A(E?]BlS[x6WN3Dv>9Dҹ>ŧ_@ !F)rq ;Sԋ/-)ð6%k;50BI?w, _lϠsaGM9ʹ+wtv}^>6V {WNўm1 *}Ρ`WPk,ؐ'JE!95?']@F$4+|\}qPzq a ױd&J=mE/3./g[b]KMLLld҅|jڠ \jgFsڡ Gs練e!?`2\\O'6G6L窎jY[Rn61k6-T #z1B?x5eJW3DDn#\'{5PK*ytR}zp ᜳs3&ym[ӷv$LDeՠ P\RGJClVTuį'wmUfBq,|pfl}8132_gW`uq~+pW-X.qu5˲6oeu]Wz)]EQܳg_!d&!$>880i>h0L$wKy!Y<Z#gHEaFf&ϥ.`@^SzN;q٩_y!b>u/=?0#;B9hUB u0X!KV*VXAfk׮ӧO+[nMRm۶e'N޽uݹ9O=zM7y$LfttddDQjiŽ6mm;m۶m~~~iiVy ͮЍ=-87k]Sӎ _:Z~ a2 @fZ,%-S1Wx3 󼪪H^{x8Ϋ?L)I&{U'hmm |>(+++JRB|-T*rUnkkb$=sy^Q3g,//{F'躾zLB:\ټIbJ(n*eN-eYd|l[sxRL5풥@\b0 PhDɫؚ19_rɚ44 BHK m6==ND___"h*i O>}#<NODc!MyƘϐ[6=vJUv&{̓J{kX+ӅZ/F]1fQd.e\!{P(H$#醡KOfY$Ih8Q={뺭,۴\ 8H-3".tc _06ULH7M~apܱP/ǟ?>}mPqZT0P!]ڶkfru&S S"J<2XrmZI<74ߔu #T@ӡO.۪O޲.}&>x?V܌р1Exu*RvmH=8/P B#8DY Q8EU \5C~},JOݪr ҭ}97W',;{D+6oضy}6[t,O=žLgYjzEf)0C0a?wVVV΋16D-d>w],O/,bvwɅ[+Dnu0xŨ- }/:>vZѤ@C]kq F"tp_!ОںV4RP(@H{(F"aeY,B!d2|KKK"<@"*=PuvE4`g/?o߁XԪKMO=~&sYݒ0 86JXL۶Ͱ=l .Xe1ȱCүT51wtgLƫ(˲,˦ir479,RӓM,˪Q(z=l۶myyZ^VX@^[&"ĹQ;;|~0WY0]cGN|?HwlN:"Fg*<6|bjcoR9,T;| @(rdTZXٖoߚiPgA|Pa`0ؔkZh4Z B2 BiiLՎ(˩T2 .5:/ћ:J!޷bՍZoxܩm;}eVd\R%ðah[,08>Y[{W^PO70ׯ\LJ/@)M& -?-(^3$+ë~ۿ Š//R۱-BePfA ш Z26Yl!ԩo~-3o+d1K'bM1zxw} 5=Os&ou]K_=I|(ǎkf y`x/,,\ϋY߬¬C%MRXRm$ ((:.kZ{{Pfo 60ͨLV$/NWw MB$H"vwI>yOp-V?̫g66s<ͿQ\Kc9qMSW\v^}F7I o9l1; rjY>SG'RZgYݛݛ>H(Mugsu-᳣rZUŒZ5Us(XeeeYkuVMOۖ*,G"!yΝ4yUA=;gY,ˋ7*z^'aA.^A=m0|Y@)ҼbB%:EgjX1nziyaH 7ecێnZC]ڮ QU4lv-J辻ܷZ][\,H'OFǏ{.^80NbYV9񫯾jY###a;v̋-_ZZ*~sT*N* N8nvv XOT*`lٲn@jbIxzǿ?_ʟ~˨ji&[*մ}ܴ`p*N|[O;vm0=e[2%av)"ڶCe;mMr< n8@,q?|Q7!iρdqqqyy9xCBH{{/o9 wuWWW,=== /a>orrnh |xξuW35EY^ѯ795=;^ ˬßn{6-Q+gj+kڦnFnJu۱ %Ķ7mZUj "~Q0D"~a]קo^ew|86Mh4+x9b1q( bYBp,bMiq]\.H@vyW) ]8;^wr+7u~QmZ42ya(߿8^}o7)>h߰y4^۸sJi0 $Mwк/PX@(P]bif.7:13[$YS>Z|3D|qqbk6 LݡԶSS@@i8Yޱ-rlv粢|kc[tv.[yY:u%On*=\V3DyԽOqhAK=z諯s-{Y^p?:<1rcxҖnD }~|s?"iI8&J!l۹5y?аJD(FѤq;afCEi'?#tr.W=H%0f2V۩WKQLoemĵ˲M-Ǵc^>5 C  u,~ڋG~x[ȋһYR];wc|..K"MaZ1"Աmmp?8!Jm%+ F~}=ZfϞpӞ-rMMTV9B6W)U$E.Uo{c5>Y޴__>d9EpvY*.+!wxB˲^ 0z6E4c\g~ξh(gg1 RcjF07+c3sk5or]JE>}^f)E|MswO}y><>-ib^qB:8N^D"inK%I B'Nhmmy~zzzÆ KKK zgj3 EVņzsmr6qc,fbeR [$ 5UGK&PvhUǭLؔm#4q;]XJZ ^vxC (hg!dҶy/xʞ)7n؜g]CBd2d/|UY'=|G\uנLӴZ E1"<>CE!"Q9`h2n$%!d,^6L T[NNN*aT2nлMxr%kVKR|~ee4{7YefXL&LNN^[RISO}󟿙?gʕfOcù.ű$-!D653o֩漑xdo zۤd^`ee&=5 fiq IDATTkݢq.Ϝ9S(nl? [Bc W&8- fˇ>SDJe_{H_^Rt5muvQ Q%$!$D.AH$H!$%Dc&[%7p˂F=I PD)"& #sd" …tWgLkXÛzxV/i[jF;1 QF($č킵~jIJN"@JA)D@DFniOszj##?[2̐Acll|!錂2^ŘKpEq¸fBE[n붯ōdɹ !J&T2Fu]3]V}CV$ +_F$LVwװ_*s1JM5+iI@Sgz.mU -}c?UUEתO{)%du1==קZ.W/C?,/1}gbyfܿ$HT-?:?Wδlq{k*u>Fv keZto/\.qn1< Z;wn֭jSufJiTRly"<:ujdddyyy``@@"o.;V-//oڴݽ!uT*etB Ձ(߯9\93o~Q Ie0DϭRM6sb%yDT#tk(;S RɤSJǷmF)*mmm/^BJ%կ~윛S2͈877.sΥJRTժ911h4Ԑ PocccOrcccKV'pllڡ J)`[6p$afReK-o.O. `MO۳{zw.gmUDh"3 ݢ@IbE]V``()-sZe>f.qN8y3uw]Nִ%d$S Urm6ĠQZ3 !x)%|tt_'?t:[,MTaRo|۶mSϊ4ۗJOt޽]]]7o޽{7\04!4MQ]ٳǶL_[;;ѧz @._jx Or[)9Y~k Z\_//k}p/^]6-X\iZM8ԩ"UJ IfJ ntZ/zkb'Ndx7_,-T"l1iYn^ӻGz+Wg,JnmKg\ܷg@{iLVfŨQ`zݲ;b1JI=_[Z@*pcԝSb6}jQfcιQÆ:X(jd^BmNLL v7&X,*s-D)ɉgЫeruHl93ɴ8-z75!1օ.|C ?|Oƶo27 Փt VD: Q- gRHB֞M(CkZմZw5z_5E&' 7nZ.v{x=Q tmyH !%15&y"Bٜ4u QS۾>G4Ν]q ݱ H R@aJ:7毟o,2R8fѵy'F~mU-iW+tڭׄm(Htx賁}wPd.MM VT +DABuՖeB4R\@OP$vR-Զ'1ӕmI$bZwuX~\!9Iq{gNJ():ȃ>`@ƉB RJ*b]j 4 s hDh|?låJT,J߹BP/b1ݦSk_@ ){Xs8s |8RJDI6Rr%05RHџlK~х&)9jSg,JR'}YnDO[b$H{(]n8BR:B<3MSI [uu] u) B4ʃ(qJ" ӰJz[|l5FQH$m hkkj7 円.^}J~Xlaaa˖-JEMwqjv972H۴y+*+Ӷ\2Qmܻ}qaJ'Cci<akDYq- 竍%ptʫSFHB~iLFN41Xb13&_aryhhhyyyppT*U*d2#$I]UB0007i hm}m^Éj-wCb D)Y k-DSg ""P@"H"Lʌ!@$HJ$ J|TYѤQ7Qb1 *`6iPɓ~MMZBR]MӡV*f>8ѬwgRʓ'OڵFX#hR2p\'\CP#ЈԈ0P : @044"5: H#ycGQZGuUO剉 JŋϜ9=~8cL T˗WWWC|'4׎^p18!D4REё#GԷ"hlպ4Z=%{f4P(BPRH$H)!PM`Wg7$EXT`D  k' (#Gdك̔Zun_S1X t TY  a5I$YEЦfH"@xkV% [DRT*zj5˲ӧz!5>ax_~;;;Kԣ>|泟,!T+R={H)Tkӧd.{fggU*{ff&o߾] @;e˖t:=99ZoرWWWϞ=;22R׳fz~]qml0(XlK[#KC[#FlJlF-: Y23bkh15bSh3(X b: M][feY絷 |>ե"W\i:6mfm?~;N8q'Tچa۶m>|\Vkvwb޽J$MNNVU%Pѡi4 U$jbfNNNEziiI P`uC}k/|+ ABEB A\s+"R02<4kZ GP8jRŹD PGQrlYV{nt}q:::lۮVej5۶ R0 ;:::x^o殧lVT,w|5"P(ضDX,@gggZUك @r|رfYMӔ]ZR:uzq͌~tBnAt$HH %oM#g.L}ٿoX:CA9H"%Pr<0 y (5MgL szNY&^4ͧAjfP VU'ͮ[mA:)[ }?J{0(*ͪY70D"H@'j@JطmBwg~{ Q z๵( "k}J'\CJ_L.u{b|ۺ*Lo}xm׾W65opuFd3Tڠ @(Ey}E`sNh-j$ud"5h A"$HeO noQķ$Xs]uހF!_LR7'˵b>k+ZyaB/x Y_jBk]UY 焃F$$D|Cb? 1y^J 吥) Ju2ep.!oI;_4fFP ȗ#(ʸ:XY4f0b/a:aѾ=N0!QJAB$0G?#@BkDzG塮t(0am⍊(SbB(D$)k ?6ZOuB7^Q@% =d@   иGKCG5.}&< ;Q Z= !D'͛U]E)bqrrv&)]UGqUS˗/Z[%fg䤚 溏e $g_SD` H5E lC(C)(86FQH k[@" HAF}Ƈ0 @ӴǏ' 0 ÈeAŔ8;ط5TK|>MMM Y5;;dT}cBQ)UFYXXVRK?O>V*wq!%}Syd| ER UѣJQDQ RƘy*;aSQ-ڏMq7w$؛6*PmD\)Bϻ W9XL] 6;Nsk·㑼{P\T{F֬"-vu^lK|>HsKCY5$.3P_w L>O_Mnq9W=_Ղؐf:RR24]BM5ZsD̎l(R\(DB 5 P R 8( A9Lgmvq`O-ښ u@P2M } Q2nRf\JÐ $ :X1bTT)X@W7J_ no1s-bىLF燁2?۶4Ws"b}N)@e@TF%BF?(a 9JN4Trfa.!ҪLOߠ @8cۙyc<{^nv;;z\877w+s~D, DJ!K@&PS39o===r9JI)~uuRdޓ'Owtt b>WɠuVV5!D7<$?̙3wu׵rBkaĶtkpo֭T<+@ FGG{{bv<~ˠ < %(lP_}y"Rof5MwN;V*}yؗ3g ?AOOŋWVVj|9SVKJ}Mxgyf#򏇔RJR]dLJ!vgFPt%B_P ٞLjn\Ӑr "!J"@D TYY\,:w0Z+2ɄCU5bDqպK4jy]]]Lf`` |?}ĉ sss/^ܹsg\G^BsܹY`Zcz~; (Q % & 9t]"" r ٥e .HF% *u),U`ƌkӾqG0 o*#iZ, @.>|јPմJwo˗ȴえ׭[ $HG(8qx_58|c  24va\ .N"( J%JXʯ0]H$-^r߾}_(r]ײAR.G?XW^yE+'N$]v꫱Xl˾!T*tgrmR+:ո09_\>pygԅ3SHIvBg4T*rSWVNj=%Rnh1)`Ts" O!K(ڱcǎ;s~wK)l"l=]5۷oW?)]vq[fY6С ?j&k53W|4 $$ \05~SuRq;Q#꾈"/[(܆ QRu3&:ӀSdF?~=oFwu世ݺC!0sÆnԲwǎM!yx`Z{*E)S2T:H1 duu8u~RZaX# Z,0u( {2.Erҿ21A)LH.=t~H%&c0~0y-c EW[V\Ylдl^7Y^ӊ+5I(e'㱑AN( ݆[o8Z5i/w1ǭ1vƢH Jԟ'fԥvk[$* IJjvv4nuUZMaw7ˌd2955|^5Rvwwb1qbOO; ә Dv=²c: (rn%mK!ŇERPCD EBr.Ek<]z̈EJRJ]+lb*8N& P.14rd:::TJbY===mmmJ"뫫۷o_XXk]-9HV5u3Je4m{ g\3@ }74b1 QOR(1@Fʥr2'ȄD"ݯ pa4X˯bQJX,nٲ\.k633ٙH$Tc@!PEax=;;;88h4cj:vÇWVVLloorJ>#XY^a~OWW&i3L vgJ$Qܐܶcadtg{8RkxeNjŊiiLNMnFRd62kJHRB H$eeYBH&u=N[67˲J*WMB5M{G\f-ZZZZ]]d2m_|o}lT){+sq;繮1qmvuJ.kQ0%HB3P,Ug@fib}}Ƕ-McARYEu]S$_Sft#5vмMyƦ"x?yD\~??_M@[Zw?N1Nj5tRrڲa:|mG.Պm'54$@* ")j8\Іs{`QenoMm-cj{啣*Z5C*ZzW{9ע)B)=|Fw[jQ략I[zĉp %4BJ۶cfP(s!(frp0LӠ拫Aζc5{BaX4S}}r%.]cT5!H) ( HBHy# ;?~~|mlGG]:<d23l:ni4Wj שBX,R ׫ 0 0"."Σ^)WWjF '"F3##eC(D6nz[ {@IҦiڶL&-2 3B!lQrq4 .Bt2Z#K(`#x롩`kY?j-,Nלj )(% 4Z,tQ 1 Z%SήObajQ ĵβIc[=(O5.V] ]]]קK)T*+-HYJpY*%0 C[^Ωu]9%lu%f{;gd3Ja@ECtW_UiZvFӴ_Mk AuֆnZW|M?^XJh4GGG7~* #[gJ%uDsCqJJ .$啮\.lmn~G6F7 uvkBH0)%u˶ťӧ_x2h϶^r'xl۞ \.'ɑ3gd2ٹ U_bN|sllljjT*9tU X^^f[l9{*4 cûɡ&###]\FLN:;<)fZM)a9:"B.\ϫ7zuwjrsMMNg;zٳbq|wsި{kλ]wr+<==Zyޏ~#MlNӗ/_>z](WR,ϟ?ȑ\.u偁p,Ku޴i`bb[INOO͍yqvum%vi?$V,~Ǟm_I&x<^*̙Ө9%)8 0doohCwufSO=91{yyYӴ(=}|>Ie2g=/mT*K(Rǎ0?;+ CگʡemxI("ifŠp+Wâ1ǕhN(J}}}enYR,R==={}B>}Z]Xe};M\O=c=R,)af2~؋n}቏<>;3{9X\DO>Qs|Gatww}xS##َ-6EQe5twwzŽ{sݿr===RM6 !T35mДU+d2ŅW^[1S}>rR 8~=[{'NFQq`ťž6?}oxxpvnqw7fo͍ kql[~rLL \.bPt?H^<3MҥKX^^)WJ++avٲmC=l1!Ԅ=|rcx ] Sl,}+KK϶K={!Jd/t42LRF?_|e5K+D^wK}+ic?8"<_|SD熆5f嗾O oonf_|o~[p۟yj.^Hs ss nðVs -yAVeҫ/j>?sAONN~ _t;;wu tq+Ouݩ\FnÐu aVK/ŗ9tD"oߞS;zqǩF, 0b_}X,yBJ]ABcS| _,KuСC Sw}GjdTtUh4ƪ݀J%QJU+DJiVK$*0HoR&jj۶dMV?R 'O4ԩ7::::::b1cpp`JE (J'qƴ={v>ѿ痗;#1Rr]~seA{=sF|[6y{5 ,BrPhooWI:ιH).m D\\\T=fffF\n4B9M$繮;??~\Bj$u[FM1>~~}{:sdR4Mgx*idc'VWrRJoN@rFeyy\./9~d:vqqX,0(R ( b[[[.K$ÅBA]Uf)^xqvv0l6[. cffbFWe˦ KOSFzԸi)g}40 GG}-7}v„ hx=]zdW&ΗkxE<䑠Tk7ip===ZͶmu1VՍ 5H)=]XXPZfF&a{ҥݻw͕JVC-fTu]GB`f!4 @j%I۶ JyM7zv}=CT,~ .hhUVDuPMt XH)MB188y^"PeYݍF#JD!dtt4u8ܾ͛2W&04i1۶um;"!aL<0t:x⃈$0 {uQ> @ή}'NtP\&|cS`O<8Çya)?5??{CRw|j"c) !e( $ 50}B nX5GONL ܸec>kgCWj %J(r%XlFq E4ŋJsC /pСfZEA񥥥d2麮RTj4mk+++###\n~~~Br/饥{=z^WښW2>>^,>E׺ '?S]W "ضvn#gKϼN,Z 4NάX<7>շe~sB^H(D2s R#DE1]ף(Ryy˦#@1亮i͟TʀRqs*-JD"zL*AP Ta:ȑ#;vT.jމѣh/%mF[Q5u) "[~Ѿ'fGrٹrTY2a#C z1*G4e۶5lE.8Zm!j:ST޷bW]J+iv۽{TG=eCp.^%tR3@hN e8Ht*gT];߉'b鎸az?+kR)N7d&je_cZVmzL:}֑՛ۻo{Cmŏ7#P{tsD׸aI DJd$f$|īZ+d2B PBt7Ne׹]۵Y$f$$RV2qYtk!m3۲}_fSlqvޗqNtT ) ESj&ѽy-snox3"Ht3F3c8%=rafzQ/mm"("ZD$I w=Ạ rv^n">!d|||ڵ+7x\0x74kqq1#|Rtvvdڶy^&Yvl__3[z#BKT:=;S k. AЄO_U˅l:@c">QA!h!82 q!JbF(-7oh@6RhH$TjvvvΝmc[ZZ鴮333###ׯM8;nZqĩg[>X9Ns\` @юD)WeDQR!MicM!  Ķ*˦iz'9,r]W^]ȮrL&GFFl4 c,)7c|^ri d2}v鐤%o&R"ßß2}SBLXIDAT\PKK"|gL(DAq3JtuiWSzcHZ{׶LRz#X W}&`0XV-b0ƞɂAT2 RD"%o$f2.Ȥ>Hذ,grT#D̠),)'(`Hp!|367ej!$9`PLӔ| c0 yY="?qJ¡L9L8 f~m5b H!Jl"{/F:"/[`LZ~zzzWX.m%3B1F?{0%G]Rq_cХW^YU0tM/5I!zs.@ L:n֏* 9 b]` !8!uƸL0.$) 8 a1˭$`mLF) 33ƙq&@p A0` c3.\c2& @38g!i7 ~5qCbyo h>p`>c q\0©css q N !@L 47MP7lU1Gcc 0"@s>gQg19 81@ X9' 0NJ {m305Ε*ͪc[/GF{AGy$XFUe\P*B#`(qN 8<ưT0!8eẹ 8BB)c8rIr#BTehq*J(T˲(:[jK30bQVRWWW@`岮몪 RmeDDKII4p>WU5WUI2+YcVV 7.@ B ]SÆ!t]: j4 `4xm>l㞠,2F4uP FB haP25+kL`@Ugy&OOOJl6eYRs]U*Jd(!$J&e7ɥB-fV39UMDY"b>1hծ*Eֈm _Mi5J0Ni^}]ẘvu͠yNb Q`؈cL3N'~y[[[/[}$rUOLNr E+Bh&MDmܸQ4/ykTP㽮eUJ"KZnZ?$L!Z*/רN>;FL$tj)TEK5-c8z@ +f>VwzԽT1pOO{ח/áh yUa޴*t+i[e+[im74 l.U{"O#y}8#uDApm~Z;T]Sg>--cGtKGU,&p4~DbAhRW'j\0u`z&R>-ʉqEP%`5`O˹5]1 5eGg&Ϝ9|CZwm –[o%( ˕Z=_-zgA]YӴ 5DWNVg[vnup_8b{~#̳9¸/\xaMG\8zoHj8Py~m۷{yrM&R33ԏf֑T(SȽ[4rhEs(ʔCS[taD |%NMug?+pίF^ȝw_)sf۷}?ۀ3/|F@D X!:zFxǾ`f6gΖ #(MCgYٛΟ?- R9Pӛ6mL$Buh{{S1`` TQb6繞=3ag_{_ۻ?kUwn!ユS J䕮O᝻[蕗>z}]&?qOuh5cldddbbBP,3'5:vbC;v)eݴNJXum۶l˳՝mo[e6`f6셽h<Șm{{{&ikkmP(H$lێ333ulێD"+Ǒ0׫rQk`fjvΞ l*:~XF'OO-_Qq}Jmugh1,EV>p+~ﯾ#dr?eB)hi,t 㴵IߣiZoodm[&V#"wf E L921-k D41qiry܅ӎ[^*/$Ϝf;jʹ )ZZժj!-N5/W^]K5E A!|+CF^rmZ2ƾ{q[=.c( AR*j<Bp꺞O jubb <۷H F9qfx׫n(@ x{2hxxXWAQכF 4DM4DM wiwu޳gs=ʯWk׮{#BT*ݻ7J]UzRСCWc{+k/}K\NY|rt:o߾a]ׯYeX T*_W^bשr~nV^;֯hqt:-Wҕ>}P(\߸N}Y>*W[ZZN^kBlσGezBc"]&c4\Z.dSlh~ZϋƅwHVܡJ.ɥ1`~~d%d|I.:*G4A_sg$vpƴJt &EqswhdL%YUcez1OStˑe8Si.ӱPg5.K0(<䚐?2 mFo&ɸyE3INGMycßn텒p8G &񵸸(m O.ཀN-]7Bb"CY2enBB"T#,y}2bQ^vEBG7"T-#ԊHbZ{,@}v&\t Vl| ]rmfaLs>7'F%k5AH89yJNYnn,4B r<)6mB9/:w֦fӶmZE-֭,s9f4QtEp!2/}ZmhM wu+yrQjE0BeX.S+EW4Z1N>/~%f@cn@Cla0}wSXGzG_^ccPcrf|M2X0H14Wj6EхmAPjSl<2&\Ahb% + bDJuD^_/[)$)~=SQq!*%:e#P,b?Uw%o'P!V.#˭Lo&`WR n 1E^&Sְpi.EB&V*,`X)[/R3R`< #4` 1Y \`a9) AP]FYw60.855%=ڱd9n0&[ay/!""$I܈bBϖBV[O4ҶC ;@pÀ@kBZf(LaH(OI>LX|e3%XG|)cu-6Ee;/!'s] b"yI'bZ~a/*/"0bF "^Ļ`) _AoV~1/XE~ՒܜEwVrf˵O6Ivr`0H=0t7={#+2?;IX,|~ ;WAgfEB,m|3ſ&KӾ"83KZ05Re>[kRӸ7q?KAv?ٺ_4+$yqfwD88 mS>O!wlDLс/ *0t"IiM$L#.|< +pO=B߬uH\8gm6XQ}02C}ͅP@w;DN.2t)v0;V4هj=1{Υ{׮n+,B܇"@DH#q )F!FjpF7"6v`^  Vxgu^&dQ^e@Xi i2/s&s\KEDw)5Hao7y |:)arbJjW`uе=t6Į"'R'y\T.!^OS^4 ,zA* zk,{F xsTC$$G.mJr+S/$t;7=P*)N}I$*YI I[crN-摗/4$ၓb:>Y=&0 ^7qEv K2%p0![O(kbvE#%6*z…PeqbYl'"kݶW -i3HK/(!i{)6O1 ɓ%>P,m7M3g)ë50)䙬YhT1"K^l$m.$dX^Œ!t9KAjVM)j4$I sNkC>`I̷e^/[zqJ0\' @Lq5 לCyBYH*9   mb6PH@CcvX}~uuFm;lL00, "ϓʶ[ޑ##zIwӾ?||bҶmMַQVF/[ڏnŎR^ y a/' ,tHe&T+ N#y25‹\kby{j x>|=\q ݑVB) nh' zaSi75-?br.K@)JS\DJE"5+>IoIb}53ۆ%d! .b3v~95B'|d @02HЋYhY"VCXVˆIJh0֝rӜgf5F˽ᾆ|)8G b|GQ*/UyÄS#}cN]D%L L'o#s/5eaPArެ?XiHS$^yd?<×(VA'zlH=FH¸;ć``?A8#iu @@URȶ{ѢZǤiaa!t@UD%-6OTf0ƹbȺ1<=u\a3NqMŷt V2MwBrBRdl%,vG~}eVؒ}~ş'[bL!zM"wa{dK+fyꐭS^&Rr4V%TF0=z>fd 64%SsX4%rfTj,iYVs7UB[8kuW2bqh@FbjjB3lS]X[?8h#k40|*/)+UhJ}PfQNAa, 'L8DbLOyepiTZf4R@zL<aD e.xתCF$&XƼxo/V`֘#QDbZ[ЅLe@Ҁ>ix0݉lm=ѧM1:]7Mh\1V)D=)*yLJ)ec+)vwOczDB!˝!,:q6sōpdXv4S  Ѐ+ }1 &_p43H\ˤ^=7=-n+HF[Tܒ 4)Z${3B-ykbq۱5qRri4H;>oH$!<&A0a5O 8#H rwMU[TN!QkErbVf -S9j]!Ft7[:FKg4i XҮ)ߠorrk4<Lr8_OWP8rܥO+9@W} ,k-0 bI 7kRϢusҸ9noA{@T_R´g*n3ݤF$2P{.9ȒeqǺ@®S+f>?F9dXܪ8?aFk~$ʢD*<9A[E |zmqEX, 4b6 ~ a=C̒wAG0.Xu>f޸l%sk(f 4磅bc~nWNCWyhBxv43H'HHKWt2I@&ea*'Y5P8fTQEGm4%Dyv c0LFkOA%eI0 uPR +T^πUqNDtN[lXFaN(& b╻(BB]qi z}g[e&V2e z yPȺ(r@*&- "yAC yήwp i5醆zA?#V;`f[Gy|_Nqѷ2҆@xfCgK~E%KElM@,PpkEg6[ڨ /|Q,1e&*h?v&r7U>`sѝhA}4D7=/x-Z@ 3GTF 5 K 5#5!^K ?ÎVsfƍ}  U/Xx&^{P]Ɲ֑s9C9_ˉ;{"X:|Śtڜ1WMP?C)d}/Œ?B~9;CBa4n4 &ĝ6jR2@c-HSùBLYb~J}pEid‚W_y`t_aռZZ)K(iV`S;Mt+ 6Oh0x2Ȃ޵X )+̣Mx_aALspʨj`M='tb+E(ruqB[ܘ-,1 p&ll٢7¬8;} 9c͖LЉdS6!Jq<%XhsSSSXdדYLPB'!>$WK߮2ƤV  ; )нRwפѢz8?dӾ Tfc5GEjd꽝˃ll"ې( H?kO^Mq>s -߽ay"_]m<0IBQ3! [,Ը-hm Bv0F,YY BE}D];<ºC8.?n%},N-5Ɠtp{ ؈=~1pG (&M;-+a>ye @##[! Fؽc;>,yMaBn`މ1X9{}$摐) i!w xdʞ|OkoXK}SE2"%DO܍CN+̝ k̯TLi,}`Scȡ IDAT,6IHG yP,ss^-EAuY6Ȋ<9EDwA.& B' Q\Ym/t!*U "Mq`1/ BrF'H"Iӽ.ً.OmКn/d!zu+Z rJAJ@'(&L~UxJ$kK~e)بƤ=|QDfMع>7҃VLRʜg~PŁ7V+T Ҁa)腕n8%v(:vuR,Y./~sX,Xlic*7;䥡w$£ZLa1Ӄ} =2Pglde# Z IB¡{ǖ5!>`&YGHb?1Ddd,zT#P-Zx%ɋlFHQzo oλ)PÚ~݆н2^&:2P^rjk* JJQa@유  PҘbFPzX5fz7m$'h϶WG}'к0s4I,v%=$tgn24yVWh١ɏ*9h5"Go oA\h›g o39m"מ0̼A!LxKKh͊b&40U~#Zf.S2_d)gO >Jmt=&찠xr¼@`_"U| 73@8BÈr܌ Pw;% ?Ab}) q?iV BXQA`'D7{ƙ6Q@P"F5݇bL!3 Sw)a[7PęS^Jˊ"@9l1T=$1)b ~\cA&ˡ8 MNv/ P˖uާYxѭ,O0sa>@#4+tL)CI6x&GZSl!0SNi:#3~Y'xwMt(۸.)˜E$ßٺ^_<h 9@A< a<[Sk8%e33^vgMl7`S{v<5&Ȓb` z8E߸1Kn7ɾ0|T7x6g6y{dxnNE}P{> b &)GioƆkt?$G6E #U [/e0_%x!yu0Q( /Gah3Ҳ,\Ic=HK<%U]kHYr9kEY` $!x8Dۧ|熭# ¯LDdȘL̽,eM g> x'bsLi<AtbC7$k&Ϥ-95cL;R& i7I"?)*i_. śB|E?nr[B'b=lξ5/"# &#vZڠұ1*appW<% ") qW@ZK$"PiiSKcu?c>ʃopJ R[z-[o-orhqo8)II 0FiwvzL-[9hahMu`5ukjS@̃_9My ]z=BTƅBd!q0)ch s@?xu_C;_SHGI]xȐJƠx5oFށY$汣H>e6quqp{be4槢lvfFp_)ܝ_R@\na\<\ovG/1`prASb<ەq?xsXgB鼬XJ ,@a;ߛqo2:s%狈=^6fS zIߣF`-mF"3by0/a 5?\xN#< }ڭ@ž$uZEX'4E4pe}Ex%YY~@E& /QЀHafpލķ-@DLd]#vYiadAbT$axqlԺ)/K@[]I 2Ӧ $=e\<1=~X ([," Nݒ!Wgl \[~hjb~Kp :b@ӻw>>mi}\b-ah+2Ebc$͗h0183RG&>#SMsVw!4Kh HVa"[XXXbEcBcfNÔ|0T)QXUŴbĔ2ّ TfA/I\MF"I֍L].kb[Z5. e8m2|bH (HyH8AM @&,8aFdG0Y9q0=f?|A5"Flʊ+P,0ņTН9S慅ya (uvoO@=bmZ əBіR/T@'?n_F`1E2Y$&CY*TOFX,b `d7D)̋k Κ Qe#'Y*`LX_Y#Pe28v(^*Ca\)Vi]kEPi d2dZ;OHlF-z֒CI{z6YE>] 5&] f @ƏFC# |`Y$vyD"*6 ?GV1 GFgK*W^Y{$+qv|etzğH?I4OSȖBT8 YJ8 jBd=&')J/ `U$4cKp&'_AJldiبisи8,!&Sn!(ȱdgyw4ƆKN>f!%\obլ#n(B~`7(/ Lxu|hyBѶ«- t)x\G pk{B)kjC$RIytz,@X<* # "nQ> YBh%U$Oo"/#m7j+. eWjQ+ÿmw{~~އf,R\SMp%r Szj4}c[~=࠘! 53 [9OyP4ȿh{60L^rrsv}+s 먖hw0^ 4(p{H 3PN*jb] DR袢2)٢ZƟ̾ NqUq$; ϯ^Z1 ׊l_|fO;K)5{.ر;ܸq#\GD]!'g <4g:"b #$&aO 厓4qxFܧZ&Fg1^["q~[NBzSȮa_hic18Eb.[ wx31_43݋xX8K*"snBF\kܜ]7ɇ_D-|hE;E'3qM 5Ir_p8fV{i9Jn %S!DĄWaI1K൜Zh۸v=?K1wʩ"Ф<(j`߄ <icQe E=-GGHKynPG1V*\Wk 2 !:6o"@- X~At7*&)p~Wz x%RDe6yNʩ=ȁS+wFb@d)tV9_/: YGH6_,,r QQШ n0_{(E,G -D+PoEr7N >61$TA'`MyYp* -mA cAx4Q)Ϟ(i39nDz  1Ѕ'@tOHbA3*{iZӛ_I<0""cymĘjˏe^Cvmh(NO*g4_q? ÂM6-kx+P|nT YXK 12凗6c 6nٓrŘyb/sK'd% l#l 怾P)%g l |^Xg-vG< )ϧ]˵j" ֓ hhTiW)QYmwi z' 3^hm1+=*qZx{ 5TL^1|N%%pj~JL' ņ^\PnbH&taKzGO# O)Ǥ2bˤo7,@ hgLh[ e*~[+7>AB7Eh,Y#;1IHC*i)Xt`(ٻ0-# a㊅zmh |l}Ė=s͸Up,J@t>TmX)UUEj5ڒtF~?TGlۻT)tf(hΒ[#Uƺ p/Lm<á̑cڀuӠX\4II<|8_/PtozO_Vҙzn5S)P% М'7~4ހHAGF+02#sqַF6euQGsū/6>'?>|Aw+ǿ;k܌B0G+;v8ݻ/zG1??oK-[=;뮻ڵk 0@$ E*Rjc^Pb8Q#C F^,{Ur5 ϝ*zy^NUnVff8C'}e`9OUANR;D`%Y:J5O@GϑtA-7x-u`7y)&’ϼnw>mjomG\?_}m&:}~~SN?ömz衵kNMMy{nذ֬YO҃>x%tI<>|+W~YgvښҖ98jA1 +VEBa8,>"P?CbpS@XN)h)[9USİk:~36CϹϽ_8_?Wh~o 쿾`qaz"f7??z?񩩩;_׿U;1ݻtI7|'/}mht7?iӦ/?iQc%/֚C77d 1B 41ȄFFF1u|$3^=(YYmawJsa %@XlC !bˇT{gh .yQAҟfF6Q'qSTL/MqsA xvc8Ͽ_YzcawOZUwok52ipժUo}[_|kfiӦp>Dy~}~E,..p Vkׯg>cfzիv܇n+LSmTvxLaPc" 7لMI̱y׋] ;$VG9 PNmg6"cl%7?\WfX9[bflX,.A#]rR)bS+>ro,w՗~QCXDXb@x<~{ޓηr˛.hǎ{w7n߾&p3[\\<;h|ݺuwumڴiݺu5i1`<Qy㦤&/"M۳*43p-_ (|fmCA>0:3 R0NC4+H!8h =4`_CjRS0Hxgk~#hM ]+sBVFx $EAyIۯ/ Ȍ3L7';Wy>3O|g5~3X9GǧdYIjvΝ;wܱcb47nܺuiveqVvp<9+r<կ?sN_03#mdt?at@S|j  Xz&w sXO!#&IFq! рu)t⢜wH##evyvZ]ryyxL{+fɱ0OcB?z%yv!W#arkݩ hS~H4bAS+xt9[!oxZ{ǑY0Wtʹc6m a,MuֽMoZXXH}]w{W\q駟f͚ZXXHE2hkpx뭷oۿ뮻]zATbN؋W)9p+-ay8J v. YRcd-6&=ߓO"Bu@؆AQ5D5!C ֑'(<1߂-<,v AOn)M0Җtt͟T遵o{dwu!X!=6nq333[nmf۽{C=q+V|~=y5 -ҕ֝'? @g7dHvub&и*ty;FVQ䍥F)݄O#ףm*NCTZp^AGs;%hSbW|%qZkKk~pBҚl@H#&~%ȑ};!(Xgcx;_ypշgjSm5?GW C&%6`>묳:__}QG E͹s9g'pۯgcݼy7ͯ|+[n=3ggg}#.U!aK4xCO?@O6n"yO7\;43 B}ɯ4}Q@'aj*C_In)ûExv;% _ }.D#Ex zX9R4'elon =,5HXctwx֚v\ UٺEybB *t!4M| BA9h>h&vxzOLkEYy*QTO)wBC :]mN(/+ʰ# zGU0aΆvxWj<2 q ܣl?}ͭu햽c|ZSFM7t=_W^{~46lk~}9=Kk֬.6 C⫬VtC'" 5o(GXAO,hbHHCACd3 `GIh2*~&3Da\s# bΕtC6R5Lb0ѽ\@Vŵba-Nkfɋefay~@ZqgJ~/6,FkBv "'__W^ݣ>mzzz}'֭y\R ]BhqB4dy$ _NܖJQ\5Ĥ׺/ΐ'^;;Sh ?yYܓ=Dq-_;fDOovqE)1kXyS_9>&gdމa#L3~sre`q%}y6Fiܭ\k[ϱxklOTZ ̆` xGL\Ta8K oMm ȵyEڟs-^T Zh˿j2wB^L03}zu9&ȊoЃt-"SZ~֐kI6w׆%ɇh-`^ h{gfnGn&ߖfEo4+%n۽]$o۽ S 9x2~c) HHƽ3l2Q5, ^D 4>X " +!^pɼ(ijzg+"fwOLE顖EҽF@)s#kЍRfmWXQӒq[K~٦呬r,ChM1v;[5AnYT)T$pʠc"ŠSD䂧2ZC>%Tƌ3A06`7&эn؀q4$o[z %F gQ}E=Lv V.p6^y<苳c,Cu&ŇÂ|ˈ>RAHn3ALEkLNjE F ( ;X9ŧT؁x+^pa~Yb- @u,W"4s4VcĂmBX="5?@+,)[\/^!I=f+("+D:&{iMˉw< (3zɄ4- IsÆ ~M0;{󟿸8???v~i^{핺ذa˧&W X%)h$s^FC3kf4|?o)v3[1<1gJ lmW~`+C$L=Ph'S@ bcS~?Voa 1EC n Q{1Րb醑:brfMAHGAT6nZL1̼U !LMMs9ӧ~k_ڙs9gvvv׮]gqyw#+~>w]w%gChQV=jg Ѩ̍mM>Ѕґ&}3™_x«Rˈ`943M4-ts@l )Bpd-c3=r)>kE8UyR*-dߺCCG̏|.ُ bh v`\G͏`K>]j܊+"lzdvvvjj*wnQ:hnn.]ּ*k%,!JmW,2Lܹ=y '"[C>owA، ̆[K?8N$1N5.E}؆3g >6I-# `$ j0/(%+B=˧YPEk\ۻvP{JFɥ@} "|78fO1":dM :+48̙ :tVnb-&sxΘMw D+Ǐ╎RLoIG% \\-@S2H3H5R ) ssCcR|%5pbYqD]&laaiM)jCG!iB`ՠH+*`6䁅uՓ&j)-Y~ yT|VȖ6[!.!BbN@ԌZa`I>)9hJz~bgE;sf(OByP`Ynm~ , i甶zT]8yVǰ"f)me,μa~NԴW`9ƘP1:52o4六HcIW˒:׬a%[X0[SܩeY:1^BPn^\`%3D1qF^-A1/{fdCdo]"9»kJYm4g2QH920(.fWY^|&O!u칱}<@o2 &,(:Jᾗ4)(E:ĸqr?)`M/48#˨g98w³l=ALӠ'HȤRqo"D5( Ev|1^kjdw=| W)q@+&jMH\ Mב5~zJ]$hnn\&*vo/f@kAaC &|!aȳE9T̡#bpr %d)̎H]ܓ[$f1FV>;;~۷W{ċv)k{ZcK ˰Y>n&i%jdiʬ$jiG/-q``ǰ- 2DIgB*F=RX]V<#?%iǷf=q4ܱc 5KB>y[ @&a[g.GqcĥaU|/%љ5@18+2܎hf677kk|;>8O||6UV/E;j*fa>;߶vjFZ=L rHEI*m~N}R7H˩6i"ÒdXT-cA;mMLA,BMBOV(~ ox/] 5W`ػ77O9/x K&u+SE 5E JJ;imrL$=rrgE} z9gyC@t_dvLOO_r%gug?s9g |ꪫV\o1 <@ kҗ433S#&՝mm ='z-X:K7?QK$QY#! tax:(# o끥uF  m!\݊7JafgM66d-aN5W|+hx=|#ٽ{GSO=c'}ܷr TDք`_I8O0ݓ6C>|X UG"_'[,z דB=Wuꪫ fvG^wywuz j#vllq÷]Z_zEGݳevGaUֵmzl?\cq&Sx?2ᗁX}_LNeQq ;$+1WX-mxVTwȏY:8QI5H,YO25 `W4"PڶFuֵm{}%\O~NAu/ܛhܾ`t@7s(E} y!għuػDt$nSXqՖWپ}wϧ~xz衏|#oy[6nxwA.]w@R'k_!{m/*4.dG`wHZ#)}:~!V)r7~_|p}!~a#n(mQP+!͟V?>k=_9i`;O{[̛N}S/?_u/.zKG8gS"F;J(:=+q& c4 fC@UZ-$gdt;@{ɔ`= t=!Z}9] Op8{/CPF@zy@nF?uWier1;v}ϚgZZkg0A%<9o~/+Ͼ[VRM\-TJ:_1q=cؽ88x]o^<7h_|Ła.vrqtϺ5>pdu:#H_{j/p(dzeBJb OqPώJ 2YF&h D`-ڼ`7 'mBYnݕW^MƟK"yJ*vg9YN{ڔa+c5VҸQ[4~k1"P(ɂ@ X\ !_o}-/| Ol۶7~7Z*|#G܋^#Ta/Hw_^8"sͦ{1kc9X9 ɼ @gI#z?)|9?;%/yR4Z|Kp%]xcb/I,5 $nЦ_㕁Zj̏rQ5~?+"MHQ-V?կ馛 .`ӦMzGy衇& 7o|ms1;;{Mt&QϜͷM4gzZ?8a*̯w0TSHc)$.+~NVx_E40UۖoLa E9B!HFS,F/ġ+>ND|{`}?K/tƍJVrZˁPFfWQ MO_"`o0>Ae\sI& efzֳmիW_tEfֶ_~'ܮ'92i60fY5f.Q+6]A4; Y9f%c2fZ #"}&3"MӤC5&H RX1y E=7ț@)n{]Cʸffw.8=Μ/F.r_bEr3GHf7(dU n2¦oFG kmdJK/,s$+W^ySFӟosF3OBk+>1N%,[ʁ;j⚙mܸO?DjVL_BF]O_SZP+m?ŠI/X؅X&i,WdZz_/{|pz>0{7're_tE `G[.38{u]vZnt\~/7ۣ+ZK~db`9"Q!?*skj#\!vEG a $pvGIMO;3c OX 6?yzB7ntƐB_H\Vd( xr=t(gwŖ$oK$ /ׯ_+ڼ@o t>z`}3L& CIE`(0u ޙ)inr+狞`=55i&6g>sW/BMlذ+*Q?pƗO6?q܌ч-i!eL_EGxHJ\.^$ReZ-((lr. ˍ*/2K&8 .JRƲ@83P<1XzԽ۶_ZX!/@Q큌u\W;*\-#K;l75#08?Ru\4 6oo|cjj(7ի/?زeiMRA .Є{܌㚞Zs^XX_C9)fGj.-y&,zas4Sk$Rz ̐Qs.6~TK(O*-r= nAȷ$;K $ラ]vUW]cxsw̙3gs̙3ԠEp&>&Kl) =Zxt BJȓW^>^q9?~ɀ 2Kcɤ1aRTsAa$ڹ)NV)|ε;&xP x#26!a 퀘{ \LH$7lJ'){.'|"%CN`K74/CP/ pu 0tĄ=,29_ '~%=EԞs̷ÆDbeE:4YR4C)2%dJXT_'RMTdxsqUiwI4ʠ%s>gF31bDwwwKKחBkĢE<dk?POSM!r0{+G0z:2ai!b+Z% VMU:Roi%>J"e wAB\rr%/?g] Jc%VpVĔc hqrRe=P8bqջzyBHAYu([YaX'Hꠣ///:uhlmm=uԷ~{@ {8ټo߾zoåYYYT*(I sՙpD)IP G& ?=" Fv ,JH.Kx 9aP DV$HdS$qse-tBB8q?Pi FvSH94<NNN 6AMTI0Gp<$%կBT, prw!S[XK*f vZJ6 2ƕM80;}tggfcp,dO~dBFF-ـznLqX%jOp#  L+1*O'.i[\F*\tI@IB\7c,nW)-4nVp|Ǟu?1$.AA[EPNsnF0 aj\'o%^u+TrCUWayP&r770G0^r Pݾ}ۺh4FɓkR*IҩSۼyn0aBCZ悈A ?=p50q]lH\9$2r \/4Џ`0~(%"N†?a?S f8+rzzٳ !^n0`@GG7 h'a9\|Ŝ3FڎYq1;f{,f\#^%4Lqi\Lɑ\i ]#NBQus8$|SN޽{]]]ݝ999Ç2eʌ3n,˧O1cnW_}5e橔z`}L)Jb(%l?'H^:_(֋kfE _ُ$ sP#,IG 캺d:)HIpd͵Qܲx<}>_uuuIIIEEŜ9soH$2qĂܡCb>V{]{D)!#},&ta&bjP(TQQl2Y^^>f̘ÇDML GVwe!#K2:L'@ A $vX99SHF`,.$^hdYZot:{7gBwvhTd2E"!C(pLbiLa/6xJd0 2u+7E!>'jZQo!g\V+b NJEܖ=cE>9ɑe\YdYbÇ/,,5jڵkٍHh^{m̙a瀌 sx_ \H)x<֭[z5b̜9sÆ 'O&Md1dp#T"+k: 夸Vk2p/³ʲ;v>א KubxPFi$a ;j00+S x/Rp q :VRuR[hb`OT}@&I$%`I0qr0g(_A K/b+h*%0t4QS|?K.X,·SJ ѣG'Lt:%ٖH__p @'hhF?ϟ~ifffZZ[̚5۴iӦMl6[VVR;C]\@NTdSB&O$IP }EV'/NXEcJ)3 PCF&Mb03 bnDVI=%8-aɱK*q"'1aJ_4uiii'O8p7L)Ν;JѨL&S,! {gΜ9EEEx DCb9)'@"BqNY+++׬Y~LZVcvvʕ+}ں:v-[6dȐ P!K12:% 7ܟ.<89õ`p(Hq +gXkƞW8y/!UB⊤(R"nlI(6-'\6$F9qCֆf\)avv '0TAĉ @QP/ 9C &+S#aqlƒ=twwFܹs.\hXdYO=T^^ޘ1c`_`0F&:Q !s8:u¿B2@bd iiiP5D"WHXfÌ%LAkJs4MѸs)qB͒J\o9 )-hO0Dvh %+ Jb0%I8{5k>3Ϊh(&pر.G}g333 C{{.[nA`@(Dq&XB,xPa 6)t9V1FZn݂ |[n> 5>1c͛E4Rn\ɔ4*LC0e$YQ[ײBlǗd=5r@N+d{}# 3tI|+(8Ip?afB{(r݇T*^<*HnxEjkk:uUUVMdɒK/>K<`2oŊ;w@M7sI QB ((8qkQE K3DzЂ|'_jvf-%8c<+++z7n /@1) gڷoߚ5k?B999/6m nFe믿/OFUYYɎo۶o-//z]SIO*L-[6||tzj׮]lSxϩlX#Ιr[콂.É^ X'׻y ¼vm6[ZZll~ܩX 6Q2Vc>P06HTy+ 0aQ$ۨvuǤtgIF dfԝHq( $ ecŎaSC!,oAEõZd @)ڸ8I@'h,M#LW&A I02TPjb8?F p̙kfǎ TD)5LnW^lF &===--ߵkΓrgϮv:lno۶L&Ӏ8$':(zرcvzG}>cf[xqSSMuۏb Ab 5rꫯ~嗒$uiؒs= k ^Rm& %=%9eEEUy.Ol? t6ޘtG1֟ER66Zw$($I>QɲFYN60&"}`I &4b6e  KB^F%@|c`& (H-{ [<ɲl%I4hРAz-,effnݺK/ 0t:l~{UWmܸrİ8K_5\O8!)@Ϝ9cZ6EQFcSS_򗺺P(D/Nq( 8a"ڐꂋ0̜>vإKK5 b)PB |n=%scqJS/=KϟO$JƝ#:M?=X>>;\&v:0*D6RqdR6)G܉@nv{j @!6 0%4\a䄍} En b.bjfh*EH\' %Y].W{{{{f6`/ 3f Id㏯[.//o<Ȁrssx<۶m{FZAh4گ_ov 7_L;v #F\wueee@W<(h7@HQed$E09i⑉$Q8·Bkv޽---SLo=tHر/W^"=UDtTI(h0N}:uP@LbW?qVQCX#L k=aP)%ѪKKp*8I0$%؋e9 1c"b䱙Su: vܪH$ү_B7mڔ~li/v_q2gϞݲeK<8poݯ_nI4T%##( ?sss[ZZ^}krEQN}e˖oii͇3:6 IM,?>h7F+a0prhDb¤l믿cuD*&9s0*H&&I&yoTzkR뷵E.|ΨtgIү>^&<QuFLx 0hCgN|\)$PҺa( U'QaΓЮ(& qag)1'Uq <0gL()9n8@ c%I|x^8WH$p8>\PP jjj~FHX,H$PJ Fz8(V455E(Gd]]]_l^DΜ9ѣ/Rww7wƤh4;x/^m6χ7 W,jOq%SZz6mzGه5K577T R{T7eZn PDZC=-LQQB\ȼob;J:Mb?h{ԱF4FtqP]vmC<\ <, D:Ilf\ k&(V!'ApKAlCi ]s43=,a/㵎~Ŋx<444y<* F^Oߓ,Y,;9apС7xcӦMNԩS3f̘?q.] D80((ZœjR S4v"}dX>@ n:&FDriJ);ioK,OXzN>뒖LɗQ)o/Jwt>4zqEm?V\j *Rr%qgj!Ir@F \-@&,>g_)p7JS®A`琟)?@f/^IVp PB~ܹŹ㢋.bq{hOOOSSӖ-[\.!)gggwtt$; Ji[[[]] dYZiiiUUU73EFC 9{l$)33o/ ǎ[\\iXb{' 4m4 ѱnݺwy'0Ç,XOK/f2MeBH a#H,c>??䓩Sm޼9 h+-+o78?<۸jWB,]Vjj7KFI!X$gyo2ӄRvD;`0W ^l\4AO! 9b0sTB.nYT]-ZY8ӎ/cgOq&g<p]]]PrFmf3 R??Kh4??ǎ0 L&$IYfszz: eYo H`P^w8===ӧOO0nyWy1=YU{{{lٲ|򆆆,ŠtǏ/zرcWv;[ir233?䓻kؿ &`ہսVRsNqUV5իnmƔUV9믿>''Gk<\4kP;5=*(*7\sXR082jK-UK)4Wf~Z9)Q'@yi@CblA @ȆzG|oqlॗ^eWdee={]SpAj5{<vZ+wJb9rHiiu]W[[y漼E?7gToGywe1]q6ȌFVZ≮qvNbF -_49C'wb4 H]qwYfIIU, 3 X(I\XѢ ZQ]RY6j%@*՞1=m_b3? &E` p*cA [3ccG)c4}B0Bz{{ꪝ;wr $S>p@Jissݻ/I&tP(#~{[laϟOmKdY.**| RXX,,de9''gǎFٵkҥKKݮ222`ؤ_ڵk~g}]2 :u߾}f8,]bcYOK7?ZmꖢvMc.`AQb'ǔnzǙa9C7BxWVoDp!Z?֛DX Dl%pS2Eh $LAZ$4,{pu,3au cߠA<ht`iȑ|F e(xb1۝~zvP¾) ]y%%% D۷WVVBْsԨQz+;;U[[˭TF9sΜ9sp8qF"DْO#RB.ᗜ$3&g,XJxcld" EF( @&&b k%JD Ux9& >NT0JjőJ1y)t.f),CbŮ8{,UUUuuummmz ? Mɲ'rCC`0iii6l1cƔ)S(81ߎwIeg%ܛ RR$t5 _MuPQɱsJ؋) % }EF_$dv{( Ò$BKysN3@J)$g?ٺuzzzAY=σ>xUWyM4G:"r5APzH“TAE HjHFR/'v ,P# "B#GVTTL&xXFàA/^ ~tHfb3g|lSqs7t۷o?pbv^V4i-EQl6[GGNs:_~% W4߿zz:$iKMϟ?ܹB/1۷/??g'yA%xfé9EJR)})\\c JMĝ3,.Pz7eΏE/Nn:hۂ 2 IƵr*akC%=TW!ѵ2LAcW7%T'޳'˲b&d2B!R}N0oݵkWzz>tP~~6`GKF9~+W;;e/a<憆+h(**>d,>ӥMMM{ݱc(f`Y IDATx:p@EQRi2vر`Fvx"+"wHMѮ vb1?`bq`"!ظq!O Sn?'։$K|D@f^qPpÀR$(jd$K70n uqpiTG)cBbؠA0$ 8M&S8^wwqoq=XV٬zzz|o=33fᄐniҤI[l/ϟ?Ғ]RRRXX8y䲲2m4a  7̯( õ8aee Ďhoo "ҦLR^^ݿ[[[9Md! 䘵Yh&R LE5K ]]ʪ?U` 㢸&^*hD_HQ2EMT8AA%GqUMc:SpbjK\htذal]Y[[l Klb RRRb>\]]\g8;~4jԨ2/Yyyywy_/p EEEz>33즉4IQv=sccc߿S$:t_~eNZZZۛKEu8BHWW%8qjBuA)--u\@"V5U$I~믿ްaC{{w1o< ‘}D_[QsL89E蓰j<RSEܘ((Ku FdY 0~i@Er $Hd4Rq&C RL Lo[ FFIe9YI^zpl!h$5ꆢ*\+v1{#laf( lfD\^^>x` h4.*))z׿^uL,p=8f( MQ31v0bʒV#=yyy~!+* 9dȐx<Ç۷/ ^|g)IұcppxРALnjjjV+0@ քwN5\}}y>e˖577,]?iQQф W_}jZ<( /\X_JH\MD+ TP:$ ~*Ï'[ WV&d(JPiyŵ~* mW71+ ;E{?7ԁfj6xIII~~>g;Ǖm nlr&I(ڒpfx %"9Q)STXD/"&i=OxX/-j`p ׌ J}1[e+_u!s/ ӕȮ_EiN"t:7yd'ⶶ!D"kvڴiZXR'Ys\<|QFUVVVTTz#//k^~/v\h4ˬoŎ=0Ioo$I_sssxM6\.NsӧO?~ڵk_ςH)z›\ \>IDF11 %`5Q!Ȏ9jP\bf)|eպaMG:p =ȍ#+@~z] @DչEў s +a(Cu̟Cn 3R7Ok===#FH)M&a[,^銢x<1 fh$X,x"bd} rff/f9W^I8%ÅdF)fH~o)Zp3i [ s@<0o: z1*tb10H*>YDPxp^ahOWz#M*A!<Ea[`qxDDk@T;k ̤`L(CB2Q]]]nRzɓ'eɓW\qE i| #DQKVXdo;ح %lb,++D"HbXAAsBEq8^Z L,qEѳgς49au---?#Ȉ#\{ p\=Xww?$Ta2NM' GEkK$I*++3L]]]`^r%̕PFRY~߻\_lElK.$2qb #,˱X;cfeez|w1&Y^oVVVOO[˟9srQJpOOϭ:uO?/ЃH p{СCofVVҲ, I  ;::X'6 Z_ƸHF)Qh492 ;w.tRTy_z%BHaaO8o߾_~9//N8#:&ND!V| m-iYY)‡,'k?B3^}1"iCWYé&eBkiiq8:t vcb={vڴi"ge@w]b3fL^^^$z@1GPc$Yl6;;; \.|۶m.1wO8v{cc#6߿뮮 FQNt.YW^׮]7|+3~3}ٚ5k|Fqݿ/&N6|aѧjbsBHR~:}B+&ō|En6kkk|I}ӦMK.>}:6NaB+{IOO1c.t:w޽lٲ'xl6Ǔӎe p$ 7+L6^""&8%I+?+0hȯY`di:吴~xV`Fmiv+DGBt y]0IT[[0EƖZ ~?sIL"ȻSO9rI;v+da 9"j,D"@ 9rW_pɪ*}f훕ݍK:NכL!CBN>M;Əspu/3|8ۻaCu:]gg+^uBȐ!Cf̘ظ~z0|ܹ QJHDɪ/ EXracRJ ̨b(NPm^yDq|(nHHĈя9'dY[şڬ<O ؐ)Ū0F 8l' !$嵶⣝DK.RJoFflV>e---h4r;r\yyyhl„ &Mok4Sܔ0LwyG۞|ɲaÆ1dzuVv])+ #G`óc[;:r4x&Cːn!ɒh` `(JUUճ>k2[?ާ~W^q\p8C4^СgyfϞ=ٳg\;vaStKn{!(>^zz(2P(z"y^B}86qK11 To΅08&񾁢(q uttB!<8s&{RD|5[hb\.XN&[nήs*!DQ]PP ^5QWL&B\tw=qDI뱝Ŋ؝~X`H9 SNNƍ~8IeYl7n,++`H˲e˖^x9'Κ5kܸq7o>y$cZB{nɒ%1|sͧ9! X$Ȫb[lCb6#ׯ9s&E3J T+DXl= 1mX?ă|%\r̙gbGjٳg-Z"p8͋_OQbF@;6$6l;0&*oᆜ]viӦx17I?U i1!' :PqY&$#D"~M80auG_D)eVs5`P(XI잪221,cG#Ѩ$I M&ӠA/2Ji0 wygWW~aP^^[QQA\X,UUULm'M4eNzod>&I~ɓ'o{l'N3 fׯ_kkkQQ# NJC:G\J Eu)` {/\jՈ#ZZZÇZy$wȑ&MzVZumAqMp:ZIIɄ ^W^ye:t( ڵٳrK$r6nXPP@0 +$'kepcC1,)WEo'ljjb+$w p=u:]UUlcǎTd_9,ᔦ [-W4ohN} alFp` /L SORgAbsrrv{yyymmeNn,NYpe2) R:ߙO>}ذaGaJJJX籅 !R566UI)HRVVhOgϞgϞ~z޼y,8g9kZ^ FՕ] DC(I=\]WWdɒH$rem޼~堵P5===MMMtն ,XrE]d2{1! X,;wt:gfw 0+h g*8 A;z;˗/ba !3gΜ0aÇϞ={BtB/) k0k; O@-*9 \Dq$Z IAT=Mno_s5Ν[zNݽ{k? #G .-0Hk===]vÙA$ (:.##]ZG3iٸqcoow͌xp* ,8NBQֻ#ѣG/^|Ai^̋{bfyƍp,Iݻ>`ܹ,.04cCNrdt4Utl440t70bYbk{TرrT9!\rѣm|Ʀڶ69: X,]]](N\Ya v)6Xvtt;w0wÑoX@؊,M΄#ݻ&LȀKacX D .HT{l(RV$I}t: 7'TWWƅ\jUYY-܂PJ{zz"n(`pر_~9[& xy,4^"};w'p:f"Hm@OFxk/z}WW׺uX0!ĪniiMVSSq]vKu:g}6w5k,X]"N*h3s,'`3t$†,R AǎQ#%y(hl6D<khhhooQu IDATdZZZt:]$snRz;UZZ:n8!#XpN: ݌8^re F zd2 ;,R\K݉I0xt:]4n_4Lx.$v?3SNZJiWWWSSѣ{zz! #Y(S 9ggg;wrG?9R@W &][&`,L?b&K.ݹs=d,666JrJJ)GOT;φ ̙{y `2,Ts`;N! e]h࿆u^"fȡwDQ ;\Հ֘ $>nw:,ODw0ӂNhYTX, 41[y_I LEP܁`0l֭/nᆳg>iii84Ud0:::7xl⊢_{o&eu߷f_@YD@4FqQqLph411:3qFPHF"qTDz齺?N=<`s=sΥ؜LI'HL񔖖aya@);;=ÖϚc3" ^ 5p۶m??P(X,[o5//?2vQp͛7y6l83] N9kʃ+[ VE^ jd[nTu(8˯XYQ )kQ9cE!ю&Fvo5~CCCss3IkYOMM yyycǎ‘ܿ)]g)I -/x`[n}ᇋg̘Q__vZ2)##?o~s=0R X06)(z{{KKK]OOϨQh=:rHrrv;l3)//~3fǬ%9tz';;;??c3;do;Æ +++ijjCUUUgϾ+H}}+ ̐0`pƍeeeyyy't:($;E$uQQъ+ƍwW`+(hff 7ܐqϏbBZޒEp_SSC WuS.pذa6&|?BY{4ݵkƍ~666Ι3iwB'EJJ ew۶idJJJ$͂|PYY Nړ, B+W\`l[1*tc,alh;w-t\JJJ0$4ډmYr)'(ϸ eBݎD(0x.p@k| <9/{A9!sǎGQJh"1.=^m\ׄ"\UWWϛ7/;;Uk=u}-Z衇 ? P(zNJhS ˂4Ao̞=;E %\zWWysk_Y  %fc-ڵkK/rʞvEK(/7|7⚒(ѶO>SNIJJZ~Oӑ#GҕP('''557ޘ9s9B?@:33_[^x"W-E )0 }Qde/(333^NMM0BI}8F>O25{JψsTbz- &W^2gBd91jp^gc,x)>g{'RX?>%%O;i`WlOc0D)U\\nݺ-[Ν;_y+"55oNjWKA ^{5۶̙kkJaÆq֖&M-(2_D͇'t/~ 6eeeQ~z?ѣmXgDP,R}Ϟ=i}%:qcяV\p§zꮻ1;h,(nQ,_C0(H$F~__ߴiƌdɒÇ/^X\+~COWaଔDgȳeL@4yɛ ocpe+{Q/[ +񃋰,RܮW-ݻW)UVVFka*YCTey=%ѣǍGtuu.¾>Zزe ]:xGp?Ohjj0aBggrCy8XaRSSF"aÆW؉ܹs͚5zmmR?u(jV>{|B>ԉ`lsseY|(ȂV4}Ç/_oxA3F9%Fnݺdɒ-[б4py~_ooow.Z(55rrܗC<3gJ' \4b ŢAJd 6 oC\`6ʰ<5H,+))Ùqso@g 0K`8Tv,Ҿ<55tᶳK/m;5T___YY-r~EEEs3%%[dMC ]z{{o6˲7mCSooo~~r9X⩧+,,?xٲe>r–hnn&P䩵}VDRSSZCݻN{箽Zq&٠|ͳOӲe*J4Fڞ/+3Б NLڗ?5 < +db kA۵g1jԨ;Oh#M_PS#MW -5|AlJykPt8M >0uhL8FO=3fD"VZ?|Cjkk,+99.iݸrYvtt!0Z4a Q'Ϲh˲ݻ{>aرF唔5zDFGHD---MSN17e2l0[|9ҤdXlСՃ,eRt/"˼W\ʁF6^^xa(F]]]uuuwޕW^f͚?]]]C wC;flfˆ;Y vs_|T?6+u{{'| 7߿,@Mq˗/?skc5h#/x6ă$sMw@gdF b&XTgM< `ųM=OC0H69S:J |tLrrr,KIIR'p`,"ϖt3j#/j(cTmX"y@)gGGOض]RR!qc0\Q}333y"99yϞ=lJh4ZPPPQQ1M9[> WXǓUšK.^jվ}O?`0aÆ|;3g\x1|divF6JSX4?_~ɒ%tAA0bg}YV\{}>_0e˖'ϩ\N%Lf3̐ dܣ!2h$luW.-Ë$?qBOLCa2 簴+voTdYRRRjjj~~ɓdG\ guXi iM~xc-rW?A4}Lbs)kiQ[v) ʙ!'N12d]l M2BJI@Zkkkss3`3ek~rD1okkNnѣGpE9^mmm456H ??Ahg; .^D.۾}g 4rL|nȐ!oll~E& 7z{{wcM4 G A l1>pz)-!z :aY{Ո~\V@1l |o f"%g.HJJ֔YrʆhN iEme2 6zs5rAiqFFxz|PWWGkeݬm; G#ȑ#4ʡChQ;[[[E](#M 5w]R===]]]A~i՘$vwwqM8199y߾};w|?'n۶$r]Y8NZ{G)P, JL.Q<12^"Rt ?O~_M0!pP_amaUg( -J@r/D.| , fڂNߢ!@gC:ětoqv낟yAV(A ~$ł]wuYg&={UUUt~qNeiJ(==ѳp܆-|}M818uuuM4L&''ܹ'33޲ 6kO?/xرh֬YIII6lxꩧ(PUQQѨQjjjieYtS'o'F3 . Zm۶O? IIIv( |)))˗/3f zԐO<s^ṈgA @P9f[A@Q}NtM^#DtNk7Qlţ<^SJr,X0Lak_~E'싳EfBmͥیs~FTVVVWWڵY899 sδl2a„O< .O8NII9322:gϞH$Bfղ,3OGȑ#wލe}> O>d9۶=sLZP^wiMIjFǎ[WWG0^?O aÆ'|.{gWXQRRgq i.R[tĒL`P,,bX L&JY]]?͕߰x?L P hS0W36*p6^AB[ʂ">'d m)hf{"!G\cRRAQF )Jhs(`CI;SIOOqƝy晖ef+ T^^~{N޲_d2N ܰh1Rb1z@fya~38Sbݛr+!7TF+њ=X &"#xOOOEEMXEbjD4#Gz?f'''ݻ7Ν;wt"wvӅ2w} h 툥|k׮UJ&M:sCК5kRCmw2 b,=wuI=r%YWIcX__EE˻6M6p83fԩӧOO>dŊ7Tp1eʔ 677۷ofÞG~C⿦Fz"@.aoȆTA+ >ʚ%*0 ?j+G4Z΄EP6+b=&~mbeB1;nICgQ_Ni^E4(3"Chic{N IDATccmm-DJZlPW\qEmm JJJ=BPwwweeessRp޼y\pٳ322x,ZG; yyyTTTٳ; ^===f:x _mw߽( 7=#Ӛ===UUUP[o>}],Yy攔4t_UUU^^3ό?[no~;<3H`{СǏ3feYHzh]x)͞ Lh|`,bk:rQ2.9d DqZ+6pgO9Ckl'bGf+x y2bYa2ed3*F1_¾,`axf,'̙3wM hWٓ%%%GJ)wtR5n/uօBcǎ7.aCaX<0R룀(pA%WPPo߾Ra`?6mڸqh mn9S~+++-ZtСla[VVVVVVKKw1u;sĉ<@ooo,gsfi'feL#jʭ(DN 2vE3`  QxB6>ryER86ofagT&3 U nBe\_\5RKSf(jGz/-[?;Ginn.mBmNOO_`ٳW\vZZuKi]ڇ5jE]dYVOOի_~_) fϞ`SO=ALdIMM)++۸qcNNۏk,>lĈ4HpqM6޽}ҤIgqƌ30v/yH$\r͚54 AsQQс{BMRS%۽{ÇkFGnݺ;㦛ni82î|{>}zaaaKK[oO8p  7|scƌ馛.bL==h̘1K.]fd % EEE=XCC~oϞ=~R}_'ܘ&9E8X|ú+/Šq&7!O49B*l&,w3[ qޥT;fIhif!aPcVPۅ8R[pȐ!eees48p\锔-fBz$&''.NJ/==}ܸq&Lo߾ck7dE-6755mذbŋϜ9bqoT!H$2w܆1c-T{{;Fyvݻn:2C0 mX8XCK Q; n@(2oo :a_ |1 6 4u:k$vfX{2@D@CMm$l3BԈT" ^TгQ̔BT}aE@8gl$`[3Ġ'Eaf&~Oetift :F"ꤤb ڮdض5222=LOORs0kaRSS#Gv<2226os.Rx{tTLNNϧM! (~R/GLPh`uDayMy+=˄=642q7dx=f)Y KgcG@݂Y! NW'f6rBԌ?6%W!`i  &bar9`I+uPJCN0! (Fl5\L&''OAAywnD" ͛1cƳ>w/%'':t0󎚉 ##c֭G:Sz%$ ɳ9!qC#4afs궠Cf?.`߬|R\ƺ ⟖sErbPbk8Rñ0n%á J`p+`-⇋JMcqs3\wOCZT_ rW4Td'rv2^\1c`pt~+??ꫯVJ544444twwSlklU;h]WW󚏶mN۔W^yGI'7i>;w%K#,ˊFesd`g`i MIG%32gb2E_N@HlYPia]RМDu,^b.9o`U9b ?#8md;GVJxLgx}N(kä<`FN_ tcEksss)п^zС]vݔ/>|>_cccKK ]hz#5)G}4~o}[Fm޲N8aĈHO>ٸqc w~0D #6̴||xXEp_TTT[[˫tˆIY.|º s5Пxf|!+6N, 04q\?IQ= P `gWe,whb,ctrQE7buƯܰ%9\ S*4A-Y1eT)0[hhfv]eee+XkW__O̜9-+f ))[жmwɓ'wvvrի;::233iଳZz`n1!CO.--b(v;,h4FupI,}퐊M8fOg SA1%Jmb [Y. Jwf+L.|h4J!t,p[{( +1 i[ƐaY#Q}D.>؅|SZf bcCU1̂J3%Kwih/>1i9˲N=T CZJI,?SG}Ғ`[܂;vdgg斗IIIxf@)yW냹ov40͓^BNFsrr@oooII ݡNfL)z)< %dYV,>|e]NO0u#Gx~%:ӑU|j۶<2)=mX=^oqRc@`S<h9oa`i8Iq/i11E<s]*G]%<[7҆wv+0S QV-54Z(*+8ቛxV[-f+v!b':thiiyv{mڴх)4!EAk&M>Rݙgx￿-''Hr Ï<Ȑ!C3¢ؾ}3VZ%lˆ)+T,CfuuutB!1w@ؤ'kÇvPn]W1r [f)$!99,Eۛp6 A1CupgӞY=Wՙ .Pe%b/=ptE \ +2 9D Bh pJ2d[ߞ̐Ģhzz̙3g͚E۷Ӎt]UUcXqq1^x VXꫯҝtnϛ7ovNqnƍ7oުUBYOp0ɲp8[#ov6~S8(X,̓E(Cf'Qbr(7X#q>\=sP`?gŕN|%X;w.c/3ggg|_zzzAAAQQQjjj$CYDO)߹elR65`m@D>UVqJ _@Th1OϺ:Ě`4ßfE`.}ס IDAT8l a4O#plr_yd"(Ŷ~6TV,7&c!0 a[Y4%d&yN>:(QU"-- /B=:Zrs;===)))999''笳Κ3gNrrr8ollaʭ+¼=O}ᔍ\`7_ =eQbv8D{v 33Xi6X)8p~=p3ȉ83E& +J^b?& "džPڀT+U8`V4{6f)!%o>? l(Plt 8:NII=  g*rۯe1Bb:;;cXggg^^.V+I1%84a(OS!c%-(Sx,YfH}RL5 U, >QM9i bZƤ=[/aṟ6Z(3Z138gLOԢ9܆pP"sV)B 9c6?!'* ˘\Kzl=qCXF4c[]1f08i"y1` LІOp?0H C&Ỉ:2JœgJR69DT!VnsB2C{T|F>Q¦0~4m^= h N5;fb0 PbpA=MV;_H^wuua:o-x h>g8E*[W\@S:f#Z>ۤ*{h'b畴[)D uƼ2h'=eAL/$BC zJqʍ>4S@L~`?|JǕ*)E<@?Ť@ m^jt;Hl"303v+2s9J2֑Ve Jޘ O \mfNgX2Lɳ>[1g~.bV,MpqmI,=(Clb)L[5Vʂa}@rr2G4A#g\sʭܦxb+/-#ja$n|Xke3o \Mե8C0QB̪^í7Rp"fV,`Ho8ʯb@r3ySr YAᇼ84?7DjjjVVHKKWx Vu;pv%(A :NR*m JP+>H%(A.%p-A JF \KPtQo%(A%p-A JF \KPtQo%(A%p-A JF \KPtQo%(A%p-A JF \KPtQo%(A%p-A JF \KPtQo%(A%} $+_.'d^,{lM\-AO41BZ)utLVJxW_}?s1:j͢8oRzڴi[lۮ򪯛D|III////)),G=pm۶m۶mݺfҤIV-Q-_ɓ.\x9PWRO?vX3JcǾ_#Wim Z;|(1LVSSywEkjj9)R֑#Gz&DXzȑ#PE|>_AAOOIIVJuttY17cHR{m裏.Yi5Zx_ W^}]w)*\qr ;˖ep ---N-Ycݭ< 9ryx 8j [t7P " :(k JP7J&(A :(k JP7JZjڳ[YIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot1.png0000644000175000017500000056605614717152071030265 0ustar00hanshansPNG  IHDR'65P)sBITO IDATxy-WU.1gUfOrҜJsy{bs6CQDxz("Ҩ ^]@Fc  H }rfjjjUɉ9kժ5k֜cA@ ڎJ뿏 !9;#YRЀRwCodG:kE s I:bN@ 븬D&*`{ 8bHɳƯ]ѹ g͡#QoLcӺCc}ejoByn7zwxM6uMϺǛA=̧hL[FC& $DCAN1k(kF&ͫa_[fYW?xhJ {nSWz h7i"#T< w`&RM-95ܬ27H=&nVL`Zw^C-F)%0ƽ4ˁ֒w-Q]ITb-5m"}|HE =ҔJu3 kw')CUO1|^j8lELإ6C\J)( +0ze"0x-T@@,gk?"b@%tnKlmze:z~$8Hd"6Lt(,#6}Zn֯f`KKϻJ n].4Pz<hPgC-0Qck@ nB*hɍBն_:\A ܋q@'{tOMrQ"+R_<<{PIO\&*VA$` DU0>PEllaa/Hg HcfU~5I` D(NBi1D0CPi0 '4X#|&@"`Nh+Gr)Qn|\SL?t脻g_:^a"sG)O\im-#9lvrn Iҩ =3a JcLoB)ٺ{|[ߍezE39/Y!j-"€& cljI2@! b &Sy72kU\KDN]tA8 T|"i 9mjyZкa k-Q`ld].k3]ioD$•VcvA7 3GO4r.?2vјՅrla")@1$&`Lޜ+}1AҐ͐ 1p Lg Ӟ{=q`(:0<X-Wzb ` k0<0qѭA3*eSy:0k\ "h0psQP(1!p=qq=+Ɲ#5Mcn5v A' +m=(z|VԖ93{鳵Z-46ct|:?40GJUUP׬?dC (/2:QZ H A,fWGKEօbf,"7CAD@.r cq0 0DC\T0=SYyLh'^|TD6o>;S{|nم"7El vӈ-Tս8G$[UX[E9ڒH w,֓Ù lX/A tt]4a|?`AP[{A q o%0~!~MA`Dl79Pc7Y:t4yc#ŗ4 |ft#nl8aљ(:#1qk+sgtaHLAH C;utޯu߽GW"֫ؑ;3{HUi J+ۄO)"\'lC@#! pRALK#7-!l͉B*PTV8V%WP4Nhv1?ցDi06ĩRb-`|?Js(/blv{@lrލ 1O& 0zC%}dl Lc3@2VG_C̔+Lc2^wn RK؜[;c"sp HI6_0GkKGorzꀍ֭0md!@k+p[߽,ժ5~PVB.F\Exʵ5S {G1LMk]mbFPm_;)Z}f ԍ.bY=2[96z᮵%Y60 iNLivG`æѤ0IlGlm# W1#;OYB- F4(a j(E yH5AQ,vG:Iɷ׵^1PDg0><_nVjW7k vrF-*Z"ආ۔FRސùj%"61yanzvzgN?t({#{S1ꒉ;> ewϮjZ@*ju(%  :3^kQl2r352B~փL83´nӭ.nĤRux߈r)ZXw 1iD`Qt (h~",4Qth?N>E02&!'Q]FqBJcxgxݍU_B~Ls](FqL}6>H:pclNgUD̃_iɷJÕаRZkflu3κ`;N:|f0V1ufn>u#$zr}4u`ˍOkOޓK)ۧ0*$Uk]2335dVOnH c#űaZ|{sJPhmT)}!-\X);Ƨ]vS@8h)"჎ 76D"514w C֬\YJĔH 8M7CE!TN@0~2Y-ip%hc9=݀< `k be iaHA] k48o"Nst(d;{(]3p Mc\^ #ba$5>4`j-M۲$Wn}!hwa%/t1\q4dX3 v%uNW;F' ©^av<\ yuw<6Bo MR+| <3XC(9\v㝡`%V[:$!g ΁X:ѥ3Wj8+AXlYfϢ>~`t\$"uH8A'm$UR ꌉoXQJV$d4O%]Ym$EFet1pkYD^D&l@:4P6XQju\%__mtP2(C:=c.\gKk{Cᡑc-UZ-'F T`R{MMPqh߽;Ϝ u0~T0\rǒR&>| V**Kì2/Sq`=iLxXw ԎXHmءAyEd"PJ*h2Ri_dSȤn`4¬kG$\g*ߨ8Uau!NٙOبkqto:_Z8i/pKoA amWm+"A^4kj~:C⎩39yVZ*Nrl7ޭvb&w ;Ѓ|gBVW˦R%{>f8qvXW)Y:|ЁK/Pmg-s-'M*OHg'Ca'J򼊡LDQ4#FӍ%}ht7]`=BuɦGg\W)Fk j=Ah49@$f̃z4MjW}fJM0ձp AR(ePuBTqxjߞsՕ\qدᝐ)@C(;?w[uTb0T(;:>ԍj?q Q*ŎV`}KRLx>Q2(΍yȡ P'j'`ҀӃ$$2rcҾ _ِx{7,n=hZlCVΥK uRsIQp`c,aɢԿHev%-s1 0TZH8=9sΡ]3|bnx*r1T(dd͞9qӵiJ UTXs֊4L\QK nImmui/!Qـ(;!Q6 D|(Qj&"$0} ['^L?6dDT|ѲULK@@H}-'aE'UyM횷r.]>oǽ94fJd`0`EwLp #3˕czz饅y8N~|z҆u°\.8yb2bW*_!VBdXB;<:|ʫ(?fMȖna]:b8^^;56GK MHHcNpaMYVЈڋVsכ&ѽYa 3zmqd9؀8V't =;lD 1|^:?ƺa\c|C8V0d-x+LFeLCc+CSv,?P_])͟3jɽLn:CG{zilt­zLOຑgU}%yp%*(oJPYB0_^.@Q"Tlp#NOa hLMO-͞]YZ&Vr# Ugم++ZZBC PR0( q]r.WG}$~.؞ nqwI襪dk?q0u4B@ LrA`R-4?r>[òytc6)b}|38kxI 췜BRFԓ [3sulk738= `Í7`ʎtHm0,QE^$3-9fHP:n f cI˥0\={bίե°q)nՓQ5 ݡ"|fnan>CӫKKƄlQ09 % a8u1={w_tME%Y 7zLN4Oj`iGV laQP{qTަsPśfxۣfcH=${pkg;i\K YfLI{4 iR+J7$(:>`flʙa/Z(D(ڔ"RiD$Ea(Qib(8e0&6(p7 BWs\ٺ#^z̲0 ֊%aP(z f+e7[\[U)v#<+:+p!FA9>w12Ck('IGwZ@uxUk|hH$[+S]#t[ֹO%)A}k'Q] @ oŝ(N@6GN+zKI tN?BaDwֈKޏbDxS[Ixv"`Ԍ!" ՈQP3 C'= c[<@ (%]pLGY <BI<A/MI IDATnP^ T.N5)IaV Y;37w^뜷R6Ed++puk.Ka#e50YWDA!/*٧ȴ ɲ![kBb>$IǺ(:2຅ S_m0H9 $?J^XORWj9sတV_c1-W~S./>-umGZi Dy]M0G >F"35 [! Ax,\XJm1q=cz DCb~xh|ͯVF&MI83h84?S.HeyyvvmyR%0AB:XW+\obz7" $@PM}Ȩ u}5 %1G:EZ].h9lڴڂ +Tn͸( 9vr\9߉{ޅ?[)|T9!utu33 DiFgmu{I\rN[/'z8 \=-!Ve !V29#P:Ш؂b(a$вRLʂl@"fZ-:"fA(/7<69wfA+Ư-|"x͇ix_suN[׫W͟b)ALy]QRh hS㜔?wͤ>"=NfNsmLk\ctWP9 57Gwvm4( x8xa5A]*A~0mn D;LKw`$~2wޫ " قĒefOIr*hDxiы /4ۘY0bc #N %*`o(ޓ9^aͻ!<iLk142V@mu٥e{?uBfxL.yEEk3<.\XEE,Y|L*Z7"]dFD(ߥlh4y`6J ڠP_-/л\_+|l:Vq]*Up%wRkmbw@8A,@ tRAbhrAJԒfy2=8Q2r# GS[iyk8\ur|ԩǗK|pvi#DWC+WqLمU\t&8&;uQ# YS=A"z&{T~Ka5<;[z.~HjvCJq`}XW~1sգhlÚg)VV;o!Z#RWKJ"i쉕LZR 1ͯtUrrϗ5c@0P_v+RJLmmĩsdmZZS vRB>w u8+I&;=ExBZ3y@p69ĵ0eRNV=چRT6~7߁۠'z6xr[\p AlxDaf ~y&ֱᘐ RJba$b̀U$ 7H Uҹ䶍&Pq9؃ Yqd@Ͱ `K<>V:yUŹReUB?4;V.+ў{K]]6=Yac Cz]I :BjsrEhKu*pkhbG۝\)'f>Nto5^)~-d}Ҩwߏ'|k}<ٮLHJ[QA.,EDДvM[}fADYk J(魱zuωl+kNji[I͊>Ar]:0A`V X !\;rtnvԂpqўR]uuW^~ (U0΃RB$ g1Y#ۖ\&6.tR3/iS!bQ 8saD=#x#8D\E=u52D;C.cȫJ%GG )BTlS $""BaM vï=!pFgFڵ2jz80nJk] S*޴d-`&[rV9uʪ_5Ǯbf' # 07$ܶ *#%2t&8VTYop( !P`foH`B9zK[ #}̋tLvNGסͦ(qRM(ٖ}6HV j`@>.ڴ[b8Ut] lU{zxC쳑}"尘}h6lEǁBUC7^022 7Ca @p.-.u.O"T L?>4s(aR)U3eh]ibǯ={ɳss?4<:bz.G9ˬ&wzӞ:{ LQ^/-I45K7m`,( $ y?:GЗgyqPf:lF{Q93z}jn Rv$p\لG U(6KFݶuӧFl57xyza Vx .>=gYW=e/-ZD/| k:/}iOzZhBf\Ң  u}3??62:'4 @s,###o}Cߠz綾F6Rldp6 P°rmĀCk0u+pKF [K!  No?C`JgR`Y;Ԗhx'pPvBO)@V4 ы~>v&;6 Ҫ](m 3Ң)ϝ:q̧ܡ{oW1kV/kT3AZC)^Ml@!(B4&N䌵vaq\PHpĦ-L)Ʋ 7/B}lpMufy*iMI|_ [:,!I?[789ZTVz'uQםKγ@HtCd驩 /5?T~`s?|EiMP޹k煗];s#nu=ӷ8s C;f~w_W>5r[ߺ;*Ԏpë_z%k D0666335k~Ǐkp+ /ו+58N}#VV߽o7ὟWL-E0C^Dռ%3/o'12{^߭J8_[Y=u?G⪻Wzg=3g/{9JK"{DŽ~{a.u9x:M寑i)C&y;3=>zJ&r}}'?ɰXXZ8rhnGo~/.y©ZOZkneƠu// 07o#2ڱjX>MʋF鳷s"z7%9'ъ?r'YgXGy]Qm0pcݻo>gx_~K{η PS9cHv }o[obK+7__/[_/N??<]g.nx]_X ddb#c& 4֞+:!y8ᵺ/F6 0%?l$-Hⷍ%vR*=FeqX )0#V~yᎫaڛ\AnJj ~햇mZpMC5wۏj(+~š+wy?~/ boGoDG<Og>b:ZR@kf]_G&'JRY0?7ۯx]__QvM ׾Okx;,vHU/Z0< տ?RSg篪/>~3ˇ>3?r9qs5;җ'󴙙ɕO/_vxyu9/?9?e]O[~'ZBqSUOw؊#T m;nڢ<(DA$U#!on'3r`Z SlF"D> 0P!}eڑ#;rɍAzʑ[_E_5)^;VJ/kwÖٕFFP0 s:?xjC}k߻/$S& ğ_|EK+>_{cf* `CfˇԂQ__}ы[vNuƧ>>.U7ٻocSPb&&!lR^zܥopVz3B⭏fOjƌON윑R pnhnnfBK˫񉩩O}|u/W/Wn>_K䆌T]z-GMINb_1^Aζ%`HR ]wAN5];{$` (rmQJFA'hnǀ}L|s[ "~笷t&3Kz3EV^!McgR cjtZO|66KkmMȪF;-7~sOs7kCwU~e/ V\rٓ/r-/x3_ŧ\{{+B'җ+ffzޣGΟ|^>?s&T+>-6)CK`D9& JDOæLEGH/4b: PQdR}ܱɧ;n(=Mice?GaGf+=ܝ Wn}- N2mkkpG} :9%]['ՖKoxۛnj7o>G~<*Կ~`WVRn2-_}_;zVcjt7~?t{w~CwNwwst~n W֋o|s jr?7{w8>C'gjro|wSw+[>[([u7<£w J/=|ǧ>'K `'կ<䥯s=/}k_g^ MÇw_?|}^w Օw!u4?_|%XWg~Y. APUSAiΩ!0m~j q s$5Be( `Y%. Q̫[ޠnqbZS0<0ŵ72uI$#s}7oF O?񎈈<}\) ]l=qdP=syG}+BJr(oT+cjĘF,--}*J(YQF O Mfm\G5-7=pl4bT韇1qMvf+{^7/BOC z~~R:@4c{z!JIRljȩmo֯5o{τ638$v"hh+h25HҟGLa-:TsX~k?gI8١m,"ǑÄFI(>'Jb kfi)6j]p `fuUSe6xCf\+pןBcj# p#o;lhɜmsFE4@Jq Sܨq$i[Y46.؎erP]GjjC,Y2a3ZT~=u"bU?(UkrE'9ԃ0 Ȣ\cbьRKg1 8>;MhY8qiS~cڵNZQV"AkU_U-1gA8}vꋖ{a+5mk&)G6tiߘ3}bp3 @P3paS rpsFLR9d :DͫV>nDi c @GTnkbɢO[}(kDۖ=LO$ a[Mݯzzչљ鱉Iurn+lIJ XAhC?j*0& ޛJeoB9^37EDUYY5PA FWnPK,X@,P+cĆ%BE Ģ1t̪ȌbzwsX?Ef~ es777;;TվPs2if\`vV]Q;:=WIj^?x5|+\7d("ŠE;uPD)uƚlY9nPЌw1/OQ+?ޯ?Ǐ<^{59,a_9x~Z?7/'o$fߚvܫkimښvnQ$L:0AJ!ZoQς_tH_&nB&+A<<k3=w;(xqrI'rSE̕ϧ9e꺊шǰ\TULXM-c+x\t=sTk.A?rVvA*Rx,kD"z=\kz@3 Rݠw˿/- 4uM9 5ZmBc%q^,/!^ġmXQe#Zz }bilx-V8bș 6Zj?C!0yfoX2tsX9_s+rˆIsr?WNf'Gю;IJdU)M'M3Nq>Q5iiӓGoyotcfm0ls)!ԖGP/&.r8#>\ y Fܩn~omR L *wѻA&5ٻ!- n$T *=;;cvȹK˛qM^W##qj&{4ǧ057sJ)OS*fR_>Ϗpcǯf]/nQm6w[ L>^aprw%Ĝ'XHQvv;]G+H몧̉4yyCxO& w.H}ԍGUU 쾱7?*>}[hhfG)i6=??/ f^leZ fNP64RU /? Qf/0k ;bxޏ2@\[{Sck3 جn݌ET@K J@ńE<pV>,Bn } 1r"v3Svr jm9LmN(J_ah(foxJzHhgcp ʋBe&!wG?O~*xdT&w''(?o/Wpxh4l"Q](R<:'6JW2qfnJ4:|/uEJNL(N`9LI$m5MuB&Hf2 ڲH'hYP M>q8A۲=Tn\tJuItBVUO9; |T7a %HVy'9yc'{ӣz7sf:~LHIS6wМNQ\sKn)ރ]pG`T4Mq P8ۿMU7|lrT`*-GD "zZu}G2wtw}c<=6 BfT@WLhv @W&y D$@ ;>p Ois1a{Mj$ʛ@ UKIC߻- ̼^Wqwg$%O>鍝'_t%UNrtMA%TQ څa*H15M)T@U>_?ɹ:S|榾4kS}rgn1cefk{Zf̆p8'>];hy)nF g.kzArU;SGv7|8cri]!ti;<`}Kg}ח.KfkF][F s;hn;6L>K#_q;./G!Ŀ曇oC56GǓ&qL8}cT2݋(%g3L4qTx|>jX*-*$8u?vġt2O[h4e޼8R{.df,2Hޗ;,=S? vM3d4ԁnr7Wĥ1 r,vKBl,CB/lG: >'0#`m|ApЯ)a9ga9ef,sXj'/cy9`֑fױCwͫF|9PY`O?} T`FU$H<%' uJq8#&f@ADV/tbp3c`MN1Hxg/pLӟLW њav*8Ĺ]dg[J"s`ev3sF](ΫX9uk }QY13Rg冟 A mHl6٘tp)8!CLCz]ۮQq{/3pkaAI Ӡ"{G;89!EE7Ovw#͊%(5bm$\ GI,`-ӎd |J$,4={}o`LԂE07<<-KjVl!>9zMe uH}-N6J6) ԫo8$ aɧvKĻDF?WFlLPZ[f_N)h2z6.k_ ap Yw G@eO/ӓb̑D!SP 192\JID5F㚪?~qpob?Z䉯ͿC:ؓf/f9lY9s-}p;ܻ/gئa< ;HKa6ZzG -R^oms@r9m3~F3Gk;v8[_2]cYst0) 붤 Nsn00b LF1}ã'~7U{;q5 Ɖ21LTfY8p8$Eu (ӜCJ`/^S]|gޫߟ7/1`+e)F<:1t*̏th+]:3Wg0z>WueާuK~[[c SEpmDZ@ RH>ofytNoԓsM =VybA.uyPZgJN?Gޭ_+poo[,&/91Mj+Dgl^PJ6;#`TS1 ;[w 6Ѣnvv6M "|p+-y؄_xJԺg}lMζ u5_tΜ,(12. s^Q,pF&?z:kW=zz|z:MThѢ DTKuOSnDP+AJ\4-)gRrx(0N}ߥg Y/Wh{+Jwe>\տ e¿}up~̂,Y<(/+Uf홡GKYΕ tUbJT}S0W+E@y@-ͰNNHFho_{/1'wSgs bi餎$B-"YS%1 Y,Zh4L×/LO^>4:~ª P#b_P=8=O g#ήKhyg.d hɚLjkೢg-S: 0ĵARm@+О;?8x%wJ0tnOTNS9@ze&x]X>+ fbÉUH8BB$pR\V*ŜwO%UTM&|hwwD'Oy8x|3dY!)I9KUb+ENy_ϽUI㰼ƚ_RgXܠ v]s lkٵ7wc"} 䋲72g[٬3+(TqԜqwoMNNh$b 5)D4,FB,NCGnAd*"|xA䮟S ᭷ߚ ]t^QF?ൾU\^"b[? ƙzkwLEOffv v\ȎԫKF B 3jVL /ɴLx~|x2L!g5;Қw@](>~PeMj:QQM%dR%ʃyv9!sEy3s{s^"sg|Gv6TïwRgBqr)B??$3k.Q\ 餾~]b{wMH2fi)fx8/s,B'trxtW d]SR WhQD -͍EYਦ6H*^RIDBG㝝ɉ?~{`f>: y7 u4֫Ͼk fֽUz9 &[^Rg nqy \h~qNo+Y-Eu}RS)ij4fŋǏ]ĀEAP3'riSRԊzSS+4OOvvDd22񣗟=?0n+r=:: !f( p;:+ yEb:xSSXܒ/E;]u)3'>lVJ!N sޭնnwώ%c) V%uMѦѵLަbR3*M*E\K;+NM.%hR~'?;/&y楽z!JRfD"#mFKvj31=-ZN)Wa29[iNjP>qN7Uu |YUtۏjꦽ.iw}uu:mR}@,yt۽ %~UCTs;\֥F98cVVv\ho>ma\PrVpm5WHũ)(i%NSHl2MoןÇܛ׀mQ{ X7p:_\g.n]gIyڞ3wsθMjyJóm/[rA?W6]=X {l >M0 R@i@I'jXVbiX.G?_R?o\1$0 bqphG8X%3ѪeMRr>U%JUf+"}߇x_krbTns->7gk!oWMK[x/̯>&`:(2(0\!ֵdP.`j IDATWš ܵ|ٳYY?<+yl~Ï/Ȟ[[L@1Ud-TRfl7Rœg?G{ "g`+3\E]'Al^77w@@DPG.Z %u3RPSdN)sNO<}Fq£/Nݯ~7s*V&bD`0CXB(m*+MRA 5-e:NFi< R9+fY;o:otjZ<~УYͧ*kcsy-QW$yf^?d\NmV@ v`UI.m˙V? MDgEL1DkKi0܊Z)jP/J99P,'5C~Çp_<~oǯ?-0G p;՗[r `L+_nbDjPϹL&OS IXy r3OʍR 9O42}\gk*"DNŠB=+nLCPP[.?0+K|j,YPR;l"8gC׈~+p#Jgmufar@3 35גv7cDΟٗ_{㟼77?_RCP!8xΉcLBLScKh\4-9ݝ)̑Pn)<%{I"ެ}5Nmcpu$YB]ظ/\t+sŷb_NX&[XG 'ξl츯V[A0pWɉJ2A@C/>x?_=uTo5>J]zxr2LYJHV&TDjn5*}GQ ܘ8W6jUUIi&ш$Vɱ 9SydRCDAӒ炗u6ǶVʭ4lyWk3fmkmN8#1xVaОpq0Ϙi .t?mڞ+-1K)Y㸲\T f4 %kє5kvkvAb#?ɏOȬ4Ѻ&,T, &U &xPq P nKv" [uiZbe2ƻQ(H45uY_*wx|6l-'wMlrHŗWm[:+P̯ 1({SE=W[=KK-I8w c얽:Њ9Jc -P-b TT墮k(8HB8 p8bFp I97(\1bt!wr"+ĽU k$@Db$A$U5hvT~ɏ?uPep29X}Gϰ.h:UܚYY&wOxY}dH{ytUug h֙F}"Tm\P#*=:,)Ɋȭd-0"nj~{[S>}y(% r25 q,"kOm#C" !Zn3DmOPF>0wSRfjVekMm@:zK|ǭvfi\*oNO^<!H1%8` #vZ\a,RURfBS \c 9z]󨪺&:Ե $4ٍR%uFjB `@qڱu/RRj*fv#mm2OLZ߽^=H  W]6Túel܄>xE[gam`y,eʲx5A}˂lr|+ Ȗ{ʆr 8" QY dϩ Ӝ \sULs6IYWN78Dh6wH蹨9tﻣO%58a! g4%uB$믘E}?C1U|nT!>붥_Nk^ w=q. ӣaL#`rwV=ki'ȅBdw "DF) ?0\WI͜%h+̈"DatkM0bٝ-<,#UF$QԺ1q!e%L'L⫯SJ?Ox0WQVYiy˼Щ% s[{Jw:Irg\gDw80#/ޚ-ϾTjADJVȮ(fJabP,.KN2*/oj얚 0YrF* D"`Z*`*DD4KB_!( 8c։ᆢ`ECiJfH_/.{o=n]B⋹n|]p]V<;`%pߛ}X AqG@|8pB6=}7H4M)q*pL`֦q(i3 $7޸W9Y+ned́ybnr. Z @d$u xVb8\{)jhsv8O{:w'$+<tY$-PA pwR%)KO?guIsotcݰڝ<.=:o 3Q2pR{J<nKºVC"œiitF!8  2q6嚺'R5ރz4& \FZRIYp!c" 5WtVGh\p'xVss5mOCbAgê9ԑMaV8Dd 2ָ*fl&zkGq=l,fJGrxΌXIK 8LuiZJm lAayt7fL_VRg&<ɋiIٲýd !$n n0afmKq+l " wC!m9*+ xQj( LJW+RΤjVԡ)gwOdm9R%!TmN @BsrՍѨA>Y5>؇C5ܿ.Tb`ÉA\|\a_Hػ*\wU+ff=E6soluu뱜si}牓^#LUb` \9e^{:0BݼϏ^ɥsN96h+N wUF3*tY]4==9*)khRFL;$!X!cw%XDT=\\S! (yYKNrTHPv"PCIϊy.-Qdl3<2PhAT"`D)Cˉ9 0D L6awLϾr}زMaXD\).yt.uaKNP &|qzrRNIi:ƚiNRT]AdPjp[۔;P, D5533/[5@ HB`p+(vԡP DD,<\B 6> T  `8Z5`x%Btl^R4izzg6/zK[P]E|lӪ́XM+bgٔ޽DސHdW5_5nDŽ?;=:T-i6Xɮ&MeFѦwrhq  )yy0*@vX$8 9e+YͽbnnnnZD*LD!sCL+ ^S[El6)0j1PqAR9 ӺE%F;7.@N>7N0) x5ի/ -vGʻ' FHFAnH*eRXڊN EgEx}Sژ N}6kY_P0TzAX xmcejp ܕyD|ݶP.Yhf:bBK* f6m:f2%!7E]Ji BQ`.SP?mbpCs01,-Du]*@R&1:{!Бܩ81P̽L6?mC( uDf.""UAjTTDUˏ jr@@[`BܤB7j:P '犒䬮EYyzc!r hQIi9'SaB)i %-`pw3Ldm611(Ơ EBxY n yo-ڲ߳y{)r|qXu@e8 [0cX(|֑)1J 'B" 3LXPF*U)QRCNzEVd[<$&ߊӕ'/K.Ȯ+^ jJU%%!+ՒaRQTs*tKd @puS%8:u`thy 0}|*  Pe&xq),hY.0shW!ufM ok=p(+ܳm04z§MC1-Wf'/ިRVCPYQQp9k".ewÝ[A0FNUUer 7[9Ps(w{ l L0d8̠ ;#*!DaXV&#UρлS3p6v\PZnNĮN`j$_&c,dwnZç- yܳK]s,;RO*wMP?gCsZ{h\Ш ^ 9UOTXk$#X-D!'5WXȻ$TF܄Ak[Z+'V퉋I2w J  v%uJox`u"P(̩Q2=:vsW2f{M Mt&i:f7v7ez,{|1Ȏ7?{o%I\+j4h,poy4zp3UU3_3*Z2t]fOP=0CXfDֳ aѲ1Y[;-k-_ ? BRJy-FI*#GU} Bf4ng0aJA E%6dJOkPt%D IDATTπ b1/ZEt(t9zJ —V2sˆֲF W^)?aN(;`_Vޞkc 10 ޢ4>`%͹iFX`]V؅YWjO'ն{̒9l܌:ITή-޽/ie"y׆QX=Ƒk";V؛kmȼ[ۧg?ƭCc#Y"(d=^^6zFvFc&[tNՑ׭vl] }Uz~>eɨT~NJ IRRq1-Uk }e~,B{I2s3ZoߞV@ ]yt aF  !J"fL tUj oo~O~_+ Ce n(B"T\سS޶X&P?Y%+{O\K}/; &|DB.+ S(EֈQW-H0XW08͒z-:_w+ˤ,?_hĎwhԒ/ʘAGvdUڸņdIi$N`B[w_ŷߎ5N\m)bЖRif x )YoHVU yOzCsJ$G5:TTZ3!"[ mi^yKYV 3QNvzg/03PbtS3@زOϊ/'vT"-/t}ȍeÏCM[˕K㣇J#U+vJPSmOx):DuQy},^.&eϒ*+kΌ:JAxt6x7Z?0vFg :+V{x;:D x^?'di/JoWpF֣E99rݣ (d)/o?|.vHd&m;7}5}]L2q]"RfQ@DٷIZB[lٰci3ūWBc" ~AwE0NO&[6\A?6n'YҶ}7 ^r^=׷A3O;Gm_`X/?4r}S9و=dAvh[v .O m@ ;ZV+ײ-Ƚ.)zCo34TvnC94vf]+G%n' `.՗]_Kvܧ?EXwDk;ghPYd@d*Ay~gE\%Ln #չgC܆4* DflP |juuG![@LXյņH+>-i> #& Xʷ-4G=R0ē`kbY}wӿ(mؐ3vWF&Α QA0 /9nlAv>c$( s$r]DBA>E [iBE8v'vqwH86t@zΥ֓>s |~Rљ(O?KGt>'CqP(sqSޟK$豞 )ңoh]Ai}IG%fE\ൔ?RYʀ 5 D>XL$M ] &yPa) ]DDZ-#{FY-TN.#\ PX)"JKGVzk72DVF>Im)䖙KX~O_g{7UGȡ#ŋOQ՘+.ŵ7/}_ ]#v※|=N`1T$pszo;^=?:aeZCREtYO~-I.z"vgι"B:b`AAKAtD$Ilߵ jjY2M`$֢k3fp;0D)K`3pԕ2"kPv&Ժ ELTbԇOt:iIy9~ +!pT)*[mo:: Ğ ʤ1$#sTU^#ww7$BOLOZ^_?'|(uDCvwm x^o-*a΀DыSck oo}0<umqã6Qi giL/?4g[O҇ҽO (xD믯D޽1-}xL.q MA@ -z^ҚK]@h L5V) PC*:H)̦ܦ@GWu@=aɁ*eL'XrOq4-C0^\V P rp&&O̔DL!z<}}ϐG.v cY+]lNR_W2`7TwQԠBo9 !~4 La5YM~4oܡ\Ea_~It<Ӽe|>"'<k9DCmQջ$u8ɍhh4o P̟j2sk붞_T#K)/C j wnVݷ(]̈DdGD ֣WL1 E)ZRjNR)ܜMIR2H"Fn 2P~ s~(.t0jv>w<ʇm=rD)]l1!Gе|$Aеn$n?gb{ّăHuH?,pRF0 %2h$a^6g$ooCø-Zbf`>/ɜ7:O |sW oeͳL5#Wie Vφѐ UY!(M 5{̶ikm1J=TA C a2d)D"I#Ek[ft)`tZNOϧ#\ hfc:ƭo (f jOP5D\-UDJ}-Rz]_UPFp~+lfo?6 O5fhp:89=5n=&<`ɘ$Kss to9X`=M8<}Lw QPwlO?p}m`7_O"n6~ΌOR{=:޳@HG:dpݥ:a (fKDnpYX(@Pܜ@kzZ `)dWX 5}>{A dlyz]–b-Z l}Ȟ1'$JOuy>=RZ4/ :G֡>Jn6>{ tG9Q4R8b(zk8\)>F_ïo} =4ܹai]sjW^w҃8aZry.~VQ_9}G7o` {x[X /޵t Ϻ pc$; ׋'f9~NM&=b|d"ռnC}OL>ᢈw,G3T~<߾o>"w(I#iyq0ѡ}n,E H=;@3hbշv ʑG@lBnyD8+>=BFD[t def""K6"]Z Xy:lE݊R 0rmm椘ˆwc#6BKL6rX}q5Zb̳D\M=z_|myU?0 .E{ 6K3#v ؠ7,i#{n97t>3R}b.?Bydm2= 4Da?Lo̬Kݎơmח|L<(ٝD܋yp|ZGfɌ]\_լ.կOD}DP : d3N2&xQYxZ>x92_&(!3|>_LoA:) @oֻ(xĈv>/J_RKuX:J9}] j!wRnE"\* 0Y޺螥vv5#y298nh,Dr1>:pP(U$IKJQ(ڀZ$*d_-4,p`mk=zVv1ڌ6$z4_ce@w`&TsV ^Tw+4yqdT)$r.Vل̶9xkmFT#*txWZ6Z^~oW?3(Ɲ3N4qHҢ ʄg@:3_V+'ڌ4BVᦫn@0f~Sd8Fx'G[{8{ (`7C4Fduz-B hR7r nPie ,*j"Z=xjY XZ¼x_>d=QU N@.SEDǶlE,32{|:y0,mo|:{LNbl\BqB"{wV)r8,@n/d.f-dCl4Od_$įE!9o@Kt\&$]`aEJ@78%ݕbPrB pGr%6v%'xYCߡ1z3dJ6Xlr;c* t,h,^#fBt őB8[;oB).92BG]QzZF&wHdHJjRH4߅b+H8ON Y /i" Vk8v5V H=:M"X@ \b5V"nqq&.\`c)&Xk_oWکn$t{îȃ`'|`x9n ]'I3j{_N€W_qC)4*5]T_{X2ǟAeiפwS}$^8}m]OK3=RKy*EwIh{i7 0hk_[*6d3I:PiJ3o㕯jg-ɞFٶY*c/Cd5Xn" XZesU91Af_b"_.!.8!S«_ŋMw-ZCpa 2CՍ)  j PV˵7?Xk֣!hmɌ+' 50WĤSVdC Q'cТmuɲm $4&rkۀpRmtTD*ٺև fEHK /#A+)&-ff6@cHGf' YaQ![64JS}6s> ̦d&%mR@_ȷ['#4m~tlcC,bTm8=,%5eЎ>CO`Fck ؤP=\ST7,k=C9p_pۮaa8rW}#/Oo)dyu|؅0ߟsurR2Q8$a: f߅ǻ$a=N)Y0)Hk``531Ӆab^xzsW>{ǁ}GB~xn/?)!H#"' &RN&ro<_~?\k{陱m 6bVR˲uD*ssuOd6X!2\Tso3-wI˲lZZRBBJEZjf^d* i:XNnujh/#ڝ2=vQ!2Z%$2D̑} Šxٲ9LEu0 pA*)Sz!8̹~_~vtjī#P|3jq _@$:rYx,}_zJޟ&ؔ6|<  FEG@ \ksݜz@ IDATx@g&o{`x#lz2Pi`񈻼~bfR˨a at(|_8siC幥jtA(Bؼ /P{H|(SQ 'qG*qyƝ~mc|ެL;JlW|Qz__%LZܖ(my##qJ5K g4GhS="^QȼCd_pu+?fHj;O<ͮp'@=JmX<oaA욐XC=!toQFefgS>}3SC @^0%3X |זFisnǾ;2[tQa8x9-'衃Zh mĽzD(2ZMבiL~"׶+ py^h4ߖ~)1s?Sv8k˃?޺vP?`}.q}=F{?dCº1%d<`HC)ppZjWC&: t'm&y\z~]v~GEH>0citq{ ~ 4z% i~/rp΍irh &?2kwTv4 9$pksQC.ca`֑]V$@{uCדF+ `saXx$+.ђw" "%B *?wCĊc5|ѸUfPm^"r{%FB _o7^~yhŋmm]<򴝷qV[n 6"]" DJu8Wa:D2܉$c 6_j*eiыyMF;- Fl`eͨVH.q&5*^G0Y(r@"Jl9=ZϾ,f ){ZUXҳQ [luՒKTYf*SMl5z,'jK]j^uH p=O 6޺/2ouWy 4+Eo 8wsA-,?7b%F0"Bj%1=U qqv!ooӵ5zMo}Q`()dzBCށf8P]2 +$9z07{fЄw|g8PKLY8 CzȼV4=3ԇcFhI*,D>Z%᷏ϣ1ZCPjJ>9y8Km]_u[nz>l)#޶u`.0&5%\>)deT&cp/B4k6"`%[(NRBa5^$j1A*HTD O>z܆]Q`;Z _kdPQ"#j6نv3^/*v9"DsTvr =C`뽶3Nrfġ c[A!yQc熆iJ G!z ߣ=`1>\)0L˙[¥_rtʧ@^qU$uaW3(u'tP]vaـ9eri SHSx`<|1lS@^kF:Vy{@-^ x2w/NΛTi.P1r>z>CͿn[׶۶v~ٶu}Y1zSYٔ Dt kߪ\Z}9M(>1Y2%3pr5)4gD(4 LhdD EvNz?퐙GD gf%ץv31wO>pi90]ׅvβL(v}jn%g|4oeޝ.=*Y]a;򲞷1;_Df!wz!JiP0в$#I (t^X۶n˫=ק_<=|Z2@Fzk FAPʴZY֐탕Jc)jWF]m$@N}K? g}Fv@vS ';|1o4@ֳ> `ĹR+ާ9XOt#uS 8Kb/;>s݄ cneYvwmpb~o^vriiMrsdIuPm&{F!  E\n,N53A+ow`Na ?1 @mٻ1ҧ# є%t0^_֭kvnu]^JI~]7ezߴpea2oJ#O. uhtӆ+kAkʉ/3F@#c8C`gÀYt+ ezwp2 bo40axȶAc&)( TL▉0Y9 m}׭mɿ믾>nhi(=GI-j8޻Wkk'iBO1/MI3sjpXq4܊_@G*'wUP͌QХNc1ks[h^k5g̘#7rL4@@N#8)#`=45Ey*G%I$x)`Y||#Nlqb^l8?$T>bD]~u%bc01v'q[c]jݭ{7kZ3y5;[7U=R`i#H \0-9/Nha 2HDLhI'w`< RL<ŀV"C-4KQ $G->70aa0YXG$ :(ŽIѭVkmi\?}vusɣBSj !.9Mg jmͧ)|?Zv熗r.mٗ^S>6ыdxU|4"@7nM=)U"`: @3 0:qhk).70,ڶp dTrr܊Y@s*pJ^B [?۰/&6ťS>Q$4A)eK@0\%99^"7N:.nejQ\de>B(S @!9?Xyu% ^q._E뵶úcmV[?x_{3 svֺλO$~{s91<Qև b8w(FĤڣuCss*TAꤓnQ"|oM QQ!!TᆐC*TbP#ؾ-h*md;s. ;Ar4aZHd D;߷V[;S}fZ2d4'gĦz`YA 7ajBDFw嚓8ͣ_$fÿO6q|x7)߶O@"%sco9+ Xb6U9 颟a-`(5ug0̰?+0z.%OyflcC?9.LiΏ58ٳaw؆!UhF7ڍ}~Bi AU@L|]?-̟GOc7L9|oc!~$G dVr }ny"ytR<* 6# 2N9oB 8" Pt:5T.w6f9r~/O/[G JR)s,z:˳D'k5R4QInmq"ڹXoT#.FA8,ęMMtZ"'ғ/Y?Z=CkY=yu[kkW*^)I*Ák 2 "p!7]0%bN8HV!3 f#(ðn:6 "M$9ew#4i\mO79I[!w@ Y 3hC\5̛/(4 &R-.'wwZ[_/{&ͥ] tQPs' > DYi̍Fg#{X3榯 |?ǰ\l/8oy3#_y~aj.g%A41hLcB92zA ֶ!z_ D@m"XK>҆艪~" сia°1]$*?U: qx 12a9ՀTt!E!J.%glgxo0//'~"uBlt;= IAtn=$T4|XDͣ(t v$.DqgȻx\DxN퀿$P[U" IDATSޒcMsA9a,[LvNսG2AN.o,#n};lDq@V~= ]|II) ᧆ7bMo{z]E 1sy>cVǶkݚZ{[ifBH J'{cWkU>d ^mn (d*$H@5;5`lPކ |&ȔaPYh  i (!.jH޽;Z C3ޥ9#%9cպ?շ4-s.l7@. f384JDPrry5oz@N^fwju )U٢qOtH!%)ܺfp#4{OZTTSy쳵'kYDMJMINO|U?]YP?YﺤDZ=$A i!h,1cnj趏x'1 IC<#of1ݰr A p:t?wϥq]z>% R>ͯ0; LoC4' ip}Lpއ/*pxcƮu+Pdv0¶Jvf4뽛YoUA'NJX8Ż;^<{ڭk\B¬ T:fŵxGgϏ"Uߨ?i󱨐xJ[vB\&&$)/+d`7Ϊ'StQ#vws;[779Zn.݌#ZI8f6#f͙w_nPaഃ!: +A &{IUu*Hc#ENgn7Kd (ܧcxަHH>*NS"J$tn_P*' HxJ5QeISWqgez*Y?v\d]zwWhS^5o)ɗǿ7?]= gnOGOYm+;lt,?4P ! 0$\ <D&L#8lA&[чPGƹ gN!0^I$o۠]84Id v1Sqqxh>{d |x_ҿ8V95!^ɥ" A=uϏ*AFp$EQn{Y&hCիew΋ZtYȺŔ]dpSfgz-Fg :Ni@'qf'1gwS+tt#{Oެu VF\d'D:L=VL[_okﮖhNw롁ѭ5 RnRN)s!C} L=Zn+ׯ>~9id ґvИcLop@;Ū30am={kk, f"D*߀RD"G]d`~L_)+O_详TK۔<)OOUUxp>oYD5e%yOڿwϿ)kʿ;} ,ּ&TRr;Lf"T8(DJ%e$nIrJa d)E RMGRD9' [ xwD)EE6SPf("X2"D&ATgth\ ΂S ,1dEq%[֣qc2ڶ] B"X%T!_B(.!ހsXeK5_5@D'yF{޻yC[׃ qmZݻљ<So6?] \nv;}♕’s7džWA$n$q2HHb8@Y㴋π R8Y %"[b$ሠ(hlhs)Nz5ލ6ba"dWIE .M?_gOrmb%Mҋ'Ϟyw1_(ooS;_ې,ߵu,o?w]pS*PXkDz7K`2UaK&9.I$"jZ&iDzT%-!*æGƒ9c5QQq)yw@2"' I8*)La$0$vR/ttJ7 Dmlr{2}om39ɬזA8>msSn55qp͙?=\CxOt%B6ZL J}K_mV5,Z`) 3ւ[wx"y~}}=-%/q "y3xYDD3S\\\UD:BIV# ~X M%s~ )w"ydd NvgX@s. b-e 2 w9c?76Mjc[搨n5Er~xß+5)VnsHN[˒enh%=$Z|=*3yb[D;Tmu^#C4`_pS)F2^<-` Fs !_YeY!ӫ"SiJ^hn [Q;kuFrq4pgjE|Wk+ثYTAn:B£WRS7;Ux} [ Uϼ? G Tp |̩O_|/Ϟ=&^.0~ N7M=Z$yo]pN]6_ڱ6[rGY I\JRDuQT,ǻc4Z|*R-) 64PY1tz>msխE֝޽޻3=,}`Jy^nr.S$C[s(iT h$M6DsFl$gLʋzJ,HB̬85 o /vG~x fnA2  Mq{H{tT(b'S~=jd+~wj"<ݿ|u'z%k=ZI5M AGuhF?4N|>C%#!A{rhAh9%n'@uYN ltox&YiК}Ÿ7;Z\}k7z8J|OϞ}Ve0Őz\͝׻} 쳏423 ITS )1R&:fKRFr;!e#u"GdH箔ᆤ-nf'NhaҼc$!VDs F[6bU[t_<-+CQzW@A&KTPXllf 0WW=ݡVh\#׻F&;tCc[5'[xAz ljufo~wD'D y\F: DةR| `@@;]z $m5bYcbꙓ)(MVVT$QDT mt* 4?)""[oxGoگ"/~{~~<--X{~Zz&k2)TrQeC?}ο+O_}Sh"dAc$"˼iݐ54TGh)Mn} UU!kXPsZV+4@߁]td0KH?qjS˕GCWWO$"{7 xBܭ/ b7Bh< fFeĺ+SeMWK;SDa)%z=ԁk$/7Snn)Ix{΃%)&P[YOG;˒5Q%ΐ IDATVHHGoL@Bdx*2n{v{֣\׫4+x(kJ IF -609Iga ꧜ُ-R\g̤ p3ז+5ktk+if"5FdZ5 ݧcOETa.TemnݦiIKrTW$k hk<$vu3$ biV{kx1QҬ]S&y\&^[ݽF4dܒ j^kϧf{WGabE'ȉ)U&h0J*cxՊs)"mo u=t2kEeN C{/^z,e)l$Bq?tTQ]<(˺>ӜYtp0uW*R |t2mEa@)lUWZ׶Zt?KaH3UbY^;u]oZNZfw3,͝pC=DwyKPp QM2QVY!ĩ85}"\#__vO}E߿}u]EJA)35S_~G9,"KI IR@|ʔSN"ӬI SjG?zVU( (4u6ZD淐 W6vRI@'^f0EgUv氻=gELSL n̻-DrC1-DJ*HSwA-y+P˝kkHYLLLѓL3ʓI "C )]-e )wˮDMȢ tmf$M4iYI KAjd!]PRFJ ݓDf$Yh@3S7)?ǿ}/{kȻO*tJ֩ȢIotgYHm#8>M%E[fVo[!H/?mu!RSR"\]hdtc!э|*i)pz2KҒŃj,zzR@zU -hOLNWݴW%z5kX[#I'95 @R"9eY5!Nu+#4by`o[CD6ĺl"$ء#%XSfy~ɺliʳ3ENT.[dk, l%3l_T81Ͳz($:Pc^vD/1G ?lV]$" P|q\Œ/[cg1YUkw&ձc[JL2 $w+n@" ! $N'Vnw^kU1n1/K%9R;<=]}i i1 ITɁaB(tj@yLPۭO/w<.kmKp*L H,Zx @z $=-:ϳ N}W(!!=weCQu,M h ᚙ6 -7|mOuf2CH(9_?S/S l] VRL^>wOޜ_Zш0f-鑮s?6_])D%f6,TKkNyv}c~% 1K xi$,/e,]uL=mĉ [`LDBnݑy\sZWp! Cjf+iP`ؓ >wFGa!!k@yv8{݆BAVUʡHB2D=sl]m~V/\i GRHj$X<u PN\0lTW.Zdh 4 BzO!YFVkm/ogKgBdEgxx_W?ëtk$M@g>  Zs MY==)oOj<-e횵eD'ΩGn:FV$.%S1s8$Ed@U~XxZj @gDчr9)2Ru&e#HR@Zks}H,4&3Hf9O%|%39Z2^Ԟ.}i9Ql GFc1#& n6ϩB2mrE 6?gYC^yiB]2Z@T>P+\DcbI]3L݃<cqR߉yL*rސDPCO[x< 3+l2au/Mq3o;N]VV9]|.{wBX2w cJwCidŵoKm6|HD8GVT 1"{)b U|dR {D NrweBOfFfaT[,_"tn)4 9(-ql׋HK12 ,Vy<#>4LMp*cӘWHfD$`p*@vH#{!d$Cڊ$#:" yc|)̙qwxvz>Ca$M t/}/} 7c_>e>pZ1wO|_?}}K/8A2#-A"ΗH2ËJdb$L bD*R&sY~^`uL9l7wFD0pB,:T! 朒AgCW7ḍ@fj$& =J J^#%pا{Vlo: 4i: C35j"FqRFsm ~5jMj5gO^, qiHđTJz2:E$$&RԽϡjiz s~p i(B7L5q; j*?XExWm@Z7qLTy4,4Lj|n"FMyUne(gOO~`}G_@6ƴ1|L&Nï??>amm]R3/Anۊ(ei}/ݻ͝HD@֚Nw>ՌG !WfA2L7HE]J1V{d1v HژKc(#[#X&:4QjHR $Lt +'`7B^K<݉uveB"AZvp á&xBPZ}*E}>&*,+AMJu=NQ͔4ù]jTK@1 Rj6wS8'`b ,Li̙)(o9D@@$ {Cp)/{G^~_ş7?y>_ ;ĺg«%M'p$.%\K+oNn3%1]B]iyAs fF 57vGn 1m9CZ>>"xz8eߥ_7?P3L,˜&a 9_TPx ҮIԶhjAӧRW#""P S7vX `˦\ BBLDS nˊ޷/}Oݕ=v:OqڇAO@@b j5pm:@DarBNdLuµq9ydߎ C ߭K-lxˆD2Ђ"*UF&p7#L؅މ*>޺ F@j h`xK}ywŦ@kN%y_ p@ LK% @Lлx@"&k?x?y?y1uӷo~? >/[ߦC8"7~[og?xwwq=׵ H[K+,XOC#Qb 79>|?[SxdK w~[z"mM72"؎gtKNDH)Xm& r$Rrʱ99!"/ |L0mPn*DI*02$>l!Jt+3';ҍ.fBŌj-tABe\L 2c#p꾫gMtA3x08mHk̰XD̴tL@$])iFbc2ffCb^׾_ϯ/]ǩ}mwǗ pY?M R8j:(Ti }p $bIvX bul9˰ҹ.S22ʛPm1cCnouYP۞Sg]v9Rċd: ̼v)CnjQݹjbz;}Ck^o]>ANG!:vR0‡Sw͕TC<)O's"E1nwO;sߞOǜ@\{fCt1fVDطOO̹_|z|qkB@aI_r ׽{[$"hmYͷC$$شoXj[錁p3Ҧsr(DF۞D?:^<.O˶McEj XXՋ2uYK"s13ߵ tTxfbbRVɜ$ Ej"Cxޤ "OYДBSHށwDѸo) i˭ct(P"oҏN>I I3s3'Ϟos)oJ&~__BOo?9iv̧~w>{ߟt> h^_7]x|u-k9 BVfZeYԉ棏0 -mZsWﷻی Z`0|1!#2#*,}; g#jA˂32Yl(;;4p7 Jh鴮.™AmK(u,P $RNB8,u؟t,%3ar[q` `Z> tsON@PijY0Pmnxh C(1Oc<<{&b)p.N @ L)0Y50܀rӉ(ε".ǂD]mAx Mb&zۜ2PL2;O[_/?;c_7xՇ3 uHsŊ@u."竉뜞h}/R@ )O(% kL$3nLӌLyF |z:1ױL}NȠ—t>D,"u9n"Oz'tŦʙ|n]әѯWsw3gNz{ݱ7ӦD^׆1"`*Z&}S&&1ue}tEdp\t .yt4C7_P"|T*R{Enmo@ 2@bp@׋7|ZWK^O˰ʘ43XmR#`^Bza'1$ E̡`$q_yO/c;z9ocYꌘa{880R5ֆ)]5c#CJSnkA@fF><\օ2"Bjf PBNDT ""s[i wOdvӞ2֤t@fx~*0fh<&Aw~uxxb0}  t1/?]סK_‚p|RH 1ǟZ/|8kY dd RÝƶ"ferP+‹Wz݀2R|x hXpm-$9=nܚ rd,, 1fF&POT^1;J+M%DƂ "Ga#p^&EV5@IG2`iLp}DԆGd!p/5&j%9WFQDs[$c!ÆB2",6 'ÒNEU;E؉ǘp@ 5Rjc9#ÙF2P"t/b@ oHIͿw6Y v =^|D򉇅o`q&SD`SǻV׏OCxl=T`~(ȭɑdMf,IoN5S DٖO{"nc},@ C22*j_a]v3lq>L|la`E aArܶUHr}`dDX}N%zeY SM܀(]ϩ6Aa'ys'oNԁn1KN IDATH,="Us*N謸b҂W2 z0VK~'̵yz*d:벮#w\#< +ѹ|~x}Lଈ:R4$/W?9>zsO2P S\G$CNm*BeY/kB^or n6M#|!xb+` KFZ)L$@(H Dt;ڋ$`]&̪ :N AZAd7$DEHSE !3k>Jdj""0awzc~5}_7W_r>$ 0:U#,÷_g~r04bڑrG}{/ $R,oߜN\%!K+-`vh\!|:lrk6j -.U), qsF"Df) bf-8ULX؝ரR)HmOSS* HD rGg/f @ IF0yKLJ$L%҈:B [(8@A[sۄH5PF>oR$X˺_w7rB9PBaaB)2 LaA)r  ;W QAA#b]ftZ%nIEhW*6 LdMe  JWɷ-bs{ci@OͶW/Λy b3.[R~\LcO}OO^KtCTGs@BGPws@ީ}k+.)T* f  xwzCz&@K&B@&FVA L+y<"5 ";l@BdƁÈn;L i`yK[|_r!$bDy*%Ͻx2|qRQ_fc)E|Ͽw?aPJk~/K-,bmrhTbVFhϱ2lñ,B2AG/tC[ 7X@NlK͐<4]^,Y<$!_2N0=j"~VCGBYFd/ +`I=B#p% 2GDFd! ߭s(w+/ӳ4a!Ȁr8AܻM!RHX[4;R.30X֥.O8TcDx8@@YUf@$=- eGd̖yc+K]N4* GLH ,Kݦ@/gޫmET8%͆Z #eaֹFRm䗾k `ehAXGcYPmD&*ے+ 91w @O֥n:niH9Is)ȾPlz(㪌Q0^}*lcA/CO͐e1"O{\Of{O.m3n")Dic]d">wXm>&iX"LS#1ǵk}Qr3(|;N%*%xtPXλY|c:ͩ%iD;zF&5 A?iw8PuoSu^!!tH9W }tnc47tŶ)1ov9G;Xg{B }#Dvf[ޣnp8,0tNi >- BH"7޼@[ 􏜌;+3IG:T(92 Ϻ&d"3JLMcfčF|bd}m9gxRETDƸQ>B|aat}j1fwo&k֩K9{Σ0{qm#S7X,SBhЄPzr_9#ϡ"fBSsG,`3 7NB5nLSz3 GPbi`6p/iwx,y:)vHQ "-vG$nVH!B46Y Y_Cr'H(Z!*YD;A#ɐH#rw0LH C![3,+D8< L"|$@Id@^V 3@-_|oyq7[~;]Հxq8Zi4}n;p-Tcw"jpjX(\e$r e3sܧ3qt#8ek-]sؾz@7LDM=Ct*$nƌtL狪:%cTpv;uu[$Dꚮө/́EC< ļ~fDp,Kaӝ3i}\%ѻ1g]n[m+>-Z:q$ $˸\{Ḵr}@ ΌHclAН@Gve֯ %lX{.̨զ#`CMm +<@jtJb]/;/t>^9ca>U!=1-00{/&F<6]."@ Bwwwww3 ܂^ AQ-Gp MLrI?yw]+Q f2r65  ( !ϊ=1(B`ƚج 0!'x<>>u۶]]2* 9`zDDΩPKWXOPɞ:R2 僇 IKP#E[$am\^_1\7CD$[7 iRt$ 1B9!pZmvMgwu >DHyLiIf&X|._f,c,CF3ܱK1&rO <,sZcx׋r)vӥ{!M9XqN1R}x3ӰbhnnKM}Ӏ7m~9yMu[ѶL6mO)k"<<졡`H% $RH"W޽ٝwDƃX08ΎXkXY\="̩w c΀9lW1ThNUf 1+5cm H̖9@~M2nǏ>??} QYrγ{JU3l_z3+!a OnB4IZgXqcLOB'5"+H w"n@bŇ76bdqI-P30vMg\` 5sobD4le-BilZ <%*RM)4NԄh[BTa ((+JTҶBt)NK2>FRW󹜠k"T ;mn *o;ALFf1mgVߙ,\ExSrcKߵfTbY9KaKek%Œi1-7mqt{~+n'*,^V5(!1%0{P?$t/\Gji QSU-\\D,sFcF9IccR-Lai p̑v΄Vf\3Gr^\Hsf#3GwwOL  Ep (G$Q,Lwhw?6{Q}3jHQ(1cJ˜ݽ)Oy" y}o$:I`2:&!O?|Ko?|{yx>vԌV8sSFK&Jrmofa=4 08 \Тg?ɲm$EEHT Jۭγ{cOauD]b#@Za TjZTO&g9 IJf`$0!UHBPMH1}am1+% `]))Lڟ,3=MZb w)3rR:->>VݻYNj3v*1GXgFB",Ki ċpi2#/]>qAVz/Z)U*'5ٝ~vw 9L&uN$(r8۱GoVEZ77˵ݝyy㚑eA(xlw(AyXkz9 H@蕳vDfQ)O'vRifFOLncNiD 6QEQ^uj'Y2Sq\/ܯa3oP1K_?<3uJOsAf1./mq@rݗrb2X[[N獘"d`})$a"3 3ihM$!I.@ @n 1"}Pa|%|0qR H&`B6 ILixfҍj7۟qd'K'rE)px bcLt\& x(K)Kc۲"!za?xy~dBqLp?F ݈ b]gGgJCGy#a4$0*I3uQfb+0gIT tALqè5G%30}p ˘$j a^#b92{q,>9h_BRUj Zq\DWRS"T38i[,2sMd^k"q_pF}I,uQpyrE)qZǏrquc |%e^^\B1-_ 섲j`PdaZ蕥P+JB1GAPj[t"^JPemK屶e 5ɠRRZ2+ Gm*2J)VTpNZ R*Vu?./WbeT<B,p @)mZֲMw,ozL ⵭K]"-x rni5݈#3oG A `6a-xnp "0z IK)nCON"$#'n SVa!n8$) IRc$!`'OP @oG ?!Hq1,wt]^y,˷G{iںED33L^/雙^fIYZ0V~,9-\'9SuMv%LBJ2 f(E(,ij'"ʔ3iopLL/I:SKT@ sIB>cZ#Q8|!(_"HeYK>f$<\b-La1nCjFR^U Ltf}9 IDATIlvjӝDLCqYNKeugՍf9()40Kg#KsZJ3 Kr@#rH[!2tVN$Sp$ruS7(3(fƷyU9`QR˘/'F\}nY,AwKZ< FRNO{U|*XpwW&.qzZtɔk-u=e[֦2fWV-Ekտ>tڇT_{:HKx9M^4R-~%Lb`[eV9[)eX.gKm7o޺imFW#ebP&5E Tdi"9r:5s>4'@˹պH?';ӟ?|~yޏ>c\㲬+g"D #=ܧHJW_~xyv=|\`-,yYPt&[UarDIp Baݚ] 0"WA bțM3z|[0$Iyk1PqžWpߴlpMc:w~Xn  IDD>_ 6 .at|RWw#9HQ rPM( fܯo?ȼg7 dxq[ns̜vcB$$!HpUUT=U2{S%҈-=3y䭑H2YUi2 %T ,(-q:>xuݮEre^&bRk%Z2ka0‚21G&~TfJ+#H8|*5UICY!~tPlېZ-wsƤ1}dB}l/;3O>ɲR~!EjYBjoVP5ͭGΗT۾鴍y@ykOZcnkMI\5rby=hTTVy-c˜."DpwRX 4x8sMR 7O"qy( $pq+ѫ7UedVNN=Kms>9['HG?ӿH}s:ϺVmT../~?GAQn=2u &G#beVPe.wVQ8D"Z[Md2 2 T%x?|[L3bP)"lΥ6g!(h3@ ")HN2AQ]w;Fߤ:Rẻ1崔,FP+%$V-Y.tR98b[ټuI,s"}yn$ɣֶPhB.H[2 L @J J%wH"R%Ƌbtf#r-M"Et/벭GBi]'ZkI霐0@J~ys&g8@ fH8s݄EbsJMS%xz{1.-oO5Iz>=~G9߭|)E~GZq03/UoM>w^KSd~E=4Rmw'w[Ǘ7OySI/׻ȾK#l bsoܩGM/uaJsݯL/^dH~1B0?1żq2v$4QܙIO+3%?{۾|[`Ԯ/vwydSN2_|~zC{*mZPG[8.Zt"sײUPk=d!Y?ׇ}}Dyis3P]={jDPRO2wI~ه&5T-ڿyx< IQ8##^Z]U U[)H!b"R!J2JdBZ|!o"@Vs槪8"FI0xD7WH8_KN6!qT&6GҭH&^!H , aÃ2S2,r88#Ei_Ozz5!\[Y֯/OqSXQ Ef&#!AD"*y+TIH(CdNbS*pu}̬U`8xDq*sQZ̔Lvp$B+LWJ"J1}X% ETz/w6&]Oڏk˷"J 0鴨pU"-[ 8lٖQKW)Ur*˱y#O" 02u)0Tʭa> V$3Cit%.{$pۈ0$nea VMH]R"U[2R~+J|[ӲjCDo%Yh޷M_~ȗw+"߇iߏxnkƯޯg!j-~ZIyDBpr*~޸~[g߲ږߝ:Fy{8-vvUF i͆CI}v>\V1~n9Zѫ1|wsTM$i /\ kSm0DUcH*Tb;_/tKe p"\zl|~ޯ#X7~\ys:mu\ƑIy>-f7z,OE~Y+؏{Lv3K:!$>F)Ņ[x@8uTgWY?6 ) iYMk*T)Z CDJ F-%bRJXx?/snOOe9T7&Hө#Q6o=s(t:x[qDd[.i:"B0'EӧW0?^*t$݅= dQAJZ|ڶHik%J Dw>_~?>/5_*^ɫzqno099&kmy~[miYG`&e bdx?pvrt^ϝ'͇g{xɴZlw밫#!|/Y S [#lw||Ϸ/it34-MygV H\P\Mam/߆STH KnLZ ke- aQe5@Qx|3qp@U艄1@:rR53U83E #&pd׎-v^>72Bk!njAs 'ܪ0O @dlLD&#K0Be= (&R`gK?^P~M@;-ة <ۻoemǵ"o|;Hhx<DcfflRa#ӧj aAcFy y[h;6/;Z eDXB/J Zeaee@JU)LLKwJ%:Fw!>/ņ ɧVG2IoCCzDdF=!9f(5e]Jd^/T\Kd΢Ť:ˀpUUV HE+5e:!9TUcm-4a$SP)9mEOEvbR|\Jc&-s]T4mDYz)u[!o*$*'΋^_zn}_|;>_s)OTk}unܻ(h^ =YKfz/zͻoy<7*LssY3^?vZ_,! bEe _ 3~p^lou#TA$ۻ297o@/.ߕ˾-UEm6Iz:q|~13}x|FwcN1k]zm ܣtD5b]o[D%+k)EiY499fEu+EIF\kI"dR( MUtSf6.*1,2 EǜU{8:}(ytۥzZ)!Lǣ+ }w'X[sG~*n@um ᗗK]gz8A1rV &gZk2G,ݽY 23 {]j{شT3iS.7jW"^ʻ?SoXx{xDUٝZ4ZZh ̌ $zAhqA h~}ZjH2VQ$UGe>} ?>mYTdOӌ;1 Ղo2KMUI F*p$eNT  ̖~*6`PDLxZ9cIdTjFmR>,cD>a{Dhh8ӼLT/GsHaUΧ"%ׇqstEc*SM)wRU^|Eh>E&BUJarH*"A1!n ;_Ggc 5(D ƂCH1=-#3f`pC'~LH h$e!"2(<~^v CN5FHt"p)/!Y!%[S1At;<xO A̓2E`J5PBE]2!c?(SbxDv?:(!s>п-Q37Ks\v*G@/S -0Us=b6T’pcR>H : f~MC#ez6J(}#T$@9K `Pfml$;saJJ$2pkLMyn9QHbgLJ% 8'Boƚ250({x  3[+4i2 5S|?\ nG]?2N3 k8vz>u~uF29ѸnȥmIh}i\LK}k}W~?cVTz?y˻S9sRyt|,n6٢\v]ٶNN!ZvvYX뷷<۾ioeNlݮXػO[oc^p|}mL˺#H&[V5ϿP]]f_4 onEGGK"2.1j!Ƭ!Cm e^ReLH\RJfb:+ b@Ֆ,[n nHLbpRTBlf"ݘ.z1"2D~hi}޷= +x1S(Ze"@"&D[{7GDLH$T̈`a(""ԄD4p?rA3 ܛge &<?9h33g@ Ò95>T4%Z֊u1|u^oRkBdȌaSnH*|m L{=N>"2TC2Qӏ{GD wKÐ$H؛@xsMiޏ*Hz$133 s!{/QAD{JI: b 㩨ߦ:"z>C_QNe'|*ȎB u<:|w*ŠB͠uoS? 9dDHGLSݶ[F&wѕ PAi>Z[OX~?(ZP"/7i0/ EG=ZL\f#_ XtQ t>=>i>r_`Nj IDATtۉugy},^^FFӌ3ӏ#чc8&(JኽTU}Ze9DC1ekm ,(*M THML@̓44*S]2p84ͳtNJlnɆ!@eЈ `f•ʈAߧ $B#_8 ${l2#!F@"+@ ɗPjqO~SBSEY#~@$JJ?>!CS RӇ?2- !4j>R5p(Խ? K{;F$a8[W L(8UP5) C 13MkݎgĔ0`.Æ;$! S e ֏GCtsԥ Z [-%xJo9!Qk "I>F83Ue1Kע԰ѩck"2u46&Z[х֣Kn>DĒpG+6%=@ 1wan8o*4)DH)#GΕo[zgOW HdGܶZEmc{}[ Dάݔz72s.#b^}FNJ_pʔOO~2SjBy 1M><.]n=aoǎtisՌ ZI>?y:?i \G)Zo3O_^4}8?x`QxlYF礜J*GVnC'24Ta#\(`;g Pe||@F}4kv嶍ӏiؐGl`^Q{ö}#]ULW-)<4"mݎmߺE:DQe̋U J͈) w"ɢ ~m7L ,ئcZJw0,[ f,DBE Yn`@DGp( PGw7 BS{{.KhW#=1qJcjB:"JDEH7=P2S"Y )!7=I H H  O?N,{rO蠬·ខ cW22E(Er`3펀ݤnp#*@9v dozfBΈ"W$.ݰ3 mx ##n @a)zJf#GZDFU26H#1ɑ3F0K&DbZJm2rHB2hJ`f9g@AVHlΒ* B0u L>³ípo~w눥|8˴VHk_^UVaCoYMæZzBzÏ *h0skS1ZOHEֆrDd?Sz1F0"&"r^)+0 Jv C>x{Z5Ӈu2篟?|bdG+92֝| nF~v\{'k楆ۻ~9vl L 6M0%ƆenG= Lfx>}g=GRmiYEO~\{kqZxqN= 2zt~n/q6\,1oh+dG609T,-*Uā2a8AQDt \i{"4֓xgQE( qw;݄&H3RX~(CfphX`"$HdG<  0d8iFfqO9c@2TU L`!` ju?'h#"}P Nc_vU&d@>awbTeZR>_۳|OB&GRF"X'īgf7@ >F#,l4U]Hj,,+;S.@2xx@[͌BE3Mvs:ak' ѽmVT'YBR m{*#~cXጊv8ܝ([1#2rbXqi֑ax?[mGcyo4]n̜@4OAE( 9K$MǞ?̌o\B2}„@,^LT$9ͫ-5s'Fwka@aͧ6z = 3vQtΠS-~mqjm ZN$T<Ѥ { qi]=Q} 9zяl]r`t6@tU2鴾]&-|^@.w<|؈ûg^0-Ab&M2~)3`w;nq ٌ5)$߿6 M(U'~j֜ [roȯ-o_v}1`_8 鱜GdcӉGT4GN˶Ly.ot]mb3Gy<֪ͅLHL}ou;971/xXҬ.R/݀&p; .'z*}y¢4ɤ؉=-*LT*7BDH"B"*B);(j $0B&DI)rg)~oD1)2%!=. ! bD Hw D`*Ҽ3%22ѯ@%9#L*1MY*@.Ї'f"2B1DxD%Nb $dr;>??W~lV~z S| QfIw==²<s kbn"d;"3 u} $H2)DfuocGD8u]GkӺ`[GcEH(e|y޿X$'Yf\=AG@Q cއvy!%"v>2#Q0WEI+ـ?}|Fx|.pc,"r fw*fcZ*n[HjCX$*O2~Z+ е8nƉt>)$IJMx8m@BNS1SiȌPwtn{;Z2CtѯH!ݬ*O2~d DHv3ARTx-2M~u&6^Fچl9qZ@Y8К˺p^vU0UbYo%PuI}tٲc3er:/E0w$stom^ r3c*%Uu?Um;3lo=ixvbTfCeOvda3j_w?tCC//<=l.x.Q,u~(?7z>i~([۞߮0P?~<=\W:L߿[XKck]+O/}p;Y-˔@-uYO7fAHDA\ BM0$΄RC.䝘3ʠI=rb?,BɈD?ڈlѧIiӒࢵK(D" ^RoE#$fAF@I.}#cEN$?")Y ,@V2MB1 j aޮm1"~.8`ՈtoNKQ,8"'&(scy$uqs{Ƶtå,p샑a%` ZB&VHH6,H &$ID@"4PPI"CX, , i<XEFrAL#$#_9|x#@=ҽ PAI>rxbdù #!!0Q!U" Aqhd\ AܬĽ# $JȅQp 9֟~:-O[s iu]uˇnmQ{F4n DN^m#AH` {-r1Fu-ȲGV1BsQapL{R Zۣ72:;=ns?y’"ڭC=f$NxOEPRe¬=|p/4i<M= ip>.e쑡K1< bXG3XiR(L.\K1&ȽL 204: d1e%*\1yv? ( HFMwEGiHi=NSlleւ@F"1 |];#\#f!$Gv,d;T"ǘ,`DE4LVIYdF 0@=N/ xo6KǓTHzm8jо,LrDEU,uF%mhގ&UL_EDLzJzo7HcӪJ%:1?Z;:IZ z9)Jo>i 裩,׭]oo0ȌvC Jx^G?5p, 3!'Dǧwq4)գDawO0I0:釺v^^:M#2)"U"q;H#&&M1m?X%Y1-m\tm[Wwx̨K|fv\o۫.x8rk ܶI-~Le_AT_^O/_n%9e,CN>p7\O3|xF(̵Q͌}?0<D)]pE1zc@}lH6r>G:lR\  H`~+pD~:ٯ778 O $E9,2v'ݝ6Z#ݑ"(3JeSN3v%p.mjo}0yoNC mL0?ca|urNLfɛa̓(.UX2-DaTNBDp7DNL1PH7$EK}A=ݕ7 <bD~?[;EG"e$z$`'@eqD4XNH`E@&:˝%hx׸f3eBaJDo Ihf 0W@"OHR:K!J(PԇE` d֔\AY}Q .0͘56AC]݉Z< O Vh[c6,DX}i;QeeF:[v 5n,|~ݻ߶T+u)*,GߋL1#FPU;#EDH&*HVdb>FHطp. H P'8 )MU{; I S\= =gr>Mgu gg\6*}#LR}e06!9io Lmp5LOdPHȤDE86sێud.Ӳ>V2q̧=FaTiբnT9cFoܙH"BwŬ h'^%|^w~Z=iF$(W;?dZkGs9`:6un#\Lx5Vn`"aÀ}6 X[;0Zt6*r`o{}kyuLCx?ƜQdo6a)YivXFЃӥG3pCy%,mM咃<.~4;IӺZjonڇ![#JhVsaQZgՒC$@J("9" wBIJHB&dF"!Y_&D)D wL"I1 IHi 0wCxa'W԰) L(=< cpU6PFڣ!"F83wBHsw61$F$"DT@Y0!܁@o6$ !vbaa7vb IDAT#Ec>ZFH͖Y,;݁;tuU-Ol N|@[qn{/ȩf͡wxtSDR8Osp,ScdC#=Hy-3|'zB잀.$<0HydcyτPSTͯL]0H__~\v3 lCUWz=ʄQ1liȯcc-j(D P--.WVK&獆1촺J@;-p=!M,J#pҖ$%0d_OVY|b]ץ}*wCʲ:aC^tL@RsN4cS&1.ߎv.#cR!d$tivDk mYFY }x^-LjsY z߯0;Tj8`s"Ba(D,!O+7L(t @f^ >Z׌u8:\VPs2fFx-vt7L2𒉄I6}_\4z?=B>18tFPbTOR9iZV9wx6A Ak_'n|Y׵Uv:ѻ0ԒK{yyVwmqZ1\Vp|( =;7ls:/X;}%#!!$f%ʂDM)W^iuuHgʺ^k Oz{υ4Ƹ\9AmP -ig[. & Mg(a\&A9,/gwa  .R1e-O0s4(E3_Լ қzbHP}xoO)HP;}|Y2Z{__=/O/_HR"}S U@$_# "Cf #|A&}`QFGhA$*hsfz:J"d, >8yb&;apM, iLL91fp DnEMu  6@Uh Mj220''Pp )Kk,#v@&$1 @ۖכ\.l:= B<\Uf%p9%CUS:LPGAObӦ'O5 cz#xNRljÃN?q*O_PT<H=u@f<,5bѣw̷[\Pm1s֚>byZ#iXkR(T<幺.\ǩ"k7ΰD> 9ͮtJisB;SKmNuF: }LƗCp!ڰbJc8! uP㲖>n=پSBq4,J^p ,a 4O,K W1"G Cs^k^/ufqZ}2P 阵Odܫ Ky^[ 6omiM@Y__/__ݣn+S\eebzz{i˺& sxoi߾ai+޹>tm VZsa'z;_; 8o84 tO/^FqɷTmq$ L;E>x.rӶ̚~~Y#B>J)[vĴv;<gYwwƕdZ31nu[]6ZI3S }}]?~>}_y_ڶR`{çema)[+-=Zk[WHwUaf%xA@$̄injG}HBGM+ G"8#PP 3 ! 4@xz@D#K@IA(8Dh)BD &Q2IGe6D ȌD*POD\$#Y!!{q:GLRxle$K(f:i PEY2 ɔn(21}E#Ƞ9cZ&M"uC'{&4zpHDGN\hD3Y< 4ޏcSMcǙ03 yLRtLpC5*Enƪڰ9-i`3#Uyst{.g7Ș}|_8-eGe :2!JlmRYC{rx;CӶ;ң ʊa0ceCv' G87؞OO6Xu^6"^>lRJKuӮ/C>mLT6>,8GN6_Ò]n7{x||-uA+2ּ4k|ΗЈ#).W7:J^"Fr}`Z#ppHR6(`F"%  Rq _n~uG5Cpd 40S "#]<2$!]0&j")uJ0N0p$tP 1k*aKKO}NP]d0BG< !#`eS *f61 I˘NKk#2QJNl 1&סi괊e#Gnf9vl\؂VJIZ}pFDM%#.uˎ d`6SLS ht{vcڶz9F̉d.zfLV+;"ǡ*BDaC 3ZdbGӵ6߇'R#Zĭn.1e>}ZaB4pN]9 pR\"GgEБ=)ycη2/0ňOzyV|B>u<DKQDp4<*~av r!~9@a?yJcGz"< ӟLc[̛}}6u<_c7|1'd|GŖ_^^>~nea ̂KŸ?ő &Kgom𼮋=2#wyϟ@\inϯLg #3' c)FSOb.mI><x!nmSeooǺzu3Dc2owvQW>)'eM, "M$*&<Y! #ĜtL!]٣)SP,*8@x'AeBDT}t\dғ؛`qA`7LOLf dc32AdLO|$xd@ٸHPA>.ITFxI"5ohaK[̽6{{X"0"e`fgfJ1V},z}zݪL4-U5Fe)=V=4ZWcjyk< )?\/\H$v^o_>~n]b @{WH #  u)$&C+a phApoC`,(A'bx E*dzڨȄ4"3xbH *Ğ?$أ}pZs75'@D~)9 <|O 't?9\H PT D") *a$B`L"JH*u/G r$i .FLJ`>ᮄ""eBN"$HR2(;81"'}A)e߽UJ%eZFDBj H(" O K-PnG75%N2r9gOsNKL>Y]q(2*Qv`NsE`. ~.2ΪӁ)@<#jxN騷Sckxy?0S.c:QY _v!9 CY8 Y2Ms*CMPaD`*˺qnn,T$EzaJE3Sr s.OwJmO۶C@7~oE];s}EM8/Ke{Zj8ߏc߿Sd9Ξs:@o.-#0˘r*|=吏^$"M׈P׵Rk1c>?H-ˆ#28q]ת1#.mZ61U|hW'/?QY*ʖiV1n\O{\ۛۉ@cƧϖHg{baZcl#e5§k,77b>Λ|ȟB9rꮶq;;df |?& ?Gjk@K9`*ԴYOTBՇA`ertF:ֵ'' 愀 ߇L>fH#SfKfS^?}=݇w`U~y&\׫H1݃,~8R}Dk2j@:z\e* E(`)H@ r5B>~YiQ#1C\n_=4UhtB$aӥ4\{ԧC>O9S}H&u)O1nvYXX).HL Q3?uc+n <9";UhƇmYRC?>oRpň^>}n_m^Sl1~<_j-BWF"c 1t hq;:p |{_hJaN [_JLgzݬ )D[8"ȓEoqϛ0~m>*?VRum>ֺ==#!e199=e%L ΰdRPze]< I]Z9ǨX6,p^j+>FTvP)!3N"DD4b 2 !! @1vLA88`! ?A3< 3 ѡI@i&03NVٸY$!?CNw"&䌐 dD>TM!!%$#cfc4 f.$a@ qʣw f}ٚOղJ< DtE6*UT!Yf-}]yʪHJ$g TuSLlm=Ns\[&Ǵ xh0< f fF">͙Bh:+՘st!c̺9z #(hFp >%J:MZO$}C$rytE2e֦izbOCSq!!r{}8DV ̌>J)v w SoXnxx2)ώ,-2!4'q app++L_1@A )Yc!O}8ֲOu 9cymmn3&C+@e~x^ז_:B6׶, jN`~Ӈz]Zy'ޅ IDATy= ~N^+Ve!>=#seLo?o_[b|H㲦Pٶ(\mO-Lćk~pX]͢&|c?˿|-^ttY/2|뺕Brãk~`d"KQ纮Yq= Q> /YɵO˗?_J=/|{{iо~ZΡ؈k nσnc1l4EA>T- sea&D1 dĐiQ𐨈 p̕; ̈́*nX yf$BD jzfHVP=?V0F,b B"}%P%"0@u0J"#GYMl"4%2BIIvnHYÝk%&u)>J OTl-2V@@vؖz?-&&&VʊTG -T$JtJ |g9 r_[##М*!Lp?fg9OӸH`cLLM4 1-G),cs!D,Ybtw@.4' DY"qN8Y U>wČ`TtLׅn~CcR٦aiQw;hvH0 8Pk}J\*9I`XjE `V4p` 6{W9ޏ'xu=υ!A\δ_wz]/_->ԟ.L t1ގ_wKMFuG@!2'$ѡHB$2qONnյ|!#]C- #oO~,K9T}7e4K.mُ",qւ9X/lmb! KH;RSyATLi[!o9z,]RcmЮu].[G[ﺔ<{42|_j痄tYCs?yRRxrzK^O_.6 %hMj5!Ϣ_V]yLoBsFx"G'@pEBfz|w o"tC Tbw+ p Ui"' U B v] f\DT->low]B}y۷ww( r|a1 ӆE@в,yoxzR{^I7hoEyHk]1 2))L4w3B䱟eNIJ㲖߿ݞ^spߡ^u_}ڹaC1>ގK#|Iqv)~'^n!S!CԷ۴Rt׉\8*<⻽s"̙~Z9XvVzhC48}X",25ӎa`{B78/˧MdYuVL zY$[O&#Y]=< @n_O&UgUWf2pa`bws9a$2Inڳ"$Zc^rA4}7UpeVG\Q%K_}5j vHX}׶j~R:\\6K,4&ZD;<đfn1݁ -LJV1~;v=Ɛ̈;3nc ;Lif>J1dd c%#9Iw љ(8qIp(ZA@8);@f w@0ǒd ~,(9)zM$_W"RS*aa1M"b<P@"< 2Si&AeʽcspaU'2eI$B09%DWsPf!)w5e8(@N4G&hy{h`ӸksmK::rڶ5 PAZS։*hLjG>cc*'"݌{mM6/ܚsmjAi5"[5בs͜Ss Pg6%y z IP09  PaoN@-躎e:o?.2Ox{]oPЇeLsI%3v{!Mޙ~˙f=zGXDD8O.}"G5][%c^uOOc|z~=vնtf&nޛq!9cK꽋 ~\w |nǾ4q YE~}lx]קԂliYЭ6t:)-0s>W7(Ogr6"[doMzV|z~k;n@`Ck /SyK ~yr,9'Zg.72AJ0[)ӗO JM@Pۻ͜na=@Aiɓ0"%b3s 7faZsY8Y{=@tdHQ]>tk "hHB` `+8Bwt!:8C@q`@?脐4<9&x=`! 1!B`"@`j5;@0D$HGE)~p@"pF Bf""80"T(Eěk$Č:tDK&JU"IIY $bA$<׃^) "3tWd.2FdBp'K@&`$n"C x#{W3AiN!pߛsBa$P֭# s!zoLsfSnF,YbGDsKlnA@4ZGA&S 3iƐkz\׽M%QJubBࡁfڵuwږfàka QlFhf }޻PsI#( L s7p(_ pMgN/SaC4k[o;.[ǽTy>ӧ֞n~/®^bY^^n1!t4F﹞Xc$0`-OK>(5?V ۺN7G~W#Cm8M wڻ:JߚcbuR%ԛbXư[WOc 1hۗv<kPs˗IA<=oFD w iN{[K9 < 0,=L(U` #Ѵ!9yƈcCL ebwW fڻBp::/5@r)cLYRjʹ@R#k'fah0bbvpts G5w 57,Fn T oy@)G1)C(L\$`nsLޖvF ў>izӶ{<{3ለ9mW {&1?JbڑƘ(:,@yCA>`ֽ]s#GxQ{LSHknm76ɕR~<ؾw$v&m]{>">/&r0u׮tѡg̳ {#R&PrBr"~0@`4ϔG taaNNS)rt Lk 4U5'BBKD!߆ۦ|~Fe@xZWH,6P/1{˜4OS1m(jWJv%RW]%ѷQnC8s0][Q$IMInoCfܶmSrFnZ+MZk-"1_5 F2`@!}t0'1",4 b4D3KЏ&p,,,@3ʰ !B݁#G(52 )D@N @$D8@D$$@@Yp`!֙rrnH"|(!HP: @n_(RoxAɣJKx7u]m$V *"\:'f0۲RҶTW撒; ` 2*qeW)(R9lh'f̙)a9B4ELs"`tk= Eqp"N$HR9s Abɩ캱1g80 9PD )G0Z " Rda )XN\]_;D6BhjsBM- 1!gBGn:Q@w(yݑ(l3!dbk<ƀa$뺺y1 =bh8M#?F'$ m s)yCc_COy לoݷ.\SyJFowtrs_|^~\4?ms96: R$R 猪*gAZ*2"KoM:8U^{7o8$Cs.NO_j׶i"0RxGʈLA۷K-MYRL)u)?\RAOn 1줫 DJؤra`ά`sh#dBBvuG22N`~:͂  nld 0H3 hLK;;(3! `<Q !hP*ё 0͐>FGG˂ h4I9܏`LxLhB4Qz38x6ڭB#@hO}<2s΀8r᠀M5jMZ{o,Ow0apbCH"D&ac>UNI1) I(LyۜppNBasFm攉ɣ̈r*E,H> ?NH<`X.5* }BZ뎜тDP]]0 @RWlN߇d LSݝ7uP#G"ԝ!,\}O_.њ>jڝs_Zoe-'|򮬠-FCw; v%޶\<-ߞ XLSq}$k’n4œK}{- aO 5xSČFy/>sҚsioYL Q7`|/K9QYϗtAnHEPcB0 @ӎ IMCh(%A@8.H# P ` @] ݂ LB݁Z@axO")#0 H c!q?D8RBN>sbU$A5 Dd¡L 2!`$HBLE_|F!mc)#oDU:'}>H .O%ToM4Mp0moLmmXN٬Iכ}1KYiuE浍@|mt9xGiD+%A,Rs7]jy>eێ蟞?sE*"2f]:l-[d"#&x0@p8lpр< `EA=<#uUDO+ +#;8G 8:qG$ ;!fQgġF14 2Q82:EP-:TNJAnGG"a  1"!!S$*V IDATD@co:}?S+Q.zYk{Vku%! -)̹q;Z}mScbud'?cn9' #D%Υd!ԎF"@9 s ݉1 TKn}Թ$`әXӊȒR8/͈ KB]-tQ!JNs9i3FΧSk= zc߅qiڳdȜx*u)Is}^r%1uJǭT~>.֣yHEJr9wCtVD̎6r: -&@F9 ᒸ{cw,)ZF[L9gfP̂(q!PdPȕu}m$OO<="$S76qݾ~?o [JiAú67yѮ3o~nۧ\h~Z>mۚDyzwl[cu,F tƮؘV0Z`!sd@͙XPN5P$D]z1TW@fSKTLY>[ p_[Ҷ$J宩e.KLVqe.a)4T %H$-u9KZD Sͪ+& DJ$)E)e;_';',XXVfH1 CdYbb9p<$hL.y"RSG,^o[B7\t90/ IdXGO9z{?|^.R?%'i>M?ͧ??z T1] ko_eT ),Ag{~ʿRІ=/$y̟`.mOoUdjl1y$hފzO'1V ]6: {PjM>}rľmή{I {W\{yp]|)\f"]zۑt$K[{cnꯞmOx*r#]݇lGZ>۵Ƕv RZ2MN^v[>M…#c'1-o޺!3=}916w&t@/Lb!ۀ#U}6L(f f '"q S@D &wECp(91;, ,ND)w0 C,@A F [@x%vi#~ s2Q" \%% B"AgOD)n_:&8BA# ',߯}&qPayr6OU}pp\r7ΕRh'YЈADrȎ X62zRe3pE Rш0Be*q\"I4KZ:I*;(HiJb`l<A{ 5\eF\2Ok)E0sڦ)^i)N!q=GʾHHfQk,,͵==/oDOw4-=O9K>\xHyf)jcO @dP'!2NsSxZ=|)u~Zx'#@ovdEڏ1+>cyDYmUi+jDE;_#J웏0%D)u]=Yߛv.mhR)߶fr׼1{Gfs|z\7L1`p| U\q[<OxpQj08p~L݈)#/]nj<@p cG|*!9tsK(|y3!3HaqĴ9#J!$LĊ݁P62|(g`c$n[bܶ2uqt$BCuxTPSH!\v 9c_G* lqӱ 9eZR39 )5y Ƙ'Tc%+D*d5џΓjVj.%lq\xUUZBJѻwOFKęq)Z|m{+ppSy\)/EI$`zIp$1%(qZ\r"T+QD4'j.TtsO.Kt~:<0Ӽocr%) Iƽ#urR\sO+6N=甄 ,1R.NS*5c26yynCG7vm]il=[vc9}-6n&I\ϼ>$%Od6T\1nv4,:ZۈETӶbq]C>":!ؾ{?Oڶ>?v:sy<&Q&:6*v_׮{>ȧe|]{چSSO_'p䗷u_o] 0ʫo ~mNSU7s7Vn=-[S׮cxp,VRsJ8hQqLG2{SU р b4t^.ݶ*0T2<6-̵@P)nmD2BFKN)A焺2iiJ9E+I$D< S}22DeRcݞ>M˗z%g l]ّ/u6O2̵H|,;-=>iɣk*( QGNhJ*#%tTeؓՒIY]AD?_R2}ZN* B0$NsNM/iYu%̈0O7qp*P4~$,4Mrr#UmLDm$I찧fYU3 `y㍿'@RHP v;]_fȪ]8TVU{{T)޷CNܳm[|{ZN[snfP|yYWy:ۗwt ookku]t.}3?Nkpzzr{:sq9k1Sf.jmCˮ6z߶[u<(0d:]olg >_ZO1[з̪=:oKV [+َk#Gz9__7z'کELEM8:@?_#G/bVH"GB@A:H-PcA }7bkRR -"HW-614P N~ԳC1+،Lj:~E\{kTPƲA⥚yD%W%@1fuE.ŕZ`&'D!Ur\LDbvkzw$kM)."n7V[۫(梪bТ[?VwMZT\LJ')K۪ܦ\ޢ.u0-0H&7ZܪmxzyRtV TiW DdYe t*Oo\D%Uh:raZr߯IMO'?_gd&ӆZ˹]EK-e>T̆t@RBt!VD=J&J ̴6eZf ު:uRLta,#\U:u@͡J5?,'qY()׌4\"pmO~:JeX)|=3χ}-NV+"jVQOdkOerhAR/ovݼ $3"exXrR;u|nok)e en߽< d_M/S_.ۗYYLȞ<my8,u7([G/[0{l{ժ˩xjm|WxYkzZq?o<-9c,]-cUo^WQ__|!|u[NK9_yokw7d[e>lZ~4LZJ0hO$bǧh 5SJ4"hf]8Ҿ a21;zKF#Jn}сM 1HddNgL G30Hx #aR!La#LJw\:j݆}~ 3 >=m8*2ժx@M>M3&t6ufw7} CbtiZ25 2yzTkYO/ᾮ"a:gNts|Pf?˗R4j[TBԒ}7sh(e]i*u&EVz n.XŝP.y_k)Z8岙{kQz)nEQCǪ4˛suy!J낌y|R [)<TJ2E=aa=Ud$(X$T:YwIZmd)N[c9{euHnnV5K]~-.ER'uIMӡlIu\/Ӷ>|xv۹?߶IlL=>|<{)ȬuUjE[,S^8=/"b">|" 3rKQ'{<=/.@Zf׷O/*-ZvlO?L"f/>=2eL0=}(rx|Zל,?}r6Բe;_)5͵GLft*Ls)WnZsĵkuooD?i)O?ñmޮ/'\Z9VZ)O2"[7^oՏt4#ynPn^$r^>McPy;çk)|5&e:$qyu]*Z&/;hkfJuaTe}C0ef $y4x&IUd&uZ3A+ {3F* Vځ}3Z @bt7@$!AHd-l6բ\nwpOŖgۂ[NS^0;Αx^oV*ǣ p8ٶuK)Z5-U{(>!$[ޗye0z_?r~ײEǗCV̧ M3{-MʶneUU ( r>Ӭ)ZԦ_Ħ2R2tA{dZPTW7aRu 4/>޺)H/ڋվLV$qHu*[Rl"n!JlSI+.ftt/Xj+sTk|O3^{upJy^7Ns|ߎP&^H-k\hc`uolyZ7~~;tdޚ t;0zF '/ ̸ JՔǓgb0vakRspy /)ǐ"2O֩ 보0keZTŖInVyRJlŭG[f|ђRk7k-n48e)&&\rP\M_N4UӨkA5?z =>kk"i:QKQ%4Sr[뽹6M l\[kpL|jfݐI9EdyL`5m8r=RS IDAT~?/H -Cm6SQecrݍ{:HLo"mˤ0DS?N2}x:޶f-P'7]v4je)*MpY5w T\Oե^&$Ԉl "`-U%*>ç-."(|bmOl*+AOV-Զi9:MV@nm&7U4zkp\2vXQАu]^"&@ֵ/a:+0_zq͊Ȍv륋h)YI؎%//k88v8$\ͧۺ_zoZnښ֐2]~2teKeQc{{yynou񃷵i 8W=FTn/5-~+]^>>]?vR3xK}i}(zI}_WOfa&TK9Uw_T$eO -^w7-ǧrL"aLw TU!^רL `Sat^F\O(w/hUܕ*t܄\Z&oFd"$v9F=X֫z0Uo0OC\ڼTZjVoMLzTUA T̸sxm?.G/;&=[Jx4M[Zu Pe۲V7S&əErKߞ/l}o*vSR^dϞM6)mk=wwOv2Mv_#fsIdm-UNzT\2:Ϳ^b,RL?)E;r^z]]$Z|wٺ BRAN;b+q9ε뙨Lܑ&8*"3MRZrYp:P,emPK|>{dg&2r^o-%_>v6[~+wVzrm۲)=G1v{|jf/&Dˏ鈘W*g_Ɠ 8P~c*Q#d":' P$>b$k(N`2*Y "u83&SRl\W6n[:Dzs .RIz]p1QU!bku: ,2wǕ%?>3* 00Aƭuj=IA`/ ؍2|:ǚ/1MaO\PL5>;r<` "CX#'22Ed,e͞wd|&aЦwz@h;®%G { WˀүL:4 { @VMs\]7%ֺj^c >n ( TTa0L$͵o^J]UaRUA@:>+SwdN$$ HcE&{5D"keٶ5k\>T5WTAN19(TTJ2P!0]JE-# 3cֈ}XBJ,[UvՖ$Q&aYDL2~4S+-DKGĽ!!HS`d9LJsib> 1KoH.O nU@|Q9nL" %ErS$D)P^dbW} !3(VAf y3cR\[T*2FRJ$Bv=);'_ $ADdzcrԊ;\pb9g'T%EI3G0vpw7"zzPDm,=ctJԌ8jd$ s'ɤDo^ 6M#cNd=bLfPTKl$zr<3HԔ,T¢SUU$w/!nnGx|PDrw>b &;x۟oY{67Q6C2ۏk'L^wk5PCQ|=~Kq+"hQcGdh(HDr9%TpE vH2qBTDXEoN Us|ݻ]#;+iFaEH!RLfܒi@(| H3G!#;HaG1aBT aYJmHBML5Ȍ!H'=Vir@Zq.yMFT""HP(" IqfJ|넞"FaK!Xqa[pP޷P!M,*<#B!|q#EHPc衊G! QH2Dnj䮦$DTERbg0atIh >Ak<+ 2@Dfb6BQ CJ&UTM=f K<;k!cDX H&CPQ0TGJ!sg-W_4eU`7gNI 0!ƌa%A :cFj0e4fFF《x|%nL1y&Ag4`)27 oy~ @Nw 54F=_ɣjah_ |=7ƒۍ$կ̝A"I"3ST2&EErqP l3Ý"0ĸ?D=jut8GމȔ51RDUMQWժZ`0Zò<%ZRZӼ6p\>㧗ӡX#ܢ< @ZjCWem+DD(jӬf2:H.;!"2/tfb$M]Lr 1LJDH7]7ܵAG6J0SU 2F$"o<.Z# 3A~ǃ#9ɍ;JԘi: 1,"Ҫd 0*RJkԁNQFlc9h$.sk5u`7vRewp$ANM i"_2ERM"6*32CD\j1lE@OӁ{WƁ7}U䛟/iuIv}#wH'NM0!@=`35/w/v@뱶Gz<) >{: 2F5.þ.S fc6\#- DP 1-Ly0 ofEzfr X";HZePd*R0LGXsb|qeD FF$)D""#LW0=P"PQgZɞLw!ܡl,PJ@.#BDDAyhEtlwRJ)[/w3P+wjak 痺mk{1\L$dk[vSdQT$\f&`p<ؒl-U%If=:\ȶd!#)(][hSW}FIL3wn,f 2c j&"SAtyb|LcWJ0P(dV RG<)[fwio& :kBH9XȋJLztWSU{7+I}@D<`)ʇhjLA.d)QYjSeKhC^E2fjL2R #>E3RGf#xF{{B}X0E~O{8*w:v/q<܇E6MM{||^G5!wm[9Ͻ:u_x@cy͞ :#峗)K[o"όm`T`CM4@`ܕ}GGB8jUcDpc[g #J)c/.?T~ѡ=f%s;5:#xlбXu1h~3=bmB2i=d{Ũ I $e8 j-19IR3SBP.a^0$x%H;R:ena*KuI,?]#ۚ}{=Up766 h-̀ !![BB <1`  1i!cZBB hdUuuydF>ߑBcGaE^jJb#u@cКvMFn#Gb<"L5֌EDF T,2Ơjn=U4D DTւ&43 SLQLf2 r3bXIH\'eDD;L5#3+h#pt0$`_Y0E(1:A d]!HATktE25E0R2V7s9h^ xEؖeB}ɳp~.3KR3 DI"3JRˎXch &W IDAT01"d#PW$#ԜUdrA Le]UUFLiF'WGz9dp&'B8kHf'g')pOJ{̞Z?c|:G`,+B_B=Op?#iOQ+>. ddK+^b&' &IWUQYt׾ UYI&TH&]9'UpBUdU$w9K}QEf 2Dz.QMԦ7dL5u*P,Gs7L3Qɥ-\,7rrD'\0ĕOjMr y-8Ȭfj[@&Rd-U$޽?7.n[<4>­XkK3ۖj G^zHiܬ`//vy@w/szJLd  p/$ ѳHQHe $@ h%1: ҡb#IJ1Ҽ(/4ѻ:cԨF&TT0:f f:z2cָCb60trcH`bQVyRɈh[.fQei0޻#暬k""0rYZ!tr&.?DD., SE*?id56A7dsHx@A6Q05ȤN'@#I&,S#b"(ʂ2Fo)̡124/<{U-$vC|ݖ'yV:+:W&L'yMml9tK|.N9,Z(JW}pHdDN1F$eukբ@TjUЩv w[3uM0ͬ9T5P՚\.&QH@2QZ YكԬe@l%Xຆ/[3MJ5Wr r&@dCFɜCĄ2:Y_P"ZݼtJUQ15R$kaUidd bՖȀ2B8Vd#U [dT3h1水4B RiM%%-iӲgrڲ[b'>mB]8P2R֦@!HTj>#1UݞL:R^RA~<.|q8W"Ͻ-Cr\V?w_m~a>q'?Q͗eS)%q^]3f1Dn:eY\$@/ضLPtL`V.f裴T"paiYPH15S5L4S La&T&ՁM1b8?G$)ޤ"•@n6Ffd 98c\}D+ID:09p=J"VH2 %$TwtHpȢ# wx_diDGvfrd{}# 6A(FFR$2u@W_vBQ[N75ThaJwA>2%|VcΟg8ZOvɴ*;@1S'8? eknxڷ\cvrdz|~BW{W}ԽpNF+H{=Aٮ'"!AmJij9kpBS^; 펚z`FTMl&:$!4á(%B#>%TUHM%DoB9@TF dΩ (9#4)2D6F0GD2 mrv%zmMT`m۬Yhͬky,^H3IEMX(T1VE>fJZ-mI/9O>[K?0|}~z0fd8Ʀ"MdjXO]N)+TR&)0h߶vXshtHH "ۅߚ8G*B^P&B5@ANWT0 ̈́1*!ZH̬ZL"cqMʖmVqVT[Hmid{yU5HaP#*-J|)PlQSdt7-i JF4YsYLQg*׬iy<!}J@EfD%2ӛ3m$5k]W>̄*Et7Pm!ova2׍sHĕO!o/o\/"򝟼u9._;+26gַ?݄ҏ:=1rt7\N͖cVA(6|ui~:EO@v̬ R$곬G UˮDǤSZ"&=, FYר0G]p#frCD|ƔL>]bnշ"4ZQ 0IzQQj"&QdiUF\ Y0h&Qz_aD@CS(&T&)ZB$@S#db&5Bo޽{wyCIJ['g3>ifb4@`|"*,4#&:S*7 lpY4&|L'B~Oy2f!$SD\\2G 9f8ELUn= <7! )V6q z@UG 5#A)3#咪sz6H. 9xA[QL+nzS v'%\H)(cBeq2`:Ff3 X/|'?X&?Yn^}Þ5:>tړޫ\cJ&=W|9WoTK}OνR=ȳ̖Gd@/3>q#[/)`ͶvOE"T,XE oo\2b8.B9 nR*LC+fEQ}L>Y Ta s7s<[Oi55sqo.lufV<,Zy @a  bdpp3]Ӽ[ǫ"Wyq\nZ{yĩw"tc5uxfPYʸ[,i E*âmm] % g02"Eὧz˶p rٚ"hS`ٖDz =rD5 ͗%ʡ(J~W(NFjaLDe9֔1(F(DXjt#0%(LY$nrX*&3"DM c NL7B}n[*%$\{V@2&E*(4жP(Y#_pk#"U5c쏜*LEly ]`U`FBҥbp0,MoaB@"aVSM^1O7oje@Lf+ePQ_('Ϛ_,H ]q}<'_0W-F@ ),HhtMKJqAe'ϟCh]9C98?P׈x8],Kφ2֔}4[9{ﱬ&*ck`.n9:2!zOSMHsaflmM #)sZ"0rHmLo6um%$JVwBUDӬg@Yi*SDsYtuE6s5r M镕T/sBc4ITiBGaətsٚWN1;o,*DDEj-l|DS6ܝC:xj~|y{/q9?<4 b8,Ӻ/ǿ90U;Oip\o޼ү^؇~)s8yTWBDK*L2P )EU!b(y(,A^*TwYw)ofMDNrIVʬiZ<(iuCꈑhAXcH1Sj ^K8181!\QZ^caVZif⊵juP!ݩeib1jJIa kEDz|NBd$yD۲}z/"yFڪ'z|֕ǶYϞ[R+yV3,nf]eJ11⊑9"oy"psFV)fr(;e1p/|7ި_GZSҖut/޾|fw:n#>?/?oo>_w n2.ۣ}Uz_݋Wmsn+kUȋw?F`} U322SȜ"!*2BM I%ꄉG87ǧpUU./eBPͅ%,BM)ÄE*L=a6ITwiQQ#uA*3"C9b-QVJKV7d5n U`Rdri-"f2@ YXrUրZJ &/n~k۶>(ۦ"l|x'dDS5Ő r v3"_ߺ߻?GW`"ýMKJCME1hx!Ӫz5Ѡh#\>O ̝M'{r'Og`.ICI +rQ?Yv-z}kݧIŽ{tq$뗅oͤN-ME"#jn"q $d]TץִC aP!˵"bk J.{iSETBM@fP" HB 2RE3}Lqzky)s\XbN̒4ՑOp'k IDAT--K[2Ǻ. Ӂd$M+T@f@ *`e F6Mgf,mCǵ wrs5a̍6!Ha" u1!x|c}l7їqi\7q>7P[[?_8]xw`k3*5㺼}{*U-Ǵ'&c%VMj}"*ϙYR~ICT"PPE c('SQk P2fbw-"yh*V2aU1ja*W{OU`9DEʴ"Rl8_మN&3iJ7$OZi0䗾9?{#<#?yW]X4HJ Y u2x"gh&{~'V pL(2y]թQ"fuM$GyͿs@\Eʥi|Z !cn}.OOQTm& {r6V{7A&Skȯ>(Gs(T#=#w7n2\Zj B^ORsEULG0B|if ՘L.!Dt( )u̅XYr*jUP鹶MO#vJuեlr!15eﮙ@)JѼffS/-jiBK"uYf43NUh#㲝?՛`_%2ҡ_gn+}~7Ư_9QS޽X?]!f /qzo1wY,S3 4{LD4oބY&b j볜0&G 5(s)b;\ʅvn1!k$TJ'TA){i"f̌@H!i5~V!pLHְ12UU@(M-s#PE f4Wd6#k̗q޽v 9 teQuQ3|?I[rjp %C>9Hd@R"Q3lP[?8LOK@RMTHJkE$Gfmkرk/O0G~@nvYLqc$d_ĄhVi+/pI^"q|l 5Ci\‰vJq79M!jHN_0BG`UfLj`faW0j0cA2"J({:1G.NDƲغr!DsY[Fk2)cn/qo#f9|s38/?O+_w>|/߽̌^9CŨַ!zB۶QHmB(_Y XW=@qӶbh q6.1ӭCffIVDM1pPa)&*DsˈBY\u#`P:l$"&3G`xƠ#I 瀮Sz3,IJpDI Sv ś{8E9QSq lQe1b*mo} $0Slj8OZHWZ mA=y?=G1Ͼo>O߃cL_m6Q$N:Qh cLG%R̩Fp31gp95Pr1{bLs_qj_ d+O\J6<8XWL^=5d}¸5~HlF|iJQRyۇN,VeCv$bbY6vδ Ӷm5˖n ޻hlc\T YD l+޽}{ysH7>F UxJ@8 m.'ۯԒPVf~mP6'dU~uМu#!h$O&`#2.ا6ZSkIR?&J;ծ@#3cJ[r*dzLBE"*8^}dNɌ0u0,f4hojp};ձ?sGa"XV۶LȋWHR F::Xkvc˽AGjO.yR۬[<_q謟~uѹ\a6N{o ,RJV/rp:&114>QͲ6i.YnYHM LwEM)`8L>camz޳([cXԬ;neAW.4H3},0S aFL֚ F ʌTe1fy]'Yuu1zz&H5%з<2,`lɥ.1ҽ)+aI2\޿|󙟽taf&*؟o77T˟o7G0oCkN`i\/ǻ8xy8wkt9{0Dl0I"]$e]>{; ^}9W5-X>O1]5;} {zߞ0ͤr= Djx%)NߞUQOy{8PڜIq!;wfr⾆NIT}SHF$YDE5-*Q%g+0(/.78! r2g>I -®Ns)?*a /oWoK˸9zܒ7?Yk7%Ǻ[߹{ɒB!p]Z#j ׋ɜ$']0猀g}M#b[pТ Yj/lf*Gw׈!©L!5f^.Ͱmp Sd} gh0'霥 9G[,/otm il q}\\ըu۩ן+`Ts-U<ƌ]@WsMbոĜGHF$՚D;k,i>>W1kw(N?{0/Ya`|䔗"_,HlԫJ%h@s +M2t~aj^66ErC(=PM7.k#̤DDYيHRְHVPU!.c­a v'=a:O>3Pl™Ys~EO,Q0"j.! UYК%9Z3WqA9y^3AՇF1DFLۂQ%@[Q$>:#jā XјuD&enwO[7Bb~>y{~տg?hk\.և}'[Ɩ#SGF8pJzߺdo_+G3懊/f!a`L9`MȈ$#`ME ZQ0V&Y^$#EfA58ubٓBZVi5FC⥃Skj&dqT<0#H;ZaۣW=vXx{ÂŹ4DfAEsښ-K[/ܗ y>ߞ3$IǨ0f2#II`d'{ן}%$˶nCL#oOHQ̉`Ɵ'O܏袺Ϻ~ί$+aem^)|nb;tְz%IXKR1=")^0fz)鯦ҽ]ߒP!]WUtfryR;tz f+3jy[o40f3[yyVN.:CI f*VɵS[VPiu`2S9+ke@@*zÅ7X[@s1S"pLuzq)!&n*8zWQ66bؽ$Ka$rMP-vsYY$[!u-ɲ鎲,&QTB`ms'|@>q!o~~w_ø\狈lNe=|> oTGEd֛8 _5sҧͬVRf`e{a!Bd)̸UDDEGue?u :_KDԼ4B0"Vig^%IC1UQ7?}l[m?_p,tKt&Yon4?ww<>7)Q;EAh;@tڞOA.#nvca,E[[*ͯh+S7#˕)gS~en*BRYmiɊeݓW'Yl=ZkխijqXlY 0 JPUCzԉ:)dݔ5g@{+1&(*Huki!F1ѵ)jqd2ދ͑oޘN҈j[έ3Iaz/e9LlS 6ífĭ~k?/_JYO$͛1,qٶ*&S8/(9fKdFY0 O^<_{:Aʰt/OIw-ڸ R޼W^ko1K~~x⯠Kɑ?+euo5N'I_}hicdTtr*ж Qk$J5iNS" QKb,AtYQje`M2@lApTkRH@YW=^U]5Rʗ$ Ksg҃RVʐTY e dDmHr)J~ۥ}{7VJ]"5(OX"ۧ'_knnWrEo>{=/?y۞2GR~7otPn0qD1BD(Sʚ !ִ03$bU)BZv:]\"6wkbbJ`YX\]íBe,Msi*֊P: C)Lb]-VHȼT&~h̀ X3DD uI41 uffѭDðz0ARp>)Rʤ/"Elˠڌ QN=)ޚU\qӖœЇVA6Ӿq۴ C _?$*20QdO!T3=kmB[ƈb!6`B! y&EMmJ &Drn3ʾoDW`0@r,2{_U/ܔmni)N|28+>,ELa)= lw-lc|T M~><A,]ES$X"fTf9Mkmoٳ)d$TE!TnC}B_94I*%+*#U$ OO7vaHPk>R7EޗHd"EQ YTabtM(펪DD}EeDɶXdBk鹮1F,Kq#]7J3#7+z#㗷,zo/o߽% n g~~}z<=\nomy_~_k_lۧ|Í-0ֶvF7LJ샤dfeH[lP1D>1TL{cZHf q>ŷhtGkR1қ &- 2h2hCۿn80,VD(c9j76's;*"3̪+LIpK&&b,X ij ,b@`T޹?@3UTLz zuar\Z^mQ3=m/f@nEƐ$:8"].u-A 2Bh 퓚H~1&kN&}k mMfnٻ71H`2"bUP첚RQ&8}) dڊNhi+耯wƮ ̡sx~UI֩xt]+wҟxxf«HTEyɭ )>ii&b8>ؐMm._4C.+|Ss1F3:83V˼@#412LQdtRtrYݽk\qxsAמmJ@^mT$r0[2`.EMvºIUc$Pe 3KtE{k-#+NlkXL۶J5Hq-bCMMG %v]&#ǥw<=\ڊ&=yV?O4ݷW;vHm֡M#Ã&'3][p+$O/:G E^EHbٚEx1d"Ifk-sy`sd?Y0ɥ - ö́tۦnusE3plBbEb@mFU82Iy; M1/݊-A#jbEyЕIo>ƐᡋSR>'AQp4xS}aVlLVQP@j"}P q^ܚ{`b,eN h \~c{Ȼv<.I.zXTDǻ"}m}*z8E^ EypcW1դg5(S-}*e\w9.ax] ±ׅ|IdQ;K~\_'Z[^ ɬE$sa|70W),Ы 3p&ε'`Z7+Z/*!;*'zsbciҜ:D3iJxUUFRξ:K 1c1rPCRGs HM<`G3Y}]i{j w 1T=+)(f"HVɹHH#T3)%d[n"!?&AR*4Of0EúFtmYzB"/^ fFy륟~:mY]}T532y:氾|,,o޴%ެ3\%4z m-A7s*o=.|>u4[U|>/q cxE[&>\2d,nSF1=ASd͉QBHsnB3EFSfҚD@jh^ B=Q)<=+YZ&~@u5׮ BofYRj9HQ.SܐZn (PA@&`#Pq P PD07QM!PHN^ z(N$pZBT$L5]E"JTQfy>"L1H&SiǰEAKnݢ_?}z^}mҙjjQMGYM B'd`W@P/WZW!*Ib?_ZjgPIԵUS%;yyނ4{ wǨ ]q//F`3{ģeb.mTYZQ$o "s]o֠KӛC#Gk("䴁/D,,I19IQc;cHX̔Q•m0pLb[2pmؐ#%4Ow##M+V+HTtsc7&8rCH YA5ln,c+V73H4Ӷ(Le,m%$R uI1!ZJ-ܝ1ÌKD"KH<>?w7o~q޿\l85i-JdOD?_x8o~{5Ewo<@%6OrOM~wLifJ@UbO! G"{uTcI{&T3:9S%qp3o]Y uXꪰ,)3S6wxɳ)hf{Mij:CNsP SuN S)A-GH3SMU[9le;sDAHB*@X/|^=ɼ t q9Zs s%br8. L^}lhKôqD,zc?r`NUn\߶L6]znn-hMJ[gZBռ!<.?0DToH\%(;esh;V#nb Z;?z.s_^cׇ/my"Su[få5c#G 8iE(qD,wvޠwoLcX3@QNхz8?]~ϔݿ:֚g,3sFLDfšs3IW'{jBFkETf$2 Ph y.HmE2u߄Q+a~vPzЫo7;e ^ r؜jZc@"A0#Ouq;XTw9:QBK!ش'GO˱{w;Sם (X\H#ܥ a7Oeif.J-`[eX;2R'7@[kM Mmq1N (sj N /Zmܮd"̝7? ߧ}kѹ9`ZO})Zh_7Ō=5\xͦQ9HW5w}b9c`FF$-#sFb&1_.ѷ694pL+ڵ͆x!waQ'(HFp"04v裭/6g_ٸ(QDOI.OW7߻a0z )ՕT M*1^KܼV0U!(H)Ƭ; i*Z"2Dhc+,cɉEI@_JZ]|"ߗdMk4m'V'Z'*l'Ry xNUZew2ŵ|w~~j#<Ƴ P5A- v)T>C[P!hLB ̶x&F'%2K}cLj̄<`fkjKRJѭ粘o涔~\KRt5A.n[&G&(.H@ڌ#骙ncHE$3{HNUbMRf9Nd̩bx2i="_bsĕqq3IZ[ E>cJmIDٶovM.L 7j|,vbD\?ݛM>}:y޷O~7Mլ=~<;bmymQUNq_s?nLJo@2pe,bb:Zhr<͏oFQ05"NѬAG"L3͵VIF% c„*& jDBS*uj&Jl:KTEqR 6k>̓G3E4jiP,Ž`gcq8"RܫHԃz3kGQ%1=|ט (^ 'KoQ)`V2C1Nl2%L/X`"WR<[/FvIOOTq$B HU.:.y9LHLLJ` y 0#Dc7I,vMNEm.b"221$L(4|Jv"BJ0끂Q&kՐ2U=D 4}24 t5rDK bD EbMj%Yxr!R4KQ@|YUmE"u7wLIȸQo7;ww˸_/~~{&L?@~zlq>?o\8n˰/?_2Oe{nv]}z.-׾!HJFɭČm.l73kfF5`YL@f!jnjJ^btS6,5Pa) {"K5{xβRjQLvqӧ9*~+* #[1Ȟcm|u ěؑM7Ͷ `T0\Ź̓q.D1Z ${MUu2feؚ!R?!'i t/%ca([}!1qļ@vQR8jL*7$& 8>Q$Pas0T2gaAdRB UE/TMEQu&!zUW23MH=AYV-w y4_mclMF?.=##B GAQ`Vj0Hr!∄xt,H1# RMQYBx]:diCBbzfA*j*G$ࢢ>"U-rTHd %}@I3#0*dRFfփkuɦHXyDZRM#:DLfy1&Xy:LA: sr;opݮ{mw7[~ջ؜hOղ>cߐO ˄/tW]J;yhZLR*ܷTu}) RM`Cs hBtoa^G$QU{T0isn2QZ!I PCc̚B@EW6vHƈMIR;397d$d'eN,IU##{f+9ϧ{?Fړ}o1ؖw˺<ٌv5o<.?by|^q{.=<1n_N}q?NW?5>DICEjݬ @31b2(X2tWחg(Tf`@eKr~*@k0煖W~@n0R25f\uNJ( z"Z IDAT'wTt!Fua+G* :L$%I)S"eBDE6NE/rnJ>۟>tOzWV; <+h_޺2SSH Q()@.9[LkPJY*`IRإeE!^' ͑[dٳ[ڢ?Ee,)DeC1K׀$ncNޤj~lrWPE"M^8+WKΩ}Acr ָskKᚉ./l}ȰeL$r8U|İ(9`- 왒S"ɤ2fn S<2b/M*=V]CcXeN'\QOᚪ&"#1")-)0dXӄ5I(֖=C{L(EF`Z>8B`rH:iD1($lYr 1)}SY$2Lɔ4dI"#3GQf9P}uYL+CAGd-a1m.o;ۧ 1\]o|v\u=X[c9ƻOiM/o8>6a[W]]Vr&lT-TD( )&6"[P7T9!~BDkQ˯:&TrUk^p'aY>KLjb8"w-Lw!#Z!  AP"ᒣ,40X BsbqYǺSq=^Z۶q</qxxfT4#߬_*(.Ogry#zfR*zA֞?Đ^γ5"d\y^Q s%.Z$QE*(>hapndKy1deHHswѨ0ePԧcIbK}.eMF9u@zb#L@nB.j٠^E>-!{jpǧDŘw.z=o|jC쏶7]۷ou]7?Op߭4ݛnↀd]\pS3a&[j,Ab*WD`ƑŞy [-@LJua9`jO}"9.oRKReد';0!@ LTk2!4/FB%*ˋ ѓ"Њ f ԒE%5u uv]5헿x2Bx>_zM Ŷa:ᛧ<o&}H[dSHt*41z=Xey@A1>\]0Mwo:0/HrHIVQm9G?z&u57 LD`D@Ƽ=BXL{T9@AE lÝe7_ou|~oxs_?~ =D3"%Hk**E"z^L,9*EDƽSܵc_gqmS z1վO< R+(/ڌj}m%aID2Lɩ>gQ7*9Ȍ&P' lh܄SpQ4@GD{t %?yz!Y`SSuT b¤Yu1ı`#3&3R͙}E)lUwE$1_lo)7aR+jmwwf1s E]K]@yȅJ-M3RmBN}MZyWgOk;3NR3$2=&uB{ʶJv&[4iTdXQJ/)q[DV4YeuP$~=W;w>yךf5qfgvJ/NWĪLe*xѮW]#38'q R mHZ5lX t&0Am2dD?M$N=Ha8b " X8Pm:O"$&9$p]D ]h+yM+4ɴad1u}TK5ω=vhfڣ:1>PjT*jU2gpW:]}8ftM^?=[9DX+HRUZ+bqc6J,,XB)ݡŬ=7f)kdeC5XMCu@`;kJG1SI#wTu%y4I)^'@nJ {ݑZ߰Ȗ/Xhoxݾ>sr?5t()8pB"4BʵQ(#E1M߁Gy@GXQ48R:Q A׎ꃉFj-U5cwgj̢a@LL!w":UFЅj\J ";gDWDXO,n>MN+i F[(1#QL=>jCޑ! g_Ws7gZmLY,ء]- Uj1er胂g뎢`KE]zb.7wsI(ꑥ 9]3 |c LfH$]ױ _~E߿K/~BX Y ._JC%9O^3O/ :}1G< ;ۧ^Z84/M)0ajHgtN'N7jM:L9(/#_䲵}o\\LFn@gB;[[&ڿ!lALpe$9'J%-'m\90KWTE >xսv킝3ϯէ\xp;5/ǭ3`\38Vc}lh[yMܵgK <LCBl`%JK'xCJJ 'd~DBK wucR $≈h$a:,s"RTHrڗQJBEIciZ8h ZվzUQ ,0P*ެZr1R0 jFnfjj.uB4\;{5vMNѵz]4oˠ#NI g^4^t]UE\f8]At27`Kt/`y^@<JfcOVC`nduQkq#˕,\լPs0Wsu!E%Q"uZERj.q, ǀvᄔ 28Z:UՔdhq`$dNI؈jPGS8X u1!ߘ:du9-X;/WWjP4"n,W @0eAD4zcU 9zO[>zH3ו?!^,J;w{UcpO6K #}:Ax}_YI-" }3GE8'.ZM继K:v&+&Zv%EWOlU謙:-pO0j6f'DdN[ Ӄa:0vX܁Zbw -a4 @I,Ӏ"p&1 dϙYXR}σlxr I<$&NooV)lEG9iG +Ta NN VP}P{QS$baš*琋?%Q3T"2 jn4͙y9yZ;YR Zەm:Mӷĝ{57PĊgi|H@;}mǍ ',$9IjݜvԿ{uzW>"G `N( s3{}!77sU}jt 7ZS܋kj;%<-)*h<aOi ƨ|`t,,&U1. ZCD5EE`*:toL",`1=zF@0NQ׌$?Dx0%/S%'`W-yǖVrjH0anCQWc6LU͍%ƈ?buwo9c?s)g\s ?:| _3˯x`g}cG/xM۸M;;[z/_;~я>#D!$!S#7a᪕(2v9Lھ$F{hJ^s}W@LA`땑6{ۢup,jRmVJމFﵯkLƑ4AUe:/l/ &T՛ǯ؞)̴8^vO5lDpW歓G7u%@{BvF7_Ƌa8!H[@b]=. x:osx@Ew9;˂Ҏa0wt:488-XKl%V)-})ZlLm,CL8 }Ab~>ӝ-;~j;?aQ06ۘ0C}臜JYDU)WnfLXUUdP|Vv^̤Nwnvn_q)^ pq ǁy].eILRx35DQڽpbD.(ocoB5:d<ݟtTkZhynEwf5D!   +7ZNة^O:\ mP"°֪ZlDaoB{R [NBg 0# SړsP3#%=0-Y.8!$fPc"";ZՅv-3JsjaYSir3g'_l"O%,Nxõf-ܤ1"rYCl6EafgN{{>oUkoWƛu}=v/^,`fkk'gwaߞa3, 1'QZ뢭+U,\S7ҥ&Uۮ[PF#AbQ}W{tUw](yzZKiQ3UsΪ%TH :;1j[ﶪ:]m}fܺտdDg}ho"( 2appf#r&2s ;3<r BQ Tsl!BPw(AP# q|`/ u:8lN:>˭gMְ݉MF{Np)3:p ܌Jכףst,Ԡx~^SK齯9q'wq.}.mL OBUt&#H͕${a, `|]pU~Q|2w;F;#)'- }vp]@!L SO 9OjM&3GomczjxCwr*;,p^h`g-iPw\8yӘiyENoϽ&JHh4[,b9̓$U" W03EQZ^gғ}kϝ>Mύ :^Q5᧾,x)sA$:RlO"1ybvP(DmDٮ9P:\6r9NT?s?zBi.kk)7RԶ31;ZNNBȍy;ViCXļxk؈)[=ץdQMØCkwd2S)k;?O-:bOsKpɥ{%hB-[NL<; ")YPE{4kJki?Kd4+PܒvEۮJ;/[gh4vZOmWVcɪsTڕQוTK6$ٺ ^qŚ>^'A؞ܕ3S1OMkKϼoMv0-P86;D*$ ZH5Nj -3f(Q2Y*"#V *7b"s3 /_֯ؾɮ]}}P]Cw.+(oxӋ\X딁( 5(TYM͗Vt$E÷|8BJD^eR r D6j%"5 bjv7j|ej(oÙQc'g:HRsUoD""/&Kv7y0N$uSCD5䎔r~C/.e=Xn:K3{U+_w~ywYƴE u`&N XԐ: t2wI9W}3@inY/o}a|qPxk$;P5Qef*FQ5G UHN7Fڙhm#9h?}c{˱u+T.VzWO48D VMG)24hc20&rd1U\+T%ɔrpL=TU}㒘58mj'޿rJU!nKN甚f]m(Yԋ S"UvfˉoҦ7YfUskAE#ҽ|5\׿o~=_]wO~Ck ._z^y͡CJz}c7>NVƠ B v5Kfj͝3wG ܷ2uJ\JvYowh8Դ]I;u+ v1Ƣ+-ZXJqJ%JJrx[_Ʋ3;}u_=zaSa~cvvܵgv:V.v*G+0(q Y+G 2GQUja,syc>, V 3#dN-C/Np"W?gIԩ?אw]>ݷ|mw8l^a6Xϸ 9nHRJkH(kLPVUy9rY-h52~(~1SL~'߹Kٖx5'v9NLflVDH9DgF)zMI١pf N?9W8H8 IDAT FDWx=g8xA_r$ HۏWr;d7zDw1~E U#s=>xŃfObX)ZK"T!]z9zP:usfY7z3XQwNyYҐXcݍGݦIK PX$ b.\jHBp1]$ $ s~5JlN+ 0ǵv?G]{ˑ[?6.dj,ӕdwgr[Դh&AfD \_N'hϖќ1s$\93W 'fwr׽U_~'>p|n Ӎ&7洲W.puzq`_~oS~d6ۯՏ|og;xԣG祗oٜdQy'"B`IiJ;XtV6-dwVۅf݁gUvmJܗZ)9瓷6w^\XsU[;7/lGڕvc߁yGu= :U+zϵGn#'%S-F kp[kN`3t=J]zz}y{=Tb:Q{\J8~RhԪ6>j2Ltw49YU[pO?nRt;[ױYj' Ͼr'YT0R[PSsJ4f$ sffϙS&|yx=O(6qaa^+!LjyO90=^W̿u ^zZ5`pO&iΛ-DpWu=֟f;e9FʽSOx,XQ8՚@W&{ s:(FFVR 2!S(~^7_Wګ}y)~0GQr#.^OBSNL5}GT(a[|;mDCJ|,z㯸o0W=[.W=w3dj2]IDdnm vIr0UEMJD hVKQCd,˹Yu<Uf bҒq,/x=JD? wְX>s4~~GR) x<;>()2[ CURf,";;mQ5Y)FSs_;}kbޖZLjW\F3ۻLM_u6U;Uޙu՜ I&7EܘX~`U}FCl=ݭC T|y|{=GWݵhѣvf4@NBܰX[|$`Sm27y2qLc{h895\mfo(uKV+=yp\c/U'5y;/b(nEM|HrFfd2x,UՋ-~]Pdsޏ+Oރ !G/|OU$P1!MBL*䪍[vLjEK|!oo?=;tUhs2& ]-'d<ɒi8Ir6#&va!Ft:߼u(moy ގWZ-yRO W+̓8Ρx8h8^U1_n~潺})F+=<oaX4ݼb1:%D!|M=R~Â7.\=|}V9- `NbS)'2&d݆=Auo8}nk,][HѫxtSP_+'Kkk+M8<|sûۻp$q@ F I7w&'JOY(4M}1Rh}udo V3'SԪ}/W_}7?Ow>W_uxֳ^=y}}67qe{cnGrnf``!.}tNK_=3z|kwSINsUU+]]dszhu-Gu{tH&hvjkf4{mD2Hf4B㦛BU5\*W_om'?0nnebݚv vTFF"N2"e4* bNM6o G[M#ei;PtSZNhI|/Gd^[;:*Jh?6 m1C썯;x A!`U7}+167kki:}}2M'y:N( Α?v}ʽxߩqz=A bWtqD2t> 7. pWX_r$Y۟*hODZ;6qI+3Mc mqLRe$ ׊%',8|,bxjeɨAUk""sgv"?g^[;^? I{ɷ9N aIaNNfF4ENPVuUiҸx_PyvΫ08 u9TSǁq7J`B'fZcR 8Zri8'yw6G!A a/.‹z,#۟k?ъ1bFSL(/OF!{.=cZ(tkOGh{;e,.^{/@r[VZIg4&K ;br^_5.{ղ3{m?M躝g}MMeofT'feiDR N0;Hk!EimIϾhLA r$lٟπjtẽŏdu$5pb+SDzmƬi%> {f՟{=dM/H]tH:HB~Nk&7?L9)jU%Zj3jj9 +"E @jB-BuFz)$p N@,G5)妑>|C^z~.>x?~яccc߿~'>#}g>G}V}߽ίߺ~9q Ij3#olljڛjqD}˴LF\;;k:AJ&hyvM'I'IYj259{n51D }Lݑ^ePw4ӱPY"()'Hb$ ç aeKfTk9`$.p&!k 3SR8^쮄5-;"*C6~ΊǾrt<-0x ΄=mM03N"5f↑W8%&.l]/>Ym jt̤Y'R{ྲྀwk,j1(C s؆[B$ 3K)0/^! i#r ± ȌٽJj$` 1S%Jlh~.6.M7P95;?_|o7g("R ﹽe fBqHH-Xi)QR n\zV;g?5GFG=7ˬ|=_Ki"3<~`><`y<aNkazw}[E_v,LP)|m0-i J&b,o?y;n4B* $F+~>gOszT DLv|-*]-#gx_CfbW'#z U۪Kȴ֧-˃o0_Fu=,Z#vQa/[K$1g _hoTs@_isK 8u,{?UG?q:9% KID”R| 3HxV/mAV Oѫ19I!٧nRԐD$Nj2bۺsVw E xZbaid׿yOy?P ׺CcQrbX-تU뺚Iהg§^y`}[/Pyyc)w{ItGVsY 5(Ca1L>{s9 \li~u{k= Z LHw aO q_; [N>]mNݮ"ed^BIΗ}DgDPx84w6JH& H697 [uW"bZ'f>_9-Ik|2-:U_߶x۬1.n^O. G g}6v784&!;Ob@u=&ʉ$}gC#ؠh䜶wsnS6BRfv s aQ؛Fۖ]aߜs9v%P/ BQHl 0aNHF{#$ F0 `cmX4P AIBBUSxռzm{9g~̵Ͻ% FΨQۜnfo~Q?qe_6=&8_bf"qRT$D`f]ε*,c 7#|K a3WfԊntx|OZ;Ѱ|<]&;^eͬ%_c.Ib5 'hR&@w_r/'+;R.n^?[{.e% $Œ9\ @mD(* \ܡ wy`nF Hf!Z&oF!Lbi$iwSI x&*E< q՚s,gi\/#0Hurs/eF8'Sy~q"9G*>[SБsn~ge/^֝V ͭRls#*,:5U0h/z 37;~ԃȭ٭1O/"-^-dWMu %izFW/n9]8% R_Kgv=ndINR8tzDwV!jU@ɍ75|/WW{^7ؼgލV-J)nu5u23+6r:$ta}Wx旼a.'l]Js FP{v~*Fٴji \"j,rݍj܉A _H\Ϧ6iH( D pCa\Ra*IhsfKXIV5հ MN=҆P– 톚5U/Y%W3$^ r`& #E߹U&Fq# Yv!.9' H2S35 3SmEjl9z .I܊A &o 3KTuL4çBn 0Iic`PnjmHzDUnOF4rInMw_9:~۝w_]_N7ӣr{)!J YncuZ"r3u3RrU7pSi=O&?j04~Y#7"bIN09\#d0 M$Z# ̻YF,?d=$ [;:ӕΛ33VTr.OPj&,۝ItpEwz;??:טhF+TPs[rXysO]qSnM"XFU;/mۡ-uzTf͛hcV'>BEG]8A<Շ.Qߧ0$/ eR ol|? _[)}XyCP b_IP=bj,ܲ͆>?yȥC̷8TU߂RЬC\ 0;1O&1X̞01b*BFpqfdVX21%Fw37SIݎHU3ir $wYo6aY2A;If2VX$I"LM@LM$.Sf͌ rbuڐۗ;+?=y?qCwisO"6.Xe!jnjbkGnL/?3/RnΪf(;Av̳R72"K{kӑmTKjL\kb/< m灐MUxfdڅO]87wZZ+WwɉȭȐTbC K4:ZIh%E̻݅9. fnG2Φ /a=+ƆzSޠt:.I^nf#[aa~xl2$fI7`}}%KJw;mX^Z~ͪ&kj!gUI]7O?s\쯖8Z.t0 c˯EbR.~dLEl6)fw̩tb{{ S: lMl{qkH2Tp*H_s7ޞ,2]UZ-ri*}XS9q.HE'I$@1O滩߫/|啰ڽ[Cog>ҽؽԇ~g(5K1 M% TSj3cIO3&< reX@-?D7o{s2m;֌H@`FFgXة pv) o3VMIҺ`;i mrWU'&Tbq(EĘL%c5a9d$GNIcMDS5Bs>zag*+uLCrKpx uDN 9B2WÓ;mpCp01 )1Hm· [(@ dMfV8G3{bŘcۜDI (,Ltj*j\tCN#{ NRDjvY ݛ_&n X0$J̽!vd3G);غ $-U4L; k'YԪI܁8ӮzI~E՜x=M6 ե{\֍nDdnaLT'K`TQ]L+ȴ=L1r}r~0'+8+i}I0[RӐshO9*\R) ,k;Z>OHNRը_vrNH BI)DBAqo0L=; 3c"YhơB&jpKw%eak0.[_We7?~ߔ>I&JD eyn.B@3SJn`o^#0EpEbD,<˔iBUkU5䡛5' 3VY4,KTIB' cST*(3b%yUY+)\dT^ ߾קPYY;N&zbaxOu~oGT_*wϭ8HZpD?{S܄&ගuu ]ߧq*F@BT͍]̊cvx53È,аE@2ļ$gS :3 !ƒL3LaD,u$@ŌX[̧ ,8qὬZ_@ Onrϗ~>H۫S `v$B/y!kh3w~ʹQ˧n|7[ͯa10DvN,8͵jH{XsywX7g\ tZhw6ph&͏ҿw_:ow'j , Zyq336S5Ij5 OC?E$٦ͽ?2~^pioϞI>sa!vDZXb}|lݧjeYŋ}3/[l7puJDO$2@*’a 'eTbNo-i\[[ox`{߂ bL_Ls}Q}|O8 c%8q)I &6kLdO)wLVDrj|}/?g&[K cwү福4lLn}팲@.3YVk"Qwe,!G%VՂlZy^&U6ȕdfJ"nJJ0U,1HRC&2u:.j&b\xkh811C"`خh>b{c)LR݀`?0~G.毆bdabQzREOa&"UU3s0N׉:x%%* '?s 8GwVt德ÿ2|Ïɋ26/HM 'W5ef5XQ͋9\c;3`Gynsp=⟑8்$e/5 (5&G hlb)U7i1k+nNb>6t6{) OI[, acp \kIPe$IMC:g71ώpD w;I. @b\n?}  ͗ߎJbH"LE[4#Ff P7ĮM'| SsZ^/7]r9t"ٞ<&v&]*R~D\jIP-3úɓLS'2bDǦM5 qdaIiG" ]UUC: iJi4x;ziFXȒ jS|m499Y9,ir;:Yr2ܡw JP?0ZOuowu wɍ݃ժ*Y:"o&%q׳y7UXn4N.yUJj-DhFjX{sttZoXuOQL֤D`. >@8 `P50̔3Bd]\ 'gvļRK"Ӑ+-(eIcP"%~$87?9Z)9>C(_LS&h2q-T^ kK/}Cys}w4y>-b3=rb`}hKTku@өKÃ!`z:,9gK`O7v}SFwa'B<q;hMX6* P?_ogOL߂@zLMϭ݄hJ1YoـjjieϏv'qr6w+KQ=㷢ڜHqgSaŌ9ĐBTmUY؂b[2K P@JQJBjz{0X@ \dOVj۾E|?¦hF&oH/$ &B.€Hȉzw! c@$c)MH[$',qzB`$q&JF9HYSV4w&Kvt:q5y,-1B3,wwAY{N+6d_=̍bL]422w0A;“n"k-zp@}G]TƊ.w7Ű6r睭5N'&֢I 59[אj0 151sj7b|d21 M9 $lZA,@3\%.LpEQtF0k 9E.re Xu?~2<7 1`ii%bk;Сc/u[ Gߖ?ߞhvpo7•~f159@F$ƜL]L'Tm28W. t ဠc?~\0ݳk$bnV%>"bYMT |{Fb Ŝ9DΏ>3# cnFD 3O9FD]'td13a}V̄*=F( MH&%s럑V]ݘk]"[)I,g>1wU3s$wEVM%0$qݢM{7JqϤ$0է[u~wVa!wF!'!v3[gА0Wg'kzY+7˾9򍔇|_0( Ɔ?q~Խ!ʼnv#CRJdpwIT3]51TעOZ\Ʃ-:hɚi5H/LEAtynmL],j9:<>rf׽NRӕ9YQ#W+$dԌܙݢ&7Wls9Dom{ s͝chs khijfL(RU9h`҈A8>mE@!Aڐ-%@.gF$kglA6!@*NV1X-̪4]=Vs]>;ρ$m~:xI;TL.Hr/O2t@Bxj?pSr׭gLs'v')${ͅ84ڋ}[ˮ46FN}%ώÇ7?FuaFDd`Zc RB{6Z=ds" ؅?l5.Hty&H| M&d?tzf/o9ܴ) EyAuH"ί&ֶAP?Nyip"Njab>=О0{ b* s';zI!@408Fom77_uS gVc @0ӈOm(ØLELwjJ w iQuU;SJEYO_tyfxaGd˃]Gf)'5#-{<;qҪ+ssRӘ.~՗9nexHZ>ď-KS^{odPP"Iw^]i57bNXI4%V`k´ɭEu{̬T!Lښ1 #aqzr);hҚPXo2uYjk7jt6FhbJc)a*9<>'wu>R-vtfՈysk p jaM!IΤM9>?e4&*V59)Q&;esp9GX\X" ,%C%vy jm&E-G쩏$?9onٍkKul8 8<ﯠ 5oo/=2| PB @^ٵo~5~I׈ןʢD) 3 J$Fx$ Q^gpNd㮣~Ǟ]{XXOK<@Bf3_~lt"f.V[F IDAT&gC$IJR͈ub8>I ~N#/FC_/{,5'y"Pb\=?]`N./;1I2A90RO_pp ZX6,s9/<3_>w9Kl68]=˿袃2 gLUZ=p`NZA5WJȪu/\1miVrmUb}O'vWK5I])y07C%,I͘js1ijmyCM{OO."%۾R]ԁRGy'xB{OO)'JI"Pp\ 9bkф{HBI4"ndQ۔=_z%V $1ub6Uo_Z?i#94*L+'ս;K6弖ԦSE}_+I~w;26xȃ$̜l2lbՍ("[{wPoG_OaHS-'4XXTx\kW[}k t1^*NMH[@I2m1fAOp8 ]؄KZf{ KZ'$&5Ϊ_ Lw,e(h_}^y8? yppMxplrĪZMѻԣaU5KZpNZ( `>|{^tm\-P f~n^xTs[?g'Ś%l'$!a&}`'gɚ&Ŏ\ mf 8՜ 8+rw*rF,-u?7 s.|;/LQ5P ͐;Y KINëo/u"7$aLJmhO=*gH\دwa*Q7i,fڥY.%Z-NiA3ܱ7V G秥ҭᗡb??|;՜@˺&31+6P8z'ȭ@[pwW]:޴m~76$?xñLsZj^k%[Pj|5`FG^|p~~)|~iCZ'qr ~(-Pď,⵲0(;HDL-t3vQ1M9q)S"-q y7 { 5DfjIlq;$p #Aj'wJ9Rk .3TX̊`=Us-eNlN'nz⳺q]%w3wnur6Mbo*X{p${^o]Vp9X.2" )qJqU`'C3ܴ E@')[A̝ z̀<ٖK0t *ھ ǍFSu3),=vtS:L{ϭ%7-3$KNN$)\Hsu!  W4j!mPvKL#&w" +xN{g{{^A <×>|륲pbIͽ"BLFr vAͥJ''!W~Jx5u?nN)Ks:sJȬ>zP-@04y$ss[ EC c_yGކ!r Vz&]P6x£;dы=,00 _p=w,ywvyoo[žSf"OYGVLϓ'p}?}]nO כ;aj0A(=h3 Yc.؅$2rf??Ƌ@돯~a2eNIRbfZ2gzY.C03AE('^؃I.F9c`Bދ~0}_7yg Fs42nSYynD >SgʝXD/ݞ^$.{u=x !3QjTf1s5SS9K :'9}]9pXn{{i۫AȬW?}I)04DM˵*q͍B(2;\xhnDܠ]g)5;vx0-7b ba4a-i &YږXJ l9K-" Sv9s"5$a,l iX*8ˠZ._޽qFBfBu\osGNxs-URV2n}31 x^rNCerSQ)bnPU".5|*"L0 wH_;<=ZibP)C>uBjP5bR@\ьg8 bY멩D`BG-T d5y(@;qbÈq[>vE^6⠬Rf!mR{^ꓫч>- msklQQJ fd"%)0'2{{?P;vwFHhiMolg|)ԉ$fړ0̙x1 eh ~4WYdO, ETK v^g 1TYmş$^Oy_0N"̈-v==wm\/\Kl,20;܍`+ԬQ44N*"\f|ZWU-`Ǐ_b[O⦦]t\e~Af ޖZZa,r ˶B Q+Kݼ_ݝK}Ml~f wKAf3urf7X 5isשQBJ2'.FN/2w5 @dj8*7~5m411wiX%uZvUup SQ3I 5@ '5K1"f gf-qKI' dy)%(D}N#`hv9%7cDӤԥ4֒( (nnDș'$uqNI7opАy:f*SӸG&C~WIҥrvwr6M!TEeٺ2 T4N.ܠPB%BV̓"7ԫZ<_y-y URTU?XMaQ a|94 IXgQ@Z(5WEJ40>~S#/<dz+ M]=p#=tꋄ!5#vW3@N$%"9$̕ ް#oXJ*_x'Lw.J7GQcawmL ,),bLCDV KK@BZ-,!;CȓǏۿ/-//w-t'3r͙fEhlk(x$CDa`pET/yg!<=eW3A ND"Y`6 _siB̞GG՛ڒeiBNs׸{DWde$()jJ$&H$$$$F Մ $T(JJRVI$޽^k} ֶQRw;l7k}orrվ8g7wϻ/e]m*N hS(DF¥c}2o Jz ,@!a$fcn'V8>a_8|wt(T6 u[8к;Xգ1eL9DX!zAsmQU|??㫝qv[!\ʿU뾰G2wR@pPz]ŒPjZ\\U@LssHC2 EȒ}|R\pD7n*2F/*@)3@81T$ex(p=,yS-5;^ARy7RJ8fO;P[ÇnjpyuA٦i7?˼̧ETIJX2;S-7™$Bf \P;kݜk)Bn"MUòQ {򿰺ۆE8Ha x9 ܳf#rrRJi3&pȢd-T8B(Dw淋7~0a0D@9%05+n\QLL UMU17.e;e!/ai:LBCF϶5:sGdePQ.,ID-,q&905RE9q4W`/>}%F8Q*mY"ǁlu!*ǺkѶZLNL\玔{hAz\"hI|Z*V%Js:TWeRU#FM0P1i'$`sg6JMED!bqoUs CX y-i9y7mkQ7x Y#f TRXS:_DBCK m>=]p؍L!n5D@ʾ3+XWAe|JfUh&qip~<񋛇{+30f0~_AUjIH+N/)so>k#"o?Z3IE#; $ٳ'H: L9\8=e)q72Ť˴=+|f #sf[;(AJA*{h~o޹#Nh:TTDIAd KG( vJGűH10*aWvLAi&)' m${QpиtYjԝbT{wC["0H+Xyoo8AEf( $yJ ؄ DM}SM/0i ,^ԀgRbKE"P)B\*F2S-*g4qSK'1E= ^2<̴.^aUUk)CuYΧibXxe^X*輶a('r}}n7x`p |24_(xuʪ9ȿFӥh-iuUA Hqs*(ixyRd.Ze%sI1k)Gc@'X,]4B7HI\b.i& < f.5b%p-R!N1 $< r$]rA:1f4;{CEZnDFނ"䭷:%hΝy7w@\#wSՄY\i%@=`}YߞA/vνQgw%["5}Wan b'0{X@~tv0B~_79M9+GPDP@U"+HRb 7W k>RTr99=1al({<;CUXeyQ #0UH8ZRs~'p)H&Q\aՒOX5UMcˋ&۫֒L{/TWcAH|p3ϖQ{5%G!>*#^`Ny+\{ ֲ$"-BD\zq"?~16ZGR2=2!H5ޜGE9%!(Ak"< r32[ hd݊h-,*$ZQX0 L%Zqs}e0JVz'&aNV8f8|fejKYzaY3(+HErEh̴-B9Z5߫0ת, 3q߽w3eėrR Hr#Q=RȺ)~c(EU_{sQHIyR^p;@ Ef?:gSKAUdq:LFpCD"m-7zvL?OăIPH#?mR8p8$"sU*fӄ"8?8=]%W)%HJa0 ݇9ٖ2.6e2Pe(^'x(R0p CϽmf*Y9խqdf&vft^ItƏ;}NN)%S PiQ(J WsaJa){7rf@9,,H0 [!Siwvf0QVs8iO K6E9Y#<3#HC-*}\x-rpU4@f.12! Bee[.EPx alR'eY pPH-+Ql [W:-˹ֺ0f؏+ ;ёk .|(S!^/k;y/Ni0G(lVw ϋ%MDPaJ)NPTl ȋSҎD (  }1d0\U9 84VN[D3zd T+DUt΄6nv] Ij2^"D"TJ\!ZG[W2sk-qDŽR@g-{7r?EyЋPUR  Ph+p6BD\0Z 0:Bh6;5"/Cvu*ޡ)L c& U6yw/E;]Ƹջ}q7~L90!(!?B 21*Za(=9I97ּ%90{YP6Mh 0ϋpZi1I.K~+$"*Zof\T[CZyPO"A֬hw.6O_7z;0RW f%0Ol-%6<4TȚ u>3"3vbhND:V mѹc- $v8{zs ϥIۜ pHE= 21RץkàAjxqxyu|9>%pKMHDU-BE8NyO;R0 Ϊb )fT|ݻ[is qwɊ5UD_-D*%F3K-L!¹t 0h-|͈VeԂd'(3o"9m `2yJP 7rD \k),HK k`DTW( 7ew@AyɕRHkф߉}0B(V(iKXđ`n:95̙UJ Vð+5 I5=2H9{@RwՒ" .KКJSGHFHJ1H̚f)b86=QP,L͖qXgRMyXۣjw<סL 2'G&$#W=.˺J!i\lfu&kr[330.D $5 K)Z#2 6UrI^j*z-_GZ@)Rxj$` sRT-VLF`8*` dvD ̑dyL̜X;Ha u6'+$9zH.1xiT~G"$E EaanJ˥rDjI'D&Wg&U-` 1 W0dѐ ErԄmQA"Ǟpa"VԃS3w +EA3 %!te%qDX#τli[]d7 E.Ik"*,`f3'"UD0,2^"k"B]"A=l(\U9DmOZ3RZs4 `7Qe`ye*ZET<֥INk/.#Z#r:?3Ee%1" v= | ARyr/ҬD!:I]e/%?qނ(ra;A^у MHа 4D4ҝydo@ԣTeM~%i*-J'9OD%KB(؟Clz^Em ;k]D݉HU]On/:"D4uR(p]O7Rd%В DlӶ\EYK+Dx3!Gi%) luE 3k8'ӕYrjE)ZeP YMjE@R0DAHLYfWE_{+$W)OFWW斧ذ:gXNɋvw#@9do{eL}gjѢJȱz?=$2e"0- &ب V kIuZ( z Rgv>.pN"JDD66KXR_T́(%#Z̑9'd_xI "fIHj[rDPKOqyRs7w1l&,93%Hg$jyp" sݓ2 I3B\L]0BHouwDkT yĨ5a^m2yQňUj3k{:̰ivOwaxjeY R @v%!c#VyKϢ)TX)bnȟz]/nh1-̱=AƔMKZ)YsDD8qsp]se& ͂ND SeK)`ο4YAz13n,mג2OHzڋ}8Mnm*cw",Y4n} M=Φ!3ΡkB)US@-ZJ@=$0qQ-2*3EQAEe32>u7|"yaJHXU2$8AhBIE*٫]%"BaR3`t^4rvL abgX,}cۍ‰tZj D0k*r^|elY!{MLL(^F!l};yw-?gDh)wSgR!$-"$٣lvsk.U^[ LAHKxSuI]I.Gt|,0Y,t d]@0{FWl9xS$T|ּ&D1 @,Q9B[KdلYR"U DRe^Z.U΋kuYͩs[%awXZ4#kA´FLf+A Ģekv[>f"BYDE6ikD9s$@i0M6-h-QkqG@"2ϽNBw?..jWQ=3Oh t8³-5(gZ- %b趛HGLJ,QL[IʛEeW"q˗#[ w>ln=2Rr|33 (W햩]ugH(@!Rd+¹3lJ:Jf:oU.*X02F-ެmה0qxT6 ٨eH*Ȑ o0V.dXRT <) rJQ-u/H N,^R,y"b-t- Bj-B+"_t^} Dj)Ei+RTR tFmf<"%"+Vlkܡ 6k@6!2!rcεy<B9v3DU;A楐S?JUQ6K7_Wc)!fE\RҧNyVIץCm ppk$2DLA&SH*#66h;]`:z38@y)g(eEI%;˚pzbͼE_[E–h+ ky&q:4Cn<\%&u5j-)E/ oyHܓ)E$[<(ݸãZ k{[ܼwEGNd~x D2אWWbhA"΋1)^,zJVy;YE& h_iɥu9h[Y~y"ǩ&ܼ$m'J.saMXX4"Y8"\y5kUk\DxYJI [(Z7z$ n^Og^X:SY榧Y3w.&֢ IJ4`^eY"Jfͽֺ,k*yK58 mUskk%a-YΆT5hCmoCZM IDAT0<45=BL$-Bj^UEjg+ aW&* 6kdeYܲJ@B$ǿ{\83-N ǩ5>x1 k+Z%֪u ,ND+)[c֓(zvRh˲2)|Z 2N;ҬGxY#,'lmV.swckg3} ng<kZE'&FÀooW_}߾ݼ~r-T"X.ǫo??>}nW?:ɸ{𱒔a|!n_~˫š8݇}xsq|5|z8\[u.v#(VLopuj~zF4[f0yYڲRj[CG-!~<|r~~~2MqwuEN+q݄%x7[ow0&N^on=xz<ʏ?ޏ=t%f<-V?^/_Zߜ~][)ezGwg~y>װ{q:xx~q~xWӟ/2S8ϱ>{6 4>=~qno>̞7_'pBe7~{a*tjo^Y>WUD[[s;=ܫq~Rݻ*xN4>>_]khxrzLJW/k[ϧ),\_0~|n!׻wo_}Njc&:p~~WN~| >{pva:/^]֧|X8.?~m}w1VۃN( w~W7?͗po#p=/|7Loݏ?~VIno}g=w?ٿ~o}Z@Uz4E,?op8Dݴ}}~z.C 4ND1M% D{|g޿}x|z>]o~Yyxw~:=~xqoXOw߼wwt??>?_LROoO÷_wjcՔ| _݈v^Nm:Lm]Upm!b??fD 0/y]\:b?T>|<`4]_* B!C-Exڼ.&p1q8Nϳ^q ~vG {8ixjx:7o'.2-V9e9UuZ|. 6Q7G.nWha>C'8w2m ,ԄⲰ4RB..7k4?iT=1v8ד"v WׯՁЮ_ ~>oh73^\z.Ym͛ix=\ POi:Cݕ<秡tk(0 q٧t=?}}:? _|zca=>y}XtZy\\Z?L7rP=yu9anoyeOvUĮr?<*;l]0L}vi2Q/qYߏwCȧov5ouTv;%Jq}axx"z<^~ F?9AfՅC⟼7ü.;=(2\ɓCU0C+[t~*4S[q8Lz'ُǛjr7"ˋ\qzZB޿ώww@//~{p=?Nfq狲|y37v˲_GZo_펗r&wͫ}n.wWף;uxp_;];\X ;s-Õ:+dqd^ˣގOͫ%Se&|0unŕV?yuQ|y9-pգBv]^_W2O'y\[<=/Wo=\̧ed}^ZOi=-VOOm<= 0@fledjL֐h=,.I4: 6ϛ^ͬ(i:_ <"IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot11.png0000644000175000017500000036566614717152071030352 0ustar00hanshansPNG  IHDR65fsBITO IDATxyU'zNrګT*j%ݶmlmˀa`af0=, |ٍݍ{UwխUJ33?ř̛VI-ޫ]͌8q"28x[ FD--刀.ǐk^HuuZjKXdp+d]'b# Hx!-z7:~ :C!B54 1žf4 LԌw[E0(2ll(xPB7$|ZwqWGdْ'BWu@DVP.8Eⶣ:wXZtOfDV |@܆q\ޱǿx}it{ O?x"wgO@ c$D o}?x׫_q?5m}7PtٞYi6,4-KC"̺EiSR6BrePz~j{3'NٯB\?{lQ9;^7./<~1Mם3F_ß{'/ LWё1|;vG^p/թTMN9t>/۝CI)O41cUZ([IQܬ (y3zzeIp相]`Jd㠷W_kx-U+sw~X.}7?R,Yux7_ ?aH[}3ȐiȴR_͗uRz27mx2@IG8α^觿F%|c^0ܻcn\9M{ϋm'| 4dr[!2Cx-@-=}OVUZ/O cL㞍蝄O(-($Yoegu$ߵٶDi$h1D>4Zǟdo/X!"'Ԫ@BC"ё?_" 169yه?巼]V@ $W;'wzv:<+tXYXio_Vi,jaգEj>o_[U}.Nd zf ԚbjqPW3 ,X_kձ^}o<zs=bV,~7/S{f:٩3}!c W O=o<~Y( ^׼-}A4\}ܶ+hHD?sܶ[#if(v<2T_\*4}yZϥ䟽пH ֹ%馌M+&Bg7TZ[?DtC=@wM{n>P5Nk cY?1]c57K'ǖ.&FȐյCcF]rBx5GP5="@2I$īΔ,ξ_26]അ8n]1q?_ԧ8xUcQ$C\puH&s^0 Fu"crBDCD$A4}d^Uh5grB̜JI!J-%C>hrI$r3̀&S@9̩7{Dk%B<@+˒Z,+_kxdpEsPrɢgd#  "!?CT"S$(@V@SBHM(xX[']gclñpxmrH$LBP$ĭ}rJ0bޜzE̜\u;oK[@a $&VJ}-C[syScob ]裔Kh<L0Dv n%v_uMY.)>t`a_MࡸN! [gCƴӠ fGP~FFWt'Q?rQ2N[!c!Px=–d7"%x T*it{lnqDdap49+.ءLYt9bdQKR ՓMo""f6ec9hER Vw,~g6t#J~ 7Ѳa*7A5M])֕0uG8aΩ+JzCnmςRVBMgOnVMIf#{"#<a-F] z]sȴBX62{"SnH)řf-V_WKb4:Vљ<'l6mӖ2>~R4???33B?~|||hh(zNDA:wEZgzN@G)KC͑]slj@;pO[ޱ^bv(j|w uFVd7͵Dw`?4 M/]pA˗/ Rnժc D7yǏu];vM~cǎ=s"6MVWWGGG`}}\.m!z: ^iS $~Z`ˮf%EFDW"5ۧ/\қu:[םf3?v?/諍3` ~Vɲ76mSjSN~BgMMMpo&ؑ#G`nnRLMM5 xGC\{t]GGG˗u]7Mǎ?Cvرc=6`SA9ljX.+jz@ꥮa*PT&Q`p,I 4!xpE٬:}}C Cng id+IPit ܦm*뮻z;S\.u4-BDC:mU\%ԩS/zы[m_?zÇ|I!Ğ={~a]>&k4RqRSx^P+_L1-Ŷ{HdClL_ {%$}ӿofp J}m=şNdžެce'5}M#χh3(,O_'ϗC{^M۴UsQT,Z\\uRD={n .LMM1 p-rsΎ,,, 0\nHӴR{n]{J(|ۑOtkwi}'>~'%(mȮ|n:MHl^+n`g'JxrNžH茶M۴jZ&'sK4Dd&WZn766v!ߵk8KKKϟ{9;w)֧?~D{)hHDZ>q9׳$hKZt P8 ?]M0r+hlS˗oxG{omKlܹ3bڵ :ÇQu]&y||/dcϻzhRk/P6t =B)4M\KLzdwZr"Cpݥ~s6m5&MܵSZ[7_=0ئfH:у/!FvJ96~_ԥ<)jϗAQ$#D"000,p'k 6EHm1'y75"_ HkH8iQcOn6m%C ;_CfNۮE *'<a_y2sm6mӠ\}Z(lk[v%_{0&P #?6m6]SBDO_7|;,h5#jiAHMY>u{&&Pg  |>֡Y(ͩ15yߵK?ۖWoj{uh0Bd++fd#+CiK}7]C "4wH!+fuTXc5Ĕ0Smw uLȞP&2[:_ Vѵs3*(eJ-(%\HDQDžT#UNNDf5-+*]כBJ!^(H c/޲<"{xĠU VshQGSuobP·RG DYg QF%)/Gʬ )Kq$vy6I\y@N hڼ/f.mC,U+fD?BNtް,JOJmJ__CW'?jCpYY TD`&reJZz 14"S(TAiA7)uS6$kLz%џ=FXЖOh+"/&MZ;9u3mQ%I%Oe.e7Tw1CaA0PJ籜1bV2aJq:QA&GΒٿ@[sr^u/'e tks#OHs# YT}"ׅ3)juW9 `ib $ яk ̝'SlgBs?0GDe@̽Z(݃ip"O2=?)~(IuK$u-Rd}Ҡ˸' ˔BD 'Vҽaɏ}DPl`P)n 4J9Q([\ӻ(8 Z~^"A9q jyf89fz spc͖Zo^lCM6նjfUGIdl;!n_fe)qJǜ߄WˋQĝр6G0rUU O,jl KMU_%%4ܞIpD(Q* )M=0tT>ܲ]hfȸ76\\?}qdNIP Q>B=||.$:g6gˏj|W< +'T?;b4֖"of'iݗ$)yM q@}"=]*-m'ǡ@6mJ8/zWNBm Uv;oK5/-4/].o86f hg&wTvMMud#z7OlM#gf)}"֓UdKQEGT1FQvaEa"V|JY3ٔ(ֆ:!VD~qq嘵%CS4-)oՆ*c/N{j_X۷ZWVg&4И]+d7ϹvM{'q7/>Ifkl!Hmrb=?Md=qyI\Ev;عD _j=|u C!<0s?øݜiml8=Ȋ?ZWЦk FCPd\K=Zɑ}o|YuVhLc9B. ]7|f»O}}Sh c1O g9)pMJTWOVo>0ٗ;V*gR1m9'yWHLF) P~58<ޠ9wzlكj%_{!!SbB_rFn9/43ҚVOz.ߣX Z"'Y XHj :tjNOhCl;sh_Dr l6=#A>nAjGWT8Uyq Kqv`wF3^f6Dl"iO=7£%}>̊sfY<пteKCfobq#[<>ce``[QIYĔoe/'g.5:*ڶĝ!ɩXa2cVs [69X3wo?sZdw#u#,?q_5-w ߰?px4y7rXYL^ .#)% P"'M5 tKK$B$ggGt\Ӗr&3>*MkP=ɱo3^t!" k D"BL 7AM2?d;7wƟfR1"(RZ^s!0C|^'0>$9p JW_sRFR O!rYeNMz{ܓ{ dLz +TO$aa@s}W6p\(%SӠ9ۙ) Y0U.n噅CMT)ONw!h4 ț-p>@?BCQ/z5"VM AAxzBlXH9U CxV*m}?L{lFEܘ@U hD%wʘ\`hm EJݦ'WA%nDd )2̨}BH("~G@7!ӍH\5H9 Bwُn索Y+,;2X{'pL~Q)=矪nEږ(h1bDL܍X⨊;F c֜tzc塸4"18(vrcQ7:ӗŻ}9\=4cY}!tZN8;E<}iw #UJ% VRRk@qt#Wmcl5Q @ V4v+Gc n spr SDrQ{BȮ&6''yd4"gJƄRNi^f)ׇ'{H%r_yz'Ԯz+Or^xt7̈)2$'p_@F hK1`3q`#0/Ow{y0]x;ȶ4ۚ}\FZB^_PIdbg:} Gylѯ .m{ C{${̩s3o LK|EdT\iQc*s[/=҃'p=k!̑˹]o%6v?`NBr^Pb&XYQ؄:="#_w毉CYt^?q>V2 P bRw"A'@|*#P|~2 W{?T/3X> +0]I?z 3-v.mIa~zMuV/헵r<@ysް~n?H[@]ktBlݜJnѽ(Rl2aB< }VorZݛp}r|j>R:FZќã7>}NXvx.k B6ʘrB-uY &j&;qe)T=BoFk3ѩ}OaFf{6 ű?1v˫LW\;7-e5k>Z Qr\p`8xx .&-SE")3d,8 s@gٺy=R G^rm7Tf&gєmC7흸Ƨ@ JSp-/w,X693 胎|܌5d T,\z~ۻS<'s !qCFEH Ǭ,{?Jg7L Z&MC6SMwn^2dQA*,g뭅/=ThDvc͋W"Ck9gjw%Fw)PDwU 2 c ` * ]DTw.@ gs!AN5-@FB ,R$u&G@R(rA5fFIH_m 4y^G[U 44qܗhZv':`ЖY'_r+3J?ݽZ\C4Ә#żƵl?A|Qx&:v0R';RCQbAE&L-wD L'b]`< ͧD1]W<'Ic! y0KU,#qU=Ε=RcYG^16` }ғN2@% <#Fm'4"V'AL1fz U#L0*%JUbc%sw>/P? PTX`N*)]8UHRqR'$a)^?Y_2P})gZ/4b:1_L"rwĮ^)tcCWTfr fhwܲ5W2C_0y6S6%ATC%6#ؔHUpƥ9Oe$(N^l<\2K8$I6 @V˪b2Im/D><#cHg_=(gaXpL"o#儶Y+C&=#Fo9ˏ>j6Z<ڿg"lg7smoDԻk[nv>\T[g pRXHsqN$%3An$T CA:WC&\0?zIl+S]_LZ ٧%3>POԟqƎ`כ%__s~V_Az/;O_֛)&-=y8:Tf-êJ%!.b O@BoTTB [yEYˎ,(0G&@`hù8z`=2t!Cƈ;RmaY9D Jq,kMes?AdHdAsˊKuiBirtLO_1Op,uG~WЫz=\V~nK:kػG-t\ ߢPD*% 8KϝOtDXhN3z)&-4(%#  {ΞL^dwx|W4NGA)ǻJ}t m9yD+C>JJ !;3*!c"i?O[nysUL=;T+!0vww̨_A-痁`ОGOio*_hJ]%Qhi6EFQME6@|q;DtᄑI]=8 ~ P)I>J})>%-l'&禐U>253/E1.H'WMk)5zv1"!ʻ=쿂a9v;nzG>gBl.,WvNzh]f&i~RGQyQybQBx QL{I,gx)… +%û>wc,Ǿ| qnM p٨xnFj%QD uՓJtHRCWdFi%>$k>9LȬ*6ަIA )G>|"DQF{} nȮ>;`ťRRO-=O.a 8w/|~G"T]B@FRxr'S{łlͽwż yKRZowN0h^\0 -nvv -lD1SO[RwG w7$瑔D´b)lR0.FOI !J^xù׿R5<29S6_6_덹70CCDAVY@q؍$Ay`BoU$B#H5v2 mb݂="O9߂Q߳:=r tU3A IvbDM4F0k앝/S/L䴻N׾8u)m f@Xr@J rT$ 20ԝ;A3+BQ/g ;9s\6͙ӂ ]*]!A^@^V>0>VbbSzO5mx\>YaGDJV!: T*\yzQ+]~-RIH:f8q6 {uJ??—CC- Q׍jɨ3C7ȧ+:u7*Knٔ_t)e)r㥅CĤ"@#JѽHP|FO8 )IdT=BM8.4XXW3 K@S̡H`J'gQVQu[!)Xb̻gQ7.-,|^+GX z30@uو&D=woG6u9d8Qb\иm,/ SJ4rLqZ7!T\;%fSiFࢦ;D"v=X'"/8.BT xz"qnIL0T39L bce. dYiqjE5Q؎}K^03s8͵f gE樬Ȭi_ۥzxJ= q8o (ɽ'e䍫P DNMѶBD@N2Ȼ@]"UUHm* BhւdLr/$tCRnɃ֋$P3譵eWLrcee$V@mB6ua;5ke~g CK/ʽ9{/2XD޵~yh4~h$RmtTe!j>:Q):78KgAH A,<(?ܲ"1($RTÓB3/)K,g7c,"?0Eu|H*JyXxya ANy=!8$5(w_V(QR1a%!!;87brYSܗ*ҼrD*f$_ȕ8(TueOR"bPC)rz!nܶawu1ۣ0'uzS0r<zXX{~J;[sKG˽z {". &_Z JS닼 \h1 <( ?d $ 2NPz8cR%ub^ًe &(ǰ%q cSz!:8VؐF ɛUpOH $sۆ៾@Z_ Xʞ@dYϒa<Tj^nP*1hr)yx9Re~v6& 9$))BДK lU;c>L l#{9c`@+1 M^aG@?A'+ȍ!x+kыnK[ ľ#qqnuSδaiґۘ/? Ȣ B!+MYi9TȅTB&]oMw $K#_UP[+~ -C,)RW[A*nߔDGLyO&<1BqK2IFQ #C/e[l{kPαIq)'룖M}Q"vM/c\>8!R30Rd~jϞk;JՓJz5DİVT9HX?zX+*aLⷦ4HȥPcH{0^ @_%w2Ȭ Pg~J/|J ^Q"xnepIm \2pd1K虱ӂ<2PZqHr F[JҊEԴ8D ??3p~qVzM_(I!QgOE ތ}lqE-qAH/]S+'2]>K*H*hr 1.ze W1C9XK xEJ&GͨLc †5S$IH0ظ#$Kէ6@n]]d m\ PQ@C7< tAAʦ|!Z=xW>#^HR hHs(66pG`'4=],qJud[b@V4W[:  BuJJH(bH_]( N"pJn4e8@â3@ 0c|ƛܠ g6H:ذ??!RwQc<>rCN&90xvKgh,og^tdE?A{7PAe,u@ƀ8Kp]0zߞ(F؋c f BA&RE<$ (LS IDAT;2OGl`@z3pљ.`^AEo`еC\ 57mG1N` ʎ "uhzٹ\v4 M7 Cf=\6wNF۶GtླZ(Wx4\hN@t;i1F:.QC FƄwtF\ضC3@(h9Lq8rAkwmIT3cR̉*cKD@!k$6j #P H~"?gEu1764 L.M-M8ם1%4 XoY'f۶m"%/Ttвװ6nTX añQGbH\mr(DcclPIf6V"1ẆFAM +%\o #s*KZwlgGuT8˺;[ mtT,qYmSdc$ܽC@D:HjIYP8w$%BA3kidr*DXjdO/J 8ϟ_Z[XM\]{n8Xx7/ԛ5KQ.sa#kf6u+\ulP*UV76r\u۶jjRn[V;Fڹ>͋ kFS!>R0FK3‚f4Cu&&FfM;;iȅÓgWC|1ؑ('BZBΘ?-:CB!@p_Dj < D 5ܣ+ɍ#2dQ[ilTfOζGfť7unsI: G ;/Ut{oLYjڕ˟l=ASCpۀ!cS5$S נ{n}ơCWcEh\歽ZS-Ww%qC\/:l}rz6w[)vMOZi ]cw51WG Z)x+ 3:l5}l#E˪{ ~#7i|;.h OBhNt{D]XtBDDՉDYW9NȂZBb@`K+VX3xm$1 V4>@HJ{R3GJЌL xnvm L YP,hHD7;77dDCCq!8i qVIƫJYs,G&x=#efw:.9+vV4Mʌ nB0墩#@LWn2V5F>3Z)FRF./ uڮID9 &!; BpF _A{# ;@ D( {X  #C!c ̩z\{lh?tHeSh{mj}4L&:g[!CC}Pĝ{&n1KƁ=C;KfyD6{ũ8XY`-2Ef+-gvVֻW֑s&t.Qz (W{r<|zczRT "෌SO<ژkӌk Rj0 TȲg2v7e"@a&*Lnp@3jbI,+F U哨g2//usL4:fK*W+CbT*덎|qeuZ8;weu5C7  9u֮g*/,έn:2mЍBHms)̉Zqj$N˲mR-ֻ`rwiq`]ɑuv &rJӴ.]Y,hձrj- Hѱyq, ߕ ەHBM(5 ʄxs"2f5 &t B$Uۗ&5^{thsg:D&1֬_2EV&*pi YKE*MX^\Y-GKݕҁSϬ -wxlfx|{G뭍'Ҝ}py.ݥklj3K{wh}DgA@F%"[ %q\n̪N^˅+&1%Gw3q .y!ZS:L "Fg !`d ;UE6@^TJҽ+ +^nT݈x]\bKbA̻%GD+ yS|2kI7Fs)|qz~\*Wk]BwYE0L/Lb4 CK"U4n˹S4 ܕpqb 9,hf)G~&Zo֩FZv;ݨmۜw:6Ro r̹m!rN;m;͍y KV0.M!d &:S^=o{S9Gc0 Bo"1_Pt5@ՑʬSlhKcP קqC6UE֭Tӝ+mXZ.9k;viiyiG:2ŵK[]mسmUu6& 3J8^wN2ݵݡb}tǎF[k7Zy+CbY S}@p}= p$ nhǞ~}i!2BB ?,cccss)! ꊣI Lya a-Hn$fdBe eA|EZe_]%GCp~:AE #qIb1H Ι%DcK: A0  # ! h4fFkf}+ c GuNdZv7^3nbm8 4 &]`NLXި\cFUEv d9Ͷhw:wA*K+덥+˗vL޷w#5, pD.%vl' Y1,X1 !, ݧ2/~ e<~-|wկ,kX( `BIB顙ەzsMph?8xQfΡZkj6>٘ԆFأOz }ŠenY.r|nYZwh-.\[i])`-FrErK]c+8iRӱz/.2xs3'iGE0ho*]3]3sܮEBML cVv{4rdUcivԠhl"< Dvs=u, ",TkYX:D#V3s<KmJPаQPQ\Bጞ()_o, 博bi9MnZcY, \8ftlٵZL,b+F˾6w \!: *XY aby-ږfe]׸mwFYo[7U5^بw9:hYq,7۝nqn1Yzsy^ovZ}7.`r:]ȳon_zɷ(@}bFO r$ "\C]D 2e<_74رWZvpZwmFvS*65'fg}͚dI3s|-V]zn @`FhLA@L&ӳ^%KOzLeAэ۷no9z̪̪ /9c᫲qxO׾&u'/·w7V63¬m(>+QT*z-7xe= C:"n=y:_PoYdZFUed_7ߥr/ 7>ɵeOD>ݍ!0w:NOmU /E][^z$}:RC/a}wLInQs5=p&u}Wd--8Di SKwKSk_nv ZsԈBP9apUAF"RnwVWRb4U'Q@ qP0 "B@OBUjzi(q"A sS'XF0   )P`YXڋ,)ukwґֱ)2DЂqE@\A``p΄ d[PJ4s3<4"yo;\) F6`޸>>܊~7ߕ 09xVqa }v㭝*sg\}8Q&{՝R^ؓGPĖCEyY{X7:]'Ftt\dgI? "dgwvq|g{Ȳ) NPN}t[ 6_v⽾l8] fYt,ƲDq.|.7a ^<B x3;c9s7(NypqB\GrQKfl1sr)o58yv/7e.myiA^vQ@3WܺiKve7Z+M0]aYrI<8tM[V@a G0F30&W "4 DB0@ LYY6.K9`kkV#iɸo<4[-IB!P Qf0@Dk P6Q^VJq^'!#"k'Z慔I# C͞,yOg7z;,$3j!~\oEͦ\YoRĝv7Og; Rp0LV0uD{GOXwZۑAn6qll`znxՌGU*^J18n+61K0WJ;͑项 :L* \cݹ \9ʪGO N 0Y4_W?1hMNa_Jy%ٟ3e?R٫p0aBbہ/-NDXxc-uz!Nm ~v xqł^mxgݴ]^ϥR̠ZS{GFb'0 $R24hLRJ*yW$Ӎv,~A. Zvv?8DTU%"RYUF#zь:ZR,s^==v:T(%X[N h)LUV;|UY D -8uii-`&9~@t.+{2J3y"uY{||쮯b;qRwI=(+g|cTbnjW j݋;[]郿?mg3 JE#GO&k:Ras﬈!j׃2zWdQ@Vpw/'G-fKtVA>pyOxgv=Zw?z_}A~6:Zi_ Yb"Dv]R Z߾;G1ș!l 7kn^ML_au̸Wva%ǹD%݉7Z93,tP,aܥHN2x1Cb sj6Cx((0P`@(jIMI!*Gڲ2 _-W6tAmEĈ0 Cây )tV@Zkd1@JUيA$9Bxs0˦5{rҁs4@YMڈ #Ҳ @/5 (PLgALXOwxN4^m51[_'x~UbkqNj7hA/&tz,QaVxO>y`m*8?TX ?q:#h`W;0TV;<7{[y9Jw}w'٧x w\a|f~pﵭovk/FJ^V@3a-BDm5:zU ʝev/,[0]@nꪭJŞPdB$EDB-R+m IDATs#y@g)]LDczOx r@ND$y}~2q٣Grc-vąMg,_=-t!+o$~\ƟheAJf0 /F }J\xND$:]'sUDn:(ǟAGTTVЬ-XHٿ]i7$ӑhBD I l8AR:&Cڮ/j Uorɖ į:0/FXձxԂ\pI ~"=OgD7sxj ~al;g1DZ(B!N87\xFYZ_ ^ ~Dk5Wr2۩g)ܻߌSVrt)y8, H`bRE7kJsyo4ٚt0 vA/g%Ron~6 b-Yw BJ'BRVJAӧd޶SE8PJS-ق 2R| 9"-a 7k.Xlu(.~M ^ba\Ʌ\|.FJv:A/Z QBmovȔڱ>(QTEe< (Lݦ>iiY r6С3$HZJH)5Q { BH`'""VZ0qZ4d֕E3Ei⠒22TZ+qJP(B Uh@ɴ($h4+Y#b60m|/eE иsqqX;'=ͫJ޶n ON>?j/F'2_ybt˞a j0+v OڮdD2D% X& egc 奊pn#nmO.J QK%'i76O=)Wwu5$eM'%6ݵ !M@b$g;A,.]μ{2! hW y-3$eYHDuH@m8T6C\ߤ7߅S_y6˜pNd)h@WWk!̰֓w+oް1͖ჯrS_N0}5y;N5Y3j6)i>j)9<~w=TilFRGֺ ?ёPwrm1*GpvTzVhPݻsGGdoqQ=otr;VG n!@ZHk]YZ"Ui6 TPX’b >jzwIfC  Yb_zt.)4~I]*p>~U 4|0zȠՉmn|e͕ޖYUYo֢-tRE+0I 0 b$Gh*PH'Rp OBL okk7-1z0_RqQK_ùW-k- .-.u , ff] +((2&Q KNݯiEw~# T T̠.KB Pκ@K)3N8RUU !jIȃ'DT`$k@n(ڍ&UUVYβQJAh=q뫝,g$jc6דfU׭ akc$;ogy-ZYtFmpQ7T'P"1#YG H?MƳҹxٷxs4,S8;t2`dTprn$w;:۽7vNV*a]},&5fpFUq|QUys}ov9lEx^uׂHh&A XZT3S$Y㭱RjuPYGB8̝Zo=*o)"]eT=ڮmݬt;fܡi&z>j X]r=>tju%wBNRk+&wzX9)mT-h Bp\x f{,ƫ.ÒPf_&ܨo5: "ϕ:h",;Ox[ Ӕ,rk!JO^P[T`r`4g@) THXS!RF(j!K Rɨq6sg@v^, Jt(a ;?.M'@`ZOFilweYaQIc YOf+ ާ?w6J_{~7VRfGI#j+{ѷW%muMg3U$!.-k xFxleޯFk}٭ԬOb2nWO6~{={a|~ɢ WeTka'EӪHW:ds5XA>(+mն_םnc;ͪy%0:8K}hAuYNXiLUJB i;+BrLYE Ba%" K(58Iu~F߯}5^q>vKкC|~9^(xm)\q /^VN7崨WTZ+'+S.ЭE{In4e*Zoًiʧͻ-MvC!- l8k7wy}6;;S'E?E&?L"qZn& AZRޤl^Vq0Dv=%Ubr4)xN'B\4w:q#'fƃ(Q{㝷t^^v@`cѯ?I~Ecpmưqe$kGPGO?cNyy@GwLj8ӱ+{#yp?v OGE Xinx2.k%mjT lYPx2L*z{ѻLJ VVdхG@8d 89VJȡ)|$4մC!U ua,UA"(f- F_vl~Y~8 9\?Dv~D$|ih}YZCc^3% >_ ׏q1-(s57<* ҲuDqDۯ; y[ӨlҢݮlvwqҺVQH D#I^״[8 ⲻp,jIJC% 3M r$OOtm J)g"/'eoCfAڌ㟽Q4ho~#"T+;<ʐ0 Vڬ1#iK 2md +QAɲ%0F*7O(XQixpj P).,XC!: IDAT8GNǝP5jQ>XgJF<%+ϖа(Hˇy+'jwWj&,ݵGz]~ Fԭ-DW/E.wԂ֫9^GE; ÚCO'UcƩct5)lyMܽ{/Y 1Frʃe!@ !pHgWw.u5+Zs~h$kJAh$/i%XuZj5dQ CP_}3DEcD+kzCCay%R.V)2cš3 RYk4.ELP*PBJgKBe,%?΄R*2.ɻAѵrS~U?EN"Փ+"/Ir<k3[:2@#Ы䵻ۛka#Feu|QnJ0 zzQOܻժP*AWW7?|br(Lo 8{`AT#|mMA؄$rK7/oN\'$I )B ^|kCo:z~R_)WūILnlD}{9M2UXpEQ .V l-W(2*Q(Ip<V1 y]&CY,JQ+ +}i& kޕ%HMlz$T!XGj,3Up5YQ(q>`L]Pxw2[rVA7AuAjZ芲^F⦅nqmu^!$)J0Lyb[>^ΐ{ihg\rVjSswwѣ0PȤv΃`x]壣vff\ը#rQB QjɤD[񃵠VɺJ7No ;Vq=´kjRp5fĉA&zK x0.{FA%q}gQ]ܻ ݝioHUxݯd[o>{QEfQEvvww: 4/ҵf uks*<ljj߷SoKs-F ^סC ~0 0A7l͕vˣgֿV[92g? -RfdjfVR&7> OΫzgW t-%yHdT͚ɧsT`qvzD-# M`}H ".yfDž i8 B]K)@ p@» cI!(x<N~;h4LoD/ɯ2۞[j 㖶| 0WH7FmoP\oSP-Y[7ήlHEQ1S$ 쮯՛*Ioh3Sz7IpfswX"wNK(z{|:oU]mEֽuVC N꜓y(Q(bD!"EȄ(ű5:KuߚzA9v!x7vFzpQKX]熯`[Y˾EP; ';đs=:>}O&vNK'!"BUhsڼqR7swo8LM'ʶݪ}@\YjɢʮYy3Q" +ZG^mmySm_t:U{s}i)U d:[mRHVFw:n37UCƺ'(5jcc]po\ۼ~{IF7?RcԉyׅB`e43EB g3>ob$cԫk_487nq{!p2퍟|g#_IJ•3w A3>1w۷o]ɖƺ{~f2HvtJFO|o ;agykekK$*9|76xDɡʺK}5>= eFJmuh#|;!弍:IQ&T#+9Jk/h! $KRGmPJH3&u'JvƏ&TyhO4kggLJG⍦0yKMѫ/ov׻{p,ɶԼquPb^6|w8vq!e <жNxXKM^Gi)$* {)NgGmӾԹ"d"]p_QZWF/˸?_YOfʃd>mkK3 F,W_} x}ϫpk,ċD樴gPVWWΛ]%k.c@ҵѕ/7?+MwgxkIj@ "0Gܲj Y+ tsopW#]]mh}O|ݾE_>`d71̊GyeAfANRQ̮ᔤEim Lc e[,kuPR( \BlR7s6pg42Etd" A$8 I QIŮt07`dKDx^t7Ef[lS hE=|x ܰ:ǻ3y+mQCMn-?Uqc&UKJ2'S{R?uMz2|6L$_I3{M5غM9v~?cz'k=qZ[N!4gPO=? }= LD\ӧMgzs _ۯ^YMB1-^ȃAo++Zp֨yi7]gt|4oֲKd GR'&aFe݆غ8+T덥Q~`2$ƪi-5zl7¤j(pkmkk)r*":zcRU"޽[YmIvu{ɟ).=e*$رeN!#RʯQTy7v؆Y ip\Ծj{w>M%/;_]'Mw8H B8V0%&%G=|gWV~otzl~_im`Y\h;/mvlqRTmmJStZ˻)m63;:`('M %*(:$R!shtCD&$j" )4-7^ D-= -bdKF/DBHD.q/z3tЛqS(z\qZl˘|qgo/@aĥ013~g0G'/9|1$]g{$(nuDFb1XBsra]rlމ~;_Gu:y|u2.8\΋p)Kux3<| ,b"i!DwzWj꥕tZ?|2&A7"R65!OlJgkui2G[[+~tc-ZhgWNE߷c310;GpWumNNԩK8 u>RZd=ܭʲ)Kl=n[WvG#DITTiBmYڄ=HuUw:1ァXipUe,;KTR+ 1)mTJ@$$uN0&mҾ1F2rDA "F`A,&DYTD r$@zD:: x\2_NXQwI `N`m1Qť kZԋ%N yL19̋N}94̀ hm,w1MX$ӊ?^ n89Puo^zWJ)fDđ@ؖ\ .Q&L~peI_+߽Y=9Z&Fj\z!(Lؠ ş}#!>ܼzƍ++`w?zKRoc$6<QA۫W__BGfF@yI +audɭ)@$^&\7p:7i׿Ʒw'w?{_/gx+6:xWo:Eۘ#Jܹg?=x~vgoÆ"2YR3XGLYR.H>}ۯl.-i{Mz n'PGZik)JGn{݇=l^I $rO{M8 L1oTiD4nټs纂3%~g-)6Tvpܮ5~O+7J<|l` O'KtC0y V'Ҍ&/̒ kTA+`#c3ykiw`)CI$bGo:Li# o aKU=44˺EX<$Mjt ]$ U&Gc \VdP!GP 3?]H|^IԈ'Wu $`g М 1L*O D =,\j 0dgFIJ IDAT'|3{^H!9gsLgztX_[XqhI=OIG5uˈ(ql Bi@l\_{kX? L1F40 {$Ie Upm-[hp-zԵ7ݽa;rDO5h- M [YM4f6zzTO)A5_"7 AVR`:jrHR﨎aOż?WH&\Ei_O?M[ Va`X[yj_wIK>Ϊ'w`?lu^qp[WW^Qy|;|D)5#GCGWj}ˬAVc!x0=8Jf/0S1IrvXtaD)aj±)C.ݒDZȊ;Mey9I;D(fM b'´eAdpNAd Q8 BZ!)p>rr;K_ј3b@@ 1f>cĸpxf?^tD Q /T 'oҽȜxN@Θ+"⣮.m0y^sB$l Rn7P֦(2lY |ýaOCl#fm7v|Ѕ" "2ɴum4h "F:&1rvNzngޮdkWKͯ(wgQ飃xswkci{<'")"֚! LΧ~m? Gt$P>SLZ NBȵ-0D{!  rF??|wzuwz2o;^d4LPڵ냿>Hz/,~:o?}2n5n8пͯW67ǿ9g].,JmϒaD4; I}0n'qM+cձ}H3om$B`cCQDB9B!6d04#W )3r}$f(urp#ԙyOy5H @)I,t Xq"т):5v k(HbP5"x!b/Υ Ƶ.P4) sBh!\@yG9tZ#rc%'D .\J!Q ^vFQf&pV/WBk5Q-Cg `ǬgBee7)2%B!)B543M]ݽڿ6{0;lfr?=ZX%𣏷OenvBhmd&V4Kl8iݛ͚(42JkB͵b%|lA !Q :>> EQ7:,֒CPUcدvheV҆}rA܀dfebǖN8RYV+:(I߅t"8NZ'rC=7'd"Ewk^ZMڪ 26$"*%FBa>#f !D7mFiS#@zp۶DV5qFr ~_rN|: R'S p ׽Hܺ"S0sFZ8QXx=v[\ɩs^p m2EE &k"YfNO:MDcm) g@طXwuڠh2$FȮWVy*yb]kp{oןφw&xp7ߙU˵uҘT^/k L)7 +wfuyRFiy(&Z%\GX)U[lu:m!@aS,!k+ۙ\[v&a3PYbv7 g`&l_wvS-&Ivj+Tdh63|u8>Hi~߂ REf <؃I$bWJٜa tb$!Q7b>l,̾-劑]b!fy|;y5*+ZүlH|_ $ՀLxD^CJ(H+#cL$$D:)x/Pl5Fwm}$TUB֍mAJ !"B!ׄL:׽|IS1<@/ 1rZv2u0> CgL[|b~'C,k^{a92~zZv=Y |X9F8 :y,s+ˆC\MrSNjR@" Be ZpYfEGJ. $fzo7޺d\(ʼ"T~'Kޖ*1:9m5y D>7{߾y脘cT%$R+TR(ˋ,~i9LY+tE|c}dْWV;hj:F}@kYKt/I* qr#u'I?{trwq)TUf @TRRH3ql^ 4>i-CӶoapNH)^ed~W` եipMVq-D8LepF3Q Dub/Cee\Jp 1sBٴdHLD;Guō@1RJ)Uמ88QtL Z[Ng"虐Ei4z $5o<h۝畾 ^Lp5\4.f}zJi/SdL[))!/˰Us?}12-og~g)B|&݃YI?X/~^(pWV>ܙT ]@3/L$r"`H*B+3#4)͸O'Oof*z꠷=h]B$кce=3|˶1IQP`p>DJJea䬝bnoFj(MH"w5ișTGmTYwMU5Js+ٿ4*-e1nifMIBL۶ñ0zENBFRBlR#E5 FDOqf N/TL2J]pc& bk)0(K8#q ت!cUyU`ʵŽL~dq ]k$oʖWcEJ s2*-#*@R P`R$%WxHRHˋ<8H D1IeRo N7QB-%n3F$y(|!822Fg$3C]_J-D*@=gػv).d`:73* _ &z&|EN |I^<?:$MY\dF![eI1.{^naIJ)rKy#4Zn=*:?LW|hvOc{@x8yƺد~iD*Y3άE +ݹ>y_ZbI #Dmn(ܩYM -֬`N5umsv%e2-u9sYMnL?cZ2h) qxXphYԹ:> KV?][]$etd4NfoW;R+ Ĉ,tk\B|/@1ad!E mZ !H k-RC%hY\Z8gF! `#aʹFTR*8lґ(xEj'vG]kѻd2BC6I##1cd@= P!ID0֍'hp>/GL[GDLVuyhZx_Z.n ZZ |A}.zIӪ1 Ρidy.Btv@ʳ܂9mQ?="3.ILPl_494/|D䕍Jgl#Wzy=BHh2Ӭ;.v:ZV|>$Ovg[Ku:Vq?od$"wf<=<ԎݯyT󿠕9LU'FFZ[/ݽ{o]݊:?8<Mu;M2m`bʕtSEky]Zv G1!ub,U5v~OI|gdjF$5T! TTB\`c>3rr,BsJ+I%Ǹ%Ns.mF2dY$]Z mY3F@HJS(1AumxP6ql{ <0(rJ_7շ޸nS4;޾q"QPD5DI= ҉i"2R>6(8-$ȋ@yޓyוA $ NDwDOBJN䅞O,lCCFDY$3 9˳4(Nn|(o^_vJ;U^Uţ?-z=n=?pgX]~(qNa"i) [zsKy84i"$(Ki5lvRRΫj<-oҫw>z<4}yegU@LRHD }]־q~/nܺ`8QrM7ɬo/3z}eyyy-~~b/yyǻdriWnGOGUm7;퓪ٿ^ye?X."?׿)@ZM]/ @!9)e5+ mYOyZ7OϪfF}s]̼ DPNbp"I/-Yp5%CEQ?;HT7IȪmEV@RL9<ehtX̦ɡ~^]J6j^=tZuBZg;<2y煐Y`<01+7PJOƖeDio)s]o(1Shv-[*Tu4Iж?$F&Fju*ey1I-8/# +\OMGDq/Vh'#0܍Lh tN]dlUJWi mM7,\8Y)Uχ3{s{I7O^꿙I P5F]-Jg#1K8)`>y7fyLv:(,>;1n߾uu3rͅ@Bj奜}3ODOi`n_cڕ~ ϻ"~Ο׮\XZ^J;$H6|ș=�|ޔlUच|'qy3(հj]=;Nÿw<EֺM|wtTyRkZ*`|yRThmVQ'"&c;:"料"PF ZaCPRՍgM'#1A%YEAnXUVnyaR1UEc"bMGfKJJDqU-Bh {Ϥ|暏~=]H + D/S?჋-x<\ʨ_v'fgvw(x]$F7,O e:sók,t;_ sWrwWm IDAT_^\Y2K` S,,z/R!hzBJ|[{I>|<j}uYIF7)1 !Fb:™J9lAlҋ֭K];# };<.\T3/c"`r1Ѥ>KJ1/gV_{ 76~7]M]B}2;wRΟ[tƹȴ`ٙw$ƾAy/x0J0!dOGw.3W.ڽk&4@L}06-;'`ye!e^;u2tz4Ω媤[_\X~f@en쌇k?~,j"dDrjь&z6(Hsu孛 Bd8[YρBr}U:Z0 ȭ7attH7SkyHSB!/d"6{EMw"(ΜOR%sΉreELSB& w˥k4{ŧ͔]_UhiT)ˮkuu@YIjbJp!)a0i15] Oxﳜ!1:I۳?fm3B91x_ǖ?Y wGj8x8GIt>quN%n' }֘)%)( H꺯.&ƗM?oX3Gݝ{VI%[cᣅ9h,!CsJlkP]慎 3)Ɣr9ښP+ђ`2)wx_r7$]?_֥2W>e)]|phsR !xC>jr}}v,kq Ee1f/5W^]ۗ/+չ|2RJ ܹ8?5~׉{Ⅻۗzq ?q$,Uͳ4i%(&pE39 pIRP !QۧBՅ Jp΂us_uMhc5 YS^ CѨ1/ 'nXptRMkmb azcM<ا`9Gº.LbBunPhBԚV!JI `?em3B"Q6%)HӞ5Oc֎'@3(ugIOa;?{ *lt20IїR:J]{K+yB p6[z$u G }ObG(GFkRA9WQOHbJvJRdm)fGr, u+ 8%J0.)r9C Ag٬G{#H)? PNyA(Ø⯼݃هӽKVV&+\[}w"ޛgˮͅJ0޷51=|0^y+_̳[v?<74ɢo.!ѮJ5٦P|ɰǻ2 xvp2w;O_ CUQHPBbWՠUY(K5Q<LpNJ.%=!q)+^*$R BJl TKUꥵ[BӾG5ɲ@y^ Gw\LE$GS^SyT9wNɃ"8%w|?<'OTqȱ('zc1S?ΙuvX*W")Զ_|ts[+e`PXheRP?fn>o_RE#ZkuS|M<+!F2":5Js).K7s]X]<4 еuLm&2Bz1MvTAVݦkF2ɘ J!8'&O`pz@SI]{LQG1,yt01(Ff'bwh'}nHL!CGP@θ>/Wy D@q<,5f I|{s7kmhw9µÒOF`R=FYYz $UYdY{?3{xXJcy&\j3c!TiPV$9(M)ƔLx绮+(8lpLSY]ꤱv\N6XUՕ/\>wLVd{{ׯ݂ L4rh?Խ~.siv0sCi.tm;66lƣ,S/6D38GƸw%q˩@ 1C^d]!1Uv >L(7.8z].L7ib JjcMZ1<+8&+7>꿷l`z{pBeE2-͎|u))"@M kLJu=C}0>P(-Ј\p TGL<L"wq!ٴkv^뛚F*6UJ%O@!o;[8'3gޜ?0ۇ5)tnjTs(rθ 6;e6{eŴhlL>DB[QR0ֹ2|pD-T:O$D(6,`}ͻ&.ri_N25=0zNLƓjp b^,)--q 'ԋPTecR٢K10)A.4|ْmeeJr$DB+0}ˀRQGiݤ#@LyUM5><#nكTa y>"=9p1'ENK)B>YQu,y%S-=}L)< X_!y,Oǯ!ȹ3k06kUٴnkt>#|inJ+Zf_ta5,=~w$DR !Z5L ѴmA$B@YHRo1FqSd9:!,F:UeugTJ))tW9c̸xtlY6՛?k|̹[߮|SXϿHe܇D>(8Ѹ]N߷z0ZܛχŚ cq %3yp޷ޕoq_M&Ձ{(@[,DZd9=+T|n4X_d{9.%# .ELV'5mydPC˅s :/^V*3Kڭr^N@EB:Y1 |B&BkNYA*>DCF9%`j^%@SYV˶(AϹS!<π!D4*ƠnzCw[ku*cz%!I zࣜjOgUDt ɡ'1w? 8'sNqgc >9yFOk4;quy1p]}|R ۷ Q[WίWUlE= F_Nx[ 1"0o1IIΌOq)%C¨94U"@.BH}PK!%$1DJ)yfFNpN) #C]X-ZwBfjfU ˊ,Ӭʸ..fXƷ}ԂW^ϝ__wrz5͕+g\=s0scCKQqx[u.SJ1yF(StyY?6R$L@XL5a¾3s)X^|ûk8;[&vU7\ߛ!FBbsB韝;ov3-4$6 zQ{;u]Ǯ)A^,ifG lG@!i(c)aS]V}oDb$ƄkyS a)TpFetJF2Fy2DFcLbe# ! AUZ r$Aj91V'af}tY"l6 OSqq<-HBT Ϣ,I)eަe_tkϝh8(R(a5nHBҶ錭CoT ,BǕ d˜;{Ͳ;zo,1,69_&zEH@4HkbWSoW_Kwp|9-[R/FY$!;  Rd|jy0tTIk)2ϏCMHaLŷ|2\8kr]1,<cӴAe])$S3Bpb e@ ;d%NeheY'$5%w"Aߡu.dm(hftgƃѴ,ʶ5>$  :%5,ʂ2NiB :WigUQ: M?aq2i18~ZϊVGOD3v W괢';41EB4. "` BC")!7wJ }xo@gc-IkLNhy$ι*g9BXt__Ϯl 9<"'|16&իg"! 0B!玲B*f mյ5!]tH!ֳ"yvx\L*B(HqlV…F<]̋앋n&+L )2I=j8,];wl75$nR1gϯ/ԣ_sìmCA 0JqR3&({h8.~C^9ۭLB  ~}mmJ%(WѢ;Qo-RV`c0!H' %N!ϲ몢$4b"f\3ƻmQƇ,k)(,WQ-M.!!1&F]s$Pvwk!$|}]BBc^骨zk} xs-A#"#s183OB> =}?)dEOu?+{VG>e =|$&OE9);9B(m;].卷e^ JkwAeKy@ep:އB pDpjƥƔ5ޙ@Er狮 9g $\L{-6/^15S \)NY+43SRp֤r~̅RZ* )wb1BT2qSuR(kRh?0^X?Ah"XEQr9!QFxdmMn<<:UBy6oyg}0cRo(J^:ƁD`J1>hw.vfS.xHK n߫ƅՋΜ8e5y^qowî"0ֶm[oLARP8$Fbi΅i{rJDGΙ٬ t<&vPA ))"S\qH( eYk{Y*bX IDATcRCy>t6ڮ6wiz+, {j+|┉Lyf$;mq姽x ?E|˻ؙ֏B:-TFDPNMs?WLvn-eLVE a0ݚ$Y}~sC_/6mKF(ܛK)Д"QSBB>۳y ѽe & ]ʨ,xmiL"5#"s2wm+_9 66G6[{˃鏿7x*xYyGB^[o^ZyDͿ{~uLe_UkB%P.<_ Jx3*(|/a"|@H[,+W?^\D^>llH+J<-"$\kȂKpew?xh߷ aR]X_Q謟ˍ7^}i],5/̿|il@A+.c!SJ1k\ VRCXU KR F<=@9k]rJU)n0J7۶E "σŢN1>ӷsA*մ1nB )1s3'aii[tZɾG ??T%KOq !P0pRt\+€뀂imccdkuHڮ=ڙ&zRfֆj7چ "A !(7vͥͪƘ|\{uRJ.y4 !F"0ywB^8 !ކ /2m+|19!Ư|}0Z/{v? {wɼ,?ʻwvxvh~#9n*QR͌툋)$Tg $}~Z+ֶdxf}Yk<)ƦY'K2U"Z]_aE=83%m9琈Tژ̕"8\&$xLSTIUnoyIptՇu~!Qvk/l3M)]%r /W_|\^Oo-l\0DY̚$Yҙv!4)AD;י+kƀ$+2(H)kPj͢IH)0 OmoBhcB$c3)d[6f3:cMdJx{ya?Y{2x~}BKrg1gca Ps;8yqBwZ}D;=?.q?[+!($$bY9[) oQRJ!),(v>;~IvAݟ^UYrʚX礐k,umR+JR5Ȏ}kFXJr-y.EŔuL1e\" !%TC-;*,[kc)"!1*$P@HoQݮ \zD2WRJūbTqQJ$3ۘR`Xw4[;DȔ\?]?}筗_]Fv6ï}nF5h;s1b6H8N}CDH(ָ{ZJ{0σ?Jwnw;75\rVXhM1eR1H4xGRP?ˌv?$[_yK/o~j;,tȄ!o}+W&g Znzg02nz'az0q8  vRPlVE{J|X4B Q뻲̳,3&!sm;x2ABH"_מ<Q )$BTBPF(eY.7eFQJAk|xe= 9;M><"$aגRLvѧ") @+ S;c*lӫ=caG w'}H1scJ Jɲ鬏>j뱳ں)ueƵ`-c@>Ȥbku@b26uAʘ>D p~m6#]Ubqc4\:7V߹7}@} -2"Az*suv:y1R"ThL A 1* l n<- @ n~׿sk#Y_k^^YA&5b"FtԖݝyEdB&n<ō) 6 =4t~0,Ξ29)2F$%Bh Q cq/k3gG8\T˲~ko|Fa\mi-'8ȍA&w>4HBD@$p:*B3#0 @Y&ֹCFsHr2 ]躀D6m+)9Xcxjxkd*"HJ:YNTAcO)|(}JoSQGj'nJ~|2ɡ?Fa6˺^$T&Xwvmieb)yeǥmnlOvn0އ7, %cA Y/Ąde+3k0SKΧDRu5@ m=yT=[6͗J1/8,wzū0ʋDRk|gCJ)uW/z0&\oT}K|0ԄzgY>drS8ԓ|*֝az~Ƞ;8UDžQ.]#PʜJQw}or 1Lؙu5`DS\0D"89nq>8znJ$d쨡@!J<&׵ȄԪutm<('->;GAiB! JRF11DdXye8!& 7yH"~W&H4gF*5CtX.1F.n`ӛUE?oͥxpʣ/;]c2:g 6]S*o~\FxG H).e3ȍ? SX]ƣqYL&+c;ek"GG{?-g_~kW/?~G˭5=*;w^p}WWn?f,B )`5H'2dkT,F>SB:Szm'Ra"\ΗUp[*>Q 1_b<=q#ǐicog x4 ӭO |\,|fj?F1[{<'I0w?|gs4Xtkýy{\OU2aOuRժ:R%dMo7/[2I2\ֻqx%WR(Fb쌭[Zxo`Ȅu]\\(I>`HPH25\3*$ŨRloFɢ\R)HYDt{c1%T+A)/bY3l"XB"ЃޝkORC/A[FiH01 +hB{}HI#mݙ덍UbW^w0A,ÅU1΄Eo=a غ.M]2\4B^~nu8j{MRp >¼3:wwJ>cѴvϖ @ȾW&!:b*WRH.mgV OڛʒeakCLy;TխjvMR R$ӐAl7 ld,~l˴ ΤnM6{ꪮ;!3cZ~;V{nĎ=Ű{=́T{Fdf;;e$AEc S9ueEkբi(գ's(E|KW\sѣӔٙcJ:ќ3]ŝg8nkgnnM~uތkt|n+hW07^dxW7D"k[!us_/KzKzE^[ѓ@Q95 d~jMŲ*wgQuy03{3RbH 1 !(Ɣyd(r:,48f4H%+ #<8=^Lm#v/{{QU.^h.9TUm /jU\B !yDR$Dl,3bQW77CEEsc0)cLL1Ɯ պ]=Ds:MŪ[RJ~~z~駏gÜbgÜag""0 f;fŔa;g&⼱q~hxwC[U8 1z{;o{wªzӾl,o揟=;y2\1 Z@)%&1W˚P ioq*)Xm]k OWsd C 2j!TBih}3N,m}|VMXyꇱl=iɖ0r|jLs7K I[v>7 ^^r0-鯤 |a9[;-[xt/ڥ]|vB:)s)kj|s\eWuA^k\m<8^nw/T2&ƻ0$e) J!BPuUi~[Q S<=k_۪HI19k-B-ص]]8S< } aǺB)]e/Sf{VJAp1#!DX˜gWKqm1m-9o?M')7|}|ggI`;̀0R}k]8§?ӓSU0H+wδMm1t|xԡH%hf }~hm>yzƢmΩlC KW{uޚY{)k 1$9!/`RBO!2 ")h.%̀ƺ3sfñ}>{o?v_Q򆰮㔋˒J%CVk"BBd$$P1d%kJ@C6ͷzl-W(HNFu*8=9;[ @19ISnUEFЛrx7>wX\ o__:_ݾN~cxyeFu_w/Vf:OBE7!)Z_2b[voEg-s4(7 r:hCMݲf"zU§|L/*;u^JI9{EDu($UR|;a{7;~O2IG)RD2)"TJʂb ܂ZbNsxgod7hQ+Bo?{_iPrV`+"̵X RJqF]]9֌?~ @#Ӯ1rfO Qy4Ukj,YUGsvT9ޏ!=#Dm3+/oɴ?LJ,>4lm ǟ|_]=jLqn;nS{M 4E9("`!BFRACsL߉dmJKM@)hknd8Di yX-TrRSR[ɾ하ِnWP捴ە#Z[_dXJ7 MV.] b㿰(3Nϼ{3sSJ<+1[8֝}EssX-,֙\j13ΐ4!ĆIrNbcZJfwW5WդlJ޾|r[tQԺ$W9gqΊ 1rDf6rAe?~qPq׾RhoHI9̪ZDA5[Y3m_nK]W2%H_9_P1"f36Bu+dQ4~\TEAopmaqaBD4u]FIyև1_ů;wbCtmmeB7qy/}-VZ>I%)f<Řڦ-Z,8Fin)86uLX쟯7@)r''뺡SJ]0"f9e&#E0`\ZΚJֺnb|ދk?Tۗz/@d^47W[ ]} h){Œ_ܐZnn7c =~ژM?-0+RV89,ڙeGcy\|ɓz^ 14qkGY%/KYAٶ賂PSR ψs9Ǧ,%w8GDZ4OVzS9P;m IDAT?ڷ}X"HA@JV ~ĠМSTİQQ_~vsVvʽ{ί݇S{t-*BD9i [o Z^sv}bX7X~nY8t9VۦMˬh(%9Yog)B94<ޝ;{SY(*rYK9߹s65A>~+w_<"w~koo>l)mȆ׿|_WeEϬ00lu$;^01%筪A2~0AfL0h)dg!lr.㔭Ðs"$I]6_lUijVu+n?1sPCHErZ& 0KR9r/J5;WЋjNQWx8W|+]>^_%z\a^^6LSF.YAa\΂<s,搞UlwNȶmbc0e*2#C1U+I_̜DU@̌Z^<"hUZilږ/"Yl-;kr.qA0d)3ٶm HaLSl!r`RH1Zk vth/~g $ʚ6YE/l q0zwx.s? 0)X$0U߭m)Wua߾qӰ]5h~#1ם~SU7pށlIɛO?-) sԜ{>Yda9 U>ݶEK)9YgX[Uy߶ B64ޔUyG[,f6ENO֛qNR))~ S~H}?3Lfc8&l_W\A ۅsjgVه.BL8k-y bz6z{;רJ` cW:ܽ(" %?9vLaT£4I$"@Z$Zoes la;"P.@r!FӐSvL"!fA@h@K)@P DMs͢*MD3mJ9sIZæ$)9R 1Wb@0)BiKr|OzUuTHmubJ4gsKPpmL9Os@+$JEi:[X߫Ҵ$N-&ârtm]?w&)?;9ΓT5{i,[0޹ 4 ;h!ZjmJȔ~~_Ow?.6);1OsT~|t\NVdPȹwv; 0[-SfXw *E«!nTpvp%%/ .+O7&C*tB7o6n RBo/Z E&)sEHy|r WfVSdL?N1e R.zQBI)amFDQ]J[JLEEq:iȣv\.i)"-0R$$((dΆi\h]MǴTH)'a"@l$"1P1TR"M-EA@V-Rj F8?[GOOĄ$fl NMm^ŷNŔ{5j4Ќv93EsBL9o߾wg~muMȔ0Ϟ&ǽӼ@?>>@uNcx_AsΥ!"al]|7~rӶh\螞;:.lXcMm -<]FP=SMoT7\[Ϟ/vI/:^}޴酿Ð #F@_/֟kۏ%y*^ .?7tp+ⱨZkKKQ 1"*?4d1231!q)c̛a-˽1Hì MӜmR4=;$`C_jI,smbg sp#U"6X -xclDʻ a]W9gRrsL"B!EC)Zc"$dbdb"2eEk H%}Lc l (Tgf%EuUS991 OW].sP5Mـ Yc]Κr汀Yԧrə SV'5"gqңaX>yzH8 ϼgFKٞ1 g6)ϨlO:MUY.~"rje՝l)Uzvk Đ6*&p(Zr rx\9#j\,{_jew,1) Ma^}?67aG~~X. ǜc\#H1b)U[[kLKr<5U= !S8ヽeJA3gNeS:O 1;UO֫MfF"Yђ1 Cg&6PDP@vJkHB "b"fbⲛl p,rpDe}v.]׉6L0+qƶ )ŔPj}36mSDl4'B~Pa+U$ПK{mF5O$?z U%׃veqC\44b 5N'UuhMcGE;amX8ce}St:;b甥.*!Huy6Zhkw\a ,0sɅQvKY#d$"DTSQ1d뒢!alTZڦ\&iٗ7pSz.9!i|^wON@ha~Lu]ʏt6ѪY4M}}rrVȄ'^ؒL)S1ت}py5JbG3gm9 Ugˌ9W|XVC%8g!8W6L!h%y60tγtu1j)eۏNS-['O(^kWeߦ ]tUnv΍z]S!oKUɗμKxMAfh7y7uHJQ"~1sfE19\~82fBRy1LdN:8LƘ('|3Z&YumۘJLTR`8朶M]HaB5޹=9Dkhs{eDxTEJΩv&Blꆈb{c\!6\咽rNH9@sr:3%P2lK9璒^L,J]ŚK"Uc)3gwc"ZU#p[LGO]x|䬉c”x_;5=|v6Mb }! f)Nd[,BE)`jhls,Y`>OcL[CVZĨŴ-!0<H!NȜKi8 @3M-<9?TPa B󆜗PK_@UHHwq5{{}.s )1ˁe9n0 sΊ֥mRyAUUbi>ltպhN2z<1JmY_Cр 88Ɣ}gOp=*JUUY*!y?ϳ00Ls#q^tӼzQ#S2e釡vG޲O4F)_jc.nacU^K s(V6rF(0@)14 +x׫~[G{G}c&5?y6k)ƒo+;ȸ _  ]ZFBɗ_iw7nwPȿv%/ʫ5^7F5Ž}p7h7q x xx/X m(p\E4Y9oiPUw06kZ$  B }Syg 5 *;T 2O\Y \U)g1{ZR`Bgxc|r6$)j5lĐTD98\4 %(v-PrꚆ٨d"P@bRDTȪm^r"(& ĐJ*R\e 11#n nim%4RJəT5/> )5\J!")s(s A2D< cPĕsoO7~ȒJvTwzCĖ%!,+ 1')!ŜxCќ qbnc6Ꮼf@!FD %fCDQ-lM9 Lh]ux'2xјYD@]W}W[vÊb^.*8M-]7TWw%PWƻ:1Zv>P|=Yom-uU.ܛ6z}-5U\uܿ~xiQv!.aӛ{r .xՑk\UGnJ}(@I1K.)DBșC(TeOFek+Kd8L*9'|zYTrJ*CJa |,<~pwӹHEtCS_>XB~sA:||bI,QIH2+*Z/eOO-=<> ,QK #WƐ*c(i.EbG  kMAB)@E(H3!b.*|`k_ZEDel79 )5߿׿9P[aK.dui:ǙC@8)O1?YopXo'PiE9ǹI?;3tݪun IDATmfחowT9妭l*-}uv}Wn6]]/CΞjdLQRT"MyBiVAo4l﷑ (L9C؎)@a纪QPrLf1f769>Z Q5qFs l/ oL"P:KK johZ W'.WDRʥ7V{K[jk-ƫלr!xZc_wMVUL%T)1FkmV()3*,ڶ@[N4+L9 4s/idâ6UYswZ ƚ$ytRy1)IH?;>8m E@aJ€{8D Ie9f 8oTehjߘ/}wv I'c>Y .Ƒ jH6Y@0i,cJH[2,) lبf* e\f}ZJS7:="6sB{ 4+*ְjOnjUE*MݐkwS]?r?xRW QM$Eas8g}V?+(\a-R!AR1S\*1&M37g9?;oW6KI1}àaq R9-=R]7v1ֶhJ5vY YX&r^ӷ 7ڋ%Fw['o־tm oq-tMZ66 K{ٗWc۵Rs!vk 3!0 +fDtgA~ʘRB Z5 sݘ" *%ggvڬg50"sؘ1GgÎ1[UM)SI egOl'Up73AU9lq669<eBLp]{o\TDeJݍa@R@5," "HdֺB@)HH%PP%3"uYLZt9#mkWi"ךꃧOS6;Ծj릶,^p~|/!pu8C]Wyz)wIߺs8[ e[gg㌝"mޤDzmI24Dwo^v2+3TT1`# ~?AbˆA"A!@PL)!^fv9Y1Ǜj+g~ofl1>RKBk /_T˝2ʵ:`3b*H`XK|SY/Em/Q60^O΄~rp9QCvRio~\ zOS?:o(~O{ޥw)׏eOn',U|d2<>uh'ރǠ@O7r̹(2T*pqƊ4} XWm[Gm("5TK-U5۵.xݰ$b1}[K5,1/NVMDL]Y ( +lAQU R*,8棾ݞv lBkPSIMEkPU5c-0W!B2fWBD@(ZRJ^@H,Cgfڶi.ˮ R37u3XG֚\*RWGeFҮ s!Xv/{+8 M0}Ph'mv|3eC>boyv8Mic4٬RjmB(Z0]3דmu7)Mq%vo yM<==>>=fmxm:Oe8D֛"d>ɳ$X] &2[PS쑰>4C|F}Žqw{I!|=<-f>"xWnG=byQ>0hɂ"DKqy@seh@q]cH `aP @Kn 15Yk-Y ) +("2hJEFʉsZ \X$gYDQEPE\A/ߞh7?:K`Q-5U`HȢޒ1 *הK-e)κ9US)%9'{ZJQ%@MJ"+TJ'_+fէyfe؍qWn}qU$㻶RRfUϷGGۣuM_'yQ ??j(V>8ڷ^DcXo M,׻bzTIKxwU-9s:y"k3H$g15DuZ܋UR#twѾs"ߍoxUDP/~wszƮvI^@ȞjXDƽf_Cyb5/}zf78]w3{ Í/[K,{ )gVxa9EB1vI]JYc VPa֒2L#];*چR ` 'O-BX&V y¦!n;Y;3T DJ!"0ж@U2 *xs!Bk"ZR-}=6nh|e9h Zp$WJND$D_ZE]j;kHAXc3 "ܞT **3W$vo2ǒ-AfJ."LͿo\~ze_f_k;W:gEI*כ?W1_C$R קǿWEt)ӓ*םsԩdgwDOkhӼzݾ{w}ٸ<[ ,ǧG߿:Y5G׿?fUKx`R:> v*݅PU ?;Xw{XaGc }HҞ!pzWaȵ2kK9K Z Sdð?:CĹ~hyT3Bs$c}˵F[fϪ xw/p  "tm0ƔR J@ њe mRw:oD4ݤ@R(w?x{H,I+2oDDB)UjX~5VX( QE~1!iIE@}ިu]府ğRཪ &8DDAɑZ$+R|}5dhɖ%C#2D_b{.obC|ymC` ԁRp3I,O_LjlzZf&4Dཛ rʪ/ULQi;'Z#˾I%55YX9vXrRW͛#ռ=9)mN>t؁B99/.wQUm}X__U޿XSyugb+,<%s@I!4'}y?{=`d-^(d sqSz6ҧb?d4儸hC 5"9#"j[\dɒm}hsU30N zgtl7\oYzqDHg;:sSi823=}9 |K/OL?ne.\pm.PJr圛030]nٮAa7 1edVadgZ3T Vg}+scK֒ͩ>xwisߔo_^^/HW7{06gCgU5owJVMnƑh+m))Xs@Ru9xCDZwEYޞiDt lHT2 heHJ9B#"z*KPvDIivC{QD?a6lNե*+қ125!RyxݞRr]JS4[s `qP&}{O=<R#qc1QU*p9X6 jبXtDmBIk Lq8v U%R* Ihh*4iZ[opޝ 1Wm~#RXT(1]](t^ 9RQuyqrb^ӻۯN)/)-o $thDZ afU0}L /f2!1@R ̲_a^^*HSօOR *csLZoaccrUq%2!k}hERxߝl]j/ߪI^]]-dQ\w#:fMn\AZrεVc 6l +1\mxsUu}<ݬ"iH֫ZnmE<~Jqx>:usDל~fgb9TnyF~/'m?I>  }vw/G=?OA 37x]!▼y5a_9WBt֙;BPu-3N1\fLr7G}Ӓ7a?C$cfؽ8>2"xCdYgj RbOU F`φ9;w6mdj]N`AػŋUu?1rM)Ucǭۧ rNJ7-" @D2dXZH0(Jd5%+IzV]0 \iDs.yJS)z~׿ھ1es bg5T7sΚom^hRs.N_ڍÑ1'~_AQ0`0Xd/㒝olJ,JU Unx_ĔV"U2cQ*'nRisi.i5ca&raAh߾r㬟|M'WRW?XOWZʓ.~<_ Sw'>ӡPzF'{>>cOW׃Gzfiǫ3*"?q[% y!>xJR?4fگ\ "z$\k)%oOșUj-AўZtAc׍.n^uu+\QĈHWtGvRyw,(A8~b@1s>TnO6!"2W64M{7o5n.|C¬b7jq xrRwAΡ!uVYj1%b @P1ڦC,;eU8ZB $f8]5_ɦ_U*;!5 5:w.PJ/jpN$K%eNi9f+5n7*r2 ׬S!w=;}ӆG픦oܜy^BhR>h0`iSEXR&))3(Ns,֒(,RaPQ-η BOlU/F=G"n?Jj~=,ԇ O,:0z5Յ{!DUGfY>Q}B¤>;}ֻʃ6RP*)(,ZJa<"">8"ޱ~'a]B2XS ;؞|vd@Q1;uR\bQw֚"PEk.G$")& p!'?G0ミƴX2gU:9s6q)eeZ˒yFRE9',h+#"b1:GJ{A")[Ej>xo (^/|>Dv΋R2} ,{L? Gm]4CyS3#?7Gsy X޹Mpܪ5-%"ለd44p}%ցud'Tɥ_M5˛%Nʹ6Ոg2 bJ9gdjNxI;o8::{#"xr&XQ `!.;(Wֿ|u}. E+U^4;,`03ׅ͉Ha iZ摙 X8TYEFT,·gUMނ]Mdgb ʥE9WP@ۦ+"!O #\[R7m'5ݔ0Dk1*3[z9};3BN:**ԢAL.#ݸ|qvOqƶql8~؏/^H*5WҴG1NZb7̩m\\ߕs]l6ַ}L)Ԇ|w sl;,;< H} "h IDAT>}H>M,p,VP''orQ,Ԟf\{d**@3BX}g?}NϿbW;9R[t֫$,u,u9^\EpLg.bkO1 qRsMNzKbe> TyZ p0,DZ " HefP,rm۵mrpnqVsck*a)z"b!Ș~{iڦi)(E2PTAPX@JEvlUQ%Up*9kPAφnޮBf?ǣWM 1%Z1 Cq9:o-"PZG eW^c)>!YrnG(zfN_6Λ"0'n67¢ !4nlMc6KA8l]˗U agKԒ{t\_U"8F[mD9 +C4>o3r@P~ w{XG~|S'?sRR!V&6|^D|f yx3FeI:*mcOAlV=3)TYA E d*UM5)ffRJ\n!jPEkPR3(x6JnPJͥ,\.x6 Y"c&cպ5ƹ"AVQ!RƐf 7Dd"kT@E@}a.D$,ZUK-qMuJr=a>ωQCd,0S)dE$~q6Vq 5a+۝ؼ𽨜lp`lIi`o./14u߅`(Uzzw] vZ2NklY\Z 뫩yV%K̥TGRKp]S@oÒ'x7@no-OyP { Jz/%֩nIųȨi]t1*,:RE?rGm}t|bsNY|ӟ\N_ gxUSfICu廟3C021GfV c !'[bEvC$lAK!"Yk`xIs",ʼ9v5REJh@,5%ϲZj[jT%XpY4h r%kIJa+f BΈH. g̋I)zwr},~lETVdDdIZSEseJ VuYT(`R{OD•I~e2s ڹ;кrk ҉~{4Z @n~ǨP@iEj*$bX5 S׮ ,gII.x,z5pPu]uJxT+;B[Ln S)ġ sZc&BjrZd3 s8>cg9:zu2MڑKy(y>=Ŏf>ah?ѫlf_^tEaDBPn ǐχM}sFВ ,@Mwknؓ҄ 9G9R!V //7N!85fSY,8Mΐ b-jQCS+x9\bB* P,TA֌@ɠJ%j@Rh䍒͚9mKGp}ll TC~J*u9Ruƨ1HH",̢ b}X¡*3Yɉ3ƄZkN AUڴ 2:p4iBQɃ}Jqq> `-Y8qց 1EfޗݰkBoH]kAaH&l")ɥ<c. !&zz|ut[ (YY70GNsX:!VU~AYfMB;#8ǹ?B4Ʉε6y[rM'D~s'''109 Q߸ܶ5vITD5beZK4N YLX J*fŌ{Dzo Q>*c(5EͺGȶhH5%vcxC0CDP5)q:*E5!YUbE5VU $PZ1Jec,d@FCee^n?ϩ̕7Fwü6p)J1V"{d$v,е@(Zˡ=GLJGK}=ĩ\!:=FOlBM7\i>o(zL~E$[ ED@֮7qe.\~.o *uK!0Xb^(qd@žr* nٚV]v%ƜݔcW#1ZRjz3o^B\jWR/Up15:9הʪoqV* Io}٬79Bێ` s>د<H|RNʹXn@,BӐJɚ"TS&ZoAgId}ڳχ|a?$<|frVU%oy7pk.UӞ1RGT=l,n}`܃ ?6/yt.3+mWSӄ_x27sat^՝ 7oލulx۵?2> 03*hAl׆֢hIo7] ǛSۇh1M><`uK6H#udbιe'!cǒ'$Z< QEKR1{j--edκ(&T.zUjp.{OGzWMef?mE:#2샙Z2n2GW7ut~uޭ<͡3HqZXM?͜r!n6[2^>׻+9j* m?MӮu>x9i~DJTVU44Ϝk%5q'ҼEuT3Aej(QX],n 6AYCWGQ 4GY>eLG째>z߿pq7!y^7s7>Ŀ7uWg}ebϮSSc=Գ~GsJ[$ɨ$H{t<[j2R%@цͩkߢ1:uK6PTkB]0ѲTX2qz*<ʍbMEH۶8bO[o1BcRr%ۛ^a,~9f 1$d4MxkL܄ՒZހ dzUTD5msuuqSc#WؤZ6u`W;Ynƭ@Ag1N4 ym ǁ 7+|phm,vPDp?9XK&~U[s~vu-KZ{o,:1f:خœWq{^T^~cbĂֺح>UUe|RU*Xwz  }I/"_xۿX_q>w÷Buv/‹םm?FƛHM]Zk"u6Ekqcu߶ wL\m|-ޖd~zyǂ1$AOfQ\@4OSd& SzP*Ou:р xdGPZ uƟ~/<>8MU]g_ 5_yӦw~<û…_?wᱼFAΏh;"&kz0 ѹXQ֖+yvpd w][OP }_Յ@}ߔXN,CmC]BFpOuYJf4SKSP$c#G;^:j ZfGK%3HE0tqЉ}!p+Lߩꐂ Y̸#Xk g LȈ >L(A V ^I+&x'q`DI >--O8Ts(LQr|9;GAo0R-)芊,4ܟ%_ß/|*wñQ>/}RO\ +-΢u#7z9w[Y9UKǀЇt͹uz-啮x:ԂRhxynR݋?|oq*4PxaIw+PHh,X=DϠ DI) ^5S ~,J]o=\ֱxgh{;GwpДtmEi:%VIlcqldmB$EM4P(!(읿\. P%VOνX~} wzĠuq<Xrh)@3tdzavHԀAGDN[ji9\12=jq&gbqzubT$!،q5 &MLAbIkS9]()j/ĚУ0WaD68gJS䩪t8I)}1t,@WWp/ڼ^og,_WgVCӝKx8iU)VRiqn>d !xj˪=w?|9zm%"ȧ/OD 0/*tϗ v ^<9O䁈9W6gm7:=w=m@=J)kp~}6xY:F^NΟ:?$/:zTݚC{Lm; źE=\A8n,e<5UtϏEҦi>~^9RZ ޹Azm>0}~QEru[]/__׆}\//BHDy|p,JF׋ij8|J=EQUU]o$D%5O{wxwnJ||h>|l i}1()+h N@a lq\`imBtq景 )Dˎ|fE;C{MGo=s,yguysO`ۂ=gM7up0zȢBd@@!9{SRZi|u܉ө8˭ROO Mp%{֥S=D/P FM}6e@_TFCry~ B_/~R/Lu~`t]w/m '$L}szstI-nz >軻xv, -t)Vu_=-$Wi% IDATr}ypGQ7ah3e!+h}wwdY 3S ^?p_a d SW(4ȑQJcYs48 8yҾ1LOMrpހ9-TsQA1ܒ-Na[Ry0I\\".,a–Q&6W `9cִ}DB q1QOm؎!4[ ZTW`x>Ox>=YI׻Si৿zTaPvp:RQwF"mw:VvʘBCp$`Cp^_Z'g4xyxw`GBP(>LJj( ENPpaWF]3F*;:xBbYՕ }p}ap4 u !QXQҗϺ L(V{wQZȦa(+xGa< ?zPG ¢UYhHhLw`^h0Eo ZEy L_^(8(k9lnLRY!e__~ ΢0C Dk[;0aHUm ,7zi!0 I)sӉs]{놮.E !+S ]k}QdJ0U ;NWp(|xLxR%3Ei՞'}g0xe)!^kƤ#AdŸjN uxXc֌qccܡ4{ƵI9Ӎ)l\O1%Uq:  pa":JԵ`ڈ6uS,[DziU1x]*@?|zUI x`f !0X cMIݺ훺yyH)ORr{t=}}9!x|zޕL蜵ε]/ wCeUeF"P@4FBDtX(x:z)e|B~SvȪm2.<UUvRJC`mD!d}º,ͩeg,Pf)C`X&ix71K qtgqG8+Ł[q:}8n2#3]Zn U )栵jwxJ,zKux]4")[w.2;Tf|UWV4`M@Iq%{uYswXk(?vJdP PLi>84Gp_^^.2 Fe`hړwח2Zeaq^^ʾ!e?t~g8 Mmp}qZt.ԇcYp]7mg͡TZKcj`ٗ'WZC`@CX|d?EykC;=p l_h QsvP8;}8TJZS㽑 )B{RΑRJ)9֦,0ؾy Dipv`Vڛ"`koݭ`!03bk-JTárkD;ނ)O/cQR:ԖM$E2JjK;I3د&13 g[\1]'b'm(p[%821fFmFq="Yx*:B^ ސ%I S`sws݄Eg-4;r.B*CM є婩 B #zB`ҵi+=x^.vD^ȝύ1RJ:wh\ RH%@ >a| daԈ9g^/}\iޒMOΟ>ILTUPe-9|>P!V֒T*˫T im{*U`?uݭDٽTTG`R m;h g FKmDYdyt ~@[pn`ovwnM!+wFB32}|/ . (w#P|:(uB!(TBn\ڠ)RHD!pYPh#m{ Bps(D=!ܮCۥ;w{z · Z۵O\ھ6&DՇ0ޢ}\C_/eYEf>xSo,'(D%'#~ו8Sl+UDaƊr$@3stG+ 2Gm3MMxΗǖl(ƹ4,]l3Z'q:q3naiJFf!eCB~( ]]ei c43Ԯe xBBjϡsí^/~ZDVJ uS s3R|p(Ⰼk޹X0+ZJ䡩JRRBӔυ %> T,@[%HrEQR )2 ϧc4ގ绪*rR@n(SuЗZgJE\PB(f(LyBU DH ڞxlyf<m{| ӹ*@p*4_H 7ԚJaQI6Jj-š9uE!4MSFMU@uq:6u t!,(O DKC]|5M%׶}[\&ܺy:?8uíuqٗ׶A\ۡwznaB^_#4#oGinMfyQ{ʠ?W9H23l7;d(6OY|WlY`%q8q}| R(6.3Bp^xwbbٜۮ;ž?~hVȠ4B_oPL!NiYA@(jSmoLP2b! 39?( v(0$OBj z;uB` P cQg?=WPC_UT5{;2RhtCKx|.F#/VHb%P$[;tC}|x8\_A)u^o+oT>xr|8B6 %{ڮ̠PѶ|v!NE@ZR Rj A5Uh+uz@\h;@)ޒ*F 1nC ຩT8໡L@J*UQB?|`֑GܵVJlPCeBtH x|pwV*iL@ޘeYH`_Cv7Q?~x-+#]۶7FyoDtھ$P:O(<)ֿ>Z]݊q.ӹZ:oTTR @iǝŤ'd ҹAt[bF (..tsPC_M]ZhJXqpJ|P 1 8ޝ@1.UHvBQ w߽s2`)|s۶UUihe_B)ޖE(qAyGu}de*m$R:K۶R\;w:{G>s=޹l`8b @9>Ke"qLXA%af^L&ZE*xЊA8.y&EP5W'la\%ܦctB0xԵ@-ON7sgNs'S(e^"9Ί~Dl,F'JH7cښGoqZ?~ь M58+Ss\/^iQmMx]et@wBp| Rh9X+P[]oyB 䇇{"Rb\Cu4";Veݶע,n @>~l (mV*zf0yΔ4|YuR*"v.ƌε=?=8m7^BT_^tQx~~A>s' ZW%[H8޿?4*{}lʲEYTUpTnV}zWݻhݠ$ Pޒ6@R}n(8ֽ}d۹BʌBVEU,JR\YBHp>_??/a م|o췋o1h^3)XΉ2!@c#Y1p|莁}ы7M'S1aaAbfQi̟W6rL!=cO@ (-r2:y(iKM7q`Ly EYTKPdj) %p%Kş)(2ź`=u>X2 Pξ<;)e˚/ ;t(ҭj*a% XXBBbJtz<䂷'~@l ]˓'o]o˜Ϭ`Ђ%By}==޿ݵH68SK}-jyi?_FvCOLBVҺ HS?2VT?>Nj sKziIR %>|p~(*vs5W:"tJ邷vz 6 㭰cqB;#0h>IIP(^?ET "ecྒྷRBEɭ:[UP4}-?Ļ(,`MQs(WJ*-D`hMP#jB#N) H<Ac+?\YjւY/ʛQnj^V.3U7~c*|>4GҗǢxݡU6 'l~oH{#yۚ'iaF[p:R!FCF2h/q:f LP=oWLA  }ILj(OD`BwO[a`FF""D/2X#ޱ'qYjB8#a6M*\r(pᇧcYcKN$M: |) R (pT)1txqaKy`ٶ0!#QuK3I}1M\3&ӅqbŬQdF4a*Yϋ'vp~؄Q;O[ ,1x!agpƎ+G-iKZȌqkJo{s^#؊p+lu('+)F$rUF8L=] 87Ƶu28Ǹ4̠yff d<(X\FKq1q.ٹ*z rY!}MGƅ4fLg<%D b6(0]8icԖEH4&aaqBD $3CKyK/iD DK?#e9M#o8ލsqeCOT6RVJF]@#[{7$)ǘ>mZ%='EJ1 @)(IK,Uz|#fgOJFȲ)Yh30 e P8M_+>mOY(q~SXToK% /: xK'[ajy'EvIM6׍6 ۯLocQrXZ&kjwQ:HHeŤ2묦{<‰#$Uܑw@) :1D0GOa}qL ,-L[%9M˄ٓz>N]hQ[n߼ :JuaVXFqr,%!K"BOȵl?ď$'\T"f5f|N?3 G2d2lH僻i͛3=bb)э0+e-REm>GI!0gvK5ĸXF&tgiJXJ%6 {1;8X"ft(LђF.e`{:ý IDAT.T%B';\|ƭ`$CaZ-'a"wLlCdF5ܩ_3SHl ^KE]`=s4(.HLwu6F(eh^o)æ_:~O3&<(vD,W&OZ-2QAN:4X͜s".6o(o0Kp?Wq%U$o83k tP"oƍSW*m*&Z:40'}$zNFv[~ǃD)K[iI:`q_ocN{LU`Da 5z{މ7:|"JA 䘩m@g9d!MPZQTyBa(5V|X^i,yfIҙ((j Op^ݛ\EKS{]# cDә~eZMkc L!A.75:~L=~y;/7vtV>-_#H!$(^ xSoujzRaI|tց\#ۣ4dLp#ܤ?8b.'cjf-T :R3@ikW 7lLIM( [QBY!*CWf3ўTmW;"#nx0 %]LdUxS+xRB7ܥ||U7Mh[]A:g`;T{$ ߪ02xbpkyZT$V1"p,L>6zdtbE.yd槱O^ QY\{JvDͧ\~_/ `N(΅~z6?^]1S]g"5Ջ7Eax?%IS?qz4l#=ZRd%˶|0ZHL>o* oC?la?^Yg#DN[R 9G-aEDE1PheǍKpx1@)D{0ڽ4;D[;8vr  diz]c=eިJ5O`,ȧbb=.c a͑bDoɞq2fAti%6<rL)I6ǜ$v)ynrN@?-`dLnfWUc,m,53s^V Eyva S (omiA-Sqm߀DN7 B"/yc7ʶ?|o7KXO<wRu4+s`>x{/w 2aPh/ p%8 RRo\ȭF?K){LJJUŦ:KV3kZ+k+B|_ ql.p0^X[yN䍣U ,i& WY%B>U vEݜ1f 4%k]JN|6T6h7}[a ']۵`g_ȝ?;nH)df?ず?*ÝI\%YsՈ|fJ=޷fBiR!LE'Z"ElKayZpWyc߬>YCsȈnoضIv-Ij6%'PZ2L+m TT7&ґbV ./_!gl@x(?Ba&xb qij[Ƅ9r,[X`|K`3LqmmlƳy۔&ji|=t'3/|1L/-%U&i'=XA{=rdPf/nكt3Y{=x95L["Xkt"1"~HZ!-6C}Sf8$o Ֆ!37Vu lqݰOf֙GH-F2zk@T+?]n1`Pbx}?_^]nVy|e@ XE5?Sd- gW+c|p%7|۬g)®ۧMv7#;hڞ-f 7N|bߘpK5ߩBH|iHU(~HTYL<0l8J4 -;9{N @q\qD%^RèXG,h5 ѤLR1\K{ioDBP2Bĝ99H)pNͨ߅lb |TS^wӓo22Ct񋖺[NFKexx'Cc=e-,j\#3FPXDҩ(Қ$DzS02Q-־p2 1gٓ&l F<w||$F NGDʉoc^?MMOFNQu>Y\= '*cNs$X 'bTн~-{i?šޢE8BtH#Q|`UpM UEm~vڔy,p 35LG!ĊhK]Jx s: Ա`}pDq}S)H:?tYb˦b5s5",h18^J[{H. 1fY+k I8+aF7eੵ;SW|2r(fn*yxsώ"zb}/{vpSoο_B?0,9!4m(M|5fL)_,/uFaeg:TX{^WV-O*m쳁 m[.El`ވ ODse+VPb)G#610"e>q#^ v^K1U7, K=uXH9zpig;/EX<$tXOQW)RK6F^ Mf~7U[{}dāD6ϱ3?{F$0WW?cu(įO sl3WJfH4Ԫ`ݤ0lg2)m4S@y&q|R,I4xO\fq)9Mrǥ')qDr&&1\Xj^>Ӎ[uڭ)qb`?7qx<ͩ'?ֿw,D<Ѭg(b}1^G:mvOu02]͇'fi8W,`S|0+6񜅕و4c; |Um5k[\6f6B0Y$~@wTxx9N]1 ˛CՐjDnӑXUR`]3b܁%^ʴToޤ>5|~-d7_\7K@__mK<1[PNڄjTl|k(w$c.urIY]v+[$p=Ipts#"y= 'vd>Pq<ێe1RB$7Ry6͆%iDӼ0:M]-Y3b*Y G  _z8AGEGoz*&T<8&^HrÉP <͗#K-e,P_@Qb nel<*,:3ݭoW1|fd؆yeۆhKiB J O Ӷ]4ܥ&ڣÖ{3[\v0a\xؘlA"G4_K<59xQJ̶X F׌=|KUWvqB$dȊ!Eit,c,339qKŧDD4 yw9{\J \9EV𓜋D.۲w_T޼<,pwoVQcv֗}~6m}7f5}~"vŭsG}Bv'} jbM:).'$,?.v#tbB5$:V7W|"? )ᨗT*=37GW9.yX ؙ#W\G$,EfcIL5$CK^sws>ɕ$ߜ$>^0=aVo1ۆQyr<9@!QWDdcܸu(67ZXlёK OI22ƌi: J&vbh[2 %8? t8*Z'z0,[ .ÐLYx A8M(0/;eqMOnu_W>w 5f8ZC$W6{mt>1ycC)|>wq6l[8X7zu8?v–L fW厜fLY &*oUK_ Pn%xKEgx5%7"b} ĩ TKV;qȸri#LYr C-f+6 X~t p~\]ˀ$gl0Wt!PM8oL$Eu6vYsG2-պlf(gm8i<Ȑh)cd=3!+\E/i68م|noGA9O+{f ]?/ifH-ΰpۉ!Nif= 15`\M)a|fF<'5)?P_@\? ' sG4Cf-hO64X6e+1/508zAv&%[dOҨA~Wy7k3sϝr3HH"&2* ADT@dv=QL>O|8!HdF$ C $$!̧Zk]9TWWڿ[5欟i?$[!S6Pi,nO%S;\6sE ujK;<7s;tS^6OIh{TxA%TD‚_7 ^Fgu:bǗlW 7VX rn%[wt1!1z0d>>WJs%ngaoΔ#>Y{h7܌zB=6{[4 Ӳދ"d&Z+#y3_SXOWv÷Njo=zthrrRsf-i\|)Q}۾~GhF*P Ӫ'JKE'C;;EM k,d5dwhljJ #=L:ԐH6ADp֍j{Sq:4}՗76-X|JjA4)׮A]Yva~uD爥qAX|s6ZrیLiõ~G=sN]ڹ;7}fW(g;}mIՔ ,@QfPvk' @<#nCh&b“(J? jy~N G;{:O&2 jIbw|pE̡!Y;'-Y"]m#އ; d]JQ֘z BwMdaXO oS)}O|qu<d{s ,E:{̉EY=QG>8ػ@\*mWTR S= qĸŸul\\7룥~@$O eAd'ǻㅃK~݋λn8G!賞/]ͣ~^h"aƌAU; }iz"BHB T#G7bԟ,_.DNkv{Q'tj[OY e}I*,{ݍﭬ.%ˊ@mrlUiqC2h$WN;7גWVT,b!-xMv[JY)|Py8Q,vr$ͭ(A"XJxv^xbӟr,S1&TlJUD]W8;֎Pם~hff?=h",:vj֜Tr N&w{/̐lIzwWaxP5 1{4bgXFIDVTy~3&5z4 zwc߻=T''sb"?Mr`u=8.Xy#gHԂ{n~~ HRҙyw^Izǿak7P#x(V>%ޝ)[Z)2y1IDSN(`m^WO[9t9qx!~ 7]tϋRblTV椉hS꟧mєRnbq%j8ErpZ:NӤs@HzO5@#Е@1U'{JoCIz3P3>yLPG>V0.{mP~[I o.+=o5ՁRz<J`XBBp IDAT]k7ϻa&I#xL,9ƛ'?x`n4:m /-//?~|~~~eeųD]0PZmѥ074{ҔX8IJ,YKJXKF|\i!4a3mFhԌx4u1vD[HIVZR'c4 MB0jF''%'e,R"cF\Mshee'_zJhj_ھxoV*}{xgSM$  4H"vI^@x2G=>5/_+ 2^]w&J UA wǜī`!b!f&fDHp"fJ$m[#I9z5Gg̷m33_W꓾μoDTCQ#h?@A#iD#‰'FZh- l[s1wZ)xF̬6H{+ؿ$אڷrM0OC o|zGAp4JBl2kḒ}ysξut]77{lmm5!,ƠO$gF+ at.ɞb)PA2i)"B]VeoH! t+VRq(U3aǣ$u8NL寬H-, .KO|(,YZ\[n}hks2~?0?W4Q풦*疽] ^5O3t=~]uYkС9?cG6enD6ƻ;ul՟^ {uo[ۂI8 N,"~Q/}0ԳN}3}Y6C^N|g_6 8q(=h iLE$A~ܗy^#gJPK 5e Om`F짿O!UV6 c{k3&qW5!4ىD22A)N,9y=˗!O#?~|!,Huvw/>'H~)lgӜhej!v]_Y36%BH+k??3;۟n߱ybԌ-H3aWZ1rݒt;Q^Lnm3/-,c{\wώrh9Хf~?XA.2#g ;m8' FUbSnNȻܼޫS|nٔ|O㯙ƉމmgsDD!H$,չ,T, a~q>_)GϿxx8=?@=r6s+;̬IPkz \?S5Hi0uMXI/پ9fгen>nN}ʡn(ˠ&BJq n8-v7'q?vǽ҂zC~;wL/"%Vz pwN˟)/S6Ms5Jë=I.mZ\+ĺY{a_1  o.AGr q=|}\rQĀƜn#H8L  ̕81'pAn^Z^םuΙDyԃ@\7󕝿gNgS@ULViK Pp3LQk򱋋W\됴&~ew!}Q߿sS=AR';qTv#?\DQJ(*@:ֹ:u-ۧ~X0t4 č^vE}=$ۖP\QTϮ; LT ߼wo~ |ӨVܯv+9؟Yco{}3B`?FviQn ;`UennO==.6 Bi: SW[ ʟ:n/KOy^̕Ģ!KJu;c+ӘHD" DADup?ƺo?qc+3SV.-D xԜcm>Ý#3?Gē7<{ o/xȺ) 9sZIi05U?~M w; {@Dn)U܉uIeW%Lc|}ސ-98# qfܻciv,E}[$uBP a.}gn7&O?suǶRiZ!r [w)'YBrC@vP`[{;N{gv2 d{? {~cI `'~uǏoe"lI]U^Őq ^jJg8-Oֆ<7&,ݕK,"Q1Z@v6\aAo'Z[-gu p͇^O?E``}~n{h-&ƛ@Uȩ$LBȦ!ݣXukbwʁs+X:w47/{샚7{;~.=z{9vvco_5{: K1v=<o%2U|{O g1 QޫE'ۿyy]*lzӄXl}m5NsY#nv*=+94 ;76C\[G~h?OZꪉzisEɎVq5}JڬB:jGŶӌ M{h.{FhpAv s1  jzvcbqWB&ܽ)c`= cFM:8xv&X%^z/ou.W!U7Hq.豃kn߀ qAA$ЌP l]ɑ&IBET'^-|xquq4[_Zw}On{237uWb4u{^q ׫/ MKc7/!qѨNیnOt:)N +Ⴓᦵ_56Y(!=y~MYˏQv{ole֛fW5^1[4.{MQ)m˕c<~O==[g\t%$ٗG_v߹qvv6[pEI=}Sɔf(q=nF4waX){[MBRV[( 3yF!&(Qb)(v/6K[LלƔK>'E H|UUzh405r'PN:ujV?5=fg+/Wᱏya\||ǰHfu@-{CXc >Y(HBu6z:23?ߟUSG>Ït4+x&j|~u$okfaŪ4Sp=j zTxDyD>Z*mwX;$L  q>_ zG;ڹ0!{dé2]V*\z A6wͫJW;.MX'R縜/s&o}څסsv?}6>{'^";n'N8p@=VfJq w՟ S.ϷqQ;oa$ 1O'ў/JL+Idpq#~Ed@E}j #@4S.~j6!D %%2O`0 iJP+'$XЮc_s[0՜Q4wpxt{c||3EqDY-O#uZ>kKk7r#BPΪ<B  e^24?3:m]Z~w{S# n_߭G&{P0ߟ zUa36:1ff%&Vf̄:|sszR21'cj j=۽!hP s3ՠ_>Rt7s8pNI(hkY{0{KP_# [םy7^" 05~MMȠ}d?[r s=Nhk a8"UTMNu g }$@VfvdhR݁+w^woݯw@@QP5$= 1uv#qf7Ȥn᥂*Dl6-%ac42;;; & BJw:E" `;2nSoG[^FifXGI!E H͍֘oD4}yy腒, N3SwcK8mLi%q>! UF+n2#$ѥظ[_uj_2dvxG)1$BHIvW qafq~0ȜO0Kǽo}ueܚFcBHAי d󏐌v} zUU]Έ`<ÅŅfPӻZ}b ݯ{qńtDDf/yss9li>;o__<\r4Ej !0 ҕ1DT0I/T^jDpVF h p+ؒ&t G ?Hblmmo:L5UL~*C PHI6sw-m^ЌUz4ĩ;wRw~"nۇ>p͍pUUcL)H^lBϯ^gW{ZU)\S]G:5"諪ȅ?S;Pse[- D]H|\ޛad,jdgbNa8$ 䕕w"'UiMSdk@1P@1ӉQlPBV!@]MzuhD2zCHX|Oj~官дF&p~k/|ҵë6d/eEX$[يΏ,lB0~bXׅҋVW_\Z st.`fHb(B`+N)@ؙ(PJ)YZ D~YHD"#! <+a@bX$XórB!D jP^ UUB!8mP_;HJ_נѕ/6ɑ_U^4AҹH>JOWLﻗӛ8\CEtMq$nXhpmvL+-b͝o  H(' aSʔ>:p# pso{_{ޕ޾ja4-=oaYy3d ;Mmkx9 ۛ,J695DSD$)\lzp^|ﳊ@H͚x%+k"`n ZiF;bR@ņMO4JA?eFUI:)5b)IJ7DS%۶4q 89lkL>$959CLɊIYk;sjRTrl}/jhدK'IHVjID;Ǜ}х %Ga+ lWG!p݌RJj* 4HcU ; DT35\8q#0KI4633NQ | fda(C^fd*B9}&h~O={ 0ŧȲi=p+|k0@Egu+h,eK䶸lhC,?1;[wn43H%k+a6Mk!2͞U<톅K=Qf>=Uyz)$XFLX ˙PB1@8qINf1안610UPFMԳ(8R  č%%V̜8Teccgq@qᕖDdPSt̩ (U=yX!*7' ?dl\-  $`Cޏ!&y" <=JRY71@BP]!űR;_QzO$hagq $yN~dKLPQ+$zӠLݺ6y5c$B^/Fhg}SscNTeo)u/ORf? q,RJ 2ZɃ'GbFFT!*QE$1" @ @!&(:69PPsjG}73+CPyRs҄?̪-lG%H8)ħH$ #|}(`dtDP7^P%.Zq/Q mmJ/c1M@l+L?DR!L p:3:9c%e+wp[ U2H9^hr^G Yl:)1] T$!_XBU|6ٮN1Y՞1Pi\F%ɩkSywcgJs.ͭBLpN>zu0E$̽^ijH(ף*V9VU=5af y%f!4 9PhRBш HdbbIDAIV@` DYL$T>1_ʮGhP0{| D>(Uf@TlY:dj %U*1;,jTA@M!0O\Xu,tlPku=\4KQX83220jJaE4|5gq0ѩG6@-R)\;QQ{fL:j%h'j{3g XUע˼ѶM'v~gqi^U\ QS%P 310sReҒ}ޖVH'H:nB0)ca\Lm(95/;YS/V\mbUUKD(PJ*z?"DƹLli|Jk`A߁3d f.ig" (pSp&UHsE o2(JI-H(L} rAC%0۰,>4 (y6OӜ2‘d&M+و\ _8H!CBcDXSi_f1[N=k*#vnE} k8 ݷu=r~Sgćf|mr)R^mo2PZ;jԒLSnBimUP[˭<ٖ(UAKv !X|MgjcJјQCB(Q0(fis1BiD$Ę[kc - Dڵ:!# Yp@Pfn'v[dq݊\HƑ EC*Q̼E"P&# &G!#4)@JM eF+,ubM|IfnGrS5G6DOnl1C%, ERjx[3M0˳ J7- hge)dVJ.;"A:%mK2''P:5cKۃS\KK-Y./A 1̧ #yRg'-GU$d{2TKiWa{AomCYMjD dY^ }]MŞ R~tY DA#pplەC6> EW[N6)4BȆ 6ǜ> y ;V`|"RK*Mf~jk+Jפh'>wuOӣ8%!hõ^ #T<&c:-B C .>Q'SB٘%~˦If*r3̎qy4S]!ul^"Yl!! 0:ͅ=6,{Xf9l7"DZG-~bKH(-R1#BԀ8pҀiXRQڨ;bݘ;t!6M-UTQ.9`y{$?Ȍ}oJVJ6]حM,?=_[Pо $HUQ8&q-;DAvj%SaNXr/ S [{ }b/?w+$h 04uaBqdoQ |K3QbKPނg|dA<:H^ n9@lE s֫מZBYwP,(1ܚL4.T Em:d/L ڞQ+hY$R3gjIC9LԬ<32ɪv63 GU"JpKb'R+(Q(Ԍʙfoh)P0P`Ҕ.^@,)RÁb f/ AiC[ԗD),I$X0ܜQy 3O00ʐ[.ƺ,1wtrM*x$P#`RrJj#8Oh|:6{G:w8*e{KCAmܒ?Nθɖ&ܹ@ i5{,NuqY's\,LpF; rwdt4bz.1S;]m|kFI5#N $x%UƁ'͘9@}' 4*HKs9'*eq.hqi?eMf/[Tv&|-a)-åۋQj&5_`MeW%>6U%G,êeKp꽬cSTѽ!\ 韐M& 牘lwad9)s\!FkWR >1[j4I7k!2Y*=^@h+\oU= HbQ:]#?([(_vQp|پpߍdD\Z<_MHmNn !w֓Zg}]MImAۜ lP%#i&3"`>˼ÊD'9,x7 `&ip;'33ki WIm-H'3uʓ{1 FʌŽ8RWB_NL9Yﳑ&QLI80׽H?O3(_#KҔD[F,yIc,I] /ObFLA KviMAdi; Ժbq y6ć 򂾁KEM\Ee$ĺpN"V[3vJ@DrWsit'ۮV)WcnZ+2jČjI=K,^&b:͏K!F-# W'Y^9-4:@@ԣ*b+FńJi'HKs(˔+ZCG3d*,ȕi=?Q\᷌/+T8{P{U):LZ8+>H!J >ħ:^)~~@$,d}Vkh 2"270tAr2ЦEѳPn>wE+@+5SH= Ԋ~|7!B ,\jL9:E֖UpDXGõm"8L(vN3W 瘀+Ɯ9C-DWr TC65ۼ& ,I3Ž#`;6$EgB$Đ [(b;"՚C4| h5,j#.*^ů#[mNgs bo6[uy8CȿQ Ez@-ݰ+t^5 R1ָzlZ}g җq|`˒jXr>%5KR_fg'zc) nY!'蘰( #J#DTGfݼ) s(X3 wۘCmI*v"J]ƒ^؆-em` %(̚^Y6]ִs;":Ym ,լG~B[m䭔%\YL$$Ⱦ[C;D,$t̬U$e+f;ڣ _+Mi5%6-];JXhӲVk, [}{Jp$AP˅v:*bcUg߹+e]7:0R&*53ߥ |2d׵N͖[B 7>=҂ gpIyJԳg)us<1O䂵sS&.WS )$kVlmH_gNmU \2&Dl_4 -T>?CaS[@Y2Tb Gl=׷s-jc >0A(:UJd-8r(jƊv =g~GX]jmB0/mV,8IQdhynI6}=R*+d뮭] "kR`-wR:[GPTNU*mHin#C(cBy侧 Dj572Tc8j :J0ַvј՝P|[R=K 1# exCZ@JhswFu_Y8Բ¢<*VE5웉eS#A{<hldQ7,~:Wg#+Ue ҦQQ8;``j =|,QU)Hcm݊-(me zձN%1]ji< [nvGh A'Nh]lVɘQvj" ,- ~\9X4/y/o5 O? e' !0F}Sw6@LCj9%d1iͽktn7;O?.g~Xb 5ʎZ"B CZQTR] Op6+% ;z~֦&K?}V UfVJ RKi(#F4ɦṮ nP6]1iUQkǸ&^%פbq˒Yȶy-],n 9۪4*ȭSK)Eu˒tgU.E5J^3GK-a"˶uy.(> L&@""t\6na :oXCE,$7>҇͗[]|eiY9D9!@E Xݭ.@Q̨̎Vou_$Og?wӡS?x_s5\x]>x7Uee$hMJ=$9ϘrfQRdu \ڕGxSAn:t }3=)֮gx8/9qH3"MH B^QM_1ŭR|Y ~&:]2).ν≵V[ [p;%TF|De]M6XELڼ֫|aƜD2 BuNNg4JkSvM;gozt9^rgüQlf pn5Eֆ7"?SKJm R|֍['y?;xpFE8L A;TD+4\m<&V][[sї]rFOحv([~>n\<ِylSTK帔qCJ-gPמ̓XPdQpAst$zl KwŞmxdBh&4)5"f3:bj5_#{xM/eqaey7W~4.E)e9y8*bSM^ veM^Z *FW4(M2[ad#@?3'dYMTj_&@GAtQghYp+.) \} '/+r?x X\Y}"m[}*oX%T Xz%m$*R:"Mɲi1C4) 9%1{УSOwđ w6($>A5h"n2 tNIOM1aNى@ĬfxK!qR*"q}.AaU[dġ7FIwo~ׁ# 2,[64̊y''NN9]|v<$ ך-xRG]]M+R9#Go; ѣgqk8>"?.:}Y7-'rކChoL:=u贲G237lX7O|-yE 8p]lh^iFh;-dVq F8CO塴JR㪣] )9Oo{[yGÍmLjmx`ų7m/qhe@MiXhO+`pm7x#s2hR6IRr?k5^B˄'&3{U'f! ŷ 7r/}yr(IADb}(ft"fsh A+$6k#-WW]\Qps'??ӯ `En~gPd,&ZMy冐Y/.Nu1mndY IDAT\$̔,)RDɌhR#2P¬}!w}o)1Zg{Ӡ(ж“N|<&ǵ~TGڣٓ$t6YMomzS9,B[6r0%'-\=L KFPj8tI¨^U8h*g!wM[kkdr6{t6y`# HR_lC;v#'<)/ͷ H#4rx\]PJ[(Xz$O Qۏ}#W\q啟njm`+?+8zêC@E-HNkY٤CMqm(p/;%< ;HB8tAƹ RB!>1C-Oymk t3Nf_dM)Q^v@_,9ъQC5wnؒ#6YsZ)~%"l'e1hi,@@+9hÅƞ<f16[GXDlt eSxVd2@ھ"@n-Y)G ݄r+i옙GŦS>қ[~l/ϖ7GyK^_B{bUx R*t3LoY}H.$2 mS򓻻3wkaxh8cSnD$t9ibQ7w~?>Aiww~'NTUW繀O;](vyC*Do A-y}=VIׯ>/^:<_ؕJRp[`6Nh$_ !s{evAꬬ\kfE3̄AmW:!I z#1* 5DbYWJ,at6ɒ;{dY0· T~K(bMڳyqY"ܮa5Q0C6{}4)sPUm]Ga~iO^?^N+!WS Q=a+$UҍD+p~~x^1ݗUgSG\i Yy]RWKk{6J~߱n*z¸kyS%5UL>kp-F\:a(]b"MSCp6TL7Dᩩ‘`9`w9_5zUHv(C&B{^( uz8R<Tf֑G͸ E']O$lJLH[U\MygΙټVuowvCVz#s5Niamvr h)Ptd&ق= 5JH#@j. Kb@l>GVm臄+ pQ gw#":l<WRA^V'3Ltk Q~e–LjWEG9j Ա[A*Y9i6}*Æܚ;*X9c+qLe+2y54ٱAF4HS1bdk~.'cNNBd']3z 3˪2nק1#}.ZE'0cG0񧒺XòGv̾!NĀ]a0#A  .TN1.%o .'ޭ?x CŠ +2l-QYz}`^g}#ۚu\A'[ϻPW[!X'xAv%x%EU}8FהL ~DyB@J_٬{3UEqgD? d9^y3HSvnÛ׹*ľ r씁3 Ez8AQ)Ж֡unLM9;^$\P ?R^)L94;مd/9 IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot13.png0000644000175000017500000020315214717152071030331 0ustar00hanshansPNG  IHDR65fsBITO IDATxyewy}Ruk}QVB@91!ENx'qb?!㉗؎xl,`&# Ivng-qnWwuW#VO9}O}ϻ_ÀP_4ċ~P x99p Om< yK(ZmC@7ÿ g6`R} =P w91x0~۲0݄+5 `W̯)N}.3oOv@ S?Q GP2]nkvg00<[$Ǘ%0~Kx@%?<8 и'V'k"ϡ ?y ޾H'?`%!c\1wN߀dgf0/;F|Wx [_" كLu_!\6߅q-&E-mWkat|I+<9}ec\z*{M84~{&F\nփoSGa` EoŽYTPxJcnػQȅȿX<3:΃B) 8 2`Vx=!UjMH !љǟO (:u:KUvrb 8_H2+ed+MD':׃:A& 0EtI>?`/5x g$5`]0`ˍ 0@ rck 8K^ݕ]09sEůVu7Iϛ| 5 0!~_ c'oY>M{)"@a-f?ގ/YK[ Ak4Ձ _Jyǽ7x#mbW?F3Ot;e8| *Ym$wĽs?饍?i- soq6~EXŧ~0_vuF(@BPϫz $Ϳ^KaQP݁AH~^|2w<WtT}B]_'HZ(Z@ |"ww&.79 z ?nzC8% [_k߉_*G8]o>)uW.osҌyrwoi~<rWWѱ@gpW5]/_3k!gl=I 5^O24BRc+pO ^|?:f<___-wۯPs߷zi7;Xs4}/FuU ÷H$׫h%?ކα3ϙ4h~y >y.~Qt4ڳ~F\H+r- Q xho-p:Am͌q%z&~PZ}#Bj"$k cs}18/E6`󆈔p\y 9YUk o0`]0`ˍ5!3t 0|̺&PJ !0TJMOO?#B D9< !&''?ϷZ'~ow ,|J)LJh~xÇ~W{"ޟqu)׿kV} _ 7q_=>>Z[jy_&q7 GJpkyr\s8ɞash5vR|3{y{}(IPZ{4M'&&sqW:55>r6&mDK)ŏ~R\xȑ#/㫟8޽{7ѱcǦ_;44m6!bf\ԏfV;v wΠkq{_nᆯ|+ιcp]&''7qպ1wя~Z{w||;aUOGD>苶 /s<#/~\pRxC-[o|p^ lR^?y^p(}v,ܲe#!xU~9WFu^L㑙ayGaz84}Q~.qΝ29W|nsw~iyW]u>nK.y[r7M<7c_$JRT՞Ҡ)k}JGZVh޽zkoUދDtZ622r;\GV;w CjT _wLKOFkXQ@8Ǟ3BRˋv~v߳*I%ȳ\0ƙFUEvLҪAvKKmDDR 3aA x IIs\V#yeNb-KtIyfwzﯼ8^#UydddttsW{Nιꫯ0 fWHWL[TU@)u뮻.˕R{+\K䔢Yfz<RVV6Z1RJ g01qᤀ8o cY'TH-6+1$M$VL;߶yX@;vD^I3 1w$ssPұN*I9gJ@TpW+_ Thf Bp[XIN¸zoj.m&smUfZ,ᙅig9Գz֭nDRH!NLէf۩ZiW ϦmvQX&{i>A<ϳ "c|Bcӥs^8sܟByo>բENb5KdoSR8 l9X.7863f&.N^}uЈkaJR= ,XHPHL^R(\ i,L6Z@gVJ܅BNou 60=::ph8ԼG݅E EV3m.w#aH͎R^ihM @ =\-R -..$ׯ&D4??g-zRzkqjo߾xӈNZiJ)<>;ٱxg O0޳sIMYgp8*6UoH!utp\ sfp7$]kɾG/ض*W}۶O IvBhbZsfR4c*ss[%%qFjqtqADf7tWc(,9Ϧΐv%ϥq54'hتpKzau{v:x^R՘HA xA,{9G-4D3?rm۶^9r݄###ڵkW py~ff)^kc u-2܈HJvhz|pZ}*Wgt,B & )e(ZK)D7V+C_i$JR&@,/<YT6գHIU㫮lb|wN16*-[ҁ4M:N4LTMxX&*v0<hv+div7oav)FGB;]==fnyiӪZ z,WOqKRT=g. !Tv;\~8NvD~kR )dWOHD`+*E+5 "0@` XfC0D ίp$PVe2gnn3>>^t:d+7βp'kjVRqnk7(vrr2$I><22̖aU@_^ d-v*tuZiL:o[@VřVq..NSާ&6;HƷnB?裮`]qIU.l 0 C!8`4MGDEQAp~,jsoܻws,BT*j}wn޼,={%j'V tH'f4D\ )04ݥ(P tFATUi&Qe͜;xH^쟙uʼnxՕ=z$p߾'/ rֶĬ(+rKPg ԋmD$ ErT:n1:IIK9 J4j<3W#x;sQ@'a C==55::42:֝m óWRw΍,˂ Z㬅=p s c$CJ$xK33`+7 F+2»R =hiREܬy~[z衇߿m6)\eH/l_.UJJJRZRy{80??СTғe(ιٽ{v:\V+{}-˲%Y9rdqq{_ˣ`%if--7j9c{8! ΌsClf\3xM7;hayGi"H%_]q%Z2?4\g N #q$,鐦H|llH3:'$B|{aK/sd5^ YXtLzGX/t(v橛_ʜ%JZ}מۯgNa-1RR0 HPT:Oܗ'Z_h1' opa Cbx 8*}̕MV} DzRdAdPOq/c%R^gff~D cJK)OT@=!9 X8MLL 'ʏ"pDZm+2EDϨ~n APV(?]VeToefޱcrbbG*爔2*snƍfرc˹xUW9JY1kh+ṅJ)kZn6" BЁ@ psK kj"ѐ5J xW "TpX~fY_Ԩ&߷@:l6yAiWI:DRr.G h[PTKf' (aư P")Eȥٴlu`%-6yZK@4<)ZڈdcfYEYK]uR#GUѱciKYD$VCK   H1 Q[Ә2Ffe”Eġf=@}A$I6n8<<\~SSSJC۝sNJYKϴEQhUW]uVTVJ^'C9Fa~~\*|СCd'|R)l6n:55UH믹 IDATuseBrcαsvn᜝jԂkQ5R{h&}&*՚^<<3}aLl6z/H3#*˜qFFxi"o՚T Vf۞}XQn%nfH2rEF|n  *Qv YXXdeFL ISSzZҎwdAXH}B֌K|+]g%@J|cXv@,c<@J!=z~[m10JE &* 4d̉Q -(B ,[ɲܩv. ^5 !~unrrRQJK3 Ace,^vsR,$HHk:4뵼(z[:11qVU9j}׮]f6|8x}ݷۿ>.ݢ Fa9:vVB\ RXATv2_-r饗vo_h4nik_}ջw޽{wX)޾} 7P3i2Ȉrxx䱔'{nRhh/v=<<bzz4_<}Sa94<{vca!7.Di{dBz %n*$$2\Дõ@J-uVhT5NL 0׬V"WRFA%εB /")+I"BiqMZ( AȌӂ% ǒ`6so0졃YJԘA^\(uJ7TZYg\RBaM~: !5)Fcdd䬬Tz^6 ڃ!p?^J"ʆabfUZ|@L$ 2`o~saÆ 6A霻W~WkvԬ2x\P|4j:22R{^BoXn3333<aYV^va~_}eг"+ez_]~e.h$IR([#:Kt:Jb׾v2sZgffZV$F00B0 J2\IPz53;g`dmu}au{)H UJRВ Y! y^xv8GOz])i10.-|Ե|k<:?L:iǩq4gpNt^< *\)J]キAI͜Ҕ@jU)gHh`는/ TJ(x8N$˲"BVXғNݲeX+b˖-vAcrc\٬j)ceGK۱cݻK||P*'$RJ %36ynD+t4­jN88BH i*$N+k $2-F"/bdxjIGjYB8=cAX")Ta8Թ):;$@§!cЧ+'8]z+&A99Rh @kvoR1{evF !ʍU @5,5Dn%'[i%֑wX\lJ42hvaB¤,$Y+`~6TnX"1T^ vSc5 嘍1a<9^8|v!Ɠjhn ea"`tLGAH"7H1N];,2%j'H2?pe{0@c{CC4Ͱ];6 aW-{ c0{[>fݱcǦM}ZO]D߾_z?rrjunnnllljj )Cl%Ƙ$I.lrr򩧞曇VEQh RKB+mSZQTRnw|.5q,JҌbH)$gdYZ@Y[DiRc @Ttk)r: 3 @q{.Ƴcr3{_ʽ x*p Egemju[Jf'_KFƏ͛7?ofzJQGfÞiu4ve\p{ާY$!rM޳ 9еs;D' Ըmfǔ#/8 zRfY )ll y8}̼aÆRżJK.YebzQUNZ'MӲзne_%_[eĭY9klyGBJ)IrkqLƆ.1C Qȃ@i)2 W:e0ijlT1iL$B{&C =1 O֙8g IS@mf$S@KIhR!,2H^w0G.YSVXj&&&tlٺen~>R ":ժ)ZiΖ7))Oa#h\c+I-J _}q DgZ^@^t<_USOOKY>`,sS:ZxY旟߱cG9?,z__ \my'{Sޯ&tHO>Rv9;;;99IDCCCjhֵOzܓU y1WZ04:B=Z5]V#m3Z I"" ᘄ TJugwy"3HazP$Ht2"*" ñ1:= U!u[. xg,;`>;7::Vtq8焔³TƚZVIo"{%j$ȚKλjRM;[Vg:7^<0,`|lЕQoӄQʷ͛sl/Q?M ʪsiSYu?|ι{;9$EђH[H^"c ~[y by q"C?0$˶lْe\ː3{uU{nw9dI goWݭ=A( ˃P)Nڋ08D!32K5{AˁDE)$Dc ;.E!0Rn]aAVRjgJfQhJc1| DB93CJ穝:tv6 mL%MM Zb]u-C^LoYތ.$8uϺ&B} tia@ZI`9CB8{!`Rc] V$>u./@;$KMLn nzeW-ۃ8 8Qǽ#BJg-i=_! \*ueJ2;[ peuea90Hc;|PΝ;3u.k>MѶ3]q֭]ZgȾójH"z0PP"H8T:ϰS^Yi2`A{  [h#[P*:Ǝl?JFDޭח,xggffs~?˲MQQd.ߍ[.E:'d ΍s^I\bBMTFR),ita 'b\R'Q:@0.w@EEds!\ X%"@`˃ 6\laUD@J*EP:5b(jy IDATFSGׯ_;t@ǝno;`cReRիZa脛ȑ#`mn#n DwD@TATv¥8 k)l]R~ݮRӟtZIKFD>+J"Nz/Ao_5 ݜ`TH ! B_!h4 Hh!A,nŒ z_/aznkIin z7R/#g[-Ap[cecOs 9gHxp9DJuDa$YALE8X% lnRlQQ9Ṅ-), Z3;)X,0:BrAV**&㠰n* ; # bȃYRl PJgYN*Ja,(`k05eq) ," ȨPY /R" cg%&\HߐarFٴTȆc+O>~l1ɩo_%nlIOkOx;0µD(F v+rv"YF }G9S耇7^&⓰ܛ q0Aqm~6˶+בIƯo&;D;$'`Hf˳.faEʛ <"A:DAyRĎ0 ,1$QsQ`Ddz|Y]X aHkv\X *Ms{VZ7Wo48"*"<Ϣ0Vţ-7F NJ'Z?_sxGΜ9k_#s8p[˗޷o߾}~WG?zd k]ztU3H4e0 d[Q -mVgѫ]V/ur+LƜ-" ;$,!"Hg7a%QFi~an{N2\IKVCk8[ CH ύH(ZP -Y&‚H:k9 ,DJ(ˬW&( RPV(4lP.L ƺq\\N} 8$AĹJf}߿>ѣGKC߿|ȑ*]8BjaFOS(883Pa)]YquAB 0tu*jd0lfRMmU'Y1#mcj-vcmn%Q!"!Z'aLI-/7j f+ɠȚlK$0P@,Ya#cahBǔM+&dP W@%I,) `00Mm)(ey> YHV#ټ V6҉K=kJ7VOɋ|~zr3D[,Y5A"ٴf:qkhLLaHwRxӕ* c9qia Ũ0*'ID\k>|k;yơsV~:3;K[ m^̩j`FƘz?w΍ DQ +3;vbvwBʯ@`Uʑ\V-#ShR1S"MzY[qzݐEc.j7ިq \ 3:6ٍI֯c8?vfgta$MQI` c!uX**AiZˆ(sjAX`0^[ʁKAEQnj51:ZCEqWYlV3nd$d "(SXheYIZ7q3C 'BX7p:kJnNO( R"Yf'ƕGM,B̎~k|Kvgdܕl:pøN65@ehf9cfΑ1V c(h~ˤZp!vz驀 i^&N˰(VSSQdn#J\zlT E/_($YB J,yKGDsDXc2S6iD zoKQ;?n؆Qu#.o\$`' "@R tP:F8H1a{tJB}g1r98$tcDXd0=<,!T+oCLEH ",-&ZڡDFn8Auk"RMMGk2t/bݣZ [|wi6^ojX^=Jۋ+]9-  Rðh&6>]ȍ>/ ( Vc`]N!DFO2؊ig)@XXĚBJC"ZO9& Dt@n6jȚ]MTw`õ[Ay TrZu2؛ pn,A3>?ggock=q1 `0N~bnpq[&cnL݊r0ƞvphHӟtToֺ($IUx+t(b0 2s*Jc7ڻׯ_T*z!#}ck]?^0 {r={|]kHw{w5wgDpiU׻wPyNktM);s=7.ˌ1:?72x}b3^04]=7qau91RdYQm:y8 ι:_=BQFc]xs~ݽz:w9C`//O?ÿۿ} _xꩧvywD\[[qRJ2L`wN?y/SDV<%Cuw7&v1G˯kM9‚/ nRΝ}z//^8\ /l6_>N>g?Y:w\+8Ϳ[J^xnoJ(j:mƽiNw`& ׿7pqͲjz=Dr i:s|q1gy3d;wQ휧( Cz\v… gϞ"zȳ>[VwG?=؋/h9s̕+W\g?}O~jK_G?x󳳳Dt a.--54Mv9;D+THxsn0snOOOoCFkkkZme^]\\wқ*JR tŋ8}῰Q:thnn~,y?/rEZ(^r!"vZƘ0 }˗/=333ۏWDQNs'J|_~9ik`0h6=Ѕ DĉjZͲv۳'O^zi|n{̙g}v~~> ãG?ĉoδv:k+ beGY^^>u?_;NZ'Nzjۭ^[\\j~0iZũS$I~"~PT Ν+Jz}nnܹsGy8 gffvy6o{>y{fStrpqqZ^z+W^3#\./]/?-رc^x_|7n\x\.?;tmG@DO:S'Nf… GݥYmLx ;&wLѸqƸ٥Kpo8f>~Bպ~zfQΝ{;nO:5??n8nZv.,,9rdzzv; /I<ϛfV~xoCD+++j^|9//0 Xȑ#^^Y5J vv3f}^Z׽n$'Oĉ>#Gxfi޿b:u^7￿ɓSSSEQ|xGh0sRYZZii8pVWWժwc|Zh.]:r `̲luu՟ p;j'4zSSS^4><|qrKeIj2L&'o0ûW??3߹5 W\)Jju~~~Dx}џ'qگիW~ׯGQt$I5gΜZ?íVj=CW\9~xV{;Y.O:tڵ~^l }ۋe 𩧞 $(v?|t$>[^^x2"rι sQ)FٜYYYi6 DT*07֕JeqqQDhjjϟׯ_j^PJήe_~[)V&IRզ6doܸE:`zwunnZOY?(JVxa9j=j$5"FQtj7 ωA _89ryGZE\j^f,JI0svǏG$Iݮ jϗJ%/;V0==9yQهRL^>d⨈QD}6toV߳u5C0:OZ7y7y&PZ$ɓO>Y*`Rϟ_XXmpۀ7j MSǑ[mM&w~>[*~{dm&AD캪 v;cxx,:5~n~܇O/\pԩ!osl+菜݌ws&)/Mw:?M똄H>7jnko6vgQa{۰G=mأk{6ѵ=aw {tm{݆6]unlV ( wx9x_xأko bѨT**JƘZh4(V"REwΕ4M} 3nt[mZιz>("y> b,Jޯ\.(zh40A^ZT)?-onZmUɲN/%ƘYkggg8T*~uJ4Mggg}; ̌/x(6j~|hV9I4Mgffy{r>*z=cL>w@ɳ| "͵Z-D p]8=Cvh,//7(1ׯ__YYIDnfz>qeeezzo>g 6I嵵,ˬwx ck-"cTkkkz=v|&"^[[ 6͹h4ﯭ-//Zk&".FDsssf6u]7x G8H:y IDAT%Ih4j3E1Lduu5 C$I߁R>\o߾~(zXV`ٵ\.߸q#~$I$˞ uDiz^@)5??EQT*noMUL0Zz֎7 NJR)6}+=CDvV)_reox~8Rimm- Cmacg94k_˲, Ï~kwZ-OMM-//+LQyOMM>{nnnݭqmmsvɈ;Dt*&r{;NyۈM~/:U4~???…'>կ~u3BD/^|+.\xꩧ|B!cZEim?9Xȭ[ŋ4u ,Ї>TV_}W^yK_}Z??|_/}KsssRiii'' uy/b]?^;蚈DQZ_ٳg`-oqO|kOxiJI uہN(]ʡ̃|%PJDw12o "`0]oa>s=?G4Mկ"q=`Uեu9w]L׵7)~K#o ʷSo"?ȰxB)5ﺏvΗ 41gg0̭j'2NZsfI|S<&ձoijx~O}ӝ^u6R@oHQ_ >eu}˞u^6ILטyaaa;f{{uC@Eʼn&e-"c [m={RI $Dh ] %(Z1h`QH"r 1 " X@"DP@1`nfA Т L@ Xsoأk{!3 Za&$AB%R% TJSw_Q@k"P)`$Bpˆ1;ъX"BAL*b%P")0h$ 쉜g! h@Hqctm熾pO ((4|j@ctLrẻ:31 ep+zu / '~(B A/ 49oȳtH̖5&L׼w /pƍGy"P ޮGîE?EeJk֘  \J@" ̎ XY4 0{fn;Ywk}xG~__2$SI=,x;:ŎtuTNP HʿIٍWΞ}G[c×8ԁZZjbGyԪs9&yRo >,B G ȰL2p/7.8#xVeA!\P42g2 m2ffHvQp)8 )V+P1gbJcM< ؙ"OGETD,Y"\8) p Vā09g@%"@ &D" Z# mH)FZ4P8$x 8phDFαcVDZo}) _9kRJQT "Hagu5oztg1u[ '|raa᳟__>}?teC=|NӾ믾w_RlS"q%(* +kJ&(TADDcr9GKNH Q9P)ְqM(ŁrXlDTCۘd8< ⨙DF4o;+pi3Da`PH4@H! (@@@BQ8VDy9p`Jz ihH 0  r2 56!:eDa¸̠p6p6ǒ\;G’򳬑DPL^pB˗nA q0`eWD(l9f"&! p.rqz  jLDQ+CEH#BZ) D$BB$rRuଏDNkʋB%q<|X M\"DT&;/;k0ֽ^oy4m6EQ\tGZl6wߗ??wЇ>/~qffɓСCڎ @P zCʐG@Ad  ^;(0LWN@v&}гN73  fDÃaƜg {2dpĪ!0FNA`q^.k/eQ[ (P1˭$(dhܳ(;<ŕn&&AD@E:F!4l B &<] N^>eb@+" (Tj$v;]fP@H"&ydDt`2=y>,쉠F:ϯ8 SJEύJv#gqx"fZAHQQkHȎ!j=]SJ}߾rӧ'xMV}E<ϝsn]vѣǏ\r̙n/a}韈|#2{YJDӺPAM’#, dYfUZs``S{Ax=L<~x"#8`P2@b ㆠFro_1^ / hx1DwVΓDD!xÛQ!P D,nlr&F  H|p`Ms.gFc'iꦓ\D9BЁhְ؜A- (~ޜe:/zL4u"F&Fpv|!24FP7g2`r~Fwf0diE8>Y@Za8@Dhq w,"a (Z :‚7U[Qxb0[`;f>++q3oo9vժVt7Ɯ={'~泊>|\pnax~\rE)555K;t d7`,3Ȩ6[}< u 9"R 05{[  njL[F}@p~ (B̵4s+ZZt  @H)kYc FD@) a$_9*C&ĚZm]EGf0(8(TM3"P%D X`$5"19/0 <üpBkE(s2:GHEa$ 0JEӕ~D12J.]zdO?P1sq5Y+ ¤}S*xT_kbƏxL{h!"R0-(c?&_MG}(.1kmW֙,@# )0DDZ Dd$1JRE Ʋkg9^.;I!( MOaHe, C %"dvj7+4L>2ԢWs{&9A$d%% H'%.CZ ]\ U"5S@*$EB *r#@BPYP!KE0I{`X![WHҹYr%* Cp < #"z͋7L0|@7" TF bdA??]-^?UDyJu k "DTЊ I%Q.ZsNJ q@f`Lz3 31 FIL` x<$@(*& V>'UAfw _|.ԺMk?k]g܏~OYiUsUǜU,]P^ސ5+C9ddZVkh,ѝ]X: @ Uƭlg4CT(vľfcuD؃&/6?ϒ1O[\8ڿOr:L\dr٢QO51T 3nݽ1b8UFB<0ԑJp5*ݳ{SóR L0S#G`!dqi ׹h!S jDETv;ߚHܧ'§Ol 8d3Vc"I)_YΚ! * |ѭR5ppBIDY$dKDD.Hn$L9y%=&F ?G0P}pFjJLL[: )D!Ll3MsWh Jʧ_9 GHR)x 9+ &s{3ks76S>PX,"x 6Bb Tld\\O#V1T0;zK scxt;Nnۯ7"fE Of]?#2\ 4@'={!6u onO^7<8H1c%`ץ!ۢ-uKP7P.o`~}ewP8_iDk[]ǧC`U?l* V("A8 i1 #fY)N1U)?T56} Yr%}G'MGGYMUSNH|9#.- S ͬ(gWerbJV{Rf ̍]B`)P,FnJT\3U"!̛ca^dL+Ve?$RrD́8Ԇ!Xy=O2W*lytx:),CivM[6=Xh0X"X^s DR𜟹zi^WoߝD 1'~7g&b8 Ðy*f0Ռ4唵Tl>o)oaTKj vâF n*wf#hu1tK9pkN쳛0Bq<=P"s<&Sin`'s2in"咍;{VKDONp3f(1uO~E.նټQI=;p%CBEdjbӟ϶Mt2ar{:Qz`ږDj5+B]ѱ3avw 481X$;n@@9ccAmDO7o,gRNdPV'BVncu n@,1tMSfs& UD)A5u7zwNA5VLAd1K]MBNZv IDATݬCq$` cQn/$4-pHpo |`3흨 Lo'e^0NEvd/8m`C^UAD:XV$S%bH7:/$S".Cs0D 7rw5ZNyOkEQdbD"`$ !wskt$@ꆾP_YO4X뚭]R C:0Rdŗaszrt3bBLSITs8 Nq;L#oB/Q)wRb1$pGJgf}|AYfy7nkr65&bv͎KfDzSJ77u]=_!ob S&|٤c.a Lz8L cK5t؋7"c ggaq@︹4;vm j^%=+f6w&v! 1?S{ԑ-ЗT^ F/BdDow+it[,fϜ=ƚݻkC8OvUU'G'Y\sNn(as/Ԃ.myZv#fD`$X3YSJ'&g&2~{0<wATSY#wB+%l৮_:)K3}{- :UMUJ9z A]̷C:v0m!= I  s'Mm?2#=ܛOT*Fh`+Ðۤ2BS{![|&`C+WT׋q>#cSaǬwCr04i[wdTוaPc" Xvu]}6>S@ȖMǒ}7x%s"8$Dzͼ16#p0-`˫WYefLs:X]/ǡONNW"XQ U]imo;"M9]pj.""\Ũ9Wu5'rYI<;W/fHD0+!,%Iْ$45n#a*Djc09f)ew`[4MUf1S";DX@nX J@>굧{fu: ޶݊9gUsra'ղ0FQsh& ]y-jm)bO]4b4uRl}ow\S2͡L՟~`]*闎/ļlBy٬O8э߻ynPX F h<*[#'ZpLc+0u'oh"aul5ͩ:k<ج f]͉E"-Exm7MC^X7v:Y}v1bIp.@1D:'ԛR%4erg!Yf+0Z ?X,jN*e'0TRh\D/Lw:ZeScUj'il RJU%W,B4Pl6#aOv[zg߸{37HfH$}A$nrѭ['#52Uq"3&/ד;mjT$f4*)9֛OUa1^]B!!i?`I2 1|TqSq1i3 )Dcp{vv=7LYmvR72pW g][_;k١@V {aS:Xxҿ^:\D7<(fu9z>0D(s6Ǻ:K "r* :ȬjOY:4[G6 0tm- "!\ gRCȋ[]]Ϝ'@#FBb|#i?NĻn 0L c#gx U̚i]Eۮ뺃@e:T b׮Sa{B@f(b>ڶ4m:ctOzސ#TGu*[qXjɘܬqw@obe\ځ(jŒsODcBZH. ?mR$1?Yb\GΪjP 确UdWU\pqDٝKMi$Ȥ?Y3@"{J9]fl>吟PzPC5R#IfffNqDDiyc!P ,Isi䌺jmnSXC(#C͖L/mdl4b&fUZIXΥ6ͼŋWi,Lm?{ZUUqmwڸ!㳣b1lu4(<01G]BKC"fMC3mח{=1j !UAI!nZuQ @DkNЧo]6,LtRޯVσ^6BF4A-3!ל nj0լ]d 9SrA<053)(4 rx,ÝQD *Dwjjz^a apvS@N;>WY5Xf*ы`.MCJ6!G4fԻp0B\3B.$\hxl[͖6mNξQ*qGLTl}OD!v!/l.OkS<Ʈ+} =NA,Ð4[YƾyevvvO ]2b!EeH9Ѯ'ӡ~| 0Aj?=kqٺ Uf׷q<4X]ս5:?r7C>Ua^rS5 fMh-BgイĒZ`ND|$B`v X7zk'd&C瞹zimX:L31Ъ"! E!k"R*9xPW@ji2G!P!c$S2ns:=!OQ&ͻaK76\~X+W6&sTAܘ\ܭĴT <{کn˽B,.57MK9N QWyLԋMnovstaFC T\3@[ /}L2& NNmw髫;8Pj !Ql< Fe:ƪ"ٴ^0{TM'~6"lwl4t=\>t+Oݸkd*y%&GٍyƘ;>|R4 qpq@&#4 ,ǦcskcF<]_^VnwA:]kbs B}kgy2e1 # L4P(R* e 3fb.c;~ɺ-\ZL9rc*Нve1ck{^n {_d.{\\1( 3;u)|vMnOܾ<\vw{٤V`)B8Mۧ/?kWN!'~{k~c2svXɣ=J!!W/˘+"bV7gM}ߺrfG80kYN7gv6;8-RաBpd u61*W9H NI߽=_1jc,"39=yv49 g.7WW7^x͛+̱h">csLf>!1l$L57&Phf"D"TƂRTNC^6&@;u jy|`3g5gWs֤,0Ӣ\0sI, h(#BߍHJ/ B }??L(„>ȵȼ @Nzw9ހAs:x,S{V888;zI LfJn;!*XG캌qo_[,wAU64Q8Ʀ+|35*O<,;Ll#{NSO[2wgb^/}YhU\,|uD=[ 6_|c%gf}9fO6˚BUP mܠ88_l<p^J~m7i1Gr(21yqMڛ3as׬ɱ63U#GU8[6O͛h{$3&33\4U+B5}yĊPG6{fI/ N*¿Cqly<:ڳҺT]>aD}*M! -ٿ/5"zWW~WK.pvv/AXZQ& "rKkD@"+x"An`d԰Rр3:<.X&sNLUuR& %)R8c>I;OK}&gv3.pbBs+G] w+)|4QbB0HeK#)c3SelO^&+XNQQ@1 .m V3暓W16MӻXqFVKe#j|ޝ7Sq<:[/1UV M`c{fqĔ~W8% N, UYnWڭd̚ŢbkMsJY10Ä́í=^| _/}KW<g>/׿7o+gggG?ɟI۶1'7v/| 9O}S72mMÐsVсvsׇ4kOo_/Z9׷~9.XkW0vK8<EEj5;9!ȼVslcL(Py vPj%ӷwb0 *H5'f b2:iBgRD,y|}KRWzwvi[w6pCJVD7 yë1M2%OC~U7:_k|sszեGe3MYpko׈˿,񺮻zիW?m893ٟ7x__^xᅿ`O;]M;5/Qpl`9 )g阣 8eRa`Y26m[}<)*i~YH{}C>psd~Д}Hj˹ f; 5hH)X-=­m7oݾwn\lg-t}C}6_W^ydCЭ[>OSO=4Wl"訤*ϮVO|??9Us˸Ann3Z5v)HEs{3=Bnj2w5BܞE5@DtzPڀmYgN$hf?Ga y^LlnsD(VaZ܋!5Eܢ5TT\!fefoi$L( Qe֠)DT*q1t:jHfSRx8 nɪXl]kWNaEهR)晕1.(2d:j$Xs}};8\M\o߾)B>2 {dL~De$#&C^RxĶʈ[b3Iլkwf&/T tƍӓa,#X8r#C(~k^z饏}cg6>ܸq˽OO?}C//~K_zwݳ>;ϙ=y_uu?>>b忯 w+C! sv96+ _|`5/C*5[`42ޙO IDATVBk^ yٕeT#|;YiGᕰ=WQH$t "SN80% FIaS |/.}Lu9 M VUۮ_͛21)J0#W"!ps!I)G*._}?{W)i7A]ЍBeW2s8XJI@\$(oxw3o/\RT뇇0RCfa٠J6uy,g<8xFf݅1]Ws3c~(s I :BUXaNFbH)OD(D`J]q dUzD2 RJKs}|W_e/>Uw饗ʞϛ>/~mگrMwU4$7.Yۃ={&0KsUC8sr`9z{`}xFD q'w #̜Y MlkS@lMO:ۭ鼮`8%Eq Y+.H5MoDxʅXjd,@,["g/x^r泬6(a3fT7NYA>a/oOnWo^4iYȵ]n(\tgb#>m(j"rZa;9=TUٲ9B@<\/]O}!GO4TW9U՗-rγ2X->hZ)𬖍T$XuY5&4C=k_J4jHm !y{y}{?྿Y>L6/7ww2*륎k%0ܴyXYUNtG!o%\a4d@bfހP0a˧9H)[v]AN;y`0 A Čy-iIDMKɠfUyZwwg9' Q4gב_P>͝Հ!½̧k$HjUZ%b8u)Ī2uE澡gݻyHm{ b6zp2{A523aPfc[w:sK?Զݝ^sN{_h]o_[Rs k\kljYl7O˘bvn}Zzqa(g2j7 <܄xL&MC*VMmdHGicr ѻʦN1;"13E_p8 !i4/[ QU#, 1;' قqJx0{fdɶ|r>;̼K>haX =<">G 1Lt3P$nUɡ)RQb&2n:3d"5W"l",Բ8*]@:-Yun48Gw9[Aȳc_V 7qv",$jD؜,/L37g{Nnv؝YMDv0Sux rwc~vncx%C5L.il>,[)@NL e5w2!Z <tfo뇜ԺdǤ>{£z_^Y =^oOqG.Lx05Ϝn?݅W \ jQ(-M|W!!_okz=x'Al2Apз)%?wK'Rer80){ggV˧aD>P 7WX,s櫢<1܉m3 AG$ |ўvㅞyWN;zswOvAk[4Q~G/_YsVc?;B }?}g*8E?OĘGmO;o>Á9wl*n'Ѕ*yz`/ۓr^OZK (qȥ$f@:j11`U1fU"1X8(Nѩ2'”] &;Sa*hxя.p%fmch.v]lauj׬/EzO~HӘ=NwަKbط[[M[[[ewQtH}SҊMRݫeC@^iW4y 5`T 3 :b@L0Q\Oyȑ&ҧ-Qab} ,puDrwb_ͽŶzzOE()Nq|# Wx~b}#_/ه|M=eKa8!nw2PD0ݽHHVg6rY8LNE.22;Yv0%8$3cԟ@d@ElQip.,AuMJBb\DL* {Oў\TB3kCz5%rY̗d" rW2("iuz$#8< %e!1'99>q9bra+xؕ}a/f #س P}ڻ'0c e,( )0AD9FLg!#)c)`wKQ (iV`%Pd6%"R528[sNr@ 1+9tۻC6"yO~NV?@y qW`?LaQ?n69w`Y{|ۿ۳٬A]۶!a/l6,cfvvvV Z8o^,wwy|Q:fC2:n}e_O?1yy7l ߝ7.|wHmw;kG_6[nxԍ1~wi?O|haȭ. P^baQ34ߵ]kk}{׾"|?ӦirJnKD}{k[=qη7o,.Vo/Gj/aJ* ǶmKDt޽ŏ}7sggg??o޼y/0|KsA[G?Z1i/gYu]37|ooSJ/>_yf13t}s>>>`f.u]y/֔T1Ff?{odq {Df^)QьEr욑26zdOIzу 4;Jw A F7z>TU1dqyr%jnٳ(\/ˋ/ n޼[o]tioo֭[D={Vev*E1{rs,_J^7mV5?_|~<_rG?wG_?Ǐ~looZ?O^*I&I_:MNz\+MP>\|www}}=z>ʲ7M;,{ie=pj<גCoVt[!n߾ڊ.aՌƘϟ۪뭬\vٳgVd*_޻wxkA"{Fic<_YYl8v${Vtd2w^竫ZW\QYüBa]@l#>,>>wXQOdr vҥK~ggG766`:޻wG?9ӟTG oV7^7n߾{@ML˗/WVS42ߟ$vε]":>>y?fٝ;wL;w|'0wvv[[[[>[nmooO&˗/߼y>޾pl^k"o~ᇭVׯ_OÇeYz666ykkK+gccO?7nlnn2]]]Pŋꪂȅ $uVF_YU[]];֡=|pmmMy»Xk777{'|BDoh4z۷>}{}/ffj}לs?üV\zzʲtΩrW ~{Zk]Jzիjt:=::t:{{{nƍ,m~ڵkq VGCj9+ n8mllT"D2t޽%t˗Ed2zҥf3+3[o>V`ZYY)͛^… zccV`}!dYDFacs׮]SSNÂ0-H<]AFF~Vys͟Ϳ'6sS-l~$Y__Bt|PݮVYդewvvWMrV{V~A{-&[| mmmV@'9IblիM**:"9~;w={97A{{{ӎeu3 t:՘4;ZJluIl  BfSi{_=_iirWcxUhѣ,G}dywO5V""V_6H/u&_VTɿv{)KyRjX,t:O>]__װlVl6v]SDyk*KHDd0&I$Fp8P;wt:'׉ eז3߾}{޽{jv"*eC7xc<k&"&IojR^,qm)HΚeƘM L8}⼊Gm)|i26[ K\[RjYY$yA$хu| ^Szo*'cOvK\"t]ǽ^/(677,,4EQL&\۝L&+++Dg,4*/Iv{!<ϧޞ1 N㽟fڲ'IQ{{{IdY6ZsլJt:88jO[[[+b:}pvיNV5N5"L Bt~9q/GGG,z5)"Yi{^YY[[[Z-Zg=b~cDD:FeYZMd2!"nBDGGG:Ydbꆳloooggg(,?{^qiz^Hsh%lv||tsh4:Мv:`{$ZZfF{kVǣHgj<̬ Nvvvvwws:g~oo^d2Az0\|y4T<A)"˲ uO+#MMtmW}{#MpvfxS93+/^8theƨJ^sh~i׫ޫJMӴAMz,o2ņ34M5j)/HU-)D(nk9Yf3-vVMD<~bheeEz5y>K ":<<,R0ΎƔLgwwf:ΟuL ηWHl6f"i.\Y!j)k*(AѼ'Ot:=݊@퉈..xggGQ[)*3'IsM}<5>ysSW%+EDx4MWVV%k7`P˗u!.U2t"28/yt:g/.2g Mj48Tlsœ'|rL\pW2/-~i@pb&rZyiwd0/ G_\yl|괗y)7G] 6+~Wsk ux߳-qEUդV "SnQzJf<jDŧZ _2\H|uN_kmZ\KjZ1.Kɲ,˲h*mZm[&UNon, YDDٯ@{W/55My>RA,&K\[Rm}EW i,:[i M_M^g'/q휅z{jL=:nj_Hօtf}nݺ{cD%Wnx/޳$Dy'(i19DaS.bK &fr:Bq`chw9ĵsDݻwO7~_oܽ{W=}g}vyno޼~_T߼{wW8/'DAAĒ JΝ Ϲq}18fY@`\[SN ݰ oeY8{kH\PUïxĿݒ$IYet: F $,"B@N Y ,LLJ嬔I)EKga`V>$( >!s*J|RPEYK\;g[m"eY:/w_|LB&IJ8~e>`("yj@FHtRbyM^SEM"x @MA%(9fn8Y9-tφ:Y. IDAT~hjp'r-TY$o=_S|%$Y e^ 3mM 00~&F?&'ůʀq*TLֹ,^Vv"" X XNK˜i3,GŤ``HXht!'gX8!rֹg}% "6a;VW:ǣ<XLsY f\&1BS Ry!UXtȆ?RHPsF+|Trےy" ݓxgT ""`P*D=5K!,CzPwVN%ݔF؂Mp0' `M 9Z@-H j' Y%my-EDDPŠ5 m>Ti<滥M 0f T†,GZ&SHFҼ_l@XC%}=ċ' ϭE@dtD NHs\ sKh$0 uAGUd16@T_Cuxݳ)jb6 5d穔31$T {$00b!B2Cc"QH 3y!b")CŲXKlG GFQeRs_+.qXCl,]]fe7?H)F]  ypR*ZDjB8 yaxbI@Er1;; xQ&aGd|^b0nUn6g eX`6n,s00"# <C`enW;P)\q~9YtpWR\O~~49Kpb$V J^wb ;13.'9EZiiA;v?{uaŋm)vU\hX g9Pù+B8w ¿"':`PNw1djG 0:@KEƧ!FyjOx]C8M& 0 TwqT ˂ y:(| lXrJudp[ψA3SR*=RHX wngh|¸ xʜKMR^iq v{ǻo\C,V ˄ A ɠ 9B Ođ Z$K:ɄIPPH̊|<%d5z2] ͪѭ0&M\ߚ(Γ<Ś1z T(`6=b 0Сn\mQ/kPBZ Ri (@37jefm̭!3`5;SKceHA3PxlPM( w^n:~/I2"  ZF@0ۃq'HT8!DD"gߦRV@=YFBY9 /.x4tR4 2"8xf2 ΐ C"`бaFD2D80TG6. ō@byhWTK+$aFc؉#* KQC@BEHvhzd-[(5j k K@|ff_$a92UD,$rΖ.*7,폊gφtR1( ]<|7mB W/f >"X/D f&2+[߅ U]Bda_In<-;i&X"!( EȋZ./쑄sr-E{%]Çyj3FeY=bƨ:e @=v^D8#̭!/T3R!Y(,nv B"J}-u_Rvr4vZg: Npy p03f$0otpoOg+ LxG( Єn!֔).ּ'q cǍ<+&9UϯbuJCMD"Qke>s&Hj8 `h EM/i:hf!.]WJBѫF]xDfV"!C*4wG :fb$s3׻0_N A^zY`c8;WtZD\T E~A^d1ƫu*e[OKkӑ0"}Aݜ4tsqVun[!VT Xиon͛cQ+j:@JZxYVMMrޜñȡR 2TS;Fb|O! $U:i<%@m/(͋ksN"ܡl>ژ9eP}cK$mY$Pٔ r,qE W.],/NK,Ɉ5we.8F9>% YpoBeM4"e uF j xReb :U\=IvDմpdsOjm+s7`FŗFN`Iթ^[G5P"nkKa4Hq*W+ս~9S]^DZ&/J-h-g!.GE ݣNZ,I-mvi;BlmxREZEL'=?>z( $"(T[Q; 4<_ K\;gt[q&14.19IDg]H&l:d JB X9ا q`l$#@Ȥ `(8F&RO9582YATM5Lf^"rNlNeW8 ň%~ D{\QT/KPG'2ʬ(vȿ+5Yr*/V Rt hJBC fdRQ"dꯏ"nt|4$1<0v#($/{cL=tdd' 0o $sOhA5 \?34Ѵ3)g~a"$ s.giM [N}x-+`-甙%DbU$7̩5j7V&U}Ojsn yR"[.j4ԗXqW\ -\pimGĊ`}tue2ZVb1d/Sײl}D%Ӂ5?tJil^P' YἿϋYPrA3jIC`&`D_Xc$bh B ^EE=Ru{ jXxV1'ZwCzY<8umPfE6] 6kUΪ"VUFLE&vwPĠɺ`$ Z1Jtmֳ) 7K$|Y@lEH /p}w-@Yb2JHIRUO1HRXÁW+!D΋a`}QM5I VL3O%Z?l¡X[CQ3ŹYΥ3IvڦcSf20+}ڝxvr8ɓZ3@Y`P,/۪s#ϱ&DUCƯ5 |f)Ѡ+۳VU" U%n)u16sDB vHd`= gfU8u$"26{;U:kqΜ+!hAśNNx  :R<B"JzvL  G.C*@R2qJ1ai, N&5ķ"HRO *BVo~utI  ^^WnFqlaDD( ӪYɟ0yṘߨ Ekiz!΢'@Ţ_9Kކ5ek/dh<^te36hn% BB'iH:a5# D& 9xϨ2Q\gdOHU^ц?u= ۙ4=kox2N&,DI u9uu8)8X J @.d )X+` eIj!!te)HTΦ-M 41Yb My4K GKiQi*2Q`v -fw=I oN@G+WĤrky*SZ.1sG"ER錯Oʂ[-a`@PQ@=u;PҎIV K"@A LN"=T=HEQd1]+M\+|2YZ"wyYWzE^ RLڶ8{8XSe7ѕvnĐ$xtˆ7פzFN'=hM VM 'F#ae IDAT'VQzT>Jt9*"A] A'擼&$k@$ɒrV"JLbYnd:zngӜ=["S%cn% ̥+)YB/fL'SD1l`(3}i4%׍6Y!%M;%B.0(dTBf_]CmU$PUk ADz]Ww4i$!^t28&ޭ˗{" AtW_H<E30"!Zd.P#<@[HH%W@ZM[c> 8/vF.e=-,~;\lY=WF!a&f%}}A  B@ ! @fpF:Bh"D8uAH!D1+ɰH;sv1eHB`dvf-ҳ@$8Z k,LsP{$$"ֈ80tי:ZBQOGŗ`Q,(ȎZ?qمO/,PíԮY|f֔B ,5 C k P^|3G:]W[l+K<Ųĵ>Ƴ#_޻sJ{l<3Ib0!l Z4d"5v[˃2Hi>OswBF /W V/+GhP0 cK+̪9a%Iw!m5$ %{S˝~0v"B$2tIY Ɋ`PC48<5e$(p:,DއX$К"/PA&Iޗ0kX2qsG#(=_|MІ!ڐzn@q{Cz$ID9@,*9$R\ @KlK8vo?y&h:*ciTZ"p.酲ĵnJKi3\cI;揸=yE1dz?e?"95pcmbw\>Kdp<$ )BAQ8%06@\L2-(9.~xƉ0x'J:}6ڊ" H@d! S+LȈ;-8iN$,mL .ά&΃a;k{Pr5}J^:[cY%f.R1 fVX$Baa  5otBU,~:]Ps-Ueh= v_6oKO~3;c)(ypYpٓݹzヒe:MC%LC!h"%ek/A>\[I컉5D`%I*u3#bA:mpbH& Nv6A 'S~f\;uBM%x! 0#XcD Iq@ f)<"SeG@9ʡVJ?$)ԈXrۺoҹD~ JiBֳyU *٨x^K{CvMCkeD}L' "!Rt̒CJX5{&jtLjΏNIy+jx!M,(,,DD<I İ vjv,<P D I 1{أs1K(U jM/.gi5ʜSYDIUea2QiwD.d"c]Cl)W4 zStҴI.P5!CDA!5lVB&A"a <~" Ze'OE4_=%ᴲfALf~xk(ij Vx59$$CUSb:dm,!adcyl"@h1d@Lt%AJ߸"E@v1:5Öxm:Kt!`zcH f+xaqpraX_'o^gktMP3ZwU%_Zv(Fg%E&wmk>ZUO(HM 4wa Cp7fT6дkZ6.:E&-qEp0q)x/ dKd,(Ea5Z ѐ!C, ', &D؃G` WNQa,mozgrT@=Ѥ YJ@iQ^v9%}D (TEQIn3ΕE9gdaO ` 2 1h 2C$¸@) І  F2aUZ"@$@P͵U&KV0 c ` D0M(CRPNljx?0 >%UtnZiֶFGlo1SAsU7B`+Wd7R PP <%qk.V;|V(JL*vWUWշTz[pd[dbU #''qk֏,`o,(a!С]#k7N"bzCBjժ7(TA%)(!\i^4LP, 1jՇ!(F_ZA>U?};?qݳ=\bqx*^z };?~qS‘f I-bTQ RS)*} F43WQ<=B.0&12)g:qlcٶeQL(!E'(aL8a;49Bs9BH&[ԏAO4b@%9WC~ځGZS0RWwou@;t0ƌ~$'-n^.4M4@,0 j5UU5M+˯h# ~k6vB 0M qݮVgj۽ n!_|0ǏAF388XѐeYųp'&&*ݻwm~,˓v۶rBc˲ TeB&eYFBaeeJ&Itss޽{{{{D"NXu cBkkk6Vh4nX B`qzgٯjUEQCPu}yyL& MOOl7вEښ(B9UU ! tZu˲&''4paaX,ýK@vГn㨪Z* 4-uM|8&ضr((yy׻w̝2o=9GA>3MwDQf$ /eYi @)MRf &qܹ8N&iO#+B1+Y\\\ZZT*SSSW+ )'cpAx&I$xRJm4+++m/..Jj(V+ϋhvә]YYic=-*Ãu(-rm۶L&gggz>111ۓ$ɶmABr]A8<<$1fz]J455D&'' !f!tz~eP3`x쨪zVgڶ],@s ژBiϋƆ Bannn2jڹ16778SA圃T2+ljbZ͓|~qqRz,p}.wi"l/iCˁ1bx14mvW3cssspUU!$LfUIܹCEQa"p1v!0~k-"5MV0rEzQι(t:ͮ#!:tN.FuJf;ɲ >q$IZZZZ__,--3BOӈEIFCPVaǧ|uu^D"RYHd`(xZEX_DQJB(JJ%]a r5;YS!4RNMӼsh`IeR)GQA@}e9_m7ba3p0 (ؒ`9 rq$i6rynn.b,+ LOOooozD"IPj^1SPu3ЖNR#ϷH$L&bݞ4-JI9OR;;;n7wb10|& pV EbH$a:Ò$ERt4!;:/pqyA7<厙p8_t JRV B,jf}﫯fz^GQ䇜'\/Jz$(nab2!4777=ztjcX,NOOV c0k?QM8//|cf\ry1I[4j:trrrggÇpO<]plx#˲J s h4z2.7kc&?D" `M$渆alllTn+= cZf2 rm5;$Hѭ$D">WR"O= k}1prj{r-"tFXݻ1x c|f`9[T`ဎ=2C5R\Xk3Ba~~ޯ{By4 ÈbWHHU\ussgM*J&iB |7?ӛ Ȉ?!\QC`kZ.D"B<`UUV*FPUUaJzZ5  嗰{Rr !dkk+mnnwtd[i4R RxheYVjiVV!0Ǝ<{ >_mcnX,G>cݮ8SSS|&ܝiܾi\z!3u]u= 0^(V"%k,vRIQrH$(<\m#stpPJݻ+IRi6(BaF/L$;;;m7 ەJøj4Fh4^xJ^|)ΣG{ :QEQn2 BtIfffFwr퍆1~/IDATn ÙLil6!&c nX,L,CJtk\ݼ1wz^*5333j5JUU,˙Ln[eL&#H*i&p8ŪժiZpEnwGn\C'ko.055f:VT@~A%>`չO>}ӧOXK㷿ȿw}w\ 8@_w}ѓ'OEw.~Q?#G}$[o5Z]Hdq'\v/˸+rIlR8XTR7@hVVV~ӟ>}?!i՟~O?t,4po4jwO~?{P(Fl~'Of9ފ]BH&я~ !1 \T?"?믷?qWg?{<~_lF3F@@@@@@@@@@@@@@@@@@@@@@@@@J9Ė>IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot14.png0000644000175000017500000041767714717152071030355 0ustar00hanshansPNG  IHDR6OsBIT|d IDATxy]G}խVKɖdHXcm<;@}\ r!d{WnLn.C fq0lIq,YBww7Bpwrm=g |߿n ۶T*|g f /]zQ1::J?JPذa[n%6mu]$w q򖷼˗ST}t:>vŭʏg]}+V|h}{}(x[ʖ-[j]veضMl۶ {yq hkkCk͓O>l RJž={Xv-Jd.RJRqLEDQD'u{xͮ7255O<xBBBB W_M.?)mmm3P.K+%7t}}}A0_ZkL=yB8n``}Cٳyiիg?˗e?8q3>>>OnJիWsW;Qa,C)jR}k իiii!y 7g>CTⓟ$k֬0I.C|zh^z'A;.BnRgxǏ~#ynvV^\}!sNFGGٶml+VpGZ]0.x<ʕ+gg(,[d2>Op]w{nz(Jhioo'~>uR3WJ?y/7M!lK|`.m˹K, ۶gOHHHHHx!뮻8se||s9m۶SO͆ԧ>_L ƣ&_΅^Rj=xtM!شis{.\s Geҥ[ OO}Sر.h^z'ٸq#z .qN + 4riqm۔J%30gF\n6o_r1],ٲe ZyzpUW-B*hW8;HӤR)R{.]whoogddd^z'p0x[UW]5R[ou33>zW5%c۶m? PBBBBB ;;u~C"ERJ 0 RlyGTbŊJ%rG?(7t=> 'wWUޱcs]t7|3?+]s5\|ų,}o3<+իGJIEr̵T*N=,uQ*( Tn^5RJv xBBBBBB‹skI/'Ö̴L'✐c!cZ>`pKOHHHHHHxq1c`Ӧx'$$$$$X9F2Q/$$$$$$I/"#!eoFpYBBBBB).GowDbϑ;(+Jo *G}"߃f:gb*N!Y:gf "ZB_b˄bK ~B chiYW׼ovw/bZVT ԹoG?鉸Ƞ\ }C0t܅t ֈiC ا @v#~/MN z΂3[}=~=0h~YNX^xsj5 /u?;0s-o@q+y0}d~Ѓ߻Ttv=E;S#Yp۾}nRvsۦ wpRBu Ʀ.!p·`%*ci[sYa=X4E=YUp(Kς >đ@yJ?˶7ݸ8t;4 /"Ɵ zP4??Rhl|a8#ɢ:xۼȮonMQO,󄄄G|+1j`: pu[Ywo"\3w#?Z]?{ Y\Hjf,~/Cϫ.'aDS ON$P77CЀ_K^ xWkл*KMоG{|~v]" gn:>;G8ֽߊ(C蟙*[.V]F!fy'|u|,~ V[_Z?mXX_\vXNxW//?v=Bp\_ :.$F^qf.th>Ǿ! ӂ\<L@X~6w>x),YOMY'!  zP5p)"r~cw~ 1u5q1"8t/b|Mݽ*EGC7;-gP8[Ԡxvw0ǹ3xWয়37\4pA?eW7߇<o| xs3_CqNr>|>Q hȸÐC Tss(Ye=մ2Ǘ%0[N=BߝJ_̼G ߜDtcWO-IDuNBo;ib HfWxxY,#$)/t‹t$$X`j}z%ktӽ>AAǸ{qI*JE(R(1 gJ򢋸馛Hm7C>_X8>񖷼믿Dܲ,oL&9L8S:+hvc?NKgZw}i%rW Bh4կ~8JXTV03CAR;\\%,&^zRJ&'';)W ɻn8}?iۙ$r *c16@}8ZPwvYa\X nǮs➛v<@65l`A<TJ(.Qq4ȌE"yu5\|8,|ܣ S6gHx8Ӳ5Մ,}sı|4I}q<+kTR9' Us~Z`L>期9f18s?  @s ΦuC] V]Ĭʰ|ZA-LDn)ގp#]m\C=rq Q2ld/sY8 ]tZl>g-[MFt&˾#U~t ʂL("BX)3aHJiLCb)S'~ "Q86-xn؀% U˗g(O4 \|a?[p@Э!C#SC3G9+ RH#B!#C,)0:Q#2XEٮc2ɤh-JzmN,+A5f%cHWY=0K|r/ mP86->eIOc2<H,h\!Xѿ+LT D^v8oFG}Oٶ ad(vE>R*)HSٱS5Z 5CĨoY'^B}bK4u|*&+2˖Skt$]¿=1RTMG5 Bq}e CFY ڲ3T,1rYetv-Gq ­n Ѡ!3Z M!NјH9) r KZdR=:L1(Ul?ʡ)6#uns| +/?ǏCvP&(S|~04-"_]'m#R)TJ)T&MpY׃r_=: TJSЍ!Ҷ)Ҙ1L !>mPG4fX^ 9c1f7L$@4Rj6Q } 9uӑi}̿o%H1yMpfI޽I4"1?)Y3]I9g.`hG4/f %=}g@3YQėJQ Bun/.G#"4܀RFRgj*h2#U*RɱUjL>-}E6 ]Lqxx_`[?C>?f tlE9*UmdRaCwq'tdrTV\T)㹓ll7e݊6FSj"6(+f54 P86|v};ѷZCcbs bطBKg-% Oy986{0GGL M+U8RNEtd~| S^m-@$@)J#ܿ}?GbI6t"aClذ0 ($*1- !!KPL=D!DdhB2,N,28tt2й}b꣭lHI& F|}`7?w>p2j#eL4q,p$e`*I[>OkC +Li NF]Ͼh b$ #v;Ba283:V!(2APo44b&*!L!,;GJZ$Fst|òF / n8~ BGD@r:槹/ű:{1?)1RՈc m"ytʃ8g,B,ǛǷf\m=q  ~,B9HΔL+t^3qF՜M?.3lK*8̆:V&7v[>9 Xqp ;51ʵ2&jH+%CضM)|'Y$c0X&^Wo|bЮѻ!BiNŁWamFH}$hDzmӠ5ԋ-F% VHtg# ^/?}0Ҵ3QDr}t5 "Nm\ؾ4=}D%ӕ~U2l31Wq%;yjo}acU_^ZX%V$#>a,Xiz՝揰 IDAT] M`Ms/  dZ6@,AJIP:BV}ɡ&:NV,'NYD~&RxQcXӢx8yшqd öLrvX޿ےE*C8pZ:H;uJB7-M<+_}9՝1ʻ_w[6߻Q4ȃC`Xi(򱤉m($ dYA(ќaJx1)iR(;dxlUQz{ɶ\v=mu<niܘJC m)Lib:Ps[ҬTԴ&^Y=":Ab6Ә_ftxv/TH RXE̴x*F A,y4#-I-RyAK1CAfЎmK[j.^CRSOfcl ~k?Ǫugqpr|ۼq^86xIt1g2X+9+&%d-=qkX Eja9 j#WҵD02:FڂZ5dnrEB[?Vn0=zbF#T 3Wl GxbFd0vv$=+;~!{N1T]cO\vqcC>`:492`GSH!&cS_a.&SF<ps1#SuDJ X"Q,be,| +[قsD-x1 V CONꍀdSi^}Ui1u՟[A~a~# nƴ vdX5a胈eSd3i ilpNWZ!sDFcRD"Gشv)j`[lZvk P9L2E2! ћLLN" ׋pGGXabq-㪴$;Bǟx9ino<׌?}ܦcmStYgoٝg?#5OKfypi ֚L:mrEjrZͥ<5=jW+Xfӥidi܆ztvuނC(2m|? Zr((B!%e:h-`‘&I.~7[uŅ^4$exp <ǐ&t 1 Qhbc KI;)D,HZU,AO;!)5nJhR9Qke[QXHLB#ylƅ$FJItuvE'j)?rPQRQXiV}"c"* Xb-0m]!k69=p,Bi ?pu/Ŷjq$%p啬]M_dEOc.m# wV8BZ'_ Xl)}\7V0SUBl:O/28Qbҷl 'ގ&`^hx!=}],>HYؖi84}}K/m3plP~a.|ZMO)&0ЄxxQjndCu ])01yv;4؆%Zqqx`n']4B#{5m=M"~rmw݇:9̫V$tZXm62 bE*c Z E9{5_M4Nig2cb9):&%AWwܳ^*FLJ+RL*J18JJ %YK#k(MKBt3ǩ1tSqgvɴ"mC%6mXA´8C hI9iVZYV=ؤYT!e(۠27Z3]Escs!2Da7]% ZzI8=d:bTJ!ݫh_;ѽZx0{&"^~2mж&ӑd!#Mt53i 7A1Aײ~1u}=<0]mS bjD6)[e0s-cR4~Ã!l-JHݴ M##F@6J7]JE͕H#61m 64J>AGu2&ٴ PU^L-C|/Dc7$a# zkHla*JkE%P. ]@z)՚#u@2Q+|K\֭DGBK URVҧ_W 6aeSY46y>MW!W#M&퀊,Oq\l(R(@0ql'"I a[&}** kS(PHcI5lbS24Q %V726.mg3CX>QA a fUW)2+B Dl`zd:TgvNd &*+;H,F +͗S*GbaV `!n%nqD`O?{QJg-m:=O_ όQ0LYe" hE5߫ Rh(&@Y)a$w(8`-S>]l;o;0u2^$H084i YQ$#pCrH[pxx(2QK}` dwUgo{޾b>c۔رV |,ˢޜ* Duu˖QȤ bP;hW]z6~;huw\Ids1mxX6|'̓,9nozfgA$EQd1*rd9)٦"%U\D+XiK%.6 HFl3 ~9㾁U9o_۾ː8 0 %͇X%pJehr A 0(+aV ,pZ`cIŹ ts걿bSR.b}gF!YѬ7Rc]\u*Wz#Dy1(d4IrS쐬xӥBIMs|()E-zG[mA();.ZsP בQ졳,)X?KAzማ>x9:{CVGJgv$gQhr!8DbAdA3>a ֠/k)FĘN!(VF[LZb F<`pb<ެUY J%3p}EjqW.{D2ݚƒS&CʮRq+93O, +T>dP ԌJRYe{W/~h4|g$7C=Vf[{tcV]˸&Lr(gtC) '4o]Ikn8'V)Z@0d~Jܪ`fEZeڭPq%F@R$9U=x&p]^}fvw]k 66ߡє|ɢLZ̓(Ey/p0wX6UxDN+p*O!%B[ ֶ f'&Bi~sAڡ^Q!˳Mˀ~j(9o]{j_3K:| mYi㚜暜Lz*IܤYBJc-رt[QP[-&b!28:xA0[M21'O48y)0 \afJŗ&29v1[gw0Kopua21t8#nMtYRjg|,8(54;vwߋ_C@Xt"a4ԃ8dQ!s=n\_xT8\ÿ??p*l87ŗ{[ؒv6ĝ/eP9ma4L"q@rs,C`%ª>>#;R)"Vht]ɲ;1/ 9/vܦ6!yɄCV}ģ^1Ðnac~>OT ȹ^h?qu3?}W^}51ltE]ʞC~7K=h k{SjǞHw2cfyb>mv}CTepF{sw5T.#c{]&j FL4Ӭol_K5+tCgZܼ'߅0"K$O%ǎ7qCjX 9ѳ\hiVR=F}ATg~1ه9Õk[N8\^fk{) Pwaajpk8 yKkr䄴f*Lϵ4* 0i(UX5I$PVgrvi}޹WqYMWxWOoxU^?s=Ud.z͇pk օDs}v x_\itRɋO6ղ$t88W8ͭ]l\Cd |68L0YAP z}iRSg^'/!_(Qw P˨17b%^NY8QNIec+)(QE%MBRkG+堍bllROY^pHցc K쳷azʼn bR6) & {,w$;a\Z}|[|ɋ M7*Gu=+-O},(J?xyz|^wwy71nU*w^`d>#lJhV;%q&j1Wo3Lt{;Y7}dU'\(dn2gA +[]xYeO)7\QЋ50x촇,YZ62޺̯ܣ|\JI@"T*VEzwJ9&/aQNy8=loLlmХ ^Z3x,J w mR{ȫs稷O=;QYhU9|\ev%_5~0:V<lfunM )lX&8#OSXEH?I?Μ3(CN!=,3x^EdΑ&N4k.~Ǎ 7Ĥ%6MFh mr9z9o*x+Bp*@n~5'WG 17Y"u%%Wq,D+^aHgDf o\k|ŭ=6W:m,*"3EJUTB 7yZ2_ۿ'o._ygko|Vǧo>kv]$/t"L8jFx@MC^">j6C{}{:˗7` Fe$J@m4* ~ɐgzu\n^x(f{gOҜlo9򌋧Xr|^K7d20WR,6,Ofyy#F%}ROfEXv};@ Seغ1bp=趥{$qqѣ ap#tB2[$!_g.2>;_/"԰Yg6H+ıa$aD)|#4{=ΡEpd8hjHPJ%RJ6%n>+'X]y,i5\>yRN@Q-+[ƙ9,$;:%Vp2OٌSfNT̞ bp8 {18s 3q]wcӜ???繱ʍuyL3L'i"I?f H򈙩I\^LL󔧞y^.QDVo1BqyFi)Y>QH0X"B ƀke<6\(ޏKpsQKlHiX\\w,Ʊ&G!Mz`^?\<_I/52騂-hObe!)Z e\TȐ]\Yu j5@۴@KCQ0B4#ђ0߱2'Il,)[iy_yM>FŊ>yE~#咳Aܖc_!+MkœQÊ51!!A+TV8nb-ƺEo.S.FHa ;=!dҪ%d q˲7/^t-fw;ۊz(4eZd]$ G9=${@ o+nlrĄqNVtlO} cnmouS!;Tڝǁrťߏ s(O)/y2C8{9={Z{5!+Y];BjNq{,LJQ?F[iҍ2W*8h s t>WMBDxq툣%3f5[6TRDN/-qCVY^^FBń"^z'>b=䕫7wTQiYXz&!GC2㰼DTehF0]Yq]+4$B`3L ’}v׷0B#q]qP*(X,FgQDZX 6(!"!m4@`eF8,i!P1S5--@;YURiZT%09I):˰VJR sZj£ dnF{{(7hNNӬ͐I$( \ySuz9ˇ$3HiQݸ#cnB; YY ץC.VVtxᇁׯwcjL{,:_ ;0nmo簾!hU q1Ls6K809=}@n'L_$fQWȱ0!?هNSɎxS _ xs\~T5fsAC>* y|KC9t⒌|@̖K̔86V~H?yyz,_o醜>YF?+\ڸTȍF"\$R 1HG Z1?;a爵(y.yRE̎GާÎ qa  $/,ψ!_w"{\|ׯB^_HD iM3ﲹru\{@k'O Kd$QBœZAR敷WIcqH?>aG)y>[/|GzԦL,p" #t7't9~b qPY|;rSu\*?Ewc?yfy"^L0:Xf&kͿy+$pD8-6a9a.lGZfjne>H)s끅pDV*FHj{WmzMkff"0 h4X!i3p}%C.z<nGZu|4DO-c5g9L*qV%퐛⅊268d*浵kwwyǙUm~};Ӝ]PoaZhR5yIk! s5?\h1ynHFsKMN-rb~vFgdFVS*9亐Mmza}/ OE UVs8H k޾* R ]XCTNc:$=m9'wx:?5rpÕ[GP-0n;2= #T\WR:j8Rćp-nKǨO:Sr$3#4%RO-ɻ&liՈ:9F-\lJ&>V }z#V{-?DzuB QFq?癝=Cs&6kot<5E>2p~8q͓?89r=r,OQF " @rQK>5FW8<8 B$y H EfZ1EW^\l ژBt- ٙH9롍ϕkf{Ɂ4bvNڛ kŽ32B9_%&k1خma/⻗)%iH.,ʑ|-ӳȒ7&ז7֍5;<=<Ĥ~w0kFka8 9&wΝ9S'?~?Oר9VU~nE%PFRqD20McR0µeЕ7n^ 2e\g 4~YձdBE1 i6ACl4K b2G^5@w8{f| zb?s7z^ PTI>S-7qE5Z玅RI>p\Q-pmz.avvsx!-JAœM\LʌOɅ$g9,I6B.@193L5;L7ʐG8ҨoSX?Xx-tZ.q"zئRriSNr6&lbI/}^<ůinsn=$Ʀ:yVM 6PBʞOqv9u2ab(?}35E'Nea5MTc$brxo챲4Ej lya|lm3p <(w6ނb={f^Z@bu`-`]2<JJXB}I zT(M7's8?@((,E=qTl83kњk/"ZT8̪҅߂j<))dZ/A>(4)ј4E)(!39Ɉ5rŌAs]V`-2>aHd6ph@)ҭ.LO ujbvͲP(WbrT$SS(%92EZ5<\@Y;ɿz$n) ۘSJ(Eks꒩AZQd0O@ TVj;D#l%˼CYʒ{Q]eI˜Z͈sZB$Ks5Cc6'(aSKYZ>pqH(/,^ %lxLiy|He# #*粽K?  H1< cskqy-E" 9(biE81\aIX" IDATb=5qsu+%Slo0<̓C=^Clc!75["1@ ۘ{%;B?( Qe2^Dߥ\.Ӿo\ opmmDY{z2IR[Q>=b ?/ׯ񥧟gf"qgv(R@=Zk [!8Hւ60Ve "ӖQf p" " `A1\[ʥʸh*ie(%C!ct `v*!z`Ȇ=m)|Rz m!ÄpD$Ԃ +)ʕz^KsHteF$M-I볱M\!SIDV=bb+2;s+"#L+C9_:"uǿ(:gbu G`qH}ˑN+=9F؎j@Q-AϏ3~V։SWrEh)$YCg6q 7Guxp{N܇5Cŏ &=%wR?x=4:Q%:cǹqZcN4\Y7%r![`$*b76%4EJI$'q\\)D?uB_KB#Bes(ϒ'I2tF#/Pk4q]p}ZH!y,ad\vWoX%|UsH Y 3SD0{}[Y!bnZp3Ch^1ьT,F_9y؀ȭy_Vqa0"9Hb(!6Td,h? 3vpgFs˔!sVR;L+"+8x ?lI#ܲǔp)ĹAgFT|jeXzGX~$uN LrȠ\(x%AuV憣^tZ:Neq~ cS&b-Zkg>wj&$ND٤(%Hb<8 L2 dY%E"űI\|{=א}y.Sa >ddhaQ!@bB0"e>d,kvcrVQ8kl.q:KQcm4w`^ڒs7NE"5^Qs1 g zm"걻sP1ڃv{ ?R/10/,]ylZW@[s F\?C/\.ƎXZ۽ȳ8Ƥësv{ln}ffs|_3)H(()Z4aÇQ8orP%&o={4@>;s6j$4:IQ=Ǻ63)Γx"$H-24V:qR-m)[]e9|x "þ͐5Ʒ~wڛ|rg(=D*xȠm-h,U :/WѺȳE[R%U J %HR-nڡq\l:S * âs:TXvhz8 WPAUeh4`GSN`KZPU9e6vNȺz(QiMAdK˒/}7^C$MZܿw _)7ńt6gu30YAh!=8=|YQNB'aE1Nxv}h8diI<3H/,ʫ̞3[B4_h%v8;b{yIC֖%秿ʵklYSِػ6apen^}D 0f^G#LY2YNʦ4z͟tEE+&"y>%R-$409>|qFASzm>|µNHX< BZG'GTcXcZt=Nk␪*C VSR&)66(g9hd>IG4{]%xܶ.j 1h,ݵ%VU@+cqfLc]^gtC@e`{MW>,"xdBǯaFG>FhД>BSƔVgYVxB:y Ȑt& αcap\쐂TZ~i ^m!\dfc'FVJu s5_\|jepPWo+ˊ*Ѻ"s -6[~_ҕKRc$i|y)7|x@Q;K͐IT+k}tiI4/_g>fy2zgϮnqy8~֙mZZLHC;w8ߎ.^|mWn'fy!"1 ijfH˜ ,r=<Փg~~c>/q:#f` B("z Xb%RXS҉=z<&;G S<0O)*V;9Ra{Gʺ ek mtٓ;(O9~{RZsɈ h. /nFXmsr%B/%PB( ўJMSg9ͦ=OxvE/lZ<8:tFUU\<{^+Ə@٤QТوkd뉢 מAΞ{B0C@ HB'UaFQ̕zlNΐB"s=+yNnasr\!R\ivNؽwVG3JU RpooѐϽwOup{5N9EfVEJ\嘌 /g&_4\֥Djrt< ey<g*.k-nJVm)ht%FCs:-sfsWF"ް#QVK\tebAJ9b>=/b k z< A,=No'9.<&_>7}rm&'#zҔ+=Ȋ1e0-oRܿǙ-e*+l!u. `XKҼ`2$FzN^t;' ƫ(WI-bS>dyĢҊjpu`5 QŔ<$^]-U9T3AȒ5u)Ȳ&p3''YA1$`eel>`))&tKR!UT!YTUTufs)^k;K4Vg#x=d< ϝҹK ^?ʅ |tp ;fEZY' V 0(x um-hDX Qk搥ЗGA!в!(@z {=R?-=4Ͱ)A,h%M3G)Y(LƔ!qr{/lBn*4r܈:w!L>7ݣ > utY,dLlt6?p2 G'44s7xBOk*@iIـݠHOhH8݄ _Y䭻eiy%kFf}KQXp~He,H?IM(-YYr: d3'-`3uj#egXsurWV*)(FڜL4Xt'|?կ6i6x499b敫wXmIA{c~vb'sJ _ 9?A,r-QdĿΣ# FV.H ]jըu5^Y<'+'s³ -fD<|ˁEbZB5҈Ƨ/DAyV+.)&k!-44puŢ~jx`sgWw$QT> 77XY[g>?f!oxjMM '% qwKVELj$ǸUm⥧VXi'l[t;ٔ"Jh \ s@s f ,B14ip:'!3lQrrP7< ؤYx6_PRVC) DI05_ VBs]s 6W"tpd#K. r!ib\4HYoVp dsr|1As:23fy>ƕ`aXzc@7߼F\cr1leMױ~4gUQʢ)խ^!GUy5 ^E3P:P㶐^C#3 {~_{ 3,q5b?6aY0gk! P)6qRMbpz|64QOpa9W\AF8g#NNOƛ4?" Д!>S 3\Y^(Xe0ص)N•!B)\ēXYY Nrڂ5.Pγ{|!"qtOp!>fHk)\tN&ХAy:%H$1'jT8>dT1_{!- 3f#'G#fs~h4pIZ&+K='9H>'#f݃!͸Esp뀥6v9W,UvJ- IBdy1s }f&O8* dp0抓)N!7iLg9~Ҧ2@IrI?;'%lz A.[H’WRI p%e"- 8 ogu96+̫ck? f,yk~\YF)SJK}o{N122tPv!oܿ wp OxO8OIE&40+B*Ö玨^3O9RT$R :3!9l)ߢq%N_e5˩czqj, RkTdy덩/#5٭iiB\}&(#XئB(vEs]Q64}yM{YQr-] .~dqeF5˰"b:M,,M\y$ek{ոIYZ=5TFz%V{_VI(APt㘸ѣhW_7o*#paI fw_vlQwg&IH`>Or^?pXinw>Be8*gMY]8^P$R(ѥsk\@Cٻ~$HgB#JJ uԹ^LшYqcM?o4:RU<Ɇ3kǔ@I,BCW%F̌4M&ۤ*On#Kg(!(^~/cvȃ}:II-1a8+isg^ڠIWI|Km S͝iQ!K[!<O dwxgt0`c-…M^x1M 慦UYJBV$KҰP0e+KxOQR?K, ͲAψ6/޹GgC f83)/n)1},lZv([gҖQ[>sR'4[ehZYYs&q!<ܙ3=Et^bh|>Ǖ.<"-HE hP}a+3ڭ ޘ<˸{VI@̧};$=ӄ$N`DrgܺAR"ǖrB12g=jmhnD$9/3V/A4d:#--* )M]nswd<X-|FSiԣKI1Qk(P$b01y=e 3eՓ XVQ@]$08!e1Wq08&l$a{')'#[!ILqcnE~׿^xfU e(ƌ'yNϬ2Ϫ:ha2+x}.q:2V6W) Q("(cN8Q[DSLRңlwٽ}Wf߫K~"qE%v#rsǤn%n6(Ӓ b3K<&,u>su4<}׸7⒑2߽zHLL>Y%>x6V(FZ~9aCaAsu<BH$6tz MS z2zr{ CHA|¤A~|V'č.Uh}N1oɘ9YaQDǵ{א%t|^3K:N&Cs IH5 L®NF,` Af SZaҳbNO +lnxB#]7`(&^t#uLpdrr:CW^L9JDs.r2g_3kFF#c<8wg9Lj$))ZEZ0(-&htp'k/q5"!EhH!tю Jx4b=0[vx!r6$h&tqR>ٜt4@e!^[?O^B#Nk-ɔkhKX$T V], T,aJKt[ܻg%?yMIO^-/_ ~/5cV;ll,{?ns 6q6ENCB)iO&s C!b~gnq! 3jyFFJ+ #󿔪NCr;]=#zAaĂ\ G:U.3t>A#lw:0FTyJa9 bq\ltKLf#r]{X$ '3udO9a!H.WV.yd`Bi.raC3 M9- CU̬`^Z>iUR)ȴ`^Y(U/H Yhtբ,|-^}pL{|S}'B tINo@昪+EaBwi $ex5ar:8AG` t:8K74J =f4p@s۴)T`{̧s<kꂬɻ^s~UmXP;jXfo.T{wh4bځdF2Jyh{ф()R)cߤ3x{U&s4"/]LF#^|2'=Ie*px$Ŵ,ny9J3{n^.Z*BT .JXj5dW]9N (k 8+7 RbB}9?Ofb?BYEYŜ(IsMŤyVVP2V}8g7Z\r7p|! Zi F=6 >NL8=FV/S'3V&( / R8Ңb.I]ۺVVea'PNr֢7n31P0 IO$ U6hp. X+8tk|b% i9hF&RkҬ}_yiMp EH5u*O glpKKX3F4ܺzc8JvZܼCA F@UC-nJ8P4.<^<ϟmGPJ;e!qHYŢ)\ږJ .LBvDA%bRT/l&1/ ^|Y޾KK ~xu7?^q|6J)vw,<ƨ76 Nؽ;)a ^/ wnr;[g;<ޠ-"j (/\&Z~7ݡd<7hI3O;* lR0 X^YRˊ(QRar˸șL'~J _+q |8- [oÍ|O[5 5=nW>קomZ-kMTΙxM|U$tYy i6ڍܽshJ J86~+GgD ?a$q*8:R9N!>H2w6pcpwHPГ=6A|od2>l, wG &՛בc`"~*)(r+ M1ӖTZPZRafaP 5zɋ=~=CVOb\LuL F9Is28!n14Se9k[4?9FW>@JA%iIZr*0B[,0דCoMU$^}&G%ou^pvs/tKμ3qRB >xpʣBUiU2 EYKciU>ZLQ\0`(UG,߻аÙ,."#- $Z'_`8rugf×٬|2>a3d27XK~^;8L=E1ܸ~.;Cϴ.+ 9*?dn;^G(N$>$~=8{)" Eovx43*4v|y[UOJwFRe.Ȼwd$,ER-3'.vZH"ڐf3ZO q~"[Yq8;(yp\]|i_b0"$K?±HZۣӚt)$޾~8m1?R)QXrcnO驜b B~P+mЧ3?ƫo3wuM9R4i 2`8<˘M,7bVZdyd6e2>i6% (mWՒ QEA f̙-f474|3i]gjPU ԙ"s(;U7kkq#`]5BD~ϭ.`8j(+vSMƛo2Vx^א윖q,x=R8@p>y8"N=sa#s9#$CwA\G\NQfɴC mږGԤ2!BatE C;(Ҍ0 |zenkw~w"H?Ҏ<2#aDSCSYJ`zXL^ЎYIDɝ9`*K 1)<JjFS%P^ L1a<\h34-!J/1FSpB0hhDЋfcD^! yvUJDIrL)ݶ>K.FB%+k>wx>9ʫƢ SGMzQ~vB:)JC\ZL^8*,w$Ľyi^yͻ9{==Y`a I" d[v# Y YRX;s\=QWVV?ެrDDTTvdvVU}ߏ类zqtzwT5ey_CPkoyՉi~t귎䪗+no(P#}?{^uj7oLǎsmK)&}#kSt lƗ&` |Zl'-,p%̓9&ƀ%Zu?{D Mʉ& Dzr\OҬič6xiem`62a+(B02ZbynGq(G2EWpqC8;d6V:5c,Ɖ"ɬ֖ yeqbZu(+Ğ4i"&>jqJ2fÈ$Kin``sE3UHj,BBQD^1N@Vp%s}saO9^[R 9Tr0R6ʠ*up-1N)]H(ɵp8c 1I CgꂛvKM;N IUweLB3|Aw9^ev8~l 2pr}wMoӻv[kr0r ĝ s5e!N!c7!+f0!Fؓ?Px!eg98CnBf >a-N8m&1f f@F$Vi@g3|HHÐ٤ns|elvI 띘_{}lBLƖkd);vR &Hi9er&pOYy dNfiU*ٔ"d+J#dv8 oj1Q'4,4%j<*\jVOܸG;,B#ş/c-#_j>_m̑^%otw`iuO~_mWŸ|5r1EM t@J(X=ɌYwy兯'In1Mƴ|GVL± hVIaJ1 A^č&I^xV) ]ɌDNd $̲Y6GTEygN[ս=VV#djhSUtF WL8̽NoYgܚMX68ija uD 5|⻞$.ڥ暃Y #fHhDO(r+D% ጽ!}wOnC-m_q|H4޼=O/giNVh =ՌȲ(+հPN QۄeYzT`E9q;Lf+$AXZ^l63a{՝!NQ~k)Xoޙxd+Dv Bb(/W6W_x>_w=qW_:08DG IDAT0bn t+6QpxExkPLp|˻my X33Oɳ.k6IgBd^[;fGΝ޸@Le'ɲ92:Ku%âKUB` R ;ZB5p*67Q 66xX]mq uvlfۻ%50Tr8R/΍āfuAWiHuʃMspxG2;Īf Q贤jw.zv:NK^C Wٱ׋ՋSǗ/xe?s $B%J> 4pvX1@ q(fVZRisF:"8U}:BH+bXPJbi{;YH d>'B vA+deW((8s:-(,i3Ƅe5RV<(!VHZDTZL&ݕv:F&!d!- .F8х $$2m+њ,t`FNdDh>c'Cb sz1_>F = rͤ FiAfl18Pf%q>.ںոB= 9O48Cn#bӎ=j=?S%z23L(!vIHΜ9S_ 8jQb%0xK)Zc&|c,EZP\xOY.NC~I:Zz]{ KM|/P][S爚J8) ^9yX }X5d P(*1()0]\*9GI'p!ᑇss][\pe ).Rє.EDZ'ymc\~ Xy '0t8gYf^{ ?$Af%KqoHm:'v,->7ajJ͌}Yݪ1EǷOvvpm{7N8UGd XyD%H!7((V zw-ý ՂK̟ lT;ڏT@ŁV>Pb.:Kwi `dQCaٜFsrs2-5(!,2z|D1IsxxEJkh8 uRzSp2`V(O0R&R"E[#Bd5sV5+EQK|^P:h2[u _^ĝ6qdTI{C1;iNL>pUhcqa4yE޼JnNϼr~[cзS"z>V _!Q3\G[h4ێdxAfT|ϣ^ӭ6B!q(PbE-K< Q౴Z0e`2J]\6&S[lo\|-@dP斣KzT'R)ӷ1t2)A8t^nӈ0x'GCamYm/ZNz ]jIU@*9,4eoū{hr4,V+~~޼|.ٹ&y1AHFJg#|߹P_m?&xcOuQ"3g_{";xOOֈ 1'4J㘏LZf+++(O|i~.,ڑr1yBN+2E5*!·*fX6@(*P[TEWA/J ׌1n)*t }|:yb>c&Ƿ66rom5y}^Ka-y3\Qt?4o^xSNsǚX}e 4"LlfICm0o!&cڐ޽1onYα}<䥁!Xߟq8ܔ:s?"H٨ Mr?:UҵXXMT"EnQ5t&&:uveB|/4#+e "r4~8'(˜"9G{B^ǯ$Cj^R>f~D- Y638&aNDVNcj5-UHȚ"KiVZuP82kAiYZ`y UǏ>IPgdYA$ 7m9wdڡ]AYVbˤ!)cD9v(0KfL)_"2؟v.\"s91H&ױِP\m*C\ Y䈃>:ЋR'9,tw|\d:0Q%'?R'(}.Tpo,wl.VNf8ءۮswo 3'c1I@W~ OZO(rl\7 PRf)JwYm#ac#m,Iz;h[㏑ٜC^M\k>%?C%6ܐdl)')?=8֯1ϦnӂdFz0=YmC97ݠDa[ES'y?~[.S H3a(Qã( Y2YIOH<)UI{c4fUJsi(Qn[VK})VVƛXc)c8p0'(۾y_E^yqBޠ,!7ן qFጚ>6BZ[:@a+Ks!Ja=p!\VaA:Qo\MKVJ(2UeX*  q ށ !IVpqdxJ )S/J℠,-ΕL#Z:2g(rb},ɈOڭ{<.]1MǙNX,_jQp'MS EuU=GpmzEqH 46 L&҂Rpg)NTvc*d`k mHs,·4;9&9QI4z@4ؾC:I2/) )5l 1XW.ߠDRi9K1+ʂǞYhl)1ge3*no>KX5O0+Me > K&fPH)diN8yt;K4֏s=*p@ը/!Kjl[g졋[ =qD+%a *H#}E cX&lt,$9y`>Yg ﻋK/0=KyMnH++ҧZzFʊV?d'ʎ ʢ:3;j%0 (p4 ߻4Z@"et"<>o2MY>fq";c29I6^gyh?q?Fx x[ &훞靃.S&%՛ܸ6dyiR#% :gJ믲s<y>e~~؇\&W^q^ i,QhqLe-5ݐ7g&2K΅cr%Rxuݻ›/~=8{2f$5TI)~RC8X!Nf8/9x؄R/ vR f$.һyᅌ\4$p1 QWYnM%J`u 4S]F*X鑕U>86G}IjAWb8$ |m k1I}ЂYʱ&]6k4 [Ht\k\|QXֈg%+h] . Lgsq8ij>51'dE_%En81"gssuRd z\o0 qA}s\zf'3PGi3O: _.Qf'WI8qN ;pD;c>ٚkгZZ0UYjb8Ly詏ȹ'I&{`\҈8kw1x!b114x=[K$PJ<RZpBJB/"-;lؠ3Ҥe%*Jntx6% 4CIK|}4|g~:*ԥxbtHe%PȿVJ0"(Jlba]k\ >(DF!HSܖUa+}hnMGU¢UzcI=X^A1BUUFW*IK^|G [K)t:]+wHCxO~dӿr|B{ΜajN6.WǼxilN)<45y. ,Cs4EG$RAg"K<t[M|Ybz΄H(˜/˜>~~n\M6KVA?mNh-xUamIR2ʭKR yV}k`8F`)˒ՕzLwiLbluƒ's޺IXkCy2N & ya7815Byf JQ-$c\38kCE|N3K `K|fA]k0&GwB3:+ fern]˰$ "npfe(2 Ydi˥+89ϨjBzP=T(Lۄ>*teiZ` hx+;pX8&IAPusO-֏t( ڐkxV&dimxڜ߼ʒHxcȔGN?W<(rf#+-g}jQiU@d64wyl6eB2$2`-FxU~Ezoūt~/Q[¦#تT XTAlFahԘMRS:q!.@UhnAQmyCցau]~T͓]Pl8 g z7vD9ҕ(SBFIɡ#lXÉNWo@XyOkC2K/*-KK-atTQQF8O &Bb>3RGY:!>K lIxSS+xDc [,|ژ]V~ga.8f/$/8R: Z(rkgOrlx8$(,+g)GP)N^OH'"nlslmf-G6ԑ3P ;~8u$iiG1FwPiQҌ6;=D!1ڑsdyU,ޥ(c4[MQoL)sDrpاխQfDl9a2LQ~LYGOfDAi9iR"."e2+"DJMM甅a&K ^!T,<-BZ8=b^I}σ7r'{и¡sp^iNGNx}tZ yc5ǘCJ9(*W(0%h\spuH| n~ݕ.j3#g 8H45 4Oy`MU!- Sxs+PF$gooWFgJ4=^+ ҡ4k~*~[7FeJ[\:ƳPs1E^%)1WTzǾ/"7n-iQ$wHOE>e(#؄Mh=I«/1:cXw?mgKG~.=v^LX+༏mYf$|vJC;|,e 4}x3k7x˯"L ʤk6xwFY Jc}xϣY1eh@%԰Du $!M&,{'5oгogx?2 عp h:8[KqJ-GezQ;>:G/$eU7XXm,ȓ/j!. VAQ8FB[(^FH[=@d!4Sc$fw`87Q8<,Ą+<'M~jQ!Y$L356 /$*2D6yaOi 5$P AtWb"s#=6R`NaF~`4e j,㮸CΎ>pNoΟ`2铛\@ F)[?ǿ?c8Mq:JPHIu1/81xyW(ågY?5X^W Cf;mC]laY[]>$'贤H |c]DbCzZIڞ Cx X]_K6Pz>A~#t?7o1aKY`-~_WJ|B/$|gk`ܑ\934wH%J(crfN LJVT($g>ه)?ѳ\}<6ajHmQ n@[~6!#VM?c<.m<ʋ_qE?csv; :Ԋ.6@h#ML{4bsm:c%afh'|tTnV  @UV,z*]֝gN$p$tJR FO@Ѥ,&- S`1@Jf"i:+%jܽ›7{6,YℤR5ϻdiϽ,gZͫ_ϋ(R5+ >gsCW{ٯ^+άdwT-qcO}sݡωWP:I|V '<ƮsWje]"Ge[cȭdڲƉN=``fL 04dI7Gmx,G-˲dGeZkX9}U$%ږIj$ v=ww@cG?ÑQ&x~ߧXTVA*U56XJs6n}n ˍi$X.RhTi$Q k,,SNw#m[ig33!0IX* cV+ec;.JTo?WIȘ,.1ʈZ8FlFblуP5@tɀQVo$Ɉ 6LBCE!JC~0124VgǾVjZJEbmuDaNa5>wܼ0qGS+P ;JI!-r"ض\*!ksX’DzSPQ &1H--HIÐ4qFmR"%,iQ(0H̴GrN1ѣ3w֩:?d*H"ҁ&d`&㣛AxWK7 MB>B!]JCǶm "5.1x]Na8l1 i75&aC%sH$-pbOwhU'OhjRq0IrЍ-TH`+aoJz brw;*RԂe+`P:v6BdTĨ,%2LZ)ov* Am ƲKb\egnan~d: )L],kBhQ5qsecH -r9bI^-%eACsikhwKafPSmfg-eX X8e_iL__%>QNn].X[> $[1&^ZDcmc<"r@QB&i(E8?/WY;Je&1m4QXʅ2c2KG7)-zƥF:&ÎEiywܩ+("Rh°#-zbI,F'D4aN Ht=e4X%Z8\IѤqLZ9/۹8vrHeAYKj1$*ӶFYP)J0:c3K@R)'[cH)|U0>R.|Pn,;YwK #,4V z!IOE4Mds-)y6avh+琯ٹs'O2'o/V0),u,/hŘ ST< FbHyRHuk&MP)mȢ6t:ғ̀X_$I:șν. Hudﻝ۷oo?ˉeqBl͖RdžBB=Kdd=񰤋mkIkD-=JZa[,cTaˎ]mzYrƈNZ N3eWb.N-0g۔MJd$[BRyʹVlnC-aζltc$LyE^8sPU953T2;w[Qd й!|1U"TS/Wѥ*Ad(n"MZx&A),MJSAH!oez UfoD.,RBxYNF~,Q8-kS+DK1'ODNp9LP(x]Kϱ6_ro/HKOs+)'3=R[Q+OM3-I~w?Cq/3< H(Ck?8qCTRi!)0qPm:pm456Kʳ0{LgG@e :$rLoc[jNrJMko`$_B;;ҢJZZ,R*W t^|M[ 2,wz$aQ-q]_ǭw܎z Z + ^|?uiӧpf><أiFҢyҰ5䜔"<5t~f 3W,io]pe_1Uz/W!dźvK#QxUƆTFZb"$V/:hp[n؇1VJ--[HeI]q)X`ےf'1 6c%/ϕ}b"Jةi~آ VB)_ י=Lc9E[ Yh6"+(o-mN<ЍTktR~>U˜_SMQx  cj9M 8Q^-S䘚3R+`EuiDⷉ;v]Sڠ; S,%1dFk5`r]])!eg3nE m+ {!O5H7A%\pr~| G)r+u8]MYQfIlD~..Jԇ8 -HCX! U+kP̓I֞"3 h֩kEf,SvFۘl)dܗz x+A]d2_x˒$βL6L&ƲEL \ch̦0, "z-xtl]^^Zd@*l;h@F:ŷ $b+ͺgr(M" +-T?+4tt̵7|ĹܰΈhEV@CCUV[Hr'06ZgX<( ML9#z=@ht,AhJm43/0Jjԛ IDATﭰe033MY !ª8,7RyKĔ.ա!:69WS+g@igKZ$%4N-F,GsCwN"~grʷyHdhuVX^j3\.3emO]X&Q $XLql0Sr<O̳}Vx=̜cGS)B~@|ĺ"QzqELX@wTya(8zN[ʁVsU7O H/WI+lPƐj##k K`|z~_1=L3Mq 5,MXKx`hأ9Dg8|s((,Fe^@u|Ρ\xyC'MlZ, #QJ:V^dx ߖD'Z4͢f]hI$1RƺBCE4$Gtuʑ-D!K: {}gz|&0DRUmOߔ ~??jy p5+f?9/e; /i6f ~¨,'d ¬&QX\2,%xjڈ(lpCltI%_k#Բ.lQK o5d MS<# F&́ߥ#=XB&gKe/,-iP&% cl#RHeij39QKDQME̯mfVIضo;N RO;߶IbHp+n۷YGG$ءޱ ϓOciڱ |4w޹-J(HS"faysP/x߁8rdl* kkݐrc4)1ťkD-FGbc!EZ˜ZDW%l=$(`ykJ˻\ݭx ̢R&8\rJ9oChMs:FkhQBe)\'C 㦽uA˞F;#s\Igchz ):t+Ң0J tVL%oS)%\(P1JF(bt LQplML ̋H!1:FLS0J#`&(1ml fMTErCrn?06l+aܵ䠩6\h/LEJ݅L\傷7k.i̹hNdxmyqkHlv~^ПFw|uxk W1ꀺ_X7^zh\k]Hvq"=% "jôR4m Z)^fc ZVz1 fۡX.(M4;m Dv{`Yh%ma{1'X/p+ Wo1cV斩H@t:![BѮˋA{'[8KԱ0:K1Y_ٱ:gYml?'=QǦt@A:΂c{˂v0Ro>~Ņ>CC%AN5g+)nq;fN*ny@hE U@ b7Ick7!.k-?ey-SM(0A Ohc!Q`4vRp% F@X@8us]*ňyS`DpmO/~vo5O[5nڳǵCuDmpLo˙Gx/ c~*##b4mee!bh>MH2cIf)aSݲ2=FfaYO,E&̸( )yjt0fl%_HےJUEFjܫ}ͧm/tG5~?UoӼNW5.8MWiu%^JuWݻY:G)-D(mXY3PSgKh\[9N#|`lirt]lʌX^i!s%wSPH7S֋yWٱcK+ZLݣ #}IH JH8948<ĎݴZMj"C?h *ryl+EbQhQ5mۢPa1 E9_]Az)I!X[ VB/}\>-7YY;k,=ñ%%BZe0n0fS>ž*8{q$1` Pi%], U)QCڵuC#$[($`t H-FarBƨR)i N@'}Z~e"[wO DJ!^<6sUu1فo=IR\r.0N1l4 VQrRe? k݀NmzNCV'U)&=nA)렌"_0DȦr;vr5\3X؜m KU&EwUM!'h4RBG!':(HT=E.1=҉EXF.B&zH7IJ$}|;N,NͰuZRILRҴH:P C2aq*G7ga ㄱ]%bp*Zbk"RyQz6T\'h9BsgF-\$.q ݰK/ Xi9’WGG, 9apeա>Ad !"FZ6ƨ,LJ$AuƐR uJ^+gAGMa8p4[]A&6فoGE$qk84.؞jOdIZY ~@dH4MH. 78BCUN/xo0H魥ABO)Da&XQLql\ёWYjdCJL9b*[<$t|81qi9ߏi-a$*}(!4|z8YTB?js.b J┓s]S|p-ᘔ2%qԇE<[cbƤhT cP*AiOI۬p]>7G츣ւ\jnSG'-& 3:VS.ba[.;?1>}N~F Gsli W DTDH[a!b<+%  RWDZKZ.32TjRE;JMTJREvYZEiMl7qY\Ff wb@RI_պ8. 2 D+8θvU p(Bлt_tpXX78 $ ! #.PYąI$)~ ش] X2D mT2im`:Fk%eJ41d  1i gX]W.A5foa6B80%/򽧿Mߢn{AJ2J/o@ j j#2G-4Z)(@q,ҵT9M7P.gڨRK`u9࿜LO/s6' "µKȧ(I`R2 nqϹ#/>Qj + { !- /) 7JBs:DAM*3u/)I)H$# AWH~1_4 i8/p]Rp{/,Maeqqk '2 ^ bzI ¼&uASFv@T)Ҍ#c`$rbQa/"ǚ @F1uce@Xڠڂ\ͅoD_`K7`fqm_~1S׸=ps(D,-t~♗,fgo< }?r)kx7:7,D74.ߔbKAqZsQ%ef\Le?!^Z?Qza, ^ 7˼0/Q\; A^#M\#\xvjy6qquZkyq] k 5j5 (@[ Zk&''4oެ Rݻ;4M9pp&|+h4Wmr|5VghQ(Q6q-)NCP ]ÒmZ!czUDžBQ6q-!_q_U=MkÄ5ŵ:~jFX9l[עϳYo=\3B\1Zmb&6+wMlb&({6'O"odll'O/R)%gΜajjj,3gΰm6fff8wPVY^^P(1m󶷽^xV+&Vٳ^x4Md߾}hv|[ߢVw)%#uW}Fw̞1 g޴ѻ(hZLNN^]~gEz)ލG}̶mfggö7}Fdattc RM)z377GT~xǹ.{hy'1ưeiqg֭sJ)i4KH)ٿ?ccc?rez> xG.{_deeZm݆R'|?׵jiiz~ rrSO)wu6rot:TLc ۶mchh mWi]C=;wooBկ~{}vJǎg}/> J?yx≍y}k\wu߿{255ŭʋ/(]wv{nk.=Jx㍜:u/~awG&˲c m7"RJAq8K6\7ؽ{7|Ml,ٟƠme q4MRn |Dz,1DQD/{F(,kcr@rqpc`x5LJI -1 7P.ٳg)ulY<7x#\??u]e^Ǒ#G9|0O=k\8)%ϟxֿeY+cسgӯyU)EE)%A\V)Bfϻ=.WZ7Zkjw~\औ|_禛n"MSx}Iz=,²,_e$٘H;$%YuVnV1/n3.noϽduOkZkFFFعs3pc ^}aY=qQJQ,) ~a<+++l۶f{GGP(m6nx <ȑ#|_2m)'yGhwc=O`6Zkz!Y\\d׮]vM~rIr"Gk7 B&ڵMy|$I}Q>o~ӧO.;vhFFFlٲ~ϭ׿uwvIu]ayy~|@0155N`aa]v199G?Rיc_җ4M>cn?ߏ֚~qXXX[naii5>O.> jz΋/= {(BY]]e8sm+uP(0>>8Ht׾*Bn㎍zy,/y "~i4?8BNn4b!c&###$I8<3:u c ÄaH/Z')>|᷄y:{\\遗+m/"̟ɟwqt:>}/^Nyan#MSsa>V믿~c$>(뮻//?֭[71RJxFGG)|$VVVX]] gWJ|_j)rkb3x%RLX}{ǎԩS|#O?4'_o|__gaxx~8/̮]_5nʳ>*w}7;áCBR;}C Μ91k?w?w?KH:gvv/~ӟ4xlj'߿q>_Wy衇W­<|#.qS,G?J.öm:N#G022q_>g>|I>s 7p9~y뭷xEի\t&nj8x s<ݻZ'|??all,; ]Nݻ9pV{ӧON_\7"֚]v/}vMP`jj~zQz-ٻw/gff??ԆA$IT*8z(:uSNq &&&6|azOQݑR^xop!y|bH&ck׮U}ٷoa> IDAT ;8uRR[_̙3\tz( 1w}3N0 3|ǎ,,,o}T*x ( Î;زe Bj>,agg\x1 Klڴ Zz){9/'\|СCܹ3sS?O裏2995 mCCCY2TXkٲe Rf>9~p~~-cFj[neuu5ׯ_g|| v[kٺu+KD|_ezz4VY>ǃ>SO=6SBJNl:3"ٷoccc|_k}n͛ c;688$_שK;v6mt֏1~G\#aV׮]˘ |+_[ѣ=zl8jʋ/Dˌ((a&i5.X,fRD?ccc,//s![lj$I6 SkiX^^l277Bۚ1V?k!X\\dzz>,< W_g'nl6Ue>  5s-g?Kh8N@ZgvQuV*CCCgI:.SSSYܺRpeY1f;EYYYa``/pرlϳw:^yL0c~U8V133CLNNn{^CcA@__$I eǎxQٿ?_W2fi|'.<_Z333RvMZ͒/^fMc>jRJ(\.#Om6$,O3334M3<88˗iۜ;wa&fu=]q%Y>}Z//~T*w4Gς~bAsNy^u~Q:_טWWټy3.\//g> poIccccC9ѣGh>X)y9|0W\aT*PJ#>* l06<Yɓ'y7xꩧh49㡇"IRJFGGBk..^dɓ'# Coߎ֚Be |3a||~(J޽"Rfw``r|C{f4Y3O<{oY;::7M޽;S^yN<ə3gMt/2?0۶mɓ'y ÐZ?ɓ'& C$ᥗ^&"~i6oK/ٳgyؾ}{6?pP(d0bO|zÇJZQTUq^{5^x>Ocpߴ%ɓ[l޼9NC$Lm i*o6O?4PuﰰsO&"CCC'?믿֭[j5* .oFf]ve/pEVWW3~ꍰ۷cP(P*8)* j52>pȑ#;vm۶BdXݔ!s֢βKfA'}9gc|/(h2+oƭGϜ9ý[|2.|IY''?4χMϏOyzbѻݟy>яm۶5Zw>ݻ]i7dqE7v+3~<Ϝ91_~~ݻ7w~ݟ~=s`Wq<<32?._̷-~73w3yݟy&i!ҥKLOOg7:W$]?Ƙ5ĉH)?LY8y^M~׀_y~~>}cǎf2&NBJٳg|WniwCd'E!XXX\.O~oqv1>>~Ǚ!Geǎj;?'?fff8{lYhth6 |7䕖'|\nEO^?< 9^)Wp8tib~Zl, #'=mFὢh-i~Rond=C=DY=C=ѳ{衇z=;_;z衇zsC={= z衇ރ0u#J?4`YC;ڴ+ ϑtv;򍰾*y阧y^'yn4 de+Lވ>߈V7P?y#$ ny{:}? sl6ّ#G{fqg]KE nqgzz .P*سgǎj1>>R3gP(x7F'Ona}C(xG9z({Y/8pQR޽>w7… \rZΝ;9zhFfɅ T*<YEΜ9՗?믿Ě>—T*ΝCA__J)* /^d۶mY ~;ki&'ĉY󍩩)6mĶm۸z*s׮]GɓZ-:;v`rr-[dU6/sNRr5Μ9Cǜ={6g.\Y3 \.3550KKKݻ~)efffX^^hm7of۶m\r{wk׮#pQ&[lV177f&˻dΝ;Ƕm8<\ze9w\6Q[2={ dyyAя~PH\.ST8}4ǏT*055Ŗ-[عsgVbT*Q(2Z`FFFfjjΜ9Î;8~8\pEd׮]:uꎶY!?O$c\|0<<5V)j5>$R$IXZZbӦMw},//# Crƀo' fIբpE9rٳβ… سgǏ#mȻA2Jzɓ'y׳.j"F>\jf.h "Ape&&&8vɓLOO4wAdtt~LMMelR(>ȅBYjZرc|zy>9Ο?+_BJAd ]JIرc<裙l5nH={h4~:AP2R|`{>ę3gxǹ|2;p,dl6T*$Ifff<9}4?0an&$I8t<Bz;ߟ>(F|iӟ4ȱcDz.fZyG,,,pߟuTFajK)3\,޼Z RJ >>qI8x K/eBYZWtF'!Iv /;vmΎ?*N'si왹l|Ѭ5oa"̾; 3pjZ^CkϥKxȑ#<Ӝ>}L)R/SV9|0;v7@Jp{y9lvhyz,?VwyD"DQz~GwGףO_{Ӎ,c_'{~y57qwz݃^;?d;~6D{ޫC=p_{Ip8݅n7r IK==[ |VM'Y6^OXk{4~Pノ}߿xoz衇!zz衇ރ z衇zx'{衇z=[FA)^otqz]*Rr5F^*o; !XYY7:pw|nNE'N)jw|INߒf!LNN 6o|sR={+W]5۷og7SVRi}ٛh w[bAp1>oQ-h! q7Æ_l6oA~;aGGLLLdM~Zܴڝis7X$_`5VH3*=羲2:?eaKZm#г^lT۞wFѦ^*o]V#<ͬ6}? O{cݥ6?%o 7C8W'FFFbie@)4Mq͔EVW4MWTTeRHM"Fq[k,Z[lsƤZC&Zk X:FdppNk0bqNf.ݻgʔwLo4,ߘWK<LMMݲ~\*Eu=Ll:ٽ?o&;}DHdS@JZRP`Ezݓ q1kWՉE0 Bx { X:-C:Ϥ~m ? t摞g}Z+Jl<ŋ0FÂ&IK È R o /qu277*bOkk]ir{ owhݹ16[-y+p_u{3b}f=geO6QؼOYւ-CH5d6"ZeP*I_(k1B"(!` 1V,//#ZcVZZ! vM XB"Vs)@혿gE7޾16VB(HRTPB".3M #j, mB !qna1̿cDW Ίw~ܸwrsdJ)0DX"jrqeumB1`E汒B-sZְDpΣxVusɌ_KyIv_kJ-Z}o,u0Ʀ=RlHϢɎsC57E Λ&P[b wR:Â@`fn ziLMM$ m…c)eWr $JEV@ 9ߒ:ߛܘ{X7׼2j9wZx3k]k)ԓc &U4X녵!3‰ݍ-[mdDX Blb#q"N& M0.s^MAZ+ FN) U$aD_mc~*'JPAp? tHuJaDm-6FaDvs}nG$IH9^!j4I[$G(mDSYf& Q@6ԆHPHD4Lɝ[I hk*]r}R?Y)G@5? ߤX,@I$*0x;b3%MK*NvRBir(0BR B %p1V)Ң\XP+& n=(2Z*3hN+]sya4H똾06Y&s?L0kSj612TcbrSv -xJ3֚^{Z֭[vQ ÐNӍfRg@&dߡ)Y.gxFc0,d¯kѳFP"AJjjA@X>b0B AbbH$d&'$RzM'**ZcSFrwwB-wD `ZuŝkiE-5D fF($E*J6m0KZj`j4)S.9/N'.2iF;k_b5LXEhHi@A9*i4Э[l3bEh*zv+,-h̢ ()!J@T`m-X鄶H@Y*52Džp[pq2Z; n$ֱxxg[; #A%B|a q> TE +h00Xݎxe0*I!R)B8AP2SnXM+AR UPZYHzzY?,ͿH;N ĉs- ':q>)U0 Rb0x IDATc5&p޽{wchhv o/t%.\:C̸'pTvk' !|Xywwvz4A`PJj5$خnghZqKhs14B}|VNqCwFxIop/@w!fgJ]Vֻ,v~.T &1PʀZCF}_q?X\"Dhh/Jĝd&+H 殷XYظ5Nc7VFӴE$6@`ѩ<7GX).8N6Nhtd-Fᘉe!t[OZ? ^}/t7IR #l8f䫾iAD`$ƀv Ù',6(,5YT~:TBT.))$JJgC2~4ej+!1|0D(Hi T`=2b'y"zwf.UgY*%mb%J.@ &}I)Ģe|&Xz5:I\(CP ">###E(B)E+̓$I*`v:Nۍ Q>^ rMX^_"NNtd9Msz᮵fvv-[EAFЁ:R vz_{Ʒ-ͯEGO)RH)Il8YYY!^H)$id)<ZX?F%R2L݀tųb.ǖҸ2 JID@[e$6l$ /D§WZX@;YYZّ6"@"Z`,CAhMdڌ !ؠ ;2aT*TL;&%vR-%0CTqX2DΊHpBHVgBpk؜hBЂSTd=n33@ǠNBd00֐ NT2[+_}{GyDAx5l? Z6BJbㄋ.sqД&PyX0BM`d U O}wiA>-lPX'% sr i<_D-;צGZk4 fBJæd$2EXͻ}fvY 5 [ņZnYEpi~ܵZku:1y&#P(Ess sssXi$ ּ@JE}Zf Qוo5u&ѷJPΝ;RfyjC T xE6 |P߻Y,~ eF>Qwn) n8 ګ | UYXn%06qDZ2xIB"%AAV м@0D5, %FBBP"ҹKBcw}NZUGX#l$: BK{@51*}ij+P$0@C"@r.+7o8^t.VN-)X? kw+Z~ r΍g|9,J,l?N]Tf\[b=!1U2}~v1^:_ֻ#ӷ&'6Nv'1-6]rRD'ke6A "fGO?O_g{XjROGx*J9Z26UFL(P*`HLiYkT(# DȀNo*QH"BȹͳSJenXZ=M=}]+ᣀ3%MH/zBfk | &9rJn.u#`zcx L Cvr<, C2IjuBImTڵ)HPr.$%ZAZ5\k"}}}ٵQ 'Oĵ$I0YaeϠ& C(rs"w1_65 O~,e7[HbD"/(-0X+ ZQ!*LdLЦڦN8'R\ niE.]硭*2Wۖ׾)*/0vc@LoTh0"NL:kuVM=Ů{v Eڦ6p4e (a(\P(` "JcQض!lB;i 5F*T7+Hk@lq |!I%o}bXkeF|z옕)S\q-/lzF9[ ˇ H3]aʄzwrhE<.Fu`o7t=0bAdkc޹ <:u!^RJʕr摾\PihCKK^'tX[T(Ra*AVvh,& .fuYvK8;e&i0arg)e@TbTo#`f%x#1sGl_Y~ RʥS ue%F -B  4H mQ(T4  eڒճ[1V(+D r#+Ha X%)hE b>DY*VEņRVaa4+,)o,Ox.SBlwwK󞅵-FB6d I,̚YSH"'2eK~ӭ{tѺg0^K06J(aa2뾛j={>=dޣa X2}cvcQHZ" #TWRQBJBڝvC'NHLHb5v TK%)WJJ"Z+e7y7G>L4B8'%ц N$(ltBQ(a/\c~i ;CVDň r*Ds3rwoOsmnY*"r Ʌ wʪ"E ak2~/ų,;0N{ ȹU ˗/3>>:OC*qg_(2OD'=¦K¹ӝ)X^n`-DQ!_]~,q76gټ'*ID pd26 s}v>h &VJc&-$sE7"BkW)XrCl<7cuP%Yy \Zt!A*.n68;y@ Xڠ$f)J$_ox:R9b\hXBHDbtd':Dǡ ,.0_6T $sgORc YYe`'26ROTXቾ[wz뫔e@H C$,b(h$pL?h%$icW& &)[@+LR TV`Z̝;]Z䉱{ܴ3נВ,]Juxt\oev'_tH50iS?LBGXrsHt/'LzL=\;b>ޙc-[@L>dԵ:G7@!~Olk?ۯIn㘭S4Xl6Kn!bA_!b޽|{}{r)XtP*0rWwl-#$Pn3 $шTERT#&!&_^}{TAHǨ@D2cҬv| zhZKkP5“AY[t-G! ]IQϪO]MC$^̙s4- DaDElڴ#G|$KrB}}*H2 4tn tO9x%MV:ݡngnޅN/--144)kasb'h4@IrX3wThc۝JHـ=k:qj|[6 $$IΏ' ա9Ld$Q0q=4αB'-޸]@Hj([lP C*"p:+miѡ ډK*{>ΜH0Qv:-dĘN)@29-ô槉EgiwP)D+q/~O|9^: f\ $J& !# ҆H$3cCLucc Ic$$F’B/4 K"%DQp$Y6*,]]D]XD_XB- p)e] Jp|oS9 4;oM:%b,+E-~!]RH2;Gy˾nL=4Fϕ;w%Wp֮ɼ'"Lt#R+E|1@߈DEk rzi+jct'FkM$IMX'be@Xa:g%&"A:uccnnP̔@v҅l$PE&jKt {Q>L*˥z кX'*xKK'_ sۑZZMپ]5cl_[I,F7-2>>o% C>Ì133RDX&ֆbރMJN,--PP*ZvGkV$m###[e 8,/-i Y$rJLB!W萶:[&.+++o6O?4?oЩk9oAO[R"-m# j0 %TpctcbCT5/Ł*}U:KMVuBqd~ \:vw5rtqe]~oLTƧn} Ԫ kGFHdM#*gނ[ԟιY/^e!ҸWvTIax?^! i !$"T()a@ds.u%}-Dв><~ÄQN[S*FXx2z?7Sk"e jV,Nt B#l2N+捣xͷxx}ԥD'i"VLs`<*u-{Ȅs:^7sZ>w;N_v@Qߏz w0n;uzrk2ťU>BX]N__5K  …m!Nb´J襄N.?kU5Y ut5ߧOдYBe[RAOZLjX^^Vsk:xxx.^dyi t|,y\9!I7MdIh&''9qĚ$|nχ>gYYYfdd-JYJDP>Ӥ(#He jb ik褓JۄVТ_7Oӹ0`PWg@Z<O>* e2+,&L@_CӗhLL(z("(`mL`%>F xL,-;uNؤ/c2PE] q!t@{],˪ Љ+b c ȄrTGS3?C-[[^-ѼH$Cr%rwa _(2]Axy.i&&s&zk6c+ǻ1)ԃ.kxVOpIO%]7u>qxܪ땒?Vd*׎#.4DsTHeކ N@JWB<,֟)U@r"XX#*ؾL_$@GduuZKX .@ VQ)Z8tgNxzMǑ7OB"K++ K@RX5nE(62׳^3/;|J\7d*\9J X/W\4VՅYV}_BQyZ+ [)8YXeaxx3*BZR)$&+!&Tڭ0P#,1V`aaf^|tM9p ~闾=Ξ=z9 Q,QJ1sssi 4n9|2fҢ)lC8?bwwŗ˥|i>^uc111j/No^4ư}mE;X ZUY2T<ؒsz۷7;`  "Hti+#1*[YJQ"ۊdWĨT.ɢ$aR$!$ bߛ7o{^9{RU3rW 0޽}v}oHˆ(EH58B Vk6 B9U>ݜ|iF c AJO 6K4P 9 ^5fcwgRϴHmF<&dá1@Ŀ7^Bl#ԡ(5 Fc=Ƈ-Qk ;ӤsPh "ӂxXiBM 0'G1uLa"ntsC$ ,ʆ %e^fw*Bou`ܧ B ,j *˱{fiKWUKVۺxpd/5+pc8ߔr&q_XAꡋwV!jIETP:UNVU[Ӷ5yɱ}u^Q&b_UI IDATVaNҬ "%Abg*L'Q Dlre5k3|(!D B W}~hDQ3jM ~ [WHNԀ ڍ?2B!k˫=|.vn !-B}}I4}7qISG[Uz@! ffWCo0$͠A&2^xvU=݃+Sqz>Bos-p& k2 [F81F+TF @Z)34䝜ao@k,hHI׮9\xmedea%N-4 3fffQE>bC1Ac]mc-ݍg?c?Ƴ}?^>_l,>aF YK@B@(sFjC ẻeD` F?VRӂPJJhŦ=N12'|P5-Ǯ1btՖ f+ʊT x&&Ս& n&}s%|^ :XV=kfו1M})j5):bRd [WBtAԃyU_9};;^|CxSF{YSE/g9Ea8{,/MWR>{kk` 6pf)<_q$J^~Ja% $VZx >O,Kvwwi/׬@AwK?`<Ȳ1so- Y~e.It|yQ0$e) Mh6bѤAƥf €P U -KQI 4W/$!_lbJhK#DJXdfa>~f-?',NIJLrߙcQ -$hw^ouΥ30TR*&뒽xvm Ge~~:@dLH'2M4TB?&Zk%U $$X!{(I^F)QbKZŠ !`xYk Sgy`AxqVW99>vy'8y$/Ml8G^<eAQhΐJCk{SωC2nM'Tt67*J*33u]K^{uVWWm;ֽN~wvPJՌw]SO=ŕ+W>@$ORfQԭ(j_fdj ˜]wrCHlB茑2*7JqGICƐ DXy^hhe(ь-_8O,:KsX;J?\FĂA~m@6Т ni$~,4"Bw(}0.QLwH8GjADeNKeF6 3ffCV%$ 3)QlG QnVlot([1ah' = ȥF8 7Jw\ul uum>Lf§*lDYjw?M`7 ScWOU&VXQJ> SɗTsFY|kh4kDe6v vx+hn67q[/Β}\DxѲW/WCY\\$MG"8K39Igw^yg濇.p0G:+zZrCn8pb)F)sq\A4숹 jKl2I(cЂH[9z7n3w'mLڦd_Wq2O3Q. PC̀Ri8$^Y>;a ʇ,J )RY`c.Ѣ11(bԌ̈XEKT$A,mCf7(B 4t+K\ocxJXª*w7+'#=~[ﲮ0e]?8`kej*Em |ռu+)^ QD OK,1D}%-U&rwEu"~'o:rPkPࡻҙ԰Zc'"#\]字_’Gݡوۣn:{^:0T\SlY'Q*jQ"ih$ 98?1l;x8^N K=$,nVɔ~Z?Q0uqƼsLI]`yyWy%Fđ3h-$0>A*Ԛ;+Ͻ//*Ԑ$Qzw5e8Nի Cq%uDb|:&ʺTp8d4Eb>)˒M<ǔ%[s_ ?;>:D'~};0 __enn,n:z dF#6re655 qbMljd@TZ̲ ^B7YdAhB)hcMaJl mƛ7Ҋۗ8~ h*>~1,f|oeEeN^a%>Ar|SDqsƽGwp LkiLX@!!NF.##cX&+V`/b:HD~Q^2%%)re,zKsFk0Oawi^$mH,JId$$b=p"UkgRTX#!Q=QUY ?એXUr҃;IH ?}E] T\Vք+jXX}ӞW0uB]cMJK0:΁RuZ\]ã0VV W'S8Ƴ><d眾4aQdgոw%gs`KTHbG X$3g/^ͷϱ\= @hoRmoK2nޝ:U{ʠN0l]ba~/_r6a@6J.ŭ'}s}!IreGnsUF)P7UǏʕk}tHy3h5 *ئr4ޑ^b5֞L~7?ɟp ll\c0ޏ!/s_e{1N:Žˍ 8 TP w^,,,h4z*֞S>B.No^O>8ws(=#e7X(°I*3"6FF"Ős(5 DJVa@7֋_fu~Y@<-A?׿Ƿ~LVh (2#JҜ#Q4aMAvG|Wm.;!/JL2䆠XOZRQSL:$BYQMD5>rྒྷF 3@;&5qa9Q`A]:WwQ$T ]fm#lBIMbsΓ)@RƮ:t7bxLվ!*S}l 蒈B9mx04nϕ%+[ɣپ xSjj/Aƫ`D$o! uk7z&זu/vv]Ix{.˿>${,;xf[m{]j7-5*ZO=p!6tfО_#L}}+ M9nJu8,UBgj_uѕCj. $32. "yF(D\hd{O&w#G Ào_k LQutϽww gn߆(ӭ!)lКcWg0sxLC3 DX,V%n49R~h6[8uؼ峟7h(Kg:IgD66P$s+dBd]r:sj=d6_71Fp?'^1avexiACМ!B:4(1"[0Oa%~$Fx%k1؆ׇiFSw@٘! ( ]VULs^UU(+ kQfh:BXv4+WPwNW-A R PA qB!URL)O?u,f3KXپZcެ1ju5f<뭉 CpMW>GrZw)*YNւ4(d9fZW8`oaO8t2֠uA)$ ѥ@kpWZrsK47h5Zs,/18x)cJ2~*$hei0ғdP#7ZKtI WƸg1ZRP.)Yz^KQj /\I)ulnle%o:__<>~A5}τwmq eZK"1c|dҏZ{>uЫ޳#S[[}Q͓Kơ8Zx{hu>zwLjU^G8s}|UoZ(Z6%U%F!v$6K+MbZR6n:Ph(B^a52j[Wk'ݹι pa"Ï=[ނ+eߧH1*Iу+7?=HkVK|}xv;o.a_B.*HغÁc|ڗ^k@9>`GGhd@ZqRc$fv~"rJl8F h{>V l7XQpVEscyehszKW)z{Opc|iDK"1RI )02.Nۭ m|s_]wR%e1mN88XIni:F0to~|?|S?ӧi._L\zgrE?;ސŵ:T cTL=!yEY:)'`ЫZG^4@G乫(ݰʿv8tk "ʲt:Bx)XY#?$z0$ϋZNUПQ=(J~>ȇ>A ]ȥK}7}u=+wHoA 8~VqwHYBo첿Aʐ(<+)qΕx;\ʫWh1IF9K0KX[\kg^@(H3ZsgrG>Hؤ,%hnJfiuxh33n7 ,@Ń,2 /wwxAk+G hiGJ0;7G?QcA<Ӭ,SOMZ#9!>ѧкDkϿ,/~|b!:cc..헿 /|N6quVVV鬪P"CHꛓ( ]t*SJ1?ⓟ)Aeuu"/oY},ZfRr0A~I n IDAT k[7r"#z>-G7K1̹zi”,.>/b5}yσ[-vvvy]*DS@bM,Gfٹmp=YP姿;0m 1:vH T k{׽k4=:}7c+mNfue;dՠd]7 ]d.KmO Q Id+ˈKW-x5H)1\gTϱ[݄p+HGb?!ꂊeY. U ju׻bpx'F +sO*=t/Ð޺ȯ~s?s<4M8… [O0 y缐IF TΥK%<` "%ty*ͦ+jlH( a@"I0*]1ڥ\p8ȇϟ_$cшQ"c,/r1ffn9s~_b<SzK\ H^ϕ+W_PXh,RXE,,@Pbs a eV`V{[\AF^8I{9*1"F^FVdoEZHfc.߹?"| JaҰwcwM.r(x^֏0ˌF#af,s >>(}|g~U^yRl!盅ghltYPEQR%eQpvRȪq6( $IbဢSs+J{ҙw}TcyKUGa $ke'nBP%߮j6K`|6P 9}|?Ovzj'.m ( _Uu`jI:UBERq0\% ȋΜah#6/]eդniK95?- "6=fmI5Q)99Ր.(ʂѫ B7A~MXvv )ij5J6M g5*IӔ#i~o`eΤEU}jU/cW}$ ӧOc inr>WXZZ(ryGYZZ ڈ,P.RxNAUݖm:ё}d!hJIdrȠS]0 @;h3)tv+,8 0a4:!SG1@) -Xo`l-tf(JŘk GW :UWbmun(S);.ED,q'h#wZZgxs֞GG׿ƺh2H␼3rYV*pfR ~*UVB(ڌ ssmtQ@ag<d3RO*|EeV )+rB&&Q讵JLe5R#~K`^o@*ϾBp4z>q@Qhd)ao HuoYNl1˲ࡇ'?\63{\Ps흊]%~dmmWe mEN!i$Ŵ 59Q: "9w{$i$ ˗ɲ1eYwrj^I =Fa  \;@́[TB BIeCst쿍˛px;o?׿"if= `Ԏpvn+ ,u7 A[(s S/0)%EɝG{2)y0M {ζ8~d`,s#?$3Kuy?L5K wQ]zΞ b֠Kw,=dh>TҠ(J1N9) - r"RzKK՚(*qLI[z?t_"9OO u+s0}-&g-gYi,ePO*PIYJףg&N\ĔT E#ts#DXS?,> 5[_|V THosbi68v8jxϡh(lvhgRqcQJ(y>Wȓcq~V;% ff EN.^s^{ɐ(BeNz0EԞGec!w+㔰! ]ȗQJݠDayqVk ʯ”T c,L2L9Y{t:0@>8NgwgFh&TFBǘ8ic 'OⅫH255feyxL;b4*N<'vJ >~! Oj5ȉTnWrP ׾ʃ>{?<'hΗ'੧>M$OXw݈,s" ;ww`ii;+}PҹsuVqP(Jtׯ Ibb\F P^w_9mTng lll13;OhArSt}{A e\6ۤ\JxU87# S2t"оRV+@(){OTŸ7|&K.qqms'􃄦4׆<$3wN\ nGd =)e;@vrJP`K!ȅ :%5u_8}TKsw(EЭǻCfS65(?8U.+kӒFs81\ì,r(ں[[ :XCŢ6BmZxmv1NoIv*ܾ*_e*zԨaN~FHw]b4$#$l.B!FlgOf֏C!<[,/N.YB82=M{9v/,K8s{%X$`U罊7:r(.\1|Agk4!;6 K8#u3.T4s>v;s_ӿɱcǨ)ܱ_|g[ ^eq"/hZ8q i6>pmUrJqX]qhcF;U9N޵H:p?{W4#E, BZ6Ɖi(E8l yFeDBdY2^cH1XA4i-.Ӕ"yṗ]^/^}$au0?trOTX1 p2r ƂDRjf8wZw BvX|&֠AySy<$l9.|WSP&* Wq?PzK>Ut0NVWV}R;2Wdww,/IIC.vDg?~j51I΋JZ}}6&?_ʹ#3Tu뛵! VJSYk6YFK5qL0I#$|4BɘǏ2!y )MI5v=w{G!+%QJ$$*P-ʼ #FR{IEAƄQVI:~| DAE^P#hyF vvv4[MfFD}Z&hT8Ľ( .cf R'I J)u:ƙhS>8#-rAg)(0$PN]O_{?}vq6^fffɱK~aI [Wu e邙6=?E>bl[I 4.X][%3]`~~4Md8KUjo]nx̙3ThUuxk8+S wg-|O{H@,-VVV8~ 8I6..]$ǜ={voﰽ}õ1K`@Q:a‚D?<5oyE:h MB"iE!J}Qg9:%9#K\9̯84z] k cKaH;S ˔#-眛_~3:PmYVJlYG%T0K<ȮUg$Y %$CiD @t7:7TMЬ)p>{o}_ܗ@}tZm_&;zFM!4aav[;N8xZ,--ac6/! sNQ(2Vؼ ϕ f-Vfؗv:g-8!J1uiUJ[ʔoh nxa4Z c)"7bjInqx JDW.ymM^H ,I"q$J^Xh? ka] ᏸyM1$ٽA!$BJ&!ksѠ7=5d8{EXNW3(X]ZB)I'ȧ>|z:ceEf8q3/<Rt㠵!*iMi]P%E4m]0)sNto`xD,/-!SR y i8m=PNuF;Cʪ$y=NQZ1Lt,,,а;.;!uQ$C4s \٦h܀dAo [[IptB%[Ui8d`K˫_};1oϑ"js]wO(!>NHRd1H!c2!EAUch4 6Ņ fcs3??h4d +W.jPUu]F)^BZgygii*P*e4su- B!y.^D&\z%V *"EJU(1* $o/sFrW\{$|BoZhY B!CS9ԥ-}:ǛF{nO)[ZЦ6A N1֖P9`6ASlon"TGut, Ewn j0EMOG v}($5[,/Pymnqޏ\Q9:9y]wp!BJZ*'=>C̵[(J&I8cZLhwR8 JK-Lpdv2-DIYdCȒY!3816ҧR+NVj*aa6,xfUQ*NPMlO W.3s5~)>#K8EUÇɨ538!C/@ 胟U&G릕ݤcil.iGan;ߣL|J+c7`na|:JY$ss&^p ȧt:]vt;m,Z(N-imLRg*)i b$JIV U]UkCeB i%4c4=d}s c ssN[ZdNd15^k:7z+7nyY\\`0ף+sI>W.]bssNy!pIH2z$NZ+dgg4*DY"N jS֙odeeVg_p)wt\lRὋ܁ =֋HIK3V X,օbk Y2 7A^%>\ǟ'Ǟۙ4>z ꄛI H;:ak&Зk--GHB2,I@k:IFe4/W9W 3-TpFcTM k+kVj+ڄRK-MJQHϵhBNjjE9If~yWx$hBk\/e"-T膩1aEUGDԔeɴʱuEh c-K"F@ѤbOn0a<"2wZ! F1ш((*W[le6'J2߰, jo+-m(D+4a7ֹ+ p%Cu1ې 1%؍7/*?d- "_[{̺V7xxP&tpα]CɄ9=, OUEfc{V Nr3n=Ƙo= V›z~7 w2gš5^~G]lo0 ǘ[n!I5$*2%Xp"B`rtyΩHcm3L١۟Ce)_?y3~֦=,MJ*:vǎkU]8m&eQ+WZ1Kcqg??āEj%YuF;#$ͧy]oĘn /ܳo>?[n=ŧ>)[6Nzj‡B9R _P)b2'uߣ*tCU._OLPZ1ڙb( 670֠T(ϹsY__c<ְ=w:2Ԧ(U#wnvGv﫦G;eS@QdYp/VQJLKߥI"MSzR$7tmo #_JU NNa[eD<}~ةIKX!Mt%^2B0O(x3$єƢ.&PLl[4I/ N3Ʉw>y<ӥU.rb_{ ۚ(ވdq KRCHcF@eeǤ^^٧^?^cde  m<_ts P4!]HfTmPa ]7%~y{K<ϙN'CIH)::/$-vܥo0ޢJO`<R*СWI=ƹ`= J Ȑ2pT2 _{[,#J7drcH(&u j -$%"+S2l͛ZEd1rR:%B c:Iq9 HYdƓ4!6A:4I3`IVhjclu(ʒ(ٹΤogu M'nk_25:Wt [;_U(Hiw8HUU\z,HYUsdx&%4&IFiGyHH1l]/;Og0dYJo~^x%q* Ѻ®Htvn:6Vgx}9<~У?omqpuN@)X-YB$NԄyϝڵ,/p-aИv;N8?q'nHONa"Zm4TC SJqEsyVs0A?{]$s2hQ:a8!$Ya"/;yT@{衇P* |Iip8>p8˜#7[On=cĿ="O>8R >p5{HGfqqk {-&(%IFediy$ m7;nBfm`G 3KK7/Wڋd[1O_*@67 'O!T(BPQk%^(/()J&T``JeXP1HITa@0%@xq vQNq$ar~돞?{nnա׮M?1v΢l;RFPa9M(f1-Cwޓ)Z *Ge|CXJHN$T›9me|c^^̌Hk23 ^bi3ɧm4 {F1/g8MeV@ 鞷}gn.J`nɴ`ya[NB]HjhE,[cl dQs54a4ڡ보DQO9s ;!y3.+dk .V$'Nۚ^A AUN˫`k$M:L@\[gkkǏ37??O>P/. ㍵ iieO>_gbJ+HuLnqi'7=|O= EQJp9}Q~~'OZ3xsΟ?g?{/7=cvA$MS,ckko-rdϲZ$ŧ>I~$? ސ(-D/ EpZđxok`cfT~3#ğyt0Sr>@RMFi,nVA%,SzK "Bkɾյv4XǗMn[HM\]ZF8$ScJtA`B0E{K˚g?ǒy]?{n'~N?C&u6HLQzI{' e .L9҇xnn.n@*@07)DIH8 OG1Jx_"QA u2Т.tD"3T !5ViT *XG+*k)S 3%MzZ/v5K2M{V@-t` ϩMEUH8PYTZcxOphQJty"Bi" V4դiBLH,)T&&a[UR!i Bp pBvvv$KpN̳ϲ٫8|d}}$˸UFKK8iՇbq(& B0QIFF9M #ڰIJ+ p8dnn#uTYK;mt3Ou(2iE^@ꊖnEARvʲr,c^^pĠףeTeHp2ag2bПc7SOqExye~4ɸp{5BPU5`ʖ}?U4Iu!(s8u}|;Zk<-,<Ϲ;OƜ},J'LS&)Y>LݙDvcu@4ͨx"u^/?n>2{?U L&cE)Jqί%i2Lx׻[TUAJQt?30 @&c<طWZ^%(MF9AK K_üyUu3&o\\DdEO:+Gga.D0:aqixB5i7C YI]x7;p]~-/ojò,9t-Zt %-VnwdY/|3KW1: pJ=p6nq1ߦt#U᪪f4 "r@C Nbù'u hvb M)̘.UʐB#fu-;TCrą,1f(L1JfX"@*,x_ZacҦWA'^9u*x'W[tp@]2QˊxR`⥠NLM Wvi? ndg$BaLhv!Nq3!BUJxxN(Ssx|28r&: &#*S=̡Co桷*i)E4wz=}ibJCI5xx2f4iwXY[e8UNHJy\[۬_'4x m!%PE7{B,'Id2{~闢Ba;њ~~{" +pO*x-ٷzZ0BbMdDThP^Bh-ӽ-)8D$^&PcEReѬˑVut= ra6v,1`Jn%?OQtgt>wxϑuzrYjk#uYO%#AMD*ރi**<^%Ez1&e _uT%JȐPN!c% k}YRHO)t?;iIM/T\iEXfoN`ƒ 39W#MXv DasL4.K"DM69u^m׽C\8wck.]}kX]]c83ͧ\tzGfnKϠW<qe & )dmOc ;_U=JKHRɵ(ob}c7u>[WZl]5nD,8ʁ5<Ǻ bʚv 틺N iQ2j%AB{V]<~GЯHӔ2llnRV%ssuɥ˗1!bs8f8t!^x>wً/N6LG6ohh&\pO?bmmcp?f8N#=Ni*~%ZkRf1I8ZGlmmNYKjM@)FT/_2T8yN <|+_ z3 6!j{?>u]LnBB8N=Y__[nS5B&#1ޓZ`!.z5#>H7dd5G矩?쟂1sT_ DŽea@yOs-q-_}Ȱyi:ƎFq~55޴}]:|t@%}\ RdQ6-2J!UX Y aX`XAIGEnM@LXcƟ| be>cg< HAG[h =5A׊+vH}X*UIU2A+ B!tX3 Of@Ŷ۴IDŨu&J1":wXmF'Tu*iѫG$"!Րml^ce'` k8<4$'"Pe8##&*.3"7{&\ t>L=y9bGRؿBcaWz ^E$;[[;CZZf4D$Rx]n$\D"F!>ıC)&CI":iMt!IӄVs^8fv.Yyų|տg1HC5utA N4YP(AKv׵L6ltRZk,/c#$0%4s ԕ?ߞKYBw|n48qӼ`F:LIaVϾO T*)~ ox>U)˚,^ [9oJ=|iH岳J~F|cc~>́l͐ va,p:fWryPJ톙ok-:lL3E3=z~;vlki /<LJ>!&'OwōoHJHݦ4-\pX<{fۼߍ2Ȕ*dOp ͦ 0.a~fvBRZTy,MxP$vd} IgmtFepi/٠YXЦDRlq^Yb.dX zEZ9je8N}M4:QUt oɔP!Lf}aC^Hw&2= Gm}j" jCNSh4ȶ(˒<ٞ%Wg~(p4ٗ_n:ܖm8qg9{N?񻒘ȼ:6*EyG;ṵݸ9}0 ymnF hτ;` '|{^zR^Fb-}m4't .^:Ǹզt-#ɓIS+*zO/B"ulDGP5崤Xh%+!:Tnw>&bZ`)<{usn*%Md "E хG@o@idf{E2F68[-~0~x߻P&" &7Q~Ϝ?7~R9u:2bE5jrޓCvvv$TU4B0sힻ J-0?qiLm(i8焤=kfgXJkd 5콈zOJwϯYYeux!YƱGOڌeN"k%TG8(4n@k[u2ܛO={^31ճ6(&$fly=3 >$,6b^b{ChǗ^G>zL4IyN<V4QZ\Xu]GWx'>A^ּ'OGtCS9_z}kIћvx((W|v Lqjl6*1#5Ff\\wT0ˬ`$H`a86PYI h!DTHB O$ ႟/ZT)T9ʱZ %X- xsqӴaoI'B(4%kB>04 `s~V0?ݫ"(F43aSHeIRO][QpilUlrU2lz /Vx\XP C2kJWZ(Z"ġt8#f˒,Ш`Dl=QbDj lkld[B]:UsvE$x3bUt#0-+sc77(rVIEA%tݠ5>7hC*ʪ;Ϲͧ$ џ[$ }jo! 7:>KUE>P97xd̑7ν~2 *&ѐgF(I A)C16ƻfBHT!RqLVHtf1HZyt*gXlml KRvCN0J铵0$X/a߱PmW8"kw}wpa{c.&5EY'!+n|Xnt‘+P%uX G# 0BP%:F)R)+ggk1dZ-sf)*5YUd*CG4[ ғ(ajK*0K=*8~D!9e !q;RM(!auFN" p&x*F8cIDdPBLN!I1VITAOILUx~auNB%Rۚh Ypʑ@BDglڕ.@@5k9$븱9 0"4 <7=<(i$?7ρÇ9u]ђ(˒pI·qV`?i8?):>B£~7{o;v4oOWO@|5KF,1õ3 >./pAKD(:BdD3i;8>sn;1lnnR%J)>O} 5.]F{x?3۬ll2x>67~!Ykuz@T/[qIo/so>GU BY3"b|6Ȩ!. 7t;s,c!9ZiZ-%ψlҁF{O]UԮ@T^R ADUmjHB" '%#_TO!*QA8Fje7X/Z4It42T(|| u !6G'i!oèćcohF3U.j4$u C)paCTJ͈κ.H5xx]iT`{CC_^.+<{}ڇ!"(ȶJwT&u'ke112Xc'9[[LS^d:͹շ㩸p8N; !ѨDr5,W29LL˞'ItC{~~ X6VZ)p'-XGUWd8Ru$#zof &9>H >)$lYV㸩y=? (RCW)"h(ւ\ýÍW_?| cSh)`}}??֜>}{yǏg:yo#qAB0ޝPhaHuם{m$wY$ɴX$Q,+,YA'HDJA^$yssnH'v2m+*-YV^).)Il]r{^O˥%Kxs~w~#J`Ю|!# v5m={qr`H`;,I8Ș$`̃0B!6mڄ,5FQ%ծdqnV%D 4I ,^r* C )jk!d3WXHY_yB@@,:eD f0D%\lfN,DDδd'R0L/4;4T@-TYFAD,̢IX㹮: ȈMeYDt$Q')v2D4ͰBQ-ٵDQb51pv$,BɩdC&(dIV뺁ޞ%Y3ډ=ղl/u KCEҴ_If٦2|>t{Ǥ%L֎w~FXBP|0E50 vx[:%vl4*333MC"ytѶEP !ȄM]-xy3W:NiŶ*Zw~_%z{{hiiarbY9%Ks8sn09uMyaGQ=ʿ˿P(ةe۶]* ͢89UE\XeZ[t?d*, C8*j>EQ*(ck2 f8sO-dNy S3TZEܵj[B׍kBw.Ljt}vv*P(L$L*C!K;EI'*4ŤRɮ!Th$p,dv`&i% 1DтM T(4-L;S+U XAmܶ}'|ޮˣk-.ڡ(] *0 i(I4$25;IҔ+J/G+2FH8^.X* i;XΤWt0M Dɲ%;n -; Hj,,,KB7 VKlp*rČƕ9>  XJS*ڞP? SpE[g8ZA˵J(j)+l7d?Z-9% vųozq(Jjf膀($\0|eV~ @>g69eAbUb1b(ssYq2,P&Znጋ͠z#P`0zzض|&GS~NT.T4Z @<' VeFD O:T*!sss *Fgg'zɵ\.311A,# z\.x?),A۱iy (DIAuZZ1F3?7ON(*O! bM (IYVmL|YX,{ ZZD?l?KWEFpìHlMX}1L  {vQ2 rː'2bqt­[naweLh$_[gOA30L4ViϮ/XuJ*tvvp}kEX,5L`[]05/e0.F˜cIbxh#o<`D5ege9b`yB5⸬Ett(W E}}T6K>edGRaxtM7 ɩIDQs]7-mmdSiQUDC#zQԩX۹@^-\l^]'0R)^ۑK#/ vAQ+*bWTU~(dY zz6 Ir\:k;<" D#hZG0"uuQ/;O>4}}} ;eaj"n'~nw'lٌeA:`k_-xekL.4ͫh}Lc1g kslŽ+heǫV)5a'(V4B>[E|H_ءH*/[mYR(4 $;װϐJe/ %`9jRT%25n{TUUQU?@X$ʚ5M'QdJBL6Bt@fE) ST@8n &ǣU\eM P-]W֍㠧rQ0X~M(J$\*YH.09;A,c"mvTZVءDdvx9ԀIP~vld8N?eX T8*V 3gNq[YBT2 a;@bEUgn~;n#c&ѺˤP;j['+ (nH |(Y4.·'urEt]gCΎNZ6$!B=,7M[I fJ*@q>s9J:X.ױ[H|}>OG.Bܔ k4QdXXTU[].Zl S,.;+vP` IDAT1]B0z!TUE4DT$D´4oy|0 di1@uv:˲|*fwo!A&baaM7<տiͱ`!b? Lh0>U!P*!Pټ~oHʥ pcaxGQ"Tm0LJ劭REk&rD¾=2ZA?k::P7H=?l1QM62vEIV[}Y* 14IEP$q~38U0W;4EAUed ,JdHja-$E&  Ecb1B$d'8a;nS NKyJ$ЕB"cXK~_M%k/n¨>Xi`ciK/'y#x[}c+0̋FX;BY\5z61==CSc#r5DBA6[ZMGTd djj` A `.cf!Kn(|gD W(fQJ \>OsS3"# "sA(3$Iˢ.# +s؇4iǧX䨿#6!)m>II&Sy ]g.eLMMek.dGX>ih;og~~y~?χ^x) F FT!^G<(ljbQCRIDQbdo,f,B>hukRAE&ۍDS UvN`/4R(Q8i۴LS]A KDɮ.'>RáMLt=47Q.~ j[@4lS#133Apy, Py/.]slr#44r P*Ub~~P(H8X(tQP @gGjX׻l|sڽH$B IQ%-l:&&΅);nŐa9At]' 4b( hI9YEl Wv 8">EC hg/%YFQT,LTg1|i˴%KpdX&R;v}Ύʥ"9 -pd"0?S9}n޷m۶oNShc- Ϟm1%&1ls ,zݻGRa[ '*'Y,>ǾIRܽm+:lXC@,VJB똺N bǮ}l٪PTƎ^{h8<S.,o즐1:>_T1(̱@^Q YYhڪT4h#e Wk,T:ÑcǑ%/, "1&1Ad'lB:iqe"} {EӼc _]ۍi[^rXV(ILOr❷ohCNffH44&DGc'n'X%M;jY&S6 Ό289E(BhYtsYtT`ئn 2$*rbHTsyr 4 [aL#s)ҩ4= 456q0 sضNdmZ>}lk%8d*MReMdKVcEpt,$`9{l:z g=-!ִLZ[شygrvtDR,9q`NO.:5 K!ʒ*fYPȱے(ALð(R?{M8VYo|-[6Q*P;[^VEdUDo$ݨ`Zfݾl&C(sg2Ԭ;p3D)d9 ٳVXnsa,.K WٲhZUx0J秣@@JI PI2B{X [HE+2(ю磱 l"3::BCX]5MK%L]gPDI&T4T&k ,0`%$IƴE50dD,ʍUA4T@5:::%1,kqH]O6/ Gt'YƲSN:*&5 ^fluݜS\Lx%uk,I}{'Oo7FDz,f'(KLN+oPNj_:[mbY&]lذP(a9T@x<&HtӅ=VnrEQsSpBJm&qqV*A{D>C/S+v霩aa$ IosIWs,zYlSbU{tΙ(]# bz& D!0`\F,ykS߹(RM,ɤ0LP H"w]H*yf'hNPBwl,nI˚"dR \هO,ٴK*y]ǧ&T4 ]( IrKvi\5*Z[ՏSRl(lffCtJ%[*Ü*H蕲]}QC]pC ضB,V͍NVݨ̆P(^%E;9=Cɤ uRJ$l}n޽+3w+Gp"\.ʒuVZ&xEG9)$-6c:뻻v.sʋpȒ#IJs$Dt"ˉ7$?_,;rsQ*wk8Es#s/K*0e"'pAT78~% ҞH :U,cZvIN.۵> N!,(Tma~gȲ3;0&SgY*s@{_%h-~`ƥ'na>UϾ+1J rJ~9q jǁqn6_:^Ip5xbqג뇵Zޠzm.j_TOy\p4y O:t3 \Wq;7xj7Kh4YD3>En'GeyJl5 vs4Őg>+U}r鰵_6_#D?j?[Ug/,~ߥr2tI>9wչR+>/o/,>ېn/cyֲ?Ng y5+=k6?V]_ҩ^'~uvs۱M(VZ>,p ͈+cr|%I׋i/"7onzVj\.{e[D"ԻVBH$*s ؾ};`pzWj  hT:,}RލM[&JQ#$-)Y՚cYk!)t]d"+˹QL LJ]}_#5P ˴k$O͔J%4$qinA'd||_|!N>ͫ###K;v%[nRz)OJT?9T{q]]xAN>$Ik$I8 ,sa˲puF _gXչZg,ֳqA㭷bnnRĶmrۋ|󟧽X, w~w;inn^T*ttt0==͹s != yGB]]]^}bYFT*aY|+_a޽?Mxwۯ(Հ(LNN[oeZ3fu]-o6bJU@$9x a\1-˺}5\Mf-~9e, >jMK ò,֯_0䮻\.c&?>NTcǎ166vޫOz/)/y1MnvE &\$o+p{9OQJ׸SvfڱRgۖ+T3+Ѣ(rLӤ]v!UcOAPUuicġC& y>uN"x%ihh@Ο?O4e``'NDPUAΟ?$wom\LrBC4WTLE:ģ>ʶm8z( dY=JP H0228'O }}}EZ[[ghhJ#IDTcǎy4sss8qIbzy&&& p$mmmLLL011 BD"dY7䗿%<5mqjJEt0H.H灲,200@kk+=jxx3g *'OOL&MCCGellX,F8Mؿ?===LOOs:,x|apqO<GEE^z%Ν;;COOO>$R Q)J|ߤǏs֭[s=G&'X,H$x'$SNĭw%}}}KOÆt]6|Aڨ4M]w1l`6  Fukb[lg͚5b1֮]1MK5t]gӦM( i|;su[IHi!NSWWCu:;;F$NEǏ{Q9uǎرc?8w {c=F?rs:|ikkq8@X?k׮ɓ|H3d|A^|E&&&ذaΝcaaǏcB;3׳}vR---Y;vp!ضm:TA쒾ɲq'N pwr1$h4ǏGu/4MvͺuX~={/]]]tvv@cc#;wdȲ=wulRtckYuuutww{@*=8M㖹t &igTkqn~;vVr"W}eYK~7ӳ_,D"qJ{n۶!2CCCtuuy5eY܃矧\.sYRi266D{}˭wN*0 vMWW[ő#G8rHD6]ٟZZZf\A`bbg?f׮]swrIr455|;v "cccp1A`vvnC `Ϟ=tttm6nOs633EfffczzQy!HP(Eټy3===۷vH={az{{&͒f9,6Qͱl \}V ܹN%i{{;>,ŚX IDAToMoo/[n\.C֝哢i7o&oik׮e޽477S.u[iYn7n`ӦM|{9s ۷og޽{O94M7]׽XRDcc#/ݻw_'檈{{{Yy@IxW@$:::;s?KyGd[믿ѣGٱcsss4~zݫ=0EOd(˼ ~k~xL$HH$+_yWW]uUU4 UUٺu+_җ(J|>y=\&ՐR~>N[[5Aĉ9(:n,ށ,I.\  T]u4D"2a055Ewww >}gy 6?X\155EGGm`Y`}?d͚5 >}][Ą׿:ug_ٿ?֭cddݻws 7ÇihhX\~$qTUɓXnu͜yZAfK Lg9s/| Ez)Jtuu[oq2 {@%Fy饗<rEV0 {9֬YC6eݺuٟ`|AdY{5wfY ]XXXA$0L&qmiGb:DQZMwJy5r9~wXE.쪰adX,qn،w*"؃Wpʷm{1 /9HEYEE9u[lmE.EQ." ,o~G}EQxټy3@ڵ<333CWWx_[n{}kB!J1ᚙtUU]Qj o),{{X&L&㞤Wͼ(KTz{Z(riؽ{Z]W%Nqux9DsG5]בet:M0\T +d2KNv3z6EQرD"A$Yrʲή%$Iرcβo߾uf,˗=ǫ]j_ U.pxwu^\]jn2 -y^!h&hg/sF$OTՒ LӤP(D(f\.{E.\f<477S(8{,4g2==<|K.~&''y{)ˌyioogddl6kƽ54Yv-x;D\Q(o^THj]]%]޾磹UU/TeMkkBЧH7׆[-hiV:;ab&`pp9mT J X6/εa6 /Q׭VCI7~7-|>GK/ĩS0 I`qu9k[Ԯ4:>Yi>dY<8]/ qJGGpCe5'J5W={nG,|>5s`(TXq/Wk׮%vkc| i,rӻ\zRAQHyg?㮻СC_o&ez{{9|Ftvv.!pM,&3==ͭJoo<ى$Iל&nwY hRGz$+zd>OcW^õմުMMM^8X*b͚5;wIlB"`nn>hhhɓyLLLD&ыIu?B!yϛs^2QIR^үZ6= kհMI%JT:1q7{K{Vʖeb۶m^d~Fo~͍҉ժCaM:.R\ʋ}y^j 5^u ˲Yl 5Pkjj,\6.kj r{u.K]K] ,oJ9`1OϽ7KB:c_K]wڨe%_5.g1sqe%:j|9Ծc=ǫ&gY27DQ$ˑL&uX nZ…DQ0 FFFqJӌx###kcccLMM0>>,f]ljEd2I.0 4sssvȈ7d%E]Oy*.\;L&$.\p˲,RbQ\pȷ|O(pírfffĞ?ޫ|yFGGcaaMP( 20Md2y>WcwNNNz=]4˲d2yDQP(po&''D$Jϟ=ld2J%릦s }97,V"pccctvvR.fȲL> =nv$w>CƮcxxp8̙3gBLMMdBؖe4M#077煇mbڵWjԠuM?==MR\. H&J:8O0GQNǁ J%>Lcc#ap)E`0 ps-( b49y$~A8{,L& py|>CCC~&&&hmm4M[91;vX,ٳg"x*D<'B@X)CKMoGG&p9 hF>ghhx<ٳgihhiW>wbbϓH$'044kCCf+[N>eYq y)RUUKj W466r 0^t:i9wD@ @\R`YW455y{{rrn>x7p^CUU>$I={H$B2ٳXʼn'ظqM]i9ܴtttilldddfEOR"6mF&''|~֯_Iݴd2.~> gΜS,9z(>'OaÆnRH$B.# АWdttP(D8fݺu @P`vvv* R(tww300@$P(P.QFjpY=1HP`llQRG'''YXX L266F$eDQ$3;;ڵkiii!z ax56n< 022! 199ɭJKK uuuLLL`&011AKKU!.av5@o( G% 2< ~jȲL `aa5kڊgvvOxqH233eY222BOOL&ټy3:4ud2q G˾zzzhnnfƍKrwA6nH XG_רg*tttx 4W8cUU)Jqm8FUUOJ_.\M(͑Yf p6m"xFٸqM~s{ss39rēF]ƥZC}v~m6lpQñ\.H$JO`4VJ$ׯkײe;===K͆RūX,Fדww(HWMUUN8AooEjGZkii:6nܸwcc#7oL(73ŵ]s娫#HxfǨSNى(LLL܌aȲ̑#Gغu@6VI:t]lyizE>:Іa0lW̙3HD>b( 133C>P(x,DAԩSuzzS^-UkՑd0 cI~jM$pIx1Ml6K,c``;W JU% |S3~W4M|>Mk/[ bP(D.p8D", = (OF$X,Ninn^R[ySqw~RD X,zX] ˲pS ɹ9ObrsUBfoyBG ]?\.GKKg{{oNV*U~rLX,(J(JEQ}3,rL  N{EQRJ& `zzD"eYA">MȪY`wQݞ|޽{^8{OFDX\\\9Nc7abB|an}278:6M]l|>[˛2q%so[sO_Wzi\9:go=ex-r_hPwoo=|c|G>z/~A/VʸxząbJ}u2G^h^7 ./[|gLRc|.67/6_W\_кؘ^ &roVScRǚ1SA3W/vr(~k b/_Uۥ፥]k) _؉1neQւЌf|_\u4hРAoРA A4A 4STJ3W/vbьFI\\"hĝ8CD6%nEQȡ(o$yg_y6dv"2> ՇGKKmW{90 ]O` \.<}{+rYc$ > gv;,/]9>o:9g?Y/Vr<>ԧЇ>A%kK_Ҷ*mpe1o00 xwU vG1kCj?#ٳgjU'>o8L}B)55*A :Dɋ6QVQe_Xٺ\X Xkw&U cv&?ux:!iDA-("&3 a(M hc8U)!2(P30OU(+Q 2DAx|U @-CՎBD+Q'A)cc![Q÷DJaxt (X,T&ڊ30b`PHa'[`Qq0#VYmw1*KN//%-zB<CP^ I7P{{н]w2|Y!HD,qx`Pncw:&:X-w=~?~Uo[;,{D y)2(, %n`C AP(p%!-a%=oM%)P"Pbv{2#Z#.,`FKJiez4hp~lBOӔ^7>^r 1ոt̾6Q˨LJJSAT px֎N(VQX`atI!UxW&O0ܗ"kE& ͵a5P(uBL,cTBK[5:TAHjo#N(c%HlcIELPKMq`$2!j%)dnHub1R-YUT F)&Z!(c R)ъ [ѝ:"ދQ[@own8@aiclO,ˬoqVpn0v,ib(C*t2GЉ1vT h_RZ0QPBGchbKŚeZ_TL˱WZ^ZYkVhc ,="0ge68LxZaYж-F(5!6.D (9"`@Jq2ٔأ5*贘6R^ip#,o= IFv%* g<;T`RJ޺C|N_pQ9 jJB!P f8`u4;7Ǟ BΈB1.`{iB(ɒn >?r;Y_z$xl(8x\S13冡M9eJ'1x%'9-NXxzC!ÜG8]XR 5}ž2!x 2''x9 <=n6) "_mcRld2N: WV/R!Ah̦$6zĠb,@) ZuDW_Hn!3-!y]E^࡜fjA.Zݘr/Jl;qdV)㌠XZenԌmݗvFSƍ1Q1%Tjc7$cAAcCcAAKI}YjUr`\HVGd W]TZeT7`kx "uEU!C; ǺNo7ti.tzڐ /rvr%W$ŏR6r:KJe0oC C i\a[ j 1l $hY6NSy\aMHg)/8F`i#dcK_]@`RNzφZAFNI<=]! Jf/G=yVhG￝QZr/O=}Qn&Ct÷n`g7,:O/37ѝ}[zU99Lc眯B»qT鐭}{A#jLQv*i+ia A U3 SqT9u;&AMM5r:Zlz?~![ۡXWYo1R|g U4TiVG(x5[ߧ5&%Z!(bO@ "}Nvb'xx q`W9ڟ\qbbDMTjU횐qxT.Qwة!\mGRӚU ̈́~ά2ˋU'e-FenG!Y'tQ|c Ldb:iB ae4 0(ϞXHđf\zONZ-r&Kh >ܾ|Vc`dx^Ivje}o"d=ZIbljuh!XA@1p GrOAs-"PkLT3TDՂ(PqK#j9u1ot۶4 c23\}(1Y٠&ZAm$w5(j͆2DaNQHs҄:h[7?XlbUc ZApcv׏{Lo늂{ҞhIǠDu}L7Y9cG+B3!jv3NΓQJ)U Ai9xCfkr.!ytt],=e`JևD t2OQqn:wkS5 pˁx >8%%e}y{T<.Y -rEXupfAgYhQC(W Jka;>A溝1%\VpWg`tgzϽH$)A?*M&4e4oOr~]yCvA~SbMkRCBS[_[ViTmT%բכ%sFEZ1?>`ui?gLe`7XKjQN>>CE c`e8p.+zA*3FasC xA\\WC1]1y Dzc4ƫo(N$b!Hx djU+?ӔK]s_S *3+B3)P!R_ Bab`[4g !`lT¸# * 'XGq{ U7%CU ]|M,CPݴ kyqWA < #1ZbaB+_PR>ȯQufT*E0T ޚY܁ByaYZ^%i}/)"M:]NN|-tY[_BLp4$ -etqiؽo?gϾL?OҝwQB0C[8xV?Y YiG 6Z}tb2c #KiRF'#.@[X.=MclC .A9f%on{tWC mќ"3~vwg686Yc`uG//wK?}+dJ$ s.,DF|tBlCZx OYc{ J]~U pc Vg][VBA yftW LVVzrL[R'˨Щ T'\" h]mj^ 5/VmɟWV蘚Oz36*52|F4!HoWjXXJLa+j<cEl:_HpT |qQTނP&Gp ެS*x4(jM5W6/qlT4%*811H-kM_B}صbPSԾ0 *6Ȉ0v#0PG'IQ^>~AkkC"|UVFz(# 9mC^i/s˭{y{׏{K5-WX>Į ss d2$Bn%)NR CIOdkUڜ!0oc_.BsK'k a#I:Fy]>M,# "~p >s})'dPRrLab%(%[81R H3HrŪTϤ1.UeNQ1b0__/dY:Y~#/)uI#q>gʗٽά((s@g$IB$ttZmbDzV6-~ER^gm bqk.Ic1Ԁ#r-:TIaꘪtR%gXu&qTdTmm틘j%0.x^M4m3HS im6NzlmIX$.޻bp %-zT4 Q 2%MԶ1`!C|L$V{ʺh0(-\3RGNB|q^QW#zخҗ]P1+jōϪzzVEj>D2qKPVV[%X,ƭhT}}m pY(r|n}],K'sň4MxU,fqZEH`@!<2|/~K>iFڙl ) zl˜La1Be82,!3!CkԢL Detǝ&c,Ib< 8UK ^8WOҗAN2fN. :Wɭǫ%O `0{oǹ@`mt2;8̡bL$ 0J](&QNvY' JY(Jjcuj>Mч9⌐&67o=Y1y2-+wGys 3a>7_ oP(O'iSP#h)BJ"Q)A$R=7FڿzfTM`&$kN<ӜY[gqW7pAMx~M(g"'OL1gqÎ`˒ ]aB`TxhQ0 G8N1.m7ڎ~سos'Ycuu}c]/Ɔ;KDLUҙDǭLQ[ ENujQ,m5QklW 4{ȁQUITzѰ[$IHN"&0j}k_FiKiQ=#T[ƚC̢-j%`Pe\àZPVƽ>< 3rۧPVPiႊR(? &PBRbZP,_%i'=HR!%ZlDZkiw:@ ]]ǾYkH/<]^i3ZiBjh]E K3uhȠ(%Śik >[YY^p.^j2hw{d}7pIfI ^m9"g|':eBц)mR-8qlvݹDY5d"aa8X 9̞xAoԣlRfx Lk?}NM_gw+CL'&"c`KHGwv:̴:$;]Rf8WC%l.%:z8f2b,rsmw@&5 7ֹcǐ|^Iz*,e9!`PQ燴or:2Y@,FZD;H4 UfCѐ%ؿGɟ'~n&'?{rc]BgF7کevsϽ7)A!IL؄a8"277^~꧶-_3KMo} [Y)!ʿLu+0.߿{g,d2(?U8R7:}<ڼ%nz^TR꾩NuhD$-F+eqkæ Ձ:CNmblp܆?ILkR5 ђ05n;1 зۊ>A cb̷VRE".#O⢛A%LtEt7ҙӜy8s('E(h :c#e.3nc!p % L@[3gYl7VNj2cKS9I(H!0,zY["a/9F#R>ypb_Y!|Zz΋@"|G iňRVҏ3e@(R"Nȃ0%(Xc0K_U 乜3?jE/}d#+;~@ď'|_zZi2xw-PN :CxIg^\vw}7( z)/|gӵoy[Qn6$ѣ|_Ge4Nwp-oy+4U;3w]kѴ //r=LxqF#yנnf>Ogy{1~9r'NWW?9w]q)).Ϟ=<}LJ?a~7~J6A1xcؿbr}sGG+ʫ۷O}S> > Hk8ھyꩧ.&Ueaax%ޠkF7xM*Nz?PO0F5;ZK/\{/G.Qj`Ш ^S9s|'^oor+Բ xVtcSJUoԩS|ӟ՞E-3\V1Xߛj{??̳>{%ՠy Y^^]wM7ݴiUU,;`vvvmI|US$Iڷ033ýKex}o$I`ccJ7A1x[ߺʲ駟?8wyo-vq N<}wɿQUx+ت .fY 4hp bkРA A4A 4 4hD#4hРAkoРA A4A 4'-CIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot16.png0000644000175000017500000064255714717152071030354 0ustar00hanshansPNG  IHDR6WsBITO IDATxkoU[>3H @IK`b,$0% I#HBp%L&Cb*N\vW8q?{^ݽz{5pRNI9)'夜rRNIyˇ~U5(<'夜rRnſz;[{ww?6Hyȏտ?{o'/vws7}?xμz߼ ꤜrR+}{ַ^t??wyww _%Ph/'d{Gtp3ys\7|^}~^jtRNI9)*o^^c/~;ў?o~?<=ť A?)'夜??{{{w}?˗/R&) Hwp;7_~w槟|^{~̫_wwU9⤜rRN p7nvޯڃkW_|pO|g y'~4/>|n?7n/w}OO;۾矿;<#_u_wow~闾뻾#[֯x? wuG}~뷾{Gu}]r;;'OZ9Oʟ2Mә3gGyoƿWCGy_K.}SR|~_O?;wןx;%_y{^W~x'˗~i}G}~~ҥK㞏rRVJY(';ߟk~޽w~W}CO>G՗^x[wׯXNMЛ:oo[e/O?k3?=s?j=='';?~PDTG[m{ Ri\T$Z0Th 7.hA@3t ҾخoA.>4pn(4XAo*0\&X V'jy xZ<2H^Z|{?C,_/|Ͼ5}W_~C_UM_|w|ӟx{?SW~~u_{^?}Ճ_׼Kww~7Sxu_?Gʇ _#~3Ӄoҿ[ֹf@neDZUb,,Um#B3}1*фsK;`\>UgѠ}(Lڦw@ͮb_UmNJ ;\GIRF]:q"$܇:6OO"VP##IP #A۞DfdB#""؁R"eg$zH~k w)*G^V[Uǟ}H*tr} C[ ejEo]'pv_g?W}_8u _q+m?/yK/\__o_75yorWj>~׽ _EN_G~Ǜ>'^O='| wݝk@fߐk8%|]ͣ :HgPI 7I}*}Ϋ־ۺSC*z  A2.}V6$ظ >A*jBy>Ҫg@J/VRm$VSo%MDZkۯOITT@!QuGBI5UJ}+tB)" +܈9H Os(II.-l+g/ "I&,?mD'Ӳ 趜֭HbLږb9#wb]MUjZk)BMYJγ5 MuELSUk-$RoVU)e*Zkuv\ ?/|CnM*Rz#* ULV)+E6Ē(*U)+7Fܪm60([+4H5xufUQ(^<rNYt**TURLY֙}Z?'`hnHsU%N][vV I b!\և!Taᾈ,Ǧ6HB!]3h*S*Õ.U@*1Td :Oңذz=dۖ;pl 6, W™ufob|ږ5W2t"FC@*"ѹs(0MS6ĈUYDDyvօBb̆P>i IkB%G:!gz%E1χ\tYRPg靂6 A2?`aݰ)?%[}ֵQ$U\P.\ҖuUkWZV]uaOK_C׃.60oh Y+LP Qqkq`MH#S<NPD%!^"`DQ\ID+Rd]ڷhNãtɪ@%S5Fhj XNވ[*֊HD{e+U4-*:ȑtЖFO!\63yo N ʻ4[eGY!Fxf٘J2C!Z#anYBTN(N\;M ca+W)$It!^m**R&J*:aP$Ab3) "vKTDىٝ7$`Nn{4gWfQy[}ǧiAŹ u!R  nId17agL(fqyAhgR/2iY i2} vsJ1wEF@ȑ:RdBطÝu!FtӤH-z$Ǡ-G͔Dle?ϘHye$It\D3Cx-欷%ZttY o2+P}`Do\#m/C^Sڊ[$@['[$Y]Y!*I..P7=xK d05Lh&ogk.ʦ%El+p3-,  fGNgUcDz 0-ŜSS$R\j U 4Jp6ֶAG *XRb䥉 u IU ::DfFJUËr RI4C }_He{WT |V Rc ?!7m u=pS %QGLb2#FLPhj2o$@2D3G0ߚѪ7SkT@,jl+[J:Uj_ڨjx7+wǝgv~S՚r/KMfH ݉币!ɳ&}}[}JUy|8KOP 6};^ mBZ$U* f=\ێp-$ni-.p/cxJ0Xuz, 5j W_sK*)btGTU1F$q[CN;0q*cK7;%FR}P$ FOHl)00fVk)Z>g tFrLgdgv+*dkwhQ`! apK.PtOLO;d/WU6ܺeגkO@&ل(j"R׾*N v™i}0IUbҩaԀ8ٮ+5e AD[Ywp(QA]yXS5X6mA;[Dg0j- a1X\$HWH",*C4/JVEbXJL)BL܉rҟh8!S>; 'ч4PqxIIZ셯ZAV>VpgN2\19mFhDŃ.T' ?`s.if*w,b]iۋda)NIGS3$9*3T+$64#Z8A5AsAFla~`Dʱ襄<t<_dBoT{,Aݑ+"}L/5ցV_h\ FH%3tk0;XBD@ mH+,w΂ߓSdE'4hR\6 l`Jz0c̓SMTi(}ͣ``=͢sͻoZ1Zv=>W. ѳej jBw8M0t P?w<~ ꙪU`#9s'd-n>>|YT4ҜL{dY$ 6Bn=zQ\ś+fL r__lA*Jfvu mrr}'=B]ש $HolI{mʫxD>R&ZXѢ6Ss܎o(Z=s8 .V kO?E1+ږkx: A$OH:VT Bi0"aRCVo%;X#Jy &zd\e mQd]h: fAd-ˣETIvK?T9@~ sNxݑ 2Ihfy^Ag)8ATeS2%QMp>KI,tRG DzR=)Y%#k? h=@hF(hHGc,fdYxcO3ǡO3ta>-hC;myY;N?iv*aqc*wu2s@Qx*Bh!dS*/9uܲ(3Lօc Y;]NLsh:U?WaGR$>IEP[BgDs _eQ)=}峉cHu%RBU<%qP'0!Ӭ3[۠,mO6$eU]t}4v%'v̦F6QO'.ʒ۟Wf+"miڂ#Gdq|ǽPY ziY'MƷ䡦 ])5/rmf>V$=M9ʴC[q~I}rRʰN6 RQnmDfۜlñ HZuf#aDmHxY/c܊49|EaɌ0?ܘ@bbWtDgK߄p啫dMZCE/c󪊂~е":G\!OV7ls怄m/WlJ⧵z܈\e|lHd xTOIC8:BWi@ω%ZOy;)3ЌwАՔ~tR4Lxѻح}fp俢m.~EXd(Jm,Iaյ3&Oŀl&48'4J:閙xq78+bB[6\:{wV`Jۥ`9PCQ6O#1M^eKy)V"d|ꭸ-" Pd3,bR-1IUZ!TE֤uuQ??[gǖsT]l1}p}M j-V;-fĈ쬥`#hRb9TkOdI;`IX nƛ`PqW?id"G]${C}0\ Ȕ̀0B,VxBp]YRXaIlAOK\V).!:Ni|V3L |n~ m,8oPJRO{Q&bx3azA$7>9Pd4KqҪѡx 8_ ȗt(tIc͵jS޳O`"3ѱوI<}Xݷv[ֱ혐jALΠj:Kr)Rtd 90E#j(}eہdu51&t|G&ѐwPl2џJ;5:l5yv"'>0'CY66..c 9d<5}נ$͓rH+/Ԕ{lbj^#8&$ijgb2nVDz~O֋FU8&py2V3-18%%DIixH[AT,Nf3t Ou2{< `3ba?Fx GRqvhu I`|ˊ[(ɽVP-e VOŝ6CV-2uBNe..^UDJq+ԕ(dslV!-($/k[ -P'_(V9xKȣQ[Vx-ڲcI>OS\_<Џ#m]eoH$`Կ-LEV@L\2't< Q9~D"Ejf, 5m/>Y>Fr:H"]ɒ>9\B&W o=Ry/Vr0N|FL?z*SYi*K$=iȾrzYi G0phb@f_|h2BGloU2I' )ڬTR˥LM$2,Sm#CF⪟?o9J:I~+ S+b[nhVOHҽM߷ӄ۱;>)qc' SHg,E6J_qn:[.ĵN0kl{%nŰ[pڛYqYB߫1vY ׍nu~e6tY9@-,;ǽR}0])9kz 7@N"fw_*TR;.={/)H-}SW5oETuRwFN)J9ZN(p|SH1kMOIIIJ1%cn46*2:agSH~l >rʼnzq3jԪ,ϾtwC޲mm/i[Qvd8ֺigݮk|x ' Io.SulT'PQyB YɒDSssš4HJElo#EED-A؜ UdLʳFTwP?[-if'C.Z&ZQ Ď]Tq<`ajP mYWa:-݆Ķu V=(ZK$%VܞWƤF)IkN=C^+,(tGޠ|]`ѠȫrMR393[mQZfQ?4vMd,@E)-`F " #cjHr]Op8@}{CK"2JծkgK u9.uAk ƃ^$ h]63t6RG  ҁ83Jm9-_u1/5gRt!eA@8tl밎3JD|Ր'u"z "O7y2`%`yZD ZY}4JQCT]#:aR'2r&MlXO{Ͳ+ #`P f*%j '1Ή"l;;+~_'m-)SWgPE)\2Ff(=c~( ^l}.eRPLV DO4*fA%D6ucВ$|݆. OzGWt OR nm5-K.6>em,cVoKtm cRHcGt@F;hyPAndgZWWhΈPQ84,E RDuWbZۆ7} :B-Ypvߒ}[8z:(1ZQߺnSI" T o-|RT^RY ʤ5a%п[4p 1I~8M J8NroU Dp. <ҞWv"Mi,l94hⲏOX&SǎBr2fc^Fy6Su\#1*g"aªd&xvkm :Gpi#MNO2  9c0M^-%N1[V`%!Ϸ~˱5P+lIʄ4B7k'Nnd''> Sw څ˟he .mKJ$)&Y\KaFlƄ ga3A ,旴)xW_s֯/?ɒtL> zd M!;vߵ3RH`%?؟DXMhС ["t;i/U1ڔ-v%-s9"Ƥ tAf_,զ#) >JM5y 6I2|<'EhXiL-}6?> <ҒM9gGdL_`6u'tjH2U֍6);8qs"Ylp"D-muۖFϡq*A!JjLYr1iIW 25LtO|pB6FF: ~I "1FEq@rZǀMOBw\o@eћt!KgSggoa*qr!MqptҊ*,[~]029̟S&u8P,l$?'m9m,B!D)WF!f[1!P[ԿRdT]Q%6b}Q]W]jmJIx-ȒͫO4AXL"OjeG]Q Ƽ11)ݮ9ס}u% D8,sKZr- 9ޭB@N3F Z )"vbC](>rL0'w6Qa$DE3px[b4N87n'"g0Hl*&&c0zKgW4Xk#뒈!U~OMXRdP*ֆKC.M&Dt >VumDB}P3/wQ.)űffGl9gKQj|2Q5 Ks'S'*꾑E%# !DUVD2o@6Lbp|]\$~!5mza]|"X/))*^zr<@&(U,H;JBaWR.>^4O;qO#Xo}U ."H$RH_-`-Sq!sefTKQφQ(R L 0ZQI7IRtBCK)- />UF)j5T=u#18u9i?Nvi?#Ky:pARzU]^p3}sϋI&i'I0I_[nmzfk.|;jSEtҁF0sYN7ztDY=M2\LxGE]*)KUaXqĦŖ Gr]6ԦE h!1q)>)QuS''#6Fhq[Æh]Ǖ'v&>"̍4. а6|]%ʞuX/cPjE (&Pɯ@ծFIm*0&p`bUV!= -Sj|fjJ)90B=JU`ؐՓ.5Rr+Q@%qSodLv ],R\D|xzݐO4xxNɷ2҄l-d}Ig-Dž#. -PN\KY,`=dh=l֏*tYqis}Iw#isMU\\`ʽ`9`X㓧2&gڎGxO =/VU̒%10++&z \-_tiJjZQU'Gq F*j 1;r@F(cK- `&ETdV˧"͢NBn+1 v[A`9dsܟ&p!R*+N\f1:kGi w):G7^|)}La 5{ひHik"xTM8F%0 HR8hE>_0FQ<ʔFnsH;ml) 2A/`ēZ3fu1ݦaKR23ǚ'9"HFC.JQJ+ֆIrج(\b8x+݅OCCI n6%#?Ds ^x21p3OzȀ,g vN$ޗ :]` fD}".!4\xEVE|i'6{甐I]P|5(^0n&A9/?6υ<,"PE44ik N}x#J%P0drV+L#AB]KGA {<> v-EQ!s8.E?.;Q3tJUDwNפIsC\tTfmy9ә, yu(ukɶygtDH` I`Hn^k/t?Í|W{1w8ѐ(眒0[P7 5*nq ]FFń5auWu\A)žo1`d'T-@d}f$ 9[]J`[n^rleWSaOT;Sǐ>h?T_0B2ߦ4'dfY7= cJa1%^i2ιɩ9˖37޶{?X_xk*=*(б_ ,ԚY\!fUY$HE"͛$E*Q8X a^,spY3Y5a=шϐ%\VL6ҭ-6"͵?v1"VįnoЦvV K@PiSB5Ì1΃:|FKNȟ- 9GӷᬍU[GF׵K[m=j8~솗mNUO2}I#j :aVC`KRHלa$s#[uY4%mʖRG)cT,$uvJ Wʑ:7Q#1Т2  =]h8Y#j!d#Q݀~2\H$K*POH|d>oxE4]6:+R:=2V:ms DGB 3ֆʨ{(牔~]R.v7Bɦlc~<2y !\Ū;AVOhV#ȟS&6nմ96G 2dL%[mjxbbȿҸef1s+[DgvՎIĽ =~EZH`y%uQhUlO'2S&DŽdi*Q }Ԋ$7fFw|Z~ n&PnI;^V 6aIܬ5D6wbfhXdr oa¢JswQRHgEX2rV8>C8N ۽BI,ۅ@6S\#Yvp4@nFZ[,CM˗BBݻ DĜ 3Ak 5#(Oi ʁipm]qx cK"TMXW;)tex(ڸbu9`ܣyq.6<(U;&&^a r&nwxݔbf^S_ IDATMEHhLB*ZM:$K?n(e5!}Son H_p -JJaQRPPԆ'"*SӸ7 )~a#ޝ&n1aO|t iA'꧐+Ylbb#aeUU%|Ő8lt γqd:K^=e1(JwFw XsnAL+MLxK߅WTpoh삃X }dR%I%) (S u6#q0a. k*댲Hy^.V-<ހ~e)rkhޏ0c#F1&}e ߂5 ILX>l>qO"eHY\711 K e&)l~/{-KNT_H*Ɣ}k2#W?Qt `0㠵{X&\8FA(Ԍ[ cmTiR kK:Ɨ=x՟lItcr=7Cucmo|7Rϴq?O*B8P$F9ҽ-^6uY-2nsM3*5XNÆi8"Y*%Ds­uvafh[Xv`늎?5: f{([dsqCfE{莪!Kg܇9"qoE t*.#Lv`<*.I(k!n!!5ؚTЏzQպ`r!Jf)4R\ Zs]J%")MjI<-wڞEцC' %Z+, lBb0VD@*o`^vCHx$ y`8vbe2u毊M"lvXܤF߈otmڹJ:Hq=E׎F|veEJK.@a驰2HT+=C+ƕɔD*$J z9rUI?$~F՛8PTctsno4+٩,&cWI⨅kqĬUJDV5kKې {6 5WDD(#3Wqڗe;zpbYg=쓞VV I4(R;K#-=N0m$he 9(*T5jf=BCRdFl<%d Sp )pr64r$C0:\l`U 5+"J)th%BK-?Uxtٚ%j+.X)[نVSDpJ7XB sbĶp*b*ٳ:>X/62lm0! "`^+CbZ $zs aif! aְDܴl %%;`ڨl*0#Nx.[PAr' X0ApR-Hi$vaV.U)pRPBd$0$Z!8:a$BSzKSBK6,чu?tp$}cՁqmj m]ADc,nH8 p7ZM˺Jk+E D-})3AfHlu(@dAVW!H{-aE&Ol"7ԈA1aKP{SmpJgXNb"D'f7'ܮdmn?8>7iZ.K(TKU ?>0M &w/)Sq ! hGtr׀CO1BS SR&2CnO;ĝG3C.S}  cuevc9½lQ R7lg 6Kk6KJlWz[~lA|8 m-rVORvnjn-/$k7.gts~A{ī G"5:S? ')}ai۶DR\T 3)"l/g׷FZnTBml*fU|B/Օ\:٢"B~X;g^;VXxʵu &1L\S#] >w2F~)4(QQMI IhZ>{Ԁ:s%ٸ MP2b$:%ױFaˮj̅?{rR| j`Ɔg1WS{"I[ F hR2=PqJ藁[sż<[0 *Cx߉˨3FF E tqaae-@˾Pv&R!)t0 <jqlr}:e;9>&KܼJЖŷ=/q ֚p)sעxϠ F"yv=F: N2kO %'ٱِ{Ǖjm1 ajd*wNp }) $K~cpx=ۡ@=pd $KlXsg;|QvJ'rDx3j| w9vީ9eX%/'\茮AI| 8ϲA0 R֐x/&'^.in͘Bq! l(&6!l]BcPr2qCBi3Q 8 u놈j teb9ֹY>0Ctr.Fz<%r/4HԊt:˱t2Pk];ltg} &Uq®O#"!Vͺ3v IBr) ?,aZH^U=:mXEaؕ ĀgY?'_Em&Fbޭ,yIGFeh­ ˒< CltntCsU8srUՇBtC9%dYJea &DT/duږ0l Aw74MB֢E&#Ikj&x!b;Fͻ*i U&H#FoK/l͋!i驤zQ|t`7>6ArJRcf+ lo|.ʰV6r.V.)vHxv٦E*+ 6zJjZ5,(~8ͮU8=Il秤ILb,SuWDV6VܜuVM45. :MWI0 ZE悢ZF;W)M$MS_ή.xmI1 +}[EjMg:Zk;"?QDmKXI}r8[4vvְ~oS |ӱvT7Yڱ…{ʥ3U!EbL1Rz䘖)}N*iehƺqԽ$L@cjbGD4ca_R#ȩGW^9I+NM2WZQ *&L!P+&EQL*""󁩢M8uJLp>ӗ{cn:wܬwjw]wo=[w?4ՃK.v;p٫_s禳Q׹:R'%yP1)[mshGl0XUL0yw5ܪWxY'<2{>Hϓ•97E",ሪ1Q˿q^q?_pᎻ."7 iW p"b}EB:pd$.lfjz4ǓuH36FBwf1Tсt2P5U6c17ة:)mUa~NzyWZuUWvD֝d/ԏ[Rf{Og_[y9‡9^gd]Lw$k38Aa0hd~i [ be3bڈmH<)j(?a]zh>zW堾+n\7}:Ϸo]+^q񥗮\~n\!2]|֕NΜ9sγ锖˗[\vի{;\xwq;r|g>u驔soܘgrw?g_v ʙ3gϜ><{nWN9P3_ w{\;:WVJU-ҲjP~C7aZx?#rZ5%7^'5>_<l dbrC m`bA* Qou+t:zK>Wc=>^x}T7n^pZ_2vwuqWv/]Zn8{=wSo>3wp{zpkW~~ܙ3vLީgNv{j}o=яvrZwgϜ}?w}97n^|=tś/\2s=p^ox_/_bWʁʬd" Wsl,9Fѻ|&]Yh8\#dK>_ ;lƯ7lcGWj.tɻcYk%sA W$sV>(pҖ_wKW\yy"Ξ|nWJ9P˗/߼qީ7鍗/_ׯ]~kUTܼy2[șgOΝ?O3go^yw_I!r칻ׯ_En޸'o|?Wʝ."?=S/xKk/^ҍSN]BWRUQkx`s{/_UzŻ_qŻ_pλ.\^އ3R 4X$uS4]^zGUdnthǟ. A6NPȴ]rMB^xG>OܸqSk4qQ޴/9oN[/+!ZkUOyݟdif Cc-p<N5ڮY UUJ)ΥwD Dx<6J5 k샻wȹYӔ04V_|K 13hU^<ϧUS[kǣч}\Sܾϟfl1 )cl7 38 ?zd8xgIUx>*Kde$iZkjƱrzq$0ɲ?{`'gf<qZu}GEmXܻkUꪾ}xK[7Giqպ{Xvy%'Y>{ (+K Hb^$(ʓ,B 2xUnc$ΪmTκXF6# d(A&sa/Icq~Yjko|Py3KCdKSr'Fk'm_tٛn = Om9'7 gW+,5@<$^7 V%qק*!{Avu&&S1 Яݰp{__7ۢoc{q.޻~HU۩Ҫ{HqqxU1zm?'dmu'|\Ƕvc}B_t}o7k~|tS 1(/o БDs _-WOf.ֽ,͓8(fw曋r]Wgx9Ξ'|^1=Pj6ç?ZV"_׿;gwPk6<br6dƝ_¶r зl 3[^E.>4r{Cɡym @b9[CpjC@|`!!{p\yDUU1ˢH҄sI(ozo<=JDZ)ֿTKctۊf,n [kz(Nz馘k o5Z~5&]~>}T޿pL^^C^Pְ П f32y#c ۶SETbY/f7Z$Aۖq(^48U'M>/U1 AS)߶x3_'E3I/yK(s CTZujٙI uΧsmE gCv\rƩ+utyhf: 88w3nrUVZN[~W2><701#(C9{ee~QXiSѴXg )0eF`ff Zf>msZ!/M?{|fҘ[G $0qFҶ9& B[w><< P9䜇rUuh{g TH1͍uYjUR2iD, qR]ݵ]_ _ڗ^}Ai(K|8hk,OѦ:\ 2!Ѓ<14J!$ oMTYM^>{w{9u||'l]%$%Y$)ª)b DRp!;g[]WzڮeD 齟eY'k5q;Zc୯|νJc@h  6^kL 0X1 _okx}$[逾-N/d>,}6m}?WI/|t@ֵɏ~8q.D_{fj ¨r4ΦqrT3w ˜q4iYy=R E}D r^1c%G;gzRiSqy(;50?.W9j`D I k}YƣɈz ,><}{4>:]T yZ[0+)"ai8PFֽ$3TƆqU 3b)0 wLUF)[KA#Cuy$P:皺P9@Hq2M,Yt1B q;k,ۙ7y XDD6K{ijE1@FXßOӟjcIC1Q5U^q̘v:;gȤ185u]0I4˺ 1keU%I(|]WłsYе흝!eUazgk2fGUlc@{?U#!c ^7š~i/w$=ХE«# F[Ķͷo2EiSK Hs^Ou]-fUYzcq{+ɓ'HE]FaQ3_"r2dtI|}dy;d'kperU@ PX/^g~`n8NbZp6JYq# 29^1\V2NC'v^qpFwm)F9mmM!uH9DQfb]C2C·ǷNt1+{aF=΋<˵3OǕ#i0T`;dqEd0:)RMPI?R@mQ(^˲'``P*5spuljU{8JBAycx쑭k휐W Ģj^>qҴeEIYlHaI-  =>9]az"yEN[w PUAZa50y;wܹ+j7_>zxj#dPUl:/h4dz.!wZm"6u=6\!9oj:EsisZO`hBI:d"8"~׭:^I*nȈ8!ɳI׿ŷyEߔl#ƘspzܦZg;. ]r-( ]FcVnc΃"ϐ .5 ;@b.mܫBRp6XY\HxYtYT J#yʈfyb>gUtW]LlD<ceɽ֊1$ro qby˲U]G@rrX/fk^ @xF(Ya8FI (RP1&LK! $X+349c0P~oPd42OsVkA 4MGIESsi Bzi쬝OBtUTeYw.cƴ{K+ۺY:Hauw~Yjմ]u21 <@:`Opww2h%iHf\hAv4u,Ӭ?9o?}#M{j"ڙ?JҔ;;Go_z{>;A/'ǿ4 έ󀸑vwqY|3O/Io4^0^Fq#w"(@D7>Y,]]q;~{{GN ɥ]W`Z^YBũuN0I*۷ˢ[ VkM,Kݻy ZgV 2K,^YZ h07{덵RRpTJu- UQ5t&e8[ B J"E*!c0ln4Ty.8Z)yBeؿ?ozLV<.W猭*Al^-NqX-z_r˝˜Yt8M&֋UmSwy2[5a,eLyl" G/{l&Ɛ?tRFԑ0h&BVeST QaȄoxB!0 1s`IK9M"l*7g!Gpŧ!;6UO D@K`<@PF;ÉBr⬟5MӖ2&jln9ɘk^`cVgӎXq@ޠ'10t#G䜜GQMFoVeFui]ׇnyƟ>yvϞJ[d޺}E~Zu3mh2ʭ^{i}0N?,j<GQDJ7mk506mwݙHm-+4:꺪9?L$LdXLQ7UidY^EUWl'&qEU-vQlzr~"9"eq# I$I8F[HD5FyX.|FT#O򌈾կ}N٣G ؙ~kg?y[w! aRT:&.9{ 2s6neK2R=Zo=1fLK2$p?g_0|A-l(0 j5sƘAWrȓ'sΓ!֫"Frd:k4Z1*K;X\L(|<(,֩},W&y l@wđ!c¥k 9; AoZ8t@B.#Bhm$tcmךXP$KcF9]IpN/Ϊ팽󜧽~šL4J;7w~k_380Rxz@$W&x=Z?n,tsȥ =?OǣdYEQve8ʖK?G򽟾k dC!h`sZ,KZU <ϛk8 ],z1ayu(8'<6[===VC+Zu#VJk퉼I;aej(Ck p޾ŬPk_u1̟gat2 mZc"s!*YƸY=8QJꚕ4 NO{j%Y%AH}[.sw4# d]vб~̀<8Y {$.y<ȣXåqkg*i⵭Tчn)(<L?zVrhx8*" 2\JţAF$iׁ.N+!y i](\gMk^H)l1 ([/CŬi;OdZ bj&!O7O/wI,`ovO)c 9d!ds=s <I8Z[m:QyF\/WBଶ'IQDTeg@p4w6_,jZf}]9g?R``Zy8zqik].M !Sy]FHF=y4tm;mG0Vu2 g5Waݽ`TR+w9e!#OOwww׫ݴMgNp16]U8q ĀAz괞f8#rB@QY\po{aZ>y/qK!2(@(c8x S)9@2S۶4I;"HSd)8D|2jVu6Mo9ʃopH{> V˧!"UV׺AdqQcϻMӘY,?9?J+]Qj9׭Bw DN6'T"7Q@JݶI'a)g6JcyAHQ(**:%y6g$F[G:X۵ { Q3ֺPrġjD ɸ0lUQhtC){IҴ]g')Miy #krEmэm <@0~Ѵ2)ccA"w 8|s2@OI3y m A"ߤ !P B'GV4t7p!ڶk%Q۶%rkC$,e qZYc+;g Vye0ЃAG=SP[3BϞ_7_lW,;_Z~ɮ,6U&-A+|'A/,"A0IŪʬ.q)P<ČlSo>\Ca:=9}{X.NN8cw8na QKEIey7&hDpu/Ͷ1`iVtZcBAٵJPnWUM{pf 0Jk: r6s_?1 "ΒxXei;ϟq IT+}ws[?\u,Bq UUi,}cAƃ0fYv I`\̾~snvw1Gyc,d<}J)Vu(_|Ͷ,<{}+9֨?, Y*c֛mEUU\<}~T t)o/(|b|4>]+Yo֫h8N'U&?w0 jib0 J+j2 n8Dl /m4Iֻ-x ]K( uLܩ7FTs!7C# 4 @P,w؁lFѣ =`?[r5'L, <}O#ڶn!&ZiexJjhh:% F) F֌PoL/F0AgQ'l^0"7V]_;:(%HPtzX NڮIBK9 Dٺld߅"x\)v99f[׽V:؁9[pxxzBdF"`j!ݮM'G>|j=||Q?_=4pj<} :p-8iݾ|d&w@@@yo:iޓ& \p mF$ U#D;98310mTJkmr Iш0BEiגyI AґPYdXM^T}vvG`/aXjy@燓PgO_\]- @ZBziDXF:S96w. #Bx!"Zw%<#f 3)R#v78m#ze:<@PT5q*9]%(K"!d2 IHfWj\QޙB~v4"EL"O00KVx2I۬MfX)}ƞ`#7g6˲*k0("Lhxk_{qx[5iGi&og(x֚þ<9ㄭ[lߵwy&uMLCBYevYcK``2=̲,"Mn,l:FJVc 2\jn7 i,j$rۚ#ByR@hbLMyt~S.s& #D9g3ZkS3[gIa8=<8{(嵱iˈ5~/1O *!=F`4~omYSսQyG0ւ i{>b,bm{O1(k,P0J ͒jW%yj#` )#a/W8K۾O2F`]'5U8(()uM$"Gzf6/x0 BYBy&ZGЀmzդȐm1wP, mTO @x>a{<(Q"!=AKSJ)Pdϋ4T5"gݯft28IYԻ0 a Hjl(q (eq8VJu#J3@cavB{yD\utv6eCa#eںAQFI`AWsG(I͢ڵGiR(ڮD0̜&+ C@Xz8L^w , U(+AxDQ'p>.#1B9 E;罳MSQ!!hZ'y= IvWGad۵9UU0H(uי0ϟ}h4vyiE}bT|xw?rF#9ze R0BFi:gwRUq0&x%{aB1`&<# ֺl |( EjkA>_,w(IǧgI.u+F 'Jj1aSJsO#>GZG`WB!$,Kն1.Zdu.+riZiYoqJ#<Q (Ɯf%SFGAu\1jq-r4ZkmA\0]X^/_|{usMйv!<Y\Wt9&y:nx5޾__eq,+ۺٕc Mnל|dTxģ4xqt8}qE!4R1*gIU#=`nfqeIzuy:$a1A+cN Ww N0N: * ,MKV[@$ DĢoE¹,.>md(3oսeQ 88ƃXqt뺶MX9D #yqo?8!=B( ¾rzpQbp:|7~[Uu߫kb][Dl^+iGӃ]ٮkh{OԵpX82RʶNOS:5I)oDrFuFK?ќ"G4>AE n*l4T!(f4I]"1Qu}D.!/&GJfJzFf >8#0 A+r^Fqھ8'T[׃р1f0?Gsk´0qβݶ`mfQwM)^1 ]!c<`RrV2I Fo7ޅۺ >fYEn LTp }8'a1I8~:Ʌ3Wn;%onl) AwV|B:'G˲'d`~ʴRbQgϟi:>\YZdW4a! Lmy(9Y.vM0Vr!pzw/nnnafuO˺<ރs)eaAQRlc$diTBR7Jcrq AiI2"ݻw{Q bxYZLh_5  7>>?cGonj5ُ 9k-x<8 @m@ s@)6aY*m}rx4]@p#ӷ(i-7" ^_]*Y|ӣ"6ǓqvҲX,.L<_.Bp8;Lq~Zʓ8 D$& f~]7]JPE@yDM̮WM/WUYu@<"/׻,`;X%n|nt8 8??\H V"F߽ g_u]YL)Qre)Zaduq{ QƳ,mc1adږ!V;jSyPZ8㐥{'HH#u˫fq?6=DhIg<&5#dP^P,lcer5E$γD+BkѪmֻ2պ2 #iT'(/ro]+9N1wo_`mw@ AT/(m{q[6h:[k=zp!ܔ'f? R`J|dz͇u F0ȓ,Z;ZM&sejGfA05FhNriV{Ŀ}ON>?o/S6% ap)m[0i%`hkwƂQN>GaN4uU}7Isږ lwb*38@ţ(Ӭz˴A~prb: /zg c[90%zK8?e!MYnq9ˮ6öVwZ!$0c~å10(*ƣwwS&6u1&}YHmyzWޯ`ʒnU,HO4|x(x e[6}++q03h.@giAP6 Oh8 ݻAr#Nw^0<8y]GGclkx?YVs`ڵpz`]^JL߷A|`d~x3MheY18U)kqfѣf3̊JlRս$9)_ ` J*@}.>k,Bc8 ~$Bk"ΘQT,˳⇫Il>g LG;mnʍt:]5R!ctQ;ЈAqFo+&ӼnO=ZśwWqQUa1ȳAHMخn*ii"0bv]+œSJuX&yw$I10fjeg-9뽽rY_~^izy?z%t#;1#x{}$;@ُK73bq{ p:/ÃlolO,7v(,Mݮd6[qgPhL\Nju+(BL<ײC4!V`,{n2֭|b\ J0d\1FQ-v;I&ബv* @Akq#HoF #Qoۓ6ixp#azN#4K|B2JSb0  Iw}NĦ+EQxW7US5SFt4Ay3˶Pm7"Y'E_KfXyFQWz\ץ 8`he뿿0 jZgZA%g#aZ{ vc[1 PNJP#M14y2Mւ0B׿z4gO]6U]߀&rF"lwx<]׍>FpaJh>"lֶ=4  ~|Xq6TQ `od _/a ؿ!;#z#;zoF|"b&Pm[gGՋ4 7]7k:zΓ< C l€m4Y3Ƹ$5mʭ@@3l۔Oڮ=@c Zqu= B1 a,p2+1> =B}2+48`9:-1uiB\}+?(a]EE:EJK}yL ?9:Ԫ\B곇ogwY1l"B |nvǘ3J :'#,P&躖X VnD N#B1c%FSl:"_ߦQT,`"wij¸nq]ՁO{ya07;qy;?<Gwg?[,NXX,8UU'Jڮ޼QIC3oծM8 `"˵odm{@CGXkd:-V r 3dͪW}}s{;9=Rx~e<0 >~B(!@]ʶ_ktGHOMiSD9.|\7?|<\a^w͖⸖1!?No$t˿ݦow%Uo,__^ 1!ȩ4/~O"##P0'߿,"Ñ _A10r'mo c^h4"`޻MY-0cBfLJGrdUVL;?緷3= ĮmNt߿ywyP@. (!$RUm?$%&|:^RdPOjyyy8 C&a%ٿÇ0wzZMզZ,]e{tSzUU%"D 1c"0UU-UU$GQ$e 2pigcƍރ7bL9KU qUW Hj(;m:!Z(ŒN]YA {w߼|=~:Ͳژ=MR%+a84zISoѽEYVR"uA6ů~~X ׻_}1 8I~j%pÇ,'+7e\.֛y%MPJ_|Y S+1PM]/@0ZUU]^^ߵM4A, ju;ph2źzyzyb<99&Źdvmڶ9==,{nw;|2a{^YVU]C"OҴ:C7Q˫!>9>V%n0.^Џ4]GaD}to-B̦xlv۵L4m.n6]tt4*␤[: ]Bxq67/iDgmv{?O~Z,Va*L}xlwž u8,IVO)Rt:|=,::W*Jp ji:B1͵*󦉫3vL-f2nR0@(98]}Kvf**m(B5iYMBDBI )#=wuuG2-3현8&t4%mG 1}Eta$UQۣcAqd膮Eu+Y՝8!m0軮JLRSӪ& hɦ3)b2>r';Ĕ@7v v6?O8,m:ðn0)۶>dI8_[6FeQ\]W@pMۜTi~/G77i<|pROOGdRVUi <ϹP3 5me]wu]gN6o//tM[V( E~+)ё)$dٵ=9Y\{^&B(+2 z˫`5gOʢt=WpHvdDRP{[2 Ju]21?;9u]7&Mҧgb,x6MUם &AM;@Џu]xg:&>VMRڦ1$`>go#qEZ:y:NHߛs4gGk)UL5pBqj) Bxl;!e@*Fi !{A8\>9 }h1 ,]t@$1Q@AALDQ0EmReYqS׻k\&\a:U]yS60c&fuA;&!l.$׫麢wm*յRjгǣM@ 8@\]]>zP*o|Çyq!Lm[u:BL$eӌ4DU:RXabFi+ۭ2Mm%e4ovCV$O~||rByִ\Hkf:dE5]-!EYa/Ҵ(C׷!\W:eڌwW\ʨct{اeG^KM~p~ľ+✕ESvpyS7ߟ'4*Q&eKYQϫ)- HRJ8F#޷J s4z)B(W~hއ$0}|^Uu2׵ϦS0%B~zL0 Ӷ"/<pdp g׿?.<}ٶmYV)M`!g9ò,#H7-$˛[ c!$@H400\o6b<<,˺ApdYO·77I::`QiߩZ `;y 4zhzE0B[Ltt`2>yQ)7=kZuUWuUtfǗtu !`:at]%\ :~wu.@@4Nby>4vۃ^QE.9dWl8&/JJXwȯuK" B MAɺ=DLK:&4Lb¦:BnmLa5@-aM+huS(H|Ϸ,Jyٸ?iF\igyAtlnjS-Ӳ b2M]yQ|Gͦ l: ysyEеf`%]�]rB(A l:v`۫>:?9?4_Wl֔ Z!PF!cM?>:RAJ@|z49:&f'_{ɸ0mw00 |s}Xsy۹Cq4K0Ii!:B0n bBBC>ū7^8JmpyK??ks{wYg0B$Ii1zs8d `0eyEU])|cBSueeYTv4YAkfr ˶Lg~7a4!`eI ݰ -kZYUFcm5nT02;l)+}Msy~SuÐy'%8~o Ώs)~[,:}݇}h6"xf1v`t2t]Wםe9eΚv<ܭVᰩkƶl۪78yz 0eYٖ;ۯ4B4MOxz`@#fًok|eѐ"^*Bh`6e΋+@)54= M笩VH԰Kqg.J]#߲-Yoph,S?߿z}UIJ.mzxvjfK ӦʏgmCDFa3햗ޤ?~_yiF*iZPPe`\M3^pH*!Dm+f !y&&d؏|ǡà"Ekp K7&g0ECoHGLaM)A$Ȗ!O!!D UQzi2ۮۤ"q$~HtFxsW,PoN}6MٱŚ+8G)}^˖"kmBhv4.Jl 4Ӻۤa'>\r꺌t8ԥw+%x-{b@X#t~N-bMSVBcQYeY4mSc]3.L~<i9h:.]ԏ$"%m+N$h[K Ldf"Y03 3zaسfK@lrXUu>!8 C@Ixrg~_(dXPr8 €qw[]Ӈa&i 4k+:N$ʊr,McviYfRJu]]riA n߾ny13Hq @߲lq`cqikz߳ mGtvMi<%n-g_Qā|h0ʒzm Gt/|'-eu' ] `sR2)fj]Ͱ[aY(t2q\Pu#wqҪS?.oi$s\KX4lww[HǏN&4IH!}񗚮Iۯ(IctDܫoQ_Ӵ,nP΢~۷Ƕc~@DnAM}m[!Z!XQa|w<~!BHd(d9]}K˴lmS2QUb>s7\Af #AY^M=%qҦʋd4a)&kNNX9 w4e5{}ƴC(,pLavR;p4bh+߄Ӷ.kEױ۴Ɇ+ f]g±m&Xua荢b* Z.#yiX0NLClw~xrz!./$>@ᬕ he"?n?$6`ntpлzw h4}xe]?/Z4]#qz)/ٓgGWWWRw߼} M&]nnoR@)uo:6R!|4 )ijLp$GGR +TRO9Kf3iS՜wEU:ccL#N2IYn /~䃏axvz"8 AXM&C_M۬7Q5x0<=OHH0΅h<(mZ!TJ2VeɼI:&Gsuq/`,6U)D^mf'~UմUS2(RxC$넊44@hG@Rht| |ŕ`FPUwY^B]^~6@,C4g-mco'v&mln;;Fp\s ,R!DJ)w# _èNY 9(gʴriAYa醺 ps[HY] ${ck\Q4πSzAxZ9ׯ.ku7g~x-77ܿYu@]nOgct 1V9#5~︘~ɋtWU繻:?!K%U~4XgBb \d3 FÁo^j8ᇏn֋~0˚/Z+; pv:?x$x77wa?:PtBf؜? ZNSΰat,Rv}s PӴhx{XoV#S: q!E^ԋ϶za@ m;0-Bue.mec^7 W23E0޼xsBFa"~<8y~w:D! ˤ;>> )nE0&afc C!W4"ϒ898˺hvJ3tq~zrZ.P^VkmWbD0w~ms(NOGyu]GڎS&ihUweSYEQ4q!x۴i"(<y^,KYUUEQfgi\%BX*q07OO ]rER)i6Xl,)2y>Mh"^VeYf3=C\׷L˰LX]B]۶u@W^6ϦP~8q]Ww0 G!I_|Kwdgfr `y{ԯo/,z Ƹ,APW￿Gɠ][ڶ`~Wb[#DZ<8'H1[ކa\Mχ"$Y,jQ2~w{Z,@\"[' j9zIxֶvuYJZ3@0:3 ]0Mt8c)>=H#Ắq۶R<#2Mg$\rڮVd˷ܱk$~)( ؖ}t4u7wG咵ovd41:ֶyQĻiZ)yGiEQm(jʋ>$< &^S'1˪=Iq4NN$R6_l;t-dDh6{ys ruW C1MW7q?}o>kDTw55 Ctt4 W5-h풏N䗷w@'AA77_q]<a `4"n7Ar\=!iWySJ |SU6]WVi~fh4Kpۻtl7[!%C >Bh;8'ƣ(/뎉$-onWYx dv]0ć=P&c۶ EQo0YPjr_ 5ʋ>|ܵ]u !bKdrLGgi Gw߿v_s\p }]Wo߽=tq ͛\ɢ*٣Ǐ4/zyG#S?~~uja[YuuU̧eYE M.eg6A8=_1攕uC@Ȅ0-4uI@vYoc ɀ(ʺ]۾~iYMnt|߳,{0<qբ*hc+{vY}mɛww0ӟO ,׿4O!*GǗn.0RcI$>`q-_nm,Eb4|dm;>FHpQ7 =϶4۵(z|6gq0Xk[ڶi͹#!Yci:/!F?L*ڵQn-s {1T-ҶiӺ=@A4oִ000 òi0nYiZ!@Qƪu(M)OI5$i25zieoۙkyїotb=ONM]Þfhi% _*)40?lݮ֎LFc2;ƾ}x~7howqV Z{c,bUU{sr4]8}M$BYUTn୓sQV_q]PݵoM G\N Cl /^|fQdb7f7?3@b);9>KY ǹ}~}{uOGh <[,i&|ǣi Wh%I2臺 8UuE? Ç/ aqPatKaXT%6 BB i4"~}l2=/^|{qvq׵QzZˊ|2mk۶kgϞN ĆUUSqX{x2zA>~_u'?R*2P! R*KQ%oo!AO.?x? tꪪilm[8 EYmvzGiM#_>$腇8/~-0štJpnuz!N\Ǩ:a0`hW׷YIږb()ǝnE9%p4 zeϞM{1u- }FDpI0@QBvH lwq nUT=T@*x (y?An[vzC m:4[.׾,qp: Ye{x~#Ң[d80ѠW6q:FiQ;Vų>LkyY^\7=.j<:objiEAYW8/j*/ k6ۧyx9!Ƈ>Ň& /+K#M֍'`47jxף!f6 ծ qe-//\ASrIq"}V*]hZuPEi]R |j9n$fqBit+)'0r,!D5Qq-l~z~}V`tTsܦ}w})@y#OtwF0w"O?~!zws9>#P;p8XV8UTmA8_l:R]\.V[ mYkPLfCʚtN(#iR*IcD0`3p6~b:y )Y&훯bDS?}Ns6.>y4wF/ < #s! n3 +5ۭ"O |ńmYYQٓgOn7߿B:<xzz$qS 8jV}nw˾k8&/~k;^TI،$é9NK4?O1 Ā H)몪ڶY%秎7* |(mϢy7W7yݹ1BY&xBM<\ۭ:$tl߽ #ضBcZ]f|28kbQR5צMcе q#lױvQjFp"Lv}WoYVi:>\g1ƤyY2,Dd+)nHSwb~9!Jhl w(!]c{yȪGY`{

    }zJb^{T*BH$TG>'?|>b$TkItRBvܙH$6l5;;֯_ĉGy$N m۶϶홙SNJ2??z;wnׅR47kw,BQfןKW[R6@󖍫>ƣfE}(WGT*2 ~ԵMM/J*~T塇8}t6 !|ɩS֯_&]Wu \:%xP?~nYE, th/}߼y !dRuZ¶m<9/---X,-* lkk{wڥ8Bh4`kk䀈ѣG !\.-k֬9tqι*~zӦMmmm=֭[ZJ Sf9rh%T*J/z6O.+J\.W,IUa"bWlSg3g.8%7]\ b}ڙ3g&''/Ӿ;x DTAh[J}u]MP(!zzz|+;V,/s1U*g)|T*U} !bSU岲9g2E{ +J.S$Z.Kw4M۲eu||<*믿N)]~}$q չ488yޚ5kx≡vDT*N85Mknnu=oݺn{Xkkk$b:"RÇ={3MSJFMrΝkmmKR[[m'O\XXرcٳg暛 ÈpC)eYz.&SJy睩޶_[[[K__oܸq`[\\O&&&*ӧ7oެ 1Z^^11H\ I$JsU +ax7窺6ՏT%.TM~eO {+u466LYUBW"bR@inn>|0"y睽ӪMΞ=ёH$zzz[ZZԴ\_sն7/&kvѾX,l߾~} !JG}tk|Me`zzĉMMM}`wwbWW /P(p*bVJdZUKV.]l1nRRf15[P ¾}z)C ![Br&2;V >jPMdb !+033nݺTFMTመf;/9;vP(d}{a899iv2OQzDjZ*PSMԿj…fWMkPC]0R{3C/~qqbx<~}裏8qe˖'ONMMٳ?}w5::z'|2LLL?~< o}[ǎ޶mCCC֭B??✿K;vwoۻvT*CCC>O~={$Iqvv;יּ:TRo: PR{wS[[P*aR"ľz$t&AFuLaؕҤNervGZBHTU ]Muttd2tI%xf2͛7+jǡZL&3 !d޽w})s=LfxxxݺuB_JfmmmJު:|ن 6!٬m?aÆk& P>G4ܹse}333÷v[kki[nT*b?~8x\v٨c ."C5R\JrgZkAĵREo'ι{1 ]J=66vȑkNOO_ݴi,..Z6mtT*~]v*- ۶mKRʞy恁;w;?%mٲuxxxhhh~6ݴi3UX.|5B {7V/}?mI}ڵsssR'xbvv7H$r!eWbcBuxT*BL&O8100p[|Æ ˥Ν;޽D5%8cvOO3>~u],k``7P7O۷ɓtW_U/^z%ejF}zӦM*$߿jj+_Jcc//}Ed6=qD___OOO__ ! m+-l蚦SSSry֭jR:uL&ݻWLGFF~ae߲eӧ{o/=s9qy䑚@144f͚˴?0u7xgyהQ|MFJEcDbbbliik֬QiYO~ꩧ~ߴi6==w+ b\ڸqcGJeajTͬ5qU5K+ 94m>(Tm3 t!;L\]ՆZsmWXVQ6jfETK)<#$/5WdԈ8::t=sU:cȑ#gϞbn߾}߾}]]]sssX̙3O=kvڙ;w.,,Xuo|/R$raZݝJVnG}ުm{ٳB.0~ ;贚#0YxDQNj4բԦZkK`yYo~PJk~^7=Ԡ~Tr 1^R{キzzz8J ;xwǏyQS7 1F5M FR{drݿb~JBzzzD]%K?f}߷m?y4t+9Wb|(ҿϜ9S*kUL$LDZq>~eRJe.fkh9=Yjo.3qAc)#MMMZU6O=]z8;\Aٻwox[J˜ /+~.Scyֶv7xc͚5es]m6m444(+||q?H\L+=J^IgNjY2`U9^TROjhbhԶJcCax񎎎ǏONN!444?77788r}mڴqǎ>!bkjb[[[o'<3+W"b۰aCggiiiڎ;N>vaqqQ+}ddyvvvbb"LNLL h4G)EXyH$U"L"P(DWѨgϞdmY]׍D"-,,444 X,600JNMMAPT&&&+J YibnhhϢ*J-~ԳAXV1vY۶Ksu%a*Y$j-EBuը~*F4 mP(R)Uj[ MOOGaUfSYaŠB,R]B9;;kY1 rY H'''Ux:.Jdrrr٬B0>>de(s'ͅaf͚&dfͣD"133D2뺍|>L !V-J)3L"8s‚H$bf\.tZ}ttt~~>ɨnjD)]VwcL+ m/,,$rJT=5*kKәLFt]_W*)* P553788X,޲^ai(JbQtyfful6!*h4Z(TW-RJFGG B$q]W)q[-TL&2778*$RTiHT*MOOwuu+ypppzzP(3,acur[ZZr4d2-˪owww&1 upp0n۶Mfsο ]U!q "fYU|vvP(BTer᜗JT*8 UXW*&WԖ !3̺uUmU^CcS%;UUV 0 q 6+nݺ Jٖ̌JT <644,..r9qԱqeIԤ-z9N>H$:::fffS*|)aJU'\>onnV]*2mrg@5ZuFCs뺮늵Ѷ6u555)XMn/J]]]r9+m1v%8.RRTYiQaaبpnX,NN(ب(jEy3== ZD"ǎS33#Pt ٶU)5]Z5>>^_os@uMeT({8 P\FMW|3gpU"J)3uttT*|>D4M!7b-c5Y}5ڲnyP ;vL)Ԫx|ddDP^(TqSN)%0LTVQ :JvJuu]TvO< DBIm[)!ֈVYi]nuhuB+X,zvl6ޞdXWBt:=77̛dsL&x6-mmmx'*iJ\izum٪j۪nǕaET2%)].C@a)AJYmAÐ]xD Ԡ&5R)AMU>T}`r8te>Rsx5@-ԪhR?YD/nVv%Cu5JǡssP è/{Rs"eյJBǡ -,4_ J܄ 7V-- [ nn&ěAUY59G}]r=G},4 E ʝߨP>TF|~YȍbU ʱRڶ{uzmFZB) 7|ȇ?U/@\G"g('rwp= d2lvffzZ//d2|^ طo_Xd2JwwϞ=2ww{yUbY7/\.gpŶ#TK4@"H@@Xū_=D9GâL %`*rH/!a )@ 0ol& 1Wtb1; )* .!1* @$!D}$ MAcD$ P*෶iii3QR  gH2.矔WI}^j , TJ.DYRi̸%?PmڇB0H)o5Cggg}"w"f5ynzP^(Uw Bm ) EjRJ!e1RBQFYBZKۭJ  YJP)P jL "uv4yy$JǕ$G`S@Hb6$!AIJD\'T 1 9WS-_'eB"D!԰u}fV_3CvaM'FJnS^ȂA 87۹Icėҧ! D"d؎nK0.Pb@bpW^{Hm7EHf5'PXWNDD ~)rՄ A$RT ]" NTsA@GXZIt!y_M١H#f\D.T2bGfZ)e%׹mֶD"Pb4??_SɆBP,ۑiV*$655 !&&&|!tM7ux4ZT@$RH F5MRX;T*V$s<ϩ8b!HDcR8NK) \<2Nf@0HGgR܆DP8JĴ)c\H˨'u]kmi'#ǩEr%y;'`@n÷I7$ MW |w28}00wAtsjnMѧy4x,"! 4&lvs0tCN)C&ϥ]Ѥ ΅Oy'NO|ȍ0wL?.L'MzW]F/ T/DVY+)Rn@ J"z*AD8+TY(AJSH$PEj#D}rkoB!0b۱D:e䚎vt~aN&t8~v0,Id>[Y@X,^*yaXL5Fi!ur)H`IHf\>e%42 ˕B.kQ)x(+P<ѐH`4>{[zwkJi$z Rt Fnk(/ (@HdQ($LrORAtF3:8t>޺cFN5/$EHj@ee;9_ L5NBwLctd @(J݉d?>~f:\H$ssc{HB`Y\b~#HH\bBי p-|v}ecZ!#|kH&#ƙ'b@{D堦_܇>"NfBj]>]p0W @F$ ?LJy6 OdL@10x{ywMvo & 9rJH%"Rr^x dW.BPLW/~~Kxԉ{ERٍqJB@S8z$kL3JC@( <ǰ@`hHH [oF-3Y˰t*J) @@OJNJ%(M*iT E;سirrj66[7?&-> (nI% TR yƅJiY4=S}ݿmK[ZeP +,CYkL2tPrXƨeRdPF 1\ $D XE]\[3$H@Rױ&eA槧tî/LQ1yJ(Y>[, MC_;Ѩr%5`5g5*K:!X:MG2VUHq-$JA(޶fM,TzwԷz$ڞ?|1#U ۬TJʷ[f YN`!JbHbNCQf) t(P ]טFE 40t6Ǣ-jRBF4J -jG>9vĆEjqӰ$BT nasN VnkdU3 !# 004 })@0 8QT%ŐYֵ61g'&}eedcT$)X O\ r(@$KR( 8_=/?)wЭsg|_q-ؔDӨsP&M.NbYȻ>4t4*\TQJR$P$ 2lpT$ m뮻w֐-K 0 B }ߩpRbrp6I )eR PX~1KxPJa:$Ke)y(ED V*bD5 1&E4$}"TCcN < wN t(B@a %!Vvť%$0 uQbX yxlCzw5/ eM7gg1Q&G)g#HJ8dC<w ӯrXfFcӼ'ml6[(;H E<* sTELBx(̨|Xl7ǿ;?|t~z>|xo}˴e ]iē 2:=1TʍMi .(Br? P\C Iߋ5e6ēl(9 "M'a aʸNS t\@䘤k3}'ܒAl.fugw]Xj9eZ_y|˗O͵ZH Cj\@40a{BfhRrᡐ ED 5F" )'DS$/SliPH aH %H 'h0 مlE.S''\aAfę~g?9*'b-ͮη橫fI(1Dّd) 8yK Mb˲MɊPKfBH3 E֝3ӞVέ :^÷ E#x,o\QjݲSD:/?۞k.-4ҬZo^GvLVO.OXXm=Gx3k <Ǒ*B I?ʡfr0{! 3}^)98[~THڣQ7?q /O/>itݾo~nX  iB+- Y3$|gw,<ΕʹǞ< pP7f*u`dq,8sRD!&)  V+J5?ttFfh%BHj輑@JC`i׾tvʙqt;'pՍ{?65y *6Lb)},m ̒H(T1%pQi BI, iww;*˲n5<:J(w6L@Uiӑ1dbّ@㼐IjB6~EQUm$Epg IE1@DDeݱ3p IDATu8~[.H)#$'O ˋ”E5-Ň:s󅩣FkRTi&(2MLH>xcۍGS_ڟn޼y[/_ݵ;`k(fdyk nPP( N h&_UvF;+s}okAN(ZHx΍C+DԈR,VGT4S cbpFf^eNB ¦=ь>>kQ $BT%}^8G/|-mbhD Ǚ pa68$} MoK Cs]G$ dH!/F^|:!JDL$ BF ="蠕Ա&Kᑁ/ al`+o+gn_򱧞c }γHkD\p2q]A S{olCHGǙPHRHZn{{r4:̲)iE"5z+0@\ِ[*S%KBXc7FYF,)#"&Yj8ifgO߸rfEaX)D*k6f{iiIH'napggoh~a`x'T۰4Tmu(!D~ic!gD ˓ɸO\qԩQ]BIhKnO81](0Sl; L74C‡ϹdŒch$xSplAZ@}~`M*zIIRiՈ]CTS4 t8X[[8#-lGso\ˑE^ҍ*mə76w+=|F#A@S HDRKᤂ`:س^[{%.{^k2XqILGC!4*ڻ$MΞߥ 1 *[v4vZc_L kC &pd2Yn +$jckͫ'ab3CV޾?4&jP1Zl Ij*g5(^]{!S.ny>nθo _ڣϵys6̻[A@-B]W<7J6l$}++woސJյu?|E" 'Pryq?O}ITMo>ctJebIef\ʔhPkiuҙ '_k5L&f1Μ:Ѕׯߺp[U]+O?H*JqmM-kćr 3" >zN;vXyWUdG~h:e+0pĬ1mƛۇO+s{q")?aIĹs7ַ!0Cig` >P/{d" xlxC&y%BR]Dク;z!V b 4ƒ?dqJGـac`ˢKSʋO~ǽ!rB(rŪl6'I>T:t4{VMP)џkhO!GK&>?&n ͸ZiH(P "Im=Mg14:x7n|\(r͟c_v2>lxsb[ߺ4(N}[_{sW^xZًyg( y7?9lܽs'v۷nf*/9t/|n*Jhf;k6Oqp_]Yُ߱7:sı@@%a>rZH-~HIA('Hگ'7H=3/da~[\`Pȭ3|J%I>6:H o"P<YQ:`We.nT;tͤv&F9F-%eC+)m78S 'BHR1 c\YԮJ[T # b XT} {jy'Yҁw!!8mtk]=@R): x@DJkL#p}sw ޕY#`s 9@F9  Q :)X f[I;٢sx"ĬԀ蜛LB(Ĉh< gQIA0N7q^hu~$ s/,(!{fzv#^ۍ!5Ey퍫̏MMUL&/;8d!#} 8RO>՝ϫh0PDvww$WU1cZCE1%5hƵW2RIz!(Z ! HR,˜u]'iI1}x `@($qmis86v6+M@v#ukǤn;TeX*'HxkwΝhIPm\jn@? X5tqpgaM@c]'yMUKYy3^7Fo<;Q9Rfos Fs~[yaϜ[}_~777gq#KoGi(ll׿}koGV+8qEHӲQG.c[{eJMEYŃ/{}h5/蟬mOQsˋѤ^F͝3N&c! 8k-g?Jpf? xlxa]S睩g S{_=|n߻z#8M.u"9pX ^^j A f9F@~W?9wa<94U~w7wko+>߾-s"S١{Y4 2uQOG_id'yI(֚IA Q9"D33ѯpVBJfkMĕRNk^8V: "d/%O!"lC @HGi`{v{{n3YUx4*Zi휛1-f"s}$RQTWyUN:f\5zX`/I;,<. rγ AIZH*i (; Dts x?>Dd9y\<KIcjc"z09!iEZ߹KԳSdYR(UUlokc!]zrI_hBfd:-#I(qQv'ӝoݸKo1RjcGY w'E$ X)0 {[$AC5Y`h&$fv\$O;L`襪g,}J>s+W+K_sϖCY`pnؙ*4n/\.uamU sVe᤯:R%A SWVȅ[oKT $UnV]>pCXJ fK; 0{q;8VXH(Y(l>#z}3w$!ǮJIpO-HvwNDzpX%@%X:_|{ߛڟc2+(ԅHj"B!u#K 8$ΦYL(Lmwҿ6 IK$t!10!#`B`Y6)Q` UKlj\YZbpZWO޵ߗ~/eCpp)Ns X)i 4DD%+}fSVh?|3&qV;/gO6}޳p}2R _Kw'@;P{ntP2[7.U"[Q PO-  0Jl !888Toٞs{ϾG++ׯ|ݻ>nG*V+VR}Y tlAXͥ/JGq1#:Zp4\X_huql~ 6V:mRVY5+WAI&)CNF1UYXS|S 3])lk(?!x=B$M(0 yBiY&B\:u( DwXk9,CD1׫X$èVn.`d+uhF7?5d{oFNjǼc yf~#~zٙK)ې#N*(IHO?c/9O49.4q;}'+W!A,et筛ozL986QN)E2߿s|йq?(sg둋GĐQ@H>|("#R>(fE A6+г@A Ҋ[˿p=_:R7Rv?S5,뷜Pg@ prF`-A1XBuV|(|9;n d$|盫["2 :u׿DjB|3TyӚ 145J&A(Qe2$FH{$dm]ۺ(˺z'/ǼCBljZ1"+ xk Nc(l]W[Ik (ʤ`^ 71 U5I6FjDz_T]0!L~NZcDk!l-h62Y;62Kx̺(@PK:D9(=VeT^靃?̸=k3ॖUY<"cGGۮH(Ipr Gs{;[K ;ueWVc~as^Z%1֦ldh8K+ˋΩ_zsxYk^yڛo,/,SSVWfWV\Gw`og2AD)eEQqpGxgwהuEf#75뽇A0SZ A3Ir IDAT1g3?QIU(vk ``x^zo>ɷă$"Gݵh4tA+Nuc]-t!HÝ7^}%Bmu]㼫bK?!.lXsSO$1"ӔhO7޺ 9F޺H*D1-~yC{Y$"Uڝ4Io\{Z8~$( $cp|"} zfj(ܥGN_7w^L|[0_=<*'P r 9: hfRf=ǬXփ|#Bf^wDoie\Ulu/4'GJSgò*`oUm;pk^?Uh6VWUs[irF 1%u Hw΅$:ڹܚ4/z<-&I]NϞZ]Yś!H)wZBVVIHZGJ DIHH33Eg2Ke]e%cĖ=*tu-jFlzb1f8zXf #Tu5ΙD~ʒ(t9+$"% %I R2 J㤑i &S9j{=Tk>(ֹ0q@y7cqYkR pu}>$IBBzP+kl`>ܻ{,N2o:u;+ ֹ]RRH u}ݛn՗b4>}dl{_48gҤl&IҥKʲx 㺮66HcZY̙'NnegELC@(MY7nD&D+T>pA "6Jѣ|< fTKVy5>퍕ۃ:[MC/7ӮTzB]K5 L-[m ?!fj#VP^\F/ 7Z8kz$Ff9\Y?=p2{;'s=v'KҲ8שֽf]߾y<(DZ ،RX˼LXY:5?>2wkS?7% Ѕa_{FڅP1zdw߾uǟ2z {Vii,qzZ 7;6ɴrj}m/?w >Қ_=+#f (0`f 8$/ ֳ bSUQ""1Ό[U, _ʆ4&̧ui1pfN:/~ǚqm hs09(Gcw mLl+dXW)P2üc%!ږiZ1Rd:ͧȳ4;U|!!GJZ2$&qJ`IbJCIep< [xW%K@ZJ' ΒV3;NCપy<20,Z礐EYH&dl7RIDH: ^ iA^+PוBKIQTWR ƹYeg+("vF@%{@"$A Ã5߃g, 3><DI]UV`wnZcÑ{ΟɺAQ=Fr`<2omO#$jzq>)l]x}I==:}.IGJHF3x3N6֏ZHh7"f(R;=k;ݹ#֜IB2$r A$!%9d􁽗{JƵׯ\8V6@ڪ}h.UuzS7g&>"ᨲ[ MjgudU,} E,^ Ǜg_z :f(M)ruOW׎ wNBpm n=<: A|Ӧ4MwmkVzZY#A LTS/bIM&$U3rI[[Wfc >y.rއN_{᧞:O7*z>knܻ70:W>cHT;7- <"?pvLӧǎHh 5|p"(Ir0s?h7j|_wӑ+ʄ}w٩ G>n^X'̌0̏c`5H20H9[cz`$e}FO-Gu%U>gVq; sFEv{hBjd, չA9njG/t5Vɴ"Y0Qn; @ckKgOʲֵEΦuݸ64AI@±pVHDB PfLx|\848bmkj 0|?J6F}5A"hGh{$LHbǍ4"R#Y5ݻ*$pY2RRyYY5R<;uDu4('Q) }!l6[F[cX,K"`߳EYJ EX3<\)RW$otۓhڼ"AՓoiomQ#Cx0áV5^7trԹN'z+@4Mqv#6x~nq<_3N\Kh5,#J,k!Hg(Jy :R:E- `mo*9Q"= ŀ!˽kkI(YGTqhͱwkA}˄!!L']vP,i! RV y["WiR&H[)4&UQ+J{F\(w3W^V_=plN`ʲ(*C`"?:𞕔QLR !$ Pҍ(jf֣^߼y.rk98Nq5e dHɲֺ( S0$MefэC BP^ AK(8̇Bx8/-hh SGqUE ,rkcG 545O>ħ^t<><3w4u!0??:+BJDβ$c"ǻ;>/fTC! :ϋ~5y_@v*Q(~֭"F8@UyԑRQ%0*g- PBS"@0gYpL&i]~'F߹pQSa\G=*y va3*[ &." w4t}㜺/ywhɣ+ݲ :ikfAf}_fVUU{OφB . -*De~~_ GaCdrH $%A f,=VWwwdV7ӔSUܪ{ɓ<Vw&XfD鉏0u+{,fOxgc8 ]LDkٞM,@ Z b߄^x(BkFT²N&xx6LA ",]spbAX6S1??7W:C`ah'e5Η?y/~}F)1*@D" - Y'g 3y .GʪGͩp, ]sE/ D("02pЈ5&vvIYǠA0Y 0(, D׀ȧ9LwMF.UK7LuƵ|l~~kܥks82ES%5.|4h;GݟÅ ,3ϚU DB.0oM/?;AYV%{'ǧcW^ $ICD{̰H5hR[2Fb(y2%t癙}|Mɰ8<}V L w] ¤~YS$5ׯ^K׮-K8{r4POE[uZLV)8I+ P!5 RO>=6K²̻֊D FY5F?m:/2YEn U8Ԙr0 O(YNNffޅmA!ŝi&_7~3t_>xɸ77y߹{I]S(x1V+<::XڕX/ރly^Ď-#vӏ޻}-OzDfƈJ B05)LHf7FCjU+38ZhB΅[Mqnį2EQzNSK*˃e6_~{' ÏVU9V+okv}/GNJ #Ҧ~Xv vѺn}PFkSѨof̓ڮkfNjq:LruHy"|txmҭ\[vH"'?`ͤI~'{}ͳ1F3 zӗ*/+_,ADfiRLm W_y{wn޺5':l?~o|B Fò^`I,oGGG.+ө4R״_x*j%YZСQh++N=@'B@ADGk.ΖVM}X栕Y,\9n&єaS o&'^oO"ٟ$})]պ_Z/ xe(/r+GY*m"N$&6?SNG/ԶhTc]y8=>}ӂz3/KI%iCX̫˶]xZ;չO{h4,h8^t]Ҳbv5omY>xАάC' 9Vw"HU  Dۖ7&Gi>pZ2 z1ºvqFGD K@m-:#Fk$\gtq!@<ڸ_}ݪf}Qj&&f;@k 3r^ YtbSR+B  MWuKԔUztzx2=/ Ԃ[Vj|b|։UATɼevUНԮc(TB`?WoܾwE_3>;qz0kG7ϝKDZKUYV<˭(DVm8:]6̻ VM??^mLw8״\֌lj]E%F>(st:CQ@$]9m50R<7}x~2ΝީgY66RPDcn !jU@e֘`0[d7gGdz9)z:?+7Q#[/U;I/gMhOzɽpgww~t"j0=>6 G8"廞c@DB| a1VqSZ]֩NHU}ZY1:sܸA)P*9UfH@ʦI{; |1$Jm߷VG/Ngo}oS&hNA~j\ˆ b5.U/;f*C\[/U&FfX|r+Z}jxow-@A1Y3g9Hg`5)- @E>)O9@iҍjrZ7/ngymv9޹pircrG?vBϖꣽ P;oX4gދ1v"jL`2!1vP6Klzj*bt҅.wGLBm͖pف->r<lt qɓ m_ k1zk e"y}שКm\4=oDCj12)s:AĪp@ ߽wgsk'3&7ʲyw?@Ḡ (ƈHI"n3XDBsY~|޹ݻo}JÿjuwijܚޱzW**$\A WUVUSZp vs#eEN6ZTLHD ( 0 Yj"(g :y3Q@U.z6-;Fn]ôovPm>ytgBV(6= 4&"jRڦ,2OA\`导ti{\bTyZ[/w>8w97$ݬɬw̔7,+I;gxSGǏNT 'c:oI$%њ $ET >* $b97dyDߵopgsXVFUy !!$ !Mѻ>Fi2@ՍDFG׺{{IK mZ9X S]$M{P&VUS{r5U}5kE"2 6I1D&/fNi$~ wK)\uW]nn֛DcQl(sGⱁW̛]nk9J&W&:S.O}5O·^G2I s5_k!dѴأmNX [@ѹ$˚*xZyqm#s# 0iep2v뻞Ό%c'{~[N" i]>~P;;煥:@!kM}1,=NRwHd e\r{q59[&Zy ƚӓJ5*`Dژ|2k<h8ɉYη-2 PE۬,jWKHueM4 4 Golo{pNʡN4#u4/m^ry֥K*6J 7& 0NQaY <Bl@Cϧh(h\Yik њM1Ԧ`ةƳ/~7 `cs'xkk9_(x)'Tf^)0koLbFb $&;Kܾ?nc~j%4GL| Aa6]DwTM)Q μ+:yOku %k3 B$kA)M P ţ p憊d"tc:ׯz1 2*PDOge2gInUU !2a`os (I5\kv\9{D@m9Wa1gsVy!(*aq} u|S}}g UF7&`\ksVض)FMx:Emֻ:! "ƅv&L矛 ZO5IJe?{~hF5rA bjMˤ<@ Z C$= -BGUBp^~җ擛7bBl_xG?wQq_l7]3T WWǺѨ̴|NCA!,^<3M[$6m`&e\Q8Vke\hIlfXDiwr1m[MqYQJlqrZE!̸nh9 !((휷$!8E "]gMRf +T'eHyf & @F)%ǧkpn2ir~|xﺶj2LO}]MA8 6&KzخVYQjXbf@nΦb+W?M7߿5Pe61I5<{Ab._d+.{`/[5iYeIMX, V]p#sJx},yb⹁6E L0RZ ,LTRzTbnU*}P/xޕGys1bXۦЁY<3).Vu"SmO< }MJ3X")DPl%T]}tشl6|p|1C'w7HwՀ$?qw}cY-[g.{&8DbbY? =('U6z?=ۅV`\}?m\Ԉ YcP8ʊ*B!}@ퟴz27'i&Cm@Yb E'EZ;k00iUVu!"@9n͌YƖg8;a#ˠVu6͠,?=>QXȲ4( $O=֫,ϊQUϖ^y'GJoǿ;˺gP.tUU键h4Z|eyW>/>{0_-;c0Β,/Ǔ Lgn9"iR2Niab%q?១-B@PNb5X!o*C (sF`s(EQ7ɥBhWOof| U'>XNW;TJnD~K ڸo\JGܵl\+'ݠ+Uo<ޗtQD OxFaCfd2`ùiD %G}̫)lSS,Ti^x룽?{Uхe~~|ZDd3/QAk{uމi0GAQ۳P"1OIiT'U,h{3 ^f_HT|ݸedA ܷ5KM`CtFUPG) ULx뵝7NH'{{=$wcR FVW}ʊ2`vS ZdzrhFԵ!|R^%[RV`sb'&ty۳}@삵v6_$ư|fѣO6:C3ƚc29"Aژ;1pH"♭5JN%dx0_X6dV4o]r9>31ZF[+Yf%$wUzAn<{W/|/͛ {w˟[vwܻ{}8eY*GΊk/"k;?>G! Gq5OQ^Ȳ<}5B0Xu0dKWV?DU@&H|m%v %`T[*M+3>m߃p`EDT bnfA҂E(E P@Qʫ}(r޺|mKD5ud`<YE?[,U^._||Vn#]oP,ΒXq$"1YI&%cx0I|Nh}l=q 3D\ 6V^<`ch\gDm?5vʚT ,+*3'9rj@PB<#<GY7QX#" Q@"?o21z3&Q@VMc$D!BPn>=&$YYsIjcyP5A*zzb۳ͦ颮u9g*k񩜁=U)#yeYMٳѦ aVta]h|͋.;w 3o>>"`8\ߝĊp}DCbth#J_6=9hƅڦ^M퍉kH]rpi4'@YYe>>yIL,t(EQ->:Q KT%zRvZkλH4As x&ZzC "P$ʼnң<=wCկݫuػw?; (FGvi<7.O^ox[ܽsEn_dv_Ȭ̃Jpuf׸͒wkzq;3ҽV8s O&%Y×Lک:.wIN0~t+uXHD"RJY5Qs(m9eb2m8N'ܯoׅ^!K6zE{$΅mUU!BР}DhdK`_,ɕj4v@+ Y9Ȍ=]oN&MɅKM_eoҞ^3Y%FKic\חaz~gη/n1ꥃ : DЛ2ݞW0k<r-QN=ֱ;²J@zȢ"!'$IdB!J:CTB#6e??{3:Ivvw\&}Mi{VC* F0!F D#q<ݞ|bdkSmçw,6pOݟ>p LAID)Vǧ_J!DNjfث{@W$!͹M; p`>D^lKEY[g:?F!`h<ˮuNPi:"I,DAs]??\/U.Xv^A}Ӷ'e#5'M*KHpOx+#Eqrx0wݵmj3e !Gc ֦(|]$SIMW+'<gk0!覞yG0:HiM욺@^H"$!Ja!Mn{|>;Nn|h{ IRt\._\׫l4],fC߇Q'QEU]F4GQ:QEkԊ6(FBڮs?}L5c,WH]v%FǾCĘ|KwoܸQVG}(~_ zwɛo$ϊ*׿+?G끝,)ܺa1)b{{"b.7MD껮kGxz7/@ySfgaa8Y 6Qf`  A1@/Piz7 8Mlk"k hJ2Z+O,"hQl #2P3w.B ,>D@D\ly:rV~:&1" GFAm"Ơҷbo (Mx8* 6S&m#'Ro>9=yc^O=DBg6"\o/LP֢R ̬1jӿPwC,@LY0xZ7_v)y>jMɱ/OLBQ%ob8Lʒ Ǘw+Ϊ qH IDATdc\npwں;QgDӵ!2%6諪/]eŀCH )M Ez x4zcz-#rz[(Lʰ:$Jpj~?,7^W_ևʋ/;wݽo_?2if@BJػ!C̠Z)6zQV 50?97J71GfpЭڃ:EU~b9ϖe#7ݾZ/\^7;7kGE^lnl__o={cUU;;w6٘L^|E$IEOˬ,4ˊ M:sٻwo$MMuR #D@FYBzU/-sБx`jt4K`2AF"B<" M~ΧܹcK &LW]۬ZڝXޝ[N\#Fߓ>w F1j::Ri^:Aݹ}c͂:t RErDQ8snxb# ;O~r~g ;^4h $(pw?TrPȉ><Ω̬/Lߋp1*CA((  泠x;P-G#W8vGDAl1aA@\p!.+2RT T`ՂYT0G- 6lPBc@n$a4#nvW6|Ec4ṶVRMGbdz~4T :' @v6re{Qň1" N8ɆbY`/ `2AFxyQ>MЁp-mvmwa83EJ_` بϴՈf %p әZ([n鯴m2ﵫE3#&Y6 ӱcfEQ.n;VCcCГKc_kSg_tbteO" 3+*MyXCZG";㔷hOi;ES2>a8,@a\W8[7k߮3'O5X,Z|DZh?&6 ۧ*EQjFF2Mp#+Tw}q#Ez56MFiw:3j)*F)qJu˰mDfǧTfyy2 l._ʍ޼&F0H*jX;߿ZOXo}ssz,')e "1 MӔz\r:N,`@1XSD( T"Q&l۫TʜQEwI-_8 -:hAx'@;mBU P#jtϱùöhVq +p@1N_XYĔ11bLIEO~-KOH>c&@Ƶ_"I3햪O@5@p1^8}ڿ?`=2e!P`cbrks"6׀w;eLK+B  8T1 BPXTpTj9ǂ+uMW J6 E@SLB .,-DS6VTBx :,.]qTհb FBH"#ƸSD ]"Bx;~"@ #a$8 cHݪ rtu0*hW۾&N[k7ufQjٌV[6!F8WFD:Ёsy5ZH.T{3e\&@@B0Ze(b8"„8,WI0Fz`u sR ^-le[jTzr#PbNH RTFDR85Y̊DA%Ek @pkb;gPr``֒mO$ +ĊE83_(D OV ``}Pn5SU58c)zU֓//ߺy'^_y_({.x/"֨m( HfR PuAYEHD-F W4m%J9"+$vťh4yn,h5-4ETJ=<9Fj4Z"x21=ujŒiueE,MU򛛍zc3s6"H`F+++_Ո9<08:28qW*`) QezoX&&XAU;x:XVQciw0 @KRwM=>M޼ƒٌMϧr@s("AY>,M'VU|sĨapƨO- ѱ*հNg[D{}5۾DS f{RqSjEq-SQ@JfȹsJQqRDoyL#ˇ}Jƺ,9ǘ؇ y7IV4%18<Kgg}< 8L%410pZj4[U+1&MaEU!ζa) 1!R@D"| .E!cPB1pA H)#h? \&Kdi:WJb&2 SǝcölY;1A1(s*+\̊&wb0OGWv@;I߆ZrLe.v`2 ]L (Dab) ^-.OG1F2߰\SˎE^i23n3gzbp#ޮu[vw?x7~lB%$M/mVVj-a9\Q!U"4k1bb"ՉBN'GR}{~~|`%A|/R/51TF'WD10kHGTbs\*WJ"(0&=_ӉTp@ $=?McwLi6 wlmw@`*A1Mbদ}[Uئ*r<ΨӀ#!H<`L4M덖ykq$iZvEd!iS\ZKeﺆe+=eX)MMO!ebۭN>g8LIéXVۨ5I&Qi8ʯכ-Sҩ$QhF9Ģ1Bh[먚(VO?Ct)@TUӴf(!N~}7NTSGusV!q0iLb%rnU!|iL-:袁7げƂr|>h&4ҿIzMjb`"xvƍ>k c #g_`+S2ܨhg#+ ƹ \,ԪIm@ca&OrÜ ZkkJmd7m@3XTr  0f94x@5B @D`೎ <vnd۶9\#yA0G|""u~ލk޽*< nEM(iJ&Y5Qh{zD:3ݬ S7/r_*D8s!8_ 1( .f\se)1t(P4Em+DE8ec@*B(vpd.,WUB`$ aߓFsʵ p.\ L3N"aBS8Tu`Ęh;R!Yo !}wXzn9c[ x `,W{ p+ՊKT;=DR$<8Oe\VkЀ<x\NkN#EcrY8?xdU(lkՀd:7s.'8Hf4]щVXηm &Dt(f+:tbtKFhFED2Z^ZLg3p(0wjf:<˫ӎFcHiD!cΘ㺪**!`}rsЁX걨CW`Tb"`ʎjY!AS0.^O3abY#$ۗfi''<>^;H!$Uo`qªzQU0 Ќ|됱V" 0W\ s\SI GE; [4l6=C PJBQho@pY)I"݂ӀwQGx_;SGv h6 ~8ږn "Ů ! X~0ޓ[Y`0xE;z[f|2a :N5=RRDSO_q-9H<52Q`:PrN!. +mO yOv ӱd` S? t1'eTQLfHR=EC :m&#=q 3U?gjo>:o'׈jÉ2[ᄦԏA iQaP!CV'51[I|m#Էqۉ"t.K dYbW1hOv ٮۏsH{~{M@,pIDq:Ө jB(P_Qp؅XКGuij=QMY Npzhr׾'8,(6me+B0B\HT\*دdx0tmm$fOx$b C@ABH&b2 B y:Aԝ* @c7B H6B#h.`vwV8ڳ$"igPwVW.O!Ii;/K{=!{z /c;yQZnF^kĩSK+aAx$b14TE1Mj4|[ŢBTB @XD%h,pLH:bv햢jx(JT:5|PTQeܲz-S 5Gu4Ư7Q'7#H0HUճx Γ%UX(_uZ=FM0ѿgr(Ox*IRUzc@Dǧ!h7QU?r݇>M{'̾7aL|ƕYhtmm<#$0  HιHO]6!K)FR׹nC}4ơA܊o+:o! qQǓ۳y1`0FD^=eS,Eg.!R՛7_VWKN*e 2iWJ .X:0Bl#V]z [zShdYu+J2jVj|>Sa2k*RBQ?0 6U+ORzgF' yVՂm>akrjNg並(wVۿjZ/*Ad2A5Mya) !t],Klf2!"i溮8_^@,aP+FZ2jI:D"UU}i! B(}~:#b/DKt:)i_^#8v{ۚ"!54DžDBVb?3%y\.]ۊ/%Qاɗ)`/;uwMHwI1cK/ruq>#zDkJOBH>zy }1;v,CRZ;ņ^}Hmaߋz-t}J@\B{7G ! {Gd D"F#JZ-Md䭻/ܿ/Bdj:::*Y$\B !EyPk!yDJDE"us!wBj?|= sd2cH$L%5!BϴB J)<ɔ]=j5 F nnvL49_!._jnݺoH@RPU\e77˗/ˀLht+(" -z2qN1VG׿n6Vbv!mۜV*X#WFMOO_vR:==]V)ιmۄBd>UUڶjm+j4ɷfSUչ)4 !g"<@q'ロJ~G<$p]Z]]_~n !!#{NV`GqOMMI%Zpw.%ڵk몪pOӗB,cgq]N~q}{xܶ핕t:9Z\\, w;v8s0,zgff?n 3MS2k&ObX,6???99i3<o=z4뺞d$SZ}m_%]$hVkhhW^m6ʥK4M}'>~>s>66ioݺhRzҥ b8fT*8q?i<'X8K/7;;2ƞ~镕C}2{c|'Of2Rteu/^x)BUU#iRҋ"4zh4^|Eqz{{jX|_uy4뺳2?[֧~HQء?{EnB,,,Ȅ駟O:rP6u}yyY/' HwyW~_EQ4KR8|st"f7nH 'OfڵkBztt:VWW_~^xann###Gw+u{{!m">$=~f ƸRlll<.KwgՇ\M^|ʼn|>(J(y0;wiZZMӹ\W_}նmu !l!8::zIUU-!D|xzw}z~鉉O`vp椰<#ElW^1MݻNs.? __|c\V17N>mѣG_}RJ m:t^ǎg=z5,+liiad5ݻw''' !ӔRNNN*"S.agm }g~D7t!!į~L&sѩ)Xպ~'<ϣJODѵᕕx<{KEzE:|@9}3<e}JyÏ=ثiܲ'O<77d FBakkkdd/¾u~Au:?׮]k}gMjq{dۻf 8sj6ra'ƸX,~׮]o_·Z믿.E {l?99xwpy*kTCcғ`YO?|cJeyy _xqbbbxxRR,2cLQJ2;;{) !Jx<)݆r΃ Nbm۟l+3?Rn&9x/8:: L&뺇:uwFl~ir )RT*ϟ?-"c_etW\ېكZU׷n߾}eygR:Zz4NAшD"j\.[[~\xBe'(wi:Bh```vv1v…d2j+ʙ3gz{{R&cǎI͛dO<חfDX @JNWGQq.Flȑ#333l6 \NollǏRL& r͛73 IuwYa𮉗^,7xd^d2nkyhRj50nܸ100y^\bfsccΝ;'N(1Jmx\dz!D*84Bjm۾yɓ'cXPp'VH$|t]QT*J"x,˒f\nZGǏo6D"+W;vRd_\iu:0sH$H$ BF,;tP*,, +៚- !t<DL&366j Boo/!$zH$92==jj4RzzzFFF~rcccBaxxxzz駟 6yE2Ee@!wޝ׿D~_?7\YY9pUMhtnn^3 ?y,[ZZoO>Ç !.\_Bo~CBRz#GDp 8aaP$ 6x ^,tqQ薫WH#E w YsNLnBȾ2f577w̙2J ].?7|3L|>>>n۶iW\rdݻ###sss'|ƍ_WJ:k+++9Y !+++VԩSݬ%#Zt~߽+++r9>o:ujeee``@n<22iZ\6 _,/_NRl7?7nd,X,~TUΝ;wճgϮ9sfvvVn\=v؍7Н;wRDeȋB-KS'7 ]NfE{A6AԅŒK(O0R;mȸnh4ڽRE K]Bqk;w싔Af9R ?܀...8q"EIs)|||_]&HO>5M,+LzwكovٔϞ?G9vx\T*[&IJR]04 ۶TiBT;Q=!Pn=x:Й.%S=z1dؽj:~.Î"WMUU/\0<<\*&&&Ν;:8ϷmMlxb&~ꩧz{{z)E9{K/tʕwyDzw,5W<H!PiaױJΜ9sv-;KKKgϞ߱1',Kd\.KHBH9===ΝpႮkkk/^|>99yر$F!oVeyyyzz:4Dٗ"H.AꯙB"nF;;vlo0/xR$U=iކ/W)AApX,&o+AR) nݔOTUM&3_*r|>z. cldd$JMLL$IJ;saɲryeba|>}222kw(~۷oKdVXn6c¹VKyݖ,ftZyz]"* HTRit|U,;N:+ MӶVWW%&˥R'NJVUդ}ցCq|;h4F>ty*X|%?ȑ#aErJݾ}$BHǤv0ƾj5(Eٶ-crwK)UU$0 chh9ÅBh|_fj'xɓSSSÇG"w>d錏L&cX"u}ff&9s&ngG)rnG֖mۣ499n>_]]ؐͭՕk׮ [2d{ڵ7o޺uP(,--E"K.˗/'ɇ0ƥRw9x`%H$$8q4d2dѨ_p!JR3g-eY> ,+IlNZ\XXn(kn#xkk+8p```,4ٳgE1MSJSOEh4J1MVE"G*#(-dzzz9,Krc.NÇKy0nl}}r\({7|뭷?44tեh4zՉK.V;vX,?m4W\iZNu]]%zɓo?ItRjC'͝={R{V155y}/~ [>~3777_^,]o`` ˈRݧi$Uw,nJMB0\"8u:ɥs )5xBWfw=}$c̶{R4MEQfffo?k۾?At]{'Nd2?xg$KΜ9rBPҨ?rr u]œ\}gb!Yt``@BwG+#GEQϮ"J!T;44$?[!B޲\.9GFFd`iddD뚦69rL~2/N]۾ ]{h4(O?8gϞ;h4cNLL,..Vs?~|vvѣ20~W^yecccyyʕ+g BG~ ]P賳êdÇߺu+\YƆ^w688(3gϗQu?G JB(~(,'_^D9p@^\٤?Rh4rw7fSĦ%RΝ;wΝ#G<ӑHDz'`*zLA|>/`_Ν,Fcqͻ&] H ^?ؘĺL^"4.8sw_‹a—r=>B/y([o3q}zMB|I<"]xlJtf<ohڵkaDѷzKnݺl'dE</˹\lz׷[.>r!/..r'Nj5t钮?;<^fxп\>͚AxD}x-wjCȿ/uS ;?)=R=ByD}D=/ c]ib' q\0!$3t”bI[Űr%O!˲0tK_lvw^tm C*LqB/zwˏ;IջRI7^ENzf7SϸxyWgaaz0xor0 ln;ftsBwK|PS$N!P5ʉ~{ơ177'1?ӬK{P(,..H$rZH$Em{aaa~~^Q9]ם }߅C[[[@(fiyuuݫW$&4%ݲIYߎn;DnmmɌ]8t])SSSr9,U!HV!ToܸQ,5MoZYk!h4*z4T*===b'I]IQU1v͐% sj2Mƍm{9T*kkkHDZ4T*LfkkT*e2.)TUUQYsDظL~FANi<;R:33juqq1$RfJarpfffq|z$M!ju~~ݻ\Xy_x͛7{{{,˚-aHdXvaqqQ4ɮ+++dR2I,m:VZ^"pRP(t:]ii'a=ϋbdZ&3%.+;?%1"txxjI"DD&''$c&->iOjL&yr|f8`l4vm۔ҁnIDAT۶eUEqt:m۶L]\]]B:t(7zǑ0 isjO*f$: X,&accC{'RT8XL*.e5GGG?Y~](JA>|XeKwUU]__?t萪===ccclX|^އe9@Y9/}}}htcc#X|Сpэ3zzz 8r䈬:zyto?155뺴nC!PBe, ǧR)5BUU%[166fyeYccc>Q - 쮎+f|VJ}/nϥ*|.K|s,ZnejAh4:::ST Èb LLLB&&&I$s \5b,C- HRH[[/gnK>=]3A7Z_,KJLRΰrXdJ2Xjy/$v[芢lll,G4%UD|*<cemllȥE722R,e?GFF|ߗGdb(H$벖^lY%4-2LTEn^SJ5Ʋ:>sﭪ[]U鞙yc&bM'q@EA((1aG,@$GN@J" 3JX`~w>c?NW$":us{Y{=q#}cȷPCTiB jo;L.3gΨj$7qXsѡSW6 /"jgiJۭ7c/_nҍmshZٳg?~yy&tz^ڵk8<"=zfYքЙʕ+M2Ԧb3ɝsMhFcj^@ki(dkq3sss!N}N>}ر2WnBJ[]]-ryy[z퍬=7(z-o=#;}C!vlyW=Ƿo{:m孆cݰvN[;`{MO<:v^[ X4omr:[A:U<40Nz/nˁ<1;;=Eϴ{h<[n>g #LoÔ7Ξ[$ݪ3ݱZ{4Wݷ<׽`Ƞ[yGg5azbv:>h ZgTscfު jءgzs{!L]-vgs{7{=N께}ƌ3f|rO(,3f̘q/03f̘q03f̘qpt Ƈ9n<]&:9]5EJt֝nȌ:⋗.]ezO}Ʒ矿#ayO^xÇ{t{@쨾*Qm>q! @  [ ] wƛ)0 (ARh.4p@"(I-~Ȼ)ܸg.0};%䡔߹xzD(&q]6=&2ֿw+!anX(78u:4J.ʔav.՚EUY% (4QTR +*%/̓^O}˿$ȥΒϝ˔4 FkN{N/ K#EBDPP@@l rDPloL;݌3>)zt% > {= bd``frQ0UB#"4 dw/~> ~_ٿߕU8M8W8ę=M:/+_u#:dSf"tcP*z{T&WٞΘGa@?td0d<&,!>"iad6M *H *AՊQYr;,*KTch¼!vCGm'C ˝k ƣss,q+xIG˺\ jcYICgܩU#I0m5PH<>gNwo:t?8m*'=pW5 J4 WMKx, ;Uꒁ+! ȞTuIWO8򾍍9sn4WX=NBd}IB%Bf9kF ibTO7cEWQAQUUIۭ/B>/\/>SL?_o_xjIL kWze≠ISI bRN"p,+w-`QGL|9  aB DUpI8rMY^oVb({"Q)C%ӲƠA /(Hals<ձ o*QE$8\fƽϯx#;qcp|k\"Κ&ƸP-vϸwI3äա̩P01UE8Y jP*74>CiA`1??Qvٻ/s^sɮ<|`0YG?]S9k!hRb@Hf^`WZ}+zP`MTAx# nL NDy_Zyx%T@O8䉣o㰿V*{ceEJ:2$Sb'_8X7&V%VWRU&D K"Vq<(x`|Y,ZzâY3VSq\ #]YK?cG5U"j#">8}_+6:+ַGĦb[`U ľc ϸ!pgaN>DNs"b $@DCXm(*mw)F?r >շ\xI`C*e1^ٷx+͍}Np4XY\8D4 Xw:,[czUِ:61 alakC@ 1N@SI\q z=~_3/,LB6 "T"}G~oW r`ƌ`$ZY M|?yt󁽃6~djV’:;m)rIنFtFJE %foUzR>4u&m2Zh)[QW~g\1b_ dYzS栝QO}qhFQ)c L2ah&gC1諨Bn<)\^IvACbAT4((ֲ QkW._B풂m8Zâ9,6j-sZ8|`q㏠RIM%9PC.IX\lbc(FFKB༕#x-:{3kUB^2[r {G=z⁥nqA0p]W^ׇ Idhu_5G{k{k`dm`/bE0:Cu<$1w]Ϡ}h 5f jЖ^0L4f&7 4Oboqi^q5, B5x(.OchA|Q"A7G/VUcK^rli>(=[ꕣ}UbdZ" KuXRϸIly0kk@Rj2jmWEQJK&"Ahb$eGv:kk5֥/GĖ8bdLa^?(?|G{­ST"yB"ilƘPWZUUF#5*D"EpWiܹYMVyiZ.`ҹX%)%F* ~ issQ5OŸd咵}KG LZBjkRZ =P %sq9~-rTVĩ^}V*ebV^s*몊wD1"JXDQ]!bĆ9Ak= IB%^0u)kW7xd?1ID E@\x@?'_Jh8^M &Zb3{ˌ{CIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot5.png0000644000175000017500000040465214717152071030262 0ustar00hanshansPNG  IHDR'65P)sBITO IDATxw]u?קrӓL&Z(;"`.ݵ+kE]a?Q]Wu]EQH' !LϽsicfR' $C >`ryO;0 x"(}wHPa˞:aNJd02g,p^ГV @^eoV{9:܋Ǡ㟨N~6ݏ)3 Kv[HP۸0Jl lߝz7}o+38̅?\S ?%V,5c#7_*༼bρ*q5t C ͨpEx?aH;p\ > ѐs/qLz=8곸Cx{ﵡBw`R֖ w!}߽ݳ2a;_2}|ӮU w{Ka-li5 x" ۱/a1rFX( MPh9y,f\]*0omeC̼oNL zz#퐅!0b|6Gdg;íb j']7+g Ѐw.{4,@ ȵ>7kr7Dўz)(DSf3;[0 o\:uH #}) Tv_%3?I:v1 ?4.$g× Z<7}4s?Â^+??&R1g;9-d@)"^™F4P7aqs\'=,( o {xi^3 !5 9nx96;X1?K32!n(# !0 8uuPg k(tc+|pAB>@'NmKq፠}x /UY`EB`9}/dK WSOx <6 nDێo ⲯ4e^Ēp 㰝IЙ\m"". 4LۚaXވ:P#+h ߁ucW~q\\^O.pϿbxƖ|(o`h-)|Nj璽ǰ-p ()Nǜd|)l|W]1Dx^ѡm"Br}M2Oߢġ̒a/W`/w c4m@Ac7?8}_ZgMO"ր%bx[՞ny=ڗ8F< s"`k(x4eyFi`O܉x#:Kq 1ލ?}&<+q.7`iX$ŵ;!p/0zE&|OǗNC sj0 NljV ZXN/YoCl>]Ķ';5Rn^-4-Ň~ q{=cvJ@4{k&}0;F`t|5#50}U4::p5_mD%aG,=sB%2x}-ӉLtK]1L.`=8ۡ3Qg-l>,gNTjO)@/W%ab*caa~|aR(! aKLH8aqd"/lL aF30 Ø>&aD0 ccaLu 0ca1}L1 &L9wx1aGȓ1M:a @LlDP'|X"BD/QLw x9OW R7][ƞH6 )~Bʳ?*Oz )_N=`]՗: aIB3$Ϲ^ϓo~ zr:.w#7^-Qfl֩cߡ}i1tD^c0Ը}N}|prrN9L~jg/*/<4P+o#+` Qr sIi!o׀xÝzѫ[Izy, Еa}=($ȥMa+B  ./ ~΃Juƿ?> {p΃ t,wu 3n\=6IW&)ѭ!]O;gG ۅM7a*O(v_ϓlg"~wȯ }n>@A=.7PKko'[~bA@V5wANCw*|`9S|um'ZL_H>G]R8̅{Ne\p-FvqtfS1Cł [iaݲH-xr裎,`v5ݱT^|=: dB}5Q.p;pwc%u8Ǧvvyg=ZNPQoDv>ة2|yU4D;qCˌ'7Ӏ۩ EZ[!;g /X;_>1c'{Km͋t|Rbn@y~p(8{ӧx x367 ah\FZ@\w'} &,/T*ʆaY:Z"LC4g\|p>@܎!/ <ѝ_C}_|M#ǒ!Ŏֵ;b`y 8C0.@@Xtv&|3ah^ @Wa2ĥ_OMÒ+Ѻ=~z%05ØH=ݔw x۞P +1kR'gvHݠ٪S׺ԩ 'N@Td[U-$ n}pndJQ@t0#$m1Yqu8.B4N}"S tN| \G?=|:s-wqS ԍRǿ>%R߭<3!%YwAn !q ][ڥ%ճNQǽm{4iV 4oIOers-~ (dQXV8ܠ>k}ȝ}+B`h r30(#U H;~ ]uvPȶ؟>LMHy닭0Ձaw1{˸sES#z?͡;"݁G~[(P+aF4 1@>΂fHw3*݌O02# ݏ'خ}:r  U2KCAzWc %/56>NV8}ŶCd9 }+VPSma{#ZcK߯PTۇ[_| p@\~-aP xǸxխXu;N{?J[ѽ *}h?  q knaM^MХ瞭=JkNAs%8d/qghV'~>e؀ v@B^oal aq24?yԙʽ "䫦vmC6޿ Mye!|8FUl f? Yp܈?ðxs*DG~G?u?ˇ8lOU 3EغruQڽ hn~W|#7O1O:0 cEг_%k0a|xC=*qx/j X.' tրբ9#vE@lDϔ`tXa,Ļyy.@5y[l E O}m`{~K2VCc˅-9h:cY#w6 =I @#wwXaDxBv "/'z|pz0Q0Ρn:g<0 Ø>&aD0 ccaLu 0ca1}L1 0?̟ujaRdzypa!V?g>O~j=q"!n~8pa/t=6mbl;Z+:::c]]]Eh_0 eh?5ɤ,Js~{;8q)d0 8RPJ L}Ud>K ;_\2a`MҮ@MnT&U._' P2% ! ;W}to'@ǒ&`)ߟO)!58>2f ʽݾ[vxʝ((W@NSDFG< <̑1}-lGjmfm_z#hW^hRd?)B|my]TjC] P{yGruwSP{;RzjMg q9H{tC  *^v#5?]K2]V'(w.kt#15Ki=;~;V6޽ FK`2^،j,lȉH0Wv;w/v0 w_M޽dp;WѝOG+; RD R#iLmHIh̤TJJJ,8SJA5g^$ jΥkHܲǎd䅁ET8SJ3B,FRRT|H9̢R )%QTJ(*TeYB)#Ji$q,@eɄFtyC,qvD_48R jlh֣qPHRZAK=rDiAV,3JRiM!y.H%b6㌲HDJDrfSQ~(TxLASJGp:Ɣ)5Îr)=ϽV#W{ﲄL~#Zik `#8^C]9~P۶j׳G7Z'b@ۖki#EL^ ݘn{ޯff>yɶ[lQb{_OcvuBQ?R+r;$2!jJ1)Z) BVZʪ&Ts8cRR#EVDqF0Ki "t¶\@6A"q馕Ϯgo+'2_0q:e\k\s Q ƶxUjQTWئN8[ ,KAm^aㆶPe+V654$loj#+h,:@+.BRtQ_v?rsZP=oT -I 4J3*֒c6KDa ܎|ޗ"s9ou{YVukiiZ\Y )f;] ul[H&(Qj^TX- qᒘ*)"Hq1̳z-VPM!3 ]9#BQ)I2M%*#Kr> jŝ(cvΥ37=paYq nkq6|q;vƹ˶GZu"lAl*V2HZPC x* ,!ac;J+3ʨ&DX3RrƂr8w^~{5gNjIKu[zV;tXTܺ惲ܐ/tұ{EUĢGΦ_\7NeDh$RE @H#m(бZWJ]PRR%L)"(4!Dk7f^:q#jֆü*PanH3.ൂ-1#yKSn" (ל^XrLv9- zpM0)W RM U"`dx  mISSS<#%ܶ0еjmd(A({tͤ$⮈'ZFQ*u)4dtD{AZ?cKP)Ue&bٙ)QI5훇0wph!ݘ#7 qnX9I\Q8+u!@]k WJRrPue Pi(-Ak1-*a*T#hE!")VZ %Pu?mM׼d:6gI*#Bo̖#f_eDƴ#9:зŋ~,RgsaFkFZ-V¢8q\;YH]^Z֙3;$rON:fIl3bg^cT=wJ\{^M1%[ny8AX||K:r2d2৻K>𚎙Jrggzf{u[JT<ܻ󻆆kocn6fJjE0q&szvٖZr9JQVEE jnIƆ>g);ʯ妬 V؛EɦM 3EDG`ڊ)BRj0qMTR4RyvMq9N_ǨXonsgWA]i(i9i>T=usoeKV>SN<[?־ |e[v+J 6eACK%5%rFA l+ Bct!JI"jM sгg[tg<Ù]*/$@[֝DcӆWPB!/5Mc Mcq#G $1ia_5]LُM؝y pχ: RR)"%RDRBP%!-BBЏRP802kn100\PpGѨ~$P),oD3%|qm[wa!r96)U+~ؔܞ+ YΟ17YOhp¨E)Y羦YD991m JumNTU±z{OsZQyd, Q@ P94G*?jgRqU5tLgvT*LQ0-kR5ѐR=/H#J9$w~=ҘM%f4u˒+ޚeِ#1:VyuPKƣHJ30Jڃ ]C[6gm߿K;M'jϬєk۲(AhjhH4VfRض&V !-@KQpJ@{j:rl PTBȿ<_e0k!1є5%ɤWWNgPFJ1@CʒX,h%sV ^7L8xh2r&s! 6SNT"@\xFTip&4aPJ5$$Q@C0p͉vܸ!/TՐKe;g56Ͽ3P)K~6}~wƨ}3zyT{9. ym3/k.[|D?ݚmvd|a򞌼D1J3V.Y$V H *w{ ?)V,tR2g~9&Hܞjjl4("LvV*ẵ[:ۇe(HX "J6 ߑnX?-W,}+ԞZ:$#ս 2,eR*W~>"Z,V[ZpҒ&݁X;2"UMD1bEܑD،TX,_,l8zQ N:9cq▫g6Z:#鸓Ԥ_HyLR7,F%R.-ИVDu`wXT[f:=-nv2Zs۟uRnc`eG`A] 5^aպO:80G7-]r,;K~|SI#64'J:./{ԚShFRӸk%E]~H ( 4)!"J _XwКፖ4\-[0DQɊ'[\wbq)á9zk%$k/tN߀:7d"5սQUZ jdt"lDZm^NLT#'X BHtfmڋ_ӊŝM$4WAX-F`/ "ڛ-J$; TPu֡JrmJK-T}j[gXw+WOڬ)q]d?n;[{VEsRִݷ5ߑerqDQ&&;Xиv D8ӄћ]:㸾 -&҉kV]Z+C1A/]rm\gek7[ d(`&{񍭳:. s/5+-< jUJBMH RYQV|B^R:&hGFM±])^k0FI@9:Re S Z[zc\S]9ZInt6588϶ʈv2딪Tbppā )c)>|o4E8և?pu*E*T+^0WUjQB[sN ֌l6O8|~x؉12RJBVZ>*H:#"-PH$Z q:=[R 8RWAR+Dd8pqժj(Q~k_r+OZR͙Jj-D)qsR-(q %h @NAhF4UBkJQ%LH)*&RMh;a1ljkBz Z T*%"eRRk P.Y&V$B0ةD2/Gm-MO TgVkE9 V\t.{kyҬo˦O?g»zAJR)r3Z2]'?XJݗDETk¨ I+%(R0:v_O =6K!e٣hgM-ˮLw9+*KU%$PT Xtja˜pܓ4tc;# iE#˖hJB5Y97Owg7Kv!(:so=g׷}RPŞ' oJ|}g'9}}c/c7nl55!IgyvН(uf,LRvk5|]N?sc٥0,7iE&E2h hE"I"PqEg֚x|p k$Yb+Bfg[cJd( la #vF[mrmiY 8DD0bmSP&+'^F![𰟃 w~^wto֜uaYu3U I!G"b ɰ#d"EkdS&RvX2*K˂c27RֈM& IFk],k-Xv<!90C2/ ;fn>DfUui (M:Ȳ\օ.JPJT$EÉ@R TP ю=vnnvwtj ]1Ǘ/\sYo;v?hiZ[7 QUB'j=d`Zoڊ9Y_4 x\Ea `їU8 3 ӢH)<Ymx<͎G _UJei$VߴtOYIF$K ܕ˩W"ONKpVZ4%V: ρP"'@TC*ks9~8zd+#T9X F&0R5lhu:IlHH: [G=d%XgIIoOܸz냧~?Wj t+xqun鯸OG~u7~䀘R8Ģ,9B[(; !sZfhAsn  @RmfpO#}{Ue4.`[H(T8Fv2D'"<ɲ"M7+y 0#f"Tֲ16ˋDֹsA٤q |Jt9wP+JIk6%0ZNJ (=?eBHUJ)u.@P朱nfqMEnWZS'N?CE~L;iq "SGkw ]n1E?qq:9ҩvYvhnmcX^dlF.GnoWgceB ~eŋDeZ|+/ƼBeY $l#)jT3 ; J.h\ +@+Ijn4`gg O+Xi-x%ӓ$d'@;&g%J)!c0vQm&MmJa֥GN<;ӧo: U/Azi۝qb(qOJ[^QZвVJ kw7F3;+dB,З_+2o_][ۨޑٗn/]-^2c+\ԲwLkPX /KmQ9-df&BZ<&y +3$^/Ԛ@! ja&V`qVPrvA{'D1iqU [@yڱCiC阁$01M@tEλl3 )@(s[x,;t BJY|Ij4$|Gs"!{`bЉ fc=N׋҂_eiє V+bEup^P'JBw.1@f PӲ(Ш kcgH(%}Xk`&~MS̀1:,Uxmoܰ,,̊{=NPQdK3HJ)A~QPld$iz3Fwb 7 ;L"XT|OΔAAYSDrc[1V k-"2[ØV5fz=הWK,ZjKJn](/ _#*njc?l^+8lO?0YꑲM߉N}kF"2ntg+չ۷ot\ˆC=QQO.wDmgfwtm9˗<\cHY!EE-jnV֟#OP k4ťUJn}gyuSD^vaj<Mۗz;[)/|e˒; _=(_9=[4Fp^d Ĉ15 ̝c0B :_8wp4iB{}HUl=;?ZVH"||ƜMj;l/Fa4")ݍJ633Z|ٞ:p͕:y폔mo?e9T.EkWY`Re{zW:-,37-+z- r(̰N#")Cs8$."P@(>I'C#x1=i;ZϳA3?r|Lc4JV U (ΡѪ wphY8t16,-RcԩqH@Ɣe)'^q+-!Espti8YOP:cJD*?O?[':hHqa@[kk误H %)/+o<%/j +Z51ooX[:aBf!PւٙƬ?3k <=שyV/Xd]yn^tJN"+*FZԔe~R]j?z6XiE5p2hqvqkXZclmG.ғĽ"P@@m-dYIpPE揇ewt<ɓnW=)2ɒ 5a-7vΟɵ|R?ٻp y9K<2󲼺Zkݛ[pd']C TgQVQ*c $Ua@RH)zY cW 8]T KKCSP^6dȮZQԡ2IiA(7iu8b1:78 BR bd}E,ؕJ I$7Ӭȏŗ^?!~I(I!5B =i=R})vjυ޼%ޕGpΰ ??iS_?qNAϬy/t>;%ie Z$Ԁ=C$)-P8({ b * T@F HJ˴p` Kv֕E6v m"Z8 p FWփɵ$ڮѹq<[dyU-THF]62IlY?9y(3 j,ߓtwarxk@`o歽j!mgګ}1|xO9{uxlٳ/_glٙ[X߼wwg_S -H(԰}};VM`a@rNUo΄ w<՝q }l)w(å~vF9 ˋ:&AsQ(PlXב| qʚIeet!0.*F% JuyY , KΌ(8~˗} f*(FAxǪv;+ : r7Z8a Uw$wlx`(%WZY $_y߉MX)ƭfz+K@gng/n5aI׶{2d8~S"bH@W "v!Lt SW8R))uZ(v.$iHXQ)ӵԫW:iՊ2ISVY&t yZ](˼p "6"RI_ *@{Sa͹8q;+ɧ~o9MH$g R Q՚,:Ĺ5F[+Y 3!xCӹc '۫~ .??quGmo|b5:ݸ[Ԗ*@"{Ng !kc) /X D@1].A;)$EIDc! Z(Kv; (A7%> iw [fĺȫݹ~rhA:p|3`g@..̥ 4j-^UUse x~[3v_r)P*Ww չ8褕OƦجLԓ]t?/O~`Ь…fU*YZ|;ssвKJeZ  w uY6a`F(,,gnU]/8_fkw{`""W3_=kW @,Wˆz0h5ĒsWz+Vmn֗ޜļO߹HhѣG?~E%K ґYŽOE.8=;szn4fPYp=NmrSXsΝӉ +ɅKG?_~zKLDȖ $'* +T>č (CO:c⑌*RqQ8ٙi\2Q`ۻ|Sh`=k-8tfN7^^96kj#FEYyWO;rt.jqbq5k`UTQS}ϊ8QO0EEzRz{JJ" "QP:$$4})ŗ_xɗW" pe(<_[V0(9puir@ )hw2;b[J=68rm^ j+l~O:S~dě岏 ء `;aF0奸)u'( :2@"-[b PPhgE `c`&c k 5)ay}99v`NdˍjO}"J@˝fݯǎ6g$ wGgW^Q{:ēGc=?NVuv,J=~jMLC}۹үҕW}w/"fàw+wGOz F?ʯٸfz#-ɬf?1;sxt먯G7gҬ6 G`Wս8 n*8`3;[Ʈݞ(VOlT[ 1PF\kn[@aXvQMJWG~ґP!#pDLB([^xzVXII7==AMj+ L uS%Pf}( Dd,pƺJa9h I^< O,xHFۻ=O9_ 5(V.|q/7a1 0qlOzFnkAPtLѠ]TH#;a7R?($Ƶ:;F(( # Ĺ#0ey;oa[PĐSQ KKC sC猳Y ,XD$,GROGPhZ%Š ^ԛnM.6>=fHa/jz?cq&\hUiwT",1`2YߓQdbZ'*lbpg}_GfA5Tfo U(APA2)@,ϾWwwXKۙ՗/=wHpsA%(Oq)*Q&TBʋ 53ZGBa)A&Ź~lFoaX/ |yQJ}Td,733 5!\Ymo{1מnXG;=X&yj{l{֊zcV\|i&Pq39g껿}_?o5[ܭkX^Bsq՗7 %;k;A)(*PՌJZ|_yvnH3 &rƷKn6oz#la<`gѨAdb|$"DFFRҸd]?$M5Zؤ5+Z22Ps [zg.(yU!x=UF9 mn_X+?6JŚ_ߋSQtdڤ[Yg/#OHİ&?_m}۟?S,xR]Y{T"ĬBɚ.'|Ckkm]t 윝?^97/zm{l^Fn~; k-s:@bAZ4"S@>Ecy4)bE~QYQ0T%)]"se|B$PCfk C!%РmKSGZuF,,U]o0U|z9X[-mnc];2#hֈl`{9l@> =DTd3"QXxA*xZu2looY6.ب g,"^Y4/4ϒȭ%;meY&1:9xY=ֲU+Bk*y"L YQ Vg}`TyP*p+_|⩧}y{/=q/|&iVa.ӌ9+AK!GATIf#`cy5EJHAkcD .̖B$3wk}2>,{EݴxӑД̔qLc<u(k cIP8t r>P X0AUd] 訁è]OwA n'D}=7zhpZpzS4I^JA80氭.Ө~89 {ҝdZso^n7s; |wIV҉VgMJ*W21e^3ը}OBP0qG0Gqsxks; J͏ùfY8Mn]|z8;rqA,)$Xc58 'gEP W~-Wjpbf3:d\_V(z( 83xIQ򨰎 B\׫A+w;{CWx':5d,kRbK ~2*ʃI1v@##V<|lf>Ȕ(`3'|g 1̅jl\;oYQ`xkx.;(D BskS3'sVHS\j NΟ>qW;|o|泿=e9t PG"k%&t,.bk)P!@ABcvL׺qap L9B08Κ͆edcIʯ(Y݌T3 Ij-簷x>q~Lf[7<_{CsC(vԚV$N;3$Xʚ%#cnKݳ8. 0Ĝ_82  Hu [$z0 Z=~YM$̘9"Wy=gIOՠ4V뱦ao>߼ݘ_7YT^sӺj><-2N<'C[ݸn.YEzz(=c-5B*Z7%ΐ kفS"d)ltX.AHf$F""bkiGƺ C):GĈVfgu'THY|t8U ݏ.N'{hvYTKK2/O߱qͪ"lH#sKVO^X=ҩKGf0HxIT$҉$$ bĩ8ˣj鴤2Kƃd0%XBI2i~w`LU080R;c1jkI$;gE>~Nm,'drdrjY[n#Ds@L͘j `h!/q`c V\I5 M5֦-iC$54X PR1`@t &ڻfȘͭWZү9@%'[jZt^^l =58Մq[lw,-8Gh-ڕ6T~oxO?/>?Mr֢_Y:qn{`kspk;fW "us{N_Uq:-ТPZժ9 r8^J72H61DƏJ$#,&74ι۷gV^,$% 2!ʖ,e!Cŀa[%Y-H!MLrP3][VeU.~]CTlɀQC<$~_=,/*0@#cI2CF$IĨ[Ͼ1 !wT RO ;*mK+턏XXP2n R0S9 c BZ؍Ϣ_0.!+L!226$ؒTfZi^G 4(0y3q_A {c3CQ@Q!TKߠU"9UDSX⠋~|xb8F {&QK%5ujTOx< M+drNCɹ@RIC` AIF)p+P h ]zm3"R7Ub1=g q޵k̗M*{gM~spt꯼ˆ~P;lfJJ="b6?!0 !$tq ")(v%LDZ'ZGi;&G+9W (DPc!AF5ȋS?ro=x8p ( "y)1i.Al܎c1¦>a.8~W'&N&FP Q 8d+ۓ~5PxA. B](`zxgN;k,Mh^M TVp|PAн׏=g謚4 AjA_k@0Aݹwoc{Ť*HejN#lp#?ZgOeOo^YރPc'K:zQ7[pJ2#<{T=>;ܞgiyIB+;Ա#uNw޾|Ķa`%JڅD?wSj3n^?s hG,JvȥB+0FHN(Nei"ș A0dxٔVd:%'#(d =,*a  $F(ut|ago\8+:;g[jG&TNs|x̋d2߽[_ZCuiH!ч2/Yމ\`$ MEYUSVM%n:qk#TdLu)Us[9լZQ"ȇeqfҞN8:kLLZC J!2{k+diF7޸<_o;|BP6aC`cP@h7ތ?[33!uQl A"@XjyZ $@ &b?(2pcg(lh<^fC@ڥ4BLfˈ>$dR`M՘(mrsW!)VI:V!뚝`(dnj.=^9IDo~g3.yxP-H!jԏ(KfM;"]]_޹tl.VJZ):VY-J. ;1R,fJ`2kgpew6(NsZv/wS*)Dexx `20a&)yd*کٺryr&φ;Cǔ:b6t/d۳{BoyKc:Yqh%o۝+[݃a}`|e6O|_SZԉ𤒏ޝ՝dzSjddNg:e=>|8>;MB+)uz:=yx]?P 6phR,M*z%9$FYI Z,sQ@WJpP$QJȺʇ&4J  Y!B002!BP+%VQOfE4Yq!<>>D'>LO|'>o'%#Vq{ۻ1|=y<:3%}Ơ˪ .#@8E(8]l]eYt~Օ @Z)hx JEQ{ xJ*B x7~7nu~gFe|w׹w%:BI"Y:qޣqPi={oTQ8R 67a~R|5eBl2#0eX )@AdZV:j y%B|@(%cmCǨ\޾uǹK5F]`XEXE;Z3[(M/g #YAlbw U 烬+',l-h F+i [YƽGt]U,JE1) |ǶlyTVFŤl:]|tMdPd`TZ@ yzxőM ཟj2_w"fLZ8o^uƋSYooLSjk~>5Mk߸ V$J E'4\~vm[€&;h ؍NGIu<_0`)K }5B P*D#MA>~f$dvՍuŬG O~V''N]SkƓ5X7޾K:k7.ǻi*p$:{|f6|Jh U*v #B5!43rRe{x=n[-֪ *Q`JAIi΋mi -(?~5qV''o`e4KJ>9w E/n'a xdBw!$5,1y~zzj]uZ v$P 'bN[-&fG@d>:=ƻo=b?ů^o_xv6O|xpuy V94rq IDATRx}lVU6Um"`#O'0MQPDpX8 !b3 b !R`B~@o(%l|lLW矊B|:%JG^keXȔe72Vd `Ƀ4)̅ple` aH@iԱ1ŨF"K[K,^$雺\K[Z+]bv2xKw6wjʢΪ%*(bEN`g7H9?ow4 X? bRG1b2@Omtz{1 :*n@k\j'b6t;3@~?W($^ / IB@D,Q Ysi%2vu-(t7!'yk1N#rJ7W|W}XRa/ϖtt;ےݹw7nuQEYĭ h &"͍4ծC!lliMHexZ 2!hPJ(NVu_Y !PHGxF|b0"DJ!VμZMr06`.HaUqdN&)ʹ RQߴa{6)GG`ŇY밠 [B!PֺqgȗYd*mudH(#Dt#T%HGBKs"z啗\:2>`6Mgo~:͖>`TEweEЌ@ESgOq1SFFF A@ F@ ߟ{#AքNؕ! j @!(@INVBH@~i+*棏>;]TqڳibiK̲dzzwcckBI'y9.X岱e$%ZiS@jA@^˺Sׯ9.;| F- 3[lH.w~`x<67}#ߺ}ӝ [7njzb01JxL("6 cmSJ0)"/P"(jE5uqD g3jXͲH.TY‘4a#X zS$bw.rVg||ž]Պx@r h$ H2 ypS6׺y7H"I'77\of~rR.nݿnn7_v+5^dcʧz8ND@4F Uֹ4uQՋj㞖Zx)ۣK \UtiP ZKD80@Y̖R4K\m(J Z5u>KD3Q<[WޘmC؃Ӎ@˼q?|&6vUY5s\2'ѰlQ,ͲV֎ JD󼬛r@D"j׷̟}PMU 4NwصaOSMgN%[:q; Ϗ6yŦ #E  q'u#N@,0sáj DC,RBH)V>2BhdUrևZgQ;PiaGv$ɑ3 sv|vY0o=^. V!1E]k%{dVRfGb ޽;EW{b6\pmv kc6.D Pyµ֚z/+w|0:=ﵸӎM"Av^il_~;<>?$L|sauʝߜH[Wwzuƣi=ܟnuRCEw^y}snO~gLƈGh}#'IA>0 B:I=ZA=G~߽J\L8 &IE$P@Kj90 fA}@ED98ƨ--$nlz^hROFÍ[|m-능U>PPYs}Cm_jYkn\<:Lk{G BtNI./I Ȣv w4phלfzޥ~!0)t~ccKyx^BjXxGqT, w[r>>;y4/_"7΁"-|q/ߧ Q Y NR,4, !P^ kW'' BT7hrAHMfuE U!>Omn3@on+߽VG%Yr~>έ;|[\3,9ߊ,^Z?yHGn]vZ%:Nln5ٺ MQX24NjodmlgVh,' @(i* A bFZBD˿3PpJ?5&:P_s۹pʕ(^'޾+o=vLN顉:z[˶0bÇ_gxj: dГ {2uk&4@13G@b\iHX dlD*@ AiS2|@ $/ekBJ8ZIB六: $LGgg=8;k!yQkeT rkG {vD ҫC5;_^6|.#7T9_ySHMYͫ孍A⎏O`k/t!N20r}ͫׄp V[;J$dIΪN*n/Fz ZӓQ9(ʅL;]G'G]{vvfQJu+!L;=YڲB)6ԎZNF֛bDirʻq!H E @00Q`ur8>:4( 'Z%>|Xpi(W/2~/S2ZyTQ7ä]c<vEZB8w0AG[+/<_? կF O'uYJ(TS9xԝ$5fk++RC`@o #!`0 ADH?@V_s)uQBLֺ,KuWNRUBuѹ?rF/Z|\J& ibk(s߇Mu8?abvM;D DA UeUJԆ.C][Qhn|Y7Rv;M] D2.]ua _C]AHI%(IFGOJ:_˯?xp-eXt6v6,\BIv'ΏƑg be)ı_{d6ġ%2YĈP<>ђ3D)$tEfe"_- c̨β1ZwKe־.BQGBH2kdڤv/m ~s"4@bw=+-1xR @yVǭz/\w[MdygU&l5s.+v8t2]` nk9;fB57[Ib"Nr%ʲa 2)GHUUU[Euz|>=QϞOgQl犦)&%k]Sɼpue.WucHiIe[dTRX*YEyt6T$HAl^Y+*R*ROp?LG§_Q|J?U&! Y0;ŝ^|7鼴Ťu]FXkd$po2O?C]Usې J 12V )4Md49&jg`VbeCJF!(003a=* !Bfu$QEu] iŬ޽u(o\@䲶Zr]W&hqnB}Ƴ:lƒwP:Rh)b2JiYXҩ~yonmq,k:Nf"t;MYN u# Y, ai @}sY~t΃ן9QMYTioi6ý_YIO]ߺE 0'&B$ KFD d$>Сp%jz8$:uI;X<)S:_^gߚU(hGmE$=:S[ww[OjABMsa,c@ ; Vm^t X2f|BX13Pz|`k(:*U^r X הy\gnfM#fMdS-uZIY,ʲZJ!֑!12bҪ%&k%r0[Mʪ"||+wv*jvw狩w4s|sЯse&d65Hr]ݙ {{^fQi<4)E^ñ|Z <:ZKR/*'qoQ]5E܏?_[etpx6Lcˍݝ*I;O);brׁ4e$,_RwfFI!pE`)@ ZF +&bLoڹv}^EC.\J"!8Ǿo}7?yw>1ʪpe [pycš}||W}od(VR-ѣo^y/__/ Hie"UdTE FRh j7LdžښoI$͋& dMTMI@%KgcqFxۃ/'q4]dL P-׾zw]/,!I(ꀠՁz[^)rfbBk8/gQϭ:4ͯu/^ /(|eM"46<֖`QeSBr`> >|Sח 5| BE`dsm}׮jgm)$l2+SlwRͅC"]BJ֢AZ d!I 睖z7y]@#AM,4o|;Z M):ۻtf˿-Sv9{>%uUơbYE;ۛғ*f[^u3Ց7_{ݿ7o?dYfb* Z3H:Nnj{<:͖:RL Bbl`6]΅(dNk{퉻V1 T =7P/q3jUT3^&ggear^G :nűGѼ;?zoB\|}t69=NbE@eL,5ĘXlX,''JkO,sU\7~k8 |,޹wqs! K'cWpgtzR\7եpztm [GNqSM j2(!'@O67<6}# + 3"A;!H)=0&f"` 7@@8D@S bdjhei`}vvڊ@HTp>/˲i|xj\/'|RX Wlcso`f y<: ~o9Z61Q8>^~=zy)"q~jQ̔)o[$hk/%[%T䁗ŋW.վb-pz~%lYZ#h5L>ԵC)@Ad;lFӥ^*i'L-e&K W4tQvzn<$$;3!*NAM*L %*BgD*AB @*._h"%pais杇vkw( oŲʗKrl[? IDATzyUճy~2ee*\S0uY?gz׎f_otx2FeI&eqEie%k$۸E0BJH`sV@ҫ&4ڸVBpޅ" @Fu;|a^Te;9;m%I,N[N\gylX&vw{/:?|^`[-NbX_kxtw4) nu(2F-Ԡ|]<[],.ޚ Ng7^.vnZe+T?\jʚrhʻR+3.DEkס=WX] ڛ<1yšnoۻ[ͭw卑֙0;Ch~ssc^Vul< nZ ׷2KG0uh&C  3 2J!Xb6wn?yD$t0ۨ{v~mx:{xksHfg_NYDquc}(/(,CӪ?W{gT޸_Wjy((Pl88($ւҺU=b"W@{5"AD"``̓1 @d{3ClKNzvg) M󫻻oBE]}X A9pC*`Zlp/\Bt֢"m$qDZI]{#`xbqP4b8CQbDCšQu'Ɗ@"#o AÇ zJAs/,AP騩ݽwƵ^u]+W '!+ϴϋvV"bk/Ǧ{{Y7~c/XFҊӌ|9޼=fX>Ne0R5!xKa!4i4v^-)J/ SP{ϑ+}D cD'gkL_tZId)}v1Z.8nt8B&΋[t_[(+@ z?!y^y}Eu\ݰ_||/uE;&5Yk_:KݎV-+t{;zu+ׯ=ׇehXb"pyAD9 ^ʪH-åi|2\g?&|EPюM,tY&Yf|^ XC( " ª($A!Rǣm\D9Q h\,JC]F7ytkU9[eE?T'=(mjg]HcEKWryqr*CzYMFe @hP F,?seMI.t~<e~qgF1{;M]=};/aeӗf?W8n{¸iy偝h =:IA W`ǬaFQ`HŮv1@fD"AfyBva ȀaQ4K3 bYREQ$Zښ #ΫZ>MNF<3~ߺ3/* %z0q&@`@ U3n.2%9LN{ ;g Ά_y?*[wnSkȇ^__4ؾ$΋>0wq*5.]Ua[W8)gv;|`)D{Nb3,~ۯnuX_]鍀Tԍs766ҭ~8>?fioVMF~1,?wi+E2.P8-RQ?%BaRޖkG|^::uv+~ϟ^{rш*]ҹ}w8]jq񣧮]><8ώ>jDkGڐ ZHEyy{cLpVt>:z٨^vY宭%ޤmd7n=`4ڹ`|#Tr1c< xi C*b*>@!6@ފ `}0` b0s` s`8ikBPV5SJQ 2e0²Cֺw^|8%!s@CeCpK C"%OJFlYRyQk >bYjW/fW6;'7?׷EGgXT4Z,KZjLTŲ.d ؉R$D\nm9̗KlXQU73K @I!}t*$Txd\{|Zt7.cʲ|9/*f\W,sP͂m*\EVE!wYG# ҴI.P@,h(4E_M|PF@Qש"x8k%ZEgŲͫC(6Q4i=92Ji|Pʌ6<:&q+rt2*;?'W|W]j"H  2xL$XH̞+("VjŜ ?1zBZXĘ.Rj%QD(ȃY[YukZäHϿpZ5MXLe{WI /=~h,˪g-tG0I"gK$yB˴Td9_cpǏw7 =x<;[wh"M& W虵Iuϧ5U!y'Y9<ߋ;]`zmaa t<*ngnepm"$ "#CkBGK%h jlm,2 f!X<߀W~|t HΒVQL^'t6ud1X+ڲuڝV"ôo|'/- !IEh"ZQJC\Rċ;CALG0.4%Da MvŬV DNo7|sxt+{{W~~^/[u]J`*b)n44ҭVn}:k\j|:@&IEg]QW"FR2[.*'^OO^qs{4ܽsrv>⼲q=&AU;wƖ~t<>>,Ӿl\]9۾AS7a:QIX"N/bM.f;_G=A"d.'JH5 K\V쭍-SȫA+\ʬ06 hS=ٹ4ޥm|1)Q]iE*$NTk)ډvB[n, .K;/D)[_-"quPEQ;F[9qXŽ4?~k_ՐwDU{A&uݔr!IXA@E'hER1wZ'ŷN&uLtR F'E{PNKD8AD㏏S$`0/|Ƶx9.+\(B}0v[O_'t(*wGW~n/J|je_ʯQƯ}O߸՚B:#ӭ~ڌ/o]uάj"Iyw:(\0iԳo r!>oUkQa `;'en?{l("SD!m$u3(QTyuXj?W.dY D"% " il \[Vl=ux2۽lme j:_RD/?o_X W{i4*`&<-2pZk ֺfAρ B&֝|ۛ?o8Q=\"ESB!&%yh<:lwsc]?/'X袄NGB{,lc4\ډEo[B$ AŔ=h2ME0Uq7M+"fΗ<3PGr87cp(_j`I|D- &6O7N (5$I[,D`1(gt:s!tyI(NMҪ`YoUli &B3_c4" I>\c`H@ D"4q~PiAT3d>`G6NNg}qlb# +՟xrF1ȭ,ٽ{7yjxvX\rZ[K .MUd+/w'sH# #8V;::x~1ί| zO_?Z_vsm7S?M5ys IDAT<aS.$uqZy\L a Zb:U$]y.}>n/:lGRG꽇yQuy$b~mvG1wz] 1Ajs@ɧ#X?PA}}w44}y0My,M=HD*h $ 0[!,I@Dw9djegg-R4KŢҵEQdIς (Em՟xʝlQ@;NpQ3(j94ySUlyxt ! 8&[Iυ,6-օ,X4XR "8Y-HHϋHi6]p h=Bcˢv2;FhklkE=:>ZZ'^̚Aw ΃G!"Z[yׇ:N(ɎSL295y9UC, [Qr~d"O<B'2VOF `$+>#?~jKõ^>X'iy?=ع~q~&,1Yng*ӕؚ\@'Dz8QD@(I%QGQ+Vyz6uTPF>F89( 6~:=L3zxƍO͵o|_zG~ _D~;mZ'(-rx1[[v|lɨan ARF~Aցtt;_l7Or*HW3yrAVz"VBOjy[_S2ל,_8nnfsM%ڐ21ـY|`YuVn, >0@XV jeZa4q&4Km.6EaOHDL$f(A{x(ŢlZ:1T̗f u]yh?<֤]\r'|6'cל5 ƒ$Ry4>xOmk܊T+&DR7?AA@ PJ-pu+e a&_S2\Cn2c ;_Q<5y*~@]H8xVC"N V ؇(Tއ@f D&e1kBd;wl(Nz^v[o|H֢h"lL>]?Q<uX_eVBFgBTԥfI|i+/3ZV[ZG'Vuo.B2b 6R{СjXX87Dl F:,גɡ<Iuk[;:}à E/ƓgS5]ͼcxO uEC6P|C DE1 L;:OYah\FA~ZI4]_GJxP,#`A;#/8Py+8(Jwwv;fc꫿ 78yr߽կ ?CϔoNW6|Gɢ>/#?;qL[j .畒v2,+!laa7D"tHtWzNA4?v\Ռ3GK?&hO¢b`FA  @@ @D'խgxŅDED/xk:Wiq`@PKAc&BW[!Yyf(8/ZY.g"JsݬZAS9.B u?t3:5u[Vf4g)fZ51Ō {aɜllV<8˧45:3n`pz^45+"Yq2Q^.k"4ZI3f'kkMYK཯k=te C wR̥R}p۝N2h:U]{=+Ѹ;XLMYmnnnR4N*2b KWsȘh4.rE&y'FeIH>Xnll,"EHhjK':rZUebejmykۻ? ?4 uQVpsVJFCĕR*""l y)"#,ޖuQXD=UvcaDu]#rDZ?|~\(fZn\$@} vo7quZ۰o拟>__J0?S \MinQܽ3jT'VhFEauy5¼p3QAz8zss>|soߜ^4dU|Vt޿_[,OsBB q`-02!bQWՔ |AH D]~` )&~z(q,j~BZUaX9!2F\V>:"pVxi{ ӊiVEP*2s$om`MʻNAe1\;:4Ұ˺,UvZ&FE9[ MTjJd@d~ MY5E4gyz|EmQ&@m},FDJ+5X-lpkk]Dܿ}0Xp\_~:/Llclޟ#&IEԾ8ncֱB0i"E3/Se~<=<<8]{*#45NR=< o ZڌX Kxx?hIֆCP~G {A|sDh8 ^,dGw~r:*2~Dt<\_kן'z7ONw;ZS9E0iY9޽zhiOvc9[W_;hSW ?>Sh}'?O nWSN'F9# 8A~K֘ŀ OdeDbo8|-դօ̙HQV~ʎ+u uJVXšۮWaV"lVҊZ?>J⃓:v7 ʢO\ĂJV(pR!DZMR fV[ZELӤnm$QixAD2=Xlm,M]gN g[.iU9&&q ug~ 66eyff͂5ˮ:tosʼ9\YJ$4YI ZfCGt?@MKmV#IU%BUTp|=.?|" 鋼'ύgeleݾun6.*7n#,JQE|m'@iuZNz{{é-\ vluiܖg vR ~!O]H;m3UNE<.v 5oݾ H bl2cT{dռ d1 o^,jZG皲k;N(6 U,?7okXSNý[oo6;fRv<-郏=4 4!%" $gg1b^Dij*XӴn\\pi@Cv:K,Lyt2w ,`#xSO?/0` ⾢1q@Gk9!i4 ԉ͍,nӹv6R9{1ـqΝs $X9}UBK3y^9j8L|KX uER:OO|^zm#rwg{fSWOA#J`!.YyYcAmԣ7<|FIY/-Vɮ [vNޭK;{yݽ'~i,(O671jj)ӆB,!N l9sN2 dmIa'#_ 5>z|7-ePhyG;#'?8 ! pO`y ȵ!cV3?innoZ-Ӕu !x#Bp T$Hr@z92%;7v,8ZkIQ K<N4RJ( GcEY`^r &pk[/uh32G3:  <ԍs{nӲyp#J~i?Jpgwul%}ۦ,;;(R8>$IUVkϏz LLE8*VH|ZWz+{ ۹:RvJ.MýR{wTr6ƚ~'y]ab]vz8)51b Qg~80TtOߚ]<`4R滿ߌdA$q;Z=$ƁLP@)xE NTe8G PMhk>+^ziӹ׈; I??C!|r\  .5ޚp!nM w !W<@( !xB%ldw;]@>XʺCSPkW{~0+$L/>d3mmhu?7}[_z,9||uV̿ݷ6>@ օ&@|4k˺'./}%4ݷ4Z,3~ΫoVNݚ{7l|}s7^z{t2`A IKk9"F"@8j! p Q@X8@C8 >MaÞi̥\[a9=N9! 8Q zJ`W m@o<2Rrc)e9,BXUYN+#ΐ0(1!V Yje( 4͢$x͋:I%$bcmmggT'V:ΗW,4Jz~ iB>6YZk1quuNjwv68HQdV.-/I,y$Pu 85nvU04m_/|c̺ @>ZRe @JӸx>>t2D{ʊCuSt׍FB};c~gNn\x7k_>"2z?y~Wz_?:yK]NnؼKo~Co@zp1y/缬kkC]íCj:RdVg"iAL$Am<RJlEa5XYY:YWl2+&9ZkRQ^|CF;[ȄB ED+=kA&g~uc09hz0MA(MY>XU)]:xɨn8R\0 ͋X%0v"0[wX\)lLҪ%y`jȽ B$l ~pg"\vLr2ju?qMz h5XYohҍ=$7ս{qB禮%fT:5 o2MYfQY5UCTjP76/zj38d>(w9 W:[+?~m: ٢+2Ԋ-1 L5vsR,1E<cQ2FGq0gxM]44Ѵ,b#PI⼶%['7{Z~ׇzgw?g?[k;ʷ⟖f $2HH@@DQ,uKT#Ƶ$R1 wmu]> XRXF,MeKYy5``H44})nɶ;7zytsN^}.6H"F GP[T^cZ>VmD~8馬1D@Ѿi4 h*B6˶(| d2.u7%`ĢrdP*Z[p&K3 >gH 'îJte<  Z $f,搏`B`US<\zyL̑5onH(@(&leO CV_ӗ4ֺikRZ`YIS+?nWmpEU8cwȚZ"d cYJ|gt=kC;ݪ{6oy3K7nHN1 mͦݘ7&TBdz8Ya jh[JkK!)]م9@"Xjm`^i{0zcMoSJ $2e<<.1< B ` Z["hcE` 9"@ r9 B=c{Oчџ eXG\h&x$X#ǘH0u4yP7u,mßCY1zgh4"!֦~@8iAYkx I{ۚǔױb'c`:,0N"V3yエ>p.[QU;_ m7x-aOx'QbNrA!0<ԍFs]aUV۽3Ot/',|ݏg; AN ,`uN q:c\&M]3$d,mmQuڝ၈8 &Pyl#6e|k{g42|i@-ĵa@n[K=5Fp$dx>fcJ9U])m4L0Vux/?h'lnR`j&V-n?ĝ~rR`wbaeMvS?y߅7L"Mep<-!x!CAqD$s`9ͩ(Τkmބɬc=s;FТqd*EYV Vk\SUI8cn,zc-y@Ν=sC@? Υ@9G2@2$_^_?' 1X 3Sއ' ,E»=ikZ( 0=yΤ`^aipQB:t^"z7~U]ǒq#g!G>Tr $v!S]pZh Ν{VWh)G|tݗF@%[gȀA)a5mw>WaZnfUWxu|(ۀp6x*j˴ }[w}z{[_z x=qϹd9E` 'T1C-dM]Ljg|2o\އ*Mԧז$Q)Q &CBX:DȐj [H_Ux@ *]ؽ1\ZRRRu^7ArWJ,@8ni7u1K$BdIRvuvG1QΆkÐE8.놋gtlpm_# q֘@~{^Nb@RdJ<ʪM/I}؉Օ)j-y:4ntι:VZ>~E]#/t}Nb*Qwb/<_㨽0$ΚY W*>峂+.8>|O< )M_NJ^]S_i@uXh_ۙ9|3YՕʝЇ&Qs)y *۝@Rmcr.b4dz Qwe9ģPri9" x82ΙYQb"fDRTdLp`8\1~HI~Q crP;Z]o#BCӠ="g<s&B`Z.p뜓R2^J:76S>xa?!|?EQ|7wxMwqF@#_$(!{YXĘ8 J\H3{/|ƭV/kgduL yЦFH&.)+CDz1Ayr:9gSQTYaI+rM9 Rfwn+Ӽlϊ=i]?9 RY?g3ORiYٲHü-f׫۝dQ4V:iAY) `慕^ΥFdG6W, =\8G$PP9Vxtm2%ch]ؼs1iQTs!DSwvnF+%5JN8M*Pw lQœA (5{ ,O?vm+鼚:r[1+i"Ւ [il➻_0O,A>iO8]yѬzt>Z2Nyɵh~|57-ݺ|dr gшD!P"gXˑ1DƘ=!(0 g̓ !ΧxP~>o\"6 Aeq3C ,5Bн[91rh<1VH$oz|g>s]wݾ}sŋz|G>3yMӍ^ySZpTp Eږ^Ngc{g$uM.Ozu*<|ᏞZd4rm:@ֹ^^i 6@${噭 s g<-3BBeq8sf*"#@ѹ qcA-g˃~W_O}Sʯ||3ϟKZu*8c>8,vjjm.)ΫX nl/~~fE1~+_zWY.ę9\@OB͍2IɋC"iӵȇ H1*ӥpz ` 54X1ֲYSkz{c드@W76 :=ع3~+8 d'$ȝseҹ1)kjZWꉅ=wx/jj;SSKmNq0 ML.H.t6Ɔ6vTT5 ڎft `%D䝷` M7 xc! e<'˝e[EǷ{7gk˺q_zj7IB).z-C=&q\pai[^U)ľWVZ#n7OKzw~҉άlVnjjmK"bR6M@)bDo|l{>7Wo]xKY+3>Z?}AݯGGLu֩ʐm [swmUȅ76?t6͆uH[3/ɤ#)`Ō &:8J"gVitgӃN]znK+QʈGsF\W֝%DpvdT3 @Q(\0T^ʺ-{uѠuW$jg PyҔ_26F;@l<ߡ@ BR6ژ,KhpHŝ"@#c 3 TFcn7MH7O}رc'~?//#ŷz-wQ2! 4yw$Zq<{zd4ړO?LN)cr=:8~b婯tVzluX[` @ &uR0%6f*jGX^i*"X ye|6UHI+);[XzmBٸܸN"3^EN_ӇeŐ Q"Ōuy(A0U)r_Um59H|6i- 7^*}*R}8NZF;M/N"KWfGY1lKһrWgoTV~Q*op[<#OLbh1So{|ls=["5+muW” dVwsHp;LF$no;Q4z^'oe)QId1P{u}kȱc|w BڹaԆ6DL$BF1q )@p1:+1w˝{l>u?ȄQ׹}F|D%Y;UUqc>'^He'ZzT$8 "r΀I ^gB0$3 HV)IJ{bp&F|7b=q疳wKZVذqE2Nw]xBT*A7[dt8kqm6HD<㦞+k` (/cТ˛ި5[ :>}w&a:,ͼdg)Bسꨩo>rrK)AhJnvFN=P.?{ }Z;Ѳ~TE.8#_XdEi@B] Ze^x oQRx 1$"l@R.^p@H U+@ӿ@\j V@ br />c7֖{KҠ2{Fki8G޹v+reE@R\ja0Xi{ GLVK-XOmov[D*MY#R>_NVcd%zA1.XB9އ>p),HO#_Y^tW[`˺n2x?Oŗ}_'?\rjy+NOpHۿ$V?U;{E^p.=zƹFZuqƮxcNs'wN˺CbF IDATeImuq.nҭJG`]JW@rK{<ebF)NXCNxG@ A0EaqgӺ[>ܫ 6/Ra$Ӎ5v_Eusg;mwNG|-[\//3 i5t(#{{lDLCqw]^Z?>vWo7zNM n 5&j39Fӆd0?v>9Rr"O8,<$,!,5SS&"QڊW"J^Q{..4߼6twlqPʓ1ldV߸3Zh*mRsO&>8g[6z?u|׉y]N!R5&ئO&NcꥳL"RrPӃ<M) GXRw{Gl!$+Zi!"Y> +^ wiڑau'B̋ٳDo~/SNŗ?{[^>s,H._Htp[O]n0/?b&___0>:{"<u,eu&" 06O]UZ w+dr}4iJDl,Xp4LƳewL}뽣ý֙U`g]$hTu8D;I@@Щ?yqS@X`rN89i. Xu-4p=.K$ Xi#HX 3asj)DTͥkvΤ ёL @X#J$3TUD"Vimcomj͑cB5JUIukjqhmHl\1P](&b\'`Q;TXR@nOMBĭnjpST7"[5xk>ivٶJ *,3w75Umk Z\ͥyTJ'b4xbk.6-CD9[sY{n|F 䊶. `n쌷CM+JM=RX`Y\̌DvwDga@E`u4-N-aLZi.ԒְíͲ=k2n"ԎN+ *W:ZɶI(V]n? U'G'a'DSJ(EX4ED2)UEQ]V/ x2ɘ6 B)HṮk䀹m!nӚQgT%RD8΁BNp8@ 9`堩Q[!erąaxLح kDo&ؽ{7Bh„ !=Z&>tn'N8wK"O//.=ϥ_{E;؃}/jQh),H4ls۶^^۸ikՀ DPq{ Cj"cfR#(8kH2e6XA H$3mg2Q&q]Fz1c}/YWm4SbOCx K+U3lARF|PAPmˆBJ 7V̫=vNԦ6$*1uj{bѵՉMʆmMqvJ0lT[#3C+DIBSUҌ LyL-.P(U /-3gZ'LkgXP VO pR'hR륚70* , V4}h4M3NEUy4Ud(5BS3mð zl*iA9 S7f`#cj VU٦v+e)]s+Dg.=ۇ0!DÀu=˧t#ut)f-#JvnTϨԔ-#t(H DEaL8 N>o,Dq.w:@ $:@lN`[&XT!8#* ٖj:Fض @C@ ۶]-.ti9lMة IfvC_uދ3gμ;l̙l;tn'88 !`(U! qzܲޭeԴbD~E,klRPo=持.+#BTΌ@-8P|> mܼD 8X@dУe87=#=^4HW /3tk{, ښɤ1 e\ R5`\S1BWUAQHִ bn34ɨec?(*.KX v4??X:L[}&^b R ]̣ܺa&JC%Ef&A0WRlRY0sS[ D"qp :bM/н>͍)ma"X᜺]ZQaព$&@B^`0ckS )e@UQ1 64UQBfr7W%4 $l*YJE$%4l *+$1׿̙裏qLs}UWWۖA0!`KT\t*, E#Dc!&q0,JV}cꪂh-faj8L ٬A9pd66iK˘d D́BP6 LDMDVmFbK mPf[4F&)H\fZhoX*PIY+5*&I @pmS2UPP}[rE>Q=qUYˢs+>_וX,12 b~I1pqcS, GeRuLQڈ80Ո6G&U 4XWFO!Y@4p*-xHtXtOS|ͶEQ64[s(e#Au*|.@@A48`t¶ 2MSpd4 F4c+iPyڂu;e[+.]Q?^d4ȨA|>ݭ ؆!RT^Rگ5jSyu`ne9g1\,,D&7/E׍ _ $EDHDB y#A:z1 R11aY#ۭcY1DZ\VOccz~F_Ssxׯ馛K qoXVFAbۯ,ڦz)=2LB[%eҴ% _TLG2 nŶl;5i9QrZY(ň#WL&,B qpAm BP(ugňq1入v\;RmM$J+ڸ`EmxC}adۚo舑*7nuWc$LPn a)'inA΅M8KL+  !K08w)B`l:ɀ+fJ3PYKRsûih*`FmE0K逇X܎EHU2dV*u[[Pux$ !@@t:f  T6mQiTFbCH(gSL" ۶  qRZ0 0(`%m2˨GV#qFH4ױW_}uEEٳG9ߺu[oLl`f"&tw Ol\(„qH3Ӵ s.8ٖ\3D̠2[N2{c (G"Ʉ@Sjk[MnߣjĶ(pdK:\/TNcFfQNڭi<9㖂Ҙ#m)%PlPu{ MMNTq*DS¼ !AffUjE!L@k]L08`[? 7١ Ď-ی@p+9n@s4,ܑ04QJG;JLG{-bۜ@*!^{=Rl69 8myAH!)yn,bTh6UxI/5$",3P'X{$QXE3cƵe ,6M8&XU0p02; Pl=MQD׃PyMU äGS}HE`Hsaxb1BABQnх86`! $@ceH $8hGg(F<ՊC.h*#ϰcX8^ڞHjJ#mlIWnNc܇lغ7p eun((wHJBn@p& , Cmȷ'JTGP6AHp |bHG7|N @:WB[/h}& ڹrBBSW>p=v$Aw=&a>:8x.30qhXqȟ{/Vxyzuq|$ fpLH뱮{BZv%Q2t# IDAT/#&`6ߍ^ޖS-z`Νv{D=mUUU=d<ѣGnzݷ>d9g<)EG>uBa<Ӷm4_b˖-=ii^s5cƌYbŒ%KB-UU}Ǯڢܝ{n? s^SS!rovm<.9:tyW.r9*yX,fY__QQ:EY~}}}^z\eP~7уuK.rVYO}{.X}O?W\Q\\GO ;(Ayꩧ"b7UU}gΝ[RRrj("bĈm q . ֑ƍ1Ɓ@ng/BiZ{H5 (I³:kÆ eaEyWn}].r>ӊ(*ip˘} ɉrΜ97p޽{vH$2`Ylv׮]ӦMu>H$w_0|)wﮮ馛{}ѷz븶'Bc۶m5lBDB .`˖-#G Ë-bӦMSeٲet?qqq~kqΧNz饗۷o4??kjjxe˖qί3u}/ow Dc !~a0$i{f̘[|W^)ge˖QJ9Ǐr.|9眏7.3f ,\o+&OsϪ*++ gfFss!CzgRe3g0`oQFQJ_xw}r 7\uU>;^xo#<_u_vet:`3W^7!{H]]{#رc7oz455ROqUW/Q{YpK/ m`[ZZ"x׮]6[e?1xojkkNtҢ}{p_-"#~hYҥK:Xj|Jp&_ϟ?qD/~1lذܸF_V袋d4iBs}vXx}裏˖-;߽`N$k֬8qG}4`9{s=lP(OرrnѣG'_+8a+m8筭eeeEEE'ldW(++|PCqw<=ɓ,Y/Mwxl{7`ʕ3f0MS>R@ p@=``-Zt}xέJ)1boҧze%>}\ߝuY&Mb744رc~?clڴi6mB<C!|>$^ K,;vlqqq2fBK/TؠAN+--mii!u]okޞH$pw}wy_:c !tW^ڢ0 o^OcX~;L2s:B>B{n4]b9 09yBڰɩ6 `(Ci˖-555B@qqq>SSXIז-[1hv@ 0snrHN8q\V4555ÇY 7.{`SL+Q/p ,BBC%K|[ߒk>׾tR8ppBVQ.9peiVz`O~l6'N|d+T*֖bǗ۷ŋP(4vXWzǏ}Ν{wpoF[n„ g}ɓ_]FS)sIkN~T*zA͛78HP(iZaaabwӟT'92DҬC^m z뭥7nj>UW]UVV3w5`_(>lqqԩS&uׯ_z?n;ʉ!mƍdJKK{\]:,l4-i0vX!رc\֓|"74:bꫯΛ7/d@fB7onjjBwU s>u!,_~n;7֤c˲Fώ1⢋.:&6lp8xVЁ H{{{rA:|Yj՘1cjjj,Y"7 rdٳg?lZ>3B|44Ҥ cկ~_v\?x42\ܺ,sΝrz˟|n9sWqyyyaaao>Oz.\xwW.Ϛ+gQ]] ֭[(ʶm. /|kM8QHɧ2[+.zy'g؍(m۶;|ywoow[UU즄PқSva5І b BH*ڱc bX*@ `xƍ#FH3UUyt:m)Sx )ʟ~+++khh755E" 7/\wH!W9=z~;(09?weGwuF-\s|^n#Fy睆as=ѣ9EEE#F+@ =;<_ҜZ^VVccj֬Y۶g̘_ɓ'1⡇u] 0 @j˯ܑ#=x8Ae^.s%Ku}xC猪&zG?mEQ*++*/~z>Ǥs'|***\rɓO>ywK~b?τ .~P^^^ZZ:vXwWy /8Rگ_kޚ={܇_R~@`Μ9{oѯ_4URR\G?ZB ҆m=ّE%ҰWdƘ+9swA7tOG^6$/+77u{ !xKx;;wfL&8tY&wn$=͵<`_Ct{qRT4u,_q!m0xǎBNOPGڰ%IBcx.9r^Ӵ 8)Dn9;6NN,rBC9H{0+1c\SSذ9\qt @tM?l9 [ee3$s*, yԀCG^ǁ>p8=8\ǁzq8pރu8pA:8pp"!үb# !AWP܅ s14VΥx1!*sz"cK `? WEOm#TU rvg!)ݫ~S'7ڵkW\o|Cf]9OG!˛^P&YzuCC{c 0nܸ-[lݺ 6jԨ 6e2;X65|M9Tjkko>-L03Xzu{{{<>} z5'Y-NO4) ٙH$jkkǍs#M@_~ڵӧOׯc{aaa87oioFqqq&KE ].׹瞛s(@F8p?P(ӦMK,_җއtwtRYE]|kM6`7o޼{T*u~?-[&Mtr!ѱj*UUO+WFDbʔ)|iHdڴi?9XlΜ92\`G}$8_s5---s|󎪪x|Μ9 9a+۶ʆ*פx<矇L&n:gذan;Gu֥S0lv„ :w9slڴ ֬Y3wܹs~'nݺK/tܹ˗/7M3J)J͙3gƌ^xaee 1s.Ls3f̝;?<&d˲fΜyW.[DvڵuV!Ķm۶o.> 24D"iӦSru ҢQFYEYvg} 4aݺu\pE]TRRԴrK.dH$477K项f֬Y3fF?c錱T*'̜9sƌ io̙#2t 2̏ s饗~k_[t)!$nٲo߾uV6leYDb֭w>)H2 frQ1cƌ+bz_ve˖-K$ӧO2>FRiii|gϞ9sgYSS.K.dʕiƍ~nNU0ڿ9Z0ƻw~***O>X¶˗o޼|ѢEPw (** m_~R۶ XVVV[[[___YYI)R5MBho !z-%+V8qb֬Yh4ZVVNe\!dƌ"੧r\ihtӦMTj͚5LׯߦMNpA0`،cfioo/,,ܸqc4moo/))I$G`f7onkkm/ \傞i&_?OrzT*nݺl6jժl6 /رs>`rI~Q^^M6 >\Rs^XXJBK,d2 7V9rMgqFkkk~83Kn8WpΧLRRRrg=xDBvw5iҤ2c扫qEYhԩS l߾}۶m`0? x>s̑Y"24ҥK9Kf~ ,wޑU߿䘔9'O.--noo?UXI=m}>D"۶m'2/^(ٲe{E:묜"\Q˗3c\XXX[[iٳsas?s0\.֬Y #G8pa_YY9rH8qbYYIDn|I_2[|dEEşy(mmmPH!b؎;?$OGn|ˑCt &k׮/xڴiv4Ͳ|eYK~LYnL1^hѬYE"Xǰ= !-={\i@񒸧OxBHkkۿG}4{>{ܸq7ovr2Nbu[!4!PUuÆ n{СYj~/4mذaҚ &{R!: IDAT4sa(^z8p`sGݟ',B護ޚ3g9s.˗~˲dv3MSۖ$V7n@e-^x޼yBgX?ypN.c,w!{|+  !Rٳ1{Yz 裏ϟxbJ)xC UTTR={躞JZZZ>Cƣ(,"L644~QsD$ܨO:+_yGѪUVE"5k֔TWW/[,-Zh̙.k͊^z„ rWnժUuuuTjqkk'8٪[i.Z(/Hí]vu6REQ{\nu8 I/?JQW_}uРAXcƍEEEeee6m }ȑ#_/BbcL !?qҤI{iii(riZ2u]h4d H$@@*R z'l!ܜf@4mƍB1c=Ouuu44vR)p\DB GGnE􄔧s3rݚFtE7vr|Bpv*=v{$t|Ni|2HTB(Ձ4CMޓuE,+gOAZ$%!IJ,-ZO-EQ qZlb\8W/<h{  IC|dE:C赻=tí[ ͵L8`By޽9$g]ѥ2>Ł蚺1!,BgVla5"!B`h爐޻Yr]k3O=ݭnud=lɖ_|%6w.\L<=aGzyamԛ EU1ȩưh`P @/孡f&N=~{D*DV tBhUAP UJGz0wxG~Gya*P4M~߿[O|bvvk G2ڔ'z*ʰ ,ISրw{k:?* XU\pg?x_wW02EX՜?Z"J1S7T~K]D }*uQ4cLAJe`hWuUTHV\;լΣ|0!8ś+!|Kꦌ!*H>MǭNhNX0V8 tL-ްcBHa,ƍ҈9R0hDư0"Z$@{ o@yUJRЖ.U@X@*|7M ~oovmyk1zQjLDNc wn, >WeҏW4_+hw³wʯת_s{ P(eVľ `A1@^ j@(\)e HDX&@/E@V kF[͛n>ߞaNXɠT0@BD1ڈu$ 1c.T3| |:sӭF/ D6*KVyc(8;@*d#!l$ IU0 "(SK( X`#VX Q}x ^{{ND}zo:)Nhj6CAe^Y#לjvZ&0!eʳ EEPqB i톊2" JD Ν<;+LtQnl7:Y HƆ )"(֎XU@sgy0ZU4(ªWvO!;4W[ eȨ@XQY:ϑy(sg a8f;=u^UDrڠw1dWQ:АL6^~k]G-xe?HJ4 9E&LDi!(0߹h˦(aiOTQ`dC@DB%$!Vv?ЏڷkjH3 $fvͬK9ː c06fe5l(\[_ٿo Ew/t̙b+1YrȎjPYC4B;j$ -a%@ @ JhbTU@9vލ X<n)l_VM+V:R+Cn;U@ -}:jZŎXW*N;*+(WjcN}ΓNȻSϙlۯa._Z$o6_zg~~Ͽ<+|<~w՛gz!Nk?1lt_W?ow&1npccjj[[xnYmSNIq\SOpEw/~öVڙK;o7:dm0`noo}{=ШǣHh8&W/\zozw"!~~wVt8޺~-7yaۤ^Z0&5"Bd}*⼊σpx |%wߊ?#?c?Go8c#.~OG.xcì35ݘBRe_QP(Aǝuc4R JDDJJ*:!?^$"-AU)B^+c}˷wp3Ȩ?6szccjgCWZI DƢE3oabyJb5hMo8b 3MÍ7{fw;u1bРT **Q5h%2AXR$DlPjҐc;Ӂ̪p@P‘"*r`DP {T3?IB`acT  F嫅YTi T8*BcˊmCcڒ.c+n>Eu8oˉciRc})ϔ9R8a J̠"VvԲqCTr-z׻~~Ph z#fn{ɣHo,6 Qkˆm_[cʂj6Z\YYˆSq 2u'v\< !ʑc|K+/]wM6xϽՅ̽o>7]Rәir?Y1ԛ$rcFͬ?T4 s&HP{ψSc"G^3,́YE|9IBD{Kyl0 * 0TPZ4&c^o dxm}mm6aesXDYeкvM,)5U4 (J>x0&2ZQڠ*()"г;&Vy sh>s~/?+(>ػ">7#r/ߺE *FE$M$ޛҪ%xtq#jN5B ?I"܌4[i}sOm5p<XH!R0d8[MHdwjj׾ݪJBHךAA"ļAڔ^pU(,T_M-{RRBбMV"5DD,Ydz JX$W4P&\N0Ј"D(3N?2]ݛԩTu!e7 DQw^p‡>£=03lPWW!$bl@cHkLS\?<ڽ^{X[z[tКA]Rⶃ` ZKFٸ=ww?_y+^V< ́|9sځ{KmqцH8u[v}eK!T=@Č,yqhCȐ(PQZ.QRX+JeiDH$\}/O+2"HٳbRjr@AS@p-BUad1FB-B`Eħ 4 F8y&,ɿJƫr9۟7R-,?Dow|{󞗿<___?k^gm Gno[Qqꕭ1s/8[޺OsșsӳC/=)wn;vt<cldZZ.#B6Oys_ζF`gw= ӻפiq `nxpZ|C=+%XeQj*!ed%5 ACiCI|0>c56p0&R2h@" "4R"`%9=D]N n#wszl=[ȁD> h,Re= R",8hE Y[RKqĔhv0(M;B@%X1fXtm{j.GO5aV-޽k$ /M`F辆hͫ0OQăoONOƖ66{ߴɂT;W%YRUPnQ?Ƞ"{`A*YBh<_}]]??ַ{__:`}6 ǹrrlr6%OZ/}қ[Wl6^w=Jb~iϡiǢ>N9ts IDAT/FSOfrUXT?nW;'N>sN9}S?zvxv>;7~o(l;=01 T3;a4,!KD$6u̵Z#1Kd,@ DVTDC:ۿ/vannmK  Ԃ6\j'?$~/ }Ko4*h]{2vIdƦpy 9~bijY_:ԞFqk xm'>oßbgoW~=wvA~r3qL bE!C""!!p (|B0Qd8EQ{g:AAuBBFf)Z8k1TziVH375pD&yDԀUBk r,oMZ\0d噯՚ͫk!PQ@s!kWd;UV3jG]@R -'4lvn}=wcGQOoCjo6 BBmĤ`0L_?go])MJlԨq\K,i+(]ߢXpӯ5g{ig2b Hj@ i-Qp0d Hq`Tb#23Z)Ikh5ZPAP1 Pz6k{cH}z/A[*&愅-q"sR%QD0DB夿PJ6Qjn61m[&è ZKe_ɃJT'@dB6#,Qb2W`&GLxN;z(8NYH-!nY4"E ??w7>w'OFz%Zo W7܌Of\UUDA$b;L?3paW |!ݽz֣Efjzz͵)sjGv{0ۍh!ĝv5C_k7 ?83X8QS_|t+o9܅uu+4  .YAf@VA4Ơc"Dԍsy!D8=y ; }i'ȁUQ8G`xЁū\Gkq #E1Žf-/o!Oue' ")@FcNxD$xUR!1DA@!΁V1"ZKby<`ҝkghЈAԘ jX߽;nkfkbOdL$@-tLP/]NSFӲ޶ f;20@.VJO bi(Nƒ) 'PBա; gO=x77rO>YC:vÉ(1Ә:r'cq#9u©/?я<^u6ѰITQTM XD}H$ȊhEz,54Ms0ƌcDfޫb,1`8>̂(d.̮vZU՚c޽{#(~b5kXcs^ TTYP`fAk-$&R?N{k[è֪^pi|ۿf?Zm0x=]45p 0y5b0A)φWDyE a{v=o/vQrTNDڍq6F1~[/y-:()G1CȪBdE^EPVM&vVb- Bhv…׷,cO-D |uΡpR+A$ c{)r(P(CE`PE;U&2Sq(d|~+)]] RD=&Iv4Qۨ-ܶw#PV1klC! BgiV iPXyq˥**P%-~VYE9DTz.Ӈoxg~g~~(`5z>60 <{[{g.n)kx"b'jy66]\xnB0|0 .<{rEx|G-$>F;}-?[q^?b^-r˭AG>{&|Kn޲& 'Jp?v[ Z8wmx DUA Ҡ`[uFAYA&$bA}FGGG'ZVYs$J*dhl:;z葳٥ѨTy}ݲAMŁ G'L"ĎQQĶΏM(Ƭ86RbcJA5I⩙iMb$}N?1՘k3kF/U5H^cbU0T#k0uT&Ԉ$ (bi*vF&!X: )ɫUPErJ `~DO$%gP0e>-l(,ԶR++7 dXP@2¶^:X.sHJR*]Q*{\%Hk,K˼NeA[rX#)˙v6w 4~<^XD\$Xyi`?敷5:{Nmeh)4nLn3 2jp91OX 2dN,b31aR/KfJ L)9Fg!7}/?ٮnhqKUaE@ EjX @ȯ{$DHUvZ̴Z+b_A XXJm >:HL PVV\!uB` ,m%r'c \Vm` *%(8*8*R@X{HKV*)uB0g+s\֖_Ҹȁ6״e^E-&,K0XCL8n;i$@:j |Wt[ϟ9p;37[5ϯȥՕKWΟج5rp(J_~ s{$./oJmL3_h <䓻H r6cO@0EXU JT~~yfɺ&54MkMd#HU<FPT!U$6#{vߝ9:8r3Ĩe,8g" -bl_e˛f> CF"8؁pg~㩺Bns"T ڒ (aB\ LxB t\U$uX\Zԇ AFSxZegU"R%Xtr(me)24Uǜ\3UF27T w,Z@^UZx*Y nrgnKWT m/^G<my:PMW Ik,*^8g/q6Z\#)Y%x66\Z;|=klG|˿Zh5z+4F#zp֑٩`GYOԿt~%""_/{ Տ||+t6;]o}͗zxW EÊ$ªS栂d]wߓ22/5^BrB!sG)XHk5 \{OӼӈl|,B47jSY8T@V3FME@DB,LZHB< nuM-?~0b-0DE 1heBcH2G%FA0[2i<6=?Xj. !H1 Gz;%A>6$hf^~ß7L >[_ϝz;_\V[d.Zqzd V= 3 h@AH-rz#6#C>!1A>ӎZ 69b\Th ŢnAU.9(%`Q-i*\bQ_U ^l-3 8Hh *ZUԀJdl!PRO>ATޱGVUN X:!8=VI-LR5Eki@LթiՑ 艫f`A&zC6?'o%&xC!!xr^m`d[yu҈Sn6ڪffQvƆ841`b8O;x.]Yd#k d}}5;{ر맦C3RםkԒ['БÇ;5t9k3i$[Vn$%DV)±,GgQ8QUfmZ<(#c-kxx%`X$cQVYAP^ص%/@Z?Z9/o (pD8#Dd`PC O Ld )Hր]}J'(`e3[ѹ+^Z[4240Z߲:Ҝ$Hnxdz LݵgǦ:PUNcW#yoկx~ )6iV:fӨ ϩb5~9 F;͖~sLj96#H-f"aTijLLr5fն.^4oVR ,;2 RDKFI9WR+=@ ]?B]'}xpI(a)m=2&yKY)3 Ȫ|dv $E8*`]bv ˫ l]bsQl57Q #HU EFQȘ;w~ks ln֌ BD,`ܙ Qc{۲N Wn5Lì;90Yت)pe>0&Ls:ҡp5^9=hRuDX/ޱ b؊ZjYV9㵂´0XJ٥YgVH2zo5`3GD~K763RlV xvEn='voX]8vʥkK{CvWZ[MCJH`TK+N?@92x{{(;V8N:ݡ;[~S%ۯv6kiiwib*_v(NyŃKo bI`tOa'%pH" Rk]QnHS̊(NUmǥHza H%(Qt&X:хFJ%bg@NꝐ7m %QWbDDޢ!c(3Ԙ!75Asbh"7K6h6&iUU[ZEtyNjลv(R"HD 0lدmvr7#\oub`!QQLp۝%Z9=)aLnyh`s 56^5A`=(\(GƓKKkwϟҗ_3?7W6' Õե\xUD~:qZ贗űW+cx{gaaL[xj&nV(rOvrQ3gq[i`1VVXŃ8 {/ (EZgju+E=zQDXXUb`QX)kS:gI)MN8fNY~`}@g GtnLm܏zU3ŽXp4x*xv8D{RvM*CHK6aRs-"sgw_z==EiTaUiK"#w3a/ݘLw͟^JmIgV:r3~Wknne~*t} s+sd#ĘFt=WN2Zd5D()DbE͝4+\IGA^/JT"UgVTm9Qr`)nYyJ+XlԄʿ%aF@PsOiq6 ^yRFdՌR6ԐUB@,Jn!: P'T;j'+D`':A@@BhZ5hVcN6B MRMqTZII!>s13wU؃ `+̹W^{(Ny&;Bf62DX<0H3id#P:UlPN(}S?ʭW/_O>@ׯ~OOufN;}wgSâ(>Oi(?'[P_q`S8ϔu+5 A1Z몪ăNfƀDEXgl7u a$wI):w5Xk"̂ǩ1UC{ EgG(7c-vpVgRz r TQYC,,NqZǑ! :g1gl7o_W~.\۽ Ͻ}q,' ro:Cc^L}fɩ)+CMG:[X9̩F{F;xc/$rl vbuE\/@tOftP78ҨʢwDLi ii:BϪ1Sc؍N9riZ@2%I}j(U|W3(+Eb F* QoaBD #`R ilo`5Sϝ?spJc@c8-P@5 E¡V)DjM KQhf< Q[Ve7,hDTgW[x4SaIk1-##{UǵFh<>tG:Ai9@ύe7./E!zOkzVDg(KFj⻾ǿg .:?9TQ3ϭ ;)TΑ콈w`p{ΚJϼ;W`{OO}6Y( 26#tD۪d ]mXpλ_AO={_&f{f`/iy"|jIHǀ@HH$L.ǺBJYVJkG(,8O,7b)Xʃ_Ζ{Z)T+ˇJ,2⤫8Vqmv{vO Rp1 )IQ쁷hruU]4F3i|~_]=^z:#Sj<>@*Ң}ǶOtx*LJ[/]kxzs/ȃw/|u׋N [C/"oH+}`PW]i5-4!3JKH"{B#xzy;lSWn`:swu[w,AEʐ>mm(8&[V1d yURQ &TEb!RJ%:""+";c? Qh&谥[ʾm0|JG ob$ͱ !iVpLGVoE6 ƖsB/> U 4Vqf6uN9ZQs{IWz1O11auzkǕB"RDwY+\틲@g zQ+Y[uml1eY`l)c,ieU&0:ɓOc<"7aDZ[k8xrW8P aV)J~{?ɒ8GG~~w~{Ʒefn65pNkzCI1R+/weܚ7+.G>"<{BLpצNαus71u=C$k-`.J{]Y7wXk1Xt:)3hRq8PžtVV޵׮rPV)20CG :Dk9!DYeiflw~v^ֳj4uͼLfY'}7лc?tϏV?鿲@TYRē?iEiKf6wѳo:e ?ۙ% :ʍIO U ʨ=#FҺjyMʩT^{!Rlj4>{NmEO$"{_'N9@9ݿWzmy9^L{eu]lpx(M]NӚkgBYg ۍ[^XW+'YtʃgD Km.BMmCklԉR-^ \7R"H & 9E^("{:*KN? f (ܲ"p'+pEQW:$~\ĀY$K[k} BH׷fMKOE[^/Y~Ҥ|{tg߸>'w_/_dpgP AK 0tJ)ͳ~F&la9j6= v:tfk5JNst6wN)nޛ|`P|5ke?ɤì3LkO[Wo/vw=~^N+" >(ow6dvTFiEy:eYCS:l09nT)*'{ɏ_"kiZX׵s Ii V9fQJ` yd 4{`P{B B?]'Niu"F$HukP 96c¼zi i Ÿ-r״&-69%EQp-na}2o2c I(J`(p`g6H;:;acP0ӭ/4Z,Ic0tOΡB"wx;u_RV!x^2.jR_?gז{iϲђ$5\u=RÀD3{V $wQuPx k4E\H:4g.Aʋ&Ze?#jV}?gղnkWuN#vN)͞Zq[;=.Xsͳ'T >I @-gfPUAgׯ_;}jڵ2 N)5D&f񞅃39Hб"?foZqu}GT]yyȻ34K7WKWhwoo\t7no~+_uy܋嵕4nv^|ʚR<3.,.~+_|nӏ4l==Z=pr9EH6E'ɻ%h0azw`Ics4b ZrDq6.829iۏyi?CC"v 8]js`{=n2k""MYjqjӯvY^Z!4 H(vh@~P9]LlI7-߼C~zŋ/7ʢ^_-vG XUvqi{|[۶VN?q[{ V"&ޑ>џR4HWn7k=,drxskƕiny*Yy!DJ^\])'{Nuzډި!pOfl#D sNr:, =9 F`p>RH'Fmgh{Tf5/0# ̑PWilATt~|cӯ~k/._=q+slж#kNU!&*G't ^-ߴ#j>mM6@JۄCK$64[m?o+DQ"2d[8hN0̥ &OPO'_zNEF?JY.~=YN'z Hy>""I(@9wm_Q6)lŖ(BM:\|1ٗjv0y*s/[Qʛ(J[ϽC*Br֦h;  U~z0H$EltR EF`wnnwo3(NR] IDATw~w;uqX^Zy.8vfA%]Q |E#JQ̆{`X[Yzo.]xʇg_?x޻Ai$Eng.B3 knYw(CR fǤTR 8S./ F*J3#Bv8uDĘ% ;}AVb :l5/Dd Q SMsDcK^ QX!!+T&+Enނ/Wz&Q,⎹yѴ_ 2 $rG'^󏛻4JYL? *9PMc!C$1Յo[y'Ȏ}J@AfD%h,!Dc' o؟`6sk[\XIҪHUY$S*1u""q)<*f}#ɡe**bD!H\9NZ'N[d/|rZ}w߇ZދKZ-TYtׁGDfv΅;(*g*cq3ZAZ338Ͽx 7u7qBXx:_~J c/(&n!{-6Ek/׿𻕕;$ʫF˟{0w[, c,IC4<krO--3ooo p4c~TeM[׭1"$IӍ>wL^̨nfkk^( *Rq `=AVbv)g..oL6T|/=Ь8(w'HTf=<8ظҫ/{yꩧx$[` 2cgo$CNءx Hk3*~R3,vE7[*Nc?,QYt꼡;nYuDc:v"-G܄ǚ`B Mi!3hǑ&c@2s$9:n<;/NZڜenffY "զ pLlB8",XBN.i;gmmsZW9묱={! {FQc+(γBEHQG*q(ґt%qCIBCu:k"儔T[xf _׺q7*S+҃0jL(I D ":g1?w7&^]]? ~{?k_szky}'M=ޛ {s_8<;[IIpWD9$RIxl o cH֚ZVJEq Ν 5*̤^ 4o7Vޖw"EUN$X V=)tv\̺8bRHPbҫĹ8Cn7᪪l;?+rz[[W$+ dr:C@tEY?jM{Ӽ '̰]]#𹅁EqQ&A,BPǘv̡=] UWRbSk],>H FQ|ʟ~G}W\옲C[t"k*8yl0y.Ζ\gb1(URުj/OujaVVpP*aYc>2(oBm]9ǡZ3Qi՞ At@({~}sakV㲯,^9aĘ.̫*˜uHEҚT i EYL]{$RQԦͦ55%T $J!gB LG{L8WTFj Y^Qq}MZk,HsVr?^ 7vmQ)^^^=XSݓ$/fQ.?G<ĵM[Y㙭\|,.B@Ʃ9a}<ǑaEJPbb ET}tȍXZ&=0Ӫ4ACe@aKʷ\$0f(9<=gcL" # 8B}M!e1a`SJ ǘ$[Ah`@`˷:^ 7sلBݙ3ib@9 SC\Unݸz#HFBM D,)٢H(]s-c kA6Jų|s)[>=/ZP>0s/\[_]T:'ro=zadKVJ)2!_;kk"Q޲2e/(F9 )p`P yi6V* gwZRfIv흍ⵛOɲ,$vwwwo=pcv5+>n_VDx$$ޖS%,UYCP,(iP(DD*\ Qٓ{ɴ]uLD#wtT5KD.H½qdiyeڒz:%U`otҤbTƅuj+Az> ?$?0/=(M  CF6 "JR4B@B@RHE,قx+" "ue!XVꉕ^{=?e{ٝ۱NYS#?+Ő|w?zz1QCjGn5DDEIͺg"Y8,(CߐUÐ9>BS 5) 8hs[P#̱J϶8F@3! B7nD<9ZUnoE`=%ݝdH _W @벀1l@T6T8hxD9O; %,?ο5A! IwQD@Iv4= j3?qSuݙՍ0UR?§|:~ ĠQ9DE\혜D x^}c֠0d I9WeBO&EY`wڬ(o\z2K'y@e}^o;Oj&+*9波VXwtyyx^sމ3@,u8L&HJk-![9D;jD['PTsς2O@8M˛{4Y{yx/[;{`8֨:q::u{>c/W:H# 4kVFBDD :DB * ž6'DiefYaeMEťSi(p~ _t_joq-iEap/̽H""BJ! za ,N F+N; V( " CO (o5ƲqcnifD9h(䜆OCCHw~R38!:pu_OfF]ӸBbgͽk=c$ "7"2 /APѱ᡹6p$6'G[9%(@pSoxӡpmex;{{6X AbuJ')S/|'g\>xe$^KvЃ8m928=C2Xׯl{C_lJd,8XC5TGUŬ.48bfV.%mQL;_)S%K ƻ<;vzCIEA6sւں^O+U접m4@fnl^E!wӋ ΟrkxAD?qxӧ?4ܙ}?*eQÙxv=0? *bOBRa9Afv@L 7BtyUt{N6X#(0ST<̊)yy7Q'xks8\ :8%;BZ^XHҨ(+H!gY[pf߲"Ex$$7ndToi[r im6BE )}+ h]h&Zurfx$ ,21= d̹&o~togfoYTcƏXvi~iW4Zb #H06i~bEaDA_NM K3# rFЖC޳( ^"Rigґjqqq#rfmYf.sH#4a00(b'Fdӵ/ze'3q'li _y{{F/64˲,I,sk,qZ1Ni6;vKÍ_)eV@,KPqvt=Zk}qqA{KD9VM!(70ցY<;yB|[[nLw\4;EvX(fbb9,r%/^XE4x& O>)ݥHIU}gNX8E{[Ue^U]u=$YoeCE2˲vniyUDvv7b8 SYF Tؒ"1H/uìƋKybHdaaygZGq6+|Dx9ˣp+M0tbUu&2}];A{ˎc:i6N "v"!M)lF#Ye^FBT0W㰗R/mbKo6Es~:_j8"ȂN·åvqu_I=lW 2$=f֬v)#8֎i Mo}KA 8&ۚtO-^7 `!9Z9GAm0X[t fSmn`ӊ2 ;cSP׮sSjUV h4i5mnޜl!f^]4'^P:`H>qulgi9aM5w9~w`00 $QK*ʉX.џ(UTq9?(\ĎbVJ K) 0r>;d0U.r`fܹs>+e>Ą8u\JLHTUe*t6VZJ۶Imm~~wj ٜKe~ڕѢU2ڨ^WX3$ȝ*zjFjʈy3fjiV#'{UCBݍǪ޵77U'WĢb& _pι߻Q}+0Uqf \DT7&6;J&㺞AQ`yT43mݰw=-bSO͍w /yBǾkPwE{;ˢLWwNqYL)alILChE-/VE3Mhфw?9sɓT"Ǵ=@T m!W<ĘwI0F#f@rgd찰̗58LHS<;#/)]wnes-u A'd9HRL4 b"{g6 -+ ,er !/l9^c|xL YnV.Ԏ|tFF 4Y/ B8% F4o h=wu ![S|I,޾$~Jh^{{ o|ʻ=T0Q9{_{V[Aj+h\ |єjS\ FjU!rޠ:)$FSbbis/#ݽqǚ7jFOȍeQ$Ib eXT@0GdVS;"$5QRT | ,5CSw !Q>rQP*_ƥK?/_z`bdGthRwD$6 68,+^(CJ0}hnuEqɵýK%\᥈H \ye79% GG5#z>WD[U  Jo!e1YH{z}'_ziw>xxAEE2*<1"d@3t92!$iaC`ؑ័ : dJ]&!P0 (Cv`-Vcӄf>|^4i$BDVѶmBhi+ό+?|j>F+B;Dq]T"(:zn2@d53n3D;Z:VI f:m 9/G Լ q )*vو`HhQCfV. Pq>uH(4O=f osTw#0W;?ٗge,'w7Fwmm[ΟCĀ} 3Râ1R]yrL1F3U3rf@ȭ ׯ({8B;?B d΃ۿO?SFAa kNڄ"-+qҐUTAю, ^PfQI jJ)[7s%QzD1" O;"D.V''k~IѾ#RB7fF`?uN`Ms&r1;fʗ 9ӰGTRjwoQVjZEC\CŔQ'^AA IDAT͛>k7\6uG|$ ^S_r#4bQe1 A5SǙiVsz߻q'~O}iqT8'E B # *d2n@eFa!hWƻhd-Q^,|фEh- W/Ԕ*[I< a&i`<b:{e$a݄n4VC @0Ysx165,W,ܓZ(; -uZeD%y fK%%Yx恺iI:0+2YKTd6ɺd!sү/:*fa.bȇI ;hS!%RWtmKڙ֋kGyxHGG_1?$ \V Cۇ|=Uk׌/]8 RHc_!S*Z-k;3ih&!ԋy !(L䘝S3JhB+]3Rt{yU2@ cX*4L1&0AP;` @H 8mD sAheZA;2{naCPE>)BΪd";A=x7_?Ƚ_Ug T ++'9;@N9#k%#_V!3J1e&9RF(SXvpe:nllH^wG_#[~uo\)LtƁQ4eAͨtZQLNvn"jN?o|^}w}$3g 422~;")₀:@>P3}"6`$ŢIIi:M'L3;e"ׄ@O !bGeo еNChn޼y;#M1yX2z8 R#QmBl-"hr"Yf%KT0¥2؝"V3F, !!+Mʹ FȚ7\ʒ-Dr\2i:ꤚH{-ߙ;Bl)k~Z`Es%;3,k^,$ W9Ҥu4Rn}_ӛSb Zyo_%8qs|H>,$mufbG+{mw6ƳzVh>nF޹g}!t- Ĭ1^R[1$5dUR2>F@MՔGԁ)"YIDDuvȪ*O vK mC &-R׿m%HjfT HCgn`( }QATUU3 I!@#" $#?> +Vom ̈/機|7^ݽNZOɩC2U``j #XiBvB`*8k›(c_B%'H C%4 y CT@dDX7^H[+wiL=AA4G,U`i Ŭh(x7M&V3EwcG $ bQ"U*cIT @=7I s|SNh ,T/e n,Gd8@G @6N]( 3;KBb(CmFQf&&+#3AL=f\%f^ *avo 1$C壠hOIGyouimek2ܿiOeo^ Uʨ{bg;NO?C_yNfhp{ϔnm %Hix?뿲s4z d0.BjmRZVԏƯ՝T)5fӄg{9K)tv奇- A}g"IQ˝=̭%U#<&l]5tD-dy04L W{&y%غ *嫼\A u e=?SDCzE3kfDn<}jJ"VyK/=񜝾FGYxrT@Ebuk/>3)J,h``F`Ԃ t0+x㜀.J9go1"PyU43f„ɁB 4A`)(x!,!G`t)8f CHΐq]x"1F'j^~:!:@$#FQaTQ&ivlM!1EGCQb03@Q,#e5L5dy9@mq6ŢiH~O}GWn~KO;So{N>ƈ5i""Wz'?_1ĺY&Gt/bՕ&v~$dV/ GP.޻}hܙ2ij"Թ)hf`*Y$*"JbY߭ѦmET 83X&†* r`3Ĝdz)Uc 2$ )ju@ u!vp|5wqlpE0L g.-ڦ?trV{h|2 0y=3Ї>3=iJ +.Drls d'Yc|7?='_zqT W^Ylh,jfؓS~Uy$Sg!@DR|U 38Ua 2 QLwC ,;{,Ea@!9DFp{67L@3$v(DY0oX;?ߩCzB(R]'>x_R j1E"o4cbm1 *jĠSuĦ˺U0D@"S-ʕ+9ʢp3ϔxr} VE! IUAA! a>M ܿuE\xDdRcfFȤ][buc [zTTY8bwTnqXT~U^osub9|͇VGpB-Ex6.#*"%5HHlTT7xEr"ChI 2>GHӈ%FAsdDjp PEaUmH+BANĖѭ{.2'Zpg?r)>c55=ݰO%Ij%qLj@ޛHN$!LH̄18~)g٘S!wd 4:@^T=tm0oVz:40+d>L:dҸ1G$tQC*a̦O'iu yIvī=pi=]o]k{'w{}3v>O) Hoa <ɏ/$Փ$i1cӶY|>iS/b*i6GwKp?kΜ9y<~桋ׯzb`dC#4z`ɕU Tg1e(sXf# `* JTDC4]6ǩYR;Zu{m$Qtc2x_=nĬQHe?*וlĺ4M߅a4`RDC3CGs\9qLMD WРt>\UBӮG+mm?T0SE= w1uzr^YED͵M鰉L/ iѶmG, y;|sj0+ٷ_5}Y Mqq4a6ΧżmgfQ64mjж1$I `o_Ef?7w_y3NWucu=Kzpggɓ^ԷZ6IB\xt{ }{FW.¼^S F]A^rU A !2#]xO˯ߜńBK@бβ1[ܲ K,S1Y.{!hFUwmJDLv薣:b>VVϟ>ڥץ xbcgTWw^O,<'CwoUEs-]y bNQ}.WV3Ubt ,bX00`rٲ^/41hZZI gUYyVVc .ri,3AfŠK51t  g6ˣ* *L"L$S0U360@'/~R+Crm Qr`ysG?pk綑EVU,jD\([ LoeY-rn(Y>z+gyʧHF) -2]KE/N j`ܖzX1&\O*!cj8WeE;n"LoX6jc(2Xf$"s$ ߾޸Nͤ>g{N|hk,8u`5Xx_v8wƦ͢x-G)uDc)4)JAC_)~7x.^peqptqeZAU66K룻Οy?ߙ꯬}'~߾ ?؟.&#$`@fdVz5"T5$=^vgғ}v:HD Divӭe `x-ݺ]"o>b:^@-;v;.n['f@EۜކТ[NT[zꟽ]'N>}|sZL+ׯOANWWz̍|ϽJ^TysXX2ֆcZ=gN_׸3P ɕ ^%w=uv֕cD@3V)酪 pܠrvdY*"ݟh@\9P(وXՒd@ (fLs(yl6ïɮ?1L!El҂ayX~_W.|z&f\UsDJHH3:,`[;LrqH!C3Rs SZr:.d~Ȳo6?j9z@r>A񙁱ZJvrE&`$'lqA](1|X4JBAQMf;ܜ')looArBB:0 h ^//[٘lxo=^/Nqr]QM^{Zt$&64h<M"1iJiPЦ( *mh-p7Gdz7_}[*%`>׿{Os>~7n4u{_.\/> W}bԫm͗'p=`){Q-wS+~_zyCF`Z]a.?Ĭn?Y 9@Ms2. iڱR.AʡX)eԲu148\~x: d6Zׯ޹'o]B;b;'$z䜹;~@b,p݉O(w?%0G(j^$#3 &5A?P;Nj^m6̀ͅmhzv^I%\NsRw]A.&yr@&F$MIID34sIEF4, EQm9%FRT*CMr`;?{wNJ`v$ J*y Y@qA4W74$KI-L2.c-[95o!ځa i9/ѮًѬ8;yX0U1[q9?A\ beX~Uj.1P_ѸnbgnS*l&Bsxy&03#50P _0u{_yo?}l_ħ~?M7⍕Ν+Bae14EScE,,;8GLZ4*zjgL?:(bfIELt!*2%;O%B"@J$9kگ<#gxd**&RGq-e/V!u~@\{accʐ$4 @9&,`BD|A3! e&\s 9gT 1M1Qy0Sf*JT& <.̞H  BdQQ;F`d xf;]0`D{vR"S̘nH$*s;QF88sXD L?㮃u"JA4%  K7OwkiDhm}D5?iH Q%XتԆWnɬ\Z׾/XPQ n0I`lx52I5IJA3UsĠ ,b"\4^={}^ys;ttrU[L1|>m~G??SϾW>OloxpNãz:T&K%BAi7 IfJɹb4ԔX!3ۙß ]f|);r+Jڝ]Zdom *њew7k dv'bHa^{Rh\QdR02ƢK9 I6+e7p;k;Ft^r0ćx]_{}FqFmh Qϕhs܍1y̘Sx%aL"q_$SE Z3_F T?vL;'1Kwؕ!+鋟~:_~S`{+:+Y۴QLэwAJj wEἨ$"ֶ E]Z?--sLrqПzp)nw}[Ⱥ/i<>$2@4kԥ 9'3#+=v%{v8k'LTUQ(s!:&&G jPme0 <aV%3Pɗ$iFΧkDUf>UۘY3M!X43`fD@Đ)842%]6! "Q*!xiD$%1‚ D1uay^r=gV@,.UTdZc$v\29Em yH1(9 $fo*wI QLMM0""pίBjT-ryb mo ZJLT1*.fѢAH}L4b7=( "`u u7hu 67OM{!zA ij:]`}^q|#9E* o02hD(76wh8'Yh7)$9r ~R)˲F:qᑝE#& (9LE1FR2JL (Q+ l`jha tmW|JZ-&7Rb#M ʆc$ER""sوU=U-R6v5Лu>,ҭAf,ʱTwK̃ݧc5 "$4PGGG;;1e$o6Rj(z>wHjGs̤a#"3*WձT!?b oyw(m8Z] . JjB1AMIQc.aٗ۔SQ`iB4:XQWpYۛ[t>޻2"3@)Df{_* #ރcE=AKMhN}Ӂo4BYT}sB])%\YeY糩3zyB,=X 0ϸ$ Рmä^ uL+?UUY[iw!װs^TԒl 9b_õ. YxD 3cSL!yb"GdЄf*`A!jL NIiRgd Ё!!fJS(I H-Hjs uReBJʖmI4)?EI*L{ aI8UM*fٓ*C^$J0b 9]f1@PhI?b5is4@p!W5|l `څGoo5'v7M!M1[LTԒd"1b؃w?!޸vf1w~w]6xA'EJfwI^o!1 HΓw39Ϯ`=)DEDD4ĠH]"M 4A$ (<ښ}]oG6ᴞKF[ןܳo/{&jb)0v=X!i̼ hm uIn秹Cv&dDjFE((y`@j9%b!),'͖ Y{v5MNƖa^V;QS,T nyPRjIr2$VNŽL- WߞeK"gwe*  d8<>]߹pnc]=w~wswoοqOpofưvш0AGECN;!0r2SD%Rnպ%vT;KIٔ\şB9s ޡ;fyr:lN6Y-e67ٛfyW^yt~8;zᅗya[{`6sfT&Y(wN 0_d]r<_&+f(j=ѳrVVp8ݬKيixKTSWjye϶t'|>LJp3cr?d'w0GweF/IJ+LU (z]7OY.RYaBIX y [%,* sc<]_4mg(AsA:f[[[Gq5A_Q 8v66<{n@5u]M !fsg;}<ݭ .']~oroׯϒ╗gO7ikiX""P#bV FCRjI(8$BVlv8lu5!iYRd6Q,l RJ92*Waȩֵ>M)*6+3,h>ܘLG1r!.?4P%q5LW5VkGtZodK^ٻ;z0<6Y_tq4'k ΚLGGG=Xץ.(2dwg0ҥ<7ˣbhKDFjpw^xO_v!GY`M۶={]X( oy8[kwn{=TNIb WD n 2ln@L 1fT8['N'*xDR6riT1H! 3Q!b5 "aP!Rmdwh%Tu}V}0p=NwSeΗ[B<-:sN۬ZڔjV5Ez"g{ޘr1p sb~.s[;&͈ܴ'y}mgp l7|KէӫO=lb<:<\ټi,n"fvқ-")4_|ozmm2[4丳誺ߓ `0b .ώħZ5ybBER+`ROX*ޠ&vV? ȞEDEƈ-[vEf U L Q(2 L0#g@>+c)l)03yF!gw EA* frM;0S 0{bi$ D ĥȳVК!s1-l'badN\|J$b0v 5?OW|WѼt]znݫ._<k Ukƍ{CU#Myo xۦ T Km-g|aYpkskN5b,}a k<K/7ōdypuA LꍔzibU!e[4RW:E.,LD?tΖSgB1ƪ"rK)%"AM ALYՌy%NGrs)pvm3p=EeSn\ Ad+3lnnVa@UU!]`|t8sw,*䘶rK1`8*a"TUsQN47S1A:Pm}4Yͻ&cdf薢xəTWڎt۷n փ`6 vCn]6fRcBRwM!F"0ᨊRvXCg"ܜ-*4{LꥪPb0[1ƄŔw2f"gAzKbTZxYKcr+ (Ċ&EnFssoO˅7Ƞ߇iDp3gи(p+@AO3X}Ո6i.RᜩM}qo~ؑ'_n7^c{oCƭ){3X'0 PqRջt2Re9/RJ 1DBUכ06iʹi iPױblw?=?3[|֧>/_gp˛ N9k㦰.Rp8rFz;x8qaL7sk. ti:8J13*7&(@-Q_=tc//wFY^qccgmu5ԍsOWeVL-f0fMjb*ڎ^IBp':Or8u'z@,kԭX.ox/߻{7Ɓ)ܳX47cs0_{?~W?6@IDATi/V'|CO|ǔ >)`j]!5Q]p0a$'/u:_|$sS=NlPm „) s#wRjKnp.[oƽ<?ͭۃÙ`8狣Fc꽄uwXiKK#RbYMרgK`̄B?r2mFU']i@a bqw5fz8'x4;c1_/K3L&.z=!@t*Yc'?'+ꗞ}bXON&k?nb2 :_,ڔ_zŭMmԃG'x?/uD{{{߾;(kgsS>~ʕ'oߺ٥_}|cf^O`}YY)N!7#fv Vvvˣy6Km uX V )3Qvkز0wX 4_,f)$Wfa潽ckHDʑ|R,gY,ND]>paj{~_umZ[SO]y7oAR֤*q ׾/ϟ|O{h ELd!||+I]m߿3_,86m/^ڟ/Va\c(snޘpf^1W raUsId͛esY/)^0\l)1sUUtfKeU"Xepf1F@zTQ9FY|b,邈޼_+J%,LF_sd.7mwppvM62ڥKF_{'kuU]L5̏.>x8oTzځg羸lgۇQ r ,y;-  Z4mqB}ߝ nm|@8C̛e܃]z9f]˶S 1H:B*!3-ZwT.yGΙpuV"+:"Z9ҞY|,ũCz47ٮ}7o _x lqt8V4ARȕD{G7dR@Vq5![wnOƓ/[o ʕBm53uX$&JJ7޺qxx4OBżMG`I$9NI,:RdLM - 0d]_wjR$eY*JJh*̅ QB1&%S˩sbf6Sn\>t p,%βY6^l fn4?`ccc07w7wo5SO۶R- f$=ӡ߮d6766~^6kV1:Pp853xS4꺸"-Ky$IF΍~V&xi֑*G1;#[L9v-TBو ܣb "j{;8SH >3;wk9 4elHUU1BDbi lLDdf"FԝeY9_hR jyT *g8;KW(H]*m0 E$,s׶V!Hcesz7c׭1̘8BJ0&c`Ae?_Ժ}9;"j Ke罽i gv2:ϋ}Y.`3]VROШЄPVjkgisMi8QWߓA{bg`)ӻSN.mGq}۪(8O 6Mi"V9 mG!p{}DM*$wYŧ(βY| Z ГL:"8-'?4ytV* ?ܻ0UdA'kG|3ݰ:ԉxwCΒY|J,G 7K6* #yZ;ىtxo>rT+l_7>jv2<򂏦wx$glH1(G9r̊C=V?8ꨣJR\ظqGy$}+Vl޼]TOӏ=e]MeժUgFq뭷j5.\X,?o}[7p9㷾'pB@9ȑ#3w=q}ѫW^t 7|K/mjժ].C{W^׿lٲ+bÆ 78vto ছnw_W愞#GpϞ]w]Z;oݻw?_#kڵp׺V\Y׷lNIo\zzz#QSry;qW^T*y;w־u;ㆆ/_H?OEdҥr䄞#G?/-^>"X-_Rp^&&&V^=>>^Vƚip ===7x~ׯ]X,~~eٟwW^s5coh/B9r*R*|Wn$1Tkm7|V`sȑk;! ~z9r@k9rAN9rAN9rȑ#G9rȑ#G9rȑ#G9rȑ#G9rȑ#G9rȑ#G9rȑ#G9rȑ#G9rȑ#G9rȑ#G[0WWJYkGFFUozӛ1u’%K[k^իWoݺu?YO)/G_\+a?-^1z뭛7ov__'tmftN;+V(1###_vڱdɒZ,9眓$Rj۶m]]]"RV?SFFF~s;1Ƭ^Ν$mN;쳵Dm۶[n38裟x9ȷ}aMoz3n;s?'_!.kq]vپN{Ǿ`ۿ[O.\oFD"f͚;NDFFFfnݺ 6z===IG)vZćW4\r%o~ED3|ɇz;2gΜ:c={r!/2-SO姞zk_ڥK"iW>묳.:/޹s+_}r<xVp뭷z뭯~z'?b "ꪫ.ґ{/}{Gʕ+?-Z( ÎeO^ϝRn={֮]C]~哓gy5\swi|T*۷oG_W ޽{կs97te]Ν;͛O|ׯ?s*믺*ð^xwyI'Oc>c7W}{ڵk>#< .+>`D?e˖k?э7x7Ο?ݺuvXw~Iq|SN}S?Ac̿ۿmذaݺu֭;nF+-[y޻~Dh4>}]dIGG|p$_~>x38cܹ^z]`۶mg/_~'^y啮_W7? _vip5,X K.7_W-wyٲewޥ|M7}_\nݗ}{G3dzB!Ù'tҪU暁m{.Rtw{r+_W_}'*|/˿o=܅ "7==c?Ͽ_p^zg}.\>099r Oԧ>qgFQ|栃Zbw}yŋAb ?|w|_>bŊjphS(PJ~`…r "߰aG]*z{{<̫=kfdd3׿'Y9J)tww_uU^{~.xy=ٸq+1U#8o|c__UW]5>>~7o~[䧢(bowunٲ_bEWv<~'Zke9Q*cݱ{ZA4 N.Yλ b bIرǃ hײ$xy38P(N8?qVs&IBD??7|?N8y.[nӟhoK~c[ome˖޽{]aϟ>;]+GDDt^xYge…DN( DxGV*oq׭K 5k/}yQGYku]wˉ3~ W_Nڕ Wy'|VzmZk J摥KNNN>裝GgϞ˿z;Q*]?O}}}7nLKYk׮}^~˗>z[c9y#ro?3կo}͚o~k_{_'t=hhhh{VnٸqzYTw,YX,{RڳgϮ]FFFժST&!n߾}ttthhhT*z~)Jgxr<00 "[n[o^bX.cm7͛700֭;S? a$||||ll=y)""A寸袋򖷬^o}wE)ڟ/7 ]w]wl{99Ea#o۶裏qvڴiS[l衇صkף>:00000e˖;wFQ~?CCCs>vqǕ}sCCC۷o߾}qƍJ+W{Gk}a5twoݺ?;gΜe˖}ݼy5khѢb{87mڴy|pӦMQmذapp𨣎/޽{7l0>>C=m۶U{ pf$Iu;vDQÏ͛7m444Cmp_|LXo~sGye766ʓ$ 7ܰdɒuw}[l9xo|;w\fMwlZrYgugy]]]7nܶm֭[]ƘcǎիW+w>cw=99#0-[6mڴs RZ)JկvOz!f^reGGGwwg9ȑOgq׾?.ȟ.;9rxA`.J/G9rȑ#G9rȑ#G9rȑ#G9rȑ#G9rȑ#G9rȑ# _/hnut x EU3ßәZ1(ymgx'Dz)bam==CZl3xLϸH^î,cZ$u`_[I8';e{~F-L{d^_{xyӢM?3ul*\[1Y͑IzZ-wYȊϩgS<>O=r¬x~ءOY=2v]j7M} d\dz|;P!9(<18cpL;;"V) S IDbٶXi= -i gsgl%a8(f-"pYJV8H$!B@ p)% )#aE#PFw 1a8R"H%$:H@IDHHDmT-J{miV׫a-$Rav!,h$q QR{~$3<, `5Sw"VA=\*+"=_{J( @Ψ` 57-f M=gFkS42$3>qr 2㜙 χLmb`J=*Km%:$U쁢 `FX|/{&IlM\ RagwufM^=) /7gGG'ŀR`Ӧ>DHTҞwwVʥ7k9"WbQ`9 #d`Je ѠtpF f7/iP`2LSϓVE2 IDATQSY־v/:'c HDk%1eBuF {kP/ if "A7(B(E]2@V*I&RDȝ̖luvRA"GJ)&) DԀHRlC I:g֘$}Cљ. 7́1K+͛mWz/)t:,}Ђ^{vLp_"soYjIH,KXAMQ@k"I-T.0 É ύJEaŻG%:po]#ŽIoo(߳yŠ_ OֈYO Rl|HA,&ܞV8S:`j111YlZø&5qbDiLPDHik0!T6BܒyڅMJwa_"y~Q(yDAiOG&&AnaNUV3E w(VW1&A&CNDORZi[dNXtqrɠ؄@)<$ ( Bd,bI1S6jYE[/2c90 U 0nv^ InI'3d@TC@ab%*bC1+dډX CVט2"ZB&$w-)zj- OAҰ ,8Bo~eK#Cqmbr|\)PH1؎Jyr9aq@91A NY(k5ĞcR("RXpiww;m1H~*审;w_Padb@/~ݻ?V&Im(ZQ4qtbڨwwudu:wBDkdurZGq {fY0;%%F@t|[4/Xwn%*rx!VZ`D~V$AWn2z"nO4#%'ĀQ Xh͈.*Z#ZsBR .(s>XaN"IuESE݌y*'IOHۺU 4Oy>A;iЋ mȇX&TQh 66̞<#liokꆭ0 lFOyLO]fZ +?HfV̚5'".O9@Zb9K'%(ъ_MIXiIj,2[c (g[kE\ 30caY؇N{ *qHM)DJ 4|I;:Z֜'31"FTKL-Nq ~iDȾzNDAN%f9s Ocu*%K=+j\ZPLAT(J[W|"R_aP,PV .x"MZ<`0rWHQOHALٻљbprŅmC{FI Jdl#+'_0 ?&k` !aN ZTsa (َ8RayNAjHhAA!|Y+}۾ 5]Ow+ DaN]whszIl'Z2$JR)!PQŨtZ1..Lo{τM!lvh{ f^B@snfȺlIeBZNBT+,]dxbd}-cl@LNV%NbD|_qGI D~{S&$iC$Cf6x ҚT]VnBc z]ꉣp'vCݦ}`uܾZ9y~T|OZ|/]QYB'OܱS5bXЦ;vUFRJbi!;TRBw0*Ւ_YZk KX@y}.T*JbP  IO۷-]>Nv QQd&$#ЭltA4E\bɭo""dڴk.iF4vD,%[iJ0Aqt x }=dtaaM6i"CKP E%Ynb(7X^I!`E HBQb 0cpVt~2,NW'Sy.kx?`ZfӻZTlV=4ے }?;.l4~wC۞\v+Wh<$2a4FjTǠ: Q b 6e8㴹vm׊#dAR :]pH)*EF /&q8;찱ñuc $s{o{t=jo1o^5/>]Wbb8nJ 0H2f’8R;mѾV\;G9ݚHD)Qnw.&qВ%ӁxU(.Z&̘n+#‚d}OZ)MCQ)BTN%Aa"("b\$C8FܭrcWb)r>9W̅0P2Ch9]M>-ψHJ)XMaڧ2)%К)1Xk,28S?$}/"2<5ݙݻw_HQM eЄ0@ A/ll0DBR,ؖ. y_ݝytyTUf?dVݧgg^JT1}NUfUVVd/"~aMӜM~C'''^_Nl_m, GhW?}Q!dz;qTx_ UU9R. bD Pi LMZÊWݧ 1BHZX4x66u]7u!xcc}0Lgg&!Dxm4.kxa=?7޿w ^1jQѨr-H(բZ y2]]Wϝ9׺LHN@ s`,(}uΥ`}T "K-%M%1`_B!#.%$ Qwnt I IDAT2 Mb-BqIbC|4p1x۽^O\Oe e >JI.w>SÓϖ1:a[ 8 f2gM HH SDI1!w m$RS)Y03ES5K¼MۘH& @!q!0Yi/Uylg5ʹ[A,A3- \nc!Ͻ 5z+ɶu.kYl$O5-ѓÝW=V /=sT] mɥl=q\V݂a3WE7˿oW#ƪ"\`oov ٹAXm g$ ʲnP`B s(4Χڦir (_ :OWnm9[g+W?;<82U'zއۿy;7?7_ჿ:sgr,BljrM[ӶmB~%33&*"-eSI4Х;QJD6."EQDr)$2P3і/?5U5*aYBH}85$ϒ5̔uZ@f9i%1X&ѳ}6MӶm۶fhۀN̫HUcTxfҹ@g;*R+_Eu.~si_K$U]lBSHi4 f&;aNqI(gZc}Ps"#/00k|^VP+J;f!&e*9 >S^?FdT&}"8[<_epy _`5&o En^/ZsNQy**MWkHcGMSSFiuYmYf0EcEՙY@Ypf_i/<82^ZtGiu 5o{r5Nu4)[NM;ҺbHϻs^IX NG['+˗7jj8.+cr enLS\S4~4cd]Y)^%'D#`r} {3bB1"Id5F)1IhU#u6+u-O!miJυ-ڙct0{q*)F$W\舝9ᓇB]nt6e  I`KBM B:x1s)1y."⻨be)t"@洅sѳ[<4Ȉ :*84ԂcLcd(g]%D;z^a5P HX:[= k-M3C8d̢B۶1,;=v6VɗO!zmy{chh .fIui i!+_VNDzL7h_ghOfn|cc??Je(R$DG@&@ &"(hv:R:RaGG JcV&AG+^Ï۽^k@̗6{6cH^<rp[7nWo_tmtk t19 d9Q;'Od0rP:3'`"V]ٿzx8e m!  | &E$b~糋:fygҨ}U1~G*l\҆89e3|lU։j&3?D823#!IȮzVy7#[ŽX銙1BP&((D5Jz ֹEWms>2N?KtHҔ|ix[?+aus`t"BN?sZCOyw^}ݻkSX6P 5]$^# W ˒,*BNZL<϶A)<ȧP^',"LgmRWy8J7_K?~W֊&ͪ=|hcB&]U=6@7~Y3_ ˠ"vz{].j;gc̈ _~c<Ű*XL/S ["sl :NJaYj 3q{c$4CW# NVhf )")V;^3eTm&m+t;-r?V?-JecǞ}N}g+Hu,`+Ċ{7?>u.7󟠃GIW_?[_{Om\ã?j'S8AQ/ bd"T M4m]1jz>8sLH-Dy[@cD\l!W$f!rFO[n b2t-nwllp-rt L6=>?|<:9K}gJ4l쪯lO=sgW`PVaUbƤ+J Q"/)=o  m$$BքT81$1\.o$t<f)1%yeʑ0$UC'63[COYb'ati|L}'K32p<%bvb%7`ĆjG2K'w(w_`g~WԨܴ6SQ8S%yD,¢LuDBgMp]}%e9Tc:#4݂QFnæN l@猞[]Nɚ*4/m';iIW\-iT ,=3sΙW_|y;'$,EȓB dͨG{Z3 83!,.(*`M!)1٢ɒ=4AE6K%9cB;?:w=rV@O/⢝9gZ/־Hv-䢮Mյ#-}1QW/YMARΎCw⣣[ ׷vDCw?zC8)fTm!3"G!MHр],l,t>jĤ9ǎLm]d~Λ7n,j: ._?A'uD a o>K>zt_ڗ{嶙@S]G& `q)H;qȔ5u*3kDifd EG,ƨ1ZTfv9yk\LU/e1TeYpVH 1szRG sHK~JJ^DH!jL.1eYtzuo"O˵vo%+/lIvqy,sc]<2o2lvY=`}lE0+`.~]1P}~{w&4}񛯼z>.Z Œj CXAy 8F-0ۙsU\.0X,FJ1zĶ!RhS3nW3Q˗/iZWb m '˿W^6|ruk U!0ϘO0=2)o#Cj #מB:SwvrsmT,ڪzaF%/ VhL &)j/Y)u  Td;8>%.j@'55=23Kj\>8RQȻuuη:!;{O,;fQW9SB2^93H9; ml5/E8.X챫N Z)ғS -}w p' 1ϷOl˓~q,$'uF g=<7/omo=sO^1Bc^@"9oGbD1Fl6Րm+S"=,UH)o²ECmW򼳷OET0dkscH)T&u;6'}ڃGFؽ~uA *[*(uFS(Ĩ(E(9f9q(jP5Eἴ6wwDS01 F5Nŋskei$Vtz~n-'I`.K@Ӕ gV%f$BC_ٖ֙E)}ݧˇ}z<+ E1\ rΉ40/+X*BH3)A@|>vE"@W.V$ U"< _z%G''`p2u5FИ F E(k1lmo]{{ [ 0TV1UuDB16Mt("I"Q:L Su5,I9BdЅ'_WKDV^U9YӉ%JKuFr։| K8j`E^|wxs$H3o-yҒ\KƑuu@2 FlYX?LH!D +t*`pJθ0aYd`!s-=mP>yZ%L{%}mǬs4Ĵ&}LI0Jr\3Z&Ls,DL=Cf,ڂ!5&\0[-W>䵷yt2./_ޏ~"%m%,KIAi6wNw{T#)(+G>ݽwoz|U ̌ȉ`ȷ!w^\цg>ҳ?ĵU9/mümm{gٿ>Q47tňerέ/llm=[齻o_WW߅ "ް$r,4=#&5WNJJw7VUS0¥w9 4eeJV#Msӆټu[CA fQAڂ%;o'YS GByUpFo1ERWS!"(c`vG9\:NbKf8/nI&)غx,j Rt|Χ([`LLd~" P#"JsY 31ZS/){H 32KD4uv&bTL&)zG،,ZL?Yz,K7j,v̋>f S=B?94ES<݂']8hb ɘKI/M0a)enBJ_wF&Ŕe$fՊ?d3IŹ(!Քj/_٘M}_|Kޭ÷'LJf s`~`Zha<2pЮ}!&r08냪)F<g]Z3O&SfRDi0 իO /Gb6Lޘ+W\ylv0&qP.K39z[߹uw/+| - 28Y>`a)@6d!*ZѤ+ٚNqcVl,LUDFj4i=u]71Ƣ\(ؑ`LB$?8KoEqT%锖bv5<SO' xz]QeXǞqBQ+kqyrY~AJ-@w=u"i!ŏ],n=>_Y8vLĉs".Rk=]c8_ Ͽ])moMP}\Ob, #ͪM*S_dK ĠO]߿2Ϳ޹uW_a5_T ;99!4kgjlM1k*'Ê=vA5^ݏoL&Na-rKV KLVf)ej۶k@!\!9NՂ#ym]GbJ.q5wx`FõjX?_hs4ѱ'0bi [wr&hZD31VTʲ(;*|ቋ(@):MstSNe:tBEAFbKLqBbJId„Nm]plՇvjy@*H(D)jycH9cĜ9]Vfvag/`=:ɶVhIJG1udybq9ΘZRi+LUG}&0T\ɟXX]`λWn̆k8P^]ܖQ^r_a*JKebL ]a^@-'!6)(]$Ȟ ̖l<|[_;w|_+|w~ݞO=MBsb8O H5ԳB UHNY=ӄ/m'.#mPo'h pN;bv#M'1DCNi<n|p<5 IDAT ׷܀CfdTm JrɋJ~[[{xΥ̓܉ mh%$_zj5df$G9F!3h( jTtMDfλĢ1pBP^$M'd24Ǽqԕܑh.Þg! c*SVF8bisZzI,Z{ 2ysa_|FMt 狄  qFVX5RB%:Z3(΁"vgJ%@Lif8]7);S}\fCTwBL=Q%]=I$BC[ I3ғs\ڇ`VXݯ,zTENUhήvfk[V;*[)v2K(dnc; !XwUYȖrAm'8rRVa43 8Іqi[𗛶EɥkѾkS ! )tüF5'@`dE˲rJüq ЈPe3R25Lg DΌ]' 8kb3e@c ҨM&hUbmcs^{ :99hD[NE{U $Dmw>k,, e w|ݽ+ROPXZ$Uɔlڶ͒AY lhZBazqL\hhffF4#"fu=h&ē,jfV541Nx:6`4Wd2~4&diEjǜ=tuhט삟S0OfJ?!ifɴDۓFOA̅+r= ջK:= m 2l{0ZN+BV 4NPNg/ % zFE' 0/">u|VSݍ>!ɞr7n кEEt[Ys.)P׵jة"T*CY9[US+96=Eo}h"Јƭ:QrŝYsRМ̢2Dh) >哨Q@"%=Ruם]+Lu]s+FYpMكVbPPb]̥YDDuӘ&vzP*n=JafGvt w[аV:҂)J;t.d֢8|l6M kRk,a* qv \035"tBYAዪД]H6<Ux?{GUzxhү}p׿`!{k[09K (đAh6m66F UI!DIQ!ADD"ڕf;ifcgiUwE1lV׍"f'lk}zkd((ES Izi%۳O]^ܺ{iEdEDuG"=3*H)`f!Yb݊Q d&53%OV&EqSԺ-"F`-_\mզE uK-|bjnI]ң D'9Ηe1,[F~@sdX}m~RM=Os͒{ڶ+NCbwSl Ő 0ͪGf̸maEu:Lɓ-B`K/g׀s j X8|ttaQ 77+?_c4U"A3a&.b<43mlEJ_ ^PEAg550S2 4甥pNDpm4~}w<mm̃Wm?|t/09^x/~Yt4F[t;. /{=kg_֥{3/< p"'v^ibN ;{"yvi_5LՒ;WX iP^lfl69rmT][,4~JӰ6ZWG5Dւq-WxfX'h}=[tC4S|Pω8:J4'dG? >z1_/ov'|X/`r"JRsyXV- Lոm q[6LI3m?,p _y<]pkg3;_ĶƢK£krevwUE:wgw$9,A{n{N%9/n6ҧ̥i:'+EÇ>|wvyz2ytp̼N!/ 7L&b,ʊꗥLDHAstRӹdC!õj<2*p8 xoX:_hszG#䄎6[7v/67߻A8ƨo+Z_DEYs4^4OJN樺0m!o, 4M*s{cDsMJq2@Ӫ}47'X_؄ZY>d+D'hퟠ-FMx/ڗH@R59v5A@PĀAt~ABsNdYQTH h0y/jbTk.h1ZY(.mhC!&FRm5QeFfVUU]׉#Vld,}Eygm%tGRB\;G֒SeIfK(Bɶ(C-Ů\b=χK]~NCAH>DZ./X<n/|D:QpW _nÓT=9yAk SD:c1u7I`dK,y&mS0 ^8 !V66*LB&dٹV~o___Q1o_{{ň6/ovt4)\BpPDңf㇈J'ޕUXlv8DB PLd2RAD)4S׿X ۾deY7.ᣇ;k#":ܹw;o|~Rտ~n?xc>*֖eak}}G XU54*'&YQ `8:Kl$LXhYEQ8)}T5i' Y]ʪ֙2fc_QM 3f:3K A~_TC?y"R8nPNq+*XD_Eɍߍe*ÚT',H$6@}|.Y_S:4ED&"3 wsqNz $S>;I i3) pz ?7ܑQ,̃S9ߓFS5CϑmIITV`cccWnu? tbgUHyoOa$z~P)ZE:*9L[,BͭWjǣxR Why]߼oGK3aG|/)h8<~TUx:9?r›;WN:>>>9~xmچt46F.>|,Nې- :Y͕(׈,L s.fO2NRQ811ȋzIkD4 D,Z!PQ)UcҘ{ӭEYt0 lbȂ5`122j?9V' :/-Xƽ[SNIO7h2ѩ)[*]`F[Y7 ƹa%_^O/>i`9|)u;_.ř“lq%muK9虢 G6Q+o~xZ,(hTkI~v! 4Oykln_?f X+9n8|/VȣAV `Bl~fu,ޠdR@/E+8l5d2''߿^o_/WC?qz1ۛΎ|X䕍Quٳ+|"jt, ACsPMd$QbF2򥔷W8 !J> !dRmZD+WteZ @dDu]ybdHM]qTLf`gix#LX)6ϵ B VmM%:hd%&HQC Μ2qj4lF9qyD){){3Db;C h$K~XKjF|e=1(*de.9/O{Z /uܛ]E>u;(=`GN~o鄷=n~%]G.;? 0|.fjOSS0 PϜH԰7ڼvTbдmqP ֘sv]4, 3ea,%Jп[gF鶝>~IٶSsα٠Xf5q LD(ڶ-5Se&Ǣ2Lҹ-jt 9aKoKL\eY:( f\i{X[ @(#$YFnԩS>㐰eD"i%cLwͯkK \FDI@fus]ih7 Lz0bv&ePڕ0(c76vMoZ@0b#h`$hNשKx@FӨM=pmR"Gqdd?ԟHB0BhWM&`:Uqda'>hHն^9tx-q7x6"N^n'^[q @"sH PX>G='CƎNa6 1XHs`-:d0*"J1bN1 V!aLT;"D$ǎ<!u1US &|dTV`bXtέ hw$*#^}mo?9rZ0.;ohtރ9>u.-/-'6PϬ,Y2ܙe8<cR#-m!` Nfk?Ld+6.h !J aAV< 0bjf}`jwuS Fn?I" 'EF!$=k3[ 1Jj2F̩T`ŀ<Rm'6PhFB)R,R/ֹ xbhA9&kDCBRBvY*3K-!#:BVgD  +`Rn#1VU:yK@#@TUD# FP@ l5 N1 &W-ʅN P%iNi,&6#lBzAq+-7|70.UAIX1 O)mHd4!Ҽ} X쏫DCM\V55=}t S]00g~`8b@jj"()HS( Q<â\yʸ<Zٝ;wʲ@$3rx 7kaκ? z dԙזVc~<W `0ٽݽ`T˯K>;szy!2ޙLoox>Ź_xKx]=X0ED+N=}K330Pj\nsy}Q~J!ѧHM ̬"SQ91+v-dUPCMB0S|B0{\3s+WVq)!DkإD[[ Ko~" IrBW^?On\J3,{6q}p;oݿ~7h$"U(vD NK(8ȝ$ebݝ(dI\icOtiTaac~].o/w\xU~`ow~qqaRe¤ 1abEh`!`ya6N`NʲS6bR MCB#)`ANq)(8Z)(XmYYd)8IA.kjƈ7!F$&jlF߼^F!$Kflf"M'M$GHi Irxb-I>hLIM&K= Ly";NLMT!hoӱMr'%L70 Q SJ`[XaO5Z? 4y1}E0e& 3_ˀۻ7ߝb7VB`j`*RxT6tWx8(C3rѐ|¤j<8FF,w.˲,N1@ ®(I`XU*U_=$޺w1EED,A=$Dzp}H&*SpZc)sytu {Fs8'm\x. 5-פWVN|6*!DU DypMGJBj6.I(^dX㾪VR=M`i]1;vg#vss+ՠDwy;֝==@# >}f8έ[EB(PTA*E a,P J&K # K"rڸuYB&0 OM=f]ҤZ6Wc4bS5uy5TAPREhhɺ(Cj=Rkg.qWxnd=`uel\TՐ̐껨$ F T5E3={  ЏcvFehlTӐ۴M  u*Nz[77 QrlhFszl6ae=ftqĕD 2@ jh.=q2lzMOkBA-1@8v $*1h(R+6H}YVU%Q\*:|~4ij9ԛ5DDBjn'FfAAUl(j@(*B4T3n0cf*<`BB 17i nMh0-#hT!ԦS`%f5ɧW`* i׊/ 0(=1Mg>v`gw49+KSƀ"kO͈('8gFGLwɉjF =`Gyi3?Sk+&?GOkT 'CBK%E e9*Je̱Ffy׻u֫[o7{{{{wۙ A½w[G}Nkfg;[ݫWv|X4bh.,0nQ ~jc EQ*w~7 Fqr[͛ XOk,kSTLDVg]`x sKkO 3U1`3 oCX"[\`;yNN;Na&BR*E5uLb *VHgQf0^d'7 NdfS*I@1 c-S_xYC)Ͼ?{H\g|S}HHUc% !FU1 %}qmmg{fl}i2pC@;}ͥ/Ů>rƝN5(` i< <{liii}}ckg[Lr0l)2^DyX4QYh0vl?7)Ơ;׮:aiwʍ |ןY%cVȮq;;[9{N>V}~QI )1e(bdf]*"By׎:Dy"ZHqfV $tL[AI˔倚ۙH,kH ^3!#Պ4 omz,I5sj`CFGze&Ok̘d;LNcix%n}{}vnz)`S_LǬtS턠_MR1rDj酝pv&1q2pUIּQOaSN "Sjcdg3? +V)Z{?6"J*V U D  `& "<㯼ʭ[I1n}{Goܹs{ ݵՕdrڍS?pf[/]/ɩ=:L:KL$F g.@: Ne+ s7o?O޵kW]ʢ, BpoӱCDkȖ͌K-9HzY?u&v;vxqyݷ^+ntW疲N;z 7u|_]Zܼo{3 -ӭ6ND.:{fnf Ѩh'o2v.Xz(zVSj$(T[cJ6&Y$hqlTG%iTT,ojHDjH;g)w2 Ę3չ,H,K)+WM>!iأvF1Y).Y1rdΒT j\oA]e(:#G6Μ?8C2[7W"TŹ gώ]^~ڭ:}ԹseUY--.x|ouqT߾s7\Z8{vi|bg8ěΝ?szƍGN>}[oMcfZtIfz7urO^1ƨ55H !Y,郵fh)%e$2#US !L+PdZ !"YKIhCD̈ҟQ1:攷%24y\ M`E=1H! * \G hP]E?<!̓4Q攉15gLfkFVRyR.]-EK~231ɘQj[[c )f3N3TÍtk}4 d;֠trlfxHDRW 6BF`@ jFSk`3կ~OsX &;S;<쐨*Bj&iUXXX̰ww{g3 IDATspt:p;}Sy_~xᕏ={ޙgu]v纽~w`FmO[;z}ks \~jaayʣNK™~'/^Xg|S"~Q E rjwm1bIX )iLv\YhFhV#FfO( >db+;fNIjeED S]d.[8ʤƊ QN5!]B" -LY<#_z4Zs il|sYR9SbvOAmv-i"|zmmqiL#Z%`=DVUH, D avT[[kkk+++{{h{0Πtswn݋MQg3`R;WzZjNgyuuuy*ä<{tnqѧdv wz(p7Q4;V?e.rHNWC@3h$YuL"۷^~`SWO=sWN,={"_ϟ/Ϝ;uc9-^qhA* q3yw{se 1DdqY\ggT4gS ]N4='LTEBPJ51LDDDvZs]#EQ 8X9-0]wy3"HCgnX-ʐW0s#FL@c.%tAN 1iRc bZS+ydR #&=)a?PDMԢh:)f՚[y0kx3oMZUO$M @ L9}3$L7FJ0C81!;&)bd\qQbj $lj]A:#y=#H$NjfF.j{]e0K>Yu3QCT՚VSFPz7Qj (˜ᨌ14uBDl`TihW]ǣ`B S&E9v{챍+WCc,`4_rn&b1̡qFNq1*#iPf8Nlm"TePu|2Bl:uoxa7}"wN-I;g*t{}Nn?a(Ft#4P'ío/}G]60D"޹w|/Cux߽g{/<"MIcw* E LSa2޿}Zk߾qǟzP V&j4)@ #xDi6PQUa5C`DvE5%M↍?DX1hJhJI]Ԅ s Hir3v97v%=1XՈ9'*K)9`Etu˴$\d5! Xf)Z0 fb)2"]_XBccE5!)QZDa<)U50aTca' czfl Fb(JH FTy&H , h4`fo@31gdB`IGE@ Zm7{\*m1cTJN2I1V5;베իgB0< ZĶ暨AJ[0lv')ȓ?/%pI= D$2A}dsMV0TDTK<;<bOE_Z9hR_HT,\gnn.gf Y[ߺ`x_ӿ~_DsRʡ?'ʙѕ*Cer$ eE%hwwgoo0dْjpPl^`[wܾko]zʍ+W.9q:ƈABYUUY/8s.3rY&mE3gh{`4w/wswx~PyW? X8}_U #v.&%9nN~s[w?{ 1u;U'ИIJG 8:ɉz:R :() PB*L@6QB c3՘]C$1Cr)wH#cSj!Y͛#r$ÕO"-aCcb09vUeEtd!e42004TպơB$;2k<L- ET$XIA9i6dQA9n䡗u55*iM*j*6bȦ6XnhQBtH{e5aYTS?D-}qᏧEJ bna:;VߔP1 5% %S${{Bo`}n@ Pz=UU5BtEY@L4˗yxumm~~~O|'|*xbc0%I4X (D=SUaB (˫;E9 e%1t x^(&fpK!J?WL7nҭ@,ǥ,(Ͳή @"_aTXr}32zAcw{Ɵ<f ك?Is:tzxYR& +z孽փwz*hBDAAq޾z2z7nx_{{x/<}έ~ψ~-R,NFRgm 2O` 5R2MuF 45cRKV+hT3O@\@" E%H%> 9\fM[koxC_37 (a̜wr ApFi\5H _s5z[/:1,%j6%>]Կ)'XY?a4]"t5&i ѻAg_AL` ˅b66pH3>S P͡L-`( dIy6Ej]Su|F1dBҩߠ 1s)tpgUMi^FUHAԈU{/{4E#ίܾ֕+.:y⋏os$)җ5f׺>:ݾVckkׯ> CRD2$_7룃$LYBk=};|ݷ|.^z[i5&ByU 2&eCd0%F2565Z:v ؙJs9Nh3:صd7(hE縊f䡦E! xBd'Tk> 0T*GZO!TUUeRrWIA3(ctbuE(3e6YĄ,7`j2*"@E$!TEU(ܪ)Zĺսo論.&3vL\A U7%f)]{BID ]G+b]NPD[ ԌSa*2P1DbHNiikIV`u鴞D&(X-i6띫wGOU_ @P@N&oL|/>f~ȥGzOO__~~oاG?Pg? ,ff1t!/}|'|?[e+JQ<_^Z;QǁI%D4 D@\~j5; dtΗe`8sn@weQ33d{Q`<p`wބ q;Q`&5Se1β;7,#Ǯߥj-,L윴|_%KW\~@]`VA...{QTrog?oOOMƃ7oaukۺDPTS~o}m<7`z=zf&^]Z~'.}셨{bwZr۳Z0*f@a=NI33Aܤw\+!)+֍}d=h;Ϟ9RVDCٹΡ`D"SZ1Y#i ]S`&1!0N=(ȡ1(Q j1tkN}ޓZc Sf/uБK'%F r+[71 WgD05m.@>Q1 01ϐI RV_?X `0Do!p-"@xD(uFyѬi2H u̸d]hX n2''o\_k1Yв,ꗯ*Kړ?own [_`C`Ud|N2}>奥'|n޼O''o#HqpqcôSh+L"HwN;qh⹳{ݭuͲrT"y,Ve99fN7f@DY}˕Q1N`d1JYEU,/4E*v}n8rP}ͽhii ѪX\/G+ H5/Vy'TVgŹDg {<_r~>?/;y4 :O}򕕅?xw?KΩdOtfٳvwB鈫f*:I=Z/6 ±gt5D1Ar L՘ 12"y1AD U*<3)G:Uc`68-K_UEUKO~ִY{Ea%$_u;f>3<30}[$Oa(`juMT}9 !U~&=9)1S}C|L2'tHM1m7_"83O;{~[;{#Z =/^zgy+W;ssk/p»;Kyҧ~4~_{~^/߹u{4F\՝;OWWW~G~GWor2ܔ m KD-LE^ッRpiaA&ۂ%a<&]e Ae! #f1@O}8󫄲D&8U%eCqT=KZ\XF2ǎϘhR8Gb TF {|on8nlUY%jwNW&1u}_8{ ɒL#ޝg]}3s$0x$\$V-ĕlw+Id#d+QFI?$ӮZ++FHEf蹧ﮮ̪<ee=3ܘ/]y&7>tչx@ܹ3Z~?sZmk׮lo8x⌵v2FCXWZW|'5iAT@F_F=]钤4"dv P)pikC l_3_ |FJAzR:v  }U#sN)-Z{z3sUU*"f ~D\5VD*Bexrh p[G8^ˮS#NA4KDBVJ+kĈd(먔Xei0°,%gN28H<'( d<rs H,ČN*N'0-gFշ:ͦ-f{ƛ6@9K(_/._&Bq=~g~B+!Z)#|z͍VΟhk{pՕrU Ž x5ٟ3$PCkv03o7lZ.2'R}Br(B_-D0@]032WH }r ")&bh*9 Jsګ9\~2y=or9Nd"3JDr-7r:uVc_v(}+Հ);YԨFc|oRPHX7ݲ $6(W_),R#OW]a9?*Yƹ4@"=۷9J(N*g$kŃ++D\\,E;@9//];_}ɤ+~n5%$sلݟ+T5B߇<φA)t,u7.ه=DZ MB ~j7;aak1ƛr}·1&F;ͅA, vXƒa!=8 l]ޏ`3y> ?to?>z!Gkw8 4ya; @ S @JԉI)¨%:RՕ n]>w|evo"juuV־(Og>_wկ=wfqV6/95Ik9POMP~_(,BU18k=!U)EJ Ǡ޸^EU׋wߤP=L{c&V8&D`x^#ٝsLH~?'Q2 `JA`NsS@xo}ԊBZ IDAT]Z[;A޻W`z P, _}g?߽)l$eƋ/?s?dw[b< GtXȂ !@hT=fXJX9(f{M+k'D(2а3kKDAK;UUi'eL! 0j ,= &A1 i/ UNSO="Io?N.^zg>g{9w,mN0%nYZH0 X᠀i[í~'mʚmcF@!#J3,), Dx~u\ p/--Gf;$d6Qk 2#VUe ;D)b2 o ]z$0jftuEQTƘ䝻wϟ?oyQ` dƕeΊjjA.=_̦n{{ζD T@k']W~'Jnp0ihklȸT '%fZ$!DcO{Z jsH 3 !2So D ,"StҾD{`NVLшs:WU=)Qs(DbA"v̾K4=k(S+%붑{=!4ϝgQ>,X3f:|756Fw8/mǯ2}!=l(m2XCF|Bht2s]N< bӴ~k9l0$ ֓|f.^X8Ze2rQFpeaVIa EQdhEqDwg(p9 8qk8s@,lZ0IZQƤT>sMDi ar<Z[#7Vi2HZqjwW4ܺwvv{_yʫp1qTSy  F\>EminF%-F) N7 ((,ȋ0{=!a TCEAaUG>ؓCc$Y@њQ}ЀG ˛:oE] ',c`7CIy`}X|``d4v`na#/׶O!r7Á >lD瘈jM.5TFMGt\}~>WOk b~12O[/mj@#V>;OB7 Q~ob YʢDk4a;Lvʓ(߼}7i73PITbX s;.p6vn?[?ҙvYGzq7@( Nsl, v 0sW/\N0N&tPO6H90*McBfO\ ,2A;ټ%auӉa0 ʡk16ʢ<W{NQ;A a$QƸ8I!ii 8olrs`Lqb]y"]Յ ---W NT%ܸRrF3 (p"l*@)JЁ$*0l˪p++HQ @o"Z-|-pٳ^8C)IʒbqG-0-XI(DRf{!19$I z6 C-R1x^M2\^xXjD4"w=H,jPp Rh!"DUTr45yMNbns^)nRz:Sa'S rd[:K,s"̑bDg$^5̋>;:WL͙AT;rASNT[Y|hAdpJqUe! b#@ /VjM"A@ :@T*hn5L~A.U`Q! HJ)0W2Uhd1|;0a?(/8 bj6${Gyc{J3! D)H!&|c-xWAXSU1+/ǞbB#v_\RӟܧӥR &(ti;~߬"Kd'O/ctR?t>ϟآ4scK˪9Be9zH/[ۺzU*MZcS"FFr Gu4M#r ʩvVadW3릷F5ulûRR- 1ƣYQMjƖBu:]_Pnw)T: 4!A4cn%H1[o+U34i-㨿d" )޻yuOqy RR: ]cc 9F-HI:Q@} YY i,RqowkvNeNdkqo㍬~ډޙV:\NVUFb"JvWk6.i㬔RA&ZCd Y {?] Cf)Y L>K"TbTkbk]h2gDd`E(M%"\?/~3{·?MM+_>r:Dsk>M!K"Ήcz}<zm@}=^߸&2ɷ/]7s>uT?ES eliu~3' Ui0Ne0vO`Ɲ;{mJǗ޽5?,K Ja;&@xaN W:<<[ B =* #csff ГHQEEQXDc Hmv67[Ry^r(0W% ^[V#'O^Z^ImРvD*˲,.?eރr t-JCSqi\'qKhw:ٞ#:q48:Zd!-]Ea( C BZ1z3cdm, f[7o֍ϯ. V;eYvJu*@6L+ (^IA՛б (H}jL~tTl.8~j#2`shZ ֓ge1R߯t`u'P[1ߑ|x oqC8Ej|,o9՜/JN$ަ+ۿm߶xQWM߷H4h9wPwZ% .z^v\PI@K 2PӒ55pr?8s|?GNjQА\!MBk\/~;Ŀҟ /o~߻q>7|ɵ^8<'Ye{SТ?I6YfeYK_z3ׯje,ke'~mO?}凗τsyūԎo޺ẓ|'^_lo=/F*8vM0XgH'$)˲g,RDkE\YޑR.U׷d*G!=05V `{.?~*(`B̋2$MZ$`JDd-J_\n qvuc ZY1B*cYsֶluZ&2NQ)[AQhG蜅Μ>u°ɋp;yփfoi(ԉ/)ҲpA;ϖu<0hEr M/سc CjѫвO-C@s>p,Ɗus7S +L ֐"G(sN$A^ @s.idG<ĩuYws`! Zpn+t.(BGȍ|M&A0Iq5N^W?3ަ;v ..C(B#"iCYkhc(X^TU}F@Z~g+*{% ;"]8u0EHlyߚ>vt?w/$`7'o.,!9x:p5{8v[șg_ܕV6q/|ݾwꪈ-Н+/|񕕵t ݻ4={\sqI1S13khZ7;G?gʉ>^r€X~Ǯe/UVZ,fYJV[㬙êa+fEKY"iiһ[;+*Fxh jwKg2UUQ ګy^\8qfPAe b)5EZ<)@$|< $H QT*8 jTDajs0`%HgN:1f:*l_YESjV}_Kݥ'>pW/_xG=v:a eUc " +։ l<55d[\|"b Q1P 4Ljuѣ\x1L|Gl'x3]S)|WK\t"بb- ٰs`,|ۆfC.`gl u{\DΞ:=3Hpϒ7Y'?iVtS Uw ~׮czg[ĹqUݸq#p$Y+-v^|qccޯe kkkϜsU6M6Gmnm](˛7o+c?|嗀]*j*s+Vz ;QܝNg1E>ˋ, C8tU3zwm-f9$a l:s֙ øqiιVUU @E珟81-ˢ$ҡ'fɲ򱓣XZqUUB$Meivsyv,/ =q~@t, 8&cf,Iv-FA-3v6ׯ*ꈜ+_8VZ_zEgߌ^w+W.߽{mNv[k8LٹO2g/Უ4] I-F>|Gpppnj0i1 ;FD. ' _AejeϽQa@š6pKh|1)AzuYW BxBeE 9|5QkUziPMUoq\CD4"KqaaԘvK.0ЁRb!Q,/=Y,ΞpդKp,: ~|鬕Lˆa>/Gw}Ϟ45Sڮ 4)Ⅻ?|e2߼u`j#x:߸%fk0Ԋo |VNkn߾O??#@7u; yȡVinlmKǏ|w$⺰~̙sUU&I$HxC1ZTeYfit,] 4V[*J;mYvv7f.A1 *SM* lY KYe}6DQza'uPHjSE{ֵ7^+iFiOtvE4:qhc=ޝh-Q--o و1V'MZݼԅOLwHst[,7_-ݫWE^fYA9N?I:Vu9n 6ApHXw8k$ȏع^\Uj?'WeOTl45f! P5[o:<PFHf,lM eA;n'#bN)߁ȓXPy/D+auv&'6+8)A >\r+qܴ, ׮3ׇ5`q2RP*)Bn0y\:(P71ZS)P<af[91#uc ;㈑}[dχ&Rrͩy׎ff@RBQ$^!`$FUeRTx@30\}+嚮i)X5bdYiHD{vV}̶Ai'l 37|fS oG^+WL4_5Tn)[j5'O]z}[UdAtyٴ̽.ʰ]]gYxwŋ:wkVw+1aZVA;-%%P:(aDeY"43( n\증mۺ@(T% 1nZKnr:ܤc+-3 UTլ7o\ 80 dwZ@_ \;DZ5MڬP@V4Uoi anma\ HH: 6B+*Pyl?!E>o|ދ$V9z@kCӀkZ7 f-@@ i|I_Ƕ;[ĻDݯ* ;Ca+EXjqX8}X;;_3=2c{`s S/@MR,Φ&wE|5C(JTbuzE}!,;_|jl8W2DT Y [@"E>40)8X~Y9"*qBV3'Ω kν`Z7ݹűr4vn Yu<Xaej W@e\1寿/|͛jN?vt~.99yLRYi< \|~{v|\MֺrU\l\䠕X)A y t7΍77+ H=zdF67Adww0Kv6[#v1L|tPzK]|ZCGuʈڝLwFpYVoooY5Rn>%"b鵔D&q*P9GDI+YY LDbȝ4QP'Y H9Ἠhk|2k'E&o1ANo]? # V:4M-W)\ѷ+k q9q {dV޸qkg<()G3qvn:u̚(,0Le>+Sd ¸#ƽʋ|pɹw>ĥv7oooGQ}ȓge(jkskyy3w_J[W8WUa;NHΆq JAYZV|駟x/\vK/O66ͷ_7on߾{ͻ8ϝE[}a"MЙ4IYg/Eq D;|58DPw~/ʪB^'"A "3/fi[DHؖU@0HԺrT3\zILDgKյ4p.}tƂtZրn $"㜩 tʪa,"N!GUU7ozvۻ{FA/o|'C+DDKÀƦa2:WZ똽@- pM 2 ; 9;AkhN C$]!_E5f|=Y =\;JYkpAm68"% ;}p4-u 0$DdvRJ">̦?᩵C Z6"2J#&i<榗34IEѣGέ; @@V#*믊Cu ZHNM: v 9CgTL`c,ziiۗ|W PG, ϋ,,9:4Fijeɶ @Lnt0ؚmU-K O|/S}ʕ Шb8҇}׎{gΝH?[Ub:ucmӌ@Hcric'.=vG{M/h%)7onF*`K/m?@z\Hq>OwvvSI 7qB%UYRTq%[vU AS@ A+@ck (+E4kd6-²w.;ޝsv'Tj)g8qU+7A' vD@5]z>+/8@L>RYitq1F3F ZS_[C}&"@<7/l{G+hk\)ippX}pa-Q25]aO+/zNp m0ct#34M¶9FC@W,X8 spe'\o!Dv G=.t}aE5PV.}55!$眗UDT&iE!N8S?OoZ8C9xf_U$(H 6߸yrO@^zck}C)":$DF Pk=,a`:wݛ&w!ƃqpY"&N-jPPV.c'׎/\9}͍=$cg}O,{{qݪ,LeIjgy>r!Gsb*j2dYf2Z8I0\YW@,-(P9 ,tATr4Ð[_lueYx6N' ôݭmZXʪǻi1t܎ׯv-B9sLz]\P ,Ɛ˜w`cou$Ru@h"4-܉{Cw8X,Xo><>9!+drRCGa&LQPw B[do֪^aE$5;~%^~d2.菼'׿W #7 9 =P{"HĮRlfU+u~dsMZ=I5q$iJUUNgV᠜f2n p|uEH<7aWO|8dA00Dzˑ!'t$p-uLfܾu''.^8w [4 @P`cckccg{ͫW*R{I$ֺr榮* ⺓)(ŢޯO<vWY+sfY`E嬵 T(5"vY>X$;N+ 1/QJ1EYEa2%Apjhc$V+?3ژNW߶Ƭ_Β7^9ڙ,fSv3 EżZDVe%I&qWSgK/w:VuرCޣv2Z).wBd"r6Ȟ^ $i1$15kxA}uaF`{V,0 qvgV▢(LnmkݥcY#:Aɲn^\J_wګ߸H[[G}VM5z[^=s̉_6.>v3>y]z`ovnB۔(:$ W1(?rpQG~ívo}}5=vQxW6!J0:%q2p{lQHK>;U,nu)q^ɑ @6 @HlhSg0R´Z"Q/];detX1xm`6Eƒb uFtaiGK޹ss2.R؍{(MM&͛;FIaBeAvhE$vz>(DMܽn4v>3T_G:{HJ+RuF6O|Q .d[O$k ]j:/loXW3oǽ_ !8GXo:"@X 4Hμp/%%iwa Hf^M@8rqX[; }T@"H@ m:֮', u+&{J,`C87 108nj"wNP>b@_:XD)E5,D-6jdVDb`b hU squ? ||i2 T_uQSz!D2pK'.LF|`F;;Yv:Q_EQNlUtzv'Wa=rΝ{i|0 g YW+ʍ;ׯq 'N[]nݺOC'}òC`p>4߾`;gԙNu=fX[<ر+/^{e-8ƉNjic˝^Ey^ܹw;F@pɽ{P(  AHZU50 @k 脒.O<`4M~O3vbx:M& #Cu4$I@0"tHIC(Xl*"JӔqQiAAPEҳh')Tj:;s/ҴkaE$M ޿ƛߺ 6hu#J)TaŠulJk(Jc'OFijWuq-iґX ggww*kk skfO{9 ؠG?wWr4bpw ^ t~h6R! f_2wQ`iZ hzRO|͛7al: C/\;ve_3-zJD @`g[Zr[+_X^];y…;aWז$//'G;ZG.N6ܹ=_/ ۫x(oW>hí;_X;.<,q\,k'zv~Y>ә)O:2:. 4mmomm޹3 ]yta)E`@A5%i6YU5hIMwWHi-2]Zz^RC:ćeN'(H)jhLqkYWj`JwF7k,9="vrںnhhVRq8Cq=$=phI@zуL&d2HQP#Ā @/%*3+w?KD!νy䱶[w9k*}#(H`fUWUY)4uڭc9wOOn&$k^b\6~{d2nFBzLzv`E*/F?wOi |ciI˒txE$4Ozbii3[ Khv^:(YZEΒ 7 ŧ aC+K/:!PPo9W!cꜱ"W7\UsMx2Y^y+XW|+)2F+ B5ĐF Ϋ wg 7y v P,,  _MNP7ݪ/D@-^h/2v7:OE Ga*޳\fHݻs<3YqՊ^I>u]OkGCBZNFd2w~UQtEce&A=2F++H?0Ig|ŃBH<Uw;3DZ D9-/OSs,qlL0+ְq`"6g^P)zEAi}'94b3{,=+ a?8Eǧ,K;+N.moK|^xv}"k/b=AIMnl\~>}s&\S>[e*P-rZz;Kcd4(NҢ.&փC 0T Wn[,ݸvw<|zGގprR"Ohrrr];|ʕ+kk$t:HQCY*cb`q΅6VYbQXw: 3彷QKrJv5x(LeYG>m=RHm+}&-!D"={%\Kx҅o4XdJ`D$;}]U S,X4R,vKԌ-0h!.1A7,ƍqGRAօ)\&J)ޖH!ak -f]HʈIo_z'ޚPJY:붮ng3D(qȅͭ͝4N9ܾ٧8`M!EHSb"X{>';<nm$h PŔxE"`Q"-y*Yq@ {p8 _(@m\N[܅ o+(:T7ߺ?|vdqEƓ+xq"ݗ_~O>ä>9="􆍢Tyn[!b 6>:[u]1[g]#V""*k]UU *ŗ/(RJk&qeVx`hqӶ2cm=SuyLD"Rx?͜,'m 3{Yo߾[Y!*XsCc~oLH@"#3 jK$"\RE J-:2О%0 )P]-  IPΚ+ҹ'p xn@eyB̖ )ȡxr#3؊w"$siX/LD! P\` ܦS4Pv%Ҥz4Yo381e`yD Mk B<+ba}X_zopVD ց$B#` @AiV՘I!x/( H= 0h5ȡ`L8X;H7o\R{byR NB92By+ViV b9xk;^qര(F)Q,@ri Ͼ>?}xI2[Oй0 &YY!" T&4:9O2t8'  $ݶxLaq{E{,Do5?Aq2\^{{ X>k<:~gkm|{/U7 ׯ^tE;.,nfUU" nxZ|Q)yx2,*I“*,KMgƢ!bw;NKSe"-˲~Wߛsp8LrVӵ$IY1H'ރ=2vϤV&YݻW]c@J`4BN $~iK84covڴ2^H8&+O ׮}!h=ϙv2/2DφHSJkF`0ZVVzlgb% @*;id%2B:`KUe]żjg`fʳ58{C IDATA ֹZo2H7ˁX@ը=iJ|E =7TnEJk: HI3 3~+ I}gBks繲:<e_;+"ɔY1 jxV=\B%qżm]MV!o;7'lw 6hp@^ph<=1Pnga]Up +U'ݻ0g֕صo? m^yc?3i1 imc ̋Aos(dѱژHiIYZuUUUQeYj<':y;4IPŮ~2wm tRg2GoVLJ3;-ZEq||B.:ݞ1jc<1@դA5E' "Z߿n/l] ]W*rLEMxE:y,Y4]DD_Tc^ |AEΚH)BD/LHJ4"cLOTe.h4>:>"D+AiC%2b9jmtzEE?" BgDud0I-3' @/믿vONNiJ)XkM}w&"k&!a,,Ǔ Y_s`DH""HUY(߻~eɭ5$q-8*犨w]YNۻ{I]+ 0X__{h(0ֺݮ'{ u,c[|dʣ!Dm,ݼr~W>dtOn?=nj!`b@My0 <"Wf&,*8F#w+wֵ ڊK>bPQ,˲,C׎~0J)/n9ӋUDjP+ P+s 0L&޻4*_|vJ$$J5txt G&qeh$AcdZV,3{y/a@hHP`' lskϰ_{i(iZ0y!RY;+ e" 5(`mygڕejD@*`BUQ#TBPdkCrY~# L$4(z+*"ݱTe=g+o3qyϡSˀN@ieqCQ[q^HPJ˲kx2%AW wdߐ$':D\eV+ISv RJ8q 9cD,Rk% 0XkvF0YȭT0;=i@w^x/GL7v6 qۿ['K/ܗ>۷?L]ջi gvq"X`~ `*qu󡏻EQǣiybtok,"g*K2"9$IZY+c+묯˚(G&䖝]e!$03 =ϫV5 nzU鸵s$\:h>6: _: uNDTiGR6/O"X .rV -+XXB_2)\@E6,H?әB0"#Q5eq)\7s3ɒ%M5 & J"O{ǜsֽ4\e^$i("bz4&nE-oye"D$qtIEQUU;UY"bd"dRN =.`(MPZ Jh8%HV"p>toWHqgo<5gK> {;$(" od:-{rֵ1 'pxz:kk7iYƇQܼy߿wOvQȯ0y 3Y|$3ކV*Ml;~ҏ~ݏ~C"1 ^~/n}rZyE󣃐uSwswO~2`[~:)/}WO=zݿ `h(ZJ[R` SqU*NNm|}cVu期L&P,tڳWJiYdVRJS(RuYUEd&ȵ&keZk@iʲlpz"b|9Ϻ',IJӎޣD) 2dߊt4^eyy,EЬW{{qrA㼞3z@ceS axvυk*"Fkg}U" ֎y<ٺܼL3f? <״/??XШZE _$4ф{Z'/9e?[C՜WBp5`:>?jEEQyn"Xo0"c t>,C*x"D FAPݛRarhTW@!q I7nxvH75'R"຦#Ǿ ^=1HڤJP%n?z`AuR,ش K>MS[YGFJN  BP&I-llHz1dE$#]9sD$auAW;&`4\6Z׾/?9yίn^lxQF$w^<Wr+GUҋ/ڝO{*6~i.Whu6o˯*N. DAള,D9ON+dxnqi;*꺶l<'^{4u( N$AǾ)1U]J"=;@A@˕1٤]O[K$"EQ`2Y(evN à v> $l] 뺶ⴠpuE1 AaV @@ Z ( `i HΚ`-+e(O9nfńd,xwrjqQܯrX:xso,J&hB^{tm:ml{؋ .Y+B@@LDJ+TDJAsKY8!!V\⇚HR1+?V̪*?_ŮFaE"mgr.+*7(!F5vފ"xflD ~5ND{BJ( z`lbc"D| z"5s!9  NEyf1< ehks3[ϐ&`'G'"mY#ɳL {Av =։SeHTE%`xTʋ1KWJYWq5|bPj6z:Ng+iv-BBo*ϗ_ Ɩi=zp~!Mݿ:]9@zA?)n\&b:@9W];.fw.< \**2N|;I[?zӡ=Mvd@_޺t7{ݵ~7I x2V'q(2Zx\Pg(ʲbIFҤ$1'<81Ϙ&2@l6+( 2-\iILGvhMA*yE9DAPh"џsu b53[b=iԨ^[#``>E3h9l!r#P9R)D$sXVᙙTCr:_Wu]וVYY~%0j@H @U:^-ܷe"BTxf(J(*6Ir0C1̎'GV bB)H)J- /q1*MST#F`Ե 8B\+ؒb3VM!" ieHBCLjEilizkk//)"E{{{XUUNAK(%eUyKҹ|u/xRVژMEw^U=>yEqlr{@ti' 4IzU Q;ֵֺykgoڻkתW^bC@N#u o+W^Ϳ{ V1N$,+3!w~~g8&ڟɷ2F|ᚎZW}TcwƍNҞT W~w?8؅D`һ} n Ie8l\~񝯾s`w$am/Hyt:q%@`{^zf-:1:^i۝|6Koi,%I(nHY̆'IwNϲPX^ <ښҮ"GgO暀*>Lַ~꯭%quUx2"HxfC`!A>ZpB /)x$Nؿ.M-\.HhZ\_s̢Zyh|4\A{fϔ rt<٦-SZF&)(44C6J렎3sዳ\ 7 *{PA֓WmX)( }ZK!Tŕ6=buFDrvU#`DЂ KXaw\|ʛoiz2BG㒲p;HcOg3P<d2j6/8m%qŭYYj%qE_[l]֕RdJQFʍ't+/ڱPn`0 Țh<=iO|G???+\Yz@̞(Y1B ]:kyo})t<(,C@$BH;{/׾jE ,{Tzl,:JhΕWxc>VQ#¦O~'VZU*˵D?lv:lYEV[tRXY7Qx>_@ZyVUU]U iJd2?<<Nt4SHD B@X%DB IDAT$ۨQd1l_~_s0|6y~ճM v&!mR@:IV`(-;؃m;.soO9ۿAFp ?"-4FUӽ0yxko?_^OG{~=F(/^{7+V{Ou;>m3FʒRe5n]BTxY DnkTosM4M"0x|z[-g>}t#l(ON嶔V#<PJ$58p֏Ien{ܗT++*ZExraUN[iڹTEbIE\ӁdۏzѭVF٬ yJf (b (R&ֶ)Yr0ƭ6}jj8:8Itޔʳf$Gݍ^!kkUVUuw<8Brs"g˞-B.=O{]yiJ[ghG~K;ίo}?SQY[.FN=}to_;o_Y+_zկ~k__UQW/M ?:<>޽{h(+,2kaQstTeUW_7Z1pfvٶ0'A|+޺tdFV_[UUo>A!h/!ԫ糺y;oeYߘlRf`t![0B{}ś1y;s@s[fo"cl8Ng7| ٺw^QSH}]XV\ԲRFHm1s˺ ` (lyQxG~Pje6z88zevޞr^/8)*͢+ҊAA5@kcOu,-% X.+<x(Z 9眵YVLx$*ZE8(JrAIY1zQF_ P)$plpM# hUP`3!Go lGtJѬU)l Qdv&[7(2.>o{ΥI"k;3HfEn&ʱx@j7O@MȨ.@iēgoYɃBD֑xAD,`è @$JMoܸv>6EUwTY7wNEuP{^3'B8;9}Fx2Ywn}} ê,kW5s6e'$Qd'֭.ᠲnr: x_{-2@p4ն+Wђe?OڛH]wb^[WWdhDclð1 c`` cCcDQEJJ&6{^k[ËȬnR-PȈx{͟?/b1y;Vrw^_~"*{_ƽF'_K{z\z=ڪiV9x\~Ye\* Na o|j|xxn|=}뫿P5F!ͺ[(pW =`ׁ$5goO \ET ,ۺGdASEQJ&)EU" ú,8MS=VZ u7%0'[7ya6_<<;b*L&٢(Ha%|;i6==;}xrw~~ф r`o~K5xoJ)VD!4"У6 9wB؞Waf`Ϭ)|?ATCF<1yC \Yږ˪E4"'/[vv`&ǫ,{`{v Mݭk# >)h{[u3&1 Z ۇ):0F鰰h*B`RI#@&$텗B!JJ%%rCEu F$-/[0xSwnÞ<@>ٸjz;mE\,sOtmvPȦP> ʏҭE * ,n{砱 ,X'00@ˀF*Ia-W6lɚIIB(*pέtFV\y]VXhWh4N٬*ӉG"ժPJ@U5*0(aLc,|d"߂e܋T=wwvAfVY N 0[O`o`re*˺nD7~G?F.!I)sU֕j~=@ _v_&| ~\WhO op0/On?>z'n,*Ľ~E͆)Dԡw( QnᲨ(xO5M==9.&("vĚkRht@oeEc-R@Nʂ'lʱ%IAEZkk- (oӬ2muE=<%Rb׉;w]x!{g2.{OJ*ʶ+%d9)<2 }A/ Î/Oi%о?0>4Cm^\;bd \SdјJI%H}7(e0pcwHJ)Ѳh%E ѐaQuuBR#wh8@5 s)]{ư]2Qߟk"0q*E|E~jy+R9b:$7!zfA AZ* h*Ӎ1%qôᝮs^5eOJUI18MA, lVᝳx{{',˪ʓK! (QPښL`䆋T/e QEQVUcP2z6{_8p{{;^y.n|qoyѐ)*U>mK*DZU0au*6NZ{wٿ ?/ǣ|/|_vvv?'ÕtƺӋZFU~vW`;){'Pee>ܿ R -X6XV7^y4@o]ruog{}s%Z=/`sBXkEM@8Zڲ|vEb:\rA^JGQ`5橧泩G{Ysk~E9N(<t;i2/L]Rk%U 7R(l%gY˗Ҧk-qP)MGc6M4gޓ-`$2 tw8toj]#~G:}hQqapyl榱u] w3ucOQ @zd쐁@mG9"etG)f͸[kRnu@R4;kBc`D6!jcX*Di\*'+t2Xb 2QĄ$Az3h-YcȽF\P*-0X_%Db;\ݳ|W$T`rmF U"_c83sXvϝ;vY_H`ɭ.뺼{.޽)ĩ0qaC4+jJ1PN@깯+Jn^j)•,?QOU6JL'2uZRJճ[^T~[o!aX V+<{&%no>6 3BQ#bPQr2#b[U~{G|SO?sr2 ٚƓp =/*O(k;_ڟگh"V΁`P/s{]=:}_[4W~{?WPkY*^~9^r Y!u~;:_la-4\7nXv;@QR+7$[9;Xk\DAa, _\ G\5=  @@U2e,Xܔa**"$W=GUU<!<ʼn1x'Fo2[.(&*Q(ԡfv l$ r\m J^@%}кh|L%ddUp2]c/rZL !> 3D!ڂ6^7Eѿ:8h ]+XTG}2߾Vqɷbn#k ]BƟo/5w95gٚ@R"x4HYw/`t2tyo/6104Tt<9>38rw )?wL4FW!-`3Z\ί?a*+-N:>~U#PDBpin7=;9J׉}@Y`);. Q AgY!]ϿO>Z.2sע\&ư#'^nן\n~qjĦ4ԁLN%Z[2ks Ƒg8)V1-RQw;]-w X.nEU ,3޻{A_l:y>qY`m. `d_CN>nC+tT#ԇX, jf |x7k 0!֚ )%#_Bm \cB+xiYh8Bjt [!?gu-XjX~&֮빶8QMFdYn6/ Z[)f/ht~Y} : IDAT%";)Fml,luwϭ"GsASlnș̼ʲ0 1Uu\b򞶷%ZK)RtMPskkIzιin><999=~ ZV񈘗ˬu+~|ŗ^8|7O@V^w܈yV $|^>x؋!`X88 uܸx4kה/W_{Q?bQ51 ;FݻwX|S{yx獿:, +Uk B))2ZOj!+T-kG(5ܼXgTdn}i%ҵ6B\[ߊѵ.;3Sl'":"5Mmmk0UTU^ m(g YH@'_}zZog*=p!QhYiX`^ PQgU qJeI3 w@US J5VCGGui@yވv]K0z^eVJ 6í0!|8n{:y郥|>+SW;w6ˢj֍s(Tfj؞;D 0u];[7֖EXeO7n<5VUe`4}/t\-{(N9,??_HLeUWj !4ל&Lz|d9:։ih˴U+ېzo_gw͟{e?7D 1tH"4VR,!w''?NO3qs*sãA_ܽ{P(CS͋wa`$JX(*˴A`~>́t{Qfq<>xvbQ;ua`$IYj< ȖvjEƨ(V|ítr7U\W#~r26X@ xEfB(J1& Zd[[`p$2(T-HɬVG)3 ),TJ5mU"PkBRW9mt[F g=PCРhx{_puKn(Y2D%{hs_/\1SM52nPq!ԦFN&Rq訬c/UA腃K,=31g, o'舗[u:ŢyunÉ7KKy$nBܹ{'ԃl\zqֶP4M;N4i<(b.Rv:J)$Te=oѥqnT ʋ ru 'zd[gA+ǝ8̣nks*J)eƧyQ+Ia,E\,W\:6F t{qZ%^E6LJmF'="):g&Nܻs|8<PͳD .u u LZ0!z&Vdu1Pa  ,D[OEIb~czth*dLlt|e,Uq޽{Ԭj5RX0n:/,`+mT&ngdNvm4(VZM3 )y[iVÅ@P"L_&vdLmVnYȯ2]_R/n̈$KR9h![gkh!AZQ)zY'@jRZ9&l$ ZJ" fII}lA V2BJh+d!Y(鉍2Bx 0[vXf˄={O8UV TF:8mBu@F1N5HB, ".(\+ = @DIϘXlwpriv؃%\ٰ0ȄRIHM~EKdZ [lpBǀ;Z-PpVEMeӏi9- ,ϳb9?>o<i9Wt;sN1.R@CM8N_a2_(s|%=߾b9~u@{Qb2u\UNgv:ިbc`_э 3[{hr@K p lr){SFnZeZdX;gٯrthI@% :ݽ_|iow=|9bx)G?=;[3~}͂qԁ:-oT2H.1盼k@E ,:DA<1s\-y8ӄui<" *L`H?op?̛֤O{f>xkٔ7ݏ %[G[' .Nds*̎Y RRGg DךFDΣ@`+tH hCmARfh`E`4z9R*)(6iB%!"1@,"KE1ֈM$c"E}QȐMS7eUSu[y"k;P)(BHL.'Gn鹙mXyNil-E'u(ԾV*$B:rmQRj<۳ie | 0i%%U=h XMs/O5h A7UUβM\,NNd+];'H)u/ Paޡanwgg»ZK=Z<@iS% P:nI;&I_ycju*E'[[/'/tI(8={8OTbs5x$M snS+ p1~nm VI2>o>o|}k3L(R,DUCͳ_r'Q>1{@ؗ k?=;ɤY@GLoCݶwKU4jl`P!ll YN&vP {ʲ2y;AIvwhk`p'0^-i' _ż4IvE1WJ`B%FDRF[& oktxNg(Q4 -l\>$:7exjA,0<˥V1z.01füHmBke[ 1 ;E?x}#^^lF;>rK3RrH Yi0Z˖UJb 또YVvС:b1FI&ԚIDbD!$ơ/) CmcZCP떘Rp @RB+QH`HkCO齳Zp{s9kj[Tr3I뙱fyI°"\i8^c]Ż {Eyh a=0 т`,i=-\EC8®6\2vM;1 1 DMQe+t'u&Z2uUM0## *nװ+WH)u`B9k^?(Z1{]U6@D\$AI)˥:" ^E^/ ~'unݺve zXkwڵowENO~W ]PxX޵|ڂAĉ]-@g@+K{ۃ.:Auv^Waze\Nxǿ{+o4RycY0o=J]Zt" 7<@(EEƉN:jt 3wF[HLD6;Ja` {<E*ˢ/r!e^,5hBH@y"!BI:N'aIl칪WABQleZy!N.Kh<0 " XG'U]Ӵt<@q.RK?lIGJ2۪NQX+Fa(r>Lӕ,6hkkKkoWIu _kc9b?rujXpgNZTo]Xv! PJB8&|żhCs,U( h-RuHR8t [AMazZ+Jif2^'PJȸVDbk@(m* M@_/z&&QQ;ID(K4I:jXHFbom^(JE7R-6hN4j+ןw6&~޽12^' c8?Tn($aXGI]7@9U ,l0pjz>H9S 1UUApuw_yEsXVE\20Uu'JJK"H>C(W;iQx 8pBBDvN옫i NEl @W%-.EDQEUz;q2].bn泳̖TI'qdm3E˟TiD(%3]nӄw5c\.-^I7nxƓ cO,Ϧ^wH))Q1úr5`݈Ih:޽\ofoZ0 %Ԓ,`,i3N 0\ ؊:?Jx @eE/;^ϋx\ ̻}Oԛo_~6K,jZNw  :w)h6:ZH .lx[KDM XThl *"z@>?SA,5M 0TRR*\'VZO޻p:Wzٺ*EUI ɧOʪMs~~JJI|""/.ЇPG?0(>Vm!&:1DmHPeZ ;/OW( d{ODT(*+i׿!xh>B nE{#jqԣ a&$}m 0-T K@("Z㱵E:,,uN&{{[{:0QH= '^~??{8O˟|q>Z6Nd k0_[ _}xzN|+Jt1 IDAT(0A0Q-ʲl4u!$|8p9. LҎԪ( jl-ڧiߋx:9-(HQ+@̳̳tzxxkJd(mipS,K"bcI_ٞ)Q@AAA  0 HPMŮ.]ν_fu79H$̺;bŊ/04XRJiп |H1#2 ~@ bA@9(x"P`'(HXcDDd]{RBRR%Ad<L:@!cC @5JfBxxRDc$I3>"KD:tj0<;4iR0$b1o)RJeɬ08@ bL>r 8M8Eϙ2 fN!r ,}JRþS;DȂZl"i"B}DžUFK}Ab P$iGTQEZdsީl;6@-_OwͺQlxOfK9>[1|,z1,O LHM&}s.|~)ʗg˔hui!Wwq4_ܿ|m*<# ]wu)( 0|(6́8IBDRt6뛫g3Z.~uJS g>zvu]]|rDOOO>?~_߮^||/ 0k\<=?,ʢ僇Ajzd_/3tX`nvŋ/ P19yjYS[嬠Q2x!)"k̒rF~,/Q8BɣGOc> ы>?ݭkvCR?,gέ2u $JQtfo5H $پ"4I߁ ^ۃsPfvjnf_pr^uyox WU]JqLv {yf|6M'F+m4hkQcQEXDx=~KP!aJ0ulBFRDJLFP b6.&MA1Ō[hRZF"$2*r$c  wʪ41D]hI(C @ 3 x~pҊBB >Hf2 H,{XKD`J+" EQPo"eYJqZ< jJ%L=!6! vItS44>&UPgoBRDmuLHZ%K^~)Y6$i&b`KenˀL<] ?pຯ&ŭV4aE}J1Dnڦi1~* Nf!vu|T6d\3~Jm]áfLsWv[oonj^^nvcI=@t[wꫯo޼Z'_\\kƵS&!1pbXC (TBXH<-f)ɣCiyzZ˟][OS,g/}S_~ɧC_~v:{,DfW:!>FRi;3ޝLytzƪbٓuҏ$?UV6INI}4 .'#hգIUIFhUKVZcT{rS7ڶYo)E"cgF=bns13^.p<E}Ń8J+L&DF{cZׯ_u "}muuh4ʋ<˲tuSU}yUfUݴ={ֶ$! S"%1(  Y{2! `,UeU:j2ybZMOꝵFzy~FJsRz=~1N?#dn/^mvrT'?|b:կ>ozE}nZ j|?KBP܏^)\.~òB5Z̍1~OZh3$ oV]Ao[G#Uo޼itq*I xuy/>֙>}͛+QBf/[ݭo"5@BfY5Uc`1=fjW:@/^@g$!b"2EXD9OЊQV01(fC>\;<a{L)e"H!1 BTNR y(/DP<@8_fΥ2Rqba("s˨~D2wyޏM3EGbU }p34F` z*1iRz[o#@J%R"g6<Ii.R[,lvzvcnZLggggDS$"ctJ~_wwwDz7l6kv;"'''g77NXn}/MdYNaY\ dtg铧M]?}>fs}ӟM1vUegݭ~_1Nefh]}~GAR&%H&Eٴ[$bٵm^kϠUJ D:.A0,xYi]o?on/X] ˳Gv[ŦƔezMD}lC؁*wTr< y"い. wp|[cB.Awc)EEFY!!PP$r)Y6&eA+cb;]ߵ] !C !v{k-!E (!I!iP2EO(QX(í25(-ID繁@ ):0CBR3 P+2hFuP4%$f`6 PDis2]z5"+P9xs;HCJ. g35b"HJ #k2 *,m1G= mI2YυUE(ƘG KYְ# hهur#n׫˗N_o׊Pe97͆993|ObWpk kTG$[]~?݃Ǐ=~8/飧Ͼ~R/^?ˌޗz2~ѣg/_7`ƀRd@}ɕ_gEbsv`]1j`"<_W S1&@"L"\<\?7 B_ڼJuu*nTѓ|'/%d̕ M<|Xm"eHbf3NҚ1VMFz}>ģ Q1%(;-\V臙B@$Pݸ涢kvz{ QfYEY _ݮNKRY($$RDJ! 0'NiGb&f^;t6Xihw}7h5<#xJ!VJ'Q$X)1&ATK0rnRcO)y#@L$ ! 3#(*<, CI̜ʙRbƔ0 ;𛢚fCGDcLeKF=5F);Mt 804QQRF[BQm@眱&ONEŃXmFkIkAa ba-qDAvn1umٹEɋ2sfF}`PC 1+)xTmOLvu}D6ݝiw]߃@&25>}l?g˗/nk&D"6Zc]Ӵ}߷m;1λ~B"֋"2Dx͋jLG}}LAy5 /t.|>]|~|?Wn 5*g=xxz+d%Vu@]t]CBӏ@()܌U4՞1F@Jq/1p LCt";¥@'Dj{Cw^5 Uj )JZkL1޼;\IǮ7>͛WFd3=<|Xs5"{2/bLCb.e iaNE1?^hx ~CM̂eBJRm1ܖ$Sc Ġ(ҒUh`6BRe'΢Oi" b )0XGCk"f zR01["HZk":ZmC(q|I%t h0qJϳN l>j]/NC<)2bG'rE8pVhPőCD @H *$(P"fh\;/[N ԔE2Pgc@Jg}@{þZgYn5Xk?z$)]\]FERFpOgZl>N,"c )R >(R){YB kQDF}j`9BDXW^W5̦eU뻓9a4  *)w^w!HowOEu݉ +﫺@r;^1v-GK\-@^]py_mW=#|&XkreI)`7o H3&QZ',@i-c),"jfEibnno///Gy GOѣxyX1rJi~5 #p|b`1tB1CdPeGe}lӸlOcR&ovzű몕PR >ry{<)Rr"pC\w^+ @HHe21RH 1ZN EA^.̷>2O]Atl cH61@j@y wiz*/Q$D>$ uڟ;!%*YLFZq\3>8F։TR4 HJ3 0, (%U 5$}Nyƪ=M\>R(dNu#)8[G~WN7致д#L3NkmmvvHR[zWQ5M٬EIɤwa`~<*D`2>.EQ65W nW>:!7oxPAgTׯ:MFr>*%ԦLNd cLӴrb(V$ @&,@+Ud6} Ŭ,2vn`8o{!A]xg>g?{왱yUSw=럿k,LVn_]A$uwwcBs׵GOȦO+${fĻM.lrxw<=_N'iw<2ַfOO=z ? W@z=[vi9/{[ }D@0, ڽi҅oz YP "ZLl<^Fc)E:jm=g@8)1k"HAgNMMYŴna`R9`7)eRAq2 FBP sԁ!@҇aHX8bi(TE:'ѩ vغ.!}PG  bL$m뒲еMb}9/, "D>cRy_\!nw۲֫>̇;78vu$(̻0c[(x坟ΦoQuMaCn4M׺&Iy>Mna:-sR7F/zx\Xlc RL!QY(?%ɨ|Ç_~uړӳ>xgn7FyY&1`xg mtDtAMW1%h O}6C$fm հ*Fx'ԓ\Dێu5, `0fOEIER=clQks()?}7_@%=/ ߵ~A4<()7a*@ At3=OO΍ݦijWo^H4̚B%Ba5NZ IDAT{@CIii3~m &hs^BĄ4qHLiC: A= !Fg%(ƌJBR2kmjd&HJ)1ޥRZz$ RZm5RJDBo":@N[[Ba&!ttXi9r RJ"C8x op(= +Z563Ejև$x  )|`P923$QAIPZS"'J)꼤0>, =3 =D>1sQ@:B( ޏ@ R6[:Yh\&j}˛U!Tڹ@TZ~MǎLNs(2kGՋ 9X9|`|p$z՛b>16xȋ\dsB ](otK x2%Ddw&9GaEKuVv7o2k C[Wo8rGb4b]PSށ.@ @C'!TU] jL# I)zwm(a3sD$LR pp÷6t4##I,b9$2J0!O1VPb@0ae CX)R=ṓo ȁ9ۀ!EC{ %ۛrD Sh!*AR1lPxBt^gU 8¯j7QYey>O5NHcثGa P.I @H\[7A]d*)nQr0BK ?M4כڭ1 sR,6D&l i1/DdTUγ{CYVEѻ>}7HI1tqzzwh2ML0!꺾\F2k67DR 1heET&1ӳ6:rmzfWmD Պ`2$϶OO_fUW~>}?'JQ%؅ε5aB847P.{W/_|lGϊPO(RPvBYg?c|7ggk(G|Qz_XbBccTA/ AIbL] (8 "%v ~}YH I%@D/}KH CDz?vZLo!H, U>26ψ(B;M˓ӓQYvMs}}[x`FP*(Kp{glQz}fu[WWds7K?99)bӍYY })Ym=7; @6F5A@Ї# Rpꪚι;vMhC@Ʀw!=`HGF2( ǰ?L GH[=NR zwA[$t9%D@ޚ>DZ򌖢@#*2;N:y:"ZyݫAbJ "! xo+K]]BAtGpRSO.弌~W uM]̖yU} hg&Fc*8.~rj>xDe1x@km~Gʊx<:dYMGj[p"  >`H ܧ;<Z?iA#u0߮os\@t^;Rl6EC=[I/eKchm2k2s QD%fY bJhTPwm"03DTQd%)FM}smifncYcLHs H5EIRJ)彯jw>Pr\ {Շ~^߮Rr:zQ3Oѹ>Cmu(xh4zn˲M1h_gybGRfNۻ̦(Q#I(`%)8{kN~n۪nnoogx1[Z5=+0t4w]۬LXdq2Myܢu$L@?`Ъ-Gjժ/;W7{9^)5q!mYH5E`FscmRnxJY6!āۮuAD1$P(JerI) DQ9f@#$ xX{tU:p@d: -:cuuv^CA:oaj^-[ j1Z@ҳ3Q5xA6VBUaO!R%Gҥ)%XCYHn|<εdEz{UwꝩltPhۛ7:vJ fÖLN棪VUf{/"@TzיIq#GqMկ^~ >|Q8y/'ehPIwN[t7kჇOӋWϿ}Wo{Mx0.@vwu)mL6~$Ii bz>Vhls{AwG ~-(dUDoAT B\@L.RHrTNЌ|] Q"\dNllrKcQY36v-Ow*PomAA Ѐ0Cdv6nپzvppHrPAXCXYqLQ)aHDz~:ӅB RBȚl4>X5snuwwrreRöYv[рFԛz cܶm۶] wGM=8  ax! bMFsTZ7op~C D$LZRP12m9 cBpJ$&@|=)!M4tpSa8'q@XJb0"a)q>bbTXbwP8 &}w}>1Ґ'RJB4FҊ$(T@gA5eY}TbҘY0KJBI6!8f3H +0>^IUX߹=t]k:Z4 )@CNn.eYR]onw] Oo?o_Vuu5${83g46H{-?i#h `4#P f7)9w3<"{ .=ws>jSe-9m;7R< zfuT͎ӑWQ5MIVJDpqpWN5tu}hS՗_}KFSzYs8ĊW!LW6F J'Vnw3=mgL,~"P.Q̉)N' 4,fp< :@]`~ڌތIn:ъeng5c.bFKn8R㏟ꯉ/Z[ǔ Ł=+V"]0*ϗO>aUD݅mM|8͇hua̲MSU{3ڿx3G$D,Ӭ)Pky,oEqwnaSΉܦ]1ͣSSi_嫯ۯ?1Ł$rtBժwgWVAkjzѳLp2RlBRvwĔ[[}fQYJd܅Z(Ś3,x)Ԉ*2-ܡR njeX^iH) ~tn^JR\gIi,prhqf"Ua껶7(Q)SZ, o\Ȧba1Z bum6n$^D~UZcq1ch%lL ҹ̝+sBf!$ּˊGW9@sǟ4|EǗϿ9! 3O4jVQ]D3uSRl^YմZ=+@{ !F1kR-wc鮧 A<'a;}Ds:82w/_bL{Rץ2]7ȋ#["~G}th=޽?ן|O>ry#r<7o|^|9r8:"m'O8/T3W=zhiJ>3,Ax8m>HK7 r:ϥ%AW2RK~2e IDAT'}/9%g?Ȳ6١WAOQ&: WO>󿹽N1T3*9Ft9 <T}77(wy#i{[U*z %NcaܙRJ ^A 85z`.!Dg$L^0i-g}ͫ.v6mwE]7(vQf`Pus"i~<4N4U391qp CrJMa#b>eyvp{w:d.!Ԗ79 r8t!ܿ=e}B͒t8NX#a9Ix2fD 50/O'u>$)z:M^+%YUko?z w_}4U8:Hsq2qp6,nPA YqhP,u Yw&ErbND\O7l]b<~DR:Nhpi8U8~y?p2!5sr,M C:"0*o|>Ǐv]z݋xyx|rTm<3qdm݄/}GnTתj)u0s%s4i i$r滻@K̍<ڻXiqaW},)(21xϴ{ V/Op'7 +l08x5!쾌]:8v6gKDK;EÛrJ77w͋_ v]NnF;Ss#"&d`r 8j DF 5N""sD[5W-fجfAYԭ Ѱ.0[s1tn9ebRSN$YNC;y6U8mBD1$" ^ݬ[  1K-.Z$-V'D@j)3̅ܩV7/y"z/t h+Il  uw)jBrOR&b%KEXMǽ8"S2뗨qJwC F~!E튗 s0A@v^^u-xffF ¹뺔S4:7!u )ܣ9a.yy98*?|q᦬|~S ƹY>ow۟W?sЂ;̛$NE01;R"aǠPa3R5D)tLi:~X173v[aBؖUw"n+xb a(biKHF 4 )1}N3%:.N^8:ٙyѓz*Ғ=Ab(ӓQ=$-rU&'fU 6d}J)6jnݱ4H"?_miu;մ2;G -`,Vpקgÿ~+$NhL~iErKJ5eT  6'6P9%qSQUk@#N%TnOˉ1#?'bLġulaFK gaAċiGQzeB:gDr= CgD p6"8@b&W_Xx48؍Yj  QhJH_#8(Kvxe9mnsGp3Թ拘)#!%|*,, h78\< _%%Q+IXTUE"tros^}緷?˟ ! !$EX[熋Ʒ>RnWҤ-^9l͖d5=%uc^Z*7iYUCW\ XS )]f(E'`CltN{u(Vk]iq=|@u,7@s #ƋoW}@L@m7PӔ33 nzjW[n)2!y"ŵVsZ%Q\"q/xIsݕS@|J2O̔j[C֪j{Q8+sU&bf}3q)sī6!DF=TȊ,/$4 )"n~1.jIQ;suyuAW/,̺~t]yLknrkTTRLbF|H\B1- (HA R 8$ģ=\"-C4ӼwA,uC⪍S5D'Ek  5IV%ҤYP=Qh? 9eֈ;"UUWo_MF3f6aj;%g*SK|KlCQ *F`R#3jp!3o6vvGŭK T%xqFSDvZ.K@o|L`5gbwk8y83!';.6.Y@ٳ6 q]/솴]wֶQcD# "︿~iq.U6?f!2i,}W(p[h.?c-Vj~/cKFl0"\o6,d`abZkՔ".p.5W͝%a)%3?N6ZiQ}$2P s!Jw@ ` a@}= K&܌`r ]k);NyvmͿ̍@" r&F"9EVo*F76o=9ͅ ]rmplPJn_A,k0Ə?g7OOg_|x(stO#ӁUhrR)0-}__lueC~lv)ebN]$IIy#t("F{\ӕKHu9XN[Dšz.̀#3ToZ~6vKj?_ V"P7@FkaK(k$Kqp- IRqpisyF+sӞ Xܛ!ss/kDxG"0w+/Z| 9QJhq$mj3lY :V$"$e2Yb m qpXc6azbV#R,wWִ*+6ȸ1)Hoo컹ñæw{!bwXs2n ;^hUaEՇHDƝ|GavG"$ y%o$bfԾ9Ox at歹QJOL[ZXheb%Z81a]ӯ?g<(XIhhfaNapV k .rj Ik|<&EQ6/ ꌀwEin>ҘԄK5-xT40zCyIITAiVsE F-9 s"c˹Z IZ%Vt(;EM{/F%^4O^Ժ?TJ")% 6orj5<ݿҷ/iY,T3DjH1߹"cirׅhd.o6nKrelrQtx8O"^|~h7X 2S$9kT0DjtvC]P3 *w~#cۀ_k;t]GLc6NL"AMm-`q%Le*HhX00Z}N-ICu93KUe|{7Nn$Ǜp(2a*Sj #] *D pPS+v4o^8C3K&NHI`f BȨ[픻kX?5{T" ~ w]y.E≥/_벗o,X͢a@;9NJf7Wsu_!0fZ|pf!1RG96[Vݨ-:*LBnDZMQX0FQDRwaf|)<$]RՍS궻f{:Ϫ߼|>ºn?ۗ_Śsk%@Ra#y:PFm s͐S0au9]۫ S6)%UeaBn\/>kceBq$]\Ž4C,<| hKN?||hi VAXYSZE1N@q]^M_)+ooYz@-6]Jz?/xCL*fK6HzY'7fI&%r:j6v7loq̩KRAw9S5_ Km[>Q#'$$mfZ[~ 7I,d(x}yq% ӗ厨ƯƋ,2\> 3js;yc$IĒL\|I0#25OΫ=<' w3fK&[E(s])mZ9X(Ek7jlǔ4bT'o*s!m߾{W/ͫog'bIy۹ZkZֶ*, ]EDXzP%HDrʩ ðiЊ$/s)oY:^q'6#_Vlc53 pN~j,-c&QGd~LT.J+HX|:ęW$8+ E(jtV'&։ɘM5-]iV?яs OI{J @haI g워 ,I*6Ud̳Y-E+˴8yXTq)- L!JcF<`0I^죫+<EXuQ碊RH93A|"VHu~:f9R X}kժ5H^d^ H_0Kl*tpv IDAT$ p U<p#5#"W8y4+&bF2q@D" µpYVs gtA3S}TJQu8eI(*ȩTuwd4P?{Gͫ^*n; WWW?b2:M㩆I~eu $u䒇!$~DR)b9z<3o۔1_#̏zKCv_|?[-6/K‰m63dd~N.b;7șE*aSn™NH ң]ڋr@8ss~ف?|gw%ߑ $wHNDNA7bngCDd:ɝܺ!vT.umxrRJ0,0&7uC,V#>K K44*du.qw Mo|f5'9p94-Q7xmǔ3| M*Vi7_>-!)qRbyV7c.2I_5`ŨIJю\o3Q`3y]cM;؇VLJqq >:9re86 !% LD9甹!v67qV钛GӖ "e >4 KaWYX#ڂHsCVV'9=""bƹz?i:u#Г=y N|=oq-xp,mY$zRie/b>ZM{ʻ]&.:I~Ya>w1%ID!'39t+vRӧ*9dڸ>LFr~ ]pyZP[.yEZop"_WbG4};06?v*+lkUdca9srLTk=SmhƈH@0! wcUZs%C$)+}qRnr,U֢Mwo,4&~VΡTF/ʡ0ԋe Y@N*AP<-[jU.j3SCrk/I|311Zk5x D- a]AhE~\ "DS)7~`"1oxgo+.ނ] IL8-^>H/ׯo}0 o7Mh9ar]|Ѱ T;~JKqה7$r. x ~C?i^I,`tcXiXswNMD"^tJs mpi"dC3oq<76}]y@ H0r,߇tr8E #bAOΓ.$/r*wvo}~>=?ş4@At)ej-5\6mަk`n R4BbGx 'w&% _&M$Mq,|eXRzU2ښ qwfXL`4lz8Z.Rˢ[җPBڡA=`Fb=2/C-U96 b˞Ir/Cy=`N:usG1$SNA#q^0A^W шˀinm;U3E\5NS ~}#w:M۷?'_sɦ(ofлytV+isy3cC7ZKt&s9K@$%S"v_֦ aҒVxr(o& i^q"z,:erxJ>~#_$g8]L` I`3Qm۹}1 `{rs\k}^Iˤ||&ssN]/˚%謵V͜…%K LU3vRfaK5sw@+lrP黾ˉ+ƎXĒRJ"0tDjj1=YK)s~ 䁆=Ǿ8UgZRՊRϢv7o W?vTӴQ5;rzwss4qu5d.jգ%'"2 [[7ĸ%wu.$fyk hP7hdgMgw2s6w4[O YVI$g߲KPpF U![Ò 󶽷 6&k{.BL4@M NBN^G`c$vݿi䯏AW+nj";Hf5Z wY%!)0Ý%hJ}QSM""(JFrZٜU &)u93j6Mvy^k.r@qu;9Ԥ0BHjg2uUyBՋ!9 "Q㲂D`h%H2E]lv7pLshkz1W,1Z 3="KpRD DĦܯ8ޟJ\ڵFIi͐$Z"7S7r mDB+m6xrpEk ͂Z7!`[nD*W&$1ᑀ!,͓q<wog' ,HO>;dZG70s-)aK6'usRwwɊv*!%QJeRN0VU$dI2 ;?! S^|9;7}ߧw;SQD@;9ގk1pp(I8XM)Ǒ;Me3BT\IoK,z+55 c.Jf %b!f0V= ́.pGu]>Ut{6}TEjUn'GU=+Ejy4ԪԜ6t0V'm׆vEՃֽެrʢB ڦrZbD}?8svc=/6MFY"Tșkibp{t2?J?yfsDF|z{d%R-BNjX$GE?-x>}?~!O!]%g0 !188jJJ"I!ejqF:c{>Ԝe (YDNۭgsɌB`PSzR>],'''P^v.Fbs^$@M7)=<Q4S<0$"2nTK Ii}tx۬|S3H|~ӧ!PrM⬔Al#[5L"9Ovi}0&Qm@>)D?1YQ[ZxT6; ufD0f}Y[ZYOZZ ;b,Wbv:""5es%iHDRjBJ׆ap}iDI$;gUB";$gĉAEFfm9W;$Px&7mB!R23Jy_p=#Zĝձ#==\0쪙7.ȴ-Z=Po4A`vlSJ8H^a> 1"x*5 1y_Ӗ{Q!86<:0f^ĭ g>HLªL4[VSV'M) @rg rP"3 Я'G) MjC 6}>`fqegD4zو irɃ۟ya5a4sh;:};%!,%PUCߨyĩ7dx~? w)ŦqMaoY H1x%UӔr!19!0ąvTRa^zaC>0dWg]ѧuzQrT4*~>>tSWef^ XGY/~r9+C.:V81&-ӠsAscKB/c2gRb%3)k&J+s7i Ȕo=_.f6*q9-dTk,׵z?u!B &)- &tL̋Bn $Ȣb&AfaC쳏][WK!01Eo" g' wI}C\LjRJCJ;0^JCl4ST}3suqY"??m*'LzmQ?Ln0PPI9s+ ThLK=ˌǚ1"Led"=`˃n!lY4=[(T8C ؠJS*~q# !4kfrdm[oZHl6buCC8W~URUeFD4W6zTtΠ- ~3%X荝\ 5jlܥ%0SbbJSb!g137MK9d<ˢ !`JDޱ^<ř[ߌz1[uTS"Nw&\˹R_Aѣ1QU51Ǧ;3 Li( qt;FA͒)ؐRa%`w߹{7s<ɊAx&R:la/ jGYP `{qoڙ,5 /QL'55|/V!(8/8:3?`È 6a M䮉.,:n[4^S>G7.Aybq0Ŋ{OH&e"#F Ч@]۵mBYŠb0͉C4SFSB̤ LY%ݲi:ɉdFHܞ %:Zv + ā9 4!NrnfR2bQSs֮ubwwN9eMFEdN6vXFHDI$->R U=*ߩ,YSj*OȭJq#2cdxT*jػKFN%.K95] 4h=I1r:+cයA# E҉(A ޒ:fNpfgZ{H)@f@U,`",;:> ic:AD)@laJ:cU=\ׯ[OKa9OWW D$98c6p@)h#&cצ:JyT QU>?g~T~iMƺyshضM׶]6c<^L\RRˉJm `"9/TKsfjyHC5 )%"2XJiDh-ؒoc9%f.dqfrҫ >l3s7#=)̻>bY(ܢ^ѶmmAkBΙc1cC۵V&jbTeMʔBLDv:HrIryc-ॵи[H PuG;6+ePVr`[?Ҙe%!p+ eDl8D&VsP}tsLʊSӀf@YŌYI&gY,[fS7gI?HԤ ܵR΄1gb9+ a!UY\P"1dm٠ήu>U:?|(4Ί@< ]?0`)RQ*83 023l\f3eQ*3RmrA:}KVqLHeLD6kuDԬ/o]YuU .ˮ֫X?m>d qly>gnȚ%#ndFU"6c HMhmwt"k; 7VG~~>٘AM!ɳW2=Bz#HK3Pi [27eoyt?^g|7}>v~iѧ}~o]>f^j6:T/xeSyrM=&En/&{hNlmۦM xQKa(d6!`/0ЖISaH!l"IȼweV FP$s^i3 IDATДBub{OyT 3c0ޔ$0k8Sb'08>bI:r51,4"ފLa0ol: CuSA%þfj*40[C5tg a T3z "I1]UHx((qm=: 3%i=z99;QXF)tZ`qϵ!4nGBrx15sQ,`dVsn W@5TE`d"jQ с(y|ة]2mO~plį|񎯿}o' ~]zWGTaF&`fS"3aȒ7O{N\pc(ّe~IR~@9! 9Ad(aejP2#UR#SO||Sr ᯾UE՗q;WDŽYA4 sxß恕m}`:nʌn-wr7<v|$ *v 6EwgguY "C e<%ڠ&*"Y%4T^ q`985VNjӜ0®Q!rZʝΉhfZ&֚EdJ$UWsJuS:lHOwb4xlR GarF |;b`3h(:0R7s 1JEiu&nR8X2-$3+J%kou| X gf.qM۵ݢk[YE˫Q?KK7;_VuH"wh3zUfnܞٖuZ$}wgy|'N^qUz}ٗ?_{w`Z21W<BY6p i:wp^> }Z69EN3$#eM80=`O,϶ yJ>Qck/d<\ɇ'7qc 0y H a^/忩>|[c˥c!Dsd%ݟQ_s\LrY)ǀ *Iv`RL)El",2Fb@@sR`1FLv RNi)6!g0~UE)k0&^.a*lDD^\3 9g !g"Z ]+rN ^eULjb YQkt]"M#bmdPlǸ|Ҍ9 PjM@`U Bٗ˦g`0+MRMfC5 (iD٬+41TϰLg*)FpyDfKu|w LHF?kB6I tpxS>mo}7w>?~Z׵=b?#ۡ2Fopao'^w+W\tiggqg?߽"vzI[ n8DާaS<` & \CLyQU\maFf?H|ѫ~p kL¼}Luٸs%DΧkZ;cɏsٶ+}-<b&XG3ll|͹1w1Cp 'bwyY,Ml֫u1ղy gx_+=eV=>)QA0PV͓f3R*KN Dsss"5DJy58Ӏ:s3^ui2 {&3yFb#9Y퓚fS"oTǚ*4H6PRD(9{* VL_ETkg3 1hyqYmvH8Y4&"vvvB''k3qsfx%僢J0ZQS5l&w yc>W]ֳ@ 4m~7bpwr5ؕ+/ۻ#<^] R'pFJkBh 6}۶i4gg36lwTQG 8o|9XCOߡ/y.#7<~53NsWb|daڇ6oZ"5`X0X4^GfVJ9Ux#4cmFf|WcmUiH4,*DZ,!Vcs8FfggWkOCyŘj"dq|ԩwJ5mBKjs]:*m$ -L>V|O+<6ź B|[ p'˛*n!AFج[92ȧӝZo֮fٸL\Q%bl8p ؖc>zZ#&u5y£7o={k^@5sH1(d(OM/=Rh }Z[sB 1ꂝ&o?K{oz>+{'^#|c}?[4%*W=>zՇy:$>߸~'>p6Xb9s#SM 䋑C DXͦu/* NMt\?J]P'S0Y1ڬ5)M{׸90yV`YWSvիW/\jΒsrMEfvD)ɚ&2_CUqaIl?H2sȌr}ߟl6D0lc#`9[:a kk Db-;m'}YNUSJC`fQ)!b)gq SUfԎ. n4-ʅ(763o|ѲMm%ԯm˩1攻"&(yФ$9X 1.OF/a/f _``:*[79+tC `vmۆ H*I2v\!E9y~uO7 "] e <>m4v]#w۸"D~*z:+ފ35)ж椮GO 0RTK 2eZ{T|&fČ. (ddcV΂KiRd"BuB?$ue׵b臞AcaIrR{AhP0"-N^N0!9>D4#` Dir}NP&1'- (ʂ{#6kU?<䙑F7S$%L.`0ۆ!"RZfALT%x 1;แyfVK̭mVp|"a%*ibb{&; *lY 3%tv#.} 7; aR=\̤jpc5u"cpӎ{R&"!PlH(!JzBH"ŲmvXm6sdrnl9;ȴc%<"2)vCPQ/13rVWGw߼x*c 0wf_@Dvy3wT-Cr*u]tT829ɶ,, O\;bǸ+ͬK&/o43sĠ0>^}m83PbM눦&bDNZ=LDd?H>̩L<Is :fs>,a^7m !b8f-Pjm&fb; 7y1F"Y3MdHD_9 Պ4,C4n1wO_N(:a>{Oظ1(*hƌDUYY ]h8 3fVdZ<҅^ Rg&/"x$63ͭ1Th ;Vs`]!0q0C,M IȔrbQmCUt,2wm"R!=,۾y[/桷m,bfY^T3 g }!bص% O{<!V9D1LM*?514]!#aC%0cs.8Dw)GTcg=O\ӧJ R%PEx %pe,WQAL.*Eәz\qqhRe.peW+'O,PYD*Tg ڬ.L$FFcmu-v.u{._qC0Y#o/OI۷,a=>a#|<=^3F?[7*;DK_37tuTh"\ĥu=={XlgmQʮ803bp)vdTOO8/&n4,YӶq6~ـh/3xp̹xY+ݮW3R,fI;x0 C16љYFODG"L-]QMa,fuϪI9K*O)|ݛpq~2P%@_566Jɚ Dcﳂd11T2w3qӅ8catPL|R2A96|{N.vVo [8\+F_hN/26E{42$Kh˼u7sWJKͫ4'3mE2n&Xv2QIc9KPbsB[qӷ<㽛-$ *ž@#,7< ˋKW/^ܽ Gn}#yņf}o-]\.σ\Ʊ8f{ŇxE'Qд"l4g9w5fycg?K!;ku~CcTW]4Vz놂V<oUI2%DpȦS:"{5%KQUڇO_'֯mV'6rYx9}_q xIQ1ph`ӓPxU71m8 C)f&"u F:m&}"9K<;_񱏦 !4D}PՃ2/m N·hg s5mNFD(| a7Q?9a=4ټuBWɗ>U2k& >r_Xӧ{F Ѻf9n ':Q)y!f;>"G| sW拭zdǾP"R;~>.^] f^RWϟ].AթכU9'%E-6Z,m}Zo-=aH"J|oƷnEpX&!|f֣pR B!1SjmRhL%K5LVPҔ`5k߄or;dVLI(nֺl1"".76;ݢz0oBO[|ރu|h^B+|[ [4X*U[kDbѬa*YqC8ZYPO7z+Po2R6V%TUcdž|C;N'WCeZIjcHZG*yVٵD|XIũVQ9"_>Nx~M5VG.w4bHE L@ı].wBpdxNVтA@%YUNVM?dQUMYRfRN)aH9;%!Iڨk%MT~ B}"H(L !2~-> DDdxt}n鑋:$qpLDqc4 6;Pujl^[ͱz %p@֊66T$ϗ][{W,wҐuP(,_^z'!y]? $$ԶB43k:m{Q4ɝ4}NoP/![vl ިVo|Yw?33ѷ}=Mw|+7>|”]#4J4)%@mqCUf]q1iSun>r'YށWoZ"Ko!?IYri<ӡi۝ݽƜo)"1PJ,Y_ kN)sNwݫ Ty}cHR=,]|rrcTZ\L1|CQdaV;u m(tFtAq|Z [3ћ_fIo|q `_2yqZt &"È1&+C6loֿIOB%Իfqr]"~zіҿ)H 5kk^AVtz Vm-I""7o/|c){"NvC*K>:z]=xOz^' vz njVoA2Nd?pQէR@u|Uc &5\Zn~1[C T'+128eq Z@fNdtOԤV3P}~qo_+ʆШ$-[%$fBH)3cX6]8Yd,CCa-6 I%(mF;;jɞLOqaq:\FM9ۓyZMm=}sDTB\3)ܗk+ß߽mh.>^˗_' ~#4_  _mob-oiQS z>*\U7xvo.ݽ{g9Y! ]|+? of5~X=H5}lbw+}'4߿̷oM6׿p)@CA}bpV@1 #%20Њy¨iT s' GՔ4qI' {л{uz1< (./~?u#n뺑~qlb4XJLиRHyȒ4{1*1 lil$r !,S^wo~SUĬK|M/L0,uz;3(;LR vnl/yM{xo>\?kz̓/C [F7]-*s/"(1-d9>nC`εoz 4,~ /_yPT-CSa2hJynDr۶n!9KY#zP"R6~&V\"Vg%LmXPG/I]ŵ[wbLisdbڶ!.e&}ڱL5@] V&^WХD:.}ZwԃXz2HgC )3 /n M6/^yco" K8 .ZN0kb+3![J ݍ" V J'23*}dnD fhvߛ&frѦ~u퓃;{wd(քQD7_{dQs33]$$vX$ %(eD&!Uq㤊"$Į8Ev\e;QY$` PZiЮVyϽGw{c^YΝ{^}5:l['g4"ME4sk jT+۽ Dp+{1;tlQvv]STG$\p4g8+WRkE"]_:AOdǤ8Q<~ΪmWJ6f;)4]Мj61@ztk-b8u!]I$>\J+xlN*>8#i>}+gFJQii#}”Q]w+8DCELC!ߟ6A8ַnߚ闦oto?/~-TgǟF{(I=M; Ggw9Y wwA) Q,Iʍ}{',t67Df DU-AD\{"GLjlyBnYs[ 9$Da"h/vE@̊8άwýr $jlӸ4+ڍ4k8*4ظmǪ]:UQt}SJ9weZ[xQ!zz Գ<Rz?MoC(ZmKv3sohh!V+03rS !vq67d!'pb51x?@i~3*H?xX C Yҳ`%=|EB Mlj5R1ss p &<9R`"#HXkbz+ph'9UըBXHv*\kfϦ jX`/ӿ|eov&PLZ=A.3yªgNi*Z[!Ċ4c"ٛ#Zr$&/ck44Ku'4ת .Q\2a0aV*= ͕%.5A)I1Y{%@5)˷9$0aӟ7]<]X"$$,y"u=ba(!Gw\@? eF̀<5WV 1+g lMcĪNAs45bd6FGǷFZN;N4GS% fVx}ɅY͵i(N̼aW3 #PwonyDX2)ŕޙ1Tش~!1Ep4gnlMw<5&^@i3mS2O$@"{B&ByQku-!qITEAw W0DÑ4ۺ]hOv|z a-NKRJWVt'¬ֈsʏ)+}h]Ka{c/)fBԜ ߚSAhL2tvR笱ȋ!s~CHìW^۫YUYb(/|tfP-^y!8Q[__xptwhaW+K 2덜Wg£WR.Ex/5//fNlolt@tB "1ua@˕Wev䃾1 %fvBn%2kђ8l4(#i̘c葉ز}ܑ䉗Ttlil6Yh5 `\k焒 F@V8Q[zW!][pa\=Jӫ= MS pRCJ3Eȉ#"񾆡[ɔ`/%=/|{H^)&ppNM.&##8#"ҙS#<;N|W&9:b.jQPU/W q5=b+_i*qr|t^cSiS a_=s4зgb,um7Ta̢6Տ]8JtLjWr\j{2]ӻ^̀4-7281u!uUC&Oc磽[Bc 0wea" pO <3@(ґȘC*m4Js% I TS |ɦln7om^>1uvYNdltE1u|cʯr*V9c^kEu s#A_% 9CX|Hq?~&w|Q[]9S!(lH\"qF88r)z+[$0Ir>4ίh'g)fBVi#?9h?%x±[]HNOQk94Ml+-kAU|[7$I|LP| ( p^)F42l`$Σ_?iaN̑/?%-XbsO@' IwSj*$?IG$\Uά/EPi@"ODNr@܊ǟ?^MXG{!N=h}?Uw?]U2^smj-y^?ZBg]$rYUlbG70ˍ@k$NJXY;u!!lqЋ5Zv&F-F{q063u:XX{H_oU $tRM#*U܄`r<NFYgvGHs`(#_@ 叾KU\Y)'~-<=ڂ(рbi<+jTwuEQkIڶ1CRxÑ+bw.NRZiA*U "S?ҲE=:Y'oESw)5GYaA=N,a*8f"w=ᠬX8k w~8_bUZs D)QG׸,V㨶7ྃ_ug-0Dy9Se|dϴ"Jt8ȷ?N`A3@vӓA^nC#xtsE {h9u\]gĆ"gb]V<7b97, 5ԚB=Ա֦Mhkqa!˲v#Nt(WC[!;@>YIL]j砤UuHkbEJ33bR33{źX#xEaZ-~k_<uMיB>l i}k4c qP )|P⬈[AUB0WdWB!쬴R< 7*.Qcȡm# 1/}O_Ti EݾP5c Sya1 _x&8kė}P<wwobf*93%չ0LNgm[ 2mЃ{I SsoC3T ֚qvN.WvP]yVᚋ{qD |onq" XtXS/?Tuז'N×<]5-mSPv~J?n+17q/ 5UZ!f0]#A1AУ/IDAThPE+TK˴sk:'6F3Mzty8Fsd9bcKG&'̜TYb*4%hܬp !w܍?$j T[*.njD tY]:av&w>5{Y91Z9sARL9kD\8c8Xx|Ԩx%71ݟax6 ~wɪ3$XQ;t{VUޖ< ;Bc)^3FH1phoޓ ]*Ti=\U-r@OqehOw"m\O]dPZafbtwPNƷtvaSX |B-k5Kh8ltw38N]ni QX^^smGZoxr6hOhᶺ8U pV$iHb²ry**DO_:"|rg ט7lOF6^~>-@X\XlyQwwȝ8&X'&Y)_|+ %f!8 yE<"ECL ;yo;UnM= J$M1&ﴋbM}yrTrU p&1_snЉ#"0ؓoNIЗ9t8JR\s9?1/OBJ;]穒Q;U%-M\25 F˂)) C|i\k+2`Ni#m^ZPk5Zq\84R:ɍmgs&6_87p'N/܀Ee:oϷ`龴])~kJ kGbmWRW+'wpթfUѲT{u¶f\V<j׊Rt qc-D0 i# .T NLڝNA1)Z<7rS_keoDf$"l`?׎r{cd͗I6.[BO!HEDBLy*uGD1J'zq<1q L/{g @qz)t`#S-AʪݬB(zpf-s`o$ @a`y)2qh[xBsljRI3_hML9gμ)W ׷I:(l.gy=G\&f+l͆&1O&ڊDwXOƊ Yy VSʖ1l>G!]waB`=Ap 0Q3mi6b  [U$Ď5J :r֙mN[ $lR43PM)*%' M`jip4 'qQ鄰Js+;Y{ k]pR00xz1 k`w)"%?EC¥'M8PYZs@YJ. ɈVMF2H}Vˌ .OOd# aDiNlfH(:++k'MAW e*$v5%=wxN )$*;tKX.(gSYI<s0eUK@B (Ĉ뮇5+re ~޼C8 ~6A,v?W5nAΰJ8+0Y7:B7^BW$Z"eP?S 9=3{Trw]q"ƈw k<a)2_T)%p…- c"` u6<8y}0i*MwY?,̦ }qXB8uAd_D+qҾtU=d6SHܒ@] :^^›ʐO˷kZU.AIcke3[X%N%`߿V񸐓Lw4y-b@?TH|X|XLs ^.2\t6ʪpVY|؆5N;ؼC"B>h9 +{~ӂ=j gP [FsġղKw^s>a+UkWVy1W>3O LG5 e $Ųz>Wnj[Ïz5jm,Mp8yU\` ZKIM6ZM֊ 5x0jŅR) ?WߣuOk1ԯvU.ykrUq<hWU.'$<:9Zq1q. "4j~q^8Bw\u6L/jE5`ǎm;vZٳ'MӥNя|#_W ơ [l+w]mr~x͛7w[$I:GD7z[ ˠ&5O~-r뭷߿@܏;wu|;o5pye؝-)LOO\nӟ4DTuŢ{~ /c6=za~p寻ꫫ-N_=qر}]wu绉h߾}'N8 [+&'';,..P/:v[ '(j朢d$:q_cQc(}٘siFΚ:_c=Q5jxv[QF5jԨQF5jԨQF5B;־IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot8.png0000644000175000017500000022742314717152071030264 0ustar00hanshansPNG  IHDR65fsBITO IDATx{mWY/}cε$! HK1E%4(47j*ReQ^ M \e(".]4hٝ hTQ[ CBr{5?1k}vIN99ך1ǜ7L2$~h˩z0ww>N2$4,{?\vc]vA>He}uʯJy]]8$L2Ї>O@^{{{Gґ#Gboog? :Զ_Ox'Nwٟ/[f~~pw>vm5|}f;.T^|ӟKsmvСg?{{/~p}s??0\$L(<rs_~??/|a\~__}p뺝?>}5|+_kHbI&!/k~eccOc~x^;?1]u?_?W]uU|2/?pW8q-oy ɮww7O2~:3L?x!97 P~z{|۷}ooK|kI&xI&dGL6$\l2$LrɄkL2&M2$L6$\l2$LrɄkL2&M2$t{'Mwwx_;;^-_o{۞??|׾r3o}.w/pUWկ[/7U^7Mn? 77__cy뮻mo{}p-<ֳg>n鑞~^$__o??O|}CO$G~G/o~Ӟoy[~n馛xg?>z+_Jozӛn xyիn?꫿~}^ڌ/˯yӛ׿w~wu{=?ﯿ8O|zPnnIOz/}+^}GGϤNrɄkFy^k;g= oE/zW\'<;yc}^'>$_ꪫ>O}3|~f[n_g^q>|򓟼馛[୷O{Ӿ_:rSO~hQ80pO}Rg?<2 |M$Lhx_~%o\{|;777_Ww}ߘs^,_c^nllloo}Mɓ'wvv;`>kovw}ooq]wsx[z˷|sb/yK5y͗;7^uUOzғ>?w_,}㯺+}#ԧ> {=;Ʌ%~OC|;y;;$69&ۻ~~gl'gWvew}#=  ε7I& pms MrNeµI&bo0$\l2$LrɄkL2&M2$L6$\l2$LrɄkL2&M2$L6$\l2$LrɄkL2&Sߖӗp$L9 85K)NtFVs?A ##% pAb+]$[Z񩑠$AN`"#̘ Dܸ>HY]OȔ..IX,Id%/@Czy[m q!^h" ,M`Zk2/e5zoŅLY Zd) Fd)YJ)4hYJh&jEw#2t w$9$ "KEF)яK_W`uLi D (òL4 H[[?]}Di$ .$RXej[Z,VFJ$ h nH`Ҭ"qErYϐE`ggr%,(nD0YM"`PhB:Ǹ]6r[A4/I6Rg3&$KK]9ͺ33$d@$R/D 9nx^z^*Cr/%ܽ,ˠ}|}dµ3"lU6 {]?[z3: -iTڵIKNBCTёMAeRh:O`H_,檞cz7"4ϊUek(j5x_rG3?~^٪ .RJrw/6ĀRPxCvuZ:-9dL %Kʮ@k>[<6gda $J-X7@tԋ`Q#YJ :z㓒Uӹ)MάN6_"h.FQ y_J [Jp"` m0H2h݂ILd5@[W{P,aKWPWf#ƀ5Vd +h\Vܫ}=[TyumMu fL@v]W Fp pN1.`K)`{8 ]f0SY$H1l@Zuz (J1LvZ2 P^ٸ f7`hb榇Эpc,lMڡ=m 6`|>ր̶1VnlZ񏙥|93 ٥.CF8˱:4GV28GSxPf`v^(LŢpHN7J]=HRX54!*Sp|Y?vٽ`8dP p&#2Jp$] X1 *qSi&w)C3[i`Yy|(Çhtw=Ě93ڐ4 IR,YR)nùVJטcM 1(@GuY{+Ŀ !@p8"% 4ҘdU\"i&49kwlaS-umIy'aَ`Gv9WT.fċcQR$-CV獻Sӧ`dfhKeC۾}B*s'Jjih5Pao8(I8d&wRu}/\*튋 xSc>BtI4@rQj< >~e{UvTi47A'␐:\* tw+.h A<%)foe4lFZhaFs\t*N$OZ (0UQKVFzb\E]X4y5:ܜnT!`+.O]2KڄzPK("薬Mtѽj/U "$~J ŋARׂM& qmG@T.ϵsre)4gxiu6"4(Gfժj\Qtd3[AHۀ5R"ka:&1XbT1/Bx2jL\pc͛LX ψzC ǓYb {9&Òc @5\r"Pяr `Ky1ɔdvwj}J Wbnr1@AېCH>pCJ}uMpHW[u0,uJKBOs̽ zIɫMgh+J@8)vaьBk-(T6åRdD[L3teQ)9WS.9JVCkuM Z/d& .Ҍl4I.)b1Z$ u Kdr9baF{TC䂣 *p!LE uds z/#hm28az&l=Hdik (J2YSrttK)=n 1uάC")/ E{Z,.f݀J_$ʓ ='PR YdX-!Z83 {b}@Rٓ C%#-r,\BWu)v2<棹xD""! h{G4/8"Υ3H1y$O5^ I8 Y*d\$ŵ>{nv WjL$r.CQHhBe7C Ž 0TXU Y=  >ZǐՔ]IV`0U@g)HC)/$pʝVжSkIȠMi榘jI, /ErSIX I zg@7Ҳ2*5E)75wA#u!.LY NJ9, Β ȴƁ %3 ("gDbs#1 %e\tHȚn#rU4$;pVqeU Tvq,dL)uЀK)@ZRI{JlKzm\| I`Ib6<53-8nN̂3@F&U=wWoTtpX\w 9iP .B'@A1"j%G_!Ng}QkgZЧmԨ;T+D+ LdJ S$ddQ%X = 4(򆚱Q3CF:j::`1!lD&T"G$i%#zJTs)F`\s\)ujy t0BIQ^BL,K)^e9|81Ya \RG j ų/EM esEzHLER0] &^&,aL-df -.%,@ɬKIJ!YpEF#0I*A pEbRdGBR5RK03cf%`FThHU)s9 4,YtzOV.<},ژაB'hz8w.NL2ڛLfqZanp-Q:(, Yj^R2KY$Ҙ:KaCЀhdGuF&UV Cp$G&z7HH)uaw)ijΓfUqAlzM4Z)2%wsi TpUcW##dT i^ݮ]]IUC[KՂ,*Xd]W:jYRbv\xvv@o P4ES^ ~JC5T1!P ^`jDN%\)uRI<E* 1bƄ +?󂈵-AR"ܫz^u0:;I#d~I*Qmj-̊l4j(@FT-"`TBcP|Zm/"vO]: Za,EB8$ *y. Miȣ < 45d_,[/#{kDД ֝jcARRT03@􈁍crl."IQVrRkߪOaFN]5[Entt30t}:3a5IyIИ8"|m>[imkmkߨmF3!" b{]E ?AC SK{M @pZf VӡܻbjoT4t NG-Q$#SNHwIVBke3 e.̫4PC$r.,UGr.fdJ[RkBO̺KKH|8D{Ʌy2S4z |Ek,8m#tH-+"$Aiފ ̇l/bx8XxL/"<1u4PuI$-s)}GaBXJR̖$yw݇P|) )L rKjM K.I'a&lX,C\>Z`龫6lh̘\wGp1hgo*jep,B$%u o9OTguQZaR?^#.Ò1ט4*xEWαRbנ5)Z\CSܥ e0dHJRrcK`dɥ5{)pڇ F(-I_:Њ!FzV}zb^k䈢QgK0%+[Pjt2`Bŵ OZfß@0oZnZxGY`Uc[ vdl_f Յ lgZR.@Jc"I\8Š"K(,f]t趩o(d6 F IDATɤk T5j">[ǘqX_7="zAjFLFᄻgLz\g F8sQL/ѡaµG-q.eZë%Ԩ0&}:fX%H΢9C>4(`(oWK0=4*:)șq>?ܑ=N9$axkQu1 ]ţ¯ɝ躾^|=3]vlk͞ݜR_y0;HYr :Xy7UƮԗ1+0QJ&􀢯_ &D[P+^ܢ6["kkXcyjf 8˃5Lv$B UH]0uXvD)@*>"s0mX{a []K2bf*5"K3f}[R9x8j`zmX%gE;SK<8uG C}K{d%j](^IA o3Xiͬ:AFzQZf(,6^#JGPOIt/J1B k4MMջcl&8vw* {'4RTo6 *eX3G:i8,VJ5u84ܩj&g"VnT#ʁ5-|v^Dv+}mDZ#h "`f HR$RVv؞(^T}rMR=vdR?|,eFyt=zf0)UDW"Z[,Ԫ S9@"S0«* >QBqSCe g ԰۱6X#m׵T\aѹzO畲+>y]\2uK*i}ÑGmġ.EęZu݋nÏh(<W܀! ]i= 6j`L`)^g"d)5#>qr\8([OSgRoݬ-%XJaFf#%Lde0x8g #5n}ҠbKxQ蹊Q-u0Tm"zԋF3T} Qzs2,&9<<6Sp"gx}^_SAoPH6ʦƽ׆*?@)=k2i*ֵq: T-UX'EfF  #drC?v}\Fؑ3u^G1[v=Qb3Ej{-E52M\go;=ci o8Xq/}Àk{3i/*Ն3U  0۫Q%(Z7ݘ*A0[ (mp QMXSUХaK0OL?)bscO,sIIW>~k_`ژmR$] ,RWk)^x)fd$(M\*D@Dqa'==?km:[ǵ]^H&[Ni Zc<"I䮵T!}&hkr/^hϟ/ n̾8x룬CGRjuGѩՒCU1j: T{vCBR֢妙F\wx^eΥ- JJR[jL5t5 )0Ԣcǎ/| 9Ϝt!D_C]ܣVl*E&s^dk(88ɕQ#{ъkKŽG3R4g+ߛ{4@&YD8vPN7$rnsӠ˖ՙQ6R[sF;a3tڠ#) x YH8*suN%Mo;nz8ȂuZLKȧDs\=椚@(8 oUU :vC9Y-=L`P]!DjWWi[s+Rq"$(7D"qղ$FKG%O) (qL){юRW^bHv])|w[gJi=T F P̄Vy|3z\EVNKft])VKEk`}r2'/ *oiӓk(~ F6P`Z'jW >mmq9OACfHy 'HaWMp F:Nِ!E fE=ĞhuOY.wv䞋J|٪Y?77燷ɊJoHC+(Z6R _Pl xypmXߢ $ : 0 rU%٫y1, "=3'ԯI)ٓ3ĵV/Z!KV>(jYkVg  QRCdob-ܩV|`zB u Vim6RmgF:J]'wS9Ps{$C]r?~r{'YʞiKR:lFX81 Rýe0' yrOs2dX{pֈ#+TxBsLŗ5a)ú*.@mhʑ 84\o+58R1r'@%xڹ3hB( ݙBc`V f}ސHEeD3ukGhE_+=D3|rCZn@t=c|5HU=%Olns.E@xJpgg`cc|"XcB>zbyhcv#:UjuDhU7Jp:^@Ajݍ-RdWXbttRJZSH RP4Kf tCYp Ԓ0SH1ԉoh{*Kf_k޷ @V2&&V^6Ԏ-%dgɖ_f/dսsVq gߜml moy葍Ç@xA&},)JGg"40k9mq| 8P"h14*($RT6ժpDQ2q?!u\{c($jU\j\VMDecW;+M{4_/3@Tܣ;rsv_rq)sk͝-;d_t8"LіhX2giFZJYu]ץsl[Lf}\Ǐ&q?tiKወ0&wK5*s13:JM0N/L`*AӊI(5YXV-d$QjҪ/!kA)b e0i1^Y3s8skE$b[:Y?u5n<j֯k6O(ۿ^m{Jcj רhsΙLQ?/\^ d6S{J/oIH]J]ژKJ~Ovѭ:r'+-u-!ZP] Kpw@֪M6N;h+VѬmV/yOP\_yk}L":ak'^|@uv}Xӝkkq.NQ*)Jk  mLVUhL)ZF"ʙ㏽X Ĕ$S:^$1#-勂% I: {N)KH4%t+:0G2CJ3KyW 7Rb(9w}ݼ]:~!;Iyg!yA}p+ ۩A*9,d 8HL ѥ.+;.^MXN.|e`jysȚ\0 ۫4`ht`CSbj# ռk .i読 R b٬CtYwlh׆Pgl-Pv5~W"N\_V;:T.C@) }'pp١Wsl (QX>eE--xCPxjծy킗Q{#q\nwa,հܨ]"^Ɔonl(δ&WG1@\k!Q.E|k#~{{{\1yLYW)=ewvt߽v/9|Tu)jSHJ顝9LDnT%ܞ-@9e)e\X.sB9u30 Ւ7}I]כٲ΂f#ΉG_q# ""O?KIflQZ91H[ɘ\IɒF{ФԵ x(msŁCEmyXJ?Eb"Gs2Dfm܎9pGp{9YNC9߸6ȾslR`(i dL<Ĉ68!^h)~*Q#B w-5v%{; @%Aݬ>)rwCMRTwLf)uO JJƮjRJɥ,Ur^澟]s͓'Cy,0%y{C[}I˒%3uf=’Oe೪W+Ѭx4L2td<\P!k0\rQku4w98~31AIwv凮hiP l)i`m{f- A<Eg9=kd| K kZP\-m#6F-g(CR^RK)R~hDt)FX54H!%vO-uܹu}uve/Yוe>qWœ;;eRr)Ac d_,lsagw}|KdYNFZQ d(f_4jH T{hz+[E[(rl(p@嗚zB<;[i}dTծ`—h ^Z*]BFuF0(?!SMgu-l Q!vN9AEpG)c'0؜'[ i*or/19fƬl>L5V4v) ''@\\;e*Ήww×^o\rcm Vc~5ˆqqZRj#* NpK)'9WF: 0S7ZDu.2^G2d=慊kgs/+V+?cB&Bd-QD."G[h.If}Ҷs)'N~sRYleAdk; pdO. # #}+_>zh䊖Rv%)KNvQ/x䞯m]rEښW=d& siDDs{غ6u@ZJrƅD6eyJzջwVVjӨ 1{~?CpM{fŇmš5}fTIT BCS̽bhI:$pre9{%/ݣɤwR Wb{2Hn}'h`V"jޡUA`R}?KGIlls~힝DD3/%γrBR|cyѯwe]?[j(둠aΫIXqZARG$LU7zGFg4]ݴmd/\OjHiMngGsNW\{㥽D?շÚ9BF]HXQVOXig43ձ I.H\ nҩH$6aEϴ(uJY6J*AYKO.`VI"’tIDD&DRr\r5cKqi}o}Uϟ' fYקX3/QKנ|nfRbgیs͑RG1Lf@O5Ygf"+٢,}Q,$o8 IDATuO#G4+UZ0a(^cŒ0,JJuG4PwL 5௔j4txa"i^6`W0CJ !@h]B_ xݰ~X- d¨:f4dūɚEhȾ%˼%(mWYnol>ߴ/}~'M}OZ{?<#<)N qB,jgMIiƦ-FTfz: cQh@]"gM{$K$AU{uE6Lb1 Xb1lfzyE֑WD?SfGFeVEv~3}zT+1(K=}uGf=3*]f='?yz~qgϟS{72.H8{eu 4Ff5mdgzf o:aA_w}UźG`S}wٶQf*V"ڥ2&DT )KCѕ8/P1kvlHFe6xU_Cύe,!; [@@JGsGpob}Ck%୧W.5 g>P%9)2ޙrsH2erHX6a]оGi Xޑr7]DDŋFg?n?|_-Xs@E{Y9rV6_,J ^NQAg= 4G *t|zg\#׾n!8l.dƺƺ_Ok~;f/X?&[Mlz}Y?]^^]"{S0œǟ݌KBm{O>OoZHٜ< ⌖9an/m8ᅡ9*Л5TѮqݗ>Kt+Q?:K߿ٵƇj>*6f0٪ DQF84D!ԽI0ӳs<ʈX#{Q+|~эYoDM~'g?7->HDNk4 +H:4o^4biîGG|Ͼ/7''`V[hV^IAZWzr#7(TN? 09Jb9gѽWfT-W7朲#/ ;; c ?opܿ7{7n?a `2'Q)]V`U7<+frrD ň}H@ K>h5zu]#zdfE( 09;vgggeͷ<}[DfKu|ifޟ={Zsw7swӳG~Ol0C=!*8  ˏT2aU+eCE,Q1epPkL VƤ.\eJ78+X01jqnsxG =H/aϞ<B^֟z_CxмfG ..Z.xp?*%RL bstW_:#Skh[kde%2G}OR -Rngg_?lv;ﶋ/$Jn]Lro_ѣ=~,˲Zkm{psp99-=R ҅4ѳ.9+sC"r!ӒFwvUx"+/xLJe2#$όpA2j71tCh1{3dL-` = 5 XtI }J4.WA/`e-صW+{ϕ8vwowTB9~*(s&?0Ym2D%r T8P?IMV%sMRdCc}Be n -'LU^Ur^hӳӳӳůΟ_~7mbuEts_vϞ>}ݷRd{nFvzyxK 3 6N3(m5 f)#2 y[f7-@荔ݍ8n67,dYm7zj|%pcG;޳bn}\ުi;l9JfoU*ف7f>EB4r8Yd<:!4To`0Z]_cC(I--RA(!3>^X36'zy9)gw}ݻY3r?};n_nv˭_^~NԪMgbmC gXՑ've\}E0fRW]4r犃stL3W/1F/3j8_j9^@2zΓzih/gD ;j(̂+MfN53K )Wi%J s6B߭=Ʉ'%'lBxq˳?G^}{(>?{̚2皠R\L}yŋ]b{ H6RAc8& %"Yw 5ړX*JX0 9݋whyG+/9sݹCGjs;ȗ[zJ6 F҆2Xe&˪PeyeǪ$'{0& 8cqS`1$`z~-sNԈ(,vȞk<{|O>neوlwk@@mH ϋz7l==}+/b22`̭GF~l?ۯ|=5Q#b_B=ݶmU+e6XATG- l^X26m_NVvhmSϟ=a7|{{ٵa+ʃ|`i&h,=F77fn}tîUH*X[B={:8sR Uʯ4he "3!7[v6Ϟ>/#3=!Kk{ >t[kj'}/0Pvof9ypƶYέ6ܔQJ)'C R-iU*'1gyvո{;8qn45PF^<1ڇ0޽m}+v~aw9s_^v+jl43$K̬fpVR9aYA}WwHU`*|>2Hdȵ#QkP*bPI ٴ椶f===&G.!W?Ylxdx䉤>Rqf٘SҠmӡ eY$(we* 8bQb(JRQB|* Oӊ5/%AȍϞ] ܵծKj7>|8Ls/ hX2O7/!؜Qj"a̬*2HD&M9nUO(XuU^ži˲,wIE"%$2kFg5Ka[lqu/.v'ϞxqϑG}FӬ2-$ҥHw4i.XYߧ=?i'gٞ>>=݇8ۓY6ޖ!k)#2#VD C1$QXFffIL)uM[qb뮆_Qf&")u$T,k3!2|Ify4g1+)>2w{ד=wbn ?`"to 2ۘR`lA4cE5vލ\|f0W, к9a2c3ve@,WCF RXw]]dsh>ًHE#D5)I]VY֋'R04~/#'ϟܹǏ>xO>>tym"S6^dF9Xhb‡U:T-u1=oe1x^̨먆=cc %eadןǨtޔݹ޽Ew=뚶}*:􇊿ړ1gj.cdӔ4j2ܜKցX• %d,Hʖv~gD.;ݐ+2SkFsNa+MQ(owmGFA- 7zr,t;]_l 0 @#\DEe~JˤYΌjJeRI'") x0и{}0`o;~w'W`ZEǿnfN7WR ,CNHV4bltbBqM PR%Z$2cN𣳨\f@3SKĤ(jö5$i|l*lId>OO7E*)ǹRszeF.͖怖5v뭉fSr0hq8.nmȪQ$K%N뵠Bsުpx~ ˞QV;\ceH_x'3 7qwܸ5~XM[7op2#0.SfT8%0}6*Zf9I > a f֌Q1#IoYs>tArn2{+,Qg<5"tAѤ:7CV& 98$FEk1&wnl7 fsWck jʉ8]N)"F}AXI4wy.Gy0`,jL$E ޶D@갾߷^˭qϝryom>`,pèj2VY1E㪨YԀҀ,M~1!Sj39$#bce?Mp$veU ֈ~/);"dVrSOd"PRTOipݼ5kn&妱Hm[##fy{xDM3F=t ε[A20:=$tydnnxz>vo?2k7t"AҐT(&$tyyɳ=kuy_x C~oGDʑMnѧ X3D 1%2RUCUGȖ To@cڌ8 g)m`2&%Gx6g&d )t"30oZ(k60ues4)b61jQgHhK,&uO.K[Y|>TS[CE=wy2huITbɷ4nNAT=e%sA$A ͦLv٬!l1'> úߙsnZEXHh lIМQY=j(~լ+zHiԣ=$d`S4n/xo]YwKR 3G`ɪOFqrnT25 '!/@HI$;FcdQnfޖܻ>$( ´(C̰Tn=p:bnaճ%2 4HH'džҀw*uyhv@M>wI#WhdmɌ,M`& fbpfnJ47qw6G^! kӅ$rvxk'ɻ|@iZR&a,~yz/:IR)$*3, Jil$$2"uxZ[ F*afX]y+k`VKeff2Y1c Fh6ԪݎѠG#R1.R)X=A*O,غ_o7{5~7¼E䠕F(k#}V}ƖfpQY:~ԑ^)f@"LJ! ݿt~⛮b=ĺg_>䬹O9N!Tj~"ٻ2{f5p/EB)V N2D*G4q2 2cfQ4%uU,80@*ϨF2F6 Yiڨ;[feh/`4)wwDѭd,W>H>H!IPP36 L9;ܼqO@ "jANw@A9ԍr瓀e0~OW)x|Uyokq< IDAT lg_tʌ) (bj4o#Ш9&)7ӁeKk͖M{F̺U2(8BaU*$]9IQЕ:"MGa1f&`KP@c ?D 9KMF4ԡ}wb]l!#Pb:g>o02ـ IM\9S9fr5P-^o_{A1vTKG̀U.hyB,,C̈1~RU !Bt6 $|i=#q`\ۍS*0) mLJZ|-f GHw>٪ !r=Z˒R]^lveFdCG3/_k#0fsܸ:7l5d]{/}7>7dJtrNڵD!ˮLD"8,]"Hd )VZ%cm8Նg$HBSl^d34EHNbN '$At*U&<R1 !4p]3)߯IJVJ-`\uG91ه;#R&=-~8*<)Q7S.w:Z"ZI$8ስFg"{Ȓzwe 36w2c@kTOzmilI&9_?ѸU^z`.MM92EzYԩA%H#@o%s?F +ybFw+[7,%Fr+VE  l.uyϗfJs>-=53F%%Wذ;b 4x}JI~~Fό/1'pkQ=Du=9=aL/ ǗIrd`GA&F9c4urr9;.N8$SEE"9=/1jW̬89g_Ӓ{oj*F}e^l!AioFqFg?Tko| ޴ <6#Gt4LpK(3#{ѣ[<*Q@Vh`¼yYH5e-Vd2FqY_2i!B.CYi)N(07>Y#ő.01szňkoIvٵ 7 :qDSa8 2$V~Ggfލ-?^^?۳_[o"V(N-)ԽSJfc&1$%u &qLMM?vir^xW-Ya/Ң[_"_(Wwt#pR!%* g~sT 2mU0ctsҹg26"<#SEK0-@Pt8Z3ɞJI@V,gv䯕Pس¾Rwi.֌^Yφ-LLLAak4JTE28FʄQꊘm<kށ#4>ڵo+d@H(k#CB @=Tdוoq=]m42Jc}j@I$3,2av2LI*ԾGޑУ4ZyIUfa\ڻ#}Eb}{9ux#Y=kH'##"s~&T2 L8š&&ᠳOϛZ27ËF߾]Өoj\d_"ԁBRjiU5LdWr,JU#0L<*OQf*:Rf47ݦF\]W]JD; a`k(tZhjܼגg  $,X  e ґwD-]صܸhQle8Xr5xDdFJ̴ᱍA!h0q7䪈k^獩i$ 3ro/ 1 ;z_-dMᠫS ΅LDG芪aV V}NTg3*_fÂ2#""{td6gPHC*PEO,D8̬9J0WkvL*! lguOH-; ~⾐iH&HKF"Č/($!yNA;}޸x{oVڟ2@]3kcr9fŖ˿[^/k8ra{>,& |îE*n"FNsm^LtB72 oQU<v3E>N Ym_ii[NI)A)Yb%Bt/|0mק➹,6qj%Kj#zCQ[HQi5'?"wGs_!sͯ?^i{w(†$A;kp;+SQbSU9db%`t954TP"'zFG%{=g&ӝ4zS$u][(R+%Fȯ cDץW^0F GU;@ggR Y"`Iϕ" '$bT Yxi_ㆽ~ɻ CoѢ+ko~0! 6z5f *4Sޣ9'J 2eTjH$7 .Ԅ[D*( VU[RR"a(!,E!U/gTӄAe& dYxH Y8콱Z;)mfxŃ!f=9MPr&HݽּF*VE"!SVL;cVfdKh Go@͘ҙf"=N֢SLo(*\FӮi.3I0PTl`>I) I a8CҌ8&xF+Kcߎu|]=vnܑ&DH<?jb)3(Ywl9~]EFIEd>:P; p_$]>)VHrD)_LP#(J"2Sp'%3.IElxl.‘$S(U֜D1CIG^иrF:TFsLؚ243qJ4_9BhYț)2G ǖs+6(D#sRrٵwʴ`V/_95P#2j(6Kλ D- $< FtfQ4H4 hi]BF7@29Iq#oA4jlϰ@0YZi10'Pe7miC F"Z\] ҕ-~hMa6¸mڎo7v!fX/ӆѝókڨug) ESst )͔-ʐ60 fsyqqq~ыbX+QzLC^)TV 0+\U Բt~ ^1C=% U UhGTMF9YkL3s6~{P9FY1ߏq#TXI 1)N)ݺWop=h]{^re>E&U_LLIYj١AVgɬ Tbk=M./=224 2g̛#)^  +b0Xꛠ6$47YRezH!<t].T^ lYI΃*s7. ai43:hdY^f=OWQXEG"lG}0Y^M{. > z2$G9xL{MW/oy~x֛`Leh4S›JALdR&sFZnft2zFmV;|SW.d"zz(Zqu-mPf?#{15b«9FE2T˜F%Q1@IiI BdLJzN z1z̠yd> fzź_ۃܯ4Xn2.D7,Ww6kz}UveFvHK5f-hf{&U M(ԍ9S=/VnPQ`(ΥLmqOjH $6޽mUAk8^D[=tB#Oo(PfKeaVN[+f/s@l{s3`Ӈ'_7OkB0sUAʵLȚWݓ4m`!)0Md 5Z"Fk%z<$07fhWi@!,/Lf2z/f5ziERffE m=}inN.R%ݗ/ۓ~NIl&4ż-Kآz_)W!,q@fc92ձ4X\iu2٢tSKbN"2lffEB=nHYF06pm5޷];XЧܼ={b璼 2p d=_k^|7F]x}bql=޲Af#e\֡,^q5_ūׯ}W#<|~3G|PV믙]/ tp:b^% ^ HrD%^7)w5/aq6s=9}NG;c}߽ܽ9<_7lʴNё[8[{tT+xf^y>nxKCvۼ}l7w0n6 /,^|}C86k_ӳ_d Y&jfBJ"0B4g3 %_Vu {Hf={n|]MF?|`{bϟ?|vO=z՟$yzrѣG}?""<ͷ\^f oAFîym"ߖtRL!Rq k~(xO=_k[|7>2$1Rpbݴmq7;i- .ŵX|60՞kd$Fs2s_hȾwjyn)FPA{ ۯk$Pv$gnO7I;;;9=;;;;=[6t~5ׯ=zB5 +r)T !^WLuEm.l9\UѨǺuݯC( "գEqCZXkx,3j{}q=aD[6g[o^}( EfO|IFPXwO~Wߜ?;$o!".../f'dY6?x,N<8}py~Gdo˳OO>z$rg<|w~/曯ޑPqYќFwZZ2,NԹ9`z,I~v_wx?ip;j;g}c!,2I1 zѳԑ2Е{DX3{f }0!&TfATei@d&C\C{ESLviqe]k_w~wu]ܭحF]h}2LN-*I3Qb̕w5{u}FfDR2RZ5sDFD_CP1P]EW"EFTW.֞A FD+]Dg#- ni٧׿S6<ߟ{~]v{mk&x7_7~vmg@Ťnޟ]{\̿ѧ?;pT8h>z JinܼnWK, 連1Tɔ\݄mACh>ba9vfU+Sy`$O ϡRZ̅O)-ViD)3dE$ޖFyf4G( (AVUYV^d~@aƯ7PKQv(̫Flg?{a7X_?{OR3{prz=YܝkFӳ>o~|GnN>O>OϾ/X6 &0}},] 0gi~9sr*W)rUcJ?nvn~n!`O8˨cJތFYW]銫lfnVZi3=2zD QQ6]3F5C6Hx'&ʷIHYʓ >4M ,)?W& kf4smZݜnͽހ{[:6BF9IT1~DJR upʯ#5B}>Xk?l ]\?Oxd9;=}xdY6;3գN7'ӧ__~~/_]8pzG_7q(n7|/Ó'-e,7t澮Ryc=lƭWWfL :mx`Ga?&1+ IDAT|}_]gۿڂ?;$2d0A5v:ute X!D%ggNigP++K>¶? Vd5}gdeŚ-KZ[N66-m֬({EW:JUaìh%r Eס,r]˚pzt,aJŢY|1[dq&EZks~tw^i̫}weӯV%wV]wYrffӰ_lz׾wv)o4>3 {X)^ۡeZ1StmyrNajj/7uO_tBX ^VWa8k)R{Ìk/{ǽ'(WiGw]Dx<*1^K0zLWҕz))P+nVm *4m-HC,9ҥ:VRrb΍4LR<@ւ%b$dxSG4Wgwݹxm!ddZ;1-0 \JM$ 0A)IJ)ӐH"DFn m5UN1_r.ĉ#T7b9E`Ĕoݸͯ^ZRaY[o9OgI]]N]Ϋ;׫RȪMכr0\]p{4}.7xcv)盷n_.֩RRL躒r0du~zvx;[?RǂZ\5@i iPiҢ#7}9kƞ+]9b:D9ăXHxh"6P$(pDiԚEdP5Uk5ԴVo-xoُͩ "QqΩ]וnUq<@s=i hB5ۗogȸ,`1 N._Za3\ˠ[X $D 2:@$,Y$ܑ$I"il,~cuhy <%.9rsI‡\uKf׿ɰZq|w\XHS)+eӯV*qJXDSRNVRrVq%7vsN|wajdفDrR-r5ӅaeM`ժ0[Ai1z޸v&@Xx(R K|IN, bi@,m/ `iZTs5ai`q+t4'fbhI9sʜ30Kc3[يì `j\n52ZCZy} .-cGGm1yi oWő$Fb4Q+%sr*@$u)PbƊƓYr_?:ll?i"xn{٬׫t])z}ׯV[]U".dNJ.N~_r>8:+oݺ1wOOs)Uo6V])"QVfta qfI"9K9DhNOq8=:>>::y}Û7oރN䰮yAXWv;lC3mAN-'abܘNď{kO[/ק536u)t# Z0!n #$qʜ¥ "r&l bڴ5xfdյPgQedD4u㱅B%`fb0ؙ*nf05Z'؇>ܩX$%IR&NqBRR<:ALGD K25B8;}֝_~s֍8f^u}R$$ȡY sYRKu}JΥBlզ?99y~34p~?萙id7=s@vKZx<}P\>>g jOuuN3X #gi+5lԉAI23Ř]aսHAY̨Elj7-IE"cL`& 3$ζL+ {;{l!“[XKQx n#jyUWk=Goedy1,qUA4!$L0sZtVjp"JQgC%jPCw[rZz{eZ ϘF<\*~_KN28:<̫n}.)zghfZ窦 E <<>s9ũx]u<|irtRb{In@a-ևW Qzg܀9=`[<7Z@)nf3 "詵OnnZ"rϱbO@}vg1I\ܕs&\V٬HC 1|cXg4ƫeQrhz5E]UI%vN$%1',IzWF[ΛyR )!by5WjV]KEDd 9تR0 ̜m~+_Oqew|LҥYsJ[zUMkZk\C/TjE:ܳd&a}W'ׯOfGG4wy$7ouR:>> &s)egb'}$Z:o*yZ϶O^νMS?}~CxcD${"Rɚ;NjZnիjpZ[s]X_Bqy,[I#ĭy<30HZ"j\R))'aj>  CbW2ksnY_L A0rB70 ` /T@}O -u80g7w$昈%m:fşlv4u{v>INܕs)0ZA֦lfs5 Nr27k~ls|(z9:8_^\n=<=3a:?=?\ %wM)֮vq}ݻ] !KP[@xHɄR<^>izmE=?Bى $ )\9;h6p#2nsSaN`K828c`ݙ)VwgŰخ(1#nYTrJ@BIYI.f psu6ք'w'ʳ{r£5Y`fҌ)QD@wRxd PUK8ڴEKHԽ:9ԁjnnLShs4Ǧ1"_=]nF."a7O~kӷޜ4nw[8_眻-4=h.aʾ08h@ 3r6lnϷfS$v^ҍ~:?;峟9<::?;#b ]qJyvN\f~|p~qVڐ9vAprnHG۟~8)} 㓎GO`" >s&UNZ)HZa՜Ĝ98] & _TB)sX2-m";Q3$#OEx7P ;R.ky0<))PA2 X \8(WmX;("i$E#<"`lGuy,+ss5ʑR^ݵ!fs~~{~~z~q^z~qQ9\J)Ơ;Y#{Mhtf4i5l9J,aw;Sf2y֫iv ߬%f]#WiAkR=<<*EBeozl;=l|[cE{u?R`zS}.}':- ,XNoFђ=[ f{EMb0cjJIXğC8$e)]W9w3-].6sOpCU31A&j&ȣlz͙``3[m;/2nP*yc}ǴR%n\|fDYlGH׌$26YKNwILjNf !΅WtuʅR&U-M2BkےyA5zi8)V!eY6)$DσB !HU0؛CUv;li ^\QmoH$gɝB֪ڕUjub&fc3r#[8jj_Wbku9Iɩ"m+, D& <s! p\ ^kAa 0O4n6YEYrWpsppp~~Yotۗ.M\Jђv?r1&J!FMgL?ZݍBR-"f"sa l~s///"]=?|_T2HK% @0 . %'J !gRfɍA#W 'ұnw׮t]_,%kGGGe iY`aT~Ws5r<)1hq慷- 53V:`2l'>qADŻ{c7Kh9O"b*ԃyh,0h='L{) K"ڼPEpI$7hug3ZcP-ee9D `f5Dꪡc ^`&Ⅲ 8nvB}) iK,H٣ @!7nFpPgjj L̒ IÅIJI9yVstg>mky>33̹!nH`#7(K N)RU_^\jW23o'Epi>::|DM)}JRJ7̓a&́8TeIWZ0V%%WuI qgڳWcm1ڎo j#! qb16!1Ğ$ ADR"N!"RyVwYfNL @tW8ѶYz}d#3 *YX-~|f)Dh`N&I2xQcGM=2"˕Ѣ_A6v_T6yIWCFDXم"_Tx݄Yh훯}v0LP`ӯX@0$4jA0\8N)yil¸ S 4Y2s!ɒJ.YҰQ_~ 8v]w98;iGaXi&֙9b ;yhWXJ̶f!"ճj]N&0\F {#fptCSK~q 3"iwo i\m OK$҉vFN$]'ILqy2-j`!!F&d1J.^]1qrμi*HKJvrzI"vTj1h'd sPBܺs ZZḾ?uq|aDq|?W᧬CǕhrLɉv'rn 5b73VBs`"]0mTjV!%-C&:drU'`$18$.Nb&|s6fVYAtrFjĒԪM["j,B$1_T Seq2l HR9 9Bs ;ȕ9f;J (`Շ2mG-yE9,⒙PJL),Tya~_[wxG?ۿS*t|փܯΫuΙF9p3y8UHr.:jdՓSJuM.$q)EL%,5#-"n`uxfUh:(3s8!pF򈪒\JB)Kf`HHB7#z'0pClS:`@86eU!&5*i`W\u1gRF}6\:  9.%Lg #b3%RZW՗_q{o3MJrvz6\|[V}Oa7?i ԕﻮ"4 ^Hck} ?0;}yS]vծ&3iP &nrn1@f5ᨨp٩ěZ]j%]971$WK(0P4rZ  $CxӏP' @,j!1goݭ6n}{U=ñ8M 1%JP4 SQf!fDmQ^NPQ"I2,$GXYgV}_}޿ރ] ggpsƳˋv7i2BuG'ǛՊ Zk&~BʚMNURJ+"UhU{ P) 2jZ+唄4,;@j5y>so&w̥eA$3"AK M'>J, 'SV¹>*U90 `J¶d9#@ Ƃɚ 1M5jH䵉b  %Ȃj&:SSFPR*ʶh HJRJ6C lky %aa6fNL^3\[k 8E %\Clw.MkVz$a$̒(4ނ PӪsMD µ|Guemˋat}ZV9!K*9 ߵZ6Gժ)1sr%fuS( ɔMu) @,əW5AAUk4$"&G)ED湺KX(ǎEtr^d mﺩ:(o 4 0Z]F)Q{'՟G<'/}=[A#qSU_2IA F?Z 0q%KfI$< ccn ѐާt '" ԙaT֜x9`V"IRI9t\[Cq q'NN)9Aݴj]UVFhZ,% $WwTu̜Qf(譻B ,9]KIXLbUmYq?P'U'e:ë]?9YޗySJ"t\^nw0 ONK.ﻎ͸F4 *I \qai0ԭI++5-0:眘aؕ"ۭ:,I$B%si.ZTyAqXUS({I_#_DhŵXWŠ39B&`s7\Qmi.qT݄jub9,̈`(=6H؊[0EW2^pUdI9~Uh5[_zW&/e!r=bg31bNh15I Y^]p6%SuV&uHłUo V ?< Hs-eD$Rx]iʥ@k'n; Zk5f8Lqr|rrt\Ӵ~4WJ"i{ש]^zL$Q4Wu4Yfi<H< n];f\8N|nYrG3W)!Pd1Z֔_$Mà ø܍S8\F ٝ]OTUi4 Hf aaq $ 1DX?V\{,@|$kOk :&a4.NCq2$-*M 1Tb:kؼ7FlͲqaoQt:S$\էRLID. Fq$p&Oyk K &&FlQk/SB5I« 1.-ZG PbJ1N 9p3?~+F6kr_uz{Mx%WǤ%\;:xW:nl~VR`AZ-ޑiy^aZ ]]sʹu]1NY=ib@uqJ@)ySfPg:aVz_nw++߽w^.ag?ߩTEl|Zrxn^;9~@%ӳ{is0wɔ/vwmr9Zu]ŒRWu.ig=wXUdbNQWt Vg8LS.'QP^x4a af{RETYI""2$fHd:,bQx8FXoc+Ll#T] x(Ix:<< :YYUPD(5?*u3Pa I\-k-+,/$ILNs,땮L(?V$nza NE-IoO?'rKNvlۏ7^/ݹqxs8`*K/k3yg`spڵpyw:s>:L9VzsUۤuR55si_뤦t)4 I$7:_ ܯr)vfFP6[qߛݧq)4WodCW3@JH}W0VN̒{=oFHoxB 0/A .PGt9P~Rq>K@=QLj!ΜB0Z96`1-@\2 s&|P jx:\_R:KD8qht"ZI܍JZoG?ʗ|`ܝ*}a*"^UǚXnߺyMzxu8n˯lݻ{-Μ wXV6}uIm64Ȝ8LœӺ'N[(|2!ܕ,b\lÛja&:ϩd!2a_zar7Ljb[pv~r.D"+aC9KdILBshFpAƤZ@gg~~{_ϾS}뷘׿.dUJɉ!Kʜ~8LZD˺/R6k'%%׺]wꖺ$,pstSk''DDU8w[[o \rvRXhgi:\<׉᫮'n;JE}UkNM e\9ژSO{9;Zϟ}jճ햛0.7M46$ ^K]ͱxF2%z̴1F=c_\ e&Fzj>.sFMWU cӓ]UqtzMj)=쟟}1۲ ل1vNh\V޿Ͽ_9;va?o\{ɴˉ$4);$= jUBr*LfN"M̬jVFk&ΓqcLa uݼADVuK9$!6Rrߕ˭ZV+e? W2ٜBi Ƶ^Z3m(x_c]/}|ǿ,?H,/)2cs9s1"a;D>$_3bfUM@R( ")D<*b6)TJ'4_L|???j5 CJ)>==W;; 68o88...,ٟٟ真ED?7^\'X"lU_v?\=}8{!~~a>OS*gpiJ.$Ҁj3KIiuR?Wkn\vt)>lجV]aD8:tJ)cfU-aD܈t0>xx;YL ȣƈX &H /J,g8O9<{`"<~B)PHn7-d_•uJ4~j,IRJ$Er.%Pm$f H8߻y___<==koo}WWַW^Ν;G|??w~p^|~ю˨Uk=Eh`FƠ}7UE`츞l{uފs_N`@\I)su]DGRWQfL"12UE2XQ4(vek+H"u/|1WUA@O# f68EYhfŒ`5'Xr`fAl;Rjgh"AnN.J!I`S=W40dDLLYR'IԇP),J5HJfr. `PŽKDbfK]n!yPsA3eS{yI,;5yu;F Qo;WQ .u c/@;N;t!$FbC "SX.pv!0F@!1uʷ4//Cz׻wx~ݷoߟٟ}x?r^}cwqOBeYý{~}~l6{_O~5y#Oef1t-\2 )0HF EJ)/ykkYN2O3b(t86!bfb<7שd43M@U0ˌI)Vi%圔⌰WԺ((P"RjE0qUW׵%M C,{؎3=g6|$gvx\ZD(pEp:.Ձ *hhBnPl (FAI V`@Ƒ 9rTQSΚ%甚,*QјCs`&%$̘(ڶ-r>_pG%^Mp3OK.~m{~\-C IDAT]Ó01#3"B hfNB擶l{45+:|fO;p_7r.ys?z_ahrrG1F&`3()3Cf24d:9u։lj2^T5YEESJM=L';x62[{YuQ/ffib(E]A*hhu]/Ty0&o 03+"a &jdhG=5?l%׷{ yLG¥lT{S(CCV NI3320%%$0vyoݖ-K w Cn芾 `.":Pժ˲DDI;رc+++)b{{{eeŖ !2"2Pe$kH^'@* D*n~[ W6!LvGn>pޛѶOl^Z+bj,E@2P76# F^P1EL(^\mZc\ܷpi5YܺrnJny49)-s(x# M-1C,E")(YN9ze/[/>: q 6bfFfDB&4$ CUn;mjoOո˥f:3ܴmn)"T6M&`,eeCPk˒ˢ jI:]`PSRR"e2P+cBXDF51 ȧ$g>=5 C__bqI á:  "!uBCg\;<$apA'.Oc:9<{Zfg2ϱBSNE3VofUѪi1]_?l8ܷuȱmю0zahP!3WE`,|>gO{ڡ~QADiYmJΈB,"MӶnR2 U1q!ޜSjڜ6jiSVŢ+!Q$":\WBAXqx=:0fy낓vxQ~ Ow8q3 )u``F6C?{#'_NNnsU [꼺=54.l:_:D#)yegK]{:aJxC!׹ğxcPRΐE bW\xDPCDP#p* |;vXqePBrvȠzeUz_ԯr#. ߊN} q{gv.. Kd  tiE̓D$ :v N` c$234[5.yJD7U[^9)e blW>U/{#tUE+bEQTWY3TtsY9 KnSr !լ^̦̏d:]cӺj^eTӔr m  TXMJm,0GH&ԈsdI鼿XhSEUm^ot5"dC"""spPA ̖!*d*vn:=|km>AY"sRC/'=%g5ƀhKZ3󛚚2  .'R40PC193jeZkj&4;O$He bi0XT<=R4mZԽwl{s4ol@N98"N ^+9Б;|ウ٬, b2 mLf1AY4KRCt/YSjIZj,'2ӄTuMEPPff⺩QH ڜ9^h]UI!(ލ}M}*D`Zv6  MA$!2CX*&]WU:8@TD7菌Gcii:}DjG3H]^^p2|<:qbm`0dbbWVVÁ$ =985fYZ"TUÜt CSD5kS"YDLZYrRmRۤ)fѬn! 6_gESScH@-GM$7|Ѩ HE/D_jlhhbFMskgURIzNRy;tKk*k'8әywHx'dэTL+]`=b@nf$#w0D LIE-E`db>~b_;lΧisJd1_/E/zQvo-| .awހ}bkX0X~m!窬`lشX :xZ(Mm7MܡT:{phEJUC R es$&$1rW"@(J̦y&.fp"ۚI6bOǹ߱q1^LomĆng`znB l#]YI;ȇvnW"*BD* h".@IJj)(*|7)Z:(d*%\Rm.{kfX4;j/yŏ^|%4.:t{?z#EQݳgmeuPT$X**69|jU%^ѫ~Pa`= +b2\WZd>#4J)ką$-2⼆bw8O-XH,0 M"gG`p(eT7FҒs wW: 4l8w^ċ'kfSTtZ ց"bj`Jr xta]HN#ΊI0L@hQ0"f1Uh C5%T ƎBdf6y^4|2=yB;W=yW۷mhgX4h?Woyvg %1r@$smBYbV$z+aY@ADZD ,(椐э좆n$k11*)]@rΚjnW׆MSJ$v3o@*Ju $IsfC !PpA(Jj b(v| |СCY#RG:ż~t4N̔(BD`5PA3  r!D $ƢBM隣 sx@^lu׾v||S۶WW^u%_'ڞM^gw7<|=ǎ",!XTUETEÔ%62 {CCH۶N)e1He],'Z1=`f-giX&H4T@s7Κ (e1CHټNI)n t ĔGl=|K3sPyDDYG D 2w9%)Q*hxa&;sn/BnSTS4EP`&9""):eSJeYʋZ,{])%WM)9\'i*".`d $~5?=,*Oln?ztb^B !<mz 鳟\0U%6aJ[1Nfz4]LP"eJdR1ČVZUm&)RI$e׏=i9e5UX۶I1P@ nM޽$bSHbGuԑ:ZɢȪh%BB3P ɦz\OZ; x}r?qy J`njHLeݽ-Zh-w13S?ckhSڵ` #ShS&p1B`@#H]F̨J.yֳ|>wl6{Ne?v_|u]կǷv.mKD/z -}4#׻#f$bW/g|OM{mfhkyx2g30l6:qbe2(Cp߾wd<%mjd2lm泅dm0`$% ML?WQP,\-E Y\"Y!B`LЦVTAGNCUSU 1FS.!0 PAQ рEl7>Bu8^O@=qI[~wB DD:*Itb6q9-D24Xr:] RV'E,1@ 0Fc*C???i9/馛f7tӛ՟?Ͼe/[U/F)!HЈ,YȔbƫ2OfDybxg4:yt4նi,yg4FkfZYY%AoPU^`xWw~s"lmnQ(*ZJ9*Q`єf;@EN8D1" 3@f#V7pynsJ c C$QYhED,WWVFYn-ֹi'j*)%HPG5OS<~r-D0@r ~}S79iڙx'j ^A!!!11&}6%׉ac@*h W$~?o{fѣGg[k}Ӟkn8rȳ/}KN8ַ_Wݻ]zǟ:Y4t2Q==i]['dx{{>5Y,WH @qexȑ"`aWjo߆ (;a}c}c!M,imj&E=XTrpvmhIu眓e61(39 OWƥ4)-a1|h6=&!}ytd$5U7s6UM) o>wu77s|>;6=pO:yDU5fاNp3#Ԅ7 \{םO(-ǣc(bZIDH;CB+m{[oqX\q]tQy05k>\tE!D׾җt^\va7B,kj4efy^7uCIy6FMN+kx&H1\߻o5yئ)cU+}{w-30DR$1E#CDDSs-2KbD{>CSZUq0u ].YJ!#U1B4A 䧓 tfFHW%CIMc}܀#Q tƵs74FD0d\[us5TYK :"@"P@.b@Bā峚\ECY޶ϒmZq\Ue!%zj۶ibٌbsf,NUUŢ,RRE(;i )p(0[~Q=$y6|>UJʈhL!H!~U]wT6w>RiJWe`O'^Xht>[,ŢST(FBF \énrE,jH`ѴO7A { @{p/m4IzE],yݴܕ`&KOi* r&IE[:bxew%w;7.}Di2z \E028eRl ֚ ;1b`bbdv )A|gO(K UCUfE0 N(rpПO}Sid@(2F4I X$-x:O-t<>r0"[[" ,Bng\| R_o~ߟs_y?%I7NkMzﯭbQMLTikuE&bvY,9mեs,)9oLvvR`^^Օ_P[եb0oLM :vw ec΂:ãn8B+.MN u`vl 'mL̨ΒbDg"$㹣C`gljlArwM IDATO33UɀĂRo׷(ue"N9bQVE](Umg4P6]|^y}G+}UW\}5}{^CB(42mJʢmm*+B$"SJmNYvB ]9"zUXnEH"1)ϿEqj1b'̈3o]n03 F&it=B<:3DqҒN@~ Nҡ|st= ssLHltpY:t97 y%Sյ()9nMb6ួ9뼝 rNlomonmL餩EZL!#W6M[ےSE,uֵv_|+/CQҗώMdmYI-fȁ$|eBD60eӬMA$JϋPjJxy  Z/ %+X82m:),Kld(K4Mrg] . ۭg87x>s `/8~8mL^:FB#Qο߁FC| @H8p1jΒRpG&!-e_(+brxu)$y]/j0h쌏{}?ϐC,+Hy6ܳgxżt=<Wʫ.{8rC߹*ݳQMTeYEDTu|Y6%isJ9ۜSJmʒ5gmff4NfuA]۷ouR+m o*4M""R={ LgEr&5P_U .Α^>pkXbMXaAxs~3/z4GOlݳABA 9)e1c"5jU6u6)$)&is΢"Ylh&  "YݻQu.ʤFʮ#DTUU b~2ogiݴ.5 f`D4=['jp.3Q;',ηs z֡OX } f!<]2בvET)AuTکO%9&O "(%ɚ/1ECT@R#16xp@zl^7mr OE$|`h(5K-CU q\p?vٕWm WGirs=_?vt}uxA pL5HNuIm53" MNMnsr,mJHۦ,%۔s`{*pK (3_Y׫baN&)gUDd t- y>cvVsKzƵGׁ̏`ޱpdzv+%@T}.au Y<"Þ~J.xڌQVV.dCizX!h'i3cPl h2O1 4=e7,xeqϝ_~g~!'^x:8ʢ(PL@p 03gzu ĺ Ի"+T7H0e@|JK*tENfEO ;X$: L̥[ b%31Xkg]솅u3ˑp>JNmJY$m` "iueUܨB3" Ny4ohm"n&{<&"2F=N9Ue,b 10fS5#uӶYLD=ydS/#"k"pЅ^?2eDBDlHrլ⵭fbecD\'IYD(¾=k)9L @>:.YʾI/]eS e\;۷D|3 @=åCyPԈP=ޙy2  &/ ;Ӭ\D@.|TB)7)EaR;u!7*m[肃ls")IIiY]'E 3s,8DF$v:h2/q(`,V(ֳ;*1@yt-(Dvg ީEum0nQaBE[__Y] V^f1XgSQK)mSe$,* b5mڶmU аHz0a&@NE:dX ۘ :~|i:v3x=Cjד(kcYE).8mhh77G,D 9 D4kN5zJBOrtsBiֆ냪'fuSJZmYƲ*0pF UP%55 -$rѶ߸eoaڡtZ7I@T d]MzG>zJ;}3k:OhȆ HdHLQ&8:Sfb D̅]:wD,wL}\55PU"\f4h4ڽQUrH۶ymsn|:^s50 6G_fV* Đ!(Y]G?^UaP+*ʲ(cQXH (a AŌ"JnrF[SU`#Fd@NS""L͘%-}vR@+gKL@>#/d1EUŢuEUi۶"&I];qͻf&,o봵9M!t*xL(}W.! |T}N垘|Y/=ds"\sUttuR$tux4uju7XGPu1Ǻy:GwvvDo4|#7pCS!/|~o~?o߮p |M7jUU~ggww˲җt__zYGDzp< E,Rِ#a٫Y5"( )biۺFiCj6aw$S|vh#ETL50fpXe(s$*6O̦3pdϦN!f,9. DsӢZpl6,bݓXT0 ۣosa.s\{ЧzF485|ɻD`>b=s Zd`Jז9 m7VzֶD"஽(AAQOsUA7ys??;;^}o_bqO~~_W.ꫯ?=NW~/xW򕝝￿,˪D|>b_~u{ 7|^c?c'>;|x,MM2 P /UU3A'Dt2-P0鯚R^P40h60IiDi[H+f@jF*b+sw8ۙ]ˏ2=֡U枈u23wڐCzщľ]9"3: 1zHaI&HQP<ɪg8`CW`'{a—}svp8|6>wi="rwo_җTU/rγ;СCkkk{=tP|eUUsϭy{ލ7|ƕ!7__cǎ>|n{82]yZ{sԔL "^4(*z[b5miOm>z+\6pE$v@HRIj8kxk}ΩT0*2 Uujkg2?w߽hѢ:bGHkI{O8@_oO')K!&KuڬWcZ:+AQIDI,eggXEff9kݺuȦ.ՍD6UJ % zhǕ0y} mBzG#je#*RBXc^4Ru.Dՙ֪Z_9 qءqġpTYc&).#>7f_on%P3~Į>n~ $r,)sCfb D$B삟 HǺ3UBxŘd'rQ|)RJ Zx2-Z o9VZjժM6=6lk$ټy}7::z5Xv`xx__.Äc/9$II),[~??,X^GQHaÆ/}KO>m_0 ,/9e} 4u$ژ4m4\);$# ` kjm8]VK118N$QB Vf hJټs.3$imII mS$r4M6̨jб/%B clL*eETI&qR*%q[* V6mORQZ;pft"vƱ;R!9̅8$~kzm_'ں7/SCcUXb!'>1!I–6D^FHERQcqUJ}w_[x_\T֭[w7va~Kҏ衇N;JR_/[/?ׯ_bEǾa›5k֬Z޺uwoҥ5kRDZ61.N(&0H&8)Eq9$muf2֛& ̹Nmlu,REqS&@Bkg5|"2V$ *G ^pWR)RJ*%T DyAR`AfZ˲HH)|lW46M6zd,JRMRO$wh6qR$gUzfU*C}=ϝ7^386(ԬYIR*~%k”QS_;̐A!j>! p5o,@+wa}~@h#tRJ3y&PCREJDi ĹMBy5W_7X̚dDoU%0V&2o[Vm&T*icR===[n&q眔{h7p֬Y۶mIӴR%IqeZk)|a "pLMErN^8dLV`mZ^kjV64e8*+qHRz1^hfVIE$xFGk hz ƀ@$XXEJJAX~ Z˶VQۚ*/L0ƤYVOz=5RT"g ?9JI* 4&kV?LZAʡYs?@YJ83+%1cU=1k`<0wp@8VT&3c#57{^[ni쉧W?aPNKxmF3kI'݁]Cwyذ&"prA. \ v> !i ˔$ebg}DMljfr#VJ&REOR.XRYL:"ѴٌgGpVP$II%9qo4z6Ξ?w``Ja7w_a iUFkR/w{줷ao;%q%pps@Di0 v>!eX}+h_G$R;&X»;Vd ǎ3g $">,PjX _:iU b;ܙsxo6NE ܶqS\+mVK4kX3MjUV7Lf2cX*l9imNF#qeMMGU]:3$A~q5R %Bu*2E;C Վ F:$8.9gx%ZIJ% ʥ/%)FF6nٔY$nvBQJe̺5kSZ| S?>YR!=P"mfLhgrQ0G1T^qx* _0[&E.l̡!X\$:% IOBIH I"(QKSxQ0 x IDAT }}R 3f֘O48z[GƪY5CbBeYmv&MScl2fVot~ЖBY , TREJ"dPWB5.<(RZ-[G*v!YGzjBDR )e̤e0_fdsͬ ]|Dm"biDV1ވ8Mj[#R JP\I2k8N,[kcRknTvƘ<"^Y cT DB"o&R(%2n` O '2oZ` $8IR8뜶Z70_)9FhLkHHE*IJ2Ri:RqldM_6՚c)E3&q I1R0DU$:) ")HIb$0ȅ%ݭ`&G i-oٺY}q$dq{wkG"J굦I'TMn4\QڔX*dv6ų.zjZ7g۰axITX{%!EyK)` E%Q:^ʾtC >јH#OO=ʀI-RIgsZZH)*{js9ׄH\J"!Kq2v>}c$3kظ͌$qPLgʹ)GHĖQfQ:ga,tzAD!^j 4]YP94|`.)|ȴNo>DvJVD:fB0`aæ&]aାكJO%@'JIa Q%q{F۾ʐ5eHQ%Rlj'ȶR__ YWRRE*2kqri2Y,Ia !ȹ]gIA3տu^FyȎeR0{Wz2q:[(5J*! Dp`XDA!Id[88gJȼDRĂ""$HX4ӆ.3f5$Jn޺7Fs,RE0LG&igPX4Wȴ꣣ͺ-}=A2x ;RqYRM(9J)v%Tug缻\68Mme֑EМt$,F꩞J H v6JFZk4$ɨ erp۔ ȸTbijeaFjaXh},1OMY.NLHDHTz7mI]֨5,d3n -t*숼OUa)/%u"ft[S0sse5ng$)%!"!?!Og/| y#<`cG.JǾe9C^w5hcBMv!k}`otαsNk3SP,ʏ;ݔ$");M ծ>@}KNBx{eDPoxm6,SDQD$i杽BjړZ-r'TB@ZU*=RI\h F#˚dLlm)`J:y~s0~9[T*5OAEe0;92/T:xvP-Me@oOJH)Zl42mp;!iȅ,cٱ=C>Q~rΰ8~ !|oI,b@ #R=XJfIM@y(|+6q"q$a4x$VJ$mQ;v*,;(:acs ǎH_m7מ.B! ]0,5e:;~vBo#}Crj-P+*dc2[/D9ˡ<ݴՄEF>!8bΰ5ZHHH8yLnU~Ṗ0%vl[_;z3 !9clqT.Ǒ֦> 1<IW!D\$p.*Rhlш8/EQlLfSuN)v-x` cK\ IιGjQj)rm?z~3Ƚs0gq)wZm7)'y³nY21jb, ·6B^,F"5#}M]ehH%(RiO:W6R:UEdYc+J6S4mf(2GB2krNb 5Zѣ o5 [P*P]~߶8fNI޳}bj9(cQg.=S%׉""ˎښLkm67\i5̗-`EEr.ZZ+Tkš2CaF0rI1XegӖp*p )9HS-DS({{*pfYPf3-DdY(JJe_IHb+p_dٱɘȱc$BdslWBma *ž3W"SGWtoN#GSCCgy||zzz|1?/f;666003{ö/ADZ\.D8>tqfksWRu7l[ʅ?,}cF!r$ų/BqŦ>tcZy˗Ypxxxx;Ri~=蠃,{#kx!`ϙfsk!r6qao6[&yށ"DV8 L$5"" '"OOh6jmVo4L[rDcb.XgeZHi PW)G"A*VIJITJ8H ﭕB*_E;#Â!z⤷\IJRf<QO~)l„+xkAi.6 plO-vCv~ a\:D.M3.Xk'>QT? /]9wꩧ6͗ygڵ .|gq[l9s. i>c>򑏔J%KJc9f .G?zGy_W(Zz 7}lΜ9Jy]}Ih4}E~wcB? 5V""n7fGN-KK!"!($qF`!9qpbǰega-2mzeXT^pϞ?oxxx'τu}sHoy$_Dpmغ38QR.ˉ%&)g. ~khM61i{fnu:C./GnP6Hs̈́rBs ,+W(}ڑe~{M7t]w-_NXt'?O<=yǞx≗\rIew޻gy榛nz+<.-[SF{.ҷ-{)200裏^ol288x[nݺu~nG?˯ڑ??q OB`4Y.'5u6t1x;mL#Zjm$ײaLC u2Kf' V$BPs9oKm,|:TkzXu|t4MmZ9u[l6O\sX[ yރsĎj`WUOOoTCn)f]~f_˟f,#Ο;oGXe&\P܏~5ۇn(.99-`vP뉳g޶mۆ oٟ=sWX}?Zb駟>44d}+^bŊo.hɒ%Dtgs= !([.袟sέj͛}oFFFV^}Ο?hhhٲeOK.|Yf}{+-rJ$IR[-r<׮];gΜ{ _АJ |۽~:y䑅 ~?~>WJMLLuRnذadddr.{^W=O)᜛3 \XgOƸFa 5ޛr] L=(1KIq:nj_})##C|CΈb|ŏhr0޶T*HD ޮi#ڴiӆ &_4Ep3xM'V]\:E;'}8.uNۿ=DmB!H͇Xfܕ ?ʶf6:m6E:]gVy#Ʀ-& Bj h^ ,dZ댈{fݮ}vhd)7aJά dIY|cFav&)XaBf *jVeH{7d\$ES;7UE"M'$O}OQlM OkLڥ}ˢAMzNݾ{bvH2$$;m㒍|B (VqÆsn)Q}Txn'?: R$~|HA\N\3P;P?km λgݨ9G]RQQ,^M:&^^$c fzRT5ibL}VLkNt'jfjM|^/ͯotDL5(jm'b4F(Ue`FQ.)ëZ[-:@喯_&_y@rAyYgPK0ubBa F(|{"L)nBpyS;r9 qk =M w.9 ^%LrYB)%++G'f|/gH.L_?0gbU*x}ø`B^* aGK~ԖaEވ۶oGއZ;2*Dt`Ǔ'aGÔ ~kԚ9iWӿ/OCM< m>%ڦ s)wvh8*gpAnb<}lFAr;(%=Oy51CX9ž}v8&rs젮ᣎomb Q1et*[~!Ϙ&]1 )Ϲ_kd`6F͔@Psڅ53rQ_P웺Fp# كё;b;(4O_9җȵ8rmO^CbCq^t֝P0*LzƆNeS0\J1µu"Z@]v*Tr5^;\DS8Cx9ImױZGLOV)-O.53ދ*WrGsϟ; Dy27n.@O%ڦaX[lVn۩Rz֘P{1W<#"!73[ǡ.n+ ЦnÅJoC &|XjMnݨ}r[$A۔TůރaQ1 Z0bE:4x?g׸Mx /Dua us80QBDS~1dY']I^&'JRRnPWHDR)-׃wkQfl1jc^8 R%$?wbR9JM8#II+9[A1h}mc6%O)Y/::+v_[f]~VuOnySPMtqS9'׿*( u"S!cv,Ӎ)SRf&pt N+]O7W/b|-d@}]ejK補A/ 55KV)pLPN1$oӱOrJHTEq)%#`J%2|"yxkyo!mCʹb@o) C{.jh5LY6~\P.ċh('WDnBh泂 ZH MǯQokfijvj{~vCY#}A)DMka +gYSpٲe=P^K}QE-_|k֬ygŊx 5l_j2X;5UƩ=n};zwWM6fTh [\[dvn pjָv>^pȏ pLz_lJRH)l8p"eADJBJRB()$)II%) %Ed(ӦG_Y ;Znv3|=i(w@-GknNS.xRs-I-<c ޓf2:Ffrʭ snsnjڟ&讍:ImQ嵾 V8Ȗ0,h7p#0~֍abE$ A²!ܬڏ32]{Ʀy|8~d9e']P'{e˴tϜr#slGO #x~6hzJ,⸍:e*Vc?:J{<r?afC /EC ɭ?HBQjɷ7XӰ_IDATpsN VYXihG_XC馛N;XlYZ5|_ꪫ;xO~?i UP^Ooƿs;ƫcAy.=H՚Aȅ*nEY"xy. d ͋Kqc$?-sk 9 (%{%uz4y{D#όDNؐ57lև$|_qCמeA_8$5qy+GP|-b2 } ) _QW!D563On/~>"_2Uhg p<snܝ'^K XDG_Z92?5}_H_/<}6vC?_}P8ҩWҧ[~KInj%+\?#?Ǽ>ة\{$ m_z% @aξR W`S1(s߾$wi~P&4}6(rek`gI]]q9ElATŲo:{ MA \i>o'M'߉d<l2j;U˅L}b=lߧVX'gAqcz1w_I)i>҃A%Z_QER(pߩO-Z4% ̚k#m`3ְLy=q"b-ٓ_z}WJ z"\xL]@]^)9RrbbDIQ:9<#g?yU{K /?uj<8[=J@:ݜ2BtBESq2ksW 7o/~8wO}Ss嵟zOsg4ף5 w0`(;sCdގ VN' Dow奶H3HʄJpd""J$a-$^RP$({A[%4_Ff@XZo~g7΍#O`3S56Y门ãǙMe8n.嵙n 1J5j$#R%/EbiҝA@85 WpVg@,i>*h%2AHP\ʞzh]aG~)Vc|9fۖO)|D OE14#IdJ\u\Vn7Ts:P/]=tpד8H@ȶ/@=O݄$k׼/*d}+*q#|DAJEQWc׉>T=3ĭ+( \E P${zqϓxn@ ~YoX7WC cLkf tg C]"{gjad=S1p vÝg}xϽ "FO~p'2G ?_)tl(|i?|?YA:' )n~j J?<{8s|) ض|T??kٳ{ =Z_B@"x Ό5G▷!z_z0Rқg22=m}E$x7ڙ:߽; MV!,=}>{u쫸i~'P%D N??<PfR#l1S'}j+ahmAFj3u%_[3} !V¯㩭3u>e1TXam|?']y%8m!<;R?ً Ɨ߀)!H ?O`='BK`1/9>Z3wCfS,ǫqOO/nڴi҇6mZpn.tymXhѲezSN9^'#{Gy$\fGy޻qеɠ͛75y_m\rݺu{M @wy=W3=;sttt/!Ĝ9sO;ITzѭ+WW\qu-_|5p 7om4rW_ `/m a^e˖./tymo|pppth ]?vϱw~.]K F {wk]tž?..b_C׺袋} NmIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/repo/patch.1619.obb.mainpatch.current.obb0000644000175000017500000000000614717152070023375 0ustar00hanshansdummy ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/souch.smsbypass_9.apk0000644000175000017500000023661714717152071021143 0ustar00hanshansPKrHQHEcڳ META-INF/MANIFEST.MFIsHq&6:b0 $BEQ@U"׏Lt֕|/_ ЃElATYxA g}) 'OB 4O1|nB*u^|0< xA@%wx=3T-χA%(O 낢Po)p p] <mV5Ac^ %/M -yRJ2kš.>4˨zI`x۝)P'Ue0v jB%HCenRS+ qqȬB,^*>SURM,ls)H>|JN = cӝb)wW%fxO@QsQyŅ mKv/~a6(<Ԟ<Huڹ]jmPPR.W>+ښmJ`ZuMyzC[0ȥ;XW4EovNBRe~I="S14*~NdGhFX/֎m5QD%LNdx G98^L}g^u NavhU(zƍň׽9ݑ+RRΆUi-,xw3sLʼゥ裟Z^{xvy5Wβ"'7=eҵb=F(9ٚT}}xu >N ]s"q UB5[xނ̖w+8'5uaGҰr ?26TKe F]_&U@pP3ci$Z97zH{o5o9KYAI nxK/zG@ [k7A GkKŎMmbo"}t? 9Z!҈Y1n Jw|h,ސ$?&&i [νyq=4S\'s0==ns oe[l*eXOAa}T!e}?˴JW&3KC䞠 B(I 9Zj LmiѲpc?ZAPZt3⎔keYPX8sF9k;W>o~@fZ~͚duk;U9 |P>3S|r qkdijI" ~e+,atU-fYр_o֐J"L u?M,M,N&k86{ LHWfc-\ 3PSLkvnYK8 ?FMhJq(u4fk'PK) K PKrHQH+0.META-INF/1D0C682C.RSA3hbbjhδUڠUѐۀUIqAsAsAf&F&&i~0r$M`eaf 61q8a_^Pcæ%{$kLr?lrCGwlE;aV5wTv2D|je^& 0i61R70/d>-C31RGM,M {KghqK`޲4:_3BdRwߜgm,u,wkK`IO}<'r|[L)Z>-_S3_q`w^׸?(Ɉ~fK_:.(A}b >:dso̼7oZǚmju|wۑ]_:HkzK㞅oG]|ͧ&=P*Ѐ"Fa@2Ӑ-PK+0.PKSPK A`))PKS/4? BJKbcCJ3Nh)$k\8.\;;.… g_RɹK" ws==G)Q{u4/߁I*~6}+ H-πX/߀b~"}DCT@%2UiMU>1-&=0G{VA%0rkGzMν ΥNovӃ/WZ&QGURbD6Suv3&; ;ẅ[`jkdT}hb5T2SUh9]+A ~n%VYxM^{3ż؁ek]soq~V4q l`j<k?.{>4.W"jǎYq>h \>q}[FBנZJ9 {XSW1܂dDw,Ρh<h8k[g]?יs\y@EβYa_VpD9秉's͠jL}57UĞ0sOF#s^ϪwɳO豳Yiey@y(ɩ9z~ی|E6Ik8UTW^G d6r.620y7.f9>}mgQ[7FCރAqeV7Vݏ8~x>%{6Rl&n&z>G6Z0oV?5IڀAoYLRp \".)=>arw,%-rQ1*.)\TFQY1]* %{ךi~!ΊY_:߰ +?Wg·dupQߘc\qpb/(.|ϩyfnſW./Y~Wy?%ği_0_WCx_P:/v),zZp#Z]ߵ.~oi~37\[FV7+~a:b%!r,1.+?Wg!2Q~-W~9ŏ*~I[9VPK6u`$PK NqyxI hPH&(ȭJ m۞Y0s6{={f̬ogXS[C7>("8瘝9zΝ eX'OwTLt:>rk-Y,zu+a]։$Un399,"B$diJedYF$Ir0%hhĘ-v&I$ADN@ISBo1V :AD08޽{(6UG! "Lt:IF/%wy1 iňKD0Ƙ}]zy+{,}nw1PUʲ$EQ033~uB9k|(J#U`ic!/,]vEQ쟜099ug-9TJTŇ@--0Ù1ηt|].[#I!+ ˻7Ƙ VEQEA$}s cdY6/o/arļ/) Q9igu͑^CGڊ 9_ 8.^q@6+Ϊƀƀƀe h h h h hK:'HDH"H $c=k@U0b1/ D@ʌyƌr(!/ XB# hhl1 i"OiJZY<- bz4@B%O2Ps{%-8pzuB;!(JKM.;t.k ֔sL \ @upLۊWfr :uuEek4h Z]RvIk`"# ;ٺFCj5Bu==U FQk'%TEA9B+ϊE hRQxN |UODڬWU4ƅ4b}y|h@31;K4wߺ⒎5bD+Sb(K =^/%_6pVţ޴MYrsw㷋`+'=sK7OwCΦ3 }3Zեނ/~i]'eH8y[,A^Vdu):i?mz3ٿ{~m N/X~w hqg!L*]/ypg#k_8瓧؀T#7|n;>֝ye}rb'rU7=B5nUO^&'>?qk  |S04ןyp.□8y3}ɧvͲk8wơ X`sC56up>o7 yVPʲCl3n- &T m&~&-K.my q61g7Gb#|̒yZmZyA+kSٗO'%82*9)kt'%uX(1F2QQԄep j^hվj~c` F7xZm۶MYko"ƈ1 ;|T]446\ͷхv9kj]ׇUa[t:껭s(PFUΧ 377wP&oM*x=q嗿I!ӜIENDB`PK N!1)Դ̬ܼ| ̽R'L5aIENDB`PK NG[Ԇ K, SOXx2]'T Rk#"v 2~ҹq;, ze^ea %zb=w1C2εuY++zEr[kzS$z-16 4iF 6߉} Qx1_YŸI·&Bą@9Ἷ<') \}y~RU2)"}yca4AZkUx:OR+ \~ctb^,D čSR=֒ǟنg_&z;+" oVˎ+!2]DmD&8'ŴB{okMGUZ05(2!Q.p3,UZVMXx3j9Rg^A2J3/}Gvn(bb=-vO9}LIugoM1:o8'xWEKg iyiMd+Im˙sϾr[F>IZxC`)'{>g"%Kpp]5"O=1>rݼ7~c" Vin2i m$6h9Ā31jcF|zoddH&Z*6Y13fuJc}FE JWPSm !3MڍqF[ce^M"ls*uKl'''E=y H % H$1PlJ 8}={(UY(j:TUE9=1ƾ(RZ=zVo] IENDB`PK N  $F1Z B})" Z9uavOOi>=]d&{fϬZ7k #*oN3k}㺮Y>HTu2z)fy!w#)%R)?UVk#"c Zmԣ{҃Wjf!~RhiᓈYwߵEQ\Rq#HeXk#"W|sDCDo<0,øZO:ηEd9ʲ$Ĉ5֘̕%UUQ5UUQU{TUʲpr#">w|g,7βGEQؓ\"6!&xWCgY6  !=sp.Ax 1jURV@ꆃ1-ɽRjK1W/(֭[Ekm Xkx 8vH nDadʣoqq-Ci/V(q 2euS:v>[?H\>ImMW' s6ʂi 6xTԪJÙQ"AQ7dMɳ6ml}0Խ )q7K*7!P%e]RVW9zn%%xAD4E>Ad544-|H}\%/Xt}1iuqUs~> EK| 1 4<2NLMLŚ'zc ,U%KUIFM&{SW{>T/%SER mEQjOi}H>&5MZ+ 0woާ{n%H9CL$bsT4ľf91At0@=dVCf_VaQ vyx{t+Hc[(a m]E{NasY% _5OS|m[lK4~M L ZըV;]#G#J %;A]5}G98DQ\[6D^d6QJ ^~W;phL!Lސ@X{p޴+sv F~͕x{>OEAYxCy;YNxۿMH~MeG/c >ξ?\nU=cL_5K>-_/{-z|/`r᦯wbG>56?b?n5C[E1G#'A2<ݛIyYn'$&g3ͽ}1"rNH=߼ƅ2|Jp)& i=Zgʟq4n/-e.rq(/k^Q"ODNiuep? CW^BjOʚNA@>W ~ +;XZVrc_69+f~K!iZ+VdFӲȐ;C?9@dZӶyJ0is&ÊBKH¨QE !sr &Z-&Zt&[Lb`9lfB_LVʼ6⃧/꒪vƊMZD7 y3#k5Ť".M 2v튳su]1mb/dYE3eYs60ZBhTeY"o&aiRJoSJF/Q%IENDB`PK Nn}:Z{FN77@JBC=3l rR1nUYWv0ZRxV}%r<ǁD#31eS!]Bj"؈Q[;k-O g@cNmԇR+)+Q<}$^ BDE eoWf335(Sly_+Whe{/ / / / / /\]Ma{*g fb<@L@+VcEnǮۣSB r޽R4_s}gs)tBUQOQ%91T u)38lrsGUJ)'ְaնm ҡ9abTffjԜp)qUș:^*UA Q~lM|/}0 B@UMU>K)B`)*y,>e 994bIENDB`PK Nhʲ,K:UpXȒõ/fs] ~[n9㦛fssϹu6<<"2R{OYkJQ8vs bu4#1c$6iYx1gWߋ7n~pmֵԖ.˲?Λ&ƈk-!* YV_B td YaDbf4 RJSᡝ;a֭ڹ۶DlϞ=E=FZCĔІ91f_W»y4{njջ8 ֽwlۺk gYkY14441c-I~iX~GfQmιy_`։Gg5'9Gew=Ϥ1ZK0y1!&&'ksipx " V>[g]m(SӋBה :ietEeeL=Cݷ{C: 0`@ h 04!˛+%$IzBtcEBJ"$AP Dh3M[ȀP!8!T!2+,'|Lp%1)1D‡z*z+PQ /Iѐ~#E(PjP %9Lg&H@T)c`.TT%O(MEҊ!x*B=39[RV1ZbA ZP'XTf.ף! U%4bNT>H&">z *X"1?14fȐ4W<*c=y"RHD7UiLjf(6b#=S攔t>Il7"g½(G մDUvwj.q1E?Tkƫ4W45e1@^x~uÞ}ߟ^6є~D47yHQ/=6Ig2,RWi_gbh j2.NxOɒ=2z$ϏOs5gbf<Й,iW7UPўb㾠yU 9ꮧU_DEc zC/U$Ti^cPW]*?{t^$}ߛL]b XILE^)*Vl&cG=Rg_GwDb#{|b#(=&`WPTPx1wZ(IA@=gGg璟 VrT4; {zS'b0|Q/0f*C/rgq/E `?ѯIVuD < k94÷9[ԇNöo:},{xX+Kq7fۖM i-q m}={cIRl%O~-ʩȕ>U gqח곞?a\>7Un&ЏfySNF.Q.f v` Eۑ5DzR,揿VQNF.v+wlQ{2:gxR|F. ԋ>]#R3ugUQ/CU>`v" :7y_ e7pGYM[ .șcyк;7q6>Հs-s_G?8ˏA l.U93o]TnO}J|{/y _1*+`p\͎B {1`VF?&e6s^Cgg>@V$RQ~!3o/tVi1T>s1;p9cY?q>wG[~iqo^u2g \p6WN9+l_\hzX| .!Se(zNC{K#.,]z 4SdvG!O I-^QbFsR/'o0u0 ",8#5k Q})}w 25ϊY3k w!YdƒYGR3DSAm#Y Te RϷ̀s2kɬřz[QM+Α;G QA4A0_, AiuC-D[YFgV1g 9<9rp qpK:c)r$B$&Y!X!{x'-LHɐXkԋf [h VPvZzk6oYFiMxf(T`L)Q #YAnr4B h4,>d K|hT)R.W(\E+趋e̽= J]W 'y̝TvvVIIQM1Sb@g"%Ab]Qj8p6k>sdd)U.d#g faMcV{%eYn0Đ^OgOؔSY-RW5Ħw$j$i]5H+bwl{MnJt-Ղ!PA֠099ʚJ*ֹZ" &ǶTݖnm±QjCc)j];{7v[xh> [yf^x_*_FFF>eZׂ5U#u$b%2˰,9?8{/UeQgRsWok 7.{_c|Fv[qcJt:.^O^SةvӍ1 ث.vdm;o3~pm(IENDB`PK N\"T!P#Y-kAXzй{',ZMy?]"U"Q#~Wwи{,~Wzwи{'Vx~,.aZM]#V"R#Z.mB[|ѹ?Anh[O|4v3s4{@Umѻ޵׬͝ǘ•ƞ̧ϲ¼»cjtRNSDay.SSSOKTST9-W^__G^l IDATHc`$-\<$i R'A-J*jZ:zF[XZY;8:9FPKxDdTtLl\|BbRrJjZ:Z22bsr S RY RVD-ZFjB3-Z**RU(jj*s[Z;: kq0q)SM1s9̝7E,]|U׬]GP 7m޲u;w޳w1e)*IENDB`PK NYR%H, b$avisSSd!Ġnj|s}(EQuJiYUbwSVz-@kd #R)gR%XBTs JX NMb̌T}f R}k]j G3{H-@Wasss͛7nVpUԧ*3H4RBD(PZjZ9rh߾}""F!ϲn զ'8!<: ar Ν44u.7o[aW`333{s{ͲNsnt Y J]K)_vq:k~t w~G*{! `4X/ɾ)UJ*Nw.*&ɲ,#a!u5Uf>M0*lpnEKTotmN]~eHǸƉ]UpyOQW 87?=I){&+[ f+I*v4=]*J71I0X\ړ8Z Pk-@jjZZkjZkjZZkZZkjZZkjhjr7en7rr\e=2&Vm'X_..E VDkRb Osy bIN1ur,O9GY)nU&* 3E&If4FS}F%tq\>x,KagvN3ET 5HfȆE-HմD .Si%wF ON $/|F9 d>=;}"%z) #P3tpGLK'd L4)iXf1TK̚1 >BDYȂy%˔yy9Ǒ| t-$gvJ~*XEOLJR#K\H5i9GDԄz*pb* K VlG!$2i]D'3#t2蚠N<ޝkeJr/JDł8 F%S"3YDt=f:Gc&8Z< V*jRcGT&#ˌ(Q!DU[> E%M) *"5Rҡ˪UqOcΥ~AoЌ @!d L `8yRyAxq{x % ]YAIɈI8. 4TeQQKR &Ej@Ӝ2k`$-ݒCI(aDù̧t0̏ɴ,;(TIJjV-ziPKr)գֱhȪ *RE"H]*'%|R|JLVãc XfLT^-Dv}V3U<_[OoZh| ӕ]րjS:l1[qн$ҚT4\W|BU ;2l,Zx089-TBk*L R9 &U ¹S}^|H*=cĭjJ꜏`&O+egя|kP!.(_Q O'g^o3oװV^ [^}TsO[_8˺f1еgywJ]8vpyXP f?=)^[h{]oOs.'||[J?%q'󗷒bu#eZʨ;sNpa+F`Uclkjd{u6&C Pk-@kZk-@[tb_9"EO'FZ֌ kK< ymU.O~zCO>YzIxNL Z82_ȋ}?W uRyRQSW'^ZV| wlb7'IQ[Zh#}vfj$'~6U*\WSxųqշ̟N_4s\ YGaT'^^lt:v(#̶mff05㗷!"'[s>y! \ ^ $qE@9|Z6nc +w~L>5^ HmxDʟo#s{ qͻ-@ [g0_:}Mx,D$~k~.7b5Md HCs'y滇HD {~tdM+X 2Bp~2npz ??Α q⚈Y3;r)?.m+gWyWW%p3,&BDZBODP!c t|k{Y:x<ϱ}&Oy[5ejsv隳G=~w^]6̹v0-ن iOpӖyd?y[>]"RȬξpιqjo讌rPrZ+L.?\6Ncg8uKxvݱt]qj3זɟ- v/ogmSl4X8vp}{7r;zs dz-3K  Svfo  ʀ|68OоE/wLɇv0;a^ZГ瞙?3=fw G_Zƴƻlޕ艸';qvE=: 2- lٓOf3Y>sޭ?߯Է^Ti-<@fƮ[`zs€' ?vy[σhۇs+i *  Wx[P\vٲ+kfL|w&8K~g?81iwA[\6m 8/4M|7>w<1q?(S[J5{FF (x>'o1$>neӎ6s݆msQ qo21]E?x>H' Nxo3Eԝ̾g>8>3?~3Gxe)66hnz_Bp})͟rE- /iO|w{]~LD|oeN{RZnk+}z[{"Z,( Ώl_uPu}y~k-@4~lZZk&o6jSwH64Aktz"c/rn\n!]盷̎lcWµ?ZZ> 8{*5?vMk d}]-"GOXИ iTx(#V\8 Wo-)W"iU2z!7'պam~>֤)/R3 A@ư$4࡬93LhQ.Pi-w؛gT(1"dkRm;Gkܘa,SWJ_VwpbCDG0pʰKEp(`V Y}NS]J`;2ȼ'^{{DujOi.y2Rp+ h3~)`dT @Yj'@yɂ'<C \} SJNm>7+ *xr!P%踲҄P=HHHсsP8zRmTA7KJ)#Yf,3:y9 ]O g] W^Ź:!C-NjbD]N'4PT:!#:GB򎘄ybb >ObV)1FSE:5@ge9YB^Aɲ,| qF5@1óL<5))IF:LeB6z)%4$&R$u:R0hf-3E dYs|m'@HՂ23GfaԪRTuYHIRrYf%hI/]j_LFڠY@GJY}Y1:WK)%z1*YJi<;e8=&1yHE7 5Tc7\wRAwO>;뵎zh޽ {D @̱8Wr__֘+>@WlL@WT*6Thlwi]VoU6S`sss{333n;T1RTra: &|\ KJi 85 kNGfE'jcoٿJ)|Z<8 |cvvyVκy;G^Zs4^L Ūu)9?ALնf'{/y]?ll>uefSJ>hJ*;(~S5a[})% ڥ/bJ4JD6}_y衣P/)uȠjIENDB`PK NKꉿ?;D<"Ske16wfpcg=x7o|7"sHJ0)QǑSDڵؘDd'ՏU;~,T?rGn`0#9r&O-DMESy;@WD):UON4@57U1t ;ѵk*x6E", O?}z={DDR(9fϝk3=sz\=zcH "T aW+P C`JA2^o()tMO@wD3]p7+ D_FUsZaqc rJ\vmy6b fp^zwIUYysJGjңRJl$PU9v3nfwzv}˧e8~mǿ5cwkhx 3O?W^yQoܸe#s;Vkhωhn/o)7@M9~zlZ aDO=eB7o޼R}U~xl*88bHaYRZR8b+z=3;Ծԇ?|i__%Uxy(lmz",RJgCDkqzohB;s~7"^{aׯ?RږRl6JATA]렾V~ ݬ]ݠMsxRD~3?/ T})%9/<k8.`E! *UEE~ڵko)"RJ) ð2*eY1ڥ}3=p uK=XyAZZ׿)z;~H̙ⲏDE{Ә2햇]ku6]@\% ð /p ~Uuu:@]PWuu:@]PWhc}:_wʇ IN.]1=3my{$V6o_9v[ Zoפx{ ,gTEUNip*G;m!6:N47" sS3 <ﱼo U LL-SI22oG{A nWū78o[`dyGI,_a6-z]M <<#I UBb 2 %r()i:1Rp,_dd4*u㤞`A HxKBk`Ә5`~y:D u[HN9Urdl\())R02lC! wuɫƩב[))3ȆAv4TxܨnJukMTk9o!D wiǚU6S!gږs+ƦC <BQI$}m@}Nũnfj夎:ՃjFKEN~n2Nێw;Nv>@Dɓi9X0qHITwd.}Os-EWFoS֑ՠZ9A̗5<jۧ#'fPLR)9AP2š`8B&T+9e "0{acK*hN#Z(ޠ@澬TUt4,Q1$!VR͔dC(,)U7Fw̢9 S7=|˧zi-lsnTD@:شnjdN2#W $@9=d)6O>mTqcN+w򅳺NѱzX+C΀n y_zz q44xrr?3!tq :@MiЛ'|~^a@oz=LGw…k|WEg7[S_zaC&]U+PWzuu:@]PWWuuu:@]PWWuuu:@]PWuu:@]PWuu:@]PWuu:@]]PWuu:@]]PW荒<@["!hRߢs|z ԯ+< N$gH%a;[jr|y~ |Y}d9H҃ve!jH9 &.9EGT@E\@K TATN-75 < $UTFtr"p9>sؕs˺9OTJ%O3Hzt>HaN 9(EP -@Sjs@%ERG6-%3<Ӂg. !'%'$Ds'DKPD\Xɚ()S, N4A8L ")MH$hO"(Yw!kX6N&@n0<ɺz9H4 1O{m Eŭ(4?7Ji@HZȹ@UIS [rkާ]<Ý3AyȗTn3r )G.Ex(&h o0-c=nXl^;e+U"FB

    R'_n SLe3\iJala.Fmd _Kga1Ar7pf8^ͻձ+"~ꙧwW^y7n0 ?4;t;ܒ*v}gY=63bnxkyA3(iz'"ЇZ:}aN3K֘]2rtt_4-gXPs'Χ{ݜh)xGy櫇a?IENDB`PKSϴ3٧(8l?ƾYJB" Ogz*C—"rw|$Q#o 3!R˄Тj0"Wqg!S~V9M ^ӓJN/R9"㊖وwa.Tz xʻ0wrD9+!Rߒ#E}T@sFY޾nP? rf7cg5"'ݾjNz)vȧ1smFԾg>+юRNqށWYGf:Wn"-nu^꼬b|t7U5B:$Ŝ'ZW~PKNZ! PKS]qBpGZT*ɿVHیǚ;a;OTr]!jZhS>!mxa蹩A:;T.b}3i!;i*ؒ|(k3M6cMNCe+ V`ZASN4MmqA+ F[\ }jn3y4oZ"5J%B bx͆72b{|?wa=!Əp|3o}TѣvfNT5Ou/5#ZNY{k#o]P|,H2ڿjVjVbghWs[R8SJkR-NR|բ~F)y63i8eRF)-ceo_zQ}/_W􆬯ԧdnC9$oo(z^}klJO?PK6{$PKSȽbFƽl{6lDgIw Qv;"w oqGmtэW;iqCȲ}94&BD3Z'x1vv4Ǝi ua!@~eTe}uQeWԾghoY[!0T]qJ^#ӰJ}[&= fN)?+=/幜sU83ۅa=PK.'u$PKS[[:!N@Ҳ?6AZ-KZ'EpMnP@^2RNJVM5W奼OޏkM5EgGo1}njNTXi6LmTQӷӡNKO{Τξ$j_jGk ' Zy2Tcs*z m{?D3H):RhD0z:>+ۯUH:SU:Ӣ}F_I+ib:z>FW~PK mAp PKS"pO{'gz1ڠ #Z'O^! n`vS0/;|_WNCyE2׌NG*VB8"[˖$"dʩݖH yZH̔ߊ2,.a"gQLX<.ƋQE >'/`B4:PJ棸VkGwҔd\|Y@PcG falX~b+>juhW3Uueyh76]=߷9N9Ƈo9Zj g{.*rݚߚ;Ws~ Gge/}U5 ߭/5owwc{ 5tPK `FPKS_bgb;@\.s.YRI1Dj"ƈSܪ [xl0K )@6P*Y|GT.˯0OmcEX^j5þ9CNԴyิڎ;vcɘ=T|q﹮C>2XcD\HWX$>[f?T(:]K`[~4+ N0|n<6ASwwZCᵢh3ҍg{ݩ=yA&>3 ozRb|M9Sm?c_.c5Sp;8诃?O|i?j ,ჶ>9y߂yY\%iҭ.㌺/v?$ ˉe%RJ?kˇ.WʞDj"o#彝KԹ+Q1v__*ŮY^[fJ>)rJ%ձ77EP 7//Y gWyZۚJyg)[>%7PKvXjPKS\ryoL<"tKyZK[iBM7X֓/[/PK쐉qPKSY/ս$<'ːLLd$4Ƹ@f^ B9ɱ-lme8Y-e΃@x\q%OyH1Ǚ30WbgG|? B'Է3t 5Z$ڭU𰎥kgU<vF-1b<<:[ۍZsT>^&nկ([^wW(rrlŗ/PKhc,PKS(8ocg:dz|҇Ah'ߋT5w㘨l:+LIA[.oWs33kfپW99 G=磞WBߴfg=-z[*m>`Ν+hUs_ ~uWKhRdz̴U{S[652cZoPWO?-謠PKw2PKSlG7pQ'd1K膞i؍;s$~ ރ{5;пD j nѠ ]%Re EQŚzc|i#Մȿ_]EJ+iu|S,]ߌ:&Z1֖Tl6Us5kSjޜf}ΚeAiJ پGz:[yl'Z٣xV'iz-H.-R㝎t):THJ<}m=w>ii7V>zTڮn^sǶ.|{Rzk10{ i9q3-wm%FwE.rd j6[ZH]D紹Obj [Hx3Z}080>c\ay?7ըO1*qo?W`aOSz(Q+)\0W;%|1ZSsyTV/]Ȉ?LyU8YN%ųYk.0X{zj]Ly&]ɈEpK0_VF[R|\iһfsS3u.;Z*ޤ~~fJ?[M+qgy6qE|oPo2pJTvnhFqhM%8?(ųPK/8PKS1ZmdVfs)I"FY6x `>#ps,5h4faE~XWzlbIV} z=r\W?(UV8 B)C CjIUFwN0,\eЙiZRqw^v<=MBvf:xDG"{dc,^3tC;_%?@ w Y5/Rj-Uy7JJi֊9Z9GDTX?_f~_ Io[-)hGA̚7r2b=Ҫ9eoo7PKoȯPKSI9N'OB~$+4@)N(*"Ir3۾S-V̫I,6ɷfg+S8.R8[z[RdD~Eas#"_?w/̌kd:! Rnxp2 s[o;:otjUZ~7'PKKPKSvfq7qARdD"9'_|7>NeB& Rqp2^Y??PKVDnxPK OL\d} ic_launcher ic_stat_alertbattery_facadecheckable_list_item_2content_filter_item filter_form filter_listfilter_list_itemfilter_list_pickerfilter_list_picker_itemmain message_listmessage_list_filtermessage_list_filter_itemmessage_list_itemmessage_viewersimple_list_item_2filtersmessagessaveBlockedMessagesversionvibratetextViewBatteryLevelTitlebatteryLevelText howtoStartfillSpaceTextView closeButtoncontent_stringclear chooseContact filterNameaddressaddContentFiltercontentFilterViewcontentFilterLayoutmessageFilterList messageListmessageEditText sendButtonlayout layoutInsidemessage receivedAtfilterviewdeleteaction_delete_allaction_export_messagesaddaddAnotherContentFilterallMessagesWillBeDeleted appMayNotWorkapp_dirapp_name app_versionbatteryLevelTitlebatteryNotificationMessageblockMessageIfItContainschooseContactFailedclose deleteAll deleteMessagedeleteMessageFilterdrafteditMessageFilterexportFileBasenameexportMessagesexportMessagesError filterDeletedfilterListPickerfilterNameAlreadyUsedfilterWillBeDeletedfiltersWillBeDeletedfrom fromAddressfromAddressAnyExplained max_versionmessageFiltersmessageOptionsmessageWillBeDeletedmessagesExportednewMessageFilternewMessageFilter2newMsgnoAddressSpecifiednoItemsSelectednoMessagesToDeletepartOfTheMessage pickContactpickMessageFiltersreceived saveMessages saveMessagesAndShowNotifications sendMessage sendSMSFailedsorrythisFieldMayNotBeEmptyvibrateSummaryviewAndEditMessageFiltersviewBlockedMessages viewMessagemessage_context_menumessage_filter_context_menumessage_list_filter_menumessage_list_menuHpP4HpP4HpP4HpP4@HpP4LHt4 0@P`p          H4H4 0@P`p 0@P`pZZZZZ !"#$%&'()*+,-./>H >@4 0@P`p 0@P`p 0@P`p 0@P`p0Y1X .234 5!6"7!8#9$%:&';(-)<*=+>,?-@[A/B0C1D2E34F5G6H7I8J9K:;L<M=N>O?@PAQBRCSDTEUFVGWHXIYJZK[L\M]N^O_P`QRSaTbUcVdW HX4 0efghPKS~w,d2IX!AaS  Y$3AwUZZZkE qmk~j+{ޙw&>9w_=sLkxSVt7t_rְ=Gqo|BADL"mCN%z Q@hI4W'=y/рiW,  | ||||Wy (@ P LXl.`^9_C4X ~<x8| %&'&`3p9c&Vcg=>%!9؅D`&XV@bYbrZ[_/_Xq)@ x>Q74+X+| d]Gt<0X | h(Pt?_yEM?*n*@ލ+ h^> ! ?!:,ۀ+ 1Kv,2>] &@3pp;'/agXnn/;[!xJt*` pp,+3j`.X kl| g'W}y` 0 8 T @ \\ xxpDX4<`7sy-@LNB`3ppp=pp7G`&yÁ@5[w/_·v@DVg?^>0F}0 Tu@tW7~| .\BpO. wwN0 3T&`RI0 f"F` @8~ycp&Z$>"Q5L!#,/= ^^oooowC{G>O3s//_|  jXL!K%H/%WJx7Uj ߊl e+ȥZMiy~S$Z p@2  Pe<ةdWfr|.-9c $,B_%a|e:c^-IW9e|^|S1.s_!Oma._I:9N[RuU2@ 8'J$ Pf"12O,$*H&la% 'Ix-G\"d [˓hnk++qEϖ>6Kl'ϰWylgI8dks|;5L9բK QwDxU: _mKf,KJ&[+[mڿVe _u527t`Ð~cAMM7}dZF |4Sz|^^fLMzJѹI5&Y 44=Fѫ5h* oQAkM>/(b0]E:~>:5f$QW&KohO@E+iɴLo7u~ۉDU`G7QCӟL#ɏ"j2ME5:!q~.`17B(کڋI{q4ChLߖ9#zߍBHP=Mߌqv~$BSCnQ""*JYWTLx{\,g'lN?tEuH*KSJL!B$&w'}-~)\ HBS7 YBs/}U~#BMBg],t6FFv8>7CTMBQP-' $tB ]$TuB녆.04u =VACh3NP2bM8ݦg|g6:}U|+=6zD跊>HOI?}F蟄1djItG~ ͧBQ]''ӕ*qe|L(EQN*r=*i0)~a2LLGh -Ľg үT4a*ڟrE=&*Iݞ' \P3~XE8E;9>XWo*:X|iǏY iPTOn7g%]hhCE=Jp|ҋCŗBXo+CvFc~E$xEHI8໤jzVb;>$:l+F93^M.3_LO|Sъf vHv%z@r3^5qw0x|7ժ$OQ'E3)-eH3h]Eq?t*My@Qt` :tߝFTY2rrLϡH Bݔ+whgQ8l2+Q/W(ׯ\ V`0WoeSq]J&SrIC=<*Rt *I0qAw+iD5hQ{eE>UTws.,n?RK=*|8L' zj!, Bdk`q"ԍz:֡E&ӹt |7y/=dpJ_ y`j|㦫e2@MG9ECCR0j5@ª\EWH{+03 "Ts:=-+OKM;NRtf_98=H0_ݥkBKgߺ[ś!k?kNR4LA E@+MP~/n;x89* _ońO1[LĄ/1!&ɼc2d1oLNu-B7J|#8'"_$7T|3ݬM9mmgm߶FEW(x 1E5  mnnn9**rGފuxR?%gPQmGou*UeV_Kw*~)sϒ9~gzlm?Psn.]gvY>e}z/ M ]֩~֩7*zZ'7 Bz@Q^=^=^=w{dzdzdzdzdzdzdzdzdzdzdzdz%GzzdzDODVT߹+ŧse=vv ϥ?wvvwȼ9}Z/qqqq'|.c1E4dAAS0=_] BzЋ^"R]%~K>Aw(ROL+?j;C]vrLj4R cEP@{hKݹ?AEB4NT*NNUtZd)z}_zkwSCbEJZGHu\zS݇"GW]!srpVwߣ+:}Zn_)zJW?/VԤaj妚="@ե{Ѯtz-V#vgP9߱B|~ , Z!wH [~PhW?|~'t)5]V*0 kmWωy&mV_%]8!w{jVv~ z H'K[>#G$d[#oh8%o[L{&D;|D?xW88J~,Ο]n}} M@ǗZԿFhȿ]ϰoqF7HqXoB~_t|k93旃=䟕6?wKiϑGCN8_JqpU{3Fmȟ~/l]wM/Oh>w~g$ DUw]9iA)%asXh;:o;rIx)Vt[8p;MۀO+1Im}~˫WII\&Nw(9cmlᱶCqD X,;]+tV[j[:[&[wHwX}Vg/J߶j i ;Mm:Vh%B =SUBozjT/hk02o.bM h["̤vG8^dK`HG䳥ڲq=k'=16N?~_ķ-dS(ԓEZijoRS:oBuyb:+Cr!>)2z#͉Xe =8ô9бCe Q91&OK*T|G<1 2_>2y=ߟY[w)6:'Os]^*,Uftda+lN3v{ z?SY|ʒZ?Y9}aK$}?G=1|/y)ՒQIr~5dȀ.'}bdz\ eyqu@AH_K.~2Wh曣TXY,l6f㜓;J(g~nDJc*Tڈ8}g$V"WQ_~V.$ci)͡P)fcJ=} kv^'C$kH氮 n -%7raZ)ܡq`YAyiYnzcEBp)mR'j+BG?21 `yT3g f`t0k Jx0f?,xA7|g*ݜ'ǰ\򣾋>#2ƦZ' zrm<٪*/WJz=`1Ȧw1usJ՟}vOGK>Iq^]li7ܫumx9WJ~(8Dv'k%m}|ǓtoMwaF)]ݫk =>ofޥv k?/%H1ԾO$bò'dclfl3!*e.u qTRYKNA2˩ӆpvAOlvT-?O'誕P%}Y&q8qTUBGM%M=9R;uNnksU @!ۋa=:"r&QɻNY }D'H0Y S9^rD7R)J ,<}n:sRO'}{ ςy3F)eiD~wC9?,s6( z9FWpwz;ѿ[Ë1}kt\!/ij7ӟ{c}GU%\w>Wh4Ú()d8\ϸoӟ{1~F֬!JjvRs{Dj~JjRYʳ`zTIԊkGeQlT5*540a`ybռJj/6( 0ЮjnD #UM^Yr.kOܘG@sU9Wn?ݧB#N9kσ6R' uɡ+t 3ODOuHQQj_T1tq+B7L/O\TyĥWNrs7sޘvǒQ9d.џE(kW5H<1:|M鑶1Zؽ:f}M"A٪yV|?ygCchyBrιq,]hh &FZ#yU^F0TrvsvypuE|G7H4,;R絽؉.7W<7UaI CɒOt)mTpp'hϳ^lubLfM.I#\̃7\/+kǩ=Fi{~#oS~]!5'Np!E̢Ehk$eo^^|Ls ^юr&}T>N<%O>yL[ m +aij\cy؈GMR>#8#d|.B;L~ `ljd}4`թ70U[{BF;]0e72ʞ._~?RmK{NҔrnuLI?JOBܪ3Aє8#zuZӾ>ϧC/=i1Χ|Zf;<)S*Q(*KFӨ %qQ=X݆>t`Z;`KLŴE%Zſ!/Z”žϻsmfʹvbUv/Ԧ&L%/Zz)IϢdpY 8ELQ(zGd4`h=5ߢu'>/Y_)L|J^%_ Q)c"Ka0un׽sdMY-Qm02۸eC8,4k|j=we%Qe^i !EXS:LLTiH+t%G>ŕ7my,(j;lO^ڟYϺ 7?jdp*-3%8Kjn͠|˺ aKR˓::8j 1+NW;P1BH UT:x;:X^HMNQtքLJco݉Pӗ{6h>j!ע Zo6-06[~K.KyҥsK7..Y ]ERD5h3Hv%˯A[ Kp^%x<§3_5uq9*YUB<ެ oc^*T>/1mdķ141^ՉyբY)nH;KKx:R#?~Y罩): L:[g+gR,66Co=܆78tWfٕL]ԁ.R'ZVДJQXsSx;kk =:ej06 N?Bxݺ, B'V@F9XVD˘ʣU0ZgV:[7SɅ!%3Pr,kr^j߶֢>[y:[SV3D;Wv&%Ymz6C3}GW2(ab`:4i$4=wrPDZ ֽy XޠӅ2:ѰV̟BKaP #>Iy'?.석RH~Yq=]ʃ"5&eRCBzLw ĺ0O,,hJX߅?e!&n7*?1'O uo旵^fchh3[I {浇/Zr^fYɣ|"2GU&8[~Qe>v5u*_gw{Enmh;KZG/_ȆKDGhUej.PJhEt OxQ(ivc iʳ*c?8_U+ؤsWUd}*K^~U}y a{]}VbPkgXw15I}eF N> }گ9> Osw~aQ[,7b P / (6)`Nw&J'yv?Hёk|ˎY4qVg[X *_3bjtZ,%lezCo ͻh\Jݴ_۸ 2Zn62^6ѝЬe+eW4(t_ݳ,1꺊#vInO_IE/w@SMke:~b߲{S<߳yy" ,O=a@[< XP*6΁QSWBY l~1W*KI%tRY=EIՔ ܰ (K#CWjOWK9 g3Y!l5"* ߬Z6 m&q)v<;/;1ٟ(D߿̨}8?a誇x ջ#YW#}Otr<.Si-Ei"}r։T-x )E}7amEOӍsJLs?̃;w@7cjF?jOߠ3H.^2J~ό;EmCε4ՙCщQQ:sc AxgGxBS.h%JsɛV)|p_Cef7gH|}sȅ5uIm%9@~lr^x.O#x&$9n3:e} \֧8_O ^-^|HF~LD^[m+^9W#ګh9Zs^FK|9i3ESG|D?}ˌX6 u[iVɴh=<.dZp uZ^[5:#]~6١R8Yb9uqh oN>]~؇ϩ_F?#/O|Lf^l9 ieؘ@3-'؟5|0gG8lXtqkvmם|t<26ŸqW!QyЕ?b,t*>%c_5.Ik.}nh+C緩cX-FrEAYk˳g1dz a!wz?%yyء/Xn2+k8o B_~^#/0 x6֦i>hfM%-o؁7|X>C}|۝^Du im77A_we_ jt^_~ կkO~]@)?~^{/?JFܩ5 ;{BG=zg-Yޫ {õߤ/ όxFJiߔz5iosrxJMfTZrҒ%0'D=p_kMпGVHpC^S'F`*KgC%X},+o{E෽lX༧$?`R?:|xyC=`_Ťu,x};U}q[.NTɅ&`We||@>4"L:_8}Y:Zcd}PrpNss>57f;z?2tOwB/8^pH'2?vP1:vы΁2 >9P =vkJ벮 񻊮<¡ŕsU2a֗Nuwmqw~ lɮ],eoB;ƱZy2R[__:ܤN}Mݩ>{qgDZ^mڰU:=}i\+!GHw[ׯY)tӱ<{~W݄$h=YTbp9g6յ⽖>Y9ɩWϚsQ8%[)>9y^?B\6[gh= > ^꽇Ncxn)0ό[@Є8˜0l') J8'pG+[Kw X/u}_2;Ra[z; Núd:A ϒPfGݘ7XWo=Mϵġ8^q*%J;Z=tB'߶$~ҏz.ǠYC(  Rzs韍'F`![9fJW\_4l.Ta5捦`Dv8Mݦ/^G̹+rwnBky{Cc'd92]|8"7.t{x377? T%Kag}~o?#`{7n1RT3w22#[嘾> iWu?VtOWn{Z^3Xo˓ǜ7;MggS>Q=Ծn4GjYX<KP7Vhz-ϸmO$>|Н|NkQ_ 6πVV3c:R(B̋oʾ9֟ c˫A+8+m,%C=^ONVy򖖃zi$߷ 8FhM;F55kj_\{[XJos%[}ڎ}Ɯ%VbWQ]?m-)Nawt7~״nKajաj?ȬٴjiJԸMt7db[~MY~:~Ȥ'3PVsUYu;tmV68BhYx]DS#9#&tt]cyh}f_ |uܿHogrZ^ϾzT~[ ܴoپccw@co9)6G"o9f)mfOliBVMT7Eu.PO tde';g-:u(F)J /3m}1tm.y &"p*] >xӨy%u[a{kof ]ST|}'ř©Y4n+A [l ~SIOudA7/!}{ ^/mr?J*oF!*:J~r{xe6[w:}}˴čxNb\Tvn+ *̘.1t. gq)gOH)?1? tneUS՝RwZfG떥eYj}(l ^M-+&_bf+: ?'-~ɴNэHuZj?wMӿgi5 iエ~?M+(~FuNOKN'MOmy.;-ִri3ůNk&ִrwI?)-~0-qZsZw>f/1ZͿ2i0Gh8c]Y^g ;BU3tr?QhBPa:Shm9$*6(tiIw *dVYia(;J_W} 䓾-Ag~;ސF[ԡ-Sc['侬|u>m<7]ƴs|lb Sw)[ij}oMfĸ=B'H^W+oڸoL5OObJLI %iɈ{Y<5v B3 -:JʌÚ2ӥߓԯPiWKl[Bw!朒,/Kȣ^BOK*+T瘕Jcfk= VG$FQpk B;T-*l.t=dGq|GBvJ& $L2Xb,@+]%cnѻ$ T747w<\,C7#.Y2QoB'DαMq2ɘzIɜqehioO" MM8O>j啡 T/m_]__>2ʫ/lt݈Xr(|ѢښrU ʛ]Ț``eU,j -[TMx<ܵyvSKSkx캦MnkoFV)JM gԆPVY01T^QaY\*w1)22д>X>hYkqgI[̙Hw{; \Rն]]M[:@@m[$U۴92'ˌ]SUɕW7.(_MDtIu]=+ϡ,EdUՕ5V.]XGU5!n& 몰3*Q7D +'sv-gז/Akٳ 旇QCӑѮ ) < )J/k e׆7ɨ!\55z̚ZrZ1y(;Yj{^mJ fꝫ<1Grz"xHHسCJX݄yk0v뷏(kLv9< Ca"X-uʊ`imjضrƵTGZڣ1X(e,tlj"XyidhìU6QH}ۚHS ϭecy\[t 0=;7mH7E֌+G]jKwuEFLN㍘L\UG؎ɷْ7;.mF:|(3~[uT-u[uH 앖xSo)u' 룀 K54qRjbRUG4"-eF>bxJXim5oZZIe3Su>)[Ex*+bKϮ䣥Wb_~:o#yG͟:Gl?Z*9Z67ϑ4tIj~\}9SK{U\kq4G>$UE;z V`tu|B_VQ5Cߥ؄Vlw+ž .{UK]O^JjQBt +ͧ s# oj:CmkGԬu7(Z19{kd~~}w{rwG6t+dureժ*/ +K,x<6&O5Ur;뷥, ՔעP6`4lŭ+JI$W/WDBmSAJ_/g0)2Ӳ폆r,yE啧4uwQM)l2DՕϙ_\ m\ .\@:];7q/ O]\]wUՍCsZXVJV]^L&Z, %26p[ %գ52xi'Zn D!v,Sy(5~vW st,HJwzI٭mX x{%uAFkOΐm3ò C ;QS˅2oSw=F>MkD+ 0_?7[`c&le +KV0YI&qKRAj\]{b*]M12VS>%pMdhe{S7"2N),V(.otn^CdɤxruZ"^Z4ɖ(3aZ&ţ-ߞҡG޿w. %:LFRwb>N3YS8bsM+:[%l4Gc8V E!b'[JE#7A[)ouw4n&L)ײ-A~끊8.g< $WlC#TٗK͈QJQP+\N.G"5&Wqwd'Ӿf~zF$= 5|ݳ!ytUZ?`k} 'pHRQj ꉡZAۄAD.wë!8;e%RDb&8jzn5G!6Zj1j"$]AYÌuR,@yvϾ[_Jznm9}16i,Ӟ1 u3=a:>I?b<|<˵ё5H6ļSҦ-ºM4|vQt+zY,\WMʫ6vT`fQڠ͍80 EpDlm.7յ3R,sƲ6vǙ(Q?T'6:2_~:VyCoŽ湥D2ݔ^FSܳK,&tf6% R*)\K䔯Gq#-ÚGr;%:31NNHdIMtQi3\I#Ր]#&GOiie = Z{߸uuQP%I:D̄79Oc#u u7FcZ+rҚ0jJp')y^:8)w( [g;]"pЕN%뻭ӝz^V'Hr;8|Mr=l~ZFNoX.чsK8f5݄4:1TSGvWLE[ܦhNc^?(N[xǜ4~~z´K0״G99UCQBc[Ʊd՛zP$X+ڸ78*?mV :Eܢi3+u-F pl-s%>.ً方,-xZ .1y-nIa–N/?^ LvDbS=/&ig,2Y`[Jy'n4OD omii.YfK9 B յO70HH1eL4O diW<u,JBniYZD6ѢB,O=j~ vd PڳR|cyXkzu4TΊkV3lĬV 9uu:Xb<TAݢ ݰaTnϼ\#% TɑBE`"ultK̋5N7,-a=,YNrS)g^j˰oDu34~O<=wK= Dy!Q0F8eUGEg`<Ѻ Sm]5v,3"oڔiαZ.UӻbEN>o?=H?~7Ze:rӡFN4S٭}ЖPY<) !]ZsLJ1ׇܶI_?5t$b=QkȁpR㻫ͧrڃ骺941tܴ';WFMXnN'H5G}V0cZˢn6Ւ?d3LYlss>k9NaL &h~DWpٱʸuɤFW[eIj[oc7nϪ5UyLӏ*kY'}-:]o-Svw9|n ܆ӱ[l6--ݒ$xůQh ,Nu:?lх]1^AvC݂=''U+:#f_*O pgE_) CTL8^ i%=̢8׉]:O-eG*ǭ|5nM GAAЇ@B= .^Wl*l,rE/7٦ТION]Ju3)PZZʚ5cpXvac@:ů^PFc k8e+3 %1׊ƏxWFCn!^Kix-D?ЮN!4.Cd`Aɭ. $=*&MU]$tgk,|b $Vpq@}6b[31-$QE~# :W̕[dҺB:kJ>[d Q(Ke,aSmu AR&(&8W4m:KʪlV p5f JŪBX5\Ƅob45 ū OV ICxBK6z=J* Vx8$lP?A˗nGUjWǂLʿm(b!6Q~%Rۺ BIl}}zX;o/&#]pw~#8ctp SP3؃iP I[\ʶ|z,+F`;i}dzAAusC_=!0nMmlAGʂ=GqPWQMA]UG( %9l lYQ*P:fEop.G.FprH~VG2SY†X{E|!w[zUY |W&y7:+},kG[qdՀroc+bcyh>d!k6\SZ1[D`.Ԭ0@(`l?WN 3',c|m4h4]p!-jJ{:-OEY^kǢ JSZwCe_ӭ9(w՟nmN#oyEn0ʅlר=bHA݇]|zRPÓѯx Ww^NOKAzG1 0auÆdX0:la= Ir;O%/p(gk0]Wt<4Oʋ:F^ONoQ`iqke_R\{c'073Ft$0!Mbʄ|Ht۽{[#2Jj.%RLʑJr# .1n=OX`'̕9zcMQ3^dEXXoKgcdR4 Y AGVI ,UnP߆ *pA%L+ݨl-浯Ww+E8q_-J$~0M{7UFk a]:_1T P y-ZUĀX8Wi+=)li]X\ѱ %IB}}JD6= `Py˔ 61',Խýg7Fۧ9= Λ^C7q%ISMM 5 5da\kq beAu>AbJ6L+@>q.%0@-r|9;rv6U[/j'}Zi91:F (~i@Z~/å\;Cz`'RuZP`#F}"u.*UO{fWgV (ɫprRؘ]dRhB1H ^)ֻ [ fjnAz6fB X5 ' hQD7 OP0,Ӻy⤰+^v) rްa ,r:F e(Y^$1$}&*3heMD.SFsPvR{`Zxw~]8=ckwe!Yyƒ5T 5)x s^3HB40;D2A 46XaQGsS&Ļ(|k&[ ҒgX^ i@.9s OS\!Ev-!(ВGok(X٥W(h6-Z4f'/ɝ |vX<%+й|Εl+,<דZx8ݍCHwJA~$,u[P_A*jG=R #wv $q\y܁6i7rJU-~ʸP`W3) bR(B&^e)jp|XM*w9b*hptj>j_(Eap?3 *th8y yE~va^٭rO HFW^W,YD&@ AS8S1M e by&Iͥ2+ `&rV! /'n)aBV8#5` *6< b王OkQPNSKl>F&58wt ij@w$I$P5 5x0pya! $ hFE7\;m亲%=uCǯb(yfgџw8le{[[ov9xwrF!9HhRJ ,פoM)Of|订Ewuu-JbK z "H*GI'^;o(]}4#RupB&} JP$\$$Br)1j\,0^##]1~o@.h"E @><#/ 0# FՑazw_yGEguGܹ8 lAu D!JA "Z$qı,ˢ,˺lTԨQQ MhE(@&P4 MhESERZEUxEkTE\QEP=EUQc1N&@#}6B/I,g8G|yˬzY}Q}8B/+#N>Bʏ # p*E <+y !VpTwy`9{<=<D0>[D(]do@G7FMqNjk`[;X"sT[0C[˿6I [" VGo`n6%rspFAo?s>ЋZFA̰@Q պ]Vŷ|е5k-X atCNQs|ްQ%q?_F|tpX05q\S sz"!]XZw'X|bكq1I"9H\O?VO9l_NYܿ^+9]봸_!tK4"XaM"{&Qj&5۫'{q>ޡzB=qFQ'c;禸ia RrmVf"(}Y:B=K*{5p476_$I4E0/>u6!]O#%&;qWM(xX. ,iܠgamjIjی&l۬Y$+Ȋ}5+ӷ 懛̚ᘄ)&wZt!xJÍnp/ E(;^> ddȵq^#ּAA!d're7IޤۚUZ߾5]@o mH봘]z]v!?!6f܍c.9^ "meFNGzoGlsq}T_7cޞbJHC@6_Qg~6#Cp 6>$B{4J{ >Oe=@'=l^{DGz׿};?4p?!W X)!!X7Rd\KG98 DGZG!X׉uGJuwr u?"\cV;Ex_I|.3 KvD އ;p0tv/("V(s`w/c1ϼG{!╧o;w^y}3 峰&ރsͼ?{[q.?q.f{f3"'c PKY;oPKrHQHEcڳ META-INF/MANIFEST.MFPKrHQH) K META-INF/1D0C682C.SFPKrHQH+0.3 META-INF/1D0C682C.RSAPKS!\R5ۂ[*^cȱ Ft^Ѡ7)kwUWA}M>TOsI֐j+?DS>g t[ZgglgTC̾t%v.9RV*{݃&}9ޣ RUDa))k*S 5VUs h:xlU#%J K#!);΁k >K^bgv]vOyW]ki׶yx,3¥C_>ۈڢ눋C(#t*AGnci\G &]U>uӸ;6-vb߆T|F0їsf̌qazN4#f|Gs}G$߈& 'Lq9Cr BI(-CYbs~=z75;*C7$}d9Dbs?(xAՉk΋-b57!yTgǤhylJ,^cu7uSFP[cCo;n ([c0Ѝ?"܏zcTcϺ󉋏K¾njx57'9gy IMm^r֜6탷 7m|b^GKh<3;r- oIl|$Ŗ֘7X}>7)%oi-uߺoYx/i-w*"gy<^XxxE5^+Wxe˳sxFz+;gxwooa^PKDy+PK AH=-res/drawable/ic_launcher.pngPNG  IHDRw=LIDATHǥyPuƟ{².˲ 8ႈ 628yr OCM5V^ʡbY"0,,{DPXϟ>ߋ4zљp a22x@-q &6'xnب4Ռs-<!a^zD\W6=YMQ2ɗw|՟-f̶vJA؜s1Ym®n>/]ҹr8୔@(r1.}j:Oi> DowJ'CRRVJ eMPy|{|7sRNQy(KNnቹM{p՝Ғ6Q:h++-LxȄsՆIT~M≹\{V{TTX@vL (Ćyq]zAnBFZmHocs  Çd6ihh CCfQ!j2OPSեlUY G?15t"GUˢy*(M6\$""DJiujdo5GcF^G"@ Vx\|T$SgOt ::erOK\]Ϟb¶hӫnZ>5^7 S~6B3Щb#RجJ[ =64%1N ('5+٥bvTD%W< `y*VnJK6͵[h8l3PA$M;QZ1[,U3|.nlIuG2 3 eb2V'0`ę&Uڂg ,.!蒎Q1 F|UJvuӆaL06 cLzN׎zXYٹLGBr8#0LmMOS7onDVv͞} DLژ.C{e 󳵴&cY,ZKSiZ=I`҇6%]Nm},ŅU5SN܈mݷ<65}E޷'0CקԄf.̙3;EnK=_d*/r.Ѵ#>)?/Ԟ H\o7aU%(|${hjǜIL~ cS/LҘPPX"1sgsLuP!!"@&849^1|'3}ȕs_-]$IVM1,,D-aEDA̤rIENDB`PKAHS Lres/layout/activity_main.xmluN@=[$BHA"5%$ 'Ql*x$ G;es;wofw} ƘMCt- G«& 99w%fmF)B[nTχUПg!F$~"u.m*~RUx:R}o{EO١R3~`)6d?Tޟ#]{ȣ>64u6Z?p̑?gqդ~,ᛙPKS LPK AHresources.arsc (0<xres/drawable/ic_launcher.pngres/layout/activity_main.xml&urzip-sNIl(uW[-1J;30@A:8-91(J1234Settings Hello world! info.guardianproject.urzip l, 0attrdrawablelayoutstring08Ln ic_launcher activity_mainapp_nameaction_settings hello_worldH\L4H\L4HT4 PKAHl/cH classes.dex l[uw//)R$u%YCuEKÎءؖe[$JM]җ,AdnlA IF!q [[lٖaڵCVt]6 {tV[tE =H]+[ ?=,8K۷Ro}>yDc]/Vh6RKDHڇAH'Z efS81GWYQ3&ʁ*8.'wOh%j :9$x;S)(x|ִ_?yp |:{ ypg_Ou$`l[$8 yp | *x5[=pSh d@]`Lx< /??p( @.U 9023CnpS`Ti[7߀8(&ʂ.N 5m` u`=6!OF(6] vN$~|E_b*ГJ:i*u]|Ry;Ji*O O^eoSuU!S<*ƽN\ֻO(/`з}o@PNϺ>%U~ʔ^9-*檗EstTGRLjX*y !b!!WżtFi|1FBjdtMDdDCFhA'>+J|}r-JJ*٦$JhZ2d BfBv)igW?,d2Ag, N䧕|N(߉CBaO){ qm=Mc:B&F)eqvD՘~T=|_2I)ּlU2Aϊ}8kdĹ#Dgl"ܣa%%eB! _ӻ%Ϗ`ݼn/U&m0 K]rh]ҷ q%ώyHϟ;!sV?m|{"SK@@}KuXt93< ߀MF쪨 mK!bvn/+ /$|T)j8~v~{1<&Qde”4-n޷WD|\щ{UQnΜB2Xek=nvG6 :+5+a6۵wF3`;ɀ&R>⡡ό^-jc͑ۅ^ BۃҞ9wd,-|s'ޣPyn c9ebbx?%0-j-W0`|J5}ZOF o'ge)i)3H]{j-֬."1=b"?B]r{fLL2T͆=&|xK> k=EQ10n6VM.ֻuڴҙ65c+VHY~pELFGVc]O"N\U JnTr@Jz.ae"Rv|w z?b}@h ZU lUKib#İw[Ůؙ'sO-JiwnhSY^j]u[ כIcS|[t,g۳"ixrEl $$1&69MWKna.Gv[t>[W"O TG;%qPTJ͘TEe۷VTj*UE~$V7&cXcXɃ\@xڌr!RS$w5bB]L OfE(.83M"p)\+x[$c.0B`v 4 6Q Q$ɿ0HD:e:Sgei]ܱ۟f΃:]X\aXX۵Fހ #4ĸ>^Ft$Kq+vfszYEnyNgK'YzR6ԵG٦~ C;HS,qHa=;iݸֱ' c ,=1ƽaCukV.mHruxouag6I;(C1 S M>CPDuηdӄ8y BBp=Zw7:L'% "c"2RQ <ڟ Gr$Z `% h(`$z27PF(D7%L?BB?9`{O{SA8 O'< -5j_9Axw6G8,8 b @0hvS'^w1m6]:e5DKOܹԎ< <{&B;Leoέj,9x";$s$>檊^=֛V_s\Ξ+磨vWb,"9 0#|l~⥝݃eͿyg4`HpA__)uV0icၬ7]ئ1_ >cv)i*c2>ұ,ChJi 7a _^kmv$*eǒzNPIc*1 clpIV@Iq0&s8mFJg]:Ψ^[F,t$M -~0ٕQ^hk5qHLw1[~q1{}=t1w' C+EjUʯ,wG7Z!6g[1K;co;pm(['}Ȟ}*nY=2p)[Y7"kdc .!.LiL 0 BouL#X#|1⚍,>0@TvVʪ ;(lZZ#ӺW7l+>c o"<VzezJ(qeo9/ ")oxlxv ~7FF>[_CR g5(&hL:g3igit@ڦ ݴ鞶QI۰ujaL8)gNTd3VhGkmrqA|۾tPc!\J*L1W_cǥ`ޑ! _JJ?ubC# ϝ;.NN&FP4~R! s>#g07e?amʺb}.Za"V1Mwgۥɤ_>uKZaOnMAgI5x\Ķ_(˖Ïeuwnd^:v(Tzg˨ <'Ee;t)]#gw5/]5|iFg~[dS7PK^ uPKAHDy+AndroidManifest.xmlPK AH=-res/drawable/ic_launcher.pngPKAHS L res/layout/activity_main.xmlPK AH resources.arscPKAHl/cH Pclasses.dexPKAH/%t/ META-INF/MANIFEST.MFPKAHr5!META-INF/CERT.SFPKAH^ u"META-INF/CERT.RSAPK *././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/repo/v1.v2.sig_1020.apk0000644000175000017500000003226514717152071017637 0ustar00hanshansPK^߲AndroidManifest.xml=pElAq,IVd,ɶNa 0cH$# aeN5d4HIAPHPQQL ;kuV:oۏ=O/JZ?A,6tZgs(-ABwW9Bt %\ԃVz =~=D[%4ڋvЯoПR7sg% ݇֡^ڥ*}AHzh69=d%*F_GG_P6}i5L`>==),~1:n{ᒕb:/=7m< q_A8Z#.E͓S/+}U/N\i&/cĺ`1cIš}QkqO+[EY +1ߞtG2ûѭK]o>uu'Tv F;~~m#1vU,#>56>tׄ {` ֪kvyO}klr~K2JTWkϮ" u=umCMaz\1<7Mƨ }OR7唉)*bPR#9m2fѻY&* 5T9PF =˸+G8\hB9hqI(@^9ȉ#Rп"N?jv[@~WTU_4ۮ@%-IV/h*~R^@Z[Yl^ /P.ܵ]x-ިS'?xK_s5xLCZsGo6>a7g h_`!ۘE})LM oJ% q ޴5޸7a1e4^/X)͞=g-]UrZaV`3-/-6ӆ\p2ߒN[»f sCx/xxz x9/߁'k7gK / y ^Bx 7o-XƄU ^7*QW0< ވF4g-xxEoт7$!h,xq5^+[7ʆ3G7D`o1|PKe4pSi  classes.dexil\}xgƱgeD gOo97oA۠Aׂ=` σY;|>VZ)5 npq x -Xv38U&=+-A AII Ic'X ր`Qo7l+vp% >p5;u`>F)f=# HSiLyXZvJovd|N(}vs_zv U:[s76-۠QzǾˣG{]cv!!T =⸕+WJcaWĺoHn2d#}S B6Qqy$Mc$wYK"NdN%W+Fɵ cCcz@q=̍$RM?~O["!M핞koMʸzΐZ%?@IAp"0)i>?aJ}4?V^#M:/MK3Nt[ [=iE}1fl=\ﶰI)"C; {3i@fGxnHۮzIĺڔ֏ EGعjLۑ\}I_{"Vw#(mh%0DŪz#V5ّR#:|>1}aV)iu ~Y?vvhig3ZG}ݫy~'rBDCV:3Au?^4֤XҚF)n3;^D=iKtij=n8ymDfzE\|1Wk)}p[uźpdXv OkYJ/_L #z-ڴ#=-цj w  ˹bGLhvdXQYNu%V1,\1^̓W! zQ>PcAa*;ᯢP$H+Z ^Fn/7Kҁf&Z; }z\;o+jǎ10a\o1YY}3{eXFS‚/>QIWJ+E$׳zV<ȎRX FηgFJKilӫ `%b(dUэv̷Gc>^'5[oxpeت.av //ach `#Pb Ɗk2t/sy0g6L֞,˘`({iE ٶ1g&,Hִm#K]${t)EծeO3[]rwne2{ ^tگ*:fJ%KUP(ϫN>MwOMKw\=\q=VAślBpv~,q]`ܺ`fi/tfX,bi:1vm_vY5#"_m˽Wq{!1#z{).-"vet a'cPtd˾d%I"n!ꩱزxv~~.ɒ6p|Pax|"sY.wn.ejoў(.?hLbb(Wj ۘ5)ʹGIu&e9cSI!fR b2PɊy0m נWp7b3j; #ٔT'- PF 6^MEM3FyO1sej1 ѢS%iQ59Q0* `sp9?iIv2ןN}WR@-^bmCr'wJCO( }=, ďSZN Nxx?&{0o?n){6!߉{!<}Z-A|7+ ^R%Ǘ]~iI:Je }B\n[~̿#e ȷ4Ke_;$._~ZyX@|i 3XDPK }sr res/drawable/ic_launcher.png5PNG  IHDRw=IDATHǭU[P[U=7y] ) I<+ tSGh sMfX^w} "`r?uRh-@@}xs؅l.n~[Y&cPf!ͅu޶e.o_a#_"Ц!GGmq OO@打h[rPVr4ƾ& 70A&өa0pь d7O&"$An<.9k_k1.N MI]x_B689p:][[Bq)5oBuƳ;\2&B@/JOKLhr?Ԭ=`0>WO?.0 'mvV1/.r3hFs!Z B|^%&M'NX}<Һ{^T).7{<9J)mٱɺPzG项MS Ȕn_(mjnx]/*-4h{{jr\5aa+Ѧ@{oMaHv%G7eKWk*dAn%jjn[rXS"DOE .>B']s;`+egⲰS6kLBȁsx_]η ؜YETb']p_$ Ԯo<܏q&c 1p'R0eh_^/_IENDB`PKTgres/layout/activity_main.xmluPN0C[:t`@֡C=#!XU[mI |gJy[*z{x#Kp3 5`Z R=ƕޢָHSo=:[=w )9Ar]á~uT=fQR\MaIX?Aż!"Pgǖqš1=}W:fAf{wd݇Ґ%d}dQ*B|q-v#PKPDDresources.arsc D09X Hello world!Settingsres/drawable/ic_launcher.pngres/layout/activity_main.xmlv1 v2 Signatures v1.v2.sig |\($drawablelayoutstring|00; ic_launcher activity_mainaction_settingsapp_name hello_worldThX@ThX@T`@ PK@>aMETA-INF/RELEASE.SFmn@{߁DY!խAGAia)0CFħ_tuNI$! aԖ@r9-Nc!shI$pT}2U=U_ %me,fY&6ɧ#=kL30':J?pj@HkXa[<n~2{zce0 QtbPqڟg,ip3L,퇛o[@2I;.vUlT"9nKZBA aM =ܞ~;z12cwhKF {&Z IۿVW{Qd`۸Q㲋P4:?a_<)]PGr oнJ/dTVأ 0>_PK@r!|META-INF/RELEASE.RSAU;ԋ݌HE}C*X 5TC#c %n5s(:,3~Ԉ,W<{~y`Q˄IB`,t(BPPDa,T8EBBh. X gaP qTN({K0(%sr/@l\A@zɡM遁~@aYRh[z3R;%So@`X (0pݖ`-3o:-8$C@$A]@A%I]Sÿv8L_8 & ΋X0(h?f4(bfך$-)E/8U6-\NsnC#*h C$T{2Vqhkwsxxekᐓy2ÒK 526Nߡ2&fB&a"?x=\p(AOL;Hl5nXxVw(yp x6mQUPx{f7L$l&Sb:ʲ+[EE m(k\LNpD])Dtn ߰^]C^*O;EZ=}$["庋V_lG! yAn{hY֧T}v8rͲ 3VI2:TrubRd9_Lb/ugBncsE08-8HJRy$6UQo4wq8><(1B41_S5vd.E;s_־3A^~?2*33dfyp4`Gf`ch't]R{~fie7Q{E"$e MFL&L?Jcp]| 9UhD3B޴5sn哂m;7d 4BPaMhGcl yvA-zmO2=6ߚL:Xx: l9 2t.yi~7Mɍ 'Ţb$62^_pK23[@Y~%t7 oI9:e6@JxAle}PPo%$оQ.q1PDP^HZ G]]*!"~ b'8LkE2l@eSRh1QHj3& sa& aMJ_o}& B3ʦ㞦4x dھR+aS70Ɠ jwK܁YBj\/㥆a/XA5U͎L.<ja.DW&zI(1bM`{>;1H]yJ$p:aYeș糨,K B$ ^XAhY WVN}%!kS;mRF!00U?{쥡"SNd{+0  *H  T # My9L~P1 0r+ˣVτ@UR̜}1ӂC>;>\jUCR+bЬ)-j )+oT)CcQt:өwH}7iLj` K8_WG*@fw1-xfQC3IIN?_ڳH3I'P5f>DMI܇u؉LlФ5E[B׽ (:bQ0>l5\q%Hh@܊Xcgw@~h,иGFsnsDM_xD_@qM W (xs^v̜uQ?yLO݊2Ur`>URCh`ȡ㬴| ]r?LT;RT|kƕf}Wdu0`V݂4@4>"i}Wл$v(oA~lL kqWf$Yײ;mBVo.YgaT7Zς{ ukT"G~;Rxt0g.VFdU][ \z2qOK;Fx7[UmM =/c2Ŝ_8qI8~Sr ~}m#dԃ3+=n^1+O[皗RzyFFOhơKz-u&0"0  *H 0 Nۢ>yvA-zmO2=6ߚL:Xx: l9 2t.yi~7Mɍ 'Ţb$62^_pK23[@Y~%t7 oI9:e6@JxAle}PPo%$оQ.q1PDP^HZ G]]*!"~ b'8LkE2l@eSRh1QHj3& sa& aMJ_o}& B3ʦ㞦4x dھR+aS70Ɠ jwK܁YBj\/㥆a/XA5U͎L.<ja.DW&zI(1bM`{>;1H]yJ$p:aYeș糨,K B$ ^XAhY WVN}%!kS;mRF_ APK Sig Block 42PK^߲AndroidManifest.xmlPKe4pSi  classes.dexPK }srures/drawable/ic_launcher.pngPKTgtres/layout/activity_main.xmlPKPDDresources.arscPK@>aMETA-INF/RELEASE.SFPK@r!|META-INF/RELEASE.RSAPKn#&META-INF/MANIFEST.MFPK2././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/tests/run-tests0000755000175000017500000000121614770502071015756 0ustar00hanshans#!/bin/bash set -e # quit script on error echo_header() { { echo -e "==============================================================================\n$1"; } 2>/dev/null } #------------------------------------------------------------------------------# if [ ! -d tests ]; then cd .. fi set -x # show each command as it is executed #------------------------------------------------------------------------------# echo_header "run commit hooks" test -x ./hooks/pre-commit && ./hooks/pre-commit #------------------------------------------------------------------------------# echo_header "run unit tests" python3 -m unittest -v echo SUCCESS ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/tests/shared_test_code.py0000644000175000017500000000514714770502071017744 0ustar00hanshans#!/usr/bin/env python3 # # Copyright (C) 2017, Michael Poehn # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import os import sys import tempfile import unittest import unittest.mock from pathlib import Path GP_FINGERPRINT = 'B7C2EEFD8DAC7806AF67DFCD92EB18126BC08312A7F2D6F3862E46013C7A6135' class VerboseFalseOptions: verbose = False class TmpCwd: """Context-manager for temporarily changing the current working directory.""" def __init__(self, new_cwd): self.new_cwd = new_cwd def __enter__(self): self.orig_cwd = os.getcwd() os.chdir(self.new_cwd) def __exit__(self, a, b, c): os.chdir(self.orig_cwd) class TmpPyPath: """Context-manager for temporarily adding a directory to Python path.""" def __init__(self, additional_path): self.additional_path = additional_path def __enter__(self): sys.path.append(self.additional_path) def __exit__(self, a, b, c): sys.path.remove(self.additional_path) def mock_open_to_str(mock): """For accessing all data written into a unittest.mock.mock_open() instance as a string.""" return "".join( [x.args[0] for x in mock.mock_calls if str(x).startswith("call().write(")] ) def mkdtemp(): if sys.version_info < (3, 10): # ignore_cleanup_errors was added in 3.10 return tempfile.TemporaryDirectory() else: return tempfile.TemporaryDirectory(ignore_cleanup_errors=True) def mkdir_testfiles(localmodule, test): """Keep the test files in a labeled test dir for easy reference""" testroot = Path(localmodule) / '.testfiles' testroot.mkdir(exist_ok=True) testdir = testroot / unittest.TestCase.id(test) testdir.mkdir(exist_ok=True) return Path(tempfile.mkdtemp(dir=testdir)) def mock_urlopen(status=200, body=None): resp = unittest.mock.MagicMock() resp.getcode.return_value = status resp.read.return_value = body resp.__enter__.return_value = resp return unittest.mock.Mock(return_value=resp) ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3201876 fdroidserver-2.4.0/tests/signindex/0000755000175000017500000000000014770510164016056 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/signindex/guardianproject-v1.jar0000664000175000017500000004674514717152070022302 0ustar00hanshansPKBJMETA-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMu X*h%&*8%krr%Z)d楤Ver{8d RpsJ3*w )7, ru 7 I-6PKePKBJ META-INF/1.SFmn0EH!J-1 PH"`A P{@LsrY(aOthV0w<#9(W' /5 :GI^cGDUldNAXxiQ@"FaMqqNWh9Y/ έE˴ PK6|PKBJMETA-INF/1.RSAUWYM!(0 H x(qhJQj0j^F" %0.m0% :ԅYw~{; "qQ=B<$ iA!0\Ȃ,K턈nݬaP@v0Pg!ى ¢p4:Оo i@rB"I8odvQ(7|7H 'v)Tȿ@xN?%ACC=CMOY=,ҷ-@PD# ,T;%)@l79es^7&?=q }$5Sv닧TxemY[ѡN8yqضD_6†وO#y У6`IG>4Ne%4~qzv35\S&useK(ku0꩛g2Ye|'MI얕ʭ_nTŊ{.`#UeUS(fcI(aVA(ބ{#4bgW $l߻&Qn=[*˹?^U?b$ ~6sI ItG(KMi!8ŲbROpCsZ@# Bw#//mEr$ v~4J}! ۊ0QBLyWI'`;,*ee7S:U $bp{b=jIyj˿1Ա:䫴?tUwnjc-&kaj2ayWH<$P]qn#pw5G&;ZGUXA\x O̿cPyFTwrݭgwrsQ CtnQ!r p[wb2C7TECs0kqڮ}DJlr4 lˉlU'9+!! ,`%&wB`޷M ^}o_ + -rFRGqɮ5*A(O.ƑrnK]C7r+@ ɚIkz0  1>_=bmm'3s +yⶍ+T6UMVv~Zzt\rJ!da͸9jD.6 RhϾ;ȿ̈́ʢ˦qܘ6T&/:|d?vr0^Cb^DlOZPV} RB Qx.käDIKVsμE%f]h=u;K&S:dZ;Q(zl,ufj(F7UZӽLDAB`(r 8kE/{ǀ@zFs88mPL~yiNEȹS&Q~##5IP:³US_c~Weѣ~s/E:B2Ō:DV+JFaӁzj0PKgbPKBJ index-v1.json}rȑg}t3$ )z{."P8HQˬKjgg;EuffYΣHMR27Id]2ME@qG!by"c td?d$v} 8zN*t=w|}P6·qz1L\7I-&i:O>}Ƒ~dn.M؟|*Dd>]Q#6CpDC!zG j!}v`9cY%tAh H ?i# S '{wHʦ9\Xt*X=p3?_ j4=LE!elq6QȌcX2uoqlD.;xߞsϵPh6i; i$iHc_{>f;&IF1q4^?@G{%|l}dS gao`17(ءž0 T}ٌ+=c%~Jv6cί|Q1uC1E56ԴxQ#HQ;9D^` |=wa+lbU5Y7!~{Pl@a5E*%?8~Jpp.yCcBdډ~+\;GX87,Ös.|f l@f$E$ć„,^@S &haRh1S(s&L.|,"&x~؀0F9{l rKd=?N`#/I$o>ͣWq(@ \|:(vA7<|8O61(u.T}07t&){hy#I_>ud4^YЏ>v(29|;8b%loIҁS@$J9ڏ3.SqԜ~xWRr=3;M]Lς/\Κ~_\&S nӧS]k$J/`49izYw4|{d1rvǣ.ONf M.-2Ң2?HKMSa=Y c~!x,:mS \{g Ѯav #!S<Bـ J89 ) 0M_0 L# sc3$ r^P XUKV-HhD EUș>5\Pἰ! 3 X1LH5*(QKa"G1Ҁ ͚9gARmV%Mے+ҀAуQ؂f3i5l&<t0πV wX1<j#EKf*H@t tdKtP,Y8/j݁0vI*'G]͈'3~4K-~h2'sB ]ki!7YZ/MMcOjMZ]_:`M!OqagmW- 8 $J WWiNBpB>-#h&G|+ӼMRcov_wӎYqesT;li&fd *B8,J4 j*gF,z~&4[B;}+c#Hд i'+5 ơ`&cP_\ *>L6~ќHHvV߹n ` =lwVPoKfNVG޶Vꘂ ۧt~Khc\K(<zELN`J!q/ 1;iۙ +/'C'@FAV@O_s hAΠv*Z"L(0j! (t5siNZp$]‰k+d[5zB MDNvkEp2-JB(g)2,s2pVp_vF;p(ȡ/&-"Ȯ>T@U-&f8 6 dStL,me"}A t&A$X ~ .˘fn &Z@eFTUl7qmј='-z`Am )vYۇ\Z&e|eh +;v_˺m]i; pD6Xd7քL>+7/UNG R7.-zjv@JGĚcY#׼y>}<~Brd^ک|?MW}99:7ImK7||8NGþX;g5Onk6Qdވ+wEKg5^׫|v2qDfɢ7uI=ϒzt5oo2Wu1UG~rc>=?'98m>M^97Ҵa/"cɪH:ir8Wvu/ϩ 5t tDjL#j_Qά97"FZ|!f(cpI;\7=L9l K2D=:X҃4Qg~0iʣj2 o 2oWu(-( M;>.FzU{,8=AiǷ[8ܹמּOG,8_.l d[B!apf5Ԏ3zt|=B SQm dqЖ8k 9#FSN|`Bʹ:tl"'%KŵaXNꬷcYxZOƺ]ow ƋY3<?2: ^/Ü Xn\3JR0wХGn~Db+~%’s.N Hn'LoEb0#CUOx!GhSfV;'M'w19z-@eA/|#aq84F3##,dO΋47hن0)AA eOѝeo4;ɗ \3,0]e1⯰01[.gf.Zh% Q1(.cЏCrgE 2"1u r39r@ ԠFߤ?{{)8D,ltnDwMa:n·Y2Y~"3kG'x0S`/Sy C)&4CvbeNa'36tĺ*]ۂ}B Pgθƽpѷvu$z7*q fdhw dq(E/8sAڰ)Wn0!qUұ8kۄ \|t7S+p?.vWTmsbx z-)@&^@†fJ^Pτ:HE^a19FL]r-<ۓdfw)O@%q:p)ס:B\a<治{@e ?Zoy6eKZiY9AZ\M`]b-FH~9ss~=(S\3GK[ʣ@865()b.()u=gB,FrL;k`񊻒6]}c 9k蘚O  l6Se!PoC$FBAGb.5ƅglF-˘ X;^(;$'qlozC]i6 fLg:;GB2di,#r 'I)lX.(t_EQ7G.gakݷ0cEC.S%9s giGeo^f'V|P|w~_WGR:O(o:s^뛓WW 4+ѾIґz|J1ɒŷWo҄r)1˜[\Pftm.Wۺ8kMҤ@ޕ/dKKLbo0Rb1e$?AW4N@L>)u{߹I`VS@ >0H1 [0/jWnr1G-l#B{\28>{-VGBeyE6K93ybL+{h#ʑ[=-:#Ps7v~QK M?_~N4i'HϾ~8_>1i ctc`F؝G0Xiv֓ C ;cB-`WL9KX.܋Dx<`^yV;Ho`=\edteJ٨Fr[QS3K咯"p?ӧ`"|Mń|g4(g @{8n)%aN)1Jy@}?GtQN&tu!y~ۡ!zY5 6&/mI>7w&/1j'ڳ?qHde+bsOᏈ \/ r ^K gYstx,x|~OPOL-+wz͆ 9hBUog_ȃ87WuQ~.e|Y?]34t]d]x'yyvrݬߺXQ3}v2)ƺ[dz=Ƿ9кy:;۽CQK/{TVxR&e4jDjK?Kn]dN^_.ԺM–_aqHolW/p< .m݉='˦g7Am{T-bvP~_ w[['vС+X.Js|e}]r y\W̡怏31h, \*VHC!Gr`2x# #>HmSa 4z*[b `p-.ġ/{ ky` q[>g@5WswG?`yXż#9?1qV@86x ?փAlm:5ISN=aK\(L>gu*tjiT _vx 7otFY8E5cvڙ7=p9Pu4mh+bN<1x{@1L# w\;kqB9?xu[v:5#R>w0!Z)S~~7XlA9*.G#RF J6@wN|P/ak' Gf0'0.$@?$i|ذ wN<<~R-g{Y:ah7kMWׄZ݀N NQa9w']H8wdH؊v_' E60_ܭI+n bmΠ@Gsf]3NDɰD$9+Spd^${qFxTf6p@S]$BNuĜ0߂e0NJ'vq$FAlB ]᛻*:^p@Ǜ.0r]-_>S(ָl8! Gfk|"09!hѵ*Ia@\#v.M;bo(+?Pr<,G(aʏ`ai/=ڣlm{`U %goi45 u?v~3伡~+z!+BY&I ]nK(l.I;j-|juK}(n_-tN8>'IEuB\95r&!1砜r\^S*k0_Ok%iAȔ?Y9/8nVЄO3 DR~%Я4<毭?ⴒn|q}N~ׄB>VumhH~v[Y2aHkU*N C 7O\o35JtDe[xǥ/WJsSB%??GHJkC0Qy1J)\`jpn'6?ahYle+v{Vhsv1#b~Yvu}y J6㍸a6BL-QeـZ>2cRk+ iM*1gDoYwm LHNɳr饄t2b5 2fц4 i \t֔(I:+c«P=yyoX^i72v+h 7pzff Qy/u(Յ5-=q?߰ENHom6> |i7B*-k Q=thCpiUQ\pv^*yl -}1eQTl_ mzX}6n)d ׎YckHƣ ǹ|L:/  aD']|/̻2 BYܮ~.tkJ'Wq~'dgBvrBzok܍ &0E w)H~<s`'O#W:x :0h`2fyM?FqY<],lkBy`Fsfi5Ee],gT[fxקb^nK,sgUrj'afy2@Z^WBe+ X4La&< %PϏĆ3b0% sh(_PZyCiD /D"W ܘy_L%pXxI̓o~Ih:*me\.6p%=i G/JfE:+xQ #f/n)|gIᓙsw%Ḿg)=_Xv328m hpv=(Vg zr8}q1Aw1꫃qEj_?Fiv.f񛇋΍{u^6n|E4ŃZm>2'3`"N/Ժч]QhZ,/i]eifݞv|2dKV_+v  oUM}i{;{L f*k5c'~|c^8V.v]G1BÔ{fW,l,~-%]lkYކJx-b*RMT$ !h]ڝ虚WwL>n~c1fQR G"Xl+ ^:yRNwF7&Q蒩֦؋\Vxe I/۾ m0_yZ)'^ ;Ex_ HX%Rxe^ٙU>JwI,BwV0I>V kTd e[s(]@kme^$5?|eXY =Z$eՃx"H,JClSY]JG1+VOEMh'AK^`P;_w 43;>1,_&tXɁ(O'~8ع>5u}V{IR-R}=t.a _Q:{gZb4WBb5sy^^{ <*qa} }w̲<8P^ T`D>+akZ>a5cs,Ðt`UTt.dc.(ZDIG 3xo$o["JrASWkл AY>"0b>˲~x >fm$( @ߝ"\,oKh{ 9Y RNJ 0JX7x-4Vc1yyXINr* !?A#f16O 3UFǃMPɦ> ] {eH1iY<;ݥT2;]ą j7__.y{ɅEu^{T5lvԂd>oD[0cWHfۭ+g0|X./z'rzڞCVYk+:NX drW7{#BJ\RvIzRuԥkZ޻σ_{z/GuTv9m4WקƳFluVpJMylC}YVWӑJ#}|j̜m>}щxew֨)r$˓Ac:4Nщ/v`|C7iyz)6?vY;>]GjM_F_߇+]߶J FzX&k?ŜLHVjwNh|{$312:}>JN./I|'[:׌!&j<xKPfG|Qjq>L~V,2X9|DgF‚p(mDe_^jh^*6~6w *tAg}y;{$t #Ͱ.Rܢe0 *LuJ_ u(ʐa25m{Ş8Ur tP7;;av^8OI1+X݄uNEE@T'47?;r6> -x>coRMEMoyM܍}0)j~# :XXddD$^z,(mC9M=u^|/\{[Yxq7_q_Z[?f\[:zsn׿n釼2^\ ]HV`wW.H5VYPx'PYvG~v}SM U/:\^{['1I0bYlC%=`Y󅯌Z{W#0@1V}|;a,9Pq㽑Cşfű^iƱ]n^`~'?2jſڿ>D^4* D%d DaXYAQQK5oբ\ީ~~ޤe>K#]*<:q<>tվGj+ēJt=?'asgJv6Fg8NkUWKy~ܿ9 <~_ӡ^ e<8'-ylzke:։w9/͋S0KXD6NVӶw5.ɼkÛ͠S;nLWarVz榾GH!0dthˑtE}p5 EBmW˗]8 {<aJPlOuwl{#!:*.Vqw_iϷM&n썃f&GyOFw'YtݵlCmi_j=\K(ۡ3> A;6=dbʛ&m=r/_po D]ƅ-'ƅȉ#yv~w!=٭½{z]WR2voԲ (OK$̯ +~]IC"#355*V]~ i!N,pvS"_:nwZn6lw;o7wjQ ᷖUn [ۍjѨ]ovvu5vlw߲Cm&Yvor `ug@A~ ۵oi^ybT5O~*G؈ȢZ=+xlXh/Jb|6oFy5d86؆aتi Xg9(K pS"nX5ʦb)YYYkFy5ꚬog6kDSȺc:L`(,h*z*+be:ȲkRM/`WfG`M{x?jwI}??03|ڙPgJW۶ *$c=pO =JX[ *SM-XhvlB JǔaRZ뾃{ou.nhh* /ş$Jpsf "djeP"D4\ T}Ke{(TU;&ag"*!&VTq` W (l"SȞp\LpmQ$"IOJdn S7^=I^̼Mm13̙۸hit*TզԐ 8s&1lݵaȢFށ;uU|v%]StI^¯h!bf}ަY9'{]L@;,L14m_;A=(%gԔL4tQL t[ OT ,:e٦1eU%jOzzEf &y"Ox@Ǵ-IMٵ JbjjW4lѥ&am".[H~ n j&oۼ]*vTh!T,[ 92M]sEwDLѶtzp$ITXc1%Ԏ"L);J`Fvt˂Ԕeː$tfP%KG:Hꚶ{vQDe['K5Uh,1l,SLْN"EVuGupa2 (}l*R7mנʬJ+TP5RG%KN簨F}5ְ|<^=h_3PdQ4D+֗ SVm3gY;C\G'˰,jˊQJ[EeӁF "DT}JG~7lH"dU34fQN70']ZTj6-i/R֩n[Da<Ӗ50M*[+HHxx(+Лlߠ75\ިAКY (΋RG1 Cڑz$nekKmD5tW^}莭c(L"AlY[U@8b#+;:UE75`o7 Mdޖ;Pۂ._ڛ,Tvj6bX4lbRXDjbQo% ;$,5ieoꉂ7E%إHzisJĥ(h&:xTPKLՖ\O 0\]b|jϓ⯮Ag~'R,S ﺝCcmC/:KmmYH/"/CvDY3-7RؤTmP-Ǒ-W4O=ЈΉh@6d3C}[_UU4^ ;!B|1/ak|z:QHuJ%@x&܂NMPTb(v Pߣc^5D|IF\m\=Q *Q\50e1&XYaNf>{/u PK0CPKBJeMETA-INF/MANIFEST.MFPKBJ6| META-INF/1.SFPKBJgbMETA-INF/1.RSAPKBJ0C p index-v1.jsonPKL././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/signindex/guardianproject.jar0000664000175000017500000003652714717152070021753 0ustar00hanshansPK@IMETA-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMu *h%&*8%krr%Z)d楤VUr{8d RH7K0*2,ͱ2.1,H-PKPKBI META-INF/1.SFmͽn0=Rc+j :8(C)JYiqmR*uyxʟ-Z ¢8 dtGpN@MgNgͫu|1rট CAo;Z^V[ Mo)'fׇ&KNhe7a*umVF!]C6>]u:Z o PKU%PKBIMETA-INF/1.RSAUWM!!$`@@!4AT"ŀ "Rq(2Rf$|*"{ "(FEa("Eay|o?0wݻι{ jɧeA,aP(!0 W#xp6RQ3soKEmap2RF!eD(xDcxFLv(gtՙvه`Iz_)8ǟ/w*Q 8׵4*5))1,Q 8AT$ŰjĽYdm 0A0(7XH2;ߦ}" + OWFC 7^}Y%M-j@ Cy`bUśF&V~iU m2a ȯ~FJ}Ɂ" Uj+ɟڽ Ɲ7u' |~-+69v!Sc/_9q*1 Tck yqPW[V~W׏N4h-/tCB]헂jdH>՗8V`IJJ GrF!Y~>sD^gM~PBN}Zҡ{tzDu`QÈc hbI&3qɥbme1_4 zO+IqSёƴ1\٩hk A@m-$߉M1Ntapx8dpGO.=[m na}-!\Zňl.fmj9VE]Ɩ'aAJ)e!ɷ Jnqrg֩e@]cg= @¿FpWN'T!V^'|^pq? (~ΘL|p6G l?=' _,@U hDa2)> + zԽ;_*S~1:i_>pJl3w?)$i48.5N(Up :˼22zDk΃מ{<k`BTYu 'CO/s}efzNdYRؘa$L}y?<@iYy\=,u'+$r{>-,z"I.k29JaS{.1{&7N n)-u}!c z6ׇÖP)}nTvE cq$H||#e-Ūֶ&N*Oh}gSR!mҡfv1}Qle8[]Ox7QtQR|t.-PWe/s47r A'\pZ}2"zc:B6N1~^haZD^4V*sPM% _\guKQ'[Xdtk^kmA*S '<}f?%"ApUg});98ݗB6%<_n 맔TQ$kdm;2y5GW7I?jX9Sxԭ9ʁ3!EAY=9C[#% x}A'ε>15*~) kxN7 +2! ׻Duȡ֍Bt gRv9[$:~4+ASEtYsYgYkdǡX.7~fƹ sDf%?PK+ePK=I META-INF/PKPK=I index.xml}vG衧{+U(JX9$ewu^j(4 E?e`f9FdVF qmD=#"|Knݰ.'>I\T_={2N>?A^Ж?Vuf$7곺rϞH覯nYr%ޗT]$'w Ks ̤)M4U4*sƪq6iAU.yKw'wЎ TR!cOIs2Ze+ZlJs9<Rx'6U!)2! КHB[ғ[;NJ,\"%D"3ڴϔ8X@wIF_ _rSyO:hRJNL/a4%)lYA(хss31 QTTQ ትdCfZSWpsi%&39h1R ϭ:eGo(!j|F45)1p<,U)c1L$ j$'Ȥrȉ¤TTZS<͵%Tc S؜ri&fP QX+Ta,u s0*@߷0-*4)[E2i+Jr0Y‚VLg\NҔq(*L(s@d 8j'(`rI&(P'c{ɜ\Ίep)r+if-pgaF> \2\a{Y K3>-:E3xh;/E&S&aP H)%s XrQ2} ChHVBQyS..P΀ 0)Y/i-s4W43 Tx](3ZC 8&\D`4P- rOay\ՀP1au(  gs_h X*F*Y[nRcӆI uFXT `22eЫ$"́%raq 6c16t` c$*BT[8@3-QIn2Ӕj \ 0cY%sYWw# $9I ;װ1ؑr/4MW&QRnAS3~۔fI   5HxA4 \<j 8.RǁaKjhi@""-TE `Vë.,];x`̥}]\Q G!`ip!X';8؏T=Ia`aAwoU`?|?77jxeY+ 7^Hp \}߶;@yTg0 џ0B'=@Vwur_Qf1?n"Än 7)1uXU8D۸:U2G将> q#F0}$^'w: 0;l7P ]UOw꾋 +Ybx7XΌ~~m0a20Zf+LT>!kۇ4( wX^P~,{=MN<03\rYҵğhf`nhD~ `W x~SbWne+WCĉ=|܏5OO.Lv ::/AvtJxq5sK]؁5L[YV(9<@+|[W^7_aLoAߌ{ q:nG _2KĔ eNZȾF ^/\7O~dV,3:JE)Y԰S!9t@{?ac$3K%I˸7FCn~Ycd?Q@,-||5uϋ3ƒ_ϑPtmi7.B,&z?0ji^tB7\NLri{$ ,~V`?y6ԠJ?Dʱ&0`%N)t̢Y$ Sغm" (1 .@c#l9XC`/?`u3?\х} x2{B p v8 %` 8,30$yFW)E܂lz>gw4؍b@~zF%{&rL p29aTV?!dv&Y'eK3P}Nqzq$ dnPnE]m:emQwc/|gC?V_C{|19!0nޟ!cTe9yU-ο߿z=* _  n$ Ȃ%vW:ÌNX,섎g:"=Qir3Z0M- MɥMA "74ܡ83Lf2NKNeg0f2vPLH568?_^|wUJ:Mv,>ܹQ;@#̲LL"u2Ϥ0EJ r!sZSlw9+ȝwm z} r[ެqN=t5U=ZW-'Q돒+t^V<<Ƚ:r,^d/oΒ? Ԏ|d踳UCCx/]lO `YS;Voh?N9uͷBb=U"NS vt~j, S͘8XnM%ȼy&RvR@nBB ;q}_P;Ns&)(ɀ7q5V\JlMO|07kF6JBq:7s+-K $Xdj֘{`Vt3(mZ: IoŽ:$y3-c5~bĠFwjy p[a=ax෗0|6D}evfťN_ BXK66mm[z4t&}njKg'H7EgXYcD^Q5`hW['oӁDMu/y{r~ %N~ף΋A5 K=np&ɝ[n0e|)x=\N[ӹb(ث׏.a\؏hHnL3%qiF 7"Ťa"̌+@$ej P5J >\0'#6p_/qVa GHFkXu.6XfBWG[bߢW(zF޺$]#!^PdW15i&$ tvE C ^Y09HR\O #D\_q2!N\PYhFBq#Ez/J0y[b)r}d]QNWv["G26v.A*c0RDž1R+D|S ! 4A5ÙL8,< d9|hWsu0e Ek C@P&mD.~/dji\Y'RL4,5[`/s9 Y VsbҜ<'[=n2GֺDڴVJ +kSoKjs+YNs,hn NP2BLsY+4_%2ГͿW~?^厅`A3PRZXP4L\QA">W̡F!{0sNgC_}}Q hDj˵CHt_c١rF7k;Տcf3`Mqպѻ*Kԭ*{_x=ɽhmZ/խd4&pYD*Z9nN qr^ )1FMC /HOεDP(22“LK[ ‰ZݱB0I6ocO;^ٳNkPa rINV7eyt>U>ur#̲+x?ct`ncrw]] mC|&c1z F65AV4UU`@6{I,krtunSRg q 01l]=0p2`V8I;q,^ i'&;:5la;[Ou |1X~z/PU?mmt,čLBs=$POP$Yª9muYzo>?<tTÐ }!N3T'i^o]֗Gg{Iy˫r?|sXHU`~w\Oz o^%` WF7uep4p_@돢 Z:Ol;R_-eʭc 05j J}w!v8!?˘a3ӄ@xq 4;88Mt֛NP5r*꠰ D$K9 3kg + ۈvhʌ"R7[ @FOVX)²9-(x8 Wѯf-} oGpAa@C`蘛;J IsʦYTsA% :p=,9> ~ÃO&>!Pvkb"_w"n۾RX}   8ˤs:l]VN~[t}g$yV$@g/ϷqlQm;lsI*wăY‰Rɘ%- Js+=/h!IZX0\BX9 p9*E2ZTi``ZQ%HFrQiSh͔~lb_E8fҭA] *DG:y o7Mgms3lPE-_N]@!ZA/o'q=.[gbqj2a^W -P]8vQs'R4sqrՌPF?Ġd-Y]ɍ]Wvdڨ>~* v5hXD;wضX(ԯRD6eޟ 4AEӨ/WzhyKP ec X/83@iDD߇6wl`I1/b&$Cߠ(U ]l7( }[xvKa&`E vP&! \BM7 %F\[ G- ܦj"Sُ4}៶* EBvwէR%%?`ϡi1᪃ %MT4M??@ ڼ?/jD_۰L 4YD7RW%sY^PN+MO`vAB93}$aw2Sߩ*-#o&@,&YeYJ<|@ydN*R]NiCIh4Ԁ i2.r\gnm2]N\aAwj%fauA3 GX)wALLq7dQʄt쎌?H -wu=m㶊M|”*dpeq#5㜤t3T)Xt4R;,m[3-*aj>WKֵyXt諕?5ظXhA$HQrnP|UuP'S5uasaApA:সFUm]:Tx}rS-9ÛcP`P7uPգ8}xuSލ TXٟ9DMo0^3BWxXBfs;à4a5WM)x%װ  ^L Ɵ?j\?0jãFUMŽFMޯډYE.:@VB5(ZGS5{8xtbP\R!2N5N}z/_c0>X @MpWF40d\oP~vH V揺 [']zДGj\vj *p6T%z+Ƿa% "q1*ic^c7n/U/X͝8C|\L$搸qSe"MBBm?_ q)(N)tF\L'3@t<( ^N16`/5DwG:߻^\E5lf_rYvΏ^[<%N:E.L!3Y+(xR0E-M-"LyM#|gE%Yt]:v6ƿV~RbiRa Yn1:Jԕ IzO^pҒ(\g8ݷ޷]Mz:hlf?"zc A|9|Ś@B;15Y23XcIs[+ќٱbsw/.^>rԖu]0L8B[N~=u] ?/_!/³/98<Ԯa`g-?7/Pz.$NٰXFwnY* !ѹ}g{Msk*Ms+M asxRƃsm3'YVE{ϥTx3D/;/h;%,U#"\qh+'=[m5Y"+ )^3MV̱`YD:)"c9qM(V`K3d u*k;ۼ~| QMɹźs!Kpeicu\,Pѓ?V\Do`1XIc6>Lw'`70oO/_<)L巧/?;7wS=&`PKXYen.-[,W߽=;Y|ȶ+&eȅЫivWn xμ0q9X;Y&=nMʤJF%&<۪;}_oJن{%7JaK}pSfq.4@7RKC#x%nj6(/T@#mU-фa[%Y;(G!SmۤͲrteO]aзX@ (TVԤLd], ]]Br5T&wtT k?%|bUkIl3!uJ>NWʬᓉNNg0""3>Lu"5,͍Z#Z̩KqEsRg8FU)""@%5h/s :zPm{Mq]j5?Cոoj׻օy(f@$18@>Ɗ3[X.," a3 O5@P޸XJQЌ-@l Iv  yXLf,>ie:_ `pC|150[P[ǃxW7ι4x/7XOEO \a}bkz6'jbOXE@XK;woU弗\h']`2|ۆj}VlE 6F%OO2b3#7>Я=5*03,z cDySPP +!fzXǡ(`$ VJE_w¸BMQr+(S$m\( uXt#$h0٦v>bBlzr27uZ+cC$Jc\n ][#UXogLG WE+J[RMd`ra^2`yc5DSc 55‹\G`x,FRmgX/pYliCC7 lwQk6*&e4n [U6w&xٻq+]_1?ڕ?b'q,`3V4&HbhpMr~uG^5I[-">r[{Xn<ӺV|y=0HL H"kXɿ|Kd-79٢_(Z;ꆕy|aKX[z0DldK6ٳ7 ?[`Ϟ/OW4΢`ZƺHȁCid>Q8cIP[_b 4!%5JOxOXy3QW(&2ֶe%Zè,_?YɎݏr/>nʫwS~AڄtJ!JR^V]sh^DsN]S(nfC'W =H$_18=7C۹wPKLR-#1osq =ū#^?tCk tWCͺ*,7Z̈_ʚygbPOcxSQs2yLU+>op/^ae\KۇN1-ANn>xN wX-|FIr^sdw(a!ND߃*s]^8Ǯ'O)]'N[ukuhJ(l0,XZfT\`Sգ[3%L/:zAq\{'{śiBItdO &G|a*nga\n!foy{dFC͌|Y eIG*yH۸4W|d&D氩1g YW[cס^S"|'eFO݂) @fCk"KoSMW9szO"\Y| c~/vqV&}rDLX "E/&ڟ8/"oG!QGXDuLN}u.]=լmt'U+Խѽr|UVW؄oxQIXt>! Q87l/$y_,:]9dWG8Ƽ׉[ taS|jAEЇtVr嶰)CLi.bj`މྎԑ@ x&yg}M1ŖuauZ^MΘ.D0HPί`;ա ]Qs %:qK=_+Ե5b+Vf}v|2cPS^ CIt3rWm"*QYOm>}#mY1גǰzP^h|Cp4iij4t4xC(z 0C,`$Q&ZZkXZ v\˜j?  ( #,!^T^~=c(8L$Ap``916RD0o0'@@h D 5+:MehD9cSz-jNcL44p#08F8\BG 0/$$ch3PUADA \3y b$p:7gH)-,\E 8{h+`>R)\75@O@5G4  Gz yJ uY ˍ \%)f XA<TMA@8 ~ J3.Rzo'x#"S#P0dP0p/@X’ܐXA^{ rx' CC&@`%`\0uBRb0 ^D ` X:F=` |J&)V*fRA,Qlx*LL0a"TReZd @DNo A`H'F0FP@~+p+1 *EᘀցRS s=LV`V_:-(xF@ PI/Q_n&?|4d|Y/ ps_^aF \y}qwɕqo2} cݍ;adž8vg/uwwtT=LR)KQx#s=zaܱc[3F?U8+×A_yihxG.J2ZM;yׁvЭۓ?@\cuo76sۗSjeW/7 G|/nɆxjү^N(Y?67_0~θ:>42s=nA{ ?C-nL &F*PФ?.Ae%(lgPh O@a# O2(`C[`Z(Q˼PY؉0K[^KKEd .(/y O-ek){ #ZjVF @wgCz6fp*<@a˅?B Tx:gm [&Xxzϖ`Aj"xk]Gm 2Y˂Jf(qA`cAYDg2WDZpAQ)ʀMn6DM2Djב e1K?gi"OÍP|yCޒTX?ghO緍 Ǎvr<D5ȽF'Án{ޭST慭N|$gFdEI<ϰ&3ьKR3U5;8XF(M YH#Yd㪬Q ӑÈK_ZCD*345ӫ]ɹq=vcaiobjPPXA1)kmƩӳˋw'v/>\_YwWN>TXw7/d{qpr?^u_䕞?9ޟy\beJxl hr*xl{wpEü9oy.|:x{0mŲYM-7;"?9ؽx=?Ί_%4e՛G'W翝_/hԞOy{?;A=U?GJ+Mwû3hBWBR, ulo{L="]%J|[0`5;)9B'u}1Eߔx<OƷ㞛S{a0Yr#[7Q+AmE!4H&j؀̵ߡ-`iPVYx:UCZB`\k󣐒Uw4WE)8cքxcpN`i+ >h$58]ϥKҞ1vY3[zq.#s߮"NCrkظV.ǃj}sve ^>ۃ O?=Nodp64~fK0Ҍ c6+Xv<[kKY^RlW3>\e: E&g1AtpFQ*$% '+CkLo̘׷a)<+1-9l ڭAFլT$[sfbcᑄduSe1𘎺mi"FSXꀭS)^婥lM9PV5%cmQ ސv0U?#jI0MOlm2[Pw:jde6.MMwpdGOc`&iS+ôIGarfstb'y<~?RQf|/E7k1Ġfr֔N9{w2t҃C#h_zdusCS:0bR?≮1΅8 !@!Y`D;Pt+| ҥ& C^uQҽ|>ioйE=i\..R?LM#`;ߝ~ȹWDI^iJ5PFKgQ`2qZߥ 7EPR)0q/Aϸ%x:y.gǷ&:| |-g7 &Guvug:w6$gu>\=9?]ůX*qv=kſ؟}m~;],ݭ)}hw'W,.WX,/~-VֻjĪkq~4¿zü/Q(vް4.=FqeG{GBqx7X'~bbU;3@юQȼR)+\ؚ@~*WRE[2LϓG/‹ɋ/v^݋Z(k(p\$Y#*HH(rtm"aL3^+|[J`)bؒV[Q*5UkؼI%) 0̥058W2_nOm#Q W s ?:xw|rҰ{Ovurzqptw9V9/{]{={p|)Y<]$(T̗_O(tO- -{S fT&6PIHq|MZ|YFߞ~OokFҍuU3N9A>a^,eHgxÔ TiFMvӶ$"1V"j0C\땣qDũ-8X$YT*G k(U^0*7 _s-ɻC,7 //ߜ߻zw~_Wήv8VUރ-o4kjʆݏOvVPZ>Új>;-\aGp!3FLTȥ"J+C3S1qDU{ĪPYêI⽲ |XFpN!ַ۫pj+!\缈?zXHU LSچ{HT|l*x(bfWB;%cN,2)%MJ1Ȫ)y&p\B(L,3CS@w[P%J21XRz(f)0<***F-A\pςRRwQVO7oߥBFǴjcJ1%`J2.;|C[.-™b\@Ź`B7|Ç Mwt|reX9/nm]FT4x?ˇd٫bRWY*9qSEI ж(ؽұjn&E7SJ ?[pz+1sjm_߾ꞞS{ͭ#3=wcsWP66}|sky:e)ZVlB. Fd)Qǫ{+)ԁ=a8#5^ 9RJ ă Sn|ަLI2Zt<LM@jR?q:'$}2GTju'p6F7'z tQCtpxYo8u䨺 @ke~_ј $x{ QTW3?h4!hyCEXވ 21rPi2FW0AD\^¨i JneɼԵ, liõܵ١>ӄU˗R׀`qc VڑIw64 ]P9W&[ _J1\xq>hJc=!:`-R(NJ绥ܴɅ7,IGb4&LW*VŦl*nx<s w0 W$ 2}S`uYAO"/9ߗv˫L -0Gga)SR6WBH\GRhI;M"t@zEQ+ݣ˔+tuJ]ewҧ4.m$)NG\ݞ|!&8GH R*g8.TlTw bJ"owX`mĬ a6x1DHvq-ijZFg婧v"Od'B*"9JXhU!g'ZCrն!cU%PDIfm!XQ|QSse@ҶqIǡlEVe<fnbc*1t):FԁyݚȞ]nw15)c"9y>6wqt`D='Ә%` \Ym*"8vN#& ]?MiS.""ehtS&Ў׵M*,/AO>GX8A?_s3 ?'~c8+$ QN*Vt%4j |av{Z2dsyRYQ4͠5HQlԶcbuX[/Y10XT'WǏP~p̂?Bovz[VvFGZX}ؖhkFb xښ$4:M6%v}초gTxÝ JH&LyY<$!-NGcfo9kvbTax\< Qo*>;}=E=*=PcZz An {J>P.NNsU ṙi^Sd?Z/YH8Z8. RӇahIi*ӥ[%=[?CIZ&ZEӳԷ˯v6cG{ë٢|Igrfrxb5#hQAY8eNh6h Mt+J`I=}fSMut5s&}@vy{pv~q\C+X<;d!q԰uTЏY~TvRPX{Ou&͸7ap]B~o{f˼2n7'#xk:u b NDieԒjy'*(k.Aa2 |֕k')'c=#W[BN$8ucRػ<:촛{{r^ Nyan~̉c?P_({X[zZ5)g^Ά7yOܥ%tsk~j由mqeԞ?1CX+LեڜѴK64Da$*X)qRYlp^ȭ\F4QiP,`#*P9WOYd/e- Fxux^,Nld>.fs ?#SM M]~_Y̽ي~5o߯>uayJkm66Â="yfH4cID WGM,8 B%;$LtQ4* g"|s# ꪽB2ɤS 6)E'{^YMk\iS 2Z%By)"JIq -At<\JyαRqFXaz㯖)b*echŻMc> xspx;#fg3,yk[CȋU`X d=XEYwAMkV zc(sL6WJ 2HVi0jmaf.A*eArrE)+ ,Qk8G)+jVpy?`oA2|KgZz;-̷Jlf5AT}yK=,>`=MJm/S}g;:jWv9@:oqJ}Bwf֎-ۦˠOWQx7nz>\-"~vx)nOevBKp^P+3&< ԅ\PI~hPe6(F9SD1c )xo `*S s WazhµX:kPeh R׷-DKUe8Jxr2޿#ϔ3LFwL'`O`S`OH !wđVʣ e6s̐0Sg-iƈĊ1+tKI'.~cԙ\l`~oPRykk /gqm0+[a ̂̉T;rͬO3TB_%y 3†#O t& 4fYutB#e4(^UcR)ˆC[#b#L1` km̓LP[bbN R/{3GoM{YD+q8STãÇl,C݂xjZA-yLN2(U0zUp?% Z˚zD@x6:z~VE|hUuHը E8!XD_ ]ǵtN]-=M]f.sGˏUiVGU7lƴI(d,?e;|%dEvty{h\/hnƄsr"m0iivڜ$x*Z͉"xNpGK9 "5z^Ŋ3iy;|gVݶMz"kFz/19j VzM&lK<`D K_yG| '&e?_=v>mu; +D_d9N|skU fF[nQس'sKg"#u бx-S~bH/G(P:CFxNH>PaHf;e2ޕo~aϹԆSJL \UZCUJ <p7,4zKPNRZH)c$hJ$1齩SK Lop7jL@gf B$kڴm^};kz2Tb`V{Ak\{r({<9,_l tM'-uNqVt~fU3hccNUegq9{a\YT!Lm(I]d8H4N”Q؆hTO,RfA*`v#C;g;j?הuU9WxZqjb0!0RB@a05ؘF )(/g'ZpV>z8MF## dHUp]Yʙ~k͛kenET,`-B@^Z-ro7߆ 30ilvDw˜;`Na5P?>W{ ;;X3vbm{4a+0|$*)e$0[0 jN)"pߞ2mSG۲1oN>@.Ў3UGi㵁).&J26"+P, ;QjVmDV OLZX zCo Nˡ0wnxr.~;W+GQ~m-F[̏U'YD1qF& ۛmy_/)\0 ֬H}lA뢴T+Hi&J0JAP`k "*qTS""(k\:To>$xFAD,!Ќ 䙒c+eޯ=qE)Z!}I,V *[5 +b <ڈg_ ?n Ak8ך Ґ,&^)X1\geTBN"a)5#&RTzl$1E&PAJ Ńr,h0hMXiIF${0-'h3cD^{?~)ʡ&Oo IS6Ԓt`K!7;}"!>}n QFW3 ,/trWp*.60kl[*`Clߺڶ4V*@CAy:A%JnJk{W G$eM#`tRs\ $N'i/*Tya*WFMذH]<8-nu]zaIQB:a'iPy;ng\&@G`~ ǝ!JFngܛGZt=dI婥wL~d2W:383XԽ M8RW{VZ0@NtHE!\;I3E1nǡ%bI(E2(&`qڲ*\s7 ~0Dꂞ棼QNI6(7y1}Ѹ36t鍼pnamt1f 4ifۙ<0NT'Χ1P(ҿd꼻&WO05 '\œ]ࠕ/Ő[; )hwێCG΍fHeBC@v:0zɗ_܅=ǹT]~{>k@|~4UQ}"rmu mb1 3 X}?O.pt -cWc ]c@z\⬯7ChF/b4nOҨd{Тp+LA(qֹo+MCaP0@J(4MQ ym vFי-ЕM)x{لڻK,?MN(׃nk1 V6(#ԓuEy]a܅a@єbӞ,d} ߽+VL1:20 mkP‰s&MD֜IrCSCroI稧p2xPTCb| &1vnf4:nzP2@{4a2'N7?BkD0c9y`ʫ>BƝw7Alzӛ?s҃ɑerӂf)5ԯQ܏(3_@ʼYsNIg̱ڜ-9y_9$|͒ R YJ NjgѿSi/$\>:~k{9m*?I_Lf⯅hLx,͓e^]l*vOZkzD^˸/.ڱ7' oPu?%,X1A}Mwwׯ_^ R&,t"(`-ߛwb@Ǡs5#}sryѹg Kznm<Z^^\̳܄ #$@Gþwj9,`iz Hgy q:T V 䢵FqnsL:RjluaL+ 0'IFMIIA(9Pr<nxER78ZTp)^y_&# Z %v++boz.kj]#bAOųzӴ5 5^!JsۍfZO6-~HX1T1ARШu:-I^wqKBYҊZ/(RL *c>wj$)w1Ph\Tn|{=xŚ;Q#$LX-!IY֤Y;ӟnLsZ] L{߯Y@)zo߷3maP&.:awZ82g0I0рV-=`ji@1> e!IrFPECY'ȶ A$G/$ؠt BZnF bS. ϸAJn T`W.*BQb-b|< Œh[8X\hЬ7U~o5! ퟝǝ,nq9-ѨZa)=@_"`)(\+Pqi}CZ=# fnlr~vW[J%LZuJ˦JFy܀ D8#SI)NxRC/%fȨ D<~ @1FXHB N`E}5u̹nxR1 +ԼvRQO$%ۻYƍ˱Q@+/vTzꃕC{݋Tydƍt&Ka {w 51Y(Ӌdр 2H t?פ5.H&9s 39DZYEcؐƑd J[T+ fE}1iXxȍ(HrʜK)#fdӶOʿv {:2_D[˺b)GC՛wgr{MЙF2mAN9_Y٪n"]lܭfpl9?ZFpziFf}Eۓe)Ynq o.'|1Rl{FJVp=qNbAyJN QYEu9V㱏GD1ab c"W%^ǃO noXf0+@Xz5#*ʂ<)4s{s}Q?QI-GFag|5{%K(7}A"ʼn+yhq wq=h vM fN7u*HZ8WTJz<*&i"dAdQ*'viu"/$KfeQ%+msz&OE)=-Db@R ıșE` G1#dPMwԸtG/1FՖ YJЈzf,>Ab=!. 0ĸ beKMYfY`gsd[њ7!kz>{~%[C??Pƕ{ڤLg%hH&@XyIQhQKJt:8%>"jU4y G%H*ұ2X@*/K-a˘KPK`ZKPK5thJMETA-INF/MANIFEST.MFPK5thJӗtMETA-INF/SOVA.SFPK5thJ 3)qMETA-INF/SOVA.RSAPK5thJ 6 META-INF/PK5thJ`ZK s index.xmlPK1U././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/signindex/unsigned.jar0000664000175000017500000004714414717152070020403 0ustar00hanshansPK5thJMETA-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMu X*h%&*8%krr%Z)d楤VUr{8d RJv Lɵ0( (N.,-s522PK5thJӗtMETA-INF/SOVA.SFmOO0$|gL c*lRus m)gWu^L}\Iͭ3`z ϔ%:ƩFBgThGhvNEv aI=BXL p /!4$"h2\ԀZy{HSSQ&yN+^*Q7u PK5thJ META-INF/PK5thJ`ZK index.xmlYs$˒WGf#Ȏ}ӧjlg^`5]TzO|_hwҤgI2j1qJ3YkVf" {^\b=|wѸ7 /0pC\$_GÞjKvҗnpKg`nï {$'/9|A,7q DAu((Gib`J(;L1(SsĐ"%3&B F1?C&)'|CpQPD%gkw_zZ@Hmq14/' "o Eh|Cp4iij4t4xC(z 0C,`$Q&ZZkXZ v\˜j?  ( #,!^T^~=c(8L$Ap``916RD0o0'@@h D 5+:MehD9cSz-jNcL44p#08F8\BG 0/$$ch3PUADA \3y b$p:7gH)-,\E 8{h+`>R)\75@O@5G4  Gz yJ uY ˍ \%)f XA<TMA@8 ~ J3.Rzo'x#"S#P0dP0p/@X’ܐXA^{ rx' CC&@`%`\0uBRb0 ^D ` X:F=` |J&)V*fRA,Qlx*LL0a"TReZd @DNo A`H'F0FP@~+p+1 *EᘀցRS s=LV`V_:-(xF@ PI/Q_n&?|4d|Y/ ps_^aF \y}qwɕqo2} cݍ;adž8vg/uwwtT=LR)KQx#s=zaܱc[3F?U8+×A_yihxG.J2ZM;yׁvЭۓ?@\cuo76sۗSjeW/7 G|/nɆxjү^N(Y?67_0~θ:>42s=nA{ ?C-nL &F*PФ?.Ae%(lgPh O@a# O2(`C[`Z(Q˼PY؉0K[^KKEd .(/y O-ek){ #ZjVF @wgCz6fp*<@a˅?B Tx:gm [&Xxzϖ`Aj"xk]Gm 2Y˂Jf(qA`cAYDg2WDZpAQ)ʀMn6DM2Djב e1K?gi"OÍP|yCޒTX?ghO緍 Ǎvr<D5ȽF'Án{ޭST慭N|$gFdEI<ϰ&3ьKR3U5;8XF(M YH#Yd㪬Q ӑÈK_ZCD*345ӫ]ɹq=vcaiobjPPXA1)kmƩӳˋw'v/>\_YwWN>TXw7/d{qpr?^u_䕞?9ޟy\beJxl hr*xl{wpEü9oy.|:x{0mŲYM-7;"?9ؽx=?Ί_%4e՛G'W翝_/hԞOy{?;A=U?GJ+Mwû3hBWBR, ulo{L="]%J|[0`5;)9B'u}1Eߔx<OƷ㞛S{a0Yr#[7Q+AmE!4H&j؀̵ߡ-`iPVYx:UCZB`\k󣐒Uw4WE)8cքxcpN`i+ >h$58]ϥKҞ1vY3[zq.#s߮"NCrkظV.ǃj}sve ^>ۃ O?=Nodp64~fK0Ҍ c6+Xv<[kKY^RlW3>\e: E&g1AtpFQ*$% '+CkLo̘׷a)<+1-9l ڭAFլT$[sfbcᑄduSe1𘎺mi"FSXꀭS)^婥lM9PV5%cmQ ސv0U?#jI0MOlm2[Pw:jde6.MMwpdGOc`&iS+ôIGarfstb'y<~?RQf|/E7k1Ġfr֔N9{w2t҃C#h_zdusCS:0bR?≮1΅8 !@!Y`D;Pt+| ҥ& C^uQҽ|>ioйE=i\..R?LM#`;ߝ~ȹWDI^iJ5PFKgQ`2qZߥ 7EPR)0q/Aϸ%x:y.gǷ&:| |-g7 &Guvug:w6$gu>\=9?]ůX*qv=kſ؟}m~;],ݭ)}hw'W,.WX,/~-VֻjĪkq~4¿zü/Q(vް4.=FqeG{GBqx7X'~bbU;3@юQȼR)+\ؚ@~*WRE[2LϓG/‹ɋ/v^݋Z(k(p\$Y#*HH(rtm"aL3^+|[J`)bؒV[Q*5UkؼI%) 0̥058W2_nOm#Q W s ?:xw|rҰ{Ovurzqptw9V9/{]{={p|)Y<]$(T̗_O(tO- -{S fT&6PIHq|MZ|YFߞ~OokFҍuU3N9A>a^,eHgxÔ TiFMvӶ$"1V"j0C\땣qDũ-8X$YT*G k(U^0*7 _s-ɻC,7 //ߜ߻zw~_Wήv8VUރ-o4kjʆݏOvVPZ>Új>;-\aGp!3FLTȥ"J+C3S1qDU{ĪPYêI⽲ |XFpN!ַ۫pj+!\缈?zXHU LSچ{HT|l*x(bfWB;%cN,2)%MJ1Ȫ)y&p\B(L,3CS@w[P%J21XRz(f)0<***F-A\pςRRwQVO7oߥBFǴjcJ1%`J2.;|C[.-™b\@Ź`B7|Ç Mwt|reX9/nm]FT4x?ˇd٫bRWY*9qSEI ж(ؽұjn&E7SJ ?[pz+1sjm_߾ꞞS{ͭ#3=wcsWP66}|sky:e)ZVlB. Fd)Qǫ{+)ԁ=a8#5^ 9RJ ă Sn|ަLI2Zt<LM@jR?q:'$}2GTju'p6F7'z tQCtpxYo8u䨺 @ke~_ј $x{ QTW3?h4!hyCEXވ 21rPi2FW0AD\^¨i JneɼԵ, liõܵ١>ӄU˗R׀`qc VڑIw64 ]P9W&[ _J1\xq>hJc=!:`-R(NJ绥ܴɅ7,IGb4&LW*VŦl*nx<s w0 W$ 2}S`uYAO"/9ߗv˫L -0Gga)SR6WBH\GRhI;M"t@zEQ+ݣ˔+tuJ]ewҧ4.m$)NG\ݞ|!&8GH R*g8.TlTw bJ"owX`mĬ a6x1DHvq-ijZFg婧v"Od'B*"9JXhU!g'ZCrն!cU%PDIfm!XQ|QSse@ҶqIǡlEVe<fnbc*1t):FԁyݚȞ]nw15)c"9y>6wqt`D='Ә%` \Ym*"8vN#& ]?MiS.""ehtS&Ў׵M*,/AO>GX8A?_s3 ?'~c8+$ QN*Vt%4j |av{Z2dsyRYQ4͠5HQlԶcbuX[/Y10XT'WǏP~p̂?Bovz[VvFGZX}ؖhkFb xښ$4:M6%v}초gTxÝ JH&LyY<$!-NGcfo9kvbTax\< Qo*>;}=E=*=PcZz An {J>P.NNsU ṙi^Sd?Z/YH8Z8. RӇahIi*ӥ[%=[?CIZ&ZEӳԷ˯v6cG{ë٢|Igrfrxb5#hQAY8eNh6h Mt+J`I=}fSMut5s&}@vy{pv~q\C+X<;d!q԰uTЏY~TvRPX{Ou&͸7ap]B~o{f˼2n7'#xk:u b NDieԒjy'*(k.Aa2 |֕k')'c=#W[BN$8ucRػ<:촛{{r^ Nyan~̉c?P_({X[zZ5)g^Ά7yOܥ%tsk~j由mqeԞ?1CX+LեڜѴK64Da$*X)qRYlp^ȭ\F4QiP,`#*P9WOYd/e- Fxux^,Nld>.fs ?#SM M]~_Y̽ي~5o߯>uayJkm66Â="yfH4cID WGM,8 B%;$LtQ4* g"|s# ꪽB2ɤS 6)E'{^YMk\iS 2Z%By)"JIq -At<\JyαRqFXaz㯖)b*echŻMc> xspx;#fg3,yk[CȋU`X d=XEYwAMkV zc(sL6WJ 2HVi0jmaf.A*eArrE)+ ,Qk8G)+jVpy?`oA2|KgZz;-̷Jlf5AT}yK=,>`=MJm/S}g;:jWv9@:oqJ}Bwf֎-ۦˠOWQx7nz>\-"~vx)nOevBKp^P+3&< ԅ\PI~hPe6(F9SD1c )xo `*S s WazhµX:kPeh R׷-DKUe8Jxr2޿#ϔ3LFwL'`O`S`OH !wđVʣ e6s̐0Sg-iƈĊ1+tKI'.~cԙ\l`~oPRykk /gqm0+[a ̂̉T;rͬO3TB_%y 3†#O t& 4fYutB#e4(^UcR)ˆC[#b#L1` km̓LP[bbN R/{3GoM{YD+q8STãÇl,C݂xjZA-yLN2(U0zUp?% Z˚zD@x6:z~VE|hUuHը E8!XD_ ]ǵtN]-=M]f.sGˏUiVGU7lƴI(d,?e;|%dEvty{h\/hnƄsr"m0iivڜ$x*Z͉"xNpGK9 "5z^Ŋ3iy;|gVݶMz"kFz/19j VzM&lK<`D K_yG| '&e?_=v>mu; +D_d9N|skU fF[nQس'sKg"#u бx-S~bH/G(P:CFxNH>PaHf;e2ޕo~aϹԆSJL \UZCUJ <p7,4zKPNRZH)c$hJ$1齩SK Lop7jL@gf B$kڴm^};kz2Tb`V{Ak\{r({<9,_l tM'-uNqVt~fU3hccNUegq9{a\YT!Lm(I]d8H4N”Q؆hTO,RfA*`v#C;g;j?הuU9WxZqjb0!0RB@a05ؘF )(/g'ZpV>z8MF## dHUp]Yʙ~k͛kenET,`-B@^Z-ro7߆ 30ilvDw˜;`Na5P?>W{ ;;X3vbm{4a+0|$*)e$0[0 jN)"pߞ2mSG۲1oN>@.Ў3UGi㵁).&J26"+P, ;QjVmDV OLZX zCo Nˡ0wnxr.~;W+GQ~m-F[̏U'YD1qF& ۛmy_/)\0 ֬H}lA뢴T+Hi&J0JAP`k "*qTS""(k\:To>$xFAD,!Ќ 䙒c+eޯ=qE)Z!}I,V *[5 +b <ڈg_ ?n Ak8ך Ґ,&^)X1\geTBN"a)5#&RTzl$1E&PAJ Ńr,h0hMXiIF${0-'h3cD^{?~)ʡ&Oo IS6Ԓt`K!7;}"!>}n QFW3 ,/trWp*.60kl[*`Clߺڶ4V*@CAy:A%JnJk{W G$eM#`tRs\ $N'i/*Tya*WFMذH]<8-nu]zaIQB:a'iPy;ng\&@G`~ ǝ!JFngܛGZt=dI婥wL~d2W:383XԽ M8RW{VZ0@NtHE!\;I3E1nǡ%bI(E2(&`qڲ*\s7 ~0Dꂞ棼QNI6(7y1}Ѹ36t鍼pnamt1f 4ifۙ<0NT'Χ1P(ҿd꼻&WO05 '\œ]ࠕ/Ő[; )hwێCG΍fHeBC@v:0zɗ_܅=ǹT]~{>k@|~4UQ}"rmu mb1 3 X}?O.pt -cWc ]c@z\⬯7ChF/b4nOҨd{Тp+LA(qֹo+MCaP0@J(4MQ ym vFי-ЕM)x{لڻK,?MN(׃nk1 V6(#ԓuEy]a܅a@єbӞ,d} ߽+VL1:20 mkP‰s&MD֜IrCSCroI稧p2xPTCb| &1vnf4:nzP2@{4a2'N7?BkD0c9y`ʫ>BƝw7Alzӛ?s҃ɑerӂf)5ԯQ܏(3_@ʼYsNIg̱ڜ-9y_9$|͒ R YJ NjgѿSi/$\>:~k{9m*?I_Lf⯅hLx,͓e^]l*vOZkzD^˸/.ڱ7' oPu?%,X1A}Mwwׯ_^ R&,t"(`-ߛwb@Ǡs5#}sryѹg Kznm<Z^^\̳܄ #$@Gþwj9,`iz Hgy q:T V 䢵FqnsL:RjluaL+ 0'IFMIIA(9Pr<nxER78ZTp)^y_&# Z %v++boz.kj]#bAOųzӴ5 5^!JsۍfZO6-~HX1T1ARШu:-I^wqKBYҊZ/(RL *c>wj$)w1Ph\Tn|{=xŚ;Q#$LX-!IY֤Y;ӟnLsZ] L{߯Y@)zo߷3maP&.:awZ82g0I0рV-=`ji@1> e!IrFPECY'ȶ A$G/$ؠt BZnF bS. ϸAJn T`W.*BQb-b|< Œh[8X\hЬ7U~o5! ퟝǝ,nq9-ѨZa)=@_"`)(\+Pqi}CZ=# fnlr~vW[J%LZuJ˦JFy܀ D8#SI)NxRC/%fȨ D<~ @1FXHB N`E}5u̹nxR1 +ԼvRQO$%ۻYƍ˱Q@+/vTzꃕC{݋Tydƍt&Ka {w 51Y(Ӌdр 2H t?פ5.H&9s 39DZYEcؐƑd J[T+ fE}1iXxȍ(HrʜK)#fdӶOʿv {:2_D[˺b)GC՛wgr{MЙF2mAN9_Y٪n"]lܭfpl9?ZFpziFf}Eۓe)Ynq o.'|1Rl{FJVp=qNbAyJN QYEu9V㱏GD1ab c"W%^ǃO noXf0+@Xz5#*ʂ<)4s{s}Q?QI-GFag|5{%K(7}A"ʼn+yhq wq=h vM fN7u*HZ8WTJz<*&i"dAdQ*'viu"/$KfeQ%+msz&OE)=-Db@R ıșE` G1#dPMwԸtG/1FՖ YJЈzf,>Ab=!. 0ĸ beKMYfY`gsd[њ7!kz>{~%[C??Pƕ{ڤLg%hH&@XyIQhQKJt:8%>"jU4y G%H*ұ2X@*/K-a˘KPK5thJMETA-INF/MANIFEST.MFPK5thJӗtMETA-INF/SOVA.SFPK5thJ META-INF/PK5thJ`ZK index.xmlPK\M././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/0000755000175000017500000000000014770510164016466 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3201876 fdroidserver-2.4.0/tests/source-files/OtakuWorld/0000755000175000017500000000000014770510164020561 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368094.0 fdroidserver-2.4.0/tests/source-files/OtakuWorld/build.gradle0000644000175000017500000001644414743421036023050 0ustar00hanshans// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext.kotlin_version = "1.6.21" ext.latestAboutLibsRelease = "10.3.0" ext.coroutinesVersion = "1.6.2" ext.coroutinesCore = "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion" ext.coroutinesAndroid = "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion" ext.coroutinesRX = "org.jetbrains.kotlinx:kotlinx-coroutines-rx2:$coroutinesVersion" ext.gson = 'com.google.code.gson:gson:2.9.0' ext.glideVersion = "4.13.1" ext.glide = "com.github.bumptech.glide:glide:$glideVersion" ext.glideCompiler = "com.github.bumptech.glide:compiler:$glideVersion" ext.paging_version = "3.1.1" ext.rxkotlin = "io.reactivex.rxjava2:rxkotlin:2.4.0" ext.rxandroid = "io.reactivex.rxjava2:rxandroid:2.1.1" ext.rxbinding = 'com.jakewharton.rxbinding2:rxbinding:2.2.0' ext.rxbindingKotlin = 'com.jakewharton.rxbinding2:rxbinding-kotlin:2.2.0' ext.androidCore = 'androidx.core:core-ktx:1.8.0' ext.appCompat = 'androidx.appcompat:appcompat:1.4.2' ext.material = 'com.google.android.material:material:1.6.0-beta01' ext.preference = "androidx.preference:preference-ktx:1.2.0" ext.recyclerview = 'androidx.recyclerview:recyclerview:1.2.1' ext.constraintlayout = 'androidx.constraintlayout:constraintlayout:2.1.4' ext.swiperefresh = 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' ext.jsoup = 'org.jsoup:jsoup:1.15.1' ext.crashlytics = 'com.google.firebase:firebase-crashlytics:18.2.8' ext.analytics = 'com.google.firebase:firebase-analytics:20.1.0' ext.play_services = 'com.google.android.gms:play-services-auth:20.1.0' ext.exoplayer_version = "2.16.1" ext.room_version = "2.4.2" ext.nav_version = "2.4.2" def koin_version = "3.0.2" // Koin main features for Android (Scope,ViewModel ...) ext.koinAndroid = "io.insert-koin:koin-android:$koin_version" // Koin Android - experimental builder extensions ext.koinAndroidExt = "io.insert-koin:koin-android-ext:$koin_version" ext.lottieVersion = "4.2.2" ext.coil = "2.1.0" ext.jetpack = "1.2.0-rc01" ext.accompanist = "0.24.11-rc" ext.composeUi = "androidx.compose.ui:ui:$jetpack" // Tooling support (Previews, etc.) ext.composeUiTooling = "androidx.compose.ui:ui-tooling:$jetpack" // Foundation (Border, Background, Box, Image, Scroll, shapes, animations, etc.) ext.composeFoundation = "androidx.compose.foundation:foundation:$jetpack" // Material Design ext.composeMaterial = "androidx.compose.material:material:$jetpack" ext.materialYou = "androidx.compose.material3:material3:1.0.0-alpha13" // Material design icons ext.composeMaterialIconsCore = "androidx.compose.material:material-icons-core:$jetpack" ext.composeMaterialIconsExtended = "androidx.compose.material:material-icons-extended:$jetpack" // Integration with activities ext.composeActivity = 'androidx.activity:activity-compose:1.4.0' // Integration with ViewModels ext.composeLifecycle = 'androidx.lifecycle:lifecycle-viewmodel-compose:2.4.1' // Integration with observables ext.composeRuntimeLivedata = "androidx.compose.runtime:runtime-livedata:$jetpack" ext.composeRuntimeRxjava2 = "androidx.compose.runtime:runtime-rxjava2:$jetpack" ext.composeMaterialThemeAdapter = "com.google.android.material:compose-theme-adapter:1.1.11" ext.composeMaterial3ThemeAdapter = "com.google.android.material:compose-theme-adapter-3:1.0.11" ext.landscapistGlide = "com.github.skydoves:landscapist-glide:1.5.2" ext.composeConstraintLayout = "androidx.constraintlayout:constraintlayout-compose:1.0.1" ext.composeAnimation = "androidx.compose.animation:animation:$jetpack" ext.materialPlaceholder = "com.google.accompanist:accompanist-placeholder-material:$accompanist" ext.drawablePainter = "com.google.accompanist:accompanist-drawablepainter:$accompanist" ext.permissions = "com.google.accompanist:accompanist-permissions:$accompanist" ext.uiUtil = "androidx.compose.ui:ui-util:$jetpack" ext.coilCompose = "io.coil-kt:coil-compose:$coil" ext.navCompose = "androidx.navigation:navigation-compose:$nav_version" ext.navMaterial = "com.google.accompanist:accompanist-navigation-material:$accompanist" ext.navAnimation = "com.google.accompanist:accompanist-navigation-animation:$accompanist" ext.swipeRefresh = "com.google.accompanist:accompanist-swiperefresh:$accompanist" ext.systemUiController = "com.google.accompanist:accompanist-systemuicontroller:$accompanist" ext.inset = "com.google.accompanist:accompanist-insets:$accompanist" // If using insets-ui ext.insetUi = "com.google.accompanist:accompanist-insets-ui:$accompanist" ext.datastore = "androidx.datastore:datastore:1.0.0" ext.datastorePref = "androidx.datastore:datastore-preferences:1.0.0" ext { jakepurple13Tools = [ helpfultools: [ Deps.gsonutils, Deps.helpfulutils, Deps.loggingutils, Deps.dragswipe, Deps.funutils, Deps.rxutils ] ] room = [ room: [ "androidx.room:room-runtime:$room_version", "androidx.room:room-ktx:$room_version", "androidx.room:room-rxjava2:$room_version" ] ] koin = [koin: [koinAndroid, koinAndroidExt]] compose = [ compose: [ composeUi, composeUiTooling, composeFoundation, composeMaterial, composeMaterialIconsCore, composeMaterialIconsExtended, composeActivity, composeLifecycle, composeRuntimeLivedata, composeRuntimeRxjava2, composeMaterialThemeAdapter, composeMaterial3ThemeAdapter, landscapistGlide, coilCompose, composeConstraintLayout, permissions, materialPlaceholder, drawablePainter, uiUtil, materialYou, inset, insetUi, navCompose, navMaterial, navAnimation, swipeRefresh, systemUiController ] ] firebaseCrash = [ crash: [crashlytics, analytics] ] datastore = [ datastore: [datastore, datastorePref] ] } repositories { google() gradlePluginPortal() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:7.1.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.google.gms:google-services:4.3.10' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1' classpath "com.mikepenz.aboutlibraries.plugin:aboutlibraries-plugin:10.3.0" classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } } task clean(type: Delete) { delete rootProject.buildDir } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2121863 fdroidserver-2.4.0/tests/source-files/Zillode/0000755000175000017500000000000014770510164020070 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3201876 fdroidserver-2.4.0/tests/source-files/Zillode/syncthing-silk/0000755000175000017500000000000014770510164023036 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/Zillode/syncthing-silk/build.gradle0000664000175000017500000000370014717152070025316 0ustar00hanshans/* * Copyright (c) 2015 OpenSilk Productions LLC * * 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 . */ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { mavenCentral() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.1.3' classpath 'me.tatarka:gradle-retrolambda:2.5.0' classpath 'org.robolectric:robolectric-gradle-plugin:1.0.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { mavenCentral() jcenter() maven { url '../../m2/repository' } maven { url 'https://oss.sonatype.org/content/repositories/snapshots' } } } // Build config ext.compileSdkVersion = 22 ext.buildToolsVersion = "22.0.1" // defaultConfig ext.targetSdkVersion = 22 ext.supportLibVersion = "22.1.1" ext.dagger2Version = "2.0" ext.rxAndroidVersion = "0.23.0" ext.timberVersion = "2.5.0" ext.commonsLangVersion = "3.3.2" ext.butterKnifeVersion = "6.0.0" ext.commonsIoVersion = "2.4" ext.gsonVersion = "2.3" def gitSha() { return 'git rev-parse --short HEAD'.execute().text.trim() } def getDebugVersionSuffix() { return "${gitSha()}".isEmpty() ? "-SNAPSHOT" : "-SNAPSHOT-${gitSha()}" } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3201876 fdroidserver-2.4.0/tests/source-files/at.bitfire.davdroid/0000755000175000017500000000000014770510164022310 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/at.bitfire.davdroid/build.gradle0000644000175000017500000000676614717152070024605 0ustar00hanshans/* * Copyright (c) Ricki Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html */ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'org.jetbrains.dokka-android' android { compileSdkVersion 27 buildToolsVersion '27.0.1' defaultConfig { applicationId "at.bitfire.davdroid" versionCode 197 buildConfigField "long", "buildTime", System.currentTimeMillis() + "L" buildConfigField "boolean", "customCerts", "true" minSdkVersion 19 // Android 4.4 targetSdkVersion 27 // Android 8.1 // when using this, make sure that notification icons are real bitmaps vectorDrawables.useSupportLibrary = true } flavorDimensions "type" productFlavors { standard { versionName "1.9.8.1-ose" buildConfigField "boolean", "customCerts", "true" buildConfigField "boolean", "customCertsUI", "true" } } buildTypes { debug { minifyEnabled false } release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } lintOptions { disable 'GoogleAppIndexingWarning' // we don't need Google indexing, thanks disable 'ImpliedQuantity', 'MissingQuantity' // quantities from Transifex may vary disable 'MissingTranslation', 'ExtraTranslation' // translations from Transifex are not always up to date disable "OnClick" // doesn't recognize Kotlin onClick methods disable 'Recycle' // doesn't understand Lombok's @Cleanup disable 'RtlEnabled' disable 'RtlHardcoded' disable 'Typos' } packagingOptions { exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/LICENSE' } defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } } dependencies { compile project(':cert4android') compile project(':dav4android') compile project(':ical4android') compile project(':vcard4android') compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" compile 'com.android.support:appcompat-v7:27.0.2' compile 'com.android.support:cardview-v7:27.0.2' compile 'com.android.support:design:27.0.2' compile 'com.android.support:preference-v14:27.0.2' compile 'com.github.yukuku:ambilwarna:2.0.1' compile 'com.squareup.okhttp3:logging-interceptor:3.9.1' compile 'commons-io:commons-io:2.6' compile 'dnsjava:dnsjava:2.1.8' compile 'org.apache.commons:commons-lang3:3.6' compile 'org.apache.commons:commons-collections4:4.1' // for tests //noinspection GradleDynamicVersion androidTestCompile('com.android.support.test:runner:+') { exclude group: 'com.android.support', module: 'support-annotations' } //noinspection GradleDynamicVersion androidTestCompile('com.android.support.test:rules:+') { exclude group: 'com.android.support', module: 'support-annotations' } androidTestCompile 'junit:junit:4.12' androidTestCompile 'com.squareup.okhttp3:mockwebserver:3.9.1' testCompile 'junit:junit:4.12' testCompile 'com.squareup.okhttp3:mockwebserver:3.9.1' } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3201876 fdroidserver-2.4.0/tests/source-files/catalog.test/0000755000175000017500000000000014770510164021056 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3201876 fdroidserver-2.4.0/tests/source-files/catalog.test/app/0000755000175000017500000000000014770510164021636 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/source-files/catalog.test/app/build.gradle0000644000175000017500000000011214766514130024111 0ustar00hanshansimplementation libs.bundles.firebase implementation libs.play.service.ads ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/source-files/catalog.test/build.gradle.kts0000644000175000017500000000022514766514130024136 0ustar00hanshansplugins { alias(libs.plugins.google.services) alias(libs.plugins.firebase.crashlytics) alias(projectLibs.plugins.firebase.crashlytics) } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3201876 fdroidserver-2.4.0/tests/source-files/catalog.test/buildSrc/0000755000175000017500000000000014770510164022625 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742400600.0 fdroidserver-2.4.0/tests/source-files/catalog.test/buildSrc/build.gradle.kts0000644000175000017500000000022514766566130025714 0ustar00hanshansplugins { alias(libs.plugins.google.services) alias(libs.plugins.firebase.crashlytics) alias(projectLibs.plugins.firebase.crashlytics) } ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742400600.0 fdroidserver-2.4.0/tests/source-files/catalog.test/buildSrc/settings.gradle.kts0000644000175000017500000000067214766566130026463 0ustar00hanshanspluginManagement { repositories { gradlePluginPortal() } } dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() } versionCatalogs { create("libs") { from(files("../gradle/libs.versions.toml")) } } } rootProject.name = "buildSrc" rootProject.buildFileName = "buildSrc.gradle.kts" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3201876 fdroidserver-2.4.0/tests/source-files/catalog.test/buildSrc2/0000755000175000017500000000000014770510164022707 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742400600.0 fdroidserver-2.4.0/tests/source-files/catalog.test/buildSrc2/build.gradle.kts0000644000175000017500000000022514766566130025776 0ustar00hanshansplugins { alias(libs.plugins.google.services) alias(libs.plugins.firebase.crashlytics) alias(projectLibs.plugins.firebase.crashlytics) } ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742400600.0 fdroidserver-2.4.0/tests/source-files/catalog.test/buildSrc2/settings.gradle.kts0000644000175000017500000000067214766566130026545 0ustar00hanshanspluginManagement { repositories { gradlePluginPortal() } } dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() } versionCatalogs { create("libs") { from(files("../gradle/libs.versions.toml")) } } } rootProject.name = "buildSrc" rootProject.buildFileName = "buildSrc.gradle.kts" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3201876 fdroidserver-2.4.0/tests/source-files/catalog.test/core/0000755000175000017500000000000014770510164022006 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742400600.0 fdroidserver-2.4.0/tests/source-files/catalog.test/core/build.gradle0000644000175000017500000000011214766566130024270 0ustar00hanshansimplementation libs.bundles.firebase implementation libs.play.service.ads ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3241875 fdroidserver-2.4.0/tests/source-files/catalog.test/gradle/0000755000175000017500000000000014770510164022314 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/source-files/catalog.test/gradle/libs.versions.toml0000644000175000017500000000115114766514130026011 0ustar00hanshans[versions] firebase = "1.1.1" gms = "1.2.1" [libraries] firebase-crash = { module = "com.google.firebase:firebase-crash", version.ref = "firebase" } firebase_core = { module = "com.google.firebase:firebase-core", version = "2.2.2" } "play.service.ads" = { module = "com.google.android.gms:play-services-ads", version.ref = "gms"} jacoco = "org.jacoco:org.jacoco.core:0.8.7" [plugins] google-services = { id = "com.google.gms.google-services", version.ref = "gms" } firebase-crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebase" } [bundles] firebase = ["firebase-crash", "firebase_core"] ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/source-files/catalog.test/libs.versions.toml0000644000175000017500000000107514766514130024560 0ustar00hanshans[versions] firebase = "1.1.1" gms = "1.2.1" [libraries] firebase-crash = { module = "com.google.firebase:firebase-crash", version.ref = "firebase" } firebase_core = { module = "com.google.firebase:firebase-core", version = "2.2.2" } "play.service.ads" = { module = "com.google.android.gms:play-services-ads", version.ref = "gms"} [plugins] google-services = { id = "com.google.gms.google-services", version.ref = "gms" } firebase-crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebase" } [bundles] firebase = ["firebase-crash", "firebase_core"] ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742400600.0 fdroidserver-2.4.0/tests/source-files/catalog.test/settings.gradle.kts0000644000175000017500000000052514766566130024711 0ustar00hanshansdependencyResolutionManagement { repositories { mavenCentral() } defaultLibrariesExtensionName = "projectLibs" versionCatalogs { create("libs") { from(files("./libs.versions.toml")) } create("anotherLibs") { from(files("$rootDir/libs.versions.toml")) } } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3241875 fdroidserver-2.4.0/tests/source-files/cn.wildfirechat.chat/0000755000175000017500000000000014770510164022450 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3241875 fdroidserver-2.4.0/tests/source-files/cn.wildfirechat.chat/avenginekit/0000755000175000017500000000000014770510164024754 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/cn.wildfirechat.chat/avenginekit/build.gradle0000644000175000017500000000012714717152070027232 0ustar00hanshansconfigurations.maybeCreate("default") artifacts.add("default", file('avenginekit.aar'))././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/cn.wildfirechat.chat/build.gradle0000644000175000017500000000171314717152070024730 0ustar00hanshans// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { google() jcenter() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:3.4.2' classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { google() jcenter() maven { url "http://developer.huawei.com/repo/" } maven { url 'https://jitpack.io' } maven { url 'https://dl.bintray.com/jenly/maven' } } configurations { all { resolutionStrategy { //force "android.arch.lifecycle:runtime:1.1.1" } } } } task clean(type: Delete) { delete rootProject.buildDir } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3241875 fdroidserver-2.4.0/tests/source-files/cn.wildfirechat.chat/chat/0000755000175000017500000000000014770510164023367 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/cn.wildfirechat.chat/chat/build.gradle0000644000175000017500000000772714717152070025662 0ustar00hanshansapply plugin: 'com.android.application' android { signingConfigs { wfc { keyAlias 'wfc' keyPassword 'wildfirechat' storeFile file('../wfc.keystore') storePassword 'wildfirechat' } } compileSdkVersion 28 aaptOptions.cruncherEnabled = false aaptOptions.useNewCruncher = false defaultConfig { applicationId "cn.wildfirechat.chat" minSdkVersion 16 targetSdkVersion 28 //当targetversion大于23时,需要使用fileprovider versionCode 23 versionName "0.6.9" multiDexEnabled true javaCompileOptions { annotationProcessorOptions { includeCompileClasspath true } } signingConfig signingConfigs.wfc // buildConfigField("String", "BuglyId", '"34490ba79f"') ndk { abiFilters "armeabi-v7a", 'x86', 'x86_64' // ,'armeabi', 'arm64-v8a', 'x86', 'x86_64' } } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.wfc } debug { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.wfc } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } lintOptions { abortOnError false } sourceSets { main { // wfc kit start jniLibs.srcDirs += ['libs', 'kit/libs'] res.srcDirs += ['kit/src/main/res', 'kit/src/main/res-av'] assets.srcDirs += ['kit/src/main/assets'] java.srcDirs += ['kit/src/main/java'] // wfc kit end } } productFlavors { } compileOptions { sourceCompatibility 1.8 targetCompatibility 1.8 } } dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation files('libs/TencentLocationSDK_v4.9.7.12_r247861_161205_1104.jar') implementation files('libs/TencentMapSDK_Raster_v_1.2.7_51ae0e7.jar') implementation files('libs/TencentSearch1.1.3.jar') implementation 'com.tencent.bugly:crashreport:2.8.6.0' implementation 'com.tencent.bugly:nativecrashreport:3.6.0.1' implementation 'com.lqr.adapter:library:1.0.2' implementation 'com.jaeger.statusbaruitl:library:1.3.5' implementation project(':push') // wfc kit start implementation fileTree(include: ['*.jar'], dir: 'kit/libs') implementation 'androidx.appcompat:appcompat:1.1.0-beta01' implementation 'com.google.android.material:material:1.1.0-alpha10' implementation 'cjt.library.wheel:camera:1.1.9' implementation 'com.kyleduo.switchbutton:library:1.4.4' implementation 'com.squareup.okhttp3:okhttp:3.11.0' implementation 'com.squareup.okio:okio:1.14.0' implementation 'com.jakewharton:butterknife:10.2.0' annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.0' implementation 'com.github.bumptech.glide:glide:4.8.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0' implementation 'com.github.chrisbanes:PhotoView:2.3.0' implementation 'org.webrtc:google-webrtc:1.0.21929' implementation 'com.afollestad.material-dialogs:core:0.9.6.0' implementation 'q.rorbin:badgeview:1.1.3' implementation 'com.google.code.gson:gson:2.8.5' // ViewModel and LiveData def lifecycle_version = '2.2.0-alpha05' implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version" implementation project(':client') implementation project(':avenginekit') implementation project(':emojilibrary') implementation project(':imagepicker') implementation 'com.king.zxing:zxing-lite:1.1.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0' // kit wfc end } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3241875 fdroidserver-2.4.0/tests/source-files/cn.wildfirechat.chat/client/0000755000175000017500000000000014770510164023726 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/cn.wildfirechat.chat/client/build.gradle0000644000175000017500000000244514717152070026211 0ustar00hanshansapply plugin: 'com.android.library' apply plugin: 'com.github.dcendents.android-maven' group = 'com.github.wildfirechat' android { compileSdkVersion 28 defaultConfig { minSdkVersion 16 targetSdkVersion 28 versionCode 1 versionName "1.0" // testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" ndk { // TODO: changes this for your application if needed moduleName = "mmnet" //abiFilter "armeabi" //去掉armeabi架构,armeabi-v7a可以兼容armeabi架构。 abiFilter "armeabi-v7a" abiFilter "arm64-v8a" abiFilter "x86" abiFilter "x86_64" } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } sourceSets { main { jniLibs.srcDirs = ['libs'] } } lintOptions { abortOnError false } compileOptions { targetCompatibility 1.8 sourceCompatibility 1.8 } } dependencies { api project(':mars-core-release') def lifecycle_version = '2.0.0-beta01' implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version" } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2121863 fdroidserver-2.4.0/tests/source-files/cn.wildfirechat.chat/client/src/0000755000175000017500000000000014770510164024515 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3241875 fdroidserver-2.4.0/tests/source-files/cn.wildfirechat.chat/client/src/main/0000755000175000017500000000000014770510164025441 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/cn.wildfirechat.chat/client/src/main/AndroidManifest.xml0000644000175000017500000000242714717152070031236 0ustar00hanshans ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3241875 fdroidserver-2.4.0/tests/source-files/cn.wildfirechat.chat/emojilibrary/0000755000175000017500000000000014770510164025140 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/cn.wildfirechat.chat/emojilibrary/build.gradle0000755000175000017500000000125514717152070027424 0ustar00hanshansapply plugin: 'com.android.library' android { compileSdkVersion 28 defaultConfig { minSdkVersion 16 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } android { lintOptions { abortOnError false } } } dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.appcompat:appcompat:1.0.0-beta01' }././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3241875 fdroidserver-2.4.0/tests/source-files/cn.wildfirechat.chat/gradle/0000755000175000017500000000000014770510164023706 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/cn.wildfirechat.chat/gradle/build_libraries.gradle0000644000175000017500000000216214717152070030221 0ustar00hanshansdef checkExecResult(execResult) { if (execResult) { if (execResult.getExitValue() != 0) { throw new GradleException('Non-zero exit value: ' + execResult.getExitValue()) } } else { throw new GradleException('Returned a null execResult object') } } task buildLibrariesForAndroid(type: Exec) { workingDir '../' def sdkDir = System.env.ANDROID_HOME def ndkDir = System.env.ANDROID_NDK_HOME if (rootProject.file("local.properties").exists()) { Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) sdkDir = properties.getProperty('sdk.dir') ndkDir = properties.getProperty('ndk.dir') } def path = System.env.PATH def envMap = [ 'ANDROID_HOME' : sdkDir, 'ANDROID_NDK_HOME': ndkDir, '_ARCH_' : 'armeabi', 'PATH' : ndkDir, ] environment envMap print envMap commandLine 'python', 'build_android.py', '2', 'armeabi' doLast { checkExecResult(execResult) } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3241875 fdroidserver-2.4.0/tests/source-files/cn.wildfirechat.chat/imagepicker/0000755000175000017500000000000014770510164024730 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/cn.wildfirechat.chat/imagepicker/build.gradle0000755000175000017500000000131414717152070027210 0ustar00hanshansapply plugin: 'com.android.library' android { compileSdkVersion 28 defaultConfig { minSdkVersion 16 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } lintOptions { abortOnError false } } dependencies { implementation 'androidx.appcompat:appcompat:1.0.0-beta01' implementation 'com.github.chrisbanes.photoview:library:1.2.4' implementation 'com.github.bumptech.glide:glide:4.8.0' } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3241875 fdroidserver-2.4.0/tests/source-files/cn.wildfirechat.chat/mars-core-release/0000755000175000017500000000000014770510164025756 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/cn.wildfirechat.chat/mars-core-release/build.gradle0000644000175000017500000000013514717152070030233 0ustar00hanshansconfigurations.maybeCreate("default") artifacts.add("default", file('mars-core-release.aar'))././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3241875 fdroidserver-2.4.0/tests/source-files/cn.wildfirechat.chat/push/0000755000175000017500000000000014770510164023427 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/cn.wildfirechat.chat/push/build.gradle0000644000175000017500000000266214717152070025713 0ustar00hanshansapply plugin: 'com.android.library' android { compileSdkVersion 28 defaultConfig { minSdkVersion 16 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" manifestPlaceholders = [ MI_APP_ID : "2882303761517722456", MI_APP_KEY : "5731772292456", HMS_APP_ID : "100221325", MEIZU_APP_ID : "113616", MEIZU_APP_KEY: "fcd886f51c144b45b87a67a28e2934d1", VIVO_APP_ID : "12918", VIVO_APP_KEY : "c42feb05-de6c-427d-af55-4f902d9e0a75" ] } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility 1.8 targetCompatibility 1.8 } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.huawei.android.hms:push:2.5.3.305' implementation 'com.huawei.android.hms:base:2.5.3.305' implementation 'androidx.appcompat:appcompat:1.0.0-beta01' implementation project(':client') implementation 'com.meizu.flyme.internet:push-internal:3.4.2@aar' def lifecycle_version = '2.2.0-alpha05' implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version" } ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/cn.wildfirechat.chat/settings.gradle0000644000175000017500000000023314717152070025465 0ustar00hanshansinclude ':client', ':push', ':chat', ':mars-core-release', ':emojilibrary', ':imagepicker', ':avenginekit' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3241875 fdroidserver-2.4.0/tests/source-files/com.anpmech.launcher/0000755000175000017500000000000014770510164022456 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3241875 fdroidserver-2.4.0/tests/source-files/com.anpmech.launcher/app/0000755000175000017500000000000014770510164023236 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.anpmech.launcher/app/build.gradle0000644000175000017500000000432214717152070025515 0ustar00hanshans/* * Copyright 2015-2017 Hayai Software * Copyright 2018 The KeikaiLauncher Project * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND * either express or implied. See the License for the specific language governing permissions and * limitations under the License. */ plugins { id 'com.android.application' id 'pl.allegro.tech.build.axion-release' version '1.8.1' } scmVersion { tag { prefix = '' } } /** * Takes version {@code major.minor.patch[-suffix]} and returns numeric versionCode based on it * Example: {@code 1.2.3-SNAPSHOT} will return {@code 1002003} */ static int versionCode(String versionName) { def matcher = (versionName =~ /(\d+)\.(\d+)\.(\d+).*/) return matcher.matches() ? matcher.collect { version, major, minor, patch -> major.toInteger() * 10000 + minor.toInteger() * 100 + patch.toInteger() }.head() : -1 } def androidVersion = [ name: scmVersion.version, code: versionCode(scmVersion.version), ] android { compileSdkVersion 28 defaultConfig { applicationId 'com.anpmech.launcher' minSdkVersion 15 targetSdkVersion 28 versionName androidVersion.name versionCode androidVersion.code } lintOptions { abortOnError false } buildTypes { all { buildConfigField("String", "GITHUB_USER", "\"KeikaiLauncher\"") buildConfigField("String", "GITHUB_PROJECT", "\"KeikaiLauncher\"") } release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.txt' } debug { versionNameSuffix "-debug" } } dependencies { implementation 'com.android.support:support-annotations:28.0.0' } } dependencies { } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2121863 fdroidserver-2.4.0/tests/source-files/com.anpmech.launcher/app/src/0000755000175000017500000000000014770510164024025 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3241875 fdroidserver-2.4.0/tests/source-files/com.anpmech.launcher/app/src/main/0000755000175000017500000000000014770510164024751 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.anpmech.launcher/app/src/main/AndroidManifest.xml0000644000175000017500000000533314717152070030545 0ustar00hanshans ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.anpmech.launcher/build.gradle0000644000175000017500000000226314717152070024737 0ustar00hanshans/* * Copyright 2015-2017 Hayai Software * Copyright 2018 The KeikaiLauncher Project * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND * either express or implied. See the License for the specific language governing permissions and * limitations under the License. */ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() google() } dependencies { classpath 'com.android.tools.build:gradle:3.2.1' } } allprojects { repositories { jcenter() google() } } buildscript { repositories { mavenCentral() } dependencies { classpath 'org.owasp:dependency-check-gradle:5.2.4' } } apply plugin: 'org.owasp.dependencycheck' dependencyCheck { format='JSON' } ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.anpmech.launcher/settings.gradle0000644000175000017500000000121514717152070025474 0ustar00hanshans/* * Copyright 2015-2017 Hayai Software * Copyright 2018 The KeikaiLauncher Project * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND * either express or implied. See the License for the specific language governing permissions and * limitations under the License. */ include ':app' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3241875 fdroidserver-2.4.0/tests/source-files/com.github.jameshnsears.quoteunquote/0000755000175000017500000000000014770510164025764 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368094.0 fdroidserver-2.4.0/tests/source-files/com.github.jameshnsears.quoteunquote/build.gradle0000644000175000017500000001721114743421036030244 0ustar00hanshansapply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' apply plugin: 'kotlin-android' apply from: '../jacoco.gradle' apply from: '../ktlint.gradle' apply from: '../detekt.gradle' apply from: '../checkstyle.gradle' apply from: '../sonarcube.gradle' def localPropertiesFile = rootProject.file("local.properties") def localProperties = new Properties() if (!localPropertiesFile.exists()) { localProperties.setProperty("RELEASE_STORE_PASSWORD", "") localProperties.setProperty("RELEASE_KEY_PASSWORD", "") localProperties.setProperty("RELEASE_KEY_ALIAS", "") localProperties.setProperty("RELEASE_STORE_FILE", "keystore.jks") Writer writer = new FileWriter(localPropertiesFile, false) localProperties.store(writer, "empty, as creating the file is done manually via gpg") writer.close() file(project(':app').projectDir.path + "/keystore.jks").text = "" } localProperties.load(new FileInputStream(localPropertiesFile)) android { compileSdkVersion 30 // compileSdkVersion "android-S" signingConfigs { googleplay { keyAlias localProperties['RELEASE_KEY_ALIAS'] keyPassword localProperties['RELEASE_KEY_PASSWORD'] storeFile file(localProperties['RELEASE_STORE_FILE']) storePassword localProperties['RELEASE_STORE_PASSWORD'] } } defaultConfig { minSdkVersion 24 targetSdkVersion 30 // minSdkVersion "S" // targetSdkVersion "S" applicationId "com.github.jameshnsears.quoteunquote" versionCode 73 versionName "2.5.2" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunnerArguments clearPackageData: 'true' javaCompileOptions { annotationProcessorOptions { arguments += ["room.schemaLocation": "$projectDir/schemas".toString()] } } } packagingOptions { exclude "**/module-info.class" exclude 'LICENSE' exclude 'README.md' } lintOptions { abortOnError true warningsAsErrors false checkAllWarnings = true xmlReport false htmlReport true } buildTypes { def gitHash = { -> def stdout = new ByteArrayOutputStream() exec { commandLine 'git', 'rev-parse', '--short=8', 'HEAD' standardOutput = stdout } return stdout.toString().trim() } release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' buildConfigField("String", "GIT_HASH", "\"$gitHash\"") buildConfigField("String", "DATABASE_QUOTATIONS", "\"quotations.db.prod\"") } debug { testCoverageEnabled true buildConfigField("String", "GIT_HASH", "\"$gitHash\"") buildConfigField("String", "DATABASE_QUOTATIONS", "\"quotations.db.dev\"") } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = JavaVersion.VERSION_1_8.toString() } flavorDimensions 'Version' productFlavors { 'googleplay' { dimension 'Version' versionNameSuffix "-googleplay" signingConfig signingConfigs.googleplay } 'googleplayS' { dimension 'Version' versionNameSuffix "-googleplay-S" signingConfig signingConfigs.googleplay } 'fdroid' { dimension 'Version' versionNameSuffix "-fdroid" isDefault true } 'fdroidS' { dimension 'Version' versionNameSuffix "-fdroid-S" } } sourceSets { androidTest { assets.srcDirs += files("$projectDir/schemas".toString()) } fdroid { assets.srcDirs = ['src/main/assets'] java.srcDirs = ['src/main/java', 'src/fdroid/java'] } fdroidS { assets.srcDirs = ['src/main/assets'] java.srcDirs = ['src/main/java', 'src/fdroid/java'] } googleplay { assets.srcDirs = ['src/main/assets'] java.srcDirs = ['src/main/java'] } googleplayS { assets.srcDirs = ['src/main/assets'] java.srcDirs = ['src/main/java'] } } testOptions { // will make tests run very slowly on the emulator/device + affects coverage # // execution 'ANDROIDX_TEST_ORCHESTRATOR' animationsDisabled true unitTests { includeAndroidResources = true returnDefaultValues = true all { maxHeapSize = "1024m" jacoco { includeNoLocationClasses = true excludes = ['jdk.internal.*'] } } } } buildFeatures { viewBinding = true } } dependencies { androidTestImplementation "androidx.arch.core:core-testing:2.1.0" androidTestImplementation 'androidx.room:room-testing:2.3.0' androidTestImplementation 'androidx.test:core:1.4.0-beta01' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test:rules:1.3.0' androidTestImplementation 'androidx.test:runner:1.3.0' androidTestImplementation 'io.mockk:mockk-android:1.11.0' annotationProcessor 'androidx.room:room-compiler:2.3.0' debugImplementation 'androidx.fragment:fragment-testing:1.3.4' debugImplementation 'androidx.test:core:1.4.0-beta01' debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.7' implementation 'androidx.activity:activity:1.2.3' implementation 'androidx.fragment:fragment:1.3.4' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation 'androidx.core:core-ktx:1.5.0' fdroidSImplementation 'androidx.core:core-ktx:1.6.0-beta02' googleplaySImplementation 'androidx.core:core-ktx:1.6.0-beta02' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.lifecycle:lifecycle-common-java8:2.3.1' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1' implementation 'androidx.multidex:multidex:2.0.1' implementation 'androidx.room:room-guava:2.3.0' implementation 'androidx.room:room-runtime:2.3.0' implementation 'androidx.room:room-rxjava2:2.3.0' implementation 'com.google.android.material:material:1.3.0' implementation 'com.jakewharton.rxbinding2:rxbinding:2.2.0' implementation 'com.jakewharton.timber:timber:4.7.1' implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' implementation 'io.reactivex.rxjava2:rxjava:2.2.21' implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.5.10' implementation project(path: ':cloudLib') implementation project(path: ':utilsLib') testImplementation 'androidx.arch.core:core-testing:2.1.0' testImplementation 'androidx.room:room-testing:2.3.0' testImplementation 'androidx.test:core-ktx:1.3.0' testImplementation 'androidx.test.ext:junit:1.1.2' testImplementation 'androidx.test:rules:1.3.0' testImplementation 'com.google.guava:guava:30.1.1-jre' testImplementation 'io.mockk:mockk:1.11.0' testImplementation 'junit:junit:4.13.2' testImplementation 'org.robolectric:robolectric:4.5.1' } repositories { mavenCentral() } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.github.shadowsocks/0000755000175000017500000000000014770510164023054 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3241875 fdroidserver-2.4.0/tests/source-files/com.github.shadowsocks/core/0000755000175000017500000000000014770510164024004 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368094.0 fdroidserver-2.4.0/tests/source-files/com.github.shadowsocks/core/build.gradle.kts0000644000175000017500000000630714743421036027070 0ustar00hanshansimport com.android.build.gradle.internal.tasks.factory.dependsOn plugins { id("com.android.library") id("org.mozilla.rust-android-gradle.rust-android") kotlin("android") kotlin("kapt") id("kotlin-parcelize") } setupCore() android { defaultConfig { consumerProguardFiles("proguard-rules.pro") externalNativeBuild.ndkBuild { abiFilters("armeabi-v7a", "arm64-v8a", "x86", "x86_64") arguments("-j${Runtime.getRuntime().availableProcessors()}") } kapt.arguments { arg("room.incremental", true) arg("room.schemaLocation", "$projectDir/schemas") } } externalNativeBuild.ndkBuild.path("src/main/jni/Android.mk") sourceSets.getByName("androidTest") { assets.setSrcDirs(assets.srcDirs + files("$projectDir/schemas")) } } cargo { module = "src/main/rust/shadowsocks-rust" libname = "sslocal" targets = listOf("arm", "arm64", "x86", "x86_64") profile = findProperty("CARGO_PROFILE")?.toString() ?: currentFlavor extraCargoBuildArguments = listOf("--bin", libname!!) featureSpec.noDefaultBut(arrayOf( "stream-cipher", "aead-cipher-extra", "logging", "local-flow-stat", "local-dns")) exec = { spec, toolchain -> spec.environment("RUST_ANDROID_GRADLE_LINKER_WRAPPER_PY", "$projectDir/$module/../linker-wrapper.py") spec.environment("RUST_ANDROID_GRADLE_TARGET", "target/${toolchain.target}/$profile/lib$libname.so") } } tasks.whenTaskAdded { when (name) { "mergeDebugJniLibFolders", "mergeReleaseJniLibFolders" -> dependsOn("cargoBuild") } } tasks.register("cargoClean") { executable("cargo") // cargo.cargoCommand args("clean") workingDir("$projectDir/${cargo.module}") } tasks.clean.dependsOn("cargoClean") dependencies { val coroutinesVersion = "1.5.2" val roomVersion = "2.3.0" val workVersion = "2.7.0-beta01" api(project(":plugin")) api("androidx.core:core-ktx:1.6.0") // https://android-developers.googleblog.com/2019/07/android-q-beta-5-update.html api("androidx.drawerlayout:drawerlayout:1.1.1") api("androidx.fragment:fragment-ktx:1.3.6") api("com.google.android.material:material:1.4.0") api("androidx.lifecycle:lifecycle-livedata-core-ktx:$lifecycleVersion") api("androidx.preference:preference:1.1.1") api("androidx.room:room-runtime:$roomVersion") api("androidx.work:work-multiprocess:$workVersion") api("androidx.work:work-runtime-ktx:$workVersion") api("com.google.android.gms:play-services-oss-licenses:17.0.0") api("com.google.code.gson:gson:2.8.8") api("com.google.firebase:firebase-analytics-ktx:19.0.1") api("com.google.firebase:firebase-crashlytics:18.2.1") api("com.jakewharton.timber:timber:5.0.1") api("dnsjava:dnsjava:3.4.1") api("org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion") api("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:$coroutinesVersion") kapt("androidx.room:room-compiler:$roomVersion") androidTestImplementation("androidx.room:room-testing:$roomVersion") androidTestImplementation("androidx.test.ext:junit-ktx:1.1.3") } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3241875 fdroidserver-2.4.0/tests/source-files/com.github.shadowsocks/mobile/0000755000175000017500000000000014770510164024323 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368094.0 fdroidserver-2.4.0/tests/source-files/com.github.shadowsocks/mobile/build.gradle.kts0000644000175000017500000000211514743421036027400 0ustar00hanshansplugins { id("com.android.application") id("com.google.android.gms.oss-licenses-plugin") id("com.google.gms.google-services") id("com.google.firebase.crashlytics") kotlin("android") id("kotlin-parcelize") } setupApp() android.defaultConfig.applicationId = "com.github.shadowsocks" dependencies { val cameraxVersion = "1.0.1" implementation("androidx.browser:browser:1.3.0") implementation("androidx.camera:camera-camera2:$cameraxVersion") implementation("androidx.camera:camera-lifecycle:$cameraxVersion") implementation("androidx.camera:camera-view:1.0.0-alpha28") implementation("androidx.constraintlayout:constraintlayout:2.1.0") implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycleVersion") implementation("com.google.mlkit:barcode-scanning:17.0.0") implementation("com.google.zxing:core:3.4.1") implementation("com.takisoft.preferencex:preferencex-simplemenu:1.1.0") implementation("com.twofortyfouram:android-plugin-api-for-locale:1.0.4") implementation("me.zhanghai.android.fastscroll:library:1.1.7") } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3281875 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/0000755000175000017500000000000014770510164023521 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/build.gradle0000644000175000017500000000054614717152070026004 0ustar00hanshans// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.2' classpath 'com.google.gms:google-services:3.0.0' } } allprojects { repositories { jcenter() } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/gradle/0000755000175000017500000000000014770510164024757 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3281875 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/gradle/wrapper/0000755000175000017500000000000014770510164026437 5ustar00hanshans././@PaxHeader0000000000000000000000000000021000000000000010206 xustar00114 path=fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/gradle/wrapper/gradle-wrapper.properties 22 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/gradle/wrapper/gradle-wrapper.proper0000644000175000017500000000034614717152070032606 0ustar00hanshans#Wed Mar 15 14:07:53 EET 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3281875 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/localeapi/0000755000175000017500000000000014770510164025452 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/localeapi/build.gradle0000644000175000017500000000066114717152070027733 0ustar00hanshansapply plugin: 'com.android.library' android { compileSdkVersion 25 buildToolsVersion "25.0.3" defaultConfig { minSdkVersion 9 targetSdkVersion 17 } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } } dependencies { compile 'com.android.support:support-v4:25.1.0' } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/localeapi/src/0000755000175000017500000000000014770510164026241 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3281875 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/localeapi/src/main/0000755000175000017500000000000014770510164027165 5ustar00hanshans././@PaxHeader0000000000000000000000000000020600000000000010213 xustar00112 path=fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/localeapi/src/main/AndroidManifest.xml 22 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/localeapi/src/main/AndroidManifest.x0000644000175000017500000000042114717152070032421 0ustar00hanshans ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3281875 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/oneSheeld/0000755000175000017500000000000014770510164025427 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/oneSheeld/build.gradle0000644000175000017500000000776514717152070027724 0ustar00hanshansbuildscript { repositories { jcenter() maven { url 'https://maven.fabric.io/public' } } dependencies { classpath 'io.fabric.tools:gradle:1.+' } } apply plugin: 'com.android.application' apply plugin: 'io.fabric' repositories { jcenter() maven { url 'https://maven.fabric.io/public' } maven { url "https://jitpack.io" } } android { compileSdkVersion 25 buildToolsVersion "25.0.3" defaultConfig { applicationId "com.integreight.onesheeld" minSdkVersion 9 targetSdkVersion 25 versionCode 170521 versionName "1.9.0" archivesBaseName = "1Sheeld.v$versionName.$versionCode" buildConfigField "long", "TIMESTAMP", System.currentTimeMillis() + "L" } buildTypes.all { ext.enableCrashlytics = isCrashlyticsPropertiesAvailable() } buildTypes { debug { versionNameSuffix getWorkingBranchSuffix() minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } release { minifyEnabled true debuggable false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } packagingOptions { exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' } lintOptions { abortOnError false } useLibrary 'org.apache.http.legacy' } dependencies { compile project(':localeapi') compile project(':pullToRefreshlibrary') compile project(':quickReturnHeader') compile project(':pagerIndicator') compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:support-v4:25.3.1' compile 'com.facebook.android:facebook-android-sdk:4.5.0' compile 'com.google.android.gms:play-services-analytics:10.0.1' compile 'com.google.android.gms:play-services-location:10.0.1' compile 'com.google.android.gms:play-services-auth:10.0.1' compile 'com.google.android.gms:play-services-vision:10.0.1' compile 'com.loopj.android:android-async-http:1.4.9' compile 'com.snappydb:snappydb-lib:0.5.0' compile 'com.esotericsoftware.kryo:kryo:2.24.0' compile 'com.github.hotchemi:android-rate:0.5.0' compile('com.crashlytics.sdk.android:crashlytics:2.6.8@aar') { transitive = true; } compile('com.google.android.gms:play-services-identity:10.0.1') { transitive = true; } compile('com.google.api-client:google-api-client-android:1.22.0') { exclude group: 'org.apache.httpcomponents' } compile('com.google.apis:google-api-services-gmail:v1-rev48-1.22.0') { exclude group: 'org.apache.httpcomponents' } compile 'org.twitter4j:twitter4j-core:4.0.4' compile 'org.twitter4j:twitter4j-async:4.0.4' compile 'org.twitter4j:twitter4j-stream:4.0.4' compile 'cz.msebera.android:httpclient:4.4.1.1' compile 'net.sf.supercsv:super-csv:2.4.0' compile 'com.github.amlcurran.showcaseview:library:5.4.3' compile 'com.github.emanzanoaxa:RippleEffect:52ea2a0ab6' compile 'com.drewnoakes:metadata-extractor:2.8.1' compile 'com.integreight.onesheeld:sdk:2.2.0' compile 'com.google.firebase:firebase-core:10.0.1' compile 'com.google.firebase:firebase-messaging:10.0.1' } def isCrashlyticsPropertiesAvailable() { return new File("./oneSheeld/fabric.properties").exists() } def getWorkingBranchSuffix() { def workingBranchSuffix = "" try { def workingBranch = "git --git-dir=${rootDir}/.git --work-tree=${rootDir} rev-parse --abbrev-ref HEAD".execute().text.trim() workingBranchSuffix = (workingBranch != "") ? " - branch:" + workingBranch : "" } catch (all) { } return workingBranchSuffix } def isGoogleServicesFileAvailable() { return new File("./oneSheeld/google-services.json").exists() } if (isGoogleServicesFileAvailable()) { apply plugin: 'com.google.gms.google-services' }././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/oneSheeld/src/0000755000175000017500000000000014770510164026216 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3281875 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/oneSheeld/src/main/0000755000175000017500000000000014770510164027142 5ustar00hanshans././@PaxHeader0000000000000000000000000000020600000000000010213 xustar00112 path=fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/oneSheeld/src/main/AndroidManifest.xml 22 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/oneSheeld/src/main/AndroidManifest.x0000644000175000017500000003031314717152070032401 0ustar00hanshans ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3281875 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/pagerIndicator/0000755000175000017500000000000014770510164026454 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/pagerIndicator/build.gradle0000644000175000017500000000066014717152070030734 0ustar00hanshansapply plugin: 'com.android.library' android { compileSdkVersion 25 buildToolsVersion "25.0.3" defaultConfig { minSdkVersion 9 targetSdkVersion 9 } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } } dependencies { compile 'com.android.support:support-v4:25.1.0' } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/pagerIndicator/src/0000755000175000017500000000000014770510164027243 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3281875 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/pagerIndicator/src/main/0000755000175000017500000000000014770510164030167 5ustar00hanshans././@PaxHeader0000000000000000000000000000021300000000000010211 xustar00117 path=fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/pagerIndicator/src/main/AndroidManifest.xml 22 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/pagerIndicator/src/main/AndroidManif0000644000175000017500000000041014717152070032437 0ustar00hanshans ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3281875 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/pullToRefreshlibrary/0000755000175000017500000000000014770510164027704 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/pullToRefreshlibrary/build.gradle0000644000175000017500000000057214717152070032166 0ustar00hanshansapply plugin: 'com.android.library' android { compileSdkVersion 25 buildToolsVersion "25.0.3" defaultConfig { minSdkVersion 9 targetSdkVersion 9 } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } } dependencies { }././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/pullToRefreshlibrary/src/0000755000175000017500000000000014770510164030473 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3281875 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/pullToRefreshlibrary/src/main/0000755000175000017500000000000014770510164031417 5ustar00hanshans././@PaxHeader0000000000000000000000000000022100000000000010210 xustar00123 path=fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/pullToRefreshlibrary/src/main/AndroidManifest.xml 22 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/pullToRefreshlibrary/src/main/Androi0000644000175000017500000000045314717152070032557 0ustar00hanshans ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3281875 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/quickReturnHeader/0000755000175000017500000000000014770510164027146 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/quickReturnHeader/build.gradle0000644000175000017500000000066114717152070031427 0ustar00hanshansapply plugin: 'com.android.library' android { compileSdkVersion 25 buildToolsVersion "25.0.3" defaultConfig { minSdkVersion 9 targetSdkVersion 17 } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } } dependencies { compile 'com.android.support:support-v4:25.1.0' } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/quickReturnHeader/src/0000755000175000017500000000000014770510164027735 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3281875 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/quickReturnHeader/src/main/0000755000175000017500000000000014770510164030661 5ustar00hanshans././@PaxHeader0000000000000000000000000000021600000000000010214 xustar00120 path=fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/quickReturnHeader/src/main/AndroidManifest.xml 22 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/quickReturnHeader/src/main/AndroidMa0000644000175000017500000000050214717152070032436 0ustar00hanshans ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.integreight.onesheeld/settings.gradle0000644000175000017500000000020114717152070026531 0ustar00hanshansinclude ':pagerIndicator' include ':pullToRefreshlibrary' include ':quickReturnHeader' include ':localeapi' include ':oneSheeld' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3281875 fdroidserver-2.4.0/tests/source-files/com.jens.automation2/0000755000175000017500000000000014770510164022443 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3281875 fdroidserver-2.4.0/tests/source-files/com.jens.automation2/app/0000755000175000017500000000000014770510164023223 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368094.0 fdroidserver-2.4.0/tests/source-files/com.jens.automation2/app/build.gradle0000644000175000017500000000460714743421036025510 0ustar00hanshansplugins { id 'com.android.application' } android { compileSdkVersion 29 defaultConfig { applicationId "com.jens.automation2" minSdkVersion 16 compileSdkVersion 29 buildToolsVersion '29.0.2' useLibrary 'org.apache.http.legacy' versionCode 96 versionName "1.6.21" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } lintOptions { checkReleaseBuilds false abortOnError false } flavorDimensions "version" productFlavors { googlePlayFlavor { dimension "version" // applicationIdSuffix ".googlePlay" versionNameSuffix "-googlePlay" targetSdkVersion 29 } fdroidFlavor { dimension "version" // applicationIdSuffix ".fdroid" versionNameSuffix "-fdroid" targetSdkVersion 28 } apkFlavor { dimension "version" // applicationIdSuffix ".apk" versionNameSuffix "-apk" targetSdkVersion 28 } } } dependencies { googlePlayFlavorImplementation 'com.google.firebase:firebase-appindexing:19.2.0' googlePlayFlavorImplementation 'com.google.android.gms:play-services-location:17.1.0' apkFlavorImplementation 'com.google.firebase:firebase-appindexing:19.2.0' apkFlavorImplementation 'com.google.android.gms:play-services-location:17.1.0' implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.3.0' testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' }././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368094.0 fdroidserver-2.4.0/tests/source-files/com.jens.automation2/build.gradle0000644000175000017500000000416614743421036024730 0ustar00hanshansplugins { id 'com.android.application' } android { compileSdkVersion 29 defaultConfig { applicationId "com.jens.automation2" minSdkVersion 16 compileSdkVersion 29 buildToolsVersion '29.0.2' useLibrary 'org.apache.http.legacy' versionCode 105 versionName "1.6.34" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } lintOptions { checkReleaseBuilds false abortOnError false } flavorDimensions "version" productFlavors { googlePlayFlavor { dimension "version" // applicationIdSuffix ".googlePlay" versionNameSuffix "-googlePlay" targetSdkVersion 29 } fdroidFlavor { dimension "version" // applicationIdSuffix ".fdroid" versionNameSuffix "-fdroid" targetSdkVersion 28 } apkFlavor { dimension "version" // applicationIdSuffix ".apk" versionNameSuffix "-apk" targetSdkVersion 28 } } } dependencies { implementation 'com.linkedin.dexmaker:dexmaker:2.25.0' implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.3.0' testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3281875 fdroidserver-2.4.0/tests/source-files/com.kunzisoft.testcase/0000755000175000017500000000000014770510164023111 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368094.0 fdroidserver-2.4.0/tests/source-files/com.kunzisoft.testcase/build.gradle0000644000175000017500000000575514743421036025403 0ustar00hanshansapply plugin: 'com.android.application' android { compileSdkVersion 27 defaultConfig { applicationId "com.kunzisoft.fdroidtest.applicationidsuffix" minSdkVersion 14 targetSdkVersion 27 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled = false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } dexOptions { } flavorDimensions "tier" productFlavors { libre { applicationIdSuffix = ".libre" versionNameSuffix "-libre" buildConfigField "boolean", "FULL_VERSION", "true" buildConfigField "boolean", "CLOSED_STORE", "false" // ApplicationId : com.kunzisoft.fdroidtest.applicationidsuffix.libre // Version code : 1 // Version name : 1.0-libre } pro { applicationIdSuffix = ".pro" versionCode 20180430 versionName "20180430-pro" buildConfigField "boolean", "FULL_VERSION", "true" buildConfigField "boolean", "CLOSED_STORE", "true" // ApplicationId : com.kunzisoft.fdroidtest.applicationidsuffix.pro // Version code : 20180430 // Version name : 20180430-pro } free { versionNameSuffix "-free" buildConfigField "boolean", "FULL_VERSION", "false" buildConfigField "boolean", "CLOSED_STORE", "true" // ApplicationId : com.kunzisoft.fdroidtest.applicationidsuffix // Version code : 1 // Version name : 1.0-free } underscore { applicationIdSuffix = ".underscore" versionCode 2018_04_30 versionName "20180430-underscore" buildConfigField "boolean", "FULL_VERSION", "true" buildConfigField "boolean", "CLOSED_STORE", "true" // ApplicationId : com.kunzisoft.fdroidtest.applicationidsuffix.underscore // Version code : 2018_04_30 // Version name : 20180430-underscore } underscore_first { applicationIdSuffix = ".underscore_first" versionCode _04_30 buildConfigField "boolean", "FULL_VERSION", "true" buildConfigField "boolean", "CLOSED_STORE", "true" // ApplicationId : com.kunzisoft.fdroidtest.applicationidsuffix.underscore_first // Version code : 1 // Version name : 1.0 } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support.constraint:constraint-layout:1.1.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3281875 fdroidserver-2.4.0/tests/source-files/com.lolo.io.onelist/0000755000175000017500000000000014770510164022272 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3281875 fdroidserver-2.4.0/tests/source-files/com.lolo.io.onelist/app/0000755000175000017500000000000014770510164023052 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/source-files/com.lolo.io.onelist/app/build.gradle.kts0000644000175000017500000000574514766514130026146 0ustar00hanshansimport java.io.FileInputStream import java.util.Properties plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) alias(libs.plugins.google.services) alias(libs.plugins.firebase.crashlytics) alias(libs.plugins.ksp) } android { namespace = "com.lolo.io.onelist" val versionPropsFile = file("../version.properties") var versionCodeCI: Int? = null if (versionPropsFile.canRead()) { val versionProps = Properties() versionProps.load(FileInputStream(versionPropsFile)) val v = versionProps["VERSION_CODE"] versionCodeCI = (versionProps["VERSION_CODE"] as String).toInt() } defaultConfig { multiDexEnabled = true applicationId = "com.lolo.io.onelist" compileSdk = 34 minSdk = 23 targetSdk = 34 versionCode = versionCodeCI ?: 19 versionName = "1.4.2" vectorDrawables.useSupportLibrary = true } androidResources { generateLocaleConfig = true } buildFeatures { viewBinding = true buildConfig = true } ksp { arg("room.schemaLocation", "$projectDir/schemas") } buildTypes { getByName("debug") { applicationIdSuffix = ".debug" versionNameSuffix = "-DEBUG" resValue("string", "app_name", "1ListDev") } getByName("release") { isMinifyEnabled = true isShrinkResources = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) resValue("string", "app_name", "1List") } } compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } } repositories { google() mavenCentral() maven { url = uri("https://jitpack.io") } } dependencies { // android implementation(libs.androidx.core.splashscreen) implementation(libs.androidx.preference.ktx) implementation(libs.androidx.lifecycle.extensions) implementation(libs.androidx.legacy.support.v4) implementation(libs.androidx.appcompat) // android - design implementation(libs.constraint.layout) implementation(libs.androidx.recyclerview) implementation(libs.flexbox) implementation(libs.material) implementation(libs.androidx.swiperefreshlayout) // kotlin implementation(libs.kotlinx.coroutines.core) implementation(libs.kotlin.stdlib.jdk7) // firebase implementation(libs.firebase.crashlytics) // koin di implementation(libs.koin.android) implementation(libs.koin.androidx.navigation) // room implementation(libs.androidx.room.runtime) implementation(libs.androidx.room.ktx) ksp(libs.androidx.room.compiler) // json implementation(libs.gson) // other libs implementation(libs.whatsnew) implementation(libs.storage) implementation(libs.advrecyclerview) } ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/source-files/com.lolo.io.onelist/build.gradle.kts0000644000175000017500000000054514766514130025357 0ustar00hanshansplugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.kotlin.android) apply false alias(libs.plugins.google.services) apply false alias(libs.plugins.firebase.crashlytics) apply false alias(libs.plugins.ksp) apply false } tasks.register("clean", Delete::class) { delete(rootProject.layout.buildDirectory) }././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3281875 fdroidserver-2.4.0/tests/source-files/com.lolo.io.onelist/gradle/0000755000175000017500000000000014770510164023530 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/source-files/com.lolo.io.onelist/gradle/libs.versions.toml0000644000175000017500000000640614766514130027235 0ustar00hanshans[versions] advrecyclerview = "1.0.0" appcompat = "1.6.1" constraint-layout = "2.0.4" crashlytics = "18.6.2" firebase-crashlytics-gradle-plugin = "2.9.9" flexbox = "3.0.0" gson = "2.5.6" kotlin = "1.9.20" kotlin-coroutines = "1.6.4" legacy-support-v4 = "1.0.0" lifecycle-extensions = "2.2.0" material = "1.11.0" preference-ktx = "1.2.1" recyclerview = "1.3.2" splashscreen ="1.0.1" koin ="3.5.0" room="2.6.1" storage = "1.5.5" swiperefreshlayout = "1.1.0" whatsnew = "0.1.7" ksp-plugin="1.9.20-1.0.14" # plugins versions android-application-plugin="8.3.0" kotlin-android-plugin="1.9.22" google-services-plugin = "4.4.1" [libraries] advrecyclerview = { module = "com.h6ah4i.android.widget.advrecyclerview:advrecyclerview", version.ref = "advrecyclerview" } androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "appcompat" } androidx-core-splashscreen = { module = "androidx.core:core-splashscreen", version.ref = "splashscreen" } androidx-legacy-support-v4 = { module = "androidx.legacy:legacy-support-v4", version.ref = "legacy-support-v4" } androidx-lifecycle-extensions = { module = "androidx.lifecycle:lifecycle-extensions", version.ref = "lifecycle-extensions" } androidx-preference-ktx = { module = "androidx.preference:preference-ktx", version.ref = "preference-ktx" } androidx-recyclerview = { module = "androidx.recyclerview:recyclerview", version.ref = "recyclerview" } androidx-room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "room" } androidx-room-ktx = { group = "androidx.room", name = "room-ktx", version.ref = "room" } androidx-room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "room" } androidx-swiperefreshlayout = { module = "androidx.swiperefreshlayout:swiperefreshlayout", version.ref = "swiperefreshlayout" } constraint-layout = { module = "com.android.support.constraint:constraint-layout", version.ref = "constraint-layout" } firebase-crashlytics = { module = "com.google.firebase:firebase-crashlytics", version.ref = "crashlytics" } flexbox = { module = "com.google.android.flexbox:flexbox", version.ref = "flexbox" } gson = { module = "org.immutables:gson", version.ref = "gson" } koin-android = { module = "io.insert-koin:koin-android", version.ref = "koin" } koin-androidx-navigation = { module = "io.insert-koin:koin-androidx-navigation", version.ref = "koin" } kotlin-stdlib-jdk7 = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk7", version.ref = "kotlin" } kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlin-coroutines" } material = { module = "com.google.android.material:material", version.ref = "material" } storage = { module = "com.anggrayudi:storage", version.ref = "storage" } whatsnew = { module = "io.github.tonnyl:whatsnew", version.ref = "whatsnew" } [plugins] ksp = { id = "com.google.devtools.ksp", version.ref = "ksp-plugin" } android-application = { id = "com.android.application", version.ref = "android-application-plugin" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin-android-plugin" } google-services = { id = "com.google.gms.google-services", version.ref = "google-services-plugin" } firebase-crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebase-crashlytics-gradle-plugin" }././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3281875 fdroidserver-2.4.0/tests/source-files/com.lolo.io.onelist/gradle/wrapper/0000755000175000017500000000000014770510164025210 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/source-files/com.lolo.io.onelist/gradle/wrapper/gradle-wrapper.properties0000644000175000017500000000031014766514130032236 0ustar00hanshansdistributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/source-files/com.lolo.io.onelist/settings.gradle0000644000175000017500000000020214766514130025306 0ustar00hanshanspluginManagement { repositories { google() mavenCentral() gradlePluginPortal() } } include 'app' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3281875 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client/0000755000175000017500000000000014770510164022525 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client/build.gradle0000644000175000017500000002110114717152070024776 0ustar00hanshans// Gradle build file // // This project was started in Eclipse and later moved to Android Studio. In the transition, both IDEs were supported. // Due to this, the files layout is not the usual in new projects created with Android Studio / gradle. This file // merges declarations usually split in two separates build.gradle file, one for global settings of the project in // its root folder, another one for the app module in subfolder of root. buildscript { repositories { jcenter() maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' } google() } dependencies { classpath 'com.android.tools.build:gradle:3.0.1' classpath 'com.google.gms:google-services:3.0.0' } } apply plugin: 'com.android.application' apply plugin: 'checkstyle' apply plugin: 'pmd' apply plugin: 'findbugs' configurations.all { // check for updates every build resolutionStrategy.cacheChangingModulesFor 0, 'seconds' } ext { supportLibraryVersion = '26.1.0' googleLibraryVersion = '11.2.2' travisBuild = System.getenv("TRAVIS") == "true" // allows for -Dpre-dex=false to be set preDexEnabled = "true".equals(System.getProperty("pre-dex", "true")) } repositories { jcenter() maven { url "https://jitpack.io" } maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' } google() flatDir { dirs 'libs' } } android { lintOptions { abortOnError false htmlReport true htmlOutput file("$project.buildDir/reports/lint/lint.html") disable 'MissingTranslation' } dexOptions { javaMaxHeapSize "4g" } compileSdkVersion 26 buildToolsVersion '26.0.2' defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" // arguments to be passed to functional tests testInstrumentationRunnerArgument "TEST_USER", "\"$System.env.OCTEST_APP_USERNAME\"" testInstrumentationRunnerArgument "TEST_PASSWORD", "\"$System.env.OCTEST_APP_PASSWORD\"" testInstrumentationRunnerArgument "TEST_SERVER_URL", "\"$System.env.OCTEST_SERVER_BASE_URL\"" multiDexEnabled true versionCode = 20000099 versionName = "2.0.0" // adapt structure from Eclipse to Gradle/Android Studio expectations; // see http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Configuring-the-Structure flavorDimensions "default" productFlavors { // used for f-droid generic { applicationId 'com.nextcloud.client' dimension "default" } gplay { applicationId 'com.nextcloud.client' dimension "default" } modified { // structure is: // domain tld // domain name // .client applicationId 'com.custom.client' dimension "default" } versionDev { applicationId "com.nextcloud.android.beta" dimension "default" versionCode 20171223 versionName "20171223" } } configurations { modifiedCompile } } // adapt structure from Eclipse to Gradle/Android Studio expectations; // see http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Configuring-the-Structure dexOptions { // Skip pre-dexing when running on Travis CI or when disabled via -Dpre-dex=false. preDexLibraries = preDexEnabled && !travisBuild } packagingOptions { exclude 'META-INF/LICENSE.txt' exclude 'META-INF/LICENSE' } task checkstyle(type: Checkstyle) { configFile = file("${rootProject.projectDir}/checkstyle.xml") configProperties.checkstyleSuppressionsPath = file("${project.rootDir}/config/quality/checkstyle/suppressions.xml").absolutePath source 'src' include '**/*.java' exclude '**/gen/**' classpath = files() } task pmd(type: Pmd) { ruleSetFiles = files("${project.rootDir}/pmd-ruleset.xml") ignoreFailures = false ruleSets = [] source 'src' include '**/*.java' exclude '**/gen/**' reports { xml.enabled = false html.enabled = true xml { destination = file("$project.buildDir/reports/pmd/pmd.xml") } html { destination = file("$project.buildDir/reports/pmd/pmd.html") } } } task findbugs(type: FindBugs) { ignoreFailures = false effort = "max" reportLevel = "high" classes = files("$project.buildDir/intermediates/classes") excludeFilter = new File("${project.rootDir}/findbugs-filter.xml") source 'src' include '**/*.java' exclude '**/gen/**' reports { xml.enabled = false html.enabled = true html { destination = file("$project.buildDir/reports/findbugs/findbugs.html") } } classpath = files() } check.dependsOn 'checkstyle', 'findbugs', 'pmd', 'lint' compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { /// dependencies for app building implementation 'com.android.support:multidex:1.0.2' implementation 'com.github.nextcloud:android-library:1.0.33' versionDevImplementation 'com.github.nextcloud:android-library:master-SNAPSHOT' // use always latest master implementation "com.android.support:support-v4:${supportLibraryVersion}" implementation "com.android.support:design:${supportLibraryVersion}" implementation 'com.jakewharton:disklrucache:2.0.2' implementation "com.android.support:appcompat-v7:${supportLibraryVersion}" implementation "com.android.support:cardview-v7:${supportLibraryVersion}" implementation "com.android.support:exifinterface:${supportLibraryVersion}" implementation 'com.github.tobiasKaminsky:android-floating-action-button:1.10.2' implementation 'com.github.albfernandez:juniversalchardet:v2.0.0' implementation 'com.google.code.findbugs:annotations:2.0.1' implementation 'commons-io:commons-io:2.5' implementation 'com.github.evernote:android-job:v1.2.0' implementation 'com.jakewharton:butterknife:8.5.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1' implementation 'org.greenrobot:eventbus:3.0.0' implementation 'com.googlecode.ez-vcard:ez-vcard:0.10.2' implementation 'org.lukhnos:nnio:0.2' // uncomment for gplay, modified // implementation "com.google.firebase:firebase-messaging:${googleLibraryVersion}" // implementation "com.google.android.gms:play-services-base:${googleLibraryVersion}" // implementation "com.google.android.gms:play-services-gcm:${googleLibraryVersion}" // implementation "com.google.firebase:firebase-core:${googleLibraryVersion}" implementation 'org.parceler:parceler-api:1.1.6' annotationProcessor 'org.parceler:parceler:1.1.6' implementation 'com.github.bumptech.glide:glide:3.7.0' implementation 'com.caverock:androidsvg:1.2.1' implementation "com.android.support:support-annotations:${supportLibraryVersion}" /// dependencies for local unit tests testImplementation 'junit:junit:4.12' testImplementation 'org.mockito:mockito-core:1.10.19' /// dependencies for instrumented tests // JUnit4 Rules androidTestImplementation 'com.android.support.test:rules:1.0.1' // Android JUnit Runner androidTestImplementation 'com.android.support.test:runner:1.0.1' // Espresso core androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' // UIAutomator - for cross-app UI tests, and to grant screen is turned on in Espresso tests //androidTestImplementation 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2' // fix conflict in dependencies; see http://g.co/androidstudio/app-test-app-conflict for details //androidTestImplementation "com.android.support:support-annotations:${supportLibraryVersion}" implementation 'org.jetbrains:annotations:15.0' } configurations.all { resolutionStrategy.cacheChangingModulesFor 0, 'seconds' } tasks.withType(Test) { /// increased logging for tests testLogging { events "passed", "skipped", "failed" } } // uncomment for gplay, modified (must be at the bottom) //apply plugin: 'com.google.gms.google-services' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client/src/0000755000175000017500000000000014770510164023314 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client/src/generic/0000755000175000017500000000000014770510164024730 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client/src/generic/fastlane/0000755000175000017500000000000014770510164026525 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/0000755000175000017500000000000014770510164030305 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/android/0000755000175000017500000000000014770510164031725 5ustar00hanshans././@PaxHeader0000000000000000000000000000021500000000000010213 xustar00113 path=fdroidserver-2.4.0/tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/android/en-US/ 28 mtime=1742901364.3321877 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/android/en-0000755000175000017500000000000014770510164032325 5ustar00hanshans././@PaxHeader0000000000000000000000000000023300000000000010213 xustar00133 path=fdroidserver-2.4.0/tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/android/en-US/full_description.txt 22 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/android/en-0000644000175000017500000000206114717152070032325 0ustar00hanshansThe copyleft libre software Nextcloud Android app, gives you access to all the files in your Nextcloud.\n\nFeatures:\n* Easy, modern interface, suited to the theme of your server\n* Upload files to your Nextcloud server\n* Share them with others\n* Keep your favorite files and folders synced\n* Search across all folders on your server\n* Auto Upload for photos and videos taken by your device\n* Keep up to date with notifications\n* Multi-account support\n* Secure access to your data with fingerprint or PIN\n* Integration with DAVdroid for easy setup of calendar & Contacts synchronization\n\nPlease report all issues at https://github.com/nextcloud/android/issues and discuss this app at https://help.nextcloud.com/c/clients/android\n\nNew to Nextcloud? Nextcloud is a private file sync & share and communication server. It is libre software, and you can host it yourself or pay a company to do it for you. That way, you are in control of your photos, your calendar and contact data, your documents and everything else.\n\nCheck out Nextcloud at https://nextcloud.com././@PaxHeader0000000000000000000000000000023400000000000010214 xustar00134 path=fdroidserver-2.4.0/tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/android/en-US/short_description.txt 22 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/android/en-0000644000175000017500000000011614717152070032324 0ustar00hanshansThe Nextcloud Android app gives you access to all your files in your Nextcloud././@PaxHeader0000000000000000000000000000022000000000000010207 xustar00122 path=fdroidserver-2.4.0/tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/android/en-US/title.txt 22 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/android/en-0000644000175000017500000000001114717152070032316 0ustar00hanshansNextcloud././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client/src/versionDev/0000755000175000017500000000000014770510164025440 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client/src/versionDev/fastlane/0000755000175000017500000000000014770510164027235 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata/0000755000175000017500000000000014770510164031015 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata/android/0000755000175000017500000000000014770510164032435 5ustar00hanshans././@PaxHeader0000000000000000000000000000022000000000000010207 xustar00116 path=fdroidserver-2.4.0/tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata/android/en-US/ 28 mtime=1742901364.3321877 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata/android/0000755000175000017500000000000014770510164032435 5ustar00hanshans././@PaxHeader0000000000000000000000000000023600000000000010216 xustar00136 path=fdroidserver-2.4.0/tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata/android/en-US/full_description.txt 22 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata/android/0000644000175000017500000000111214717152070032431 0ustar00hanshansThe Open Source Nextcloud Android app allows you to access all your files on your Nextcloud.\nThis is a dev version of the official Nextcloud app and includes brand-new, untested features which might lead to instabilities and data loss. The app is designed for users willing to test the new features and to report bugs if they occur. Do not use it for your productive work!\n\nThe dev version can be installed alongside the official Nextcloud app which is available at F-Droid, too. Once a day it is checked if the source code was updated, so there can be longer pauses between builds. ././@PaxHeader0000000000000000000000000000023700000000000010217 xustar00137 path=fdroidserver-2.4.0/tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata/android/en-US/short_description.txt 22 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata/android/0000644000175000017500000000011714717152070032435 0ustar00hanshansThe Nextcloud Dev app is a development snapshot and can be installed parallel. ././@PaxHeader0000000000000000000000000000022300000000000010212 xustar00125 path=fdroidserver-2.4.0/tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata/android/en-US/title.txt 22 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata/android/0000644000175000017500000000001514717152070032432 0ustar00hanshansNextcloud Dev././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/0000755000175000017500000000000014770510164023302 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/src/0000755000175000017500000000000014770510164024071 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/src/generic/0000755000175000017500000000000014770510164025505 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/0000755000175000017500000000000014770510164027302 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/0000755000175000017500000000000014770510164031062 5ustar00hanshans././@PaxHeader0000000000000000000000000000021300000000000010211 xustar00111 path=fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android/ 28 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android0000755000175000017500000000000014770510164032423 5ustar00hanshans././@PaxHeader0000000000000000000000000000022100000000000010210 xustar00117 path=fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android/en-US/ 28 mtime=1742901364.3321877 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android0000755000175000017500000000000014770510164032423 5ustar00hanshans././@PaxHeader0000000000000000000000000000023700000000000010217 xustar00137 path=fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android/en-US/full_description.txt 22 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android0000644000175000017500000000206114717152070032423 0ustar00hanshansThe copyleft libre software Nextcloud Android app, gives you access to all the files in your Nextcloud.\n\nFeatures:\n* Easy, modern interface, suited to the theme of your server\n* Upload files to your Nextcloud server\n* Share them with others\n* Keep your favorite files and folders synced\n* Search across all folders on your server\n* Auto Upload for photos and videos taken by your device\n* Keep up to date with notifications\n* Multi-account support\n* Secure access to your data with fingerprint or PIN\n* Integration with DAVdroid for easy setup of calendar & Contacts synchronization\n\nPlease report all issues at https://github.com/nextcloud/android/issues and discuss this app at https://help.nextcloud.com/c/clients/android\n\nNew to Nextcloud? Nextcloud is a private file sync & share and communication server. It is libre software, and you can host it yourself or pay a company to do it for you. That way, you are in control of your photos, your calendar and contact data, your documents and everything else.\n\nCheck out Nextcloud at https://nextcloud.com././@PaxHeader0000000000000000000000000000024000000000000010211 xustar00138 path=fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android/en-US/short_description.txt 22 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android0000644000175000017500000000011614717152070032422 0ustar00hanshansThe Nextcloud Android app gives you access to all your files in your Nextcloud././@PaxHeader0000000000000000000000000000022400000000000010213 xustar00126 path=fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android/en-US/title.txt 22 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android0000644000175000017500000000001114717152070032414 0ustar00hanshansNextcloud././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/src/versionDev/0000755000175000017500000000000014770510164026215 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/0000755000175000017500000000000014770510164030012 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/0000755000175000017500000000000014770510164031572 5ustar00hanshans././@PaxHeader0000000000000000000000000000021600000000000010214 xustar00114 path=fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/android/ 28 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/andr0000755000175000017500000000000014770510164032437 5ustar00hanshans././@PaxHeader0000000000000000000000000000022400000000000010213 xustar00120 path=fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/android/en-US/ 28 mtime=1742901364.3321877 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/andr0000755000175000017500000000000014770510164032437 5ustar00hanshans././@PaxHeader0000000000000000000000000000024200000000000010213 xustar00140 path=fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/android/en-US/full_description.txt 22 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/andr0000644000175000017500000000111214717152070032433 0ustar00hanshansThe Open Source Nextcloud Android app allows you to access all your files on your Nextcloud.\nThis is a dev version of the official Nextcloud app and includes brand-new, untested features which might lead to instabilities and data loss. The app is designed for users willing to test the new features and to report bugs if they occur. Do not use it for your productive work!\n\nThe dev version can be installed alongside the official Nextcloud app which is available at F-Droid, too. Once a day it is checked if the source code was updated, so there can be longer pauses between builds. ././@PaxHeader0000000000000000000000000000024300000000000010214 xustar00141 path=fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/android/en-US/short_description.txt 22 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/andr0000644000175000017500000000011714717152070032437 0ustar00hanshansThe Nextcloud Dev app is a development snapshot and can be installed parallel. ././@PaxHeader0000000000000000000000000000022700000000000010216 xustar00129 path=fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/android/en-US/title.txt 22 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/andr0000644000175000017500000000001514717152070032434 0ustar00hanshansNextcloud Dev././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.seafile.seadroid2/0000755000175000017500000000000014770510164022526 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3321877 fdroidserver-2.4.0/tests/source-files/com.seafile.seadroid2/app/0000755000175000017500000000000014770510164023306 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/com.seafile.seadroid2/app/build.gradle0000644000175000017500000001207214717152070025566 0ustar00hanshansapply plugin: 'com.android.application' android { compileSdkVersion rootProject.ext.compileSdkVersion defaultConfig { applicationId 'com.seafile.seadroid2' minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode 93 versionName "2.2.18" multiDexEnabled true resValue "string", "authorities", applicationId + '.cameraupload.provider' resValue "string", "account_type", "com.seafile.seadroid2.account.api2" buildConfigField "String", "ACCOUNT_TYPE", '"com.seafile.seadroid2.account.api2"' ndk { abiFilters 'armeabi', 'armeabi-v7a', 'x86' } } lintOptions { abortOnError false disable 'MissingTranslation' } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } signingConfigs { debug { // def props = new Properties() // props.load(new FileInputStream(project.file("debugkey.properties"))) // storeFile project.file(props.keyStore) // storePassword props.keyStorePassword // keyAlias props.keyAlias // keyPassword props.keyAliasPassword } release { // Signing code for manual signing // storeFile file(System.console().readLine("\n\$ Enter keystore path: ")) // storePassword System.console().readPassword("\n\$ Enter keystore password: ").toString() // keyAlias System.console().readLine("\n\$ Enter key alias: ") // keyPassword System.console().readPassword("\n\$ Enter key password: ").toString() def props = new Properties() props.load(new FileInputStream(project.file("key.properties"))) storeFile project.file(props.keyStore) storePassword props.keyStorePassword keyAlias props.keyAlias keyPassword props.keyAliasPassword } } buildTypes { debug { debuggable true applicationIdSuffix ".debug" resValue "string", "authorities", defaultConfig.applicationId + '.debug.cameraupload.provider' resValue "string", "account_type", "com.seafile.seadroid2.debug.account.api2" buildConfigField "String", "ACCOUNT_TYPE", '"com.seafile.seadroid2.debug.account.api2"' signingConfig signingConfigs.debug minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt' applicationVariants.all { variant -> variant.outputs.all { output -> if (output.outputFile != null && output.outputFile.name.endsWith('.apk')) { if (variant.name == "debug") outputFileName = "seafile-debug-" + defaultConfig.versionName + ".apk" } } } } release { signingConfig signingConfigs.release minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt' applicationVariants.all { variant -> variant.outputs.all { output -> if (output.outputFile != null && output.outputFile.name.endsWith('.apk')) { if (variant.name == "release") { outputFileName = "seafile-" + defaultConfig.versionName + ".apk" } } } } } } allprojects { repositories { maven { url 'https://jitpack.io' } } } dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}" implementation "com.android.support:design:${rootProject.ext.supportLibVersion}" implementation 'com.github.JakeWharton:ViewPagerIndicator:2.4.1' implementation 'com.github.kevinsawicki:http-request:6.0' implementation 'commons-io:commons-io:2.4' implementation 'com.google.guava:guava:18.0' implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.3' implementation 'com.cocosw:bottomsheet:1.3.1' implementation 'com.commit451:PhotoView:1.2.4' implementation 'com.joanzapata.iconify:android-iconify-material-community:2.2.1' testImplementation 'junit:junit:4.12' testImplementation 'org.robolectric:robolectric:3.0' implementation 'com.madgag.spongycastle:core:1.54.0.0' implementation 'com.madgag.spongycastle:prov:1.54.0.0' implementation 'com.shuyu:gsyVideoPlayer-java:2.1.0' implementation 'com.shuyu:gsyVideoPlayer-ex_so:2.1.0' implementation 'com.squareup.okhttp3:okhttp:3.9.1' implementation 'com.yydcdut:markdown-processor:0.1.3' implementation 'ren.qinc.edit:lib:0.0.5'//editor undo redo implementation 'com.github.tiagohm.MarkdownView:library:0.19.0' } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.ubergeek42.WeechatAndroid/0000755000175000017500000000000014770510164024062 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3321877 fdroidserver-2.4.0/tests/source-files/com.ubergeek42.WeechatAndroid/app/0000755000175000017500000000000014770510164024642 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368094.0 fdroidserver-2.4.0/tests/source-files/com.ubergeek42.WeechatAndroid/app/build.gradle.kts0000644000175000017500000002645614743421036027735 0ustar00hanshansimport com.android.build.api.transform.* import com.android.build.api.variant.VariantInfo import com.android.utils.FileUtils import org.gradle.internal.os.OperatingSystem import org.aspectj.bridge.IMessage import org.aspectj.bridge.MessageHandler import org.aspectj.tools.ajc.Main plugins { id("com.android.application") kotlin("android") kotlin("kapt") } dependencies { implementation(project(":cats")) implementation(project(":relay")) implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.0") // these two are required for logging within the relay module. todo remove? implementation("org.slf4j:slf4j-api:1.7.36") implementation("com.noveogroup.android:android-logger:1.3.6") implementation("androidx.core:core-ktx:1.8.0") implementation("androidx.legacy:legacy-support-v4:1.0.0") implementation("androidx.annotation:annotation:1.3.0") // For @Nullable/@NonNull implementation("androidx.appcompat:appcompat:1.4.2") implementation("androidx.emoji2:emoji2:1.1.0") implementation("androidx.preference:preference-ktx:1.2.0") // preference fragment & al implementation("androidx.legacy:legacy-preference-v14:1.0.0") // styling for the fragment implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.4.1") implementation("androidx.lifecycle:lifecycle-common-java8:2.4.1") implementation("androidx.sharetarget:sharetarget:1.2.0-rc01") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.2") implementation("com.github.bumptech.glide:glide:4.13.2") kapt("com.github.bumptech.glide:compiler:4.13.2") implementation("com.squareup.okhttp3:okhttp:4.10.0") val roomVersion = "2.4.2" implementation("androidx.room:room-runtime:$roomVersion") annotationProcessor("androidx.room:room-compiler:$roomVersion") kapt("androidx.room:room-compiler:$roomVersion") implementation("org.yaml:snakeyaml:1.30") implementation("org.bouncycastle:bcpkix-jdk15on:1.70") // needed for thread-safe date formatting as SimpleDateFormat isn"t thread-safe // the alternatives, including apache commons and threetenabp, seem to be much slower // todo perhaps replace with core library desugaring, if it"s fast implementation("net.danlew:android.joda:2.10.14") implementation("org.greenrobot:eventbus:3.3.1") debugImplementation("org.aspectj:aspectjrt:1.9.9.1") debugImplementation("com.squareup.leakcanary:leakcanary-android:2.9.1") testImplementation("org.junit.jupiter:junit-jupiter:5.8.2") testImplementation("org.junit.jupiter:junit-jupiter-params:5.8.2") } tasks.withType { options.encoding = "UTF-8" } android { compileSdk = 31 defaultConfig { versionCode = 1_08_01 versionName = "1.8.1" minSdk = 21 targetSdk = 31 buildConfigField("String", "VERSION_BANNER", "\"" + versionBanner() + "\"") vectorDrawables.useSupportLibrary = true javaCompileOptions { annotationProcessorOptions { arguments["room.schemaLocation"] = "$projectDir/schemas" arguments["room.incremental"] = "true" } } kotlinOptions { freeCompilerArgs = listOf( "-language-version", "1.7", "-api-version", "1.7") jvmTarget = "11" } } signingConfigs { create("dev") { try { storeFile = file(project.properties["devStorefile"] as String) storePassword = project.properties["devStorePassword"] as String keyAlias = project.properties["devKeyAlias"] as String keyPassword = project.properties["devKeyPassword"] as String } catch (e: Exception) { project.logger.warn("WARNING: Set the values devStorefile, devStorePassword, " + "devKeyAlias, and devKeyPassword " + "in ~/.gradle/gradle.properties to sign the release.") } } } buildTypes { getByName("debug") { applicationIdSuffix = ".debug" versionNameSuffix = "-debug" } getByName("release") { isMinifyEnabled = true proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro", "../cats/proguard-rules.pro") // kotlinx-coroutines-core debug-only artifact // see https://github.com/Kotlin/kotlinx.coroutines#avoiding-including-the-debug-infrastructure-in-the-resulting-apk packagingOptions { resources.excludes += "DebugProbesKt.bin" } } create("dev") { initWith(getByName("release")) matchingFallbacks += listOf("release") applicationIdSuffix = ".dev" versionNameSuffix = "-dev" signingConfig = signingConfigs.getByName("dev") } compileOptions { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } } buildFeatures { viewBinding = true } } fun versionBanner(): String { val os = org.apache.commons.io.output.ByteArrayOutputStream() project.exec { commandLine = "git describe --long".split(" ") standardOutput = os } return String(os.toByteArray()).trim() } //////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////// cats //////////////////////////////////////////////////////////////////////////////////////////////////// // ajc gets hold of some files such as R.jar, and on Windows it leads to errors such as: // The process cannot access the file because it is being used by another process // to avoid these, weave in a process, which `javaexec` will helpfully launch for us. fun weave(classPath: Iterable, aspectPath: Iterable, input: Iterable, output: File) { val runInAProcess = OperatingSystem.current().isWindows val bootClassPath = android.bootClasspath println(if (runInAProcess) ":: weaving in a process..." else ":: weaving...") println(":: boot class path: $bootClassPath") println(":: class path: $classPath") println(":: aspect path: $aspectPath") println(":: input: $input") println(":: output: $output") val arguments = listOf("-showWeaveInfo", "-1.8", "-preserveAllLocals", "-bootclasspath", bootClassPath.asArgument, "-classpath", classPath.asArgument, "-aspectpath", aspectPath.asArgument, "-inpath", input.asArgument, "-d", output.absolutePath) if (runInAProcess) { javaexec { classpath = weaving main = "org.aspectj.tools.ajc.Main" args = arguments } } else { val handler = MessageHandler(true) Main().run(arguments.toTypedArray(), handler) val log = project.logger for (message in handler.getMessages(null, true)) { when (message.kind) { IMessage.DEBUG -> log.debug("DEBUG " + message.message, message.thrown) IMessage.INFO -> log.info("INFO: " + message.message, message.thrown) IMessage.WARNING -> log.warn("WARN: " + message.message, message.thrown) IMessage.FAIL, IMessage.ERROR, IMessage.ABORT -> log.error("ERROR: " + message.message, message.thrown) } } } } // the only purpose of the following is to get a hold of aspectjtools jar // this jar is already on build script classpath, but that classpath is impossible to get // see https://discuss.gradle.org/t/how-do-i-determine-buildscript-classpath/37973/3 val weaving: Configuration by configurations.creating dependencies { weaving("org.aspectj:aspectjtools:1.9.9.1") } // historical note: the problem with weaving Kotlin and Java in-place is that: // * Java is compiled by task compileDebugJavaWithJavac // * gradle can run either one of these tasks, or both of them // * compileDebugJavaWithJavac depends on compileDebugKotlin // * weaving Kotlin requires Java classes // // a transformation is a poorly advertised feature that works on merged code, and also has its own // inputs and outputs, so this fixes all of our problems... class TransformCats : Transform() { override fun getName(): String = TransformCats::class.simpleName!! override fun getInputTypes() = setOf(QualifiedContent.DefaultContentType.CLASSES) // only look for annotations in app classes // transformation will consume these and put woven classes in the output dir override fun getScopes() = mutableSetOf(QualifiedContent.Scope.PROJECT) // but also have the rest on our class path // these will not be touched by the transformation override fun getReferencedScopes() = mutableSetOf(QualifiedContent.Scope.SUB_PROJECTS, QualifiedContent.Scope.EXTERNAL_LIBRARIES) override fun isIncremental() = false // only run on debug builds override fun applyToVariant(variant: VariantInfo) = variant.isDebuggable override fun transform(invocation: TransformInvocation) { if (!invocation.isIncremental) { invocation.outputProvider.deleteAll() } val output = invocation.outputProvider.getContentLocation(name, outputTypes, scopes, Format.DIRECTORY) if (output.isDirectory) FileUtils.deleteDirectoryContents(output) FileUtils.mkdirs(output) val input = mutableListOf() val classPath = mutableListOf() val aspectPath = mutableListOf() invocation.inputs.forEach { source -> source.directoryInputs.forEach { dir -> input.add(dir.file) classPath.add(dir.file) } source.jarInputs.forEach { jar -> input.add(jar.file) classPath.add(jar.file) } } invocation.referencedInputs.forEach { source -> source.directoryInputs.forEach { dir -> classPath.add(dir.file) } source.jarInputs.forEach { jar -> classPath.add(jar.file) // this used to read `if (jar.name == ":cats") ...`, // but with android gradle plugin 4.2.0 jar names contain garbage // this is a very simple but a bit fragile workaround. todo improve if (jar.file.directoriesInsideRootProject().contains("cats")) { aspectPath.add(jar.file) } } } weave(classPath, aspectPath, input, output) } } android.registerTransform(TransformCats()) val Iterable.asArgument get() = joinToString(File.pathSeparator) fun File.directoriesInsideRootProject() = sequence { var file = this@directoriesInsideRootProject while (true) { yield(file.name) file = file.parentFile ?: break if (file == rootProject.projectDir) break } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.ubergeek42.WeechatAndroid/app/src/0000755000175000017500000000000014770510164025431 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.ubergeek42.WeechatAndroid/app/src/main/0000755000175000017500000000000014770510164026355 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/com.ubergeek42.WeechatAndroid/app/src/main/res/0000755000175000017500000000000014770510164027146 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3321877 fdroidserver-2.4.0/tests/source-files/com.ubergeek42.WeechatAndroid/app/src/main/res/values/0000755000175000017500000000000014770510164030445 5ustar00hanshans././@PaxHeader0000000000000000000000000000020700000000000010214 xustar00113 path=fdroidserver-2.4.0/tests/source-files/com.ubergeek42.WeechatAndroid/app/src/main/res/values/strings.xml 22 mtime=1737368094.0 fdroidserver-2.4.0/tests/source-files/com.ubergeek42.WeechatAndroid/app/src/main/res/values/strings.0000644000175000017500000014273314743421036032150 0ustar00hanshans ]> Weechat-Android com.ubergeek42.WeechatAndroid Relay host is not set Relay password is not set SSH host is not set SSH password is not set SSH private key is not set Server unexpectedly closed connection while connecting. Wrong password or connection type? Could not resolve address %s Error: %s Buffer lost some hot messages because of new lines There are no hot buffers for now Not connected Buffer list empty Activity not found for intent %s Upload file Tab Upload Send Cancel search Search up Search down More Go to bottom Fetch more lines Fetching lines… search filter Open drawer Close drawer Search Users Hotlist Show hot message Close Connect Disconnect Stop connecting Settings Filter lines Dark theme Attach image Attach media Attach file Attach image Attach media Take photo Debug Sync hotlist Die Prefix Message Both Regex Case sensitive With timestamps Without timestamps Messages only Connection Status Hotlist Waiting for network Will connect in %d seconds… Connecting now… Connected to %s %d message %d messages  in %d buffer  in %d buffers New message in %2$s %1$d new messages in %2$s (user unknown) (users unknown) (message not fetched) (message not fetched) (%d messages not fetched) Me Reply %1$s (%2$s) %1$d user %1$d users %s (away) Copy Select text Paste Permission required To take photos, app needs write access to public storage OK Issued to:
    %1$s

    Issued by:
    %2$s

    Validity period:
    Issued on: %3$s
    Expires on: %4$s

    SHA-256 fingerprint:
    %5$s ]]> Unknown Reject Back to safety Invalid hostname %1$s but the certificate is only valid for the following hosts: %2$s ]]> Note that Android P and beyond does not fall back to Common Name (CN) validation. Subject Alternative Name (SAN) must be used instead.
    Learn more ]]>       %s ]]>       (none) ]]> Certificate expired This certificate is no longer valid. Please make sure that the device date is correct. Certificate not yet valid This certificate will be valid in the future. Please make sure that the device date is correct. Untrusted certificate This certificate isn’t trusted by Android, but you can still connect. The app will remember the selected certificate and trust it and any certificates signed by it. Accept selected Certificate not pinned This server is trusted by Android, but a setting requires you to confirm that you trust it as well. The app will remember the selected certificate and trust it and any certificates signed by it. Pin selected Unknown Unknown server %1$s
    has never been encountered.

    %2$s key SHA256 fingerprint:
    %3$s ]]> Accept server key Reject Server changed key ⚠ Warning:
    it’s possible that someone is trying to hijack this connection!

    Server at %1$s is known, but its key doesn’t match the key you previously accepted.

    %2$s key SHA256 fingerprint:
    %3$s

    If you want to continue, please clear known hosts in preferences. ]]> Clear Paste Choose file %1$s (%2$s) set not set Clipboard is empty password Save Default Discard changes? Cancel Discard None Unknown Invalid number No spaces allowed in hostnames Connection Connection type Plain connection WeeChat SSL SSH tunnel WebSocket WebSocket (SSL) WebSocket path SSL settings Require certificate pins Prompt to confirm that you trust the server, even if the system trusts it Clear certificates No trusted certificates One trusted certificate One trusted certificate %s trusted certificates Clear certificates? Clear Cancel Certificates cleared Could not clear certificates Client certificate PKCS #12 file containing private key and client certificate Certificate was stored inside security hardware Certificate was stored inside software key store Certificate was stored inside key store Certificate forgotten Server is asking for a client certificate but none is set. Wanted: %1$s certificate issued by: %2$s Server is asking for a client certificate but the one we have doesn’t fit. Wanted: %1$s certificate issued by: %2$s SSH tunnel settings SSH host SSH port SSH username Authentication method Password Key Password Private key Ed25519, ECDSA, RSA or DSA key %s key was stored inside security hardware %s key was stored inside software key store %s key was stored inside key store %1$s key was stored inside the app. \n \nThe key couldn’t be stored in the key store: %2$s Key forgotten Clear known hosts No entries %s entry %s entries Clear known hosts? Cancel Clear Known hosts cleared Failed to authenticate with password Failed to authenticate with key Relay Relay host Relay port Relay password Handshake settings Handshake Compatibility Modern & fast Modern In compatibility mode, the password isn’t hashed. This is the fastest method. This method is required if using WeeChat < 2.9, but works on the later versions as well.

    Modern & fast handshake limits algorithms to the SHA-2 family.

    Modern handshake also includes PBKDF2. These algorithms can be very slow, depending on the number of iterations.

    Password hashing offers little to no benefit if the connection is encrypted. Learn more ]]> Synchronization settings Only sync open buffers Can significantly reduce traffic and battery usage, but hotlist updates will only happen once 5 minutes Sync buffer read status Mark buffers as read in WeeChat when you read them in this app Number of lines to fetch The number of lines requested when opening a buffer or when you press the “Load more lines” button (%s) Number of lines to fetch for search When starting a new search, unless already fetched, the app will request up to this many lines from WeeChat (%s) These settings take effect after reconnection. Note that due to filtering the number of lines actually shown might be less than the number of loaded lines. Also note that due to WeeChat’s limitations the app has to re-fetch all lines every times it requests more lines. Miscellaneous Reconnect on connection loss Connect on system boot Ping settings Enable ping Periodically check that the relay connection is still alive when idle Idle time Number of seconds to wait before sending a ping when the connection is idle (%s) Ping timeout Number of seconds to wait before closing an unresponsive connection (%s) Buffer list Sort buffer list Sort by number of highlights/private messages/unread messages Hide non-conversation buffers E.g. server buffers and plugin buffers Hide hidden buffers Hide buffers hidden with /buffer hide Show buffer filter Filter matches full buffer names and reveals matching hidden buffers System gesture exclusion zone On Android Q, the left side of the screen is reserved for the back gesture. Enable this to have a small area in the bottom of the screen where you can open the buffer list normally. Look & feel Text size Hide action bar Hide action bar when the keyboard is open or when scrolling up Filter messages Hide messages filtered by WeeChat (e.g. irc_smart_filter) Prefix alignment Left aligned Right aligned Timestamp aligned No alignment Maximum width of prefix In terms of letters; longer nicknames will be cut (%s) Enclose nicknames Enclose the nicknames in < and > Timestamp format %s (default: HH:mm:ss) Invalid timestamp format Buffer font Default Import Imported: %s Non-monospace fonts will not work well with alignment. Import fonts from the dialog, or put them into one of the following locations:%1$s Theme @string/pref__theme__theme__system Dark Light Set by battery saver Theme switch Show theme switch in the menu Light color scheme Dark color scheme Error loading color scheme %s Not set Error Import Imported: %s Learn more

    Import color schemes from the dialogs or put them into the following location:%1$s ]]>
    Dim down non-human lines Display joins/quits in a faint color, as set in the color scheme Buttons Show tab button Show send button Show paperclip button Paperclip button short tap @string/pref__buttons__paperclip__actions__content_images @string/pref__buttons__paperclip__actions__content_media @string/pref__buttons__paperclip__actions__content_anything @string/pref__buttons__paperclip__actions__mediastore_images @string/pref__buttons__paperclip__actions__mediastore_media @string/pref__buttons__paperclip__actions__camera Paperclip button long tap @string/pref__buttons__paperclip__actions__none @string/pref__buttons__paperclip__actions__content_images @string/pref__buttons__paperclip__actions__content_media @string/pref__buttons__paperclip__actions__content_anything @string/pref__buttons__paperclip__actions__mediastore_images @string/pref__buttons__paperclip__actions__mediastore_media @string/pref__buttons__paperclip__actions__camera Disabled System: attach images System: attach images and videos System: attach any files Gallery: attach images Gallery: attach images and videos Take photo When the paperclip button gets hidden to provide more space for the input field, you can still attach files via overflow menu. Volume buttons change text size If set, volume buttons will change text size instead of volume Notifications Enable notifications Notify about hot messages such as private messages or highlights Notification sound Vibration Notification light Media preview Enabled Never On Wi-Fi only On unmetered networks only Always Context Disabled everywhere Enabled for %s Chat Paste dialog Notifications Insecure requests Allow Rewrite as HTTPS Disallow
    ⚠ Warning: the app is accessing the web directly. A malicious person could craft a website to learn your IP address and other data. To prevent the app from accessing websites you don’t know, remove the strategy for the wildcard host “*” or set it to “none”. Learn more ]]>
    Strategies Defines the ways images are fetched from individual websites, and some filters. \n \n%1$s; %2$s; \n \n%3$s Error Message filter set Message filter not set line filters not set %d line filter set %d line filters set No strategies loaded Strategies: %s "# don’t look for links in the part # of the message that matches the # following regex. this prevents # the app from showing broken links # in matrix clients’ quotes, e.g. # <nick "http://broken.co"> message #message filter: # ^<[^ ]{1,16} \".{1,33}\">\\s line filters: # don’t display thumbnails for any # lines that match the following regex - regex: '^(?:Title: |[↑^] )' # don’t display thumbnails # for any lines from bot #- nicks: [bot] # don’t display thumbnails # for any lines from bot # that also math the given regex #- nicks: [bot] # regex: ^<\\S+>\\s strategies: - name: skip pastebins type: none hosts: - pastebin.com - bpa.st - dpaste.com - termbin.com - name: skip site banners type: none hosts: - github.com - gist.github.com - stackoverflow.com - '*.stackexchange.com' - twitch.tv - '*.twitch.tv' #- name: skip the rest, including redirects # type: none # hosts: ['*'] - name: try the rest type: any hosts: ['*'] - name: youtube type: image hosts: [www.youtube.com, m.youtube.com, youtube.com, youtu.be] regex: (?i)^https?://(?:(?:www\\.|m\\.)?youtube\\.com/watch\\?v=|youtu\\.be/)([A-Za-z0-9_-]+) small: https://img.youtube.com/vi/$1/mqdefault.jpg big: https://img.youtube.com/vi/$1/hqdefault.jpg - name: i.imgur type: image hosts: [i.imgur.com] regex: (?i)^https?://i\\.imgur\\.com/([A-Za-z0-9]+) small: https://i.imgur.com/$1m.jpg big: https://i.imgur.com/$1h.jpg - name: imgur/gallery type: any hosts: [imgur.com, www.imgur.com] regex: (?i)^https?://(?:www\\.)?imgur\\.com/gallery/(.*) sub: https://imgur.com/a/$1 - name: 9gag type: image hosts: [9gag.com, img-9gag-fun.9cache.com] regex: (?i)^https?://(?:9gag\\.com/gag|img-9gag-fun\\.9cache\\.com/photo)/([^_]+) small: https://images-cdn.9gag.com/photo/$1_700b.jpg big: https://images-cdn.9gag.com/photo/$1_700b.jpg - name: mobile.twitter type: any hosts: [mobile.twitter.com] regex: (?i)^https?://mobile\\.twitter\\.com/(.*) sub: https://twitter.com/$1 - name: common type: any regex: (?i)^https?://(.+) sub: https://$1 hosts: - '*.wikipedia.org' - gfycat.com - imgur.com - name: reddit type: any hosts: [v.redd.it, reddit.com, www.reddit.com, old.reddit.com] body size: 196608 " Advanced Download size limit %s MB Disk cache %s MB; takes effect on restart Success cooldown %s hours. The app will consider successfully fetched image available, either from cache or the web, for the specified amount of time. Thumbnail width Minimum thumbnail height Maximum thumbnail height File sharing Accept from other apps Text only Text, images and videos Everything Direct share Disabled Up to one buffer Up to two buffers Up to three buffers Up to four buffers Upload URL File field Regex
    curl -s --user user:pass \\
      --header \'Additional: Header\' \\
      --form additional=field \\
      --form file=@file.ext \\
      https://example.com | perl -nle \\
      \'m#^https://\\S+#; print $1//$&\'


    If the regular expression is set, it is used to find the URL in the response body; either the first capture group is used, or the whole match. Learn more ]]>
    Advanced Additional headers Additional fields Authentication None Basic User Password Remember uploads for %s hours About Weechat-Android %s created by ubergeek42 build ID %s Unknown version ID \nThis project uses the following libraries: \n \n    • Android Logger by Noveo Group \n    • AspectJ by Eclipse Foundation \n    • Bouncy Castle \n    • EventBus by greenrobot \n    • Glide by Bump Technologies \n    • Hugo by Jake Wharton \n    • Java-WebSocket by Nathan Rajlich \n    • joda-time-android by Daniel Lew \n    • JSch by JCraft \n    • LeakCanary by Square, Inc \n    • Mockito by Szczepan Faber and friends \n    • nv-websocket-client by Takahiko Kawasaki \n    • OkHttp by Square, Inc \n    • SLF4J by QOS.ch \n    • SnakeYAML by Andrey Somov \n    • sshlib by ConnectBot \n \nPlease create an issue on GitHub if you find a bug or have a feature request. \n \n ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3321877 fdroidserver-2.4.0/tests/source-files/de.varengold.activeTAN/0000755000175000017500000000000014770510164022653 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368094.0 fdroidserver-2.4.0/tests/source-files/de.varengold.activeTAN/build.gradle0000644000175000017500000000717714743421036025145 0ustar00hanshansapply plugin: 'com.android.application' android { compileSdkVersion versions.compileSdk defaultConfig { versionCode 34 versionName "2021-06-30" // Requires API level 23 (Android 6.0) to use Android keystore system for cryptography. minSdkVersion 23 targetSdkVersion versions.targetSdk testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true javaCompileOptions { annotationProcessorOptions { // Export database schema history as JSON files. arguments = ["room.schemaLocation": "$projectDir/schemas".toString()] } } sourceSets { // Include database schema history for migration testing. androidTest.assets.srcDirs += files("$projectDir/schemas".toString()) } } buildFeatures { viewBinding = true } buildTypes { debug { // Don't mess with the release versions during debugging, so use a different appId. applicationIdSuffix ".debug" debuggable true } release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } flavorDimensions "client", "environment" productFlavors { prod { dimension "environment" } qs { dimension "environment" // To be able to install a second app variant, we must change the applicationId. // Otherwise it would not be possible to use the same device for testing and production. applicationIdSuffix ".QS" } EFD { // Demo portal efdis-online.de (extern) / dailybuild.efdis-online.de (intern) dimension "client" applicationId "de.efdis.activeTAN" } VAR { dimension "client" applicationId "de.varengold.activeTAN" } } compileOptions { // ZXing uses Java 8 language features from the core library coreLibraryDesugaringEnabled true targetCompatibility JavaVersion.VERSION_1_8 sourceCompatibility JavaVersion.VERSION_1_8 } } tasks.withType(JavaCompile) { options.deprecation = true } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation project(':material-design-icons') implementation project(":barcodescanner") implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.appcompat:appcompat:1.3.0' implementation 'androidx.biometric:biometric:1.1.0' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation 'androidx.recyclerview:recyclerview:1.2.1' coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' implementation 'com.google.zxing:core:' + versions.zxing def room_version = '2.3.0' implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" androidTestImplementation "androidx.room:room-testing:$room_version" testImplementation 'junit:junit:4.13.1' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test:runner:1.3.0' androidTestImplementation 'androidx.test:rules:1.3.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.3.0' androidTestImplementation 'androidx.test.espresso:espresso-intents:3.3.0' } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/dev.patrickgold.florisboard/0000755000175000017500000000000014770510164024053 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3321877 fdroidserver-2.4.0/tests/source-files/dev.patrickgold.florisboard/app/0000755000175000017500000000000014770510164024633 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368094.0 fdroidserver-2.4.0/tests/source-files/dev.patrickgold.florisboard/app/build.gradle.kts0000644000175000017500000000715514743421036027721 0ustar00hanshansplugins { id("com.android.application") version "4.1.2" kotlin("android") version "1.4.30" } android { compileSdkVersion(30) buildToolsVersion("30.0.3") compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = JavaVersion.VERSION_1_8.toString() freeCompilerArgs = listOf("-Xallow-result-return-type") // enables use of kotlin.Result } defaultConfig { applicationId = "dev.patrickgold.florisboard" minSdkVersion(23) targetSdkVersion(30) versionCode(29) versionName("0.3.10") testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } buildFeatures { viewBinding = true } buildTypes { named("debug").configure { applicationIdSuffix = ".debug" versionNameSuffix = "-debug" resValue("mipmap", "floris_app_icon", "@mipmap/ic_app_icon_debug") resValue("mipmap", "floris_app_icon_round", "@mipmap/ic_app_icon_debug_round") resValue("string", "floris_app_name", "FlorisBoard Debug") } create("beta") // Needed because by default the "beta" BuildType does not exist named("beta").configure { applicationIdSuffix = ".beta" versionNameSuffix = "-beta01" proguardFiles.add(getDefaultProguardFile("proguard-android-optimize.txt")) resValue("mipmap", "floris_app_icon", "@mipmap/ic_app_icon_beta") resValue("mipmap", "floris_app_icon_round", "@mipmap/ic_app_icon_beta_round") resValue("string", "floris_app_name", "FlorisBoard Beta") } named("release").configure { proguardFiles.add(getDefaultProguardFile("proguard-android-optimize.txt")) resValue("mipmap", "floris_app_icon", "@mipmap/ic_app_icon_release") resValue("mipmap", "floris_app_icon_round", "@mipmap/ic_app_icon_release_round") resValue("string", "floris_app_name", "@string/app_name") } } testOptions { unitTests { isIncludeAndroidResources = true } } lintOptions { isAbortOnError = false } } dependencies { implementation("androidx.activity", "activity-ktx", "1.2.1") implementation("androidx.appcompat", "appcompat", "1.2.0") implementation("androidx.core", "core-ktx", "1.3.2") implementation("androidx.fragment", "fragment-ktx", "1.3.0") implementation("androidx.preference", "preference-ktx", "1.1.1") implementation("androidx.constraintlayout", "constraintlayout", "2.0.4") implementation("androidx.lifecycle", "lifecycle-service", "2.2.0") implementation("com.google.android", "flexbox", "2.0.1") // requires jcenter as of version 2.0.1 implementation("com.squareup.moshi", "moshi-kotlin", "1.11.0") implementation("com.squareup.moshi", "moshi-adapters", "1.11.0") implementation("com.google.android.material", "material", "1.3.0") implementation("org.jetbrains.kotlinx", "kotlinx-coroutines-android", "1.4.2") implementation("com.jaredrummler", "colorpicker", "1.1.0") implementation("com.jakewharton.timber", "timber", "4.7.1") implementation("com.nambimobile.widgets", "expandable-fab", "1.0.2") testImplementation("junit", "junit", "4.13.1") testImplementation("org.mockito", "mockito-inline", "3.7.7") testImplementation("org.robolectric", "robolectric", "4.5.1") androidTestImplementation("androidx.test.ext", "junit", "1.1.2") androidTestImplementation("androidx.test.espresso", "espresso-core", "3.3.0") } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3321877 fdroidserver-2.4.0/tests/source-files/eu.siacs.conversations/0000755000175000017500000000000014770510164023074 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/eu.siacs.conversations/build.gradle0000644000175000017500000000675414717152070025366 0ustar00hanshans// Top-level build file where you can add configuration options common to all // sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.3' } } apply plugin: 'com.android.application' repositories { jcenter() mavenCentral() maven { url 'https://maven.google.com' } } configurations { playstoreCompile freeCompile } ext { supportLibVersion = '27.0.2' } dependencies { compile project(':libs:MemorizingTrustManager') playstoreCompile 'com.google.android.gms:play-services-gcm:11.6.2' compile 'org.sufficientlysecure:openpgp-api:10.0' compile 'com.soundcloud.android:android-crop:1.0.1@aar' compile "com.android.support:support-v13:$supportLibVersion" compile "com.android.support:appcompat-v7:$supportLibVersion" compile "com.android.support:support-emoji:$supportLibVersion" freeCompile "com.android.support:support-emoji-bundled:$supportLibVersion" compile 'org.bouncycastle:bcmail-jdk15on:1.52' compile 'org.jitsi:org.otr4j:0.22' compile 'org.gnu.inet:libidn:1.15' compile 'com.google.zxing:core:3.2.1' compile 'com.google.zxing:android-integration:3.2.1' compile 'de.measite.minidns:minidns-hla:0.2.4' compile 'de.timroes.android:EnhancedListView:0.3.4' compile 'me.leolin:ShortcutBadger:1.1.19@aar' compile 'com.kyleduo.switchbutton:library:1.2.8' compile 'org.whispersystems:signal-protocol-java:2.6.2' compile 'com.makeramen:roundedimageview:2.3.0' compile "com.wefika:flowlayout:0.4.1" compile 'net.ypresto.androidtranscoder:android-transcoder:0.2.0' } ext { travisBuild = System.getenv("TRAVIS") == "true" preDexEnabled = System.getProperty("pre-dex", "true") } android { compileSdkVersion 26 buildToolsVersion "26.0.2" defaultConfig { minSdkVersion 14 targetSdkVersion 25 versionCode 245 versionName "1.23.1" archivesBaseName += "-$versionName" applicationId "eu.siacs.conversations" } dexOptions { // Skip pre-dexing when running on Travis CI or when disabled via -Dpre-dex=false. preDexLibraries = preDexEnabled && !travisBuild jumboMode true } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } productFlavors { playstore free } if(new File("signing.properties").exists()) { Properties props = new Properties() props.load(new FileInputStream(file("signing.properties"))) signingConfigs { release { storeFile file(props['keystore']) storePassword props['keystore.password'] keyAlias props['keystore.alias'] keyPassword props['keystore.password'] } } buildTypes.release.signingConfig = signingConfigs.release } lintOptions { disable 'MissingTranslation', 'InvalidPackage', 'MissingQuantity', 'AppCompatResource' } subprojects { afterEvaluate { if (getPlugins().hasPlugin('android') || getPlugins().hasPlugin('android-library')) { configure(android.lintOptions) { disable 'AndroidGradlePluginVersion', 'MissingTranslation' } } } } packagingOptions { exclude 'META-INF/BCKEY.DSA' exclude 'META-INF/BCKEY.SF' } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/eu.siacs.conversations/metadata/0000755000175000017500000000000014770510164024654 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3321877 fdroidserver-2.4.0/tests/source-files/eu.siacs.conversations/metadata/en-US/0000755000175000017500000000000014770510164025603 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/eu.siacs.conversations/metadata/en-US/name.txt0000644000175000017500000000001514717152070027257 0ustar00hanshansConversations././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/fdroid/0000755000175000017500000000000014770510164017735 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3321877 fdroidserver-2.4.0/tests/source-files/fdroid/fdroidclient/0000755000175000017500000000000014770510164022403 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/fdroid/fdroidclient/AndroidManifest.xml0000664000175000017500000005003314717152070026176 0ustar00hanshans ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/fdroid/fdroidclient/build.gradle0000644000175000017500000002017214717152070024663 0ustar00hanshansapply plugin: 'com.android.application' if ( !hasProperty( 'sourceDeps' ) ) { logger.info "Setting up *binary* dependencies for F-Droid (if you'd prefer to build from source, pass the -PsourceDeps argument to gradle while building)." repositories { jcenter() // This is here until we sort out all dependencies from mavenCentral/jcenter. Once all of // the dependencies below have been sorted out, this can be removed. flatDir { dirs 'libs/binaryDeps' } } dependencies { compile 'com.android.support:support-v4:22.1.0', 'com.android.support:appcompat-v7:22.1.0', 'com.android.support:support-annotations:22.1.0', 'org.thoughtcrime.ssl.pinning:AndroidPinning:1.0.0', 'com.nostra13.universalimageloader:universal-image-loader:1.9.4', 'com.google.zxing:core:3.2.0', 'eu.chainfire:libsuperuser:1.0.0.201504231659', // We use a slightly modified spongycastle, see // openkeychain/spongycastle with some changes on top of 1.51.0.0 'com.madgag.spongycastle:pkix:1.51.0.0', 'com.madgag.spongycastle:prov:1.51.0.0', 'com.madgag.spongycastle:core:1.51.0.0' // Upstream doesn't have a binary on mavenCentral/jcenter yet: // https://github.com/kolavar/android-support-v4-preferencefragment/issues/13 compile(name: 'support-v4-preferencefragment-release', ext: 'aar') // Fork for F-Droid, including support for https. Not merged into upstream // yet (seems to be a little unsupported as of late), so not using mavenCentral/jcenter. compile(name: 'nanohttpd-2.1.0') // Upstream doesn't have a binary on mavenCentral. compile(name: 'zipsigner') // Project semi-abandoned, 3.4.1 is from 2011 and we use trunk from 2013 compile(name: 'jmdns') androidTestCompile 'commons-io:commons-io:2.2' } } else { logger.info "Setting up *source* dependencies for F-Droid (because you passed in the -PsourceDeps argument to gradle while building)." repositories { jcenter() } dependencies { compile project(':extern:AndroidPinning') compile project(':extern:UniversalImageLoader:library') compile project(':extern:libsuperuser:libsuperuser') compile project(':extern:nanohttpd:core') compile project(':extern:jmdns') compile project(':extern:zipsigner') compile project(':extern:zxing-core') compile( project(':extern:support-v4-preferencefragment') ) { exclude module: 'support-v4' } // Until the android team updates the gradle plugin version from 0.10.0 to // a newer version, we can't build this from source with our gradle version // of 1.0.0. They use API's which have been moved in the newer plugin. // So yes, this is a little annoying that our "source dependencies" include // a bunch of binaries from jcenter - but the ant build file (which is the // one used to build F-Droid which is distributed on https://f-droid.org // builds these from source - well - not support-v4). // // If the android team gets the build script working with the newer plugin, // then you can find the relevant portions of the ../build.gradle file that // include magic required to make it work at around about the v0.78 git tag. // They have since been removed to clean up the build file. compile 'com.android.support:support-v4:22.1.0', 'com.android.support:appcompat-v7:22.1.0', 'com.android.support:support-annotations:22.1.0' androidTestCompile 'commons-io:commons-io:2.2' } } task cleanBinaryDeps(type: Delete) { enabled = project.hasProperty('sourceDeps') description = "Removes all .jar and .aar files from F-Droid/libs/. Requires the sourceDeps property to be set (\"gradle -PsourceDeps cleanBinaryDeps\")" delete fileTree('libs/binaryDeps') { include '*.aar' include '*.jar' } } task binaryDeps(type: Copy, dependsOn: ':F-Droid:prepareReleaseDependencies') { enabled = project.hasProperty('sourceDeps') description = "Copies .jar and .aar files from subproject dependencies in extern/ to F-Droid/libs. Requires the sourceDeps property to be set (\"gradle -PsourceDeps binaryDeps\")" from ('../extern/' ) { include 'support-v4-preferencefragment/build/outputs/aar/support-v4-preferencefragment-release.aar', 'nanohttpd/core/build/libs/nanohttpd-2.1.0.jar', 'zipsigner/build/libs/zipsigner.jar', 'jmdns/build/libs/jmdns.jar', 'Support/v4/build/libs/support-v4.jar' } into 'libs/binaryDeps' includeEmptyDirs false eachFile { FileCopyDetails details -> // Don't copy to a sub folder such as libs/binaryDeps/Project/build/outputs/aar/project.aar, but // rather libs/binaryDeps/project.aar. details.path = details.name } } android { compileSdkVersion 21 buildToolsVersion '22.0.1' defaultConfig { flavorDimensions "default" productFlavors { devVersion { applicationId "org.fdroid.fdroid.dev" dimension "default" versionCode 949 versionName "0.95-dev" } } } sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } androidTest.setRoot('test') androidTest { manifest.srcFile 'test/AndroidManifest.xml' java.srcDirs = ['test/src'] resources.srcDirs = ['test/src'] aidl.srcDirs = ['test/src'] renderscript.srcDirs = ['test/src'] res.srcDirs = ['test/res'] assets.srcDirs = ['test/assets'] } } buildTypes { release { minifyEnabled false } buildTypes { debug { debuggable true } } } compileOptions { compileOptions.encoding = "UTF-8" // Use Java 1.7, requires minSdk 8 sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } lintOptions { checkReleaseBuilds false abortOnError false } // Enable all Android lint warnings gradle.projectsEvaluated { tasks.withType(JavaCompile) { options.compilerArgs << "-Xlint:all" } } } // This person took the example code below from another blogpost online, however // I lost the reference to it: // http://stackoverflow.com/questions/23297562/gradle-javadoc-and-android-documentation android.applicationVariants.all { variant -> task("generate${variant.name}Javadoc", type: Javadoc) { title = "$name $version API" description "Generates Javadoc for F-Droid." source = variant.javaCompile.source def sdkDir Properties properties = new Properties() File localProps = project.rootProject.file('local.properties') if (localProps.exists()) { properties.load(localProps.newDataInputStream()) sdkDir = properties.getProperty('sdk.dir') } else { sdkDir = System.getenv('ANDROID_HOME') } if (!sdkDir) { throw new ProjectConfigurationException("Cannot find android sdk. Make sure sdk.dir is defined in local.properties or the environment variable ANDROID_HOME is set.", null) } ext.androidJar = "${sdkDir}/platforms/${android.compileSdkVersion}/android.jar" classpath = files(variant.javaCompile.classpath.files) + files(ext.androidJar) options.links("http://docs.oracle.com/javase/7/docs/api/"); options.links("http://d.android.com/reference/"); exclude '**/BuildConfig.java' exclude '**/R.java' } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3321877 fdroidserver-2.4.0/tests/source-files/firebase-allowlisted/0000755000175000017500000000000014770510164022567 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3321877 fdroidserver-2.4.0/tests/source-files/firebase-allowlisted/app/0000755000175000017500000000000014770510164023347 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368094.0 fdroidserver-2.4.0/tests/source-files/firebase-allowlisted/app/build.gradle0000644000175000017500000000015514743421036025626 0ustar00hanshansdependencies { compile 'com.firebase:firebase-jobdispatcher:0.8.4' testCompile 'junit:junit:4.12' } ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368094.0 fdroidserver-2.4.0/tests/source-files/firebase-allowlisted/build.gradle0000644000175000017500000000031114743421036025040 0ustar00hanshansbuildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.3' } } allprojects { repositories { jcenter() } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3321877 fdroidserver-2.4.0/tests/source-files/firebase-suspect/0000755000175000017500000000000014770510164021732 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3321877 fdroidserver-2.4.0/tests/source-files/firebase-suspect/app/0000755000175000017500000000000014770510164022512 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/firebase-suspect/app/build.gradle0000644000175000017500000000015414717152070024770 0ustar00hanshansdependencies { compile 'com.google.firebase:firebase-core:11.6.2' testCompile 'junit:junit:4.12' } ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/firebase-suspect/build.gradle0000644000175000017500000000027514717152070024214 0ustar00hanshansbuildscript { dependencies { classpath 'com.android.tools.build:gradle:2.3.3' } } allprojects { repositories { maven { url "https://maven.google.com" } } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3321877 fdroidserver-2.4.0/tests/source-files/info.guardianproject.ripple/0000755000175000017500000000000014770510164024073 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/info.guardianproject.ripple/build.gradle0000644000175000017500000000062514717152070026354 0ustar00hanshansbuildscript { repositories { maven { url 'file:///usr/share/maven-repo' } maven { url 'https://maven.google.com' } jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.2.2' } } allprojects { repositories { maven { url 'file:///usr/share/maven-repo' } maven { url 'https://maven.google.com' } jcenter() } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/lockfile.test/0000755000175000017500000000000014770510164021234 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3321877 fdroidserver-2.4.0/tests/source-files/lockfile.test/flutter/0000755000175000017500000000000014770510164022721 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/lockfile.test/flutter/.dart_tool/0000755000175000017500000000000014770510164024766 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3321877 fdroidserver-2.4.0/tests/source-files/lockfile.test/flutter/.dart_tool/flutter_gen/0000755000175000017500000000000014770510164027304 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/source-files/lockfile.test/flutter/.dart_tool/flutter_gen/pubspec.yaml0000644000175000017500000000000014766514130031621 0ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/source-files/lockfile.test/flutter/pubspec.lock0000644000175000017500000000000014766514130025224 0ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/source-files/lockfile.test/flutter/pubspec.yaml0000644000175000017500000000000014766514130025236 0ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3321877 fdroidserver-2.4.0/tests/source-files/lockfile.test/javascript/0000755000175000017500000000000014770510164023402 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/source-files/lockfile.test/javascript/package.json0000644000175000017500000000000014766514130025660 0ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/source-files/lockfile.test/javascript/yarn.lock0000644000175000017500000000000014766514130025215 0ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/lockfile.test/rust/0000755000175000017500000000000014770510164022231 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3321877 fdroidserver-2.4.0/tests/source-files/lockfile.test/rust/subdir/0000755000175000017500000000000014770510164023521 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/source-files/lockfile.test/rust/subdir/Cargo.lock0000644000175000017500000000000014766514130025416 0ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/source-files/lockfile.test/rust/subdir/Cargo.toml0000644000175000017500000000000014766514130025441 0ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/lockfile.test/rust/subdir/subdir/0000755000175000017500000000000014770510164025011 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3361876 fdroidserver-2.4.0/tests/source-files/lockfile.test/rust/subdir/subdir/subdir/0000755000175000017500000000000014770510164026301 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/source-files/lockfile.test/rust/subdir/subdir/subdir/Cargo.toml0000644000175000017500000000000014766514130030221 0ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3361876 fdroidserver-2.4.0/tests/source-files/lockfile.test/rust/subdir2/0000755000175000017500000000000014770510164023603 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/source-files/lockfile.test/rust/subdir2/Cargo.toml0000644000175000017500000000000014766514130025523 0ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/open-keychain/0000755000175000017500000000000014770510164021220 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3361876 fdroidserver-2.4.0/tests/source-files/open-keychain/open-keychain/0000755000175000017500000000000014770510164023752 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3361876 fdroidserver-2.4.0/tests/source-files/open-keychain/open-keychain/OpenKeychain/0000755000175000017500000000000014770510164026327 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/open-keychain/open-keychain/OpenKeychain/build.gradle0000644000175000017500000002710114717152070030606 0ustar00hanshansapply plugin: 'com.android.application' apply plugin: 'witness' apply plugin: 'jacoco' apply plugin: 'com.github.kt3k.coveralls' dependencies { // NOTE: Always use fixed version codes not dynamic ones, e.g. 0.7.3 instead of 0.7.+, see README for more information // NOTE: libraries are pinned to a specific build, see below // from local Android SDK compile 'com.android.support:support-v4:22.1.1' compile 'com.android.support:appcompat-v7:22.1.1' compile 'com.android.support:recyclerview-v7:22.1.0' compile 'com.android.support:cardview-v7:22.1.0' // Unit tests in the local JVM with Robolectric // https://developer.android.com/training/testing/unit-testing/local-unit-tests.html // https://github.com/nenick/AndroidStudioAndRobolectric // http://www.vogella.com/tutorials/Robolectric/article.html testCompile 'junit:junit:4.12' testCompile 'org.robolectric:robolectric:3.0-rc3' // UI testing with Espresso androidTestCompile 'com.android.support.test:runner:0.3' androidTestCompile 'com.android.support.test:rules:0.3' androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2' androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.2') { exclude group: 'com.android.support', module: 'appcompat' exclude group: 'com.android.support', module: 'support-v4' exclude module: 'recyclerview-v7' } // Temporary workaround for bug: https://code.google.com/p/android-test-kit/issues/detail?id=136 // from https://github.com/googlesamples/android-testing/blob/master/build.gradle#L21 configurations.all { resolutionStrategy.force 'com.android.support:support-annotations:22.1.1' } // JCenter etc. compile 'com.eftimoff:android-patternview:1.0.1@aar' compile 'com.journeyapps:zxing-android-embedded:2.3.0@aar' compile 'com.journeyapps:zxing-android-integration:2.3.0@aar' compile 'com.google.zxing:core:3.2.0' compile 'com.jpardogo.materialtabstrip:library:1.0.9' compile 'com.getbase:floatingactionbutton:1.9.0' compile 'org.commonjava.googlecode.markdown4j:markdown4j:2.2-cj-1.0' compile 'com.splitwise:tokenautocomplete:1.3.3@aar' compile 'se.emilsjolander:stickylistheaders:2.6.0' compile 'org.sufficientlysecure:html-textview:1.1' compile 'com.mikepenz.materialdrawer:library:2.8.2@aar' compile 'com.mikepenz.iconics:library:0.9.1@aar' compile 'com.mikepenz.iconics:octicons-typeface:2.2.0@aar' compile 'com.mikepenz.iconics:meteocons-typeface:1.1.1@aar' compile 'com.mikepenz.iconics:community-material-typeface:1.0.0@aar' compile 'com.nispok:snackbar:2.10.8' // libs as submodules compile project(':extern:openpgp-api-lib:openpgp-api') compile project(':extern:openkeychain-api-lib:openkeychain-intents') compile project(':extern:spongycastle:core') compile project(':extern:spongycastle:pg') compile project(':extern:spongycastle:pkix') compile project(':extern:spongycastle:prov') compile project(':extern:minidns') compile project(':extern:KeybaseLib:Lib') compile project(':extern:safeslinger-exchange') } // Output of ./gradlew -q calculateChecksums // Comment out the libs referenced as git submodules! dependencyVerification { verify = [ 'com.android.support:support-v4:1e2e4d35ac7fd30db5ce3bc177b92e4d5af86acef2ef93e9221599d733346f56', 'com.android.support:appcompat-v7:9a2355537c2f01cf0b95523605c18606b8d824017e6e94a05c77b0cfc8f21c96', 'com.android.support:recyclerview-v7:522d323079a29bcd76173bd9bc7535223b4af3e5eefef9d9287df1f9e54d0c10', 'com.android.support:cardview-v7:8dc99af71fec000baa4470c3907755264f15f816920861bc015b2babdbb49807', 'com.eftimoff:android-patternview:cec80e7265b8d8278b3c55b5fcdf551e4600ac2c8bf60d8dd76adca538af0b1e', 'com.journeyapps:zxing-android-embedded:702a4f58154dbd9baa80f66b6a15410f7a4d403f3e73b66537a8bfb156b4b718', 'com.journeyapps:zxing-android-integration:562737821b6d34c899b6fd2234ce0a8a31e02ff1fd7c59f6211961ce9767c7c8', 'com.google.zxing:core:7fe5a8ff437635a540e56317649937b768b454795ce999ed5f244f83373dee7b', 'com.jpardogo.materialtabstrip:library:c6ef812fba4f74be7dc4a905faa4c2908cba261a94c13d4f96d5e67e4aad4aaa', 'com.getbase:floatingactionbutton:052aa2a94e49e5dccc97cb99f2add87e8698b84859f0e3ac181100c0bc7640ca', 'org.commonjava.googlecode.markdown4j:markdown4j:e952e825d29e1317d96f79f346bfb6786c7c5eef50bd26e54a80823704b62e13', 'com.splitwise:tokenautocomplete:20bee71cc59b3828eb000b684d46ddf738efd56b8fee453a509cd16fda42c8cb', 'se.emilsjolander:stickylistheaders:8c05981ec5725be33f7cee5e68c13f3db49cd5c75f1aaeb04024920b1ef96ad4', 'org.sufficientlysecure:html-textview:ca24b1522be88378634093815ce9ff1b4920c72e7513a045a7846e14069ef988', 'com.mikepenz.materialdrawer:library:970317ed1a3cb96317f7b8d62ff592b3103eb46dfd68d9b244e7143623dc6d7a', 'com.mikepenz.iconics:library:4698a36ee4c2af765d0a85779c61474d755b90d66a59020105b6760a8a909e9e', 'com.mikepenz.iconics:octicons-typeface:67ed7d456a9ce5f5307b85f955797bfb3dd674e2f6defb31c6b8bbe2ede290be', 'com.mikepenz.iconics:meteocons-typeface:39a8a9e70cd8287cdb119af57a672a41dd09240dba6697f5a0dbda1ccc33298b', 'com.mikepenz.iconics:community-material-typeface:f1c5afee5f0f10d66beb3ed0df977246a02a9c46de4e05d7c0264bcde53b6b7f', 'com.nispok:snackbar:80bebc8e5d8b3d728cd5f2336e2d0c1cc2a6b7dc4b55d36acd6b75a78265590a', // 'OpenKeychain.extern:openpgp-api-lib:f05a9215cdad3a6597e4c5ece6fcec92b178d218195a3e88d2c0937c48dd9580', // 'OpenKeychain.extern:openkeychain-api-lib:50f6ebb5452d3fdc7be137ccf857a0ff44d55539fcb7b91baef495766ed7f429', // 'com.madgag.spongycastle:core:df8fcc028a95ac5ffab3b78c9163f5cfa672e41cd50128ca55d458b6cfbacf4b', // 'com.madgag.spongycastle:pg:160b345b10a2c92dc731453eec87037377f66a8e14a0648d404d7b193c4e380d', // 'com.madgag.spongycastle:pkix:0b4f3301ea12dd9f25d71770e6ea9f75e0611bf53062543e47be5bc15340a7e4', // 'com.madgag.spongycastle:prov:7325942e0b39f5fb35d6380818eed4b826e7dfc7570ad35b696d778049d8c36a', // 'OpenKeychain.extern:minidns:77b1786d29469e3b21f9404827cab811edc857cd68bc732cd57f11307c332eae', // 'OpenKeychain.extern.KeybaseLib:Lib:c91cda4a75692d8664644cd17d8ac962ce5bc0e266ea26673a639805f1eccbdf', // 'OpenKeychain.extern:safeslinger-exchange:d222721bb35408daaab9f46449364b2657112705ee571d7532f81cbeb9c4a73f', // 'OpenKeychain.extern.snackbar:lib:52357426e5275412e2063bdf6f0e6b957a3ea74da45e0aef35d22d9afc542e23', 'com.android.support:support-annotations:7bc07519aa613b186001160403bcfd68260fa82c61cc7e83adeedc9b862b94ae', ] } android { compileSdkVersion rootProject.ext.compileSdkVersion buildToolsVersion rootProject.ext.buildToolsVersion defaultConfig { minSdkVersion 15 targetSdkVersion 22 versionCode 32300 versionName "3.2.3" applicationId "org.sufficientlysecure.keychain" // the androidjunitrunner is broken regarding coverage, see here: // https://code.google.com/p/android/issues/detail?id=170607 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" // this workaround runner fixes the coverage problem, BUT doesn't work // with android studio single test execution. use it to generate coverage // data, but keep the other one otherwis // testInstrumentationRunner "org.sufficientlysecure.keychain.JacocoWorkaroundJUnitRunner" } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // Reference them in the java files with e.g. BuildConfig.ACCOUNT_TYPE. buildConfigField "String", "ACCOUNT_TYPE", "\"org.sufficientlysecure.keychain.account\"" // Reference them in .xml files. resValue "string", "account_type", "org.sufficientlysecure.keychain.account" } debug { applicationIdSuffix ".debug" // Reference them in the java files with e.g. BuildConfig.ACCOUNT_TYPE. buildConfigField "String", "ACCOUNT_TYPE", "\"org.sufficientlysecure.keychain.debug.account\"" // Reference them in .xml files. resValue "string", "account_type", "org.sufficientlysecure.keychain.debug.account" // Enable code coverage (Jacoco) testCoverageEnabled true } } /* * To sign release build, create file gradle.properties in ~/.gradle/ with this content: * * signingStoreLocation=/home/key.store * signingStorePassword=xxx * signingKeyAlias=alias * signingKeyPassword=xxx */ if (project.hasProperty('signingStoreLocation') && project.hasProperty('signingStorePassword') && project.hasProperty('signingKeyAlias') && project.hasProperty('signingKeyPassword')) { println "Found sign properties in gradle.properties! Signing build…" signingConfigs { release { storeFile file(signingStoreLocation) storePassword signingStorePassword keyAlias signingKeyAlias keyPassword signingKeyPassword } } buildTypes.release.signingConfig = signingConfigs.release } else { buildTypes.release.signingConfig = null } // NOTE: Lint is disabled because it slows down builds, // to enable it comment out the code at the bottom of this build.gradle lintOptions { // Do not abort build if lint finds errors abortOnError false checkAllWarnings true htmlReport true htmlOutput file('lint-report.html') } // Disable preDexing, causes com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000) on some systems dexOptions { preDexLibraries = false } packagingOptions { exclude 'LICENSE.txt' } } // apply plugin: 'spoon' task jacocoTestReport(type:JacocoReport) { group = "Reporting" description = "Generate Jacoco coverage reports" classDirectories = fileTree( dir: "${buildDir}/intermediates/classes/debug", excludes: ['**/R.class', '**/R$*.class', '**/*$ViewInjector*.*', '**/BuildConfig.*', '**/Manifest*.*'] ) sourceDirectories = files("${buildDir.parent}/src/main/java") additionalSourceDirs = files([ "${buildDir}/generated/source/buildConfig/debug", "${buildDir}/generated/source/r/debug" ]) executionData = files([ "${buildDir}/jacoco/testDebug.exec", "${buildDir}/outputs/code-coverage/connected/coverage.ec" ]) reports { xml.enabled = true html.enabled = true } } // Fix for: No report file available: [/home/travis/build/open-keychain/open-keychain/OpenKeychain/build/reports/cobertura/coverage.xml, /home/travis/build/open-keychain/open-keychain/OpenKeychain/build/reports/jacoco/test/jacocoTestReport.xml] coveralls { jacocoReportPath 'build/reports/jacoco/jacocoTestReport/jacocoTestReport.xml' } // NOTE: This disables Lint! tasks.whenTaskAdded { task -> if (task.name.contains('lint')) { task.enabled = false } } ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/open-keychain/open-keychain/build.gradle0000664000175000017500000000243014717152070026231 0ustar00hanshansbuildscript { repositories { jcenter() } dependencies { // NOTE: Always use fixed version codes not dynamic ones, e.g. 0.7.3 instead of 0.7.+, see README for more information classpath 'com.android.tools.build:gradle:1.2.3' classpath files('gradle-witness.jar') // bintray dependency to satisfy dependency of openpgp-api lib classpath 'com.novoda:bintray-release:0.2.7' classpath 'org.kt3k.gradle.plugin:coveralls-gradle-plugin:2.0.1' // classpath 'com.stanfy.spoon:spoon-gradle-plugin:1.0.2' } } allprojects { repositories { jcenter() } } task wrapper(type: Wrapper) { gradleVersion = '2.4' } subprojects { tasks.withType(Test) { maxParallelForks = 1 } } // Ignore tests for external spongycastle project(':extern:spongycastle') { subprojects { // Need to re-apply the plugin here otherwise the test property below can't be set. apply plugin: 'java' test.enabled = false } } // SDK Version and Build Tools used by all subprojects // See http://tools.android.com/tech-docs/new-build-system/tips#TOC-Controlling-Android-properties-of-all-your-modules-from-the-main-project. ext { compileSdkVersion = 22 buildToolsVersion = '22.0.1' } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/org.mozilla.rocket/0000755000175000017500000000000014770510164022211 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3361876 fdroidserver-2.4.0/tests/source-files/org.mozilla.rocket/app/0000755000175000017500000000000014770510164022771 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/org.mozilla.rocket/app/build.gradle0000644000175000017500000004054514717152070025257 0ustar00hanshansapply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' apply plugin: 'com.google.android.gms.oss-licenses-plugin' apply from: '../buildSrc/pmd.gradle' apply from: '../buildSrc/checkstyle.gradle' apply from: '../buildSrc/findbugs.gradle' apply from: 'buildscripts/l10n.gradle' android { compileSdkVersion Versions.compile_sdk buildToolsVersion Versions.build_tools defaultConfig { applicationId "org.mozilla" minSdkVersion Versions.min_sdk targetSdkVersion Versions.target_sdk versionCode Versions.version_code versionName Versions.version_name if (SystemEnv.auto_screenshot == "1") { testInstrumentationRunner "org.mozilla.focus.test.runner.ScreenshotTestRunner" testInstrumentationRunnerArguments clearPackageData: 'true' } else { // general UI test, using notAnnotation to filter out auto screenshot classes testInstrumentationRunner "org.mozilla.focus.test.runner.CustomTestRunner" testInstrumentationRunnerArguments clearPackageData: 'true', notAnnotation: 'org.mozilla.focus.annotation.ScreengrabOnly,android.support.test.filters.FlakyTest' } testInstrumentationRunnerArgument 'disableAnalytics', 'true' multiDexEnabled true vectorDrawables { useSupportLibrary false generatedDensities = [] } def bitrise_build_number = System.getenv("BITRISE_BUILD_NUMBER") if (bitrise_build_number?.trim()) { versionCode bitrise_build_number.toInteger() versionNameSuffix "(" + bitrise_build_number + ")" } // used by Room, to test migrations javaCompileOptions { annotationProcessorOptions { arguments = ["room.schemaLocation": "$projectDir/schemas".toString()] } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dexOptions { preDexLibraries true } bundle { language { enableSplit = false } density { enableSplit = false } abi { enableSplit = true } } // We have a three dimensional build configuration: // BUILD TYPE (debug, release) buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' matchingFallbacks = ["firebase"] } debug { def userName = System.getenv("USER") applicationIdSuffix ".debug." + userName versionNameSuffix applicationIdSuffix matchingFallbacks = ["firebase_no_op"] } // Use a separate buildType for coverage: testCoverageEnabled produces slower code (4-5x slower // in places that I've benchmarked), and more importantly seems to break debugging with Android Studio // for some developers (i.e. variables can't be inspected or seen). coverage { initWith debug applicationIdSuffix ".coverage" testCoverageEnabled true matchingFallbacks = ["debug", "firebase_no_op"] } // special build type to develop Firebase related stuff firebase { initWith debug applicationIdSuffix ".debug.firebase" versionNameSuffix applicationIdSuffix matchingFallbacks = ["debug", "firebase"] } } testBuildType "firebase" testOptions { animationsDisabled = true unitTests.returnDefaultValues = true unitTests.includeAndroidResources = true execution 'ANDROID_TEST_ORCHESTRATOR' } // used by Room, to test migrations sourceSets { androidTest.assets.srcDirs += files("$projectDir/schemas".toString()) } flavorDimensions "product", "engine" productFlavors { focus { resConfigs Localization.KEPT_LOCALE dimension "product" applicationIdSuffix ".rocket" } preview { dimension "product" applicationId "gro.allizom.zelda.beta" applicationIdSuffix "" versionNameSuffix ".nightly" } // We can build with two engines: webkit or gecko webkit { dimension "engine" } } variantFilter { variant -> def flavors = variant.flavors*.name // We only need a nightly release for now if (flavors.contains("preview") && variant.buildType.name != "release") { setIgnore(true) } } sourceSets { test { resources { // Make the default asset folder available as test resource folder. Robolectric seems // to fail to read assets for our setup. With this we can just read the files directly // and do not need to rely on Robolectric. srcDir "${projectDir}/src/main/assets/" } } preview { res.srcDir 'src/preview/res' } // used by Room, to test migrations androidTest.assets.srcDirs += files("$projectDir/schemas".toString()) } } repositories { flatDir { dirs 'libs' } mavenCentral() } dependencies { implementation project(':telemetry-annotation') kapt project(':telemetry-compiler') implementation project(':third_party:subsampling-scale-image-view') implementation project(':third_party:glide:annotation') implementation project(':third_party:glide:library') kapt "com.github.bumptech.glide:compiler:${Versions.glide}" implementation project(':firebase') implementation project(':feature-tabs') implementation project(':HttpRequest') implementation project(':httptask') implementation project(':urlutils') implementation project(':fileutils') implementation project(':icon') implementation project(':logger') implementation project(':threadutils') implementation project(':cachedrequestloader') implementation project(':permissionhandler') implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${Versions.kotlin}" // We didn't use CustomTabs so far. This is a build hack to force Android-Components to use // same version of support library as we are. Android-Components depends on CustomTabs which // version will be override by this. // We can get rid of this once Android-Components' issue #404 has been resolve. implementation "com.android.support:customtabs:${Versions.support}" implementation "com.android.support:support-v4:${Versions.support}" implementation "com.android.support:appcompat-v7:${Versions.support}" implementation "com.android.support:design:${Versions.support}" implementation "com.android.support:cardview-v7:${Versions.support}" implementation "com.android.support:recyclerview-v7:${Versions.support}" implementation "com.android.support.constraint:constraint-layout:${Versions.constraint}" implementation "android.arch.work:work-runtime:${Versions.arch_work}" // Architecture components implementation "android.arch.lifecycle:extensions:${Versions.lifecycle}" implementation "android.arch.lifecycle:common-java8:${Versions.lifecycle}" implementation "android.arch.persistence.room:runtime:${Versions.room}" implementation "android.arch.navigation:navigation-fragment:${Versions.navigation}" kapt "android.arch.persistence.room:compiler:${Versions.room}" implementation("com.google.code.findbugs:annotations:${Versions.findbugs}", { // We really only need the SuppressFBWarnings annotation, everything else can be ignored. // Without this we get weird failures due to dependencies. transitive = false }) implementation "org.mozilla.components:browser-session:${Versions.android_components}" implementation "org.mozilla.components:service-telemetry:${Versions.android_components}" implementation "org.mozilla.components:browser-domains:${Versions.android_components}" implementation "org.mozilla.components:ui-autocomplete:${Versions.android_components}" implementation "com.adjust.sdk:adjust-android:${Versions.adjust}" implementation "com.google.android.gms:play-services-analytics:${Versions.firebase}" // Required by Adjust // Required by Adjust implementation "com.airbnb.android:lottie:${Versions.lottie}" testImplementation "junit:junit:${Versions.junit}" testImplementation "org.robolectric:robolectric:${Versions.robolectric}" testImplementation "org.mockito:mockito-core:${Versions.mockito}" androidTestImplementation("com.android.support.test.espresso:espresso-core:${Versions.espresso}", { exclude group: 'com.android.support', module: 'support-annotations' }) androidTestImplementation "com.android.support.test:runner:${Versions.test_runner}" androidTestImplementation "com.android.support.test.espresso:espresso-idling-resource:${Versions.espresso}" androidTestImplementation "com.android.support:support-annotations:${Versions.support}" androidTestImplementation "com.android.support.test.uiautomator:uiautomator-v18:${Versions.uiautomator}" androidTestImplementation "com.squareup.okhttp3:mockwebserver:${Versions.mockwebserver}" androidTestImplementation "android.arch.persistence.room:testing:${Versions.room}" androidTestImplementation "android.arch.core:core-testing:${Versions.arch_core}" androidTestImplementation("com.android.support.test.espresso:espresso-contrib:${Versions.espresso}", { exclude group: 'com.android.support', module: 'appcompat' exclude group: 'com.android.support', module: 'support-v4' exclude module: 'recyclerview-v7' }) androidTestImplementation "com.android.support.test.espresso:espresso-web:${Versions.espresso}" androidTestImplementation "com.android.support.test.espresso:espresso-intents:${Versions.espresso}" androidTestImplementation "tools.fastlane:screengrab:${Versions.fastlane_screengrab}" androidTestImplementation "com.jraska:falcon:${Versions.jraska_falcon}" androidTestUtil "com.android.support.test:orchestrator:${Versions.test_runner}" // LeakCanary debugImplementation "com.squareup.leakcanary:leakcanary-android:${Versions.leakcanary}" coverageImplementation "com.squareup.leakcanary:leakcanary-android-no-op:${Versions.leakcanary}" releaseImplementation "com.squareup.leakcanary:leakcanary-android-no-op:${Versions.leakcanary}" firebaseImplementation "com.squareup.leakcanary:leakcanary-android:${Versions.leakcanary}" implementation project(':bhaskar') implementation project(':newspoint') implementation project(':partnerrepository') } // ------------------------------------------------------------------------------------------------- // LeakCanary - Ensure the no-op dependency is always used in JVM tests. // ------------------------------------------------------------------------------------------------- configurations.all { config -> if (config.name.contains('UnitTest') || config.name.contains('AndroidTest')) { config.resolutionStrategy.eachDependency { details -> if (details.requested.group == 'com.squareup.leakcanary' && details.requested.name == 'leakcanary-android') { details.useTarget(group: details.requested.group, name: 'leakcanary-android-no-op', version: details.requested.version) } } } } // ------------------------------------------------------------------------------------------------- // Generate blocklists // ------------------------------------------------------------------------------------------------- def blockListOutputDir = 'src/webkit/res/raw' task buildBlocklists(type: Copy) { from('../shavar-prod-lists') { include '*.json' } into blockListOutputDir // Android can't handle dashes in the filename, so we need to rename: rename 'disconnect-blacklist.json', 'blocklist.json' rename 'disconnect-entitylist.json', 'entitylist.json' // google_mapping.json already has an expected name } clean.doLast { file(blockListOutputDir).deleteDir() } tasks.whenTaskAdded { task -> def name = task.name if (name.contains("generate") && name.contains("Webkit") && name.contains("Resources")) { task.dependsOn buildBlocklists } } // ------------------------------------------------------------------------------------------------- // Adjust: Read token from environment variable (Only release builds) // ------------------------------------------------------------------------------------------------- android.applicationVariants.all { variant -> def variantName = variant.getName() print(variantName + ": ") // release and nightly will have Adjust. just nightly will use sandbox environment. if (variantName.contains("Release")) { def token = System.getenv("ADJUST_TOKEN_FOCUS") ?: null if (token != null) { buildConfigField 'String', 'ADJUST_TOKEN', '"' + token + '"' if (variantName.contains("preview")) { buildConfigField 'String', 'ADJUST_ENVIRONMENT', 'com.adjust.sdk.AdjustConfig.ENVIRONMENT_SANDBOX' } else if (variantName.contains("focus")) { buildConfigField 'String', 'ADJUST_ENVIRONMENT', 'com.adjust.sdk.AdjustConfig.ENVIRONMENT_PRODUCTION' } else { buildConfigField 'String', 'ADJUST_ENVIRONMENT', 'null' } println "Added adjust token set from environment variable" def tracker = System.getenv("ADJUST_SIDELOAD_TRACKER") ?: null if (tracker != null) { buildConfigField 'String', 'ADJUST_DEFAULT_TRACKER', '"' + tracker + '"' } else { buildConfigField 'String', 'ADJUST_DEFAULT_TRACKER', 'null' logger.error(variant.getName() + ": Not setting adjust default tracker (environment variable not set)") } } else { buildConfigField 'String', 'ADJUST_TOKEN', 'null' buildConfigField 'String', 'ADJUST_ENVIRONMENT', 'null' buildConfigField 'String', 'ADJUST_DEFAULT_TRACKER', 'null' println("Not setting adjust token (environment variable not set)") } } else { buildConfigField 'String', 'ADJUST_TOKEN', 'null' buildConfigField 'String', 'ADJUST_ENVIRONMENT', 'null' buildConfigField 'String', 'ADJUST_DEFAULT_TRACKER', 'null' println("Not setting adjust token (Not a focus release build)") } if (variant.buildType.name == "release" || variant.buildType.name == "firebase") { variant.assemble.doFirst { if (SystemEnv.google_app_id == null || SystemEnv.default_web_client_id == null || SystemEnv.firebase_database_url == null || SystemEnv.gcm_defaultSenderId == null || SystemEnv.google_api_key == null || SystemEnv.google_crash_reporting_api_key == null || SystemEnv.project_id == null) { logger.warn("If you want to enable Firebase, please follow the steps:") logger.warn("1. Download google-services.json and put it in the folder where you run below command.") logger.warn("2. Run 'python./tools/firebase/firebase_setup.py' and follow the steps.\n") } } } } tasks.whenTaskAdded { task -> if (name.contains("compile")) { task.dependsOn generatePreviewLocaleList task.dependsOn generateFocusLocaleList } } tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { kotlinOptions { kotlinOptions.allWarningsAsErrors = true } } afterEvaluate { check.dependsOn 'findbugs', 'pmd', 'checkstyle', 'checkTelemetryDocDirty', 'ktlint' } task checkTelemetryDocDirty() { doLast { Process p = Runtime.getRuntime().exec("git diff ./docs/events.md"); p.waitFor(); BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); StringBuilder sb = new StringBuilder(); String line = ""; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } if (sb.length() > 0) { throw new GradleException("events.md is drity, please commit the change first.\n" + sb.toString()) } } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3361876 fdroidserver-2.4.0/tests/source-files/org.noise_planet.noisecapture/0000755000175000017500000000000014770510164024434 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3361876 fdroidserver-2.4.0/tests/source-files/org.noise_planet.noisecapture/app/0000755000175000017500000000000014770510164025214 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368094.0 fdroidserver-2.4.0/tests/source-files/org.noise_planet.noisecapture/app/build.gradle0000644000175000017500000001014214743421036027470 0ustar00hanshansapply plugin: 'com.android.application' def getCheckedOutGitCommitHash() { 'git rev-parse --verify --short HEAD'.execute().text.trim() } def getAvailableLocales() { new File("app/src/main/res").list(new FilenameFilter() { @Override boolean accept(File dir, String name) { return name.startsWith("values-") && new File(new File(dir,name), "strings.xml").exists(); } }).collect() { fold -> fold.substring("values-".length())}.join(",") } android { compileSdkVersion 30 buildToolsVersion '30.0.0' def signingFilePath = System.getProperty("user.home") + "/.idea/signing.gradle" if (new File(signingFilePath).exists()) { apply from: signingFilePath } defaultConfig { applicationId "org.noise_planet.noisecapture" minSdkVersion 15 targetSdkVersion 30 versionCode 55 versionName "1.2.19" // Store build date in apk buildConfigField "long", "TIMESTAMP", System.currentTimeMillis() + "L" buildConfigField "String", "GITHASH", "\"${getCheckedOutGitCommitHash().toString()}\"" buildConfigField "String", "SUPPORTEDLOCALES", "\"${getAvailableLocales()}\"" // Enabling multidex support. multiDexEnabled false vectorDrawables.useSupportLibrary = true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } dexOptions { javaMaxHeapSize "4g" } lintOptions { abortOnError false disable 'MissingTranslation' } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' if (new File(signingFilePath).exists()) { signingConfig signingConfigs.release } } debug { debuggable true if (new File(signingFilePath).exists()) { signingConfig signingConfigs.debug } } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } testOptions { unitTests { includeAndroidResources = true } } } // For using the MPAndroidChart package // https://github.com/PhilJay/MPAndroidChart // Apache License, Version 2.0 task listrepos { doLast { println "Repositories:" project.repositories.each { println "Name: " + it.name + "; url: " + it.url } } } repositories { mavenLocal() } dependencies { implementation 'com.github.PhilJay:MPAndroidChart:v2.2.5' implementation 'org.slf4j:slf4j-simple:1.7.12' implementation name: 'org/noise-planet/jwarble/0.2.3/jwarble-0.2.3' implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.10' implementation group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.9.10' // multithreaded FFT for realtime visualisation of spectrum only implementation 'com.github.wendykierp:JTransforms:3.1' implementation 'org.apache.commons:commons-math3:3.5' implementation 'androidx.appcompat:appcompat:1.0.0' implementation 'com.google.android.material:material:1.0.0' implementation 'androidx.vectordrawable:vectordrawable:1.0.0' implementation 'com.nhaarman.supertooltips:library:3.0.0' //compile 'com.android.support:multidex:1.0.0' // Testing-only dependencies // Force usage of support annotations in the test app, since it is internally used by the runner module. implementation 'androidx.constraintlayout:constraintlayout:1.1.3' androidTestImplementation 'androidx.annotation:annotation:1.0.0' androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test:rules:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0' // unit test testImplementation group: 'org.robolectric', name: 'robolectric', version: '4.3.1' testImplementation 'junit:junit:4.12' testImplementation group: 'com.googlecode.soundlibs', name: 'jorbis', version: '0.0.17.4' implementation project(':sosfilter') } ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368094.0 fdroidserver-2.4.0/tests/source-files/org.noise_planet.noisecapture/settings.gradle0000644000175000017500000000003314743421036027447 0ustar00hanshansinclude 'sosfilter', 'app' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3361876 fdroidserver-2.4.0/tests/source-files/org.noise_planet.noisecapture/sosfilter/0000755000175000017500000000000014770510164026446 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368094.0 fdroidserver-2.4.0/tests/source-files/org.noise_planet.noisecapture/sosfilter/build.gradle0000644000175000017500000000145614743421036030732 0ustar00hanshansapply plugin: 'java' apply plugin: 'idea' apply plugin: 'java' group = 'org.orbisgis' version = '1.0-SNAPSHOT' description = """Signal processing, A-weighting and third-octave bands filtering""" compileJava { sourceCompatibility = 1.7 targetCompatibility = 1.7 } repositories { mavenCentral() } dependencies { compile group: 'org.slf4j', name: 'slf4j-api', version:'1.7.12' compile group: 'com.github.wendykierp', name: 'JTransforms', version:'3.1' testCompile group: 'org.slf4j', name: 'slf4j-simple', version:'1.7.12' testCompile group: 'junit', name: 'junit', version:'4.12' } // Copy resource for unit tests task copyTestResources(type: Copy) { from "${projectDir}/src/test/resources" into "${buildDir}/classes/test" } processTestResources.dependsOn copyTestResources ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3361876 fdroidserver-2.4.0/tests/source-files/org.piepmeyer.gauguin/0000755000175000017500000000000014770510164022711 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/source-files/org.piepmeyer.gauguin/build.gradle.kts0000644000175000017500000000214414766514130025773 0ustar00hanshansimport java.net.URI buildscript { dependencies { classpath("com.android.tools.build:gradle:8.6.0") } } plugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.android.library) apply false alias(libs.plugins.kotlin.android) apply false alias(libs.plugins.kotlin.jvm) apply false alias(libs.plugins.sonarqube) alias(libs.plugins.ktlint) alias(libs.plugins.ksp) alias(libs.plugins.roborazzi) apply false alias(libs.plugins.gms) apply false } sonarqube { properties { property("sonar.projectKey", "org.piepmeyer.gauguin") property("sonar.organization", "meikpiep") property("sonar.verbose", "true") property("sonar.host.url", "https://sonarcloud.io") } } tasks.sonar { onlyIf("There is no property 'buildserver'") { project.hasProperty("buildserver") } dependsOn(":gauguin-app:lint") } allprojects { repositories { mavenCentral() google() maven { url = URI("https://jitpack.io") } } } subprojects { apply(plugin = "org.jlleitschuh.gradle.ktlint") } ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/source-files/org.piepmeyer.gauguin/libs.versions.toml0000644000175000017500000001406414766514130026415 0ustar00hanshans[versions] kotlin = "1.9.23" koin = "3.5.6" koin-annotations="1.3.1" kotest = "5.9.1" kotest-extensions = "1.3.0" kotlin-coroutines = "1.8.1" android-gradle-plugin = "8.6.0" androidUiTestingUtils = "2.3.3" roborazzi = "1.26.0" [libraries] kotlin-coroutines-core = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "kotlin-coroutines" } kotlin-coroutines-debug = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-debug", version.ref = "kotlin-coroutines" } kotlin-serialization = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version = "1.6.3" } logging-kotlin = { group = "io.github.oshai", name = "kotlin-logging-jvm", version = "6.0.9" } logging-slf = { group = "org.slf4j", name = "slf4j-api", version = "2.0.13" } logging-logback-android = { group = "com.github.tony19", name = "logback-android", version = "3.0.0" } logging-logback-kotlin = { group = "ch.qos.logback", name = "logback-classic", version = "1.5.6" } android-material = { group = "com.google.android.material", name = "material", version = "1.12.0" } androidx-annotation = { group = "androidx.annotation", name = "annotation", version = "1.8.2" } androidx-ktx = { group = "androidx.core", name = "core-ktx", version = "1.13.1" } androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version = "2.1.4" } androidx-drawerlayout = { group = "androidx.drawerlayout", name = "drawerlayout", version = "1.2.0" } androidx-fragment = { group = "androidx.fragment", name = "fragment-ktx", version = "1.8.3" } androidx-gridlayout = { group = "androidx.gridlayout", name = "gridlayout", version = "1.0.0" } androidx-lifecycle-runtime = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version = "2.8.5" } androidx-lifecycle-viewmodel = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-ktx", version = "2.8.5" } androidx-preference = { group = "androidx.preference", name = "preference-ktx", version = "1.2.1" } androidx-recyclerview = { group = "androidx.recyclerview", name = "recyclerview", version = "1.3.2" } androidx-transition = { group = "androidx.transition", name = "transition", version = "1.5.1" } androidx-window = { group = "androidx.window", name = "window", version = "1.3.0" } androidx-window-core = { group = "androidx.window", name = "window-core", version = "1.3.0" } androidx-test-junit-ktx = { group = "androidx.test.ext", name = "junit-ktx", version = "1.2.1" } androidx-test-rules = { group = "androidx.test", name = "rules", version = "1.6.1" } androidx-test-runner = { group = "androidx.test", name = "runner", version = "1.6.2" } koin-core = { group = "io.insert-koin", name = "koin-core", version.ref = "koin" } koin-annotations = { group = "io.insert-koin", name = "koin-annotations", version.ref = "koin-annotations" } koin-ksp-compiler = { group = "io.insert-koin", name = "koin-ksp-compiler", version.ref = "koin-annotations" } koin-test = { group = "io.insert-koin", name = "koin-test", version.ref = "koin" } koin-android = { group = "io.insert-koin", name = "koin-android", version.ref = "koin" } kotest-runner = { group = "io.kotest", name = "kotest-runner-junit5", version.ref = "kotest" } kotest-assertions = { group = "io.kotest", name = "kotest-assertions-core", version.ref = "kotest" } kotest-parametrizedtests = { group = "io.kotest", name = "kotest-framework-datatest", version.ref = "kotest" } kotest-koin = { group = "io.kotest.extensions", name = "kotest-extensions-koin", version.ref = "kotest-extensions" } test-mockk = { group = "io.mockk", name = "mockk", version = "1.13.11" } androiduitestingutils-utils = { group = "com.github.sergio-sastre.AndroidUiTestingUtils", name = "utils", version.ref = "androidUiTestingUtils" } androiduitestingutils-robolectric = { group = "com.github.sergio-sastre.AndroidUiTestingUtils", name = "robolectric", version.ref = "androidUiTestingUtils" } roboelectric = { group = "org.robolectric", name = "robolectric", version = "4.13" } roborazzi = { group = "io.github.takahirom.roborazzi", name = "roborazzi", version.ref = "roborazzi" } roborazzi-junit = { group = "io.github.takahirom.roborazzi", name = "roborazzi-junit-rule", version.ref = "roborazzi" } junit-vintage-engine = { group = "org.junit.vintage", name = "junit-vintage-engine", version = "5.10.3" } thirdparty-konfetti = { group = "nl.dionsegijn", name = "konfetti-xml", version = "2.0.4" } #thirdparty-ferriswheel = { group = "ru.github.igla", name = "ferriswheel", version = "1.2" } thirdparty-navigationdrawer = { group = "com.mikepenz", name = "materialdrawer", version = "9.0.2" } thirdparty-balloon = { group = "com.github.skydoves", name = "balloon", version = "1.6.7" } thirdparty-vico = { group = "com.patrykandpatrick.vico", name = "views", version = "2.0.0-alpha.25" } thirdparty-androidplot = { group = "com.androidplot", name = "androidplot-core", version = "1.5.11" } thirdparty-leakcanary = { group = "com.squareup.leakcanary", name = "leakcanary-android", version = "2.14" } [plugins] android-application = { id = "com.android.application", version.ref = "android-gradle-plugin" } android-library = { id = "com.android.library", version.ref = "android-gradle-plugin" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } sonarqube = { id = "org.sonarqube", version = "5.0.0.4638" } ktlint = { id = "org.jlleitschuh.gradle.ktlint", version = "12.1.1" } ksp = { id = "com.google.devtools.ksp", version = "1.9.23-1.0.20" } roborazzi = { id = "io.github.takahirom.roborazzi", version.ref = "roborazzi" } gms = { id = "com.google.gms.google-services", version = "1" } [bundles] logging = ["logging-kotlin", "logging-slf"] kotest = ["kotest-runner", "kotest-assertions", "kotest-parametrizedtests", "kotest-koin"] koin = ["koin-core", "koin-annotations", "koin-ksp-compiler"] androidx-test = ["androidx-test-junit-ktx", "androidx-test-rules", "androidx-test-runner"] screenshotTests = ["androiduitestingutils-utils", "androiduitestingutils-robolectric", "roboelectric", "roborazzi", "roborazzi-junit", "junit-vintage-engine"] ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/source-files/org.piepmeyer.gauguin/settings.gradle.kts0000644000175000017500000000065614766514130026542 0ustar00hanshanspluginManagement { repositories { google() mavenCentral() gradlePluginPortal() } } dependencyResolutionManagement { versionCatalogs { create("libs") { from(files("libs.versions.toml")) } } } plugins { id("org.gradle.toolchains.foojay-resolver-convention") version ("0.8.0") } rootProject.name = "gauguin" include(":gauguin-app") include(":gauguin-core") ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3361876 fdroidserver-2.4.0/tests/source-files/org.tasks/0000755000175000017500000000000014770510164020401 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3361876 fdroidserver-2.4.0/tests/source-files/org.tasks/app/0000755000175000017500000000000014770510164021161 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/org.tasks/app/build.gradle.kts0000644000175000017500000002052214717152070024240 0ustar00hanshansimport com.android.build.gradle.api.ApplicationVariant plugins { id("com.android.application") id("checkstyle") id("io.fabric") id("com.cookpad.android.licensetools") kotlin("android") } repositories { jcenter() google() maven(url = "https://jitpack.io") } android { bundle { language { enableSplit = false } } dexOptions { javaMaxHeapSize = "2g" } lintOptions { setLintConfig(file("lint.xml")) textOutput("stdout") textReport = true } compileSdkVersion(Versions.targetSdk) defaultConfig { testApplicationId = "org.tasks.test" applicationId = "org.tasks" versionCode = 651 versionName = "7.6.1" targetSdkVersion(Versions.targetSdk) minSdkVersion(Versions.minSdk) multiDexEnabled = true testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" javaCompileOptions { annotationProcessorOptions { arguments["room.schemaLocation"] = "$projectDir/schemas" } } } signingConfigs { create("release") { val tasksKeyAlias: String? by project val tasksStoreFile: String? by project val tasksStorePassword: String? by project val tasksKeyPassword: String? by project keyAlias = tasksKeyAlias storeFile = file(tasksStoreFile?: "none") storePassword = tasksStorePassword keyPassword = tasksKeyPassword } } compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } @Suppress("LocalVariableName") buildTypes { getByName("debug") { val tasks_mapbox_key_debug: String? by project val tasks_google_key_debug: String? by project applicationIdSuffix = ".debug" resValue("string", "mapbox_key", tasks_mapbox_key_debug ?: "") resValue("string", "google_key", tasks_google_key_debug ?: "") isTestCoverageEnabled = true } getByName("release") { val tasks_mapbox_key: String? by project val tasks_google_key: String? by project resValue("string", "mapbox_key", tasks_mapbox_key ?: "") resValue("string", "google_key", tasks_google_key ?: "") isMinifyEnabled = true proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard.pro") signingConfig = signingConfigs.getByName("release") } } applicationVariants.all(object : Action { override fun execute(variant: ApplicationVariant) { variant.resValue("string", "app_package", variant.applicationId) } }) flavorDimensions("store") productFlavors { create("generic") { setDimension("store") proguardFile("generic.pro") } create("googleplay") { setDimension("store") } create("amazon") { setDimension("store") } } viewBinding { isEnabled = true } dataBinding { isEnabled = true } packagingOptions { exclude("META-INF/*.kotlin_module") } } configure { configFile = project.file("google_checks.xml") toolVersion = "8.16" } configurations.all { exclude(group = "com.google.guava", module = "guava-jdk5") exclude(group = "org.apache.httpcomponents", module = "httpclient") exclude(group = "com.google.http-client", module = "google-http-client-apache") resolutionStrategy { force("com.squareup.okhttp3:okhttp:" + Versions.okhttp) } } val googleplayImplementation by configurations val amazonImplementation by configurations dependencies { implementation("com.gitlab.bitfireAT:dav4jvm:1.0") implementation("com.gitlab.bitfireAT:ical4android:be6d515db8") { exclude(group = "org.threeten", module = "threetenbp") } implementation("com.gitlab.bitfireAT:cert4android:1488e39a66") annotationProcessor("com.google.dagger:dagger-compiler:${Versions.dagger}") implementation("com.google.dagger:dagger:${Versions.dagger}") implementation("androidx.room:room-rxjava2:${Versions.room}") annotationProcessor("androidx.room:room-compiler:${Versions.room}") implementation("androidx.lifecycle:lifecycle-extensions:2.1.0") implementation("io.reactivex.rxjava2:rxandroid:2.1.1") implementation("androidx.paging:paging-runtime:2.1.1") annotationProcessor("com.jakewharton:butterknife-compiler:${Versions.butterknife}") implementation("com.jakewharton:butterknife:${Versions.butterknife}") debugImplementation("com.facebook.flipper:flipper:${Versions.flipper}") debugImplementation("com.facebook.flipper:flipper-network-plugin:${Versions.flipper}") debugImplementation("com.facebook.soloader:soloader:0.8.0") debugImplementation("com.squareup.leakcanary:leakcanary-android:${Versions.leakcanary}") implementation("org.jetbrains.kotlin:kotlin-stdlib:${Versions.kotlin}") implementation("io.github.luizgrp.sectionedrecyclerviewadapter:sectionedrecyclerviewadapter:2.0.0") implementation("androidx.multidex:multidex:2.0.1") implementation("me.saket:better-link-movement-method:2.2.0") implementation("com.squareup.okhttp3:okhttp:${Versions.okhttp}") implementation("com.google.code.gson:gson:2.8.5") implementation("com.github.rey5137:material:1.2.5") implementation("com.nononsenseapps:filepicker:4.2.1") implementation("com.google.android.material:material:1.1.0-rc01") implementation("androidx.annotation:annotation:1.1.0") implementation("androidx.constraintlayout:constraintlayout:2.0.0-beta4") implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.0.0") implementation("com.jakewharton.timber:timber:4.7.1") implementation("com.jakewharton.threetenabp:threetenabp:1.2.1") implementation("com.google.guava:guava:27.1-android") implementation("com.jakewharton:process-phoenix:2.0.0") implementation("com.google.android.apps.dashclock:dashclock-api:2.0.0") implementation("com.twofortyfouram:android-plugin-api-for-locale:1.0.2") implementation("com.rubiconproject.oss:jchronic:0.2.6") { isTransitive = false } implementation("org.scala-saddle:google-rfc-2445:20110304") { isTransitive = false } implementation("com.wdullaer:materialdatetimepicker:4.0.1") implementation("me.leolin:ShortcutBadger:1.1.22@aar") implementation("com.google.apis:google-api-services-tasks:v1-rev59-1.25.0") implementation("com.google.apis:google-api-services-drive:v3-rev188-1.25.0") implementation("com.google.api-client:google-api-client-android:1.30.7") implementation("androidx.work:work-runtime:${Versions.work}") implementation("com.mapbox.mapboxsdk:mapbox-android-sdk:7.3.0") implementation("com.mapbox.mapboxsdk:mapbox-sdk-services:4.6.0") googleplayImplementation("com.crashlytics.sdk.android:crashlytics:${Versions.crashlytics}") googleplayImplementation("com.google.firebase:firebase-analytics:${Versions.firebase}") googleplayImplementation("com.google.android.gms:play-services-location:17.0.0") googleplayImplementation("com.google.android.gms:play-services-maps:17.0.0") googleplayImplementation("com.google.android.libraries.places:places:2.1.0") googleplayImplementation("com.android.billingclient:billing:1.2.2") amazonImplementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar")))) amazonImplementation("com.crashlytics.sdk.android:crashlytics:${Versions.crashlytics}") amazonImplementation("com.google.firebase:firebase-core:${Versions.firebase}") androidTestAnnotationProcessor("com.google.dagger:dagger-compiler:${Versions.dagger}") androidTestAnnotationProcessor("com.jakewharton:butterknife-compiler:${Versions.butterknife}") androidTestImplementation("com.google.dexmaker:dexmaker-mockito:1.2") androidTestImplementation("com.natpryce:make-it-easy:4.0.1") androidTestImplementation("androidx.test:runner:1.2.0") androidTestImplementation("androidx.test:rules:1.2.0") androidTestImplementation("androidx.test.ext:junit:1.1.1") androidTestImplementation("androidx.annotation:annotation:1.1.0") } apply(mapOf("plugin" to "com.google.gms.google-services")) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/org.tasks/build.gradle0000644000175000017500000000035014717152070022655 0ustar00hanshans buildscript { repositories { mavenCentral() } dependencies { classpath 'org.owasp:dependency-check-gradle:1.3.2.1' } } apply plugin: 'org.owasp.dependencycheck' dependencyCheck { format='JSON' } ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/org.tasks/build.gradle.kts0000644000175000017500000000147214717152070023463 0ustar00hanshansbuildscript { repositories { jcenter() google() maven("https://maven.fabric.io/public") } dependencies { classpath("com.android.tools.build:gradle:3.6.0-rc01") classpath("com.google.gms:google-services:4.3.3") // https://docs.fabric.io/android/changelog.html#fabric-gradle-plugin classpath("io.fabric.tools:gradle:1.31.2") classpath("com.github.ben-manes:gradle-versions-plugin:0.27.0") classpath("com.cookpad.android.licensetools:license-tools-plugin:1.7.0") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.kotlin}") } } plugins { id("com.github.ben-manes.versions") version "0.21.0" } tasks.getByName("wrapper") { gradleVersion = "5.6.4" distributionType = Wrapper.DistributionType.ALL } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3361876 fdroidserver-2.4.0/tests/source-files/org.tasks/buildSrc/0000755000175000017500000000000014770510164022150 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/org.tasks/buildSrc/build.gradle.kts0000644000175000017500000000007414717152070025227 0ustar00hanshansplugins { `kotlin-dsl` } repositories { jcenter() }././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/org.tasks/settings.gradle.kts0000644000175000017500000000002014717152070024210 0ustar00hanshansinclude(":app") ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/osmandapp/0000755000175000017500000000000014770510164020450 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3361876 fdroidserver-2.4.0/tests/source-files/osmandapp/osmand/0000755000175000017500000000000014770510164021731 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/osmandapp/osmand/build.gradle0000644000175000017500000002026414717152070024213 0ustar00hanshansapply plugin: 'com.android.application' // Global Parameters accepted // APK_NUMBER_VERSION - version number of apk // APK_VERSION - build number like #9999Z, for dev builds appended to app_version like 2.0.0 in no_translate.xml) // flavor Z : M=-master, D=-design, B=-Blackberry, MD=-main-default, MQA=-main-qt-arm, MQDA=-main-qt-default-arm, S=-sherpafy // TARGET_APP_NAME - app name // APP_EDITION - date stamp of builds // APP_FEATURES - features +play_market +gps_status -parking_plugin -blackberry -free_version -amazon // 1. To be done Filter fonts // // // // // // // Less important android { compileSdkVersion 21 buildToolsVersion "21.1.2" signingConfigs { development { storeFile file("../keystores/debug.keystore") storePassword "android" keyAlias "androiddebugkey" keyPassword "android" } publishing { storeFile file("/var/lib/jenkins/osmand_key") storePassword System.getenv("OSMAND_APK_PASSWORD") keyAlias "osmand" keyPassword System.getenv("OSMAND_APK_PASSWORD") } } defaultConfig { minSdkVersion 9 targetSdkVersion 21 versionCode System.getenv("APK_NUMBER_VERSION") ? System.getenv("APK_NUMBER_VERSION").toInteger() : versionCode //versionName already assigned in code //versionName System.getenv("APK_VERSION")? System.getenv("APK_VERSION").toString(): versionName } lintOptions { lintConfig file("lint.xml") abortOnError false warningsAsErrors false } // This is from OsmAndCore_android.aar - for some reason it's not inherited aaptOptions { // Don't compress any embedded resources noCompress "qz" } dexOptions { jumboMode = true } sourceSets { main { manifest.srcFile "AndroidManifest.xml" jni.srcDirs = [] jniLibs.srcDirs = ["libs"] aidl.srcDirs = ["src"] java.srcDirs = ["src"] resources.srcDirs = ["src"] renderscript.srcDirs = ["src"] res.srcDirs = ["res"] assets.srcDirs = ["assets"] } free { manifest.srcFile "AndroidManifest-free.xml" } legacy { jniLibs.srcDirs = ["libgnustl"] } } flavorDimensions "version", "coreversion", "abi" productFlavors { // ABI armv7 { flavorDimension "abi" ndk { abiFilter "armeabi-v7a" } } armv5 { flavorDimension "abi" ndk { abiFilter "armeabi" } } x86 { flavorDimension "abi" ndk { abiFilter "x86" } } mips { flavorDimension "abi" ndk { abiFilter "mips" } } fat { flavorDimension "abi" } // Version free { flavorDimension "version" applicationId "net.osmand" } full { flavorDimension "version" applicationId "net.osmand.plus" } // CoreVersion legacy { flavorDimension "coreversion" } qtcore { flavorDimension "coreversion" } qtcoredebug { flavorDimension "coreversion" } } buildTypes { debug { // proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt' // minifyEnabled true // proguardFiles 'proguard-project.txt' signingConfig signingConfigs.development } release { // proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt' // minifyEnabled true //proguardFiles 'proguard-project.txt' signingConfig signingConfigs.publishing } } } def replaceNoTranslate(line) { if (line.contains("\"app_name\"") && System.getenv("TARGET_APP_NAME")) { return line.replaceAll(">[^<]*<", ">" + System.getenv("TARGET_APP_NAME") + "<") } if (line.contains("\"app_edition\"") && System.getenv("APP_EDITION")) { return line.replaceAll(">[^<]*<", ">" + System.getenv("APP_EDITION") + "<") } if (line.contains("\"app_version\"") && System.getenv("APK_VERSION")) { return line.replaceAll(">[^<]*<", ">" + System.getenv("APK_VERSION") + "<") } if (line.contains("\"app_version\"") && System.getenv("APK_VERSION_SUFFIX")) { // appends build number to version number for dev builds return line.replaceAll("[^<]*<", ">" + System.getenv("APP_FEATURES") + "<") } return line; } task updateNoTranslate(type: Copy) { from('.') { include 'no_translate.xml' filter { line -> replaceNoTranslate(line); } } into 'res/values/' } task collectVoiceAssets(type: Sync) { from "../../resources/voice" into "assets/voice" include "**/*.p" } task collectHelpContentsAssets(type: Sync) { from "../../help/help" into "assets/help" include "*.html" include "images/**/*.png" from "assets/" into "assets/help" include "style.css" } task collectRoutingResources(type: Sync) { from "../../resources/routing" into "src/net/osmand/router" include "*.xml" } task collectMiscResources(type: Copy) { into "src/net/osmand/osm" from("../../resources/obf_creation") { include "rendering_types.xml" } from("../../resources/poi") { include "poi_types.xml" } } task collectRenderingStylesResources(type: Sync) { from "../../resources/rendering_styles" into "src/net/osmand/render" include "*.xml" } task collectRegionsInfoResources(type: Copy) { from "../../resources/countries-info" into "src/net/osmand/map" include "regions.ocbf" } task copyStyleIcons(type: Copy) { from "../../resources/rendering_styles/style-icons/" into "res/" include "**/*.png" } task collectExternalResources << {} collectExternalResources.dependsOn collectVoiceAssets, collectHelpContentsAssets, collectRoutingResources, collectRenderingStylesResources, collectRegionsInfoResources, collectMiscResources, copyStyleIcons, updateNoTranslate // tasks.whenTaskAdded { task -> // if (task.name.startsWith("generate") && task.name.endsWith("Resources")) { // task.dependsOn collectExternalResources // } // } // Legacy core build import org.apache.tools.ant.taskdefs.condition.Os task buildOsmAndCore(type: Exec) { description "Build Legacy OsmAndCore" if (!Os.isFamily(Os.FAMILY_WINDOWS)) { commandLine "bash", file("./old-ndk-build.sh").getAbsolutePath() } else { commandLine "cmd", "/c", "echo", "Not supported" } } task cleanupDuplicatesInCore() { dependsOn buildOsmAndCore // doesn't work for legacy debug builds doLast { file("libgnustl/armeabi").mkdirs() file("libs/armeabi/libgnustl_shared.so").renameTo(file("libgnustl/armeabi/libgnustl_shared.so")) file("libgnustl/armeabi-v7a").mkdirs() file("libs/armeabi-v7a/libgnustl_shared.so").renameTo(file("libgnustl/armeabi-v7a/libgnustl_shared.so")) file("libgnustl/mips").mkdirs() file("libs/mips/libgnustl_shared.so").renameTo(file("libgnustl/mips/libgnustl_shared.so")) file("libgnustl/x86").mkdirs() file("libs/x86/libgnustl_shared.so").renameTo(file("libgnustl/x86/libgnustl_shared.so")) } } tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn << [collectExternalResources, buildOsmAndCore, cleanupDuplicatesInCore] } clean.dependsOn 'cleanNoTranslate' task cleanNoTranslate() { delete ('res/values/no_translate.xml') } repositories { ivy { name = "OsmAndBinariesIvy" url = "http://builder.osmand.net" layout "pattern", { artifact "ivy/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" } } // mavenCentral() } dependencies { compile project(path: ":OsmAnd-java", configuration: "android") compile project(":eclipse-compile:appcompat") compile fileTree( dir: "libs", include: ["*.jar"], exclude: [ "QtAndroid-bundled.jar", "QtAndroidAccessibility-bundled.jar", "OsmAndCore_android.jar", "OsmAndCore_wrapper.jar"]) // compile "com.github.ksoichiro:android-observablescrollview:1.5.0" // compile "com.android.support:appcompat-v7:21.0.3" // compile "com.github.shell-software:fab:1.0.5" legacyCompile "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@jar" qtcoredebugCompile "net.osmand:OsmAndCore_androidNativeDebug:0.1-SNAPSHOT@aar" qtcoredebugCompile "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@aar" qtcoreCompile "net.osmand:OsmAndCore_androidNativeRelease:0.1-SNAPSHOT@aar" qtcoreCompile "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@aar" } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/osmandapp/osmand/gradle/0000755000175000017500000000000014770510164023167 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3361876 fdroidserver-2.4.0/tests/source-files/osmandapp/osmand/gradle/wrapper/0000755000175000017500000000000014770510164024647 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/osmandapp/osmand/gradle/wrapper/gradle-wrapper.properties0000644000175000017500000000035114717152070031677 0ustar00hanshans#Mon Sep 01 10:23:06 EEST 2014 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/realm/0000755000175000017500000000000014770510164017566 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/realm/react-native/0000755000175000017500000000000014770510164022150 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3521879 fdroidserver-2.4.0/tests/source-files/realm/react-native/android/0000755000175000017500000000000014770510164023570 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/realm/react-native/android/build.gradle0000644000175000017500000003202314717152070026046 0ustar00hanshansbuildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.1.4' classpath 'de.undercouch:gradle-download-task:1.2' } } allprojects { repositories { google() jcenter() mavenLocal() maven { // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm url "$projectDir/../../tests/react-test-app/node_modules/react-native/android" } } } apply plugin: 'com.android.library' apply plugin: 'maven' apply plugin: 'signing' apply plugin: 'de.undercouch.download' import de.undercouch.gradle.tasks.download.Download import org.apache.tools.ant.taskdefs.condition.Os import org.apache.tools.ant.filters.ReplaceTokens // We download various C++ open-source dependencies into downloads. // We then copy both the downloaded code and our custom makefiles and headers into third-party-ndk. // After that we build native code from src/main/jni with module path pointing at third-party-ndk. ext.coreVersion = getDependenciesVersion("REALM_CORE_VERSION").trim() ext.syncVersion = getDependenciesVersion("REALM_SYNC_VERSION").trim() def currentVersion = getDependenciesVersion("VERSION").trim() println "Realm Core Version: $ext.coreVersion" println "Realm Sync Version: $ext.syncVersion" def downloadsDir = new File("$projectDir/downloads") def jscDownloadDir = new File("$projectDir/src/main/jni/jsc") def coreDownloadDir = new File("$projectDir/src/main/jni") def publishDir = new File("$projectDir/../../android/") // to build with sync run: ./gradlew assembleDebug -PbuildWithSync=true ext.buildSync = project.hasProperty('buildWithSync') ? project.getProperty('buildWithSync').toBoolean() : true task generateVersionClass(type: Copy) { from 'src/main/templates/Version.java' into 'build/generated-src/main/java/io/realm/react' filter(ReplaceTokens, tokens: [version: currentVersion]) outputs.upToDateWhen { false } } task createNativeDepsDirectories { downloadsDir.mkdirs() } task downloadJSCHeaders(type: Download) { def jscAPIBaseURL = 'https://svn.webkit.org/repository/webkit/!svn/bc/174650/trunk/Source/JavaScriptCore/API/' def jscHeaderFiles = ['JSBase.h', 'JSContextRef.h', 'JSObjectRef.h', 'JSRetainPtr.h', 'JSStringRef.h', 'JSValueRef.h', 'WebKitAvailability.h'] def output = new File(jscDownloadDir, 'JavaScriptCore') output.mkdirs() src(jscHeaderFiles.collect { headerName -> "$jscAPIBaseURL$headerName" }) onlyIfNewer true overwrite false dest output } task downloadRealmCore(type: Download) { if (project.buildSync) { src "https://static.realm.io/downloads/sync/realm-sync-android-${project.syncVersion}.tar.gz" } else { src "https://static.realm.io/downloads/core/realm-core-android-${project.coreVersion}.tar.gz" } onlyIfNewer true overwrite true if (project.buildSync) { dest new File(downloadsDir, "realm-core-android-${project.syncVersion}.tar.gz") } else { dest new File(downloadsDir, "realm-core-android-${project.coreVersion}.tar.gz") } } task prepareRealmCore(dependsOn: downloadRealmCore, type:Copy) { from tarTree(downloadRealmCore.dest) into "$coreDownloadDir/core" rename { String fileName -> fileName.replace("-arm-", "-armeabi-") } } task downloadOpenSSL_x86(type: Download) { src "https://static.realm.io/downloads/openssl/1.0.2k/Android/x86/openssl-release-1.0.2k-Android-x86.tar.gz" onlyIfNewer true overwrite true dest new File(downloadsDir, "openssl-release-1.0.2k-Android-x86.tar.gz") } task prepareOpenSSL_x86(dependsOn: downloadOpenSSL_x86, type:Copy) { from tarTree(downloadOpenSSL_x86.dest) into "$coreDownloadDir/core" } task downloadOpenSSL_arm(type: Download) { src "https://static.realm.io/downloads/openssl/1.0.2k/Android/armeabi-v7a/openssl-release-1.0.2k-Android-armeabi-v7a.tar.gz" onlyIfNewer true overwrite true dest new File(downloadsDir, "openssl-release-1.0.2k-Android-armeabi-v7a.tar.gz") } task prepareOpenSSL_arm(dependsOn: downloadOpenSSL_arm, type:Copy) { from tarTree(downloadOpenSSL_arm.dest) into "$coreDownloadDir/core" rename { String fileName -> fileName.replace("-arm-", "-armeabi-") } } def getDependenciesVersion(keyName) { def inputFile = new File(buildscript.sourceFile.getParent() + "/../../dependencies.list") def line inputFile.withReader { reader -> while ((line = reader.readLine())!=null) { def (key, value) = line.tokenize('=') if (keyName == key) { return value } } throw new GradleException("${keyName} not found in dependencies.list.") } } def getNdkBuildName() { if (Os.isFamily(Os.FAMILY_WINDOWS)) { return "ndk-build.cmd" } else { return "ndk-build" } } def findNdkBuildFullPath() { // we allow to provide full path to ndk-build tool if (hasProperty('ndk.command')) { return property('ndk.command') } // or just a path to the containing directory if (hasProperty('ndk.path')) { def ndkDir = property('ndk.path') return new File(ndkDir, getNdkBuildName()).getAbsolutePath() } if (System.getenv('ANDROID_NDK') != null) { def ndkDir = System.getenv('ANDROID_NDK') return new File(ndkDir, getNdkBuildName()).getAbsolutePath() } if (System.getenv('ANDROID_NDK_HOME') != null) { def ndkDir = System.getenv('ANDROID_NDK_HOME') return new File(ndkDir, getNdkBuildName()).getAbsolutePath() } def ndkDir = android.hasProperty('plugin') ? android.plugin.ndkFolder : plugins.getPlugin('com.android.library').sdkHandler.getNdkFolder() if (ndkDir) { return new File(ndkDir, getNdkBuildName()).getAbsolutePath() } return null } def checkNdkVersion(ndkBuildFullPath) { def ndkPath = new File(ndkBuildFullPath).getParent() def detectedNdkVersion def releaseFile = new File(ndkPath, 'RELEASE.TXT') def propertyFile = new File(ndkPath, 'source.properties') if (releaseFile.isFile()) { detectedNdkVersion = releaseFile.text.trim().split()[0].split('-')[0] } else if (propertyFile.isFile()) { detectedNdkVersion = getValueFromPropertiesFile(propertyFile, 'Pkg.Revision') if (detectedNdkVersion == null) { throw new GradleException("Failed to obtain the NDK version information from ${ndkPath}/source.properties") } } else { throw new GradleException("Neither ${releaseFile.getAbsolutePath()} nor ${propertyFile.getAbsolutePath()} is a file.") } if (detectedNdkVersion != project.ndkVersion) { throw new GradleException("Your NDK version: ${detectedNdkVersion}." + " Realm JNI must be compiled with the version ${project.ndkVersion} of NDK.") } } static def getValueFromPropertiesFile(File propFile, String key) { if (!propFile.isFile() || !propFile.canRead()) { return null } def prop = new Properties() def reader = propFile.newReader() try { prop.load(reader) } finally { reader.close() } return prop.get(key) } def getNdkBuildFullPath() { def ndkBuildFullPath = findNdkBuildFullPath() if (ndkBuildFullPath == null) { throw new GradleScriptException( "ndk-build binary cannot be found, check if you've set " + "\$ANDROID_NDK environment variable correctly or if ndk.dir is " + "setup in local.properties", null) } if (!new File(ndkBuildFullPath).canExecute()) { throw new GradleScriptException( "ndk-build binary " + ndkBuildFullPath + " doesn't exist or isn't executable.\n" + "Check that the \$ANDROID_NDK environment variable, or ndk.dir in local.proerties, is set correctly.\n" + "(On Windows, make sure you escape backslashes in local.properties or use forward slashes, e.g. C:\\\\ndk or C:/ndk rather than C:\\ndk)", null) } checkNdkVersion(ndkBuildFullPath); return ndkBuildFullPath } task buildReactNdkLib(dependsOn: [downloadJSCHeaders,prepareRealmCore,prepareOpenSSL_x86,prepareOpenSSL_arm], type: Exec) { inputs.files('src/main/jni') outputs.dir("$buildDir/realm-react-ndk/all") commandLine getNdkBuildFullPath(), '-e', project.buildSync ? 'BUILD_TYPE_SYNC=1' : 'BUILD_TYPE_SYNC=0', 'NDK_PROJECT_PATH=null', "NDK_APPLICATION_MK=$projectDir/src/main/jni/Application.mk", 'NDK_OUT=' + temporaryDir, "NDK_LIBS_OUT=$buildDir/realm-react-ndk/all", '-C', file('src/main/jni').absolutePath, 'NDK_LOG=1', 'NDK_DEBUG=' + (DEBUG_BUILD.toBoolean() ? '1' : '0'), '--jobs', Runtime.runtime.availableProcessors(), 'V=1' } task cleanReactNdkLib(type: Exec) { commandLine getNdkBuildFullPath(), '-C', file('src/main/jni').absolutePath, 'clean' } task packageReactNdkLibs(dependsOn: buildReactNdkLib, type: Copy) { from "$buildDir/realm-react-ndk/all" exclude '**/libjsc.so' exclude '**/gdbserver' exclude '**/gdb.setup' into "$buildDir/realm-react-ndk/exported" } android { compileSdkVersion 26 defaultConfig { minSdkVersion 16 targetSdkVersion 26 } sourceSets.main { java.srcDir "$buildDir/generated-src/main/java" jni.srcDirs = [] jniLibs.srcDir "$buildDir/realm-react-ndk/exported" res.srcDirs = ['src/main/res/devsupport', 'src/main/res/shell'] } tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn generateVersionClass, packageReactNdkLibs } clean.dependsOn cleanReactNdkLib lintOptions { abortOnError false } } task publishAndroid(dependsOn: [generateVersionClass, packageReactNdkLibs], type: Sync) { // Copy task can only have one top level into "$publishDir" // copy java source into ('/src/main') { from "$projectDir/src/main", "$buildDir/generated-src/main" exclude '**/jni/**', '**/templates/**' } // add compiled shared object into ('/src/main/jniLibs') { from "$buildDir/realm-react-ndk/exported/" } // copy gradle wrapper files FileTree gradleWrapper = fileTree(projectDir).include('gradlew*').include('gradle/**') into ('/') { from gradleWrapper } // copy and rename template build.gradle into ('/') { from "$projectDir/publish_android_template" rename { String fileName -> 'build.gradle' } } // copy analytics script into ('/') { from "$projectDir/analytics_template" rename { String fileName -> 'analytics.gradle' } } } // publishing into maven local def configureRealmReactNativePom(def pom) { pom.project { name POM_NAME artifactId POM_ARTIFACT_ID packaging POM_PACKAGING description POM_DESCRIPTION url 'https://github.com/realm/realm-js' issueManagement { system 'github' url 'https://github.com/realm/realm-js/issues' } scm { url 'scm:https://github.com/realm/realm-js' connection 'scm:git@github.com:realm/realm-js.git' developerConnection 'scm:git@github.com:realm/realm-js.git' } licenses { license { name 'The Apache Software License, Version 2.0' url 'http://www.apache.org/licenses/LICENSE-2.0.txt' distribution 'repo' } } } } afterEvaluate { project -> task androidSourcesJar(type: Jar) { classifier = 'sources' from android.sourceSets.main.java.srcDirs include '**/*.java' } android.libraryVariants.all { variant -> def name = variant.name.capitalize() task "jar${name}"(type: Jar, dependsOn: variant.javaCompile) { from variant.javaCompile.destinationDir } } artifacts { archives androidSourcesJar } version = currentVersion group = GROUP signing { required { false } sign configurations.archives } task installArchives(type: Upload) { configuration = configurations.archives repositories.mavenDeployer { beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) } repository url: "file://${System.properties['user.home']}/.m2/repository" configureRealmReactNativePom pom } } } def dependencyType = "implementation" def providedDependencyType = "compileOnly" try { project.getConfigurations().getByName("implementation") } catch (UnknownConfigurationException e) { // Pre 3.0 Android Gradle Plugin dependencyType = "compile" providedDependencyType = "provided" } project.dependencies { add(providedDependencyType, 'com.squareup.okhttp3:okhttp:3.9.0') add(providedDependencyType, 'com.facebook.react:react-native:+') add(dependencyType, 'org.nanohttpd:nanohttpd:2.2.0') } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3561878 fdroidserver-2.4.0/tests/source-files/se.manyver/0000755000175000017500000000000014770510164020555 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3561878 fdroidserver-2.4.0/tests/source-files/se.manyver/android/0000755000175000017500000000000014770510164022175 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3561878 fdroidserver-2.4.0/tests/source-files/se.manyver/android/app/0000755000175000017500000000000014770510164022755 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/se.manyver/android/app/build.gradle0000644000175000017500000002503514717152070025240 0ustar00hanshansapply plugin: "com.android.application" import com.android.build.OutputFile /** * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets * and bundleReleaseJsAndAssets). * These basically call `react-native bundle` with the correct arguments during the Android build * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the * bundle directly from the development server. Below you can see all the possible configurations * and their defaults. If you decide to add a configuration block, make sure to add it before the * `apply from: "../../node_modules/react-native/react.gradle"` line. * * project.ext.react = [ * // the name of the generated asset file containing your JS bundle * bundleAssetName: "index.android.bundle", * * // the entry file for bundle generation * entryFile: "index.android.js", * * // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format * bundleCommand: "ram-bundle", * * // whether to bundle JS and assets in debug mode * bundleInDebug: false, * * // whether to bundle JS and assets in release mode * bundleInRelease: true, * * // whether to bundle JS and assets in another build variant (if configured). * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants * // The configuration property can be in the following formats * // 'bundleIn${productFlavor}${buildType}' * // 'bundleIn${buildType}' * // bundleInFreeDebug: true, * // bundleInPaidRelease: true, * // bundleInBeta: true, * * // whether to disable dev mode in custom build variants (by default only disabled in release) * // for example: to disable dev mode in the staging build type (if configured) * devDisabledInStaging: true, * // The configuration property can be in the following formats * // 'devDisabledIn${productFlavor}${buildType}' * // 'devDisabledIn${buildType}' * * // the root of your project, i.e. where "package.json" lives * root: "../../", * * // where to put the JS bundle asset in debug mode * jsBundleDirDebug: "$buildDir/intermediates/assets/debug", * * // where to put the JS bundle asset in release mode * jsBundleDirRelease: "$buildDir/intermediates/assets/release", * * // where to put drawable resources / React Native assets, e.g. the ones you use via * // require('./image.png')), in debug mode * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug", * * // where to put drawable resources / React Native assets, e.g. the ones you use via * // require('./image.png')), in release mode * resourcesDirRelease: "$buildDir/intermediates/res/merged/release", * * // by default the gradle tasks are skipped if none of the JS files or assets change; this means * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to * // date; if you have any other folders that you want to ignore for performance reasons (gradle * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/ * // for example, you might want to remove it from here. * inputExcludes: ["android/**", "ios/**"], * * // override which node gets called and with what additional arguments * nodeExecutableAndArgs: ["node"], * * // supply additional arguments to the packager * extraPackagerArgs: [] * ] */ project.ext.vectoricons = [ iconFontNames: [ 'MaterialIcons.ttf', 'MaterialCommunityIcons.ttf' ] ] project.ext.react = [ entryFile: "index.android.js", enableHermes: false, // clean and rebuild if changing hermesCommand: "../../node_modules/hermes-engine/%OS-BIN%/hermes", ] apply from: "../../node_modules/react-native-vector-icons/fonts.gradle" apply from: "../../node_modules/react-native/react.gradle" /** * Set this to true to create two separate APKs instead of one: * - An APK that only works on ARM devices * - An APK that only works on x86 devices * The advantage is the size of the APK is reduced by about 4MB. * Upload all the APKs to the Play Store and people will download * the correct one based on the CPU architecture of their device. */ def enableSeparateBuildPerCPUArchitecture = false /** * Run Proguard to shrink the Java bytecode in release builds. */ def enableProguardInReleaseBuilds = false /** * The preferred build flavor of JavaScriptCore. * * For example, to use the international variant, you can use: * `def jscFlavor = 'org.webkit:android-jsc-intl:+'` * * The international variant includes ICU i18n library and necessary data * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that * give correct results when using with locales other than en-US. Note that * this variant is about 6MiB larger per architecture than default. */ def jscFlavor = 'org.webkit:android-jsc:+' /** * Whether to enable the Hermes VM. * * This should be set on project.ext.react and mirrored here. If it is not set * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode * and the benefits of using Hermes will therefore be sharply reduced. */ def enableHermes = project.ext.react.get("enableHermes", false); android { compileSdkVersion rootProject.ext.compileSdkVersion compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } flavorDimensions "store" defaultConfig { versionCode 78 versionName "0.1911.27-beta" applicationId "se.manyver" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion missingDimensionStrategy "RNN.reactNativeVersion", "reactNative60" ndk { abiFilters "armeabi-v7a", "arm64-v8a" // , "x86", "x86_64" } aaptOptions { ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~' } vectorDrawables.useSupportLibrary = true } // dexOptions { // javaMaxHeapSize "4g" // } productFlavors { indie { dimension "store" } googlePlay { dimension "store" versionNameSuffix "-googlePlay" targetSdkVersion rootProject.ext.targetSdkVersionForGooglePlay } } signingConfigs { // debug { // storeFile file('debug.keystore') // storePassword 'android' // keyAlias 'androiddebugkey' // keyPassword 'android' // } release { if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) { storeFile file(MYAPP_RELEASE_STORE_FILE) storePassword MYAPP_RELEASE_STORE_PASSWORD keyAlias MYAPP_RELEASE_KEY_ALIAS keyPassword MYAPP_RELEASE_KEY_PASSWORD } } } splits { abi { reset() enable enableSeparateBuildPerCPUArchitecture universalApk false // If true, also generate a universal APK include "armeabi-v7a", "arm64-v8a"//, "x86", "x86_64" } } buildTypes { debug { signingConfig signingConfigs.debug } release { // Caution! In production, you need to generate your own keystore file. // see https://facebook.github.io/react-native/docs/signed-apk-android. // signingConfig signingConfigs.debug minifyEnabled enableProguardInReleaseBuilds proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) { signingConfig signingConfigs.release } } } // applicationVariants are e.g. debug, release applicationVariants.all { variant -> variant.outputs.each { output -> // For each separate APK per architecture, set a unique version code as described here: // https://developer.android.com/studio/build/configure-apk-splits.html def versionCodes = ["armeabi-v7a": 1, "arm64-v8a": 2] //, "x86":3, "x86_64":4] def abi = output.getFilter(OutputFile.ABI) if (abi != null) { // null for the universal-debug, universal-release variants output.versionCodeOverride = versionCodes.get(abi) * 1048576 + defaultConfig.versionCode } } } } def acraVersion = '5.3.0' dependencies { implementation "ch.acra:acra-core:$acraVersion" implementation "ch.acra:acra-mail:$acraVersion" implementation "ch.acra:acra-dialog:$acraVersion" implementation project(':nodejs-mobile-react-native') implementation project(':@react-native-community_async-storage') implementation project(':react-native-bluetooth-socket-bridge') implementation project(':react-native-bluetooth-status') implementation project(':react-native-dialogs') implementation project(':react-native-vector-icons') implementation project(':react-native-os-staltz') implementation project(':react-native-randombytes') implementation project(':react-native-image-crop-picker') implementation project(':react-native-navigation') implementation project(':react-native-android-local-notification') implementation project(':react-native-android-wifi') implementation project(':react-native-has-internet') implementation project(':react-native-flag-secure-android') implementation project(':react-native-orientation-locker') implementation project(':react-native-fs') implementation project(':react-native-splash-screen') implementation project(':@react-native-community_viewpager') implementation fileTree(dir: "libs", include: ["*.jar"]) implementation 'androidx.appcompat:appcompat:1.0.2' implementation("com.facebook.react:react-native:+") { force = true } implementation 'com.facebook.fresco:animated-gif:1.3.0' if (enableHermes) { def hermesPath = "../../node_modules/hermes-engine/android/"; debugImplementation files(hermesPath + "hermes-debug.aar") releaseImplementation files(hermesPath + "hermes-release.aar") } else { implementation jscFlavor } } // Run this once to be able to run the application with BUCK // puts all compile dependencies into folder libs for BUCK to use task copyDownloadableDepsToLibs(type: Copy) { from configurations.compile into 'libs' } apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/se.manyver/android/build.gradle0000644000175000017500000000372614717152070024463 0ustar00hanshans// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext { minSdkVersion = 21 targetSdkVersion = 26 targetSdkVersionForGooglePlay = 28 compileSdkVersion = 28 } repositories { google() jcenter() mavenLocal() mavenCentral() } dependencies { classpath("com.android.tools.build:gradle:3.4.2") // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { mavenCentral() mavenLocal() maven { // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm url("$rootDir/../node_modules/react-native/android") } maven { // Android JSC is installed from npm url("$rootDir/../node_modules/jsc-android/dist") } maven { url 'https://maven.google.com' } maven { url "https://jitpack.io" } google() jcenter() } } subprojects { subproject -> afterEvaluate { if ((subproject.plugins.hasPlugin('android') || subproject.plugins.hasPlugin('android-library'))) { android { variantFilter { variant -> def names = variant.flavors*.name if (names.contains("reactNative51")) setIgnore(true) if (names.contains("reactNative55")) setIgnore(true) if (names.contains("reactNative56")) setIgnore(true) if (names.contains("reactNative57")) setIgnore(true) if (names.contains("reactNative57_5")) setIgnore(true) if (names.contains("reactNative57WixFork")) setIgnore(true) if (names.contains("reactNative59")) setIgnore(true) } } } } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/se.manyver/android/gradle/0000755000175000017500000000000014770510164023433 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3561878 fdroidserver-2.4.0/tests/source-files/se.manyver/android/gradle/wrapper/0000755000175000017500000000000014770510164025113 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/se.manyver/android/gradle/wrapper/gradle-wrapper.properties0000644000175000017500000000030714717152070032144 0ustar00hanshansdistributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-5.5-all.zip././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/se.manyver/android/gradle.properties0000644000175000017500000000165214717152070025554 0ustar00hanshans# Project-wide Gradle settings. # IDE (e.g. Android Studio) users: # Gradle settings configured through the IDE *will override* # any settings specified in this file. # For more details on how to configure your build environment visit # http://www.gradle.org/docs/current/userguide/build_environment.html # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. # Default value: -Xmx10248m -XX:MaxPermSize=256m # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true android.useAndroidX=true android.enableJetifier=true org.gradle.jvmargs=-Xmx4608M././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/se.manyver/android/settings.gradle0000644000175000017500000000663714717152070025230 0ustar00hanshansrootProject.name = 'Manyverse' apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) include ':@react-native-community_async-storage' project(':@react-native-community_async-storage').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/async-storage/android') include ':react-native-bluetooth-status' project(':react-native-bluetooth-status').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-bluetooth-status/android') include ':react-native-bluetooth-socket-bridge' project(':react-native-bluetooth-socket-bridge').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-bluetooth-socket-bridge/android') include ':react-native-image-crop-picker' project(':react-native-image-crop-picker').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-image-crop-picker/android') include ':nodejs-mobile-react-native' project(':nodejs-mobile-react-native').projectDir = new File(rootProject.projectDir, '../node_modules/nodejs-mobile-react-native/android') include ':react-native-dialogs' project(':react-native-dialogs').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-dialogs/android') include ':react-native-vector-icons' project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android') include ':react-native-os-staltz' project(':react-native-os-staltz').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-os-staltz/android') include ':react-native-randombytes' project(':react-native-randombytes').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-randombytes/android') include ':react-native-navigation' project(':react-native-navigation').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-navigation/lib/android/app/') include ':react-native-android-local-notification' project(':react-native-android-local-notification').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-android-local-notification/android') include ':react-native-android-wifi' project(':react-native-android-wifi').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-android-wifi/android') include ':react-native-has-internet' project(':react-native-has-internet').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-has-internet/android') include ':react-native-flag-secure-android' project(':react-native-flag-secure-android').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-flag-secure-android/android') include ':react-native-orientation-locker', ':app' project(':react-native-orientation-locker').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-orientation-locker/android') include ':react-native-fs' project(':react-native-fs').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-fs/android') include ':react-native-splash-screen' project(':react-native-splash-screen').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-splash-screen/android') include ':@react-native-community_viewpager' project(':@react-native-community_viewpager').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/viewpager/android') include ':app' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/se.manyver/app.json0000644000175000017500000000007014717152070022224 0ustar00hanshans{ "name": "Manyverse", "displayName": "Manyverse" } ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/se.manyver/index.android.js0000644000175000017500000000107314717152070023641 0ustar00hanshans/* Copyright (C) 2018-2019 The Manyverse Authors. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ import 'react-native-ssb-shims'; import {run} from 'cycle-native-navigation'; import { screens, drivers, welcomeLayout, defaultNavOptions, } from './lib/frontend/index'; // import './snoopy'; // Log and debug the React Native JS<-->Native Bridge run(screens, drivers, welcomeLayout, defaultNavOptions); ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/se.manyver/package.json0000644000175000017500000001216514717152070023047 0ustar00hanshans{ "name": "manyverse", "version": "0.1911.27-beta", "private": true, "scripts": { "postinstall": "patch-package", "lib": "tsc", "clean-bundler": "watchman watch-del-all && rm -rf $TMPDIR/react-*", "clean-android": "adb uninstall se.manyver && cd android && ./gradlew clean", "full-clean": "npm run clean-android && npm run clean-bundler && rm -rf node_modules && rm -rf lib", "propagate-replacements": "propagate-replacement-fields --field=react-native", "build-backend": "./tools/build-backend && ./tools/minify-backend", "build-android-assets": "npm run lib && npm run propagate-replacements && npm run build-backend", "build-android-debug": "npm run build-android-assets && react-native run-android --variant=indieDebug", "build-android-release": "npm run build-android-assets && cd android && ./gradlew assembleRelease && cd ..", "start": "npm run lib && npm run propagate-replacements && react-native start", "psdr": "./tools/print-service-desk-report.js", "test-e2e-android": "./tools/test-e2e-android", "changelog": "npm run update-repo-changelog && npm run update-dat-latest-readme", "update-repo-changelog": "./tools/update-repo-changelog.js", "update-dat-latest-readme": "./tools/update-dat-latest-readme.js", "echo-ssb-post": "./tools/echo-ssb-post.js", "update-version": "./tools/update-version.js", "dat-release": "./tools/dat-release", "commit-release": "./tools/commit-release", "release": "npm run update-version && npm run clean-bundler && npm run clean-android && npm run build-android-release && npm run test-e2e-android && npm run changelog && npm run commit-release && npm run dat-release && npm run echo-ssb-post" }, "dependencies": { "@cycle/isolate": "5.1.0", "@cycle/react": "2.6.0", "@cycle/run": "5.3.0", "@cycle/state": "1.3.0", "@react-native-community/viewpager": "3.1.0", "@types/node": "~12.7.5", "@types/react": "16.9.x", "@types/react-native": "0.60.23", "@types/react-native-vector-icons": "6.4.3", "buffer": "5.4.3", "color-hash": "1.0.3", "cycle-native-alert": "1.1.0", "cycle-native-android-local-notification": "1.1.0", "cycle-native-asyncstorage": "2.0.0", "cycle-native-clipboard": "1.0.0", "cycle-native-keyboard": "1.2.0", "cycle-native-linking": "1.1.0", "cycle-native-navigation": "6.1.0", "cycle-native-share": "1.1.0", "cycle-native-toastandroid": "1.1.0", "mdast-normalize-react-native": "3.2.x", "nodejs-mobile-react-native": "0.5.0", "path": "~0.12.7", "promisify-tuple": "1.0.0", "pull-flat-list": "2.10.0", "pull-pushable": "2.2.0", "pull-stream": "3.6.14", "pull-thenable": "1.0.0", "react": "16.9.0", "react-human-time": "^1.1.0", "react-markdown": "4.0.2", "react-native": "0.61.5", "react-native-android-local-notification": "3.0.0", "react-native-android-wifi": "0.0.41", "react-native-bluetooth-socket-bridge": "1.2.0", "react-native-bluetooth-status": "1.3.0", "react-native-dialogs": "1.1.0", "react-native-flag-secure-android": "1.0.2", "react-native-floating-action": "1.19.1", "react-native-fs": "~2.16.2", "react-native-has-internet": "4.0.0", "react-native-image-crop-picker": "~0.26.1", "react-native-image-view": "~2.1.6", "react-native-navigation": "4.0.2", "react-native-orientation-locker": "1.1.7", "react-native-popup-menu": "0.15.6", "react-native-splash-screen": "^3.2.0", "react-native-ssb-client": "7.0.0", "react-native-ssb-shims": "4.6.0", "react-native-swiper": "1.5.14", "react-native-vector-icons": "6.6.0", "react-propify-methods": "16.3.1", "react-xstream-hoc": "1.0.0", "remark": "~9.0.0", "remark-gemoji-to-emoji": "1.1.0", "remark-images-to-ssb-serve-blobs": "2.1.0-1", "remark-linkify-regex": "1.0.0", "remark-ssb-mentions": "~2.0.0", "rn-viewpager": "1.2.9", "ssb-cached-about": "~1.0.0", "ssb-conn-query": "~0.4.4", "ssb-ref": "2.13.9", "ssb-room": "~1.1.1", "ssb-serve-blobs": "2.1.0", "ssb-threads": "3.6.0", "ssb-typescript": "1.4.0", "xstream": "11.11.0", "xstream-backoff": "1.0", "xstream-between": "1.0", "xstream-from-callback": "1.0", "xstream-from-pull-stream": "1.1", "xstream-sample": "1.0" }, "devDependencies": { "@babel/core": "~7.7.2", "@babel/runtime": "~7.7.2", "add-stream": "~1.0.0", "conventional-changelog": "~3.1.15", "husky": "^3.1.0", "into-stream": "~5.1.1", "jase": "1.2.0", "left-pad": "1.3.0", "metro-react-native-babel-preset": "^0.56.0", "patch-package": "6.2.0", "prettier": "~1.19.1", "pretty-quick": "~2.0.1", "propagate-replacement-fields": "1.2.0", "react-native-version": "3.2.0", "rn-snoopy": "2.0.2", "tslint": "~5.20.1", "typescript": "~3.7.2" }, "optionalDependencies": { "appium": "1.14.0", "tap-spec": "5.0.0", "tape": "~4.9.1", "wd": "1.11.3" }, "husky": { "hooks": { "pre-commit": "pretty-quick --staged --pattern \"**/*.*(ts|tsx|js|jsx)\"" } }, "react-native": { "os": "react-native-os-staltz" } } ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/se.manyver/react-native.config.js0000644000175000017500000000102314717152070024734 0ustar00hanshansmodule.exports = { dependencies: { 'nodejs-mobile-react-native': { // Ignored because we need to set this up manually in order to // call some APIs of this library directly in our MainActivity.java platforms: { android: null, }, }, 'react-native-bluetooth-socket-bridge': { // This package needs some config passed as arguments to the constructor // so we need to "link" it manually in MainApplication.java platforms: { android: null, }, }, }, }; ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3561878 fdroidserver-2.4.0/tests/source-files/ut.ewh.audiometrytest/0000755000175000017500000000000014770510164022761 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3561878 fdroidserver-2.4.0/tests/source-files/ut.ewh.audiometrytest/app/0000755000175000017500000000000014770510164023541 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/ut.ewh.audiometrytest/app/build.gradle0000644000175000017500000000214714717152070026023 0ustar00hanshansapply plugin: 'android' android { compileSdkVersion 21 buildToolsVersion "21.1.1" defaultConfig { minSdkVersion 8 targetSdkVersion 21 versionCode 14 versionName "1.65" } signingConfigs{ releaseSign{ storeFile file("/Users/reecestevens/keys/keystore.jks") //storePassword System.console().readLine("\nKeystore password: ") storePassword System.getenv("KSTOREPWD") keyAlias "AppKey" //keyPassword System.console().readLine("\nKey password: ") keyPassword System.getenv("KEYPWD") } } buildTypes { release { minifyEnabled true; debuggable false signingConfig signingConfigs.releaseSign proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } } repositories { maven { url "https://jitpack.io" } } dependencies { compile 'com.android.support:appcompat-v7:21.0.2' compile 'com.github.PhilJay:MPAndroidChart:v2.0.9' compile fileTree(dir: 'libs', include: ['*.jar']) } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/ut.ewh.audiometrytest/app/src/0000755000175000017500000000000014770510164024330 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3561878 fdroidserver-2.4.0/tests/source-files/ut.ewh.audiometrytest/app/src/main/0000755000175000017500000000000014770510164025254 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/ut.ewh.audiometrytest/app/src/main/AndroidManifest.xml0000644000175000017500000001314114717152070031044 0ustar00hanshans ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/ut.ewh.audiometrytest/build.gradle0000644000175000017500000000104414717152070025236 0ustar00hanshans// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:1.0.0-rc4' } } allprojects { repositories { mavenCentral() } } buildscript { repositories { mavenCentral() } dependencies { classpath 'org.owasp:dependency-check-gradle:1.3.2.1' } } apply plugin: 'org.owasp.dependencycheck' dependencyCheck { format='JSON' } ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/ut.ewh.audiometrytest/settings.gradle0000644000175000017500000000001714717152070025776 0ustar00hanshansinclude ':app' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/yuriykulikov/0000755000175000017500000000000014770510164021254 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/yuriykulikov/AlarmClock/0000755000175000017500000000000014770510164023264 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/source-files/yuriykulikov/AlarmClock/gradle/0000755000175000017500000000000014770510164024522 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.3561878 fdroidserver-2.4.0/tests/source-files/yuriykulikov/AlarmClock/gradle/wrapper/0000755000175000017500000000000014770510164026202 5ustar00hanshans././@PaxHeader0000000000000000000000000000020600000000000010213 xustar00112 path=fdroidserver-2.4.0/tests/source-files/yuriykulikov/AlarmClock/gradle/wrapper/gradle-wrapper.properties 22 mtime=1732039736.0 fdroidserver-2.4.0/tests/source-files/yuriykulikov/AlarmClock/gradle/wrapper/gradle-wrapper.properti0000644000175000017500000000035614717152070032707 0ustar00hanshans#Wed Jan 30 10:59:12 CET 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742812298.0 fdroidserver-2.4.0/tests/test_api.py0000755000175000017500000000770014770232212016252 0ustar00hanshans#!/usr/bin/env python3 import os import shutil import unittest from pathlib import Path from unittest import mock import fdroidserver from fdroidserver import common, signindex from .shared_test_code import GP_FINGERPRINT, mkdtemp basedir = Path(__file__).parent class ApiTest(unittest.TestCase): """Test the public API in the base "fdroidserver" module This is mostly a smokecheck to make sure the public API as declared in fdroidserver/__init__.py is working. The functions are all implemented in other modules, with their own tests. """ def setUp(self): os.chdir(basedir) self._td = mkdtemp() self.testdir = self._td.name common.config = None config = common.read_config() config['jarsigner'] = common.find_sdk_tools_cmd('jarsigner') common.config = config signindex.config = config def tearDown(self): self._td.cleanup() def test_download_repo_index_no_fingerprint(self): with self.assertRaises(fdroidserver.VerificationException): fdroidserver.download_repo_index("http://example.org") @mock.patch('fdroidserver.net.http_get') def test_download_repo_index_url_parsing(self, mock_http_get): """Test whether it is trying to download the right file This passes the URL back via the etag return value just as a hack to check which URL was actually attempted. """ mock_http_get.side_effect = lambda url, etag, timeout: (None, url) repo_url = 'https://example.org/fdroid/repo' index_url = 'https://example.org/fdroid/repo/index-v1.jar' for url in (repo_url, index_url): _ignored, etag_set_to_url = fdroidserver.download_repo_index( url, verify_fingerprint=False ) self.assertEqual(index_url, etag_set_to_url) @mock.patch('fdroidserver.net.http_get') def test_download_repo_index_v1_url_parsing(self, mock_http_get): """Test whether it is trying to download the right file This passes the URL back via the etag return value just as a hack to check which URL was actually attempted. """ mock_http_get.side_effect = lambda url, etag, timeout: (None, url) repo_url = 'https://example.org/fdroid/repo' index_url = 'https://example.org/fdroid/repo/index-v1.jar' for url in (repo_url, index_url): _ignored, etag_set_to_url = fdroidserver.download_repo_index_v1( url, verify_fingerprint=False ) self.assertEqual(index_url, etag_set_to_url) @mock.patch('fdroidserver.net.download_using_mirrors') def test_download_repo_index_v2(self, mock_download_using_mirrors): """Basically a copy of IndexTest.test_download_repo_index_v2""" mock_download_using_mirrors.side_effect = lambda mirrors: os.path.join( self.testdir, 'repo', os.path.basename(mirrors[0]['url']) ) os.chdir(self.testdir) signindex.config['keystore'] = os.path.join(basedir, 'keystore.jks') os.mkdir('repo') shutil.copy(basedir / 'repo' / 'entry.json', 'repo') shutil.copy(basedir / 'repo' / 'index-v2.json', 'repo') signindex.sign_index('repo', 'entry.json') repo_url = 'https://fake.url/fdroid/repo' entry_url = 'https://fake.url/fdroid/repo/entry.jar' index_url = 'https://fake.url/fdroid/repo/index-v2.json' fingerprint_url = 'https://fake.url/fdroid/repo?fingerprint=' + GP_FINGERPRINT slash_url = 'https://fake.url/fdroid/repo//?fingerprint=' + GP_FINGERPRINT for url in (repo_url, entry_url, index_url, fingerprint_url, slash_url): data, _ignored = fdroidserver.download_repo_index_v2( url, verify_fingerprint=False ) self.assertEqual(['repo', 'packages'], list(data)) self.assertEqual( 'My First F-Droid Repo Demo', data['repo']['name']['en-US'] ) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/tests/test_build.py0000755000175000017500000012523014770502071016602 0ustar00hanshans#!/usr/bin/env python3 import os import shutil import sys import tempfile import textwrap import unittest import yaml from pathlib import Path from unittest import mock from .shared_test_code import TmpCwd, mkdtemp import fdroidserver.build import fdroidserver.common class FakeProcess: output = 'fake output' returncode = 0 def __init__(self, args, **kwargs): print('FakeFDroidPopen', args, kwargs) class Options: keep_when_not_allowed = False class BuildTest(unittest.TestCase): '''fdroidserver/build.py''' def setUp(self): self.basedir = str(Path(__file__).parent) os.chdir(self.basedir) fdroidserver.common.config = None fdroidserver.build.config = None fdroidserver.build.options = None self._td = mkdtemp() self.testdir = self._td.name def tearDown(self): os.chdir(self.basedir) self._td.cleanup() def create_fake_android_home(self, d): os.makedirs(os.path.join(d, 'build-tools'), exist_ok=True) os.makedirs(os.path.join(d, 'platform-tools'), exist_ok=True) os.makedirs(os.path.join(d, 'tools'), exist_ok=True) @unittest.skipIf(sys.byteorder == 'big', "androguard is not ported to big-endian") def test_get_apk_metadata(self): config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.build.config = config try: config['aapt'] = fdroidserver.common.find_sdk_tools_cmd('aapt') except fdroidserver.exception.FDroidException: pass # aapt is not required if androguard is present testcases = [ ( 'repo/obb.main.twoversions_1101613.apk', 'obb.main.twoversions', 1101613, '0.1', None, ), ( 'org.bitbucket.tickytacky.mirrormirror_1.apk', 'org.bitbucket.tickytacky.mirrormirror', 1, '1.0', None, ), ( 'org.bitbucket.tickytacky.mirrormirror_2.apk', 'org.bitbucket.tickytacky.mirrormirror', 2, '1.0.1', None, ), ( 'org.bitbucket.tickytacky.mirrormirror_3.apk', 'org.bitbucket.tickytacky.mirrormirror', 3, '1.0.2', None, ), ( 'org.bitbucket.tickytacky.mirrormirror_4.apk', 'org.bitbucket.tickytacky.mirrormirror', 4, '1.0.3', None, ), ( 'org.dyndns.fules.ck_20.apk', 'org.dyndns.fules.ck', 20, 'v1.6pre2', [ 'arm64-v8a', 'armeabi', 'armeabi-v7a', 'mips', 'mips64', 'x86', 'x86_64', ], ), ('urzip.apk', 'info.guardianproject.urzip', 100, '0.1', None), ('urzip-badcert.apk', 'info.guardianproject.urzip', 100, '0.1', None), ('urzip-badsig.apk', 'info.guardianproject.urzip', 100, '0.1', None), ('urzip-release.apk', 'info.guardianproject.urzip', 100, '0.1', None), ( 'urzip-release-unsigned.apk', 'info.guardianproject.urzip', 100, '0.1', None, ), ('repo/com.politedroid_3.apk', 'com.politedroid', 3, '1.2', None), ('repo/com.politedroid_4.apk', 'com.politedroid', 4, '1.3', None), ('repo/com.politedroid_5.apk', 'com.politedroid', 5, '1.4', None), ('repo/com.politedroid_6.apk', 'com.politedroid', 6, '1.5', None), ( 'repo/duplicate.permisssions_9999999.apk', 'duplicate.permisssions', 9999999, '', None, ), ( 'repo/info.zwanenburg.caffeinetile_4.apk', 'info.zwanenburg.caffeinetile', 4, '1.3', None, ), ( 'repo/obb.main.oldversion_1444412523.apk', 'obb.main.oldversion', 1444412523, '0.1', None, ), ( 'repo/obb.mainpatch.current_1619_another-release-key.apk', 'obb.mainpatch.current', 1619, '0.1', None, ), ( 'repo/obb.mainpatch.current_1619.apk', 'obb.mainpatch.current', 1619, '0.1', None, ), ( 'repo/obb.main.twoversions_1101613.apk', 'obb.main.twoversions', 1101613, '0.1', None, ), ( 'repo/obb.main.twoversions_1101615.apk', 'obb.main.twoversions', 1101615, '0.1', None, ), ( 'repo/obb.main.twoversions_1101617.apk', 'obb.main.twoversions', 1101617, '0.1', None, ), ( 'repo/urzip-; Рахма́, [rɐxˈmanʲɪnəf] سيرجي_رخمانينوف 谢·.apk', 'info.guardianproject.urzip', 100, '0.1', None, ), ] for apkfilename, appid, versionCode, versionName, nativecode in testcases: app = fdroidserver.metadata.App() app.id = appid build = fdroidserver.metadata.Build() build.buildjni = ['yes'] if nativecode else build.buildjni build.versionCode = versionCode build.versionName = versionName vc, vn = fdroidserver.build.get_metadata_from_apk(app, build, apkfilename) self.assertEqual(versionCode, vc) self.assertEqual(versionName, vn) @mock.patch('fdroidserver.common.get_apk_id') @mock.patch('fdroidserver.build.FDroidPopen') @mock.patch('fdroidserver.common.is_debuggable_or_testOnly', lambda f: False) @mock.patch('fdroidserver.common.get_native_code', lambda f: 'x86') def test_build_local_maven(self, fake_FDroidPopen, fake_get_apk_id): """Test build_local() with a maven project""" # pylint: disable=unused-argument def _side_effect(cmd, cwd=None): p = mock.MagicMock() p.output = '[INFO] fake apkbuilder target/no.apk' with open(os.path.join(self.testdir, 'target', 'no.apk'), 'w') as fp: fp.write('placeholder') p.returncode = 0 return p fake_FDroidPopen.side_effect = _side_effect os.chdir(self.testdir) os.mkdir('target') config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.build.config = config fdroidserver.build.options = mock.Mock() fdroidserver.build.options.scan_binary = False fdroidserver.build.options.notarball = True fdroidserver.build.options.skipscan = False app = fdroidserver.metadata.App() app.id = 'mocked.app.id' build = fdroidserver.metadata.Build() build.commit = '1.0' build.versionCode = 1 build.versionName = '1.0' fake_get_apk_id.side_effect = lambda f: ( app.id, build.versionCode, build.versionName, ) vcs = mock.Mock() build.maven = 'yes@..' fdroidserver.build.build_local( app, build, vcs, build_dir=self.testdir, output_dir=self.testdir, log_dir=os.getcwd(), srclib_dir=None, extlib_dir=None, tmp_dir=None, force=False, onserver=True, refresh=False, ) build.maven = 'yes' fdroidserver.build.build_local( app, build, vcs, build_dir=self.testdir, output_dir=self.testdir, log_dir=os.getcwd(), srclib_dir=None, extlib_dir=None, tmp_dir=None, force=False, onserver=True, refresh=False, ) @mock.patch('sdkmanager.build_package_list', lambda use_net: None) def test_build_local_ndk(self): """Test if `fdroid build` detects installed NDKs and auto-installs when missing""" with tempfile.TemporaryDirectory() as testdir, TmpCwd( testdir ), tempfile.TemporaryDirectory() as sdk_path: config = {'ndk_paths': {}, 'sdk_path': sdk_path} fdroidserver.common.config = config fdroidserver.build.config = config fdroidserver.build.options = mock.Mock() fdroidserver.build.options.scan_binary = False fdroidserver.build.options.notarball = True fdroidserver.build.options.skipscan = True app = fdroidserver.metadata.App() app.id = 'mocked.app.id' build = fdroidserver.metadata.Build() build.commit = '1.0' build.output = app.id + '.apk' build.versionCode = 1 build.versionName = '1.0' build.ndk = 'r21e' # aka 21.4.7075529 ndk_version = '21.4.7075529' ndk_dir = Path(config['sdk_path']) / 'ndk' / ndk_version vcs = mock.Mock() def make_fake_apk(output, build): with open(build.output, 'w') as fp: fp.write('APK PLACEHOLDER') return output # pylint: disable=unused-argument def fake_sdkmanager_install(to_install, android_home=None): ndk_dir.mkdir(parents=True) self.assertNotEqual(ndk_version, to_install) # converts r21e to version with (ndk_dir / 'source.properties').open('w') as fp: fp.write('Pkg.Revision = %s\n' % ndk_version) # use "as _ignored" just to make a pretty layout with mock.patch( 'fdroidserver.common.replace_build_vars', wraps=make_fake_apk ) as _ignored, mock.patch( 'fdroidserver.common.get_native_code', return_value='x86' ) as _ignored, mock.patch( 'fdroidserver.common.get_apk_id', return_value=(app.id, build.versionCode, build.versionName), ) as _ignored, mock.patch( 'fdroidserver.common.sha256sum', return_value='ad7ce5467e18d40050dc51b8e7affc3e635c85bd8c59be62de32352328ed467e', ) as _ignored, mock.patch( 'fdroidserver.common.is_debuggable_or_testOnly', return_value=False, ) as _ignored, mock.patch( 'fdroidserver.build.FDroidPopen', FakeProcess ) as _ignored, mock.patch( 'sdkmanager.install', wraps=fake_sdkmanager_install ) as _ignored: _ignored # silence the linters with self.assertRaises( fdroidserver.exception.FDroidException, msg="No NDK setup, `fdroid build` should fail with error", ): fdroidserver.build.build_local( app, build, vcs, build_dir=testdir, output_dir=testdir, log_dir=None, srclib_dir=None, extlib_dir=None, tmp_dir=None, force=False, onserver=False, refresh=False, ) # now run `fdroid build --onserver` print('now run `fdroid build --onserver`') self.assertFalse(ndk_dir.exists()) self.assertFalse('r21e' in config['ndk_paths']) self.assertFalse(ndk_version in config['ndk_paths']) fdroidserver.build.build_local( app, build, vcs, build_dir=testdir, output_dir=testdir, log_dir=os.getcwd(), srclib_dir=None, extlib_dir=None, tmp_dir=None, force=False, onserver=True, refresh=False, ) self.assertTrue(ndk_dir.exists()) self.assertTrue(os.path.exists(config['ndk_paths'][ndk_version])) # All paths in the config must be strings, never pathlib.Path instances self.assertIsInstance(config['ndk_paths'][ndk_version], str) @mock.patch('sdkmanager.build_package_list', lambda use_net: None) @mock.patch('fdroidserver.build.FDroidPopen', FakeProcess) @mock.patch('fdroidserver.common.get_native_code', lambda _ignored: 'x86') @mock.patch('fdroidserver.common.is_debuggable_or_testOnly', lambda _ignored: False) @mock.patch( 'fdroidserver.common.sha256sum', lambda f: 'ad7ce5467e18d40050dc51b8e7affc3e635c85bd8c59be62de32352328ed467e', ) def test_build_local_ndk_some_installed(self): """Test if `fdroid build` detects installed NDKs and auto-installs when missing""" with tempfile.TemporaryDirectory() as testdir, TmpCwd( testdir ), tempfile.TemporaryDirectory() as sdk_path: ndk_r24 = os.path.join(sdk_path, 'ndk', '24.0.8215888') os.makedirs(ndk_r24) with open(os.path.join(ndk_r24, 'source.properties'), 'w') as fp: fp.write('Pkg.Revision = 24.0.8215888\n') config = {'ndk_paths': {'r24': ndk_r24}, 'sdk_path': sdk_path} fdroidserver.common.config = config fdroidserver.build.config = config fdroidserver.build.options = mock.Mock() fdroidserver.build.options.scan_binary = False fdroidserver.build.options.notarball = True fdroidserver.build.options.skipscan = True app = fdroidserver.metadata.App() app.id = 'mocked.app.id' build = fdroidserver.metadata.Build() build.commit = '1.0' build.output = app.id + '.apk' build.versionCode = 1 build.versionName = '1.0' build.ndk = 'r21e' # aka 21.4.7075529 ndk_version = '21.4.7075529' ndk_dir = Path(config['sdk_path']) / 'ndk' / ndk_version vcs = mock.Mock() def make_fake_apk(output, build): with open(build.output, 'w') as fp: fp.write('APK PLACEHOLDER') return output # pylint: disable=unused-argument def fake_sdkmanager_install(to_install, android_home=None): ndk_dir.mkdir(parents=True) self.assertNotEqual(ndk_version, to_install) # converts r21e to version with (ndk_dir / 'source.properties').open('w') as fp: fp.write('Pkg.Revision = %s\n' % ndk_version) # use "as _ignored" just to make a pretty layout with mock.patch( 'fdroidserver.common.replace_build_vars', wraps=make_fake_apk ) as _ignored, mock.patch( 'fdroidserver.common.get_apk_id', return_value=(app.id, build.versionCode, build.versionName), ) as _ignored, mock.patch( 'sdkmanager.install', wraps=fake_sdkmanager_install ) as _ignored: _ignored # silence the linters self.assertFalse(ndk_dir.exists()) self.assertFalse('r21e' in config['ndk_paths']) self.assertFalse(ndk_version in config['ndk_paths']) fdroidserver.build.build_local( app, build, vcs, build_dir=testdir, output_dir=testdir, log_dir=os.getcwd(), srclib_dir=None, extlib_dir=None, tmp_dir=None, force=False, onserver=True, refresh=False, ) self.assertTrue(ndk_dir.exists()) self.assertTrue(os.path.exists(config['ndk_paths'][ndk_version])) def test_build_local_clean(self): """Test if `fdroid build` cleans ant and gradle build products""" os.chdir(self.testdir) config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.build.config = config fdroidserver.build.options = mock.Mock() fdroidserver.build.options.scan_binary = False fdroidserver.build.options.notarball = True fdroidserver.build.options.skipscan = False app = fdroidserver.metadata.App() app.id = 'mocked.app.id' build = fdroidserver.metadata.Build() build.commit = '1.0' build.output = app.id + '.apk' build.scandelete = ['baz.so'] build.scanignore = ['foo.aar'] build.versionCode = 1 build.versionName = '1.0' vcs = mock.Mock() os.mkdir('reports') os.mkdir('target') for f in ('baz.so', 'foo.aar', 'gradle-wrapper.jar'): with open(f, 'w') as fp: fp.write('placeholder') self.assertTrue(os.path.exists(f)) os.mkdir('build') os.mkdir('build/reports') with open('build.gradle', 'w', encoding='utf-8') as fp: fp.write('// placeholder') os.mkdir('bin') os.mkdir('gen') with open('build.xml', 'w', encoding='utf-8') as fp: fp.write( textwrap.dedent( """ """ ) ) def make_fake_apk(output, build): with open(build.output, 'w') as fp: fp.write('APK PLACEHOLDER') return output with mock.patch('fdroidserver.common.replace_build_vars', wraps=make_fake_apk): with mock.patch('fdroidserver.common.get_native_code', return_value='x86'): with mock.patch( 'fdroidserver.common.get_apk_id', return_value=(app.id, build.versionCode, build.versionName), ): with mock.patch( 'fdroidserver.common.is_debuggable_or_testOnly', return_value=False, ): fdroidserver.build.build_local( app, build, vcs, build_dir=self.testdir, output_dir=self.testdir, log_dir=None, srclib_dir=None, extlib_dir=None, tmp_dir=None, force=False, onserver=False, refresh=False, ) self.assertTrue(os.path.exists('foo.aar')) self.assertTrue(os.path.isdir('build')) self.assertTrue(os.path.isdir('reports')) self.assertTrue(os.path.isdir('target')) self.assertFalse(os.path.exists('baz.so')) self.assertFalse(os.path.exists('bin')) self.assertFalse(os.path.exists('build/reports')) self.assertFalse(os.path.exists('gen')) self.assertFalse(os.path.exists('gradle-wrapper.jar')) def test_scan_with_extlib(self): os.chdir(self.testdir) os.mkdir("build") config = fdroidserver.common.read_config() config['sdk_path'] = os.getenv('ANDROID_HOME') config['ndk_paths'] = {'r10d': os.getenv('ANDROID_NDK_HOME')} fdroidserver.common.config = config app = fdroidserver.metadata.App() app.id = 'com.gpl.rpg.AndorsTrail' build = fdroidserver.metadata.Build() build.commit = 'master' build.androidupdate = ['no'] os.makedirs("extlib/android") # write a fake binary jar file the scanner should definitely error on with open('extlib/android/android-support-v4r11.jar', 'wb') as file: file.write( b'PK\x03\x04\x14\x00\x08\x00\x08\x00-\x0eiA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\t\x00\x04\x00META-INF/\xfe\xca\x00\x00\x03\x00PK\x07\x08\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00' ) class FakeVcs: # no need to change to the correct commit here def gotorevision(self, rev, refresh=True): pass def getsrclib(self): return None def deinitsubmodules(self): pass # Test we trigger a scanner error without extlibs build.extlibs = [] os.makedirs('build/libs') shutil.copy('extlib/android/android-support-v4r11.jar', 'build/libs') fdroidserver.common.prepare_source( FakeVcs(), app, build, "build", "ignore", "extlib" ) count = fdroidserver.scanner.scan_source("build", build) self.assertEqual(1, count, "Should produce a scanner error without extlib") # Now try again as an extlib build.extlibs = ['android/android-support-v4r11.jar'] fdroidserver.common.prepare_source( FakeVcs(), app, build, "build", "ignore", "extlib" ) count = fdroidserver.scanner.scan_source("build", build) self.assertEqual(0, count, "Shouldn't error on jar from extlib") def test_failed_verifies_are_not_in_unsigned(self): os.chdir(self.testdir) sdk_path = os.path.join(self.testdir, 'android-sdk') self.create_fake_android_home(sdk_path) with open(fdroidserver.common.CONFIG_FILE, 'w') as fp: yaml.dump({'sdk_path': sdk_path, 'keep_when_not_allowed': True}, fp) os.chmod(fdroidserver.common.CONFIG_FILE, 0o600) fdroidserver.build.config = fdroidserver.common.read_config() os.mkdir('metadata') appid = 'info.guardianproject.checkey' metadata_file = os.path.join('metadata', appid + '.yml') shutil.copy(os.path.join(self.basedir, metadata_file), 'metadata') with open(metadata_file) as fp: app = fdroidserver.metadata.App(yaml.safe_load(fp)) app['RepoType'] = 'git' app[ 'Binaries' ] = 'https://example.com/fdroid/repo/info.guardianproject.checkey_%v.apk' build = fdroidserver.metadata.Build( { 'versionCode': 123, 'versionName': '1.2.3', 'commit': '1.2.3', 'disable': False, } ) app['Builds'] = [build] fdroidserver.metadata.write_metadata(metadata_file, app) os.makedirs(os.path.join('unsigned', 'binaries')) production_result = os.path.join( 'unsigned', '%s_%d.apk' % (appid, build['versionCode']) ) production_compare_file = os.path.join( 'unsigned', 'binaries', '%s_%d.binary.apk' % (appid, build['versionCode']) ) os.makedirs(os.path.join('tmp', 'binaries')) test_result = os.path.join('tmp', '%s_%d.apk' % (appid, build['versionCode'])) test_compare_file = os.path.join( 'tmp', 'binaries', '%s_%d.binary.apk' % (appid, build['versionCode']) ) with mock.patch( 'fdroidserver.common.force_exit', lambda *args: None ) as a, mock.patch( 'fdroidserver.common.get_android_tools_version_log', lambda: 'fake' ) as b, mock.patch( 'fdroidserver.common.FDroidPopen', FakeProcess ) as c, mock.patch( 'fdroidserver.build.FDroidPopen', FakeProcess ) as d, mock.patch( 'fdroidserver.build.trybuild', lambda *args: True ) as e, mock.patch( 'fdroidserver.net.download_file', lambda *args, **kwargs: None ) as f: a, b, c, d, e, f # silence linters' "unused" warnings with mock.patch('sys.argv', ['fdroid build', appid]): # successful comparison open(production_result, 'w').close() open(production_compare_file, 'w').close() with mock.patch('fdroidserver.common.verify_apks', lambda *args: None): fdroidserver.build.main() self.assertTrue(os.path.exists(production_result)) self.assertTrue(os.path.exists(production_compare_file)) # failed comparison open(production_result, 'w').close() open(production_compare_file, 'w').close() with mock.patch( 'fdroidserver.common.verify_apks', lambda *args: 'failed' ): fdroidserver.build.main() self.assertFalse(os.path.exists(production_result)) self.assertFalse(os.path.exists(production_compare_file)) with mock.patch('sys.argv', ['fdroid build', '--test', appid]): # successful comparison open(test_result, 'w').close() open(test_compare_file, 'w').close() with mock.patch('fdroidserver.common.verify_apks', lambda *args: None): fdroidserver.build.main() self.assertTrue(os.path.exists(test_result)) self.assertTrue(os.path.exists(test_compare_file)) self.assertFalse(os.path.exists(production_result)) self.assertFalse(os.path.exists(production_compare_file)) # failed comparison open(test_result, 'w').close() open(test_compare_file, 'w').close() with mock.patch( 'fdroidserver.common.verify_apks', lambda *args: 'failed' ): fdroidserver.build.main() self.assertTrue(os.path.exists(test_result)) self.assertFalse(os.path.exists(test_compare_file)) self.assertFalse(os.path.exists(production_result)) self.assertFalse(os.path.exists(production_compare_file)) def test_failed_allowedapksigningkeys_are_not_in_unsigned(self): os.chdir(self.testdir) os.mkdir('metadata') appid = 'info.guardianproject.checkey' metadata_file = os.path.join('metadata', appid + '.yml') shutil.copy(os.path.join(self.basedir, metadata_file), 'metadata') with open(metadata_file) as fp: app = fdroidserver.metadata.App(yaml.safe_load(fp)) app['RepoType'] = 'git' app[ 'Binaries' ] = 'https://example.com/fdroid/repo/info.guardianproject.checkey_%v.apk' build = fdroidserver.metadata.Build( { 'versionCode': 123, 'versionName': '1.2.3', 'commit': '1.2.3', 'disable': False, } ) app['Builds'] = [build] expected_key = 'a' * 64 bogus_key = 'b' * 64 app['AllowedAPKSigningKeys'] = [expected_key] fdroidserver.metadata.write_metadata(metadata_file, app) os.makedirs(os.path.join('unsigned', 'binaries')) production_result = os.path.join( 'unsigned', '%s_%d.apk' % (appid, build['versionCode']) ) production_compare_file = os.path.join( 'unsigned', 'binaries', '%s_%d.binary.apk' % (appid, build['versionCode']) ) os.makedirs(os.path.join('tmp', 'binaries')) test_result = os.path.join('tmp', '%s_%d.apk' % (appid, build['versionCode'])) test_compare_file = os.path.join( 'tmp', 'binaries', '%s_%d.binary.apk' % (appid, build['versionCode']) ) with mock.patch( 'fdroidserver.common.force_exit', lambda *args: None ) as a, mock.patch( 'fdroidserver.common.get_android_tools_version_log', lambda: 'fake' ) as b, mock.patch( 'fdroidserver.common.FDroidPopen', FakeProcess ) as c, mock.patch( 'fdroidserver.build.FDroidPopen', FakeProcess ) as d, mock.patch( 'fdroidserver.build.trybuild', lambda *args: True ) as e, mock.patch( 'fdroidserver.net.download_file', lambda *args, **kwargs: None ) as f: a, b, c, d, e, f # silence linters' "unused" warnings with mock.patch('sys.argv', ['fdroid build', appid]): # successful comparison, successful signer open(production_result, 'w').close() open(production_compare_file, 'w').close() with mock.patch( 'fdroidserver.common.verify_apks', lambda *args: None ) as g, mock.patch( 'fdroidserver.common.apk_signer_fingerprint', lambda *args: expected_key, ) as h: g, h fdroidserver.build.main() self.assertTrue(os.path.exists(production_result)) self.assertTrue(os.path.exists(production_compare_file)) # successful comparison, failed signer open(production_result, 'w').close() open(production_compare_file, 'w').close() with mock.patch( 'fdroidserver.common.verify_apks', lambda *args: None ) as g, mock.patch( 'fdroidserver.common.apk_signer_fingerprint', lambda *args: bogus_key, ) as h: g, h fdroidserver.build.main() self.assertFalse(os.path.exists(production_result)) self.assertFalse(os.path.exists(production_compare_file)) # failed comparison open(production_result, 'w').close() open(production_compare_file, 'w').close() with mock.patch( 'fdroidserver.common.verify_apks', lambda *args: 'failed' ): fdroidserver.build.main() self.assertFalse(os.path.exists(production_result)) self.assertFalse(os.path.exists(production_compare_file)) with mock.patch('sys.argv', ['fdroid build', '--test', appid]): # successful comparison, successful signer open(test_result, 'w').close() open(test_compare_file, 'w').close() with mock.patch( 'fdroidserver.common.verify_apks', lambda *args: None ) as g, mock.patch( 'fdroidserver.common.apk_signer_fingerprint', lambda *args: expected_key, ) as h: g, h fdroidserver.build.main() self.assertTrue(os.path.exists(test_result)) self.assertTrue(os.path.exists(test_compare_file)) self.assertFalse(os.path.exists(production_result)) self.assertFalse(os.path.exists(production_compare_file)) # successful comparison, failed signer open(test_result, 'w').close() open(test_compare_file, 'w').close() with mock.patch( 'fdroidserver.common.verify_apks', lambda *args: None ) as g, mock.patch( 'fdroidserver.common.apk_signer_fingerprint', lambda *args: bogus_key, ) as h: g, h fdroidserver.build.main() self.assertTrue(os.path.exists(test_result)) self.assertFalse(os.path.exists(test_compare_file)) self.assertFalse(os.path.exists(production_result)) self.assertFalse(os.path.exists(production_compare_file)) # failed comparison open(test_result, 'w').close() open(test_compare_file, 'w').close() with mock.patch( 'fdroidserver.common.verify_apks', lambda *args: 'failed' ): fdroidserver.build.main() self.assertTrue(os.path.exists(test_result)) self.assertFalse(os.path.exists(test_compare_file)) self.assertFalse(os.path.exists(production_result)) self.assertFalse(os.path.exists(production_compare_file)) @mock.patch('fdroidserver.vmtools.get_build_vm') @mock.patch('fdroidserver.vmtools.get_clean_builder') @mock.patch('paramiko.SSHClient') @mock.patch('subprocess.check_output') def test_build_server_cmdline( self, subprocess_check_output, paramiko_SSHClient, fdroidserver_vmtools_get_clean_builder, fdroidserver_vmtools_get_build_vm, ): """Test command line flags passed to the buildserver""" global cmdline_args test_flag = ['', False] def _exec_command(args): flag = test_flag[0] if test_flag[1]: self.assertTrue(flag in args, flag + ' should be present') else: self.assertFalse(flag in args, flag + ' should not be present') os.chdir(self.testdir) os.mkdir('tmp') chan = mock.MagicMock() chan.exec_command = _exec_command chan.recv_exit_status = lambda: 0 transport = mock.MagicMock() transport.open_session = mock.Mock(return_value=chan) sshs = mock.MagicMock() sshs.get_transport = mock.Mock(return_value=transport) paramiko_SSHClient.return_value = sshs subprocess_check_output.return_value = ( b'0123456789abcdef0123456789abcdefcafebabe' ) fdroidserver_vmtools_get_clean_builder.side_effect = lambda s: { 'hostname': 'example.com', 'idfile': '/path/to/id/file', 'port': 123, 'user': 'fake', } fdroidserver.common.config = {'sdk_path': '/fake/android/sdk/path'} fdroidserver.build.options = mock.MagicMock() vcs = mock.Mock() vcs.getsrclib = mock.Mock(return_value=None) app = fdroidserver.metadata.App() app['metadatapath'] = 'metadata/fake.id.yml' app['id'] = 'fake.id' app['RepoType'] = 'git' build = fdroidserver.metadata.Build( { 'versionCode': 123, 'versionName': '1.2.3', 'commit': '1.2.3', 'disable': False, } ) app['Builds'] = [build] test_flag = ('--on-server', True) fdroidserver.build.build_server(app, build, vcs, '', '', '', False) self.assertTrue(fdroidserver_vmtools_get_build_vm.called) for force in (True, False): test_flag = ('--force', force) fdroidserver.build.build_server(app, build, vcs, '', '', '', force) fdroidserver.build.options.notarball = True test_flag = ('--no-tarball', True) fdroidserver.build.build_server(app, build, vcs, '', '', '', False) fdroidserver.build.options.notarball = False test_flag = ('--no-tarball', False) fdroidserver.build.build_server(app, build, vcs, '', '', '', False) fdroidserver.build.options.skipscan = False test_flag = ('--scan-binary', True) fdroidserver.build.build_server(app, build, vcs, '', '', '', False) fdroidserver.build.options.skipscan = True test_flag = ('--scan-binary', False) fdroidserver.build.build_server(app, build, vcs, '', '', '', False) test_flag = ('--skip-scan', True) fdroidserver.build.build_server(app, build, vcs, '', '', '', False) @mock.patch('fdroidserver.vmtools.get_build_vm') @mock.patch('fdroidserver.vmtools.get_clean_builder') @mock.patch('paramiko.SSHClient') @mock.patch('subprocess.check_output') @mock.patch('fdroidserver.common.getsrclib') @mock.patch('fdroidserver.common.prepare_source') @mock.patch('fdroidserver.build.build_local') @mock.patch('fdroidserver.common.get_android_tools_version_log', lambda: 'versions') @mock.patch('fdroidserver.common.deploy_build_log_with_rsync', lambda a, b, c: None) def test_build_server_no_local_prepare( self, build_build_local, common_prepare_source, common_getsrclib, subprocess_check_output, paramiko_SSHClient, fdroidserver_vmtools_get_clean_builder, fdroidserver_vmtools_get_build_vm, # pylint: disable=unused-argument ): """srclibs Prepare: should only be executed in the buildserver""" def _exec_command(args): print('chan.exec_command', args) def _getsrclib( spec, srclib_dir, basepath=False, raw=False, prepare=True, preponly=False, refresh=True, build=None, ): # pylint: disable=unused-argument name, ref = spec.split('@') libdir = os.path.join(srclib_dir, name) os.mkdir(libdir) self.assertFalse(prepare, 'Prepare: scripts should never run on host') return name, None, libdir # TODO os.chdir(self.testdir) chan = mock.MagicMock() chan.exec_command = _exec_command chan.recv_exit_status = lambda: 0 transport = mock.MagicMock() transport.open_session = mock.Mock(return_value=chan) sshs = mock.MagicMock() sshs.get_transport = mock.Mock(return_value=transport) paramiko_SSHClient.return_value = sshs subprocess_check_output.return_value = ( b'0123456789abcdef0123456789abcdefcafebabe' ) fdroidserver_vmtools_get_clean_builder.side_effect = lambda s: { 'hostname': 'example.com', 'idfile': '/path/to/id/file', 'port': 123, 'user': 'fake', } fdroidserver.metadata.srclibs = { 'flutter': { 'RepoType': 'git', 'Repo': 'https://github.com/flutter/flutter', } } os.mkdir('srclibs') with open('srclibs/flutter.yml', 'w') as fp: yaml.dump(fdroidserver.metadata.srclibs, fp) common_getsrclib.side_effect = _getsrclib options = mock.MagicMock() options.force = False options.notarball = True options.onserver = False options.refresh = False options.scan_binary = False options.server = True options.skipscan = True options.test = False options.verbose = True fdroidserver.build.options = options fdroidserver.build.config = {'sdk_path': '/fake/android/sdk/path'} vcs = mock.Mock() vcs.getsrclib = mock.Mock(return_value=None) app = fdroidserver.metadata.App() app['metadatapath'] = 'metadata/fake.id.yml' app['id'] = 'fake.id' app['RepoType'] = 'git' spec = 'flutter@v1.7.8' build = fdroidserver.metadata.Build( { 'versionCode': 123, 'versionName': '1.2.3', 'commit': '1.2.3', 'disable': False, 'srclibs': [spec], } ) app['Builds'] = [build] build_dir = 'build' srclib_dir = os.path.join(build_dir, 'srclib') extlib_dir = os.path.join(build_dir, 'extlib') os.mkdir('tmp') os.mkdir(build_dir) os.mkdir(srclib_dir) fdroidserver.build.trybuild( app, build, build_dir, 'unsigned', 'logs', None, srclib_dir, extlib_dir, 'tmp', 'repo', vcs, options.test, options.server, options.force, options.onserver, options.refresh, ) common_getsrclib.assert_called_once_with( spec, srclib_dir, basepath=True, prepare=False ) common_prepare_source.assert_not_called() build_build_local.assert_not_called() def test_keep_when_not_allowed_default(self): self.assertFalse(fdroidserver.build.keep_when_not_allowed()) def test_keep_when_not_allowed_config_true(self): fdroidserver.build.config = {'keep_when_not_allowed': True} self.assertTrue(fdroidserver.build.keep_when_not_allowed()) def test_keep_when_not_allowed_config_false(self): fdroidserver.build.config = {'keep_when_not_allowed': False} self.assertFalse(fdroidserver.build.keep_when_not_allowed()) def test_keep_when_not_allowed_options_true(self): fdroidserver.build.options = Options fdroidserver.build.options.keep_when_not_allowed = True self.assertTrue(fdroidserver.build.keep_when_not_allowed()) def test_keep_when_not_allowed_options_false(self): fdroidserver.build.options = Options fdroidserver.build.options.keep_when_not_allowed = False self.assertFalse(fdroidserver.build.keep_when_not_allowed()) def test_keep_when_not_allowed_options_true_override_config(self): fdroidserver.build.options = Options fdroidserver.build.options.keep_when_not_allowed = True fdroidserver.build.config = {'keep_when_not_allowed': False} self.assertTrue(fdroidserver.build.keep_when_not_allowed()) def test_keep_when_not_allowed_options_default_does_not_override(self): fdroidserver.build.options = Options fdroidserver.build.options.keep_when_not_allowed = False fdroidserver.build.config = {'keep_when_not_allowed': True} self.assertTrue(fdroidserver.build.keep_when_not_allowed()) def test_keep_when_not_allowed_all_true(self): fdroidserver.build.options = Options fdroidserver.build.options.keep_when_not_allowed = True fdroidserver.build.config = {'keep_when_not_allowed': True} self.assertTrue(fdroidserver.build.keep_when_not_allowed()) def test_keep_when_not_allowed_all_false(self): fdroidserver.build.options = Options fdroidserver.build.options.keep_when_not_allowed = False fdroidserver.build.config = {'keep_when_not_allowed': False} self.assertFalse(fdroidserver.build.keep_when_not_allowed()) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742812298.0 fdroidserver-2.4.0/tests/test_checkupdates.py0000755000175000017500000006744114770232212020154 0ustar00hanshans#!/usr/bin/env python3 import git import os import platform import shutil import tempfile import time import unittest from unittest import mock from pathlib import Path import fdroidserver import fdroidserver.checkupdates basedir = Path(__file__).parent class CheckupdatesTest(unittest.TestCase): '''fdroidserver/checkupdates.py''' def setUp(self): os.chdir(basedir) self.testdir = tempfile.TemporaryDirectory( str(time.time()), self._testMethodName + '_' ) def tearDown(self): self.testdir.cleanup() def test_autoupdatemode_no_suffix(self): fdroidserver.checkupdates.config = {} app = fdroidserver.metadata.App() app.id = 'loop.starts.shooting' app.metadatapath = 'metadata/' + app.id + '.yml' app.CurrentVersion = '1.1.8-fdroid' app.CurrentVersionCode = 10108 app.UpdateCheckMode = 'HTTP' app.AutoUpdateMode = 'Version %v' build = fdroidserver.metadata.Build() build.versionCode = app.CurrentVersionCode build.versionName = app.CurrentVersion app['Builds'].append(build) with mock.patch( 'fdroidserver.checkupdates.check_http', lambda app: ('1.1.9', 10109) ): with mock.patch('fdroidserver.metadata.write_metadata', mock.Mock()): with mock.patch('subprocess.call', lambda cmd: 0): fdroidserver.checkupdates.checkupdates_app(app, auto=True) build = app['Builds'][-1] self.assertEqual(build.versionName, '1.1.9') self.assertEqual(build.commit, '1.1.9') with mock.patch( 'fdroidserver.checkupdates.check_http', lambda app: ('1.7.9', 10107) ): with mock.patch('fdroidserver.metadata.write_metadata', mock.Mock()): with mock.patch('subprocess.call', lambda cmd: 0): with self.assertRaises(fdroidserver.exception.FDroidException): fdroidserver.checkupdates.checkupdates_app(app, auto=True) build = app['Builds'][-1] self.assertEqual(build.versionName, '1.1.9') self.assertEqual(build.commit, '1.1.9') def test_autoupdatemode_suffix(self): fdroidserver.checkupdates.config = {} app = fdroidserver.metadata.App() app.id = 'loop.starts.shooting' app.metadatapath = 'metadata/' + app.id + '.yml' app.CurrentVersion = '1.1.8-fdroid' app.CurrentVersionCode = 10108 app.UpdateCheckMode = 'HTTP' app.AutoUpdateMode = r'Version +.%c-fdroid v%v_%c' build = fdroidserver.metadata.Build() build.versionCode = app.CurrentVersionCode build.versionName = app.CurrentVersion app['Builds'].append(build) with mock.patch( 'fdroidserver.checkupdates.check_http', lambda app: ('1.1.9', 10109) ): with mock.patch('fdroidserver.metadata.write_metadata', mock.Mock()): with mock.patch('subprocess.call', lambda cmd: 0): fdroidserver.checkupdates.checkupdates_app(app, auto=True) build = app['Builds'][-1] self.assertEqual(build.versionName, '1.1.9.10109-fdroid') self.assertEqual(build.commit, 'v1.1.9_10109') def test_autoupdate_multi_variants(self): fdroidserver.checkupdates.config = {} app = fdroidserver.metadata.App() app.id = 'loop.starts.shooting' app.metadatapath = 'metadata/' + app.id + '.yml' app.CurrentVersion = '1.1.8' app.CurrentVersionCode = 101083 app.UpdateCheckMode = 'Tags' app.AutoUpdateMode = r'Version' app.VercodeOperation = [ "10*%c+1", "10*%c+3", ] build = fdroidserver.metadata.Build() build.versionCode = app.CurrentVersionCode - 2 build.versionName = app.CurrentVersion build.gradle = ["arm"] app['Builds'].append(build) build = fdroidserver.metadata.Build() build.versionCode = app.CurrentVersionCode build.versionName = app.CurrentVersion build.gradle = ["x86"] app['Builds'].append(build) with mock.patch( 'fdroidserver.checkupdates.check_tags', lambda app, pattern: ('1.1.9', 10109, 'v1.1.9'), ): with mock.patch('fdroidserver.metadata.write_metadata', mock.Mock()): with mock.patch('subprocess.call', lambda cmd: 0): fdroidserver.checkupdates.checkupdates_app(app, auto=True) build = app['Builds'][-2] self.assertEqual(build.versionName, '1.1.9') self.assertEqual(build.versionCode, 101091) self.assertEqual(build.gradle, ["arm"]) build = app['Builds'][-1] self.assertEqual(build.versionName, '1.1.9') self.assertEqual(build.versionCode, 101093) self.assertEqual(build.gradle, ["x86"]) self.assertEqual(app.CurrentVersion, '1.1.9') self.assertEqual(app.CurrentVersionCode, 101093) def test_checkupdates_app_http(self): fdroidserver.checkupdates.config = {} app = fdroidserver.metadata.App() app.id = 'loop.starts.shooting' app.metadatapath = 'metadata/' + app.id + '.yml' app.CurrentVersionCode = 10108 app.UpdateCheckMode = 'HTTP' app.UpdateCheckData = 'mock' with mock.patch( 'fdroidserver.checkupdates.check_http', lambda app: (None, 'bla') ): with self.assertRaises(fdroidserver.exception.FDroidException): fdroidserver.checkupdates.checkupdates_app(app, auto=True) with mock.patch( 'fdroidserver.checkupdates.check_http', lambda app: ('1.1.9', 10109) ): with mock.patch( 'fdroidserver.metadata.write_metadata', mock.Mock() ) as wrmock: with mock.patch('subprocess.call', lambda cmd: 0): fdroidserver.checkupdates.checkupdates_app(app, auto=True) wrmock.assert_called_with(app.metadatapath, app) def test_checkupdates_app_tags(self): fdroidserver.checkupdates.config = {} app = fdroidserver.metadata.App() app.id = 'loop.starts.shooting' app.metadatapath = 'metadata/' + app.id + '.yml' app.CurrentVersion = '1.1.8' app.CurrentVersionCode = 10108 app.UpdateCheckMode = 'Tags' app.AutoUpdateMode = 'Version' build = fdroidserver.metadata.Build() build.versionCode = app.CurrentVersionCode build.versionName = app.CurrentVersion app['Builds'].append(build) with mock.patch( 'fdroidserver.checkupdates.check_tags', lambda app, pattern: (None, 'bla', None), ): with self.assertRaises(fdroidserver.exception.FDroidException): fdroidserver.checkupdates.checkupdates_app(app, auto=True) with mock.patch( 'fdroidserver.checkupdates.check_tags', lambda app, pattern: ('1.1.9', 10109, 'v1.1.9'), ): with mock.patch('fdroidserver.metadata.write_metadata', mock.Mock()): with mock.patch('subprocess.call', lambda cmd: 0): fdroidserver.checkupdates.checkupdates_app(app, auto=True) build = app['Builds'][-1] self.assertEqual(build.versionName, '1.1.9') self.assertEqual(build.commit, 'v1.1.9') def test_check_http(self): app = fdroidserver.metadata.App() app.id = 'loop.starts.shooting' app.metadatapath = 'metadata/' + app.id + '.yml' app.CurrentVersionCode = 10108 app.UpdateCheckMode = 'HTTP' app.UpdateCheckData = r'https://a.net/b.txt|c(.*)|https://d.net/e.txt|v(.*)' app.UpdateCheckIgnore = 'beta' respmock = mock.Mock() respmock.read = lambda: 'v1.1.9\nc10109'.encode('utf-8') with mock.patch('urllib.request.urlopen', lambda a, b, c: respmock): vername, vercode = fdroidserver.checkupdates.check_http(app) self.assertEqual(vername, '1.1.9') self.assertEqual(vercode, 10109) def test_check_http_blocks_unknown_schemes(self): app = fdroidserver.metadata.App() for scheme in ('file', 'ssh', 'http', ';pwn'): app.id = scheme faked = scheme + '://fake.url/for/testing/scheme' app.UpdateCheckData = faked + '|ignored|' + faked + '|ignored' app.metadatapath = 'metadata/' + app.id + '.yml' with self.assertRaises(fdroidserver.exception.FDroidException): fdroidserver.checkupdates.check_http(app) def test_check_http_ignore(self): app = fdroidserver.metadata.App() app.id = 'loop.starts.shooting' app.metadatapath = 'metadata/' + app.id + '.yml' app.CurrentVersionCode = 10108 app.UpdateCheckMode = 'HTTP' app.UpdateCheckData = r'https://a.net/b.txt|c(.*)|https://d.net/e.txt|v(.*)' app.UpdateCheckIgnore = 'beta' respmock = mock.Mock() respmock.read = lambda: 'v1.1.9-beta\nc10109'.encode('utf-8') with mock.patch('urllib.request.urlopen', lambda a, b, c: respmock): vername, vercode = fdroidserver.checkupdates.check_http(app) self.assertEqual(vername, None) def test_check_tags_data(self): app = fdroidserver.metadata.App() app.id = 'loop.starts.shooting' app.metadatapath = 'metadata/' + app.id + '.yml' app.RepoType = 'git' app.CurrentVersionCode = 10108 app.UpdateCheckMode = 'Tags' app.UpdateCheckData = r'b.txt|c(.*)|e.txt|v(.*)' vcs = mock.Mock() vcs.latesttags.return_value = ['1.1.9', '1.1.8'] with mock.patch( 'pathlib.Path.read_text', lambda a: 'v1.1.9\nc10109' ) as _ignored, mock.patch.object(Path, 'is_file') as mock_path, mock.patch( 'fdroidserver.common.getvcs', return_value=vcs ): _ignored # silence the linters mock_path.is_file.return_falue = True vername, vercode, _tag = fdroidserver.checkupdates.check_tags(app, None) self.assertEqual(vername, '1.1.9') self.assertEqual(vercode, 10109) app.UpdateCheckData = r'b.txt|c(.*)|.|v(.*)' with mock.patch( 'pathlib.Path.read_text', lambda a: 'v1.1.0\nc10109' ) as _ignored, mock.patch.object(Path, 'is_file') as mock_path, mock.patch( 'fdroidserver.common.getvcs', return_value=vcs ): _ignored # silence the linters mock_path.is_file.return_falue = True vername, vercode, _tag = fdroidserver.checkupdates.check_tags(app, None) self.assertEqual(vername, '1.1.0') self.assertEqual(vercode, 10109) app.UpdateCheckData = r'b.txt|c(.*)||' with mock.patch( 'pathlib.Path.read_text', lambda a: 'v1.1.9\nc10109' ) as _ignored, mock.patch.object(Path, 'is_file') as mock_path, mock.patch( 'fdroidserver.common.getvcs', return_value=vcs ): _ignored # silence the linters mock_path.is_file.return_falue = True vername, vercode, _tag = fdroidserver.checkupdates.check_tags(app, None) self.assertEqual(vername, '1.1.9') self.assertEqual(vercode, 10109) vcs.latesttags.return_value = ['Android-1.1.0', '1.1.8'] app.UpdateCheckData = r'b.txt|c(.*)||Android-([\d.]+)' with mock.patch( 'pathlib.Path.read_text', lambda a: 'v1.1.9\nc10109' ) as _ignored, mock.patch.object(Path, 'is_file') as mock_path, mock.patch( 'fdroidserver.common.getvcs', return_value=vcs ): _ignored # silence the linters mock_path.is_file.return_falue = True vername, vercode, _tag = fdroidserver.checkupdates.check_tags(app, None) self.assertEqual(vername, '1.1.0') self.assertEqual(vercode, 10109) app.UpdateCheckData = r'|\+(\d+)||Android-([\d.]+)' vcs.latesttags.return_value = ['Android-1.1.0+1'] with mock.patch('fdroidserver.common.getvcs', return_value=vcs): vername, vercode, _tag = fdroidserver.checkupdates.check_tags(app, None) self.assertEqual(vername, '1.1.0') self.assertEqual(vercode, 1) app.UpdateCheckData = '|||' vcs.latesttags.return_value = ['2'] with mock.patch('fdroidserver.common.getvcs', return_value=vcs): vername, vercode, _tag = fdroidserver.checkupdates.check_tags(app, None) self.assertEqual(vername, '2') self.assertEqual(vercode, 2) def _get_test_git_repos(self): testdir = self.testdir.name os.chdir(testdir) os.mkdir('metadata') for f in (basedir / 'metadata').glob('*.yml'): shutil.copy(f, 'metadata') git_repo = git.Repo.init(testdir) with git_repo.config_writer() as cw: cw.set_value('user', 'name', 'Foo Bar') cw.set_value('user', 'email', 'foo@bar.com') git_repo.git.add(all=True) git_repo.index.commit("all metadata files") git_remote_upstream = os.path.join(testdir, 'git_remote_upstream') upstream_repo = git.Repo.init(git_remote_upstream, bare=True) with upstream_repo.config_writer() as cw: cw.set_value('receive', 'advertisePushOptions', True) git_repo.create_remote('upstream', 'file://' + git_remote_upstream) git_remote_origin = os.path.join(testdir, 'git_remote_origin') origin_repo = git.Repo.init(git_remote_origin, bare=True) with origin_repo.config_writer() as cw: cw.set_value('receive', 'advertisePushOptions', True) git_repo.create_remote('origin', 'file://' + git_remote_origin) return git_repo, origin_repo, upstream_repo def test_get_changes_versus_ref(self): def _make_commit_new_app(git_repo, metadata_file): app = fdroidserver.metadata.App() fdroidserver.metadata.write_metadata(metadata_file, app) git_repo.git.add(metadata_file) git_repo.git.commit(metadata_file, message=f'changed {metadata_file}') git_repo, origin_repo, upstream_repo = self._get_test_git_repos() for remote in git_repo.remotes: remote.push(git_repo.active_branch) appid = 'com.testvalue' metadata_file = f'metadata/{appid}.yml' # set up remote branch with change to app git_repo.git.checkout('-b', appid) _make_commit_new_app(git_repo, metadata_file) git_repo.remotes.origin.push(appid) # reset local branch and there should be differences upstream_main = fdroidserver.checkupdates.get_upstream_main_branch(git_repo) git_repo.git.reset(upstream_main) self.assertTrue( fdroidserver.checkupdates.get_changes_versus_ref( git_repo, f'origin/{appid}', metadata_file ) ) # make new commit that matches the previous, different commit, no diff _make_commit_new_app(git_repo, metadata_file) self.assertFalse( fdroidserver.checkupdates.get_changes_versus_ref( git_repo, f'origin/{appid}', metadata_file ) ) def test_push_commits(self): git_repo, origin_repo, upstream_repo = self._get_test_git_repos() for remote in git_repo.remotes: remote.push(git_repo.active_branch) self.assertEqual(git_repo.head, upstream_repo.head) self.assertEqual(origin_repo.head, upstream_repo.head) # pretend that checkupdates ran but didn't create any new commits fdroidserver.checkupdates.push_commits() appid = 'org.adaway' self.assertNotIn(appid, git_repo.branches) self.assertNotIn(appid, origin_repo.branches) self.assertNotIn(appid, upstream_repo.branches) self.assertNotIn('checkupdates', git_repo.branches) # now make commit app = fdroidserver.metadata.read_metadata({appid: -1})[appid] build = fdroidserver.metadata.Build() build.versionName = 'fake' build.versionCode = 999999999 app.Builds.append(build) metadata_file = 'metadata/%s.yml' % appid fdroidserver.metadata.write_metadata(metadata_file, app) git_repo.index.add(metadata_file) git_repo.index.commit('changed ' + appid) # and push the new commit to the dynamic branch fdroidserver.checkupdates.push_commits() self.assertIn(appid, git_repo.branches) self.assertIn(appid, git_repo.remotes.origin.refs) self.assertNotIn('checkupdates', git_repo.branches) self.assertNotIn(appid, git_repo.remotes.upstream.refs) def test_push_commits_verbose(self): class Options: verbose = True fdroidserver.checkupdates.options = Options repos = self._get_test_git_repos() git_repo = repos[0] git_repo.remotes.origin.push(git_repo.active_branch) git_repo.remotes.upstream.push(git_repo.active_branch) # make commit appid = 'org.adaway' app = fdroidserver.metadata.read_metadata({appid: -1})[appid] build = fdroidserver.metadata.Build() build.versionName = 'fake' build.versionCode = 999999999 app.Builds.append(build) metadata_file = 'metadata/%s.yml' % appid fdroidserver.metadata.write_metadata(metadata_file, app) git_repo.index.add(metadata_file) git_repo.index.commit('changed ' + appid) # and push the new commit to the dynamic branch fdroidserver.checkupdates.push_commits() self.assertIn(appid, git_repo.branches) self.assertIn(appid, git_repo.remotes.origin.refs) def test_prune_empty_appid_branches(self): git_repo, origin_repo, upstream_repo = self._get_test_git_repos() for remote in git_repo.remotes: remote.push(git_repo.active_branch) self.assertEqual(git_repo.head, upstream_repo.head) self.assertEqual(origin_repo.head, upstream_repo.head) appid = 'org.adaway' git_repo.create_head(appid, force=True) git_repo.remotes.origin.push(appid, force=True) self.assertIn(appid, git_repo.branches) self.assertIn(appid, origin_repo.branches) self.assertIn(appid, git_repo.remotes.origin.refs) self.assertNotIn(appid, git_repo.remotes.upstream.refs) fdroidserver.checkupdates.prune_empty_appid_branches() self.assertNotIn(appid, origin_repo.branches) self.assertNotIn(appid, git_repo.remotes.origin.refs) self.assertNotIn(appid, git_repo.remotes.upstream.refs) @mock.patch('sys.exit') @mock.patch('fdroidserver.metadata.read_metadata') def test_merge_requests_flag(self, read_metadata, sys_exit): def _sys_exit(return_code=0): self.assertNotEqual(return_code, 0) raise fdroidserver.exception.FDroidException('sys.exit() ran') def _read_metadata(a=None, b=None): raise StopIteration('read_metadata() ran, test is successful') appid = 'com.example' # read_metadata.return_value = dict() # {appid: dict()} read_metadata.side_effect = _read_metadata sys_exit.side_effect = _sys_exit # set up clean git repo os.chdir(self.testdir.name) git_repo = git.Repo.init() open('foo', 'w').close() git_repo.git.add(all=True) git_repo.index.commit("all files") with mock.patch('sys.argv', ['fdroid checkupdates', '--merge-request']): with self.assertRaises(fdroidserver.exception.FDroidException): fdroidserver.checkupdates.main() sys_exit.assert_called() sys_exit.reset_mock() with mock.patch('sys.argv', ['fdroid checkupdates', '--merge-request', appid]): with self.assertRaises(StopIteration): fdroidserver.checkupdates.main() sys_exit.assert_not_called() @unittest.skipIf( platform.system() == 'Darwin', 'It is difficult to configure the base system for this test.', ) def test_get_upstream_main_branch(self): os.chdir(self.testdir.name) testvalue = 'foo' git_repo = git.Repo.init('.', initial_branch=testvalue) open('foo', 'w').close() git_repo.git.add(all=True) git_repo.index.commit("all files") git_repo.create_remote('upstream', os.getcwd()).fetch() branch = fdroidserver.checkupdates.get_upstream_main_branch(git_repo) self.assertEqual( f'upstream/{testvalue}', branch, f'The default branch should be called {testvalue}!', ) def test_get_upstream_main_branch_git_config(self): os.chdir(self.testdir.name) testvalue = 'foo' git_repo = git.Repo.init('.', initial_branch=testvalue) with git_repo.config_writer() as cw: cw.set_value('init', 'defaultBranch', testvalue) open('foo', 'w').close() git_repo.git.add(all=True) git_repo.index.commit("all files") git_repo.git.branch('somethingelse') # make another remote branch git_repo.create_remote('upstream', os.getcwd()).fetch() branch = fdroidserver.checkupdates.get_upstream_main_branch(git_repo) self.assertEqual( f'upstream/{testvalue}', branch, f'The default branch should be called {testvalue}!', ) def test_checkout_appid_branch_does_not_exist(self): appid = 'com.example' os.chdir(self.testdir.name) git_repo = git.Repo.init('.') open('foo', 'w').close() git_repo.git.add(all=True) git_repo.index.commit("all files") # --merge-request assumes remotes called 'origin' and 'upstream' git_repo.create_remote('origin', os.getcwd()).fetch() git_repo.create_remote('upstream', os.getcwd()).fetch() self.assertNotIn(appid, git_repo.heads) fdroidserver.checkupdates.checkout_appid_branch(appid) self.assertIn(appid, git_repo.heads) def test_checkout_appid_branch_exists(self): appid = 'com.example' upstream_dir = os.path.join(self.testdir.name, 'upstream_git') os.mkdir(upstream_dir) upstream_repo = git.Repo.init(upstream_dir) (Path(upstream_dir) / 'README').write_text('README') upstream_repo.git.add(all=True) upstream_repo.index.commit("README") upstream_repo.create_head(appid) local_dir = os.path.join(self.testdir.name, 'local_git') git.Repo.clone_from(upstream_dir, local_dir) os.chdir(local_dir) git_repo = git.Repo.init('.') # --merge-request assumes remotes called 'origin' and 'upstream' git_repo.create_remote('upstream', upstream_dir).fetch() self.assertNotIn(appid, git_repo.heads) fdroidserver.checkupdates.checkout_appid_branch(appid) self.assertIn(appid, git_repo.heads) def test_checkout_appid_branch_skip_bot_commit(self): appid = 'com.example' upstream_dir = os.path.join(self.testdir.name, 'upstream_git') os.mkdir(upstream_dir) upstream_repo = git.Repo.init(upstream_dir) (Path(upstream_dir) / 'README').write_text('README') upstream_repo.git.add(all=True) upstream_repo.index.commit("README") upstream_repo.create_head(appid) local_dir = os.path.join(self.testdir.name, 'local_git') git.Repo.clone_from(upstream_dir, local_dir) os.chdir(local_dir) git_repo = git.Repo.init('.') # --merge-request assumes remotes called 'origin' and 'upstream' git_repo.create_remote('upstream', upstream_dir).fetch() os.mkdir('metadata') git_repo.create_head(appid, f'origin/{appid}', force=True) git_repo.git.checkout(appid) # fake checkupdates-bot commit Path(f'metadata/{appid}.yml').write_text('AutoName: Example\n') with git_repo.config_writer() as cw: cw.set_value('user', 'email', fdroidserver.checkupdates.BOT_EMAIL) git_repo.git.add(all=True) git_repo.index.commit("Example") # set up starting from remote branch git_repo.remotes.origin.push(appid) upstream_main = fdroidserver.checkupdates.get_upstream_main_branch(git_repo) git_repo.git.checkout(upstream_main.split('/')[1]) git_repo.delete_head(appid, force=True) self.assertTrue( fdroidserver.checkupdates.checkout_appid_branch(appid), 'This should have been true since there are only bot commits.', ) def test_checkout_appid_branch_skip_human_edits(self): appid = 'com.example' upstream_dir = os.path.join(self.testdir.name, 'upstream_git') os.mkdir(upstream_dir) upstream_repo = git.Repo.init(upstream_dir) (Path(upstream_dir) / 'README').write_text('README') upstream_repo.git.add(all=True) upstream_repo.index.commit("README") upstream_repo.create_head(appid) local_dir = os.path.join(self.testdir.name, 'local_git') git.Repo.clone_from(upstream_dir, local_dir) os.chdir(local_dir) git_repo = git.Repo.init('.') # --merge-request assumes remotes called 'origin' and 'upstream' git_repo.create_remote('upstream', upstream_dir).fetch() os.mkdir('metadata') git_repo.create_head(appid, f'origin/{appid}', force=True) git_repo.git.checkout(appid) with git_repo.config_writer() as cw: cw.set_value('user', 'email', fdroidserver.checkupdates.BOT_EMAIL) # fake checkupdates-bot commit Path(f'metadata/{appid}.yml').write_text('AutoName: Example\n') git_repo.git.add(all=True) git_repo.index.commit("Example") # fake commit added on top by a human Path(f'metadata/{appid}.yml').write_text('AutoName: Example\nName: Foo\n') with git_repo.config_writer() as cw: cw.set_value('user', 'email', 'human@bar.com') git_repo.git.add(all=True) git_repo.index.commit("Example") # set up starting from remote branch git_repo.remotes.origin.push(appid) upstream_main = fdroidserver.checkupdates.get_upstream_main_branch(git_repo) git_repo.git.reset(upstream_main.split('/')[1]) self.assertFalse( fdroidserver.checkupdates.checkout_appid_branch(appid), 'This should have been false since there are human edits.', ) @mock.patch('git.remote.Remote.push') @mock.patch('sys.exit') @mock.patch('fdroidserver.common.read_app_args') @mock.patch('fdroidserver.checkupdates.checkupdates_app') def test_merge_requests_branch( self, checkupdates_app, read_app_args, sys_exit, push ): def _sys_exit(return_code=0): self.assertEqual(return_code, 0) def _checkupdates_app(app, auto, commit): # pylint: disable=unused-argument os.mkdir('metadata') Path(f'metadata/{app["packageName"]}.yml').write_text('AutoName: Example') git_repo.git.add(all=True) git_repo.index.commit("Example") def _read_app_args(apps=[]): appid = apps[0] return {appid: {'packageName': appid}} appid = 'com.example' read_app_args.side_effect = _read_app_args checkupdates_app.side_effect = _checkupdates_app sys_exit.side_effect = _sys_exit # set up clean git repo os.chdir(self.testdir.name) git_repo = git.Repo.init() open('foo', 'w').close() git_repo.git.add(all=True) git_repo.index.commit("all files") # --merge-request assumes remotes called 'origin' and 'upstream' git_repo.create_remote('origin', os.getcwd()).fetch() git_repo.create_remote('upstream', os.getcwd()).fetch() self.assertNotIn(appid, git_repo.heads) with mock.patch('sys.argv', ['fdroid checkupdates', '--merge-request', appid]): fdroidserver.checkupdates.main() push.assert_called_once() sys_exit.assert_called_once() self.assertIn(appid, git_repo.heads) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/tests/test_common.py0000755000175000017500000045321114770502071016776 0ustar00hanshans#!/usr/bin/env python3 import difflib import git import glob import importlib import json import logging import os import re import ruamel.yaml import shutil import subprocess import sys import tempfile import time import unittest import textwrap import gzip from argparse import ArgumentParser from datetime import datetime, timezone from zipfile import BadZipFile, ZipFile from unittest import mock from pathlib import Path import fdroidserver import fdroidserver.signindex import fdroidserver.common import fdroidserver.metadata from .shared_test_code import TmpCwd, mkdtemp, mkdir_testfiles from fdroidserver.common import ANTIFEATURES_CONFIG_NAME, CATEGORIES_CONFIG_NAME from fdroidserver._yaml import yaml, yaml_dumper, config_dump from fdroidserver.exception import FDroidException, VCSException,\ MetaDataException, VerificationException from fdroidserver.looseversion import LooseVersion basedir = Path(__file__).parent def _mock_common_module_options_instance(): """Helper method to deal with difficult visibility of the module-level options.""" fdroidserver.common.options = mock.Mock() fdroidserver.common.options.verbose = False class SetUpTearDownMixin: """A mixin with no tests in it for shared setUp and tearDown.""" def setUp(self): logging.basicConfig(level=logging.DEBUG) logger = logging.getLogger('androguard.axml') logger.setLevel(logging.INFO) # tame the axml debug messages os.chdir(basedir) self.verbose = '-v' in sys.argv or '--verbose' in sys.argv fdroidserver.common.set_console_logging(self.verbose) # these are declared as None at the top of the module file fdroidserver.common.config = None fdroidserver.common.options = None fdroidserver.metadata.srclibs = None self.testdir = mkdir_testfiles(basedir, self) def tearDown(self): fdroidserver.common.config = None fdroidserver.common.options = None os.chdir(basedir) if os.path.exists(self.testdir): shutil.rmtree(self.testdir) class CommonTest(SetUpTearDownMixin, unittest.TestCase): '''fdroidserver/common.py''' def test_yaml_1_2(self): """Return a ruamel.yaml instance that supports YAML 1.2 There should be no "Norway Problem", and other things like this: https://yaml.org/spec/1.2.2/ext/changes/ YAML 1.2 says "underlines _ cannot be used within numerical values", but ruamel.yaml seems to ignore that. 1_0 should be a string, but it is read as a 10. """ os.chdir(self.testdir) yaml12file = Path('YAML 1.2.yml') yaml12file.write_text('[true, no, 0b010, 010, 0o10, "\\/"]', encoding='utf-8') with yaml12file.open() as fp: self.assertEqual( [True, 'no', 2, 10, 8, '/'], yaml.load(fp), ) def test_parse_human_readable_size(self): for k, v in ( (9827, 9827), (123.456, 123), ('123b', 123), ('1.2', 1), ('10.43 KiB', 10680), ('11GB', 11000000000), ('59kb', 59000), ('343.1 mb', 343100000), ('99.9GiB', 107266808217), ('1MB', 1000000), ): self.assertEqual(fdroidserver.common.parse_human_readable_size(k), v) for v in ((12, 123), '0xfff', [], None, '12,123', '123GG', '982374bb', self): with self.assertRaises(ValueError): fdroidserver.common.parse_human_readable_size(v) def test_assert_config_keystore(self): with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): with self.assertRaises(FDroidException): fdroidserver.common.assert_config_keystore({}) with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): c = { 'repo_keyalias': 'localhost', 'keystore': 'keystore.jks', 'keystorepass': '12345', 'keypass': '12345', } with open('keystore.jks', 'w'): pass fdroidserver.common.assert_config_keystore(c) def _set_build_tools(self): build_tools = os.path.join( fdroidserver.common.config['sdk_path'], 'build-tools' ) if os.path.exists(build_tools): for f in sorted(os.listdir(build_tools), reverse=True): versioned = os.path.join(build_tools, f) if os.path.isdir(versioned) and os.path.isfile( os.path.join(versioned, 'apksigner') ): break return True else: print('no build-tools found: ' + build_tools) return False def _find_all(self): tools = ['aapt', 'adb', 'jarsigner'] if os.path.exists(os.path.join(os.getenv('ANDROID_HOME'), 'tools', 'android')): tools.append('android') for cmd in tools: try: path = fdroidserver.common.find_sdk_tools_cmd(cmd) self.assertTrue(os.path.exists(path)) self.assertTrue(os.path.isfile(path)) except fdroidserver.exception.FDroidException: pass @unittest.skipUnless(os.getenv('ANDROID_HOME'), "Needs ANDROID_HOME env var") def test_find_sdk_tools_cmd(self): fdroidserver.common.config = dict() # TODO add this once everything works without sdk_path set in config # self._find_all() sdk_path = os.getenv('ANDROID_HOME') if os.path.exists(sdk_path): fdroidserver.common.config['sdk_path'] = sdk_path build_tools = os.path.join(sdk_path, 'build-tools') if self._set_build_tools() or os.path.exists('/usr/bin/aapt'): self._find_all() else: print('no build-tools found: ' + build_tools) def test_find_java_root_path(self): os.chdir(self.testdir) all_pathlists = [ ( [ # Debian '/usr/lib/jvm/java-1.5.0-gcj-5-amd64', '/usr/lib/jvm/java-8-openjdk-amd64', '/usr/lib/jvm/java-1.8.0-openjdk-amd64', ], '/usr/lib/jvm/java-8-openjdk-amd64', ), ( [ # OSX '/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk', '/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk', '/System/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk', ], '/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk', ), ] for pathlist, choice in all_pathlists: # strip leading / to make relative paths to test without root pathlist = [p[1:] for p in pathlist] # create test file used in common._add_java_paths_to_config() for p in pathlist: if p.startswith('/System') or p.startswith('/Library'): _dir = os.path.join(p, 'Contents', 'Home', 'bin') else: _dir = os.path.join(p, 'bin') os.makedirs(_dir) open(os.path.join(_dir, 'javac'), 'w').close() config = dict() config['java_paths'] = dict() fdroidserver.common._add_java_paths_to_config(pathlist, config) self.assertEqual(config['java_paths']['8'], choice[1:]) @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_is_debuggable_or_testOnly(self): config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config # these are set debuggable for apkfile in ('urzip.apk', 'urzip-badsig.apk', 'urzip-badcert.apk'): self.assertTrue( fdroidserver.common.is_debuggable_or_testOnly(str(basedir / apkfile)), "debuggable APK state was not properly parsed!", ) # these are set NOT debuggable testfiles = 'urzip-release.apk', 'urzip-release-unsigned.apk', 'v2.only.sig_2.apk' for apkfile in testfiles: self.assertFalse( fdroidserver.common.is_debuggable_or_testOnly(apkfile), "debuggable APK state was not properly parsed!", ) VALID_STRICT_PACKAGE_NAMES = [ "An.stop", "SpeedoMeterApp.main", "a2dp.Vol", "au.com.darkside.XServer", "click.dummer.UartSmartwatch", "com.Bisha.TI89EmuDonation", "com.MarcosDiez.shareviahttp", "com.Pau.ImapNotes2", "com.app.Zensuren", "com.darshancomputing.BatteryIndicator", "com.geecko.QuickLyric", "com.genonbeta.TrebleShot", "com.gpl.rpg.AndorsTrail", "com.hobbyone.HashDroid", "com.moez.QKSMS", "com.platypus.SAnd", "com.prhlt.aemus.Read4SpeechExperiments", "de.syss.MifareClassicTool", "org.fdroid.fdroid", "org.f_droid.fdr0ID", ] def test_is_valid_package_name(self): for name in self.VALID_STRICT_PACKAGE_NAMES + [ "_SpeedoMeterApp.main", "05041684efd9b16c2888b1eddbadd0359f655f311b89bdd1737f560a10d20fb8", ]: self.assertTrue( fdroidserver.common.is_valid_package_name(name), "{0} should be a valid package name".format(name), ) for name in [ "0rg.fdroid.fdroid", ".f_droid.fdr0ID", "trailingdot.", "org.fdroid/fdroid", "/org.fdroid.fdroid", ]: self.assertFalse( fdroidserver.common.is_valid_package_name(name), "{0} should not be a valid package name".format(name), ) def test_is_strict_application_id(self): """see also tests/valid-package-names/""" for name in self.VALID_STRICT_PACKAGE_NAMES: self.assertTrue( fdroidserver.common.is_strict_application_id(name), "{0} should be a strict application id".format(name), ) for name in [ "0rg.fdroid.fdroid", ".f_droid.fdr0ID", "oneword", "trailingdot.", "cafebabe", "org.fdroid/fdroid", "/org.fdroid.fdroid", "_SpeedoMeterApp.main", "05041684efd9b16c2888b1eddbadd0359f655f311b89bdd1737f560a10d20fb8", ]: self.assertFalse( fdroidserver.common.is_strict_application_id(name), "{0} should not be a strict application id".format(name), ) def test_prepare_sources(self): testint = 99999999 teststr = 'FAKE_STR_FOR_TESTING' shutil.copytree( os.path.join(basedir, 'source-files'), os.path.join(self.testdir, 'source-files'), ) fdroidclient_testdir = os.path.join( self.testdir, 'source-files', 'fdroid', 'fdroidclient' ) config = dict() config['sdk_path'] = os.getenv('ANDROID_HOME') config['ndk_paths'] = {'r10d': os.getenv('ANDROID_NDK_HOME')} fdroidserver.common.config = config app = fdroidserver.metadata.App() app.id = 'org.fdroid.froid' build = fdroidserver.metadata.Build() build.commit = 'master' build.forceversion = True build.forcevercode = True build.gradle = ['yes'] build.target = 'android-' + str(testint) build.versionName = teststr build.versionCode = testint class FakeVcs: # no need to change to the correct commit here def gotorevision(self, rev, refresh=True): pass # no srclib info needed, but it could be added... def getsrclib(self): return None def deinitsubmodules(self): pass fdroidserver.common.prepare_source(FakeVcs(), app, build, fdroidclient_testdir, fdroidclient_testdir, fdroidclient_testdir) fdroidclient_testdir = Path(fdroidclient_testdir) build_gradle = fdroidclient_testdir / 'build.gradle' filedata = build_gradle.read_text(encoding='utf-8') self.assertIsNotNone( re.search(r"\s+compileSdkVersion %s\s+" % testint, filedata) ) androidmanifest_xml = fdroidclient_testdir / 'AndroidManifest.xml' filedata = androidmanifest_xml.read_text(encoding='utf-8') self.assertIsNone(re.search('android:debuggable', filedata)) self.assertIsNotNone( re.search('android:versionName="%s"' % build.versionName, filedata) ) self.assertIsNotNone( re.search('android:versionCode="%s"' % build.versionCode, filedata) ) @unittest.skipIf(os.name == 'nt', "`fdroid build` assumes POSIX scripting") def test_prepare_sources_with_prebuild_subdir(self): app_build_dir = os.path.join(self.testdir, 'build', 'com.example') shutil.copytree( basedir / 'source-files' / 'fdroid' / 'fdroidclient', app_build_dir, ) subdir = 'baz/bar' subdir_path = Path(app_build_dir) / subdir subdir_path.mkdir(parents=True, exist_ok=True) build_gradle = subdir_path / 'build.gradle' build_gradle.write_text('// just a test placeholder', encoding='utf-8') config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config _mock_common_module_options_instance() srclibname = 'FakeSrcLib' srclib_testdir = os.path.join(self.testdir, 'build', 'srclib') os.makedirs(os.path.join(srclib_testdir, srclibname, 'testdirshouldexist')) fdroidserver.metadata.srclibs = { srclibname: { 'RepoType': 'git', 'Repo': 'https://example.com/foo/fakesrclib', 'Subdir': None, 'Prepare': None, } } app = fdroidserver.metadata.App() app.id = 'app.has.srclibs' build = fdroidserver.metadata.Build() build.commit = 'master' build.gradle = ['yes'] build.prebuild = ['test -d $$FakeSrcLib$$/testdirshouldexist'] # actual test condition build.srclibs = [srclibname + '@1.2.3'] build.subdir = subdir build.versionCode = 0xCAFE build.versionName = 'vCAFE' class FakeVcs: # no need to change to the correct commit here def gotorevision(self, rev, refresh=True): pass # no srclib info needed, but it could be added... def getsrclib(self): return None def deinitsubmodules(self): pass fdroidserver.common.prepare_source(FakeVcs(), app, build, app_build_dir, srclib_testdir, app_build_dir, onserver=True, refresh=False) # do not clone in this test def test_prepare_sources_refresh(self): _mock_common_module_options_instance() packageName = 'org.fdroid.ci.test.app' os.chdir(self.testdir) os.mkdir('build') os.mkdir('metadata') # use a local copy if available to avoid hitting the network tmprepo = os.path.join(basedir, 'tmp', 'importer') if os.path.exists(tmprepo): git_url = tmprepo else: git_url = 'https://gitlab.com/fdroid/ci-test-app.git' metadata = dict() metadata['Description'] = 'This is just a test app' metadata['RepoType'] = 'git' metadata['Repo'] = git_url with open(os.path.join('metadata', packageName + '.yml'), 'w') as fp: yaml_dumper.dump(metadata, fp) gitrepo = os.path.join(self.testdir, 'build', packageName) vcs0 = fdroidserver.common.getvcs('git', git_url, gitrepo) vcs0.gotorevision('0.3', refresh=True) vcs1 = fdroidserver.common.getvcs('git', git_url, gitrepo) vcs1.gotorevision('0.3', refresh=False) def test_setup_vcs_srclib(self): app = fdroidserver.metadata.App( { 'RepoType': 'srclib', 'Repo': 'TransportsRennes', } ) srclib = { 'RepoType': 'git', 'Repo': 'https://github.com/ybonnel/TransportsRennes', } fdroidserver.metadata.srclibs = {'TransportsRennes': srclib} vcs, build_dir = fdroidserver.common.setup_vcs(app) self.assertIsNotNone(vcs) self.assertEqual(build_dir, Path('build/srclib/TransportsRennes')) def test_getvcs_srclib(self): vcstype = 'srclib' remote = 'TransportsRennes' local = 'build/srclib/' + remote fdroidserver.metadata.srclibs = { remote: { 'RepoType': 'git', 'Repo': 'https://github.com/ybonnel/TransportsRennes', } } self.assertIsNotNone(fdroidserver.common.getvcs(vcstype, remote, local)) self.assertIsNotNone(fdroidserver.common.getvcs(vcstype, Path(remote), local)) self.assertIsNotNone(fdroidserver.common.getvcs(vcstype, remote, Path(local))) self.assertIsNotNone(fdroidserver.common.getvcs( vcstype, Path(remote), Path(local) )) with self.assertRaises(VCSException): fdroidserver.common.getvcs(vcstype, remote, 'bad') with self.assertRaises(VCSException): fdroidserver.common.getvcs(vcstype, remote, Path('bad')) with self.assertRaises(VCSException): fdroidserver.common.getvcs(vcstype, Path(remote), 'bad') with self.assertRaises(VCSException): fdroidserver.common.getvcs(vcstype, Path(remote), Path('bad')) def test_fdroid_popen_stderr_redirect(self): config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config _mock_common_module_options_instance() commands = ['sh', '-c', 'echo stdout message && echo stderr message 1>&2'] p = fdroidserver.common.FDroidPopen(commands) self.assertEqual(p.output, 'stdout message\nstderr message\n') p = fdroidserver.common.FDroidPopen(commands, stderr_to_stdout=False) self.assertEqual(p.output, 'stdout message\n') def test_signjar(self): _mock_common_module_options_instance() config = fdroidserver.common.read_config() config['jarsigner'] = fdroidserver.common.find_sdk_tools_cmd('jarsigner') fdroidserver.common.config = config fdroidserver.signindex.config = config sourcedir = os.path.join(basedir, 'signindex') for f in ('testy.jar', 'guardianproject.jar'): sourcefile = os.path.join(sourcedir, f) testfile = os.path.join(self.testdir, f) shutil.copy(sourcefile, self.testdir) fdroidserver.signindex.sign_jar(testfile, use_old_algs=True) # these should be resigned, and therefore different self.assertNotEqual( open(sourcefile, 'rb').read(), open(testfile, 'rb').read() ) def test_verify_apk_signature(self): _mock_common_module_options_instance() config = fdroidserver.common.read_config() fdroidserver.common.config = config self.assertTrue(fdroidserver.common.verify_apk_signature('bad-unicode-πÇÇ现代通用字-български-عربي1.apk')) if 'apksigner' in fdroidserver.common.config: # apksigner considers MD5 signatures valid self.assertTrue(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_1.apk')) self.assertTrue(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_2.apk')) self.assertTrue(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_3.apk')) self.assertTrue(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_4.apk')) else: self.assertFalse(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_1.apk')) self.assertFalse(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_2.apk')) self.assertFalse(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_3.apk')) self.assertFalse(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_4.apk')) self.assertTrue(fdroidserver.common.verify_apk_signature('org.dyndns.fules.ck_20.apk')) self.assertTrue(fdroidserver.common.verify_apk_signature('urzip.apk')) self.assertFalse(fdroidserver.common.verify_apk_signature('urzip-badcert.apk')) self.assertFalse(fdroidserver.common.verify_apk_signature('urzip-badsig.apk')) self.assertTrue(fdroidserver.common.verify_apk_signature('urzip-release.apk')) self.assertFalse(fdroidserver.common.verify_apk_signature('urzip-release-unsigned.apk')) def test_verify_old_apk_signature(self): _mock_common_module_options_instance() config = fdroidserver.common.read_config() config['jarsigner'] = fdroidserver.common.find_sdk_tools_cmd('jarsigner') fdroidserver.common.config = config try: fdroidserver.common.verify_deprecated_jar_signature('bad-unicode-πÇÇ现代通用字-български-عربي1.apk') fdroidserver.common.verify_deprecated_jar_signature('org.bitbucket.tickytacky.mirrormirror_1.apk') fdroidserver.common.verify_deprecated_jar_signature('org.bitbucket.tickytacky.mirrormirror_2.apk') fdroidserver.common.verify_deprecated_jar_signature('org.bitbucket.tickytacky.mirrormirror_3.apk') fdroidserver.common.verify_deprecated_jar_signature('org.bitbucket.tickytacky.mirrormirror_4.apk') fdroidserver.common.verify_deprecated_jar_signature('org.dyndns.fules.ck_20.apk') fdroidserver.common.verify_deprecated_jar_signature('urzip.apk') fdroidserver.common.verify_deprecated_jar_signature('urzip-release.apk') except VerificationException: self.fail("failed to jarsigner failed to verify an old apk") self.assertRaises(VerificationException, fdroidserver.common.verify_deprecated_jar_signature, 'urzip-badcert.apk') self.assertRaises(VerificationException, fdroidserver.common.verify_deprecated_jar_signature, 'urzip-badsig.apk') self.assertRaises(VerificationException, fdroidserver.common.verify_deprecated_jar_signature, 'urzip-release-unsigned.apk') def test_verify_jar_signature(self): """Sign entry.jar and make sure it validates""" config = fdroidserver.common.read_config() config['jarsigner'] = fdroidserver.common.find_sdk_tools_cmd('jarsigner') config['keystore'] = os.path.join(basedir, 'keystore.jks') config['repo_keyalias'] = 'sova' config['keystorepass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' config['keypass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' fdroidserver.common.config = config fdroidserver.signindex.config = config repo_dir = Path(self.testdir) / 'repo' repo_dir.mkdir() shutil.copy('repo/entry.json', repo_dir) shutil.copy('repo/index-v2.json', repo_dir) os.chdir(self.testdir) fdroidserver.signindex.sign_index('repo', 'entry.json') fdroidserver.common.verify_jar_signature('repo/entry.jar') def test_verify_jar_signature_fails(self): """Test verify_jar_signature fails on unsigned and deprecated algorithms""" config = fdroidserver.common.read_config() config['jarsigner'] = fdroidserver.common.find_sdk_tools_cmd('jarsigner') fdroidserver.common.config = config source_dir = os.path.join(basedir, 'signindex') for f in ('unsigned.jar', 'testy.jar', 'guardianproject.jar', 'guardianproject-v1.jar'): testfile = os.path.join(source_dir, f) with self.assertRaises(fdroidserver.index.VerificationException): fdroidserver.common.verify_jar_signature(testfile) def test_verify_deprecated_jar_signature(self): config = fdroidserver.common.read_config() config['jarsigner'] = fdroidserver.common.find_sdk_tools_cmd('jarsigner') fdroidserver.common.config = config source_dir = os.path.join(basedir, 'signindex') for f in ('testy.jar', 'guardianproject.jar'): testfile = os.path.join(source_dir, f) fdroidserver.common.verify_deprecated_jar_signature(testfile) testfile = os.path.join(source_dir, 'unsigned.jar') with self.assertRaises(fdroidserver.index.VerificationException): fdroidserver.common.verify_deprecated_jar_signature(testfile) def test_verify_apks(self): config = fdroidserver.common.read_config() fdroidserver.common.config = config _mock_common_module_options_instance() sourceapk = os.path.join(basedir, 'urzip.apk') copyapk = os.path.join(self.testdir, 'urzip-copy.apk') shutil.copy(sourceapk, copyapk) self.assertTrue(fdroidserver.common.verify_apk_signature(copyapk)) self.assertIsNone( fdroidserver.common.verify_apks(sourceapk, copyapk, self.testdir) ) unsignedapk = os.path.join(self.testdir, 'urzip-unsigned.apk') with ZipFile(sourceapk, 'r') as apk: with ZipFile(unsignedapk, 'w') as testapk: for info in apk.infolist(): if not info.filename.startswith('META-INF/'): testapk.writestr(info, apk.read(info.filename)) self.assertIsNone( fdroidserver.common.verify_apks(sourceapk, unsignedapk, self.testdir) ) twosigapk = os.path.join(self.testdir, 'urzip-twosig.apk') otherapk = ZipFile(os.path.join(basedir, 'urzip-release.apk'), 'r') with ZipFile(sourceapk, 'r') as apk: with ZipFile(twosigapk, 'w') as testapk: for info in apk.infolist(): testapk.writestr(info, apk.read(info.filename)) if info.filename.startswith('META-INF/'): testapk.writestr(info.filename, otherapk.read(info.filename)) otherapk.close() self.assertFalse(fdroidserver.common.verify_apk_signature(twosigapk)) self.assertIsNone(fdroidserver.common.verify_apks(sourceapk, twosigapk, self.testdir)) def test_get_certificate_with_chain_sandisk(self): """Test that APK signatures with a cert chain are parsed like apksigner. SanDisk signs their APKs with a X.509 certificate chain of trust, so there are actually three certificates included. apksigner only cares about the certificate in the chain that actually signs the manifest. The correct value comes from: apksigner verify --print-certs 883cbdae7aeb2e4b122e8ee8d89966c7062d0d49107a130235fa220a5b994a79.apk """ cert = fdroidserver.common.get_certificate( signature_block_file=Path('SANAPPSI.RSA').read_bytes(), signature_file=Path('SANAPPSI.SF').read_bytes(), ) self.assertEqual( 'ea0abbf2a142e4b167405d516b2cc408c4af4b29cd50ba281aa4470d4aab3e53', fdroidserver.common.signer_fingerprint(cert), ) def test_write_to_config(self): """Test that config items can be added without messing up config.yml. The '_orig' key are where the original string values of paths are stored. Paths have tilde expansion and env vars replaced in fill_config_defaults(). """ os.chdir(self.testdir) fdroidserver.common.write_config_file( textwrap.dedent( """\ # abc # test: 'example value' a_path: ~/android-sdk # comment do_not_touch: good value a_path: "!!!" key: "123" # inline""" ) ) config = {'key': 111, 'a_path_orig': '~/android-sdk'} fdroidserver.common.write_to_config(config, 'key') fdroidserver.common.write_to_config(config, 'a_path') fdroidserver.common.write_to_config(config, 'test', value='test value') fdroidserver.common.write_to_config(config, 'new_key', value='new') with open(fdroidserver.common.CONFIG_FILE) as fp: self.assertEqual( fp.read(), textwrap.dedent( """\ # abc test: test value a_path: ~/android-sdk # comment do_not_touch: good value key: 111 new_key: new """ ), ) def test_write_to_config_when_empty(self): os.chdir(self.testdir) config_yml = Path(fdroidserver.common.CONFIG_FILE) config_yml.write_text('', encoding='utf-8') fdroidserver.common.write_to_config({}, 'key', 'val') self.assertEqual(config_yml.read_text(), 'key: val\n') def test_apk_name_regex(self): good = [ 'urzipπÇÇπÇÇ现代汉语通用字българскиعربي1234ö_-123456.apk', 'urzipπÇÇπÇÇ现代汉语通用字българскиعربي1234ö_123456_abcdef0.apk', 'urzip_-123456.apk', 'a0_0.apk', 'Z0_0.apk', 'a0_0_abcdef0.apk', 'a_a_a_a_0_abcdef0.apk', 'a_____0.apk', 'a_____123456_abcdef0.apk', 'org.fdroid.fdroid_123456.apk', # valid, but "_99999" is part of packageName rather than versionCode 'org.fdroid.fdroid_99999_123456.apk', # should be valid, but I can't figure out the regex since \w includes digits # 'πÇÇπÇÇ现代汉语通用字българскиعربي1234ö_0_123bafd.apk', ] for name in good: m = fdroidserver.common.APK_NAME_REGEX.match(name) self.assertIsNotNone(m) self.assertIn(m.group(2), ('-123456', '0', '123456')) self.assertIn(m.group(3), ('abcdef0', None)) bad = [ 'urzipπÇÇπÇÇ现代汉语通用字българскиعربي1234ö_123456_abcdefg.apk', 'urzip-_-198274.apk', 'urzip-_0_123bafd.apk', 'no spaces allowed_123.apk', '0_0.apk', '0_0_abcdef0.apk', ] for name in bad: self.assertIsNone(fdroidserver.common.APK_NAME_REGEX.match(name)) def test_standard_file_name_regex(self): good = [ 'urzipπÇÇπÇÇ现代汉语通用字българскиعربي1234ö_-123456.mp3', 'urzipπÇÇπÇÇ现代汉语通用字българскиعربي1234ö_123456.mov', 'Document_-123456.pdf', 'WTF_0.MOV', 'Z0_0.ebk', 'a_a_a_a_0.txt', 'org.fdroid.fdroid.privileged.ota_123456.zip', 'πÇÇπÇÇ现代汉语通用字българскиعربي1234ö_0.jpeg', 'a_____0.PNG', # valid, but "_99999" is part of packageName rather than versionCode 'a_____99999_123456.zip', 'org.fdroid.fdroid_99999_123456.zip', ] for name in good: m = fdroidserver.common.STANDARD_FILE_NAME_REGEX.match(name) self.assertIsNotNone(m) self.assertIn(m.group(2), ('-123456', '0', '123456')) bad = [ 'urzipπÇÇπÇÇ现代汉语通用字българскиعربي1234ö_abcdefg.JPEG', 'urzip-_-198274.zip', 'urzip-_123bafd.pdf', 'no spaces allowed_123.foobar', 'a_____0.', ] for name in bad: self.assertIsNone(fdroidserver.common.STANDARD_FILE_NAME_REGEX.match(name)) @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_apk_signer_fingerprint(self): # fingerprints fetched with: keytool -printcert -file ____.RSA testapks = (('repo/obb.main.oldversion_1444412523.apk', '818e469465f96b704e27be2fee4c63ab9f83ddf30e7a34c7371a4728d83b0bc1'), ('repo/obb.main.twoversions_1101613.apk', '32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6'), ('repo/obb.main.twoversions_1101617.apk', '32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6')) for apkfile, keytoolcertfingerprint in testapks: self.assertEqual(keytoolcertfingerprint, fdroidserver.common.apk_signer_fingerprint(apkfile)) @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_apk_signer_fingerprint_short(self): # fingerprints fetched with: keytool -printcert -file ____.RSA testapks = (('repo/obb.main.oldversion_1444412523.apk', '818e469'), ('repo/obb.main.twoversions_1101613.apk', '32a2362'), ('repo/obb.main.twoversions_1101617.apk', '32a2362')) for apkfile, keytoolcertfingerprint in testapks: self.assertEqual(keytoolcertfingerprint, fdroidserver.common.apk_signer_fingerprint_short(apkfile)) def test_find_apksigner_system_package_default_path(self): """apksigner should be automatically used from the PATH""" usr_bin_apksigner = '/usr/bin/apksigner' if not os.path.isfile(usr_bin_apksigner): self.skipTest('SKIPPING since %s is not installed!' % usr_bin_apksigner) with mock.patch.dict(os.environ, clear=True): os.environ['PATH'] = '/usr/local/bin:/usr/bin:/bin' config = {} fdroidserver.common.find_apksigner(config) self.assertEqual(usr_bin_apksigner, config.get('apksigner')) def test_find_apksigner_config_overrides(self): """apksigner should come from config before any auto-detection""" os.chdir(self.testdir) android_home = os.path.join(self.testdir, 'ANDROID_HOME') do_not_use = os.path.join(android_home, 'build-tools', '30.0.3', 'apksigner') os.makedirs(os.path.dirname(do_not_use)) with open(do_not_use, 'w') as fp: fp.write('#!/bin/sh\ndate\n') os.chmod(do_not_use, 0o0755) # nosec B103 apksigner = os.path.join(self.testdir, 'apksigner') config = {'apksigner': apksigner} with mock.patch.dict(os.environ, clear=True): os.environ['ANDROID_HOME'] = android_home os.environ['PATH'] = '%s:/usr/local/bin:/usr/bin:/bin' % android_home fdroidserver.common.find_apksigner(config) self.assertEqual(apksigner, config.get('apksigner')) def test_find_apksigner_prefer_path(self): """apksigner should come from PATH before ANDROID_HOME""" os.chdir(self.testdir) apksigner = os.path.join(self.testdir, 'apksigner') with open(apksigner, 'w') as fp: fp.write('#!/bin/sh\ndate\n') os.chmod(apksigner, 0o0755) # nosec B103 android_home = os.path.join(self.testdir, 'ANDROID_HOME') do_not_use = os.path.join(android_home, 'build-tools', '30.0.3', 'apksigner') os.makedirs(os.path.dirname(do_not_use)) with open(do_not_use, 'w') as fp: fp.write('#!/bin/sh\ndate\n') os.chmod(do_not_use, 0o0755) # nosec B103 config = {'sdk_path': android_home} with mock.patch.dict(os.environ, clear=True): os.environ['ANDROID_HOME'] = android_home os.environ['PATH'] = '%s:/usr/local/bin:/usr/bin:/bin' % os.path.dirname(apksigner) fdroidserver.common.find_apksigner(config) self.assertEqual(apksigner, config.get('apksigner')) def test_find_apksigner_prefer_newest(self): """apksigner should be the newest available in ANDROID_HOME""" os.chdir(self.testdir) android_home = os.path.join(self.testdir, 'ANDROID_HOME') apksigner = os.path.join(android_home, 'build-tools', '30.0.3', 'apksigner') os.makedirs(os.path.dirname(apksigner)) with open(apksigner, 'w') as fp: fp.write('#!/bin/sh\necho 30.0.3\n') os.chmod(apksigner, 0o0755) # nosec B103 do_not_use = os.path.join(android_home, 'build-tools', '29.0.3', 'apksigner') os.makedirs(os.path.dirname(do_not_use)) with open(do_not_use, 'w') as fp: fp.write('#!/bin/sh\necho 29.0.3\n') os.chmod(do_not_use, 0o0755) # nosec B103 config = {'sdk_path': android_home} with mock.patch.dict(os.environ, clear=True): os.environ['PATH'] = '/fake/path/to/avoid/conflicts' fdroidserver.common.find_apksigner(config) self.assertEqual(apksigner, config.get('apksigner')) def test_find_apksigner_system_package_android_home(self): """Test that apksigner v30 or newer is found""" os.chdir(self.testdir) android_home = os.getenv('ANDROID_HOME') if not android_home or not os.path.isdir(android_home): self.skipTest('SKIPPING since ANDROID_HOME (%s) is not a dir!' % android_home) build_tools = glob.glob(os.path.join(android_home, 'build-tools', '*', 'apksigner')) if not build_tools: self.skipTest('SKIPPING since ANDROID_HOME (%s) build-tools has no apksigner!' % android_home) min_version = fdroidserver.common.MINIMUM_APKSIGNER_BUILD_TOOLS_VERSION version = '0' for bt in sorted(build_tools): v = bt.split('/')[-2] if v == 'debian': continue if LooseVersion(version) < LooseVersion(v): version = v if LooseVersion(version) < LooseVersion(min_version): self.skipTest('SKIPPING since build-tools %s or higher is required!' % min_version) fdroidserver.common.config = {'sdk_path': android_home} with mock.patch.dict(os.environ, clear=True): os.environ['PATH'] = '/fake/path/to/avoid/conflicts' config = fdroidserver.common.read_config() fdroidserver.common.find_apksigner(config) self.assertEqual( os.path.join(android_home, 'build-tools'), os.path.dirname(os.path.dirname(config.get('apksigner'))), ) @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_sign_apk(self): _mock_common_module_options_instance() config = fdroidserver.common.read_config() if 'apksigner' not in config: self.skipTest('SKIPPING test_sign_apk, apksigner not installed!') config['keyalias'] = 'sova' config['keystorepass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' config['keypass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' config['keystore'] = os.path.join(basedir, 'keystore.jks') fdroidserver.common.config = config fdroidserver.signindex.config = config unsigned = os.path.join(self.testdir, 'urzip-release-unsigned.apk') signed = os.path.join(self.testdir, 'urzip-release.apk') shutil.copy(os.path.join(basedir, 'urzip-release-unsigned.apk'), self.testdir) self.assertFalse(fdroidserver.common.verify_apk_signature(unsigned)) fdroidserver.common.sign_apk(unsigned, signed, config['keyalias']) self.assertTrue(os.path.isfile(signed)) self.assertFalse(os.path.isfile(unsigned)) self.assertTrue(fdroidserver.common.verify_apk_signature(signed)) # now sign an APK with minSdkVersion >= 18 unsigned = os.path.join(self.testdir, 'duplicate.permisssions_9999999-unsigned.apk') signed = os.path.join(self.testdir, 'duplicate.permisssions_9999999.apk') shutil.copy( os.path.join(basedir, 'repo', 'duplicate.permisssions_9999999.apk'), os.path.join(unsigned), ) fdroidserver.common.apk_strip_v1_signatures(unsigned, strip_manifest=True) fdroidserver.common.sign_apk(unsigned, signed, config['keyalias']) self.assertTrue(os.path.isfile(signed)) self.assertFalse(os.path.isfile(unsigned)) self.assertTrue(fdroidserver.common.verify_apk_signature(signed)) self.assertEqual('18', fdroidserver.common.get_androguard_APK(signed).get_min_sdk_version()) shutil.copy(os.path.join(basedir, 'minimal_targetsdk_30_unsigned.apk'), self.testdir) unsigned = os.path.join(self.testdir, 'minimal_targetsdk_30_unsigned.apk') signed = os.path.join(self.testdir, 'minimal_targetsdk_30.apk') self.assertFalse(fdroidserver.common.verify_apk_signature(unsigned)) fdroidserver.common.sign_apk(unsigned, signed, config['keyalias']) self.assertTrue(os.path.isfile(signed)) self.assertFalse(os.path.isfile(unsigned)) self.assertTrue(fdroidserver.common.verify_apk_signature(signed)) # verify it has a v2 signature self.assertTrue(fdroidserver.common.get_androguard_APK(signed).is_signed_v2()) shutil.copy(os.path.join(basedir, 'no_targetsdk_minsdk30_unsigned.apk'), self.testdir) unsigned = os.path.join(self.testdir, 'no_targetsdk_minsdk30_unsigned.apk') signed = os.path.join(self.testdir, 'no_targetsdk_minsdk30_signed.apk') fdroidserver.common.sign_apk(unsigned, signed, config['keyalias']) self.assertTrue(fdroidserver.common.verify_apk_signature(signed)) self.assertTrue(fdroidserver.common.get_androguard_APK(signed).is_signed_v2()) shutil.copy(os.path.join(basedir, 'no_targetsdk_minsdk1_unsigned.apk'), self.testdir) unsigned = os.path.join(self.testdir, 'no_targetsdk_minsdk1_unsigned.apk') signed = os.path.join(self.testdir, 'no_targetsdk_minsdk1_signed.apk') self.assertFalse(fdroidserver.common.verify_apk_signature(unsigned)) fdroidserver.common.sign_apk(unsigned, signed, config['keyalias']) self.assertTrue(os.path.isfile(signed)) self.assertFalse(os.path.isfile(unsigned)) self.assertTrue(fdroidserver.common.verify_apk_signature(signed)) @unittest.skipIf(os.getuid() == 0, 'This is meaningless when run as root') def test_sign_apk_fail(self): _mock_common_module_options_instance() config = fdroidserver.common.read_config() if 'apksigner' not in config: self.skipTest('SKIPPING test_sign_apk_fail, apksigner not installed!') config['keyalias'] = 'sova' config['keystorepass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' config['keypass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' config['keystore'] = os.path.join(basedir, 'keystore.jks') fdroidserver.common.config = config fdroidserver.signindex.config = config unsigned = os.path.join(self.testdir, 'urzip-release-unsigned.apk') signed = os.path.join(self.testdir, 'urzip-release.apk') shutil.copy(os.path.join(basedir, 'urzip-release-unsigned.apk'), self.testdir) os.chmod(unsigned, 0o000) with self.assertRaises(fdroidserver.exception.BuildException): fdroidserver.common.sign_apk(unsigned, signed, config['keyalias']) os.chmod(unsigned, 0o777) # nosec B103 self.assertTrue(os.path.isfile(unsigned)) self.assertFalse(os.path.isfile(signed)) def test_sign_apk_corrupt(self): _mock_common_module_options_instance() config = fdroidserver.common.read_config() if 'apksigner' not in config: self.skipTest('SKIPPING test_sign_apk_corrupt, apksigner not installed!') config['keyalias'] = 'sova' config['keystorepass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' config['keypass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' config['keystore'] = os.path.join(basedir, 'keystore.jks') fdroidserver.common.config = config fdroidserver.signindex.config = config unsigned = os.path.join(self.testdir, 'urzip-release-unsigned.apk') signed = os.path.join(self.testdir, 'urzip-release.apk') with open(unsigned, 'w') as fp: fp.write('this is a corrupt APK') with self.assertRaises(fdroidserver.exception.BuildException): fdroidserver.common.sign_apk(unsigned, signed, config['keyalias']) self.assertTrue(os.path.isfile(unsigned)) self.assertFalse(os.path.isfile(signed)) @unittest.skipUnless( os.path.exists('tests/SystemWebView-repack.apk'), "file too big for sdist" ) def test_resign_apk(self): """When using apksigner, it should resign signed APKs""" _mock_common_module_options_instance() config = fdroidserver.common.read_config() if 'apksigner' not in config: self.skipTest('SKIPPING test_resign_apk, apksigner not installed!') if sys.byteorder == 'big': self.skipTest('SKIPPING androguard is not ported to big-endian') config['keyalias'] = 'sova' config['keystorepass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' config['keypass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' config['keystore'] = os.path.join(basedir, 'keystore.jks') fdroidserver.common.config = config fdroidserver.signindex.config = config os.chdir(self.testdir) os.mkdir('unsigned') os.mkdir('repo') for apk in ( 'org.bitbucket.tickytacky.mirrormirror_4.apk', 'v2.only.sig_2.apk', 'SystemWebView-repack.apk', ): original = os.path.join(basedir, apk) unsigned = os.path.join('unsigned', apk) resign = os.path.join('repo', apk) shutil.copy(original, unsigned) fdroidserver.common.sign_apk(unsigned, resign, config['keyalias']) self.assertTrue( fdroidserver.common.verify_apk_signature(resign), apk + " verifies" ) self.assertTrue(os.path.isfile(resign)) self.assertFalse(os.path.isfile(unsigned)) self.assertNotEqual( fdroidserver.common.get_first_signer_certificate(original), fdroidserver.common.get_first_signer_certificate(resign) ) @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_get_apk_id(self): config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config self._set_build_tools() try: config['aapt'] = fdroidserver.common.find_sdk_tools_cmd('aapt') except fdroidserver.exception.FDroidException: pass # aapt is not required if androguard is present testcases = [ ('repo/obb.main.twoversions_1101613.apk', 'obb.main.twoversions', 1101613, '0.1'), ('org.bitbucket.tickytacky.mirrormirror_1.apk', 'org.bitbucket.tickytacky.mirrormirror', 1, '1.0'), ('org.bitbucket.tickytacky.mirrormirror_2.apk', 'org.bitbucket.tickytacky.mirrormirror', 2, '1.0.1'), ('org.bitbucket.tickytacky.mirrormirror_3.apk', 'org.bitbucket.tickytacky.mirrormirror', 3, '1.0.2'), ('org.bitbucket.tickytacky.mirrormirror_4.apk', 'org.bitbucket.tickytacky.mirrormirror', 4, '1.0.3'), ('org.dyndns.fules.ck_20.apk', 'org.dyndns.fules.ck', 20, 'v1.6pre2'), ('issue-1128-min-sdk-30-poc.apk', 'org.fdroid.ci', 1, '1.0'), ('issue-1128-poc1.apk', 'android.appsecurity.cts.tinyapp', 10, '1.0'), ('issue-1128-poc2.apk', 'android.appsecurity.cts.tinyapp', 10, '1.0'), ('issue-1128-poc3a.apk', 'android.appsecurity.cts.tinyapp', 10, '1.0'), ('issue-1128-poc3b.apk', 'android.appsecurity.cts.tinyapp', 10, '1.0'), ('urzip.apk', 'info.guardianproject.urzip', 100, '0.1'), ('urzip-badcert.apk', 'info.guardianproject.urzip', 100, '0.1'), ('urzip-badsig.apk', 'info.guardianproject.urzip', 100, '0.1'), ('urzip-release.apk', 'info.guardianproject.urzip', 100, '0.1'), ('urzip-release-unsigned.apk', 'info.guardianproject.urzip', 100, '0.1'), ('repo/com.politedroid_3.apk', 'com.politedroid', 3, '1.2'), ('repo/com.politedroid_4.apk', 'com.politedroid', 4, '1.3'), ('repo/com.politedroid_5.apk', 'com.politedroid', 5, '1.4'), ('repo/com.politedroid_6.apk', 'com.politedroid', 6, '1.5'), ('repo/duplicate.permisssions_9999999.apk', 'duplicate.permisssions', 9999999, ''), ('repo/info.zwanenburg.caffeinetile_4.apk', 'info.zwanenburg.caffeinetile', 4, '1.3'), ('repo/obb.main.oldversion_1444412523.apk', 'obb.main.oldversion', 1444412523, '0.1'), ('repo/obb.mainpatch.current_1619_another-release-key.apk', 'obb.mainpatch.current', 1619, '0.1'), ('repo/obb.mainpatch.current_1619.apk', 'obb.mainpatch.current', 1619, '0.1'), ('repo/obb.main.twoversions_1101613.apk', 'obb.main.twoversions', 1101613, '0.1'), ('repo/obb.main.twoversions_1101615.apk', 'obb.main.twoversions', 1101615, '0.1'), ('repo/obb.main.twoversions_1101617.apk', 'obb.main.twoversions', 1101617, '0.1'), ('repo/urzip-; Рахма́, [rɐxˈmanʲɪnəf] سيرجي_رخمانينوف 谢·.apk', 'info.guardianproject.urzip', 100, '0.1'), ] for apkfilename, appid, versionCode, versionName in testcases: a, vc, vn = fdroidserver.common.get_apk_id(apkfilename) self.assertEqual(appid, a, 'androguard appid parsing failed for ' + apkfilename) self.assertEqual(versionName, vn, 'androguard versionName parsing failed for ' + apkfilename) self.assertEqual(versionCode, vc, 'androguard versionCode parsing failed for ' + apkfilename) if 'aapt' in config: a, vc, vn = fdroidserver.common.get_apk_id_aapt(apkfilename) self.assertEqual(appid, a, 'aapt appid parsing failed for ' + apkfilename) self.assertEqual(versionCode, vc, 'aapt versionCode parsing failed for ' + apkfilename) self.assertEqual(versionName, vn, 'aapt versionName parsing failed for ' + apkfilename) @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_get_apk_id_bad_apk(self): """get_apk_id should never return None on error, only raise exceptions""" with self.assertRaises(KeyError): fdroidserver.common.get_apk_id('Norway_bouvet_europe_2.obf.zip') shutil.copy('Norway_bouvet_europe_2.obf.zip', self.testdir) os.chdir(self.testdir) with ZipFile('Norway_bouvet_europe_2.obf.zip', 'a') as zipfp: zipfp.writestr('AndroidManifest.xml', 'not a manifest') with self.assertRaises(KeyError): fdroidserver.common.get_apk_id('Norway_bouvet_europe_2.obf.zip') @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_get_apk_id_bad_path(self): with self.assertRaises(FDroidException): fdroidserver.common.get_apk_id('nope') @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_get_apk_id_api_call(self): self.assertEqual( ('info.guardianproject.urzip', 100, '0.1'), fdroidserver.common.get_apk_id('urzip.apk'), ) @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_get_apk_id_bad_zip(self): os.chdir(self.testdir) badzip = 'badzip.apk' with open(badzip, 'w') as fp: fp.write('not a ZIP') with self.assertRaises(BadZipFile): fdroidserver.common.get_apk_id(badzip) def test_get_apk_id_aapt_regex(self): files = glob.glob(os.path.join(basedir, 'build-tools', '[1-9]*.*', '*.txt')) self.assertNotEqual(0, len(files)) for f in files: appid, versionCode = os.path.splitext(os.path.basename(f))[0][12:].split('_') with open(f, encoding='utf-8') as fp: m = fdroidserver.common.APK_ID_TRIPLET_REGEX.match(fp.read()) if m: self.assertEqual(appid, m.group(1)) self.assertEqual(versionCode, m.group(2)) else: self.fail('could not parse aapt output: {}'.format(f)) def test_get_native_code(self): testcases = [ ('repo/obb.main.twoversions_1101613.apk', []), ('org.bitbucket.tickytacky.mirrormirror_1.apk', []), ('org.bitbucket.tickytacky.mirrormirror_2.apk', []), ('org.bitbucket.tickytacky.mirrormirror_3.apk', []), ('org.bitbucket.tickytacky.mirrormirror_4.apk', []), ('org.dyndns.fules.ck_20.apk', ['arm64-v8a', 'armeabi', 'armeabi-v7a', 'mips', 'mips64', 'x86', 'x86_64']), ('urzip.apk', []), ('urzip-badcert.apk', []), ('urzip-badsig.apk', []), ('urzip-release.apk', []), ('urzip-release-unsigned.apk', []), ('repo/com.politedroid_3.apk', []), ('repo/com.politedroid_4.apk', []), ('repo/com.politedroid_5.apk', []), ('repo/com.politedroid_6.apk', []), ('repo/duplicate.permisssions_9999999.apk', []), ('repo/info.zwanenburg.caffeinetile_4.apk', []), ('repo/obb.main.oldversion_1444412523.apk', []), ('repo/obb.mainpatch.current_1619_another-release-key.apk', []), ('repo/obb.mainpatch.current_1619.apk', []), ('repo/obb.main.twoversions_1101613.apk', []), ('repo/obb.main.twoversions_1101615.apk', []), ('repo/obb.main.twoversions_1101617.apk', []), ('repo/urzip-; Рахма́, [rɐxˈmanʲɪnəf] سيرجي_رخمانينوف 谢·.apk', []), ] for apkfilename, native_code in testcases: nc = fdroidserver.common.get_native_code(apkfilename) self.assertEqual(native_code, nc) @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_get_sdkversions_androguard(self): """This is a sanity test that androguard isn't broken""" def get_minSdkVersion(apkfile): apk = fdroidserver.common.get_androguard_APK(apkfile) return fdroidserver.common.get_min_sdk_version(apk) def get_targetSdkVersion(apkfile): apk = fdroidserver.common.get_androguard_APK(apkfile) return apk.get_effective_target_sdk_version() self.assertEqual(4, get_minSdkVersion('bad-unicode-πÇÇ现代通用字-български-عربي1.apk')) self.assertEqual(30, get_minSdkVersion('issue-1128-min-sdk-30-poc.apk')) self.assertEqual(29, get_minSdkVersion('issue-1128-poc1.apk')) self.assertEqual(29, get_minSdkVersion('issue-1128-poc2.apk')) self.assertEqual(23, get_minSdkVersion('issue-1128-poc3a.apk')) self.assertEqual(23, get_minSdkVersion('issue-1128-poc3b.apk')) self.assertEqual(14, get_minSdkVersion('org.bitbucket.tickytacky.mirrormirror_1.apk')) self.assertEqual(14, get_minSdkVersion('org.bitbucket.tickytacky.mirrormirror_2.apk')) self.assertEqual(14, get_minSdkVersion('org.bitbucket.tickytacky.mirrormirror_3.apk')) self.assertEqual(14, get_minSdkVersion('org.bitbucket.tickytacky.mirrormirror_4.apk')) self.assertEqual(7, get_minSdkVersion('org.dyndns.fules.ck_20.apk')) self.assertEqual(4, get_minSdkVersion('urzip.apk')) self.assertEqual(4, get_minSdkVersion('urzip-badcert.apk')) self.assertEqual(4, get_minSdkVersion('urzip-badsig.apk')) self.assertEqual(4, get_minSdkVersion('urzip-release.apk')) self.assertEqual(4, get_minSdkVersion('urzip-release-unsigned.apk')) self.assertEqual(27, get_minSdkVersion('v2.only.sig_2.apk')) self.assertEqual(3, get_minSdkVersion('repo/com.politedroid_3.apk')) self.assertEqual(3, get_minSdkVersion('repo/com.politedroid_4.apk')) self.assertEqual(3, get_minSdkVersion('repo/com.politedroid_5.apk')) self.assertEqual(14, get_minSdkVersion('repo/com.politedroid_6.apk')) self.assertEqual(4, get_minSdkVersion('repo/obb.main.oldversion_1444412523.apk')) self.assertEqual(4, get_minSdkVersion('repo/obb.mainpatch.current_1619_another-release-key.apk')) self.assertEqual(4, get_minSdkVersion('repo/obb.mainpatch.current_1619.apk')) self.assertEqual(4, get_minSdkVersion('repo/obb.main.twoversions_1101613.apk')) self.assertEqual(4, get_minSdkVersion('repo/obb.main.twoversions_1101615.apk')) self.assertEqual(4, get_minSdkVersion('repo/obb.main.twoversions_1101617.apk')) self.assertEqual(4, get_minSdkVersion('repo/urzip-; Рахма́, [rɐxˈmanʲɪnəf] سيرجي_رخمانينوف 谢·.apk')) self.assertEqual(30, get_targetSdkVersion('minimal_targetsdk_30_unsigned.apk')) self.assertEqual(1, get_targetSdkVersion('no_targetsdk_minsdk1_unsigned.apk')) self.assertEqual(30, get_targetSdkVersion('no_targetsdk_minsdk30_unsigned.apk')) def test_apk_release_name(self): appid, vercode, sigfp = fdroidserver.common.apk_parse_release_filename('com.serwylo.lexica_905.apk') self.assertEqual(appid, 'com.serwylo.lexica') self.assertEqual(vercode, 905) self.assertEqual(sigfp, None) appid, vercode, sigfp = fdroidserver.common.apk_parse_release_filename('com.serwylo.lexica_905_c82e0f6.apk') self.assertEqual(appid, 'com.serwylo.lexica') self.assertEqual(vercode, 905) self.assertEqual(sigfp, 'c82e0f6') appid, vercode, sigfp = fdroidserver.common.apk_parse_release_filename('beverly_hills-90210.apk') self.assertEqual(appid, None) self.assertEqual(vercode, None) self.assertEqual(sigfp, None) def test_metadata_find_developer_signature(self): sig = fdroidserver.common.metadata_find_developer_signature('org.smssecure.smssecure') self.assertEqual('b30bb971af0d134866e158ec748fcd553df97c150f58b0a963190bbafbeb0868', sig) def test_parse_xml(self): manifest = Path('source-files/fdroid/fdroidclient/AndroidManifest.xml') parsed = fdroidserver.common.parse_xml(manifest) self.assertIsNotNone(parsed) self.assertEqual(str(type(parsed)), "") def test_parse_androidmanifests(self): app = fdroidserver.metadata.App() app.id = 'org.fdroid.fdroid' paths = [ Path('source-files/fdroid/fdroidclient/AndroidManifest.xml'), Path('source-files/fdroid/fdroidclient/build.gradle'), ] for path in paths: self.assertTrue(os.path.isfile(path)) self.assertEqual(('0.94-test', 940, 'org.fdroid.fdroid'), fdroidserver.common.parse_androidmanifests(paths, app)) app = fdroidserver.metadata.App() app.AutoName = 'android-chat' app.RepoType = 'git' url = 'https://github.com/wildfirechat/android-chat.git' app.SourceCode = url.rstrip('.git') app.Repo = url paths = [ Path('source-files/cn.wildfirechat.chat/avenginekit/build.gradle'), Path('source-files/cn.wildfirechat.chat/build.gradle'), Path('source-files/cn.wildfirechat.chat/client/build.gradle'), Path('source-files/cn.wildfirechat.chat/client/src/main/AndroidManifest.xml'), Path('source-files/cn.wildfirechat.chat/emojilibrary/build.gradle'), Path('source-files/cn.wildfirechat.chat/gradle/build_libraries.gradle'), Path('source-files/cn.wildfirechat.chat/imagepicker/build.gradle'), Path('source-files/cn.wildfirechat.chat/mars-core-release/build.gradle'), Path('source-files/cn.wildfirechat.chat/push/build.gradle'), Path('source-files/cn.wildfirechat.chat/settings.gradle'), Path('source-files/cn.wildfirechat.chat/chat/build.gradle'), ] for path in paths: self.assertTrue(os.path.isfile(path)) self.assertEqual(('0.6.9', 23, 'cn.wildfirechat.chat'), fdroidserver.common.parse_androidmanifests(paths, app)) app = fdroidserver.metadata.App() app.Repo = 'https://github.com/Integreight/1Sheeld-Android-App' paths = [ Path('source-files/com.integreight.onesheeld/pagerIndicator/src/main/AndroidManifest.xml'), Path('source-files/com.integreight.onesheeld/pagerIndicator/build.gradle'), Path('source-files/com.integreight.onesheeld/oneSheeld/src/main/AndroidManifest.xml'), Path('source-files/com.integreight.onesheeld/oneSheeld/build.gradle'), Path('source-files/com.integreight.onesheeld/localeapi/src/main/AndroidManifest.xml'), Path('source-files/com.integreight.onesheeld/localeapi/build.gradle'), Path('source-files/com.integreight.onesheeld/build.gradle'), Path('source-files/com.integreight.onesheeld/settings.gradle'), Path('source-files/com.integreight.onesheeld/quickReturnHeader/src/main/AndroidManifest.xml'), Path('source-files/com.integreight.onesheeld/quickReturnHeader/build.gradle'), Path('source-files/com.integreight.onesheeld/pullToRefreshlibrary/src/main/AndroidManifest.xml'), Path('source-files/com.integreight.onesheeld/pullToRefreshlibrary/build.gradle'), ] for path in paths: self.assertTrue(os.path.isfile(path)) self.assertEqual(('1.9.0', 170521, 'com.integreight.onesheeld'), fdroidserver.common.parse_androidmanifests(paths, app)) app = fdroidserver.metadata.App() app.id = 'dev.patrickgold.florisboard' paths = [ Path('source-files/dev.patrickgold.florisboard/app/build.gradle.kts'), ] for path in paths: self.assertTrue(os.path.isfile(path)) self.assertEqual(('0.3.10', 29, 'dev.patrickgold.florisboard'), fdroidserver.common.parse_androidmanifests(paths, app)) app = fdroidserver.metadata.App() app.id = 'com.ubergeek42.WeechatAndroid' paths = [ Path('source-files/com.ubergeek42.WeechatAndroid/app/build.gradle.kts'), Path('source-files/com.ubergeek42.WeechatAndroid/app/src/main/res/values/strings.xml'), ] for path in paths: self.assertTrue(os.path.isfile(path)) self.assertEqual(('1.8.1', 10801, None), fdroidserver.common.parse_androidmanifests(paths, app)) def test_parse_androidmanifests_ignore(self): app = fdroidserver.metadata.App() app.id = 'org.fdroid.fdroid' app.UpdateCheckIgnore = '-test' paths = [ Path('source-files/fdroid/fdroidclient/AndroidManifest.xml'), Path('source-files/fdroid/fdroidclient/build.gradle'), ] for path in paths: self.assertTrue(os.path.isfile(path)) self.assertEqual(('Ignore', None, 'org.fdroid.fdroid'), fdroidserver.common.parse_androidmanifests(paths, app)) def test_parse_androidmanifests_with_flavor(self): app = fdroidserver.metadata.App() build = fdroidserver.metadata.Build() build.gradle = ['devVersion'] app['Builds'] = [build] app.id = 'org.fdroid.fdroid.dev' paths = [ Path('source-files/fdroid/fdroidclient/AndroidManifest.xml'), Path('source-files/fdroid/fdroidclient/build.gradle'), ] for path in paths: self.assertTrue(os.path.isfile(path)) self.assertEqual(('0.95-dev', 949, 'org.fdroid.fdroid.dev'), fdroidserver.common.parse_androidmanifests(paths, app)) app = fdroidserver.metadata.App() build = fdroidserver.metadata.Build() build.gradle = ['free'] app['Builds'] = [build] app.id = 'eu.siacs.conversations' paths = [ Path('source-files/eu.siacs.conversations/build.gradle'), ] for path in paths: self.assertTrue(os.path.isfile(path)) self.assertEqual(('1.23.1', 245, 'eu.siacs.conversations'), fdroidserver.common.parse_androidmanifests(paths, app)) app = fdroidserver.metadata.App() build = fdroidserver.metadata.Build() build.gradle = ['generic'] app['Builds'] = [build] app.id = 'com.nextcloud.client' paths = [ Path('source-files/com.nextcloud.client/build.gradle'), ] for path in paths: self.assertTrue(os.path.isfile(path)) self.assertEqual(('2.0.0', 20000099, 'com.nextcloud.client'), fdroidserver.common.parse_androidmanifests(paths, app)) app = fdroidserver.metadata.App() build = fdroidserver.metadata.Build() build.gradle = ['versionDev'] app['Builds'] = [build] app.id = 'com.nextcloud.android.beta' paths = [ Path('source-files/com.nextcloud.client/build.gradle'), ] for path in paths: self.assertTrue(os.path.isfile(path)) self.assertEqual(('20171223', 20171223, 'com.nextcloud.android.beta'), fdroidserver.common.parse_androidmanifests(paths, app)) app = fdroidserver.metadata.App() build = fdroidserver.metadata.Build() build.gradle = ['standard'] app['Builds'] = [build] app.id = 'at.bitfire.davdroid' paths = [ Path('source-files/at.bitfire.davdroid/build.gradle'), ] for path in paths: self.assertTrue(os.path.isfile(path)) self.assertEqual(('1.9.8.1-ose', 197, 'at.bitfire.davdroid'), fdroidserver.common.parse_androidmanifests(paths, app)) app = fdroidserver.metadata.App() build = fdroidserver.metadata.Build() build.gradle = ['libre'] app['Builds'] = [build] app.id = 'com.kunzisoft.fdroidtest.applicationidsuffix.libre' paths = [ Path('source-files/com.kunzisoft.testcase/build.gradle'), ] for path in paths: self.assertTrue(os.path.isfile(path)) self.assertEqual(('1.0-libre', 1, 'com.kunzisoft.fdroidtest.applicationidsuffix.libre'), fdroidserver.common.parse_androidmanifests(paths, app)) app = fdroidserver.metadata.App() build = fdroidserver.metadata.Build() build.gradle = ['pro'] app['Builds'] = [build] app.id = 'com.kunzisoft.fdroidtest.applicationidsuffix.pro' paths = [ Path('source-files/com.kunzisoft.testcase/build.gradle'), ] for path in paths: self.assertTrue(os.path.isfile(path)) self.assertEqual(('20180430-pro', 20180430, 'com.kunzisoft.fdroidtest.applicationidsuffix.pro'), fdroidserver.common.parse_androidmanifests(paths, app)) app = fdroidserver.metadata.App() build = fdroidserver.metadata.Build() build.gradle = ['free'] app['Builds'] = [build] app.id = 'com.kunzisoft.fdroidtest.applicationidsuffix' paths = [ Path('source-files/com.kunzisoft.testcase/build.gradle'), ] for path in paths: self.assertTrue(os.path.isfile(path)) self.assertEqual(('1.0-free', 1, 'com.kunzisoft.fdroidtest.applicationidsuffix'), fdroidserver.common.parse_androidmanifests(paths, app)) app = fdroidserver.metadata.App() build = fdroidserver.metadata.Build() build.gradle = ['underscore'] app['Builds'] = [build] app.id = 'com.kunzisoft.fdroidtest.applicationidsuffix.underscore' paths = [ Path('source-files/com.kunzisoft.testcase/build.gradle'), ] for path in paths: self.assertTrue(os.path.isfile(path)) self.assertEqual(('20180430-underscore', 20180430, 'com.kunzisoft.fdroidtest.applicationidsuffix.underscore'), fdroidserver.common.parse_androidmanifests(paths, app)) app = fdroidserver.metadata.App() build = fdroidserver.metadata.Build() build.gradle = ['underscore_first'] app['Builds'] = [build] app.id = 'com.kunzisoft.fdroidtest.applicationidsuffix.underscore_first' paths = [ Path('source-files/com.kunzisoft.testcase/build.gradle'), ] for path in paths: self.assertTrue(os.path.isfile(path)) self.assertEqual(('1.0', 1, 'com.kunzisoft.fdroidtest.applicationidsuffix.underscore_first'), fdroidserver.common.parse_androidmanifests(paths, app)) app = fdroidserver.metadata.App() build = fdroidserver.metadata.Build() build.gradle = ['fdroid'] app['Builds'] = [build] app.id = 'com.github.jameshnsears.quoteunquote' paths = [ Path('source-files/com.github.jameshnsears.quoteunquote/build.gradle'), ] for path in paths: self.assertTrue(os.path.isfile(path)) self.assertEqual(('2.5.2-fdroid', 73, 'com.github.jameshnsears.quoteunquote'), fdroidserver.common.parse_androidmanifests(paths, app)) app = fdroidserver.metadata.App() build = fdroidserver.metadata.Build() build.gradle = ['fdroidFlavor'] app['Builds'] = [build] app.id = 'com.jens.automation2' paths = [ Path('source-files/com.jens.automation2/build.gradle'), ] for path in paths: self.assertTrue(os.path.isfile(path)) self.assertEqual(('1.6.34-fdroid', 105, 'com.jens.automation2'), fdroidserver.common.parse_androidmanifests(paths, app)) app = fdroidserver.metadata.App() build = fdroidserver.metadata.Build() build.gradle = ['VAR', 'prod'] app['Builds'] = [build] app.id = 'de.varengold.activeTAN' paths = [ Path('source-files/de.varengold.activeTAN/build.gradle'), ] for path in paths: self.assertTrue(os.path.isfile(path)) self.assertEqual(('2021-06-30', 34, 'de.varengold.activeTAN'), fdroidserver.common.parse_androidmanifests(paths, app)) def test_parse_srclib_spec_good(self): self.assertEqual(fdroidserver.common.parse_srclib_spec('osmand-external-skia@android/oreo'), ('osmand-external-skia', 'android/oreo', None, None)) self.assertEqual(fdroidserver.common.parse_srclib_spec('1:appcompat@v7'), ('appcompat', 'v7', '1', None)) self.assertEqual(fdroidserver.common.parse_srclib_spec('1:Support/v7/appcompat@android-4.4_r1.1'), ('Support', 'android-4.4_r1.1', '1', 'v7/appcompat')) def test_parse_srclib_spec_many_ats(self): self.assertEqual( fdroidserver.common.parse_srclib_spec('foo@@v2'), ('foo', '@v2', None, None) ) self.assertEqual( fdroidserver.common.parse_srclib_spec('bar@2@f'), ('bar', '2@f', None, None) ) def test_parse_srclib_spec_none(self): with self.assertRaises(MetaDataException): fdroidserver.common.parse_srclib_spec(None) def test_parse_srclib_spec_no_ref(self): with self.assertRaises(MetaDataException): fdroidserver.common.parse_srclib_spec('no-ref') with self.assertRaises(MetaDataException): fdroidserver.common.parse_srclib_spec('noref@') def test_parse_srclib_spec_no_name(self): with self.assertRaises(MetaDataException): fdroidserver.common.parse_srclib_spec('@ref') def test_remove_signing_keys(self): shutil.copytree( os.path.join(basedir, 'source-files'), os.path.join(self.testdir, 'source-files'), ) os.chdir(self.testdir) with_signingConfigs = [ 'source-files/com.seafile.seadroid2/app/build.gradle', 'source-files/eu.siacs.conversations/build.gradle', 'source-files/info.guardianproject.ripple/build.gradle', 'source-files/open-keychain/open-keychain/build.gradle', 'source-files/open-keychain/open-keychain/OpenKeychain/build.gradle', 'source-files/org.tasks/app/build.gradle.kts', 'source-files/osmandapp/osmand/build.gradle', 'source-files/ut.ewh.audiometrytest/app/build.gradle', ] for f in with_signingConfigs: build_dir = os.path.join(*f.split(os.sep)[:2]) if not os.path.isdir(build_dir): continue fdroidserver.common.remove_signing_keys(build_dir) fromfile = os.path.join(basedir, f) with open(f) as fp: content = fp.read() if 'signingConfig' in content: with open(f) as fp: b = fp.readlines() with open(fromfile) as fp: a = fp.readlines() diff = difflib.unified_diff(a, b, fromfile, f) sys.stdout.writelines(diff) self.assertFalse(True) do_not_modify = [ 'source-files/Zillode/syncthing-silk/build.gradle', 'source-files/at.bitfire.davdroid/build.gradle', 'source-files/com.kunzisoft.testcase/build.gradle', 'source-files/com.nextcloud.client/build.gradle', 'source-files/fdroid/fdroidclient/build.gradle', 'source-files/firebase-suspect/app/build.gradle', 'source-files/firebase-suspect/build.gradle', 'source-files/firebase-allowlisted/app/build.gradle', 'source-files/firebase-allowlisted/build.gradle', 'source-files/org.mozilla.rocket/app/build.gradle', 'source-files/realm/react-native/android/build.gradle', 'triple-t-2/build/org.piwigo.android/app/build.gradle', ] for f in do_not_modify: build_dir = os.path.join(*f.split(os.sep)[:2]) if not os.path.isdir(build_dir): continue fdroidserver.common.remove_signing_keys(build_dir) fromfile = os.path.join(basedir, f) with open(fromfile) as fp: a = fp.readlines() with open(f) as fp: b = fp.readlines() diff = list(difflib.unified_diff(a, b, fromfile, f)) self.assertEqual(0, len(diff), 'This file should not have been modified:\n' + ''.join(diff)) def test_calculate_math_string(self): self.assertEqual(1234, fdroidserver.common.calculate_math_string('1234')) self.assertEqual((1 + 1) * 2, fdroidserver.common.calculate_math_string('(1 + 1) * 2')) self.assertEqual((1 - 1) * 2 + 3 * 1 - 1, fdroidserver.common.calculate_math_string('(1 - 1) * 2 + 3 * 1 - 1')) self.assertEqual(0 - 12345, fdroidserver.common.calculate_math_string('0 - 12345')) self.assertEqual(0xffff, fdroidserver.common.calculate_math_string('0xffff')) self.assertEqual(0xcafe * 123, fdroidserver.common.calculate_math_string('0xcafe * 123')) self.assertEqual(-1, fdroidserver.common.calculate_math_string('-1')) with self.assertRaises(SyntaxError): fdroidserver.common.calculate_math_string('__import__("urllib")') with self.assertRaises(SyntaxError): fdroidserver.common.calculate_math_string('self') with self.assertRaises(SyntaxError): fdroidserver.common.calculate_math_string('Ox9()') with self.assertRaises(SyntaxError): fdroidserver.common.calculate_math_string('1+1; print(1)') with self.assertRaises(SyntaxError): fdroidserver.common.calculate_math_string('1-1 # no comment') def test_calculate_IPFS_cid_with_no_tool(self): fdroidserver.common.config = {'ipfs_cid': None} self.assertIsNone(fdroidserver.common.calculate_IPFS_cid('urzip.apk')) self.assertIsNone(fdroidserver.common.calculate_IPFS_cid('FileDoesNotExist')) @unittest.skipUnless(shutil.which('ipfs_cid'), 'calculate_IPFS_cid needs ipfs_cid') def test_calculate_IPFS_cid(self): config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config self.assertIsNone(fdroidserver.common.calculate_IPFS_cid('FileDoesNotExist')) self.assertEqual( fdroidserver.common.calculate_IPFS_cid('urzip.apk'), "bafybeigmtgrwyvj77jaflje2rf533haeqtpu2wtwsctryjusjnsawacsam", ) def test_deploy_build_log_with_rsync_with_id_file(self): mocklogcontent = bytes( textwrap.dedent( """\ build started building... build completed profit!""" ), 'utf-8', ) fdroidserver.common.options = mock.Mock() fdroidserver.common.options.verbose = False fdroidserver.common.options.quiet = False fdroidserver.common.config = {} fdroidserver.common.config['serverwebroot'] = [ {'url': 'example.com:/var/www/fdroid/'}, {'url': 'example.com:/var/www/fbot/'}, ] fdroidserver.common.config['deploy_process_logs'] = True fdroidserver.common.config['identity_file'] = 'ssh/id_rsa' assert_subprocess_call_iteration = 0 def assert_subprocess_call(cmd): nonlocal assert_subprocess_call_iteration logging.debug(cmd) if assert_subprocess_call_iteration == 0: self.assertListEqual(['rsync', '--archive', '--delete-after', '--safe-links', '-e', 'ssh -oBatchMode=yes -oIdentitiesOnly=yes -i ssh/id_rsa', cmd[6], 'example.com:/var/www/fdroid/repo/'], cmd) self.assertTrue(cmd[6].endswith('/com.example.app_4711.log.gz')) with gzip.open(cmd[6], 'r') as f: self.assertTrue(f.read(), mocklogcontent) elif assert_subprocess_call_iteration == 1: self.assertListEqual(['rsync', '--archive', '--delete-after', '--safe-links', '-e', 'ssh -oBatchMode=yes -oIdentitiesOnly=yes -i ssh/id_rsa', cmd[6], 'example.com:/var/www/fbot/repo/'], cmd) self.assertTrue(cmd[6].endswith('/com.example.app_4711.log.gz')) with gzip.open(cmd[6], 'r') as f: self.assertTrue(f.read(), mocklogcontent) else: self.fail('unexpected subprocess.call invocation ({})' .format(assert_subprocess_call_iteration)) assert_subprocess_call_iteration += 1 return 0 with mock.patch('subprocess.call', side_effect=assert_subprocess_call): with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): fdroidserver.common.deploy_build_log_with_rsync( 'com.example.app', 4711, mocklogcontent) expected_log_path = os.path.join(tmpdir, 'repo', 'com.example.app_4711.log.gz') self.assertTrue(os.path.isfile(expected_log_path)) with gzip.open(expected_log_path, 'r') as f: self.assertEqual(f.read(), mocklogcontent) def test_deploy_status_json(self): os.chdir(self.testdir) fakesubcommand = 'fakesubcommand' fake_timestamp = 1234567890 fakeserver = 'example.com:/var/www/fbot/' expected_dir = os.path.join(self.testdir, fakeserver.replace(':', ''), 'repo', 'status') fdroidserver.common.options = mock.Mock() fdroidserver.common.config = {} fdroidserver.common.config['serverwebroot'] = [{'url': fakeserver}] fdroidserver.common.config['identity_file'] = 'ssh/id_rsa' def assert_subprocess_call(cmd): dest_path = os.path.join(self.testdir, cmd[-1].replace(':', '')) if not os.path.exists(dest_path): os.makedirs(dest_path) return subprocess.run(cmd[:-1] + [dest_path]).returncode with mock.patch('subprocess.call', side_effect=assert_subprocess_call): with mock.patch.object(sys, 'argv', ['fdroid ' + fakesubcommand]): output = fdroidserver.common.setup_status_output(time.localtime(fake_timestamp)) self.assertFalse(os.path.exists(os.path.join(expected_dir, 'running.json'))) with mock.patch.object(sys, 'argv', ['fdroid ' + fakesubcommand]): fdroidserver.common.write_status_json(output) self.assertFalse(os.path.exists(os.path.join(expected_dir, fakesubcommand + '.json'))) fdroidserver.common.config['deploy_process_logs'] = True output = fdroidserver.common.setup_status_output(time.localtime(fake_timestamp)) expected_path = os.path.join(expected_dir, 'running.json') self.assertTrue(os.path.isfile(expected_path)) with open(expected_path) as fp: data = json.load(fp) self.assertEqual(fake_timestamp * 1000, data['startTimestamp']) self.assertFalse('endTimestamp' in data) testvalue = 'asdfasd' output['testvalue'] = testvalue fdroidserver.common.write_status_json(output) expected_path = os.path.join(expected_dir, fakesubcommand + '.json') self.assertTrue(os.path.isfile(expected_path)) with open(expected_path) as fp: data = json.load(fp) self.assertEqual(fake_timestamp * 1000, data['startTimestamp']) self.assertTrue('endTimestamp' in data) self.assertEqual(testvalue, output.get('testvalue')) def test_string_is_integer(self): self.assertTrue(fdroidserver.common.string_is_integer('0x10')) self.assertTrue(fdroidserver.common.string_is_integer('010')) self.assertTrue(fdroidserver.common.string_is_integer('123')) self.assertFalse(fdroidserver.common.string_is_integer('0xgg')) self.assertFalse(fdroidserver.common.string_is_integer('01g')) self.assertFalse(fdroidserver.common.string_is_integer('o123')) def test_version_code_string_to_int(self): self.assertEqual(16, fdroidserver.common.version_code_string_to_int('0x10')) self.assertEqual(198712389, fdroidserver.common.version_code_string_to_int('198712389')) self.assertEqual(8, fdroidserver.common.version_code_string_to_int('0o10')) self.assertEqual(10, fdroidserver.common.version_code_string_to_int('010')) self.assertEqual(123, fdroidserver.common.version_code_string_to_int('0000123')) self.assertEqual(-42, fdroidserver.common.version_code_string_to_int('-42')) def test_getsrclibvcs(self): fdroidserver.metadata.srclibs = {'somelib': {'RepoType': 'git'}, 'yeslib': {'RepoType': 'hg'}, 'nolib': {'RepoType': 'git-svn'}} self.assertEqual(fdroidserver.common.getsrclibvcs('somelib'), 'git') self.assertEqual(fdroidserver.common.getsrclibvcs('yeslib'), 'hg') self.assertEqual(fdroidserver.common.getsrclibvcs('nolib'), 'git-svn') with self.assertRaises(VCSException): fdroidserver.common.getsrclibvcs('nonexistentlib') def test_getsrclib_not_found(self): fdroidserver.common.config = {'sdk_path': '', 'java_paths': {}} fdroidserver.metadata.srclibs = {} with self.assertRaisesRegex(VCSException, 'srclib SDL not found.'): fdroidserver.common.getsrclib('SDL@release-2.0.3', 'srclib') def test_getsrclib_gotorevision_raw(self): fdroidserver.common.config = {'sdk_path': '', 'java_paths': {}} fdroidserver.metadata.srclibs = {'SDL': {'RepoType': 'git', 'Repo': ''}} vcs = mock.Mock() with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): os.makedirs(os.path.join('srclib', 'SDL')) with mock.patch('fdroidserver.common.getvcs', return_value=vcs): ret = fdroidserver.common.getsrclib('SDL', 'srclib', raw=True) self.assertEqual(vcs.srclib, ('SDL', None, 'srclib/SDL')) self.assertEqual(ret, vcs) def test_getsrclib_gotorevision_ref(self): fdroidserver.common.config = {'sdk_path': '', 'java_paths': {}} fdroidserver.metadata.srclibs = {'ACRA': {'RepoType': 'git', 'Repo': 'https://github.com/ACRA/acra.git', 'Subdir': None, 'Prepare': None}} vcs = mock.Mock() skm = mock.Mock() dfm = mock.Mock() with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): os.makedirs(os.path.join('srclib', 'ACRA')) with mock.patch('fdroidserver.common.getvcs', return_value=vcs): with mock.patch('fdroidserver.common.remove_signing_keys', skm): with mock.patch('fdroidserver.common.remove_debuggable_flags', dfm): ret = fdroidserver.common.getsrclib('ACRA@acra-4.6.2', 'srclib') self.assertEqual(vcs.srclib, ('ACRA', None, 'srclib/ACRA')) vcs.gotorevision.assert_called_once_with('acra-4.6.2', True) skm.assert_called_once_with('srclib/ACRA') dfm.assert_called_once_with('srclib/ACRA') self.assertEqual(ret, ('ACRA', None, 'srclib/ACRA')) def test_run_yamllint_wellformed(self): try: import yamllint.config yamllint.config # make pyflakes ignore this except ImportError: self.skipTest('yamllint not installed') with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): with open('wellformed.yml', 'w') as f: f.write( textwrap.dedent( '''\ yaml: file: - for - test purposeses: true ''' ) ) result = fdroidserver.common.run_yamllint('wellformed.yml') self.assertEqual(result, '') def test_run_yamllint_malformed(self): try: import yamllint.config yamllint.config # make pyflakes ignore this except ImportError: self.skipTest('yamllint not installed') with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): with open('malformed.yml', 'w') as f: f.write( textwrap.dedent( '''\ yaml: - that fails - test ''' ) ) result = fdroidserver.common.run_yamllint('malformed.yml') self.assertIsNotNone(result) self.assertNotEqual(result, '') def test_with_no_config(self): """It should set defaults if no config file is found""" os.chdir(self.testdir) self.assertFalse(os.path.exists(fdroidserver.common.CONFIG_FILE)) config = fdroidserver.common.read_config() self.assertIsNotNone(config.get('char_limits')) def test_with_zero_size_config(self): """It should set defaults if config file has nothing in it""" os.chdir(self.testdir) fdroidserver.common.write_config_file('') self.assertTrue(os.path.exists(fdroidserver.common.CONFIG_FILE)) config = fdroidserver.common.read_config() self.assertIsNotNone(config.get('char_limits')) def test_with_config_yml(self): """Make sure it is possible to use config.yml alone.""" os.chdir(self.testdir) fdroidserver.common.write_config_file('apksigner: yml') self.assertTrue(os.path.exists(fdroidserver.common.CONFIG_FILE)) config = fdroidserver.common.read_config() self.assertEqual('yml', config.get('apksigner')) def test_with_config_yml_utf8(self): """Make sure it is possible to use config.yml in UTF-8 encoding.""" os.chdir(self.testdir) teststr = '/πÇÇ现代通用字-български-عربي1/ö/yml' fdroidserver.common.write_config_file('apksigner: ' + teststr) self.assertTrue(os.path.exists(fdroidserver.common.CONFIG_FILE)) config = fdroidserver.common.read_config() self.assertEqual(teststr, config.get('apksigner')) def test_with_config_yml_utf8_as_ascii(self): """Make sure it is possible to use config.yml Unicode encoded as ASCII.""" os.chdir(self.testdir) teststr = '/πÇÇ现代通用字-български-عربي1/ö/yml' with open(fdroidserver.common.CONFIG_FILE, 'w', encoding='utf-8') as fp: config_dump({'apksigner': teststr}, fp) self.assertTrue(os.path.exists(fdroidserver.common.CONFIG_FILE)) config = fdroidserver.common.read_config() self.assertEqual(teststr, config.get('apksigner')) def test_with_config_yml_with_env_var(self): """Make sure it is possible to use config.yml alone.""" os.chdir(self.testdir) with mock.patch.dict(os.environ): os.environ['SECRET'] = 'mysecretpassword' # nosec B105 fdroidserver.common.write_config_file("""keypass: {'env': 'SECRET'}\n""") self.assertTrue(os.path.exists(fdroidserver.common.CONFIG_FILE)) config = fdroidserver.common.read_config() self.assertEqual(os.getenv('SECRET', 'fail'), config.get('keypass')) def test_with_config_yml_is_dict(self): os.chdir(self.testdir) Path(fdroidserver.common.CONFIG_FILE).write_text('apksigner = /bin/apksigner') with self.assertRaises(TypeError): fdroidserver.common.read_config() def test_with_config_yml_is_not_mixed_type(self): os.chdir(self.testdir) Path(fdroidserver.common.CONFIG_FILE).write_text('k: v\napksigner = /bin/apk') with self.assertRaises(ruamel.yaml.scanner.ScannerError): fdroidserver.common.read_config() def test_config_repo_url(self): """repo_url ends in /repo, archive_url ends in /archive.""" os.chdir(self.testdir) fdroidserver.common.write_config_file( textwrap.dedent( """\ repo_url: https://MyFirstFDroidRepo.org/fdroid/repo archive_url: https://MyFirstFDroidRepo.org/fdroid/archive """ ) ) config = fdroidserver.common.read_config() self.assertEqual( 'https://MyFirstFDroidRepo.org/fdroid/repo', config.get('repo_url') ) self.assertEqual( 'https://MyFirstFDroidRepo.org/fdroid/archive', config.get('archive_url') ) def test_config_repo_url_extra_slash(self): """repo_url ends in /repo, archive_url ends in /archive.""" os.chdir(self.testdir) fdroidserver.common.write_config_file('repo_url: https://MyFirstFDroidRepo.org/fdroid/repo/') with self.assertRaises(FDroidException): fdroidserver.common.read_config() def test_config_repo_url_not_repo(self): """repo_url ends in /repo, archive_url ends in /archive.""" os.chdir(self.testdir) fdroidserver.common.write_config_file('repo_url: https://MyFirstFDroidRepo.org/fdroid/foo') with self.assertRaises(FDroidException): fdroidserver.common.read_config() def test_config_archive_url_extra_slash(self): """repo_url ends in /repo, archive_url ends in /archive.""" os.chdir(self.testdir) fdroidserver.common.write_config_file('archive_url: https://MyFirstFDroidRepo.org/fdroid/archive/') with self.assertRaises(FDroidException): fdroidserver.common.read_config() def test_config_archive_url_not_repo(self): """repo_url ends in /repo, archive_url ends in /archive.""" os.chdir(self.testdir) fdroidserver.common.write_config_file('archive_url: https://MyFirstFDroidRepo.org/fdroid/foo') with self.assertRaises(FDroidException): fdroidserver.common.read_config() def test_write_to_config_yml(self): os.chdir(self.testdir) fdroidserver.common.write_config_file('apksigner: yml') os.chmod(fdroidserver.common.CONFIG_FILE, 0o0600) self.assertTrue(os.path.exists(fdroidserver.common.CONFIG_FILE)) config = fdroidserver.common.read_config() self.assertFalse('keypass' in config) self.assertEqual('yml', config.get('apksigner')) fdroidserver.common.write_to_config(config, 'keypass', 'mysecretpassword') fdroidserver.common.config = None config = fdroidserver.common.read_config() self.assertEqual('mysecretpassword', config['keypass']) def test_config_dict_with_int_keys(self): os.chdir(self.testdir) fdroidserver.common.write_config_file( textwrap.dedent( """ java_paths: 8: /usr/lib/jvm/java-8-openjdk """ ) ) self.assertTrue(os.path.exists(fdroidserver.common.CONFIG_FILE)) config = fdroidserver.common.read_config() self.assertEqual('/usr/lib/jvm/java-8-openjdk', config['java_paths']['8']) @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) def test_test_sdk_exists_fails_on_bad_sdk_path(self): config = {'sdk_path': 'nothinghere'} self.assertFalse(fdroidserver.common.test_sdk_exists(config)) @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) def test_test_sdk_exists_fails_on_empty(self): self.assertFalse(fdroidserver.common.test_sdk_exists(dict())) @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) def test_test_sdk_exists_fails_on_non_existent(self): config = {'sdk_path': os.path.join(self.testdir, 'non_existent')} self.assertFalse(fdroidserver.common.test_sdk_exists(config)) @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) def test_test_sdk_exists_fails_on_file(self): f = os.path.join(self.testdir, 'testfile') open(f, 'w').close() config = {'sdk_path': f} self.assertFalse(fdroidserver.common.test_sdk_exists(config)) @mock.patch.dict(os.environ, {'PATH': '/nonexistent'}, clear=True) def test_test_sdk_exists_valid_apksigner_in_config(self): apksigner = os.path.join( self.testdir, 'build-tools', fdroidserver.common.MINIMUM_APKSIGNER_BUILD_TOOLS_VERSION, 'apksigner', ) os.makedirs(os.path.dirname(apksigner)) with open(apksigner, 'w') as fp: fp.write('#!/bin/sh\ndate\n') os.chmod(apksigner, 0o0755) # nosec B103 config = {'apksigner': apksigner} self.assertTrue(fdroidserver.common.test_sdk_exists(config)) @mock.patch.dict(os.environ, {'PATH': '/nonexistent'}, clear=True) def test_test_sdk_exists_old_apksigner_in_config(self): apksigner = os.path.join(self.testdir, 'build-tools', '28.0.0', 'apksigner') os.makedirs(os.path.dirname(apksigner)) with open(apksigner, 'w') as fp: fp.write('#!/bin/sh\ndate\n') os.chmod(apksigner, 0o0755) # nosec B103 config = {'apksigner': apksigner} self.assertFalse(fdroidserver.common.test_sdk_exists(config)) @mock.patch.dict(os.environ, {'PATH': '/nonexistent'}, clear=True) def test_test_sdk_exists_with_valid_apksigner(self): apksigner = ( Path(self.testdir) / 'build-tools' / fdroidserver.common.MINIMUM_APKSIGNER_BUILD_TOOLS_VERSION / 'apksigner' ) apksigner.parent.mkdir(parents=True) apksigner.write_text('#!/bin/sh\ndate\n') apksigner.chmod(0o0755) config = {'sdk_path': self.testdir} self.assertTrue(fdroidserver.common.test_sdk_exists(config)) @mock.patch.dict(os.environ, {'PATH': '/nonexistent'}, clear=True) def test_test_sdk_exists_with_old_apksigner(self): apksigner = Path(self.testdir) / 'build-tools' / '17.0.0' / 'apksigner' apksigner.parent.mkdir(parents=True) apksigner.write_text('#!/bin/sh\ndate\n') apksigner.chmod(0o0755) config = {'sdk_path': self.testdir} self.assertFalse(fdroidserver.common.test_sdk_exists(config)) def test_loading_config_buildserver_yml(self): """Smoke check to make sure this file is properly parsed""" os.chdir(self.testdir) shutil.copy( os.path.join(basedir, '..', 'buildserver', 'config.buildserver.yml'), fdroidserver.common.CONFIG_FILE, ) fdroidserver.common.read_config() @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) def test_config_with_env_string(self): """Test whether env works in keys with string values.""" os.chdir(self.testdir) testvalue = 'this is just a test' Path('config.yml').write_text('keypass: {env: foo}') os.environ['foo'] = testvalue self.assertEqual(testvalue, fdroidserver.common.get_config()['keypass']) @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) def test_config_with_env_path(self): """Test whether env works in keys with path values.""" os.chdir(self.testdir) path = 'user@server:/path/to/bar/' os.environ['foo'] = path Path('config.yml').write_text('serverwebroot: {env: foo}') self.assertEqual( [{'url': path}], fdroidserver.common.get_config()['serverwebroot'], ) def test_setup_status_output(self): os.chdir(self.testdir) start_timestamp = time.gmtime() subcommand = 'test' fakecmd = ['fdroid ' + subcommand, '--option'] sys.argv = fakecmd fdroidserver.common.config = dict() fdroidserver.common.setup_status_output(start_timestamp) with open(os.path.join('repo', 'status', 'running.json')) as fp: data = json.load(fp) self.assertFalse(os.path.exists('.git')) self.assertFalse('fdroiddata' in data) self.assertEqual(fakecmd, data['commandLine']) self.assertEqual(subcommand, data['subcommand']) def test_setup_status_output_in_git_repo(self): os.chdir(self.testdir) logging.getLogger('git.cmd').setLevel(logging.INFO) git_repo = git.Repo.init(self.testdir) file_in_git = 'README.md' with open(file_in_git, 'w') as fp: fp.write('this is just a test') git_repo.git.add(all=True) git_repo.index.commit("update README") start_timestamp = time.gmtime() fakecmd = ['fdroid test2', '--option'] sys.argv = fakecmd fdroidserver.common.config = dict() fdroidserver.common.setup_status_output(start_timestamp) with open(os.path.join('repo', 'status', 'running.json')) as fp: data = json.load(fp) self.assertTrue(os.path.exists('.git')) self.assertIsNotNone(re.match(r'[0-9a-f]{40}', data['fdroiddata']['commitId']), 'Must be a valid git SHA1 commit ID!') self.assertFalse(data['fdroiddata']['isDirty']) self.assertEqual(fakecmd, data['commandLine']) self.assertEqual([], data['fdroiddata']['untrackedFiles']) dirtyfile = 'dirtyfile' with open(dirtyfile, 'w', encoding='utf-8') as fp: fp.write('this is just a test') with open(file_in_git, 'a', encoding='utf-8') as fp: fp.write('\nappend some stuff') self.assertEqual([], data['fdroiddata']['modifiedFiles']) fdroidserver.common.setup_status_output(start_timestamp) with open(os.path.join('repo', 'status', 'running.json')) as fp: data = json.load(fp) self.assertTrue(data['fdroiddata']['isDirty']) self.assertEqual([file_in_git], data['fdroiddata']['modifiedFiles']) self.assertEqual([dirtyfile, 'repo/status/running.json'], data['fdroiddata']['untrackedFiles']) def test_get_app_display_name(self): testvalue = 'WIN!' for app in [ {'Name': testvalue}, {'AutoName': testvalue}, {'id': testvalue}, {'id': 'a', 'localized': {'de-AT': {'name': testvalue}}}, {'id': 'a', 'localized': { 'de-AT': {'name': 'nope'}, 'en-US': {'name': testvalue}, }}, {'AutoName': 'ignore me', 'Name': testvalue, 'id': 'nope'}, {'AutoName': testvalue, 'id': 'nope'}]: self.assertEqual(testvalue, fdroidserver.common.get_app_display_name(app)) @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) def test_get_android_tools_versions(self): sdk_path = os.path.join(basedir, 'get_android_tools_versions/android-sdk') config = { 'ndk_paths': {'r10e': os.path.join(sdk_path, '..', 'android-ndk-r10e')}, 'sdk_path': sdk_path, } fdroidserver.common.config = config fdroidserver.common.fill_config_defaults(config) components = fdroidserver.common.get_android_tools_versions() expected = ( ('../android-ndk-r10e', 'r10e'), ('ndk-bundle', '21.4.7075529'), ('ndk/11.2.2725575', '11.2.2725575'), ('ndk/17.2.4988734', '17.2.4988734'), ('ndk/21.3.6528147', '21.3.6528147'), ('patcher/v4', '1'), ('platforms/android-30', '3'), ('skiaparser/1', '6'), ('tools', '26.1.1'), ) self.assertSequenceEqual(expected, sorted(components)) @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) def test_get_android_tools_versions_no_ndk(self): with tempfile.TemporaryDirectory() as tmpdir: sdk_path = Path(tmpdir) / 'get_android_tools_versions' shutil.copytree( os.path.join(basedir, 'get_android_tools_versions'), sdk_path ) shutil.rmtree(sdk_path / 'android-ndk-r10e') shutil.rmtree(sdk_path / 'android-sdk/ndk') shutil.rmtree(sdk_path / 'android-sdk/ndk-bundle') fdroidserver.common.config = {'sdk_path': str(sdk_path)} components = fdroidserver.common.get_android_tools_versions() expected = ( ('android-sdk/patcher/v4', '1'), ('android-sdk/platforms/android-30', '3'), ('android-sdk/skiaparser/1', '6'), ('android-sdk/tools', '26.1.1'), ) self.assertSequenceEqual(expected, sorted(components)) def test_read_pkg_args(self): allow_vercodes = False self.assertEqual( {'org.fdroid.fdroid': []}, fdroidserver.common.read_pkg_args(['org.fdroid.fdroid'], allow_vercodes), ) self.assertNotEqual( {'com.example': [123456]}, fdroidserver.common.read_pkg_args(['com.example:123456'], allow_vercodes), ) allow_vercodes = True self.assertEqual( {'org.fdroid.fdroid': []}, fdroidserver.common.read_pkg_args(['org.fdroid.fdroid'], allow_vercodes), ) self.assertEqual( {'com.example': [123456]}, fdroidserver.common.read_pkg_args(['com.example:123456'], allow_vercodes), ) self.assertEqual( {'org.debian_kit': [6]}, fdroidserver.common.read_pkg_args(['org.debian_kit_6.apk'], allow_vercodes), ) appid_versionCode_pairs = ( 'org.fdroid.fdroid:1', 'com.example:12345', 'com.example:67890', ) self.assertEqual( {'com.example': [12345, 67890], 'org.fdroid.fdroid': [1]}, fdroidserver.common.read_pkg_args(appid_versionCode_pairs, allow_vercodes), ) appid_versionCode_pairs = ( 'com.example:67890', 'org.c_base.c_beam_29.apk', ) self.assertEqual( {'com.example': [67890], 'org.c_base.c_beam': [29]}, fdroidserver.common.read_pkg_args(appid_versionCode_pairs, allow_vercodes), ) def test_read_pkg_args_errors(self): allow_vercodes = True with self.assertRaises(FDroidException): fdroidserver.common.read_pkg_args(['org.fdroid.fdroid:'], allow_vercodes), with self.assertRaises(FDroidException): fdroidserver.common.read_pkg_args(['org.fdroid.fdroid:foo'], allow_vercodes), def test_apk_strip_v1_signatures(self): before = os.path.join(basedir, 'no_targetsdk_minsdk1_unsigned.apk') after = os.path.join(self.testdir, 'after.apk') shutil.copy(before, after) fdroidserver.common.apk_strip_v1_signatures(after, strip_manifest=False) def test_metadata_find_developer_signing_files(self): appid = 'org.smssecure.smssecure' self.assertIsNone( fdroidserver.common.metadata_find_developer_signing_files(appid, 133) ) vc = '135' self.assertEqual( ( os.path.join('metadata', appid, 'signatures', vc, '28969C09.RSA'), os.path.join('metadata', appid, 'signatures', vc, '28969C09.SF'), os.path.join('metadata', appid, 'signatures', vc, 'MANIFEST.MF'), None, ), fdroidserver.common.metadata_find_developer_signing_files(appid, vc), ) vc = '134' self.assertEqual( ( os.path.join('metadata', appid, 'signatures', vc, '28969C09.RSA'), os.path.join('metadata', appid, 'signatures', vc, '28969C09.SF'), os.path.join('metadata', appid, 'signatures', vc, 'MANIFEST.MF'), None, ), fdroidserver.common.metadata_find_developer_signing_files(appid, vc), ) @mock.patch('sdkmanager.build_package_list', lambda use_net: None) def test_auto_install_ndk(self): """Test all possible field data types for build.ndk""" fdroidserver.common.config = {'sdk_path': self.testdir} sdk_path = self.testdir build = fdroidserver.metadata.Build() none_entry = mock.Mock() with mock.patch('sdkmanager.install', none_entry): fdroidserver.common.auto_install_ndk(build) none_entry.assert_not_called() empty_list = mock.Mock() build.ndk = [] with mock.patch('sdkmanager.install', empty_list): fdroidserver.common.auto_install_ndk(build) empty_list.assert_not_called() release_entry = mock.Mock() build.ndk = 'r21e' with mock.patch('sdkmanager.install', release_entry): fdroidserver.common.auto_install_ndk(build) release_entry.assert_called_once_with('ndk;r21e', sdk_path) revision_entry = mock.Mock() build.ndk = '21.4.7075529' with mock.patch('sdkmanager.install', revision_entry): fdroidserver.common.auto_install_ndk(build) revision_entry.assert_called_once_with('ndk;21.4.7075529', sdk_path) list_entry = mock.Mock() calls = [] build.ndk = ['r10e', '11.0.2655954', 'r12b', 'r21e'] for n in build.ndk: calls.append(mock.call(f'ndk;{n}', sdk_path)) with mock.patch('sdkmanager.install', list_entry): fdroidserver.common.auto_install_ndk(build) list_entry.assert_has_calls(calls) @unittest.skipIf(importlib.util.find_spec('sdkmanager') is None, 'needs sdkmanager') @mock.patch('sdkmanager.build_package_list', lambda use_net: None) @mock.patch('sdkmanager._install_zipball_from_cache', lambda a, b: None) @mock.patch('sdkmanager._generate_package_xml', lambda a, b, c: None) def test_auto_install_ndk_mock_dl(self): """Test NDK installs by actually calling sdkmanager""" import sdkmanager import importlib.metadata sdkmanager_version = LooseVersion(importlib.metadata.version('sdkmanager')) if sdkmanager_version < LooseVersion('0.6.4'): raise unittest.SkipTest('needs fdroid sdkmanager >= 0.6.4') fdroidserver.common.config = {'sdk_path': 'placeholder'} build = fdroidserver.metadata.Build() url = 'https://dl.google.com/android/repository/android-ndk-r24-linux.zip' path = sdkmanager.get_cachedir() / os.path.basename(url) sdkmanager.packages = { ('ndk', '24.0.8215888'): url, ('ndk', 'r24'): url, } build.ndk = 'r24' firstrun = mock.Mock() with mock.patch('sdkmanager.download_file', firstrun): fdroidserver.common.auto_install_ndk(build) firstrun.assert_called_once_with(url, path) build.ndk = '24.0.8215888' secondrun = mock.Mock() with mock.patch('sdkmanager.download_file', secondrun): fdroidserver.common.auto_install_ndk(build) secondrun.assert_called_once_with(url, path) @unittest.skip("This test downloads and unzips a 1GB file.") def test_install_ndk(self): """NDK r10e is a special case since its missing source.properties""" config = {'sdk_path': self.testdir} fdroidserver.common.config = config fdroidserver.common._install_ndk('r10e') r10e = os.path.join(self.testdir, 'ndk', 'r10e') self.assertEqual('r10e', fdroidserver.common.get_ndk_version(r10e)) fdroidserver.common.fill_config_defaults(config) self.assertEqual({'r10e': r10e}, config['ndk_paths']) def test_fill_config_defaults(self): """Test the auto-detection of NDKs installed in standard paths""" ndk_bundle = os.path.join(self.testdir, 'ndk-bundle') os.makedirs(ndk_bundle) with open(os.path.join(ndk_bundle, 'source.properties'), 'w') as fp: fp.write('Pkg.Desc = Android NDK\nPkg.Revision = 17.2.4988734\n') config = {'sdk_path': self.testdir} fdroidserver.common.fill_config_defaults(config) self.assertEqual({'17.2.4988734': ndk_bundle}, config['ndk_paths']) r21e = os.path.join(self.testdir, 'ndk', '21.4.7075529') os.makedirs(r21e) with open(os.path.join(r21e, 'source.properties'), 'w') as fp: fp.write('Pkg.Desc = Android NDK\nPkg.Revision = 21.4.7075529\n') config = {'sdk_path': self.testdir} fdroidserver.common.fill_config_defaults(config) self.assertEqual( {'17.2.4988734': ndk_bundle, '21.4.7075529': r21e}, config['ndk_paths'], ) r10e = os.path.join(self.testdir, 'ndk', 'r10e') os.makedirs(r10e) with open(os.path.join(r10e, 'RELEASE.TXT'), 'w') as fp: fp.write('r10e-rc4 (64-bit)\n') config = {'sdk_path': self.testdir} fdroidserver.common.fill_config_defaults(config) self.assertEqual( {'r10e': r10e, '17.2.4988734': ndk_bundle, '21.4.7075529': r21e}, config['ndk_paths'], ) @unittest.skipIf(not os.path.isdir('/usr/lib/jvm/default-java'), 'uses Debian path') def test_fill_config_defaults_java(self): """Test the auto-detection of Java installed in standard paths""" config = {'sdk_path': self.testdir} fdroidserver.common.fill_config_defaults(config) java_paths = [] # use presence of javac to make sure its JDK not just JRE for f in glob.glob('/usr/lib/jvm/java-*-openjdk-*/bin/javac'): jdk = os.path.dirname(os.path.dirname(f)) if not os.path.islink(jdk): java_paths.append(jdk) self.assertEqual( len(java_paths), len(config['java_paths']) ) for f in config['java_paths'].values(): self.assertTrue(f in java_paths) self.assertTrue(isinstance(f, str)) # paths in config must be str @mock.patch.dict(os.environ, clear=True) def test_sdk_path_in_config_must_be_strings(self): """All paths in config must be strings, and never pathlib.Path instances""" os.environ['PATH'] = '/usr/bin:/usr/sbin' config = {'sdk_path': Path('/opt/android-sdk')} fdroidserver.common.fill_config_defaults(config) build = fdroidserver.metadata.Build() with self.assertRaises(TypeError): fdroidserver.common.set_FDroidPopen_env(build) @mock.patch.dict(os.environ, clear=True) def test_ndk_paths_in_config_must_be_strings(self): """All paths in config must be strings, and never pathlib.Path instances""" fdroidserver.common.config = { 'ndk_paths': {'r21d': Path('/opt/android-sdk/ndk/r21d')} } build = fdroidserver.metadata.Build() build.ndk = 'r21d' os.environ['PATH'] = '/usr/bin:/usr/sbin' with self.assertRaises(TypeError): fdroidserver.common.set_FDroidPopen_env(build) @mock.patch.dict(os.environ, clear=True) def test_FDroidPopen_envs_paths_can_be_pathlib(self): _mock_common_module_options_instance() os.environ['PATH'] = '/usr/bin:/usr/sbin' envs = {'PATHLIB': Path('/pathlib/path'), 'STRING': '/string/path'} p = fdroidserver.common.FDroidPopen(['/bin/sh', '-c', 'export'], envs=envs) self.assertIn('/string/path', p.output) self.assertIn('/pathlib/path', p.output) def test_vcs_git_latesttags(self): tags = [ "1.1.1", "2.2.2", "v3.0", "0.0.4", "0.5.0-beta", "666(6)", "seven", ] with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): repo = git.Repo.init(Path.cwd()) f = Path("test") date = 10 ** 9 for tag in tags: date += 1 f.write_text(tag) repo.index.add([str(f)]) repo.index.commit(tag, commit_date=str(date) + " +0000") repo.create_tag(tag) vcs = fdroidserver.common.vcs_git(None, Path.cwd()) self.assertEqual(vcs.latesttags(), tags[::-1]) def test_vcs_git_getref(self): with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): repo = git.Repo.init(Path.cwd()) tag = "1.1.1" f = Path("test") f.write_text(tag) repo.index.add([str(f)]) repo.index.commit("foo") repo.create_tag(tag) vcs = fdroidserver.common.vcs_git(None, Path.cwd()) self.assertIsNotNone(vcs.getref("1.1.1")) self.assertIsNone(vcs.getref("invalid")) def test_get_release_filename(self): app = fdroidserver.metadata.App() app.id = 'test.app' build = fdroidserver.metadata.Build() build.versionCode = 123 build.output = 'build/apk/*' self.assertEqual( fdroidserver.common.get_release_filename(app, build), "%s_%s.apk" % (app.id, build.versionCode), ) build.output = 'build/apk/*.zip' self.assertEqual( fdroidserver.common.get_release_filename(app, build), "%s_%s.zip" % (app.id, build.versionCode), ) build.output = 'build/apk/*.apk' self.assertEqual( fdroidserver.common.get_release_filename(app, build), "%s_%s.apk" % (app.id, build.versionCode), ) build.output = 'build/apk/*.apk' self.assertEqual( fdroidserver.common.get_release_filename(app, build, 'exe'), "%s_%s.exe" % (app.id, build.versionCode), ) def test_no_zero_length_ndk_path_prefixes(self): fdroidserver.common.config = {'ndk_paths': {}} build = fdroidserver.metadata.Build() with mock.patch.dict(os.environ, clear=True): os.environ['PATH'] = '/usr/bin:/usr/sbin' fdroidserver.common.set_FDroidPopen_env(build) self.assertNotIn('', os.getenv('PATH').split(os.pathsep)) def test_is_repo_file(self): is_repo_file = fdroidserver.common.is_repo_file self.assertFalse(is_repo_file('does-not-exist')) with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): Path('repo').mkdir() repo_files = [ 'repo/com.example.test.helloworld_1.apk', 'repo/com.politedroid_6.apk', 'repo/duplicate.permisssions_9999999.apk', 'repo/fake.ota.update_1234.zip', 'repo/info.guardianproject.index-v1.jar_123.apk', 'repo/info.zwanenburg.caffeinetile_4.apk', 'repo/main.1101613.obb.main.twoversions.obb', ] index_files = [ 'repo/entry.jar', 'repo/entry.json', 'repo/index-v1.jar', 'repo/index-v1.json', 'repo/index-v2.json', 'repo/index.css', 'repo/index.html', 'repo/index.jar', 'repo/index.png', 'repo/index.xml', ] for f in repo_files + index_files: open(f, 'w').close() repo_dirs = [ 'repo/com.politedroid', 'repo/info.guardianproject.index-v1.jar', 'repo/status', ] for d in repo_dirs: os.mkdir(d) for f in repo_files: self.assertTrue(os.path.exists(f), f + ' was created') self.assertTrue(is_repo_file(f), f + ' is repo file') for f in index_files: self.assertTrue(os.path.exists(f), f + ' was created') self.assertFalse(is_repo_file(f), f + ' is repo file') gpg_signed = [ 'repo/entry.json', 'repo/index-v1.json', 'repo/index-v2.json', ] self.assertEqual( (f in gpg_signed or is_repo_file(f, for_gpg_signing=False)), is_repo_file(f, for_gpg_signing=True), f + ' gpg signable?', ) for d in repo_dirs: self.assertTrue(os.path.exists(d), d + ' was created') self.assertFalse(is_repo_file(d), d + ' not repo file') def test_get_apksigner_smartcardoptions(self): os.chdir(self.testdir) with open(fdroidserver.common.CONFIG_FILE, 'w', encoding='utf-8') as fp: d = { 'smartcardoptions': '-storetype PKCS11' ' -providerName SunPKCS11-OpenSC' ' -providerClass sun.security.pkcs11.SunPKCS11' ' -providerArg opensc-fdroid.cfg' } config_dump(d, fp) config = fdroidserver.common.read_config() fdroidserver.common.config = config self.assertTrue(isinstance(d['smartcardoptions'], str)) self.assertTrue(isinstance(config['smartcardoptions'], list)) self.assertEqual( [ '--ks-type', 'PKCS11', '--provider-class', 'sun.security.pkcs11.SunPKCS11', '--provider-arg', 'opensc-fdroid.cfg', ], fdroidserver.common.get_apksigner_smartcardoptions( config['smartcardoptions'] ), ) def test_get_smartcardoptions_list(self): os.chdir(self.testdir) fdroidserver.common.write_config_file( textwrap.dedent( """ smartcardoptions: - -storetype - PKCS11 - -providerName - SunPKCS11-OpenSC - -providerClass - sun.security.pkcs11.SunPKCS11 - -providerArg - opensc-fdroid.cfg """ ) ) config = fdroidserver.common.read_config() fdroidserver.common.config = config self.assertTrue(isinstance(config['smartcardoptions'], list)) self.assertEqual( [ '-storetype', 'PKCS11', '-providerName', 'SunPKCS11-OpenSC', '-providerClass', 'sun.security.pkcs11.SunPKCS11', '-providerArg', 'opensc-fdroid.cfg', ], config['smartcardoptions'], ) def test_get_smartcardoptions_spaces(self): os.chdir(self.testdir) fdroidserver.common.write_config_file( textwrap.dedent( """ smartcardoptions: | -storetype PKCS11 -providerClass sun.security.pkcs11.SunPKCS11 -providerArg /etc/pkcs11_java.cfg """ ) ) config = fdroidserver.common.read_config() fdroidserver.common.config = config self.assertTrue(isinstance(config['smartcardoptions'], list)) self.assertEqual( [ '-storetype', 'PKCS11', '-providerClass', 'sun.security.pkcs11.SunPKCS11', '-providerArg', '/etc/pkcs11_java.cfg', ], config['smartcardoptions'], ) def test_load_localized_config(self): """It should load""" antiFeatures = fdroidserver.common.load_localized_config( ANTIFEATURES_CONFIG_NAME, 'repo' ) self.assertEqual( [ 'Ads', 'DisabledAlgorithm', 'KnownVuln', 'NSFW', 'NoSourceSince', 'NonFreeAdd', 'NonFreeAssets', 'NonFreeDep', 'NonFreeNet', 'Tracking', 'UpstreamNonFree', ], list(antiFeatures.keys()), ) self.assertEqual( ['de', 'en-US', 'fa', 'ro', 'zh-rCN'], list(antiFeatures['Ads']['description'].keys()), ) self.assertEqual( ['en-US'], list(antiFeatures['NoSourceSince']['description'].keys()), ) # it should have copied the icon files into place for v in antiFeatures.values(): p = Path(os.path.dirname(__file__) + '/repo' + v['icon']['en-US']['name']) self.assertTrue(p.exists()) def test_load_localized_config_categories(self): """It should load""" categories = fdroidserver.common.load_localized_config( CATEGORIES_CONFIG_NAME, 'repo' ) self.assertEqual( [ 'Time', 'Development', 'GuardianProject', 'Multimedia', 'Phone & SMS', 'Security', 'System', ], list(categories.keys()), ) self.assertEqual(['en-US'], list(categories['GuardianProject']['name'].keys())) def test_load_localized_config_0_file(self): os.chdir(self.testdir) os.mkdir('config') Path('config/categories.yml').write_text('') with self.assertRaises(TypeError): fdroidserver.common.load_localized_config(CATEGORIES_CONFIG_NAME, 'repo') def test_load_localized_config_string(self): os.chdir(self.testdir) os.mkdir('config') Path('config/categories.yml').write_text('this is a string') with self.assertRaises(TypeError): fdroidserver.common.load_localized_config(CATEGORIES_CONFIG_NAME, 'repo') def test_load_localized_config_list(self): os.chdir(self.testdir) os.mkdir('config') Path('config/categories.yml').write_text('- System') with self.assertRaises(TypeError): fdroidserver.common.load_localized_config(CATEGORIES_CONFIG_NAME, 'repo') def test_config_type_check_config_yml_dict(self): fdroidserver.common.config_type_check('config.yml', dict()) def test_config_type_check_config_yml_list(self): with self.assertRaises(TypeError): fdroidserver.common.config_type_check('config.yml', list()) def test_config_type_check_config_yml_set(self): with self.assertRaises(TypeError): fdroidserver.common.config_type_check('config.yml', set()) def test_config_type_check_config_yml_str(self): with self.assertRaises(TypeError): fdroidserver.common.config_type_check('config.yml', str()) def test_config_type_check_mirrors_list(self): fdroidserver.common.config_type_check('config/mirrors.yml', list()) def test_config_type_check_mirrors_dict(self): with self.assertRaises(TypeError): fdroidserver.common.config_type_check('config/mirrors.yml', dict()) def test_config_type_check_mirrors_set(self): with self.assertRaises(TypeError): fdroidserver.common.config_type_check('config/mirrors.yml', set()) def test_config_type_check_mirrors_str(self): with self.assertRaises(TypeError): fdroidserver.common.config_type_check('config/mirrors.yml', str()) def test_config_serverwebroot_str(self): os.chdir(self.testdir) fdroidserver.common.write_config_file( """serverwebroot: 'foo@example.com:/var/www'""" ) self.assertEqual( [{'url': 'foo@example.com:/var/www/'}], fdroidserver.common.read_config()['serverwebroot'], ) def test_config_serverwebroot_list(self): os.chdir(self.testdir) fdroidserver.common.write_config_file( """serverwebroot:\n - foo@example.com:/var/www""" ) self.assertEqual( [{'url': 'foo@example.com:/var/www/'}], fdroidserver.common.read_config()['serverwebroot'], ) def test_config_serverwebroot_dict(self): os.chdir(self.testdir) fdroidserver.common.write_config_file( """serverwebroot:\n - url: 'foo@example.com:/var/www'""" ) self.assertEqual( [{'url': 'foo@example.com:/var/www/'}], fdroidserver.common.read_config()['serverwebroot'], ) @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) def test_config_serverwebroot_list_of_dicts_env(self): os.chdir(self.testdir) url = 'foo@example.com:/var/www/' os.environ['serverwebroot'] = url fdroidserver.common.write_config_file( textwrap.dedent( """\ serverwebroot: - url: {env: serverwebroot} index_only: true """ ) ) self.assertEqual( [{'url': url, 'index_only': True}], fdroidserver.common.read_config()['serverwebroot'], ) def test_expand_env_dict_fake_str(self): testvalue = '"{env: foo}"' self.assertEqual(testvalue, fdroidserver.common.expand_env_dict(testvalue)) @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) def test_expand_env_dict_good(self): name = 'foo' value = 'bar' os.environ[name] = value self.assertEqual(value, fdroidserver.common.expand_env_dict({'env': name})) @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) def test_expand_env_dict_bad_dict(self): with self.assertRaises(TypeError): fdroidserver.common.expand_env_dict({'env': 'foo', 'foo': 'bar'}) def test_parse_list_of_dicts_str(self): s = 'foo@example.com:/var/www' mirrors = yaml.load("""'%s'""" % s) self.assertEqual( [{'url': s}], fdroidserver.common.parse_list_of_dicts(mirrors) ) def test_parse_list_of_dicts_list(self): s = 'foo@example.com:/var/www' mirrors = yaml.load("""- '%s'""" % s) self.assertEqual( [{'url': s}], fdroidserver.common.parse_list_of_dicts(mirrors) ) def test_parse_list_of_dicts_dict(self): s = 'foo@example.com:/var/www' mirrors = yaml.load("""- url: '%s'""" % s) self.assertEqual( [{'url': s}], fdroidserver.common.parse_list_of_dicts(mirrors) ) @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH'), 'foo': 'bar'}, clear=True) def test_parse_list_of_dicts_env_str(self): mirrors = yaml.load('{env: foo}') self.assertEqual( [{'url': 'bar'}], fdroidserver.common.parse_list_of_dicts(mirrors) ) def test_parse_list_of_dicts_env_list(self): s = 'foo@example.com:/var/www' mirrors = yaml.load("""- '%s'""" % s) self.assertEqual( [{'url': s}], fdroidserver.common.parse_list_of_dicts(mirrors) ) def test_parse_list_of_dicts_env_dict(self): s = 'foo@example.com:/var/www' mirrors = yaml.load("""- url: '%s'""" % s) self.assertEqual( [{'url': s}], fdroidserver.common.parse_list_of_dicts(mirrors) ) def test_KnownApks_recordapk(self): """Test that added dates are being fetched from the index. There are more related tests in tests/run-tests. """ now = datetime.now(timezone.utc) knownapks = fdroidserver.common.KnownApks() for apkName in knownapks.apks: knownapks.recordapk(apkName, default_date=now) for added in knownapks.apks.values(): self.assertNotEqual(added, now) def test_KnownApks_recordapk_new(self): """Test that new added dates work, and are not replaced later. There are more related tests in tests/run-tests. """ now = datetime.now(timezone.utc) knownapks = fdroidserver.common.KnownApks() fake_apk = 'fake.apk' knownapks.recordapk(fake_apk, default_date=now) for apk, added in knownapks.apks.items(): if apk == fake_apk: self.assertEqual(added, now) else: self.assertNotEqual(added, now) knownapks.recordapk(fake_apk, default_date=datetime.now(timezone.utc)) self.assertEqual(knownapks.apks[fake_apk], now) def test_get_mirrors_fdroidorg(self): mirrors = fdroidserver.common.get_mirrors( 'https://f-droid.org/repo', 'entry.jar' ) self.assertEqual( 'https://f-droid.org/repo/entry.jar', mirrors[0]['url'], ) def test_get_mirrors_other(self): self.assertEqual( [{'url': 'https://example.com/fdroid/repo/index-v2.json'}], fdroidserver.common.get_mirrors( 'https://example.com/fdroid/repo', 'index-v2.json' ), ) def test_append_filename_to_mirrors(self): filename = 'test.apk' url = 'https://example.com/fdroid/repo' mirrors = [{'url': url}] self.assertEqual( [{'url': url + '/' + filename}], fdroidserver.common.append_filename_to_mirrors(filename, mirrors), ) def test_append_filename_to_mirrors_full(self): filename = 'test.apk' mirrors = fdroidserver.common.FDROIDORG_MIRRORS for mirror in fdroidserver.common.append_filename_to_mirrors(filename, mirrors): self.assertTrue(mirror['url'].endswith('/' + filename)) APKS_WITH_JAR_SIGNATURES = ( ( 'SpeedoMeterApp.main_1.apk', '2e6b3126fb7e0db6a9d4c2a06df690620655454d6e152cf244cc9efe9787a77d', ), ( 'apk.embedded_1.apk', '764f0eaac0cdcde35023658eea865c4383ab580f9827c62fdd3daf9e654199ee', ), ( 'bad-unicode-πÇÇ现代通用字-български-عربي1.apk', '32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6', ), ( 'issue-1128-poc3a.apk', '1dbb8be012293e988a0820f7d455b07abd267d2c0b500fc793fcfd80141cb5ce', ), ( 'issue-1128-poc3b.apk', '1dbb8be012293e988a0820f7d455b07abd267d2c0b500fc793fcfd80141cb5ce', ), ( 'janus.apk', 'ebb0fedf1942a099b287c3db00ff732162152481abb2b6c7cbcdb2ba5894a768', ), ( 'org.bitbucket.tickytacky.mirrormirror_1.apk', 'feaa63df35b4635cf091513dfcd6d11209632555efdfc47e33b70d4e4eb5ba28', ), ( 'org.bitbucket.tickytacky.mirrormirror_2.apk', 'feaa63df35b4635cf091513dfcd6d11209632555efdfc47e33b70d4e4eb5ba28', ), ( 'org.bitbucket.tickytacky.mirrormirror_3.apk', 'feaa63df35b4635cf091513dfcd6d11209632555efdfc47e33b70d4e4eb5ba28', ), ( 'org.bitbucket.tickytacky.mirrormirror_4.apk', 'feaa63df35b4635cf091513dfcd6d11209632555efdfc47e33b70d4e4eb5ba28', ), ( 'org.dyndns.fules.ck_20.apk', '9326a2cc1a2f148202bc7837a0af3b81200bd37fd359c9e13a2296a71d342056', ), ( 'org.sajeg.fallingblocks_3.apk', '033389681f4288fdb3e72a28058c8506233ca50de75452ab6c9c76ea1ca2d70f', ), ( 'repo/com.example.test.helloworld_1.apk', 'c3a5ca5465a7585a1bda30218ae4017083605e3576867aa897d724208d99696c', ), ( 'repo/com.politedroid_3.apk', '32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6', ), ( 'repo/com.politedroid_4.apk', '32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6', ), ( 'repo/com.politedroid_5.apk', '32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6', ), ( 'repo/com.politedroid_6.apk', '32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6', ), ( 'repo/duplicate.permisssions_9999999.apk', '659e1fd284549f70d13fb02c620100e27eeea3420558cce62b0f5d4cf2b77d84', ), ( 'repo/info.zwanenburg.caffeinetile_4.apk', '51cfa5c8a743833ad89acf81cb755936876a5c8b8eca54d1ffdcec0cdca25d0e', ), ( 'repo/no.min.target.sdk_987.apk', '32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6', ), ( 'repo/obb.main.oldversion_1444412523.apk', '818e469465f96b704e27be2fee4c63ab9f83ddf30e7a34c7371a4728d83b0bc1', ), ( 'repo/obb.main.twoversions_1101613.apk', '32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6', ), ( 'repo/obb.main.twoversions_1101615.apk', '32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6', ), ( 'repo/obb.main.twoversions_1101617.apk', '32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6', ), ( 'repo/obb.mainpatch.current_1619.apk', '32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6', ), ( 'repo/obb.mainpatch.current_1619_another-release-key.apk', 'ce9e200667f02d96d49891a2e08a3c178870e91853d61bdd33ef5f0b54701aa5', ), ( 'repo/souch.smsbypass_9.apk', 'd3aec784b1fd71549fc22c999789122e3639895db6bd585da5835fbe3db6985c', ), ( 'repo/urzip-; Рахма́, [rɐxˈmanʲɪnəf] سيرجي_رخمانينوف 谢·.apk', '32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6', ), ( 'repo/v1.v2.sig_1020.apk', '32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6', ), ( 'urzip-release.apk', '32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6', ), ( 'urzip.apk', '7eabd8c15de883d1e82b5df2fd4f7f769e498078e9ad6dc901f0e96db77ceac3', ), ) APKS_WITHOUT_JAR_SIGNATURES = ( ( 'issue-1128-poc1.apk', # APK v3 Signature only '1dbb8be012293e988a0820f7d455b07abd267d2c0b500fc793fcfd80141cb5ce', ), ( 'issue-1128-poc2.apk', # APK v3 Signature only '1dbb8be012293e988a0820f7d455b07abd267d2c0b500fc793fcfd80141cb5ce', ), ( 'issue-1128-min-sdk-30-poc.apk', # APK v3 Signature only '09350d5f3460a8a0ea5cf6b68ccd296a58754f7e683ba6aa08c19be8353504f3', ), ( 'v2.only.sig_2.apk', '32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6', ), ) class SignerExtractionTest(unittest.TestCase): """Test extraction of the signer certificate from JARs and APKs These fingerprints can be confirmed with: apksigner verify --print-certs foo.apk | grep SHA-256 keytool -printcert -file ____.RSA """ def setUp(self): os.chdir(basedir) self._td = mkdtemp() self.testdir = self._td.name self.apksigner = shutil.which('apksigner') self.keytool = shutil.which('keytool') def tearDown(self): self._td.cleanup() @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_get_first_signer_certificate_with_jars(self): for jar in ( 'signindex/guardianproject-v1.jar', 'signindex/guardianproject.jar', 'signindex/testy.jar', ): outdir = os.path.join(self.testdir, jar[:-4].replace('/', '_')) os.mkdir(outdir) fdroidserver.common.apk_extract_signatures(jar, outdir) certs = glob.glob(os.path.join(outdir, '*.RSA')) with open(certs[0], 'rb') as fp: self.assertEqual( fdroidserver.common.get_certificate(fp.read()), fdroidserver.common.get_first_signer_certificate(jar), ) @unittest.skip("slow and only needed when adding to APKS_WITH_JAR_SIGNATURES") def test_vs_keytool(self): if not self.keytool: self.skipTest('requires keytool to run') pat = re.compile(r'[0-9A-F:]{95}') cmd = [self.keytool, '-printcert', '-jarfile'] for apk, fingerprint in APKS_WITH_JAR_SIGNATURES: o = subprocess.check_output(cmd + [apk], text=True) try: self.assertEqual( fingerprint, pat.search(o).group().replace(':', '').lower(), ) except AttributeError as e: print(e, o) @unittest.skip("slow and only needed when adding to APKS_WITH_JAR_SIGNATURES") def test_vs_apksigner(self): if not self.apksigner: self.skipTest('requires apksigner to run') pat = re.compile(r'\s[0-9a-f]{64}\s') cmd = [self.apksigner, 'verify', '--print-certs'] for apk, fingerprint in APKS_WITH_JAR_SIGNATURES + APKS_WITHOUT_JAR_SIGNATURES: output = subprocess.check_output(cmd + [apk], text=True) self.assertEqual( fingerprint, pat.search(output).group().strip(), apk + " should have matching signer fingerprints", ) @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_apk_signer_fingerprint_with_v1_apks(self): for apk, fingerprint in APKS_WITH_JAR_SIGNATURES: self.assertEqual( fingerprint, fdroidserver.common.apk_signer_fingerprint(apk), f'apk_signer_fingerprint should match stored fingerprint for {apk}', ) @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_apk_signer_fingerprint_without_v1_apks(self): for apk, fingerprint in APKS_WITHOUT_JAR_SIGNATURES: self.assertEqual( fingerprint, fdroidserver.common.apk_signer_fingerprint(apk), f'apk_signer_fingerprint should match stored fingerprint for {apk}', ) @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_get_first_signer_certificate_with_unsigned_jar(self): self.assertIsNone( fdroidserver.common.get_first_signer_certificate('signindex/unsigned.jar') ) def test_apk_extract_fingerprint(self): """Test extraction of JAR signatures (does not cover APK v2+ extraction).""" for apk, fingerprint in APKS_WITH_JAR_SIGNATURES: outdir = os.path.join(self.testdir, apk[:-4].replace('/', '_')) os.mkdir(outdir) try: fdroidserver.common.apk_extract_signatures(apk, outdir) except fdroidserver.apksigcopier.APKSigCopierError: # nothing to test here when this error is thrown continue v1_certs = [str(cert) for cert in Path(outdir).glob('*.[DR]SA')] cert = fdroidserver.common.get_certificate( signature_block_file=Path(v1_certs[0]).read_bytes(), signature_file=Path(v1_certs[0][:-4] + '.SF').read_bytes(), ) self.assertEqual( fingerprint, fdroidserver.common.signer_fingerprint(cert), ) apkobject = fdroidserver.common.get_androguard_APK(apk, skip_analysis=True) v2_certs = apkobject.get_certificates_der_v2() if v2_certs: if v1_certs: self.assertEqual(len(v1_certs), len(v2_certs)) self.assertEqual( fingerprint, fdroidserver.common.signer_fingerprint(v2_certs[0]), ) v3_certs = apkobject.get_certificates_der_v3() if v3_certs: if v2_certs: self.assertEqual(len(v2_certs), len(v3_certs)) self.assertEqual( fingerprint, fdroidserver.common.signer_fingerprint(v3_certs[0]), ) def test_signature_block_file_regex(self): for apkpath, fingerprint in APKS_WITH_JAR_SIGNATURES: with ZipFile(apkpath, 'r') as apk: cert_files = [ n for n in apk.namelist() if fdroidserver.common.SIGNATURE_BLOCK_FILE_REGEX.match(n) ] self.assertEqual(1, len(cert_files)) def test_signature_block_file_regex_malicious(self): apkpath = os.path.join(self.testdir, 'malicious.apk') with ZipFile(apkpath, 'w') as apk: apk.writestr('META-INF/MANIFEST.MF', 'this is fake sig data') apk.writestr('META-INF/CERT.SF\n', 'this is fake sig data') apk.writestr('META-INF/AFTER.SF', 'this is fake sig data') apk.writestr('META-INF/CERT.RSA\n', 'this is fake sig data') apk.writestr('META-INF/AFTER.RSA', 'this is fake sig data') with ZipFile(apkpath, 'r') as apk: self.assertEqual( ['META-INF/AFTER.RSA'], [ n for n in apk.namelist() if fdroidserver.common.SIGNATURE_BLOCK_FILE_REGEX.match(n) ], ) class IgnoreApksignerV33Test(SetUpTearDownMixin, unittest.TestCase): """apksigner v33 should be entirely ignored https://gitlab.com/fdroid/fdroidserver/-/issues/1253 """ BAD_VERSIONS = [ '33.0.0-rc1', '33.0.0-rc2', '33.0.0-rc3', '33.0.0-rc4', '33.0.0', '33.0.1', '33.0.2', '33.0.3', ] def setUp(self): super().setUp() self.config = {'sdk_path': self.testdir} def _create_fake_build_tools(self, version): for v in self.BAD_VERSIONS + [version]: apksigner = os.path.join(self.testdir, 'build-tools', v, 'apksigner') os.makedirs(os.path.dirname(apksigner)) with open(apksigner, 'w') as fp: fp.write(f'#!/bin/sh\necho {v}[\n') os.chmod(apksigner, 0o0755) # nosec B103 def test_find_apksigner_choose_version_32_over_any_33(self): good = '32.0.0' self._create_fake_build_tools(good) with mock.patch.dict(os.environ, clear=True): os.environ['PATH'] = '/fake/path/to/avoid/conflicts' fdroidserver.common.find_apksigner(self.config) self.assertEqual( os.path.join(self.testdir, 'build-tools', good, 'apksigner'), self.config.get('apksigner'), ) def test_find_apksigner_choose_no_version_over_any_33(self): """apksigner v33 should be entirely ignored""" self._create_fake_build_tools('29.0.0') # too old a version with mock.patch.dict(os.environ, clear=True): os.environ['PATH'] = '/fake/path/to/avoid/conflicts' fdroidserver.common.find_apksigner(self.config) self.assertIsNone(self.config.get('apksigner')) class ConfigOptionsScopeTest(unittest.TestCase): """Test assumptions about variable scope for "config" and "options". The ancient architecture of config and options in fdroidserver has weird issues around unexpected scope, like there are cases where the global config is not the same as the module-level config, and more. This is about describing what is happening, it is not about documenting behaviors that are good design. The config and options handling should really be refactored into a well-known, workable Pythonic pattern. """ def setUp(self): # these are declared as None at the top of the module file fdroidserver.common.config = None fdroidserver.common.options = None def tearDown(self): fdroidserver.common.config = None fdroidserver.common.options = None if 'config' in globals(): global config del config if 'options' in globals(): global options del options def test_parse_args(self): """Test that options is properly set up at the module-level and not global.""" self.assertFalse('options' in globals()) self.assertIsNone(fdroidserver.common.options) parser = ArgumentParser() fdroidserver.common.setup_global_opts(parser) with mock.patch('sys.argv', ['$0']): o = fdroidserver.common.parse_args(parser) self.assertEqual(o, fdroidserver.common.options) # No function should set options as a global, and the global # keyword does not create the variable. global options with self.assertRaises(NameError): options self.assertFalse('options' in globals()) def test_parse_args_without_args(self): """Test that the parsing function works fine when there are no args.""" parser = ArgumentParser() fdroidserver.common.setup_global_opts(parser) with mock.patch('sys.argv', ['$0']): o = fdroidserver.common.parse_args(parser) self.assertFalse(o.verbose) def test_parse_args_with_args(self): parser = ArgumentParser() fdroidserver.common.setup_global_opts(parser) with mock.patch('sys.argv', ['$0', '-v']): o = fdroidserver.common.parse_args(parser) self.assertTrue(o.verbose) def test_get_config(self): """Show how the module-level variables are initialized.""" self.assertTrue('config' not in vars() and 'config' not in globals()) self.assertIsNone(fdroidserver.common.config) config = fdroidserver.common.read_config() self.assertIsNotNone(fdroidserver.common.config) self.assertEqual(dict, type(config)) self.assertEqual(config, fdroidserver.common.config) def test_get_config_global(self): """Test assumptions about variable scope using global keyword.""" global config self.assertTrue('config' not in vars() and 'config' not in globals()) self.assertIsNone(fdroidserver.common.config) c = fdroidserver.common.read_config() self.assertIsNotNone(fdroidserver.common.config) self.assertEqual(dict, type(c)) self.assertEqual(c, fdroidserver.common.config) self.assertTrue( 'config' not in vars() and 'config' not in globals(), "The config should not be set in the global context, only module-level.", ) class UnsafePermissionsTest(SetUpTearDownMixin, unittest.TestCase): def setUp(self): config = dict() fdroidserver.common.find_apksigner(config) if not config.get('apksigner'): self.skipTest('SKIPPING, apksigner not installed!') super().setUp() os.chdir(self.testdir) fdroidserver.common.write_config_file('keypass: {env: keypass}') os.chmod(fdroidserver.common.CONFIG_FILE, 0o666) # nosec B103 def test_config_perm_no_warning(self): fdroidserver.common.write_config_file('keystore: foo.jks') with self.assertNoLogs(level=logging.WARNING): fdroidserver.common.read_config() def test_config_perm_keypass_warning(self): fdroidserver.common.write_config_file('keypass: supersecret') with self.assertLogs(level=logging.WARNING) as lw: fdroidserver.common.read_config() self.assertTrue('unsafe' in lw.output[0]) @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) def test_config_perm_env_warning(self): os.environ['keypass'] = 'supersecret' fdroidserver.common.write_config_file('keypass: {env: keypass}') with self.assertLogs(level=logging.WARNING) as lw: fdroidserver.common.read_config() self.assertTrue('unsafe' in lw.output[0]) self.assertEqual(1, len(lw.output)) @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) def test_config_perm_unset_env_no_warning(self): fdroidserver.common.write_config_file('keypass: {env: keypass}') with self.assertLogs(level=logging.WARNING) as lw: fdroidserver.common.read_config() self.assertTrue('unsafe' not in lw.output[0]) self.assertEqual(1, len(lw.output)) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/tests/test_deploy.py0000755000175000017500000016465614770502071017016 0ustar00hanshans#!/usr/bin/env python3 import configparser import os import shutil import tempfile import unittest from pathlib import Path from unittest import mock import git import fdroidserver from .shared_test_code import TmpCwd, mkdtemp, VerboseFalseOptions basedir = Path(__file__).parent class DeployTest(unittest.TestCase): '''fdroidserver/deploy.py''' def setUp(self): os.chdir(basedir) self._td = mkdtemp() self.testdir = self._td.name fdroidserver.common.options = mock.Mock() fdroidserver.deploy.config = {} fdroidserver.deploy.USER_RCLONE_CONF = False def tearDown(self): self._td.cleanup() def test_update_serverwebroots_bad_None(self): with self.assertRaises(TypeError): fdroidserver.deploy.update_serverwebroots(None, 'repo') def test_update_serverwebroots_bad_int(self): with self.assertRaises(TypeError): fdroidserver.deploy.update_serverwebroots(9, 'repo') def test_update_serverwebroots_bad_float(self): with self.assertRaises(TypeError): fdroidserver.deploy.update_serverwebroots(1.0, 'repo') def test_update_serverwebroots(self): """rsync works with file paths, so this test uses paths for the URLs""" os.chdir(self.testdir) repo = Path('repo') repo.mkdir() fake_apk = repo / 'fake.apk' with fake_apk.open('w') as fp: fp.write('not an APK, but has the right filename') url0 = Path('url0/fdroid') url0.mkdir(parents=True) url1 = Path('url1/fdroid') url1.mkdir(parents=True) # setup parameters for this test run fdroidserver.common.options.identity_file = None fdroidserver.deploy.config['make_current_version_link'] = False dest_apk0 = url0 / fake_apk dest_apk1 = url1 / fake_apk self.assertFalse(dest_apk0.is_file()) self.assertFalse(dest_apk1.is_file()) fdroidserver.deploy.update_serverwebroots( [ {'url': str(url0)}, {'url': str(url1)}, ], str(repo), ) self.assertTrue(dest_apk0.is_file()) self.assertTrue(dest_apk1.is_file()) def test_update_serverwebroots_url_does_not_end_with_fdroid(self): with self.assertRaises(SystemExit): fdroidserver.deploy.update_serverwebroots([{'url': 'url'}], 'repo') def test_update_serverwebroots_bad_ssh_url(self): with self.assertRaises(SystemExit): fdroidserver.deploy.update_serverwebroots( [{'url': 'f@b.ar::/path/to/fdroid'}], 'repo' ) def test_update_serverwebroots_unsupported_ssh_url(self): with self.assertRaises(SystemExit): fdroidserver.deploy.update_serverwebroots([{'url': 'ssh://nope'}], 'repo') @unittest.skipUnless(shutil.which('rclone'), '/usr/bin/rclone') def test_update_remote_storage_with_rclone(self): os.chdir(self.testdir) repo = Path('repo') repo.mkdir(parents=True, exist_ok=True) fake_apk = repo / 'another_fake.apk' with fake_apk.open('w') as fp: fp.write('not an APK, but has the right filename') fake_index = repo / fdroidserver.common.INDEX_FILES[0] with fake_index.open('w') as fp: fp.write('not an index, but has the right filename') # write out rclone config for test use rclone_config = configparser.ConfigParser() rclone_config.add_section("test-local-config") rclone_config.set("test-local-config", "type", "local") rclone_config_path = Path('rclone_config_path') rclone_config_path.mkdir(parents=True, exist_ok=True) rclone_file = rclone_config_path / 'rclone.conf' with open(rclone_file, 'w') as configfile: rclone_config.write(configfile) # setup parameters for this test run fdroidserver.deploy.config['awsbucket'] = 'test_bucket_folder' fdroidserver.deploy.config['rclone'] = True fdroidserver.deploy.config['rclone_config'] = 'test-local-config' fdroidserver.deploy.config['path_to_custom_rclone_config'] = str(rclone_file) fdroidserver.common.options = VerboseFalseOptions # write out destination path destination = Path('test_bucket_folder/fdroid') destination.mkdir(parents=True, exist_ok=True) dest_apk = Path(destination) / fake_apk dest_index = Path(destination) / fake_index self.assertFalse(dest_apk.is_file()) self.assertFalse(dest_index.is_file()) repo_section = str(repo) # fdroidserver.deploy.USER_RCLONE_CONF = str(rclone_file) fdroidserver.deploy.update_remote_storage_with_rclone(repo_section) self.assertTrue(dest_apk.is_file()) self.assertTrue(dest_index.is_file()) @unittest.skipUnless(shutil.which('rclone'), '/usr/bin/rclone') def test_update_remote_storage_with_rclone_in_index_only_mode(self): os.chdir(self.testdir) repo = Path('repo') repo.mkdir(parents=True, exist_ok=True) fake_apk = repo / 'another_fake.apk' with fake_apk.open('w') as fp: fp.write('not an APK, but has the right filename') fake_index = repo / fdroidserver.common.INDEX_FILES[0] with fake_index.open('w') as fp: fp.write('not an index, but has the right filename') # write out rclone config for test use rclone_config = configparser.ConfigParser() rclone_config.add_section("test-local-config") rclone_config.set("test-local-config", "type", "local") rclone_config_path = Path('rclone_config_path') rclone_config_path.mkdir(parents=True, exist_ok=True) rclone_file = rclone_config_path / 'rclone.conf' with open(rclone_file, 'w') as configfile: rclone_config.write(configfile) # setup parameters for this test run fdroidserver.deploy.config['awsbucket'] = 'test_bucket_folder' fdroidserver.deploy.config['rclone'] = True fdroidserver.deploy.config['rclone_config'] = 'test-local-config' fdroidserver.deploy.config['path_to_custom_rclone_config'] = str(rclone_file) fdroidserver.common.options = VerboseFalseOptions # write out destination path destination = Path('test_bucket_folder/fdroid') destination.mkdir(parents=True, exist_ok=True) dest_apk = Path(destination) / fake_apk dest_index = Path(destination) / fake_index self.assertFalse(dest_apk.is_file()) self.assertFalse(dest_index.is_file()) repo_section = str(repo) # fdroidserver.deploy.USER_RCLONE_CONF = str(rclone_file) fdroidserver.deploy.update_remote_storage_with_rclone( repo_section, is_index_only=True ) self.assertFalse(dest_apk.is_file()) self.assertTrue(dest_index.is_file()) @mock.patch('subprocess.call') @mock.patch('subprocess.check_output', lambda cmd, text: '/path/to/rclone.conf') def test_update_remote_storage_with_rclone_mock(self, mock_call): def _mock_subprocess_call(cmd): self.assertEqual( cmd, [ 'rclone', 'sync', 'repo', 'test_local_config:test_bucket_folder/fdroid/repo', ], ) return 0 mock_call.side_effect = _mock_subprocess_call fdroidserver.deploy.config = { 'awsbucket': 'test_bucket_folder', 'rclone': True, 'rclone_config': 'test_local_config', } fdroidserver.deploy.update_remote_storage_with_rclone('repo') mock_call.assert_called_once() def test_update_serverwebroot(self): """rsync works with file paths, so this test uses paths for the URLs""" os.chdir(self.testdir) repo = Path('repo') repo.mkdir(parents=True) fake_apk = repo / 'fake.apk' with fake_apk.open('w') as fp: fp.write('not an APK, but has the right filename') fake_index = repo / fdroidserver.common.INDEX_FILES[0] with fake_index.open('w') as fp: fp.write('not an index, but has the right filename') url = Path('url') url.mkdir() # setup parameters for this test run fdroidserver.common.options = mock.Mock() fdroidserver.common.options.identity_file = None fdroidserver.common.options.identity_file = None fdroidserver.deploy.config['make_current_version_link'] = False dest_apk = Path(url) / fake_apk dest_index = Path(url) / fake_index self.assertFalse(dest_apk.is_file()) self.assertFalse(dest_index.is_file()) fdroidserver.deploy.update_serverwebroot({'url': str(url)}, 'repo') self.assertTrue(dest_apk.is_file()) self.assertTrue(dest_index.is_file()) def test_update_serverwebroot_in_index_only_mode(self): os.chdir(self.testdir) repo = Path('repo') repo.mkdir() fake_apk = repo / 'fake.apk' with fake_apk.open('w') as fp: fp.write('not an APK, but has the right filename') fake_index = repo / fdroidserver.common.INDEX_FILES[0] with fake_index.open('w') as fp: fp.write('not an index, but has the right filename') url = Path('url') url.mkdir() # setup parameters for this test run fdroidserver.common.options = mock.Mock() fdroidserver.common.options.identity_file = None fdroidserver.deploy.config['make_current_version_link'] = False dest_apk = Path(url) / fake_apk dest_index = Path(url) / fake_index self.assertFalse(dest_apk.is_file()) self.assertFalse(dest_index.is_file()) fdroidserver.deploy.update_serverwebroot( {'url': str(url), 'index_only': True}, 'repo' ) self.assertFalse(dest_apk.is_file()) self.assertTrue(dest_index.is_file()) @mock.patch.dict(os.environ, clear=True) def test_update_serverwebroot_no_rsync_error(self): os.environ['PATH'] = self.testdir os.chdir(self.testdir) with self.assertRaises(fdroidserver.exception.FDroidException): fdroidserver.deploy.update_serverwebroot('serverwebroot', 'repo') def test_update_serverwebroot_make_cur_version_link(self): self.maxDiff = None # setup parameters for this test run fdroidserver.common.options = mock.Mock() fdroidserver.common.options.no_checksum = True fdroidserver.common.options.identity_file = None fdroidserver.common.options.verbose = False fdroidserver.common.options.quiet = True fdroidserver.common.options.index_only = False fdroidserver.deploy.config = {'make_current_version_link': True} url = "example.com:/var/www/fdroid" repo_section = 'repo' # setup function for asserting subprocess.call invocations call_iteration = 0 def update_server_webroot_call(cmd): nonlocal call_iteration if call_iteration == 0: self.assertListEqual( cmd, [ 'rsync', '--archive', '--delete-after', '--safe-links', '--quiet', '--exclude', 'repo/altstore-index.json', '--exclude', 'repo/altstore-index.json.asc', '--exclude', 'repo/entry.jar', '--exclude', 'repo/entry.json', '--exclude', 'repo/entry.json.asc', '--exclude', 'repo/index-v1.jar', '--exclude', 'repo/index-v1.json', '--exclude', 'repo/index-v1.json.asc', '--exclude', 'repo/index-v2.json', '--exclude', 'repo/index-v2.json.asc', '--exclude', 'repo/index.css', '--exclude', 'repo/index.html', '--exclude', 'repo/index.jar', '--exclude', 'repo/index.png', '--exclude', 'repo/index.xml', '--exclude', 'repo/signer-index.jar', '--exclude', 'repo/signer-index.json', '--exclude', 'repo/signer-index.json.asc', 'repo', 'example.com:/var/www/fdroid', ], ) elif call_iteration == 1: self.assertListEqual( cmd, [ 'rsync', '--archive', '--delete-after', '--safe-links', '--quiet', 'repo', url, ], ) elif call_iteration == 2: self.assertListEqual( cmd, [ 'rsync', '--archive', '--delete-after', '--safe-links', '--quiet', 'Sym.apk', 'Sym.apk.asc', 'Sym.apk.sig', 'example.com:/var/www/fdroid', ], ) else: self.fail('unexpected subprocess.call invocation') call_iteration += 1 return 0 with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): os.mkdir('repo') os.symlink('repo/com.example.sym.apk', 'Sym.apk') os.symlink('repo/com.example.sym.apk.asc', 'Sym.apk.asc') os.symlink('repo/com.example.sym.apk.sig', 'Sym.apk.sig') with mock.patch('subprocess.call', side_effect=update_server_webroot_call): fdroidserver.deploy.update_serverwebroot({'url': url}, repo_section) self.assertEqual(call_iteration, 3, 'expected 3 invocations of subprocess.call') def test_update_serverwebroot_make_cur_version_link_in_index_only_mode(self): # setup parameters for this test run fdroidserver.common.options = mock.Mock() fdroidserver.common.options.no_checksum = True fdroidserver.common.options.identity_file = None fdroidserver.common.options.verbose = False fdroidserver.common.options.quiet = True fdroidserver.common.options.identity_file = None fdroidserver.deploy.config['make_current_version_link'] = True url = "example.com:/var/www/fdroid" repo_section = 'repo' # setup function for asserting subprocess.call invocations call_iteration = 0 def update_server_webroot_call(cmd): nonlocal call_iteration if call_iteration == 0: self.assertListEqual( cmd, [ 'rsync', '--archive', '--delete-after', '--safe-links', '--quiet', 'repo/altstore-index.json', 'repo/altstore-index.json.asc', 'repo/entry.jar', 'repo/entry.json', 'repo/entry.json.asc', 'repo/index-v1.jar', 'repo/index-v1.json', 'repo/index-v1.json.asc', 'repo/index-v2.json', 'repo/index-v2.json.asc', 'repo/index.css', 'repo/index.html', 'repo/index.jar', 'repo/index.png', 'repo/index.xml', 'repo/signer-index.jar', 'repo/signer-index.json', 'repo/signer-index.json.asc', 'example.com:/var/www/fdroid/repo/', ], ) elif call_iteration == 1: self.assertListEqual( cmd, [ 'rsync', '--archive', '--delete-after', '--safe-links', '--quiet', 'repo', url, ], ) elif call_iteration == 2: self.assertListEqual( cmd, [ 'rsync', '--archive', '--delete-after', '--safe-links', '--quiet', 'Sym.apk', 'Sym.apk.asc', 'Sym.apk.sig', 'example.com:/var/www/fdroid', ], ) else: self.fail('unexpected subprocess.call invocation') call_iteration += 1 return 0 with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): os.mkdir(repo_section) os.symlink('repo/com.example.sym.apk', 'Sym.apk') os.symlink('repo/com.example.sym.apk.asc', 'Sym.apk.asc') os.symlink('repo/com.example.sym.apk.sig', 'Sym.apk.sig') fake_files = fdroidserver.common.INDEX_FILES for filename in fake_files: fake_file = Path(repo_section) / filename with fake_file.open('w') as fp: fp.write('not a real one, but has the right filename') with mock.patch('subprocess.call', side_effect=update_server_webroot_call): fdroidserver.deploy.update_serverwebroot( {'url': url, 'index_only': True}, repo_section ) self.assertEqual(call_iteration, 1, 'expected 1 invocations of subprocess.call') def test_update_serverwebroot_with_id_file(self): # setup parameters for this test run fdroidserver.common.options = mock.Mock() fdroidserver.common.options.identity_file = None fdroidserver.common.options.no_checksum = True fdroidserver.common.options.verbose = True fdroidserver.common.options.quiet = False fdroidserver.common.options.identity_file = None fdroidserver.common.options.index_only = False fdroidserver.deploy.config = {'identity_file': './id_rsa'} url = "example.com:/var/www/fdroid" repo_section = 'archive' # setup function for asserting subprocess.call invocations call_iteration = 0 def update_server_webroot_call(cmd): nonlocal call_iteration if call_iteration == 0: self.assertListEqual( cmd, [ 'rsync', '--archive', '--delete-after', '--safe-links', '--verbose', '-e', 'ssh -oBatchMode=yes -oIdentitiesOnly=yes -i ' + fdroidserver.deploy.config['identity_file'], '--exclude', 'archive/altstore-index.json', '--exclude', 'archive/altstore-index.json.asc', '--exclude', 'archive/entry.jar', '--exclude', 'archive/entry.json', '--exclude', 'archive/entry.json.asc', '--exclude', 'archive/index-v1.jar', '--exclude', 'archive/index-v1.json', '--exclude', 'archive/index-v1.json.asc', '--exclude', 'archive/index-v2.json', '--exclude', 'archive/index-v2.json.asc', '--exclude', 'archive/index.css', '--exclude', 'archive/index.html', '--exclude', 'archive/index.jar', '--exclude', 'archive/index.png', '--exclude', 'archive/index.xml', 'archive', url, ], ) elif call_iteration == 1: self.assertListEqual( cmd, [ 'rsync', '--archive', '--delete-after', '--safe-links', '--verbose', '-e', 'ssh -oBatchMode=yes -oIdentitiesOnly=yes -i ' + fdroidserver.deploy.config['identity_file'], 'archive', url, ], ) else: self.fail('unexpected subprocess.call invocation') call_iteration += 1 return 0 with mock.patch('subprocess.call', side_effect=update_server_webroot_call): fdroidserver.deploy.update_serverwebroot({'url': url}, repo_section) self.assertEqual(call_iteration, 2, 'expected 2 invocations of subprocess.call') def test_update_serverwebroot_with_id_file_in_index_only_mode(self): # setup parameters for this test run fdroidserver.common.options = mock.Mock() fdroidserver.common.options.no_chcksum = False fdroidserver.common.options.verbose = True fdroidserver.common.options.quiet = False fdroidserver.common.options.identity_file = None fdroidserver.deploy.config['identity_file'] = './id_rsa' fdroidserver.deploy.config['make_current_version_link'] = False url = "example.com:/var/www/fdroid" repo_section = 'archive' # setup function for asserting subprocess.call invocations call_iteration = 0 def update_server_webroot_call(cmd): nonlocal call_iteration if call_iteration == 0: self.assertListEqual( cmd, [ 'rsync', '--archive', '--delete-after', '--safe-links', '--verbose', '-e', 'ssh -oBatchMode=yes -oIdentitiesOnly=yes -i ' + fdroidserver.deploy.config['identity_file'], 'archive/altstore-index.json', 'archive/altstore-index.json.asc', 'archive/entry.jar', 'archive/entry.json', 'archive/entry.json.asc', 'archive/index-v1.jar', 'archive/index-v1.json', 'archive/index-v1.json.asc', 'archive/index-v2.json', 'archive/index-v2.json.asc', 'archive/index.css', 'archive/index.html', 'archive/index.jar', 'archive/index.png', 'archive/index.xml', "example.com:/var/www/fdroid/archive/", ], ) elif call_iteration == 1: self.assertListEqual( cmd, [ 'rsync', '--archive', '--delete-after', '--safe-links', '--verbose', '-e', 'ssh -oBatchMode=yes -oIdentitiesOnly=yes -i ' + fdroidserver.deploy.config['identity_file'], "example.com:/var/www/fdroid/archive/", ], ) else: self.fail('unexpected subprocess.call invocation') call_iteration += 1 return 0 with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): with mock.patch('subprocess.call', side_effect=update_server_webroot_call): os.mkdir(repo_section) fake_files = fdroidserver.common.INDEX_FILES for filename in fake_files: fake_file = Path(repo_section) / filename with fake_file.open('w') as fp: fp.write('not a real one, but has the right filename') fdroidserver.deploy.update_serverwebroot( {'url': url, 'index_only': True}, repo_section ) self.assertEqual(call_iteration, 1, 'expected 1 invocations of subprocess.call') @unittest.skipIf( not os.getenv('VIRUSTOTAL_API_KEY'), 'VIRUSTOTAL_API_KEY is not set' ) def test_upload_to_virustotal(self): fdroidserver.common.options = mock.Mock() fdroidserver.common.options.verbose = True virustotal_apikey = os.getenv('VIRUSTOTAL_API_KEY') fdroidserver.deploy.upload_to_virustotal('repo', virustotal_apikey) def test_remote_hostname_regex(self): for remote_url, name in ( ('git@github.com:guardianproject/fdroid-repo', 'github'), ('git@gitlab.com:guardianproject/fdroid-repo', 'gitlab'), ('https://github.com:guardianproject/fdroid-repo', 'github'), ('https://gitlab.com/guardianproject/fdroid-repo', 'gitlab'), ('https://salsa.debian.org/foo/repo', 'salsa'), ): self.assertEqual( name, fdroidserver.deploy.REMOTE_HOSTNAME_REGEX.sub(r'\1', remote_url) ) def test_update_awsbucket_s3cmd(self): # setup parameters for this test run fdroidserver.common.options = mock.Mock() fdroidserver.common.options.no_checksum = True fdroidserver.common.options.verbose = False fdroidserver.common.options.quiet = True config = {} fdroidserver.common.fill_config_defaults(config) fdroidserver.deploy.config = config fdroidserver.deploy.config["awsbucket"] = "bucket" fdroidserver.deploy.config["awsaccesskeyid"] = "accesskeyid" fdroidserver.deploy.config["awssecretkey"] = "secretkey" fdroidserver.deploy.config["s3cmd"] = "s3cmd" repo_section = 'repo' # setup function for asserting subprocess.call invocations call_iteration = 0 def update_awsbucket_s3cmd_call(cmd): nonlocal call_iteration if call_iteration == 0: self.assertListEqual( cmd, [ 's3cmd', f"--config={fdroidserver.deploy.AUTO_S3CFG}", 'info', f"s3://{fdroidserver.deploy.config['awsbucket']}", ], ) elif call_iteration == 1: self.assertListEqual( cmd, [ 's3cmd', f"--config={fdroidserver.deploy.AUTO_S3CFG}", 'sync', '--acl-public', '--quiet', '--exclude', 'repo/altstore-index.json', '--exclude', 'repo/altstore-index.json.asc', '--exclude', 'repo/entry.jar', '--exclude', 'repo/entry.json', '--exclude', 'repo/entry.json.asc', '--exclude', 'repo/index-v1.jar', '--exclude', 'repo/index-v1.json', '--exclude', 'repo/index-v1.json.asc', '--exclude', 'repo/index-v2.json', '--exclude', 'repo/index-v2.json.asc', '--exclude', 'repo/index.css', '--exclude', 'repo/index.html', '--exclude', 'repo/index.jar', '--exclude', 'repo/index.png', '--exclude', 'repo/index.xml', '--exclude', 'repo/signer-index.jar', '--exclude', 'repo/signer-index.json', '--exclude', 'repo/signer-index.json.asc', '--no-check-md5', '--skip-existing', repo_section, f"s3://{fdroidserver.deploy.config['awsbucket']}/fdroid/", ], ) elif call_iteration == 2: self.assertListEqual( cmd, [ 's3cmd', f"--config={fdroidserver.deploy.AUTO_S3CFG}", 'sync', '--acl-public', '--quiet', '--exclude', 'repo/altstore-index.json', '--exclude', 'repo/altstore-index.json.asc', '--exclude', 'repo/entry.jar', '--exclude', 'repo/entry.json', '--exclude', 'repo/entry.json.asc', '--exclude', 'repo/index-v1.jar', '--exclude', 'repo/index-v1.json', '--exclude', 'repo/index-v1.json.asc', '--exclude', 'repo/index-v2.json', '--exclude', 'repo/index-v2.json.asc', '--exclude', 'repo/index.css', '--exclude', 'repo/index.html', '--exclude', 'repo/index.jar', '--exclude', 'repo/index.png', '--exclude', 'repo/index.xml', '--exclude', 'repo/signer-index.jar', '--exclude', 'repo/signer-index.json', '--exclude', 'repo/signer-index.json.asc', '--no-check-md5', repo_section, f"s3://{fdroidserver.deploy.config['awsbucket']}/fdroid/", ], ) elif call_iteration == 3: self.assertListEqual( cmd, [ 's3cmd', f"--config={fdroidserver.deploy.AUTO_S3CFG}", 'sync', '--acl-public', '--quiet', '--delete-removed', '--delete-after', '--no-check-md5', repo_section, f"s3://{fdroidserver.deploy.config['awsbucket']}/fdroid/", ], ) else: self.fail('unexpected subprocess.call invocation') call_iteration += 1 return 0 with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): os.mkdir('repo') os.symlink('repo/com.example.sym.apk', 'Sym.apk') os.symlink('repo/com.example.sym.apk.asc', 'Sym.apk.asc') os.symlink('repo/com.example.sym.apk.sig', 'Sym.apk.sig') with mock.patch('subprocess.call', side_effect=update_awsbucket_s3cmd_call): fdroidserver.deploy.update_awsbucket_s3cmd(repo_section) self.assertEqual(call_iteration, 4, 'expected 4 invocations of subprocess.call') def test_update_awsbucket_s3cmd_in_index_only_mode(self): # setup parameters for this test run fdroidserver.common.options = mock.Mock() fdroidserver.common.options.no_checksum = True fdroidserver.common.options.verbose = False fdroidserver.common.options.quiet = True config = {} fdroidserver.common.fill_config_defaults(config) fdroidserver.deploy.config = config fdroidserver.deploy.config["awsbucket"] = "bucket" fdroidserver.deploy.config["awsaccesskeyid"] = "accesskeyid" fdroidserver.deploy.config["awssecretkey"] = "secretkey" fdroidserver.deploy.config["s3cmd"] = "s3cmd" repo_section = 'repo' # setup function for asserting subprocess.call invocations call_iteration = 0 def update_awsbucket_s3cmd_call(cmd): nonlocal call_iteration if call_iteration == 0: self.assertListEqual( cmd, [ 's3cmd', f"--config={fdroidserver.deploy.AUTO_S3CFG}", 'info', f"s3://{fdroidserver.deploy.config['awsbucket']}", ], ) elif call_iteration == 1: self.assertListEqual( cmd, [ 's3cmd', f"--config={fdroidserver.deploy.AUTO_S3CFG}", 'sync', '--acl-public', '--quiet', '--include', 'repo/altstore-index.json', '--include', 'repo/altstore-index.json.asc', '--include', 'repo/entry.jar', '--include', 'repo/entry.json', '--include', 'repo/entry.json.asc', '--include', 'repo/index-v1.jar', '--include', 'repo/index-v1.json', '--include', 'repo/index-v1.json.asc', '--include', 'repo/index-v2.json', '--include', 'repo/index-v2.json.asc', '--include', 'repo/index.css', '--include', 'repo/index.html', '--include', 'repo/index.jar', '--include', 'repo/index.png', '--include', 'repo/index.xml', '--include', 'repo/signer-index.jar', '--include', 'repo/signer-index.json', '--include', 'repo/signer-index.json.asc', '--delete-removed', '--delete-after', '--no-check-md5', repo_section, f"s3://{fdroidserver.deploy.config['awsbucket']}/fdroid/", ], ) else: self.fail('unexpected subprocess.call invocation') call_iteration += 1 return 0 with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): os.mkdir('repo') os.symlink('repo/com.example.sym.apk', 'Sym.apk') os.symlink('repo/com.example.sym.apk.asc', 'Sym.apk.asc') os.symlink('repo/com.example.sym.apk.sig', 'Sym.apk.sig') with mock.patch('subprocess.call', side_effect=update_awsbucket_s3cmd_call): fdroidserver.deploy.update_awsbucket_s3cmd( repo_section, is_index_only=True ) self.assertEqual(call_iteration, 2, 'expected 2 invocations of subprocess.call') def test_update_awsbucket_libcloud(self): from libcloud.storage.base import Container # setup parameters for this test run fdroidserver.common.options = mock.Mock() fdroidserver.common.options.no_checksum = True fdroidserver.common.options.verbose = False fdroidserver.common.options.quiet = True config = {} fdroidserver.common.fill_config_defaults(config) fdroidserver.deploy.config = config fdroidserver.deploy.config["awsbucket"] = "bucket" fdroidserver.deploy.config["awsaccesskeyid"] = "accesskeyid" fdroidserver.deploy.config["awssecretkey"] = "secretkey" fdroidserver.deploy.config["s3cmd"] = "s3cmd" repo_section = 'repo' os.chdir(self.testdir) repo = Path('repo') repo.mkdir(parents=True) fake_apk = repo / 'Sym.apk' with fake_apk.open('w') as fp: fp.write('not an APK, but has the right filename') fake_index = repo / fdroidserver.common.INDEX_FILES[0] with fake_index.open('w') as fp: fp.write('not an index, but has the right filename') with mock.patch( 'libcloud.storage.drivers.s3.S3StorageDriver' ) as mock_driver_class: mock_driver = mock_driver_class.return_value mock_container = mock.MagicMock(spec=Container) mock_container.list_objects.return_value = [ mock.MagicMock(name='Sym.apk'), mock.MagicMock(name=fdroidserver.common.INDEX_FILES[0]), ] mock_driver.get_container.return_value = mock_container mock_driver.upload_object_via_stream.return_value = None fdroidserver.deploy.update_awsbucket_libcloud(repo_section) mock_driver.get_container.assert_called_once_with( container_name=fdroidserver.deploy.config["awsbucket"] ) mock_container.list_objects.assert_called_once_with() files_to_upload = [ 'fdroid/repo/Sym.apk', f"fdroid/repo/{fdroidserver.common.INDEX_FILES[0]}", ] calls = [ mock.call( iterator=mock.ANY, container=mock_container, object_name=file, extra={'acl': 'public-read'}, ) for file in files_to_upload ] mock_driver.upload_object_via_stream.assert_has_calls(calls, any_order=True) self.assertEqual(mock_driver.upload_object_via_stream.call_count, 2) def test_update_awsbucket_libcloud_in_index_only_mode(self): from libcloud.storage.base import Container # setup parameters for this test run fdroidserver.common.options = mock.Mock() fdroidserver.common.options.no_checksum = True fdroidserver.common.options.verbose = False fdroidserver.common.options.quiet = True config = {} fdroidserver.common.fill_config_defaults(config) fdroidserver.deploy.config = config fdroidserver.deploy.config["awsbucket"] = "bucket" fdroidserver.deploy.config["awsaccesskeyid"] = "accesskeyid" fdroidserver.deploy.config["awssecretkey"] = "secretkey" fdroidserver.deploy.config["s3cmd"] = "s3cmd" repo_section = 'repo' os.chdir(self.testdir) repo = Path('repo') repo.mkdir(parents=True) fake_apk = repo / 'Sym.apk' with fake_apk.open('w') as fp: fp.write('not an APK, but has the right filename') fake_index = repo / fdroidserver.common.INDEX_FILES[0] with fake_index.open('w') as fp: fp.write('not an index, but has the right filename') with mock.patch( 'libcloud.storage.drivers.s3.S3StorageDriver' ) as mock_driver_class: mock_driver = mock_driver_class.return_value mock_container = mock.MagicMock(spec=Container) mock_container.list_objects.return_value = [ mock.MagicMock(name='Sym.apk'), mock.MagicMock(name=fdroidserver.common.INDEX_FILES[0]), ] mock_driver.get_container.return_value = mock_container mock_driver.upload_object_via_stream.return_value = None fdroidserver.deploy.update_awsbucket_libcloud( repo_section, is_index_only=True ) mock_driver.get_container.assert_called_once_with( container_name=fdroidserver.deploy.config["awsbucket"] ) mock_container.list_objects.assert_called_once_with() files_to_upload = [f"fdroid/repo/{fdroidserver.common.INDEX_FILES[0]}"] calls = [ mock.call( iterator=mock.ANY, container=mock_container, object_name=file, extra={'acl': 'public-read'}, ) for file in files_to_upload ] mock_driver.upload_object_via_stream.assert_has_calls( calls, any_order=False, ) self.assertEqual(mock_driver.upload_object_via_stream.call_count, 1) def test_update_servergitmirrors(self): # setup parameters for this test run fdroidserver.common.options = mock.Mock() fdroidserver.common.options.identity_file = None fdroidserver.common.options.no_keep_git_mirror_archive = False fdroidserver.common.options.verbose = False fdroidserver.common.options.quiet = True config = {} fdroidserver.common.fill_config_defaults(config) fdroidserver.deploy.config = config os.chdir(self.testdir) repo_section = 'repo' initial_branch = fdroidserver.deploy.GIT_BRANCH remote_repo = Path(self.testdir) / 'remote' remote_repo.mkdir(parents=True) remote_git_repo = git.Repo.init( remote_repo, initial_branch=initial_branch, bare=True ) fdroidserver.deploy.config["servergitmirrors"] = [{"url": str(remote_repo)}] os.chdir(self.testdir) repo = Path('repo') repo.mkdir(parents=True) fake_apk = 'Sym.apk' fake_files = fdroidserver.common.INDEX_FILES + [fake_apk] for filename in fake_files: fake_file = repo / filename with fake_file.open('w') as fp: fp.write('not a real one, but has the right filename') fdroidserver.deploy.update_servergitmirrors( fdroidserver.deploy.config["servergitmirrors"], repo_section ) verify_repo = remote_git_repo.clone( Path(self.testdir) / 'verify', ) for filename in fake_files: remote_file = f"fdroid/{repo_section}/{filename}" self.assertIsNotNone(verify_repo.working_tree_dir) if verify_repo.working_tree_dir is not None: self.assertTrue( (Path(verify_repo.working_tree_dir) / remote_file).exists() ) def test_update_servergitmirrors_in_index_only_mode(self): # setup parameters for this test run fdroidserver.common.options = mock.Mock() fdroidserver.common.options.identity_file = None fdroidserver.common.options.no_keep_git_mirror_archive = False fdroidserver.common.options.verbose = False fdroidserver.common.options.quiet = True config = {} fdroidserver.common.fill_config_defaults(config) fdroidserver.deploy.config = config os.chdir(self.testdir) repo_section = 'repo' initial_branch = fdroidserver.deploy.GIT_BRANCH remote_repo = Path(self.testdir) / 'remote' remote_repo.mkdir(parents=True) remote_git_repo = git.Repo.init( remote_repo, initial_branch=initial_branch, bare=True ) fdroidserver.deploy.config["servergitmirrors"] = [ {"url": str(remote_repo), "index_only": True} ] os.chdir(self.testdir) repo = Path('repo') repo.mkdir(parents=True) fake_apk = 'Sym.apk' fake_files = fdroidserver.common.INDEX_FILES + [fake_apk] for filename in fake_files: fake_file = repo / filename with fake_file.open('w') as fp: fp.write('not a real one, but has the right filename') fdroidserver.deploy.update_servergitmirrors( fdroidserver.deploy.config["servergitmirrors"], repo_section ) verify_repo = remote_git_repo.clone( Path(self.testdir) / 'verify', ) for filename in fdroidserver.common.INDEX_FILES: remote_file = f"fdroid/{repo_section}/{filename}" self.assertIsNotNone(verify_repo.working_tree_dir) if verify_repo.working_tree_dir is not None: self.assertTrue( (Path(verify_repo.working_tree_dir) / remote_file).exists() ) # Should not have the APK file remote_file = f"fdroid/{repo_section}/{fake_apk}" if verify_repo.working_tree_dir is not None: self.assertFalse( (Path(verify_repo.working_tree_dir) / remote_file).exists() ) def test_upload_to_servergitmirror_in_index_only_mode(self): # setup parameters for this test run fdroidserver.common.options = mock.Mock() fdroidserver.common.options.identity_file = None fdroidserver.common.options.no_keep_git_mirror_archive = False fdroidserver.common.options.verbose = False fdroidserver.common.options.quiet = True fdroidserver.common.options.identity_file = None config = {} fdroidserver.common.fill_config_defaults(config) fdroidserver.deploy.config = config repo_section = 'repo' initial_branch = fdroidserver.deploy.GIT_BRANCH os.chdir(self.testdir) local_git_repo_path = Path(self.testdir) / 'local' local_git_repo = git.Repo.init( local_git_repo_path, initial_branch=initial_branch ) fdroid_dir = local_git_repo_path / 'fdroid' repo_dir = fdroid_dir / repo_section repo_dir.mkdir(parents=True) fake_apk = 'Sym.apk' fake_files = fdroidserver.common.INDEX_FILES + [fake_apk] for filename in fake_files: fake_file = repo_dir / filename with fake_file.open('w') as fp: fp.write('not a real one, but has the right filename') # The remote repo must be a bare repo to allow being pushed to remote_git_repo_dir = Path(self.testdir) / 'remote' remote_git_repo = git.Repo.init( remote_git_repo_dir, initial_branch=initial_branch, bare=True ) mirror_config = {"url": str(remote_git_repo_dir), "index_only": True} enabled_remotes = [] ssh_cmd = 'ssh -oBatchMode=yes' fdroidserver.deploy.upload_to_servergitmirror( mirror_config=mirror_config, local_repo=local_git_repo, enabled_remotes=enabled_remotes, repo_section=repo_section, is_index_only=mirror_config['index_only'], fdroid_dir=str(fdroid_dir), git_mirror_path=str(local_git_repo_path), ssh_cmd=ssh_cmd, progress=git.RemoteProgress(), ) verify_repo = remote_git_repo.clone( Path(self.testdir) / 'verify', ) for filename in fdroidserver.common.INDEX_FILES: remote_file = f"fdroid/{repo_section}/{filename}" self.assertIsNotNone(verify_repo.working_tree_dir) if verify_repo.working_tree_dir is not None: self.assertTrue( (Path(verify_repo.working_tree_dir) / remote_file).exists() ) # Should not have the APK file remote_file = f"fdroid/{repo_section}/{fake_apk}" if verify_repo.working_tree_dir is not None: self.assertFalse( (Path(verify_repo.working_tree_dir) / remote_file).exists() ) class GitHubReleasesTest(unittest.TestCase): def test_find_release_infos(self): self.maxDiff = None index_mock = b""" { "packages": { "com.example.app": { "versions": { "2e6f263c1927506015bfc98bce0818247836f2e7fe29a04e1af2b33c97848750": { "file": { "name": "/com.example.app_123.apk" }, "whatsNew": { "en-US": "fake what's new" }, "manifest": { "versionName": "1.2.3", "versionCode": "123" } }, "8a6f263c8327506015bfc98bce0815247836f2e7fe29a04e1af2bffa6409998d": { "file": { "name": "/com.example.app_100.apk" }, "manifest": { "versionName": "1.0-alpha", "versionCode": "123" }, "releaseChannels": ["alpha"] } } }, "another.app": { "versions": { "30602ffc19a7c0601bbfa93bce00082c78a6f2ddfe29a04e1af253fc9f84eda0": { "file": { "name": "/another.app_1.apk" }, "manifest": { "versionName": "1", "versionCode": "1" } } } }, "fildered.app": { "versions": { "93ae02fc19a7c0601adfa93bce0443fc78a6f2ddfe3df04e1af093fca9a1ff09": { "file": { "name": "/another.app_1.apk" }, "manifest": { "versionName": "1", "versionCode": "1" } } } } } } """ with unittest.mock.patch( "fdroidserver.deploy.open", unittest.mock.mock_open(read_data=index_mock) ): release_infos = fdroidserver.deploy.find_release_infos( "fake_path", Path('fake_repo'), ["com.example.app", "another.app"], ) self.assertDictEqual( release_infos, { "another.app": { "1": { "files": [Path('fake_repo') / "another.app_1.apk"], "hasReleaseChannels": False, "whatsNew": None, }, }, "com.example.app": { "1.0-alpha": { "files": [ Path("fake_repo") / "com.example.app_100.apk", ], "hasReleaseChannels": True, "whatsNew": None, }, "1.2.3": { "files": [ Path("fake_repo") / "com.example.app_123.apk", ], "hasReleaseChannels": False, "whatsNew": "fake what's new", }, }, }, ) def test_upload_to_github_releases(self): gh_config = [ { "projectUrl": "https://github.com/example/app", "packageNames": ["com.example.app", "another.app"], }, { "projectUrl": "https://github.com/custom/app", "packageNames": ["more.custom.app"], "token": "custom_token", }, ] fri_mock = unittest.mock.Mock(return_value="fri_result") urr_mock = unittest.mock.Mock() with unittest.mock.patch( "fdroidserver.deploy.find_release_infos", fri_mock ), unittest.mock.patch( "fdroidserver.deploy.upload_to_github_releases_repo", urr_mock ), tempfile.TemporaryDirectory() as tmpdir: with open(Path(tmpdir) / "index-v2.json", "w") as f: f.write("") fdroidserver.deploy.upload_to_github_releases( tmpdir, gh_config, "fake_global_token" ) fri_mock.assert_called_once_with( Path(tmpdir) / "index-v2.json", Path(tmpdir), ["com.example.app", "another.app", "more.custom.app"], ) self.maxDiff = None self.assertListEqual( urr_mock.call_args_list, [ unittest.mock.call( { "projectUrl": "https://github.com/example/app", "packageNames": ["com.example.app", "another.app"], }, "fri_result", "fake_global_token", ), unittest.mock.call( { "projectUrl": "https://github.com/custom/app", "packageNames": ["more.custom.app"], "token": "custom_token", }, "fri_result", "fake_global_token", ), ], ) class Test_UploadToGithubReleasesRepo(unittest.TestCase): def setUp(self): self.repo_conf = { "projectUrl": "https://github.com/example/app", "packageNames": ["com.example.app", "com.example.altapp", "another.app"], } self.release_infos = { "com.example.app": { "1.0.0": { "files": [ Path("fake_repo") / "com.example.app_100100.apk", ], "hasReleaseChannels": False, "whatsNew": "what's new com.example.app 1.0.0", }, "1.0.0-beta1": { "files": [ Path("fake_repo") / "com.example.app_100007.apk", ], "hasReleaseChannels": True, "whatsNew": None, }, }, "com.example.altapp": { "1.0.0": { "files": [ Path("fake_repo") / "com.example.altapp_100100.apk", Path("fake_repo") / "com.example.altapp_100100.apk.asc", Path("fake_repo") / "com.example.altapp_100100.apk.idsig", ], "whatsNew": "what's new com.example.altapp 1.0.0", }, }, } self.api = unittest.mock.Mock() self.api.list_unreleased_tags = lambda: ["1.0.0", "1.0.0-beta1"] self.api_constructor = unittest.mock.Mock(return_value=self.api) def test_global_token(self): with unittest.mock.patch("fdroidserver.github.GithubApi", self.api_constructor): fdroidserver.deploy.upload_to_github_releases_repo( self.repo_conf, self.release_infos, "global_token", ) self.api_constructor.assert_called_once_with( "global_token", "https://github.com/example/app" ) self.assertListEqual( self.api.create_release.call_args_list, [ unittest.mock.call( "1.0.0", [ Path("fake_repo/com.example.app_100100.apk"), Path("fake_repo/com.example.altapp_100100.apk"), Path("fake_repo/com.example.altapp_100100.apk.asc"), Path("fake_repo/com.example.altapp_100100.apk.idsig"), ], "what's new com.example.app 1.0.0", ), ], ) def test_local_token(self): self.repo_conf["token"] = "local_token" # nosec B105 with unittest.mock.patch("fdroidserver.github.GithubApi", self.api_constructor): fdroidserver.deploy.upload_to_github_releases_repo( self.repo_conf, self.release_infos, "global_token", ) self.api_constructor.assert_called_once_with( "local_token", "https://github.com/example/app" ) self.assertListEqual( self.api.create_release.call_args_list, [ unittest.mock.call( "1.0.0", [ Path("fake_repo/com.example.app_100100.apk"), Path("fake_repo/com.example.altapp_100100.apk"), Path("fake_repo/com.example.altapp_100100.apk.asc"), Path("fake_repo/com.example.altapp_100100.apk.idsig"), ], "what's new com.example.app 1.0.0", ), ], ) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742812298.0 fdroidserver-2.4.0/tests/test_exception.py0000755000175000017500000000221114770232212017467 0ustar00hanshans#!/usr/bin/env python3 import unittest import fdroidserver class ExceptionTest(unittest.TestCase): '''fdroidserver/exception.py''' def test_FDroidException(self): try: raise fdroidserver.exception.FDroidException() except fdroidserver.exception.FDroidException as e: str(e) try: raise fdroidserver.exception.FDroidException(9) except fdroidserver.exception.FDroidException as e: str(e) try: raise fdroidserver.exception.FDroidException(-123.12234) except fdroidserver.exception.FDroidException as e: str(e) try: raise fdroidserver.exception.FDroidException("this is a string") except fdroidserver.exception.FDroidException as e: str(e) try: raise fdroidserver.exception.FDroidException(['one', 'two', 'three']) except fdroidserver.exception.FDroidException as e: str(e) try: raise fdroidserver.exception.FDroidException(('one', 'two', 'three')) except fdroidserver.exception.FDroidException as e: str(e) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742812298.0 fdroidserver-2.4.0/tests/test_github.py0000755000175000017500000001164414770232212016765 0ustar00hanshans#!/usr/bin/env python3 import unittest import unittest.mock from .shared_test_code import mock_urlopen import fdroidserver class GithubApiTest(unittest.TestCase): def test__init(self): api = fdroidserver.github.GithubApi('faketoken', 'fakerepopath') self.assertEqual(api._api_token, 'faketoken') self.assertEqual(api._repo_path, 'fakerepopath') def test__req(self): api = fdroidserver.github.GithubApi('faketoken', 'fakerepopath') r = api._req('https://fakeurl', data='fakedata') self.assertEqual(r.full_url, 'https://fakeurl') self.assertEqual(r.data, "fakedata") self.assertDictEqual( r.headers, { 'Accept': 'application/vnd.github+json', 'Authorization': 'Bearer faketoken', 'X-github-api-version': '2022-11-28', }, ) def test_list_released_tags(self): api = fdroidserver.github.GithubApi('faketoken', 'fakerepopath') uomock = mock_urlopen( body='[{"tag_name": "fake"}, {"tag_name": "double_fake"}]' ) with unittest.mock.patch("urllib.request.urlopen", uomock): result = api.list_released_tags() self.assertListEqual(result, ['fake', 'double_fake']) def test_list_unreleased_tags(self): api = fdroidserver.github.GithubApi('faketoken', 'fakerepopath') api.list_all_tags = unittest.mock.Mock(return_value=[1, 2, 3, 4]) api.list_released_tags = unittest.mock.Mock(return_value=[1, 2]) result = api.list_unreleased_tags() self.assertListEqual(result, [3, 4]) def test_tag_exists(self): api = fdroidserver.github.GithubApi('faketoken', 'fakerepopath') uomock = mock_urlopen(body='[{"ref": "refs/tags/fake_tag"}]') with unittest.mock.patch("urllib.request.urlopen", uomock): result = api.tag_exists('fake_tag') self.assertTrue(result) def test_tag_exists_failure(self): api = fdroidserver.github.GithubApi('faketoken', 'fakerepopath') uomock = mock_urlopen(body='[{"error": "failure"}]') with unittest.mock.patch("urllib.request.urlopen", uomock): success = api.tag_exists('fake_tag') self.assertFalse(success) def test_list_all_tags(self): api = fdroidserver.github.GithubApi('faketoken', 'fakerepopath') uomock = mock_urlopen( body='[{"ref": "refs/tags/fake"}, {"ref": "refs/tags/double_fake"}]' ) with unittest.mock.patch("urllib.request.urlopen", uomock): result = api.list_all_tags() self.assertListEqual(result, ['fake', 'double_fake']) def test_create_release(self): api = fdroidserver.github.GithubApi('faketoken', 'fakerepopath') uomock = mock_urlopen(body='{"id": "fakeid"}') api.tag_exists = lambda x: True api._create_release_asset = unittest.mock.Mock() with unittest.mock.patch("urllib.request.urlopen", uomock): success = api.create_release('faketag', ['file_a', 'file_b'], body="bdy") self.assertTrue(success) req = uomock.call_args_list[0][0][0] self.assertEqual(1, len(uomock.call_args_list)) self.assertEqual(2, len(uomock.call_args_list[0])) self.assertEqual(1, len(uomock.call_args_list[0][0])) self.assertEqual( req.full_url, 'https://api.github.com/repos/fakerepopath/releases', ) self.assertEqual(req.data, b'{"tag_name": "faketag", "body": "bdy"}') self.assertListEqual( api._create_release_asset.call_args_list, [ unittest.mock.call('fakeid', 'file_a'), unittest.mock.call('fakeid', 'file_b'), ], ) def test__create_release_asset(self): api = fdroidserver.github.GithubApi('faketoken', 'fakerepopath') uomock = mock_urlopen() with unittest.mock.patch( 'fdroidserver.github.open', unittest.mock.mock_open(read_data=b"fake_content"), ), unittest.mock.patch("urllib.request.urlopen", uomock): success = api._create_release_asset('fake_id', 'fake_file') self.assertTrue(success) req = uomock.call_args_list[0][0][0] self.assertEqual(1, len(uomock.call_args_list)) self.assertEqual(2, len(uomock.call_args_list[0])) self.assertEqual(1, len(uomock.call_args_list[0][0])) self.assertEqual( req.full_url, 'https://uploads.github.com/repos/fakerepopath/releases/fake_id/assets?name=fake_file', ) self.assertDictEqual( req.headers, { "Accept": "application/vnd.github+json", 'Authorization': 'Bearer faketoken', 'Content-type': 'application/octet-stream', 'X-github-api-version': '2022-11-28', }, ) self.assertEqual(req.data, b'fake_content') ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742812298.0 fdroidserver-2.4.0/tests/test_gpgsign.py0000755000175000017500000000366014770232212017140 0ustar00hanshans#!/usr/bin/env python3 import json import os import shutil import tempfile import unittest from fdroidserver import common, gpgsign from pathlib import Path from unittest.mock import MagicMock, patch basedir = Path(__file__).parent class GpgsignTest(unittest.TestCase): def setUp(self): self.tempdir = tempfile.TemporaryDirectory() os.chdir(self.tempdir.name) self.repodir = Path('repo') self.repodir.mkdir() gpgsign.config = None config = common.read_config() config['verbose'] = True config['gpghome'] = str((basedir / 'gnupghome').resolve()) config['gpgkey'] = '1DBA2E89' gpgsign.config = config def tearDown(self): self.tempdir.cleanup() @patch('sys.argv', ['fdroid gpgsign', '--verbose']) @patch('fdroidserver.gpgsign.FDroidPopen') def test_sign_index(self, FDroidPopen): """This skips running gpg because its hard to setup in a test env""" index_v1_json = 'repo/index-v1.json' shutil.copy(basedir / index_v1_json, 'repo') shutil.copy(basedir / 'SpeedoMeterApp.main_1.apk', 'repo') def _side_effect(gpg): f = gpg[-1] sig = gpg[3] self.assertTrue(sig.startswith(f)) open(sig, 'w').close() p = MagicMock() p.returncode = 0 return p FDroidPopen.side_effect = _side_effect gpgsign.main() self.assertTrue(FDroidPopen.called) self.assertTrue((self.repodir / 'index-v1.json').exists()) self.assertTrue((self.repodir / 'index-v1.json.asc').exists()) self.assertTrue((self.repodir / 'SpeedoMeterApp.main_1.apk.asc').exists()) self.assertFalse((self.repodir / 'index.jar.asc').exists()) # smoke check status JSON with (self.repodir / 'status/gpgsign.json').open() as fp: data = json.load(fp) self.assertIn('index-v1.json', data['signed']) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742812298.0 fdroidserver-2.4.0/tests/test_gradlew-fdroid0000755000175000017500000000402314770232212017737 0ustar00hanshans#!/bin/bash red='\033[0;31m' green='\033[0;32m' nocolor='\033[0m' TEST_VALUE='HELLO WORLD!' run_test() { cd $source_files/$1 printf "\n${1}:\n" if ($basedir/gradlew-fdroid 2>/dev/null || true) | grep -Fo "$2"; then printf "${green}passed: $1\n" else printf "${red}ERROR: $2 not found in $1\n" ((exit_value++)) fi printf $nocolor } download_cache_test() { if $basedir/gradlew-fdroid helloWorld 2>/dev/null | grep -F "$TEST_VALUE"; then printf "${green}passed: $1\n" else printf "${red}ERROR: \n" $basedir/gradlew-fdroid helloWorld ((exit_value++)) fi printf $nocolor } exit_value=0 basedir=$(cd $(dirname $0)/..; pwd) source_files=$basedir/tests/source-files export https_proxy=127.7.7.7:7 # fake proxy to block downloading run_test osmandapp/osmand 2.2.1 run_test com.integreight.onesheeld 3.3 run_test se.manyver/android 5.5 run_test yuriykulikov/AlarmClock 5.1.1 printf "\n\nforce test files to have Windows linefeeds:\n" tmpdir=`mktemp -d` cp -a $source_files/osmandapp $source_files/yuriykulikov $tmpdir/ awk 'sub("$", "\r")' \ $source_files/yuriykulikov/AlarmClock/gradle/wrapper/gradle-wrapper.properties \ > $tmpdir/yuriykulikov/AlarmClock/gradle/wrapper/gradle-wrapper.properties awk 'sub("$", "\r")' \ $source_files/osmandapp/osmand/build.gradle \ > $tmpdir/osmandapp/osmand/build.gradle source_files=$tmpdir run_test yuriykulikov/AlarmClock 5.1.1 run_test osmandapp/osmand 2.2.1 cd $tmpdir mkdir -p download_cache_test/gradle/wrapper cd download_cache_test echo 'distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip' \ > gradle/wrapper/gradle-wrapper.properties printf "task helloWorld {\n\tdoLast {\n\t\tprintln '$TEST_VALUE'\n\t}\n}" > build.gradle export GRADLE_VERSION_DIR=$tmpdir/gradle/versions mkdir -p $GRADLE_VERSION_DIR unset https_proxy printf "download, unpack, and run: " download_cache_test 7.3 printf "unpack and run: " rm -rf $GRADLE_VERSION_DIR/7.3/ download_cache_test 7.3 printf "just run: " download_cache_test 7.3 exit $exit_value ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742812298.0 fdroidserver-2.4.0/tests/test_import_subcommand.py0000755000175000017500000001644414770232212021230 0ustar00hanshans#!/usr/bin/env python3 import logging import os import shutil import sys import tempfile import unittest from pathlib import Path from unittest import mock import git import requests import yaml from .shared_test_code import TmpCwd, mkdtemp, VerboseFalseOptions import fdroidserver import fdroidserver.import_subcommand basedir = Path(__file__).parent logging.basicConfig(level=logging.DEBUG) class ImportTest(unittest.TestCase): '''fdroid import''' def setUp(self): os.chdir(basedir) self._td = mkdtemp() self.testdir = self._td.name def tearDown(self): os.chdir(basedir) self._td.cleanup() def test_get_all_gradle_and_manifests(self): """Test whether the function works with relative and absolute paths""" a = fdroidserver.import_subcommand.get_all_gradle_and_manifests( Path('source-files/cn.wildfirechat.chat') ) paths = [ 'avenginekit/build.gradle', 'build.gradle', 'chat/build.gradle', 'client/build.gradle', 'client/src/main/AndroidManifest.xml', 'emojilibrary/build.gradle', 'gradle/build_libraries.gradle', 'imagepicker/build.gradle', 'mars-core-release/build.gradle', 'push/build.gradle', 'settings.gradle', ] paths = [Path('source-files/cn.wildfirechat.chat') / path for path in paths] self.assertEqual(sorted(paths), sorted(a)) abspath = basedir / 'source-files/realm' p = fdroidserver.import_subcommand.get_all_gradle_and_manifests(abspath) self.assertEqual(1, len(p)) self.assertTrue(p[0].is_relative_to(abspath)) def test_get_gradle_subdir(self): subdirs = { 'cn.wildfirechat.chat': 'chat', 'com.anpmech.launcher': 'app', 'org.tasks': 'app', 'ut.ewh.audiometrytest': 'app', 'org.noise_planet.noisecapture': 'app', } for k, v in subdirs.items(): build_dir = Path('source-files') / k paths = fdroidserver.import_subcommand.get_all_gradle_and_manifests( build_dir ) logging.info(paths) subdir = fdroidserver.import_subcommand.get_gradle_subdir(build_dir, paths) self.assertEqual(v, str(subdir)) def test_import_gitlab(self): with tempfile.TemporaryDirectory() as testdir, TmpCwd(testdir): # FDroidPopen needs some config to work config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config url = 'https://gitlab.com/fdroid/ci-test-app' r = requests.head(url, timeout=300) if r.status_code != 200: print("ERROR", url, 'unreachable (', r.status_code, ')') print('Skipping ImportTest!') return fdroidserver.common.options = VerboseFalseOptions app = fdroidserver.import_subcommand.get_app_from_url(url) fdroidserver.import_subcommand.clone_to_tmp_dir(app) self.assertEqual(app.RepoType, 'git') self.assertEqual(app.Repo, 'https://gitlab.com/fdroid/ci-test-app.git') def test_get_app_from_url(self): with tempfile.TemporaryDirectory() as testdir, TmpCwd(testdir): testdir = Path(testdir) (testdir / 'tmp').mkdir() tmp_importer = testdir / 'tmp/importer' data = ( ( 'cn.wildfirechat.chat', 'https://github.com/wildfirechat/android-chat', '0.6.9', 23, ), ( 'com.anpmech.launcher', 'https://github.com/KeikaiLauncher/KeikaiLauncher', 'Unknown', None, ), ( 'ut.ewh.audiometrytest', 'https://github.com/ReeceStevens/ut_ewh_audiometer_2014', '1.65', 14, ), ) for appid, url, vn, vc in data: shutil.rmtree( tmp_importer, onerror=fdroidserver.import_subcommand.handle_retree_error_on_windows, ) shutil.copytree(basedir / 'source-files' / appid, tmp_importer) app = fdroidserver.import_subcommand.get_app_from_url(url) with mock.patch( 'fdroidserver.common.getvcs', lambda a, b, c: fdroidserver.common.vcs(url, testdir), ), mock.patch( 'fdroidserver.common.vcs.gotorevision', lambda s, rev: None ), mock.patch( 'shutil.rmtree', lambda a, onerror=None: None ): build_dir = fdroidserver.import_subcommand.clone_to_tmp_dir(app) self.assertEqual('git', app.RepoType) self.assertEqual(url, app.Repo) self.assertEqual(url, app.SourceCode) logging.info(build_dir) paths = fdroidserver.import_subcommand.get_all_gradle_and_manifests( build_dir ) self.assertNotEqual(paths, []) ( versionName, versionCode, package, ) = fdroidserver.common.parse_androidmanifests(paths, app) self.assertEqual(vn, versionName) self.assertEqual(vc, versionCode) self.assertEqual(appid, package) def test_bad_urls(self): for url in ( 'asdf', 'file://thing.git', 'https:///github.com/my/project', 'git:///so/many/slashes', 'ssh:/notabug.org/missing/a/slash', 'git:notabug.org/missing/some/slashes', 'https//github.com/bar/baz', ): with self.assertRaises(ValueError): fdroidserver.import_subcommand.get_app_from_url(url) @mock.patch('sys.argv', ['fdroid import', '-u', 'https://example.com/mystery/url']) @mock.patch('fdroidserver.import_subcommand.clone_to_tmp_dir', lambda a: None) def test_unrecognized_url(self): """Test whether error is thrown when the RepoType was not found. clone_to_tmp_dir is mocked out to prevent this test from using the network, if it gets past the code that throws the error. """ with self.assertRaises(fdroidserver.exception.FDroidException): fdroidserver.import_subcommand.main() @mock.patch('sys.argv', ['fdroid import', '-u', 'https://fake/git/url.git']) @mock.patch( 'fdroidserver.import_subcommand.clone_to_tmp_dir', lambda a, r: Path('td') ) def test_main_local_git(self): os.chdir(self.testdir) git.Repo.init('td') Path('td/build.gradle').write_text( 'android { defaultConfig { applicationId "com.example" } }' ) fdroidserver.import_subcommand.main() with open('metadata/com.example.yml') as fp: data = yaml.safe_load(fp) self.assertEqual(data['Repo'], sys.argv[2]) self.assertEqual(data['RepoType'], 'git') self.assertEqual(1, len(data['Builds'])) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/tests/test_index.py0000755000175000017500000011323214770502071016611 0ustar00hanshans#!/usr/bin/env python3 import copy import datetime import glob import os import unittest from pathlib import Path import yaml import zipfile from unittest.mock import patch import requests import tempfile import json import shutil import fdroidserver from fdroidserver import common, index, publish, signindex, update from .shared_test_code import GP_FINGERPRINT, TmpCwd, mkdtemp basedir = Path(__file__).parent class Options: nosign = True pretty = False verbose = False class IndexTest(unittest.TestCase): @classmethod def setUpClass(cls): # TODO something should remove cls.index_v1_jar, but it was # causing the tests to be flaky. There seems to be something # that is running the background somehow, maybe sign_index() # exits before jarsigner actually finishes? cls.index_v1_jar = basedir / 'repo' / 'index-v1.jar' def setUp(self): (basedir / common.CONFIG_FILE).chmod(0o600) os.chdir(basedir) # so read_config() can find config.yml common.config = None common.options = Options config = common.read_config() config['jarsigner'] = common.find_sdk_tools_cmd('jarsigner') common.config = config signindex.config = config update.config = config self._td = mkdtemp() self.testdir = self._td.name def tearDown(self): self._td.cleanup() def _sign_test_index_v1_jar(self): if not self.index_v1_jar.exists(): signindex.sign_index(self.index_v1_jar.parent, 'index-v1.json') def test_get_public_key_from_jar_succeeds(self): source_dir = basedir / 'signindex' for f in ('testy.jar', 'guardianproject.jar'): testfile = os.path.join(source_dir, f) jar = zipfile.ZipFile(testfile) _, fingerprint = index.get_public_key_from_jar(jar) # comparing fingerprints should be sufficient if f == 'testy.jar': self.assertEqual( fingerprint, '818E469465F96B704E27BE2FEE4C63AB' + '9F83DDF30E7A34C7371A4728D83B0BC1', ) if f == 'guardianproject.jar': self.assertTrue(fingerprint == GP_FINGERPRINT) def test_get_public_key_from_jar_fails(self): source_dir = basedir / 'signindex' testfile = os.path.join(source_dir, 'unsigned.jar') jar = zipfile.ZipFile(testfile) with self.assertRaises(index.VerificationException): index.get_public_key_from_jar(jar) def test_download_repo_index_no_fingerprint(self): with self.assertRaises(index.VerificationException): index.download_repo_index("http://example.org") def test_download_repo_index_no_jar(self): with self.assertRaises(requests.exceptions.RequestException): index.download_repo_index("http://example.org?fingerprint=nope") def test_get_repo_key_fingerprint(self): self._sign_test_index_v1_jar() pubkey, fingerprint = index.extract_pubkey() ( data, public_key, public_key_fingerprint, ) = index.get_index_from_jar( 'repo/index-v1.jar', fingerprint, allow_deprecated=True ) self.assertIsNotNone(data) self.assertIsNotNone(public_key) self.assertIsNotNone(public_key_fingerprint) def test_get_index_from_jar_with_bad_fingerprint(self): pubkey, fingerprint = index.extract_pubkey() fingerprint = fingerprint[:-1] + 'G' with self.assertRaises(fdroidserver.exception.VerificationException): index.get_index_from_jar( 'repo/index-v1.jar', fingerprint, allow_deprecated=True ) def test_get_index_from_jar_with_chars_to_be_stripped(self): self._sign_test_index_v1_jar() fingerprint = 'NOOOO F4 9A F3 F1 1E FD DF 20 DF FD 70 F5 E3 11 7B 99 76 67 41 67 AD CA 28 0E 6B 19 32 A0 60 1B 26 F6' index.get_index_from_jar( 'repo/index-v1.jar', fingerprint, allow_deprecated=True ) @patch('requests.head') def test_download_repo_index_same_etag(self, head): url = 'http://example.org?fingerprint=test' etag = '"4de5-54d840ce95cb9"' head.return_value.headers = {'ETag': etag} data, new_etag = index.download_repo_index(url, etag=etag) self.assertIsNone(data) self.assertEqual(etag, new_etag) @patch('requests.get') @patch('requests.head') def test_download_repo_index_new_etag(self, head, get): url = 'http://example.org?fingerprint=' + GP_FINGERPRINT etag = '"4de5-54d840ce95cb9"' # fake HTTP answers head.return_value.headers = {'ETag': 'new_etag'} get.return_value.headers = {'ETag': 'new_etag'} get.return_value.status_code = 200 testfile = os.path.join('signindex', 'guardianproject-v1.jar') with open(testfile, 'rb') as file: get.return_value.content = file.read() data, new_etag = index.download_repo_index(url, etag=etag) # assert that the index was retrieved properly self.assertEqual('Guardian Project Official Releases', data['repo']['name']) self.assertEqual(GP_FINGERPRINT, data['repo']['fingerprint']) self.assertTrue(len(data['repo']['pubkey']) > 500) self.assertEqual(10, len(data['apps'])) self.assertEqual(10, len(data['packages'])) self.assertEqual('new_etag', new_etag) @patch('fdroidserver.net.http_get') def test_download_repo_index_url_parsing(self, mock_http_get): """Test whether it is trying to download the right file This passes the URL back via the etag return value just as a hack to check which URL was actually attempted. """ mock_http_get.side_effect = lambda url, etag, timeout: (None, url) repo_url = 'https://fake.url/fdroid/repo' index_url = 'https://fake.url/fdroid/repo/index-v1.jar' fingerprint_url = 'https://fake.url/fdroid/repo?fingerprint=' + GP_FINGERPRINT slash_url = 'https://fake.url/fdroid/repo//?fingerprint=' + GP_FINGERPRINT for url in (repo_url, index_url, fingerprint_url, slash_url): ilist = index.download_repo_index(url, verify_fingerprint=False) self.assertEqual(index_url, ilist[1]) # etag item used to return URL @patch('fdroidserver.net.download_using_mirrors') def test_download_repo_index_v2(self, mock_download_using_mirrors): mock_download_using_mirrors.side_effect = lambda mirrors: os.path.join( self.testdir, 'repo', os.path.basename(mirrors[0]['url']) ) os.chdir(self.testdir) signindex.config['keystore'] = os.path.join(basedir, 'keystore.jks') os.mkdir('repo') shutil.copy(basedir / 'repo' / 'entry.json', 'repo') shutil.copy(basedir / 'repo' / 'index-v2.json', 'repo') signindex.sign_index('repo', 'entry.json') repo_url = 'https://fake.url/fdroid/repo' entry_url = 'https://fake.url/fdroid/repo/entry.jar' index_url = 'https://fake.url/fdroid/repo/index-v2.json' fingerprint_url = 'https://fake.url/fdroid/repo?fingerprint=' + GP_FINGERPRINT slash_url = 'https://fake.url/fdroid/repo//?fingerprint=' + GP_FINGERPRINT for url in (repo_url, entry_url, index_url, fingerprint_url, slash_url): data, _ignored = index.download_repo_index_v2(url, verify_fingerprint=False) self.assertEqual(['repo', 'packages'], list(data.keys())) self.assertEqual( 'My First F-Droid Repo Demo', data['repo']['name']['en-US'] ) @patch('fdroidserver.net.download_using_mirrors') def test_download_repo_index_v2_bad_fingerprint(self, mock_download_using_mirrors): mock_download_using_mirrors.side_effect = lambda mirrors: os.path.join( self.testdir, 'repo', os.path.basename(mirrors[0]['url']) ) os.chdir(self.testdir) signindex.config['keystore'] = os.path.join(basedir, 'keystore.jks') os.mkdir('repo') shutil.copy(basedir / 'repo' / 'entry.json', 'repo') shutil.copy(basedir / 'repo' / 'index-v2.json', 'repo') signindex.sign_index('repo', 'entry.json') bad_fp = '0123456789001234567890012345678900123456789001234567890012345678' bad_fp_url = 'https://fake.url/fdroid/repo?fingerprint=' + bad_fp with self.assertRaises(fdroidserver.exception.VerificationException): data, _ignored = index.download_repo_index_v2(bad_fp_url) @patch('fdroidserver.net.download_using_mirrors') def test_download_repo_index_v2_entry_verify(self, mock_download_using_mirrors): def download_using_mirrors_def(mirrors): f = os.path.join(tempfile.mkdtemp(), os.path.basename(mirrors[0]['url'])) Path(f).write_text('not the entry.jar file contents') return f mock_download_using_mirrors.side_effect = download_using_mirrors_def url = 'https://fake.url/fdroid/repo?fingerprint=' + GP_FINGERPRINT with self.assertRaises(fdroidserver.exception.VerificationException): data, _ignored = index.download_repo_index_v2(url) @patch('fdroidserver.net.download_using_mirrors') def test_download_repo_index_v2_index_verify(self, mock_download_using_mirrors): def download_using_mirrors_def(mirrors): f = os.path.join(tempfile.mkdtemp(), os.path.basename(mirrors[0]['url'])) Path(f).write_text('not the index-v2.json file contents') return f mock_download_using_mirrors.side_effect = download_using_mirrors_def os.chdir(self.testdir) signindex.config['keystore'] = os.path.join(basedir, 'keystore.jks') os.mkdir('repo') shutil.copy(basedir / 'repo' / 'entry.json', 'repo') shutil.copy(basedir / 'repo' / 'index-v2.json', 'repo') signindex.sign_index('repo', 'entry.json') url = 'https://fake.url/fdroid/repo?fingerprint=' + GP_FINGERPRINT with self.assertRaises(fdroidserver.exception.VerificationException): data, _ignored = index.download_repo_index_v2(url) def test_sort_package_versions(self): i = [ { 'packageName': 'org.smssecure.smssecure', 'apkName': 'org.smssecure.smssecure_134.apk', 'signer': 'b33a601a9da97c82e6eb121eb6b90adab561f396602ec4dc8b0019fb587e2af6', 'versionCode': 134, }, { 'packageName': 'org.smssecure.smssecure', 'apkName': 'org.smssecure.smssecure_134_b30bb97.apk', 'signer': 'b30bb971af0d134866e158ec748fcd553df97c150f58b0a963190bbafbeb0868', 'versionCode': 134, }, { 'packageName': 'b075b32b4ef1e8a869e00edb136bd48e34a0382b85ced8628f164d1199584e4e' }, { 'packageName': '43af70d1aca437c2f9974c4634cc5abe45bdc4d5d71529ac4e553488d3bb3ff6' }, { 'packageName': 'org.smssecure.smssecure', 'apkName': 'org.smssecure.smssecure_135_b30bb97.apk', 'signer': 'b30bb971af0d134866e158ec748fcd553df97c150f58b0a963190bbafbeb0868', 'versionCode': 135, }, { 'packageName': 'org.smssecure.smssecure', 'apkName': 'org.smssecure.smssecure_135.apk', 'signer': 'b33a601a9da97c82e6eb121eb6b90adab561f396602ec4dc8b0019fb587e2af6', 'versionCode': 135, }, { 'packageName': 'org.smssecure.smssecure', 'apkName': 'org.smssecure.smssecure_133.apk', 'signer': 'b33a601a9da97c82e6eb121eb6b90adab561f396602ec4dc8b0019fb587e2af6', 'versionCode': 133, }, { 'packageName': 'org.smssecure.smssecure', 'apkName': 'smssecure-weird-version.apk', 'signer': '99ff99ff99ff99ff99ff99ff99ff99ff99ff99ff99ff99ff99ff99ff99ff99ff', 'versionCode': 133, }, { 'packageName': 'org.smssecure.smssecure', 'apkName': 'smssecure-custom.apk', 'signer': '1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', 'versionCode': 133, }, { 'packageName': 'org.smssecure.smssecure', 'apkName': 'smssecure-new-custom.apk', 'signer': '1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', 'versionCode': 135, }, ] o = [ { 'packageName': '43af70d1aca437c2f9974c4634cc5abe45bdc4d5d71529ac4e553488d3bb3ff6' }, { 'packageName': 'b075b32b4ef1e8a869e00edb136bd48e34a0382b85ced8628f164d1199584e4e' }, # app test data # # packages with reproducible developer signature { 'packageName': 'org.smssecure.smssecure', 'apkName': 'org.smssecure.smssecure_135_b30bb97.apk', 'signer': 'b30bb971af0d134866e158ec748fcd553df97c150f58b0a963190bbafbeb0868', 'versionCode': 135, }, { 'packageName': 'org.smssecure.smssecure', 'apkName': 'org.smssecure.smssecure_134_b30bb97.apk', 'signer': 'b30bb971af0d134866e158ec748fcd553df97c150f58b0a963190bbafbeb0868', 'versionCode': 134, }, # # packages build and signed by fdroid { 'packageName': 'org.smssecure.smssecure', 'apkName': 'org.smssecure.smssecure_135.apk', 'signer': 'b33a601a9da97c82e6eb121eb6b90adab561f396602ec4dc8b0019fb587e2af6', 'versionCode': 135, }, { 'packageName': 'org.smssecure.smssecure', 'apkName': 'org.smssecure.smssecure_134.apk', 'signer': 'b33a601a9da97c82e6eb121eb6b90adab561f396602ec4dc8b0019fb587e2af6', 'versionCode': 134, }, { 'packageName': 'org.smssecure.smssecure', 'apkName': 'org.smssecure.smssecure_133.apk', 'signer': 'b33a601a9da97c82e6eb121eb6b90adab561f396602ec4dc8b0019fb587e2af6', 'versionCode': 133, }, # # packages signed with unkown keys { 'packageName': 'org.smssecure.smssecure', 'apkName': 'smssecure-new-custom.apk', 'signer': '1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', 'versionCode': 135, }, { 'packageName': 'org.smssecure.smssecure', 'apkName': 'smssecure-custom.apk', 'signer': '1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', 'versionCode': 133, }, { 'packageName': 'org.smssecure.smssecure', 'apkName': 'smssecure-weird-version.apk', 'signer': '99ff99ff99ff99ff99ff99ff99ff99ff99ff99ff99ff99ff99ff99ff99ff99ff', 'versionCode': 133, }, ] common.config = {} common.fill_config_defaults(common.config) publish.config = common.config publish.config['keystorepass'] = '123456' publish.config['keypass'] = '123456' publish.config['keystore'] = os.path.join(os.getcwd(), 'dummy-keystore.jks') publish.config['repo_keyalias'] = 'repokey' testsmetadir = os.path.join(os.getcwd(), 'metadata') with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): shutil.copytree(testsmetadir, 'metadata') sigkeyfps = { "org.smssecure.smssecure": { "signer": "b33a601a9da97c82e6eb121eb6b90adab561f396602ec4dc8b0019fb587e2af6" } } os.mkdir('repo') jarfile = 'repo/signer-index.jar' with zipfile.ZipFile(jarfile, 'w', zipfile.ZIP_DEFLATED) as jar: jar.writestr('signer-index.json', json.dumps(sigkeyfps)) publish.sign_sig_key_fingerprint_list(jarfile) common.write_config_file('') index.sort_package_versions(i, common.load_publish_signer_fingerprints()) self.maxDiff = None self.assertEqual(json.dumps(i, indent=2), json.dumps(o, indent=2)) # and test it still works with get_first_signer_certificate outdir = os.path.join(self.testdir, 'index-signer-fingerprints') os.mkdir(outdir) common.apk_extract_signatures(jarfile, outdir) certs = glob.glob(os.path.join(outdir, '*.RSA')) with open(certs[0], 'rb') as fp: self.assertEqual( common.get_certificate(fp.read()), common.get_first_signer_certificate(jarfile), ) def test_make_v0_repo_only(self): os.chdir(self.testdir) os.mkdir('repo') repo_icons_dir = os.path.join('repo', 'icons') self.assertFalse(os.path.isdir(repo_icons_dir)) repodict = { 'address': 'https://example.com/fdroid/repo', 'description': 'This is just a test', 'icon': 'blahblah', 'name': 'test', 'timestamp': datetime.datetime.now(), 'version': 12, } requestsdict = {'install': [], 'uninstall': []} common.config['repo_pubkey'] = 'ffffffffffffffffffffffffffffffffff' index.make_v0({}, [], 'repo', repodict, requestsdict, {}) self.assertTrue(os.path.isdir(repo_icons_dir)) self.assertTrue( os.path.exists( os.path.join(repo_icons_dir, common.default_config['repo_icon']) ) ) self.assertTrue(os.path.exists(os.path.join('repo', 'index.xml'))) def test_make_v0(self): os.chdir(self.testdir) os.mkdir('metadata') os.mkdir('repo') metadatafile = 'metadata/info.zwanenburg.caffeinetile.yml' shutil.copy(os.path.join(basedir, metadatafile), metadatafile) repo_icons_dir = os.path.join('repo', 'icons') self.assertFalse(os.path.isdir(repo_icons_dir)) repodict = { 'address': 'https://example.com/fdroid/repo', 'description': 'This is just a test', 'icon': 'blahblah', 'mirrors': [ {'isPrimary': True, 'url': 'https://example.com/fdroid/repo'}, {'extra': 'data', 'url': 'http://one/fdroid/repo'}, {'url': 'http://two/fdroid/repo'}, ], 'name': 'test', 'timestamp': datetime.datetime.now(), 'version': 12, } app = fdroidserver.metadata.parse_metadata(metadatafile) app['icon'] = 'info.zwanenburg.caffeinetile.4.xml' app['CurrentVersionCode'] = 4 apps = {app.id: app} orig_apps = copy.deepcopy(apps) apk = { 'hash': 'dbbdd7deadb038862f426b71efe4a64df8c3edf25d669e935f349510e16f65db', 'hashType': 'sha256', 'uses-permission': [['android.permission.WAKE_LOCK', None]], 'uses-permission-sdk-23': [], 'features': [], 'icons_src': { '160': 'res/drawable/ic_coffee_on.xml', '-1': 'res/drawable/ic_coffee_on.xml', }, 'icons': {'160': 'info.zwanenburg.caffeinetile.4.xml'}, 'antiFeatures': ['KnownVuln'], 'packageName': 'info.zwanenburg.caffeinetile', 'versionCode': 4, 'name': 'Caffeine Tile', 'versionName': '1.3', 'minSdkVersion': 24, 'targetSdkVersion': 25, 'sig': '03f9b2f848d22fd1d8d1331e8b1b486d', 'signer': '51cfa5c8a743833ad89acf81cb755936876a5c8b8eca54d1ffdcec0cdca25d0e', 'size': 11740, 'apkName': 'info.zwanenburg.caffeinetile_4.apk', 'icon': 'info.zwanenburg.caffeinetile.4.xml', 'added': datetime.datetime.fromtimestamp(1539122400), } requestsdict = {'install': [], 'uninstall': []} common.config['repo_pubkey'] = 'ffffffffffffffffffffffffffffffffff' common.config['make_current_version_link'] = True index.make_v0(apps, [apk], 'repo', repodict, requestsdict, {}) self.assertTrue(os.path.isdir(repo_icons_dir)) self.assertTrue( os.path.exists( os.path.join(repo_icons_dir, common.default_config['repo_icon']) ) ) self.assertTrue(os.path.exists(os.path.join('repo', 'index.xml'))) self.assertEqual(orig_apps, apps, "apps was modified when building the index") def test_v0_invalid_config_exception(self): """Index v0 needs additional config values when using --nosign index.xml aka Index v0 includes the full repo public key in the XML itself. So when running `fdroid update --nosign`, there needs to be either repo_pubkey or a full keystore config present. """ os.chdir(self.testdir) os.mkdir('repo') repo_icons_dir = os.path.join('repo', 'icons') self.assertFalse(os.path.isdir(repo_icons_dir)) repodict = { 'address': 'https://example.com/fdroid/repo', 'description': 'This is just a test', 'icon': 'blahblah', 'name': 'test', 'timestamp': datetime.datetime.now(), 'version': 12, } requestsdict = {'install': [], 'uninstall': []} common.options.nosign = False with self.assertRaises(fdroidserver.exception.FDroidException): index.make_v0({}, [], 'repo', repodict, requestsdict, {}) common.options.nosign = True with self.assertRaises(fdroidserver.exception.FDroidException): index.make_v0({}, [], 'repo', repodict, requestsdict, {}) common.config['repo_pubkey'] = 'ffffffffffffffffffffffffffffffffff' self.assertFalse(os.path.exists(os.path.join('repo', 'index.xml'))) self.assertFalse(os.path.exists(os.path.join('repo', 'index_unsigned.jar'))) self.assertFalse(os.path.exists(os.path.join('repo', 'index.jar'))) index.make_v0({}, [], 'repo', repodict, requestsdict, {}) self.assertTrue(os.path.exists(os.path.join('repo', 'index.xml'))) self.assertTrue(os.path.exists(os.path.join('repo', 'index_unsigned.jar'))) self.assertFalse(os.path.exists(os.path.join('repo', 'index.jar'))) def test_make_v1_with_mirrors(self): os.chdir(self.testdir) os.mkdir('repo') repodict = { 'address': 'https://example.com/fdroid/repo', 'mirrors': [ {'isPrimary': True, 'url': 'https://example.com/fdroid/repo'}, {'extra': 'data', 'url': 'http://one/fdroid/repo'}, {'url': 'http://two/fdroid/repo'}, ], } index.make_v1({}, [], 'repo', repodict, {}, {}) index_v1 = Path('repo/index-v1.json') self.assertTrue(index_v1.exists()) with index_v1.open() as fp: self.assertEqual( json.load(fp)['repo']['mirrors'], ['http://one/fdroid/repo', 'http://two/fdroid/repo'], ) def test_github_get_mirror_service_urls(self): for url in [ 'git@github.com:foo/bar', 'git@github.com:foo/bar.git', 'https://github.com/foo/bar', 'https://github.com/foo/bar.git', ]: self.assertEqual( ['https://raw.githubusercontent.com/foo/bar/master/fdroid'], index.get_mirror_service_urls({"url": url}), ) @patch.dict(os.environ, clear=True) def test_gitlab_get_mirror_service_urls(self): with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): git_mirror_path = Path('git-mirror/fdroid') git_mirror_path.mkdir(parents=True) ci_job_id = '12345678' artifacts_url = ( 'https://group.gitlab.io/-/project/-/jobs/%s/artifacts/public/fdroid' % ci_job_id ) with (git_mirror_path / 'placeholder').open('w') as fp: fp.write(' ') for url in [ 'git@gitlab.com:group/project', 'git@gitlab.com:group/project.git', 'https://gitlab.com/group/project', 'https://gitlab.com/group/project.git', ]: with patch('fdroidserver.common.GITLAB_COM_PAGES_MAX_SIZE', 1000): expected = [ 'https://group.gitlab.io/project/fdroid', 'https://gitlab.com/group/project/-/raw/master/fdroid', ] self.assertEqual( expected, index.get_mirror_service_urls({"url": url}), ) with patch.dict(os.environ, clear=True): os.environ['CI_JOB_ID'] = ci_job_id self.assertEqual( expected + [artifacts_url], index.get_mirror_service_urls({"url": url}), ) with patch('fdroidserver.common.GITLAB_COM_PAGES_MAX_SIZE', 10): expected = [ 'https://gitlab.com/group/project/-/raw/master/fdroid', ] self.assertEqual( expected, index.get_mirror_service_urls({"url": url}), ) with patch.dict(os.environ, clear=True): os.environ['CI_JOB_ID'] = ci_job_id self.assertEqual( expected + [artifacts_url], index.get_mirror_service_urls({"url": url}), ) def test_make_website(self): os.chdir(self.testdir) os.mkdir('metadata') os.mkdir('repo') repodict = { 'address': 'https://example.com/fdroid/repo', 'description': 'This is just a test', 'icon': 'blahblah', 'name': 'test', 'timestamp': datetime.datetime.now(), 'version': 12, } common.config['repo_pubkey'] = 'ffffffffffffffffffffffffffffffffff' index.make_website([], "repo", repodict) self.assertTrue(os.path.exists(os.path.join('repo', 'index.html'))) self.assertTrue(os.path.exists(os.path.join('repo', 'index.css'))) self.assertTrue(os.path.exists(os.path.join('repo', 'index.png'))) try: from html5print import CSSBeautifier, HTMLBeautifier except ImportError: print('WARNING: skipping rest of test since html5print is missing!') return with open(os.path.join("repo", "index.html")) as f: html = f.read() pretty_html = HTMLBeautifier.beautify(html) self.maxDiff = None self.assertEqual(html, pretty_html) with open(os.path.join("repo", "index.css")) as f: css = f.read() pretty_css = CSSBeautifier.beautify(css) self.maxDiff = None self.assertEqual(css, pretty_css) def test_sort_package_versions_with_invalid(self): i = [ { 'packageName': 'org.smssecure.smssecure', 'apkName': 'smssecure-custom.fake', 'signer': None, 'versionCode': 11111, } ] index.sort_package_versions(i, common.load_publish_signer_fingerprints()) def test_package_metadata(self): """A smoke check and format check of index.package_metadata()""" def _kn(key): return key[0].lower() + key[1:] apps = fdroidserver.metadata.read_metadata() update.insert_localized_app_metadata(apps) # smoke check all metadata files for appid, app in apps.items(): metadata = index.package_metadata(app, 'repo') for k in ('Description', 'Name', 'Summary', 'video'): if app.get(k): self.assertTrue(isinstance(metadata[_kn(k)], dict)) for k in ('AuthorWebSite', 'IssueTracker', 'Translation', 'WebSite'): if app.get(k): self.assertTrue(isinstance(metadata[_kn(k)], str)) # make sure these known values were properly parsed and included appid = 'info.guardianproject.urzip' app = apps[appid] metadata = index.package_metadata(app, 'repo') # files self.assertEqual( os.path.getsize(f'repo/{appid}/en-US/featureGraphic.png'), metadata['featureGraphic']['en-US']['size'], ) self.assertEqual( os.path.getsize(f'repo/{appid}/en-US/icon.png'), metadata['icon']['en-US']['size'], ) # localized strings self.assertEqual({'en-US': 'title'}, metadata['name']) self.assertEqual({'en-US': 'video'}, metadata['video']) # strings self.assertEqual( 'https://dev.guardianproject.info/projects/urzip', metadata['webSite'], ) def test_add_mirrors_to_repodict(self): """Test based on the contents of tests/config.yml""" repodict = {'address': common.config['repo_url']} index.add_mirrors_to_repodict('repo', repodict) self.assertEqual( repodict['mirrors'], [ {'isPrimary': True, 'url': 'https://MyFirstFDroidRepo.org/fdroid/repo'}, {'url': 'http://foobarfoobarfoobar.onion/fdroid/repo'}, {'url': 'https://foo.bar/fdroid/repo'}, ], ) def test_custom_config_yml_with_mirrors(self): """Test based on custom contents of config.yml""" os.chdir(self.testdir) repo_url = 'https://example.com/fdroid/repo' c = {'repo_url': repo_url, 'mirrors': ['http://one/fdroid']} with open(common.CONFIG_FILE, 'w', encoding='utf-8') as fp: yaml.dump(c, fp) common.config = None common.read_config() repodict = {'address': common.config['repo_url']} index.add_mirrors_to_repodict('repo', repodict) self.assertEqual( repodict['mirrors'], [ {'url': 'https://example.com/fdroid/repo', 'isPrimary': True}, {'url': 'http://one/fdroid/repo'}, ], ) def test_no_mirrors_config(self): common.config = dict() repodict = {'address': 'https://example.com/fdroid/repo'} index.add_mirrors_to_repodict('repo', repodict) self.assertFalse('mirrors' in repodict) def test_add_metadata_to_canonical_in_mirrors_config(self): """It is possible to add extra metadata to the canonical URL""" common.config = { 'repo_url': 'http://one/fdroid/repo', 'mirrors': [ {'url': 'http://one/fdroid', 'extra': 'data'}, {'url': 'http://two/fdroid'}, ], } repodict = {'address': common.config['repo_url']} index.add_mirrors_to_repodict('repo', repodict) self.assertEqual( repodict['mirrors'], [ {'extra': 'data', 'isPrimary': True, 'url': 'http://one/fdroid/repo'}, {'url': 'http://two/fdroid/repo'}, ], ) def test_duplicate_primary_in_mirrors_config(self): """There can be only one primary mirror aka canonical URL""" common.config = { 'repo_url': 'http://one/fdroid', 'mirrors': [ {'url': 'http://one/fdroid', 'countryCode': 'SA'}, {'url': 'http://two/fdroid'}, {'url': 'http://one/fdroid'}, ], } repodict = {'address': common.config['repo_url']} with self.assertRaises(fdroidserver.exception.FDroidException): index.add_mirrors_to_repodict('repo', repodict) def test_bad_type_in_mirrors_config(self): for i in (1, 2.3, b'asdf'): common.config = {'mirrors': i} repodict = dict() with self.assertRaises(fdroidserver.exception.FDroidException): index.add_mirrors_to_repodict('repo', repodict) def test_load_mirrors_config_from_file(self): # empty the dict for *.config, see setUp() for k in sorted(common.config.keys()): del common.config[k] os.chdir(self.testdir) os.mkdir('config') primary = 'https://primary.com/fdroid/repo' mirror = 'https://mirror.com/fdroid' with open('config/mirrors.yml', 'w') as fp: yaml.dump([{'url': mirror}], fp) repodict = {'address': primary} index.add_mirrors_to_repodict('repo', repodict) self.assertEqual( repodict['mirrors'], [ {'isPrimary': True, 'url': primary}, {'url': mirror + '/repo'}, ], ) def test_error_when_load_mirrors_from_config_and_file(self): # empty the dict for *.config, see setUp() for k in sorted(common.config.keys()): del common.config[k] os.chdir(self.testdir) os.mkdir('config') with open('config/mirrors.yml', 'w') as fp: yaml.dump([{'url': 'https://foo.com'}], fp) repodict = { 'address': 'https://foo.com', 'mirrors': {'url': 'http://two/fdroid/repo'}, } with self.assertRaises(fdroidserver.exception.FDroidException): index.add_mirrors_to_repodict('repo', repodict) def test_erroneous_isPrimary_in_mirrors_config(self): """There can be only one primary mirror aka canonical URL""" common.config = { 'repo_url': 'http://one/fdroid', 'mirrors': [ {'url': 'http://one/fdroid', 'countryCode': 'SA'}, {'url': 'http://two/fdroid', 'isPrimary': True}, ], } repodict = {'address': common.config['repo_url']} with self.assertRaises(fdroidserver.exception.FDroidException): index.add_mirrors_to_repodict('repo', repodict) class AltstoreIndexTest(unittest.TestCase): def test_make_altstore(self): self.maxDiff = None apps = { "app.fake": { "AutoName": "Fake App", "AuthorName": "Fake Author", "iconv2": {"en_US": "fake_icon.png"}, } } apks = [ { "packageName": "app.fake", "apkName": "app.fake_123.ipa", "versionName": "v123", "added": datetime.datetime(2000, 2, 2, 2, 2, 2), "size": 123, "ipa_MinimumOSVersion": "10.0", "ipa_DTPlatformVersion": "12.0", "ipa_permissions": [ "NSCameraUsageDescription", "NSDocumentsFolderUsageDescription", ], "ipa_entitlements": [ "com.apple.developer.team-identifier", "com.apple.developer.web-browser", "keychain-access-groups", ], }, ] config = { "repo_icon": "fake_repo_icon.png", "repo_name": "fake_repo", "repo_url": "gopher://fake-repo.com/fdroid/repo", } with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): repodir = Path(tmpdir) / 'repo' repodir.mkdir() (repodir / "fake.ipa").touch() fdroidserver.index.make_altstore( apps, apks, config, repodir, True, ) with open(repodir / "altstore-index.json", 'r') as f: self.assertDictEqual( { "apps": [ { "appPermissions": { "entitlements": [ 'com.apple.developer.team-identifier', 'com.apple.developer.web-browser', 'keychain-access-groups', ], 'privacy': [ 'NSCameraUsageDescription', 'NSDocumentsFolderUsageDescription', ], }, 'bundleIdentifier': 'app.fake', 'developerName': 'Fake Author', 'iconURL': 'gopher://fake-repo.com/fdroid/repo', 'localizedDescription': '', 'name': 'Fake App', 'screenshots': [], 'versions': [ { 'date': '2000-02-02T02:02:02', 'downloadURL': 'gopher://fake-repo.com/fdroid/repo/app.fake_123.ipa', 'maxOSVersion': '12.0', 'minOSVersion': '10.0', 'size': 123, 'version': 'v123', } ], }, ], 'name': 'fake_repo', 'news': [], }, json.load(f), ) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/tests/test_init.py0000755000175000017500000000372314770502071016450 0ustar00hanshans#!/usr/bin/env python3 import os import pathlib import shutil import sys import unittest import fdroidserver.common import fdroidserver.init from .shared_test_code import mkdtemp basedir = pathlib.Path(__file__).parent class InitTest(unittest.TestCase): '''fdroidserver/init.py''' def setUp(self): fdroidserver.common.config = None fdroidserver.init.config = None self._td = mkdtemp() self.testdir = self._td.name os.chdir(self.testdir) def tearDown(self): os.chdir(basedir) self._td.cleanup() def test_disable_in_config(self): test = 'mysupersecrets' configfile = pathlib.Path(fdroidserver.common.CONFIG_FILE) configfile.write_text(f'keystore: NONE\nkeypass: {test}\n', encoding='utf-8') configfile.chmod(0o600) config = fdroidserver.common.read_config() self.assertEqual('NONE', config['keystore']) self.assertEqual(test, config['keypass']) fdroidserver.init.disable_in_config('keypass', 'comment') self.assertIn('#keypass:', configfile.read_text()) fdroidserver.common.config = None config = fdroidserver.common.read_config() self.assertIsNone(config.get('keypass')) @unittest.skipIf(os.name == 'nt', "calling main() like this hangs on Windows") def test_main_in_empty_dir(self): """Test that `fdroid init` will find apksigner and add it to the config""" shutil.copy(basedir / 'keystore.jks', self.testdir) bindir = os.path.join(os.getcwd(), 'bin') os.mkdir(bindir) apksigner = os.path.join(bindir, 'apksigner') open(apksigner, 'w').close() os.chmod(apksigner, 0o755) # nosec B103 sys.argv = ['fdroid init', '--keystore', 'keystore.jks', '--repo-keyalias=sova'] with unittest.mock.patch.dict(os.environ, {'PATH': bindir}): fdroidserver.init.main() self.assertEqual(apksigner, fdroidserver.init.config.get('apksigner')) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/tests/test_install.py0000755000175000017500000002405114770502071017150 0ustar00hanshans#!/usr/bin/env python3 import os import textwrap import unittest from pathlib import Path from unittest.mock import Mock, patch import fdroidserver from fdroidserver import common, install from fdroidserver.exception import BuildException, FDroidException @unittest.skipIf(os.uname().machine == 's390x', 'adb is not ported to s390x') class InstallTest(unittest.TestCase): '''fdroidserver/install.py''' def tearDown(self): common.config = None def test_devices(self): config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config try: config['adb'] = fdroidserver.common.find_sdk_tools_cmd('adb') except FDroidException as e: self.skipTest(f'Skipping test because: {e}') self.assertTrue(os.path.exists(config['adb'])) self.assertTrue(os.path.isfile(config['adb'])) devices = fdroidserver.install.devices() self.assertIsInstance(devices, list, 'install.devices() did not return a list!') for device in devices: self.assertIsInstance(device, str) def test_devices_fail(self): common.config = dict() common.fill_config_defaults(common.config) common.config['adb'] = '/bin/false' with self.assertRaises(FDroidException): fdroidserver.install.devices() def test_devices_fail_nonexistent(self): """This is mostly just to document this strange difference in behavior""" common.config = dict() common.fill_config_defaults(common.config) common.config['adb'] = '/nonexistent' with self.assertRaises(BuildException): fdroidserver.install.devices() @patch('fdroidserver.common.SdkToolsPopen') def test_devices_with_mock_none(self, mock_SdkToolsPopen): p = Mock() mock_SdkToolsPopen.return_value = p p.output = 'List of devices attached\n\n' p.returncode = 0 common.config = dict() common.fill_config_defaults(common.config) self.assertEqual([], fdroidserver.install.devices()) @patch('fdroidserver.common.SdkToolsPopen') def test_devices_with_mock_one(self, mock_SdkToolsPopen): p = Mock() mock_SdkToolsPopen.return_value = p p.output = 'List of devices attached\n05995813\tdevice\n\n' p.returncode = 0 common.config = dict() common.fill_config_defaults(common.config) self.assertEqual(['05995813'], fdroidserver.install.devices()) @patch('fdroidserver.common.SdkToolsPopen') def test_devices_with_mock_many(self, mock_SdkToolsPopen): p = Mock() mock_SdkToolsPopen.return_value = p p.output = textwrap.dedent( """* daemon not running; starting now at tcp:5037 * daemon started successfully List of devices attached RZCT809FTQM device 05995813 device emulator-5556 device emulator-5554 unauthorized 0a388e93 no permissions (missing udev rules? user is in the plugdev group); see [http://developer.android.com/tools/device.html] 986AY133QL device 09301JEC215064 device 015d165c3010200e device 4DCESKVGUC85VOTO device """ ) p.returncode = 0 common.config = dict() common.fill_config_defaults(common.config) self.assertEqual( [ 'RZCT809FTQM', '05995813', 'emulator-5556', '986AY133QL', '09301JEC215064', '015d165c3010200e', '4DCESKVGUC85VOTO', ], fdroidserver.install.devices(), ) @patch('fdroidserver.common.SdkToolsPopen') def test_devices_with_mock_error(self, mock_SdkToolsPopen): p = Mock() mock_SdkToolsPopen.return_value = p p.output = textwrap.dedent( """* daemon not running. starting it now on port 5037 * * daemon started successfully * ** daemon still not running error: cannot connect to daemon """ ) p.returncode = 0 common.config = dict() common.fill_config_defaults(common.config) self.assertEqual([], fdroidserver.install.devices()) @patch('fdroidserver.common.SdkToolsPopen') def test_devices_with_mock_no_permissions(self, mock_SdkToolsPopen): p = Mock() mock_SdkToolsPopen.return_value = p p.output = textwrap.dedent( """List of devices attached ???????????????? no permissions """ ) p.returncode = 0 common.config = dict() common.fill_config_defaults(common.config) self.assertEqual([], fdroidserver.install.devices()) @patch('fdroidserver.common.SdkToolsPopen') def test_devices_with_mock_unauthorized(self, mock_SdkToolsPopen): p = Mock() mock_SdkToolsPopen.return_value = p p.output = textwrap.dedent( """List of devices attached aeef5e4e unauthorized """ ) p.returncode = 0 common.config = dict() common.fill_config_defaults(common.config) self.assertEqual([], fdroidserver.install.devices()) @patch('fdroidserver.common.SdkToolsPopen') def test_devices_with_mock_no_permissions_with_serial(self, mock_SdkToolsPopen): p = Mock() mock_SdkToolsPopen.return_value = p p.output = textwrap.dedent( """List of devices attached 4DCESKVGUC85VOTO no permissions (missing udev rules? user is in the plugdev group); see [http://developer.android.com/tools/device.html] """ ) p.returncode = 0 common.config = dict() common.fill_config_defaults(common.config) self.assertEqual([], fdroidserver.install.devices()) @staticmethod def _download_raise(privacy_mode): raise Exception('fake failed download') @patch('fdroidserver.install.download_apk') @patch('fdroidserver.install.download_fdroid_apk') @patch('fdroidserver.install.download_fdroid_apk_from_github') @patch('fdroidserver.install.download_fdroid_apk_from_ipns') @patch('fdroidserver.install.download_fdroid_apk_from_maven') def test_install_fdroid_apk_privacy_mode_true( self, maven, ipns, github, download_fdroid_apk, download_apk ): download_apk.side_effect = self._download_raise download_fdroid_apk.side_effect = self._download_raise github.side_effect = self._download_raise ipns.side_effect = self._download_raise maven.side_effect = self._download_raise fdroidserver.common.config = {'jarsigner': 'fakepath'} install.install_fdroid_apk(privacy_mode=True) download_apk.assert_not_called() download_fdroid_apk.assert_not_called() github.assert_called_once() ipns.assert_called_once() maven.assert_called_once() @patch('fdroidserver.install.download_apk') @patch('fdroidserver.install.download_fdroid_apk') @patch('fdroidserver.install.download_fdroid_apk_from_github') @patch('fdroidserver.install.download_fdroid_apk_from_ipns') @patch('fdroidserver.install.download_fdroid_apk_from_maven') def test_install_fdroid_apk_privacy_mode_false( self, maven, ipns, github, download_fdroid_apk, download_apk ): download_apk.side_effect = self._download_raise download_fdroid_apk.side_effect = self._download_raise github.side_effect = self._download_raise ipns.side_effect = self._download_raise maven.side_effect = self._download_raise fdroidserver.common.config = {'jarsigner': 'fakepath'} install.install_fdroid_apk(privacy_mode=False) download_apk.assert_called_once() download_fdroid_apk.assert_called_once() github.assert_called_once() ipns.assert_called_once() maven.assert_called_once() @patch('fdroidserver.install.download_apk') @patch('fdroidserver.install.download_fdroid_apk') @patch('fdroidserver.install.download_fdroid_apk_from_github') @patch('fdroidserver.install.download_fdroid_apk_from_ipns') @patch('fdroidserver.install.download_fdroid_apk_from_maven') @patch('locale.getlocale', lambda: ('zh_CN', 'UTF-8')) def test_install_fdroid_apk_privacy_mode_locale_auto( self, maven, ipns, github, download_fdroid_apk, download_apk ): download_apk.side_effect = self._download_raise download_fdroid_apk.side_effect = self._download_raise github.side_effect = self._download_raise ipns.side_effect = self._download_raise maven.side_effect = self._download_raise fdroidserver.common.config = {'jarsigner': 'fakepath'} install.install_fdroid_apk(privacy_mode=None) download_apk.assert_not_called() download_fdroid_apk.assert_not_called() github.assert_called_once() ipns.assert_called_once() maven.assert_called_once() @patch('fdroidserver.net.download_using_mirrors', lambda m: 'testvalue') def test_download_fdroid_apk_smokecheck(self): self.assertEqual('testvalue', install.download_fdroid_apk()) @unittest.skipUnless(os.getenv('test_download_fdroid_apk'), 'requires net access') def test_download_fdroid_apk(self): f = install.download_fdroid_apk() self.assertTrue(Path(f).exists()) @unittest.skipUnless(os.getenv('test_download_fdroid_apk'), 'requires net access') def test_download_fdroid_apk_from_maven(self): f = install.download_fdroid_apk_from_maven() self.assertTrue(Path(f).exists()) @unittest.skipUnless(os.getenv('test_download_fdroid_apk'), 'requires net access') def test_download_fdroid_apk_from_ipns(self): f = install.download_fdroid_apk_from_ipns() self.assertTrue(Path(f).exists()) @unittest.skipUnless(os.getenv('test_download_fdroid_apk'), 'requires net access') def test_download_fdroid_apk_from_github(self): f = install.download_fdroid_apk_from_github() self.assertTrue(Path(f).exists()) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/tests/test_integration.py0000755000175000017500000020705714770502071020036 0ustar00hanshansimport itertools import os import platform import re import shlex import shutil import subprocess import sys import threading import unittest from datetime import datetime, timezone from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer from pathlib import Path try: from androguard.core.bytecodes.apk import get_apkid # androguard <4 except ModuleNotFoundError: from androguard.core.apk import get_apkid from fdroidserver._yaml import yaml, yaml_dumper from .shared_test_code import mkdir_testfiles # TODO: port generic tests that use index.xml to index-v2 (test that # explicitly test index-v0 should still use index.xml) basedir = Path(__file__).parent FILES = basedir try: WORKSPACE = Path(os.environ["WORKSPACE"]) except KeyError: WORKSPACE = basedir.parent from fdroidserver import common conf = {"sdk_path": os.getenv("ANDROID_HOME", "")} common.find_apksigner(conf) USE_APKSIGNER = "apksigner" in conf @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') class IntegrationTest(unittest.TestCase): @classmethod def setUpClass(cls): try: cls.fdroid_cmd = shlex.split(os.environ["fdroid"]) except KeyError: cls.fdroid_cmd = [WORKSPACE / "fdroid"] os.environ.update( { "GIT_AUTHOR_NAME": "Test", "GIT_AUTHOR_EMAIL": "no@mail", "GIT_COMMITTER_NAME": "Test", "GIT_COMMITTER_EMAIL": "no@mail", "GIT_ALLOW_PROTOCOL": "file:https", } ) def setUp(self): self.prev_cwd = Path() self.testdir = mkdir_testfiles(WORKSPACE, self) self.tmp_repo_root = self.testdir / "fdroid" self.tmp_repo_root.mkdir(parents=True) os.chdir(self.tmp_repo_root) def tearDown(self): os.chdir(self.prev_cwd) shutil.rmtree(self.testdir) def assert_run(self, *args, **kwargs): proc = subprocess.run(*args, **kwargs) self.assertEqual(proc.returncode, 0) return proc def assert_run_fail(self, *args, **kwargs): proc = subprocess.run(*args, **kwargs) self.assertNotEqual(proc.returncode, 0) return proc @staticmethod def update_yaml(path, items, replace=False): """Update a .yml file, e.g. config.yml, with the given items.""" doc = {} if not replace: try: with open(path) as f: doc = yaml.load(f) except FileNotFoundError: pass doc.update(items) with open(path, "w") as f: yaml_dumper.dump(doc, f) @staticmethod def remove_lines(path, unwanted_strings): """Remove the lines in the path that contain the unwanted strings.""" def contains_unwanted(line, unwanted_strings): for str in unwanted_strings: if str in line: return True return False with open(path) as f: filtered = [ line for line in f if not contains_unwanted(line, unwanted_strings) ] with open(path, "w") as f: for line in filtered: f.write(line) @staticmethod def copy_apks_into_repo(): def to_skip(name): for str in [ "unaligned", "unsigned", "badsig", "badcert", "bad-unicode", "janus.apk", ]: if str in name: return True return False for f in FILES.glob("*.apk"): if not to_skip(f.name): appid, versionCode, _ignored = get_apkid(f) shutil.copy( f, Path("repo") / common.get_release_apk_filename(appid, versionCode), ) @staticmethod def create_fake_android_home(path): (path / "tools").mkdir() (path / "platform-tools").mkdir() (path / "build-tools/34.0.0").mkdir(parents=True) (path / "build-tools/34.0.0/aapt").touch() def fdroid_init_with_prebuilt_keystore(self, keystore_path=FILES / "keystore.jks"): self.assert_run( self.fdroid_cmd + ["init", "--keystore", keystore_path, "--repo-keyalias", "sova"] ) self.update_yaml( common.CONFIG_FILE, { "keystorepass": "r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=", "keypass": "r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=", }, ) @unittest.skipUnless(USE_APKSIGNER, "requires apksigner") def test_run_process_when_building_and_signing_are_on_separate_machines(self): shutil.copy(FILES / "keystore.jks", "keystore.jks") self.fdroid_init_with_prebuilt_keystore("keystore.jks") self.update_yaml( common.CONFIG_FILE, { "make_current_version_link": True, "keydname": "CN=Birdman, OU=Cell, O=Alcatraz, L=Alcatraz, S=California, C=US", }, ) Path("metadata").mkdir() shutil.copy(FILES / "metadata/info.guardianproject.urzip.yml", "metadata") Path("unsigned").mkdir() shutil.copy( FILES / "urzip-release-unsigned.apk", "unsigned/info.guardianproject.urzip_100.apk", ) self.assert_run(self.fdroid_cmd + ["publish", "--verbose"]) self.assert_run(self.fdroid_cmd + ["update", "--verbose", "--nosign"]) self.assert_run(self.fdroid_cmd + ["signindex", "--verbose"]) self.assertIn( '', Path("repo/index.xml").read_text(), ) self.assertTrue(Path("repo/index.jar").is_file()) self.assertTrue(Path("repo/index-v1.jar").is_file()) apkcache = Path("tmp/apkcache.json") self.assertTrue(apkcache.is_file()) self.assertTrue(apkcache.stat().st_size > 0) self.assertTrue(Path("urzip.apk").is_symlink()) def test_utf8_metadata(self): self.fdroid_init_with_prebuilt_keystore() self.update_yaml( common.CONFIG_FILE, { "repo_description": "获取已安装在您的设备上的应用的", "mirrors": ["https://foo.bar/fdroid", "http://secret.onion/fdroid"], }, ) shutil.copy(FILES / "urzip.apk", "repo") shutil.copy(FILES / "bad-unicode-πÇÇ现代通用字-български-عربي1.apk", "repo") Path("metadata").mkdir() shutil.copy(FILES / "metadata/info.guardianproject.urzip.yml", "metadata") self.assert_run(self.fdroid_cmd + ["readmeta"]) self.assert_run(self.fdroid_cmd + ["update"]) def test_copy_git_import_and_run_fdroid_scanner_on_it(self): url = "https://gitlab.com/fdroid/ci-test-app.git" Path("metadata").mkdir() self.update_yaml( "metadata/org.fdroid.ci.test.app.yml", { "AutoName": "Just A Test", "WebSite": None, "Builds": [ { "versionName": "0.3", "versionCode": 300, "commit": "0.3", "subdir": "app", "gradle": ["yes"], } ], "Repo": url, "RepoType": "git", }, ) self.assert_run(["git", "clone", url, "build/org.fdroid.ci.test.app"]) self.assert_run( self.fdroid_cmd + ["scanner", "org.fdroid.ci.test.app", "--verbose"] ) @unittest.skipUnless(shutil.which("gpg"), "requires command line gpg") def test_copy_repo_generate_java_gpg_keys_update_and_gpgsign(self): """Needs tricks to make gpg-agent run in a test harness.""" self.fdroid_init_with_prebuilt_keystore() shutil.copytree(FILES / "repo", "repo", dirs_exist_ok=True) for dir in ["config", "metadata"]: shutil.copytree(FILES / dir, dir) # gpg requires a short path to the socket to talk to gpg-agent gnupghome = (WORKSPACE / '.testfiles/gnupghome').resolve() shutil.rmtree(gnupghome, ignore_errors=True) shutil.copytree(FILES / "gnupghome", gnupghome) os.chmod(gnupghome, 0o700) self.update_yaml( common.CONFIG_FILE, { "install_list": "org.adaway", "uninstall_list": ["com.android.vending", "com.facebook.orca"], "gpghome": str(gnupghome), "gpgkey": "CE71F7FB", "mirrors": [ "http://foobarfoobarfoobar.onion/fdroid", "https://foo.bar/fdroid", ], }, ) self.assert_run( self.fdroid_cmd + ["update", "--verbose", "--pretty"], env=os.environ | {"LC_MESSAGES": "C.UTF-8"}, ) index_xml = Path("repo/index.xml").read_text() self.assertIn("" in line) with open("repo/index.xml") as f: repo_cnt = sum(1 for line in f if "" in line) if USE_APKSIGNER: self.assertEqual(archive_cnt, 2) self.assertEqual(repo_cnt, 10) else: # This will fail when jarsigner allows MD5 for APK signatures self.assertEqual(archive_cnt, 5) self.assertEqual(repo_cnt, 7) @unittest.skipIf(USE_APKSIGNER, "runs only without apksigner") def test_per_app_archive_policy(self): self.fdroid_init_with_prebuilt_keystore() Path("metadata").mkdir() shutil.copy(FILES / "metadata/com.politedroid.yml", "metadata") for f in FILES.glob("repo/com.politedroid_[0-9].apk"): shutil.copy(f, "repo") self.update_yaml(common.CONFIG_FILE, {"archive_older": 3}) self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) repo = Path("repo/index.xml").read_text() repo_cnt = sum(1 for line in repo.splitlines() if "" in line) archive = Path("archive/index.xml").read_text() archive_cnt = sum(1 for line in archive.splitlines() if "" in line) self.assertEqual(repo_cnt, 4) self.assertEqual(archive_cnt, 0) self.assertIn("com.politedroid_3.apk", repo) self.assertIn("com.politedroid_4.apk", repo) self.assertIn("com.politedroid_5.apk", repo) self.assertIn("com.politedroid_6.apk", repo) self.assertTrue(Path("repo/com.politedroid_3.apk").is_file()) self.assertTrue(Path("repo/com.politedroid_4.apk").is_file()) self.assertTrue(Path("repo/com.politedroid_5.apk").is_file()) self.assertTrue(Path("repo/com.politedroid_6.apk").is_file()) # enable one app in the repo self.update_yaml("metadata/com.politedroid.yml", {"ArchivePolicy": 1}) self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) repo = Path("repo/index.xml").read_text() repo_cnt = sum(1 for line in repo.splitlines() if "" in line) archive = Path("archive/index.xml").read_text() archive_cnt = sum(1 for line in archive.splitlines() if "" in line) self.assertEqual(repo_cnt, 1) self.assertEqual(archive_cnt, 3) self.assertIn("com.politedroid_6.apk", repo) self.assertIn("com.politedroid_3.apk", archive) self.assertIn("com.politedroid_4.apk", archive) self.assertIn("com.politedroid_5.apk", archive) self.assertTrue(Path("repo/com.politedroid_6.apk").is_file()) self.assertTrue(Path("archive/com.politedroid_3.apk").is_file()) self.assertTrue(Path("archive/com.politedroid_4.apk").is_file()) self.assertTrue(Path("archive/com.politedroid_5.apk").is_file()) # remove all apps from the repo self.update_yaml("metadata/com.politedroid.yml", {"ArchivePolicy": 0}) self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) repo = Path("repo/index.xml").read_text() repo_cnt = sum(1 for line in repo.splitlines() if "" in line) archive = Path("archive/index.xml").read_text() archive_cnt = sum(1 for line in archive.splitlines() if "" in line) self.assertEqual(repo_cnt, 0) self.assertEqual(archive_cnt, 4) self.assertIn("com.politedroid_3.apk", archive) self.assertIn("com.politedroid_4.apk", archive) self.assertIn("com.politedroid_5.apk", archive) self.assertIn("com.politedroid_6.apk", archive) self.assertTrue(Path("archive/com.politedroid_3.apk").is_file()) self.assertTrue(Path("archive/com.politedroid_4.apk").is_file()) self.assertTrue(Path("archive/com.politedroid_5.apk").is_file()) self.assertTrue(Path("archive/com.politedroid_6.apk").is_file()) self.assertFalse(Path("repo/com.politedroid_6.apk").exists()) # move back one from archive to the repo self.update_yaml("metadata/com.politedroid.yml", {"ArchivePolicy": 1}) self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) repo = Path("repo/index.xml").read_text() repo_cnt = sum(1 for line in repo.splitlines() if "" in line) archive = Path("archive/index.xml").read_text() archive_cnt = sum(1 for line in archive.splitlines() if "" in line) self.assertEqual(repo_cnt, 1) self.assertEqual(archive_cnt, 3) self.assertIn("com.politedroid_6.apk", repo) self.assertIn("com.politedroid_3.apk", archive) self.assertIn("com.politedroid_4.apk", archive) self.assertIn("com.politedroid_5.apk", archive) self.assertTrue(Path("repo/com.politedroid_6.apk").is_file()) self.assertTrue(Path("archive/com.politedroid_3.apk").is_file()) self.assertTrue(Path("archive/com.politedroid_4.apk").is_file()) self.assertTrue(Path("archive/com.politedroid_5.apk").is_file()) self.assertFalse(Path("archive/com.politedroid_6.apk").exists()) # set an earlier version as CVC and test that it's the only one not archived self.update_yaml("metadata/com.politedroid.yml", {"CurrentVersionCode": 5}) self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) repo = Path("repo/index.xml").read_text() repo_cnt = sum(1 for line in repo.splitlines() if "" in line) archive = Path("archive/index.xml").read_text() archive_cnt = sum(1 for line in archive.splitlines() if "" in line) self.assertEqual(repo_cnt, 1) self.assertEqual(archive_cnt, 3) self.assertIn("com.politedroid_5.apk", repo) self.assertIn("com.politedroid_3.apk", archive) self.assertIn("com.politedroid_4.apk", archive) self.assertIn("com.politedroid_6.apk", archive) self.assertTrue(Path("repo/com.politedroid_5.apk").is_file()) self.assertFalse(Path("repo/com.politedroid_6.apk").exists()) self.assertTrue(Path("archive/com.politedroid_3.apk").is_file()) self.assertTrue(Path("archive/com.politedroid_4.apk").is_file()) self.assertTrue(Path("archive/com.politedroid_6.apk").is_file()) def test_moving_old_apks_to_and_from_the_archive(self): self.fdroid_init_with_prebuilt_keystore() Path("metadata").mkdir() shutil.copy(FILES / "metadata/com.politedroid.yml", "metadata") self.remove_lines("metadata/com.politedroid.yml", ["ArchivePolicy:"]) for f in FILES.glob("repo/com.politedroid_[0-9].apk"): shutil.copy(f, "repo") self.update_yaml(common.CONFIG_FILE, {"archive_older": 3}) self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) repo = Path("repo/index.xml").read_text() repo_cnt = sum(1 for line in repo.splitlines() if "" in line) self.assertEqual(repo_cnt, 3) self.assertIn("com.politedroid_4.apk", repo) self.assertIn("com.politedroid_5.apk", repo) self.assertIn("com.politedroid_6.apk", repo) self.assertTrue(Path("repo/com.politedroid_4.apk").is_file()) self.assertTrue(Path("repo/com.politedroid_5.apk").is_file()) self.assertTrue(Path("repo/com.politedroid_6.apk").is_file()) archive = Path("archive/index.xml").read_text() archive_cnt = sum(1 for line in archive.splitlines() if "" in line) self.assertEqual(archive_cnt, 1) self.assertIn("com.politedroid_3.apk", archive) self.assertTrue(Path("archive/com.politedroid_3.apk").is_file()) self.update_yaml(common.CONFIG_FILE, {"archive_older": 1}) self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) repo = Path("repo/index.xml").read_text() repo_cnt = sum(1 for line in repo.splitlines() if "" in line) self.assertEqual(repo_cnt, 1) self.assertIn("com.politedroid_6.apk", repo) self.assertTrue(Path("repo/com.politedroid_6.apk").is_file()) archive = Path("archive/index.xml").read_text() archive_cnt = sum(1 for line in archive.splitlines() if "" in line) self.assertEqual(archive_cnt, 3) self.assertIn("com.politedroid_3.apk", archive) self.assertIn("com.politedroid_4.apk", archive) self.assertIn("com.politedroid_5.apk", archive) self.assertTrue(Path("archive/com.politedroid_3.apk").is_file()) self.assertTrue(Path("archive/com.politedroid_4.apk").is_file()) self.assertTrue(Path("archive/com.politedroid_5.apk").is_file()) # disabling deletes from the archive metadata_path = Path("metadata/com.politedroid.yml") metadata = metadata_path.read_text() metadata = re.sub( "versionCode: 4", "versionCode: 4\n disable: testing deletion", metadata ) metadata_path.write_text(metadata) self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) repo = Path("repo/index.xml").read_text() repo_cnt = sum(1 for line in repo.splitlines() if "" in line) self.assertEqual(repo_cnt, 1) self.assertIn("com.politedroid_6.apk", repo) self.assertTrue(Path("repo/com.politedroid_6.apk").is_file()) archive = Path("archive/index.xml").read_text() archive_cnt = sum(1 for line in archive.splitlines() if "" in line) self.assertEqual(archive_cnt, 2) self.assertIn("com.politedroid_3.apk", archive) self.assertNotIn("com.politedroid_4.apk", archive) self.assertIn("com.politedroid_5.apk", archive) self.assertTrue(Path("archive/com.politedroid_3.apk").is_file()) self.assertFalse(Path("archive/com.politedroid_4.apk").exists()) self.assertTrue(Path("archive/com.politedroid_5.apk").is_file()) # disabling deletes from the repo, and promotes one from the archive metadata = re.sub( "versionCode: 6", "versionCode: 6\n disable: testing deletion", metadata ) metadata_path.write_text(metadata) self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) repo = Path("repo/index.xml").read_text() repo_cnt = sum(1 for line in repo.splitlines() if "" in line) self.assertEqual(repo_cnt, 1) self.assertIn("com.politedroid_5.apk", repo) self.assertNotIn("com.politedroid_6.apk", repo) self.assertTrue(Path("repo/com.politedroid_5.apk").is_file()) self.assertFalse(Path("repo/com.politedroid_6.apk").exists()) archive = Path("archive/index.xml").read_text() archive_cnt = sum(1 for line in archive.splitlines() if "" in line) self.assertEqual(archive_cnt, 1) self.assertIn("com.politedroid_3.apk", archive) self.assertTrue(Path("archive/com.politedroid_3.apk").is_file()) self.assertFalse(Path("archive/com.politedroid_6.apk").exists()) def test_that_verify_can_succeed_and_fail(self): Path("tmp").mkdir() Path("unsigned").mkdir() shutil.copy(FILES / "repo/com.politedroid_6.apk", "tmp") shutil.copy(FILES / "repo/com.politedroid_6.apk", "unsigned") self.assert_run( self.fdroid_cmd + ["verify", "--reuse-remote-apk", "--verbose", "com.politedroid"] ) # force a fail shutil.copy( FILES / "repo/com.politedroid_5.apk", "unsigned/com.politedroid_6.apk" ) self.assert_run_fail( self.fdroid_cmd + ["verify", "--reuse-remote-apk", "--verbose", "com.politedroid"] ) def test_allowing_disabled_signatures_in_repo_and_archive(self): self.fdroid_init_with_prebuilt_keystore() self.update_yaml( common.CONFIG_FILE, {"allow_disabled_algorithms": True, "archive_older": 3} ) Path("metadata").mkdir() shutil.copy(FILES / "metadata/com.politedroid.yml", "metadata") self.update_yaml( "metadata/info.guardianproject.urzip.yml", {"Summary": "good test version of urzip"}, replace=True, ) self.update_yaml( "metadata/org.bitbucket.tickytacky.mirrormirror.yml", {"Summary": "good MD5 sig, disabled algorithm"}, replace=True, ) for f in Path("metadata").glob("*.yml"): self.remove_lines(f, ["ArchivePolicy:"]) for f in itertools.chain( FILES.glob("urzip-badsig.apk"), FILES.glob("org.bitbucket.tickytacky.mirrormirror_[0-9].apk"), FILES.glob("repo/com.politedroid_[0-9].apk"), ): shutil.copy(f, "repo") self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) repo = Path("repo/index.xml").read_text() repo_cnt = sum(1 for line in repo.splitlines() if "" in line) archive = Path("archive/index.xml").read_text() archive_cnt = sum(1 for line in archive.splitlines() if "" in line) self.assertEqual(repo_cnt, 6) self.assertEqual(archive_cnt, 2) self.assertIn("com.politedroid_4.apk", repo) self.assertIn("com.politedroid_5.apk", repo) self.assertIn("com.politedroid_6.apk", repo) self.assertIn("com.politedroid_3.apk", archive) self.assertIn("org.bitbucket.tickytacky.mirrormirror_2.apk", repo) self.assertIn("org.bitbucket.tickytacky.mirrormirror_3.apk", repo) self.assertIn("org.bitbucket.tickytacky.mirrormirror_4.apk", repo) self.assertIn("org.bitbucket.tickytacky.mirrormirror_1.apk", archive) self.assertNotIn("urzip-badsig.apk", repo) self.assertNotIn("urzip-badsig.apk", archive) self.assertTrue(Path("archive/com.politedroid_3.apk").is_file()) self.assertTrue(Path("repo/com.politedroid_4.apk").is_file()) self.assertTrue(Path("repo/com.politedroid_5.apk").is_file()) self.assertTrue(Path("repo/com.politedroid_6.apk").is_file()) self.assertTrue( Path("archive/org.bitbucket.tickytacky.mirrormirror_1.apk").is_file() ) self.assertTrue( Path("repo/org.bitbucket.tickytacky.mirrormirror_2.apk").is_file() ) self.assertTrue( Path("repo/org.bitbucket.tickytacky.mirrormirror_3.apk").is_file() ) self.assertTrue( Path("repo/org.bitbucket.tickytacky.mirrormirror_4.apk").is_file() ) self.assertTrue(Path("archive/urzip-badsig.apk").is_file()) if not USE_APKSIGNER: self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) repo = Path("repo/index.xml").read_text() repo_cnt = sum(1 for line in repo.splitlines() if "" in line) archive = Path("archive/index.xml").read_text() archive_cnt = sum(1 for line in archive.splitlines() if "" in line) self.assertEqual(repo_cnt, 3) self.assertEqual(archive_cnt, 5) self.assertIn("com.politedroid_4.apk", repo) self.assertIn("com.politedroid_5.apk", repo) self.assertIn("com.politedroid_6.apk", repo) self.assertNotIn("urzip-badsig.apk", repo) self.assertIn("org.bitbucket.tickytacky.mirrormirror_1.apk", archive) self.assertIn("org.bitbucket.tickytacky.mirrormirror_2.apk", archive) self.assertIn("org.bitbucket.tickytacky.mirrormirror_3.apk", archive) self.assertIn("org.bitbucket.tickytacky.mirrormirror_4.apk", archive) self.assertIn("com.politedroid_3.apk", archive) self.assertNotIn("urzip-badsig.apk", archive) self.assertTrue(Path("repo/com.politedroid_4.apk").is_file()) self.assertTrue(Path("repo/com.politedroid_5.apk").is_file()) self.assertTrue(Path("repo/com.politedroid_6.apk").is_file()) self.assertTrue( Path("archive/org.bitbucket.tickytacky.mirrormirror_1.apk").is_file() ) self.assertTrue( Path("archive/org.bitbucket.tickytacky.mirrormirror_2.apk").is_file() ) self.assertTrue( Path("archive/org.bitbucket.tickytacky.mirrormirror_3.apk").is_file() ) self.assertTrue( Path("archive/org.bitbucket.tickytacky.mirrormirror_4.apk").is_file() ) self.assertTrue(Path("archive/com.politedroid_3.apk").is_file()) self.assertTrue(Path("archive/urzip-badsig.apk").is_file()) # test unarchiving when disabled_algorithms are allowed again self.update_yaml(common.CONFIG_FILE, {"allow_disabled_algorithms": True}) self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) with open("archive/index.xml") as f: archive_cnt = sum(1 for line in f if "" in line) with open("repo/index.xml") as f: repo_cnt = sum(1 for line in f if "" in line) self.assertEqual(repo_cnt, 6) self.assertEqual(archive_cnt, 2) self.assertIn("com.politedroid_4.apk", repo) self.assertIn("com.politedroid_5.apk", repo) self.assertIn("com.politedroid_6.apk", repo) self.assertIn("org.bitbucket.tickytacky.mirrormirror_2.apk", repo) self.assertIn("org.bitbucket.tickytacky.mirrormirror_3.apk", repo) self.assertIn("org.bitbucket.tickytacky.mirrormirror_4.apk", repo) self.assertNotIn("urzip-badsig.apk", repo) self.assertIn("com.politedroid_3.apk", archive) self.assertIn("org.bitbucket.tickytacky.mirrormirror_1.apk", archive) self.assertNotIn("urzip-badsig.apk", archive) self.assertTrue(Path("repo/com.politedroid_4.apk").is_file()) self.assertTrue(Path("repo/com.politedroid_5.apk").is_file()) self.assertTrue(Path("repo/com.politedroid_6.apk").is_file()) self.assertTrue( Path("repo/org.bitbucket.tickytacky.mirrormirror_2.apk").is_file() ) self.assertTrue( Path("repo/org.bitbucket.tickytacky.mirrormirror_3.apk").is_file() ) self.assertTrue( Path("repo/org.bitbucket.tickytacky.mirrormirror_4.apk").is_file() ) self.assertTrue(Path("archive/com.politedroid_3.apk").is_file()) self.assertTrue( Path("archive/org.bitbucket.tickytacky.mirrormirror_1.apk").is_file() ) self.assertTrue(Path("archive/urzip-badsig.apk").is_file()) def test_rename_apks_with_fdroid_update_rename_apks_opt_nosign_opt_for_speed(self): self.fdroid_init_with_prebuilt_keystore() self.update_yaml( common.CONFIG_FILE, { "keydname": "CN=Birdman, OU=Cell, O=Alcatraz, L=Alcatraz, S=California, C=US" }, ) Path("metadata").mkdir() shutil.copy(FILES / "metadata/info.guardianproject.urzip.yml", "metadata") shutil.copy( FILES / "urzip.apk", "repo/asdfiuhk urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234 ö.apk", ) self.assert_run( self.fdroid_cmd + ["update", "--rename-apks", "--pretty", "--nosign"] ) self.assertTrue(Path("repo/info.guardianproject.urzip_100.apk").is_file()) index_xml = Path("repo/index.xml").read_text() index_v1_json = Path("repo/index-v1.json").read_text() self.assertIn("info.guardianproject.urzip_100.apk", index_v1_json) self.assertIn("info.guardianproject.urzip_100.apk", index_xml) shutil.copy(FILES / "urzip-release.apk", "repo") self.assert_run( self.fdroid_cmd + ["update", "--rename-apks", "--pretty", "--nosign"] ) self.assertTrue(Path("repo/info.guardianproject.urzip_100.apk").is_file()) self.assertTrue( Path("repo/info.guardianproject.urzip_100_b4964fd.apk").is_file() ) index_xml = Path("repo/index.xml").read_text() index_v1_json = Path("repo/index-v1.json").read_text() self.assertIn("info.guardianproject.urzip_100.apk", index_v1_json) self.assertIn("info.guardianproject.urzip_100.apk", index_xml) self.assertIn("info.guardianproject.urzip_100_b4964fd.apk", index_v1_json) self.assertNotIn("info.guardianproject.urzip_100_b4964fd.apk", index_xml) shutil.copy(FILES / "urzip-release.apk", "repo") self.assert_run( self.fdroid_cmd + ["update", "--rename-apks", "--pretty", "--nosign"] ) self.assertTrue(Path("repo/info.guardianproject.urzip_100.apk").is_file()) self.assertTrue( Path("repo/info.guardianproject.urzip_100_b4964fd.apk").is_file() ) self.assertTrue( Path("duplicates/repo/info.guardianproject.urzip_100_b4964fd.apk").is_file() ) index_xml = Path("repo/index.xml").read_text() index_v1_json = Path("repo/index-v1.json").read_text() self.assertIn("info.guardianproject.urzip_100.apk", index_v1_json) self.assertIn("info.guardianproject.urzip_100.apk", index_xml) self.assertIn("info.guardianproject.urzip_100_b4964fd.apk", index_v1_json) self.assertNotIn("info.guardianproject.urzip_100_b4964fd.apk", index_xml) def test_for_added_date_being_set_correctly_for_repo_and_archive(self): self.fdroid_init_with_prebuilt_keystore() self.update_yaml(common.CONFIG_FILE, {"archive_older": 3}) Path("metadata").mkdir() Path("archive").mkdir() shutil.copy(FILES / "repo/com.politedroid_6.apk", "repo") shutil.copy(FILES / "repo/index-v2.json", "repo") shutil.copy(FILES / "repo/com.politedroid_5.apk", "archive") shutil.copy(FILES / "metadata/com.politedroid.yml", "metadata") # TODO: the timestamp of the oldest apk in the file should be used, even # if that doesn't exist anymore self.update_yaml("metadata/com.politedroid.yml", {"ArchivePolicy": 1}) self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) timestamp = int(datetime(2017, 6, 23, tzinfo=timezone.utc).timestamp()) * 1000 index_v1_json = Path("repo/index-v1.json").read_text() self.assertIn(f'"added": {timestamp}', index_v1_json) # the archive will have the added timestamp for the app and for the apk, # both need to be there with open("archive/index-v1.json") as f: count = sum(1 for line in f if f'"added": {timestamp}' in line) self.assertEqual(count, 2) def test_whatsnew_from_fastlane_without_cvc_set(self): self.fdroid_init_with_prebuilt_keystore() Path("metadata/com.politedroid/en-US/changelogs").mkdir(parents=True) shutil.copy(FILES / "repo/com.politedroid_6.apk", "repo") shutil.copy(FILES / "metadata/com.politedroid.yml", "metadata") self.remove_lines("metadata/com.politedroid.yml", ["CurrentVersion:"]) Path("metadata/com.politedroid/en-US/changelogs/6.txt").write_text( "whatsnew test" ) self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) index_v1_json = Path("repo/index-v1.json").read_text() self.assertIn("whatsnew test", index_v1_json) def test_metadata_checks(self): Path("repo").mkdir() shutil.copy(FILES / "urzip.apk", "repo") # this should fail because there is no metadata self.assert_run_fail(self.fdroid_cmd + ["build"]) Path("metadata").mkdir() shutil.copy(FILES / "metadata/org.smssecure.smssecure.yml", "metadata") self.assert_run(self.fdroid_cmd + ["readmeta"]) def test_ensure_commands_that_dont_need_the_jdk_work_without_a_jdk_configured(self): Path("repo").mkdir() Path("metadata").mkdir() self.update_yaml( "metadata/fake.yml", { "License": "GPL-2.0-only", "Summary": "Yup still fake", "Categories": ["Internet"], "Description": "this is fake", }, ) # fake that no JDKs are available self.update_yaml( common.CONFIG_FILE, {"categories": ["Internet"], "java_paths": {}}, replace=True, ) local_copy_dir = self.testdir / "local_copy_dir/fdroid" (local_copy_dir / "repo").mkdir(parents=True) self.update_yaml( common.CONFIG_FILE, {"local_copy_dir": str(local_copy_dir.resolve())} ) subprocess.run(self.fdroid_cmd + ["checkupdates", "--allow-dirty"]) if shutil.which("gpg"): self.assert_run(self.fdroid_cmd + ["gpgsign"]) self.assert_run(self.fdroid_cmd + ["lint"]) self.assert_run(self.fdroid_cmd + ["readmeta"]) self.assert_run(self.fdroid_cmd + ["rewritemeta", "fake"]) self.assert_run(self.fdroid_cmd + ["deploy"]) self.assert_run(self.fdroid_cmd + ["scanner"]) # run these to get their output, but the are not setup, so don't fail subprocess.run(self.fdroid_cmd + ["build"]) subprocess.run(self.fdroid_cmd + ["import"]) subprocess.run(self.fdroid_cmd + ["install", "-n"]) def test_config_checks_of_local_copy_dir(self): self.assert_run(self.fdroid_cmd + ["init"]) self.assert_run(self.fdroid_cmd + ["update", "--create-metadata", "--verbose"]) self.assert_run(self.fdroid_cmd + ["readmeta"]) local_copy_dir = (self.testdir / "local_copy_dir/fdroid").resolve() local_copy_dir.mkdir(parents=True) self.assert_run( self.fdroid_cmd + ["deploy", "--local-copy-dir", local_copy_dir] ) self.assert_run( self.fdroid_cmd + ["deploy", "--local-copy-dir", local_copy_dir, "--verbose"] ) # this should fail because thisisnotanabsolutepath is not an absolute path self.assert_run_fail( self.fdroid_cmd + ["deploy", "--local-copy-dir", "thisisnotanabsolutepath"] ) # this should fail because the path doesn't end with "fdroid" self.assert_run_fail( self.fdroid_cmd + [ "deploy", "--local-copy-dir", "/tmp/IReallyDoubtThisPathExistsasdfasdf", # nosec B108 ] ) # this should fail because the dirname path does not exist self.assert_run_fail( self.fdroid_cmd + [ "deploy", "--local-copy-dir", "/tmp/IReallyDoubtThisPathExistsasdfasdf/fdroid", # nosec B108 ] ) def test_setup_a_new_repo_from_scratch_using_android_home_and_do_a_local_sync(self): self.fdroid_init_with_prebuilt_keystore() self.copy_apks_into_repo() self.assert_run(self.fdroid_cmd + ["update", "--create-metadata", "--verbose"]) self.assert_run(self.fdroid_cmd + ["readmeta"]) self.assertIn(" 0) def test_check_duplicate_files_are_properly_handled_by_fdroid_update(self): self.fdroid_init_with_prebuilt_keystore() Path("metadata").mkdir() shutil.copy(FILES / "metadata/obb.mainpatch.current.yml", "metadata") shutil.copy(FILES / "repo/obb.mainpatch.current_1619.apk", "repo") shutil.copy( FILES / "repo/obb.mainpatch.current_1619_another-release-key.apk", "repo" ) self.assert_run(self.fdroid_cmd + ["update", "--pretty"]) index_xml = Path("repo/index.xml").read_text() index_v1_json = Path("repo/index-v1.json").read_text() self.assertNotIn( "obb.mainpatch.current_1619_another-release-key.apk", index_xml ) self.assertIn("obb.mainpatch.current_1619.apk", index_xml) self.assertIn("obb.mainpatch.current_1619.apk", index_v1_json) self.assertIn( "obb.mainpatch.current_1619_another-release-key.apk", index_v1_json ) # die if there are exact duplicates shutil.copy(FILES / "repo/obb.mainpatch.current_1619.apk", "repo/duplicate.apk") self.assert_run_fail(self.fdroid_cmd + ["update"]) def test_setup_new_repo_from_scratch_using_android_home_env_var_putting_apks_in_repo_first( self, ): Path("repo").mkdir() self.copy_apks_into_repo() self.fdroid_init_with_prebuilt_keystore() self.assert_run(self.fdroid_cmd + ["update", "--create-metadata", "--verbose"]) self.assert_run(self.fdroid_cmd + ["readmeta"]) self.assertIn(" 0) def test_setup_a_new_repo_manually_and_generate_a_keystore(self): self.assertFalse(Path("keystore.p12").exists()) # this should fail because this repo has no keystore self.assert_run_fail(self.fdroid_cmd + ["update"]) self.assert_run(self.fdroid_cmd + ["update", "--create-key"]) self.assertTrue(Path("keystore.p12").is_file()) self.copy_apks_into_repo() self.assert_run(self.fdroid_cmd + ["update", "--create-metadata", "--verbose"]) self.assert_run(self.fdroid_cmd + ["readmeta"]) self.assertIn(" 0) def test_setup_a_new_repo_from_scratch_generate_a_keystore_then_add_apk_and_update( self, ): self.assert_run(self.fdroid_cmd + ["init", "--keystore", "keystore.p12"]) self.assertTrue(Path("keystore.p12").is_file()) self.copy_apks_into_repo() self.assert_run(self.fdroid_cmd + ["update", "--create-metadata", "--verbose"]) self.assert_run(self.fdroid_cmd + ["readmeta"]) self.assertIn(" 0) self.assertIn(" 0) # now set fake repo_keyalias self.update_yaml(common.CONFIG_FILE, {"repo_keyalias": "fake"}) # this should fail because this repo has a bad repo_keyalias self.assert_run_fail(self.fdroid_cmd + ["update"]) # this should fail because a keystore is already there self.assert_run_fail(self.fdroid_cmd + ["update", "--create-key"]) # now actually create the key with the existing settings Path("keystore.jks").unlink() self.assert_run(self.fdroid_cmd + ["update", "--create-key"]) self.assertTrue(Path("keystore.jks").is_file()) def test_setup_a_new_repo_from_scratch_using_android_home_env_var_with_git_mirror( self, ): server_git_mirror = self.testdir / "server_git_mirror" server_git_mirror.mkdir() self.assert_run( ["git", "-C", server_git_mirror, "init", "--initial-branch", "master"] ) self.assert_run( [ "git", "-C", server_git_mirror, "config", "receive.denyCurrentBranch", "updateInstead", ] ) self.fdroid_init_with_prebuilt_keystore() self.update_yaml( common.CONFIG_FILE, {"archive_older": 3, "servergitmirrors": str(server_git_mirror)}, ) for f in FILES.glob("repo/com.politedroid_[345].apk"): shutil.copy(f, "repo") self.assert_run(self.fdroid_cmd + ["update", "--create-metadata"]) self.assert_run(self.fdroid_cmd + ["deploy"]) git_mirror = Path("git-mirror") self.assertTrue((git_mirror / "fdroid/repo/com.politedroid_3.apk").is_file()) self.assertTrue((git_mirror / "fdroid/repo/com.politedroid_4.apk").is_file()) self.assertTrue((git_mirror / "fdroid/repo/com.politedroid_5.apk").is_file()) self.assertTrue( (server_git_mirror / "fdroid/repo/com.politedroid_3.apk").is_file() ) self.assertTrue( (server_git_mirror / "fdroid/repo/com.politedroid_4.apk").is_file() ) self.assertTrue( (server_git_mirror / "fdroid/repo/com.politedroid_5.apk").is_file() ) (git_mirror / ".git/test-stamp").write_text(str(datetime.now())) # add one more APK to trigger archiving shutil.copy(FILES / "repo/com.politedroid_6.apk", "repo") self.assert_run(self.fdroid_cmd + ["update"]) self.assert_run(self.fdroid_cmd + ["deploy"]) self.assertTrue(Path("archive/com.politedroid_3.apk").is_file()) self.assertFalse((git_mirror / "fdroid/archive/com.politedroid_3.apk").exists()) self.assertFalse( (server_git_mirror / "fdroid/archive/com.politedroid_3.apk").exists() ) self.assertTrue((git_mirror / "fdroid/repo/com.politedroid_4.apk").is_file()) self.assertTrue((git_mirror / "fdroid/repo/com.politedroid_5.apk").is_file()) self.assertTrue((git_mirror / "fdroid/repo/com.politedroid_6.apk").is_file()) self.assertTrue( (server_git_mirror / "fdroid/repo/com.politedroid_4.apk").is_file() ) self.assertTrue( (server_git_mirror / "fdroid/repo/com.politedroid_5.apk").is_file() ) self.assertTrue( (server_git_mirror / "fdroid/repo/com.politedroid_6.apk").is_file() ) before = sum( f.stat().st_size for f in (git_mirror / ".git").glob("**/*") if f.is_file() ) self.update_yaml(common.CONFIG_FILE, {"git_mirror_size_limit": "60kb"}) self.assert_run(self.fdroid_cmd + ["update"]) self.assert_run(self.fdroid_cmd + ["deploy"]) self.assertTrue(Path("archive/com.politedroid_3.apk").is_file()) self.assertFalse( (server_git_mirror / "fdroid/archive/com.politedroid_3.apk").exists() ) after = sum( f.stat().st_size for f in (git_mirror / ".git").glob("**/*") if f.is_file() ) self.assertFalse((git_mirror / ".git/test-stamp").exists()) self.assert_run(["git", "-C", git_mirror, "gc"]) self.assert_run(["git", "-C", server_git_mirror, "gc"]) self.assertGreater(before, after) def test_sign_binary_repo_in_offline_box_then_publishing_from_online_box(self): offline_root = self.testdir / "offline_root" offline_root.mkdir() local_copy_dir = self.testdir / "local_copy_dir/fdroid" local_copy_dir.mkdir(parents=True) online_root = self.testdir / "online_root" online_root.mkdir() server_web_root = self.testdir / "server_web_root/fdroid" server_web_root.mkdir(parents=True) # create offline binary transparency log (offline_root / "binary_transparency").mkdir() os.chdir(offline_root / "binary_transparency") self.assert_run(["git", "init", "--initial-branch", "master"]) # fake git remote server for binary transparency log binary_transparency_remote = self.testdir / "binary_transparency_remote" binary_transparency_remote.mkdir() # fake git remote server for repo mirror server_git_mirror = self.testdir / "server_git_mirror" server_git_mirror.mkdir() os.chdir(server_git_mirror) self.assert_run(["git", "init", "--initial-branch", "master"]) self.assert_run(["git", "config", "receive.denyCurrentBranch", "updateInstead"]) os.chdir(offline_root) self.fdroid_init_with_prebuilt_keystore() shutil.copytree(FILES / "repo", "repo", dirs_exist_ok=True) shutil.copytree(FILES / "metadata", "metadata") Path("unsigned").mkdir() shutil.copy(FILES / "urzip-release-unsigned.apk", "unsigned") self.update_yaml( common.CONFIG_FILE, { "archive_older": 3, "mirrors": [ "http://foo.bar/fdroid", "http://asdflkdsfjafdsdfhkjh.onion/fdroid", ], "servergitmirrors": str(server_git_mirror), "local_copy_dir": str(local_copy_dir), }, ) self.assert_run(self.fdroid_cmd + ["update", "--pretty"]) index_xml = Path("repo/index.xml").read_text() self.assertIn("", index_xml) mirror_cnt = sum(1 for line in index_xml.splitlines() if "" in line) self.assertEqual(mirror_cnt, 2) archive_xml = Path("archive/index.xml").read_text() self.assertIn("/fdroid/archive", archive_xml) mirror_cnt = sum(1 for line in archive_xml.splitlines() if "" in line) self.assertEqual(mirror_cnt, 2) os.chdir("binary_transparency") proc = self.assert_run( ["git", "rev-list", "--count", "HEAD"], capture_output=True ) self.assertEqual(int(proc.stdout), 1) os.chdir(offline_root) self.assert_run(self.fdroid_cmd + ["deploy", "--verbose"]) self.assertTrue( Path(local_copy_dir / "unsigned/urzip-release-unsigned.apk").is_file() ) self.assertIn( "', } anywarns = False for warn in fdroidserver.lint.check_regexes(app): anywarns = True logging.debug(warn) self.assertTrue(anywarns) def test_source_urls(self): config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.lint.config = config app = { 'Name': 'My App', 'Summary': 'just a placeholder', 'Description': 'This app does all sorts of useful stuff', } good_urls = [ 'https://github.com/Matteljay/mastermindy-android', 'https://gitlab.com/origin/master', 'https://gitlab.com/group/subgroup/masterthing', 'https://raw.githubusercontent.com/Seva-coder/Finder/HEAD/ChangeLog.txt', 'https://github.com/scoutant/blokish/blob/HEAD/README.md#changelog', 'https://git.ieval.ro/?p=fonbot.git;a=blob;f=Changes;hb=HEAD', 'https://htmlpreview.github.io/?https://github.com/YasuakiHonda/Maxima-on-Android-AS/blob/HEAD/app/src/main/assets/About_MoA/index.html', '', ] anywarns = False for url in good_urls: app['SourceCode'] = url for warn in fdroidserver.lint.check_regexes(app): anywarns = True logging.debug(warn) self.assertFalse(anywarns) bad_urls = [ 'github.com/my/proj', 'http://github.com/not/secure', 'https://github.com/foo/bar.git', 'https://gitlab.com/group/subgroup/project.git', 'https://raw.githubusercontent.com/Seva-coder/Finder/master/ChangeLog.txt', 'https://github.com/scoutant/blokish/blob/master/README.md#changelog', 'http://htmlpreview.github.io/?https://github.com/my/project/blob/HEAD/index.html', 'http://fdroid.gitlab.io/fdroid-website', ] logging.debug('bad urls:') for url in bad_urls: anywarns = False app['SourceCode'] = url for warn in fdroidserver.lint.check_regexes(app): anywarns = True logging.debug(warn) self.assertTrue(anywarns, url + " does not fail lint!") def test_check_app_field_types(self): config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.lint.config = config app = fdroidserver.metadata.App() app.id = 'fake.app' app.Name = 'Bad App' app.Summary = 'We pwn you' app.Description = 'These are some back' fields = { 'Categories': { 'good': [ ['Sports & Health'], ['Multimedia', 'Graphics'], ], 'bad': [ 'Science & Education', 'Multimedia,Graphics', ], }, 'WebSite': { 'good': [ 'https://homepage.com', ], 'bad': [ [], [ 'nope', ], 29, ], }, } for field, values in fields.items(): for bad in values['bad']: anywarns = False app[field] = bad for warn in fdroidserver.lint.check_app_field_types(app): anywarns = True logging.debug(warn) self.assertTrue(anywarns) for good in values['good']: anywarns = False app[field] = good for warn in fdroidserver.lint.check_app_field_types(app): anywarns = True logging.debug(warn) self.assertFalse(anywarns) def test_check_vercode_operation(self): config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.lint.config = config app = fdroidserver.metadata.App() app.Name = 'Bad App' app.Summary = 'We pwn you' app.Description = 'These are some back' good_fields = [ '6%c', '%c - 1', '%c + 10', '%c*10', '%c*10 + 3', '%c*10 + 8', '%c + 2 ', '%c + 3', '%c + 7', ] bad_fields = [ 'open("/etc/passwd")', '%C + 1', '%%c * 123', '123 + %%', '%c % 7', ] anywarns = False for good in good_fields: app.VercodeOperation = [good] for warn in fdroidserver.lint.check_vercode_operation(app): anywarns = True logging.debug(warn) self.assertFalse(anywarns) for bad in bad_fields: anywarns = False app.VercodeOperation = [bad] for warn in fdroidserver.lint.check_vercode_operation(app): anywarns = True logging.debug(warn) self.assertTrue(anywarns) def test_check_license_tag_no_custom_pass(self): config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.lint.config = config app = fdroidserver.metadata.App() app.License = "GPL-3.0-or-later" anywarns = False for warn in fdroidserver.lint.check_license_tag(app): anywarns = True logging.debug(warn) self.assertFalse(anywarns) def test_check_license_tag_no_custom_fail(self): config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.lint.config = config app = fdroidserver.metadata.App() app.License = "Adobe-2006" anywarns = False for warn in fdroidserver.lint.check_license_tag(app): anywarns = True logging.debug(warn) self.assertTrue(anywarns) def test_check_license_tag_with_custom_pass(self): config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.lint.config = config config['lint_licenses'] = ['fancy-license', 'GPL-3.0-or-later'] app = fdroidserver.metadata.App() app.License = "fancy-license" anywarns = False for warn in fdroidserver.lint.check_license_tag(app): anywarns = True logging.debug(warn) self.assertFalse(anywarns) def test_check_license_tag_with_custom_fail(self): config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.lint.config = config config['lint_licenses'] = ['fancy-license', 'GPL-3.0-or-later'] app = fdroidserver.metadata.App() app.License = "Apache-2.0" anywarns = False for warn in fdroidserver.lint.check_license_tag(app): anywarns = True logging.debug(warn) self.assertTrue(anywarns) def test_check_license_tag_with_custom_empty(self): config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.lint.config = config config['lint_licenses'] = [] app = fdroidserver.metadata.App() app.License = "Apache-2.0" anywarns = False for warn in fdroidserver.lint.check_license_tag(app): anywarns = True logging.debug(warn) self.assertTrue(anywarns) def test_check_license_tag_disabled(self): config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.lint.config = config config['lint_licenses'] = None app = fdroidserver.metadata.App() app.License = "Apache-2.0" anywarns = False for warn in fdroidserver.lint.check_license_tag(app): anywarns = True logging.debug(warn) self.assertFalse(anywarns) def test_check_categories_in_config(self): fdroidserver.lint.config = { fdroidserver.common.CATEGORIES_CONFIG_NAME: ['InConfig'] } fdroidserver.lint.load_categories_config() app = fdroidserver.metadata.App({'Categories': ['InConfig']}) self.assertEqual(0, len(list(fdroidserver.lint.check_categories(app)))) def test_check_categories_not_in_config(self): fdroidserver.lint.config = dict() fdroidserver.lint.load_categories_config() app = fdroidserver.metadata.App({'Categories': ['NotInConfig']}) self.assertEqual(1, len(list(fdroidserver.lint.check_categories(app)))) def test_check_categories_empty_is_error(self): fdroidserver.lint.config = {fdroidserver.common.CATEGORIES_CONFIG_NAME: []} fdroidserver.lint.load_categories_config() app = fdroidserver.metadata.App({'Categories': ['something']}) self.assertEqual(1, len(list(fdroidserver.lint.check_categories(app)))) def test_check_categories_old_hardcoded_not_defined(self): fdroidserver.lint.config = { fdroidserver.common.CATEGORIES_CONFIG_NAME: ['foo', 'bar'] } fdroidserver.lint.load_categories_config() app = fdroidserver.metadata.App({'Categories': ['Writing']}) self.assertEqual(1, len(list(fdroidserver.lint.check_categories(app)))) def test_check_categories_from_config_yml(self): """In config.yml, categories is a list.""" os.chdir(self.testdir) fdroidserver.common.write_config_file('categories: [foo, bar]\n') fdroidserver.lint.config = fdroidserver.common.read_config() fdroidserver.lint.load_categories_config() self.assertEqual(fdroidserver.lint.CATEGORIES_KEYS, ['foo', 'bar']) app = fdroidserver.metadata.App({'Categories': ['bar']}) self.assertEqual(0, len(list(fdroidserver.lint.check_categories(app)))) def test_check_categories_from_config_categories_yml(self): """In config/categories.yml, categories is a localized STRINGMAP dict.""" os.chdir(self.testdir) os.mkdir('config') Path('config/categories.yml').write_text('{foo: {name: foo}, bar: {name: bar}}') fdroidserver.lint.config = fdroidserver.common.read_config() fdroidserver.lint.load_categories_config() self.assertEqual(fdroidserver.lint.CATEGORIES_KEYS, ['foo', 'bar']) app = fdroidserver.metadata.App({'Categories': ['bar']}) self.assertEqual(0, len(list(fdroidserver.lint.check_categories(app)))) def test_lint_config_basic_mirrors_yml(self): os.chdir(self.testdir) with Path('mirrors.yml').open('w') as fp: config_dump([{'url': 'https://example.com/fdroid/repo'}], fp) self.assertTrue(fdroidserver.lint.lint_config('mirrors.yml')) def test_lint_config_mirrors_yml_kenya_countryCode(self): os.chdir(self.testdir) with Path('mirrors.yml').open('w') as fp: config_dump( [{'url': 'https://foo.com/fdroid/repo', 'countryCode': 'KE'}], fp ) self.assertTrue(fdroidserver.lint.lint_config('mirrors.yml')) def test_lint_config_mirrors_yml_invalid_countryCode(self): """WV is "indeterminately reserved" so it should never be used.""" os.chdir(self.testdir) with Path('mirrors.yml').open('w') as fp: config_dump( [{'url': 'https://foo.com/fdroid/repo', 'countryCode': 'WV'}], fp ) self.assertFalse(fdroidserver.lint.lint_config('mirrors.yml')) def test_lint_config_mirrors_yml_alpha3_countryCode(self): """Only ISO 3166-1 alpha 2 are supported""" os.chdir(self.testdir) with Path('mirrors.yml').open('w') as fp: config_dump( [{'url': 'https://de.com/fdroid/repo', 'countryCode': 'DEU'}], fp ) self.assertFalse(fdroidserver.lint.lint_config('mirrors.yml')) def test_lint_config_mirrors_yml_one_invalid_countryCode(self): """WV is "indeterminately reserved" so it should never be used.""" os.chdir(self.testdir) with Path('mirrors.yml').open('w') as fp: config_dump( [ {'url': 'https://bar.com/fdroid/repo', 'countryCode': 'BA'}, {'url': 'https://foo.com/fdroid/repo', 'countryCode': 'FO'}, {'url': 'https://wv.com/fdroid/repo', 'countryCode': 'WV'}, ], fp, ) self.assertFalse(fdroidserver.lint.lint_config('mirrors.yml')) def test_lint_config_bad_mirrors_yml_dict(self): os.chdir(self.testdir) Path('mirrors.yml').write_text('baz: [foo, bar]\n') with self.assertRaises(TypeError): fdroidserver.lint.lint_config('mirrors.yml') def test_lint_config_bad_mirrors_yml_float(self): os.chdir(self.testdir) Path('mirrors.yml').write_text('1.0\n') with self.assertRaises(TypeError): fdroidserver.lint.lint_config('mirrors.yml') def test_lint_config_bad_mirrors_yml_int(self): os.chdir(self.testdir) Path('mirrors.yml').write_text('1\n') with self.assertRaises(TypeError): fdroidserver.lint.lint_config('mirrors.yml') def test_lint_config_bad_mirrors_yml_str(self): os.chdir(self.testdir) Path('mirrors.yml').write_text('foo\n') with self.assertRaises(TypeError): fdroidserver.lint.lint_config('mirrors.yml') def test_lint_invalid_config_keys(self): os.chdir(self.testdir) os.mkdir('config') config_yml = fdroidserver.common.CONFIG_FILE with open(f'config/{config_yml}', 'w', encoding='utf-8') as fp: fp.write('repo:\n invalid_key: test\n') self.assertFalse(fdroidserver.lint.lint_config(f'config/{config_yml}')) def test_lint_invalid_localized_config_keys(self): os.chdir(self.testdir) Path('config/en').mkdir(parents=True) Path('config/en/antiFeatures.yml').write_text('NonFreeNet:\n icon: test.png\n') self.assertFalse(fdroidserver.lint.lint_config('config/en/antiFeatures.yml')) def test_check_certificate_pinned_binaries_empty(self): fdroidserver.common.config = {} app = fdroidserver.metadata.App() app.AllowedAPKSigningKeys = [ 'a40da80a59d170caa950cf15c18c454d47a39b26989d8b640ecd745ba71bf5dc' ] self.assertEqual( [], list(fdroidserver.lint.check_certificate_pinned_binaries(app)), "when the config is empty, any signing key should be allowed", ) def test_lint_known_debug_keys_no_match(self): fdroidserver.common.config = { "apk_signing_key_block_list": "a40da80a59d170caa950cf15c18c454d47a39b26989d8b640ecd745ba71bf5dc" } app = fdroidserver.metadata.App() app.AllowedAPKSigningKeys = [ '2fd4fd5f54babba4bcb21237809bb653361d0d2583c80964ec89b28a26e9539e' ] self.assertEqual( [], list(fdroidserver.lint.check_certificate_pinned_binaries(app)), "A signing key that does not match one in the config should be allowed", ) def test_lint_known_debug_keys(self): fdroidserver.common.config = { 'apk_signing_key_block_list': 'a40da80a59d170caa950cf15c18c454d47a39b26989d8b640ecd745ba71bf5dc' } app = fdroidserver.metadata.App() app.AllowedAPKSigningKeys = [ 'a40da80a59d170caa950cf15c18c454d47a39b26989d8b640ecd745ba71bf5dc' ] for warn in fdroidserver.lint.check_certificate_pinned_binaries(app): anywarns = True logging.debug(warn) self.assertTrue(anywarns) class LintAntiFeaturesTest(unittest.TestCase): def setUp(self): os.chdir(basedir) fdroidserver.common.config = dict() fdroidserver.lint.ANTIFEATURES_KEYS = None fdroidserver.lint.load_antiFeatures_config() def test_check_antiFeatures_empty(self): app = fdroidserver.metadata.App() self.assertEqual([], list(fdroidserver.lint.check_antiFeatures(app))) def test_check_antiFeatures_empty_AntiFeatures(self): app = fdroidserver.metadata.App() app['AntiFeatures'] = [] self.assertEqual([], list(fdroidserver.lint.check_antiFeatures(app))) def test_check_antiFeatures(self): app = fdroidserver.metadata.App() app['AntiFeatures'] = ['Ads', 'UpstreamNonFree'] self.assertEqual([], list(fdroidserver.lint.check_antiFeatures(app))) def test_check_antiFeatures_fails_one(self): app = fdroidserver.metadata.App() app['AntiFeatures'] = ['Ad'] self.assertEqual(1, len(list(fdroidserver.lint.check_antiFeatures(app)))) def test_check_antiFeatures_fails_many(self): app = fdroidserver.metadata.App() app['AntiFeatures'] = ['Adss', 'Tracker', 'NoSourceSince', 'FAKE', 'NonFree'] self.assertEqual(4, len(list(fdroidserver.lint.check_antiFeatures(app)))) def test_check_antiFeatures_build_empty(self): app = fdroidserver.metadata.App() app['Builds'] = [{'antifeatures': []}] self.assertEqual([], list(fdroidserver.lint.check_antiFeatures(app))) def test_check_antiFeatures_build(self): app = fdroidserver.metadata.App() app['Builds'] = [{'antifeatures': ['Tracking']}] self.assertEqual(0, len(list(fdroidserver.lint.check_antiFeatures(app)))) def test_check_antiFeatures_build_fail(self): app = fdroidserver.metadata.App() app['Builds'] = [{'antifeatures': ['Ads', 'Tracker']}] self.assertEqual(1, len(list(fdroidserver.lint.check_antiFeatures(app)))) class ConfigYmlTest(LintTest): """Test data formats used in config.yml. lint.py uses print() and not logging so hacks are used to control the output when running in the test runner. """ def setUp(self): super().setUp() self.config_yml = Path(self.testdir) / fdroidserver.common.CONFIG_FILE def test_config_yml_int(self): self.config_yml.write_text('repo_maxage: 1\n') self.assertTrue(fdroidserver.lint.lint_config(self.config_yml)) @mock.patch('builtins.print', mock.Mock()) # hide error message def test_config_yml_int_bad(self): self.config_yml.write_text('repo_maxage: "1"\n') self.assertFalse(fdroidserver.lint.lint_config(self.config_yml)) def test_config_yml_str(self): self.config_yml.write_text('sdk_path: /opt/android-sdk\n') self.assertTrue(fdroidserver.lint.lint_config(self.config_yml)) def test_config_yml_str_list(self): self.config_yml.write_text('serverwebroot: [server1, server2]\n') self.assertTrue(fdroidserver.lint.lint_config(self.config_yml)) def test_config_yml_str_list_of_dicts(self): self.config_yml.write_text( textwrap.dedent( """\ serverwebroot: - url: 'me@b.az:/srv/fdroid' index_only: true """ ) ) self.assertTrue(fdroidserver.lint.lint_config(self.config_yml)) def test_config_yml_str_list_of_dicts_env(self): """serverwebroot can be str, list of str, or list of dicts.""" self.config_yml.write_text('serverwebroot: {env: ANDROID_HOME}\n') self.assertTrue(fdroidserver.lint.lint_config(self.config_yml)) def test_config_yml_str_env(self): self.config_yml.write_text('sdk_path: {env: ANDROID_HOME}\n') self.assertTrue(fdroidserver.lint.lint_config(self.config_yml)) @mock.patch('builtins.print', mock.Mock()) # hide error message def test_config_yml_str_bad(self): self.config_yml.write_text('sdk_path: 1.0\n') self.assertFalse(fdroidserver.lint.lint_config(self.config_yml)) def test_config_yml_bool(self): self.config_yml.write_text("deploy_process_logs: true\n") self.assertTrue(fdroidserver.lint.lint_config(self.config_yml)) @mock.patch('builtins.print', mock.Mock()) # hide error message def test_config_yml_bool_bad(self): self.config_yml.write_text('deploy_process_logs: 2342fe23\n') self.assertFalse(fdroidserver.lint.lint_config(self.config_yml)) def test_config_yml_dict(self): self.config_yml.write_text("keyaliases: {com.example: '@com.foo'}\n") self.assertTrue(fdroidserver.lint.lint_config(self.config_yml)) @mock.patch('builtins.print', mock.Mock()) # hide error message def test_config_yml_dict_bad(self): self.config_yml.write_text('keyaliases: 2342fe23\n') self.assertFalse(fdroidserver.lint.lint_config(self.config_yml)) @mock.patch('builtins.print', mock.Mock()) # hide error message def test_config_yml_bad_key_name(self): self.config_yml.write_text('keyalias: 2342fe23\n') self.assertFalse(fdroidserver.lint.lint_config(self.config_yml)) @mock.patch('builtins.print', mock.Mock()) # hide error message def test_config_yml_bad_value_for_all_keys(self): """Check all config keys with a bad value.""" for key in fdroidserver.lint.check_config_keys: if key in fdroidserver.lint.bool_keys: value = 'foobar' else: value = 'false' self.config_yml.write_text(f'{key}: {value}\n') self.assertFalse( fdroidserver.lint.lint_config(self.config_yml), f'{key} should fail on value of "{value}"', ) def test_config_yml_keyaliases(self): self.config_yml.write_text( textwrap.dedent( """\ keyaliases: com.example: myalias com.foo: '@com.example' """ ) ) self.assertTrue(fdroidserver.lint.lint_config(self.config_yml)) @mock.patch('builtins.print', mock.Mock()) # hide error message def test_config_yml_keyaliases_bad_str(self): """The keyaliases: value is a dict not a str.""" self.config_yml.write_text("keyaliases: '@com.example'\n") self.assertFalse(fdroidserver.lint.lint_config(self.config_yml)) @mock.patch('builtins.print', mock.Mock()) # hide error message def test_config_yml_keyaliases_bad_list(self): """The keyaliases: value is a dict not a list.""" self.config_yml.write_text( textwrap.dedent( """\ keyaliases: - com.example: myalias """ ) ) self.assertFalse(fdroidserver.lint.lint_config(self.config_yml)) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742812298.0 fdroidserver-2.4.0/tests/test_main.py0000755000175000017500000002307014770232212016423 0ustar00hanshans#!/usr/bin/env python3 import os import pkgutil import textwrap import unittest import tempfile from unittest import mock import fdroidserver.__main__ from .shared_test_code import TmpCwd, TmpPyPath class MainTest(unittest.TestCase): '''this tests fdroid.py''' def test_COMMANDS_check(self): """make sure the built in sub-command defs didn't change unintentionally""" self.assertListEqual( [x for x in fdroidserver.__main__.COMMANDS], [ 'build', 'init', 'publish', 'gpgsign', 'update', 'deploy', 'verify', 'checkupdates', 'import', 'install', 'readmeta', 'rewritemeta', 'lint', 'scanner', 'signindex', 'btlog', 'signatures', 'nightly', 'mirror', ], ) def test_call_init(self): co = mock.Mock() with mock.patch('sys.argv', ['', 'init', '-h']): with mock.patch('fdroidserver.init.main', co): with mock.patch('sys.exit') as exit_mock: fdroidserver.__main__.main() # note: this is sloppy, if `init` changes # this might need changing too exit_mock.assert_called_once_with(0) co.assert_called_once_with() def test_call_deploy(self): co = mock.Mock() with mock.patch('sys.argv', ['', 'deploy', '-h']): with mock.patch('fdroidserver.deploy.main', co): with mock.patch('sys.exit') as exit_mock: fdroidserver.__main__.main() # note: this is sloppy, if `deploy` changes # this might need changing too exit_mock.assert_called_once_with(0) co.assert_called_once_with() def test_find_plugins(self): with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): with open('fdroid_testy1.py', 'w') as f: f.write( textwrap.dedent( """\ fdroid_summary = "ttt" main = lambda: 'all good'""" ) ) with TmpPyPath(tmpdir): plugins = fdroidserver.__main__.find_plugins() self.assertIn('testy1', plugins.keys()) self.assertEqual(plugins['testy1']['summary'], 'ttt') self.assertEqual( __import__( plugins['testy1']['name'], None, None, ['testy1'] ).main(), 'all good', ) def test_main_plugin_lambda(self): with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): with open('fdroid_testy2.py', 'w') as f: f.write( textwrap.dedent( """\ fdroid_summary = "ttt" main = lambda: print('all good')""" ) ) with TmpPyPath(tmpdir): with mock.patch('sys.argv', ['', 'testy2']): with mock.patch('sys.exit') as exit_mock: fdroidserver.__main__.main() exit_mock.assert_called_once_with(0) def test_main_plugin_def(self): with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): with open('fdroid_testy3.py', 'w') as f: f.write( textwrap.dedent( """\ fdroid_summary = "ttt" def main(): print('all good')""" ) ) with TmpPyPath(tmpdir): with mock.patch('sys.argv', ['', 'testy3']): with mock.patch('sys.exit') as exit_mock: fdroidserver.__main__.main() exit_mock.assert_called_once_with(0) def test_main_broken_plugin(self): """making sure broken plugins get their exceptions through""" with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): with open('fdroid_testy4.py', 'w') as f: f.write( textwrap.dedent( """\ fdroid_summary = "ttt" def main(): raise Exception("this plugin is broken")""" ) ) with TmpPyPath(tmpdir): with mock.patch('sys.argv', ['', 'testy4']): with self.assertRaisesRegex(Exception, "this plugin is broken"): fdroidserver.__main__.main() def test_main_malicious_plugin(self): """The purpose of this test is to make sure code in plugins doesn't get executed unintentionally. """ with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): with open('fdroid_testy5.py', 'w') as f: f.write( textwrap.dedent( """\ fdroid_summary = "ttt" raise Exception("this plugin is malicious") def main(): print("evil things")""" ) ) with TmpPyPath(tmpdir): with mock.patch('sys.argv', ['', 'lint']): with mock.patch('sys.exit') as exit_mock: fdroidserver.__main__.main() # note: this is sloppy, if `lint` changes # this might need changing too exit_mock.assert_called_once_with(0) def test_main_prevent_plugin_override(self): """making sure build-in subcommands cannot be overridden by plugins""" with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): with open('fdroid_signatures.py', 'w') as f: f.write( textwrap.dedent( """\ fdroid_summary = "ttt" def main(): raise("plugin overrides don't get prevent!")""" ) ) with TmpPyPath(tmpdir): with mock.patch('sys.argv', ['', 'signatures']): with mock.patch('sys.exit') as exit_mock: fdroidserver.__main__.main() # note: this is sloppy, if `signatures` changes # this might need changing too self.assertEqual(exit_mock.call_count, 2) def test_preparse_plugin_lookup_bad_name(self): self.assertRaises( ValueError, fdroidserver.__main__.preparse_plugin, "some.package", "/non/existent/module/path", ) def test_preparse_plugin_lookup_bad_path(self): self.assertRaises( ValueError, fdroidserver.__main__.preparse_plugin, "fake_module_name", "/non/existent/module/path", ) def test_preparse_plugin_lookup_summary_missing(self): with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): with open('fdroid_testy6.py', 'w') as f: f.write("main = lambda: print('all good')") with TmpPyPath(tmpdir): p = [x for x in pkgutil.iter_modules() if x[1].startswith('fdroid_')] module_dir = p[0][0].path module_name = p[0][1] self.assertRaises( NameError, fdroidserver.__main__.preparse_plugin, module_name, module_dir, ) def test_preparse_plugin_lookup_module_file(self): with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): with open('fdroid_testy7.py', 'w') as f: f.write( textwrap.dedent( """\ fdroid_summary = "ttt" main = lambda: pritn('all good')""" ) ) with TmpPyPath(tmpdir): p = [x for x in pkgutil.iter_modules() if x[1].startswith('fdroid_')] module_path = p[0][0].path module_name = p[0][1] d = fdroidserver.__main__.preparse_plugin(module_name, module_path) self.assertDictEqual(d, {'name': 'fdroid_testy7', 'summary': 'ttt'}) def test_preparse_plugin_lookup_module_dir(self): with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): os.mkdir(os.path.join(tmpdir, 'fdroid_testy8')) with open('fdroid_testy8/__main__.py', 'w') as f: f.write( textwrap.dedent( """\ fdroid_summary = "ttt" main = lambda: print('all good')""" ) ) with open('fdroid_testy8/__init__.py', 'w') as f: pass with TmpPyPath(tmpdir): p = [x for x in pkgutil.iter_modules() if x[1].startswith('fdroid_')] module_path = p[0][0].path module_name = p[0][1] d = fdroidserver.__main__.preparse_plugin(module_name, module_path) self.assertDictEqual(d, {'name': 'fdroid_testy8', 'summary': 'ttt'}) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/tests/test_metadata.py0000755000175000017500000027026514770502071017274 0ustar00hanshans#!/usr/bin/env python3 import copy import io import os import random import ruamel.yaml import shutil import unittest import tempfile import textwrap from collections import OrderedDict from pathlib import Path from unittest import mock import fdroidserver from fdroidserver import metadata from fdroidserver.exception import MetaDataException from fdroidserver.common import DEFAULT_LOCALE from fdroidserver._yaml import yaml from .shared_test_code import TmpCwd, mkdtemp basedir = Path(__file__).parent def _get_mock_mf(s): mf = io.StringIO(s) mf.name = 'mock_filename.yaml' return mf class MetadataTest(unittest.TestCase): '''fdroidserver/metadata.py''' def setUp(self): os.chdir(basedir) self._td = mkdtemp() self.testdir = self._td.name fdroidserver.metadata.warnings_action = 'error' def tearDown(self): # auto-generated dirs by functions, not tests, so they are not always cleaned up self._td.cleanup() try: os.rmdir("srclibs") except OSError: pass try: os.rmdir("tmp") except OSError: pass def test_fieldtypes_key_exist(self): for k in fdroidserver.metadata.fieldtypes: self.assertIn(k, fdroidserver.metadata.yaml_app_fields) def test_build_flagtypes_key_exist(self): for k in fdroidserver.metadata.flagtypes: self.assertIn(k, fdroidserver.metadata.build_flags) def test_FieldValidator_BitcoinAddress(self): validator = None for vali in fdroidserver.metadata.valuetypes: if vali.name == 'Bitcoin address': validator = vali break self.assertIsNotNone(validator, "could not find 'Bitcoin address' validator") # some valid addresses (P2PKH, P2SH, Bech32) self.assertIsNone( validator.check('1BrrrrErsrWetrTrnrrrrm4GFg7xJaNVN2', 'fake.app.id') ) self.assertIsNone( validator.check('3JrrrrWrEZr3rNrrvrecrnyirrnqRhWNLy', 'fake.app.id') ) self.assertIsNone( validator.check('bc1qar0srrr7xrkvr5lr43lrdnwrre5rgtrzrf5rrq', 'fake.app.id') ) # some invalid addresses self.assertRaises( fdroidserver.exception.MetaDataException, validator.check, '21BvMrSYsrWrtrrlL5A10mlGFr7rrarrN2', 'fake.app.id', ) self.assertRaises( fdroidserver.exception.MetaDataException, validator.check, '5Hrgr3ur5rGLrfKrrrrrrHSrqJrroGrrzrQrrrrrrLNrsrDrrrA', 'fake.app.id', ) self.assertRaises( fdroidserver.exception.MetaDataException, validator.check, '92rr46rUrgTrrromrVrirW6r1rrrdrerrdbJrrrhrCsYrrrrrrc', 'fake.app.id', ) self.assertRaises( fdroidserver.exception.MetaDataException, validator.check, 'K1BvMrSYsrWrtrrrn5Au4m4GFr7rrarrN2', 'fake.app.id', ) self.assertRaises( fdroidserver.exception.MetaDataException, validator.check, 'L1BvMrSYsrWrtrrrn5Au4m4GFr7rrarrN2', 'fake.app.id', ) self.assertRaises( fdroidserver.exception.MetaDataException, validator.check, 'tb1qw5r8drrejxrrg4y5rrrrrraryrrrrwrkxrjrsx', 'fake.app.id', ) def test_FieldValidator_LitecoinAddress(self): validator = None for vali in fdroidserver.metadata.valuetypes: if vali.name == 'Litecoin address': validator = vali break self.assertIsNotNone(validator, "could not find 'Litecoin address' validator") # some valid addresses (L, M, 3, segwit) self.assertIsNone( validator.check('LgeGrrrrJAxyXprrPrrBrrX5Qrrrrrrrrd', 'fake.app.id') ) self.assertIsNone( validator.check('MrrrrrrrJAxyXpanPtrrRAX5QHxvUJo8id', 'fake.app.id') ) self.assertIsNone(validator.check('3rereVr9rAryrranrrrrrAXrrHx', 'fake.app.id')) self.assertIsNone( validator.check( 'ltc1q7euacwhn6ef99vcfa57mute92q572aqsc4c2j5', 'fake.app.id' ) ) # some invalid addresses (various special use/testnet addresses, invalid chars) self.assertRaises( fdroidserver.exception.MetaDataException, validator.check, '21BvMrSYsrWrtrrrn5Au4l4GFr7rrarrN2', 'fake.app.id', ) self.assertRaises( fdroidserver.exception.MetaDataException, validator.check, '5Hrgr3ur5rGLrfKrrrrrr1SrqJrroGrrzrQrrrrrrLNrsrDrrrA', 'fake.app.id', ) self.assertRaises( fdroidserver.exception.MetaDataException, validator.check, '92rr46rUrgTrrromrVrirW6r1rrrdrerrdbJrrrhrCsYrrrrrrc', 'fake.app.id', ) self.assertRaises( fdroidserver.exception.MetaDataException, validator.check, 'K1BvMrSYsrWrtrrrn5Au4m4GFr7rrarrN2', 'fake.app.id', ) self.assertRaises( fdroidserver.exception.MetaDataException, validator.check, 'L0000rSYsrWrtrrrn5Au4m4GFr7rrarrN2', 'fake.app.id', ) self.assertRaises( fdroidserver.exception.MetaDataException, validator.check, 'tb1qw5r8drrejxrrg4y5rrrrrraryrrrrwrkxrjrsx', 'fake.app.id', ) def test_valid_funding_yml_regex(self): """Check the regex can find all the cases""" with (basedir / 'funding-usernames.yaml').open() as fp: data = yaml.load(fp) for k, entries in data.items(): for entry in entries: m = fdroidserver.metadata.VALID_USERNAME_REGEX.match(entry) if k == 'custom': pass elif k == 'bad': self.assertIsNone( m, 'this is an invalid %s username: {%s}' % (k, entry) ) else: self.assertIsNotNone( m, 'this is a valid %s username: {%s}' % (k, entry) ) @mock.patch('git.Repo', mock.Mock()) @mock.patch('logging.error') def test_read_metadata(self, logging_error): """Read specified metadata files included in tests/, compare to stored output""" self.maxDiff = None config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.metadata.warnings_action = None apps = fdroidserver.metadata.read_metadata() for appid in ( 'app.with.special.build.params', 'org.smssecure.smssecure', 'org.adaway', 'org.videolan.vlc', 'com.politedroid', ): savepath = Path('metadata/dump') / (appid + '.yaml') frommeta = dict(apps[appid]) self.assertTrue(appid in apps) with savepath.open('r') as f: from_yaml = yaml.load(f) self.assertEqual(frommeta, from_yaml) # comment above assert and uncomment below to update test # files when new metadata fields are added # with savepath.open('w') as fp: # yaml.default_flow_style = False # yaml.register_class(metadata.Build) # yaml.dump(frommeta, fp) # errors are printed when .yml overrides localized logging_error.assert_called() self.assertEqual(3, len(logging_error.call_args_list)) @mock.patch('git.Repo', mock.Mock()) def test_metadata_overrides_dot_fdroid_yml(self): """Fields in metadata files should override anything in .fdroid.yml.""" app = metadata.parse_metadata('metadata/info.guardianproject.urzip.yml') self.assertEqual(app['Summary'], '一个实用工具,获取已安装在您的设备上的应用的有关信息') def test_dot_fdroid_yml_works_without_git(self): """Parsing should work if .fdroid.yml is present and it is not a git repo.""" os.chdir(self.testdir) yml = Path('metadata/test.yml') yml.parent.mkdir() with yml.open('w') as fp: fp.write('Repo: https://example.com/not/git/or/anything') fdroid_yml = Path('build/test/.fdroid.yml') fdroid_yml.parent.mkdir(parents=True) with fdroid_yml.open('w') as fp: fp.write('OpenCollective: test') metadata.parse_metadata(yml) # should not throw an exception @mock.patch('git.Repo', mock.Mock()) @mock.patch('logging.error') def test_rewrite_yaml_fakeotaupdate(self, logging_error): with tempfile.TemporaryDirectory() as testdir: testdir = Path(testdir) fdroidserver.common.config = {'accepted_formats': ['yml']} fdroidserver.metadata.warnings_action = None # rewrite metadata allapps = fdroidserver.metadata.read_metadata() for appid, app in allapps.items(): if appid == 'fake.ota.update': fdroidserver.metadata.write_metadata( testdir / (appid + '.yml'), app ) # assert rewrite result self.maxDiff = None file_name = 'fake.ota.update.yml' self.assertEqual( (testdir / file_name).read_text(encoding='utf-8'), (Path('metadata-rewrite-yml') / file_name).read_text(encoding='utf-8'), ) # errors are printed when .yml overrides localized logging_error.assert_called() self.assertEqual(3, len(logging_error.call_args_list)) @mock.patch('git.Repo', mock.Mock()) def test_rewrite_yaml_fdroidclient(self): with tempfile.TemporaryDirectory() as testdir: testdir = Path(testdir) fdroidserver.common.config = {'accepted_formats': ['yml']} # rewrite metadata allapps = fdroidserver.metadata.read_metadata() for appid, app in allapps.items(): if appid == 'org.fdroid.fdroid': fdroidserver.metadata.write_metadata( testdir / (appid + '.yml'), app ) # assert rewrite result self.maxDiff = None file_name = 'org.fdroid.fdroid.yml' self.assertEqual( (testdir / file_name).read_text(encoding='utf-8'), (Path('metadata-rewrite-yml') / file_name).read_text(encoding='utf-8'), ) @mock.patch('git.Repo', mock.Mock()) def test_rewrite_yaml_special_build_params(self): """Test rewriting a plain YAML metadata file without localized files.""" os.chdir(self.testdir) os.mkdir('metadata') appid = 'app.with.special.build.params' file_name = Path('metadata/%s.yml' % appid) shutil.copy(basedir / file_name, file_name) # rewrite metadata allapps = fdroidserver.metadata.read_metadata({appid: -1}) for appid, app in allapps.items(): metadata.write_metadata(file_name, app) # assert rewrite result self.maxDiff = None self.assertEqual( file_name.read_text(), (basedir / 'metadata-rewrite-yml' / file_name.name).read_text(), ) def test_normalize_type_string(self): """TYPE_STRING currently has some quirky behavior.""" self.assertEqual('123456', metadata._normalize_type_string(123456)) self.assertEqual('1.0', metadata._normalize_type_string(1.0)) self.assertEqual('0', metadata._normalize_type_string(0)) self.assertEqual('0.0', metadata._normalize_type_string(0.0)) self.assertEqual('0.1', metadata._normalize_type_string(0.1)) self.assertEqual('[]', metadata._normalize_type_string(list())) self.assertEqual('{}', metadata._normalize_type_string(dict())) self.assertEqual('false', metadata._normalize_type_string(False)) self.assertEqual('true', metadata._normalize_type_string(True)) def test_normalize_type_string_sha256(self): """SHA-256 values are TYPE_STRING, which YAML can parse as decimal ints.""" for v in range(1, 1000): s = '%064d' % (v * (10**51)) self.assertEqual(s, metadata._normalize_type_string(yaml.load(s))) def test_normalize_type_stringmap_none(self): self.assertEqual(dict(), metadata._normalize_type_stringmap('key', None)) def test_normalize_type_stringmap_empty_list(self): self.assertEqual(dict(), metadata._normalize_type_stringmap('AntiFeatures', [])) def test_normalize_type_stringmap_simple_list_format(self): self.assertEqual( {'Ads': {}, 'Tracking': {}}, metadata._normalize_type_stringmap('AntiFeatures', ['Ads', 'Tracking']), ) def test_normalize_type_int(self): """TYPE_INT should be an int whenever possible.""" self.assertEqual(0, metadata._normalize_type_int('key', 0)) self.assertEqual(1, metadata._normalize_type_int('key', 1)) self.assertEqual(-5, metadata._normalize_type_int('key', -5)) self.assertEqual(0, metadata._normalize_type_int('key', '0')) self.assertEqual(1, metadata._normalize_type_int('key', '1')) self.assertEqual(-5, metadata._normalize_type_int('key', '-5')) self.assertEqual( 12345678901234567890, metadata._normalize_type_int('key', 12345678901234567890), ) def test_normalize_type_int_fails(self): with self.assertRaises(MetaDataException): metadata._normalize_type_int('key', '1a') with self.assertRaises(MetaDataException): metadata._normalize_type_int('key', 1.1) with self.assertRaises(MetaDataException): metadata._normalize_type_int('key', True) def test_normalize_type_list(self): """TYPE_LIST is always a list of strings, no matter what YAML thinks.""" k = 'placeholder' self.assertEqual(['1.0'], metadata._normalize_type_list(k, 1.0)) self.assertEqual(['1234567890'], metadata._normalize_type_list(k, 1234567890)) self.assertEqual(['false'], metadata._normalize_type_list(k, False)) self.assertEqual(['true'], metadata._normalize_type_list(k, True)) self.assertEqual(['foo'], metadata._normalize_type_list(k, 'foo')) self.assertEqual([], metadata._normalize_type_list(k, list())) self.assertEqual([], metadata._normalize_type_list(k, tuple())) self.assertEqual([], metadata._normalize_type_list(k, set())) self.assertEqual(['0', '1', '2'], metadata._normalize_type_list(k, {0, 1, 2})) self.assertEqual( ['a', 'b', 'c', '0', '0.0'], metadata._normalize_type_list(k, yaml.load('[a, b, c, 0, 0.0]')), ) self.assertEqual( ['1', '1.0', 's', 'true', '{}'], metadata._normalize_type_list(k, yaml.load('[1, 1.0, s, true, {}]')), ) self.assertEqual( ['1', '1.0', 's', 'true', '{}'], metadata._normalize_type_list(k, (1, 1.0, 's', True, dict())), ) def test_normalize_type_list_fails(self): with self.assertRaises(MetaDataException): metadata._normalize_type_list('placeholder', dict()) def test_post_parse_yaml_metadata(self): yamldata = dict() metadata.post_parse_yaml_metadata(yamldata) yamldata[ 'AllowedAPKSigningKeys' ] = 'c03dac71394d6c26766f1b04d3e31cfcac5d03b55d8aa40cc9b9fa6b74354c66' metadata.post_parse_yaml_metadata(yamldata) def test_post_parse_yaml_metadata_ArchivePolicy_int(self): for i in range(20): yamldata = {'ArchivePolicy': i} metadata.post_parse_yaml_metadata(yamldata) self.assertEqual(i, yamldata['ArchivePolicy']) def test_post_parse_yaml_metadata_ArchivePolicy_string(self): for i in range(20): yamldata = {'ArchivePolicy': '%d' % i} metadata.post_parse_yaml_metadata(yamldata) self.assertEqual(i, yamldata['ArchivePolicy']) def test_post_parse_yaml_metadata_ArchivePolicy_versions(self): """Test that the old format still works.""" for i in range(20): yamldata = {'ArchivePolicy': '%d versions' % i} metadata.post_parse_yaml_metadata(yamldata) self.assertEqual(i, yamldata['ArchivePolicy']) def test_post_parse_yaml_metadata_fails(self): yamldata = {'AllowedAPKSigningKeys': {'bad': 'dict-placement'}} with self.assertRaises(MetaDataException): metadata.post_parse_yaml_metadata(yamldata) def test_post_parse_yaml_metadata_0padding_sha256(self): """SHA-256 values are strings, but YAML 1.2 will read some as decimal ints.""" v = '0027293472934293872934729834729834729834729834792837487293847926' yamldata = yaml.load('AllowedAPKSigningKeys: ' + v) metadata.post_parse_yaml_metadata(yamldata) self.assertEqual(yamldata['AllowedAPKSigningKeys'], [v]) def test_post_parse_yaml_metadata_builds(self): yamldata = OrderedDict() builds = [] yamldata['Builds'] = builds build = OrderedDict() builds.append(build) build['versionCode'] = 1.1 self.assertRaises( fdroidserver.exception.MetaDataException, fdroidserver.metadata.post_parse_yaml_metadata, yamldata, ) build['versionCode'] = '1a' self.assertRaises( fdroidserver.exception.MetaDataException, fdroidserver.metadata.post_parse_yaml_metadata, yamldata, ) build['versionCode'] = 1 build['versionName'] = 1 fdroidserver.metadata.post_parse_yaml_metadata(yamldata) self.assertNotEqual(1, yamldata['Builds'][0]['versionName']) self.assertEqual('1', yamldata['Builds'][0]['versionName']) self.assertEqual(1, yamldata['Builds'][0]['versionCode']) build['versionName'] = 1.0 fdroidserver.metadata.post_parse_yaml_metadata(yamldata) self.assertNotEqual(1.0, yamldata['Builds'][0]['versionName']) self.assertEqual('1.0', yamldata['Builds'][0]['versionName']) build['commit'] = 1.0 fdroidserver.metadata.post_parse_yaml_metadata(yamldata) self.assertNotEqual(1.0, yamldata['Builds'][0]['commit']) self.assertEqual('1.0', yamldata['Builds'][0]['commit']) teststr = '98234fab134b' build['commit'] = teststr fdroidserver.metadata.post_parse_yaml_metadata(yamldata) self.assertEqual(teststr, yamldata['Builds'][0]['commit']) testcommitid = 1234567890 build['commit'] = testcommitid fdroidserver.metadata.post_parse_yaml_metadata(yamldata) self.assertNotEqual(testcommitid, yamldata['Builds'][0]['commit']) self.assertEqual('1234567890', yamldata['Builds'][0]['commit']) def test_read_metadata_sort_by_time(self): with tempfile.TemporaryDirectory() as testdir, TmpCwd(testdir): testdir = Path(testdir) metadatadir = testdir / 'metadata' metadatadir.mkdir() randomlist = [] randomapps = list((basedir / 'metadata').glob('*.yml')) random.shuffle(randomapps) i = 1 for f in randomapps: shutil.copy(f, metadatadir) new = metadatadir / f.name stat = new.stat() os.utime(new, (stat.st_ctime, stat.st_mtime + i)) # prepend new item so newest is always first randomlist = [f.stem] + randomlist i += 1 allapps = fdroidserver.metadata.read_metadata(sort_by_time=True) allappids = [] for appid, app in allapps.items(): allappids.append(appid) self.assertEqual(randomlist, allappids) def test_parse_yaml_metadata_0size_file(self): self.assertEqual(dict(), metadata.parse_yaml_metadata(_get_mock_mf(''))) def test_parse_yaml_metadata_empty_dict_file(self): self.assertEqual(dict(), metadata.parse_yaml_metadata(_get_mock_mf('{}'))) def test_parse_yaml_metadata_empty_string_file(self): self.assertEqual(dict(), metadata.parse_yaml_metadata(_get_mock_mf('""'))) def test_parse_yaml_metadata_fail_on_root_list(self): with self.assertRaises(MetaDataException): metadata.parse_yaml_metadata(_get_mock_mf('-')) with self.assertRaises(MetaDataException): metadata.parse_yaml_metadata(_get_mock_mf('[]')) with self.assertRaises(MetaDataException): metadata.parse_yaml_metadata(_get_mock_mf('- AutoName: fake')) def test_parse_yaml_metadata_type_list_str(self): v = 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' mf = _get_mock_mf('AllowedAPKSigningKeys: "%s"' % v) self.assertEqual( v, metadata.parse_yaml_metadata(mf)['AllowedAPKSigningKeys'][0], ) def test_parse_yaml_metadata_type_list_build_str(self): mf = _get_mock_mf('Builds: [{versionCode: 1, rm: s}]') self.assertEqual( metadata.parse_yaml_metadata(mf), {'Builds': [{'rm': ['s'], 'versionCode': 1}]}, ) def test_parse_yaml_metadata_app_type_list_fails(self): mf = _get_mock_mf('AllowedAPKSigningKeys: {t: f}') with self.assertRaises(MetaDataException): metadata.parse_yaml_metadata(mf) def test_parse_yaml_metadata_build_type_list_fails(self): mf = _get_mock_mf('Builds: [{versionCode: 1, rm: {bad: dict-placement}}]') with self.assertRaises(MetaDataException): metadata.parse_yaml_metadata(mf) def test_parse_yaml_metadata_unknown_app_field(self): mf = io.StringIO( textwrap.dedent( """\ AutoName: F-Droid RepoType: git Builds: [] bad: value""" ) ) mf.name = 'mock_filename.yaml' with self.assertRaises(MetaDataException): fdroidserver.metadata.parse_yaml_metadata(mf) def test_parse_yaml_metadata_unknown_build_flag(self): mf = io.StringIO( textwrap.dedent( """\ AutoName: F-Droid RepoType: git Builds: - bad: value""" ) ) mf.name = 'mock_filename.yaml' with self.assertRaises(MetaDataException): fdroidserver.metadata.parse_yaml_metadata(mf) @mock.patch('logging.warning') @mock.patch('logging.error') def test_parse_yaml_metadata_continue_on_warning(self, _error, _warning): """When errors are disabled, parsing should provide something that can work. When errors are disabled, then it should try to give data that lets something happen. A zero-length file is valid for operation, it just declares a Application ID as "known" and nothing else. This example gives a list as the base in the .yml file, which is unparsable, so it gives a warning message and carries on with a blank dict. """ fdroidserver.metadata.warnings_action = None mf = _get_mock_mf('[AntiFeatures: Tracking]') self.assertEqual(fdroidserver.metadata.parse_yaml_metadata(mf), dict()) _warning.assert_called_once() _error.assert_called_once() def test_parse_localized_antifeatures(self): """Unit test based on reading files included in the test repo.""" app = dict() app['id'] = 'app.with.special.build.params' metadata.parse_localized_antifeatures(app) self.maxDiff = None self.assertEqual( app, { 'AntiFeatures': { 'Ads': {'en-US': 'please no'}, 'NoSourceSince': {'en-US': 'no activity\n'}, }, 'Builds': [ { 'versionCode': 50, 'antifeatures': { 'Ads': { 'en-US': 'includes ad lib\n', 'zh-CN': '包括广告图书馆\n', }, 'Tracking': {'en-US': 'standard suspects\n'}, }, }, { 'versionCode': 49, 'antifeatures': { 'Tracking': {'zh-CN': 'Text from zh-CN/49_Tracking.txt'}, }, }, ], 'id': app['id'], }, ) def test_parse_localized_antifeatures_passthrough(self): """Test app values are cleanly passed through if no localized files.""" before = { 'id': 'placeholder', 'AntiFeatures': {'NonFreeDep': {}}, 'Builds': [{'versionCode': 999, 'antifeatures': {'zero': {}, 'one': {}}}], } after = copy.deepcopy(before) with tempfile.TemporaryDirectory() as testdir: os.chdir(testdir) os.mkdir('metadata') os.mkdir(os.path.join('metadata', after['id'])) metadata.parse_localized_antifeatures(after) self.assertEqual(before, after) def test_parse_metadata_antifeatures_NoSourceSince(self): """Test that NoSourceSince gets added as an Anti-Feature.""" os.chdir(self.testdir) yml = Path('metadata/test.yml') yml.parent.mkdir() with yml.open('w') as fp: fp.write('AntiFeatures: Ads\nNoSourceSince: gone\n') app = metadata.parse_metadata(yml) self.assertEqual( app['AntiFeatures'], {'Ads': {}, 'NoSourceSince': {DEFAULT_LOCALE: 'gone'}} ) @mock.patch('logging.error') def test_yml_overrides_localized_antifeatures(self, logging_error): """Definitions in .yml files should override the localized versions.""" app = metadata.parse_metadata('metadata/app.with.special.build.params.yml') self.assertEqual(app['AntiFeatures'], {'UpstreamNonFree': {}}) self.assertEqual(49, app['Builds'][-3]['versionCode']) self.assertEqual( app['Builds'][-3]['antifeatures'], {'Tracking': {DEFAULT_LOCALE: 'Uses the Facebook SDK.'}}, ) self.assertEqual(50, app['Builds'][-2]['versionCode']) self.assertEqual( app['Builds'][-2]['antifeatures'], { 'Ads': { 'en-US': 'includes ad lib\n', 'zh-CN': '包括广告图书馆\n', }, 'Tracking': {'en-US': 'standard suspects\n'}, }, ) # errors are printed when .yml overrides localized logging_error.assert_called() self.assertEqual(3, len(logging_error.call_args_list)) def test_parse_yaml_srclib_corrupt_file(self): with tempfile.TemporaryDirectory() as testdir: testdir = Path(testdir) srclibfile = testdir / 'srclib/mock.yml' srclibfile.parent.mkdir() with srclibfile.open('w') as fp: fp.write( textwrap.dedent( """ - RepoType: git - Repo: https://github.com/realm/realm-js.git """ ) ) with self.assertRaises(MetaDataException): fdroidserver.metadata.parse_yaml_srclib(srclibfile) def test_write_yaml_with_placeholder_values(self): mf = io.StringIO() app = fdroidserver.metadata.App() app.Categories = ['None'] app.SourceCode = "https://gitlab.com/fdroid/fdroidclient.git" app.IssueTracker = "https://gitlab.com/fdroid/fdroidclient/issues" app.RepoType = 'git' app.Repo = 'https://gitlab.com/fdroid/fdroidclient.git' app.AutoUpdateMode = 'None' app.UpdateCheckMode = 'Tags' build = fdroidserver.metadata.Build() build.versionName = 'Unknown' # taken from fdroidserver/import.py build.versionCode = 0 # taken from fdroidserver/import.py build.disable = 'Generated by import.py ...' build.commit = 'Unknown' build.gradle = ['yes'] app['Builds'] = [build] fdroidserver.metadata.write_yaml(mf, app) mf.seek(0) self.assertEqual( mf.read(), textwrap.dedent( """\ Categories: - None License: Unknown SourceCode: https://gitlab.com/fdroid/fdroidclient.git IssueTracker: https://gitlab.com/fdroid/fdroidclient/issues RepoType: git Repo: https://gitlab.com/fdroid/fdroidclient.git Builds: - versionName: Unknown versionCode: 0 disable: Generated by import.py ... commit: Unknown gradle: - yes AutoUpdateMode: None UpdateCheckMode: Tags """ ), ) def test_parse_yaml_metadata_prebuild_list(self): mf = io.StringIO( textwrap.dedent( """\ AutoName: F-Droid RepoType: git Builds: - versionCode: 1 versionName: v0.1.0 sudo: - apt-get update - apt-get install -y whatever - sed -i -e 's/> /a/file build: - ./gradlew someSpecialTask - sed -i 'd/that wrong config/' gradle.properties - ./gradlew compile """ ) ) mf.name = 'mock_filename.yaml' mf.seek(0) result = fdroidserver.metadata.parse_yaml_metadata(mf) self.maxDiff = None self.assertDictEqual( result, { 'AutoName': 'F-Droid', 'RepoType': 'git', 'Builds': [ { 'versionCode': 1, 'versionName': 'v0.1.0', 'sudo': [ "apt-get update", "apt-get install -y whatever", "sed -i -e 's/> /a/file", ], 'build': [ "./gradlew someSpecialTask", "sed -i 'd/that wrong config/' gradle.properties", "./gradlew compile", ], } ], }, ) def test_parse_yaml_metadata_prebuild_strings(self): mf = io.StringIO( textwrap.dedent( """\ AutoName: F-Droid RepoType: git Builds: - versionCode: 1 versionName: v0.1.0 sudo: |- apt-get update && apt-get install -y whatever && sed -i -e 's/> /a/file build: |- ./gradlew someSpecialTask && sed -i 'd/that wrong config/' gradle.properties && ./gradlew compile """ ) ) mf.name = 'mock_filename.yaml' mf.seek(0) result = fdroidserver.metadata.parse_yaml_metadata(mf) self.maxDiff = None self.assertDictEqual( result, { 'AutoName': 'F-Droid', 'RepoType': 'git', 'Builds': [ { 'versionCode': 1, 'versionName': 'v0.1.0', 'sudo': [ "apt-get update && " "apt-get install -y whatever && " "sed -i -e 's/> /a/file" ], 'build': [ "./gradlew someSpecialTask && " "sed -i 'd/that wrong config/' gradle.properties && " "./gradlew compile" ], } ], }, ) def test_parse_yaml_metadata_prebuild_string(self): mf = io.StringIO( textwrap.dedent( """\ AutoName: F-Droid RepoType: git Builds: - versionCode: 1 versionName: v0.1.0 prebuild: |- a && b && sed -i 's,a,b,' """ ) ) mf.name = 'mock_filename.yaml' mf.seek(0) result = fdroidserver.metadata.parse_yaml_metadata(mf) self.assertDictEqual( result, { 'AutoName': 'F-Droid', 'RepoType': 'git', 'Builds': [ { 'versionCode': 1, 'versionName': 'v0.1.0', 'prebuild': ["a && b && sed -i 's,a,b,'"], } ], }, ) def test_parse_yaml_provides_should_be_ignored(self): mf = io.StringIO( textwrap.dedent( """\ Provides: this.is.deprecated AutoName: F-Droid RepoType: git Builds: - versionCode: 1 versionName: v0.1.0 prebuild: |- a && b && sed -i 's,a,b,' """ ) ) mf.name = 'mock_filename.yaml' mf.seek(0) result = fdroidserver.metadata.parse_yaml_metadata(mf) self.assertNotIn('Provides', result) self.assertNotIn('provides', result) def test_parse_yaml_app_antifeatures_dict(self): nonfreenet = 'free it!' tracking = 'so many' mf = io.StringIO( textwrap.dedent( f""" AntiFeatures: Tracking: {tracking} NonFreeNet: {nonfreenet} """ ) ) self.assertEqual( metadata.parse_yaml_metadata(mf), { 'AntiFeatures': { 'NonFreeNet': {DEFAULT_LOCALE: nonfreenet}, 'Tracking': {DEFAULT_LOCALE: tracking}, } }, ) def test_parse_yaml_metadata_build_antifeatures_old_style(self): mf = _get_mock_mf( textwrap.dedent( """ AntiFeatures: - Ads Builds: - versionCode: 123 antifeatures: - KnownVuln - UpstreamNonFree - NonFreeAssets """ ) ) self.assertEqual( metadata.parse_yaml_metadata(mf), { 'AntiFeatures': {'Ads': {}}, 'Builds': [ { 'antifeatures': { 'KnownVuln': {}, 'NonFreeAssets': {}, 'UpstreamNonFree': {}, }, 'versionCode': 123, } ], }, ) def test_parse_yaml_metadata_antifeatures_sort(self): """All data should end up sorted, to minimize diffs in the index files.""" self.assertEqual( metadata.parse_yaml_metadata( _get_mock_mf( textwrap.dedent( """ Builds: - versionCode: 123 antifeatures: KnownVuln: es: 2nd az: zero en-US: first UpstreamNonFree: NonFreeAssets: AntiFeatures: NonFreeDep: Ads: sw: 2nd zh-CN: 3rd de: 1st """ ) ) ), { 'AntiFeatures': { 'Ads': {'de': '1st', 'sw': '2nd', 'zh-CN': '3rd'}, 'NonFreeDep': {}, }, 'Builds': [ { 'antifeatures': { 'KnownVuln': {'az': 'zero', 'en-US': 'first', 'es': '2nd'}, 'NonFreeAssets': {}, 'UpstreamNonFree': {}, }, 'versionCode': 123, } ], }, ) def test_parse_yaml_app_antifeatures_str(self): self.assertEqual( metadata.parse_yaml_metadata(io.StringIO('AntiFeatures: Tracking')), {'AntiFeatures': {'Tracking': {}}}, ) def test_parse_yaml_app_antifeatures_bool(self): self.assertEqual( metadata.parse_yaml_metadata(io.StringIO('AntiFeatures: true')), {'AntiFeatures': {'true': {}}}, ) def test_parse_yaml_app_antifeatures_float_nan(self): self.assertEqual( metadata.parse_yaml_metadata(io.StringIO('AntiFeatures: .nan')), {'AntiFeatures': {'.nan': {}}}, ) def test_parse_yaml_app_antifeatures_float_inf(self): self.assertEqual( metadata.parse_yaml_metadata(io.StringIO('AntiFeatures: .inf')), {'AntiFeatures': {'.inf': {}}}, ) def test_parse_yaml_app_antifeatures_float_negative_inf(self): self.assertEqual( metadata.parse_yaml_metadata(io.StringIO('AntiFeatures: -.inf')), {'AntiFeatures': {'-.inf': {}}}, ) def test_parse_yaml_app_antifeatures_int(self): self.assertEqual( metadata.parse_yaml_metadata(io.StringIO('AntiFeatures: 1')), {'AntiFeatures': {'1': {}}}, ) def test_parse_yaml_app_antifeatures_float(self): self.assertEqual( metadata.parse_yaml_metadata(io.StringIO('AntiFeatures: 1.0')), {'AntiFeatures': {'1.0': {}}}, ) def test_parse_yaml_app_antifeatures_list_float(self): self.assertEqual( metadata.parse_yaml_metadata(io.StringIO('AntiFeatures:\n - 1.0\n')), {'AntiFeatures': {'1.0': {}}}, ) def test_parse_yaml_app_antifeatures_dict_float(self): mf = io.StringIO('AntiFeatures:\n 0.0: too early\n') self.assertEqual( metadata.parse_yaml_metadata(mf), {'AntiFeatures': {'0.0': {'en-US': 'too early'}}}, ) def test_parse_yaml_app_antifeatures_dict_float_fail_value(self): mf = io.StringIO('AntiFeatures:\n NoSourceSince: 1.0\n') self.assertEqual( metadata.parse_yaml_metadata(mf), {'AntiFeatures': {'NoSourceSince': {'en-US': '1.0'}}}, ) def test_parse_yaml_metadata_type_stringmap_old_list(self): mf = _get_mock_mf( textwrap.dedent( """ AntiFeatures: - Ads - Tracking """ ) ) self.assertEqual( {'AntiFeatures': {'Ads': {}, 'Tracking': {}}}, metadata.parse_yaml_metadata(mf), ) def test_parse_yaml_app_antifeatures_dict_no_value(self): mf = io.StringIO( textwrap.dedent( """\ AntiFeatures: Tracking: NonFreeNet: """ ) ) self.assertEqual( metadata.parse_yaml_metadata(mf), {'AntiFeatures': {'NonFreeNet': {}, 'Tracking': {}}}, ) def test_parse_yaml_metadata_type_stringmap_transitional(self): """Support a transitional format, where users just append a text""" ads = 'Has ad lib in it.' tracking = 'opt-out reports with ACRA' mf = _get_mock_mf( textwrap.dedent( f""" AntiFeatures: - Ads: {ads} - Tracking: {tracking} """ ) ) self.assertEqual( metadata.parse_yaml_metadata(mf), { 'AntiFeatures': { 'Ads': {DEFAULT_LOCALE: ads}, 'Tracking': {DEFAULT_LOCALE: tracking}, } }, ) def test_parse_yaml_app_antifeatures_dict_mixed_values(self): ads = 'true' tracking = 'many' nonfreenet = '1' mf = io.StringIO( textwrap.dedent( f""" AntiFeatures: Ads: {ads} Tracking: {tracking} NonFreeNet: {nonfreenet} """ ) ) self.assertEqual( metadata.parse_yaml_metadata(mf), { 'AntiFeatures': { 'Ads': {DEFAULT_LOCALE: ads}, 'NonFreeNet': {DEFAULT_LOCALE: nonfreenet}, 'Tracking': {DEFAULT_LOCALE: tracking}, } }, ) def test_parse_yaml_app_antifeatures_stringmap_full(self): ads = 'watching' tracking = 'many' nonfreenet = 'pipes' nonfreenet_zh = '非免费网络' self.maxDiff = None mf = io.StringIO( textwrap.dedent( f""" AntiFeatures: Ads: {DEFAULT_LOCALE}: {ads} Tracking: {DEFAULT_LOCALE}: {tracking} NonFreeNet: {DEFAULT_LOCALE}: {nonfreenet} zh-CN: {nonfreenet_zh} """ ) ) self.assertEqual( metadata.parse_yaml_metadata(mf), { 'AntiFeatures': { 'Ads': {DEFAULT_LOCALE: ads}, 'NonFreeNet': {DEFAULT_LOCALE: nonfreenet, 'zh-CN': nonfreenet_zh}, 'Tracking': {DEFAULT_LOCALE: tracking}, } }, ) def test_parse_yaml_build_type_int_fail(self): mf = io.StringIO('Builds: [{versionCode: 1a}]') with self.assertRaises(MetaDataException): fdroidserver.metadata.parse_yaml_metadata(mf) def test_parse_yaml_int_strict_typing_fails(self): """Things that cannot be preserved when parsing as YAML.""" mf = io.StringIO('Builds: [{versionCode: 1, rm: 0xf}]') self.assertEqual( {'Builds': [{'rm': ['15'], 'versionCode': 1}]}, # 15 != 0xf fdroidserver.metadata.parse_yaml_metadata(mf), ) mf = io.StringIO('Builds: [{versionCode: 1, rm: 0x010}]') self.assertEqual( {'Builds': [{'rm': ['16'], 'versionCode': 1}]}, # 16 != 0x010 fdroidserver.metadata.parse_yaml_metadata(mf), ) mf = io.StringIO('Builds: [{versionCode: 1, rm: 0o015}]') self.assertEqual( {'Builds': [{'rm': ['13'], 'versionCode': 1}]}, # 13 != 0o015 fdroidserver.metadata.parse_yaml_metadata(mf), ) mf = io.StringIO('Builds: [{versionCode: 1, rm: 10_000}]') self.assertEqual( {'Builds': [{'rm': ['10000'], 'versionCode': 1}]}, # 10000 != 10_000 fdroidserver.metadata.parse_yaml_metadata(mf), ) def test_write_yaml_1_line_scripts_as_string(self): mf = io.StringIO() app = fdroidserver.metadata.App() app.Categories = ['None'] app['Builds'] = [] build = fdroidserver.metadata.Build() build.versionCode = 102030 build.versionName = 'v1.2.3' build.sudo = ["chmod +rwx /opt"] build.init = ["sed -i -e 'g/what/ever/' /some/file"] build.prebuild = ["sed -i 'd/that wrong config/' gradle.properties"] build.build = ["./gradlew compile"] app['Builds'].append(build) fdroidserver.metadata.write_yaml(mf, app) mf.seek(0) self.assertEqual( mf.read(), textwrap.dedent( """\ Categories: - None License: Unknown Builds: - versionName: v1.2.3 versionCode: 102030 sudo: chmod +rwx /opt init: sed -i -e 'g/what/ever/' /some/file prebuild: sed -i 'd/that wrong config/' gradle.properties build: ./gradlew compile AutoUpdateMode: None UpdateCheckMode: None """ ), ) def test_write_yaml_1_line_scripts_as_list(self): mf = io.StringIO() app = fdroidserver.metadata.App() app.Categories = ['None'] app['Builds'] = [] build = fdroidserver.metadata.Build() build.versionCode = 102030 build.versionName = 'v1.2.3' build.sudo = ["chmod +rwx /opt"] build.init = ["sed -i -e 'g/what/ever/' /some/file"] build.prebuild = ["sed -i 'd/that wrong config/' gradle.properties"] build.build = ["./gradlew compile"] app['Builds'].append(build) fdroidserver.metadata.write_yaml(mf, app) mf.seek(0) self.assertEqual( mf.read(), textwrap.dedent( """\ Categories: - None License: Unknown Builds: - versionName: v1.2.3 versionCode: 102030 sudo: chmod +rwx /opt init: sed -i -e 'g/what/ever/' /some/file prebuild: sed -i 'd/that wrong config/' gradle.properties build: ./gradlew compile AutoUpdateMode: None UpdateCheckMode: None """ ), ) def test_write_yaml_multiline_scripts_from_list(self): mf = io.StringIO() app = fdroidserver.metadata.App() app.Categories = ['None'] app['Builds'] = [] build = fdroidserver.metadata.Build() build.versionCode = 102030 build.versionName = 'v1.2.3' build.sudo = [ "apt-get update", "apt-get install -y whatever", "sed -i -e 's/> /a/file"] build.build = [ "./gradlew someSpecialTask", "sed -i 'd/that wrong config/' gradle.properties", "./gradlew compile", ] app['Builds'].append(build) fdroidserver.metadata.write_yaml(mf, app) mf.seek(0) self.assertEqual( mf.read(), textwrap.dedent( """\ Categories: - None License: Unknown Builds: - versionName: v1.2.3 versionCode: 102030 sudo: - apt-get update - apt-get install -y whatever - sed -i -e 's/> /a/file build: - ./gradlew someSpecialTask - sed -i 'd/that wrong config/' gradle.properties - ./gradlew compile AutoUpdateMode: None UpdateCheckMode: None """ ), ) def test_write_yaml_multiline_scripts_from_string(self): mf = io.StringIO() app = fdroidserver.metadata.App() app.Categories = ['None'] app['Builds'] = [] build = fdroidserver.metadata.Build() build.versionCode = 102030 build.versionName = 'v1.2.3' build.sudo = [ "apt-get update", "apt-get install -y whatever", "sed -i -e 's/> /a/file"] build.build = [ "./gradlew someSpecialTask", "sed -i 'd/that wrong config/' gradle.properties", "./gradlew compile", ] app['Builds'].append(build) fdroidserver.metadata.write_yaml(mf, app) mf.seek(0) self.assertEqual( mf.read(), textwrap.dedent( """\ Categories: - None License: Unknown Builds: - versionName: v1.2.3 versionCode: 102030 sudo: - apt-get update - apt-get install -y whatever - sed -i -e 's/> /a/file build: - ./gradlew someSpecialTask - sed -i 'd/that wrong config/' gradle.properties - ./gradlew compile AutoUpdateMode: None UpdateCheckMode: None """ ), ) def test_write_yaml_build_antifeatures(self): mf = io.StringIO() app = metadata.App( { 'License': 'Apache-2.0', 'Builds': [ metadata.Build( { 'versionCode': 102030, 'versionName': 'v1.2.3', 'gradle': ['yes'], 'antifeatures': { 'a': {}, 'b': {'de': 'Probe', 'en-US': 'test'}, }, } ), ], 'id': 'placeholder', } ) metadata.write_yaml(mf, app) mf.seek(0) self.assertEqual( mf.read(), textwrap.dedent( """\ License: Apache-2.0 Builds: - versionName: v1.2.3 versionCode: 102030 gradle: - yes antifeatures: a: {} b: de: Probe en-US: test """ ), ) def test_write_yaml_build_antifeatures_old_style(self): mf = io.StringIO() app = metadata.App( { 'License': 'Apache-2.0', 'Builds': [ metadata.Build( { 'versionCode': 102030, 'versionName': 'v1.2.3', 'gradle': ['yes'], 'antifeatures': {'b': {}, 'a': {}}, } ), ], 'id': 'placeholder', } ) metadata.write_yaml(mf, app) mf.seek(0) self.assertEqual( mf.read(), textwrap.dedent( """\ License: Apache-2.0 Builds: - versionName: v1.2.3 versionCode: 102030 gradle: - yes antifeatures: - a - b """ ), ) def test_write_yaml_make_sure_provides_does_not_get_written(self): mf = io.StringIO() app = fdroidserver.metadata.App() app.Categories = ['None'] app.Provides = 'this.is.deprecated' app['Builds'] = [] build = fdroidserver.metadata.Build() build.versionCode = 102030 build.versionName = 'v1.2.3' build.gradle = ['yes'] app['Builds'].append(build) fdroidserver.metadata.write_yaml(mf, app) mf.seek(0) self.assertEqual( mf.read(), textwrap.dedent( """\ Categories: - None License: Unknown Builds: - versionName: v1.2.3 versionCode: 102030 gradle: - yes AutoUpdateMode: None UpdateCheckMode: None """ ), ) def test_parse_yaml_srclib_unknown_key(self): with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): with Path('test.yml').open('w', encoding='utf-8') as f: f.write( textwrap.dedent( '''\ RepoType: git Repo: https://example.com/test.git Evil: I should not be here. ''' ) ) with self.assertRaisesRegex( MetaDataException, "Invalid srclib metadata: unknown key 'Evil' in 'test.yml'", ): fdroidserver.metadata.parse_yaml_srclib(Path('test.yml')) def test_parse_yaml_srclib_does_not_exists(self): with self.assertRaisesRegex( MetaDataException, "Invalid scrlib metadata: " r"'non(/|\\)existent-test-srclib.yml' " "does not exist", ): fdroidserver.metadata.parse_yaml_srclib( Path('non/existent-test-srclib.yml') ) def test_parse_yaml_srclib_simple(self): with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): with Path('simple.yml').open('w', encoding='utf-8') as f: f.write( textwrap.dedent( '''\ # this should be simple RepoType: git Repo: https://git.host/repo.git ''' ) ) srclib = fdroidserver.metadata.parse_yaml_srclib(Path('simple.yml')) self.assertDictEqual( { 'Repo': 'https://git.host/repo.git', 'RepoType': 'git', 'Subdir': None, 'Prepare': None, }, srclib, ) def test_parse_yaml_srclib_simple_with_blanks(self): with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): with Path('simple.yml').open('w', encoding='utf-8') as f: f.write( textwrap.dedent( '''\ # this should be simple RepoType: git Repo: https://git.host/repo.git Subdir: Prepare: ''' ) ) srclib = fdroidserver.metadata.parse_yaml_srclib(Path('simple.yml')) self.assertDictEqual( { 'Repo': 'https://git.host/repo.git', 'RepoType': 'git', 'Subdir': [''], 'Prepare': [], }, srclib, ) def test_parse_yaml_srclib_Changelog_cketti(self): with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): with Path('Changelog-cketti.yml').open('w', encoding='utf-8') as f: f.write( textwrap.dedent( '''\ RepoType: git Repo: https://github.com/cketti/ckChangeLog Subdir: library,ckChangeLog/src/main Prepare: "[ -f project.properties ] || echo 'source.dir=java' > ant.properties && echo -e 'android.library=true\\\\ntarget=android-19' > project.properties" ''' ) ) srclib = fdroidserver.metadata.parse_yaml_srclib( Path('Changelog-cketti.yml') ) self.assertDictEqual( srclib, { 'Repo': 'https://github.com/cketti/ckChangeLog', 'RepoType': 'git', 'Subdir': ['library', 'ckChangeLog/src/main'], 'Prepare': [ "[ -f project.properties ] || echo 'source.dir=java' > " "ant.properties && echo -e " "'android.library=true\\ntarget=android-19' > project.properties" ], }, ) def test_read_srclibs_yml_subdir_list(self): fdroidserver.metadata.srclibs = None with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): Path('srclibs').mkdir() with Path('srclibs/with-list.yml').open('w', encoding='utf-8') as f: f.write( textwrap.dedent( '''\ # this should be simple RepoType: git Repo: https://git.host/repo.git Subdir: - This is your last chance. - After this, there is no turning back. - You take the blue pill—the story ends, - you wake up in your bed - and believe whatever you want to believe. - You take the red pill—you stay in Wonderland - and I show you how deep the rabbit-hole goes. Prepare: There is a difference between knowing the path and walking the path. ''' ) ) fdroidserver.metadata.read_srclibs() self.maxDiff = None self.assertDictEqual( fdroidserver.metadata.srclibs, { 'with-list': { 'RepoType': 'git', 'Repo': 'https://git.host/repo.git', 'Subdir': [ 'This is your last chance.', 'After this, there is no turning back.', 'You take the blue pill—the story ends,', 'you wake up in your bed', 'and believe whatever you want to believe.', 'You take the red pill—you stay in Wonderland', 'and I show you how deep the rabbit-hole goes.', ], 'Prepare': [ 'There is a difference between knowing the path ' 'and walking the path.' ], } }, ) def test_read_srclibs_yml_prepare_list(self): fdroidserver.metadata.srclibs = None with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): Path('srclibs').mkdir() with Path('srclibs/with-list.yml').open('w', encoding='utf-8') as f: f.write( textwrap.dedent( '''\ # this should be simple RepoType: git Repo: https://git.host/repo.git Subdir: Prepare: - Many - invalid - commands - here. ''' ) ) fdroidserver.metadata.read_srclibs() self.maxDiff = None self.assertDictEqual( fdroidserver.metadata.srclibs, { 'with-list': { 'RepoType': 'git', 'Repo': 'https://git.host/repo.git', 'Subdir': [''], 'Prepare': [ 'Many', 'invalid', 'commands', 'here.', ], } }, ) def test_read_srclibs(self): fdroidserver.metadata.srclibs = None with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): Path('srclibs').mkdir() with Path('srclibs/simple.yml').open('w', encoding='utf-8') as f: f.write( textwrap.dedent( '''\ RepoType: git Repo: https://git.host/repo.git ''' ) ) with Path('srclibs/simple-wb.yml').open('w', encoding='utf-8') as f: f.write( textwrap.dedent( '''\ # this should be simple RepoType: git Repo: https://git.host/repo.git Subdir: Prepare: ''' ) ) fdroidserver.metadata.read_srclibs() self.assertDictEqual( fdroidserver.metadata.srclibs, { 'simple-wb': { 'RepoType': 'git', 'Repo': 'https://git.host/repo.git', 'Subdir': [''], 'Prepare': [], }, 'simple': { 'RepoType': 'git', 'Repo': 'https://git.host/repo.git', 'Subdir': None, 'Prepare': None, }, }, ) def test_build_ndk_path(self): with tempfile.TemporaryDirectory(prefix='android-sdk-') as sdk_path: config = {'ndk_paths': {}, 'sdk_path': sdk_path} fdroidserver.common.config = config build = fdroidserver.metadata.Build() build.ndk = 'r10e' self.assertEqual('', build.ndk_path()) correct = '/fake/path/ndk/r21b' config['ndk_paths'] = {'r21b': correct} self.assertEqual('', build.ndk_path()) config['ndk_paths'] = {'r10e': correct} self.assertEqual(correct, build.ndk_path()) r10e = '/fake/path/ndk/r10e' r22b = '/fake/path/ndk/r22e' config['ndk_paths'] = {'r10e': r10e, 'r22b': r22b} self.assertEqual(r10e, build.ndk_path()) build.ndk = ['r10e', 'r22b'] self.assertEqual(r10e, build.ndk_path()) build.ndk = ['r22b', 'r10e'] self.assertEqual(r22b, build.ndk_path()) def test_build_ndk_path_only_accepts_str(self): """Paths in the config must be strings, never pathlib.Path instances""" config = {'ndk_paths': {'r24': Path('r24')}} fdroidserver.common.config = config build = fdroidserver.metadata.Build() build.ndk = 'r24' with self.assertRaises(TypeError): build.ndk_path() def test_del_duplicated_NoSourceSince(self): app = { 'AntiFeatures': {'Ads': {}, 'NoSourceSince': {DEFAULT_LOCALE: '1.0'}}, 'NoSourceSince': '1.0', } metadata._del_duplicated_NoSourceSince(app) self.assertEqual(app, {'AntiFeatures': {'Ads': {}}, 'NoSourceSince': '1.0'}) def test_check_manually_extended_NoSourceSince(self): app = { 'AntiFeatures': {'NoSourceSince': {DEFAULT_LOCALE: '1.0', 'de': '1,0'}}, 'NoSourceSince': '1.0', } metadata._del_duplicated_NoSourceSince(app) self.assertEqual( app, { 'AntiFeatures': {'NoSourceSince': {DEFAULT_LOCALE: '1.0', 'de': '1,0'}}, 'NoSourceSince': '1.0', }, ) def test_make_sure_nosourcesince_does_not_get_written(self): appid = 'com.politedroid' app = metadata.read_metadata({appid: -1})[appid] builds = app['Builds'] app['Builds'] = [copy.deepcopy(builds[0])] mf = io.StringIO() metadata.write_yaml(mf, app) mf.seek(0) self.maxDiff = None self.assertEqual( mf.read(), textwrap.dedent( """\ AntiFeatures: - NonFreeNet Categories: - Multimedia - Security - Time License: GPL-3.0-only SourceCode: https://github.com/miguelvps/PoliteDroid IssueTracker: https://github.com/miguelvps/PoliteDroid/issues AutoName: Polite Droid Summary: Calendar tool Description: Activates silent mode during calendar events. RepoType: git Repo: https://github.com/miguelvps/PoliteDroid.git Builds: - versionName: '1.2' versionCode: 3 commit: 6a548e4b19 target: android-10 antifeatures: - KnownVuln - NonFreeAssets - UpstreamNonFree ArchivePolicy: 4 AutoUpdateMode: Version v%v UpdateCheckMode: Tags CurrentVersion: '1.5' CurrentVersionCode: 6 NoSourceSince: '1.5' """ ), ) def test_app_to_yaml_smokecheck(self): self.assertTrue( isinstance(metadata._app_to_yaml(dict()), ruamel.yaml.comments.CommentedMap) ) def test_app_to_yaml_build_list_empty(self): app = metadata.App({'Builds': [metadata.Build({'rm': []})]}) self.assertEqual(dict(), metadata._app_to_yaml(app)['Builds'][0]) def test_app_to_yaml_build_list_one(self): app = metadata.App({'Builds': [metadata.Build({'rm': ['one']})]}) self.assertEqual({'rm': ['one']}, metadata._app_to_yaml(app)['Builds'][0]) def test_app_to_yaml_build_list_two(self): app = metadata.App({'Builds': [metadata.Build({'rm': ['1', '2']})]}) self.assertEqual({'rm': ['1', '2']}, metadata._app_to_yaml(app)['Builds'][0]) def test_app_to_yaml_build_list(self): app = metadata.App({'Builds': [metadata.Build({'rm': ['b2', 'NO1']})]}) self.assertEqual({'rm': ['b2', 'NO1']}, metadata._app_to_yaml(app)['Builds'][0]) def test_app_to_yaml_AllowedAPKSigningKeys_two(self): cm = metadata._app_to_yaml(metadata.App({'AllowedAPKSigningKeys': ['b', 'A']})) self.assertEqual(['b', 'a'], cm['AllowedAPKSigningKeys']) def test_app_to_yaml_AllowedAPKSigningKeys_one(self): cm = metadata._app_to_yaml(metadata.App({'AllowedAPKSigningKeys': ['One']})) self.assertEqual('one', cm['AllowedAPKSigningKeys']) def test_app_to_yaml_int_hex(self): cm = metadata._app_to_yaml(metadata.App({'CurrentVersionCode': 0xFF})) self.assertEqual(255, cm['CurrentVersionCode']) def test_app_to_yaml_int_underscore(self): cm = metadata._app_to_yaml(metadata.App({'CurrentVersionCode': 1_2_3})) self.assertEqual(123, cm['CurrentVersionCode']) def test_app_to_yaml_int_0(self): """Document that 0 values fail to make it through.""" # TODO it should be possible to use `CurrentVersionCode: 0` cm = metadata._app_to_yaml(metadata.App({'CurrentVersionCode': 0})) self.assertFalse('CurrentVersionCode' in cm) def test_format_multiline(self): self.assertEqual(metadata._format_multiline('description'), 'description') def test_format_multiline_empty(self): self.assertEqual(metadata._format_multiline(''), '') def test_format_multiline_newline_char(self): self.assertEqual(metadata._format_multiline('one\\ntwo'), 'one\\ntwo') def test_format_multiline_newlines(self): self.assertEqual( metadata._format_multiline( textwrap.dedent( """ one two three """ ) ), '\none\ntwo\nthree\n', ) def test_format_list_empty(self): self.assertEqual(metadata._format_list(['', None]), list()) def test_format_list_one_empty(self): self.assertEqual(metadata._format_list(['foo', None]), ['foo']) def test_format_list_two(self): self.assertEqual(metadata._format_list(['2', '1']), ['2', '1']) def test_format_list_newline(self): self.assertEqual(metadata._format_list(['one\ntwo']), ['one\ntwo']) def test_format_list_newline_char(self): self.assertEqual(metadata._format_list(['one\\ntwo']), ['one\\ntwo']) def test_format_script_empty(self): self.assertEqual(metadata._format_script(['', None]), list()) def test_format_script_newline(self): self.assertEqual(metadata._format_script(['one\ntwo']), 'one\ntwo') def test_format_script_newline_char(self): self.assertEqual(metadata._format_script(['one\\ntwo']), 'one\\ntwo') def test_format_stringmap_empty(self): self.assertEqual( metadata._format_stringmap('🔥', 'test', dict()), list(), ) def test_format_stringmap_one_list(self): self.assertEqual( metadata._format_stringmap('🔥', 'test', {'Tracking': {}, 'Ads': {}}), ['Ads', 'Tracking'], ) def test_format_stringmap_one_list_empty_desc(self): self.assertEqual( metadata._format_stringmap('🔥', 'test', {'NonFree': {}, 'Ads': {'en': ''}}), ['Ads', 'NonFree'], ) def test_format_stringmap_three_list(self): self.assertEqual( metadata._format_stringmap('🔥', 'test', {'B': {}, 'A': {}, 'C': {}}), ['A', 'B', 'C'], ) def test_format_stringmap_two_dict(self): self.assertEqual( metadata._format_stringmap('🔥', 'test', {'1': {'uz': 'a'}, '2': {}}), {'1': {'uz': 'a'}, '2': {}}, ) def test_format_stringmap_three_locales(self): self.assertEqual( metadata._format_stringmap( '🔥', 'test', {'AF': {'uz': 'a', 'ko': 'b', 'zh': 'c'}} ), {'AF': {'ko': 'b', 'uz': 'a', 'zh': 'c'}}, ) def test_format_stringmap_move_build_antifeatures_to_filesystem(self): os.chdir(self.testdir) appid = 'a' yml = Path('metadata/a.yml') yml.parent.mkdir() self.assertEqual( metadata._format_stringmap( appid, 'antifeatures', {'AF': {'uz': 'a', 'ko': 'b', 'zh': 'c'}} ), {'AF': {'ko': 'b', 'uz': 'a', 'zh': 'c'}}, ) def test_format_stringmap_app_antifeatures_conflict(self): """Raise an error if a YAML Anti-Feature conflicts with a localized file.""" os.chdir(self.testdir) appid = 'a' field = 'AntiFeatures' locale = 'ko' yml = Path('metadata/a.yml') antifeatures_ko = yml.parent / appid / locale / field.lower() antifeatures_ko.mkdir(parents=True) afname = 'Anti-🔥' (antifeatures_ko / (afname + '.txt')).write_text('SOMETHING ELSE') with self.assertRaises(MetaDataException): metadata._format_stringmap( appid, field, {afname: {'uz': 'a', locale: 'b', 'zh': 'c'}} ) def test_format_stringmap_app_antifeatures_conflict_same_contents(self): """Raise an error if a YAML Anti-Feature conflicts with a localized file.""" os.chdir(self.testdir) appid = 'a' field = 'AntiFeatures' locale = 'ko' yml = Path('metadata/a.yml') antifeatures_ko = yml.parent / appid / locale / field.lower() antifeatures_ko.mkdir(parents=True) afname = 'Anti-🔥' (antifeatures_ko / (afname + '.txt')).write_text('b') metadata._format_stringmap( appid, field, {afname: {'uz': 'a', locale: 'b', 'zh': 'c'}} ) def test_format_stringmap_build_antifeatures_conflict(self): """Raise an error if a YAML Anti-Feature conflicts with a localized file.""" os.chdir(self.testdir) appid = 'a' field = 'antifeatures' locale = 'ko' versionCode = 123 yml = Path('metadata/a.yml') antifeatures_ko = yml.parent / appid / locale / field.lower() antifeatures_ko.mkdir(parents=True) afname = 'Anti-🔥' with (antifeatures_ko / ('%d_%s.txt' % (versionCode, afname))).open('w') as fp: fp.write('SOMETHING ELSE') with self.assertRaises(MetaDataException): metadata._format_stringmap( appid, field, {afname: {'uz': 'a', locale: 'b', 'zh': 'c'}}, versionCode ) def test_app_to_yaml_one_category(self): """Categories does not get simplified to string when outputting YAML.""" self.assertEqual( metadata._app_to_yaml({'Categories': ['one']}), {'Categories': ['one']}, ) def test_app_to_yaml_categories(self): """Sort case-insensitive before outputting YAML.""" self.assertEqual( metadata._app_to_yaml({'Categories': ['c', 'a', 'B']}), {'Categories': ['a', 'B', 'c']}, ) def test_builds_to_yaml_gradle_yes(self): app = {'Builds': [{'versionCode': 0, 'gradle': ['yes']}]} self.assertEqual( metadata._builds_to_yaml(app), [{'versionCode': 0, 'gradle': ['yes']}] ) def test_builds_to_yaml_gradle_off(self): app = {'Builds': [{'versionCode': 0, 'gradle': ['off']}]} self.assertEqual( metadata._builds_to_yaml(app), [{'versionCode': 0, 'gradle': ['off']}] ) def test_builds_to_yaml_gradle_true(self): app = {'Builds': [{'versionCode': 0, 'gradle': ['true']}]} self.assertEqual( metadata._builds_to_yaml(app), [{'versionCode': 0, 'gradle': ['true']}] ) def test_builds_to_yaml_gradle_false(self): app = {'Builds': [{'versionCode': 0, 'gradle': ['false']}]} self.assertEqual( metadata._builds_to_yaml(app), [{'versionCode': 0, 'gradle': ['false']}] ) def test_builds_to_yaml_stripped(self): self.assertEqual( metadata._builds_to_yaml( { 'Builds': [ metadata.Build({'versionCode': 0, 'rm': [None], 'init': ['']}) ] } ), [{'versionCode': 0}], ) def test_builds_to_yaml(self): """Include one of each flag type with a valid value.""" app = { 'Builds': [ metadata.Build( { 'versionCode': 0, 'gradle': ['free'], 'rm': ['0', '2'], 'submodules': True, 'timeout': 0, 'init': ['false', 'two'], } ) ] } # check that metadata.Build() inited flag values self.assertEqual(app['Builds'][0]['scanignore'], list()) # then unchanged values should be removed by _builds_to_yaml self.assertEqual( metadata._builds_to_yaml(app), [ { 'versionCode': 0, 'gradle': ['free'], 'rm': ['0', '2'], 'submodules': True, 'timeout': 0, 'init': ['false', 'two'], } ], ) class PostMetadataParseTest(unittest.TestCase): """Test the functions that post process the YAML input. The following series of "post_metadata_parse" tests map out the current state of automatic type conversion in the YAML post processing. They are not necessary a statement of how things should be, but more to surface the details of it functions. """ def setUp(self): fdroidserver.metadata.warnings_action = 'error' def _post_metadata_parse_app_int(self, from_yaml, expected): app = {'ArchivePolicy': from_yaml} metadata.post_parse_yaml_metadata(app) return {'ArchivePolicy': expected}, app def _post_metadata_parse_app_list(self, from_yaml, expected): app = {'AllowedAPKSigningKeys': from_yaml} metadata.post_parse_yaml_metadata(app) return {'AllowedAPKSigningKeys': expected}, app def _post_metadata_parse_app_string(self, from_yaml, expected): app = {'Repo': from_yaml} metadata.post_parse_yaml_metadata(app) return {'Repo': expected}, app def _post_metadata_parse_build_bool(self, from_yaml, expected): tested_key = 'submodules' app = {'Builds': [{'versionCode': 1, tested_key: from_yaml}]} post = copy.deepcopy(app) metadata.post_parse_yaml_metadata(post) del app['Builds'][0]['versionCode'] del post['Builds'][0]['versionCode'] for build in post['Builds']: for k in list(build): if k != tested_key: del build[k] app['Builds'][0][tested_key] = expected return app, post def _post_metadata_parse_build_int(self, from_yaml, expected): tested_key = 'versionCode' app = {'Builds': [{'versionCode': from_yaml}]} post = copy.deepcopy(app) metadata.post_parse_yaml_metadata(post) for build in post['Builds']: for k in list(build): if k != tested_key: del build[k] app['Builds'][0][tested_key] = expected return app, post def _post_metadata_parse_build_list(self, from_yaml, expected): tested_key = 'rm' app = {'Builds': [{'versionCode': 1, tested_key: from_yaml}]} post = copy.deepcopy(app) metadata.post_parse_yaml_metadata(post) del app['Builds'][0]['versionCode'] del post['Builds'][0]['versionCode'] for build in post['Builds']: for k in list(build): if k != tested_key: del build[k] app['Builds'][0][tested_key] = expected return app, post def _post_metadata_parse_build_script(self, from_yaml, expected): tested_key = 'build' app = {'Builds': [{'versionCode': 1, tested_key: from_yaml}]} post = copy.deepcopy(app) metadata.post_parse_yaml_metadata(post) del app['Builds'][0]['versionCode'] del post['Builds'][0]['versionCode'] for build in post['Builds']: for k in list(build): if k != tested_key: del build[k] app['Builds'][0][tested_key] = expected return app, post def _post_metadata_parse_build_string(self, from_yaml, expected): tested_key = 'commit' app = {'Builds': [{'versionCode': 1, tested_key: from_yaml}]} post = copy.deepcopy(app) metadata.post_parse_yaml_metadata(post) del app['Builds'][0]['versionCode'] del post['Builds'][0]['versionCode'] for build in post['Builds']: for k in list(build): if k != tested_key: del build[k] app['Builds'][0][tested_key] = expected return app, post def test_post_metadata_parse_none(self): """Run None aka YAML null or blank through the various field and flag types.""" self.assertEqual(*self._post_metadata_parse_app_int(None, None)) self.assertEqual(*self._post_metadata_parse_app_list(None, None)) self.assertEqual(*self._post_metadata_parse_app_string(None, None)) self.assertEqual(*self._post_metadata_parse_build_bool(None, None)) self.assertEqual(*self._post_metadata_parse_build_int(None, None)) self.assertEqual(*self._post_metadata_parse_build_list(None, None)) self.assertEqual(*self._post_metadata_parse_build_script(None, None)) self.assertEqual(*self._post_metadata_parse_build_string(None, None)) def test_post_metadata_parse_int(self): """Run the int 123456 through the various field and flag types.""" self.assertEqual(*self._post_metadata_parse_app_int(123456, 123456)) self.assertEqual(*self._post_metadata_parse_app_list(123456, ['123456'])) self.assertEqual(*self._post_metadata_parse_app_string(123456, '123456')) self.assertEqual(*self._post_metadata_parse_build_bool(123456, True)) self.assertEqual(*self._post_metadata_parse_build_int(123456, 123456)) self.assertEqual(*self._post_metadata_parse_build_list(123456, ['123456'])) self.assertEqual(*self._post_metadata_parse_build_script(123456, ['123456'])) self.assertEqual(*self._post_metadata_parse_build_string(123456, '123456')) def test_post_metadata_parse_sha256(self): """Run a SHA-256 that YAML calls an int through the various types. The current f-droid.org signer set has SHA-256 values with a maximum of two leading zeros, but this will handle more. """ str_sha256 = '0000000000000498456908409534729834729834729834792837487293847926' sha256 = yaml.load('a: ' + str_sha256)['a'] self.assertEqual(*self._post_metadata_parse_app_int(sha256, int(str_sha256))) self.assertEqual(*self._post_metadata_parse_app_list(sha256, [str_sha256])) self.assertEqual(*self._post_metadata_parse_app_string(sha256, str_sha256)) self.assertEqual(*self._post_metadata_parse_build_bool(sha256, True)) self.assertEqual(*self._post_metadata_parse_build_int(sha256, sha256)) self.assertEqual(*self._post_metadata_parse_build_list(sha256, [str_sha256])) self.assertEqual(*self._post_metadata_parse_build_script(sha256, [str_sha256])) self.assertEqual(*self._post_metadata_parse_build_string(sha256, str_sha256)) def test_post_metadata_parse_int_0(self): """Run the int 0 through the various field and flag types.""" self.assertEqual(*self._post_metadata_parse_app_int(0, 0)) self.assertEqual(*self._post_metadata_parse_app_list(0, ['0'])) self.assertEqual(*self._post_metadata_parse_app_string(0, '0')) self.assertEqual(*self._post_metadata_parse_build_bool(0, False)) self.assertEqual(*self._post_metadata_parse_build_int(0, 0)) self.assertEqual(*self._post_metadata_parse_build_list(0, ['0'])) self.assertEqual(*self._post_metadata_parse_build_script(0, ['0'])) self.assertEqual(*self._post_metadata_parse_build_string(0, '0')) def test_post_metadata_parse_float_0_0(self): """Run the float 0.0 through the various field and flag types.""" with self.assertRaises(MetaDataException): self._post_metadata_parse_app_int(0.0, MetaDataException) self.assertEqual(*self._post_metadata_parse_app_list(0.0, ['0.0'])) self.assertEqual(*self._post_metadata_parse_app_string(0.0, '0.0')) self.assertEqual(*self._post_metadata_parse_build_bool(0.0, False)) with self.assertRaises(MetaDataException): self._post_metadata_parse_build_int(0.0, MetaDataException) self.assertEqual(*self._post_metadata_parse_build_list(0.0, ['0.0'])) self.assertEqual(*self._post_metadata_parse_build_script(0.0, ['0.0'])) self.assertEqual(*self._post_metadata_parse_build_string(0.0, '0.0')) def test_post_metadata_parse_float_0_1(self): """Run the float 0.1 through the various field and flag types.""" with self.assertRaises(MetaDataException): self._post_metadata_parse_app_int(0.1, MetaDataException) self.assertEqual(*self._post_metadata_parse_app_list(0.1, ['0.1'])) self.assertEqual(*self._post_metadata_parse_app_string(0.1, '0.1')) self.assertEqual(*self._post_metadata_parse_build_bool(0.1, True)) with self.assertRaises(MetaDataException): self._post_metadata_parse_build_int(0.1, MetaDataException) self.assertEqual(*self._post_metadata_parse_build_list(0.1, ['0.1'])) self.assertEqual(*self._post_metadata_parse_build_script(0.1, ['0.1'])) self.assertEqual(*self._post_metadata_parse_build_string(0.1, '0.1')) def test_post_metadata_parse_float_1_0(self): """Run the float 1.0 through the various field and flag types.""" with self.assertRaises(MetaDataException): self._post_metadata_parse_app_int(1.0, MetaDataException) self.assertEqual(*self._post_metadata_parse_app_list(1.0, ['1.0'])) self.assertEqual(*self._post_metadata_parse_app_string(1.0, '1.0')) self.assertEqual(*self._post_metadata_parse_build_bool(1.0, True)) with self.assertRaises(MetaDataException): self._post_metadata_parse_build_int(1.0, MetaDataException) self.assertEqual(*self._post_metadata_parse_build_list(1.0, ['1.0'])) self.assertEqual(*self._post_metadata_parse_build_script(1.0, ['1.0'])) self.assertEqual(*self._post_metadata_parse_build_string(1.0, '1.0')) def test_post_metadata_parse_empty_list(self): with self.assertRaises(MetaDataException): self._post_metadata_parse_app_int(list(), MetaDataException) self.assertEqual(*self._post_metadata_parse_app_list(list(), list())) self.assertEqual(*self._post_metadata_parse_app_string(list(), list())) self.assertEqual(*self._post_metadata_parse_build_bool(list(), False)) with self.assertRaises(MetaDataException): self._post_metadata_parse_build_int(list(), MetaDataException) self.assertEqual(*self._post_metadata_parse_build_list(list(), list())) self.assertEqual(*self._post_metadata_parse_build_script(list(), list())) self.assertEqual(*self._post_metadata_parse_build_string(list(), list())) def test_post_metadata_parse_set_of_1(self): with self.assertRaises(MetaDataException): self._post_metadata_parse_app_int({1}, MetaDataException) self.assertEqual(*self._post_metadata_parse_app_list({1}, ['1'])) self.assertEqual(*self._post_metadata_parse_app_string({1}, '{1}')) self.assertEqual(*self._post_metadata_parse_build_bool({1}, True)) with self.assertRaises(MetaDataException): self._post_metadata_parse_build_int({1}, MetaDataException) self.assertEqual(*self._post_metadata_parse_build_list({1}, ['1'])) self.assertEqual(*self._post_metadata_parse_build_script({1}, ['1'])) self.assertEqual(*self._post_metadata_parse_build_string({1}, '{1}')) def test_post_metadata_parse_empty_dict(self): with self.assertRaises(MetaDataException): self._post_metadata_parse_app_int(dict(), MetaDataException) self.assertEqual(*self._post_metadata_parse_app_list(dict(), dict())) self.assertEqual(*self._post_metadata_parse_app_string(dict(), dict())) self.assertEqual(*self._post_metadata_parse_build_bool(dict(), False)) with self.assertRaises(MetaDataException): self._post_metadata_parse_build_int(dict(), MetaDataException) self.assertEqual(*self._post_metadata_parse_build_list(dict(), dict())) self.assertEqual(*self._post_metadata_parse_build_script(dict(), dict())) self.assertEqual(*self._post_metadata_parse_build_string(dict(), dict())) def test_post_metadata_parse_list_int_string(self): with self.assertRaises(MetaDataException): self._post_metadata_parse_app_int([1, 'a'], MetaDataException) self.assertEqual(*self._post_metadata_parse_app_list([1, 'a'], ['1', 'a'])) self.assertEqual(*self._post_metadata_parse_app_string([1, 'a'], "[1, 'a']")) self.assertEqual(*self._post_metadata_parse_build_bool([1, 'a'], True)) with self.assertRaises(MetaDataException): self._post_metadata_parse_build_int([1, 'a'], MetaDataException) self.assertEqual(*self._post_metadata_parse_build_list([1, 'a'], ['1', 'a'])) self.assertEqual(*self._post_metadata_parse_build_script([1, 'a'], ['1', 'a'])) self.assertEqual(*self._post_metadata_parse_build_string([1, 'a'], "[1, 'a']")) def test_post_metadata_parse_dict_int_string(self): with self.assertRaises(MetaDataException): self._post_metadata_parse_app_int({'k': 1}, MetaDataException) with self.assertRaises(MetaDataException): self._post_metadata_parse_app_list({'k': 1}, MetaDataException) self.assertEqual(*self._post_metadata_parse_app_string({'k': 1}, "{'k': 1}")) self.assertEqual(*self._post_metadata_parse_build_bool({'k': 1}, True)) with self.assertRaises(MetaDataException): self._post_metadata_parse_build_int({'k': 1}, MetaDataException) with self.assertRaises(MetaDataException): self._post_metadata_parse_build_list({'k': 1}, MetaDataException) with self.assertRaises(MetaDataException): self._post_metadata_parse_build_script({'k': 1}, MetaDataException) self.assertEqual(*self._post_metadata_parse_build_string({'k': 1}, "{'k': 1}")) def test_post_metadata_parse_false(self): with self.assertRaises(MetaDataException): self._post_metadata_parse_app_int(False, MetaDataException) self.assertEqual(*self._post_metadata_parse_app_list(False, ['false'])) self.assertEqual(*self._post_metadata_parse_app_string(False, 'false')) self.assertEqual(*self._post_metadata_parse_build_bool(False, False)) with self.assertRaises(MetaDataException): self._post_metadata_parse_build_int(False, MetaDataException) self.assertEqual(*self._post_metadata_parse_build_list(False, ['false'])) self.assertEqual(*self._post_metadata_parse_build_script(False, ['false'])) self.assertEqual(*self._post_metadata_parse_build_string(False, 'false')) def test_post_metadata_parse_true(self): with self.assertRaises(MetaDataException): self._post_metadata_parse_app_int(True, MetaDataException) self.assertEqual(*self._post_metadata_parse_app_list(True, ['true'])) self.assertEqual(*self._post_metadata_parse_app_string(True, 'true')) self.assertEqual(*self._post_metadata_parse_build_bool(True, True)) with self.assertRaises(MetaDataException): self._post_metadata_parse_build_int(True, MetaDataException) self.assertEqual(*self._post_metadata_parse_build_list(True, ['true'])) self.assertEqual(*self._post_metadata_parse_build_script(True, ['true'])) self.assertEqual(*self._post_metadata_parse_build_string(True, 'true')) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742812298.0 fdroidserver-2.4.0/tests/test_net.py0000755000175000017500000001304214770232212016263 0ustar00hanshans#!/usr/bin/env python3 import os import random import requests import socket import tempfile import threading import time import unittest from unittest.mock import MagicMock, patch from fdroidserver import net from pathlib import Path class RetryServer: """A stupid simple HTTP server that can fail to connect. Proxy settings via environment variables can interfere with this test. The requests library will automatically pick up proxy settings from environment variables. Proxy settings can force the local connection over the proxy, which might not support that, then this fails with an error like 405 or others. """ def __init__(self, port=None, failures=3): self.port = port if self.port is None: self.port = random.randint(1024, 65535) # nosec B311 self.failures = failures self.stop_event = threading.Event() threading.Thread(target=self.run_fake_server).start() def stop(self): self.stop_event.set() def run_fake_server(self): addr = ('localhost', self.port) # localhost might not be a valid name for all families, use the first available family = socket.getaddrinfo(addr[0], addr[1], type=socket.SOCK_STREAM)[0][0] server_sock = socket.create_server(addr, family=family) server_sock.listen(5) server_sock.settimeout(5) time.sleep(0.001) # wait for it to start while not self.stop_event.is_set(): self.failures -= 1 conn = None try: conn, address = server_sock.accept() conn.settimeout(5) except TimeoutError: break if self.failures > 0: conn.close() continue conn.recv(8192) # request ignored self.reply = b"""HTTP/1.1 200 OK Date: Mon, 26 Feb 2024 09:00:14 GMT Connection: close Content-Type: text/html Hello World! """ self.reply = self.reply.replace(b' ', b'') # dedent conn.sendall(self.reply) conn.shutdown(socket.SHUT_RDWR) conn.close() self.stop_event.wait(timeout=1) server_sock.shutdown(socket.SHUT_RDWR) server_sock.close() class NetTest(unittest.TestCase): def setUp(self): self.tempdir = tempfile.TemporaryDirectory() os.chdir(self.tempdir.name) Path('tmp').mkdir() def tearDown(self): self.tempdir.cleanup() @patch('requests.get') def test_download_file_url_parsing(self, requests_get): # pylint: disable=unused-argument def _get(url, stream, allow_redirects, headers, timeout): return MagicMock() requests_get.side_effect = _get f = net.download_file('https://f-droid.org/repo/entry.jar', retries=0) requests_get.assert_called() self.assertTrue(os.path.exists(f)) self.assertEqual('tmp/entry.jar', f) f = net.download_file( 'https://d-05.example.com/custom/com.downloader.aegis-3175421.apk?_fn=QVBLUHVyZV92My4xNy41NF9hcGtwdXJlLmNvbS5hcGs&_p=Y29tLmFwa3B1cmUuYWVnb24&am=6avvTpfJ1dMl9-K6JYKzQw&arg=downloader%3A%2F%2Fcampaign%2F%3Futm_medium%3Ddownloader%26utm_source%3Daegis&at=1652080635&k=1f6e58465df3a441665e585719ab0b13627a117f&r=https%3A%2F%2Fdownloader.com%2Fdownloader-app.html%3Ficn%3Daegis%26ici%3Dimage_qr&uu=http%3A%2F%2F172.16.82.1%2Fcustom%2Fcom.downloader.aegis-3175421.apk%3Fk%3D3fb9c4ae0be578206f6a1c330736fac1627a117f', retries=0, ) self.assertTrue(requests_get.called) self.assertTrue(os.path.exists(f)) self.assertEqual('tmp/com.downloader.aegis-3175421.apk', f) @patch.dict(os.environ, clear=True) def test_download_file_retries(self): server = RetryServer() f = net.download_file('http://localhost:%d/f.txt' % server.port) # strip the HTTP headers and compare the reply self.assertEqual(server.reply.split(b'\n\n')[1], Path(f).read_bytes()) server.stop() @patch.dict(os.environ, clear=True) def test_download_file_retries_not_forever(self): """The retry logic should eventually exit with an error.""" server = RetryServer(failures=5) with self.assertRaises(requests.exceptions.ConnectionError): net.download_file('http://localhost:%d/f.txt' % server.port) server.stop() @unittest.skipIf(os.getenv('CI'), 'FIXME this fails mysteriously only in GitLab CI') @patch.dict(os.environ, clear=True) def test_download_using_mirrors_retries(self): server = RetryServer() f = net.download_using_mirrors( [ 'https://fake.com/f.txt', # 404 or 301 Redirect 'https://httpbin.org/status/403', 'https://httpbin.org/status/500', 'http://localhost:1/f.txt', # ConnectionError 'http://localhost:%d/should-succeed' % server.port, ], ) # strip the HTTP headers and compare the reply self.assertEqual(server.reply.split(b'\n\n')[1], Path(f).read_bytes()) server.stop() @patch.dict(os.environ, clear=True) def test_download_using_mirrors_retries_not_forever(self): """The retry logic should eventually exit with an error.""" server = RetryServer(failures=5) with self.assertRaises(requests.exceptions.ConnectionError): net.download_using_mirrors(['http://localhost:%d/' % server.port]) server.stop() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/tests/test_nightly.py0000755000175000017500000004416014770502071017163 0ustar00hanshans#!/usr/bin/env python3 import os import platform import requests import shutil import subprocess import tempfile import time import unittest import yaml from pathlib import Path from unittest.mock import patch from fdroidserver import common, exception, index, nightly DEBUG_KEYSTORE = '/u3+7QAAAAIAAAABAAAAAQAPYW5kcm9pZGRlYnVna2V5AAABNYhAuskAAAK8MIICuDAOBgorBgEEASoCEQEBBQAEggKkqRnFlhidQmVff83bsAeewXPIsF0jiymzJnvrnUAQtCK0MV9uZonu37Mrj/qKLn56mf6QcvEoKvpCstZxzftgYYpAHWMVLM+hy2Z707QZEHlY7Ukppt8DItj+dXkeqGt7f8KzOb2AQwDbt9lm1fJb+MefLowTaubtvrLMcKIne43CbCu2D8HyN7RPWpEkVetA2Qgr5W4sa3tIUT80afqo9jzwJjKCspuxY9A1M8EIM3/kvyLo2B9r0cuWwRjYZXJ6gmTYI2ARNz0KQnCZUok14NDg+mZTb1B7AzRfb0lfjbA6grbzuAL+WaEpO8/LgGfuOh7QBZBT498TElOaFfQ9toQWA79wAmrQCm4OoFukpPIy2m/l6VjJSmlK5Q+CMOl/Au7OG1sUUCTvPaIr0XKnsiwDJ7a71n9garnPWHkvuWapSRCzCNgaUoGQjB+fTMJFFrwT8P1aLfM6onc3KNrDStoQZuYe5ngCLlNS56bENkVGvJBfdkboxtHZjqDXXON9jWGSOI527J3o2D5sjSVyx3T9XPrsL4TA/nBtdU+c/+M6aoASZR2VymzAKdMrGfj9kE5GXp8vv2vkJj9+OJ4Jm5yeczocc/Idtojjb1yg+sq1yY8kAQxgezpY1rpgi2jF3tSN01c23DNvAaSJLJX2ZuH8sD40ACc80Y1Qp1nUTdpwBZUeaeNruBwx4PHU8GnC71FwtiUpwNs0OoSl0pgDUJ3ODC5bs8B5QmW1wu1eg7I4mMSmCsNGW6VN3sFcu+WEqnmTxPoZombdFZKxsr2oq359Nn4bJ6Uc9PBz/sXsns7Zx1vND/oK/Jv5Y269UVAMeKX/eGpfnxzagW3tqGbOu12C2p9Azo5VxiU2fG/tmk2PjaG5hV/ywReco7I6C1p8OWM2fwAAAAEABVguNTA5AAAB6TCCAeUwggFOoAMCAQICBE89gTUwDQYJKoZIhvcNAQEFBQAwNzELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0FuZHJvaWQxFjAUBgNVBAMTDUFuZHJvaWQgRGVidWcwHhcNMTIwMjE2MjIyMDM3WhcNNDIwMjA4MjIyMDM3WjA3MQswCQYDVQQGEwJVUzEQMA4GA1UEChMHQW5kcm9pZDEWMBQGA1UEAxMNQW5kcm9pZCBEZWJ1ZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA3AKU7S7JXhUjEwxWP1/LPHXieh61SaA/+xbpqsPA+yjGz1sAcGAyuG6bjNAVm56pq7nkjJzicX7Wi83nUBo58DEC/quxOLdy0C4PEOSAeTnTT1RJIwMDvOgiL1GFCErvQ7gCH6zuAID/JRFbN6nIkhDjs2DYnSBl7aJJf8wCLc0CAwEAATANBgkqhkiG9w0BAQUFAAOBgQAoq/TJffA0l+ZGf89xndmHdxrO6qi+TzSlByvLZ4eFfCovTh1iO+Edrd5V1yXGLxyyvdsadMAFZT8SaxMrP5xxhJ0nra0APWYLpA96M//auMhQBWPgqPntwgvEZuEH7f0kdItjBJ39yijbG8xfgwid6XqNUo0TDDkp/wNWKpJ9tJe+2PrGw1NAvrgSydoH2j8DI1Eq' DEBUG_KEYSTORE_KEY_FILE_NAME = ( 'debug_keystore_QW+xRCJDGHXyyFtgCW8QRajj+6uYmsLwGWpCfYqYQ5M_id_rsa' ) AOSP_TESTKEY_DEBUG_KEYSTORE = '/u3+7QAAAAIAAAABAAAAAQAPYW5kcm9pZGRlYnVna2V5AAABejjuIU0AAAUBMIIE/TAOBgorBgEEASoCEQEBBQAEggTpvqhdBtq9D3jRUZGnhKLbFH1LMtCKqwGg25ETAEhvK1GVRNuWAHAUUedCnarjgeUy/zx9OsHuZq18KjUI115kWq/jxkf00fIg7wrOmXoyJf5Dbc7NGKjU64rRmppQEkJ417Lq4Uola9EBJ/WweEu6UTjTn5HcNl4mVloWKMBKNPkVfhZhAkXUyjiZ9rCVHMjLOVKG5vyTWZLwXpYR00Xz6VyzSunTyDza5oUOT/Fh7Gw74V7iNHANydkBHmH+UJ100p0vNPRFvt/3ABfMjkNbRXKNERnyN7NeBmCAOceuXjme/n0XLUidP9/NYk1yAmRJgUnauKD6UPSZYaUPuNSSdf4dD5fCQ7OVDq95e7vmqRDfrKUoWmtpndN7hbVl+OHVZXk2ngvXbvoS+F7ShsEfbq7+c37dnOcVrIlrY+wlOWX2jN42T+AkGt3AfA8zdIPdNgLGk64Op+aP4vGyLQqbuUEzOTNG9uExjGlamogPKFf93GAF83xv7AChYLR/9H+B1E955FL58bRuYOXVWJfLRsO/jyjXsilhBggo3VD1omRuOp98AkKP+P9JXCTswK7IZgvbMK3GB6QIzD20vlT0eK6JGLeWE7cXVn6oT26zvnqAjJ94PjS+YckMOExhqwCivPp1VaX6JzpQ1wr52OsGDUvconcjYrBEHBiY+UnMUk0Wj4mhZlJd1lpybZcWZ3vhTIlM0uMt4udl7t+zsgZ6BW97/pkGaa+QoxeTvgNlHGYyDYp8hveM3bCLXTHULw8mXUHxOJawq/J3E6vZ5/h2nzfmQmWtZtBOGWCkq+gKusTFUsHghjvHsPcQ2+EVfMcePBb/FKvtzSgH59C3iNOHE29l3ceSqccgxlxfStzbf+QkP7gxGVGZ8rLnCn3s8WzkGHZE4LtS0Zm3Y+hV5igrClk940YZP1hmilt2y7adPE4gCyQjb44JXgc3/NxlkZJcmeZTfAGxMXT8HG6Use/Kti114phsF7GDrqk1kPbB51Hr3xF1NAJUWP3csg3jgTS3E6jgD5XjPPG9BEDE2MwnBlUUMe3TC8TIWkK+AlwjlsDr5B9nqy2Fevv62+k5Adplw+fsQ8VzZREZF+MllWO3vtkD6srdx9h4vPD3dp5urFCFXNRaoD3SMDk27z3EVCQZ4bPL5PsVpB/ZBotLGkUZ0yi+5oC+u7ByP1ihMXMsRgvXbQpyOonEqDy84EZiIPWbyzGd0tEAXLz3mMh1x/IqZ1wxyDT/vkxhNCFqlBNlRW6GbMN2cng4A9Cigj9eNu9ptL1tdgFTxwndjoNRQMJ0NAc6WnsQ1UeIu8nMsa8/kLDtnVFLVmPQv2ZBUM4mxLrwC1mxOiQrWBW2XJ1OIheimSkLHfQOef1mIH3Z0cBuLBKGkRYGaXiZ6RX7po+ch0WFGjBef3e3uczl1mT5WGKdIG4x1+aRAtJHL+9K7Z6wzG0ygoamdiX2Fd0xBrWjTU72DzYbceqc+uHrbcLKDa5w0ENhyYK0+XEzG5fXHjFgmawY1D7xZQOJZO3jxStcv+xzoiTnNSrIxbxog/0Fez/WhMM9H6gV4eeDjMWEg79cJLugCBNwqmp3Yoe5EDU2TxQlLT53tye3Aji3FbocuDWjLI3Jc5VDxd7lrbzeIbFzSNpoFG8DSgjSiq41WJVeuzXxmdl7HM4zQpGRAAAAAQAFWC41MDkAAASsMIIEqDCCA5CgAwIBAgIJAJNurL4H8gHfMA0GCSqGSIb3DQEBBQUAMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAeFw0wODAyMjkwMTMzNDZaFw0zNTA3MTcwMTMzNDZaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBANaTGQTexgskse3HYuDZ2CU+Ps1s6x3i/waMqOi8qM1r03hupwqnbOYOuw+ZNVn/2T53qUPn6D1LZLjk/qLT5lbx4meoG7+yMLV4wgRDvkxyGLhG9SEVhvA4oU6Jwr44f46+z4/Kw9oe4zDJ6pPQp8PcSvNQIg1QCAcy4ICXF+5qBTNZ5qaU7Cyz8oSgpGbIepTYOzEJOmc3Li9kEsBubULxWBjf/gOBzAzURNps3cO4JFgZSAGzJWQTT7/emMkod0jb9WdqVA2BVMi7yge54kdVMxHEa5r3b97szI5p58ii0I54JiCUP5lyfTwE/nKZHZnfm644oLIXf6MdW2r+6R8CAQOjgfwwgfkwHQYDVR0OBBYEFEhZAFY9JyxGrhGGBaR0GawJyowRMIHJBgNVHSMEgcEwgb6AFEhZAFY9JyxGrhGGBaR0GawJyowRoYGapIGXMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbYIJAJNurL4H8gHfMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHqvlozrUMRBBVEY0NqrrwFbinZaJ6cVosK0TyIUFf/azgMJWr+kLfcHCHJsIGnlw27drgQAvilFLAhLwn62oX6snb4YLCBOsVMR9FXYJLZW2+TcIkCRLXWG/oiVHQGo/rWuWkJgU134NDEFJCJGjDbiLCpe+ZTWHdcwauTJ9pUbo8EvHRkU3cYfGmLaLfgn9gP+pWA7LFQNvXwBnDa6sppCccEX31I828XzgXpJ4O+mDL1/dBd+ek8ZPUP0IgdyZm5MTYPhvVqGCHzzTy3sIeJFymwrsBbmg2OAUNLEMO6nwmocSdN2ClirfxqCzJOLSDE4QyS9BAH6EhY6UFcOaE21IJawTAEXnf52TqT7diFUlWRSnQ==' AOSP_TESTKEY_DEBUG_KEYSTORE_KEY_FILE_NAME = ( 'debug_keystore_k47SVrA85+oMZAexHc62PkgvIgO8TJBYN00U82xSlxc_id_rsa' ) basedir = Path(__file__).parent testroot = basedir.with_name('.testfiles') class Options: allow_disabled_algorithms = False clean = False delete_unknown = False nosign = False pretty = True rename_apks = False verbose = False @unittest.skipUnless( platform.system() == 'Linux', 'skipping test_nightly, it currently only works GNU/Linux', ) class NightlyTest(unittest.TestCase): path = os.environ['PATH'] def setUp(self): common.config = None nightly.config = None testroot.mkdir(exist_ok=True) os.chdir(basedir) self.tempdir = tempfile.TemporaryDirectory( str(time.time()), self._testMethodName + '_', testroot ) self.testdir = Path(self.tempdir.name) self.home = self.testdir / 'home' self.home.mkdir() self.dot_android = self.home / '.android' nightly.KEYSTORE_FILE = str(self.dot_android / 'debug.keystore') def tearDown(self): self.tempdir.cleanup() try: os.rmdir(testroot) except OSError: # other test modules might have left stuff around pass def _copy_test_debug_keystore(self): self.dot_android.mkdir() shutil.copy( basedir / 'aosp_testkey_debug.keystore', self.dot_android / 'debug.keystore', ) def _copy_debug_apk(self): outputdir = Path('app/build/output/apk/debug') outputdir.mkdir(parents=True) shutil.copy(basedir / 'urzip.apk', outputdir / 'urzip-debug.apk') def test_get_repo_base_url(self): for clone_url, repo_git_base, result in [ ( 'https://github.com/onionshare/onionshare-android-nightly', 'onionshare/onionshare-android-nightly', 'https://raw.githubusercontent.com/onionshare/onionshare-android-nightly/master/fdroid', ), ( 'https://gitlab.com/fdroid/fdroidclient-nightly', 'fdroid/fdroidclient-nightly', 'https://gitlab.com/fdroid/fdroidclient-nightly/-/raw/master/fdroid', ), ]: url = nightly.get_repo_base_url(clone_url, repo_git_base) self.assertEqual(result, url) r = requests.head(os.path.join(url, 'repo/index-v1.jar'), timeout=300) # gitlab.com often returns 403 Forbidden from their cloudflare restrictions self.assertTrue(r.status_code in (200, 403), 'should not be a redirect') def test_get_keystore_secret_var(self): self.assertEqual( AOSP_TESTKEY_DEBUG_KEYSTORE, nightly._get_keystore_secret_var(basedir / 'aosp_testkey_debug.keystore'), ) @patch.dict(os.environ, clear=True) def test_ssh_key_from_debug_keystore(self): os.environ['HOME'] = str(self.home) os.environ['PATH'] = self.path ssh_private_key_file = nightly._ssh_key_from_debug_keystore( basedir / 'aosp_testkey_debug.keystore' ) with open(ssh_private_key_file) as fp: self.assertIn('-----BEGIN RSA PRIVATE KEY-----', fp.read()) with open(ssh_private_key_file + '.pub') as fp: self.assertEqual(fp.read(8), 'ssh-rsa ') shutil.rmtree(os.path.dirname(ssh_private_key_file)) @patch.dict(os.environ, clear=True) @patch('sys.argv', ['fdroid nightly', '--verbose']) def test_main_empty_dot_android(self): """Test that it exits with an error when ~/.android is empty""" os.environ['HOME'] = str(self.home) os.environ['PATH'] = self.path with self.assertRaises(SystemExit) as cm: nightly.main() self.assertEqual(cm.exception.code, 1) @patch.dict(os.environ, clear=True) @patch('sys.argv', ['fdroid nightly', '--verbose']) def test_main_empty_dot_ssh(self): """Test that it does not create ~/.ssh if it does not exist Careful! If the test env is wrong, it can mess up the local SSH setup. """ dot_ssh = self.home / '.ssh' self._copy_test_debug_keystore() os.environ['HOME'] = str(self.home) os.environ['PATH'] = self.path self.assertFalse(dot_ssh.exists()) nightly.main() self.assertFalse(dot_ssh.exists()) @patch.dict(os.environ, clear=True) @patch('sys.argv', ['fdroid nightly', '--verbose']) def test_main_on_user_machine(self): """Test that `fdroid nightly` runs on the user's machine Careful! If the test env is wrong, it can mess up the local SSH setup. """ dot_ssh = self.home / '.ssh' dot_ssh.mkdir() self._copy_test_debug_keystore() os.environ['HOME'] = str(self.home) os.environ['PATH'] = self.path nightly.main() self.assertTrue((dot_ssh / AOSP_TESTKEY_DEBUG_KEYSTORE_KEY_FILE_NAME).exists()) self.assertTrue( (dot_ssh / (AOSP_TESTKEY_DEBUG_KEYSTORE_KEY_FILE_NAME + '.pub')).exists() ) @patch('fdroidserver.common.vcs_git.git', lambda args, e: common.PopenResult(1)) @patch('sys.argv', ['fdroid nightly', '--verbose']) def test_private_or_non_existent_git_mirror(self): """Test that this exits with an error when the git mirror repo won't work Careful! If the test environment is setup wrong, it can mess up local files in ~/.ssh or ~/.android. """ os.chdir(self.testdir) with patch.dict( os.environ, { 'CI': 'true', 'CI_PROJECT_PATH': 'thisshouldneverexist/orthistoo', 'CI_PROJECT_URL': 'https://gitlab.com/thisshouldneverexist/orthistoo', 'DEBUG_KEYSTORE': DEBUG_KEYSTORE, 'GITLAB_USER_NAME': 'username', 'GITLAB_USER_EMAIL': 'username@example.com', 'HOME': str(self.testdir), 'PATH': os.getenv('PATH'), }, clear=True, ): with self.assertRaises(exception.VCSException): nightly.main() def _put_fdroid_in_args(self, args): """Find fdroid command that belongs to this source code tree""" fdroid = os.path.join(basedir.parent, 'fdroid') if not os.path.exists(fdroid): fdroid = os.getenv('fdroid') return [fdroid] + args[1:] @patch('sys.argv', ['fdroid nightly', '--verbose']) @patch('platform.node', lambda: 'example.com') def test_github_actions(self): """Careful! If the test env is bad, it'll mess up the local SSH setup https://docs.github.com/en/actions/learn-github-actions/environment-variables """ called = [] orig_check_call = subprocess.check_call os.chdir(self.testdir) os.makedirs('fdroid/git-mirror/fdroid/repo') # fake this to avoid cloning self._copy_test_debug_keystore() self._copy_debug_apk() def _subprocess_check_call(args, cwd=None, env=None): if os.path.basename(args[0]) in ('keytool', 'openssl'): orig_check_call(args, cwd=cwd, env=env) elif args[:2] == ['fdroid', 'update']: orig_check_call(self._put_fdroid_in_args(args), cwd=cwd, env=env) else: called.append(args[:2]) return with patch.dict( os.environ, { 'CI': 'true', 'DEBUG_KEYSTORE': DEBUG_KEYSTORE, 'GITHUB_ACTIONS': 'true', 'GITHUB_ACTOR': 'username', 'GITHUB_REPOSITORY': 'f-droid/test', 'GITHUB_SERVER_URL': 'https://github.com', 'HOME': str(self.testdir), 'PATH': os.getenv('PATH'), 'fdroid': os.getenv('fdroid', ''), }, clear=True, ): self.assertTrue(testroot == Path.home().parent) with patch('subprocess.check_call', _subprocess_check_call): try: nightly.main() except exception.BuildException as e: if "apksigner not found" in e.value: self.skipTest("skipping, apksigner not found due to fake $HOME") else: raise self.assertEqual(called, [['ssh', '-Tvi'], ['fdroid', 'deploy']]) git_url = 'git@github.com:f-droid/test-nightly' mirror_url = index.get_mirror_service_urls({"url": git_url})[0] expected = { 'archive_description': 'Old nightly builds that have been archived.', 'archive_name': 'f-droid/test-nightly archive', 'archive_older': 20, 'archive_url': mirror_url + '/archive', 'keydname': 'CN=Android Debug,O=Android,C=US', 'keypass': 'android', 'keystore': nightly.KEYSTORE_FILE, 'keystorepass': 'android', 'make_current_version_link': False, 'repo_description': 'Nightly builds from username@example.com', 'repo_keyalias': 'androiddebugkey', 'repo_name': 'f-droid/test-nightly', 'repo_url': mirror_url + '/repo', 'servergitmirrors': [{"url": git_url}], } with open(common.CONFIG_FILE) as fp: config = yaml.safe_load(fp) # .ssh is random tmpdir set in nightly.py, so test basename only self.assertEqual( os.path.basename(config['identity_file']), DEBUG_KEYSTORE_KEY_FILE_NAME, ) del config['identity_file'] self.assertEqual(expected, config) @patch('sys.argv', ['fdroid nightly', '--verbose']) def test_gitlab_ci(self): """Careful! If the test env is bad, it can mess up the local SSH setup""" called = [] orig_check_call = subprocess.check_call os.chdir(self.testdir) os.makedirs('fdroid/git-mirror/fdroid/repo') # fake this to avoid cloning self._copy_test_debug_keystore() self._copy_debug_apk() def _subprocess_check_call(args, cwd=None, env=None): if os.path.basename(args[0]) in ('keytool', 'openssl'): orig_check_call(args, cwd=cwd, env=env) elif args[:2] == ['fdroid', 'update']: orig_check_call(self._put_fdroid_in_args(args), cwd=cwd, env=env) else: called.append(args[:2]) return with patch.dict( os.environ, { 'CI': 'true', 'CI_PROJECT_PATH': 'fdroid/test', 'CI_PROJECT_URL': 'https://gitlab.com/fdroid/test', 'DEBUG_KEYSTORE': DEBUG_KEYSTORE, 'GITLAB_USER_NAME': 'username', 'GITLAB_USER_EMAIL': 'username@example.com', 'HOME': str(self.testdir), 'PATH': os.getenv('PATH'), 'fdroid': os.getenv('fdroid', ''), }, clear=True, ): self.assertTrue(testroot == Path.home().parent) with patch('subprocess.check_call', _subprocess_check_call): try: nightly.main() except exception.BuildException as e: if "apksigner not found" in e.value: self.skipTest("skipping, apksigner not found due to fake $HOME") else: raise self.assertEqual(called, [['ssh', '-Tvi'], ['fdroid', 'deploy']]) expected = { 'archive_description': 'Old nightly builds that have been archived.', 'archive_name': 'fdroid/test-nightly archive', 'archive_older': 20, 'archive_url': 'https://gitlab.com/fdroid/test-nightly/-/raw/master/fdroid/archive', 'keydname': 'CN=Android Debug,O=Android,C=US', 'keypass': 'android', 'keystore': nightly.KEYSTORE_FILE, 'keystorepass': 'android', 'make_current_version_link': False, 'repo_description': 'Nightly builds from username@example.com', 'repo_keyalias': 'androiddebugkey', 'repo_name': 'fdroid/test-nightly', 'repo_url': 'https://gitlab.com/fdroid/test-nightly/-/raw/master/fdroid/repo', 'servergitmirrors': [{"url": 'git@gitlab.com:fdroid/test-nightly'}], } with open(common.CONFIG_FILE) as fp: config = yaml.safe_load(fp) # .ssh is random tmpdir set in nightly.py, so test basename only self.assertEqual( os.path.basename(config['identity_file']), DEBUG_KEYSTORE_KEY_FILE_NAME, ) del config['identity_file'] self.assertEqual(expected, config) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898792.0 fdroidserver-2.4.0/tests/test_publish.py0000755000175000017500000004012714770503150017151 0ustar00hanshans#!/usr/bin/env python3 # # command which created the keystore used in this test case: # # $ for ALIAS in repokey a163ec9b d2d51ff2 dc3b169e 78688a0f; \ # do keytool -genkey -keystore dummy-keystore.jks \ # -alias $ALIAS -keyalg 'RSA' -keysize '2048' \ # -validity '10000' -storepass 123456 -storetype jks \ # -keypass 123456 -dname 'CN=test, OU=F-Droid'; done # import json import os import pathlib import shutil import sys import unittest import tempfile from unittest import mock from fdroidserver import publish from fdroidserver import common from fdroidserver import metadata from fdroidserver import signatures from fdroidserver._yaml import yaml from fdroidserver.exception import FDroidException from .shared_test_code import mkdtemp, VerboseFalseOptions basedir = pathlib.Path(__file__).parent class PublishTest(unittest.TestCase): '''fdroidserver/publish.py''' def setUp(self): os.chdir(basedir) self._td = mkdtemp() self.testdir = self._td.name def tearDown(self): self._td.cleanup() os.chdir(basedir) def test_key_alias(self): publish.config = {} self.assertEqual('a163ec9b', publish.key_alias('com.example.app')) self.assertEqual('d2d51ff2', publish.key_alias('com.example.anotherapp')) self.assertEqual('dc3b169e', publish.key_alias('org.test.testy')) self.assertEqual('78688a0f', publish.key_alias('org.org.org')) self.assertEqual('ee8807d2', publish.key_alias("org.schabi.newpipe")) self.assertEqual('b53c7e11', publish.key_alias("de.grobox.liberario")) publish.config = { 'keyaliases': {'yep.app': '@org.org.org', 'com.example.app': '1a2b3c4d'} } self.assertEqual('78688a0f', publish.key_alias('yep.app')) self.assertEqual('1a2b3c4d', publish.key_alias('com.example.app')) def test_read_fingerprints_from_keystore(self): common.config = {} common.fill_config_defaults(common.config) publish.config = common.config publish.config['keystorepass'] = '123456' publish.config['keypass'] = '123456' publish.config['keystore'] = 'dummy-keystore.jks' expected = { '78688a0f': '277655a6235bc6b0ef2d824396c51ba947f5ebc738c293d887e7083ff338af82', 'd2d51ff2': 'fa3f6a017541ee7fe797be084b1bcfbf92418a7589ef1f7fdeb46741b6d2e9c3', 'dc3b169e': '6ae5355157a47ddcc3834a71f57f6fb5a8c2621c8e0dc739e9ddf59f865e497c', 'a163ec9b': 'd34f678afbaa8f2fa6cc0edd6f0c2d1d2e2e9eb08bea521b24c740806016bff4', 'repokey': 'c58460800c7b250a619c30c13b07b7359a43e5af71a4352d86c58ae18c9f6d41', } result = publish.read_fingerprints_from_keystore() self.maxDiff = None self.assertEqual(expected, result) def test_store_and_load_signer_fingerprints(self): common.config = {} common.fill_config_defaults(common.config) publish.config = common.config publish.config['keystorepass'] = '123456' publish.config['keypass'] = '123456' publish.config['keystore'] = os.path.join(basedir, 'dummy-keystore.jks') publish.config['repo_keyalias'] = 'repokey' appids = [ 'com.example.app', 'net.unavailable', 'org.test.testy', 'com.example.anotherapp', 'org.org.org', ] os.chdir(self.testdir) common.write_config_file('') publish.store_publish_signer_fingerprints(appids, indent=2) self.maxDiff = None expected = { "com.example.anotherapp": { "signer": "fa3f6a017541ee7fe797be084b1bcfbf92418a7589ef1f7fdeb46741b6d2e9c3" }, "com.example.app": { "signer": "d34f678afbaa8f2fa6cc0edd6f0c2d1d2e2e9eb08bea521b24c740806016bff4" }, "org.org.org": { "signer": "277655a6235bc6b0ef2d824396c51ba947f5ebc738c293d887e7083ff338af82" }, "org.test.testy": { "signer": "6ae5355157a47ddcc3834a71f57f6fb5a8c2621c8e0dc739e9ddf59f865e497c" }, } self.assertEqual(expected, common.load_publish_signer_fingerprints()) with open(common.CONFIG_FILE) as fp: config = yaml.load(fp) self.assertEqual( 'c58460800c7b250a619c30c13b07b7359a43e5af71a4352d86c58ae18c9f6d41', config['repo_key_sha256'], ) def test_store_and_load_signer_fingerprints_with_missmatch(self): common.config = {} common.fill_config_defaults(common.config) publish.config = common.config publish.config['keystorepass'] = '123456' publish.config['keypass'] = '123456' publish.config['keystore'] = os.path.join(basedir, 'dummy-keystore.jks') publish.config['repo_keyalias'] = 'repokey' publish.config['repo_key_sha256'] = 'bad bad bad bad bad bad bad bad bad bad' os.chdir(self.testdir) publish.store_publish_signer_fingerprints({}, indent=2) with self.assertRaises(FDroidException): common.load_publish_signer_fingerprints() def test_reproducible_binaries_process(self): common.config = {} common.fill_config_defaults(common.config) publish.config = common.config publish.config['keystore'] = 'keystore.jks' publish.config['repo_keyalias'] = 'sova' publish.config['keystorepass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' publish.config['keypass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' shutil.copy('keystore.jks', self.testdir) os.mkdir(os.path.join(self.testdir, 'repo')) metadata_dir = os.path.join(self.testdir, 'metadata') os.mkdir(metadata_dir) shutil.copy(os.path.join('metadata', 'com.politedroid.yml'), metadata_dir) with open(os.path.join(metadata_dir, 'com.politedroid.yml'), 'a') as fp: fp.write('\nBinaries: https://placeholder/foo%v.apk\n') os.mkdir(os.path.join(self.testdir, 'unsigned')) shutil.copy( 'repo/com.politedroid_6.apk', os.path.join(self.testdir, 'unsigned') ) os.mkdir(os.path.join(self.testdir, 'unsigned', 'binaries')) shutil.copy( 'repo/com.politedroid_6.apk', os.path.join( self.testdir, 'unsigned', 'binaries', 'com.politedroid_6.binary.apk' ), ) os.chdir(self.testdir) with mock.patch.object(sys, 'argv', ['fdroid fakesubcommand']): publish.main() def test_check_for_key_collisions(self): from fdroidserver.metadata import App common.config = {} common.fill_config_defaults(common.config) publish.config = common.config randomappids = [ "org.fdroid.fdroid", "a.b.c", "u.v.w.x.y.z", "lpzpkgqwyevnmzvrlaazhgardbyiyoybyicpmifkyrxkobljoz", "vuslsm.jlrevavz.qnbsenmizhur.lprwbjiujtu.ekiho", "w.g.g.w.p.v.f.v.gvhyz", "nlozuqer.ufiinmrbjqboogsjgmpfks.dywtpcpnyssjmqz", ] allapps = {} for appid in randomappids: allapps[appid] = App() allaliases = publish.check_for_key_collisions(allapps) self.assertEqual(len(randomappids), len(allaliases)) allapps = {'tof.cv.mpp': App(), 'j6mX276h': App()} self.assertEqual(publish.key_alias('tof.cv.mpp'), publish.key_alias('j6mX276h')) self.assertRaises(SystemExit, publish.check_for_key_collisions, allapps) def test_create_key_if_not_existing(self): try: import jks import jks.util except ImportError: self.skipTest("pyjks not installed") common.config = {} common.fill_config_defaults(common.config) publish.config = common.config publish.config['keystorepass'] = '123456' publish.config['keypass'] = '654321' publish.config['keystore'] = "keystore.jks" publish.config[ 'keydname' ] = 'CN=Birdman, OU=Cell, O=Alcatraz, L=Alcatraz, S=CA, C=US' os.chdir(self.testdir) keystore = jks.KeyStore.new("jks", []) keystore.save(publish.config['keystore'], publish.config['keystorepass']) self.assertTrue(publish.create_key_if_not_existing("newalias")) # The second time we try that, a new key should not be created self.assertFalse(publish.create_key_if_not_existing("newalias")) self.assertTrue(publish.create_key_if_not_existing("anotheralias")) keystore = jks.KeyStore.load( publish.config['keystore'], publish.config['keystorepass'] ) self.assertCountEqual(keystore.private_keys, ["newalias", "anotheralias"]) for alias, pk in keystore.private_keys.items(): self.assertFalse(pk.is_decrypted()) pk.decrypt(publish.config['keypass']) self.assertTrue(pk.is_decrypted()) self.assertEqual(jks.util.RSA_ENCRYPTION_OID, pk.algorithm_oid) def test_status_update_json(self): common.config = {} publish.config = {} with tempfile.TemporaryDirectory() as tmpdir: os.chdir(tmpdir) with mock.patch('sys.argv', ['fdroid publish', '']): publish.status_update_json([], []) with open('repo/status/publish.json') as fp: data = json.load(fp) self.assertTrue('apksigner' in data) publish.config = { 'apksigner': 'apksigner', } publish.status_update_json([], []) with open('repo/status/publish.json') as fp: data = json.load(fp) self.assertEqual( shutil.which(publish.config['apksigner']), data['apksigner'] ) publish.config = {} common.fill_config_defaults(publish.config) publish.status_update_json([], []) with open('repo/status/publish.json') as fp: data = json.load(fp) self.assertEqual(publish.config.get('apksigner'), data['apksigner']) self.assertEqual(publish.config['jarsigner'], data['jarsigner']) self.assertEqual(publish.config['keytool'], data['keytool']) @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_sign_then_implant_signature(self): os.chdir(self.testdir) common.options = VerboseFalseOptions config = common.read_config() if 'apksigner' not in config: self.skipTest( 'SKIPPING test_sign_then_implant_signature, apksigner not installed!' ) config['repo_keyalias'] = 'sova' config['keystorepass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' config['keypass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' shutil.copy(basedir / 'keystore.jks', self.testdir) config['keystore'] = 'keystore.jks' config['keydname'] = 'CN=Birdman, OU=Cell, O=Alcatraz, L=Alcatraz, S=CA, C=US' publish.config = config common.config = config app = metadata.App() app.id = 'org.fdroid.ci' versionCode = 1 build = metadata.Build( { 'versionCode': versionCode, 'versionName': '1.0', } ) app.Builds = [build] os.mkdir('metadata') metadata.write_metadata(os.path.join('metadata', '%s.yml' % app.id), app) os.mkdir('unsigned') testapk = basedir / 'no_targetsdk_minsdk1_unsigned.apk' unsigned = os.path.join('unsigned', common.get_release_filename(app, build)) signed = os.path.join('repo', common.get_release_filename(app, build)) shutil.copy(testapk, unsigned) # sign the unsigned APK self.assertTrue(os.path.exists(unsigned)) self.assertFalse(os.path.exists(signed)) with mock.patch( 'sys.argv', ['fdroid publish', '%s:%d' % (app.id, versionCode)] ): publish.main() self.assertFalse(os.path.exists(unsigned)) self.assertTrue(os.path.exists(signed)) with mock.patch('sys.argv', ['fdroid signatures', signed]): signatures.main() self.assertTrue( os.path.exists( os.path.join( 'metadata', 'org.fdroid.ci', 'signatures', '1', 'MANIFEST.MF' ) ) ) os.remove(signed) # implant the signature into the unsigned APK shutil.copy(testapk, unsigned) self.assertTrue(os.path.exists(unsigned)) self.assertFalse(os.path.exists(signed)) with mock.patch( 'sys.argv', ['fdroid publish', '%s:%d' % (app.id, versionCode)] ): publish.main() self.assertFalse(os.path.exists(unsigned)) self.assertTrue(os.path.exists(signed)) @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_exit_on_error(self): """Exits properly on errors, with and without --error-on-failed. `fdroid publish` runs on the signing server and does large batches. In that case, it shouldn't exit after a single failure since it should try to complete the whole batch. For CI and other use cases, there is --error-on-failed to force it to exit after a failure. """ class Options: error_on_failed = True verbose = False os.chdir(self.testdir) common.options = Options config = common.read_config() if 'apksigner' not in config: self.skipTest('SKIPPING test_error_on_failed, apksigner not installed!') config['repo_keyalias'] = 'sova' config['keystorepass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' config['keypass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' shutil.copy(basedir / 'keystore.jks', self.testdir) config['keystore'] = 'keystore.jks' config['keydname'] = 'CN=Birdman, OU=Cell, O=Alcatraz, L=Alcatraz, S=CA, C=US' publish.config = config common.config = config app = metadata.App() app.id = 'org.fdroid.ci' versionCode = 1 build = metadata.Build( { 'versionCode': versionCode, 'versionName': '1.0', } ) app.Builds = [build] os.mkdir('metadata') metadata.write_metadata(os.path.join('metadata', '%s.yml' % app.id), app) os.mkdir('unsigned') testapk = basedir / 'no_targetsdk_minsdk1_unsigned.apk' unsigned = os.path.join('unsigned', common.get_release_filename(app, build)) signed = os.path.join('repo', common.get_release_filename(app, build)) shutil.copy(testapk, unsigned) # sign the unsigned APK self.assertTrue(os.path.exists(unsigned)) self.assertFalse(os.path.exists(signed)) with mock.patch( 'sys.argv', ['fdroid publish', '%s:%d' % (app.id, versionCode)] ): publish.main() self.assertFalse(os.path.exists(unsigned)) self.assertTrue(os.path.exists(signed)) with mock.patch('sys.argv', ['fdroid signatures', signed]): signatures.main() mf = os.path.join('metadata', 'org.fdroid.ci', 'signatures', '1', 'MANIFEST.MF') self.assertTrue(os.path.exists(mf)) os.remove(signed) with open(mf, 'a') as fp: fp.write('appended to break signature') # implant the signature into the unsigned APK shutil.copy(testapk, unsigned) self.assertTrue(os.path.exists(unsigned)) self.assertFalse(os.path.exists(signed)) apk_id = '%s:%d' % (app.id, versionCode) # by default, it should complete without exiting with mock.patch('sys.argv', ['fdroid publish', apk_id]): publish.main() # --error-on-failed should make it exit with mock.patch('sys.argv', ['fdroid publish', '--error-on-failed', apk_id]): with self.assertRaises(SystemExit) as e: publish.main() self.assertEqual(e.exception.code, 1) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742812298.0 fdroidserver-2.4.0/tests/test_rewritemeta.py0000755000175000017500000002015614770232212020031 0ustar00hanshans#!/usr/bin/env python3 import os import unittest import tempfile import textwrap from pathlib import Path from unittest import mock from fdroidserver import metadata, rewritemeta from .shared_test_code import TmpCwd, mkdtemp basedir = Path(__file__).parent class RewriteMetaTest(unittest.TestCase): '''fdroidserver/publish.py''' def setUp(self): os.chdir(basedir) metadata.warnings_action = 'error' self._td = mkdtemp() self.testdir = self._td.name def tearDown(self): self._td.cleanup() def test_remove_blank_flags_from_builds_com_politedroid_3(self): """Unset fields in Builds: entries should be removed.""" appid = 'com.politedroid' app = metadata.read_metadata({appid: -1})[appid] builds = rewritemeta.remove_blank_flags_from_builds(app.get('Builds')) self.assertEqual( builds[0], { 'versionName': '1.2', 'versionCode': 3, 'commit': '6a548e4b19', 'target': 'android-10', 'antifeatures': { 'KnownVuln': {}, 'UpstreamNonFree': {}, 'NonFreeAssets': {}, }, }, ) def test_remove_blank_flags_from_builds_com_politedroid_4(self): """Unset fields in Builds: entries should be removed.""" appid = 'com.politedroid' app = metadata.read_metadata({appid: -1})[appid] builds = rewritemeta.remove_blank_flags_from_builds(app.get('Builds')) self.assertEqual( builds[1], { 'versionName': '1.3', 'versionCode': 4, 'commit': 'ad865b57bf3ac59580f38485608a9b1dda4fa7dc', 'target': 'android-15', }, ) def test_remove_blank_flags_from_builds_org_adaway_52(self): """Unset fields in Builds: entries should be removed.""" appid = 'org.adaway' app = metadata.read_metadata({appid: -1})[appid] builds = rewritemeta.remove_blank_flags_from_builds(app.get('Builds')) self.assertEqual( builds[-1], { 'buildjni': ['yes'], 'commit': 'v3.0', 'gradle': ['yes'], 'preassemble': ['renameExecutables'], 'subdir': 'AdAway', 'versionCode': 52, 'versionName': '3.0', }, ) def test_remove_blank_flags_from_builds_no_builds(self): """Unset fields in Builds: entries should be removed.""" self.assertEqual( rewritemeta.remove_blank_flags_from_builds(None), list(), ) self.assertEqual( rewritemeta.remove_blank_flags_from_builds(dict()), list(), ) self.assertEqual( rewritemeta.remove_blank_flags_from_builds(list()), list(), ) self.assertEqual( rewritemeta.remove_blank_flags_from_builds(set()), list(), ) self.assertEqual( rewritemeta.remove_blank_flags_from_builds(tuple()), list(), ) def test_remove_blank_flags_from_builds_0_is_a_value(self): self.assertEqual( rewritemeta.remove_blank_flags_from_builds([{'versionCode': 0}]), [{'versionCode': 0}], ) def test_remove_blank_flags_from_builds_values_to_purge(self): self.assertEqual( rewritemeta.remove_blank_flags_from_builds( [ { 'antifeatures': dict(), 'forceversion': False, 'init': None, 'rm': '', 'scandelete': list(), 'versionCode': 0, }, {'antifeatures': list(), 'versionCode': 1}, {'antifeatures': '', 'versionCode': 2}, ] ), [{'versionCode': 0}, {'versionCode': 1}, {'versionCode': 2}], ) @mock.patch('sys.argv', ['fdroid rewritemeta', 'a']) def test_rewrite_no_builds(self): os.chdir(self.testdir) Path('metadata').mkdir() with Path('metadata/a.yml').open('w') as f: f.write('AutoName: a') rewritemeta.main() self.assertEqual( Path('metadata/a.yml').read_text(encoding='utf-8'), textwrap.dedent( '''\ License: Unknown AutoName: a AutoUpdateMode: None UpdateCheckMode: None ''' ), ) @mock.patch('sys.argv', ['fdroid rewritemeta', 'a']) def test_rewrite_empty_build_field(self): os.chdir(self.testdir) Path('metadata').mkdir() with Path('metadata/a.yml').open('w') as fp: fp.write( textwrap.dedent( """ License: Apache-2.0 Builds: - versionCode: 4 versionName: a rm: """ ) ) rewritemeta.main() self.assertEqual( Path('metadata/a.yml').read_text(encoding='utf-8'), textwrap.dedent( '''\ License: Apache-2.0 Builds: - versionName: a versionCode: 4 AutoUpdateMode: None UpdateCheckMode: None ''' ), ) def test_remove_blank_flags_from_builds_app_with_special_build_params(self): appid = 'app.with.special.build.params' app = metadata.read_metadata({appid: -1})[appid] builds = rewritemeta.remove_blank_flags_from_builds(app.get('Builds')) self.assertEqual( builds[-1], { 'versionName': '2.1.2', 'versionCode': 51, 'disable': 'Labelled as pre-release, so skipped', }, ) def test_remove_blank_flags_from_builds_app_with_special_build_params_af(self): """Unset fields in Builds: entries should be removed.""" appid = 'app.with.special.build.params' app = metadata.read_metadata({appid: -1})[appid] builds = rewritemeta.remove_blank_flags_from_builds(app.get('Builds')) self.assertEqual( builds[-2], { 'antifeatures': { 'Ads': {'en-US': 'includes ad lib\n', 'zh-CN': '包括广告图书馆\n'}, 'Tracking': {'en-US': 'standard suspects\n'}, }, 'commit': '2.1.1', 'maven': '2', 'patch': [ 'manifest-ads.patch', 'mobilecore.patch', ], 'srclibs': ['FacebookSDK@sdk-version-3.0.2'], 'versionCode': 50, 'versionName': '2.1.1-c', }, ) @mock.patch('sys.argv', ['fdroid rewritemeta', 'a', 'b']) def test_rewrite_scenario_trivial(self): with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): Path('metadata').mkdir() with Path('metadata/a.yml').open('w') as f: f.write('AutoName: a') with Path('metadata/b.yml').open('w') as f: f.write('AutoName: b') rewritemeta.main() self.assertEqual( Path('metadata/a.yml').read_text(encoding='utf-8'), textwrap.dedent( '''\ License: Unknown AutoName: a AutoUpdateMode: None UpdateCheckMode: None ''' ), ) self.assertEqual( Path('metadata/b.yml').read_text(encoding='utf-8'), textwrap.dedent( '''\ License: Unknown AutoName: b AutoUpdateMode: None UpdateCheckMode: None ''' ), ) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/tests/test_scanner.py0000755000175000017500000010474514770502071017144 0ustar00hanshans#!/usr/bin/env python3 import logging import os import pathlib import re import shutil import sys import tempfile import textwrap import unittest import uuid import zipfile from dataclasses import asdict from datetime import datetime, timedelta, timezone from unittest import mock if sys.version_info >= (3, 11): import tomllib else: import tomli as tomllib import yaml import fdroidserver.build import fdroidserver.common import fdroidserver.exception import fdroidserver.metadata import fdroidserver.scanner from .shared_test_code import TmpCwd, mkdtemp, mock_open_to_str basedir = pathlib.Path(__file__).parent def _dexdump_found(): """Find if dexdump is available in the PATH or in an Android SDK install. This must be run after common.config is setup. """ try: dexdump = fdroidserver.common.find_sdk_tools_cmd("dexdump") logging.debug('Found dexdump: %s', dexdump) return dexdump is not None except fdroidserver.exception.FDroidException: pass return False # Always use built-in default rules so changes in downloaded rules don't break tests. @mock.patch( 'fdroidserver.scanner.SUSSDataController.load', fdroidserver.scanner.SUSSDataController.load_from_defaults, ) class ScannerTest(unittest.TestCase): def setUp(self): os.chdir(basedir) self._td = mkdtemp() self.testdir = self._td.name fdroidserver.scanner.ScannerTool.refresh_allowed = False def tearDown(self): os.chdir(basedir) self._td.cleanup() def test_scan_source_files(self): fdroidserver.common.options = mock.Mock() fdroidserver.common.options.json = False projects = { 'OtakuWorld': 2, 'Zillode': 1, 'cn.wildfirechat.chat': 4, 'com.github.shadowsocks': 9, 'com.integreight.onesheeld': 17, 'com.jens.automation2': 3, 'firebase-suspect': 1, 'org.mozilla.rocket': 2, 'org.tasks': 3, 'realm': 1, 'se.manyver': 3, 'lockfile.test': 1, 'com.lolo.io.onelist': 6, 'catalog.test': 22, } for d in (basedir / 'source-files').iterdir(): build = fdroidserver.metadata.Build() should = projects.get(d.name, 0) if should > 0: with self.assertLogs(level=logging.ERROR): fatal_problems = fdroidserver.scanner.scan_source(d, build) else: with self.assertNoLogs(): fatal_problems = fdroidserver.scanner.scan_source(d, build) self.assertEqual( should, fatal_problems, f'{d} should have {should} errors!' ) def test_get_gradle_compile_commands_without_catalog(self): test_files = [ ('source-files/fdroid/fdroidclient/build.gradle', 'yes', 15), ('source-files/com.nextcloud.client/build.gradle', 'generic', 24), ('source-files/com.kunzisoft.testcase/build.gradle', 'libre', 3), ('source-files/cn.wildfirechat.chat/chat/build.gradle', 'yes', 30), ('source-files/org.tasks/app/build.gradle.kts', 'generic', 41), ('source-files/at.bitfire.davdroid/build.gradle', 'standard', 15), ('source-files/se.manyver/android/app/build.gradle', 'indie', 26), ('source-files/osmandapp/osmand/build.gradle', 'free', 2), ('source-files/eu.siacs.conversations/build.gradle', 'free', 21), ('source-files/org.mozilla.rocket/app/build.gradle', 'focus', 40), ('source-files/com.jens.automation2/app/build.gradle', 'fdroidFlavor', 5), ] for f, flavor, count in test_files: i = 0 build = fdroidserver.metadata.Build() build.gradle = [flavor] regexs = fdroidserver.scanner.get_gradle_compile_commands_without_catalog( build ) with open(f, encoding='utf-8') as fp: for line in fp.readlines(): for regex in regexs: m = regex.match(line) if m: i += 1 self.assertEqual(count, i) def test_get_gradle_compile_commands_with_catalog(self): test_files = [ ('source-files/com.lolo.io.onelist/build.gradle.kts', 'yes', 5), ('source-files/com.lolo.io.onelist/app/build.gradle.kts', 'yes', 26), ('source-files/catalog.test/build.gradle.kts', 'yes', 3), ('source-files/catalog.test/app/build.gradle', 'yes', 2), ] for f, flavor, count in test_files: i = 0 build = fdroidserver.metadata.Build() build.gradle = [flavor] regexs = fdroidserver.scanner.get_gradle_compile_commands_with_catalog( build, "libs" ) with open(f, encoding='utf-8') as fp: for line in fp.readlines(): for regex in regexs: m = regex.match(line) if m: i += 1 self.assertEqual(count, i) def test_catalog(self): accessor_coordinate_pairs = { 'firebase.crash': ['com.google.firebase:firebase-crash:1.1.1'], 'firebase.core': ['com.google.firebase:firebase-core:2.2.2'], 'play.service.ads': ['com.google.android.gms:play-services-ads:1.2.1'], 'jacoco': ['org.jacoco:org.jacoco.core:0.8.7'], 'plugins.google.services': ['com.google.gms.google-services:1.2.1'], 'plugins.firebase.crashlytics': ['com.google.firebase.crashlytics:1.1.1'], 'bundles.firebase': [ 'com.google.firebase:firebase-crash:1.1.1', 'com.google.firebase:firebase-core:2.2.2', ], } with open('source-files/catalog.test/gradle/libs.versions.toml', 'rb') as f: catalog = fdroidserver.scanner.GradleVersionCatalog(tomllib.load(f)) for accessor, coordinate in accessor_coordinate_pairs.items(): self.assertEqual(catalog.get_coordinate(accessor), coordinate) def test_get_catalogs(self): test_files = [ ('source-files/com.lolo.io.onelist/', 1), ('source-files/catalog.test/', 3), ('source-files/org.piepmeyer.gauguin/', 1), ] for root, count in test_files: self.assertEqual(count, len(fdroidserver.scanner.get_catalogs(root))) def test_scan_source_files_sneaky_maven(self): """Check for sneaking in banned maven repos""" os.chdir(self.testdir) fdroidserver.scanner.config = None fdroidserver.common.options = mock.Mock() fdroidserver.common.options.json = True with open('build.gradle', 'w', encoding='utf-8') as fp: fp.write( textwrap.dedent( """ maven { "https://jitpack.io" url 'https://maven.fabric.io/public' } maven { "https://maven.google.com" setUrl('https://evilcorp.com/maven') } """ ) ) with self.assertLogs(level=logging.ERROR): count = fdroidserver.scanner.scan_source(self.testdir) self.assertEqual(2, count, 'there should be this many errors') def test_scan_source_file_types(self): """Build product files are not allowed, test they are detected This test runs as if `fdroid build` running to test the difference between absolute and relative paths. """ build_dir = os.path.join('build', 'fake.app') abs_build_dir = os.path.join(self.testdir, build_dir) os.makedirs(abs_build_dir, exist_ok=True) os.chdir(abs_build_dir) fdroidserver.scanner.config = None fdroidserver.common.options = mock.Mock() fdroidserver.common.options.json = True keep = [ 'arg.jar', 'ascii.out', 'baz.so', 'classes.dex', 'sqlcipher.aar', 'static.a', 'src/test/resources/classes.dex', ] remove = ['gradle-wrapper.jar', 'gradlew', 'gradlew.bat'] os.makedirs('src/test/resources', exist_ok=True) for f in keep + remove: with open(f, 'w') as fp: fp.write('placeholder') self.assertTrue(os.path.exists(f)) binaries = ['binary.out', 'fake.png', 'snippet.png'] with open('binary.out', 'wb') as fp: fp.write(b'\x00\x00') fp.write(uuid.uuid4().bytes) shutil.copyfile('binary.out', 'fake.png') os.chmod('fake.png', 0o755) # nosec B103 with open('snippet.png', 'wb') as fp: fp.write( b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x000\x00\x00' b'\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\x00\x00\x00\x04sB' b'IT\x08\x08\x08\x08|\x08d\x88\x00\x00\x00\tpHYs\x00\x00\n' b'a\x00\x00\na\x01\xfc\xccJ%\x00\x00\x00\x19tEXtSoftware' ) os.chmod('snippet.png', 0o755) # nosec B103 # run scanner as if from `fdroid build` os.chdir(self.testdir) json_per_build = fdroidserver.scanner.MessageStore() with self.assertLogs(level=logging.ERROR): count = fdroidserver.scanner.scan_source( build_dir, json_per_build=json_per_build ) self.assertEqual(6, count, 'there should be this many errors') os.chdir(build_dir) for f in keep + binaries: self.assertTrue(os.path.exists(f), f + ' should still be there') for f in remove: self.assertFalse(os.path.exists(f), f + ' should have been removed') json_per_build_asdict = asdict(json_per_build) files = dict() for section in ('errors', 'infos', 'warnings'): files[section] = [] for msg, f in json_per_build_asdict[section]: files[section].append(f) self.assertFalse( 'ascii.out' in files['errors'], 'ASCII .out file is not an error' ) self.assertFalse( 'snippet.png' in files['errors'], 'executable valid image is not an error' ) self.assertTrue('arg.jar' in files['errors'], 'all JAR files are errors') self.assertTrue('baz.so' in files['errors'], 'all .so files are errors') self.assertTrue( 'binary.out' in files['errors'], 'a binary .out file is an error' ) self.assertTrue( 'classes.dex' in files['errors'], 'all classes.dex files are errors' ) self.assertTrue('sqlcipher.aar' in files['errors'], 'all AAR files are errors') self.assertTrue('static.a' in files['errors'], 'all .a files are errors') self.assertTrue( 'fake.png' in files['warnings'], 'a random binary that is executable that is not an image is a warning', ) self.assertTrue( 'src/test/resources/classes.dex' in files['warnings'], 'suspicious file but in a test dir is a warning', ) for f in remove: self.assertTrue( f in files['infos'], '%s should be removed with an info message' % f ) def test_build_local_scanner(self): """`fdroid build` calls scanner functions, test them here""" os.chdir(self.testdir) config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.build.config = config fdroidserver.build.options = mock.Mock() fdroidserver.build.options.json = False fdroidserver.build.options.scan_binary = False fdroidserver.build.options.notarball = True fdroidserver.build.options.skipscan = False fdroidserver.common.options = fdroidserver.build.options app = fdroidserver.metadata.App() app.id = 'mocked.app.id' build = fdroidserver.metadata.Build() build.commit = '1.0' build.output = app.id + '.apk' build.scanignore = ['baz.so', 'foo.aar'] build.versionCode = 1 build.versionName = '1.0' vcs = mock.Mock() for f in ('baz.so', 'foo.aar', 'gradle-wrapper.jar'): with open(f, 'w') as fp: fp.write('placeholder') self.assertTrue(os.path.exists(f)) with open('build.xml', 'w', encoding='utf-8') as fp: fp.write( textwrap.dedent( """ """ ) ) def make_fake_apk(output, build): with open(build.output, 'w') as fp: fp.write('APK PLACEHOLDER') return output with mock.patch('fdroidserver.common.replace_build_vars', wraps=make_fake_apk): with mock.patch('fdroidserver.common.get_native_code', return_value='x86'): with mock.patch( 'fdroidserver.common.get_apk_id', return_value=(app.id, build.versionCode, build.versionName), ): with mock.patch( 'fdroidserver.common.is_debuggable_or_testOnly', return_value=False, ): fdroidserver.build.build_local( app, build, vcs, build_dir=self.testdir, output_dir=self.testdir, log_dir=None, srclib_dir=None, extlib_dir=None, tmp_dir=None, force=False, onserver=False, refresh=False, ) self.assertTrue(os.path.exists('baz.so')) self.assertTrue(os.path.exists('foo.aar')) self.assertFalse(os.path.exists('gradle-wrapper.jar')) def test_gradle_maven_url_regex(self): """Check the regex can find all the cases""" with open(basedir / 'gradle-maven-blocks.yaml') as fp: data = yaml.safe_load(fp) urls = [] for entry in data: found = False for m in fdroidserver.scanner.MAVEN_URL_REGEX.findall(entry): urls.append(m) found = True self.assertTrue(found, 'this block should produce a URL:\n' + entry) self.assertEqual(len(data), len(urls), 'each data example should produce a URL') def test_scan_gradle_file_with_multiple_problems(self): """Check that the scanner can handle scandelete with gradle files with multiple problems""" os.chdir(self.testdir) fdroidserver.scanner.config = None fdroidserver.common.options = mock.Mock() build = fdroidserver.metadata.Build() build.scandelete = ['build.gradle'] with open('build.gradle', 'w', encoding='utf-8') as fp: fp.write( textwrap.dedent( """ maven { url 'https://maven.fabric.io/public' } maven { url 'https://evilcorp.com/maven' } """ ) ) count = fdroidserver.scanner.scan_source(self.testdir, build) self.assertFalse(os.path.exists("build.gradle")) self.assertEqual(0, count, 'there should be this many errors') def test_get_embedded_classes(self): config = dict() fdroidserver.common.config = config fdroidserver.common.fill_config_defaults(config) if not _dexdump_found(): self.skipTest('Some Debian arches lack dexdump') for f in ( 'apk.embedded_1.apk', 'bad-unicode-πÇÇ现代通用字-български-عربي1.apk', 'janus.apk', 'minimal_targetsdk_30_unsigned.apk', 'no_targetsdk_minsdk1_unsigned.apk', 'org.bitbucket.tickytacky.mirrormirror_1.apk', 'org.bitbucket.tickytacky.mirrormirror_2.apk', 'org.bitbucket.tickytacky.mirrormirror_3.apk', 'org.bitbucket.tickytacky.mirrormirror_4.apk', 'org.dyndns.fules.ck_20.apk', 'SpeedoMeterApp.main_1.apk', 'urzip.apk', 'urzip-badcert.apk', 'urzip-badsig.apk', 'urzip-release.apk', 'urzip-release-unsigned.apk', 'repo/com.example.test.helloworld_1.apk', 'repo/com.politedroid_3.apk', 'repo/com.politedroid_4.apk', 'repo/com.politedroid_5.apk', 'repo/com.politedroid_6.apk', 'repo/duplicate.permisssions_9999999.apk', 'repo/info.zwanenburg.caffeinetile_4.apk', 'repo/no.min.target.sdk_987.apk', 'repo/obb.main.oldversion_1444412523.apk', 'repo/obb.mainpatch.current_1619_another-release-key.apk', 'repo/obb.mainpatch.current_1619.apk', 'repo/obb.main.twoversions_1101613.apk', 'repo/obb.main.twoversions_1101615.apk', 'repo/obb.main.twoversions_1101617.apk', 'repo/souch.smsbypass_9.apk', 'repo/urzip-; Рахма́, [rɐxˈmanʲɪnəf] سيرجي_رخمانينوف 谢·.apk', 'repo/v1.v2.sig_1020.apk', ): self.assertNotEqual( set(), fdroidserver.scanner.get_embedded_classes(f), 'should return results for ' + f, ) def test_get_embedded_classes_empty_archives(self): config = dict() fdroidserver.common.config = config fdroidserver.common.fill_config_defaults(config) for f in ( 'Norway_bouvet_europe_2.obf.zip', 'repo/fake.ota.update_1234.zip', ): self.assertEqual( set(), fdroidserver.scanner.get_embedded_classes(f), 'should return not results for ' + f, ) def test_get_embedded_classes_secret_apk(self): """Try to hide an APK+DEX in an APK and see if we can find it""" config = dict() fdroidserver.common.config = config fdroidserver.common.fill_config_defaults(config) if not _dexdump_found(): self.skipTest('Some Debian arches lack dexdump') apk = 'urzip.apk' mapzip = 'Norway_bouvet_europe_2.obf.zip' secretfile = os.path.join( basedir, 'org.bitbucket.tickytacky.mirrormirror_1.apk' ) with tempfile.TemporaryDirectory() as tmpdir: shutil.copy(apk, tmpdir) shutil.copy(mapzip, tmpdir) os.chdir(tmpdir) with zipfile.ZipFile(mapzip, 'a') as zipfp: zipfp.write(secretfile, 'secretapk') with zipfile.ZipFile(apk) as readfp: with readfp.open('classes.dex') as cfp: zipfp.writestr('secretdex', cfp.read()) with zipfile.ZipFile(apk, 'a') as zipfp: zipfp.write(mapzip) cls = fdroidserver.scanner.get_embedded_classes(apk) self.assertTrue( 'org/bitbucket/tickytacky/mirrormirror/MainActivity' in cls, 'this should find the classes in the hidden, embedded APK', ) self.assertTrue( 'DEX file with fake name: secretdex' in cls, 'badly named embedded DEX fils should throw an error', ) self.assertTrue( 'ZIP file without proper file extension: secretapk' in cls, 'badly named embedded ZIPs should throw an error', ) class Test_scan_binary(unittest.TestCase): def setUp(self): config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.common.options = mock.Mock() if not _dexdump_found(): self.skipTest('Some Debian arches lack dexdump') fdroidserver.scanner._SCANNER_TOOL = mock.Mock() fdroidserver.scanner._SCANNER_TOOL.regexs = {} fdroidserver.scanner._SCANNER_TOOL.regexs['err_code_signatures'] = { "java/lang/Object": re.compile( r'.*java/lang/Object', re.IGNORECASE | re.UNICODE ) } fdroidserver.scanner._SCANNER_TOOL.regexs['warn_code_signatures'] = {} def test_code_signature_match(self): apkfile = os.path.join(basedir, 'no_targetsdk_minsdk1_unsigned.apk') with self.assertLogs(level=logging.CRITICAL): problems = fdroidserver.scanner.scan_binary(apkfile) self.assertEqual( 1, problems, "Did not find expected code signature '{}' in binary '{}'".format( fdroidserver.scanner._SCANNER_TOOL.regexs[ 'err_code_signatures' ].values(), apkfile, ), ) def test_bottom_level_embedded_apk_code_signature(self): apkfile = os.path.join(basedir, 'apk.embedded_1.apk') fdroidserver.scanner._SCANNER_TOOL.regexs['err_code_signatures'] = { "org/bitbucket/tickytacky/mirrormirror/MainActivity": re.compile( r'.*org/bitbucket/tickytacky/mirrormirror/MainActivity', re.IGNORECASE | re.UNICODE, ) } with self.assertLogs(level=logging.CRITICAL): problems = fdroidserver.scanner.scan_binary(apkfile) self.assertEqual( 1, problems, "Did not find expected code signature '{}' in binary '{}'".format( fdroidserver.scanner._SCANNER_TOOL.regexs[ 'err_code_signatures' ].values(), apkfile, ), ) def test_top_level_signature_embedded_apk_present(self): apkfile = os.path.join(basedir, 'apk.embedded_1.apk') fdroidserver.scanner._SCANNER_TOOL.regexs['err_code_signatures'] = { "org/fdroid/ci/BuildConfig": re.compile( r'.*org/fdroid/ci/BuildConfig', re.IGNORECASE | re.UNICODE ) } with self.assertLogs(level=logging.CRITICAL): problems = fdroidserver.scanner.scan_binary(apkfile) self.assertEqual( 1, problems, "Did not find expected code signature '{}' in binary '{}'".format( fdroidserver.scanner._SCANNER_TOOL.regexs[ 'err_code_signatures' ].values(), apkfile, ), ) class Test_SignatureDataController(unittest.TestCase): def test_init(self): sdc = fdroidserver.scanner.SignatureDataController( 'nnn', 'fff.yml', 'https://example.com/test.json' ) self.assertEqual(sdc.name, 'nnn') self.assertEqual(sdc.filename, 'fff.yml') self.assertEqual(sdc.cache_duration, timedelta(999999)) self.assertDictEqual(sdc.data, {}) # check_last_updated def test_check_last_updated_ok(self): sdc = fdroidserver.scanner.SignatureDataController( 'nnn', 'fff.yml', 'https://example.com/test.json' ) sdc.data['last_updated'] = datetime.now(timezone.utc).timestamp() sdc.check_last_updated() def test_check_last_updated_exception_cache_outdated(self): sdc = fdroidserver.scanner.SignatureDataController( 'nnn', 'fff.yml', 'https://example.com/test.json' ) sdc.cache_duration = timedelta(days=7) sdc.data['last_updated'] = ( datetime.now(timezone.utc) - timedelta(days=30) ).timestamp() with self.assertRaises(fdroidserver.scanner.SignatureDataOutdatedException): sdc.check_last_updated() def test_check_last_updated_exception_not_string(self): sdc = fdroidserver.scanner.SignatureDataController( 'nnn', 'fff.yml', 'https://example.com/test.json' ) sdc.data['last_updated'] = 'sepp' with self.assertRaises(fdroidserver.scanner.SignatureDataMalformedException): sdc.check_last_updated() def test_check_last_updated_exception_not_iso_formatted_string(self): sdc = fdroidserver.scanner.SignatureDataController( 'nnn', 'fff.yml', 'https://example.com/test.json' ) sdc.data['last_updated'] = '01/09/2002 10:11' with self.assertRaises(fdroidserver.scanner.SignatureDataMalformedException): sdc.check_last_updated() def test_check_last_updated_no_exception_missing_when_last_updated_not_set(self): sdc = fdroidserver.scanner.SignatureDataController( 'nnn', 'fff.yml', 'https://example.com/test.json' ) sdc.check_last_updated() # check_data_version def test_check_data_version_ok(self): sdc = fdroidserver.scanner.SignatureDataController( 'nnn', 'fff.yml', 'https://example.com/test.json' ) sdc.data['version'] = fdroidserver.scanner.SCANNER_CACHE_VERSION sdc.check_data_version() def test_check_data_version_exception(self): sdc = fdroidserver.scanner.SignatureDataController( 'nnn', 'fff.yml', 'https://example.com/test.json' ) with self.assertRaises( fdroidserver.scanner.SignatureDataVersionMismatchException ): sdc.check_data_version() def test_load_ok(self): sdc = fdroidserver.scanner.SignatureDataController( 'nnn', 'fff.yml', 'https://example.com/test.json' ) func_lfc = mock.Mock() func_vd = mock.Mock() func_clu = mock.Mock() with mock.patch( 'fdroidserver.scanner.SignatureDataController.load_from_cache', func_lfc, ), mock.patch( 'fdroidserver.scanner.SignatureDataController.verify_data', func_vd, ), mock.patch( 'fdroidserver.scanner.SignatureDataController.check_last_updated', func_clu, ): sdc.load() func_lfc.assert_called_once_with() func_vd.assert_called_once_with() func_clu.assert_called_once_with() def test_load_initial_cache_miss(self): sdc = fdroidserver.scanner.SignatureDataController( 'nnn', 'fff.yml', 'https://example.com/test.json' ) func_lfc = mock.Mock( side_effect=fdroidserver.scanner.SignatureDataCacheMissException ) func_lfd = mock.Mock() with mock.patch( 'fdroidserver.scanner.SignatureDataController.load_from_cache', func_lfc, ), mock.patch( 'fdroidserver.scanner.SignatureDataController.load_from_defaults', func_lfd, ): sdc.load() func_lfc.assert_called_once_with() func_lfd.assert_called_once_with() def test_load_cache_auto_refresh(self): sdc = fdroidserver.scanner.SignatureDataController( 'nnn', 'fff.yml', 'https://example.com/test.json' ) func_lfc = mock.Mock() func_vd = mock.Mock() func_clu = mock.Mock( side_effect=fdroidserver.scanner.SignatureDataOutdatedException() ) func_fsfw = mock.Mock() func_wtc = mock.Mock() with mock.patch( 'fdroidserver.scanner.SignatureDataController.load_from_cache', func_lfc, ), mock.patch( 'fdroidserver.scanner.SignatureDataController.verify_data', func_vd, ), mock.patch( 'fdroidserver.scanner.SignatureDataController.check_last_updated', func_clu, ), mock.patch( 'fdroidserver.scanner.SignatureDataController.fetch_signatures_from_web', func_fsfw, ), mock.patch( 'fdroidserver.scanner.SignatureDataController.write_to_cache', func_wtc, ): sdc.load() func_lfc.assert_called_once_with() func_vd.assert_called_once_with() func_clu.assert_called_once_with() func_fsfw.assert_called_once_with() func_wtc.assert_called_once_with() def test_load_try_web_when_no_defaults(self): sdc = fdroidserver.scanner.SignatureDataController( 'nnn', 'fff.yml', 'https://example.com/test.json' ) func_lfc = mock.Mock( side_effect=fdroidserver.scanner.SignatureDataCacheMissException() ) func_lfd = mock.Mock( side_effect=fdroidserver.scanner.SignatureDataNoDefaultsException() ) func_fsfw = mock.Mock() func_wtc = mock.Mock() with mock.patch( 'fdroidserver.scanner.SignatureDataController.load_from_cache', func_lfc, ), mock.patch( 'fdroidserver.scanner.SignatureDataController.load_from_defaults', func_lfd, ), mock.patch( 'fdroidserver.scanner.SignatureDataController.fetch_signatures_from_web', func_fsfw, ), mock.patch( 'fdroidserver.scanner.SignatureDataController.write_to_cache', func_wtc, ): sdc.load() func_lfc.assert_called_once_with() func_lfd.assert_called_once_with() func_fsfw.assert_called_once_with() func_wtc.assert_called_once_with() @unittest.skipIf( sys.version_info < (3, 9, 0), "mock_open doesn't allow easy access to written data in older python versions", ) def test_write_to_cache(self): open_func = mock.mock_open() sdc = fdroidserver.scanner.SignatureDataController( 'nnn', 'fff.yml', 'https://example.com/test.json' ) sdc.data = {"mocked": "data"} with mock.patch("builtins.open", open_func), mock.patch( "fdroidserver.scanner._scanner_cachedir", return_value=pathlib.Path('.'), ): sdc.write_to_cache() open_func.assert_called_with(pathlib.Path('fff.yml'), 'w', encoding="utf-8") self.assertEqual(mock_open_to_str(open_func), """{\n "mocked": "data"\n}""") class Test_ScannerTool(unittest.TestCase): def setUp(self): fdroidserver.common.options = None fdroidserver.common.config = None os.chdir(basedir) self._td = mkdtemp() self.testdir = self._td.name fdroidserver.scanner.ScannerTool.refresh_allowed = True def tearDown(self): fdroidserver.common.options = None fdroidserver.common.config = None os.chdir(basedir) self._td.cleanup() def test_load(self): st = mock.Mock() st.sdcs = [mock.Mock(), mock.Mock()] fdroidserver.scanner.ScannerTool.load(st) st.sdcs[0].load.assert_called_once_with() st.sdcs[1].load.assert_called_once_with() def test_refresh_no_options_or_config(self): """This simulates what happens when running something like scan_source()""" with mock.patch('fdroidserver.scanner.ScannerTool.refresh') as refresh: fdroidserver.scanner.ScannerTool() refresh.assert_not_called() def test_refresh_true(self): fdroidserver.common.options = mock.Mock() fdroidserver.common.options.refresh_scanner = True with mock.patch('fdroidserver.scanner.ScannerTool.refresh') as refresh: fdroidserver.scanner.ScannerTool() refresh.assert_called_once() def test_refresh_false(self): fdroidserver.common.options = mock.Mock() fdroidserver.common.options.refresh_scanner = False with mock.patch('fdroidserver.scanner.ScannerTool.refresh') as refresh: fdroidserver.scanner.ScannerTool() refresh.assert_not_called() def test_refresh_from_config(self): os.chdir(self.testdir) fdroidserver.common.write_config_file('refresh_scanner: true\n') with mock.patch('fdroidserver.scanner.ScannerTool.refresh') as refresh: fdroidserver.scanner.ScannerTool() refresh.assert_called_once() def test_refresh_options_overrides_config(self): fdroidserver.common.options = mock.Mock() fdroidserver.common.options.refresh_scanner = True os.chdir(self.testdir) fdroidserver.common.write_config_file('refresh_scanner: false\n') with mock.patch('fdroidserver.scanner.ScannerTool.refresh') as refresh: fdroidserver.scanner.ScannerTool() refresh.assert_called_once() class Test_main(unittest.TestCase): def setUp(self): self.args = ["com.example.app", "local/additional.apk", "another.apk"] self.exit_func = mock.Mock() self.read_app_args_func = mock.Mock(return_value={}) self.scan_binary_func = mock.Mock(return_value=0) def test_parsing_appid(self): """This test verifies that app id get parsed correctly (doesn't test how they get processed) """ self.args = ["com.example.app"] with ( tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir), mock.patch("sys.exit", self.exit_func), mock.patch("sys.argv", ["fdroid scanner", *self.args]), mock.patch("fdroidserver.common.read_app_args", self.read_app_args_func), mock.patch("fdroidserver.scanner.scan_binary", self.scan_binary_func), ): fdroidserver.scanner.main() self.exit_func.assert_not_called() self.read_app_args_func.assert_called_once_with( ['com.example.app'], allow_version_codes=True ) self.scan_binary_func.assert_not_called() def test_parsing_apkpath(self): """This test verifies that apk paths get parsed correctly (doesn't test how they get processed) """ self.args = ["local.application.apk"] with ( tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir), mock.patch("sys.exit", self.exit_func), mock.patch("sys.argv", ["fdroid scanner", *self.args]), mock.patch("fdroidserver.common.read_app_args", self.read_app_args_func), mock.patch("fdroidserver.scanner.scan_binary", self.scan_binary_func), ): pathlib.Path(self.args[0]).touch() fdroidserver.scanner.main() self.exit_func.assert_not_called() self.read_app_args_func.assert_not_called() self.scan_binary_func.assert_called_once_with('local.application.apk') ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898792.0 fdroidserver-2.4.0/tests/test_signatures.py0000755000175000017500000000414314770503150017665 0ustar00hanshans#!/usr/bin/env python3 import hashlib import os import sys import unittest from tempfile import TemporaryDirectory from .shared_test_code import TmpCwd from fdroidserver import common, signatures basedir = os.path.dirname(__file__) class SignaturesTest(unittest.TestCase): def setUp(self): common.config = None config = common.read_config() config['jarsigner'] = common.find_sdk_tools_cmd('jarsigner') common.config = config @unittest.skipIf(sys.byteorder == 'big', "androguard is not ported to big-endian") def test_main(self): class OptionsFixture: APK = [os.path.join(basedir, 'repo', 'com.politedroid_3.apk')] with TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): signatures.extract(OptionsFixture) # check if extracted signatures are where they are supposed to be # also verify weather if extracted file contain what they should filesAndHashes = ( ( os.path.join( 'metadata', 'com.politedroid', 'signatures', '3', 'MANIFEST.MF' ), '7dcd83f0c41a75457fd2311bf3c4578f80d684362d74ba8dc52838d353f31cf2', ), ( os.path.join( 'metadata', 'com.politedroid', 'signatures', '3', 'RELEASE.RSA' ), '883ef3d5a6e0bf69d2a58d9e255a7930f08a49abc38e216ed054943c99c8fdb4', ), ( os.path.join( 'metadata', 'com.politedroid', 'signatures', '3', 'RELEASE.SF' ), '99fbb3211ef5d7c1253f3a7ad4836eadc9905103ce6a75916c40de2831958284', ), ) for path, checksum in filesAndHashes: self.assertTrue( os.path.isfile(path), f'check whether {path!r} was extracted correctly.', ) with open(path, 'rb') as f: self.assertEqual(hashlib.sha256(f.read()).hexdigest(), checksum) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742812298.0 fdroidserver-2.4.0/tests/test_signindex.py0000755000175000017500000001557414770232212017501 0ustar00hanshans#!/usr/bin/env python3 import json import os import shutil import subprocess import tempfile import unittest from fdroidserver import apksigcopier, common, exception, signindex, update from pathlib import Path from unittest.mock import patch class Options: allow_disabled_algorithms = False clean = False delete_unknown = False nosign = False pretty = True rename_apks = False verbose = False class SignindexTest(unittest.TestCase): basedir = Path(__file__).resolve().parent def setUp(self): signindex.config = None config = common.read_config() config['jarsigner'] = common.find_sdk_tools_cmd('jarsigner') config['verbose'] = True config['keystore'] = str(self.basedir / 'keystore.jks') config['repo_keyalias'] = 'sova' config['keystorepass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' config['keypass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' signindex.config = config self.tempdir = tempfile.TemporaryDirectory() os.chdir(self.tempdir.name) self.repodir = Path('repo') self.repodir.mkdir() def tearDown(self): self.tempdir.cleanup() def test_sign_index(self): shutil.copy(str(self.basedir / 'repo/index-v1.json'), 'repo') signindex.sign_index(str(self.repodir), 'index-v1.json') self.assertTrue((self.repodir / 'index-v1.jar').exists()) self.assertTrue((self.repodir / 'index-v1.json').exists()) def test_sign_index_corrupt(self): with open('repo/index-v1.json', 'w') as fp: fp.write('corrupt JSON!') with self.assertRaises(json.decoder.JSONDecodeError, msg='error on bad JSON'): signindex.sign_index(str(self.repodir), 'index-v1.json') def test_sign_entry(self): entry = 'repo/entry.json' v2 = 'repo/index-v2.json' shutil.copy(self.basedir / entry, entry) shutil.copy(self.basedir / v2, v2) signindex.sign_index(self.repodir, 'entry.json') self.assertTrue((self.repodir / 'entry.jar').exists()) def test_sign_entry_corrupt(self): """sign_index should exit with error if entry.json is bad JSON""" entry = 'repo/entry.json' with open(entry, 'w') as fp: fp.write('{') with self.assertRaises(json.decoder.JSONDecodeError, msg='error on bad JSON'): signindex.sign_index(self.repodir, 'entry.json') self.assertFalse((self.repodir / 'entry.jar').exists()) def test_sign_entry_corrupt_leave_entry_jar(self): """sign_index should not touch existing entry.jar if entry.json is corrupt""" existing = 'repo/entry.jar' testvalue = "Don't touch!" with open(existing, 'w') as fp: fp.write(testvalue) with open('repo/entry.json', 'w') as fp: fp.write('{') with self.assertRaises(json.decoder.JSONDecodeError, msg='error on bad JSON'): signindex.sign_index(self.repodir, 'entry.json') with open(existing) as fp: self.assertEqual(testvalue, fp.read()) def test_sign_corrupt_index_v2_json(self): """sign_index should exit with error if index-v2.json JSON is corrupt""" with open('repo/index-v2.json', 'w') as fp: fp.write('{"key": "not really an index"') good_entry = { "timestamp": 1676583021000, "version": 20002, "index": { "name": "/index-v2.json", "sha256": common.sha256sum('repo/index-v2.json'), "size": os.path.getsize('repo/index-v2.json'), "numPackages": 0, }, } with open('repo/entry.json', 'w') as fp: json.dump(good_entry, fp) with self.assertRaises(json.decoder.JSONDecodeError, msg='error on bad JSON'): signindex.sign_index(self.repodir, 'entry.json') self.assertFalse((self.repodir / 'entry.jar').exists()) def test_sign_index_v2_corrupt_sha256(self): """sign_index should exit with error if SHA-256 of file in entry is wrong""" entry = 'repo/entry.json' v2 = 'repo/index-v2.json' shutil.copy(self.basedir / entry, entry) shutil.copy(self.basedir / v2, v2) with open(v2, 'a') as fp: fp.write(' ') with self.assertRaises(exception.FDroidException, msg='error on bad SHA-256'): signindex.sign_index(self.repodir, 'entry.json') self.assertFalse((self.repodir / 'entry.jar').exists()) def test_signindex(self): if common.find_apksigner({}) is None: # TODO remove me for buildserver-bullseye self.skipTest('SKIPPING test_signindex, apksigner not installed!') os.mkdir('archive') metadata = Path('metadata') metadata.mkdir() with (metadata / 'info.guardianproject.urzip.yml').open('w') as fp: fp.write('# placeholder') shutil.copy(str(self.basedir / 'urzip.apk'), 'repo') index_files = [] for f in ( 'entry.jar', 'entry.json', 'index-v1.jar', 'index-v1.json', 'index-v2.json', 'index.jar', 'index.xml', ): for section in (Path('repo'), Path('archive')): path = section / f self.assertFalse(path.exists(), '%s should not exist yet!' % path) index_files.append(path) common.options = Options with patch('sys.argv', ['fdroid update']): update.main() with patch('sys.argv', ['fdroid signindex', '--verbose']): signindex.main() for f in index_files: self.assertTrue(f.exists(), '%s should exist!' % f) self.assertFalse(os.path.exists('index-v2.jar')) # no JAR version of this file # index.jar aka v0 must by signed by SHA1withRSA f = 'repo/index.jar' common.verify_deprecated_jar_signature(f) self.assertIsNone(apksigcopier.extract_v2_sig(f, expected=False)) cp = subprocess.run( ['jarsigner', '-verify', '-verbose', f], stdout=subprocess.PIPE ) self.assertTrue(b'SHA1withRSA' in cp.stdout) # index-v1.jar must by signed by SHA1withRSA f = 'repo/index-v1.jar' common.verify_deprecated_jar_signature(f) self.assertIsNone(apksigcopier.extract_v2_sig(f, expected=False)) cp = subprocess.run( ['jarsigner', '-verify', '-verbose', f], stdout=subprocess.PIPE ) self.assertTrue(b'SHA1withRSA' in cp.stdout) # entry.jar aka index v2 must by signed by a modern algorithm f = 'repo/entry.jar' common.verify_deprecated_jar_signature(f) self.assertIsNone(apksigcopier.extract_v2_sig(f, expected=False)) cp = subprocess.run( ['jarsigner', '-verify', '-verbose', f], stdout=subprocess.PIPE ) self.assertFalse(b'SHA1withRSA' in cp.stdout) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898792.0 fdroidserver-2.4.0/tests/test_update.py0000755000175000017500000030315514770503150016770 0ustar00hanshans#!/usr/bin/env python3 import copy import git import glob import hashlib import json import logging import os import random import shutil import string import subprocess import sys import unittest import yaml import zipfile import textwrap from binascii import hexlify from datetime import datetime from pathlib import Path from unittest import mock try: # these were moved in androguard 4.0 from androguard.core.apk import APK except ImportError: from androguard.core.bytecodes.apk import APK try: from yaml import CSafeLoader as SafeLoader except ImportError: from yaml import SafeLoader try: from yaml import CFullLoader as FullLoader except ImportError: try: # FullLoader is available from PyYaml 5.1+, as we don't load user # controlled data here, it's okay to fall back the unsafe older # Loader from yaml import FullLoader except ImportError: from yaml import Loader as FullLoader import fdroidserver.common import fdroidserver.exception import fdroidserver.metadata import fdroidserver.update from fdroidserver.common import CATEGORIES_CONFIG_NAME from fdroidserver.looseversion import LooseVersion from .shared_test_code import TmpCwd, mkdtemp from PIL import PngImagePlugin DONATION_FIELDS = ('Donate', 'Liberapay', 'OpenCollective') logging.getLogger(PngImagePlugin.__name__).setLevel(logging.INFO) basedir = Path(__file__).parent class Options: allow_disabled_algorithms = False clean = False delete_unknown = False nosign = False pretty = True rename_apks = False verbose = False @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') class UpdateTest(unittest.TestCase): '''fdroid update''' def setUp(self): os.chdir(basedir) self._td = mkdtemp() self.testdir = self._td.name fdroidserver.common.config = None fdroidserver.common.options = None def tearDown(self): os.chdir(basedir) self._td.cleanup() def test_insert_store_metadata(self): os.chdir(self.testdir) config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.update.config = config repo_dir = basedir / 'repo' os.mkdir('metadata') for packageName in ( 'obb.mainpatch.current', 'org.videolan.vlc', ): shutil.copytree( repo_dir / packageName, os.path.join('repo', packageName) ) for packageName in ( 'info.guardianproject.checkey', 'info.guardianproject.urzip', 'org.smssecure.smssecure', ): shutil.copytree( basedir / 'metadata' / packageName, os.path.join('metadata', packageName), ) for packageName in ( 'com.nextcloud.client', 'com.nextcloud.client.dev', 'eu.siacs.conversations', ): shutil.copytree( basedir / 'source-files' / packageName, os.path.join(self.testdir, 'build', packageName), ) testfilename = 'icon_yAfSvPRJukZzMMfUzvbYqwaD1XmHXNtiPBtuPVHW-6s=.png' testfile = repo_dir / 'org.videolan.vlc/en-US/icon.png' cpdir = os.path.join('metadata', 'org.videolan.vlc', 'en-US') cpfile = os.path.join(cpdir, testfilename) os.makedirs(cpdir, exist_ok=True) shutil.copy(testfile, cpfile) shutil.copystat(testfile, cpfile) apps = dict() for packageName in ( 'info.guardianproject.urzip', 'org.videolan.vlc', 'obb.mainpatch.current', 'com.nextcloud.client', 'com.nextcloud.client.dev', 'eu.siacs.conversations', ): apps[packageName] = fdroidserver.metadata.App() apps[packageName]['id'] = packageName apps[packageName]['CurrentVersionCode'] = 0xCAFEBEEF apps['info.guardianproject.urzip']['CurrentVersionCode'] = 100 buildnextcloudclient = fdroidserver.metadata.Build() buildnextcloudclient.gradle = ['generic'] apps['com.nextcloud.client']['Builds'] = [buildnextcloudclient] buildnextclouddevclient = fdroidserver.metadata.Build() buildnextclouddevclient.gradle = ['versionDev'] apps['com.nextcloud.client.dev']['Builds'] = [buildnextclouddevclient] build_conversations = fdroidserver.metadata.Build() build_conversations.gradle = ['free'] apps['eu.siacs.conversations']['Builds'] = [build_conversations] fdroidserver.update.insert_localized_app_metadata(apps) fdroidserver.update.ingest_screenshots_from_repo_dir(apps) appdir = Path('repo/info.guardianproject.urzip/en-US') self.assertTrue( os.path.isfile( os.path.join( appdir, 'icon_NJXNzMcyf-v9i5a1ElJi0j9X1LvllibCa48xXYPlOqQ=.png' ) ) ) self.assertTrue( os.path.isfile( os.path.join( appdir, 'featureGraphic_GFRT5BovZsENGpJq1HqPODGWBRPWQsx25B95Ol5w_wU=.png', ) ) ) self.assertEqual(6, len(apps)) for packageName, app in apps.items(): self.assertIn('localized', app, packageName) self.assertIn('en-US', app['localized']) self.assertEqual(1, len(app['localized'])) if packageName == 'info.guardianproject.urzip': self.assertEqual(7, len(app['localized']['en-US'])) self.assertEqual('full description\n', app['localized']['en-US']['description']) self.assertEqual('title', app['localized']['en-US']['name']) self.assertEqual('short description', app['localized']['en-US']['summary']) self.assertEqual('video', app['localized']['en-US']['video']) self.assertEqual('icon_NJXNzMcyf-v9i5a1ElJi0j9X1LvllibCa48xXYPlOqQ=.png', app['localized']['en-US']['icon']) self.assertEqual('featureGraphic_GFRT5BovZsENGpJq1HqPODGWBRPWQsx25B95Ol5w_wU=.png', app['localized']['en-US']['featureGraphic']) self.assertEqual('100\n', app['localized']['en-US']['whatsNew']) elif packageName == 'org.videolan.vlc': self.assertEqual(testfilename, app['localized']['en-US']['icon']) self.assertEqual(9, len(app['localized']['en-US']['phoneScreenshots'])) self.assertEqual(15, len(app['localized']['en-US']['sevenInchScreenshots'])) elif packageName == 'obb.mainpatch.current': self.assertEqual('icon_WI0pkO3LsklrsTAnRr-OQSxkkoMY41lYe2-fAvXLiLg=.png', app['localized']['en-US']['icon']) self.assertEqual('featureGraphic_ffhLaojxbGAfu9ROe1MJgK5ux8d0OVc6b65nmvOBaTk=.png', app['localized']['en-US']['featureGraphic']) self.assertEqual(1, len(app['localized']['en-US']['phoneScreenshots'])) self.assertEqual(1, len(app['localized']['en-US']['sevenInchScreenshots'])) elif packageName == 'com.nextcloud.client': self.assertEqual('Nextcloud', app['localized']['en-US']['name']) self.assertEqual(1073, len(app['localized']['en-US']['description'])) self.assertEqual(78, len(app['localized']['en-US']['summary'])) elif packageName == 'com.nextcloud.client.dev': self.assertEqual('Nextcloud Dev', app['localized']['en-US']['name']) self.assertEqual(586, len(app['localized']['en-US']['description'])) self.assertEqual(78, len(app['localized']['en-US']['summary'])) elif packageName == 'eu.siacs.conversations': self.assertEqual('Conversations', app['localized']['en-US']['name']) def test_insert_fastlane_default_txt_changelog(self): """Test that Fastlane's default.txt is handled properly https://docs.fastlane.tools/actions/supply/#changelogs-whats-new """ os.chdir(self.testdir) config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.update.config = config app = fdroidserver.metadata.App() app.id = 'com.example.app' changelogs_dir = 'build/%s/metadata/en-US/changelogs' % app.id os.makedirs(changelogs_dir) with open(os.path.join(changelogs_dir, 'default.txt'), 'w') as fp: fp.write('default') with open(os.path.join(changelogs_dir, '42.txt'), 'w') as fp: fp.write('42') apps = {app.id: app} build = fdroidserver.metadata.Build() build.versionCode = 42 app['Builds'] = [build] fdroidserver.update.insert_localized_app_metadata(apps) self.assertEqual('default', apps[app.id]['localized']['en-US']['whatsNew']) app.CurrentVersionCode = 1 fdroidserver.update.insert_localized_app_metadata(apps) self.assertEqual('default', apps[app.id]['localized']['en-US']['whatsNew']) app.CurrentVersionCode = 10000 fdroidserver.update.insert_localized_app_metadata(apps) self.assertEqual('default', apps[app.id]['localized']['en-US']['whatsNew']) app.CurrentVersionCode = 42 fdroidserver.update.insert_localized_app_metadata(apps) self.assertEqual('42', apps[app.id]['localized']['en-US']['whatsNew']) def test_name_title_scraping(self): """metadata file --> fdroiddata localized files --> fastlane/triple-t in app source --> APK""" shutil.copytree(basedir, self.testdir, dirs_exist_ok=True) config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.update.config = config os.chdir(self.testdir) fdroidserver.common.options = Options fdroidserver.update.options = fdroidserver.common.options fdroidserver.update.options.clean = True fdroidserver.update.options.delete_unknown = True apps = fdroidserver.metadata.read_metadata() apps['info.guardianproject.urzip']['CurrentVersionCode'] = 100 knownapks = fdroidserver.common.KnownApks() apks, cachechanged = fdroidserver.update.process_apks({}, 'repo', knownapks, False) fdroidserver.update.insert_localized_app_metadata(apps) fdroidserver.update.ingest_screenshots_from_repo_dir(apps) fdroidserver.update.apply_info_from_latest_apk(apps, apks) app = apps['info.guardianproject.urzip'] self.assertIsNone(app.Name) self.assertTrue('localized' in app) self.assertEqual('title', app['localized']['en-US']['name']) self.assertEqual('100\n', app['localized']['en-US']['whatsNew']) app = apps['org.videolan.vlc'] self.assertIsNone(app.Name) self.assertTrue('localized' in app) self.assertFalse('name' in app['localized']['en-US']) app = apps['info.guardianproject.checkey'] self.assertEqual('Checkey the app!', app.Name) self.assertTrue('localized' in app) self.assertEqual('Checkey: info on local apps', app['localized']['en-US']['name']) self.assertEqual('Checkey: ローカルアプリの情報', app['localized']['ja-JP']['name']) app = apps['org.adaway'] self.assertIsNone(app.Name) self.assertFalse('localized' in app) app = apps['obb.main.twoversions'] self.assertIsNone(app.Name) self.assertFalse('localized' in app) def test_insert_missing_app_names_from_apks(self): """en-US serves as the final, default, fallback value with index-v1""" testvalue = 'TESTVALUE!' apps = { 'none': {}, 'name': {'Name': testvalue}, 'onlyapk': {'Name': None}, 'autoname': {'AutoName': 'autoname', 'Name': None}, 'onlylocalized': {'localized': {'en-US': {'name': testvalue}}}, 'non_en_us_localized': {'localized': {'de-AT': {'name': 'leiwand'}}}, 'apks': {}, } apks = [ {'packageName': 'none', 'name': '', 'versionCode': 1}, {'packageName': 'name', 'name': 'fromapk', 'versionCode': 1}, {'packageName': 'onlyapk', 'name': testvalue, 'versionCode': 1}, {'packageName': 'autoname', 'name': testvalue, 'versionCode': 1}, {'packageName': 'onlylocalized', 'name': 'fromapk', 'versionCode': 1}, {'packageName': 'non_en_us_localized', 'name': testvalue, 'versionCode': 0xcafe}, {'packageName': 'apks', 'name': 'fromapk1', 'versionCode': 1}, {'packageName': 'apks', 'name': 'fromapk2', 'versionCode': 2}, {'packageName': 'apks', 'name': testvalue, 'versionCode': 3}, ] fdroidserver.common.options = Options fdroidserver.update.insert_missing_app_names_from_apks(apps, apks) for appid, app in apps.items(): if appid == 'none': self.assertIsNone(app.get('Name')) self.assertIsNone(app.get('localized')) elif appid == 'onlyapk': self.assertIsNone(app.get('Name')) self.assertEqual(testvalue, app['localized']['en-US']['name']) elif appid == 'autoname': self.assertIsNone(app.get('Name')) self.assertEqual(testvalue, app['localized']['en-US']['name']) elif appid == 'onlylocalized': self.assertIsNone(app.get('Name')) self.assertEqual(testvalue, app['localized']['en-US']['name']) elif appid == 'non_en_us_localized': self.assertIsNone(app.get('Name')) self.assertEqual(testvalue, app['localized']['en-US']['name']) elif appid == 'name': self.assertEqual(testvalue, app['Name']) self.assertIsNone(app.get('localized')) elif appid == 'apks': self.assertIsNone(app.get('Name')) self.assertEqual(testvalue, app['localized']['en-US']['name']) def test_insert_missing_app_names_from_apks_from_repo(self): os.chdir(self.testdir) shutil.copytree(basedir, self.testdir, dirs_exist_ok=True) config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.update.config = config fdroidserver.common.options = Options fdroidserver.update.options = fdroidserver.common.options fdroidserver.update.options.clean = True fdroidserver.update.options.delete_unknown = True apps = fdroidserver.metadata.read_metadata() knownapks = fdroidserver.common.KnownApks() apks, cachechanged = fdroidserver.update.process_apks({}, 'repo', knownapks, False) appid = 'info.guardianproject.checkey' testapps = {appid: copy.copy(apps[appid])} self.assertEqual('Checkey the app!', testapps[appid]['Name']) del testapps[appid]['Name'] fdroidserver.update.insert_missing_app_names_from_apks(testapps, apks) self.assertIsNone(testapps[appid].get('Name')) repoapps = fdroidserver.update.prepare_apps(apps, apks, 'repo') fdroidserver.update.insert_missing_app_names_from_apks(repoapps, apks) self.assertIsNone(repoapps['com.politedroid']['Name']) self.assertEqual('Polite Droid', repoapps['com.politedroid']['localized']['en-US']['name']) self.assertEqual('Duplicate Permisssions', repoapps['duplicate.permisssions']['Name']) self.assertEqual('Caffeine Tile', repoapps['info.zwanenburg.caffeinetile']['Name']) self.assertEqual('No minSdkVersion or targetSdkVersion', repoapps['no.min.target.sdk']['Name']) self.assertIsNone(repoapps['obb.main.oldversion'].get('Name')) self.assertEqual('OBB Main Old Version', repoapps['obb.main.oldversion']['localized']['en-US']['name']) self.assertIsNone(repoapps['obb.main.twoversions'].get('Name')) self.assertEqual('OBB Main Two Versions', repoapps['obb.main.twoversions']['localized']['en-US']['name']) self.assertIsNone(repoapps['souch.smsbypass'].get('Name')) self.assertEqual('Battery level', repoapps['souch.smsbypass']['localized']['en-US']['name']) self.assertIsNone(repoapps['info.guardianproject.urzip'].get('Name')) self.assertEqual('title', repoapps['info.guardianproject.urzip']['localized']['en-US']['name']) self.assertIsNone(repoapps['obb.mainpatch.current'].get('Name')) del repoapps['info.guardianproject.urzip']['localized'] fdroidserver.update.insert_missing_app_names_from_apks(repoapps, apks) self.assertEqual('urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234', repoapps['info.guardianproject.urzip']['localized']['en-US']['name']) def test_insert_triple_t_metadata(self): importer = basedir / 'tmp/importer' packageName = 'org.fdroid.ci.test.app' if not os.path.isdir(importer): logging.warning('skipping test_insert_triple_t_metadata, test_import.py must run first!') return packageDir = os.path.join(self.testdir, 'build', packageName) shutil.copytree(importer, packageDir) # always use the same commit so these tests work when ci-test-app.git is updated repo = git.Repo(packageDir) for remote in repo.remotes: remote.fetch() repo.git.reset('--hard', 'b9e5d1a0d8d6fc31d4674b2f0514fef10762ed4f') repo.git.clean('-fdx') os.mkdir(os.path.join(self.testdir, 'metadata')) metadata = dict() metadata['Description'] = 'This is just a test app' with open(os.path.join(self.testdir, 'metadata', packageName + '.yml'), 'w') as fp: yaml.dump(metadata, fp) config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.update.config = config os.chdir(self.testdir) apps = fdroidserver.metadata.read_metadata() fdroidserver.update.copy_triple_t_store_metadata(apps) # TODO ideally, this would compare the whole dict like in test_metadata.test_read_metadata() correctlocales = [ 'ar', 'ast_ES', 'az', 'ca', 'ca_ES', 'cs-CZ', 'cs_CZ', 'da', 'da-DK', 'de', 'de-DE', 'el', 'en-US', 'es', 'es-ES', 'es_ES', 'et', 'fi', 'fr', 'fr-FR', 'he_IL', 'hi-IN', 'hi_IN', 'hu', 'id', 'it', 'it-IT', 'it_IT', 'iw-IL', 'ja', 'ja-JP', 'kn_IN', 'ko', 'ko-KR', 'ko_KR', 'lt', 'nb', 'nb_NO', 'nl', 'nl-NL', 'no', 'pl', 'pl-PL', 'pl_PL', 'pt', 'pt-BR', 'pt-PT', 'pt_BR', 'ro', 'ro_RO', 'ru-RU', 'ru_RU', 'sv-SE', 'sv_SE', 'te', 'tr', 'tr-TR', 'uk', 'uk_UA', 'vi', 'vi_VN', 'zh-CN', 'zh_CN', 'zh_TW', ] locales = sorted(apps['org.fdroid.ci.test.app']['localized']) self.assertEqual(correctlocales, locales) def test_insert_triple_t_2_metadata(self): packageName = 'org.piwigo.android' shutil.copytree(basedir / 'triple-t-2', self.testdir, dirs_exist_ok=True) os.chdir(self.testdir) config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.update.config = config apps = fdroidserver.metadata.read_metadata() self.assertTrue(packageName in apps) fdroidserver.update.copy_triple_t_store_metadata(apps) correctlocales = ['de-DE', 'en-US', 'fr-FR', 'kn-IN'] app = apps[packageName] self.assertEqual('android@piwigo.org', app['authorEmail']) self.assertEqual('https://www.piwigo.org', app['authorWebSite']) locales = sorted(list(app['localized'].keys())) self.assertEqual(correctlocales, locales) kn_IN = app['localized']['kn-IN'] self.assertTrue('description' in kn_IN) self.assertTrue('name' in kn_IN) self.assertTrue('summary' in kn_IN) en_US = app['localized']['en-US'] self.assertTrue('whatsNew' in en_US) os.chdir(os.path.join('repo', packageName)) self.assertTrue(os.path.exists(os.path.join('en-US', 'icon.png'))) self.assertTrue(os.path.exists(os.path.join('en-US', 'featureGraphic.png'))) self.assertTrue(os.path.exists(os.path.join('en-US', 'phoneScreenshots', '01_Login.jpg'))) self.assertTrue(os.path.exists(os.path.join('en-US', 'sevenInchScreenshots', '01_Login.png'))) self.assertFalse(os.path.exists(os.path.join('de-DE', 'icon.png'))) self.assertFalse(os.path.exists(os.path.join('de-DE', 'featureGraphic.png'))) self.assertFalse(os.path.exists(os.path.join('de-DE', 'phoneScreenshots', '01_Login.jpg'))) self.assertFalse(os.path.exists(os.path.join('de-DE', 'sevenInchScreenshots', '01_Login.png'))) def test_insert_triple_t_anysoftkeyboard(self): packages = ('com.anysoftkeyboard.languagepack.dutch', 'com.menny.android.anysoftkeyboard') names = ('Dutch for AnySoftKeyboard', 'AnySoftKeyboard') shutil.copytree(basedir / 'triple-t-anysoftkeyboard', self.testdir, dirs_exist_ok=True) os.chdir(self.testdir) for packageName, name in zip(packages, names): config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.update.config = config fdroidserver.update.options = fdroidserver.common.options apps = fdroidserver.metadata.read_metadata() self.assertTrue(packageName in apps) fdroidserver.update.copy_triple_t_store_metadata(apps) app = apps[packageName] self.assertEqual(app['localized']['en-US']['name'], name) def test_insert_triple_t_multiple_metadata(self): namespace = 'ch.admin.bag.covidcertificate.' packages = ('verifier', 'wallet') names = dict(verifier='COVID Certificate Check', wallet='COVID Certificate') shutil.copytree(basedir / 'triple-t-multiple', self.testdir, dirs_exist_ok=True) os.chdir(self.testdir) for p in packages: packageName = namespace + p config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.update.config = config fdroidserver.update.options = fdroidserver.common.options apps = fdroidserver.metadata.read_metadata() self.assertTrue(packageName in apps) fdroidserver.update.copy_triple_t_store_metadata(apps) app = apps[packageName] self.assertEqual(app['localized']['en-US']['name'], names[p]) def test_insert_triple_t_flutter(self): packageName = 'fr.emersion.goguma' shutil.copytree(basedir / 'triple-t-flutter', self.testdir, dirs_exist_ok=True) os.chdir(self.testdir) config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.update.config = config fdroidserver.update.options = fdroidserver.common.options apps = fdroidserver.metadata.read_metadata() self.assertTrue(packageName in apps) fdroidserver.update.copy_triple_t_store_metadata(apps) app = apps[packageName] self.assertEqual(app['authorWebSite'], 'https://emersion.fr') self.assertEqual(app['localized']['en-US']['name'], 'Goguma') self.assertEqual(app['localized']['en-US']['summary'], 'An IRC client for mobile devices') def testBadGetsig(self): """getsig() should still be able to fetch the fingerprint of bad signatures""" # config needed to use jarsigner and keytool config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.update.config = config apkfile = 'urzip-badsig.apk' sig = fdroidserver.update.getsig(apkfile) self.assertEqual(sig, 'e0ecb5fc2d63088e4a07ae410a127722', "python sig should be: " + str(sig)) apkfile = 'urzip-badcert.apk' sig = fdroidserver.update.getsig(apkfile) self.assertEqual(sig, 'e0ecb5fc2d63088e4a07ae410a127722', "python sig should be: " + str(sig)) def test_getsig(self): # config needed to use jarsigner and keytool config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.update.config = config sig = fdroidserver.update.getsig('urzip-release-unsigned.apk') self.assertIsNone(sig) good_fingerprint = 'b4964fd759edaa54e65bb476d0276880' apkpath = 'urzip-release.apk' # v1 only sig = fdroidserver.update.getsig(apkpath) self.assertEqual(good_fingerprint, sig, 'python sig was: ' + str(sig)) apkpath = 'repo/v1.v2.sig_1020.apk' sig = fdroidserver.update.getsig(apkpath) self.assertEqual(good_fingerprint, sig, 'python sig was: ' + str(sig)) # check that v1 and v2 have the same certificate apkobject = APK(apkpath) cert_encoded = apkobject.get_certificates_der_v2()[0] self.assertEqual(good_fingerprint, sig, hashlib.md5(hexlify(cert_encoded)).hexdigest()) # nosec just used as ID for signing key filename = 'v2.only.sig_2.apk' with zipfile.ZipFile(filename) as z: self.assertTrue('META-INF/MANIFEST.MF' in z.namelist(), 'META-INF/MANIFEST.MF required') for f in z.namelist(): # ensure there are no v1 signature files self.assertIsNone(fdroidserver.common.SIGNATURE_BLOCK_FILE_REGEX.match(f)) sig = fdroidserver.update.getsig(filename) self.assertEqual(good_fingerprint, sig, "python sig was: " + str(sig)) def testScanApksAndObbs(self): os.chdir(self.testdir) shutil.copytree(basedir / 'repo', 'repo') shutil.copytree(basedir / 'metadata', 'metadata') config = dict() fdroidserver.common.fill_config_defaults(config) config['ndk_paths'] = dict() fdroidserver.common.config = config fdroidserver.update.config = config fdroidserver.common.options = Options fdroidserver.update.options = fdroidserver.common.options fdroidserver.update.options.clean = True fdroidserver.update.options.delete_unknown = True apps = fdroidserver.metadata.read_metadata() knownapks = fdroidserver.common.KnownApks() apks, cachechanged = fdroidserver.update.process_apks({}, 'repo', knownapks, False) self.assertEqual(len(apks), 18) apk = apks[1] self.assertEqual(apk['packageName'], 'com.politedroid') self.assertEqual(apk['versionCode'], 3) self.assertEqual(apk['minSdkVersion'], 3) self.assertIsNone(apk.get('targetSdkVersion')) self.assertFalse('maxSdkVersion' in apk) apk = apks[8] self.assertEqual(apk['packageName'], 'obb.main.oldversion') self.assertEqual(apk['versionCode'], 1444412523) self.assertEqual(apk['minSdkVersion'], 4) self.assertEqual(apk['targetSdkVersion'], 18) self.assertFalse('maxSdkVersion' in apk) fdroidserver.update.insert_obbs('repo', apps, apks) for apk in apks: if apk['packageName'] == 'obb.mainpatch.current': self.assertEqual(apk.get('obbMainFile'), 'main.1619.obb.mainpatch.current.obb') self.assertEqual(apk.get('obbPatchFile'), 'patch.1619.obb.mainpatch.current.obb') elif apk['packageName'] == 'obb.main.oldversion': self.assertEqual(apk.get('obbMainFile'), 'main.1434483388.obb.main.oldversion.obb') self.assertIsNone(apk.get('obbPatchFile')) elif apk['packageName'] == 'obb.main.twoversions': self.assertIsNone(apk.get('obbPatchFile')) if apk['versionCode'] == 1101613: self.assertEqual(apk.get('obbMainFile'), 'main.1101613.obb.main.twoversions.obb') elif apk['versionCode'] == 1101615: self.assertEqual(apk.get('obbMainFile'), 'main.1101615.obb.main.twoversions.obb') elif apk['versionCode'] == 1101617: self.assertEqual(apk.get('obbMainFile'), 'main.1101615.obb.main.twoversions.obb') else: self.assertTrue(False) elif apk['packageName'] == 'info.guardianproject.urzip': self.assertIsNone(apk.get('obbMainFile')) self.assertIsNone(apk.get('obbPatchFile')) def test_apkcache_json(self): """test the migration from pickle to json""" os.chdir(self.testdir) shutil.copytree(basedir / 'repo', 'repo') config = dict() fdroidserver.common.fill_config_defaults(config) config['ndk_paths'] = dict() fdroidserver.common.config = config fdroidserver.update.config = config fdroidserver.common.options = Options fdroidserver.update.options = fdroidserver.common.options fdroidserver.update.options.clean = True fdroidserver.update.options.delete_unknown = True fdroidserver.metadata.read_metadata() knownapks = fdroidserver.common.KnownApks() apkcache = fdroidserver.update.get_cache() self.assertEqual(2, len(apkcache)) self.assertEqual(fdroidserver.update.METADATA_VERSION, apkcache["METADATA_VERSION"]) self.assertEqual(fdroidserver.update.options.allow_disabled_algorithms, apkcache['allow_disabled_algorithms']) apks, cachechanged = fdroidserver.update.process_apks(apkcache, 'repo', knownapks, False) fdroidserver.update.write_cache(apkcache) fdroidserver.update.options.clean = False read_from_json = fdroidserver.update.get_cache() self.assertEqual(20, len(read_from_json)) for f in glob.glob('repo/*.apk'): self.assertTrue(os.path.basename(f) in read_from_json) fdroidserver.update.options.clean = True reset = fdroidserver.update.get_cache() self.assertEqual(2, len(reset)) def test_scan_repo_files(self): config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.update.config = config os.chdir(self.testdir) os.mkdir('repo') filename = 'Norway_bouvet_europe_2.obf.zip' shutil.copy(basedir / filename, 'repo') knownapks = fdroidserver.common.KnownApks() files, fcachechanged = fdroidserver.update.scan_repo_files(dict(), 'repo', knownapks, False) self.assertTrue(fcachechanged) info = files[0] self.assertEqual(filename, info['apkName']) self.assertEqual(datetime, type(info['added'])) self.assertEqual(os.path.getsize(os.path.join('repo', filename)), info['size']) self.assertEqual( '531190bdbc07e77d5577249949106f32dac7f62d38d66d66c3ae058be53a729d', info['hash'], ) def test_read_added_date_from_all_apks(self): os.chdir(self.testdir) shutil.copytree(basedir / 'repo', 'repo') config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.update.config = config fdroidserver.common.options = Options apps = fdroidserver.metadata.read_metadata() knownapks = fdroidserver.common.KnownApks() apks, cachechanged = fdroidserver.update.process_apks({}, 'repo', knownapks) fdroidserver.update.read_added_date_from_all_apks(apps, apks) def test_apply_info_from_latest_apk(self): os.chdir(self.testdir) shutil.copytree(basedir / 'repo', 'repo') config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.update.config = config fdroidserver.common.options = Options fdroidserver.update.options = fdroidserver.common.options apps = fdroidserver.metadata.read_metadata() knownapks = fdroidserver.common.KnownApks() apks, cachechanged = fdroidserver.update.process_apks({}, 'repo', knownapks) fdroidserver.update.apply_info_from_latest_apk(apps, apks) def test_scan_apk(self): config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.update.config = config os.chdir(basedir) if 'apksigner' in config: apk_info = fdroidserver.update.scan_apk('v2.only.sig_2.apk') self.assertIsNone(apk_info.get('maxSdkVersion')) self.assertEqual(apk_info.get('versionName'), 'v2-only') self.assertEqual(apk_info.get('versionCode'), 2) else: print('WARNING: skipping v2-only test since apksigner cannot be found') apk_info = fdroidserver.update.scan_apk('repo/v1.v2.sig_1020.apk') self.assertIsNone(apk_info.get('maxSdkVersion')) self.assertEqual(apk_info.get('versionName'), 'v1+2') self.assertEqual(apk_info.get('versionCode'), 1020) apk_info = fdroidserver.update.scan_apk('repo/souch.smsbypass_9.apk') self.assertIsNone(apk_info.get('maxSdkVersion')) self.assertEqual(apk_info.get('versionName'), '0.9') apk_info = fdroidserver.update.scan_apk('repo/duplicate.permisssions_9999999.apk') self.assertEqual(apk_info.get('versionName'), '') self.assertEqual(apk_info['icons_src'], {'160': 'res/drawable/ic_launcher.png', '-1': 'res/drawable/ic_launcher.png'}) apk_info = fdroidserver.update.scan_apk('org.dyndns.fules.ck_20.apk') self.assertEqual(apk_info['icons_src'], {'240': 'res/drawable-hdpi-v4/icon_launcher.png', '120': 'res/drawable-ldpi-v4/icon_launcher.png', '160': 'res/drawable-mdpi-v4/icon_launcher.png', '-1': 'res/drawable-mdpi-v4/icon_launcher.png'}) self.assertEqual(apk_info['icons'], {}) self.assertEqual(apk_info['features'], []) self.assertEqual(apk_info['antiFeatures'], dict()) self.assertEqual(apk_info['versionName'], 'v1.6pre2') self.assertEqual(apk_info['hash'], '897486e1f857c6c0ee32ccbad0e1b8cd82f6d0e65a44a23f13f852d2b63a18c8') self.assertEqual(apk_info['packageName'], 'org.dyndns.fules.ck') self.assertEqual(apk_info['versionCode'], 20) self.assertEqual(apk_info['size'], 132453) self.assertEqual(apk_info['nativecode'], ['arm64-v8a', 'armeabi', 'armeabi-v7a', 'mips', 'mips64', 'x86', 'x86_64']) self.assertEqual(apk_info['minSdkVersion'], 7) self.assertEqual(apk_info['sig'], '9bf7a6a67f95688daec75eab4b1436ac') self.assertEqual(apk_info['hashType'], 'sha256') self.assertEqual(apk_info['targetSdkVersion'], 8) apk_info = fdroidserver.update.scan_apk('org.bitbucket.tickytacky.mirrormirror_4.apk') self.assertEqual(apk_info.get('versionName'), '1.0.3') self.assertEqual(apk_info['icons_src'], {'160': 'res/drawable-mdpi/mirror.png', '-1': 'res/drawable-mdpi/mirror.png'}) apk_info = fdroidserver.update.scan_apk('repo/info.zwanenburg.caffeinetile_4.apk') self.assertEqual(apk_info.get('versionName'), '1.3') self.assertEqual(apk_info['icons_src'], {}) apk_info = fdroidserver.update.scan_apk('repo/com.politedroid_6.apk') self.assertEqual(apk_info.get('versionName'), '1.5') self.assertEqual(apk_info['icons_src'], {'120': 'res/drawable-ldpi-v4/icon.png', '160': 'res/drawable-mdpi-v4/icon.png', '240': 'res/drawable-hdpi-v4/icon.png', '320': 'res/drawable-xhdpi-v4/icon.png', '-1': 'res/drawable-mdpi-v4/icon.png'}) apk_info = fdroidserver.update.scan_apk('SpeedoMeterApp.main_1.apk') self.assertEqual(apk_info.get('versionName'), '1.0') self.assertEqual(apk_info['icons_src'], {}) def test_scan_apk_no_min_target(self): config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.update.config = config apk_info = fdroidserver.update.scan_apk('repo/no.min.target.sdk_987.apk') self.maxDiff = None expected = { 'icons': {}, 'icons_src': {'-1': 'res/drawable/ic_launcher.png', '160': 'res/drawable/ic_launcher.png'}, 'name': 'No minSdkVersion or targetSdkVersion', 'signer': '32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6', 'hashType': 'sha256', 'packageName': 'no.min.target.sdk', 'features': [], 'antiFeatures': dict(), 'size': 14102, 'sig': 'b4964fd759edaa54e65bb476d0276880', 'versionName': '1.2-fake', 'uses-permission-sdk-23': [], 'hash': 'e2e1dc1d550df2b5bc383860139207258645b5540abeccd305ed8b2cb6459d2c', 'versionCode': 987, 'minSdkVersion': 3, 'uses-permission': [ fdroidserver.update.UsesPermission(name='android.permission.WRITE_EXTERNAL_STORAGE', maxSdkVersion=None), fdroidserver.update.UsesPermission(name='android.permission.READ_PHONE_STATE', maxSdkVersion=None), fdroidserver.update.UsesPermission(name='android.permission.READ_EXTERNAL_STORAGE', maxSdkVersion=None), ], } if config.get('ipfs_cid'): expected['ipfsCIDv1'] = 'bafybeidwxseoagnew3gtlasttqovl7ciuwxaud5a5p4a5pzpbrfcfj2gaa' self.assertDictEqual(apk_info, expected) def test_scan_apk_no_sig(self): config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.update.config = config os.chdir(basedir) if os.path.basename(os.getcwd()) != 'tests': raise Exception('This test must be run in the "tests/" subdir') with self.assertRaises(fdroidserver.exception.BuildException): fdroidserver.update.scan_apk('urzip-release-unsigned.apk') def test_scan_apk_bad_zip(self): config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.update.config = config os.chdir(self.testdir) os.mkdir('repo') apkfile = 'repo/badzip_1.apk' with open(apkfile, 'w') as fp: fp.write('this is not a zip file') with self.assertRaises(fdroidserver.exception.BuildException): fdroidserver.update.scan_apk(apkfile) @unittest.skipUnless( os.path.exists('tests/SystemWebView-repack.apk'), "file too big for sdist" ) def test_scan_apk_bad_icon_id(self): """Some APKs can produce an exception when extracting the icon This kind of parsing exception should be reported then ignored so that working APKs can be included in the index. There are so many weird things that make it into APKs, that does not automatically disqualify them from inclusion. For example: ValueError: invalid literal for int() with base 16: '<0x801FF, type 0x07>' The test APK was made from: https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1018#note_690565333 It was then stripped down by doing: * mkdir SystemWebView * cd SystemWebView/ * unzip ../SystemWebView.apk * rm -rf META-INF/ lib assets/icudtl.dat assets/stored-locales/ * jar cf ../SystemWebView-repack.apk * """ # reset the state, perhaps this should be in setUp() config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.update.config = config with mkdtemp() as tmpdir, TmpCwd(tmpdir): os.mkdir('repo') apkfile = 'repo/SystemWebView-repack.apk' shutil.copy(basedir / os.path.basename(apkfile), apkfile) fdroidserver.update.scan_apk(apkfile) def test_scan_apk_bad_namespace_in_manifest(self): """Some APKs can produce an exception when parsing the AndroidManifest.xml This kind of parsing exception should be reported then ignored so that working APKs can be included in the index. There are so many weird things that make it into APKs, that does not automatically disqualify them from inclusion. This APK has elements with messed up namespaces: """ # reset the state, perhaps this should be in setUp() config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.update.config = config with mkdtemp() as tmpdir, TmpCwd(tmpdir): os.mkdir('repo') apkfile = 'repo/org.sajeg.fallingblocks_3.apk' shutil.copy(basedir / os.path.basename(apkfile), apkfile) fdroidserver.update.scan_apk(apkfile) def test_process_apk(self): def _build_yaml_representer(dumper, data): '''Creates a YAML representation of a Build instance''' return dumper.represent_dict(data) os.chdir(self.testdir) shutil.copytree(basedir, 'tests') config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.update.config = config os.chdir("tests") config['ndk_paths'] = dict() fdroidserver.common.config = config fdroidserver.update.config = config fdroidserver.common.options = Options fdroidserver.update.options = fdroidserver.common.options fdroidserver.update.options.clean = True fdroidserver.update.options.delete_unknown = True for icon_dir in fdroidserver.update.get_all_icon_dirs('repo'): if not os.path.exists(icon_dir): os.makedirs(icon_dir) knownapks = fdroidserver.common.KnownApks() apkList = ['../urzip.apk', '../org.dyndns.fules.ck_20.apk'] for apkName in apkList: _, apk, cachechanged = fdroidserver.update.process_apk({}, apkName, 'repo', knownapks, False) # Don't care about the date added to the repo and relative apkName self.assertEqual(datetime, type(apk['added'])) del apk['added'] del apk['apkName'] # ensure that icons have been extracted properly if apkName == '../urzip.apk': self.assertEqual(apk['icon'], 'info.guardianproject.urzip.100.png') if apkName == '../org.dyndns.fules.ck_20.apk': self.assertEqual(apk['icon'], 'org.dyndns.fules.ck.20.png') for density in fdroidserver.update.screen_densities: icon_path = os.path.join( fdroidserver.update.get_icon_dir('repo', density), apk['icon'] ) self.assertTrue(os.path.isfile(icon_path)) self.assertTrue(os.path.getsize(icon_path) > 1) savepath = os.path.join('metadata', 'apk', apk['packageName'] + '.yaml') # Uncomment to save APK metadata # with open(savepath, 'w') as f: # yaml.add_representer(fdroidserver.metadata.Build, _build_yaml_representer) # yaml.dump(apk, f, default_flow_style=False) # CFullLoader doesn't always work # https://github.com/yaml/pyyaml/issues/266#issuecomment-559116876 TestLoader = FullLoader try: testyaml = '- !!python/object/new:fdroidserver.update.UsesPermission\n - test\n - null' from_yaml = yaml.load(testyaml, Loader=TestLoader) # nosec B506 except yaml.constructor.ConstructorError: from yaml import UnsafeLoader as TestLoader with open(savepath, 'r') as f: from_yaml = yaml.load(f, Loader=TestLoader) # nosec B506 self.maxDiff = None if not config.get('ipfs_cid'): del from_yaml['ipfsCIDv1'] # handle when ipfs_cid is not installed self.assertEqual(apk, from_yaml) def test_process_apk_signed_by_disabled_algorithms(self): config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.update.config = config config['ndk_paths'] = dict() fdroidserver.common.config = config fdroidserver.update.config = config fdroidserver.common.options = Options fdroidserver.update.options = fdroidserver.common.options fdroidserver.update.options.clean = True fdroidserver.update.options.verbose = True fdroidserver.update.options.delete_unknown = True knownapks = fdroidserver.common.KnownApks() with mkdtemp() as tmptestsdir, TmpCwd(tmptestsdir): os.mkdir('repo') os.mkdir('archive') # setup the repo, create icons dirs, etc. fdroidserver.update.process_apks({}, 'repo', knownapks) fdroidserver.update.process_apks({}, 'archive', knownapks) disabledsigs = ['org.bitbucket.tickytacky.mirrormirror_2.apk'] for apkName in disabledsigs: shutil.copy(basedir / apkName, os.path.join(tmptestsdir, 'repo')) skip, apk, cachechanged = fdroidserver.update.process_apk({}, apkName, 'repo', knownapks, allow_disabled_algorithms=True, archive_bad_sig=False) self.assertFalse(skip) self.assertIsNotNone(apk) self.assertTrue(cachechanged) self.assertFalse(os.path.exists(os.path.join('archive', apkName))) self.assertTrue(os.path.exists(os.path.join('repo', apkName))) if os.path.exists('/usr/bin/apksigner') or 'apksigner' in config: print('SKIPPING: apksigner installed and it allows MD5 signatures') return javac = config['jarsigner'].replace('jarsigner', 'javac') v = subprocess.check_output([javac, '-version'], stderr=subprocess.STDOUT)[6:-1].decode('utf-8') if LooseVersion(v) < LooseVersion('1.8.0_132'): print('SKIPPING: running tests with old Java (' + v + ')') return # this test only works on systems with fully updated Java/jarsigner # that has MD5 listed in jdk.jar.disabledAlgorithms in java.security # https://blogs.oracle.com/java-platform-group/oracle-jre-will-no-longer-trust-md5-signed-code-by-default skip, apk, cachechanged = fdroidserver.update.process_apk({}, apkName, 'repo', knownapks, allow_disabled_algorithms=False, archive_bad_sig=True) self.assertTrue(skip) self.assertIsNone(apk) self.assertFalse(cachechanged) self.assertTrue(os.path.exists(os.path.join('archive', apkName))) self.assertFalse(os.path.exists(os.path.join('repo', apkName))) skip, apk, cachechanged = fdroidserver.update.process_apk({}, apkName, 'archive', knownapks, allow_disabled_algorithms=False, archive_bad_sig=False) self.assertFalse(skip) self.assertIsNotNone(apk) self.assertTrue(cachechanged) self.assertTrue(os.path.exists(os.path.join('archive', apkName))) self.assertFalse(os.path.exists(os.path.join('repo', apkName))) # ensure that icons have been moved to the archive as well for density in fdroidserver.update.screen_densities: icon_path = os.path.join(fdroidserver.update.get_icon_dir('archive', density), apk['icon']) self.assertTrue(os.path.isfile(icon_path)) self.assertTrue(os.path.getsize(icon_path) > 1) badsigs = ['urzip-badcert.apk', 'urzip-badsig.apk', 'urzip-release-unsigned.apk', ] for apkName in badsigs: shutil.copy(basedir / apkName, os.path.join(self.testdir, 'repo')) skip, apk, cachechanged = fdroidserver.update.process_apk({}, apkName, 'repo', knownapks, allow_disabled_algorithms=False, archive_bad_sig=False) self.assertTrue(skip) self.assertIsNone(apk) self.assertFalse(cachechanged) def test_process_invalid_apk(self): os.chdir(basedir) if os.path.basename(os.getcwd()) != 'tests': raise Exception('This test must be run in the "tests/" subdir') config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.update.config = config fdroidserver.common.options = Options fdroidserver.update.options = fdroidserver.common.options fdroidserver.update.options.delete_unknown = False knownapks = fdroidserver.common.KnownApks() apk = 'fake.ota.update_1234.zip' # this is not an APK, scanning should fail (skip, apk, cachechanged) = fdroidserver.update.process_apk({}, apk, 'repo', knownapks, False) self.assertTrue(skip) self.assertIsNone(apk) self.assertFalse(cachechanged) def test_get_apks_without_allowed_signatures(self): """Test when no AllowedAPKSigningKeys is specified""" os.chdir(self.testdir) shutil.copytree(basedir / 'repo', 'repo') config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.common.options = Options fdroidserver.update.options = fdroidserver.common.options app = fdroidserver.metadata.App() knownapks = fdroidserver.common.KnownApks() apks, cachechanged = fdroidserver.update.process_apks({}, 'repo', knownapks) apkfile = 'v1.v2.sig_1020.apk' self.assertIn( apkfile, os.listdir('repo'), f'{apkfile} was archived or otherwise removed from "repo"', ) (skip, apk, cachechanged) = fdroidserver.update.process_apk( {}, apkfile, 'repo', knownapks, False ) r = fdroidserver.update.get_apks_without_allowed_signatures(app, apk) self.assertIsNone(r) def test_get_apks_without_allowed_signatures_allowed(self): """Test when the APK matches the specified AllowedAPKSigningKeys""" os.chdir(self.testdir) shutil.copytree(basedir / 'repo', 'repo') config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.common.options = Options fdroidserver.update.options = fdroidserver.common.options app = fdroidserver.metadata.App( { 'AllowedAPKSigningKeys': '32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6' } ) knownapks = fdroidserver.common.KnownApks() apks, cachechanged = fdroidserver.update.process_apks({}, 'repo', knownapks) apkfile = 'v1.v2.sig_1020.apk' (skip, apk, cachechanged) = fdroidserver.update.process_apk( {}, apkfile, 'repo', knownapks, False ) r = fdroidserver.update.get_apks_without_allowed_signatures(app, apk) self.assertIsNone(r) def test_get_apks_without_allowed_signatures_blocked(self): """Test when the APK does not match any specified AllowedAPKSigningKeys""" os.chdir(self.testdir) shutil.copytree(basedir / 'repo', 'repo') config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.common.options = Options fdroidserver.update.options = fdroidserver.common.options app = fdroidserver.metadata.App( { 'AllowedAPKSigningKeys': 'fa4edeadfa4edeadfa4edeadfa4edeadfa4edeadfa4edeadfa4edeadfa4edead' } ) knownapks = fdroidserver.common.KnownApks() apks, cachechanged = fdroidserver.update.process_apks({}, 'repo', knownapks) apkfile = 'v1.v2.sig_1020.apk' (skip, apk, cachechanged) = fdroidserver.update.process_apk( {}, apkfile, 'repo', knownapks, False ) r = fdroidserver.update.get_apks_without_allowed_signatures(app, apk) self.assertEqual(apkfile, r) def test_update_with_AllowedAPKSigningKeys(self): """Test that APKs without allowed signatures get deleted.""" os.chdir(self.testdir) os.mkdir('repo') testapk = os.path.join('repo', 'com.politedroid_6.apk') shutil.copy(basedir / testapk, testapk) os.mkdir('metadata') metadatafile = os.path.join('metadata', 'com.politedroid.yml') # Copy and manipulate metadata file shutil.copy(basedir / metadatafile, metadatafile) with open(metadatafile, 'a') as fp: fp.write( '\n\nAllowedAPKSigningKeys: 32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6\n' ) # Set up options fdroidserver.common.options = Options config = fdroidserver.common.read_config() if 'apksigner' not in config: # TODO remove me for buildserver-bullseye self.skipTest('SKIPPING test_update_with_AllowedAPKSigningKeys, apksigner not installed!') config['repo_keyalias'] = 'sova' config['keystorepass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' config['keypass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' config['keystore'] = os.path.join(basedir, 'keystore.jks') self.assertTrue(os.path.exists(testapk)) # Test for non-deletion with mock.patch('sys.argv', ['fdroid update', '--delete-unknown']): fdroidserver.update.main() self.assertTrue(os.path.exists(testapk)) # Copy and manipulate metadata file again shutil.copy(basedir / metadatafile, metadatafile) with open(metadatafile, 'a') as fp: fp.write( '\n\nAllowedAPKSigningKeys: fa4edeadfa4edeadfa4edeadfa4edeadfa4edeadfa4edeadfa4edeadfa4edead\n' ) # Test for deletion with mock.patch('sys.argv', ['fdroid update', '--delete-unknown']): fdroidserver.update.main() self.assertFalse(os.path.exists(testapk)) def test_translate_per_build_anti_features(self): os.chdir(self.testdir) shutil.copytree(basedir / 'repo', 'repo') shutil.copytree(basedir / 'metadata', 'metadata') config = dict() fdroidserver.common.fill_config_defaults(config) config['ndk_paths'] = dict() fdroidserver.common.config = config fdroidserver.update.config = config fdroidserver.common.options = Options fdroidserver.update.options = fdroidserver.common.options fdroidserver.update.options.clean = True fdroidserver.update.options.delete_unknown = True apps = fdroidserver.metadata.read_metadata() knownapks = fdroidserver.common.KnownApks() apks, cachechanged = fdroidserver.update.process_apks({}, 'repo', knownapks, False) fdroidserver.update.translate_per_build_anti_features(apps, apks) self.assertEqual(len(apks), 18) foundtest = False for apk in apks: if apk['packageName'] == 'com.politedroid' and apk['versionCode'] == 3: antiFeatures = apk.get('antiFeatures') self.assertTrue('KnownVuln' in antiFeatures) self.assertEqual(3, len(antiFeatures)) foundtest = True self.assertTrue(foundtest) def test_create_metadata_from_template(self): os.chdir(self.testdir) os.mkdir('repo') os.mkdir('metadata') shutil.copy(basedir / 'urzip.apk', 'repo') config = dict() fdroidserver.common.fill_config_defaults(config) config['ndk_paths'] = dict() fdroidserver.common.config = config fdroidserver.update.config = config fdroidserver.common.options = Options fdroidserver.update.options = fdroidserver.common.options fdroidserver.update.options.clean = True knownapks = fdroidserver.common.KnownApks() apks, cachechanged = fdroidserver.update.process_apks({}, 'repo', knownapks, False) self.assertEqual(1, len(apks)) apk = apks[0] testfile = 'metadata/info.guardianproject.urzip.yml' # create empty 0 byte .yml file, run read_metadata, it should work open(testfile, 'a').close() apps = fdroidserver.metadata.read_metadata() self.assertEqual(1, len(apps)) os.remove(testfile) # test using internal template apps = fdroidserver.metadata.read_metadata() self.assertEqual(0, len(apps)) fdroidserver.update.create_metadata_from_template(apk) self.assertTrue(os.path.exists(testfile)) apps = fdroidserver.metadata.read_metadata() self.assertEqual(1, len(apps)) for app in apps.values(): self.assertEqual('urzip', app['Name']) self.assertEqual(1, len(app['Categories'])) break # test using external template.yml os.remove(testfile) self.assertFalse(os.path.exists(testfile)) shutil.copy(basedir.with_name('examples') / 'template.yml', self.testdir) fdroidserver.update.create_metadata_from_template(apk) self.assertTrue(os.path.exists(testfile)) apps = fdroidserver.metadata.read_metadata() self.assertEqual(1, len(apps)) for app in apps.values(): self.assertEqual('urzip', app['Name']) self.assertEqual(1, len(app['Categories'])) self.assertEqual('Internet', app['Categories'][0]) break with open(testfile) as fp: data = yaml.load(fp, Loader=SafeLoader) self.assertEqual('urzip', data['Name']) self.assertEqual('urzip', data['Summary']) def test_has_known_vulnerability(self): good = [ 'org.bitbucket.tickytacky.mirrormirror_1.apk', 'org.bitbucket.tickytacky.mirrormirror_2.apk', 'org.bitbucket.tickytacky.mirrormirror_3.apk', 'org.bitbucket.tickytacky.mirrormirror_4.apk', 'org.dyndns.fules.ck_20.apk', 'urzip.apk', 'urzip-badcert.apk', 'urzip-badsig.apk', 'urzip-release.apk', 'urzip-release-unsigned.apk', 'repo/com.politedroid_3.apk', 'repo/com.politedroid_4.apk', 'repo/com.politedroid_5.apk', 'repo/com.politedroid_6.apk', 'repo/obb.main.oldversion_1444412523.apk', 'repo/obb.mainpatch.current_1619_another-release-key.apk', 'repo/obb.mainpatch.current_1619.apk', 'repo/obb.main.twoversions_1101613.apk', 'repo/obb.main.twoversions_1101615.apk', 'repo/obb.main.twoversions_1101617.apk', 'repo/urzip-; Рахма́, [rɐxˈmanʲɪnəf] سيرجي_رخمانينوف 谢·.apk', ] for f in good: self.assertFalse(fdroidserver.update.has_known_vulnerability(f)) with self.assertRaises(fdroidserver.exception.FDroidException): fdroidserver.update.has_known_vulnerability('janus.apk') def test_get_apk_icon_when_src_is_none(self): config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.update.config = config # pylint: disable=protected-access icons_src = fdroidserver.update._get_apk_icons_src('urzip-release.apk', None) self.assertFalse(icons_src) def test_strip_and_copy_image(self): in_file = basedir / 'metadata/info.guardianproject.urzip/en-US/images/icon.png' out_file = os.path.join(self.testdir, 'icon.png') fdroidserver.update._strip_and_copy_image(in_file, out_file) self.assertTrue(os.path.exists(out_file)) def test_strip_and_copy_image_bad_filename(self): in_file = basedir / 'corrupt-featureGraphic.png' out_file = os.path.join(self.testdir, 'corrupt-featureGraphic.png') fdroidserver.update._strip_and_copy_image(in_file, out_file) self.assertFalse(os.path.exists(out_file)) def test_create_metadata_from_template_empty_keys(self): apk = {'packageName': 'rocks.janicerand'} with mkdtemp() as tmpdir, TmpCwd(tmpdir): os.mkdir('metadata') with open('template.yml', 'w') as f: f.write( textwrap.dedent( '''\ Disabled: License: AuthorName: AuthorEmail: AuthorWebSite: WebSite: SourceCode: IssueTracker: Translation: Changelog: Donate: Bitcoin: Litecoin: Name: AutoName: Summary: RequiresRoot: RepoType: Repo: Binaries: Builds: ArchivePolicy: AutoUpdateMode: UpdateCheckMode: UpdateCheckIgnore: VercodeOperation: UpdateCheckName: UpdateCheckData: CurrentVersion: CurrentVersionCode: NoSourceSince: ''' ) ) fdroidserver.update.create_metadata_from_template(apk) with open(os.path.join('metadata', 'rocks.janicerand.yml')) as f: metadata_content = yaml.load(f, Loader=SafeLoader) self.maxDiff = None self.assertDictEqual( metadata_content, { 'ArchivePolicy': None, 'AuthorEmail': '', 'AuthorName': '', 'AuthorWebSite': '', 'AutoName': 'rocks.janicerand', 'AutoUpdateMode': '', 'Binaries': '', 'Bitcoin': '', 'Builds': None, 'Changelog': '', 'CurrentVersion': '', 'CurrentVersionCode': None, 'Disabled': '', 'Donate': '', 'IssueTracker': '', 'License': '', 'Litecoin': '', 'Name': 'rocks.janicerand', 'NoSourceSince': '', 'Repo': '', 'RepoType': '', 'RequiresRoot': None, 'SourceCode': '', 'Summary': 'rocks.janicerand', 'Translation': '', 'UpdateCheckData': '', 'UpdateCheckIgnore': '', 'UpdateCheckMode': '', 'UpdateCheckName': '', 'VercodeOperation': None, 'WebSite': '', }, ) def test_insert_funding_yml_donation_links(self): os.chdir(self.testdir) os.mkdir('build') content = textwrap.dedent( """ community_bridge: '' custom: [LINK1, LINK2] github: USERNAME issuehunt: USERNAME ko_fi: USERNAME liberapay: USERNAME open_collective: USERNAME otechie: USERNAME patreon: USERNAME """ ) app = fdroidserver.metadata.App() app.id = 'fake.app.id' apps = {app.id: app} os.mkdir(os.path.join('build', app.id)) fdroidserver.update.insert_funding_yml_donation_links(apps) for field in DONATION_FIELDS: self.assertFalse(app.get(field)) with open(os.path.join('build', app.id, 'FUNDING.yml'), 'w') as fp: fp.write(content) fdroidserver.update.insert_funding_yml_donation_links(apps) for field in DONATION_FIELDS: self.assertIsNotNone(app.get(field), field) self.assertEqual('LINK1', app.get('Donate')) self.assertEqual('USERNAME', app.get('Liberapay')) self.assertEqual('USERNAME', app.get('OpenCollective')) app['Donate'] = 'keepme' app['Liberapay'] = 'keepme' app['OpenCollective'] = 'keepme' fdroidserver.update.insert_funding_yml_donation_links(apps) for field in DONATION_FIELDS: self.assertEqual('keepme', app.get(field)) def test_insert_funding_yml_donation_links_one_at_a_time(self): """Exercise the FUNDING.yml code one entry at a time""" os.chdir(self.testdir) os.mkdir('build') app = fdroidserver.metadata.App() app.id = 'fake.app.id' apps = {app.id: app} os.mkdir(os.path.join('build', app.id)) fdroidserver.update.insert_funding_yml_donation_links(apps) for field in DONATION_FIELDS: self.assertIsNone(app.get(field)) content = textwrap.dedent( """ community_bridge: 'blah-de-blah' github: USERNAME issuehunt: USERNAME ko_fi: USERNAME liberapay: USERNAME open_collective: USERNAME patreon: USERNAME """ ) for line in content.split('\n'): if not line: continue app = fdroidserver.metadata.App() app.id = 'fake.app.id' apps = {app.id: app} with open(os.path.join('build', app.id, 'FUNDING.yml'), 'w') as fp: fp.write(line) data = yaml.load(line, Loader=SafeLoader) fdroidserver.update.insert_funding_yml_donation_links(apps) if 'liberapay' in data: self.assertEqual(data['liberapay'], app.get('Liberapay')) elif 'open_collective' in data: self.assertEqual(data['open_collective'], app.get('OpenCollective')) else: for v in data.values(): self.assertEqual(app.get('Donate', '').split('/')[-1], v) def test_insert_funding_yml_donation_links_with_corrupt_file(self): os.chdir(self.testdir) os.mkdir('build') app = fdroidserver.metadata.App() app.id = 'fake.app.id' apps = {app.id: app} os.mkdir(os.path.join('build', app.id)) with open(os.path.join('build', app.id, 'FUNDING.yml'), 'w') as fp: fp.write( textwrap.dedent( """ opencollective: foo custom: [] liberapay: : """ ) ) fdroidserver.update.insert_funding_yml_donation_links(apps) for field in DONATION_FIELDS: self.assertIsNone(app.get(field)) def test_sanitize_funding_yml(self): with open(basedir / 'funding-usernames.yaml') as fp: data = yaml.load(fp, Loader=SafeLoader) for k, entries in data.items(): for entry in entries: if k in 'custom': m = fdroidserver.update.sanitize_funding_yml_entry(entry) else: m = fdroidserver.update.sanitize_funding_yml_name(entry) if k == 'bad': self.assertIsNone(m) else: self.assertIsNotNone(m) self.assertIsNone(fdroidserver.update.sanitize_funding_yml_entry('foo\nbar')) self.assertIsNone(fdroidserver.update.sanitize_funding_yml_entry( ''.join(chr(random.randint(65, 90)) for _ in range(2049)))) # nosec B311 # not recommended but valid entries self.assertIsNotNone(fdroidserver.update.sanitize_funding_yml_entry(12345)) self.assertIsNotNone(fdroidserver.update.sanitize_funding_yml_entry(5.0)) self.assertIsNotNone(fdroidserver.update.sanitize_funding_yml_entry(' WhyIncludeWhitespace ')) self.assertIsNotNone(fdroidserver.update.sanitize_funding_yml_entry(['first', 'second'])) def test_set_localized_text_entry(self): os.chdir(self.testdir) config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.update.config = config fdroidserver.update.options = fdroidserver.common.options files = { 'full-description.txt': 'description', 'short-description.txt': 'summary', 'title.txt': 'name', 'video-url.txt': 'video', } for f, key in files.items(): limit = config['char_limits'][key] with open(f, 'w') as fp: fp.write(''.join(random.choice(string.ascii_letters) for i in range(limit + 100))) # nosec B311 locale = 'ru_US' app = dict() fdroidserver.update._set_localized_text_entry(app, locale, key, f) self.assertEqual(limit, len(app['localized'][locale][key])) f = 'badlink-' + f os.symlink('/path/to/nowhere', f) app = dict() fdroidserver.update._set_localized_text_entry(app, locale, key, f) self.assertIsNone(app['localized'].get(locale, {}).get(key)) def test_set_author_entry(self): os.chdir(self.testdir) config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.update.config = config fdroidserver.update.options = fdroidserver.common.options f = 'contact-website.txt' key = 'author' url = 'https://f-droid.org/' limit = config['char_limits']['author'] with open(f, 'w') as fp: fp.write(url) fp.write('\n') app = dict() fdroidserver.update._set_author_entry(app, key, f) self.assertEqual(url, app[key]) f = 'limits.txt' key = 'author' limit = config['char_limits']['author'] for key in ('authorEmail', 'authorPhone', 'authorWebSite'): with open(f, 'w') as fp: fp.write(''.join(random.choice(string.ascii_letters) for i in range(limit + 100))) # nosec B311 app = dict() fdroidserver.update._set_author_entry(app, key, f) self.assertEqual(limit, len(app[key])) f = 'badlink.txt' os.symlink('/path/to/nowhere', f) app = dict() fdroidserver.update._set_author_entry(app, key, f) self.assertIsNone(app.get(key)) def test_status_update_json(self): fdroidserver.common.config = {} fdroidserver.update.config = {} fdroidserver.update.options = Options with mkdtemp() as tmpdir: os.chdir(tmpdir) with mock.patch('sys.argv', ['fdroid update', '']): fdroidserver.update.status_update_json([], []) with open('repo/status/update.json') as fp: data = json.load(fp) self.assertTrue('apksigner' in data) fdroidserver.update.config = { 'apksigner': 'apksigner', } fdroidserver.update.status_update_json([], []) with open('repo/status/update.json') as fp: data = json.load(fp) self.assertEqual(shutil.which(fdroidserver.update.config['apksigner']), data['apksigner']) fdroidserver.update.config = {} fdroidserver.common.fill_config_defaults(fdroidserver.update.config) fdroidserver.update.status_update_json([], []) with open('repo/status/update.json') as fp: data = json.load(fp) self.assertEqual(fdroidserver.update.config.get('apksigner'), data['apksigner']) self.assertEqual(fdroidserver.update.config['jarsigner'], data['jarsigner']) self.assertEqual(fdroidserver.update.config['keytool'], data['keytool']) def test_scan_metadata_androguard(self): def _create_apkmetadata_object(apkName): """Create an empty apk metadata object.""" apk = {} apk['apkName'] = apkName apk['uses-permission'] = [] apk['uses-permission-sdk-23'] = [] apk['features'] = [] apk['icons_src'] = {} return apk apkList = [ ( 'org.dyndns.fules.ck_20.apk', { 'apkName': 'org.dyndns.fules.ck_20.apk', 'uses-permission': [ fdroidserver.update.UsesPermission( name='android.permission.BIND_INPUT_METHOD', maxSdkVersion=None, ), fdroidserver.update.UsesPermission( name='android.permission.READ_EXTERNAL_STORAGE', maxSdkVersion=None, ), fdroidserver.update.UsesPermission( name='android.permission.VIBRATE', maxSdkVersion=None ), ], 'uses-permission-sdk-23': [], 'features': [], 'icons_src': { '240': 'res/drawable-hdpi-v4/icon_launcher.png', '120': 'res/drawable-ldpi-v4/icon_launcher.png', '160': 'res/drawable-mdpi-v4/icon_launcher.png', '-1': 'res/drawable-mdpi-v4/icon_launcher.png', }, 'packageName': 'org.dyndns.fules.ck', 'versionCode': 20, 'versionName': 'v1.6pre2', 'minSdkVersion': 7, 'name': 'Compass Keyboard', 'targetSdkVersion': 8, 'nativecode': [ 'arm64-v8a', 'armeabi', 'armeabi-v7a', 'mips', 'mips64', 'x86', 'x86_64', ], }, ) ] for apkfile, apkaapt in apkList: apkandroguard = _create_apkmetadata_object(apkfile) fdroidserver.update.scan_apk_androguard(apkandroguard, apkfile) self.maxDiff = None self.assertEqual(apkaapt, apkandroguard) def test_exclude_disabled_apks(self): os.chdir(self.testdir) os.mkdir('repo') testapk = os.path.join('repo', 'com.politedroid_6.apk') testapk_new = os.path.join('repo', 'Politedroid-1.5.apk') shutil.copy(basedir / testapk, testapk_new) config = dict() fdroidserver.common.fill_config_defaults(config) config['ndk_paths'] = dict() fdroidserver.common.config = config fdroidserver.update.config = config fdroidserver.common.options = Options fdroidserver.update.options = fdroidserver.common.options fdroidserver.update.options.clean = True app = fdroidserver.metadata.App() app.id = 'com.politedroid' apps = {app.id: app} build = fdroidserver.metadata.Build() build.versionCode = 6 build.disable = "disabled" app['Builds'] = [build] knownapks = fdroidserver.common.KnownApks() apks, cachechanged = fdroidserver.update.process_apks({}, 'repo', knownapks, False, apps) self.assertEqual([], apks) def test_archive_old_apks_ArchivePolicy_0(self): app = fdroidserver.metadata.App() app.id = 'test' app.ArchivePolicy = 0 apps = {app.id: app} with self.assertLogs(level='DEBUG') as cm: fdroidserver.update.archive_old_apks(apps, [], [], '', '', 3) self.assertEqual(cm.output, [ "DEBUG:root:Checking archiving for test - apks:0, keepversions:0, archapks:0" ]) def test_archive_old_apks(self): app = fdroidserver.metadata.App() app.id = 'test' app.VercodeOperation = ['%c+1', '%c+2', '%c+3', '%c+4'] apps = {app.id: app} with self.assertLogs(level='DEBUG') as cm: fdroidserver.update.archive_old_apks(apps, [], [], '', '', 3) self.assertEqual(cm.output, [ "DEBUG:root:Checking archiving for test - apks:0, keepversions:12, archapks:0" ]) app = fdroidserver.metadata.App() app.id = 'org.smssecure.smssecure' app.CurrentVersionCode = 135 apps = {app.id: app} with self.assertLogs(level='DEBUG') as cm: fdroidserver.update.archive_old_apks(apps, [], [], '', '', 3) self.assertEqual(cm.output, [ "DEBUG:root:Checking archiving for org.smssecure.smssecure - apks:0, keepversions:6, archapks:0" ]) def test_categories_txt_is_removed_by_delete_unknown(self): """categories.txt used to be a part of this system, now its nothing.""" os.chdir(self.testdir) fdroidserver.common.write_config_file( 'repo_pubkey: ffffffffffffffffffffffffffffffffffffffff\n' ) categories_txt = Path('repo/categories.txt') categories_txt.parent.mkdir() categories_txt.write_text('placeholder') self.assertTrue(categories_txt.exists()) with mock.patch('sys.argv', ['fdroid update', '--delete-unknown', '--nosign']): fdroidserver.update.main() self.assertFalse(categories_txt.exists()) def test_no_blank_auto_defined_categories(self): """When no app has Categories, there should be no definitions in the repo.""" os.chdir(self.testdir) os.mkdir('metadata') os.mkdir('repo') fdroidserver.common.write_config_file( 'repo_pubkey: ffffffffffffffffffffffffffffffffffffffff\n' ) testapk = os.path.join('repo', 'com.politedroid_6.apk') shutil.copy(basedir / testapk, testapk) Path('metadata/com.politedroid.yml').write_text('Name: Polite') with mock.patch('sys.argv', ['fdroid update', '--delete-unknown', '--nosign']): fdroidserver.update.main() with open('repo/index-v2.json') as fp: index = json.load(fp) self.assertNotIn(CATEGORIES_CONFIG_NAME, index['repo']) def test_auto_defined_categories(self): """Repos that don't define categories in config/ should use auto-generated.""" os.chdir(self.testdir) os.mkdir('metadata') os.mkdir('repo') fdroidserver.common.write_config_file( 'repo_pubkey: ffffffffffffffffffffffffffffffffffffffff\n' ) testapk = os.path.join('repo', 'com.politedroid_6.apk') shutil.copy(basedir / testapk, testapk) Path('metadata/com.politedroid.yml').write_text('Categories: [Time]') with mock.patch('sys.argv', ['fdroid update', '--delete-unknown', '--nosign']): fdroidserver.update.main() with open('repo/index-v2.json') as fp: index = json.load(fp) self.assertEqual( {'Time': {'name': {'en-US': 'Time'}}}, index['repo'][CATEGORIES_CONFIG_NAME], ) def test_auto_defined_categories_two_apps(self): """Repos that don't define categories in config/ should use auto-generated.""" os.chdir(self.testdir) os.mkdir('metadata') os.mkdir('repo') fdroidserver.common.write_config_file( 'repo_pubkey: ffffffffffffffffffffffffffffffffffffffff\n' ) testapk = os.path.join('repo', 'com.politedroid_6.apk') shutil.copy(basedir / testapk, testapk) Path('metadata/com.politedroid.yml').write_text('Categories: [bar]') testapk = os.path.join('repo', 'souch.smsbypass_9.apk') shutil.copy(basedir / testapk, testapk) Path('metadata/souch.smsbypass.yml').write_text('Categories: [foo, bar]') with mock.patch('sys.argv', ['fdroid update', '--delete-unknown', '--nosign']): fdroidserver.update.main() with open('repo/index-v2.json') as fp: index = json.load(fp) self.assertEqual( {'bar': {'name': {'en-US': 'bar'}}, 'foo': {'name': {'en-US': 'foo'}}}, index['repo'][CATEGORIES_CONFIG_NAME], ) def test_auto_defined_categories_mix_into_config_categories(self): """Repos that don't define all categories in config/ also use auto-generated.""" os.chdir(self.testdir) os.mkdir('config') Path('config/categories.yml').write_text('System: {name: System Apps}') os.mkdir('metadata') os.mkdir('repo') fdroidserver.common.write_config_file( 'repo_pubkey: ffffffffffffffffffffffffffffffffffffffff\n' ) testapk = os.path.join('repo', 'com.politedroid_6.apk') shutil.copy(basedir / testapk, testapk) Path('metadata/com.politedroid.yml').write_text('Categories: [Time]') testapk = os.path.join('repo', 'souch.smsbypass_9.apk') shutil.copy(basedir / testapk, testapk) Path('metadata/souch.smsbypass.yml').write_text('Categories: [System, Time]') with mock.patch('sys.argv', ['fdroid update', '--delete-unknown', '--nosign']): fdroidserver.update.main() with open('repo/index-v2.json') as fp: index = json.load(fp) self.assertEqual( { 'System': {'name': {'en-US': 'System Apps'}}, 'Time': {'name': {'en-US': 'Time'}}, }, index['repo'][CATEGORIES_CONFIG_NAME], ) def test_empty_categories_not_in_index(self): """A category with no apps should be ignored, even if defined in config.""" os.chdir(self.testdir) os.mkdir('config') Path('config/categories.yml').write_text('System: {name: S}\nTime: {name: T}\n') os.mkdir('metadata') os.mkdir('repo') fdroidserver.common.write_config_file( 'repo_pubkey: ffffffffffffffffffffffffffffffffffffffff\n' ) testapk = os.path.join('repo', 'com.politedroid_6.apk') shutil.copy(basedir / testapk, testapk) Path('metadata/com.politedroid.yml').write_text('Categories: [Time]') with mock.patch('sys.argv', ['fdroid update', '--delete-unknown', '--nosign']): fdroidserver.update.main() with open('repo/index-v2.json') as fp: index = json.load(fp) self.assertEqual( {'Time': {'name': {'en-US': 'T'}}}, index['repo'][CATEGORIES_CONFIG_NAME], ) class TestParseIpa(unittest.TestCase): def test_parse_ipa(self): self.maxDiff = None try: import biplist # Fedora does not have a biplist package biplist # silence the linters except ImportError as e: self.skipTest(str(e)) ipa_path = os.path.join(basedir, 'com.fake.IpaApp_1000000000001.ipa') result = fdroidserver.update.parse_ipa(ipa_path, 'fake_size', 'fake_sha') self.assertDictEqual( result, { 'apkName': 'com.fake.IpaApp_1000000000001.ipa', 'hash': 'fake_sha', 'hashType': 'sha256', 'packageName': 'org.onionshare.OnionShare', 'size': 'fake_size', 'versionCode': 1000000000001, 'versionName': '1.0.1', 'ipa_DTPlatformVersion': '16.4', 'ipa_MinimumOSVersion': '15.0', 'ipa_entitlements': set(), 'ipa_permissions': { 'NSCameraUsageDescription': 'Please allow access to your ' 'camera, if you want to ' 'create photos or videos for ' 'direct sharing.', 'NSMicrophoneUsageDescription': 'Please allow access to ' 'your microphone, if you ' 'want to create videos ' 'for direct sharing.', 'NSPhotoLibraryUsageDescription': 'Please allow access to ' 'your photo library, if ' 'you want to share ' 'photos.', }, 'name': 'OnionShare', }, ) class TestUpdateVersionStringToInt(unittest.TestCase): def test_version_string_to_int(self): self.assertEqual( fdroidserver.update.version_string_to_int("1.2.3"), 1000002000003 ) self.assertEqual(fdroidserver.update.version_string_to_int("0.0.0003"), 3) self.assertEqual(fdroidserver.update.version_string_to_int("0.0.0"), 0) self.assertEqual( fdroidserver.update.version_string_to_int("4321.321.21"), 4321000321000021 ) self.assertEqual( fdroidserver.update.version_string_to_int("18446744.073709.551615"), 18446744073709551615, ) def test_version_string_to_int_value_errors(self): with self.assertRaises(ValueError): fdroidserver.update.version_string_to_int("1.2.3a") with self.assertRaises(ValueError): fdroidserver.update.version_string_to_int("asdfasdf") with self.assertRaises(ValueError): fdroidserver.update.version_string_to_int("1.2.-3") with self.assertRaises(ValueError): fdroidserver.update.version_string_to_int("-1.2.-3") with self.assertRaises(ValueError): fdroidserver.update.version_string_to_int("0.0.0x3") class TestScanRepoForIpas(unittest.TestCase): def test_scan_repo_for_ipas_no_cache(self): self.maxDiff = None with mkdtemp() as tmpdir: os.chdir(tmpdir) os.mkdir("repo") with open('repo/abc.Def_123.ipa', 'w') as f: f.write('abc') with open('repo/xyz.XXX_123.ipa', 'w') as f: f.write('xyz') apkcache = mock.MagicMock() repodir = "repo" knownapks = mock.MagicMock() def mocked_parse(p, s, c): # pylint: disable=unused-argument return {'packageName': 'abc' if 'abc' in p else 'xyz'} with mock.patch('fdroidserver.update.parse_ipa', mocked_parse): ipas, checkchanged = fdroidserver.update.scan_repo_for_ipas( apkcache, repodir, knownapks ) self.assertEqual(checkchanged, True) self.assertEqual(len(ipas), 2) package_names_in_ipas = [x['packageName'] for x in ipas] self.assertTrue('abc' in package_names_in_ipas) self.assertTrue('xyz' in package_names_in_ipas) apkcache_setter_package_name = [ x.args[1]['packageName'] for x in apkcache.__setitem__.mock_calls ] self.assertTrue('abc' in apkcache_setter_package_name) self.assertTrue('xyz' in apkcache_setter_package_name) self.assertEqual(apkcache.__setitem__.call_count, 2) knownapks.recordapk.call_count = 2 self.assertTrue( unittest.mock.call('abc.Def_123.ipa') in knownapks.recordapk.mock_calls ) self.assertTrue( unittest.mock.call('xyz.XXX_123.ipa') in knownapks.recordapk.mock_calls ) class TestParseIosScreenShotName(unittest.TestCase): def setUp(self): self.maxDiff = None def test_parse_ios_screenshot_name_atforamt_iphone8(self): self.assertEqual( fdroidserver.update.parse_ios_screenshot_name(Path("iPhone 8+ @ iOS 16-1.png")), ("phoneScreenshots", "iPhone 8+", "iOS 16",), ) def test_parse_ios_screenshot_name_atforamt_ipad13(self): self.assertEqual( fdroidserver.update.parse_ios_screenshot_name(Path("iPad Pro 12.9\" 2gen @ iOS 16-1.png")), ("tenInchScreenshots", "iPad Pro 12.9\" 2gen", "iOS 16",), ) def test_parse_ios_screenshot_name_underscoreforamt_ipad(self): self.assertEqual( fdroidserver.update.parse_ios_screenshot_name(Path("1_ipadPro129_1.1.png")), ("tenInchScreenshots", "ipadpro129", "unknown",), ) def test_parse_ios_screenshot_name_underscoreforamt_iphone(self): self.assertEqual( fdroidserver.update.parse_ios_screenshot_name(Path("1_iphone6Plus_1.1.png")), ("phoneScreenshots", "iphone6plus", "unknown",), ) class TestInsertLocalizedIosAppMetadata(unittest.TestCase): def test_insert_localized_ios_app_metadata(self): self.maxDiff = None self.apps_with_packages = { "org.fake": {} } def _mock_discover(fastlane_dir): self.assertEqual( fastlane_dir, Path('build/org.fake/fastlane'), ) return {"fake screenshots": "fake"} def _mock_copy(screenshots, package_name): self.assertEqual(screenshots, {"fake screenshots": "fake"}) self.assertEqual(package_name, "org.fake") with mock.patch('fdroidserver.update.discover_ios_screenshots', _mock_discover): self.set_localized_mock = mock.Mock() with mock.patch('fdroidserver.update.copy_ios_screenshots_to_repo', _mock_copy): with mock.patch("fdroidserver.update._set_localized_text_entry", self.set_localized_mock): return fdroidserver.update.insert_localized_ios_app_metadata( self.apps_with_packages ) self.assertListEqual( self.set_localized_mock.call_args_list, [ mock.call({}, 'en-US', 'name', Path('build/org.fake/fastlane/metadata/en-US/name.txt')), mock.call({}, 'en-US', 'summary', Path('build/org.fake/fastlane/metadata/en-US/subtitle.txt')), mock.call({}, 'en-US', 'description', Path('build/org.fake/fastlane/metadata/en-US/description.txt')), mock.call({}, 'de-DE', 'name', Path('build/org.fake/fastlane/metadata/de-DE/name.txt')), mock.call({}, 'de-DE', 'summary', Path('build/org.fake/fastlane/metadata/de-DE/subtitle.txt')), mock.call({}, 'de-DE', 'description', Path('build/org.fake/fastlane/metadata/de-DE/description.txt')), ], ) class TestDiscoverIosScreenshots(unittest.TestCase): def test_discover_ios_screenshots(self): self.maxDiff = None with mkdtemp() as fastlane_dir: fastlane_dir = Path(fastlane_dir) (fastlane_dir / "screenshots/en-US").mkdir(parents=True) with open(fastlane_dir / "screenshots/en-US/iPhone 8+ @ iOS 16-1.png", 'w') as f: f.write("1") with open(fastlane_dir / "screenshots/en-US/iPad Pro 12.9\" 2gen @ iOS 16-1.png", "w") as f: f.write("2") with open(fastlane_dir / "screenshots/en-US/iPad Pro 12.9\" 2gen @ iOS 16-2.png", "w") as f: f.write("3") (fastlane_dir / "screenshots/de-DE").mkdir(parents=True) with open(fastlane_dir / "screenshots/de-DE/1_ipadPro129_1.1.png", "w") as f: f.write("4") screenshots = fdroidserver.update.discover_ios_screenshots(fastlane_dir) self.assertDictEqual( screenshots, { "en-US": { "phoneScreenshots": [ fastlane_dir / "screenshots/en-US/iPhone 8+ @ iOS 16-1.png", ], "tenInchScreenshots": [ fastlane_dir / "screenshots/en-US/iPad Pro 12.9\" 2gen @ iOS 16-1.png", fastlane_dir / "screenshots/en-US/iPad Pro 12.9\" 2gen @ iOS 16-2.png", ], }, "de-DE": { "tenInchScreenshots": [ fastlane_dir / "screenshots/de-DE/1_ipadPro129_1.1.png", ], }, }, ) class TestCopyIosScreenshotsToRepo(unittest.TestCase): def setUp(self): self._td = mkdtemp() os.chdir(self._td.name) def tearDown(self): os.chdir(basedir) self._td.cleanup() def test_copy_ios_screenshots_to_repo(self): self.maxDiff = None screenshot_dir_en = Path("build/org.fake/fastlane/screenshots/en-US") s1 = screenshot_dir_en / "iPhone 8+ @ iOS 16-1.png" s2 = screenshot_dir_en / "iPad Pro 12.9\" 2gen @ iOS 16-1.png" s3 = screenshot_dir_en / "iPad Pro 12.9\" 2gen @ iOS 16-2.png" screenshot_dir_de = Path("build/org.fake/fastlane/screenshots/de-DE") s4 = screenshot_dir_de / "1_ipadPro129_1.1.png" cmock = mock.Mock() with mock.patch("fdroidserver.update._strip_and_copy_image", cmock): fdroidserver.update.copy_ios_screenshots_to_repo( { "en-US": { "phoneScreenshots": [s1], "tenInchScreenshots": [s2, s3], }, "de-DE": { "tenInchScreenshots": [s4], }, }, "org.fake", ) self.assertListEqual( cmock.call_args_list, [ mock.call( 'build/org.fake/fastlane/screenshots/en-US/iPhone 8+ @ iOS 16-1.png', 'repo/org.fake/en-US/phoneScreenshots/iPhone_8+_@_iOS_16-1.png', ), mock.call( 'build/org.fake/fastlane/screenshots/en-US/iPad Pro 12.9" 2gen @ iOS 16-1.png', 'repo/org.fake/en-US/tenInchScreenshots/iPad_Pro_12.9"_2gen_@_iOS_16-1.png', ), mock.call( 'build/org.fake/fastlane/screenshots/en-US/iPad Pro 12.9" 2gen @ iOS 16-2.png', 'repo/org.fake/en-US/tenInchScreenshots/iPad_Pro_12.9"_2gen_@_iOS_16-2.png', ), mock.call( 'build/org.fake/fastlane/screenshots/de-DE/1_ipadPro129_1.1.png', 'repo/org.fake/de-DE/tenInchScreenshots/1_ipadPro129_1.1.png', ), ], ) class TestGetIpaIcon(unittest.TestCase): def test_get_ipa_icon(self): self.maxDiff = None with mkdtemp() as tmpdir: tmpdir = Path(tmpdir) (tmpdir / 'OnionBrowser.xcodeproj').mkdir() with open(tmpdir / 'OnionBrowser.xcodeproj/project.pbxproj', "w") as f: f.write("") icondir = tmpdir / "fake_icon.appiconset" icondir.mkdir() with open(icondir / "Contents.json", "w", encoding="utf-8") as f: f.write(""" {"images": [ {"scale": "2x", "size": "128x128", "filename": "nope"}, {"scale": "1x", "size": "512x512", "filename": "nope"}, {"scale": "1x", "size": "16x16", "filename": "nope"}, {"scale": "1x", "size": "32x32", "filename": "yep"} ]} """) pfp = mock.Mock(return_value="fake_icon") with mock.patch("fdroidserver.update._parse_from_pbxproj", pfp): p = fdroidserver.update._get_ipa_icon(tmpdir) self.assertEqual(str(icondir / "yep"), p) class TestParseFromPbxproj(unittest.TestCase): def test_parse_from_pbxproj(self): self.maxDiff = None with mkdtemp() as tmpdir: with open(Path(tmpdir) / "asdf.pbxproj", 'w', encoding="utf-8") as f: f.write(""" 230jfaod=flc' ASSETCATALOG_COMPILER_APPICON_NAME = MyIcon; cm opa1c p[m """) v = fdroidserver.update._parse_from_pbxproj( Path(tmpdir) / "asdf.pbxproj", "ASSETCATALOG_COMPILER_APPICON_NAME" ) self.assertEqual(v, "MyIcon") ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742812298.0 fdroidserver-2.4.0/tests/test_vcs.py0000755000175000017500000000456314770232212016300 0ustar00hanshans#!/usr/bin/env python3 import os import unittest from git import Repo import fdroidserver.common import fdroidserver.metadata from .shared_test_code import mkdtemp, VerboseFalseOptions class VCSTest(unittest.TestCase): """For some reason the VCS classes are in fdroidserver/common.py""" def setUp(self): self._td = mkdtemp() os.chdir(self._td.name) def tearDown(self): self._td.cleanup() def test_remote_set_head_can_fail(self): # First create an upstream repo with one commit upstream_repo = Repo.init("upstream_repo") with open(upstream_repo.working_dir + "/file", 'w') as f: f.write("Hello World!") upstream_repo.index.add([upstream_repo.working_dir + "/file"]) upstream_repo.index.commit("initial commit") commitid = upstream_repo.head.commit.hexsha # Now clone it once manually, like gitlab runner gitlab-runner sets up a repo during CI clone1 = Repo.init("clone1") clone1.create_remote("upstream", "file://" + upstream_repo.working_dir) clone1.remote("upstream").fetch() clone1.head.reference = clone1.commit(commitid) clone1.head.reset(index=True, working_tree=True) self.assertTrue(clone1.head.is_detached) # and now we want to use this clone as a source repo for fdroid build config = {} os.mkdir("build") config['sdk_path'] = 'MOCKPATH' config['ndk_paths'] = {'r10d': os.getenv('ANDROID_NDK_HOME')} config['java_paths'] = {'fake': 'fake'} fdroidserver.common.config = config app = fdroidserver.metadata.App() app.RepoType = 'git' app.Repo = clone1.working_dir app.id = 'com.gpl.rpg.AndorsTrail' build = fdroidserver.metadata.Build() build.commit = commitid build.androidupdate = ['no'] vcs, build_dir = fdroidserver.common.setup_vcs(app) # force an init of the repo, the remote head error only occurs on the second gotorevision call fdroidserver.common.options = VerboseFalseOptions vcs.gotorevision(build.commit) fdroidserver.common.prepare_source( vcs, app, build, build_dir=build_dir, srclib_dir="ignore", extlib_dir="ignore", ) self.assertTrue(os.path.isfile("build/com.gpl.rpg.AndorsTrail/file")) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/tests/test_verify.py0000755000175000017500000001053214770502071017005 0ustar00hanshans#!/usr/bin/env python3 import json import os import shutil import sys import tempfile import unittest from pathlib import Path from unittest.mock import patch from fdroidserver import verify TEST_APP_ENTRY = { "1539780240.3885746": { "local": { "file": "unsigned/com.politedroid_6.apk", "packageName": "com.politedroid", "sha256": "70c2f776a2bac38a58a7d521f96ee0414c6f0fb1de973c3ca8b10862a009247d", "timestamp": 1234567.8900000, "versionCode": "6", "versionName": "1.5", }, "remote": { "file": "tmp/com.politedroid_6.apk", "packageName": "com.politedroid", "sha256": "70c2f776a2bac38a58a7d521f96ee0414c6f0fb1de973c3ca8b10862a009247d", "timestamp": 1234567.8900000, "versionCode": "6", "versionName": "1.5", }, "url": "https://f-droid.org/repo/com.politedroid_6.apk", "verified": True, } } basedir = Path(__file__).parent class VerifyTest(unittest.TestCase): def setUp(self): self.tempdir = tempfile.TemporaryDirectory() os.chdir(self.tempdir.name) self.repodir = Path('repo') self.repodir.mkdir() self.apk_reports_json = basedir / 'org.fdroid.fdroid_1019051.apk.json' def tearDown(self): self.tempdir.cleanup() def test_get_verified_json_creation(self): self.assertEqual({'packages': {}}, verify.get_verified_json('does-not-exist')) def test_get_verified_json_existing(self): f = 'verified.json' reports = {'packages': {'placeholder': {}}} with open(f, 'w') as fp: json.dump(reports, fp) self.assertEqual(reports, verify.get_verified_json(f)) def test_get_verified_json_pull_in_one_report(self): shutil.copy(self.apk_reports_json, self.tempdir.name) with open(self.apk_reports_json) as fp: reports = json.load(fp) self.assertEqual( {'packages': {'org.fdroid.fdroid': [reports['1708238023.6572325']]}}, verify.get_verified_json('does-not-exist'), ) def test_get_verified_json_ignore_corrupt(self): f = 'verified.json' with open(f, 'w') as fp: fp.write("""{"packages": {"placeholder": {""") shutil.copy(self.apk_reports_json, self.tempdir.name) with open(self.apk_reports_json) as fp: reports = json.load(fp) self.assertEqual( {'packages': {'org.fdroid.fdroid': [reports['1708238023.6572325']]}}, verify.get_verified_json(f), ) def test_get_verified_json_ignore_apk_reports(self): """When an intact verified.json exists, it should ignore the .apk.json reports.""" f = 'verified.json' placeholder = {'packages': {'placeholder': {}}} with open(f, 'w') as fp: json.dump(placeholder, fp) shutil.copy(self.apk_reports_json, self.tempdir.name) with open(self.apk_reports_json) as fp: json.load(fp) self.assertEqual(placeholder, verify.get_verified_json(f)) @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') @patch('fdroidserver.common.sha256sum') def test_write_json_report(self, sha256sum): sha256sum.return_value = ( '70c2f776a2bac38a58a7d521f96ee0414c6f0fb1de973c3ca8b10862a009247d' ) os.mkdir('tmp') os.mkdir('unsigned') verified_json = Path('unsigned/verified.json') packageName = 'com.politedroid' apk_name = packageName + '_6.apk' remote_apk = 'tmp/' + apk_name unsigned_apk = 'unsigned/' + apk_name # TODO common.use apk_strip_v1_signatures() on unsigned_apk shutil.copy(basedir / 'repo' / apk_name, remote_apk) shutil.copy(basedir / 'repo' / apk_name, unsigned_apk) url = TEST_APP_ENTRY['1539780240.3885746']['url'] self.assertFalse(verified_json.exists()) verify.write_json_report(url, remote_apk, unsigned_apk, {}) self.assertTrue(verified_json.exists()) # smoke check status JSON with verified_json.open() as fp: firstpass = json.load(fp) verify.write_json_report(url, remote_apk, unsigned_apk, {}) with verified_json.open() as fp: secondpass = json.load(fp) self.assertEqual(firstpass, secondpass) ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-2/0000755000175000017500000000000014770510164015765 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/triple-t-2/build/0000755000175000017500000000000014770510164017064 5ustar00hanshans././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.360188 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/0000755000175000017500000000000014770510164022567 5ustar00hanshans././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.360188 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/0000755000175000017500000000000014770510164023347 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/.gitignore0000644000175000017500000000000714717152071025334 0ustar00hanshans/build ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/build.gradle0000644000175000017500000001257014717152071025633 0ustar00hanshansplugins { id("com.android.application") id("com.github.triplet.play") version "2.0.0" } def isCi = "true" == System.getenv("CI") def preDexEnabled = "true" == System.getProperty("pre-dex", "true") if (project.file('../PiwigoSigning.properties').exists()) { Properties props = new Properties() props.load(new FileInputStream(file('../PiwigoSigning.properties'))) android { signingConfigs { release { storeFile file("../piwigo_android_keystore.jks") storePassword props['keystore.password'] keyAlias 'publishing' keyPassword props['key.password'] } localRelease { storeFile file("${System.properties['user.home']}${File.separator}/.android_keystore_default") storePassword props['keystore_default.password'] keyAlias 'defaultRelease' keyPassword props['key_default.password'] } } buildTypes { release { signingConfig signingConfigs.release } localRelease { signingConfig signingConfigs.localRelease } } } play { defaultToAppBundles = true track = 'beta' } } android { compileSdkVersion 29 defaultConfig { applicationId "org.piwigo.android" minSdkVersion 16 targetSdkVersion 29 versionCode 95 versionName "0.9.5-beta" multiDexEnabled true } buildTypes { debug { applicationIdSuffix ".debug" versionNameSuffix "-debug" } release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } flavorDimensions "default" compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } lintOptions { disable 'InvalidPackage' abortOnError false } dexOptions { preDexLibraries = preDexEnabled && !isCi } dataBinding { enabled = true } testOptions { unitTests { returnDefaultValues = true includeAndroidResources = true } } /* Triple-T GPP is applied as plugin in all cases, so we need to configure it always */ play { serviceAccountCredentials = file("../upload_key.json") } } def daggerVersion = '2.23.2' def okhttpVersion = '3.11.0' def retrofitVersion = '2.6.1' def assertjVersion = '1.2.0' def acraVersion = '5.4.0' dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.annotation:annotation:1.1.0' implementation 'com.google.android.material:material:1.0.0' implementation 'androidx.cardview:cardview:1.0.0' implementation 'com.android.support:multidex:1.0.3' implementation "com.google.dagger:dagger:${daggerVersion}" implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0' annotationProcessor 'androidx.lifecycle:lifecycle-compiler:2.1.0' annotationProcessor "com.google.dagger:dagger-compiler:${daggerVersion}" implementation "com.google.dagger:dagger-android:${daggerVersion}" implementation "com.google.dagger:dagger-android-support:${daggerVersion}" annotationProcessor "com.google.dagger:dagger-android-processor:${daggerVersion}" implementation "com.squareup.okhttp3:okhttp:${okhttpVersion}" implementation "com.squareup.okhttp3:logging-interceptor:${okhttpVersion}" implementation "com.squareup.retrofit2:retrofit:${retrofitVersion}" implementation "com.squareup.retrofit2:converter-gson:${retrofitVersion}" implementation "com.squareup.retrofit2:adapter-rxjava:${retrofitVersion}" implementation 'com.squareup.picasso:picasso:2.5.2' implementation 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.1.0' implementation 'io.reactivex:rxjava:1.3.2' implementation 'io.reactivex:rxandroid:1.2.1' implementation 'com.google.guava:guava:24.1-jre' annotationProcessor 'com.google.guava:guava:24.1-jre' implementation 'org.apache.commons:commons-lang3:3.8.1' implementation "ch.acra:acra-mail:$acraVersion" implementation "ch.acra:acra-dialog:$acraVersion" implementation 'com.github.jorgecastilloprz:fabprogresscircle:1.01@aar' implementation "com.leinardi.android:speed-dial:3.0.0" implementation 'com.github.tingyik90:snackprogressbar:6.1.1' implementation 'org.greenrobot:eventbus:3.1.1' /* Don't forget to add to string libraries if you add a library here. */ debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.0-beta-3' testImplementation 'junit:junit:4.12' testImplementation 'org.robolectric:robolectric:4.3' testImplementation("com.squareup.assertj:assertj-android:${assertjVersion}") { exclude group: 'com.android.support' } testAnnotationProcessor "com.google.dagger:dagger-compiler:${daggerVersion}" testImplementation 'androidx.arch.core:core-testing:2.1.0' testImplementation 'org.mockito:mockito-core:2.19.0' testImplementation 'com.google.guava:guava:24.1-jre' testImplementation 'androidx.appcompat:appcompat:1.1.0' testAnnotationProcessor 'com.google.guava:guava:24.1-jre' testImplementation 'com.google.code.findbugs:jsr305:3.0.2' } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/0000755000175000017500000000000014770510164024136 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/debug/0000755000175000017500000000000014770510164025224 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/debug/res/0000755000175000017500000000000014770510164026015 5ustar00hanshans././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.360188 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/debug/res/values/0000755000175000017500000000000014770510164027314 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/debug/res/values/constants.xml0000644000175000017500000000016214717152071032051 0ustar00hanshans org.piwigo.account_debug ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/debug/res/values/strings.xml0000644000175000017500000000014014717152071031522 0ustar00hanshans Piwigo Debug ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/0000755000175000017500000000000014770510164025062 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/java/0000755000175000017500000000000014770510164026003 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/java/org/0000755000175000017500000000000014770510164026572 5ustar00hanshans././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.360188 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/java/org/piwigo/0000755000175000017500000000000014770510164030070 5ustar00hanshans././@PaxHeader0000000000000000000000000000022000000000000010207 xustar00122 path=fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/java/org/piwigo/PiwigoApplication.java 22 mtime=1732039737.0 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/java/org/piwigo/PiwigoAppl0000644000175000017500000000773514717152071032102 0ustar00hanshans/* * Piwigo for Android * Copyright (C) 2016-2017 Piwigo Team http://piwigo.org * Copyright (C) 2018 Raphael Mack http://www.raphael-mack.de * * 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 . */ package org.piwigo; import android.app.Activity; import android.app.Application; import android.app.Service; import android.content.Context; import androidx.databinding.DataBindingUtil; import androidx.multidex.MultiDex; import org.acra.ACRA; import org.acra.ReportField; import org.acra.annotation.AcraCore; import org.acra.annotation.AcraDialog; import org.acra.annotation.AcraMailSender; import org.acra.data.StringFormat; import org.piwigo.helper.DialogHelper; import org.piwigo.helper.NetworkHelper; import org.piwigo.helper.NotificationHelper; import org.piwigo.internal.di.component.ApplicationComponent; import org.piwigo.internal.di.component.BindingComponent; import org.piwigo.internal.di.component.DaggerApplicationComponent; import org.piwigo.internal.di.component.DaggerBindingComponent; import org.piwigo.internal.di.module.ApplicationModule; import javax.inject.Inject; import dagger.android.AndroidInjector; import dagger.android.DispatchingAndroidInjector; import dagger.android.HasActivityInjector; import dagger.android.HasServiceInjector; @AcraCore(reportContent = { ReportField.APP_VERSION_CODE, ReportField.APP_VERSION_NAME, ReportField.USER_COMMENT, ReportField.SHARED_PREFERENCES, ReportField.ANDROID_VERSION, ReportField.CUSTOM_DATA, ReportField.STACK_TRACE, ReportField.BUILD, ReportField.BUILD_CONFIG, ReportField.CRASH_CONFIGURATION, ReportField.DISPLAY }, alsoReportToAndroidFramework = true, reportFormat = StringFormat.KEY_VALUE_LIST ) @AcraMailSender(mailTo = "android@piwigo.org") @AcraDialog(resCommentPrompt = R.string.crash_dialog_comment_prompt, resText = R.string.crash_dialog_text) public class PiwigoApplication extends Application implements HasActivityInjector, HasServiceInjector { @Inject DispatchingAndroidInjector dispatchingAndroidInjector; @Inject DispatchingAndroidInjector dispatchingAndroidServiceInjector; private ApplicationComponent applicationComponent; @Override public void onCreate() { super.onCreate(); new NetworkHelper(); new NotificationHelper(getApplicationContext()); new DialogHelper() ; initializeDependencyInjection(); } @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(base); ACRA.init(this); } @Override public AndroidInjector activityInjector() { return dispatchingAndroidInjector; } private void initializeDependencyInjection() { applicationComponent = DaggerApplicationComponent.builder() .applicationModule(new ApplicationModule(this)) .build(); applicationComponent.inject(this); BindingComponent bindingComponent = DaggerBindingComponent.builder() .applicationComponent(applicationComponent) .build(); DataBindingUtil.setDefaultComponent(bindingComponent); } /** * Returns an {@link AndroidInjector} of {@link Service}s. */ @Override public AndroidInjector serviceInjector() { return dispatchingAndroidServiceInjector; } }././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.360188 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/0000755000175000017500000000000014770510164026027 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/contact-email.txt0000644000175000017500000000002314717152071031303 0ustar00hanshansandroid@piwigo.org ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/contact-website.txt0000644000175000017500000000002714717152071031662 0ustar00hanshanshttps://www.piwigo.org ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/default-language.txt0000644000175000017500000000000614717152071031771 0ustar00hanshansen-US ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/0000755000175000017500000000000014770510164027663 5ustar00hanshans././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.360188 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/de-DE/0000755000175000017500000000000014770510164030541 5ustar00hanshans././@PaxHeader0000000000000000000000000000022200000000000010211 xustar00124 path=fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/de-DE/full-description.txt 22 mtime=1732039737.0 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/de-DE/full-d0000644000175000017500000000100614717152071031644 0ustar00hanshansPiwigo ist eine Android-APP für die freie Open Source-Foto-Hosting-Plattform Piwigo. Mit dieser App können Sie sich selbst gehostete Galerie ansehen und Fotos von Ihrem Smart-Gerät hochladen. Piwigo wird von einer aktiven Community von Benutzern und Entwicklern bereitgestellt. Piwigo ermöglicht eine eigene Fotogalerie im Internet zu erstellen und bietet viele leistungsstarke Funktionen wie Alben, Tags, Geolokalisierung, viele Anpassungsstufen, Upload von Besuchern, Privatsphäre, Kalender oder Statistiken. ././@PaxHeader0000000000000000000000000000022300000000000010212 xustar00125 path=fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/de-DE/short-description.txt 22 mtime=1732039737.0 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/de-DE/short-0000644000175000017500000000007214717152071031677 0ustar00hanshansGreifen Sie auf die Bilder Ihrer Piwigo-Foto-Gallerie zu. ././@PaxHeader0000000000000000000000000000020700000000000010214 xustar00113 path=fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/de-DE/title.txt 22 mtime=1732039737.0 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/de-DE/title.0000644000175000017500000000000714717152071031660 0ustar00hanshansPiwigo ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.360188 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/0000755000175000017500000000000014770510164030612 5ustar00hanshans././@PaxHeader0000000000000000000000000000022200000000000010211 xustar00124 path=fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/full-description.txt 22 mtime=1732039737.0 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/full-d0000644000175000017500000000073614717152071031726 0ustar00hanshansPiwigo is a native Android Application for the free and open source photo hosting platform Piwigo. With this app you can browse you self-hosted gallery and upload photos from your smart device. Piwigo is built by an active community of users and developers. Piwigo empowers you to create your own photo gallery on the web and includes many powerful features such as albums, tags, geolocation, many levels of customization, upload by visitors, privacy, calendar or statistics. ././@PaxHeader0000000000000000000000000000021500000000000010213 xustar00113 path=fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphics/ 28 mtime=1742901364.2161863 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphi0000755000175000017500000000000014770510164032005 5ustar00hanshans././@PaxHeader0000000000000000000000000000023400000000000010214 xustar00129 path=fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphics/feature-graphic/ 27 mtime=1742901364.360188 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphi0000755000175000017500000000000014770510164032005 5ustar00hanshans././@PaxHeader0000000000000000000000000000024600000000000010217 xustar00144 path=fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphics/feature-graphic/piwigo-full.png 22 mtime=1732039737.0 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphi0000644000175000017500000000230514717152071032007 0ustar00hanshansPNG  IHDRdgAMA a cHRMz&u0`:pQ<PLTEwNNNL cNNNNNNNNNNNNNNNNNNNNNNNNwwsjks@轗洈uwNNNNNNNNNNNNNNNNNNNNNNNNDLRa*v@5y+}wwNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNIMP[1wwNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNHMQZ)GwNNNNNNNNNNNNNNNNNNNNNNNNNNNIMPaG/xNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGLQY4?NNNNNNNNNIMP_.5| CCyNNN6HYulur%/vjaОs]xtuwxtrKLM_`bvwtqIIJOQR-/..Νqzt{\1QIN `tRNS(WK D) QEP7. (LfSl^:Z)IuCN#_zxRYg r|{_%tEXtdate:create2019-10-04T10:06:15+02:00M%tEXtdate:modify2019-10-04T10:05:31+02:00<tEXtSoftwarewww.inkscape.org<IENDB`././@PaxHeader0000000000000000000000000000022100000000000010210 xustar00118 path=fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphics/icon/ 27 mtime=1742901364.360188 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphi0000755000175000017500000000000014770510164032005 5ustar00hanshans././@PaxHeader0000000000000000000000000000023300000000000010213 xustar00133 path=fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphics/icon/piwigo-icon.png 22 mtime=1732039737.0 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphi0000644000175000017500000000212614717152071032010 0ustar00hanshansPNG  IHDR ^gAMA a cHRMz&u0`:pQ<PLTEw~zV/  bwtÙtĿywwwwvrptwvwwwwwuxvwwwwwwwwwwwwwwwwtի}#v)KJߋAw wv5ƖкμϱouMṲ̈̀!{}]]]cccjjjlMMMNNNLLLоƖKKK¼>ƗVVV}~~?qXXXwyz &rtvUUVxWɊ_`aYZ[kmnЭw@ӻ~z%v**5tRNSAU%`~'x#!cdM&K bKGD`z pHYs B(xtIME  `LIDAT(c`ؙrprq 0EDą%L-,,%eZdUTml54!ZNN.n^N@:0ig_?C#"cb㜰H{'$&%&';cJ;edf%%%%FdzcI'a..I.-+bseUuVbbrMm]=997465w`SgWpwOo_Vi' 'M, Q$!X #ðg&Ew%tEXtdate:create2019-10-04T10:06:15+02:00M%tEXtdate:modify2019-10-04T10:05:31+02:00<tEXtSoftwarewww.inkscape.org<IENDB`././@PaxHeader0000000000000000000000000000023600000000000010216 xustar00131 path=fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphics/phone-screenshots/ 27 mtime=1742901364.360188 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphi0000755000175000017500000000000014770510164032005 5ustar00hanshans././@PaxHeader0000000000000000000000000000024500000000000010216 xustar00143 path=fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphics/phone-screenshots/01_Login.jpg 22 mtime=1732039737.0 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphi0000644000175000017500000000170414717152071032011 0ustar00hanshansJFIFCC"  + T#QSё!a ?U6Ók͕v=FH}nYsPv5 d75Z̎C"L|;Thvr5nčS>,Kb%GS+m%aw9+řoCİH ZTyc$̞y 1ڡNF0p\YV/տgo/=q>~sN,aVYxSSkw>eXĦRsco"j,Uhyc^BFM%l׃W5-@~W;J23Hi[D|D^# REIy1X;ZL-p5{U0#W{u]tUQWqе,92I>HI]BAz|=- j0HK8]s1۪%뺶3S*ru)Q6& Ʊfb_V=*v&ñ&rG -.jw?::a~>'K?././@PaxHeader0000000000000000000000000000024600000000000010217 xustar00144 path=fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphics/phone-screenshots/02_Albums.jpg 22 mtime=1732039737.0 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphi0000644000175000017500000000212414717152071032006 0ustar00hanshansJFIFCC" *WUX1Aa!'FeCQTUb ?rȝ^v}o[[&v`XN")R.aڱ'B¡1bVBC|*P%uSh.[4R!V9a@QW i7DQ2y\GdQ2hkQlB&,DEV8 ­9 .m6p(!<钕Mu>P<5R \9 ERUr`ֳ[ EDÐW{2ZRuKNq}C?xjhJMx)Z1u'n7Sm  wQҽQjť^XޏcY5wUlDk0%8@&[],7*g]Z׻5-!oiՔȢK%V=c"ɣHqB ]]=}u{\:ӡ nkp,v9hꡚٚ[?- ~G}U>//}ׯ^6Ahzg././@PaxHeader0000000000000000000000000000024600000000000010217 xustar00144 path=fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphics/phone-screenshots/03_Photos.jpg 22 mtime=1732039737.0 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphi0000644000175000017500000000215314717152071032010 0ustar00hanshansJFIFCC" + W!V1 Aa!FUbe%&EQfq ?b7gYn*޶,!eT-~q` 8G$0TNR0BOZW 6I_^GVǂW^z3 G㖄McFB$=EڤOnսt-,,?#[,4^YE=!G N({եz Ci7lHkĺKuSz}2C?pb(3 $ n~: Ūbj^vXl֨5ޚmkX1e%`ַl 䄆ZAI-"{#Em L$dϢRwКm?/g;?~4R>!3]W$=^έMjd&w,ܗ 9J"X9"3[V^빯jgt +pU_U[ 4r-W_L#SisGC'HoL.\kjkU+/]8780rӄ"10A,B$|e$_]QQ=qȵMZd\*+ !:"Ljx0וf9l02! ="'kQ|-t+-XCWƪ3Klc"!$pE CZ P Kk9ԝ^Fĕ:'悯QP7w!]uwK././@PaxHeader0000000000000000000000000000026100000000000010214 xustar00155 path=fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphics/phone-screenshots/04_Albums_horizontal.jpg 22 mtime=1732039737.0 fdroidserver-2.4.0/tests/triple-t-2/build/org.piwigo.android/app/src/main/play/listings/en-US/graphi0000644000175000017500000000203414717152071032006 0ustar00hanshansJFIFCC"  /  679:uwxy*2t!#45qs ?\:Wڪ&M&Rc>ݜ EJHSSWGhͦL+R|FL<[mPpڂGun:@E^ə. "2ՙ-M*^'eg ϻ&\u٢mkJt:%O,rDʄ))#=sTɄ,*S%,ǚ5[HַΆX[Ll@kN*HkKo2FEj&tZs,S,z\f]bdI՚YvChS2L$&6P{*WRqQ+[a=4UqX* Ik>g`V^E*KF%mg%:.>p rP(v%Ԕ߁-W390N 9VbLx.BbJ=^uܥN\ZZ}wʺEϙFUE֚"6,Z˕sVF?B*g;#Q#,EJMJ2!1!+ 4P\Dհ36ǜk;V)~Le[5;qڎ\t*j/+Y+RUޤs5F_&^Oۯk;o؇/2~O#}<?QxC_VbZ &X86 VsΊ%3qژ_B^.l׌@º+P24,9B"/.lN l$;ĥ*R~ FD0 29g$,pֱ,This app has been deprecated in favor of https://f-droid.org/en/packages/com.anysoftkeyboard.languagepack.dutch_oss/
    This is the Dutch language pack for AnySoftKeyboard. It offers an extensive Dutch dictionary and optimised keyboard. In order to use it, first install https://f-droid.org/packages/com.menny.android.anysoftkeyboard – a practical input method for Android smartphones and tablets. The dictionary is based on the word list from Stichting OpenTaal and has the Quality Mark Spelling (Keurmerk Spelling) of the Dutch Language Union (Taalunie). This language pack has been created by Stichting OpenTaal and can be installed by all without any costs. The language-specific files in this language pack have a dual license. Both the BSD 2-Clause License as the Creative Commons, Attribution 4.0 (unported) apply. Please, help us create free and open Dutch writing tools. Donate tax free to our foundation at https://www.opentaal.org/vrienden-van-opentaal RepoType: git Repo: https://github.com/AnySoftKeyboard/AnySoftKeyboard.git Builds: - versionName: '1.0' versionCode: 1 disable: wait for upstream commit: c5efd5986ce9beec299919f7ae9f174abd33b156 gradle: - yes forceversion: true preassemble: - :makeDictionary - versionName: '1.4' versionCode: 5 commit: dutch-1.4 gradle: - yes forceversion: true preassemble: - :makeDictionary - versionName: 4.0.1396 versionCode: 2908 commit: 1.10-r4 subdir: addons/languages/dutch sudo: - apt-get update || apt-get update - apt-get install -t bullseye openjdk-11-jdk-headless openjdk-11-jre-headless - update-alternatives --auto java gradle: - yes output: ../../../outputs/apks/release/addons-languages-*-$$VERCODE$$.apk prebuild: - echo "//gradleVersion = '6.8.3'" | tee build.gradle - sed -i -e "s calculateApplicationId(project) 'com.anysoftkeyboard.languagepack.dutch' " ../../../gradle/apk_module.gradle - sed -i -e '/Data\.versionCode/ c versionCode $$VERCODE$$' -e '/Data\.versionName/ c versionName "$$VERSION$$"' ../../../gradle/versioning_apk.gradle scanignore: - addons/languages/*/pack/dictionary/*.gz ndk: r14b MaintainerNotes: Package ID is now com.anysoftkeyboard.languagepack.dutch_oss AutoUpdateMode: None UpdateCheckMode: None CurrentVersion: 4.0.1396 CurrentVersionCode: 2908 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/triple-t-anysoftkeyboard/metadata/com.menny.android.anysoftkeyboard.yml0000644000175000017500000003557314766514130032077 0ustar00hanshansCategories: - Writing License: Apache-2.0 WebSite: https://anysoftkeyboard.github.io SourceCode: https://github.com/AnySoftKeyboard/AnySoftKeyboard IssueTracker: https://github.com/AnySoftKeyboard/AnySoftKeyboard/issues Translation: https://crowdin.com/project/anysoftkeyboard Changelog: https://github.com/AnySoftKeyboard/AnySoftKeyboard/releases Donate: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=KDYBGNUNMMN94&lc=US&item_name=AnySoftKeyboard AutoName: AnySoftKeyboard RepoType: git Repo: https://github.com/AnySoftKeyboard/AnySoftKeyboard.git Builds: - versionName: '20120528' versionCode: 74 commit: d6c2f7448 srclibs: - AnySoftKeyboard-API@78768bc479 prebuild: sed -i 's@\(android.library.reference.1=\).*@\1$$AnySoftKeyboard-API$$@' project.properties buildjni: - yes ndk: r12b - versionName: 20120814-eye-candy versionCode: 76 disable: doesn't build commit: unknown - see disabled srclibs: - AnySoftKeyboard-API@78768bc479 prebuild: sed -i 's@\(android.library.reference.1=\).*@\1$$AnySoftKeyboard-API$$@' project.properties buildjni: - yes ndk: r12b - versionName: 20130106-eye-candy versionCode: 85 commit: a7723e1db5 srclibs: - AnySoftKeyboard-API@b21d8907 prebuild: - sed -i 's@\(android.library.reference.1=\).*@\1$$AnySoftKeyboard-API$$@' project.properties - rm -rf libs/armeabi*/ libs/x86/ libs/mips/ ant/ keyboard_keystore StoreStuff/ res/raw/words_1.dict - wget https://softkeyboard.googlecode.com/svn-history/r544/trunk/project/dict_creation/makedict_Linux - wget https://github.com/AnySoftKeyboard/AnySoftKeyboardTools/blob/HEAD/makedict/makedict.jar?raw=true -O makedict.jar - chmod +x makedict_Linux - ./makedict_Linux dict/words.xml buildjni: - yes ndk: r12b - versionName: 20130222-skinny-eye-candy versionCode: 95 commit: 50daad0b0a srclibs: - AnySoftKeyboard-API@b21d8907 - AnySoftKeyboardTools@73e9a09496 prebuild: - sed -i 's@\(android.library.reference.1=\).*@\1$$AnySoftKeyboard-API$$@' project.properties - sed -i 's@..\/AnySoftKeyboardTools@$$AnySoftKeyboardTools$$@g' build.xml - rm -rf libs/armeabi*/ libs/x86/ libs/mips/ ant/ keyboard_keystore StoreStuff/ res/raw/words_1.dict buildjni: - yes ndk: r12b - versionName: 20130501-skinny-eye-candy-post-birthday versionCode: 98 commit: 6f51b8a9d srclibs: - AnySoftKeyboard-API@2c864957 - AnySoftKeyboardTools@73e9a09496 prebuild: - sed -i 's@\(android.library.reference.1=\).*@\1$$AnySoftKeyboard-API$$@' project.properties - sed -i 's@..\/AnySoftKeyboardTools@$$AnySoftKeyboardTools$$@g' build.xml - rm -rf libs/armeabi*/ libs/x86/ libs/mips/ ant/ keyboard_keystore StoreStuff/ res/raw/words_1.dict buildjni: - yes ndk: r12b - versionName: '20130528' versionCode: 102 commit: 72fd519 srclibs: - AnySoftKeyboard-API@8d8a958e17 - AnySoftKeyboardTools@73e9a09496 prebuild: - sed -i 's@\(reference.1=\).*@\1$$AnySoftKeyboard-API$$@' project.properties - sed -i 's@..\/AnySoftKeyboardTools@$$AnySoftKeyboardTools$$@g' build.xml - rm -rf libs/armeabi*/ libs/x86/ libs/mips/ ant/ keyboard_keystore StoreStuff/ res/raw/words_1.dict buildjni: - yes ndk: r12b - versionName: '20130709' versionCode: 106 commit: f1ba2de srclibs: - AnySoftKeyboard-API@30851236d7 - AnySoftKeyboardTools@73e9a09496 prebuild: - sed -i 's@\(.1=\).*@\1$$AnySoftKeyboard-API$$@' project.properties - sed -i 's@..\/AnySoftKeyboardTools@$$AnySoftKeyboardTools$$@g' build.xml - rm -rf libs/armeabi*/ libs/x86/ libs/mips/ ant/ keyboard_keystore StoreStuff/ res/raw/words_1.dict buildjni: - yes ndk: r12b - versionName: '20130807' versionCode: 107 disable: not published commit: unknown - see disabled - versionName: '20130919' versionCode: 111 commit: 2a68963f srclibs: - AnySoftKeyboard-API@30851236d7 - AnySoftKeyboardTools@73e9a09496 prebuild: - sed -i 's@\(.1=\).*@\1$$AnySoftKeyboard-API$$@' project.properties - sed -i 's@..\/AnySoftKeyboardTools@$$AnySoftKeyboardTools$$@g' build.xml - rm -rf libs/armeabi*/ libs/x86/ libs/mips/ ant/ keyboard_keystore StoreStuff/ res/raw/words_1.dict buildjni: - yes ndk: r12b - versionName: '20131101' versionCode: 114 disable: no longer uses ant, prebuilts commit: 82538d456f8 srclibs: - AnySoftKeyboard-API@08b452ff4 - AnySoftKeyboardTools@73e9a09496 prebuild: - sed -i 's@\(.1=\).*@\1$$AnySoftKeyboard-API$$@' project.properties - sed -i 's@..\/AnySoftKeyboardTools@$$AnySoftKeyboardTools$$@g' build.xml - rm -rf libs/armeabi*/ libs/x86/ libs/mips/ ant/ keyboard_keystore StoreStuff/ res/raw/words_1.dict buildjni: - yes ndk: r12b - versionName: 1.2.20140705 versionCode: 140 disable: build words dict from source, no idea what version name/code it is commit: 1.5-r4.1 gradle: - yes rm: - res/raw/words_1.dict - versionName: 1.8.84 versionCode: 1409 commit: 1.8-r1 init: sed -i -e '/fabric/d' -e '/canaryCompile/,+2d' build.gradle gradle: - yes rm: - src/main/res/raw/words_1.dict preassemble: - makeEnglishDictionary - versionName: 1.8.133 versionCode: 1458 disable: broken subdir commit: 1.8-r3 subdir: app init: sed -i -e '/fabric/d' -e '/canaryCompile/,+2d' ../build.gradle build.gradle gradle: - yes rm: - app/src/main/res/raw/words_1.dict preassemble: - :makeEnglishDictionary - versionName: 1.8.146 versionCode: 1471 commit: 1.8-r4 subdir: app init: sed -i -e '/fabric/d' -e '/canaryCompile/,+2d' ../build.gradle build.gradle gradle: - yes rm: - app/src/main/res/raw/words_1.dict preassemble: - :makeEnglishDictionary - versionName: 1.8.190 versionCode: 1515 disable: weird version/vc-issue commit: 1.8-r5.1 subdir: app init: sed -i -e '/fabric/d' -e '/canaryCompile/,+2d' ../build.gradle build.gradle gradle: - yes rm: - app/src/main/res/raw/words_1.dict preassemble: - :makeEnglishDictionary - versionName: 1.8.195 versionCode: 1520 commit: 1.8-r5.2 subdir: app init: sed -i -e '/fabric/d' -e '/canaryCompile/,+2d' ../build.gradle build.gradle gradle: - yes rm: - app/src/main/res/raw/words_1.dict preassemble: - :makeEnglishDictionary - versionName: 1.8.253 versionCode: 1578 commit: 1.8-r6 subdir: app init: sed -i -e '/fabric/d' -e '/canaryCompile/,+2d' ../build.gradle build.gradle gradle: - yes forceversion: true rm: - app/src/main/res/raw/words_1.dict prebuild: sed -i -e '/versionCode/d' -e '/versionName/aversionCode $$VERCODE$$' build.gradle preassemble: - :makeEnglishDictionary - versionName: 1.8.329 versionCode: 1654 commit: 1.8-r7 subdir: app init: sed -i -e '/fabric/d' -e '/canaryCompile/,+2d' ../build.gradle build.gradle gradle: - yes forceversion: true rm: - app/src/main/res/raw/words_1.dict prebuild: sed -i -e '/versionCode/d' -e '/versionName/aversionCode $$VERCODE$$' build.gradle preassemble: - :makeEnglishDictionary - versionName: 1.8.401 versionCode: 1726 commit: 1.8-r7.1 subdir: app init: sed -i -e '/fabric/d' -e '/canaryCompile/,+2d' ../build.gradle build.gradle gradle: - yes forceversion: true rm: - app/src/main/res/raw/words_1.dict prebuild: - sed -i -e '/versionCode/d' -e '/versionName/aversionCode $$VERCODE$$' build.gradle - sed -i -e '/crashlytics/,$d' build.gradle preassemble: - :makeEnglishDictionary - versionName: 1.8.503 versionCode: 1828 commit: 1.8-r8 subdir: app init: sed -i -e '/fabric/d' -e '/canaryCompile/,+2d' ../build.gradle build.gradle gradle: - yes forceversion: true rm: - app/src/main/res/raw/words_*.dict prebuild: - sed -i -e '/versionCode/d' -e '/versionName/aversionCode $$VERCODE$$' build.gradle - sed -i -e '/crashlytics/,$d' build.gradle preassemble: - :makeEnglishDictionary - versionName: 1.8.585 versionCode: 1910 commit: 1.8-r9 subdir: app init: sed -i -e '/fabric/d' -e '/canaryCompile/,+2d' ../build.gradle build.gradle gradle: - yes forceversion: true rm: - app/src/main/res/raw/words_*.dict prebuild: - sed -i -e '/versionCode/d' -e '/versionName/aversionCode $$VERCODE$$' build.gradle - sed -i -e '/crashlytics/,$d' build.gradle preassemble: - :makeEnglishDictionary - versionName: 1.8.735 versionCode: 2060 commit: 1.8-r10 subdir: app init: sed -i -e '/fabric/d' -e '/canaryCompile/,+2d' ../build.gradle build.gradle gradle: - yes forceversion: true rm: - app/src/main/res/raw/words_*.dict prebuild: - sed -i -e '/versionCode/d' -e '/versionName/aversionCode $$VERCODE$$' build.gradle - sed -i -e '/crashlytics/,$d' build.gradle preassemble: - :makeEnglishDictionary - versionName: 1.8.844 versionCode: 2169 commit: 1.8-r11 subdir: app init: sed -i -e '/fabric/d' -e '/canaryCompile/,+2d' ../build.gradle build.gradle gradle: - yes forceversion: true rm: - app/src/main/res/raw/words_*.dict prebuild: - sed -i -e '/versionCode/d' -e '/versionName/aversionCode $$VERCODE$$' build.gradle - sed -i -e '/crashlytics/,$d' build.gradle preassemble: - :makeEnglishDictionary - versionName: 1.8.1241 versionCode: 2566 commit: 1.8-r12 subdir: app init: sed -i -e '/fabric/d' -e '/canaryCompile/,+2d' ../build.gradle build.gradle gradle: - yes forceversion: true rm: - app/src/main/res/raw/words_*.dict prebuild: - sed -i -e '/versionCode/d' -e '/versionName/aversionCode $$VERCODE$$' build.gradle - sed -i -e '/crashlytics/,$d' build.gradle preassemble: - :makeEnglishDictionary - versionName: 1.8.1333 versionCode: 2658 commit: 1.8-r12.2 subdir: app init: sed -i -e '/fabric/d' -e '/canaryCompile/,+2d' ../build.gradle build.gradle gradle: - yes forceversion: true rm: - app/src/main/res/raw/words_*.dict prebuild: - sed -i -e '/versionCode/d' -e '/versionName/aversionCode $$VERCODE$$' build.gradle - sed -i -e '/crashlytics/,$d' build.gradle ndk: r11c preassemble: - :makeEnglishDictionary - versionName: 1.9.1117 versionCode: 3692 commit: 1.9-r1 subdir: app init: sed -i -e '/fabric/d' -e '/canaryImplementation/,+2d' ../build.gradle build.gradle gradle: - yes forceversion: true rm: - app/src/main/res/raw/words_*.dict prebuild: - sed -i -e '/versionCode/d' -e '/versionName/aversionCode $$VERCODE$$' -e '/crashlytics/,$d' build.gradle - sed -i -e 's/gradle:3.1.0-alpha06/gradle:3.0.1/' ../build.gradle scandelete: - buildSrc - app/src/debug ndk: r14b preassemble: - :makeEnglishDictionary - versionName: 1.9.1944 versionCode: 4519 commit: 1.9-r3-fdroid subdir: app init: sed -i -e '/fabric/d' -e '/canaryImplementation/d' ../build.gradle build.gradle gradle: - yes forceversion: true rm: - app/src/main/res/raw/words_*.dict prebuild: sed -i -e '/versionCode/d' -e '/versionName/aversionCode $$VERCODE$$' -e '/crashlytics/,$d' build.gradle scandelete: - buildSrc - app/src/debug ndk: r14b preassemble: - :makeEnglishDictionary - versionName: 1.9.2055 versionCode: 4630 commit: 1.9-r4 subdir: app init: sed -i -e '/fabric/d' -e '/canaryImplementation/d' ../build.gradle build.gradle gradle: - yes forceversion: true rm: - app/src/main/res/raw/words_*.dict prebuild: sed -i -e '/versionCode/d' -e '/versionName/aversionCode $$VERCODE$$' -e '/crashlytics/,$d' build.gradle scandelete: - buildSrc - app/src/debug ndk: r14b preassemble: - :makeEnglishDictionary - versionName: 1.9.2445 versionCode: 5020 commit: 1.9-r5.1 subdir: app gradle: - yes forceversion: true rm: - app/src/main/res/raw/words_*.dict prebuild: sed -i -e '/versionCode/d' -e '/versionName/aversionCode $$VERCODE$$' build.gradle scandelete: - buildSrc - app/src/debug ndk: r14b preassemble: - :makeEnglishDictionary - versionName: 1.9.2629 versionCode: 5204 commit: 1.9-r6 subdir: app gradle: - yes forceversion: true prebuild: sed -i -e '/versionCode/d' -e '/versionName/aversionCode $$VERCODE$$' build.gradle scandelete: - buildSrc ndk: r14b - versionName: 1.10.364 versionCode: 5539 commit: 1.10-r1 subdir: app gradle: - yes forceversion: true prebuild: sed -i -e '/versionCode/d' -e '/versionName/aversionCode $$VERCODE$$' build.gradle scandelete: - buildSrc ndk: r14b - versionName: 1.10.606 versionCode: 5781 commit: 1.10-r2 subdir: app gradle: - yes forceversion: true prebuild: sed -i -e '/versionCode/d' -e '/versionName/aversionCode $$VERCODE$$' build.gradle scandelete: - buildSrc ndk: r14b - versionName: 1.10.1109 versionCode: 6279 commit: e57c9cc852aefdc1ff60b024e52d4341337b3df7 subdir: app gradle: - yes forceversion: true prebuild: sed -i -e '/versionCode/d' -e '/versionName/aversionCode $$VERCODE$$' build.gradle scanignore: - buildSrc ndk: r14b gradleprops: - forceVersionBuildCount=4709 - versionName: 1.10.1786 versionCode: 6956 commit: 1.10-r4 subdir: ime/app sudo: - apt-get update || apt-get update - apt-get install -t bullseye openjdk-11-jdk-headless openjdk-11-jre-headless - update-alternatives --auto java gradle: - yes prebuild: - sed -i -e "/EnvKey/ a //gradleVersion = '6.8.3'" ../build.gradle - sed -i -e '/Data\.versionCode/ c versionCode $$VERCODE$$' -e '/Data\.versionName/ c versionName "$$VERSION$$"' ../../gradle/versioning_apk.gradle scanignore: - addons/languages/*/pack/dictionary/*.gz ndk: r14b MaintainerNotes: |- * Prior to 1.9.2629, generates english dictionary binary (src/main/res/raw/words_*.dict) from source files (under `english_dictionary` folder. Mostly AOSP word-list) Summary and Description have been moved to the new localizable text files: https://f-droid.org/docs/All_About_Descriptions_Graphics_and_Screenshots AutoUpdateMode: None UpdateCheckMode: None CurrentVersion: 1.10.1786 CurrentVersionCode: 6956 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-flutter/0000755000175000017500000000000014770510164017311 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-flutter/build/0000755000175000017500000000000014770510164020410 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-flutter/build/fr.emersion.goguma/0000755000175000017500000000000014770510164024115 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-flutter/build/fr.emersion.goguma/android/0000755000175000017500000000000014770510164025535 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-flutter/build/fr.emersion.goguma/android/app/0000755000175000017500000000000014770510164026315 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-flutter/build/fr.emersion.goguma/android/app/src/0000755000175000017500000000000014770510164027104 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-flutter/build/fr.emersion.goguma/android/app/src/main/0000755000175000017500000000000014770510164030030 5ustar00hanshans././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.364188 fdroidserver-2.4.0/tests/triple-t-flutter/build/fr.emersion.goguma/android/app/src/main/play/0000755000175000017500000000000014770510164030775 5ustar00hanshans././@PaxHeader0000000000000000000000000000022000000000000010207 xustar00122 path=fdroidserver-2.4.0/tests/triple-t-flutter/build/fr.emersion.goguma/android/app/src/main/play/contact-website.txt 22 mtime=1737368094.0 fdroidserver-2.4.0/tests/triple-t-flutter/build/fr.emersion.goguma/android/app/src/main/play/contact0000644000175000017500000000002414743421036032346 0ustar00hanshanshttps://emersion.fr ././@PaxHeader0000000000000000000000000000021400000000000010212 xustar00112 path=fdroidserver-2.4.0/tests/triple-t-flutter/build/fr.emersion.goguma/android/app/src/main/play/listings/ 28 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-flutter/build/fr.emersion.goguma/android/app/src/main/play/listing0000755000175000017500000000000014770510164032367 5ustar00hanshans././@PaxHeader0000000000000000000000000000022100000000000010210 xustar00118 path=fdroidserver-2.4.0/tests/triple-t-flutter/build/fr.emersion.goguma/android/app/src/main/play/listings/en-US/ 27 mtime=1742901364.364188 fdroidserver-2.4.0/tests/triple-t-flutter/build/fr.emersion.goguma/android/app/src/main/play/listing0000755000175000017500000000000014770510164032367 5ustar00hanshans././@PaxHeader0000000000000000000000000000024000000000000010211 xustar00138 path=fdroidserver-2.4.0/tests/triple-t-flutter/build/fr.emersion.goguma/android/app/src/main/play/listings/en-US/full-description.txt 22 mtime=1737368094.0 fdroidserver-2.4.0/tests/triple-t-flutter/build/fr.emersion.goguma/android/app/src/main/play/listing0000644000175000017500000000110114743421036032361 0ustar00hanshansAn IRC client for mobile devices. Goals:

    • Modern: support for many IRCv3 extensions, plus some special support for IRC bouncers.
    • Easy to use: offer a simple, straightforward interface.
    • Offline-first: users should be able to read past conversations while offline, and network disruptions should be handled transparently.
    • Lightweight: go easy on resource usage to run smoothly on older phones and save battery power.
    • Cross-platform: the main target platforms are Linux and Android.
    ././@PaxHeader0000000000000000000000000000024100000000000010212 xustar00139 path=fdroidserver-2.4.0/tests/triple-t-flutter/build/fr.emersion.goguma/android/app/src/main/play/listings/en-US/short-description.txt 22 mtime=1737368094.0 fdroidserver-2.4.0/tests/triple-t-flutter/build/fr.emersion.goguma/android/app/src/main/play/listing0000644000175000017500000000004114743421036032363 0ustar00hanshansAn IRC client for mobile devices ././@PaxHeader0000000000000000000000000000022500000000000010214 xustar00127 path=fdroidserver-2.4.0/tests/triple-t-flutter/build/fr.emersion.goguma/android/app/src/main/play/listings/en-US/title.txt 22 mtime=1737368094.0 fdroidserver-2.4.0/tests/triple-t-flutter/build/fr.emersion.goguma/android/app/src/main/play/listing0000644000175000017500000000000714743421036032365 0ustar00hanshansGoguma ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.364188 fdroidserver-2.4.0/tests/triple-t-flutter/metadata/0000755000175000017500000000000014770510164021071 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368094.0 fdroidserver-2.4.0/tests/triple-t-flutter/metadata/fr.emersion.goguma.yml0000644000175000017500000000154414743421036025324 0ustar00hanshansCategories: - Internet License: AGPL-3.0-only WebSite: https://sr.ht/~emersion/goguma SourceCode: https://git.sr.ht/~emersion/goguma IssueTracker: https://todo.sr.ht/~emersion/goguma AutoName: Goguma RepoType: git Repo: https://git.sr.ht/~emersion/goguma Builds: - versionName: 0.1.0 versionCode: 1 commit: 944d2d1e000901365392e850a98ee03f5dedba32 output: build/app/outputs/flutter-apk/app-release.apk srclibs: - flutter@2.10.2 build: - $$flutter$$/bin/flutter config --no-analytics - $$flutter$$/bin/flutter create --org fr.emersion --project-name goguma --platforms android --no-overwrite . - $$flutter$$/bin/flutter build apk --release --verbose AutoUpdateMode: Version UpdateCheckMode: Tags UpdateCheckData: pubspec.yaml|version:\s.+\+(\d+)|.|version:\s(.+)\+ CurrentVersion: 0.1.0 CurrentVersionCode: 1 ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.364188 fdroidserver-2.4.0/tests/triple-t-multiple/0000755000175000017500000000000014770510164017457 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368094.0 fdroidserver-2.4.0/tests/triple-t-multiple/.gitignore0000644000175000017500000000001014743421036021435 0ustar00hanshans!build/ ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-multiple/build/0000755000175000017500000000000014770510164020556 5ustar00hanshans././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.364188 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/0000755000175000017500000000000014770510164030107 5ustar00hanshans././@PaxHeader0000000000000000000000000000020700000000000010214 xustar00113 path=fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/settings.gradle 22 mtime=1737368094.0 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/settings.gra0000644000175000017500000000007014743421036032436 0ustar00hanshansinclude ':common' include ':verifier' include ':wallet' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/verifier/0000755000175000017500000000000014770510164031722 5ustar00hanshans././@PaxHeader0000000000000000000000000000021300000000000010211 xustar00111 path=fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/verifier/src/ 28 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/verifier/src0000755000175000017500000000000014770510164032432 5ustar00hanshans././@PaxHeader0000000000000000000000000000022000000000000010207 xustar00116 path=fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/verifier/src/main/ 28 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/verifier/src0000755000175000017500000000000014770510164032432 5ustar00hanshans././@PaxHeader0000000000000000000000000000022500000000000010214 xustar00121 path=fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/verifier/src/main/play/ 28 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/verifier/src0000755000175000017500000000000014770510164032432 5ustar00hanshans././@PaxHeader0000000000000000000000000000023600000000000010216 xustar00130 path=fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/verifier/src/main/play/listings/ 28 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/verifier/src0000755000175000017500000000000014770510164032432 5ustar00hanshans././@PaxHeader0000000000000000000000000000024300000000000010214 xustar00136 path=fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/verifier/src/main/play/listings/en-US/ 27 mtime=1742901364.364188 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/verifier/src0000755000175000017500000000000014770510164032432 5ustar00hanshans././@PaxHeader0000000000000000000000000000024700000000000010220 xustar00145 path=fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/verifier/src/main/play/listings/en-US/title.txt 22 mtime=1737368094.0 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/verifier/src0000644000175000017500000000002714743421036032432 0ustar00hanshansCOVID Certificate Check././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/wallet/0000755000175000017500000000000014770510164031377 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/wallet/src/0000755000175000017500000000000014770510164032166 5ustar00hanshans././@PaxHeader0000000000000000000000000000021600000000000010214 xustar00114 path=fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/wallet/src/main/ 28 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/wallet/src/m0000755000175000017500000000000014770510164032343 5ustar00hanshans././@PaxHeader0000000000000000000000000000022300000000000010212 xustar00119 path=fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/wallet/src/main/play/ 28 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/wallet/src/m0000755000175000017500000000000014770510164032343 5ustar00hanshans././@PaxHeader0000000000000000000000000000023400000000000010214 xustar00128 path=fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/wallet/src/main/play/listings/ 28 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/wallet/src/m0000755000175000017500000000000014770510164032343 5ustar00hanshans././@PaxHeader0000000000000000000000000000024100000000000010212 xustar00134 path=fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/wallet/src/main/play/listings/en-US/ 27 mtime=1742901364.364188 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/wallet/src/m0000755000175000017500000000000014770510164032343 5ustar00hanshans././@PaxHeader0000000000000000000000000000024500000000000010216 xustar00143 path=fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/wallet/src/main/play/listings/en-US/title.txt 22 mtime=1737368094.0 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.verifier/wallet/src/m0000644000175000017500000000002114743421036032335 0ustar00hanshansCOVID Certificate././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.364188 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/0000755000175000017500000000000014770510164027564 5ustar00hanshans././@PaxHeader0000000000000000000000000000020500000000000010212 xustar00111 path=fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/settings.gradle 22 mtime=1737368094.0 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/settings.gradl0000644000175000017500000000007014743421036032433 0ustar00hanshansinclude ':common' include ':verifier' include ':wallet' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/verifier/0000755000175000017500000000000014770510164031377 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/verifier/src/0000755000175000017500000000000014770510164032166 5ustar00hanshans././@PaxHeader0000000000000000000000000000021600000000000010214 xustar00114 path=fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/verifier/src/main/ 28 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/verifier/src/m0000755000175000017500000000000014770510164032343 5ustar00hanshans././@PaxHeader0000000000000000000000000000022300000000000010212 xustar00119 path=fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/verifier/src/main/play/ 28 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/verifier/src/m0000755000175000017500000000000014770510164032343 5ustar00hanshans././@PaxHeader0000000000000000000000000000023400000000000010214 xustar00128 path=fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/verifier/src/main/play/listings/ 28 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/verifier/src/m0000755000175000017500000000000014770510164032343 5ustar00hanshans././@PaxHeader0000000000000000000000000000024100000000000010212 xustar00134 path=fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/verifier/src/main/play/listings/en-US/ 27 mtime=1742901364.364188 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/verifier/src/m0000755000175000017500000000000014770510164032343 5ustar00hanshans././@PaxHeader0000000000000000000000000000024500000000000010216 xustar00143 path=fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/verifier/src/main/play/listings/en-US/title.txt 22 mtime=1737368094.0 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/verifier/src/m0000644000175000017500000000002714743421036032343 0ustar00hanshansCOVID Certificate Check././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/wallet/0000755000175000017500000000000014770510164031054 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/wallet/src/0000755000175000017500000000000014770510164031643 5ustar00hanshans././@PaxHeader0000000000000000000000000000021400000000000010212 xustar00112 path=fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/wallet/src/main/ 28 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/wallet/src/mai0000755000175000017500000000000014770510164032332 5ustar00hanshans././@PaxHeader0000000000000000000000000000022100000000000010210 xustar00117 path=fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/wallet/src/main/play/ 28 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/wallet/src/mai0000755000175000017500000000000014770510164032332 5ustar00hanshans././@PaxHeader0000000000000000000000000000023200000000000010212 xustar00126 path=fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/wallet/src/main/play/listings/ 28 mtime=1742901364.2201865 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/wallet/src/mai0000755000175000017500000000000014770510164032332 5ustar00hanshans././@PaxHeader0000000000000000000000000000023700000000000010217 xustar00132 path=fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/wallet/src/main/play/listings/en-US/ 27 mtime=1742901364.364188 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/wallet/src/mai0000755000175000017500000000000014770510164032332 5ustar00hanshans././@PaxHeader0000000000000000000000000000024300000000000010214 xustar00141 path=fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/wallet/src/main/play/listings/en-US/title.txt 22 mtime=1737368094.0 fdroidserver-2.4.0/tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/wallet/src/mai0000644000175000017500000000002114743421036032324 0ustar00hanshansCOVID Certificate././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.364188 fdroidserver-2.4.0/tests/triple-t-multiple/metadata/0000755000175000017500000000000014770510164021237 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368094.0 fdroidserver-2.4.0/tests/triple-t-multiple/metadata/ch.admin.bag.covidcertificate.verifier.yml0000644000175000017500000000334114743421036031313 0ustar00hanshansAntiFeatures: - Tracking Categories: - Sports & Health License: MPL-2.0 AuthorName: Swiss Admin AuthorWebSite: https://www.bit.admin.ch SourceCode: https://github.com/admin-ch/CovidCertificate-App-Android IssueTracker: https://github.com/admin-ch/CovidCertificate-App-Android/issues Changelog: https://github.com/admin-ch/CovidCertificate-App-Android/releases AutoName: Covid Cert RepoType: git Repo: https://github.com/admin-ch/CovidCertificate-App-Android Binaries: https://github.com/admin-ch/CovidCertificate-App-Android/releases/download/v%v-%c-verifier/verifier-prod-%v-%c-signed.apk Builds: - versionName: 1.2.0 versionCode: 1200 commit: v1.2.0-1200-verifier subdir: verifier submodules: true gradle: - prod rm: - sdk/sdk/testKeystore - wallet/testKeystore - verifier/testKeystore prebuild: printf '\nbuildTimestamp=%s\n' "$(curl -sL https://github.com/admin-ch/CovidCertificate-App-Android/releases/download/v$$VERSION$$-$$VERCODE$$-verifier/verifier-prod-$$VERSION$$-$$VERCODE$$-buildtimestamp.txt | tr -cd '0-9')" >> gradle.properties - versionName: 2.0.0 versionCode: 2000 commit: 5a871eabf1fce16b84e4c7b97c94fd3f2a37e910 subdir: verifier submodules: true gradle: - prod rm: - sdk/sdk/testKeystore - wallet/testKeystore - verifier/testKeystore prebuild: printf '\nbuildTimestamp=%s\n' "$(curl -sL https://github.com/admin-ch/CovidCertificate-App-Android/releases/download/v$$VERSION$$-$$VERCODE$$-verifier/verifier-prod-$$VERSION$$-$$VERCODE$$-buildtimestamp.txt | tr -cd '0-9')" >> gradle.properties AutoUpdateMode: Version UpdateCheckMode: Tags ^v[\d.]+-\d+-verifier$ CurrentVersion: 2.0.0 CurrentVersionCode: 2000 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368094.0 fdroidserver-2.4.0/tests/triple-t-multiple/metadata/ch.admin.bag.covidcertificate.wallet.yml0000644000175000017500000000331514743421036030771 0ustar00hanshansAntiFeatures: - Tracking Categories: - Sports & Health License: MPL-2.0 AuthorName: Swiss Admin AuthorWebSite: https://www.bit.admin.ch SourceCode: https://github.com/admin-ch/CovidCertificate-App-Android IssueTracker: https://github.com/admin-ch/CovidCertificate-App-Android/issues Changelog: https://github.com/admin-ch/CovidCertificate-App-Android/releases AutoName: Covid Cert RepoType: git Repo: https://github.com/admin-ch/CovidCertificate-App-Android Binaries: https://github.com/admin-ch/CovidCertificate-App-Android/releases/download/v%v-%c-wallet/wallet-prod-%v-%c-signed.apk Builds: - versionName: 1.2.0 versionCode: 1200 commit: v1.2.0-1200-wallet subdir: wallet submodules: true gradle: - prod rm: - sdk/sdk/testKeystore - wallet/testKeystore - verifier/testKeystore prebuild: printf '\nbuildTimestamp=%s\n' "$(curl -sL https://github.com/admin-ch/CovidCertificate-App-Android/releases/download/v$$VERSION$$-$$VERCODE$$-wallet/wallet-prod-$$VERSION$$-$$VERCODE$$-buildtimestamp.txt | tr -cd '0-9')" >> gradle.properties - versionName: 2.0.0 versionCode: 2000 commit: 5a871eabf1fce16b84e4c7b97c94fd3f2a37e910 subdir: wallet submodules: true gradle: - prod rm: - sdk/sdk/testKeystore - wallet/testKeystore - verifier/testKeystore prebuild: printf '\nbuildTimestamp=%s\n' "$(curl -sL https://github.com/admin-ch/CovidCertificate-App-Android/releases/download/v$$VERSION$$-$$VERCODE$$-wallet/wallet-prod-$$VERSION$$-$$VERCODE$$-buildtimestamp.txt | tr -cd '0-9')" >> gradle.properties AutoUpdateMode: Version UpdateCheckMode: Tags ^v[\d.]+-\d+-wallet$ CurrentVersion: 2.0.0 CurrentVersionCode: 2000 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/urzip-badcert.apk0000644000175000017500000002330514717152071017341 0ustar00hanshansPK OC=-res/drawable/ic_launcher.pngPNG  IHDRw=LIDATHǥyPuƟ{².˲ 8ႈ 628yr OCM5V^ʡbY"0,,{DPXϟ>ߋ4zљp a22x@-q &6'xnب4Ռs-<!a^zD\W6=YMQ2ɗw|՟-f̶vJA؜s1Ym®n>/]ҹr8୔@(r1.}j:Oi> DowJ'CRRVJ eMPy|{|7sRNQy(KNnቹM{p՝Ғ6Q:h++-LxȄsՆIT~M≹\{V{TTX@vL (Ćyq]zAnBFZmHocs  Çd6ihh CCfQ!j2OPSեlUY G?15t"GUˢy*(M6\$""DJiujdo5GcF^G"@ Vx\|T$SgOt ::erOK\]Ϟb¶hӫnZ>5^7 S~6B3Щb#RجJ[ =64%1N ('5+٥bvTD%W< `y*VnJK6͵[h8l3PA$M;QZ1[,U3|.nlIuG2 3 eb2V'0`ę&Uڂg ,.!蒎Q1 F|UJvuӆaL06 cLzN׎zXYٹLGBr8#0LmMOS7onDVv͞} DLژ.C{e 󳵴&cY,ZKSiZ=I`҇6%]Nm},ŅU5SN܈mݷ<65}E޷'0CקԄf.̙3;EnK=_d*/r.Ѵ#>)?/Ԟ H\o7aU%(|${hjǜIL~ cS/LҘPPX"1sgsLuP!!"@&849^1|'3}ȕs_-]$IVM1,,D-aEDA̤rIENDB`PKOCS Lres/layout/activity_main.xmluN@=[$BHA"5%$ 'Ql*x$ G;es;wofw} ƘMCt- G«& 99w%fmF)B[nTχUПg!F$~"u.m*~RUx:R}o{EO١R3~`)6d?Tޟ#]{ȣ>64u6Z?p̑?gqդ~,ᛙPKOCIדAndroidManifest.xmlKoSGϵM'ǘR"!Tmqh˦E,.. 좟U V,*枩'|WϽg͙3sQS:AQuS8OA MzQz } }="4TCC?CA@D_@@/ 1eh ZBB/} =~z -Uh%oriG{vhxlإi٧*zb#(:bquT;8ؾWgW*} ۺ0qUaںʓ}Xo-V ^QwA-ܷ}5qm { hUBY- {V越UH^ʛ_U?|}!Q*2`1kQű*UЫW9tO#/");W `WKz: ԡ:o"]sBֻZ%BKo/D]ˈKwJ(Tf@hUwӦ)}*k[mWh -чo;EuĮ EFo>¿'z=zlNsq:t9vMtLI3ds&=>yiBy @Qhf[)fv4ώS܆B-bng$3ƘI܆CF7bTިF ^K aoބ؎i`cY,mwD̈́ߤ2iqoM5C7e&az$yώӼ5wНwӷ>\?.>уl=?ȿ|㫝D%"Z+Iz$4_׉!DW!<# '@vz]`<s"x.WWkSo& ^@w3N?~2 Z=A~:x|wi#{ȃx|?~| 0A?#` <΁ge m{m:1oN-`O<(3<" p~|>,)`<  2x| :'`C`^4`^"#t`,&Ly@70A%97` `lwmj] ;Np' `#S`<)pn"jRPJ/@oTz :9i*u]kZI<+8<$\Q c*{RUY_Q:Հ~Eݨʎx մ '`ˀ~-_Я+:? 䙂>߯i4-*ʤ$ǩJrVpDɣJE,[eq H*("8-dqX YO{,Ec b!uHr հ<+s>:>,|ƃ2t? C߂/!}!Tv=dsk{}1YoU)/^D^ʮпʺ{w!W(S!ȾwUjI#hpFϒkWAzk5ِF9"t7Oky>ZXJn:\MlAbZs3梛h@O b1:A+Ml#e?ON{LFΑ6~+vǩfs;E{Ȳղ eJ=(G|>#f2H!pih 4vF <|p;x ~6j'>EEDy>l q(هSWoG_(u'l܊ s㑭9io1a3iFgGy$⠉8ı&JF'B VY]cЋ>hc(&5( Gt.φpsOkޭoҾ.mq\ˆ"PxVD%"<\ Ӓ뉢?WFy_ن]͛?;m)zns,?}3&6ܯ5UϓY9gY'sS!uVJ:FuP9&6uDT=WJ5{L8JV>׮W̝Ϣh> ER%{66o6=C:Ӓ鱨\l  EoL'֥;ץץT4?|LĹoxp٫|[C-J(-3S2c)[U>s95E!\!5еYj܂9U*S9;L=ۭ&ǵ+G}gj&_>槭@A0UP)Y3V+N17ST*.9r wE[+Z0u$Ϥھ^<2Ȳ&Y:UY&;S;櫖_p,{'|%WrJHrw-oMVS3|uv3^f+W|Ĝvن)w;S*&ɰS_+9CTl.Ljhdwkp7NQi0}c޶or.lfi/Z|n󊶵V0ṄO΀푪[q[8& )ZP:+z]œ󟌪eJ1!Ч5c :2TEJv)\-x["c*V1B`t3wĬ Q7ɜHNsi6e3k "{괬k,fCXX; HSxGq~IK e;W#tdh,*38gq sSE^]Nz}J6q(bݘ3b#QRN5EAr^ýs*^5 vx;vΨ7h*+>ރEM!b2 >j2,4X7$+a0shNbk(-f_.|PK*uE*M._META-INF/CERT.RSAUT wSwSux 3hbfajhδAG&FFCnN6Vm>f&)Vn"M/ f&F&&FS^FVs ̡,lL| 0c^JQ~fHY*Tn 'khd`dhfddd`l%kX@8ٍ ̍ L w;',fڦQV^:|Ʊ  F;f\=oOz<*}yC7Zl//23J^w0ɯy_U0|I7'ܘvg&ݳĽ hA t/'k?LVprsV7Yʮ}:FKO6{Ul{[kP–k2ئq/2klj+~=}$!ۿ*%,sҸ-}&c˪ޠ^aKaZj6>1h|Ld<4} %'h`il0TonՔ#3< 5Cԋ/Z__}賀_9O|P,)I=|oaw{_h\2Q=g_vjҵW*Za4ӥr y9:q}k PK OC=-res/drawable/ic_launcher.pngPKOCS Lres/layout/activity_main.xmlPKOCIדAndroidManifest.xmlPK OC?} resources.arscPKOCT~ classes.dexPKOC,2META-INF/MANIFEST.MFPKOCl=T,7{ META-INF/CERT.SFPK*uE*M._!META-INF/CERT.RSAUTwSux PK%$././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/urzip-badsig.apk0000644000175000017500000002330314717152071017164 0ustar00hanshansPK OC=-res/drawable/ic_launcher.pngPNG  IHDRw=LIDATHǥyPuƟ{².˲ 8ႈ 628yr OCM5V^ʡbY"0,,{DPXϟ>ߋ4zљp a22x@-q &6'xnب4Ռs-<!a^zD\W6=YMQ2ɗw|՟-f̶vJA؜s1Ym®n>/]ҹr8୔@(r1.}j:Oi> DowJ'CRRVJ eMPy|{|7sRNQy(KNnቹM{p՝Ғ6Q:h++-LxȄsՆIT~M≹\{V{TTX@vL (Ćyq]zAnBFZmHocs  Çd6ihh CCfQ!j2OPSեlUY G?15t"GUˢy*(M6\$""DJiujdo5GcF^G"@ Vx\|T$SgOt ::erOK\]Ϟb¶hӫnZ>5^7 S~6B3Щb#RجJ[ =64%1N ('5+٥bvTD%W< `y*VnJK6͵[h8l3PA$M;QZ1[,U3|.nlIuG2 3 eb2V'0`ę&Uڂg ,.!蒎Q1 F|UJvuӆaL06 cLzN׎zXYٹLGBr8#0LmMOS7onDVv͞} DLژ.C{e 󳵴&cY,ZKSiZ=I`҇6%]Nm},ŅU5SN܈mݷ<65}E޷'0CקԄf.̙3;EnK=_d*/r.Ѵ#>)?/Ԟ H\o7aU%(|${hjǜIL~ cS/LҘPPX"1sgsLuP!!"@&849^1|'3}ȕs_-]$IVM1,,D-aEDA̤rIENDB`PKOCS Lres/layout/activity_main.xmluN@=[$BHA"5%$ 'Ql*x$ G;es;wofw} ƘMCt- G«& 99w%fmF)B[nTχUПg!F$~"u.m*~RUx:R}o{EO١R3~`)6d?Tޟ#]{ȣ>64u6Z?p̑?gqդ~,ᛙPKOCIדAndroidManifest.xmlKoSGϵM'ǘR"!Tmqh˦E,.. 좟U V,*枩'|WϽg͙3sQS:AQuS8OA MzQz } }="4TCC?CA@D_@@/ 1eh ZBB/} =~z -Uh%oriG{vhxlإi٧*zb#(:bquT;8ؾWgW*} ۺ0qUaںʓ}Xo-V ^QwA-ܷ}5qm { hUBY- {V越UH^ʛ_U?|}!Q*2`1kQű*UЫW9tO#/");W `WKz: ԡ:o"]sBֻZ%BKo/D]ˈKwJ(Tf@hUwӦ)}*k[mWh -чo;EuĮ EFo>¿'z=zlNsq:t9vMtLI3ds&=>yiBy @Qhf[)fv4ώS܆B-bng$3ƘI܆CF7bTިF ^K aoބ؎i`cY,mwD̈́ߤ2iqoM5C7e&az$yώӼ5wНwӷ>\?.>уl=?ȿ|㫝D%"Z+Iz$4_׉!DW!<# '@vz]`<s"x.WWkSo& ^@w3N?~2 Z=A~:x|wi#{ȃx|?~| 0A?#` <΁ge m{m:1oN-`O<(3<" p~|>,)`<  2x| :'`C`^4`^"#t`,&Ly@70A%97` `lwmj] ;Np' `#S`<)pn"jRPJ/@oTz :9i*u]kZI<+8<$\Q c*{RUY_Q:Հ~Eݨʎx մ '`ˀ~-_Я+:? 䙂>߯i4-*ʤ$ǩJrVpDɣJE,[eq H*("8-dqX YO{,Ec b!uHr հ<+s>:>,|ƃ2t? C߂/!}!Tv=dsk{}1YoU)/^D^ʮпʺ{w!W(S!ȾwUjI#hpFϒkWAzk5ِF9"t7Oky>ZXJn:\MlAbZs3梛h@O b1:A+Ml#e?ON{LFΑ6~+vǩfs;E{Ȳղ eJ=(G|>#f2H!pih 4vF <|p;x ~6j'>EEDy>l q(هSWoG_(u'l܊ s㑭9io1a3iFgGy$⠉8ı&JF'B VY]cЋ>hc(&5( Gt.φpsOkޭoҾ.mq\ˆ"PxVD%"<\ Ӓ뉢?WFy_ن]͛?;m)zns,?}3&6ܯ5UϓY9gY'sS!uVJ:FuP9&6uDT=WJ5{L8JV>׮W̝Ϣh> ER%{66o6=C:Ӓ鱨\l  EoL'֥;ץץT4?|LĹoxp٫|[C-J(-3S2c)[U>s95E!\!5еYj܂9U*S9;L=ۭ&ǵ+G}gj&_>槭@A0UP)Y3V+N17ST*.9r wE[+Z0u$Ϥھ^<2Ȳ&Y:UY&;S;櫖_p,{'|%WrJHrw-oMVS3|uv3^f+W|Ĝvن)w;S*&ɰS_+9CTl.Ljhdwkp7NQi0}c޶or.lfi/Z|n󊶵V0ṄO΀푪[q[8& )ZP:+z]œ󟌪eJ1!Ч5c :2TEJv)\-x["c*V1B`t3wĬ Q7ɜHNsi6e3k "{괬k,fCXX; HSxGq~IK e;W߳hcUS(y,HPU2쟇f۶=q! E B&YuG=wbI"B^\K"_+֬ Q 6c8'ʞyPKOCl=T,7META-INF/CERT.SFmIo@;cmMz`"-^0 8:l3K/ixM pEUV:I(<;d1. 5&VOLtO|i{>#tdh,*38gq sSE^]Nz}J6q(bݘ3b#QRN5EAr^ýs*^5 vx;vΨ7h*+>ރEM!b2 >j2,4X7$+a0shNbk(-f_.|PKOC _META-INF/CERT.RSA3hbfajhδAG&FFCnN6Vm>f&)Vn"M/ f&F&&FS^FVs ̡,lL| 0c^JQ~fHY*Tn 'khd`dhfddd`l%kX@8ٍ ̍ L w;',fڦQV^:|Ʊ  F;f\=oOz<*}yC7Zl//23J^w0ɯy_U0|I7'ܘvg&ݳĽ hA t/'k?LVprsV7Yʮ}:FKO6{Ul{[kP–k2ئq/2klj+~=}$!ۿ*%,sҸ-}&c˪ޠ^aKaZj6>1h|Ld<4} %'h`il6Z&G}U&gk7ޒ:!r _{[սrYFi3.WݫegOnP:g؞[7,|iowi^ί-x΅ǟ_.6PK OC=-res/drawable/ic_launcher.pngPKOCS Lres/layout/activity_main.xmlPKOCIדAndroidManifest.xmlPK OC?} resources.arscPKOCT~ classes.dexPKENgW2META-INF/MANIFEST.MFUTSTux PKOCl=T,7 META-INF/CERT.SFPKOC _!META-INF/CERT.RSAPK%$././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039740.0 fdroidserver-2.4.0/tests/urzip-release-unsigned.apk0000644000175000017500000002042714717152074021174 0ustar00hanshansPK/EAndroidManifest.xmlKo[UNbHqrc'~\ǏѴ@*iEҰp:džU5kKuP5 ?ss=gwf{sDũ&*Sv#; t Qաcg/T݀ЗЏ?D( }5o("jA'/Sw(2D ݅c 4!\R5ۂ[*^cȱ Ft^Ѡ7)kwUWA}M>TOsI֐j+?DS>g t[ZgglgTC̾t%v.9RV*{݃&}9ޣ RUDa))k*S 5VUs h:xlU#%J K#!);΁k >K^bgv]vOyW]ki׶yx,3¥C_>ۈڢ눋C(#t*AGnci\G &]U>uӸ;6-vb߆T|F0їsf̌qazN4#f|Gs}G$߈& 'Lq9Cr BI(-CYbs~=z75;*C7$}d9Dbs?(xAՉk΋-b57!yTgǤhylJ,^cu7uSFP[cCo;n ([c0Ѝ?"܏zcTcϺ󉋏K¾njx57'9gy IMm^r֜6탷 7m|b^GKh<3;r- oIl|$Ŗ֘7X}>7)%oi-uߺoYx/i-w*"gy<^XxxE5^+Wxe˳sxFz+;gxwooa^PKDy+PK PC=-res/drawable/ic_launcher.pngPNG  IHDRw=LIDATHǥyPuƟ{².˲ 8ႈ 628yr OCM5V^ʡbY"0,,{DPXϟ>ߋ4zљp a22x@-q &6'xnب4Ռs-<!a^zD\W6=YMQ2ɗw|՟-f̶vJA؜s1Ym®n>/]ҹr8୔@(r1.}j:Oi> DowJ'CRRVJ eMPy|{|7sRNQy(KNnቹM{p՝Ғ6Q:h++-LxȄsՆIT~M≹\{V{TTX@vL (Ćyq]zAnBFZmHocs  Çd6ihh CCfQ!j2OPSեlUY G?15t"GUˢy*(M6\$""DJiujdo5GcF^G"@ Vx\|T$SgOt ::erOK\]Ϟb¶hӫnZ>5^7 S~6B3Щb#RجJ[ =64%1N ('5+٥bvTD%W< `y*VnJK6͵[h8l3PA$M;QZ1[,U3|.nlIuG2 3 eb2V'0`ę&Uڂg ,.!蒎Q1 F|UJvuӆaL06 cLzN׎zXYٹLGBr8#0LmMOS7onDVv͞} DLژ.C{e 󳵴&cY,ZKSiZ=I`҇6%]Nm},ŅU5SN܈mݷ<65}E޷'0CקԄf.̙3;EnK=_d*/r.Ѵ#>)?/Ԟ H\o7aU%(|${hjǜIL~ cS/LҘPPX"1sgsLuP!!"@&849^1|'3}ȕs_-]$IVM1,,D-aEDA̤rIENDB`PK/Eres/layout/activity_main.xmluN@=[$BHA"5%$ 'Ql*x$ G;es;wofw} ƘMCt- G«& 99w%fmF)B[nTχUПg!F$~"u.m*~RUx:R}o{EO١R3~`)6d?Tޟ#]{ȣ>64u6Z?p̑?gqդ~,ᛙPKS LPK /Eresources.arsc 0<xres/drawable/ic_launcher.pngres/layout/activity_main.xmlurzipSettings Hello world! info.guardianproject.urzip l, 0attrdrawablelayoutstring08Ln ic_launcher activity_mainapp_nameaction_settings hello_worldDXH0DXH0DP0 PK.E classes.dexyluofg\{"ARHJ!,"mZaVʉ<#-gV壢 %qluDQm8U\Vİq mUPhiE 9%$>-ڋw.Ճ?{oқ~De"Z<~g6HڷhD!C1!BFy[MWGN5ht;xO x| > Dnp CՌ%!`\W@ s e&> u~pcsy"^_{o?߂h+rL {0`̃'g%2C'm]guK_ X l8P<}p? |>,` <  x|)s#p;`9C`4`]"#B0Q`i< t\F ^6;/v w{. a10$8jM%JJJE c\ו%L!ULs{3Ii~G~GSJry+zvL+./~=C@Я|$"Pg?~;)O-*ʤ}$FrTpDcJVD.%y|R߁d.y5sb>?Bj*W|U'WdJBRG/ NW/.dJF%J6awI٪d>!d>%da*٦I!!;騐q:!i%_PKbgERľ {b5^{]3j v}Q8yBF}/@f Sy!{bKw!SB6*/M8sdM*M/G߃[B<-WJvIkI&Ě{a|@Osz_/&}k!tZ/&ϐfh[={Hco?Qfuma߁M{)oe_3??UQB2ߗSw]l\G0 tc>Vn vB9DԠCp_g'ê zi`Z3;s."7 'Y=dXn6@r_bu\EV6l럦fwktN&֏8~F=|뽿%\."׉zdSz|v yF[9wN0THt!jO]0'd5П.ZlYn/Цlލ6=5FGi$Ƞpy.Y~ x ypSxlwQZVyFLzӂ7) ɯF-DVĒEXes3MlF>\OLxw Kiݻ78uhF|F4(/eP}tG^Dm~4?b]M݉n {am;MTAMk02Ab"@gô~g(պ9X#ޡmAO9&s\eT@T?V^N֎~EffrS{Ū dzu56}yN}Sz'V1aOsYܩ-<]֧Fѝ` niV^Z߸hLKFBs6q=3XN)))2Se~O k1^\O}Sn۬JnRO-v!K٬gzg]gwM ;D,=Te̪g_$6@lÎT Qj攊;,j\fmߤ(/8,F|ssN6ŪoD^niI'&')Ib(Mr3tmrZ'-{Nq*S=?D{s[bW<]xweUUλ)r&w7#oIK;;0y%ZC]çQ{vVy-}& ^p\tHDZ(#-b y۷䀭S_]4|1cn?#g!1XdԾ++ kEbI;C8?B4i'FMR~q9uV`W*^j%kBI~zɊ]m▊Z6n"_sl L `)*oXBEjQhW0#Vut(Q&pfpR'fS2rEP"{ѩT+7 㟇xhB Myi˅ ;B`PTC(ġ|x3a&AϷJ<K%9/~PS8Yjna5> {dzzh/8/}+*bګί\[x ҍԻ(;3s~y+V6y۔[̢h5OqUc˳SRlƤ*.[5P[¾]X @T-`!cXsX6ӛ\`\'E+SB@H RzrQsM)&WɢQ}JX'J؆I_.k"J2R .f8;pG@Em>A&s"if/ˬkZ^f-x~E{质٫,6 gXXEH$aGc?me\ߊ:3Sc٤'Xsi]Cϲ=ƚtv{u;ړl ngϱȖzh_g:nzYH׬ gY C[\†녞It耻4> UMd$1u*o];ZEWX6iC%9\_~Wz{(ۘMeلl,ZÙlFܕٖٙ1znbٜl˲M,i~A/2 ]@^`^>f,-5C]kR nJ ok[X({-Z- "/O/.+wZְv-Ȯ]۴m}mL|TcZ'留=c>ͮ3nή΂,N{w|X>aSYJ¿WL9.OWwcfr!\R5ۂ[*^cȱ Ft^Ѡ7)kwUWA}M>TOsI֐j+?DS>g t[ZgglgTC̾t%v.9RV*{݃&}9ޣ RUDa))k*S 5VUs h:xlU#%J K#!);΁k >K^bgv]vOyW]ki׶yx,3¥C_>ۈڢ눋C(#t*AGnci\G &]U>uӸ;6-vb߆T|F0їsf̌qazN4#f|Gs}G$߈& 'Lq9Cr BI(-CYbs~=z75;*C7$}d9Dbs?(xAՉk΋-b57!yTgǤhylJ,^cu7uSFP[cCo;n ([c0Ѝ?"܏zcTcϺ󉋏K¾njx57'9gy IMm^r֜6탷 7m|b^GKh<3;r- oIl|$Ŗ֘7X}>7)%oi-uߺoYx/i-w*"gy<^XxxE5^+Wxe˳sxFz+;gxwooa^PKDy+PK bE=-res/drawable/ic_launcher.pngPNG  IHDRw=LIDATHǥyPuƟ{².˲ 8ႈ 628yr OCM5V^ʡbY"0,,{DPXϟ>ߋ4zљp a22x@-q &6'xnب4Ռs-<!a^zD\W6=YMQ2ɗw|՟-f̶vJA؜s1Ym®n>/]ҹr8୔@(r1.}j:Oi> DowJ'CRRVJ eMPy|{|7sRNQy(KNnቹM{p՝Ғ6Q:h++-LxȄsՆIT~M≹\{V{TTX@vL (Ćyq]zAnBFZmHocs  Çd6ihh CCfQ!j2OPSեlUY G?15t"GUˢy*(M6\$""DJiujdo5GcF^G"@ Vx\|T$SgOt ::erOK\]Ϟb¶hӫnZ>5^7 S~6B3Щb#RجJ[ =64%1N ('5+٥bvTD%W< `y*VnJK6͵[h8l3PA$M;QZ1[,U3|.nlIuG2 3 eb2V'0`ę&Uڂg ,.!蒎Q1 F|UJvuӆaL06 cLzN׎zXYٹLGBr8#0LmMOS7onDVv͞} DLژ.C{e 󳵴&cY,ZKSiZ=I`҇6%]Nm},ŅU5SN܈mݷ<65}E޷'0CקԄf.̙3;EnK=_d*/r.Ѵ#>)?/Ԟ H\o7aU%(|${hjǜIL~ cS/LҘPPX"1sgsLuP!!"@&849^1|'3}ȕs_-]$IVM1,,D-aEDA̤rIENDB`PKbES Lres/layout/activity_main.xmluN@=[$BHA"5%$ 'Ql*x$ G;es;wofw} ƘMCt- G«& 99w%fmF)B[nTχUПg!F$~"u.m*~RUx:R}o{EO١R3~`)6d?Tޟ#]{ȣ>64u6Z?p̑?gqդ~,ᛙPKS LPK cEresources.arsc 0<xres/drawable/ic_launcher.pngres/layout/activity_main.xmlurzipSettings Hello world! info.guardianproject.urzip l, 0attrdrawablelayoutstring08Ln ic_launcher activity_mainapp_nameaction_settings hello_worldDXH0DXH0DP0 PKbE_>P classes.dex{p\u޽j%Yڗl]e,?f%XJ{-]{u,9 6!0 BC4fڐtJNNN6gڴ`IBﱫkaHs~wd/FnNګ~'-ѱUo]MT!:H]!J>B:ZoBB2!_A0B4ȌIx</ooo_NtApLs w a%7}6c`v!0.ς~]Da4 }x "D V` -`; g"x< _o 4YPVpA0 >WW7wk['=%A [x@"x \/???ow#>u`wU(x 6x|| cm5}4CD9X-@k@/0A(\` `6`Pa0f l[p(]v8  _i#jSPRJ_-@Js]Wz'TLcRqxMڹS77POw(]U롔yU\I{(}UjY~P怾- z<ux6@~'aSRr6>ǡE\(yZ 9GyJ"Ra%/B2D,$*WΈ9M/SqBH,+̗h "OHY=M!{sB+ח,צdJv%;㑲[4M Bƕ SI}\ȼ&}V(߅#B1!tVɲQ%?3bgDnR'ž {Zӈ#n2! uN/#-Ƭ?/kI-楿+d  JF__8wd-<ۂ{4wR&5GFm𿔗|Nc8XyyvSisb0$yn:Q F-e_ _v5$|#+V_ST ȵ^7Պ!rhz.k-}Iˢyv8+h]Ti}8Mh=)>F='d8T=Cr_`1:F*fVqrsfdsr=u!Vmx/@:7!Q#"jL-wx}vn;' /$|d-j8~v~λacxy0&!r-b~Y>ţΙ-Mm}'XGd]O|89yW+f0ڨ`dރt<\? W ݏBM=/nj dN#J ,30[rVѷ"[8c}I԰7gAOOYf効AAڣsӊow |pl&}[ #Yo;ɀ&R>.⡡ό^#jgۃ^ @Ei75nGXxGx#z*{T%\G(8#|.1~.ύiA;چ{%ns w +[ӯk V|r&SRT?3_SZ˽l5kV:WI!V{N #kMS3Wz&\v><ݛ+w+yr4s=J!FQ*#i:ֶR69:::&ǢBsͼ|w m^ޱ"oE+%f*7j="S|xqrmRrܨ`]Y&b/eǟz7`꽀#4q >If3I*&]qv"FN4湧١3ւEck^͜mf%7)1;+ƾ{Pϸ{y~)ۦX4OS|i$v NLPĐfuOXnҰU ETL>5ۭ HMk׆"u5M^uxouɝguE Gnliל7[D*/8g-A8 Syֽk^?"݇tZ9H6NCg,؇# xo@ #}4ȸ>*,;IzYq*+}VGvf3z,{˴=,3lˮaI<,n\eXHצ9& c ,1ƽaz 3h?ԩe6`$kpnjcmEXCkю}MTS{=E'iϤ2m,-GSC}Z 3i=}KzgzkZer-әYw<#"/%FPӋ,=&޺G..w2tAih/w&BbtKc/w'vx^%l7g;yn~25t]^& E2n7|n]J39Z{O͔'u_|gP{)ߋQSwPK_>PPKbEgyMETA-INF/MANIFEST.MFmj@} eDB&jl֪3_Ǒ̌+" ݾpN8+ wZo[7RP|o[5C έ$7=̶A9N|%fG KX|q$(KT}Mw2<=tOϗO _v J5-v Qj* u{/zR/(LAHFt{ǬGFǃ _D!.smKo{QQ=COu PKgyPKbEպ7META-INF/CERT.SFmKk@p">bBNhJ%n¨5cbB tw9p>w ")Due#YET[ 5G32Vx= !SQpq`D$!fغӾcK{etv;VI)< ';*U6-u6^f"D{ @u0|+!Y"؎}f}c#Xw4A i 7" xQL- ̽0??+!m@A_Cpe0P{GtPKպ7PKbE.1wMETA-INF/CERT.RSAU;ԋb!CwƮc)nBFa !K3h#K Iy/V'!BM9Wʸu{~yy 2QZvB2& DP( #b0@A˘(0z \SMP([J*p$ z/NaQVQ8YP;%M Ş'E)FSBNA!4VM)VڎcM !+yƇGĂ 283'dD p8h{c<,(c{ x @! H 8/Nz<+IBÄ5qJId)g;b9h`F;|``#VP7.KNE ӿ*65bDp}\}Y[Bw\vFKCU+Ure{gl:g6O.?ת}PpzS]|BdJ6a''QQC~) K 玬r]LIMvKJiP#`n0VS5$M4pCi N=An^_JO'W|PZwzՙ}Hz>,GNn+SX[ 4>֜k㭖dߴq ||͹,h~^en2b<0"g7?AN%76W-}*nݡ{mJv=|K2}J;L1 !ErJy^aiTROǪTHbpiEJu9;9Opvп\xp?%5ub^`حkS?z^yg ⣒pV^X/P2yg7ޅn*aAMDe8lϽ!tuND{ hվ(I؛6;&^n8uĂWl+ 9SB䠾rz|cy4쪅JIax_8īO#?Wh~~^:>4 4ܵ= 5өa=KzF7 4|3o>[Ӄ32Xz)*iK^Y$S,ߦeT׵`+aFB4al=;\J\XUn>5җF>wnT`*'$O/~`.8 b~"+>2ȦĶsP+TzI\ ujrk|Fv~p-^'DkmK[e|*Vchɡ+~^:]#e3ym\ɬtw[ WhjVmr\{vF7H]Dm?32$ts$[~P classes.dexPKbEgyMETA-INF/MANIFEST.MFPKbEպ7@!META-INF/CERT.SFPKbE.1w"META-INF/CERT.RSAPK k*././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/urzip.apk0000644000175000017500000002336114717152070015740 0ustar00hanshansPK OC=-res/drawable/ic_launcher.pngPNG  IHDRw=LIDATHǥyPuƟ{².˲ 8ႈ 628yr OCM5V^ʡbY"0,,{DPXϟ>ߋ4zљp a22x@-q &6'xnب4Ռs-<!a^zD\W6=YMQ2ɗw|՟-f̶vJA؜s1Ym®n>/]ҹr8୔@(r1.}j:Oi> DowJ'CRRVJ eMPy|{|7sRNQy(KNnቹM{p՝Ғ6Q:h++-LxȄsՆIT~M≹\{V{TTX@vL (Ćyq]zAnBFZmHocs  Çd6ihh CCfQ!j2OPSեlUY G?15t"GUˢy*(M6\$""DJiujdo5GcF^G"@ Vx\|T$SgOt ::erOK\]Ϟb¶hӫnZ>5^7 S~6B3Щb#RجJ[ =64%1N ('5+٥bvTD%W< `y*VnJK6͵[h8l3PA$M;QZ1[,U3|.nlIuG2 3 eb2V'0`ę&Uڂg ,.!蒎Q1 F|UJvuӆaL06 cLzN׎zXYٹLGBr8#0LmMOS7onDVv͞} DLژ.C{e 󳵴&cY,ZKSiZ=I`҇6%]Nm},ŅU5SN܈mݷ<65}E޷'0CקԄf.̙3;EnK=_d*/r.Ѵ#>)?/Ԟ H\o7aU%(|${hjǜIL~ cS/LҘPPX"1sgsLuP!!"@&849^1|'3}ȕs_-]$IVM1,,D-aEDA̤rIENDB`PKOCres/layout/activity_main.xmluN@=[$BHA"5%$ 'Ql*x$ G;es;wofw} ƘMCt- G«& 99w%fmF)B[nTχUПg!F$~"u.m*~RUx:R}o{EO١R3~`)6d?Tޟ#]{ȣ>64u6Z?p̑?gqդ~,ᛙPKS LPKOCAndroidManifest.xmlKoSGϵM'ǘR"!Tmqh˦E,.. 좟U V,*枩'|WϽg͙3sQS:AQuS8OA MzQz } }="4TCC?CA@D_@@/ 1eh ZBB/} =~z -Uh%oriG{vhxlإi٧*zb#(:bquT;8ؾWgW*} ۺ0qUaںʓ}Xo-V ^QwA-ܷ}5qm { hUBY- {V越UH^ʛ_U?|}!Q*2`1kQű*UЫW9tO#/");W `WKz: ԡ:o"]sBֻZ%BKo/D]ˈKwJ(Tf@hUwӦ)}*k[mWh -чo;EuĮ EFo>¿'z=zlNsq:t9vMtLI3ds&=>yiBy @Qhf[)fv4ώS܆B-bng$3ƘI܆CF7bTިF ^K aoބ؎i`cY,mwD̈́ߤ2iqoM5C7e&az$yώӼ5wНwӷ>\?.>уl=?ȿ|㫝D%"Z+Iz$4_׉!DW!<# '@vz]`<s"x.WWkSo& ^@w3N?~2 Z=A~:x|wi#{ȃx|?~| 0A?#` <΁ge m{m:1oN-`O<(3<" p~|>,)`<  2x| :'`C`^4`^"#t`,&Ly@70A%97` `lwmj] ;Np' `#S`<)pn"jRPJ/@oTz :9i*u]kZI<+8<$\Q c*{RUY_Q:Հ~Eݨʎx մ '`ˀ~-_Я+:? 䙂>߯i4-*ʤ$ǩJrVpDɣJE,[eq H*("8-dqX YO{,Ec b!uHr հ<+s>:>,|ƃ2t? C߂/!}!Tv=dsk{}1YoU)/^D^ʮпʺ{w!W(S!ȾwUjI#hpFϒkWAzk5ِF9"t7Oky>ZXJn:\MlAbZs3梛h@O b1:A+Ml#e?ON{LFΑ6~+vǩfs;E{Ȳղ eJ=(G|>#f2H!pih 4vF <|p;x ~6j'>EEDy>l q(هSWoG_(u'l܊ s㑭9io1a3iFgGy$⠉8ı&JF'B VY]cЋ>hc(&5( Gt.φpsOkޭoҾ.mq\ˆ"PxVD%"<\ Ӓ뉢?WFy_ن]͛?;m)zns,?}3&6ܯ5UϓY9gY'sS!uVJ:FuP9&6uDT=WJ5{L8JV>׮W̝Ϣh> ER%{66o6=C:Ӓ鱨\l  EoL'֥;ץץT4?|LĹoxp٫|[C-J(-3S2c)[U>s95E!\!5еYj܂9U*S9;L=ۭ&ǵ+G}gj&_>槭@A0UP)Y3V+N17ST*.9r wE[+Z0u$Ϥھ^<2Ȳ&Y:UY&;S;櫖_p,{'|%WrJHrw-oMVS3|uv3^f+W|Ĝvن)w;S*&ɰS_+9CTl.Ljhdwkp7NQi0}c޶or.lfi/Z|n󊶵V0ṄO΀푪[q[8& )ZP:+z]œ󟌪eJ1!Ч5c :2TEJv)\-x["c*V1B`t3wĬ Q7ɜHNsi6e3k "{괬k,fCXX; HSxGq~IK e;W#tdh,*38gq sSE^]Nz}J6q(bݘ3b#QRN5EAr^ýs*^5 vx;vΨ7h*+>ރEM!b2 >j2,4X7$+a0shNbk(-f_.|PKl=T,7PKOCMETA-INF/CERT.RSA3hbfajhδAG&FFCnN6Vm>f&)Vn"M/ f&F&&FS^FVs ̡,lL| 0c^JQ~fHY*Tn 'khd`dhfddd`l%kX@8ٍ ̍ L w;',fڦQV^:|Ʊ  F;f\=oOz<*}yC7Zl//23J^w0ɯy_U0|I7'ܘvg&ݳĽ hA t/'k?LVprsV7Yʮ}:FKO6{Ul{[kP–k2ئq/2klj+~=}$!ۿ*%,sҸ-}&c˪ޠ^aKaZj6>1h|Ld<4} %'h`il6Z&G}U&gk7ޒ:!r _{[սrYFi3.WݫegOnP:g؞[7,|iowi^ί-x΅ǟ_.6PK _PK OC=-res/drawable/ic_launcher.pngPKOCS Lres/layout/activity_main.xmlPKOCIדAndroidManifest.xmlPK OC?} resources.arscPKOCT~ classes.dexPKOC,bMETA-INF/MANIFEST.MFPKOCl=T,7 META-INF/CERT.SFPKOC _0"META-INF/CERT.RSAPK $././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039740.0 fdroidserver-2.4.0/tests/v2.only.sig_2.apk0000644000175000017500000002746614717152074017116 0ustar00hanshansPKjݲAndroidManifest.xml=PGa%a @ɐL&3$($-#0|MSL*eTT\H"e {V;Z$ڽ~voR/:HPO?Z"4MCA{ z EE&N]GPE?hBO+{O(ET@ Z!z "QBi %Qm*wвšlE Qzh}7Pt [TP۠/G}Lڡ;TgX1e߇3F-[eze(j[sUp|x.ۨo}0%^Aqh.~\%UcYdϜ93&3ٱǐu=bƖ1Cfh]@u څ΄a[;Y<-x|l[e`5 p</?Xh+8*x` ~( 6 </{h3^}&x| Z6h@/`/M4xowDA tj7 T>.1)x Zct^pLpGy2x > $%BAxkZ]`6i`sp+U`'׀Q\bOoBoVУJ:€4G21KK K;׃aY>*tӪ-J_rMmܗ.MRսF\ME};]z֥]zKosY2} g>ԥlyB!g2eYɊV+U:bnXUWT187*9 +2:)G9MtLBj4Ҷ_ݔ^RLN F_r%nBXa)tDEȠ~2LB*O+D0;(*A&+i LJީYW~BzGRأ._6a~cB6%d*{rqJ_@+1\%b]a$7 U$⿃ B6 qvy$HnEJQr֓dž38 /fn"y^b-!Gx] LU۫\ &e\G]gH"/)ܝ?$<`oR|/0 #I/C~+ ^߉ڼ4qNfCr.8m} l 8=Ęݳ'sebC'w($ΰvAWk#Bu)mQtsԘz\}I_{m|FP-JJ`ԗ7U&/ kJ#0z4{+n.;8kbvNuψ(h9fEWN kDz}|Tڕ?^ DMP&gQ+g1H|[ =둨G?0j-nAXnυmGp{ĹqOŠxJɔ?;סM;BpP_kD:ZC!91x$J*GŜYUĜ0O>0uxcH@:+ǰB""U92;_EA?W1zer_&쮿/˩;iL̷`,Q5c-6גމfm@ո#}|HF"]k59|7oFܕ|O7 ɷvjTOڟY{#j}[RJI^:O8#D|`0$߅K#+3c^4`[5b(bMv31k暭U_<Ǟ[8bl5 oq45 uuGSM6鵴f?Xza?ts?me᧬ V^3PH]]a *)!y#nůG*olWKM7So&u)ê0g;7&֤KzlU {YuҺl}ؿ?;<406.f%}ȱ\I;7f]ʎtv`QlXXt8GټQ _v:c 2:T0>Zy2öm:*"#*`Ȋ9hMF`dd8ڕbzj8y˰KN񨙫mV)=bXK}VCaT2-}\"TqԔaT f#fV+B N_Xe!ox433Ki=/_0_J {:=X,Lc at5sG'e;P+֬yGOĶs+Vߘ^>K]5Cvܕ1:Y69IJOy #V1cWvrtftzJ[+]1]gOTyPjtqX|frgE(u? gl`/DSBSS-e)6ŃݝYLɐ6p|Pax#|"s F.g˝[zzQ{ t-e25j. 󵥥:x`6fMC3X{_^o&ș[ǽo0o-~|,mѼP3Mh)ƴ$Z;bSm$c&=g)ς/~F[#1 B&1h>tCmcX'ۋ)W;_ϩ<4xheB %z~mBBv9^Peygn%Yy sK=$K?Y҅pY>Hs}'C׾־#b|/<"=?tɫN}&e1ODڹA|6ePK }sr res/drawable/ic_launcher.png5PNG  IHDRw=IDATHǭU[P[U=7y] ) I<+ tSGh sMfX^w} "`r?uRh-@@}xs؅l.n~[Y&cPf!ͅu޶e.o_a#_"Ц!GGmq OO@打h[rPVr4ƾ& 70A&өa0pь d7O&"$An<.9k_k1.N MI]x_B689p:][[Bq)5oBuƳ;\2&B@/JOKLhr?Ԭ=`0>WO?.0 'mvV1/.r3hFs!Z B|^%&M'NX}<Һ{^T).7{<9J)mٱɺPzG项MS Ȕn_(mjnx]/*-4h{{jr\5aa+Ѧ@{oMaHv%G7eKWk*dAn%jjn[rXS"DOE .>B']s;`+egⲰS6kLBȁsx_]η ؜YETb']p_$ Ԯo<܏q&c 1p'R0eh_^/_IENDB`PKTgres/layout/activity_main.xmluPN0C[:t`@֡C=#!XU[mI |gJy[*z{x#Kp3 5`Z R=ƕޢָHSo=:[=w )9Ar]á~uT=fQR\MaIX?Aż!"Pgǖqš1=}W:fAf{wd݇Ґ%d}dQ*B|q-v#PK DDresources.arsc D09X Hello world!Settingsres/drawable/ic_launcher.pngres/layout/activity_main.xmlv2 only Signature v2.only.sig |\($drawablelayoutstring|00; ic_launcher activity_mainaction_settingsapp_name hello_worldThX@ThX@T`@ ?  q7 3 LH@6#U0҆Lgy4D`rDu7Y|W*Dl]X8W J00}).Ҟ0  *H  0{1 0 UUS1 0 UNY10UBrooklyn10U Guardian Project10U Unknown10UHans-Christoph Steiner0 140623163212Z 411108163212Z0{1 0 UUS1 0 UNY10UBrooklyn10U Guardian Project10U Unknown10UHans-Christoph Steiner0"0  *H 0 Nۢ>yvA-zmO2=6ߚL:Xx: l9 2t.yi~7Mɍ 'Ţb$62^_pK23[@Y~%t7 oI9:e6@JxAle}PPo%$оQ.q1PDP^HZ G]]*!"~ b'8LkE2l@eSRh1QHj3& sa& aMJ_o}& B3ʦ㞦4x dھR+aS70Ɠ jwK܁YBj\/㥆a/XA5U͎L.<ja.DW&zI(1bM`{>;1H]yJ$p:aYeș糨,K B$ ^XAhY WVN}%!kS;mRF!00U?{쥡"SNd{+0  *H  T # My9L~P1 0r+ˣVτ@UR̜}1ӂC>;>\jUCR+bЬ)-j )+oT)CcQt:өwH}7iLj` K8_WG*@fw1-xfQC3IIN?_ڳH3I'P5f>DMI܇u؉LlФ5E[B׽ (:bQ0>l5\q%Hh@܊Xcgw@~h,иGFsnsDM_xD_@qM W (xs^v̜uQ?yLO݊2Ur`>URCh`ȡ㬴| ]r?LT;RT|kƕf}Wdu0`V݂4@4>"i}-D&ɇҹ|~y,=OS9htJfaF @+ϩ1e+381WR7_{*&2[vq,ML0ĜxM3s\E7STjX.w8f,ឍ6YHe)+20d:"ˉ˰t,0$hZ-zWYCp0l`ssjU0zњ,u&4hK_mQ"CYH_A ; &0"0  *H 0 Nۢ>yvA-zmO2=6ߚL:Xx: l9 2t.yi~7Mɍ 'Ţb$62^_pK23[@Y~%t7 oI9:e6@JxAle}PPo%$оQ.q1PDP^HZ G]]*!"~ b'8LkE2l@eSRh1QHj3& sa& aMJ_o}& B3ʦ㞦4x dھR+aS70Ɠ jwK܁YBj\/㥆a/XA5U͎L.<ja.DW&zI(1bM`{>;1H]yJ$p:aYeș糨,K B$ ^XAhY WVN}%!kS;mRFwerBAPK Sig Block 42PKjݲAndroidManifest.xmlPKcQWMETA-INF/MANIFEST.MFPK2wj  fclasses.dexPK }srres/drawable/ic_launcher.pngPKTgres/layout/activity_main.xmlPK DD$resources.arscPK-././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.364188 fdroidserver-2.4.0/tests/valid-package-names/0000755000175000017500000000000014770510164017657 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039740.0 fdroidserver-2.4.0/tests/valid-package-names/RandomPackageNames.java0000644000175000017500000002115714717152074024213 0ustar00hanshans import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.Writer; import java.io.InputStreamReader; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.IntBuffer; import java.util.Random; // apt-get install libcommons-lang3-java //import org.apache.commons.lang3.RandomStringUtils; public class RandomPackageNames { private static Writer validWriter; private static Writer invalidWriter; private static final String[] py = { "python3", "-c", "import sys,re\n" + "m = re.search(r'''" // + "^(?:[a-z_]+(?:\\d*[a-zA-Z_]*)*)(?:\\.[a-z_]+(?:\\d*[a-zA-Z_]*)*)*$" + "^[a-z_]+(?:\\d*[a-zA-Z_]*)(?:\\.[a-z_]+(?:\\d*[a-zA-Z_]*)*)*$" + "''', sys.stdin.read())\n" + "if m is not None:\n" + " with open('/tmp/foo', 'w') as fp:\n" + " fp.write(m.group() + '\\n')\n" + "sys.exit(m is None)" }; public static boolean checkAgainstPython(String packageName) throws IOException, InterruptedException { ProcessBuilder pb = new ProcessBuilder(py); Process process = pb.start(); OutputStream output = process.getOutputStream(); output.write(packageName.getBytes()); output.write("\n".getBytes()); output.flush(); output.close(); int exitVal = process.waitFor(); return exitVal == 0; } private static boolean isValidJavaIdentifier(String packageName) { if (packageName.length() == 0 || !Character.isJavaIdentifierStart(packageName.charAt(0))) { //System.out.println("invalid first char: '" + packageName + "'"); return false; } for (int codePoint : packageName.codePoints().toArray()) { if (codePoint != 46 && !Character.isJavaIdentifierPart(codePoint)) { //System.out.println("invalid char: '" // + new StringBuilder().appendCodePoint(codePoint).toString() + "' " // + codePoint); return false; } } return true; } private static void write(String packageName) throws IOException { if (isValidJavaIdentifier(packageName)) { validWriter.write(packageName); validWriter.write("\n"); } else { invalidWriter.write(packageName); invalidWriter.write("\n"); } } private static void compare(String packageName) throws IOException, InterruptedException { boolean python = checkAgainstPython(packageName); boolean java = isValidJavaIdentifier(packageName); if (python && !java) { System.out.println("MISMATCH: '" + packageName + "' " + (python ? "py:✔" : "py:☹") + " " + (java ? "ja:✔" : "ja:☹") + " "); } } public static void main (String[] args) throws IOException, InterruptedException, UnsupportedEncodingException { int[] data; byte[] bytes; ByteBuffer byteBuffer; Random random = new Random(); validWriter = new OutputStreamWriter(new FileOutputStream("valid.txt"), "UTF-8"); invalidWriter = new OutputStreamWriter(new FileOutputStream("invalid.txt"), "UTF-8"); //System.out.print("."); char[] validFirstLetters = new char[27]; validFirstLetters[0] = 95; // _ for (int i = 1; i < 27; i++) { validFirstLetters[i] = (char) (i + 96); } char[] validLetters = new char[64]; int j = 0; for (char c = 32; c < 123; c++) { if ((c == 46) || (c > 47 && c < 58) || (c > 64 && c < 91) || (c > 96)) { validLetters[j] = c; j++; } } for (File f : new File("/home/hans/code/fdroid/fdroiddata/metadata").listFiles()) { String name = f.getName(); if (name.endsWith(".yml")) { compare(name.substring(0, name.length() - 4)); } } compare("SpeedoMeterApp.main"); compare("uk.co.turtle-player"); compare("oVPb"); compare(" _LS"); compare("r.vq"); compare("r.vQ"); compare("ra.vQ"); compare("s.vQ"); compare("r.tQ"); compare("r.vR"); compare("any.any"); compare("org.fdroid.fdroid"); compare("me.unfollowers.droid"); compare("me_.unfollowers.droid"); compare("me._unfollowers.droid"); compare("me.unfo11llowers.droid"); compare("me11.unfollowers.droid"); compare("m11e.unfollowers.droid"); compare("1me.unfollowers.droid"); compare("me.unfollowers23.droid"); compare("me.unfollowers.droid23d"); compare("me.unfollowers_.droid"); compare("me.unfollowers._droid"); compare("me.unfollowers_._droid"); compare("me.unfollowers.droid_"); compare("me.unfollowers.droid32"); compare("me.unfollowers.droid/"); compare("me:.unfollowers.droid"); compare(":me.unfollowers.droid"); compare("me.unfollowers.dro;id"); compare("me.unfollowe^rs.droid"); compare("me.unfollowers.droid."); compare("me.unfollowers..droid"); compare("me.unfollowers.droid._"); compare("me.unfollowers.11212"); compare("me.1.unfollowers.11212"); compare("me..unfollowers.11212"); compare("abc"); compare("abc."); compare(".abc"); for (int i = 0; i < 300000; i++) { String packageName; int count = random.nextInt(10) + 1; byte valid = (byte) random.ints(97, 122).limit(1).toArray()[0]; // only valid data = random.ints(46, 122) .limit(count) .filter(c -> (c == 46) || (c > 47 && c < 58) || (c > 64 && c < 91) || (c > 96)) .toArray(); byteBuffer = ByteBuffer.allocate(data.length); for (int value : data) { byteBuffer.put((byte)value); } if (data.length > 0) { bytes = byteBuffer.array(); bytes[0] = valid; packageName = new String(byteBuffer.array(), "UTF-8"); //System.out.println(packageName + ": " + isValidJavaIdentifier(packageName)); compare(packageName); write(packageName); } // full US-ASCII data = random.ints(32, 126).limit(count).toArray(); byteBuffer = ByteBuffer.allocate(data.length); for (int value : data) { byteBuffer.put((byte)value); } bytes = byteBuffer.array(); packageName = new String(bytes, "UTF-8"); //System.out.println(packageName + ": " + isValidJavaIdentifier(packageName)); compare(packageName); write(packageName); // full US-ASCII with valid first letter data = random.ints(32, 127).limit(count).toArray(); byteBuffer = ByteBuffer.allocate(data.length * 4); byteBuffer.asIntBuffer().put(data); bytes = byteBuffer.array(); bytes[0] = valid; packageName = new String(bytes, "UTF-8"); //System.out.println(packageName + ": " + isValidJavaIdentifier(packageName)); compare(packageName); write(packageName); // full unicode data = random.ints(32, 0xFFFD).limit(count).toArray(); byteBuffer = ByteBuffer.allocate(data.length * 4); byteBuffer.asIntBuffer().put(data); packageName = new String(byteBuffer.array(), "UTF-32"); //System.out.println(packageName + ": " + isValidJavaIdentifier(packageName)); compare(packageName); write(packageName); // full unicode with valid first letter data = random.ints(32, 0xFFFD).limit(count).toArray(); byteBuffer = ByteBuffer.allocate(data.length * 4); byteBuffer.asIntBuffer().put(data); bytes = byteBuffer.array(); bytes[0] = 0; bytes[1] = 0; bytes[2] = 0; bytes[3] = 120; packageName = new String(bytes, "UTF-32"); //System.out.println(packageName + ": " + isValidJavaIdentifier(packageName)); compare(packageName); write(packageName); } validWriter.close(); invalidWriter.close(); } } ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039740.0 fdroidserver-2.4.0/tests/valid-package-names/random-package-names0000755000175000017500000000030414717152074023557 0ustar00hanshans#!/bin/sh set -e set -x export CLASSPATH=/usr/share/java/commons-lang3.jar:. cd $(dirname $0) javac -classpath $CLASSPATH RandomPackageNames.java java -classpath $CLASSPATH RandomPackageNames ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039740.0 fdroidserver-2.4.0/tests/valid-package-names/test.py0000755000175000017500000000156514717152074021225 0ustar00hanshans#!/usr/bin/env python3 import re def test(packageName): m = ANDROID_APPLICATION_ID_REGEX.match(packageName.strip()) return m is not None ANDROID_APPLICATION_ID_REGEX = re.compile(r'''(?:^[a-z_]+(?:\d*[a-zA-Z_]*)*)(?:\.[a-z_]+(?:\d*[a-zA-Z_]*)*)*$''') valid = 0 invalid = 0 test('org.fdroid.fdroid') with open('valid.txt', encoding="utf-8") as fp: for packageName in fp: packageName = packageName.strip() if not test(packageName): valid += 1 # print('should be valid:', packageName) with open('invalid.txt', encoding="utf-8") as fp: for packageName in fp: packageName = packageName.strip() if test(packageName): invalid += 1 print('should be not valid: "' + packageName + '"') print(valid, 'Java thinks is valid, but the Android regex does not') print(invalid, 'invalid mistakes')

    A.=FGٱLLW&{A {MC~"MOE~ sUrQ0"puuI;{;_wH}z\weQCδq7~fiQ*W(;.\|a f T,gkOJ#^햇rݫ-QWYl.hA8nu]=Wx?5!ie\yQkoGb3hs ;q{ 1o33Wޭs8<_ǽAN++KkkaGm^Oܯ2c{s+cTח-=9T^qG4tX<3|4uғb.XKs׏7=7{ýg1MR/J}b;[MqM׏ӷ0/;Lc&f%dIJmwW1˝lymw%{g~\pw+νƹVk}nd}㬜(W5W8*lo s,R,m?%ǟLtp~ω'Oēy>E>n`wn[ k{ƃ9iEDZ[ ,FMxy|ZVܵuezm彶.u弶:k뽼nu 9&ߴ{ v?k"=kw]:z7kƃkվӃhϭWogzan-׃\;RWz RW_ g(\5Ү=>ssb7ޠ񫦥=@OPxW Q Oyxo8|߬qb:)\ bglε aH/-V,SOFS7Y3dq>/›­Ӓ\/ڴ{,qf 7xO[p'k lbmyP5}+,+-¯[Mߴ*WY-߲ mw~«^m~Ÿ*)P+ckĿX&Jl]VbW83-ޱwl7s]ʆ;~|?zVX?y;>~߼w>>Ȏ:>\</~o7n|5<^S_9x5ڥ\x~zح=={|~?wG38W?8m@,Pa/5Ry)uSX};y16MSٕ쯎W67/[ [8 X7|Q>:n,O|{Z{h5>pi-vf}5N_{kQVkբlw,z|WFk:whq]{||[l#|Of{omce;E?T_yt1R-|K,]i.wr:4qzoމ8wsוsU޹_N]*ybpy~[c?TE7}skZѾǾ]jO:2w~(Z®j_8u5Oy6C| oUvά-zNg[WGd쵦OǦgyτ}bt>^g;Yv5c^icG4D>Ǔ8l gǫ뭼u|AxHA?~1WoyƓ爯? Mn#G/Ɫ)n}ecFK3oLuHcOo6ߚ~RuW3[;w\ɌWߛ\/|,>?~ۆ/^Z:_O10^>uoOosٞ:˳}{m_ /ʋ?ۅR[)o/6~8ߵʚ%h|gW*\z3w{qP\)H^糫;UFAw{aý7lUGt]q .c1[*[L-mz^q群LNоbE̅^~13cc7G=ͼƻ1cJۘWro uu-k hב| Bj]YZ+{~e8o.1;&pKy)f1/scɺ-G8vnmw;<]]} X]au{8qw %kzZ^}x/<)-Y^ sS}OWWOOzϕw2{|9RՁE\N񏔟_e"c G)ՂxߺJ-z}dB>%ƾˌZدzP׬o6g%x'C[8j{g[W/^'y_~Wx[Ӓ0M~?{;} o'>/^Z??;37'FtkPsשWV`wmG sSnpu rvp / snp+ Yµ-|u-SؿKy}QV؟Mgi.RYśt.%kFO~Ck͋vMk#_5Q-a|G=g'P[a i 1?JǮkp{mZCzlg~?^{[ަUvG;ީpJwNV$n{XrNڴ]xSW*|G*|ՅQnlìiSxl>ʀ>lc^p_7 ׹حiw}gW:{q ho~E~DZ~Nt/7yfo<)<ڒvvsj/F~~,+Vt-ni.n-2Sl;:h,gerM~眐[8NL8R%|7KXnڊΝdɼK-S7XϸA/,<^bAqnS~((xުnc؃0뽝zL >k6XUxǮub簳H{ԹEc#(7W[ AF>`íxR73?X+'D㣸6ߎ“ Wsw{mPNIP&տD#_҂}ۤyye6Ns|k~}z=Ջ${$ U&~1ڿiv$5}[^g[]r懅tkӍ7qy^Y _nӓq\mr{+4HGXykqLUtW0>s¹Ҵ,=6Q;|;c}L^گ}B i:=(/tW{Y:^aޘ\5Cw I AH?38uΓ}12=[;Zإ33E-M/N[;Hec綳p*=KZ+jey5x4]l]y]4Q+϶OO>^giN˫_h^i['8S>]|&Au>=woShyS7@ ]cC97z驦 |rܚdܗ5 xl9Owg~hwf7y0ӻxA7 U=[zzzzV{QzRqM9n鹦kzzyz=kv]`z1}GsgzKy1u=xJ 7bק=醞~*'x3i{yzINg39㱢srtKs{]R㎙~^;=[v|]zWLbF+Of Op+swӒuӇx-qk`I*}-2}׹v<;9>N4$NiEILwSU|krwY5(=ڷ693fw@S.)c|RΑo~ޟ>7p(V]cm_VOiz~DگrHM/|]ߘoHQ_C|wWo|Ҕw>Oq o{qCzkNr,)ǽ?(lh.7eœT?%E{o\wD^|ysp 7>n }wg$~V.Z]FnK%;/uiT/m. ˟[/*?4omvfYmD,^eS$-o7o>8oYwh8*k}DM]7֤C3KD;nwՍRIp(*[+_O;E{$wR>5Q=M[(~)򤭛::Olp׺>(>;m}p m"jC{IP󕍧n)|uyΕﰄQ7O)mRg>yҞG/'=ۥўS]#[L(UhϣSv0_yL c)=K/ShShRG[pRu'5X-|ݯ]'f|ƭ9{~Z29pK"ib t4{k+n n"ϊՋ% YKWmˊקg- ;PeF<'=>w;=- ,dzmzOtJ"xOt#=+Q{ѽES;t OI{I}C=tKOghOOϋ'YVD. 9;zz`"\'x >nzhz6tP"x N{/L8'/rsbstx7}m+9Js;u+To.gwֽv]BᶺƽT]yIs\(Pg1rׯ [nn#L+#I}UzF>W>טk>kRr㖧GkaO_psRI89ǚ'sI}gxF7㓓&C<}s"'{z|½{Ͽs6ӧzvw{K,}//;Y;&MLߦBOv7wwr}*>6}$oB1}ueStL}h[ﭘOk;G}?73|rběm0zips,#acJ))1%k,ot:CYo oi+(+z(ކ9 Ǟ݆6|m6Ԏ؆Wmۆ6󶡁 6l񶡑 ?؆ CՇT̩pR(&D-?w 4{'Ϻy5sɶJ?OE_^mO?1^mO?G/2=2${,|t޿{>nIýr2=OK"xykrɶyϢ}vy-Iצd^%w+WAxvy=]nA7n~杈iz_s1˷4EtO8~/C?rۖi,)+&{HQ R½»mwrwmūW;7o|_|/ғן~>{wKL*dhnB"ݞp)'ߪb󷊹>/:瀨qny8^t,j8T= w=n{pmB|^3ia^oM"xW=a>rkMOlj9K'zzi^pQRpM'W { zK3<sۮSv@f{z'&I={bx ŋwd>mwd.o~׻a2o~ze%b&d.g-9%}N.2wd.[ }}K8ww\tJh.KF﯌ֳMrq/wSgx^Z7O'w<|Msݻ82 'T'"5S~}*x*[wB{mڧm*^Ԟ, wOu:RzzYm>8׽k1.8c;POxj?({W[XyM=S ?v;<ؖh;2$~N_w[qXi m^=6hamᾍoZ:|w6{KJ/wKex,BsneN8l9v>m4]R\g~]K'[>^l@0˷ݏ-dZ+nwʚ R-r+̽c:ȃwQeyb&մ{\z7?~e}q%%ǣ+=cd`i<;((ߙn)ؖ -/Y"(!D&5>b"*MhKQ JDE)>A &&4HHP! >=g;K{Ν;wggszp˨ +s}Cqr?V<96蓮R*_88*wT=;s?_Hw1mrSU}-[+s:rI*wgͲz]M:ҕ[')MU"7Ecq{Nl}fPul޾]~ԛuqT0u?.uwkK>ׄ?zEAil_KƥML珓re\WcYV~Q%~JQTR@=FcKϹUt}6V2o) g>X=ߟic)鍆חK^x>Ø|yK:3x9^ @Yn3|כµq+;Ϟ}IkB:.<<|{wyDwBK:H$>hV_&fV9v  ք|CkCBu!!!Й!E!J\|k/5:JְY};:ϹmroElgڮ8vMfY~(/mJܮ }S<Φ ^crmTA)]lKmҖꕅ>`f(kx RϖJ }ҿ$E#q8ēv94-Pml<ղWb[%#ZXEڶ%;ti,Bk[w)mwpW}.~Nl"7CJg[nMȖ{M+Iz`ŕsI"݄ AzG8ĭ8?*y)2 Xc;`'%y r&|g%+o"Jbrj2OJ'ҿprcH+$qWD6t6ؖsʶEzy~~SvQl>ڄ65sQfUuHʚBN[rEHK.v}ZWwBw?!ha?Cr4>3H{z npmw-x/ocG r?[? ϥ,!] 1qGE-"7Vusn߇C.7ߚjg a(#8CnBNX?vOHxgjOp7L%6 ®e#??ܦO+j hB`]ԅ,/T;Y T_~~®IݙDgF%z3㕣K4V_>i`hy0[ig]hB o`|lO%Ջ-^#>] 'dAJ]drڍDhilY?FNz sz~ZuD.ӕG;i;`; *0|m;gP+P'E>U/ɉ)*n66pGݹ'kuuǗjl%"yrx)O 16~ dSp+!B-kp]Y3}Oqw?W}O >/:IGUFǥ.2րgn#1C#!u:/Y }l)8%KDo F|Ű?ZZ}qwrhܪ㹂)Ox>_.v Y^-ALuMIEY M/UW]r2ZЧaENJy.`ٕ N[zSlHkg7c*9W:~[ cPlCUjxٍڠr=l:EUrdנ!$5̍@NH tAѮ*NtD9Ԏ.ӍCtLzk ]\Sm%)O[ּ)A]1cbǤk%N+ݽ#7To~W/wڏ?_Ӫ 2?;bN `{>|qN|w8w3ȗ _Hfs&&}p4/A&1EpdFrS'ĞjLwo?62$rjsf Cj0czm-Yws]e*Px}\<]ˡMΥ_~l;ڮK5sD B a )+ҩ8N3`}9qS4~pTGI9P?Ggyo)37v+?~Gf1O;Os^4:ԭ;F e3O2rY+I샇{:~e;l{v|^!ɸ`va^:?T}Ů{DK*W8v18lifp% |z?کlKws7 |$"\+XM駿*Z3dNr=qn t.ɥK{3w]Vsw[ wm^!VVQNM'rqĤ{p59".%V DAV$8{[(j5:lD~ҒG}\v-(n'" ? 0oyA3<ɃfJGvu>?lV}N,Lp55U`8Eף8VaNK^c PNmZϋGvFy)wW;4SGPxH29^cKWlR@x)B,n(ϟ?'/kH#ⴚDܟ 7nEV |{w'nuOt{ZwH@EOck1-J癜rr(I^5Gn;e '-ܣ UaKgyŗNߓ!\ > ahԄJqt2#ٗv]u_콕BznZ]{v(Rxj fbe ɺv푴pOiX^}x"_JPK)I)r<}b ĕ g\Aa"e ^95 rV*("FD}X) i?~nfqR}E" [%`8ӯd>N"4R{GнO3Vʗ12,rxJ S8׼ ܱx{&B3fYa^6 !hntm ?ʲtwOz;Ϥ)l`,D߫q3&TLr? ?Eywr{ߊw;Piw-nDP@u(J! ʳf;'E'0bdTRB_k ]a0[FՓBe<{,2Z\deoDF;h3m{ .Sx$g?$s@ ¿LNt}'Lokv}t|ee3K䅼]rvvw?ZUptH]gt(Muʣsa$PGe1Ē.l}@yH,fQꃄ$xa0)P,5X\1iXeUڧ07Wr {^O.=8wC;:jj{b`qzC;_=kS̾J8C "jڧWB+uU' T;Z$F"2.% mG\kԮdߦ~-0)p\KG5Jۏk@'ܣ46-ռ ؙay#HFы%\|Ӝ7e?G~YTڔ7t+ȥL_P>Di|pQYh[. k JJ!|+aTqgBE{djεzH0IO}Z)P"]7ܥb~Io]ÌxjBAޙDǖ=ud{gD؊?I0W7iOIR~̛ܹ~ ]PpyPn`O15e6_g{F>oy%5>|ĊO ifR&}j.0/o; i+?&+lW< pb٣{#KrQc\]uu\7$}~WOk0)vXK8T|s σV]KZlop? |c¼|[zpt%xԍD ~jp`L:A=`E >cyi?YOG#w#X_dfQZ I@bzGU9KԊK"k!.csQ=_/؞ KS)g7>Ge\1Pmg* b wd.ɠ%XYm@. jNOs2ibZ4&7r`A|2#0_%v} 4(P >73ÔuD:~QpAROW?6s(f"<*)*1ڢskCTm6 ($|;Η 6E-A9P*9<&ڣpjqLDC2lFidn Ka1]Is`nptq M*{ydy!&h׍ձax{ dނTAvPVUgΛ|Ir$c<0ɐG~JKc?roݖ]40*_%ZWrӃug[7; W!//f7r%<{ՕedYBeTT z} x.=35qM5@$&Ep=>Xkد`|+nL v\uL)א_6z7TTSH&^!7{ (i%&h'r-".kͩLw3{˅!};G^t].r$ ޚ"nGcPtv+ 9UNب8s%ò >x `X0C(;WCjZϱ_oAK☙> !v;KwAP+i|OP?+X>Ӷ 񮕸Zp!-FygȘ_p e+Q$RHy[6ht /Q_W H\F+./L5B?$gߌ캪Ud/Ps0z,n+)MVTRAgzJphG!ڴ&By_g~!/\*,5 /]I\,s_ ?2]CԻ#s:z\|>lgCV_KOvº_iU+?GHHD/:ScA7Y 멜#9-nnV^>Fse4vOǝL=]ᮟwN xh*nt&(وUlnzi4?YzK/40A@٦fyxq_Px-! t?5{qF^lST+]9b^h#-1BMLK M 6kDSl.MMA?#8qvρf8\[[yJ_?k\}`(+Tw2S.7Y,9umo'NHdr^/3!"0,J4'qk},4=̺N~E!m0^̞䥡BmF6ugt.~Q펤}֏)Cv`ce3x6w8f W4p{#Wgй{GnM1\or3W/ONunW=5F0A<nZ*).3Ov%S0y,Te:VOi!dx%S]7V'&T]%c*&M`nbtտ#Iಱjٲ>7]n<F0ױ3`C?>h]ܳݢIl&}mM"WsB3d{V4=itYE-kbn1\^`)ž`Za`{˗m% o*3d{9ĢqP~<\h n֣ IkNUe;'cfsV53b>w).wW,ى:SgI˒A.Sh>AHFx cmc h࿓I c\ЁO(s7gDDN*.я}Cݼ`kjܙd#%ތP89H/ ÚJ7%}w]kmҿH3 ;+Af<`3PPtK `9q-H4xsX̝h^Z(l4ٞ5뚔tQ=$x;q0NUog q v0AN.ϏPN-*n?h*ufj>G|%bd,^+G`3Nqʚ4G<)M7^Wؿ=.vjis1X]Hꗼ䘬F_zE$E0jHJ:=m!*MsoTm`kKQz@KֈɗGxAP_ ,g@Dңyvw)BJh$Pl*ٮ@5~['ѐ+M$ԩq(B5}tq[._ڮş;=P6Sh0U'FP(/{(?,7!;b~Ey]p:AJMNpm+CE")>sW2X[ hٸK{T0pkEK_=si/,Q\E9&P1DOqE,'[| ӾLzkqQYޮޡmØg Dr^7?/ !*S+t͍ %ިr[wyhf2Ӄ{H!=CoK# 95ٝTM]LD$[^ڀ?_e/HSQ .L=$pCC8\^܅*PwLD3 Cx`/ 4.~} "#<-DfWS\ P)/`JE&]9"!tA/J]2<2W_HF(%'xA(s2Fճf b6t/ 5@:dld$eg1 JFE6_)H@uwV$:&k(sf:^Gs{m[Ui'}c~jLp]o9{xHv7eC"q8#Z×]R\/:Ԣy\``o!rrnz5c9LulMmGulO-䣀#@% hq2 F n=$f@#^e-??{s"uȾ]xT e8T|jsxr(Q_$ l/Ndm;OC`qs^U_EO4I:S!s eLg~]lR?8EׄfdlMH2_u&kxNC)i&V/}*"ԅԛ^rGvD 9()@dTyz{-޼ sYgYx\S%kZ/kkMu9$qxhwɼ/E3[X8\N04XUI)nh4҂FKϧ~QgE z.q"y̥N+-̸>%#F s9Fg]kȗ.;\yХn?2(@0u+uݘJG|;1[LR" w`Jx w͡aXLc#%n|3.+nTjkO~q3ޥXВVl.OL*}Hɢ8WHp{rY 2K@gr݃37d(%JFwUtpIaKg;rQ^Q$!peA^ ]wNi}wCU`/Ţ(z[m8 }ͻpz]:*l=h1?KWfoZ̛{XA[ _֢: [Yy:5v?nx1͠Iގo@Ǝ̾=ݹ770iGU_Z ۰0rOFewEÝ9HxKW%=:f/EMjO R'\),||f5 p9+';y[cIsȰ}&_nQ?U`Ya=r~=$Rk.t@&CE+;nۯ1P/s+n◺~v㮐c[bJ+ָSaj '%I,U8hem,>-=~X6\  6nۃ>vs]U:X~>tx}*-&.ǵ&9Ÿrp,rSJk,;06\r"@wM뼏i73%P ^YCДW48{>bhlBdyVҺtטE( "n$VOZ$ǗxsϡMn)Uuʩh*Eg_YYQ%/yf"v?bۯ6<'9(#42$gCf%f)q/c~P~ `~D.$zqgf6=LheXWȴLJ+_#6?XցGDr_o^yK*nT7PyRڂMַܶ9l1姓(`8{7 fGPƜ:HWGpъlz aG;x V<"a9ƿ}Rҋ 0XGDM'pX1; yfg-i.7 "h! (Vf|C@g0kb]W򩒭]6'M+pIj,kFDa;oknF%,Ď1Jq﭂(}^Z㏡WoѕZpTMlW#G3ޏEeWž1]NK{LB*+ fN:@c4Ar+Џ\3nmFoEU/a*bV$Rc-9 {YBfЁe&{\Om)G6/5mvJg)Pb3{/ۧ!@7eV.'c"7q_=q@ƽ3Ww-[{S@TT7>AuHf GsXs,xJkbRb m},m-K '}EK&ҎyE" ;'ԆehPTRUS'Qq*Xߡ3 #q v4ݣ0v[Gj#M)=t)Ț.Gl nA(Te@rՃ–^8|`QG|& D,6lD61/2|y+pQ!C*<]s<݌8{9ޔ>Lq$2VKF0t];S2dÌ=|S~ZHþOH-jvД5Aloi={kSbBmʫ`?<ǑHzOs Ll/.u*BIpܒ^E\<+_#M;)z۞Ulsu;/G0HvB=~dL3v^bO#L%Ye{Br_뤶|QqB`ɧRzҾSmYSFwg$MLP}"z7mJ:7ЛfKk^qzٸ^Tb}'u$ODo~~Y[߸r!:]piYt}ڃL9f!uD3 2_UwEşz}="4Dy\*FֲnfFq_$u\Ck,Fr+ϯ}{4WQ%j!NpLа cZ&2ڋ߿3xyyњmT)|vêu,Z15Gk,=W+WqlőrLSW?^'3jp4_Q# >j"h ={r-`bYqx4, uY'o[o^4(a;?w}^N$˜4{<-B}0Al;X.Xkg=.lz//*#hڢeJ7˾ ayߚЄ]S_+Q]LqjF**~B50>_y +5h6QԶKky||?Ŋؙ/4nA_Lk`D& C*$GXUzY6ˉٞzz)"/ZXLk)gG Q q^ܹPC+.q5~:Qy{W*g\gtYk* Y͗׎n5߯}08v03îo|'nrNm:XFFDl M QG_A$fm^k){xOg"oW=F;l ~1g9~c0ș$xDc)S̚sNա}fwc4 _ZP@NIH+ 5+ϊޠڜk;ה~z,Zs4QD[pZ,}*҂əG?U{sLP.YS" πpPf.ҸDԿnn殎tF"r-zYx;kՊ7G&FVi#`XcLb(GlwTWy/?޶>޻v޽ :dmzM=(~ {xPs*4T,b'P[*M-ޞ5" V P{Z$o*Az.`ߖᳵ˫g@ Rq}kz0;;- mg6QP%6rL \L9ON~W> ׄ15'osc[^2+LKkS1 _w~kZ3U{Pݪ7*Ц嘕1pn'rԮ{,9$m1a@ .B֛6hBOݟd3ۖUo0#~1C=죵q42 zЅ6Qp+蘢ٮLjOv OE 2eT ,*}Jz{c(/@Tb_Ĺ҇†.a~LϮ_n̉ "_ #@0xMbsͪ-h[# zj9\*c-BTjfڑ\/w }y,~E:vNGת>Dl h lIîuxX?erGܶ?YW\eXUs=s 1\q cKOn,ac8t'.Rv9{ ڃs&O )0mМ0} !̲͂j꺜1~6uZ>\߃}2Lqu}ЌFq yA xwܯuGs.SN&;󁔋i>(xn20qV$7?%@ב0UlZ=kh@AwcWGb?ekbw\vd3VkY3OQ>_g]{,\Ϸn̓|Ls sdϓLd9C'>ruTS~iJşiW.'AM0EKY0ְmG/rk&询4#izc^C byy !zrmii/%h^\HD5[ \6r &;&)2}Wژ^SKzB?va)RYZeۚ R CĊY꯽?ǽ<~NPtx&QαKPr^F[69Eۮ^'Og.޲<+>uq_hgDg7y|p.<O3M[c# '7{a_szt?S< ?q,Y: hqGJS)>BEm/xOsY\ĢMUhƎتX1+j4,W pG͏{N t?Y`BxoyEaql0֍wm<}GHH>u]2 C`܇DΡmH~W'f߶k |SPTCͩj8@~:*-bH )?nvG?6EV;ʦ/75*3ug\JsЕF롨Im\]ZbsLxq]fFϫQw}2,}Is# l!1 L-2lٗJ7yeFl}e_s\[H9)p`UW}G+{-+klFKpk.pRثʦqܾB)^uۛȩ uo0Y5%09Xʉ _ȧO+i\fBb Y-@IZBWQil=О_om3E?Gp¼}¹M(gn%w{úT3 ҘznPsO^L`q:< /bUm7xv3JB]`sWб}Wfd@L u ;|ҁ}(|Os>T ׳gBض廊P`y,XjL! ߅A}&G<;k3g?+UϘc (=ׂAI >)oVz)oS?D`f)COn,W}s6*+˸ԣS=8V^Vnf[YmII,bBuX0[M qSTr{U?b#\<}bL)A#[:?%[_&ƥfw~R|F;{TgXcY X4:=?M&mOh ^!Zs )ܱtXsn3tvǁYK`n'D |"t(-ĠDL| ~:,nG]'xrZF&\I:@8kdM,he(3n)N邗7/,r:;3{]5Dd! ֺE"UKpu1`OZGpYV:w+F#﮶0Hq]Cov^ޱIӲ~רtޕuJӯIˎ'O*$QYj@yP|߭+?pzE'ՁK֞8!Pʳ2rYV1 7*L+YTd mx~]Kcp%4 Oր>P+ ,ޅ"f-(:XmU͓( ,5@@\TYI.rӹ78\.Sv#{-ZА 杢6,jo= $>$ϺA=d OBb0`n-JFA$]a[؟jutCӁ؅\+`lkA7\8h`>P$.c݂Jq^ygBپ7'o8~|&Rr*Zg{t} OæY՗""O_H̓il?*c2#'r':pհwoX c쒼ݙʠokX=,d~JfۤuAF5keb*!a_7kԟ1Fu~lUz=4|ќyPo46p:GxX y~$%ݭz1 džlÝztǹ3i~ stgLu%1O"AV'Y8`]s9o^Ȋr7٩uq&dJ}-phб[וҕ1@VO4),#c' r (6(V՘ayе{h"֞00xhl]|y-snqUNaPxMz!J֨Zy5UZLBPcfE_j݅6)Q\5M*將d=JXhINvm_ש4OLRUw8tT һlp*^5V jtԣ鈎$Ba<6BI(B/)A4.?*kGn"oB1sB闰̠w٘]畹MyzPJTģˬxjIנw& q[jhMpa>Dp?ҭ 1Y=;)eszI/\Cxjks8 U!}lG29u'ʦCDl:V]MW[I.{y7B[ f\K?{D@q Ȉ#Lv̎g\R@[ f8MpC"&os_-9p6\ʢPp ա(F#bc@R? 5*/ldE,YlWP*=\@+(j{U\] i8LsxҀߌG#a{ݺ[Vģjٛԝ?§Ȃ{+I?7|A[)ab+qUE8ĈEa<DWy|Xc|rRGQe{:tEܴNVV-'v+T>= :5Eǂ ɩUx;k)+)Ň/󺐺QS:4LcCD 曞Z)xdۏJ]|4#w7-UXiYvWJ1ԍ/) Dj }z3B,>Z8玗b G{+f7]lǴ<Ɣev\9m:8 9lJ(W֏ԡݺ\$eoYx/ՔV-L7Fωڼ5sDi/8.LDgv]MPh%oA ۏg$'sSW7Ua>fE]o{;I.bɬH_>/OE^RQ Lf7)Hd<ю;mŁ@h~ Zf /%DuUFC1 Н|sW' 'Iй}G~y9;0Z.JhY-xUT^}%Z[a qRV>̟A?S^@沉- i&e|w1X 14X@RGnКm7zi[U^ih&lbi6E$Ab [3&ۣr?Hi9G> V P ў={`.\ Ϋ|9GamU7,]}/8TCȅ$HL?3l'e 6f@tz\ c 3o^YJc1r9zy* ]C s(f7h )N$.8z+nvU-Es[?Ri:3ռV3DTÒ1*N<;Esþ}A#b%D=sȲ^kFAڦ<2hb?+U+LR#)"=6,.%\z~?ɶx6[M z+w7[A A,#nnۘ;&xxi"glaQ8Im{dk0fFb`:mGr֪?,0:4j*[D9cg:H(e䍕&38ƒC> HS.ԥ-g@_VOiA~1EУmZdHޠ ? $=3̅^"e{+WE6[rıp 8 ۆPf꼅~Hå"fi9Le7su.U.dIT2U7A z}Rܻ Ԯ eeyYpK8`6f)|6ܽ"FO{jއ5RPaI\oߌVZ6H<6,gCis^ĤC~ 2* >|| #*&ȗ) ?5*E5ʸ# |ێߟ04OXn ӥ-tH[?I(]cSl6+mUdjM(EGpdJl~Z!C5U묫<+J(m!0LU=xo_ve+WOyLK0!umh3J`欄Yvd<-CFёN [CˊOԙHqd]^=ze)S ؓbK9{V|#:. {nԸᱮ*C>4onκ) q1TSHGl<{[1=KUppCǙ%cc;7W鏻0 ԴhdqjdeA<ooΊț8j.7Me0GpFE:<@+N[V2b jPa OTs4-#Ro)cS)_ E!KuNp5BjCD.*1=$9"˗nu^"n.pjw}u"+SyC}EgG*p .aߴļ u?/ Djl:U\v}AFh{Q«MQ!bLZHjIΩ'"#͒th>:'y>0:& %Iga]toZռE?-~" UdfNLVb{}N\>ϧzssvS%LK'%U: qpθ]`VciИع=$OkWs]i|.;yP 5MgT}~ty6iEq*@?LcCv.(Daߟ^ ,٧8=;Hmh!^1\(7VP_9SAϘ*Ry]};t7oӂٹK$h+ڈx&=bEODSuiFp%= b#&>GwiƅQܔ7NB?I#4? +|+nW7^727TʠKPR8Wt48鞌+z_ī{?m\1q r=-#BBQT[ +C?30UWb@mq?y˩~8М`.d &bX> [sMxl釮"+ z%߹ PE[]a(}Swgxs "72훴O"7Adij/ҷmHC ہwE[_6v}5=+Cٷ;PKQP^|m旙MWlf֑_% I]Ӈ;7+{8 '.|uB` SAI/nDt^8rEw0?jS1ù3%&zD+V`c3緈.P]91-凓!3q$LQB۶&:9- !4ZR)F^82'~~k=|a ;G&G(\DbRA%|wIQdrXɴ/^O=vخ`͒^Z-ҧ5?9qn@Ol2gx)ݼ#Qߠ7&o`GOrDù{3yC #(;y3eEo 䲿=.cqA$$kpTsS0.-4%\os|>Ii[lWpGAjL[ngK/듫~4݉rJ =6 o:D޾g~eiR}V!|0`U5Ÿ+wc6j% t$'Y--`uٿ |ᅼ •6mr|͘H}*դUZtĮa%[U> X*=(\X!7rCe_uLDyVŢu~Q%>x>)x|v͚=&7y c_iΌ&ķSx oh>`sI5|5X JJ.32ye_jXPGAVgtXE$}5%0Bx7 l\Τ4RzTV(0J*[=\R/ B&+_n57_:rJ`>>]s<e׉.w f)3 Wd5ʈJ~zD7Ƈ @G2u7"6{ld[D <37Ҫ /*D-7{#-`^spfd̮Ӌ`C<8 fP~_1o9;hlHVX҉V__5a! @).'WopΨtZ=Ak~/#T_ ._NVtSF~$ԐCl~~!|]/iQV6ap<ۏ ᪦vկH4W3oo[^5\ [rٹk)yS jG'=m0@T^M=ew?Cԋ*BG|hf|N6uR 1pNd&S .S`Vu6z% nE6O/$P&}\Byt26%whIjJQ*Ϣ^_Enuj$)tbWvu% 8v(ƍ nIZ//'cn L<}$ f* x"ܩGwNYװWu*3& œ VYLz(N'WrQG zj<$4exWL@@,isSG`$$ T?^M 9[|* ➷XD.ѿ`~h_u YL#Ur&W1UF/DZP˭VjYh#ze9 `{(* C&}=xk]īGP>^Eny݌<'0$⽄}ynm;m6Ӥ7.R8"BI\$VD;WϯT kj Eed8%2B+.8XgU֊$@M]OH͒D<ݯ IaTۓW&0<6OgtDO:]}d"[gU'/vYϽ;B\6-h2Ft"BjlY (p,٪fX0V0C;XrkO3-USUmsg$\Wj#x%g~? Ci`_$ުߴt w{'&w]pgxq y &P%8M'rTQLvu$p#mRxxGC7{d ~#"LgXO- yO/W]g^f97dٟ>Td[ X|f0\TWfTL:8W__gPXA 'p_O.Be%ɏ*rC"fG8@C&r5n pI.d{ưDzN1pM饩m&Ua;U?s >Lw'H=߰_OorAXʉhۺ۔o0 `?_g"7B| !wF u' 7l»HO("!t2!%Kf ">bz5#.V}DEN]\\2~~!|ƜG|Y&&oPSYHdD`p {*r ywXDI98H&M.L *V(=a?˕'*CL\,${V:e$Lxݍ@+4IJ}"l\~~uh 9hlHŭZj^ۻQTg}- z~Q'W KF^)Q‡c~}Q1 f G%u]OuUfpmA|J$J46nSO8ZwN1M7zZe]=F5rLJ~#qYc_9/W P3?1fe#vצ-C.NJneBz=/2wb>gc&&:<V4Z&9U*)>(]fES*QTS/rkXM,d $3B]- B'VTuS 6~N*C`ƈZGŭ6xHtq?~ _҉*pm.bg@ 1,q"G1@,a u:}R"튼c rrcÒ"K>i ǚ+fs'jtWFi>*sQaGK"aλSrS:*B'x%cy ZTuktM 鯢Uk4Թm}~ {x =sݾ/CxQ]00²2b+jmW ^lloyn)Ol6TW"d1 iPn˄byfAz4]vbI0;8U=!"r:{una7]K(NuMW1,`0 c j;,tuf cO\K8!u$!].QQ>Y'9?<3MeOx u!:xF#^hҪf_HpWB# xɋ_IM7Ž6&dw772HY()ǾFJMU\|Ȝ֮ 7\7WOthǵ&q!QD)[WdŰS 2șoIE4u>uctօEXq8By+YMW9uWi1nݭr#I9-+û7*J5c lƋ;7?'!хo/_W;m={-©Nj–GbW&DzHys\BЄܔAk /3:yxWYf_x0p;GWoVcRg0-[9ejuwdENQ>p .56FO ItQ7Քx;5w[:uE k*G;JΪ&S[>1]9T㑩@-aB\=<=Zq"9 ;5'fM+6H~S7@4r>E Ѷ6z'?ՙϼT6dp h+o׶ ؘ,\]p4H|xo[Ф)f'waIPT4{j -k\Y|z{M."VM(HmI5rfZߙ~h'KogzRnTذF$oG됧woazKnf%p ZfpC̏oL`lXUR{K.dܯqL=חe:E4Wf7 $Oz.Uڥ܁(N+2;NHCۘ2FsF`us۬#Zr.sTI09퉛~N;MF['TeέK *ϳ+'|^Łg\cO>S?#7fpe ܼH@u/c6pB`"#7r@H߿+ZLN}8 vO]QdCNRI'ẃwE>ovcÑNO]+>RKB]YC{ev|V;#J򅑋:8Wߘly{Hq k7Z3PE]0}0N+\=*ܩwxJSfoOG |c:d}wŵ+{e=znnWs\۩Z01-|?yx a?:GVHiYApBH4snL-V̈]4Q-,|װ3}Qz֍K˶ ۱<5L4}wj%"[ <&pCUjK.d֑:wE>1>xNEYER偱 zQ/eOoc[$(ɀl=nAd$Y2.< 3um٘IA'Z YY#eoY=|]CB3dOUC]~I`&n@#k9|=C OW'+HWN$z%@ȯ2N㲌Om:zu+k 5CU-^% zoTr*ݽU9y=?bՒg5=~Na`1B$6a l,Bn`4 QFk@db˕ pj7j$DK>4D̗s/Ax0WUEWv4E݆hHq@'U|УO!~]1Wu<SF^|B!תR{1Ik}0*HEma;8F,Nꘃi /+Ԝ[ߢ1w=,7-̑>e1 PXްNXbPm+~ CyvE݇8 eEͮNfr"Z1\SS<`-x35(dwؑ~xS y(O(wq79I$ GZ2xqs4/Ȼ󵜺ĥ}g #LY!ɸQrI˶v&Y"v=[ 2~]R\Q$J1`qceV?H6/ܕڴ Gdy#y$<.XJ4D.p{¦#icXSv29g(<0'z?uw:0WJiħ7و/3nm._NaPEwÒ^"bұL)*:[џw"~N"Zg-n)CBQj)Dž<g'E {Yigf_|^k8?OW ?UC2EfnzVpp(yuM[<5<.^4QBqT],z(I"\Nr=څ]ePHm]_8'@عN.Ϸ7阒ˤ>sI72,ں^8Qa<}26S\:m"v'K cŽYhB(rfF&wQU 8d͕=øqDʶ•#_]R7LhôE'MFQNX88 ':ͬP 5En55' tDdL(y!>ur`Z)J-ݝwc{Ót/Y//,KທFppS4nJ:$ܛv[tZҿzf\kݽT$qDZ`fG 7a yi)bpJ);]:p><'0KiٷZO4E(* flJH)T)N0%Pw?[.xϯd˼@5,ulBj䩜hK}. [:˟nz`mZd21HnB`(/Y=l\?ҿعGPG1z?GjF~a?%tc>Z~sSwUKx 'U{1$Dy 4 HnܘYn߈؞ ʨ,noU䬜 ﺝZ MB &Ǫ1O"~*bjjXiff+]~(@k`鯦ܘ Q6*mAyu{w Vn!|~/ ϓ͑z,$UIU>* _4Ql!_.8A$< 7UrHG~ Xeq U3EXP`ߚ0,<:A$N{[ X9e=OyʇqN1{Bˁ"%17pȣ>YxDE@ˊ%Y3J ^t ⨋Ȝ9cs3hsboRV_JCѲFY;ts%lډu`֞+`~or嗳dFm^DabZd-oS_t]@Be/i+ j)֜ӝxL$ u9}n <,[2r<b[9Ye+M(dՅE)8'?'6]Od^;K.dU ~JF`R*Cd̀ Du ^G>P0ϩGɫeҚ$g.b0.ǃa{rD~WK_-d.qktUʫhyM ˺Oq[&J _*YytKNBR^q/z䭠`MSؐܺ(A <'C߃Rl Y@>F*29??cz_݇PV9ʝvHH7hs7ًB3\=(ZNI8tKĈQn?GЫV͒cx%T~ ph2ـ8!2 u&*&I^4]6%G=+LO9TXOn.dryJ٘b4bI1um+1Q'&z.X) opM~:%~\OĀտc!:w(5 ryU4:s{"{wu/27$ ߌ?1Wk) =ܛ rU20a/ЉϝCl*Q %U`_! ܳI.yW඿? §E_i`E3uy6$=6(\%:pѽ^2OZd0CmGWCAEK=$FiI*k3vsݪeYyXJNt+p0`g|F:z J#TB a ]Qɮˆ+泟_Y7HN{fhu}cK8}m#RL91  kT?H+)SI?X`,]JoFNPE}:魥o67yO@,h6k7WfU6j} $)+y@)*L ]Bi=]$td%NǟߒBιMjsE'#㉫vvWi(O?^ׁ4J@`3wf\<>5 :rP_ ЦpW[PǹHU]~X< 9 ye_;;:F)=HS2'gW=_Q/GC8-yÍzq% @9{Tb N |=}MܶxwPEQ6U) mP 6oIME*~u:az =[U[ xQ<;m1€iHW-3B)͍ G/غ/NuLs0gf& L[‹ ; Mz %bnh?c/XPCYs1%d^.WOG=}fn_:GU`(ţS]Szҿ@G}e?>,h>/C_0g}i?&tH].zo[[xtcc0DKL[ZQX="D+1bA*Mݹ% eCs{2|e'ΛX% D9P2diZC4^12xEuP_$AvouUaV:+9AM<̶<_ccԧvۘ5Oj+;Ơn*cfE_%eF]C/2!Esn0}-lzE&Eu a־s|TzgΝfeĥ"@OlOL$6:~+(z(/L(~Q犽C56g4c9dDy.)g" G{tD> Cx!09{CnMqMgGgh=DuGix, `7j|{6Á0%R%8X*%bLEԗLOV0 L D *Pjȗ ކv-0O{_/~|?S%P%tJWl\JKMÖ] MCyt!=^"GdQQQ5xq/ז{4wKR]eSZztIBf| Ʋzס<1H&qe)i0y5c׼% %ymOt@,o,)]m_W_xc#!4}ۧc:lPUYz.IאEPwٟ Z^Fi63nct |RvOp&}]?zs0=JeLzg'!H܅s PB{+{w65yЧCQ$jPT9 Fv -d`D NBb,i5#ZGûYM))뵑<Á.gÌ/Kk|@IMnӍ/: NO|'U *RDz7 ~&J .uuۥ[=g@aDMmIґ裯d-_s 4o~^YX 37 88qu_+p kܮ _{ENP(nOS"'^.^Bxlk_5+"_[;<>Ӥ5_R5O v*eK?+5kRYWqNPQJaGqDxǛJݣmfhRqjCL|<3XAMYK(/=/4h]'Ca`S\rqtD:x8:G啗'VQ=[o76*Kwh|$!QP&9fpbIg'{mP-F ql_]W)!/> o[YC:%gN`+P\z' _?#{߹Z9M1BFȗ+ u`1J"+*Ia Fx='^(4 E;ƢEȴ puSr.փU ֲrytiu^>]?J/@B՜1qsvcg9󘼲(% tAQ֪;dcIp`s:&9c62 \%-rߓs/Q& J,:zOoLn8RާX%{ M#Sجñٮߧksw4\AR/'N-x#SY=9)bԅ)*nC@u-N]VAI}&9@!1j 椖0 pH9!ɋ?&E{1!𨄋[c|,b9>]urd0|X`5SO~5 Enԃ^'ٸC[# 7jc3&뚡n*ׇYO$g@ō xS@!ߡf}cv,yf}qt#TD;i| i5ya(z7F|Zaxذ a }PC}-KZ]ZRMzSi !)t1q 1%<)8an] ]WJ xw=^b 3NjT}N͝&OW{Z [q>`}{ؘQ ((}PVS'5ӥ ]C,np`tP%Y6s's_:87^"){h\ymm1D˟ߘ>Os/UBZ P^F10x7uF`G P 5<3eق䬒qg5P"<|h}z;#?ƨ7@: Wt翎dKOXՕꭨR<[Pi3R}A5庰a1z׍ b B.#6qu<: h&V<@ޕ/;Wx8g}SsӀ%( dYڎ@W>jhЈ8^ƑJ]"!mZ GzܚԮSﴆ`8!FAQ,'"[@T`MUヅQfkS,gXhL" |Mu ʣkǶ]'Fzn l }ـօN *-HUW.׼GwU:M$Pv΀l%bO`:@3TV: O;E!յ{\ci 7Fżst5Fo֪ oR ֑{=ҼvsBEG5Y'nܗi ̅0W}ncurs`U2|Lt1J5"=;U[Fjwy@u`Q5Bg~D\uU~>mZH$,2YjcQ̗T71S&>ۄ*8UV:P>,MpN͸?1<Ҿc^zQ:lrYFBN&AgPÍdO]*Vv70h0J@fN.tR[ȌX3#QM"hC#h܆ߨBe;yg→kȖ@Z?>/o3%)ZsjEf08Qd12'>u</a\[e5-9e-Ċ#҃}?S2+`)d͑{4VrCOCo7F5e /4G(m 9p\$s/Nŏ vv738DõhT;44w,@q%@t4 z{)p5 Gtمzf &,1# &GK,gv£ȕn<'6ř;8-Q(2؁..֡GAș) 0kLk,I%0>2-,@cDJцXuM1lmnvQrɂ{;FGw/xܬS{eN6Vk*lr@cE=d[c7PD * 21K5cOٖ4* %ucV1cϒy6GMLm}F1c QIvYEYXGnaUt)Ēf#;o_ѧm0x)dhMw2m<:VZNq׽ v9*0j/&n?$Ώ]UH( ó_FĿSxVNgu/m%6ZwJ]Ǝ?KL߉T;)],2`>,dGU#P#t<$I+̢*BqGR#+w͛UQ?PofbLdao?'ﮖE,|DcoLUJP?T^`(]K z `md,q[~J8vtxƢ#@Kyg)E5-9tfIbf>W <4\>u^ &J\3vaK^<1|ߴ >1knN[ "Qb|CBCs_ϐzizeEΗԔN0Dp8/ӓjD އb=fUz>9OwՐM`B7QNIzI.G%N"?x7sy`,$U|3VeUѤ<69h烨=}2%Pt.DVrvx "aُoUM/c) wJo]N~כȼE [9st[nv}<=W͝:.B(}d}ݮPFl?' =s烌zٲF*ܩk\lt*|^tbpVԭy"І x.jHJE NZlbYRaW"UF 3@C8R6,5$2_>ݯJtvQQ8x璬iEK~W>.ϰ-:"л!D1:.qaϖf6aLGqvCڰ 6籿>PSvg| [m64TNaM/֝ F|/|9nONi J+nc[ Vv[R3y6|.ݲgϊ?ᥦ3LEet܂̎\L\{Z/n60őJ@DƟSÿJBJ+x"`>])Klʬ͘tĽ-3qMy4,- y%(uv< Vu:q|b{|ͩK >49pa]s n*6r}@ g$~R3ݟ:DBZO7=AebWn%?mGǠg&%y \K=F}JqC9اImHC%O}c^qJr4gqa?о*$`1 i+a)̝ؿJB]x0LJr5 \un^BOXo2= WsΑ:oeapS-M*w5ke{u[\`c9 z&8UkTճ8"Wm{%JJ-E8G$FYq-ɬڵ{ul,j+s}',M! }?k|/B7& HKp1uenA-y0j])h+jyyQ.̷8 mT.psM~ĩ>?_zBTyjkp*DXWڐ&ukD/s&ɷc_ #`L|AS9{?j$La77yvg H:vq Nez BɾXXMvy=]Orr8e=iSy$\vg׈xDҫt웿ٕ{jMAwA ՟BIʫh$KpOX.W,QQtmc%iwmXMk&&m&KBӟ+ُbY6f5m1</N8uL@⁽sƔ_K*9FphQ0ɴ~!R4ʔRCX?Ms_bjzcXH v;maՊIvgN85'W<`Rh/[Ϟ XTMPWvQ2 |†:?+<~%3eFJq+ABql9vX[/{$6*u2 uA=]+i3\Oev{`H/{m0X R##`x*5S`\LD#^a$*41 ibtf. <Z~V;zWB Rvz&9_BY"0o ;jրoBG5.;: --qn:CiWOl~ M,n]e׈ q{:#ŝ]8 9"hO3w'; C$uL(]#+h}=#C 1Nԧ~ #è Qivз(Va8"bj%ȎtDæj,T<'51)<zF VF ɅOQjg5vBcMǶ  d \3±Oav{I?ӏ:EWf#2{7 A?'jzE} =H蒗$TaJCl$6施A@T3/ͽ-=Ra/X:,'LWg/ *$dOCހ*>88)33Tw?w!䤝k|0Pi J WB1N600J2^{\H`Ʃ5)2icy:9Sz6)2ur> oY{̸L^{DkC ~L}VW~W5f 6[}Adi$ Z~RZXjCFݦNKZZ9~ ;qGu^*쇓0"_ 2fnGsZſ^d$a]:i^T_75E;JO tG:K520&Q ^b7Һ mHWz쌇w])XA<}I(vavKǯ3vO9]>?¦1?O2̜1w9aF$ΰm~ @_<(@zuHo}"@v9d%|# R gx7zYziV&r do]/{r.bQXk~C l>?YLLW 1Ɉz U:u chq/Icn0jxK'QPayD|Ι멎]vQ{ؿ_}(_*KN UnLLv*u+ hg /鶠m1=]/b++!*'яK>'F )ҭ1Q"|50PN_xB?1u//&<q #EE~%}"?-}w~ߍZik8}v&Cq'T68{LXX[B/̛RG0cO>Wb Kŏx&x^*Tu|` c>qcɏ~9<֥[%k04 ~#T=MyğY!\sFc{Ȃ8 {q7|gp4OIoi7e{x=qJ8x6Ѹ*{0]PaxT|áM0Tuae38˲ڝ]-9NS }{R7)SZV#"CgnJ贡>_ ?C9 oUzdBB35=ƻg0OP枥Q<* 2mz 9Cnk!{k~a9BŚ>cDd'KԤPܳrD1";'EٕR6P=dHBd>KNfͻ/z0վ9Wӷ=-ItܪC|B(ok<)rKKwgSۣ\4h\J.b359ce>s9ڑ5ry!m{8s .2I1\YɊsm_v:,cwȽMI-Y-3C|^kYJzE,B͘C}!B(G\!>YVܸ)etT٧N\ Sl^srU6E1q=ZhzFݥ$嶅)_ń|z7q| zXS<ȇP{ɂk(kSd ;:hzTXKS]D~Hz G9œ7vFLD^nb/E|b+}u+@j\=b@/+g쓬2$1<Ԉ8Xu r%"!69ա1\V"J(L)v<ۘcVY@pdcu"gg62+\az Ѕ;أCǵ}ݿC|s~p$嚪ZtQ,k ĖC|sKڎqpJ0yxqzOvZ! o2(Q/VҭNW.kD5%y,Mu:p s)OMSQXnrxh3wq;i,3u()'vyb-z;dMXG}&-ݲy~̴Ew,Ǧ)""*4_ڧ.%1_wruq;kSJoh_ n&A+^Au7 _b(sM!V6m ].wB` r4^CGQ&!罟rՋ;X[Oج}`|rށ @I@6ku|xaߕ+V+$+ɠAb_ IWݵF(EBQ }ƷQ\|`iGtgIZC]v~ߠ/@tl$ƲN@.Wh/$b%XNP/c'Q,{I $ܻw$h hz@SܖP̸|??>Wa_s"΁'[m|0-c_ꓹ Bʠ$s:}oHt}S *~_Ӏ!tjVs*9SYv4y(Vys Zו#޳kq(ʌUhJa# r7-\*ab*a]~J9P%}^7nh lPPVIz 'ff,5ϑS<%w1s&XP"ؖXZӦQQL?Ju T=ޡH ə ^ۓ e rWvb_ýK5UߠISXa;ww-3>+{S&F701ZHD7U`)C g佈&տ*a^ϲߪ` ,(]ը9/x=#/eogqQxYxܟxLGYs>T )fNȧ %\W?z" 6h'@'G:ѝתZb0/q=SqHWҍjad]G8ڻK6#W>Sf4M03[i?O8+G"^*ٳĭ`rM,uAS)Q$Ǯ- z˪sE5q>tʚǂz/_ ]%Q y7]3rH33ԇ˰p%ج-*i\v"[7HQ;M/ג$漭D?+$VcnI`T]czbn'ոOVFT x>|.j0fNFX:C!ݎK;|vj HEI+}O2N?p8|EB0 M'm >Wg=p4YgTB5Ék%e0ȚY% 쁭h6e"/ϱ; sG" sq0@vxo;X:]J)wʟ)O-}a.'r&ڄE c:N'=l27l mc0OE{n¥Pt. (nBna_dYB)f"{R UAk}z:U]Ko ? ?.iIF: ]&Ɋ s@~vPV nqSc!R'>E&i=v$~cI\[Osn*z D2>`]8\]h\f#ך85=iPJ+R_NNPbNqUJj7=gS9ɑugPEʭX-휷TD(y9,w:Hւ>$1Ϛ+ u(Sv:^GBْ^LJ.=3"} 4ن{+Gs}$~^;5಩shpElR͉ I#GUMG`SULT'>Bq&,v2ŷ_>tgöFUBG.VM;ܐ{4 Ծ}pX6b18mf7 Z]Ck&Oɮ#&<ẺtiSb ~cNPSü'۳yOM=Qojֱnt;6mbj^v[=2)7sP/i.5sA҆)*z$4~1eE/Nw9dkCSY UmVSUnG'D(\]#W05ޞ MboH9w~9֯ i8[L;RjCXI*'Gf_37vǿ|qYfu'iAiV58TNUşNʈ<0T(aխGw`, h)>Ź:wuqCۧJ;oZGDdȜx}h'Y-,?q}BOR |_gd ' Sb8!9LWa6|2U!ASHU`D=eW;Kw}Hꓦgհ|$G;&n:PnMiD]_/_$| 5m.U&j,3竉Yb3/?P/K>&?lzaz+9ʧAK<_`^z~Glx%6tdBOܵw~O6@ 筫~n+4.eY"tq TE 4,0 3 U!RE@MxSywѶi-:yáz ukBU-S}ԭ2ǓLg~ⱳ_x=2GŸjX"b{՝-tJ!`:}y<;W2oj$6Iv볻ZrK?Tv ߦ ÕAUd -bpXHOP 8ftr/(c&+rbp7VQAU˘:~7$5%2t;OmuH7phYweO9iJd*MDe/#u'OL=uil=ci&}ukIĭ$}L5Qp RaZ Mdq^Ф$͋LaQ}HMFrrn: kdp|m:ydB)`9WzcnE` D~}0N 6,4 EpP^w"\)_cS3,$Gkӡ^NTYAD53 N&\/A,_DN[7LD6-x`cczSr, WiVm8ͺ<߂p@FtW>,NSϏUz$^cڰz%?/|˽"g#p!_Lڄne(B܍H;W^h*af2τ ]v /!tr݅א;O/;^7b.0xQiTYQ.`,Ji~CnOl$/bچŞ֒ }qءf37ēkyp|s^&u2a?bHFA9ℨr;nt0~)H{,Dlylj1ӿb7sd/eʖƤ^-Ws\YPQ/b$m1NUa(ި agH;"ZK5$?~ccM!ɛC?G -vۿ|8u)~_# "U: nz@i8bdxʳ3M9>D^ph[߮ .H bYq 38~_^3o FM1Vlho)-.p}T4zЙk) JB/ri}(Q6 \wpa'^̭- CKhZ.MP K/00uf/HPT &Y7\su'Dg^l$XSdN.E9GV[t¹˩)w8bItg*4FŹsbҀQ! -b_L |?Ӈ/ݤ{ĵ/9N: IҙB3=\>Jbq6?Yr: }8W 3uP[I.Se 8ʍl~!f7r 7(1jdN2taW9XaaڼLu`p<7c.T3/[&4/OG%o ěNd6뽽'˒?10O9Ww% RcLdnN:-k%tvBOw-/|K`h'Ƚ\Cۊ7"L cq^]oWJ? :#r R U~kAӲ́Ef{Dr6u~lWop9+od[M@%*䮹+(N3pO0~?amwe#,V㑿sf-篞?C\L/wWr:'`sr.3uʌj[l+ďX}=QLbӒ#~5<}t)2wPĭ?y͕7c͊SyFlAE`@d*xRTɩɣEyĖ4b{rZeN^sknXN + ߀؉n $_BV&ޝq橣z ?3M\^%}kK~Z!D`(Ю\2|̶7N̵}z6bg+sڵ_ԘaJ,Z1#W%׬0Jue0SNZI.|VxG(e5&3S&tQ>ym -?pgھ[{,w'Oy~ʸ$FuCI0>YtUb[#塬被a9r)cף7U5>Ҩ-Rb o0uWg"K<Dńˠ; ('Hr [}4v%y;ڄ2b˸ ;vNk0y(BU3WnG&1770Jam 0/G1ČM,J_P@tGr%R}Eքb\v0ܥ3dFE4@\CMɇѿs.8w(Y5&!ިj+"XdR[?z-W\a_{sH 중-:J5%<GH۰'&0 x/0<׏Ω~ߧ9η>2ɼ]f,eGد>d,n^SGCpd*SzM-g<( ><.k.d>(cZzze#^;,?"ohՃ 6a$H5N󸚊eUbg]L[ɏtr,KHUNz|)@Kc}ю?fBn܅e+S>Ng \ݢ)u<{w?u#qʂ~hY1PҾ5KygI|Ej2菀?r~~G ݛW0A%źvY'*T36N}E]΂tv}nj XT[Xv]ܫqe7N8>M(AC@Z:b'J'@߆@uGwԱ%@g~.ُ{ KVv{\y7oy#k.e y@9-`\6a/*I{/Gm;Us+XdT}sNP.Tƻp޿ @~LWp`mfg>`$+ ՓU(ߩMXierW9TD]4bל7\Z8p3G{,} tFUuV4y u [ּYؿð\A"-N)sR.'᜾9F.YN@kDݠ>° |bI$6; |'` ;o0+Ng} oӥycY;bӅe3\am#ܓȑ!hƮw /#Fw\Ak3? x%)v9Yգ&d} ;.0yӫi8l)>qKyS*a{ +Sx@u{hq"0liQFF#_liκGy~O6M1o6CsɉT>=?z8i7)rlBHPڣG%x+*]A\kw"?Qa,}P{D be•!(\=+8i1G%ۏ(F:ME`ڜːB֛3#$K]{ #ȀFDn0s_ILfSYq(;M\(togx={AX̸k0MU~h :Śr ԅ, vnVO3}guNlp))t$J^.Z[a0藌1&sNOզ-4Ԇg~| /c$UZw!YO&k_eqSGp+*~6>;N7棁\[ 5HCz'^%16rw2vakڛ.|n-QFg׀B<&^.>sv]+I9a;V 8}f0{7e'LA~P@&zg⤹&Ci+pI_AJrvUXxQb~:cSd\W*VunpJYb/_C ׯXYlϻfyI Plwr>ܫd\KT m ;M#"b~ y3D}e-j+X{4>eiF(PH2zGyyKu|>W܊h'<7{%2t~V:}F# eЧDŽZy4KWmBBw9DR۝As5ƺk ݦ'b;ߡ,[Jh8(?e Z?^V<9uqߩw#->^Q~d8sIx:QwX$H=nnhOmeyTyAS8?|o_UUG|9P^.yH=Sfֲ@^N{z˵g0VLװ7p'~_YSӋiրvLRy l,@swO8>x=!/#)xyî^EWEiJ@O=t8B 3Qs!'KӣSE~fYܹ#+,>߿ kޜmLZ oL]Ykϑy?FtNI@]63JgeѣKuk$|\?d @XC.E\*rh:5!1#0ƶ \ 厌'l= d()iqczAf$=ǺWJڿH,4_+Kq_?~oyj*Zf,j $+*#Ӝ-y-dc^nS%M|&mD?ocQA5a+Df/ZѺ S3SO(S0-)LYVW .qySp<}+:Qy0ɚ xڰ\oX@t1Gĝ-p4%[Ɨ`fLwNע5Kzvd@nj,5Ck[F_IK=gAZlF<bF˩sJk T?/ql礿S7iۛNO׋rF$XAqp@k68Ȗm@.'_ nؼLgC_]9Z!iBJ^3+3"^d.߂#) "T2WhwWfQ{^9]Ӗ!bGX"ygM4|o4v_ ϊCGOuTًz$rwq{+5$ؔT1l7!rdLR.g-=ᰝ][.Mnsfa4HN"U1o3lWA'MrG7ioR$H@K.7wE04uqcu =CӧQb&E陪f֐է5{sp<[һdpEfm^FGLفsͯO}8Qecdp3P98"Hb$иcdT&)ĠB:]`fҐʁUfcGo?C2O%a#jk͝!4=%s&cu?mz|Ez،^[)q`hCdx(hvq̏KP@ͫN?&FY5JbXq1G:w)XiV*dE\daAΕp5֔=P5qL~ uXKn #̳o TWp5?<~uIS ĩKAr2Dx۝.1Td*7z1f!h Y[M !1 q$o].|ԉݬ [6񱃩׍ћ$C_7'.OkvlX $TVim mKso25eo8u"b`.@V!'%ٵre1P+MM8/yӦ_>R|н_GPMc2tS}qZǀ|]- TS2}U S!)Y⯧o$A ~Mp_F7\t*j 5Ǻ*9ϝ:h,ʎ<5 >YSJ=:&|hKZ`ɀ$rx* OWQś8ҦcNٖEӼKw3[- 2?`ՄQh ηA:r@c(k޶~G:,AY |Ӿ>hG(MQ+1|k!ع #r۵&|>%jV9&5S'{w!ig0<ԛ#2f|u"=Ի7+3EAl D''o=+ ~Y_?/]8"JwV)FK.gCaЖ؍gvexw? kl%-+c4X+K)zם(‚_ó}Xq}d#Cy|I@:Cϐp)&B"=%6\pzi߄?NH۲fS/%#T@h!ivTXF_38bۋ<|pB%7uf7ojtfmGh%i$1"IU)>= i_>?oE砍&Бn"']cu(&%ݏ6oX *X //a@jVIIs.ۿ-GkyCQR: )~~sԟx=y'YGvr X#ZmƊE >r!d?G]OOlt lZ_c/~qVL>]i C,]Xj9?uQF"Ɲn=4_H4N-<{g^dٕwR.濌S.K.>I/C"3X+Ci*B.1kW?Gƿg$H Cl//>X|piz Hٚn[y ;{ZUv˼*;EKozuK=RI17*֍fvުH]l/&kj?iz;"Q3g$9{ 1ERG19WCu/d}l7 \+G@G>OUxxE4=<_淏vS42k5 Ejrb1.0'K2h//0_GY7aȺwfڪےc\G7^)uGqF Üjqwja*$l#Lq#Gh _%S9vS1*OnUiRP:";=ׯGN2w,RꖹAƳ9Y0*̏I/0NьYzb.t(RKQbw?}ܽx{13 S-m̴hŎ t ٺI}r{2bGl8\} W:}9;&|F-cm%&bH"RM=`ج qC;̰=6kmu cb_ߊ;Stw84xk㮀̶E5i7J24%PvoXct?zFa~֫TD߶X BOJHӧfHC˲uV},um/iW Qxxe|Sʢ#}Tf(j2eM\e,йaOJB 駜9$xW4kZX70ؕ iy6sDMYU-g&?IN  X֐b:rYjބS%3s ǿD]`"4U#qßiƿG|0U{KX"H\$3 D_\pQuIz8il|S3dA^aS?/&~n{]7'^^*Hm%dՊAbfݞC[?ȏ ^ YC?0@w4n"Z(k!ﯿXTtm6gmBMएunPCmynAAKhl^<)kLRg.6 o;GVKh ,kY%(Q&yO]K8'{Mļuh<`'ɧ[SYsMp K8:ˎZ47yf|> 33|?Xd0d <6D{y 5|~|f|!n(11bȼQZd~(L\TǸϋ|_ cp]cv؞q!)E&&4:Jxq>nn plsP7q^w\SSB~n?[r%F33crreqOۼAEN.ժl6\NP2=Z*6_0`'Cfy?R>yE~trٲmD0[ pnUY˫h cP[/tԖ 1t M isV|N%Ө5lzIL`ro[&aB n[ `uvKTʅ驝[c1=o/#6&PO}}LpʅJ絸HL( sT갷K{K$)w*6 a=)0.賒⹅7To;PUߡB"32 MZbv!ۚsc:_!*tMF=Yl\E2hcX4p#WBvy0E(U]st=Nxs_2IYwIԲWh7P7šIh#Eˈj :s;fC2Z2Kىa>N|&iz0=I,,Z~$\,Iu.l1e>g?iwrW 3;g@.|\٭⍜<{8$|ꈲG۬_:gM,m=: fӷƴXKFt^*]n/2T,npjmG-<*Zt@kj϶j pN)Q:nַܴuGx*Q1$k}[h19S4O'-$6~_t<2ǐ*a u=`C{wGE26 ~I̓F|Dn+$,9sTƗt$ӹ{q<{=(*ӣ#dNbr!$'o ǒާ 3fNG_=UP$=7lE#:bg|;MǥBA*A}fOG~jw6ȽJŤY;$Vi'k._+cg7xzުrZVA;]}i|OG#,(Z&!D|yW7̔S3 71~Hә7ďww]:U:G a:VB[BW|XN;JM,N]FmD@$b^LX>`lȀ9wJ(j1&x39F5z Gk<:6{&Fq 6 7=XȘ7qnq'_+~UzJXc[ x=  C}g<_f#Th̉4Uh H! syM/G2goF4Q#ÅlzG~HW/o[2)K{Q0hGCǑ]˧"_ -&U"/Ђ=7A$ ǝ#^AG-2A*x:_о&`TNa+}, ? ֛Xw5axW{b:itݵqdZ#1-nMG7m _v?1͖GS4T \NlOg| -fs)rGLn TĶBlRi|~pkESX#UŸcԕk!/7qh;2],Md.enFnp(ALV<%/֏$e#2 {ӭ|T}rT`zCnL?^Lz}d#t06?u^bѬ9sRNWi?a "ډz}bte`Mۙ";0t*|wmEXT`q-<ą0aw Yj52 ;6Xi, K-U~IQ滅~e˶6y:r]qoW0$PmݬVEQ3AFbGs~r֠]XFlS;1˺@|CK 忒Gq=1ܿ1,$9k:K~, pf粅N~|ֺ צ؞3HƳEDb7߲[%BqǏJ&q]%PkZdFKg# /cR?;Ѯ4s?!5dJ٩5L( ]fj,=Mع٧N֊u/K[ibg#=֤5?s>,㷑msY_ cb|BKbDŽW%_X,o e*#iwYKog:f82mh<q7.5=kc@yH=PUO3PF ~VTtV*RJ3x))G} 1ʥہxw/ydaOafLAf'Ӵ{@یڞGtYЄ&gߌ=WA!D,FiԷfB?4liYNੜcۼ{b&7/kL6ՠTaq4mMoVؿ+"22yɉn"[eUe~_Q 9 _QUN-CO~ⷛKYC*tM{G޾:Vk@]C$~眏,Y݀Ba0adgt:xgT]9d(Z/ioW|WM-mki@~ZG$ dQӔ@]&m)8J0'oXQb{f֍Q`=Zrֻ+ӟk>>VKrycH߫(3Z^c-p)yV!>ReU"siGBͨS-/-:BDvt&ou}b׫ޥf(jqtGX[_bk$bt^*YыOJq6#~ #Şd-pa*!@Y Ѷ~lexE"9dRu\ Nf_(m=ood- )=:X2QVe[Hkq!߰M>ķUpB쫀ی.:sB u>:$\L=# yٿKieu}UF\r-H7o/Ʋaw.=fʱMfG!o^[6l"Ic5JP rbEqt^yaI^.c&pJlěJg='Bɫ@lo,Vߢ3p}SVb/*}+D\{Ȣ]It{o^ d2.y`(/rWri3\ڣftGOJ-lK;yaXDg,`:mxѥO`ύy`?(Ҷc;i'Rg꒩ĞOQ0:3* -2:•{D奧crfl{wAnS?牠jsÓ0:@5^-3~ 9t) Г/Q *<'N`46ȓx"g˵S49dNۼ:\3VG/ޗ,inq`,+P(+yU, 7.~xswGfI wE- ^!bQŠv7I_ݶPv6xENhȞ8 3x]Srݮ_#_~D=ΗI-ynt,8;:2 ru5~W$C玅BoI&;#FbPL>""{vWsfxկoUM߂\u'˾l/ J隗k &} -@d4M1Wd8:_}0C(*z-Nd,E )]TЗrQܙKDͻEoAKACތ/_% soWϨ'U޳B?kj\F)UĽ_X"n£&' \Rj3=`uu KҘ[rE)0r˶: pM430G""J/L*KԂ <-^)5WV:'_zMP9FmBWOQy4\~B,"8G/E8{%A[z/o7_Wx@XZ !uVZhrT\ւ} #vc 5TtL br+:S#n!BX#p s~g)J/Z[.jͅ S坔(Km$y0{̵#n$ >]]8t%J?mA#eUӳg+I0!㵿S0M1|K7egPky{OZ.7M#lXeqKMWtq1ۉ ;//1#0\ 7`lC+I?C}ڏ4ǰdFɰo2B 02ׁ#dlm CRgR_4OF&O ^?zeU eJ Mxtz4An\ιT1@!׳˯Ѳ}Mf22(. W .|yU^\JNqGT>g Ge.4kɎX$(c `y]rOŌ{)|{n:!< {_D|>e:?nalr&,+@Z׽?R@Yhlֆ#\`ZRtӧ~r+z9LUwJ͵i6qJ(Ղ|F~.=(ZkSOCK{4Ix3jGj^~џ#fžq*<;iY*! P'/R#|zXghug &mý(<)XEgee~zNwVpGNf&D[@2K9N;{}/韥 3[+`&9y6HW`H=c0Lmf;f~N]O˯T0D(,q]m{:FNa;U.bz}! !Gos8$x̣pIIhZ7S ?/26ԜU!>B8^RȦ\/78t'F&ޛe*9E~p7{Lpr]QÝ@}B{xY<(){:1 YCB%ӥ5œ>S{ۂ+tnOVHХiU¨EN}m/cHֻ,R}̻&"#۔C[1*g~RY}:g CRdPOeU@̆)S;: U9OP B e:=}RaZ&6`Mnj=1OKyxY@Cmx[m}9vDbsd(=yu 7am7iW=g9ᐁٲطsW,!>7)!F%0m!>;c"ah <2Ivɖý6.3:* 2_ϦVwv+e͔BCj˔}:[sj]E|kOٗYuB BK^WBu]r[׫H~W\t_EG\&_;1u@+3)S{9>0 L6w:u]ͼ tHEtU7<oq|۫6eK36`ƏH>O'iwt'E­JxY%-]y0&+m0;o 9vG$++Ins[H{߫ڷHOTPHu/F3\mت"K=UQ>=< w`8տcA!^r8 ֵzN.J!AI#muC)+0_FpyYάݣKWQïeໞ8ym c BՁncjcO;jjX[%<-GNT׉m;#:\ZeȔ~l ֝ +]Xgr[g$m3Zf!͔KP}HL}!Un(pDG#bM9/wS|k>12żn[UfCU D߲e@ tstWq!O%[(;D++atsb@""n6Ah8wro#?} [ 5 h?d3>8ND#K4!\k)`lg;VHj&>faa~~_M}X/I纇+20.,}$G>u~,jb~@\!|" մ z538 oMq$Ă Κ}ܴE#>cA&z!?[ăӚAMؘ*֖`B;(zf8!+pϥWOO%C+^q5f,Q-µ3=Erz K\٣0!Dznbˇ u;n^.זF%y.s98Pr!]G}l_{;k8nėud/-k-3Ns;CkpUkV髿WF `!dd}HAwJTcpNBǸlxH<;כwҍ5q ,m\iN;0|ra$8`TcKY왢x::ZJ~{|̫=.Įw ]/ >Bb}ɩe,B `|{qyR eC 3/y{DŽZL!M?d|6gp6o(t,sqm PK!*'qfMETA-INF/9AFF1663.RSA3hbƩiAKAK-#!/gBc*3 #+7B!&ML o/`fbdbbqUEP9[Mץ(?3P@$,[_X_$ y , M yM, M\jbTBv M @q.&FFsSf "; ~^`GO ^waߤ  BYZ\kUn=;7UD2 kuń ぇglːPq?r򁤅+d<_]nn޼Lֺ+'?vs*nZ;OI V+SbnYgڳg"kt~~#߳& ϧroSt9]Fmv)h}*u*E^{6wJ?7y=*kzX@@~|,b,"]<^Pf>òJu@OfPU38ٮSM1}=kl*15}y/6ٟ8rqWb׊ N\s7}7 j'2yj]́k=o?׿lMoǞ7UO[v~l5g.2O:?e+mkq9w^>k)S!?9s{Cx| _[Ybdj]Ņ_W垖K[>ڤVKF^w ew ; c )G HI,P)K#CF5K]ȚS'^`9Pތ:=\|7:~^$M˲)uՋuw+UvOtr0ئ{9#OJ;̭lKl^ͽii`w{d^Xa("2|?nO[nl-wj5N߽2g'>2h/eǘ:JZ{J>[TԮwazv~:|"pus{qV1ϻӬے>14¾(bϥ <7M;M\+FXVmksPK!*b`JMETA-INF/MANIFEST.MFĽǒHo~^kiB$.EHBܤAk?#2DȚ*"s(;$J >oO K?-Q]ҏg{)OEn;m#tudwϳOzMv>tu~@[v~X n{gהPܬ"'0 t=2Ühta_;!r`Ns)]dozVe4 eyEO gI=|ꯈ`N Jꝝju29 .'22x寏Lp]|v 0~X!cz ݢbw&a7'a8|4g'h1ԛ@P9Zguh=>a%Qɝ@̈DY)eozt8?F-r-\ν<\rӤQĜ'Mٸ[7˜TT;̴[]Gb|uiܩqN8Ժֵ4vWOͻ&Ѱ֮݉x8|~nBQ%s=ntr0+pL ,r^?*f6 §\@qAT0kk ߢOa'C|zep3f7NS.r0gn}FcOh6&t=vDU6&+uh$t+'%}fԥ1DlaƑS. }& gTθ?EIVoܠʉȫ鏂F޵3{!Z) 0SB p=4:G:$%bC];~1$@;$҄P+\DIKX y3݇\fL^YGBMӛtq!` /IhSu(R綣X05,tCx𦞆 u] {gQE“f'졍w)$̧SDX`=f@$w3ƝԼѡyGwP}ϽzӾw|{cZUa v{^X P:e RSn#q{f9\nTq#=QJ_>/@+ZEYEn%h){Jb+b~]}Ƣ >:HWw;*&X3,{:Q<`WKzi<=EyZL KPAm3t.)=ŝ(dyey o9f){ܳk2lJv#.a^s`=^0;MFhG,fټ8%a3 :7H7|E޳#=|B_Kg2#Bm-Uk(G|N irWQwXQG ) vPЙ8]Wt7XA %dD5&/ЀnE /S_& ُ5Qpe>+-++3s"M1D D>Ep/_7d42N)07RDN;d]+W_DRY #N*Z^Y9]TCo'(4GM?nSaYA *:Rp|9^`,.wr~uNȖsTMTa<׼\ZPQC0?롢6ohGv+;10yWWJ&# YQ1]Qwh6չqާ||y 'f l$>3 |d{ |"bqKV8B~ SōRk|+c>^=ޜíovh\#^o5h"y~͋^Gsr"vs X6w1`cYI]9ișsQԸ77PP[,x vJɻsms=L݊vîp 5HD|;ߎ .є 6BԲa=C yzoXdv8 4)[4\ÄEH<̛qq;ߊgs v#pޓ&dto /#,jϘ?MJP0Д5mEi6:!t_=]rX1(tGN(0 f]te!zGB IbDqPYO:P*ES5oLÆ28U7[ ;kKqF%c?EMX}V*}2-餰I ݤE߽ok[vOu.1x靅`z^K3* ^QR/'!7-6 .9jY*,cޫzhuPL\9=_xQ#mcrk/𾓅wEQ' OaEa$ð*W p2P^S[5ڰJwBlW#A xמ3mNAFrk zs T%6ۼuJ&y*r>KsV!iF-RCvJ "V'5o8{e?Wռ7KPY"-^ @-^(λd{a`dUeu4XSÕҊo'OsvOv5+ᒎBrޫP>Wog$59Rݪ'@hz2a!ŷbsgɷewYsބ{M;Tq]<Ljt v܇d~ enB$h@:imv.4A~ edaRo)[7ی>.Ӡ#O B{d;9bR"X]p2Y2,Nfr'S\*ꅵSIÄsHO`Y.mC쉡]JEΈ^V{@$s%1xtQr#_hEf=l*̀][s{;,g˧AY^#0m:Rd OE (7Ns #:5 2DrCb'4~]u-xkH~{t_=a5]]1Z[5يfEQPu%neH/p?5.l'eqvr99HB/.8N͹q:6@qpζc_&JۙC}/Qިxo'cm蒊Qi^ '^䋔]U9KpYΥ.$#8dڶY;.3k f+XO!ZVҳLA&|5vwF4`?!փ-N ${7C]=iHM>&*`EQ˓Wx=(/Ab_IWi5]~@ǂ·v{x$b,AJn(})}2=G d `͇+7tSwC|ģcĹuϠ5K7%*?s8J@HM3RD3xP3RΐLHLAACG3,#8W_] 6<B,*MkQ5gv.;\ԏ$ q<ț{(-ޒ{J89^da <F)%N+`Z ϓ9H 8iy8Eۺ%Pr~t=KjyKy;GvOYsO|Dn7QNMuWa$no< Nu;*zvhI\_—v|Xv LB0weni )Χm=W]Kn)]ΫT!|D|p~+rk&Gj<lX4FsN.!5%DH_dOE~b4DdJT&:1HJT2y(&efn&uYjgopS㞪'5TlqGWzU㙛aċ18?^a(ǼѤƬQa>՚U̥wVe.P'~/-P~$DRtr%5CGN)l' z* څ[в9[R>F1^W#ƺZۚgɦrs[6IX];['}|<`S:!b/t2/)c0k |2m^"ے^DTEnY=,ǭlϬdSUMd½B5G|EKI}jH 5}B1U٦w? ~]"V[ 9  o8~ߧǽ|T*XVx*{U'1/;%"8kh9@2&gA TN1b[,`7U~> p C ]⠇=J,UTj''?-9o*3BQ# ja^CvK ,>$BOLTk';+d{)ݥv \װ 醛{љWTAs>i^C~fZ K%QGўVٻZ7n3?󮠣ixQ2Mezt@6ۂ˴kg8UpD }N**Бa\2<W}XkNlI 9ž+Ա (3yvOW?~>E{@ Í/ذPIKF(;hyiR,kt}峹bm4YN`$̎N\p<P*XEwKDy}M; [ÊڨŸ]iivOךzH ׊2T6'VhH%,!h!#)ZNi}^:CX4>ݚ2cPQk. 0. xӼd,/ᆗ il2suF7&'Wr~G(~˜^v1aF3a'dꒂ\pٲ@6%H CV U!+Ś bN8®Sa$~_}bYnn @V=*}nr/Z^ScfnE,;x<AS |X*^ƅGduRp$ #/o5|!O4k˵buZ3ɉbQ_GT&xիtM S cpa^OERQT>Ms`^I:uf3MOȟ *N(z6Iv^.§1'?G_{vub' n")O )vOe΋>.miه=H[A \\Ħ: u^BImGێWfo$F*Wuj{NU)?.9$|d01 h'XKsS[ܼ/1Aor5hO7#xe/fݚ04%ةe=乴E/'`JV-\h*G ?$J\ϩ܁ xo8<]J=a}RK*\B~Voh]41oa `^ދ^<a4 TXCiNV6J&UOpkg^M%2 U)0—+A `?@}U"~F!+t yʌ Uc}:;O"ң4,o?/xa x6QB%:,D!xsH'5py5!~m\B;9gI?ͭR235Qp25~8B$L}mQB)Sgw va!cy$̉d[U%oX 9:qd&«ݸDXkiu S6<:4rNƢA.%} p¤ȓ q>.+d$C0VxKwiKo};](ZGy/0g)ԅ4V룹"(}Zfw4޶W_x%$t}\QwP)i߮>/}/_750Ww1R[Ui'}0 9Qƫ:R5/D}:Koyۜ_BBcՐ9:ÑJ|e19zKHA;"'s@HL{Bb"Qqi1t5Y0X:&DAZ~~n W]\oޔNmjfE1{8e"$7sbL#<Qhh( =%V/#𥘡/?M@]ѻ$NIqsi\Ksiޮr9b-V+?&cr[/W+ѫS-yeY *~/zf]I]=CWȦ;ٰAgFXTP 9{ |3ﯵz] ߕnͻA?sd[zVLj(/Rb'}%~xhwɼOE+D ZX7Ch?vg>{zml%-e~;i%A%>;(coa=J6 檉v&.F0 ^HҩV a_!wo_yϓ}⚭W;hdHdrus]BQD+зJ{ma?" _Y]bPvILr>z[G[6Եc ^]IS}ѵ~dyuLn#(Гr,ΧPvQiBT:@{| +Z]h`LD ~mMxb;cImM!Qe SYq&⹲(%*WCzCN-.4x.Jo1x~NB^y¨淘}%c*r@ y h E^ /E0FD¬̬ngHɟdO X8'}/ίw||v@u-ʱ&Œ/6?֯g5.)ϳ|@ڰnchK*.cឨ'֍kLہ[P4X2?X=bpf.q䥢p3+SOG||`:iiI_=QLeJR /7޺'(YYe5+D"HMjM'HX,r9с ,, pnb" m_+ݡNa=v|ن"Ͽ-<,рAhT=%/̏H^Hm 1J/D| 5rV4_S%"tĬ]"=٫UX\Y^!lA3 dK{ImT}/t&#!kw4 &U2/USoI9 p稺%w\X0]; :5>:Ojb7"ҹ{#2s~?ô&ll4j ܮ9, +FS>75JdbΓXb,3Hh]*{p(ZY0Q6xF.k=sL[]:kA'}8'qB҆o mٶBr#Y%62+۽s=|oE|dH.TUP ܤ7kl s9[\/@k[|o9Nǽp0ֵPl4 H]O4tc!7D@&a اykV+SW{.NӝM(9񏰎"ν ٪B ǘ_1=+NGGXV'S4Qj8A`K ŸhԋHkMPmt˞9ESvMܷWpn`j q-nP hImoGi@UD(i5$$ha 'HƼrWZzR)' OWF_a?&7o<2Qw$8* N:AS6KwPj0=0~^+ Ngu |P K:@u/UKݳm**1^ SԤs[-d~B$_~?|`PQe0S2sݞRRe @c5X~xU:܇bf.PQL|u^X4r) .#-lRtWH,fVzaey]REg!]>"oVC|^cų +] evUҔ_{Eaߏ<@uܤ6胜&7n"ع?5_ *j7x0<̃V:f.G_Vdn;Rx1mt^ݺj!4M`l[C:K3Erlr=fݧ1Dw7ZT8(I+*0ݤ7w i2ڋ>c38QYSsfmdͬ15;U$*t2+ѵtJc&M Lg39RS8b_6Jr(JU:ݦNVW R#[KVLnү?Ӝ=K5L㷮ˬ*׌=(MK<'iࣆ`+Un(Tj3٠ڰ=bOկ*}86E`cq &N,ΰe6(pX՛S{[ Zd3#&4fI] ݸ$OX꫚M8u> ;Nl&|YAt*tQБ4@.mI?H{evϢk]GJeg&7_$~R%ch ̂H|bX5Mgf;?q/DeVm'w B$F#{_`u[r}Imߞ& # 3eTIߨ?wi@!qDV ɞ/PܫyzQ/C=orL:sg4 qldA=-Z;0vmFJh*6;i]f|Ku"Xq$a׷SbY&c'+&ի_Ӽn?{ޡBXzV4]wװH;@g/]Ã"k]IuRi$,,:SxM)>)CE!He 3ag/ &Pl/@iݩ _ ,ǼCjvIGAT$DI_9㽲jwY^ [`8 ;KC )6L,ȸ94BUnV>\;sBJ"p(]B ?njX_?7;DI1);R Ǎ?ⷚ)X'%Nʎ]xQw=;nׯ|AzOw?ꥱϬjza绎4OцfK7I!aK5ɟ~oӸ~smU;RUbG'~~\kQ%O k^/*. vz?_MoL{7=(+D9aЌ:oT(VLzq*$!>u맼§0ġ}HyJ"=ftɚA_%slhk&Z]ۛ)k^ DC?Ľǒڒ;o~.AhE`r Z雙{s]-g9}q/ ۄ%ہ_9R?U8Zضd)iQ2a-}H|z܇r1ऋ.sy^*8I.4 MG&(WC(C|,TEz(AC7kM(kz V˗a6k36P<m,\RĆŵ潫l[uvXu`"h?G9Al96]XA"F,ekSkX?йöq?dc[ "DSD'󫘯$]ŅtԙZ|'\twtN_bk4V.ޜsBng9mAtŕwS:EO%$$l}e٢T3]BJxwXWR[Mz a*UG}0zshSo&i$օJGM6Pk: KweVvhܴ QݰҮz 4'S4&?*Mނ3wf ؓfD=$uS2Z hl94ߤN^9V8ӁUպh Xqߦ?*Y7(?`qqPӓ5FWRw!CSÅhOc} $#=(tskE8tv\_߆-NϙAu?u?U}ԫ_-}ww"~2tB҅<ٝXrldo&_fy̔۽ !ss;j@!J^Px"M@|Nƹ/Tyq %bu|mQ zgqF@6{FdY;pാم8U㈜OKW]{$S+q} &:"DY,\DrlIwV<2G(Helj|ۯP lcC؅V_γ7:zf`?7[8, l~YeL6L_5MO}:?#;L E.G@Ps G,V2|~'fϻ-0?h Hd3߸RlPCr ^t VeMLa:shkhZZ A?`bX/ڊ{ DlXؑspz a.mqώ4PA]g$X2ovy[=.;~O0P1%;CԨsC@`p?V] qz=0;R vw}~5S蠮j\l#Dq-I! DB4PU+7l6F79f阶q7̫O-3H ӎ PjΘ_D\]tu(JR[9>Ғ4[)#wprB+-O Էxk˒Ǡ$3b(Q3*gHdvڙ.{Wk_ۧ (Ut:Quj5ݔ$E*[Z+sf\2 1)[ @tYaa9>ߐBUef2WUd4΍1vJβʗc1z+qɓLt)5c;=6zAo0=8r<}uϳ[d (#?? tv-tL%d%8N78<:7T4BG~rSg,kᲯ7- '?)yΡS77ȁK[:!]*ZjcO wq\'; - %U,z-6medOJK}ԝ ` & 8zQRkyݞR0qY̤ic9sHx…,.M`YsNp.s"*OEwZ&j)[_N|"n,V>MXޟqeqm M:۱s{N3z!ͻ8 !*I}Â_Bު3Hk T[f6Ǜ:jG]MVC%*& EpW;8JeTb|kMػ+0WّZ10z wKD MUdZr葾x,cJ/Kw% E+jA椯#z[lؓǍW^2>#-~ nS dd%͊2vo {ZuV=4##ŞvMݜ߅"yLem]+p`!=WVO2G!=]1O M{b:Rֆ-{>ʯ lEЫȘf)PS `L~_ wݠºM\7 (N;]mߑ?*`\;!dir6M]yfߦe GnU`B>kku*O0{P;󐈞y?D7jSm_^4KxnHuQdLn }f^~ө< *!F́ViӧhIYv%U"_$A, Z(m&prum/=}lE hClMƙEj.e{ϚX,uvc޲2UO->MZZfoef?~_ʾ↋aG[yMt=t5}Ov9Ym.N둶ՏD<;'+=_"h59ѥo4iz&QlGj B\6Lr*ԹF查}{٭9ޚAاQ |0?4\Dyv6SSဃf]w&,MiQnxL4_d3Cd%d8Z#zj~;?^&SqܒQXzD%^CRZ3I4#t6<#˗&!?z'] Y*.3MW7˵Ð'W>ӥU;CUpuj\@}&^dn0iuYB=F}~.!41:OdtX9MD| *DǑLwT朰",E t۩O ϒx{F$<(JNT|N :jZdi.*8Eǀ2ڇjAZ e#6NW){I.9O;ڛ^/5}c7Zjׁ2{z(mXz1&'Us;{aCn0@Z[ʯaLM|,>B"vDPnz~_NsGm Oܦ1D {sdSq(3oVGOh H1}@z%9{]i{p!&R3\n5V3]g<9KB-TOR@=)l~wպuJnK m>!]K\\sDO_}eOq@ ;r3jE:)SעU@N$I#aclp=wU\̵#k9d1tר/݌RM ;=$9μ' wLC'Puk}27ƟW KwcqEObJbiv6Ỵ Tܓ`:ǟF%|KkH8zukx(ԶQ+فOզ|gjx@(X`=wx,#Qۧ95ZԳGq gDbL`N?k}s7Ezw&!{=dr k??OY(H]K3ё"|s#$D33Uþ-պ逑,6ɡg4[[)v؈> sD+WBuf(ݩV=EY>8X].g*l~~0nS}2uT3 Qk!KݡW+>m2.$UH)̏sP_~4}%DIi>67zIWx`n1Os_2gpv;GUpR&tMm}g1q[y0[VGm7^M$(8ZB;.Sqr g_ {(ɱ^E`Лg6*i ^M`(INy w<~{-*i@ڽ݉Pٮ&a޾OR*BcKݧY~,Jٞ8):9L|WZ`Vxi7 (p2iLaN_~_IjN|i<\9@ϩ(9LiYyN-1ó,j"'ǬOb!rr8Mžu]~qLt=7"qP\>6Iנyr}U˃+dH P(LD+C ԡ=H\U)Kҡ @Tˉ6U&D(xh=eaQ%j}_JXO9*Y~1ViBqӚ*lܜ/?Z;Ӂ! joˍ=[LQ 6O_W'xdKj.P 4)jțۛW_@U}: ܢИ T4鉟b"u˥ +ŠX G;>E_ZWu\7AOHzTL}s#s+ާW:6~8],&sXq$jYl1IXѯSSm-5݊Ay;QThޥ ;Q,z3e Gq7|&%ƶcQ?q)qHP1 M~Ԇ4`j{T4(#euAV.BeFG>Weo)yTmʍ:;ķɟf6b|S-Ro{6󈳇 z=^WPyp]%Rd[zj`^X|&j7THփcWHfKS%c5-fP-38$ߌtu5N3 N/;J䱖 cCgzˀ5N`-Zh7\kmɯVO(>z& VR*_547e텙O߮ahK!h N1Ӥ+ؾHe1$p14sj,y$'o&T~x BƧmX/l̵N'`aKdm_[?[K9UsceKѹ\U u!oB'^ E! JxDS5Ial[6|P@DHAy"fRҮ##͂OWA }nQɺY&AnƑZ|B^/|f[e;ixcފ%-RYˬ I8 (VD% =b  0Q Hni)}Ί !6CGYW Fln8qe ᅇz̴5n1CfEQlP|gsL)=Awud%LVۤsȷei,@4;_i_/ƟҍƢ Vϖ!.Wqd }LlȔ=N+3|<"AQ'y!o܋= p*R!rJeIbQ3R$# )wA,87ӆ(Ua\UDs L}iqjo?_(ZTH-8P7>Wl`zCg* V_@Gr,B0s=RS9n^6T%[.s:IqQ 햏*Ie5{>=]CޡMq$Ie:*E\}USgi>зEq @9\i {/Ŏr{`%mφ_fA[{ڱ @]4Y86N}Vw)a5%'N`Qe-FDj Ź̜^W&>D')+wx9/^He6LgG?U=]1?(兪7LG5g7LZd.z$0ؔ z{NeJ ~5w.2^үט-?oމr4nt}-QUGcԑvoC?S܋)- []+`L\;lK'E/{YJA&̾7ȑ` e7?-2֍ꅽhLTXN`[b=߯TT`E0 LְJu5U.R^G)#Z%~ R?{`]Q'y<AbXE7ڶP twoTT?R66IBs^ՌR˹ I|}9k]F! c'~Ϟr bGz5n~k؀Iy t، YJi[ 6VC?@n|P7M]l&?pSVnm4So=+t#cGApühH'0>n'}aJ>XWmG wt"YM[E222˶B[LU/I3 nQ˾}ܣ(Us AcՉrK,Osq6?{Q|#I2۔prOWvrvr`[oL_vCM'.$n#ݳH@b/$o*'8PķǞKGs$d -=sl<$UiPjQ%I{S2Mܸ[\&8;h [)r@zPD0i]ɠ\5g|nf>(e13*n^]~z=,O>ܺj zqmk1#: Bs ؞`?_6zy5=Լ]Jk*=)¦!(eY_V¦'7mt"h厣p]]X;zjDP_}p'B;(S$UF`$ui i[K=\v<"L1X<2b1Y<é>M|% ]uNN;A<L:MܝIJtygG7"|,a:(sI}dƙXd!c ٪cplyKŀwK |*[qȭ8[q_ @P^ ViyhEvK4 ]4ojybf#Xh̊?{Lp]m>WTI(wpX/=bK7}!+$+ȦMkN{XވԶo'yh@VcڇK&{e]= z.>,P@"2:*vp ri*yߢk:Gè+TgħLt|67d{Aek?H#+KR|\ִSޕni82QV*Y\?WF;"M쮏h6hM`'oufBVch^eqpGw*UȫDP{(DTwo̚7/Mv/EHP]ALRV;Ը#F-2~l1K7)S;80 `u; nU#R);K)7Xz;_#B(׀-wEW*0h,X~N 6 ǵRe&!ϸ>܋ݲY hE# QPd^X Q P7U$xE5ʫ) >gK2.7I/WSjvVB.>>tmO? +Qr>%ys`p!Ưhl3~x%}p>u$ wHsEZ\eײ>YK^0ZIC2L]$df<87/^DsΆj Jsa}`B~=d9S4̶DXYLsx~0t>BKzw\-D "߆k0׿WdP;`G \! -SW/7Q`_'E~xHBB#.s@\" M y!l빅|vMe>t8"jM۽ AI!긹1O`>ئhf3^cF;"yz=/ 7v=\7N9ُx.1W'0*D)' 5=9ø~y_enꍇ=@ yuԳ\db9H^`tMy7دn-z$2%yi ,K7c ǎ9!-p~=m_ensrۘ=uOd.: 7/z r`(j(x>gm=x>2sLo^?HbMCKYwMO( 'IʽeֳA?XF]/*seY=2K]jk&aqӫk= uъo_8SU+VznSҳeo:frImcxIU^vqQV24<4*:ffK7/1 BTu?]> `G^.J-zT]QPb-ߝ m;ȃeHǼEm#K'&;a(rb2J'27<<=6 W4hY]H=29B}qjGYmD[jچȮs:c"27ה-o(qhGt:ҋҶL$/cG vO'o(InMW?]'-7]] Otew .[?ӵOuo'o8InMW?'U6wsYԝm{n FC86=@pIxob UԘuS $ЫcÉwgG!Aܫi鯲m)OyiN2ݛ5@  ןIuNxjЫ @Eo{teR-rIU!F;6oSVWłdrʦ}n fsw[}uv["0G7~W\xW`U6jPq$icۜUnØؗH/wDmzaՠ/[UQR|#Ҽ rYp'WNR]r#h ߁j _*R/XgWDMsdvkѥC1Nݨ>dZ.X@gzU7;Wu%J:II@Ky_eseݴ$zX<zؒߵᒥl߁wK@_i5. rƯg/K$,qIDa󔬵DU/nt~ǶF&_Knxfg^ QLHe-n(b\|nB 9^aQ8XI Wëo_es~C`<^3E}RQngni7e;W9<$Ŗ5I:A bZA\/eZح?Rx,ۣ*a˿:tXvw=&~BPis 9Q̷(\ZN0 } 4m;WVsns#./EMf3Vlկ/3vظ]`e<="mƬa$kݾ4 {f7jbLU)!G@p%? R*bpU6.+}ҋQax9PIhu;\ixOZib89f(K7W7{#{D=>nHoqzq}b_mZї=5(\w s$/Gܔ߸yylh1kAc&vRIgq0$6z߁["%KMh=vm1O{ugdvDE 9K/!n\VZ9JʫzQ6L;;ᚫ=g r%JWm0-` m`lLdlY7fvis'dh!(ν]w j#uO0zw!CoMd5[>қTdkH#n@<^ g*=o{;ڏ=|8 ]?->HV ~d 0!~=Ya'kCEٕiZ_|C9%-C'#p7r>_~k-By1!<-cS/oB|lsEO13B] cNwYJYD:b(ppЇ 4g“XuMfG)j![~\n c} xpR sơ68lbDnd-ީCQ:t|1`ȯңg%Ao;S|{ZB)qOCM4ݭ/;GPp!鞑qȱKrHjRmx{X ֖+0\ hVq*]ҿt|e ǰ <j/pJEhN sgq;~Ѹo-(ϝoH=&7O\qy8dY1؊TVv? }\Xwiϕ[; ,żg}iºs4cݻL}~q' ]. Uou7;a+x${N }CqSPj'[n#I.:?kw8s -{DK` }|ÐUI%#͑4gt7ᦙR-@~Mdbc2dVdy gl(/_`EU޵ϾU/Hi,$EvvF~ ;-. Cem,]0V،gK@q>WYm +)ی?&`>f6DKSjnIJ 4ױ b*9L9rλk>{굓\ܚbqqJj#9nl^uSR!qȋ:~`A}Vhё"rq̃ʧxi|IORmd =mdkA}5ࠚcWZׅ+kHD4DH)hc|]K6$G&AǙEJ^ k_[^6b4pՊe&5(+2O\͑-pzVVKjMR/|M5la>DxUJn6C!\v= l=dd+ܓ[5;9c-7btt[7CMS7UREv]\(ɛY#k|IBi$B=mP0$t&A%`E~+|9zʙb}NEgocGnYE$,Mb $Ƣ4nMmٔ0H:_.ބO 3 @(%ԢYM8yyv3ܰmV aHŀǂ}\;l,\/yxrX)ǥdKJΖr?grYԁGz̩7W-2``?͓JJ)oZKz0 B_ALk]5ϾP:V0o1"A n65Fl$ C6 RSkZE7guʠt OoGW?s Ig jH;."p$z }#V9m(gA~]L*S—]@hKOS:wÇxO ߸o-*S " ogc~ԉtf kegSjq?`gC7vbg79~Mevr>Em?υ~c+ʓ4xlhGcC=R9:Poc]r̛>7,x=NJˆGp\4DQ/& 5˒Ё #<fkY]{iUܟ0K&JV~ S Y*9<%a7 eΝK:Ek|"7v`ҕD wBڬo }-!9G@` ldt]{~w>!#tºvqNn2\yMr?hO;=52Q;aa]J,4 p[]$Y[& 놉CU >=m(7/lnBt#Jz44vszTϩɾOfl'~e |/BbD,Ge[JpqZH.I>c~䀿W%6- o^DІEl`sQ"Ja8j>8K!-qs4{k Z Ս}.&5ۡ@$W4; l7SkJ6~bve{wK׏`,*ڝ,jӬƵs7м H*M"آ 8 8ɺ& eg -HMv[2epp&}3LZ#?|b&Sji"Vmά=S.Ǫ%-y?!iL(\!u RL|cACoMMiQ"QkQz._vu56]}zyp^ G };_5;A0C϶S >) ɧ[I7G[<0+ ޱRP4e[6Bḥt/w>܅w- FWoޜutkGc2JN^Ok6:8M 3jBuKтl 3=h֑S8E(M(e/@ɍ}S j1HE.NDy;yɣ0R)fZy#b~ԴQf~`_^1)<{6Uo+jAj]\†χ7#fU'ehD(ݴuOw[!nT c@8^lxq,õn|s>TGo# okEXFL;*$$6}  GWEDHfh:';*u5n1 r67|amoYyY(P)?AwįpcһJĻ+79=*b:&&%į-~/ ]]DNT70/ 3\3n8|˿ρ?[*CL} %^1Ҫ < = Ns}[5*[ eNhvr]`%[&r(Ig̏5~z^:=m-V}Q375vra;^j>:[AKuc& xgR7Z}rje`qs~q G6{s<*lf_Wb^k͋UKJ9,诵'rߍHꫴxtfp١$]f|+cв"zX錜o\ߣ7 v@2\E@"BJOZ[9=zF}M4ͻƸf^t O iQֿ/n Da,#Kqc%S;ClX#g~GIa Є1VU+&{Vw1BlؑsuCY3|LSM21u4݉7 81ǭjXMX'Bqo͙qM-N /Dug͈Joў]`;`1@G<7eb.Njnj~ֈ?!yWg۸0#'. tHvU z0lp> zjQH.V"|负Yjlu sDž'S q}#frdTهy. Ξq"uBPd9)Q,D' ;\#V'YONDgb+\O,@ f.Go.`|\{R:Ņ%!-![qdY/, $3{T^~b %n tGDB=ݽ*/HM_Ǐ20A=G{q$>+f GmD9 5.8yIbEʥ,!pEZ] y)iЃBq/4?yeS9Ö~/ ٺŭ#.2mz#8Fǜk/B'M0E1@ʹB++hN'N g3Ң.<wwll HE:}vR6reӚ֌~97,OQ~zS4 @Ee ŔWXP_x,(e;,BqUL?2ufeW+[MmA ,<I(q+u0b? (w"L[762Oqs_}D3^fl:lF]Ń fQk]e؎2Ikۏ=l0.L8$kS!XRVIt|G ~kϣBCCh[ ȋKzps#dY+.# P ,32I{(V~3LC7|  ކ=$Hl8릞UYs a@|,'цם`c8xhe+'4=}u#Ӈg: I9ۀJDPۣ'D|lMQk!N0dɬw2pZo4@> ᶄ97Wba;aW~,?w3H؛{19׋p&E 6UťBkɢJ<2;$*&K(.{؏T!LB&m/PW 'l_8^BVgU.E)W&@@hBz2}c<#=9[YqRܜZlot޽pՔ-d!\^tĚj7ťFlU1n‘>,=eIK#ۙ;V!~?hP/'i٤ex(H6kfHmm,X}o߉`X Oއw~Fkα%D :/MObyour:rW-mxAkFjnk{iR\ؽZ2U=p-wN?_ÄW]EM3(Ǜjb_-\?|h} &3XNPhV4>ǿ=!}/$^yQLN>b92zCS_(iB[8ʧ(^ČG,pI⭥8}"H-}o?Ublhw0@񚛩du9C}E0pvM\r3#{M%Hp늅6GTo[PM~~&I ٰNRJΦ#5:zBD\ 1b)\f_j*ҾQ%;c#ju ,L:役]u nVz>|ֶ'ݯR c#uESVۆRMĺMizɟ/5EjJ4]|":˾5Mr]pOVM?M|zGk<I- qz(ޤ ?>yў1xykRo8%s1<tpipVwi? |b ;ӥ;nmPwG5Yd0z,9 ' I)]ؙ'UDԦ%$C;%Y O-=B!ExΨO 葁vh3zkB&]Jȓ-Erݭ4tK Ia\`{@}?3=sң;%ƶnG]>^)So t)FI36vN7+HN>1 U=hƫb/du}}8XNNC1lPR6JFw/~q스fX3FUL{t<4U꯷$鯚ԽȀAMSSO PkG_⚶Ũ ).R\#-ָ<7诚䬑^͝*R3g o^LLX߁p qb_5 ҩS_NGr;{v\u&984rsfзpYvG>ݙg%;O#hjb:[rM?I*\OoZ]x&NGBuq/\ED k~]2.E+BgI"WRQ &9RvB'8 VSN-tMcޚ}< ׭5%6 M&j~VWT-c1>-E0#̽jL/˅tce2נJlJy=$߁p.:&W !Y^|^E!~B!9%^L QHr(]}b* xxQjbj* QFյ(U卫{.zkzy:hx?LCʍI*YnV$XOQ}[;VuG0 j|)h'nPt`J#πGA|:V폤 Y3 ߁p]`w=*wg]Jf'֚Ji^6ob 4 ]汛½tC&kû,VqLfՃKr dқ2ܱ9R\8$B8ۊ7M׃Q۳ZT}{Qw௚[E{MĠٽyWv:xiϾn`ZJ8.a}#uQpS2 h): ׯQ%{s j{E~K5IrX}å_% 6xr 7l_O*^,OGs1BgJi0tQ{TQcC~qݢL[4Zߖmw*F7U/pC7t2ݘ\JԜS_gUg<4+ ח%܏Q_;#y\.#@8Q@u!5&c(5"|9l &wÑ>~>xhdBnDg}A+uोz.vA=Y̠^+1鞮0NU?”<(So/1}P)Z|W9ykl*"{_p^K4l+q|9#me5莓;W LDArL1zԻCs9by̺q[ߢ:N ͮ0r[#5@DT(Ɨ!]gҷ[aK2@F!uҖn7vX*-Ti׋KN%<ޭy:<N2kvYc}$x.g=I=+.{ifyˊ l.iܽyM=5r>40TnFKsfEPN^'>>j?m7o"Wn̸fIg-BsQ#sOθn]|ʷ;!~ o<wB\yFX$zl1 xRm #R8amYV|0~[f~Ow7gL z@NB5ъjt[ovb5 LlJg~TDܶ/ VyZJHt"WݟTΗ#6HpۧVFJ<]D`A{oFSL7I-z*1t_/eʛ.3euJ.1ʛ3j[qgVPWȻ 0R$ws,s}}FNzg$#[܋n4TACFkՕ;62Do9Ή<ɭi=k J`"-W#:)w=ocN"* 5['EL2i_}ps{aai?:=R_cGVfM%R1;mK><]9Z 6iڻ2^U]R*}1Cױ`([ !+yJyZIWx3HBha6}tItgXLj7͏^_tc ³vuHrt CNL'8i$8xմ}#x58TT 8k/B+܍m^Ķ7F~&|:wɫld~ΧZq-̚cќ.pGlm8l2W[]#RM@?KD(t`kNIxc8ݓЅeQc⡚5OJTTA˶5Pb6}p[?lz=ޠ}ܘ6$K%qLPqt~V*+fV$2 UP4ư_9 ^4I.UsI喤 Z/WD% .Lq߬kEt)0(ooGW#?M0x% s7Sp$Z\tb=ӏx>6ɥ';(}Gj!׉2h(6Oy_ӴIBbByrMÔ-tv:sJ|ހ?\A*ܰ`<^nf G22g|1G߸?}?G~lx"'tI[&tѡI3U@f"ys-wLx=1yj *^(S[J/r &>bUCsIc 8^x„_o]׶a0eْZDV୻I#ЗYbx rHίꑣ$0c>X0Y ]<Q!mY @4B؇ 3.HcG;/c<~ciOzPPZwf'o_>`IN "ӞdOЬ:&t&t'0@ f- ׋Zvw_U .+#\#EX8]p6JmSAȉ zZv-"$i.#__O  $}!9X^8kЛK:1]bmzm3^/Оiz Hp~,ms+}2ONBɁB08_|ˁX.@ʯHa0lf6MH`=$ jQJԅPc܌3RKVS:A ۙ]n;oOC9.=@las]Kw`x8Au ^`7<3T71^)4Tz9`o84jla@ %- Л2h52tF2̽mh/<'`|EO ¸nȂ :+ 3Z:;L ~c|غ8qG{FLIs8żhfbMϨ4t$w{M͜+~ hȱtv!:tvuL u76|j24%xCgnjE7= [~HhՑ&qJr2=ٔeӏ}rymf4ʹxr,)qg(ȮS bd5~j¨yvcĸ0 0nz{YD_LeMfya 16Uc_>DK~iHx35EKNQXRF^ b\|v U8?l_(ORᛃڬ'۫ƼMWxєU?©C:J?aKc" ys ;r=Oc#t2#:jr➪|sԽ1 PM͞ln'[f`-;^Ri[ Qo !z|gqhvCuAnf%!Z1Q=EА6s-3&$|ɠ.BiH/M'|XMC޸Ϙ9@|h)bDaPaКhpn3vސXwrn/=4H̒ q3(뤙[ [ta*>Iv8*pn'+ӛOydNLr~Q@ pFpnO@Y36xmuDS˒[Bh}s{zƣAy ,Y?nTrsTN`ͻU3nnɼ+NzUש5R? ڰDdGa4̃]ͷ [GLz: r쥌2骝6''|bml. f~e&3)JU!`,t=?Cs+q%U60=dU/[;;hlND9Ee8]!ILo'vU,.E;6&;q"]|c'RZEP`gz ?C5X>R*[% x96׳yGg%tr@=a~gfuYȏQH•;,KsE@N }f5TJ.)&w+F7btgK} 60s(]v[ !=q",h(oG> vzk[:N()mu9m#*^::Sifȡ  HniQdܫ9m@_ԝNg bm jdLGܫvϝxp8Vrx yˍs&sv><{620$ kcOOJ; İ%nn%gF->et֋,픖SUC4SLk1`z6\=-D?!>9]C 'XaNPtR{czXvdDėE8 eZhwT9d|bs_ҙ :ұZbѼpl$hd$*2f , VM$\>J`h }N|z/e,x Q,m;_u')0z2bU<;&&L#aZ68wܬ߭$Ў< QW+|i[XtZw&*]5;i0+uͤ -)ج_y%S+PRq6+/Tkp~~v;=ās m.hx<"}P *v^p\f?%Qb/(p}m4xT\ZK>?.H&g^XeEoby4%(#G>_.` l뜍T^~b 8+x ^xV|4;n9 > e4 ?>}/M= :ɜId\EaM?]'?e~JV5Z;X=[7] q3aβsv3Gr<92>N| Y~l8B[+W0fV=GVT܊R~;Ib""B!p_~0k8sRYRWK4ZRe}&OAI*V6g`,nëH>ּݩ=o\V?pb#7Z2ѩ΄9 H9 gnq4Lo`?S/ ;& JDێq' ^W+hsh&@F.s-[RMA+VWǜbf𓿇e }8XA#~nOZ!'].rC@hw<|AK_k~xm5Y 2n'ZS!=Dv ZE#h|>W7Ntǰ$7eTRc>P1_vy|Sűzu]+@diŐC(GTn$m樏ˇB}ai}*q I 86W/cQ.}gYzO\Wk9.^f7s ܦ puwCTFQ4[rtQb'/+tS %L^cV c:8S%L}'Tg>ie {G:e& u&cCy nhtjަ*colZ)/ϩ c.uCx940&/ϱQ #`+}*"5!Z/ňbalpkh}81<L)xWg@yη L+na>(CE_s^y:5xPwЙɡi{Vu'aGXڶ|~ 0sjZ<O斣;O] &|Na\bk(a$N-j1U^{WGAGqەV-=_xڱfAӎdr?3 Ƨ`=aP}!F)T_ )gK[{%D:8wO-/Di.>}+G_e**Ƿbi4yB+_iPɳ BžU7Kf[*< D2z2*(u i4ޏezYDP}b~*ЏogLȍ:ҍ0`<PV9KV¶N)|(q ؎'[!Zo= 澡HA1:@5P"BN 9ȩU?*"2dkpqQUrgVmAtP#zM/eRo8r?e?7ﰂ~S V+Up4reZ <u< 5@.٭aXL]?L] a6Xk*Bѽ=iSyd>f7**=`v5 q"Y\oPI됳F3~Qtmm"Ut"rpˡJ[w>BMp:!zoOEDrҫ%:1f;W[ wq[ɱJ9B8 *= jުϤ]Zk m#I m噓_P*{4:T57G>&W,ceJS1NZc@qتxŹ-6wp?GbcMuʁJcMA]sشw:o䷇PfsᥱC|k QEt*z-Ss6)Xix>!gA ]uZSKru(\myn#}防]LM^I'(7ԯJ+C<{=I"T{J~8x8Gg1̑> |(Q͟ WsËҁTQ2 )竫jx}'6f'̊EF= VxP"3;WVGϕn?szqns`pF{ v)+"Fe[ǖd]h?"?b>*ǡC!"2z(X %>뀕=}<cnqjy7uHAiA'&[V #/`LQi4iJe.3 EIc_ 6ྤ"$ 5I=VU};KCf|sͫ J%n'P NӎUVgk^INE\y,!.E;~#LT 2 Y%ɪy|$QXR`:ۂ6+VbG<qeb񞺗CXXpn797&heOY(rҞ5i2!g}'oLOxp  ЧbB 9X+#{ L[xہ |R՝7E\Yo # Yyv0ꨇASmO;8SFU9F;Д t"!AW)/:e-$: '8V\tK}҄=z}R>`z'h,Ok] qc$.AXqWV,#V;_zC?o$(P63"C*l<[IɦċEJu-ui-{/]y:USieN3w9boqm ϡs{ Rb^ _9Yvӓ-o]F ~~4vIj/uc~c8zy0tE}e6 Igkp]3-M[=o[.َN,dHJt}0qdRn1:K. rIQ$ú5OoS[ğn*7T+ TB{dbT3.Op+WZ$%q(6'RQ1JFzk^vLxG}D!L;VKunPZ"ا8R t=Yx41!ŎRcFRBXd#ƾu4RPFϛ0$ܠqr]"xn`E>FE8ݶK TszYʼO0}<3>_\B,2C%'bz .Zl)c"H\EN x?;]QhuQvњtTŸ?ȗ/x2U?姦T՞\IoqT:&1dAh]p|7r=DەR6,z}u.h㍊I>fI՟0>{]xh{q6- Xʅ@?G ,uJ8}/[e݅}BիڙDj_#FX\i\gLp#kxuL.ip^%Q0dA+D)HP["h{Y=~'G:?Hhxk+ՂeɹPᎋ1a @ e 44 T}>8wM ,/K?_/{%rHiC<ܠVMݙ\-=u<$Aş^Ho8߅rE["G|Kc7 #+:7pM=~~^d}%a.͎cO7Ĉ+v⻃o#_HoűJ23D^r| 9 |t"i%+y9R; #N@no^H2"EUO/yr: s9oW+ .`Bs:iϊ<~'7/$ʠŬŽJSY(!l-: ~C5Ր|ȏ|j"yۘE4)DȀ~7ީp] (̚R z>qRNdN,$Z n0rѿ1uZ"ޟUF[mWp\Ҡp2-Vro^Hq9q;1I n\pJe#uIk]w$G&*`Ն K1P(Z:޶D|!sYϓ W&m±) V9S dpҩޠڧ+.‹JpQNeAYrBۨR!7-d uXiBj2qut4n6RŅ3Eo+I4M QRzGנ?I#S(FQ>X(UU, '74V].+e)l9_=ٺfb8V6F 9/=_aphdW>&@A.tc/#x|ft8ʅHx~1bw¶R/?WlG3B9 -Z^ ylhԈ+XSי*_~&>^ዼ} )CMeX@ zc\Ay>:Ck-kys6nаz ML` 0[]LFI!oQݕ>:F3uv9f& |NdB\̱\ix,Wwpz4FZ*Uɨ h˙AydጻmzMiqtI9HRkj0;]<4Aڿ\=zz(cU-Hu qhޡΓpm-VO qCZdHIQY͹|{'7c}ƀ*\y"齲PϱwՇJMԷ;3 &SÖP9ccXXI ̸`)uaP/|ًDk>{^B^ ǫ,ȠUKcp.br?C~n@q`~9ZMXCo5Fgl,c)z{䂛zSj (OczQ&"$@=,VS ѥ_ûuzp7 2 kؐT˷V|s>@2;˂L<&]fui.tLK `+/_Z1BODwxGtt9)z&9eS :bX-t`zaڂ=H! /SS+ZJ Ɋ<<k-6'8~XQ}c񷼏ګ á{Esv5_LQ =#`U%3iuoPs ]ҧ9]|m Z|I5LߗCU Z8<\LL(V k/a6L]K[GŇ{-ļȍFgoi.3/g{|RƏU! 6e- vYx#)~VɯiՇv]O,4}- L QhBI]kٛMZG/Z 6!jKd6Z2Ѓ 2 a?ڢA /eez9]<^bNgtɐ. ?ӡn _ϰ>=e͈=JAB< D,_~;bݝx(,wцhDU a(I濥},Y7_Ldky5&t6Vpy(Zĉ8^b* -6CWԨ^l *J*U/+2~{bݡp_S }7/{ŰOwŽ#~ܛi3tX&ma>qtB-xx7xrDWLniHoٗ|P0I@ *}b TҁӖx{~Gvu0IorU8)uh=!F'rF}f01:GQ迼CZfAZ.E 7{=u7xgiG4~c>KG4 Љ8\!COYAQJl{_Ohpj]GpjxN :ЏܻMlWJb!y6D 蒋psO]5(H ٮю?.Sc%%| 4;UG^*{٘ψ*HI%pSGH695rʐ7wDxdFKuyFzފd.gOb|\K*mPdIjkHT峗_]d5*Nk24yl;#tN jeO?qᏌR4<3kvM4Ȣ&g NLd6J۰H_uz%A Ku;c~\d~Ki ){Ҹ}L&%Sg@TCh՜iy74N.$P:Jq:&νAH𝽏cg;J3?[sq4;#2Q .zs#a{6qiڬ!~1l? PT[$uSu7MA֤=_dV%PĪLHg$^ibF~WG`%k6cis LƁEs y׭z0h\Z|B`b+"D|~d%^Wwڌ[w7VNj]n8-_=]5ځL"O2+}K DVZLa T9Ŵ29n>˻:ʀ!p'0w>~kEt^Ae u2j,/jZ}_20]=KG?jA o PΩY kČ[4Fog8Y:+ (Uviٲ5jKrC2^ P)Rea4:%KtM>>1_#VYOq ,;1ُId;mMt"zg+] 7fΑ=sZX}3Fk?c\d1I6I ٰ%b(l@~yf걵!`\ZJ{(pK۠nKLuK{I{&ٜ/"=T&yXo=A@G%u +gagMzkI8~tDuR͑U! !}3oG}qN6ܝmF[#K[qӉ(B1/׶Mn_X&`0)AЪ*ѝ YT:J~i?|wnTMg]~[51[ψ1 +ƏPR~3Sx 4wbIZ*YHWcPYLW@Nۿ>_A QGlJq m&}y!T/b0sL#QpZc\v'a>6џ~f.>C@U%O 5|V#VӌOnS}%+\r5q專=3:9(p{1Ed\3Ù_\> _~kn{m4q睩@~<W*I*̔C7m>a 8&9}i?~6O\3Q`heZ!%Xpbn nwI?edt!]U`Xh?{z2^i`瓍e84Ggz@`X;kGZ.>`:|4Eͥ-2Xa%3.+֐i؀oC,ZI0E!#>z4M".x+ibD]Ai%9{B۴"^7 Cop=M{lhf{$KwcPݸ 3_!w#_a'Ifn1#b2`zo)H|hukV_@HWo쨲-_O&Y Uk޻TwUTE#!sC3fCƨV!+켇z\㌢5Ru85K2kjʿM5u}@7X܇L*6p8SKc x22_,t ]i NPkLvX_t.2,ta4w&֙4aZRd  =a(t}iYB\`8}#q*D#xYWRV\=O[¡5!CyTb};rΡ1 GfCaUOC3t00snq8fv/ӦZ6 moFĐZJO#_|SNpG)IxGO#NxnI8ŗ8Ai*uPY).ÑK}Ѳȑf۾'rx `Z0H Ft X $E?V¶clz{"CK;OWƸ^p:fA3ȉۯj>}ǰ(s` yAaϰHЂ+]\UJԠC 9oࢦm^(8 ΄Jc@3)q@C^"W oP` >赿 2C 7QDzj5ڥ%FS̹W[g*z=IgAQ[#zcj2lJ=ߡk7+ "ҔЋ 47qI?:~Nq^5?EQD , GxRPnI,㇣lVLGC}4 5a1f0'?CV"? Y;]iT~Md#ZpHYFQg j(L?ױ\k:N/)* yS^q*`ֆv솛2;(fTq^/BZw9`d)%x.ZrHL$ͯ'oعud:4ʔ]2<$ Xkq? {CR&ojJh ZLhFX羍A9"\N|-S]_ 6RŁmVڼ.j|J̏#xX=r,*rGPN *w.4XcQ0$<bc3sǯX qoؖAc^9/DŤxWh<%ğ:Γb'ؓ,>i>S~4c +?oSzΠ<"nXj% m|ȣ}Gi ˃7!GI^Avu(s@uE= 7VVG9љ~'=[m<ƶ:ruEx;!<ێtW.~YA$p4У{g=̶Ot:v3lxT ,_n]1Nc$MkcUݎg{Xyh R sd%D|8˩ꚪ}Q\ T"$\@:I|sToiƄ}97vMyyK;0~B3Zڐr&Gt`.}^_b32ԛ{f=;*UL6 2?tWuaqN=N 'EAF]x?{MvPYᴠ~aL"!Oڗ>cj\G^}mգ3" ^onv ^}f<݌ሞ CV*f[LX9TwNeY4%~f.}V!~C$Q{ m(1Y5g$+%l띣P3_ HZlI\#ģdTw&N#qy ˶9Ek3"!ڈg#-vl;MW"Ɋt E( K+´E`ӎvgkZM#e8 Mkz:sQH;KFdL7[ov2vjFNM向/zK8:947"'Rse^G﨨ɗX3},c ^!*HS'(Tf3ӸQ<%!A; KW ,ClG{CO!8LYcTgz:K9{NXG3a"feTG[֐+} }Ka='9DM0_?R6>_ȇl'7 ɥ*e9o :z^&`4 BԷ}ge^ bzI Fc {E -*ٗA.3?^X֛\Om随x_R|Gm]p&NKL{KDUy !<8p1A<%g1Qf)8Lz6*.^êqRr+4:y8Mݜ*TV٧ lm٘GK pRBu Y O(6Sqx9S9%5w n)spzô$-Eo0./xOsy.p(n3]}qh>ZlsnӦ~1?Ed'Kje\ Ags{9Hᄢ(A Bؿޭ#Ze.҇QyĽI1"߻ >}$;x^?6hʫ^u ʉfGÏ?8FH\H%un"hܦUTE>N)lȺ%WzgD &YpjGGAt_[z^[.Նu*T9Gy5Qʅȭ5q*j/OSj8Y:9UN& QP#'s챘:T&_]fPw+IP/$X؇rcl^ d/@:senZ\2!Uyw>O=/:JRo^>?nW!f:0Hx 2 Nr%2wp= v-%'.F%0L$xh]G͏YT^9o{Fa B[Pt/x݆G-Q/qW>УoĚ|X>K2=߇#czs}{u'Bxrcq?6 >3X$HXI&2<5u"m5Lb +Z6oPv2vr=Dn?SΚ7nsqT|Ȥ/X*>ӟ#(s!Ɠ$֚0tz|P!f8)C'p}&̏؋ujW =n MeUa.WY\B:Gm2<% hBW FuqJ'MډV)6 @ E@B;ݫѦ43 40$0p`'!Ft9]xA<2& Z9T 6ޝ7EJX v9Δvcbg&޹ VME_ucHVF'Yy0Q߅wa_7н(/ϖ|nKCڇAQyܓ_ _ھ1[5`q?^|bb鄓K|hoN5;g'WOl)Ȃoy&ٲ ՎeIX >Lџ>6\^Yñ-:3z}bɸ$nʼE".>)[15z\9AQá9jBT`В [k~UvC'D_+\Ψ_{x]=׺'Bd lcGJr{ wg}R 3!ޣm^]9"nӌ;Bt;p`S^\YA;Z)j'{ӚXE @8<7+⸿!FW hs:IW+¸ пDv$<+Jr nՁЖ[]5à%6 j_|.ev5xqg%O Gz{yU/۟h6 )xf-g,~g<ܹ:58NOeÎ*2ҨU 祹=lަ=Io6r0F3-H7ӯTy[nHu|N a~z|+ r؃"&ݣz8ϗu= oQ(u+U)v5ZQTBie>9bܩ7^:❌p#`ICCүʙi`B??njxĪtxdS0ڱUg'_}@:㜦I RVc=I&]w&.f_#!CdAyQ6mp*ꘕ#J8M9!Ab#ÚjF)9JyNNXU:?0:FH>**?6|9C|b?p/`Uyj服wx8u+c~oe|i"E+]~#ҏʌ' ;480, iWM)n&b;V07')ugʴSw8JՉj0m:חw|G7twI~ 2{`3ށ䭔1^!3f(v(Uwa( ·def}k7%{Ʀ;H ,T+Uꞷ+LwRD:N05# zc8 v@h%w~0𒃥AD{2B 8l'O_ϊ(b%ʾ6W!R<[6.q@Zes@Γ+׸.y^a>vj-(SA!`>R'r! ;`oPv}$Mu:ϯEKo#Ob/DN϶eH7M}H@ٝ_w2ì cerWVl^X]m1ryg焐!b*oAsi:*{ܑ~ؓ6 W~۬4F5`˦y>`yd]ma97p/#G FM'A<<;Sg(Q/wOCBjjiw\uŐK֫Lx່7&7 $'2]ESþ=*l`eѻ8w_v.pft5V0/L\d4딑]͟YTb1#S`5aM0ON_gNMPnD4]ahxpq҇N ^oqVkv{p)phM@Jt |g%=MsG3lҙx@~xG5ϖ k_`eD{Z uDrĝSl" qI6Ab_N^.$\|M7'.#8׏(3G`w/Th{ή-I Q|k > p(M=o_7ߴW8Q!4Eb鴺yk qh(?P!W];QgUd> ;9wMJ6:kn!(^ǁaJx)S+&Xe~hg˪2#x.K~ݧ;0 *to ]Xχ݀9K|*e#frXeCORx&Cq+Ƕmg_3[qFiuaE S muxԣϔAtiyOY.).2Ðv;M:G-&фnR3̢>WNU@F{ <~ }Y-1[qqk٦[ K#Y '1O?}Yf=;*<;SaI/bR'#s>GTsPN() `$CY_Z%9BE }ꩼaQo> ]} u/T_] wWp-£I'YuFZTZ[Ѕ{Ȓ* v r ZgMWĮz:b1AKѶ*a\RLz5i.ḻ7Wi;LJQEe=w=,v0G ƛ8F)sg~)|7O{]"MZ^7׈PMBk)S'(U͓S剝V@4+6^iR fXn)rˉByp/7ɐe7(huMCP`Io@~j,VxLcJ>Җ}37U0f7VY앱zq1HrOҊ=˲z[y:7R"Sض0z b``f P^n֌*M߃ u> qp-B/U%5#w/]DNzSNSK*PA-LfշCAHE7s8˥%bC}֢*;/ wRSz/w(yjҞO˴FAF jRV(bmn 4?l[Fե*o,n4,+ 7HʋzIDr N="Mq BҞ[ SysiPk!+\|d[lyR5@yWصݨEXmKC 'ʽ"xoD+r2ߊyHGor9ێ8˓j䇺X1|3T9~WɑDt$(tcYFu=3hsc?'^wm|kg$$ߛ:ҍbv\V׬i @Jke3 i]dp6Cf bh~͙޹ КEy;KI( ^[.{i2PL9٠4buRz ^##?OW{2 $(\Gɻ;z1hl@w Ӌԥ0nl&[f* ǦƟRpuiv|}h-򶞁S Ύ#NT(*K qw`( $brM;dh[eo"?20!(tv:{+g8l;f}Aw#&:݂=I`+00۠E'0  *H  0*10U F-Droid10U sova.at.or.at0 210930141223Z 490215141223Z0*10U F-Droid10U sova.at.or.at0"0  *H 0 md$]6o n{dऽbS1\N&0U>8ւ>c%2MtZ2V9>hxRQØo@zhY#bETlhڲU?77jɖٕ ԋ.u*P@U}|D?2ZC,@X(TI !-+3!Z,*u $2KT$PXN3F'' p/ Z!00UҼ㨡$" ~ϥ0  *H  y4ѝ>U\_|IJt2[{??Ѽ ab `iٍg0f|c1~|/>C썈z EkCD2i˚Z+d:+;|;/^lܕ[=U UNXqT15 24Ieu0oMߧ NW t257OTDDt#ҵ|J/AY_YneN<>ۍ&йb  ADt79L6凌)ơipccG"m0s@@dHLƷ?24PUū 1G#RMB8ւ>c%2MtZ2V9>hxRQØo@zhY#bETlhڲU?77jɖٕ ԋ.u*P@U}|D?2ZC,@X(TI !-+3!Z,*u $2KT$PXN3F'' p/ ZhSo`( $brM;dh[eo"?20!(tv:{+g8l;f}Aw#&:݂=I`+00۠E'0  *H  0*10U F-Droid10U sova.at.or.at0 210930141223Z 490215141223Z0*10U F-Droid10U sova.at.or.at0"0  *H 0 md$]6o n{dऽbS1\N&0U>8ւ>c%2MtZ2V9>hxRQØo@zhY#bETlhڲU?77jɖٕ ԋ.u*P@U}|D?2ZC,@X(TI !-+3!Z,*u $2KT$PXN3F'' p/ Z!00UҼ㨡$" ~ϥ0  *H  y4ѝ>U\_|IJt2[{??Ѽ ab `iٍg0f|c1~|/>C썈z EkCD2i˚Z+d:+;|;/^lܕ[=U UNXqT15 24Ieu0oMߧ NW t257OTDDt#ҵ|J/AY_YneN<>ۍ&йba3ݟ2yV"<5f[6J$C/l+wDQj&"a׊#KX%0Iv[;El%d"( ۙ@^, !h[o~ݑY`[u5u ! r,5{a%Wx5 YOCLߢ@] =9p8ւ>c%2MtZ2V9>hxRQØo@zhY#bETlhڲU?77jɖٕ ԋ.u*P@U}|D?2ZC,@X(TI !-+3!Z,*u $2KT$PXN3F'' p/ Z.werBAPK Sig Block 42PK!*ÇD`AndroidManifest.xmlPK!*+ s;assets/resources.pakPK!*r =assets/snapshot_blob_32.binPK!*6rtassets/chrome_100_percent.pakPK!*6o Kclasses.dexPK!*υyup)res/mipmap-xxhdpi-v4/shortcut_icon_shadowPK!*(D!K ޽res/interpolator/mtrl_linear.xmlPK!*c %wres/interpolator/fast_out_slow_in.xmlPK!*c<<Ires/interpolator/btn_checkbox_unchecked_mtrl_animation_interpolator_0.xmlPK!*c<<Gres/interpolator/btn_checkbox_checked_mtrl_animation_interpolator_0.xmlPK!*HGres/interpolator/btn_checkbox_checked_mtrl_animation_interpolator_1.xmlPK!*- *4res/interpolator/mr_linear_out_slow_in.xmlPK!*ɽ@C_res/interpolator/btn_radio_to_off_mtrl_animation_interpolator_0.xmlPK!*HIres/interpolator/btn_checkbox_unchecked_mtrl_animation_interpolator_1.xmlPK!*ɽ@Bres/interpolator/btn_radio_to_on_mtrl_animation_interpolator_0.xmlPK!*c (res/interpolator/mr_fast_out_slow_in.xmlPK!*ͥ1<res/layout/clear_storage.xmlPK!*,%res/layout/payment_request_spinny.xmlPK!*^*res/layout/abc_action_bar_up_container.xmlPK!*~Tx&res/layout/date_time_picker_dialog.xmlPK!*G )res/layout/payment_minimal_ui_content.xmlPK!*hl:res/layout/toggleable_flag.xmlPK!*Pj hres/layout/permission_dialog.xmlPK!*N%Pi@res/layout/image_frame.xmlPK!*4)Xres/layout/bottom_sheet.xmlPK!*l.Rres/layout/preference_information_material.xmlPK!*[v0 res/layout/preference.xmlPK!*lc<p,ares/layout/payment_request_dropdown_item.xmlPK!*9&res/layout/infobar_control_spinner.xmlPK!*~d(/res/layout/text_edit_suggestion_item.xmlPK!*@$+res/layout/fragment_crashes_list.xmlPK!* N._res/layout/color_picker_advanced_component.xmlPK!*[P0 res/layout/abc_popup_menu_header_item_layout.xmlPK!*u9i "res/layout/abc_action_mode_bar.xmlPK!*KN %rres/layout/selectable_list_layout.xmlPK!*͎f@/res/layout/text_edit_suggestion_list_footer.xmlPK!*k 'res/layout/photo_picker_bitmap_view.xmlPK!*A%res/layout/design_layout_tab_text.xmlPK!*UG<res/layout/add_site_dialog.xmlPK!* *8 0Fres/layout/notification_template_lines_media.xmlPK!*#m:e%res/layout/payment_request_header.xmlPK!*&)`2res/layout/select_dialog_singlechoice_material.xmlPK!*飒Um-res/layout/autofill_dropdown_item_refresh.xmlPK!*^x.l res/layout/abc_alert_dialog_title_material.xmlPK!*wxL M res/layout/abc_search_view.xmlPK!*rdH(res/layout/mr_cast_group_volume_item.xmlPK!*T3Y$res/layout/mr_picker_header_item.xmlPK!*\ Jres/layout/share_dialog_item.xmlPK!*B`D*res/layout/tile_no_text_view_condensed.xmlPK!*~@6res/layout/date_divided_adapter_header_view_holder.xmlPK!*Lľ8<* res/layout/color_picker_dialog_content.xmlPK!* o &res/layout/contacts_list_item_view.xmlPK!*]"res/layout/checkbox_layout.xmlPK!*GBz &#%res/layout/abc_list_menu_item_icon.xmlPK!*Go<'&res/layout/payment_option_edit_icon.xmlPK!*}+pD)res/layout/flag_states.xmlPK!*H /*res/layout/text_view_with_theme_line_height.xmlPK!*+9F,res/layout/text_view_with_line_height_from_appearance.xmlPK!*䭧)94-res/layout/autofill_dropdown_footer_item_refresh.xmlPK!*:&+40res/layout/infobar_control_spinner_view.xmlPK!*fO) &1res/layout/preference_recyclerview.xmlPK!*p,H203res/layout/abc_action_mode_close_item_material.xmlPK!*#=P (?5res/layout/preference_widget_seekbar.xmlPK!*U@d9res/layout/app_menu_divider.xmlPK!*Ș#';res/layout/mr_picker_route_item.xmlPK!* k]5d=res/layout/custom_dialog.xmlPK!*`'z?res/layout/persistent_error_message.xmlPK!**Qq$-Ares/layout/preference_spinner_single_line.xmlPK!*)Cres/layout/dialog_control_description.xmlPK!*ä3(%Dres/layout/infobar_control_toggle.xmlPK!*цN 1Gres/layout/preference_widget_seekbar_material.xmlPK!* D*Kres/layout/expand_arrow_with_separator.xmlPK!*!-5*Nres/layout/notification_template_part_chronometer.xmlPK!*YDL*@%Ores/layout/abc_action_menu_layout.xmlPK!*s1% Qres/layout/preference_information.xmlPK!*X^?pSres/layout/contact_view.xmlPK!*4e'yUres/layout/crashes_list_item_header.xmlPK!*k 4&Wres/layout/infobar_control_message.xmlPK!*7Yres/layout/dropdown_window.xmlPK!*-p1[res/layout/http_auth_dialog.xmlPK!*4 <]res/layout/notification_template_big_media_narrow_custom.xmlPK!*>HO*bres/layout/checkable_image_view_widget.xmlPK!*Afʪ fcres/layout/mr_chooser_dialog.xmlPK!* 5jfres/layout/notification_template_big_media_custom.xmlPK!*Q\+jres/layout/preference_category_material.xmlPK!*  1mres/layout/notification_template_media_custom.xmlPK!*R~^ #qres/layout/cast_mini_controller.xmlPK!*+AT82vres/layout/abc_activity_chooser_view_list_item.xmlPK!*\n'yres/layout/preference_widget_switch.xmlPK!*Oa~qzres/layout/page_info_row.xmlPK!*l}? (9}res/layout/color_picker_dialog_title.xmlPK!*XDres/layout/fragment_flags.xmlPK!*FH) res/layout/textbubble_text_with_image.xmlPK!*3с /res/layout/payments_request_editor_textview.xmlPK!*6PN %+res/layout/mr_cast_media_metadata.xmlPK!*ahu/,res/layout/notification_media_cancel_action.xmlPK!*'&`d@ res/layout/abc_screen_simple.xmlPK!*lU4'אres/layout/abc_expanded_menu_layout.xmlPK!*ʾO` -res/layout/multi_field_time_picker_dialog.xmlPK!*h@&res/layout/payment_handler_content.xmlPK!*lD'$)res/layout/abc_screen_content_include.xmlPK!*P,& res/layout/contacts_picker_toolbar.xmlPK!*Pzv4res/layout/abc_screen_simple_overlay_action_mode.xmlPK!*$4*res/layout/translate_menu_item_checked.xmlPK!*l ,ares/layout/infobar_translate_tab_content.xmlPK!*78#jres/layout/more_progress_button.xmlPK!*ϽU  )Xres/layout/preference_dialog_edittext.xmlPK!*\f`*res/layout/select_dialog_item_material.xmlPK!*F|3rres/layout/abc_search_dropdown_item_icons_2line.xmlPK!*gŚ 5pres/layout/notification_template_big_media_narrow.xmlPK!*ְה )mres/layout/payment_minimal_ui_toolbar.xmlPK!*/ q,'Xres/layout/preference_list_fragment.xmlPK!*ɰ=C D res/layout/top_view.xmlPK!*bi"pres/layout/translate_menu_item.xmlPK!*utc))res/layout/abc_select_dialog_material.xmlPK!*ܹ`l#res/layout/date_time_suggestion.xmlPK!*J$%˼res/layout/crashes_list_item_body.xmlPK!*.res/layout/notification_template_part_time.xmlPK!*ǐbres/layout/js_modal_dialog.xmlPK!*NbЯ "res/layout/preference_dropdown.xmlPK!*:pU  (res/layout/abc_alert_dialog_material.xmlPK!*Lk"H$"res/layout/modern_list_item_view.xmlPK!*res/layout/textbubble_text.xmlPK!*%"/P,res/layout/radio_button_with_description.xmlPK!*VT'Pres/layout/expanded_cast_controller.xmlPK!*N( "res/layout/page_info_container.xmlPK!*vv1!res/layout/preference_spinner.xmlPK!*__7res/layout/mr_cast_dialog.xmlPK!*g(res/layout/mr_controller_volume_item.xmlPK!*zH&res/layout/settings_layout.xmlPK!*Ze/%res/layout/modal_dialog_container.xmlPK!*,+ .res/layout/mr_controller_material_dialog_b.xmlPK!*1AN<"res/layout/preference_material.xmlPK!*O6#Lres/layout/promo_card_view_slim.xmlPK!*Ϡ+res/layout/preference_chrome_image_view.xmlPK!*qˊx!res/layout/modal_dialog_title.xmlPK!*MLTS` res/layout/page_info_summary.xmlPK!*hF'res/layout/button_preference_layout.xmlPK!*)>pres/layout/dropdown_item.xmlPK!*оWh)res/layout/design_text_input_end_icon.xmlPK!*E0 'Qres/layout/add_to_homescreen_dialog.xmlPK!*u\!Lres/layout/divider_preference.xmlPK!*]]4%0kres/layout/cast_expanded_controller_activity.xmlPK!*:RFl,& res/layout/text_view_without_line_height.xmlPK!*  4W res/layout/activity_main.xmlPK!*5M'b res/layout/storage_preferences_view.xmlPK!*v) res/layout/preference_widget_checkbox.xmlPK!*}\Z+_ res/layout/preference_dropdown_material.xmlPK!*Mp) res/layout/tile_view_modern_condensed.xmlPK!*x!- res/layout/mr_cast_group_item.xmlPK!*f* res/layout/indeterminate_progress_view.xmlPK!*-FeD,11 res/layout/tri_state_site_settings_preference.xmlPK!*J$l res/layout/two_line_sublist_item.xmlPK!*?!(5} res/layout/text_view_with_line_height_from_layout.xmlPK!*KIn res/layout/search_toolbar.xmlPK!*n' res/layout/fragment_home.xmlPK!*rU(! res/layout/flag_ui_warning.xmlPK!*_f# res/layout/expand_button.xmlPK!*./+Z "& res/layout/promo_dialog_layout.xmlPK!*z4.+ res/layout/infobar_control_icon_with_description.xmlPK!*#gJ- z- res/layout/clear_data_dialog.xmlPK!*EEw¸4/ res/layout/four_state_cookie_settings_preference.xmlPK!*5`!03 res/layout/caf_controller_media_route_button.xmlPK!*mj!4 res/layout/cast_intro_overlay.xmlPK!*df*J\"s6 res/layout/mr_cast_header_item.xmlPK!*0 P  8 res/layout/page_info.xmlPK!*kD ; res/layout/tile_no_text_view.xmlPK!*"Q = res/layout/modal_dialog_view.xmlPK!*S-)A res/layout/payment_request_bottom_bar.xmlPK!*vZ*fD res/layout/abc_list_menu_item_checkbox.xmlPK!*.E res/layout/notification_template_big_media.xmlPK!*4w*H res/layout/abc_action_menu_item_layout.xmlPK!*G*Vd+J res/layout/design_text_input_start_icon.xmlPK!*V-IL res/layout/text_edit_suggestion_container.xmlPK!*$2M res/layout/list_menu_item.xmlPK!*,OdjPP res/layout/connection_info.xmlPK!*l~U(4R res/layout/abc_activity_chooser_view.xmlPK!*Aod"T res/layout/photo_picker_dialog.xmlPK!*&Q.'W res/layout/abc_list_menu_item_radio.xmlPK!*,*fY res/layout/radio_button_layout_element.xmlPK!* 3Z res/layout/support_simple_spinner_dropdown_item.xmlPK!*BaVt(.\ res/layout/abc_list_menu_item_layout.xmlPK!*5Z%^ res/layout/payment_request_editor.xmlPK!*"a res/layout/custom_toast_layout.xmlPK!*F3i res/layout/abc_alert_dialog_button_bar_material.xmlPK!*E͎ &k res/layout/promo_card_view_compact.xmlPK!*63o res/layout/cast_help_text.xmlPK!*sB0q res/layout/cast_tracks_chooser_dialog_layout.xmlPK!*u24(2s res/layout/preference_spinner_single_line_item.xmlPK!*WBl!Eu res/layout/abc_screen_toolbar.xmlPK!*~ .x res/layout/preference_widget_switch_compat.xmlPK!*D0E<+sy res/layout/payment_request_editor_label.xmlPK!*P | res/layout/abc_tooltip.xmlPK!*7A@߁h(J~ res/layout/abc_action_bar_title_item.xmlPK!*gʨMt%! res/layout/autofill_dropdown_item.xmlPK!*}U. res/layout/payment_request_editor_dropdown.xmlPK!*&r'r res/layout/payment_request.xmlPK!*6ߔL-g res/layout/abc_cascading_menu_item_layout.xmlPK!*Q res/layout/mr_volume_control.xmlPK!*HZ$| res/layout/two_field_date_picker.xmlPK!*r+x res/layout/translate_menu_extended_item.xmlPK!*gW4 \( res/layout/abc_dialog_title_material.xmlPK!*, res/layout/query_tile_view.xmlPK!*ĩw,) res/layout/abc_popup_menu_item_layout.xmlPK!*?-- res/layout/video_player.xmlPK!*-jk, res/layout/app_menu_layout.xmlPK!*| D(9á res/layout/weblayer_infobar_translate_compact_content.xmlPK!*.4( res/layout/notification_media_action.xmlPK!*F# res/layout/photo_picker_toolbar.xmlPK!*$#s res/layout/mr_chooser_list_item.xmlPK!*W+He res/layout/mr_picker_dialog.xmlPK!*ͨ2`1 res/layout/select_dialog_multichoice_material.xmlPK!*@ <! res/layout/two_line_list_item.xmlPK!* 'ű res/layout/button_preference_button.xmlPK!*AQ% res/layout/design_layout_tab_icon.xmlPK!*d+] res/layout/tile_view_modern.xmlPK!*5S&*n res/layout/radio_button_with_edit_text.xmlPK!* qH`0 res/layout/infobar_control_spinner_drop_down.xmlPK!*b](% res/layout/contacts_picker_dialog.xmlPK!*X" res/layout/mr_playback_control.xmlPK!*JaB !H res/layout/mr_cast_route_item.xmlPK!*Y res/layout/website_features.xmlPK!*xF * res/layout/notification_template_media.xmlPK!*ޭ res/layout/media_controller.xmlPK!* KJ0 res/layout/dropdown_footer_wrapper_jellybean.xmlPK!*OM矫m res/layout/number_roll_view.xmlPK!*B2<e res/layout/weblayer_url_bar.xmlPK!*e89$ res/layout/promo_card_view_large.xmlPK!*`4= res/layout/cast_tracks_chooser_dialog_row_layout.xmlPK!*t0 res/drawable/ic_offline_pin_24dp_on_light_bg.xmlPK!*U -+ res/drawable/navigation_bubble_shadow.9.pngPK!*g LAN res/drawable/cast_expanded_controller_live_indicator_drawable.xmlPK!*}re! res/drawable/gm_filled_nfc_20.xmlPK!*v/  res/drawable/infobar_protected_media_identifierPK!*^d res/drawable/permission_popupsPK!*$`i&7 res/drawable/abc_ic_clear_material.xmlPK!*l$ res/drawable/blue_circle.xmlPK!*W/D res/drawable/cast_ic_notification_skip_next.xmlPK!*2 .3 res/drawable/cast_ic_notification_rewind10.xmlPK!*s^! res/drawable/popup_bg.9.pngPK!*qpx(N! res/drawable/ic_visibility_off_black.xmlPK!*!`!$ res/drawable/gm_filled_nfc_24.xmlPK!*z\!O& res/drawable/gm_filled_mic_20.xmlPK!*i`}( res/drawable/webrtc_videoPK!*NIFI) res/drawable/settings_storagePK!*AԹ#) res/drawable/btn_radio_off_mtrl.xmlPK!*7, res/drawable/cast_ic_mini_controller_closed_caption.xmlPK!*D+A- res/drawable/btn_checkbox_unchecked_to_checked_mtrl_animation.xmlPK!*NM,/ res/drawable/material_ic_edit_black_24dp.xmlPK!*]p/^1 res/drawable/ic_full_screen_exit_white_24dp.xmlPK!*Ӹ]L#3 res/drawable/gm_filled_piano_24.xmlPK!*?Dm135 res/drawable/cast_ic_mini_controller_rewind30.xmlPK!*e d$6 res/drawable/mr_cast_stop.xmlPK!*pT0,y7 res/drawable/abc_btn_check_material_anim.xmlPK!*"^1'9 res/drawable/gm_filled_bluetooth_searching_20.xmlPK!*!u|<; res/drawable/common_google_signin_btn_text_light_focused.xmlPK!*Gx*= res/drawable/cast_ic_notification_play.xmlPK!*%> res/drawable/mr_media_pause_light.xmlPK!*wL *? res/drawable/btn_checkbox_checked_mtrl.xmlPK!*P&;C res/drawable/cast_expanded_controller_bg_gradient_light.xmlPK!*}\!D res/drawable/mr_cast_checkbox.xmlPK!*ÄHگP'F res/drawable/test_custom_background.xmlPK!*DpG res/drawable/ic_update_grey.xmlPK!*0:mLI res/drawable/email.xmlPK!*k(۪*3J res/drawable/btn_radio_off_to_on_mtrl_animation.xmlPK!*c5t*L res/drawable/ic_info_outline_grey_16dp.xmlPK!*b_L3N res/drawable/common_google_signin_btn_icon_dark.xmlPK!*lDP&^P res/drawable/ic_file_download_36dp.xmlPK!*~eh/Q res/drawable/abc_ic_menu_copy_mtrl_am_alpha.xmlPK!*P’3S res/drawable/cast_ic_mini_controller_play_large.xmlPK!*=V+T res/drawable/gm_filled_content_paste_20.xmlPK!*ƌDt,(W res/drawable/mtrl_tabs_default_indicator.xmlPK!*30X res/drawable/ic_check_googblue_24dp_animated.xmlPK!*}_-Y res/drawable/$async_image_view_waiting__1.xmlPK!*T0,[ res/drawable/abc_btn_radio_material_anim.xmlPK!*Ln6<] res/drawable/telephone.xmlPK!*Wx%_ res/drawable/ic_help_and_feedback.xmlPK!* 0a res/drawable/abc_ic_menu_paste_mtrl_am_alpha.xmlPK!* L-c res/drawable/abc_ic_menu_share_mtrl_alpha.xmlPK!* u|<0f res/drawable/common_google_signin_btn_icon_light_focused.xmlPK!*.@,h res/drawable/mr_cast_group_seekbar_track.xmlPK!*@(` *i res/drawable/mr_button_connecting_dark.xmlPK!*F8)k res/drawable/list_item_icon_modern_bg.xmlPK!*2m res/drawable/cast_ic_mini_controller_forward30.xmlPK!*m.g<1xn res/drawable/abc_ic_voice_search_api_material.xmlPK!*%#)(p res/drawable/bottom_sheet_background.xmlPK!*1p'r res/drawable/ic_mtrl_checked_circle.xmlPK!*5` )s res/drawable/mr_button_connected_dark.xmlPK!*A<.'v res/drawable/ic_play_circle_outline_black_48dpPK!*s[hQN)x res/drawable/ic_more_vert_24dp_on_dark_bgPK!*B$:ly res/drawable/common_google_signin_btn_icon_dark_normal.xmlPK!*pw[V&z res/drawable/ic_expand_less_black_24dpPK!*b_4{ res/drawable/mr_dialog_material_background_light.xmlPK!*%_42| res/drawable/cast_ic_expanded_controller_pause.xmlPK!*]*LH;~ res/drawable/common_google_signin_btn_text_light_normal.xmlPK!* O8- res/drawable/cast_ic_mini_controller_mute.xmlPK!*17ڀ res/drawable/common_google_signin_btn_text_disabled.xmlPK!*8ϛT(- res/drawable/abc_list_selector_holo_light.xmlPK!*+ res/drawable/abc_tab_indicator_material.xmlPK!*=$ res/drawable/mr_media_play_light.xmlPK!*8T%! res/drawable/ic_photo_camera_grey.xmlPK!*ˮ| x res/drawable/ic_devui_search.xmlPK!*\H7 res/drawable/ic_play_circle_filled_24dp_on_light_bg.xmlPK!*Kt1 res/drawable/tile_view_icon_background_modern.xmlPK!*Wj res/drawable/mr_group_expand.xmlPK!*[S),&Y res/drawable/$avd_hide_password__2.xmlPK!*5Fx#֑ res/drawable/gm_filled_piano_20.xmlPK!*t#<0 res/drawable/zoom_out.xmlPK!*H`' res/drawable/mr_button_light_static.xmlPK!*V!~H1 res/drawable/ic_play_circle_filled_white_24dp.xmlPK!*CpH6ʙ res/drawable/ic_play_circle_filled_24dp_on_dark_bg.xmlPK!*!K+4& res/drawable/mtrl_ic_arrow_drop_up.xmlPK!*(64> res/drawable/plusPK!*G' res/drawable/mtrl_dialog_background.xmlPK!*7d+O res/drawable/gm_filled_notifications_24.xmlPK!*`;xs res/drawable/permission_cookiePK!*wE564n res/drawable/$ic_check_googblue_24dp_animated__0.xmlPK!*0८P0Q res/drawable/abc_cab_background_top_material.xmlPK!*gn*/BX+] res/drawable/ic_mtrl_chip_checked_black.xmlPK!*w& res/drawable/ic_fast_rewind_white_36dpPK!*!t뀮% res/drawable/gm_filled_devices_24.xmlPK!*d42( res/drawable/ic_drag_handle_grey600_24dpPK!* & res/drawable/mr_dialog_close_light.xmlPK!*](7,ݫ res/drawable/ic_mtrl_chip_checked_circle.xmlPK!*0it/ res/drawable/ic_offline_pin_24dp_on_dark_bg.xmlPK!*.0% res/drawable/notification_tile_bg.xmlPK!*&&,+ res/drawable/abc_ic_search_api_material.xmlPK!*N56 res/drawable/material_ic_menu_arrow_up_black_24dp.xmlPK!*t3 res/drawable/modern_toolbar_text_box_background.xmlPK!*h (^ res/drawable/ic_skip_previous_white_36dpPK!*/'E res/drawable/ic_fast_forward_white_36dpPK!* [ res/drawable/ic_cast_dark_onPK!*XYL, res/drawable/abc_btn_borderless_material.xmlPK!*pBX res/drawable/ic_done_blue.xmlPK!*t/} res/drawable/abc_cab_background_internal_bg.xmlPK!*@>+ res/drawable/photo_picker_seekbar_track.xmlPK!*86"ſ res/drawable/modern_toolbar_shadowPK!*-`&M res/drawable/mr_button_dark_static.xmlPK!*2«L) res/drawable/gm_filled_location_on_24.xmlPK!*>{S` * res/drawable/mr_button_connected_light.xmlPK!*"I4: res/drawable/cast_ic_expanded_controller_skip_previous.xmlPK!* .An res/drawable/btn_checkbox_checked_to_unchecked_mtrl_animation.xmlPK!*a 8) res/drawable/gm_filled_location_on_20.xmlPK!*m`%5 res/drawable/gm_filled_devices_20.xmlPK!*`g)'"0I res/drawable/color_picker_advanced_select_handlePK!*  res/drawable/btn_star_filledPK!*i`% res/drawable/mtrl_ic_error.xmlPK!*}9% res/drawable/ic_menu_share_holo_lightPK!*?*& res/drawable/ic_volume_up_grey600_24dpPK!*( res/drawable/color_button_background.xmlPK!*Hn$+ res/drawable/gm_filled_content_paste_24.xmlPK!*r~0 res/drawable/material_ic_calendar_black_24dp.xmlPK!*UL\D|1 res/drawable/abc_ratingbar_indicator_material.xmlPK!*KBD*l res/drawable/mtrl_popupmenu_background.xmlPK!*U%' res/drawable/abc_btn_check_material.xmlPK!*D!C res/drawable/exclamation_trianglePK!*3O4#S res/drawable/ic_ar_core_install.xmlPK!* Be` L res/drawable/omnibox_https_validPK!* R' res/drawable/gm_filled_cardboard_24.xmlPK!*7'< res/drawable/ic_drive_document_24dp.xmlPK!*{x! res/drawable/gm_filled_mic_24.xmlPK!*Vl7: res/drawable/common_google_signin_btn_icon_disabled.xmlPK!*CC@S res/drawable/settings_cogPK!*Io)a res/drawable/ic_volume_off_white_24dp.xmlPK!*,͡ res/drawable/circle_white.xmlPK!*UMH res/drawable/ic_business_smallPK!*KBD/ res/drawable/mtrl_popupmenu_background_dark.xmlPK!*H1T%B res/drawable/mr_dialog_close_dark.xmlPK!* 'J res/drawable/abc_btn_radio_material.xmlPK!*(ql res/drawable/btn_closePK!*"4y.: res/drawable/cast_ic_notification_rewind30.xmlPK!*68( res/drawable/ic_alert_error.xmlPK!*u\%6$ res/drawable/ic_business.xmlPK!*- res/drawable/$async_image_view_waiting__0.xmlPK!*DžK$ res/drawable/mtrl_dropdown_arrow.xmlPK!*NT=L! res/drawable/ic_data_viz_grey.xmlPK!*XWD res/drawable/ic_vpn_key_grey.xmlPK!*T, res/drawable/mr_vol_type_audiotrack_dark.xmlPK!*}ߗ  res/drawable/mr_button_light.xmlPK!*C/ 4> res/drawable/$ic_check_googblue_24dp_animated__1.xmlPK!*KWp& res/drawable/$avd_show_password__0.xmlPK!*S4Y@- res/drawable/async_image_view_unavailable.xmlPK!*f+? res/drawable/photo_picker_seekbar_thumb.xmlPK!*2T! res/drawable/gm_filled_usb_24.xmlPK!*Oh$ res/drawable/ic_warning_red_16dp.xmlPK!*B/ res/drawable/abc_seekbar_tick_mark_material.xmlPK!*vk̨(? res/drawable/ic_volume_on_white_24dp.xmlPK!*O`+= res/drawable/gm_filled_notifications_20.xmlPK!*0xIe7a res/drawable/cast_expanded_controller_seekbar_thumb.xmlPK!*j40` ++ res/drawable/mr_button_connecting_light.xmlPK!*{˰/(z res/drawable/cast_tooltip_background.xmlPK!*UL\D|- res/drawable/abc_ratingbar_small_material.xmlPK!*A D res/drawable/cast_playing_squarePK!*arU res/drawable/ic_flag.xmlPK!*q*  res/drawable/ic_offline_pin_blue_white.xmlPK!*xByt% res/drawable/ic_play_arrow_white_24dpPK!*co0 res/drawable/cast_ic_notification_disconnect.xmlPK!*;f'OL! res/drawable/ic_delete_white_24dpPK!*b|Lx-w! res/drawable/material_ic_clear_black_24dp.xmlPK!*;45J# res/drawable/cast_ic_expanded_controller_rewind30.xmlPK!*UnyYV%$ res/drawable/ic_arrow_back_white_24dpPK!*H% res/drawable/star_greenPK!*gG8#l& res/drawable/settings_bluetooth.xmlPK!*M:w֒2f( res/drawable/cast_ic_mini_controller_skip_prev.xmlPK!*85,X) res/drawable/cast_ic_notification_rewind.xmlPK!*''D* res/drawable/weblayer_tab_indicator.xmlPK!*RAyU'+ res/drawable/top_round_foreground.9.pngPK!* nw|;2- res/drawable/common_google_signin_btn_text_dark_focused.xmlPK!*Uѕ#/ res/drawable/infobar_blocked_popupsPK!*V!/ res/drawable/gm_filled_usb_20.xmlPK!*x Q$=2 res/drawable/mr_media_stop_light.xmlPK!*UL\D|'s3 res/drawable/abc_ratingbar_material.xmlPK!*`& 4 res/drawable/gm_filled_videocam_24.xmlPK!*5HL45 res/drawable/common_google_signin_btn_icon_light.xmlPK!*F~23L7 res/drawable/abc_ic_arrow_drop_right_black_24dp.xmlPK!*E$9 res/drawable/tile_view_highlight.xmlPK!*3: res/drawable/ic_pause_circle_outline_white_24dp.xmlPK!*jnT(,< res/drawable/abc_list_selector_holo_dark.xmlPK!*OdKKH > res/drawable/infobar_downloadingPK!*!"? res/drawable/ic_refresh_white_36dpPK!*@ƻ/@ res/drawable/cast_ic_notification_skip_prev.xmlPK!*)yA res/drawable/tile_view_highlight_mask.xmlPK!*,α*3B res/drawable/btn_radio_on_to_off_mtrl_animation.xmlPK!*@ŗ9D res/drawable/omnibox_infoPK!*Xmh#-E res/drawable/ic_check_googblue_24dpPK!* >f4E res/drawable/cast_mini_controller_gradient_light.xmlPK!*ݒsuBG res/drawable/ic_clear_text.xmlPK!*;CP&I res/drawable/ic_file_download_24dp.xmlPK!*f}&J res/drawable/$avd_hide_password__0.xmlPK!*Qc[V&L res/drawable/ic_expand_more_black_24dpPK!*1-M res/drawable/mr_vol_type_audiotrack_light.xmlPK!*r+ 7N res/drawable/cast_expanded_controller_seekbar_track.xmlPK!*M*tP res/drawable/abc_switch_thumb_material.xmlPK!*.Q res/drawable/fast_forward_message_gradient.xmlPK!*Gi<P&R res/drawable/$avd_hide_password__1.xmlPK!*ڶO7T res/drawable/material_ic_menu_arrow_down_black_24dp.xmlPK!* 60AV res/drawable/floating_popup_background_light.xmlPK!*=8}W res/drawable/btn_infoPK!*y5dJX)X res/drawable/abc_star_half_black_48dp.xmlPK!*86 H:ŏ( res/drawable/ic_notification_media_routePK!*X{v'p res/drawable/omnibox_not_secure_warningPK!*}ո$@ res/drawable/mr_cast_mute_button.xmlPK!*]S-{ res/drawable/cast_ic_mini_controller_play.xmlPK!*#KQN*h res/drawable/ic_more_vert_24dp_on_light_bgPK!*iz/ res/drawable/cast_ic_notification_forward10.xmlPK!* k;P& res/drawable/$avd_show_password__1.xmlPK!*IP( res/drawable/custom_toast_background.xmlPK!*%Я res/drawable/audio_playingPK!*P& res/drawable/infobar_shadow_left.9.pngPK!*u6;T res/drawable/ic_globe_24dp.xmlPK!*M.p res/drawable/abc_ic_menu_overflow_material.xmlPK!*~ R res/drawable/mr_button_dark.xmlPK!*-/) res/drawable/abc_text_cursor_material.xmlPK!*#ӱ3 res/drawable/mr_dialog_material_background_dark.xmlPK!*hE res/drawable/zoom_in.xmlPK!*8MJ res/drawable/web_assetPK!*PH$ res/drawable/notification_bg_low.xmlPK!*Ok& res/drawable/ic_settings_gear_24dp.xmlPK!*% ݾ- res/drawable/cast_ic_notification_forward.xmlPK!*lO!@" res/drawable/file_picker_scrim.xmlPK!*hm<n res/drawable/material_ic_keyboard_arrow_right_black_24dp.xmlPK!*] k!E res/drawable/ic_videocam_24dp.xmlPK!*Rް_EX$ res/drawable/ic_warning_red_24dp.xmlPK!* PSd# res/drawable/ic_music_note_24dp.xmlPK!*9Ԩa&K res/drawable/smartphone_black_24dp.xmlPK!*(=B@# res/drawable/settings_all_sitesPK!*L T# res/drawable/mr_media_stop_dark.xmlPK!*da res/drawable/btn_delete_24dpPK!*DJ: res/drawable/abc_spinner_textfield_background_material.xmlPK!*^0 res/drawable/cast_ic_notification_connecting.xmlPK!*B/' res/drawable/abc_item_background_holo_light.xmlPK!*z$ res/drawable/ic_cast_dark_chrome.xmlPK!*|>Tw#- res/drawable/top_round_shadow.9.pngPK!*0 {$ res/drawable/ic_drive_image_24dp.xmlPK!*50Ò2 res/drawable/cast_ic_mini_controller_skip_next.xmlPK!*x res/drawable/page_info_bg.xmlPK!*̈́? res/drawable/ic_person_24dp.xmlPK!*Ƕt* res/drawable/drag_handlebar.xmlPK!*/A& res/drawable/gm_filled_videocam_20.xmlPK!*+i res/drawable/cast_ic_notification_pause.xmlPK!*H.,4(T res/drawable/mtrl_ic_arrow_drop_down.xmlPK!*u res/drawable/webrtc_audioPK!*ZX41 res/drawable/cast_ic_expanded_controller_play.xmlPK!*$-. res/drawable/cast_ic_mini_controller_stop.xmlPK!*a5?<  res/drawable/ic_pause_white_36dpPK!*[' res/drawable/permission_background_syncPK!*ax res/drawable/ic_action_home.xmlPK!*3ȕ(* res/drawable/ic_mtrl_chip_close_circle.xmlPK!*rJ! res/drawable/ic_delete.xmlPK!*f8/(S# res/drawable/names.xmlPK!*p|Y% res/drawable/mtrl_ic_cancel.xmlPK!*y'@"' res/drawable/rating_bar.xmlPK!*=dx"T( res/drawable/btn_radio_on_mtrl.xmlPK!*󑚺t-M+ res/drawable/notification_icon_background.xmlPK!*cNH#b, res/drawable/tooltip_frame_dark.xmlPK!*U:- res/color-v21/abc_btn_colored_borderless_text_material.xmlPK!*~4P". res/layout-v22/dropdown_window.xmlPK!*z6#1 res/layout-v22/http_auth_dialog.xmlPK!*(` 3 res/layout-v22/page_info_row.xmlPK!*Sp!6 res/layout-v22/fragment_flags.xmlPK!*l &9 res/layout-v22/page_info_container.xmlPK!*'s,T'? res/layout-v22/promo_card_view_slim.xmlPK!*2($B res/layout-v22/page_info_summary.xmlPK!*B' ]D res/layout-v22/page_info.xmlPK!*j9Cc07?H res/layout-v22/abc_alert_dialog_button_bar_material.xmlPK!*cyj, *K res/layout-v22/promo_card_view_compact.xmlPK!*bX"N res/layout-v22/query_tile_view.xmlPK!*LP (R res/layout-v22/promo_card_view_large.xmlPK!*/LE|U res/font/accent_font.xmlPK!*=;6'@V res/mipmap-hdpi-v4/shortcut_icon_shadowPK!*7\W res/menu/select_action_menu.xmlPK!*P?2\%TZ res/menu/website_preferences_menu.xmlPK!*wj[ res/menu/options_menu.xmlPK!* !] res/menu/crashes_options_menu.xmlPK!*2R;%^ res/color-v23/abc_tint_seek_thumb.xmlPK!*e|';` res/color-v23/abc_tint_switch_track.xmlPK!*1!"a res/color-v23/abc_tint_spinner.xmlPK!*lp(c res/color-v23/abc_tint_btn_checkable.xmlPK!*οN .d res/color-v23/abc_color_highlight_material.xmlPK!*" v`"e res/color-v23/abc_tint_default.xmlPK!*a?)%:g res/color-v23/abc_btn_colored_borderless_text_material.xmlPK!*1!#h res/color-v23/abc_tint_edittext.xmlPK!*Ѯ/mj res/color-v23/abc_btn_colored_text_material.xmlPK!*c+k res/layout-land/date_time_picker_dialog.xmlPK!*No&m res/layout-v21/notification_action.xmlPK!*ԨJ0+p res/layout-v21/notification_action_tombstone.xmlPK!*}פ3r res/layout-v21/notification_template_icon_group.xmlPK!*R 3t res/layout-v21/notification_template_custom_big.xmlPK!*1c]|WR6%x res/drawable-xxhdpi-v4/ic_mr_button_connected_03_lightPK!*.lID7y res/drawable-xxhdpi-v4/ic_mr_button_connecting_29_lightPK!*$?a\5{ res/drawable-xxhdpi-v4/ic_mr_button_connected_04_darkPK!*'R} res/drawable-xxhdpi-v4/settings_sensorsPK!*Sڳ 3t res/drawable-xxhdpi-v4/infobar_accessibility_eventsPK!*>_!?h res/drawable-xxhdpi-v4/quantum_ic_play_circle_filled_grey600_36PK!*)SN6 res/drawable-xxhdpi-v4/ic_mr_button_connecting_29_darkPK!*.,75 res/drawable-xxhdpi-v4/ic_mr_button_connected_13_darkPK!*;*QL6 res/drawable-xxhdpi-v4/ic_mr_button_connecting_24_darkPK!*)K:T res/drawable-xxhdpi-v4/abc_ic_commit_search_api_mtrl_alphaPK!* )$&S res/drawable-xxhdpi-v4/infobar_warningPK!*| .Ќ res/drawable-xxhdpi-v4/ic_skip_next_white_36dpPK!*:n*'7 res/drawable-xxhdpi-v4/ic_cast_dark_offPK!*'Zr45 res/drawable-xxhdpi-v4/ic_account_child_grey600_36dpPK!*'#n res/drawable-xxhdpi-v4/ic_edit_24dpPK!*9>f res/drawable-xxhdpi-v4/quantum_ic_pause_circle_filled_white_36PK!*4201 res/drawable-xxhdpi-v4/quantum_ic_stop_grey600_36PK!*0./ res/drawable-xxhdpi-v4/quantum_ic_stop_white_24PK!*3l6 res/drawable-xxhdpi-v4/quantum_ic_art_track_grey600_48PK!*&3 J6 res/drawable-xxhdpi-v4/ic_mr_button_disconnected_lightPK!*uPM96+á res/drawable-xxhdpi-v4/ic_media_pause_lightPK!*|gb5U res/drawable-xxhdpi-v4/ic_mr_button_connected_05_darkPK!*| 4 res/drawable-xxhdpi-v4/quantum_ic_skip_next_white_36PK!*wr6 res/drawable-xxhdpi-v4/ic_mr_button_connected_12_lightPK!*P1g res/drawable-xxhdpi-v4/permission_protected_mediaPK!*բ7 res/drawable-xxhdpi-v4/quantum_ic_play_arrow_grey600_48PK!*2+ res/drawable-xxhdpi-v4/ic_vol_type_tv_lightPK!*r+ res/drawable-xxhdpi-v4/ic_logo_googleg_24dpPK!*Qc5k res/drawable-xxhdpi-v4/navigation_bubble_shadow.9.pngPK!*=,+E@9 res/drawable-xxhdpi-v4/infobar_protected_media_identifierPK!*ƛ ( res/drawable-xxhdpi-v4/permission_popupsPK!*,/WR7 res/drawable-xxhdpi-v4/ic_mr_button_connecting_10_lightPK!*}5 res/drawable-xxhdpi-v4/quantum_ic_play_arrow_white_24PK!*ƌ% res/drawable-xxhdpi-v4/popup_bg.9.pngPK!*FMH6 res/drawable-xxhdpi-v4/ic_mr_button_connecting_18_darkPK!*4$% # res/drawable-xxhdpi-v4/webrtc_videoPK!*L҆_Z6 res/drawable-xxhdpi-v4/ic_mr_button_connected_05_lightPK!* `4 res/drawable-xxhdpi-v4/quantum_ic_volume_up_white_36PK!*[QN' res/drawable-xxhdpi-v4/settings_storagePK!*) 5 res/drawable-xxhdpi-v4/quantum_ic_volume_off_white_36PK!*SN61 res/drawable-xxhdpi-v4/ic_mr_button_connecting_01_darkPK!*_{v6 res/drawable-xxhdpi-v4/ic_mr_button_connected_30_lightPK!*-yt6 res/drawable-xxhdpi-v4/ic_mr_button_connected_17_lightPK!* UP6 res/drawable-xxhdpi-v4/ic_mr_button_connecting_22_darkPK!*wr6] res/drawable-xxhdpi-v4/ic_mr_button_connected_18_lightPK!*.D8 res/drawable-xxhdpi-v4/abc_textfield_search_default_mtrl_alpha.9.pngPK!*]"* res/drawable-xxhdpi-v4/ic_vol_mutePK!*j|6 res/drawable-xxhdpi-v4/ic_mr_button_connected_27_lightPK!*SN6r res/drawable-xxhdpi-v4/ic_mr_button_connecting_23_darkPK!*g3) res/drawable-xxhdpi-v4/abc_btn_check_to_on_mtrl_015PK!*0_Z6] res/drawable-xxhdpi-v4/ic_mr_button_connecting_12_darkPK!*IKF3 res/drawable-xxhdpi-v4/abc_btn_radio_to_on_mtrl_000PK!* zyt6 res/drawable-xxhdpi-v4/ic_mr_button_connected_21_lightPK!*ӶdAF res/drawable-xxhdpi-v4/abc_textfield_search_activated_mtrl_alpha.9.pngPK!*ЇID6 res/drawable-xxhdpi-v4/ic_mr_button_connecting_15_darkPK!*a\5I res/drawable-xxhdpi-v4/ic_mr_button_connected_03_darkPK!*M\::  res/drawable-xxhdpi-v4/abc_scrubber_track_mtrl_alpha.9.pngPK!*,/WR6 res/drawable-xxhdpi-v4/ic_mr_button_connected_10_lightPK!*8g* res/drawable-xxhdpi-v4/ic_media_play_lightPK!*<#6 res/drawable-xxhdpi-v4/ic_mr_button_connected_07_lightPK!*\-_Z6 res/drawable-xxhdpi-v4/ic_mr_button_connected_11_lightPK!*ό #8T res/drawable-xxhdpi-v4/quantum_ic_skip_previous_white_36PK!*_"YT6 res/drawable-xxhdpi-v4/ic_mr_button_connected_04_lightPK!*21,5 res/drawable-xxhdpi-v4/ic_mr_button_connected_07_darkPK!*=87. res/drawable-xxhdpi-v4/ic_mr_button_connecting_14_lightPK!*+~8 res/drawable-xxhdpi-v4/ic_play_circle_outline_black_48dpPK!*D res/drawable-xxhdpi-v4/cast_abc_scrubber_control_to_pressed_mtrl_005PK!*3< res/drawable-xxhdpi-v4/ic_more_vert_24dp_on_dark_bgPK!*ӽJ00 res/drawable-xxhdpi-v4/ic_expand_less_black_24dpPK!*Wy\7 res/drawable-xxhdpi-v4/quantum_ic_volume_off_grey600_36PK!*V?:5" res/drawable-xxhdpi-v4/ic_mr_button_connected_08_darkPK!*y"F65$ res/drawable-xxhdpi-v4/ic_vol_type_speaker_group_lightPK!*>L5& res/drawable-xxhdpi-v4/ic_mr_button_connected_28_darkPK!*@ )( res/drawable-xxhdpi-v4/ic_media_play_darkPK!*wO3) res/drawable-xxhdpi-v4/abc_btn_check_to_on_mtrl_000PK!*1r=gb5.+ res/drawable-xxhdpi-v4/ic_mr_button_connected_06_darkPK!*n{! ;, res/drawable-xxhdpi-v4/abc_popup_background_mtrl_mult.9.pngPK!*b:876 res/drawable-xxhdpi-v4/plusPK!*{͌.6 res/drawable-xxhdpi-v4/cast_ic_notification_onPK!*}6418 res/drawable-xxhdpi-v4/quantum_ic_stop_grey600_48PK!*fwr5~9 res/drawable-xxhdpi-v4/ic_mr_button_connected_16_darkPK!*y <X; res/drawable-xxhdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.pngPK!*%ID7;E res/drawable-xxhdpi-v4/ic_mr_button_connecting_23_lightPK!* NKF7F res/drawable-xxhdpi-v4/ic_mr_button_connecting_26_lightPK!*9b5H res/drawable-xxhdpi-v4/ic_mr_button_connected_24_darkPK!*(J res/drawable-xxhdpi-v4/permission_cookiePK!*?0L res/drawable-xxhdpi-v4/ic_fast_rewind_white_36dpPK!*f642N res/drawable-xxhdpi-v4/ic_drag_handle_grey600_24dpPK!*)IYT61O res/drawable-xxhdpi-v4/ic_mr_button_connected_06_lightPK!*ό #2P res/drawable-xxhdpi-v4/ic_skip_previous_white_36dpPK!*f/6qR res/drawable-xxhdpi-v4/quantum_ic_replay_30_grey600_36PK!*kf6xW res/drawable-xxhdpi-v4/ic_mr_button_connected_16_lightPK!*B-GY res/drawable-xxhdpi-v4/cast_ic_notification_1PK!*h}x17[ res/drawable-xxhdpi-v4/ic_fast_forward_white_36dpPK!*?'"&] res/drawable-xxhdpi-v4/ic_cast_dark_onPK!*W~'"2_ res/drawable-xxhdpi-v4/quantum_ic_refresh_white_24PK!*9ZSN6b res/drawable-xxhdpi-v4/ic_mr_button_connecting_26_darkPK!*r qE@?c res/drawable-xxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_000PK!*:e`,~e res/drawable-xxhdpi-v4/modern_toolbar_shadowPK!*ZOJ6=f res/drawable-xxhdpi-v4/ic_mr_button_connecting_28_darkPK!*6#4g res/drawable-xxhdpi-v4/quantum_ic_replay_30_white_24PK!*ƽ64*Sk res/drawable-xxhdpi-v4/ic_media_stop_lightPK!*5k res/drawable-xxhdpi-v4/ic_mr_button_connected_23_darkPK!*V?:6m res/drawable-xxhdpi-v4/ic_mr_button_connecting_08_darkPK!*<#7ro res/drawable-xxhdpi-v4/ic_mr_button_connecting_07_lightPK!*wg8&p res/drawable-xxhdpi-v4/btn_star_filledPK!*lOg9t res/drawable-xxhdpi-v4/quantum_ic_bigtop_updates_white_24PK!*R|5cx res/drawable-xxhdpi-v4/ic_mr_button_connected_12_darkPK!*(6L4Gz res/drawable-xxhdpi-v4/quantum_ic_replay_10_white_24PK!*ആ)QL6L} res/drawable-xxhdpi-v4/ic_mr_button_connecting_25_darkPK!*K8id/ res/drawable-xxhdpi-v4/ic_menu_share_holo_lightPK!*۞iI0ǁ res/drawable-xxhdpi-v4/ic_volume_up_grey600_24dpPK!*fz+ res/drawable-xxhdpi-v4/exclamation_trianglePK!*r * res/drawable-xxhdpi-v4/omnibox_https_validPK!*a?>) res/drawable-xxhdpi-v4/abc_cab_background_top_mtrl_alpha.9.pngPK!*}/[V5* res/drawable-xxhdpi-v4/ic_mr_button_connected_10_darkPK!*O"0; res/drawable-xxhdpi-v4/quantum_ic_closed_caption_grey600_36PK!*$ME@5܋ res/drawable-xxhdpi-v4/ic_mr_button_connected_09_darkPK!*k 8 # res/drawable-xxhdpi-v4/settings_cogPK!*M5 res/drawable-xxhdpi-v4/ic_mr_button_connected_25_darkPK!*ȣ%S8Б res/drawable-xxhdpi-v4/abc_switch_track_mtrl_alpha.9.pngPK!*S9xwWT([ res/drawable-xxhdpi-v4/ic_business_smallPK!*f 5 res/drawable-xxhdpi-v4/ic_mr_button_disconnected_darkPK!*Z  res/drawable-xxhdpi-v4/btn_closePK!*IWR7! res/drawable-xxhdpi-v4/ic_mr_button_connecting_12_lightPK!*^55ݜ res/drawable-xxhdpi-v4/ic_vol_type_speaker_group_darkPK!*É0Q[ res/drawable-xxhdpi-v4/common_google_signin_btn_icon_dark_normal_background.9.pngPK!*5Ƥ res/drawable-xxhdpi-v4/quantum_ic_forward_30_white_36PK!*hLj9ʩ res/drawable-xxhdpi-v4/quantum_ic_closed_caption_white_36PK!*#$ res/drawable-xxhdpi-v4/ic_vol_unmutePK!*Wl 7- res/drawable-xxhdpi-v4/cast_ic_notification_2PK!*׏GB7 res/drawable-xxhdpi-v4/ic_mr_button_connecting_27_lightPK!*Fn8M res/drawable-xxhdpi-v4/abc_list_divider_mtrl_alpha.9.pngPK!*r"GB7! res/drawable-xxhdpi-v4/ic_mr_button_connecting_00_lightPK!*Ja?ͳ res/drawable-xxhdpi-v4/cast_abc_scrubber_control_off_mtrl_alphaPK!*\gb6? res/drawable-xxhdpi-v4/ic_mr_button_connecting_13_darkPK!*jŇ5 res/drawable-xxhdpi-v4/ic_mr_button_connected_27_darkPK!*)HC>6 res/drawable-xxhdpi-v4/ic_mr_button_connecting_21_darkPK!*7-A<6 res/drawable-xxhdpi-v4/ic_mr_button_connecting_14_darkPK!*r"GB7@ res/drawable-xxhdpi-v4/ic_mr_button_connecting_30_lightPK!*v)z5 res/drawable-xxhdpi-v4/ic_mr_button_connected_19_darkPK!*$SN6ο res/drawable-xxhdpi-v4/ic_mr_button_connected_02_lightPK!*]sn5 res/drawable-xxhdpi-v4/ic_mr_button_connected_15_darkPK!*2v~5[ res/drawable-xxhdpi-v4/ic_mr_button_connected_17_darkPK!*e`5A res/drawable-xxhdpi-v4/ic_mr_button_connected_14_darkPK!*a:P% / res/drawable-xxhdpi-v4/ic_vol_type_speaker_darkPK!*b-5=8* res/drawable-xxhdpi-v4/cast_playing_squarePK!*}/ res/drawable-xxhdpi-v4/ic_play_arrow_white_24dpPK!*,z+R res/drawable-xxhdpi-v4/ic_delete_white_24dpPK!*p|5* res/drawable-xxhdpi-v4/ic_mr_button_connected_21_darkPK!*'Hkf6 res/drawable-xxhdpi-v4/ic_mr_button_connecting_11_darkPK!* / res/drawable-xxhdpi-v4/ic_arrow_back_white_24dpPK!*2j% ! res/drawable-xxhdpi-v4/star_greenPK!*$Kyt67 res/drawable-xxhdpi-v4/ic_mr_button_connected_19_lightPK!*l9 res/drawable-xxhdpi-v4/abc_tab_indicator_mtrl_alpha.9.pngPK!*Ja: res/drawable-xxhdpi-v4/abc_scrubber_control_off_mtrl_alphaPK!*y1C1w res/drawable-xxhdpi-v4/top_round_foreground.9.pngPK!*0hSN-i res/drawable-xxhdpi-v4/infobar_blocked_popupsPK!*xKF7 res/drawable-xxhdpi-v4/ic_mr_button_connecting_18_lightPK!*0? res/drawable-xxhdpi-v4/abc_textfield_activated_mtrl_alpha.9.pngPK!*\=2 res/drawable-xxhdpi-v4/ic_mr_button_disabled_lightPK!*()|6 res/drawable-xxhdpi-v4/ic_mr_button_connected_20_lightPK!*dnQE[V6 res/drawable-xxhdpi-v4/ic_mr_button_connecting_02_darkPK!*;8* res/drawable-xxhdpi-v4/ic_media_pause_darkPK!* A>25 res/drawable-xxhdpi-v4/quantum_ic_pause_grey600_36PK!*A<7 res/drawable-xxhdpi-v4/ic_mr_button_connecting_21_lightPK!*^R7| res/drawable-xxhdpi-v4/quantum_ic_forward_30_grey600_36PK!*KF6 res/drawable-xxhdpi-v4/ic_mr_button_connecting_30_darkPK!*b&0; res/drawable-xxhdpi-v4/googleg_standard_color_18PK!*_"YT7 res/drawable-xxhdpi-v4/ic_mr_button_connecting_04_lightPK!*†:ql*n res/drawable-xxhdpi-v4/infobar_downloadingPK!*,#,7 res/drawable-xxhdpi-v4/ic_refresh_white_36dpPK!*qz6 res/drawable-xxhdpi-v4/ic_mr_button_connected_28_lightPK!*,t_#res/drawable-xxhdpi-v4/omnibox_infoPK!*V-res/drawable-xxhdpi-v4/ic_check_googblue_24dpPK!*VmA<7res/drawable-xxhdpi-v4/ic_mr_button_connecting_15_lightPK!*X)շ7res/drawable-xxhdpi-v4/cast_ic_stop_circle_filled_whitePK!*|gb6 res/drawable-xxhdpi-v4/ic_mr_button_connecting_05_darkPK!*봮3h res/drawable-xxhdpi-v4/abc_btn_radio_to_on_mtrl_015PK!*y.N-]X7res/drawable-xxhdpi-v4/ic_mr_button_connecting_13_lightPK!*#0=~res/drawable-xxhdpi-v4/abc_textfield_default_mtrl_alpha.9.pngPK!*E4726vres/drawable-xxhdpi-v4/ic_mr_button_connected_08_lightPK!*s50res/drawable-xxhdpi-v4/ic_expand_more_black_24dpPK!*)IYT7res/drawable-xxhdpi-v4/ic_mr_button_connecting_06_lightPK!*KF5res/drawable-xxhdpi-v4/ic_mr_button_connected_00_darkPK!*?;~8jres/drawable-xxhdpi-v4/abc_list_pressed_holo_light.9.pngPK!*,SNNres/drawable-xxhdpi-v4/btn_infoPK!*oGB7res/drawable-xxhdpi-v4/ic_mr_button_connecting_25_lightPK!*2Υ;82res/drawable-xxhdpi-v4/quantum_ic_pause_grey600_48PK!**oJ95res/drawable-xxhdpi-v4/abc_text_select_handle_middle_mtrlPK!*orOJ7 res/drawable-xxhdpi-v4/ic_mr_button_connecting_19_lightPK!*rz06m"res/drawable-xxhdpi-v4/quantum_ic_volume_up_grey600_36PK!*Pf# %res/drawable-xxhdpi-v4/ic_searchPK!*pi/C(res/drawable-xxhdpi-v4/ic_play_arrow_white_36dpPK!*E>=86q)res/drawable-xxhdpi-v4/ic_mr_button_connected_09_lightPK!*%q=+res/drawable-xxhdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.pngPK!*1c]|WR7K2res/drawable-xxhdpi-v4/ic_mr_button_connecting_03_lightPK!*31|"4res/drawable-xxhdpi-v4/google_playPK!*9؉6<res/drawable-xxhdpi-v4/ic_mr_button_connected_26_lightPK!*$T<>res/drawable-xxhdpi-v4/abc_scrubber_primary_mtrl_alpha.9.pngPK!*ytfQ?res/drawable-xxhdpi-v4/common_google_signin_btn_text_dark_normal_background.9.pngPK!*\&GB7Eres/drawable-xxhdpi-v4/ic_mr_button_connecting_28_lightPK!*w6_Gres/drawable-xxhdpi-v4/ic_mr_button_connected_23_lightPK!*L҆_Z7HIres/drawable-xxhdpi-v4/ic_mr_button_connecting_05_lightPK!*ݦ=* Kres/drawable-xxhdpi-v4/ic_checked_checkboxPK!*E79Mres/drawable-xxhdpi-v4/quantum_ic_play_arrow_grey600_36PK!*b5qNres/drawable-xxhdpi-v4/ic_mr_button_connected_18_darkPK!*G 0YPres/drawable-xxhdpi-v4/infobar_translate_compactPK!*GL8MH7T[res/drawable-xxhdpi-v4/ic_mr_button_connecting_22_lightPK!*E4727]res/drawable-xxhdpi-v4/ic_mr_button_connecting_08_lightPK!*p*^res/drawable-xxhdpi-v4/ic_share_white_24dpPK!*€>`res/drawable-xxhdpi-v4/quantum_ic_keyboard_arrow_down_white_36PK!*Zy[=Hbres/drawable-xxhdpi-v4/quantum_ic_play_circle_filled_white_36PK!*UP6eres/drawable-xxhdpi-v4/ic_mr_button_connecting_17_darkPK!*[5gres/drawable-xxhdpi-v4/quantum_ic_forward_30_white_24PK!*=,jres/drawable-xxhdpi-v4/ic_unchecked_checkboxPK!*C('#:mres/drawable-xxhdpi-v4/icon_webviewPK!*oa\5res/drawable-xxhdpi-v4/ic_mr_button_connected_11_darkPK!*SN5Pres/drawable-xxhdpi-v4/ic_mr_button_connected_01_darkPK!*a\6res/drawable-xxhdpi-v4/ic_mr_button_connecting_03_darkPK!*: 'ȧ*˚res/drawable-xxhdpi-v4/ic_vol_type_tv_darkPK!*05ʛres/drawable-xxhdpi-v4/ic_mr_button_connected_26_darkPK!*USN res/drawable-xxhdpi-v4/star_grayPK!*n+ares/drawable-xxhdpi-v4/ic_dialog_close_darkPK!*IF)res/drawable-xxhdpi-v4/infobar_shadow_topPK!*E1`"9Ares/drawable-xxhdpi-v4/abc_ab_share_pack_mtrl_alpha.9.pngPK!*p܇+Tres/drawable-xxhdpi-v4/audio_playing_squarePK!*J*84res/drawable-xxhdpi-v4/quantum_ic_skip_previous_white_24PK!*p,20)tres/drawable-xxhdpi-v4/ic_stop_white_36dpPK!*dz6res/drawable-xxhdpi-v4/ic_mr_button_connected_24_lightPK!* yY20*res/drawable-xxhdpi-v4/ic_pause_white_24dpPK!*%(jres/drawable-xxhdpi-v4/ic_mr_button_greyPK!*z0}x6Ǯres/drawable-xxhdpi-v4/ic_mr_button_connected_29_lightPK!*W~'",res/drawable-xxhdpi-v4/ic_refresh_white_24dpPK!*ݝKF7)res/drawable-xxhdpi-v4/ic_mr_button_connecting_24_lightPK!*'ID6ٴres/drawable-xxhdpi-v4/ic_mr_button_connected_01_lightPK!*$?a\6res/drawable-xxhdpi-v4/ic_mr_button_connecting_04_darkPK!* 6Kres/drawable-xxhdpi-v4/quantum_ic_skip_next_grey600_36PK!*mr| res/drawable-xxhdpi-v4/ic_chromePK!*,res/drawable-xxhdpi-v4/permission_javascriptPK!*hOJ6res/drawable-xxhdpi-v4/ic_mr_button_connecting_27_darkPK!*<*rres/drawable-xxhdpi-v4/ic_folder_blue_24dpPK!*?{res/drawable-xxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_005PK!*)o|6res/drawable-xxhdpi-v4/ic_mr_button_connected_13_lightPK!*y7res/drawable-xxhdpi-v4/abc_text_select_handle_left_mtrlPK!*Y)$.res/drawable-xxhdpi-v4/amp_iconPK!*IhrMH7res/drawable-xxhdpi-v4/ic_mr_button_connecting_17_lightPK!*21,6Vres/drawable-xxhdpi-v4/ic_mr_button_connecting_07_darkPK!*+!0res/drawable-xxhdpi-v4/ic_vol_type_speaker_lightPK!*dnQE[V5jres/drawable-xxhdpi-v4/ic_mr_button_connected_02_darkPK!* A(res/drawable-xxhdpi-v4/abc_list_selector_disabled_holo_dark.9.pngPK!*[<56res/drawable-xxhdpi-v4/ic_mr_button_connected_20_darkPK!*1r=gb6&res/drawable-xxhdpi-v4/ic_mr_button_connecting_06_darkPK!*4res/drawable-xxhdpi-v4/quantum_ic_replay_30_white_36PK!*$TAres/drawable-xxhdpi-v4/cast_abc_scrubber_primary_mtrl_alpha.9.pngPK!*-e`2res/drawable-xxhdpi-v4/ic_notification_media_routePK!*GF#1res/drawable-xxhdpi-v4/quantum_ic_replay_white_24PK!*LQL1=res/drawable-xxhdpi-v4/omnibox_not_secure_warningPK!* #K?:7res/drawable-xxhdpi-v4/ic_mr_button_connecting_16_lightPK!*88res/drawable-xxhdpi-v4/abc_text_select_handle_right_mtrlPK!*\4res/drawable-xxhdpi-v4/ic_more_vert_24dp_on_light_bgPK!*d-* res/drawable-xxhdpi-v4/ic_audiotrack_lightPK!*އՃ~54res/drawable-xxhdpi-v4/ic_mr_button_connected_30_darkPK!**,res/drawable-xxhdpi-v4/ic_dialog_close_lightPK!*T$Yres/drawable-xxhdpi-v4/audio_playingPK!*mD:e0Xres/drawable-xxhdpi-v4/infobar_shadow_left.9.pngPK!*6 K~5res/drawable-xxhdpi-v4/ic_mr_button_connected_29_darkPK!*7z6res/drawable-xxhdpi-v4/ic_mr_button_connected_25_lightPK!*5q|7res/drawable-xxhdpi-v4/abc_list_pressed_holo_dark.9.pngPK!*E>=87res/drawable-xxhdpi-v4/ic_mr_button_connecting_09_lightPK!*2Yἃ~ <res/drawable-xxhdpi-v4/web_assetPK!* 7]X6 res/drawable-xxhdpi-v4/ic_mr_button_connecting_20_darkPK!*WT5res/drawable-xxhdpi-v4/ic_mr_button_connected_22_darkPK!*`(H64)res/drawable-xxhdpi-v4/ic_media_stop_darkPK!*xX@Gres/drawable-xxhdpi-v4/quantum_ic_pause_circle_filled_grey600_36PK!*H gb7rres/drawable-xxhdpi-v4/ic_mr_button_connecting_11_lightPK!*YrR>res/drawable-xxhdpi-v4/common_google_signin_btn_icon_light_normal_background.9.pngPK!*,WR6dres/drawable-xxhdpi-v4/ic_mr_button_connecting_19_darkPK!*$SN7res/drawable-xxhdpi-v4/ic_mr_button_connecting_02_lightPK!* yY200res/drawable-xxhdpi-v4/quantum_ic_pause_white_24PK!**8JH)gres/drawable-xxhdpi-v4/settings_all_sitesPK!*-`z6res/drawable-xxhdpi-v4/ic_mr_button_connected_22_lightPK!*Ɲ&res/drawable-xxhdpi-v4/btn_delete_24dpPK!*_Z6R res/drawable-xxhdpi-v4/ic_mr_button_connected_14_lightPK!*}/[V6 res/drawable-xxhdpi-v4/ic_mr_button_connecting_10_darkPK!*'2res/drawable-xxhdpi-v4/abc_list_focused_holo.9.pngPK!*K-res/drawable-xxhdpi-v4/top_round_shadow.9.pngPK!*r"GB6res/drawable-xxhdpi-v4/ic_mr_button_connected_00_lightPK!*p  <res/drawable-xxhdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.pngPK!*J /%res/drawable-xxhdpi-v4/quantum_ic_cast_white_36PK!*,J)_(res/drawable-xxhdpi-v4/ic_audiotrack_darkPK!*ᦲ#)res/drawable-xxhdpi-v4/webrtc_audioPK!*r qE@D+res/drawable-xxhdpi-v4/cast_abc_scrubber_control_to_pressed_mtrl_000PK!*CI9% 0b-res/drawable-xxhdpi-v4/googleg_disabled_color_18PK!*=B@*/res/drawable-xxhdpi-v4/ic_pause_white_36dpPK!*#'rup10res/drawable-xxhdpi-v4/permission_background_syncPK!*U4S3res/drawable-xxhdpi-v4/quantum_ic_skip_next_white_24PK!*]_Z94res/drawable-xxhdpi-v4/quantum_ic_cast_connected_white_24PK!*k]1^7res/drawable-xxhdpi-v4/ic_mr_button_disabled_darkPK!*nk#6:res/drawable-xxhdpi-v4/abc_list_longpressed_holo.9.pngPK!*IJ 6{;res/drawable-xxhdpi-v4/abc_spinner_mtrl_am_alpha.9.pngPK!*aϛB=res/drawable-xxhdpi-v4/abc_list_selector_disabled_holo_light.9.pngPK!*cID6>res/drawable-xxhdpi-v4/ic_mr_button_connecting_16_darkPK!*%=URf@res/drawable-xxhdpi-v4/common_google_signin_btn_text_light_normal_background.9.pngPK!*Wkf6;Eres/drawable-xxhdpi-v4/ic_mr_button_connected_15_lightPK!*-,!: Gres/drawable-xxhdpi-v4/quantum_ic_skip_previous_grey600_36PK!*?1V9Hres/drawable-xxhdpi-v4/cast_ic_stop_circle_filled_grey600PK!*n0Kres/drawable-xxhdpi-v4/quantum_ic_clear_white_24PK!*'ID7Mres/drawable-xxhdpi-v4/ic_mr_button_connecting_01_lightPK!*OJ7Nres/drawable-xxhdpi-v4/ic_mr_button_connecting_20_lightPK!*R 乑-Pres/drawable-xxhdpi-v4/cast_ic_notification_0PK!*KF6lRres/drawable-xxhdpi-v4/ic_mr_button_connecting_00_darkPK!*5j5Tres/drawable-xxhdpi-v4/quantum_ic_forward_10_white_24PK!*$ME@6Wres/drawable-xxhdpi-v4/ic_mr_button_connecting_09_darkPK!*֥K*Xres/animator/mtrl_fab_hide_motion_spec.xmlPK!*_:h 6[Zres/animator/mtrl_extended_fab_state_list_animator.xmlPK!*ދh$']res/animator/fragment_close_exit.xmlPK!*Tw#O*_res/animator/mtrl_fab_show_motion_spec.xmlPK!*rBx4`res/animator/mtrl_btn_unelevated_state_list_anim.xmlPK!*Q`<Pares/animator/mtrl_fab_transformation_sheet_collapse_spec.xmlPK!*f>Fh$cres/animator/fragment_open_enter.xmlPK!* 4b $eres/animator/fragment_fade_enter.xmlPK!*M 뇈h#fres/animator/fragment_open_exit.xmlPK!*%'=`:hres/animator/mtrl_fab_transformation_sheet_expand_spec.xmlPK!*vsD,7kres/animator/design_fab_show_motion_spec.xmlPK!*4[< g43lres/animator/mtrl_extended_fab_show_motion_spec.xmlPK!*{@`3nres/animator/mtrl_extended_fab_hide_motion_spec.xmlPK!*G,>pres/animator/design_fab_hide_motion_spec.xmlPK!*)y`h )qres/animator/mtrl_btn_state_list_anim.xmlPK!*|ջ0*tres/animator/mtrl_chip_state_list_anim.xmlPK!*4Th%rvres/animator/fragment_close_enter.xmlPK!*/+":Qxres/animator/mtrl_extended_fab_change_size_motion_spec.xmlPK!*j*yres/animator/mtrl_card_state_list_anim.xmlPK!* #|res/animator/fragment_fade_exit.xmlPK!*g&%r}res/layout-v26/abc_screen_toolbar.xmlPK!*n9g6h6Pres/drawable-nodpi-v4/cast_album_art_placeholder_largePK!*saa0Fres/drawable-nodpi-v4/cast_album_art_placeholderPK!*h(Y;PWres/drawable-xhdpi-v4/quantum_ic_play_circle_filled_grey600_36PK!*˛G5Yres/drawable-xhdpi-v4/ic_mr_button_connecting_29_darkPK!*45[res/drawable-xhdpi-v4/ic_mr_button_connected_13_darkPK!*#]5\res/drawable-xhdpi-v4/ic_mr_button_connecting_24_darkPK!*&9^res/drawable-xhdpi-v4/abc_ic_commit_search_api_mtrl_alphaPK!*)%&_res/drawable-xhdpi-v4/infobar_warningPK!*U-ares/drawable-xhdpi-v4/ic_skip_next_white_36dpPK!*GPm3.&@bres/drawable-xhdpi-v4/ic_cast_dark_offPK!*dª'"3cres/drawable-xhdpi-v4/ic_account_child_grey600_36dpPK!*V50"Ogres/drawable-xhdpi-v4/ic_edit_24dpPK!*޲=hres/drawable-xhdpi-v4/quantum_ic_pause_circle_filled_white_36PK!*QAr0.0kres/drawable-xhdpi-v4/quantum_ic_stop_grey600_36PK!*l_0..kres/drawable-xhdpi-v4/quantum_ic_stop_white_24PK!*?n505"lres/drawable-xhdpi-v4/quantum_ic_art_track_grey600_48PK!*ߪ5mres/drawable-xhdpi-v4/ic_mr_button_disconnected_lightPK!*{H.42*pres/drawable-xhdpi-v4/ic_media_pause_lightPK!* 4@qres/drawable-xhdpi-v4/ic_mr_button_connected_05_darkPK!*U3rres/drawable-xhdpi-v4/quantum_ic_skip_next_white_36PK!*D 5sres/drawable-xhdpi-v4/ic_mr_button_connected_12_lightPK!*pp%UP0eures/drawable-xhdpi-v4/permission_protected_mediaPK!*IAJ6wres/drawable-xhdpi-v4/quantum_ic_play_arrow_grey600_48PK!*Xߕ*]xres/drawable-xhdpi-v4/ic_vol_type_tv_lightPK!*(*<7res/drawable-xhdpi-v4/notify_panel_notification_icon_bgPK!*y4Tres/drawable-xhdpi-v4/ic_mr_button_connected_07_darkPK!*76res/drawable-xhdpi-v4/ic_mr_button_connecting_14_lightPK!*XT]X7res/drawable-xhdpi-v4/ic_play_circle_outline_black_48dpPK!*օw94Cres/drawable-xhdpi-v4/cast_abc_scrubber_control_to_pressed_mtrl_005PK!*oj2Rres/drawable-xhdpi-v4/ic_more_vert_24dp_on_dark_bgPK!*[%k2ql/!res/drawable-xhdpi-v4/ic_expand_less_black_24dpPK!*G>6res/drawable-xhdpi-v4/quantum_ic_volume_off_grey600_36PK!*ĕ4rres/drawable-xhdpi-v4/ic_mr_button_connected_08_darkPK!*tASN5res/drawable-xhdpi-v4/ic_vol_type_speaker_group_lightPK!*v)o!4ures/drawable-xhdpi-v4/ic_mr_button_connected_28_darkPK!*h (res/drawable-xhdpi-v4/ic_media_play_darkPK!*W2/res/drawable-xhdpi-v4/abc_btn_check_to_on_mtrl_000PK!*O\@4\res/drawable-xhdpi-v4/ic_mr_button_connected_06_darkPK!*Ku@=:res/drawable-xhdpi-v4/abc_popup_background_mtrl_mult.9.pngPK!*n~i;8res/drawable-xhdpi-v4/plusPK!*O3KF-res/drawable-xhdpi-v4/cast_ic_notification_onPK!*j3Q4209res/drawable-xhdpi-v4/quantum_ic_stop_grey600_48PK!*NT4res/drawable-xhdpi-v4/ic_mr_button_connected_16_darkPK!*);Fres/drawable-xhdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.pngPK!*rO 6res/drawable-xhdpi-v4/ic_mr_button_connecting_23_lightPK!*6res/drawable-xhdpi-v4/ic_mr_button_connecting_26_lightPK!*g% 4Tres/drawable-xhdpi-v4/ic_mr_button_connected_24_darkPK!*׆>72'res/drawable-xhdpi-v4/permission_cookiePK!*1&+&/gres/drawable-xhdpi-v4/ic_fast_rewind_white_36dpPK!*vU641res/drawable-xhdpi-v4/ic_drag_handle_grey600_24dpPK!*$t}5res/drawable-xhdpi-v4/ic_mr_button_connected_06_lightPK!*J*1res/drawable-xhdpi-v4/ic_skip_previous_white_36dpPK!*$L5!res/drawable-xhdpi-v4/quantum_ic_replay_30_grey600_36PK!*J5res/drawable-xhdpi-v4/ic_mr_button_connected_16_lightPK!*3,res/drawable-xhdpi-v4/cast_ic_notification_1PK!*YM0tres/drawable-xhdpi-v4/ic_fast_forward_white_36dpPK!*0%res/drawable-xhdpi-v4/ic_cast_dark_onPK!*ֻ1res/drawable-xhdpi-v4/quantum_ic_refresh_white_24PK!*9ؓi5res/drawable-xhdpi-v4/ic_mr_button_connecting_26_darkPK!* 3>res/drawable-xhdpi-v4/abc_scrubber_control_to_pressed_mtrl_000PK!*%QN+Gres/drawable-xhdpi-v4/modern_toolbar_shadowPK!*0:5res/drawable-xhdpi-v4/ic_mr_button_connecting_28_darkPK!*Ww3Wres/drawable-xhdpi-v4/quantum_ic_replay_30_white_24PK!*Uo20) res/drawable-xhdpi-v4/ic_media_stop_lightPK!*l4V res/drawable-xhdpi-v4/ic_mr_button_connected_23_darkPK!*շv9 res/drawable-xhdpi-v4/color_picker_advanced_select_handlePK!*ĕ5res/drawable-xhdpi-v4/ic_mr_button_connecting_08_darkPK!*6Gres/drawable-xhdpi-v4/cast_abc_scrubber_control_off_mtrl_alphaPK!*7~ 5YHres/drawable-xhdpi-v4/ic_mr_button_connecting_13_darkPK!*[A504Ires/drawable-xhdpi-v4/ic_mr_button_connected_27_darkPK!*@ 5\Kres/drawable-xhdpi-v4/ic_mr_button_connecting_21_darkPK!*jW5Lres/drawable-xhdpi-v4/ic_mr_button_connecting_14_darkPK!* 6 Nres/drawable-xhdpi-v4/ic_mr_button_connecting_30_lightPK!*mA!4qOres/drawable-xhdpi-v4/ic_mr_button_connected_19_darkPK!*ՐP5Pres/drawable-xhdpi-v4/ic_mr_button_connected_02_lightPK!* 4^Rres/drawable-xhdpi-v4/ic_mr_button_connected_15_darkPK!*p4Sres/drawable-xhdpi-v4/ic_mr_button_connected_17_darkPK!*O4FUres/drawable-xhdpi-v4/ic_mr_button_connected_14_darkPK!*z,ql.Vres/drawable-xhdpi-v4/ic_vol_type_speaker_darkPK!*M)zXres/drawable-xhdpi-v4/cast_playing_squarePK!*R+R.V\res/drawable-xhdpi-v4/ic_play_arrow_white_24dpPK!*^7c^*[]res/drawable-xhdpi-v4/ic_delete_white_24dpPK!*O'"4^res/drawable-xhdpi-v4/ic_mr_button_connected_21_darkPK!*/ ]5_res/drawable-xhdpi-v4/ic_mr_button_connecting_11_darkPK!*<1]X.`res/drawable-xhdpi-v4/ic_arrow_back_white_24dpPK!*+̪ ares/drawable-xhdpi-v4/star_greenPK!*2~C% 5cres/drawable-xhdpi-v4/ic_mr_button_connected_19_lightPK!*)_8eres/drawable-xhdpi-v4/abc_tab_indicator_mtrl_alpha.9.pngPK!*x9fres/drawable-xhdpi-v4/abc_scrubber_control_off_mtrl_alphaPK!*\0Bgres/drawable-xhdpi-v4/top_round_foreground.9.pngPK!*x-,qires/drawable-xhdpi-v4/infobar_blocked_popupsPK!*ZJ6jres/drawable-xhdpi-v4/ic_mr_button_connecting_18_lightPK!*4>lres/drawable-xhdpi-v4/abc_textfield_activated_mtrl_alpha.9.pngPK!*+*1lres/drawable-xhdpi-v4/ic_mr_button_disabled_lightPK!*'35Qores/drawable-xhdpi-v4/ic_mr_button_connected_20_lightPK!*b5pres/drawable-xhdpi-v4/ic_mr_button_connecting_02_darkPK!*̣64)=rres/drawable-xhdpi-v4/ic_media_pause_darkPK!*201rres/drawable-xhdpi-v4/quantum_ic_pause_grey600_36PK!*Dm6[sres/drawable-xhdpi-v4/ic_mr_button_connecting_21_lightPK!*ܱ6tres/drawable-xhdpi-v4/quantum_ic_forward_30_grey600_36PK!*I5xres/drawable-xhdpi-v4/ic_mr_button_connecting_30_darkPK!*7xoj/{yres/drawable-xhdpi-v4/googleg_standard_color_18PK!*P 6G}res/drawable-xhdpi-v4/ic_mr_button_connecting_04_lightPK!*&]X)~res/drawable-xhdpi-v4/infobar_downloadingPK!*W~'"+lres/drawable-xhdpi-v4/ic_refresh_white_36dpPK!* #5res/drawable-xhdpi-v4/ic_mr_button_connected_28_lightPK!*$MH"rres/drawable-xhdpi-v4/omnibox_infoPK!*0,res/drawable-xhdpi-v4/ic_check_googblue_24dpPK!*@6res/drawable-xhdpi-v4/ic_mr_button_connecting_15_lightPK!*ub 6Kres/drawable-xhdpi-v4/cast_ic_stop_circle_filled_whitePK!* 5fres/drawable-xhdpi-v4/ic_mr_button_connecting_05_darkPK!*G9X2؊res/drawable-xhdpi-v4/abc_btn_radio_to_on_mtrl_015PK!*s r6ōres/drawable-xhdpi-v4/ic_mr_button_connecting_13_lightPK!*D2.res/drawable-xhdpi-v4/notification_bg_normal.9.pngPK!*æR<res/drawable-xhdpi-v4/abc_textfield_default_mtrl_alpha.9.pngPK!*F 5res/drawable-xhdpi-v4/ic_mr_button_connected_08_lightPK!*uJmh/Fres/drawable-xhdpi-v4/ic_expand_more_black_24dpPK!*$t}6res/drawable-xhdpi-v4/ic_mr_button_connecting_06_lightPK!*I4ures/drawable-xhdpi-v4/ic_mr_button_connected_00_darkPK!*DFz7ڕres/drawable-xhdpi-v4/abc_list_pressed_holo_light.9.pngPK!*ڟres/drawable-xhdpi-v4/btn_infoPK!*16res/drawable-xhdpi-v4/ic_mr_button_connecting_25_lightPK!* E641res/drawable-xhdpi-v4/quantum_ic_pause_grey600_48PK!*c?a8res/drawable-xhdpi-v4/abc_text_select_handle_middle_mtrlPK!*W6res/drawable-xhdpi-v4/ic_mr_button_connecting_19_lightPK!*۞iI5res/drawable-xhdpi-v4/quantum_ic_volume_up_grey600_36PK!*MoWRdres/drawable-xhdpi-v4/ic_searchPK!*}.res/drawable-xhdpi-v4/ic_play_arrow_white_36dpPK!*Mp59res/drawable-xhdpi-v4/ic_mr_button_connected_09_lightPK!*p<res/drawable-xhdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.pngPK!*O_A6res/drawable-xhdpi-v4/ic_mr_button_connecting_03_lightPK!*je`!res/drawable-xhdpi-v4/google_playPK!*Hly'"5res/drawable-xhdpi-v4/ic_mr_button_connected_26_lightPK!*1;5res/drawable-xhdpi-v4/abc_scrubber_primary_mtrl_alpha.9.pngPK!*!>P,res/drawable-xhdpi-v4/common_google_signin_btn_text_dark_normal_background.9.pngPK!*_*6[res/drawable-xhdpi-v4/ic_mr_button_connecting_28_lightPK!*'#5Ʒres/drawable-xhdpi-v4/ic_mr_button_connected_23_lightPK!*"(@H 6Lres/drawable-xhdpi-v4/ic_mr_button_connecting_05_lightPK!*GB)res/drawable-xhdpi-v4/ic_checked_checkboxPK!*436Yres/drawable-xhdpi-v4/quantum_ic_play_arrow_grey600_36PK!*Z 4res/drawable-xhdpi-v4/ic_mr_button_connected_18_darkPK!*Pc^/res/drawable-xhdpi-v4/infobar_translate_compactPK!*%6res/drawable-xhdpi-v4/ic_mr_button_connecting_22_lightPK!*F 6:res/drawable-xhdpi-v4/ic_mr_button_connecting_08_lightPK!*10@2z)res/drawable-xhdpi-v4/ic_share_white_24dpPK!*U2=Ures/drawable-xhdpi-v4/quantum_ic_keyboard_arrow_down_white_36PK!*<Wres/drawable-xhdpi-v4/quantum_ic_play_circle_filled_white_36PK!*Γ5res/drawable-xhdpi-v4/ic_mr_button_connecting_17_darkPK!* 48res/drawable-xhdpi-v4/quantum_ic_forward_30_white_24PK!*$T_Z+res/drawable-xhdpi-v4/ic_unchecked_checkboxPK!*#*OJ"cres/drawable-xhdpi-v4/icon_webviewPK!*4res/drawable-xhdpi-v4/ic_mr_button_connected_11_darkPK!* SI4ares/drawable-xhdpi-v4/ic_mr_button_connected_01_darkPK!*\0jY5res/drawable-xhdpi-v4/ic_mr_button_connecting_03_darkPK!*ϝ).res/drawable-xhdpi-v4/ic_vol_type_tv_darkPK!* +&4 res/drawable-xhdpi-v4/ic_mr_button_connected_26_darkPK!*ȵtres/drawable-xhdpi-v4/star_grayPK!*u *res/drawable-xhdpi-v4/ic_dialog_close_darkPK!*zd:8(res/drawable-xhdpi-v4/infobar_shadow_topPK!*ع禬8!res/drawable-xhdpi-v4/abc_ab_share_pack_mtrl_alpha.9.pngPK!*J*3res/drawable-xhdpi-v4/audio_playing_squarePK!*r77res/drawable-xhdpi-v4/quantum_ic_skip_previous_white_24PK!*0.(res/drawable-xhdpi-v4/ic_stop_white_36dpPK!*b -(5 res/drawable-xhdpi-v4/ic_mr_button_connected_24_lightPK!*-a42)res/drawable-xhdpi-v4/ic_pause_white_24dpPK!*a\';res/drawable-xhdpi-v4/ic_mr_button_greyPK!*&R% 5res/drawable-xhdpi-v4/ic_mr_button_connected_29_lightPK!*ֻ+yres/drawable-xhdpi-v4/ic_refresh_white_24dpPK!*4BF6_res/drawable-xhdpi-v4/ic_mr_button_connecting_24_lightPK!*!i5res/drawable-xhdpi-v4/ic_mr_button_connected_01_lightPK!*L 5,res/drawable-xhdpi-v4/ic_mr_button_connecting_04_darkPK!*X)5res/drawable-xhdpi-v4/quantum_ic_skip_next_grey600_36PK!*EGBres/drawable-xhdpi-v4/ic_chromePK!*0bV+p res/drawable-xhdpi-v4/permission_javascriptPK!*.5| res/drawable-xhdpi-v4/ic_mr_button_connecting_27_darkPK!*mڞ}x) res/drawable-xhdpi-v4/ic_folder_blue_24dpPK!*օw94> res/drawable-xhdpi-v4/abc_scrubber_control_to_pressed_mtrl_005PK!*.a=5_res/drawable-xhdpi-v4/ic_mr_button_connected_13_lightPK!*;6res/drawable-xhdpi-v4/abc_text_select_handle_left_mtrlPK!*e"res/drawable-xhdpi-v4/amp_iconPK!* 6res/drawable-xhdpi-v4/ic_mr_button_connecting_17_lightPK!*y5Tres/drawable-xhdpi-v4/ic_mr_button_connecting_07_darkPK!*w[*id/res/drawable-xhdpi-v4/ic_vol_type_speaker_lightPK!*b4fres/drawable-xhdpi-v4/ic_mr_button_connected_02_darkPK!*[X@res/drawable-xhdpi-v4/abc_list_selector_disabled_holo_dark.9.pngPK!*Ytʜ4res/drawable-xhdpi-v4/ic_mr_button_connected_20_darkPK!*O\@5Sres/drawable-xhdpi-v4/ic_mr_button_connecting_06_darkPK!*6#3res/drawable-xhdpi-v4/quantum_ic_replay_30_white_36PK!*1@!res/drawable-xhdpi-v4/cast_abc_scrubber_primary_mtrl_alpha.9.pngPK!*21`1"res/drawable-xhdpi-v4/ic_notification_media_routePK!*%res/drawable-xhdpi-v4/omnibox_not_secure_warningPK!*S6&res/drawable-xhdpi-v4/ic_mr_button_connecting_16_lightPK!*oi7'res/drawable-xhdpi-v4/abc_text_select_handle_right_mtrlPK!*Mup3)res/drawable-xhdpi-v4/ic_more_vert_24dp_on_light_bgPK!*`))res/drawable-xhdpi-v4/ic_audiotrack_lightPK!*˧+4*res/drawable-xhdpi-v4/ic_mr_button_connected_30_darkPK!*~+c,res/drawable-xhdpi-v4/ic_dialog_close_lightPK!*W!#g-res/drawable-xhdpi-v4/audio_playingPK!*Y/.res/drawable-xhdpi-v4/infobar_shadow_left.9.pngPK!*n4!0res/drawable-xhdpi-v4/ic_mr_button_connected_29_darkPK!*$% 51res/drawable-xhdpi-v4/ic_mr_button_connected_25_lightPK!*Tz6*3res/drawable-xhdpi-v4/abc_list_pressed_holo_dark.9.pngPK!*Mp64res/drawable-xhdpi-v4/ic_mr_button_connecting_09_lightPK!*0@Rkfa5res/drawable-xhdpi-v4/web_assetPK!*&56res/drawable-xhdpi-v4/ic_mr_button_connecting_20_darkPK!*4(!47res/drawable-xhdpi-v4/ic_mr_button_connected_22_darkPK!*v42(9res/drawable-xhdpi-v4/ic_media_stop_darkPK!*ɖ>?9res/drawable-xhdpi-v4/quantum_ic_pause_circle_filled_grey600_36PK!*=Ks6;res/drawable-xhdpi-v4/ic_mr_button_connecting_11_lightPK!*I3WQ!=res/drawable-xhdpi-v4/common_google_signin_btn_icon_light_normal_background.9.pngPK!*\, 5?res/drawable-xhdpi-v4/ic_mr_button_connecting_19_darkPK!*ՐP6eAres/drawable-xhdpi-v4/ic_mr_button_connecting_02_lightPK!*-a42/Bres/drawable-xhdpi-v4/quantum_ic_pause_white_24PK!*A5GD(aCres/drawable-xhdpi-v4/settings_all_sitesPK!*%#5Cres/drawable-xhdpi-v4/ic_mr_button_connected_22_lightPK!*=;]X%Eres/drawable-xhdpi-v4/btn_delete_24dpPK!**54Gres/drawable-xhdpi-v4/ic_mr_button_connected_14_lightPK!*# 5Hres/drawable-xhdpi-v4/ic_mr_button_connecting_10_darkPK!*V9⽣1Ires/drawable-xhdpi-v4/abc_list_focused_holo.9.pngPK!*,Jres/drawable-xhdpi-v4/top_round_shadow.9.pngPK!* 5_Pres/drawable-xhdpi-v4/ic_mr_button_connected_00_lightPK!*?z0;Qres/drawable-xhdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.pngPK!*gtM.Xres/drawable-xhdpi-v4/quantum_ic_cast_white_36PK!*}>(/[res/drawable-xhdpi-v4/ic_audiotrack_darkPK!*kv94"&\res/drawable-xhdpi-v4/webrtc_audioPK!* 3C]res/drawable-xhdpi-v4/cast_abc_scrubber_control_to_pressed_mtrl_000PK!*h/^res/drawable-xhdpi-v4/googleg_disabled_color_18PK!* yY20)`res/drawable-xhdpi-v4/ic_pause_white_36dpPK!*t00tares/drawable-xhdpi-v4/permission_background_syncPK!*&3qcres/drawable-xhdpi-v4/quantum_ic_skip_next_white_24PK!*ib8dres/drawable-xhdpi-v4/quantum_ic_cast_connected_white_24PK!*j_z0fres/drawable-xhdpi-v4/ic_mr_button_disabled_darkPK!*5hres/drawable-xhdpi-v4/abc_list_longpressed_holo.9.pngPK!*> ڇ5ires/drawable-xhdpi-v4/abc_spinner_mtrl_am_alpha.9.pngPK!*E0Akres/drawable-xhdpi-v4/abc_list_selector_disabled_holo_light.9.pngPK!*כO5lres/drawable-xhdpi-v4/ic_mr_button_connecting_16_darkPK!*u2:6mres/drawable-xhdpi-v4/notification_bg_low_normal.9.pngPK!*ۡ(Qnres/drawable-xhdpi-v4/common_google_signin_btn_text_light_normal_background.9.pngPK!*@5qres/drawable-xhdpi-v4/ic_mr_button_connected_15_lightPK!*[Y9fsres/drawable-xhdpi-v4/quantum_ic_skip_previous_grey600_36PK!*y>f8tres/drawable-xhdpi-v4/cast_ic_stop_circle_filled_grey600PK!*u /vres/drawable-xhdpi-v4/quantum_ic_clear_white_24PK!*!i6wres/drawable-xhdpi-v4/ic_mr_button_connecting_01_lightPK!*x6^yres/drawable-xhdpi-v4/ic_mr_button_connecting_20_lightPK!*Tx ,zres/drawable-xhdpi-v4/cast_ic_notification_0PK!*I5&|res/drawable-xhdpi-v4/ic_mr_button_connecting_00_darkPK!*j64}res/drawable-xhdpi-v4/quantum_ic_forward_10_white_24PK!*\b5res/drawable-xhdpi-v4/ic_mr_button_connecting_09_darkPK!*M2+h+res/anim-v21/mtrl_bottom_sheet_slide_in.xmlPK!*y)h.res/anim-v21/design_bottom_sheet_slide_out.xmlPK!*5*h-&res/anim-v21/design_bottom_sheet_slide_in.xmlPK!*19l0res/anim-v21/fragment_fast_out_extra_slow_in.xmlPK!*V:p(h,res/anim-v21/mtrl_bottom_sheet_slide_out.xmlPK!*xsT6eres/animator-v21/design_appbar_state_list_animator.xmlPK!*a.res/color/abc_secondary_text_material_dark.xmlPK!*/K[)ˋres/color/switch_thumb_material_light.xmlPK!*8\!res/color/abc_tint_seek_thumb.xmlPK!*f x-eres/color/material_on_background_disabled.xmlPK!*{Y[%res/color/chip_text_color.xmlPK!*k*(res/color/mtrl_btn_bg_color_selector.xmlPK!* %Lres/color/default_text_color_list.xmlPK!* 1$res/color/blue_when_enabled_dark.xmlPK!*PT(ǔres/color/switch_thumb_material_dark.xmlPK!*_Áp,res/color/mtrl_navigation_item_icon_tint.xmlPK!*9#wres/color/abc_tint_switch_track.xmlPK!*'B3res/color/mtrl_tabs_icon_color_selector_colored.xmlPK!*z MQ:Ures/color/abc_tint_spinner.xmlPK!*dTۛres/color/blue_mode_tint.xmlPK!*M,ۜres/color/mtrl_tabs_colored_ripple_color.xmlPK!*-Z>P(res/color/mtrl_chip_background_color.xmlPK!*'>res/color/abc_background_cache_hint_selector_material_dark.xmlPK!*f #ires/color/mtrl_filled_icon_tint.xmlPK!*2Xu3$ڢres/color/abc_tint_btn_checkable.xmlPK!*A&_res/color/mtrl_filled_stroke_color.xmlPK!*x*res/color/material_on_primary_disabled.xmlPK!*ares/color/mtrl_error.xmlPK!*SEres/color/checkbox_tint.xmlPK!*x1tres/color/material_on_primary_emphasis_medium.xmlPK!* xres/color/design_icon_tint.xmlPK!*v%res/color/mtrl_outlined_icon_tint.xmlPK!*3U_D'-res/color/mtrl_chip_close_icon_tint.xmlPK!*#':res/color/mtrl_on_primary_text_btn_text_color_selector.xmlPK!*oSE#>res/color/mtrl_btn_ripple_color.xmlPK!*&Աres/color/blue_when_enabled.xmlPK!*\^*res/color/default_icon_color_tint_list.xmlPK!*z%'res/color/chip_text_color_secondary.xmlPK!*d|^05res/color/default_icon_color_light_tint_list.xmlPK!*y1res/color/design_error.xmlPK!*L! res/color/abc_search_url_text.xmlPK!*B(ires/color/mtrl_outlined_stroke_color.xmlPK!*g0:res/color/abc_primary_text_disable_only_material_light.xmlPK!* D$Mres/color/mtrl_chip_ripple_color.xmlPK!*|YFx/res/color/mtrl_text_btn_text_color_selector.xmlPK!*Os,res/color/abc_primary_text_material_dark.xmlPK!*7x4res/color/material_on_surface_emphasis_high_type.xmlPK!*ǴG+res/color/mtrl_choice_chip_ripple_color.xmlPK!*y~/res/color/abc_secondary_text_material_light.xmlPK!*)/res/color/default_text_color_secondary_list.xmlPK!*\k$#res/color/mtrl_tabs_ripple_color.xmlPK!*^G,res/color/mtrl_btn_stroke_color_selector.xmlPK!*?}x7tres/color/material_on_background_emphasis_high_type.xmlPK!**x*res/color/material_on_surface_disabled.xmlPK!*NɄCres/color/chip_ripple_color.xmlPK!*j4Wres/color/default_icon_color_secondary_tint_list.xmlPK!*x4res/color/material_on_background_emphasis_medium.xmlPK!* O4/res/color/abc_hint_foreground_material_dark.xmlPK!*O9:res/color/abc_primary_text_disable_only_material_dark.xmlPK!*0-res/color/abc_primary_text_material_light.xmlPK!*Xres/color/abc_tint_default.xmlPK!* vT%res/color/mtrl_chip_surface_color.xmlPK!*3`P5res/color/default_text_color_secondary_light_list.xmlPK!*[b0res/color/common_google_signin_btn_text_dark.xmlPK!*+(zres/color/mtrl_fab_bg_color_selector.xmlPK!*:?3res/color/mtrl_navigation_item_background_color.xmlPK!*%*Cres/color/mtrl_btn_text_color_selector.xmlPK!*j-res/color/default_text_color_inverse_list.xmlPK!*i+res/color/default_text_color_light_list.xmlPK!*M@P/-res/color/mtrl_choice_chip_background_color.xmlPK!* Սx4res/color/material_on_primary_emphasis_high_type.xmlPK!*Xres/color/filled_button_bg.xmlPK!*톏x*&res/color/mtrl_popupmenu_overlay_color.xmlPK!*Rn:Lres/color/abc_tint_edittext.xmlPK!*'res/color/mtrl_indicator_text_color.xmlPK!*[1&res/color/mtrl_btn_text_btn_bg_color_selector.xmlPK!*(res/color/filled_button_ripple_color.xmlPK!*r5*res/color/default_text_color_hint_list.xmlPK!*=%-res/color/design_box_stroke_color.xmlPK!*Wi8()res/color/mtrl_choice_chip_text_color.xmlPK!*Y>K#,res/color/mtrl_fab_ripple_color.xmlPK!*F:res/color/default_icon_color_secondary_light_tint_list.xmlPK!*q1$res/color/common_google_signin_btn_text_light.xmlPK!*ͤٗ#res/color/chip_background_color.xmlPK!*_Áp-res/color/mtrl_navigation_item_text_color.xmlPK!*z+res/color/common_google_signin_btn_tint.xmlPK!*J7t"2res/color/mtrl_chip_text_color.xmlPK!*̸?res/color/abc_background_cache_hint_selector_material_light.xmlPK!**/res/color/mtrl_fab_icon_text_color_selector.xmlPK!*2/res/color/mtrl_tabs_legacy_text_color_selector.xmlPK!*ڜC#40sres/color/abc_hint_foreground_material_light.xmlPK!*e)D&res/color/text_button_ripple_color.xmlPK!* }lres/color/chip_stroke_color.xmlPK!*?[9(*res/color/mtrl_filled_background_color.xmlPK!*vس\+@res/color/abc_btn_colored_text_material.xmlPK!**x1res/color/material_on_surface_emphasis_medium.xmlPK!*K+res/color/mtrl_tabs_icon_color_selector.xmlPK!*ZID,%res/color/mtrl_btn_text_btn_ripple_color.xmlPK!*;q" res/color/menu_chip_background.xmlPK!*Ē0 res/color/checkbox_themeable_attribute_color.xmlPK!*>69 res/drawable-ldrtl-v17/abc_spinner_mtrl_am_alpha.9.pngPK!*'Һ' res/xml/page_info_cookie_preference.xmlPK!* res/xml/standalone_badge.xmlPK!*2 &res/xml/single_website_preferences.xmlPK!*X {res/xml/all_site_preferences.xmlPK!*@ %rres/xml/site_settings_preferences.xmlPK!*ctres/xml/website_preferences.xmlPK!*Fna\,res/drawable-xxxhdpi-v4/ic_group_collapse_05PK!*fgb,res/drawable-xxxhdpi-v4/ic_group_collapse_09PK!*.t,V res/drawable-xxxhdpi-v4/ic_group_collapse_12PK!*!ȁ!*S!res/drawable-xxxhdpi-v4/ic_group_expand_10PK!*nG'6"res/drawable-xxxhdpi-v4/navigation_bubble_shadow.9.pngPK!*?vc^*W?res/drawable-xxxhdpi-v4/ic_group_expand_05PK!*d&Ares/drawable-xxxhdpi-v4/popup_bg.9.pngPK!*T՝*0Vres/drawable-xxxhdpi-v4/ic_group_expand_13PK!*3\v?:,%Wres/drawable-xxxhdpi-v4/ic_group_collapse_10PK!*Cߩ\ *Xres/drawable-xxxhdpi-v4/ic_group_expand_01PK!*O9lmh*%Zres/drawable-xxxhdpi-v4/ic_group_expand_07PK!*A*[res/drawable-xxxhdpi-v4/ic_group_expand_02PK!*v,G]res/drawable-xxxhdpi-v4/ic_group_collapse_14PK!*mu| =J^res/drawable-xxxhdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.pngPK!*y*[hres/drawable-xxxhdpi-v4/ic_group_expand_12PK!*G_Z,`ires/drawable-xxxhdpi-v4/ic_group_collapse_06PK!*\<'"*kres/drawable-xxxhdpi-v4/ic_group_expand_03PK!*ϊ+&,lres/drawable-xxxhdpi-v4/ic_group_collapse_03PK!*mh,nres/drawable-xxxhdpi-v4/ic_group_collapse_07PK!*(wMH*ores/drawable-xxxhdpi-v4/ic_group_expand_09PK!*! -9qres/drawable-xxxhdpi-v4/abc_switch_track_mtrl_alpha.9.pngPK!*8c ,tres/drawable-xxxhdpi-v4/ic_group_collapse_01PK!*TGB,Yvres/drawable-xxxhdpi-v4/ic_group_collapse_04PK!*>9:wres/drawable-xxxhdpi-v4/abc_tab_indicator_mtrl_alpha.9.pngPK!*f2xres/drawable-xxxhdpi-v4/top_round_foreground.9.pngPK!*J),|res/drawable-xxxhdpi-v4/ic_group_collapse_00PK!*,}res/drawable-xxxhdpi-v4/ic_group_collapse_13PK!*6,,~res/drawable-xxxhdpi-v4/ic_group_collapse_11PK!*><*res/drawable-xxxhdpi-v4/infobar_shadow_topPK!*0*,res/drawable-xxxhdpi-v4/ic_group_collapse_02PK!**res/drawable-xxxhdpi-v4/ic_group_expand_11PK!*)ےPe`,res/drawable-xxxhdpi-v4/ic_group_collapse_08PK!*9c^*Äres/drawable-xxxhdpi-v4/ic_group_expand_06PK!*hN*~res/drawable-xxxhdpi-v4/ic_group_expand_00PK!*vmMb1yres/drawable-xxxhdpi-v4/infobar_shadow_left.9.pngPK!*J)*:res/drawable-xxxhdpi-v4/ic_group_expand_15PK!*Y7*;res/drawable-xxxhdpi-v4/ic_group_expand_14PK!*,u .8res/drawable-xxxhdpi-v4/top_round_shadow.9.pngPK!*#&oql*Bres/drawable-xxxhdpi-v4/ic_group_expand_08PK!* = res/drawable-xxxhdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.pngPK!*Sh7Ures/drawable-xxxhdpi-v4/abc_spinner_mtrl_am_alpha.9.pngPK!*hN,"res/drawable-xxxhdpi-v4/ic_group_collapse_15PK!*9E@*res/drawable-xxxhdpi-v4/ic_group_expand_04PK!*:vTres/anim/menu_exit.xmlPK!*ܣ䙬x6vres/anim/btn_radio_to_on_mtrl_ring_outer_animation.xmlPK!*UH%xT,res/anim/abc_shrink_fade_out_from_bottom.xmlPK!*0m%hXres/anim/textbubble_in.xmlPK!*zEŮres/anim/textbubble_out.xmlPK!* D_P res/anim/abc_slide_in_bottom.xmlPK!*I< B-res/anim/btn_checkbox_to_unchecked_check_path_merged_animation.xmlPK!*uc8ures/anim/design_snackbar_in.xmlPK!*_Pwres/anim/abc_fade_in.xmlPK!*bres/anim/abc_slide_in_top.xmlPK!*?]hƷres/anim/image_grid_enter.xmlPK!*C*ٸres/anim/mtrl_card_lowers_interpolator.xmlPK!*;d/| res/anim/image_tile_enter.xmlPK!*/xT)res/anim/abc_grow_fade_in_from_bottom.xmlPK!*O'Rres/anim/abc_tooltip_enter.xmlPK!*'v wres/anim/abc_fade_out.xmlPK!*zEres/anim/chip_out.xmlPK!*/nǨ#res/anim/menu_enter_from_bottom.xmlPK!*r!res/anim/abc_slide_out_bottom.xmlPK!*?NJ8res/anim/btn_checkbox_to_checked_icon_null_animation.xmlPK!*Wres/anim/menu_enter.xmlPK!*<x5res/anim/btn_radio_to_on_mtrl_dot_group_animation.xmlPK!*6 ?res/anim/btn_checkbox_to_checked_box_outer_merged_animation.xmlPK!*HXl*res/anim/abc_slide_out_top.xmlPK!*1L?Zres/anim/btn_checkbox_to_checked_box_inner_merged_animation.xmlPK!*Fres/anim/abc_popup_enter.xmlPK!*âyx6res/anim/btn_radio_to_off_mtrl_dot_group_animation.xmlPK!*u8 res/anim/design_snackbar_out.xmlPK!*%r<res/anim/btn_radio_to_off_mtrl_ring_outer_path_animation.xmlPK!*res/anim/abc_tooltip_exit.xmlPK!*_p$hres/anim/chip_in.xmlPK!*Q8 A res/anim/btn_checkbox_to_unchecked_box_inner_merged_animation.xmlPK!*(кx7res/anim/btn_radio_to_off_mtrl_ring_outer_animation.xmlPK!*[4:res/anim/btn_checkbox_to_unchecked_icon_null_animation.xmlPK!*ݽtT" res/anim/menu_exit_from_bottom.xmlPK!*ocQres/anim/abc_popup_exit.xmlPK!*{;res/anim/btn_radio_to_on_mtrl_ring_outer_path_animation.xmlPK!*BE%res/drawable-hdpi-v4/settings_sensorsPK!*ruql1Nres/drawable-hdpi-v4/infobar_accessibility_eventsPK!*yD=res/drawable-hdpi-v4/quantum_ic_play_circle_filled_grey600_36PK!*_8sn8*res/drawable-hdpi-v4/abc_ic_commit_search_api_mtrl_alphaPK!*u72$res/drawable-hdpi-v4/infobar_warningPK!*Ba,res/drawable-hdpi-v4/ic_skip_next_white_36dpPK!*c%res/drawable-hdpi-v4/ic_cast_dark_offPK!*Zsn2res/drawable-hdpi-v4/ic_account_child_grey600_36dpPK!*T!res/drawable-hdpi-v4/ic_edit_24dpPK!*h:oj<res/drawable-hdpi-v4/quantum_ic_pause_circle_filled_white_36PK!*Ԭz?</res/drawable-hdpi-v4/quantum_ic_stop_grey600_36PK!*I0.-ures/drawable-hdpi-v4/quantum_ic_stop_white_24PK!*AQ4res/drawable-hdpi-v4/quantum_ic_art_track_grey600_48PK!*z4]res/drawable-hdpi-v4/ic_mr_button_disconnected_lightPK!*v$-,)res/drawable-hdpi-v4/ic_media_pause_lightPK!*Ba2 res/drawable-hdpi-v4/quantum_ic_skip_next_white_36PK!** /'res/drawable-hdpi-v4/permission_protected_mediaPK!*435res/drawable-hdpi-v4/quantum_ic_play_arrow_grey600_48PK!*甗)res/drawable-hdpi-v4/ic_vol_type_tv_lightPK!*2Bp3.)res/drawable-hdpi-v4/ic_logo_googleg_24dpPK!*.YU3Qres/drawable-hdpi-v4/navigation_bubble_shadow.9.pngPK!*=k7 res/drawable-hdpi-v4/infobar_protected_media_identifierPK!*j3&1 res/drawable-hdpi-v4/permission_popupsPK!*U33res/drawable-hdpi-v4/quantum_ic_play_arrow_white_24PK!*ʉɞv# res/drawable-hdpi-v4/popup_bg.9.pngPK!*%YP6res/drawable-hdpi-v4/notification_bg_low_pressed.9.pngPK!*tٱ!res/drawable-hdpi-v4/webrtc_videoPK!*0ٝ2res/drawable-hdpi-v4/quantum_ic_volume_up_white_36PK!*JISP%res/drawable-hdpi-v4/settings_storagePK!*!3fres/drawable-hdpi-v4/quantum_ic_volume_off_white_36PK!*]ӪwBres/drawable-hdpi-v4/abc_textfield_search_default_mtrl_alpha.9.pngPK!*\{=8 wres/drawable-hdpi-v4/ic_vol_mutePK!*szD;61res/drawable-hdpi-v4/abc_btn_check_to_on_mtrl_015PK!*qz1 res/drawable-hdpi-v4/abc_btn_radio_to_on_mtrl_000PK!*ZtDz"res/drawable-hdpi-v4/abc_textfield_search_activated_mtrl_alpha.9.pngPK!*ۺ8`#res/drawable-hdpi-v4/abc_scrubber_track_mtrl_alpha.9.pngPK!*(H$res/drawable-hdpi-v4/ic_media_play_lightPK!*? /v6w%res/drawable-hdpi-v4/quantum_ic_skip_previous_white_36PK!*Ќ֡9&res/drawable-hdpi-v4/notification_bg_normal_pressed.9.pngPK!*}:86'res/drawable-hdpi-v4/notify_panel_notification_icon_bgPK!*@;669(res/drawable-hdpi-v4/ic_play_circle_outline_black_48dpPK!*lӥ3B+res/drawable-hdpi-v4/cast_abc_scrubber_control_to_pressed_mtrl_005PK!*tEEe`1%-res/drawable-hdpi-v4/ic_more_vert_24dp_on_dark_bgPK!*$JFgb.-res/drawable-hdpi-v4/ic_expand_less_black_24dpPK!* G5.res/drawable-hdpi-v4/quantum_ic_volume_off_grey600_36PK!*>E+&40res/drawable-hdpi-v4/ic_vol_type_speaker_group_lightPK!*}'e2res/drawable-hdpi-v4/ic_media_play_darkPK!*szX13res/drawable-hdpi-v4/abc_btn_check_to_on_mtrl_000PK!*3 =J94res/drawable-hdpi-v4/abc_popup_background_mtrl_mult.9.pngPK!*/!96$9res/drawable-hdpi-v4/plusPK!*9,9res/drawable-hdpi-v4/cast_ic_notification_onPK!*QAr0./:res/drawable-hdpi-v4/quantum_ic_stop_grey600_48PK!*K1*EH:;res/drawable-hdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.pngPK!*OOMH&@res/drawable-hdpi-v4/permission_cookiePK!*%:.Ares/drawable-hdpi-v4/ic_fast_rewind_white_36dpPK!*rA>0 Cres/drawable-hdpi-v4/ic_drag_handle_grey600_24dpPK!*? /v0Cres/drawable-hdpi-v4/ic_skip_previous_white_36dpPK!*p0]X4Dres/drawable-hdpi-v4/quantum_ic_replay_30_grey600_36PK!*f+Gres/drawable-hdpi-v4/cast_ic_notification_1PK!*Dh/Hres/drawable-hdpi-v4/ic_fast_forward_white_36dpPK!*RMC>$,Jres/drawable-hdpi-v4/ic_cast_dark_onPK!*!0Kres/drawable-hdpi-v4/quantum_ic_refresh_white_24PK!*l=@Mres/drawable-hdpi-v4/abc_scrubber_control_to_pressed_mtrl_000PK!*H|><*DNres/drawable-hdpi-v4/modern_toolbar_shadowPK!*z2Nres/drawable-hdpi-v4/quantum_ic_replay_30_white_24PK!*.,(Pres/drawable-hdpi-v4/ic_media_stop_lightPK!*z=88SQres/drawable-hdpi-v4/color_picker_advanced_select_handlePK!*Wą$Tres/drawable-hdpi-v4/btn_star_filledPK!*0M7Vres/drawable-hdpi-v4/quantum_ic_bigtop_updates_white_24PK!*&( mh27Yres/drawable-hdpi-v4/quantum_ic_replay_10_white_24PK!*P-[res/drawable-hdpi-v4/ic_menu_share_holo_lightPK!*EL.x\res/drawable-hdpi-v4/ic_volume_up_grey600_24dpPK!*+)]res/drawable-hdpi-v4/exclamation_trianglePK!*H`|(I_res/drawable-hdpi-v4/omnibox_https_validPK!*@`< `res/drawable-hdpi-v4/abc_cab_background_top_mtrl_alpha.9.pngPK!*3.ares/drawable-hdpi-v4/common_full_open_on_phonePK!*9-cres/drawable-hdpi-v4/quantum_ic_closed_caption_grey600_36PK!*cB~!dres/drawable-hdpi-v4/settings_cogPK!*6eres/drawable-hdpi-v4/abc_switch_track_mtrl_alpha.9.pngPK!*DOL&gres/drawable-hdpi-v4/ic_business_smallPK!*&}ԡ3hres/drawable-hdpi-v4/ic_mr_button_disconnected_darkPK!*s}Njres/drawable-hdpi-v4/btn_closePK!*e9/*3kres/drawable-hdpi-v4/ic_vol_type_speaker_group_darkPK!*xdiOHmres/drawable-hdpi-v4/common_google_signin_btn_icon_dark_normal_background.9.pngPK!*9S7[V3pres/drawable-hdpi-v4/quantum_ic_forward_30_white_36PK!*Rk7hsres/drawable-hdpi-v4/quantum_ic_closed_caption_white_36PK!*&N"tres/drawable-hdpi-v4/ic_vol_unmutePK!*IX +vres/drawable-hdpi-v4/cast_ic_notification_2PK!*$#d5j6Cwres/drawable-hdpi-v4/abc_list_divider_mtrl_alpha.9.pngPK!*J=xres/drawable-hdpi-v4/cast_abc_scrubber_control_off_mtrl_alphaPK!*) q-(-yres/drawable-hdpi-v4/ic_vol_type_speaker_darkPK!*44%(zres/drawable-hdpi-v4/cast_playing_squarePK!*U3-}res/drawable-hdpi-v4/ic_play_arrow_white_24dpPK!*{Asoj)~res/drawable-hdpi-v4/ic_delete_white_24dpPK!*c:ql-~res/drawable-hdpi-v4/ic_arrow_back_white_24dpPK!*͔;GBJres/drawable-hdpi-v4/star_greenPK!*\x[7ށres/drawable-hdpi-v4/abc_tab_indicator_mtrl_alpha.9.pngPK!*J8Ăres/drawable-hdpi-v4/abc_scrubber_control_off_mtrl_alphaPK!*{̛/˃res/drawable-hdpi-v4/top_round_foreground.9.pngPK!*P(+res/drawable-hdpi-v4/infobar_blocked_popupsPK!*?|t|=׆res/drawable-hdpi-v4/abc_textfield_activated_mtrl_alpha.9.pngPK!*lz|0res/drawable-hdpi-v4/ic_mr_button_disabled_lightPK!* yY20(res/drawable-hdpi-v4/ic_media_pause_darkPK!* ʒKH0%res/drawable-hdpi-v4/quantum_ic_pause_grey600_36PK!*g109YT5Ίres/drawable-hdpi-v4/quantum_ic_forward_30_grey600_36PK!*.res/drawable-hdpi-v4/googleg_standard_color_18PK!*.`,(res/drawable-hdpi-v4/infobar_downloadingPK!*w*res/drawable-hdpi-v4/ic_refresh_white_36dpPK!* ~ !res/drawable-hdpi-v4/omnibox_infoPK!*%+res/drawable-hdpi-v4/ic_check_googblue_24dpPK!*T=85res/drawable-hdpi-v4/cast_ic_stop_circle_filled_whitePK!*1res/drawable-hdpi-v4/abc_btn_radio_to_on_mtrl_015PK!*,1res/drawable-hdpi-v4/notification_bg_normal.9.pngPK!*D7o)};res/drawable-hdpi-v4/abc_textfield_default_mtrl_alpha.9.pngPK!*)K tres/drawable-hdpi-v4/google_playPK!*F:res/drawable-hdpi-v4/abc_scrubber_primary_mtrl_alpha.9.pngPK!* 9EOres/drawable-hdpi-v4/common_google_signin_btn_text_dark_normal_background.9.pngPK!*< (kres/drawable-hdpi-v4/ic_checked_checkboxPK!*vԽ5βres/drawable-hdpi-v4/quantum_ic_play_arrow_grey600_36PK!*v.res/drawable-hdpi-v4/infobar_translate_compactPK!*Vk 3.(_res/drawable-hdpi-v4/ic_share_white_24dpPK!*t5{v<res/drawable-hdpi-v4/quantum_ic_keyboard_arrow_down_white_36PK!*X&[;ͻres/drawable-hdpi-v4/quantum_ic_play_circle_filled_white_36PK!*@\3ӽres/drawable-hdpi-v4/quantum_ic_forward_30_white_24PK!*D *˿res/drawable-hdpi-v4/ic_unchecked_checkboxPK!*]@!4res/drawable-hdpi-v4/icon_webviewPK!*FTՏ(dres/drawable-hdpi-v4/ic_vol_type_tv_darkPK!*eRMIres/drawable-hdpi-v4/star_grayPK!*$)res/drawable-hdpi-v4/ic_dialog_close_darkPK!*<~10'res/drawable-hdpi-v4/infobar_shadow_topPK!* 7eres/drawable-hdpi-v4/abc_ab_share_pack_mtrl_alpha.9.pngPK!*??:)mres/drawable-hdpi-v4/audio_playing_squarePK!*h 6res/drawable-hdpi-v4/quantum_ic_skip_previous_white_24PK!*}><'res/drawable-hdpi-v4/ic_stop_white_36dpPK!*a5?<(res/drawable-hdpi-v4/ic_pause_white_24dpPK!*j72& res/drawable-hdpi-v4/ic_mr_button_greyPK!*!*res/drawable-hdpi-v4/ic_refresh_white_24dpPK!*0sm.4$res/drawable-hdpi-v4/quantum_ic_skip_next_grey600_36PK!*4Ares/drawable-hdpi-v4/ic_chromePK!*ξ*Xres/drawable-hdpi-v4/permission_javascriptPK!*ԍSP(5res/drawable-hdpi-v4/ic_folder_blue_24dpPK!*lӥ3=res/drawable-hdpi-v4/abc_scrubber_control_to_pressed_mtrl_005PK!*F7r5&res/drawable-hdpi-v4/abc_text_select_handle_left_mtrlPK!*OQLBres/drawable-hdpi-v4/amp_iconPK!*<)t-(.res/drawable-hdpi-v4/ic_vol_type_speaker_lightPK!*X?gres/drawable-hdpi-v4/abc_list_selector_disabled_holo_dark.9.pngPK!*'_Z2hres/drawable-hdpi-v4/quantum_ic_replay_30_white_36PK!*F?'res/drawable-hdpi-v4/cast_abc_scrubber_primary_mtrl_alpha.9.pngPK!*j0 res/drawable-hdpi-v4/ic_notification_media_routePK!*X50/Kres/drawable-hdpi-v4/quantum_ic_replay_white_24PK!* R/res/drawable-hdpi-v4/omnibox_not_secure_warningPK!*axˡ6res/drawable-hdpi-v4/abc_text_select_handle_right_mtrlPK!**eb2res/drawable-hdpi-v4/ic_more_vert_24dp_on_light_bgPK!*0F(res/drawable-hdpi-v4/ic_audiotrack_lightPK!*s*res/drawable-hdpi-v4/ic_dialog_close_lightPK!*j@"res/drawable-hdpi-v4/audio_playingPK!*.res/drawable-hdpi-v4/infobar_shadow_left.9.pngPK!*aHӑz5res/drawable-hdpi-v4/abc_list_pressed_holo_dark.9.pngPK!*PKV[Vres/drawable-hdpi-v4/web_assetPK!*0.'res/drawable-hdpi-v4/ic_media_stop_darkPK!*okf>res/drawable-hdpi-v4/quantum_ic_pause_circle_filled_grey600_36PK!*S0XPres/drawable-hdpi-v4/common_google_signin_btn_icon_light_normal_background.9.pngPK!*a5?<.res/drawable-hdpi-v4/quantum_ic_pause_white_24PK!*ՅQN'res/drawable-hdpi-v4/settings_all_sitesPK!*,+&$res/drawable-hdpi-v4/btn_delete_24dpPK!* M0=res/drawable-hdpi-v4/abc_list_focused_holo.9.pngPK!*Og+=res/drawable-hdpi-v4/top_round_shadow.9.pngPK!*Y:-res/drawable-hdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.pngPK!*"g-@ res/drawable-hdpi-v4/quantum_ic_cast_white_36PK!*hp'` res/drawable-hdpi-v4/ic_audiotrack_darkPK!*A!N res/drawable-hdpi-v4/webrtc_audioPK!*lBres/drawable-hdpi-v4/cast_abc_scrubber_control_to_pressed_mtrl_000PK!*LVE@.res/drawable-hdpi-v4/googleg_disabled_color_18PK!*#%KKH(Nres/drawable-hdpi-v4/ic_pause_white_36dpPK!*2"MH/res/drawable-hdpi-v4/permission_background_syncPK!*fZ2res/drawable-hdpi-v4/quantum_ic_skip_next_white_24PK!*ُGkf7res/drawable-hdpi-v4/quantum_ic_cast_connected_white_24PK!*=/Xres/drawable-hdpi-v4/ic_mr_button_disabled_darkPK!*/}4Bres/drawable-hdpi-v4/abc_list_longpressed_holo.9.pngPK!*>Y4!res/drawable-hdpi-v4/abc_spinner_mtrl_am_alpha.9.pngPK!* ѓ@res/drawable-hdpi-v4/abc_list_selector_disabled_holo_light.9.pngPK!*~75res/drawable-hdpi-v4/notification_bg_low_normal.9.pngPK!*8UDPres/drawable-hdpi-v4/common_google_signin_btn_text_light_normal_background.9.pngPK!*8Dres/drawable-hdpi-v4/quantum_ic_skip_previous_grey600_36PK!*k4y]X7s res/drawable-hdpi-v4/cast_ic_stop_circle_filled_grey600PK!*$.5"res/drawable-hdpi-v4/quantum_ic_clear_white_24PK!*[U+2#res/drawable-hdpi-v4/cast_ic_notification_0PK!*8uql3d$res/drawable-hdpi-v4/quantum_ic_forward_10_white_24PK!*86&res/drawable-v4/quantum_ic_play_circle_filled_grey600_36PK!*:R*~3'res/drawable-v4/abc_ic_commit_search_api_mtrl_alphaPK!*E07(res/drawable-v4/quantum_ic_pause_circle_filled_white_36PK!*ݙ0.*)res/drawable-v4/quantum_ic_stop_grey600_36PK!*t3/.({*res/drawable-v4/quantum_ic_stop_white_24PK!*/+res/drawable-v4/quantum_ic_art_track_grey600_48PK!*,MH/,res/drawable-v4/ic_mr_button_disconnected_lightPK!*ӣ20$-res/drawable-v4/ic_media_pause_lightPK!*fZ-D.res/drawable-v4/quantum_ic_skip_next_white_36PK!*0./res/drawable-v4/quantum_ic_play_arrow_grey600_48PK!*A]X$30res/drawable-v4/ic_vol_type_tv_lightPK!*xByt.0res/drawable-v4/quantum_ic_play_arrow_white_24PK!*811res/drawable-v4/notification_bg_low_pressed.9.pngPK!*aB-2res/drawable-v4/quantum_ic_volume_up_white_36PK!*NGB.4res/drawable-v4/quantum_ic_volume_off_white_36PK!*瑯v=5res/drawable-v4/abc_textfield_search_default_mtrl_alpha.9.pngPK!*ؔ6res/drawable-v4/ic_vol_mutePK!* ,7res/drawable-v4/abc_btn_check_to_on_mtrl_015PK!*bv,9res/drawable-v4/abc_btn_radio_to_on_mtrl_000PK!* ht?z:res/drawable-v4/abc_textfield_search_activated_mtrl_alpha.9.pngPK!*-3[;res/drawable-v4/abc_scrubber_track_mtrl_alpha.9.pngPK!* t#?<res/drawable-v4/ic_media_play_lightPK!*h 17=res/drawable-v4/quantum_ic_skip_previous_white_36PK!*j4'>res/drawable-v4/notification_bg_normal_pressed.9.pngPK!*t<:1?res/drawable-v4/notify_panel_notification_icon_bgPK!*do=?res/drawable-v4/cast_abc_scrubber_control_to_pressed_mtrl_005PK!*oID0@res/drawable-v4/quantum_ic_volume_off_grey600_36PK!*÷&/]Bres/drawable-v4/ic_vol_type_speaker_group_lightPK!*R+R"yCres/drawable-v4/ic_media_play_darkPK!* wȩ,rDres/drawable-v4/abc_btn_check_to_on_mtrl_000PK!*4uEres/drawable-v4/abc_popup_background_mtrl_mult.9.pngPK!*>[''Hres/drawable-v4/cast_ic_notification_onPK!*oU0.*Ires/drawable-v4/quantum_ic_stop_grey600_48PK!*575@Jres/drawable-v4/abc_btn_switch_to_on_mtrl_00001.9.pngPK!*/JMres/drawable-v4/quantum_ic_replay_30_grey600_36PK!*j}&4Ores/drawable-v4/cast_ic_notification_1PK!*t+%Pres/drawable-v4/quantum_ic_refresh_white_24PK!*X~iid8QQres/drawable-v4/abc_scrubber_control_to_pressed_mtrl_000PK!*M0- Rres/drawable-v4/quantum_ic_replay_30_white_24PK!*e-,#xSres/drawable-v4/ic_media_stop_lightPK!*G5E@2Sres/drawable-v4/quantum_ic_bigtop_updates_white_24PK!*Y-Ures/drawable-v4/quantum_ic_replay_10_white_24PK!*UO7Vres/drawable-v4/abc_cab_background_top_mtrl_alpha.9.pngPK!*[4Wres/drawable-v4/quantum_ic_closed_caption_grey600_36PK!*?.D1Xres/drawable-v4/abc_switch_track_mtrl_alpha.9.pngPK!*'|MH.Zres/drawable-v4/ic_mr_button_disconnected_darkPK!*e.I\res/drawable-v4/ic_vol_type_speaker_group_darkPK!*ibJ`]res/drawable-v4/common_google_signin_btn_icon_dark_normal_background.9.pngPK!*@\._res/drawable-v4/quantum_ic_forward_30_white_36PK!*s22ares/drawable-v4/quantum_ic_closed_caption_white_36PK!*avɧbres/drawable-v4/ic_vol_unmutePK!*&cres/drawable-v4/cast_ic_notification_2PK!*$#d5j1dres/drawable-v4/abc_list_divider_mtrl_alpha.9.pngPK!* ^yt8teres/drawable-v4/cast_abc_scrubber_control_off_mtrl_alphaPK!*!(Sfres/drawable-v4/ic_vol_type_speaker_darkPK!* }z2bgres/drawable-v4/abc_tab_indicator_mtrl_alpha.9.pngPK!* ^yt3<+kres/drawable-v4/quantum_ic_pause_grey600_36PK!*[I0_lres/drawable-v4/quantum_ic_forward_30_grey600_36PK!*t)Hnres/drawable-v4/googleg_standard_color_18PK!*{0pres/drawable-v4/cast_ic_stop_circle_filled_whitePK!*-n_,qres/drawable-v4/abc_btn_radio_to_on_mtrl_015PK!*5,^sres/drawable-v4/notification_bg_normal.9.pngPK!*&ow69tres/drawable-v4/abc_textfield_default_mtrl_alpha.9.pngPK!*ry1ures/drawable-v4/abc_list_pressed_holo_light.9.pngPK!*B42+ures/drawable-v4/quantum_ic_pause_grey600_48PK!*lL2yvres/drawable-v4/abc_text_select_handle_middle_mtrlPK!*EL/wres/drawable-v4/quantum_ic_volume_up_grey600_36PK!*60yres/drawable-v4/abc_menu_hardkey_panel_mtrl_mult.9.pngPK!**>؋5l{res/drawable-v4/abc_scrubber_primary_mtrl_alpha.9.pngPK!*AgJZ|res/drawable-v4/common_google_signin_btn_text_dark_normal_background.9.pngPK!*#~res/drawable-v4/ic_checked_checkboxPK!*Rل0res/drawable-v4/quantum_ic_play_arrow_grey600_36PK!*VtO[V7̀res/drawable-v4/quantum_ic_keyboard_arrow_down_white_36PK!*'|6res/drawable-v4/quantum_ic_play_circle_filled_white_36PK!**B.res/drawable-v4/quantum_ic_forward_30_white_24PK!*eS%gres/drawable-v4/ic_unchecked_checkboxPK!*q͓_Z#sres/drawable-v4/ic_vol_type_tv_darkPK!*!$#res/drawable-v4/ic_dialog_close_darkPK!*̻ 2res/drawable-v4/abc_ab_share_pack_mtrl_alpha.9.pngPK!*[mh1res/drawable-v4/quantum_ic_skip_previous_white_24PK!*(!ƈres/drawable-v4/ic_mr_button_greyPK!*Zc/؉res/drawable-v4/quantum_ic_skip_next_grey600_36PK!*do8res/drawable-v4/abc_scrubber_control_to_pressed_mtrl_005PK!*z0res/drawable-v4/abc_text_select_handle_left_mtrlPK!*L}T)res/drawable-v4/ic_vol_type_speaker_lightPK!*ɺ:res/drawable-v4/abc_list_selector_disabled_holo_dark.9.pngPK!*z-res/drawable-v4/quantum_ic_replay_30_white_36PK!**>؋:res/drawable-v4/cast_abc_scrubber_primary_mtrl_alpha.9.pngPK!*j*~res/drawable-v4/quantum_ic_replay_white_24PK!*D}up1res/drawable-v4/abc_text_select_handle_right_mtrlPK!*c^#cres/drawable-v4/ic_audiotrack_lightPK!*Ėz%res/drawable-v4/ic_dialog_close_lightPK!*2x0res/drawable-v4/abc_list_pressed_holo_dark.9.pngPK!*l_0."res/drawable-v4/ic_media_stop_darkPK!*c9?res/drawable-v4/quantum_ic_pause_circle_filled_grey600_36PK!*,r_Kres/drawable-v4/common_google_signin_btn_icon_light_normal_background.9.pngPK!* 10)sres/drawable-v4/quantum_ic_pause_white_24PK!*+res/drawable-v4/abc_list_focused_holo.9.pngPK!*|'{,95res/drawable-v4/abc_btn_switch_to_on_mtrl_00012.9.pngPK!*b394(3res/drawable-v4/quantum_ic_cast_white_36PK!*.8gb"Ÿres/drawable-v4/ic_audiotrack_darkPK!*X~iid=yres/drawable-v4/cast_abc_scrubber_control_to_pressed_mtrl_000PK!*)Mres/drawable-v4/googleg_disabled_color_18PK!*xqoj-res/drawable-v4/quantum_ic_skip_next_white_24PK!*E82Yres/drawable-v4/quantum_ic_cast_connected_white_24PK!*+G*res/drawable-v4/ic_mr_button_disabled_darkPK!*xx|/res/drawable-v4/abc_list_longpressed_holo.9.pngPK!*NrG/res/drawable-v4/abc_spinner_mtrl_am_alpha.9.pngPK!*[w;!res/drawable-v4/abc_list_selector_disabled_holo_light.9.pngPK!*Uف0res/drawable-v4/notification_bg_low_normal.9.pngPK!*o|]bKres/drawable-v4/common_google_signin_btn_text_light_normal_background.9.pngPK!*נ3ʫres/drawable-v4/quantum_ic_skip_previous_grey600_36PK!*g92res/drawable-v4/cast_ic_stop_circle_filled_grey600PK!*!)res/drawable-v4/quantum_ic_clear_white_24PK!*&res/drawable-v4/cast_ic_notification_0PK!*qW.دres/drawable-v4/quantum_ic_forward_10_white_24PK!*tb@5res/drawable-v21/preference_list_divider_material.xmlPK!*{Fxres/drawable-v21/$transition_expand_more_expand_less_black_24dp__0.xmlPK!*tb@.gres/drawable-v21/abc_list_divider_material.xmlPK!*C3res/drawable-v21/abc_dialog_material_background.xmlPK!*1+T$]res/drawable-v21/popup_bg_tinted.xmlPK!*=;6 Brres/drawable-v21/transition_expand_more_expand_less_black_24dp.xmlPK!*2tfjFres/drawable-v21/$transition_expand_more_expand_less_black_24dp__1.xmlPK!*W=ɻres/drawable-v21/design_bottom_navigation_item_background.xmlPK!*Y(<μres/drawable-v21/abc_action_bar_item_background_material.xmlPK!*{3ҽres/drawable-v21/notification_action_background.xmlPK!*(, Bres/drawable-v21/transition_expand_less_expand_more_black_24dp.xmlPK!*1+res/drawable-v21/abc_edit_text_material.xmlPK!*HB(-res/drawable-v21/abc_btn_colored_material.xmlPK!*{F+res/drawable-v21/$transition_expand_less_expand_more_black_24dp__0.xmlPK!*q+!:^'res/drawable-v21/ic_arrow_down_24dp.xmlPK!*kFres/drawable-v21/$transition_expand_less_expand_more_black_24dp__1.xmlPK!*v04res/drawable-v23/abc_control_background_material.xmlPK!*Uln3res/drawable-v23/mtrl_popupmenu_background_dark.xmlPK!*a" =res/drawable-ldrtl-xxhdpi-v17/abc_spinner_mtrl_am_alpha.9.pngPK!*~B0res/drawable-ldrtl-xxhdpi-v4/ic_share_white_24dpPK!*- 0Xres/interpolator-v21/mtrl_linear_out_slow_in.xmlPK!*~lH0res/interpolator-v21/mtrl_fast_out_linear_in.xmlPK!*c .res/interpolator-v21/mtrl_fast_out_slow_in.xmlPK!*p;i>res/drawable-ldrtl-xxxhdpi-v17/abc_spinner_mtrl_am_alpha.9.pngPK!*򝫔'res/mipmap-mdpi-v4/shortcut_icon_shadowPK!*-50.res/drawable-ldrtl-hdpi-v4/ic_share_white_24dpPK!*<4a 8LauU':P  Kܢw#bDIRMfR]Zrmg{LL-e߳zo{ief2 |ݰ]1/&]A8wv7BefN` R;ǰ|<(зӇoeǒ \_J$?1Q }lvDRљcU(+ Y=F?Xf[v˶ed+\s$5*żh{?ք=烌ń\$pjwb56O%->w'85,sC孼!sHhoJҊ5X^5{3BX.50900 n0  *H 01 0 UUS10U California10U Mountain View10U Android10U Android10UAndroid1"0  *H  android@android.com0 080229013346Z 350717013346Z01 0 UUS10U California10U Mountain View10U Android10U Android10UAndroid1"0  *H  android@android.com0 0  *H  0֓ $b%>>l輨kxn l5Y>wC=KdVg0xCLrF!8N¾8Ϗ0ЧJP" P2j3Y榔,򄠤fz;1 :g7./dnmBX Dlø$XH%dOޘ(wHgjT TȻGU3ko̎iȢЎx& ?r}<rߛ8[j00UHYV=',Ft ʌ0U#0HYV=',Ft ʌ01 0 UUS10U California10U Mountain View10U Android10U Android10UAndroid1"0  *H  android@android.com n0 U00  *H zPAQګ[vZ'´O" Z-rl inݮ)E,K~~, NSU$V"@-uZB`S]41$"F6,*^0j/b-'`;,T |6BqRx^#~D10yU#BZ@7@"Za{IO Lԙ8jߑHNm}/I y |7 @m:֥.ks kS1ܥFd[;0#Pnm,fRN{4et{ί !9<ި33(y>Zbct=QZ1?NP&dz+?={HdnU~ʯuKmjzM=t}۬(yE&˶l֖"ߐ>c6w铫j=);7%ڠbd-eU|-ۚus.o?Ga+= n.?f|jؕpZ𻓫cr~g-Ga&\Vc+׳Vr5MAYb\G'PKʔgPKmZT+org.bitbucket.tickytacky.mirrormirror_1.apkYuTU۷t DRݝF$)[{W}73Ysͽ7s@EETއ\ +"$%',+$'%.Cq[x}I Dey,t"uMvl2''3? A_`'Qӝ*፥S]8lz@w;VEli%J =nmqSly8]IGHQѠi]yK'޷Yai;kIզ! rbNlQM*Uw.~4"\ɣNfUbS-xp-eAK5E"p[Sh`xĈc$7HGd#Io6 `ԟTcA#7X88Y@6÷ -5w G9=GvL^|mH~qg7}B\7vʬNܗO m4Jӥb'/c2ҍ\3L'K_2\2{Ms fCVXSTӑ^\"{߿U\MxOĺ@َ:Zb}Й{mN^a!Ӂ ABhvӰ{ZD *dP̲='!PW8Gg\1,Ȑ9Gwocs$~Q_"!c,jan2r`ejLGD |pנBwmj.x'b~y~Wf{ix&,7ZA2lC*{uJ!LJX}ftU[[&UIF@[G75铝[tΌ`gK7h478L/mG%4z`E^Oնs$oޝ[>_k_&ІM ji^:bFvW8Aw:͐f/<#Ж;o0"6d=c6R>BͩpbY+ZZc,3g|+}vJϲYb^yĄlNk$DImJ́ v 6<|n:NfΆd({OٺeןƓ.婖}޷좞=y4FQe!M;vdٍFnUK~zh[aVg"5-/KEy>N +s8ܲ>X w]H\txV KˊVR1ΓsTUTn6){VHv4l:)ƙȜ av{7^;t}z<|\np.]z\wv^ ZfdRa9;ܖ?edžh] XI%|7u`6t892Zڂ\m1 B$$,f\Ks1юӊ2zPfgZѓY\-IEb# V0g}ʭ[F~k !&MDe 2Xgꬮy NqzY UFHm#kP<n}f6wyT ߲ )f/\bj00`wrόk xvٚC,Md m-Lo i|li M|RҨpIԶ >gM䷶, Vz(-EH Čİl .T\{: o*ҏIY_߫ke8GE(iY:'nD>FsI]1p 9Kp>/[ZRcQ_-GPDsSaSq{8qdh1 n"F _|uӪWK ϮfsS֙B'սYnn-󝹏U$칄sm(^x>up(hӛ䥜YwrTa16E19,l$+R{a3Iz˫TsbDFaE,Ҽ7ڕ݀˸jK5aJrJJ8~Bl̩u)nssYGSmS%G.52I|s/L)F)*o1DQ쎶ȦHZ y4[4S1UK-51OފRH,o6EbA<[2R6[V8SH#`/RN*L.A#?+>Hf *l-@: l:%%)k-oQK HvvݛxoґZ+D==E,YRbr~ qLh`=MQֆ`bʚL{tkBcsKnY0~\3I4ue펫|0A*6DUps)Iq%crls/ESq0_**|1> 9^@Abǜ-JEYmU6{y|RHEWd/*@Nxb`|ÂFPR!|Wfj/cSUץ wUUNF4ʫLHMQ;F3orm=JD۬%ЄztV}z}(rrM/ceLO*pƽpȢ0u>( wUy/3GM2[n#hFgrxw]3 =`e7K(NfoSbԘt. Vaq XLssTNlqF:o,ߋêw l^[!yX)ylØi=1{'XA4@635JfR =άNwͭ!{59ZZ[%7ONj:nBSזF24UKC˪켦qG>x0lswc 8"K„ʹsk-+I{x ߚ'ɐK kp=;#qOdo OӐ5W-UM۔gedCPnP+GXaǧ d_)Dr`AXz]C&0۱Z`7p|VBrvjң_Ƃ{GKwYt\f;j$-!:U mic|m9 ׁwXh/;>P7ZGo#eNF[i{<8S9V #sL s}m+r>!` ]yOS h5/z6tW{ӕ(H+ gxd9&\f5ġޢϋ䉍95ǂyA Vnwjّ$Fy omm_! iU ™7- oCHEbGn}GDhܒnIt:|DHõRS@!iVk`X+_lbq$|4(˦}ڗVef,g969ѿ U-.w {SK؊V6D~uNes$1H$~@k`fK(78<A`9᭺ '>3vH;)U0VbFw#63K"?NE"rMI*v=Gg\FAL긑&vh ~J WH yEM'~o(H}lxM1|J%z.Pxm?`u=:3^;27< ͌!7H{WP `8x?*;0?r3ğF_~)@-:o[ٟmc_W?>H /g0_TPK7[cPKmZT5/META-INF/52ED4B12.SF]n@$6t-x!qEBP` 0qO_bmj9999E`(EnHME!E .ׅd -p, lN9Ճ!%͌L/dp/닂n<0pRREzQp` vT_!a0loGyUtښ8<2?7su;e|'JyTq\8C0ɏ?Ƀu'naK53ߡ3yM"VT4?:ڞUʑٻPooPKmZTqMETA-INF/52ED4B12.RSA3hbejhδ%Π%ѐۀUIqAS&M'03121e W Ԣh(`-Rb 4(,R_h 'kdd`bdahhdhj%kbi`ih cDŌ M @q.&FFG?x/[}/~t=Gٝ>{4 MԬ&wIy4ͤ[.%?4/ଔBウZΰJ{{i._>i N<,}RO9ԬeE\ΗrLwVLszAo趓~ )%nf6ⷷ&?V1X܈ۺi eS{g'K5o˵ϧ0 (b9JE#ׯ,鸺t73#bEyY`򱈱* δe[Ƚ\-Aa7b[sEzڙeSm.W}gٚm+ޥڌdsݸ&֌;aՇ͂UTSܜYz/3H=]qiOvjk7kғzcv؉kR\b͓˸[{jvv*g*9'=).9mF[qZ)ǭ_7C^K*/)Xu\vA;7Z.5ucO|p,NCdz _'p6ھ1W :Vze*s!b,Rw dld.tt1}N.Ya~<|\R O[^7?#TOwsޅgm|X O$l^L_GMG*mf,IS>նݻ1 )DrÅ]/pYM)őPKmZT[ODMETA-INF/MANIFEST.MF]Ao0; ;)31^Z:-E~d[2='_"RMR"$̷\05 ӈPE|k2i]],ɚC[$#|yY\ a]|wp$dDo 'QyK1>Yy7{.rp((.ztEN ؋ ~ "y+!xOn7gq_;Ysy֧ { qso1,( {`kUJoֽƵ1)rp00ɠ_S0  *H  0!10U F-Droid1 0 Usova0 220428112157Z 490913112157Z0!10U F-Droid1 0 Usova0"0  *H 0 \P$?A,ϻkB5Pf6|mb'n)6cS6sEXpOoߙU:ԇ]aԾvd'%pWf l2|+7 m ܪf@.7[N5pj"aˁKYKz0V*'S(X- ?B0Kkc3.DddW'xpD6CZC׮ tդu!00U]#TOQgڱոm}0  *H  8r.+ivue>$ۙ"2Awo`βm>eC\Fǫ2 i@ /xZ@kJ-#p(7HA9빳~e]6;v^t 27o3sct8   j{u1q/MsR-HQ-*[!_ ptaǭF5x*0Dy ï_>v97JVbڦ=O>+[iLqV ɬPwa Q4_WxV kKPFA q۰g '#ril~?}ElhIr$HUv] x_6* /&0"0  *H 0 \P$?A,ϻkB5Pf6|mb'n)6cS6sEXpOoߙU:ԇ]aԾvd'%pWf l2|+7 m ܪf@.7[N5pj"aˁKYKz0V*'S(X- ?B0Kkc3.DddW'xpD6CZC׮ tդu{hSso),( {`kUJoֽƵ1)rp00ɠ_S0  *H  0!10U F-Droid1 0 Usova0 220428112157Z 490913112157Z0!10U F-Droid1 0 Usova0"0  *H 0 \P$?A,ϻkB5Pf6|mb'n)6cS6sEXpOoߙU:ԇ]aԾvd'%pWf l2|+7 m ܪf@.7[N5pj"aˁKYKz0V*'S(X- ?B0Kkc3.DddW'xpD6CZC׮ tդu!00U]#TOQgڱոm}0  *H  8r.+ivue>$ۙ"2Awo`βm>eC\Fǫ2 i@ /xZ@kJ-#p(7HA9빳~e]6;v^t 27o3sct8 PIS@SrŲ1LjRjHN{ n,IDƔH (~B١MJ6Q- 1I6ݴ=04 BjHd&H@Ik" <+LS<~͔:4+V'rKfBr/ 3H1kL@=Hm Y?Q*u B7,lJYW5 eϨNR6y6`ҸC&0"0  *H 0 \P$?A,ϻkB5Pf6|mb'n)6cS6sEXpOoߙU:ԇ]aԾvd'%pWf l2|+7 m ܪf@.7[N5pj"aˁKYKz0V*'S(X- ?B0Kkc3.DddW'xpD6CZC׮ tդuwerBAPK Sig Block 42PKmZT|o classes.dexPK mZT3TTresources.arscPKmZTʔgeAndroidManifest.xmlPKmZT7[c+zorg.bitbucket.tickytacky.mirrormirror_1.apkPKmZT5/zMETA-INF/52ED4B12.SFPKmZTq META-INF/52ED4B12.RSAPKmZT[OD!%META-INF/MANIFEST.MFPK@././@PaxHeader0000000000000000000000000000017300000000000010216 xustar00101 path=fdroidserver-2.4.0/tests/bad-unicode-πÇÇ现代通用字-български-عربي1.apk 22 mtime=1732039740.0 fdroidserver-2.4.0/tests/bad-unicode-????????-?????????-????1.apk0000644000175000017500000002631714717152074021714 0ustar00hanshansPKAHDy+AndroidManifest.xmlKo[UNbHqrc'~\ǏѴ@*iEҰp:džU5kKuP5 ?ss=gwf{sDũ&*Sv#; t Qաcg/T݀ЗЏ?D( }5o("jA'/Sw(2D ݅c 4!\R5ۂ[*^cȱ Ft^Ѡ7)kwUWA}M>TOsI֐j+?DS>g t[ZgglgTC̾t%v.9RV*{݃&}9ޣ RUDa))k*S 5VUs h:xlU#%J K#!);΁k >K^bgv]vOyW]ki׶yx,3¥C_>ۈڢ눋C(#t*AGnci\G &]U>uӸ;6-vb߆T|F0їsf̌qazN4#f|Gs}G$߈& 'Lq9Cr BI(-CYbs~=z75;*C7$}d9Dbs?(xAՉk΋-b57!yTgǤhylJ,^cu7uSFP[cCo;n ([c0Ѝ?"܏zcTcϺ󉋏K¾njx57'9gy IMm^r֜6탷 7m|b^GKh<3;r- oIl|$Ŗ֘7X}>7)%oi-uߺoYx/i-w*"gy<^XxxE5^+Wxe˳sxFz+;gxwooa^PKDy+PK AH=-res/drawable/ic_launcher.pngPNG  IHDRw=LIDATHǥyPuƟ{².˲ 8ႈ 628yr OCM5V^ʡbY"0,,{DPXϟ>ߋ4zљp a22x@-q &6'xnب4Ռs-<!a^zD\W6=YMQ2ɗw|՟-f̶vJA؜s1Ym®n>/]ҹr8୔@(r1.}j:Oi> DowJ'CRRVJ eMPy|{|7sRNQy(KNnቹM{p՝Ғ6Q:h++-LxȄsՆIT~M≹\{V{TTX@vL (Ćyq]zAnBFZmHocs  Çd6ihh CCfQ!j2OPSեlUY G?15t"GUˢy*(M6\$""DJiujdo5GcF^G"@ Vx\|T$SgOt ::erOK\]Ϟb¶hӫnZ>5^7 S~6B3Щb#RجJ[ =64%1N ('5+٥bvTD%W< `y*VnJK6͵[h8l3PA$M;QZ1[,U3|.nlIuG2 3 eb2V'0`ę&Uڂg ,.!蒎Q1 F|UJvuӆaL06 cLzN׎zXYٹLGBr8#0LmMOS7onDVv͞} DLژ.C{e 󳵴&cY,ZKSiZ=I`҇6%]Nm},ŅU5SN܈mݷ<65}E޷'0CקԄf.̙3;EnK=_d*/r.Ѵ#>)?/Ԟ H\o7aU%(|${hjǜIL~ cS/LҘPPX"1sgsLuP!!"@&849^1|'3}ȕs_-]$IVM1,,D-aEDA̤rIENDB`PKAHS Lres/layout/activity_main.xmluN@=[$BHA"5%$ 'Ql*x$ G;es;wofw} ƘMCt- G«& 99w%fmF)B[nTχUПg!F$~"u.m*~RUx:R}o{EO١R3~`)6d?Tޟ#]{ȣ>64u6Z?p̑?gqդ~,ᛙPKS LPK AHresources.arsc (0<xres/drawable/ic_launcher.pngres/layout/activity_main.xml&urzip-sNIl(uW[-1J;30@A:8-91(J1234Settings Hello world! info.guardianproject.urzip l, 0attrdrawablelayoutstring08Ln ic_launcher activity_mainapp_nameaction_settings hello_worldH\L4H\L4HT4 PKAHl/cH classes.dex l[uw//)R$u%YCuEKÎءؖe[$JM]җ,AdnlA IF!q [[lٖaڵCVt]6 {tV[tE =H]+[ ?=,8K۷Ro}>yDc]/Vh6RKDHڇAH'Z efS81GWYQ3&ʁ*8.'wOh%j :9$x;S)(x|ִ_?yp |:{ ypg_Ou$`l[$8 yp | *x5[=pSh d@]`Lx< /??p( @.U 9023CnpS`Ti[7߀8(&ʂ.N 5m` u`=6!OF(6] vN$~|E_b*ГJ:i*u]|Ry;Ji*O O^eoSuU!S<*ƽN\ֻO(/`з}o@PNϺ>%U~ʔ^9-*檗EstTGRLjX*y !b!!WżtFi|1FBjdtMDdDCFhA'>+J|}r-JJ*٦$JhZ2d BfBv)igW?,d2Ag, N䧕|N(߉CBaO){ qm=Mc:B&F)eqvD՘~T=|_2I)ּlU2Aϊ}8kdĹ#Dgl"ܣa%%eB! _ӻ%Ϗ`ݼn/U&m0 K]rh]ҷ q%ώyHϟ;!sV?m|{"SK@@}KuXt93< ߀MF쪨 mK!bvn/+ /$|T)j8~v~{1<&Qde”4-n޷WD|\щ{UQnΜB2Xek=nvG6 :+5+a6۵wF3`;ɀ&R>⡡ό^-jc͑ۅ^ BۃҞ9wd,-|s'ޣPyn c9ebbx?%0-j-W0`|J5}ZOF o'ge)i)3H]{j-֬."1=b"?B]r{fLL2T͆=&|xK> k=EQ10n6VM.ֻuڴҙ65c+VHY~pELFGVc]O"N\U JnTr@Jz.ae"Rv|w z?b}@h ZU lUKib#İw[Ůؙ'sO-JiwnhSY^j]u[ כIcS|[t,g۳"ixrEl $$1&69MWKna.Gv[t>[W"O TG;%qPTJ͘TEe۷VTj*UE~$V7&cXcXɃ\@xڌr!RS$w5bB]L OfE(.83M"p)\+x[$c.0B`v 4 6Q Q$ɿ0HD:e:Sgei]ܱ۟f΃:]X\aXX۵Fހ #4ĸ>^Ft$Kq+vfszYEnyNgK'YzR6ԵG٦~ C;HS,qHa=;iݸֱ' c ,=1ƽaCukV.mHruxouag6I;(C1 S M>CPDuηdӄ8y BBp=Zw7:L'% "c"2RQ <ڟ Gr$Z `% h(`$z27PF(D7%L?BB?9`{O{SA8 O'< -5j_9Axw6G8,8 b @0hvS'^w1m6]:e5DKOܹԎ< <{&B;Leoέj,9x";$s$>檊^=֛V_s\Ξ+磨vWb,"9 0#|l~⥝݃eͿyg4`HpA__)uV0icၬ7]ئ1_ >cv)i*c2>ұ,ChJi 7a _^kmv$*eǒzNPIc*1 clpIV@Iq0&s8mFJg]:Ψ^[F,t$M -~0ٕQ^hk5qHLw1[~q1{}=t1w' C+EjUʯ,wG7Z!6g[1K;co;pm(['}Ȟ}*nY=2p)[Y7"kdc .!.LiL 0 BouL#X#|1⚍,>0@TvVʪ ;(lZZ#ӺW7l+>c o"<VzezJ(qeo9/ ")oxlxv ~7FF>[_CR g5(&hL:g3igit@ڦ ݴ鞶QI۰ujaL8)gNTd3VhGkmrqA|۾tPc!\J*L1W_cǥ`ޑ! _JJ?ubC# ϝ;.NN&FP4~R! s>#g07e?amʺb}.Za"V1Mwgۥɤ_>uKZaOnMAgI5x\Ķ_(˖Ïeuwnd^:v(Tzg˨ <'Ee;t)]#gw5/]5|iFg~[dS7PK^ uPKAHDy+AndroidManifest.xmlPK AH=-res/drawable/ic_launcher.pngPKAHS L res/layout/activity_main.xmlPK AH resources.arscPKAHl/cH Pclasses.dexPKAH/%t/ META-INF/MANIFEST.MFPKAHr5!META-INF/CERT.SFPKAH^ u"META-INF/CERT.RSAPK *././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2081861 fdroidserver-2.4.0/tests/build/0000755000175000017500000000000014770510164015165 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2921872 fdroidserver-2.4.0/tests/build/info.guardianproject.urzip/0000755000175000017500000000000014770510164022450 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/tests/build/info.guardianproject.urzip/.fdroid.yml0000644000175000017500000000015214770502071024514 0ustar00hanshansSummary: This should be overridden by metadata/info.guardianproject.urzip.yml Builds: - versionCode: 50 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2441866 fdroidserver-2.4.0/tests/build-tools/0000755000175000017500000000000014770510164016323 5ustar00hanshans././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2481866 fdroidserver-2.4.0/tests/build-tools/17.0.0/0000755000175000017500000000000014770510164017046 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/17.0.0/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001411514717152070025107 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission:'android.permission.ACCESS_NETWORK_STATE' uses-permission:'android.permission.CALL_PHONE' uses-permission:'android.permission.READ_CONTACTS' uses-permission:'android.permission.READ_SMS' uses-permission:'android.permission.READ_PHONE_STATE' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' uses-permission:'android.permission.RECEIVE_MMS' uses-permission:'android.permission.RECEIVE_SMS' uses-permission:'android.permission.SEND_SMS' uses-permission:'android.permission.WAKE_LOCK' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-permission:'android.permission.WRITE_SMS' uses-permission:'com.android.vending.BILLING' uses-permission:'android.permission.INTERNET' uses-permission:'com.sec.android.provider.badge.permission.READ' uses-permission:'com.sec.android.provider.badge.permission.WRITE' uses-permission:'com.htc.launcher.permission.READ_SETTINGS' uses-permission:'com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission:'com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission:'com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission:'com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission:'com.majeur.launcher.permission.UPDATE_BADGE' uses-permission:'com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission:'com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission:'com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission:'android.permission.READ_APP_BADGE' uses-permission:'com.oppo.launcher.permission.READ_SETTINGS' uses-permission:'com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission:'me.everything.badger.permission.BADGE_COUNT_READ' uses-permission:'me.everything.badger.permission.BADGE_COUNT_WRITE' application-label:'QKSMS' application-label-da:'QKSMS' application-label-fa:'QKSMS' application-label-ja:'QKSMS' application-label-de:'QKSMS' application-label-ne:'QKSMS' application-label-th:'QKSMS' application-label-zh:'QKSMS' application-label-fi:'QKSMS' application-label-hi:'QKSMS' application-label-vi:'QKSMS' application-label-sk:'QKSMS' application-label-uk:'QKSMS' application-label-nl:'QKSMS' application-label-pl:'QKSMS' application-label-tl:'QKSMS' application-label-bn:'QKSMS' application-label-in:'QKSMS' application-label-ko:'QKSMS' application-label-no:'QKSMS' application-label-ro:'QKSMS' application-label-ar:'QKSMS' application-label-fr:'QKSMS' application-label-hr:'QKSMS' application-label-sr:'QKSMS' application-label-tr:'QKSMS' application-label-ur:'QKSMS' application-label-cs:'QKSMS' application-label-es:'QKSMS' application-label-it:'QKSMS' application-label-lt:'QKSMS' application-label-pt:'QKSMS' application-label-hu:'QKSMS' application-label-ru:'QKSMS' application-label-sv:'QKSMS' application-label-iw:'QKSMS' application-label-zh_CN:'QKSMS' application-label-pt_BR:'QKSMS' application-label-ca:'QKSMS' application-label-ka:'QKSMS' application-label-pa:'QKSMS' application-label-ta:'QKSMS' application-label-nb:'QKSMS' application-label-be:'QKSMS' application-label-te:'QKSMS' application-label-af:'QKSMS' application-label-bg:'QKSMS' application-label-si:'QKSMS' application-label-kk:'QKSMS' application-label-mk:'QKSMS' application-label-el:'QKSMS' application-label-gl:'QKSMS' application-label-ml:'QKSMS' application-label-sl:'QKSMS' application-label-am:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-mn:'QKSMS' application-label-lo:'QKSMS' application-label-sq:'QKSMS' application-label-mr:'QKSMS' application-label-or:'QKSMS' application-label-as:'QKSMS' application-label-bs:'QKSMS' application-label-is:'QKSMS' application-label-ms:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-gu:'QKSMS' application-label-zu:'QKSMS' application-label-lv:'QKSMS' application-label-sw:'QKSMS' application-label-hy:'QKSMS' application-label-ky:'QKSMS' application-label-my:'QKSMS' application-label-az:'QKSMS' application-label-uz:'QKSMS' application-label-en_CA:'QKSMS' application-label-fr_CA:'QKSMS' application-label-en_GB:'QKSMS' application-label-en_XC:'QKSMS' application-label-zh_HK:'QKSMS' application-label-en_IN:'QKSMS' application-label-es_US:'QKSMS' application-label-pt_PT:'QKSMS' application-label-en_AU:'QKSMS' application-label-zh_TW:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission:'android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE','requested WRITE_EXTERNAL_STORAGE' uses-feature:'android.hardware.telephony' uses-implied-feature:'android.hardware.telephony','requested a telephony-related permission or feature' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main app-widget other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'da' 'fa' 'ja' 'de' 'ne' 'th' 'zh' 'fi' 'hi' 'vi' 'sk' 'uk' 'nl' 'pl' 'tl' 'bn' 'in' 'ko' 'no' 'ro' 'ar' 'fr' 'hr' 'sr' 'tr' 'ur' 'cs' 'es' 'it' 'lt' 'pt' 'hu' 'ru' 'sv' 'iw' 'zh_CN' 'pt_BR' 'ca' 'ka' 'pa' 'ta' 'nb' 'be' 'te' 'af' 'bg' 'si' 'kk' 'mk' 'el' 'gl' 'ml' 'sl' 'am' 'km' 'kn' 'mn' 'lo' 'sq' 'mr' 'or' 'as' 'bs' 'is' 'ms' 'et' 'eu' 'gu' 'zu' 'lv' 'sw' 'hy' 'ky' 'my' 'az' 'uz' 'en_CA' 'fr_CA' 'en_GB' 'en_XC' 'zh_HK' 'en_IN' 'es_US' 'pt_PT' 'en_AU' 'zh_TW' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/17.0.0/aapt-output-com.politedroid_3.txt0000644000175000017500000000245614717152070025413 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' sdkVersion:'3' uses-permission:'android.permission.READ_CALENDAR' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.WRITE_EXTERNAL_STORAGE','targetSdkVersion < 4' uses-permission:'android.permission.READ_PHONE_STATE' uses-implied-permission:'android.permission.READ_PHONE_STATE','targetSdkVersion < 4' uses-permission:'android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE','requested WRITE_EXTERNAL_STORAGE' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/17.0.0/aapt-output-com.politedroid_4.txt0000644000175000017500000000245614717152070025414 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' sdkVersion:'3' uses-permission:'android.permission.READ_CALENDAR' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.WRITE_EXTERNAL_STORAGE','targetSdkVersion < 4' uses-permission:'android.permission.READ_PHONE_STATE' uses-implied-permission:'android.permission.READ_PHONE_STATE','targetSdkVersion < 4' uses-permission:'android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE','requested WRITE_EXTERNAL_STORAGE' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/17.0.0/aapt-output-com.politedroid_5.txt0000644000175000017500000000163114717152070025407 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' sdkVersion:'3' targetSdkVersion:'10' uses-permission:'android.permission.READ_CALENDAR' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/17.0.0/aapt-output-com.politedroid_6.txt0000644000175000017500000000165114717152070025412 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' sdkVersion:'14' targetSdkVersion:'21' uses-permission:'android.permission.READ_CALENDAR' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/17.0.0/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000264214717152070027560 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' sdkVersion:'18' targetSdkVersion:'27' uses-permission:'android.permission.INTERNET' uses-permission:'android.permission.ACCESS_NETWORK_STATE' uses-permission:'android.permission.ACCESS_WIFI_STATE' uses-permission:'android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission:'android.permission.INTERNET' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-feature-not-required:'android.software.leanback' uses-feature-not-required:'android.hardware.touchscreen' application-label:'Duplicate Permisssions' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='Duplicate Permisssions' icon='res/drawable/ic_launcher.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission:'android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE','requested WRITE_EXTERNAL_STORAGE' uses-feature:'android.hardware.wifi' uses-implied-feature:'android.hardware.wifi','requested android.permission.ACCESS_WIFI_STATE, android.permission.CHANGE_WIFI_STATE, or android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/17.0.0/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000152014717152070027730 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/17.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000117314717152070030045 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' sdkVersion:'24' targetSdkVersion:'25' uses-permission:'android.permission.WAKE_LOCK' application-label:'Caffeine Tile' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='Caffeine Tile' icon='res/drawable/ic_coffee_on.xml' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/17.0.0/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000246614717152070027104 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' uses-feature-not-required:'android.hardware.telephony' uses-feature-not-required:'android.hardware.wifi' uses-feature-not-required:'android.hardware.touchscreen' uses-feature-not-required:'android.hardware.nfc' uses-feature-not-required:'android.hardware.bluetooth' uses-permission:'android.permission.INTERNET' uses-permission:'android.permission.ACCESS_NETWORK_STATE' uses-permission:'android.permission.ACCESS_WIFI_STATE' uses-permission:'android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission:'android.permission.CHANGE_NETWORK_STATE' uses-permission:'android.permission.CHANGE_WIFI_STATE' uses-permission:'android.permission.BLUETOOTH' uses-permission:'android.permission.BLUETOOTH_ADMIN' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' uses-permission:'android.permission.NFC' application-label:'OBB Main Old Version' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Old Version' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/17.0.0/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000127014717152070027051 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/17.0.0/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000127014717152070027053 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/17.0.0/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000127014717152070027055 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/17.0.0/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000120614717152070026734 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/17.0.0/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000121114717152070026424 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' sdkVersion:'8' targetSdkVersion:'28' uses-permission:'android.permission.VIBRATE' application-label:'DroidTR keyboard' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR keyboard' icon='res/drawable/ic_launcher.png' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main ime supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/17.0.0/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000273014717152070025465 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' sdkVersion:'8' targetSdkVersion:'18' uses-permission:'android.permission.RECEIVE_SMS' uses-permission:'android.permission.SEND_SMS' uses-permission:'android.permission.READ_CONTACTS' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-permission:'android.permission.VIBRATE' application-label:'Battery level' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='Battery level' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission:'android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE','requested WRITE_EXTERNAL_STORAGE' uses-feature:'android.hardware.telephony' uses-implied-feature:'android.hardware.telephony','requested a telephony-related permission or feature' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2481866 fdroidserver-2.4.0/tests/build-tools/18.1.1/0000755000175000017500000000000014770510164017051 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/18.1.1/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001411514717152070025112 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission:'android.permission.ACCESS_NETWORK_STATE' uses-permission:'android.permission.CALL_PHONE' uses-permission:'android.permission.READ_CONTACTS' uses-permission:'android.permission.READ_SMS' uses-permission:'android.permission.READ_PHONE_STATE' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' uses-permission:'android.permission.RECEIVE_MMS' uses-permission:'android.permission.RECEIVE_SMS' uses-permission:'android.permission.SEND_SMS' uses-permission:'android.permission.WAKE_LOCK' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-permission:'android.permission.WRITE_SMS' uses-permission:'com.android.vending.BILLING' uses-permission:'android.permission.INTERNET' uses-permission:'com.sec.android.provider.badge.permission.READ' uses-permission:'com.sec.android.provider.badge.permission.WRITE' uses-permission:'com.htc.launcher.permission.READ_SETTINGS' uses-permission:'com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission:'com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission:'com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission:'com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission:'com.majeur.launcher.permission.UPDATE_BADGE' uses-permission:'com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission:'com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission:'com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission:'android.permission.READ_APP_BADGE' uses-permission:'com.oppo.launcher.permission.READ_SETTINGS' uses-permission:'com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission:'me.everything.badger.permission.BADGE_COUNT_READ' uses-permission:'me.everything.badger.permission.BADGE_COUNT_WRITE' application-label:'QKSMS' application-label-da:'QKSMS' application-label-fa:'QKSMS' application-label-ja:'QKSMS' application-label-de:'QKSMS' application-label-ne:'QKSMS' application-label-th:'QKSMS' application-label-zh:'QKSMS' application-label-fi:'QKSMS' application-label-hi:'QKSMS' application-label-vi:'QKSMS' application-label-sk:'QKSMS' application-label-uk:'QKSMS' application-label-nl:'QKSMS' application-label-pl:'QKSMS' application-label-tl:'QKSMS' application-label-bn:'QKSMS' application-label-in:'QKSMS' application-label-ko:'QKSMS' application-label-no:'QKSMS' application-label-ro:'QKSMS' application-label-ar:'QKSMS' application-label-fr:'QKSMS' application-label-hr:'QKSMS' application-label-sr:'QKSMS' application-label-tr:'QKSMS' application-label-ur:'QKSMS' application-label-cs:'QKSMS' application-label-es:'QKSMS' application-label-it:'QKSMS' application-label-lt:'QKSMS' application-label-pt:'QKSMS' application-label-hu:'QKSMS' application-label-ru:'QKSMS' application-label-sv:'QKSMS' application-label-iw:'QKSMS' application-label-zh_CN:'QKSMS' application-label-pt_BR:'QKSMS' application-label-ca:'QKSMS' application-label-ka:'QKSMS' application-label-pa:'QKSMS' application-label-ta:'QKSMS' application-label-nb:'QKSMS' application-label-be:'QKSMS' application-label-te:'QKSMS' application-label-af:'QKSMS' application-label-bg:'QKSMS' application-label-si:'QKSMS' application-label-kk:'QKSMS' application-label-mk:'QKSMS' application-label-el:'QKSMS' application-label-gl:'QKSMS' application-label-ml:'QKSMS' application-label-sl:'QKSMS' application-label-am:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-mn:'QKSMS' application-label-lo:'QKSMS' application-label-sq:'QKSMS' application-label-mr:'QKSMS' application-label-or:'QKSMS' application-label-as:'QKSMS' application-label-bs:'QKSMS' application-label-is:'QKSMS' application-label-ms:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-gu:'QKSMS' application-label-zu:'QKSMS' application-label-lv:'QKSMS' application-label-sw:'QKSMS' application-label-hy:'QKSMS' application-label-ky:'QKSMS' application-label-my:'QKSMS' application-label-az:'QKSMS' application-label-uz:'QKSMS' application-label-en_CA:'QKSMS' application-label-fr_CA:'QKSMS' application-label-en_GB:'QKSMS' application-label-en_XC:'QKSMS' application-label-zh_HK:'QKSMS' application-label-en_IN:'QKSMS' application-label-es_US:'QKSMS' application-label-pt_PT:'QKSMS' application-label-en_AU:'QKSMS' application-label-zh_TW:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission:'android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE','requested WRITE_EXTERNAL_STORAGE' uses-feature:'android.hardware.telephony' uses-implied-feature:'android.hardware.telephony','requested a telephony-related permission or feature' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main app-widget other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'da' 'fa' 'ja' 'de' 'ne' 'th' 'zh' 'fi' 'hi' 'vi' 'sk' 'uk' 'nl' 'pl' 'tl' 'bn' 'in' 'ko' 'no' 'ro' 'ar' 'fr' 'hr' 'sr' 'tr' 'ur' 'cs' 'es' 'it' 'lt' 'pt' 'hu' 'ru' 'sv' 'iw' 'zh_CN' 'pt_BR' 'ca' 'ka' 'pa' 'ta' 'nb' 'be' 'te' 'af' 'bg' 'si' 'kk' 'mk' 'el' 'gl' 'ml' 'sl' 'am' 'km' 'kn' 'mn' 'lo' 'sq' 'mr' 'or' 'as' 'bs' 'is' 'ms' 'et' 'eu' 'gu' 'zu' 'lv' 'sw' 'hy' 'ky' 'my' 'az' 'uz' 'en_CA' 'fr_CA' 'en_GB' 'en_XC' 'zh_HK' 'en_IN' 'es_US' 'pt_PT' 'en_AU' 'zh_TW' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/18.1.1/aapt-output-com.politedroid_3.txt0000644000175000017500000000245614717152070025416 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' sdkVersion:'3' uses-permission:'android.permission.READ_CALENDAR' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.WRITE_EXTERNAL_STORAGE','targetSdkVersion < 4' uses-permission:'android.permission.READ_PHONE_STATE' uses-implied-permission:'android.permission.READ_PHONE_STATE','targetSdkVersion < 4' uses-permission:'android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE','requested WRITE_EXTERNAL_STORAGE' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/18.1.1/aapt-output-com.politedroid_4.txt0000644000175000017500000000245614717152070025417 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' sdkVersion:'3' uses-permission:'android.permission.READ_CALENDAR' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.WRITE_EXTERNAL_STORAGE','targetSdkVersion < 4' uses-permission:'android.permission.READ_PHONE_STATE' uses-implied-permission:'android.permission.READ_PHONE_STATE','targetSdkVersion < 4' uses-permission:'android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE','requested WRITE_EXTERNAL_STORAGE' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/18.1.1/aapt-output-com.politedroid_5.txt0000644000175000017500000000163114717152070025412 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' sdkVersion:'3' targetSdkVersion:'10' uses-permission:'android.permission.READ_CALENDAR' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/18.1.1/aapt-output-com.politedroid_6.txt0000644000175000017500000000165114717152070025415 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' sdkVersion:'14' targetSdkVersion:'21' uses-permission:'android.permission.READ_CALENDAR' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/18.1.1/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000264214717152070027563 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' sdkVersion:'18' targetSdkVersion:'27' uses-permission:'android.permission.INTERNET' uses-permission:'android.permission.ACCESS_NETWORK_STATE' uses-permission:'android.permission.ACCESS_WIFI_STATE' uses-permission:'android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission:'android.permission.INTERNET' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-feature-not-required:'android.software.leanback' uses-feature-not-required:'android.hardware.touchscreen' application-label:'Duplicate Permisssions' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='Duplicate Permisssions' icon='res/drawable/ic_launcher.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission:'android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE','requested WRITE_EXTERNAL_STORAGE' uses-feature:'android.hardware.wifi' uses-implied-feature:'android.hardware.wifi','requested android.permission.ACCESS_WIFI_STATE, android.permission.CHANGE_WIFI_STATE, or android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/18.1.1/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000152014717152070027733 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/18.1.1/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000117314717152070030050 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' sdkVersion:'24' targetSdkVersion:'25' uses-permission:'android.permission.WAKE_LOCK' application-label:'Caffeine Tile' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='Caffeine Tile' icon='res/drawable/ic_coffee_on.xml' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/18.1.1/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000246614717152070027107 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' uses-feature-not-required:'android.hardware.telephony' uses-feature-not-required:'android.hardware.wifi' uses-feature-not-required:'android.hardware.touchscreen' uses-feature-not-required:'android.hardware.nfc' uses-feature-not-required:'android.hardware.bluetooth' uses-permission:'android.permission.INTERNET' uses-permission:'android.permission.ACCESS_NETWORK_STATE' uses-permission:'android.permission.ACCESS_WIFI_STATE' uses-permission:'android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission:'android.permission.CHANGE_NETWORK_STATE' uses-permission:'android.permission.CHANGE_WIFI_STATE' uses-permission:'android.permission.BLUETOOTH' uses-permission:'android.permission.BLUETOOTH_ADMIN' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' uses-permission:'android.permission.NFC' application-label:'OBB Main Old Version' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Old Version' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/18.1.1/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000127014717152070027054 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/18.1.1/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000127014717152070027056 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/18.1.1/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000127014717152070027060 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/18.1.1/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000120614717152070026737 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/18.1.1/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000121114717152070026427 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' sdkVersion:'8' targetSdkVersion:'28' uses-permission:'android.permission.VIBRATE' application-label:'DroidTR keyboard' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR keyboard' icon='res/drawable/ic_launcher.png' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main ime supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/18.1.1/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000273014717152070025470 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' sdkVersion:'8' targetSdkVersion:'18' uses-permission:'android.permission.RECEIVE_SMS' uses-permission:'android.permission.SEND_SMS' uses-permission:'android.permission.READ_CONTACTS' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-permission:'android.permission.VIBRATE' application-label:'Battery level' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='Battery level' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission:'android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE','requested WRITE_EXTERNAL_STORAGE' uses-feature:'android.hardware.telephony' uses-implied-feature:'android.hardware.telephony','requested a telephony-related permission or feature' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2481866 fdroidserver-2.4.0/tests/build-tools/19.0.0/0000755000175000017500000000000014770510164017050 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/19.0.0/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001411514717152067025117 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission:'android.permission.ACCESS_NETWORK_STATE' uses-permission:'android.permission.CALL_PHONE' uses-permission:'android.permission.READ_CONTACTS' uses-permission:'android.permission.READ_SMS' uses-permission:'android.permission.READ_PHONE_STATE' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' uses-permission:'android.permission.RECEIVE_MMS' uses-permission:'android.permission.RECEIVE_SMS' uses-permission:'android.permission.SEND_SMS' uses-permission:'android.permission.WAKE_LOCK' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-permission:'android.permission.WRITE_SMS' uses-permission:'com.android.vending.BILLING' uses-permission:'android.permission.INTERNET' uses-permission:'com.sec.android.provider.badge.permission.READ' uses-permission:'com.sec.android.provider.badge.permission.WRITE' uses-permission:'com.htc.launcher.permission.READ_SETTINGS' uses-permission:'com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission:'com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission:'com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission:'com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission:'com.majeur.launcher.permission.UPDATE_BADGE' uses-permission:'com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission:'com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission:'com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission:'android.permission.READ_APP_BADGE' uses-permission:'com.oppo.launcher.permission.READ_SETTINGS' uses-permission:'com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission:'me.everything.badger.permission.BADGE_COUNT_READ' uses-permission:'me.everything.badger.permission.BADGE_COUNT_WRITE' application-label:'QKSMS' application-label-da:'QKSMS' application-label-fa:'QKSMS' application-label-ja:'QKSMS' application-label-de:'QKSMS' application-label-ne:'QKSMS' application-label-th:'QKSMS' application-label-zh:'QKSMS' application-label-fi:'QKSMS' application-label-hi:'QKSMS' application-label-vi:'QKSMS' application-label-sk:'QKSMS' application-label-uk:'QKSMS' application-label-nl:'QKSMS' application-label-pl:'QKSMS' application-label-tl:'QKSMS' application-label-bn:'QKSMS' application-label-in:'QKSMS' application-label-ko:'QKSMS' application-label-no:'QKSMS' application-label-ro:'QKSMS' application-label-ar:'QKSMS' application-label-fr:'QKSMS' application-label-hr:'QKSMS' application-label-sr:'QKSMS' application-label-tr:'QKSMS' application-label-ur:'QKSMS' application-label-cs:'QKSMS' application-label-es:'QKSMS' application-label-it:'QKSMS' application-label-lt:'QKSMS' application-label-pt:'QKSMS' application-label-hu:'QKSMS' application-label-ru:'QKSMS' application-label-sv:'QKSMS' application-label-iw:'QKSMS' application-label-zh_CN:'QKSMS' application-label-pt_BR:'QKSMS' application-label-ca:'QKSMS' application-label-ka:'QKSMS' application-label-pa:'QKSMS' application-label-ta:'QKSMS' application-label-nb:'QKSMS' application-label-be:'QKSMS' application-label-te:'QKSMS' application-label-af:'QKSMS' application-label-bg:'QKSMS' application-label-si:'QKSMS' application-label-kk:'QKSMS' application-label-mk:'QKSMS' application-label-el:'QKSMS' application-label-gl:'QKSMS' application-label-ml:'QKSMS' application-label-sl:'QKSMS' application-label-am:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-mn:'QKSMS' application-label-lo:'QKSMS' application-label-sq:'QKSMS' application-label-mr:'QKSMS' application-label-or:'QKSMS' application-label-as:'QKSMS' application-label-bs:'QKSMS' application-label-is:'QKSMS' application-label-ms:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-gu:'QKSMS' application-label-zu:'QKSMS' application-label-lv:'QKSMS' application-label-sw:'QKSMS' application-label-hy:'QKSMS' application-label-ky:'QKSMS' application-label-my:'QKSMS' application-label-az:'QKSMS' application-label-uz:'QKSMS' application-label-en_CA:'QKSMS' application-label-fr_CA:'QKSMS' application-label-en_GB:'QKSMS' application-label-en_XC:'QKSMS' application-label-zh_HK:'QKSMS' application-label-en_IN:'QKSMS' application-label-es_US:'QKSMS' application-label-pt_PT:'QKSMS' application-label-en_AU:'QKSMS' application-label-zh_TW:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission:'android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE','requested WRITE_EXTERNAL_STORAGE' uses-feature:'android.hardware.telephony' uses-implied-feature:'android.hardware.telephony','requested a telephony-related permission or feature' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main app-widget other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'da' 'fa' 'ja' 'de' 'ne' 'th' 'zh' 'fi' 'hi' 'vi' 'sk' 'uk' 'nl' 'pl' 'tl' 'bn' 'in' 'ko' 'no' 'ro' 'ar' 'fr' 'hr' 'sr' 'tr' 'ur' 'cs' 'es' 'it' 'lt' 'pt' 'hu' 'ru' 'sv' 'iw' 'zh_CN' 'pt_BR' 'ca' 'ka' 'pa' 'ta' 'nb' 'be' 'te' 'af' 'bg' 'si' 'kk' 'mk' 'el' 'gl' 'ml' 'sl' 'am' 'km' 'kn' 'mn' 'lo' 'sq' 'mr' 'or' 'as' 'bs' 'is' 'ms' 'et' 'eu' 'gu' 'zu' 'lv' 'sw' 'hy' 'ky' 'my' 'az' 'uz' 'en_CA' 'fr_CA' 'en_GB' 'en_XC' 'zh_HK' 'en_IN' 'es_US' 'pt_PT' 'en_AU' 'zh_TW' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/19.0.0/aapt-output-com.politedroid_3.txt0000644000175000017500000000245614717152070025415 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' sdkVersion:'3' uses-permission:'android.permission.READ_CALENDAR' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.WRITE_EXTERNAL_STORAGE','targetSdkVersion < 4' uses-permission:'android.permission.READ_PHONE_STATE' uses-implied-permission:'android.permission.READ_PHONE_STATE','targetSdkVersion < 4' uses-permission:'android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE','requested WRITE_EXTERNAL_STORAGE' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/19.0.0/aapt-output-com.politedroid_4.txt0000644000175000017500000000245614717152067025424 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' sdkVersion:'3' uses-permission:'android.permission.READ_CALENDAR' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.WRITE_EXTERNAL_STORAGE','targetSdkVersion < 4' uses-permission:'android.permission.READ_PHONE_STATE' uses-implied-permission:'android.permission.READ_PHONE_STATE','targetSdkVersion < 4' uses-permission:'android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE','requested WRITE_EXTERNAL_STORAGE' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/19.0.0/aapt-output-com.politedroid_5.txt0000644000175000017500000000163114717152067025417 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' sdkVersion:'3' targetSdkVersion:'10' uses-permission:'android.permission.READ_CALENDAR' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/19.0.0/aapt-output-com.politedroid_6.txt0000644000175000017500000000165114717152070025414 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' sdkVersion:'14' targetSdkVersion:'21' uses-permission:'android.permission.READ_CALENDAR' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/19.0.0/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000264214717152067027570 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' sdkVersion:'18' targetSdkVersion:'27' uses-permission:'android.permission.INTERNET' uses-permission:'android.permission.ACCESS_NETWORK_STATE' uses-permission:'android.permission.ACCESS_WIFI_STATE' uses-permission:'android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission:'android.permission.INTERNET' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-feature-not-required:'android.software.leanback' uses-feature-not-required:'android.hardware.touchscreen' application-label:'Duplicate Permisssions' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='Duplicate Permisssions' icon='res/drawable/ic_launcher.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission:'android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE','requested WRITE_EXTERNAL_STORAGE' uses-feature:'android.hardware.wifi' uses-implied-feature:'android.hardware.wifi','requested android.permission.ACCESS_WIFI_STATE, android.permission.CHANGE_WIFI_STATE, or android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/19.0.0/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000152014717152067027740 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/19.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000117314717152070030047 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' sdkVersion:'24' targetSdkVersion:'25' uses-permission:'android.permission.WAKE_LOCK' application-label:'Caffeine Tile' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='Caffeine Tile' icon='res/drawable/ic_coffee_on.xml' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/19.0.0/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000246614717152070027106 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' uses-feature-not-required:'android.hardware.telephony' uses-feature-not-required:'android.hardware.wifi' uses-feature-not-required:'android.hardware.touchscreen' uses-feature-not-required:'android.hardware.nfc' uses-feature-not-required:'android.hardware.bluetooth' uses-permission:'android.permission.INTERNET' uses-permission:'android.permission.ACCESS_NETWORK_STATE' uses-permission:'android.permission.ACCESS_WIFI_STATE' uses-permission:'android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission:'android.permission.CHANGE_NETWORK_STATE' uses-permission:'android.permission.CHANGE_WIFI_STATE' uses-permission:'android.permission.BLUETOOTH' uses-permission:'android.permission.BLUETOOTH_ADMIN' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' uses-permission:'android.permission.NFC' application-label:'OBB Main Old Version' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Old Version' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/19.0.0/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000127014717152070027053 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/19.0.0/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000127014717152070027055 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/19.0.0/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000127014717152070027057 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/19.0.0/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000120614717152067026744 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/19.0.0/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000121114717152067026434 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' sdkVersion:'8' targetSdkVersion:'28' uses-permission:'android.permission.VIBRATE' application-label:'DroidTR keyboard' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR keyboard' icon='res/drawable/ic_launcher.png' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main ime supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/19.0.0/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000273014717152070025467 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' sdkVersion:'8' targetSdkVersion:'18' uses-permission:'android.permission.RECEIVE_SMS' uses-permission:'android.permission.SEND_SMS' uses-permission:'android.permission.READ_CONTACTS' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-permission:'android.permission.VIBRATE' application-label:'Battery level' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='Battery level' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission:'android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE','requested WRITE_EXTERNAL_STORAGE' uses-feature:'android.hardware.telephony' uses-implied-feature:'android.hardware.telephony','requested a telephony-related permission or feature' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2521868 fdroidserver-2.4.0/tests/build-tools/19.1.0/0000755000175000017500000000000014770510164017051 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/19.1.0/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001411514717152070025112 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission:'android.permission.ACCESS_NETWORK_STATE' uses-permission:'android.permission.CALL_PHONE' uses-permission:'android.permission.READ_CONTACTS' uses-permission:'android.permission.READ_SMS' uses-permission:'android.permission.READ_PHONE_STATE' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' uses-permission:'android.permission.RECEIVE_MMS' uses-permission:'android.permission.RECEIVE_SMS' uses-permission:'android.permission.SEND_SMS' uses-permission:'android.permission.WAKE_LOCK' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-permission:'android.permission.WRITE_SMS' uses-permission:'com.android.vending.BILLING' uses-permission:'android.permission.INTERNET' uses-permission:'com.sec.android.provider.badge.permission.READ' uses-permission:'com.sec.android.provider.badge.permission.WRITE' uses-permission:'com.htc.launcher.permission.READ_SETTINGS' uses-permission:'com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission:'com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission:'com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission:'com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission:'com.majeur.launcher.permission.UPDATE_BADGE' uses-permission:'com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission:'com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission:'com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission:'android.permission.READ_APP_BADGE' uses-permission:'com.oppo.launcher.permission.READ_SETTINGS' uses-permission:'com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission:'me.everything.badger.permission.BADGE_COUNT_READ' uses-permission:'me.everything.badger.permission.BADGE_COUNT_WRITE' application-label:'QKSMS' application-label-da:'QKSMS' application-label-fa:'QKSMS' application-label-ja:'QKSMS' application-label-de:'QKSMS' application-label-ne:'QKSMS' application-label-th:'QKSMS' application-label-zh:'QKSMS' application-label-fi:'QKSMS' application-label-hi:'QKSMS' application-label-vi:'QKSMS' application-label-sk:'QKSMS' application-label-uk:'QKSMS' application-label-nl:'QKSMS' application-label-pl:'QKSMS' application-label-tl:'QKSMS' application-label-bn:'QKSMS' application-label-in:'QKSMS' application-label-ko:'QKSMS' application-label-no:'QKSMS' application-label-ro:'QKSMS' application-label-ar:'QKSMS' application-label-fr:'QKSMS' application-label-hr:'QKSMS' application-label-sr:'QKSMS' application-label-tr:'QKSMS' application-label-ur:'QKSMS' application-label-cs:'QKSMS' application-label-es:'QKSMS' application-label-it:'QKSMS' application-label-lt:'QKSMS' application-label-pt:'QKSMS' application-label-hu:'QKSMS' application-label-ru:'QKSMS' application-label-sv:'QKSMS' application-label-iw:'QKSMS' application-label-zh_CN:'QKSMS' application-label-pt_BR:'QKSMS' application-label-ca:'QKSMS' application-label-ka:'QKSMS' application-label-pa:'QKSMS' application-label-ta:'QKSMS' application-label-nb:'QKSMS' application-label-be:'QKSMS' application-label-te:'QKSMS' application-label-af:'QKSMS' application-label-bg:'QKSMS' application-label-si:'QKSMS' application-label-kk:'QKSMS' application-label-mk:'QKSMS' application-label-el:'QKSMS' application-label-gl:'QKSMS' application-label-ml:'QKSMS' application-label-sl:'QKSMS' application-label-am:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-mn:'QKSMS' application-label-lo:'QKSMS' application-label-sq:'QKSMS' application-label-mr:'QKSMS' application-label-or:'QKSMS' application-label-as:'QKSMS' application-label-bs:'QKSMS' application-label-is:'QKSMS' application-label-ms:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-gu:'QKSMS' application-label-zu:'QKSMS' application-label-lv:'QKSMS' application-label-sw:'QKSMS' application-label-hy:'QKSMS' application-label-ky:'QKSMS' application-label-my:'QKSMS' application-label-az:'QKSMS' application-label-uz:'QKSMS' application-label-en_CA:'QKSMS' application-label-fr_CA:'QKSMS' application-label-en_GB:'QKSMS' application-label-en_XC:'QKSMS' application-label-zh_HK:'QKSMS' application-label-en_IN:'QKSMS' application-label-es_US:'QKSMS' application-label-pt_PT:'QKSMS' application-label-en_AU:'QKSMS' application-label-zh_TW:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission:'android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE','requested WRITE_EXTERNAL_STORAGE' uses-feature:'android.hardware.telephony' uses-implied-feature:'android.hardware.telephony','requested a telephony-related permission or feature' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main app-widget other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'da' 'fa' 'ja' 'de' 'ne' 'th' 'zh' 'fi' 'hi' 'vi' 'sk' 'uk' 'nl' 'pl' 'tl' 'bn' 'in' 'ko' 'no' 'ro' 'ar' 'fr' 'hr' 'sr' 'tr' 'ur' 'cs' 'es' 'it' 'lt' 'pt' 'hu' 'ru' 'sv' 'iw' 'zh_CN' 'pt_BR' 'ca' 'ka' 'pa' 'ta' 'nb' 'be' 'te' 'af' 'bg' 'si' 'kk' 'mk' 'el' 'gl' 'ml' 'sl' 'am' 'km' 'kn' 'mn' 'lo' 'sq' 'mr' 'or' 'as' 'bs' 'is' 'ms' 'et' 'eu' 'gu' 'zu' 'lv' 'sw' 'hy' 'ky' 'my' 'az' 'uz' 'en_CA' 'fr_CA' 'en_GB' 'en_XC' 'zh_HK' 'en_IN' 'es_US' 'pt_PT' 'en_AU' 'zh_TW' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/19.1.0/aapt-output-com.politedroid_3.txt0000644000175000017500000000245614717152070025416 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' sdkVersion:'3' uses-permission:'android.permission.READ_CALENDAR' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.WRITE_EXTERNAL_STORAGE','targetSdkVersion < 4' uses-permission:'android.permission.READ_PHONE_STATE' uses-implied-permission:'android.permission.READ_PHONE_STATE','targetSdkVersion < 4' uses-permission:'android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE','requested WRITE_EXTERNAL_STORAGE' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/19.1.0/aapt-output-com.politedroid_4.txt0000644000175000017500000000245614717152070025417 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' sdkVersion:'3' uses-permission:'android.permission.READ_CALENDAR' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.WRITE_EXTERNAL_STORAGE','targetSdkVersion < 4' uses-permission:'android.permission.READ_PHONE_STATE' uses-implied-permission:'android.permission.READ_PHONE_STATE','targetSdkVersion < 4' uses-permission:'android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE','requested WRITE_EXTERNAL_STORAGE' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/19.1.0/aapt-output-com.politedroid_5.txt0000644000175000017500000000163114717152070025412 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' sdkVersion:'3' targetSdkVersion:'10' uses-permission:'android.permission.READ_CALENDAR' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/19.1.0/aapt-output-com.politedroid_6.txt0000644000175000017500000000165114717152070025415 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' sdkVersion:'14' targetSdkVersion:'21' uses-permission:'android.permission.READ_CALENDAR' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/19.1.0/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000264214717152070027563 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' sdkVersion:'18' targetSdkVersion:'27' uses-permission:'android.permission.INTERNET' uses-permission:'android.permission.ACCESS_NETWORK_STATE' uses-permission:'android.permission.ACCESS_WIFI_STATE' uses-permission:'android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission:'android.permission.INTERNET' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-feature-not-required:'android.software.leanback' uses-feature-not-required:'android.hardware.touchscreen' application-label:'Duplicate Permisssions' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='Duplicate Permisssions' icon='res/drawable/ic_launcher.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission:'android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE','requested WRITE_EXTERNAL_STORAGE' uses-feature:'android.hardware.wifi' uses-implied-feature:'android.hardware.wifi','requested android.permission.ACCESS_WIFI_STATE, android.permission.CHANGE_WIFI_STATE, or android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/19.1.0/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000152014717152070027733 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/19.1.0/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000117314717152070030050 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' sdkVersion:'24' targetSdkVersion:'25' uses-permission:'android.permission.WAKE_LOCK' application-label:'Caffeine Tile' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='Caffeine Tile' icon='res/drawable/ic_coffee_on.xml' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/19.1.0/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000246614717152070027107 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' uses-feature-not-required:'android.hardware.telephony' uses-feature-not-required:'android.hardware.wifi' uses-feature-not-required:'android.hardware.touchscreen' uses-feature-not-required:'android.hardware.nfc' uses-feature-not-required:'android.hardware.bluetooth' uses-permission:'android.permission.INTERNET' uses-permission:'android.permission.ACCESS_NETWORK_STATE' uses-permission:'android.permission.ACCESS_WIFI_STATE' uses-permission:'android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission:'android.permission.CHANGE_NETWORK_STATE' uses-permission:'android.permission.CHANGE_WIFI_STATE' uses-permission:'android.permission.BLUETOOTH' uses-permission:'android.permission.BLUETOOTH_ADMIN' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' uses-permission:'android.permission.NFC' application-label:'OBB Main Old Version' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Old Version' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/19.1.0/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000127014717152070027054 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/19.1.0/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000127014717152070027056 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/19.1.0/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000127014717152070027060 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/19.1.0/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000120614717152070026737 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/19.1.0/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000121114717152070026427 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' sdkVersion:'8' targetSdkVersion:'28' uses-permission:'android.permission.VIBRATE' application-label:'DroidTR keyboard' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR keyboard' icon='res/drawable/ic_launcher.png' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main ime supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/19.1.0/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000273014717152070025470 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' sdkVersion:'8' targetSdkVersion:'18' uses-permission:'android.permission.RECEIVE_SMS' uses-permission:'android.permission.SEND_SMS' uses-permission:'android.permission.READ_CONTACTS' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-permission:'android.permission.VIBRATE' application-label:'Battery level' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='Battery level' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission:'android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE','requested WRITE_EXTERNAL_STORAGE' uses-feature:'android.hardware.telephony' uses-implied-feature:'android.hardware.telephony','requested a telephony-related permission or feature' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2521868 fdroidserver-2.4.0/tests/build-tools/20.0.0/0000755000175000017500000000000014770510164017040 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/20.0.0/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001411514717152070025101 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission:'android.permission.ACCESS_NETWORK_STATE' uses-permission:'android.permission.CALL_PHONE' uses-permission:'android.permission.READ_CONTACTS' uses-permission:'android.permission.READ_SMS' uses-permission:'android.permission.READ_PHONE_STATE' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' uses-permission:'android.permission.RECEIVE_MMS' uses-permission:'android.permission.RECEIVE_SMS' uses-permission:'android.permission.SEND_SMS' uses-permission:'android.permission.WAKE_LOCK' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-permission:'android.permission.WRITE_SMS' uses-permission:'com.android.vending.BILLING' uses-permission:'android.permission.INTERNET' uses-permission:'com.sec.android.provider.badge.permission.READ' uses-permission:'com.sec.android.provider.badge.permission.WRITE' uses-permission:'com.htc.launcher.permission.READ_SETTINGS' uses-permission:'com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission:'com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission:'com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission:'com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission:'com.majeur.launcher.permission.UPDATE_BADGE' uses-permission:'com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission:'com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission:'com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission:'android.permission.READ_APP_BADGE' uses-permission:'com.oppo.launcher.permission.READ_SETTINGS' uses-permission:'com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission:'me.everything.badger.permission.BADGE_COUNT_READ' uses-permission:'me.everything.badger.permission.BADGE_COUNT_WRITE' application-label:'QKSMS' application-label-da:'QKSMS' application-label-fa:'QKSMS' application-label-ja:'QKSMS' application-label-de:'QKSMS' application-label-ne:'QKSMS' application-label-th:'QKSMS' application-label-zh:'QKSMS' application-label-fi:'QKSMS' application-label-hi:'QKSMS' application-label-vi:'QKSMS' application-label-sk:'QKSMS' application-label-uk:'QKSMS' application-label-nl:'QKSMS' application-label-pl:'QKSMS' application-label-tl:'QKSMS' application-label-bn:'QKSMS' application-label-in:'QKSMS' application-label-ko:'QKSMS' application-label-no:'QKSMS' application-label-ro:'QKSMS' application-label-ar:'QKSMS' application-label-fr:'QKSMS' application-label-hr:'QKSMS' application-label-sr:'QKSMS' application-label-tr:'QKSMS' application-label-ur:'QKSMS' application-label-cs:'QKSMS' application-label-es:'QKSMS' application-label-it:'QKSMS' application-label-lt:'QKSMS' application-label-pt:'QKSMS' application-label-hu:'QKSMS' application-label-ru:'QKSMS' application-label-sv:'QKSMS' application-label-iw:'QKSMS' application-label-zh_CN:'QKSMS' application-label-pt_BR:'QKSMS' application-label-ca:'QKSMS' application-label-ka:'QKSMS' application-label-pa:'QKSMS' application-label-ta:'QKSMS' application-label-nb:'QKSMS' application-label-be:'QKSMS' application-label-te:'QKSMS' application-label-af:'QKSMS' application-label-bg:'QKSMS' application-label-si:'QKSMS' application-label-kk:'QKSMS' application-label-mk:'QKSMS' application-label-el:'QKSMS' application-label-gl:'QKSMS' application-label-ml:'QKSMS' application-label-sl:'QKSMS' application-label-am:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-mn:'QKSMS' application-label-lo:'QKSMS' application-label-sq:'QKSMS' application-label-mr:'QKSMS' application-label-or:'QKSMS' application-label-as:'QKSMS' application-label-bs:'QKSMS' application-label-is:'QKSMS' application-label-ms:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-gu:'QKSMS' application-label-zu:'QKSMS' application-label-lv:'QKSMS' application-label-sw:'QKSMS' application-label-hy:'QKSMS' application-label-ky:'QKSMS' application-label-my:'QKSMS' application-label-az:'QKSMS' application-label-uz:'QKSMS' application-label-en_CA:'QKSMS' application-label-fr_CA:'QKSMS' application-label-en_GB:'QKSMS' application-label-en_XC:'QKSMS' application-label-zh_HK:'QKSMS' application-label-en_IN:'QKSMS' application-label-es_US:'QKSMS' application-label-pt_PT:'QKSMS' application-label-en_AU:'QKSMS' application-label-zh_TW:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission:'android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE','requested WRITE_EXTERNAL_STORAGE' uses-feature:'android.hardware.telephony' uses-implied-feature:'android.hardware.telephony','requested a telephony-related permission or feature' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main app-widget other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'da' 'fa' 'ja' 'de' 'ne' 'th' 'zh' 'fi' 'hi' 'vi' 'sk' 'uk' 'nl' 'pl' 'tl' 'bn' 'in' 'ko' 'no' 'ro' 'ar' 'fr' 'hr' 'sr' 'tr' 'ur' 'cs' 'es' 'it' 'lt' 'pt' 'hu' 'ru' 'sv' 'iw' 'zh_CN' 'pt_BR' 'ca' 'ka' 'pa' 'ta' 'nb' 'be' 'te' 'af' 'bg' 'si' 'kk' 'mk' 'el' 'gl' 'ml' 'sl' 'am' 'km' 'kn' 'mn' 'lo' 'sq' 'mr' 'or' 'as' 'bs' 'is' 'ms' 'et' 'eu' 'gu' 'zu' 'lv' 'sw' 'hy' 'ky' 'my' 'az' 'uz' 'en_CA' 'fr_CA' 'en_GB' 'en_XC' 'zh_HK' 'en_IN' 'es_US' 'pt_PT' 'en_AU' 'zh_TW' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/20.0.0/aapt-output-com.politedroid_3.txt0000644000175000017500000000245614717152070025405 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' sdkVersion:'3' uses-permission:'android.permission.READ_CALENDAR' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.WRITE_EXTERNAL_STORAGE','targetSdkVersion < 4' uses-permission:'android.permission.READ_PHONE_STATE' uses-implied-permission:'android.permission.READ_PHONE_STATE','targetSdkVersion < 4' uses-permission:'android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE','requested WRITE_EXTERNAL_STORAGE' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/20.0.0/aapt-output-com.politedroid_4.txt0000644000175000017500000000245614717152070025406 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' sdkVersion:'3' uses-permission:'android.permission.READ_CALENDAR' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.WRITE_EXTERNAL_STORAGE','targetSdkVersion < 4' uses-permission:'android.permission.READ_PHONE_STATE' uses-implied-permission:'android.permission.READ_PHONE_STATE','targetSdkVersion < 4' uses-permission:'android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE','requested WRITE_EXTERNAL_STORAGE' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/20.0.0/aapt-output-com.politedroid_5.txt0000644000175000017500000000163114717152070025401 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' sdkVersion:'3' targetSdkVersion:'10' uses-permission:'android.permission.READ_CALENDAR' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/20.0.0/aapt-output-com.politedroid_6.txt0000644000175000017500000000165114717152070025404 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' sdkVersion:'14' targetSdkVersion:'21' uses-permission:'android.permission.READ_CALENDAR' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/20.0.0/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000264214717152070027552 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' sdkVersion:'18' targetSdkVersion:'27' uses-permission:'android.permission.INTERNET' uses-permission:'android.permission.ACCESS_NETWORK_STATE' uses-permission:'android.permission.ACCESS_WIFI_STATE' uses-permission:'android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission:'android.permission.INTERNET' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-feature-not-required:'android.software.leanback' uses-feature-not-required:'android.hardware.touchscreen' application-label:'Duplicate Permisssions' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='Duplicate Permisssions' icon='res/drawable/ic_launcher.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission:'android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE','requested WRITE_EXTERNAL_STORAGE' uses-feature:'android.hardware.wifi' uses-implied-feature:'android.hardware.wifi','requested android.permission.ACCESS_WIFI_STATE, android.permission.CHANGE_WIFI_STATE, or android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/20.0.0/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000152014717152070027722 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/20.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000117314717152070030037 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' sdkVersion:'24' targetSdkVersion:'25' uses-permission:'android.permission.WAKE_LOCK' application-label:'Caffeine Tile' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='Caffeine Tile' icon='res/drawable/ic_coffee_on.xml' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/20.0.0/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000246614717152070027076 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' uses-feature-not-required:'android.hardware.telephony' uses-feature-not-required:'android.hardware.wifi' uses-feature-not-required:'android.hardware.touchscreen' uses-feature-not-required:'android.hardware.nfc' uses-feature-not-required:'android.hardware.bluetooth' uses-permission:'android.permission.INTERNET' uses-permission:'android.permission.ACCESS_NETWORK_STATE' uses-permission:'android.permission.ACCESS_WIFI_STATE' uses-permission:'android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission:'android.permission.CHANGE_NETWORK_STATE' uses-permission:'android.permission.CHANGE_WIFI_STATE' uses-permission:'android.permission.BLUETOOTH' uses-permission:'android.permission.BLUETOOTH_ADMIN' uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED' uses-permission:'android.permission.NFC' application-label:'OBB Main Old Version' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Old Version' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/20.0.0/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000127014717152070027043 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/20.0.0/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000127014717152070027045 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/20.0.0/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000127014717152070027047 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/20.0.0/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000120614717152070026726 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/20.0.0/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000121114717152070026416 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' sdkVersion:'8' targetSdkVersion:'28' uses-permission:'android.permission.VIBRATE' application-label:'DroidTR keyboard' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR keyboard' icon='res/drawable/ic_launcher.png' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main ime supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/20.0.0/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000273014717152070025457 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' sdkVersion:'8' targetSdkVersion:'18' uses-permission:'android.permission.RECEIVE_SMS' uses-permission:'android.permission.SEND_SMS' uses-permission:'android.permission.READ_CONTACTS' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-permission:'android.permission.VIBRATE' application-label:'Battery level' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='Battery level' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission:'android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE','requested WRITE_EXTERNAL_STORAGE' uses-feature:'android.hardware.telephony' uses-implied-feature:'android.hardware.telephony','requested a telephony-related permission or feature' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2521868 fdroidserver-2.4.0/tests/build-tools/21.1.1/0000755000175000017500000000000014770510164017043 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.1/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001460314717152070025106 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' platformBuildVersionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.CALL_PHONE' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.READ_SMS' uses-permission: name='android.permission.READ_PHONE_STATE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.RECEIVE_MMS' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.WRITE_SMS' uses-permission: name='com.android.vending.BILLING' uses-permission: name='android.permission.INTERNET' uses-permission: name='com.sec.android.provider.badge.permission.READ' uses-permission: name='com.sec.android.provider.badge.permission.WRITE' uses-permission: name='com.htc.launcher.permission.READ_SETTINGS' uses-permission: name='com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission: name='com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission: name='com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission: name='com.majeur.launcher.permission.UPDATE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission: name='android.permission.READ_APP_BADGE' uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS' uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_READ' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_WRITE' application-label:'QKSMS' application-label-da:'QKSMS' application-label-fa:'QKSMS' application-label-ja:'QKSMS' application-label-de:'QKSMS' application-label-ne:'QKSMS' application-label-th:'QKSMS' application-label-zh:'QKSMS' application-label-fi:'QKSMS' application-label-hi:'QKSMS' application-label-vi:'QKSMS' application-label-sk:'QKSMS' application-label-uk:'QKSMS' application-label-nl:'QKSMS' application-label-pl:'QKSMS' application-label-tl:'QKSMS' application-label-bn:'QKSMS' application-label-in:'QKSMS' application-label-ko:'QKSMS' application-label-no:'QKSMS' application-label-ro:'QKSMS' application-label-ar:'QKSMS' application-label-fr:'QKSMS' application-label-hr:'QKSMS' application-label-sr:'QKSMS' application-label-tr:'QKSMS' application-label-ur:'QKSMS' application-label-cs:'QKSMS' application-label-es:'QKSMS' application-label-it:'QKSMS' application-label-lt:'QKSMS' application-label-pt:'QKSMS' application-label-hu:'QKSMS' application-label-ru:'QKSMS' application-label-sv:'QKSMS' application-label-iw:'QKSMS' application-label-zh-CN:'QKSMS' application-label-pt-BR:'QKSMS' application-label-ca:'QKSMS' application-label-ka:'QKSMS' application-label-pa:'QKSMS' application-label-ta:'QKSMS' application-label-nb:'QKSMS' application-label-be:'QKSMS' application-label-te:'QKSMS' application-label-af:'QKSMS' application-label-bg:'QKSMS' application-label-si:'QKSMS' application-label-kk:'QKSMS' application-label-mk:'QKSMS' application-label-el:'QKSMS' application-label-gl:'QKSMS' application-label-ml:'QKSMS' application-label-sl:'QKSMS' application-label-am:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-mn:'QKSMS' application-label-lo:'QKSMS' application-label-sq:'QKSMS' application-label-mr:'QKSMS' application-label-or:'QKSMS' application-label-sr-Latn:'QKSMS' application-label-as:'QKSMS' application-label-bs:'QKSMS' application-label-is:'QKSMS' application-label-ms:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-gu:'QKSMS' application-label-zu:'QKSMS' application-label-lv:'QKSMS' application-label-sw:'QKSMS' application-label-hy:'QKSMS' application-label-ky:'QKSMS' application-label-my:'QKSMS' application-label-az:'QKSMS' application-label-uz:'QKSMS' application-label-en-CA:'QKSMS' application-label-fr-CA:'QKSMS' application-label-en-GB:'QKSMS' application-label-en-XC:'QKSMS' application-label-zh-HK:'QKSMS' application-label-en-IN:'QKSMS' application-label-es-US:'QKSMS' application-label-pt-PT:'QKSMS' application-label-en-AU:'QKSMS' application-label-zh-TW:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' provides-component:'app-widget' main other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'da' 'fa' 'ja' 'de' 'ne' 'th' 'zh' 'fi' 'hi' 'vi' 'sk' 'uk' 'nl' 'pl' 'tl' 'bn' 'in' 'ko' 'no' 'ro' 'ar' 'fr' 'hr' 'sr' 'tr' 'ur' 'cs' 'es' 'it' 'lt' 'pt' 'hu' 'ru' 'sv' 'iw' 'zh-CN' 'pt-BR' 'ca' 'ka' 'pa' 'ta' 'nb' 'be' 'te' 'af' 'bg' 'si' 'kk' 'mk' 'el' 'gl' 'ml' 'sl' 'am' 'km' 'kn' 'mn' 'lo' 'sq' 'mr' 'or' 'sr-Latn' 'as' 'bs' 'is' 'ms' 'et' 'eu' 'gu' 'zu' 'lv' 'sw' 'hy' 'ky' 'my' 'az' 'uz' 'en-CA' 'fr-CA' 'en-GB' 'en-XC' 'zh-HK' 'en-IN' 'es-US' 'pt-PT' 'en-AU' 'zh-TW' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.1/aapt-output-com.politedroid_3.txt0000644000175000017500000000263014717152070025402 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.1/aapt-output-com.politedroid_4.txt0000644000175000017500000000263014717152070025403 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.1/aapt-output-com.politedroid_5.txt0000644000175000017500000000171214717152070025404 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' platformBuildVersionName='' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.1/aapt-output-com.politedroid_6.txt0000644000175000017500000000174714717152070025415 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.1/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000270314717152070027553 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label:'Duplicate Permisssions' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='Duplicate Permisssions' icon='res/drawable/ic_launcher.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.1/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000160214717152070027726 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.1/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000125314717152070030041 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-label:'Caffeine Tile' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='Caffeine Tile' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.1/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000230714717152070027073 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.NFC' application-label:'OBB Main Old Version' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Old Version' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.1/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000135214717152070027047 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.1/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000135214717152070027051 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.1/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000135214717152070027053 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.1/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000127014717152070026732 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.1/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000131114717152070026422 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' platformBuildVersionName='' sdkVersion:'8' targetSdkVersion:'28' uses-permission: name='android.permission.VIBRATE' application-label:'DroidTR keyboard' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR keyboard' icon='res/drawable/ic_launcher.png' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' provides-component:'ime' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.1/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000312214717152070025456 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' platformBuildVersionName='' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-label:'Battery level' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='Battery level' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2561867 fdroidserver-2.4.0/tests/build-tools/21.1.2/0000755000175000017500000000000014770510164017044 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.2/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001460314717152070025107 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' platformBuildVersionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.CALL_PHONE' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.READ_SMS' uses-permission: name='android.permission.READ_PHONE_STATE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.RECEIVE_MMS' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.WRITE_SMS' uses-permission: name='com.android.vending.BILLING' uses-permission: name='android.permission.INTERNET' uses-permission: name='com.sec.android.provider.badge.permission.READ' uses-permission: name='com.sec.android.provider.badge.permission.WRITE' uses-permission: name='com.htc.launcher.permission.READ_SETTINGS' uses-permission: name='com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission: name='com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission: name='com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission: name='com.majeur.launcher.permission.UPDATE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission: name='android.permission.READ_APP_BADGE' uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS' uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_READ' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_WRITE' application-label:'QKSMS' application-label-da:'QKSMS' application-label-fa:'QKSMS' application-label-ja:'QKSMS' application-label-de:'QKSMS' application-label-ne:'QKSMS' application-label-th:'QKSMS' application-label-zh:'QKSMS' application-label-fi:'QKSMS' application-label-hi:'QKSMS' application-label-vi:'QKSMS' application-label-sk:'QKSMS' application-label-uk:'QKSMS' application-label-nl:'QKSMS' application-label-pl:'QKSMS' application-label-tl:'QKSMS' application-label-bn:'QKSMS' application-label-in:'QKSMS' application-label-ko:'QKSMS' application-label-no:'QKSMS' application-label-ro:'QKSMS' application-label-ar:'QKSMS' application-label-fr:'QKSMS' application-label-hr:'QKSMS' application-label-sr:'QKSMS' application-label-tr:'QKSMS' application-label-ur:'QKSMS' application-label-cs:'QKSMS' application-label-es:'QKSMS' application-label-it:'QKSMS' application-label-lt:'QKSMS' application-label-pt:'QKSMS' application-label-hu:'QKSMS' application-label-ru:'QKSMS' application-label-sv:'QKSMS' application-label-iw:'QKSMS' application-label-zh-CN:'QKSMS' application-label-pt-BR:'QKSMS' application-label-ca:'QKSMS' application-label-ka:'QKSMS' application-label-pa:'QKSMS' application-label-ta:'QKSMS' application-label-nb:'QKSMS' application-label-be:'QKSMS' application-label-te:'QKSMS' application-label-af:'QKSMS' application-label-bg:'QKSMS' application-label-si:'QKSMS' application-label-kk:'QKSMS' application-label-mk:'QKSMS' application-label-el:'QKSMS' application-label-gl:'QKSMS' application-label-ml:'QKSMS' application-label-sl:'QKSMS' application-label-am:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-mn:'QKSMS' application-label-lo:'QKSMS' application-label-sq:'QKSMS' application-label-mr:'QKSMS' application-label-or:'QKSMS' application-label-sr-Latn:'QKSMS' application-label-as:'QKSMS' application-label-bs:'QKSMS' application-label-is:'QKSMS' application-label-ms:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-gu:'QKSMS' application-label-zu:'QKSMS' application-label-lv:'QKSMS' application-label-sw:'QKSMS' application-label-hy:'QKSMS' application-label-ky:'QKSMS' application-label-my:'QKSMS' application-label-az:'QKSMS' application-label-uz:'QKSMS' application-label-en-CA:'QKSMS' application-label-fr-CA:'QKSMS' application-label-en-GB:'QKSMS' application-label-en-XC:'QKSMS' application-label-zh-HK:'QKSMS' application-label-en-IN:'QKSMS' application-label-es-US:'QKSMS' application-label-pt-PT:'QKSMS' application-label-en-AU:'QKSMS' application-label-zh-TW:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' provides-component:'app-widget' main other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'da' 'fa' 'ja' 'de' 'ne' 'th' 'zh' 'fi' 'hi' 'vi' 'sk' 'uk' 'nl' 'pl' 'tl' 'bn' 'in' 'ko' 'no' 'ro' 'ar' 'fr' 'hr' 'sr' 'tr' 'ur' 'cs' 'es' 'it' 'lt' 'pt' 'hu' 'ru' 'sv' 'iw' 'zh-CN' 'pt-BR' 'ca' 'ka' 'pa' 'ta' 'nb' 'be' 'te' 'af' 'bg' 'si' 'kk' 'mk' 'el' 'gl' 'ml' 'sl' 'am' 'km' 'kn' 'mn' 'lo' 'sq' 'mr' 'or' 'sr-Latn' 'as' 'bs' 'is' 'ms' 'et' 'eu' 'gu' 'zu' 'lv' 'sw' 'hy' 'ky' 'my' 'az' 'uz' 'en-CA' 'fr-CA' 'en-GB' 'en-XC' 'zh-HK' 'en-IN' 'es-US' 'pt-PT' 'en-AU' 'zh-TW' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.2/aapt-output-com.politedroid_3.txt0000644000175000017500000000263014717152070025403 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.2/aapt-output-com.politedroid_4.txt0000644000175000017500000000263014717152070025404 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.2/aapt-output-com.politedroid_5.txt0000644000175000017500000000171214717152070025405 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' platformBuildVersionName='' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.2/aapt-output-com.politedroid_6.txt0000644000175000017500000000174714717152070025416 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.2/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000270314717152070027554 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label:'Duplicate Permisssions' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='Duplicate Permisssions' icon='res/drawable/ic_launcher.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.2/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000160214717152070027727 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.2/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000125314717152070030042 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-label:'Caffeine Tile' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='Caffeine Tile' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.2/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000230714717152070027074 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.NFC' application-label:'OBB Main Old Version' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Old Version' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.2/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000135214717152070027050 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.2/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000135214717152070027052 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.2/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000135214717152070027054 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.2/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000127014717152070026733 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.2/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000131114717152070026423 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' platformBuildVersionName='' sdkVersion:'8' targetSdkVersion:'28' uses-permission: name='android.permission.VIBRATE' application-label:'DroidTR keyboard' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR keyboard' icon='res/drawable/ic_launcher.png' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' provides-component:'ime' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/21.1.2/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000312214717152070025457 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' platformBuildVersionName='' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-label:'Battery level' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='Battery level' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2561867 fdroidserver-2.4.0/tests/build-tools/22.0.0/0000755000175000017500000000000014770510164017042 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.0/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001460314717152070025105 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' platformBuildVersionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.CALL_PHONE' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.READ_SMS' uses-permission: name='android.permission.READ_PHONE_STATE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.RECEIVE_MMS' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.WRITE_SMS' uses-permission: name='com.android.vending.BILLING' uses-permission: name='android.permission.INTERNET' uses-permission: name='com.sec.android.provider.badge.permission.READ' uses-permission: name='com.sec.android.provider.badge.permission.WRITE' uses-permission: name='com.htc.launcher.permission.READ_SETTINGS' uses-permission: name='com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission: name='com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission: name='com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission: name='com.majeur.launcher.permission.UPDATE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission: name='android.permission.READ_APP_BADGE' uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS' uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_READ' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_WRITE' application-label:'QKSMS' application-label-da:'QKSMS' application-label-fa:'QKSMS' application-label-ja:'QKSMS' application-label-de:'QKSMS' application-label-ne:'QKSMS' application-label-th:'QKSMS' application-label-zh:'QKSMS' application-label-fi:'QKSMS' application-label-hi:'QKSMS' application-label-vi:'QKSMS' application-label-sk:'QKSMS' application-label-uk:'QKSMS' application-label-nl:'QKSMS' application-label-pl:'QKSMS' application-label-tl:'QKSMS' application-label-bn:'QKSMS' application-label-in:'QKSMS' application-label-ko:'QKSMS' application-label-no:'QKSMS' application-label-ro:'QKSMS' application-label-ar:'QKSMS' application-label-fr:'QKSMS' application-label-hr:'QKSMS' application-label-sr:'QKSMS' application-label-tr:'QKSMS' application-label-ur:'QKSMS' application-label-cs:'QKSMS' application-label-es:'QKSMS' application-label-it:'QKSMS' application-label-lt:'QKSMS' application-label-pt:'QKSMS' application-label-hu:'QKSMS' application-label-ru:'QKSMS' application-label-sv:'QKSMS' application-label-iw:'QKSMS' application-label-zh-CN:'QKSMS' application-label-pt-BR:'QKSMS' application-label-ca:'QKSMS' application-label-ka:'QKSMS' application-label-pa:'QKSMS' application-label-ta:'QKSMS' application-label-nb:'QKSMS' application-label-be:'QKSMS' application-label-te:'QKSMS' application-label-af:'QKSMS' application-label-bg:'QKSMS' application-label-si:'QKSMS' application-label-kk:'QKSMS' application-label-mk:'QKSMS' application-label-el:'QKSMS' application-label-gl:'QKSMS' application-label-ml:'QKSMS' application-label-sl:'QKSMS' application-label-am:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-mn:'QKSMS' application-label-lo:'QKSMS' application-label-sq:'QKSMS' application-label-mr:'QKSMS' application-label-or:'QKSMS' application-label-sr-Latn:'QKSMS' application-label-as:'QKSMS' application-label-bs:'QKSMS' application-label-is:'QKSMS' application-label-ms:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-gu:'QKSMS' application-label-zu:'QKSMS' application-label-lv:'QKSMS' application-label-sw:'QKSMS' application-label-hy:'QKSMS' application-label-ky:'QKSMS' application-label-my:'QKSMS' application-label-az:'QKSMS' application-label-uz:'QKSMS' application-label-en-CA:'QKSMS' application-label-fr-CA:'QKSMS' application-label-en-GB:'QKSMS' application-label-en-XC:'QKSMS' application-label-zh-HK:'QKSMS' application-label-en-IN:'QKSMS' application-label-es-US:'QKSMS' application-label-pt-PT:'QKSMS' application-label-en-AU:'QKSMS' application-label-zh-TW:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' provides-component:'app-widget' main other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'da' 'fa' 'ja' 'de' 'ne' 'th' 'zh' 'fi' 'hi' 'vi' 'sk' 'uk' 'nl' 'pl' 'tl' 'bn' 'in' 'ko' 'no' 'ro' 'ar' 'fr' 'hr' 'sr' 'tr' 'ur' 'cs' 'es' 'it' 'lt' 'pt' 'hu' 'ru' 'sv' 'iw' 'zh-CN' 'pt-BR' 'ca' 'ka' 'pa' 'ta' 'nb' 'be' 'te' 'af' 'bg' 'si' 'kk' 'mk' 'el' 'gl' 'ml' 'sl' 'am' 'km' 'kn' 'mn' 'lo' 'sq' 'mr' 'or' 'sr-Latn' 'as' 'bs' 'is' 'ms' 'et' 'eu' 'gu' 'zu' 'lv' 'sw' 'hy' 'ky' 'my' 'az' 'uz' 'en-CA' 'fr-CA' 'en-GB' 'en-XC' 'zh-HK' 'en-IN' 'es-US' 'pt-PT' 'en-AU' 'zh-TW' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.0/aapt-output-com.politedroid_3.txt0000644000175000017500000000263014717152070025401 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.0/aapt-output-com.politedroid_4.txt0000644000175000017500000000263014717152070025402 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.0/aapt-output-com.politedroid_5.txt0000644000175000017500000000171214717152070025403 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' platformBuildVersionName='' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.0/aapt-output-com.politedroid_6.txt0000644000175000017500000000174714717152070025414 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.0/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000314314717152070027551 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label:'Duplicate Permisssions' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='Duplicate Permisssions' icon='res/drawable/ic_launcher.png' banner='res/drawable/banner.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.software.leanback' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.0/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000160214717152070027725 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000125314717152070030040 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-label:'Caffeine Tile' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='Caffeine Tile' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.0/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000277114717152070027077 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.NFC' application-label:'OBB Main Old Version' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Old Version' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' uses-feature-not-required: name='android.hardware.bluetooth' uses-feature-not-required: name='android.hardware.nfc' uses-feature-not-required: name='android.hardware.telephony' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.hardware.wifi' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.0/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000135214717152070027046 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.0/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000135214717152070027050 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.0/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000135214717152070027052 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.0/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000127014717152070026731 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.0/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000131114717152070026421 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' platformBuildVersionName='' sdkVersion:'8' targetSdkVersion:'28' uses-permission: name='android.permission.VIBRATE' application-label:'DroidTR keyboard' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR keyboard' icon='res/drawable/ic_launcher.png' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' provides-component:'ime' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.0/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000312214717152070025455 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' platformBuildVersionName='' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-label:'Battery level' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='Battery level' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2561867 fdroidserver-2.4.0/tests/build-tools/22.0.1/0000755000175000017500000000000014770510164017043 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.1/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001460314717152070025106 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' platformBuildVersionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.CALL_PHONE' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.READ_SMS' uses-permission: name='android.permission.READ_PHONE_STATE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.RECEIVE_MMS' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.WRITE_SMS' uses-permission: name='com.android.vending.BILLING' uses-permission: name='android.permission.INTERNET' uses-permission: name='com.sec.android.provider.badge.permission.READ' uses-permission: name='com.sec.android.provider.badge.permission.WRITE' uses-permission: name='com.htc.launcher.permission.READ_SETTINGS' uses-permission: name='com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission: name='com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission: name='com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission: name='com.majeur.launcher.permission.UPDATE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission: name='android.permission.READ_APP_BADGE' uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS' uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_READ' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_WRITE' application-label:'QKSMS' application-label-da:'QKSMS' application-label-fa:'QKSMS' application-label-ja:'QKSMS' application-label-de:'QKSMS' application-label-ne:'QKSMS' application-label-th:'QKSMS' application-label-zh:'QKSMS' application-label-fi:'QKSMS' application-label-hi:'QKSMS' application-label-vi:'QKSMS' application-label-sk:'QKSMS' application-label-uk:'QKSMS' application-label-nl:'QKSMS' application-label-pl:'QKSMS' application-label-tl:'QKSMS' application-label-bn:'QKSMS' application-label-in:'QKSMS' application-label-ko:'QKSMS' application-label-no:'QKSMS' application-label-ro:'QKSMS' application-label-ar:'QKSMS' application-label-fr:'QKSMS' application-label-hr:'QKSMS' application-label-sr:'QKSMS' application-label-tr:'QKSMS' application-label-ur:'QKSMS' application-label-cs:'QKSMS' application-label-es:'QKSMS' application-label-it:'QKSMS' application-label-lt:'QKSMS' application-label-pt:'QKSMS' application-label-hu:'QKSMS' application-label-ru:'QKSMS' application-label-sv:'QKSMS' application-label-iw:'QKSMS' application-label-zh-CN:'QKSMS' application-label-pt-BR:'QKSMS' application-label-ca:'QKSMS' application-label-ka:'QKSMS' application-label-pa:'QKSMS' application-label-ta:'QKSMS' application-label-nb:'QKSMS' application-label-be:'QKSMS' application-label-te:'QKSMS' application-label-af:'QKSMS' application-label-bg:'QKSMS' application-label-si:'QKSMS' application-label-kk:'QKSMS' application-label-mk:'QKSMS' application-label-el:'QKSMS' application-label-gl:'QKSMS' application-label-ml:'QKSMS' application-label-sl:'QKSMS' application-label-am:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-mn:'QKSMS' application-label-lo:'QKSMS' application-label-sq:'QKSMS' application-label-mr:'QKSMS' application-label-or:'QKSMS' application-label-sr-Latn:'QKSMS' application-label-as:'QKSMS' application-label-bs:'QKSMS' application-label-is:'QKSMS' application-label-ms:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-gu:'QKSMS' application-label-zu:'QKSMS' application-label-lv:'QKSMS' application-label-sw:'QKSMS' application-label-hy:'QKSMS' application-label-ky:'QKSMS' application-label-my:'QKSMS' application-label-az:'QKSMS' application-label-uz:'QKSMS' application-label-en-CA:'QKSMS' application-label-fr-CA:'QKSMS' application-label-en-GB:'QKSMS' application-label-en-XC:'QKSMS' application-label-zh-HK:'QKSMS' application-label-en-IN:'QKSMS' application-label-es-US:'QKSMS' application-label-pt-PT:'QKSMS' application-label-en-AU:'QKSMS' application-label-zh-TW:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' provides-component:'app-widget' main other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'da' 'fa' 'ja' 'de' 'ne' 'th' 'zh' 'fi' 'hi' 'vi' 'sk' 'uk' 'nl' 'pl' 'tl' 'bn' 'in' 'ko' 'no' 'ro' 'ar' 'fr' 'hr' 'sr' 'tr' 'ur' 'cs' 'es' 'it' 'lt' 'pt' 'hu' 'ru' 'sv' 'iw' 'zh-CN' 'pt-BR' 'ca' 'ka' 'pa' 'ta' 'nb' 'be' 'te' 'af' 'bg' 'si' 'kk' 'mk' 'el' 'gl' 'ml' 'sl' 'am' 'km' 'kn' 'mn' 'lo' 'sq' 'mr' 'or' 'sr-Latn' 'as' 'bs' 'is' 'ms' 'et' 'eu' 'gu' 'zu' 'lv' 'sw' 'hy' 'ky' 'my' 'az' 'uz' 'en-CA' 'fr-CA' 'en-GB' 'en-XC' 'zh-HK' 'en-IN' 'es-US' 'pt-PT' 'en-AU' 'zh-TW' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.1/aapt-output-com.politedroid_3.txt0000644000175000017500000000263014717152070025402 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.1/aapt-output-com.politedroid_4.txt0000644000175000017500000000263014717152070025403 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.1/aapt-output-com.politedroid_5.txt0000644000175000017500000000171214717152070025404 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' platformBuildVersionName='' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.1/aapt-output-com.politedroid_6.txt0000644000175000017500000000174714717152070025415 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.1/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000314314717152070027552 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label:'Duplicate Permisssions' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='Duplicate Permisssions' icon='res/drawable/ic_launcher.png' banner='res/drawable/banner.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.software.leanback' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.1/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000160214717152070027726 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000125314717152070030041 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-label:'Caffeine Tile' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='Caffeine Tile' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.1/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000277114717152070027100 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.NFC' application-label:'OBB Main Old Version' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Old Version' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' uses-feature-not-required: name='android.hardware.bluetooth' uses-feature-not-required: name='android.hardware.nfc' uses-feature-not-required: name='android.hardware.telephony' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.hardware.wifi' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.1/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000135214717152070027047 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.1/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000135214717152070027051 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.1/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000135214717152070027053 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.1/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000127014717152070026732 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.1/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000131114717152070026422 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' platformBuildVersionName='' sdkVersion:'8' targetSdkVersion:'28' uses-permission: name='android.permission.VIBRATE' application-label:'DroidTR keyboard' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR keyboard' icon='res/drawable/ic_launcher.png' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' provides-component:'ime' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/22.0.1/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000312214717152070025456 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' platformBuildVersionName='' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-label:'Battery level' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='Battery level' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.260187 fdroidserver-2.4.0/tests/build-tools/23.0.0/0000755000175000017500000000000014770510164017043 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/23.0.0/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001460314717152067025114 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' platformBuildVersionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.CALL_PHONE' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.READ_SMS' uses-permission: name='android.permission.READ_PHONE_STATE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.RECEIVE_MMS' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.WRITE_SMS' uses-permission: name='com.android.vending.BILLING' uses-permission: name='android.permission.INTERNET' uses-permission: name='com.sec.android.provider.badge.permission.READ' uses-permission: name='com.sec.android.provider.badge.permission.WRITE' uses-permission: name='com.htc.launcher.permission.READ_SETTINGS' uses-permission: name='com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission: name='com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission: name='com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission: name='com.majeur.launcher.permission.UPDATE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission: name='android.permission.READ_APP_BADGE' uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS' uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_READ' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_WRITE' application-label:'QKSMS' application-label-da:'QKSMS' application-label-fa:'QKSMS' application-label-ja:'QKSMS' application-label-de:'QKSMS' application-label-ne:'QKSMS' application-label-th:'QKSMS' application-label-zh:'QKSMS' application-label-fi:'QKSMS' application-label-hi:'QKSMS' application-label-vi:'QKSMS' application-label-sk:'QKSMS' application-label-uk:'QKSMS' application-label-nl:'QKSMS' application-label-pl:'QKSMS' application-label-tl:'QKSMS' application-label-bn:'QKSMS' application-label-in:'QKSMS' application-label-ko:'QKSMS' application-label-no:'QKSMS' application-label-ro:'QKSMS' application-label-ar:'QKSMS' application-label-fr:'QKSMS' application-label-hr:'QKSMS' application-label-sr:'QKSMS' application-label-tr:'QKSMS' application-label-ur:'QKSMS' application-label-cs:'QKSMS' application-label-es:'QKSMS' application-label-it:'QKSMS' application-label-lt:'QKSMS' application-label-pt:'QKSMS' application-label-hu:'QKSMS' application-label-ru:'QKSMS' application-label-sv:'QKSMS' application-label-iw:'QKSMS' application-label-zh-CN:'QKSMS' application-label-pt-BR:'QKSMS' application-label-ca:'QKSMS' application-label-ka:'QKSMS' application-label-pa:'QKSMS' application-label-ta:'QKSMS' application-label-nb:'QKSMS' application-label-be:'QKSMS' application-label-te:'QKSMS' application-label-af:'QKSMS' application-label-bg:'QKSMS' application-label-si:'QKSMS' application-label-kk:'QKSMS' application-label-mk:'QKSMS' application-label-el:'QKSMS' application-label-gl:'QKSMS' application-label-ml:'QKSMS' application-label-sl:'QKSMS' application-label-am:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-mn:'QKSMS' application-label-lo:'QKSMS' application-label-sq:'QKSMS' application-label-mr:'QKSMS' application-label-or:'QKSMS' application-label-sr-Latn:'QKSMS' application-label-as:'QKSMS' application-label-bs:'QKSMS' application-label-is:'QKSMS' application-label-ms:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-gu:'QKSMS' application-label-zu:'QKSMS' application-label-lv:'QKSMS' application-label-sw:'QKSMS' application-label-hy:'QKSMS' application-label-ky:'QKSMS' application-label-my:'QKSMS' application-label-az:'QKSMS' application-label-uz:'QKSMS' application-label-en-CA:'QKSMS' application-label-fr-CA:'QKSMS' application-label-en-GB:'QKSMS' application-label-en-XC:'QKSMS' application-label-zh-HK:'QKSMS' application-label-en-IN:'QKSMS' application-label-es-US:'QKSMS' application-label-pt-PT:'QKSMS' application-label-en-AU:'QKSMS' application-label-zh-TW:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' provides-component:'app-widget' main other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'da' 'fa' 'ja' 'de' 'ne' 'th' 'zh' 'fi' 'hi' 'vi' 'sk' 'uk' 'nl' 'pl' 'tl' 'bn' 'in' 'ko' 'no' 'ro' 'ar' 'fr' 'hr' 'sr' 'tr' 'ur' 'cs' 'es' 'it' 'lt' 'pt' 'hu' 'ru' 'sv' 'iw' 'zh-CN' 'pt-BR' 'ca' 'ka' 'pa' 'ta' 'nb' 'be' 'te' 'af' 'bg' 'si' 'kk' 'mk' 'el' 'gl' 'ml' 'sl' 'am' 'km' 'kn' 'mn' 'lo' 'sq' 'mr' 'or' 'sr-Latn' 'as' 'bs' 'is' 'ms' 'et' 'eu' 'gu' 'zu' 'lv' 'sw' 'hy' 'ky' 'my' 'az' 'uz' 'en-CA' 'fr-CA' 'en-GB' 'en-XC' 'zh-HK' 'en-IN' 'es-US' 'pt-PT' 'en-AU' 'zh-TW' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/23.0.0/aapt-output-com.politedroid_3.txt0000644000175000017500000000263014717152067025410 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/23.0.0/aapt-output-com.politedroid_4.txt0000644000175000017500000000263014717152067025411 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/23.0.0/aapt-output-com.politedroid_5.txt0000644000175000017500000000171214717152067025412 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' platformBuildVersionName='' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/23.0.0/aapt-output-com.politedroid_6.txt0000644000175000017500000000174714717152067025423 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/23.0.0/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000314314717152067027560 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label:'Duplicate Permisssions' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='Duplicate Permisssions' icon='res/drawable/ic_launcher.png' banner='res/drawable/banner.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.software.leanback' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/23.0.0/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000160214717152067027734 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/23.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000125314717152067030047 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-label:'Caffeine Tile' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='Caffeine Tile' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/23.0.0/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000277114717152067027106 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.NFC' application-label:'OBB Main Old Version' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Old Version' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' uses-feature-not-required: name='android.hardware.bluetooth' uses-feature-not-required: name='android.hardware.nfc' uses-feature-not-required: name='android.hardware.telephony' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.hardware.wifi' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/23.0.0/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000135214717152067027055 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/23.0.0/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000135214717152067027057 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/23.0.0/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000135214717152067027061 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/23.0.0/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000127014717152067026740 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/23.0.0/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000131114717152067026430 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' platformBuildVersionName='' sdkVersion:'8' targetSdkVersion:'28' uses-permission: name='android.permission.VIBRATE' application-label:'DroidTR keyboard' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR keyboard' icon='res/drawable/ic_launcher.png' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' provides-component:'ime' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/23.0.0/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000312214717152067025464 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' platformBuildVersionName='' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-label:'Battery level' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='Battery level' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.260187 fdroidserver-2.4.0/tests/build-tools/23.0.1/0000755000175000017500000000000014770510164017044 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.1/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001460314717152070025107 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' platformBuildVersionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.CALL_PHONE' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.READ_SMS' uses-permission: name='android.permission.READ_PHONE_STATE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.RECEIVE_MMS' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.WRITE_SMS' uses-permission: name='com.android.vending.BILLING' uses-permission: name='android.permission.INTERNET' uses-permission: name='com.sec.android.provider.badge.permission.READ' uses-permission: name='com.sec.android.provider.badge.permission.WRITE' uses-permission: name='com.htc.launcher.permission.READ_SETTINGS' uses-permission: name='com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission: name='com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission: name='com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission: name='com.majeur.launcher.permission.UPDATE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission: name='android.permission.READ_APP_BADGE' uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS' uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_READ' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_WRITE' application-label:'QKSMS' application-label-da:'QKSMS' application-label-fa:'QKSMS' application-label-ja:'QKSMS' application-label-de:'QKSMS' application-label-ne:'QKSMS' application-label-th:'QKSMS' application-label-zh:'QKSMS' application-label-fi:'QKSMS' application-label-hi:'QKSMS' application-label-vi:'QKSMS' application-label-sk:'QKSMS' application-label-uk:'QKSMS' application-label-nl:'QKSMS' application-label-pl:'QKSMS' application-label-tl:'QKSMS' application-label-bn:'QKSMS' application-label-in:'QKSMS' application-label-ko:'QKSMS' application-label-no:'QKSMS' application-label-ro:'QKSMS' application-label-ar:'QKSMS' application-label-fr:'QKSMS' application-label-hr:'QKSMS' application-label-sr:'QKSMS' application-label-tr:'QKSMS' application-label-ur:'QKSMS' application-label-cs:'QKSMS' application-label-es:'QKSMS' application-label-it:'QKSMS' application-label-lt:'QKSMS' application-label-pt:'QKSMS' application-label-hu:'QKSMS' application-label-ru:'QKSMS' application-label-sv:'QKSMS' application-label-iw:'QKSMS' application-label-zh-CN:'QKSMS' application-label-pt-BR:'QKSMS' application-label-ca:'QKSMS' application-label-ka:'QKSMS' application-label-pa:'QKSMS' application-label-ta:'QKSMS' application-label-nb:'QKSMS' application-label-be:'QKSMS' application-label-te:'QKSMS' application-label-af:'QKSMS' application-label-bg:'QKSMS' application-label-si:'QKSMS' application-label-kk:'QKSMS' application-label-mk:'QKSMS' application-label-el:'QKSMS' application-label-gl:'QKSMS' application-label-ml:'QKSMS' application-label-sl:'QKSMS' application-label-am:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-mn:'QKSMS' application-label-lo:'QKSMS' application-label-sq:'QKSMS' application-label-mr:'QKSMS' application-label-or:'QKSMS' application-label-sr-Latn:'QKSMS' application-label-as:'QKSMS' application-label-bs:'QKSMS' application-label-is:'QKSMS' application-label-ms:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-gu:'QKSMS' application-label-zu:'QKSMS' application-label-lv:'QKSMS' application-label-sw:'QKSMS' application-label-hy:'QKSMS' application-label-ky:'QKSMS' application-label-my:'QKSMS' application-label-az:'QKSMS' application-label-uz:'QKSMS' application-label-en-CA:'QKSMS' application-label-fr-CA:'QKSMS' application-label-en-GB:'QKSMS' application-label-en-XC:'QKSMS' application-label-zh-HK:'QKSMS' application-label-en-IN:'QKSMS' application-label-es-US:'QKSMS' application-label-pt-PT:'QKSMS' application-label-en-AU:'QKSMS' application-label-zh-TW:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' provides-component:'app-widget' main other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'da' 'fa' 'ja' 'de' 'ne' 'th' 'zh' 'fi' 'hi' 'vi' 'sk' 'uk' 'nl' 'pl' 'tl' 'bn' 'in' 'ko' 'no' 'ro' 'ar' 'fr' 'hr' 'sr' 'tr' 'ur' 'cs' 'es' 'it' 'lt' 'pt' 'hu' 'ru' 'sv' 'iw' 'zh-CN' 'pt-BR' 'ca' 'ka' 'pa' 'ta' 'nb' 'be' 'te' 'af' 'bg' 'si' 'kk' 'mk' 'el' 'gl' 'ml' 'sl' 'am' 'km' 'kn' 'mn' 'lo' 'sq' 'mr' 'or' 'sr-Latn' 'as' 'bs' 'is' 'ms' 'et' 'eu' 'gu' 'zu' 'lv' 'sw' 'hy' 'ky' 'my' 'az' 'uz' 'en-CA' 'fr-CA' 'en-GB' 'en-XC' 'zh-HK' 'en-IN' 'es-US' 'pt-PT' 'en-AU' 'zh-TW' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.1/aapt-output-com.politedroid_3.txt0000644000175000017500000000263014717152070025403 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.1/aapt-output-com.politedroid_4.txt0000644000175000017500000000263014717152070025404 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.1/aapt-output-com.politedroid_5.txt0000644000175000017500000000171214717152070025405 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' platformBuildVersionName='' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.1/aapt-output-com.politedroid_6.txt0000644000175000017500000000174714717152070025416 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.1/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000314314717152070027553 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label:'Duplicate Permisssions' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='Duplicate Permisssions' icon='res/drawable/ic_launcher.png' banner='res/drawable/banner.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.software.leanback' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.1/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000160214717152070027727 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000125314717152070030042 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-label:'Caffeine Tile' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='Caffeine Tile' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.1/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000277114717152070027101 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.NFC' application-label:'OBB Main Old Version' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Old Version' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' uses-feature-not-required: name='android.hardware.bluetooth' uses-feature-not-required: name='android.hardware.nfc' uses-feature-not-required: name='android.hardware.telephony' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.hardware.wifi' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.1/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000135214717152070027050 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.1/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000135214717152070027052 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.1/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000135214717152070027054 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.1/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000127014717152070026733 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.1/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000131114717152070026423 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' platformBuildVersionName='' sdkVersion:'8' targetSdkVersion:'28' uses-permission: name='android.permission.VIBRATE' application-label:'DroidTR keyboard' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR keyboard' icon='res/drawable/ic_launcher.png' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' provides-component:'ime' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.1/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000312214717152070025457 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' platformBuildVersionName='' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-label:'Battery level' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='Battery level' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.260187 fdroidserver-2.4.0/tests/build-tools/23.0.2/0000755000175000017500000000000014770510164017045 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.2/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001460314717152070025110 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' platformBuildVersionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.CALL_PHONE' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.READ_SMS' uses-permission: name='android.permission.READ_PHONE_STATE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.RECEIVE_MMS' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.WRITE_SMS' uses-permission: name='com.android.vending.BILLING' uses-permission: name='android.permission.INTERNET' uses-permission: name='com.sec.android.provider.badge.permission.READ' uses-permission: name='com.sec.android.provider.badge.permission.WRITE' uses-permission: name='com.htc.launcher.permission.READ_SETTINGS' uses-permission: name='com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission: name='com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission: name='com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission: name='com.majeur.launcher.permission.UPDATE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission: name='android.permission.READ_APP_BADGE' uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS' uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_READ' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_WRITE' application-label:'QKSMS' application-label-da:'QKSMS' application-label-fa:'QKSMS' application-label-ja:'QKSMS' application-label-de:'QKSMS' application-label-ne:'QKSMS' application-label-th:'QKSMS' application-label-zh:'QKSMS' application-label-fi:'QKSMS' application-label-hi:'QKSMS' application-label-vi:'QKSMS' application-label-sk:'QKSMS' application-label-uk:'QKSMS' application-label-nl:'QKSMS' application-label-pl:'QKSMS' application-label-tl:'QKSMS' application-label-bn:'QKSMS' application-label-in:'QKSMS' application-label-ko:'QKSMS' application-label-no:'QKSMS' application-label-ro:'QKSMS' application-label-ar:'QKSMS' application-label-fr:'QKSMS' application-label-hr:'QKSMS' application-label-sr:'QKSMS' application-label-tr:'QKSMS' application-label-ur:'QKSMS' application-label-cs:'QKSMS' application-label-es:'QKSMS' application-label-it:'QKSMS' application-label-lt:'QKSMS' application-label-pt:'QKSMS' application-label-hu:'QKSMS' application-label-ru:'QKSMS' application-label-sv:'QKSMS' application-label-iw:'QKSMS' application-label-zh-CN:'QKSMS' application-label-pt-BR:'QKSMS' application-label-ca:'QKSMS' application-label-ka:'QKSMS' application-label-pa:'QKSMS' application-label-ta:'QKSMS' application-label-nb:'QKSMS' application-label-be:'QKSMS' application-label-te:'QKSMS' application-label-af:'QKSMS' application-label-bg:'QKSMS' application-label-si:'QKSMS' application-label-kk:'QKSMS' application-label-mk:'QKSMS' application-label-el:'QKSMS' application-label-gl:'QKSMS' application-label-ml:'QKSMS' application-label-sl:'QKSMS' application-label-am:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-mn:'QKSMS' application-label-lo:'QKSMS' application-label-sq:'QKSMS' application-label-mr:'QKSMS' application-label-or:'QKSMS' application-label-sr-Latn:'QKSMS' application-label-as:'QKSMS' application-label-bs:'QKSMS' application-label-is:'QKSMS' application-label-ms:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-gu:'QKSMS' application-label-zu:'QKSMS' application-label-lv:'QKSMS' application-label-sw:'QKSMS' application-label-hy:'QKSMS' application-label-ky:'QKSMS' application-label-my:'QKSMS' application-label-az:'QKSMS' application-label-uz:'QKSMS' application-label-en-CA:'QKSMS' application-label-fr-CA:'QKSMS' application-label-en-GB:'QKSMS' application-label-en-XC:'QKSMS' application-label-zh-HK:'QKSMS' application-label-en-IN:'QKSMS' application-label-es-US:'QKSMS' application-label-pt-PT:'QKSMS' application-label-en-AU:'QKSMS' application-label-zh-TW:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' provides-component:'app-widget' main other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'da' 'fa' 'ja' 'de' 'ne' 'th' 'zh' 'fi' 'hi' 'vi' 'sk' 'uk' 'nl' 'pl' 'tl' 'bn' 'in' 'ko' 'no' 'ro' 'ar' 'fr' 'hr' 'sr' 'tr' 'ur' 'cs' 'es' 'it' 'lt' 'pt' 'hu' 'ru' 'sv' 'iw' 'zh-CN' 'pt-BR' 'ca' 'ka' 'pa' 'ta' 'nb' 'be' 'te' 'af' 'bg' 'si' 'kk' 'mk' 'el' 'gl' 'ml' 'sl' 'am' 'km' 'kn' 'mn' 'lo' 'sq' 'mr' 'or' 'sr-Latn' 'as' 'bs' 'is' 'ms' 'et' 'eu' 'gu' 'zu' 'lv' 'sw' 'hy' 'ky' 'my' 'az' 'uz' 'en-CA' 'fr-CA' 'en-GB' 'en-XC' 'zh-HK' 'en-IN' 'es-US' 'pt-PT' 'en-AU' 'zh-TW' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.2/aapt-output-com.politedroid_3.txt0000644000175000017500000000263014717152070025404 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.2/aapt-output-com.politedroid_4.txt0000644000175000017500000000263014717152070025405 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.2/aapt-output-com.politedroid_5.txt0000644000175000017500000000171214717152070025406 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' platformBuildVersionName='' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.2/aapt-output-com.politedroid_6.txt0000644000175000017500000000174714717152070025417 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.2/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000314314717152070027554 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label:'Duplicate Permisssions' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='Duplicate Permisssions' icon='res/drawable/ic_launcher.png' banner='res/drawable/banner.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.software.leanback' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.2/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000160214717152070027730 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000125314717152070030043 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-label:'Caffeine Tile' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='Caffeine Tile' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.2/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000277114717152070027102 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.NFC' application-label:'OBB Main Old Version' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Old Version' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' uses-feature-not-required: name='android.hardware.bluetooth' uses-feature-not-required: name='android.hardware.nfc' uses-feature-not-required: name='android.hardware.telephony' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.hardware.wifi' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.2/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000135214717152070027051 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.2/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000135214717152070027053 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.2/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000135214717152070027055 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.2/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000127014717152070026734 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.2/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000131114717152070026424 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' platformBuildVersionName='' sdkVersion:'8' targetSdkVersion:'28' uses-permission: name='android.permission.VIBRATE' application-label:'DroidTR keyboard' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR keyboard' icon='res/drawable/ic_launcher.png' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' provides-component:'ime' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.2/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000312214717152070025460 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' platformBuildVersionName='' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-label:'Battery level' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='Battery level' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2641869 fdroidserver-2.4.0/tests/build-tools/23.0.3/0000755000175000017500000000000014770510164017046 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.3/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001460314717152070025111 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' platformBuildVersionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.CALL_PHONE' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.READ_SMS' uses-permission: name='android.permission.READ_PHONE_STATE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.RECEIVE_MMS' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.WRITE_SMS' uses-permission: name='com.android.vending.BILLING' uses-permission: name='android.permission.INTERNET' uses-permission: name='com.sec.android.provider.badge.permission.READ' uses-permission: name='com.sec.android.provider.badge.permission.WRITE' uses-permission: name='com.htc.launcher.permission.READ_SETTINGS' uses-permission: name='com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission: name='com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission: name='com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission: name='com.majeur.launcher.permission.UPDATE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission: name='android.permission.READ_APP_BADGE' uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS' uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_READ' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_WRITE' application-label:'QKSMS' application-label-da:'QKSMS' application-label-fa:'QKSMS' application-label-ja:'QKSMS' application-label-de:'QKSMS' application-label-ne:'QKSMS' application-label-th:'QKSMS' application-label-zh:'QKSMS' application-label-fi:'QKSMS' application-label-hi:'QKSMS' application-label-vi:'QKSMS' application-label-sk:'QKSMS' application-label-uk:'QKSMS' application-label-nl:'QKSMS' application-label-pl:'QKSMS' application-label-tl:'QKSMS' application-label-bn:'QKSMS' application-label-in:'QKSMS' application-label-ko:'QKSMS' application-label-no:'QKSMS' application-label-ro:'QKSMS' application-label-ar:'QKSMS' application-label-fr:'QKSMS' application-label-hr:'QKSMS' application-label-sr:'QKSMS' application-label-tr:'QKSMS' application-label-ur:'QKSMS' application-label-cs:'QKSMS' application-label-es:'QKSMS' application-label-it:'QKSMS' application-label-lt:'QKSMS' application-label-pt:'QKSMS' application-label-hu:'QKSMS' application-label-ru:'QKSMS' application-label-sv:'QKSMS' application-label-iw:'QKSMS' application-label-zh-CN:'QKSMS' application-label-pt-BR:'QKSMS' application-label-ca:'QKSMS' application-label-ka:'QKSMS' application-label-pa:'QKSMS' application-label-ta:'QKSMS' application-label-nb:'QKSMS' application-label-be:'QKSMS' application-label-te:'QKSMS' application-label-af:'QKSMS' application-label-bg:'QKSMS' application-label-si:'QKSMS' application-label-kk:'QKSMS' application-label-mk:'QKSMS' application-label-el:'QKSMS' application-label-gl:'QKSMS' application-label-ml:'QKSMS' application-label-sl:'QKSMS' application-label-am:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-mn:'QKSMS' application-label-lo:'QKSMS' application-label-sq:'QKSMS' application-label-mr:'QKSMS' application-label-or:'QKSMS' application-label-sr-Latn:'QKSMS' application-label-as:'QKSMS' application-label-bs:'QKSMS' application-label-is:'QKSMS' application-label-ms:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-gu:'QKSMS' application-label-zu:'QKSMS' application-label-lv:'QKSMS' application-label-sw:'QKSMS' application-label-hy:'QKSMS' application-label-ky:'QKSMS' application-label-my:'QKSMS' application-label-az:'QKSMS' application-label-uz:'QKSMS' application-label-en-CA:'QKSMS' application-label-fr-CA:'QKSMS' application-label-en-GB:'QKSMS' application-label-en-XC:'QKSMS' application-label-zh-HK:'QKSMS' application-label-en-IN:'QKSMS' application-label-es-US:'QKSMS' application-label-pt-PT:'QKSMS' application-label-en-AU:'QKSMS' application-label-zh-TW:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' provides-component:'app-widget' main other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'da' 'fa' 'ja' 'de' 'ne' 'th' 'zh' 'fi' 'hi' 'vi' 'sk' 'uk' 'nl' 'pl' 'tl' 'bn' 'in' 'ko' 'no' 'ro' 'ar' 'fr' 'hr' 'sr' 'tr' 'ur' 'cs' 'es' 'it' 'lt' 'pt' 'hu' 'ru' 'sv' 'iw' 'zh-CN' 'pt-BR' 'ca' 'ka' 'pa' 'ta' 'nb' 'be' 'te' 'af' 'bg' 'si' 'kk' 'mk' 'el' 'gl' 'ml' 'sl' 'am' 'km' 'kn' 'mn' 'lo' 'sq' 'mr' 'or' 'sr-Latn' 'as' 'bs' 'is' 'ms' 'et' 'eu' 'gu' 'zu' 'lv' 'sw' 'hy' 'ky' 'my' 'az' 'uz' 'en-CA' 'fr-CA' 'en-GB' 'en-XC' 'zh-HK' 'en-IN' 'es-US' 'pt-PT' 'en-AU' 'zh-TW' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.3/aapt-output-com.politedroid_3.txt0000644000175000017500000000263014717152070025405 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.3/aapt-output-com.politedroid_4.txt0000644000175000017500000000263014717152070025406 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.3/aapt-output-com.politedroid_5.txt0000644000175000017500000000171214717152070025407 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' platformBuildVersionName='' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.3/aapt-output-com.politedroid_6.txt0000644000175000017500000000174714717152070025420 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.3/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000343014717152070027554 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission-sdk-23: name='android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS' maxSdkVersion='27' uses-permission-sdk-23: name='android.permission.REQUEST_INSTALL_PACKAGES' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label:'Duplicate Permisssions' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='Duplicate Permisssions' icon='res/drawable/ic_launcher.png' banner='res/drawable/banner.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.software.leanback' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.3/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000160214717152070027731 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000125314717152070030044 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-label:'Caffeine Tile' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='Caffeine Tile' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.3/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000322614717152070027077 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission-sdk-23: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission-sdk-23: name='android.permission.WRITE_SETTINGS' maxSdkVersion='25' uses-permission: name='android.permission.NFC' application-label:'OBB Main Old Version' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Old Version' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' uses-feature-not-required: name='android.hardware.bluetooth' uses-feature-not-required: name='android.hardware.nfc' uses-feature-not-required: name='android.hardware.telephony' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.hardware.wifi' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.3/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000135214717152070027052 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.3/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000135214717152070027054 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.3/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000135214717152070027056 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.3/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000127014717152070026735 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.3/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000131114717152070026425 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' platformBuildVersionName='' sdkVersion:'8' targetSdkVersion:'28' uses-permission: name='android.permission.VIBRATE' application-label:'DroidTR keyboard' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR keyboard' icon='res/drawable/ic_launcher.png' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' provides-component:'ime' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/23.0.3/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000312214717152070025461 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' platformBuildVersionName='' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-label:'Battery level' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='Battery level' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2641869 fdroidserver-2.4.0/tests/build-tools/24.0.0/0000755000175000017500000000000014770510164017044 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.0/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001454114717152070025110 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' platformBuildVersionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.CALL_PHONE' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.READ_SMS' uses-permission: name='android.permission.READ_PHONE_STATE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.RECEIVE_MMS' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.WRITE_SMS' uses-permission: name='com.android.vending.BILLING' uses-permission: name='android.permission.INTERNET' uses-permission: name='com.sec.android.provider.badge.permission.READ' uses-permission: name='com.sec.android.provider.badge.permission.WRITE' uses-permission: name='com.htc.launcher.permission.READ_SETTINGS' uses-permission: name='com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission: name='com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission: name='com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission: name='com.majeur.launcher.permission.UPDATE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission: name='android.permission.READ_APP_BADGE' uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS' uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_READ' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_WRITE' application-label-af:'QKSMS' application-label-am:'QKSMS' application-label-ar:'QKSMS' application-label-as:'QKSMS' application-label-az:'QKSMS' application-label-be:'QKSMS' application-label-bg:'QKSMS' application-label-bn:'QKSMS' application-label-bs:'QKSMS' application-label-ca:'QKSMS' application-label-cs:'QKSMS' application-label-da:'QKSMS' application-label-de:'QKSMS' application-label-el:'QKSMS' application-label-en-AU:'QKSMS' application-label-en-CA:'QKSMS' application-label-en-GB:'QKSMS' application-label-en-IN:'QKSMS' application-label-en-XC:'QKSMS' application-label-es:'QKSMS' application-label-es-US:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-fa:'QKSMS' application-label-fi:'QKSMS' application-label-fr:'QKSMS' application-label-fr-CA:'QKSMS' application-label-gl:'QKSMS' application-label-gu:'QKSMS' application-label-hi:'QKSMS' application-label-hr:'QKSMS' application-label-hu:'QKSMS' application-label-hy:'QKSMS' application-label-in:'QKSMS' application-label-is:'QKSMS' application-label-it:'QKSMS' application-label-iw:'QKSMS' application-label-ja:'QKSMS' application-label-ka:'QKSMS' application-label-kk:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-ko:'QKSMS' application-label-ky:'QKSMS' application-label-lo:'QKSMS' application-label-lt:'QKSMS' application-label-lv:'QKSMS' application-label-mk:'QKSMS' application-label-ml:'QKSMS' application-label-mn:'QKSMS' application-label-mr:'QKSMS' application-label-ms:'QKSMS' application-label-my:'QKSMS' application-label-nb:'QKSMS' application-label-ne:'QKSMS' application-label-nl:'QKSMS' application-label-no:'QKSMS' application-label-or:'QKSMS' application-label-pa:'QKSMS' application-label-pl:'QKSMS' application-label-pt:'QKSMS' application-label-pt-BR:'QKSMS' application-label-pt-PT:'QKSMS' application-label-ro:'QKSMS' application-label-ru:'QKSMS' application-label-si:'QKSMS' application-label-sk:'QKSMS' application-label-sl:'QKSMS' application-label-sq:'QKSMS' application-label-sr:'QKSMS' application-label-sr-Latn:'QKSMS' application-label-sv:'QKSMS' application-label-sw:'QKSMS' application-label-ta:'QKSMS' application-label-te:'QKSMS' application-label-th:'QKSMS' application-label-tl:'QKSMS' application-label-tr:'QKSMS' application-label-uk:'QKSMS' application-label-ur:'QKSMS' application-label-uz:'QKSMS' application-label-vi:'QKSMS' application-label-zh:'QKSMS' application-label-zh-CN:'QKSMS' application-label-zh-HK:'QKSMS' application-label-zh-TW:'QKSMS' application-label-zu:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' provides-component:'app-widget' main other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: 'af' 'am' 'ar' 'as' 'az' 'be' 'bg' 'bn' 'bs' 'ca' 'cs' 'da' 'de' 'el' 'en-AU' 'en-CA' 'en-GB' 'en-IN' 'en-XC' 'es' 'es-US' 'et' 'eu' 'fa' 'fi' 'fr' 'fr-CA' 'gl' 'gu' 'hi' 'hr' 'hu' 'hy' 'in' 'is' 'it' 'iw' 'ja' 'ka' 'kk' 'km' 'kn' 'ko' 'ky' 'lo' 'lt' 'lv' 'mk' 'ml' 'mn' 'mr' 'ms' 'my' 'nb' 'ne' 'nl' 'no' 'or' 'pa' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'si' 'sk' 'sl' 'sq' 'sr' 'sr-Latn' 'sv' 'sw' 'ta' 'te' 'th' 'tl' 'tr' 'uk' 'ur' 'uz' 'vi' 'zh' 'zh-CN' 'zh-HK' 'zh-TW' 'zu' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.0/aapt-output-com.politedroid_3.txt0000644000175000017500000000254314717152070025406 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.0/aapt-output-com.politedroid_4.txt0000644000175000017500000000254314717152070025407 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.0/aapt-output-com.politedroid_5.txt0000644000175000017500000000162514717152070025410 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' platformBuildVersionName='' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.0/aapt-output-com.politedroid_6.txt0000644000175000017500000000166214717152070025412 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.0/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000334614717152070027560 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission-sdk-23: name='android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS' maxSdkVersion='27' uses-permission-sdk-23: name='android.permission.REQUEST_INSTALL_PACKAGES' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='أذونات مكررة' icon='res/drawable/ic_launcher.png' banner='res/drawable/banner.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.software.leanback' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.0/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000132714717152070027733 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000116414717152070030043 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.0/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000312114717152070027067 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission-sdk-23: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission-sdk-23: name='android.permission.WRITE_SETTINGS' maxSdkVersion='25' uses-permission: name='android.permission.NFC' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' uses-feature-not-required: name='android.hardware.bluetooth' uses-feature-not-required: name='android.hardware.nfc' uses-feature-not-required: name='android.hardware.telephony' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.hardware.wifi' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.0/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000124314717152070027047 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.0/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000124314717152070027051 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.0/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000124314717152070027053 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.0/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000122114717152070026727 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.0/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000123214717152070026425 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' platformBuildVersionName='' sdkVersion:'8' targetSdkVersion:'28' uses-permission: name='android.permission.VIBRATE' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR Klavye' icon='res/drawable/ic_launcher.png' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' provides-component:'ime' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.0/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000303314717152070025460 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' platformBuildVersionName='' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2681868 fdroidserver-2.4.0/tests/build-tools/24.0.1/0000755000175000017500000000000014770510164017045 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.1/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001454114717152070025111 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' platformBuildVersionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.CALL_PHONE' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.READ_SMS' uses-permission: name='android.permission.READ_PHONE_STATE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.RECEIVE_MMS' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.WRITE_SMS' uses-permission: name='com.android.vending.BILLING' uses-permission: name='android.permission.INTERNET' uses-permission: name='com.sec.android.provider.badge.permission.READ' uses-permission: name='com.sec.android.provider.badge.permission.WRITE' uses-permission: name='com.htc.launcher.permission.READ_SETTINGS' uses-permission: name='com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission: name='com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission: name='com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission: name='com.majeur.launcher.permission.UPDATE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission: name='android.permission.READ_APP_BADGE' uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS' uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_READ' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_WRITE' application-label-af:'QKSMS' application-label-am:'QKSMS' application-label-ar:'QKSMS' application-label-as:'QKSMS' application-label-az:'QKSMS' application-label-be:'QKSMS' application-label-bg:'QKSMS' application-label-bn:'QKSMS' application-label-bs:'QKSMS' application-label-ca:'QKSMS' application-label-cs:'QKSMS' application-label-da:'QKSMS' application-label-de:'QKSMS' application-label-el:'QKSMS' application-label-en-AU:'QKSMS' application-label-en-CA:'QKSMS' application-label-en-GB:'QKSMS' application-label-en-IN:'QKSMS' application-label-en-XC:'QKSMS' application-label-es:'QKSMS' application-label-es-US:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-fa:'QKSMS' application-label-fi:'QKSMS' application-label-fr:'QKSMS' application-label-fr-CA:'QKSMS' application-label-gl:'QKSMS' application-label-gu:'QKSMS' application-label-hi:'QKSMS' application-label-hr:'QKSMS' application-label-hu:'QKSMS' application-label-hy:'QKSMS' application-label-in:'QKSMS' application-label-is:'QKSMS' application-label-it:'QKSMS' application-label-iw:'QKSMS' application-label-ja:'QKSMS' application-label-ka:'QKSMS' application-label-kk:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-ko:'QKSMS' application-label-ky:'QKSMS' application-label-lo:'QKSMS' application-label-lt:'QKSMS' application-label-lv:'QKSMS' application-label-mk:'QKSMS' application-label-ml:'QKSMS' application-label-mn:'QKSMS' application-label-mr:'QKSMS' application-label-ms:'QKSMS' application-label-my:'QKSMS' application-label-nb:'QKSMS' application-label-ne:'QKSMS' application-label-nl:'QKSMS' application-label-no:'QKSMS' application-label-or:'QKSMS' application-label-pa:'QKSMS' application-label-pl:'QKSMS' application-label-pt:'QKSMS' application-label-pt-BR:'QKSMS' application-label-pt-PT:'QKSMS' application-label-ro:'QKSMS' application-label-ru:'QKSMS' application-label-si:'QKSMS' application-label-sk:'QKSMS' application-label-sl:'QKSMS' application-label-sq:'QKSMS' application-label-sr:'QKSMS' application-label-sr-Latn:'QKSMS' application-label-sv:'QKSMS' application-label-sw:'QKSMS' application-label-ta:'QKSMS' application-label-te:'QKSMS' application-label-th:'QKSMS' application-label-tl:'QKSMS' application-label-tr:'QKSMS' application-label-uk:'QKSMS' application-label-ur:'QKSMS' application-label-uz:'QKSMS' application-label-vi:'QKSMS' application-label-zh:'QKSMS' application-label-zh-CN:'QKSMS' application-label-zh-HK:'QKSMS' application-label-zh-TW:'QKSMS' application-label-zu:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' provides-component:'app-widget' main other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: 'af' 'am' 'ar' 'as' 'az' 'be' 'bg' 'bn' 'bs' 'ca' 'cs' 'da' 'de' 'el' 'en-AU' 'en-CA' 'en-GB' 'en-IN' 'en-XC' 'es' 'es-US' 'et' 'eu' 'fa' 'fi' 'fr' 'fr-CA' 'gl' 'gu' 'hi' 'hr' 'hu' 'hy' 'in' 'is' 'it' 'iw' 'ja' 'ka' 'kk' 'km' 'kn' 'ko' 'ky' 'lo' 'lt' 'lv' 'mk' 'ml' 'mn' 'mr' 'ms' 'my' 'nb' 'ne' 'nl' 'no' 'or' 'pa' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'si' 'sk' 'sl' 'sq' 'sr' 'sr-Latn' 'sv' 'sw' 'ta' 'te' 'th' 'tl' 'tr' 'uk' 'ur' 'uz' 'vi' 'zh' 'zh-CN' 'zh-HK' 'zh-TW' 'zu' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.1/aapt-output-com.politedroid_3.txt0000644000175000017500000000254314717152070025407 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.1/aapt-output-com.politedroid_4.txt0000644000175000017500000000254314717152070025410 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.1/aapt-output-com.politedroid_5.txt0000644000175000017500000000162514717152070025411 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' platformBuildVersionName='' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.1/aapt-output-com.politedroid_6.txt0000644000175000017500000000166214717152070025413 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.1/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000334614717152070027561 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission-sdk-23: name='android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS' maxSdkVersion='27' uses-permission-sdk-23: name='android.permission.REQUEST_INSTALL_PACKAGES' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='أذونات مكررة' icon='res/drawable/ic_launcher.png' banner='res/drawable/banner.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.software.leanback' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.1/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000132714717152070027734 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000116414717152070030044 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.1/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000312114717152070027070 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission-sdk-23: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission-sdk-23: name='android.permission.WRITE_SETTINGS' maxSdkVersion='25' uses-permission: name='android.permission.NFC' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' uses-feature-not-required: name='android.hardware.bluetooth' uses-feature-not-required: name='android.hardware.nfc' uses-feature-not-required: name='android.hardware.telephony' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.hardware.wifi' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.1/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000124314717152070027050 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.1/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000124314717152070027052 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.1/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000124314717152070027054 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.1/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000122114717152070026730 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.1/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000123214717152070026426 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' platformBuildVersionName='' sdkVersion:'8' targetSdkVersion:'28' uses-permission: name='android.permission.VIBRATE' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR Klavye' icon='res/drawable/ic_launcher.png' feature-group: label='' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' provides-component:'ime' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.1/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000303314717152070025461 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' platformBuildVersionName='' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' uses-feature: name='android.hardware.touchscreen' uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2681868 fdroidserver-2.4.0/tests/build-tools/24.0.2/0000755000175000017500000000000014770510164017046 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/24.0.2/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001453514717152067025123 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' platformBuildVersionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.CALL_PHONE' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.READ_SMS' uses-permission: name='android.permission.READ_PHONE_STATE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.RECEIVE_MMS' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.WRITE_SMS' uses-permission: name='com.android.vending.BILLING' uses-permission: name='android.permission.INTERNET' uses-permission: name='com.sec.android.provider.badge.permission.READ' uses-permission: name='com.sec.android.provider.badge.permission.WRITE' uses-permission: name='com.htc.launcher.permission.READ_SETTINGS' uses-permission: name='com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission: name='com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission: name='com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission: name='com.majeur.launcher.permission.UPDATE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission: name='android.permission.READ_APP_BADGE' uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS' uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_READ' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_WRITE' application-label-af:'QKSMS' application-label-am:'QKSMS' application-label-ar:'QKSMS' application-label-as:'QKSMS' application-label-az:'QKSMS' application-label-be:'QKSMS' application-label-bg:'QKSMS' application-label-bn:'QKSMS' application-label-bs:'QKSMS' application-label-ca:'QKSMS' application-label-cs:'QKSMS' application-label-da:'QKSMS' application-label-de:'QKSMS' application-label-el:'QKSMS' application-label-en-AU:'QKSMS' application-label-en-CA:'QKSMS' application-label-en-GB:'QKSMS' application-label-en-IN:'QKSMS' application-label-en-XC:'QKSMS' application-label-es:'QKSMS' application-label-es-US:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-fa:'QKSMS' application-label-fi:'QKSMS' application-label-fr:'QKSMS' application-label-fr-CA:'QKSMS' application-label-gl:'QKSMS' application-label-gu:'QKSMS' application-label-hi:'QKSMS' application-label-hr:'QKSMS' application-label-hu:'QKSMS' application-label-hy:'QKSMS' application-label-in:'QKSMS' application-label-is:'QKSMS' application-label-it:'QKSMS' application-label-iw:'QKSMS' application-label-ja:'QKSMS' application-label-ka:'QKSMS' application-label-kk:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-ko:'QKSMS' application-label-ky:'QKSMS' application-label-lo:'QKSMS' application-label-lt:'QKSMS' application-label-lv:'QKSMS' application-label-mk:'QKSMS' application-label-ml:'QKSMS' application-label-mn:'QKSMS' application-label-mr:'QKSMS' application-label-ms:'QKSMS' application-label-my:'QKSMS' application-label-nb:'QKSMS' application-label-ne:'QKSMS' application-label-nl:'QKSMS' application-label-no:'QKSMS' application-label-or:'QKSMS' application-label-pa:'QKSMS' application-label-pl:'QKSMS' application-label-pt:'QKSMS' application-label-pt-BR:'QKSMS' application-label-pt-PT:'QKSMS' application-label-ro:'QKSMS' application-label-ru:'QKSMS' application-label-si:'QKSMS' application-label-sk:'QKSMS' application-label-sl:'QKSMS' application-label-sq:'QKSMS' application-label-sr:'QKSMS' application-label-sr-Latn:'QKSMS' application-label-sv:'QKSMS' application-label-sw:'QKSMS' application-label-ta:'QKSMS' application-label-te:'QKSMS' application-label-th:'QKSMS' application-label-tl:'QKSMS' application-label-tr:'QKSMS' application-label-uk:'QKSMS' application-label-ur:'QKSMS' application-label-uz:'QKSMS' application-label-vi:'QKSMS' application-label-zh:'QKSMS' application-label-zh-CN:'QKSMS' application-label-zh-HK:'QKSMS' application-label-zh-TW:'QKSMS' application-label-zu:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' provides-component:'app-widget' main other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: 'af' 'am' 'ar' 'as' 'az' 'be' 'bg' 'bn' 'bs' 'ca' 'cs' 'da' 'de' 'el' 'en-AU' 'en-CA' 'en-GB' 'en-IN' 'en-XC' 'es' 'es-US' 'et' 'eu' 'fa' 'fi' 'fr' 'fr-CA' 'gl' 'gu' 'hi' 'hr' 'hu' 'hy' 'in' 'is' 'it' 'iw' 'ja' 'ka' 'kk' 'km' 'kn' 'ko' 'ky' 'lo' 'lt' 'lv' 'mk' 'ml' 'mn' 'mr' 'ms' 'my' 'nb' 'ne' 'nl' 'no' 'or' 'pa' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'si' 'sk' 'sl' 'sq' 'sr' 'sr-Latn' 'sv' 'sw' 'ta' 'te' 'th' 'tl' 'tr' 'uk' 'ur' 'uz' 'vi' 'zh' 'zh-CN' 'zh-HK' 'zh-TW' 'zu' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/24.0.2/aapt-output-com.politedroid_3.txt0000644000175000017500000000253714717152067025421 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/24.0.2/aapt-output-com.politedroid_4.txt0000644000175000017500000000253714717152067025422 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/24.0.2/aapt-output-com.politedroid_5.txt0000644000175000017500000000162114717152067025414 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' platformBuildVersionName='' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/24.0.2/aapt-output-com.politedroid_6.txt0000644000175000017500000000165614717152067025425 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/24.0.2/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000334614717152067027570 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission-sdk-23: name='android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS' maxSdkVersion='27' uses-permission-sdk-23: name='android.permission.REQUEST_INSTALL_PACKAGES' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='أذونات مكررة' icon='res/drawable/ic_launcher.png' banner='res/drawable/banner.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.software.leanback' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/24.0.2/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000132314717152067027737 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/24.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000116014717152067030047 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/24.0.2/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000312114717152067027077 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission-sdk-23: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission-sdk-23: name='android.permission.WRITE_SETTINGS' maxSdkVersion='25' uses-permission: name='android.permission.NFC' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' uses-feature-not-required: name='android.hardware.bluetooth' uses-feature-not-required: name='android.hardware.nfc' uses-feature-not-required: name='android.hardware.telephony' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.hardware.wifi' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/24.0.2/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000123714717152067027062 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/24.0.2/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000123714717152067027064 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/24.0.2/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000123714717152067027066 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/24.0.2/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000121514717152067026742 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/24.0.2/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000122614717152067026440 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' platformBuildVersionName='' sdkVersion:'8' targetSdkVersion:'28' uses-permission: name='android.permission.VIBRATE' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR Klavye' icon='res/drawable/ic_launcher.png' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' provides-component:'ime' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/24.0.2/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000302714717152067025473 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' platformBuildVersionName='' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2681868 fdroidserver-2.4.0/tests/build-tools/24.0.3/0000755000175000017500000000000014770510164017047 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.3/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001453514717152070025116 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' platformBuildVersionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.CALL_PHONE' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.READ_SMS' uses-permission: name='android.permission.READ_PHONE_STATE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.RECEIVE_MMS' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.WRITE_SMS' uses-permission: name='com.android.vending.BILLING' uses-permission: name='android.permission.INTERNET' uses-permission: name='com.sec.android.provider.badge.permission.READ' uses-permission: name='com.sec.android.provider.badge.permission.WRITE' uses-permission: name='com.htc.launcher.permission.READ_SETTINGS' uses-permission: name='com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission: name='com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission: name='com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission: name='com.majeur.launcher.permission.UPDATE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission: name='android.permission.READ_APP_BADGE' uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS' uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_READ' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_WRITE' application-label-af:'QKSMS' application-label-am:'QKSMS' application-label-ar:'QKSMS' application-label-as:'QKSMS' application-label-az:'QKSMS' application-label-be:'QKSMS' application-label-bg:'QKSMS' application-label-bn:'QKSMS' application-label-bs:'QKSMS' application-label-ca:'QKSMS' application-label-cs:'QKSMS' application-label-da:'QKSMS' application-label-de:'QKSMS' application-label-el:'QKSMS' application-label-en-AU:'QKSMS' application-label-en-CA:'QKSMS' application-label-en-GB:'QKSMS' application-label-en-IN:'QKSMS' application-label-en-XC:'QKSMS' application-label-es:'QKSMS' application-label-es-US:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-fa:'QKSMS' application-label-fi:'QKSMS' application-label-fr:'QKSMS' application-label-fr-CA:'QKSMS' application-label-gl:'QKSMS' application-label-gu:'QKSMS' application-label-hi:'QKSMS' application-label-hr:'QKSMS' application-label-hu:'QKSMS' application-label-hy:'QKSMS' application-label-in:'QKSMS' application-label-is:'QKSMS' application-label-it:'QKSMS' application-label-iw:'QKSMS' application-label-ja:'QKSMS' application-label-ka:'QKSMS' application-label-kk:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-ko:'QKSMS' application-label-ky:'QKSMS' application-label-lo:'QKSMS' application-label-lt:'QKSMS' application-label-lv:'QKSMS' application-label-mk:'QKSMS' application-label-ml:'QKSMS' application-label-mn:'QKSMS' application-label-mr:'QKSMS' application-label-ms:'QKSMS' application-label-my:'QKSMS' application-label-nb:'QKSMS' application-label-ne:'QKSMS' application-label-nl:'QKSMS' application-label-no:'QKSMS' application-label-or:'QKSMS' application-label-pa:'QKSMS' application-label-pl:'QKSMS' application-label-pt:'QKSMS' application-label-pt-BR:'QKSMS' application-label-pt-PT:'QKSMS' application-label-ro:'QKSMS' application-label-ru:'QKSMS' application-label-si:'QKSMS' application-label-sk:'QKSMS' application-label-sl:'QKSMS' application-label-sq:'QKSMS' application-label-sr:'QKSMS' application-label-sr-Latn:'QKSMS' application-label-sv:'QKSMS' application-label-sw:'QKSMS' application-label-ta:'QKSMS' application-label-te:'QKSMS' application-label-th:'QKSMS' application-label-tl:'QKSMS' application-label-tr:'QKSMS' application-label-uk:'QKSMS' application-label-ur:'QKSMS' application-label-uz:'QKSMS' application-label-vi:'QKSMS' application-label-zh:'QKSMS' application-label-zh-CN:'QKSMS' application-label-zh-HK:'QKSMS' application-label-zh-TW:'QKSMS' application-label-zu:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' provides-component:'app-widget' main other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: 'af' 'am' 'ar' 'as' 'az' 'be' 'bg' 'bn' 'bs' 'ca' 'cs' 'da' 'de' 'el' 'en-AU' 'en-CA' 'en-GB' 'en-IN' 'en-XC' 'es' 'es-US' 'et' 'eu' 'fa' 'fi' 'fr' 'fr-CA' 'gl' 'gu' 'hi' 'hr' 'hu' 'hy' 'in' 'is' 'it' 'iw' 'ja' 'ka' 'kk' 'km' 'kn' 'ko' 'ky' 'lo' 'lt' 'lv' 'mk' 'ml' 'mn' 'mr' 'ms' 'my' 'nb' 'ne' 'nl' 'no' 'or' 'pa' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'si' 'sk' 'sl' 'sq' 'sr' 'sr-Latn' 'sv' 'sw' 'ta' 'te' 'th' 'tl' 'tr' 'uk' 'ur' 'uz' 'vi' 'zh' 'zh-CN' 'zh-HK' 'zh-TW' 'zu' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.3/aapt-output-com.politedroid_3.txt0000644000175000017500000000253714717152070025414 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.3/aapt-output-com.politedroid_4.txt0000644000175000017500000000253714717152070025415 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.3/aapt-output-com.politedroid_5.txt0000644000175000017500000000162114717152070025407 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' platformBuildVersionName='' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.3/aapt-output-com.politedroid_6.txt0000644000175000017500000000165614717152070025420 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.3/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000334614717152070027563 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission-sdk-23: name='android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS' maxSdkVersion='27' uses-permission-sdk-23: name='android.permission.REQUEST_INSTALL_PACKAGES' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='أذونات مكررة' icon='res/drawable/ic_launcher.png' banner='res/drawable/banner.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.software.leanback' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.3/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000132314717152070027732 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000116014717152070030042 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.3/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000312114717152070027072 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission-sdk-23: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission-sdk-23: name='android.permission.WRITE_SETTINGS' maxSdkVersion='25' uses-permission: name='android.permission.NFC' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' uses-feature-not-required: name='android.hardware.bluetooth' uses-feature-not-required: name='android.hardware.nfc' uses-feature-not-required: name='android.hardware.telephony' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.hardware.wifi' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.3/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000123714717152070027055 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.3/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000123714717152070027057 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.3/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000123714717152070027061 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.3/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000121514717152070026735 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.3/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000122614717152070026433 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' platformBuildVersionName='' sdkVersion:'8' targetSdkVersion:'28' uses-permission: name='android.permission.VIBRATE' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR Klavye' icon='res/drawable/ic_launcher.png' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' provides-component:'ime' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/24.0.3/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000302714717152070025466 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' platformBuildVersionName='' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.272187 fdroidserver-2.4.0/tests/build-tools/25.0.0/0000755000175000017500000000000014770510164017045 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.0/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001453514717152070025114 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' platformBuildVersionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.CALL_PHONE' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.READ_SMS' uses-permission: name='android.permission.READ_PHONE_STATE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.RECEIVE_MMS' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.WRITE_SMS' uses-permission: name='com.android.vending.BILLING' uses-permission: name='android.permission.INTERNET' uses-permission: name='com.sec.android.provider.badge.permission.READ' uses-permission: name='com.sec.android.provider.badge.permission.WRITE' uses-permission: name='com.htc.launcher.permission.READ_SETTINGS' uses-permission: name='com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission: name='com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission: name='com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission: name='com.majeur.launcher.permission.UPDATE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission: name='android.permission.READ_APP_BADGE' uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS' uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_READ' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_WRITE' application-label-af:'QKSMS' application-label-am:'QKSMS' application-label-ar:'QKSMS' application-label-as:'QKSMS' application-label-az:'QKSMS' application-label-be:'QKSMS' application-label-bg:'QKSMS' application-label-bn:'QKSMS' application-label-bs:'QKSMS' application-label-ca:'QKSMS' application-label-cs:'QKSMS' application-label-da:'QKSMS' application-label-de:'QKSMS' application-label-el:'QKSMS' application-label-en-AU:'QKSMS' application-label-en-CA:'QKSMS' application-label-en-GB:'QKSMS' application-label-en-IN:'QKSMS' application-label-en-XC:'QKSMS' application-label-es:'QKSMS' application-label-es-US:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-fa:'QKSMS' application-label-fi:'QKSMS' application-label-fr:'QKSMS' application-label-fr-CA:'QKSMS' application-label-gl:'QKSMS' application-label-gu:'QKSMS' application-label-hi:'QKSMS' application-label-hr:'QKSMS' application-label-hu:'QKSMS' application-label-hy:'QKSMS' application-label-in:'QKSMS' application-label-is:'QKSMS' application-label-it:'QKSMS' application-label-iw:'QKSMS' application-label-ja:'QKSMS' application-label-ka:'QKSMS' application-label-kk:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-ko:'QKSMS' application-label-ky:'QKSMS' application-label-lo:'QKSMS' application-label-lt:'QKSMS' application-label-lv:'QKSMS' application-label-mk:'QKSMS' application-label-ml:'QKSMS' application-label-mn:'QKSMS' application-label-mr:'QKSMS' application-label-ms:'QKSMS' application-label-my:'QKSMS' application-label-nb:'QKSMS' application-label-ne:'QKSMS' application-label-nl:'QKSMS' application-label-no:'QKSMS' application-label-or:'QKSMS' application-label-pa:'QKSMS' application-label-pl:'QKSMS' application-label-pt:'QKSMS' application-label-pt-BR:'QKSMS' application-label-pt-PT:'QKSMS' application-label-ro:'QKSMS' application-label-ru:'QKSMS' application-label-si:'QKSMS' application-label-sk:'QKSMS' application-label-sl:'QKSMS' application-label-sq:'QKSMS' application-label-sr:'QKSMS' application-label-sr-Latn:'QKSMS' application-label-sv:'QKSMS' application-label-sw:'QKSMS' application-label-ta:'QKSMS' application-label-te:'QKSMS' application-label-th:'QKSMS' application-label-tl:'QKSMS' application-label-tr:'QKSMS' application-label-uk:'QKSMS' application-label-ur:'QKSMS' application-label-uz:'QKSMS' application-label-vi:'QKSMS' application-label-zh:'QKSMS' application-label-zh-CN:'QKSMS' application-label-zh-HK:'QKSMS' application-label-zh-TW:'QKSMS' application-label-zu:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' provides-component:'app-widget' main other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: 'af' 'am' 'ar' 'as' 'az' 'be' 'bg' 'bn' 'bs' 'ca' 'cs' 'da' 'de' 'el' 'en-AU' 'en-CA' 'en-GB' 'en-IN' 'en-XC' 'es' 'es-US' 'et' 'eu' 'fa' 'fi' 'fr' 'fr-CA' 'gl' 'gu' 'hi' 'hr' 'hu' 'hy' 'in' 'is' 'it' 'iw' 'ja' 'ka' 'kk' 'km' 'kn' 'ko' 'ky' 'lo' 'lt' 'lv' 'mk' 'ml' 'mn' 'mr' 'ms' 'my' 'nb' 'ne' 'nl' 'no' 'or' 'pa' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'si' 'sk' 'sl' 'sq' 'sr' 'sr-Latn' 'sv' 'sw' 'ta' 'te' 'th' 'tl' 'tr' 'uk' 'ur' 'uz' 'vi' 'zh' 'zh-CN' 'zh-HK' 'zh-TW' 'zu' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.0/aapt-output-com.politedroid_3.txt0000644000175000017500000000253714717152070025412 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.0/aapt-output-com.politedroid_4.txt0000644000175000017500000000253714717152070025413 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.0/aapt-output-com.politedroid_5.txt0000644000175000017500000000162114717152070025405 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' platformBuildVersionName='' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.0/aapt-output-com.politedroid_6.txt0000644000175000017500000000165614717152070025416 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.0/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000334614717152070027561 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission-sdk-23: name='android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS' maxSdkVersion='27' uses-permission-sdk-23: name='android.permission.REQUEST_INSTALL_PACKAGES' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='أذونات مكررة' icon='res/drawable/ic_launcher.png' banner='res/drawable/banner.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.software.leanback' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.0/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000132314717152070027730 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000116014717152070030040 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.0/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000312114717152070027070 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission-sdk-23: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission-sdk-23: name='android.permission.WRITE_SETTINGS' maxSdkVersion='25' uses-permission: name='android.permission.NFC' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' uses-feature-not-required: name='android.hardware.bluetooth' uses-feature-not-required: name='android.hardware.nfc' uses-feature-not-required: name='android.hardware.telephony' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.hardware.wifi' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.0/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000123714717152070027053 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.0/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000123714717152070027055 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.0/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000123714717152070027057 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.0/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000121514717152070026733 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.0/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000122614717152070026431 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' platformBuildVersionName='' sdkVersion:'8' targetSdkVersion:'28' uses-permission: name='android.permission.VIBRATE' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR Klavye' icon='res/drawable/ic_launcher.png' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' provides-component:'ime' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.0/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000302714717152070025464 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' platformBuildVersionName='' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.272187 fdroidserver-2.4.0/tests/build-tools/25.0.1/0000755000175000017500000000000014770510164017046 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.1/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001453514717152070025115 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' platformBuildVersionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.CALL_PHONE' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.READ_SMS' uses-permission: name='android.permission.READ_PHONE_STATE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.RECEIVE_MMS' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.WRITE_SMS' uses-permission: name='com.android.vending.BILLING' uses-permission: name='android.permission.INTERNET' uses-permission: name='com.sec.android.provider.badge.permission.READ' uses-permission: name='com.sec.android.provider.badge.permission.WRITE' uses-permission: name='com.htc.launcher.permission.READ_SETTINGS' uses-permission: name='com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission: name='com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission: name='com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission: name='com.majeur.launcher.permission.UPDATE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission: name='android.permission.READ_APP_BADGE' uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS' uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_READ' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_WRITE' application-label-af:'QKSMS' application-label-am:'QKSMS' application-label-ar:'QKSMS' application-label-as:'QKSMS' application-label-az:'QKSMS' application-label-be:'QKSMS' application-label-bg:'QKSMS' application-label-bn:'QKSMS' application-label-bs:'QKSMS' application-label-ca:'QKSMS' application-label-cs:'QKSMS' application-label-da:'QKSMS' application-label-de:'QKSMS' application-label-el:'QKSMS' application-label-en-AU:'QKSMS' application-label-en-CA:'QKSMS' application-label-en-GB:'QKSMS' application-label-en-IN:'QKSMS' application-label-en-XC:'QKSMS' application-label-es:'QKSMS' application-label-es-US:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-fa:'QKSMS' application-label-fi:'QKSMS' application-label-fr:'QKSMS' application-label-fr-CA:'QKSMS' application-label-gl:'QKSMS' application-label-gu:'QKSMS' application-label-hi:'QKSMS' application-label-hr:'QKSMS' application-label-hu:'QKSMS' application-label-hy:'QKSMS' application-label-in:'QKSMS' application-label-is:'QKSMS' application-label-it:'QKSMS' application-label-iw:'QKSMS' application-label-ja:'QKSMS' application-label-ka:'QKSMS' application-label-kk:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-ko:'QKSMS' application-label-ky:'QKSMS' application-label-lo:'QKSMS' application-label-lt:'QKSMS' application-label-lv:'QKSMS' application-label-mk:'QKSMS' application-label-ml:'QKSMS' application-label-mn:'QKSMS' application-label-mr:'QKSMS' application-label-ms:'QKSMS' application-label-my:'QKSMS' application-label-nb:'QKSMS' application-label-ne:'QKSMS' application-label-nl:'QKSMS' application-label-no:'QKSMS' application-label-or:'QKSMS' application-label-pa:'QKSMS' application-label-pl:'QKSMS' application-label-pt:'QKSMS' application-label-pt-BR:'QKSMS' application-label-pt-PT:'QKSMS' application-label-ro:'QKSMS' application-label-ru:'QKSMS' application-label-si:'QKSMS' application-label-sk:'QKSMS' application-label-sl:'QKSMS' application-label-sq:'QKSMS' application-label-sr:'QKSMS' application-label-sr-Latn:'QKSMS' application-label-sv:'QKSMS' application-label-sw:'QKSMS' application-label-ta:'QKSMS' application-label-te:'QKSMS' application-label-th:'QKSMS' application-label-tl:'QKSMS' application-label-tr:'QKSMS' application-label-uk:'QKSMS' application-label-ur:'QKSMS' application-label-uz:'QKSMS' application-label-vi:'QKSMS' application-label-zh:'QKSMS' application-label-zh-CN:'QKSMS' application-label-zh-HK:'QKSMS' application-label-zh-TW:'QKSMS' application-label-zu:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' provides-component:'app-widget' main other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: 'af' 'am' 'ar' 'as' 'az' 'be' 'bg' 'bn' 'bs' 'ca' 'cs' 'da' 'de' 'el' 'en-AU' 'en-CA' 'en-GB' 'en-IN' 'en-XC' 'es' 'es-US' 'et' 'eu' 'fa' 'fi' 'fr' 'fr-CA' 'gl' 'gu' 'hi' 'hr' 'hu' 'hy' 'in' 'is' 'it' 'iw' 'ja' 'ka' 'kk' 'km' 'kn' 'ko' 'ky' 'lo' 'lt' 'lv' 'mk' 'ml' 'mn' 'mr' 'ms' 'my' 'nb' 'ne' 'nl' 'no' 'or' 'pa' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'si' 'sk' 'sl' 'sq' 'sr' 'sr-Latn' 'sv' 'sw' 'ta' 'te' 'th' 'tl' 'tr' 'uk' 'ur' 'uz' 'vi' 'zh' 'zh-CN' 'zh-HK' 'zh-TW' 'zu' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.1/aapt-output-com.politedroid_3.txt0000644000175000017500000000253714717152070025413 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.1/aapt-output-com.politedroid_4.txt0000644000175000017500000000253714717152070025414 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.1/aapt-output-com.politedroid_5.txt0000644000175000017500000000162114717152070025406 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' platformBuildVersionName='' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.1/aapt-output-com.politedroid_6.txt0000644000175000017500000000165614717152070025417 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.1/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000334614717152070027562 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission-sdk-23: name='android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS' maxSdkVersion='27' uses-permission-sdk-23: name='android.permission.REQUEST_INSTALL_PACKAGES' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='أذونات مكررة' icon='res/drawable/ic_launcher.png' banner='res/drawable/banner.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.software.leanback' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.1/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000132314717152070027731 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000116014717152070030041 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.1/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000312114717152070027071 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission-sdk-23: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission-sdk-23: name='android.permission.WRITE_SETTINGS' maxSdkVersion='25' uses-permission: name='android.permission.NFC' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' uses-feature-not-required: name='android.hardware.bluetooth' uses-feature-not-required: name='android.hardware.nfc' uses-feature-not-required: name='android.hardware.telephony' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.hardware.wifi' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.1/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000123714717152070027054 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.1/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000123714717152070027056 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.1/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000123714717152070027060 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.1/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000121514717152070026734 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.1/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000122614717152070026432 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' platformBuildVersionName='' sdkVersion:'8' targetSdkVersion:'28' uses-permission: name='android.permission.VIBRATE' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR Klavye' icon='res/drawable/ic_launcher.png' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' provides-component:'ime' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.1/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000302714717152070025465 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' platformBuildVersionName='' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.272187 fdroidserver-2.4.0/tests/build-tools/25.0.2/0000755000175000017500000000000014770510164017047 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.2/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001453514717152070025116 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' platformBuildVersionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.CALL_PHONE' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.READ_SMS' uses-permission: name='android.permission.READ_PHONE_STATE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.RECEIVE_MMS' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.WRITE_SMS' uses-permission: name='com.android.vending.BILLING' uses-permission: name='android.permission.INTERNET' uses-permission: name='com.sec.android.provider.badge.permission.READ' uses-permission: name='com.sec.android.provider.badge.permission.WRITE' uses-permission: name='com.htc.launcher.permission.READ_SETTINGS' uses-permission: name='com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission: name='com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission: name='com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission: name='com.majeur.launcher.permission.UPDATE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission: name='android.permission.READ_APP_BADGE' uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS' uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_READ' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_WRITE' application-label-af:'QKSMS' application-label-am:'QKSMS' application-label-ar:'QKSMS' application-label-as:'QKSMS' application-label-az:'QKSMS' application-label-be:'QKSMS' application-label-bg:'QKSMS' application-label-bn:'QKSMS' application-label-bs:'QKSMS' application-label-ca:'QKSMS' application-label-cs:'QKSMS' application-label-da:'QKSMS' application-label-de:'QKSMS' application-label-el:'QKSMS' application-label-en-AU:'QKSMS' application-label-en-CA:'QKSMS' application-label-en-GB:'QKSMS' application-label-en-IN:'QKSMS' application-label-en-XC:'QKSMS' application-label-es:'QKSMS' application-label-es-US:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-fa:'QKSMS' application-label-fi:'QKSMS' application-label-fr:'QKSMS' application-label-fr-CA:'QKSMS' application-label-gl:'QKSMS' application-label-gu:'QKSMS' application-label-hi:'QKSMS' application-label-hr:'QKSMS' application-label-hu:'QKSMS' application-label-hy:'QKSMS' application-label-in:'QKSMS' application-label-is:'QKSMS' application-label-it:'QKSMS' application-label-iw:'QKSMS' application-label-ja:'QKSMS' application-label-ka:'QKSMS' application-label-kk:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-ko:'QKSMS' application-label-ky:'QKSMS' application-label-lo:'QKSMS' application-label-lt:'QKSMS' application-label-lv:'QKSMS' application-label-mk:'QKSMS' application-label-ml:'QKSMS' application-label-mn:'QKSMS' application-label-mr:'QKSMS' application-label-ms:'QKSMS' application-label-my:'QKSMS' application-label-nb:'QKSMS' application-label-ne:'QKSMS' application-label-nl:'QKSMS' application-label-no:'QKSMS' application-label-or:'QKSMS' application-label-pa:'QKSMS' application-label-pl:'QKSMS' application-label-pt:'QKSMS' application-label-pt-BR:'QKSMS' application-label-pt-PT:'QKSMS' application-label-ro:'QKSMS' application-label-ru:'QKSMS' application-label-si:'QKSMS' application-label-sk:'QKSMS' application-label-sl:'QKSMS' application-label-sq:'QKSMS' application-label-sr:'QKSMS' application-label-sr-Latn:'QKSMS' application-label-sv:'QKSMS' application-label-sw:'QKSMS' application-label-ta:'QKSMS' application-label-te:'QKSMS' application-label-th:'QKSMS' application-label-tl:'QKSMS' application-label-tr:'QKSMS' application-label-uk:'QKSMS' application-label-ur:'QKSMS' application-label-uz:'QKSMS' application-label-vi:'QKSMS' application-label-zh:'QKSMS' application-label-zh-CN:'QKSMS' application-label-zh-HK:'QKSMS' application-label-zh-TW:'QKSMS' application-label-zu:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' provides-component:'app-widget' main other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: 'af' 'am' 'ar' 'as' 'az' 'be' 'bg' 'bn' 'bs' 'ca' 'cs' 'da' 'de' 'el' 'en-AU' 'en-CA' 'en-GB' 'en-IN' 'en-XC' 'es' 'es-US' 'et' 'eu' 'fa' 'fi' 'fr' 'fr-CA' 'gl' 'gu' 'hi' 'hr' 'hu' 'hy' 'in' 'is' 'it' 'iw' 'ja' 'ka' 'kk' 'km' 'kn' 'ko' 'ky' 'lo' 'lt' 'lv' 'mk' 'ml' 'mn' 'mr' 'ms' 'my' 'nb' 'ne' 'nl' 'no' 'or' 'pa' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'si' 'sk' 'sl' 'sq' 'sr' 'sr-Latn' 'sv' 'sw' 'ta' 'te' 'th' 'tl' 'tr' 'uk' 'ur' 'uz' 'vi' 'zh' 'zh-CN' 'zh-HK' 'zh-TW' 'zu' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.2/aapt-output-com.politedroid_3.txt0000644000175000017500000000253714717152070025414 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.2/aapt-output-com.politedroid_4.txt0000644000175000017500000000253714717152070025415 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.2/aapt-output-com.politedroid_5.txt0000644000175000017500000000162114717152070025407 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' platformBuildVersionName='' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.2/aapt-output-com.politedroid_6.txt0000644000175000017500000000165614717152070025420 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.2/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000334614717152070027563 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission-sdk-23: name='android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS' maxSdkVersion='27' uses-permission-sdk-23: name='android.permission.REQUEST_INSTALL_PACKAGES' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='أذونات مكررة' icon='res/drawable/ic_launcher.png' banner='res/drawable/banner.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.software.leanback' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.2/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000132314717152070027732 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000116014717152070030042 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.2/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000312114717152070027072 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission-sdk-23: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission-sdk-23: name='android.permission.WRITE_SETTINGS' maxSdkVersion='25' uses-permission: name='android.permission.NFC' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' uses-feature-not-required: name='android.hardware.bluetooth' uses-feature-not-required: name='android.hardware.nfc' uses-feature-not-required: name='android.hardware.telephony' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.hardware.wifi' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.2/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000123714717152070027055 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.2/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000123714717152070027057 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.2/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000123714717152070027061 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.2/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000121514717152070026735 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.2/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000122614717152070026433 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' platformBuildVersionName='' sdkVersion:'8' targetSdkVersion:'28' uses-permission: name='android.permission.VIBRATE' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR Klavye' icon='res/drawable/ic_launcher.png' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' provides-component:'ime' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.2/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000302714717152070025466 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' platformBuildVersionName='' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.276187 fdroidserver-2.4.0/tests/build-tools/25.0.3/0000755000175000017500000000000014770510164017050 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.3/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001453514717152070025117 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' platformBuildVersionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.CALL_PHONE' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.READ_SMS' uses-permission: name='android.permission.READ_PHONE_STATE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.RECEIVE_MMS' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.WRITE_SMS' uses-permission: name='com.android.vending.BILLING' uses-permission: name='android.permission.INTERNET' uses-permission: name='com.sec.android.provider.badge.permission.READ' uses-permission: name='com.sec.android.provider.badge.permission.WRITE' uses-permission: name='com.htc.launcher.permission.READ_SETTINGS' uses-permission: name='com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission: name='com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission: name='com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission: name='com.majeur.launcher.permission.UPDATE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission: name='android.permission.READ_APP_BADGE' uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS' uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_READ' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_WRITE' application-label-af:'QKSMS' application-label-am:'QKSMS' application-label-ar:'QKSMS' application-label-as:'QKSMS' application-label-az:'QKSMS' application-label-be:'QKSMS' application-label-bg:'QKSMS' application-label-bn:'QKSMS' application-label-bs:'QKSMS' application-label-ca:'QKSMS' application-label-cs:'QKSMS' application-label-da:'QKSMS' application-label-de:'QKSMS' application-label-el:'QKSMS' application-label-en-AU:'QKSMS' application-label-en-CA:'QKSMS' application-label-en-GB:'QKSMS' application-label-en-IN:'QKSMS' application-label-en-XC:'QKSMS' application-label-es:'QKSMS' application-label-es-US:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-fa:'QKSMS' application-label-fi:'QKSMS' application-label-fr:'QKSMS' application-label-fr-CA:'QKSMS' application-label-gl:'QKSMS' application-label-gu:'QKSMS' application-label-hi:'QKSMS' application-label-hr:'QKSMS' application-label-hu:'QKSMS' application-label-hy:'QKSMS' application-label-in:'QKSMS' application-label-is:'QKSMS' application-label-it:'QKSMS' application-label-iw:'QKSMS' application-label-ja:'QKSMS' application-label-ka:'QKSMS' application-label-kk:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-ko:'QKSMS' application-label-ky:'QKSMS' application-label-lo:'QKSMS' application-label-lt:'QKSMS' application-label-lv:'QKSMS' application-label-mk:'QKSMS' application-label-ml:'QKSMS' application-label-mn:'QKSMS' application-label-mr:'QKSMS' application-label-ms:'QKSMS' application-label-my:'QKSMS' application-label-nb:'QKSMS' application-label-ne:'QKSMS' application-label-nl:'QKSMS' application-label-no:'QKSMS' application-label-or:'QKSMS' application-label-pa:'QKSMS' application-label-pl:'QKSMS' application-label-pt:'QKSMS' application-label-pt-BR:'QKSMS' application-label-pt-PT:'QKSMS' application-label-ro:'QKSMS' application-label-ru:'QKSMS' application-label-si:'QKSMS' application-label-sk:'QKSMS' application-label-sl:'QKSMS' application-label-sq:'QKSMS' application-label-sr:'QKSMS' application-label-sr-Latn:'QKSMS' application-label-sv:'QKSMS' application-label-sw:'QKSMS' application-label-ta:'QKSMS' application-label-te:'QKSMS' application-label-th:'QKSMS' application-label-tl:'QKSMS' application-label-tr:'QKSMS' application-label-uk:'QKSMS' application-label-ur:'QKSMS' application-label-uz:'QKSMS' application-label-vi:'QKSMS' application-label-zh:'QKSMS' application-label-zh-CN:'QKSMS' application-label-zh-HK:'QKSMS' application-label-zh-TW:'QKSMS' application-label-zu:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' provides-component:'app-widget' main other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: 'af' 'am' 'ar' 'as' 'az' 'be' 'bg' 'bn' 'bs' 'ca' 'cs' 'da' 'de' 'el' 'en-AU' 'en-CA' 'en-GB' 'en-IN' 'en-XC' 'es' 'es-US' 'et' 'eu' 'fa' 'fi' 'fr' 'fr-CA' 'gl' 'gu' 'hi' 'hr' 'hu' 'hy' 'in' 'is' 'it' 'iw' 'ja' 'ka' 'kk' 'km' 'kn' 'ko' 'ky' 'lo' 'lt' 'lv' 'mk' 'ml' 'mn' 'mr' 'ms' 'my' 'nb' 'ne' 'nl' 'no' 'or' 'pa' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'si' 'sk' 'sl' 'sq' 'sr' 'sr-Latn' 'sv' 'sw' 'ta' 'te' 'th' 'tl' 'tr' 'uk' 'ur' 'uz' 'vi' 'zh' 'zh-CN' 'zh-HK' 'zh-TW' 'zu' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.3/aapt-output-com.politedroid_3.txt0000644000175000017500000000253714717152070025415 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.3/aapt-output-com.politedroid_4.txt0000644000175000017500000000253714717152070025416 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.3/aapt-output-com.politedroid_5.txt0000644000175000017500000000162114717152070025410 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' platformBuildVersionName='' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.3/aapt-output-com.politedroid_6.txt0000644000175000017500000000165614717152070025421 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.3/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000341414717152070027560 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission-sdk-23: name='android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS' maxSdkVersion='27' uses-permission-sdk-23: name='android.permission.REQUEST_INSTALL_PACKAGES' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='أذونات مكررة' icon='res/drawable/ic_launcher.png' banner='res/drawable/banner.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' maxSdkVersion='18' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' maxSdkVersion='18' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.software.leanback' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.3/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000132314717152070027733 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000116014717152070030043 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.3/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000312114717152070027073 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission-sdk-23: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission-sdk-23: name='android.permission.WRITE_SETTINGS' maxSdkVersion='25' uses-permission: name='android.permission.NFC' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' uses-feature-not-required: name='android.hardware.bluetooth' uses-feature-not-required: name='android.hardware.nfc' uses-feature-not-required: name='android.hardware.telephony' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.hardware.wifi' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.3/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000123714717152070027056 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.3/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000123714717152070027060 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.3/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000123714717152070027062 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.3/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000121514717152070026736 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-icon-160:'res/drawable/ic_launcher.png' application: label='' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.3/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000122614717152070026434 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' platformBuildVersionName='' sdkVersion:'8' targetSdkVersion:'28' uses-permission: name='android.permission.VIBRATE' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR Klavye' icon='res/drawable/ic_launcher.png' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' provides-component:'ime' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/25.0.3/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000302714717152070025467 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' platformBuildVersionName='' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.276187 fdroidserver-2.4.0/tests/build-tools/26.0.0/0000755000175000017500000000000014770510164017046 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/26.0.0/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001457714717152067025131 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' platformBuildVersionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.CALL_PHONE' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.READ_SMS' uses-permission: name='android.permission.READ_PHONE_STATE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.RECEIVE_MMS' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.WRITE_SMS' uses-permission: name='com.android.vending.BILLING' uses-permission: name='android.permission.INTERNET' uses-permission: name='com.sec.android.provider.badge.permission.READ' uses-permission: name='com.sec.android.provider.badge.permission.WRITE' uses-permission: name='com.htc.launcher.permission.READ_SETTINGS' uses-permission: name='com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission: name='com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission: name='com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission: name='com.majeur.launcher.permission.UPDATE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission: name='android.permission.READ_APP_BADGE' uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS' uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_READ' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_WRITE' application-label:'QKSMS' application-label-af:'QKSMS' application-label-am:'QKSMS' application-label-ar:'QKSMS' application-label-as:'QKSMS' application-label-az:'QKSMS' application-label-be:'QKSMS' application-label-bg:'QKSMS' application-label-bn:'QKSMS' application-label-bs:'QKSMS' application-label-ca:'QKSMS' application-label-cs:'QKSMS' application-label-da:'QKSMS' application-label-de:'QKSMS' application-label-el:'QKSMS' application-label-en-AU:'QKSMS' application-label-en-CA:'QKSMS' application-label-en-GB:'QKSMS' application-label-en-IN:'QKSMS' application-label-en-XC:'QKSMS' application-label-es:'QKSMS' application-label-es-US:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-fa:'QKSMS' application-label-fi:'QKSMS' application-label-fr:'QKSMS' application-label-fr-CA:'QKSMS' application-label-gl:'QKSMS' application-label-gu:'QKSMS' application-label-hi:'QKSMS' application-label-hr:'QKSMS' application-label-hu:'QKSMS' application-label-hy:'QKSMS' application-label-in:'QKSMS' application-label-is:'QKSMS' application-label-it:'QKSMS' application-label-iw:'QKSMS' application-label-ja:'QKSMS' application-label-ka:'QKSMS' application-label-kk:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-ko:'QKSMS' application-label-ky:'QKSMS' application-label-lo:'QKSMS' application-label-lt:'QKSMS' application-label-lv:'QKSMS' application-label-mk:'QKSMS' application-label-ml:'QKSMS' application-label-mn:'QKSMS' application-label-mr:'QKSMS' application-label-ms:'QKSMS' application-label-my:'QKSMS' application-label-nb:'QKSMS' application-label-ne:'QKSMS' application-label-nl:'QKSMS' application-label-no:'QKSMS' application-label-or:'QKSMS' application-label-pa:'QKSMS' application-label-pl:'QKSMS' application-label-pt:'QKSMS' application-label-pt-BR:'QKSMS' application-label-pt-PT:'QKSMS' application-label-ro:'QKSMS' application-label-ru:'QKSMS' application-label-si:'QKSMS' application-label-sk:'QKSMS' application-label-sl:'QKSMS' application-label-sq:'QKSMS' application-label-sr:'QKSMS' application-label-sr-Latn:'QKSMS' application-label-sv:'QKSMS' application-label-sw:'QKSMS' application-label-ta:'QKSMS' application-label-te:'QKSMS' application-label-th:'QKSMS' application-label-tl:'QKSMS' application-label-tr:'QKSMS' application-label-uk:'QKSMS' application-label-ur:'QKSMS' application-label-uz:'QKSMS' application-label-vi:'QKSMS' application-label-zh:'QKSMS' application-label-zh-CN:'QKSMS' application-label-zh-HK:'QKSMS' application-label-zh-TW:'QKSMS' application-label-zu:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' provides-component:'app-widget' main other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'af' 'am' 'ar' 'as' 'az' 'be' 'bg' 'bn' 'bs' 'ca' 'cs' 'da' 'de' 'el' 'en-AU' 'en-CA' 'en-GB' 'en-IN' 'en-XC' 'es' 'es-US' 'et' 'eu' 'fa' 'fi' 'fr' 'fr-CA' 'gl' 'gu' 'hi' 'hr' 'hu' 'hy' 'in' 'is' 'it' 'iw' 'ja' 'ka' 'kk' 'km' 'kn' 'ko' 'ky' 'lo' 'lt' 'lv' 'mk' 'ml' 'mn' 'mr' 'ms' 'my' 'nb' 'ne' 'nl' 'no' 'or' 'pa' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'si' 'sk' 'sl' 'sq' 'sr' 'sr-Latn' 'sv' 'sw' 'ta' 'te' 'th' 'tl' 'tr' 'uk' 'ur' 'uz' 'vi' 'zh' 'zh-CN' 'zh-HK' 'zh-TW' 'zu' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/26.0.0/aapt-output-com.politedroid_3.txt0000644000175000017500000000262414717152067025416 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/26.0.0/aapt-output-com.politedroid_4.txt0000644000175000017500000000262414717152067025417 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/26.0.0/aapt-output-com.politedroid_5.txt0000644000175000017500000000170614717152067025420 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' platformBuildVersionName='' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/26.0.0/aapt-output-com.politedroid_6.txt0000644000175000017500000000174314717152067025422 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/26.0.0/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000347614717152067027574 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission-sdk-23: name='android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS' maxSdkVersion='27' uses-permission-sdk-23: name='android.permission.REQUEST_INSTALL_PACKAGES' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label:'Duplicate Permisssions' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='Duplicate Permisssions' icon='res/drawable/ic_launcher.png' banner='res/drawable/banner.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' maxSdkVersion='18' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' maxSdkVersion='18' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.software.leanback' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/26.0.0/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000157614717152067027751 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/26.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000124714717152067030055 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-label:'Caffeine Tile' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='Caffeine Tile' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/26.0.0/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000322614717152067027105 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission-sdk-23: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission-sdk-23: name='android.permission.WRITE_SETTINGS' maxSdkVersion='25' uses-permission: name='android.permission.NFC' application-label:'OBB Main Old Version' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Old Version' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' uses-feature-not-required: name='android.hardware.bluetooth' uses-feature-not-required: name='android.hardware.nfc' uses-feature-not-required: name='android.hardware.telephony' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.hardware.wifi' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/26.0.0/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000134614717152067027063 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/26.0.0/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000134614717152067027065 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/26.0.0/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000134614717152067027067 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/26.0.0/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000126414717152067026746 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/26.0.0/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000130514717152067026436 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' platformBuildVersionName='' sdkVersion:'8' targetSdkVersion:'28' uses-permission: name='android.permission.VIBRATE' application-label:'DroidTR keyboard' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR keyboard' icon='res/drawable/ic_launcher.png' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' provides-component:'ime' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039735.0 fdroidserver-2.4.0/tests/build-tools/26.0.0/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000311614717152067025472 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' platformBuildVersionName='' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-label:'Battery level' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='Battery level' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.276187 fdroidserver-2.4.0/tests/build-tools/26.0.1/0000755000175000017500000000000014770510164017047 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.1/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001457714717152070025124 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' platformBuildVersionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.CALL_PHONE' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.READ_SMS' uses-permission: name='android.permission.READ_PHONE_STATE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.RECEIVE_MMS' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.WRITE_SMS' uses-permission: name='com.android.vending.BILLING' uses-permission: name='android.permission.INTERNET' uses-permission: name='com.sec.android.provider.badge.permission.READ' uses-permission: name='com.sec.android.provider.badge.permission.WRITE' uses-permission: name='com.htc.launcher.permission.READ_SETTINGS' uses-permission: name='com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission: name='com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission: name='com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission: name='com.majeur.launcher.permission.UPDATE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission: name='android.permission.READ_APP_BADGE' uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS' uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_READ' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_WRITE' application-label:'QKSMS' application-label-af:'QKSMS' application-label-am:'QKSMS' application-label-ar:'QKSMS' application-label-as:'QKSMS' application-label-az:'QKSMS' application-label-be:'QKSMS' application-label-bg:'QKSMS' application-label-bn:'QKSMS' application-label-bs:'QKSMS' application-label-ca:'QKSMS' application-label-cs:'QKSMS' application-label-da:'QKSMS' application-label-de:'QKSMS' application-label-el:'QKSMS' application-label-en-AU:'QKSMS' application-label-en-CA:'QKSMS' application-label-en-GB:'QKSMS' application-label-en-IN:'QKSMS' application-label-en-XC:'QKSMS' application-label-es:'QKSMS' application-label-es-US:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-fa:'QKSMS' application-label-fi:'QKSMS' application-label-fr:'QKSMS' application-label-fr-CA:'QKSMS' application-label-gl:'QKSMS' application-label-gu:'QKSMS' application-label-hi:'QKSMS' application-label-hr:'QKSMS' application-label-hu:'QKSMS' application-label-hy:'QKSMS' application-label-in:'QKSMS' application-label-is:'QKSMS' application-label-it:'QKSMS' application-label-iw:'QKSMS' application-label-ja:'QKSMS' application-label-ka:'QKSMS' application-label-kk:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-ko:'QKSMS' application-label-ky:'QKSMS' application-label-lo:'QKSMS' application-label-lt:'QKSMS' application-label-lv:'QKSMS' application-label-mk:'QKSMS' application-label-ml:'QKSMS' application-label-mn:'QKSMS' application-label-mr:'QKSMS' application-label-ms:'QKSMS' application-label-my:'QKSMS' application-label-nb:'QKSMS' application-label-ne:'QKSMS' application-label-nl:'QKSMS' application-label-no:'QKSMS' application-label-or:'QKSMS' application-label-pa:'QKSMS' application-label-pl:'QKSMS' application-label-pt:'QKSMS' application-label-pt-BR:'QKSMS' application-label-pt-PT:'QKSMS' application-label-ro:'QKSMS' application-label-ru:'QKSMS' application-label-si:'QKSMS' application-label-sk:'QKSMS' application-label-sl:'QKSMS' application-label-sq:'QKSMS' application-label-sr:'QKSMS' application-label-sr-Latn:'QKSMS' application-label-sv:'QKSMS' application-label-sw:'QKSMS' application-label-ta:'QKSMS' application-label-te:'QKSMS' application-label-th:'QKSMS' application-label-tl:'QKSMS' application-label-tr:'QKSMS' application-label-uk:'QKSMS' application-label-ur:'QKSMS' application-label-uz:'QKSMS' application-label-vi:'QKSMS' application-label-zh:'QKSMS' application-label-zh-CN:'QKSMS' application-label-zh-HK:'QKSMS' application-label-zh-TW:'QKSMS' application-label-zu:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' provides-component:'app-widget' main other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'af' 'am' 'ar' 'as' 'az' 'be' 'bg' 'bn' 'bs' 'ca' 'cs' 'da' 'de' 'el' 'en-AU' 'en-CA' 'en-GB' 'en-IN' 'en-XC' 'es' 'es-US' 'et' 'eu' 'fa' 'fi' 'fr' 'fr-CA' 'gl' 'gu' 'hi' 'hr' 'hu' 'hy' 'in' 'is' 'it' 'iw' 'ja' 'ka' 'kk' 'km' 'kn' 'ko' 'ky' 'lo' 'lt' 'lv' 'mk' 'ml' 'mn' 'mr' 'ms' 'my' 'nb' 'ne' 'nl' 'no' 'or' 'pa' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'si' 'sk' 'sl' 'sq' 'sr' 'sr-Latn' 'sv' 'sw' 'ta' 'te' 'th' 'tl' 'tr' 'uk' 'ur' 'uz' 'vi' 'zh' 'zh-CN' 'zh-HK' 'zh-TW' 'zu' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.1/aapt-output-com.politedroid_3.txt0000644000175000017500000000262414717152070025411 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.1/aapt-output-com.politedroid_4.txt0000644000175000017500000000262414717152070025412 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.1/aapt-output-com.politedroid_5.txt0000644000175000017500000000170614717152070025413 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' platformBuildVersionName='' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.1/aapt-output-com.politedroid_6.txt0000644000175000017500000000174314717152070025415 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.1/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000347614717152070027567 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission-sdk-23: name='android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS' maxSdkVersion='27' uses-permission-sdk-23: name='android.permission.REQUEST_INSTALL_PACKAGES' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label:'Duplicate Permisssions' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='Duplicate Permisssions' icon='res/drawable/ic_launcher.png' banner='res/drawable/banner.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' maxSdkVersion='18' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' maxSdkVersion='18' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.software.leanback' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.1/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000157614717152070027744 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000124714717152070030050 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-label:'Caffeine Tile' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='Caffeine Tile' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.1/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000322614717152070027100 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission-sdk-23: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission-sdk-23: name='android.permission.WRITE_SETTINGS' maxSdkVersion='25' uses-permission: name='android.permission.NFC' application-label:'OBB Main Old Version' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Old Version' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' uses-feature-not-required: name='android.hardware.bluetooth' uses-feature-not-required: name='android.hardware.nfc' uses-feature-not-required: name='android.hardware.telephony' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.hardware.wifi' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.1/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000134614717152070027056 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.1/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000134614717152070027060 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.1/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000134614717152070027062 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.1/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000126414717152070026741 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.1/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000130514717152070026431 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' platformBuildVersionName='' sdkVersion:'8' targetSdkVersion:'28' uses-permission: name='android.permission.VIBRATE' application-label:'DroidTR keyboard' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR keyboard' icon='res/drawable/ic_launcher.png' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' provides-component:'ime' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.1/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000311614717152070025465 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' platformBuildVersionName='' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-label:'Battery level' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='Battery level' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2801871 fdroidserver-2.4.0/tests/build-tools/26.0.2/0000755000175000017500000000000014770510164017050 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.2/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001457714717152070025125 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' platformBuildVersionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.CALL_PHONE' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.READ_SMS' uses-permission: name='android.permission.READ_PHONE_STATE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.RECEIVE_MMS' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.WRITE_SMS' uses-permission: name='com.android.vending.BILLING' uses-permission: name='android.permission.INTERNET' uses-permission: name='com.sec.android.provider.badge.permission.READ' uses-permission: name='com.sec.android.provider.badge.permission.WRITE' uses-permission: name='com.htc.launcher.permission.READ_SETTINGS' uses-permission: name='com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission: name='com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission: name='com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission: name='com.majeur.launcher.permission.UPDATE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission: name='android.permission.READ_APP_BADGE' uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS' uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_READ' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_WRITE' application-label:'QKSMS' application-label-af:'QKSMS' application-label-am:'QKSMS' application-label-ar:'QKSMS' application-label-as:'QKSMS' application-label-az:'QKSMS' application-label-be:'QKSMS' application-label-bg:'QKSMS' application-label-bn:'QKSMS' application-label-bs:'QKSMS' application-label-ca:'QKSMS' application-label-cs:'QKSMS' application-label-da:'QKSMS' application-label-de:'QKSMS' application-label-el:'QKSMS' application-label-en-AU:'QKSMS' application-label-en-CA:'QKSMS' application-label-en-GB:'QKSMS' application-label-en-IN:'QKSMS' application-label-en-XC:'QKSMS' application-label-es:'QKSMS' application-label-es-US:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-fa:'QKSMS' application-label-fi:'QKSMS' application-label-fr:'QKSMS' application-label-fr-CA:'QKSMS' application-label-gl:'QKSMS' application-label-gu:'QKSMS' application-label-hi:'QKSMS' application-label-hr:'QKSMS' application-label-hu:'QKSMS' application-label-hy:'QKSMS' application-label-in:'QKSMS' application-label-is:'QKSMS' application-label-it:'QKSMS' application-label-iw:'QKSMS' application-label-ja:'QKSMS' application-label-ka:'QKSMS' application-label-kk:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-ko:'QKSMS' application-label-ky:'QKSMS' application-label-lo:'QKSMS' application-label-lt:'QKSMS' application-label-lv:'QKSMS' application-label-mk:'QKSMS' application-label-ml:'QKSMS' application-label-mn:'QKSMS' application-label-mr:'QKSMS' application-label-ms:'QKSMS' application-label-my:'QKSMS' application-label-nb:'QKSMS' application-label-ne:'QKSMS' application-label-nl:'QKSMS' application-label-no:'QKSMS' application-label-or:'QKSMS' application-label-pa:'QKSMS' application-label-pl:'QKSMS' application-label-pt:'QKSMS' application-label-pt-BR:'QKSMS' application-label-pt-PT:'QKSMS' application-label-ro:'QKSMS' application-label-ru:'QKSMS' application-label-si:'QKSMS' application-label-sk:'QKSMS' application-label-sl:'QKSMS' application-label-sq:'QKSMS' application-label-sr:'QKSMS' application-label-sr-Latn:'QKSMS' application-label-sv:'QKSMS' application-label-sw:'QKSMS' application-label-ta:'QKSMS' application-label-te:'QKSMS' application-label-th:'QKSMS' application-label-tl:'QKSMS' application-label-tr:'QKSMS' application-label-uk:'QKSMS' application-label-ur:'QKSMS' application-label-uz:'QKSMS' application-label-vi:'QKSMS' application-label-zh:'QKSMS' application-label-zh-CN:'QKSMS' application-label-zh-HK:'QKSMS' application-label-zh-TW:'QKSMS' application-label-zu:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' provides-component:'app-widget' main other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'af' 'am' 'ar' 'as' 'az' 'be' 'bg' 'bn' 'bs' 'ca' 'cs' 'da' 'de' 'el' 'en-AU' 'en-CA' 'en-GB' 'en-IN' 'en-XC' 'es' 'es-US' 'et' 'eu' 'fa' 'fi' 'fr' 'fr-CA' 'gl' 'gu' 'hi' 'hr' 'hu' 'hy' 'in' 'is' 'it' 'iw' 'ja' 'ka' 'kk' 'km' 'kn' 'ko' 'ky' 'lo' 'lt' 'lv' 'mk' 'ml' 'mn' 'mr' 'ms' 'my' 'nb' 'ne' 'nl' 'no' 'or' 'pa' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'si' 'sk' 'sl' 'sq' 'sr' 'sr-Latn' 'sv' 'sw' 'ta' 'te' 'th' 'tl' 'tr' 'uk' 'ur' 'uz' 'vi' 'zh' 'zh-CN' 'zh-HK' 'zh-TW' 'zu' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.2/aapt-output-com.politedroid_3.txt0000644000175000017500000000262414717152070025412 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.2/aapt-output-com.politedroid_4.txt0000644000175000017500000000262414717152070025413 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.2/aapt-output-com.politedroid_5.txt0000644000175000017500000000170614717152070025414 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' platformBuildVersionName='' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.2/aapt-output-com.politedroid_6.txt0000644000175000017500000000174314717152070025416 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.2/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000347614717152070027570 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission-sdk-23: name='android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS' maxSdkVersion='27' uses-permission-sdk-23: name='android.permission.REQUEST_INSTALL_PACKAGES' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label:'Duplicate Permisssions' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='Duplicate Permisssions' icon='res/drawable/ic_launcher.png' banner='res/drawable/banner.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' maxSdkVersion='18' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' maxSdkVersion='18' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.software.leanback' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.2/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000157614717152070027745 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000124714717152070030051 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-label:'Caffeine Tile' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='Caffeine Tile' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.2/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000322614717152070027101 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission-sdk-23: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission-sdk-23: name='android.permission.WRITE_SETTINGS' maxSdkVersion='25' uses-permission: name='android.permission.NFC' application-label:'OBB Main Old Version' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Old Version' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' uses-feature-not-required: name='android.hardware.bluetooth' uses-feature-not-required: name='android.hardware.nfc' uses-feature-not-required: name='android.hardware.telephony' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.hardware.wifi' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.2/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000134614717152070027057 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.2/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000134614717152070027061 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.2/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000134614717152070027063 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.2/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000126414717152070026742 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.2/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000130514717152070026432 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' platformBuildVersionName='' sdkVersion:'8' targetSdkVersion:'28' uses-permission: name='android.permission.VIBRATE' application-label:'DroidTR keyboard' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR keyboard' icon='res/drawable/ic_launcher.png' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' provides-component:'ime' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.2/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000311614717152070025466 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' platformBuildVersionName='' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-label:'Battery level' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='Battery level' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2801871 fdroidserver-2.4.0/tests/build-tools/26.0.3/0000755000175000017500000000000014770510164017051 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.3/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001457714717152070025126 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' platformBuildVersionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.CALL_PHONE' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.READ_SMS' uses-permission: name='android.permission.READ_PHONE_STATE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.RECEIVE_MMS' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.WRITE_SMS' uses-permission: name='com.android.vending.BILLING' uses-permission: name='android.permission.INTERNET' uses-permission: name='com.sec.android.provider.badge.permission.READ' uses-permission: name='com.sec.android.provider.badge.permission.WRITE' uses-permission: name='com.htc.launcher.permission.READ_SETTINGS' uses-permission: name='com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission: name='com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission: name='com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission: name='com.majeur.launcher.permission.UPDATE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission: name='android.permission.READ_APP_BADGE' uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS' uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_READ' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_WRITE' application-label:'QKSMS' application-label-af:'QKSMS' application-label-am:'QKSMS' application-label-ar:'QKSMS' application-label-as:'QKSMS' application-label-az:'QKSMS' application-label-be:'QKSMS' application-label-bg:'QKSMS' application-label-bn:'QKSMS' application-label-bs:'QKSMS' application-label-ca:'QKSMS' application-label-cs:'QKSMS' application-label-da:'QKSMS' application-label-de:'QKSMS' application-label-el:'QKSMS' application-label-en-AU:'QKSMS' application-label-en-CA:'QKSMS' application-label-en-GB:'QKSMS' application-label-en-IN:'QKSMS' application-label-en-XC:'QKSMS' application-label-es:'QKSMS' application-label-es-US:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-fa:'QKSMS' application-label-fi:'QKSMS' application-label-fr:'QKSMS' application-label-fr-CA:'QKSMS' application-label-gl:'QKSMS' application-label-gu:'QKSMS' application-label-hi:'QKSMS' application-label-hr:'QKSMS' application-label-hu:'QKSMS' application-label-hy:'QKSMS' application-label-in:'QKSMS' application-label-is:'QKSMS' application-label-it:'QKSMS' application-label-iw:'QKSMS' application-label-ja:'QKSMS' application-label-ka:'QKSMS' application-label-kk:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-ko:'QKSMS' application-label-ky:'QKSMS' application-label-lo:'QKSMS' application-label-lt:'QKSMS' application-label-lv:'QKSMS' application-label-mk:'QKSMS' application-label-ml:'QKSMS' application-label-mn:'QKSMS' application-label-mr:'QKSMS' application-label-ms:'QKSMS' application-label-my:'QKSMS' application-label-nb:'QKSMS' application-label-ne:'QKSMS' application-label-nl:'QKSMS' application-label-no:'QKSMS' application-label-or:'QKSMS' application-label-pa:'QKSMS' application-label-pl:'QKSMS' application-label-pt:'QKSMS' application-label-pt-BR:'QKSMS' application-label-pt-PT:'QKSMS' application-label-ro:'QKSMS' application-label-ru:'QKSMS' application-label-si:'QKSMS' application-label-sk:'QKSMS' application-label-sl:'QKSMS' application-label-sq:'QKSMS' application-label-sr:'QKSMS' application-label-sr-Latn:'QKSMS' application-label-sv:'QKSMS' application-label-sw:'QKSMS' application-label-ta:'QKSMS' application-label-te:'QKSMS' application-label-th:'QKSMS' application-label-tl:'QKSMS' application-label-tr:'QKSMS' application-label-uk:'QKSMS' application-label-ur:'QKSMS' application-label-uz:'QKSMS' application-label-vi:'QKSMS' application-label-zh:'QKSMS' application-label-zh-CN:'QKSMS' application-label-zh-HK:'QKSMS' application-label-zh-TW:'QKSMS' application-label-zu:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' provides-component:'app-widget' main other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'af' 'am' 'ar' 'as' 'az' 'be' 'bg' 'bn' 'bs' 'ca' 'cs' 'da' 'de' 'el' 'en-AU' 'en-CA' 'en-GB' 'en-IN' 'en-XC' 'es' 'es-US' 'et' 'eu' 'fa' 'fi' 'fr' 'fr-CA' 'gl' 'gu' 'hi' 'hr' 'hu' 'hy' 'in' 'is' 'it' 'iw' 'ja' 'ka' 'kk' 'km' 'kn' 'ko' 'ky' 'lo' 'lt' 'lv' 'mk' 'ml' 'mn' 'mr' 'ms' 'my' 'nb' 'ne' 'nl' 'no' 'or' 'pa' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'si' 'sk' 'sl' 'sq' 'sr' 'sr-Latn' 'sv' 'sw' 'ta' 'te' 'th' 'tl' 'tr' 'uk' 'ur' 'uz' 'vi' 'zh' 'zh-CN' 'zh-HK' 'zh-TW' 'zu' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.3/aapt-output-com.politedroid_3.txt0000644000175000017500000000262414717152070025413 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.3/aapt-output-com.politedroid_4.txt0000644000175000017500000000262414717152070025414 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.3/aapt-output-com.politedroid_5.txt0000644000175000017500000000170614717152070025415 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' platformBuildVersionName='' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.3/aapt-output-com.politedroid_6.txt0000644000175000017500000000174314717152070025417 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.3/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000347614717152070027571 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission-sdk-23: name='android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS' maxSdkVersion='27' uses-permission-sdk-23: name='android.permission.REQUEST_INSTALL_PACKAGES' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label:'Duplicate Permisssions' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='Duplicate Permisssions' icon='res/drawable/ic_launcher.png' banner='res/drawable/banner.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' maxSdkVersion='18' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' maxSdkVersion='18' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.software.leanback' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.3/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000157614717152070027746 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000124714717152070030052 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-label:'Caffeine Tile' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='Caffeine Tile' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.3/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000322614717152070027102 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission-sdk-23: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission-sdk-23: name='android.permission.WRITE_SETTINGS' maxSdkVersion='25' uses-permission: name='android.permission.NFC' application-label:'OBB Main Old Version' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Old Version' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' uses-feature-not-required: name='android.hardware.bluetooth' uses-feature-not-required: name='android.hardware.nfc' uses-feature-not-required: name='android.hardware.telephony' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.hardware.wifi' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.3/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000134614717152070027060 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.3/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000134614717152070027062 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.3/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000134614717152070027064 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.3/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000126414717152070026743 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.3/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000130514717152070026433 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' platformBuildVersionName='' sdkVersion:'8' targetSdkVersion:'28' uses-permission: name='android.permission.VIBRATE' application-label:'DroidTR keyboard' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR keyboard' icon='res/drawable/ic_launcher.png' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' provides-component:'ime' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/26.0.3/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000311614717152070025467 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' platformBuildVersionName='' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-label:'Battery level' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='Battery level' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.284187 fdroidserver-2.4.0/tests/build-tools/27.0.0/0000755000175000017500000000000014770510164017047 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.0/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001457714717152070025124 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' platformBuildVersionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.CALL_PHONE' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.READ_SMS' uses-permission: name='android.permission.READ_PHONE_STATE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.RECEIVE_MMS' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.WRITE_SMS' uses-permission: name='com.android.vending.BILLING' uses-permission: name='android.permission.INTERNET' uses-permission: name='com.sec.android.provider.badge.permission.READ' uses-permission: name='com.sec.android.provider.badge.permission.WRITE' uses-permission: name='com.htc.launcher.permission.READ_SETTINGS' uses-permission: name='com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission: name='com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission: name='com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission: name='com.majeur.launcher.permission.UPDATE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission: name='android.permission.READ_APP_BADGE' uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS' uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_READ' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_WRITE' application-label:'QKSMS' application-label-af:'QKSMS' application-label-am:'QKSMS' application-label-ar:'QKSMS' application-label-as:'QKSMS' application-label-az:'QKSMS' application-label-be:'QKSMS' application-label-bg:'QKSMS' application-label-bn:'QKSMS' application-label-bs:'QKSMS' application-label-ca:'QKSMS' application-label-cs:'QKSMS' application-label-da:'QKSMS' application-label-de:'QKSMS' application-label-el:'QKSMS' application-label-en-AU:'QKSMS' application-label-en-CA:'QKSMS' application-label-en-GB:'QKSMS' application-label-en-IN:'QKSMS' application-label-en-XC:'QKSMS' application-label-es:'QKSMS' application-label-es-US:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-fa:'QKSMS' application-label-fi:'QKSMS' application-label-fr:'QKSMS' application-label-fr-CA:'QKSMS' application-label-gl:'QKSMS' application-label-gu:'QKSMS' application-label-hi:'QKSMS' application-label-hr:'QKSMS' application-label-hu:'QKSMS' application-label-hy:'QKSMS' application-label-in:'QKSMS' application-label-is:'QKSMS' application-label-it:'QKSMS' application-label-iw:'QKSMS' application-label-ja:'QKSMS' application-label-ka:'QKSMS' application-label-kk:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-ko:'QKSMS' application-label-ky:'QKSMS' application-label-lo:'QKSMS' application-label-lt:'QKSMS' application-label-lv:'QKSMS' application-label-mk:'QKSMS' application-label-ml:'QKSMS' application-label-mn:'QKSMS' application-label-mr:'QKSMS' application-label-ms:'QKSMS' application-label-my:'QKSMS' application-label-nb:'QKSMS' application-label-ne:'QKSMS' application-label-nl:'QKSMS' application-label-no:'QKSMS' application-label-or:'QKSMS' application-label-pa:'QKSMS' application-label-pl:'QKSMS' application-label-pt:'QKSMS' application-label-pt-BR:'QKSMS' application-label-pt-PT:'QKSMS' application-label-ro:'QKSMS' application-label-ru:'QKSMS' application-label-si:'QKSMS' application-label-sk:'QKSMS' application-label-sl:'QKSMS' application-label-sq:'QKSMS' application-label-sr:'QKSMS' application-label-sr-Latn:'QKSMS' application-label-sv:'QKSMS' application-label-sw:'QKSMS' application-label-ta:'QKSMS' application-label-te:'QKSMS' application-label-th:'QKSMS' application-label-tl:'QKSMS' application-label-tr:'QKSMS' application-label-uk:'QKSMS' application-label-ur:'QKSMS' application-label-uz:'QKSMS' application-label-vi:'QKSMS' application-label-zh:'QKSMS' application-label-zh-CN:'QKSMS' application-label-zh-HK:'QKSMS' application-label-zh-TW:'QKSMS' application-label-zu:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' provides-component:'app-widget' main other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'af' 'am' 'ar' 'as' 'az' 'be' 'bg' 'bn' 'bs' 'ca' 'cs' 'da' 'de' 'el' 'en-AU' 'en-CA' 'en-GB' 'en-IN' 'en-XC' 'es' 'es-US' 'et' 'eu' 'fa' 'fi' 'fr' 'fr-CA' 'gl' 'gu' 'hi' 'hr' 'hu' 'hy' 'in' 'is' 'it' 'iw' 'ja' 'ka' 'kk' 'km' 'kn' 'ko' 'ky' 'lo' 'lt' 'lv' 'mk' 'ml' 'mn' 'mr' 'ms' 'my' 'nb' 'ne' 'nl' 'no' 'or' 'pa' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'si' 'sk' 'sl' 'sq' 'sr' 'sr-Latn' 'sv' 'sw' 'ta' 'te' 'th' 'tl' 'tr' 'uk' 'ur' 'uz' 'vi' 'zh' 'zh-CN' 'zh-HK' 'zh-TW' 'zu' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.0/aapt-output-com.politedroid_3.txt0000644000175000017500000000262414717152070025411 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.0/aapt-output-com.politedroid_4.txt0000644000175000017500000000262414717152070025412 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.0/aapt-output-com.politedroid_5.txt0000644000175000017500000000170614717152070025413 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' platformBuildVersionName='' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.0/aapt-output-com.politedroid_6.txt0000644000175000017500000000174314717152070025415 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.0/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000347614717152070027567 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission-sdk-23: name='android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS' maxSdkVersion='27' uses-permission-sdk-23: name='android.permission.REQUEST_INSTALL_PACKAGES' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label:'Duplicate Permisssions' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='Duplicate Permisssions' icon='res/drawable/ic_launcher.png' banner='res/drawable/banner.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' maxSdkVersion='18' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' maxSdkVersion='18' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.software.leanback' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.0/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000157614717152070027744 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000124714717152070030050 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-label:'Caffeine Tile' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='Caffeine Tile' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.0/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000322614717152070027100 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission-sdk-23: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission-sdk-23: name='android.permission.WRITE_SETTINGS' maxSdkVersion='25' uses-permission: name='android.permission.NFC' application-label:'OBB Main Old Version' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Old Version' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' uses-feature-not-required: name='android.hardware.bluetooth' uses-feature-not-required: name='android.hardware.nfc' uses-feature-not-required: name='android.hardware.telephony' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.hardware.wifi' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.0/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000134614717152070027056 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.0/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000134614717152070027060 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.0/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000134614717152070027062 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.0/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000126414717152070026741 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.0/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000130514717152070026431 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' platformBuildVersionName='' sdkVersion:'8' targetSdkVersion:'28' uses-permission: name='android.permission.VIBRATE' application-label:'DroidTR keyboard' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR keyboard' icon='res/drawable/ic_launcher.png' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' provides-component:'ime' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.0/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000311614717152070025465 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' platformBuildVersionName='' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-label:'Battery level' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='Battery level' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.284187 fdroidserver-2.4.0/tests/build-tools/27.0.1/0000755000175000017500000000000014770510164017050 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.1/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001457714717152070025125 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' platformBuildVersionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.CALL_PHONE' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.READ_SMS' uses-permission: name='android.permission.READ_PHONE_STATE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.RECEIVE_MMS' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.WRITE_SMS' uses-permission: name='com.android.vending.BILLING' uses-permission: name='android.permission.INTERNET' uses-permission: name='com.sec.android.provider.badge.permission.READ' uses-permission: name='com.sec.android.provider.badge.permission.WRITE' uses-permission: name='com.htc.launcher.permission.READ_SETTINGS' uses-permission: name='com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission: name='com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission: name='com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission: name='com.majeur.launcher.permission.UPDATE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission: name='android.permission.READ_APP_BADGE' uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS' uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_READ' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_WRITE' application-label:'QKSMS' application-label-af:'QKSMS' application-label-am:'QKSMS' application-label-ar:'QKSMS' application-label-as:'QKSMS' application-label-az:'QKSMS' application-label-be:'QKSMS' application-label-bg:'QKSMS' application-label-bn:'QKSMS' application-label-bs:'QKSMS' application-label-ca:'QKSMS' application-label-cs:'QKSMS' application-label-da:'QKSMS' application-label-de:'QKSMS' application-label-el:'QKSMS' application-label-en-AU:'QKSMS' application-label-en-CA:'QKSMS' application-label-en-GB:'QKSMS' application-label-en-IN:'QKSMS' application-label-en-XC:'QKSMS' application-label-es:'QKSMS' application-label-es-US:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-fa:'QKSMS' application-label-fi:'QKSMS' application-label-fr:'QKSMS' application-label-fr-CA:'QKSMS' application-label-gl:'QKSMS' application-label-gu:'QKSMS' application-label-hi:'QKSMS' application-label-hr:'QKSMS' application-label-hu:'QKSMS' application-label-hy:'QKSMS' application-label-in:'QKSMS' application-label-is:'QKSMS' application-label-it:'QKSMS' application-label-iw:'QKSMS' application-label-ja:'QKSMS' application-label-ka:'QKSMS' application-label-kk:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-ko:'QKSMS' application-label-ky:'QKSMS' application-label-lo:'QKSMS' application-label-lt:'QKSMS' application-label-lv:'QKSMS' application-label-mk:'QKSMS' application-label-ml:'QKSMS' application-label-mn:'QKSMS' application-label-mr:'QKSMS' application-label-ms:'QKSMS' application-label-my:'QKSMS' application-label-nb:'QKSMS' application-label-ne:'QKSMS' application-label-nl:'QKSMS' application-label-no:'QKSMS' application-label-or:'QKSMS' application-label-pa:'QKSMS' application-label-pl:'QKSMS' application-label-pt:'QKSMS' application-label-pt-BR:'QKSMS' application-label-pt-PT:'QKSMS' application-label-ro:'QKSMS' application-label-ru:'QKSMS' application-label-si:'QKSMS' application-label-sk:'QKSMS' application-label-sl:'QKSMS' application-label-sq:'QKSMS' application-label-sr:'QKSMS' application-label-sr-Latn:'QKSMS' application-label-sv:'QKSMS' application-label-sw:'QKSMS' application-label-ta:'QKSMS' application-label-te:'QKSMS' application-label-th:'QKSMS' application-label-tl:'QKSMS' application-label-tr:'QKSMS' application-label-uk:'QKSMS' application-label-ur:'QKSMS' application-label-uz:'QKSMS' application-label-vi:'QKSMS' application-label-zh:'QKSMS' application-label-zh-CN:'QKSMS' application-label-zh-HK:'QKSMS' application-label-zh-TW:'QKSMS' application-label-zu:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' provides-component:'app-widget' main other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'af' 'am' 'ar' 'as' 'az' 'be' 'bg' 'bn' 'bs' 'ca' 'cs' 'da' 'de' 'el' 'en-AU' 'en-CA' 'en-GB' 'en-IN' 'en-XC' 'es' 'es-US' 'et' 'eu' 'fa' 'fi' 'fr' 'fr-CA' 'gl' 'gu' 'hi' 'hr' 'hu' 'hy' 'in' 'is' 'it' 'iw' 'ja' 'ka' 'kk' 'km' 'kn' 'ko' 'ky' 'lo' 'lt' 'lv' 'mk' 'ml' 'mn' 'mr' 'ms' 'my' 'nb' 'ne' 'nl' 'no' 'or' 'pa' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'si' 'sk' 'sl' 'sq' 'sr' 'sr-Latn' 'sv' 'sw' 'ta' 'te' 'th' 'tl' 'tr' 'uk' 'ur' 'uz' 'vi' 'zh' 'zh-CN' 'zh-HK' 'zh-TW' 'zu' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.1/aapt-output-com.politedroid_3.txt0000644000175000017500000000262414717152070025412 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.1/aapt-output-com.politedroid_4.txt0000644000175000017500000000262414717152070025413 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.1/aapt-output-com.politedroid_5.txt0000644000175000017500000000170614717152070025414 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' platformBuildVersionName='' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.1/aapt-output-com.politedroid_6.txt0000644000175000017500000000174314717152070025416 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.1/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000347614717152070027570 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission-sdk-23: name='android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS' maxSdkVersion='27' uses-permission-sdk-23: name='android.permission.REQUEST_INSTALL_PACKAGES' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label:'Duplicate Permisssions' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='Duplicate Permisssions' icon='res/drawable/ic_launcher.png' banner='res/drawable/banner.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' maxSdkVersion='18' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' maxSdkVersion='18' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.software.leanback' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.1/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000157614717152070027745 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000124714717152070030051 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-label:'Caffeine Tile' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='Caffeine Tile' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.1/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000322614717152070027101 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission-sdk-23: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission-sdk-23: name='android.permission.WRITE_SETTINGS' maxSdkVersion='25' uses-permission: name='android.permission.NFC' application-label:'OBB Main Old Version' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Old Version' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' uses-feature-not-required: name='android.hardware.bluetooth' uses-feature-not-required: name='android.hardware.nfc' uses-feature-not-required: name='android.hardware.telephony' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.hardware.wifi' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.1/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000134614717152070027057 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.1/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000134614717152070027061 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.1/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000134614717152070027063 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.1/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000126414717152070026742 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.1/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000130514717152070026432 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' platformBuildVersionName='' sdkVersion:'8' targetSdkVersion:'28' uses-permission: name='android.permission.VIBRATE' application-label:'DroidTR keyboard' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR keyboard' icon='res/drawable/ic_launcher.png' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' provides-component:'ime' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.1/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000311614717152070025466 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' platformBuildVersionName='' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-label:'Battery level' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='Battery level' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.284187 fdroidserver-2.4.0/tests/build-tools/27.0.2/0000755000175000017500000000000014770510164017051 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.2/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001457714717152070025126 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' platformBuildVersionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.CALL_PHONE' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.READ_SMS' uses-permission: name='android.permission.READ_PHONE_STATE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.RECEIVE_MMS' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.WRITE_SMS' uses-permission: name='com.android.vending.BILLING' uses-permission: name='android.permission.INTERNET' uses-permission: name='com.sec.android.provider.badge.permission.READ' uses-permission: name='com.sec.android.provider.badge.permission.WRITE' uses-permission: name='com.htc.launcher.permission.READ_SETTINGS' uses-permission: name='com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission: name='com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission: name='com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission: name='com.majeur.launcher.permission.UPDATE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission: name='android.permission.READ_APP_BADGE' uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS' uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_READ' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_WRITE' application-label:'QKSMS' application-label-af:'QKSMS' application-label-am:'QKSMS' application-label-ar:'QKSMS' application-label-as:'QKSMS' application-label-az:'QKSMS' application-label-be:'QKSMS' application-label-bg:'QKSMS' application-label-bn:'QKSMS' application-label-bs:'QKSMS' application-label-ca:'QKSMS' application-label-cs:'QKSMS' application-label-da:'QKSMS' application-label-de:'QKSMS' application-label-el:'QKSMS' application-label-en-AU:'QKSMS' application-label-en-CA:'QKSMS' application-label-en-GB:'QKSMS' application-label-en-IN:'QKSMS' application-label-en-XC:'QKSMS' application-label-es:'QKSMS' application-label-es-US:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-fa:'QKSMS' application-label-fi:'QKSMS' application-label-fr:'QKSMS' application-label-fr-CA:'QKSMS' application-label-gl:'QKSMS' application-label-gu:'QKSMS' application-label-hi:'QKSMS' application-label-hr:'QKSMS' application-label-hu:'QKSMS' application-label-hy:'QKSMS' application-label-in:'QKSMS' application-label-is:'QKSMS' application-label-it:'QKSMS' application-label-iw:'QKSMS' application-label-ja:'QKSMS' application-label-ka:'QKSMS' application-label-kk:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-ko:'QKSMS' application-label-ky:'QKSMS' application-label-lo:'QKSMS' application-label-lt:'QKSMS' application-label-lv:'QKSMS' application-label-mk:'QKSMS' application-label-ml:'QKSMS' application-label-mn:'QKSMS' application-label-mr:'QKSMS' application-label-ms:'QKSMS' application-label-my:'QKSMS' application-label-nb:'QKSMS' application-label-ne:'QKSMS' application-label-nl:'QKSMS' application-label-no:'QKSMS' application-label-or:'QKSMS' application-label-pa:'QKSMS' application-label-pl:'QKSMS' application-label-pt:'QKSMS' application-label-pt-BR:'QKSMS' application-label-pt-PT:'QKSMS' application-label-ro:'QKSMS' application-label-ru:'QKSMS' application-label-si:'QKSMS' application-label-sk:'QKSMS' application-label-sl:'QKSMS' application-label-sq:'QKSMS' application-label-sr:'QKSMS' application-label-sr-Latn:'QKSMS' application-label-sv:'QKSMS' application-label-sw:'QKSMS' application-label-ta:'QKSMS' application-label-te:'QKSMS' application-label-th:'QKSMS' application-label-tl:'QKSMS' application-label-tr:'QKSMS' application-label-uk:'QKSMS' application-label-ur:'QKSMS' application-label-uz:'QKSMS' application-label-vi:'QKSMS' application-label-zh:'QKSMS' application-label-zh-CN:'QKSMS' application-label-zh-HK:'QKSMS' application-label-zh-TW:'QKSMS' application-label-zu:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' provides-component:'app-widget' main other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'af' 'am' 'ar' 'as' 'az' 'be' 'bg' 'bn' 'bs' 'ca' 'cs' 'da' 'de' 'el' 'en-AU' 'en-CA' 'en-GB' 'en-IN' 'en-XC' 'es' 'es-US' 'et' 'eu' 'fa' 'fi' 'fr' 'fr-CA' 'gl' 'gu' 'hi' 'hr' 'hu' 'hy' 'in' 'is' 'it' 'iw' 'ja' 'ka' 'kk' 'km' 'kn' 'ko' 'ky' 'lo' 'lt' 'lv' 'mk' 'ml' 'mn' 'mr' 'ms' 'my' 'nb' 'ne' 'nl' 'no' 'or' 'pa' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'si' 'sk' 'sl' 'sq' 'sr' 'sr-Latn' 'sv' 'sw' 'ta' 'te' 'th' 'tl' 'tr' 'uk' 'ur' 'uz' 'vi' 'zh' 'zh-CN' 'zh-HK' 'zh-TW' 'zu' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.2/aapt-output-com.politedroid_3.txt0000644000175000017500000000262414717152070025413 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.2/aapt-output-com.politedroid_4.txt0000644000175000017500000000262414717152070025414 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.2/aapt-output-com.politedroid_5.txt0000644000175000017500000000170614717152070025415 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' platformBuildVersionName='' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.2/aapt-output-com.politedroid_6.txt0000644000175000017500000000174314717152070025417 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.2/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000347614717152070027571 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission-sdk-23: name='android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS' maxSdkVersion='27' uses-permission-sdk-23: name='android.permission.REQUEST_INSTALL_PACKAGES' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label:'Duplicate Permisssions' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='Duplicate Permisssions' icon='res/drawable/ic_launcher.png' banner='res/drawable/banner.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' maxSdkVersion='18' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' maxSdkVersion='18' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.software.leanback' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.2/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000157614717152070027746 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000124714717152070030052 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-label:'Caffeine Tile' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='Caffeine Tile' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.2/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000322614717152070027102 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission-sdk-23: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission-sdk-23: name='android.permission.WRITE_SETTINGS' maxSdkVersion='25' uses-permission: name='android.permission.NFC' application-label:'OBB Main Old Version' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Old Version' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' uses-feature-not-required: name='android.hardware.bluetooth' uses-feature-not-required: name='android.hardware.nfc' uses-feature-not-required: name='android.hardware.telephony' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.hardware.wifi' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.2/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000134614717152070027060 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.2/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000134614717152070027062 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.2/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000134614717152070027064 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.2/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000126414717152070026743 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.2/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000130514717152070026433 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' platformBuildVersionName='' sdkVersion:'8' targetSdkVersion:'28' uses-permission: name='android.permission.VIBRATE' application-label:'DroidTR keyboard' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR keyboard' icon='res/drawable/ic_launcher.png' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' provides-component:'ime' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.2/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000311614717152070025467 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' platformBuildVersionName='' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-label:'Battery level' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='Battery level' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.288187 fdroidserver-2.4.0/tests/build-tools/27.0.3/0000755000175000017500000000000014770510164017052 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.3/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001457714717152070025127 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' platformBuildVersionName='3.4.3' sdkVersion:'21' targetSdkVersion:'28' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.CALL_PHONE' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.READ_SMS' uses-permission: name='android.permission.READ_PHONE_STATE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.RECEIVE_MMS' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.WRITE_SMS' uses-permission: name='com.android.vending.BILLING' uses-permission: name='android.permission.INTERNET' uses-permission: name='com.sec.android.provider.badge.permission.READ' uses-permission: name='com.sec.android.provider.badge.permission.WRITE' uses-permission: name='com.htc.launcher.permission.READ_SETTINGS' uses-permission: name='com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission: name='com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission: name='com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission: name='com.majeur.launcher.permission.UPDATE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission: name='android.permission.READ_APP_BADGE' uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS' uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_READ' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_WRITE' application-label:'QKSMS' application-label-af:'QKSMS' application-label-am:'QKSMS' application-label-ar:'QKSMS' application-label-as:'QKSMS' application-label-az:'QKSMS' application-label-be:'QKSMS' application-label-bg:'QKSMS' application-label-bn:'QKSMS' application-label-bs:'QKSMS' application-label-ca:'QKSMS' application-label-cs:'QKSMS' application-label-da:'QKSMS' application-label-de:'QKSMS' application-label-el:'QKSMS' application-label-en-AU:'QKSMS' application-label-en-CA:'QKSMS' application-label-en-GB:'QKSMS' application-label-en-IN:'QKSMS' application-label-en-XC:'QKSMS' application-label-es:'QKSMS' application-label-es-US:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-fa:'QKSMS' application-label-fi:'QKSMS' application-label-fr:'QKSMS' application-label-fr-CA:'QKSMS' application-label-gl:'QKSMS' application-label-gu:'QKSMS' application-label-hi:'QKSMS' application-label-hr:'QKSMS' application-label-hu:'QKSMS' application-label-hy:'QKSMS' application-label-in:'QKSMS' application-label-is:'QKSMS' application-label-it:'QKSMS' application-label-iw:'QKSMS' application-label-ja:'QKSMS' application-label-ka:'QKSMS' application-label-kk:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-ko:'QKSMS' application-label-ky:'QKSMS' application-label-lo:'QKSMS' application-label-lt:'QKSMS' application-label-lv:'QKSMS' application-label-mk:'QKSMS' application-label-ml:'QKSMS' application-label-mn:'QKSMS' application-label-mr:'QKSMS' application-label-ms:'QKSMS' application-label-my:'QKSMS' application-label-nb:'QKSMS' application-label-ne:'QKSMS' application-label-nl:'QKSMS' application-label-no:'QKSMS' application-label-or:'QKSMS' application-label-pa:'QKSMS' application-label-pl:'QKSMS' application-label-pt:'QKSMS' application-label-pt-BR:'QKSMS' application-label-pt-PT:'QKSMS' application-label-ro:'QKSMS' application-label-ru:'QKSMS' application-label-si:'QKSMS' application-label-sk:'QKSMS' application-label-sl:'QKSMS' application-label-sq:'QKSMS' application-label-sr:'QKSMS' application-label-sr-Latn:'QKSMS' application-label-sv:'QKSMS' application-label-sw:'QKSMS' application-label-ta:'QKSMS' application-label-te:'QKSMS' application-label-th:'QKSMS' application-label-tl:'QKSMS' application-label-tr:'QKSMS' application-label-uk:'QKSMS' application-label-ur:'QKSMS' application-label-uz:'QKSMS' application-label-vi:'QKSMS' application-label-zh:'QKSMS' application-label-zh-CN:'QKSMS' application-label-zh-HK:'QKSMS' application-label-zh-TW:'QKSMS' application-label-zu:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' provides-component:'app-widget' main other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'af' 'am' 'ar' 'as' 'az' 'be' 'bg' 'bn' 'bs' 'ca' 'cs' 'da' 'de' 'el' 'en-AU' 'en-CA' 'en-GB' 'en-IN' 'en-XC' 'es' 'es-US' 'et' 'eu' 'fa' 'fi' 'fr' 'fr-CA' 'gl' 'gu' 'hi' 'hr' 'hu' 'hy' 'in' 'is' 'it' 'iw' 'ja' 'ka' 'kk' 'km' 'kn' 'ko' 'ky' 'lo' 'lt' 'lv' 'mk' 'ml' 'mn' 'mr' 'ms' 'my' 'nb' 'ne' 'nl' 'no' 'or' 'pa' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'si' 'sk' 'sl' 'sq' 'sr' 'sr-Latn' 'sv' 'sw' 'ta' 'te' 'th' 'tl' 'tr' 'uk' 'ur' 'uz' 'vi' 'zh' 'zh-CN' 'zh-HK' 'zh-TW' 'zu' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.3/aapt-output-com.politedroid_3.txt0000644000175000017500000000262414717152070025414 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.3/aapt-output-com.politedroid_4.txt0000644000175000017500000000262414717152070025415 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' platformBuildVersionName='' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.3/aapt-output-com.politedroid_5.txt0000644000175000017500000000170614717152070025416 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' platformBuildVersionName='' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.3/aapt-output-com.politedroid_6.txt0000644000175000017500000000174314717152070025420 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.3/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000347614717152070027572 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission-sdk-23: name='android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS' maxSdkVersion='27' uses-permission-sdk-23: name='android.permission.REQUEST_INSTALL_PACKAGES' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label:'Duplicate Permisssions' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='Duplicate Permisssions' icon='res/drawable/ic_launcher.png' banner='res/drawable/banner.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' maxSdkVersion='18' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' maxSdkVersion='18' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.software.leanback' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.3/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000157614717152070027747 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000124714717152070030053 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-label:'Caffeine Tile' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='Caffeine Tile' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.3/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000322614717152070027103 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission-sdk-23: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission-sdk-23: name='android.permission.WRITE_SETTINGS' maxSdkVersion='25' uses-permission: name='android.permission.NFC' application-label:'OBB Main Old Version' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Old Version' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' uses-feature-not-required: name='android.hardware.bluetooth' uses-feature-not-required: name='android.hardware.nfc' uses-feature-not-required: name='android.hardware.telephony' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.hardware.wifi' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.3/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000134614717152070027061 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.3/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000134614717152070027063 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.3/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000134614717152070027065 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.3/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000126414717152070026744 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.3/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000130514717152070026434 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' platformBuildVersionName='' sdkVersion:'8' targetSdkVersion:'28' uses-permission: name='android.permission.VIBRATE' application-label:'DroidTR keyboard' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR keyboard' icon='res/drawable/ic_launcher.png' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' provides-component:'ime' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/27.0.3/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000311614717152070025470 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' platformBuildVersionName='' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-label:'Battery level' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='Battery level' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.288187 fdroidserver-2.4.0/tests/build-tools/28.0.0/0000755000175000017500000000000014770510164017050 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.0/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001466414717152070025122 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' platformBuildVersionName='3.4.3' compileSdkVersion='28' compileSdkVersionCodename='9' sdkVersion:'21' targetSdkVersion:'28' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.CALL_PHONE' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.READ_SMS' uses-permission: name='android.permission.READ_PHONE_STATE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.RECEIVE_MMS' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.WRITE_SMS' uses-permission: name='com.android.vending.BILLING' uses-permission: name='android.permission.INTERNET' uses-permission: name='com.sec.android.provider.badge.permission.READ' uses-permission: name='com.sec.android.provider.badge.permission.WRITE' uses-permission: name='com.htc.launcher.permission.READ_SETTINGS' uses-permission: name='com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission: name='com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission: name='com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission: name='com.majeur.launcher.permission.UPDATE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission: name='android.permission.READ_APP_BADGE' uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS' uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_READ' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_WRITE' application-label:'QKSMS' application-label-af:'QKSMS' application-label-am:'QKSMS' application-label-ar:'QKSMS' application-label-as:'QKSMS' application-label-az:'QKSMS' application-label-be:'QKSMS' application-label-bg:'QKSMS' application-label-bn:'QKSMS' application-label-bs:'QKSMS' application-label-ca:'QKSMS' application-label-cs:'QKSMS' application-label-da:'QKSMS' application-label-de:'QKSMS' application-label-el:'QKSMS' application-label-en-AU:'QKSMS' application-label-en-CA:'QKSMS' application-label-en-GB:'QKSMS' application-label-en-IN:'QKSMS' application-label-en-XC:'QKSMS' application-label-es:'QKSMS' application-label-es-US:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-fa:'QKSMS' application-label-fi:'QKSMS' application-label-fr:'QKSMS' application-label-fr-CA:'QKSMS' application-label-gl:'QKSMS' application-label-gu:'QKSMS' application-label-hi:'QKSMS' application-label-hr:'QKSMS' application-label-hu:'QKSMS' application-label-hy:'QKSMS' application-label-in:'QKSMS' application-label-is:'QKSMS' application-label-it:'QKSMS' application-label-iw:'QKSMS' application-label-ja:'QKSMS' application-label-ka:'QKSMS' application-label-kk:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-ko:'QKSMS' application-label-ky:'QKSMS' application-label-lo:'QKSMS' application-label-lt:'QKSMS' application-label-lv:'QKSMS' application-label-mk:'QKSMS' application-label-ml:'QKSMS' application-label-mn:'QKSMS' application-label-mr:'QKSMS' application-label-ms:'QKSMS' application-label-my:'QKSMS' application-label-nb:'QKSMS' application-label-ne:'QKSMS' application-label-nl:'QKSMS' application-label-no:'QKSMS' application-label-or:'QKSMS' application-label-pa:'QKSMS' application-label-pl:'QKSMS' application-label-pt:'QKSMS' application-label-pt-BR:'QKSMS' application-label-pt-PT:'QKSMS' application-label-ro:'QKSMS' application-label-ru:'QKSMS' application-label-si:'QKSMS' application-label-sk:'QKSMS' application-label-sl:'QKSMS' application-label-sq:'QKSMS' application-label-sr:'QKSMS' application-label-sr-Latn:'QKSMS' application-label-sv:'QKSMS' application-label-sw:'QKSMS' application-label-ta:'QKSMS' application-label-te:'QKSMS' application-label-th:'QKSMS' application-label-tl:'QKSMS' application-label-tr:'QKSMS' application-label-uk:'QKSMS' application-label-ur:'QKSMS' application-label-uz:'QKSMS' application-label-vi:'QKSMS' application-label-zh:'QKSMS' application-label-zh-CN:'QKSMS' application-label-zh-HK:'QKSMS' application-label-zh-TW:'QKSMS' application-label-zu:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' provides-component:'app-widget' main other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'af' 'am' 'ar' 'as' 'az' 'be' 'bg' 'bn' 'bs' 'ca' 'cs' 'da' 'de' 'el' 'en-AU' 'en-CA' 'en-GB' 'en-IN' 'en-XC' 'es' 'es-US' 'et' 'eu' 'fa' 'fi' 'fr' 'fr-CA' 'gl' 'gu' 'hi' 'hr' 'hu' 'hy' 'in' 'is' 'it' 'iw' 'ja' 'ka' 'kk' 'km' 'kn' 'ko' 'ky' 'lo' 'lt' 'lv' 'mk' 'ml' 'mn' 'mr' 'ms' 'my' 'nb' 'ne' 'nl' 'no' 'or' 'pa' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'si' 'sk' 'sl' 'sq' 'sr' 'sr-Latn' 'sv' 'sw' 'ta' 'te' 'th' 'tl' 'tr' 'uk' 'ur' 'uz' 'vi' 'zh' 'zh-CN' 'zh-HK' 'zh-TW' 'zu' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.0/aapt-output-com.politedroid_3.txt0000644000175000017500000000257014717152070025412 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.0/aapt-output-com.politedroid_4.txt0000644000175000017500000000257014717152070025413 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.0/aapt-output-com.politedroid_5.txt0000644000175000017500000000165214717152070025414 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.0/aapt-output-com.politedroid_6.txt0000644000175000017500000000174314717152070025416 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.0/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000347614717152070027570 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission-sdk-23: name='android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS' maxSdkVersion='27' uses-permission-sdk-23: name='android.permission.REQUEST_INSTALL_PACKAGES' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label:'Duplicate Permisssions' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='Duplicate Permisssions' icon='res/drawable/ic_launcher.png' banner='res/drawable/banner.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' maxSdkVersion='18' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' maxSdkVersion='18' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.software.leanback' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.0/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000157614717152070027745 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000124714717152070030051 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-label:'Caffeine Tile' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='Caffeine Tile' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.0/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000322614717152070027101 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission-sdk-23: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission-sdk-23: name='android.permission.WRITE_SETTINGS' maxSdkVersion='25' uses-permission: name='android.permission.NFC' application-label:'OBB Main Old Version' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Old Version' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' uses-feature-not-required: name='android.hardware.bluetooth' uses-feature-not-required: name='android.hardware.nfc' uses-feature-not-required: name='android.hardware.telephony' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.hardware.wifi' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.0/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000134614717152070027057 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.0/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000134614717152070027061 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.0/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000134614717152070027063 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.0/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000126414717152070026742 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.0/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000133614717152070026436 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' compileSdkVersion='28' compileSdkVersionCodename='9' sdkVersion:'8' targetSdkVersion:'28' uses-permission: name='android.permission.VIBRATE' application-label:'DroidTR keyboard' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR keyboard' icon='res/drawable/ic_launcher.png' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' provides-component:'ime' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.0/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000306214717152070025466 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-label:'Battery level' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='Battery level' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.288187 fdroidserver-2.4.0/tests/build-tools/28.0.1/0000755000175000017500000000000014770510164017051 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.1/aapt-output-com.moez.QKSMS_182.txt0000644000175000017500000001466414717152070025123 0ustar00hanshanspackage: name='com.moez.QKSMS' versionCode='182' versionName='3.4.3' platformBuildVersionName='3.4.3' compileSdkVersion='28' compileSdkVersionCodename='9' sdkVersion:'21' targetSdkVersion:'28' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.CALL_PHONE' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.READ_SMS' uses-permission: name='android.permission.READ_PHONE_STATE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.RECEIVE_MMS' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.WRITE_SMS' uses-permission: name='com.android.vending.BILLING' uses-permission: name='android.permission.INTERNET' uses-permission: name='com.sec.android.provider.badge.permission.READ' uses-permission: name='com.sec.android.provider.badge.permission.WRITE' uses-permission: name='com.htc.launcher.permission.READ_SETTINGS' uses-permission: name='com.htc.launcher.permission.UPDATE_SHORTCUT' uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE' uses-permission: name='com.sonymobile.home.permission.PROVIDER_INSERT_BADGE' uses-permission: name='com.anddoes.launcher.permission.UPDATE_COUNT' uses-permission: name='com.majeur.launcher.permission.UPDATE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.CHANGE_BADGE' uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS' uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS' uses-permission: name='android.permission.READ_APP_BADGE' uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS' uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_READ' uses-permission: name='me.everything.badger.permission.BADGE_COUNT_WRITE' application-label:'QKSMS' application-label-af:'QKSMS' application-label-am:'QKSMS' application-label-ar:'QKSMS' application-label-as:'QKSMS' application-label-az:'QKSMS' application-label-be:'QKSMS' application-label-bg:'QKSMS' application-label-bn:'QKSMS' application-label-bs:'QKSMS' application-label-ca:'QKSMS' application-label-cs:'QKSMS' application-label-da:'QKSMS' application-label-de:'QKSMS' application-label-el:'QKSMS' application-label-en-AU:'QKSMS' application-label-en-CA:'QKSMS' application-label-en-GB:'QKSMS' application-label-en-IN:'QKSMS' application-label-en-XC:'QKSMS' application-label-es:'QKSMS' application-label-es-US:'QKSMS' application-label-et:'QKSMS' application-label-eu:'QKSMS' application-label-fa:'QKSMS' application-label-fi:'QKSMS' application-label-fr:'QKSMS' application-label-fr-CA:'QKSMS' application-label-gl:'QKSMS' application-label-gu:'QKSMS' application-label-hi:'QKSMS' application-label-hr:'QKSMS' application-label-hu:'QKSMS' application-label-hy:'QKSMS' application-label-in:'QKSMS' application-label-is:'QKSMS' application-label-it:'QKSMS' application-label-iw:'QKSMS' application-label-ja:'QKSMS' application-label-ka:'QKSMS' application-label-kk:'QKSMS' application-label-km:'QKSMS' application-label-kn:'QKSMS' application-label-ko:'QKSMS' application-label-ky:'QKSMS' application-label-lo:'QKSMS' application-label-lt:'QKSMS' application-label-lv:'QKSMS' application-label-mk:'QKSMS' application-label-ml:'QKSMS' application-label-mn:'QKSMS' application-label-mr:'QKSMS' application-label-ms:'QKSMS' application-label-my:'QKSMS' application-label-nb:'QKSMS' application-label-ne:'QKSMS' application-label-nl:'QKSMS' application-label-no:'QKSMS' application-label-or:'QKSMS' application-label-pa:'QKSMS' application-label-pl:'QKSMS' application-label-pt:'QKSMS' application-label-pt-BR:'QKSMS' application-label-pt-PT:'QKSMS' application-label-ro:'QKSMS' application-label-ru:'QKSMS' application-label-si:'QKSMS' application-label-sk:'QKSMS' application-label-sl:'QKSMS' application-label-sq:'QKSMS' application-label-sr:'QKSMS' application-label-sr-Latn:'QKSMS' application-label-sv:'QKSMS' application-label-sw:'QKSMS' application-label-ta:'QKSMS' application-label-te:'QKSMS' application-label-th:'QKSMS' application-label-tl:'QKSMS' application-label-tr:'QKSMS' application-label-uk:'QKSMS' application-label-ur:'QKSMS' application-label-uz:'QKSMS' application-label-vi:'QKSMS' application-label-zh:'QKSMS' application-label-zh-CN:'QKSMS' application-label-zh-HK:'QKSMS' application-label-zh-TW:'QKSMS' application-label-zu:'QKSMS' application-icon-120:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-160:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-240:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-320:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-480:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-640:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-xxxhdpi-v26/ic_launcher.xml' application: label='QKSMS' icon='res/mipmap-xxxhdpi-v26/ic_launcher.xml' launchable-activity: name='com.moez.QKSMS.feature.main.MainActivity' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' provides-component:'app-widget' main other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'af' 'am' 'ar' 'as' 'az' 'be' 'bg' 'bn' 'bs' 'ca' 'cs' 'da' 'de' 'el' 'en-AU' 'en-CA' 'en-GB' 'en-IN' 'en-XC' 'es' 'es-US' 'et' 'eu' 'fa' 'fi' 'fr' 'fr-CA' 'gl' 'gu' 'hi' 'hr' 'hu' 'hy' 'in' 'is' 'it' 'iw' 'ja' 'ka' 'kk' 'km' 'kn' 'ko' 'ky' 'lo' 'lt' 'lv' 'mk' 'ml' 'mn' 'mr' 'ms' 'my' 'nb' 'ne' 'nl' 'no' 'or' 'pa' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'si' 'sk' 'sl' 'sq' 'sr' 'sr-Latn' 'sv' 'sw' 'ta' 'te' 'th' 'tl' 'tr' 'uk' 'ur' 'uz' 'vi' 'zh' 'zh-CN' 'zh-HK' 'zh-TW' 'zu' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'mips' 'x86' 'x86_64' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.1/aapt-output-com.politedroid_3.txt0000644000175000017500000000257014717152070025413 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.1/aapt-output-com.politedroid_4.txt0000644000175000017500000000257014717152070025414 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.1/aapt-output-com.politedroid_5.txt0000644000175000017500000000165214717152070025415 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.1/aapt-output-com.politedroid_6.txt0000644000175000017500000000174314717152070025417 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.1/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000347614717152070027571 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission-sdk-23: name='android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS' maxSdkVersion='27' uses-permission-sdk-23: name='android.permission.REQUEST_INSTALL_PACKAGES' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label:'Duplicate Permisssions' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='Duplicate Permisssions' icon='res/drawable/ic_launcher.png' banner='res/drawable/banner.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' maxSdkVersion='18' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' maxSdkVersion='18' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.software.leanback' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.1/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000157614717152070027746 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000124714717152070030052 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-label:'Caffeine Tile' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='Caffeine Tile' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.1/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000322614717152070027102 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission-sdk-23: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission-sdk-23: name='android.permission.WRITE_SETTINGS' maxSdkVersion='25' uses-permission: name='android.permission.NFC' application-label:'OBB Main Old Version' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Old Version' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' uses-feature-not-required: name='android.hardware.bluetooth' uses-feature-not-required: name='android.hardware.nfc' uses-feature-not-required: name='android.hardware.telephony' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.hardware.wifi' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.1/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000134614717152070027060 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.1/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000134614717152070027062 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.1/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000134614717152070027064 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.1/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000126414717152070026743 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.1/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000133614717152070026437 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' compileSdkVersion='28' compileSdkVersionCodename='9' sdkVersion:'8' targetSdkVersion:'28' uses-permission: name='android.permission.VIBRATE' application-label:'DroidTR keyboard' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR keyboard' icon='res/drawable/ic_launcher.png' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' provides-component:'ime' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.1/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000306214717152070025467 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-label:'Battery level' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='Battery level' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1742901364.288187 fdroidserver-2.4.0/tests/build-tools/28.0.2/0000755000175000017500000000000014770510164017052 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.2/aapt-output-com.politedroid_3.txt0000644000175000017500000000257014717152070025414 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.2/aapt-output-com.politedroid_4.txt0000644000175000017500000000257014717152070025415 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.2/aapt-output-com.politedroid_5.txt0000644000175000017500000000165214717152070025416 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.2/aapt-output-com.politedroid_6.txt0000644000175000017500000000174314717152070025420 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.2/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000347614717152070027572 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission-sdk-23: name='android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS' maxSdkVersion='27' uses-permission-sdk-23: name='android.permission.REQUEST_INSTALL_PACKAGES' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label:'Duplicate Permisssions' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='Duplicate Permisssions' icon='res/drawable/ic_launcher.png' banner='res/drawable/banner.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' maxSdkVersion='18' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' maxSdkVersion='18' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.software.leanback' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.2/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000157614717152070027747 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000124714717152070030053 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-label:'Caffeine Tile' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='Caffeine Tile' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.2/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000322614717152070027103 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission-sdk-23: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission-sdk-23: name='android.permission.WRITE_SETTINGS' maxSdkVersion='25' uses-permission: name='android.permission.NFC' application-label:'OBB Main Old Version' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Old Version' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' uses-feature-not-required: name='android.hardware.bluetooth' uses-feature-not-required: name='android.hardware.nfc' uses-feature-not-required: name='android.hardware.telephony' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.hardware.wifi' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.2/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000134614717152070027061 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.2/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000134614717152070027063 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.2/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000134614717152070027065 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.2/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000126414717152070026744 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.2/aapt-output-org.droidtr.keyboard_34.txt0000644000175000017500000000133614717152070026440 0ustar00hanshanspackage: name='org.droidtr.keyboard' versionCode='34' versionName='5.5' compileSdkVersion='28' compileSdkVersionCodename='9' sdkVersion:'8' targetSdkVersion:'28' uses-permission: name='android.permission.VIBRATE' application-label:'DroidTR keyboard' application-label-tr:'DroidTR Klavye' application-icon-160:'res/drawable/ic_launcher.png' application: label='DroidTR keyboard' icon='res/drawable/ic_launcher.png' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' provides-component:'ime' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'tr' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.2/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000306214717152070025470 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-label:'Battery level' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='Battery level' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2921872 fdroidserver-2.4.0/tests/build-tools/28.0.3/0000755000175000017500000000000014770510164017053 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.3/aapt-output-com.example.test.helloworld_1.txt0000644000175000017500000000121714717152070027655 0ustar00hanshanspackage: name='com.example.test.helloworld' versionCode='1' versionName='1.0' compileSdkVersion='28' compileSdkVersionCodename='9' sdkVersion:'18' targetSdkVersion:'28' application-label:'HelloWorld' application: label='HelloWorld' icon='' launchable-activity: name='com.example.test.helloworld.MainActivity' label='' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' '480' '640' '65534' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.3/aapt-output-com.politedroid_3.txt0000644000175000017500000000257014717152070025415 0ustar00hanshanspackage: name='com.politedroid' versionCode='3' versionName='1.2' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.3/aapt-output-com.politedroid_4.txt0000644000175000017500000000257014717152070025416 0ustar00hanshanspackage: name='com.politedroid' versionCode='4' versionName='1.3' sdkVersion:'3' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.3/aapt-output-com.politedroid_5.txt0000644000175000017500000000165214717152070025417 0ustar00hanshanspackage: name='com.politedroid' versionCode='5' versionName='1.4' sdkVersion:'3' targetSdkVersion:'10' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application-icon-320:'res/drawable-xhdpi/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.3/aapt-output-com.politedroid_6.txt0000644000175000017500000000174314717152070025421 0ustar00hanshanspackage: name='com.politedroid' versionCode='6' versionName='1.5' platformBuildVersionName='5.0.1-1624448' sdkVersion:'14' targetSdkVersion:'21' uses-permission: name='android.permission.READ_CALENDAR' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' application-label:'Polite Droid' application-icon-120:'res/drawable-ldpi-v4/icon.png' application-icon-160:'res/drawable-mdpi-v4/icon.png' application-icon-240:'res/drawable-hdpi-v4/icon.png' application-icon-320:'res/drawable-xhdpi-v4/icon.png' application: label='Polite Droid' icon='res/drawable-mdpi-v4/icon.png' launchable-activity: name='com.politedroid.Preferences' label='Polite Droid' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.3/aapt-output-duplicate.permisssions_9999999.txt0000644000175000017500000000347614717152070027573 0ustar00hanshanspackage: name='duplicate.permisssions' versionCode='9999999' versionName='' platformBuildVersionName='6.0-2704002' sdkVersion:'18' targetSdkVersion:'27' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.INTERNET' uses-permission-sdk-23: name='android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS' maxSdkVersion='27' uses-permission-sdk-23: name='android.permission.REQUEST_INSTALL_PACKAGES' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='18' application-label:'Duplicate Permisssions' application-label-ar:'أذونات مكررة' application-icon-160:'res/drawable/ic_launcher.png' application: label='Duplicate Permisssions' icon='res/drawable/ic_launcher.png' banner='res/drawable/banner.png' application-debuggable launchable-activity: name='info.guardianproject.urzip.MainActivity' label='Duplicate Permisssions' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' maxSdkVersion='18' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' maxSdkVersion='18' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.software.leanback' uses-feature: name='android.hardware.wifi' uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission, and requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'ar' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.3/aapt-output-info.guardianproject.urzip_100.txt0000644000175000017500000000157614717152070027750 0ustar00hanshanspackage: name='info.guardianproject.urzip' versionCode='100' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt0000644000175000017500000000124714717152070030054 0ustar00hanshanspackage: name='info.zwanenburg.caffeinetile' versionCode='4' versionName='1.3' platformBuildVersionName='7.1.1' sdkVersion:'24' targetSdkVersion:'25' uses-permission: name='android.permission.WAKE_LOCK' application-label:'Caffeine Tile' application-icon-160:'res/drawable/ic_coffee_on.xml' application: label='Caffeine Tile' icon='res/drawable/ic_coffee_on.xml' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' other-activities other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.3/aapt-output-no.min.target.sdk_987.txt0000644000175000017500000000231614717152070025750 0ustar00hanshanspackage: name='no.min.target.sdk' versionCode='987' versionName='1.2-fake' platformBuildVersionName='6.0-2704002' application-label:'No minSdkVersion or targetSdkVersion' application-icon-160:'res/drawable/ic_launcher.png' application: label='No minSdkVersion or targetSdkVersion' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='No minSdkVersion or targetSdkVersion' icon='' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_PHONE_STATE' uses-implied-permission: name='android.permission.READ_PHONE_STATE' reason='targetSdkVersion < 4' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'normal' supports-any-density: 'false' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.3/aapt-output-obb.main.oldversion_1444412523.txt0000644000175000017500000000322614717152070027104 0ustar00hanshanspackage: name='obb.main.oldversion' versionCode='1444412523' versionName='0.1' platformBuildVersionName='7.0.0' sdkVersion:'4' targetSdkVersion:'18' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_NETWORK_STATE' maxSdkVersion='22' uses-permission: name='android.permission.ACCESS_WIFI_STATE' uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE' uses-permission: name='android.permission.CHANGE_NETWORK_STATE' uses-permission: name='android.permission.CHANGE_WIFI_STATE' uses-permission: name='android.permission.BLUETOOTH' uses-permission: name='android.permission.BLUETOOTH_ADMIN' maxSdkVersion='18' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission-sdk-23: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission-sdk-23: name='android.permission.WRITE_SETTINGS' maxSdkVersion='25' uses-permission: name='android.permission.NFC' application-label:'OBB Main Old Version' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Old Version' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Old Version' icon='' feature-group: label='' uses-feature-not-required: name='android.hardware.bluetooth' uses-feature-not-required: name='android.hardware.nfc' uses-feature-not-required: name='android.hardware.telephony' uses-feature-not-required: name='android.hardware.touchscreen' uses-feature-not-required: name='android.hardware.wifi' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.3/aapt-output-obb.main.twoversions_1101613.txt0000644000175000017500000000134614717152070027062 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101613' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.3/aapt-output-obb.main.twoversions_1101615.txt0000644000175000017500000000134614717152070027064 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101615' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.3/aapt-output-obb.main.twoversions_1101617.txt0000644000175000017500000000134614717152070027066 0ustar00hanshanspackage: name='obb.main.twoversions' versionCode='1101617' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'OBB Main Two Versions' application-icon-160:'res/drawable/ic_launcher.png' application: label='OBB Main Two Versions' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='OBB Main Two Versions' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.3/aapt-output-obb.mainpatch.current_1619.txt0000644000175000017500000000126414717152070026745 0ustar00hanshanspackage: name='obb.mainpatch.current' versionCode='1619' versionName='0.1' platformBuildVersionName='4.3.1-1425645' sdkVersion:'4' targetSdkVersion:'18' application-label:'urzip' application-icon-160:'res/drawable/ic_launcher.png' application: label='urzip' icon='res/drawable/ic_launcher.png' launchable-activity: name='info.guardianproject.urzip.MainActivity' label='urzip' icon='' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/28.0.3/aapt-output-souch.smsbypass_9.txt0000644000175000017500000000306214717152070025471 0ustar00hanshanspackage: name='souch.smsbypass' versionCode='9' versionName='0.9' install-location:'internalOnly' sdkVersion:'8' targetSdkVersion:'18' uses-permission: name='android.permission.RECEIVE_SMS' uses-permission: name='android.permission.SEND_SMS' uses-permission: name='android.permission.READ_CONTACTS' uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' uses-permission: name='android.permission.VIBRATE' application-label:'Battery level' application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' application-icon-213:'res/drawable-tvdpi-v4/ic_launcher.png' application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png' application: label='Battery level' icon='res/drawable-mdpi-v4/ic_launcher.png' launchable-activity: name='souch.smsbypass.BatteryFacade' label='' icon='' uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' uses-feature: name='android.hardware.telephony' uses-implied-feature: name='android.hardware.telephony' reason='requested a telephony permission' main other-activities other-receivers supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '160' '213' '240' '320' '480' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/build-tools/generate.sh0000755000175000017500000000120514717152070020451 0ustar00hanshans#!/bin/sh set -e set -x testsdir=$(cd $(dirname $0); pwd)/.. for apk in $testsdir/repo/*.apk /tmp/fdroid/repo/presentation-noAnalytics-release-unsigned.apk; do cd $ANDROID_HOME/build-tools for f in [1-9]*.*; do test -e $f/aapt || continue logdir=$testsdir/build-tools/$f test -e $logdir || mkdir $logdir packageName=`28.0.1/aapt dump badging "$apk" | sed -En "s,^package: name='([^']+)'.*,\1,p"` versionCode=`28.0.1/aapt dump badging "$apk" | sed -En "s,.*versionCode='([0-9]*)'.*,\1,p"` $f/aapt dump badging "$apk" > $logdir/aapt-output-${packageName}_${versionCode}.txt done done ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2921872 fdroidserver-2.4.0/tests/builder/0000755000175000017500000000000014770510164015514 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1737368094.0 fdroidserver-2.4.0/tests/builder/Vagrantfile0000644000175000017500000000054714743421036017706 0ustar00hanshans# generated file, do not change. # https://gitlab.com/fdroid/fdroid-bootstrap-buildserver/-/blob/c0762bf9398d0/provision.yml#L552 Vagrant.configure("2") do |config| config.vm.box = "buildserver" config.vm.synced_folder ".", "/vagrant", disabled: true config.vm.provider :libvirt do |libvirt| libvirt.cpus = 24 libvirt.memory = 30720 end end ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039737.0 fdroidserver-2.4.0/tests/check-fdroid-apk0000755000175000017500000004364414717152071017122 0ustar00hanshans#!/bin/bash # # Download and verify that the FDroid.apk is signed by the right PGP # key. The gpg key model is to trust only the key that is included in # this script, so there is a test to check that it is starting with an # empty keyring. # # To be run in a daily cronjob at a random time of day, e.g.: # # 0 0 * * * perl -le 'sleep rand 86400'; ./check-fdroid-apk # # One instance of this is here: # https://verification.f-droid.org/check-fdroid-apk/ set -e curl="curl --user-agent F-Droid" gpg="gpg" if [ "$1" = "-v" ]; then set -x verbose=true else curl="$curl --silent" gpg="$gpg --quiet" verbose=false fi test -e /tmp/.testfiles || mkdir /tmp/.testfiles dldir=`mktemp -d /tmp/.testfiles/run-tests.XXXX` export GNUPGHOME="$dldir" key="${dldir}/key.asc" apk="${dldir}/FDroid.apk" asc="${apk}.asc" log=/var/www/html/check-fdroid-apk/`date +%s`.txt $curl --user-agent F-Droid https://f-droid.org/FDroid.apk > $apk $curl --user-agent F-Droid https://f-droid.org/FDroid.apk.asc > $asc fingerprint=37D2C98789D8311948394E3E41E7044E1DBA2E89 cat > $key <<- EOF -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1 Comment: GPG for Android - https://guardianproject.info/code/gnupg/ mQINBFNaZBcBEADVyvgks2gjG9VrHPvulVH62pzN2LpiD7lqLhAtpXSN/ZNgtkYp HbRJfRcuZzBUVGhuMqIRb8/B4OY19zonHazstZAywD2ojToC0os0hxLDU2H7jVnh HzsAuEkPR4hpzsftia0fzD4IlomQ0zP/C5K9wth2Cw+GFmxhI1aBZcrxVJhuVLpe wSRShUva2iYNUIPvq02xFhTWwoIpRxGHeT/XdLEi+IHu031v3mlM5vU5zbI1UFMb I7AnNByHfuKQ6PiDOyp14QzCw57bgAS8aRB9UK6e1xsVOVYIGNKs9xnErdYKJ295 DAxn/nHD+oaoVHP/NhuMmcNKK52vjG5HeZykHNqn5GAJ4uPFspWxRNCF+PnEnc28 EGGYql5U3jbIwmcZnVkKRahYRmf5ZRMyXroloeDARvCj7nS89Dg7QAd1rI8r2PzY eIbyjrKTOiXUWc6N/07k6k1qfzQuMuBnzAnYxUxs5js2kQSZ8SYdZBmWOjUIWA/E /HmzGFEfH7+SgjhQPjb56JnUunhma1p+JF9ZfnvDQArE0D5rBQkDqa4Z7VJtBFzO ASUMB0EzKlCBN2g7KWljwbMF6XzCTkMPmbPHLiN1XoxwiBozBPtnBxPEoz+E0dIU BaIg79nq5f3hwWsFTWfyJ9fEfiL0hg4kydUnRMT0Ww9Xf8vWWLp06Wq0fQARAQAB tBtGLURyb2lkIDxhZG1pbkBmLWRyb2lkLm9yZz6IRgQQEQIABgUCU1y+cwAKCRCx l/qOkBw134THAJwOo/3U+tzdQbAvP+NL086c06MkAgCghhLAHhimF7A4D9tsei8f KTC51OeJAjgEEwECACIFAlNaZBcCGwEGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheA AAoJEEHnBE4dui6JMKUQAKq7//PyLxhBzLy2tT05T1FJygddhyq94xZg1QgWhbDn VNslk+eNwSxnp1LPf7QswM/1R4UgEzaJ8h3a/iMoAOYoX/leAepNSx9VxlnByPu7 heN6B+c61nYpV6nQ9vYwI3FiEvcHs2vxmPw1YijtlumMHcpr7gXAWgqSveRBArEv uqoPLPizYOJfh84NhV9uEethSWkaoM0XtXVmaDXOFmmkvsgqDxFZf5jU4RQnrxek aGGokhs7BCZ+Dvawnw1Cu5eP+gscbSammAtbprRmALf5EcFhlF4Ifr9vvytJd4pj MRmXm4PfKekyOmj8pPN+2dWXUiEwNpr7dwN19WhlyW1vEXJg1/RD6IO2hrV854oJ J6mVGO2RWA5exipDNPYffxEGTnMREQxoKLV6lo5imNoOvoPOoLm1k90COxX9d8IE puRw4S5KwkIhlqMYR3YYC1jgJl8eJz/3yPdv3FqBYWGObz1n64JWTjqAQkYeAPno mJJ77uv47jXbH5+IaM6NrZCxT6RD0s3FMzuROQyTwB4WZqNjTdL8X3Hc6ljlWRvA IqiI3jtSGmVB2ObaCykZCbh0T2PMZC0Hzw+XidUtuusK5IVKYzJ7j4pnqxM/a8WE dc8dZ3V+tEuaW37/4hi4jJD6t2mthQinLO+knaaap+hR9kG84hxAdH+QRN8t6dLQ iQIcBBABCAAGBQJTx4GFAAoJENqfSjoH9uwMBrYP/1Xy0rMk/az9txAPTnWNRIog JNM0Pz+VCdIbaEr3t3qhQvQ7zU+q62IrMPNjFYQGpPd9wyMvnVEZeZwcMyK3pV2S bUebdSbP3HjvtbhvG9vzf1+/mxUGFmlJiFCBS7yUr32zKQrgnCcfrqpSwby7bx8/ MRfsjvWQybfwK6Eu5mzVtnocfP9JuVrrI5/5Unq/kEuChOq2s+vkLhpfHUs2LxEO kU3w4HIgP+8GyuhypAYPb8ep3QqOim74BeP3vtnFcKjhgVvqMJa1782HeDcaY06C OZ81tP74q/dvvOm1cdy9OS4iodZ259tsc6giUsKomvILL4w2H5BE/IQpQ0oReYxB QY/cRgR5yy22ejVuFbkDnbWJGheQyCYmqH7LVLHqNKpATCL9n7Pc6JDZOkaIc4Oy taj9WNuLC5OZvjwTghPafjJ9OjieWQ9qMjTbl4CpIE1RHuoaP5GXqyOBZ+lNdI1N mW6zY5z5mTOCnfe7LSDimvhBucr4+7V2bTEhjbd1MxVgcpHWADlJilnCtbqKcgnw c9zAkKlLi3aeJMGnFEcmfN4fXKFU6OHqjENK/sEmP+OPuiclTvVLrbdhedNJBXVA nefQoKxLnx6XvFl6SqkZkGPBZhkPQIA0RgHf8Dfd/nptv2fIwO+CSmC9i5spuYiW qCLb6HZ4bWi9P72uM1/AiQEcBBABAgAGBQJUqn2PAAoJEBbqRqHogcqp3f4IAMDu 7DbToHQvtdmDpt8UnaiHf57JEUMinsMUADSuoc6XtzcYXHujdEkXqwEy/3zOciJq 41ESk3mjZH/uQhoJ7gdJIb3qQHmZZEXvdwj5TR/u4kdh3CcXPbsDDb84njZU4UA5 /wQlRoBzKkPPFBAqZuxdqblgkNQIG+yWpFcNKp7XXPXrA4PMFH74EuAoFZGgwgK6 egCPTOSStcDFfZS8wBPMuCl+dSD+nTrukwyyvZdKfO3QtsEQasm7D+uHCR2q+CFg ecCiVpERfuFQRA5nF3WOnhzZksyLVeA95par/BivYAFlQFEF9Kyop+qt6s9nlI/C vfuYawtbUEufr2rBTCWJAhwEEAEIAAYFAlTKEKEACgkQq9c4M6WG0OaexA//clx7 uW4EW8MHjSfIMN064aJeSFSbNg6g+HGGk9xtnxufuTkQzTtpO/qm1YSYyVTKtr0h cqFXA8f+umUm51HnpyDvmEnAaagoHgc4v7as6vMR83bXVN81o4FEP/DIyEBKlexZ a4z4RddPt4WpsXyzSFKjHQDgVuI12A17QVFfRSbz3bzJffu8zVFPn/7szlq97M09 OXuf8AgHhkWjWGrqPMFywGReT5pVqkbuQ/PSQKlGCLeUN/lwBcQZQ8UjyOeNMUq0 n2BA2qCuqAffbJrHE+RkvM4eKv1sB12SPHgzwWj5tT9TsKz4T7zvMu7RYW06mg2k SD0Yu5Hh0VPO7nnlDMcm33MLbFLF+sOGfGEDwPM5YbnHFgc6QBIZtBZSpgt7c1Cj IMHEAcsVNLH01z5tJK2Z6eg8tOaDMXWTVGTAO2IIrOmzIMBUSMzUtOINeiwVW8Hh qOBS+O4pUe0WL7dJ4GiJcugXWIToJBOIuYNkRr4kewetcHKDP8ym8e8DIj7Kx4ud 5VAtYFWkth0WlB3hcrh9M8Dkci3ruJQScwb5w0jPM/S6FwC7HMRB203m0B+eNsVW AnOZVgP/TpDnLjivdcAD6/vrF4P/UyV2vRuk2uw/eyzeqm6+ILXHSKRjjO7qZOiY ktEMjgFqlQjzqFujm8ZBB010HKAGGD/xfZQIch6JAhwEEAEIAAYFAlVPORkACgkQ JxvgDae9vcK9fxAAwa1pwEs8cPpo5MO5yi0gHCpRKJ4fNWQEYgSyxW78yhf2E544 d00E0xDcQI16y0CfvS/yO/71IKQVgdypYLUNaaIFrIgM9ZMrwWV5GJ55+5ffWB3g gSaWM+Ge8WcSsxIHLoTtsPSNo8JHjhlR65Hnpp/riXfl+FQnujz77QZ3/tGeuWtn g4QQjI0+xEYTBy5brRcbTScgw0jmfZfLrxGAiGV1oxydYhN9QYx0CLQU5NfXOFqA WjcfnB9ydMIgVTIF0AL1UDHik/wZBo3KKPJdDHzB+lpW7+bHxNd9wxYoMGzrxjI7 RdNRGkZGDsF27V4lv5d+duc7Drt9RIZjD2Q7LU/01aHIJ5ZktAAzTFkU++kc9BOa GBvE+Kbg4oCigD6ek5FT1Fc8UjuKkP74fIbBnm5Y2UT03rSa/Tj+lp0z6LfAhclE W0vz0p3ucD4NIVDsys9fpxmRRJROot8nn8cnD3lCAafHzqkCkIZ49G7RM7YVq64w HujaP+twBAGCwmlFv+z7z/Gg4xA20BuGk3PkASw1LRjxm9Y6qkp2HBoQORq5Os6D M9G11vcFd28VE6dupkp+SMCKwzMlSsnc7fFW/Im3wfTPJzbUAnAdxYADr0DGPplp m493mRi/rdJJ02CT9NBvHS7P0+kTmBX3IC3uBnPZKnhqHireBGQZvrySglqJAZwE EAEKAAYFAldKCa0ACgkQEIERPFzvsNBvBgv+I3C4rh32FEUvTBQIlLePIO0Z2dr1 ODO7hUf/HJzBbsZCVeRhq3x5nFH7F4301Sgn5NhkRYcjjKzTChqmzw7oX7i/kUpT kufH3SMHvS927Nep5dPB5a/RM6fO0mNmuV/uGzIIa/FcOv4x7gaH5iW5sqY7TBQA f33u1HQiRC0IRPCFOk1S9XV4bI8uApSQ1I5orAG/HKhxNVtCNPBOjGWva856Q8UM K0RMIqo5kzUAriQJRF7ktpJH26OUPAt8TbNo1AzEEMYCX3J6Ic6o1KRQTz2ejLCV HfTXXZF5Cc7wdDRfcP/T79uwAhhGsd001ejICmWkdLyEOpsGFMXYHJexTyvXuOjo psNHy4Bthq5Q2g1Iyi/mKGSlRaJW2KjOVhDcY9tdvyFtxsL5q7k/Fq0myItr6Kom i4O/xZr0vkEzxxvgr2zktPGwtdEgsGK07c7bAGDlXUJEEFq+8ikJdOwO+HDCMXFg /msY/1f12wv69oxlE2uS0pGQoPK+4ZD7K3GYiQIcBBABCgAGBQJWcwGtAAoJEAQ2 PoNkKGsHmcMP/2KkBlV+yzCs0lmkGfFS4v7p4UUa3mXyJ0NTge3m1A20NCE5XJF8 NsHQkJ84bhT7LZYS+GKj7uok9AwzdOU4TtTtF4PuLoc08A7ZPM6r6Z9Jw2ZsHFZ/ nLyXK1R9GaFWHE0SAB4JUqL6jqH1A+UCqtSQp0SHTkSp8+EyGrugphKN0EfoCUET RKX2S7f5gjccYPC7x0dAt4r8Ejk0t+IKOLhFGQC6NiGnxZKDC6wOsM2350de9zmg D7UEQt0Eam6JV7ntCRHWOtlK4yQiNsE++DHKEO0qSKzXF8+shMcBLWHtsRV/bgw6 PZmkg2dhTa0imSynkZIcJWQ62ZuFkoOC4vjelRQTgaFKgYi9rc4OyQV+UCTZ4HPH FCOcUtjv1KzcYWCPUI3eKOQSt7gKRWy8zLbQKw/6st/xBFAK8D3jWVcnLAqXkv32 8sSPAKN7ucW5SpOBmegNSo/Os8g6eQLLECz9Qt/Z03zcdg3J6jlk4qGSdU57pgHP Li0ZMQVcIhlIl+i3G3QT/V5W1nrOm4tzLFn55hjvWVlVxIpvCucfykp6XunZ3nq9 5aoa/9L0qUMd4v2J8mYCxYiG6Ce6brtIHBcOB0Uff0kjeIr4FjvpGG1d1PwggX6k IzWXu8m6dqKHN9lU9z4TVz0PsYP5/jOfZlLezP3CHAI1a1gKqCn095N2iQIcBBAB CgAGBQJWtHkgAAoJEHtW9SVs1DX9bTkP/iPbNKCIrx4veg57YSoHlSjMjRRNHbwL wSv5ag7Qdxq2HYBS0xksB/i0IcgJUipH8EVR272ny0SSKa0iwoO5EklLqqpRZAYU Mmh9vrEewOO6m1eDNSKrID3hdWRioBFhevztml+KF/SuKybDM39H72YdVg4ACbLY UQOy+h2hGAkb4pjn9oh67nCQH0FsA6usE1JI9zAqTJvlVW61CSok8bl9in6gzy2a iXOdmkhQoMYbCCCx9vSQPriVMzdHAkDxlNOqIDmolk8BJpTAwcpL7YeoAKW4Bf+D r35RlQTWQdBj19alofOORhXfw+qpdaynbl5ytFmBntgEU3IE0mBM1Da6RClLiXe6 wxn4khQpEhk5dPuSrcWma7+nkwCbCG+vfLqZ79702KTiZAPTZYArT7IvyfJi3NTL iQNxJ4qTQrucTUS9OCFEyH7P6uXeYvyI0B/7a7j7BKBKNZf5xCteJSESxyiBJRH7 eei/ytuHp+cZWzsZfWxSujeXgxyOF98tQ85UnTkVPcP8VqMKRxqIpg6WBFUSgQC6 gj7FIyoi0suuuDFXMSecHSpGjHNDv/720BEeMhCm9uwKhFo1Ak6FRuEjwVYP36ZZ slnhacMvYdS6M793kgzdicWWMhB1FXbAYTAkAPysn8Hao5FesOO6XrwoBym7Ohb/ ApWB5OraQfqriQIcBBABCgAGBQJW+oANAAoJEF0nuel13sQTyTEP/A+kQ6mswLIF 3xGSaNH3pX+S2kDbSHMf8J8lbvX73yRHGZYZlpm88A9kF86fMfqPy8tyBnfpYDt0 ShkZbLoaMUOAQvge7cMBdC4UKLmkHggt2MnR0kYd+JJHD18N8YTet3VVaKOVId2s hhlpGFFVBN/EyItfkM81R7O4cuxLIRuBuT0mhi/tdrZguWNhEZ/n4ETUmGiwd4+X yBOuZHouLZsTob74Igp/symrVY2CLCwc540VbSyEWxVQrRxA6VgUyicyPNaQMwI1 OftaVOzr74VxHlgtMrj4HSjQnZNrR7eVRhQmIvIVKWnPoxWQgf/MFitsd1avsfsR 6cwueTp5OFzXXKhjKXOZ0e+ZFGJIH+oVBGDk2I6tFGDGtTnrcccG+ed359bHBETX tkeDJ/3gz4m5uRdIUNZXkd6I2lgFr5ZGXPDBlsJuqWRKzdtkycHPM2M+0xuBUTKR XGSyL2FDwbMNwisUZZ7LzHG8iy0VOxcmbwRyTPDKRHVQ2lf3xWQX9hiM+lsQLhVi /eZNupnPx9Drant0+xMzS1ZqsgkmW117eMQ2Lm+/A8F4T0SO85/hRRmXOVIbxNgF 4U5jh0AtVyJ1AAyoHIen7n2wRR9NVVz3Ob+Fb/jSe52KbJmaxV5HhadQ3KfdtEhL RvRGxMUbYuMyE/Z9Ap2ggIhZeSiDQfJkiQIcBBABCgAGBQJXf9K5AAoJEELZgcCG uDsgpDgQALsXQ7X1mpMrOb+2xy84jyp32s387g2OinkzZuuniuuhZjKsA5LWwzJH li/h1Gm+OPBbS6v6pcmJnAniusLDI//DJ/wX9SWNJ9CCCwsnjaWQyj1xXFDdzuWh 9z5socPWgWDkcubX45oNfCf0mdZS/+UsSXh8rdB6CghXvvsSwqDtjhj6caKTwa62 4RDb+IoExazUj1iUkAf+Nea6YlsqO56KDBrsH8/FICT8XSoPwHTxWQ2RN9840nAQ J3FV2Xr7EN1bwMOQzf3Nr3pbKXnCekTS4dgQTFPM9cFYxb3QuuzDHkzafmqfCaK3 IgoQshjh7XYSp1joBLzu6YDNyBQgHImhoKcdq0LK8ichorq9tXhBBTw62eCfWVRo 4M66W7s7jFUc4TvxV9MGq3SWeMy3mrrdb12UO7jJGXgLlTW8I+O+AyKCcNPbdVcB cbBThUToGLdO8vH8nR7wG6+sQPl6eLDHh5w0uvelfg5vww0f1P0S1fvrWfzn+1cH oSGwZSrc736aFDjpusO9Bf7fTs7CyOmwYAVTs9kUQ9BCTP6+JpnR9oPgO/gm+Pp8 UkwZ2KfkxqvxRsxEDRPj8CSn3xogITBrri3g7YQ6t4cDfDEyAlBB/UalD+ljgxNp 5RB36tV59jKCTe0aohRgKMGAxKaublm+Zq+uJ7VLzDObV0waaKVUiQEcBBABCgAG BQJYe8KZAAoJEJAzkqtkuEQDA7EH/ittNLlu5s1+v4sjtDZvCHAseI5lrKEl1VHD Ba+geRyCXLAnJEAeaX1RxbIisM3omqLaQVkeJlQMDY9K/prGdgrkn4g6E4cX1qhC HIub/+xJtn5woYOBNAB4AQ21SkzUrW9ZEnujKvFaGclY7UoKKTQ1naDKFUsHvlzO fYWhi1dZOFS0mVsCVCo2+2qg6H+xfa5bmZqtkCNZbt0sOLWeBE8uLR24Ph9CLVt0 dL8rGb7fPECcWprlmf5GMLY3ok2zn5yjizyywrRMEDQQIb7ptLVtMkt38NJvYB7J 0pUS0SgH+MtWjWL238vwIzkbv+KIU3T9KMn4U/gfv9GRK/o8AW+JARwEEAEKAAYF AlifPWMACgkQHnSXejBY2HDczgf+N60hU21BgAj51/vS7NbN1eOpP7RS42bPSvxw EEgsy7IjEs7iICHJluWw7HM23U/jS4mlLV7qMqtCQDud5/3Jdz65d0QQxHRFmn3P BEu5w7QuZNEdGuu1EiGd8ROFi9IUOaJZlofrJASM9ywuxXzrB2hbmvt6RgjL4QC/ MqnvOFNBfCnw4mGhHn/B0MzIuNfyAD9SdnrrVWG06AE2DLKUkbTPkgwKmfPyTmdr kvDArz5CuWcOP5mc/kAM0BkakVW3Or67NIHzY1FqrCe5ZkDxcH7LqL7FfJyIBacL fASSpat954dGPWaY2YT+/Lp5JWVvg05AiQqnSOuO/V44Uig7QYkBHAQQAQoABgUC WKBTEwAKCRAiHht3HJDjc4V9CACcFsJE8LYXPRO5pg8YYpU7B8mUBYzRBlanEMgx eVdrT7QKB0FHZ2z9symplIITWPqaPnvnpy5U6KCnyiBcY0wXIZxwpOv1dU2zA0/i TqgUeSeZjRXeprcq7GKB0sRpOsoXT7WHbuaw8IOnQhXzZFAY6ivlZOk11wOE52Em xaQu9CD7KXYA8dAdIaZhZHvB1bSBS4yCCmZWs0qJJeMIQtaSmnszDjh/EWcK/81u HWHLhtYLBFM3Dh7jQ9KYCSdrG/M0p0cjmf6u5I0T0ErEH0ZJ0Uu7JXsNCMcdLM0O f3ghRveNEbqYprhDgdO3KuoLtC9RfZIWL8O5Po7qwUryq8N7iQEcBBABCgAGBQJY o0I8AAoJEAxiweouthhKMTQIANLPwq/565sklgMdeyuxWxk2XdHwjRuG14JRxowQ 1KYlwLAn/vKOi3o47w3njs/gxYLHFTfDc0LbKlIjt7nMhUBE6GL/sU5lZml8LXzz 8T5rEUWCysijXs2j8DITqhKVtYxW5Kayiuihcx991Idy2f5pBlUB/2V52/+aKB0M 04hOw7oBP9Z9MIDCYkMtru1Qk5I76SebtUbZFg5GyTj5Jc9U/l3h50JoYwm6r7t3 OceJVseDrptRARddxBF1l4adbRTuy4sx2UyRLtb9GN75Zz14bWBXXGxEi4NUBgix lqE69Q8ZjM6cnGqP+MJJDxEZZ6LUbYLZrNCT8Wwu8fz/r96JAhwEEAEKAAYFAlit m0gACgkQs7BCH0A9GPTNkRAAqiYKOMA6ZPks+h/SObsUg+MVlNB83zD8lRZ5sGK4 Bg9MLmp3FSewzVhcRRcQN2cxJ8REuDjxMg7Qv/6YuTTkWnvXdE+Y3dZxvtLyLyNv gpPIWJJRPTm0Q36NEy8g925oY/pmY5eIWkPQPda3S3E7pL/ULnc4i/VmdRHGna45 t6x4a6mU3n1Zu/i/eNrkbu5unXMdOXcgmvHgSUfcp0qCsuvdenCn9AHPJVUymPJT algyIRaFiQH/U8uiR3FIPqLGzU1RzgFIjSqEB9d8yknK8udzZW4azC2HSdWJWBTd r6yLsw6xAWR1gk90TBYic8v/loig9w9+rI/eQc63yQPLMoYdDqO0Tbm3uirURI/5 CnAZ0+thh1PNhfu5Xi5ZTmQJOXI0DTThoq9SfMzGvz97MpDpd9bSfq9QDx3o33KR qFSWL2jt9eqSxNIM41Y71VbMP5UxjV0J1+9uXrW2n8Q/VmRfTf/j8/oVQGG3n6A4 VJREq547bCbA9dSUS/xtwQjUoys2vxsgOkyNQNGi3LwERRnvNBGg3e2zyqMegqmI BQdc+ylR2IU/Ve2RMyI9CY0TD+haMRiOurrzGWWyXJxMw0tU4/NWtTGsxaAH0ML8 lRlqIa7oGITlJn2GngTWSZkr2axZbdu2V29Rkjde9vsUyIzPCDeZU22mI6/GCqie gu+JAhwEEAEKAAYFAlitplsACgkQZ3hMjjSDhOEn1RAAkaXYRQOIlC0X3CJ6ByJq 19KiypSZzl9bC56iXIpKx4fD+btXtu7/9pd0b/dSn16fkzNXf+kY50eHwkSGMmCl EQ5GGVDtNSdw6dE9uPbuTgBJWiPLyCfinsZQ9AFTpOcaKy8q4Clj7B8tpW77jDzj ojww7Bbqk9Fs4acSgdIm77jBkWiWbpXBO2kX8UL27uHCCwmzgHjXzsIVR4BBCbc0 SQ9Ty5ukcJQCchfjvtyRmSl5MOPFgtfFd+0uIxmFzfv1Z9vkO+MRRBm/CZ0YVPXt DZcFNB7JVcL8WQ8HyLlq/5gfrkmN8RzSEvGplQ4Q2AvXB4CyDvr1quTzzxX3uTao N6xWvQlSDpIOPkh5+MpWmnyY76FzuRiI34DL8z8hNZ6JypG4ls1YUJdWtq5B2Ws7 hazUt2YvHlQIf6HWMx/MEGco2MCfHlyr8sQHmyDlPBKHk2o1u3PJzHWH6SUy9nbk tZ3GSGGhfMcAi6U5MUtqKIW0/W6GutgbpAXKgrEN+PTIC+WhZcZoCW1Bd6ieoj6F M+fy+vqAd8CaIqKrhYbj6GiU62L4N0xmKMLAZYIYrUAC/EsRncJwBy3W+clw2w4N noUj0qblCGTcTeLBLACGIN1ZqRdpyaohotiJl3eRbh2k/kgPdnfDz6/OSdcNiXzR OG1a0KuHNQqKL82QhErMKVWJAhwEEAEKAAYFAljKce4ACgkQBPXYN3EqM85QLRAA vt0+OImADndNXZwps+j3xLa/yE4fTo2LiVXW7viW8gLeqO8UwUEwmELVnqGmseQn bvRU0/YzYRrxXceUvK1iQP/cFsdi7041Z58qMabboJV/1CqrsbBssQnLCwBF9gGD IYAkVJS/zQH0vqGF/EJAsKJ0nFpT4N6AxxuMYWShHMgQP2z4ooMGU4krTtNpp6Tz 8B5Y8l0a61SeoN60KfPrKXwRybCHepPW6nYfl00CSzu39jzz9DzKV52DKDjET8oo 4rxpcvsALRxAEAGaJUFxDcFx5DJv5+nJ7SIm986FM9hW39ik1PzMzzyvedF3+ZSQ l+ptcJN/1uac7r3sHNsm0VvMoo94gKMuIKN7eoM6QZGkTgsXy4Uqk6w5GTG7gGn9 UoQU5PLqIuTnqCYh+WyYI9HxhhyeSjJZLoonYqf/6WHo4lhWW6nlHeyj4dXT/2Vt KJxdSVWRlPrDnDaV9ZIqQ+5uOYXVQB+3ozPg4lVkeBbnjGlCjzb4qLSrzBduv7QO wTUe0jWoktH0xhkuUegvD8KU1NyKNnpMGN2aFYPQ2Ysqwb5ZgrJ+/ixvOw1/m+nF DT1nmJ+G2x6MNVk4aqsAoiDaz05Dr/FgXZhGfaeThDaR9L8ZN/LslMYne7gf9DgJ i4NMNoo2QkVX4ebqX5QAEwUaDCeXG5sewbRguie2/FOJAhwEEAEKAAYFAljfFskA CgkQPKgmyw9M8oikEg//edhVp4Okh0oolhkfoFXS4QvMT9OoYy9q/7V552qOhQOg Q8Rhe7S/+VKSAr3Flju2xjlmDV6YFWn9+Kv18LzpAIo5jcp7QEPmD5qGHxLYd98r h1d7o8sVMe6Wm1tClYqvEfaHZSJTRgTW9XZDfAWQkSNLanxbh9vsArP1bJYqp+m9 XBkHuewCwwMyU3ziqG4wBntBCOeyh/iODWHMKsIxjW5RXAklGTvZI1KyIYwHDkaw Ivm5RoN9aZ2WENGndc3eOdpyK/oaevsSzgzwtZqFsQjtq4mB1TFe66Vj3CsIe34r f09zkNBQiwZezPqm80OaohkF9t2YXo6N7fQV4ssSzFzLWsZp6N3iNASp4/DF74DT 9tLPh4IxcB74oeAqMlybr+8LpIRh/Nt+z7GKNbofnm0SVJXDEzAAdUnXlvlky1Ri 4xNr3MtTSKAOkdS0iIBPlmNipNstVBrFWSh848/i09cuXdm4/UqDEMFpUsH9atkt DGJEwus28keTB2swbY1c5GDNlwmlEJeSk4oKJHLuY6yyESj0i7v8M66AW0lpx4ff lyFDrR9d70IDwMUuKARd7RSlGpoe21SI8ET5/bIEvRag+NWQGFyrA4Fi1A/HvFa9 N9ozD4ceVV0XdmBZqf72Ma4DpPw2rS+kJY/yoRbYwo22Jv+4osfyBTG0gMkAu5mJ AZwEEAEKAAYFAlmHsA4ACgkQZ3uh8LVwoUY+OAv+MO/VcUq0xLtO5qefJ7w5dpWl AF7PNjsiQVJK2ACV60mhrF7UcY8OnvNGspET80Cl4wWyXybpTrvG29sPY2DFtr6j 5uZH7a+ElEtq1L5SYMBpzTo1CmNFT4BFKS1BHBQCmxKz8cX3KNp2gjSTlH9zz6Sj x1o2hlQkgSMX9UmfCx3Bcjat4kpxZiF89obHYNg80VN6zvUTzUwZCzSOU1vBJz2o 0ZHjclfQPr0+OUVrdNqqZ7xAMMdDz3Yyf+7uPR7njLMxtCNkvggPNGkBAmiA1jrv y+WnSR/COV6OY93N9gVECXaq7ZaPDqSCnOPbQ0+UIyi7zUvCQjhM3lEB0xUjFWM1 xz2BEl+SURs/0H+lf0gOID6RiSsvRhBRkfrL9D8dAKSgQ+jFDktyjrbFC6NupCC2 5J4PpZx0LmbbQuD1EDBl/eEQFtLBbot+7YS4+/xIO1inKfxxKjU9ln2IF7aYgukw 7y3DtA5i0Fc6OY4Fp4jZ3QTqFsIsZMeg/La/urDWiQIcBBABCgAGBQJZtcGfAAoJ EGKrbC2pNmtMrvoP/jr9mDhMBzXE9/JPuAM2BFFS/XgUdHmu7jaJPsWyuAgzkkjD hydC7FSKlxWOrrWt8z6IeKoWnhCxoDThi45LgMwBnEnJc7je3PpXCkoGtw5/rkvL ApCDHDELYsTvyZotv/t+iTWzbuweEZrQpWI9nKC7u9UNd4NdBEXQPPhiS9DnyYAR b9K0TKpTC1HPT2hQt4AmpRkB3QaXYvi0FT4Q5ZliWIs7MZe5+l7SQ9FZo1TjXQZi z0BmWt4zsHPbiHsk0p1O+P+4UrN3dco5vRR6mvhsjrC1T+K1UsP3Hf2pKLFMyftc PKPy6NgBUicbUNQa/LKb5E3GsPRunDkpi0/YOzs5I6eolSZWNclTRwezboTfW2FD jHZmTSyQH/RIccyyDRUwbEQJLVfBQLGmdWJOM8qVgzuZI8FqkJh73tUrZch1eGrR 1svoBIoiIc9ZpcqcwmLR8OsXgS585eUoSK/Z8/Z6KN2xkVOVAUbWZeyslk9gd6nj nInGAywwtdeZbiIwqsNKTokA7qQnxmtuPCB4mdusHmucZdAF49+oDpo3FiAeA7FU YLC/SOl4+Vdv6I76ov4Yica1YubhA75fWyAH/R5ut5olKoA7yG8MxIjyotU/Lc65 IHAkOKzxVI4BvTZGq49kO5VJZWfHHe2DW5oSGQwhyJAQvGHUH8DsGmq9VwGmuQGN BFNaZOIBDACgUf89FucUHUG7+L/YgLAIcYveoLia34qYPWcUzPMEH/bItXjLKmb/ f+m6+Ddv9NGl3N68IWFil6YohcyWwuo41XBEAxBn2U8Pe1Q+IVrj9e0dG8n0gWGk VO+xVRsVjSUm7NW7ruIC1kap93KAg19ctoDW/vTuso71IjWERzoUXpf6+Yrlicit LofFNTOACl8DARnEjxfyxve+YkFrGhKTWlyLHG/j0I69hgvdjqUIWMfZhItJz1/0 Ci+04rFujx6s5N6txliEiy31EpVJVkCF5lv6hJOrRQReXyesZOiCvKsXJTo8inU6 2zn5CnYL2ocqTDBOoY7rR9zkJ70OUBgLI+1zfbpAqm5m9uXJUEg8KRd2UlSJ7xFL 3Gouidf6QsUDmj4JPuC8ZhTzve+hGX7n68Kn2k13PHH/SJqC/IyfRSLgg4o273Ho Rlo3YyW8Z4emmXxmS11r3VALshcOMzdXK08y2GxEPivDK9x1MJlcxe858xGQDp1u P/oTS1muPWsAEQEAAYkDxAQYAQIADwUCU1pk4gIbAgUJCWYBgAGpCRBB5wROHbou icDdIAQZAQIABgUCU1pk4gAKCRB6Ap5U3V3OemEVC/9Br6DDPHc51pG3XzugBHOO w4UmZGQsiRnjc/F1pmXuijMiC26LUsv0+b63GH7FaKeiWKwGqzU4w1qcbj2BR86h w+JZM0nmH5lAoMMZ6Gp0twWPKELpVo6jSvtvpCAZZukTL2sYmUbEXFgo5XYu/slI KHGYfRSznXd+/pevUQAkU/ptqu2fJ2piME5gK9anD6a208WazwtZgzRd+89EroTX q+/lwSLmUpVJlGaca0kGEKqCSfHuUvtrmLjsWvpc1k+WspIRyJd8mh+bz4jV0cJI rxhPPTKSM7FaZcM3Z5bfGfkFBnfcGH+l8Br5wsU/eOP4l7RPodNbUWm+A+1l9kyS U8yTkN21WEp/u1FO+4BW7KhVKtYylSR8OsIsHQBTYr0JRFe+iQ6CcYAyLex4/AMA i9wF1Kf0Wb0huyEefogykxfZ8tyFxNrx5rN71OZHmNAbb1QBDUOCXmy+exPTZkUu 8ea5BMx9fv69wy7SSmdvPad15QW8fQJB4KknaCLnF54nSRAAwxf/3qRGPh3O0aW2 OYOmLv5g7eFIT2oZ1Hvcq3/5vCLKBCRkFghx2Bak4NUi91xFMkUDOTkdoYzp77pF q6CEzI43EiVQwtTaDbPZj43jx7U2/NMW3DBY1ciNvjPWItkCbqj8Kv4/zQQlbA73 QmnhHk/i3VNzY8Kx07Vv+8tYjw1lt9g7vkn+roH6kPgF6KxrmhYtk7FJ9ndXpumm nq3vK6m0iWGvnP0SNAXYw0o6scE1g2Sa7eqOU23T4DX2CiX3QZ2dG+tVRG1jtn0C 60BcfqXwSzmtpeu+thUjxNvPrnQYcSk5xRX6xbNNREuBHeQvYK6Mc6ybD7Lxdnrg iFZ5EoRQSmfbld6h9HVbHh5q8BKbifa7TeAA+R1z5dmuGIsPUzEPqrNavgiHPWOL XvdSyoBRj9f32oY60zqBEjvFbauvIFer3AIsIMTY2DWO0L0aq6Vb4KZMDERrkphT nWDUluvavGIsct8jVUsVnZmBVCm4WM3OnxbJZnxkU+FmOoQNzfamSEX/0cp32o4l Z4oi31R3uv/ZmkKS+T/v4gnGJdwklgLMMoMUFYUMbGP677P5jw5dUT2x5J7JT4Lb ea4V2MH3zNDt68YecYp3JXNapmQtw++5ax/yM6qNNDo9udM+UEOXn1Qg+AaDEUTX PYPIpki7GlneBtU5NYsYb2Muo6+5AY0EU1plMQEMALyM42uovSAmEiKnc+tuC8wi wBw9wCvGUCTGvrk+YVlA3YkfcJGUxSP7DkIgufScdw6e3NizhLiQpygM54VVmBK0 XmUmVvXc5OJOwFXHTHt5pX6HdL52fZ1AkGu5BJZdMzPq9zJruNszYTAkTk5fsU0a LHnYQnSwn5nIbOWhvFjYng8cYaQdAbGRE1SdOEBBoRhgaoqA+axpZO51og9le2wb Ij4y+ZbC3o80mX4UezYTu4d6jspzHhjuBPthdEhqQRxSy0VPEjOGIoMVbrIs5RKp hNFinLtKNb2ZJyjm1fViNi1+9lgrHOt5aQgAXiWlpsdijxsxiX4p7V3KHZu4vz1P AAl3Q1OJkvF6InNX8NPxf4hjMkA7gbacCJrtGkkVF5JlxK2eLA/QDlI9L7W0Q4G8 p6yrZ47+6CyKLwinB84kUDRBkL4Zt5gPf0rcPhfZ6IWsOkikFNGJejxvqO6aYC8J K5DVGdmZFwkycT96qnaEe6IoD5Dj/gJj5ZN/N+DbUQARAQABiQIlBBgBAgAPBQJT WmUxAhsMBQkJZgGAAAoJEEHnBE4dui6Js9AP/At2ag6h8PFPM33n1NN4eVMuP+Zh 8EknXzSdtSBwtdjaod1wkgo/D/uN6S5EBC2CZlg7bTxClZatKCY3lkn/osjf/yui rjWlAPZqw4PRVS0/nrkrkZkWL3IvXuW+rhpqP9Ktt+sYjm+eiIXuF0geN34p8SW0 g5+mVxE3Fje8HTtTsWbJpd0oTK4JI6qYmsER+ansZIknW9QhEyvAUGTWpks+Z2D6 XoV6JqEsvAs8M3PaA/e/+22iM0OIa4z+OeV1SYM9vyhCZCNNtBO/d1vsFi9Ig1d4 aAK+5Lc+9XjxzCaw7DJUyfZFYc/hJHpMMW0cfOjgfUdEqoXp5YuLUeZT5laDx38H eNUgVQfa6UJPCWgG5uNNxvdmHw49OYdfVf/GPqBv/wZKke1FRrBD82kfDRvmmGNH +w6vxaGxv/LEK/h7KUKN5adFGTH1qli7bophgwjmDYhDBwQQ3NckYXQIwKIcSPvo Kn1OkQT5DwROLk8r7RPwNxf4b1/rJ/1XAfLk/fLpiN0CraiY2Jq4f033z+9CfPO0 mYjk7nL5JYVkfXjThCF9f52gRVS6kktN67IGaayi8pgKgj4f/K4U3p0uAUgKNj4l +TdCymiiEvhqE6EHxGfmJaUh9IofIaqiURzZGxQ8FN1BuIvJtU4SbEyTGXaB5Ys9 893KN8JX2ozmsF4k =w75J -----END PGP PUBLIC KEY BLOCK----- EOF ! $gpg --list-keys | grep pub $gpg --import $key $gpg --list-key --fingerprint | tr -d '[:space:]' | grep $fingerprint > /dev/null echo ${fingerprint}:6: | $gpg --import-ownertrust > /dev/null 2>&1 sha256=`sha256sum $apk` echo $sha256 >> $log touch ${log}.${sha256} if $gpg --batch --trust-model always --verify $asc $apk >> $log 2>&1; then rm -rf $dldir else echo Failed to verify $apk touch ${log}.failed fi ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/com.fake.IpaApp_1000000000001.ipa0000644000175000017500000000327214766514130020744 0ustar00hanshansPK VPayload/UX _>d_>dPKVPayload/IpaApp.app/PKVTCPayload/IpaApp.app/Info.plistTI@qPqA""ZamN[hLQkě'hԋ&Ĩ4y}Su-Se FcۯC>bcƎ?abr)SM1sT:`ን׬]˯ްqyŊe}׊A'WYOl[8C+CG0D >F_a],9uD=2iKj#Zm9>)삚 UJ}E`ݹW2'\!R q!=$i잃2uY` QFMd#oOֺ[WQ_ !CXTЛWW)v=]^ ˨WЦ2Up+M!hK3!rEr]P2Cqm2V`;]u»; mw@B,車aG9 qSah8@k+[1ލ!]k,=cDYk G4ב ;`*3 jN S}q?C)?`s2܋v4k>h"qXCJ'Q.p%ɐ*` CzeUhYvvUSS3SڟЖ p QjʟC y,DqWYum;ӄGTȩr&H\)nSEڎFL]Bewd^B* $Qb鏎X>fCmnhzq#m%W W,ܿʲg-TՇ=rOߑaˍ=?GDvFӑˑ'בpaD!!.7{3G.ŜC%X|]-GOFG/EDE?G"X,3b'bWbc7c_,͐KE$헐T#itN }JW$hy#_ J~-ɟ/q9>(ćGgW77EZ(D_3׿PK V @APayload/UX_>d_>dPK?V$A6Payload/IpaApp.app/ Xrgk1gk1PK?VTC$ gPayload/IpaApp.app/Info.plist Xrgk1gk1PK././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2921872 fdroidserver-2.4.0/tests/config/0000755000175000017500000000000014770510164015333 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/config/antiFeatures.yml0000644000175000017500000000301314766514130020507 0ustar00hanshansAds: description: This app contains advertising icon: ic_antifeature_ads.xml name: Ads DisabledAlgorithm: description: This app has a weak security signature icon: ic_antifeature_disabledalgorithm.xml name: Signed Using An Unsafe Algorithm KnownVuln: description: This app contains a known security vulnerability icon: ic_antifeature_knownvuln.xml name: Known Vulnerability NSFW: description: This app contains content that should not be publicized or visible everywhere icon: ic_antifeature_nsfw.xml name: NSFW NoSourceSince: description: The source code is no longer available, no updates possible. icon: ic_antifeature_nosourcesince.xml name: Newer Source Not Available NonFreeAdd: description: This app promotes non-free add-ons icon: ic_antifeature_nonfreeadd.xml name: Non-Free Addons NonFreeAssets: description: This app contains non-free assets icon: ic_antifeature_nonfreeassets.xml name: Non-Free Assets NonFreeDep: description: This app depends on other non-free apps icon: ic_antifeature_nonfreedep.xml name: Non-Free Dependencies NonFreeNet: description: This app promotes or depends entirely on a non-changeable or non-free network service icon: ic_antifeature_nonfreenet.xml name: Non-Free Network Services Tracking: description: This app tracks and reports your activity icon: ic_antifeature_tracking.xml name: Tracking UpstreamNonFree: description: The upstream source code is not entirely Free icon: ic_antifeature_upstreamnonfree.xml name: Upstream Non-Free ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/config/categories.yml0000644000175000017500000000032014766514130020200 0ustar00hanshansTime: name: Time Development: name: Development GuardianProject: name: Guardian Project Multimedia: name: Multimedia Phone & SMS: name: Phone & SMS Security: name: Security System: name: System ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2921872 fdroidserver-2.4.0/tests/config/de/0000755000175000017500000000000014770510164015723 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/config/de/antiFeatures.yml0000644000175000017500000000316014766514130021102 0ustar00hanshansAds: description: Diese App enthält Werbung icon: ic_antifeature_ads.xml name: Werbung DisabledAlgorithm: description: Diese App hat eine schwache Sicherheitssignatur icon: ic_antifeature_disabledalgorithm.xml name: Mit einem unsicheren Algorithmus signiert KnownVuln: description: Diese App enthält eine bekannte Sicherheitslücke icon: ic_antifeature_knownvuln.xml name: Bekannte Sicherheitslücke NSFW: description: Diese App enthält Inhalte, die nicht überall veröffentlicht oder sichtbar sein sollten icon: ic_antifeature_nsfw.xml name: NSFW NoSourceSince: icon: ic_antifeature_nosourcesince.xml name: Der Quellcode ist nicht mehr erhältlich, keine Aktualisierungen möglich. NonFreeAdd: description: Diese App bewirbt nicht-quelloffene Erweiterungen icon: ic_antifeature_nonfreeadd.xml name: Nicht-quelloffene Erweiterungen NonFreeAssets: description: Diese App enthält nicht-quelloffene Bestandteile icon: ic_antifeature_nonfreeassets.xml name: Nicht-quelloffene Bestandteile NonFreeDep: description: Diese App ist abhängig von anderen nicht-quelloffenen Apps icon: ic_antifeature_nonfreedep.xml name: Nicht-quelloffene Abhängigkeiten NonFreeNet: description: Diese App bewirbt nicht-quelloffene Netzwerkdienste icon: ic_antifeature_nonfreenet.xml name: Nicht-quelloffene Netzwerkdienste Tracking: description: Diese App verfolgt und versendet Ihre Aktivitäten icon: ic_antifeature_tracking.xml name: Tracking UpstreamNonFree: description: Der Originalcode ist nicht völlig quelloffen icon: ic_antifeature_upstreamnonfree.xml name: Originalcode nicht-quelloffen ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2921872 fdroidserver-2.4.0/tests/config/fa/0000755000175000017500000000000014770510164015721 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/config/fa/antiFeatures.yml0000644000175000017500000000364414766514130021107 0ustar00hanshansAds: description: این کاره دارای تبلیغات است icon: ic_antifeature_ads.xml name: تبلیغات DisabledAlgorithm: description: این کاره، امضای امنیتی ضعیفی دارد icon: ic_antifeature_disabledalgorithm.xml name: امضا شده با الگوریتمی ناامن KnownVuln: description: این کاره، آسیب‌پذیری امنیتی شناخته‌شده‌ای دارد icon: ic_antifeature_knownvuln.xml name: آسیب‌پذیری شناخته NSFW: description: این کاره محتوایی دارد که نباید عمومی شده یا همه‌حا نمایان باشد icon: ic_antifeature_nsfw.xml name: NSFW NoSourceSince: icon: ic_antifeature_nosourcesince.xml name: کد مبدأ دیگر در دسترس نیست. به‌روز رسانی ناممکن است. NonFreeAdd: description: این کاره، افزونه‌های ناآزاد را تبلیغ می‌کند icon: ic_antifeature_nonfreeadd.xml name: افزونه‌های ناآزاد NonFreeAssets: description: این کاره دارای بخش‌های ناآزاد است icon: ic_antifeature_nonfreeassets.xml name: بخش‌های ناآزاد NonFreeDep: description: این کاره به دیگر کاره‌های ناآزاد وابسته است icon: ic_antifeature_nonfreedep.xml name: وابستگی‌های ناآزاد NonFreeNet: description: این کاره، خدمات شبکه‌های ناآزاد را ترویج می‌کند icon: ic_antifeature_nonfreenet.xml name: خدمات شبکه‌ای ناآزاد Tracking: description: این کاره، فعّالیتتان را ردیابی و گزارش می‌کند icon: ic_antifeature_tracking.xml name: ردیابی UpstreamNonFree: description: کد مبدأ بالادستی کاملاً آزاد نیست icon: ic_antifeature_upstreamnonfree.xml name: بالادست ناآزاد ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/config/ic_antifeature_ads.xml0000644000175000017500000000303414766514130021670 0ustar00hanshans ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/config/ic_antifeature_disabledalgorithm.xml0000644000175000017500000000441114766514130024577 0ustar00hanshans ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/config/ic_antifeature_knownvuln.xml0000644000175000017500000000260714766514130023167 0ustar00hanshans ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/config/ic_antifeature_nonfreeadd.xml0000644000175000017500000000346614766514130023237 0ustar00hanshans ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/config/ic_antifeature_nonfreeassets.xml0000644000175000017500000000337014766514130024003 0ustar00hanshans ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/config/ic_antifeature_nonfreedep.xml0000644000175000017500000000256414766514130023255 0ustar00hanshans ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/config/ic_antifeature_nonfreenet.xml0000644000175000017500000000573614766514130023277 0ustar00hanshans ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/config/ic_antifeature_nosourcesince.xml0000644000175000017500000000211614766514130024000 0ustar00hanshans ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/config/ic_antifeature_nsfw.xml0000644000175000017500000000154714766514130022105 0ustar00hanshans ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/config/ic_antifeature_tracking.xml0000644000175000017500000000467514766514130022737 0ustar00hanshans ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/config/ic_antifeature_upstreamnonfree.xml0000644000175000017500000000264214766514130024342 0ustar00hanshans ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2921872 fdroidserver-2.4.0/tests/config/ro/0000755000175000017500000000000014770510164015753 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/config/ro/antiFeatures.yml0000644000175000017500000000323414766514130021134 0ustar00hanshansAds: description: Aplicația conține reclamă icon: ic_antifeature_ads.xml name: Reclame DisabledAlgorithm: description: Aplicația are o semnătură slab securizată icon: ic_antifeature_disabledalgorithm.xml name: Algoritm nesigur semnătură KnownVuln: description: Aplicația conține o vulnerabilitate de securitate cunoscută icon: ic_antifeature_knownvuln.xml name: Vulnerabilitate cunoscută NSFW: description: Această aplicație conține conținut care nu ar trebui să fie făcut public sau vizibil peste tot icon: ic_antifeature_nsfw.xml name: NSFW NoSourceSince: icon: ic_antifeature_nosourcesince.xml name: Codul sursă nu mai este disponibil, nu mai există posibilitatea de a actualiza. NonFreeAdd: description: Aplicația promovează anexe ce nu sunt software liber icon: ic_antifeature_nonfreeadd.xml name: Anexe ne-libere NonFreeAssets: description: Aceasta aplicație conține resurse ce nu sunt la disponibile la liber icon: ic_antifeature_nonfreeassets.xml name: Resurse ne-libere NonFreeDep: description: Aplicația depinde de alte aplicații ce nu sunt software liber icon: ic_antifeature_nonfreedep.xml name: Dependențe ne-libere NonFreeNet: description: Aplicația promovează servicii de rețea ce nu sunt accesibile la liber icon: ic_antifeature_nonfreenet.xml name: Servicii de rețea ne-libere Tracking: description: Aplicația îți înregistrează și raportează activitatea undeva icon: ic_antifeature_tracking.xml name: Urmărire UpstreamNonFree: description: Codul sursa originar nu este în totalitatea lui software liber icon: ic_antifeature_upstreamnonfree.xml name: Surse ne-libere ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1742901364.2921872 fdroidserver-2.4.0/tests/config/zh-rCN/0000755000175000017500000000000014770510164016434 5ustar00hanshans././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742379096.0 fdroidserver-2.4.0/tests/config/zh-rCN/antiFeatures.yml0000644000175000017500000000253714766514130021622 0ustar00hanshansAds: description: 此应用包含广告 icon: ic_antifeature_ads.xml name: 广告 DisabledAlgorithm: description: 此应用的安全签名较弱 icon: ic_antifeature_disabledalgorithm.xml name: 使用不安全算法签名 KnownVuln: description: 此应用包含已知的安全漏洞 icon: ic_antifeature_knownvuln.xml name: 含有已知漏洞 NSFW: description: 此应用包含不应宣扬或随处可见的内容 icon: ic_antifeature_nsfw.xml name: NSFW NoSourceSince: icon: ic_antifeature_nosourcesince.xml name: 源代码不再可用,无法更新。 NonFreeAdd: description: 此应用推广非自由的附加组件 icon: ic_antifeature_nonfreeadd.xml name: 非自由附加组件 NonFreeAssets: description: 此应用包含非自由资源 icon: ic_antifeature_nonfreeassets.xml name: 非自由资产 NonFreeDep: description: 此应用依赖于其它非自由应用 icon: ic_antifeature_nonfreedep.xml name: 非自由依赖项 NonFreeNet: description: 此应用推广非自由的网络服务 icon: ic_antifeature_nonfreenet.xml name: 非自由网络服务 Tracking: description: 此应用会记录并报告你的活动 icon: ic_antifeature_tracking.xml name: 跟踪用户 UpstreamNonFree: description: 上游源代码不是完全自由的 icon: ic_antifeature_upstreamnonfree.xml name: 上游代码非自由 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1742898233.0 fdroidserver-2.4.0/tests/config.yml0000644000175000017500000000213114770502071016051 0ustar00hanshans--- repo_url: https://MyFirstFDroidRepo.org/fdroid/repo repo_name: My First F-Droid Repo Demo repo_description: This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid. archive_older: 3 archive_url: https://f-droid.org/archive archive_name: My First F-Droid Archive Demo archive_description: The repository of older versions of applications from the main demo repository. make_current_version_link: false repo_keyalias: sova keystore: keystore.jks keystorepass: "r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=" keypass: "r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=" keydname: "CN=sova, OU=F-Droid" mirrors: - http://foobarfoobarfoobar.onion/fdroid - https://foo.bar/fdroid install_list: org.adaway uninstall_list: ['com.android.vending', 'com.facebook.orca'] repo_key_sha256: f49af3f11efddf20dffd70f5e3117b9976674167adca280e6b1932a0601b26f6 gpgkey: F9A6B8DF7566FCAB173AAB3516D6C4D3CE71F7FB ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1732039736.0 fdroidserver-2.4.0/tests/corrupt-featureGraphic.png0000644000175000017500000154264414717152070021240 0ustar00hanshansPNG  IHDR&_+PzTXtRaw profile type exifxڭir#9sq8`7"̔ƦmJEܼw^G#Nt >?߿˟g=n|?Q +\/EO .&#cQ4^Rڹ_g?j{)5<П+ W׾!?kw{\TuM%GrWxܞWg\|mFT,py~Yb'6~ƸczӔpcK#G1mx:ZKx;й^SGׅt)pZGaesΫhHϗ{DS_%V >'^W|v_">(ܻ耯!Po1c?ǔh]zR9=޼統iF0JCf\O ͒JvZZeYS͵Z[G͖ZnZo͞zzGʨsrɥ'bWZyUW[}57y]w}=-Z2ߪ5g݆P:SO;3/X[n;յOWw-?w-|uwxKIQX́7u@GsT3?"CQ"] Eͱ|B,7c\9tΩuo5ABԧ :cq2t˄\u0vjʶ͟G.._W9ui%;z󕫅j=wja9%?&9 CB~NzCnX >+~?Ǫ [M-bA@@\Vv2DED no 6j@J.ҡra nE%ačLFO[IzZOXwA(_2<)!bߵH0S^hd;_ b`ή*z~,jDU^$cgq9ζ Xbb (u(t80cQcAF3ucb^^َvz lO -!+I!씸<a={j?p)hL7w{g9y؋͆Ũ O4!1s|$l.s& pݑ4ʗ;x)a+@^,oܮ9Y$q| 1f ߝD7lODh XMV Sa] w L֐6(](a<{~_̆Ӡ¬a#Y ξ(~2Yk:Y)`#lU`kH,l8zqQD4i|52as?vHBmջdܔ _4fqkvl^5_Xl -z6]H=bhKyVZV%6w0f'utep( 0xŢ%6daI:Ծ4gEr!Xþ6d9BBf\&@Kȇ+6t&Mxm۠&Z ۠|yc|2oA“+L /`* hɠ{62 pg!= c"#Zpͼ6XAC2fPSzNPA`ӌ&J6oBhbXx ۅh1Ā6$(vg,^Goޢ"a!$@ ÷!bo?b:g! x!DFnH$"b8ȕG2$4 xX,1r;; ]}>r| TWl-_&MJ%i6c5ѰL[@x:0)Dnx=p0lԠpXb %B!'z[ 0!܌Bx0= IV6[!q2gGٶL 2.:;Cc`6yZZFIN2PI;<ka^0qUPHP;(zT`SpYIva0灙EDŽT4%+WV1WM`˲zN(:52z#lM8,Mh9KwV5观or5s$,eG}"If-Q$#9>tҔ᱂1/bu(FZZ|$2 \!oE,1ģSn CYS`lBo%FO;v;M:@%/:6*m mFv97apd2pj EMkdJAXx: kA6Ne( 2SbSH<2q`NYS2ޛ=C%AC\D^UJe0P<{E0>ȁ/m5ؐ FhLOg__jI ^02:2>%(\u yKG!!4b3" Bw127OtP+Ղel8*7 ț)ĩyvrbׇ@jE:*7'+XV,S~]43Q, HnU`AYqh7b? w:Ol Cb:L @^0-jYRV\s'lXT@ aΑD"*Q qi;:Կc5CMIl6JR CA$铪TN di?9#=1r$ϑ@n&\eMA_|"~#/6 2Ԑ {0)H9 eO4~hA_iy'Z렽doG:WF!315_VQZz묓ŤW?*nF6%ǜgP\?-1>ArL^TwM^m `!'U Qlx1ǰ(_^ /HcaPG^'sEmb[gkC m:#IC6͇}:mq& ,YG(5!?X1q2" 3LQ_g[N>j$2'к*!\FLEs A|n|>O h!rUfd)c Cpya~gּ>xqTX|^Q:kTA&pq>1n =Ç>&3"dFs=vR01Gf⾄)e:5:J!mV)vr2&lyBXZI:9V)2QґaE#,ڹĽ%E-l~l"VG QDE,$4僊q?ov˧pCM=:P9 ҀgϾ߆Lzn`DgӎC)%.v8]}li5JDD4%J:ĮIjxk%/} I*|B0LʄlzFRǑM&m{0Xx~Y5-E 8;Hq[Vմ|Em5Ѻh,JE ~DIn_Vk-z5%&M79ڨ>Ǩ#CyKaSnҳ8 JFI^4p;חpھL&hIQCg#hzwaa:w!K{0=99+~T:rJΛēi4 H]&⚇;pymBg< V'M&M4=&ܭHAԨy*%Vpy]`OGOC-qǞb).6,5z>apn%-nkΉT6.Tqׂ4>0n-1Zy jtw IUyZ;[ e$㯷JiIȏ[Η֮oOW3[yHFPbj^!.~ S1mo^ic@U&L¸ڧ OZME*6aO`5CcQZ1܌UE݉&v"4ۈGqa%P&n;2[M>] I$ܭHU,J6ZQxO+Y5X]u4k~XɦQ}#_tg󣕅 IOF&i+M&i Ua\cU/;E]S?vs1SPV1ҵu$s)1I&MRCfM75VMlBiM0 GA*o i8ݔni#q$ŔM 6핮fXS7AZY6> cxzFU,/ֺfjS'ʝWbmv^;$Q/k/jȁ #ckyXf=I95 IrI$)'8.HeuJ@Q\|;ʀi~ZCdI&M M&if¸i7Кa4WI&W,Lu^ wqL i$oB'lMJs'SdI2}kmWeS {g55LByjWB+jhLu5ZԞl#& thܣ2k+ՙMmgqF!֧2 ھIlCR+%c5n"ou.'OB}03Qc&N~ sb+2t.(g.iUg>F]1y5Ʃ:V>T,aOIzʭLyG+ TCtm!=N9" ;|V+&V `#`#UUE[}fae-##؍@>B唫ly,!Ko=ѣZkcԳ1&fuP35_[xje$1Ȋ:Ÿ́RJI4&?tG!:Ew$r5D#x+JBYw:*h% vhv/n$C_8 HTz&8,$ 0C @b,4 65Vڽg\;MgʄO-EI^}W~/צެđ)Uܦ ְQ{ntYO\rLg !QQKF{۞pw!}3~~BnHi=vlV?g-̗u𖍁oG[3w<'sÎMvl`NPHڑ v-NOu|N=BeԗѷG9 !Z2bg,7W]Cjz|-W iRvlKulω\^MA]%P"+yjS0;5I d{9)&ʇVE̒jo~~'#*Q֧e ܑIW29k944{3ȵ{f%+~+ّȱ#"kfЗn4$Ւdl#i%(IY[}C+bTk|<1jics 2Ameo|{B?ӥP 9ljZ|'ve@N sR@Y[HAu m`<,r_1댘j,YOI!>tf f Um6;"CFw;Ez|`ZJ]l#{S1/>M/Tmշi93Vr ) اj _ο_o۳.FiU >nz-wv@}I+Qrt5Qw=AjhrZQZ{+T$2:h^_#D;Z Y p/'EA 2$I ˪}k%z bž7ZA%foϮX"{2nYs8'g&fhWcjJ%/Hxs@찅i[ X5g.>Kgm!FNƼ{!=/CPl˛d ʢ"O}tݳu?ž\*ˠ,3P",S$knPgm&/c!W"avX ` [N%\|Ew C '!wB [<>oI~Y>B䁳yĉPH. LiA qإ2j,&nkVv5A,/_>prc, Ku2PSa.^R)dPZkr 2&{ F٬zpxDT JiJĩ#i]mrPuZeQ{s5jHV$0)&kÔ,r}-O +r'y\=+$} XgnwZNN,Bϟp/KziV1Y zR%EFNA_v0*ryؾ.&)ų%;/ec=*6_ܽ TEjBI۪!ՉltN)@WQs, EUGvJE-Z{jظ4UQ1tƪSm5p뇶9 R}-Oz,B8pW *o1-CLKUejTȃ@p,L5૜%v 5u@zs/HʞFX69U]U 2U:"MǒZ9̼Vq6>ҶsJm2|z9\^NhRnLmWxŃCljN7g|8En‡_B#x]u~$gy(5I4P@@pr TgA `/DHoͧݞzʶjh1K7]@c7E<*33\\ QH u2PuGv2GkhAem !@9T:D,ŃBWP1ciTt2^徱u1}9K%o_K僗M0D Y0/R/G?d\(%% 2SπDU|6HA!E-e k5f U܂}QE >|!8^:" Ye`MG^6S_UHuz 7iCCPsRGB IEC61966-2.1HwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~;xbKGDC pHYs.#.#x?vtIME ,= IDATxڔY$I$p'•p<*0DbW1TȐ|"3>9bbFDF"""| \"ϯ~ DFgy]F9g|ΟO1F FD Ϝ;`@x>g> 1>_?'֛BϵԾzw/2g+;{wF<}̌9 z) cƌ#_~ES?w9>赟tgsGgkgF1F1wﱖs}w-?~8^kran;?{s]<_̳ݷNi>Yss=Ik(3hY}Y!c=o]X`]/XM8ɹ{-Ɏol}&{MFDo &z|g[]u%]ﱿ~象siW{|~lo>ޟ2KqUk3|Ǡtfk=~G׌ayS&ҽqy}ߟsw=[8k3"5泟θ5uf}j]A떌\3GU?D qYw5Wo}&.[3?gSĽA5IA brEkD !3?g#ue;>Z yjĔڪ.!/RsF#\~ P]GRP|+X=+Hg3םrٽG6mv+& g?FLy*sng6vTO5YsF<k~scWk]['0=0ĔZ,{}\>oCɌӍH뼫m{ x>q;g0}\jD`U~?>/s0bJї|O@e"_fjĔB^0M]ܴ ܅m.?cύ8=w4&%Va8~<HyZλS~v bWG{dʡ^7;虔g/Udk)O|HCl}o͓4n@Z3{3sb*9͉4nMiFP{4v֡TzB8#G|ͱE{n3~-:kjn!= q6㮖6>(}~k x4fE"mH`B * =ؾT{[f"dҽ'x;uߧ5^(^W<^,"3x5൸qV {sYѱ(3n#"lDž#KF{3seHSt_[xBLbqפ@^u"8S_dj,HYwVRjq_1z{{6L[HA`~a?{ru}.Lސ~{ͺkc5,v}Ww}Sк5djĊ(~!;4JZC0fp+eF.A@mW=ȵ3)ޤԯwé\:gv]Ry6<E}R`T9?~0qPKc5Og2yݧ`?v6g2 (B!{b<ړ9em` w ܈g&L§I #P2 P`g;ȎtɣMXe^gl*EmNv'p,ۛRRcBj9OH#F9ÝE *LYC gjV0^wByQŽ6=ߦ5lyavg63@y]{A|F* &8^Lb0<˰ ~~ؤ> >߽2qa]>@W^;Ƈ' cV1SnÇy3dz^&F H{߀5?oӏ rPqh_ꠔSx5@.:`0409aͧP&)C9'4A2:f@E 4 *DweQj9f;%5yc^˘[Lm#@Fwid;uF2 Ij:ʸL}Nea¦wV@[孋ٯ>HҦ|伎,V2YZZ} 4;x^ !Pe3.*'1:~c+  |@g(c0 yYy74@)Y6|*ca^%x_w2ާ5?,uKc :e DJ70f65հܹ#WG/'Tpy!y1pYCoY`aTSbY!NA!H|ȴoa9OP+uRbD8Hi((84/pcJBjבZ%*'B,j }dщz"S&]; 3jN ? eQUqd$#FT&> Ia9ϋ(ŏOFo?#~r?į_3~cQLYQ pP,0U3ߵHqm\ 5ڏ#=^nt \"u~;.y2mI6_Q戹\Z):{yl?@`y7U8!g chy(ާ8{7ӢW*h_$P;SIpoAy'=H PAQ a(jH0Pw]Eb7wr>TMawp1,@-R9U!2-Ou4zp\t'\@,ӂA[D^ \HU` 2[w¬B?>q ;} vk>c5s{Sk a7b `]ߧٚ 64YH@* JX[A?V+\!x9L4 v]` HK޸Un:) _vOK̉Xru/ՍI*{y"^]'AsD|ػ2#"qXBY)n9 PtXc;P}wc43are5xt_GJ Ohde>:X<Ѵn>|pn|A~ m4T.ܳǯ?) ^p;Y 1 &gqmB7m>E?ޔX卂Srzs4̜etVzRP''-np] 敧 Ϧd@ra e)#S_*BRFFN332~Wįߓ)i2QdVV toQ0}~_1iJsi*<|0smГ5ЌY,ϊ<y?7'oISi 1exϾ'+aTezM֋xiN7Opg7q4dw!A FStHh.M*Ta}J6era F 8pĀd-LwY#IO*;^Ee0M q|>Dx]L'ҙ2>h(9'Out(yt&O76@7EJ`|z D{ݳ,bSBG>S{j]YwA2XQ l_>'ʐ6HږaXwCLj)y(2ۦ-91(LYqaB&ʂf*#5v6bJ'\0^gy^KޕK4`O&op8U>cLJ!_d[@0oa׽{$PpfZM%A pCXC\u'aN"Ӄ2ӶլHe@qo||HL6PueϠio~>+alH׉CӼ.D?’>L#hO1"rlTf$^-+9a?t˛w1&32t C[eBl33On\kip兎a B Ps>5|(ϩņsA.p ʪZPL4)Ii/WGψFk?f+{ėT1&M%0uMXA6G9pY22 M2#cB NS0YU^.K>N423J*ETz-ʧb4lL3]6N汪$a B,f{žUÚRmXzsPgLf}Ǒs= *- =C> f/ix_Aʀ 1˼ ɞ‡>Ve%z򺐕ʬij5RϹze%MA,sց+mbd:"iBGNS&ᬯҨhuhD 'NXF]:Ȳ  ^#6 {vfJ)zD3Qh942Dʬ*fpWX ξ ,z `>5#sZ4^4T{D =w(؋*m '2L~1lЛK :1цz\u(L>C=G,EsJ=t3jfu %H2{ _GhÔÄv0ܹ?-|nއؗTxPEU`)t6&5 k{NPQ&M9YL̒4ti(r&N ʠhv[10;0~ tt&t`m>\Fxj*n(1jg$u!š WGx"ixGFo] d3ILP0ⅆ↜Q$ iQ'}iQX8¼IicŅ`ӑ^H{.J3JCLС Mr16>f jt&]ǃy@_=4a9U< lԔ1MyK4Q&)R 7m!h@< !KCW!Y?ΖC=49T=D`j@:[eR9AzSafx7COSBs P7)5#Ŧ ){]zB5>GOL1D&)MzqU `s?f55tjNI@ffI;`ʁ49Z{"I;]%ӽ'1#b¸!VTSh-Ks~45-׳6djNa=7^) Ǧ԰%9gV\Dk#L~02D=[΀nK̰Cnaif|F?,2=k|HjWwkgF'@TxH`JF1;sgԽ8z H=Le҈ԐҞO=0򏢞 J/ ilS4 D h|b05Z@'QԘDiQBC'/W,_TEiT7l+E1Q:ql|a,Qd|C ,g/vȄa:9љpy s]8#??#_~wįòQs ;R @u7$d uk6F$tft9%Y ԢN^;I; 2۵Q]cQZfy'YX7 (1nyP\ e= JSSZP>F_9>3j$wF4 C BёchzS%Q!&(U:k"qy1x6@\C:MaEW}s݋9)LJM%4rR>|p7n[ R  'v3uGox-3/lL}EAb 1YFĖ9aO=6D[u4g~k`V#1&q9yz^MFmhe@5{ȧF X)KWi65$Z{F_6#"L-f(#@u/Z+IҒ:ʐ# 9kTvnY»(]pL/ȃ$;ub[h @TCI"zF#INC覝L$ɕsLX:}9ДfT4Mu^$i_.W{E/:i&qs3TX|gȴ$ox"3)4Q΋u'#" qWtq-cXJ_a{4)m]dS R])plA3-J~2ϯ#Ks>I)eZ|nZs5ĬHrdܩ,4˪1ۈ~)Ig1~h g׷}Źq E˨zBGejDm` !O0?D T /W@~4oV'FQpj90@n 4f:d H}3x" 7R3E{>GO$-(ʟeFMvՒ IDATk:L>ytp9cS4Eƙ]PȷI`=Zr3%o3Ӓ$P"Qē̞XNPM9aƕy ]*(1RU3OlmI+6(%|*uWt5Daϑy6ņxTf?GeKP$zj˻g0 1kN<#=>$ w3{똞WA|2g8QI~[ hT/SgwfvDzBHxGzzsTeCωmr6Ytf&YhWSXx@=n};ޖ1O3(O[q84%9?5H M5>HSn2|;sIyEo4q2=f sI"b?ixAS[0Y:)hFÔZzE奈7ȲxR5vf<6>#<}uć&_y1+?^ɑL'RL$|Z4hZCfpS͖r" SUis1j"o#Cp3I W!dwk$Of">~#~7zsu3@/ Se))k.1՘u*~H<%7r^aU7Z {Uj$h[oXaLӸ tħ>l,%-eQvκރv$E:ȓbb5%ݑ|>\#Slm?N!:PȦ T9zL:=T:)ipTFBFz[hS6Zs}H47Hc@:E%V0*CJ 5 j f"~9VrV$ԑ홣ώqD1! Ev?B1ɚ{y)l~OČ".5'i# Q芣4ımS"35M'1Z@5tІ4t3hLCȍQJDQ믊IS<|=ǒI2|o^f]t4#G|Yl̀Цjl)=JJH1IPs7~+RМaȨiµs@'%P9]Z%]Կ¢1mr*߯24;lXaKR(lʱ2}pg16$ն&+P˃9O3{K {pLϥ  a:w?@"#*^"_> WChCj+C*QSr ̻Pv#B"lrP-\wIn#91b!q1h&a#$gC0{ġ>4>#Dֶ/Ks^X#xr QJ"m]š);^栣HRz'M:L Wi_KV,:.lii]YetMCOTq s~Cl c%xZ<,di- t$YyNAz2󙵯 pS0P}Qgim+ Y0ѧVp?2y n=UZ@+mFEw gE_j&4B0*{4e*l\X6'5m|Vl4׍O]|@M#M|bEgFbq2e{4>"0l3x*C#3%ͮҨ7,UȞGB/:B֓^u2.=ƉcygA`7̍FTV)P"Nlf30,%MUa3d3רHa>'Qt ~ɇy yFU4'?IR"w[R%Khe+ 6rH J6Mi@HF6h 'b Iw0Tgi@}x!NsE۔K,fj4"vS EsM)$9Lx I$_-m_e7G2lPV"{`dcNھjg)EV^9ItnjoԒUO KE)LGɌ_Zf$3:DkR9O&Z@yc,0[~0V*zMt1MLR"։(t2:E^)!UJYM`SP# !8'1\zjڴ9+pF?EʻYI u{[ 0!H mk;tKY; BYEPJB/xR+ŜimNCU883Ƚ _31T.;U&L4C,jQ'"%dVͥ) l [szP|0L\hɈrkZTVL/hLo \-bLU t{#*'qY)LKx6/0qԞJ -kFCN~@ӟ=ӘfzV~0S VlAs ^5T#O7Gs0~7IS%aa{%q8?cF*DQSt̥D{2A1tp ZZL|1wO2R)Q@6iW4D&i?Cc넩HiL'lMJwş*"$-DV jfg湒uQćA"'N|2OBӧ4]@AZ=ʵtq7n 6Y7ځ9gOZ,:2G>Zy1H=,;v ;ŇDuegώbF oca,=ݙ2"CWfEZ`Xb d5ND3m=,~0s\AN#+'Gb.$=,:[SYw5M6ʰ1䥴PQx[ A3O#h-R U0MwM̑lP Y5\!C+ll+Y_x\bL|;UZD"!H _WCA m"Zß5pGt&wك+Q&!?P׃F9Mn2x35_1>|O*XxC&ʔ:圢j=ZPlf7K>s s7q$)U56'E`jШLA4{/=bќU2#ڰaK]smU:Б +Yv3[D٫l~ner)ϢsȴzzrܧÞls +'ƂB76Q)F^A5!oAٸWN7)T[eP#~.g93/ko5iRI4g,&Gi;O|Ɏ#A'U(Nڥ5.9*c##K47L=ZEϰHćRZgؿ7'@š_X3B%Z:zXk/ ԺO<2Lہ[tnBŮ^C':7r+_|XbHd45V9N6SatܙW~lFhӈxP6NJuJ zӨ"y3IÚ7kFr  vQy&X0z(=|˛yя$xq^]=sfzӌ 3nZ> ^K46m 2 HcKݎ:8SZJ|6h~y? >N5/2;hSjEqNx2XFZ <0u܍Y!* ѾaVgAZlڜ^tVro4ީcx?"WƀL=s1|#XP4{lٔ)=g{`T5ǜ69ZGC﯆&"OS$~ -y&MS/\{;3  ٭ }#Yk)O# |D7u@Z\ i$ɺ21 #Wh70waW #p !)n ۏ=Q@)`(+OևeÄ\D1lq&-4!> =* ,Ce2 C%UR E]G7Gc+bʯTPFa $4MC %6%3$[ZFeaϚ-Y63ڼK6- %Ip_8Áۦ 4EsahKV1|~g uML|Rn`Yo>^pZ ?n>aLm&yW۟N`|϶%ؚ:ˊwsi.I&wIxj2 oH=Yf(?D7ja!Xnlc͛Nb:ʾ=.;t_*h Qԩ0h20?x_Ui |&ǓA\:w $ye5'SCsFdu0:ʎe`M&WYY ;fQ5ۭH) SX ug]1o`#hBr a7/׽1$x9E־q"f.-xٯu9Fk]E45B{{3y~?t5JsWF e_FvR SO39gS-2Ly]a.4<:G}Z/j 69'I>>{@͂1#ezn?S Cf<C"Sg@%o8 =)&h2zlLH, ̰X}e݈;ݫqv,R9<;&GpƐuga ,.F$0`%*CQt*ϑ\#ʚP[\jJ ŸHrϘ>b N:RYbA&kҙrpsmM IDAT_vM[ґV3VFLf#>'R2冃5vSn]gR.bMT3 6A4=RA{NCнTDN:$C5YޝpΘ+VdDf;WCs I4Fqr6Ȅfw:3K61{cMp5sS#dxob4zКY7O"S9~Xtn.:!sҙImo$c{]C'N>Ph[hR^\>a'򿥂эi6#k>J$*[QF\fjA9"T vB?ZꍆD#Þ=Q@K%yRx=1 B|ɵu=iIVCYA$7/Ԩ`rjM_1YtZp1l3H~ݼ1w2&>` Hn$KнO`J>c ))j#E)=ːD*HR;T"VYfApiMQ##r_v85%}I:+tNͩ7)) 9E%kU)ب]0>>tZ>cH6hf }/QD}l8 [㠕)?@5PZoɔS|f/RΈ{4%H|x {4qa\˃6KmxF@S8:EI&nCD!q M>:Z7UgU2w)}SMw`k%Eۿ?c3EShhІFJ; A,_f4ỌtWS[L~Kt!{4m 㺺iT\@!;ihx$kj ީ'צn9-nKEEqYѫMIor5TMwIhr:\qȤW#\w7>՟9Dc*)s5G@Y!nl jeE=R\Mw;`Ygŵ }&=[ zS\n`;{GVJS1# $n5B2-0n+mi Kԭԏ)@ };?.$h31+6V[r{F׽Y\+._> 9utKޭx1$\5t1ENa5b[rJL {ju}|S|N|*Bit(jvBaRjsG `q:|)z*S1VA.@1@YVBlw~~mSz@ <;Ո큫JΪ՛yp"ZD-BC`duydG͚WtiS H E n;YAd`"n,auS'\?9~NlTCAܼRXs(###~~F5DМ~ϥS),lr_sNPa&LW$8(BvANl.ufK5xbT>gz I4׉( -?N}Z %4{v,4lRpzC2fv';[]YnY% DDcq'a_^sk5h-fڛ "iyم9\̸R*fL'$tCBK|jϤ`tuP*Rw 7*``i"0VܨNL^ "O^"YnnSA6 y>c˧:OEWUPNBbsMMpϚ=-״qM75f\Hz cdNJ>L'7,xU Z3 C49 iu2Z d2Ŀ~g,0sR]>Ys;fVj'4OjLKZ ۫Oo@R[N4 NPis7y \݆k| Sc̒9Ԭk|__1# +F&%euF@aYE{+$.Wl5i n[^ׇ֭)kc*FMnn;4D a瑛@lb <{4A_k;Hs\.pՄ03D>M@o3nIQ6c ]هv[Jfƈ˜P*He DwqFɭ H4֏ezc`?䥒.#)aekꥂVb%u"o{51#g a<<& he~)=7 _l,ƻ ENdg3Ֆu,zm%88*s9YALFdias؃v:,c$i1BƼCKRFhT0yҵ,cmr*feItW›PcsdaTQ$3q+$625f6tB=L] `n'K ZIF1 |ś>c()*眧pn )%3-4'pPa͆4fhdMpfW6x'FR\?A&C'o0++SV2MN/q5:le (oPMbT Qo/M2 bZrp 1qxAgo|;~_㉈7 QC4,l9q.R6bmdjNT/U}欇07iT$}I{)G)M@Ǟ`_<&ȳiF.' MJ72|"ӀU>w~s4Ir z, d5.ݺg6F= 4Q- e tlju$loV؜AtdK lX' 7u U  LZbZNg?7UF哞_:TFyƚ!+}Wj4ejFg , (FdĪ=#ӂK ۿgaThq=p< R:Hwo|лܢEPk>CX rw|;ߕ3e7OY YNṆNmmӻSڹb/G0KvdSbso^JtMItʠ=gۛb)B69jf4"vw; ޱV@ogx|tmnF_9Оm.c,Дe̸:EڞמB)Df )QIm39Eq7f=49MJ1H3./ަGϑ1[S1DĞԐuVj.Ֆ| {PBy7!%odtP#I){.?]w!J~ri@9Ih ڒ\$YR"foqo;,cj0*w3/S=1S_/Yl]4pd]oƒqjG,hV(Pz bK' bޠE7,h2Ժ/I]]Cs{Y -$0v TYΚW֌W]Xc_> ?2%k\* ]55c}Po)[|wG8;2.rƥ ns{^5Y*q ?(zBw%lC@1ªZt9-M9%EHېt3dԨ6j"iF4VQ9h+79;ƈcSTx.d`nZ3*Y`H'OR6k yn ٭SɈNWW.VyL;ZQ7D.0p ?3=gn3)F''}nqq>+ToΤ>,YGSM7;l%giͩ ?&be?>P1aX< x KdtPnfmhdX>5 K&)^ Sh&0jv@ͨp&w1Dk+:HICO5Nt#< Tf#eR 4{N ̆GKroeAEPuy3%PiORwFo<P߰{D GLt'p\#B6.$㿙[y|kHb8 #gxto}߆58_1CϦj~0/C fѸ YlrHurY5}~ϯ'Yw:w$<#yǔ6CB'0sc¤y׹>@60 RKf0"J2>/T7h.Kx= 4i>muwҼr C  V?t&bݐamPg]g>_1't4˚JyyB_A- AX?Fmwr\Ѡ4 ȱ\T7>L=bK(j'ei,䒯9"b%*k-q5>c5#>Ikh 0uiZl`ú Ng){5a6hj %v:=@S^-̅IbcߓS&-i3  n>r2-7<i!n"";xe J/z!2a|*DFs*=T 8bw9H%V?4jas?t%Nsnݨw{U>CM#bI5)-Kё%)N| 2IT68ɛ6 nvB LUy 7CM R.;;ԌR0Ѓ aF; @p~egyu!__A1;}2f5/20}dC_xL,AoߝӔz-bq&T4ԡ÷ X*ޑt ?/uq' pΌ0ad|aD0cwk<@iI:2E:ZI LȞRQPJ5-ء!"?N[jhQtÄ3l2G8?@NfZDq+nV'eCMF_q)B5c22CaX-v5=q]D(uD%7~i8/\"(]T,51~{)tVG`22~bD~Oݗ&q4c$0-A /4x. #Bt=:EFM)]WR'noA~3(|)uhnu9w2s;.Fh ޷n$z5U2}g)e}# A 3=LgC?"D֠je~r)=7SfPĵe>m4T֤J;mu^)TH, [Nh=H*'[4n8oߛL@,۬@s+@G^1s@.hajĀ,1b>fTj~sΚeX}3uOs MKTc|)JF`)FMɻ̚tjqeE|ϡ (Bl&iR}[Ж#/vT3LMrcw/qҬ7\aI5ٛAui0r R 6 |L~27gn89LC##6GYlBl{5udžun8 4{-*8YKqzΌo"yl1,x ޳!SIp3Ⱦ7)Pij)3Itmt`)W3*f8bHIT{q̴;{*I9/ 2(S&goLblWnYH_<14 2LA+RLMVgWU~uAc.KmgƇL)>:i-I M9'Fzl`'d9bȍvHQd @bjG8OdNl,4;)%$ʠKVآjg_w. [ВI|ɷ=%lӔqMκˏbey*;l2v nN) 5nzE:PʚK3D(! IDAT8M9Jc5Kk ZH3x3RRIb^SjӜb,mfH)IW fAc'}g0O+!/E,}|_yxiS`G[h-1` 0')JoFu024 604%KD5z{fvÎX$jSI4 -1"1mß=ܘsP 8uF@(dP7D+pp`(Kʃy j.K\4FzЅ` r32pP[ I?1c8mi&b!v?--:: m&, @TSMe֠)IT DF5cOV{cg d|wH%#2Թ49 &XK%gcFt~K=Fr L=J @ >q3QV( ~u@,traɥ?3I*"&*B݈ hлn J2[jw>y1TlL0s[އrJe'O;!}Wǝd1nqXmgSl&Bĝ(#_ 2iryLL3/.SόQCF՞N3)Ssdxt= l}2N#zgmidDa kkJ6FsîIsl)i .REę $ ߉l'HSNPMYu(AH^5?@$M\!Pv"431)b FsANPzGC<7L%RKx[,"F/ߴF!f ۓ &n.{VLKI:K`t4+➫;j* kB/hl)` >u>ŅǓ)t6OXO7uPgqbwUtMcT="ϳKvotg)Z֞>$ kL)@&cMy7̽'ԯFSKj}ʱ)]lcp=e'3_3לDxbRPsgn/l4,] RjxE7EAy){n\<ħ3,s\c> jM^(44XPpdQ?{oUc͖rjf/i )34F1S$xiٿ<&W#?=\V~'Q,#0\Ϻ AXQzcb1#9wJE bjКES\Rw'J]_Kބ@ CeAI&l.'={4Tĕndvok yOz>xk3M fZMvV.sg1u.̎iڤn&Ǭ4&:?Tcj䕹=)I=2ShG##gͦnjԣ&[8D4D7v|${/}%vBy%'3@i>rpNPXf:FL3U?A˾0 "?ٙL VėS|%M͋LIKP4;ጇ9DM,:>S`}I`.AƖ491 3n:li.T cuച&gPp:fofQ瞧OZ*gt qH&9.MVX14>\!uF;5|{2E:V[Y&37jxa&j"PgP1:58*emS&8.p&4a:VècaSř霕c-\Y n529x.q`@4 q  >2ń7cD|wr>)kSyjYnn^IfiA#YCN^DB^x~#}nYDuOP"h UJ-2n9uaA)rRi(?;g9 sM +Vq'L[̥x[/7cgrJ$U^*w"b|~$7%3< fBOF-=UMKA%C&<|E~~~i!>4n~Aîavt8!➞oOڔ 3mX΢)w͊DS߁} O*b Ivk&kԨh OD"&Ҵ}VM`5YȒ2T qx%Axa`=K[g\q՟PY9iCpMLChMQ NJ`ncF{fPcO 9to\c ބݯb66I5zH_[OƪܞS` {Mg3{Rg܄7tk&:Mϱ$9 Ԇe01ْ丒HGG+юp ~03 93]Y7#I>O.(^s(XWI()^9(EI*k_2\}oOqe쀃BRU@M?8 .]pƥD,mVմ~{6C?O)Ԭ`odI_ lDs>.8`v`njJ b4 B/RʵoDPzSsPHa)ڝٖ垡P߼F=qXо.eYve؍ Oy\<J̔dSQuٮpȹdD 3 8w'/R@9b4 #OUYi7>t,%ZJt朿};f!cN_tie@ghHKyzB4/QCfɫly l^l|bT0G1FX# ӜbbP>7,GWFFwǻ<KX>~sRY] Z+;"$B X8E@3&:O-%0*=b͇eJϳy%RVoHfWo6Q\w|Eao";ce;/q;s8/8ًj/4JR&uw[Osl[xa"m@y8`d/ MBl!w^c*r-c\mi G@ncA*/9|xy d6T ^ԚjfN(ipKh8d@[<̤|ܗn˹, sl_ .7Wzr/C7|5 ^mFP'C_R?'Sb\} ~?5H0fab4>09gZy ̵"71y[}%$O2v;D\1u ˠbWIG]aI/F3/ilGGDjyCʙdOY@Tm~ENFnui $߼L6 |bE~22FW߈o~߄R{~XK`T bHON9ߊuXP^eYI( ó$/UXZ^w jq9(+t)6SՄlR@/aֈ[X u?wAWѡrP^5axu@)3 5A+Et}_w_0wqZ`SnxDUOy.Ф>\<9^+0Տb%WԨ S%MC:R<2b"8rUؓ_$ f l8('C$%|o莳N W{$Y%+Y]*[=$ɂ:^m!DêD%$\*koA&6-!gV)PnMtȉ-Kǃyz6A+F`)7Ya\ :"7xIDRhȥ@!86-iʌޔ&& vZs%j/BCd(JKg * ,Iy.:{@Wp4S ck!g+-Bb7Ujd镭. _YI~~l h$:Q{Ûuϻ|e>;ˈh縿kזSIײy^5*{rwl;7@֧%w)Z5( D9).nYTLC$4Ӛ$ޟn$Y&R\HM,=y%!˾GL9Rx? Rz{{€Wjt2Bnm:KLgc%@W֛Asee: |Z֫z@)!o[ +%H6VQ;؜iLo|*f8!9/eH (6YFnbQMNmmi_v7g@%2AǀjJhX(0 4wIBIIVꟹUg o|v!9 dkdpWQ͎P?iI\VDm:6 Iy.G2%O*Ӻm΋RiMaHc %SZfY HQ~p ) Rԭ{'e3׼FHJ4{ްrVf%g.@|. Bn]aȸ/snks83A^5yrZ,K-gZ+Jj^ګ!eo$ N lfY;M:GgqK%ۄC92زν^ylSPU??OD,@hu9e׷0!zC*uև ="PZ9re.aCqJWI9s| %΋JBÎD2AN~SOVmax}NJJ> 51$aZF#0ngQV;U}zY QCny#UE2{ =RkY`/5ݠ*A||^j\rNg;\)ds&x<*eɺAv8UPOnCKKTJ3f|'/=(<#R{x_ɌbJ8esG9 \!KocsLAMuVgfei1Tt_wA 4e@>gmUSԽUi-d\a.UU-Lxia[u, |cPsg_jo;R;:KXb.egi b'n"x>ޙ*\]y#6Ty8ʊhg!<̺N,@oWREgmpg ^<}^,U6)k5k!S~rly'TdWƙD٬lw־$t`&a%]Rɗb{%]m ] 0CzOٻ}c"WOD?u6tWZThHRc`\E -P=grGq} V~ e}0I |ψ1HNe\Qgby%IA$NfdSCW( p71]=\6MQLJV/gEU(jB>ܴ^Dm`bJs]0?le2E5՝W9 (]X;_] *E3nqzX6gL[gnZ¦MR#Dl!?S;Ն' NA$MR96 4dB+5TWE6eF 3Y)7ϟ\m M)*P@C\Em0|&MaXpy߳hIS@tK7H% ﲗx6HKv>j6oi6K/#z%X(Q4g\zV;k *6[K,RQ+Ob$I%UZ )?"J>2x/Q JT`낕ROQ ^?3WK/0TzvR*{D>U9_1 }?>d,g>$J6?Lm. a*yˆdC04& $-m5& "3  -D 5.rH^͉! Yoy,w?~PIŝP]OvI^| y$Q)oU&& `icY'}tdߜ^;++#Nglg%sȂb; 2MBT@$Y]eʷ$~&;$n{_nU:³ۅXa|"-|||!K@U:jWZ=#m4$q:u%*t.kB%'+ٓP cpnCiw+uɬ (>fR'ͭ⭆\ 9.E#=y#d)aKXty%aYx`4m BN -g?$x{XtV:~c{gmsϘ+5B,.lS;"pWc];f8WtsHuUYI9~=kR~/k׏mgX9,UМjQJU$F*ݻ^4gQfb;,/(tU]wNʣ ED|iz>ݝQ\ ҆*^C=F,c"U@,ԥZUsK8=UT ?.jHPxf/Cz>4 #|sB,NO }>{]f3Vu (PJI>H'ĹTI:̏t{5p@YpMas2@a~8ށ|qVoʉ30&5 2+6koZ#L}OH\ s.y/2VP6CF^c/'Pte$@lk ?z^{Ȟg^VD|^& {^kRf%EKLR5?Xlo|B$퇅ɹ 3#E0ċ+/n˦Ps kUɯНtm 4Ӑ2$IOH.z.޳ʿ)(sI 8Tb.ϫ8>8>@ʕ)삅I;@UU*C/tImy`տ)g lIgfI*e>(d'x=>j7%<ޝ3О0ZQ%M?AyEuRTa8Km ]h-a%fI|Jɔ Ӏ*nmiե̛C!@Qsk]N<,T-(̂*aK²,7"]"G>E}>mɋvK`GXبRbiN!>4Nvb=W9w"UOPWY: w?dP,lj0&z4OVQ&f"4-_2+r6sRR!{ <5'4`@=h?(_70pbI}æȉZфݯd=}TlmQg.TJe5`粀ϽKc 2^sb%‰8p T;v֒rIx!Qb__*@K\U2^oWlҒ#Ffںn{OUŐ| |_5r5i #"!YVKI*9*"&:{jC /!Xf zTW:13.,mɭ%6 6hj,ŕdU,kI}3=w(YBS.j~<Ǥ?;uoݟlRA!&Նu-Ӌu$癒ftղ5B"5{}0ѹ(Vy¬nyKQ]+9w6zH Ny3kz3x[l]i $wއt!.T [ٗc9Ωٱ0mmʜ_1d0ޛUa'0ה9-b= ƌ?ۮ2:OtRhᛂxIrj DL&|&2o +\dϺi:P4Dtii >/ 1,QinoIJeza>3FAN^uq\CigR*_^%q|$S|[Ӭ,\KGxoD1U˿kKtA\X^!\ ckkd7 hF嗜A2E}ŏ!sRHG%H0ߑ8yHt,L!$U;GC`o)7$MFhɺXo;E325_D6$$켪j)v!_+ kŬG_[OTB'S[ |x4bU)$E|!@j[?!ub6+-)MHX7/_J$XcA!rJU-< UoP. b; 9ҺC&Rh7!+y|xX))oPKݫYR{?3}7BKg 45&$8VY (j?bH^ʪ<2lgҐF氤ΐa4h#&/-?7aA@aӚ2WHjlOU\9%0 *AyLN5(/V,BwJS֓F̓E3mbȩ ÿ!iԝ̒!bA0,N- L%X}ݟ0g4aG}-}sJXjWЗު|c& [XW d:M&QegR.ʼi7¯~ă)_VjZ sIv+2xxz  ֈo6s1_y$Or_LZ` TQeTJgS0{|f1-#qi]E jm!-bԑk~Lu#[=no+)PϘ=s` !E:M.)$_'fiRˬ=a d5ӃJ$I+ EכߧXO>Hl`¿V#9L>ChzC8aA&{.{MSyUcha{qŮ]Z?hD!!0XG`{AIȠzb@ʞj K@QՄ+۶_RZF\܆Ix,?\v-4(fj|՘¤@Y &t䕣 UсϚu0HKqkЯ5Rr׹#"@WР ׻J lP5DEHmb(ɀcs/z]ٞ%*VET,(i9^FmAjdW KvgfE TWUk? N'Di)ս@LƁ[M"$IIQ4*ޞPd;+ --^TJ4*otuQA,jqaA5[h[ Z|1e6ZEmA/Qvjx5k+H,P`lQ}kFxlj4pNPZ0g'H Y'c-0(|/ƾw<jI/g*U[/Fxo2M=4WDþ 6'{kOwxJM$\PA\0spGՄ)}p&YkwBN*(+ Ubvˊ!hU4z߉ף{q3Ms񩙍{G|>ʀ<%{ Y?*X-s?Lsd,y |]+<ڨ *Yadz&eґr#+A"UAg931BoLV1Hq7T:Kn6F" $/}@Oi 1FV5NT5Hft3KNB>^ .df(!;̦s}n\HIRTtRQv1{EZ7ZpgyŘ;:nrٕIyU9onnE`!RfB{? A0HS6+ /]W^8NA~̖g-K+$wr&ɵVN~g~:#hAWPKzozW?;z#hg@{c~d=*c+ V}NU2\>gNi %>0d@q}ۧ6 K28?c+.R]:5?N@V糾˃ ٞ.jegPbZm [hBx$ퟶUtx!pf C.H$,yaM^tλHT^(4(:pY9C54ic0J^d`MN5ec*1 :z59TE}AmrBMGRZ%z6 8R>w/˘, h:ȫ _a+B[5Z);ߎb7"Î/ TWT^ [+o+a dɧz;*7N:wha0_hvltז &07^#L?4İ0`|'\|IJ JMI?;fz/]60[24="\C+ZT',< _jԥc_{IvOϸ$ˬGV#W ܿ =H HcI5[ -+Z[y뿶^>@]lUIJ,e(oqO%ﲚ՘m?s'_ϛ_XodeZ ~z{CGճ>96t̤i zx@+HlhHUJ L67TU O2 XNLSZ鹻wzyE\Nw}9PVNE4R\izSK"8W.'H[\R}Jzb K RKOA r^gЌiZlo9 h`)usPfAyvjK P~?*KYVyU|ٗH H7fyfFhxGE{(cR2k#P!C%%C` Uڃy%޺AflӇף\ teY7Ȥ5>P%yCJ}i!J"~/!L!w[}סE,DӬBr`ߤ8z` U% 1walIP Iٓ O vO.rpG)X1Mlg0yr-yQIOxϽz*{% W9@%.(ɃI"' `.^rABطx9'DLg&5y3Ҭ>mV`pErx4 mO$N1-`+1'*6˲s0[r(6.~f%7u'G,֦[i,bp/=ˤ~GuH&qﭧd{eZ M IDAT!P%)6wI,JOr' | VBj}STkeLt. 78-I7g R8=ߕ'zO 2^70TeP4/6>YgjwC$B4tߊჭ'Zda Q AId v\8s)hk4b! ;!Ug(mxސ}|YF{W1.q4O٩<Fo%JT <%&\CjH;dal֖kpӝ^9I_#46"e;'-]k]kUXAձ:4E_šaqhad4dv-* e+3tަg ؀5\քTkJw}sP]EwN[dJX-$h^VoKG=/g*8Re`Y4xnL\ :oʍ[o8<鶧0s(2("utxl9-zL$MB,[Cgk"YM^аjixetrƖw>ZqyU;ߑiL?8^ #Ow52%;jJ&[nX$(/ٙ6{3>V;," WE .2 A%幜 bz6e w0l&$^ɻN t>ѩvҜwϛ"+0r֒vΜ!H*mD)FaMa!#+-Ra8he6DUY1/mJVM(b?IJLNbMiw|yo PB}/wf!lQy1.cY$aҠU?sKLeL]]0Ԙd?M *'9)N\S&Rk)CIvС\z[0+ ,ARZKg17g婝 .҄jW_@[#i"EӎGw(<'BV]l}pHsx8eA*$U*9?w=8a[BWNuh9B=a𒠲9,@Qg~Lad+ULy&v&DKl&j;`Ĩ0~mfI{gdW?+!|\+ 40vkhDSӲr}Q] Lm+-f4BUK)vsR?34Tt$sw=jFHD> bOP:II!+'z8a2fi ZU@6m˗vj4²t@p*T\y>RD/2k:>[䁣{BOW~ -9n J!T4yeiI D€ :E=9!V֐# _4u 0Rjvj~ll޶bJ$7[[jwDo]zHPIg%y GYSzT_>UunKapt륢ϤZ^6[{VD8Ѣx@~XeEKag&E|߳xl^$rQbgCddSو'* )Mu?w-O(c 9[Gjk&zPVz Z/ְ ds#9cʈygt'+@6_^<[J9Ci1PD>/3-]CY͟L3(]H]W |`+`}p~X "K)ȭyϛ]7;QEйr40^`bgsg#ЧxIWr}>dK[(O6 q޿dE ؛EyG z遼-0h*[Juy25m5SNZB2j|&[/@d[E(N~Jy'MxQ7U( M"|]^XĞ|'IѲC?XEt_BmzeF@AZOASfVbINoeȺ*IL Q}7F%4[FTH[#ٟT7U y\$M9-ζ/IJ-O&Z `h132p#gA\Q*;~ȶp%N)Lo u()OG($P. bZncҗ,33R38tWk]..6d]@$ r0(zkxGy~)YΔPNTS"Ɓ:{ @3 Bwd+fqJHs\@rvBZ7UsuTstZ{PYZ2гڔxe- $W'G '">Xb'sǎN1V`[Ҳ286эФ_^(&m~IGr¤)/2",s"Xӥ[wAyr۹N'+?>I *jVAnFr%Deya9As1F,'T\4wLJNަ;3tid{܁)95{fWUeZ(*#?Y(Aal@r\RՓ q\ӘaW- Fhpس.xk p?sݏ$UzgcZj .LF`scs6ˀiYUujϋsڣw+QsJ}F;P=77$0j*.NKp~ &.*:Bm C5΀Zh߯!؜ӧTM 6[1WXwzGmZzG*dz' 9\ V\eSy X(Db;7W0: oeJ,zUiw%B{^mV<{RДWwI2U"ٙa 0Ew"~VM-Kfo[:Ε4gqލN~YR?mH|FٜS$u?{(Kt6Z  {gY3 ; c G7VL4DW'd2ڟ G$.kꀽҡ9J cF u$wrz Z\LxڡL63ĮB)]5Q쓔XfH瓖yACҼk`: C_} ?ːrY|:Y .Q[ׂ8'i Eb<10&[uB5F[}DU%"F|n6Vd$"hz~/b.YB[J /`>ON=oF˸kbu3 NR`(J]v5H1ۙ7|wQY$aD7J`hq mPHH^'0ɯF0)4R49+1ihӖC€D`EZ-"!Lasx^ ?TUyVJ2-aYf 0SV$s Fo_g:+Yj. * :tV\/} :Pv6%gzjQbos& ϝgt{\YC!@Կl675*_ZŧƻO6BꯑFFlc|fhb!Ia*-fb6 E\‰D2{$]_CR&\F#"Bp/k#}9C.#vi`=FrbrvQ{ O9h,Ƞ;)&g1G7e? `}3s=44V3g/{ JA\}0bDD:L6] !,d ?DF_C{;m TC&s|6PqA;Bm5ܸQd-"8Jw>w<<ԄvLG6)Zgÿ Ocg$Y8B0<>\%Y2?]~^FO_<|8$;2,Bvb&V:1mزRP(xq l5"}ibŽeNG珼-N~&?2Z#yYMQ)vwfe6RXL)a0 J׏>'To-v ?$GǦD!qXcE_H- ٲFm ڛakc˿ \q*dc JQf2" T-)*&"N ]yz6NreJ (~Ǫ`s/$(.0 `AG dWx Yq>׭ZU T Q?0!z0SwIaJ\P`?llQ0d|~LfH)̃$~je|) IDAT0M3s^g&Tfv3rR[%,@C]eÓn~ gE<>7;;d|&rT-^${Z@$g +0j75Nv~^/,"톥޹a}pHj.8n+(,Kf@*e _ p13[i rTy3*#K/))q9hCCh TUVdzzrV=/Cga+Y$?YwaX,FMac ]{"wP~rZhW~V6pH.PVq0CZl}dS6IjNe-d&X?|HawɒY^yqoq=28eqJfh*vD|!'3 sg͵_mbaI7J5;DC^hh WxUpr_B$k~,9\Y6 3 Ga: ~I7I&ZcZ8; ;Og0 թu?KZ2`G$2r < R.td؂pX !걮ۀ>Ps%dy Ap1\^jfi%Z(2[:M8CRe4ǫ@MKs\K? +rijA2zya&M5uOI LF`@9!2(^:]UDWe;\B߯uRu\ӋVJʅԐn:ucsp ;mn!MwZ磤t$yx7{OȔ e5r\HGxΈgl״DM/R療oWY6l/wT_o7qO]j)mi5r86C]sb5Ρ7xd ZIt;ǴMig0+p85V23ys#K(1/M*ho_ߨ1 4Q*a;e\J;;_|ωJn+E~}|z/dYk2Y~/3;=s=!,2>_A8sfIn9$ 6)Z3C(ܪMg7Xa p qn;pf^!3vO!́! &Z͔ J¤ v)\VˡoW[>˦"5)!j 4T'Ah =@!x#cay{H0Il_ఋ9 >M SjΦD43!4&K;/ÜP9:E錰UJ}ظj`'Xs?gRj4Z,rv-)^_bA=H%b6q?܃ wwZU/V?{./\âߍ3[hhH6axq^kJfya MWH?% w3_` >vx I?kžȼ^A0mM_~{͖ޙIUx2s/&}iYwR>:HG3gS($C~`Vy׬R0j̕:Jc5y0, ̹ğ 8G3u<ǫ*H$ASGF0xmK Js^JtMDk))s$d #b?ϻv|s9{?hY=dMt{HM2~'GUSey%s1.̟ [*SHu*g86"+[aSnve--uiu.AEX"9߽Ba9vu Sg{lWvGDgi}YS)Q `3tk^9C~ț*\X/GQuy(+zo+)0ك3Шwƒk(-> :V /Yr&K@&Ft1wN3u]b#N Z(rcq; y!H_P*Qf֝.{r&wmd`0αAlHK9 8yN4P ]P!"65kPsYA ݃:I_#26 _ -0/94Csu %ϗfwfGř!d#"ClJ7lgb (\Jy6V_@%qT 99MoТ ]$3鐐0:VDt"Bq59!Q@ZX'u^|ϧ ~wwJaOx{> C^]0%c{2fEX'*j]mO$-VXW -09;gNlQPl y?z.?v F}{ ؛*x>t.P8EK_֫Qԥ!ڢAM6|U5(/_,l .33ޅu&K2"/5\(9 Xtǐ eʼtФgŪp`uNMh5Y~auq(ƽV"RMń~R7֜F ^vnf[(ZVx+W,eE:ْuI Tienhm2}넴=0|şʙߟ'Y9"6Mݠ 7-aISdW~ۡ^n02Jܣ1= Wma6RRpj6:;jtT^^T\=L+F:l3HgZKԧV;R&Orr. Rq=^839'ͧڕ3$4h֑\^ wU,-tzrKVWM\Y4v\;k\3W+1{sʊfulxF3Ӓ_Zjbrq."$$)TJn(hE4hMAOUoˍeȡ zM bԖvixW_܄NRd+??-fW<(|e`^0U=ڠMV*/ˠt0ɺTʡ\K贸1yӂ fc<_g&̜eTaf+=$KJ/ZWsjGހ7<(;"rYhΎ 4U:`aelh":;5TtPLQ\U|_Y!g5#\z^*!WqzL^?N?tkw]Ebq2|j 1o;p[ PcVIJ֑*b[S}i P<Swt߫y V`VC: |HVeB3[FP{2g$0$'l!L` GQXT'-a |he~g[ :^ h;Aі M}\ cӁ-r6լaXh; xl8L]<Ò{?ݏai]vYrWlFl M xM;cj kߟ bY@d9>r ?S"4uH;n.<ڳ$4`Js90li>sL}~u) eARCK5s]M?&:LMDQ.˳Z)4XVV)KO\Oдɤlms2hoUeO٭"Z})\ QRNs%$Wv_`騾wW>ӜZ5 ocUnc,A J,1[ahi S(+D%RLƀ㉥V~ yjF%^pkFg^jkBfsxD۰*EC.z8eD;:gF):F:4$,U1A=gpR 2#ȝ$\P3\{[-ix'$>5&UfGs<~J>x\2Tzw^l Ғ2ʫ.>D "$³c'brK 3=G,yIn 9|Ղ'łk܎<9zT-kAx;lj2=2)\nqģ{א!v@>{ q;pTs^ߛC!G1V  ]Y@hB4rM*`|H!d=[ן bxsnmdΦCfKXO$EV&dFWC Sb^i)R,w̦]d^p9-hp]Ox@L-"z s(Y8zXa0o@Õ[-0'h/da~iM'C&arp'! f'fƛ>҆2{4x_+8d[7!H3Tăm$]LA^}\' Of]%?~.{eol ئ1uL]R^a%&;ԓz!= z ;PG'8<-AoxWC՟T" ʱ7մdno{ߠ%yon@ y^CjO&v 6%I2XfƲ<¤&B:82BfX [*XC8={]ƒ(%"VIUU7:V%`}9,.5= \`]P|Dʝ[}maJtz3zdDjAkh]ѭb.G]-yB\땳wR48-]=ǨiG% e9¦:Xu~.hg,Z J u{[fBNCF'"pq؄U@p@Ȉ#1]ev\nDO3Ĉq/%%?l,l']W{) "-.- Lg6HGNԵ~kC+M:X^ Yd$ uΝkj=ȕ#ߠŶ{3δTgF0mJ,0Rgm۰_qrץ1K9Ȑ•Yt73bkԹ;TT룟}10].h&#!ُAS uyޠY: lzVUJTQK%$} I`ey5Q 'Dޢ»T詭0l.]^ ΂nSޑ/|j1ԺSep}|~Zl%UL/y Ш͋T\β$N^lDHKU" ,:-K*TD!~_3`F̸!.>1T?ҎCK=r)`tm$wfD 2|B, w o*Vik)t@u4UmZ#W^p-B XΒuP>^enWԆEa@qQ6J;rJˊCa}\m = HR)tX+b DIyI('t0(t.PdLe |GAמ?ۊ?l:JE88ߛ@nip b+4ռ6[-"#VpKj {2*f7 h䞤l{lj yn*.LQބ?5睅RJ9M